diff --git a/.github/scripts/extract_percentages.py b/.github/scripts/extract_percentages.py deleted file mode 100644 index 1087d2d2af..0000000000 --- a/.github/scripts/extract_percentages.py +++ /dev/null @@ -1,64 +0,0 @@ -from bs4 import BeautifulSoup -import os -import sys -import time - -def log(message): - timestamp = time.strftime("%Y-%m-%d %H:%M:%S") - print(f"[{timestamp}] {message}") - -def extract_similarity_percentage(html_file): - try: - with open(html_file, 'r', encoding='utf-8') as file: - soup = BeautifulSoup(file, 'html.parser') - file_name_tag = soup.select_one("#textright > div > h4") - if file_name_tag: - percentage_text = file_name_tag.find("span", class_="text-secondary small").text.strip("()%") - return int(percentage_text) - else: - return None - except Exception as e: - log(f"Error processing file {html_file}: {e}") - return None - -def process_html_files(directory, threshold=50): - log("Processing HTML files for plagiarism results...") - high_plagiarism_detected = False - high_plagiarism_files = [] - for filename in os.listdir(directory): - if filename.endswith(".html"): - file_path = os.path.join(directory, filename) - percentage = extract_similarity_percentage(file_path) - if percentage is not None and percentage >= threshold: - log(f"High plagiarism detected - {filename.replace('.html', '.js')}: {percentage}%") - high_plagiarism_files.append(filename.replace('.html', '.js') + ": " + str(percentage) + "%") - high_plagiarism_detected = True - return high_plagiarism_detected, high_plagiarism_files - -def write_to_markdown(file_path, lines): - with open(file_path, 'w') as md_file: - for line in lines: - md_file.write(line + '\n') - log(f"Markdown file written to {file_path}") - -def main(): - if len(sys.argv) != 2: - log("Incorrect number of arguments provided.") - print("Usage: python extract_percentages.py ") - sys.exit(1) - - saved_dir_path = sys.argv[1] - high_plagiarism_detected, high_plagiarism_files = process_html_files(saved_dir_path) - - markdown_lines = ["# Plagiarism Report"] - if high_plagiarism_detected: - log("High plagiarism percentages detected.") - markdown_lines.append("## Game overlap report:") - markdown_lines.extend(high_plagiarism_files) - write_to_markdown("plagiarism-report.md", markdown_lines) - sys.exit(1) - else: - log("No high plagiarism percentages detected.") - log("Plagiarism report generation completed.") -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/.github/scripts/plagiarism_check.py b/.github/scripts/plagiarism_check.py index 4946bc127e..01a8113c8f 100644 --- a/.github/scripts/plagiarism_check.py +++ b/.github/scripts/plagiarism_check.py @@ -1,87 +1,158 @@ -import sys -import subprocess -import os -import glob -import shutil -import time - -def log(message): - timestamp = time.strftime("%Y-%m-%d %H:%M:%S") - print(f"[{timestamp}] {message}") - -def run_compare50(single_file, directory, output_dir, saved_dir_base): - try: - if not os.path.exists(saved_dir_base): - os.makedirs(saved_dir_base) - log("Created base directory for saved files.") - - all_js_files = glob.glob(os.path.join(directory, "*.js")) - total_files = len(all_js_files) - current_file_number = 0 - - for file in all_js_files: - current_file_number += 1 - if os.path.abspath(file) == os.path.abspath(single_file): - log(f"Skipping comparison for the same file: {file}") - continue - - log(f"Processing file {current_file_number} of {total_files}: {file}") - if os.path.exists(output_dir): - shutil.rmtree(output_dir) - log(f"Cleaned existing output directory: {output_dir}") - - command = [ - "compare50", - f'"{single_file}"', - f'"{file}"', - "--output", f'"{output_dir}"', - "--max-file-size", str(1024 * 1024 * 100), - "--passes", "text" - ] - - command_str = ' '.join(command) - log(f"Running command: {command_str}") - subprocess.run(command_str, shell=True, check=True) - log("Compare50 command executed successfully.") - - match_file = os.path.join(output_dir, "match_1.html") - - if os.path.exists(match_file): - new_filename = os.path.basename(file).replace('.js', '.html') - saved_file_path = os.path.join(saved_dir_base, new_filename) - log(f"Match found. Moving {match_file} to {saved_file_path}") - shutil.move(match_file, saved_file_path) - else: - log(f"No match found for file: {file}") - - except subprocess.CalledProcessError as e: - log(f"Error in running Compare50: {e}") - except Exception as e: - log(f"An error occurred: {e}") - -def main(): - if len(sys.argv) != 5: - log("Incorrect number of arguments provided.") - print("Usage: python plagiarism_check.py ") - sys.exit(1) - - single_file = sys.argv[1] - directory = sys.argv[2] - output_dir = sys.argv[3] - saved_dir_base = sys.argv[4] - - log(f"Starting plagiarism check with the following arguments:") - log(f"Single file: {single_file}") - log(f"Directory: {directory}") - log(f"Output directory: {output_dir}") - log(f"Saved directory base: {saved_dir_base}") - - log(f"Listing all JavaScript files in directory '{directory}':") - for f in glob.glob(os.path.join(directory, "*.js")): - log(f) - - run_compare50(single_file, directory, output_dir, saved_dir_base) - log("Plagiarism check completed.") - -if __name__ == "__main__": - main() \ No newline at end of file +#!/opt/homebrew/bin/python3 +from os import walk +import jsbeautifier +from multiprocessing import Pool +import nltk +from functools import cmp_to_key +import argparse +import re +import random + + +def load_files_from_dir(dir, suffix): + all_game_paths = [] + for (dirpath, dirnames, filenames) in walk(dir): + for filepath in filenames: + full_file_path = dirpath + "/" + filepath + if full_file_path.endswith(suffix): + all_game_paths.append(full_file_path) + return all_game_paths + + +def load_data(path): + dd = "".join(open(path, "r+").readlines()) + dlen = len(dd) + if dd is None or dlen == 0: + dd = "" + + return preprocess(dd) + + +def format_code(code): + options = jsbeautifier.default_options() + options.wrap_line_length = 80 + beautified_code = jsbeautifier.beautify(code, options) + return beautified_code + + +def remove_whitespace(code): + code = "".join([s for s in code.splitlines(True) if s.strip("\r\n")]) + return code + + +def filter_code(code): + code = re.sub('bitmap`.*?`', '', code, flags=re.MULTILINE | re.DOTALL) + code = re.sub('tune`.*?`', '', code, flags=re.MULTILINE | re.DOTALL) + code = re.sub('map`.*?`', '', code, flags=re.MULTILINE | re.DOTALL) + code = re.sub('^/\\*(.|[\r\n])*?\\*/', '', code, flags=re.DOTALL) + code = re.sub('(//)(.+?)(?=[\n\r]|\\*\\))', '', code, flags=re.MULTILINE | re.DOTALL) + return code + + +def preprocess(code): + return format_code(remove_whitespace(filter_code(code))) + + +def text_length_score(text1, text2): + return 1 - abs(len(text1) - len(text2)) / (len(text1) + len(text2)) + + +def tokenize(text, num_tokens): + return set(nltk.ngrams(text.lower().split(" "), num_tokens)) + + +def symmetrical_diff_score(text1, text2, num_tokens): + set1 = tokenize(text1, num_tokens) + set2 = tokenize(text2, num_tokens) + symmetrical_difference = set1.symmetric_difference(set2) + return 1.0 - (len(symmetrical_difference) / (len(set1) + len(set2))) + + +def compare(document, other_document): + len_score = text_length_score(document, other_document) + + return len_score * 0.1 + \ + symmetrical_diff_score(document, other_document, 1) * 0.2 + \ + symmetrical_diff_score(document, other_document, 2) * 0.3 + \ + symmetrical_diff_score(document, other_document, 3) * 0.4 + + +class DocumentComparison: + def __init__(self, path, score): + self.path = path + self.score = score + + +def create_doc_comparison(item): + return DocumentComparison(item[2], compare(item[0], item[1])) + + +def find_matching_docs(input_doc_path, all_games, threshold, log): + all_game_paths = all_games[:] + all_game_paths.remove(input_doc_path) + input_document = load_data(input_doc_path) + + with Pool() as P: + if log: + print("Comparing submission against %d gallery entries..." % len(all_game_paths)) + + # Create an array of multiple copies of the input document. This is required for parallelization. + input_docs = [input_document for i in range(len(all_game_paths))] + + # Zip input document array along w/ game paths and game data + all_data = zip(input_docs, P.map(load_data, all_game_paths), all_game_paths) + + # Rank documents + results = sorted(P.map(create_doc_comparison, all_data), key=cmp_to_key(lambda i1, i2: i2.score - i1.score)) + + if log: + print("Done!") + documents_exceeding_threshold = list(filter(lambda item: item.score > threshold, results)) + top_matches = documents_exceeding_threshold[:5] + if log: + if len(documents_exceeding_threshold) > 0: + print("%d gallery entries match the submission too closely." % len(documents_exceeding_threshold)) + else: + print("No similar documents found.") + if len(top_matches) > 0: + print("Here are the top %d matches" % len(top_matches)) + for document in top_matches: + print("%f - %s" % (document.score, document.path)) + + return len(documents_exceeding_threshold) + + +def check_all_games(): + global all_gallery_items + num_samples = 800 + all_gallery_items = load_files_from_dir(args.doc_dir, ".js") + random.shuffle(all_gallery_items) + all_good_games = [] + for gallery_item in all_gallery_items[:num_samples]: + print("Processing %s" % gallery_item) + if find_matching_docs(gallery_item, all_gallery_items, 0.5, False) == 0: + all_good_games.append(gallery_item) + print("Number of good games: %d" % len(all_good_games)) + print("Percentage of good games: %d%%" % int(float(len(all_good_games)) / float(num_samples) * 100.0)) + exit(1) + + +if __name__ == '__main__': + # run_tests() + # check_all_games() + + parser = argparse.ArgumentParser( + description='Compare an input javascript file w/ the contents of a directory, and returns similarity scores') + parser.add_argument('doc_dir', type=str, help='a path to a directory of documents') + parser.add_argument('threshold', type=float, + help='similarity threshold (above which duplicate warnings will be returned)') + parser.add_argument('input_doc', type=str, help='a path to an input document') + args = parser.parse_args() + + all_gallery_items = load_files_from_dir(args.doc_dir, ".js") + + if args.input_doc not in all_gallery_items: + print("Sorry - the input document must be a reference into the gallery directory.") + exit(1) + num_bad_docs = find_matching_docs(args.input_doc, all_gallery_items, args.threshold, True) + exit(0 if num_bad_docs == 0 else 1) diff --git a/.github/workflows/check_plagiarism.yml b/.github/workflows/check_plagiarism.yml index 46dc35ca42..f7131c5bef 100644 --- a/.github/workflows/check_plagiarism.yml +++ b/.github/workflows/check_plagiarism.yml @@ -20,8 +20,8 @@ jobs: with: python-version: '3.10' - - name: Install Compare50 && beautifulsoup4 - run: pip install compare50 beautifulsoup4 + - name: Install python requirements + run: pip install jsbeautifier nltk argparse - name: Get list of changed files id: changed-files @@ -34,37 +34,4 @@ jobs: - name: Run Plagiarism Detection Script if: env.FILES != '' - run: python .github/scripts/plagiarism_check.py "${{ env.FILES }}" games output_dir saved_dir - - - name: Extract and Display Similarity Percentages - run: python .github/scripts/extract_percentages.py saved_dir/ - id: extract-percentages - - - name: Upload Compare50 Results as Artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: compare50-results - path: saved_dir/ - - - name: Save PR number to file - if: always() - run: echo ${{ github.event.pull_request.number }} > pr_number.txt - - - name: Upload PR Number as Artifact - if: always() - uses: actions/upload-artifact@v4 - with: - name: pr-number - path: pr_number.txt - - - name: Upload Plagiarism Report as Artifact - if: always() - uses: actions/upload-artifact@v4 - with: - name: plagiarism-report - path: plagiarism-report.md - - - name: Check for High Plagiarism Percentages - if: always() && steps.extract-percentages.outcome == 'failure' - run: echo "Plagiarism percentage over threshold detected." \ No newline at end of file + run: python ./.github/scripts/plagiarism_check.py games 0.5 "${{ env.FILES }}" diff --git a/.github/workflows/workflow_run.yml b/.github/workflows/workflow_run.yml deleted file mode 100644 index 16ead939d1..0000000000 --- a/.github/workflows/workflow_run.yml +++ /dev/null @@ -1,165 +0,0 @@ -name: Send Plagiarism Result On CI Complete - -permissions: - actions: read - contents: read - issues: write - pull-requests: write - -on: - workflow_run: - workflows: ["Plagiarism Checker"] - types: - - completed - -jobs: - on_pr_finish: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: List available artifacts with detailed logs - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const runId = ${{ github.event.workflow_run.id }}; - console.log(`Fetching artifacts for workflow run ID: ${runId}`); - const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: runId - }); - console.log(`Artifacts found: ${artifacts.data.total_count}`); - for (const artifact of artifacts.data.artifacts) { - console.log(`Artifact name: ${artifact.name}, ID: ${artifact.id}, Size: ${artifact.size_in_bytes} bytes`); - } - - - name: Download PR Number Artifact - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const fs = require('fs'); - const path = require('path'); - const runId = ${{ github.event.workflow_run.id }}; - const artifactName = 'pr-number'; - console.log(`Checking for artifact ${artifactName} from workflow run ID: ${runId}`); - try { - const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: runId - }); - const artifact = artifacts.data.artifacts.find(a => a.name === artifactName); - if (!artifact) { - console.log(`Artifact '${artifactName}' not found, skipping download.`); - return; - } - const artifactData = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: artifact.id, - archive_format: 'zip', - }); - const artifactPath = path.join(process.env.GITHUB_WORKSPACE, `${artifactName}.zip`); - fs.writeFileSync(artifactPath, Buffer.from(artifactData.data)); - console.log(`Artifact ${artifactName} downloaded to ${artifactPath}`); - require('child_process').execSync(`unzip -o ${artifactPath} -d ${process.env.GITHUB_WORKSPACE}`); - const prNumber = fs.readFileSync(path.join(process.env.GITHUB_WORKSPACE, 'pr_number.txt'), 'utf8').trim(); - console.log(`PR Number: ${prNumber}`); - } catch (error) { - console.log(`Error occurred: ${error.message}`); - console.log('Continuing workflow execution despite the error.'); - } - - - name: Download Plagiarism Report Artifact from Another Workflow Run - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const fs = require('fs'); - const path = require('path'); - const runId = ${{ github.event.workflow_run.id }}; - const artifactName = 'plagiarism-report'; - console.log(`Downloading artifact '${artifactName}' from workflow run ID: ${runId}`); - try { - const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: runId - }); - const artifact = artifacts.data.artifacts.find(a => a.name === artifactName); - if (!artifact) { - console.log(`Artifact '${artifactName}' not found, skipping download.`); - return; - } - const artifactData = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: artifact.id, - archive_format: 'zip', - }); - const artifactPath = path.join(process.env.GITHUB_WORKSPACE, `${artifactName}.zip`); - fs.writeFileSync(artifactPath, Buffer.from(artifactData.data)); - console.log(`Artifact ${artifactName} downloaded to ${artifactPath}`); - require('child_process').execSync(`unzip -o ${artifactPath} -d ${process.env.GITHUB_WORKSPACE}`); - } catch (error) { - console.log(`Error occurred: ${error.message}`); - console.log('Continuing workflow execution despite the error.'); - } - - - name: Check if Plagiarism Report Exists - id: check-report - run: | - if unzip -l plagiarism-report.zip; then - echo "REPORT_EXISTS=true" >> $GITHUB_ENV - else - echo "REPORT_EXISTS=false" >> $GITHUB_ENV - fi - - - name: Unzip Plagiarism Report Artifact - if: env.REPORT_EXISTS == 'true' - run: unzip -o plagiarism-report.zip -d ${{ github.workspace }} - - - name: Fetch Pull Request Comments - id: fetch-comments - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const fs = require('fs'); - const path = require('path'); - const prNumber = fs.readFileSync(path.join(process.env.GITHUB_WORKSPACE, 'pr_number.txt'), 'utf8').trim(); - const comments = await github.rest.issues.listComments({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: prNumber - }); - const hasPlagiarismComment = comments.data.some(comment => comment.body.includes('[Plagiarism Check Result]')); - console.log(`Has Plagiarism Comment: ${hasPlagiarismComment}`); - return hasPlagiarismComment; - - - name: Post Markdown as Comment - if: env.REPORT_EXISTS == 'true' && steps.fetch-comments.outputs.result != 'true' - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const fs = require('fs'); - const path = require('path'); - const prNumber = fs.readFileSync(path.join(process.env.GITHUB_WORKSPACE, 'pr_number.txt'), 'utf8').trim(); - const markdownPath = path.join(process.env.GITHUB_WORKSPACE, 'plagiarism-report.md'); - console.log(`Reading the Markdown report from: ${markdownPath}`); - let markdownContent = fs.readFileSync(markdownPath, 'utf8'); - console.log("Fetching associated pull request..."); - console.log(`Found associated pull request: #${prNumber}`); - console.log("Posting the Markdown content as a comment..."); - const commentResponse = await github.rest.issues.createComment({ - issue_number: prNumber, - owner: context.repo.owner, - repo: context.repo.repo, - body: markdownContent - }); - console.log(`Comment posted successfully: ${commentResponse.data.html_url}`); \ No newline at end of file diff --git a/.gitignore b/.gitignore index 1ea9c8e36d..f3b0646c3a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,8 +6,4 @@ yarn-error.log .env dist/ games/metadata.json -public/*.json -firmware/spade/src/rpi/jerry/lib/*.a -firmware/spade/src/rpi/jerry/lib/libjerry-core.a -firmware/spade/src/rpi/jerry/lib/libjerry-ext.a -firmware/spade/src/rpi/jerry/lib/libjerry-port-default.a \ No newline at end of file +public/*.json \ No newline at end of file diff --git a/README.md b/README.md index 22ca508d0f..be79a75368 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Join the `#sprig` channel on the [Hack Club Slack](https://hackclub.com/slack/) - `#sprig-platform`: For discussion of development of the Sprig platform as a whole. - `#sprig-gaming-controller`: Building a case for the Sprig console to make it a portable gaming controller. -- `#sprig-emulator`: Development of emulator. +- `#sprig-emulator`: Development of a Gameboy emulator for Sprig. - `#sprig-multiplayer`: Development of multiplayer support. - `#sprig-lora`: Development of Sprig-Lora communicator. - `#sdsprig`: Development of Sprig loading from an SD Card. diff --git a/firmware/spade/.gitignore b/firmware/spade/.gitignore index 7a7a11b987..fee0b66dbf 100644 --- a/firmware/spade/.gitignore +++ b/firmware/spade/.gitignore @@ -5,6 +5,8 @@ rpi_build/ .DS_Store src/pc/jerry/include src/pc/jerry/lib +src/rpi/jerry/include +src/rpi/jerry/lib CMakeFiles/ Makefile cmake_install.cmake @@ -17,3 +19,4 @@ game.min.js dockerBuildLog.txt spade.uf2 spade.elf +src/shared/version.h diff --git a/firmware/spade/docker/dockerfile b/firmware/spade/docker/dockerfile index 11f63e3dbe..891a9e1829 100644 --- a/firmware/spade/docker/dockerfile +++ b/firmware/spade/docker/dockerfile @@ -1,6 +1,6 @@ FROM alpine:3.19 -RUN apk add git python3 clang make cmake entr uglify-js gcc-arm-none-eabi g++-arm-none-eabi gdb-multiarch +RUN apk add git python3 clang make cmake entr uglify-js gcc-arm-none-eabi g++-arm-none-eabi gdb-multiarch gcc COPY ./importBuildRepos.sh /opt/importBuildRepos.sh diff --git a/firmware/spade/src/pc/main.c b/firmware/spade/src/pc/main.c index c5a469be80..d284c60756 100644 --- a/firmware/spade/src/pc/main.c +++ b/firmware/spade/src/pc/main.c @@ -224,8 +224,7 @@ static void js_init(char *file, int file_size) { strcpy(combined, engine_script); strcpy(combined + sizeof(engine_script) - 1, file); - const jerry_length_t combined_size = sizeof (engine_script) - 1 + file_size; - js_run(combined, combined_size); + js_run(combined, 0); } /** diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-compiler.h b/firmware/spade/src/rpi/jerry/include/jerryscript-compiler.h deleted file mode 100644 index 01c3accdc5..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-compiler.h +++ /dev/null @@ -1,175 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_COMPILER_H -#define JERRYSCRIPT_COMPILER_H - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** \addtogroup jerry-compiler Jerry compiler compatibility components - * @{ - */ - -#ifdef __GNUC__ - -/* - * Compiler-specific macros relevant for GCC. - */ -#define JERRY_ATTR_ALIGNED(ALIGNMENT) __attribute__((aligned(ALIGNMENT))) -#define JERRY_ATTR_ALWAYS_INLINE __attribute__((always_inline)) -#define JERRY_ATTR_CONST __attribute__((const)) -#define JERRY_ATTR_DEPRECATED __attribute__((deprecated)) -#define JERRY_ATTR_FORMAT(...) __attribute__((format(__VA_ARGS__))) -#define JERRY_ATTR_HOT __attribute__((hot)) -#define JERRY_ATTR_NOINLINE __attribute__((noinline)) -#define JERRY_ATTR_NORETURN __attribute__((noreturn)) -#define JERRY_ATTR_PURE __attribute__((pure)) -#define JERRY_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) - -#define JERRY_LIKELY(x) __builtin_expect(!!(x), 1) -#define JERRY_UNLIKELY(x) __builtin_expect(!!(x), 0) - -#endif /* __GNUC__ */ - -#ifdef _MSC_VER - -/* - * Compiler-specific macros relevant for Microsoft Visual C/C++ Compiler. - */ -#define JERRY_ATTR_DEPRECATED __declspec(deprecated) -#define JERRY_ATTR_NOINLINE __declspec(noinline) -#define JERRY_ATTR_NORETURN __declspec(noreturn) - -/* - * Microsoft Visual C/C++ Compiler doesn't support for VLA, using _alloca - * instead. - */ -void * __cdecl _alloca (size_t _Size); -#define JERRY_VLA(type, name, size) type *name = (type *) (_alloca (sizeof (type) * size)) - -#endif /* _MSC_VER */ - -/* - * Default empty definitions for all compiler-specific macros. Define any of - * these in a guarded block above (e.g., as for GCC) to fine tune compilation - * for your own compiler. */ - -/** - * Function attribute to align function to given number of bytes. - */ -#ifndef JERRY_ATTR_ALIGNED -#define JERRY_ATTR_ALIGNED(ALIGNMENT) -#endif /* !JERRY_ATTR_ALIGNED */ - -/** - * Function attribute to inline function to all call sites. - */ -#ifndef JERRY_ATTR_ALWAYS_INLINE -#define JERRY_ATTR_ALWAYS_INLINE -#endif /* !JERRY_ATTR_ALWAYS_INLINE */ - -/** - * Function attribute to declare that function has no effect except the return - * value and it only depends on parameters. - */ -#ifndef JERRY_ATTR_CONST -#define JERRY_ATTR_CONST -#endif /* !JERRY_ATTR_CONST */ - -/** - * Function attribute to trigger warning if deprecated function is called. - */ -#ifndef JERRY_ATTR_DEPRECATED -#define JERRY_ATTR_DEPRECATED -#endif /* !JERRY_ATTR_DEPRECATED */ - -/** - * Function attribute to declare that function is variadic and takes a format - * string and some arguments as parameters. - */ -#ifndef JERRY_ATTR_FORMAT -#define JERRY_ATTR_FORMAT(...) -#endif /* !JERRY_ATTR_FORMAT */ - -/** - * Function attribute to predict that function is a hot spot, and therefore - * should be optimized aggressively. - */ -#ifndef JERRY_ATTR_HOT -#define JERRY_ATTR_HOT -#endif /* !JERRY_ATTR_HOT */ - -/** - * Function attribute not to inline function ever. - */ -#ifndef JERRY_ATTR_NOINLINE -#define JERRY_ATTR_NOINLINE -#endif /* !JERRY_ATTR_NOINLINE */ - -/** - * Function attribute to declare that function never returns. - */ -#ifndef JERRY_ATTR_NORETURN -#define JERRY_ATTR_NORETURN -#endif /* !JERRY_ATTR_NORETURN */ - -/** - * Function attribute to declare that function has no effect except the return - * value and it only depends on parameters and global variables. - */ -#ifndef JERRY_ATTR_PURE -#define JERRY_ATTR_PURE -#endif /* !JERRY_ATTR_PURE */ - -/** - * Function attribute to trigger warning if function's caller doesn't use (e.g., - * check) the return value. - */ -#ifndef JERRY_ATTR_WARN_UNUSED_RESULT -#define JERRY_ATTR_WARN_UNUSED_RESULT -#endif /* !JERRY_ATTR_WARN_UNUSED_RESULT */ - -/** - * Helper to predict that a condition is likely. - */ -#ifndef JERRY_LIKELY -#define JERRY_LIKELY(x) (x) -#endif /* !JERRY_LIKELY */ - -/** - * Helper to predict that a condition is unlikely. - */ -#ifndef JERRY_UNLIKELY -#define JERRY_UNLIKELY(x) (x) -#endif /* !JERRY_UNLIKELY */ - -/** - * Helper to declare (or mimic) a C99 variable-length array. - */ -#ifndef JERRY_VLA -#define JERRY_VLA(type, name, size) type name[size] -#endif /* !JERRY_VLA */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYSCRIPT_COMPILER_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-config.h b/firmware/spade/src/rpi/jerry/include/jerryscript-config.h deleted file mode 100644 index 8be977a760..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-config.h +++ /dev/null @@ -1,734 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_CONFIG_H -#define JERRYSCRIPT_CONFIG_H - -// Generated differences from default by CMake based on build options: -#define JERRY_ERROR_MESSAGES 1 -#define JERRY_GLOBAL_HEAP_SIZE 190 -#define JERRY_GC_LIMIT (0) -#define JERRY_LINE_INFO 1 -#define JERRY_LOGGING 1 -#define JERRY_MEM_STATS 1 - - -/** - * Built-in configurations - * - * Allowed values for built-in defines: - * 0: Disable the given built-in. - * 1: Enable the given built-in. - */ -/* - * By default all built-ins are enabled if they are not defined. - */ -#ifndef JERRY_BUILTINS -# define JERRY_BUILTINS 1 -#endif /* !defined (JERRY_BUILTINS) */ - -#ifndef JERRY_BUILTIN_ANNEXB -# define JERRY_BUILTIN_ANNEXB JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_ANNEXB) */ - -#ifndef JERRY_BUILTIN_ARRAY -# define JERRY_BUILTIN_ARRAY JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_ARRAY) */ - -#ifndef JERRY_BUILTIN_BOOLEAN -# define JERRY_BUILTIN_BOOLEAN JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_BOOLEAN) */ - -#ifndef JERRY_BUILTIN_DATE -# define JERRY_BUILTIN_DATE JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_DATE) */ - -#ifndef JERRY_BUILTIN_ERRORS -# define JERRY_BUILTIN_ERRORS JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_ERRORS) */ - -#ifndef JERRY_BUILTIN_JSON -# define JERRY_BUILTIN_JSON JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_JSON) */ - -#ifndef JERRY_BUILTIN_MATH -# define JERRY_BUILTIN_MATH JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_MATH) */ - -#ifndef JERRY_BUILTIN_NUMBER -# define JERRY_BUILTIN_NUMBER JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_NUMBER) */ - -#ifndef JERRY_BUILTIN_REGEXP -# define JERRY_BUILTIN_REGEXP JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_REGEXP) */ - -#ifndef JERRY_BUILTIN_STRING -# define JERRY_BUILTIN_STRING JERRY_BUILTINS -#endif /* !defined (JERRY_BUILTIN_STRING) */ - -/** - * ES2015+ related features, by default all of them are enabled. - */ -#ifndef JERRY_ESNEXT -# define JERRY_ESNEXT 1 -#endif /* !defined (JERRY_ESNEXT) */ - -#ifndef JERRY_BUILTIN_BIGINT -# define JERRY_BUILTIN_BIGINT JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_BIGINT) */ - -#ifndef JERRY_BUILTIN_DATAVIEW -# define JERRY_BUILTIN_DATAVIEW JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_DATAVIEW) */ - -#ifndef JERRY_BUILTIN_MAP -# define JERRY_BUILTIN_MAP JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_MAP) */ - -#ifndef JERRY_BUILTIN_PROMISE -# define JERRY_BUILTIN_PROMISE JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_PROMISE) */ - -#ifndef JERRY_BUILTIN_PROXY -# define JERRY_BUILTIN_PROXY JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_PROXY) */ - -#ifndef JERRY_BUILTIN_REALMS -# define JERRY_BUILTIN_REALMS JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_REALMS) */ - -#ifndef JERRY_BUILTIN_REFLECT -# define JERRY_BUILTIN_REFLECT JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_REFLECT) */ - -#ifndef JERRY_BUILTIN_SET -# define JERRY_BUILTIN_SET JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_SET) */ - -#ifndef JERRY_BUILTIN_TYPEDARRAY -# define JERRY_BUILTIN_TYPEDARRAY JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_TYPEDARRAY) */ - -#ifndef JERRY_BUILTIN_WEAKMAP -# define JERRY_BUILTIN_WEAKMAP JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_WEAKMAP) */ - -#ifndef JERRY_BUILTIN_WEAKSET -# define JERRY_BUILTIN_WEAKSET JERRY_ESNEXT -#endif /* !defined (JERRY_BUILTIN_WEAKSET) */ - -#ifndef JERRY_MODULE_SYSTEM -# define JERRY_MODULE_SYSTEM JERRY_ESNEXT -#endif /* !defined (JERRY_MODULE_SYSTEM) */ - -/** - * Engine internal and misc configurations. - */ - -/** - * Specifies the compressed pointer representation - * - * Allowed values: - * 0: use 16 bit representation - * 1: use 32 bit representation - * - * Default value: 0 - * For more details see: jmem/jmem.h - */ -#ifndef JERRY_CPOINTER_32_BIT -# define JERRY_CPOINTER_32_BIT 0 -#endif /* !defined (JERRY_CPOINTER_32_BIT) */ - -/** - * Enable/Disable the engine's JavaScript debugger interface - * - * Allowed values: - * 0: Disable the debugger parts. - * 1: Enable the debugger. - */ -#ifndef JERRY_DEBUGGER -# define JERRY_DEBUGGER 0 -#endif /* !defined (JERRY_DEBUGGER) */ - -/** - * Enable/Disable built-in error messages for error objects. - * - * Allowed values: - * 0: Disable error messages. - * 1: Enable error message. - * - * Default value: 0 - */ -#ifndef JERRY_ERROR_MESSAGES -# define JERRY_ERROR_MESSAGES 0 -#endif /* !defined (JERRY_ERROR_MESSAGES) */ - -/** - * Enable/Disable external context. - * - * Allowed values: - * 0: Disable external context. - * 1: Enable external context support. - * - * Default value: 0 - */ -#ifndef JERRY_EXTERNAL_CONTEXT -# define JERRY_EXTERNAL_CONTEXT 0 -#endif /* !defined (JERRY_EXTERNAL_CONTEXT) */ - -/** - * Maximum size of heap in kilobytes - * - * Default value: 512 KiB - */ -#ifndef JERRY_GLOBAL_HEAP_SIZE -# define JERRY_GLOBAL_HEAP_SIZE (512) -#endif /* !defined (JERRY_GLOBAL_HEAP_SIZE) */ - -/** - * The allowed heap usage limit until next garbage collection, in bytes. - * - * If value is 0, the default is 1/32 of JERRY_HEAP_SIZE - */ -#ifndef JERRY_GC_LIMIT -# define JERRY_GC_LIMIT 0 -#endif /* !defined (JERRY_GC_LIMIT) */ - -/** - * Maximum stack usage size in kilobytes - * - * Note: This feature cannot be used when 'detect_stack_use_after_return=1' ASAN option is enabled. - * For more detailed description: - * - https://github.com/google/sanitizers/wiki/AddressSanitizerUseAfterReturn#compatibility - * - * Default value: 0, unlimited - */ -#ifndef JERRY_STACK_LIMIT -# define JERRY_STACK_LIMIT (0) -#endif /* !defined (JERRY_STACK_LIMIT) */ - -/** - * Maximum depth of recursion during GC mark phase - * - * Default value: 8 - */ -#ifndef JERRY_GC_MARK_LIMIT -# define JERRY_GC_MARK_LIMIT (8) -#endif /* !defined (JERRY_GC_MARK_LIMIT) */ - -/** - * Enable/Disable property lookup cache. - * - * Allowed values: - * 0: Disable lookup cache. - * 1: Enable lookup cache. - * - * Default value: 1 - */ -#ifndef JERRY_LCACHE -# define JERRY_LCACHE 1 -#endif /* !defined (JERRY_LCACHE) */ - -/** - * Enable/Disable line-info management inside the engine. - * - * Allowed values: - * 0: Disable line-info in the engine. - * 1: Enable line-info management. - * - * Default value: 0 - */ -#ifndef JERRY_LINE_INFO -# define JERRY_LINE_INFO 0 -#endif /* !defined (JERRY_LINE_INFO) */ - -/** - * Enable/Disable logging inside the engine. - * - * Allowed values: - * 0: Disable internal logging. - * 1: Enable internal logging. - * - * Default value: 0 - */ -#ifndef JERRY_LOGGING -# define JERRY_LOGGING 0 -#endif /* !defined (JERRY_LOGGING) */ - -/** - * Enable/Disable gc call before every allocation. - * - * Allowed values: - * 0: Disable gc call before each allocation. - * 1: Enable and force gc call before each allocation. - * - * Default value: 0 - * Warning!: This is an advanced option and will slow down the engine! - * Only enable it for debugging purposes. - */ -#ifndef JERRY_MEM_GC_BEFORE_EACH_ALLOC -# define JERRY_MEM_GC_BEFORE_EACH_ALLOC 0 -#endif /* !defined (JERRY_MEM_GC_BEFORE_EACH_ALLOC) */ - -/** - * Enable/Disable the collection if run-time memory statistics. - * - * Allowed values: - * 0: Disable run-time memory information collection. - * 1: Enable run-time memory statistics collection. - * - * Default value: 0 - */ -#ifndef JERRY_MEM_STATS -# define JERRY_MEM_STATS 0 -#endif /* !defined (JERRY_MEM_STATS) */ - -/** - * Use 32-bit/64-bit float for ecma-numbers - * This option is for expert use only! - * - * Allowed values: - * 1: use 64-bit floating point number mode - * 0: use 32-bit floating point number mode - * - * Default value: 1 - */ -#ifndef JERRY_NUMBER_TYPE_FLOAT64 -# define JERRY_NUMBER_TYPE_FLOAT64 1 -#endif /* !defined (JERRY_NUMBER_TYPE_FLOAT64 */ - -/** - * Enable/Disable the JavaScript parser. - * - * Allowed values: - * 0: Disable the JavaScript parser and all related functionallity. - * 1: Enable the JavaScript parser. - * - * Default value: 1 - */ -#ifndef JERRY_PARSER -# define JERRY_PARSER 1 -#endif /* !defined (JERRY_PARSER) */ - -/** - * Enable/Disable JerryScript byte code dump functions during parsing. - * To dump the JerryScript byte code the engine must be initialized with opcodes - * display flag. This option does not influence RegExp byte code dumps. - * - * Allowed values: - * 0: Disable all bytecode dump functions. - * 1: Enable bytecode dump functions. - * - * Default value: 0 - */ -#ifndef JERRY_PARSER_DUMP_BYTE_CODE -# define JERRY_PARSER_DUMP_BYTE_CODE 0 -#endif /* defined (JERRY_PARSER_DUMP_BYTE_CODE) */ - -/** - * Enable/Disable ECMA property hashmap. - * - * Allowed values: - * 0: Disable property hasmap. - * 1: Enable property hashmap. - * - * Default value: 1 - */ -#ifndef JERRY_PROPRETY_HASHMAP -# define JERRY_PROPRETY_HASHMAP 1 -#endif /* !defined (JERRY_PROPRETY_HASHMAP) */ - -/** - * Enable/Disable byte code dump functions for RegExp objects. - * To dump the RegExp byte code the engine must be initialized with - * regexp opcodes display flag. This option does not influence the - * JerryScript byte code dumps. - * - * Allowed values: - * 0: Disable all bytecode dump functions. - * 1: Enable bytecode dump functions. - * - * Default value: 0 - */ -#ifndef JERRY_REGEXP_DUMP_BYTE_CODE -# define JERRY_REGEXP_DUMP_BYTE_CODE 0 -#endif /* !defined (JERRY_REGEXP_DUMP_BYTE_CODE) */ - -/** - * Enables/disables the RegExp strict mode - * - * Default value: 0 - */ -#ifndef JERRY_REGEXP_STRICT_MODE -# define JERRY_REGEXP_STRICT_MODE 0 -#endif /* !defined (JERRY_REGEXP_STRICT_MODE) */ - -/** - * Enable/Disable the snapshot execution functions. - * - * Allowed values: - * 0: Disable snapshot execution. - * 1: Enable snapshot execution. - * - * Default value: 0 - */ -#ifndef JERRY_SNAPSHOT_EXEC -# define JERRY_SNAPSHOT_EXEC 0 -#endif /* !defined (JERRY_SNAPSHOT_EXEC) */ - -/** - * Enable/Disable the snapshot save functions. - * - * Allowed values: - * 0: Disable snapshot save functions. - * 1: Enable snapshot save functions. - */ -#ifndef JERRY_SNAPSHOT_SAVE -# define JERRY_SNAPSHOT_SAVE 0 -#endif /* !defined (JERRY_SNAPSHOT_SAVE) */ - -/** - * Enable/Disable usage of system allocator. - * - * Allowed values: - * 0: Disable usage of system allocator. - * 1: Enable usage of system allocator. - * - * Default value: 0 - */ -#ifndef JERRY_SYSTEM_ALLOCATOR -# define JERRY_SYSTEM_ALLOCATOR 0 -#endif /* !defined (JERRY_SYSTEM_ALLOCATOR) */ - -/** - * Enables/disables the unicode case conversion in the engine. - * By default Unicode case conversion is enabled. - */ -#ifndef JERRY_UNICODE_CASE_CONVERSION -# define JERRY_UNICODE_CASE_CONVERSION 1 -#endif /* !defined (JERRY_UNICODE_CASE_CONVERSION) */ - -/** - * Configures if the internal memory allocations are exposed to Valgrind or not. - * - * Allowed values: - * 0: Disable the Valgrind specific memory allocation notifications. - * 1: Enable the Valgrind specific allocation notifications. - */ -#ifndef JERRY_VALGRIND -# define JERRY_VALGRIND 0 -#endif /* !defined (JERRY_VALGRIND) */ - -/** - * Enable/Disable the vm execution stop callback function. - * - * Allowed values: - * 0: Disable vm exec stop callbacks. - * 1: Enable vm exec stop callback functionality. - */ -#ifndef JERRY_VM_EXEC_STOP -# define JERRY_VM_EXEC_STOP 0 -#endif /* !defined (JERRY_VM_EXEC_STOP) */ - -/** - * Advanced section configurations. - */ - -/** - * Allow configuring attributes on a few constant data inside the engine. - * - * One of the main usages: - * Normally compilers store const(ant)s in ROM. Thus saving RAM. - * But if your compiler does not support it then the directive below can force it. - * - * For the moment it is mainly meant for the following targets: - * - ESP8266 - * - * Example configuration for moving (some) constatns into a given section: - * # define JERRY_ATTR_CONST_DATA __attribute__((section(".rodata.const"))) - */ -#ifndef JERRY_ATTR_CONST_DATA -# define JERRY_ATTR_CONST_DATA -#endif /* !defined (JERRY_ATTR_CONST_DATA) */ - -/** - * The JERRY_ATTR_GLOBAL_HEAP allows adding extra attributes for the Jerry global heap. - * - * Example on how to move the global heap into it's own section: - * #define JERRY_ATTR_GLOBAL_HEAP __attribute__((section(".text.globalheap"))) - */ -#ifndef JERRY_ATTR_GLOBAL_HEAP -# define JERRY_ATTR_GLOBAL_HEAP -#endif /* !defined (JERRY_ATTR_GLOBAL_HEAP) */ - -/** - * Sanity check for macros to see if the values are 0 or 1 - * - * If a new feature is added this should be updated. - */ -/** - * Check base builtins. - */ -#if !defined (JERRY_BUILTIN_ANNEXB) \ -|| ((JERRY_BUILTIN_ANNEXB != 0) && (JERRY_BUILTIN_ANNEXB != 1)) -# error "Invalid value for JERRY_BUILTIN_ANNEXB macro." -#endif -#if !defined (JERRY_BUILTIN_ARRAY) \ -|| ((JERRY_BUILTIN_ARRAY != 0) && (JERRY_BUILTIN_ARRAY != 1)) -# error "Invalid value for JERRY_BUILTIN_ARRAY macro." -#endif -#if !defined (JERRY_BUILTIN_BOOLEAN) \ -|| ((JERRY_BUILTIN_BOOLEAN != 0) && (JERRY_BUILTIN_BOOLEAN != 1)) -# error "Invalid value for JERRY_BUILTIN_BOOLEAN macro." -#endif -#if !defined (JERRY_BUILTIN_DATE) \ -|| ((JERRY_BUILTIN_DATE != 0) && (JERRY_BUILTIN_DATE != 1)) -# error "Invalid value for JERRY_BUILTIN_DATE macro." -#endif -#if !defined (JERRY_BUILTIN_ERRORS) \ -|| ((JERRY_BUILTIN_ERRORS != 0) && (JERRY_BUILTIN_ERRORS != 1)) -# error "Invalid value for JERRY_BUILTIN_ERRORS macro." -#endif -#if !defined (JERRY_BUILTIN_JSON) \ -|| ((JERRY_BUILTIN_JSON != 0) && (JERRY_BUILTIN_JSON != 1)) -# error "Invalid value for JERRY_BUILTIN_JSON macro." -#endif -#if !defined (JERRY_BUILTIN_MATH) \ -|| ((JERRY_BUILTIN_MATH != 0) && (JERRY_BUILTIN_MATH != 1)) -# error "Invalid value for JERRY_BUILTIN_MATH macro." -#endif -#if !defined (JERRY_BUILTIN_NUMBER) \ -|| ((JERRY_BUILTIN_NUMBER != 0) && (JERRY_BUILTIN_NUMBER != 1)) -# error "Invalid value for JERRY_BUILTIN_NUMBER macro." -#endif -#if !defined (JERRY_BUILTIN_REGEXP) \ -|| ((JERRY_BUILTIN_REGEXP != 0) && (JERRY_BUILTIN_REGEXP != 1)) -# error "Invalid value for JERRY_BUILTIN_REGEXP macro." -#endif -#if !defined (JERRY_BUILTIN_STRING) \ -|| ((JERRY_BUILTIN_STRING != 0) && (JERRY_BUILTIN_STRING != 1)) -# error "Invalid value for JERRY_BUILTIN_STRING macro." -#endif -#if !defined (JERRY_BUILTINS) \ -|| ((JERRY_BUILTINS != 0) && (JERRY_BUILTINS != 1)) -# error "Invalid value for JERRY_BUILTINS macro." -#endif - -/** - * Check ES2015+ features - */ -#if !defined (JERRY_ESNEXT) \ -|| ((JERRY_ESNEXT != 0) && (JERRY_ESNEXT != 1)) -# error "Invalid value for JERRY_ESNEXT macro." -#endif -#if !defined (JERRY_BUILTIN_REALMS) \ -|| ((JERRY_BUILTIN_REALMS != 0) && (JERRY_BUILTIN_REALMS != 1)) -# error "Invalid value for JERRY_BUILTIN_REALMS macro." -#endif -#if !defined (JERRY_BUILTIN_DATAVIEW) \ -|| ((JERRY_BUILTIN_DATAVIEW != 0) && (JERRY_BUILTIN_DATAVIEW != 1)) -# error "Invalid value for JERRY_BUILTIN_DATAVIEW macro." -#endif -#if !defined (JERRY_BUILTIN_MAP) \ -|| ((JERRY_BUILTIN_MAP != 0) && (JERRY_BUILTIN_MAP != 1)) -# error "Invalid value for JERRY_BUILTIN_MAP macro." -#endif -#if !defined (JERRY_BUILTIN_REFLECT) \ -|| ((JERRY_BUILTIN_REFLECT != 0) && (JERRY_BUILTIN_REFLECT != 1)) -# error "Invalid value for JERRY_BUILTIN_REFLECT macro." -#endif -#if !defined (JERRY_BUILTIN_SET) \ -|| ((JERRY_BUILTIN_SET != 0) && (JERRY_BUILTIN_SET != 1)) -# error "Invalid value for JERRY_BUILTIN_SET macro." -#endif -#if !defined (JERRY_BUILTIN_WEAKMAP) \ -|| ((JERRY_BUILTIN_WEAKMAP != 0) && (JERRY_BUILTIN_WEAKMAP != 1)) -# error "Invalid value for JERRY_BUILTIN_WEAKMAP macro." -#endif -#if !defined (JERRY_BUILTIN_WEAKSET) \ -|| ((JERRY_BUILTIN_WEAKSET != 0) && (JERRY_BUILTIN_WEAKSET != 1)) -# error "Invalid value for JERRY_BUILTIN_WEAKSET macro." -#endif -#if !defined (JERRY_BUILTIN_PROMISE) \ -|| ((JERRY_BUILTIN_PROMISE != 0) && (JERRY_BUILTIN_PROMISE != 1)) -# error "Invalid value for JERRY_BUILTIN_PROMISE macro." -#endif -#if !defined (JERRY_BUILTIN_PROXY) \ -|| ((JERRY_BUILTIN_PROXY != 0) && (JERRY_BUILTIN_PROXY != 1)) -# error "Invalid value for JERRY_BUILTIN_PROXY macro." -#endif -#if !defined (JERRY_BUILTIN_TYPEDARRAY) \ -|| ((JERRY_BUILTIN_TYPEDARRAY != 0) && (JERRY_BUILTIN_TYPEDARRAY != 1)) -# error "Invalid value for JERRY_BUILTIN_TYPEDARRAY macro." -#endif -#if !defined (JERRY_BUILTIN_BIGINT) \ -|| ((JERRY_BUILTIN_BIGINT != 0) && (JERRY_BUILTIN_BIGINT != 1)) -# error "Invalid value for JERRY_BUILTIN_BIGINT macro." -#endif -#if !defined (JERRY_MODULE_SYSTEM) \ -|| ((JERRY_MODULE_SYSTEM != 0) && (JERRY_MODULE_SYSTEM != 1)) -# error "Invalid value for JERRY_MODULE_SYSTEM macro." -#endif -#if (JERRY_ESNEXT == 0) \ -&& ((JERRY_BUILTIN_DATAVIEW == 1) \ -|| (JERRY_BUILTIN_MAP == 1) \ -|| (JERRY_BUILTIN_SET == 1) \ -|| (JERRY_BUILTIN_WEAKMAP == 1) \ -|| (JERRY_BUILTIN_WEAKSET == 1) \ -|| (JERRY_BUILTIN_PROMISE == 1) \ -|| (JERRY_BUILTIN_PROXY == 1) \ -|| (JERRY_BUILTIN_REFLECT == 1) \ -|| (JERRY_BUILTIN_TYPEDARRAY == 1)) -# error "JERRY_ESNEXT should be enabled too to enable JERRY_BUILTIN_xxxxx macro." -#endif -#if (JERRY_ESNEXT == 0) && (JERRY_MODULE_SYSTEM == 1) -# error "JERRY_ESNEXT should be enabled too to enable JERRY_MODULE_SYSTEM macro." -#endif - -/** - * Internal options. - */ -#if !defined (JERRY_CPOINTER_32_BIT) \ -|| ((JERRY_CPOINTER_32_BIT != 0) && (JERRY_CPOINTER_32_BIT != 1)) -# error "Invalid value for 'JERRY_CPOINTER_32_BIT' macro." -#endif -#if !defined (JERRY_DEBUGGER) \ -|| ((JERRY_DEBUGGER != 0) && (JERRY_DEBUGGER != 1)) -# error "Invalid value for 'JERRY_DEBUGGER' macro." -#endif -#if !defined (JERRY_ERROR_MESSAGES) \ -|| ((JERRY_ERROR_MESSAGES != 0) && (JERRY_ERROR_MESSAGES != 1)) -# error "Invalid value for 'JERRY_ERROR_MESSAGES' macro." -#endif -#if !defined (JERRY_EXTERNAL_CONTEXT) \ -|| ((JERRY_EXTERNAL_CONTEXT != 0) && (JERRY_EXTERNAL_CONTEXT != 1)) -# error "Invalid value for 'JERRY_EXTERNAL_CONTEXT' macro." -#endif -#if !defined (JERRY_GLOBAL_HEAP_SIZE) || (JERRY_GLOBAL_HEAP_SIZE <= 0) -# error "Invalid value for 'JERRY_GLOBAL_HEAP_SIZE' macro." -#endif -#if !defined (JERRY_GC_LIMIT) || (JERRY_GC_LIMIT < 0) -# error "Invalid value for 'JERRY_GC_LIMIT' macro." -#endif -#if !defined (JERRY_STACK_LIMIT) || (JERRY_STACK_LIMIT < 0) -# error "Invalid value for 'JERRY_STACK_LIMIT' macro." -#endif -#if !defined (JERRY_GC_MARK_LIMIT) || (JERRY_GC_MARK_LIMIT < 0) -# error "Invalid value for 'JERRY_GC_MARK_LIMIT' macro." -#endif -#if !defined (JERRY_LCACHE) \ -|| ((JERRY_LCACHE != 0) && (JERRY_LCACHE != 1)) -# error "Invalid value for 'JERRY_LCACHE' macro." -#endif -#if !defined (JERRY_LINE_INFO) \ -|| ((JERRY_LINE_INFO != 0) && (JERRY_LINE_INFO != 1)) -# error "Invalid value for 'JERRY_LINE_INFO' macro." -#endif -#if !defined (JERRY_LOGGING) \ -|| ((JERRY_LOGGING != 0) && (JERRY_LOGGING != 1)) -# error "Invalid value for 'JERRY_LOGGING' macro." -#endif -#if !defined (JERRY_MEM_GC_BEFORE_EACH_ALLOC) \ -|| ((JERRY_MEM_GC_BEFORE_EACH_ALLOC != 0) && (JERRY_MEM_GC_BEFORE_EACH_ALLOC != 1)) -# error "Invalid value for 'JERRY_MEM_GC_BEFORE_EACH_ALLOC' macro." -#endif -#if !defined (JERRY_MEM_STATS) \ -|| ((JERRY_MEM_STATS != 0) && (JERRY_MEM_STATS != 1)) -# error "Invalid value for 'JERRY_MEM_STATS' macro." -#endif -#if !defined (JERRY_NUMBER_TYPE_FLOAT64) \ -|| ((JERRY_NUMBER_TYPE_FLOAT64 != 0) && (JERRY_NUMBER_TYPE_FLOAT64 != 1)) -# error "Invalid value for 'JERRY_NUMBER_TYPE_FLOAT64' macro." -#endif -#if !defined (JERRY_PARSER) \ -|| ((JERRY_PARSER != 0) && (JERRY_PARSER != 1)) -# error "Invalid value for 'JERRY_PARSER' macro." -#endif -#if !defined (JERRY_PARSER_DUMP_BYTE_CODE) \ -|| ((JERRY_PARSER_DUMP_BYTE_CODE != 0) && (JERRY_PARSER_DUMP_BYTE_CODE != 1)) -# error "Invalid value for 'JERRY_PARSER_DUMP_BYTE_CODE' macro." -#endif -#if !defined (JERRY_PROPRETY_HASHMAP) \ -|| ((JERRY_PROPRETY_HASHMAP != 0) && (JERRY_PROPRETY_HASHMAP != 1)) -# error "Invalid value for 'JERRY_PROPRETY_HASHMAP' macro." -#endif -#if !defined (JERRY_REGEXP_DUMP_BYTE_CODE) \ -|| ((JERRY_REGEXP_DUMP_BYTE_CODE != 0) && (JERRY_REGEXP_DUMP_BYTE_CODE != 1)) -# error "Invalid value for 'JERRY_REGEXP_DUMP_BYTE_CODE' macro." -#endif -#if !defined (JERRY_REGEXP_STRICT_MODE) \ -|| ((JERRY_REGEXP_STRICT_MODE != 0) && (JERRY_REGEXP_STRICT_MODE != 1)) -# error "Invalid value for 'JERRY_REGEXP_STRICT_MODE' macro." -#endif -#if !defined (JERRY_SNAPSHOT_EXEC) \ -|| ((JERRY_SNAPSHOT_EXEC != 0) && (JERRY_SNAPSHOT_EXEC != 1)) -# error "Invalid value for 'JERRY_SNAPSHOT_EXEC' macro." -#endif -#if !defined (JERRY_SNAPSHOT_SAVE) \ -|| ((JERRY_SNAPSHOT_SAVE != 0) && (JERRY_SNAPSHOT_SAVE != 1)) -# error "Invalid value for 'JERRY_SNAPSHOT_SAVE' macro." -#endif -#if !defined (JERRY_SYSTEM_ALLOCATOR) \ -|| ((JERRY_SYSTEM_ALLOCATOR != 0) && (JERRY_SYSTEM_ALLOCATOR != 1)) -# error "Invalid value for 'JERRY_SYSTEM_ALLOCATOR' macro." -#endif -#if !defined (JERRY_UNICODE_CASE_CONVERSION) \ -|| ((JERRY_UNICODE_CASE_CONVERSION != 0) && (JERRY_UNICODE_CASE_CONVERSION != 1)) -# error "Invalid value for 'JERRY_UNICODE_CASE_CONVERSION' macro." -#endif -#if !defined (JERRY_VALGRIND) \ -|| ((JERRY_VALGRIND != 0) && (JERRY_VALGRIND != 1)) -# error "Invalid value for 'JERRY_VALGRIND' macro." -#endif -#if !defined (JERRY_VM_EXEC_STOP) \ -|| ((JERRY_VM_EXEC_STOP != 0) && (JERRY_VM_EXEC_STOP != 1)) -# error "Invalid value for 'JERRY_VM_EXEC_STOP' macro." -#endif - -#define ENABLED(FEATURE) ((FEATURE) == 1) -#define DISABLED(FEATURE) ((FEATURE) != 1) - -/** - * Cross component requirements check. - */ -/** - * The date module can only use the float 64 number types. - * Do a check for this. - */ -#if ENABLED (JERRY_BUILTIN_DATE) && !ENABLED (JERRY_NUMBER_TYPE_FLOAT64) -# error "Date does not support float32" -#endif - -/** - * Wrap container types into a single guard - */ -#if ENABLED (JERRY_BUILTIN_MAP) || ENABLED (JERRY_BUILTIN_SET) \ -|| ENABLED (JERRY_BUILTIN_WEAKMAP) || ENABLED (JERRY_BUILTIN_WEAKSET) -# define JERRY_BUILTIN_CONTAINER 1 -#else -# define JERRY_BUILTIN_CONTAINER 0 -#endif - -/** - * Resource name related types into a single guard - */ -#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) || ENABLED (JERRY_MODULE_SYSTEM) -# define JERRY_RESOURCE_NAME 1 -#else -# define JERRY_RESOURCE_NAME 0 -#endif - -#endif /* !JERRYSCRIPT_CONFIG_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-core.h b/firmware/spade/src/rpi/jerry/include/jerryscript-core.h deleted file mode 100644 index fe7d2ff2e8..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-core.h +++ /dev/null @@ -1,865 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_CORE_H -#define JERRYSCRIPT_CORE_H - -#include -#include -#include - -#include "jerryscript-compiler.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** \addtogroup jerry Jerry engine interface - * @{ - */ - -/** - * Major version of JerryScript API. - */ -#define JERRY_API_MAJOR_VERSION 2 - -/** - * Minor version of JerryScript API. - */ -#define JERRY_API_MINOR_VERSION 4 - -/** - * Patch version of JerryScript API. - */ -#define JERRY_API_PATCH_VERSION 0 - -/** - * JerryScript init flags. - */ -typedef enum -{ - JERRY_INIT_EMPTY = (0u), /**< empty flag set */ - JERRY_INIT_SHOW_OPCODES = (1u << 0), /**< dump byte-code to log after parse */ - JERRY_INIT_SHOW_REGEXP_OPCODES = (1u << 1), /**< dump regexp byte-code to log after compilation */ - JERRY_INIT_MEM_STATS = (1u << 2), /**< dump memory statistics */ - JERRY_INIT_MEM_STATS_SEPARATE = (1u << 3), /**< deprecated, an unused placeholder now */ - JERRY_INIT_DEBUGGER = (1u << 4), /**< deprecated, an unused placeholder now */ -} jerry_init_flag_t; - -/** - * JerryScript API Error object types. - */ -typedef enum -{ - JERRY_ERROR_NONE = 0, /**< No Error */ - - JERRY_ERROR_COMMON, /**< Error */ - JERRY_ERROR_EVAL, /**< EvalError */ - JERRY_ERROR_RANGE, /**< RangeError */ - JERRY_ERROR_REFERENCE, /**< ReferenceError */ - JERRY_ERROR_SYNTAX, /**< SyntaxError */ - JERRY_ERROR_TYPE, /**< TypeError */ - JERRY_ERROR_URI /**< URIError */ -} jerry_error_t; - -/** - * JerryScript feature types. - */ -typedef enum -{ - JERRY_FEATURE_CPOINTER_32_BIT, /**< 32 bit compressed pointers */ - JERRY_FEATURE_ERROR_MESSAGES, /**< error messages */ - JERRY_FEATURE_JS_PARSER, /**< js-parser */ - JERRY_FEATURE_MEM_STATS, /**< memory statistics */ - JERRY_FEATURE_PARSER_DUMP, /**< parser byte-code dumps */ - JERRY_FEATURE_REGEXP_DUMP, /**< regexp byte-code dumps */ - JERRY_FEATURE_SNAPSHOT_SAVE, /**< saving snapshot files */ - JERRY_FEATURE_SNAPSHOT_EXEC, /**< executing snapshot files */ - JERRY_FEATURE_DEBUGGER, /**< debugging */ - JERRY_FEATURE_VM_EXEC_STOP, /**< stopping ECMAScript execution */ - JERRY_FEATURE_JSON, /**< JSON support */ - JERRY_FEATURE_PROMISE, /**< promise support */ - JERRY_FEATURE_TYPEDARRAY, /**< Typedarray support */ - JERRY_FEATURE_DATE, /**< Date support */ - JERRY_FEATURE_REGEXP, /**< Regexp support */ - JERRY_FEATURE_LINE_INFO, /**< line info available */ - JERRY_FEATURE_LOGGING, /**< logging */ - JERRY_FEATURE_SYMBOL, /**< symbol support */ - JERRY_FEATURE_DATAVIEW, /**< DataView support */ - JERRY_FEATURE_PROXY, /**< Proxy support */ - JERRY_FEATURE_MAP, /**< Map support */ - JERRY_FEATURE_SET, /**< Set support */ - JERRY_FEATURE_WEAKMAP, /**< WeakMap support */ - JERRY_FEATURE_WEAKSET, /**< WeakSet support */ - JERRY_FEATURE_BIGINT, /**< BigInt support */ - JERRY_FEATURE_REALM, /**< realm support */ - JERRY_FEATURE__COUNT /**< number of features. NOTE: must be at the end of the list */ -} jerry_feature_t; - -/** - * Option flags for jerry_parse and jerry_parse_function functions. - */ -typedef enum -{ - JERRY_PARSE_NO_OPTS = 0, /**< no options passed */ - JERRY_PARSE_STRICT_MODE = (1 << 0), /**< enable strict mode */ - JERRY_PARSE_MODULE = (1 << 1) /**< parse source as an ECMAScript module */ -} jerry_parse_opts_t; - -/** - * GC operational modes. - */ -typedef enum -{ - JERRY_GC_PRESSURE_LOW, /**< free unused objects, but keep memory - * allocated for performance improvements - * such as property hash tables for large objects */ - JERRY_GC_PRESSURE_HIGH /**< free as much memory as possible */ -} jerry_gc_mode_t; - -/** - * Jerry regexp flags. - */ -typedef enum -{ - JERRY_REGEXP_FLAG_GLOBAL = (1u << 1), /**< Globally scan string */ - JERRY_REGEXP_FLAG_IGNORE_CASE = (1u << 2), /**< Ignore case */ - JERRY_REGEXP_FLAG_MULTILINE = (1u << 3), /**< Multiline string scan */ - JERRY_REGEXP_FLAG_STICKY = (1u << 4), /**< ECMAScript v11, 21.2.5.14 */ - JERRY_REGEXP_FLAG_UNICODE = (1u << 5), /**< ECMAScript v11, 21.2.5.17 */ - JERRY_REGEXP_FLAG_DOTALL = (1u << 6) /**< ECMAScript v11, 21.2.5.3 */ -} jerry_regexp_flags_t; - -/** - * Character type of JerryScript. - */ -typedef uint8_t jerry_char_t; - -/** - * Size type of JerryScript. - */ -typedef uint32_t jerry_size_t; - -/** - * Length type of JerryScript. - */ -typedef uint32_t jerry_length_t; - -/** - * Description of a JerryScript value. - */ -typedef uint32_t jerry_value_t; - -/** - * Description of ECMA property descriptor. - */ -typedef struct -{ - /** Is [[Value]] defined? */ - bool is_value_defined; - - /** Is [[Get]] defined? */ - bool is_get_defined; - - /** Is [[Set]] defined? */ - bool is_set_defined; - - /** Is [[Writable]] defined? */ - bool is_writable_defined; - - /** [[Writable]] */ - bool is_writable; - - /** Is [[Enumerable]] defined? */ - bool is_enumerable_defined; - - /** [[Enumerable]] */ - bool is_enumerable; - - /** Is [[Configurable]] defined? */ - bool is_configurable_defined; - - /** [[Configurable]] */ - bool is_configurable; - - /** [[Value]] */ - jerry_value_t value; - - /** [[Get]] */ - jerry_value_t getter; - - /** [[Set]] */ - jerry_value_t setter; -} jerry_property_descriptor_t; - -/** - * Description of JerryScript heap memory stats. - * It is for memory profiling. - */ -typedef struct -{ - size_t version; /**< the version of the stats struct */ - size_t size; /**< heap total size */ - size_t allocated_bytes; /**< currently allocated bytes */ - size_t peak_allocated_bytes; /**< peak allocated bytes */ - size_t reserved[4]; /**< padding for future extensions */ -} jerry_heap_stats_t; - -/** - * Type of an external function handler. - */ -typedef jerry_value_t (*jerry_external_handler_t) (const jerry_value_t function_obj, - const jerry_value_t this_val, - const jerry_value_t args_p[], - const jerry_length_t args_count); - -/** - * Native free callback of an object. - */ -typedef void (*jerry_object_native_free_callback_t) (void *native_p); - -/** - * Decorator callback for Error objects. The decorator can create - * or update any properties of the newly created Error object. - */ -typedef void (*jerry_error_object_created_callback_t) (const jerry_value_t error_object, void *user_p); - -/** - * Callback which tells whether the ECMAScript execution should be stopped. - * - * As long as the function returns with undefined the execution continues. - * When a non-undefined value is returned the execution stops and the value - * is thrown by the engine (if the error flag is not set for the returned - * value the engine automatically sets it). - * - * Note: if the function returns with a non-undefined value it - * must return with the same value for future calls. - */ -typedef jerry_value_t (*jerry_vm_exec_stop_callback_t) (void *user_p); - -/** - * Function type applied for each data property of an object. - */ -typedef bool (*jerry_object_property_foreach_t) (const jerry_value_t property_name, - const jerry_value_t property_value, - void *user_data_p); -/** - * Function type applied for each object in the engine. - */ -typedef bool (*jerry_objects_foreach_t) (const jerry_value_t object, - void *user_data_p); - -/** - * Function type applied for each matching object in the engine. - */ -typedef bool (*jerry_objects_foreach_by_native_info_t) (const jerry_value_t object, - void *object_data_p, - void *user_data_p); - -/** - * User context item manager - */ -typedef struct -{ - /** - * Callback responsible for initializing a context item, or NULL to zero out the memory. This is called lazily, the - * first time jerry_get_context_data () is called with this manager. - * - * @param [in] data The buffer that JerryScript allocated for the manager. The buffer is zeroed out. The size is - * determined by the bytes_needed field. The buffer is kept alive until jerry_cleanup () is called. - */ - void (*init_cb) (void *data); - - /** - * Callback responsible for deinitializing a context item, or NULL. This is called as part of jerry_cleanup (), - * right *before* the VM has been cleaned up. This is a good place to release strong references to jerry_value_t's - * that the manager may be holding. - * Note: because the VM has not been fully cleaned up yet, jerry_object_native_info_t free_cb's can still get called - * *after* all deinit_cb's have been run. See finalize_cb for a callback that is guaranteed to run *after* all - * free_cb's have been run. - * - * @param [in] data The buffer that JerryScript allocated for the manager. - */ - void (*deinit_cb) (void *data); - - /** - * Callback responsible for finalizing a context item, or NULL. This is called as part of jerry_cleanup (), - * right *after* the VM has been cleaned up and destroyed and jerry_... APIs cannot be called any more. At this point, - * all values in the VM have been cleaned up. This is a good place to clean up native state that can only be cleaned - * up at the very end when there are no more VM values around that may need to access that state. - * - * @param [in] data The buffer that JerryScript allocated for the manager. After returning from this callback, - * the data pointer may no longer be used. - */ - void (*finalize_cb) (void *data); - - /** - * Number of bytes to allocate for this manager. This is the size of the buffer that JerryScript will allocate on - * behalf of the manager. The pointer to this buffer is passed into init_cb, deinit_cb and finalize_cb. It is also - * returned from the jerry_get_context_data () API. - */ - size_t bytes_needed; -} jerry_context_data_manager_t; - -/** - * Function type for allocating buffer for JerryScript context. - */ -typedef void *(*jerry_context_alloc_t) (size_t size, void *cb_data_p); - -/** - * Type information of a native pointer. - */ -typedef struct -{ - jerry_object_native_free_callback_t free_cb; /**< the free callback of the native pointer */ -} jerry_object_native_info_t; - -/** - * An opaque declaration of the JerryScript context structure. - */ -typedef struct jerry_context_t jerry_context_t; - -/** - * Enum that contains the supported binary operation types - */ -typedef enum -{ - JERRY_BIN_OP_EQUAL = 0u, /**< equal comparison (==) */ - JERRY_BIN_OP_STRICT_EQUAL, /**< strict equal comparison (===) */ - JERRY_BIN_OP_LESS, /**< less relation (<) */ - JERRY_BIN_OP_LESS_EQUAL, /**< less or equal relation (<=) */ - JERRY_BIN_OP_GREATER, /**< greater relation (>) */ - JERRY_BIN_OP_GREATER_EQUAL, /**< greater or equal relation (>=)*/ - JERRY_BIN_OP_INSTANCEOF, /**< instanceof operation */ - JERRY_BIN_OP_ADD, /**< addition operator (+) */ - JERRY_BIN_OP_SUB, /**< subtraction operator (-) */ - JERRY_BIN_OP_MUL, /**< multiplication operator (*) */ - JERRY_BIN_OP_DIV, /**< division operator (/) */ - JERRY_BIN_OP_REM, /**< remainder operator (%) */ -} jerry_binary_operation_t; - -/** - * General engine functions. - */ -void jerry_init (jerry_init_flag_t flags); -void jerry_cleanup (void); -void jerry_register_magic_strings (const jerry_char_t * const *ex_str_items_p, - uint32_t count, - const jerry_length_t *str_lengths_p); -void jerry_gc (jerry_gc_mode_t mode); -void *jerry_get_context_data (const jerry_context_data_manager_t *manager_p); - -bool jerry_get_memory_stats (jerry_heap_stats_t *out_stats_p); - -/** - * Parser and executor functions. - */ -bool jerry_run_simple (const jerry_char_t *script_source_p, size_t script_source_size, jerry_init_flag_t flags); -jerry_value_t jerry_parse (const jerry_char_t *resource_name_p, size_t resource_name_length, - const jerry_char_t *source_p, size_t source_size, uint32_t parse_opts); -jerry_value_t jerry_parse_function (const jerry_char_t *resource_name_p, size_t resource_name_length, - const jerry_char_t *arg_list_p, size_t arg_list_size, - const jerry_char_t *source_p, size_t source_size, uint32_t parse_opts); -jerry_value_t jerry_run (const jerry_value_t func_val); -jerry_value_t jerry_eval (const jerry_char_t *source_p, size_t source_size, uint32_t parse_opts); - -jerry_value_t jerry_run_all_enqueued_jobs (void); - -/** - * Get the global context. - */ -jerry_value_t jerry_get_global_object (void); - -/** - * Checker functions of 'jerry_value_t'. - */ -bool jerry_value_is_abort (const jerry_value_t value); -bool jerry_value_is_array (const jerry_value_t value); -bool jerry_value_is_boolean (const jerry_value_t value); -bool jerry_value_is_constructor (const jerry_value_t value); -bool jerry_value_is_error (const jerry_value_t value); -bool jerry_value_is_function (const jerry_value_t value); -bool jerry_value_is_async_function (const jerry_value_t value); -bool jerry_value_is_number (const jerry_value_t value); -bool jerry_value_is_null (const jerry_value_t value); -bool jerry_value_is_object (const jerry_value_t value); -bool jerry_value_is_promise (const jerry_value_t value); -bool jerry_value_is_proxy (const jerry_value_t value); -bool jerry_value_is_string (const jerry_value_t value); -bool jerry_value_is_symbol (const jerry_value_t value); -bool jerry_value_is_bigint (const jerry_value_t value); -bool jerry_value_is_undefined (const jerry_value_t value); - -/** - * JerryScript API value type information. - */ -typedef enum -{ - JERRY_TYPE_NONE = 0u, /**< no type information */ - JERRY_TYPE_UNDEFINED, /**< undefined type */ - JERRY_TYPE_NULL, /**< null type */ - JERRY_TYPE_BOOLEAN, /**< boolean type */ - JERRY_TYPE_NUMBER, /**< number type */ - JERRY_TYPE_STRING, /**< string type */ - JERRY_TYPE_OBJECT, /**< object type */ - JERRY_TYPE_FUNCTION, /**< function type */ - JERRY_TYPE_ERROR, /**< error/abort type */ - JERRY_TYPE_SYMBOL, /**< symbol type */ - JERRY_TYPE_BIGINT, /**< bigint type */ -} jerry_type_t; - -/** - * JerryScript object type information. - */ -typedef enum -{ - JERRY_OBJECT_TYPE_NONE = 0u, /**< Non object type */ - JERRY_OBJECT_TYPE_GENERIC, /**< Generic JavaScript object without any internal property */ - JERRY_OBJECT_TYPE_ARRAY, /**< Array object */ - JERRY_OBJECT_TYPE_PROXY, /**< Proxy object */ - JERRY_OBJECT_TYPE_FUNCTION, /**< Function object (see jerry_function_get_type) */ - JERRY_OBJECT_TYPE_TYPEDARRAY, /**< %TypedArray% object (see jerry_get_typedarray_type) */ - JERRY_OBJECT_TYPE_ITERATOR, /**< Iterator object (see jerry_iterator_get_type) */ - JERRY_OBJECT_TYPE_CONTAINER, /**< Container object (see jerry_container_get_type) */ - - JERRY_OBJECT_TYPE_ARGUMENTS, /**< Arguments object */ - JERRY_OBJECT_TYPE_BOOLEAN, /**< Boolean object */ - JERRY_OBJECT_TYPE_DATE, /**< Date object */ - JERRY_OBJECT_TYPE_NUMBER, /**< Number object */ - JERRY_OBJECT_TYPE_REGEXP, /**< RegExp object */ - JERRY_OBJECT_TYPE_STRING, /**< String object */ - JERRY_OBJECT_TYPE_SYMBOL, /**< Symbol object */ - JERRY_OBJECT_TYPE_GENERATOR, /**< Generator object */ - JERRY_OBJECT_TYPE_BIGINT, /**< BigInt object */ -} jerry_object_type_t; - -/** - * JerryScript function object type information. - */ -typedef enum -{ - JERRY_FUNCTION_TYPE_NONE = 0u, /**< Non function type */ - JERRY_FUNCTION_TYPE_GENERIC, /**< Generic JavaScript function */ - JERRY_FUNCTION_TYPE_ACCESSOR, /**< Accessor function */ - JERRY_FUNCTION_TYPE_BOUND, /**< Bound function */ - JERRY_FUNCTION_TYPE_ARROW, /**< Arrow fuction */ - JERRY_FUNCTION_TYPE_GENERATOR, /**< Generator function */ -} jerry_function_type_t; - -/** - * JerryScript iterator object type information. - */ -typedef enum -{ - JERRY_ITERATOR_TYPE_NONE = 0u, /**< Non iterator type */ - JERRY_ITERATOR_TYPE_ARRAY, /**< Array iterator */ - JERRY_ITERATOR_TYPE_STRING, /**< String iterator */ - JERRY_ITERATOR_TYPE_MAP, /**< Map iterator */ - JERRY_ITERATOR_TYPE_SET, /**< Set iterator */ -} jerry_iterator_type_t; - -/** - * JerryScript object property filter options. - */ -typedef enum -{ - JERRY_PROPERTY_FILTER_ALL = 0, /**< List all property keys independently - * from key type or property value attributes - * (equivalent to Reflect.ownKeys call) */ - JERRY_PROPERTY_FILTER_TRAVERSE_PROTOTYPE_CHAIN = (1 << 0), /**< Include keys from the objects's - * prototype chain as well */ - JERRY_PROPERTY_FILTER_EXLCUDE_NON_CONFIGURABLE = (1 << 1), /**< Exclude property key if - * the property is non-configurable */ - JERRY_PROPERTY_FILTER_EXLCUDE_NON_ENUMERABLE = (1 << 2), /**< Exclude property key if - * the property is non-enumerable */ - JERRY_PROPERTY_FILTER_EXLCUDE_NON_WRITABLE = (1 << 3), /**< Exclude property key if - * the property is non-writable */ - JERRY_PROPERTY_FILTER_EXLCUDE_STRINGS = (1 << 4), /**< Exclude property key if it is a string */ - JERRY_PROPERTY_FILTER_EXLCUDE_SYMBOLS = (1 << 5), /**< Exclude property key if it is a symbol */ - JERRY_PROPERTY_FILTER_EXLCUDE_INTEGER_INDICES = (1 << 6), /**< Exclude property key if it is an integer index */ - JERRY_PROPERTY_FILTER_INTEGER_INDICES_AS_NUMBER = (1 << 7), /**< By default integer index property keys are - * converted to string. Enabling this flags keeps - * integer index property keys as numbers. */ -} jerry_property_filter_t; - -jerry_type_t jerry_value_get_type (const jerry_value_t value); -jerry_object_type_t jerry_object_get_type (const jerry_value_t value); -jerry_function_type_t jerry_function_get_type (const jerry_value_t value); -jerry_iterator_type_t jerry_iterator_get_type (const jerry_value_t value); - -/** - * Checker function of whether the specified compile feature is enabled. - */ -bool jerry_is_feature_enabled (const jerry_feature_t feature); - -/** - * Binary operations - */ -jerry_value_t jerry_binary_operation (jerry_binary_operation_t op, - const jerry_value_t lhs, - const jerry_value_t rhs); - -/** - * Error manipulation functions. - */ -jerry_value_t jerry_create_abort_from_value (jerry_value_t value, bool release); -jerry_value_t jerry_create_error_from_value (jerry_value_t value, bool release); -jerry_value_t jerry_get_value_from_error (jerry_value_t value, bool release); -void jerry_set_error_object_created_callback (jerry_error_object_created_callback_t callback, void *user_p); - -/** - * Error object function(s). - */ -jerry_error_t jerry_get_error_type (jerry_value_t value); - -/** - * Getter functions of 'jerry_value_t'. - */ -bool jerry_get_boolean_value (const jerry_value_t value); -double jerry_get_number_value (const jerry_value_t value); - -/** - * Functions for string values. - */ -jerry_size_t jerry_get_string_size (const jerry_value_t value); -jerry_size_t jerry_get_utf8_string_size (const jerry_value_t value); -jerry_length_t jerry_get_string_length (const jerry_value_t value); -jerry_length_t jerry_get_utf8_string_length (const jerry_value_t value); -jerry_size_t jerry_string_to_char_buffer (const jerry_value_t value, jerry_char_t *buffer_p, jerry_size_t buffer_size); -jerry_size_t jerry_string_to_utf8_char_buffer (const jerry_value_t value, - jerry_char_t *buffer_p, - jerry_size_t buffer_size); -jerry_size_t jerry_substring_to_char_buffer (const jerry_value_t value, - jerry_length_t start_pos, - jerry_length_t end_pos, - jerry_char_t *buffer_p, - jerry_size_t buffer_size); -jerry_size_t jerry_substring_to_utf8_char_buffer (const jerry_value_t value, - jerry_length_t start_pos, - jerry_length_t end_pos, - jerry_char_t *buffer_p, - jerry_size_t buffer_size); - -/** - * Functions for array object values. - */ -uint32_t jerry_get_array_length (const jerry_value_t value); - -/** - * Converters of 'jerry_value_t'. - */ -bool jerry_value_to_boolean (const jerry_value_t value); -jerry_value_t jerry_value_to_number (const jerry_value_t value); -jerry_value_t jerry_value_to_object (const jerry_value_t value); -jerry_value_t jerry_value_to_primitive (const jerry_value_t value); -jerry_value_t jerry_value_to_string (const jerry_value_t value); -jerry_value_t jerry_value_to_bigint (const jerry_value_t value); -double jerry_value_as_integer (const jerry_value_t value); -int32_t jerry_value_as_int32 (const jerry_value_t value); -uint32_t jerry_value_as_uint32 (const jerry_value_t value); - -/** - * Acquire types with reference counter (increase the references). - */ -jerry_value_t jerry_acquire_value (jerry_value_t value); - -/** - * Release the referenced values. - */ -void jerry_release_value (jerry_value_t value); - -/** - * Create functions of API values. - */ -jerry_value_t jerry_create_array (uint32_t size); -jerry_value_t jerry_create_boolean (bool value); -jerry_value_t jerry_create_error (jerry_error_t error_type, const jerry_char_t *message_p); -jerry_value_t jerry_create_error_sz (jerry_error_t error_type, const jerry_char_t *message_p, - jerry_size_t message_size); -jerry_value_t jerry_create_external_function (jerry_external_handler_t handler_p); -jerry_value_t jerry_create_number (double value); -jerry_value_t jerry_create_number_infinity (bool sign); -jerry_value_t jerry_create_number_nan (void); -jerry_value_t jerry_create_null (void); -jerry_value_t jerry_create_object (void); -jerry_value_t jerry_create_promise (void); -jerry_value_t jerry_create_proxy (const jerry_value_t target, const jerry_value_t handler); -jerry_value_t jerry_create_regexp (const jerry_char_t *pattern, uint16_t flags); -jerry_value_t jerry_create_regexp_sz (const jerry_char_t *pattern, jerry_size_t pattern_size, uint16_t flags); -jerry_value_t jerry_create_string_from_utf8 (const jerry_char_t *str_p); -jerry_value_t jerry_create_string_sz_from_utf8 (const jerry_char_t *str_p, jerry_size_t str_size); -jerry_value_t jerry_create_string (const jerry_char_t *str_p); -jerry_value_t jerry_create_string_sz (const jerry_char_t *str_p, jerry_size_t str_size); -jerry_value_t jerry_create_external_string (const jerry_char_t *str_p, - jerry_object_native_free_callback_t free_cb); -jerry_value_t jerry_create_external_string_sz (const jerry_char_t *str_p, jerry_size_t str_size, - jerry_object_native_free_callback_t free_cb); -jerry_value_t jerry_create_symbol (const jerry_value_t value); -jerry_value_t jerry_create_bigint (const uint64_t *digits_p, uint32_t size, bool sign); -jerry_value_t jerry_create_undefined (void); -jerry_value_t jerry_create_realm (void); - -/** - * General API functions of JS objects. - */ -jerry_value_t jerry_has_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); -jerry_value_t jerry_has_own_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); -bool jerry_has_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); -bool jerry_delete_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); -bool jerry_delete_property_by_index (const jerry_value_t obj_val, uint32_t index); -bool jerry_delete_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); - -jerry_value_t jerry_get_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); -jerry_value_t jerry_get_property_by_index (const jerry_value_t obj_val, uint32_t index); -jerry_value_t jerry_get_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); -jerry_value_t jerry_set_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val, - const jerry_value_t value_to_set); -jerry_value_t jerry_set_property_by_index (const jerry_value_t obj_val, uint32_t index, - const jerry_value_t value_to_set); -bool jerry_set_internal_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val, - const jerry_value_t value_to_set); - -void jerry_init_property_descriptor_fields (jerry_property_descriptor_t *prop_desc_p); -jerry_value_t jerry_define_own_property (const jerry_value_t obj_val, - const jerry_value_t prop_name_val, - const jerry_property_descriptor_t *prop_desc_p); - -bool jerry_get_own_property_descriptor (const jerry_value_t obj_val, - const jerry_value_t prop_name_val, - jerry_property_descriptor_t *prop_desc_p); -void jerry_free_property_descriptor_fields (const jerry_property_descriptor_t *prop_desc_p); - -jerry_value_t jerry_call_function (const jerry_value_t func_obj_val, const jerry_value_t this_val, - const jerry_value_t args_p[], jerry_size_t args_count); -jerry_value_t jerry_construct_object (const jerry_value_t func_obj_val, const jerry_value_t args_p[], - jerry_size_t args_count); - -jerry_value_t jerry_get_object_keys (const jerry_value_t obj_val); -jerry_value_t jerry_get_prototype (const jerry_value_t obj_val); -jerry_value_t jerry_set_prototype (const jerry_value_t obj_val, const jerry_value_t proto_obj_val); - -bool jerry_get_object_native_pointer (const jerry_value_t obj_val, - void **out_native_pointer_p, - const jerry_object_native_info_t *native_pointer_info_p); -void jerry_set_object_native_pointer (const jerry_value_t obj_val, - void *native_pointer_p, - const jerry_object_native_info_t *native_info_p); -bool jerry_delete_object_native_pointer (const jerry_value_t obj_val, - const jerry_object_native_info_t *native_info_p); - -bool jerry_objects_foreach (jerry_objects_foreach_t foreach_p, - void *user_data); -bool jerry_objects_foreach_by_native_info (const jerry_object_native_info_t *native_info_p, - jerry_objects_foreach_by_native_info_t foreach_p, - void *user_data_p); - -bool jerry_foreach_object_property (const jerry_value_t obj_val, jerry_object_property_foreach_t foreach_p, - void *user_data_p); - -jerry_value_t jerry_object_get_property_names (const jerry_value_t obj_val, jerry_property_filter_t filter); -jerry_value_t jerry_from_property_descriptor (const jerry_property_descriptor_t *src_prop_desc_p); -jerry_value_t jerry_to_property_descriptor (jerry_value_t obj_value, jerry_property_descriptor_t *out_prop_desc_p); -/** - * Promise functions. - */ -jerry_value_t jerry_resolve_or_reject_promise (jerry_value_t promise, jerry_value_t argument, bool is_resolve); - -/** - * Enum values representing various Promise states. - */ -typedef enum -{ - JERRY_PROMISE_STATE_NONE = 0u, /**< Invalid/Unknown state (possibly called on a non-promise object). */ - JERRY_PROMISE_STATE_PENDING, /**< Promise is in "Pending" state. */ - JERRY_PROMISE_STATE_FULFILLED, /**< Promise is in "Fulfilled" state. */ - JERRY_PROMISE_STATE_REJECTED, /**< Promise is in "Rejected" state. */ -} jerry_promise_state_t; - -jerry_value_t jerry_get_promise_result (const jerry_value_t promise); -jerry_promise_state_t jerry_get_promise_state (const jerry_value_t promise); - -/** - * Symbol functions. - */ - -/** - * List of well-known symbols. - */ -typedef enum -{ - JERRY_SYMBOL_ASYNC_ITERATOR, /**< @@asyncIterator well-known symbol */ - JERRY_SYMBOL_HAS_INSTANCE, /**< @@hasInstance well-known symbol */ - JERRY_SYMBOL_IS_CONCAT_SPREADABLE, /**< @@isConcatSpreadable well-known symbol */ - JERRY_SYMBOL_ITERATOR, /**< @@iterator well-known symbol */ - JERRY_SYMBOL_MATCH, /**< @@match well-known symbol */ - JERRY_SYMBOL_REPLACE, /**< @@replace well-known symbol */ - JERRY_SYMBOL_SEARCH, /**< @@search well-known symbol */ - JERRY_SYMBOL_SPECIES, /**< @@species well-known symbol */ - JERRY_SYMBOL_SPLIT, /**< @@split well-known symbol */ - JERRY_SYMBOL_TO_PRIMITIVE, /**< @@toPrimitive well-known symbol */ - JERRY_SYMBOL_TO_STRING_TAG, /**< @@toStringTag well-known symbol */ - JERRY_SYMBOL_UNSCOPABLES, /**< @@unscopables well-known symbol */ - JERRY_SYMBOL_MATCH_ALL, /**< @@matchAll well-known symbol */ -} jerry_well_known_symbol_t; - -jerry_value_t jerry_get_well_known_symbol (jerry_well_known_symbol_t symbol); -jerry_value_t jerry_get_symbol_description (const jerry_value_t symbol); -jerry_value_t jerry_get_symbol_descriptive_string (const jerry_value_t symbol); - -/** - * Realm functions. - */ -jerry_value_t jerry_set_realm (jerry_value_t realm_value); -jerry_value_t jerry_realm_get_this (jerry_value_t realm_value); -jerry_value_t jerry_realm_set_this (jerry_value_t realm_value, jerry_value_t this_value); - -/** - * BigInt functions. - */ -uint32_t jerry_get_bigint_size_in_digits (jerry_value_t value); -void jerry_get_bigint_digits (jerry_value_t value, uint64_t *digits_p, uint32_t size, bool *sign_p); - -/** - * Proxy functions. - */ -jerry_value_t jerry_get_proxy_target (jerry_value_t proxy_value); - -/** - * Input validator functions. - */ -bool jerry_is_valid_utf8_string (const jerry_char_t *utf8_buf_p, jerry_size_t buf_size); -bool jerry_is_valid_cesu8_string (const jerry_char_t *cesu8_buf_p, jerry_size_t buf_size); - -/* - * Dynamic memory management functions. - */ -void *jerry_heap_alloc (size_t size); -void jerry_heap_free (void *mem_p, size_t size); - -/* - * External context functions. - */ -jerry_context_t *jerry_create_context (uint32_t heap_size, jerry_context_alloc_t alloc, void *cb_data_p); - -/** - * Miscellaneous functions. - */ -void jerry_set_vm_exec_stop_callback (jerry_vm_exec_stop_callback_t stop_cb, void *user_p, uint32_t frequency); -jerry_value_t jerry_get_backtrace (uint32_t max_depth); -jerry_value_t jerry_get_backtrace_from (uint32_t max_depth, jerry_value_t ignored_function); -jerry_value_t jerry_get_resource_name (const jerry_value_t value); -jerry_value_t jerry_get_new_target (void); - -/** - * Array buffer components. - */ -bool jerry_value_is_arraybuffer (const jerry_value_t value); -jerry_value_t jerry_create_arraybuffer (const jerry_length_t size); -jerry_value_t jerry_create_arraybuffer_external (const jerry_length_t size, - uint8_t *buffer_p, - jerry_object_native_free_callback_t free_cb); -jerry_length_t jerry_arraybuffer_write (const jerry_value_t value, - jerry_length_t offset, - const uint8_t *buf_p, - jerry_length_t buf_size); -jerry_length_t jerry_arraybuffer_read (const jerry_value_t value, - jerry_length_t offset, - uint8_t *buf_p, - jerry_length_t buf_size); -jerry_length_t jerry_get_arraybuffer_byte_length (const jerry_value_t value); -uint8_t *jerry_get_arraybuffer_pointer (const jerry_value_t value); -jerry_value_t jerry_is_arraybuffer_detachable (const jerry_value_t value); -jerry_value_t jerry_detach_arraybuffer (const jerry_value_t value); - -/** - * DataView functions. - */ -jerry_value_t -jerry_create_dataview (const jerry_value_t value, - const jerry_length_t byte_offset, - const jerry_length_t byte_length); - -bool -jerry_value_is_dataview (const jerry_value_t value); - -jerry_value_t -jerry_get_dataview_buffer (const jerry_value_t dataview, - jerry_length_t *byte_offset, - jerry_length_t *byte_length); - -/** - * TypedArray functions. - */ - -/** - * TypedArray types. - */ -typedef enum -{ - JERRY_TYPEDARRAY_INVALID = 0, - JERRY_TYPEDARRAY_UINT8, - JERRY_TYPEDARRAY_UINT8CLAMPED, - JERRY_TYPEDARRAY_INT8, - JERRY_TYPEDARRAY_UINT16, - JERRY_TYPEDARRAY_INT16, - JERRY_TYPEDARRAY_UINT32, - JERRY_TYPEDARRAY_INT32, - JERRY_TYPEDARRAY_FLOAT32, - JERRY_TYPEDARRAY_FLOAT64, - JERRY_TYPEDARRAY_BIGINT64, - JERRY_TYPEDARRAY_BIGUINT64, -} jerry_typedarray_type_t; - -/** - * Container types. - */ -typedef enum -{ - JERRY_CONTAINER_TYPE_INVALID = 0, /**< Invalid container */ - JERRY_CONTAINER_TYPE_MAP, /**< Map type */ - JERRY_CONTAINER_TYPE_SET, /**< Set type */ - JERRY_CONTAINER_TYPE_WEAKMAP, /**< WeakMap type */ - JERRY_CONTAINER_TYPE_WEAKSET, /**< WeakSet type */ -} jerry_container_type_t; - -bool jerry_value_is_typedarray (jerry_value_t value); -jerry_value_t jerry_create_typedarray (jerry_typedarray_type_t type_name, jerry_length_t length); -jerry_value_t jerry_create_typedarray_for_arraybuffer_sz (jerry_typedarray_type_t type_name, - const jerry_value_t arraybuffer, - jerry_length_t byte_offset, - jerry_length_t length); -jerry_value_t jerry_create_typedarray_for_arraybuffer (jerry_typedarray_type_t type_name, - const jerry_value_t arraybuffer); -jerry_typedarray_type_t jerry_get_typedarray_type (jerry_value_t value); -jerry_length_t jerry_get_typedarray_length (jerry_value_t value); -jerry_value_t jerry_get_typedarray_buffer (jerry_value_t value, - jerry_length_t *byte_offset, - jerry_length_t *byte_length); -jerry_value_t jerry_json_parse (const jerry_char_t *string_p, jerry_size_t string_size); -jerry_value_t jerry_json_stringify (const jerry_value_t object_to_stringify); -jerry_value_t jerry_create_container (jerry_container_type_t container_type, - const jerry_value_t *arguments_list_p, - jerry_length_t arguments_list_len); -jerry_container_type_t jerry_get_container_type (const jerry_value_t value); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYSCRIPT_CORE_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-debugger-transport.h b/firmware/spade/src/rpi/jerry/include/jerryscript-debugger-transport.h deleted file mode 100644 index f6f9acaaa5..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-debugger-transport.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_DEBUGGER_TRANSPORT_H -#define JERRYSCRIPT_DEBUGGER_TRANSPORT_H - -#include -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** \addtogroup jerry-debugger-transport Jerry engine debugger interface - transport control - * @{ - */ - -/** - * Maximum number of bytes transmitted or received. - */ -#define JERRY_DEBUGGER_TRANSPORT_MAX_BUFFER_SIZE 128 - -/** - * Receive message context. - */ -typedef struct -{ - uint8_t *buffer_p; /**< buffer for storing the received data */ - size_t received_length; /**< number of currently received bytes */ - uint8_t *message_p; /**< start of the received message */ - size_t message_length; /**< length of the received message */ - size_t message_total_length; /**< total length for datagram protocols, - * 0 for stream protocols */ -} jerry_debugger_transport_receive_context_t; - -/** - * Forward definition of jerry_debugger_transport_header_t. - */ -struct jerry_debugger_transport_interface_t; - -/** - * Close connection callback. - */ -typedef void (*jerry_debugger_transport_close_t) (struct jerry_debugger_transport_interface_t *header_p); - -/** - * Send data callback. - */ -typedef bool (*jerry_debugger_transport_send_t) (struct jerry_debugger_transport_interface_t *header_p, - uint8_t *message_p, size_t message_length); - -/** - * Receive data callback. - */ -typedef bool (*jerry_debugger_transport_receive_t) (struct jerry_debugger_transport_interface_t *header_p, - jerry_debugger_transport_receive_context_t *context_p); - -/** - * Transport layer header. - */ -typedef struct jerry_debugger_transport_interface_t -{ - /* The following fields must be filled before calling jerry_debugger_transport_add(). */ - jerry_debugger_transport_close_t close; /**< close connection callback */ - jerry_debugger_transport_send_t send; /**< send data callback */ - jerry_debugger_transport_receive_t receive; /**< receive data callback */ - - /* The following fields are filled by jerry_debugger_transport_add(). */ - struct jerry_debugger_transport_interface_t *next_p; /**< next transport layer */ -} jerry_debugger_transport_header_t; - -void jerry_debugger_transport_add (jerry_debugger_transport_header_t *header_p, - size_t send_message_header_size, size_t max_send_message_size, - size_t receive_message_header_size, size_t max_receive_message_size); -void jerry_debugger_transport_start (void); - -bool jerry_debugger_transport_is_connected (void); -void jerry_debugger_transport_close (void); - -bool jerry_debugger_transport_send (const uint8_t *message_p, size_t message_length); -bool jerry_debugger_transport_receive (jerry_debugger_transport_receive_context_t *context_p); -void jerry_debugger_transport_receive_completed (jerry_debugger_transport_receive_context_t *context_p); - -void jerry_debugger_transport_sleep (void); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYSCRIPT_DEBUGGER_TRANSPORT_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-debugger.h b/firmware/spade/src/rpi/jerry/include/jerryscript-debugger.h deleted file mode 100644 index 759bd4e8f0..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-debugger.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_DEBUGGER_H -#define JERRYSCRIPT_DEBUGGER_H - -#include "jerryscript-core.h" -#include "jerryscript-port.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** \addtogroup jerry-debugger Jerry engine interface - Debugger feature - * @{ - */ - -/** - * JerryScript debugger protocol version. - */ -#define JERRY_DEBUGGER_VERSION (9) - -/** - * Types for the client source wait and run method. - */ -typedef enum -{ - JERRY_DEBUGGER_SOURCE_RECEIVE_FAILED = 0, /**< source is not received */ - JERRY_DEBUGGER_SOURCE_RECEIVED = 1, /**< a source has been received */ - JERRY_DEBUGGER_SOURCE_END = 2, /**< the end of the sources signal received */ - JERRY_DEBUGGER_CONTEXT_RESET_RECEIVED, /**< the context reset request has been received */ -} jerry_debugger_wait_for_source_status_t; - -/** - * Callback for jerry_debugger_wait_and_run_client_source - * - * The callback receives the resource name, source code and a user pointer. - * - * @return this value is passed back by jerry_debugger_wait_and_run_client_source - */ -typedef jerry_value_t (*jerry_debugger_wait_for_source_callback_t) (const jerry_char_t *resource_name_p, - size_t resource_name_size, - const jerry_char_t *source_p, - size_t source_size, void *user_p); - -/** - * Engine debugger functions. - */ -bool jerry_debugger_is_connected (void); -void jerry_debugger_stop (void); -void jerry_debugger_continue (void); -void jerry_debugger_stop_at_breakpoint (bool enable_stop_at_breakpoint); -jerry_debugger_wait_for_source_status_t -jerry_debugger_wait_for_client_source (jerry_debugger_wait_for_source_callback_t callback_p, - void *user_p, jerry_value_t *return_value); -void jerry_debugger_send_output (const jerry_char_t *buffer, jerry_size_t str_size); -void jerry_debugger_send_log (jerry_log_level_t level, const jerry_char_t *buffer, jerry_size_t str_size); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYSCRIPT_DEBUGGER_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/arg.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/arg.h deleted file mode 100644 index 8171bcf3c2..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/arg.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_ARG_H -#define JERRYX_ARG_H - -#include -#include -#include -#include "jerryscript.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** - * The forward declaration of jerryx_arg_t. - */ -typedef struct jerryx_arg_t jerryx_arg_t; - -/** - * The forward declaration of jerryx_arg_js_iterator_t - */ -typedef struct jerryx_arg_js_iterator_t jerryx_arg_js_iterator_t; - -/** - * Signature of the transform function. - */ -typedef jerry_value_t (*jerryx_arg_transform_func_t) (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ - const jerryx_arg_t *c_arg_p); /**< native arg */ - -/** - * The structure used in jerryx_arg_object_properties - */ -typedef struct -{ - const jerry_char_t **name_p; /**< property name list of the JS object */ - jerry_length_t name_cnt; /**< count of the name list */ - const jerryx_arg_t *c_arg_p; /**< points to the array of transformation steps */ - jerry_length_t c_arg_cnt; /**< the count of the `c_arg_p` array */ -} jerryx_arg_object_props_t; - -/** - * The structure used in jerryx_arg_array - */ -typedef struct -{ - const jerryx_arg_t *c_arg_p; /**< points to the array of transformation steps */ - jerry_length_t c_arg_cnt; /**< the count of the `c_arg_p` array */ -} jerryx_arg_array_items_t; - -/** - * The structure defining a single validation & transformation step. - */ -struct jerryx_arg_t -{ - jerryx_arg_transform_func_t func; /**< the transform function */ - void *dest; /**< pointer to destination where func should store the result */ - uintptr_t extra_info; /**< extra information, specific to func */ -}; - -jerry_value_t jerryx_arg_transform_this_and_args (const jerry_value_t this_val, - const jerry_value_t *js_arg_p, - const jerry_length_t js_arg_cnt, - const jerryx_arg_t *c_arg_p, - jerry_length_t c_arg_cnt); - -jerry_value_t jerryx_arg_transform_args (const jerry_value_t *js_arg_p, - const jerry_length_t js_arg_cnt, - const jerryx_arg_t *c_arg_p, - jerry_length_t c_arg_cnt); - -jerry_value_t jerryx_arg_transform_object_properties (const jerry_value_t obj_val, - const jerry_char_t **name_p, - const jerry_length_t name_cnt, - const jerryx_arg_t *c_arg_p, - jerry_length_t c_arg_cnt); -jerry_value_t jerryx_arg_transform_array (const jerry_value_t array_val, - const jerryx_arg_t *c_arg_p, - jerry_length_t c_arg_cnt); - -/** - * Indicates whether an argument is allowed to be coerced into the expected JS type. - */ -typedef enum -{ - JERRYX_ARG_COERCE, /**< the transform inside will invoke toNumber, toBoolean or toString */ - JERRYX_ARG_NO_COERCE /**< the type coercion is not allowed. */ -} jerryx_arg_coerce_t; - -/** - * Indicates whether an argument is optional or required. - */ -typedef enum -{ - /** - * The argument is optional. If the argument is `undefined` the transform is - * successful and `c_arg_p->dest` remains untouched. - */ - JERRYX_ARG_OPTIONAL, - /** - * The argument is required. If the argument is `undefined` the transform - * will fail and `c_arg_p->dest` remains untouched. - */ - JERRYX_ARG_REQUIRED -} jerryx_arg_optional_t; - -/** - * Indicates the rounding policy which will be chosen to transform an integer. - */ -typedef enum -{ - JERRYX_ARG_ROUND, /**< round */ - JERRYX_ARG_FLOOR, /**< floor */ - JERRYX_ARG_CEIL /**< ceil */ -} jerryx_arg_round_t; - -/** - * Indicates the clamping policy which will be chosen to transform an integer. - * If the policy is NO_CLAMP, and the number is out of range, - * then the transformer will throw a range error. - */ -typedef enum -{ - JERRYX_ARG_CLAMP,/**< clamp the number when it is out of range */ - JERRYX_ARG_NO_CLAMP /**< throw a range error */ -} jerryx_arg_clamp_t; - -/* Inline functions for initializing jerryx_arg_t */ - -#define JERRYX_ARG_INTEGER(type) \ - static inline jerryx_arg_t \ - jerryx_arg_ ## type (type ## _t *dest, \ - jerryx_arg_round_t round_flag, \ - jerryx_arg_clamp_t clamp_flag, \ - jerryx_arg_coerce_t coerce_flag, \ - jerryx_arg_optional_t opt_flag); - -JERRYX_ARG_INTEGER (uint8) -JERRYX_ARG_INTEGER (int8) -JERRYX_ARG_INTEGER (uint16) -JERRYX_ARG_INTEGER (int16) -JERRYX_ARG_INTEGER (uint32) -JERRYX_ARG_INTEGER (int32) - -#undef JERRYX_ARG_INTEGER - -static inline jerryx_arg_t -jerryx_arg_number (double *dest, jerryx_arg_coerce_t coerce_flag, jerryx_arg_optional_t opt_flag); -static inline jerryx_arg_t -jerryx_arg_boolean (bool *dest, jerryx_arg_coerce_t coerce_flag, jerryx_arg_optional_t opt_flag); -static inline jerryx_arg_t -jerryx_arg_string (char *dest, uint32_t size, jerryx_arg_coerce_t coerce_flag, jerryx_arg_optional_t opt_flag); -static inline jerryx_arg_t -jerryx_arg_utf8_string (char *dest, uint32_t size, jerryx_arg_coerce_t coerce_flag, jerryx_arg_optional_t opt_flag); -static inline jerryx_arg_t -jerryx_arg_function (jerry_value_t *dest, jerryx_arg_optional_t opt_flag); -static inline jerryx_arg_t -jerryx_arg_native_pointer (void **dest, const jerry_object_native_info_t *info_p, jerryx_arg_optional_t opt_flag); -static inline jerryx_arg_t -jerryx_arg_ignore (void); -static inline jerryx_arg_t -jerryx_arg_custom (void *dest, uintptr_t extra_info, jerryx_arg_transform_func_t func); -static inline jerryx_arg_t -jerryx_arg_object_properties (const jerryx_arg_object_props_t *object_props_p, jerryx_arg_optional_t opt_flag); -static inline jerryx_arg_t -jerryx_arg_array (const jerryx_arg_array_items_t *array_items_p, jerryx_arg_optional_t opt_flag); - -jerry_value_t -jerryx_arg_transform_optional (jerryx_arg_js_iterator_t *js_arg_iter_p, - const jerryx_arg_t *c_arg_p, - jerryx_arg_transform_func_t func); - -/* Helper functions for transform functions. */ -jerry_value_t jerryx_arg_js_iterator_pop (jerryx_arg_js_iterator_t *js_arg_iter_p); -jerry_value_t jerryx_arg_js_iterator_restore (jerryx_arg_js_iterator_t *js_arg_iter_p); -jerry_value_t jerryx_arg_js_iterator_peek (jerryx_arg_js_iterator_t *js_arg_iter_p); -jerry_length_t jerryx_arg_js_iterator_index (jerryx_arg_js_iterator_t *js_arg_iter_p); - -#include "arg.impl.h" - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYX_ARG_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/arg.impl.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/arg.impl.h deleted file mode 100644 index 1b3111e5af..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/arg.impl.h +++ /dev/null @@ -1,443 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_ARG_IMPL_H -#define JERRYX_ARG_IMPL_H - -/* transform functions for each type. */ - -#define JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL(type) \ - jerry_value_t jerryx_arg_transform_ ## type (jerryx_arg_js_iterator_t *js_arg_iter_p, \ - const jerryx_arg_t *c_arg_p); \ - jerry_value_t jerryx_arg_transform_ ## type ## _optional (jerryx_arg_js_iterator_t *js_arg_iter_p, \ - const jerryx_arg_t *c_arg_p); - -#define JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT(type) \ - JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL (type) \ - JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL (type ## _strict) - -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (uint8) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (int8) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (uint16) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (int16) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (uint32) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (int32) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (number) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (string) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (utf8_string) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT (boolean) - -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL (function) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL (native_pointer) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL (object_props) -JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL (array_items) - -jerry_value_t jerryx_arg_transform_ignore (jerryx_arg_js_iterator_t *js_arg_iter_p, - const jerryx_arg_t *c_arg_p); - -#undef JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL -#undef JERRYX_ARG_TRANSFORM_FUNC_WITH_OPTIONAL_AND_STRICT - -/** - * The structure indicates the options used to transform integer argument. - * It will be passed into jerryx_arg_t's extra_info field. - */ -typedef struct -{ - uint8_t round; /**< rounding policy */ - uint8_t clamp; /**< clamping policy */ -} jerryx_arg_int_option_t; - -/** - * The macro used to generate jerryx_arg_xxx for int type. - */ -#define JERRYX_ARG_INT(type) \ - static inline jerryx_arg_t \ - jerryx_arg_ ## type (type ## _t *dest, \ - jerryx_arg_round_t round_flag, \ - jerryx_arg_clamp_t clamp_flag, \ - jerryx_arg_coerce_t coerce_flag, \ - jerryx_arg_optional_t opt_flag) \ - { \ - jerryx_arg_transform_func_t func; \ - if (coerce_flag == JERRYX_ARG_NO_COERCE) \ - { \ - if (opt_flag == JERRYX_ARG_OPTIONAL) \ - { \ - func = jerryx_arg_transform_ ## type ## _strict_optional; \ - } \ - else \ - { \ - func = jerryx_arg_transform_ ## type ## _strict; \ - } \ - } \ - else \ - { \ - if (opt_flag == JERRYX_ARG_OPTIONAL) \ - { \ - func = jerryx_arg_transform_ ## type ## _optional; \ - } \ - else \ - { \ - func = jerryx_arg_transform_ ## type; \ - } \ - } \ - union \ - { \ - jerryx_arg_int_option_t int_option; \ - uintptr_t extra_info; \ - } u = { .int_option = { .round = (uint8_t) round_flag, .clamp = (uint8_t) clamp_flag } }; \ - return (jerryx_arg_t) \ - { \ - .func = func, \ - .dest = (void *) dest, \ - .extra_info = u.extra_info \ - }; \ - } - -JERRYX_ARG_INT (uint8) -JERRYX_ARG_INT (int8) -JERRYX_ARG_INT (uint16) -JERRYX_ARG_INT (int16) -JERRYX_ARG_INT (uint32) -JERRYX_ARG_INT (int32) - -#undef JERRYX_ARG_INT - -/** - * Create a validation/transformation step (`jerryx_arg_t`) that expects to - * consume one `number` JS argument and stores it into a C `double`. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_number (double *dest, /**< pointer to the double where the result should be stored */ - jerryx_arg_coerce_t coerce_flag, /**< whether type coercion is allowed */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (coerce_flag == JERRYX_ARG_NO_COERCE) - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_number_strict_optional; - } - else - { - func = jerryx_arg_transform_number_strict; - } - } - else - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_number_optional; - } - else - { - func = jerryx_arg_transform_number; - } - } - - return (jerryx_arg_t) - { - .func = func, - .dest = (void *) dest - }; -} /* jerryx_arg_number */ - -/** - * Create a validation/transformation step (`jerryx_arg_t`) that expects to - * consume one `boolean` JS argument and stores it into a C `bool`. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_boolean (bool *dest, /**< points to the native bool */ - jerryx_arg_coerce_t coerce_flag, /**< whether type coercion is allowed */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (coerce_flag == JERRYX_ARG_NO_COERCE) - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_boolean_strict_optional; - } - else - { - func = jerryx_arg_transform_boolean_strict; - } - } - else - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_boolean_optional; - } - else - { - func = jerryx_arg_transform_boolean; - } - } - - return (jerryx_arg_t) - { - .func = func, - .dest = (void *) dest - }; -} /* jerryx_arg_boolean */ - -/** - * Create a validation/transformation step (`jerryx_arg_t`) that expects to - * consume one `string` JS argument and stores it into a C `char` array. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_string (char *dest, /**< pointer to the native char array where the result should be stored */ - uint32_t size, /**< the size of native char array */ - jerryx_arg_coerce_t coerce_flag, /**< whether type coercion is allowed */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (coerce_flag == JERRYX_ARG_NO_COERCE) - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_string_strict_optional; - } - else - { - func = jerryx_arg_transform_string_strict; - } - } - else - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_string_optional; - } - else - { - func = jerryx_arg_transform_string; - } - } - - return (jerryx_arg_t) - { - .func = func, - .dest = (void *) dest, - .extra_info = (uintptr_t) size - }; -} /* jerryx_arg_string */ - -/** - * Create a validation/transformation step (`jerryx_arg_t`) that expects to - * consume one `string` JS argument and stores it into a C utf8 `char` array. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_utf8_string (char *dest, /**< [out] pointer to the native char array where the result should be stored */ - uint32_t size, /**< the size of native char array */ - jerryx_arg_coerce_t coerce_flag, /**< whether type coercion is allowed */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (coerce_flag == JERRYX_ARG_NO_COERCE) - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_utf8_string_strict_optional; - } - else - { - func = jerryx_arg_transform_utf8_string_strict; - } - } - else - { - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_utf8_string_optional; - } - else - { - func = jerryx_arg_transform_utf8_string; - } - } - - return (jerryx_arg_t) - { - .func = func, - .dest = (void *) dest, - .extra_info = (uintptr_t) size - }; -} /* jerryx_arg_utf8_string */ - -/** - * Create a validation/transformation step (`jerryx_arg_t`) that expects to - * consume one `function` JS argument and stores it into a C `jerry_value_t`. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_function (jerry_value_t *dest, /**< pointer to the jerry_value_t where the result should be stored */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_function_optional; - } - else - { - func = jerryx_arg_transform_function; - } - - return (jerryx_arg_t) - { - .func = func, - .dest = (void *) dest - }; -} /* jerryx_arg_function */ - -/** - * Create a validation/transformation step (`jerryx_arg_t`) that expects to - * consume one `object` JS argument that is 'backed' with a native pointer with - * a given type info. In case the native pointer info matches, the transform - * will succeed and the object's native pointer will be assigned to *dest. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_native_pointer (void **dest, /**< pointer to where the resulting native pointer should be stored */ - const jerry_object_native_info_t *info_p, /**< expected the type info */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_native_pointer_optional; - } - else - { - func = jerryx_arg_transform_native_pointer; - } - - return (jerryx_arg_t) - { - .func = func, - .dest = (void *) dest, - .extra_info = (uintptr_t) info_p - }; -} /* jerryx_arg_native_pointer */ - -/** - * Create a jerryx_arg_t instance for ignored argument. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_ignore (void) -{ - return (jerryx_arg_t) - { - .func = jerryx_arg_transform_ignore - }; -} /* jerryx_arg_ignore */ - -/** - * Create a jerryx_arg_t instance with custom transform. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_custom (void *dest, /**< pointer to the native argument where the result should be stored */ - uintptr_t extra_info, /**< the extra parameter, specific to the transform function */ - jerryx_arg_transform_func_t func) /**< the custom transform function */ -{ - return (jerryx_arg_t) - { - .func = func, - .dest = dest, - .extra_info = extra_info - }; -} /* jerryx_arg_custom */ - -/** - * Create a jerryx_arg_t instance for object properties. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_object_properties (const jerryx_arg_object_props_t *object_props, /**< pointer to object property mapping */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_object_props_optional; - } - else - { - func = jerryx_arg_transform_object_props; - } - - return (jerryx_arg_t) - { - .func = func, - .dest = NULL, - .extra_info = (uintptr_t) object_props - }; -} /* jerryx_arg_object_properties */ - -/** - * Create a jerryx_arg_t instance for array. - * - * @return a jerryx_arg_t instance. - */ -static inline jerryx_arg_t -jerryx_arg_array (const jerryx_arg_array_items_t *array_items_p, /**< pointer to array items mapping */ - jerryx_arg_optional_t opt_flag) /**< whether the argument is optional */ -{ - jerryx_arg_transform_func_t func; - - if (opt_flag == JERRYX_ARG_OPTIONAL) - { - func = jerryx_arg_transform_array_items_optional; - } - else - { - func = jerryx_arg_transform_array_items; - } - - return (jerryx_arg_t) - { - .func = func, - .dest = NULL, - .extra_info = (uintptr_t) array_items_p - }; -} /* jerryx_arg_array */ - -#endif /* !JERRYX_ARG_IMPL_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/autorelease.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/autorelease.h deleted file mode 100644 index f7cf7dea1d..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/autorelease.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_AUTORELEASE_H -#define JERRYX_AUTORELEASE_H - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include "autorelease.impl.h" - -/* - * Macro for `const jerry_value_t` for which jerry_release_value () is - * automatically called when the variable goes out of scope. - * - * Example usage: - * static void foo (bool enable) - * { - * JERRYX_AR_VALUE_T bar = jerry_create_string (...); - * - * if (enable) { - * JERRYX_AR_VALUE_T baz = jerry_get_global_object (); - * - * // ... - * - * // jerry_release_value (baz) and jerry_release_value (bar) is called automatically before - * // returning, because `baz` and `bar` go out of scope. - * return; - * } - * - * // jerry_release_value (bar) is called automatically when the function returns, - * // because `bar` goes out of scope. - * } - */ -#define JERRYX_AR_VALUE_T __JERRYX_AR_VALUE_T_IMPL - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYX_AUTORELEASE_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/autorelease.impl.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/autorelease.impl.h deleted file mode 100644 index 558b17095a..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/autorelease.impl.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_AUTORELEASE_IMPL_H -#define JERRYX_AUTORELEASE_IMPL_H - -#include "jerryscript.h" - -#ifdef __GNUC__ -/* - * Calls jerry_release_value (*value). - * The GCC __cleanup__ function must take a pointer to the variable to clean up. - * - * @return void - */ -static inline void -jerryx_autorelease_cleanup (const jerry_value_t *value) /**< jerry value */ -{ - jerry_release_value (*value); -} /* jerryx_autorelease_cleanup */ - -#define __JERRYX_AR_VALUE_T_IMPL const jerry_value_t __attribute__ ((__cleanup__(jerryx_autorelease_cleanup))) -#else /* !__GNUC__ */ -/* TODO: for other compilers */ -#error "No autorelease implementation for your compiler!" -#endif /* __GNUC__ */ - -#endif /* !JERRYX_AUTORELEASE_IMPL_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/debugger.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/debugger.h deleted file mode 100644 index e229e25ec5..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/debugger.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_DEBUGGER_H -#define JERRYX_DEBUGGER_H - -#include "jerryscript.h" -#include "jerryscript-debugger-transport.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -void jerryx_debugger_after_connect (bool success); - -/* - * Message transmission interfaces. - */ -bool jerryx_debugger_tcp_create (uint16_t port); -bool jerryx_debugger_serial_create (const char *config); - -/* - * Message encoding interfaces. - */ -bool jerryx_debugger_ws_create (void); -bool jerryx_debugger_rp_create (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYX_HANDLER_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/handle-scope.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/handle-scope.h deleted file mode 100644 index 95505f7b1a..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/handle-scope.h +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_HANDLE_SCOPE_H -#define JERRYX_HANDLE_SCOPE_H - -#include "jerryscript.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#ifndef JERRYX_HANDLE_PRELIST_SIZE -#define JERRYX_HANDLE_PRELIST_SIZE 20 -#endif - -#ifndef JERRYX_SCOPE_PRELIST_SIZE -#define JERRYX_SCOPE_PRELIST_SIZE 20 -#endif - -typedef struct jerryx_handle_t jerryx_handle_t; -/** - * Dynamically allocated handle in the scopes. - * Scopes has it's own size-limited linear storage of handles. Still there - * might be not enough space left for new handles, dynamically allocated - * `jerryx_handle_t` could ease the pre-allocated linear memory burden. - */ -struct jerryx_handle_t -{ - jerry_value_t jval; /**< jerry value of the handle bound to */ - jerryx_handle_t *sibling; /**< next sibling the the handle */ -}; - -#define JERRYX_HANDLE_SCOPE_FIELDS \ - jerry_value_t handle_prelist[JERRYX_HANDLE_PRELIST_SIZE]; \ - uint8_t prelist_handle_count; \ - bool escaped; \ - jerryx_handle_t *handle_ptr - -typedef struct jerryx_handle_scope_s jerryx_handle_scope_t; -typedef jerryx_handle_scope_t *jerryx_handle_scope; -typedef jerryx_handle_scope_t *jerryx_escapable_handle_scope; -/** - * Inlined simple handle scope type. - */ -struct jerryx_handle_scope_s -{ - JERRYX_HANDLE_SCOPE_FIELDS; /**< common handle scope fields */ -}; - -typedef struct jerryx_handle_scope_dynamic_s jerryx_handle_scope_dynamic_t; -/** - * Dynamically allocated handle scope type. - */ -struct jerryx_handle_scope_dynamic_s -{ - JERRYX_HANDLE_SCOPE_FIELDS; /**< common handle scope fields */ - jerryx_handle_scope_dynamic_t *child; /**< child dynamically allocated handle scope */ - jerryx_handle_scope_dynamic_t *parent; /**< parent dynamically allocated handle scope */ -}; - -#undef JERRYX_HANDLE_SCOPE_FIELDS - -typedef enum -{ - jerryx_handle_scope_ok = 0, - - jerryx_escape_called_twice, - jerryx_handle_scope_mismatch, -} jerryx_handle_scope_status; - -jerryx_handle_scope_status -jerryx_open_handle_scope (jerryx_handle_scope *result); - -jerryx_handle_scope_status -jerryx_close_handle_scope (jerryx_handle_scope scope); - -jerryx_handle_scope_status -jerryx_open_escapable_handle_scope (jerryx_handle_scope *result); - -jerryx_handle_scope_status -jerryx_close_escapable_handle_scope (jerryx_handle_scope scope); - -jerryx_handle_scope_status -jerryx_escape_handle (jerryx_escapable_handle_scope scope, - jerry_value_t escapee, - jerry_value_t *result); - -/** - * Completely escape a handle from handle scope, - * leave life time management totally up to user. - */ -jerryx_handle_scope_status -jerryx_remove_handle (jerryx_escapable_handle_scope scope, - jerry_value_t escapee, - jerry_value_t *result); - -jerry_value_t -jerryx_create_handle (jerry_value_t jval); - -jerry_value_t -jerryx_create_handle_in_scope (jerry_value_t jval, jerryx_handle_scope scope); - -/** MARK: - handle-scope-allocator.c */ -jerryx_handle_scope_t * -jerryx_handle_scope_get_current (void); - -jerryx_handle_scope_t * -jerryx_handle_scope_get_root (void); -/** MARK: - END handle-scope-allocator.c */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYX_HANDLE_SCOPE_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/handler.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/handler.h deleted file mode 100644 index c36b6b8717..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/handler.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_HANDLER_H -#define JERRYX_HANDLER_H - -#include "jerryscript.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* - * Handler registration helper - */ - -jerry_value_t jerryx_handler_register_global (const jerry_char_t *name_p, - jerry_external_handler_t handler_p); - -/* - * Common external function handlers - */ - -jerry_value_t jerryx_handler_assert_fatal (const jerry_value_t func_obj_val, const jerry_value_t this_p, - const jerry_value_t args_p[], const jerry_length_t args_cnt); -jerry_value_t jerryx_handler_assert_throw (const jerry_value_t func_obj_val, const jerry_value_t this_p, - const jerry_value_t args_p[], const jerry_length_t args_cnt); -jerry_value_t jerryx_handler_assert (const jerry_value_t func_obj_val, const jerry_value_t this_p, - const jerry_value_t args_p[], const jerry_length_t args_cnt); -jerry_value_t jerryx_handler_gc (const jerry_value_t func_obj_val, const jerry_value_t this_p, - const jerry_value_t args_p[], const jerry_length_t args_cnt); -jerry_value_t jerryx_handler_print (const jerry_value_t func_obj_val, const jerry_value_t this_p, - const jerry_value_t args_p[], const jerry_length_t args_cnt); -jerry_value_t jerryx_handler_resource_name (const jerry_value_t func_obj_val, const jerry_value_t this_p, - const jerry_value_t args_p[], const jerry_length_t args_cnt); - -/** - * Struct used by the `jerryx_set_functions` method to - * register multiple methods for a given object. - */ -typedef struct -{ - const char *name; /**< name of the property to add */ - jerry_value_t value; /**< value of the property */ -} jerryx_property_entry; - -#define JERRYX_PROPERTY_NUMBER(NAME, NUMBER) (jerryx_property_entry) { NAME, jerry_create_number (NUMBER) } -#define JERRYX_PROPERTY_STRING(NAME, STR) \ - (jerryx_property_entry) { NAME, jerry_create_string_from_utf8 ((const jerry_char_t *) STR) } -#define JERRYX_PROPERTY_STRING_SZ(NAME, STR, SIZE) \ - (jerryx_property_entry) { NAME, jerry_create_string_sz_from_utf8 ((const jerry_char_t *) STR, SIZE) } -#define JERRYX_PROPERTY_BOOLEAN(NAME, VALUE) (jerryx_property_entry) { NAME, jerry_create_boolean (VALUE) } -#define JERRYX_PROPERTY_FUNCTION(NAME, FUNC) (jerryx_property_entry) { NAME, jerry_create_external_function (FUNC) } -#define JERRYX_PROPERTY_UNDEFINED(NAME) (jerryx_property_entry) { NAME, jerry_create_undefined() } -#define JERRYX_PROPERTY_LIST_END() (jerryx_property_entry) { NULL, 0 } - -/** - * Stores the result of property register operation. - */ -typedef struct -{ - jerry_value_t result; /**< result of property registraion (undefined or error object) */ - uint32_t registered; /**< number of successfully registered methods */ -} jerryx_register_result; - -jerryx_register_result -jerryx_set_properties (const jerry_value_t target_object, - const jerryx_property_entry entries[]); - -void -jerryx_release_property_entry (const jerryx_property_entry entries[], - const jerryx_register_result register_result); - -jerry_value_t -jerryx_set_property_str (const jerry_value_t target_object, - const char *name, - const jerry_value_t value); - -jerry_value_t -jerryx_get_property_str (const jerry_value_t target_object, - const char *name); - -bool -jerryx_has_property_str (const jerry_value_t target_object, - const char *name); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYX_HANDLER_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/module.h b/firmware/spade/src/rpi/jerry/include/jerryscript-ext/module.h deleted file mode 100644 index 1c1025d563..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-ext/module.h +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYX_MODULE_H -#define JERRYX_MODULE_H - -#include "jerryscript.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** - * Declare the signature for the module initialization function. - */ -typedef jerry_value_t (*jerryx_native_module_on_resolve_t) (void); - -/** - * Declare the structure used to define a module. One should only make use of this structure via the - * JERRYX_NATIVE_MODULE macro declared below. - */ -typedef struct jerryx_native_module_t -{ - const jerry_char_t *name_p; /**< name of the module */ - const jerryx_native_module_on_resolve_t on_resolve_p; /**< function that returns a new instance of the module */ - struct jerryx_native_module_t *next_p; /**< pointer to next module in the list */ -} jerryx_native_module_t; - -/** - * Declare the constructor and destructor attributes. These evaluate to nothing if this extension is built without - * library constructor/destructor support. - */ -#ifdef ENABLE_INIT_FINI -#ifdef _MSC_VER -#error "`FEATURE_INIT_FINI` build flag isn't supported on Windows, because Microsoft Visual C/C++ Compiler \ -doesn't support library constructors and destructors." -#endif -#define JERRYX_MODULE_CONSTRUCTOR_ATTRIBUTE __attribute__((constructor)) -#define JERRYX_MODULE_DESTRUCTOR_ATTRIBUTE __attribute__((destructor)) -#define JERRYX_MODULE_REGISTRATION_QUALIFIER static -#else /* !ENABLE_INIT_FINI */ -#define JERRYX_MODULE_CONSTRUCTOR_ATTRIBUTE -#define JERRYX_MODULE_DESTRUCTOR_ATTRIBUTE -#define JERRYX_MODULE_REGISTRATION_QUALIFIER -#endif /* ENABLE_INIT_FINI */ - -/** - * Having two levels of macros allows strings to be used unquoted. - */ -#define JERRYX_NATIVE_MODULE(module_name, on_resolve_cb) \ - JERRYX_NATIVE_MODULE_IMPLEM(module_name, on_resolve_cb) - -#define JERRYX_NATIVE_MODULE_IMPLEM(module_name, on_resolve_cb) \ - static jerryx_native_module_t _ ## module_name ## _definition = \ - { \ - .name_p = (jerry_char_t *) #module_name, \ - .on_resolve_p = (on_resolve_cb), \ - .next_p = NULL \ - }; \ - \ - JERRYX_MODULE_REGISTRATION_QUALIFIER void \ - module_name ## _register (void) JERRYX_MODULE_CONSTRUCTOR_ATTRIBUTE; \ - JERRYX_MODULE_REGISTRATION_QUALIFIER void \ - module_name ## _register (void) \ - { \ - jerryx_native_module_register(&_##module_name##_definition); \ - } \ - \ - JERRYX_MODULE_REGISTRATION_QUALIFIER void \ - module_name ## _unregister (void) \ - JERRYX_MODULE_DESTRUCTOR_ATTRIBUTE; \ - JERRYX_MODULE_REGISTRATION_QUALIFIER void \ - module_name ## _unregister (void) \ - { \ - jerryx_native_module_unregister(&_##module_name##_definition); \ - } - -/** - * Register a native module. This makes it available for loading via jerryx_module_resolve, when - * jerryx_module_native_resolver is passed in as a possible resolver. - */ -void jerryx_native_module_register (jerryx_native_module_t *module_p); - -/** - * Unregister a native module. This removes the module from the list of available native modules, meaning that - * subsequent calls to jerryx_module_resolve with jerryx_module_native_resolver will not be able to find it. - */ -void jerryx_native_module_unregister (jerryx_native_module_t *module_p); - -/** - * Declare the function pointer type for canonical name resolution. - */ -typedef jerry_value_t (*jerryx_module_get_canonical_name_t) (const jerry_value_t name); /**< The name for which to - * compute the canonical - * name */ - -/** - * Declare the function pointer type for module resolution. - */ -typedef bool (*jerryx_module_resolve_t) (const jerry_value_t canonical_name, /**< The module's canonical name */ - jerry_value_t *result); /**< The resulting module, if the function returns - * true */ - -/** - * Declare the structure for module resolvers. - */ -typedef struct -{ - jerryx_module_get_canonical_name_t get_canonical_name_p; /**< function pointer to establish the canonical name of a - * module */ - jerryx_module_resolve_t resolve_p; /**< function pointer to resolve a module */ -} jerryx_module_resolver_t; - -/** - * Declare the JerryScript module resolver so that it may be added to an array of jerryx_module_resolver_t items and - * thus passed to jerryx_module_resolve. - */ -extern jerryx_module_resolver_t jerryx_module_native_resolver; - -/** - * Load a copy of a module into the current context using the provided module resolvers, or return one that was already - * loaded if it is found. - */ -jerry_value_t jerryx_module_resolve (const jerry_value_t name, - const jerryx_module_resolver_t **resolvers, - size_t count); - -/** - * Delete a module from the cache or, if name has the JavaScript value of undefined, clear the entire cache. - */ -void jerryx_module_clear_cache (const jerry_value_t name, - const jerryx_module_resolver_t **resolvers, - size_t count); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYX_MODULE_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-port-default.h b/firmware/spade/src/rpi/jerry/include/jerryscript-port-default.h deleted file mode 100644 index c869b9b403..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-port-default.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_PORT_DEFAULT_H -#define JERRYSCRIPT_PORT_DEFAULT_H - -#include - -#include "jerryscript.h" -#include "jerryscript-port.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** \addtogroup jerry_port_default Default Jerry engine port API - * These functions are only available if the default port of Jerry is used. - * @{ - */ - -jerry_log_level_t jerry_port_default_get_log_level (void); -void jerry_port_default_set_log_level (jerry_log_level_t level); - -void jerry_port_default_set_current_context (jerry_context_t *context_p); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYSCRIPT_PORT_DEFAULT_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-port.h b/firmware/spade/src/rpi/jerry/include/jerryscript-port.h deleted file mode 100644 index 1f22ef080d..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-port.h +++ /dev/null @@ -1,284 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_PORT_H -#define JERRYSCRIPT_PORT_H - -#include -#include -#include - -#include "jerryscript-compiler.h" -#include "jerryscript-core.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** \addtogroup jerry_port Jerry engine port - * @{ - */ - -/* - * Termination Port API - * - * Note: - * It is questionable whether a library should be able to terminate an - * application. However, as of now, we only have the concept of completion - * code around jerry_parse and jerry_run. Most of the other API functions - * have no way of signaling an error. So, we keep the termination approach - * with this port function. - */ - -/** - * Error codes - */ -typedef enum -{ - ERR_OUT_OF_MEMORY = 10, - ERR_REF_COUNT_LIMIT = 12, - ERR_DISABLED_BYTE_CODE = 13, - ERR_UNTERMINATED_GC_LOOPS = 14, - ERR_FAILED_INTERNAL_ASSERTION = 120 -} jerry_fatal_code_t; - -/** - * Signal the port that jerry experienced a fatal failure from which it cannot - * recover. - * - * @param code gives the cause of the error. - * - * Note: - * Jerry expects the function not to return. - * - * Example: a libc-based port may implement this with exit() or abort(), or both. - */ -void JERRY_ATTR_NORETURN jerry_port_fatal (jerry_fatal_code_t code); - -/* - * I/O Port API - */ - -/** - * Jerry log levels. The levels are in severity order - * where the most serious levels come first. - */ -typedef enum -{ - JERRY_LOG_LEVEL_ERROR, /**< the engine will terminate after the message is printed */ - JERRY_LOG_LEVEL_WARNING, /**< a request is aborted, but the engine continues its operation */ - JERRY_LOG_LEVEL_DEBUG, /**< debug messages from the engine, low volume */ - JERRY_LOG_LEVEL_TRACE /**< detailed info about engine internals, potentially high volume */ -} jerry_log_level_t; - -/** - * Display or log a debug/error message. The function should implement a printf-like - * interface, where the first argument specifies the log level - * and the second argument specifies a format string on how to stringify the rest - * of the parameter list. - * - * This function is only called with messages coming from the jerry engine as - * the result of some abnormal operation or describing its internal operations - * (e.g., data structure dumps or tracing info). - * - * It should be the port that decides whether error and debug messages are logged to - * the console, or saved to a database or to a file. - * - * Example: a libc-based port may implement this with vfprintf(stderr) or - * vfprintf(logfile), or both, depending on log level. - * - * Note: - * This port function is called by jerry-core when JERRY_LOGGING is - * enabled. It is also common practice though to use this function in - * application code. - */ -void JERRY_ATTR_FORMAT (printf, 2, 3) jerry_port_log (jerry_log_level_t level, const char *format, ...); - -/* - * Date Port API - */ - -/** - * Get local time zone adjustment, in milliseconds, for the given timestamp. - * The timestamp can be specified in either UTC or local time, depending on - * the value of is_utc. Adding the value returned from this function to - * a timestamp in UTC time should result in local time for the current time - * zone, and subtracting it from a timestamp in local time should result in - * UTC time. - * - * Ideally, this function should satisfy the stipulations applied to LocalTZA - * in section 20.3.1.7 of the ECMAScript version 9.0 spec. - * - * See Also: - * ECMA-262 v9, 20.3.1.7 - * - * Note: - * This port function is called by jerry-core when - * JERRY_BUILTIN_DATE is defined to 1. Otherwise this function is - * not used. - * - * @param unix_ms The unix timestamp we want an offset for, given in - * millisecond precision (could be now, in the future, - * or in the past). As with all unix timestamps, 0 refers to - * 1970-01-01, a day is exactly 86 400 000 milliseconds, and - * leap seconds cause the same second to occur twice. - * @param is_utc Is the given timestamp in UTC time? If false, it is in local - * time. - * - * @return milliseconds between local time and UTC for the given timestamp, - * if available - *. 0 if not available / we are in UTC. - */ -double jerry_port_get_local_time_zone_adjustment (double unix_ms, bool is_utc); - -/** - * Get system time - * - * Note: - * This port function is called by jerry-core when - * JERRY_BUILTIN_DATE is defined to 1. It is also common practice - * in application code to use this function for the initialization of the - * random number generator. - * - * @return milliseconds since Unix epoch - */ -double jerry_port_get_current_time (void); - -/** - * Get the current context of the engine. Each port should provide its own - * implementation of this interface. - * - * Note: - * This port function is called by jerry-core when - * JERRY_EXTERNAL_CONTEXT is enabled. Otherwise this function is not - * used. - * - * @return the pointer to the engine context. - */ -struct jerry_context_t *jerry_port_get_current_context (void); - -/** - * Makes the process sleep for a given time. - * - * Note: - * This port function is called by jerry-core when JERRY_DEBUGGER is - * enabled (set to 1). Otherwise this function is not used. - * - * @param sleep_time milliseconds to sleep. - */ -void jerry_port_sleep (uint32_t sleep_time); - -/** - * Print a single character. - * - * Note: - * This port function is here so the jerry-ext components would have - * a common way to print out information. - * If possible do not use from the jerry-core. - * - * @param c the character to print. - */ -void jerry_port_print_char (char c); - -/** - * Open a source file and read its contents into a buffer. - * - * Note: - * This port function is called by jerry-core when JERRY_MODULE_SYSTEM - * is enabled. The path is specified in the import statement's 'from "..."' - * section. - * - * @param file_name_p Path that points to the EcmaScript file in the - * filesystem. - * @param out_size_p The opened file's size in bytes. - * - * @return the pointer to the buffer which contains the content of the file. - */ -uint8_t *jerry_port_read_source (const char *file_name_p, size_t *out_size_p); - -/** - * Frees the allocated buffer after the contents of the file are not needed - * anymore. - * - * @param buffer_p The pointer the allocated buffer. - */ -void jerry_port_release_source (uint8_t *buffer_p); - -/** - * Normalize a file path string. - * - * Note: - * This port function is called by jerry-core when JERRY_MODULE_SYSTEM - * is enabled. The normalized path is used to uniquely identify modules. - * - * @param in_path_p Input path as a zero terminated string. - * @param out_buf_p Pointer to the output buffer where the normalized path should be written. - * @param out_buf_size Size of the output buffer. - * @param base_file_p A file path that 'in_path_p' is relative to, usually the current module file. - * A NULL value represents that 'in_path_p' is relative to the current working directory. - * - * @return length of the string written to the output buffer - * zero, if the buffer was not sufficient or an error occured - */ -size_t jerry_port_normalize_path (const char *in_path_p, - char *out_buf_p, - size_t out_buf_size, - char *base_file_p); - -/** - * Get the module object of a native module. - * - * Note: - * This port function is called by jerry-core when JERRY_MODULE_SYSTEM - * is enabled. - * - * @param name String value of the module specifier. - * - * @return Undefined, if 'name' is not a native module - * jerry_value_t containing the module object, otherwise - */ -jerry_value_t jerry_port_get_native_module (jerry_value_t name); - -/** - * HostPromiseRejectionTracker operations - */ -typedef enum -{ - JERRY_PROMISE_REJECTION_OPERATION_REJECT, /**< promise is rejected without any handlers */ - JERRY_PROMISE_REJECTION_OPERATION_HANDLE, /**< handler is added to a rejected promise for the first time */ -} jerry_promise_rejection_operation_t; - -/** - * Track unhandled promise rejections. - * - * Note: - * This port function is called by jerry-core when JERRY_BUILTIN_PROMISE - * is enabled. - * - * @param promise rejected promise - * @param operation HostPromiseRejectionTracker operation - */ -void jerry_port_track_promise_rejection (const jerry_value_t promise, - const jerry_promise_rejection_operation_t operation); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYSCRIPT_PORT_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript-snapshot.h b/firmware/spade/src/rpi/jerry/include/jerryscript-snapshot.h deleted file mode 100644 index 831bb49220..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript-snapshot.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_SNAPSHOT_H -#define JERRYSCRIPT_SNAPSHOT_H - -#include "jerryscript-core.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/** \addtogroup jerry-snapshot Jerry engine interface - Snapshot feature - * @{ - */ - -/** - * Jerry snapshot format version. - */ -#define JERRY_SNAPSHOT_VERSION (63u) - -/** - * Flags for jerry_generate_snapshot and jerry_generate_function_snapshot. - */ -typedef enum -{ - JERRY_SNAPSHOT_SAVE_STATIC = (1u << 0), /**< static snapshot */ - JERRY_SNAPSHOT_SAVE_STRICT = (1u << 1), /**< strict mode code */ -} jerry_generate_snapshot_opts_t; - -/** - * Flags for jerry_exec_snapshot_at and jerry_load_function_snapshot_at. - */ -typedef enum -{ - JERRY_SNAPSHOT_EXEC_COPY_DATA = (1u << 0), /**< copy snashot data */ - JERRY_SNAPSHOT_EXEC_ALLOW_STATIC = (1u << 1), /**< static snapshots allowed */ -} jerry_exec_snapshot_opts_t; - -/** - * Snapshot functions. - */ -jerry_value_t jerry_generate_snapshot (const jerry_char_t *resource_name_p, size_t resource_name_length, - const jerry_char_t *source_p, size_t source_size, - uint32_t generate_snapshot_opts, uint32_t *buffer_p, size_t buffer_size); -jerry_value_t jerry_generate_function_snapshot (const jerry_char_t *resource_name_p, size_t resource_name_length, - const jerry_char_t *source_p, size_t source_size, - const jerry_char_t *args_p, size_t args_size, - uint32_t generate_snapshot_opts, uint32_t *buffer_p, - size_t buffer_size); - -jerry_value_t jerry_exec_snapshot (const uint32_t *snapshot_p, size_t snapshot_size, - size_t func_index, uint32_t exec_snapshot_opts); -jerry_value_t jerry_load_function_snapshot (const uint32_t *function_snapshot_p, - const size_t function_snapshot_size, - size_t func_index, uint32_t exec_snapshot_opts); - -size_t jerry_merge_snapshots (const uint32_t **inp_buffers_p, size_t *inp_buffer_sizes_p, size_t number_of_snapshots, - uint32_t *out_buffer_p, size_t out_buffer_size, const char **error_p); -size_t jerry_get_literals_from_snapshot (const uint32_t *snapshot_p, size_t snapshot_size, - jerry_char_t *lit_buf_p, size_t lit_buf_size, bool is_c_format); -/** - * @} - */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* !JERRYSCRIPT_SNAPSHOT_H */ diff --git a/firmware/spade/src/rpi/jerry/include/jerryscript.h b/firmware/spade/src/rpi/jerry/include/jerryscript.h deleted file mode 100644 index 041ac7ea37..0000000000 --- a/firmware/spade/src/rpi/jerry/include/jerryscript.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JERRYSCRIPT_H -#define JERRYSCRIPT_H - -#include "jerryscript-core.h" -#include "jerryscript-debugger.h" -#include "jerryscript-snapshot.h" - -#endif /* !JERRYSCRIPT_H */ diff --git a/firmware/spade/src/rpi/jerry/lib/libjerry-port.a b/firmware/spade/src/rpi/jerry/lib/libjerry-port.a deleted file mode 100644 index 4786c9195a..0000000000 Binary files a/firmware/spade/src/rpi/jerry/lib/libjerry-port.a and /dev/null differ diff --git a/firmware/spade/src/rpi/jerry/refresh.sh b/firmware/spade/src/rpi/jerry/refresh.sh index b9b8f3ab9d..2eaa8db11f 100755 --- a/firmware/spade/src/rpi/jerry/refresh.sh +++ b/firmware/spade/src/rpi/jerry/refresh.sh @@ -1,11 +1,12 @@ cd ~/jerryscript_build rm -rf example-* -# CMAKE_ASM_COMPILER=arm-none-eabi-gcc -# CMAKE_C_COMPILER=arm-none-eabi-gcc -# CMAKE_CXX_COMPILER=arm-none-eabi-g++ -# CMAKE_LINKER=arm-none-eabi-ld -# CMAKE_OBJCOPY=arm-none-eabi-objcopy +export CC=arm-none-eabi-gcc +export CMAKE_ASM_COMPILER=arm-none-eabi-gcc +export CMAKE_C_COMPILER=arm-none-eabi-gcc +export CMAKE_CXX_COMPILER=arm-none-eabi-g++ +export CMAKE_LINKER=arm-none-eabi-ld +export CMAKE_OBJCOPY=arm-none-eabi-objcopy # --debug \ python3 jerryscript/tools/build.py \ @@ -22,7 +23,7 @@ python3 jerryscript/tools/build.py \ make -C $(pwd)/example_build install\ cd ~/spade/src/rpi/jerry -cp ~/jerryscript_build/example_build/lib/* lib/ +cp -r ~/jerryscript_build/example_build/lib/ lib/ # cp ~/jerryscript_build/example_install/include rm -rf include # cp ~/jerryscript_build/example_install/include ./ diff --git a/firmware/spade/src/rpi/main.c b/firmware/spade/src/rpi/main.c index fb4692b088..105a0bb53c 100644 --- a/firmware/spade/src/rpi/main.c +++ b/firmware/spade/src/rpi/main.c @@ -41,6 +41,10 @@ #include "shared/js_runtime/jerryxx.c" #include "shared/js_runtime/js.h" +// screen is 20 characters wide +#define SCREEN_WIDTH_CHARS 20 +#define SCREEN_HEIGHT_LINES 10 + // Externs for shared/ui/errorbuf.h char errorbuf[512] = ""; Color errorbuf_color; // Initialized in main() @@ -72,9 +76,22 @@ typedef struct { uint8_t last_state; uint8_t ring_i; } ButtonState; +// W, S, A, D, I, K, J, L uint button_pins[] = { 5, 7, 6, 8, 12, 14, 13, 15 }; static ButtonState button_states[ARR_LEN(button_pins)] = {0}; +typedef enum { + Button_W, + Button_S, + Button_A, + Button_D, + Button_I, + Button_K, + Button_J, + Button_L, + Button_None +} Button; + static bool button_history_read(ButtonState *bs, int i) { // We want to store bools compactly so we have to do some bit twiddling. int q = 1 << (i % 8); @@ -248,6 +265,204 @@ static int load_new_scripts(void) { } #endif +typedef enum { + NEW_SLOT, + GAME_MENU, + DELETE_CONFIRM, + RUN_GAME + } Welcome_Screen; + + int count_digits(uint32_t number) { + if (number < 10) return 1; + if (number < 100) return 2; + if (number < 1000) return 3; + if (number < 10000) return 4; + if (number < 100000) return 5; + if (number < 1000000) return 6; + if (number < 10000000) return 7; + if (number < 100000000) return 8; + if (number < 1000000000) return 9; + return 10; + } + + static Button get_button_press() { + if (!multicore_fifo_rvalid()) return Button_None; + + switch (multicore_fifo_pop_blocking()) { + case 5: + return Button_W; + case 7: + return Button_S; + case 6: + return Button_A; + case 8: + return Button_D; + case 12: + return Button_I; + case 14: + return Button_K; + case 13: + return Button_J; + case 15: + return Button_L; + } + } + +typedef struct { + Welcome_Screen screen; + int games_len; + int games_i; + Game* games; +} Welcome_State; + + const char delete_confirm_screen[] = " \n" + " \n" + " \n" + " \n" + " \n" + " Do you really \n" + " want to delete \n" + " this game? \n" + " \n" + " \n" + " W: confirm \n" + " S: exit \n" + " \n" + " \n" + " sprig.hackclub.com \n"; + + const char upload_game_screen[] = " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " Please upload \n" + " a game. \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " sprig.hackclub.com \n"; + +void render_game_menu_screen(char *buffer, Welcome_State welcome_state) { + // padding to be written after game num & size + char game_padding[] = " "; + char size_padding[] = " "; + + game_padding[ + SCREEN_WIDTH_CHARS + - count_digits(welcome_state.games_i + 1) + - count_digits(welcome_state.games_len) + - 8 // 7 chars used for " Game: " + account for slash + ] = '\0'; + + size_padding[ + SCREEN_WIDTH_CHARS + - count_digits(GAME_SLOTS(welcome_state.games[welcome_state.games_i].size_b)) + - count_digits(MAX_SLOTS) + - 8 // 7 chars used for " Size: " + account for slash + ] = '\0'; + + // 6lines, for game name + char game_split_lines[] = { + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + }; + + // buffer of 3 chars at beginning, subtract from total width + int chars_per_line = SCREEN_WIDTH_CHARS - 3; + unsigned int lines_used = strlen(welcome_state.games[welcome_state.games_i].name) / chars_per_line + 1; + for (int i = 0; i < lines_used; i++) { + // write to game_split_lines, segmented per line, + // +1 for the newline, +1 to get next open char + char *write_dest = &game_split_lines[i * (SCREEN_WIDTH_CHARS + 1) + 1]; + + // read from the game name, segmented by chars_per_line + char *game_line = &welcome_state.games[welcome_state.games_i].name[i * chars_per_line]; + + // write length is chars_per_line except if the last segment of game name is less than that + unsigned int write_length = chars_per_line; + if (strlen(welcome_state.games[welcome_state.games_i].name) - i * write_length < write_length) { + write_length = strlen(welcome_state.games[welcome_state.games_i].name) - i * chars_per_line; + } + + memcpy(write_dest, game_line, write_length); + } + + + sprintf(buffer, + " \n" + " \n" + "%s" + " \n" + " Game: %d/%d%s\n" + " Size: %lu/%d%s\n" + " \n" + " W: PLAY \n" + " S: DELETE \n" + " <- A , D -> \n", + game_split_lines, + welcome_state.games_i + 1, welcome_state.games_len, game_padding, + GAME_SLOTS(welcome_state.games[welcome_state.games_i].size_b), MAX_SLOTS, size_padding); +} + +void update_welcome_state(Welcome_State* welcome_state) { + welcome_state->games_len = get_games(&welcome_state->games); + + if (welcome_state->games_i >= welcome_state->games_len && welcome_state->games_i != 0) { + welcome_state->games_i = welcome_state->games_len - 1; + } + + if (welcome_state->screen == DELETE_CONFIRM) { + // no-op + } else if (welcome_state->games_len == 0) { + welcome_state->screen = NEW_SLOT; + } else { + welcome_state->screen = GAME_MENU; + set_game(welcome_state->games[welcome_state->games_i]); + } + + Button button_pressed = get_button_press(); + + if (welcome_state->screen == GAME_MENU) + switch (button_pressed) { + case Button_A: + if (welcome_state->games_i > 0) welcome_state->games_i--; + break; + case Button_D: + if (welcome_state->games_i < welcome_state->games_len - 1) welcome_state->games_i++; + break; + case Button_S: + welcome_state->screen = DELETE_CONFIRM; + break; + case Button_W: + welcome_state->screen = RUN_GAME; + break; + default: + break; + } + else if (welcome_state->screen == DELETE_CONFIRM) + switch (button_pressed) { + case Button_S: + welcome_state->screen = GAME_MENU; + break; + case Button_W: + delete_game(welcome_state->games[welcome_state->games_i]); + welcome_state->screen = GAME_MENU; + update_welcome_state(welcome_state); + break; + default: + break; + } +} + int main() { timer_hw->dbgpause = 0; @@ -265,74 +480,50 @@ int main() { jerry_init(JERRY_INIT_MEM_STATS); init(sprite_free_jerry_object); // TODO: document - while(!save_read()) { - // No game stored in memory - strcpy(errorbuf, " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " PLEASE UPLOAD \n" - " A GAME \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " sprig.hackclub.com \n"); - render_errorbuf(); - st7735_fill_start(); - render(st7735_fill_send); - st7735_fill_finish(); + // Start a core to listen for keypresses. + multicore_reset_core1(); - load_new_scripts(); - } + update_save_version(); // init here to avoid irqs on other core - // Start a core to listen for keypresses. - multicore_launch_core1(core1_entry); + multicore_launch_core1(core1_entry); - /** - * We get a bunch of fake keypresses at startup, so we need to - * drain them from the FIFO queue. - * - * What really needs to be done here is to have button_init - * record when it starts so that we can ignore keypresses after - * that timestamp. - */ - sleep_ms(50); - while (multicore_fifo_rvalid()) multicore_fifo_pop_blocking(); + /** + * We get a bunch of fake keypresses at startup, so we need to + * drain them from the FIFO queue. + * + * What really needs to be done here is to have button_init + * record when it starts so that we can ignore keypresses after + * that timestamp. + */ + sleep_ms(50); + while (multicore_fifo_rvalid()) multicore_fifo_pop_blocking(); - /** - * Wait for a keypress to start the game. - * - * This is important so games with e.g. infinite loops don't - * brick the device as soon as they start up. - */ - while(!multicore_fifo_rvalid()) { - strcpy(errorbuf, " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " PRESS ANY BUTTON \n" - " TO RUN \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " sprig.hackclub.com \n"); - render_errorbuf(); - st7735_fill_start(); - render(st7735_fill_send); - st7735_fill_finish(); + Welcome_State welcome_state = { + .screen = NEW_SLOT, + .games = malloc(METADATA_MAX_ENTRIES * sizeof(Game)), // leaks but it's fine since lifetime=program + .games_len = 0, + .games_i = 0 + }; - load_new_scripts(); - } + for (;;) { + update_welcome_state(&welcome_state); + + if (welcome_state.screen == RUN_GAME) + break; + else if (welcome_state.screen == NEW_SLOT) + strcpy(errorbuf, upload_game_screen); + else if (welcome_state.screen == GAME_MENU) + render_game_menu_screen(errorbuf, welcome_state); + else if (welcome_state.screen == DELETE_CONFIRM) + strcpy(errorbuf, delete_confirm_screen); + + render_errorbuf(); + st7735_fill_start(); + render(st7735_fill_send); + st7735_fill_finish(); + + load_new_scripts(); + } // Wow, we can actually run a game now! @@ -345,7 +536,7 @@ int main() { while (multicore_fifo_rvalid()) multicore_fifo_pop_blocking(); // Run the code! - js_run(save_read(), strlen(save_read())); + js_run(save_read(), !welcome_state.games[welcome_state.games_i].is_legacy); #ifdef SPADE_AUDIO // Initialize audio diff --git a/firmware/spade/src/rpi/upload.h b/firmware/spade/src/rpi/upload.h index 401572742a..6d31117b58 100644 --- a/firmware/spade/src/rpi/upload.h +++ b/firmware/spade/src/rpi/upload.h @@ -1,28 +1,350 @@ -#include "shared/sprig_engine/script.h" #include "hardware/flash.h" +#include static void core1_entry(void); +typedef enum { + Location_FLASH + // TODO: will add SD + // TODO: swap games into SD if flash overfilled +} Game_Location; + +typedef struct { + char name[100]; // todo: we need to set frontend limits on game names + Game_Location location; + uint8_t slot; + uint32_t size_b; + uint8_t is_legacy; // legacy games moved over from firmware 1.0.0; includes engine script +} Game; + +Game current_game = (Game) {}; +int slot = 0; + // rationale: half engine, half games? // NOTE: this has to be a multiple of 4096 (FLASH_SECTOR_SIZE) -#define FLASH_TARGET_OFFSET (800 * 1024) +#define FLASH_TARGET_START (800*1024) + +#define MAX_SLOTS 150 +#define SLOT_SIZE FLASH_SECTOR_SIZE +#define FLASH_TARGET_OFFSET(slot_i) (FLASH_TARGET_START + (slot_i) * SLOT_SIZE) +#define FLASH_TARGET_CONTENTS(slot_i) ((const uint8_t *) (XIP_BASE + FLASH_TARGET_OFFSET(slot_i))) + +#define GAME_SLOTS(bytes) (((bytes) + FLASH_PAGE_SIZE) / SLOT_SIZE + 1) + +#define METADATA_MAX_ENTRIES 32 +#define METADATA_ENTRY_SIZE FLASH_PAGE_SIZE // you can program up to one page at a time. (256 bytes). +#define METADATA_OFFSET ((uint32_t) (FLASH_TARGET_START - METADATA_SIZE + METADATA_ENTRY_SIZE)) +#define METADATA_CONTENTS(index) ((const Game *) (XIP_BASE + FLASH_TARGET_START - METADATA_SIZE + METADATA_ENTRY_SIZE + (index) * METADATA_ENTRY_SIZE)) + +// we store the version one metadata slot before the first +#define METADATA_SIZE ((METADATA_MAX_ENTRIES+1) * METADATA_ENTRY_SIZE) +#define METADATA_START METADATA_CONTENTS(-1) +#define FLASH_VERSION ((const char *) METADATA_START) + +#define PTR_METADATA_CONTENTS(metadata_ptr, i) (((Game*) (metadata_ptr + METADATA_ENTRY_SIZE*i))) -const uint8_t *flash_target_contents = (const uint8_t *) (XIP_BASE + FLASH_TARGET_OFFSET); -uint16_t SPRIG_MAGIC[FLASH_PAGE_SIZE/2] = { 1337, 42, 69, 420, 420, 1337 }; +static const int memory_is_ones(const void *memory, size_t count) { + // this is taken from gcc libiberty + register const unsigned char *s = (const unsigned char*)memory; -static const char *save_read(void) { - if (memcmp(&SPRIG_MAGIC, flash_target_contents, sizeof(SPRIG_MAGIC)) != 0) { + while (count-- > 0) + { + if (*s++ != 0xFF) + return 0; + } + return 1; +} + +// sprig magic is still here because it's useful for debugging (binvis.io) + easier to not get rid of it lol +uint16_t SPRIG_MAGIC[6] = { 1337, 42, 69, 420, 420, 1337 }; + +static const char *save_read() { + if (memcmp(&SPRIG_MAGIC, FLASH_TARGET_CONTENTS(slot), sizeof(SPRIG_MAGIC)) != 0) { puts("no magic :("); return NULL; } // add a page to get what's after the magic - const char *save = flash_target_contents + FLASH_PAGE_SIZE; + const char *save = FLASH_TARGET_CONTENTS(slot) + FLASH_PAGE_SIZE; return save; } +// must be run with core 1 disabled - conflict risk +static void flash_write_version(const char* version) { + void *metadata_first_sector = malloc(FLASH_SECTOR_SIZE); + memcpy(metadata_first_sector, METADATA_START, FLASH_SECTOR_SIZE); + strcpy(metadata_first_sector, version); + + uint32_t interrupts = save_and_disable_interrupts(); + flash_range_erase(METADATA_OFFSET - METADATA_ENTRY_SIZE, FLASH_SECTOR_SIZE); + flash_range_program(METADATA_OFFSET - METADATA_ENTRY_SIZE, metadata_first_sector, FLASH_SECTOR_SIZE); + restore_interrupts(interrupts); + + free(metadata_first_sector); +} + +// save versions != spade versions +// increment in the value returned means different scheme for saving games +static int get_save_version(const char* version) { + if (memory_is_ones(version, METADATA_ENTRY_SIZE)) return 1; + if (strcmp(version, "2.0.0") == 0) return 2; + + // something weird happened!? + return -1; +} + +// must be run with core 1 disabled - conflict risk +static int update_save_version() { + int version = get_save_version(FLASH_VERSION); + if (version == get_save_version(SPADE_VERSION)) return 0; + + switch (version) { // recursive if need to update multiple versions. + case 1: // 1.0.0 or less + { + if (memcmp(&SPRIG_MAGIC, FLASH_TARGET_CONTENTS(0), sizeof(SPRIG_MAGIC)) == 0) { + // add flash metadata for first game + Game game = { + .slot = 0, + .size_b = strlen(FLASH_TARGET_CONTENTS(0) + FLASH_PAGE_SIZE), + .name = "Legacy Game", + .location = Location_FLASH, + .is_legacy = 1 + }; + + void *metadata_first_sector = malloc(FLASH_SECTOR_SIZE); + memcpy(metadata_first_sector, METADATA_START, FLASH_SECTOR_SIZE); + memcpy(metadata_first_sector + METADATA_ENTRY_SIZE, &game, sizeof(Game)); + + uint32_t interrupts = save_and_disable_interrupts(); + flash_range_erase(METADATA_OFFSET - METADATA_ENTRY_SIZE, FLASH_SECTOR_SIZE); + flash_range_program(METADATA_OFFSET - METADATA_ENTRY_SIZE, metadata_first_sector, + FLASH_SECTOR_SIZE); + restore_interrupts(interrupts); + + free(metadata_first_sector); + } + + flash_write_version("2.0.0"); + return update_save_version(); + } + default: + return 1; + } + +} + +// returns len of games. games should be pointer to array of games (Game**) w/ size METADATA_MAX_ENTRIES +static int get_games(Game** games) { + int games_i = 0; + + for (int i = 0; i < METADATA_MAX_ENTRIES; i++) { + + volatile int is_ones = memory_is_ones(METADATA_CONTENTS(i), METADATA_ENTRY_SIZE); + if (is_ones) continue; + + (*games)[games_i++] = *METADATA_CONTENTS(i); + } + + return games_i; +} + +static int get_available_flash_slots(int exclude) { + int available_flash_slots = MAX_SLOTS; + for (int i = 0; i < METADATA_MAX_ENTRIES; i++) { + if (i == exclude) continue; + volatile int is_ones = memory_is_ones(METADATA_CONTENTS(i), METADATA_ENTRY_SIZE); + if (!is_ones) + available_flash_slots -= (int) GAME_SLOTS(METADATA_CONTENTS(i)->size_b); + } + + return available_flash_slots; +} + +static int get_available_metadata_slots(int exclude) { + int available_slots = METADATA_MAX_ENTRIES; + for (int i = 0; i < METADATA_MAX_ENTRIES; i++) { + if (i == exclude) continue; + volatile int is_ones = memory_is_ones(METADATA_CONTENTS(i), METADATA_ENTRY_SIZE); + if (!is_ones) + available_slots--; + } + return available_slots; +} + +static int get_flash_region(int slots, int exclude) { + for (int i = -1; i < METADATA_MAX_ENTRIES; i++) { + int base_slot = 0; + if ( i != -1) { + if (i == exclude) continue; + if (memory_is_ones(METADATA_CONTENTS(i), METADATA_ENTRY_SIZE)) continue; + base_slot = METADATA_CONTENTS(i) -> slot + GAME_SLOTS(METADATA_CONTENTS(i)->size_b); + } + + int overlap = 0; + for (int j = 0; j < METADATA_MAX_ENTRIES; j++) { + if (j == exclude) continue; + if (memory_is_ones(METADATA_CONTENTS(i), METADATA_ENTRY_SIZE)) continue; + int second_slot = METADATA_CONTENTS(j)->slot; + int second_size = GAME_SLOTS(METADATA_CONTENTS(j)->size_b); + if ((base_slot <= second_size + second_slot - 1 && second_slot <= base_slot + slots - 1) + || base_slot + slots - 1 >= MAX_SLOTS - 1) { + overlap = 1; + break; + } + } + + if (!overlap) { + return base_slot; + } + } + return -1; +} + +static int get_first_open_metadata_slot() { + for (int i = 0; i < METADATA_MAX_ENTRIES; i++) { + if (memory_is_ones(METADATA_CONTENTS(i), METADATA_ENTRY_SIZE)) + return i; + } + + return -1; +} + +static void set_game(Game aGame) { + // this is fine for now. + // in future, include logic to swap games in SD to flash + current_game = aGame; + slot = aGame.slot; +} + +static int get_game_index_by_name(char* name) { + for (int i = 0; i < METADATA_MAX_ENTRIES; i++) { + if (!memory_is_ones(METADATA_CONTENTS(i), METADATA_ENTRY_SIZE) + && strcmp(METADATA_CONTENTS(i)->name, name) == 0) { + return i; + } + } + + return -1; +} + +static void delete_game(Game aGame) { + for (int i = 0; i < METADATA_MAX_ENTRIES; i++) { + if (memcmp(METADATA_CONTENTS(i), &aGame, sizeof(Game)) == 0) { // this is the metadata slot + char ones[METADATA_ENTRY_SIZE]; + for (int j = 0; j < METADATA_ENTRY_SIZE; j++) { + ones[j] = 0xFF; + } + + void *new_metadata = malloc(METADATA_SIZE); + memcpy(new_metadata, METADATA_START, METADATA_SIZE); + memcpy(new_metadata + METADATA_ENTRY_SIZE * (i + 1), &ones, METADATA_ENTRY_SIZE); + + multicore_reset_core1(); + uint32_t interrupts = save_and_disable_interrupts(); + + flash_range_erase(METADATA_OFFSET - METADATA_ENTRY_SIZE, METADATA_SIZE); + flash_range_program(METADATA_OFFSET - METADATA_ENTRY_SIZE, new_metadata, METADATA_SIZE); + + free(new_metadata); + restore_interrupts(interrupts); + multicore_launch_core1(core1_entry); + } + } +} + +// for some reason this hangs when just reading from flash +// fixed by changing to read from heap but don't know root cause +void consolidate_flash_games() { + void *new_metadata = malloc(METADATA_SIZE); + memcpy(new_metadata, METADATA_START, METADATA_SIZE); + + int prev_write = -1; + + for (;;) { + // infinite loop terminated by hitting end: + + // two-finger algo in which *read and *write both advance, consolidating by moving to leftmost position + int write = MAX_SLOTS; + + int read = MAX_SLOTS; + int read_metadata_i = 0; + + // loop to find earliest available write pos + for (int i = -1; i < METADATA_MAX_ENTRIES; i++) { + int base_slot = 0; + if (i != -1) { + if (memory_is_ones(PTR_METADATA_CONTENTS(new_metadata, i), METADATA_ENTRY_SIZE)) + continue; + + base_slot = PTR_METADATA_CONTENTS(new_metadata, i)->slot + GAME_SLOTS(PTR_METADATA_CONTENTS(new_metadata, i)->size_b); + } + + int empty = 1; + + // check if slot after current game is empty + for (int j = 0; j < METADATA_MAX_ENTRIES; j++) { + if (memory_is_ones(PTR_METADATA_CONTENTS(new_metadata, j), METADATA_ENTRY_SIZE)) + continue; + if (PTR_METADATA_CONTENTS(new_metadata, j)->slot == base_slot) { + empty = 0; + break; + } + } + + if (empty && base_slot < write) { // found un-consolidated slot + write = base_slot; // next open slot + } + } + + if (write == prev_write) { // we hit the end and can't advance anymore + + uint32_t interrupts = save_and_disable_interrupts(); + + flash_range_erase(METADATA_OFFSET - METADATA_ENTRY_SIZE, METADATA_SIZE); + flash_range_program(METADATA_OFFSET - METADATA_ENTRY_SIZE, new_metadata, METADATA_SIZE); + + restore_interrupts(interrupts); + + free(new_metadata); + return; + } + + prev_write = write; + + for (int j = 0; j < METADATA_MAX_ENTRIES; j++) { // find next filled slot to read from + if (memory_is_ones(PTR_METADATA_CONTENTS(new_metadata, j), METADATA_ENTRY_SIZE)) + continue; + if (PTR_METADATA_CONTENTS(new_metadata, j)->slot > write && PTR_METADATA_CONTENTS(new_metadata, j)->slot < read) { + read = PTR_METADATA_CONTENTS(new_metadata, j)->slot; + read_metadata_i = j; + } + } + + if (read == MAX_SLOTS) continue; // nowhere to read from + + // move game content slots leftwards + char* slot_buffer = malloc(SLOT_SIZE); + for (int i = 0; i < GAME_SLOTS(PTR_METADATA_CONTENTS(new_metadata, read_metadata_i)->size_b); i++) { + memcpy(slot_buffer, FLASH_TARGET_CONTENTS(read+i), SLOT_SIZE); + + uint32_t interrupts = save_and_disable_interrupts(); + + flash_range_erase(FLASH_TARGET_OFFSET(write + i), SLOT_SIZE); + + flash_range_program(FLASH_TARGET_OFFSET(write + i), slot_buffer, + SLOT_SIZE); + + restore_interrupts(interrupts); + } + free(slot_buffer); + + PTR_METADATA_CONTENTS(new_metadata, read_metadata_i)->slot = write; + + } +} typedef enum { + UplProg_Init, UplProg_Header, UplProg_Body, } UplProg; @@ -31,16 +353,20 @@ static struct { uint32_t len, len_i; char buf[256]; int page; + char name[100]; + uint8_t name_i; } upl_state = {0}; static void upl_flush_buf(void) { - uint32_t interrupts = save_and_disable_interrupts(); - flash_range_program(FLASH_TARGET_OFFSET + (upl_state.page++) * 256, + puts("wtf?? 6"); + + uint32_t interrupts = save_and_disable_interrupts(); + flash_range_program(FLASH_TARGET_OFFSET(slot) + (upl_state.page++) * 256, (void *)upl_state.buf, 256); restore_interrupts(interrupts); memset(upl_state.buf, 0, sizeof(upl_state.buf)); - printf("wrote page (%d/%d)\n", + printf("wrote page (%d/%lu)\n", upl_state.page, (upl_state.len/(FLASH_PAGE_SIZE + 1))); } @@ -48,59 +374,122 @@ static void upl_flush_buf(void) { static int upl_stdin_read(void) { memset(&upl_state, 0, sizeof(upl_state)); - int timeout = 1000; // 1ms; we're already in upload mode + int timeout = 100 * 1000; // 100ms; we're already in upload mode + for (;;) { int c = getchar_timeout_us(timeout); - if (c == PICO_ERROR_TIMEOUT) return 0; + if (c == PICO_ERROR_TIMEOUT) { + puts("Upload timeout!"); + return 0; + } switch (upl_state.prog) { + case UplProg_Init: { + // irqs on other core? + multicore_reset_core1(); + + upl_state.prog = UplProg_Header; + } // falls through case UplProg_Header: { - ((char *)(&upl_state.len))[upl_state.len_i++] = c; - if (upl_state.len_i >= sizeof(uint32_t)) { - printf("ok reading %d chars\n", upl_state.len); - upl_state.prog = UplProg_Body; - upl_state.len_i = 0; - upl_state.page = 1; // skip first, that's for magic - - int char_len = upl_state.len + sizeof (engine_script); // sizeof script includes the null term, we still need to remove from script - upl_state.len = char_len; - // one to round up, one for magic - int page_len = (char_len/FLASH_PAGE_SIZE + 2) * FLASH_PAGE_SIZE ; - int sector_len = (page_len/FLASH_SECTOR_SIZE + 1) * FLASH_SECTOR_SIZE; - - // irqs on other core? - multicore_reset_core1(); - - uint32_t interrupts = save_and_disable_interrupts(); - flash_range_erase(FLASH_TARGET_OFFSET, sector_len); - restore_interrupts(interrupts); + puts("wahoo header"); - for (int i = 0; i < sizeof(engine_script) - 1; i++) { - upl_state.buf[upl_state.len_i++ % FLASH_PAGE_SIZE] = engine_script[i]; - if (upl_state.len_i % FLASH_PAGE_SIZE == 0) { - puts("flushin buf (wit da code!)"); - upl_flush_buf(); - } + if (upl_state.name_i < sizeof(upl_state.name) / sizeof(char)) // read game + { + ((char *) (&upl_state.name))[upl_state.name_i++] = c; + puts(upl_state.name); } + else { + ((char *) (&upl_state.len))[upl_state.len_i++] = c; + if (upl_state.len_i >= sizeof(uint32_t)) { + printf("ok reading %lu chars\n", upl_state.len); + upl_state.prog = UplProg_Body; + upl_state.len_i = 0; + upl_state.page = 1; // skip first, that's for magic - puts("cleared flash"); - } + { + Game game; + strcpy(game.name, upl_state.name); + game.size_b = upl_state.len; + game.location = Location_FLASH; + game.is_legacy = 0; + + int metadata_i; + int search_result = get_game_index_by_name(game.name); + int exclude = -1; + + if (search_result != -1) { + metadata_i = search_result; + exclude = metadata_i; + } else { + metadata_i = get_first_open_metadata_slot(); + } + + // not enough slots + if (get_available_flash_slots(exclude) < GAME_SLOTS(upl_state.len)) { + // /OO_FLASH/{slots needed}/{slots available}/ + printf("/OO_FLASH/%lu/%d/", GAME_SLOTS(upl_state.len), + get_available_flash_slots(exclude)); + multicore_launch_core1(core1_entry); + return 0; // ERROR! + } else if (!get_available_metadata_slots(exclude)) { + puts("OO_METADATA"); + multicore_launch_core1(core1_entry); + return 0; + } else if (get_flash_region(GAME_SLOTS(upl_state.len), exclude) == -1) { + puts("consolidating!"); + consolidate_flash_games(); + } + + game.slot = get_flash_region(GAME_SLOTS(upl_state.len), exclude); + slot = game.slot; + + void *new_metadata = malloc(METADATA_SIZE); + memcpy(new_metadata, METADATA_START, METADATA_SIZE); + memcpy(new_metadata + METADATA_ENTRY_SIZE * (metadata_i + 1), &game, sizeof(Game)); + + uint32_t interrupts = save_and_disable_interrupts(); + flash_range_erase(METADATA_OFFSET - METADATA_ENTRY_SIZE, METADATA_SIZE); + flash_range_program(METADATA_OFFSET - METADATA_ENTRY_SIZE, new_metadata, METADATA_SIZE); + restore_interrupts(interrupts); + + printf("metadata_i: %d,\n" + "slot: %d\n" + "size_b: %lu", metadata_i, slot, game.size_b); + + free(new_metadata); + } + + // one to round up, one for magic + uint32_t page_len = (upl_state.len / FLASH_PAGE_SIZE + 2) * FLASH_PAGE_SIZE; + uint32_t sector_len = (page_len / FLASH_SECTOR_SIZE + 1) * FLASH_SECTOR_SIZE; + + uint32_t interrupts = save_and_disable_interrupts(); + flash_range_erase(FLASH_TARGET_OFFSET(slot), sector_len); + restore_interrupts(interrupts); + + + + puts("cleared flash"); + } + } } break; case UplProg_Body: { - // printf("upl char (%d/%d)\n", upl_state.len_i, upl_state.len); + + // printf("upl char (%d/%d)\n", upl_state.len_i, upl_state.len); upl_state.buf[upl_state.len_i++ % FLASH_PAGE_SIZE] = c; + if (upl_state.len_i % FLASH_PAGE_SIZE == 0) { puts("flushin buf"); upl_flush_buf(); } - if (upl_state.len_i == upl_state.len - 1) { + if (upl_state.len_i == upl_state.len) { upl_flush_buf(); uint32_t interrupts = save_and_disable_interrupts(); - flash_range_program(FLASH_TARGET_OFFSET, (void *)SPRIG_MAGIC, FLASH_PAGE_SIZE); + flash_range_program(FLASH_TARGET_OFFSET(slot), (void *)SPRIG_MAGIC, FLASH_PAGE_SIZE); restore_interrupts(interrupts); - + // printf("read in %d chars\n", upl_state.len); puts("ALL_GOOD"); memset(&upl_state, 0, sizeof(upl_state)); diff --git a/firmware/spade/src/shared/js_runtime/jerryxx.c b/firmware/spade/src/shared/js_runtime/jerryxx.c index a0245223ae..0f41332f2a 100644 --- a/firmware/spade/src/shared/js_runtime/jerryxx.c +++ b/firmware/spade/src/shared/js_runtime/jerryxx.c @@ -189,17 +189,8 @@ static void strlcat_fixed_error(char *dest, jerry_value_t loc, size_t size) { } } - int engine_lines = 1; - for (int i = 0; i < sizeof(engine_script); i++) { - if (engine_script[i] == '\n') engine_lines++; - } - - if (line <= engine_lines) { - strlcat(dest, "engine:", size); - } else { - strlcat(dest, "game:", size); - line = line - engine_lines + 1; - } + strlcat(dest, "game:", size); + char line_str[7] = ""; sprintf(line_str, "%d", line); strlcat(dest, line_str, size); diff --git a/firmware/spade/src/shared/js_runtime/js.h b/firmware/spade/src/shared/js_runtime/js.h index 1abe410a6a..84e0bc7975 100644 --- a/firmware/spade/src/shared/js_runtime/js.h +++ b/firmware/spade/src/shared/js_runtime/js.h @@ -4,6 +4,7 @@ #include "jerryxx.h" #include "shared/sprig_engine/module_native.h" #include "shared/sprig_engine/base_engine.h" +#include "shared/sprig_engine/script.h" JERRYXX_FUN(console_log) { jerryxx_print_value(JERRYXX_GET_ARG(0)); @@ -13,9 +14,34 @@ static struct { jerry_value_t press_cb, frame_cb; } spade_state = {0}; -static void js_run(const jerry_char_t *script, jerry_length_t script_size) { +static void parse_and_run_code(const jerry_char_t *tag, const jerry_char_t *code, jerry_length_t code_len) { + jerry_value_t parsed_code = jerry_parse ( + (jerry_char_t *)tag, strlen(tag), + code, strlen(code), + JERRY_PARSE_STRICT_MODE + ); + + if (jerry_value_is_error (parsed_code)) { + yell("couldn't parse code :-O! error in:"); + yell(tag); + jerryxx_print_error(parsed_code, 1); + fatal_error(); + } + jerry_value_t ret_value = jerry_run (parsed_code); - // add shit to global scpoe + if (jerry_value_is_error (ret_value)) { + yell("couldn't run code :-(! error in:"); + yell(tag); + jerryxx_print_error(ret_value, 1); + fatal_error(); + } + + jerry_release_value (ret_value); + jerry_release_value (parsed_code); +} +static void js_run(const jerry_char_t *game_code, uint8_t include_engine) { + + // add shit to global scope { jerry_value_t global_object = jerry_get_global_object (); @@ -56,36 +82,15 @@ static void js_run(const jerry_char_t *script, jerry_length_t script_size) { dbgf(" sr->legend = %lu\n", sr->legend ); dbgf(" sr->legend_resized = %lu\n", sr->legend_resized ); - jerry_value_t parsed_code = jerry_parse ( - (jerry_char_t *)"src", sizeof("src")-1, - script, script_size, - JERRY_PARSE_STRICT_MODE - ); - - if (jerry_value_is_error (parsed_code)) { - yell("couldn't parse :("); - jerryxx_print_error(parsed_code, 1); - fatal_error(); - // abort(); + if(include_engine){ + parse_and_run_code("engine", engine_script, sizeof(engine_script)-1); } + puts("bouta run some code"); // Execute the parsed source code in the Global scope - jerry_value_t ret_value = jerry_run (parsed_code); - - if (jerry_value_is_error (ret_value)) { - yell("couldn't run :("); - jerryxx_print_error(ret_value, 1); - fatal_error(); - // abort(); - } - - // Returned value must be freed - jerry_release_value (ret_value); - - // Parsed source code must be freed - jerry_release_value (parsed_code); - + parse_and_run_code("game", game_code, strlen(game_code)); + // Cleanup engine // jerry_cleanup (); } diff --git a/firmware/spade/src/shared/version.h b/firmware/spade/src/shared/version.h deleted file mode 100644 index 63f222477d..0000000000 --- a/firmware/spade/src/shared/version.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define SPADE_VERSION "1.0.0" diff --git a/firmware/spade/src/version.json b/firmware/spade/src/version.json index 688e939808..f9b89e9917 100644 --- a/firmware/spade/src/version.json +++ b/firmware/spade/src/version.json @@ -1,3 +1,3 @@ { - "version": "1.0.0" + "version": "2.0.1" } \ No newline at end of file diff --git a/games/13_medium_sokoban_puzzles.js b/games/13_medium_sokoban_puzzles.js index 39227b1ef2..83b50a9631 100644 --- a/games/13_medium_sokoban_puzzles.js +++ b/games/13_medium_sokoban_puzzles.js @@ -1,8 +1,8 @@ /* @title: 13 medium sokoban puzzles -@tags: ['sokoban-style'] -@addedOn: 2022-12-19 @author: Zachary Miller +@tags: ['puzzle'] +@addedOn: 2022-12-19 Instructions: diff --git a/games/15_puzzle.js b/games/15_puzzle.js index 0385d9fbf4..70e3aeffb5 100644 --- a/games/15_puzzle.js +++ b/games/15_puzzle.js @@ -1,8 +1,8 @@ /* @title: 15 puzzle -@tags: ['advanced'] -@addedOn: 2022-07-18 @author: maggie +@tags: [] +@addedOn: 2022-07-18 INSTRUCTIONS: use WASD to move squares next to the empty square. diff --git a/games/1930.js b/games/1930.js index a3c7f7ac8e..239c48599a 100644 --- a/games/1930.js +++ b/games/1930.js @@ -1,9 +1,9 @@ {} /* @title: 1930 +@author: tejasag (@tej on slack) @tags: ['strategy'] @addedOn: 2023-01-16 -@author: tejasag (@tej on slack) Keys: - W to jump - A to move left diff --git a/games/2048.js b/games/2048.js index 5d2ab46999..e735596c1d 100644 --- a/games/2048.js +++ b/games/2048.js @@ -1,8 +1,8 @@ /* @title: 2048 -@tags: ['classic'] -@addedOn: 2022-09-16 @author: linkai101 +@tags: ['retro'] +@addedOn: 2022-09-16 */ const empty = "-" diff --git a/games/2048_Alphabet_Edition.js b/games/2048_Alphabet_Edition.js index 75ded2835a..4334af8627 100644 --- a/games/2048_Alphabet_Edition.js +++ b/games/2048_Alphabet_Edition.js @@ -1,8 +1,8 @@ /* @title: 2048 Alphabet Edition +@author: OptimalBlock489 @tags: ['strategy'] @addedOn: 2022-10-19 -@author: OptimalBlock489 Credits : linkai101 diff --git a/games/2048_clone.js b/games/2048_clone.js new file mode 100644 index 0000000000..24527437c1 --- /dev/null +++ b/games/2048_clone.js @@ -0,0 +1,620 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: 2048 +@author: VeressIris +@tags: ['endless', 'puzzle'] +@addedOn: 2024-08-19 +*/ + +const two = "1" +const four = "2" +const eight = "3" +const sixteen = "4" +const thirtytwo = "5" +const sixtyfour = "6" +const onetwentyeight = "7" +const twofiftysix = "8" +const fivetwelve = "9" +const tentwentyfour = "0" +const twentyfourtyeight = "w" +const block = "b" + +setLegend( + [two, bitmap` +6666666666666666 +6666666666666666 +6666666666666666 +6666600000666666 +6666066660066666 +6666066666066666 +6666666660066666 +6666666660666666 +6666666600666666 +6666666006666666 +6666600066666666 +6666006666666666 +6660000000000666 +6666666666666666 +6666666666666666 +6666666666666666`], + [four, bitmap` +FFFFFFFFFFFFFFFF +FFFFFFFF00FFFFFF +FFFFFFF00FFFFFFF +FFFFFF00FFFFFFFF +FFFFF00FFFFFFFFF +FFFF00FFFFFFFFFF +FFFF000000FFFFFF +FFFFFFFF00FFFFFF +FFFFFFFFF0FFFFFF +FFFFFFFFF0FFFFFF +FFFFFFFFF0FFFFFF +FFFFFFFFF0FFFFFF +FFFFFFFFF0FFFFFF +FFFFFFFFF0FFFFFF +FFFFFFFFF0FFFFFF +FFFFFFFFFFFFFFFF`], + [eight, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDD0000DDDDDD +DDDDD0DDDD0DDDDD +DDDDD0DDDD0DDDDD +DDDDD0DDDD0DDDDD +DDDDD0DDDD0DDDDD +DDDDDD0000DDDDDD +DDDDD0DDDD0DDDDD +DDDDD0DDDD0DDDDD +DDDDD0DDDD0DDDDD +DDDDD0DDDD0DDDDD +DDDDDD0000DDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD`], + [sixteen, bitmap` +7777777777777777 +7777777777777777 +7777707700077777 +7777007077707777 +7770007077777777 +7700707077777777 +7777707077777777 +7777707077777777 +7777707070077777 +7777707007707777 +7777707077707777 +7777707077707777 +7777707077707777 +7777707077707777 +7777707700077777 +7777777777777777`], + [thirtytwo, bitmap` +5555555555555555 +5555555555555555 +5555555555555555 +5550005550005555 +5505550500500555 +5555550505550555 +5555550555550555 +5550005555500555 +5555550555005555 +5555550550055555 +5555550550555555 +5505550500555555 +5550005500000555 +5555555555555555 +5555555555555555 +5555555555555555`], + [sixtyfour, bitmap` +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHH000HHHHH0HHHH +HH00HH0HHH0HHHHH +HH0HHHHHH0HHHHHH +HH0HHHHH0HHHHHHH +HH0HHHHH00000HHH +HH0H000HHHHH0HHH +HH00HH0HHHHH0HHH +HH0HHH0HHHHH0HHH +HH0HHH0HHHHH0HHH +HH0HHH0HHHHH0HHH +HHH000HHHHHH0HHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH`], + [onetwentyeight, bitmap` +8888888888888888 +8888888888888888 +8888888888888888 +8808880008880008 +8008800800808880 +0808808880808880 +8808888880808880 +8808888800808880 +8808888008880008 +8808880088808880 +8808880888808880 +8808800888808880 +8808800000880008 +8888888888888888 +8888888888888888 +8888888888888888`], + [twofiftysix, bitmap` +4444444444444444 +4444444444444444 +4000440000440004 +0440040444404440 +0444040444404440 +4444040444404440 +4444040444404440 +4440040000440004 +4400444440404440 +4004444440404440 +0044444440404440 +0444444440404440 +0000040000440004 +4444444444444444 +4444444444444444 +4444444444444444`], + [fivetwelve, bitmap` +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +C0000CCC00CC000C +C0CCCCC000C0CC00 +C0CCCC00C0CCCCC0 +C0CCCCCCC0CCCCC0 +C0CCCCCCC0CCCC00 +C0000CCCC0CCCC0C +CCCC0CCCC0CCC00C +CCCC0CCCC0CCC0CC +CCCC0CCCC0CC00CC +CCCC0CCCC0CC0CCC +CCCC0CCCC0C00CCC +C0000CCCC0C00000 +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC`], + [tentwentyfour, bitmap` +3333333333333333 +3333330330033333 +3333300303303333 +3333030303303333 +3333330303303333 +3333330303303333 +3333330330033333 +3333333333333333 +3333300333303333 +3333033033033333 +3333333030333333 +3333330030000333 +3333300333330333 +3333003333330333 +3333000033330333 +3333333333333333`], + [twentyfourtyeight, bitmap` +9999999999999999 +9999009990099999 +9990900909909999 +9999990909909999 +9999990909909999 +9999909909909999 +9999009909909999 +9990000090099999 +9999999999999999 +9999909990099999 +9999099909909999 +9990999909909999 +9990000990099999 +9999990909909999 +9999990909909999 +9999990990099999`], + [block, bitmap` +1111111111111111 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1111111111111111`] +) + +setSolids([two, four, eight, sixteen, thirtytwo, sixtyfour, onetwentyeight, twofiftysix, fivetwelve, tentwentyfour, twentyfourtyeight, block]) + +const emptyLevel = + map` +.bbbb. +.bbbb. +.bbbb. +.bbbb.` +setMap(emptyLevel) + +function updateScore() { + scoreDigitArr = score.toString().split('') + scoreString = scoreDigitArr.join('\n') + addText(scoreString, { + x: 1, + y: 2, + color: color`0` + }) +} + +var score = 0 +var scoreDigitArr = [] +var scoreString = "" +var gameOver = false +var won = false + +var board = Array(4).fill().map(() => Array(4).fill(0)) +var boardVisual = emptyLevel + +function resetGame() { + gameOver = false + won = false + setMap(emptyLevel) + + board = Array(4).fill().map(() => Array(4).fill(0)) + boardVisual = emptyLevel + + score = 0 + scoreDigitArr = [] + scoreString = "" + clearText() + + startGame() +} + +const numberMapping = { + 2: two, + 4: four, + 8: eight, + 16: sixteen, + 32: thirtytwo, + 64: sixtyfour, + 128: onetwentyeight, + 256: twofiftysix, + 512: fivetwelve, + 1024: tentwentyfour, + 2048: twentyfourtyeight +} + +function getAvailableSpots() { + const res = [] + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 4; j++) { + if (board[i][j] === 0) { + res.push({ + x: j, + y: i + }) + } + } + } + return res +} + +function getRandomNum() { + return Math.floor(Math.random() * 4) +} + +function getTwoOrFour() { + return Math.random() > 0.8 ? 4 : 2 +} + +function possibleMoves() { + for (let i = 1; i < 3; i++) { + for (let j = 1; j < 3; j++) { + if (board[i][j] === board[i + 1][j] || board[i][j] === board[i - 1][j] || + board[i][j] === board[i][j + 1] || board[i][j] === board[i][j - 1]) + return true + } + } + return false +} + +function getRandomPos() { + const availableSpots = getAvailableSpots() + if (availableSpots.length === 0) { + return null + } + + const randomIndex = Math.floor(Math.random() * availableSpots.length) + return availableSpots[randomIndex] +} + +function splitBoardStringIntoArray() { + return boardVisual.trim().split('\n').map(line => line.split('')) +} + +function returnToOriginalForm(lines) { + return lines.map(line => line.join('')).join('\n') +} + +function startGame() { + const randomPos1 = getRandomPos() + const randomNumber1 = getTwoOrFour() + board[randomPos1.y][randomPos1.x] = randomNumber1 + + const randomPos2 = getRandomPos() + const randomNumber2 = getTwoOrFour() + board[randomPos2.y][randomPos2.x] = randomNumber2 + + boardVisual = splitBoardStringIntoArray() + boardVisual[randomPos1.y][randomPos1.x + 1] = numberMapping[randomNumber1] + boardVisual[randomPos2.y][randomPos2.x + 1] = numberMapping[randomNumber2] + boardVisual = returnToOriginalForm(boardVisual) + + setMap(boardVisual) + + score += randomNumber1 + randomNumber2 + updateScore() +} + +function placeNewNumber() { // ONLY IF CAN MOVE IN SPECIFIED DIRECTION + const randomPos = getRandomPos() + const val = getTwoOrFour() + board[randomPos.y][randomPos.x] = val + + boardVisual = splitBoardStringIntoArray() + boardVisual[randomPos.y][randomPos.x + 1] = numberMapping[val] + boardVisual = returnToOriginalForm(boardVisual) + + setMap(boardVisual) + + // update score + score += val + updateScore() +} + +function applyVisualChanges() { + boardVisual = returnToOriginalForm(boardVisual) + setMap(boardVisual) + + updateScore() +} + +// depending on the axis + update score + check if won +function updateBoardsData(val, newPos, i, j, axis) { + if (val == 2048) { + won = true + addText(" You win!\nPress i to restart", { + x: 1, + y: 7, + color: color`4` + }) + } + + if (axis == "y") { + // update board in memory + board[newPos][j] = val + board[i][j] = 0 + + // change board visual data + boardVisual[newPos][j + 1] = numberMapping[val] + boardVisual[i][j + 1] = 'b' + } else if (axis == "x") { + // update board in memory + board[i][newPos] = val + board[i][j] = 0 + + // change board visual data + boardVisual[i][newPos + 1] = numberMapping[val] + boardVisual[i][j + 1] = 'b' + } +} + +onInput("w", () => { + if (won) return + + if (getAvailableSpots().length === 0 && !possibleMoves()) { + gameOver = true + addText(" Game over!\nPress i to restart", { + x: 1, + y: 7, + color: color`3` + }) + return + } + + boardVisual = splitBoardStringIntoArray() + let addNewNumber = false + let merges = 0 + + for (let i = 1; i < 4; i++) { + for (let j = 0; j < 4; j++) { + if (board[i][j] != 0) { + let val = board[i][j] + let newPos = i - 1 + while (newPos > 0 && board[newPos][j] === 0) { + newPos-- + } + + // merge tiles (essentially double the value) + if (board[newPos][j] === val && merges < 2) { + val *= 2 + score += val // update score + merges++ + } else if (board[newPos][j] != 0) { // move to nearest empty tile + newPos++ + } + + // if tile could/can move + if (newPos != i) { + addNewNumber = true + + updateBoardsData(val, newPos, i, j, "y") + } + } + } + } + + applyVisualChanges() + + if (addNewNumber) placeNewNumber() +}) + +onInput("s", () => { + if (won) return + + if (getAvailableSpots().length === 0 && !possibleMoves()) { + gameOver = true + addText(" Game over!\nPress i to restart", { + x: 1, + y: 7, + color: color`3` + }) + return + } + + boardVisual = splitBoardStringIntoArray() + let addNewNumber = false + let merges = 0 + + for (let i = 2; i >= 0; i--) { + for (let j = 0; j < 4; j++) { + if (board[i][j] != 0) { + let val = board[i][j] + let newPos = i + 1 + while (newPos < 3 && board[newPos][j] === 0) { + newPos++ + } + + // merge tiles (essentially double the value) + if (board[newPos][j] === val && merges < 2) { + val *= 2 + score += val // update score + merges++ + } else if (board[newPos][j] != 0) { // move to nearest empty tile + newPos-- + } + + // if tile could/can move + if (newPos != i) { + addNewNumber = true + + updateBoardsData(val, newPos, i, j, "y") + } + } + } + } + + applyVisualChanges() + + if (addNewNumber) placeNewNumber() +}) + +onInput("a", () => { + if (won) return + + if (getAvailableSpots().length === 0 && !possibleMoves()) { + gameOver = true + addText(" Game over!\nPress i to restart", { + x: 1, + y: 7, + color: color`3` + }) + return + } + + boardVisual = splitBoardStringIntoArray() + let addNewNumber = false + let merges = 0 + + for (let i = 0; i < 4; i++) { + for (let j = 1; j < 4; j++) { + if (board[i][j] != 0) { + let val = board[i][j] + let newPos = j - 1 + while (newPos > 0 && board[i][newPos] === 0) { + newPos-- + } + + // merge tiles (essentially double the value) + if (board[i][newPos] === val && merges < 2) { + val *= 2 + score += val // update score + merges++ + } else if (board[i][newPos] != 0) { // move to nearest empty tile + newPos++ + } + + // if tile could/can move + if (newPos != j) { + addNewNumber = true + + updateBoardsData(val, newPos, i, j, "x") + } + } + } + } + + applyVisualChanges() + + if (addNewNumber) placeNewNumber() +}) + +onInput("d", () => { + if (won) return + + if (getAvailableSpots().length === 0 && !possibleMoves()) { + gameOver = true + addText(" Game over!\nPress i to restart", { + x: 1, + y: 7, + color: color`3` + }) + return + } + + boardVisual = splitBoardStringIntoArray() + let addNewNumber = false + let merges = 0 + + for (let i = 0; i < 4; i++) { + for (let j = 2; j >= 0; j--) { + if (board[i][j] != 0) { + let val = board[i][j] + let newPos = j + 1 + while (newPos > 0 && board[i][newPos] === 0) { + newPos++ + } + + // merge tiles (essentially double the value) + if (board[i][newPos] === val && merges < 2) { + val *= 2 + score += val // update score + merges++ + } else if (board[i][newPos] != 0) { // move to nearest empty tile + newPos-- + } + + // if tile could/can move + if (newPos != j) { + addNewNumber = true + + updateBoardsData(val, newPos, i, j, "x") + } + } + } + } + + applyVisualChanges() + + if (addNewNumber) placeNewNumber() +}) + +onInput("i", () => { + if (!gameOver && !won) return + resetGame() +}) + +startGame() diff --git a/games/256.js b/games/256.js index b6acb0586c..33dcac75b1 100644 --- a/games/256.js +++ b/games/256.js @@ -1,8 +1,8 @@ /* @title: 256 -@tags: ['classic'] -@addedOn: 2022-08-22 @author: jzhao +@tags: ['retro'] +@addedOn: 2022-08-22 */ const b2 = "1"; diff --git a/games/2D_life.js b/games/2D_life.js index de23b2c8ab..1eb6e5d1de 100644 --- a/games/2D_life.js +++ b/games/2D_life.js @@ -1,8 +1,8 @@ /* @title: 2D Life -@tags: ['simulation', 'hackable', 'classic', 'sandbox'] -@addedOn: 2022-09-25 @author: Leonard (Omay) +@tags: ['sandbox','simulation','retro'] +@addedOn: 2022-09-25 Use "WASD" to move the selector. Use "I" to toggle the cell that the selector is at. diff --git a/games/2P_Fighting_Game.js b/games/2P_Fighting_Game.js index 9c825410c3..105cc905be 100644 --- a/games/2P_Fighting_Game.js +++ b/games/2P_Fighting_Game.js @@ -1,7 +1,7 @@ /* @title: Fighing Engine @author: James Lian -@tags: ['fighting', 'multiplayer', '2player'] +@tags: ['action','multiplayer'] @addedOn: 2024-07-22 A simple 2-player fighting game engine, a little like rock'em sock'em robots and Street Fighter. diff --git a/games/2Psplashflame.js b/games/2Psplashflame.js index 8767a4cae5..98577757e8 100644 --- a/games/2Psplashflame.js +++ b/games/2Psplashflame.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: 2Psplashflame @author: Josh Deva @tags: [] @addedOn: 2024-04-19 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player1 = "p"; diff --git a/games/2_Player_Maze_Game.js b/games/2_Player_Maze_Game.js index 5b2ec8d50d..b89e31fb88 100644 --- a/games/2_Player_Maze_Game.js +++ b/games/2_Player_Maze_Game.js @@ -2,8 +2,8 @@ @title: maze_game_starter @author: Cheru Berhanu @tags: [] -@img: "" @addedOn: 2023-08-08 +@img: "" */ const player = "p"; diff --git a/games/2p-snake.js b/games/2p-snake.js index ffc1ba71f2..b08709405f 100644 --- a/games/2p-snake.js +++ b/games/2p-snake.js @@ -1,7 +1,7 @@ /* @title: 2p-snake @author: Sigfredo feat. whatware -@tags: ['multiplayer', 'snake', '2p', 'co-op'] +@tags: ['multiplayer'] @addedOn: 2024-08-13 */ diff --git a/games/3072_A_2048_Spin-Off.js b/games/3072_A_2048_Spin-Off.js index 3a0a15eaf0..102550036f 100644 --- a/games/3072_A_2048_Spin-Off.js +++ b/games/3072_A_2048_Spin-Off.js @@ -1,8 +1,8 @@ /* @title: 3072: A 2048 Spin-Off +@author: sahitid @tags: ['strategy'] @addedOn: 2022-10-14 -@author: sahitid Why play 2048 when it's the same basic game you've been playing for years? Why don't you move on to a better version? A more intuitive version? diff --git a/games/3D_Rasterizer.js b/games/3D_Rasterizer.js index f8c7b966b0..393e12f9db 100644 --- a/games/3D_Rasterizer.js +++ b/games/3D_Rasterizer.js @@ -1,7 +1,7 @@ /* @title: 3d Renderer @author: Ruadhan -@tags: ["3d", "render"] +@tags: ['3d'] @addedOn: 2024-08-13 */ diff --git a/games/3D_wire_frame_rendererV2.js b/games/3D_wire_frame_rendererV2.js index 76e4852c50..b001a67ee6 100644 --- a/games/3D_wire_frame_rendererV2.js +++ b/games/3D_wire_frame_rendererV2.js @@ -1,8 +1,8 @@ /* @title: 3D Wireframe Renderer (v2) +@author: Patcybermind @tags: ['simulation'] @addedOn: 2024-06-11 -@author: Patcybermind */ /* HOW TO USE : w = forward diff --git a/games/5-in-1-Carnival-Game-Pack!.js b/games/5-in-1-Carnival-Game-Pack!.js index dc6d4cfe24..b49f15af62 100644 --- a/games/5-in-1-Carnival-Game-Pack!.js +++ b/games/5-in-1-Carnival-Game-Pack!.js @@ -1,8 +1,8 @@ /* @title: 5-in-1 Carnival Game Pack! +@author: Ada Dyer @tags: [] @addedOn: 2023-01-07 -@author: Ada Dyer This game was made so you wouldn't have to upload something to your Sprig every time you want to play something different - but sadly, the Sprig doesn't take files this large. :'( diff --git a/games/8-Sprig.js b/games/8-Sprig.js index 1e252a72a9..15f4244d21 100644 --- a/games/8-Sprig.js +++ b/games/8-Sprig.js @@ -1,11 +1,11 @@ /* -8-Sprig is inspired by the popular 8-puzzle game, especially the version inside of https://conicgames.github.io/exponentialidle/. There are some -new changes and tweaks to accommodate for the Sprig platform. Music by FructosePear. - @title: 8-Sprig @author: NoozAbooz -@tags: ['beginner', 'endless', 'infinite', 'puzzle'] +@tags: ['puzzle','endless'] @addedOn: 2024-07-04 +8-Sprig is inspired by the popular 8-puzzle game, especially the version inside of https://conicgames.github.io/exponentialidle/. There are some +new changes and tweaks to accommodate for the Sprig platform. Music by FructosePear. + */ const cursor = "p" diff --git a/games/9 tiles.js b/games/9 tiles.js new file mode 100644 index 0000000000..de389a572e --- /dev/null +++ b/games/9 tiles.js @@ -0,0 +1,391 @@ +/* +@title: 9 Tiles +@author: Arrow07 +@tags: [] +@addedOn: 2024-08-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ +const melody = tune` +428.57142857142856: B5-428.57142857142856 + A5^428.57142857142856, +428.57142857142856: A5-428.57142857142856 + B5^428.57142857142856, +428.57142857142856: B5-428.57142857142856 + A5^428.57142857142856, +428.57142857142856: A5-428.57142857142856 + B5^428.57142857142856, +428.57142857142856: D5-428.57142857142856 + C5~428.57142857142856, +428.57142857142856: C5-428.57142857142856 + D5~428.57142857142856, +428.57142857142856: D5-428.57142857142856 + C5~428.57142857142856, +428.57142857142856: C5-428.57142857142856 + D5~428.57142857142856, +428.57142857142856: E5-428.57142857142856, +428.57142857142856: D5-428.57142857142856, +428.57142857142856: E5-428.57142857142856, +428.57142857142856: F5-428.57142857142856, +428.57142857142856: D5-428.57142857142856, +428.57142857142856: C5-428.57142857142856, +7714.285714285714` +const move = tune ` +500: F5-500, +15500` +const winning = tune ` +375: B5-375 + A5^375, +375: A5-375 + B5^375, +375: B5-375 + A5^375, +375: A5-375 + B5^375, +375: D5-375 + C5~375, +375: C5-375 + D5~375, +375: D5-375 + C5~375, +375: C5-375 + D5~375, +375: E5-375, +375: D5-375, +375: E5-375, +375: F5-375, +375: D5-375, +375: C5-375, +6750` +const player = "p" +const casella1 = "1" +const casella2 = "2" +const casella3 = "3" +const casella4 = "4" +const casella5 = "5" +const casella6 = "6" +const casella7 = "7" +const casella8 = "8" +const win = "w" +setLegend( + [player, bitmap` +................ +...3333333333... +..3..........3.. +.3............3. +.3............3. +.3............3. +.3............3. +.3............3. +.3............3. +.3............3. +.3............3. +.3............3. +.3............3. +..3..........3.. +...3333333333... +................`], + [casella1, bitmap` +000..........000 +00............00 +0......LLL.....0 +......L221L..... +.....L2221L..... +....L22221L..... +....L22221L..... +.....LL221L..... +......L221L..... +......L221L..... +.....0022100.... +....022222210... +....022222210... +0....0000000...0 +00............00 +000..........000`], + [casella2, bitmap` +000..........000 +00............00 +0....LLLLLL....0 +....L222221L.... +...L22222221L... +...L221LL221L... +...L221LL221L... +....LLLL2221L... +......L2221L.... +.....L2221L..... +....02221000.... +...0222222210... +...0222222210... +0...00000000...0 +00............00 +000..........000`], + [casella3, bitmap` +000..........000 +00............00 +0....LLLLLL....0 +....L222221L.... +...L22222221L... +...L221LL221L... +...L221LL221L... +....LLL2221L.... +....LLL2221L.... +...L221LL221L... +...0221002210... +...0222222210... +....02222210.... +0....000000....0 +00............00 +000..........000`], + [casella4, bitmap` +000..........000 +00............00 +0.....LLLLL....0 +.....L22221L.... +....L222221L.... +....L221221L.... +...L2221221L.... +...L221L221L.... +...L221L221L.... +..L222222221L... +..02222222210... +...000002210.... +.......02210.... +0.......000....0 +00............00 +000..........000`], + [casella5, bitmap` +000..........000 +00............00 +0...LLLLLLLL...0 +...L22222221L... +...L22222221L... +...L221LLLL..... +...L2222221L.... +...L22222221L... +....LLLLL221L... +....LLL.0221L... +...0221002210... +...0222222210... +....02222210.... +0....000000....0 +00............00 +000..........000`], + [casella6, bitmap` +000..........000 +00............00 +0....LLLLLL....0 +....L222221L.... +...L22222221L... +...L221LL221L... +...L221LLLLL.... +...L2222221L.... +...L22222221L... +...L221LL221L... +...0221002210... +...0222222210... +....02222210.... +0....000000....0 +00............00 +000..........000`], + [casella7, bitmap` +000..........000 +00............00 +0..LLLLLLLLL...0 +..L222222221L... +..L222222221L... +..L221LL2221L... +...LLL.L2221L... +......LL2221L... +.....L22221L.... +.....L22221L.... +....0222100..... +....022210...... +....022210...... +0....0000......0 +00............00 +000..........000`], + [casella8, bitmap` +000..........000 +00............00 +0....LLLLLL....0 +....L222221L.... +...L22222221L... +...L221LL221L... +...L221LL221L... +...L22222221L... +....L222221L.... +...L221LL221L... +...0221002210... +...0222222210... +....02222210.... +0....000000....0 +00............00 +000..........000`], + [win, bitmap` +................ +..00........00.. +.0..00000000..0. +.0..0F666620..0. +.0..0F666620..0. +.0..0F666660..0. +..0.0F666620.0.. +...00F6666600... +.....0F6660..... +......0660...... +......0660...... +......0660...... +.....0F6660..... +....0F666660.... +....00000000.... +................`] +) + + +//mappe +let menu = 0 +let game = 1 +const levels = [ + map ` +... +... +.p.`, +] + +//LOGIC AND PREP +const tiles = ["1", "2", "3", "4", "5", "6", "7", "8", "p"] + +//randomize the map +const shuffleArray = (array) => { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + return array +} + +let puzzle; +let solvable = false; +//check if is solvable +const isSolvable = (arr) => { + let inversions = 0; + for (let i = 0; i < arr.length; i++) { + for (let j = i + 1; j < arr.length; j++) { + if (arr[i] > arr[j]) { + inversions++; + } + } + } + return inversions % 2 == 0; +} + +for (let i = 0; i < 100; i++) { + puzzle = shuffleArray(Array.from({ length: 8 }, (_, i) => i + 1)) + if (isSolvable(puzzle)) { + solvable = true; + break; + } +} +if (!solvable) { + throw new Error("Something went wrong :(") +} + +//push the randomize label +puzzle.push(9); +console.log(puzzle) + +let puzzleIdx = 0; +let mapStr = "" +for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + mapStr += tiles[puzzle[puzzleIdx] - 1] + puzzleIdx++; + } + mapStr += "\n"; +} +console.log(mapStr); + +//menu +setMap(levels[menu]) +const playback = playTune(melody, Infinity) + +addText("9-TILE PUZZLE", { + y: 4, + color: color`0` +}) +addText("-By Arrow-", { + y: 6, + color: color`3` +}) +addText("Click to start", { + y: 8, + color: color`7` +}) +let menuopened = false; +afterInput(async () => { + if (menuopened == false) { + clearText(); + setMap(map`${mapStr}`); + playback.end() + menuopened = true + } else { + + playTune(move) + if (done) return; + let tileIdx = 0; + for (let y = 0; y < 3; y++) { + for (let x = 0; x < 3; x++) { + const t = getTile(x, y); + if (t.length && t[0].type != tiles[tileIdx]) { + console.log("got type", t[0].type) + console.log('expected', tiles[tileIdx]) + return + } + tileIdx++; + } + } + done = true; + await sleep(500); + addText("YOU WIN!", { + y: 4, + color: color`3` + }) + setMap(map` +... +.w.`); + playTune(winning, Infinity) + } + +}) + +//livello game +let done = false; + + + +onInput("a", () => { + if (!menuopened) return; + if (done) return; + if (getFirst(player).x === 0) return; + // get tile to left of getFirst(player) + const t = getTile(getFirst(player).x - 1, getFirst(player).y)[0]; + t.x += 1; + getFirst(player).x -= 1; +}) + +onInput("d", () => { + if (!menuopened) return; + if (done) return; + if (getFirst(player).x === 2) return; + // get tile to right of getFirst(player) + const t = getTile(getFirst(player).x + 1, getFirst(player).y)[0]; + t.x -= 1; + getFirst(player).x += 1; +}) + +onInput("s", () => { + if (!menuopened) return; + if (done) return; + if (getFirst(player).y === 2) return; + // get tile to bottom of getFirst(player) + const t = getTile(getFirst(player).x, getFirst(player).y + 1)[0]; + t.y -= 1; + getFirst(player).y += 1; +}) + +onInput("w", () => { + if (!menuopened) return; + if (done) return; + if (getFirst(player).y === 0) return; + // get tile to top of getFirst(player) + const t = getTile(getFirst(player).x, getFirst(player).y - 1)[0]; + t.y += 1; + getFirst(player).y -= 1; +}) + +const sleep = ms => new Promise(r => setTimeout(r, ms)); + diff --git a/games/9_puzzle.js b/games/9_puzzle.js index f3674ccbd5..a7d667349c 100644 --- a/games/9_puzzle.js +++ b/games/9_puzzle.js @@ -1,9 +1,9 @@ /* - @title: 9_puzzle -@tags: ['logic'] -@addedOn: 2022-07-14 @author: brian +@tags: ['puzzle'] +@addedOn: 2022-07-14 + Instructions: diff --git a/games/A_Maze.js b/games/A_Maze.js new file mode 100644 index 0000000000..fb17ecbd58 --- /dev/null +++ b/games/A_Maze.js @@ -0,0 +1,405 @@ +/* +@title: A Maze +@author: Ethan C +@tags: [] +@addedOn: 2024-09-03 +*/ + +const player = "p" +const wall = "w" +const end = "e" +const fake = "f" +const broken = "b" +const foreseer = "r" +const devil = "d" +const askB = "a" +const askD = "v" + + +setLegend( + [player, bitmap` +................ +.......CCC...... +......C666...... +......6620...... +......6666...... +.......66....... +......5555...... +......5335...... +......5335...... +......5335...... +......5665...... +......5559...... +......9999...... +......9..9...... +......9..9...... +......99.99.....` ], + [wall, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [end, bitmap` +0033003300330033 +0033003300330033 +3300330033003300 +3300330033003300 +0033222662220033 +0033266666620033 +3300226666223300 +3300262662623300 +0033262662620033 +0033226666220033 +3300222662223300 +3300266666623300 +0033003300330033 +0033003300330033 +3300330033003300 +3300330033003300`], + [fake, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], + [broken, bitmap` +00HH00HH00HH00HH +00HH00HH00HH00HH +HH00HH00HH00HH00 +HH00HH00HH00HH00 +00HH...66...00HH +00HH.666606.00HH +HH00..0666..HH00 +HH00.6.00.6.HH00 +00HH.6.60.6.00HH +00HH..6660..00HH +HH00...06...HH00 +HH00.666666.HH00 +00HH00HH00HH00HH +00HH00HH00HH00HH +HH00HH00HH00HH00 +HH00HH00HH00HH00`], + [foreseer, bitmap` +................ +.....FFF........ +....F000F....... +...F00000F...... +..FF0L0L0F...... +.F6F00000F...... +.F6FF0000F...... +FFF6FF00F....... +F6FF6FF0F....... +FF6FFFFF........ +FF6FF6FF........ +FF6FF6FFF....... +FF6FF6FFF....... +FF6FF6FFFFF..... +F6FFF6FFFFFF.... +FFFF6FFFFFFFF...`], + [devil, bitmap ` +................ +.....000...00... +....0CCC0.0220.. +...0C313C0220... +..0C313C0CC0.... +.0C313C0C23C0... +.C3133C0CCCCC0.. +.C31331C0CC00... +.C313133CCCC000. +.C313131CCCCCC3. +.C313131CCCCC30. +.0C33131CCCC00.. +..0C333CCCCC0... +...0C3C0C0.C0... +....0C00C0.C0... +.......0CC0CC0..`], + [askB, bitmap` +6666666666666666 +6666666666666666 +66............66 +66....666.....66 +66...66.66....66 +66..66...66...66 +66..66...66...66 +66.......66...66 +66......66....66 +66.....66.....66 +66............66 +66.....66.....66 +66.....66.....66 +66............66 +6666666666666666 +6666666666666666`], + [askD, bitmap ` +3333333333333333 +3333333333333333 +33............33 +33....CCC.....33 +33...CC.CC....33 +33..CC...CC...33 +33..CC...CC...33 +33.......CC...33 +33......CC....33 +33.....CC.....33 +33............33 +33.....CC.....33 +33.....CC.....33 +33............33 +3333333333333333 +3333333333333333`] +) + +setSolids([player, wall, fake, foreseer]) + +let level = 0; +const levels = [ + map` +p.....we. +w.w.ww.w. +w.w.w.... +w.w.wwfww +..w...... +ww..wwww. +...ww....`, + map` +pf...w......w..f.d +ffw....wwww....w.w +.wwwwfw...www.ww.w +....w...w...w....w +.ww...w..fw...www. +.w.w..www..wwww... +...ww..we......ww. +.w...w.wwwwfw..f.. +.www...w....www..w +..wwww...w...www.w +.d.f....wwww.....w`, + map` +p........wwww..f..w.....www....w +..wwww.w...w...w.w..www.....ww.w +.w.....www.w.w.w...w.d.wwww.ww.w +.w.ww.w..w.www.www.......ww..... +.w..w..w.........w..wfw....ww.wf +..w.ww..wwww.www..w.w.wwww..wfw. +w....ww......w....w.w.w...w.w.w. +.ww.f..wdwwwww.ww.w.w.f.e.w.w.w. +..w.w.....ww...w..w.w.w...w.f.w. +.w..www......w...ww.w..w.w..w... +.w.ww...ww.wdww.w.w.w...ww.www.. +.w....ww...wew..w.w..w...w...w.. +...w.w...wwww...w..w..wffwwwwwfw +w.w....w..ww..w..w..w.w....f..w. +ew..ww.ww.w....w..w.w.ww...f.... +..ww.w.....ww.www.w.w.wwwwwww..w +wwww...www.......f..w.......w... +ra..wwfwwwwwwfwwwwwwwwwwwww.w.e. +a...........................w...`, + map` +wwwwwwwwwwwwww +w.f.f.w.f....w +w.f.f.f.w..a.w +wpf.w.f.f.ar.e +w.f.f.w.w..a.w +w.f.f.f.f....w +wwwwwwwwwwwwww`, + map ` +wwwwwwwwwwwwww +w..d..d..dw.dw +..f...w..f..w. +pw.w.f..w.wf.e +..w...w..f..f. +w..d..d..d..dw +wwwwwwwwwwwwww`, + map` +...w..f..e..w +w..ff.wf.f..w +.vdw..w...wfw +..w.ffwfw..fw +f..f..w..fffw +w.f.f.wf..f.w +.f....w..f..w +wwwwwww.f.w.w +..f..w.w..wfw +www..w..w...w +p.f..f....f.w +ww..w.f.ff..w +.w.f...w....w +wwwwwwwwwwwww` +]; + +// set the map displayed to the current level +const currentLevel = levels[level]; +setMap(currentLevel); + +// make sure the level exists before we load it +if (currentLevel !== undefined) { + clearText(""); + setMap(currentLevel); +} + +setMap(levels[level]) + +setPushables({ + [ player ]: [fake], + [ fake ]: [fake] +}) + +//player movement +onInput("s", () => { + getFirst(player).y += 1 +}) + +onInput("w", () => { + getFirst(player).y -= 1 +}) + +onInput("a", () => { + getFirst(player).x -= 1 +}) + +onInput("d", () => { + getFirst(player).x += 1 +}) + + +//resets the game. +onInput("k", () => { + clearText(); + level = 0; + setMap(levels[0]); +}) + + + //checks stuff after every input. +afterInput(() => { + + //checks if player is over is over the end tile. + const win = tilesWith(end, player).length; + const stop = tilesWith(fake, end).length; + const dead = tilesWith(player, devil).length; + const know = tilesWith(player, askB).length; + const lies = tilesWith(player, askD).length; + + if(win >= 1) + { + level = level + 1; + + if (level < levels.length) + { + clearText(); + setMap(levels[level]); + } + + //says you win if it is the last level. + if (level == 6) + { + clearText(); + addText ("You Win! for now...", {y: 5,color: `5`}); + } + } + + + + // stops goal from working on level 2 if fake block is there. + if( stop == 1 & level == 1) + { + clearTile(8,6); + addSprite(8,6,broken); + } + + //stops goal from working on level 3. + if( stop == 1 & level == 2) + { + clearTile(24,7); + addSprite(24,7,broken); + } + + //stops goalform working on level 6. + if (stop == 1 & level == 5) + { + clearTile(9,0); + addSprite(9,0,broken); + } + + + if( know == 1 & level == 2) // activates the foreseer in level 3. + { + addText("They lie!!!!", {y: 4, color: `4`}) + addSprite(5,18,devil); // blocks way out + clearTile(1,16); //opens secret passage to exit. + } + + if(know == 1 & level == 3) // activates foreseer in level 4. + { + clearText(); + addText("We are trapped here", {y: 4, color: `4`}); + addText("for eternity", {y:5, color: `4`}); + } + + if(lies == 1 & level == 5) //activates the demons talk in level 6. + { + clearText(); + addText("We shall keep ", {y:5, color: `9`}); + addText("you here!", {y:6, color: `9` }); + } + + + //kills + if(dead == 1) + { + clearText(); + addText("You Died", { y: 5, color: `3`}) // tells player game is over. + + if(level == 1) // gets rid of player on the second level. + { + clearTile(1,10); + clearTile(17,0); + } + if(level == 2)// gets rid of player on the third level. + { + clearTile(8,7); + clearTile(12,10); + clearTile(21,2); + clearTile(5,18); + } + if(level == 4) //gets rid of player on the fifth level. + { + clearTile(3,1); + clearTile(3,5); + clearTile(6,1); + clearTile(6,5); + clearTile(9,1); + clearTile(9,5); + clearTile(12,1); + clearTile(12,5); + } + if(level == 5) //gets rid of player on the sixth level. + { + clearTile(2,2); + } + } + + +}) diff --git a/games/A_Really_One_Sided_Duel.js b/games/A_Really_One_Sided_Duel.js index b01ec3d099..81dcdc8e78 100644 --- a/games/A_Really_One_Sided_Duel.js +++ b/games/A_Really_One_Sided_Duel.js @@ -1,8 +1,8 @@ /* @title: A_Really_One_Sided_Duel +@author: Saatwik Das @tags: ['endless'] @addedOn: 2022-12-28 -@author: Saatwik Das */ diff --git a/games/Advent_of_Sprig.js b/games/Advent_of_Sprig.js index af5c87c484..7c8f8c00cf 100644 --- a/games/Advent_of_Sprig.js +++ b/games/Advent_of_Sprig.js @@ -1,8 +1,8 @@ /* @title: Advent of Sprig -@tags: ['event'] -@addedOn: 2022-12-01 @author: Leonard (Omay) +@tags: ['utility'] +@addedOn: 2022-12-01 Every day, I will add a new game or level of a game. */ diff --git a/games/Alien-poop.js b/games/Alien-poop.js index 62c9295ca7..1901eabcbc 100644 --- a/games/Alien-poop.js +++ b/games/Alien-poop.js @@ -1,9 +1,9 @@ /* @title: Alien poop -@tags: ['beginner'] -@img: "" -@addedOn: 2024-05-20 @author: Luis Guerrero +@tags: [] +@addedOn: 2024-05-20 +@img: "" Check the tutorial in the bottom right, the run button is in the top right. Make sure to remix this tutorial if you want to save your progress! diff --git a/games/Alien_Attack.js b/games/Alien_Attack.js index 43039c20a8..65e190a38d 100644 --- a/games/Alien_Attack.js +++ b/games/Alien_Attack.js @@ -1,9 +1,9 @@ // /* - @title: Alien_Attack +@title: Alien_Attack +@author: whatware @tags: [] @addedOn: 2023-03-15 - @author: whatware */ const player = "p" diff --git a/games/Amazeing.js b/games/Amazeing.js index 395e41ada5..fc985c3e1e 100644 --- a/games/Amazeing.js +++ b/games/Amazeing.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Amazing @author: Dilon @tags: [] -@img: "" @addedOn: 2024-06-07 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" Mechanics inspired by Maze_Runner3 by Charlie */ diff --git a/games/Amazing_Mazes.js b/games/Amazing_Mazes.js index e826ccfc61..ff1e71b7b5 100644 --- a/games/Amazing_Mazes.js +++ b/games/Amazing_Mazes.js @@ -2,7 +2,7 @@ /* @title: Amazing_Mazes @author: Dexter Speed -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-07-25 */ diff --git a/games/Amoeba.js b/games/Amoeba.js index 3c3bb2bff8..3c06561dec 100644 --- a/games/Amoeba.js +++ b/games/Amoeba.js @@ -1,8 +1,8 @@ /* @title: Amoeba -@tags: ['logic'] -@addedOn: 2022-11-08 @author: LUKÁCS Gergely +@tags: ['puzzle'] +@addedOn: 2022-11-08 HOW TO PLAY: Amoeba is a two-player strategy game, a version of Gomoku. diff --git a/games/Amongus_flight.js b/games/Amongus_flight.js index 131f6cd5f0..f638ef3c4d 100644 --- a/games/Amongus_flight.js +++ b/games/Amongus_flight.js @@ -1,8 +1,8 @@ /* @title: Amongus flight +@author: Yashas @tags: ['endless'] @addedOn: 2023-01-04 -@author: Yashas */ const amongus = "p"; diff --git a/games/Anomaly.js b/games/Anomaly.js index ac67546f11..8ba28589fd 100644 --- a/games/Anomaly.js +++ b/games/Anomaly.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Anomaly @author: Liam @tags: [] -@img: "" @addedOn: 2024-05-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ const dirtgoal = "u" diff --git a/games/Antivirus.js b/games/Antivirus.js index deee2d970b..43b3e9492c 100644 --- a/games/Antivirus.js +++ b/games/Antivirus.js @@ -2,7 +2,7 @@ /* @title: Antivirus @author: Nathan Jereb -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-05-03 */ diff --git a/games/Apple_Skedaddle.js b/games/Apple_Skedaddle.js index 146520f47f..01e1aac11c 100644 --- a/games/Apple_Skedaddle.js +++ b/games/Apple_Skedaddle.js @@ -1,8 +1,8 @@ /* @title: Apple Skedaddle -@tags: ['sokoban-style'] -@addedOn: 2022-11-06 @author: DieselFalcon +@tags: ['puzzle'] +@addedOn: 2022-11-06 Rules: You are an apple who wants to be reunited with his Watermelon friend. diff --git a/games/Apples-and-Oranges.js b/games/Apples-and-Oranges.js index 0599691cf3..9a8726dbc0 100644 --- a/games/Apples-and-Oranges.js +++ b/games/Apples-and-Oranges.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Archery @author: Raghav Sinha @tags: [] @addedOn: 2024-08-23 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Arcade-Treasure.js b/games/Arcade-Treasure.js index 78810a2d6a..3e6e260486 100644 --- a/games/Arcade-Treasure.js +++ b/games/Arcade-Treasure.js @@ -1,11 +1,11 @@ /* -// Treasure Quest -// Navigate through obstacles and puzzles to reach the treasure and beaware of enemy! - @title: Treasure_Quest @author: Albin Thapaliya -@tags: ['adventure', 'puzzle'] +@tags: ['puzzle','adventure'] @addedOn: 2024-06-18 +// Treasure Quest +// Navigate through obstacles and puzzles to reach the treasure and beaware of enemy! + */ const player = "p"; diff --git a/games/Arcade_Runner.js b/games/Arcade_Runner.js index 47dbe96f2a..4ee8421f57 100644 --- a/games/Arcade_Runner.js +++ b/games/Arcade_Runner.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Arcade runner @author: Artem4852 -@tags: ["endless"] +@tags: ['endless'] @addedOn: 2024-08-04 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + Controls: W - up diff --git a/games/Art.js b/games/Art.js index f1e7f346d6..a61fcc33c4 100644 --- a/games/Art.js +++ b/games/Art.js @@ -1,8 +1,8 @@ /* @title: Art +@author: Leonard (Omay) @tags: ['sandbox'] @addedOn: 2022-11-06 -@author: Leonard (Omay) Inspired by this game: https://editor.sprig.hackclub.com/?file=https://raw.githubusercontent.com/hackclub/sprig/main/games/Paint_IT.js Border is the color you have selected. diff --git a/games/Asteroid_Apocalypse.js b/games/Asteroid_Apocalypse.js index 64898b08c4..d28d6bf720 100644 --- a/games/Asteroid_Apocalypse.js +++ b/games/Asteroid_Apocalypse.js @@ -1,8 +1,8 @@ /* @title: asteroid apocalypse +@author: zcsop1206 @tags: ['endless'] @addedOn: 2022-12-31 -@author: zcsop1206 Move the lazer with "a" and "d" for left and right, "w" and "s" for up and down Try to destroy the asteroid before it hits the bas The game ends if the asteroid hits the base. diff --git a/games/Asteroid_Beatdown.js b/games/Asteroid_Beatdown.js new file mode 100644 index 0000000000..f1dd4773b4 --- /dev/null +++ b/games/Asteroid_Beatdown.js @@ -0,0 +1,377 @@ +/* +@title: Asteroid Beatdown +@author: aidanq06 +@tags: [] +@addedOn: 2024-09-15 +*/ + +const spaceship = "s"; +const asteroid = "a"; +const bullet = "b"; +const empty = "."; +const background = "n"; +const life = "l"; + +setLegend( + [ background, bitmap` +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000`], + [ spaceship, bitmap` +......0000...... +.....002200..... +.....022220..... +....00222200.... +....02211220.... +...0022112200... +...0221111220... +..002211112200.. +.00221177112200. +.02221177112220. +.02221177112220. +.00222111122200. +..002222222200.. +...0022222200... +....00222200.... +.....000000.....`], + [ asteroid, bitmap` +....11111111.... +...1111L11L11... +..1111LLL11111.. +.1111LLLL11L111. +1111LLLLLL1LL111 +1111LLLLLL111111 +1L111LLLL1111LL1 +111111LL11111LL1 +11111111111L1111 +11LL111111111111 +11LLL1111L111111 +111L1111LLLL1111 +.1111111LLLL111. +..1L111111LL11.. +...111L111111... +....11111111....`], + [ bullet, bitmap` +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777...... +......7777......`], + [ life, bitmap` +................ +................ +...333....333... +..33333..33333.. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +..333333333333.. +...3333333333... +....33333333.... +.....333333..... +......3333...... +.......33....... +................`] +); + +setBackground(background); + +let gameState = "menu"; +let level = 1; +let score = 0; +let lives = 3; +let gameOver = false; + +let ticks = 0; + +let playerX = 4; +const playerY = 8; + +let asteroids = []; +let bullets = []; + +let maxBullets = 1; +let bulletSpeed = 1; +let asteroidSpeed = 0.1; // smaller increments + +let asteroidsDestroyed = 0; +const asteroidsForUpgrade = 5; // Set the amount of asteroids for each level upgrade + +let totalAsteroids = 5; + +let asteroidSpawnRate = 1; +let abilityTextTimeout; + +const createMap = () => { + return map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +.......... +....s..... +..........`; +}; + +let currentMap = createMap(); +setMap(currentMap); + +onInput("j", () => { + if (gameState === "menu") { + gameState = "playing"; + resetGame(); + } else if (gameOver) { + resetGame(); + } +}); + +onInput("a", () => { + if (playerX > 0 && gameState === "playing" && !gameOver) { + playerX--; + updateGame(); + } +}); + +onInput("d", () => { + if (playerX < 9 && gameState === "playing" && !gameOver) { + playerX++; + updateGame(); + } +}); + +onInput("k", () => { + if (bullets.length < maxBullets) { + bullets.push({ x: playerX, y: playerY - 1 }); + } +}); + +onInput("l", () => { + if (gameState === "menu") { + gameState = "tutorial"; + drawTutorial(); + } else if (gameState === "tutorial") { + gameState = "menu"; + drawMenu(); + } +}); + +function updateGame() { + if (gameState === "menu" || gameState === "tutorial") { + return; // Don't update game if in menu or tutorial mode + } + + ticks++; + + let mapArray = currentMap.trim().split('\n').map(row => row.split('')); + + for (let y = 0; y < 10; y++) { + for (let x = 0; x < 10; x++) { + mapArray[y][x] = empty; + } + } + + bullets = bullets.filter(bullet => { + bullet.y -= bulletSpeed; + if (bullet.y >= 0) { + mapArray[Math.floor(bullet.y)][bullet.x] = "b"; + return true; + } + return false; + }); + + asteroids = asteroids.filter(asteroid => { + asteroid.y += asteroidSpeed; + if (asteroid.y < 9) { + mapArray[Math.floor(asteroid.y)][asteroid.x] = "a"; + return true; + } else { + lives--; + playTune(tune` +96.46302250803859: C4~96.46302250803859, +2990.3536977491963`); + if (lives <= 0) { + gameOver = true; + } + return false; + } + }); + + checkCollisions(); + + spawnAsteroids(); + + mapArray[playerY][playerX] = spaceship; + + // Display lives in the top left + for (let i = 0; i < lives; i++) { + mapArray[0][i+7] = life; + } + + // Display bullets in the top right + for (let i = 0; i < bullets.length; i++) { + mapArray[1][9 - i] = bullet; + } + + currentMap = mapArray.map(row => row.join('')).join('\n'); + + setMap(currentMap); + + clearText(); + addText(`Score: ${score}`, { y: 15, color: color`7` }); + addText(`Level: ${level}`, { y: 1, x: 1, color: color`7` }); + addText(`Asteroids: ${totalAsteroids}`, { y: 17, color: color`7` }); + + if (gameOver) { + addText("Game Over!", { y: 7, color: color`7` }); + addText("press 'j' to restart", { y: 9, color: color`H` }); + } +} + +function spawnAsteroids() { + if (ticks % 60 === 0 && asteroidsDestroyed < totalAsteroids) { + let newX = Math.floor(Math.random() * 10); + asteroids.push({ x: newX, y: 0 }); + } +} + +function checkCollisions() { + for (let i = bullets.length - 1; i >= 0; i--) { + for (let j = asteroids.length - 1; j >= 0; j--) { + if (Math.floor(bullets[i].y) === Math.floor(asteroids[j].y) && + bullets[i].x === asteroids[j].x) { + bullets.splice(i, 1); + asteroids.splice(j, 1); + playTune(tune`H`); + score += 10; + asteroidsDestroyed++; + if (asteroidsDestroyed % asteroidsForUpgrade === 0) { + upgradeShip(); + } + return; + } + } + } + + for (let i = asteroids.length - 1; i >= 0; i--) { + if (Math.floor(asteroids[i].y) === playerY && asteroids[i].x === playerX) { + asteroids.splice(i, 1); + lives--; + playTune(tune` +96.46302250803859: C4~96.46302250803859, +2990.3536977491963`); + if (lives <= 0) { + gameOver = true; + playTune(tune` +61.09979633401222: D5-61.09979633401222, +61.09979633401222: G4-61.09979633401222, +61.09979633401222: D4-61.09979633401222, +61.09979633401222: C4-61.09979633401222, +1710.794297352342`); + } + return; + } + } +} + +function upgradeShip() { + level++; + totalAsteroids += 10; + playTune(tune` +61.09979633401222: D4~61.09979633401222, +61.09979633401222: G4~61.09979633401222, +61.09979633401222: D5~61.09979633401222`); + clearText(); + addText("New ability!", { y: 1, color: color`3` }); + abilityTextTimeout = setTimeout(() => { + clearText(); + }, 3000); + + asteroidSpeed += 0.05; + if (maxBullets <= 3){ + maxBullets += 1; + } +} + +function resetGame() { + gameState = "playing"; + currentMap = createMap(); + setMap(currentMap); + score = 0; + lives = 3; + gameOver = false; + playerX = 4; + asteroids = []; + bullets = []; + level = 1; + totalAsteroids = 50; + asteroidsDestroyed = 0; + bulletSpeed = 1; + asteroidSpeed = 0.1; + maxBullets = 1; +} + +function drawMenu() { + clearText(); + addText("Asteroid Beatdown", { y: 4, color: color`7` }); + addText("press 'j' to play", { y: 6, color: color`H` }); + addText("press 'l'", { y: 8, color: color`4` }); + addText("for tutorial", { y: 9, color: color`4` }); +} + +let tutorialPage = 0; + +function drawTutorial() { + clearText(); + + const tutorialPages = [ + ["'a' to move left", + "'d'to move right", + "'k' to shoot", + " ", + "Destroy asteroids", + "to level up", + " ", + "Don't let asteroids", + "reach the end!", + " ", + "'l' for main menu", + ], + ]; + + tutorialPages[tutorialPage].forEach((line, index) => { + addText(line, { y: index + 2, color: color`7` }); + }); +} + +drawMenu(); + +setInterval(updateGame, 100); diff --git a/games/Asteroid_Dodge.js b/games/Asteroid_Dodge.js index ea5ec54c2f..ce296c9861 100644 --- a/games/Asteroid_Dodge.js +++ b/games/Asteroid_Dodge.js @@ -1,8 +1,8 @@ /* @title: Asteroid_Dodge! -@tags: ['dodge'] -@addedOn: 2023-08-09 @author: V205 +@tags: ['action'] +@addedOn: 2023-08-09 */ // Thanks to Hackclub and tutorials! // Setup stuff! diff --git a/games/Asteroid_Field.js b/games/Asteroid_Field.js index 2ad2e2d7d5..4f4f831765 100644 --- a/games/Asteroid_Field.js +++ b/games/Asteroid_Field.js @@ -1,8 +1,8 @@ /* @title: Asteroid Field -@tags: ['catch'] -@addedOn: 2022-11-25 @author: Kaitlyn +@tags: [] +@addedOn: 2022-11-25 */ function getRandomInt(min, max) { min = Math.ceil(min); diff --git a/games/Astroids.js b/games/Astroids.js index 5fac7f8f44..b31c4d95ab 100644 --- a/games/Astroids.js +++ b/games/Astroids.js @@ -1,7 +1,7 @@ /* @title: Astroids @author: Alex -@tags: ["Bullet Hell"] +@tags: ['real-time','action'] @addedOn: 2024-08-17 */ let timeCounter = 0; diff --git a/games/Astrovoid.js b/games/Astrovoid.js index 3c9cab0fd7..7289275920 100644 --- a/games/Astrovoid.js +++ b/games/Astrovoid.js @@ -1,8 +1,8 @@ /* @title: Astrovoid +@author: Aspen :D @tags: ['endless'] @addedOn: 2023-01-23 -@author: Aspen :D */ // Description: Avoid astroids by moving using WASD, pause the game using I diff --git a/games/Avoid_The_Tree.js b/games/Avoid_The_Tree.js index b206a9899c..5f3aa1d2c8 100644 --- a/games/Avoid_The_Tree.js +++ b/games/Avoid_The_Tree.js @@ -1,8 +1,8 @@ /* @title: Avoid_The_Tree +@author: Samarth Verulkar @tags: ['endless'] @addedOn: 2023-01-05 -@author: Samarth Verulkar References and inspirations: Coding Demo 5: Gravity by Leonard (Omay) diff --git a/games/BRICK_DODGER.js b/games/BRICK_DODGER.js index 38a18dc9e5..631bc5a5f3 100644 --- a/games/BRICK_DODGER.js +++ b/games/BRICK_DODGER.js @@ -1,8 +1,8 @@ /* @title: BRICK DODGER +@author: Logan Fick @tags: ['endless'] @addedOn: 2022-11-06 -@author: Logan Fick Instructions: Move left or right using A/D keys, dodge the bricks coming down, diff --git a/games/Bad_Apple.js b/games/Bad_Apple.js index 6a5b40386a..28f26901c2 100644 --- a/games/Bad_Apple.js +++ b/games/Bad_Apple.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Bad_Apple @author: Sychamis -@tags: ['advanced'] +@tags: [] @addedOn: 2024-01-27 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ //I noticed that no one made a bad apple port on sprig yet so I convinced myself I had to do it ;) diff --git a/games/Banana fuel.js b/games/Banana fuel.js new file mode 100644 index 0000000000..e2b1afe017 --- /dev/null +++ b/games/Banana fuel.js @@ -0,0 +1,489 @@ +/* +@title: Banana fuel +@author: Neon +@tags: [] +@addedOn: 2024-09-12 +*/ + +/* +Banana fuel: +controls: use `w,a,s,d,j` +wasd to move +the game objective is to collect bananas. +to progress to the next level get all bananas/jewels on level OR use a door. +there is an easter egg on the big levels. +Easter egg: secret room with full non claimable bananas. +(no point benefits ) +*/ +// since console.debug, console.error dont work convert them to log +console.error = (str) => console.log(`err: ${str}`); +console.debug = (str) => console.log(`debug: ${str}`); +const player = "p"; +const player1 = "1"; +const player2 = "2"; +const player3 = "3"; +const fruit = "f"; +const jewel = "j"; +// to get the fruit from the block you must have x fruit & break the block +const fruitblock = "b"; +const door = "d"; +const requiredBananasToWinLevel = 5; + +let score = 0; + +let playerStatus = 0; +let isDone = false; +let jewel_attached_to_player = false, + jewel_first_round = true; +let left_stare = 0; +let old = { + p: { x: null, y: null, level: 1 }, +}; +// easter egg +let easter_egg_banner = false; +let easter_egg_loaded = false; +let disable_easter_egg = false; +setLegend( + [ + player, + bitmap` +................ +................ +.......000...... +.......0.0...... +......0..0...... +......0...0.3... +....000H.H0.0... +....0.0...000... +....3.05550..... +......0...0..... +.....0....0..... +.....0...0...... +......000....... +......0.0....... +.....00.00...... +................`, + ], + [ + player1, + bitmap` +................ +................ +.......000...... +.......0.0...... +......0..0...... +......0...0.3... +....000H.H0.0... +....0.0...000... +....3.05550..... +......0...0..... +.....066660..... +.....06660...... +......000....... +......0.0....... +.....00.00...... +................`, + ], + [ + player2, + bitmap` +................ +................ +.......000...... +.......0.0...... +......0..0...... +......0...0.6... +....000H.H0.0... +....0.0...000... +....6.06660..... +......06660..... +.....066660..... +.....06660...... +......000....... +......0.0....... +.....00.00...... +................`, + ], + [ + player3, + bitmap` +................ +................ +.......000...... +.......060...... +......0660...... +......06660.6... +....0003630.0... +....0.0666000... +....6.06660..... +......06660..... +.....066660..... +.....06660...... +......000....... +......0.0....... +.....00.00...... +................`, + ], + [ + fruit, + bitmap` +................ +................ +.......CCC...... +.......C6C...... +......C66C...... +......C666C..... +......C666C..... +......C666C..... +......C666C..... +......C666C..... +.....C6666C..... +.....C666C...... +......CCC....... +................ +................ +................`, + ], + [ + fruitblock, + bitmap` +0000000000000000 +0..............0 +0......CCC.....0 +0......CFC.....0 +0.....CFFC.....0 +0.....CFFFC....0 +0.....CFFFC....0 +0.....CFFFC....0 +0.....CFFFC....0 +0.....CFFFC....0 +0....CFFFFC....0 +0....CFFFC.....0 +0.....CCC......0 +0..............0 +0..............0 +0000000000000000`, + ], + [ + door, + bitmap` +0000000000000000 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCC0000 +0CCCCCCCCCCC0000 +0CCCCCCCCCCC0000 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0CCCCCCCCCCCCCC0 +0000000000000000`, + ], + [ + jewel, + bitmap` +0000000000000000 +0.2.2.2.2.2.2.20 +02.2.2.2.2.2.2.0 +0.2.2.2.2.2.2.20 +02.2.2.2.2.2.2.0 +0.2.2.2.2.2.2.20 +02.2.2.2.2.2.2.0 +0.2.2.2.2.2.2.20 +02.2.2.2.2.2.2.0 +0.2.2.2.2.2.2.20 +02.2.2.2.2.2.2.0 +0.2.2.2.2.2.2.20 +02.2.2.2.2.2.2.0 +0.2.2.2.2.2.2.20 +02.2.2.2.2.2.2.0 +0000000000000000`, + ], +); +setSolids([player, player1, player2, player3, fruitblock]); + +let level = 1; +const levels = [ + // you lose map + map` +... +... +...`, + map` +.ff +p.f +...`, + map` +..p +... +f..`, + map` +..p +... +${Math.random() > 0.5 ? "f" : "."}.f`, + map` +b.p +${Math.random() > 0.3 ? "f" : "j"}b. +b.f`, + map` +p..bf +f...b +...b. +..b.d +.b..${Math.random() > 0.5 ? "f" : "."}`, + // begin special easter egg levels - 3 levels + // keep left side free of blocks + map` +d..bf +f...b +...b. +..b.p +.b..f`, + map` +p..bf +b...b +.b..d +b.${Math.random() > 0.5 ? "." : "f"}.. +.b..f`, + map` +${Math.random() > 0.5 ? "j" : "f"}b.bd +b...f +.b..p +.b... +.b..f`, + //end + map` +... +... +...`, // you win map +]; +setMap(levels[level]); +setPushables({ + [player]: [], +}); + +function getPlayerInstance() { + switch (playerStatus) { + case 0: + return player; + break; + case 1: + return player1; + break; + case 2: + return player2; + break; + case 3: + return player3; + break; + default: + return player3; // if at the max then just show full charge + break; + } +} + +function handleInputs() { + onInput("w", () => { + if (isDone) return; + left_stare = 0; + // if(easter_egg_loaded) { + // if(current_score_for_math == correct_ans) { + // // wow you got it correct :D + // score *= 2 + // easter_egg_loaded = false; + // disable_easter_egg = true; + // clearText() + // clearUpBoxes() + // // levelUp() + // } else { + // // you lose + // isDone = true; + // setMap(levels[0]) + // updateLevelText() + // return; + // } + + // } + getFirst(getPlayerInstance()).y -= 1; + }); + onInput("d", () => { + if (isDone) return; + left_stare = 0; + // if(easter_egg_loaded) { + // current_score_for_math++; + // } + getFirst(getPlayerInstance()).x += 1; + }); + onInput("a", () => { + if (isDone) return; + const pl = getFirst(getPlayerInstance()); + // if(easter_egg_loaded) { + // current_score_for_math--; + // } + if (pl.x == 0) { + left_stare++; + } + getFirst(getPlayerInstance()).x -= 1; + }); + onInput("s", () => { + if (isDone) return; + left_stare = 0; + getFirst(getPlayerInstance()).y += 1; + }); +} + +function playEatTune() { + playTune(tune` +500: B4/500, +15500`); +} + +function playLevelUpTune() { + playTune(tune`D`); +} + +function clearUpBoxes() { + getAll(fruitblock).forEach((e) => { + clearTile(e.x, e.y); + }); +} +afterInput(() => { + if (isDone) return; + if (old.p.level !== level) resetCords(); + + const pl = getFirst(getPlayerInstance()); + if (getAll(door).find((f) => f.x == pl.x && f.y == pl.y)) { + if (easter_egg_loaded) { + disable_easter_egg = true; + easter_egg_loaded = false; + } + levelUp(); + return; + } + const hitFruit = getAll(fruit).find((f) => f._x == pl.x && f._y == pl.y); + const hitsJewel = getAll(jewel).find((f) => f._x == pl.x && f._y == pl.y); + if (playerStatus > 0) { + clearUpBoxes(); + } + let jewel_just_added = false; + if (jewel_attached_to_player) { + clearTile(pl.x, pl.y); + if (old.p.x !== null && old.p.y !== null) { + // console.log(`clearing ${old.p.x},${old.p.y} - ${old.p.level} = ${pl.x},${pl.y} - ${level}`) + clearTile(old.p.x, old.p.y); + } + addSprite(pl.x, pl.y, jewel); + addSprite(pl.x, pl.y, getPlayerInstance()); + jewel_just_added = true; + } + if (hitFruit || (hitsJewel && !jewel_attached_to_player)) { + // console.log('#eat') + playEatTune(); + clearTile(pl.x, pl.y); + if (hitFruit) { + playerStatus++; + score++; + clearUpBoxes(); + } + + if (hitsJewel && !jewel_attached_to_player && !jewel_just_added) { + addSprite(pl.x, pl.y, jewel); + jewel_attached_to_player = true; + jewel_first_round = true; + } + addSprite(pl.x, pl.y, getPlayerInstance()); + } + + old.p.x = pl.x; + old.p.y = pl.y; + if (level >= 6 && level <= 8 && !disable_easter_egg) { + // if(disable_easter_egg) return; + // add easter egg thing if its not already displayed. + if (!easter_egg_banner) { + addText("sprig", { + x: 3, + y: 1, + color: disable_easter_egg ? color`D` : color`3`, + }); + easter_egg_banner = true; + } + // stop looking at the source to beat the easter egg tsk tsk + if (pl.x == 0 && pl.y == 2 && left_stare >= 4) { + //start the game :D + playerStatus = 0; + + setMap(map` +d....33 +......3 +....... +....... +....... +3...... +33....p`); + // addEasterEggText() + easter_egg_loaded = true; + + return; + } + } + if ( + (getAll(fruit).length == 0 && + (jewel_attached_to_player ? true : getAll(jewel).length == 0)) || + (getAll(door).length == 0 + ? false + : getAll(door).find((f) => f._x == pl.x && f._y == pl.y)) + ) { + if (!easter_egg_loaded) { + console.debug(1); + levelUp(); + } + } +}); + +function resetCords() { + old.p = { x: null, y: null, level: level }; +} + +function levelUp() { + console.debug(`#levelup`); + level++; + //clear old cords on new map since it will clear last spot u were standing on old map + resetCords(); + playerStatus = 0; + easter_egg_banner = false; + clearText(); + playLevelUpTune(); + if (jewel_first_round && jewel_attached_to_player) { + jewel_first_round = false; + } else if (jewel_attached_to_player) { + jewel_attached_to_player = false; + score *= 1.5; + score = Math.round(score); + } + if (levels[level]) { + try { + setMap(levels[level]); + } catch (e) { + // broken level - u lose + level = 0; + setMap(levels[level]); + } + } + updateLevelText(); +} + +function updateLevelText() { + if (level == levels.length - 1) { + addText("You win ", { x: 7, y: 7, color: color`4` }); + addText("Score - " + score, { x: 6, y: 8, color: color`D` }); + isDone = true; + } else if (level == 0) { + addText("You LOSE ", { x: 7, y: 5, color: color`3` }); + } +} +handleInputs(); diff --git a/games/Bash_Game.js b/games/Bash_Game.js index fe30cc87dd..71f210155f 100644 --- a/games/Bash_Game.js +++ b/games/Bash_Game.js @@ -2,7 +2,7 @@ /* @title: Bash_Game @author: WelchJ -@tags: ['choice'] +@tags: [] @addedOn: 2023-04-28 */ diff --git a/games/Battle_City.js b/games/Battle_City.js index 90a7fb28f4..fa53467e77 100644 --- a/games/Battle_City.js +++ b/games/Battle_City.js @@ -1,8 +1,8 @@ /* @title: Battle_City +@author: DevIos @tags: [] @addedOn: 2023-01-09 -@author: DevIos */ const player = "p"; const wall = "w"; diff --git a/games/Battleship.js b/games/Battleship.js index 7bf745dc32..84718e0618 100644 --- a/games/Battleship.js +++ b/games/Battleship.js @@ -2,7 +2,7 @@ /* @title: Battleship @author: Johna-123 -@tags: ['advanced'] +@tags: [] @addedOn: 2023-08-25 */ diff --git a/games/Bert_Blaster.js b/games/Bert_Blaster.js index 392cdae503..94bb9a4cf5 100644 --- a/games/Bert_Blaster.js +++ b/games/Bert_Blaster.js @@ -1,8 +1,8 @@ /* @title: Bert Blaster +@author: Waterbyte @tags: ['endless'] @addedOn: 2022-11-05 -@author: Waterbyte */ const grass1 = "a"; diff --git a/games/BigButton.js b/games/BigButton.js index 9d36cc97fb..d8a6c786b1 100644 --- a/games/BigButton.js +++ b/games/BigButton.js @@ -1,8 +1,8 @@ /* @title: BigButton +@author: LinusSkucas @tags: [] @addedOn: 2022-12-17 -@author: LinusSkucas */ const buttonBitmaps = ["a"]; diff --git a/games/Bike_Mayhem.js b/games/Bike_Mayhem.js index 91e00553ca..980edff7d5 100644 --- a/games/Bike_Mayhem.js +++ b/games/Bike_Mayhem.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Bike Mayhem @author: Eddie B -@tags: ["bike"] +@tags: [] @addedOn: 2024-08-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Binary_Eater.js b/games/Binary_Eater.js index d167f09aac..31ced6e2d1 100644 --- a/games/Binary_Eater.js +++ b/games/Binary_Eater.js @@ -1,8 +1,8 @@ /* @title: Binary Eater -@tags: ['logic'] -@addedOn: 2023-03-10 @author: Kumaraswamy +@tags: ['puzzle'] +@addedOn: 2023-03-10 Inspired from: https://zac.cy/trashguy/ diff --git a/games/Black_Labyrinth.js b/games/Black_Labyrinth.js index e270c315a0..a6be50b571 100644 --- a/games/Black_Labyrinth.js +++ b/games/Black_Labyrinth.js @@ -1,7 +1,7 @@ /* @title: Black Labyrinth @author: Somebud0180 -@tags: ['maze'] +@tags: ['puzzle'] @addedOn: 2024-08-13 */ diff --git a/games/BlastOff.js b/games/BlastOff.js index 277341abcf..feaa3b2129 100644 --- a/games/BlastOff.js +++ b/games/BlastOff.js @@ -1,11 +1,11 @@ /* - @title: BlastOff @author: Fahad -@tags: ['endless', 'dodge'] -@img: "" +@tags: ['endless','action'] @addedOn: 2024-06-04 +@img: "" + Movement: w - Up s - Down diff --git a/games/Blob_Runner.js b/games/Blob_Runner.js index a5b12b80f1..b24b5c264f 100644 --- a/games/Blob_Runner.js +++ b/games/Blob_Runner.js @@ -1,8 +1,8 @@ /* @title: Blob_Runner +@author: Bright Li @tags: [] @addedOn: 2023-01-09 -@author: Bright Li */ const player = "p" diff --git a/games/BlockMaze.js b/games/BlockMaze.js index ef1f4f739a..9828494d77 100644 --- a/games/BlockMaze.js +++ b/games/BlockMaze.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: BlockMaze @author: Arjun -@tags: ['maze', 'puzzle', 'color'] +@tags: ['puzzle'] @addedOn: 2024-07-08 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/BlockPuzzle.js b/games/BlockPuzzle.js index 9c3676ea52..27fdae5e0c 100644 --- a/games/BlockPuzzle.js +++ b/games/BlockPuzzle.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: BlockPuzzle @author: Konstantinos Fragkoulis @tags: [] -@img: "" @addedOn: 2024-06-06 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ const player = "p" diff --git a/games/Block_Stacker.js b/games/Block_Stacker.js index 603380a427..b872ea4327 100644 --- a/games/Block_Stacker.js +++ b/games/Block_Stacker.js @@ -1,14 +1,14 @@ /* +@title: Block_Stacker +@author: vracto +@tags: [] +@addedOn: 2024-05-02 ___ __ __ ______ __ / _ )/ /__ ____/ /__ / __/ /____ _____/ /_____ ____ / _ / / _ \/ __/ '_/ _\ \/ __/ _ `/ __/ '_/ -_) __/ /____/_/\___/\__/_/\_\ /___/\__/\_,_/\__/_/\_\\__/_/ -@title: Block_Stacker -@author: vracto -@tags: [] @img: "" -@addedOn: 2024-05-02 */ diff --git a/games/Bomberman.js b/games/Bomberman.js index 12d6ff04c1..32ed2bf45f 100644 --- a/games/Bomberman.js +++ b/games/Bomberman.js @@ -1,7 +1,7 @@ /* @title: Bomberman @author: Jahn -@tags: ['Bombs', 'Bomberman', 'Multiplayer', 'Versus'] +@tags: ['action','multiplayer'] @addedOn: 2024-07-02 */ diff --git a/games/Bombs.js b/games/Bombs.js new file mode 100644 index 0000000000..ee071d6e14 --- /dev/null +++ b/games/Bombs.js @@ -0,0 +1,456 @@ +/* +@title: Bombs +@author: a-potted-plant +@tags: [] +@addedOn: 2024-09-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const enemy = "e" +const background = "g" +const floor = "f" +const bomb = "b" +const wood = "w" +const wood2 = "v" +const wood3 = "u" + +const explosion = "x" + + + +setLegend( + [player, bitmap` +................ +................ +................ +...DDDDDDDDD.... +..DDDDDDDDDDD... +..DDDDDDDDDDD... +..DDDDDDDDDDD... +..C777777777C... +..C770777077C... +.C77707770777C.. +..77777777777... +..77777777777... +..77777777777... +...777777777.... +....7777777..... +................`], + [explosion, bitmap` +................ +.3333..33..333.. +33333333333333.. +333933333333333. +.33933339333993. +.33999999999933. +..3999999693333. +.33399666999333. +.39999666699333. +33999996699993.. +33333996999933.. +.33399999999333. +.33999999999333. +.33999333399333. +.3333933333933.. +...33333.3333...`], + + [bomb, bitmap` +................ +................ +................ +........3.33.... +.........663.... +........0063.... +........0.3..... +.......00....... +.......0........ +......333....... +......333....... +......333....... +......333....... +......333....... +......333....... +......333.......`], + + [enemy, bitmap` +................ +................ +................ +...DDDDDDDDD.... +..DDDDDDDDDDD... +..DDDDDDDDDDD... +..DDDDDDDDDDD... +..C333333333C... +..C330333033C... +.C33303330333C.. +..33333333333... +..33333333333... +..33333333333... +...333333333.... +....3333333..... +................`], + [background, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [floor, bitmap` +LLLLL1LLLLLL1LLL +LLLLL1LLLLLL1LLL +LLLLL1LLLLLL1LLL +1111111111111111 +LL1LLLLL1LLLLL1L +LL1LLLLL1LLLLL1L +LL1LLLLL1LLLLL1L +1111111111111111 +LLLLL1LLLLLL1LLL +LLLLL1LLLLLL1LLL +LLLLL1LLLLLL1LLL +1111111111111111 +LL1LLLLL1LLLLL1L +LL1LLLLL1LLLLL1L +LL1LLLLL1LLLLL1L +1111111111111111`], + [wood, bitmap` +CCCCCCCCCCC00CCC +CCCCCCCCCC00CCCC +CCCCCCCCCCCCCCCC +00000000CCCCCCCC +CCCCCCCC00000000 +CC0CCCCCCCCCCCCC +CCC00CCCCCCCCCCC +................ +................ +................ +................ +................ +................ +................ +................ +................`], + [wood2, bitmap` +LLLL1LLLLL1LLLLL +LLLL1LLLLL1LLLLL +LLLL1LLLLL1LLLLL +1111111111111111 +LL1LLLL1LLLLL1LL +LL1LLLL1LLLLL1LL +LL1LLLL1LLLLL1LL +................ +................ +................ +................ +................ +................ +................ +................ +................`], + [wood3, bitmap` +LLLL1LLLLL1LLLLL +LLLL1LLLLL1LLLLL +LLLL1LLLLL1LLLLL +1111111111111111 +LL1LLLL1LLLLL1LL +LL1LLLL1LLLLL1LL +LL1LLLL1LLLLL1LL +................ +................ +................ +................ +................ +................ +................ +................ +................`] + + + +) +setBackground(background) + +setSolids([floor, bomb, wood2, wood3]) + + +let level = 0 +const levels = [ + map` +... +.p. +www +... +... +... +... +.e. +fff`, + map` +..... +p.... +wwwww +..... +..... +..... +..... +....e +fffff`, + map` +...... +.p.... +wwwwww +...... +vv.vv. +...... +...... +.....e +ffffff`, + map` +.......... +.....p.... +wwwwwwwwww +.......... +vvv.vv.vvv +.......... +.......... +.........e +ffffffffff`, + map` +............... +..........p.... +wwwwwwwwwwwwwww +............... +vv.vvvvvvvv.vvv +............... +............... +..............e +fffffffffffffff`, + map` +..................... +................p.... +wwwwwwwwwwwwwwwwwwwww +..................... +vvvvvvvv.vvvvvvvvvvvv +..................... +..................... +....................e +fffffffffffffffffffff`, + map` +.............. +p............. +wwwwwwwwwwwwww +.............. +vvvv.vvvv.vvvv +......u....... +.............. +.............e +ffffffffffffff`, + map` +................. +p................ +wwwwwwwwwwwwwwwww +................. +vvvvvvvv.vvvvvvvv +.u............... +................. +.............e... +fffffffffffffffff`, + map` +..................... +.p................... +wwwwwwwwwwwwwwwwwwwww +..................... +vvvvvvvvvv.vvvvvvvvvv +..........u.......... +..................... +..................... +...............e..... +fffffffffffffffffffff`, + + map` +............... +............... +............... +............... +vvvvvvvvvvvvvvv +............... +............... +p.............e +fffffffffffffff` + + +] + +setMap(levels[level]) + +setPushables({ + [wood3]: [player] +}) +const hit = tune` +119.04761904761905: F4^119.04761904761905, +119.04761904761905: E4^119.04761904761905, +119.04761904761905: F4^119.04761904761905, +119.04761904761905: G4^119.04761904761905, +3333.3333333333335` +const winner = tune` +145.63106796116506: D4~145.63106796116506 + F4~145.63106796116506 + A4~145.63106796116506, +145.63106796116506: E4~145.63106796116506 + G4~145.63106796116506 + B4~145.63106796116506, +145.63106796116506: F4~145.63106796116506 + A4~145.63106796116506 + C5~145.63106796116506, +145.63106796116506: G4~145.63106796116506 + E4~145.63106796116506 + B4~145.63106796116506, +145.63106796116506: F4~145.63106796116506 + A4~145.63106796116506 + C5~145.63106796116506, +145.63106796116506: G4~145.63106796116506 + B4~145.63106796116506 + D5~145.63106796116506, +145.63106796116506: A4~145.63106796116506 + F4~145.63106796116506 + C5~145.63106796116506, +145.63106796116506: G4~145.63106796116506 + B4~145.63106796116506 + D5~145.63106796116506, +145.63106796116506: E5~145.63106796116506 + G5~145.63106796116506, +145.63106796116506: F5~145.63106796116506 + A5~145.63106796116506, +3203.883495145631` + +const melody = tune` +179.64071856287424: E4^179.64071856287424, +179.64071856287424: D4^179.64071856287424, +179.64071856287424: E4^179.64071856287424, +179.64071856287424: F4^179.64071856287424, +179.64071856287424: E4^179.64071856287424, +179.64071856287424: D4^179.64071856287424, +179.64071856287424: E4^179.64071856287424, +179.64071856287424: F4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: F4^179.64071856287424, +179.64071856287424: E4^179.64071856287424, +179.64071856287424: F4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: A4^179.64071856287424, +179.64071856287424: F4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: A4^179.64071856287424, +179.64071856287424: F4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: A4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: F4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: A4^179.64071856287424, +179.64071856287424: B4^179.64071856287424, +179.64071856287424: C5^179.64071856287424, +179.64071856287424: A4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: A4^179.64071856287424, +179.64071856287424: B4^179.64071856287424, +179.64071856287424: G4^179.64071856287424, +179.64071856287424: E4^179.64071856287424` +const playback = playTune(melody, Infinity) + +addText(" AD = move S = bombs", { + x: 0, + y: 1, + color: color`6` +}) +addText("Any button = bomb", { + x: 1, + y: 5, + color: color`6` +}) + +function fallBombs() { + const bombs = getAll(bomb) + + bombs.forEach(bomb => { + bomb.y += 1 + }) +} + +function moveEnemy() { + const enemySprite = getFirst(enemy); + + const direction = Math.random() < 0.5 ? -1 : 1; + const speed = Math.floor(Math.random() * 4) + 1; + + enemySprite.x += direction * speed; +} + +function moveWood3() { + const wood3Sprite = getFirst(wood3); + + if (wood3Sprite) { + const direction = Math.random() < 0.5 ? -1 : 1; + const speed = Math.floor(Math.random() * 4) + 1; + + wood3Sprite.x += direction * speed; + } +} + +function checkHit() { + let bombs = getAll(bomb); + let p = getFirst("e"); + + for (let i = 0; i < bombs.length; i++) { + if (bombs[i].x === p.x && bombs[i].y === p.y) { + return true; + } + } + + return false; +} + +function clearBombs() { + const bombs = getAll(bomb); + + bombs.forEach(bomb => { + bomb.remove(); + }); +} + + +const intervalTime = 250 +const intervalId = setInterval(fallBombs, intervalTime) +const enemyIntervalTime = 500; +const enemyIntervalId = setInterval(moveEnemy, enemyIntervalTime); +const woodIntervalTime = 500; +const woodIntervalId = setInterval(moveWood3, woodIntervalTime); +const bombIntervalTime = 7000; +const bombIntervalId = setInterval(clearBombs, bombIntervalTime); + + +onInput("d", () => { + getFirst(player).x += 1 +}) +onInput("a", () => { + getFirst(player).x -= 1 +}) +onInput("s", () => { + const playerSprite = getFirst(player) + addSprite(playerSprite.x, playerSprite.y, bomb) +}) +afterInput(() => { + if (checkHit()) { + const enemySprite = getFirst(enemy); + addSprite(enemySprite.x, enemySprite.y, explosion); + level++; + + if (level < levels.length) { + setMap(levels[level]); + } else { + playTune(winner); + clearText(); + addText("You Won!", { + x: 6, + y: 4, + color: color`6` + }); + } + } +}) + diff --git a/games/Bottom_of_the_Barrel.js b/games/Bottom_of_the_Barrel.js index dbc40da97d..5bf5d55ddd 100644 --- a/games/Bottom_of_the_Barrel.js +++ b/games/Bottom_of_the_Barrel.js @@ -1,8 +1,8 @@ /* @title: Bottom_of_the_Barrel -@tags: ['advanced', 'strategy'] -@addedOn: 2022-12-01 @author: Ozfolo +@tags: ['strategy'] +@addedOn: 2022-12-01 */ /* Controls: A and D for moving in game, WASD for navigating menus, J for select, diff --git a/games/BoxCubeGuy.js b/games/BoxCubeGuy.js index 4c93130911..14ca76f309 100644 --- a/games/BoxCubeGuy.js +++ b/games/BoxCubeGuy.js @@ -1,8 +1,8 @@ /* @title: BoxCubeGuy -@tags: ['sokoban-style'] -@addedOn: 2022-11-25 @author: CaptainATW +@tags: ['puzzle'] +@addedOn: 2022-11-25 */ var x = 0; diff --git a/games/BoxMaze.js b/games/BoxMaze.js index 703d6b9cad..b77155b85f 100644 --- a/games/BoxMaze.js +++ b/games/BoxMaze.js @@ -2,7 +2,7 @@ /* @title: BoxMaze @author: Kalo -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-11-13 */ diff --git a/games/Box_Guy.js b/games/Box_Guy.js index 2d4b0e21cd..b4574d4606 100644 --- a/games/Box_Guy.js +++ b/games/Box_Guy.js @@ -1,7 +1,7 @@ /* @title: Box Guy @author: jli46 -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-04-23 */ diff --git a/games/Box_Jump.js b/games/Box_Jump.js index 16fc417c59..da6bb51a70 100644 --- a/games/Box_Jump.js +++ b/games/Box_Jump.js @@ -1,8 +1,8 @@ /* @title: Box Jump -@tags: ['puzzle-score'] +@author: Elijah Schneider +@tags: ['puzzle'] @addedOn: 2022-12-19 -@author: Elijah Schneider Instructions: diff --git a/games/Boxxod.js b/games/Boxxod.js index 0433ec4661..8373a5bf24 100644 --- a/games/Boxxod.js +++ b/games/Boxxod.js @@ -1,8 +1,8 @@ /* @title: Boxxod -@tags: ['logic'] -@addedOn: 2023-10-20 @author: Kokonico +@tags: ['puzzle'] +@addedOn: 2023-10-20 a game about gravity and boxes. diff --git a/games/BrainTeaserMaze.js b/games/BrainTeaserMaze.js index fcf3ddca95..cf3942f6ec 100644 --- a/games/BrainTeaserMaze.js +++ b/games/BrainTeaserMaze.js @@ -1,8 +1,8 @@ /* @title: BrainTeaserMaze -@tags: ['sokoban-style'] -@addedOn: 2022-12-19 @author: Arhan +@tags: ['puzzle'] +@addedOn: 2022-12-19 Controls: diff --git a/games/BreadMaze.js b/games/BreadMaze.js index 3932d9f4ba..0515534508 100644 --- a/games/BreadMaze.js +++ b/games/BreadMaze.js @@ -1,8 +1,8 @@ /* @title: BreadMaze -@tags: ['sokoban-style'] -@addedOn: 2022-10-20 @author: Aiden +@tags: ['puzzle'] +@addedOn: 2022-10-20 */ const player = "p"; diff --git a/games/Breakout.js b/games/Breakout.js index bff591a1cb..d17ceee01a 100644 --- a/games/Breakout.js +++ b/games/Breakout.js @@ -1,8 +1,8 @@ /* @title: Breakout -@tags: ['classic'] -@addedOn: 2022-09-28 @author: Holly +@tags: ['retro'] +@addedOn: 2022-09-28 */ const playerL = "p"; diff --git a/games/Builder.js b/games/Builder.js index 0c68a2cbdb..93643f9c3d 100644 --- a/games/Builder.js +++ b/games/Builder.js @@ -1,8 +1,8 @@ /* @title: Builder +@author: Leonard (Omay) @tags: ['strategy'] @addedOn: 2022-11-06 -@author: Leonard (Omay) WAD to move S to reset diff --git a/games/Burger_Maker_V1.js b/games/Burger_Maker_V1.js index ad549b1f35..d295a49ea2 100644 --- a/games/Burger_Maker_V1.js +++ b/games/Burger_Maker_V1.js @@ -1,8 +1,8 @@ /* @title: Burger_Maker -@tags: ['thematic-puzzle'] -@addedOn: 2022-12-28 @author: Captain_AJ +@tags: ['puzzle'] +@addedOn: 2022-12-28 */ // Version: 1.2 diff --git a/games/CATCH-ME.js b/games/CATCH-ME.js index a5a3692f5a..e09adabff8 100644 --- a/games/CATCH-ME.js +++ b/games/CATCH-ME.js @@ -1,8 +1,8 @@ /* @title: CATCH ME! -@tags: ['catch'] -@addedOn: 2023-01-07 @author: Nidheesh +@tags: [] +@addedOn: 2023-01-07 */ const player = "p" diff --git a/games/Call_911.js b/games/Call_911.js index 60c89ab3c2..1640382c74 100644 --- a/games/Call_911.js +++ b/games/Call_911.js @@ -1,8 +1,8 @@ /* @title: Call 911 +@author: Rohit @tags: ['strategy'] @addedOn: 2022-10-18 -@author: Rohit */ //credits: Nathan Pease diff --git a/games/Camion_en _Mexico.js b/games/Camion_en _Mexico.js index 1791082ee2..7e22d66d55 100644 --- a/games/Camion_en _Mexico.js +++ b/games/Camion_en _Mexico.js @@ -1,7 +1,7 @@ /* @title: Camión en México @author: Cesar Garnica -@tags: ["levels", "maze"] +@tags: ['puzzle'] @addedOn: 2024-08-23 */ /*The goal is to reach the end with a minimum amount of money. To advance to the next level, diff --git a/games/Castle_Drop.js b/games/Castle_Drop.js index 80f3836713..2b62073123 100644 --- a/games/Castle_Drop.js +++ b/games/Castle_Drop.js @@ -1,9 +1,9 @@ /* @title: Castle_Drop @author: aISaidJak -@tags: ["dodge"] -@img: "" +@tags: ['action'] @addedOn: 2024-05-14 +@img: "" */ const player = "p" const window = "w" diff --git a/games/Cat_Cafe.js b/games/Cat_Cafe.js new file mode 100644 index 0000000000..8ee40a5436 --- /dev/null +++ b/games/Cat_Cafe.js @@ -0,0 +1,1023 @@ +/* +@title: Cat Cafe +@author: Nunu(greatplansahead) +@tags: ['puzzle'] +@addedOn: 2024-08-28 + +arcade project. +Controls: +player 1 +right:D +left: A +up: W +down: S + +Player 2 +right: L +left: J +up: I +down: K + +special thanks to Portia for the inspo <3 +*/ + + +let player = "p" +const player2 = "f" +const boba = "b" +const cup = "c" +const tea = "t" +const wall = "q" +const water = "h" +const mop = "k" +const door = "d" +const spriteKey = "o" +const fire = "y" +const ice = "i" +const sugar = "e" +const straw = "a" +const fragile = "g" +const broken = "j" +const enter = "l" +const outside = "m" +const changeLevel = "n" +const nature = "r" +const bubbletea = "s" + +setLegend( + [player, bitmap` +................ +................ +................ +....0....0...... +....000000...... +....0LLLL0...... +....0L0L00...... +....0L2020...... +....0L1210...... +....000000...... +................ +................ +................ +................ +................ +................`], + [player2, bitmap` +................ +................ +................ +....0....0...... +....000000...... +....0CCCC0...... +....0C1C10...... +....0C2020...... +....0CC2C0...... +....000000...... +................ +................ +................ +................ +................ +................`], + [boba, bitmap` +................ +................ +................ +......2222...... +.....220022..... +...2220000222... +...2C000000C2... +...2CC0000CC2... +...22CCCCCC22... +....22222222.... +................ +................ +................ +................ +................ +................`], + [cup, bitmap` +................ +................ +................ +................ +................ +......3..3...... +......3..3...... +......3..3...... +......3..3...... +......3..3...... +......3..3...... +......3333...... +................ +................ +................ +................`], + [tea, bitmap` +................ +................ +.....000000..... +....00444400.... +...0044444400... +...0104444010... +...0120000L10... +...012211L110... +...01121LL110... +...001LLL1100... +....01111110.... +....00111100.... +.....000000..... +................ +................ +................`], + [wall, bitmap` +0CC0CL0L10CC01L0 +0CC0L10LC0CC0LL0 +0C00C00C00C00L00 +1C0CC0CC0CC0CL0C +0C00C00C00C00C00 +0LC0LL0LL0LC0LC0 +0CC0CL0CL0CC0CL0 +0L00C00C00C00LL0 +1L0CL0CL0CC0CL0C +LC0LL00L00C00L00 +0C00CC01C0CC0CC0 +0CC0LC0LC0LC0CL0 +0C00100L00C00C00 +CC0CL0CL0CC0CL0C +0L00C00C00C00C00 +0CC0CC0CL0CC0CC0`], + [water, bitmap` +................ +.....000........ +....005500...... +...05555500.000. +...055555550050. +..0055555555550. +.05555555555570. +.00555555555710. +..0055555557100. +...05555555700.. +...0005555710... +.....05557100... +.....0557100.... +......00000..... +................ +................`], + [mop, bitmap` +................ +.......222...... +.......2C2...... +.......2C2...... +.......2C2...... +.......2C2...... +.......2C2...... +.......2C2...... +.......2C2222... +....2222CLLL22.. +....2LLLL111L22. +...22L1LLLL11L2. +...2L1LLL11L1L2. +...222L2L21L2L2. +.....2222222222. +................`], + [door, bitmap` +................ +................ +................ +....0000000..... +....0CCCCC0..... +....0C6C6C0..... +....0CCCCC0..... +....0C6C6C0..... +....0C0CCC0..... +....0C6C6C0..... +....0CCCCC0..... +....0C6C6C0..... +....0000000..... +................ +................ +................`], + [spriteKey, bitmap` +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH +HHHHHHHHHHHHHHHH`], + [fire, bitmap` +........00...... +.....0..000.00.. +...000.0020.020. +...020.03200020. +..0022003900320. +..0332003903290. +..0399003993390. +.00399333933990. +.03393339333990. +.00393399399990. +..0399993399900. +..099999999990.. +..009999999990.. +...00099009000.. +.....000000..... +................`], + [ice, bitmap` +................ +................ +................ +......0000...... +.....022550..... +.....057750..... +.....057570..... +...0000550000... +..052250022550.. +..077750057750.. +..057550055570.. +..055770055770.. +...0000..0000... +................ +................ +................`], + [sugar, bitmap` +................ +00...000000..... +0...00222200.... +00..02222220.000 +.0..03222220.0.0 +00..03333030.000 +....00300300.0.0 +0.0.03033330.... +0.0.05555550.00. +000.05555550.0.0 +....02222220.00. +000.02222220.0.0 +0...00000000.0.0 +0.0............. +000............. +................`], + [straw, bitmap` +................ +...000.......... +...0300......... +...02200........ +...003300....... +....002200...... +.....00330...... +......0020...... +.......030...... +.......020...... +.......030...... +.......020...... +.......030...... +.......020...... +.......030...... +.......000......`], + [fragile, bitmap` +6666111116666666 +6161166661666166 +6661666661666166 +6666666661116166 +6116616666666616 +6166661166666616 +6666166616666616 +6111666611666666 +11HHHHHHHH1HH1HH +H1HHHHHHHH1HH1HH +H1HH111HHHH1H1HH +HHHHHHH11HH1H11H +HHH11111H1HHHH1H +H1HHHHH1HHHHHH1H +HHHHHHHHHHHHHH1H +HHHHHHHHHHHHHHHH`], + [broken, bitmap` +6666666666666666 +6666111111116666 +6661111111111666 +6611111111111166 +6111111111111116 +6111111111111116 +6111111111111116 +6111111111111116 +H11111111111111H +H11111111111111H +H11111111111111H +H11111111111111H +HH111111111111HH +HHH1111111111HHH +HHHH11111111HHHH +HHHHHHHHHHHHHHHH`], + [enter, bitmap` +................ +....33333333.... +...3333333333... +..333333333333.. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +..333333333333.. +...3333333333... +....33333333.... +................`], + [outside, bitmap` +................ +....55555555.... +...5555555555... +..555555555555.. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +..555555555555.. +...5555555555... +....55555555.... +................`], + [nature, bitmap` +44D44433344D44DD +4444D4363DD4444D +D44444333447774D +D44DD44D44476744 +D488844DDD477744 +D4868444DD4D444D +448884D44DD44D4D +44DD44D444D444DD +444DD4433344D44D +4D4444D3634DDD44 +4D4444D333D4HHH4 +4DDHHH44D44DH6HD +DDDH6HDDD444HHHD +D44HHH4DDD44444D +DD444444444444DD +DDDD44444DDD4DDD`], + [bubbletea, bitmap` +.....3.......... +......2......... +......32........ +.......3255..... +.....3553573.... +.....3572443.... +.....3443443.... +.....3442443.... +.....3443443.... +.....3444443.... +.....3400403.... +.....3004043.... +.....3333333.... +................ +................ +................`], +) + +setBackground(spriteKey); +setSolids([player, player2, water, wall]); + + +let level = 0 +const levels = [ + map` +rrrrrrrrrrr +rrrrrrrrrrr +poooooooood +rrrrrrrrrrr +rrrrrrrrrrr +rrrrrrrrrrr`, + map` +pqqqqqqqqq +.qqqqqqqqq +.......qqq +qqqqqq.qqq +qqqqqq...q +qqqqqqqq.. +qqqqqqqqqd`, + map` +qqqqqqqqqq +qqqqqqqqqq +p.qqq....c +q.qqq.qqqq +q.....qqqq +qqqqqqqqqq +qqqqqqqqqq`, + map` +qqqqqqqqqq +qqqqqqqqqq +p.q....qqb +q.q.qq.qq. +q.q.qq.qq. +q...qq.... +qqqqqqqqqq`, + map` +qqqqqqqqqq +qqqqqqqqqq +p........e +qqqqqqqqqq +qqqqqqqqqq +qqqqqqqqqq`, + map` +qqqqqqqqqq +qqqqqqqqqq +qqqqqqqq.t +qqq......q +q...qqqqqq +p.qqqqqqqq`, + map` +qqqqqqqqqq +qqqqqqqqqq +pyyym....i +.lyyyqqqqq +qqqqqqqqqq +qqqqqqqqqq`, /* level 6 that includes portal*/ + map` +qqaq......kq +qqhq.qqqqqqq +p..q.qqqaqqq +qq.q.qqq.qqq +qq.........f +qqqqqqqqqqqq +qqqqqqqqqqqq +qqqqqqqqqqqq +qqqqqqqqqqqq +qqqqqqqqqqqq`, + map` +qqqqqqqqqqqq +gggggggggqqq +gpqqgqqqgydg +ggqqgggyqqqg +qggqqqqgqygg +qqgggggggggq +qqqqqqqqqqqq +qqqqqqqqqqqq +qqqqqqqqqqqq +qqqqqqqqqqqq`, + map` +qqqqqqqq +qqqqqqqq +p......d +qqqqqqqq +qqqqqqqq +qqqqqqqq`, + map` +pq.c +.q.q +.q.q +.q.q +...q`, + map` +pqyq.....q.q +.qyqqq.q.q.q +.q.....q.q.q +.q..qqq....q +.q.qb.q.qq.q +.q..q.q..qqq +.q.q..qq..qq +.q.qq.q...qq +...q....qqqq`, + map` +pqkqm....q. +.q.qqq.q.q. +.q.....q.q. +.q..qqq.... +lq.qt.qhqq. +.q..q.q..qq +.q.q..qq..q +...qq.....q`, + map` +qqqqq.......q +qgggggq..q.q. +qkqqqgqq.q.q. +qggggpq..q.q. +q..yqqq.q.... +qqq....q.q... +q.qq.qqq...q. +...qgq...qqq. +.qqq.q.qqeq.. +.q....q.q.q.. +...qq.....h..`, + map` +pq.yymyqq. +.q.qq.qyy. +.q..q..... +.qqqq.qqq. +.y....qiq. +.qqqqqq.h. +...q...yq. +qqlg..qqq. +yq.q.yq... +...qqqqqqk`, + map` +pq.....q +.qq..q.. +..qq..qa +q..qq..q +aq..qq.. +..q..qq. +q..q..q. +.q....qf`, + map` +pq.....q.. +.q.....q.. +.q.....q.t +.q.....q.. +.q.....q.. +.q.....g.. +.q.....q.. +.q....mq.. +lq.....q.. +.q.....q..`, + map` +pq.gl..... +.qq.....q. +..q.q.q.q. +q...q.q.q. +qqqgqq..qg +.eqqqmq.g. +qh..ggqq.. +q.qqg.kq.. +...qqyqq.g +......y.g.`, + map` +l.g..kq.q.m +..qq..q.q.. +...qq.q..h. +...yggg..qq +.qqqgpg..qs +.q.ygggqqq. +.q.yyyy.qq. +.qqqqqqqqq. +...........`, +] + +setMap(levels[level]) + +for (let y = 0; y < levels[6].length; y++) { + for (let x = 0; x < levels[6][y].length; x++) { + if (levels[6][y][x] === 'm') { + outside.x = x; + outside.y = y; + break; + } + } +} + +setPushables({ + [player]: [], + [player2]: [] +}) +/* music*/ +const traptune = tune` +187.5: D5~187.5, +187.5: B4~187.5, +187.5: D5~187.5, +187.5: B4~187.5, +187.5: C5~187.5, +187.5: C5~187.5, +187.5: C5~187.5, +4687.5`; +const starttune = tune` +200: G5^200, +200: D5^200, +200: G5^200, +200: D5^200, +200: G5^200, +200: E5^200, +200: G5^200, +200: A5^200, +200: B5^200, +200, +200: B5^200, +200: F5^200, +200: B5^200, +200: F5^200, +200: B5^200, +200: F5^200, +200: B5^200, +200: G5^200, +200: E5^200, +200: D5^200, +200: G4^200, +200, +200: B4^200, +200: B4^200, +200: D5^200, +200: D5^200, +200: E5^200, +200: D5^200, +200: D5^200, +200: B4^200, +200: B4^200, +200: G4^200`; +const boom = tune` +500: F5^500 + E5^500 + D5^500 + C5^500 + B4^500, +15500`; +const fragiletune = tune` +85.71428571428571: C5-85.71428571428571, +85.71428571428571: D5-85.71428571428571, +85.71428571428571: G5-85.71428571428571 + E5-85.71428571428571, +85.71428571428571: C5-85.71428571428571 + E5-85.71428571428571, +85.71428571428571: A4-85.71428571428571, +2314.285714285714`; + +/*text*/ + + + + +onInput("s", () => { + getFirst(player).y += 1 +}) + +onInput("w", () => { + getFirst(player).y -= 1 +}) + +onInput("d", () => { + getFirst(player).x += 1 +}) + +onInput("a", () => { + getFirst(player).x -= 1 +}) + +/* Player 2 */ + +onInput("k", () => { + getFirst(player2).y += 1 +}) + +onInput("i", () => { + getFirst(player2).y -= 1 +}) + +onInput("l", () => { + getFirst(player2).x += 1 +}) + +onInput("j", () => { + getFirst(player2).x -= 1 +}) + +let previousX = getFirst(player).x +let previousY = getFirst(player).y + +/* const outx = getFirst(outside).x; + const outy = getFirst(outside).y; */ +let catx = getFirst(player).x; +let caty = getFirst(player).y; + +let outx; +let outy; + +let entx; +let enty; + +const playback = playTune(starttune, Infinity); +let boomPlayed = false; + +afterInput(() => { + + const numberOfGoalsCoveredCup = tilesWith(player, cup); + const numberOfGoalsCoveredBoba = tilesWith(player, boba); + const numberOfGoalsCoveredSugar = tilesWith(player, sugar); + const numberOfGoalsCoveredStraw = tilesWith(player, straw).concat(tilesWith(player2, straw)); + const numberOfGoalsCoveredIce = tilesWith(player, ice); + const numberOfGoalsCoveredTea = tilesWith(player, tea); + const numberOfGoalsCoveredBubbleTea = tilesWith(player, bubbletea); + const movekey = tilesWith(player, mop); + const trapandplayer = tilesWith(player, fire); + const brokenCovered = tilesWith(player, broken); + const enterCovered = tilesWith(player, enter); + const outsideCovered = tilesWith(player, outside); + const doorCovered = tilesWith(player, door); + + if (numberOfGoalsCoveredCup.length >= 1) { + level = level + 1; + + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`0` + }) + } + } + + if (numberOfGoalsCoveredBoba.length >= 1) { + level = level + 1; + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`0` + }) + } + } + + if (numberOfGoalsCoveredSugar.length >= 1) { + level = level + 1; + + if (level < levels.length >= 1) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`0` + }) + } + } + + if (numberOfGoalsCoveredIce.length >= 1) { + level = level + 1; + + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`0` + }) + } + } + + if (numberOfGoalsCoveredStraw.length >= 2) { + level = level + 1; + + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`0` + }) + } + } + + if (numberOfGoalsCoveredTea.length >= 1) { + level = level + 1; + + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`0` + }) + } + } + + if (numberOfGoalsCoveredBubbleTea.length >= 1) { + level = level + 1; + + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`7` + }) + } + } + + if (doorCovered.length >= 1) { + level = level + 1; + clearText(); + + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You've just made\na cup of bubble\ntea!", { + x: 3, + y: 4, + color: color`0` + }) + } + } + + + /*story narration*/ + + + if (level === 0) { + + clearText(); + addText("Welcome to\nthe Cat Cafe!", { + x: 3, + y: 4, + color: color`2`, + }); + addText("Move to the door", { + x: 3, + y: 8, + color: color`2`, + }); + } + + if (level === 1) { + clearText(); + addText("My name is Marv\n and I need help\nfulfilling orders", { + x: 3, + y: 1, + color: color`2`, + }); + + addText("Help me\ncollect:\n*boba\n*ice\n*sugar\n*tea", { + x: 1, + y: 8, + color: color`2`, + }); + + + } + + if (level === 2) { + clearText(); + addText(" This is a cup.\n\n\n\n\n\n\n\n\n\n reusable ofc!", { + x: 1, + y: 2, + color: color`2`, + }); + } + + if (level === 3) { + clearText(); + addText("This is boba.\nMarv loves it!", { + x: 2, + y: 2, + color: color`2`, + }); + } + + if (level === 4) { + clearText(); + addText("This sugar. Some \ncustomers want more\n so be prepared to\n\n\n\n\n\n collect more bags!", { + x: 1, + y: 2, + color: color`2`, + }); + } + + if (level === 5) { + clearText(); + addText("This is fruit tea. \nBut Marv's favorite\ntea is peach tea.", { + x: 1, + y: 3, + color: color`2`, + }); + } + + if (level === 6) { + clearText(); + addText("Be careful of fire!\nDodge it by entering\nthe two-way portal\n\n\n\n\n\n\n After, collect the\n ice.", { + x: 0, + y: 2, + color: color`2`, + }); + } + + if (level === 7) { + clearText(); + addText("Marv's friend May \nsometimes helps\ncollecting straws. They\nboth hate water!\n but Marv is brave\n(hint hint)", { + x: 1, + y: 9, + color: color`2`, + }); + } + + if (level === 9) { + clearText(); + addText("You've got an order\n\n\n\n\n\n\n Let's go complete\n it!", { + x: 1, + y: 2, + color: color`2`, + }); + } + + if (level === 8) { + clearText(); + addText("Beware of fragile\n tiles!", { + x: 2, + y: 11, + color: color`2`, + }); + } + + + if (level === 10) { + playback.end(starttune); + if (!boomPlayed && level === 10) { + playTune(boom); + boomPlayed = true; + } + } + + + /* mop and water*/ + + if (movekey.length >= 1) { + getFirst(mop).remove() + getFirst(water).remove() + } + + /*fire*/ + const sprite = getTile(previousX, previousY)[0]; + if (trapandplayer.length > 0) { + playTune(boom); + setMap(levels[level]); + if (sprite && sprite.type === broken) { + sprite.type = fragile; + } + } + + /* fragile tiles */ + + if (sprite && sprite.type === fragile) { + sprite.type = broken; + playTune(fragiletune); + } + + if (brokenCovered.length >= 1) { + clearText(); + setMap(levels[0]), + level = 0; /*sets level to 0*/ + playback.end(starttune); + playTune(traptune); + if (level === 0) { + playTune(starttune, Inifity); + } + } + + previousX = getFirst(player).x; + previousY = getFirst(player).y; + + + /* portals */ + + + if (enterCovered.length >= 1) { + + let cat = getFirst(player); + let outx = getFirst(outside).x; + let outy = getFirst(outside).y; + + cat.x = outx; + cat.y = outy; + + player.x = cat.x; + player.y = cat.y; + + console.log(outx); + console.log(outy); + console.log(player.x); + console.log(player.y); + console.log(getFirst(player).x); + console.log(cat.x); + console.log(cat.y); + console.log("cat on enter"); + } + + + if (outsideCovered.length >= 1) { + entx = getFirst(enter).x; + enty = getFirst(enter).y; + let cat = getFirst(player); + + if (enter) { + console.log(entx); + console.log(enty); + + } + + cat.x = entx; + cat.y = enty; + console.log("cat on oustide") + } + + +}) + diff --git a/games/Catch-the-apples.js b/games/Catch-the-apples.js index 4a6f6fe40f..c6e07c0033 100644 --- a/games/Catch-the-apples.js +++ b/games/Catch-the-apples.js @@ -1,10 +1,10 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started @title: Catch the apples @author: Jack -@tags: ['endless', 'catch'] +@tags: ['endless'] @addedOn: 2024-01-13 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started Instructions: Catch as many apples as you can and avoid the bugs. Each apple caught will increase the score by 1, diff --git a/games/CatchIt.js b/games/CatchIt.js index 83861dcff6..5aa45e8d86 100644 --- a/games/CatchIt.js +++ b/games/CatchIt.js @@ -1,8 +1,8 @@ /* @title: CatchIt +@author: Shrey Mehra @tags: [] @addedOn: 2023-03-14 -@author: Shrey Mehra Creds:- A_Really_One_Sided_Duel by Saatwik Das (The working was similar so I copied algorithms) diff --git a/games/Catch_the_Acorn.js b/games/Catch_the_Acorn.js index b8e69abc6e..e90e477af1 100644 --- a/games/Catch_the_Acorn.js +++ b/games/Catch_the_Acorn.js @@ -2,8 +2,8 @@ @title: Catch_the_Acorn @author: Anna @tags: [] -@img: "" @addedOn: 2024-05-14 +@img: "" */ const player = "p"; diff --git a/games/Catch_the_Egg.js b/games/Catch_the_Egg.js index 623ec6d348..f00808fe57 100644 --- a/games/Catch_the_Egg.js +++ b/games/Catch_the_Egg.js @@ -1,7 +1,7 @@ /* @title: Catch_the_Egg @author: Jonak-Adipta-Kalita -@tags: ["catch"] +@tags: [] @addedOn: 2024-04-18 */ diff --git a/games/Cave-Quest.js b/games/Cave-Quest.js index f1cec96879..ca53b629d5 100644 --- a/games/Cave-Quest.js +++ b/games/Cave-Quest.js @@ -1,8 +1,8 @@ /* @title: Cave-Quest -@tags: ['energy-control'] -@addedOn: 2023-02-18 @author: OHIO-MAN +@tags: ['puzzle'] +@addedOn: 2023-02-18 */ /* Explore caves, watch out for traps, solve puzzles. diff --git a/games/CaveEscape.js b/games/CaveEscape.js index caf8588a9c..a76203b98b 100644 --- a/games/CaveEscape.js +++ b/games/CaveEscape.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: CaveEscape @author: Michael Taylor @tags: [] @addedOn: 2024-02-16 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + use WASD to move the cursor and J to select and use an action, the enemy will automatically deal damage to you after every action you take */ diff --git a/games/CaveGame.js b/games/CaveGame.js index 1aaba954c9..c84d0da22e 100644 --- a/games/CaveGame.js +++ b/games/CaveGame.js @@ -1,7 +1,7 @@ /* @title: CaveGame @author: AlexL -@tags: ['dungeon'] +@tags: ['adventure'] @addedOn: 2024-01-22 CONTROLS diff --git a/games/ChaseEscape.js b/games/ChaseEscape.js index b0ef29eb01..71452a2b9c 100644 --- a/games/ChaseEscape.js +++ b/games/ChaseEscape.js @@ -1,7 +1,7 @@ /* @title: Chase Escape @author: Edward Hsing -@tags: ["dodge"] +@tags: ['action'] @addedOn: 2024-04-15 */ const player = "p"; diff --git a/games/CheckerInvasion.js b/games/CheckerInvasion.js index ffcf0b9302..91103f8ffc 100644 --- a/games/CheckerInvasion.js +++ b/games/CheckerInvasion.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Checker Invasion @author: Stefan Lighezan @tags: ['endless'] @addedOn: 2024-07-24 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const redChecker = "r" diff --git a/games/Cheese-Hunt.js b/games/Cheese-Hunt.js index d885d7ae43..da3103046e 100644 --- a/games/Cheese-Hunt.js +++ b/games/Cheese-Hunt.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Cheese-Hunt @author: Sophia E -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-04-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/Cheese_Collector.js b/games/Cheese_Collector.js new file mode 100644 index 0000000000..5b7f8d40c2 --- /dev/null +++ b/games/Cheese_Collector.js @@ -0,0 +1,1023 @@ +/* +@title: Cheese Collector +@author: Sonya +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const leftPlayer = "p"; +const rightPlayer = "d" +const leftWhiteCat = "w"; +const rightWhiteCat = "a"; +const leftOrangeCat = "o"; +const rightOrangeCat = "q"; +const leftBlackCat = "u"; +const rightBlackCat = "t" +const leftCalicoCat = "i"; +const rightCalicoCat = "g"; + +const cheese = "c"; +const safe = "s"; +const key = "k"; +const home = "h"; + +const redSafe = "r"; +const blueSafe = "n"; +const redKey = "l"; +const blueKey = "y"; + +const milk = "m"; +const emptyBowl = "e"; +const fullBowl = "f"; + +const floor = "z"; + + +setLegend( + [leftPlayer, bitmap` +................ +................ +................ +..LL....LL...... +.L88LLLL88L..... +.L8L1111L8L..... +..L011101L...... +..L181111L...... +..L1111111L..... +...L111L11L..... +..L111L111L..... +..L1L1L1L1L..... +...L111L11L..... +...L111111L..... +...L111111L88... +...88LL88L..8888`], + [rightPlayer, bitmap` +................ +................ +................ +......LL....LL.. +.....L88LLLL88L. +.....L8L1111L8L. +......L101110L.. +......L111181L.. +.....L1111111L.. +.....L11L111L... +.....L111L111L.. +.....L1L1L1L1L.. +.....L11L111L... +.....L111111L... +...88L111111L... +8888..L88LL88...`], + [leftWhiteCat, bitmap` +................ +................ +................ +.00.....00...... +.010...010...... +.011000110...... +02111112210..00. +01111111220..010 +01711171220..010 +02111112220.0110 +.02222222000110. +..033633322110.. +..02222222220... +..02222222220... +..01010001010... +...0.0...0.0....`], + [rightWhiteCat, bitmap` +................ +................ +................ +......00.....00. +......010...010. +......011000110. +.00..01221111120 +010..02211111110 +010..02217111710 +0110.02221111120 +.01100022222220. +..011223336330.. +...02222222220.. +...02222222220.. +...01010001010.. +....0.0...0.0...`], + [leftOrangeCat, bitmap` +................ +................ +................ +.00.....00...... +.090...0C0...... +.099000CC0...... +09999999CC0..00. +09999999990..090 +0C9099099C0..0C0 +099099099C0.C990 +.C99999990009C0. +..000000099990.. +..09999999990... +..0999CCC9990... +..09090009090... +...0.0...0.0....`], + [rightOrangeCat, bitmap` +................ +................ +................ +......00.....00. +......0C0...090. +......0CC000990. +.00..0CC99999990 +090..09999999990 +0C0..0C9909909C0 +099C.0C990990990 +.0C90009999999C. +..099990000000.. +...09999999990.. +...0999CCC9990.. +...09090009090.. +....0.0...0.0...`], + [leftBlackCat, bitmap` +................ +................ +................ +.00.....00...... +.0L0...0L0...... +.0LL000LL0...... +0LLLLLLLLL0..00. +0LLLLLLLLL0..0L0 +0L6LLL6LLL0..0L0 +0LLLLLLLLL0.0LL0 +.0LLLLLLL000LL0. +..00000000LLL0.. +..0LLLLLLLLL0... +..0LLLLLLLLL0... +..0L0L000L0L0... +...0.0...0.0....`], + [rightBlackCat, bitmap` +................ +................ +................ +......00.....00. +......0L0...0L0. +......0LL000LL0. +.00..0LLLLLLLLL0 +0L0..0LLLLLLLLL0 +0L0..0LLL6LLL6L0 +0LL0.0LLLLLLLLL0 +.0LL000LLLLLLL0. +..0LLL00000000.. +...0LLLLLLLLL0.. +...0LLLLLLLLL0.. +...0L0L000L0L0.. +....0.0...0.0...`], + [leftCalicoCat, bitmap` +................ +................ +................ +.00.....00...... +.010...090...... +.011000990...... +01112299990..00. +01122229990..020 +02722272220..090 +02222222220.0290 +.02222222000220. +..000000021110.. +..02299922210... +..02222222220... +..02020002020... +...0.0...0.0....`], + [rightCalicoCat, bitmap` +................ +................ +................ +......00.....00. +......090...010. +......099000110. +.00..09999221110 +020..09992222110 +090..02227222720 +0920.02222222220 +.02200022222220. +..011120000000.. +...01222999220.. +...02222222220.. +...02020002020.. +....0.0...0.0...`], + [cheese, bitmap` +................ +..........CC.... +........CC66C... +......CC6FF66C.. +....CC666FF666C. +..CC6666666666CC +.C66F666CCCCCC6C +CCCCCCCC6666666C +C6666666666FF66C +.C666666666FF66C +..C66FF66666666C +.C666FF6666666C. +C6666666666CCC.. +C6F66666CCC..... +.C666CCC........ +..CCC...........`], + [safe, bitmap` +..000000000000.. +.01111111111110. +0LLLLLLLLLLLLL10 +0LLL00000000LL10 +0LL0LLLLLLLL0L10 +0LL1LLLLLLLL0L10 +0LL1LLLLL11L0L10 +0LL0LLLL1L010L10 +0LL0LLLL1L010L10 +0LL1LLLLL11L0L10 +0LL1LLLLLLLL0L10 +0LL0LLLLLLLL0L10 +0LLL00000000LL10 +0LLLLLLLLLLLLL10 +.0LLLLLLLLLLLL0. +..000000000000..`], + [key, bitmap` +................ +................ +................ +................ +..FFF........... +.F666F.......... +F6F.F6FFFFFFFFF. +F6...6666666666F +F6F.F6FFFFF66F6F +.F666F.....FF.F. +..FFF........... +................ +................ +................ +................ +................`], + [home, bitmap` +................ +................ +................ +.....000000..... +...00C1CC1C00... +...01C1CC1C10... +...01C1CC1C1C0.. +..001C1CC1C1C0.. +..0C1C1CC1C1C0.. +..0C1C1CC166C0.. +..0C1C1CC166C0.. +..0C1C1CC1C1C0.. +..0C1C1CC1C1C0.. +..0C1C1CC1C1C0.. +..0C1C1CC1C1C0.. +...0000000000...`], + [redSafe, bitmap` +..000000000000.. +.03333333333330. +0333333333333330 +0333000000003330 +0330333333330330 +0331333333330330 +0331333331130330 +033033331L010330 +033033331L010330 +0331333331130330 +0331333333330330 +0330333333330330 +0333000000003330 +0333333333333330 +.03333333333330. +..000000000000..`], + [blueSafe, bitmap` +..000000000000.. +.07777777777770. +0777777777777770 +0777000000007770 +0770777777770770 +0771777777770770 +0771777771170770 +077077771L010770 +077077771L010770 +0771777771170770 +0771777777770770 +0770777777770770 +0777000000007770 +0777777777777770 +.07777777777770. +..000000000000..`], + [redKey, bitmap` +................ +................ +................ +................ +..000........... +.03330.......... +030.03000000000. +03...33333333330 +030.030000033030 +.03330.....00.0. +..000........... +................ +................ +................ +................ +................`], + [blueKey, bitmap` +................ +................ +................ +................ +..000........... +.07770.......... +070.07000000000. +07...77777777770 +070.070000077070 +.07770.....00.0. +..000........... +................ +................ +................ +................ +................`], + [milk, bitmap` +................ +.....000000..... +....05757570.... +....05757570.... +.....011110..... +....01111110.... +....02222220.... +...0222222220... +...0227222720... +...0227727720... +...0227272720... +...0227222720... +...0227222720... +...0222222220... +....02222220.... +.....000000.....`], + [emptyBowl, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +.....888888..... +...8811111188... +..811111111118.. +..888111111888.. +..888888888888.. +.88888888888888. +.88888888888888. +8888888888888888`], + [fullBowl, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +.....888888..... +...8822222288... +..822222222228.. +..888222222888.. +..888888888888.. +.88888888888888. +.88888888888888. +8888888888888888`], + [floor, bitmap` +CCCCCCCCCCCCCCCC +C999999CC999999C +CCCCCCCCCCCCCCCC +C9999C9999C9999C +CCCCCCCCCCCCCCCC +C999999CC999999C +CCCCCCCCCCCCCCCC +C9999C9999C9999C +CCCCCCCCCCCCCCCC +C999999CC999999C +CCCCCCCCCCCCCCCC +C9999C9999C9999C +CCCCCCCCCCCCCCCC +C999999CC999999C +CCCCCCCCCCCCCCCC +C9999C9999C9999C`], +); + +setSolids([leftPlayer, rightPlayer, cheese]); + +let level = 0; +const levels = [ + map` +..... +...c. +...w. +..... +hd...`, + map` +.....h +...... +.k.... +...... +....ws +d.....`, + map` +tkq..e +.g.... +...s.. +...w.. +...... +d.h..m`, + map` +lw.d..ty +........ +........ +........ +...i.... +.n.hh.r.`, + map` +k...d...k +t.......w +....q.... +...h.h... +....i..o. +.cg....s. +.........` +] + +setMap(levels[level]); + +setBackground(floor); + +setPushables({ + [leftPlayer] : [cheese], + [rightPlayer] : [cheese] +}); + +// player movement +var player = rightPlayer; + +// move up +onInput("w", () => { + getFirst(player).y -= 1; +}); + +// move down +onInput("s", () => { + getFirst(player).y += 1; +}); + +// move left +onInput("a", () => { + const x = getFirst(player).x; + const y = getFirst(player).y; + if (player == leftPlayer) { + getFirst(player).x -= 1; + } else if (x > 0 && getTile(x - 1, y).length == 0) { + getFirst(player).remove(); + player = leftPlayer; + addSprite(x - 1, y, player); + } else { + getFirst(player).remove(); + player = leftPlayer; + addSprite(x, y, player); + } +}); + +// move right +onInput("d", () => { + const x = getFirst(player).x; + const y = getFirst(player).y; + if (player == rightPlayer) { + getFirst(player).x += 1; + } else if (x < width() - 1 && getTile(x + 1, y).length == 0) { + getFirst(player).remove(); + player = rightPlayer; + addSprite(x + 1, y, player); + } else { + getFirst(player).remove(); + player = rightPlayer; + addSprite(x, y, player); + } +}); + +// when the player presses "l", it will unlock the safe or fill the milk, depending on the situation +onInput("l", () => { + if (level == 1) { + unlockSafe(); + } else if (level == 2) { + unlockSafe(); + attractCat(); + } else if (level == 3) { + unlockRedSafe(); + unlockBlueSafe(); + } else { + unlockSafe(); + } +}); + +// restart +onInput("j", () => { + restart(); +}); + +// cat animation +// level 1 +function catMovement1() { + const cat = getFirst(leftWhiteCat); + const horizontalInterval = setInterval(() => { + if (cat.x > 0) { + cat.x--; + checkDeath(); + } else { + cat.x = width() - 1; + checkDeath(); + } + }, 500); +} + +// level 2 +function catMovement2() { + const cat = getFirst(leftWhiteCat); + const verticalInterval = setInterval(() => { + if (cat.y > 0) { + cat.y--; + checkDeath(); + } else { + cat.y = height() - 1; + checkDeath(); + } + }, 350); +} + +// level 3 +function catMovement3() { + const cat = getFirst(leftWhiteCat); + + let step = 0; + + const moveInterval = setInterval(() => { + switch (step) { + case 0: + cat.x--; + if (cat.x <= 2) { + step = 1; + } + break; // loop + case 1: + cat.y--; + if (cat.y <= 1) { + step = 2; + } + break; + case 2: + cat.x++; + if (cat.x >= 4) { + step = 3; + } + break; + case 3: + cat.y++; + if (cat.y >= 3) { + step = 0; + } + break; + } + checkDeath(); // after every case + }, 600); +} + +// level 4 +function whiteCatMovement4() { + const cat = getFirst(leftWhiteCat); + const verticalInterval = setInterval(() => { + if (cat.y < height() - 2) { + cat.y++; + checkDeath(); + } else { + cat.y = 0; + checkDeath(); + } + }, 400); +} + +function blackCatMovement4() { + const cat = getFirst(rightBlackCat); + const verticalInterval = setInterval(() => { + if (cat.y < height() - 2) { + cat.y++; + checkDeath(); + } else { + cat.y = 0; + checkDeath(); + } + }, 400); +} + +function calicoCatMovement4() { + const cat = getFirst(leftCalicoCat); + const horizontalInterval = setInterval(() => { + if (cat.x > 0) { + cat.x--; + checkDeath(); + } else { + cat.x = width() - 1; + checkDeath(); + } + }, 350); +} + + +// level 5 +function blackCatMovement5() { + const cat = getFirst(rightBlackCat); + const horizontalInterval = setInterval(() => { + if (cat.x < width() - 1) { + cat.x++; + checkDeath(); + } else { + cat.x = 0; + checkDeath(); + } + }, 400); +} + +function whiteCatMovement5() { + const cat = getFirst(leftWhiteCat); + const horizontalInterval = setInterval(() => { + if (cat.x > 0) { + cat.x--; + checkDeath(); + } else { + cat.x = width() - 1; + checkDeath(); + } + }, 400); +} + +function doorOrangeCatMovement5() { + const cat = getFirst(rightOrangeCat); + let step = 0; + + const movementInterval = setInterval(() => { + switch (step) { + case 0: + cat.x++; + if (cat.x >= 6) { + step = 1; + } + break; + case 1: + cat.y++; + if (cat.y >= 4) { + step = 2; + } + break; + case 2: + cat.x--; + if (cat.x <= 2) { + step = 3; + } + break; + case 3: + cat.y--; + if (cat.y <= 2) { + step = 0; + } + break; + } + checkDeath(); + }, 350); + +} + +function safeOrangeCatMovement5() { + const cat = getFirst(leftOrangeCat); + const verticalInterval = setInterval(() => { + if (cat.y > 0) { + cat.y--; + checkDeath(); + } else { + cat.y = height() - 1; + checkDeath(); + } + }, 400); +} + +function doorCalicoCatMovement5() { + const cat = getFirst(leftCalicoCat); + const horizontalInterval = setInterval(() => { + if (cat.x > 0) { + cat.x--; + checkDeath(); + } else { + cat.x = width() - 1; + checkDeath(); + } + }, 450); + +} + +function cheeseCalicoCatMovement5() { + const cat = getFirst(rightCalicoCat); + const verticalInterval = setInterval(() => { + if (cat.y > 0) { + cat.y--; + checkDeath(); + } else { + cat.y = height() - 1; + checkDeath(); + } + }, 300); +} + +// start with level 1 +if (level == 0) { + catMovement1(); +} + + +// restart the level +function restart() { + player = rightPlayer; + const currentLevel = levels[level]; // get the original map of the level + + // make sure the level exists before we load it + if (currentLevel !== undefined) { + clearText(""); + setMap(currentLevel); + } + catLevelMovement(); +} + +// if the player collides with the cat, the level restarts +function checkDeath() { + // white cat + if (getFirst(leftWhiteCat)) { + const whiteCats = getAll(leftWhiteCat); + whiteCats.forEach(function (whiteCat) { + if (getFirst(player) && getFirst(player).x == whiteCat.x && getFirst(player).y == whiteCat.y) { + restart(); + } + }); + } + + if (getFirst(rightWhiteCat)) { + const whiteCats = getAll(rightWhiteCat); + whiteCats.forEach(function (whiteCat) { + if (getFirst(player) && getFirst(player).x == whiteCat.x && getFirst(player).y == whiteCat.y) { + restart(); + } + }); + } + + // orange cat + if (getFirst(leftOrangeCat)) { + const orangeCats = getAll(leftOrangeCat); + orangeCats.forEach(function (orangeCat) { + if (getFirst(player) && getFirst(player).x == orangeCat.x && getFirst(player).y == orangeCat.y) { + restart(); + } + }); + } + + if (getFirst(rightOrangeCat)) { + const orangeCats = getAll(rightOrangeCat); + orangeCats.forEach(function (orangeCat) { + if (getFirst(player) && getFirst(player).x == orangeCat.x && getFirst(player).y == orangeCat.y) { + restart(); + } + }); + } + + // black cat + if (getFirst(leftBlackCat)) { + const blackCats = getAll(leftBlackCat); + blackCats.forEach(function (blackCat) { + if (getFirst(player) && getFirst(player).x == blackCat.x && getFirst(player).y == blackCat.y) { + restart(); + } + }); + } + + if (getFirst(rightBlackCat)) { + const blackCats = getAll(rightBlackCat); + blackCats.forEach(function (blackCat) { + if (getFirst(player) && getFirst(player).x == blackCat.x && getFirst(player).y == blackCat.y) { + restart(); + } + }); + } + + + // calico cat + if (getFirst(leftCalicoCat)) { + const calicoCats = getAll(leftCalicoCat); + calicoCats.forEach(function (calicoCat) { + if (getFirst(player) && getFirst(player).x == calicoCat.x && getFirst(player).y == calicoCat.y) { + restart(); + } + }); + } + + if (getFirst(rightCalicoCat)) { + const calicoCats = getAll(rightCalicoCat); + calicoCats.forEach(function (calicoCat) { + if (getFirst(player) && getFirst(player).x == calicoCat.x && getFirst(player).y == calicoCat.y) { + restart(); + } + }); + } +} + +// key +var hasKey = false; +var numOfKey = 0; +// get the key +function getKey() { + if (tilesWith(key, player).length > 0 && level != 4) { + getFirst(key).remove(); + hasKey = true; + + // there are 2 keys in level 5. use clearTile() functon to remove the key sprite + } else if (level == 4) { + const playerX = getFirst(player).x; + const playerY = getFirst(player).y; + const previousPlayer = player; + if (playerX == width() - 1 && playerY == 0 || playerX == 0 && playerY == 0) { + numOfKey++; + clearTile(playerX, playerY); + addSprite(playerX, playerY, previousPlayer); + + // if player gets 2 keys, then they can unlock the safe + if (numOfKey == 2) { + hasKey = true; + } + } + } +} + +// replace the safe with cheese +function unlockSafe() { + const x = getFirst(safe).x; + const y = getFirst(safe).y; + + if (hasKey && tilesWith(player, safe).length > 0) { + getFirst(safe).remove(); + addSprite(x, y, cheese); + } +} + + +// get the red key +var hasRedKey = false; +function getRedKey() { + if (tilesWith(redKey, player).length > 0) { + getFirst(redKey).remove(); + hasRedKey = true; + } +} + +// replace the red safe with cheese +function unlockRedSafe() { + const redSafeSprite = getFirst(redSafe); + + if (redSafeSprite) { + const x = redSafeSprite.x; + const y = redSafeSprite.y; + + if (hasRedKey && tilesWith(player, redSafe).length > 0) { + redSafeSprite.remove(); + addSprite(x, y, cheese); + } + } +} + + +// get the blue key +var hasBlueKey = false; +function getBlueKey() { + if (tilesWith(blueKey, player).length > 0) { + getFirst(blueKey).remove(); + hasBlueKey = true; + } +} + +// replace the blue safe with cheese +function unlockBlueSafe() { + const blueSafeSprite = getFirst(blueSafe); + + if (blueSafeSprite) { + const x = blueSafeSprite.x; + const y = blueSafeSprite.y; + + if (hasBlueKey && tilesWith(player, blueSafe).length > 0) { + blueSafeSprite.remove(); + addSprite(x, y, cheese); + } + } + +} + + + +// check if player has milk +var hasMilk = false; +function getMilk() { + if (tilesWith(milk, player).length > 0) { + getFirst(milk).remove(); + hasMilk = true; + } +} + +// when the player fills the bowl, orange cat will get distracted and walk toward to the bowl +var milkInBowl = false; +function attractCat() { + const emptyBowlSprite = getFirst(emptyBowl); + if (emptyBowlSprite) { + const x = emptyBowlSprite.x; + const y = emptyBowlSprite.y; + if (hasMilk && tilesWith(player, emptyBowl).length > 0) { + emptyBowlSprite.remove(); + addSprite(x, y, fullBowl); + + let cat = getFirst(rightOrangeCat); + const horizontalInterval = setInterval(() => { + if (cat.x < width() - 2) { + cat.x++; + checkDeath(); + } + }, 500); + } + + } +} + +// the cat's movement based on level +function catLevelMovement() { + if (level == 0) { + catMovement1(); + } else if (level == 1) { + catMovement2(); + } else if (level == 2) { + catMovement3(); + } else if (level == 3) { + whiteCatMovement4(); + blackCatMovement4(); + calicoCatMovement4(); + } else if (level == 4) { + blackCatMovement5(); + whiteCatMovement5(); + doorOrangeCatMovement5(); + safeOrangeCatMovement5(); + doorCalicoCatMovement5(); + cheeseCalicoCatMovement5(); + } + +} + +// after input +afterInput(() => { + checkDeath(); + getKey(); + getMilk(); + getRedKey(); + getBlueKey(); + // count the number of tiles with home + const numberOfCheese = tilesWith(home).length; + + + // count the number of tiles with cheese and home + const cheeseAtHome = tilesWith(cheese, home).length; + + if (numberOfCheese == cheeseAtHome) { + level++; + + const currentLevel = levels[level]; + + // make sure the level exists and if so set the map + // otherwise, we have finished the last level, there is no level + // after the last level + if (currentLevel !== undefined) { + setMap(currentLevel); + player = rightPlayer; + hasKey = false; + hasMilk = false; + + catLevelMovement(); + + } else { + addText("You win!", { y: 6, color: color`D` }); + } + + } +}); diff --git a/games/Cheese_Terminator.js b/games/Cheese_Terminator.js index 46360fc40c..ba058cae6c 100644 --- a/games/Cheese_Terminator.js +++ b/games/Cheese_Terminator.js @@ -1,7 +1,7 @@ /* @title: Cheese_Terminator @author: Colin -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2024-06-22 This is a port of Microsoft Cheese Terminator, a game that was given to you if you mailed in surveys for microsoft in poland. diff --git a/games/Christmas_Themed_Sokoban.js b/games/Christmas_Themed_Sokoban.js index 6f0c425dfe..5c40753ec4 100644 --- a/games/Christmas_Themed_Sokoban.js +++ b/games/Christmas_Themed_Sokoban.js @@ -1,8 +1,8 @@ /* -@title: Christmas_Themed_Sokoban -@tags: ['sokoban-style'] -@addedOn: 2023-01-19 +@title: Christmas_Themed_Sokoban @author: Joshua +@tags: ['puzzle'] +@addedOn: 2023-01-19 */ diff --git a/games/Circuits!.js b/games/Circuits!.js new file mode 100644 index 0000000000..b079c8c5a8 --- /dev/null +++ b/games/Circuits!.js @@ -0,0 +1,1525 @@ +/* +@title: Circuits! +@author: Kevin Butchard +@tags: ['sandbox'] +@addedOn: 2024-09-16 +Hi! Thanks for looking at my game! +And hopefully you will learn a +bit about circuits :) + +Controls: +W, A, S, and D +for moving the blue selection square + +I and K to change the selected item +to place + +J to rotate the item +under the blue selection square + +L to place a new item +under the blue selection square + + +*/ + +const player = "p"; +const wireVert = "w"; +const wireHor = "h"; +const wire1 = "z"; +const wire2 = "y"; +const wire3 = "x"; +const wire4 = "a"; +const bulb = "b"; +const bulbLit = "l"; +const bulbBurnt = "f"; +const cell = "c"; +const cellVert = "v"; +const resistor = "r"; +const resistorVert = "t"; +const switchOpen = "o"; +const switchOpenVert = "d"; +const switchClosed = "s"; +const switchClosedVert = "e"; +const menu = "m"; +const arrowUp = "u"; +const errorBox = "g"; + +const placementOptionsGlobal = + ["", "h", "z", "b", "r", "o", "c"]; +let placementOptions = + ["", "h", "z", "b", "r", "o", "c"]; +let placementOptionsAll = + ["w", "h", "z", "y", "x", "a", "b", + "l", "f", "c", "v", "r", "t", "o", + "d", "s", "e"]; +let placement = placementOptions.length - 1; +let s = placementOptions[placement]; + +let outputText = " "; +let tile; + +let clearBoardNext = false; +let clearBoardText = "clear board"; + +let onMenu = false; +let pastSpot = "home"; +let currSpot = "home"; +let menuSelection = 0; +let menuSelectionMax = 5; +let switchFlips = 1; +let menuColors = + [color`7`, color`0`, color`0`, + color`0`, color`0`, color`0`]; + +setLegend( + [ player, bitmap` +7777777777777777 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7..............7 +7777777777777777`], + [ wireVert, bitmap` +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00.......`], + [ wireHor, bitmap` +................ +................ +................ +................ +................ +................ +................ +0000000000000000 +0000000000000000 +................ +................ +................ +................ +................ +................ +................`], + [ wire1, bitmap` +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......000000000 +.......000000000 +................ +................ +................ +................ +................ +................ +................`], + [ wire2, bitmap` +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +000000000....... +000000000....... +................ +................ +................ +................ +................ +................ +................`], + [ wire3, bitmap` +................ +................ +................ +................ +................ +................ +................ +000000000....... +000000000....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00.......`], + [ wire4, bitmap` +................ +................ +................ +................ +................ +................ +................ +.......000000000 +.......000000000 +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00.......`], + [ bulb, bitmap` +....00000000.... +...0000000000... +..0000....0000.. +.000F......F000. +000FFF....FFF000 +000.FFF..FFF.000 +00...FF00FF...00 +00....0FF0....00 +00....0FF0....00 +00...FF00FF...00 +000.FFF..FFF.000 +000FFF....FFF000 +.000F......F000. +..0000....0000.. +...0000000000... +....00000000....`], + [ bulbLit, bitmap` +....00000000.... +...0000000000... +..000066660000.. +.00066666666000. +0006666666666000 +0006666006666000 +0066660000666600 +0066600660066600 +0066600660066600 +0066660000666600 +0006666006666000 +0006666666666000 +.00066666666000. +..000066660000.. +...0000000000... +....00000000....`], + [ bulbBurnt, bitmap` +....00000000.... +...0000000000... +..0000....0000.. +.000........000. +000.0......0.000 +000..0.00.0..000 +00....0000....00 +00...00..00...00 +00...00..00...00 +00....0000....00 +000..0.00.0..000 +000.0......0.000 +.000........000. +..0000....0000.. +...0000000000... +....00000000....`], + [ cell, bitmap` +.........00..... +.........00..... +.........00..... +.....00..00..3.. +.555.00..00.333. +.....00..00..3.. +.....00..00..... +0000000..0000000 +0000000..0000000 +.....00..00..... +.....00..00..... +.....00..00..... +.....00..00..... +.........00..... +.........00..... +.........00.....`], + [ cellVert, bitmap` +.......00....... +....3..00....... +...333.00....... +....3..00....... +.......00....... +0000000000000000 +0000000000000000 +................ +................ +...0000000000... +...0000000000... +.......00....... +.......00....... +...555.00....... +.......00....... +.......00.......`], + [ resistor, bitmap` +................ +................ +................ +................ +................ +................ +..9...9...9...9. +9999.999.999.999 +99.999.999.999.9 +....9...9...9... +................ +................ +................ +................ +................ +................`], + [ resistorVert, bitmap` +.......99....... +......99........ +.......99....... +........99...... +.......99....... +......99........ +.......99....... +........99...... +.......99....... +......99........ +.......99....... +........99...... +.......99....... +......99........ +.......99....... +.......99.......`], + [ switchOpen, bitmap` +................ +................ +................ +...........0.... +.........000.... +.444...0000.444. +.444.0000...444. +0044000.....4400 +00440.......4400 +.444........444. +.444........444. +................ +................ +................ +................ +................`], + [ switchOpenVert, bitmap` +.......00....... +.....440044..... +.....444444..... +.....444444..... +...00........... +....00.......... +....00.......... +.....00......... +.....00......... +......00........ +......00........ +.......00....... +.....444444..... +.....444444..... +.....440044..... +.......00.......`], + [ switchClosed, bitmap` +................ +................ +................ +................ +................ +.444........444. +.444........444. +0044000000004400 +0044000000004400 +.444........444. +.444........444. +................ +................ +................ +................ +................`], + [ switchClosedVert, bitmap` +.......00....... +.....440044..... +.....444444..... +.....444444..... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.....444444..... +.....444444..... +.....440044..... +.......00.......`], + [ menu, bitmap` +................ +.00000000000000. +.00000000000000. +.00000000000000. +................ +................ +.00000000000000. +.00000000000000. +.00000000000000. +................ +................ +.00000000000000. +.00000000000000. +.00000000000000. +................ +................`], + [ arrowUp, bitmap` +................ +................ +................ +................ +.......00....... +......0000...... +.....000000..... +....00000000.... +...0000000000... +..000000000000.. +................ +................ +................ +................ +................ +................`], + [ errorBox, bitmap` +3333333333333333 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3..............3 +3333333333333333`] +); + +let level = 3; +const levels = [ + map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........`, /* menu */ + map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........`, /* controls */ + map` +.................... +.................... +hhhhhhhhhhhhhhhhhhhh +m.................u. +.................... +......b..cros....... +......w............. +......w......x...... +......w....ahy...... +......zhhhhy........ +..........p......... +.................... +.................... +.................... +.................... +....................`, /* sandbox */ + map` +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +....................` /* home */ +]; + +let savedMap = map` +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +....................`; + +setMap(levels[level]); + +setPushables({ + [ player ]: [] +}); + +onInput("w", () => { + switch (currSpot) { + case "menu": + menuSelection -= 1; + if (menuSelection < 0) { + menuSelection = menuSelectionMax; + } + updateMenu(); + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + p1 = getFirst(player); + + if (p1.y > 3) { + getFirst(player).y -= 1 + } + break; + } +}); + + + +onInput("a", () => { + switch (currSpot) { + case "menu": + + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + getFirst(player).x -= 1; + break; + } +}); + +onInput("s", () => { + switch (currSpot) { + case "menu": + menuSelection += 1; + if (menuSelection > menuSelectionMax) { + menuSelection = 0; + } + updateMenu(); + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + getFirst(player).y += 1; + break; + } +}); + +onInput("d", () => { + switch (currSpot) { + case "menu": + + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + getFirst(player).x += 1; + break; + } +}); + +onInput("i", () => { + switch (currSpot) { + case "menu": + + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + placement -= 1; + if (placement < 0) { + placement = placementOptions.length - 1; + } + + setPlacementIcon(); + break; + } +}); + +onInput("j", () => { + switch (currSpot) { + case "menu": + + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + rotateTile(); + break; + } +}); + +onInput("k", () => { + switch (currSpot) { + case "menu": + + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + placement += 1; + if (placement > placementOptions.length - 1) { + placement = 0 + } + + setPlacementIcon(); + break; + } +}); + +onInput("l", () => { + switch (currSpot) { + case "menu": + switch (menuSelection) { + case 0: + currSpot = pastSpot; + clText(); + defaultText(); + setMap(levels[level]); + clearBoard(); + makeSavedMap(); + setPlacementIcon(); + if (clearBoardNext) { + clearBoard(); + clearBoardNext = false; + } + + p1 = getFirst(player); + if (p1 == null) { + addSprite(10, 10, player); + } + break; + case 1: + if (clearBoardNext) { + clearBoardNext = false; + clearBoardText = "clear board "; + } else { + clearBoardNext = true; + clearBoardText = "cancel board clear"; + } + break; + case 2: + showControlsArea(); + break; + case 3: + setUpTutorial(); + break; + case 4: + currSpot = "animation"; + clText(); + clearBoardCompletely(); + addText("Woah.", { + x: 1, + y: 1, + color: color`7` + }); + addText(" Circuits", { + x: 1, + y: 13, + color: color`0` + }); + setMap(levels[3]); + addSprite(10, 10, player); + randScreenInterval = setInterval(randScreen, 20); + break; + case 5: + currSpot = "sandbox"; + clText(); + defaultText(); + setMap(levels[2]); + setPlacementIcon(); + break; + } + break; + case "controls": + currSpot = "menu"; + showMenu() + break; + case "animation": + currSpot = "menu"; + clearInterval(randScreenInterval); + clearBoardCompletely(); + showMenu(); + break; + case "sandbox": + p1 = getFirst(player); + if (onMenu) { + saveMap(); + currSpot = "menu"; + p1.x = 0; + p1.y = 0; + showMenu(); + } else if (p1.y != 3 || p1.x < 15 || p1.x > 19) { + clTile(); + if (placement != 0) { + addSprite(p1.x, p1.y, placementOptions[placement]); + } + } + break; + case "home": + setUpTutorial(); + break; + case "tutorial": + clearInterval(randScreenInterval); + currSpot = "tutorial1"; + clText(); + clearBoardCompletely(); + addTutorialText(); + addText("A Wire", { + x: 13, + y: 3, + color: color`3` + }); + addSprite(1, 3, "w"); + addSprite(3, 3, "h"); + addSprite(5, 3, "z"); + addSprite(7, 3, "y"); + addSprite(9, 3, "x"); + addSprite(11, 3, "a"); + addText(`Wires are the +conductors that +allow electricity +to flow from one +point to another +to power all of +your devices!`, { + // + x: 1, + y: 5, + color: color`0` + }); + break; + case "tutorial1": + currSpot = "tutorial2"; + clText(); + clearBoardCompletely(); + addTutorialText(); + addText("A Cell/Battery", { + x: 5, + y: 3, + color: color`3` + }); + addSprite(1, 3, "c"); + addSprite(3, 3, "v"); + addText(`But where does the +electrical energy +come from? Cells! +They store +chemical energy +and then release +it as electrical +energy.`, { + // + x: 1, + y: 5, + color: color`0` + }); + break; + case "tutorial2": + currSpot = "tutorial3"; + clText(); + clearBoardCompletely(); + addTutorialText(); + addText("A Bulb", { + x: 5, + y: 3, + color: color`3` + }); + addSprite(1, 3, "b"); + addSprite(3, 3, "l"); + addText(`Now, what are we +going to power? +How about the +great light bulb! +It lights up. +Yeah!`, { + // + x: 1, + y: 5, + color: color`0` + }); + break; + case "tutorial3": + currSpot = "tutorial4"; + clText(); + clearBoardCompletely(); + addTutorialText(); + addText("A Burnt Bulb", { + x: 3, + y: 3, + color: color`3` + }); + addSprite(1, 3, "f"); + addText(`This happens +when too much +current flows +through a light +bulb, it burns +out! To prevent +this, we need to +add a...`, { + // + x: 1, + y: 5, + color: color`0` + }); + break; + case "tutorial4": + currSpot = "tutorial5"; + clText(); + clearBoardCompletely(); + addTutorialText(); + addText("A Resistor", { + x: 5, + y: 3, + color: color`3` + }); + addSprite(1, 3, "t"); + addSprite(3, 3, "r"); + addText(`Resistor! This +limits the flow of +electricity by +converting some of +it into heat. This +helps prevent our +light bulbs from +burning out!`, { + // + x: 1, + y: 5, + color: color`0` + }); + break; + case "tutorial5": + currSpot = "tutorial6"; + clText(); + clearBoardCompletely(); + addTutorialText(); + addText("A Switch", { + x: 9, + y: 3, + color: color`3` + }); + addSprite(1, 3, "o"); + addSprite(3, 3, "d"); + addSprite(5, 3, "s"); + addSprite(7, 3, "e"); + addText(`Our final +component is a +switch, which +allows us to turn +our circuits on +and off. +Very neat!`, { + // + x: 1, + y: 5, + color: color`0` + }); + break; + case "tutorial6": + currSpot = "tutorial7"; + clText(); + clearBoardCompletely(); + addText("Also, the Controls", { + x: 1, + y: 1, + color: color`1` + }); + addText("L to continue", { + x: 1, + y: 14, + color: color`1` + }); + addText("Move selection", { + x: 1, + y: 3, + color: color`3` + }); + addText("box: WASD", { + x: 1, + y: 4, + color: color`3` + }); + addText("Change item to", { + x: 1, + y: 6, + color: color`0` + }); + addText("place: I, K", { + x: 1, + y: 7, + color: color`0` + }); + addText("Rotate item under", { + x: 1, + y: 9, + color: color`8` + }); + addText("selection box: J", { + x: 1, + y: 10, + color: color`8` + }); + addText("Place item: L", { + x: 1, + y: 12, + color: color`4` + }); + break; + case "tutorial7": + currSpot = "tutorial8"; + clText(); + clearBoardCompletely(); + addText(" TUTORIAL ", { + x: 1, + y: 1, + color: color`1` + }); + addText("L to start!", { + x: 1, + y: 14, + color: color`1` + }); + addText(`Wonderful! +Now you are +officially ready +to create your +very own circuits!`, { + // + x: 1, + y: 5, + color: color`0` + }); + addSprite(17, 2, player); + randScreenInterval = setInterval(randScreen, 200); + break; + case "tutorial8": + clearInterval(randScreenInterval); + currSpot = "sandbox"; + pastSpot = "sandbox"; + clText(); + clearBoardCompletely(); + defaultText(); + setMap(levels[2]); + setPlacementIcon(); + break; + } +}); + +let sel = 0; + +afterInput(() => { + switch (currSpot) { + case "menu": + updateMenu(); + break; + case "controls": + + break; + case "tutorial": + + break; + case "levels": + + break; + case "sandbox": + p1 = getFirst(player); + + switchFlips += 1; + if (p1.x != lastx || p1.y != lasty) { + switchFlips = 1; + } + + if (p1.y == 3 && p1.x < 5) { + onMenu = true; + outputText = "Press L for menu"; + } else if (p1.y == 3 && p1.x > 14 && p1.x < 19) { + onMenu = false; + outputText = "I & K for items "; + } else { + onMenu = false; + tile = getTile(p1.x, p1.y); + + for (let i = 0; i < tile.length; i++) { + switch (tile[i].type) { + default: + outputText = " "; + break; + case "w": + case "h": + case "z": + case "y": + case "x": + case "a": + outputText = "Wire "; + break; + case "b": + outputText = "Unlit bulb "; + break; + case "l": + outputText = "Lit bulb "; + break; + case "c": + case "v": + outputText = "Cell (battery) "; + break; + case "r": + case "t": + outputText = "Resistor "; + break; + case "o": + case "d": + outputText = "Open switch "; + break; + case "s": + case "e": + outputText = "Closed switch "; + break; + } + } + } + + addText(outputText, { + x: 1, + y: 1, + color: color`1` + }); + + lastx = p1.x; + lasty = p1.y; + break; + } +}); + +function setPlacementIcon() { + clearTile(18, 1); + if (placement != 0) { + addSprite(18, 1, placementOptions[placement]); + } +} + +function clTile() { + p1 = getFirst(player); + tile = getTile(p1.x, p1.y); + + for (let i = 0; i < tile.length; i++) { + let currTile = tile[i]; + let t = currTile.type; + + if (t != "p" && t != "m" && t != "u") { + currTile.remove(); + } + } +} + +function rotateTile() { + p1 = getFirst(player); + tile = getTile(p1.x, p1.y); + let t = ""; + + for (let i = 0; i < tile.length; i++) { + switch (tile[i].type) { + case "w": + t = "h"; + break; + case "h": + t = "w"; + break; + case "z": + t = "y"; + break; + case "y": + t = "x"; + break; + case "x": + t = "a"; + break; + case "a": + t = "z"; + break; + case "c": + t = "v"; + break; + case "v": + t = "c"; + break; + case "r": + t = "t"; + break; + case "t": + t = "r"; + break; + case "o": + t = "s"; + break; + case "d": + t = "e"; + break; + case "s": + t = "d"; + break; + case "e": + t = "o"; + break; + default: + t = ""; + break; + } + } + + if (t != "") { + clTile(); + addSprite(p1.x, p1.y, t); + } +} + +function showMenu() { + clearBoardNext = false; + clearBoardText = "clear board"; + + menuSelection = 0; + setMap(levels[0]); + clText(); + + addText(" MENU ", { + x: 1, + y: 1, + color:color`1` + }); + addText("You are in: ", { + x: 1, + y: 3, + color:color`0` + }); + + addText("W and A to move", { + x: 1, + y: 13, + color: color`1` + }); + addText("L to select", { + x: 1, + y: 14, + color: color`1` + }); + + updateMenu(); +} + +function updateMenu() { + let menuColors = + [color`0`, color`0`, color`0`, + color`0`, color`0`, color`0`]; + menuColors[menuSelection] = color`7`; + + addText(pastSpot, { + x: 1, + y: 4, + color:color`0` + }); + addText("resume", { + x: 1, + y: 6, + color: menuColors[0] + }); + addText(clearBoardText, { + x: 1, + y: 7, + color: menuColors[1] + }); + addText("controls", { + x: 1, + y: 8, + color: menuColors[2] + }); + addText("tutorial", { + x: 1, + y: 9, + color: menuColors[3] + }); + addText("???", { + x: 1, + y: 10, + color: menuColors[4] + }); + addText("sandbox", { + x: 1, + y: 11, + color: menuColors[5] + }); +} + +function clearBoard() { + for (let i = 0; i < 20; i++) { + for (let j = 3; j < 16; j++) { + tile = getTile(i, j); + + for (let i = 0; i < tile.length; i++) { + let currTile = tile[i]; + let t = currTile.type; + + if (t != "p" && t != "m" && t != "u") { + currTile.remove(); + } + } + } + } +} + +function clText() { + for (let i = 0; i < 16; i++) { + addText(" ", { + x: 0, + y: i, + color: color`0` + }); + } +} + +function defaultText() { + addText("MENU Sel", { + x: 1, + y: 3, + color: color`1` + }); +} + +function saveMap() { + savedMap = ""; + + for (let i = 0; i < 20; i++) { + for (let j = 0; j < 16; j++) { + tile = getTile(i, j); + let placementHere = "."; + + for (let m = 0; m < tile.length; m++) { + let t = tile[m].type; + + if (t != "p") { + placementHere = t; + } + } + + savedMap += placementHere; + } + } +} + +function makeSavedMap() { + let sel = 0; + + for (let i = 0; i < 20; i++) { + for (let j = 0; j < 16; j++) { + let curr = savedMap.substring(sel, sel + 1); + + if (curr != ".") { + addSprite(i, j, curr); + } + + sel += 1; + } + } +} + +function makeHome() { + addText(" HOME ", { + x: 1, + y: 1, + color:color`1` + }); + addText(`Welcome! +This is a game +where you can +learn about parts +of a circuit, what +they do, and then +make your very own +circuits! + +Enjoy!`, { + x: 1, + y: 3, + color:color`0` + }); + + addText("L to continue", { + x: 1, + y: 14, + color:color`1` + }); +} + +let randScreenInterval; + +function randScreen() { + p1 = getFirst(player); + let rand = Math.floor(Math.random() * 4); + switch (rand) { + case 0: + if (p1.x < 19) { + p1.x += 1; + break; + } + case 1: + if (p1.y > 0) { + p1.y -= 1; + break; + } + case 2: + if (p1.x > 0) { + p1.x -= 1; + break; + } else { + p1.x += 1; + } + case 3: + if (p1.y < 8) { + p1.y += 1; + break; + } else { + p1.y -= 1; + } + } + p1 = getFirst(player); + clTile(p1.x, p1.y); + //0-16 + rand = Math.floor(Math.random() * 17); + addSprite(p1.x, p1.y, placementOptionsAll[rand]); +} + +function setUpTutorial() { + clText(); + setMap(levels[3]); + currSpot = "tutorial"; + addSprite(Math.floor(Math.random() * 20), + Math.floor(Math.random() * 9), player); + + randScreenInterval = setInterval(randScreen, 200); + + addTutorialText(); + addText(`See all the parts! +Don't worry, we'll +explain them next`, { + x: 1, + y: 10, + color: color`0` + }); + +} + +function addTutorialText() { + addText(" TUTORIAL ", { + x: 1, + y: 1, + color: color`1` + }); + addText("L to continue", { + x: 1, + y: 14, + color: color`1` + }); +} + +function clearBoardCompletely() { + for (let i = 0; i < 20; i++) { + for (let j = 0; j < 16; j++) { + clearTile(i, j); + } + } +} + +function showControlsArea() { + currSpot = "controls"; + clText(); + addText(" CONTROLS ", { + x: 1, + y: 1, + color: color`1` + }); + addText("back", { + x: 1, + y: 3, + color: color`7` + }); + addText("Move selection", { + x: 1, + y: 5, + color: color`3` + }); + addText("box: WASD", { + x: 1, + y: 6, + color: color`3` + }); + addText("Change item to", { + x: 1, + y: 7, + color: color`0` + }); + addText("place: I, K", { + x: 1, + y: 8, + color: color`0` + }); + addText("Rotate item under", { + x: 1, + y: 9, + color: color`8` + }); + addText("selection box: J", { + x: 1, + y: 10, + color: color`8` + }); + addText("Place item: L", { + x: 1, + y: 11, + color: color`4` + }); + + addText("L to return", { + x: 1, + y: 13, + color: color`1` + }); + addText("to menu", { + x: 1, + y: 14, + color: color`1` + }); + /* + W, A, S, and D + for moving the blue selection square + + I and K to change the selected item + to place + + J to rotate the item + inder the blue selection square + + L to place a new item + inder the blue selection square*/ +} + +let lastx = 0; +let lasty = 0; + +makeHome(); + + + + + + + + diff --git a/games/Civilization_Builder.js b/games/Civilization_Builder.js index ac6c7a099f..0a611672e8 100644 --- a/games/Civilization_Builder.js +++ b/games/Civilization_Builder.js @@ -2,7 +2,7 @@ /* @title: Civilization_Builder @author: Ivan S -@tags: ['advanced'] +@tags: [] @addedOn: 2023-06-08 */ diff --git a/games/Classic-Tetris.js b/games/Classic-Tetris.js new file mode 100644 index 0000000000..41678531f5 --- /dev/null +++ b/games/Classic-Tetris.js @@ -0,0 +1,560 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: Tetris +@author: BonzaiDev, Adrian T. +@tags: ["retro", "endless", "puzzle", "timed"] +@addedOn: 2024-07-23 +*/ + +// Game settings +let currentGameState; +let currentLinesAmount = 0; +let currentScore = 0; +let blockDropSpeed = 1; // In seconds +const blockSpawnPosition = { x: 5, y: 1 }; + +const tetrisTheme = tune` +201.34228187919464: E5/201.34228187919464, +201.34228187919464, +201.34228187919464: B4/201.34228187919464, +201.34228187919464: C5/201.34228187919464, +201.34228187919464: D5/201.34228187919464, +201.34228187919464, +201.34228187919464: C5/201.34228187919464, +201.34228187919464: B4/201.34228187919464, +201.34228187919464: A4/201.34228187919464, +201.34228187919464, +201.34228187919464: A4/201.34228187919464, +201.34228187919464: C5/201.34228187919464, +201.34228187919464: E5/201.34228187919464, +201.34228187919464, +201.34228187919464: D5/201.34228187919464, +201.34228187919464: C5/201.34228187919464, +201.34228187919464: B4/201.34228187919464, +201.34228187919464, +201.34228187919464: B4/201.34228187919464, +201.34228187919464: C5/201.34228187919464, +201.34228187919464: D5/201.34228187919464, +201.34228187919464, +201.34228187919464: E5/201.34228187919464, +201.34228187919464, +201.34228187919464: C5/201.34228187919464, +201.34228187919464, +201.34228187919464: A4/201.34228187919464, +201.34228187919464, +201.34228187919464: A4/201.34228187919464, +604.026845637584`; +const tetrisThemeBass = tune` +201.34228187919464: E4^201.34228187919464, +201.34228187919464: E5^201.34228187919464, +201.34228187919464: E4^201.34228187919464, +201.34228187919464: E5^201.34228187919464, +201.34228187919464: E4^201.34228187919464, +201.34228187919464: E5^201.34228187919464, +201.34228187919464: E4^201.34228187919464, +201.34228187919464: E5^201.34228187919464, +201.34228187919464: A4^201.34228187919464, +201.34228187919464: A5^201.34228187919464, +201.34228187919464: A4^201.34228187919464, +201.34228187919464: A5^201.34228187919464, +201.34228187919464: A4^201.34228187919464, +201.34228187919464: A5^201.34228187919464, +201.34228187919464: A4^201.34228187919464, +201.34228187919464: A5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: D5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: D5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: D5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: D5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: D5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: E5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: E5^201.34228187919464, +201.34228187919464: D4^201.34228187919464, +201.34228187919464: E5^201.34228187919464`; + +const gameMap = map` +@@@@@@@@@@@@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@..........@ +@@@@@@@@@@@@`; + +const gameStates = { + MENU: "Menu", + PLAYING: "Playing", + GAME_OVER: "GameOver", +}; + +const blockColours = { + darkBlue: bitmap` +................ +.25555555555557. +.55255555555557. +.52555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.55555555555557. +.77777777777775. +................`, + blue: bitmap` +................ +.25555555555555. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.52222222222227. +.77777777777775. +................`, + cyan: bitmap` +................ +.27777777777775. +.77277777777775. +.72777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.77777777777775. +.55555555555557. +................`, +}; + +// Classes \\ +const tetrominoTypes = { + straightTetromino: "straightTetromino", + squareTetromino: "squareTetromino", + tTetromino: "tTetromino", + lTetromino: "lTetromino", + lFlippedTetromino: "lFlippedTetromino", + sTetromino: "sTetromino", + sFlippedTetromino: "sFlippedTetromino", +}; + +let mappedSprites = []; +const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; +class Tetromino { + bitmapKey = ""; + bitmap = bitmap``; + type; + + constructor() { + // Adrian's custom code that def works + // basically my idea was to start with the first letter of the alphabet and then go up from there + // if the letter is already taken, then we go to the next letter and so on :D + + let index = 0; + while (true) { + this.bitmapKey = alphabet[index % alphabet.length]; + if (!mappedSprites.includes(this.bitmapKey)) { + mappedSprites.push(this.bitmapKey); + break; + }; + index++; + }; + + const randomNumber = Math.floor(Math.random() * 7); + switch (randomNumber) { + case 0: + this.type = tetrominoTypes.straightTetromino; + this.bitmap = blockColours.blue; + break; + case 1: + this.type = tetrominoTypes.squareTetromino; + this.bitmap = blockColours.blue; + break; + case 2: + this.type = tetrominoTypes.tTetromino; + this.bitmap = blockColours.blue; + break; + case 3: + this.type = tetrominoTypes.lTetromino; + this.bitmap = blockColours.cyan; + break; + case 4: + this.type = tetrominoTypes.sTetromino; + this.bitmap = blockColours.darkBlue; + break; + case 5: + this.type = tetrominoTypes.lFlippedTetromino; + this.bitmap = blockColours.darkBlue; + break; + case 6: + this.type = tetrominoTypes.sFlippedTetromino; + this.bitmap = blockColours.cyan; + break; + }; + }; +}; + +// Sprites +let newTetromino = new Tetromino(); +const background = "/"; +const border = "@"; + +// Functions +let moveBlockDownInterval; + +function startGame() { + currentGameState = gameStates.PLAYING; + currentLinesAmount = 0; + + clearText(); + addText("LINES", { x: 1, y: 1, color: color`2` }) + addText("000", { x: 1, y: 2, color: color`L` }) + + addText("SCORE", { x: 14, y: 1, color: color`2` }) + addText("000000", { x: 14, y: 2, color: color`L` }) + + setBitmaps(); + setMap(gameMap); + setBackground(background); + playTune(tetrisTheme, Infinity); + playTune(tetrisThemeBass, Infinity); + + spawnTetromino(newTetromino); + + clearInterval(moveBlockDownInterval); + moveBlockDownInterval = setInterval(async () => { + moveBlockDown(); + }, blockDropSpeed * 1000); +}; + +function setBitmaps() { + setLegend( + [background, bitmap` + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL + LLLLLLLLLLLLLLLL`], + [border, bitmap` + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000 + 0000000000000000`], + + [newTetromino.bitmapKey, newTetromino.bitmap], + ); +}; + +function spawnTetromino(tetromino) { + switch (tetromino.type) { + case tetrominoTypes.straightTetromino: + for (let ySpawn = 0; ySpawn < 4; ySpawn++) + addSprite(blockSpawnPosition.x, blockSpawnPosition.y + ySpawn, tetromino.bitmapKey); + break; + + case tetrominoTypes.squareTetromino: + for (let xSpawn = 0; xSpawn < 2; xSpawn++) { + for (let ySpawn = 0; ySpawn < 2; ySpawn++) { + addSprite(blockSpawnPosition.x + xSpawn, blockSpawnPosition.y + ySpawn, tetromino.bitmapKey); + }; + }; + break; + + case tetrominoTypes.tTetromino: + addSprite(blockSpawnPosition.x + 1, blockSpawnPosition.y + 1, tetromino.bitmapKey); + for (let xSpawn = 0; xSpawn < 3; xSpawn++) + addSprite(blockSpawnPosition.x + xSpawn, blockSpawnPosition.y, tetromino.bitmapKey); + break; + + case tetrominoTypes.lTetromino: + for (let ySpawn = 0; ySpawn < 3; ySpawn++) + addSprite(blockSpawnPosition.x, blockSpawnPosition.y + ySpawn, tetromino.bitmapKey); + addSprite(blockSpawnPosition.x + 1, blockSpawnPosition.y + 2, tetromino.bitmapKey); + break; + + case tetrominoTypes.sTetromino: + for (let xSpawn = 0; xSpawn < 2; xSpawn++) { + addSprite(blockSpawnPosition.x + xSpawn, blockSpawnPosition.y, tetromino.bitmapKey); + }; + + for (let xSpawn = 0; xSpawn < 2; xSpawn++) { + addSprite(blockSpawnPosition.x + xSpawn - 1, blockSpawnPosition.y + 1, tetromino.bitmapKey); + }; + break; + case tetrominoTypes.lFlippedTetromino: + for (let ySpawn = 0; ySpawn < 3; ySpawn++) + addSprite(blockSpawnPosition.x, blockSpawnPosition.y + ySpawn, tetromino.bitmapKey); + addSprite(blockSpawnPosition.x - 1, blockSpawnPosition.y + 2, tetromino.bitmapKey); + break; + case tetrominoTypes.sFlippedTetromino: + for (let xSpawn = 0; xSpawn < 2; xSpawn++) { + addSprite(blockSpawnPosition.x + xSpawn - 1, blockSpawnPosition.y, tetromino.bitmapKey); + }; + + for (let xSpawn = 0; xSpawn < 2; xSpawn++) { + addSprite(blockSpawnPosition.x + xSpawn, blockSpawnPosition.y + 1, tetromino.bitmapKey); + }; + break; + }; +} + +function isTetrominoCollidingX(tetromino, direction) { + for (const tetrominoBlock of getAll(tetromino.bitmapKey)) { + const surroundingBlocks = getTile(tetrominoBlock.x + direction, tetrominoBlock.y); + for (const block of surroundingBlocks) { + if (block.type !== tetromino.bitmapKey) + return true; + }; + }; + return false; +}; + +function isTetrominoCollidingY(tetromino) { // Function to determine if theres blocks surrounding tetromino. Custom collisions + for (const tetrominoBlock of getAll(tetromino.bitmapKey)) { + const blocksUnderTetromino = getTile(tetrominoBlock.x, tetrominoBlock.y + 1); + for (const block of blocksUnderTetromino) { + if (blocksUnderTetromino.length > 0 && block.type != tetromino.bitmapKey) + return true; + }; + }; + return false; +}; + +function rotateTetromino(tetromino, originIndex, upperLeftBlockIndex) { + let finalPosition; + let canRotate = false; + + const destinations = []; + const tetrominoBlocks = getAll(tetromino.bitmapKey); + const origin = tetrominoBlocks[originIndex]; + + tetrominoBlocks.splice(tetrominoBlocks.indexOf(origin), 1); + for (block of tetrominoBlocks) { + const relativeX = block.x - origin.x; + const relativeY = block.y - origin.y; + finalPosition = { x: origin.x - relativeY, y: origin.y + relativeX }; + + const tile = getTile(finalPosition.x, finalPosition.y) + destinations.push(finalPosition) + }; + + for (position of destinations) { + const tile = getTile(position.x, position.y); + if (tile.length > 0) { + if (tile[0].type != tetromino.bitmapKey) + destinations.splice(position, 1); + }; + }; + + if (destinations.length == 3) { + tetrominoBlocks.forEach(function(block) { + const relativeX = block.x - origin.x; + const relativeY = block.y - origin.y; + finalPosition = { x: origin.x - relativeY, y: origin.y + relativeX }; + + block.x = finalPosition.x; + block.y = finalPosition.y; + }); + }; +} + +function moveBlock(direction) { // Direction is a int. -x for left and x for right + if (getAll(newTetromino.bitmapKey).every(block => block.y !== height() - 1) && !isTetrominoCollidingX(newTetromino, direction) && currentGameState != gameStates.GAME_OVER) { + if (direction == 1 && getAll(newTetromino.bitmapKey).every(block => block.x < width() - 1)) { + getAll(newTetromino.bitmapKey).forEach(block => block.x++); + } else if (direction == -1 && getAll(newTetromino.bitmapKey).every(block => block.x !== 0)) { + getAll(newTetromino.bitmapKey).forEach(block => block.x--); + }; + }; +}; + +function moveBlockDown() { + if (currentGameState != gameStates.PLAYING) { + addText("GAME", { x: 8, y: 5, color: color`3` }) + addText("OVER", { x: 8, y: 7, color: color`3` }) + addText("RESTART", { x: 7, y: 9, color: color`4` }) + addText("(j)", { x: 9, y: 10, color: color`D` }) + return; + }; + + if (!isTetrominoCollidingY(newTetromino) && getAll(newTetromino.bitmapKey).every(block => block.y < height() - 2)) { + getAll(newTetromino.bitmapKey).forEach(block => block.y++); + } else { + const nextTetromino = new Tetromino(); + newTetromino = nextTetromino; + setBitmaps(); + + spawnTetromino(newTetromino); + + for (let y = height() - 2; y >= 1; y--) { + let isFirstRowFilled = false; + const blocksToRemove = []; + for (let x = 1; x < width() - 1; x++) { + const tile = getTile(x, y); + if (tile.length > 0) { + blocksToRemove.push({ x, y }); + + setTimeout(function() { + if (tile.length > 0 && tile[0].y == 1) { + currentGameState = gameStates.GAME_OVER; + } + }, 2000); + }; + }; + + if (blocksToRemove.length == width() - 2) { + blocksToRemove.forEach(function(block) { + clearTile(block.x, block.y); + }); + + for (let yToRemove = blocksToRemove[0].y - 1; yToRemove >= 1; yToRemove--) { + for (let x = 1; x < width() - 1; x++) { + getTile(x, yToRemove).forEach(function(block) { + block.y++; + if (y < 21) + y++; + }); + }; + }; + + currentLinesAmount++; + addText(currentLinesAmount.toString().padStart(3, "0"), { x: 1, y: 2, color: color`L` }) + + currentScore += 40; + addText(currentScore.toString().padStart(6, "0"), { x: 14, y: 2, color: color`L` }) + + if (currentScore % 400 === 0) { + blockDropSpeed -= 0.5; + clearInterval(moveBlockDownInterval); + moveBlockDownInterval = setInterval(async () => { + moveBlockDown(); + }, blockDropSpeed * 1000); + return; + }; + }; + }; + + for (let i = mappedSprites.length - 1; i >= 0; i--) { + const bitmapKey = mappedSprites[i]; + let found = false; + for (let y = height() - 2; y >= 1; y--) { + for (let x = 1; x < width() - 1; x++) { + const tile = getTile(x, y); + if (tile.length > 0 && tile[0].type == bitmapKey) { + found = true; + break; + }; + }; + if (found) + break; + }; + + if (!found) + mappedSprites.splice(i, 1); + }; + }; +}; + +// Game logic \\ +startGame(); + +// Inputs +onInput("w", () => { + switch (newTetromino.type) { + case tetrominoTypes.straightTetromino: + rotateTetromino(newTetromino, 1, 0); + break; + case tetrominoTypes.tTetromino: + rotateTetromino(newTetromino, 2, 1); + break; + case tetrominoTypes.lTetromino: + rotateTetromino(newTetromino, 1, 0); + break; + case tetrominoTypes.sTetromino: + rotateTetromino(newTetromino, 3, 0); + break; + case tetrominoTypes.lFlippedTetromino: + rotateTetromino(newTetromino, 1, 0); + break; + case tetrominoTypes.sFlippedTetromino: + rotateTetromino(newTetromino, 2, 0); + break; + }; +}); + +onInput("s", () => { + moveBlockDown(); +}); + +onInput("a", () => { + moveBlock(-1); +}); + +onInput("d", () => { + moveBlock(1); +}); + +onInput("j", () => { + if (currentGameState == gameStates.GAME_OVER) + startGame(); +}); diff --git a/games/Clicker Kingdom.js b/games/Clicker Kingdom.js index 9eaa4d55c9..50d6225410 100644 --- a/games/Clicker Kingdom.js +++ b/games/Clicker Kingdom.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: clicker -@author: MaxMph +@author: MaxMph @tags: [] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Clutter_Cleanup.js b/games/Clutter_Cleanup.js index 70d516b726..1a9d582641 100644 --- a/games/Clutter_Cleanup.js +++ b/games/Clutter_Cleanup.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Clutter Cleanup @author: CmdrApollo @tags: [] @addedOn: 2024-07-09 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = 'p'; diff --git a/games/CoinClash.js b/games/CoinClash.js new file mode 100644 index 0000000000..7226795dc9 --- /dev/null +++ b/games/CoinClash.js @@ -0,0 +1,331 @@ +/* +@title: Coin Clash +@author: PhyoTP +@tags: ['multiplayer', 'turn-based', 'strategy'] +@addedOn: 2024-10-04 +*/ + +const playerOne = "1"; +const playerTwo = "2"; +const wall = "w"; +const star = "s"; +const target = "t"; +const up = "u"; +const left = "l"; +const down = "d"; +const right = "r"; +let countOne = 0; +let countTwo = 0; +let oneTurn = true; +let clicked = []; +const directions = [up, left, down, right]; +setLegend( + [ up, bitmap` +................ +.......33....... +......3333...... +....33333333.... +...333.33.333... +..33...33...33.. +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +................`], + [ left, bitmap` +................ +................ +.....3.......... +....33.......... +...33........... +...33........... +..33............ +.33333333333333. +.33333333333333. +..33............ +...33........... +...33........... +....33.......... +.....3.......... +................ +................`], + [ down, bitmap` +................ +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +.......33....... +..33...33...33.. +...333.33.333... +....33333333.... +......3333...... +.......33....... +................`], + [ right, bitmap` +................ +................ +..........3..... +..........33.... +...........33... +...........33... +............33.. +.33333333333333. +.33333333333333. +............33.. +...........33... +...........33... +..........33.... +..........3..... +................ +................`], + [ playerOne, bitmap` +.....FFFFFF..... +...FFF6666FFF... +..FF6666F666FF.. +.FF6666FF6666FF. +.F6666F6F66666F. +FF666F66F66666FF +F6666666F666666F +F6666666F666666F +F6666666F666666F +F6666666F666666F +FF666666F66666FF +.F666FFFFFFF66F. +.FF6666666666FF. +..FF66666666FF.. +...FFF6666FFF... +.....FFFFFF.....` ], + [ playerTwo, bitmap` +.....LLLLLL..... +...LLL1111LLL... +..LL11111111LL.. +.LL1111111111LL. +.L11111LLL1111L. +LL1111L11LL111LL +L111111111L1111L +L111111111L1111L +L11111111L11111L +L1111111L111111L +LL11111L111111LL +.L1111LLLLL111L. +.LL1111111111LL. +..LL11111111LL.. +...LLL1111LLL... +.....LLLLLL.....` ], + [ target, bitmap` +....33333333.... +...3222222223... +..322222222223.. +.32223333332223. +3222333333332223 +3223333333333223 +3223333333333223 +3223333333333223 +3223333333333223 +3223333333333223 +3223333333333223 +3222333333332223 +.32223333332223. +..322222222223.. +...3222222223... +....33333333....`], + [ wall, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [ star, bitmap` +.......66....... +.......66....... +......6666...... +.....666666..... +.....666666..... +.66666666666666. +6666666666666666 +6666666666666666 +..666666666666.. +...6666666666... +..666666666666.. +..66666..66666.. +..6666....6666.. +.6666......6666. +.666........666. +.66..........66.`], +) + +setSolids([playerOne, playerTwo]); + +let level = 0; +const levels = [ + map` +............ +............ +..wwwwwwww.. +..w1.....w.. +..w......w.. +..w......w.. +..w......w.. +..w......w.. +..w.....2w.. +..wwwwwwww.. +............ +............`, + map`..`, + map`.` +] + +setMap(levels[level]); +addSprite(0,0,star) +setPushables({ + [ playerOne ]: [ playerTwo ], + [ playerTwo ]: [ playerOne ] +}) +function move(bool, button1, button2, pos, isX){ + let player = getFirst(bool ? playerOne : playerTwo); + if (oneTurn == bool){ + if (clicked.at(-1) == button2){ + let i = 0; + let go = setInterval(()=>{ + if (clicked[i]){ + switch (clicked[i]){ + case "w": + getFirst(playerOne).y -= 1; + break; + case "i": + getFirst(playerTwo).y -= 1; + break; + case "a": + getFirst(playerOne).x -= 1; + break; + case "j": + getFirst(playerTwo).x -= 1; + break; + case "s": + getFirst(playerOne).y += 1; + break; + case "k": + getFirst(playerTwo).y += 1; + break; + case "d": + getFirst(playerOne).x += 1; + break; + case "l": + getFirst(playerTwo).x += 1; + } + }else{ + oneTurn = !bool; + clicked = []; + if (bool){ + clearTile(0,0); + addSprite(11,0,star); + }else{ + clearTile(11,0); + addSprite(0,0,star); + } + clear(i); + } + if (((getFirst(playerOne).x < 2 || getFirst(playerOne).x > 9)&&(getFirst(playerTwo).x < 2 || getFirst(playerTwo).x > 9))||((getFirst(playerOne).y < 2 || getFirst(playerOne).y > 9)&&(getFirst(playerTwo).x < 2 || getFirst(playerTwo).x > 9))){ + addText("Tie"); + oneTurn = null; + clear(i); + }else if ((getFirst(playerOne).x < 2 || getFirst(playerOne).x > 9)||(getFirst(playerOne).y < 2 || getFirst(playerOne).y > 9)){ + addSprite(4,0,"2"); + addText("Wins", {x: 9,y: 0}); + oneTurn = null; + clear(i); + }else if ((getFirst(playerTwo).x < 2 || getFirst(playerTwo).x > 9)||(getFirst(playerTwo).y < 2 || getFirst(playerTwo).y > 9)){ + addSprite(4,0,"1"); + addText("Wins", {x: 9, y: 0}); + oneTurn = null; + clear(i); + } + i++; + },50) + let clear = (i) => { + getFirst(target).remove(); + for (i of directions) if (getFirst(i)) getFirst(i).remove(); + clearInterval(go); + } + + }else{ + if (clicked.length < 7){ + clicked.push(button1); + if (getFirst(target)){ + for (i of directions) if (getFirst(i)) getFirst(i).remove(); + switch (button1){ + case "w": + case "i": + addSprite(player.x,player.y+pos,up); + getFirst(target).y+=pos; + break; + case "a": + case "j": + addSprite(player.x-pos,player.y,left); + getFirst(target).x-=pos; + break; + case "s": + case "k": + addSprite(player.x,player.y+pos,down); + getFirst(target).y+=pos; + break; + case "d": + case "l": + addSprite(player.x-pos,player.y,right); + getFirst(target).x-=pos; + } + }else{ + isX ? addSprite(player.x-pos,player.y,target) : addSprite(player.x,player.y+pos,target); + } + } + } + } +} +onInput("s", () => { + move(true, "s", "w", 1, false); +}) +onInput("w", () => { + move(true, "w", "s", -1, false); +}) +onInput("a", () => { + move(true, "a", "d", 1, true); +}) +onInput("d", () => { + move(true, "d", "a", -1, true); +}) +onInput("k", () => { + move(false, "k", "i", 1, false); +}) +onInput("i", () => { + move(false, "i", "k", -1, false); +}) +onInput("j", () => { + move(false, "j", "l", 1, true); +}) +onInput("l", () => { + move(false, "l", "j", -1, true); +}) +afterInput(() => { + +}) diff --git a/games/Collectors-Quest.js b/games/Collectors-Quest.js index 19c74bd1ad..1fc63cbf86 100644 --- a/games/Collectors-Quest.js +++ b/games/Collectors-Quest.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Collector's Quest @author: PawiX25 @tags: [] @addedOn: 2024-08-13 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/ColorsGame.js b/games/ColorsGame.js new file mode 100644 index 0000000000..e59b0f48e2 --- /dev/null +++ b/games/ColorsGame.js @@ -0,0 +1,936 @@ +/* +@title: Colors Game +@author: Liana24601 +@tags: [] +@addedOn: 2024-09-03 + + +Description: +I tutor little kids and I had the idea of building +a cute reto alien game to help them recognize and remember +their colors. So I created this game, about an alien named +Bob. Bob is a soldier in the war of the Aliens. The player +has to walk up to and attack Bob's alien enemies. But they +have to choose the alien that is the color told to them by +the instructions. Be careful because picking the wrong color +alien could end Bob and make you lose the game! +There are 26 levels to this game, and Bob's movements can +be controlled by the w, a, s, and d keys. +(Also, sorry if it's too easy, it's meant to be for tiny +children.) + +Game Controls: +W - Up +S - Down +A - Left +D - Right + +l - Start the game (at the beginning) +K - Restart the game + +*/ + +const player = "p" +const red = "r" +const space = "s" +const green = "g" +const blue = "b" +const pink = "i" +const RedWordTwo = "a" +const yellow = "y" + +const WrongRed = "u" +const WrongGreen = "n" +const WrongBlue = "l" +const WrongPink = "d" +const WrongGray = "q" +const WrongYellow = "m" + +const choose = "o" +const pick = "v" +const RedWordOne = "x" +const GreenWordOne = "w" +const GreenWordTwo = "f" +const BlueWordOne = "t" +const BlueWordTwo = "e" +const gray = "h" +const PinkWordTwo = "c" +const YellowWordOne = "j" +const YellowWordTwo = "z" +const black = "k" + +setSolids([ player, pick ]) +setSolids([ player, choose ]) +setSolids([ player, RedWordOne ]) +setSolids([ player, RedWordTwo ]) +setSolids([ player, YellowWordOne ]) +setSolids([ player, YellowWordTwo ]) +setSolids([ player, GreenWordOne ]) +setSolids([ player, GreenWordTwo ]) +setSolids([ player, BlueWordOne ]) +setSolids([ player, BlueWordTwo ]) +setSolids([ player, PinkWordTwo ]) + +setLegend( + [ player, bitmap` +................ +................ +................ +................ +...75......75... +...75.7775.75... +.....777775..... +....77777775.... +...7027702775... +...7527752775... +...7777777775... +....77007775.... +.....777775..... +......7775...... +......7075...... +.....770775.....` ], + [ red, bitmap` +................ +.....3C...3C.... +......3C.3C..... +......3C.3C..... +.....333333C.... +.....C333C3C.... +.....333333C.... +.....3CCC33C.... +....33333333C... +...3C333333C3C.. +...3C..33C..3C.. +...3C.3C.3C.3C.. +......3C.3C..... +......3C.3C..... +......3C.3C..... +................`], + [ green, bitmap` +................ +.....4D...4D.... +......4D.4D..... +......4D.4D..... +.....444444D.... +.....D444D4D.... +.....444444D.... +.....4DDD44D.... +....44444444D... +...4D444444D4D.. +...4D..44D..4D.. +...4D.4D.4D.4D.. +......4D.4D..... +......4D.4D..... +......4D.4D..... +................`], + [ space, bitmap` +0000000000000000 +0000000000020000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0002000000000000 +0000000000000000 +0000000000000200 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000020000000000 +0000000000000000 +0000000000000000`], + [ choose, bitmap` +0000000000000000 +0000000000000000 +0222220002222220 +0220002000022000 +0220002000022000 +0220002000022000 +0220002000022000 +0220002000022000 +0222220000022000 +0220000000022000 +0220000000022000 +0220000000022000 +0220000000022000 +0220000002222220 +0000000000000000 +0000000000000000`], + [ pick, bitmap` +0000000000000000 +0000000000000000 +0002222000220002 +0220000200220002 +0220000200220002 +0220000000220220 +0220000000220200 +0220000000222000 +0220000000220200 +0220000000220220 +0220000000220002 +0220000200220002 +0220000200220002 +0002222000220002 +0000000000000000 +0000000000000000`], + [ RedWordOne, bitmap` +0000000000000000 +0000000000000000 +0222220002222220 +0220002002200000 +0220002002200000 +0220002002200000 +0220002002200000 +0220002002222000 +0222220002200000 +0222000002200000 +0220200002200000 +0220020002200000 +0220002002200000 +0220002002222220 +0000000000000000 +0000000000000000`], + [ black, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + + [ blue, bitmap` +................ +.....75...75.... +......75.75..... +......75.75..... +.....7777775.... +.....5777575.... +.....7777775.... +.....7555775.... +....777777775... +...75777777575.. +...75..775..75.. +...75.75.75.75.. +......75.75..... +......75.75..... +......75.75..... +................`], + [ pink, bitmap` +................ +.....8H...8H.... +......8H.8H..... +......8H.8H..... +.....888888H.... +.....H888H8H.... +.....888888H.... +.....8HHH88H.... +....88888888H... +...8H888888H8H.. +...8H..88H..8H.. +...8H.8H.8H.8H.. +......8H.8H..... +......8H.8H..... +......8H.8H..... +................`], + [ RedWordTwo, bitmap` +0000000000000000 +0000000000000000 +0222200000022000 +0220020000022000 +0220002000022000 +0220002000022000 +0220002000022000 +0220002000022000 +0220002000000000 +0220002000000000 +0220002000022000 +0220002000222200 +0220020000222200 +0222200000022000 +0000000000000000 +0000000000000000`], + [ yellow, bitmap` +................ +.....6F...6F.... +......6F.6F..... +......6F.6F..... +.....666666F.... +.....F666F6F.... +.....666666F.... +.....6FFF66F.... +....66666666F... +...6F666666F6F.. +...6F..66F..6F.. +...6F.6F.6F.6F.. +......6F.6F..... +......6F.6F..... +......6F.6F..... +................`], + + [ WrongGreen, bitmap` +................ +.....4D...4D.... +......4D.4D..... +......4D.4D..... +.....444444D.... +.....D444D4D.... +.....444444D.... +.....4DDD44D.... +....44444444D... +...4D444444D4D.. +...4D..44D..4D.. +...4D.4D.4D.4D.. +......4D.4D..... +......4D.4D..... +......4D.4D..... +................`], + [ WrongRed, bitmap` +................ +.....3C...3C.... +......3C.3C..... +......3C.3C..... +.....333333C.... +.....C333C3C.... +.....333333C.... +.....3CCC33C.... +....33333333C... +...3C333333C3C.. +...3C..33C..3C.. +...3C.3C.3C.3C.. +......3C.3C..... +......3C.3C..... +......3C.3C..... +................`], + [ WrongBlue, bitmap` +................ +.....75...75.... +......75.75..... +......75.75..... +.....7777775.... +.....5777575.... +.....7777775.... +.....7555775.... +....777777775... +...75777777575.. +...75..775..75.. +...75.75.75.75.. +......75.75..... +......75.75..... +......75.75..... +................`], + [ WrongPink, bitmap` +................ +.....8H...8H.... +......8H.8H..... +......8H.8H..... +.....888888H.... +.....H888H8H.... +.....888888H.... +.....8HHH88H.... +....88888888H... +...8H888888H8H.. +...8H..88H..8H.. +...8H.8H.8H.8H.. +......8H.8H..... +......8H.8H..... +......8H.8H..... +................`], + [ WrongGray, bitmap` +................ +.....1L...1L.... +......1L.1L..... +......1L.1L..... +.....111111L.... +.....L111L1L.... +.....111111L.... +.....1LLL11L.... +....11111111L... +...1L111111L1L.. +...1L..11L..1L.. +...1L.1L.1L.1L.. +......1L.1L..... +......1L.1L..... +......1L.1L..... +................`], + [ WrongYellow, bitmap` +................ +.....6F...6F.... +......6F.6F..... +......6F.6F..... +.....666666F.... +.....F666F6F.... +.....666666F.... +.....6FFF66F.... +....66666666F... +...6F666666F6F.. +...6F..66F..6F.. +...6F.6F.6F.6F.. +......6F.6F..... +......6F.6F..... +......6F.6F..... +................`], + + [ GreenWordOne, bitmap` +0000000000000000 +0000000000000000 +0222002222002222 +2000202000202000 +2000002000202000 +2000002000202000 +2000002000202000 +2000002222002222 +2000002200002000 +2022202020002000 +2000202002002000 +2000202000202000 +2000202000202000 +0222002000202222 +0000000000000000 +0000000000000000`], + [ GreenWordTwo, bitmap` +0000000000000000 +0000000000000000 +2202222220200002 +0002000000220002 +0002000000222002 +0002000000202002 +0002000000202002 +0002222000202002 +0002000000202002 +0002000000202002 +0002000000202202 +0002000000200222 +0002000000200022 +2202222220200002 +0000000000000000 +0000000000000000`], + [ BlueWordOne, bitmap` +0000000000000000 +0000000000000000 +0222222000220000 +0220000200220000 +0220000200220000 +0220000200220000 +0220000200220000 +0222222000220000 +0220000200220000 +0220000200220000 +0220000200220000 +0220000200220000 +0220000200220000 +0222222000222222 +0000000000000000 +0000000000000000`], + [ BlueWordTwo, bitmap` +0000000000000000 +0000000000000000 +0022000200222222 +0022000200220000 +0022000200220000 +0022000200220000 +0022000200220000 +0022000200220000 +0022000200222220 +0022000200220000 +0022000200220000 +0022000200220000 +0022000200220000 +0000222000222222 +0000000000000000 +0000000000000000`], + [ gray, bitmap` +................ +.....1L...1L.... +......1L.1L..... +......1L.1L..... +.....111111L.... +.....L111L1L.... +.....111111L.... +.....1LLL11L.... +....11111111L... +...1L111111L1L.. +...1L..11L..1L.. +...1L.1L.1L.1L.. +......1L.1L..... +......1L.1L..... +......1L.1L..... +................`], + [ PinkWordTwo, bitmap` +0000000000000000 +0000000000000000 +0222000200220002 +0222200200220002 +0220200200220002 +0220200200220220 +0220200200220200 +0220200200222000 +0220200200220200 +0220200200220220 +0220200200220002 +0220220200220002 +0220022200220002 +0220002200220002 +0000000000000000 +0000000000000000`], + [ YellowWordOne, bitmap` +0000000000000000 +0000000000000000 +2000202222020000 +2000202000020000 +2000202000020000 +2000202000020000 +2000202000020000 +0202002222020000 +0020002000020000 +0020002000020000 +0020002000020000 +0020002000020000 +0020002000020000 +0020002222022220 +0000000000000000 +0000000000000000`], + [ YellowWordTwo, bitmap` +0000000000000000 +0000000000000000 +2000022002000002 +2000200202000002 +2000200202000002 +2000200202000002 +2000200202000002 +2000200202000002 +2000200202002002 +2000200202002002 +2000200202002002 +2000200202002002 +2000200202002002 +2220022000220220 +0000000000000000 +0000000000000000`], +) + + +setBackground(black); + +clearText(); + +let level = 0 + +const levels = [ + map` +...... +...... +...... +......`, //1 + map` +iuiuiu +...... +.ov... +.oc.p.`, //2 + map` +udyudy +...... +.ov... +.jz.p.`, //3 + map` +bnbnbn +...... +.ov... +.te.p.`, //4 + map` +rlqrlq +...... +.ov... +.xa.p.`, //5 + map` +ululgl +...... +.ov... +.wf.p.`, //6 + map` +qdmbnu +...... +.ov... +.te.p.`, //7 + map` +lrdmnq +...... +.ov... +.xa.p.`, //8 + map` +uldnqy +...... +.ov... +.jz.p.`, //9 + map` +iluqnm +...... +.ov... +.oc.p.`, //10 + map` +bqdmnu +...... +.ov... +.te.p.`, //11 + map` +dnbmqu +...... +.ov... +.te.p.`, //11 + map` +mqgdlu +...... +.ov... +.wf.p.`, //12 + map` +nmqrld +...... +.ov... +.xa.p.`, //13 + map` +yqldnu +...... +.ov... +.jz.p.`, //14 + map` +mrnqdl +...... +.ov... +.xa.p.`, //15 + map` +lyuqnd +...... +.ov... +.jz.p.`, //16 + map` +qmbdun +...... +.ov... +.te.p.`, //17 + map` +y....u +..dn.. +.ov..l +qjz.p.`, //18 + map` +p..d.m +.u.... +lovql. +.wfg..`, //19 + map` +dn.... +ovpte. +..q.u. +m...b.`, //20 + map` +povioc +.q..l. +...u.. +m.n..i`, //21 + map` +d..mov +.q...p +...nxa +l...r.`, //22 + map` +q....d +...l.. +.u..m. +ovpwfg`, //23 + map` +q..ly. +ovd... +p...u. +jzn..q`, //24 + map` +q...l. +.n...m +i..u.. +ov.ocp`, //25 + map` +povmwf +.u...g +..q.d. +l.....`, //26 + map` +b.n.d. +.u.q.m +...... +.....p`, //27 last level! +] + +let oops = 0 + +setMap(levels[level]) + +setMap(levels[0]) //starting map + +addText("Bob is a soldier in", { y: 1, color: color`7` }); +addText("the war of the", { y: 3, color: color`7` }); +addText("Aliens. Help him", { y: 5, color: color`7` }); +addText("attack the enemies!", { y: 7, color: color`7` }); +addText("But be careful!", { y: 9, color: color`7` }); +addText("The wrong color", { y: 11, color: color`7` }); +addText("alien can end him!", { y: 13, color: color`7` }); +addText("click 'l' to start", { y: 15, color: color`6` }); + +onInput("k", () => { //restart + clearText(); + let oops = 0 + setBackground(black); + setMap(levels[0]) + let yahoo = 1 + level = 0; + + addText("Bob is a soldier in", { y: 1, color: color`7` }); + addText("the war of the", { y: 3, color: color`7` }); + addText("Aliens. Help him", { y: 5, color: color`7` }); + addText("attack the enemies!", { y: 7, color: color`7` }); + addText("But be careful!", { y: 9, color: color`7` }); + addText("The wrong color", { y: 11, color: color`7` }); + addText("alien can end him!", { y: 13, color: color`7` }); + addText("click 'l' to start", { y: 15, color: color`6` }); +}); + +onInput("l", () => { //next + setMap(levels[1]); + level = level + 1 + clearText(); + setBackground(space); +}); + +onInput("d", () => { + // Move the player one tile to the right + getFirst(player).x += 1 +}) + +onInput("s", () => { + // Move the player one tile to the right + getFirst(player).y += 1 +}) + +onInput("w", () => { + // Move the player one tile to the right + getFirst(player).y -= 1 +}) + +onInput("a", () => { + // Move the player one tile to the right + getFirst(player).x -= 1 +}) + +afterInput(() => { + const RedFound = tilesWith(player, red); + + const WrongGreenFound = tilesWith(player, WrongGreen); + + const WrongRedFound = tilesWith(player, WrongRed); + + const WrongBlueFound = tilesWith(player, WrongBlue); + + const BlueFound = tilesWith(player, blue); + + const YellowFound = tilesWith(player, yellow); + + const WrongYellowFound = tilesWith(player, WrongYellow); + + const GreenFound = tilesWith(player, green); + + const PinkFound = tilesWith(player, pink); + + if (RedFound.length >= 1) { //go to next level + level = level + 1; + + if (level < levels.length) { //next level + setMap(levels[level]); + clearText(); + } else { //win + clearText(); + setMap(levels[0]); + setBackground(space); + addText("Yay! you win!", { y: 6, color: color`7` }); + addText("Click 'k'", { y: 8, color: color`7` }); + addText("to restart!", { y: 9, color: color`7` }); + } + } + + if (BlueFound.length >= 1) { //go to next level + level = level + 1; + + if (level < levels.length) { //next level + setMap(levels[level]); + clearText(); + } else { //win + clearText(); + setMap(levels[0]); + setBackground(space); + addText("Yay! you win!", { y: 6, color: color`7` }); + addText("Click 'k'", { y: 8, color: color`7` }); + addText("to restart!", { y: 9, color: color`7` }); + } + } + + if (YellowFound.length >= 1) { //go to next level + level = level + 1; + + if (level < levels.length) { //next level + setMap(levels[level]); + clearText(); + } else { //win + clearText(); + setMap(levels[0]); + setBackground(space); + addText("Yay! you win!", { y: 6, color: color`7` }); + addText("Click 'k'", { y: 8, color: color`7` }); + addText("to restart!", { y: 9, color: color`7` }); + } + } + + if (WrongGreenFound.length >= 1) { //lose + oops = oops + 1; + + if (oops = 1) { //loser haha + setMap(levels[0]); + setBackground(black); + addText("Oh no!", { y: 6, color: color`7` }); + addText("Bob died!", { y: 7, color: color`7` }); + addText("Click 'k'", { y: 9, color: color`7` }); + addText("to restart!", { y: 10, color: color`7` }); + } + + } + + if (GreenFound.length >= 1) { //go to next level + level = level + 1; + + if (level < levels.length) { //next level + setMap(levels[level]); + clearText(); + } else { //win + setMap(levels[0]); + setBackground(space); + addText("Yay! you win!", { y: 6, color: color`7` }); + addText("Click 'k'", { y: 8, color: color`7` }); + addText("to restart!", { y: 9, color: color`7` }); + } + } + + if (WrongYellowFound.length >= 1) { //lose + oops = oops + 1; + + if (oops = 1) { //loser haha + clearText(); + setMap(levels[0]); + setBackground(black); + addText("Oh no!", { y: 6, color: color`7` }); + addText("Bob died!", { y: 7, color: color`7` }); + addText("Click 'k'", { y: 9, color: color`7` }); + addText("to restart!", { y: 10, color: color`7` }); + } + + } + + if (PinkFound.length >= 1) { //go to next level + level = level + 1; + + if (level < levels.length) { //next level + setMap(levels[level]); + clearText(); + } else { //win + setMap(levels[0]); + setBackground(space); + addText("Yay! you win!", { y: 6, color: color`7` }); + addText("Click 'k'", { y: 8, color: color`7` }); + addText("to restart!", { y: 9, color: color`7` }); + } + } + +}); + +afterInput(() => { + + const WrongBlueFound = tilesWith(player, WrongBlue); + + if (WrongBlueFound.length >= 1) { //lose + oops = oops + 1; + + if (oops = 1) { //loser haha + setMap(levels[0]); + setBackground(black); + addText("Oh no!", { y: 6, color: color`7` }); + addText("Bob died!", { y: 7, color: color`7` }); + addText("Click 'k'", { y: 9, color: color`7` }); + addText("to restart!", { y: 10, color: color`7` }); + } + + } + + const WrongRedFound = tilesWith(player, WrongRed); + + if (WrongRedFound.length >= 1) { //lose + oops = oops + 1; + + if (oops = 1) { //loser haha + setMap(levels[0]); + setBackground(black); + addText("Oh no!", { y: 6, color: color`7` }); + addText("Bob died!", { y: 7, color: color`7` }); + addText("Click 'k'", { y: 9, color: color`7` }); + addText("to restart!", { y: 10, color: color`7` }); + } + + } + + const WrongPinkFound = tilesWith(player, WrongPink); + + if (WrongPinkFound.length >= 1) { //lose + oops = oops + 1; + + if (oops = 1) { //loser haha + setMap(levels[0]); + setBackground(black); + addText("Oh no!", { y: 6, color: color`7` }); + addText("Bob died!", { y: 7, color: color`7` }); + addText("Click 'k'", { y: 9, color: color`7` }); + addText("to restart!", { y: 10, color: color`7` }); + } + + } + + const WrongGrayFound = tilesWith(player, WrongGray); + + if (WrongGrayFound.length >= 1) { //lose + oops = oops + 1; + + if (oops = 1) { //loser haha + setMap(levels[0]); + setBackground(black); + addText("Oh no!", { y: 6, color: color`7` }); + addText("Bob died!", { y: 7, color: color`7` }); + addText("Click 'k'", { y: 9, color: color`7` }); + addText("to restart!", { y: 10, color: color`7` }); + } + + } + +}); + +afterInput(() => { + if (level == 27) { + addText("Final challenge!", { y: 8, color: color`7` }); + addText("Pick the alien", { y: 9, color: color`7` }); + addText("that is the", { y: 10, color: color`7` }); + addText("same color as you!", { y: 11, color: color`7` }); + } + +}); diff --git a/games/Colour_Game.js b/games/Colour_Game.js index 7f8bae04d4..355b266fca 100644 --- a/games/Colour_Game.js +++ b/games/Colour_Game.js @@ -1,8 +1,8 @@ /* @title: Colour_Game +@author: Thuvaragan @tags: ['endless'] @addedOn: 2022-12-26 -@author: Thuvaragan Instructions: Press J if you see BLUE diff --git a/games/Conquerers.js b/games/Conquerers.js index a663ea8273..54dda65006 100644 --- a/games/Conquerers.js +++ b/games/Conquerers.js @@ -1,8 +1,8 @@ /* @title: Conquerers +@author: Leonard (Omay) @tags: ['multiplayer'] @addedOn: 2022-11-15 -@author: Leonard (Omay) WASD to move selector I to place a boat diff --git a/games/CookieHacker.js b/games/CookieHacker.js new file mode 100644 index 0000000000..acbf2d0394 --- /dev/null +++ b/games/CookieHacker.js @@ -0,0 +1,413 @@ +/* +@title: Cookie Hacker +@author: felixexists +@tags: [] +@addedOn: 2024-09-03 +*/ +const melody = tune` +188.67924528301887, +188.67924528301887: F4-188.67924528301887, +188.67924528301887: F4-188.67924528301887, +188.67924528301887: F4-188.67924528301887 + E4^188.67924528301887, +188.67924528301887: F4-188.67924528301887 + E4^188.67924528301887, +188.67924528301887: F4-188.67924528301887 + E4^188.67924528301887, +188.67924528301887: G4-188.67924528301887, +188.67924528301887: A4-188.67924528301887, +188.67924528301887: B4-188.67924528301887, +188.67924528301887, +188.67924528301887: C5-188.67924528301887, +188.67924528301887: D5-188.67924528301887, +188.67924528301887: C5-188.67924528301887, +188.67924528301887: B4-188.67924528301887, +188.67924528301887: B4^188.67924528301887, +188.67924528301887: B4^188.67924528301887, +188.67924528301887: C5^188.67924528301887, +188.67924528301887: D5^188.67924528301887, +188.67924528301887: E5/188.67924528301887, +188.67924528301887: F5/188.67924528301887, +188.67924528301887: D5/188.67924528301887, +188.67924528301887: D5/188.67924528301887, +188.67924528301887: C5^188.67924528301887, +188.67924528301887: A4^188.67924528301887, +188.67924528301887: G4^188.67924528301887, +188.67924528301887: G4^188.67924528301887, +188.67924528301887: G4^188.67924528301887, +188.67924528301887: F4-188.67924528301887, +188.67924528301887: E4-188.67924528301887, +188.67924528301887: D4-188.67924528301887, +188.67924528301887: D4-188.67924528301887, +188.67924528301887: D4-188.67924528301887` +const playback = playTune(melody, Infinity) +let ui = 'u' +let loading_screen = 'l' +let cookie_big = 'c' +let cookie_small = 's' +let stall = 't' +let social_media = 'x' +let factory = 'f' +let victory = 'v' +let bg = 'b' +let atom = 'a' +let passives = [] + +setLegend( + [ui, bitmap` +................ +......CCCCC..... +.....CCLCCCC.... +.....CCCCLCC.... +.....CCCCCCC.... +.....CCLCCCC.... +.....CCCCLCC.... +......CCCCC..... +................ +........0....... +......DDDDD..... +......D.0....... +......DDDDD..... +........0.D..... +......DDDDD..... +........0.......`, ], + [loading_screen, bitmap` +................ +................ +...4444.44444... +...4....4...4... +...4.44.4...4... +...4..4.4...4... +...4444.44444... +................ +..L..........L.. +.L.L........L.L. +..L..........L.. +................ +................ +................ +................ +................`], + [cookie_big, bitmap` +................ +....CCCCCCCC.... +...CCCCLCCCCC... +..CCCLCCCLCCCC.. +.CCCCCCCCCCCCCC. +.CCLCCCLCLCCCLC. +.CCCCCCCCCCCCCC. +.CCCLCCCCCCCCCC. +.CCCCCCCLCCCLCC. +.CCLCLCCCCCCCCC. +.CCCCCCLCCLCCCC. +.CCCCLCCCCCCCCC. +..CCCCCCCLCCCC.. +...CCCCCCCCCC... +....CCCCCCCC.... +................`], + [cookie_small, bitmap` +................ +................ +..1..........1.. +...1........1... +....1CCCCCC1.... +....CCCCCLCC.... +...CCLCCCCCCC... +...CCCCCLCCLC... +...CCCLCCCCCC... +...CCLCCCLCCC... +...CCCCCCCCCC... +....CCCLCCCC.... +....1CCCCCC1.... +...1........1... +..1..........1.. +................`], + [stall, bitmap ` +................ +3223332223332223 +3223332223332223 +3223332223332223 +..C..........C.. +..C..........C.. +..C..........C.. +..C..........C.. +..C..........C.. +..C..........C.. +.99999999999999. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +.00000000000000.`], + [social_media, bitmap` +0000000000000000 +0242422222232320 +0222222222222220 +0242422222233320 +0244422222232320 +0222220000022220 +0222000777702220 +0220777777702220 +0207777777770220 +0207777777777020 +0220000000000020 +0222222222222220 +0000000000000000 +...0.......0.... +...0.......0.... +...0.......0....`], + [factory, bitmap` +...2.......2.22. +.2222.....22.2.. +2222......2222.. +..11.......11... +..11.......11... +..11.......11... +..11.......11... +.LLLLLLLLLLLLLL. +.L77L77LL77L77L. +.L77L77LL77L77L. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL.`], + [victory, bitmap` +4L7L4LLLLL4L77L4 +4L7L4L777L4L77L4 +4LLL4L777L4L77L4 +44L44L777L4L77L4 +44L44LLLLL4LLLL4 +4444444444444444 +4L4L4L4LLL4LLL4L +4L4L4L44L44L4L4L +4L4L4L44L44L4L4L +4L4L4L44L44L4L44 +4LLLLL4LLL4L4L4L +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444`], + [bg, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`], + [atom, bitmap` +....66666666.... +...6666666666... +..660666666066.. +.66000666600066. +6600006006000066 +6000060000600006 +6000060000600006 +6666666006666666 +6666666666666666 +6666666666666666 +6666666006666666 +6666660000666666 +.66660000006666. +..660000000066.. +...6600000066... +....66666666....`] +) + +setSolids([]) +let money = 990000000 +let cookies = 0 +let level = 0 +let is_in_main_game = 0 +let is_in_waiting_state = 0 +const levels = [ + map` +u... +t... +.... +c...`, map` +l`, map` +v` +] +setMap(levels[1]) +addText("Press S to start", { + x: 2, + y: 13, + color: color`0`, +}) + +/*Loading screen*/ +onInput('s', () => { + if (is_in_main_game == 0) { + setMap(levels[0]) + setBackground(bg) + + clearText() + applyPassives() + is_in_main_game = 1 + } else { + if (is_in_waiting_state == 0) { + cookies += 1 + clearTile(0, 3) + addSprite(0, 3, cookie_small) + is_in_waiting_state = 1 + setTimeout(() => { + clearTile(0, 3) + addSprite(0, 3, cookie_big) + is_in_waiting_state = 0 + }, 100) + + } + } + set_displays(money, cookies) +}) + + +onInput('w', () => { + if (is_in_main_game == 1) { + sell_cookies() + set_displays(money, cookies) + } + +}) + +function set_displays(money, cookies) { + if (is_in_main_game == 1) { + clearText() + addText(money.toString(), { + x: 6, + y: 3, + color: color`0` + }) + addText(cookies.toString(), { + x: 6, + y: 1, + color: color`0` + }) + addText("S ", { + x: 3, + y: 11, + color: color`D` + }) + addText("W ^", { + x: 3, + y: 9, + color: color`D` + }) + addText((sumPassives().toString()).concat("/sec"), { + x: 6, + y: 6, + color: color`5` + }) + + addPurchasables() +}} + +function sell_cookies() { + money += Math.pow(cookies, 1.25) + money = Math.round(money) + cookies -= cookies + +} + +afterInput(() => { + if (is_in_main_game == 1) { + + addPurchasables() + if (money > 1000000000) { + setMap(levels[2]) + clearText() + is_in_main_game = 0 + } + } +}) + +function addPurchasables() { + if (is_in_main_game == 1) { + if (money >= 100) { + addSprite(3, 1, social_media) + addText( + "I ^", { + x: 15, + y: 9, + } + ) + if (money >= 500) { + addSprite(3, 3, factory) + addText( + "K ", { + x: 15, + y: 10, + } + ) + + if (money >= 10000) { + addSprite(1, 3, atom) + addText("J", { + x: 6, + y: 11, + }) + } else { + clearTile(1, 3) + } + } else { + clearTile(3, 3) + clearTile(1, 3) + } + } else { + clearTile(3, 1) + clearTile(3, 3) + clearTile(1, 3) + } +} +} +onInput('i', () => { + if (money >= 100) { + money -= 100 + passives.push(3) + set_displays(money, cookies) + } +}) +onInput('k', () => { + if (money >= 500) { + money -= 500 + passives.push(25) + set_displays(money, cookies) + } +}) +onInput('j', () => { + if (money >= 10000) { + money -= 10000 + passives.push(500) + set_displays(money, cookies) + } +}) + +function sumPassives() { + let n = 0 + for (let p of passives) { + n += p + } + return n + +} + +function applyPassives() { + cookies += sumPassives() + set_displays(money, cookies) + + setTimeout(function() { + applyPassives(); + + }, 1000); +} + diff --git a/games/Cookie_Click!.js b/games/Cookie_Click!.js index caf3932674..659b9d4c8d 100644 --- a/games/Cookie_Click!.js +++ b/games/Cookie_Click!.js @@ -1,8 +1,8 @@ /* @title: Cookie_Click! +@author: briyandyju09 @tags: [] @addedOn: 2023-01-17 -@author: briyandyju09 Use W key to earn and J key to purchase a cookie upgrade diff --git a/games/Countdown_Golf.js b/games/Countdown_Golf.js index 0e9ba48610..b8c7946140 100644 --- a/games/Countdown_Golf.js +++ b/games/Countdown_Golf.js @@ -1,7 +1,7 @@ /* @title: Countdown Golf @author: schoblaska -@tags: ["logic"] +@tags: ['puzzle'] @addedOn: 2024-03-30 Countdown Golf is based on Herugolf diff --git a/games/CowCrossing.js b/games/CowCrossing.js index 56e751bbc3..aec54468e0 100644 --- a/games/CowCrossing.js +++ b/games/CowCrossing.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Cow Crossing @author: GGGalang @tags: [] @addedOn: 2024-06-24 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ //sprites diff --git a/games/Cricket-Dodge.js b/games/Cricket-Dodge.js index ce7d42bb41..17e313a59e 100644 --- a/games/Cricket-Dodge.js +++ b/games/Cricket-Dodge.js @@ -1,8 +1,8 @@ /* @title: Cricket Dodge +@author: Harsh Singh @tags: ['endless'] @addedOn: 2023-01-17 -@author: Harsh Singh Use A and D to move. */ diff --git a/games/Cross_The_Road.js b/games/Cross_The_Road.js index 1f5c6300bf..3571ca4d53 100644 --- a/games/Cross_The_Road.js +++ b/games/Cross_The_Road.js @@ -1,8 +1,8 @@ /* @title: Cross_The_Road +@author: Haneesh Pediredla @tags: ['endless'] @addedOn: 2022-12-27 -@author: Haneesh Pediredla Play:- WASD to move. Dodge the vehicles and reach the finish line. diff --git a/games/Crossy Road.js b/games/Crossy Road.js index 7bdf1fd268..c57b9d0e78 100644 --- a/games/Crossy Road.js +++ b/games/Crossy Road.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Crossy Road @author: Bunnzulu @tags: [] @addedOn: 2024-07-26 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Crossy_Sprig.js b/games/Crossy_Sprig.js index 02f14e4d56..64b0aae6ff 100644 --- a/games/Crossy_Sprig.js +++ b/games/Crossy_Sprig.js @@ -1,10 +1,10 @@ /* - @title: Crossy_Sprig @author: hatanuk @tags: ['endless'] @addedOn: 2024-03-21 + j CONTROLS: w - Up diff --git a/games/CrusaderTheGame.js b/games/CrusaderTheGame.js index 4c440dae56..8d429872be 100644 --- a/games/CrusaderTheGame.js +++ b/games/CrusaderTheGame.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Crusader @author: Skyfall -@tags: ["platformer"] +@tags: ['platformer'] @addedOn: 2024-07-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Cup_Game.js b/games/Cup_Game.js index 9899a82f7a..8f5186dfb0 100644 --- a/games/Cup_Game.js +++ b/games/Cup_Game.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Cup_Game @author: Dante Squires @tags: [] @addedOn: 2024-01-29 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ /* diff --git a/games/Custom_Tic_Tac_Toe.js b/games/Custom_Tic_Tac_Toe.js index d8fef59068..1b5605093e 100644 --- a/games/Custom_Tic_Tac_Toe.js +++ b/games/Custom_Tic_Tac_Toe.js @@ -1,8 +1,8 @@ /* @title: Custom Tic Tac Toe +@author: Cael Ganem @tags: ['multiplayer'] @addedOn: 2023-10-30 -@author: Cael Ganem Controls: -WASD to control the selector diff --git a/games/Dance_Dance_Engine!.js b/games/Dance_Dance_Engine!.js index 41079c91bd..faf337a44c 100644 --- a/games/Dance_Dance_Engine!.js +++ b/games/Dance_Dance_Engine!.js @@ -1,10 +1,10 @@ /* -First time? Check out my code: its not half bad! - @title: Dance Dance Engine!! @author: Shibedev12 -@tags: ["DDR Engine"] +@tags: ['music'] @addedOn: 2024-07-22 +First time? Check out my code: its not half bad! + For Documentation on how to work with this, check out my site! https://shibedevsite.neocities.org/DDE/whatis */ diff --git a/games/Darkening_Descent.js b/games/Darkening_Descent.js index f5c90b56a4..a9c5299195 100644 --- a/games/Darkening_Descent.js +++ b/games/Darkening_Descent.js @@ -1,7 +1,7 @@ /* @title: Darkening Descent @author: noxi -@tags: ["advanced", "roguelite"] +@tags: ['role-playing','adventure'] @addedOn: 2024-07-07 */ diff --git a/games/Davinci-Lit-Demo.js b/games/Davinci-Lit-Demo.js index 4d090d56bf..417f2407a7 100644 --- a/games/Davinci-Lit-Demo.js +++ b/games/Davinci-Lit-Demo.js @@ -2,8 +2,8 @@ @title: Davinci Lit Trivia @author: RubixTV @tags: [] -@img: "" @addedOn: 2024-05-20 +@img: "" */ const player = "p" diff --git a/games/Defend_the_Keep.js b/games/Defend_the_Keep.js index 9d275b3f15..fa168143f2 100644 --- a/games/Defend_the_Keep.js +++ b/games/Defend_the_Keep.js @@ -2,7 +2,7 @@ /* @title: Defend_the_Keep @author: alphaom33 -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-06-04 */ diff --git a/games/Desine_Mini.js b/games/Desine_Mini.js index a633a6adfd..9cd3eec703 100644 --- a/games/Desine_Mini.js +++ b/games/Desine_Mini.js @@ -1,8 +1,8 @@ /* @title: Desine Mini -@tags: ['advanced'] -@addedOn: 2023-11-18 @author: Guy Sandler +@tags: [] +@addedOn: 2023-11-18 full, more playable, unity version: https://webeaftos.olive2.repl.co/ controls: awd, j for attack please do not hold a button diff --git a/games/Destroy_The_Hearts.js b/games/Destroy_The_Hearts.js index 0ed816c1a0..400ad9e54a 100644 --- a/games/Destroy_The_Hearts.js +++ b/games/Destroy_The_Hearts.js @@ -2,7 +2,7 @@ /* @title: Destroy_The_Hearts @author: Deniz Melik Aktın -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-10-09 */ diff --git a/games/Disco.js b/games/Disco.js index 671b3728bc..59b092956a 100644 --- a/games/Disco.js +++ b/games/Disco.js @@ -1,8 +1,8 @@ /* @title: disco +@author: rakshit rangaprasad @tags: [] @addedOn: 2023-03-05 -@author: rakshit rangaprasad How to Play: Watch as the arrows move down the screen. Once the arrows hit the DJ controller, diff --git a/games/Divine_Tree_Man_Saves_A_Forest.js b/games/Divine_Tree_Man_Saves_A_Forest.js index 896a3786d2..bde9d218e4 100644 --- a/games/Divine_Tree_Man_Saves_A_Forest.js +++ b/games/Divine_Tree_Man_Saves_A_Forest.js @@ -1,4 +1,8 @@ /* +@title: Divine Tree Man Saves A Forest +@author: Rohan Pani (13) +@tags: [] +@addedOn: 2024-07-26 The story of this game is to save the forest from invaders like a deadly fungus, Forest fires, and the Zire that started them. Remember to look carefully at each level before startinng them. Getting the pushable items stuck softlocks the game and you must restart from the beggining by pressing i. @@ -12,10 +16,6 @@ Mechanics: There are 7 levels with the 7th one being an end screen. The mechanics are difficult to use, but once you get the hang of it you could finish the game super quickly. -@title: Divine Tree Man Saves A Forest -@author: Rohan Pani (13) -@tags: ["sprig"] -@addedOn: 2024-07-26 Finished on July 13, 2024. */ diff --git a/games/Dodge_The_Rock.js b/games/Dodge_The_Rock.js index 4f67eef648..6baecab3e9 100644 --- a/games/Dodge_The_Rock.js +++ b/games/Dodge_The_Rock.js @@ -1,8 +1,8 @@ /* @title: Dodge_The_Rock +@author: dutamot @tags: [] @addedOn: 2023-03-09 -@author: dutamot */ const player = "p" diff --git a/games/Dodgy-Day.js b/games/Dodgy-Day.js index fb780f0f4f..90876a79d0 100644 --- a/games/Dodgy-Day.js +++ b/games/Dodgy-Day.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Dodgy Day @author: Neelesh Chevuri @tags: [] @addedOn: 2024-07-26 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = 'p' diff --git a/games/DogMaster.js b/games/DogMaster.js index df4773712d..0d26ba5f2d 100644 --- a/games/DogMaster.js +++ b/games/DogMaster.js @@ -1,7 +1,7 @@ /* @title: DogMaster @author: Lenochodik -@tags: ['classic', 'endless', 'catch'] +@tags: ['endless','retro'] @addedOn: 2024-08-04 */ diff --git a/games/DogsvsCats.js b/games/DogsvsCats.js index be1a797938..be0ebc06ca 100644 --- a/games/DogsvsCats.js +++ b/games/DogsvsCats.js @@ -1,8 +1,8 @@ /* @title: Dogs vs Cats +@author: Theodor @tags: ['endless'] @addedOn: 2022-11-12 -@author: Theodor */ const melody = tune ` 500: f4^500 + g5~500, diff --git a/games/Dont Touch the Cat.js b/games/Dont Touch the Cat.js new file mode 100644 index 0000000000..c704ddef32 --- /dev/null +++ b/games/Dont Touch the Cat.js @@ -0,0 +1,590 @@ +/* +@title: Don't Touch the Cat +@author: Adeline Greene +@tags: [] +@addedOn: 2024-09-16 +*/ + +/* +@instructions: use WASD to move +@ use K to capture a colored tile and gain points +@ the game ends if you touch the cat or if the cat touches you +@ the cat's speed will increase as the game progresses +*/ + +const player = "p" +const white = "w" +const red = "r" +const yellow = "y" +const green = "g" +const blue = "b" +const white_cat = "W" +const red_cat = "R" +const yellow_cat = "Y" +const green_cat = "G" +const blue_cat = "B" +const black = "k" + +setLegend( + [ player, bitmap` +..222222222222.. +.22..........22. +22............22 +2..............2 +2..............2 +2..............2 +2..............2 +2..............2 +2..............2 +2..............2 +2..............2 +2..............2 +2..............2 +22............22 +.22..........22. +..222222222222..` ], + [ white, bitmap` +0000000000000000 +000LLLLLLLLLL000 +00LLLLLLLL22LL00 +0LLLLLLLLLLL2LL0 +0LLLLLLLLLLLL2L0 +0LLLLLLLLLLLL2L0 +0LLLLLLLLLLLLLL0 +0LLLLLLLLLLLLLL0 +0LLLLLLLLLLLLLL0 +0L1LLLLLLLLLLLL0 +0L1LLLLLLLLLLLL0 +0LL1LLLLLLLLLLL0 +0LLL1LLLLLLLLLL0 +00LLL111LLLLLL00 +000LLLLLLLLLL000 +0000000000000000` ], + [ red, bitmap` +0000000000000000 +0003333333333000 +0033333333223300 +0333333333332330 +0333333333333230 +0333333333333230 +0333333333333330 +0333333333333330 +0333333333333330 +0383333333333330 +0383333333333330 +0338333333333330 +0333833333333330 +0033388833333300 +0003333333333000 +0000000000000000` ], + [ yellow, bitmap` +0000000000000000 +000FFFFFFFFFF000 +00FFFFFFFF22FF00 +0FFFFFFFFFFF2FF0 +0FFFFFFFFFFFF2F0 +0FFFFFFFFFFFF2F0 +0FFFFFFFFFFFFFF0 +0FFFFFFFFFFFFFF0 +0FFFFFFFFFFFFFF0 +0F6FFFFFFFFFFFF0 +0F6FFFFFFFFFFFF0 +0FF6FFFFFFFFFFF0 +0FFF6FFFFFFFFFF0 +00FFF666FFFFFF00 +000FFFFFFFFFF000 +0000000000000000` ], + [ green, bitmap` +0000000000000000 +000DDDDDDDDDD000 +00DDDDDDDD22DD00 +0DDDDDDDDDDD2DD0 +0DDDDDDDDDDDD2D0 +0DDDDDDDDDDDD2D0 +0DDDDDDDDDDDDDD0 +0DDDDDDDDDDDDDD0 +0DDDDDDDDDDDDDD0 +0D4DDDDDDDDDDDD0 +0D4DDDDDDDDDDDD0 +0DD4DDDDDDDDDDD0 +0DDD4DDDDDDDDDD0 +00DDD444DDDDDD00 +000DDDDDDDDDD000 +0000000000000000` ], + [ blue, bitmap` +0000000000000000 +0005555555555000 +0055555555225500 +0555555555552550 +0555555555555250 +0555555555555250 +0555555555555550 +0555555555555550 +0555555555555550 +0575555555555550 +0575555555555550 +0557555555555550 +0555755555555550 +0055577755555500 +0005555555555000 +0000000000000000` ], + [ white_cat, bitmap` +0000000000000000 +000LLLLLLLLLL000 +00LLLLLLLL22LL00 +0LLLLLLLLLLL2LL0 +0LLL00LLL00LL2L0 +0LLL0L000L0LL2L0 +0LLL0LLLLL0LLLL0 +0LL00L0L0L00LLL0 +0LLL0L0L0L0LL000 +0L100LLLLL000LL0 +0L1LL0LLL0LL0L00 +0LL1L0LLLL00L0L0 +0LLL10LLLLL0L0L0 +00LLL111LLL00L00 +000LL0L0LLL00000 +0000000000000000` ], + [ red_cat, bitmap` +0000000000000000 +0003333333333000 +0033333333223300 +0333333333332330 +0333003330033230 +0333030003033230 +0333033333033330 +0330030303003330 +0333030303033000 +0380033333000330 +0383303330330300 +0338303333003030 +0333803333303030 +00333L8L33300300 +0003303033300000 +0000000000000000` ], + [ yellow_cat, bitmap` +0000000000000000 +000FFFFFFFFFF000 +00FFFFFFFF22FF00 +0FFFFFFFFFFF2FF0 +0FFF00FFF00FF2F0 +0FFF0F000F0FF2F0 +0FFF0FFFFF0FFFF0 +0FF00F0F0F00FFF0 +0FFF0F0F0F0FF000 +0F600FFFFF000FF0 +0F6FF0FFF0FF0F00 +0FF6F0FFFF00F0F0 +0FFF60FFFFF0F0F0 +00FFFL6LFFF00F00 +000FF0F0FFF00000 +0000000000000000` ], + [ green_cat, bitmap` +0000000000000000 +000DDDDDDDDDD000 +00DDDDDDDD22DD00 +0DDDDDDDDDDD2DD0 +0DDD00DDD00DD2D0 +0DDD0D000D0DD2D0 +0DDD0DDDDD0DDDD0 +0DD00D0D0D00DDD0 +0DDD0D0D0D0DD000 +0D400DDDDD000DD0 +0D4DD0DDD0DD0D00 +0DD4D0DDDD00D0D0 +0DDD40DDDDD0D0D0 +00DDDL4LDDD00D00 +000DD0D0DDD00000 +0000000000000000` ], + [ blue_cat, bitmap` +0000000000000000 +0005555555555000 +0055555555225500 +0555555555552550 +0555005550055250 +0555050005055250 +0555055555055550 +0550050505005550 +0555050505055000 +0570055555000550 +0575505550550500 +0557505555005050 +0555705555505050 +00555L7L55500500 +0005505055500000 +0000000000000000` ], + [ black, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` ], +) + +setSolids([]) + +let level = 0; +let score = 0; +let high_score = 0; +let onStart = true; +let lose = false; +let lose_seen = false; +let spawn_count = 3; +let speed = 100; +let speeds = [75, 60, 50, 42, 35, 25, 20, 18, 18, 15, 12, 12, 10, 8, 8, 8, 5, 5, 5, 5, 5, 5, 5, 3, 2, 1]; +let speed_index = 0; +let time_elapsed_rotation = 1; +let time_elapsed = 1; +let cat_place = 0; +let cat_x = 5; +let cat_y = 3; +const colors = [white, red, yellow, green, blue]; +const cats = [white_cat, red_cat, yellow_cat, green_cat, blue_cat]; +const freq = [blue, green, green, yellow, yellow, yellow, red, red, red, red, red, red]; +const freq_cat = [blue_cat, green_cat, green_cat, yellow_cat, yellow_cat, yellow_cat, red_cat, red_cat, red_cat, red_cat, red_cat, red_cat]; +const despawn_rate = 10; +let grid = [ [ -1, -1, -1, -1 ], + [ -1, -1, -1, -1 ], + [ -1, -1, -1, -1 ], + [ -1, -1, -1, -1 ] ]; +let grid_color = [ [ 0, 0, 0, 0 ], + [ 0, 0, 0, 0 ], + [ 0, 0, 0, 0 ], + [ 0, 0, 0, 0 ] ]; + +const levels = [ + map` +kkkkkk +kkkkkk +kRygbk +kkkkkk`, + map` +pkwwww +kkwwww +kkwwww +kkwwwW`, + map` +kkkkk +kkkkk +kkWkk +kkkkk`, +] + +setMap(levels[level]) + +setPushables({ +}) + +onInput("w", () => { + if (!onStart && !lose) { + getFirst(player).y -= 1 + } +}) +onInput("s", () => { + if (!onStart && !lose) { + getFirst(player).y += 1 + } +}) +onInput("a", () => { + if (!onStart && !lose && getFirst(player).x != 2) { + getFirst(player).x -= 1 + } +}) +onInput("d", () => { + if (!onStart && !lose) { + getFirst(player).x += 1 + } +}) + +onInput("k", () => { + if (!onStart && !lose) { + for (let i = 0; i < cats.length; i++) { + if (tilesWith(player, cats[i]).length > 0) { + lose = true; + break; + } + } + if (tilesWith(player, red).length > 0) { + score += 1; + } else if (tilesWith(player, yellow).length > 0) { + score += 2; + } else if (tilesWith(player, green).length > 0) { + score += 5; + } else if (tilesWith(player, blue).length > 0) { + score += 10; + } + + let player_x = getFirst(player).x; + let player_y = getFirst(player).y; + clearTile(player_x, player_y); + addSprite(player_x, player_y, white); + addSprite(player_x, player_y, player); + grid[player_x-2][player_y] = -1; + + clearText() + addText("Score:", { + x: 1, + y: 7, + color: color`2` + }) + addText("" + score, { + x: 1, + y: 8, + color: color`2` + }) + } +}) + +onInput("l", () => { + if (lose) { + looseSeen = true; + } +}) + +afterInput(() => { + if (onStart) { + onStart = false + setMap(levels[1]) + clearTile(0, 0) + addSprite(0, 0, black) + addSprite(2, 0, player) + clearText() + addText("Score:", { + x: 1, + y: 7, + color: color`2` + }) + addText("" + score, { + x: 1, + y: 8, + color: color`2` + }) + } else if (lose && looseSeen) { + lose = false + onStart = true + setMap(levels[0]) + clearText() + cat_place = 0 + time_elapsed_rotation = 1 + time_elapsed = 1 + looseSeen = false + cat_x = 5 + cat_y = 3 + speed = 100 + speed_index = 0 + score = 0 + } +}) + +function spawnColors() { + let rand_x = Math.floor(Math.random() * 4) + 2; + let rand_y = Math.floor(Math.random() * 4); + let player_x = getFirst(player).x; + let player_y = getFirst(player).y; + let rand_sprite = Math.floor(Math.random() * freq.length); + clearTile(rand_x, rand_y) + if (rand_x != cat_x || rand_y != cat_y) { + addSprite(rand_x, rand_y, freq[rand_sprite]); + } else { + addSprite(rand_x, rand_y, freq_cat[rand_sprite]); + } + + if (rand_sprite > 5) { + grid[rand_x-2][rand_y] = despawn_rate * 7; + grid_color[rand_x-2][rand_y] = 1; + } else if (rand_sprite > 2) { + grid[rand_x-2][rand_y] = despawn_rate * 4; + grid_color[rand_x-2][rand_y] = 2; + } else if (rand_sprite > 0) { + grid[rand_x-2][rand_y] = despawn_rate * 2; + grid_color[rand_x-2][rand_y] = 3; + } else { + grid[rand_x-2][rand_y] = despawn_rate * 1; + grid_color[rand_x-2][rand_y] = 4; + } + + if ((rand_x == player_x) && (rand_y == player_y)) { + addSprite(player_x, player_y, player); + } +} + +function despawnColors() { + let player_x = getFirst(player).x; + let player_y = getFirst(player).y; + + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 4; j++) { + if (grid[i][j] == 0) { + clearTile(i+2, j); + + if (i+2 == cat_x && j == cat_y) { + addSprite(i+2, j, white_cat); + } else { + addSprite(i+2, j, white); + } + + if ((i+2 == player_x) && (j == player_y)) { + addSprite(player_x, player_y, player); + } + } + if (grid[i][j] >= 0) { + grid[i][j] -= 1; + } + } + } +} + +function moveCat() { + let player_x = getFirst(player).x; + let player_y = getFirst(player).y; + clearTile(cat_x, cat_y) + addSprite(cat_x, cat_y, colors[grid_color[cat_x-2][cat_y]]) + if (cat_x > player_x) { + cat_x -= 1; + } else if (cat_x < player_x) { + cat_x += 1; + } else if (cat_y > player_y) { + cat_y -= 1; + } else if (cat_y < player_y) { + cat_y += 1; + } + clearTile(cat_x, cat_y) + addSprite(cat_x, cat_y, cats[grid_color[cat_x-2][cat_y]]) + if ((cat_x == player_x) && (cat_y == player_y)) { + addSprite(player_x, player_y, player); + lose = true; + } +} + +function rotateCat() { + clearTile(cat_place+1, 2) + addSprite(cat_place+1, 2, colors[cat_place+1]) + if (cat_place == 3) { + cat_place = -1; + } + cat_place += 1; + clearTile(cat_place+1, 2) + addSprite(cat_place+1, 2, cats[cat_place+1]) +} + +let gameLoop = setInterval(() => { + if (!onStart && !lose) { + if (spawn_count == 5) { + spawnColors() + spawn_count = -1; + } + if (speed > 1 && time_elapsed % 10 == 0) { + speed_index += 1; + speed = speeds[speed_index]; + } + if (time_elapsed % speed == 0) { + moveCat() + } + let player_x = getFirst(player).x; + let player_y = getFirst(player).y; + if ((cat_x == player_x) && (cat_y == player_y)) { + lose = true; + } + despawnColors() + spawn_count += 1; + time_elapsed += 1; + } else if (lose) { + clearText() + setMap(levels[2]) + if (score >= high_score) { + high_score = score; + addText("NEW High Score!", { + x: 3, + y: 5, + color: color`4` + }) + } + addText("Uh, oh...", { + x: 6, + y: 1, + color: color`2` + }) + addText("You touched the cat!", { + x: 0, + y: 2, + color: color`2` + }) + addText("Score: " + score, { + x: 5, + y: 6, + color: color`2` + }) + + addText("Press L to restart", { + x: 1, + y: 13, + color: color`3` + }) + } else if (onStart) { + if (time_elapsed_rotation % 8 == 0) { + rotateCat() + } + addText("Don't Touch the Cat!", { + x: 0, + y: 1, + color: color`2` + }) + addText("High Score: ", { + x: 4, + y: 4, + color: color`2` + }) + addText("" + high_score, { + x: 4, + y: 5, + color: color`2` + }) + addText("Pts:", { + x: 0, + y: 10, + color: color`2` + }) + addText("1", { + x: 4, + y: 10, + color: color`2` + }) + addText("2", { + x: 8, + y: 10, + color: color`2` + }) + addText("5", { + x: 11, + y: 10, + color: color`2` + }) + addText("10", { + x: 14, + y: 10, + color: color`2` + }) + addText("Press an input", { + x: 3, + y: 12, + color: color`3` + }) + addText("to start", { + x: 6, + y: 13, + color: color`3` + }) + time_elapsed_rotation += 1; + } +}, 100); diff --git a/games/DontGetBurnt.js b/games/DontGetBurnt.js index 1c22ee773e..855fff66ac 100644 --- a/games/DontGetBurnt.js +++ b/games/DontGetBurnt.js @@ -1,8 +1,8 @@ /* @title: Don't Get Burnt! -@tags: [''] -@addedOn: 2023-05-28 @author: Alexandra Miller, Mariia Tymoshenko, Elaine Liu, Shenelle Jayakody, Ariane Clarke +@tags: [] +@addedOn: 2023-05-28 Use WASD keys to move Crummington and dodge the evil toasters! Try to collect jam jars, they boost your score diff --git a/games/Doomed.js b/games/Doomed.js index 6a7493a18c..34a81b55e7 100644 --- a/games/Doomed.js +++ b/games/Doomed.js @@ -1,7 +1,7 @@ /* @title: Doomed @author: m5kro -@tags: ['singleplayer', 'shooter'] +@tags: ['action'] @addedOn: 2024-07-24 */ const playerUp = "u"; diff --git a/games/Dragon-Rush.js b/games/Dragon-Rush.js index 52c59bed5b..edb10fd1e0 100644 --- a/games/Dragon-Rush.js +++ b/games/Dragon-Rush.js @@ -2,7 +2,7 @@ /* @title: Dragon-Rush @author: Xhaiden, Aaron, and Brenden -@tags: ['WIP'] +@tags: [] @addedOn: 2023-07-18 */ diff --git a/games/Dragon_Fest.js b/games/Dragon_Fest.js index 827ba27a1c..9c31923169 100644 --- a/games/Dragon_Fest.js +++ b/games/Dragon_Fest.js @@ -1,8 +1,8 @@ /* @title: Dragon_Fest +@author: Peyeyey @tags: ['endless'] @addedOn: 2022-12-27 -@author: Peyeyey */ const player = "p"; diff --git a/games/Duck_Hunt.js b/games/Duck_Hunt.js index c1a2d09b0f..3907b6d6cd 100644 --- a/games/Duck_Hunt.js +++ b/games/Duck_Hunt.js @@ -1,9 +1,9 @@ // SPDX-License-Identifier: BSD-3-Clause OR MIT /* @title: DCKHNT +@author: el @tags: [] @addedOn: 2023-03-25 -@author: el */ /* DCKHNT*/ diff --git a/games/Dungeon.js b/games/Dungeon.js index 95d6ea4675..3e7d6acbba 100644 --- a/games/Dungeon.js +++ b/games/Dungeon.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Dungeon @author: Jonas07123 @tags: [] -@img: "" @addedOn: 2024-05-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ const background = "u" diff --git a/games/Dungeon_Master.js b/games/Dungeon_Master.js new file mode 100644 index 0000000000..bd58b1f940 --- /dev/null +++ b/games/Dungeon_Master.js @@ -0,0 +1,835 @@ +/* +@title: Dungeon_Master +@author: BrandenLordNov +@tags: [] +@addedOn: 2024-08-28 +*/ + +const black = "-" +const health = "h" +const heart = "H" +const player = "p" +const star = "s" +const key = "k" +const zombie = "z" +const wall = "w" +const door = "d" +const box = "b" +const lbox ="l" +const exit0 = "0" +const exit1 = "1" +const exit2 = "2" +const exit3 = "3" +const floor = "f" + +setLegend( + [ health, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000330000330000 +0003333003333000 +0033333333333300 +0033333333333300 +0033333333333300 +0033333333333300 +0003333333333000 +0003333333333000 +0000333333330000 +0000033333300000 +0000003333000000 +0000000000000000 +0000000000000000`], + [ black, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [ wall, bitmap` +L0L00LL00LL00L0L +LLLLLLL0L0LLLL00 +LLLLL0L0LLLLLL10 +LL0LLL1L0LL00LL0 +LLLLLL100LLLLL10 +LLLLL110LLLLL110 +L11L11L0LL1L11L0 +0000000000000000 +LL0L0LL00L0001L0 +LLLLLL10LLLLLL10 +LLLLLLL00LLL1LL0 +LL00LL10LLLL0L10 +LLLL1LL0LLL0LL10 +LLLLL110LL1LL110 +L1L11110L1L11110 +0000000000000000`], + [ door, bitmap` +L00CCCCCCCCCC0LL +L0CC999C999CCC0L +0CCCC99C999C9C0L +0C9C999C9C9C99C0 +0C9C99CC9C9C9CC0 +L99C999C999C990L +90LCC99C99CC0L9C +0L90L99C990L9C9C +C99CC01L1LC9900C +999C99L0L9C99C0C +0L9C0L1L10L99C9C +990L9C9C99C0LC9C +0L9C99CC99C9C0LC +0L9C999C99C99990 +C99C99CC99C9999C +CCCCCCCCCCCCCCCC`], + [ exit0, bitmap` +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10 +LL1LL1LL1LL1LL1L +1111111111111111 +1L11LLL11LLL11L1 +11011L1011L10111 +1100011000110001 +1000110001100011 +11101L1101L11011 +1L11LLL11LLL11L1 +1111111111111111 +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10`], + [ exit1, bitmap` +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10 +LL1LL1LL1LL1LL1L +1111111111111111 +1L51LLL11LLL11L1 +11751L1011L10111 +15D2751000110001 +572D510001100011 +11571L1101L11011 +1L15LLL11LLL11L1 +1111111111111111 +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10`], + [ exit2, bitmap` +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10 +LL1LL1LL1LL1LL1L +1111111111111111 +1L51LLL51LLL11L1 +11751L1751L10111 +15D2755D27510001 +572D5572D5100011 +11571L1571L11011 +1L15LLL15LLL11L1 +1111111111111111 +0L10L10L10L10L10 +0L10L10L10L10L10 +0L10L10L10L10L10`], + [ exit3, bitmap` +0L10L10L10L10L10 +0L10L10L10L10L10 +00L00L00L00L00L0 +0000077000000000 +0000700047777000 +0700774427000000 +0700752554477700 +0074755005557077 +0072450000524000 +7007500000052400 +0707500000052070 +0074750000547007 +0007555005574007 +0700722552507007 +0077744477007000 +0000077470070000`], + [ box, bitmap` +CCCCCCCCCCCCCCCC +CLC9999999999CLC +CCCC9CCC9CCCCCCC +C9CCC999999CCC9C +CCCCLC9CC9CLC9CC +C999CCC99CCC9999 +C9999CLCCLC9999C +CCCCC9CCCC9CC9CC +C999C9CCCC99999C +C9999CLCCLC9CCCC +CC9CCCC99CCC9999 +C99CLC9CC9CLC99C +C9CCC999999CCC9C +CCCC9CC9CCC9CCCC +CLC9999999999CLC +CCCCCCCCCCCCCCCC`], + [ lbox, bitmap` +C999999C999999CC +CCCCCCCCCCCCCCC9 +9C999999999C99C9 +9C999999999999C9 +9CC9CCCCCCC9CCC9 +9C999999999999CC +CC999C999CC999C9 +9C999999999999C9 +9CCCCCCCC9CCCCC9 +9C999999999999C9 +CC999999999999CC +9CCCCCC9CCCCC9C9 +9C999999999999C9 +9C9C9999999C99C9 +9CCCCCCCCCCCCCCC +CC99999C9999999C`], + /*[ player, bitmap` +..........CCCC.. +........CCCCC... +.......CCCCC.... +......CCCCC..... +......CCCCC..... +.C...CCCCCCC.... +.C..CCCCCCCCCC.. +.CC...000000.... +..C..02222200... +..C..02020220... +..CC.0222222CC.. +...C.02222220C.. +...C..CC6CCCCCC. +.......00000CCCC +.......0...0.CCC +.....000...000..` ],*/ + [ player, bitmap` +.........CCCC... +........CCCC.... +.......CCCC..... +......CCCCC..... +.C...CCCCCCC.... +.C..CCCCCCCCCC.. +.CC...000000.... +..C..02222200... +..C..02020220... +..CC.0222222CC.. +...C.0222222CC.. +...C..0000CCCCC. +.......C6CCCCCCC +.......00000CCCC +.......0...0.CCC +.....000...000..` ], + [ zombie, bitmap` +................ +........LLL..... +......LLLLLLL... +.L...LLDDDDFLL.. +.L..LDD0DFDDLL.. +.L...DDLFD0DD... +.L..DFDDDDLDDFD. +.DFDDDF3CDDDFDFD +.L...D300CDFDF.D +0L0..0D0C03DDD.. +.0....000DD00... +.C....D000000... +.C....DD..00D... +......FD...FD... +......00...DF... +.....000...000..`], + [ heart, bitmap` +................ +................ +................ +....33....33.... +...3333..3333... +..333333333333.. +..333333333333.. +..333333333333.. +..333333333333.. +...3333333333... +...3333333333... +....33333333.... +.....333333..... +......3333...... +................ +................`], + [ star, bitmap` +................ +.......5........ +......55........ +......555....... +......5755...... +.....5D7D55..... +....555275D555.. +...55D722277555. +.555772227D55... +..555D572555.... +.....55D7D5..... +......5575...... +.......555...... +........55...... +........5....... +................`], + [ key, bitmap` +................ +................ +................ +................ +................ +................ +................ +...666.......... +..66.66......... +..6...6666666... +..66.66..6.66... +...666.......... +................ +................ +................ +................`], + [ floor, bitmap` +LLLLLL1LL111111L +L1L111111111111L +L11111111111111L +LL1111111111112L +L111111111111111 +111111111111112L +111111111111111L +L11111111111112L +111111111111111L +111111111111112L +1111111111111221 +111111111111112L +L11111111111211L +L111111112111221 +111122121121221L +LL1LL11LLLL1LL1L`] +) +let level = 0; +const levels = [ + /* map` +hhhzzzzzzzzzzzzzs +szzzzzzzzzzzzzzzz +zzzzzz.zzzzzzzzzz +zzzz.....zzzzzzzz +zzz.......zzzzzzz +zzz.......zzzzzzz +zz....p....zzzzzz +zzz.......zzzzzzz +zzz.......zzzzzzz +zzzz.....zzzzzzzz +zzzzzz.zzzzzzzzzz +szzzzzzzzzzzzzzz0`, + map` +....z.... +....l.... +....d.... +......... +zld.p.dlz +......... +....d.... +....l.... +....z....`, + map` +...w...w...w...w.k.ww +...w...w...w...w.z.ww +wdwwwdwwwdwwwdwwwlwww +p.................... +wdwwwwwwwwwwwwwwwdwww +..w...ww.bz.zww...... +.ww...w..wdwz.w.wwww. +.dd...d.wwdwwzd.w..w. +dwwwwwwwwwdwwww.w..w. +......w.......w.w..w. +......w.......w....w. +......w.......w.wwww. +......w.......w.w.... +......w..wdw..w.w.... +......w..w0w..w.w....`,//daf */ + map` +hhhwww +p..... +wwwww. +3.w... +w.w.w. +w...w.`,//Level 1 + map` +hhh..s +www.ww +.p.... +.ww.w. +sws.w. +wwwww. +w0....`,//Level 2 + map` +hhhwpwswk +kwkw.w.w. +.w.w.wdw. +......... +wdwwdwwdw +...wkw... +.s.w0w.s.`,//Level 3 + map` +hhhwwww +p..ww0k +ww.wwwd +sw.wkw. +swkw.wd +.d.w... +ww.w.wd +kw.w.wk +kd.d.ws`,//Level 4 + map` +hhhwwww +p.l.k.w +dwwwwww +.l.ls.d +www.wwd +.kll... +2.bk..w`,//Level 5 + map` +hhhwww +.s.www +dwbds1 +p.lwww +.llkk. +..wwww`,//Level 6 + map` +hhhpbl... +wwww.w.ww +s..bb.blk +.l.bl..l. +..b.b.... +wd.wwwwww +s...b.l.1`,//Level 7 + map` +hhhw..... +wwww.w.zk +p..d.w... +ww.wwwwdw +...ws.... +.k.wzs..0 +.z.wsz...`,//Level 8 + map` +hhhksww.H..wwk.. +wwwwzww..z.ww... +p..w.wwz...ww..z +ww.w.w.......... +ww.w.w.wwwwdwwww +z......ws...wwww +.wdwww.w.wwwwwHz +.wzsHw.w..z.wws. +.wwwww.wwww..w.. +k...ww.ww0w..w.z +www....wwzw..wwd +kz..w.zww.dz....`,//Level 9 + map` +hhh.sbdwwwww +0wwww....www +kwz..bkwdwww +dw.wwwkks.zw +dw.wkwwwwwdw +dwdwkwwwwkbk +.k...dkdzwkw +wdw.bwww.w.w +wdww.www.www +wswp.....www`,//Level 10 + map` +hhhwwwwwwww +.ksw.k.wkkb +blld.z.dlbk +...w.b.wb.z +wdwww.www.w +p.........0 +wbwwwdwwwdw +bsbw.b.wz.. +.lldbzbd.bb +.bkwk..w.ds`,//Level 11 + map` +hhhw.w..zw.zz +wwww.d.z.dz.0 +kz...w..Hw..z +wwww.wwwwwwww +p....d..wsz.b +ww.www.kwbbl. +.....ws.w.... +.www.wwww...w +.zkw.z..lz..s`,//Level 12 + map` +hhh..b..k +pb.l..dbk +..kwdwwb. +wwwwdwwww +sz..z..z. +z.......z +...z...z. +z.zwzwz.z +sz.w0w.zs`,//Level 13 + map` +hhhwwwww.w... +www....llk.kk +p.dbkwwwbwws. +..w..l..k.wbl +bwwwwwwwwww.b +..wz.z.z.sw.s +..w.z.z.z.w.. +.bwwwwdwwwwbk +llw0dz...ddd. +..www..z..wlb +k.w..z..z.w.. +..w.z.....w.b +wdwwwwwwwww.b +..b.b....d... +.l..klb..d...`,//Level 14 + map` +hhhp....z... +wwwdwwwwwww. +......dddswz +zwwwwwwwwww. +kw.....z.... +zwzwwwwwwdwd +kw.wszdzdzwz +ww.wwwwwwwzz +zd.d...wkwkk +zwzwzw.wkwkk +zwzwzw.wdwww +swkwkw.d.kk0`,//Level 15 + /* map` +hhhw...wpw...w. +wwww...w.w...w. +...w...w.w...w. +...wwdww.wwdww. +.............w. +w.wwwwww.ww.ww. +.......w.w...w. +.......w.w...w. +.......w.wwwww. +............... +............... +...............`,//Level 16*/ +]; + +setMap(levels[level]) +setBackground("f") + +//global variables +let moveX; +let moveY; +let keysHeld = 0; +let playerHealth = 3; + +//set solids +setSolids([ black, health, wall, exit0, exit1, exit2, player, zombie, box, lbox]); + +//set pushables +setPushables({ + [player]: [box, lbox], + [box]: [player, lbox], + [lbox]: [player, zombie, lbox], + [zombie]: [lbox], +}) + +//player movement +onInput("s", () => { + moveX = 0 + moveY = 1 + getFirst(player).y += 1 +}) +onInput("w", () => { + moveX = 0 + moveY = -1 + getFirst(player).y -= 1 +}) +onInput("a", () => { + moveX = -1 + moveY = 0 + getFirst(player).x -= 1 +}) +onInput("d", () => { + moveX = 1 + moveY = 0 + getFirst(player).x += 1 +}) +//attack +onInput("i", () => { + let checkedAll = false; + let i = 0; + let zombs = getAll(zombie); + while(i { + setMap(levels[level]) + keysHeld = 0; + playerHealth = 3; + clearText() + gameLoop +}) + + + afterInput(() => { + + checkColision(moveX,moveY); + +}) + +function checkColision(changeX, changeY){ + let p = getFirst(player); + + //if thing is in door + if(getFirst(door) !== undefined){ + let doors = getAll(door); + let boxes = getAll(box); + let lboxes = getAll(lbox); + //cycle doors + for (let i = 0; i < doors.length; i++) { + + //if player is in door + if (doors[i].x == p.x && doors[i].y == p.y) { + if(keysHeld > 0){ + clearTile(p.x,p.y) + addSprite(p.x,p.y,player) + keysHeld--; + }else{ + getFirst(player).x -= changeX + getFirst(player).y -=changeY + } + } + + //if box is in door + if(getFirst(box) !== undefined){ + for (let j = 0; j < boxes.length; j++) { + if((doors[i].x == boxes[j].x) && (doors[i].y == boxes[j].y)){ + //move box + getAll(box)[j].x -= changeX; + getAll(box)[j].y -= changeY; + } + } + } + + //if lbox is in door + for (let j = 0; j < lboxes.length; j++) { + if((doors[i].x == lboxes[j].x) && (doors[i].y == lboxes[j].y)){ + //addText("daf",{x: 0, y: 0, color: color`6`}) + //check if lbox will be in box + for (let k = 0; k < boxes.length; k++) { + if((lboxes[j].x-changeX == boxes[k].x) && (lboxes[j].y-changeY == boxes[k].y)){ + //if so move box + getAll(box)[k].x -= changeX; + getAll(box)[k].y -= changeY; + } + } + //move lbox + getAll(lbox)[j].x -= changeX; + getAll(lbox)[j].y -= changeY; + if(changeX == -1){ + addText("-1",{x: 4, y: 4, color: color`6`}) + } + } + } + } + + } + + //If player is on star + if(getFirst(star) !== undefined){ + let stars = getAll(star); + for (let i = 0; i < stars.length; i++) { + if (stars[i].x == p.x && stars[i].y == p.y) { + getAll(star)[i].remove(); + updateExit(); + } + } + } + + //If player is on key + if(getFirst(key) !== undefined){ + let keys = getAll(key); + for (let i = 0; i < keys.length; i++) { + if (keys[i].x == p.x && keys[i].y == p.y) { + getAll(key)[i].remove(); + keysHeld++; + } + } + } + + //If player is on heart + if(getFirst(heart) !== undefined){ + let hearts = getAll(heart); + for (let i = 0; i < hearts.length; i++) { + if (hearts[i].x == p.x && hearts[i].y == p.y) { + getAll(heart)[i].remove(); + playerHealth++; + } + } + } + + //If thing is in exit portal + if(getFirst(exit3) != undefined){ + let exit = getFirst(exit3) + //player + if(p.x == exit.x && p.y == exit.y){ + if (level < levels.length) { + level++; + playerHealth = 3; + setMap(levels[level]) + } else { + addText("You won!", { + x: 10, + y:4, + color: color`3` + }) + } + } + //box + if(getFirst(box) !== undefined){ + let boxes = getAll(box) + for (let j = 0; j < boxes.length; j++) { + if((exit.x == boxes[j].x) && (exit.y == boxes[j].y)){ + //delete box + getAll(box)[j].remove(); + } + } + } + //lbox + if(getFirst(lbox) !== undefined){ + let lboxes = getAll(lbox) + for (let j = 0; j < lboxes.length; j++) { + if((exit.x == lboxes[j].x) && (exit.y == lboxes[j].y)){ + //delete box + getAll(lbox)[j].remove(); + } + } + } + } +} + +function updateExit(){ + if(getFirst(exit0) != undefined){ + getFirst(exit0).type = '1' + }else if(getFirst(exit1) != undefined){ + getFirst(exit1).type = '2' + }else if(getFirst(exit2) != undefined){ + getFirst(exit2).type = '3' + } +} + +function playerHearts(){ + clearTile(0,0) + clearTile(1,0) + clearTile(2,0) + addSprite(0,0,black) + addSprite(1,0,black) + addSprite(2,0,black) + if(playerHealth < 1){ + addText("You died!", { + x: 10, + y:4, + color: color`3` + }) + getFirst(player).remove(); + } if(playerHealth > 0){ + addSprite(0,0,health) + } if(playerHealth > 1){ + addSprite(1,0,health) + } if(playerHealth > 2){ + addSprite(2,0,health) + } +} + +function zombieInDoor(i,moveX,moveY){ + + let doors = getAll(door); + for (let j = 0; j < doors.length; j++) { + if(getAll(zombie)[i].x == doors[j].x && getAll(zombie)[i].y == doors[j].y){ + getAll(zombie)[i].y -= moveY + getAll(zombie)[i].x -= moveX + } + } +} + + +var gameLoop = setInterval(() => { + if(getFirst(player) !== undefined){ + let p = getFirst(player); + + //zombies + if(getFirst(zombie) !== undefined){ + let zombs = getAll(zombie); + //loop all zombies + for (let i = 0; i < zombs.length; i++) { + let distX = p.x - zombs[i].x; + let distY = p.y - zombs[i].y; + let moveX = 0; + let moveY = 0; + + //attack player + if(Math.abs(distX) <= 1 && Math.abs(distY) <= 1){ + playerHealth--; + } + + //Movement + //If player is in Range + if( Math.sqrt( Math.pow(distX,2) + Math.pow(distY,2) ) <= 4){ + //move in direction with greater distance + if( Math.abs(distX) >= Math.abs(distY) ){ + //move + moveX = Math.sign(distX); + getAll(zombie)[i].x += moveX + zombieInDoor(i,moveX,0) + //if zombie couldn't move, move in the other direction + if( getAll(zombie)[i].x == zombs[i].x ){ + moveX = 0; + moveY = Math.sign(distY) + getAll(zombie)[i].y += moveY + zombieInDoor(i,0,moveY) + } + }else{ + + getAll(zombie)[i].y += Math.sign(distY) + zombieInDoor(i,0,Math.sign(distY)) + //if zombie couldn't move, move in the other direction + if( getAll(zombie)[i].y == zombs[i].y ){ + getAll(zombie)[i].x += Math.sign(distX) + zombieInDoor(i,Math.sign(distX),0) + } + } + //if zombie is in exit portal + if(getFirst(exit3) != undefined){ + if(zombs[i].x == getFirst(exit3).x && zombs[i].y == getFirst(exit3).y){ + clearTile(zombs[i].x,zombs[i].y) + addSprite(zombs[i].x,zombs[i].y,exit3) + } + } + if(moveX == -1){ + addText("-1",{x: 4, y: 4, color: color`6`}) + } + checkColision(moveX,moveY); + } + } + } + + //player hearts + playerHearts() + } + }, 300); + diff --git a/games/EasyPeasy.js b/games/EasyPeasy.js index b5f97e333e..9cabb5100a 100644 --- a/games/EasyPeasy.js +++ b/games/EasyPeasy.js @@ -1,4 +1,8 @@ /* +@title: Easy Peasy +@author: ChasedDraco +@tags: ['simulation'] +@addedOn: 2024-08-20 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started @@ -8,10 +12,6 @@ You start off with 2 money; buy lemons to squeeze with "I"; squeeze the lemons w "W", "S", and "D" are used for purchasing upgrades. -@title: Easy Peasy -@author: ChasedDraco -@tags: ["lemons","clicker"] -@addedOn: 2024-08-20 */ const music = tune` diff --git a/games/Eat_&_Dont_Be_Eaten.js b/games/Eat_&_Dont_Be_Eaten.js index 6553933588..b10c5b002e 100644 --- a/games/Eat_&_Dont_Be_Eaten.js +++ b/games/Eat_&_Dont_Be_Eaten.js @@ -2,7 +2,7 @@ /* @title: Eat_&_Dont_Be_Eaten @author: Nathan Man -@tags: ['catch'] +@tags: [] @addedOn: 2023-08-30 */ diff --git a/games/Electrikoban.js b/games/Electrikoban.js index 6df68f54fb..b61ae02938 100644 --- a/games/Electrikoban.js +++ b/games/Electrikoban.js @@ -1,8 +1,8 @@ /* @title: Electrikoban +@author: algov @tags: ['strategy'] @addedOn: 2022-11-16 -@author: algov */ const player = "p"; diff --git a/games/ElfSokoban.js b/games/ElfSokoban.js index 41aa9509f9..47ff5bcd6d 100644 --- a/games/ElfSokoban.js +++ b/games/ElfSokoban.js @@ -1,8 +1,8 @@ /* @title: ElfSokoban +@author: Markonije @tags: [] @addedOn: 2023-03-15 -@author: Markonije */ const player = "p"; const box = "b"; diff --git a/games/English_Checkers.js b/games/English_Checkers.js index 076bc23999..c2ed299030 100644 --- a/games/English_Checkers.js +++ b/games/English_Checkers.js @@ -1,8 +1,8 @@ /* @title: English Checkers -@tags: ['classic'] -@addedOn: 2023-01-04 @author: Oakchris1955 +@tags: ['retro'] +@addedOn: 2023-01-04 This is a port of the english variant of the popular game, checkers, also known as draughts The rules can be found here: https://en.wikipedia.org/wiki/English_draughts#Rules diff --git a/games/Escape_From_Ghost_Maze.js b/games/Escape_From_Ghost_Maze.js index 566ce33e63..d79a33e646 100644 --- a/games/Escape_From_Ghost_Maze.js +++ b/games/Escape_From_Ghost_Maze.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: escape from ghost maze @author: Jlee123 @tags: ['puzzle'] -@img: "" @addedOn: 2024-05-10 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ const player = "p" diff --git a/games/Evil astrokittens.js b/games/Evil astrokittens.js new file mode 100644 index 0000000000..3b40e58ad1 --- /dev/null +++ b/games/Evil astrokittens.js @@ -0,0 +1,1070 @@ +/* +@title: Evil space kittens +@author: Dragos Gabriel Matu +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +//PLAYER +const player = "p" + +//ENEMIES +const kitty = "k" +const cat = "c" +const tomcat = "t" + +//BOSS +const bosscat1 = "1" +const bosscat2 = "2" +const bosscat3 = "3" +const bosscat4 = "4" +const bosscat5 = "5" +const bosscat6 = "6" +const paw = "7" + + +//BACKGROUND +const starsbackground ="a" + +//PROJECTILES +const hairball = "h" +//fireball and firetrail are a combination for the level 3 tomcats and is basicaly a super hairball that spreds to the adjecent collumns +const fireball = "f" +const firetrail = "r" +//player projectile +const missile = "m"; +//MeowField is basically a shield that the level 2 white cats use to protect themselves and the neighbouring cats from the player missiles +const meowField = "M" + +setLegend( + [ player, bitmap` +................ +................ +................ +.......00....... +......0550...... +.....005500..... +.....055550..... +....00566500.... +...0505665050... +...0505665050... +...0005555000... +.....000000..... +......9969...... +.....966699..... +......9996...... +................` ], + + [kitty, bitmap` +................ +.....222222..... +....2......2.... +...2.1...1..2... +...2.11.11..2... +...2.11111..2... +...2.15151..2... +...2.11111..2... +....22222222..1. +.....11111....1. +.....122211..1.. +.....122211111.. +.....12221111... +.....1222111.... +................ +................`], + [cat, bitmap` +................ +.....222222..... +....2......2.... +...2.2....2.2... +...2.22..22.2... +...2.222222.2... +...2.202022.2... +...2.222222.2... +....22222222.... +.....222222..... +......33333...2. +......22622...2. +......22222...2. +.....2222222.22. +.....222222222.. +................`], + [tomcat, bitmap` +.....222222..... +....2......2.... +...2.L....L.2... +..2..LL..LL..2.. +..2..LLLLLL..2.. +..2..L5L5LL..2.. +..2.00LLLL00.2.. +..2..LL3LLL..2.. +...2.LLLLLL.2... +....22222222..LL +.....LLLLLL..L.L +.....LL11LLL...L +....LL1111LL...L +....LL1111LLL.LL +....LL1111LLLLL. +....LL1111LLLLL.`], + + [bosscat1, bitmap` +.......999999009 +.......999999900 +.......999999999 +........99999999 +........99999999 +.........9999999 +0000.....9999992 +...00000.9999922 +.000....00000022 +...00000.0999922 +......0.00000002 +..00000000..9999 +..............99 +................ +................ +................`], + [bosscat2, bitmap` +................ +.......999...... +......99999..... +....00999999.... +......0033999... +......99339999.. +.....000333999.. +....0.993339999. +......9933339999 +......9099339999 +.....00999999999 +.......999999999 +........99999099 +........99999099 +........99999099 +........99999909`], + [bosscat3, bitmap` +9099999999999009 +0999999999999900 +9999999999999999 +9999999999999999 +9999999999999999 +9999922222229999 +2222220333022222 +2222222030222222 +2222222202222222 +2222022202220222 +2222200020002222 +9992222222222999 +9999999999999999 +..999999999999.. +................ +................`], + [bosscat4, bitmap` +9009999999...... +0999999999...... +9999999999...... +9999999999...... +9999999999...... +999999999....... +29999999....0000 +2299999900000... +222999000...000. +2229000.00000... +22999000.0...... +999009....000... +99999........... +................ +................ +................`], + [bosscat5, bitmap` +................ +.......999...... +......99999.0... +.....9999000.... +.....9933999.... +....99933999.... +...9993330090... +...993333990.... +..99933339990... +.99993390999.... +999999999000.... +99999999999.0... +99999999999..... +99099999999..... +9909999999...... +9009999999......`], + [bosscat6, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +9............... +999..........999 +9999999999999999 +9999999999999999 +9999999999999999 +9909999999990999 +9909999999990999 +9909999999990999`], + [paw, bitmap` +................ +................ +................ +......92.92..... +...99.33.33.92.. +...33.33233.332. +...932232232232. +...922222222222. +...922233322229. +...923333333229. +...22333333329.. +...99222222299.. +....922222229... +......29999..... +................ +................`], + + [starsbackground, bitmap` +0000000000000000 +0000L00000100000 +0000000000000000 +0000000200000000 +0100000000000000 +0000000000000L00 +0000000000000000 +0002000000000000 +0000000001000000 +0000000000000000 +0000002000000200 +0000000000000000 +0010000000000000 +0000000000010000 +00000L0000000000 +0000000000000000`], + + [fireball, bitmap` +................ +................ +................ +...9....6.9..9.. +.9.3.6.9...39... +..9.3636993..... +...696366636.... +..3663963639.3.. +...9663966993... +..6363693969.... +...966333336.... +....3336333..... +.....39333...... +................ +................ +................`], + [firetrail, bitmap` +................ +................ +................ +.......6.6...... +.....6..6....... +......96.93..... +.......963...... +......399.9..... +......63.3...... +.......33....... +................ +................ +................ +................ +................ +................`], + [hairball, bitmap` +................ +................ +.......CC1..1... +.....CC111C11... +....C1C11C11C... +..C111CCCCC11... +...CCCC111CC11.. +...C1CC1CC11CC.. +...CC11CCC1CCC.. +....CCC1C1CC111. +...11CCCCCC1CC1. +....CC1CC1C1.... +.....11C1C.1.... +........1....... +................ +................`], + [missile, bitmap` +................ +................ +................ +.......00....... +......0330...... +......0330...... +......0330...... +......0330...... +.......00....... +.......96....... +......66.9...... +.......69....... +........6....... +.......9........ +................ +................`], + [meowField, bitmap` +................ +................ +....F......F.... +....4DD..DD4.... +.....4FDDF4..... +..F....44....F.. +..4DDD....DDD4.. +...44FDDDDF44... +.F...444444...F. +.4DF...44...FD4. +..4DDF....FDD4.. +...44DDDDDD44... +.....444444..... +................ +................ +................`], +) +setBackground(starsbackground) + +setSolids([ player ]) + +const levels = [ + map` +......... +.k.k.k.k. +......... +......... +......... +......... +......... +......... +......... +....p.... +.........`, + map` +......... +.kckkkck. +......... +......... +......... +......... +......... +......... +......... +....p.... +.........`, + map` +......... +.tc...ct. +....k.... +...tct... +......... +......... +......... +......... +......... +....p.... +.........`, + map` +......... +......... +...265... +..71347.. +......... +......... +......... +......... +......... +....p.... +.........`, +] + +setMap(levels[0]); + +let level = 0; +let boolean = false; +//Count of enemies killed so that I don't have to chek every time for how many enemies are left on the map +let count = 0; + +function shootMissile() { + let x = getFirst(player).x; + let y = 9; + addSprite(x, y, missile); +} + +function moveMissile() { + let missiles = getAll(missile); + for( let i = 0 ; i < missiles.length ; i++) + missiles[i].y -= 1; +} + +//Level 1 kitten projectile functions +function shootHairball() { + let kittens = getAll(kitty); + for( let i = 0 ; i < kittens.length ; i++ ) { + addSprite(kittens[i].x , kittens[i].y , hairball ) + } +} + +function moveHairball(){ + let hairballs = getAll(hairball); + for( let i = 0 ; i < hairballs.length ; i++ ){ + hairballs[i].y += 1; + } +} + +//Level 2 cat projectile functions +function enableMeowField(){ + let cats = getAll(cat) + + for( let i = 0 ; i < cats.length ; i++ ){ + if(cats[i].y < 7){ + addSprite(cats[i].x, cats[i].y + 1, meowField) + addSprite(cats[i].x + 1, cats[i].y + 1, meowField) + addSprite(cats[i].x - 1, cats[i].y + 1, meowField) + if(cats[i].y < 6) + addSprite(cats[i].x, cats[i].y + 2, meowField) + } + } +} + +function moveMeowField(){ + let fields = getAll(meowField) + + for(let i = 0 ; i < fields.length ; i++ ) + fields[i].y += 1 +} + +//Level 3 tomcat projectile functions +function shootFireball(){ + let tomcats = getAll(tomcat); + for( let i = 0 ; i < tomcats.length ; i++ ) { + addSprite(tomcats[i].x , tomcats[i].y , fireball ) + } +} + +function moveFireball(){ + let fireballs = getAll(fireball); + for( let i = 0 ; i < fireballs.length ; i++ ){ + fireballs[i].y += 1; + if(fireballs[i].y == 6){ + clearTile(fireballs[i].x, fireballs[i].y) + addSprite(fireballs[i].x, fireballs[i].y, firetrail) + addSprite(fireballs[i].x+1, fireballs[i].y, firetrail) + addSprite(fireballs[i].x-1, fireballs[i].y, firetrail) + } + } +} + +function moveFiretrail(){ + let trails = getAll(firetrail) + for( let i = 0 ; i < trails.length ; i++ ){ + trails[i].y += 1 + } +} + +//function for the "removal" of enemies +function removeKittens() { + let missiles = getAll(missile) + for(let i = 0 ; i < missiles.length; i++ ) { + let kittens = getAll(kitty); + for( let j = 0 ; j < kittens.length; j++ ){ + if( missiles[i].x == kittens[j].x && missiles[i].y == kittens[j].y ){ + clearTile(kittens[j].x,kittens[j].y) + count++; + } + } + if(level == 1 || level == 2){ + let cats = getAll(cat) + for (let j = 0 ; j < cats.length ; j++ ){ + if( missiles[i].x == cats[j].x && missiles[i].y == cats[j].y ){ + clearTile(cats[j].x,cats[j].y) + count++; + } + } + } + if(level == 2){ + let tomcats = getAll(tomcat) + for (let j = 0 ; j < tomcats.length ; j++ ){ + if( missiles[i].x == tomcats[j].x && missiles[i].y == tomcats[j].y ){ + clearTile(tomcats[j].x,tomcats[j].y) + count++; + } + } + } + } +} + +//Unit advancement through the map +function moveKittens() { + let kittens = getAll(kitty); + for( let i = 0 ; i < kittens.length; i++ ){ + kittens[i].y += 1; + } + if(level == 1 || level == 2 ){ + let cats = getAll(cat) + for( let i = 0 ; i < cats.length ; i++ ){ + cats[i].y += 1; + } + } +} + +function removePlayer(){ + let hairballs = getAll(hairball); + for( let i = 0 ; i < hairballs.length ; i++ ){ + if(hairballs[i].x == getFirst(player).x && hairballs[i].y == getFirst(player).y ){ + addText("Couldnt handle ", {x: 1, + y: 3, + color: color`8` + }) + addText("the fluff", {x: 1, + y: 4, + color: color`8` + }) + addText("so here is " , {x: 1, + y: 5, + color: color`8` + }) + addText("a hairball!" , {x: 1, + y: 6, + color: color`8` + }) + addText("Press s to restart", {x: 1, + y: 8, + color: color`8` + }) + level = 0; + setMap(levels[0]); + boolean = false + count = 0; + } + } + let trails = getAll(firetrail) + for( let i = 0 ; i < trails.length ; i++ ){ + if(trails[i].x == getFirst(player).x && trails[i].y == getFirst(player).y ){ + addText("Too hot to handle", {x: 1, + y: 3, + color: color`8` + }) + addText("Press s to restart", {x: 1, + y: 6, + color: color`8` + }) + level = 0; + setMap(levels[0]); + boolean = false + count = 0; + + } + } + + let kittens = getAll(kitty); + for( let i = 0 ; i < kittens.length; i++ ){ + if(kittens[i].y + 1 == 10) { + addText("Game Moewver <3", {x: 1, + y: 3, + color: color`8` + }); + addText("Press s to restart", {x: 1, + y: 6, + color: color`8` + }) + level = 0; + setMap(levels[0]); + boolean = false + count = 0; + } + } + if(level == 1 || level == 2){ + let cats = getAll(cat); + for( let j = 0 ; j < cats.length ; j++ ){ + console.log(getFirst(player).y) + if(cats[j].y + 1 == 10) { + console.log("I am here!") + addText("Game Moewver <3", {x: 1, + y: 3, + color: color`8` + }); + addText("Press s to restart", {x: 1, + y: 6, + color: color`8` + }) + level = 0; + setMap(levels[0]); + boolean = false + count = 0; + } + } + } +} + +// Removing projectiles when they reach the end of the map and when they hit eachother +function removeProjectiles(){ + let hairballs = getAll(hairball) + for( let i = 0 ; i < hairballs.length ; i++ ) + if( hairballs[i].y == 10 ) + clearTile( hairballs[i].x , 10) + + let missiles = getAll(missile); + for( let i = 0 ; i < missiles.length ; i++) + if( missiles[i].y == 1 ) + clearTile( missiles[i].x , 1) + + for( let i = 0 ; i < missiles.length ; i++ ) + for( let j = 0 ; j < hairballs.length ; j++){ + if( missiles[i].x == hairballs[j].x && missiles[i].y == hairballs[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + } + if( missiles[i].x == hairballs[j].x && missiles[i].y + 1 == hairballs[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + clearTile( hairballs[j].x, hairballs[j].y ) + } + } + let fields = getAll(meowField) + for( let i = 0 ; i < fields.length ; i++) + if( fields[i].y == 8 ){ + clearTile( fields[i].x , 8) + } + for( let i = 0 ; i < missiles.length ; i++ ) + for( let j = 0 ; j < fields.length ; j++){ + if( missiles[i].x == fields[j].x && missiles[i].y == fields[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + } + if( missiles[i].x == fields[j].x && missiles[i].y + 1 == fields[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + clearTile( fields[j].x, fields[j].y ) + } + } + +let firballs = getAll(fireball) + for( let i = 0 ; i < firballs.length ; i++) + if( firballs[i].y == 10 ) + clearTile( firballs[i].x , 10) + for( let i = 0 ; i < missiles.length ; i++ ) + for( let j = 0 ; j < firballs.length ; j++){ + if( missiles[i].x == firballs[j].x && missiles[i].y == firballs[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + } + if( missiles[i].x == firballs[j].x && missiles[i].y + 1 == firballs[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + clearTile( firballs[j].x, firballs[j].y ) + } + } + + let trails = getAll(firetrail) + for( let i = 0 ; i < trails.length ; i++) + if( trails[i].y == 10 ) + clearTile( trails[i].x , 10) + for( let i = 0 ; i < missiles.length ; i++ ) + for( let j = 0 ; j < trails.length ; j++){ + if( missiles[i].x == trails[j].x && missiles[i].y == trails[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + } + if( missiles[i].x == trails[j].x && missiles[i].y + 1 == trails[j].y ){ + clearTile( missiles[i].x, missiles[i].y ) + clearTile( trails[j].x, trails[j].y ) + } + } +} + +//Boss level functions + +let barrage = false; +let dialogue = false; +function numberOfLives(){ + if(dialogue == false){ + if(bossLives == 5){ + addText("Damn you", {x: 6, + y: 5, + color: color`8` + }) + addText("ball of nonfur", {x: 5, + y: 6, + color: color`8` + }) + barrage = true + boolean = false + setTimeout(() => { + boolean = true; + },1000) + dialogue = true; + } + } +} + +let bossLives = 9; + +function bossField(){ + for( let i = 1 ; i <= 7 ; i++ ){ + clearTile( i, 5 ) + addSprite( i, 5, meowField ) + } +} + +let way = true +function bossProjectiles(){ + way = !way + if(barrage){ + addSprite(2 , 4 , fireball) + addSprite(6 , 4 , fireball) + setTimeout(() => { + addSprite(4 , 4 , fireball) + }, 500) + setTimeout(() => { + addSprite(2 , 4 , fireball) + addSprite(6 , 4 , fireball) + }, 1500) + } + else{ + if(way){ + addSprite(1, 4, hairball) + addSprite(3, 4, hairball) + addSprite(5, 4, hairball) + addSprite(7, 4, hairball) + } + else{ + addSprite(2, 4, hairball) + addSprite(4, 4, hairball) + addSprite(6, 4, hairball) + } + } +} + +function damageBoss(){ + let missiles = getAll(missile); + for( let i = 0 ; i < missiles.length ; i++){ + if(missiles[i].x == 3 && missiles[i].y == 3){ + bossLives-- + + } + if(missiles[i].x == 4 && missiles[i].y == 3){ + bossLives-- + + } + if(missiles[i].x == 5 && missiles[i].y == 3){ + bossLives-- + } + } + console.log(bossLives) +} + +setInterval(() => { + if( boolean === true ){ + shootHairball(); + shootFireball(); + if(level == 3){ + bossProjectiles() + } + } +},7000) + +setInterval(() => { + if( boolean === true ){ + moveHairball(); + moveFireball(); + moveFiretrail(); + moveMissile(); + removeKittens(); + removePlayer(); + removeProjectiles(); + if( level == 3){ + damageBoss(); + numberOfLives() + } + + if( level == 0 && count == 4){ + addText("You're not a cat", {x: 2, + y: 5, + color: color`8` + }) + addText("person are you?", {x: 2, + y: 6, + color: color`8` + }) + addText("Press s to go ", {x: 4, + y: 8, + color: color`8` + }) + addText("to the next level ", {x: 2, + y: 9, + color: color`8` + }) + boolean = false + level++; + count = 0; + } + else if (level == 1 && count == 7 ) { + addText("Stop! You're ruining", {x: 0, + y: 3, + color: color`8` + }) + addText("my evil...", {x: 0, + y: 4, + color: color`8` + }) + addText("I mean, cute ", {x: 0, + y: 5, + color: color`8` + }) + addText("cat empire", {x: 0, + y: 6, + color: color`8` + }) + addText("Press s to go ", {x: 4, + y: 8, + color: color`8` + }) + addText("to the next level ", {x: 2, + y: 9, + color: color`8` + }) + boolean = false + level++; + count = 0; + } + else if (level == 2 && count == 8 ) { + addText("NOOO000000 ", {x: 6, + y: 2, + color: color`8` + }) + addText("Stop it you dog!", {x: 3, + y: 3, + color: color`8` + }) + addText("Press s to go ", {x: 4, + y: 8, + color: color`8` + }) + addText("to the next level ", {x: 2, + y: 9, + color: color`8` + }) + boolean = false + level++; + count = 0; + } + else if (level == 3 && bossLives == 0 ) { + addText("Victory!", {x: 6, + y: 2, + color: color`8` + }) + addText("You managed to ", {x: 3, + y: 3, + color: color`8` + }) + addText("defeat the evil", {x: 3, + y: 4, + color: color`8` + }) + addText("kittens!", {x: 3, + y: 5, + color: color`8` + }) + addText("want to play", {x:3, + y: 9, + color: color`8` + }) + addText("again?", {x:3, + y: 10, + color: color`8` + }) + addText("Press s to ", {x: 3, + y: 11, + color: color`8` + }) + addText("restart", {x: 3, + y: 12, + color: color`8` + }) + boolean = false + count = 0; + } + } +},500) + +setInterval(() => { + if( boolean === true ){ + enableMeowField() + moveKittens(); + if(level != 3) + moveMeowField() + if( level == 3 ){ + bossField() + } + } +}, 10000) + +setPushables({ + [ player ]: [] +}) + +addText("You wouldn't ", {x: 4, + y: 1, + color: color`8` +}) + addText("hurt an innocent", {x: 2, + y: 2, + color: color`8` +}) +addText("kitten...would you? ", {x: 1, + y: 3, + color: color`8` +}) +addText("Press s to start ", {x: 1, + y: 6, + color: color`8` +}) + +//Player input +onInput("a", () => { + if(boolean == true) + getFirst(player).x -= 1 +}) + +onInput("d", () => { + if(boolean == true) + getFirst(player).x += 1 +}) + +let loaded = true +onInput("w", () => { + if(boolean == true){ + if(loaded == true){ + loaded = false + shootMissile(); + clearText() + addText("L", {x: 0, + y: 1, + color: color`3` + }) + addText("o", {x: 0, + y: 2, + color: color`3` + }) + addText("a", {x: 0, + y: 3, + color: color`3` + }) + addText("d", {x: 0, + y: 4, + color: color`3` + }) + addText("i", {x: 0, + y: 5, + color: color`3` + }) + addText("n", {x: 0, + y: 6, + color: color`3` + }) + addText("g", {x: 0, + y: 7, + color: color`3` + }) + + //Stops the player from spamming the projectiles and adds a bit of a more challanging perspective because now you have to deal with the loading mechanic + setTimeout(() => { + loaded = true + clearText() + addText("L", {x: 0, + y: 1, + color: color`4` + }) + addText("o", {x: 0, + y: 2, + color: color`4` + }) + addText("a", {x: 0, + y: 3, + color: color`4` + }) + addText("d", {x: 0, + y: 4, + color: color`4` + }) + addText("e", {x: 0, + y: 5, + color: color`4` + }) + addText("d", {x: 0, + y: 6, + color: color`4` + }) + }, 1000); + } + + } + +}) + +onInput("i", () => { + if(level == 3){ + level = 0; + setMap(levels[0]); + boolean = false + bossLives = 9; + } + +}) + +onInput("s", () => { + if(boolean == false){ + if( level == 0 ){ + clearText() + boolean = true; + } + if( level == 1 ){ + setMap(levels[1]); + clearText(); + boolean = true; + } + if( level == 2 ){ + setMap(levels[2]); + clearText(); + boolean = true; + } + if( level == 3 ){ + setMap(levels[3]); + clearText(); + boolean = true; + if(bossLives == 0){ + level = 0; + setMap(levels[0]); + boolean = false + bossLives = 9; + barrage = false + dialogue = false + addText("You wouldn't ", {x: 4, + y: 1, + color: color`8` + }) + addText("hurt an innocent", {x: 2, + y: 2, + color: color`8` + }) + addText("kitten...would you? ", {x: 1, + y: 3, + color: color`8` + }) + addText("Press s to start ", {x: 1, + y: 6, + color: color`8` + }) + } + } + } +}) + +afterInput(() => { +}) + diff --git a/games/Exodus.js b/games/Exodus.js index 2130bedc0c..605e28c4ff 100644 --- a/games/Exodus.js +++ b/games/Exodus.js @@ -1,9 +1,9 @@ /* @title: Exodus -@author: Jarsa +@author: Jarsa @tags: [] -@img: "" @addedOn: 2024-06-07 +@img: "" */ const player = "p" diff --git a/games/FOOD-CATCH.js b/games/FOOD-CATCH.js index bc65a1f08c..c8c4b00138 100644 --- a/games/FOOD-CATCH.js +++ b/games/FOOD-CATCH.js @@ -2,7 +2,7 @@ /* @title: FOOD-CATCH @author: Jakob -@tags: ['catch'] +@tags: [] @addedOn: 2023-09-02 */ diff --git a/games/FRC-CHARGED-UP.js b/games/FRC-CHARGED-UP.js index 4930a10b1e..b8f93d69c2 100644 --- a/games/FRC-CHARGED-UP.js +++ b/games/FRC-CHARGED-UP.js @@ -1,9 +1,9 @@ /* -@title: FRC CHARGED UP +@title: FRC CHARGED UP @author: Wyatt459 @tags: [] -@img: "" @addedOn: 2024-04-22 +@img: "" */ /* Instructions: diff --git a/games/FRC_TEAM_2016_Monkey_Madness.js b/games/FRC_TEAM_2016_Monkey_Madness.js index 44033bcfb4..fef40436d5 100644 --- a/games/FRC_TEAM_2016_Monkey_Madness.js +++ b/games/FRC_TEAM_2016_Monkey_Madness.js @@ -2,7 +2,7 @@ /* @title: FRC_TEAM_2016_Monkey_Madness @author: Hunter -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-04-30 */ diff --git a/games/Faby_Flies.js b/games/Faby_Flies.js index c1af16051c..a8a6b5e0ec 100644 --- a/games/Faby_Flies.js +++ b/games/Faby_Flies.js @@ -1,11 +1,11 @@ /* +@title: Faby Flies +@author: Eny +@tags: ['endless','retro'] +@addedOn: 2024-06-22 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started -@title: Faby Flies -@author: Eny -@tags: ['classic', 'endless'] -@addedOn: 2024-06-22 */ const player = "p" diff --git a/games/FallingTiles.js b/games/FallingTiles.js new file mode 100644 index 0000000000..818352cca0 --- /dev/null +++ b/games/FallingTiles.js @@ -0,0 +1,287 @@ +/* +@title: FallingTiles +@author: Rishabh R +@tags: [] +@addedOn: 2024-09-03 +*/ +const tile = "t"; +const background = "b"; +const line = "l"; +const flashSprite = "f"; // New sprite for flashing effect + +setLegend( + [tile, bitmap` + . . . . . . . . + . 1 1 1 1 1 1 . + . 1 1 1 1 1 1 . + . 1 1 1 1 1 1 . + . 1 1 1 1 1 1 . + . 1 1 1 1 1 1 . + . 1 1 1 1 1 1 . + . . . . . . . . + `], + [background, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`], + [flashSprite, bitmap` +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444`], + [line, bitmap` + . . . . . . . . + . . . . . . . . + . . . . . . . . + . 3 3 3 3 3 3 . + . 3 3 3 3 3 3 . + . . . . . . . . + . . . . . . . . + . . . . . . . . + `] +); + +const numColumns = 4; +const gridHeight = 8; +const gridWidth = 4; +const scoreRow = gridHeight - 3; + +let score = 0; +let highScore = 0; +let misses = 0; +const maxMisses = 5; +let gameOver = false; + +let tilesReadyToRemove = []; +const spawnRate = 600; +const moveRate = 300; + +let currentState = "start"; +let gameLoopInterval, spawnInterval, moveInterval; + +const missedSound = tune` +65.50218340611353: F4/65.50218340611353, +65.50218340611353: C4/65.50218340611353, +1965.065502183406`; +const scoredSound = tune` +42.97994269340974: G5-42.97994269340974, +42.97994269340974: B5-42.97994269340974, +1289.3982808022922`; + +const inputCooldowns = [false, false, false, false]; // Track cooldowns for each column +const keyStates = { a: false, d: false, j: false, l: false }; // Track if a key is pressed + +function startScreen() { + clearText(); + addText("Falling Tiles", { x: 4, y: 2, color: color`0` }); + addText("press s to start", { x: 2, y: 14, color: color`L` }); + setMap(map` +..... +..... +..... +.....`); +} + +function gameScreen() { + score = 0; + misses = 0; + gameOver = false; + tilesReadyToRemove = []; + + const level = map` +.... +.... +.... +.... +.... +.... +.... +....`; + + setMap(level); + setBackground(background); + + for (let x = 0; x < gridWidth; x++) { + addSprite(x, scoreRow, line); + } + + onInput("a", () => handleInput(0, "a")); + onInput("d", () => handleInput(1, "d")); + onInput("j", () => handleInput(2, "j")); + onInput("l", () => handleInput(3, "l")); + + // Reset the key state after each input + afterInput(() => { + resetKeyState("a"); + resetKeyState("d"); + resetKeyState("j"); + resetKeyState("l"); + }); + + gameLoopInterval = setInterval(gameLoop, 50); + spawnInterval = setInterval(spawnTile, spawnRate); + moveInterval = setInterval(handleTileMovement, moveRate); +} + +function loseScreen() { + if (score > highScore) highScore = score; + clearText(); + addText("YOU LOSE", { x: 6, y: 2, color: color`3` }); + addText(`Score: ${score}`, { x: 6, y: 5, color: color`5` }); + + if (score === highScore) { + addText(`NEW High Score: ${highScore}`, { x: 2, y: 7, color: color`6` }); + } else { + addText(`High Score: ${highScore}`, { x: 4, y: 7, color: color`6` }); + } + + addText("press w to restart", { x: 1, y: 14, color: color`L` }); + setMap(map` +..... +..... +..... +.....`); +} + +function updateScore() { + clearText(); + addText("Score: " + score, { + x: 0, + y: 0, + color: gameOver ? color`3` : color`5` + }); + addText("Misses: " + misses, { + x: 0, + y: 1, + color: gameOver ? color`3` : color`5` + }); +} + +function spawnTile() { + if (currentState !== "game") return; + if (Math.random() >= 0.5) { + const col = Math.floor(Math.random() * numColumns); + addSprite(col, 0, tile); + } +} + +function handleTileMovement() { + if (currentState !== "game") return; + + const allTiles = getAll(tile); + const newTilesReadyToRemove = []; + + allTiles.forEach(t => { + if (t.y < gridHeight - 1) { + t.y += 1; + if (t.y == gridHeight - 1) newTilesReadyToRemove.push(t); + } else if (tilesReadyToRemove.includes(t)) { + t.remove(); + misses++; + playTune(missedSound); + if (misses >= maxMisses) { + gameOver = true; + currentState = "lose"; + clearInterval(gameLoopInterval); + clearInterval(spawnInterval); + clearInterval(moveInterval); + loseScreen(); + } + } + }); + + tilesReadyToRemove = newTilesReadyToRemove; +} + +function handleInput(col, key) { + if (currentState !== "game" || inputCooldowns[col] || keyStates[key]) return; + + keyStates[key] = true; // Mark key as held + + // Original input handling logic + inputCooldowns[col] = true; + flashColumn(col); + checkScored(col); + + setTimeout(() => inputCooldowns[col] = false, 200); // Cooldown duration +} + +function resetKeyState(key) { + keyStates[key] = false; // Mark key as released +} + +function flashColumn(col) { + // Add flash sprites to the column + for (let y = 0; y < gridHeight; y++) { + addSprite(col, y, flashSprite); + } + + // Remove flash sprites after a short duration + setTimeout(() => removeFlashColumn(col), 100); // Flash duration of 100ms +} + +function removeFlashColumn(col) { + const flashSprites = getAll(flashSprite).filter(s => s.x === col); + flashSprites.forEach(sprite => sprite.remove()); +} + +function checkScored(col) { + const tileAtScoreRow = getTile(col, scoreRow).find(t => t.type === tile); + if (tileAtScoreRow) { + tileAtScoreRow.remove(); + score++; + playTune(scoredSound); + } +} + +function gameLoop() { + if (currentState !== "game") return; + updateScore(); +} + +function resetGame() { + clearInterval(gameLoopInterval); + gameScreen(); +} + +onInput("s", () => { + if (currentState === "start") { + currentState = "game"; + gameScreen(); + } +}); + +onInput("w", () => { + if (currentState === "lose") { + currentState = "start"; + startScreen(); + } +}); + +startScreen(); + diff --git a/games/Falling_Blocks.js b/games/Falling_Blocks.js index 772f432262..dbf80bade8 100644 --- a/games/Falling_Blocks.js +++ b/games/Falling_Blocks.js @@ -1,8 +1,8 @@ /* @title: Falling Blocks -@tags: ['hackable'] -@addedOn: 2022-09-17 @author: Thanosan Prathifkumar +@tags: [] +@addedOn: 2022-09-17 Use A and D to move. Don't get hit by the falling blocks. */ diff --git a/games/Falling_Water.js b/games/Falling_Water.js index f54f502aba..3cd8d875bc 100644 --- a/games/Falling_Water.js +++ b/games/Falling_Water.js @@ -1,8 +1,8 @@ /* @title: Falling Water -@tags: ['simulation', 'advanced'] -@addedOn: 2022-09-23 @author: Captainexpo +@tags: ['simulation'] +@addedOn: 2022-09-23 Version: 2.1 diff --git a/games/FinalTrigger.js b/games/FinalTrigger.js new file mode 100644 index 0000000000..55292dc071 --- /dev/null +++ b/games/FinalTrigger.js @@ -0,0 +1,767 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: FinalTrigger +@author: MrDomocle +@tags: [] +@addedOn: 2024-00-00 +*/ + +let playMusic = false // turn music switch - set with "i" + +let mx = 0 // x movement +let my = 0 // y movement +let dead = false // to stop things from running when character is dead +let deadInputs = 0 // how many presses after death + +const player = "p" +const spike = "s" +const uspike = "u" +const wall = "w" +const box = "x" +const fbox = "o" +const flagbase = "e" +const flagpole = "f" +const flagtip = "t" +const bg = "b" +setLegend( + [ player, bitmap` +................ +................ +.....00..00..... +....04D00D40.... +...0204DD4020... +...000DDDD000... +...0F0D44D0F0... +..0D0DD44DD0D0.. +..044D0000D440.. +..0D00666600D0.. +..00F66FF66F00.. +...000F66F000... +..0.0D0000D0.0.. +....0D4DD4D0.... +.....000000..... +.....0....0.....` ], + [ spike, bitmap` +................ +0...0...0...0... +0...0...0...0... +0...0...0...0... +10.010.010.010.0 +10.010.010.010.0 +10.010.010.010.0 +2101210121012101 +2101210121012101 +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201` ], + [ uspike, bitmap` +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201 +2201220122012201 +2101210121012101 +2101210121012101 +10.010.010.010.0 +10.010.010.010.0 +10.010.010.010.0 +0...0...0...0... +0...0...0...0... +0...0...0...0... +................` ], + [ wall, bitmap` +LLLLLLLLLLLLLLLL +CCC1CCCCCCC1CCCC +CCC1CCCCCCC1CCCC +CCC1CCCCCCC1CCCC +LLLLLLLLLLLLLLLL +CCCCCCC1CCCCCCC1 +CCCCCCC1CCCCCCC1 +CCCCCCC1CCCCCCC1 +LLLLLLLLLLLLLLLL +CCC1CCCCCCC1CCCC +CCC1CCCCCCC1CCCC +CCC1CCCCCCC1CCCC +LLLLLLLLLLLLLLLL +CCCCCCC1CCCCCCC1 +CCCCCCC1CCCCCCC1 +CCCCCCC1CCCCCCC1` ], + [ box, bitmap` +CCCCCCCCCCCCCCCC +CC666666666666CC +C6F6666666666F9C +C66F66666666F69C +C666F666666F669C +C6666F6666F6669C +C66666F66F66669C +C666666FF666669C +C666666FF666669C +C66666F66F66669C +C6666F6666F6669C +C666F666666F669C +C66F66666666F69C +C6F6666666666F9C +CC999999999999CC +CCCCCCCCCCCCCCCC` ], + [ fbox, bitmap` +CCCCCCCCCCCCCCCC +CC666666666666CC +C6F6666666666F9C +C66F66666666F69C +C666F666666F669C +C6666F6666F6669C +C66666F66F66669C +C666666FF666669C +C666666FF666669C +C66666F66F66669C +C6666F6666F6669C +C666F666666F669C +C66F66666666F69C +C6F6666666666F9C +CC999999999999CC +CCCCCCCCCCCCCCCC` ], + [ flagbase, bitmap` +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +....00000000.... +.00055557777000. +0555555577777770 +0555555577777770 +0555555577777770 +0000000000000000` ], + [ flagpole, bitmap` +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12.......` ], + [ flagtip, bitmap` +................ +................ +................ +.......133333333 +.......13333333. +.......1333333.. +.......133333... +.......13333.... +.......1333..... +.......133...... +.......13....... +.......12....... +.......12....... +.......12....... +.......12....... +.......12.......` ], + [ bg, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777` ] +) + +const tuneLen = 3333 // ms +const melody1 = tune` +102.38907849829351: G4^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: C5^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: E5^102.38907849829351 + F4~102.38907849829351, +204.77815699658703, +102.38907849829351: E5^102.38907849829351, +204.77815699658703, +102.38907849829351: D5^102.38907849829351 + G4~102.38907849829351, +511.9453924914676, +102.38907849829351: G4^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: B4^102.38907849829351, +102.38907849829351: G4^102.38907849829351, +102.38907849829351: D5^102.38907849829351 + E4~102.38907849829351, +204.77815699658703, +102.38907849829351: D5^102.38907849829351, +204.77815699658703, +102.38907849829351: C5^102.38907849829351 + A4~102.38907849829351, +511.9453924914676` +const melody2 = tune` +102.38907849829351: G4^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: C5^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: C5^102.38907849829351 + F4~102.38907849829351, +307.1672354948805, +102.38907849829351: D5^102.38907849829351, +102.38907849829351, +102.38907849829351: B4^102.38907849829351 + G4~102.38907849829351, +204.77815699658703, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: G4^102.38907849829351, +307.1672354948805, +102.38907849829351: G4^102.38907849829351, +102.38907849829351, +102.38907849829351: D5^102.38907849829351 + E4~102.38907849829351, +307.1672354948805, +102.38907849829351: C5^102.38907849829351 + A4~102.38907849829351, +716.7235494880546` +const melody3 = tune` +102.38907849829351: G4^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: C5^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: E5^102.38907849829351 + F4~102.38907849829351, +204.77815699658703, +102.38907849829351: E5^102.38907849829351, +204.77815699658703, +102.38907849829351: D5^102.38907849829351 + G4~102.38907849829351, +511.9453924914676, +102.38907849829351: G4^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351: B4^102.38907849829351, +102.38907849829351: G4^102.38907849829351, +102.38907849829351: G5^102.38907849829351 + E4~102.38907849829351, +204.77815699658703, +102.38907849829351: B4^102.38907849829351, +204.77815699658703, +102.38907849829351: C5^102.38907849829351 + A4~102.38907849829351, +204.77815699658703, +102.38907849829351: B4^102.38907849829351, +102.38907849829351: A4^102.38907849829351, +102.38907849829351` + +const jumpTune = tune` +37.5: C5^37.5, +37.5: D5^37.5, +37.5: E5^37.5, +37.5: F5^37.5, +37.5: G5^37.5, +1012.5` +const walkTune = tune` +117.1875: C4^117.1875, +3632.8125` + +const gameOverTune = tune` +139.53488372093022, +69.76744186046511: B4^69.76744186046511 + G4~69.76744186046511, +69.76744186046511, +69.76744186046511: F5^69.76744186046511 + G4~69.76744186046511, +209.30232558139534, +69.76744186046511: F5^69.76744186046511 + G4~69.76744186046511, +69.76744186046511, +69.76744186046511: F5^69.76744186046511 + G4~69.76744186046511, +139.53488372093022, +69.76744186046511: E5^69.76744186046511 + A4~69.76744186046511, +139.53488372093022, +69.76744186046511: D5^69.76744186046511 + B4~69.76744186046511, +69.76744186046511, +69.76744186046511: C5^69.76744186046511, +209.30232558139534, +69.76744186046511: G4~69.76744186046511, +209.30232558139534, +69.76744186046511: C4~69.76744186046511, +348.83720930232556` +const winTune = tune` +79.36507936507937: G4^79.36507936507937 + C5~79.36507936507937, +79.36507936507937, +79.36507936507937: E4^79.36507936507937 + G4~79.36507936507937, +79.36507936507937, +79.36507936507937: G4^79.36507936507937 + C5~79.36507936507937, +79.36507936507937, +79.36507936507937: C5^79.36507936507937 + E5~79.36507936507937, +79.36507936507937, +79.36507936507937: G4^79.36507936507937 + C5~79.36507936507937, +79.36507936507937, +79.36507936507937: E5^79.36507936507937 + C5~79.36507936507937, +79.36507936507937, +79.36507936507937: G5^79.36507936507937 + E5~79.36507936507937, +317.46031746031747, +79.36507936507937: E5^79.36507936507937 + C5~79.36507936507937, +1111.111111111111` +const endTune = tune` +88.49557522123894, +88.49557522123894: C5~88.49557522123894 + F5-88.49557522123894, +265.4867256637168, +88.49557522123894: C5~88.49557522123894 + F5-88.49557522123894, +88.49557522123894, +88.49557522123894: C5~88.49557522123894 + F5-88.49557522123894, +88.49557522123894, +88.49557522123894: C5~88.49557522123894 + F5-88.49557522123894, +88.49557522123894, +88.49557522123894: B4~88.49557522123894 + G5-88.49557522123894, +176.99115044247787, +88.49557522123894: D4^88.49557522123894, +176.99115044247787, +88.49557522123894: G4^88.49557522123894, +1238.9380530973451` + +setSolids([spike, player, wall, box, fbox]) + +let level = 0 +const levels = [ + map` +uuuuuuuuuuuuuuuuuuuu +.www.w.w..w..ww..w.. +.wp..w.wwpw.wp.w.w.. +.ww..w.w.ww.wwww.w.. +.w...w.w..w.w..w.ww. +.................... +ooo..o...ooo...oo... +.o...o...o.....opo.. +.o...o...opo...oo... +.o...o...ooo...o.o.. +..oo..ooo...ooo..... +..opo.o.....ooo..... +..oo..opo...op...... +..o.o.ooo...ooo..... +.................... +ssssssssssssssssssss`, // 0 + map` +p......... +.......... +.......... +.......... +.......... +.......... +wwwwwwwwww +wwwwwwwwww`, // 1 + map` +.......... +.......... +.....w.... +....www... +...wwwww.. +p.wwwwwww. +wwwwwwwwww +wwwwwwwwww`, // 2 + map` +.......... +.........t +.......w.f +......ww.f +.....www.f +p...wwww.e +wwwwwwwwww +wwwwwwwwww`, // 3 + map` +.......... +.......... +.......... +..x...w... +.ww...ww.. +p.....www. +wwwwwwwwww +wwwwwwwwww`, // 4 + map` +.......... +.......... +.......... +..x....... +..x....... +p.x....... +www...wwww +wwwssswwww`, // 5 + map` +.......... +.......... +.......... +.......... +.......... +p......... +w.w.w.w.ww +ssssssssss`, // 6 + map` +.......... +.......... +....x..... +....w...w. +..w.....w. +pww.....w. +wwwwwwwwww +wwwwwwwwww`, // 7 + map` +.......... +.........t +.........f +.........f +......w..f +px...www.e +ww.wwwwwww +wwswwwwwww`, // 8 + map` +.......... +.......... +.......... +.......... +.x.x...... +px.x...... +ww.w.w.w.w +wwswswswsw`, // 9 + map` +.......... +.......... +.......... +...o.o..o. +..o....... +po........ +ww........ +ww........`, // 10 + map` +.......... +.........t +p........f +o.o..o...f +.........f +.........e +........ww +........ww`, // 11 + map` +uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu +........................................ +..xxxxxxx.x....x..xxxx..x...x.x...x..... +.....x....x....x.x....x.xx..x.x..xx..... +.....x....x....x.xp...x.xx..x.xpxx...... +.....x....xxxxxx.xxxxxx.x.x.x.xxx....... +.....x....xxxxxx.xxxxxx.x.x.x.xx........ +.....x....x....x.x....x.x..xx.xxx....... +.....x....x....x.x....x.x..xx.x.xx...... +.....x....x....x.x....x.x...x.x..xx..... +.............p.......................... +.........w...w..ww..w...w....w..w....... +.........w...w.w..w.w...w....w..w....... +..........w.w..w..w.w...w....w..w....... +...........w...w..w.w...w....wwww....... +...........w...w..w.w...w.......w....... +...........w....ww...www........w....... +........................................ +........................................ +...p.................................... +..xxxx.x.....xx..x..x.xxxx.x...x.xxxx... +..x..x.x....x..x.x..x..xx..xx..x.x...... +..x..x.x....x..x.x..x..xx..xx..x.x...... +..x..x.x....x..x.x..x..xx..xx..x.x...... +..xxxx.x....xxxx..x.x..xx..x.x.x.x.p.... +..x....x....x..x...xx..xx..x.x.x.x.xx... +..x....x....x..x....x..xx..x..xx.x..x... +..x....x....x..x....x..xx..x..xx.x..x... +..x....x....x..x....x..xx..x..xx.x..x... +..x....xxxx.x..x....x.xxxx.x...x.xxxx... +........................................ +ssssssssssssssssssssssssssssssssssssssss`, // 12 +] +let flagLevels = [3, 8, 11] +let edge = "" + +setMap(levels[level]) +setBackground(bg) + +if (level === 0) { // title screen + dead = true + addText("Press j to start", {y: 14, color: `0`}) +} +if (level === 12) { // end screen + dead = true +} + +function playBGM() { + if (playMusic) { + setTimeout(() => playTune(melody1), 0*tuneLen) + setTimeout(() => playTune(melody2), 1*tuneLen) + setTimeout(() => playTune(melody3), 2*tuneLen) + setTimeout(() => playTune(melody2), 3*tuneLen) + } +} +playBGM() + +function gameOver(msg) { + dead = true // set death flag - disables all physics until restart + let wait = 0 + if (msg === "Reset") { + wait = 500 + } + else { + playTune(gameOverTune) + wait = 2000 + } + addText(msg, {y:7, color:`3`}) + setTimeout( () => { // wait before resetting level + clearText() + resetVars() + setMap(levels[level]) + console.log("reset") + }, wait) +} +function screenScroll() { + let y = getFirst(player).y + resetVars() + level += 1 + setMap(levels[level]) + getFirst(player).y = y // restore height + console.log("level " + level) +} +function screenScrollBack() { + let y = getFirst(player).y + resetVars() + level -= 1 + setMap(levels[level]) + getFirst(player).y = y // restore height + getFirst(player).x = width() - 1 // restore horizontal + console.log("level " + level) +} +function levelWin(pole) { + let winText = "" + switch (pole) { // change message depending on what part of the pole was touched + case 0: // base + winText = "Good job!" + break + case 1: // pole + winText = "Congratulations!" + break + case 2: // tip + winText = "Amazing!" + break + } + addText(winText, {y:7, color:`6`}) + playTune(winTune) + dead = true // disable logic until transition finishes + setTimeout( () => { // wait before setting level + clearText() + resetVars() + level += 1 + setMap(levels[level]) + console.log("level " + level) + }, 3000) +} +function gameWin() { + addText("Game complete!", {y:7, color:`6`}) + dead = true +} +function resetVars() { + mx = 0 + my = 0 + edge = "" + dead = false + deadInputs = 0 +} + +function update() { + // Player + + let frog = getFirst(player) // this is our player instance + let absMx = Math.abs(mx) // absolute values for iteration + let absMy = Math.abs(my) + // do in for loops to prevent skipping tiles + if (my < 0) { // if sum is up + for (let i = 0; i < absMy; i++) { + frog.y -= 1 + } + playTune(jumpTune) // play jump sound + } + if (my >= 0) { // if sum is down or nothing + for (let i = 0; i <= absMy; i++) { // the <= adds one to account for gravity + frog.y += 1 + } + } + // movement on x + if (mx < 0) { // if sum is left + for (let i = 0; i < absMx; i++) { + frog.x -= 1 + } + playTune(walkTune) // play walk sound + } + if (mx > 0) { // if sum is right + for (let i = 0; i < absMx; i++) { + frog.x += 1 + } + playTune(walkTune) // play walk sound + } + // reset both + mx = 0 + my = 0 + + // run logic checks + checkDeath() // game over if above spikes + checkFlag() + checkEdge() + + // Boxes + boxes = getAll(box) + for (let i = 0; i < boxes.length; i++) { + boxes[i].y += 1 // gravity + } +} + +function isOnGround() { + walls = getAll(wall) + boxes = getAll(box) + fboxes = getAll(fbox) + let x = getFirst(player).x + let y = getFirst(player).y + for (let i = 0; i < walls.length; i++) { + if (x === walls[i].x & y+1 === walls[i].y) { + return true + } + } + for (let i = 0; i < boxes.length; i++) { + if (x === boxes[i].x & y+1 === boxes[i].y) { + return true + } + } + for (let i = 0; i < fboxes.length; i++) { + if (x === fboxes[i].x & y+1 === fboxes[i].y) { + return true + } + } +} + +// Checks +function checkDeath() { + let x = getFirst(player).x + let y = getFirst(player).y + // check spike contact + spikes = getAll(spike) + for (let i = 0; i < spikes.length; i++) { + if (x === spikes[i].x & y+1 === spikes[i].y & !dead) { + gameOver("Game Over!") + } + } + // check out of bounds death + if (y === height() - 1) { + clearTile(x,y) + gameOver("Bro fell off") + } +} +function checkFlag() { + if (flagLevels.includes(level)) { // skip check if the level isn't a flag level + x = getFirst(player).x + y = getFirst(player).y + let tip = getFirst(flagtip) + let poles = getAll(flagpole) + let base = getFirst(flagbase) + // check base + if (x === base.x & y === base.y) { + levelWin(0) + return + } + // check all pole tiles + for (let i = 0; i < poles.length; i++) { + if (x === poles[i].x & y === poles[i].y) { + levelWin(1) + return + } + } + // check tip + if (x === tip.x & y === tip.y) { + levelWin(2) + return + } + } +} +function checkEdge() { + x = getFirst(player).x + if (x+1 === width() & !flagLevels.includes(level)) { // right edge, check that it isn't a flag level + edge = "r" + } + else if (x === 0 & !flagLevels.includes(level-1) & level > 1 ) { // left edge, check that previous screen wasn't a flag screen and that it isn't the first screen + edge = "l" + } + else { + edge = "" + } +} + +setInterval(() => { // physics + if (!dead) { + update() + } +}, 100) +setInterval(() => { // music + playBGM() +}, 4*tuneLen) + +setPushables({ + [ player ]: [ box ] +}) + +// x axis +onInput("a", () => { + mx = -1 + if (edge === "l") { // scroll if already on edge + screenScrollBack() + } +}) +onInput("d", () => { + mx = 1 + if (edge === "r") { // scroll if already on edge + screenScroll() + } +}) +// jump +onInput("j", () => { + if (isOnGround()) { + my = -2 + } + if (level === 0) { + screenScroll() + clearText() + } + if (level === 12) { + dead = false + } +}) + +// music toggle +onInput("i", () => { + playMusic = !playMusic +}) +// reset level +onInput("k", () => { + gameOver("Reset") +}) + + +afterInput(() => { + if (dead) { // cancel inputs in dead state + mx = 0 + my = 0 + deadInputs += 1 // fun! + if (deadInputs > 10) { + addText("stop it!", {y:4}) // tell player to shut up if they start mashing buttons in frustration + } + } +}) \ No newline at end of file diff --git a/games/Find_The_Suspect.js b/games/Find_The_Suspect.js index 9af0f37dc9..8918f77ce4 100644 --- a/games/Find_The_Suspect.js +++ b/games/Find_The_Suspect.js @@ -1,8 +1,8 @@ /* @title: find_the_suspect +@author: jonas @tags: [] @addedOn: 2023-02-02 -@author: jonas */ const left = "v"; diff --git a/games/Fire_Hound.js b/games/Fire_Hound.js index 29566162c0..b9c55afac3 100644 --- a/games/Fire_Hound.js +++ b/games/Fire_Hound.js @@ -1,8 +1,8 @@ /* @title: Fire Hound -@tags: ['puzzle-score'] -@addedOn: 2023-01-30 @author: Himir Desai +@tags: ['puzzle'] +@addedOn: 2023-01-30 */ const player = "p"; diff --git a/games/Fish_in_the_Sea.js b/games/Fish_in_the_Sea.js index 3a72f37092..9c3a728bea 100644 --- a/games/Fish_in_the_Sea.js +++ b/games/Fish_in_the_Sea.js @@ -1,8 +1,8 @@ /* @title: Fish_in_the_Sea -@tags: ['energy-control'] -@addedOn: 2022-12-01 @author: Hugh Wilks +@tags: ['puzzle'] +@addedOn: 2022-12-01 */ /* diff --git a/games/Flamin_Finger.js b/games/Flamin_Finger.js index fa897a71d7..66998566c3 100644 --- a/games/Flamin_Finger.js +++ b/games/Flamin_Finger.js @@ -1,8 +1,8 @@ /* @title: Flamin_Finger -@tags: ['timer-puzzle'] -@addedOn: 2023-02-23 @author: Richie Tran +@tags: ['puzzle','timed'] +@addedOn: 2023-02-23 A computer rendition of the classic game Flamin' Finger! Use WASD to move and colect the white circles! Find the secret (not so secret) easter egg!! All levels are possible and were tested by multiple people diff --git a/games/Flip_a_Coin.js b/games/Flip_a_Coin.js index b3b3807553..3456ee47d3 100644 --- a/games/Flip_a_Coin.js +++ b/games/Flip_a_Coin.js @@ -1,9 +1,9 @@ /* - @title: Flip a Coin @author: Arnav Kumar -@tags: ["coin", "classic"] +@tags: ['retro'] @addedOn: 2024-07-24 + */ let background = "b"; diff --git a/games/Flurffy.js b/games/Flurffy.js index 166357725f..7a5187aa5f 100644 --- a/games/Flurffy.js +++ b/games/Flurffy.js @@ -1,8 +1,8 @@ /* @title: Flurffy -@tags: ['classic'] -@addedOn: 2022-09-13 @author: Lucas +@tags: ['retro'] +@addedOn: 2022-09-13 */ const flurffy = "f" const canoup = "m" diff --git a/games/Flying_Fish_Platformer_Game.js b/games/Flying_Fish_Platformer_Game.js new file mode 100644 index 0000000000..325a750e3f --- /dev/null +++ b/games/Flying_Fish_Platformer_Game.js @@ -0,0 +1,305 @@ +/* +@title: Flying Fish +@author: Reese Ochitwa +@tags: [] +@addedOn: 2024-08-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const platform = "f" +const cloud = "c" +const sky = "s" +const grass = "g" +const border = "b" +const trophy = "t" +const gravity = 1; + + +setLegend( + [ player, bitmap` +................ +................ +................ +................ +................ +9......9........ +69....99........ +999..696......3. +.939939....99933 +..9969....99209. +...39..99999229. +...999693999999. +....9399999999.. +.....99699399... +................ +................` ], + [ platform, bitmap` +HHHHHHHH88888888 +HHHHHHHH88888888 +HHHHHHHH88888888 +HHHHHHHH88888888 +HHHHHHHH88888888 +HHHHHHHH88888888 +HHHHHHHH88888888 +HHHHHHHH88888888 +88888888HHHHHHHH +88888888HHHHHHHH +88888888HHHHHHHH +88888888HHHHHHHH +88888888HHHHHHHH +88888888HHHHHHHH +88888888HHHHHHHH +88888888HHHHHHHH`], + [ grass, bitmap ` +4444444444444444 +4444444444D44444 +44D444444DD44444 +44DD44DDDDD44DD4 +4DDC44DCCCDD44D4 +DCCCC4DCCCCDD4DD +CCCCCDDCCCCCDCCD +CCCCCCDCCCCCCCCD +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC` +], +[ sky, bitmap ` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`], +[cloud, bitmap ` +................ +................ +................ +....22222....... +...2222222...... +...222222122.... +...2222212222... +..22221122222... +.222222222222... +.222212222221... +.22221122221.... +.1122211111..... +..11211......... +...111.......... +................ +................`], + [ border , bitmap ` +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555`], +[trophy , bitmap` +6699999999999966 +6699999999999966 +6666699999966666 +6666666666666666 +6666666666666666 +6666688668866666 +.66668888886666. +..666688886666.. +...6668888666... +...6666886666... +....66666666.... +.....666666..... +.....666666..... +.....666666..... +.....666666..... +.....666666.....`]) + +setSolids([platform, player, grass, border]) +setBackground([sky]) + +let level = 0 +const levels = [ + map` +bbbbbsbbbbbb +bsscsssssssb +bsssssssscsb +bsffffsssssb +bssssssssssb +bscssssfffsb +bssssssssssb +bssssssssssb +bsssffffsssb +bpsssssssssb +bggggggggggb +bbbbbbbbbbbb`, + map` +bbbsbbbbbbbb +bssssscssssb +bssssssssssb +bfffsssssffb +bsssssssffsb +bsssscsffssb +bcssssffsssb +bfffsssssssb +bssssssssssb +bssssssscssb +bffffpfffffb +bbbbbbbbbbbb`, + map` +bbbbbbbbsbbb +bssssscssssb +bssssssssssb +bsssssfffssb +bssssssssssb +bsssscsssssb +bcsssssssssb +bssssssssffb +bsfffffssssb +bssssssscssb +bsspssssfffb +bbbbbbbbbbbb`, + map` +bbbsbbbbbbbb +bssssscssssb +bssssssssssb +bsffsssssssb +bffffssssssb +bsssscsssssb +bcssssssfffb +bsssssfffssb +bssssssssssb +bssssssscssb +bffffssspssb +bbbbbbbbbbbb`, + map` +bbbbbbsbbbbb +bssssscssssb +bssssssssssb +bssssssssssb +bffffffssssb +bsssscsssssb +bcssssssfffb +bssssssssssb +bssssssssssb +bssssfffcssb +bsspsssssssb +bbbbbbbbbbbb`, + map` +bbbbbbbbbbsb +bssssssssssb +bssssssssssb +bssssssssffb +bssscsffffsb +bssssssssssb +bssssssssssb +bfffffsssssb +bsssssssscsb +bscsssssfffb +bssssspssssb +bbbbbbbbbbbb`, + map` +bsbbbbbbbbbb +bssssscssssb +bssssssssssb +bfsssssssssb +bffssssssssb +bsffscsssssb +bcsssssfffsb +bssssssssssb +bssssssssssb +bsfffffscssb +bssssssssspb +bbbbbbbbbbbb`, + + map` +bbbbbbbbbbb +bscsssssssb +bssssscsstb +bssssfffffb +bcssssssssb +bsssssssssb +bffffsssssb +bssssssscsb +bsssssssssb +bpsssfffffb +bbbbbbbbbbb` + +] +setMap(levels[level]) + + +const checkLevel = setInterval(() => { + if (getFirst(player).y <= 0){ + level++; + setMap(levels[level]) +} + if(getFirst(player).y === 2 && getFirst(player).x === 9 && level === 7){ + setMap(map` +ssssssssssssssss +ssssssssssssssss +ssssssssssssssss +sbsssssbssbsssbs +ssbsssbsssbbssbs +ssbsssbsbsbsbsbs +ssbsbsbsbsbsbsbs +ssbsbsbsbsbsbsbs +sssbsbssbsbssbbs +sssbsbssbsbsssbs +ssssssssssssssss +ssssssssssssssss +ssssssssssssssss +ssssssssssssssss +pssstssstssstsss +gggggggggggggggg`)} + +},100) + +onInput("s", () => { + getFirst(player).y += 1 +}) +onInput("w", () => { + for (let i = 0; i < 4;i++){ + setTimeout(() => { getFirst(player).y -= 1 }, i * 100); +} + for (let i = 0; i < 4;i++){ + setTimeout(() => { getFirst(player).y += gravity }, i * 400); +} +}) + +onInput("d", () => { + getFirst(player).x += 1 +}) +onInput("a", () => { + getFirst(player).x -= 1 +}) + +afterInput(() => { + +}) + diff --git a/games/Food Stealer.js b/games/Food Stealer.js index 640b994090..40c358cad5 100644 --- a/games/Food Stealer.js +++ b/games/Food Stealer.js @@ -1,11 +1,11 @@ /* - - @title: Food Stealer @author: Julia Nadolska @tags: [] @addedOn: 2024-08-20 + + RULES You can move using 'WSAD' You can reset the level by clicking 'j' or reset the whole game by clicking 'i'. diff --git a/games/Formula_1.js b/games/Formula_1.js index 090d74a269..1c47d44c47 100644 --- a/games/Formula_1.js +++ b/games/Formula_1.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Formula 1 @author: Mary -@tags: ["multiplayer"] +@tags: ['multiplayer'] @addedOn: 2024-04-12 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const ferrari = "f" diff --git a/games/Friendly_Figures.js b/games/Friendly_Figures.js index 0828366348..71835fa897 100644 --- a/games/Friendly_Figures.js +++ b/games/Friendly_Figures.js @@ -1,9 +1,9 @@ /* - @title: Friendly Figures -@tags: ['sokoban-style', 'multiplayer'] -@addedOn: 2022-12-28 @author: Ali A. Saleh | January 2023 +@tags: ['puzzle','multiplayer'] +@addedOn: 2022-12-28 + --- diff --git a/games/Fruit_Catcher.js b/games/Fruit_Catcher.js index 86fe97ed5d..9443152685 100644 --- a/games/Fruit_Catcher.js +++ b/games/Fruit_Catcher.js @@ -1,7 +1,7 @@ /* -@title: Fruit_Catcher +@title: Fruit_Catcher @author: Navneet Saxena -@tags: ['catch'] +@tags: [] @addedOn: 2024-01-16 */ diff --git a/games/Galacticats.js b/games/Galacticats.js index 18e8069e94..99cf4c48d2 100644 --- a/games/Galacticats.js +++ b/games/Galacticats.js @@ -1,8 +1,8 @@ /* @title: Galacticats -@tags: ['catch'] -@addedOn: 2022-11-23 @author: adadyer +@tags: [] +@addedOn: 2022-11-23 Get the Galacticat back to his ship. diff --git a/games/Galaxy Blaster.js b/games/Galaxy Blaster.js new file mode 100644 index 0000000000..7bd6bcc3af --- /dev/null +++ b/games/Galaxy Blaster.js @@ -0,0 +1,244 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: Galaxy Blaster +@author: G1useppeV +@tags: [] +@addedOn: 2024-09-27 +*/ + +// Define new sprites + +let player = "p"; +let enemy = "e"; +let bullet = "b"; +let enemyBullet = "r"; +let background = "g"; + +// Player and Enemy Sprites +setLegend( + [player, bitmap` +...................... +........0............. +.......000............ +......00000........... +.....0000000.......... +....00.000.00......... +...00000000000........ +...00000000000........ +..0000000000000....... +...00000000000........ +....000000000......... +.....0000000.......... +......0...0........... +......0...0........... +.....000.000.......... +....000...000.........`], + [enemy, bitmap` +................ +................ +................ +....00000000000. +....05555555550. +....053L333L350. +....05555355550. +....00005350000. +.......05350.... +.......05350.... +.......01110.... +................ +................ +................ +................ +................`], + [bullet, bitmap` +................ +.......0........ +.......0........ +.......0........ +.......0........ +.......0........ +.......0........ +.......0........ +................ +................ +................ +................ +................ +................ +................ +................`], + [enemyBullet, bitmap` +................ +......333....... +......333....... +......333....... +......333....... +......333....... +......333....... +......333....... +................ +................ +................ +................ +................ +................ +................ +................`], + [background, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`] +); + +setBackground(background); + +// Setup the player movement and shooting +setMap(map` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +........p.......`); + +let playerX = 8; // Starting X position +let playerY = 10; // Fixed Y position for player + +// Clear old position and add the player at the new position + +function movePlayer(newX) { + clearTile(playerX, playerY); // Clear the old position + playerX = newX; // Update the new X position + addSprite(playerX, playerY, player); // Place the player at the new position +} + + +// Input to move left and right +onInput("a", () => { + if (playerX > 0) { + movePlayer(playerX - 1); + } +}); + +onInput("d", () => { + if (playerX < 15) { + movePlayer(playerX + 1); + } +}); + +// Shooting +onInput("w", () => { + addSprite(playerX, playerY - 1, bullet); +}); + +// Moving bullet +let bulletIntervalId = setInterval(() => { + getAll(bullet).forEach((b) => { + let x = b.x; + let y = b.y; + if (y > 0) {enemyMoveIntervalId + clearTile(x, y); + addSprite(x, y - 1, bullet); + } else { + clearTile(x, y); + } + }); +}, 100); + +// inital enemies +for (let i = 0; i < 5; i++) { + addSprite(i * 3, 0, enemy); + } +// Slow down the enemy spawn rate (every 5 seconds) + setInterval(() => { + for (let i = 0; i < 5; i++) { + addSprite(i * 3, 0, enemy); + } +}, 5000); // Slower rate (5 seconds) + + + +// Enemies moving +let enemyMoveIntervalId = setInterval(() => { + getAll(enemy).forEach((e) => { + let x = e.x; + let y = e.y; + if (y < 10) { + clearTile(x, y); + addSprite(x, y + 1, enemy); + } else if (y == 10){ + clearTile(x, y); + } + }); +}, 1000); + +// Randomly select enemies to shoot back +let enemyShootIntervalId = setInterval(() => { + let enemies = getAll(enemy); + if (enemies.length > 0) { + let randomEnemy = enemies[Math.floor(Math.random() * enemies.length)]; + addSprite(randomEnemy.x, randomEnemy.y + 1, enemyBullet); // Shoot from below the enemy + } +}, 2000); // Enemies shoot every 2 seconds + +// Move enemy bullets and check for collision with player +let enemyBulletMoveIntervalId = setInterval(() => { + getAll(enemyBullet).forEach((eb) => { + let x = eb.x; + let y = eb.y; + if (y < 9) { // As long as the bullet is above the player area + clearTile(x, y); + addSprite(x, y + 1, enemyBullet); + } else { + clearTile(x, y); // Clear bullet when it moves off-screen + } + + // Check if the player is hit by the enemy bullet + if (x === playerX && y + 1 === playerY) { + endGame("Game Over! "); + } + }); +}, 100); + +// Check if the player collides with an enemy +let collisionCheckIntervalId = setInterval(() => { + getAll(enemy).forEach((e) => { + if (e.x === playerX && e.y === playerY) { + endGame("Game Over!"); + + } + }); +}, 100); + +function endGame(message) { + console.log(message); + onInput("w", () => {}); + onInput("a", () => {}); + onInput("d", () => {}); + clearInterval(bulletIntervalId); + clearInterval(enemyMoveIntervalId); + clearInterval(enemyShootIntervalId); + clearInterval(enemyBulletMoveIntervalId); + clearInterval(collisionCheckIntervalId); // Stops all intervals, effectively ending the game + addText(message, { x: 5, y: 5, color: color`3`, scale: 0.2 }); +} diff --git a/games/Galaxy_Dodger.js b/games/Galaxy_Dodger.js index 6d1d2a59b1..bd40080392 100644 --- a/games/Galaxy_Dodger.js +++ b/games/Galaxy_Dodger.js @@ -1,7 +1,7 @@ /* @title: Galaxy Dodger -@tags: ['space', 'asteroids', 'build'] @author: Caleb B +@tags: ['real-time','action'] @addedOn: 2024-07-15 */ diff --git a/games/Get the Gift!.js b/games/Get the Gift!.js index 857e30b5e5..6bc029e4a8 100644 --- a/games/Get the Gift!.js +++ b/games/Get the Gift!.js @@ -3,8 +3,8 @@ @title: get_the_gift @author: Annaleah Sauceda @tags: [] -@img: "" @addedOn: 2023-08-08 +@img: "" */ diff --git a/games/GhoulThrasherFinal.js b/games/GhoulThrasherFinal.js index 7c262e73a9..2ebb13fdbb 100644 --- a/games/GhoulThrasherFinal.js +++ b/games/GhoulThrasherFinal.js @@ -1,7 +1,7 @@ /* @title: Ghoul Thrasher @author: Kushagra -@tags: ['dungeon', 'rougelike', 'shooter'] +@tags: ['role-playing','action','adventure'] @addedOn: 2024-08-06 */ @@ -9,18 +9,6 @@ function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } -const doorLeft = ";"; -const doorRight = ":";// Am I supposed to add this? I just added random stuff -/* -@title: Ghoul Thrasher -@author: Kushagra -@tags: ['dungeon', 'rougelike', 'shooter'] -*/ - -function getRandomInt(min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; -} - const doorLeft = ";"; const doorRight = ":"; const doorUp = "\'"; @@ -400,7 +388,7 @@ let buttonCoords = { } let nuclearBarrelCurrent = 0; -let nuclearBarrelMax = 25; +let nuclearBarrelMax = 15; setLegend( [skull, bitmap` @@ -2823,14 +2811,14 @@ setInterval(() => { attackCounter++; if (houseHealth === phaseTwoChange) { bossPhase = 2; - nuclearBarrelMax = 35 + nuclearBarrelMax = 25 } if (houseHealth === phaseThreeChange) { bossPhase = 3; - nuclearBarrelMax = 45 + nuclearBarrelMax = 35 } if (houseHealth === phaseFourChange) { - nuclearBarrelMax = 55 + nuclearBarrelMax = 45 } if (attackCounter >= attackCounterMax / bossPhase) { attackCounter = 0; @@ -3069,3049 +3057,3 @@ afterInput(() => { refreshText(); } }); -const doorUp = "\'"; -const doorDown = "\""; -const player = "p"; -const grass = "g"; -const fadingGrass = "f"; -const tombstone = "t"; -const houseTopLeft = "["; -const houseTopRight = "]"; -const houseBottomLeft = "{"; -const houseBottomRight = "}"; -const houseTopLeft2 = "P"; -const houseTopRight2 = "Q"; -const houseBottomLeft2 = "R"; -const houseBottomRight2 = "S"; -const bulletRight = ">"; -const bulletLeft = "<"; -const bulletUp = "^"; -const bulletDown = "v"; -const ghoulLeft = "h"; -const ghoulRight = "o"; -const babyGhoulLeft = "H"; -const babyGhoulRight = "O"; -const sleepyGhoul = "s"; -const wall = "w"; -const flower1 = "l"; -const flower2 = "m"; -const blood = "b"; -const goldenTomb = "e"; -const goldenFlowers = "&"; -const skeletonLeft = "!"; -const skeletonRight = "@"; -const skeletonArrow = "#"; -const invertedPlayer = "k" -const invertedGrass = "$"; -const invertedBrick = "z"; -const invertedButton = "%"; -const pushable = "*"; -const backToStartTper = "+"; -const health53 = "3"; -const health51 = "1"; -const health52 = "2"; -const health54 = "4"; -const health55 = "5"; -const health50 = "0"; -const health30 = "6"; -const health31 = "7"; -const health32 = "8"; -const health33 = "9"; -const bootlegBulletLeft = "A"; -const bootlegBulletRight = "B"; -const bootlegBulletUp = "C"; -const bootlegBulletDown = "D"; -const crackedTiles1 = "E"; -const crackedTiles2 = "F"; -const crackedTiles3 = "G"; -const nuclearBarrel = "N"; -const nuclearSplashLeft = "I"; -const nuclearSplashRight = "J"; -const nuclearSplashUp = "K"; -const nuclearSplashDown = "L"; -const houseLaser = "T"; -const savedPumpkin = "X"; -const savedApple = "Y"; -const savedEggplant = "Z"; -const unhauntedHouseTopLeft = "M"; -const unhauntedHouseTopRight = "U"; -const unhauntedHouseBottomLeft = "V"; -const unhauntedHouseBottomRight = "W"; -const butcheryGemFrameEmpty = "-"; -const butcheryGemFrameGotten = "~"; -const mazeGemFrameEmpty = "/"; -const mazeGemFrameGotten = "\\"; -const inverterGemFrameEmpty = ")"; -const inverterGemFrameGotten = "("; -const skull = "_"; - -// tunes -const bulletShotTune = tune` -59.642147117296226: C4/59.642147117296226 + D4/59.642147117296226 + E4/59.642147117296226 + F4/59.642147117296226 + G4/59.642147117296226, -59.642147117296226: G4/59.642147117296226 + F4/59.642147117296226 + E4/59.642147117296226 + D4/59.642147117296226 + C4/59.642147117296226, -59.642147117296226: C4^59.642147117296226 + D4^59.642147117296226 + E4^59.642147117296226 + G4^59.642147117296226 + F4^59.642147117296226, -59.642147117296226: C4~59.642147117296226 + D4~59.642147117296226 + E4~59.642147117296226 + G4~59.642147117296226 + F4~59.642147117296226, -59.642147117296226: C4~59.642147117296226, -59.642147117296226: C4~59.642147117296226, -59.642147117296226: C4~59.642147117296226, -1491.0536779324057`; -const playerWalkGrassTune = tune` -49.504950495049506: B5/49.504950495049506 + C4/49.504950495049506, -49.504950495049506: B5/49.504950495049506 + C4/49.504950495049506, -1485.1485148514853`; -const playerWalkTileTune = tune` -56.49717514124294: B5^56.49717514124294 + A5^56.49717514124294 + G5^56.49717514124294, -56.49717514124294: B5^56.49717514124294 + A5^56.49717514124294 + G5^56.49717514124294, -1694.9152542372883`; -const invertedPlayerWalkTune = tune` -58.02707930367505: B5~58.02707930367505 + A5~58.02707930367505 + G5~58.02707930367505, -58.02707930367505: B5~58.02707930367505, -1740.8123791102516`; -const inverterTune = tune` -200: B5/200, -6200`; - -const normalBulletHitTune = tune` -95.54140127388536: C4/95.54140127388536 + D4~95.54140127388536, -2961.783439490446`; - -const gemGotTune = tune` -82.87292817679558: B5/82.87292817679558, -82.87292817679558: A5/82.87292817679558, -82.87292817679558: B5/82.87292817679558, -82.87292817679558: A5/82.87292817679558, -82.87292817679558: G5/82.87292817679558, -82.87292817679558: F5/82.87292817679558, -82.87292817679558: G5/82.87292817679558, -82.87292817679558: F5/82.87292817679558, -82.87292817679558: E5/82.87292817679558, -82.87292817679558: F5/82.87292817679558, -82.87292817679558: E5/82.87292817679558, -82.87292817679558: D5/82.87292817679558, -82.87292817679558: C5/82.87292817679558, -82.87292817679558: B4/82.87292817679558, -1491.7127071823204`; -const deadTune = tune` -42.73504273504273: B5/42.73504273504273, -42.73504273504273: A5/42.73504273504273, -42.73504273504273: G5/42.73504273504273, -42.73504273504273: E5/42.73504273504273, -42.73504273504273: D5/42.73504273504273 + A5-42.73504273504273, -42.73504273504273: C5/42.73504273504273 + G5-42.73504273504273, -42.73504273504273: A4/42.73504273504273 + F5-42.73504273504273, -42.73504273504273: G4/42.73504273504273 + D5-42.73504273504273 + A5^42.73504273504273, -42.73504273504273: F4/42.73504273504273 + C5-42.73504273504273 + G5^42.73504273504273, -42.73504273504273: D4/42.73504273504273 + B4-42.73504273504273 + F5^42.73504273504273, -42.73504273504273: C4/42.73504273504273 + G4-42.73504273504273 + D5^42.73504273504273, -42.73504273504273: F4-42.73504273504273 + C5^42.73504273504273, -42.73504273504273: E4-42.73504273504273 + B4^42.73504273504273, -42.73504273504273: G4^42.73504273504273, -42.73504273504273: C4-42.73504273504273 + F4^42.73504273504273, -42.73504273504273: E4^42.73504273504273, -42.73504273504273: C4^42.73504273504273, -42.73504273504273, -42.73504273504273: C4~42.73504273504273, -42.73504273504273: C4~42.73504273504273, -512.8205128205128`; -const hurtTune = tune` -50.847457627118644: B5-50.847457627118644 + A5-50.847457627118644 + G5-50.847457627118644, -50.847457627118644: A5-50.847457627118644 + B5-50.847457627118644 + G5-50.847457627118644, -1525.4237288135594`; -const enteredFinalRoomForTheFirstTimeTune = tune` -50.67567567567568: C4-50.67567567567568, -50.67567567567568: D4-50.67567567567568 + C4~50.67567567567568, -50.67567567567568: E4-50.67567567567568 + D4~50.67567567567568 + C4-50.67567567567568, -50.67567567567568: F4-50.67567567567568 + E4~50.67567567567568 + D4-50.67567567567568, -50.67567567567568: E4-50.67567567567568 + G4^50.67567567567568 + F4~50.67567567567568, -50.67567567567568: F4-50.67567567567568 + A4^50.67567567567568 + G4~50.67567567567568, -50.67567567567568: G4-50.67567567567568 + B4^50.67567567567568 + A4~50.67567567567568, -50.67567567567568: A4-50.67567567567568 + C5^50.67567567567568 + B4~50.67567567567568, -50.67567567567568: B4~50.67567567567568 + A4-50.67567567567568 + C5^50.67567567567568, -50.67567567567568: A4~50.67567567567568 + G4-50.67567567567568 + B4^50.67567567567568, -50.67567567567568: G4~50.67567567567568 + F4-50.67567567567568 + A4^50.67567567567568, -50.67567567567568: F4~50.67567567567568 + E4-50.67567567567568 + G4^50.67567567567568, -50.67567567567568: G4~50.67567567567568 + A4^50.67567567567568 + F4-50.67567567567568, -50.67567567567568: F4~50.67567567567568 + G4^50.67567567567568 + E4-50.67567567567568, -50.67567567567568: E4~50.67567567567568 + F4^50.67567567567568 + D4-50.67567567567568, -50.67567567567568: D4~50.67567567567568 + E4^50.67567567567568 + C4-50.67567567567568, -50.67567567567568: C4~50.67567567567568 + D4^50.67567567567568, -760.1351351351352`; -const nuclearBarrelHitTune = tune` -65.21739130434783: B5/65.21739130434783 + A5-65.21739130434783, -65.21739130434783: A5/65.21739130434783 + F5-65.21739130434783 + B5^65.21739130434783, -65.21739130434783: G5/65.21739130434783 + E5-65.21739130434783 + B5^65.21739130434783, -65.21739130434783: F5/65.21739130434783 + A5^65.21739130434783, -65.21739130434783: G5^65.21739130434783, -1760.8695652173913`; -const nuclearSplashHitTune = tune` -50.08347245409015: B5/50.08347245409015, -50.08347245409015: C4/50.08347245409015, -50.08347245409015: B5/50.08347245409015, -1452.4207011686144`; -const winGameTune = tune` -114.94252873563218: B5~114.94252873563218, -114.94252873563218: A5~114.94252873563218, -114.94252873563218: G5~114.94252873563218, -229.88505747126436, -114.94252873563218: G5~114.94252873563218, -114.94252873563218: F5~114.94252873563218, -114.94252873563218: E5~114.94252873563218, -114.94252873563218: F5~114.94252873563218, -114.94252873563218: E5~114.94252873563218, -114.94252873563218: B4^114.94252873563218, -114.94252873563218: C5^114.94252873563218, -114.94252873563218: D5^114.94252873563218, -114.94252873563218: E5^114.94252873563218, -114.94252873563218: F5^114.94252873563218, -114.94252873563218: G5^114.94252873563218, -114.94252873563218, -114.94252873563218: A5^114.94252873563218, -114.94252873563218: A5-114.94252873563218, -114.94252873563218: A5/114.94252873563218, -1379.310344827586`; - -const winGameBGTune = tune` -90.9090909090909: B5/90.9090909090909, -90.9090909090909: A5/90.9090909090909, -90.9090909090909: G5/90.9090909090909, -90.9090909090909: F5/90.9090909090909, -90.9090909090909: E5/90.9090909090909, -90.9090909090909: F5/90.9090909090909, -90.9090909090909: G5/90.9090909090909, -90.9090909090909: F5/90.9090909090909, -90.9090909090909: E5/90.9090909090909, -90.9090909090909: D5/90.9090909090909, -90.9090909090909: C4/90.9090909090909, -90.9090909090909: D4/90.9090909090909, -90.9090909090909: E4/90.9090909090909, -90.9090909090909: F4/90.9090909090909, -90.9090909090909: G4/90.9090909090909, -90.9090909090909: A4/90.9090909090909, -90.9090909090909: G4/90.9090909090909, -90.9090909090909: F4/90.9090909090909, -90.9090909090909: G4/90.9090909090909, -90.9090909090909: A4/90.9090909090909, -90.9090909090909: B4/90.9090909090909, -90.9090909090909: C5~90.9090909090909, -909.090909090909`; - -let gameWon = false; - -const bulletVels = { - ">": [1, 0], - "<": [-1, 0], - "^": [0, -1], - "v": [0, 1], - "B": [1, 0], - "A": [1, 0], - "C": [0, -1], - "D": [0, 1], -}; - -const nuclearSplashVels = { - "I": [0, -1], - "J": [0, 1], - "K": [-1, 0], - "L": [1, 0] -} - -const enemies = [ - ghoulLeft, ghoulRight, - babyGhoulLeft, babyGhoulRight, - sleepyGhoul, - skeletonLeft, skeletonRight, skeletonArrow, - houseLaser, -]; - -const butcheryMax = 50; - -const enemyScoreMap = { - "H": 2, - "O": 2, - "h": 1, - "o": 1, - "s": 2, - "!": 2, - "@": 2, - "#": 1, -}; - -const initI = 0; -const initJ = 3; -const butcheryCoords = [3, 3]; -const mazeEndCoords = [1, 0]; -const inverterStart = [2, 2]; -const inverters = [ - [2, 2], - [2, 3], - [2, 4], - [2, 5], - [2, 6], - [2, 7], - [2, 8], - [2, 9], - [2, 10], - [2, 11], - [2, 12], - [2, 13], - [2, 14], - [2, 15] -]; -const inverterEnd = [2, 16]; -const warningRoom = [4, 2]; -const tutorialFinalBossRoom = [4, 3]; -const bossRoom = [4, 4]; -const gameStart = [3, 2]; -const deathEnd = [1, 3]; - -// Gems declaration -let mazeGemGotten = false; -let butcheryGemGotten = false; -let inverterGemGotten = false; - -const PLAYER_WALK_SPEED = 1; - -let canShootBullet = true; - -let ghoulCounterMax = 50; // We won't const this because we will change this -let ghoulCounter = 0; - -let ghoulDifficultyIncreaser = 0; -let difficultyGhoulSpawn = 0; - -let sleepyGhoulCounterMax = 70; // slightly longer than ghoul counter max -let sleepyGhoulCounter = 0; - -let skeletonCounter = 0; -let skeletonCounterMax = 100; - -let babyGhoulCounter = 0; -let babyGhoulCounterMax = 50; - -let texts = []; - -let playerHealth = 3; - -const maxHouseHealth = 15; -let houseHealth = maxHouseHealth; - -const phaseTwoChange = 12; -const phaseThreeChange = 8; -const phaseFourChange = 4; - -let ghoulLevels = [ // not const! - butcheryCoords, - gameStart -] -let sleepyGhoulLevels = [ // not const! - butcheryCoords -]; -let skeletonLevels = [ // not const! - butcheryCoords -]; - -let babyGhoulLevels = [ // not const! - butcheryCoords, - gameStart -] - -let butcheryScore = 0; - -let gemsCollected = 0; - -let inverted = false; - -let enteredFinalRoomForTheFirstTime = false; - -let pushableList = []; -let buttonCoords = { - '2,6': [ - [6, 4] - ], // uninverted lvl coords! - '2,8': [ - [2, 5] - ], - '2,10': [ - [6, 2], - [6, 3], - [6, 4] - ], - '2,12': [ - [4, 1], - [5, 6] - ], - '2,14': [ - [9, 1] - ] -} - -let nuclearBarrelCurrent = 0; -let nuclearBarrelMax = 25; - -setLegend( - [skull, bitmap` -CCCC00000000CCCC -CCC0222222220CCC -CC022222222220CC -C02200022000220C -C02200322300220C -C02222222222220C -C02222222222220C -C02222222222220C -CC000222222000CC -CCCCC022220CCCCC -CCCCC020020CCCCC -CCCCC000000CCCCC -CCCCCCCCCCCCCCCC -CCCCC000000CCCCC -CCCCC022220CCCCC -CCCCC000000CCCCC`], - - [butcheryGemFrameEmpty, bitmap` -3399999999999933 -3399999999999933 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -3399999999999933 -3399999999999933`], - [butcheryGemFrameGotten, bitmap` -3399999999999933 -3399999999999933 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99CCCCCCCCCCCC99 -99C6666666666C99 -99CCCCCC6666CC99 -99CCCCCC666CCC99 -99CCCCCCCCCCCC99 -99CC3CCCCC3CCC99 -99C333CCC333CC99 -99C333CCC333CC99 -9933333C33333C99 -99C333CCC333CC99 -3399999999999933 -3399999999999933`], - [mazeGemFrameEmpty, bitmap` -LL111111111111LL -LL111111111111LL -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -11LLLLLLLLLLLL11 -LL111111111111LL -LL111111111111LL`], - [mazeGemFrameGotten, bitmap` -LL111111111111LL -LL111111111111LL -11LLLLLLLLLLLL11 -11L66666666L6L11 -11L6LLLLL6LL6L11 -11L6L6LLLLLL6L11 -11L6L6666L6L6L11 -11L6LLLL6LL66L11 -11L6LL666L6L6L11 -11L6L66LLL6L6L11 -11L6LL6L66LL6L11 -11L6LL6LLLLL6L11 -11L6666L66666L11 -11LLLLLLLLLLLL11 -LL111111111111LL -LL111111111111LL`], - [inverterGemFrameEmpty, bitmap` -5577777777777755 -5577777777777755 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -77DDDDDDDDDDDD77 -5577777777777755 -5577777777777755`], - [inverterGemFrameGotten, bitmap` -HH888888888888HH -HH888888888888HH -8822222222222288 -8822222222222288 -8822222222222288 -8822242222422288 -8822242222422288 -8822222222222288 -8822222222222288 -8822422222242288 -8822244444422288 -8822222222222288 -8822222222222288 -8822222222222288 -HH888888888888HH -HH888888888888HH`], - - [unhauntedHouseTopLeft, bitmap` -4444444444444440 -444444444444440C -44444444444440CC -444LLLLLLLLLLLCC -4444LLLLLLLLLCCC -44444LLLLLLLCCCC -444444LLLLLCCCCC -444444LLLLLCCCCC -444444LLLLLCCCCC -444444LLLLLCCCCC -444440LLLLLCCCCC -44440CLLLLLCCCCC -4440CCCCCCCCCCCC -440CCCCCCCCCCCCC -40CCCCCCCCCCCCCC -0000000000000000`], - [unhauntedHouseTopRight, bitmap` -0444444444444444 -C044444444444444 -CC04444444444444 -CCC0444444444444 -CCCC044444444444 -CCCCC04444444444 -CCCCCC0444444444 -CCCCCCC044444444 -CCCCCCCC04444444 -CCCCCCCCC0444444 -CCCCCCCCCC044444 -CCCCCCCCCCC04444 -CCCCCCCCCCCC0444 -CCCCCCCCCCCCC044 -CCCCCCCCCCCCCC04 -0000000000000000`], - [unhauntedHouseBottomLeft, bitmap` -4D40CCCCCCCCC011 -DDD0CCCCCCCCC011 -DDD0C2222222C011 -DDD0C2772772C011 -DDD0C2772772C011 -DDD0C2222222C011 -DDD0C2772772C061 -DDD0C2772772C011 -DDD0C2222222C011 -DDD0CCCCCCCCC011 -DDD0CCCCCCCCC011 -DDD0CCCCCCCCC0L1 -DDD0CCCCCCCCC01L -DDD0CCCCCCCCC011 -4D40CCCCCCCCC000 -4440000000000000`], - [unhauntedHouseBottomRight, bitmap` -110CCCCCCCCC04D4 -110CCCCCCCCC0DDD -110C2222222C0DDD -110C2772772C0DDD -110C2772772C0DDD -110C2222222C0DDD -160C2772772C0DDD -110C2772772C0DDD -110C2222222C0DDD -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -1L0CCCCCCCCC0DDD -L10CCCCCCCCC0DDD -110CCCCCCCCC0DDD -000CCCCCCCCC04D4 -0000000000000444`], - [savedPumpkin, bitmap` -....0000........ -..0044440....... -.0DD404440...... -..000444440..... -..00099999000... -..09999999990... -.0999909099990.. -0C9C99090999C90. -0C9999999999990. -0C9990990999990. -0C99990099C9990. -0CC999999999990. -0CCC999999999C0. -0CCCCC99999C990. -.0C00C00090090.. -..0..00.00..0...`], - [savedApple, bitmap` -........0....... -.......0C0...... -.....000C00000.. -..0000D4C033330. -.033333DC3322330 -0C33303333322230 -0C33033333332230 -0C33030333033330 -0C33330333033330 -0C33330333033330 -0C33303333333330 -0CC3330033333330 -0CC3333333333330 -0CCCCC0003333330 -.0CC000..003300. -..00.......00...`], - [savedEggplant, bitmap` -..........0000.. -.....00000D440.. -....0H8888DD0... -...0H8888280.... -..0H80808880.... -..0H8080880..... -..0H808080...... -..0H888880...... -..0H888880...... -..00H08080...... -...0H808880..... -...00H888880.... -....0HH888880... -....00HH888880.. -.....00HH88880.. -......0000000...`], - [nuclearBarrel, bitmap` -1110000000000111 -1L0DDDDDDDDDD0L1 -10DD44444444DD01 -1011DDDDDDDD1101 -1011111111111101 -1011111111111101 -10L1112222111L01 -101L12606021L101 -1011L206062L1101 -1011126060211101 -1011120606211101 -1011112222111101 -10L1111111111L01 -101L11111111L101 -1L01LLLLLLLL10L1 -1110000000000111`], - [nuclearSplashLeft, bitmap` -................ -................ -................ -................ -...DDDDDDDDDD... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...DDDDDDDDDD... -................ -................ -................`], - [nuclearSplashRight, bitmap` -................ -................ -................ -................ -...DDDDDDDDDD... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...DDDDDDDDDD... -................ -................ -................`], - [nuclearSplashUp, bitmap` -................ -................ -................ -................ -...DDDDDDDDDD... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...DDDDDDDDDD... -................ -................ -................`], - [nuclearSplashDown, bitmap` -................ -................ -................ -................ -...DDDDDDDDDD... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...D44444444D... -...DDDDDDDDDD... -................ -................ -................`], - [houseLaser, bitmap` -................ -................ -................ -................ -................ -................ -.33333333333333. -.39999999999993. -.39222222222293. -.39999999999993. -.33333333333333. -................ -................ -................ -................ -................`], - [pushable, bitmap` -0000000000000000 -0C666666666666C0 -06C6666666666C60 -066C66666666C660 -0666C666666C6660 -06666C6666C66660 -066666C66C666660 -0666666CC6666660 -0666666CC6666660 -066666C66C666660 -06666C6666C66660 -0666C666666C6660 -066C66666666C660 -06C6666666666C60 -0C666666666666C0 -0000000000000000`], - [invertedButton, bitmap` -5555555555555555 -5555555555555555 -5555222222225555 -5552211111122555 -5522133333312255 -5221333323331225 -521C333332333125 -521C333333233125 -521C222222223125 -521CC33333233125 -521CCC3332333125 -52L1CCC323331225 -522L1CCC33312255 -5522L11111122555 -5552222222225555 -5555555555555555`], - [skeletonArrow, bitmap` -................ -................ -................ -................ -....00000000.... -....01111120.... -....01111110.... -....0L111110.... -....0LL11110.... -....0LLL1110.... -....0LLL1110.... -....00000000.... -................ -................ -................ -................`], - [goldenTomb, bitmap` -4444444444444444 -4444446666644444 -444446LLLLL64444 -444446L111L64444 -44446LL111LL6444 -44446L11111L6444 -4446LL11111LL644 -4446L1155511L644 -4446L1111111L644 -4446L1155511L644 -4446L1111111L644 -4446LLLLLLLLL644 -446L111111111L64 -446L6LLLLLLLLL64 -4466666666666664 -4444444444444444`], - [doorLeft, bitmap` -0000000000000000 -0000000000000000 -0000660000000000 -0006660000000000 -0066660000000000 -0666666666666666 -6666666666666666 -6666666666666666 -6666666666666666 -6666666666666666 -0666660000000000 -0066660000000000 -0006660000000000 -0000660000000000 -0000000000000000 -0000000000000000`], - [doorRight, bitmap` -0000000000000000 -0000000000000000 -0000000000660000 -0000000000666000 -0000000000666600 -6666666666666660 -6666666666666666 -6666666666666666 -6666666666666666 -6666666666666666 -0000000000666660 -0000000000666600 -0000000000666000 -0000000000660000 -0000000000000000 -0000000000000000`], - [doorUp, bitmap` -0000006666000000 -0000066666600000 -0000666666660000 -0006666666666000 -0066666666666600 -0066666666666600 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000`], - [doorDown, bitmap` -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0000006666600000 -0066666666666600 -0066666666666600 -0006666666666000 -0000666666660000 -0000066666600000 -0000006666000000`], - [wall, bitmap` -0000000000000000 -0L11011101110120 -0L11011101110110 -0L11011101110110 -0000000000000000 -0L10111011101110 -0L10111011101110 -0L10111011101110 -0000000000000000 -0L11011101110110 -0L11011101110110 -0LL1011101110110 -0000000000000000 -0LL0L11011101110 -0LL0LLL011101110 -0000000000000000`], - [bootlegBulletLeft, bitmap` -................ -................ -................ -................ -....000000000... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....000000000... -................ -................ -................`], - [bootlegBulletRight, bitmap` -................ -................ -................ -................ -....000000000... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....000000000... -................ -................ -................`], - [bootlegBulletUp, bitmap` -................ -................ -................ -................ -....000000000... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....000000000... -................ -................ -................`], - [bootlegBulletDown, bitmap` -................ -................ -................ -................ -....000000000... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....033333330... -....000000000... -................ -................ -................`], - [bulletRight, bitmap` -................ -................ -................ -................ -................ -................ -.00000000000000. -.066C666C666260. -.066C666C666660. -.00000000000000. -................ -................ -................ -................ -................ -................`], - [bulletLeft, bitmap` -................ -................ -................ -................ -................ -................ -.00000000000000. -.062666C666C660. -.066666C666C660. -.00000000000000. -................ -................ -................ -................ -................ -................`], // bullet left - [bulletUp, bitmap` -................ -......0000...... -......0660...... -......0620...... -......0660...... -......0660...... -......0660...... -......0CC0...... -......0660...... -......0660...... -......0660...... -......0CC0...... -......0660...... -......0660...... -......0000...... -................`], - [bulletDown, bitmap` -................ -......0000...... -......0660...... -......0660...... -......0CC0...... -......0660...... -......0660...... -......0660...... -......0CC0...... -......0660...... -......0660...... -......0660...... -......0260...... -......0660...... -......0000...... -................`], - [skeletonLeft, bitmap` -......1111...... -.....122221..... -....120202L1.... -..C.122222L1.... -.C2.102222L1.... -C.2.12222LL1.... -C.2..111111..... -C.2.122222L1.... -C.2.122222L1.... -C.211111111111.. -C.2112222LL111.. -C.2.1222LLL1.... -.C2.11111111.... -..C..11..11..... -.....11..11..... -.....11..11.....`], - [skeletonRight, bitmap` -......1111...... -.....122221..... -....1L202021.... -....1L222221.C.. -....1L222201.2C. -....1LL22221.2.C -.....111111..2.C -....1L222221.2.C -....1L222221.2.C -..111111111112.C -..111LL2222112.C -....1LLL2221.2.C -....11111111.2C. -.....11..11..C.. -.....11..11..... -.....11..11.....`], - [ghoulLeft, bitmap` -....11111....... -...1222221...... -..122222221..... -..1222222221.... -..1232232221.... -.12222222221.... -.12222222221.... -.12222222221.... -.122222222921... -.122222299221... -..12222222221... -..12222111221... -..121121.11221.. -..121.11..1121.. -...11..11..111.. -....11..........`], - [ghoulRight, bitmap` -.......11111.... -......1222221... -.....122222221.. -....1222222221.. -....1222322321.. -....12222222221. -....12222222221. -....12222222221. -...129222222221. -...122992222221. -...12222222221.. -...12211122221.. -..12211.121121.. -..1211..11.121.. -..111..11..11... -..........11....`], - [babyGhoulLeft, bitmap` -................ -.....1111....... -....122221...... -....1222221..... -....1727221..... -...11222221..... -...12222221..... -...12222221..... -...12222221..... -...12222251..... -...11222521..... -....1111111..... -.....11..111.... -......11..112... -................ -................`], - [babyGhoulRight, bitmap` -................ -.......1111..... -......122221.... -.....1222221.... -.....1227271.... -.....12222211... -.....12222221... -.....12222221... -.....12222221... -.....15222221... -.....12522211... -.....1111111.... -....111..11..... -...211..11...... -................ -................`], - [sleepyGhoul, bitmap` -..........666666 -.....111111...6. -....12222221.6.. -....122222266... -...1222222666666 -...1200220021... -..122222222221.. -..122222222221.. -..122222222221.. -..122222222221.. -..122000000221.. -..122722222221.. -..122222122221.. -..121221.11111.. -..11.111.1..11.. -...1..1.....1...`], - [player, bitmap` -................ -................ -.......000...... -.......0C0...... -......0660...... -......06660.0... -....0003630.0... -....0.0666000... -....0.05550..... -......06660..... -.....0F6660..... -.....0FF60...... -......000....... -......0.0....... -.....00.00...... -................`], - [invertedPlayer, bitmap` -................ -................ -.......222...... -.......2F2...... -......2882...... -......28882.2... -....2224842.2... -....2.2888222... -....2.2DDD2..... -......28882..... -.....2H8882..... -.....2HH82...... -......222....... -......2.2....... -.....22.22...... -................`], - [invertedGrass, bitmap` -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555 -5555555555555555`], - [grass, bitmap` -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444`], - [fadingGrass, bitmap` -DDDDDDDDDDDDDDDD -DDDDDDDDDDDDDDDD -DDDDDDDDDDDDDDDD -4DDD4DDDD4DDD4DD -4D4DD4DD4DD4DDD4 -444D4D4D4D44D4D4 -4D444D4D44D444D4 -444DD44D44D44444 -444D4D444DD444DD -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444`], - [tombstone, bitmap` -4444444444444444 -4444444444444444 -444444LLLLL44444 -444444L111L44444 -44444LL111LL4444 -44444L11111L4444 -4444LL11111LL444 -4444L11LLL11L444 -4444L1111111L444 -4444L11LLL11L444 -4444L1111111L444 -4444LLLLLLLLL444 -444L111111111L44 -444LCLLLLLLLLLC4 -44CCCCCCCCCCCCC4 -4444444444444444`], - [houseTopLeft, bitmap` -4444444444444440 -444444444444440C -44444444444440CC -4444444444440CCC -444444444440CCCC -44444444440CCCCC -4444444440CCCCCC -444444440C0CCCCC -44444440CC00CCCC -4444440CCCCC0CCC -444440CCCCCCC0CC -44440CCCCCCCCCCC -4440CCCCCCCCCCCC -440CCCCCCCCCCCCC -40CCCCCCCCCCCCCC -0000000000000000`], - [houseTopRight, bitmap` -0444444444444444 -C044441114444444 -CC04444411444444 -CCC0444LLLLL4444 -CCCC044L111L4444 -CCCCC04LLLLL4444 -CC0CCC04L1L44444 -CCC0CCC0L1L44444 -CCC0CCCCL1L44444 -CCCCCCCCLFL44444 -CCCCCCCCC0044444 -CCCCCCFFCCC04444 -CCCCCCFFCCCC0444 -CCCCCCCCCCCCC044 -CCCCCCCCCCCCCC04 -0000000000000000`], - [houseBottomLeft, bitmap` -4D40CCCCCCCCC011 -DDD0CCCCCCCCC011 -DDD0CCCCCCCCC011 -DDD0CCCC00CCC011 -DDD0CC3C09CCC011 -DDD0CC3CCCCCC011 -DDD0CC33CCCCC061 -DDD0CCCC3CCCC011 -DDD0CCC3CCCCC011 -DDD0CCCCC3CCC011 -DDD0CCCCC3CCC011 -DDD0CCCCCC3CC011 -DDD0CCCCCCCCC01L -DDD0CCCCCCCCC011 -4D40CCCCCCCCC000 -4440000000000000`], - [houseBottomRight, bitmap` -110CCCCCCCCC04D4 -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -110CC00CCCCC0DDD -110CC90CCCCC0DDD -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -110CCCCCCCCC0DDD -L10CCCCCCCCC0DDD -110CCCCCCCCC0DDD -000CCCCCCCCC04D4 -0000000000000444`], - [houseTopLeft2, bitmap` -1111111111111110 -1LL2LLLLLLLLLL0C -1LL2LLLLLLLLL0CC -1LLL2LLLLLLL0CCC -1LL2LLLLLLL0CCCC -1L22LLLLLL0CCCCC -12LLLLLLL0CCCCCC -1LLLLLLL000CCCCC -1LLLLLL0CC00CCCC -1LLLLL0CCCCC0CCC -1LLLL0C0000000CC -1LLL0CCC0LL0CCCC -1LL0CCCC0L20CCCC -1L0CCCC000000CCC -10CCCCCCCCCCCCCC -0000000000000000`], - [houseTopRight2, bitmap` -0111111111111111 -C0LLLLLLLLLL2LL1 -CC0LLLLLLLLL2LL1 -CCC0LLLLLLL2LLL1 -CCCC0LLLLLLL0LL1 -CCCCC0LLLLLL20L1 -CCCCCC0LLLLLLL21 -CCCCC000LLLLLL21 -CCCC00CC0LLLL2L1 -CCC0CCCCC0LLLLL1 -CC0000000C0LLLL1 -CCCC0LL0CCC0LLL1 -CCCC03L0CCCC0LL1 -CCC000000CCCC0L1 -CCCCCCCCCCCCCC01 -0000000000000000`], - [houseBottomLeft2, bitmap` -11109CCCCCCCC033 -1LL0CCCCCCCCC093 -1LL0C2222222C039 -1L30C2C323C2C039 -13L0C23C2C32C033 -1LL0C2222222C039 -1LL0C23C2C32C033 -1LL0C2C323C2C093 -1LL0C2222222C033 -1LL0CCCCC3CCC033 -1LL0CCCC33CCC033 -1LL0CCCC3C3CC066 -1LL0CC3CC33CC066 -1LL0CCCCCC3CC036 -1LL0CCCCCCCCC000 -1110000000000000`], - [houseBottomRight2, bitmap` -330CCCCCCCCC0111 -390CCCCCCCCC0LL1 -930C2222222C0LL1 -930C27323C2C0LL1 -330C2372C32C0L93 -930C2229222C0L91 -330C23C2732C0L91 -390C2C32372C0L91 -330C2222222C0LL1 -330CCC3CCCCC0LL1 -330CCC3CCCCC0LL1 -660CC3CCC9CC0LL1 -660CCCCCC93C0LL1 -630CCCCC333C0LL1 -000CCCCCC9990LL1 -0000000000000111`], - [flower1, bitmap` -4444444444444444 -441144444444D444 -4411444444444444 -226624444443D444 -2166444444433444 -442L44444D4DD444 -4422444444444D44 -44C44444444C4C44 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444444 -4444444444444754 -4444444444447994`], - [flower2, bitmap` -4444444444444444 -4444444444444444 -4446F44444444444 -444FF44444444L44 -46FCCF644444L444 -466CC6F4444LHL44 -444FF4444444LCC4 -444F6444444C4444 -4444444444444444 -4444444444444444 -4444444444444444 -444444D144444444 -44444D9D44444444 -444444D444444444 -4444444444444444 -4444444444444444`], - [blood, bitmap` -4444444444444444 -4444444444444444 -4444444444444484 -4444334444444444 -4444334444444444 -4443434444448844 -4434444444448848 -4433444494448448 -4334444449448884 -4444444449444444 -4444444444944444 -4444444444944444 -4444444444494444 -4444444444494444 -4444444444449444 -4444444444444944`], - [goldenFlowers, bitmap` -4444444444444444 -4664466446644664 -4664466446644664 -4444444444444444 -4444444444444444 -4664466446644664 -4664466446644664 -4444444444444444 -4444444444444444 -4664466446644664 -4664466446644664 -4444444444444444 -4444444444444444 -4664466446644664 -4664466446644664 -4444444444444444`], - [invertedBrick, bitmap` -2222222222222222 -2399299929992972 -2399299929992992 -2399299929992992 -2222222222222222 -2392999299929992 -2392999299929992 -2392999299929992 -2222222222222222 -2399299929992992 -2399299929992992 -2339299929992992 -2222222222222222 -2332399299929992 -2332333299929992 -2222222222222222`], - [backToStartTper, bitmap` -0000000000000000 -0666666666666660 -0666336666666660 -0663336666666660 -0633336666666660 -0333333333333330 -C333333333333330 -C333333333333330 -C333333333333330 -C333333333333330 -0333336666666660 -0633336666666660 -0663336666666660 -0666336666666660 -0666666666666660 -0000000000000000`], - [health55, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0337337337337330 -0337337337337330 -0337337337337330 -0337337337337330 -0337337337337330 -0777777777777770 -0773737733377770 -0773337737377770 -0773737733377770 -0773737737777770 -0000000000000000`], - [health54, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0337337337337LL0 -0337337337337LL0 -0337337337337LL0 -0337337337337LL0 -0337337337337LL0 -0777777777777770 -0773737733377770 -0773337737377770 -0773737733377770 -0773737737777770 -0000000000000000`], - [health53, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0337337337LL7LL0 -0337337337LL7LL0 -0337337337LL7LL0 -0337337337LL7LL0 -0337337337LL7LL0 -0777777777777770 -0773737733377770 -0773337737377770 -0773737733377770 -0773737737777770 -0000000000000000`], - [health52, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0337337LL7LL7LL0 -0337337LL7LL7LL0 -0337337LL7LL7LL0 -0337337LL7LL7LL0 -0337337LL7LL7LL0 -0777777777777770 -0773737733377770 -0773337737377770 -0773737733377770 -0773737737777770 -0000000000000000`], - [health51, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0337LL7LL7LL7LL0 -0337LL7LL7LL7LL0 -0337LL7LL7LL7LL0 -0337LL7LL7LL7LL0 -0337LL7LL7LL7LL0 -0777777777777770 -07737377LLL77770 -07733377L7L77770 -07737377LLL77770 -07737377L7777770 -0000000000000000`], - [health50, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0LL7LL7LL7LL7LL0 -0LL7LL7LL7LL7LL0 -0LL7LL7LL7LL7LL0 -0LL7LL7LL7LL7LL0 -0LL7LL7LL7LL7LL0 -0777777777777770 -077L7L77LLL77770 -077LLL77L7L77770 -077L7L77LLL77770 -077L7L77L7777770 -0000000000000000`], - [health33, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0733373337333770 -0733373337333770 -0733373337333770 -0777777777777770 -0777777777777770 -0777777777777770 -0773737733377770 -0773337737377770 -0773737733377770 -0773737737777770 -0000000000000000`], - [health32, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -0733373337LLL770 -0733373337LLL770 -0733373337LLL770 -0777777777777770 -0777777777777770 -0777777777777770 -0773737733377770 -0773337737377770 -0773737733377770 -0773737737777770 -0000000000000000`], - [health31, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -073337LLL7LLL770 -073337LLL7LLL770 -073337LLL7LLL770 -0777777777777770 -0777777777777770 -0777777777777770 -07737377LLL77770 -07733377L7L77770 -07737377LLL77770 -07737377L7777770 -0000000000000000`], - [health30, bitmap` -0000000000000000 -0777777777777770 -0777777777777770 -0777777777777770 -0777777777777770 -07LLL7LLL7LLL770 -07LLL7LLL7LLL770 -07LLL7LLL7LLL770 -0777777777777770 -0777777777777770 -0777777777777770 -077L7L77LLL77770 -077LLL77L7L77770 -077L7L77LLL77770 -077L7L77L7777770 -0000000000000000`], - [crackedTiles1, bitmap` -1111111111111111 -1LLL2LLLLLLLLLL1 -1LL2LLLLLLLLLLL1 -1L2LLLLLLLLLLLL1 -1L2L2LLLLLLLLLL1 -1LL22LLLLLLLLLL1 -1LL2LLLLLLLLLLL1 -122LLLLLLLLLLLL1 -1LLLLLLLLLLLLLL1 -1LLLLLLLLLLLLLL1 -1LLLLLLLLLLLLLL1 -1LLLLLLLLLLLLLL1 -1LLLLLLLLLL0LLL1 -1LLLLLLLLL0L00L1 -1LLLLLLLLLLLLL01 -1111111111111111`], - [crackedTiles2, bitmap` -1111111111111111 -1LLLLLLLLLLL0LL1 -1LLLLLLLLLLL0LL1 -1LLLLLLLLLL0L1L1 -1LLLLLLLLLLLLLL1 -1LLLLLLLLLLLLLL1 -12L22LLLLLLLLLL1 -1L22LLLLLLLLLLL1 -1LL2LLLLLLLLLLL1 -1LLL22LLLLLLLLL1 -1LLL2LLLLLLLLLL1 -1LLL22LLLLLLLLL1 -1LLL2LLLLLL0LLL1 -1LL2LLLLLL0L00L1 -1L2LLLLLLLLLLL01 -1111111111111111`], - [crackedTiles3, bitmap` -1111111111111111 -1LLL2LLLLLL1LLL1 -1LL2LLLLLLLL1LL1 -1L2LLLLLLLLL1LL1 -1L2L2LLLLLLLL1L1 -1LL22LLLLLLLLL21 -1LL2LLLLLLLLLL21 -102LLLLLLLLLLLL1 -1L0LLLLLLLLLLLL1 -1LL0LLLLLLLLLLL1 -1LL1LLLLLLLLLLL1 -1LLLLLLLLLLLLLL1 -1LLLLLLLLLL0LLL1 -1LLLLLLLLL0L00L1 -1LLLLLLLLLLLLL01 -1111111111111111`], -); - -setBackground(grass); - -setSolids([player, wall, invertedPlayer, pushable, health55, health54, health53, health52, health51, health50, health30, health31, health32, health33, butcheryGemFrameEmpty, butcheryGemFrameGotten, mazeGemFrameEmpty, mazeGemFrameGotten, inverterGemFrameEmpty, inverterGemFrameGotten]); - -let levelI = initI; -let levelJ = initJ; -// CHANGE ALL COORDS WHEN ADDING ANYTHING!! -const levels = [ - ['', - '', - map` -wwww'ww -wttp[]w -wttl{}w -wttmffw -wwwwwww`, // maze - map` -wwwwwww -wgggggw -+gpgggw -wgggggw -wgggggw -wgggggw -wwwwwww`, // init - ], // maze - [map` -wwwwwwww'w -w&&&&&&&pw -w&&&&&&&&w -w&&&&&&&&w -w&&&&&&&&w -we&&&&&&&w -w&&&&&&&&w -w&&&&&&&&w -w&&&&&&&&w -w&&&&&&&&w -wwwwwwwwww`, // maze end - map` -wwww''wwww -wggggpgggw -wttttttttw -wttttttttw -wttttttttw -wtttttttt: -wttttttttw -wttttttttw -wttttttttw -wttttttttw -wwwwwwwwww`, // mase - map` -wwwwwwwwww -wggggwgggw -wgwggwgwgw -wgwwwwgwgw -wgwggwgwgw -;pgggwgwgw -wwwggggwgw -wgwggggwgw -wgwgwwwwgw -wggggggggw -www"wwwwww`, // maze - map` -wwwwwww -w_____w -+_____w -w_____w -wtttttw -wttpttw -wwwwwww`, // death - ], - [map` -wwwwwwwwww -wgwggwgggw -wgwggwgwgw -wgwgggggp: -;gwwwwwgg: -;gggggwggw -wggwggwggw -wggwwwwggw -wwwwggwggw -wwgggggggw -www""wwwww`, // maze 2,0 - map` -wwwwwwww'w -wggggwggpw -wgwggwgwgw -wgwwwwgwgw -wgwggwgwgw -;ggggwgwgw -wwwggggwgw -wgwggggwgw -wgwgwwwwgw -wggggggggw -www"wwwwww`, // maze 2.1 - map` -wwww'wwww -wgggpgggw -wwwwwwwww -wgggwgggw -wgggwgggw -wgggwgggw -wwwwwwwww`, //INVERTer 1 2,2 - map` -wwwwwwwww -w$$$k$$$w -wzzzzzzzw -w$$$z$$$: -w$$$z$$$w -w$$$z$$$w -wwwwwwwww`, // inverter 1 2,3 - map` -wwwwwwwww -wggwwgggw -wwwwgwggw -wpgwgwggw -wwwwgwggw -wwg.gwggw -wwwwwwwww`, // inverter 1 2,4 - map` -wwwwwwwww -w$$www$$w -w$$w$z$$w -wk$w$w$$: -wwzwww$$w -ww$w$w$$w -wwwwwwwww`, // inverter 2 2,5 - map` -wwwwwwwww -wgggggggw -wgggggggw -wpg*ggggw -wgggggggw -wgggggggw -wwwwwwwww`, // inverter 3 2,6 - map` -wwwwwwwww -w$$$$$$$w -w$$$$$$$w -wk$$$$$$w -w$$$$$%$w -w$$$$$$$w -wwwwwwwww`, // inverter 3 2,7 - map` -wwwwwwwww -wggwgwggw -wwgwgwggw -wp*ggwggw -wwgwwwggw -wwggggggw -wwwwwwwww`, // inverted 4 2,8 - map` -wwwwwwwww -w$$w$w$$w -wzww$w$$w -wk$$$w$$: -ww$www$$w -ww%w$$$$w -wwwwwwwww`, //inverted 4 2,9 - map` -wwwwwwwww -wgggggggw -wg*gggggw -wp*gggggw -wg*gggggw -wgggggggw -wwwwwwwww`, // inverted 5 2,10 - map` -wwwwwwwww -w$$$$$$$w -w$$$$$%$w -wk$$$$%$w -w$$$$$%$w -w$$$$$$$w -wwwwwwwww`, // inverted 5 2,11 - map` -wwwwwwwwwww -wwwwggwgggw -wwg*ggwgggw -wpwwggwgggw -wwwwwgwgggw -wwwwggwgggw -wg*gggwgggw -wwwwwwwwwww`, // inverted 6 2,12 - map` -wwwwwwwwwww -wwww%$w$$$w -wzzw$$w$$$w -wkzz$$w$$$w -wzwww$w$$$w -wzww$$w$$$w -w$$$$%w$$$w -wwwwwwwwwww`, // inverted 6 2,13 - map` -wwwwwwwwwww -wggggwggggw -wg*ggggwggw -wwwwwwwwggw -wpggwwwwggw -wgssssssssw -wgssssssssw -wgssssssssw -wwwwwwwwwww`, // inverted 7 2,14 - map` -wwwwwwwwwww -w$$$$z$$$%w -w$$$$$$z$$w -wzzzzzzz$$w -wk$$zzzz$$w -w$$$$$$$$$w -w$$$$$$$$$w -w$$$$$$$$$w -wwwwwwwwwww`, // inverted 7 2,15 - map` -wwwwwwwww -w&&&&&&&w -w&&&&&&&w -+p&&&&&ew -w&&&&&&&w -w&&&&&&&w -wwwwwwwww` // inverter End - ], - [map` -wwwwwwwwww -wgggwggsgw -wgwgwwwggw -wgwwwggggw -wgggggwgp: -wggwwwwgg: -wwgwggwwww -wggwgggggw -wgwwggwggw -wgwgggwggw -wwww""w""w`, // mase - map` -wwwwwwwwww -wggggggggw -wgwwwwwggw -wgwgwggggw -;ggggwwwgw -;ggwgggww: -wwwwggggp: -wggggggwgw -wgwwwwwwgw -wggggggggw -wwww""wwww`, // maze - map` -9/-)'wwww -wl[]gtgmw -wg{}ggtgw -;gffpmgg: -wggggggtw -wmggggglw -wwww"wwww`, - map` -wwwwwwwww -wgggggggw -wggmggggw -;pggbgggw -wmggggggw -wbggggblw -wwwwwwwww` // Butchery - ], - [``, - ``, - map` -wwwwwwwww -wgggggggw -wgggggggw -wgggggggw -wggggggg: -wgggggggw -wgggggggw -wgggpgggw -wwww"wwww`, // warning - map` -wwwwwwwwwww -wgggggggggw -wgggggggggw -wgggggggggw -;pgggggggg: -wgggggggggw -wgggggggggw -wgggggggggw -wwwwwwwwwww`, // tutorial - map` -wwwwwwwwwww -wEGFEGFEGFw -wFPQFEGFEGw -wERSNGNEGFw -wFEGFEGFEGw -wEGFEGFEGFw -wFEGFEGFEGw -wEGFEpFEGFw -wwwwwwwwwww`, // main boss - map` -wwwwwwwww -wpgggXZgw -wgggggggw -wgYgggggw -wggggggZw -wZggMUgXw -wYggVWgYw -wggYXgggw -wwwwwwwww` // end! - ] -]; - -function getMapWidth() { - return levels[levelI][levelJ].trim().split("\n")[0].length; -} - -function getMapHeight() { - return levels[levelI][levelJ].split("\n").length; -} - -setMap(levels[levelI][levelJ]); - -addText("Welcome to", { y: 7, color: color`6` }); -addText("Ghoul Thrasher!", { y: 8, color: color`6` }); -addText("To embark,", { y: 9, color: color`6` }); -addText("Go through the TP", { y: 10, color: color`6` }); - -texts.push(["Welcome to", { y: 7, color: color`6` }]); -texts.push(["Ghoul Thrasher!", { y: 8, color: color`6` }]); -texts.push(["To embark,", { y: 9, color: color`6` }]); -texts.push(["Go through the TP", { y: 10, color: color`6` }]); - -setPushables({ - [player]: [pushable] -}); - -onInput("w", () => { - if (getFirst(player) === undefined) { - playTune(invertedPlayerWalkTune); - getFirst(invertedPlayer).y -= PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } else { - if (levelI === bossRoom[0] && levelJ === bossRoom[1]) { - playTune(playerWalkTileTune); - } else { - if(!gameWon) playTune(playerWalkGrassTune); - } - - getFirst(player).y -= PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } -}); - -onInput("a", () => { - if (getFirst(player) === undefined) { - playTune(invertedPlayerWalkTune); - getFirst(invertedPlayer).x -= PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } else { - if (levelI === bossRoom[0] && levelJ === bossRoom[1]) { - playTune(playerWalkTileTune); - } else { - if(!gameWon) playTune(playerWalkGrassTune); - } - - getFirst(player).x -= PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } -}); - -onInput("s", () => { - if (getFirst(player) === undefined) { - playTune(invertedPlayerWalkTune); - getFirst(invertedPlayer).y += PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } else { - if (levelI === bossRoom[0] && levelJ === bossRoom[1]) { - playTune(playerWalkTileTune); - } else { - if(!gameWon) playTune(playerWalkGrassTune); - } - - getFirst(player).y += PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } -}); - -onInput("d", () => { - if (getFirst(player) === undefined) { - playTune(invertedPlayerWalkTune); - getFirst(invertedPlayer).x += PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } else { - if (levelI === bossRoom[0] && levelJ === bossRoom[1]) { - playTune(playerWalkTileTune); - } else { - if(!gameWon) playTune(playerWalkGrassTune); - } - - getFirst(player).x += PLAYER_WALK_SPEED; // The actual movement is done in afterInput function, since we need to redraw the map - } -}); - -onInput("i", () => { - if (!isInverter()) { - if (canShootBullet) { - if(!gameWon) playTune(bulletShotTune); - addSprite(getFirst(player).x, getFirst(player).y - 1, bulletUp); - canShootBullet = false; - if (inverterGemGotten) { - shootBootlegBullet(0, -1); - } - } - } else { - invert(); - } -}); - -onInput("j", () => { - if (!isInverter()) { - if (canShootBullet) { - if(!gameWon) playTune(bulletShotTune); - addSprite(getFirst(player).x - 1, getFirst(player).y, bulletLeft); - canShootBullet = false; - if (inverterGemGotten) { - shootBootlegBullet(-1, 0); - } - } - } else { - invert(); - } -}); - -onInput("k", () => { - if (!isInverter()) { - if (canShootBullet) { - if(!gameWon) playTune(bulletShotTune); - addSprite(getFirst(player).x, getFirst(player).y + 1, bulletDown); - canShootBullet = false; - if (inverterGemGotten) { - shootBootlegBullet(0, 1); - } - - } - } else { - invert(); - } -}); - -onInput("l", () => { - if (!isInverter()) { - if (canShootBullet) { - if(!gameWon) playTune(bulletShotTune); - addSprite(getFirst(player).x + 1, getFirst(player).y, bulletRight); - canShootBullet = false; - if (inverterGemGotten) { - shootBootlegBullet(1, 0); - } - } - } else { - setMap(levels[levelI][levelJ]); - updateInfoTiles(); - } -}); - -function shootBootlegBullet(dx, dy) { // dx and dy so we can avoid them - changeYorX = getRandomInt(0, 1); - if (changeYorX) { - // Change X - let change = getRandomInt(0, 1); - - if (change === 0) { - if (-1 === dx) { - shootBootlegBullet(dx, dy); - return; - } - addSprite(getFirst(player).x - 1, getFirst(player).y, bootlegBulletLeft); - } else { - if (1 === dx) { - shootBootlegBullet(dx, dy); - return; - } - addSprite(getFirst(player).x + 1, getFirst(player).y, bootlegBulletRight); - } - } else { - // Change Y - let change = getRandomInt(0, 1); - - if (change === 0) { - if (-1 === dy) { - shootBootlegBullet(dx, dy); - return; - } - addSprite(getFirst(player).x, getFirst(player).y - 1, bootlegBulletDown); - } else { - if (1 === dy) { - shootBootlegBullet(dx, dy); - return; - } - addSprite(getFirst(player).x, getFirst(player).y + 1, bootlegBulletUp); - } - } -} - -function updateInfoTiles() { - // Health tile logic - if (!mazeGemGotten) { // 3 health - clearTile(0, 0); - addSprite(0, 0, `${playerHealth+6}`); - } else { // 5 health - clearTile(0, 0); - addSprite(0, 0, `${playerHealth}`); - } - - clearTile(1, 0); - clearTile(2, 0); - clearTile(3, 0); - - // Gem display logic - if (mazeGemGotten) { - addSprite(1, 0, mazeGemFrameGotten); - } else { - addSprite(1, 0, mazeGemFrameEmpty); - } - - if (butcheryGemGotten) { - addSprite(2, 0, butcheryGemFrameGotten); - } else { - addSprite(2, 0, butcheryGemFrameEmpty); - } - - if (inverterGemGotten) { - addSprite(3, 0, inverterGemFrameGotten); - } else { - addSprite(3, 0, inverterGemFrameEmpty); - } -} - -function invert() { - let nowX, nowY; - playTune(inverterTune); - if (inverted) { - nowX = getFirst(invertedPlayer).x; - nowY = getFirst(invertedPlayer).y; - inverted = false; - levelJ--; - setMap(levels[levelI][levelJ]); - updateInfoTiles(); - getFirst(player).remove(); - addSprite(nowX, nowY, player); - - let pushables = getAll(pushable); - for (let i = 0; i < pushables.length; i++) { - pushables[i].remove(); - addSprite(pushableList[i][0], pushableList[i][1], pushable) - } - pushableList = []; - } else { - nowX = getFirst(player).x; - nowY = getFirst(player).y; - inverted = true; - levelJ++; - for (let pushable1 of getAll(pushable)) { - pushableList.push([pushable1.x, pushable1.y]); - } - setMap(levels[levelI][levelJ]); - updateInfoTiles(); - getFirst(invertedPlayer).remove(); - addSprite(nowX, nowY, invertedPlayer); - } -} - -function isInverter() { - for (let level of inverters) { - if (levelI === level[0] && levelJ === level[1]) return true; - } - return false; -} - -function initAll() { - texts = texts.filter(n => n[0] !== `The Butchery, ${butcheryScore}/${butcheryMax}`); // needed for butchery, i bet i could find a better way to do this but whatever - - butcheryScore = 0; - shownText = false; - inverted = false; -} - -function updateProgressFinalBossText() { - texts = texts.filter(n => { - n[0].includes("Progress") - }); - addText(`Progress:${Math.floor(((maxHouseHealth-houseHealth)/maxHouseHealth)*100)}%`, { y: 15, color: color`2` }); - texts.push([`Progress:${Math.floor(((maxHouseHealth-houseHealth)/maxHouseHealth)*100)}%`, { y: 15, color: color`2` }]); -} - -function checkBulletEnemyKillAll(bulletType) { - enemies.forEach(enemy => bulletEnemyKill(bulletType, enemy)); - nuclearExplosionCheck(bulletType); -} - -function checkAllBulletKillAllEnemy() { - for (let bulletType in bulletVels) { - checkBulletEnemyKillAll(bulletType); - } - for (let splashType in nuclearSplashVels) { - nuclearSplashCheck(splashType); - } -} - -function bulletEnemyKill(bulletType, enemyType) { - tilesWith(enemyType, bulletType).forEach(enemyAndBullet => { - playTune(normalBulletHitTune); - enemyAndBullet.forEach((sprite) => { - if (sprite._type === bulletType || sprite._type === enemyType) { - if (levelI === butcheryCoords[0] && levelJ === butcheryCoords[1]) { - butcheryScore += enemyScoreMap[enemyType]; - let options = { y: 15, color: color`3` }; - texts.push([`The Butchery, ${butcheryScore}/${butcheryMax}`, options]); - texts = texts.filter(n => n[0] !== `The Butchery, ${butcheryScore-enemyScoreMap[enemyType]}/${butcheryMax}`); - refreshText(); - - if (butcheryScore === butcheryMax && !butcheryGemGotten) { - gemsCollected++; - addSprite(7, 3, goldenTomb); - ghoulLevels = ghoulLevels.filter(n => n !== butcheryCoords); - babyGhoulLevels = babyGhoulLevels.filter(n => n !== butcheryCoords); - sleepyGhoulLevels = sleepyGhoulLevels.filter(n => n !== butcheryCoords); - babyGhoulLevels = babyGhoulLevels.filter(n => n !== butcheryCoords); - skeletonLevels = skeletonLevels.filter(n => n !== butcheryCoords); - if (!butcheryGemGotten) playTune(gemGotTune); - butcheryGemGotten = true; - if (mazeGemGotten) { - playerHealth = 5; - } else { - playerHealth = 3; - } - updateInfoTiles(); - } - } - sprite.remove(); - } - }); - }); -} - -function nuclearSplashCheck(splashType) { - nuclearHousePartCheck(splashType, houseTopLeft2); - nuclearHousePartCheck(splashType, houseTopRight2); - nuclearHousePartCheck(splashType, houseBottomLeft2); - nuclearHousePartCheck(splashType, houseBottomRight2); -} - -function nuclearHousePartCheck(splashType, houseType) { - tilesWith(splashType, houseType).forEach(pair => { - playTune(nuclearSplashHitTune); - if (pair[0]._type === splashType) { - pair[0].remove(); - } else if (pair[1]._type === splashType) { - pair[1].remove(); - } - houseHealth--; - updateProgressFinalBossText(); - return; - }); -} - -// Function to handle bullet movement -function moveBullets(bulletType) { - getAll(bulletType).forEach((bullet) => { - if (bulletType === nuclearSplashUp || bulletType === nuclearSplashDown || bulletType === nuclearSplashRight || bulletType === nuclearSplashLeft) { - bullet.x += nuclearSplashVels[bulletType][0]; - bullet.y += nuclearSplashVels[bulletType][1]; - - if (bullet.y <= 0) bullet.remove(); - if (bullet.y >= getMapHeight() - 2) bullet.remove(); - if (bullet.x <= 0) bullet.remove(); - if (bullet.x >= getMapWidth() - 1) bullet.remove(); - } else { - bullet.x += bulletVels[bulletType][0]; - bullet.y += bulletVels[bulletType][1]; - - if (bullet.y <= 0) bullet.remove(); - if (bullet.y >= getMapHeight() - 2) bullet.remove(); - if (bullet.x <= 0) bullet.remove(); - if (bullet.x >= getMapWidth() - 1) bullet.remove(); - } - }); - - checkAllBulletKillAllEnemy(); -} - -function nuclearExplosionCheck(bulletType) { - tilesWith(bulletType, nuclearBarrel).forEach(bulletBarrel => { - playTune(nuclearBarrelHitTune); - bulletBarrel.forEach(sprite => { - if (sprite._type === nuclearBarrel) { // only spawn splashes now - addSprite(sprite.x + 1, sprite.y, nuclearSplashRight); - addSprite(sprite.x - 1, sprite.y, nuclearSplashLeft); - addSprite(sprite.x, sprite.y + 1, nuclearSplashDown); - addSprite(sprite.x, sprite.y - 1, nuclearSplashUp); - let x = sprite.x; - let y = sprite.y; - addSprite(x, y, crackedTiles1); - sprite.remove(); - return; - } - sprite.remove(); - }); - }); -} - -// Bullet logic -setInterval(() => { - moveBullets(bulletLeft); - moveBullets(bulletRight); - moveBullets(bulletUp); - moveBullets(bulletDown); - - moveBullets(bootlegBulletLeft); - moveBullets(bootlegBulletRight); - moveBullets(bootlegBulletUp); - moveBullets(bootlegBulletDown); - - moveBullets(nuclearSplashUp); - moveBullets(nuclearSplashDown); - moveBullets(nuclearSplashLeft); - moveBullets(nuclearSplashRight); -}, 100); - -// Nuclear Barrel Spawning Logic -setInterval(() => { - if (levelI === bossRoom[0] && levelJ === bossRoom[1]) { - nuclearBarrelCurrent++; - if (nuclearBarrelCurrent >= nuclearBarrelMax) { - nuclearBarrelCurrent = 0; - coords = getValidRandomCoords(); - addSprite(coords[0], coords[1], nuclearBarrel); - } - } -}, 50); - -let count = 0; -// shoot interval -setInterval(() => { - // Reward for butchery mechanism - if (!butcheryGemGotten) { - if (count == 0) - count++; - else { - count = 0; - canShootBullet = true; - } - } else - canShootBullet = true; -}, 150); - -function getValidRandomCoords() { - let randomX = getRandomInt(1, getMapWidth() - 3); - while (randomX === getFirst(player).x) { - randomX = getRandomInt(1, getMapWidth() - 3); - } - let randomY = getRandomInt(1, getMapHeight() - 3); - while (randomY === getFirst(player).y) { - randomY = getRandomInt(1, getMapHeight() - 3); - } - - // Check to make sure nothing spawns at the houses in the final boss room - if (levelI === bossRoom[0] && levelJ === bossRoom[1] && ((randomX === 2 && randomY === 2) || (randomX === 2 && randomY === 3) || (randomX === 3 && randomY === 2) || (randomX === 3 && randomY === 3))) { - return getValidRandomCoords(); - } - - if (getFirst(player).x - randomX > 0) { - return [randomX, randomY, "right"] - } else { - return [randomX, randomY, "left"] - } - -} - -function manageGhoulSpawns() { - let canSpawn = false; - ghoulLevels.forEach(ij => { - if (levelI === ij[0] && levelJ === ij[1]) { - canSpawn = true; - } - }); - - if (canSpawn) { - ghoulCounter++; - if (ghoulCounter > ghoulCounterMax) { - ghoulCounter = 0; - let randomX = getRandomInt(1, getMapWidth() - 3); - while (randomX === getFirst(player).x) { - randomX = getRandomInt(1, getMapWidth() - 3); - } - let randomY = getRandomInt(1, getMapHeight() - 3); - while (randomY === getFirst(player).y) { - randomY = getRandomInt(1, getMapHeight() - 3); - } - if (getFirst(player).x - randomX > 0) { - addSprite(randomX, randomY, ghoulRight); - } else { - addSprite(randomX, randomY, ghoulLeft); - } - ghoulCounterMax += getRandomInt(-5 - difficultyGhoulSpawn, 15); // add some randomness, give more weight to increase since we dont want the player to die as soon as they spawn - //ghoulCounterMax += 1000; - ghoulDifficultyIncreaser++; - if (ghoulDifficultyIncreaser >= 6) { - ghoulDifficultyIncreaser = 0; - difficultyGhoulSpawn += 3; - } - } - } -} - -function manageBabyGhoulSpawns() { - let canSpawn = false; - babyGhoulLevels.forEach(ij => { - if (levelI === ij[0] && levelJ === ij[1]) { - canSpawn = true; - } - }); - - if (canSpawn) { - babyGhoulCounter++; - if (babyGhoulCounter > babyGhoulCounterMax) { - babyGhoulCounter = 0; - let randomX = getRandomInt(1, getMapWidth() - 3); - while (randomX === getFirst(player).x) { - randomX = getRandomInt(1, getMapWidth() - 3); - } - let randomY = getRandomInt(1, getMapHeight() - 3); - while (randomY === getFirst(player).y) { - randomY = getRandomInt(1, getMapHeight() - 3); - } - if (getFirst(player).x - randomX > 0) { - addSprite(randomX, randomY, babyGhoulRight); - } else { - addSprite(randomX, randomY, babyGhoulLeft); - } - } - } -} - -function manageSleepyGhoulSpawns() { - let canSpawn = false; - sleepyGhoulLevels.forEach(ij => { - if (levelI === ij[0] && levelJ === ij[1]) { - canSpawn = true; - } - }); - if (canSpawn) { - sleepyGhoulCounter++; - if (sleepyGhoulCounter > sleepyGhoulCounterMax) { - sleepyGhoulCounter = 0; - let randomX = getRandomInt(1, getMapWidth() - 3); - while (randomX === getFirst(player).x) { - randomX = getRandomInt(1, getMapWidth() - 3); - } - let randomY = getRandomInt(1, getMapHeight() - 3); - while (randomY === getFirst(player).y) { - randomY = getRandomInt(1, getMapHeight() - 3); - } - addSprite(randomX, randomY, sleepyGhoul); - } - } -} - -function manageSkeletonSpawns() { - let canSpawn = false; - skeletonLevels.forEach(ij => { - if (levelI === ij[0] && levelJ === ij[1]) { - canSpawn = true; - } - }); - if (canSpawn) { - skeletonCounter++; - if (skeletonCounterMax === skeletonCounter) { - skeletonCounter = 0; - let randoms = getValidRandomCoords(); - if (randoms[2] === "left") { - addSprite(randoms[0], randoms[1], skeletonLeft); - } else { - addSprite(randoms[0], randoms[1], skeletonRight); - } - } - } -} - -function refreshText() { - clearText(); - texts.forEach(text => { - addText(text[0], text[1]); - }); -} - -// Interval for misc things -setInterval(() => { - if (!canShootBullet) { - addText("reloading"); - texts.push(["reloading", {}]); - } else { - texts = texts.filter(n => n[0] !== "reloading"); - refreshText(); - } - - // Monster spawner timer, I decided to stop creating random new timers now - manageGhoulSpawns(); - manageSleepyGhoulSpawns(); - manageSkeletonSpawns(); - manageBabyGhoulSpawns(); -}, 100); - -function xAndYCoordMotionEnemy(enemyType) { - getAll(enemyType).forEach(enemy => { - let playerX = getFirst(player).x; - let playerY = getFirst(player).y; - if (playerX === enemy.x) { - if (playerY > enemy.y) enemy.y++; - else if (playerY < enemy.y) enemy.y--; - else if (playerY === enemy.y) { - if (playerHealth > 0) { - playTune(hurtTune); - playerHealth--; - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - } else if (playerY === enemy.y) { - if (playerX > enemy.x) enemy.x++; - else if (playerX < enemy.x) enemy.x--; - else if (playerY === enemy.y) { - if (playerHealth > 0) { - playerHealth--; - playTune(hurtTune); - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - } else { - let xOrY = getRandomInt(0, 1); - if (xOrY === 0) { - if (playerX > enemy.x) enemy.x++; - else if (playerX < enemy.x) enemy.x--; - else if (playerY === enemy.y) { - if (playerHealth > 0) { - playerHealth--; - playTune(hurtTune); - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - } else { - if (playerY > enemy.y) enemy.y++; - else if (playerY < enemy.y) enemy.y--; - else if (playerY === enemy.y) { - if (playerHealth > 0) { - playerHealth--; - playTune(hurtTune); - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - } - } - bulletEnemyKill(bulletLeft, enemyType); - bulletEnemyKill(bulletRight, enemyType); - }) -} - -function allBulletKill(enemyType) { - bulletEnemyKill(bulletLeft, enemyType); - bulletEnemyKill(bulletRight, enemyType); -} - -// Ghoul interval -setInterval(() => { - xAndYCoordMotionEnemy(ghoulLeft); - xAndYCoordMotionEnemy(ghoulRight); -}, 400); - -// Baby Ghoul Interval -setInterval(() => { - xAndYCoordMotionEnemy(babyGhoulLeft); - xAndYCoordMotionEnemy(babyGhoulRight); -}, 200); - -// Sleepy ghoul interval -setInterval(() => { - getAll(sleepyGhoul).forEach((currentGhoul) => { - let playerX = getFirst(player).x; - let playerY = getFirst(player).y; - if (playerX === currentGhoul.x) { - if (playerY > currentGhoul.y) { - currentGhoul.y++; - bulletEnemyKill(bulletUp, sleepyGhoul); - } else if (playerY < currentGhoul.y) { - bulletEnemyKill(bulletDown, sleepyGhoul); - currentGhoul.y--; - } else { - if (playerHealth > 0) { - playerHealth--; - playTune(hurtTune); - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - } else if (playerY === currentGhoul.y) { - if (playerX > currentGhoul.x) { - bulletEnemyKill(bulletLeft, sleepyGhoul); - currentGhoul.x++; - } else if (playerX < currentGhoul.x) { - bulletEnemyKill(bulletRight, sleepyGhoul); - currentGhoul.x--; - } else { - if (playerHealth > 0) { - playerHealth--; - playTune(hurtTune); - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - } - }); -}, 100); - -function spawnskeletonArrow(skeleton) { - addSprite(skeleton.x + 1, skeleton.y, skeletonArrow); -} - -// Skeleton interval -setInterval(() => { - getAll(skeletonLeft).forEach(skeleton => { - spawnskeletonArrow(skeleton); - if (getFirst(player).x === skeleton.x && getFirst(player).y === skeleton.Y) { - if (playerHealth > 0) { - playerHealth--; - playTune(hurtTune); - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - }); - getAll(skeletonRight).forEach(skeleton => { - spawnskeletonArrow(skeleton); - - if (getFirst(player).x === skeleton.x && getFirst(player).y === skeleton.Y) { - if (playerHealth > 0) { - playerHealth--; - playTune(hurtTune); - } - updateInfoTiles(); - if (playerHealth < 1) { - playTune(deadTune); - levelI = deathEnd[0]; - levelJ = deathEnd[1]; - setMap(levels[levelI][levelJ]); - // dont do anything now for debugging - } - } - }); -}, 1500); - -// Skeleton Bullet interval -setInterval(() => { - xAndYCoordMotionEnemy(skeletonArrow); -}, 300); - -let attackCounter = 0; -let attackCounterMax = 12; -let bossPhase = 1; -// Final boss attack mechanism -setInterval(() => { - if (levelI === bossRoom[0] && levelJ === bossRoom[1] && houseHealth > 0) { - attackCounter++; - if (houseHealth === phaseTwoChange) { - bossPhase = 2; - nuclearBarrelMax = 35 - } - if (houseHealth === phaseThreeChange) { - bossPhase = 3; - nuclearBarrelMax = 45 - } - if (houseHealth === phaseFourChange) { - nuclearBarrelMax = 55 - } - if (attackCounter >= attackCounterMax / bossPhase) { - attackCounter = 0; - let attack = getRandomInt(0, 1); - if (attack === 0) { - spawnLaser(); - } else if (attack === 1) { - spawnRandomEnemies(); - } - } - xAndYCoordMotionEnemy(houseLaser); - } -}, 400); - -// boss phase 3+ doesnt affect this -function spawnLaser() { - addSprite(getFirst(houseTopLeft2).x - 1, getFirst(houseTopLeft2).y, houseLaser); - - if (bossPhase === 2) { - addSprite(getFirst(houseTopRight2).x + 1, getFirst(houseTopRight2).y, houseLaser); - } - - if (bossPhase === 3) { - addSprite(getFirst(houseBottomLeft2).x + 1, getFirst(houseBottomLeft2).y, houseLaser); - } -} - -// boss phase 2+ doesnt affect this -function spawnRandomEnemies() { - let possibleEnemies = [ghoulLeft, ghoulRight, babyGhoulLeft, babyGhoulRight, skeletonLeft, skeletonRight]; // No sleeping ghosts because those things are harder than the actual boss - for (let i = 0; i < Math.min(bossPhase, 2); i++) { - let randCoords = getValidRandomCoords(); - let randEnemy = possibleEnemies[getRandomInt(0, possibleEnemies.length - 1)]; - addSprite(randCoords[0], randCoords[1], randEnemy); - } -} - -let di = 0; -let dj = 0; -let shownText = false; -afterInput(() => { - // pushable button connection - if (buttonCoords[`${levelI},${levelJ}`] !== undefined) { - let buttonFlagWhole = true; - let pushables = getAll(pushable); - for (let i = 0; i < pushables.length; i++) { - let targetButtonCoord = buttonCoords[`${levelI},${levelJ}`]; - let buttonFlag = false; - for (let coord of targetButtonCoord) { - if (pushables[i].x === coord[0] && pushables[i].y === coord[1] && pushables[i] !== undefined) { - buttonFlag = true; - } - } - if (!buttonFlag) { - buttonFlagWhole = false; - } - } - if (buttonFlagWhole) { - dj += 2; - } - } - - // Player collisions - if (tilesWith(player, doorLeft).length !== 0 || tilesWith(invertedPlayer, doorLeft).length !== 0) { - dj--; - } else if (tilesWith(player, doorRight).length !== 0 || tilesWith(invertedPlayer, doorRight).length !== 0) { - dj++; - } else if (tilesWith(player, doorUp).length !== 0 || tilesWith(invertedPlayer, doorUp).length !== 0) { - di++; - } else if (tilesWith(player, doorDown).length !== 0 || tilesWith(invertedPlayer, doorDown).length !== 0) { - di--; - } - levelI += di; - levelJ += dj; - - if (levelI === inverterEnd[0] && levelJ === inverterEnd[1]) { - if (!inverterGemGotten) playTune(gemGotTune); - inverterGemGotten = true; - if (mazeGemGotten) playerHealth = 5; - else playerHealth = 3; - updateInfoTiles(); - } - - if (tilesWith(player, backToStartTper).length !== 0) { - levelI = gameStart[0]; - levelJ = gameStart[1]; - setMap(levels[levelI][levelJ]) - texts = []; - if (mazeGemGotten) playerHealth = 5; // used in death tp - else playerHealth = 3; // used in death tp - updateInfoTiles(); - } - - if (di !== 0 || dj !== 0) { - // ALl the inits as well - initAll(); - if (levelI === mazeEndCoords[0] && levelJ === mazeEndCoords[1] && !mazeGemGotten) { - gemsCollected++; - mazeGemGotten = true; - playTune(gemGotTune); - playerHealth = 5; - updateInfoTiles(); - } - - setMap(levels[levelI][levelJ]); - updateInfoTiles(); - if (levelI === initI && levelJ === initJ) { // player just entered the starting room again - if (di === -1) { // went down, so spawn on up - getFirst(player).x = 4; - getFirst(player).y = 1; - } else if (di === 1) { - getFirst(player).x = 4; - getFirst(player).y = 5; - } else if (dj === 1) { - getFirst(player).x = 1; - getFirst(player).y = 3; - } else if (dj === -1) { - getFirst(player).x = 7; - getFirst(player).y = 3 - } - } - } - - if (levelI === butcheryCoords[0] && levelJ === butcheryCoords[1]) { - if (!shownText) { - let options = { y: 15, color: color`3` }; - addText(`The Butchery, 0/${butcheryMax}`, options); - texts.push([`The Butchery, 0/${butcheryMax}`, options]); - shownText = true; - } - } else { - //clearText(); - texts = texts.filter(n => n[0] !== `The Butchery, ${butcheryScore}/${butcheryMax}`); - refreshText(); - } - - di = 0; - dj = 0; - - - let shownWarningText = false; - if (levelI === warningRoom[0] && levelJ === warningRoom[1]) { - if (!shownWarningText) { - let options1 = { y: 3, color: color`3` }; - let options2 = { y: 4, color: color`3` }; - let options3 = { y: 5, color: color`3` }; - let options4 = { y: 6, color: color`3` }; - addText("WARNING!", options1); - addText("DEATH LIES AHEAD", options2); - addText("ENTER AT", options3); - addText("YOUR OWN RISK", options4); - texts.push(["WARNING!", options1]); - texts.push(["DEATH LIES AHEAD", options2]); - texts.push(["ENTER AT", options3]); - texts.push(["YOUR OWN RISK", options4]); - shownWarningText = true; - } - } else { - //clearText(); - texts = texts.filter(n => n[0] !== "WARNING!"); - texts = texts.filter(n => n[0] !== "DEATH LIES AHEAD"); - texts = texts.filter(n => n[0] !== "ENTER AT"); - texts = texts.filter(n => n[0] !== "YOUR OWN RISK"); - refreshText(); - } - - let shownTutText = false; - if (levelI === tutorialFinalBossRoom[0] && levelJ === tutorialFinalBossRoom[1]) { - if (!shownTutText) { - let options1 = { y: 3, color: color`3` }; - let options2 = { y: 4, color: color`3` }; - let options3 = { y: 5, color: color`3` }; - let options4 = { y: 6, color: color`3` }; - addText("HE IS TOO MIGHTY", options1); - addText("FOR YOUR BULLETS", options2); - addText("TURN BACK", options3); - addText("LAST CHANCE", options4); - texts.push(["HE IS TOO MIGHTY", options1]); - texts.push(["FOR YOUR BULLETS", options2]); - texts.push(["TURN BACK", options3]); - texts.push(["LAST CHANCE", options4]); - shownTutText = true; - } - } else { - texts = texts.filter(n => n[0] !== "HE IS TOO MIGHTY"); - texts = texts.filter(n => n[0] !== "FOR YOUR BULLETS"); - texts = texts.filter(n => n[0] !== "TURN BACK"); - texts = texts.filter(n => n[0] !== "LAST CHANCE"); - refreshText(); - } - if (levelI === bossRoom[0] && levelJ === bossRoom[1]) { - updateProgressFinalBossText(); - } - if (houseHealth <= 0 && gameWon === false) { // only possible in the boss room so no other checks - clearTile(10, 4); - addSprite(10, 4, doorRight); - if (mazeGemGotten) playerHealth = 5; - else playerHealth = 3; - updateInfoTiles(); - playTune(winGameTune); - gameWon = true; - } - - if(levelI === bossRoom[0] && levelJ === bossRoom[1]) { // literally the only point of this is to play tune - if(!enteredFinalRoomForTheFirstTime) { - playTune(enteredFinalRoomForTheFirstTimeTune); - enteredFinalRoomForTheFirstTime = true - } - } - - if (levelI === bossRoom[0] && levelJ === bossRoom[1] + 1) { - texts = texts.filter(n => { - n[0].includes("Progress") - }); - addText("... and thus", { y: 5, color: color`6` }); - texts.push(["... and thus", { y: 5, color: color`6` }]); - - addText("peace is restored", { y: 6, color: color`6` }); - texts.push(["peace is restored", { y: 6, color: color`6` }]); - - addText("all thanks to...", { y: 7, color: color`6` }); - texts.push(["all thanks to...", { y: 7, color: color`6` }]); - - addText("one brave banana.", { y: 8, color: color`6` }); - texts.push(["one brave banana.", { y: 8, color: color`6` }]); - - playTune(winGameBGTune, Infinity); - } - - if (levelI === deathEnd[0] && levelJ === deathEnd[1]) { - butcheryGemGotten = false; - inverterGemGotten = false; - mazeGemGotten = false; - enteredFinalRoomForTheFirstTime = false; - texts = []; - refreshText(); - } -}); \ No newline at end of file diff --git a/games/Goblin_Gobbler.js b/games/Goblin_Gobbler.js index ddb911e046..3491d17ac9 100644 --- a/games/Goblin_Gobbler.js +++ b/games/Goblin_Gobbler.js @@ -1,10 +1,10 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started @title: Goblin_Gobbler @author: Tyler P Evans -@tags: ['advanced'] +@tags: [] @addedOn: 2024-03-11 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started // instructions; wasd to move, player can push boxes and boxes can push goblins. // your goal is to move the goblins into the holes. // j to rest level, i to skip level, k to go back a level, l displays move counts per level diff --git a/games/Golem-Rush.js b/games/Golem-Rush.js index 7db355c7aa..b0628cf882 100644 --- a/games/Golem-Rush.js +++ b/games/Golem-Rush.js @@ -2,7 +2,7 @@ /* @title: Golem-Rush @author: Spllit1 -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-05-22 */ diff --git a/games/Guardian.js b/games/Guardian.js index d11ae4c9e3..b5277d9c72 100644 --- a/games/Guardian.js +++ b/games/Guardian.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Guardian @author: srijan-raghavula @tags: [] @addedOn: 2024-08-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/HELP ME I CANT CODE.js b/games/HELP ME I CANT CODE.js index 67f4625621..c0a4878827 100644 --- a/games/HELP ME I CANT CODE.js +++ b/games/HELP ME I CANT CODE.js @@ -1,7 +1,7 @@ /* @title: HELP ME I CANT CODE @author: PotatoMoth -@tags: ["maze", "adventure"] +@tags: ['puzzle','adventure'] @addedOn: 2024-08-15 */ diff --git a/games/Hard-Hat_Helper.js b/games/Hard-Hat_Helper.js index 43012cd026..5fef86886a 100644 --- a/games/Hard-Hat_Helper.js +++ b/games/Hard-Hat_Helper.js @@ -2,7 +2,7 @@ /* @title: Hard-Hat_Helper @author: Nathan Jereb -@tags: [''] +@tags: [] @addedOn: 2023-12-21 */ diff --git a/games/Harder Block Push.js b/games/Harder Block Push.js new file mode 100644 index 0000000000..a9b9273d6b --- /dev/null +++ b/games/Harder Block Push.js @@ -0,0 +1,200 @@ +/* +@title: Harder Block Push +@author: Game +@tags: ['puzzle'] +@addedOn: 2024-09-14 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const blocks = "b" +const goal = "g" +const wall = "w" +const goalsfx = tune` +121.95121951219512: G4-121.95121951219512 + B5~121.95121951219512, +121.95121951219512: E5-121.95121951219512 + G5^121.95121951219512 + B5~121.95121951219512, +121.95121951219512: F5-121.95121951219512 + G5^121.95121951219512 + B5~121.95121951219512, +121.95121951219512: E5-121.95121951219512 + G5^121.95121951219512 + B5~121.95121951219512, +121.95121951219512: B5~121.95121951219512, +121.95121951219512: G5-121.95121951219512 + B5~121.95121951219512, +3170.7317073170734` + +setLegend( + [player, bitmap` +..00000..00000.. +..00000..00000.. +....0......0.... +....00000000.... +.....000000..... +00...020020...00 +00...020020...00 +0000000000000000 +00...000000...00 +00...022220...00 +.....000000..... +....00000000.... +....0......0.... +....0......0.... +..00000..00000.. +..00000..00000..`], + [blocks, bitmap` +................ +...3333333333... +..333333333333.. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +..333333333333.. +...3333333333... +................`], + [goal, bitmap` +................ +...4444444444... +..444444444444.. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +..444444444444.. +...4444444444... +................`], + [wall, bitmap` +................ +...0000000000... +..000000000000.. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +..000000000000.. +...0000000000... +................`] +) + +setSolids([blocks, player, wall]) + +let level = 0 +const levels = [ + map` +........w.. +..b...wbw.. +.bbb...b... +..b........ +.....b...b. +.b...pw.b.w +....bww.b.. +......w.gb. +.bw....bw.. +..b...b.... +...........`, + map` +....w.....p +.b.b.b.b.b. +w.........w +.b.b...b.b. +...w.b.w... +.b..bgb..b. +w..w.b.w..w +.b.b...b.b. +........... +.b.b.b.b.b. +..w...w...w`, + map` +.....w..... +....bbb.... +.....b..... +.....g..... +....wbw.... +.bwbbpbbwb. +....wbw.... +...b.b.b... +..b..w..b.. +.b...b...b. +...........`, +] + +const levelsgoalposx = [ + 8, + 5, + 5 +]; + +const levelsgoalposy = [ + 7, + 5, + 3 +]; + + +setMap(levels[level]) + +setPushables({ + [player]: [blocks] +}) + +onInput("w", () => { + getFirst(player).y -= 1 +}) + +onInput("a", () => { + getFirst(player).x -= 1 +}) + +onInput("s", () => { + getFirst(player).y += 1 +}) + +onInput("d", () => { + getFirst(player).x += 1 +}) + +onInput("j", () => { + const currentLevel = levels[level]; + if (currentLevel !== undefined) { + clearText(""); + setMap(currentLevel); + } +}); + +afterInput(() => { + console.log(tilesWith(blocks, goal)) + console.log(getTile(levelsgoalposx[level], levelsgoalposy[level])) + if (tilesWith(goal, blocks).length >= 1) { + clearTile(levelsgoalposx[level], levelsgoalposy[level]) + addSprite(levelsgoalposx[level], levelsgoalposy[level], goal) + playTune(goalsfx) + } + if (getAll(blocks).length <= 0) { + level = level + 1; + + const currentLevel = levels[level]; + + if (currentLevel !== undefined) { + setMap(currentLevel); + } else { + addText("You somehow win!", { y: 4, color: color`7` }); + } + } +}) + diff --git a/games/Hectic_Hockey.js b/games/Hectic_Hockey.js index b1c5f645e9..9c24f2e20b 100644 --- a/games/Hectic_Hockey.js +++ b/games/Hectic_Hockey.js @@ -1,8 +1,8 @@ /* @title: Hectic Hockey -@tags: ['dodge'] -@addedOn: 2022-10-12 @author: Colton +@tags: ['action'] +@addedOn: 2022-10-12 Instructions: WASD to control your player diff --git a/games/Hey_Hay_Cow.js b/games/Hey_Hay_Cow.js index 2610034fc3..7823c9dc30 100644 --- a/games/Hey_Hay_Cow.js +++ b/games/Hey_Hay_Cow.js @@ -1,8 +1,8 @@ /* @title: Hey Hay Cow @author: Valeria DA -@addedOn: 2024-06-27 @tags: [] +@addedOn: 2024-06-27 */ // Create a tune: diff --git a/games/Hole_In_the_Wall.js b/games/Hole_In_the_Wall.js index 1382a8188f..d798ef0ec9 100644 --- a/games/Hole_In_the_Wall.js +++ b/games/Hole_In_the_Wall.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Hole In the Wall -@author: Abel0000 +@author: Abel0000 @tags: [] @addedOn: 2024-08-23 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + Instructions: Right handed movement diff --git a/games/Hope.js b/games/Hope.js new file mode 100644 index 0000000000..12bc42663e --- /dev/null +++ b/games/Hope.js @@ -0,0 +1,1891 @@ +/* +@title: Hope +@author: Tyler P Evans +@tags: ['adventure'] +@addedOn: 2024-09-15 + + +almost all life died when the tmepature shot skyward. +some survived, some where left somewhere in between. +you survived. +living of the ruins in your semi truck you drive through the abandoned world hoping to live +one more day. + +in the top right you will find your remaining gas and your current items + +j while on driving screen to enter an encounter. +w and s to navigate through up to three diffrent options while in an encounter. +d to select an option in an encounter + +the encounter will continue automaticaly if there are no options. +if you attempt to start an encounter with no gas the game ends. + +I sadly coundl't get this game as far as I wanted to get it due to having bsa events +all weekend every weekend, i had ten more encounters planned that I didn't have enough time for. +*/ + +const Truck = "T" +const Road1 = "r" +const Road2 = "R" +const land1 = "l" +const land2 = "L" +const grey = "g" +const Mouse = "M" +const gasCounter = "G" +const itemCounter = "I" +const rope = "p" +const aidKit = "a" +const bat = "b" +const thermometer = "c" +const bucket = "B" +const zero = "-" +const one = "!" +const two = "@" +const three = "#" +const four = "$" +const five = "%" +const six = "^" +const seven = "&" +const eight = "*" +const nine = "(" +const ten = ")" + + +setLegend( + [Truck, bitmap` +......2222...... +......2772...... +.....277752..... +.....777555..... +......1LL1...... +.....111111..... +.....11L1L1..... +.....11L1L1..... +.....11L1L1..... +.....11L1L1..... +.....1111L1..... +.....111LL1..... +.....111LL1..... +.....111LL1..... +.....11LLL1..... +.....111111.....`], + [gasCounter, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +...00.......00.. +..0.....00.0.... +..0.00.0.0.000.. +..0..0.0.0....0. +...00...0.0.00.. +.11111111111111. +................ +................`], + [itemCounter, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +.0..0........... +.0.000.00....... +.0..0.0..0...... +.0..0.000..0.0.. +.0..0.0...0.0.0. +1111111001111111 +................ +................`], + [rope, bitmap` +................ +....LLLLLL...... +..LLLLLLLLLL.... +..LL111111LL.... +.LL11LLLL11LL... +.L11L1111L1LL... +.L11L1LL1L1LL... +.L11L1LL1L1LL... +.L11L1111L1LL... +.L111LLLL11LL... +.L1L111111LL.... +.L1LLLLLLLLL.... +.L1.LLLLLL...... +.L1............. +.L1............. +................`], + [aidKit, bitmap` +................ +................ +....LLLLLLLL.... +....L......L.... +..LLLLLLLLLLLL.. +..LLLLL11LLLLL.. +..LLLLL11LLLLL.. +..LLL111111LLL.. +..LLL111111LLL.. +..LLLLL11LLLLL.. +..LLLLL11LLLLL.. +..LLLLLLLLLLLL.. +................ +................ +................ +................`], + [bat, bitmap` +................ +.............LL. +............L1L. +...........L1LL. +..........L1L1L. +.........L1L1L.. +........L1L1L... +.......L1L1L.... +......L1L1L..... +......1L1L...... +.....1L1L....... +....1LL......... +...L1L.......... +................ +................ +................`], + [thermometer, bitmap` +......LL........ +.....L11L....... +.....LL1L....... +.....L11L....... +.....LL1L....... +.....L11L....... +.....LL1L....... +.....L11L....... +.....LL1L....... +.....L11L....... +.....LL1LL...... +....LL111LL..... +....L11111L..... +....L11111L..... +....LL111LL..... +.....LLLLL......`], + [bucket, bitmap` +................ +......LLLL...... +.....L....L..... +....LLLLLLLL.... +...LLLL11LLLL... +...LL111111LL... +...LLL1111LLL... +...L11LLLL11L... +...LL1111111L... +....LL11111L.... +....LL11111L.... +....LL11111L.... +....LLLL111L.... +....LLLLL11L.... +.....LLLLLL..... +................`], + [Road1, bitmap` +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01`], + [Road2, bitmap` +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01 +10LLLLL6LLLLLL01 +10LLLLLLLLLLLL01 +10LLLLL6LLLLLL01`], + [Mouse, bitmap` +................ +................ +................ +................ +................ +11111111111.72.. +1111111111117722 +1L1111LLLLLL7772 +1LLLL111111L5772 +1LLLLLLLLL115522 +11111111111.52.. +................ +................ +................ +................ +................`], + [zero, bitmap` +................ +......000....... +.....0..00...... +.....0..00...... +.....0.0.0...... +.....0.0.0...... +.....00..0...... +.....00..0...... +......000....... +................ +................ +................ +................ +................ +................ +................`], + [one, bitmap` +................ +........0....... +.......00....... +......0.0....... +........0....... +........0....... +........0....... +.......000...... +................ +................ +................ +................ +................ +................ +................ +................`], + [two, bitmap` +................ +.......00....... +......0..0...... +..........0..... +.........0...... +........0....... +.......0........ +......00000..... +................ +................ +................ +................ +................ +................ +................ +................`], + [three, bitmap` +................ +......00........ +........0....... +........0....... +......00........ +........0....... +........0....... +......00........ +................ +................ +................ +................ +................ +................ +................ +................`], + [four, bitmap` +................ +................ +................ +................ +................ +.....0...0...... +.....0...0...... +.....0...0...... +.....00000...... +.........0...... +.........0...... +.........0...... +................ +................ +................ +................`], + [five, bitmap` +................ +.....00000...... +.....0.......... +.....0.......... +......0......... +.......00....... +.........0...... +.........0...... +.....0...0...... +......000....... +................ +................ +................ +................ +................ +................`], + [six, bitmap` +................ +......000....... +.....0...0...... +.....0.......... +.....0000....... +.....0...0...... +.....0...0...... +......000....... +................ +................ +................ +................ +................ +................ +................ +................`], + [seven, bitmap` +................ +.....000000..... +..........0..... +.........0...... +.........0...... +........0....... +........0....... +.......0........ +.......0........ +................ +................ +................ +................ +................ +................ +................`], + [eight, bitmap` +................ +......000....... +.....0...0...... +.....0...0...... +.....0...0...... +......000....... +.....0...0...... +.....0...0...... +.....0...0...... +......000....... +................ +................ +................ +................ +................ +................`], + [nine, bitmap` +................ +......000....... +.....0...0...... +.....0...0...... +.....0...0...... +......0000...... +.........0...... +.........0...... +.........0...... +.........0...... +................ +................ +................ +................ +................ +................`], + [ten, bitmap` +................ +....0...000..... +....0..0...0.... +....0..0...0.... +....0..0...0.... +....0..0...0.... +....0..0...0.... +....0..0...0.... +....0..0...0.... +....0..0...0.... +....0...000..... +................ +.........L..L.L. +...L.L..L.L..L.. +..L.L.L..LL.L.L. +................`], + [land1, bitmap` +FFFFF9FFFFF6FF96 +FFFFF6F9FFFFFF6F +FFF9FFF6FFFF9FFF +FF96FFFFFFFF6FFF +FF6FFFFF9FFFFFFF +FFFFFFFF6FF9FFFF +F9FFFFFFFF96FFFF +F6FFFF9FFF6FFFFF +FFF9FF6FFFFFFFF9 +FF96FFFFFF9FFFF6 +FF6F9FFFFF6FFFFF +FFFF6FF9FFFFF9FF +FFFFFFF6FFFF96FF +FFFF9FFFFFFF6FFF +FFF96FFFFF9FFFFF +FFF6FFFFFF69FFF9`], + [land2, bitmap` +FFF6FFFFFF69FFF9 +FFFFF9FFFFF6FF96 +FFFFF6F9FFFFFF6F +FFF9FFF6FFFF9FFF +FF96FFFFFFFF6FFF +FF6FFFFF9FFFFFFF +FFFFFFFF6FF9FFFF +F9FFFFFFFF96FFFF +F6FFFF9FFF6FFFFF +FFF9FF6FFFFFFFF9 +FF96FFFFFF96FFF6 +FF6F9FFFFF6FFFFF +FFFF6FF9FFFFF9FF +FFFFFFF6FFFF96FF +FFFF9FFFFFFF6FFF +FFF96FFFFF9FFFFF`], + [grey, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], +) +setSolids([]) + +let level = 0 +const levels = [ + map` +llllRllll +llllrllll +llllRllll +llllrllll +llllRllll +llllrllll +llllRllll`, + map` +LLLLrLLLL +LLLLRLLLL +LLLLrLLLL +LLLLRLLLL +LLLLrLLLL +LLLLRLLLL +LLLLrLLLL`, + map` +ggggggggggggg +ggggggggggggg +ggggggggggggg +ggggggggggggg +ggggggggggggg +ggggggggggggg +ggggggggggggg +ggggggggggggg +ggggggggggggg`, +] + +let gas = 4 + +const num = [ + zero, + one, + two, + three, + four, + five, + six, + seven, + eight, + nine, + ten, +] + +let story = 0 +const stories = [ + + "you come acros", + "an adandoned", + "building,", + "it has a loft", + "and you", + "can see a can", + "of gas at the top.", + "use a rope?", + "throw a rock?", + "you used a rope", + "and got the gas down", + "got the gas down", + "didn't get the gas", + + "you drive through a", + "ghost town there is", + "a well with a", + "baseball bat at the", + "the bottom. you", + "found a jerry can", + "by the well.", + "get bat with rope?", + "Got the bat + gas", + "Left, but got gas", + + "You pull up to a", + "makeshift clay hut", + "inside you find", + "rough hewn stone", + "furniture. on a", + "desk is a note.", + "It's getting late", + "if you stay out-", + "too late it'll get", + "dangerous.", + "read the note?", + "leave?", + "dear, whoever finds", + "my hut, I have left", + "this place in", + "search of a better", + "life. i built this", + "place with my own", + "two hands, but I", + "have set out to", + "find the answers", + "to our current", + "situation. I hope", + "we meet someday.", + "-Rowan", + "As you leave the", + "hut you see the", + "sun has fallen.", + "as you reach your", + "truck you see a", + "man in your way,", + "this man appears", + "deathly and has", + "had his skin burnt", + "off", + "as you pass by him", + "the man lunges at", + "you, he knocks you", + "down and bites", + "into your throat", + "you swing your", + "bat into the man's", + "chest and knock", + "him over, clearing", + "your way to the", + "truck.", + + "your truck comes", + "to a thin canyon,", + "there is nothing", + "for miles. your", + "gas is running", + "low.", + + "you find a hole", + "carved into the", + "side of a canyon", + "wall. inside is", + "some more stone", + "furniture there", + "is a a cooking", + "area with a gas", + "container next", + "to it. outside", + "the cave are", + "footprints", + "leading downroad.", + + "you come to a", + "rangers tower.", + "at the top is a", + "crate with a", + "thermometer", + "which reads 198F,", + "a first aid kit,", + "and a full jerry", + "can.", + "which do you take", + "thermometer?", + "first aid kit?", + "gas?", + + "you get to where", + "the footprints", + "end. you find a", + "charred corpse", + "clutching a well", + "used notebook,", + "the notebook", + "reads:", + "I Rowan have", + "set out to find", + "solace, safety,", + "and information", + "about this heat.", + "next page.", + "nothing yet. I", + "only have hope.", + "next page.", + "losing hope", + "next page.", + "must find hope", + "next page.", + "there is no hope", + "the next 32 pages", + "are filled with:", + "''no hope''", + "over and over", + +] + +setMap(levels[level]) + +let itemCount = 0 +let itemNum = 1 +let hasRope = 1 +let hasAidKit = 0 +let hasBat = 0 +let hasThermometer = 0 +let hasBucket = 0 +let printedRope = 0 +let printedAidKit = 0 +let printedBat = 0 +let printedThermometer = 0 +let printedBucket = 0 + +let bookCounter = 0 + +let mousePos = 1 + +function gameOver() { + var timer = setInterval(() => { + clearInterval(timer) + clearText() + level = 2 + setMap(levels[level]) + addText("Game Over", { + x: 6, + y: 7, + color: color`3` + }); + }, 5000) +} + +function itemRecalculate() { + printedRope = 0 + printedAidKit = 0 + printedBat = 0 + printedThermometer = 0 + printedBucket = 0 + itemCount = 0 + +} + +function sleep() { + var sleep = setInterval(() => { + + clearInterval(sleep) + clearText() + level = 0 + roadUI() + + }, 10000) +} + +function roadUI() { + clearTile(0, 3) + clearTile(0, 4) + clearTile(0, 2) + clearTile(4, 4) + clearTile(8, 1) + clearTile(8, 0) + clearTile(7, 1) + clearTile(7, 2) + clearTile(7, 3) + clearTile(7, 4) + clearTile(7, 5) + clearTile(7, 0) + setMap(levels[level]) + addSprite(4, 4, Truck) + addSprite(8, 0, gasCounter) + addSprite(8, 1, num[gas]) + addSprite(7, 0, itemCounter) + if (itemNum > 0) { + itemRecalculate() + + if (hasRope > 0 && printedRope == 0) { + printedRope = 1 + itemCount + itemCount = itemCount + 1 + } + + + if (hasAidKit > 0 && printedAidKit == 0) { + printedAidKit = 1 + itemCount + itemCount = itemCount + 1 + } + + + if (hasBat > 0 && printedBat == 0) { + printedBat = 1 + itemCount + itemCount = itemCount + 1 + } + + + if (hasThermometer > 0 && printedThermometer == 0) { + printedThermometer = 1 + itemCount + itemCount = itemCount + 1 + } + + + if (hasBucket > 0 && printedBucket == 0) { + printedBucket = 1 + itemCount + itemCount = itemCount + 1 + } + + if (printedRope > 0) { + addSprite(7, printedRope, rope) + } + + if (printedAidKit > 0) { + addSprite(7, printedAidKit, aidKit) + } + + if (printedBat > 0) { + addSprite(7, printedBat, bat) + } + + if (printedThermometer > 0) { + addSprite(7, printedThermometer, thermometer) + } + + if (printedBucket > 0) { + addSprite(7, printedBucket, bucket) + } + } +} + +function buildingUI() { + clearTile(0, 3) + clearTile(0, 4) + clearTile(0, 2) + clearTile(8, 1) + clearTile(8, 0) + clearTile(7, 1) + clearTile(7, 2) + clearTile(7, 3) + clearTile(7, 4) + clearTile(7, 5) + clearTile(7, 0) + setMap(levels[level]) + addSprite(12, 0, gasCounter) + addSprite(12, 1, num[gas]) + addSprite(11, 0, itemCounter) + addSprite(0, 6, Mouse) + if (itemNum > 0) { + itemRecalculate() + if (hasRope > 0 && printedRope == 0) { + printedRope = 1 + itemCount + itemCount = itemCount + 1 + } + if (printedRope > 0) { + addSprite(11, printedRope, rope) + } + + if (hasAidKit > 0 && printedAidKit == 0) { + printedAidKit = 1 + itemCount + itemCount = itemCount + 1 + } + if (printedAidKit > 0) { + addSprite(11, printedAidKit, aidKit) + } + + if (hasBat > 0 && printedBat == 0) { + printedBat = 1 + itemCount + itemCount = itemCount + 1 + } + if (printedBat > 0) { + addSprite(11, printedBat, bat) + } + + if (hasThermometer > 0 && printedThermometer == 0) { + printedThermometer = 1 + itemCount + itemCount = itemCount + 1 + } + if (printedThermometer > 0) { + addSprite(11, printedThermometer, thermometer) + } + + if (hasBucket > 0 && printedBucket == 0) { + printedBucket = 1 + itemCount + itemCount = itemCount + 1 + } + if (printedBucket > 0) { + addSprite(11, printedBucket, bucket) + } + } +} + +function runStories() { + if (story == 0) { + addText(stories[story], { + x: 1, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 1, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 1, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 1, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 1, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 1, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 1, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 3, + y: 10, + color: color`7` + }) + story = story + 1 + addText(stories[story], { + x: 3, + y: 12, + color: color`7` + }) + story = story + 1 + addText("leave?", { + x: 3, + y: 14, + color: color`7` + }) + } else { + if (story == 13) { + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 2, + y: 10, + color: color`7` + }) + story = story + 1 + addText("Leave?", { + x: 2, + y: 12, + color: color`7` + }) + + } else { + if (story == 22) { + story = story + 1 + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 9, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 10, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 2, + y: 11, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 2, + y: 12, + color: color`7` + }) + story = story + 1 + addText(stories[story], { + x: 2, + y: 14, + color: color`7` + }) + story = story + 1 + + } else { + if (story == 69) { + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + sleep() + } else { + if (story == 75) { + addText(stories[story], { + x: 0, + y: 1, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 9, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 10, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 11, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 12, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 13, + color: color`2` + }) + story = story + 1 + gas = gas + 1 + sleep() + } else { + if (story == 88) { + addText(stories[story], { + x: 0, + y: 1, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 9, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 10, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 2, + y: 11, + color: color`7` + }) + story = story + 1 + addText(stories[story], { + x: 2, + y: 12, + color: color`7` + }) + story = story + 1 + addText(stories[story], { + x: 2, + y: 14, + color: color`7` + }) + story = story + 1 + } else { + if (story == 101) { + addText(stories[story], { //8 + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 9, + color: color`2` + }) + story = story + 1 + bookCounter = 1 + var book = setInterval(() => { + if (bookCounter == 1) { + clearText() + addText(stories[story], { //8 + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + bookCounter = bookCounter + 1 + } else { + if (bookCounter == 2) { + clearText() + addText(stories[story], { //8 + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + bookCounter = bookCounter + 1 + } else { + if (bookCounter > 2 && bookCounter < 5) { + clearText() + addText(stories[story], { //8 + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + bookCounter = bookCounter + 1 + } else { + if (bookCounter == 5) { + clearText() + addText(stories[story], { //8 + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { //8 + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + bookCounter = bookCounter + 1 + } else { + clearText() + setMap(2) + addText("no hope", { //8 + x: 7, + y: 6, + color: color`2` + }) + } + } + } + } + }, 5000) + + + } + } + } + } + } + } + } +} + +function firstOptions() { + if (level == 2) { + if (story == 9) { + if (mousePos == 1) { + itemNum = itemNum - 1 + hasRope = hasRope - 1 + printedRope = 0 + itemCount = itemCount - 1 + gas = gas + 1 + clearText() + buildingUI() + addText(stories[story], { + x: 1, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = 13 + + sleep() + + + } else { + if (mousePos == 2) { + clearText() + if (Math.random() < 0.45) { + addText(stories[story + 3], { + x: 1, + y: 6, + color: color`2` + }) + story = 13 + + sleep() + } else { + addText(stories[story + 2], { + x: 1, + y: 6, + color: color`2` + }) + story = 13 + gas = gas + 1 + buildingUI() + + sleep() + } + } else { + story = 13 + clearText() + level = 0 + roadUI() + + } + } + + } + } +} + +function secondOptions() { + if (level == 2) { + if (story == 21) { + if (mousePos == 1 && hasRope > 0) { + itemNum = itemNum + 1 + hasBat = hasBat + 1 + gas = gas + 1 + clearText() + buildingUI() + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + + sleep() + + } else { + gas = gas + 1 + clearText() + buildingUI() + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + + sleep() + } + } + } +} + +function thirdOptions() { + if (level == 2) { + if (story == 35) { + if (mousePos == 2) { + clearText() + addText(stories[story], { + x: 0, + y: 1, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 9, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 10, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 11, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 12, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 13, + color: color`2` + }) + story = story + 1 + addText("Leave", { + x: 2, + y: 14, + color: color`7` + }) + story = 48 + } else { + if (mousePos == 3) { + clearText() + addText("made it safely", { + x: 1, + y: 7, + color: color`2` + }) + addText("to the truck.", { + x: 1, + y: 8, + color: color`2` + }) + story = 69 + sleep() + } + } + } + } +} + +function fourthOptions() { + if (level == 2) { + if (story == 48) { + if (mousePos == 3) { + buildingUI() + clearText() + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 9, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 10, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 11, + color: color`2` + }) + story = story + 1 + var check = setInterval(() => { + buildingUI() + clearText() + if (hasBat == 0) { + addText(stories[story], { + x: 0, + y: 2, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 3, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 6 + gameOver() + } else { + story = story + 5 + addText(stories[story], { + x: 0, + y: 4, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 5, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 6, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 7, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 8, + color: color`2` + }) + story = story + 1 + addText(stories[story], { + x: 0, + y: 9, + color: color`2` + }) + story = story + 1 + sleep() + + clearInterval(check) + } + }, 5300) + } + } + } +} + +function fifthOptions() { + if (level == 2) { + if (story == 101) { + if (mousePos == 1) { + story = story + 1 + itemNum = itemNum + 1 + hasThermometer = hasThermometer + 1 + clearText() + buildingUI() + addText("got Thermometer!", { + x: 3, + y: 5, + color: color`2` + }) + sleep() + story = story - 1 + } else { + if (mousePos == 2) { + story = story + 1 + itemNum = itemNum + 1 + hasAidKit = hasAidKit + 1 + clearText() + buildingUI() + addText("got First Aid Kit!", { + x: 3, + y: 5, + color: color`2` + }) + sleep() + story = story - 1 + } else { + if (mousePos == 3) { + story = story + 1 + gas = gas + 1 + clearText() + buildingUI() + addText("got Gas!", { + x: 3, + y: 5, + color: color`2` + }) + sleep() + story = story - 1 + } + } + } + } + } +} + +roadUI() + +var animateRoad; +setInterval(() => { + if (level < 2) { + if (level == 0) { + level = 1 + roadUI() + } else { + level = 0 + roadUI() + } + } +}, 30) + +onInput("w", () => { + if (level == 2) { + if (getFirst(Mouse).y > 6) { + getFirst(Mouse).y += -1 + mousePos = mousePos - 1 + } + } +}) + +onInput("s", () => { + if (level == 2) { + if (getFirst(Mouse).y < 8) { + getFirst(Mouse).y += 1 + mousePos = mousePos + 1 + } + } +}) + +onInput("j", () => { + if (level < 2) { + level = 2 + mousePos = 1 + if (gas == 0) { + gameOver() + } + gas = gas - 1 + buildingUI() + runStories() + } +}) + +onInput("d", () => { + + firstOptions() + secondOptions() + thirdOptions() + fourthOptions() + fifthOptions() +}) diff --git a/games/Hue_Havoc.js b/games/Hue_Havoc.js new file mode 100644 index 0000000000..3b94e65a1b --- /dev/null +++ b/games/Hue_Havoc.js @@ -0,0 +1,2372 @@ +/* +@title: Hue Havoc +@author: Gus Ruben +@tags: ['multiplayer'] +@addedOn: 2024-09-01 +*/ + +// settings +const fps = 10; +const resolution = 4; // number of pixels in a tile (16 real pixels) + +async function spiralAnimation(spriteChar, delay) { + let top = 0, + bottom = 7, + left = 0, + right = 9, + direction = 0; + + while (top <= bottom && left <= right) { + switch (direction) { + case 0: // right + for (let i = left; i <= right; i++) { + clearTile(i, top); + addSprite(i, top, spriteChar); + await new Promise((res) => setTimeout(res, delay)); + } + top++; + break; + case 1: // down + for (let i = top; i <= bottom; i++) { + clearTile(right, i); + addSprite(right, i, spriteChar); + await new Promise((res) => setTimeout(res, delay)); + } + right--; + break; + case 2: // left + for (let i = right; i >= left; i--) { + clearTile(i, bottom); + addSprite(i, bottom, spriteChar); + await new Promise((res) => setTimeout(res, delay)); + } + bottom--; + break; + case 3: // up + for (let i = bottom; i >= top; i--) { + clearTile(left, i); + addSprite(left, i, spriteChar); + await new Promise((res) => setTimeout(res, delay)); + } + left++; + break; + } + direction = (direction + 1) % 4; + // wait seconds + } +} + +let currentLegendChar = 32; // start at the first real character (space) +function getLegendChar() { + const char = String.fromCharCode(currentLegendChar++); + if (char == "." || char == "\n" || char == " ") { + // skip reserved characters + return String.fromCharCode(currentLegendChar++); + } + return char; +} + +// the title screen image needs to be split into 16x16 chunks +function splitBitmap(bitmap) { + const rows = bitmap.trim().split("\n"); + const chunks = []; + const chunkRows = rows.length / 16; + const chunkCols = rows[0].length / 16; + + for (let i = 0; i < chunkRows; i++) { + for (let j = 0; j < chunkCols; j++) { + let chunk = []; + for (let r = 0; r < 16; r++) { + const rowIndex = i * 16 + r; + const startCol = j * 16; + const endCol = startCol + 16; + + chunk.push(rows[rowIndex].slice(startCol, endCol)); + } + chunks.push(chunk.join("\n")); + } + } + + return chunks; +} + +// dimensions need to be a multiple of 16 +const titleFrames = + bitmap`3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333332222223333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333330000003111111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322233000000000011111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222777727777777777777777777777 +3333333333333322230000333300001111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222222000000007777777777777777777 +3333333333333222200033322333000111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000077777700027777777777777777 +3333333333333222003399333333300011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112007777222770007777777777777777 +3333333233333222003000933333330011111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111111222222111111111111111111111111111111111000022227222111111111111111111111100000777777700777777777777777 +3333333223333233200000093333333001111111111111111111111111222220001111111111111111111111111111110000002222221111111111111111111111122000077777700077777777777777 +33333332233332333222100933333330001111111111111111111111111222000001111111111111111111111111110000330002222111111111111111111100000000007777777H0077777777777777 +33333332233332232222100933333333001111111111111111111111111220003000111111111111111111111111100003333002221111111111111111110000000000777777777H0077777777777777 +33333332113331112221100993333333001111111111111111111111111220033300111111111111111111111111000300333002211111111111111111100007777777777777777H0077777777777777 +3333333111131111122100099333333300011111111111111111111111122003300011111111111111111111111100333003000221111111111111111100077777777777777777HH0077777777777777 +2333333111131111122100999333333330000111111111111111111111111003300000111111111111111111111100030003001111111111111111111000777777777777777777HH0077727777777777 +2333333211331111122100999333333333000011111111111111111111111000900000011110000011000000001110030003001111111111111111110007777777777777777777H00077727777777777 +233333322333311122210099933333333333000111111100011111000000010000009000100000000000000000000000000000000111111111111111007777777777777777777HH00777727777777777 +23333332233332222221009993333333333330011111100000111000000000100009990000009990000999909000000000000000000111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111000300010009999900000999999000999999909999999909999990009999000011111111111000FF77777777777777777HH00777727777777777 +23333332223322222222009993333333333FFF00000100333000009929999000999999930992292990999999300922292999999999000111111110000FF77777777777777777HH000777727777777777 +233333332233211111220099993333333333FF00000000330000099299990000999933309929999330999993330929999999999999900111111100001FFF77F777777777777HHH002777727777777777 +33333333222311111112009999333333333FF11111000030000009299999000999933390929993333009993333099299999993333330001111100011111FF7FF7777777777HHHH002777777777777777 +33333333222111111111000999933333FFFF111111100030000099299933000999333309929933333009933333909299993333333333001110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322111111111110099999933FFFF11111CCCC003000999999333000999933390929993330900993333330929993333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777772 +333333332111111111111000999999FFFF1111CCCCCC0000099999933330009993339909999333309009933333309999333333030030000000CCCCCCCCC111FFF777HHHHHHH000222777777777777722 +3333333311111111111111000999F99FF1111CCCCCCCC0000099993333330099333390999933333000099333333009993333000000900000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCC111FF7FHHHH000077222777727777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111FFFF000001177222277227777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCC111F000000011172222272227177777722 +333333331111111111111111111000111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCC111000011111122222272221117777722 +333332331111111111111111111100111CCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC11001111111122222272227177777722 +33333232211111111111111111110001CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC10001111111172222222227777277722 +33332222221111111111111111111000CCCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCCC00011111111227722222227777227722 +333322232221111111111111111111000CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC000111111111222271272227777227722 +333322333221111111111111111111100CCCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCCC001111111111222211122227777227722 +3333222322211111111111111111111000CC0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCCC0001111111111122221272227777227722 +33332222222111111111111110000011000C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00011111111111112222227227777222722 +33332222222111111111111100000001100C00033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCCC00111111111111111111227227777722222 +233222222111111111111111007770001000C0030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000000111111111111111111122727777772222 +2332222211111111111111110007770011000003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111112727777772722 +2332222111111111111111111000770011100003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111277777772222 +2332222111111111111111111100700011110003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111277777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111277777772222 +2322222111111111111111111100700111111000000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111277777772222 +2322222211111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111112272777772222 +2222222221111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122272777772222 +2222222222222111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122272777772222 +2322222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111122722777772222 +2222222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111222722777772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001112222227222277772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122222277722227722222 +2222222222222331100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122222277222227722222 +2222222222233221000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700112222722222227722222 +2222222222322210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111277222112227722222 +2222222233222210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111122221111227722222 +2222222322222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112221111227722222 +2222123222220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112222112222722222 +2221112222200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222132222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222322222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22232222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2223222222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222722 +223223222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +223233322220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +223223222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2322222222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222122 +2322222222222221110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222221112 +232222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222122 +23222222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222222 +232222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001117722222222222 +23222222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111112272222222222 +23222222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122272222222222 +23222222222211111100H000H0HH00H00H00H00HHHHH0001000HH000000000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122227222222222 +23222222221111111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122227222222222 +223222222111111111000000000H00000000000000070011100HH000CCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222227222222222 +223222221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111111222227222222222 +223222221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCCC000CCCCCCCCCCCC00000CCCC000C0000H0001111111111111111111111111111112222272222272222 +222322221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCCC000000CCCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111112222272222777222 +222322221111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCCCCCCCCCCCCCCC00000011111111111111111111111111111122227722222272222 +2222322221111111111111111100011111111111111111111000000CCCCCCCCCCCC00000CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000111111111111111111111111111111277772222222222222 +222223222211111111111111111111111111111111111111000000CCCCCCCCCCCCCC000CC00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111112222222222222222222 +22222322222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCCCC000011111111110000CCCCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222232222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222223222222111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00222111111111111111111111112222222222222222222222 +22222222332222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022221111111111111111111222222222222222222222222 +2222222222322221111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111211110000CCCCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222233222111111111111111111111111111111100CCCCCCCCCCCCCC0000221111111111111111222111110000CCCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222333111111111111111111111111111111100CCCCCCCCCCCCC000022221111111111111122222111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222221112222222311111111111111111111111111111100CCCCCCCCCCC0000222222221111111111122222221111220000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222222221111111111111111111111111111100CCCCCCCCCC000022222222222111111110000002222200000000CCCCCCC0000222211111111111111111122222222221112222222222222 +22222222222222222221111111111111111111111111111000CCCC000000022200000022222111111000000002220000000000000CC00002222211111111111111111122222222222222222222222222 +222222222222222222222111111111111111111111111111000CC00000000020000000022221111100077770002000777700000000000222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111000000777770000077770002222111000772277000007722770077700002222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111100007722777000772277001222111007727777700007277770772770001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200077277777700727777002222220007277777770007277777727777002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200772777777700727777002212220077777077770007777777777777002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100777777777700777777002212220077770077777007777777777770002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100777777777700777777000111100077777777777007077777777770021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777777000777777700000200777777777777000077777777700022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777777000777777770000000777777777777000077777777700121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777707000777777777770000777777777777700007777770700222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777007000077777777777007777777777777700007777770000121212121212121212121212121212121212121212121212121212 +212221222122212221222122212221222122212221222122210077777700000007777777777HH077777H07777777000777777H0001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200777777007000077777777HHHH07777HH0707777H00077777H00012121212121212121212121212121212121212121212121212121212 +222122212221222122212221222122212221222122212221220077777HH000000777777HHHHH0077HHHH00077HHH000777HHH00122212221222122212221222122212221222122212221222122212221 +12121212121212121212121212121212121212121212121212000777HHH00010007HHHHHHHHH000HHH0H0000HHH0000HHHHHH00212121212121212121212121212121212121212121212121212121212 +21212121212121212121212121212121212121212121212121200HHHHH00012100HHHHH0HH0H0000H0000000HH000000HHHH000121212121212121212121212121212121212121212121212121212121 +121212121212121212121212121212121212121212121212121000HH0H00121200H0H000H000000000000200H0001200H0H0001212121212121212121212121212121212121212121212121212121212 +212121212121212121212121212121212121212121212121212100H00000212100H00000H00001200021210000012100H000012121212121212121212121212121212121212121212121212121212121 +111211121112111211121112111211121112111211121112111200H00002111200000000000211121112111000121100H000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +121112111211121112111211121112111211121112111211121110001211121112111211121112111211121112111200H001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333330000003333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333000000000011111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322230000333300001111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122007777222770007777777777777777 +3333333333333222003000933333330011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111112222222211111111111111111111111111111111000022222222221111112211111111111200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111111222220001111111111111111111111111111110000002227222111111111111111111111122000077777700077777777777777 +33333332233332332222100933333330001111111111111111111111112222000001111111111111111111111111110000330002222211111111111111111100000000007777777H0077777777777777 +33333332233332333222100933333333001111111111111111111111111220003000111111111111111111111111100003333002222111111111111111110000000000777777777H0077777777777777 +33333332233332232222100993333333001111111111111111111111111220033300111111111111111111111111000300333002221111111111111111100007777777777777777H0077777777777777 +3333333211333111222100099333333300011111111111111111111111122003300011111111111111111111111100333003000221111111111111111100077777777777777777HH0077777777777777 +3333333111131111122100999333333330000111111111111111111111122003300000111111111111111111111100030003001221111111111111111000777777777777777777HH0077777777777777 +2333333111131111122100999333333333000011111111111111111111111000900000011110000011000000001110030003001111111111111111110007777777777777777777H00077727777777777 +233333321133111112210099933333333333000111111100011111000000010000009000100000000000000000000000000000000111111111111111007777777777777777777HH00777727777777777 +23333332233331112221009993333333333330011111100000111000000000100009990000009990000999909000000000000000000111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111000300010009999900000999999000999999909999999909999990009999000011111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000100333000009929999000999999930992292990999999300922292999999999000111111110000FF77777777777777777HH000777727777777777 +233333322233222222220099993333333333FF00000000330000099299990000999933309929999330999993330929999999999999900111111100001FFF77F777777777777HHH002777727777777777 +23333333223321111122009999333333333FF11111000030000009299999000999933390929993333009993333099299999993333330001111100011111FF7FF7777777777HHHH002777727777777777 +33333333222311111112000999933333FFFF111111100030000099299933000999333309929933333009933333909299993333333333001110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322211111111120099999933FFFF11111CCCC003000999999333000999933390929993330900993333330929993333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332211111111111000999999FFFF1111CCCCCC0000099999933330009993339909999333309009933333309999333333030030000000CCCCCCCCC111FFF777HHHHHHH000222777777777777772 +3333333321111111111111000999F99FF1111CCCCCCCC0000099993333330099333390999933333000099333333009993333000000900000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111FFFF000001177222777727777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCC111F000000011177222277227777777722 +333333331111111111111111111000111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCC111000011111172222272227177777722 +333333331111111111111111111100111CCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC11001111111122222272221117777722 +33333233111111111111111111110001CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC10001111111122222272227177777722 +33333232211111111111111111111000CCCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCCC00011111111172222222227777277722 +333322222211111111111111111111000CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC000111111111227722222227777227722 +333322232221111111111111111111100CCCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCCC001111111111222271272227777227722 +3333223332211111111111111111111000CC0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCCC0001111111111222211122227777227722 +33332223222111111111111110000011000C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00011111111111122221272227777227722 +33332222222111111111111100000001100C00033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCCC00111111111111112222227227777222722 +333322222221111111111111007770001000C0030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000000111111111111111111227227777722222 +2332222221111111111111110007770011000003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111122727777772222 +2332222211111111111111111000770011100003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111112727777772722 +2332222111111111111111111100700011110003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111277777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111277777772222 +2332222111111111111111111100700111111000000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111277777772222 +2322222111111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111111277777772222 +2322222211111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111112272777772222 +2222222221111111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122272777772222 +2222222222222111111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111122272777772222 +2322222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111122722777772222 +2222222222222211110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001111111222722777772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001112222227222277772222 +2222222222222221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122222277722227722222 +2222222222222331000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700122222277222227722222 +2222222222233220007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000112222722222227722222 +2222222222322210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111277222112227722222 +2222222233222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111122221111227722222 +2222222322220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112221111227722222 +2222123222200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000012222112222722222 +2221112222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222132222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000222222222722222 +22223222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2223222222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222222 +222322222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700122222222222722 +223223222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +223233322220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2232232222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222222 +2322222222222222110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222272222122 +232222222222222111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222221112 +23222222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222122 +232222222222221111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112222222222222 +23222222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111117722222222222 +23222222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111112272222222222 +23222222222221111100H000H0HH00H00H00H00HHHHH0001000HH000000000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122272222222222 +23222222222211111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122227222222222 +232222222211111111000000000H00000000000000070011100HH000CCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111122227222222222 +223222222111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111111222227222222222 +223222221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCCC000CCCCCCCCCCCC00000CCCC000C0000H0001111111111111111111111111111111222227222222222 +223222221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCCC000000CCCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111112222272222272222 +222322221111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCCCCCCCCCCCCCCC00000011111111111111111111111111111112222272222777222 +2223222211111111111111111100011111111111111111111000000CCCCCCCCCCCC00000CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000111111111111111111111111111111122227722222272222 +222232222111111111111111111111111111111111111111000000CCCCCCCCCCCCCC000CC00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111111277772222222222222 +22222322221111111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCCCC000011111111110000CCCCCCCCCCCCCCCCCCCCC00111111111111111111111111111112222222222222222222 +22222322222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222232222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222223222222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022111111111111111111111112222222222222222222222 +2222222233222211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222322221111111111111111111111111111111100CCCCCCCCCCCCCC0000211111111111111111121111110000CCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222233222111111111111111111111111111111100CCCCCCCCCCCCC000022211111111111111112221111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222333111111111111111111111111111111100CCCCCCCCCCC0000222222111111111111112222211111120000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222221112222222311111111111111111111111111111100CCCCCCCCCC000022222222211111111111222222211112220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222221222222222211111111111111111111111111111000CCCCCCC0000222222222222211111111000000222220000000000CCCC00002222211111111111111111122222222221112222222222222 +222222222222222222211111111111111111111111111111000CCC0000000222000000222221111110000000022200000000000000000222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111000000000000020000000022221111100077770002000777700000000002222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111100000777770000077770002222111000772277000007722770077700022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120007722777000772277001222111007727777700007277770772770001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200077277777700727777002222220007277777770007277777727777002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200772777777700727777002212220077777077770007777777777777002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100777777777700777777002212220077770077777007777777777770002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100777777777700777777000111100077777777777007077777777770021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777777000777777700000200777777777777000077777777700022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777777000777777770000000777777777777000077777777700121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777707000777777777770000777777777777700007777770700222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777007000077777777777007777777777777700007777770000121212121212121212121212121212121212121212121212121212 +212221222122212221222122212221222122212221222122210077777700000007777777777HH077777H07777777000777777H0001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200777777007000077777777HHHH07777HH0707777H00077777H00012121212121212121212121212121212121212121212121212121212 +222122212221222122212221222122212221222122212221220077777HH000000777777HHHHH0077HHHH00077HHH000777HHH00122212221222122212221222122212221222122212221222122212221 +12121212121212121212121212121212121212121212121212000777HHH00010007HHHHHHHHH000HHH0H0000HHH0000HHHHHH00212121212121212121212121212121212121212121212121212121212 +21212121212121212121212121212121212121212121212121200HHHHH00012100HHHHH0HH0H0000H0000000HH000000HHHH000121212121212121212121212121212121212121212121212121212121 +121212121212121212121212121212121212121212121212121000HH0H00121200H0H000H000000000000200H0001200H0H0001212121212121212121212121212121212121212121212121212121212 +212121212121212121212121212121212121212121212121212100H00000212100H00000H00001200021210000012100H000012121212121212121212121212121212121212121212121212121212121 +111211121112111211121112111211121112111211121112111200H00002111200000000000211121112111000121100H000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +121112111211121112111211121112111211121112111211121110001211121112111211121112111211121112111200H001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333330000003333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333000000000033111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322330000333300001111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222200000000000777777777777777777 +3333333333333322000333233333300111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222007777222770007777777777777777 +3333333333333222003000933333330011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000007777277000777777777777777 +3333333333333222000000933333330001111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111112222222211111111111111111111111111111111000022222222221111112211111111111222000077777700077777777777777 +33333332333332222222200933333330001111111111111111111111112222200011111111111111111111111111111100000022272221111111111111111100000000007777777H0077777777777777 +33333332233332332222100933333333001111111111111111111111112222000001111111111111111111111111110000330002222211111111111111110000000000777777777H0077777777777777 +33333332233332333222100993333333001111111111111111111111111220003000111111111111111111111111100003333002222111111111111111100007777777777777777H0077777777777777 +3333333223333223222200099333333300011111111111111111111111122003330011111111111111111111111100030033300222111111111111111100077777777777777777HH0077777777777777 +3333333211333111222100999333333330000111111111111111111111122003300011111111111111111111111100333003000221111111111111111000777777777777777777HH0077777777777777 +3333333111131111122100999333333333000011111111111111111111122003300000111111111111111111111100030003001221111111111111110007777777777777777777H00077777777777777 +233333311113111112210099933333333333000111111111111111111111100090000001111000001100000000111003000300111111111111111111007777777777777777777HH00777727777777777 +23333332113311111221009993333333333330011111110001111100000001000000900010000000000000000000000000000000011111111111111100F777777777777777777HH00777727777777777 +23333332233331112221009993333333333330001111100000111000000000100009990000009990000999909000000000000000000111111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000100030001000999990000099999900099999990999999990999999000999900001111111110000FF77777777777777777HH000777727777777777 +233333322333322222210099993333333333FF00000000333000009929999000999999930992292990999999300922292999999999000111111100001FFF77F777777777777HHH002777727777777777 +23333332223322222222009999333333333FF11111000033000009929999000099993330992999933099999333092999999999999990011111100011111FF7FF7777777777HHHH002777727777777777 +23333333223321111122000999933333FFFF111111100030000009299999000999933390929993333009993333099299999993333330001110000CC11111FFFF77777777HHHHH0002777727777777777 +3333333322231111111210099999933FFFF11111CCCC003000009929993300099933330992993333300993333390929999333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332221111111112000999999FFFF1111CCCCCC0030009999993330009999333909299933309009933333309299933333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777777 +3333333322111111111111000999F99FF1111CCCCCCC00000999999333300099933399099993333090099333333099993333330300300000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777772 +3333333321111111111111100099FFFF1111CCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111FFFF000001277222777777777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111F000000011177222777727777777722 +333333331111111111111111111000111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCC111000011111177222277227777777722 +333333331111111111111111111100111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC11001111111172222272227177777722 +33333333111111111111111111110001CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC10001111111122222272221117777722 +33333233111111111111111111111000CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC00011111111122222272227177777722 +333332322111111111111111111111000CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC000111111111172222222227777277722 +333322222211111111111111111111100CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC001111111111227722222227777227722 +3333222322211111111111111111111000CCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCC0001111111111222271272227777227722 +33332233322111111111111111111111000C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00011111111111222211122227777227722 +33332223222111111111111110000011100C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00111111111111122221272227777227722 +33332222222111111111111100000001100000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCC000111111111111112222227227777222722 +33332222222111111111111100777000110000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000001111111111111111111227227777722222 +2332222221111111111111110007770011100003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111122727777772222 +2332222211111111111111111000770011110003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111112727777772722 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111277777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111277777772222 +2332222111111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111277777772222 +2322222111111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111111277777772222 +2322222211111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111112272777772222 +2222222221111111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122272777772222 +2222222222222111111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111122272777772222 +2322222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111122722777772222 +2222222222222211110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001111111222722777772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001112222227222277772222 +2222222222222221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122222277722227722222 +2222222222222331000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700122222277222227722222 +2222222222233220007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000112222722222227722222 +2222222222322210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111277222112227722222 +2222222233222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111122221111227722222 +2222222322220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112221111227722222 +2222123222200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000012222112222722222 +2221112222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222132222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000222222222722222 +22223222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2223222222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222222 +222322222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700122222222222722 +223223222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +223233322220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2232232222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222222 +2322222222222222110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222272222122 +232222222222222111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222221112 +23222222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222122 +232222222222221111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112222222222222 +23222222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111117722222222222 +23222222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111112272222222222 +23222222222221111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122272222222222 +23222222222211111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122227222222222 +232222222211111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111122227222222222 +223222222111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111111222227222222222 +223222221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCC000000CCCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111111222227222222222 +223222221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111112222272222272222 +222322221111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111112222272222777222 +2223222211111111111111111100011111111111111111110000000CCCCCCCCCCCC00000C00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111111122227722222272222 +222232222111111111111111111111111111111111111111000000CCCCCCCCCCCCCC000000011111111110000CCCCCCCCCCCCCCCCCCCCC00111111111111111111111111111111277772222222222222 +22222322221111111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00111111111111111111111111111112222222222222222222 +22222322222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222232222221111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00021111111111111111111111111222222222222222222222 +2222222322222211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022111111111111111111111112222222222222222222222 +2222222233222211111111111111111111111111111111100CCCCCCCCCCCCCC0000111111111111111111111111110000CCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222322221111111111111111111111111111111100CCCCCCCCCCCCC000022111111111111111111211111110000CCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222233222111111111111111111111111111111100CCCCCCCCCCC0000222221111111111111111222111111110000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222333111111111111111111111111111111100CCCCCCCCCC000022222221111111111111122222111111220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222211122222223111111111111111111111111111111000CCCCCCC0000222222222221111111111122222221111222220000CCCC00002222211111111111111111112222222211111222222222222 +222222212222222222111111111111111111111111111111000CCCC000002222222222222211111111000000222220000002000000000222222211111111111111111122222222221112222222222222 +2222222222222222222111111111111111111111111111111000000000000222000000222221111110000000022200000000000000002222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111100000000000020000000022221111100099990002000999900000000222222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111112000999990000099990002222111000992299000009922990099900022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120009922999000992299001222111009929999900009299330992330001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200099293333300929933002222220009299333330009233333323333002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200992333333300923333002212220099933033330009933333333333002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100993333333300933333002212220099330033333009333333333330002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100993333333300933333000111100093333333333009033333333330021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200933333333000333333300000200993333333333000033333333300022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200933333333000333333330000000933333333333000033333333300121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200333333303000333333333990000333333333333300003333330300222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200333333003000033333333333003333333333333300003333330000121212121212121212121212121212121212121212121212121212 +2122212221222122212221222122212221222122212221222100333333000000033333333333303333330333333300033333330001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200333333003000033333333333303333330303333300033333300012121212121212121212121212121212121212121212121212121212 +2221222122212221222122212221222122212221222122212200333333300000033333333333003333330003333300033333300122212221222122212221222122212221222122212221222122212221 +1212121212121212121212121212121212121212121212121200033333300010003333333333000333030000333000033333300212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212120033333000121003333303303000030000000330000003333000121212121212121212121212121212121212121212121212121212121 +1212121212121212121212121212121212121212121212121210003303001212003030003000000000000200300012003030001212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212121003000002121003000003000012000212100000121003000012121212121212121212121212121212121212121212121212121212121 +1112111211121112111211121112111211121112111211121112003000021112000000000002111211121110001211003000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1211121112111211121112111211121112111211121112111211100012111211121112111211121112111211121112003001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333330000003333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333000000000033111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322330000333300001111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222200000000000777777777777777777 +3333333333333322000333233333300111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222007777222770007777777777777777 +3333333333333222003000933333330011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000007777277000777777777777777 +3333333333333222000000933333330001111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111222000077777700077777777777777 +33333332333332222222200933333330001111111111111111111111112222221111111111111111111111111111111110000222272221111111111111111100000000007777777H0077777777777777 +33333332233332332222100933333333001111111111111111111111112222200011111111111111111111111111111100000022222211111111111111110000000000777777777H0077777777777777 +33333332233332333222100993333333001111111111111111111111111222000001111111111111111111111111110000330002222111111111111111100007777777777777777H0077777777777777 +3333333223333223222200099333333300011111111111111111111111122000300011111111111111111111111110000333300222111111111111111100077777777777777777HH0077777777777777 +3333333211333111222100999333333330000111111111111111111111122003330011111111111111111111111100030033300221111111111111111000777777777777777777HH0077777777777777 +3333333111131111122100999333333333000011111111111111111111122003300011111111111111111111111100333003000221111111111111110007777777777777777777H00077777777777777 +233333311113111112210099933333333333000111111111111111111111100330000011111111111111111111110003000300111111111111111111007777777777777777777HH00777727777777777 +23333332113311111221009993333333333330011111111111111111111110009000000111100000110000000011100300030011111111111111111100F777777777777777777HH00777727777777777 +23333332233331112221009993333333333330001111110001111100000001000000900010000000000000000000000000000000011111111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000110000011100000000010000999000000999000099990900000000000000000011111111110000FF77777777777777777HH000777727777777777 +233333322333322222210099993333333333FF00000000030001000999990000099999900099999990999999990999999000999900001111111100001FFF77F777777777777HHH002777727777777777 +23333332223322222222009999333333333FF11111000033300000992999900099999993099229299099999930092229299999999900011111100011111FF7FF7777777777HHHH002777727777777777 +23333333223321111122000999933333FFFF111111100033000009929999000099993330992999933099999333092999999999999990011110000CC11111FFFF77777777HHHHH0002777727777777777 +3333333322231111111210099999933FFFF11111CCCC003000000929999900099993339092999333300999333309929999999333333000100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332221111111112000999999FFFF1111CCCCCC0030000099299933000999333309929933333009933333909299993333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777777 +3333333322111111111111000999F99FF1111CCCCCCC00300099999933300099993339092999333090099333333092999333333333330000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777772 +3333333321111111111111100099FFFF1111CCCCCCCC0000099999933330009993339909999333309009933333309999333333030030000CCCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCCC111FFFF000001277222777777777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111F000000011177222777727777777722 +333333331111111111111111111000111CCCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCCC111000011111177222277227777777722 +333333331111111111111111111100111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCCC11001111111172222272227177777722 +33333333111111111111111111110001CCCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC10001111111122222272221117777722 +33333233111111111111111111111000CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC00011111111122222272227177777722 +333332322111111111111111111111000CCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCC000111111111122222222227777277722 +333322222211111111111111111111100CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC001111111111772222222227777227722 +3333222322211111111111111111111000CCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCC0001111111111227721272227777227722 +33332233322111111111111111111111000CC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCC00011111111111222211122227777227722 +33332223222111111111111111111111100C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00111111111111122221222227777227722 +333322222221111111111111100000111000003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCC000111111111111112222722227777222722 +33332222222111111111111100000001110000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCC0001111111111111111111272227777722222 +23322222211111111111111100777000111000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000011111111111111111111127227777772222 +2332222211111111111111110007770011110003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111117227777772722 +2332222111111111111111111000770011111003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111727777772222 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111727777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111727777772222 +2322222111111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111727777772222 +2322222211111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111112722777772222 +2222222221111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122722777772222 +2222222222222111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122722777772222 +2322222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111127222777772222 +2222222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111227222777772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001112222277222277772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122222777722227722222 +2222222222222221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122227227222227722222 +2222222222222331000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700112272222222227722222 +2222222222233210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111722222112227722222 +2222222222322210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111122221111227722222 +2222222223222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112221111227722222 +2222122232220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112222112222722222 +2221112322200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222123222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222232222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22223222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2222322222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222722 +222323222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +222333322220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +222323222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2232222222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222122 +2232222222222221110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222221112 +223222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222122 +22322222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222222 +223222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112222222222222 +22322222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111117222222222222 +22322222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122722222222222 +22322222222211111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122272222222222 +22322222221111111100H000000H00H00000H00000070011100HH00CCCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122272222222222 +222322222111111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222272222222222 +222322221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC000000000CCCCCCCCCC00H00CC000000C00HHH000111111000111111111111111111111222272222222222 +222322221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCC00000000CCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111112222722222272222 +222232221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CC000011110000CCCCCCCC000CCCCCCCCCCC00H0011111111111111111111111111111112227222222777222 +222232221111111111111111100000111111111111111111000HH00CCCCCCCCCCCC00700C00001111110000CCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111177772222222272222 +2222232221111111111111111100011111111111111111110000000CCCCCCCCCCCC0000000011111111110000CCCCCCCCCCCCCCCCCCCC000111111111111111111111111111111222222222222222222 +222222322211111111111111111111111111111111111111000000CCCCCCCCCCCCCC00000011111111111100000CCCCCCCCCCCCCCCCCCC00111111111111111111111111111112222222222222222222 +22222223222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222222322221111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00021111111111111111111111111222222222222222222222 +2222222223222211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022111111111111111111111112222222222222222222222 +2222222222322211111111111111111111111111111111100CCCCCCCCCCCCCC0000111111111111111111111111110000CCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222233221111111111111111111111111111111100CCCCCCCCCCCCC000022111111111111111111211111110000CCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222222333111111111111111111111111111111100CCCCCCCCCCC0000222221111111111111111222111111110000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222222111111111111111111111111111111100CCCCCCCCCC000022222221111111111111122222111111220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222211122222222111111111111111111111111111111000CCCCCCC0000222222222221111111111122222221111222220000CCCC00002222211111111111111111112222222211111222222222222 +222222212222222222111111111111111111111111111111000CCCC000002222222222222211111111000000222220000002000000000222222211111111111111111122222222221112222222222222 +2222222222222222222111111111111111111111111111111000000000000222000000222221111110000000022200000000000000002222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111100000000000020000000022221111100099990002000999900000000222222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111112000999990000099990002222111000992299000009922990099900022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120009922999000992299001222111009929999900009299330992330001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200099293333300929933002222220009299333330009233333323333002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200992333333300923333002212220099933033330009933333333333002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100993333333300933333002212220099330033333009333333333330002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100993333333300933333000111100093333333333009033333333330021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200933333333000333333300000200993333333333000033333333300022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200933333333000333333330000000933333333333000033333333300121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200333333303000333333333990000333333333333300003333330300222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200333333003000033333333333003333333333333300003333330000121212121212121212121212121212121212121212121212121212 +2122212221222122212221222122212221222122212221222100333333000000033333333333303333330333333300033333330001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200333333003000033333333333303333330303333300033333300012121212121212121212121212121212121212121212121212121212 +2221222122212221222122212221222122212221222122212200333333300000033333333333003333330003333300033333300122212221222122212221222122212221222122212221222122212221 +1212121212121212121212121212121212121212121212121200033333300010003333333333000333030000333000033333300212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212120033333000121003333303303000030000000330000003333000121212121212121212121212121212121212121212121212121212121 +1212121212121212121212121212121212121212121212121210003303001212003030003000000000000200300012003030001212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212121003000002121003000003000012000212100000121003000012121212121212121212121212121212121212121212121212121212121 +1112111211121112111211121112111211121112111211121112003000021112000000000002111211121110001211003000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1211121112111211121112111211121112111211121112111211100012111211121112111211121112111211121112003001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333330000003333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333000000000011111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322230000333300001111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122007777222770007777777777777777 +3333333333333222003000933333330011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111111222222111111111111111111111111111111111111122227222111111111111111111111122000077777700077777777777777 +33333332233332332222100933333330001111111111111111111111112222221111111111111111111111111111111110000222222211111111111111111100000000007777777H0077777777777777 +33333332233332333222100933333333001111111111111111111111111222200011111111111111111111111111111100000022222111111111111111110000000000777777777H0077777777777777 +33333332233332232222100993333333001111111111111111111111111222000001111111111111111111111111110000330002221111111111111111100007777777777777777H0077777777777777 +3333333211333111222100099333333300011111111111111111111111122000300011111111111111111111111110000333300221111111111111111100077777777777777777HH0077777777777777 +3333333111131111122100999333333330000111111111111111111111122003330011111111111111111111111100030033300221111111111111111000777777777777777777HH0077777777777777 +2333333111131111122100999333333333000011111111111111111111111003300011111111111111111111111100333003000111111111111111110007777777777777777777H00077727777777777 +233333321133111112210099933333333333000111111111111111111111100330000011111111111111111111110003000300111111111111111111007777777777777777777HH00777727777777777 +23333332233331112221009993333333333330011111111111111111111110009000000111100000110000000011100300030011111111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111110001111100000001000000900010000000000000000000000000000000011111111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000110000011100000000010000999000000999000099990900000000000000000011111111110000FF77777777777777777HH000777727777777777 +233333322233222222220099993333333333FF00000000030001000999990000099999900099999990999999990999999000999900001111111100001FFF77F777777777777HHH002777727777777777 +23333333223321111122009999333333333FF11111000033300000992999900099999993099229299099999930092229299999999900011111100011111FF7FF7777777777HHHH002777727777777777 +33333333222311111112000999933333FFFF111111100033000009929999000099993330992999933099999333092999999999999990011110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322211111111120099999933FFFF11111CCCC003000000929999900099993339092999333300999333309929999999333333000100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332211111111111000999999FFFF1111CCCCCC0030000099299933000999333309929933333009933333909299993333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777772 +3333333321111111111111000999F99FF1111CCCCCCC00300099999933300099993339092999333090099333333092999333333333330000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCC0000099999933330009993339909999333309009933333309999333333030030000CCCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCCC111FFFF000001177222777727777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111F000000011177222277227777777722 +333333331111111111111111111000111CCCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCCC111000011111172222272227177777722 +333333331111111111111111111100111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCCC11001111111122222272221117777722 +33333233111111111111111111110001CCCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC10001111111122222272227177777722 +33333232211111111111111111111000CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC00011111111122222222227777277722 +333322222211111111111111111111000CCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCC000111111111772222222227777227722 +333322232221111111111111111111100CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC001111111111227721272227777227722 +3333223332211111111111111111111000CCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCC0001111111111222211122227777227722 +33332223222111111111111111111111000CC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCC00011111111111122221222227777227722 +33332222222111111111111111111111100C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00111111111111112222722227777222722 +333322222221111111111111100000111000003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCC000111111111111111111272227777722222 +23322222211111111111111100000001110000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCC0001111111111111111111127227777772222 +23322222111111111111111100777000111000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000011111111111111111111117227777772722 +2332222111111111111111110007770011110003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111111727777772222 +2332222111111111111111111000770011111003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111727777772222 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111727777772222 +2322222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111727777772222 +2322222211111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111112722777772222 +2222222221111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111122722777772222 +2222222222222111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122722777772222 +2322222222222211111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111127222777772222 +2222222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111227222777772222 +2222222222222221110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011112222277222277772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001122222777722227722222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122227227222227722222 +2222222222222331100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000112272222222227722222 +2222222222233211000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700111722222112227722222 +2222222222322210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111122221111227722222 +2222222223222210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111112221111227722222 +2222122232222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112222112222722222 +2221112322220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111111222222222722222 +2222123222200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222232222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001122222222222222 +2222322222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22223222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222722 +2223232222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700112222272222222 +222333322200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +222323222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +223222222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222122 +2232222222220001110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222222221112 +2232222222222211110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222222122 +223222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222222 +22322222222221111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222222 +223222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001117222222222222 +22322222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111122722222222222 +22322222222211111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122272222222222 +22322222221111111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122272222222222 +22232222211111111100H000000H00H00000H00000070011100HH00CCCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111222272222222222 +222322221111111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222272222222222 +222322221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC000000000CCCCCCCCCC00H00CC000000C00HHH000111111000111111111111111111112222722222272222 +222232221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCC00000000CCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111112227222222777222 +222232221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CC000011110000CCCCCCCC000CCCCCCCCCCC00H0011111111111111111111111111111177772222222272222 +222223222111111111111111100000111111111111111111000HH00CCCCCCCCCCCC00700C00001111110000CCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111222222222222222222 +2222223222111111111111111100011111111111111111110000000CCCCCCCCCCCC0000000011111111110000CCCCCCCCCCCCCCCCCCCC000111111111111111111111111111112222222222222222222 +222222232222211111111111111111111111111111111111000000CCCCCCCCCCCCCC00000011111111111100000CCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222222322221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222222232222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022111111111111111111111112222222222222222222222 +2222222222322211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222233221111111111111111111111111111111100CCCCCCCCCCCCCC0000211111111111111111121111110000CCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222222333111111111111111111111111111111100CCCCCCCCCCCCC000022211111111111111112221111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222222111111111111111111111111111111100CCCCCCCCCCC0000222222111111111111112222211111120000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222221112222222211111111111111111111111111111100CCCCCCCCCC000022222222211111111111222222211112220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222221222222222211111111111111111111111111111000CCCCCCC0000222222222222211111111000000222220000000000CCCC00002222211111111111111111122222222221112222222222222 +222222222222222222211111111111111111111111111111000CCC0000000222000000222221111110000000022200000000000000000222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111000000000000020000000022221111100077770002000777700000000002222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111100000777770000077770002222111000772277000007722770077700022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120007722777000772277001222111007727777700007277770772770001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200077277777700727777002222220007277777770007277777727777002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200772777777700727777002212220077777077770007777777777777002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100777777777700777777002212220077770077777007777777777770002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100777777777700777777000111100077777777777007077777777770021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777777000777777700000200777777777777000077777777700022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777777000777777770000000777777777777000077777777700121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777707000777777777770000777777777777700007777770700222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777007000077777777777007777777777777700007777770000121212121212121212121212121212121212121212121212121212 +212221222122212221222122212221222122212221222122210077777700000007777777777HH077777H07777777000777777H0001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200777777007000077777777HHHH07777HH0707777H00077777H00012121212121212121212121212121212121212121212121212121212 +222122212221222122212221222122212221222122212221220077777HH000000777777HHHHH0077HHHH00077HHH000777HHH00122212221222122212221222122212221222122212221222122212221 +12121212121212121212121212121212121212121212121212000777HHH00010007HHHHHHHHH000HHH0H0000HHH0000HHHHHH00212121212121212121212121212121212121212121212121212121212 +21212121212121212121212121212121212121212121212121200HHHHH00012100HHHHH0HH0H0000H0000000HH000000HHHH000121212121212121212121212121212121212121212121212121212121 +121212121212121212121212121212121212121212121212121000HH0H00121200H0H000H000000000000200H0001200H0H0001212121212121212121212121212121212121212121212121212121212 +212121212121212121212121212121212121212121212121212100H00000212100H00000H00001200021210000012100H000012121212121212121212121212121212121212121212121212121212121 +111211121112111211121112111211121112111211121112111200H00002111200000000000211121112111000121100H000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +121112111211121112111211121112111211121112111211121110001211121112111211121112111211121112111200H001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333332222223333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333330000003111111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322233000000000011111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222777727777777777777777777777 +3333333333333322230000333300001111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222222000000007777777777777777777 +3333333333333222200033322333000111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000077777700027777777777777777 +3333333333333222003399333333300011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112007777222770007777777777777777 +3333333233333222003000933333330011111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111111222222111111111111111111111111111111111111122227222111111111111111111111100000777777700777777777777777 +3333333223333233200000093333333001111111111111111111111111222222111111111111111111111111111111111000022222221111111111111111111111122000077777700077777777777777 +33333332233332333222100933333330001111111111111111111111111222200011111111111111111111111111111100000022222111111111111111111100000000007777777H0077777777777777 +33333332233332232222100933333333001111111111111111111111111222000001111111111111111111111111110000330002221111111111111111110000000000777777777H0077777777777777 +33333332113331112221100993333333001111111111111111111111111220003000111111111111111111111111100003333002211111111111111111100007777777777777777H0077777777777777 +3333333111131111122100099333333300011111111111111111111111122003330011111111111111111111111100030033300221111111111111111100077777777777777777HH0077777777777777 +2333333111131111122100999333333330000111111111111111111111111003300011111111111111111111111100333003000111111111111111111000777777777777777777HH0077727777777777 +2333333211331111122100999333333333000011111111111111111111111003300000111111111111111111111100030003001111111111111111110007777777777777777777H00077727777777777 +233333322333311122210099933333333333000111111111111111111111100090000001111000001100000000111003000300111111111111111111007777777777777777777HH00777727777777777 +23333332233332222221009993333333333330011111110001111100000001000000900010000000000000000000000000000000011111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111100000111000000000100009990000009990000999909000000000000000000111111111111000FF77777777777777777HH00777727777777777 +23333332223322222222009993333333333FFF00000100030001000999990000099999900099999990999999990999999000999900001111111110000FF77777777777777777HH000777727777777777 +233333332233211111220099993333333333FF00000000333000009929999000999999930992292990999999300922292999999999000111111100001FFF77F777777777777HHH002777727777777777 +33333333222311111112009999333333333FF11111000033000009929999000099993330992999933099999333092999999999999990011111100011111FF7FF7777777777HHHH002777777777777777 +33333333222111111111000999933333FFFF111111100030000009299999000999933390929993333009993333099299999993333330001110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322111111111110099999933FFFF11111CCCC003000009929993300099933330992993333300993333390929999333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777772 +333333332111111111111000999999FFFF1111CCCCCC0030009999993330009999333909299933309009933333309299933333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777722 +3333333311111111111111000999F99FF1111CCCCCCC00000999999333300099933399099993333090099333333099993333330300300000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCC111FF7FHHHH000077222777727777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111FFFF000001177222277227777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111F000000011172222272227177777722 +333333331111111111111111111000111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCC111000011111122222272221117777722 +333332331111111111111111111100111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC11001111111122222272227177777722 +33333232211111111111111111110001CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC10001111111122222222227777277722 +33332222221111111111111111111000CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC00011111111772222222227777227722 +333322232221111111111111111111000CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC000111111111227721272227777227722 +333322333221111111111111111111100CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC001111111111222211122227777227722 +3333222322211111111111111111111000CCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCC0001111111111122221222227777227722 +33332222222111111111111111111111000C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00011111111111112222722227777222722 +33332222222111111111111110000011100C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00111111111111111111272227777722222 +23322222211111111111111100000001100000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCC000111111111111111111127227777772222 +23322222111111111111111100777000110000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000001111111111111111111117227777772722 +2332222111111111111111110007770011100003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111111727777772222 +2332222111111111111111111000770011110003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111727777772222 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111727777772222 +2322222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111727777772222 +2322222211111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111112722777772222 +2222222221111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111122722777772222 +2222222222222111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122722777772222 +2322222222222211111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111127222777772222 +2222222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111227222777772222 +2222222222222221110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011112222277222277772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001122222777722227722222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122227227222227722222 +2222222222222331100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000112272222222227722222 +2222222222233211000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700111722222112227722222 +2222222222322210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111122221111227722222 +2222222223222210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111112221111227722222 +2222122232222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112222112222722222 +2221112322220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111111222222222722222 +2222123222200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222232222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001122222222222222 +2222322222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22223222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222722 +2223232222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700112222272222222 +222333322200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +222323222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +223222222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222122 +2232222222220001110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222222221112 +2232222222222211110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222222122 +223222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222222 +22322222222221111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222222 +223222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001117222222222222 +22322222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111122722222222222 +22322222222211111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122272222222222 +22322222221111111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122272222222222 +22232222211111111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111222272222222222 +222322221111111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222272222222222 +222322221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111112222722222272222 +222232221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCC000000CCCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111112227222222777222 +222232221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111177772222222272222 +222223222111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111222222222222222222 +2222223222111111111111111100011111111111111111110000000CCCCCCCCCCCC00000C00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111112222222222222222222 +222222232222211111111111111111111111111111111111000000CCCCCCCCCCCCCC000000011111111110000CCCCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222222322221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222222232222111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00222111111111111111111111112222222222222222222222 +22222222223222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022221111111111111111111222222222222222222222222 +2222222222233221111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111211110000CCCCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222222333111111111111111111111111111111100CCCCCCCCCCCCCC0000221111111111111111222111110000CCCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222222111111111111111111111111111111100CCCCCCCCCCCCC000022221111111111111122222111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222221112222222211111111111111111111111111111100CCCCCCCCCCC0000222222221111111111122222221111220000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222222221111111111111111111111111111100CCCCCCCCCC000022222222222111111110000002222200000000CCCCCCC0000222211111111111111111122222222221112222222222222 +22222222222222222221111111111111111111111111111000CCCC000000022200000022222111111000000002220000000000000CC00002222211111111111111111122222222222222222222222222 +222222222222222222222111111111111111111111111111000CC00000000020000000022221111100077770002000777700000000000222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111000000777770000077770002222111000772277000007722770077700002222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111100007722777000772277001222111007727777700007277770772770001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200077277777700727777002222220007277777770007277777727777002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200772777777700727777002212220077777077770007777777777777002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100777777777700777777002212220077770077777007777777777770002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100777777777700777777000111100077777777777007077777777770021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777777000777777700000200777777777777000077777777700022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777777000777777770000000777777777777000077777777700121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777707000777777777770000777777777777700007777770700222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777007000077777777777007777777777777700007777770000121212121212121212121212121212121212121212121212121212 +212221222122212221222122212221222122212221222122210077777700000007777777777HH077777H07777777000777777H0001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200777777007000077777777HHHH07777HH0707777H00077777H00012121212121212121212121212121212121212121212121212121212 +222122212221222122212221222122212221222122212221220077777HH000000777777HHHHH0077HHHH00077HHH000777HHH00122212221222122212221222122212221222122212221222122212221 +12121212121212121212121212121212121212121212121212000777HHH00010007HHHHHHHHH000HHH0H0000HHH0000HHHHHH00212121212121212121212121212121212121212121212121212121212 +21212121212121212121212121212121212121212121212121200HHHHH00012100HHHHH0HH0H0000H0000000HH000000HHHH000121212121212121212121212121212121212121212121212121212121 +121212121212121212121212121212121212121212121212121000HH0H00121200H0H000H000000000000200H0001200H0H0001212121212121212121212121212121212121212121212121212121212 +212121212121212121212121212121212121212121212121212100H00000212100H00000H00001200021210000012100H000012121212121212121212121212121212121212121212121212121212121 +111211121112111211121112111211121112111211121112111200H00002111200000000000211121112111000121100H000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +121112111211121112111211121112111211121112111211121110001211121112111211121112111211121112111200H001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333332222223333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333330000003111111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322233000000000011111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222777727777777777777777777777 +3333333333333322230000333300001111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222222000000007777777777777777777 +3333333333333222200033322333000111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000077777700027777777777777777 +3333333333333222003399333333300011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112007777222770007777777777777777 +3333333233333222003000933333330011111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111111222222111111111111111111111111111111111000022227222111111111111111111111100000777777700777777777777777 +3333333223333233200000093333333001111111111111111111111111222220001111111111111111111111111111110000002222221111111111111111111111122000077777700077777777777777 +33333332233332333222100933333330001111111111111111111111111222000001111111111111111111111111110000330002222111111111111111111100000000007777777H0077777777777777 +33333332233332232222100933333333001111111111111111111111111220003000111111111111111111111111100003333002221111111111111111110000000000777777777H0077777777777777 +33333332113331112221100993333333001111111111111111111111111220033300111111111111111111111111000300333002211111111111111111100007777777777777777H0077777777777777 +3333333111131111122100099333333300011111111111111111111111122003300011111111111111111111111100333003000221111111111111111100077777777777777777HH0077777777777777 +2333333111131111122100999333333330000111111111111111111111111003300000111111111111111111111100030003001111111111111111111000777777777777777777HH0077727777777777 +2333333211331111122100999333333333000011111111111111111111111000900000011110000011000000001110030003001111111111111111110007777777777777777777H00077727777777777 +233333322333311122210099933333333333000111111100011111000000010000009000100000000000000000000000000000000111111111111111007777777777777777777HH00777727777777777 +23333332233332222221009993333333333330011111100000111000000000100009990000009990000999909000000000000000000111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111000300010009999900000999999000999999909999999909999990009999000011111111111000FF77777777777777777HH00777727777777777 +23333332223322222222009993333333333FFF00000100333000009929999000999999930992292990999999300922292999999999000111111110000FF77777777777777777HH000777727777777777 +233333332233211111220099993333333333FF00000000330000099299990000999933309929999330999993330929999999999999900111111100001FFF77F777777777777HHH002777727777777777 +33333333222311111112009999333333333FF11111000030000009299999000999933390929993333009993333099299999993333330001111100011111FF7FF7777777777HHHH002777777777777777 +33333333222111111111000999933333FFFF111111100030000099299933000999333309929933333009933333909299993333333333001110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322111111111110099999933FFFF11111CCCC003000999999333000999933390929993330900993333330929993333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777772 +333333332111111111111000999999FFFF1111CCCCCC0000099999933330009993339909999333309009933333309999333333030030000000CCCCCCCCC111FFF777HHHHHHH000222777777777777722 +3333333311111111111111000999F99FF1111CCCCCCCC0000099993333330099333390999933333000099333333009993333000000900000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCC111FF7FHHHH000077222777727777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111FFFF000001177222277227777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCC111F000000011172222272227177777722 +333333331111111111111111111000111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCC111000011111122222272221117777722 +333332331111111111111111111100111CCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC11001111111122222272227177777722 +33333232211111111111111111110001CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC10001111111122222222227777277722 +33332222221111111111111111111000CCCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCCC00011111111772222222227777227722 +333322232221111111111111111111000CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC000111111111227721272227777227722 +333322333221111111111111111111100CCCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCCC001111111111222211122227777227722 +3333222322211111111111111111111000CC0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCCC0001111111111122221222227777227722 +33332222222111111111111110000011000C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00011111111111112222722227777222722 +33332222222111111111111100000001100C00033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCCC00111111111111111111272227777722222 +233222222111111111111111007770001000C0030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000000111111111111111111127227777772222 +2332222211111111111111110007770011000003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111117227777772722 +2332222111111111111111111000770011100003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111727777772222 +2332222111111111111111111100700011110003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111727777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111727777772222 +2322222111111111111111111100700111111000000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111727777772222 +2322222211111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111112722777772222 +2222222221111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122722777772222 +2222222222222111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122722777772222 +2322222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111127222777772222 +2222222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111227222777772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001112222277222277772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122222777722227722222 +2222222222222221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122227227222227722222 +2222222222222331000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700112272222222227722222 +2222222222233210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111722222112227722222 +2222222222322210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111122221111227722222 +2222222223222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112221111227722222 +2222122232220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112222112222722222 +2221112322200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222123222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222232222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22223222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2222322222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222722 +222323222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +222333322220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +222323222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2232222222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222122 +2232222222222221110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222221112 +223222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222122 +22322222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222222 +223222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112222222222222 +22322222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111117222222222222 +22322222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122722222222222 +22322222222211111100H000H0HH00H00H00H00HHHHH0001000HH000000000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122272222222222 +22322222221111111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122272222222222 +222322222111111111000000000H00000000000000070011100HH000CCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222272222222222 +222322221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111111222272222222222 +222322221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCCC000CCCCCCCCCCCC00000CCCC000C0000H0001111111111111111111111111111112222722222272222 +222232221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCCC000000CCCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111112227222222777222 +222232221111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCCCCCCCCCCCCCCC00000011111111111111111111111111111177772222222272222 +2222232221111111111111111100011111111111111111111000000CCCCCCCCCCCC00000CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000111111111111111111111111111111222222222222222222 +222222322211111111111111111111111111111111111111000000CCCCCCCCCCCCCC000CC00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111112222222222222222222 +22222223222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCCCC000011111111110000CCCCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222222322221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222222232222111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00222111111111111111111111112222222222222222222222 +22222222223222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022221111111111111111111222222222222222222222222 +2222222222233221111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111211110000CCCCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222222333111111111111111111111111111111100CCCCCCCCCCCCCC0000221111111111111111222111110000CCCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222222111111111111111111111111111111100CCCCCCCCCCCCC000022221111111111111122222111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222221112222222211111111111111111111111111111100CCCCCCCCCCC0000222222221111111111122222221111220000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222222221111111111111111111111111111100CCCCCCCCCC000022222222222111111110000002222200000000CCCCCCC0000222211111111111111111122222222221112222222222222 +22222222222222222221111111111111111111111111111000CCCC000000022200000022222111111000000002220000000000000CC00002222211111111111111111122222222222222222222222222 +222222222222222222222111111111111111111111111111000CC00000000020000000022221111100099990002000999900000000000222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111000000999990000099990002222111000992299000009922990099900002222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111100009922999000992299001222111009929999900009299330992330001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200099293333300929933002222220009299333330009233333323333002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200992333333300923333002212220099933033330009933333333333002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100993333333300933333002212220099330033333009333333333330002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100993333333300933333000111100093333333333009033333333330021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200933333333000333333300000200993333333333000033333333300022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200933333333000333333330000000933333333333000033333333300121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200333333303000333333333990000333333333333300003333330300222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200333333003000033333333333003333333333333300003333330000121212121212121212121212121212121212121212121212121212 +2122212221222122212221222122212221222122212221222100333333000000033333333333303333330333333300033333330001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200333333003000033333333333303333330303333300033333300012121212121212121212121212121212121212121212121212121212 +2221222122212221222122212221222122212221222122212200333333300000033333333333003333330003333300033333300122212221222122212221222122212221222122212221222122212221 +1212121212121212121212121212121212121212121212121200033333300010003333333333000333030000333000033333300212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212120033333000121003333303303000030000000330000003333000121212121212121212121212121212121212121212121212121212121 +1212121212121212121212121212121212121212121212121210003303001212003030003000000000000200300012003030001212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212121003000002121003000003000012000212100000121003000012121212121212121212121212121212121212121212121212121212121 +1112111211121112111211121112111211121112111211121112003000021112000000000002111211121110001211003000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1211121112111211121112111211121112111211121112111211100012111211121112111211121112111211121112003001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333330000003333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333000000000011111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322230000333300001111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122007777222770007777777777777777 +3333333333333222003000933333330011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111112222222211111111111111111111111111111111000022222222221111112211111111111200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111111222220001111111111111111111111111111110000002227222111111111111111111111122000077777700077777777777777 +33333332233332332222100933333330001111111111111111111111112222000001111111111111111111111111110000330002222211111111111111111100000000007777777H0077777777777777 +33333332233332333222100933333333001111111111111111111111111220003000111111111111111111111111100003333002222111111111111111110000000000777777777H0077777777777777 +33333332233332232222100993333333001111111111111111111111111220033300111111111111111111111111000300333002221111111111111111100007777777777777777H0077777777777777 +3333333211333111222100099333333300011111111111111111111111122003300011111111111111111111111100333003000221111111111111111100077777777777777777HH0077777777777777 +3333333111131111122100999333333330000111111111111111111111122003300000111111111111111111111100030003001221111111111111111000777777777777777777HH0077777777777777 +2333333111131111122100999333333333000011111111111111111111111000900000011110000011000000001110030003001111111111111111110007777777777777777777H00077727777777777 +233333321133111112210099933333333333000111111100011111000000010000009000100000000000000000000000000000000111111111111111007777777777777777777HH00777727777777777 +23333332233331112221009993333333333330011111100000111000000000100009990000009990000999909000000000000000000111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111000300010009999900000999999000999999909999999909999990009999000011111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000100333000009929999000999999930992292990999999300922292999999999000111111110000FF77777777777777777HH000777727777777777 +233333322233222222220099993333333333FF00000000330000099299990000999933309929999330999993330929999999999999900111111100001FFF77F777777777777HHH002777727777777777 +23333333223321111122009999333333333FF11111000030000009299999000999933390929993333009993333099299999993333330001111100011111FF7FF7777777777HHHH002777727777777777 +33333333222311111112000999933333FFFF111111100030000099299933000999333309929933333009933333909299993333333333001110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322211111111120099999933FFFF11111CCCC003000999999333000999933390929993330900993333330929993333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332211111111111000999999FFFF1111CCCCCC0000099999933330009993339909999333309009933333309999333333030030000000CCCCCCCCC111FFF777HHHHHHH000222777777777777772 +3333333321111111111111000999F99FF1111CCCCCCCC0000099993333330099333390999933333000099333333009993333000000900000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111FFFF000001177222777727777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCC111F000000011177222277227777777722 +333333331111111111111111111000111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCC111000011111172222272227177777722 +333333331111111111111111111100111CCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC11001111111122222272221117777722 +33333233111111111111111111110001CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC10001111111122222272227177777722 +33333232211111111111111111111000CCCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCCC00011111111122222222227777277722 +333322222211111111111111111111000CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC000111111111772222222227777227722 +333322232221111111111111111111100CCCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCCC001111111111227721272227777227722 +3333223332211111111111111111111000CC0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCCC0001111111111222211122227777227722 +33332223222111111111111110000011000C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00011111111111122221222227777227722 +33332222222111111111111100000001100C00033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCCC00111111111111112222722227777222722 +333322222221111111111111007770001000C0030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000000111111111111111111272227777722222 +2332222221111111111111110007770011000003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111127227777772222 +2332222211111111111111111000770011100003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111117227777772722 +2332222111111111111111111100700011110003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111727777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111727777772222 +2332222111111111111111111100700111111000000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111727777772222 +2322222111111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111111727777772222 +2322222211111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111112722777772222 +2222222221111111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122722777772222 +2222222222222111111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111122722777772222 +2322222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111127222777772222 +2222222222222211110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001111111227222777772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001112222277222277772222 +2222222222222221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122222777722227722222 +2222222222222221000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700122227227222227722222 +2222222222222330007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000112272222222227722222 +2222222222233210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111722222112227722222 +2222222222322210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111122221111227722222 +2222222223220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112221111227722222 +2222122232200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000012222112222722222 +2221112322000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222123222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000222222222722222 +22222322220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2222322222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222222 +222232222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700122222222222722 +222323222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +222333322220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2223232222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222222 +2232222222222222110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222272222122 +223222222222222111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222221112 +22322222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222122 +223222222222221111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112222222222222 +22322222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111112222222222222 +22322222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111117222222222222 +22322222222221111100H000H0HH00H00H00H00HHHHH0001000HH000000000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122722222222222 +22322222222211111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122272222222222 +223222222211111111000000000H00000000000000070011100HH000CCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111122272222222222 +222322222111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111111222272222222222 +222322221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCCC000CCCCCCCCCCCC00000CCCC000C0000H0001111111111111111111111111111111222272222222222 +222322221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCCC000000CCCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111112222722222272222 +222232221111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCCCCCCCCCCCCCCC00000011111111111111111111111111111112227222222777222 +2222322211111111111111111100011111111111111111111000000CCCCCCCCCCCC00000CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000111111111111111111111111111111177772222222272222 +222223222111111111111111111111111111111111111111000000CCCCCCCCCCCCCC000CC00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111111222222222222222222 +22222232221111111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCCCC000011111111110000CCCCCCCCCCCCCCCCCCCCC00111111111111111111111111111112222222222222222222 +22222223222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222222322221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222222232222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022111111111111111111111112222222222222222222222 +2222222222322211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222233221111111111111111111111111111111100CCCCCCCCCCCCCC0000211111111111111111121111110000CCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222222333111111111111111111111111111111100CCCCCCCCCCCCC000022211111111111111112221111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222222111111111111111111111111111111100CCCCCCCCCCC0000222222111111111111112222211111120000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222221112222222211111111111111111111111111111100CCCCCCCCCC000022222222211111111111222222211112220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222221222222222211111111111111111111111111111000CCCCCCC0000222222222222211111111000000222220000000000CCCC00002222211111111111111111122222222221112222222222222 +222222222222222222211111111111111111111111111111000CCC0000000222000000222221111110000000022200000000000000000222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111000000000000020000000022221111100099990002000999900000000002222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111100000999990000099990002222111000992299000009922990099900022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120009922999000992299001222111009929999900009299330992330001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200099293333300929933002222220009299333330009233333323333002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200992333333300923333002212220099933033330009933333333333002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100993333333300933333002212220099330033333009333333333330002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100993333333300933333000111100093333333333009033333333330021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200933333333000333333300000200993333333333000033333333300022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200933333333000333333330000000933333333333000033333333300121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200333333303000333333333990000333333333333300003333330300222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200333333003000033333333333003333333333333300003333330000121212121212121212121212121212121212121212121212121212 +2122212221222122212221222122212221222122212221222100333333000000033333333333303333330333333300033333330001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200333333003000033333333333303333330303333300033333300012121212121212121212121212121212121212121212121212121212 +2221222122212221222122212221222122212221222122212200333333300000033333333333003333330003333300033333300122212221222122212221222122212221222122212221222122212221 +1212121212121212121212121212121212121212121212121200033333300010003333333333000333030000333000033333300212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212120033333000121003333303303000030000000330000003333000121212121212121212121212121212121212121212121212121212121 +1212121212121212121212121212121212121212121212121210003303001212003030003000000000000200300012003030001212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212121003000002121003000003000012000212100000121003000012121212121212121212121212121212121212121212121212121212121 +1112111211121112111211121112111211121112111211121112003000021112000000000002111211121110001211003000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1211121112111211121112111211121112111211121112111211100012111211121112111211121112111211121112003001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333330000003333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333000000000033111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322330000333300001111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222200000000000777777777777777777 +3333333333333322000333233333300111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222007777222770007777777777777777 +3333333333333222003000933333330011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000007777277000777777777777777 +3333333333333222000000933333330001111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111112222222211111111111111111111111111111111000022222222221111112211111111111222000077777700077777777777777 +33333332333332222222200933333330001111111111111111111111112222200011111111111111111111111111111100000022272221111111111111111100000000007777777H0077777777777777 +33333332233332332222100933333333001111111111111111111111112222000001111111111111111111111111110000330002222211111111111111110000000000777777777H0077777777777777 +33333332233332333222100993333333001111111111111111111111111220003000111111111111111111111111100003333002222111111111111111100007777777777777777H0077777777777777 +3333333223333223222200099333333300011111111111111111111111122003330011111111111111111111111100030033300222111111111111111100077777777777777777HH0077777777777777 +3333333211333111222100999333333330000111111111111111111111122003300011111111111111111111111100333003000221111111111111111000777777777777777777HH0077777777777777 +3333333111131111122100999333333333000011111111111111111111122003300000111111111111111111111100030003001221111111111111110007777777777777777777H00077777777777777 +233333311113111112210099933333333333000111111111111111111111100090000001111000001100000000111003000300111111111111111111007777777777777777777HH00777727777777777 +23333332113311111221009993333333333330011111110001111100000001000000900010000000000000000000000000000000011111111111111100F777777777777777777HH00777727777777777 +23333332233331112221009993333333333330001111100000111000000000100009990000009990000999909000000000000000000111111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000100030001000999990000099999900099999990999999990999999000999900001111111110000FF77777777777777777HH000777727777777777 +233333322333322222210099993333333333FF00000000333000009929999000999999930992292990999999300922292999999999000111111100001FFF77F777777777777HHH002777727777777777 +23333332223322222222009999333333333FF11111000033000009929999000099993330992999933099999333092999999999999990011111100011111FF7FF7777777777HHHH002777727777777777 +23333333223321111122000999933333FFFF111111100030000009299999000999933390929993333009993333099299999993333330001110000CC11111FFFF77777777HHHHH0002777727777777777 +3333333322231111111210099999933FFFF11111CCCC003000009929993300099933330992993333300993333390929999333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332221111111112000999999FFFF1111CCCCCC0030009999993330009999333909299933309009933333309299933333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777777 +3333333322111111111111000999F99FF1111CCCCCCC00000999999333300099933399099993333090099333333099993333330300300000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777772 +3333333321111111111111100099FFFF1111CCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111FFFF000001277222777777777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111F000000011177222777727777777722 +333333331111111111111111111000111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCC111000011111177222277227777777722 +333333331111111111111111111100111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC11001111111172222272227177777722 +33333333111111111111111111110001CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC10001111111122222272221117777722 +33333233111111111111111111111000CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC00011111111122222272227177777722 +333332322111111111111111111111000CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC000111111111122222222227777277722 +333322222211111111111111111111100CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC001111111111772222222227777227722 +3333222322211111111111111111111000CCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCC0001111111111227721272227777227722 +33332233322111111111111111111111000C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00011111111111222211122227777227722 +33332223222111111111111110000011100C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00111111111111122221222227777227722 +33332222222111111111111100000001100000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCC000111111111111112222722227777222722 +33332222222111111111111100777000110000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000001111111111111111111272227777722222 +2332222221111111111111110007770011100003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111127227777772222 +2332222211111111111111111000770011110003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111117227777772722 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111727777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111727777772222 +2332222111111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111727777772222 +2322222111111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111111727777772222 +2322222211111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111112722777772222 +2222222221111111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122722777772222 +2222222222222111111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111122722777772222 +2322222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111127222777772222 +2222222222222211110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001111111227222777772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001112222277222277772222 +2222222222222221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122222777722227722222 +2222222222222221000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700122227227222227722222 +2222222222222330007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000112272222222227722222 +2222222222233210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111722222112227722222 +2222222222322210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111122221111227722222 +2222222223220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112221111227722222 +2222122232200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000012222112222722222 +2221112322000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222123222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000222222222722222 +22222322220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2222322222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222222 +222232222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700122222222222722 +222323222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +222333322220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2223232222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222222 +2232222222222222110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222272222122 +223222222222222111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222221112 +22322222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222122 +223222222222221111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112222222222222 +22322222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111112222222222222 +22322222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111117222222222222 +22322222222221111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122722222222222 +22322222222211111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122272222222222 +223222222211111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111122272222222222 +222322222111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111111222272222222222 +222322221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCC000000CCCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111111222272222222222 +222322221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111112222722222272222 +222232221111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111112227222222777222 +2222322211111111111111111100011111111111111111110000000CCCCCCCCCCCC00000C00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111111177772222222272222 +222223222111111111111111111111111111111111111111000000CCCCCCCCCCCCCC000000011111111110000CCCCCCCCCCCCCCCCCCCCC00111111111111111111111111111111222222222222222222 +22222232221111111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00111111111111111111111111111112222222222222222222 +22222223222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222222322221111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00021111111111111111111111111222222222222222222222 +2222222223222211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022111111111111111111111112222222222222222222222 +2222222222322211111111111111111111111111111111100CCCCCCCCCCCCCC0000111111111111111111111111110000CCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222233221111111111111111111111111111111100CCCCCCCCCCCCC000022111111111111111111211111110000CCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222222333111111111111111111111111111111100CCCCCCCCCCC0000222221111111111111111222111111110000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222222111111111111111111111111111111100CCCCCCCCCC000022222221111111111111122222111111220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222211122222222111111111111111111111111111111000CCCCCCC0000222222222221111111111122222221111222220000CCCC00002222211111111111111111112222222211111222222222222 +222222212222222222111111111111111111111111111111000CCCC000002222222222222211111111000000222220000002000000000222222211111111111111111122222222221112222222222222 +2222222222222222222111111111111111111111111111111000000000000222000000222221111110000000022200000000000000002222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111100000000000020000000022221111100077770002000777700000000222222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111112000777770000077770002222111000772277000007722770077700022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120007722777000772277001222111007727777700007277770772770001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200077277777700727777002222220007277777770007277777727777002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200772777777700727777002212220077777077770007777777777777002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100777777777700777777002212220077770077777007777777777770002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100777777777700777777000111100077777777777007077777777770021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777777000777777700000200777777777777000077777777700022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777777000777777770000000777777777777000077777777700121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777707000777777777770000777777777777700007777770700222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777007000077777777777007777777777777700007777770000121212121212121212121212121212121212121212121212121212 +212221222122212221222122212221222122212221222122210077777700000007777777777HH077777H07777777000777777H0001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200777777007000077777777HHHH07777HH0707777H00077777H00012121212121212121212121212121212121212121212121212121212 +222122212221222122212221222122212221222122212221220077777HH000000777777HHHHH0077HHHH00077HHH000777HHH00122212221222122212221222122212221222122212221222122212221 +12121212121212121212121212121212121212121212121212000777HHH00010007HHHHHHHHH000HHH0H0000HHH0000HHHHHH00212121212121212121212121212121212121212121212121212121212 +21212121212121212121212121212121212121212121212121200HHHHH00012100HHHHH0HH0H0000H0000000HH000000HHHH000121212121212121212121212121212121212121212121212121212121 +121212121212121212121212121212121212121212121212121000HH0H00121200H0H000H000000000000200H0001200H0H0001212121212121212121212121212121212121212121212121212121212 +212121212121212121212121212121212121212121212121212100H00000212100H00000H00001200021210000012100H000012121212121212121212121212121212121212121212121212121212121 +111211121112111211121112111211121112111211121112111200H00002111200000000000211121112111000121100H000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +121112111211121112111211121112111211121112111211121110001211121112111211121112111211121112111200H001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333330000003333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333000000000033111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322330000333300001111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222200000000000777777777777777777 +3333333333333322000333233333300111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222007777222770007777777777777777 +3333333333333222003000933333330011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000007777277000777777777777777 +3333333333333222000000933333330001111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111222000077777700077777777777777 +33333332333332222222200933333330001111111111111111111111112222221111111111111111111111111111111110000222272221111111111111111100000000007777777H0077777777777777 +33333332233332332222100933333333001111111111111111111111112222200011111111111111111111111111111100000022222211111111111111110000000000777777777H0077777777777777 +33333332233332333222100993333333001111111111111111111111111222000001111111111111111111111111110000330002222111111111111111100007777777777777777H0077777777777777 +3333333223333223222200099333333300011111111111111111111111122000300011111111111111111111111110000333300222111111111111111100077777777777777777HH0077777777777777 +3333333211333111222100999333333330000111111111111111111111122003330011111111111111111111111100030033300221111111111111111000777777777777777777HH0077777777777777 +3333333111131111122100999333333333000011111111111111111111122003300011111111111111111111111100333003000221111111111111110007777777777777777777H00077777777777777 +233333311113111112210099933333333333000111111111111111111111100330000011111111111111111111110003000300111111111111111111007777777777777777777HH00777727777777777 +23333332113311111221009993333333333330011111111111111111111110009000000111100000110000000011100300030011111111111111111100F777777777777777777HH00777727777777777 +23333332233331112221009993333333333330001111110001111100000001000000900010000000000000000000000000000000011111111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000110000011100000000010000999000000999000099990900000000000000000011111111110000FF77777777777777777HH000777727777777777 +233333322333322222210099993333333333FF00000000030001000999990000099999900099999990999999990999999000999900001111111100001FFF77F777777777777HHH002777727777777777 +23333332223322222222009999333333333FF11111000033300000992999900099999993099229299099999930092229299999999900011111100011111FF7FF7777777777HHHH002777727777777777 +23333333223321111122000999933333FFFF111111100033000009929999000099993330992999933099999333092999999999999990011110000CC11111FFFF77777777HHHHH0002777727777777777 +3333333322231111111210099999933FFFF11111CCCC003000000929999900099993339092999333300999333309929999999333333000100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332221111111112000999999FFFF1111CCCCCC0030000099299933000999333309929933333009933333909299993333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777777 +3333333322111111111111000999F99FF1111CCCCCCC00300099999933300099993339092999333090099333333092999333333333330000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777772 +3333333321111111111111100099FFFF1111CCCCCCCC0000099999933330009993339909999333309009933333309999333333030030000CCCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCCC111FFFF000001277222777777777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111F000000011177222777727777777722 +333333331111111111111111111000111CCCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCCC111000011111177222277227777777722 +333333331111111111111111111100111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCCC11001111111172222272227177777722 +33333333111111111111111111110001CCCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC10001111111122222272221117777722 +33333233111111111111111111111000CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC00011111111122222272227177777722 +333332322111111111111111111111000CCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCC000111111111122222222227777277722 +333322222211111111111111111111100CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC001111111111772222222227777227722 +3333222322211111111111111111111000CCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCC0001111111111227721272227777227722 +33332233322111111111111111111111000CC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCC00011111111111222211122227777227722 +33332223222111111111111111111111100C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00111111111111122221222227777227722 +333322222221111111111111100000111000003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCC000111111111111112222722227777222722 +33332222222111111111111100000001110000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCC0001111111111111111111272227777722222 +23322222211111111111111100777000111000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000011111111111111111111127227777772222 +2332222211111111111111110007770011110003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111117227777772722 +2332222111111111111111111000770011111003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111727777772222 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111727777772222 +2332222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111727777772222 +2322222111111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111111727777772222 +2322222211111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111112722777772222 +2222222221111111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122722777772222 +2222222222222111111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122722777772222 +2322222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111127222777772222 +2222222222222211110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011111111227222777772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001112222277222277772222 +2222222222222221100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122222777722227722222 +2222222222222221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000122227227222227722222 +2222222222222331000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700112272222222227722222 +2222222222233210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111722222112227722222 +2222222222322210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111122221111227722222 +2222222223222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112221111227722222 +2222122232220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111112222112222722222 +2221112322200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222123222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001222222222722222 +2222232222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22223222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222222 +2222322222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700122222222222722 +222323222200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +222333322220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +222323222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222222 +2232222222220002110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222272222122 +2232222222222221110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222221112 +223222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222122 +22322222222222111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000112222222222222 +223222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112222222222222 +22322222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111117222222222222 +22322222222221111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122722222222222 +22322222222211111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122272222222222 +22322222221111111100H000000H00H00000H00000070011100HH00CCCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111122272222222222 +222322222111111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222272222222222 +222322221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC000000000CCCCCCCCCC00H00CC000000C00HHH000111111000111111111111111111111222272222222222 +222322221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCC00000000CCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111112222722222272222 +222232221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CC000011110000CCCCCCCC000CCCCCCCCCCC00H0011111111111111111111111111111112227222222777222 +222232221111111111111111100000111111111111111111000HH00CCCCCCCCCCCC00700C00001111110000CCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111177772222222272222 +2222232221111111111111111100011111111111111111110000000CCCCCCCCCCCC0000000011111111110000CCCCCCCCCCCCCCCCCCCC000111111111111111111111111111111222222222222222222 +222222322211111111111111111111111111111111111111000000CCCCCCCCCCCCCC00000011111111111100000CCCCCCCCCCCCCCCCCCC00111111111111111111111111111112222222222222222222 +22222223222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222222322221111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00021111111111111111111111111222222222222222222222 +2222222223222211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022111111111111111111111112222222222222222222222 +2222222222322211111111111111111111111111111111100CCCCCCCCCCCCCC0000111111111111111111111111110000CCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222233221111111111111111111111111111111100CCCCCCCCCCCCC000022111111111111111111211111110000CCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222222333111111111111111111111111111111100CCCCCCCCCCC0000222221111111111111111222111111110000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222222111111111111111111111111111111100CCCCCCCCCC000022222221111111111111122222111111220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222211122222222111111111111111111111111111111000CCCCCCC0000222222222221111111111122222221111222220000CCCC00002222211111111111111111112222222211111222222222222 +222222212222222222111111111111111111111111111111000CCCC000002222222222222211111111000000222220000002000000000222222211111111111111111122222222221112222222222222 +2222222222222222222111111111111111111111111111111000000000000222000000222221111110000000022200000000000000002222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111100000000000020000000022221111100077770002000777700000000222222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111112000777770000077770002222111000772277000007722770077700022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120007722777000772277001222111007727777700007277770772770001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200077277777700727777002222220007277777770007277777727777002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200772777777700727777002212220077777077770007777777777777002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100777777777700777777002212220077770077777007777777777770002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100777777777700777777000111100077777777777007077777777770021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777777000777777700000200777777777777000077777777700022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777777000777777770000000777777777777000077777777700121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200777777707000777777777770000777777777777700007777770700222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200777777007000077777777777007777777777777700007777770000121212121212121212121212121212121212121212121212121212 +212221222122212221222122212221222122212221222122210077777700000007777777777HH077777H07777777000777777H0001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200777777007000077777777HHHH07777HH0707777H00077777H00012121212121212121212121212121212121212121212121212121212 +222122212221222122212221222122212221222122212221220077777HH000000777777HHHHH0077HHHH00077HHH000777HHH00122212221222122212221222122212221222122212221222122212221 +12121212121212121212121212121212121212121212121212000777HHH00010007HHHHHHHHH000HHH0H0000HHH0000HHHHHH00212121212121212121212121212121212121212121212121212121212 +21212121212121212121212121212121212121212121212121200HHHHH00012100HHHHH0HH0H0000H0000000HH000000HHHH000121212121212121212121212121212121212121212121212121212121 +121212121212121212121212121212121212121212121212121000HH0H00121200H0H000H000000000000200H0001200H0H0001212121212121212121212121212121212121212121212121212121212 +212121212121212121212121212121212121212121212121212100H00000212100H00000H00001200021210000012100H000012121212121212121212121212121212121212121212121212121212121 +111211121112111211121112111211121112111211121112111200H00002111200000000000211121112111000121100H000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +121112111211121112111211121112111211121112111211121110001211121112111211121112111211121112111200H001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333330000003333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333000000000011111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322230000333300001111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222000000007777777777777777777 +3333333333333322200033322333000111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222000077777700077777777777777777 +3333333333333222003399333333300011111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122007777222770007777777777777777 +3333333333333222003000933333330011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111200000777777700777777777777777 +3333333233333222200000093333333001111111111111111111111111222222111111111111111111111111111111111111122227222111111111111111111111122000077777700077777777777777 +33333332233332332222100933333330001111111111111111111111112222221111111111111111111111111111111110000222222211111111111111111100000000007777777H0077777777777777 +33333332233332333222100933333333001111111111111111111111111222200011111111111111111111111111111100000022222111111111111111110000000000777777777H0077777777777777 +33333332233332232222100993333333001111111111111111111111111222000001111111111111111111111111110000330002221111111111111111100007777777777777777H0077777777777777 +3333333211333111222100099333333300011111111111111111111111122000300011111111111111111111111110000333300221111111111111111100077777777777777777HH0077777777777777 +3333333111131111122100999333333330000111111111111111111111122003330011111111111111111111111100030033300221111111111111111000777777777777777777HH0077777777777777 +2333333111131111122100999333333333000011111111111111111111111003300011111111111111111111111100333003000111111111111111110007777777777777777777H00077727777777777 +233333321133111112210099933333333333000111111111111111111111100330000011111111111111111111110003000300111111111111111111007777777777777777777HH00777727777777777 +23333332233331112221009993333333333330011111111111111111111110009000000111100000110000000011100300030011111111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111110001111100000001000000900010000000000000000000000000000000011111111111111000FF77777777777777777HH00777727777777777 +23333332233332222221009993333333333FFF00000110000011100000000010000999000000999000099990900000000000000000011111111110000FF77777777777777777HH000777727777777777 +233333322233222222220099993333333333FF00000000030001000999990000099999900099999990999999990999999000999900001111111100001FFF77F777777777777HHH002777727777777777 +23333333223321111122009999333333333FF11111000033300000992999900099999993099229299099999930092229299999999900011111100011111FF7FF7777777777HHHH002777727777777777 +33333333222311111112000999933333FFFF111111100033000009929999000099993330992999933099999333092999999999999990011110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322211111111120099999933FFFF11111CCCC003000000929999900099993339092999333300999333309929999999333333000100000CCCCCC111FFF7777777HHHHH00022777777777777777 +333333332211111111111000999999FFFF1111CCCCCC0030000099299933000999333309929933333009933333909299993333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777772 +3333333321111111111111000999F99FF1111CCCCCCC00300099999933300099993339092999333090099333333092999333333333330000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCC0000099999933330009993339909999333309009933333309999333333030030000CCCCCCCCCCCCCC111FF7FHHHH000077222777777777777722 +3333333311111111111111110000FFF1111CCCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCCC111FFFF000001177222777727777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111F000000011177222277227777777722 +333333331111111111111111111000111CCCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCCC111000011111172222272227177777722 +333333331111111111111111111100111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCCC11001111111122222272221117777722 +33333233111111111111111111110001CCCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC10001111111122222272227177777722 +33333232211111111111111111111000CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC00011111111172222222227777277722 +333322222211111111111111111111000CCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCC000111111111227722222227777227722 +333322232221111111111111111111100CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC001111111111222271272227777227722 +3333223332211111111111111111111000CCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCC0001111111111222211122227777227722 +33332223222111111111111111111111000CC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCC00011111111111122221272227777227722 +33332222222111111111111111111111100C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00111111111111112222227227777222722 +333322222221111111111111100000111000003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCC000111111111111111111227227777722222 +23322222211111111111111100000001110000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCC0001111111111111111111122727777772222 +23322222111111111111111100777000111000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000011111111111111111111112727777772722 +2332222111111111111111110007770011110003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111111277777772222 +2332222111111111111111111000770011111003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111277777772222 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111277777772222 +2322222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111277777772222 +2322222211111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111112272777772222 +2222222221111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111122272777772222 +2222222222222111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122272777772222 +2322222222222211111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122722777772222 +2222222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111222722777772222 +2222222222222221110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011112222227222277772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001122222277722227722222 +2222222222222331100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122222277222227722222 +2222222222233221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000112222722222227722222 +2222222222322211000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700111277222112227722222 +2222222233222210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111122221111227722222 +2222222322222210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111112221111227722222 +2222123222222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112222112222722222 +2221112222220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111111222222222722222 +2222132222200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222322222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001122222222222222 +2223222222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22232222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222722 +2232232222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700112222272222222 +223233322200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +223223222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +232222222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222122 +2322222222220001110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222222221112 +2322222222222211110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222222122 +232222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222222 +23222222222221111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000117722222222222 +232222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112272222222222 +23222222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111122272222222222 +23222222222211111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122227222222222 +23222222221111111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122227222222222 +22322222211111111100H000000H00H00000H00000070011100HH00CCCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111222227222222222 +223222221111111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222227222222222 +223222221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC000000000CCCCCCCCCC00H00CC000000C00HHH000111111000111111111111111111112222272222272222 +222322221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCC00000000CCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111112222272222777222 +222322221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CC000011110000CCCCCCCC000CCCCCCCCCCC00H0011111111111111111111111111111122227722222272222 +222232222111111111111111100000111111111111111111000HH00CCCCCCCCCCCC00700C00001111110000CCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111277772222222222222 +2222232222111111111111111100011111111111111111110000000CCCCCCCCCCCC0000000011111111110000CCCCCCCCCCCCCCCCCCCC000111111111111111111111111111112222222222222222222 +222223222222211111111111111111111111111111111111000000CCCCCCCCCCCCCC00000011111111111100000CCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222232222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222223222222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022111111111111111111111112222222222222222222222 +2222222233222211111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111111110000CCCCCCCCCCCCCCCC0022221111111111111111111222222222222222222222222 +2222222222322221111111111111111111111111111111100CCCCCCCCCCCCCC0000211111111111111111121111110000CCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222233222111111111111111111111111111111100CCCCCCCCCCCCC000022211111111111111112221111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222333111111111111111111111111111111100CCCCCCCCCCC0000222222111111111111112222211111120000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222221112222222311111111111111111111111111111100CCCCCCCCCC000022222222211111111111222222211112220000CCCCCCC0000222211111111111111111112222222211111222222222222 +22222221222222222211111111111111111111111111111000CCCCCCC0000222222222222211111111000000222220000000000CCCC00002222211111111111111111122222222221112222222222222 +222222222222222222211111111111111111111111111111000CCC0000000222000000222221111110000000022200000000000000000222222211111111111111111122222222222222222222222222 +2222222222222222222221111111111111111111111111111000000000000020000000022221111100099990002000999900000000002222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111100000999990000099990002222111000992299000009922990099900022222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111120009922999000992299001222111009929999900009299330992330001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200099293333300929933002222220009299333330009233333323333002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200992333333300923333002212220099933033330009933333333333002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100993333333300933333002212220099330033333009333333333330002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100993333333300933333000111100093333333333009033333333330021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200933333333000333333300000200993333333333000033333333300022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200933333333000333333330000000933333333333000033333333300121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200333333303000333333333990000333333333333300003333330300222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200333333003000033333333333003333333333333300003333330000121212121212121212121212121212121212121212121212121212 +2122212221222122212221222122212221222122212221222100333333000000033333333333303333330333333300033333330001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200333333003000033333333333303333330303333300033333300012121212121212121212121212121212121212121212121212121212 +2221222122212221222122212221222122212221222122212200333333300000033333333333003333330003333300033333300122212221222122212221222122212221222122212221222122212221 +1212121212121212121212121212121212121212121212121200033333300010003333333333000333030000333000033333300212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212120033333000121003333303303000030000000330000003333000121212121212121212121212121212121212121212121212121212121 +1212121212121212121212121212121212121212121212121210003303001212003030003000000000000200300012003030001212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212121003000002121003000003000012000212100000121003000012121212121212121212121212121212121212121212121212121212121 +1112111211121112111211121112111211121112111211121112003000021112000000000002111211121110001211003000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1211121112111211121112111211121112111211121112111211100012111211121112111211121112111211121112003001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111 + +3333333333333333333333333333333333333333333333333333333333333333333333333333377777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333333333333333333333333333333333333333333337777777777777777777777777777777777777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333233333333333323333333332333333333333333322777777777777727777777777777777772777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333333222333333332322233333333333222277777777777227777777777777777272777777777777777777777777777777777777777777777777 +3333333333333333333333333333333333333323333333322222233333332222233333333333222277777277777222777777777777772222277777777727777777777777777777777777777777777777 +3333333333333333333333333333333333332222333333222222213333332222223333323333222272222277777222777777222777722222277777777727777777777777777777777777777777777777 +3333333333333333333323333333332233332222333333222222111333332223223111122233222222222277772222777772222777722227272777777727777777777777777777777777777777777777 +3333333333333333333322233333332233332222233333322222212233332222221111112222221111111117722222777112222777772277772277277727777772777777777777777777777777777777 +3333333333333333333332223333332233332222233333322222222223322222211111111221111111111111112272271111222777772227272222277722772772777777777777777777777777777777 +3333333333333323333332222333333233332222223333323322222223322222111111111111111111111111111122221111212277772111272222277722772222777777777777777777777777777777 +3333333333333322333332222223333111111122222333323322222223322221111111111111111111111111111111222117111277721111122222277722772222277777777777777777777777777777 +3333333333333322333330000003111111111111122233322222222223222221111111111111111111111111111111122227712277721111122222277222772222222777777777777777777777777777 +3333333333333322233000000000011111111111111233322222222222222221111111111111111111111111111111112222222277221111122222277222772222222777727777777777777777777777 +3333333333333322230000333300001111111111111133322222222222222221111111111111111111111111111111111222222277222111222222272222772222222000000007777777777777777777 +3333333333333222200033322333000111111111111113322222222222222221111111111111111111111111111111111122222227222222222272222222772222200000000000777777777777777777 +3333333333333222000333233333300111111111111111322111112222222222111111111111111111111111111111111112222227222222222777222211111122000077777700027777777777777777 +3333333333333222003399333333300011111111111111111111111122222222211111111111111111111111111111111111222227222222222272221111111112007777222770007777777777777777 +3333333233333222003000933333330011111111111111111111111112222222211111111111111111111111111111111111222222222221111112211111111111000007777277000777777777777777 +3333333233333222000000933333330001111111111111111111111111222222111111111111111111111111111111111111122227222111111111111111111111100000777777700777777777777777 +3333333223333233200000093333333001111111111111111111111111222222111111111111111111111111111111111000022222221111111111111111111111122000077777700077777777777777 +33333332233332333222100933333330001111111111111111111111111222200011111111111111111111111111111100000022222111111111111111111100000000007777777H0077777777777777 +33333332233332232222100933333333001111111111111111111111111222000001111111111111111111111111110000330002221111111111111111110000000000777777777H0077777777777777 +33333332113331112221100993333333001111111111111111111111111220003000111111111111111111111111100003333002211111111111111111100007777777777777777H0077777777777777 +3333333111131111122100099333333300011111111111111111111111122003330011111111111111111111111100030033300221111111111111111100077777777777777777HH0077777777777777 +2333333111131111122100999333333330000111111111111111111111111003300011111111111111111111111100333003000111111111111111111000777777777777777777HH0077727777777777 +2333333211331111122100999333333333000011111111111111111111111003300000111111111111111111111100030003001111111111111111110007777777777777777777H00077727777777777 +233333322333311122210099933333333333000111111111111111111111100090000001111000001100000000111003000300111111111111111111007777777777777777777HH00777727777777777 +23333332233332222221009993333333333330011111110001111100000001000000900010000000000000000000000000000000011111111111111100F777777777777777777HH00777727777777777 +23333332233332222221009993333333333330001111100000111000000000100009990000009990000999909000000000000000000111111111111000FF77777777777777777HH00777727777777777 +23333332223322222222009993333333333FFF00000100030001000999990000099999900099999990999999990999999000999900001111111110000FF77777777777777777HH000777727777777777 +233333332233211111220099993333333333FF00000000333000009929999000999999930992292990999999300922292999999999000111111100001FFF77F777777777777HHH002777727777777777 +33333333222311111112009999333333333FF11111000033000009929999000099993330992999933099999333092999999999999990011111100011111FF7FF7777777777HHHH002777777777777777 +33333333222111111111000999933333FFFF111111100030000009299999000999933390929993333009993333099299999993333330001110000CC11111FFFF77777777HHHHH0002777777777777777 +3333333322111111111110099999933FFFF11111CCCC003000009929993300099933330992993333300993333390929999333333333300100000CCCCCC111FFF7777777HHHHH00022777777777777772 +333333332111111111111000999999FFFF1111CCCCCC0030009999993330009999333909299933309009933333309299933333333333000000CCCCCCCCC111FFF777HHHHHHH000222777777777777722 +3333333311111111111111000999F99FF1111CCCCCCC00000999999333300099933399099993333090099333333099993333330300300000CCCCCCCCCCCC111FFFFHHHHHH00007222777777777777722 +3333333311111111111111100099FFFF1111CCCCCCCCC000009999333333009933339099993333300009933333300999333300000090000CCCCCCCCCCCCCC111FF7FHHHH000077222777727777777722 +3333333311111111111111110000FFF1111CCCCCCCCCCCC00099993333333333333330999333333000093333333009993333000000000000CCCCCCCCCCCCCC111FFFF000001177222277227777777722 +333333331111111111111111100000F111CCCCCCCCCCCCC0099993333333333333333099333333300000333333300993333330009999990000CCCCCCCCCCCC111F000000011172222272227177777722 +333333331111111111111111111000111CCCCCCCCCCCCCC00999333333333333333330933333333030033333333009933333333339993990000CCCCCCCCCCCC111000011111122222272221117777722 +333332331111111111111111111100111CCCCCCCCCCCCC0009993333333333333333309333333333330333333333093333333333333333303000CCCCCCCCCCCC11001111111122222272227177777722 +33333232211111111111111111110001CCCCCCCCCCCCCC0099933333333333333333003333333333300333333333093333333333333333333300CCCCCCCCCCCC10001111111172222222227777277722 +33332222221111111111111111111000CCCCCCCCCCCCCC0099333333333333333333003333333333300333333333033333333333333333333000000CCCCCCCCC00011111111227722222227777227722 +333322232221111111111111111111000CCCCCC0000CCC00933333333333333333330033333333333333333333330333333333333333333300000000CCCCCCC000111111111222271272227777227722 +333322333221111111111111111111100CCCCC000000C0003333333333333333333300033333333333333333333303333333333333333303000033000CCCCCC001111111111222211122227777227722 +3333222322211111111111111111111000CCC000330000033333333330333333333300033333333333333333333303333333333300300000000333300CCCCC0001111111111122221272227777227722 +33332222222111111111111111111111000C0003333000033333333300033333333300033333333333333333333003333333333000000000000033000CCCC00011111111111112222227227777222722 +33332222222111111111111110000011100C003333300003333333330003333333333003333333333333333333300333333333300003999990003000CCCCC00111111111111111111227227777722222 +23322222211111111111111100000001100000033300030333333333000333333333300333333333333333333330333333333330333333399000000CCCCC000111111111111111111122727777772222 +23322222111111111111111100777000110000030000333333333333003333333333300033333333333333333330333333333333333333333300300C0000001111111111111111111112727777772722 +2332222111111111111111110007770011100003000003333333333300333333333330003333333333333333333033333333333333333333330000000000001111111111111111111111277777772222 +2332222111111111111111111000770011110003000000333333333300333333333330003333333333333333330033333333333333333333330000000770000111111111111111111111277777772222 +2332222111111111111111111100700011111003000000333333333000333333333330003033333333333333030033333333333333333333300000007777700111111111111111111111277777772222 +2322222111111111111111111100000111111000000000303333333000333333333330003033333333333333000333333333333333330333300000000777000111111111111111111111277777772222 +2322222211111111111111111100700111111100000000300300030000330330003330000033033333333303003333003330300330330030300000000070000000011111111111111112272777772222 +2222222221111111111111000000000111100000070000300300030000300030030000000033000033333000000330000000000300030000300000000070000000000111111111111122272777772222 +2222222222222111111110000000000010000000777000300000000000000030000000000033000000000000000030000007700000030000300000000000007777000011111111111122272777772222 +2322222222222211111100077777770000007777777000300000077777000000077777700033000000077777770000007777777770000000300000007007777777770001111111111122722777772222 +2222222222222211111000772227277000077222777700300000772277777000772272700000000000772227770000077222727777777000000000077777227777777000111111111222722777772222 +2222222222222221110007727777777000772777777700000007727777777000727777770033000000727777770000072777777777777700300000007722777777777700011112222227222277772222 +2222222222222221110077277777770007727777777700300077277777777000727777770000000000727777770000772777777777777700000000077277777777777770001122222277722227722222 +2222222222222331100072777777770007777777777000000072777777777000727777777000000077777777770000727777777777777770000000777777777777777777001122222277222227722222 +2222222222233221100772777777770007777777777700000772777777777700777777777000000777777777770007727777777777777777000000777777777777777777000112222722222227722222 +2222222222322211000777777777700077777777777700000777777777777700777777777000000077777777770077777777777777777777000007777777777777777777700111277222112227722222 +2222222233222210007777777777700077777777777700000777777077777700707777777700000007777777770777777777777777777777700007777777770770777777000111122221111227722222 +2222222322222210077777777777777777777777777700007777770070777770707777777770000077777777070777777777777777777777700077777777070070077777001111112221111227722222 +2222123222222210007777777777777777777777777700007777770000777770007777777770000077777777000777777777700707777777770077777777070000007777001111112222112222722222 +2221112222220000000777777777777777777777770700007777777007777770007777777770000777777777007777777770700000777777770077777770070000000707001111111222222222722222 +2222132222200000000777777777777777777777770000077777777777777777000777777777000777777777007777777770700000777777770777777770070000000007001000011222222222722222 +2222322222000770000777777777777777777777770000077777777777777777000777777777007777777770007777777770700007777777770777777770000000000007000000001122222222222222 +2223222222007770000777777777777777777777770000777777777777777777000077777777777777777770007777777770007707777777770777777770000000000000000077000122222222222222 +22232222220077700007777777777777777777777700077777777777777777770000777777777777777777H0077777777770077777777777700777777770000000077000000777700122222222222722 +2232232222007700000777777777777777777777777000777777777777777777H00077777777777777777HH0077777777777007777777777700777777777000007777700000777700112222272222222 +223233322200070010077777777770077777777777700007777777777777777HH00077777777777777777HH0077777777777777777777777700777777777777777777HH0000007700112222272222222 +223223222220070010007777777770007777777777700007777777777777777HH000777777777777777770H00777777777777777777777777007777777777777777HHHH0000000700112222272222222 +232222222220000011007777777770007777777777700007777777777777777HH0007077777777777777H0H0077777777777777777777HH0H0077777777777777HHHHHHH000100700112222272222122 +2322222222220001110077777777HH0007777777777H000777777HH77777777HHH00707777777777777HH0H007777777777777777777HHH0000777777777777HHHHHHHHHH00100700112222222221112 +2322222222222211110077777777HH0007777777777H00077777HHHH7777777HHH0000077777777777HHH0H0077777777777777777HHHHH0H000777777777HHHHHHHH00H000100000112222222222122 +232222222222221111007777777HHH000777777777HHH000777HHHH00777777HHH00H00777777777HHHHH0H007777777777777777HHHHHH00000H7777777HHHHHHHH0000001100700112222222222222 +23222222222221111100707777HHHHH00777777777HHH000777HHH0000777HHHHH0000077777777HHHH0H00007077777777777HHHHHHH0H0000007777HHHHHHHHHHH0000011100000117722222222222 +232222222222211111007007HHHHHHH0070777777HHHH00007HHHH000077HHHHHHH0000777777HHHHH00H0H00H00H7777HHHHHHHHHHHH0H0000007HHHHHHHHHHH00H0011111110001112272222222222 +23222222222221111100H00HHHHHHHHH0H00HHHHHHHHHH000HHHHH000070HHHHHHH0000707HHHHHHH000H0000000HHHHHHHHHHHHHHH0H00000000HHHHHHHHH0000000011111111111122272222222222 +23222222222211111100H000HHHHHHH00H00HHHHHHHHH00000HHH00000000HHHHH00000000HHHHHHH000H000000000HHHHHHHHHHH000H00000000H000HH0H00000000111111111111122227222222222 +23222222221111111100H000H0HH00H00H00H00HHHHH0001000HH000C00000H0H0000000000HHHHH0000H00CCCC0000H0HHHHH0H0000H00000000H0000H0H00111111111111111111122227222222222 +22322222211111111100H000000H00H00000H00000070011100HH000CCCC00H00000H000C00H000H0000000CCCCCC00H00000H0H000000H00000000000H0000111111111111111111222227222222222 +223222221111111111000000000H00000000000000070011100HH00CCCCC00H00007HH00C000000H00C000CCCCCCC0000000000H00000HHHH00100010000001111111111111111111222227222222222 +223222221111111111100011100H00H00110001110000011100HH00CCCCC000000007H00CC00000000CCCCCCCCCCC00H00CC000000000HHH000111111000111111111111111111112222272222272222 +222322221111111111111111100H00000111111111000111100HH00CCCCCC000CC000700CCCCC000000CCCCCCCCCC00000CCCC000CC000H0001111111111111111111111111111112222272222777222 +222322221111111111111111100H000011111111111111111000000CCCCCCCCCCCC00700CCCC00000000CCCCCCCCCC000CCCCCCCCCC000H0011111111111111111111111111111122227722222272222 +222232222111111111111111100000111111111111111111100HH00CCCCCCCCCCCC00700CC000011110000CCCCCCCCCCCCCCCCCCCCCC0000011111111111111111111111111111277772222222222222 +2222232222111111111111111100011111111111111111110000000CCCCCCCCCCCC00000C00001111110000CCCCCCCCCCCCCCCCCCCCCC000111111111111111111111111111112222222222222222222 +222223222222211111111111111111111111111111111111000000CCCCCCCCCCCCCC000000011111111110000CCCCCCCCCCCCCCCCCCCCC00211111111111111111111111111122222222222222222222 +22222232222221111111111111111111111111111111111100CCCCCCCCCCCCCCCCCCC0000011111111111100000CCCCCCCCCCCCCCCCCCC00221111111111111111111111111222222222222222222222 +22222223222222111111111111111111111111111111111100CCCCCCCCCCCCCCCCCC000011111111111111110000CCCCCCCCCCCCCCCCCC00222111111111111111111111112222222222222222222222 +22222222332222111111111111111111111111111111111000CCCCCCCCCCCCCCCC0000111111111111111111110000CCCCCCCCCCCCCCCC00022221111111111111111111222222222222222222222222 +2222222222322221111111111111111111111111111111100CCCCCCCCCCCCCCCC000011111111111111111211110000CCCCCCCCCCCCCCCC0022221111111111111111112222222221112222222222222 +2222222222233222111111111111111111111111111111100CCCCCCCCCCCCCC0000221111111111111111222111110000CCCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222222122222333111111111111111111111111111111100CCCCCCCCCCCCC000022221111111111111122222111110000CCCCCCCCCCCCC0022211111111111111111112222222211111222222222222 +2222221112222222311111111111111111111111111111100CCCCCCCCCCC0000222222221111111111122222221111220000CCCCCCCCCC00022211111111111111111112222222211111222222222222 +2222222122222222221111111111111111111111111111100CCCCCCCCCC000022222222222111111110000002222200000000CCCCCCC0000222211111111111111111122222222221112222222222222 +22222222222222222221111111111111111111111111111000CCCC000000022200000022222111111000000002220000000000000CC00002222211111111111111111122222222222222222222222222 +222222222222222222222111111111111111111111111111000CC00000000020000000022221111100099990002000999900000000000222222221111111111111111222222222222222222222222222 +2222222222222222222222111111111111111111111111111000000999990000099990002222111000992299000009922990099900002222222221111111111111112222222222222222222222222222 +1222122212221222122212221111111111111121111111111100009922999000992299001222111009929999900009299330992330001222122212111111111111121222122212221222122212221222 +2222222222222222222222222221111111122222111111111200099293333300929933002222220009299333330009233333323333002222222222211111111112222222222222222222222222222222 +2212221222122212221222122212221222122212211111112200992333333300923333002212220099933033330009933333333333002212221222121111111222122212221222122212221222122212 +2222222222222222222222222222222222222222221111122100993333333300933333002212220099330033333009333333333330002222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121100993333333300933333000111100093333333333009033333333330021212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200933333333000333333300000200993333333333000033333333300022222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200933333333000333333330000000933333333333000033333333300121212121212121212121212121212121212121212121212121212 +2222222222222222222222222222222222222222222222222200333333303000333333333990000333333333333300003333330300222222222222222222222222222222222222222222222222222222 +1212121212121212121212121212121212121212121212121200333333003000033333333333003333333333333300003333330000121212121212121212121212121212121212121212121212121212 +2122212221222122212221222122212221222122212221222100333333000000033333333333303333330333333300033333330001222122212221222122212221222122212221222122212221222122 +1212121212121212121212121212121212121212121212121200333333003000033333333333303333330303333300033333300012121212121212121212121212121212121212121212121212121212 +2221222122212221222122212221222122212221222122212200333333300000033333333333003333330003333300033333300122212221222122212221222122212221222122212221222122212221 +1212121212121212121212121212121212121212121212121200033333300010003333333333000333030000333000033333300212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212120033333000121003333303303000030000000330000003333000121212121212121212121212121212121212121212121212121212121 +1212121212121212121212121212121212121212121212121210003303001212003030003000000000000200300012003030001212121212121212121212121212121212121212121212121212121212 +2121212121212121212121212121212121212121212121212121003000002121003000003000012000212100000121003000012121212121212121212121212121212121212121212121212121212121 +1112111211121112111211121112111211121112111211121112003000021112000000000002111211121110001211003000111211121112111211121112111211121112111211121112111211121112 +2121212121212121212121212121212121212121212121212121000001212121200021200021212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1211121112111211121112111211121112111211121112111211100012111211121112111211121112111211121112003001121112111211121112111211121112111211121112111211121112111211 +2121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121000001212121212121212121212121212121212121212121212121212121212121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111111 +1121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +2111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111211121112111`.split( + "\n\n" + ); +const titleData = []; +for (const frame of titleFrames) { + const titleChunks = splitBitmap(frame); + const titleLegend = titleChunks.map((chunk, index) => [ + getLegendChar(), + chunk, + ]); + // create the map by joining every char for the title into one string, then inserting newlines + const titleMap = titleLegend + .map((v) => v[0]) + .join("") + .replace(/(.{10})/g, "$1\n") + .slice(0, -1); + titleData.push([titleLegend, titleMap]); +} + +setLegend(...titleData.map((v) => v[0]).flat(1)); + +setMap(titleData[3][1]); + +let currentTitleFrame = 0; +const titleAnimationInterval = setInterval(() => { + setMap("\n" + titleData[currentTitleFrame][1]); + + currentTitleFrame = (currentTitleFrame + 1) % titleData.length; +}, 300); + +let gameStarted = false; +"wasdijkl".split("").forEach((key) => { + onInput(key, () => { + if (!gameStarted) startGame(); + }); +}); + +let canvas; + +// stores static copies of all the tile legends for any x and y (see below) +const tileLegends = []; +for (let x = 0; x < 10; x++) { + const row = []; + for (let y = 0; y < 8; y++) { + row.push(""); // start as empty, initialize in getTileLegend + } + tileLegends.push(row); +} + +// get a unique character for a given x and y, for the legend +function getTileLegend(tileX, tileY) { + const ch = String.fromCharCode( + currentLegendChar++ + tileX + 10 * resolution * tileY + ); + + tileLegends[tileX][tileY] = ch; + return ch; +} + +// generate a static map of unique characters for the canvas to render to +let canvasMap = ""; +const canvasLegendChars = []; +for (let y = 0; y < 8; y++) { + canvasMap += "\n"; + for (let x = 0; x < 10; x++) { + const char = getTileLegend(x, y); + canvasMap += char; + canvasLegendChars.push(char); + } +} + +// using the canvas, generate a bitmap for an x and y on the sprig map +function genTileBitmap(tileX, tileY) { + // loop through every pixel in the tile + let tileBitmap = ""; + + // scale the sprig x and y to the canvas x and y + const canvasX = tileX * resolution; + const canvasY = tileY * resolution; + + for (let y = canvasY; y < canvasY + resolution; y++) { + // this `i` loop scales up the pixels in the y direction + for (let i = 0; i < 16 / resolution; i++) { + tileBitmap += "\n"; + for (let x = canvasX; x < canvasX + resolution; x++) { + // this repeat scales the pixels in the x direction + tileBitmap += canvas[x][y].repeat(16 / resolution); + } + } + } + return tileBitmap; +} + +function renderCanvas() { + // loop through every 'tile' in the map + const legend = []; + let i = 0; + for (let x = 0; x < 10; x++) { + for (let y = 0; y < 8; y++) { + legend.push([canvasLegendChars[i++], genTileBitmap(x, y)]); + } + } + + setLegend(...legend,["7", + bitmap` +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333`, + ], ["8", + bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`] + ); +} + +function renderPlayer(player) { + // const offsetX = (player.x % resolution) * (16/resolution); + // const offsetY = (player.y % resolution) * (16/resolution); + const offsetX = 0; + const offsetY = 0; + // console.log(player.y, offsetY) + + // player.direction == "up" && console.log(player.y, (player.y % (16/resolution))) + + const bitmaps = offsetBitmap(player[player.direction], offsetX, offsetY); + setLegend(...player.legendChars.map((char, i) => [char, bitmaps[i]])); +} + +function getPlayerPositionData(player) { + const tileX = Math.floor(player.x / resolution); + const tileY = Math.floor(player.y / resolution); + + // spaghetti code, returns each tile the player is occupying combined with the legend char for that bitmap + return [ + [tileX, tileY], + [tileX + 1, tileY], + [tileX, tileY + 1], + [tileX + 1, tileY + 1], + ].map((pos, i) => [pos, player.legendChars[i]]); +} + +// offset a bitmap by a pixel amount, by creating 4 bitmaps and shifting the original bitmap across them +function offsetBitmap(bitmap, x, y) { + // add padding on the top + bitmap = "................\n".repeat(y) + bitmap.trim(); + // add padding on the bottom to make it 32 tall + bitmap = bitmap + "\n................".repeat(16 - y); + // add padding on the left and the right + const rows = bitmap.split("\n"); + const paddingLeft = ".".repeat(x); + const paddingRight = ".".repeat(16 - x); + bitmap = rows.map((row) => paddingLeft + row + paddingRight).join("\n"); + + // return bitmap; + return splitBitmap(bitmap); +} + +// player position & sprite data +const red = { + x: 4, + y: 24, + direction: "up", + recentInputX: 0, // positive or negative depending on input direction + recentInputY: 0, + legendChars: [ + getLegendChar(), + getLegendChar(), + getLegendChar(), + getLegendChar(), + ], + up: bitmap` +................ +.22222222222222. +.20000000000002. +220229299999902. +200233333333302. +200333333333302. +200000000000002. +202222222222222. +2000000002...... +22222222022..... +......20002..... +......20C02..... +......20C02..... +......20002..... +......22222..... +................`, + down: bitmap` +................ +.....22222...... +.....20002...... +.....20C02...... +.....20C02...... +.....20002...... +.....22022222222 +......2000000002 +.222222222222202 +.200000000000002 +.202292999999002 +.202333333333002 +.203333333333022 +.20000000000002. +.22222222222222. +................`, + right: bitmap` +......2222222... +......200000222. +......202000002. +......202022302. +......202023302. +......202093302. +.22222202023302. +.20000202093302. +.20CC0002093302. +.20000222093302. +.222222.2093302. +........2093302. +........2093302. +........2000002. +........2222222. +................`, + left: bitmap` +................ +.2222222........ +.2000002........ +.2022302........ +.2023302........ +.2093302.222222. +.20233022200002. +.2093302000CC02. +.20933020200002. +.20933020222222. +.209330202...... +.209330202...... +.209330202...... +.200000202...... +.222000002...... +...2222222......`, +}; + +const blue = { + x: 32, + y: 4, + direction: "down", + recentInputX: 0, + recentInputY: 0, + legendChars: [ + getLegendChar(), + getLegendChar(), + getLegendChar(), + getLegendChar(), + ], + up: bitmap` +................ +.22222222222222. +.20000000000002. +220227277777702. +200277777777702. +200HHHHHHHHHH02. +200000000000002. +202222222222222. +2000000002...... +22222222022..... +......20002..... +......20C02..... +......20C02..... +......20002..... +......22222..... +................`, + down: bitmap` +................ +.....22222...... +.....20002...... +.....20C02...... +.....20C02...... +.....20002...... +.....22022222222 +......2000000002 +.222222222222202 +.200000000000002 +.202272777777002 +.202777777777002 +.20HHHHHHHHHH022 +.20000000000002. +.22222222222222. +................`, + right: bitmap` +......2222222... +......200000222. +......202000002. +......202022H02. +......202027H02. +......202077H02. +.22222202027H02. +.20000202077H02. +.20CC0002077H02. +.20000222077H02. +.222222.2077H02. +........2077H02. +........2077H02. +........2000002. +........2222222. +................`, + left: bitmap` +................ +.2222222........ +.2000002........ +.2022H02........ +.2027H02........ +.2077H02.222222. +.2027H022200002. +.2077H02000CC02. +.2077H020200002. +.2077H020222222. +.2077H0202...... +.2077H0202...... +.2077H0202...... +.200000202...... +.222000002...... +...2222222......`, +}; + +// arrays for red and blue sprites, these get set once the game starts +const redSprites = []; +const blueSprites = []; + +async function startGame() { + clearInterval(titleAnimationInterval); + setTimeout(() => (gameStarted = true), 10); + + const spiralAnimationChar = "S"; + setLegend( + [ + spiralAnimationChar, + bitmap` +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333`, + ], + [ + "1", + bitmap` +333.333.333.333. +3333333333333333 +3.333.333.333.33 +3333333333333333 +333.333.333.333. +3333333333333333 +3.333.333.333.33 +3333333333333333 +333.333.333.333. +3333333333333333 +3.333.333.333.33 +3333333333333333 +333.333.333.333. +3333333333333333 +3.333.333.333.33 +3333333333333333`, + ], + [ + "2", + bitmap` +333.333.333.333. +.3.3.3.3.3.3.3.3 +3.333.333.333.33 +.3.3.3.3.3.3.3.3 +333.333.333.333. +.3.3.3.3.3.3.3.3 +3.333.333.333.33 +.3.3.3.3.3.3.3.3 +333.333.333.333. +.3.3.3.3.3.3.3.3 +3.333.333.333.33 +.3.3.3.3.3.3.3.3 +333.333.333.333. +.3.3.3.3.3.3.3.3 +3.333.333.333.33 +.3.3.3.3.3.3.3.3`, + ], + [ + "3", + bitmap` +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3 +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3 +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3 +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3 +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3 +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3 +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3 +3.3.3.3.3.3.3.3. +.3.3.3.3.3.3.3.3`, + ], + [ + "4", + bitmap` +3...3...3...3... +.3.3.3.3.3.3.3.3 +..3...3...3...3. +.3.3.3.3.3.3.3.3 +3...3...3...3... +.3.3.3.3.3.3.3.3 +..3...3...3...3. +.3.3.3.3.3.3.3.3 +3...3...3...3... +.3.3.3.3.3.3.3.3 +..3...3...3...3. +.3.3.3.3.3.3.3.3 +3...3...3...3... +.3.3.3.3.3.3.3.3 +..3...3...3...3. +.3.3.3.3.3.3.3.3`, + ], + [ + "5", + bitmap` +3...3...3...3... +................ +..3...3...3...3. +................ +3...3...3...3... +................ +..3...3...3...3. +................ +3...3...3...3... +................ +..3...3...3...3. +................ +3...3...3...3... +................ +..3...3...3...3. +................`, + ], + [ + "0", + bitmap` +1.1.1.1......... +.1.1.1.1........ +1.1.1.1......... +.1.1.1.1........ +1.1.1.1......... +.1.1.1.1........ +1.1.1.1......... +.1.1.1.1........ +........1.1.1.1. +.........1.1.1.1 +........1.1.1.1. +.........1.1.1.1 +........1.1.1.1. +.........1.1.1.1 +........1.1.1.1. +.........1.1.1.1`, + ], + [ + "7", + bitmap` +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333`, + ], + [ + "8", + bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`, + ] + ); + + await spiralAnimation(spiralAnimationChar, 10); + + // fade animation + setMap("\n..........".repeat(8)); + for (let i = 1; i <= 5; i++) { + setBackground(String(i)); + i < 5 && (await new Promise((res) => setTimeout(res, 50))); + } + setBackground("0"); + + // Create an array to keep track of paint + canvas = []; + for (let x = 0; x < 10 * resolution; x++) { + const row = []; + for (let y = 0; y < 8 * resolution; y++) { + // checkerboard pattern + // row.push((x + y) % 2 == 0 ? color`4` : color`D`); + row.push("."); + } + canvas.push(row); + } + + renderCanvas(); + setMap(canvasMap); + + // to get the player sprite into the right stacking position, clear the tile then add it + for (const pl of [red, blue]) { + const positionData = getPlayerPositionData(pl); + for (let pos of positionData) { + renderPlayer(pl); + const [x, y] = pos[0]; + clearTile(x, y); + addSprite(x, y, pos[1]); + + // render the map again and cover back up the hole that was created to slot in the player sprites + renderCanvas(); + addSprite(x, y, tileLegends[x][y]); + } + } + + for (let i = 0; i < 4; i++) { + redSprites.push(getFirst(red.legendChars[i])); + blueSprites.push(getFirst(blue.legendChars[i])); + } + + + const renderLoop = setInterval(() => { + doMovementUpdates(); + renderPlayer(red); + renderPlayer(blue); + renderCanvas(); + // canvas[Math.floor(Math.random() * 10 * resolution)][ + // Math.floor(Math.random() * 8 * resolution) + // ] = color`3`; + }, 1000 / fps); + + let time = 20; + addText(time.toString(), {x: 9, y: 1}); + const timerLoop = setInterval(() => { + time--; + clearText(); + addText(time.toString(), {x: 9, y: 1}); + + if (time == 0) { + clearInterval(renderLoop); + const redScore = getAll("7").length; + const blueScore = getAll("8").length; + clearText(); + setMap(map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........`); + + if (redScore > blueScore) { + addText("Red wins!", {x: 6, y: 7, color: color`3`}) + } else if (blueScore > redScore) { + addText("Blue wins!", {x: 5, y: 7, color: color`7`}) + } else { + addText("Tie!", {x: 8, y: 7, color: color`L`}) + } + + clearInterval(timerLoop); + } + }, 1000) +} + +function paint(player, color) { + const sprite = getFirst(player.legendChars[0]); + const tileSprites = getTile(sprite.x,sprite.y); + let found = false; + for (const sp of tileSprites) { + if (sp.type == "7" || sp.type == "8") { + sp.type = color; + found = true; + } + } + if (!found) addSprite(sprite.x, sprite.y, color); +} + +function doMovementUpdates() { + if (red.x % resolution == 0 && red.recentInputX) { + for (const sprite of redSprites) { + sprite.x += red.recentInputX; + } + red.recentInputX = 0; + paint(red, "7"); + } else if (red.y % resolution == 0 && red.recentInputY) { + for (const sprite of redSprites) { + sprite.y += red.recentInputY; + } + red.recentInputY = 0; + paint(red, "7"); + } + + if (blue.x % resolution == 0 && blue.recentInputX) { + for (const sprite of blueSprites) { + sprite.x += blue.recentInputX; + } + blue.recentInputX = 0; + paint(blue, "8"); + } else if (blue.y % resolution == 0 && blue.recentInputY) { + for (const sprite of blueSprites) { + sprite.y += blue.recentInputY; + } + blue.recentInputY = 0; + paint(blue, "8"); + } +} + +onInput("w", () => { + if (red.y <= 0 || !gameStarted) return; + // red.y -= 1; + red.direction = "up"; + red.y -= resolution; + red.recentInputY = -1; +}); +onInput("s", () => { + if (red.y >= 28 || !gameStarted) return; + // red.y += 1; + red.direction = "down"; + red.y += resolution; + red.recentInputY = 1; +}); +onInput("a", () => { + if (red.x <= 0 || !gameStarted) return; + // red.x -= 1; + red.direction = "left"; + red.x -= resolution; + red.recentInputX = -1; +}); +onInput("d", () => { + if (red.x >= 72 || !gameStarted) return; + // red.x += 1; + red.direction = "right"; + red.x += resolution; + red.recentInputX = 1; +}); + +onInput("i", () => { + if (blue.y <= 0 || !gameStarted) return; + // blue.y -= 1; + blue.direction = "up"; + blue.y -= resolution; + blue.recentInputY = -1; +}); +onInput("k", () => { + if (blue.y >= 28 || !gameStarted) return; + // blue.y += 1; + blue.direction = "down"; + blue.y += resolution; + blue.recentInputY = 1; +}); +onInput("j", () => { + if (blue.x <= 0 || !gameStarted) return; + // blue.x -= 1; + blue.direction = "left"; + blue.x -= resolution; + blue.recentInputX = -1; +}); +onInput("l", () => { + if (blue.x >= 72 || !gameStarted) return; + // blue.x += 1; + blue.direction = "right"; + blue.x += resolution; + blue.recentInputX = 1; +}); diff --git a/games/Hungry-Ninja.js b/games/Hungry-Ninja.js index b9795d09ef..5ed6d3cc3d 100644 --- a/games/Hungry-Ninja.js +++ b/games/Hungry-Ninja.js @@ -1,8 +1,8 @@ /* @title: Hungry-Ninja -@tags: [''] -@addedOn: 2023-12-19 @author: Prajval Raval +@tags: [] +@addedOn: 2023-12-19 Instructions: WASD to control your player diff --git a/games/Icy_Portals.js b/games/Icy_Portals.js index b0ae794bdb..fd287c6261 100644 --- a/games/Icy_Portals.js +++ b/games/Icy_Portals.js @@ -1,8 +1,8 @@ /* @title: Icy Portals -@tags: ['energy-control'] -@addedOn: 2022-12-02 @author: Jonathan La +@tags: ['puzzle'] +@addedOn: 2022-12-02 */ let moves = 20; diff --git a/games/Infinite_Shooter.js b/games/Infinite_Shooter.js index f752635f08..562101d9f4 100644 --- a/games/Infinite_Shooter.js +++ b/games/Infinite_Shooter.js @@ -1,8 +1,8 @@ /* @title: Infinite Shooter +@author: not_a_robot @tags: ['endless'] @addedOn: 2022-11-05 -@author: not_a_robot Bad guys drop from the top, shoot them to get points. The faster they are, the more points you get! diff --git a/games/Invisible_Maze.js b/games/Invisible_Maze.js index 8658184555..8a382c6dac 100644 --- a/games/Invisible_Maze.js +++ b/games/Invisible_Maze.js @@ -1,8 +1,8 @@ /* @title: Invisible Maze -@tags: ['logic'] -@addedOn: 2022-12-07 @author: Ryan Qin +@tags: ['puzzle'] +@addedOn: 2022-12-07 */ const player = "p"; diff --git a/games/It_Is_Coming_Out!.js b/games/It_Is_Coming_Out!.js index cc47d965e3..29d73ed975 100644 --- a/games/It_Is_Coming_Out!.js +++ b/games/It_Is_Coming_Out!.js @@ -1,8 +1,8 @@ /* @title: It_Is_Coming_Out! +@author: Onovez @tags: [] @addedOn: 2023-03-15 -@author: Onovez */ // Game where you have to go through obstcle to go to toilet to poop // 'w','a','s','d': to move, 'j' to reset map, and 'k' to restart game diff --git a/games/JB_Dodge_game.js b/games/JB_Dodge_game.js new file mode 100644 index 0000000000..681f5992ef --- /dev/null +++ b/games/JB_Dodge_game.js @@ -0,0 +1,149 @@ +/* +@title: JB_Dodgy_Meteor_Game +@author: JbBurnsWasHere +@tags: ['action'] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p"; +const meteor = "m"; +const bg = "b"; +setLegend( + [meteor, bitmap` +................ +.......3........ +.......3........ +......333....... +......393....... +......3933...... +.....39993...... +.....39693...... +.....39693...... +.....366693..... +.....366663..... +.....3666CC..... +.....CCCCCCC.... +.....00CC00C.... +.....C0CC00C.... +.....CCCCCCC....`], + [bg, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [player, bitmap` +................ +......6666...... +.....606606..... +.....666666..... +.....600006..... +......6666...... +.......55....... +......5555...... +.....555555..... +...5555555555... +.....555555..... +.....555555..... +......5555...... +......5..5...... +......5..5...... +......5..5......`] + +); + +setMap(map` +........ +........ +........ +........ +........ +........ +........ +...p....`) + +var gameRunning = true; +var secondsElapsed = 0; + setBackground(bg); +// Update the elapsed time every second +var gameLoop = setInterval(() => { + if (gameRunning) { + secondsElapsed++; + } + despawnmeteors(); + movemeteors(); + spawnmeteor(); + + if (checkHit()) { + clearInterval(gameLoop); + gameRunning = false; + addText(`Game Over! + Score = ${secondsElapsed}s`, { + x: 5, + y: 6, + color: color`3` + }); + } +}, 1000); // Update every second + +onInput("a", () => { + if (gameRunning) { + getFirst(player).x -= 1; + } +}); + +onInput("d", () => { + if (gameRunning) { + getFirst(player).x += 1; + } +}); + +function spawnmeteor() { + let x = Math.floor(Math.random() * 8); + let y = 0; + addSprite(x, y, meteor); +} + +function movemeteors() { + let meteors = getAll(meteor); + + for (let i = 0; i < meteors.length; i++) { + meteors[i].y += 1; + } +} + +function despawnmeteors() { + let meteors = getAll(meteor); + + for (let i = 0; i < meteors.length; i++) { + if (meteors[i].y == 7) { + meteors[i].remove(); + } + } +} + +function checkHit() { + let meteors = getAll(meteor); + let p = getFirst(player); + for (let i = 0; i < meteors.length; i++) { + if (meteors[i].x == p.x && meteors[i].y == p.y) { + return true; + } + } + return false; +} + diff --git a/games/JBsPushyBoxPortalGame.js b/games/JBsPushyBoxPortalGame.js new file mode 100644 index 0000000000..c7d7d67673 --- /dev/null +++ b/games/JBsPushyBoxPortalGame.js @@ -0,0 +1,506 @@ +/* +@title: JB's Pushy Blocky Portal Game +@author: Justin Burns II :) +@tags: [] +@addedOn: 2024-09-03 +https://sprig.hackclub.com/gallery/getting_started + +*/ +setSolids([]) +const player = "p" +const box = "b"; +const portal = "g"; +const wall = "w"; +const boundary = "j"; +const border = "k"; + +setSolids([player, box, wall, boundary, border]); + + +setLegend( + [ player, bitmap` +................ +................ +.....3333333.... +.....3333333.... +...333330000.... +...333330000.... +...333333333.... +...333333333.... +...333333333.... +...333333333.... +...333333333.... +...333333333.... +.....3333333.... +.....33...33.... +.....33...33.... +.....33...33....` ], + + [ + box, + bitmap` +................ +................ +................ +...CCCCCCCCC.... +...CCCCCCCCC.... +...CCCCCCCCC.... +...CCCCCCCCC.... +...CCCCCCCCC.... +...CCCCCCCCC.... +...CCCCCCCCC.... +...CCCCCCCCC.... +...CCCCCCCCC.... +................ +................ +................ +................` + ], + [ + portal, + bitmap` +...6666666666... +..666666666666.. +.66699999999666. +6669666666669666 +6696666666666966 +6966666999666696 +6966699669996666 +6966696666669666 +6966696996666966 +6966696669666966 +6696699996666966 +6669666666669966 +6669666666699666 +.66696669996666. +..666999966666.. +...6666666666...` + ], + [ + wall, + bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` + ], + [ + boundary, + bitmap` +5555555555555555 +5777777777777775 +5755555555555575 +5757777777777575 +5757555555557575 +5757577777757575 +5757575555757575 +5757575775757575 +5757575775757575 +5757575555757575 +5757577777757575 +5757555555557575 +5757777777777575 +5755555555555575 +5777777777777775 +5555555555555555` + ], + [ + border, + bitmap` +0000000000000000 +0LLLLLLLLLLLLLL0 +0L11111LL11111L0 +0L11111LL11111L0 +0L11111LL11111L0 +0L11111LL11111L0 +0L1111LLLL1111L0 +0LLLLLLLLLLLLLL0 +0LLLLLLLLLLLLLL0 +0L1111LLLL1111L0 +0L11111LL11111L0 +0L11111LL11111L0 +0L11111LL11111L0 +0L11111LL11111L0 +0LLLLLLLLLLLLLL0 +0000000000000000` + ] +); + +let level = 0 +const levels = [ + map` +kkkkkk +kp...k +k.b..k +k....k +k...gk +kkkkkk`, + map` +kkkkkkkkkkkk +kwwww......k +kw..w......k +kw.b....w..k +kw..w..w...k +kww.pww....k +kwwwwww....k +kwww..gw...k +kwww..www..k +kww........k +kw.........k +kkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkk +k............k +k............k +k..wwwwwwww..k +k..w......w..k +k..w......w..k +k..w..ww..w..k +k..w..wg..w..k +k..w..w...w..k +kp.w..w...w..k +k.bw..wwwww..k +k..w.........k +kwww.........k +kkkkkkkkkkkkkk`, + + map` +kkkkkkkkkkkkkkkk +k..............k +k..............k +k.w.w..ww..w...k +k...p..ww..w..wk +k.....ww...w..wk +k.....wwwwwww.wk +k.......ww....wk +k.w..w..w..b..wk +k..g..w.w..ww.wk +k....ww....w..wk +k.wwwwwwwwwww.wk +k.............wk +kkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkk +k.............k +k.............k +k.w.....wwww..k +k..w.w.....w..k +k....w.wg.....k +k....w..w.ww..k +k....www..ww..k +k...ww.ww.....k +k..ww....ww...k +k..w.....w.w..k +kp....w..b.ww.k +k........w..w.k +k.......ww....k +kkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkkkkkk +k................wwwk +k.................wwk +k.....wwwwwwww.....wk +k...ww.......ww....wk +k..w..........ww..gwk +k..............wwwwwk +k.....wwwww....wwwwwk +kwwwwww..ww.....wwwwk +k........ww.........k +k..wwwww.ww...wwww..k +kw.wwwww.www.wwwww.wk +kw.wwwww.wwwww..ww.wk +kw.wwwww.ww.....ww.wk +kw.wwwww.ww..ww.ww.wk +kw.wwwww.www.ww.ww.wk +kw.wwww..www.w..ww.wk +kwbwwww......w.....wk +kwpwwwwwwww..wwww..wk +kwwwwwwwwwwwwwwwwwwwk +kkkkkkkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkkkk +kwwww........wwwwwk +kwww.........wwwwwk +kww.......w.gwwwwwk +kw.....wwww..w.wwwk +k....wwwwwwwww.wwwk +k...www..ww.w....wk +k...wwww..........k +k...wwwww.........k +k.....wwww...ww...k +kw.....w....www...k +kw..........www...k +kwww.......www....k +kwwww......wwww...k +k.........www.....k +kpw.w.....wwwww...k +kwwww....wwwwww.b.k +kwwwwwwwwwwwww....k +kkkkkkkkkkkkkkkkkkk`, + + map` +kkkkkkkkkkkkkkkk +k.....w........k +k..............k +k..w......w....k +k..w..wwwwgww..k +k..w.www....w..k +k..w.w.........k +k..w.w.ww....w.k +k..w...www.....k +k..w....www..w.k +k.bw..w......w.k +k..w...w....ww.k +k..ww....w.w...k +k.pwwwwwwww....k +k..wwwwwwwwwwwwk +kkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkkk +kw..gwwwwwwwwwwwwk +kw.w...........wwk +kw.w.wwwwww.....wk +kw.w......w.www.wk +kw.w.wwwwww.w.w.wk +kw.w.b.....bw.w.wk +kw.w.w.wwww.w.w.wk +kw.w.w.w.pw.w.w.wk +kw.w.w.w..w.w.w.wk +kw.w.w.w.ww.w.w.wk +kw.w.w.wb...w.w.wk +kw.b..bw.wwww.w.wk +kw.www.www......wk +kw..............wk +kwwwwwwwwwwwwww.wk +kkkkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkk +kp.w........gw..k +k...w.......w...k +kw...www.www...wk +k.w...ww.ww...w.k +k..w...w.w...w..k +k..ww.......ww..k +k..www.....www..k +k.......w.......k +k..www.....www..k +k..ww.......ww..k +k..w...w.w...w..k +k.w...ww.ww...w.k +kw...www.www...wk +k...w.b.....w...k +k..w.........w..k +kkkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkk +kp..wwwwwwwwwwwwk +k.b..wwwwwwwwwwwk +kw....wwwwwwwwwwk +k.w....wwwwwwwwwk +k..w....wwwwwwwwk +kg..w....wwwwwwwk +k....w....wwwwwwk +kw....w....wwwwwk +kww....w....wwwwk +kwww....w....wwwk +kwwww....w....wwk +kwwwww....w....wk +kwwwwww........wk +kwwwwwww.......wk +kwwwwwwwwwwwwwwwk +kkkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkk +kwwwwwwwwwwwwwwwk +kgw.w.w.w.w.w.w.k +k...............k +k.wwwwwwwwwwww..k +k.www...........k +k..w...........wk +kw.w...wwwwwwwwwk +k..ww.wwwwwwwwwwk +k.www.........b.k +k.www...........k +k..pwwwwwwwwww..k +k.wwwwwwwwwwwww.k +k.ww...w...w....k +k....w...w...ww.k +kwwwwwwwwwwwwwwwk +kkkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkk +kg....w.....w...k +kww.w..ww.......k +kw...w..ww...wwwk +k....w.....w.wwwk +k.w.ww.www.w.wwwk +k.w.w.ww...wbwwwk +k.w.w...ww...wwwk +k...........wwwwk +kww.wwww.wwwwwwwk +kw..ww...www.wwwk +kw....ww.www.wwwk +kw.ww..w.www..wwk +kw...w........wwk +kwwwpww.......wwk +kwwwwwwwwwwwwwwwk +kkkkkkkkkkkkkkkkk`, + map` +kkkkkkkkkkkkkkkkk +kp......w.wwwwwwk +k.........wwww.wk +k.wgw.w........wk +k.www....w.....wk +k..........ww..wk +kww.w.....w...wwk +k...wwwww...w...k +k..ww.......ww..k +k.....w...w.ww..k +k.w...w..w..w.w.k +k...w...........k +k..w.w...w..ww..k +k......w...w....k +k..w....w....b..k +k........w......k +kkkkkkkkkkkkkkkkk`, + map` +jjjjjjjjjjjjjjjjjjjjjjjjj +j.......................j +j.wwww.b............w...j +j.www....www..www...w...j +j.w....w.w.w.wwww...w...j +j.www..w.w.w.w.ww...w...j +j.w....w.w.w.wwww...w...j +j.w....w.w......w...w...j +j.w.................w...j +j.......................j +jw...ww.....w.wwww...w..j +jw..w..w.w..w.w..ww..w..j +jw..wwww.wwww.wwwww..w..j +jw..ww....ww..wwp....w..j +jwww.www..ww...wwww..wwwj +j.......................j +j.......................j +j......w................j +j...w...w...............j +j.......w...............j +j.......gw..............j +j...w...ww..............j +j......ww...............j +j.....ww................j +jjjjjjjjjjjjjjjjjjjjjjjjj`, +]; + +const currentLevel = levels[level]; +setMap(currentLevel); + +const melody = tune` +500: C4/500, +500: C4/500, +500: C4/500, +500: C4/500 + E4^500, +500: C4/500 + E4^500, +500: C4/500 + E4^500, +500: C4/500 + E4^500 + G4~500, +500: C4/500 + E4^500 + G4~500, +500: C4/500 + E4^500 + G4~500, +500: C4/500 + E4^500 + G4~500 + C5-500, +500: C4/500 + E4^500 + G4~500 + C5-500, +500: C4/500 + E4^500 + G4~500 + C5-500, +500: C4/500 + D5-500 + A4~500 + F4^500, +500: C4/500 + D5-500 + A4~500 + F4^500, +500: C4/500 + D5-500 + A4~500 + F4^500, +500: D4/500 + G4^500 + B4~500 + E5-500, +500: D4/500 + G4^500 + B4~500 + E5-500, +500: D4/500 + G4^500 + B4~500 + E5-500, +500: E4/500 + A4^500 + C5~500 + F5-500, +500: F4/500 + B4^500 + D5~500 + G5-500, +500: E4/500 + A4^500 + C5~500 + F5-500, +500: E4/500 + A4^500 + C5~500 + F5-500, +500: D4/500 + G4^500 + B4~500 + E5-500, +500: D4/500 + G4^500 + B4~500 + E5-500, +500: D4/500 + G4^500 + B4~500 + E5-500, +500: A4~500 + D5-500 + F4^500 + C4/500, +500: G4~500 + C5-500 + E4^500 + C4/500, +500: G4~500 + C5-500 + E4^500 + C4/500, +500: G4~500 + C5-500 + E4^500 + C4/500, +500: G4~500 + C5-500 + E4^500 + C4/500, +500: G4~500 + C5-500 + E4^500 + C4/500, +500: G4~500 + C5-500 + E4^500 + C4/500` + +playTune(melody) + + + +const playback = playTune(melody, Infinity) + + +onInput("w", () => { + getFirst(player).y += -1 +}) + + +onInput("s", () => { + getFirst(player).y += 1; +}); + +onInput("a", () => { + getFirst(player).x -= 1; +}); + +onInput("d", () => { + getFirst(player).x += 1; +}); +setPushables({ + [ player ]: [] +}) +onInput("j", () => { + const currentLevel = levels[level]; + if (currentLevel !== undefined) setMap(currentLevel); +}); +afterInput(() => { + +}) +setSolids([ player, box, wall, boundary, border ]); + +setPushables({ + [player]: [ box ] +}); +afterInput(() => { + const numberCovered = tilesWith(portal, box).length; + const targetNumber = tilesWith(portal).length; + + if (numberCovered === targetNumber) { + level = level + 1; + const currentLevel = levels[level]; + if (currentLevel !== undefined) setMap(currentLevel); + } +}); +afterInput(() => { + const numberCovered = tilesWith(portal, box).length; + const targetNumber = tilesWith(portal).length; + + if (numberCovered === targetNumber) { + level = level + 1; + + const currentLevel = levels[level]; + + if (currentLevel !== undefined) { + setMap(currentLevel); + } else { + addText("you win!", { y: 4, color: color`3` }); + } + } +}); diff --git a/games/Jet_Box.js b/games/Jet_Box.js index 79fb1a2948..c9bd96cbaa 100644 --- a/games/Jet_Box.js +++ b/games/Jet_Box.js @@ -1,8 +1,8 @@ /* @title: Jet_Box -@tags: ['puzzle-score'] -@addedOn: 2022-12-03 @author: Hugh Wilks +@tags: ['puzzle'] +@addedOn: 2022-12-03 Instructions: diff --git a/games/Juice_Clicker.js b/games/Juice_Clicker.js index 7609e6afee..cfa85b8b6b 100644 --- a/games/Juice_Clicker.js +++ b/games/Juice_Clicker.js @@ -1,8 +1,8 @@ /* @title: Juice Clicker +@author: ikejlemieux @tags: [] @addedOn: 2024-07-29 -@author: ikejlemieux */ const player = "p"; diff --git a/games/Jumper.js b/games/Jumper.js index 9f844e88bf..42e5887363 100644 --- a/games/Jumper.js +++ b/games/Jumper.js @@ -1,8 +1,8 @@ /* @title: Jumper +@author: TC @tags: ['endless'] @addedOn: 2022-11-13 -@author: TC */ const player = "p"; diff --git a/games/Knight_Post.js b/games/Knight_Post.js index 9b72725e07..efa6b67f6b 100644 --- a/games/Knight_Post.js +++ b/games/Knight_Post.js @@ -1,8 +1,8 @@ /* @title: Knight Post -@tags: ['sokoban-style'] -@addedOn: 2023-10-23 @author: Aditya P Venugopal +@tags: ['puzzle'] +@addedOn: 2023-10-23 Keys: - W to move forward - A to move left diff --git a/games/L0st.js b/games/L0st.js index 816c9692a6..34e323bd66 100644 --- a/games/L0st.js +++ b/games/L0st.js @@ -1,8 +1,8 @@ /*... -@title: L0st -@tags: ['puzzle-npc'] -@addedOn: 2022-11-07 +@title: L0st @author: B00 +@tags: ['puzzle'] +@addedOn: 2022-11-07 @Instructi0ns: WASD to move, I to restart level, K to talk, Get to the green and black thing (that looks like a cabbage), Push orange and blue things. */ diff --git a/games/LUCK.js b/games/LUCK.js index 2e1b5687fa..9d8849b9ab 100644 --- a/games/LUCK.js +++ b/games/LUCK.js @@ -1,8 +1,8 @@ /* @title: LUCK -@tags: ['sokoban-style'] -@addedOn: 2022-09-28 @author: Ethan +@tags: ['puzzle'] +@addedOn: 2022-09-28 */ const player = "p"; diff --git a/games/Labyrinth.js b/games/Labyrinth.js index a923a00475..147d49f32c 100644 --- a/games/Labyrinth.js +++ b/games/Labyrinth.js @@ -1,8 +1,8 @@ /* @title: Labyrinth -@tags: ['sokoban-style'] -@addedOn: 2023-02-12 @author: DorukSarpAlwaysStrikesBack! +@tags: ['puzzle'] +@addedOn: 2023-02-12 */ const player = "p"; diff --git a/games/Labyrinth2.js b/games/Labyrinth2.js index 244f3c6756..92abcc4fa3 100644 --- a/games/Labyrinth2.js +++ b/games/Labyrinth2.js @@ -1,8 +1,8 @@ /* @title: Labyrinth2 -@tags: ['sokoban-style'] -@addedOn: 2023-02-14 @author: DorukSarpAlwaysStrikesBack! +@tags: ['puzzle'] +@addedOn: 2023-02-14 */ const player = "p"; diff --git a/games/Labyrinth3.js b/games/Labyrinth3.js index 9447a46a51..461b5439ed 100644 --- a/games/Labyrinth3.js +++ b/games/Labyrinth3.js @@ -1,8 +1,8 @@ /* @title: Labyrinth3 -@tags: ['sokoban-style'] -@addedOn: 2023-03-01 @author: DorukSarpAlwaysStrikesBack! +@tags: ['puzzle'] +@addedOn: 2023-03-01 */ const player = "p"; diff --git a/games/LabyrinthBoardGame.js b/games/LabyrinthBoardGame.js new file mode 100644 index 0000000000..3c5a44fc44 --- /dev/null +++ b/games/LabyrinthBoardGame.js @@ -0,0 +1,1053 @@ +/* +@title: LabyrinthBoardGame +@author: rivques +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +// a port of the Labyrinth board game to Sprig. +// instructions: https://rivques.dev/hackclub/labyrinth + +// game pieces: +// 16x16, with 8-wide channels +// all non-corner statics contain artifact +// all edge statics point in +// central statics point in a loop at each other +// dynaics: +// 12 straights, no artifacts +// 6 Ts, 6 artifacts +// 16 Ls, 6 artifacts +// artifacts: 6x6, brown, purple, orange, and pink OF: +// plus, circle, square, stripes, checkers, smiley + +// convention: bx or by is in board coordinates, x or y is in pixel coordinates + +let gameState = "MENU"; // MENU, MOVE_PLAYER, INSERT_TILE, PLAYER_MOVING, PASS_SPRIG, GAME_OVER +let activePlayer = "RED"; // RED, BLUE, GREEN, YELLOW + +const BOARD_OFFSET_X = 3; +const BOARD_OFFSET_Y = 1; + +const SPRITE_TEMPLATES = { + "maze_piece_|": bitmap` +0000.11..11.0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000........0000 +0000.11..11.0000`, + "maze_piece_T": bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +................ +1..............1 +1..............1 +................ +................ +1..............1 +1..............1 +................ +0000........0000 +0000........0000 +0000........0000 +0000.11..11.0000`, + "maze_piece_L": bitmap` +0000.11..11.0000 +0000........0000 +0000........0000 +0000........0000 +0000............ +0000...........1 +0000...........1 +0000............ +0000............ +0000...........1 +0000...........1 +0000............ +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`, + "artifact_plus": bitmap` +................ +................ +................ +................ +................ +.......00....... +.......00....... +.....000000..... +.....000000..... +.......00....... +.......00....... +................ +................ +................ +................ +................`, + "artifact_circle": bitmap` +................ +................ +................ +................ +................ +.......00....... +......0000...... +.....000000..... +.....000000..... +......0000...... +.......00....... +................ +................ +................ +................ +................`, + "artifact_square": bitmap` +................ +................ +................ +................ +................ +.....000000..... +.....000000..... +.....000000..... +.....000000..... +.....000000..... +.....000000..... +................ +................ +................ +................ +................`, + "artifact_stripes": bitmap` +................ +................ +................ +................ +................ +.....00..00..... +.....00..00..... +.....00..00..... +.....00..00..... +.....00..00..... +.....00..00..... +................ +................ +................ +................ +................`, + "artifact_checkers": bitmap` +................ +................ +................ +................ +................ +.....00..00..... +.....00..00..... +.......00....... +.......00....... +.....00..00..... +.....00..00..... +................ +................ +................ +................ +................`, + "artifact_smiley": bitmap` +................ +................ +................ +................ +................ +.....00..00..... +.....00..00..... +.....00..00..... +.....00..00..... +.....000000..... +.....000000..... +................ +................ +................ +................ +................`, + "meeple": bitmap` +................ +................ +................ +................ +....00000000.... +....0......0.... +....0......0.... +....0......0.... +....0......0.... +....0......0.... +....0......0.... +....00000000.... +................ +................ +................ +................`, + "person_icon": bitmap` +................ +................ +.......000000... +.......0....0... +.......0....0... +.......0....0... +.......0....0... +.......000000... +........0..0.... +.......00..00... +.....000....000. +.....0........0. +.....0........0. +................ +................ +................`, + "selector": bitmap` +................ +.00000000000000. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.0............0. +.00000000000000. +................` +} +const COLOR_ABBRS = { + "brown": "C", + "purple": "H", + "orange": "9", + "pink": "8", + "RED": "3", + "BLUE": "5", + "GREEN": "D", + "YELLOW": "6" +} + +let legend = [ + ["@", bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222`], + ["?", bitmap` +LLL..........LLL +L..............L +L..............L +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +L..............L +L..............L +LLL..........LLL`] +]; +let SPRITE_ABBRS = { + "static_marker": "?", + "white_out": "@" +} +// generate names +let current_char = "A" +for (const shape of ["T", "L", "|"]) { + for (const rotation of [0, 90, 180, 270]) { + // generate sprite: rotate template string by rotation + // sprites are 16x16 strings plus a newline every 16 characters, so 17 characters per line + let sprite = SPRITE_TEMPLATES["maze_piece_" + shape].slice(); + for (let i = 0; i < rotation / 90; i++) { + new_sprite = "\n"; + for (let new_y = 0; new_y < 16; new_y++) { + for (let new_x = 0; new_x < 16; new_x++) { + new_sprite += sprite[1 + (15 - new_x) * 17 + new_y]; + //console.log(`Putting ${sprite[1+(15 - new_x) * 17 + new_y]} at ${new_sprite.length - 1} (${new_x}, ${new_y}) (from original ${(15 - new_x) * 17 + new_y} (${new_y}, ${15-new_x}))`); + } + new_sprite += "\n"; + } + sprite = new_sprite; + } + legend.push([current_char, sprite]); + + SPRITE_ABBRS["maze_piece_" + shape + "_" + rotation] = current_char; + current_char = String.fromCharCode(current_char.charCodeAt(0) + 1); + } +} +for (const artifact of ["plus", "circle", "square", "stripes", "checkers", "smiley"]) { + for (const color of ["brown", "purple", "orange", "pink"]) { + // generate sprite: replace 0s in template with color + let sprite = SPRITE_TEMPLATES["artifact_" + artifact]; + sprite = sprite.split('').map(char => char === '0' ? COLOR_ABBRS[color] : char).join(''); + legend.push([current_char, sprite]); + + SPRITE_ABBRS["artifact_" + color + "_" + artifact] = current_char; + current_char = String.fromCharCode(current_char.charCodeAt(0) + 1); + } +} +for (const player of ["RED", "BLUE", "GREEN", "YELLOW"]) { + for (const version of ["meeple", "person_icon", "selector"]) { + // generate sprite: replace 0s in template with color + let sprite = SPRITE_TEMPLATES[version].slice(); + //console.log(`${current_char} will have color ${COLOR_ABBRS[player]} (from ${player})`); + sprite = sprite.split('').map(char => char === '0' ? COLOR_ABBRS[player] : char).join(''); + legend.push([current_char, sprite]) + + SPRITE_ABBRS[version + "_" + player] = current_char; + current_char = String.fromCharCode(current_char.charCodeAt(0) + 1); + //console.log(`assigning ${current_char} next...`) + } +} +console.log(`Number of sprites: ${Object.values(SPRITE_ABBRS).length}`); + +setLegend(...legend); + +function randomChoice(arr) { + return arr[Math.floor(arr.length * Math.random())]; +} + +function shuffle(array) { + let currentIndex = array.length; + + // While there remain elements to shuffle... + while (currentIndex != 0) { + + // Pick a remaining element... + let randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex--; + + // And swap it with the current element. + [array[currentIndex], array[randomIndex]] = [ + array[randomIndex], array[currentIndex]]; + } +} + +class Player { + constructor(color, pos_b, artifacts) { + this.color = color; + this.artifacts = artifacts; + // workaround for addSprite not returning a sprite + addSprite(0, 0, SPRITE_ABBRS["meeple_" + color]); + this.sprite = getTile(0, 0).filter(sprite => sprite.type == SPRITE_ABBRS["meeple_" + color])[0]; + this.sprite.x = BOARD_OFFSET_X + pos_b[0]; + this.sprite.y = BOARD_OFFSET_Y + pos_b[1]; + this.pos_b = pos_b; + } + set pos_b(new_pos_b) { + this.sprite.x = BOARD_OFFSET_X + new_pos_b[0]; + this.sprite.y = BOARD_OFFSET_Y + new_pos_b[1]; + this._pos_b = new_pos_b; + } + get pos_b() { + return this._pos_b; + } +} + +class MazePiece { + constructor(type, rotation, pos_b, is_static, artifact) { + this.type = type; // "|", "L", "T" + this.is_static = is_static; + this.artifact = artifact; + addSprite(0, 0, SPRITE_ABBRS["maze_piece_" + type + "_" + rotation]); + this.sprite = getTile(0, 0).filter(sprite => sprite.type == SPRITE_ABBRS["maze_piece_" + type + "_" + rotation])[0]; + this.sprite.x = BOARD_OFFSET_X + pos_b[0]; + this.sprite.y = BOARD_OFFSET_Y + pos_b[1]; + this._rotation = rotation; // 0, 90, 180, 270 + this._pos_b = pos_b; + if (this.artifact) { + this.artifact.sprite.x = BOARD_OFFSET_X + pos_b[0]; + this.artifact.sprite.y = BOARD_OFFSET_Y + pos_b[1]; + } + + if (is_static) { + addSprite(pos_b[0] + BOARD_OFFSET_X, pos_b[1] + BOARD_OFFSET_Y, SPRITE_ABBRS["static_marker"]); + } + } + set pos_b(new_pos_b) { + if (this.is_static) { + return; + } + this.sprite.x = BOARD_OFFSET_X + new_pos_b[0]; + this.sprite.y = BOARD_OFFSET_Y + new_pos_b[1]; + this._pos_b = new_pos_b; + if (this.artifact) { + // move artifact with maze piece + this.artifact.sprite.x = BOARD_OFFSET_X + new_pos_b[0]; + this.artifact.sprite.y = BOARD_OFFSET_Y + new_pos_b[1]; + } + } + get pos_b() { + return this._pos_b; + } + set rotation(new_rotation) { + this.sprite.remove(); + addSprite(0, 0, SPRITE_ABBRS["maze_piece_" + this.type + "_" + new_rotation]); + this.sprite = getTile(0, 0).filter(sprite => sprite.type == SPRITE_ABBRS["maze_piece_" + this.type + "_" + new_rotation])[0]; + this.sprite.x = BOARD_OFFSET_X + this.pos_b[0]; + this.sprite.y = BOARD_OFFSET_Y + this.pos_b[1]; + this._rotation = new_rotation; + } + get rotation() { + return this._rotation; + } +} + +class Artifact { + constructor(id, pos_b) { + this.id = id; + //console.log(`Creating artifact ${id} at ${pos_b}`); + addSprite(0, 0, SPRITE_ABBRS[id]); + this.sprite = getTile(0, 0).filter(sprite => sprite.type == SPRITE_ABBRS[id])[0]; + this.sprite.x = BOARD_OFFSET_X + pos_b[0]; + this.sprite.y = BOARD_OFFSET_Y + pos_b[1]; + } +} + +const HELD_PIECE_POS_B = [-2, 1]; +const HELD_ARTIFACT_POS_B = [-2, 4]; + +const INSERT_POSITIONS = [[1, 0], [3, 0], [5, 0], [6, 1], [6, 3], [6, 5], [5, 6], [3, 6], [1, 6], [0, 5], [0, 3], [0, 1]]; + +class Board { + constructor(num_players) { + let artifact_names = []; + for (let color of ["brown", "purple", "orange", "pink"]) { + for (let artifact of ["plus", "circle", "square", "stripes", "checkers", "smiley"]) { + artifact_names.push("artifact_" + color + "_" + artifact); + } + } + shuffle(artifact_names); + this.players = []; + const artifacts_per_player = Math.floor(artifact_names.length / num_players); + const player_start_positions = [[0, 0], [6, 6], [6, 0], [0, 6]]; + for (let i = 0; i < num_players; i++) { + this.players.push(new Player(["RED", "BLUE", "GREEN", "YELLOW"][i], player_start_positions[i], artifact_names.slice(i * artifacts_per_player, (i + 1) * artifacts_per_player))); + addSprite(BOARD_OFFSET_X + 2*i, BOARD_OFFSET_Y-1, SPRITE_ABBRS["person_icon_" + ["RED", "BLUE", "GREEN", "YELLOW"][i]]); + console.log(`Player ${["RED", "BLUE", "GREEN", "YELLOW"][i]} has artifacts ${this.players[i].artifacts}`); + } + this.activePlayer = 0; + addSprite(BOARD_OFFSET_X + HELD_ARTIFACT_POS_B[0], BOARD_OFFSET_Y + HELD_ARTIFACT_POS_B[1], SPRITE_ABBRS[this.players[this.activePlayer].artifacts[0]]); + this.update_aux_info(); + + let artifacts = []; + for (let name of artifact_names) { + artifacts.push(new Artifact(name, [0, 0])); + } + shuffle(artifacts); + this.maze_pieces = [ + // corners + new MazePiece("L", 90, [0, 0], true, null), + new MazePiece("L", 180, [6, 0], true, null), + new MazePiece("L", 270, [6, 6], true, null), + new MazePiece("L", 0, [0, 6], true, null), + // edges + new MazePiece("T", 0, [2, 0], true, artifacts.pop()), + new MazePiece("T", 0, [4, 0], true, artifacts.pop()), + new MazePiece("T", 90, [6, 2], true, artifacts.pop()), + new MazePiece("T", 90, [6, 4], true, artifacts.pop()), + new MazePiece("T", 180, [2, 6], true, artifacts.pop()), + new MazePiece("T", 180, [4, 6], true, artifacts.pop()), + new MazePiece("T", 270, [0, 2], true, artifacts.pop()), + new MazePiece("T", 270, [0, 4], true, artifacts.pop()), + // central + new MazePiece("T", 270, [2, 2], true, artifacts.pop()), + new MazePiece("T", 0, [4, 2], true, artifacts.pop()), + new MazePiece("T", 90, [4, 4], true, artifacts.pop()), + new MazePiece("T", 180, [2, 4], true, artifacts.pop()) + ]; + let dynamic_maze_pieces = []; + for (let i = 0; i < 6; i++) { + dynamic_maze_pieces.push(new MazePiece("T", randomChoice([0, 90, 180, 270]), [0, 0], false, artifacts.pop())); + } + for (let i = 0; i < 16; i++) { + dynamic_maze_pieces.push(new MazePiece("L", randomChoice([0, 90, 180, 270]), [0, 0], false, i < 6 ? artifacts.pop() : null)); + } + for (let i = 0; i < 12; i++) { + dynamic_maze_pieces.push(new MazePiece("|", randomChoice([0, 90, 180, 270]), [0, 0], false, null)); + } + shuffle(dynamic_maze_pieces); + // use all but one of the the dynamics fill in the gaps in the statics (gaps are when at least one coord is one of 1, 3, 5) + let dynamic_index = 0; + for (let bx = 0; bx < 7; bx++) { + for (let by = 0; by < 7; by++) { + if (bx % 2 == 1 || by % 2 == 1) { + this.maze_pieces.push(dynamic_maze_pieces[dynamic_index]); + dynamic_maze_pieces[dynamic_index].pos_b = [bx, by]; + dynamic_index++; + } + } + } + console.log(this.maze_pieces) + console.log(`used ${dynamic_index} dynamic pieces to fill, leaving ${dynamic_maze_pieces.length-dynamic_index} piece to hold`); + + // set the last dynamic to the held piece + this.held_piece = dynamic_maze_pieces[dynamic_index]; + this.held_piece.pos_b = HELD_PIECE_POS_B; + this.disallowed_insertion = [-1, -1]; + this.show_pass_screen(); + } + push_maze_piece(insert_pos_b) { + // a bunch of math... + // step 0. get an array of all maze pieces in the row + // step 4. move any players along the row + // step 5. move piece from holding position to the main held position + // step 6. update disallowed insertion + + let is_vertical = insert_pos_b[1] % 2 == 0; + let is_backwards = is_vertical ? insert_pos_b[1] == 6 : insert_pos_b[0] == 6; + + let row_pieces = this.maze_pieces.filter(piece => is_vertical ? piece.pos_b[0] == insert_pos_b[0] : piece.pos_b[1] == insert_pos_b[1]); + row_pieces.sort((a, b) => is_vertical ? a.pos_b[1] - b.pos_b[1] : a.pos_b[0] - b.pos_b[0]); + if (is_backwards) { + row_pieces.reverse(); + } + if (row_pieces.length > 8) { + // something went wrong + console.log("AAAA ROW MORE THAN 8 AAAA") + console.log(row_pieces) + console.log(insert_pos_b) + return; + } + + let new_locations = row_pieces.map(piece => piece.pos_b); + new_locations.push(this.held_piece.pos_b); + row_pieces.unshift(this.held_piece); + console.log(row_pieces) + console.log("are moving to") + console.log(new_locations) + + for (let i = 0; i < row_pieces.length; i++) { + row_pieces[i].pos_b = new_locations[i]; + } + + // update info + this.maze_pieces.push(this.held_piece); + this.held_piece = row_pieces.pop(); + this.maze_pieces = this.maze_pieces.filter(piece => piece != this.held_piece); + this.disallowed_insertion = is_vertical ? [insert_pos_b[0], is_backwards ? 0 : 6] : [is_backwards ? 0 : 6, insert_pos_b[1]]; + + // move players + for (let player of this.players) { + if (is_vertical && player.pos_b[0] == insert_pos_b[0]) { + let new_pos_b = [player.pos_b[0], player.pos_b[1] + (is_backwards ? -1 : 1)]; + if (new_pos_b[1] < 0) { + new_pos_b[1] = 6; + } else if (new_pos_b[1] > 6) { + new_pos_b[1] = 0; + } + console.log(`Moving player ${player.color} from ${player.pos_b} to ${new_pos_b}`); + player.pos_b = new_pos_b; + } else if (!is_vertical && player.pos_b[1] == insert_pos_b[1]) { + let new_pos_b = [player.pos_b[0] + (is_backwards ? -1 : 1), player.pos_b[1]]; + if (new_pos_b[0] < 0) { + new_pos_b[0] = 6; + } else if (new_pos_b[0] > 6) { + new_pos_b[0] = 0; + } + console.log(`Moving player ${player.color} from ${player.pos_b} to ${new_pos_b}`); + player.pos_b = new_pos_b; + } + } + + this.calculate_valid_paths() + } + update_aux_info(){ + // this includes things like redrawing the player's scores and the current artifact target + clearText() + let SCORE_X_POS; + if (this.players.length == 4){ + SCORE_X_POS = [8, 10, 16, 18]; + } else { + SCORE_X_POS = [8, 12, 16]; + } + for (let i = 0; i < this.players.length; i++) { + let player = this.players[i]; + let score = player.artifacts.length; + addText(score.toString(), {x: SCORE_X_POS[i], y: BOARD_OFFSET_Y - 1, color: COLOR_ABBRS[player.color]}); + } + addText(`${this.players[this.activePlayer].color}\nTURN`, {x: 0, y: 0, color: COLOR_ABBRS[this.players[this.activePlayer].color]}); + getTile(BOARD_OFFSET_X + HELD_ARTIFACT_POS_B[0], BOARD_OFFSET_Y + HELD_ARTIFACT_POS_B[1])[0].type = SPRITE_ABBRS[this.players[this.activePlayer].artifacts[0]]; + addText("held\ntile", {x: 1, y: 2, color: "0"}); + addText("your\narti\nfact", {x: 1, y: 7, color: "0"}); + if (gameState == "MOVE_PLAYER") { + addText("MOVE\nPLA-\nYER", {x: 1, y: 13, color: COLOR_ABBRS[this.players[this.activePlayer].color]}); + } else if (gameState == "INSERT_TILE") { + addText("MOVE\nTILE", {x: 1, y: 13, color: COLOR_ABBRS[this.players[this.activePlayer].color]}); + } + } + show_pass_screen() { + clearText(); + // put a white_out on every tile + for (let x = 0; x < 10; x++) { + for (let y = 0; y < 8; y++) { + addSprite(x, y, SPRITE_ABBRS["white_out"]); + } + } + addText(`PASS SPRIG TO ${this.players[this.activePlayer].color}`, {x: 0, y: 5, color: COLOR_ABBRS[this.players[this.activePlayer].color]}); + addText("PRESS L WHEN READY", {x: 1, y: 10, color: "0"}); + } + clear_white_out() { + for(let sprite of getAll(SPRITE_ABBRS["white_out"])) { + sprite.remove(); + } + } + calculate_valid_paths() { + // step 1. construct graph of board + // step 2. dijkstra's algorithm from active player's position + // step 3. set this.pathfinding_results to the result + + // Initialize the graph as a 7x7 grid where each cell contains an empty array + console.log("Calculating valid paths"); + let graph_pass_1 = []; // this doesn't have verified paths yet + for (let x = 0; x < 7; x++) { + graph_pass_1.push([]); + for (let y = 0; y < 7; y++) { + graph_pass_1[x].push([]); // an array to be filled with coords of neighbors + // Populate the graph with adjacent cells (up, down, left, right) + const maze_piece = this.maze_pieces.find(piece => piece.pos_b[0] == x && piece.pos_b[1] == y); + // figure out which neighbors we _might_ have given our shape and rotation + let neighbor_candidates = []; + if (maze_piece.type == "L") { + if (maze_piece.rotation == 0) { + neighbor_candidates = [[1, 0], [0, -1]]; + } else if (maze_piece.rotation == 90) { + neighbor_candidates = [[0, 1], [1, 0]]; + } else if (maze_piece.rotation == 180) { + neighbor_candidates = [[-1, 0], [0, 1]]; + } else if (maze_piece.rotation == 270) { + neighbor_candidates = [[0, -1], [-1, 0]]; + } + } + if (maze_piece.type == "T") { + if (maze_piece.rotation == 0) { + neighbor_candidates = [[1, 0], [0, 1], [-1, 0]]; + } else if (maze_piece.rotation == 90) { + neighbor_candidates = [[0, -1], [-1, 0], [0, 1]]; + } else if (maze_piece.rotation == 180) { + neighbor_candidates = [[-1, 0], [0, -1], [1, 0]]; + } else if (maze_piece.rotation == 270) { + neighbor_candidates = [[0, -1], [1, 0], [0, 1]]; + } + } + if (maze_piece.type == "|") { + if (maze_piece.rotation == 0) { + neighbor_candidates = [[0, -1], [0, 1]]; + } else if (maze_piece.rotation == 90) { + neighbor_candidates = [[1, 0], [-1, 0]]; + } else if (maze_piece.rotation == 180) { + neighbor_candidates = [[0, -1], [0, 1]]; + } else if (maze_piece.rotation == 270) { + neighbor_candidates = [[1, 0], [-1, 0]]; + } + } + for (let neighbor_candidate of neighbor_candidates) { + let neighbor_x = x + neighbor_candidate[0]; + let neighbor_y = y + neighbor_candidate[1]; + if (neighbor_x >= 0 && neighbor_x < 7 && neighbor_y >= 0 && neighbor_y < 7) { + graph_pass_1[x][y].push([neighbor_x, neighbor_y]); + } + } + } + } + console.log("Graph pass 1:"); + console.log(graph_pass_1); + + let graph_pass_2 = []; // this has verified paths + // only tiles which have each other as neighbors are valid + for (let x = 0; x < 7; x++) { + graph_pass_2.push([]); + for (let y = 0; y < 7; y++) { + graph_pass_2[x].push([]); + for (let neighbor of graph_pass_1[x][y]) { + if (graph_pass_1[neighbor[0]][neighbor[1]].find(neighbor_of_neighbor => neighbor_of_neighbor[0] == x && neighbor_of_neighbor[1] == y)) { + graph_pass_2[x][y].push(neighbor); + } + } + } + } + console.log("Graph pass 2:"); + console.log(graph_pass_2); + + // Initialize the visited array as a 7x7 grid with all values set to false + let visited = []; + for (let x = 0; x < 7; x++) { + visited.push([]); + for (let y = 0; y < 7; y++) { + visited[x].push(false); + } + } + + // Initialize the queue with the starting position of the active player + let queue = [[this.players[this.activePlayer].pos_b]]; + + // Initialize the pathfinding results as a 7x7 grid with empty arrays + let pathfinding_results = []; + for (let x = 0; x < 7; x++) { + pathfinding_results.push([]); + for (let y = 0; y < 7; y++) { + pathfinding_results[x].push([]); + } + } + + // Perform Breadth-First Search (BFS) to find the shortest path to each cell + while (queue.length > 0) { + let path = queue.shift(); // Dequeue the first path + let current_pos = path[path.length - 1]; // Get the current position + let current_x = current_pos[0]; + let current_y = current_pos[1]; + if (visited[current_x][current_y]) { + continue; // Skip if the cell is already visited + } + visited[current_x][current_y] = true; // Mark the cell as visited + pathfinding_results[current_x][current_y] = path; // Store the path to the current cell + // Enqueue all unvisited neighbors + for (let neighbor of graph_pass_2[current_x][current_y]) { + if (!visited[neighbor[0]][neighbor[1]]) { + queue.push(path.concat([neighbor])); + } + } + } + + // Store the pathfinding results in the object and log them + this.pathfinding_results = pathfinding_results; + console.log("Pathfinding results:"); + console.log(this.pathfinding_results); + } + animate_player_move(path){ + const move_sound = tune` +187.5: C5^187.5, +5812.5` + // todo: implement + // for now just jump to the end + this.active_path = path; + this.active_path_index = 0; + console.log(`Animating player move along path ${path}`); + + let interval = setInterval(() => { + let player = this.players[this.activePlayer]; + player.pos_b = path[this.active_path_index]; + console.log(`Moving player ${player.color} to ${player.pos_b}`); + playTune(move_sound, 1) + this.active_path_index++; + if (this.active_path_index == path.length) { + clearInterval(interval); + this.check_artifact_success(); + } + }, 500); + } + check_artifact_success() { + const artifact_sound = tune` +167.5977653631285: A4-167.5977653631285, +167.5977653631285: B4-167.5977653631285, +167.5977653631285: C5-167.5977653631285, +167.5977653631285: C5-167.5977653631285, +167.5977653631285: C5-167.5977653631285, +4525.139664804469` + const win_sound = tune` +181.8181818181818: G4-181.8181818181818, +181.8181818181818: G4-181.8181818181818, +181.8181818181818: A4-181.8181818181818, +181.8181818181818: C5-181.8181818181818, +181.8181818181818, +181.8181818181818: A4-181.8181818181818, +181.8181818181818: C5-181.8181818181818, +4545.454545454545` + let player = this.players[this.activePlayer]; + console.log(`Checking for artifact at ${player.pos_b}`); + let player_piece = this.maze_pieces.find(piece => piece.pos_b[0] == player.pos_b[0] && piece.pos_b[1] == player.pos_b[1]); + console.log(player_piece); + let artifact = player_piece.artifact; + if (artifact && artifact.id == player.artifacts[0]) { + player.artifacts.shift(); + artifact.sprite.remove(); + player_piece.artifact = null; + playTune(artifact_sound, 1); + }; + setTimeout(() => { + if (player.artifacts.length == 0) { + playTune(win_sound, 1) + this.show_game_over(); + } else { + this.activePlayer = (this.activePlayer + 1) % this.players.length; + gameState = "PASS_SPRIG"; + this.show_pass_screen(); + } + }, 1000); + } + show_game_over() { + for (let x = 0; x < 10; x++) { + for (let y = 0; y < 8; y++) { + addSprite(x, y, SPRITE_ABBRS["white_out"]); + } + } + clearText(); + addText("GAME OVER", {x: 3, y: 3, color: "0"}); + addText(`${this.players[this.activePlayer].color} WINS`, {x: 3, y: 5, color: COLOR_ABBRS[this.players[this.activePlayer].color]}); + gameState = "GAME_OVER"; + } +} + +// flow: +// select # of players +// press start +// "pass to RED" +// RED presses "RED is ready" +// RED uses A/D and W/S to rotate their piece and choose where to insert it, then presses L to confirm (can't undo the last move) +// RED optionally uses WASD to select a VALID place to move to, then presses L to confirm +// if RED lands on their artifact, they collect it +// "pass to BLUE" +// etc. + +// startup: +// dynamically create artifact and player sprites, and tile rotations + +// start game: +// split up artifacts +// create players and maze pieces +// randomize dynamic maze pieces + +// on maze shift: +// check if shift is valid + +let level = map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +.......... +` +setMap(level) +setSolids([]) + +setPushables({}) +let board; +let num_players = 2; + +function showMenu() { + clearText(); + for (let sprite of getAll()) { + sprite.remove(); + } + addText("LABYRINTH", {x: 6, y: 1, color: color`0`}); + addText("SELECT # OF PLAYERS", {x: 1, y: 3, color: color`3`}); + addText("(USE W/S):", {x: 6, y: 4, color: color`3`}); + addText(num_players.toString(), {x: 10, y: 6, color: color`3`}); + addText("PRESS L TO START", {x: 2, y: 10, color: color`D`}); + addText("INSTRUCTIONS:", {x: 3, y: 12, color: color`5`}); + addText("rivques.dev/lbrnth", {x: 1, y: 13, color: color`5`}); +} + +showMenu(); + + +const sad_sound = tune`D` +onInput("l", () => { + console.log(`Got L, game state is ${gameState}`); + // L is always "attempt to move to next state" + // PLAYER_MOVING is a cutscene, no input counts + if (gameState == "PLAYER_MOVING") { + return; + }; + if (gameState == "PASS_SPRIG") { + board.clear_white_out(); + gameState = "INSERT_TILE"; + board.update_aux_info(); + current_player = board.players[board.activePlayer]; + addSprite(BOARD_OFFSET_X + INSERT_POSITIONS[0][0], BOARD_OFFSET_Y + INSERT_POSITIONS[0][1], SPRITE_ABBRS["selector_" + current_player.color]); + return; + }; + if (gameState == "MENU") { + board = new Board(num_players); + gameState = "PASS_SPRIG"; + return; + } + if (gameState == "INSERT_TILE") { + // insert tile + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos_b = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + if (selector_pos_b[0] == board.disallowed_insertion[0] && selector_pos_b[1] == board.disallowed_insertion[1]) { + playTune(sad_sound, 1) + return; + } + + board.push_maze_piece(selector_pos_b); + selector.x = board.players[board.activePlayer].pos_b[0] + BOARD_OFFSET_X; + selector.y = board.players[board.activePlayer].pos_b[1] + BOARD_OFFSET_Y; + gameState = "MOVE_PLAYER"; + board.update_aux_info(); + return; + } + if (gameState == "MOVE_PLAYER") { + // move player + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos_b = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + let player = board.players[board.activePlayer]; + if (board.pathfinding_results[selector_pos_b[0]][selector_pos_b[1]].length == 0) { + // invalid move + playTune(sad_sound, 1) + return; + } + gameState = "PLAYER_MOVING"; + selector.remove(); + board.animate_player_move(board.pathfinding_results[selector_pos_b[0]][selector_pos_b[1]]); + } + if (gameState == "GAME_OVER") { + // restart + showMenu(); + gameState = "MENU"; + } +}) + +onInput("w", () => { + console.log(`Got W, game state is ${gameState}`); + if (gameState == "MENU") { + num_players = Math.min(4, num_players + 1); + showMenu(); + return; + } + if (gameState == "INSERT_TILE") { + // select new insertion position + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + let new_index = INSERT_POSITIONS.findIndex((pos) => pos[0] == selector_pos[0] && pos[1] == selector_pos[1]) + 1; + if (new_index >= INSERT_POSITIONS.length) { + new_index = 0; + } + selector.x = BOARD_OFFSET_X + INSERT_POSITIONS[new_index][0]; + selector.y = BOARD_OFFSET_Y + INSERT_POSITIONS[new_index][1]; + return; + } + if (gameState == "MOVE_PLAYER") { + // move player + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + let new_pos = [selector_pos[0], selector_pos[1]-1]; + if (new_pos[1] <= 0) { + new_pos[1] = 0; + } + selector.x = BOARD_OFFSET_X + new_pos[0]; + selector.y = BOARD_OFFSET_Y + new_pos[1]; + return; + } +}) + +onInput("s", () => { + console.log(`Got S, game state is ${gameState}`); + if (gameState == "MENU") { + num_players = Math.max(2, num_players - 1); + showMenu(); + return; + } + if (gameState == "INSERT_TILE") { + // select new insertion position + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + let new_index = INSERT_POSITIONS.findIndex((pos) => pos[0] == selector_pos[0] && pos[1] == selector_pos[1]) - 1; + if (new_index < 0) { + new_index = INSERT_POSITIONS.length - 1; + } + selector.x = BOARD_OFFSET_X + INSERT_POSITIONS[new_index][0]; + selector.y = BOARD_OFFSET_Y + INSERT_POSITIONS[new_index][1]; + return; + } + if (gameState == "MOVE_PLAYER") { + // move player + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + let new_pos = [selector_pos[0], selector_pos[1]+1]; + if (new_pos[1] >= 6) { + new_pos[1] = 6; + } + selector.x = BOARD_OFFSET_X + new_pos[0]; + selector.y = BOARD_OFFSET_Y + new_pos[1]; + return; + } +}) + +onInput("d", () => { + console.log(`Got D, game state is ${gameState}`); + if (gameState == "INSERT_TILE") { + // rotate held piece + board.held_piece.rotation = (board.held_piece.rotation + 90) % 360; + return; + } + if (gameState == "MOVE_PLAYER") { + // move player + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + let new_pos = [selector_pos[0]+1, selector_pos[1]]; + if (new_pos[0] >= 6) { + new_pos[0] = 6; + } + selector.x = BOARD_OFFSET_X + new_pos[0]; + selector.y = BOARD_OFFSET_Y + new_pos[1]; + return; + } +}) + +onInput("a", () => { + console.log(`Got A, game state is ${gameState}`); + if (gameState == "INSERT_TILE") { + // rotate held piece + board.held_piece.rotation = (board.held_piece.rotation + 270) % 360; + return; + } + if (gameState == "MOVE_PLAYER") { + // move player + let selector = getFirst(SPRITE_ABBRS["selector_" + board.players[board.activePlayer].color]); + let selector_pos = [selector.x - BOARD_OFFSET_X, selector.y - BOARD_OFFSET_Y]; + let new_pos = [selector_pos[0]-1, selector_pos[1]]; + if (new_pos[0] <= 0) { + new_pos[0] = 0; + } + selector.x = BOARD_OFFSET_X + new_pos[0]; + selector.y = BOARD_OFFSET_Y + new_pos[1]; + return; + } +}) + +afterInput(() => { + +}) + diff --git a/games/LaserGuide.js b/games/LaserGuide.js index e8a87a56c3..999718a77f 100644 --- a/games/LaserGuide.js +++ b/games/LaserGuide.js @@ -1,12 +1,12 @@ /* +@title: LaserGuide +@author: Extner +@tags: ['puzzle','action'] +@addedOn: 2024-05-20 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started -@title: LaserGuide -@author: Extner -@tags: ['laser', 'puzzle'] @img: "" -@addedOn: 2024-05-20 */ const BACKGROUND = "0" diff --git a/games/Lava_and_Water.js b/games/Lava_and_Water.js index 8610aa2f49..e0ab860e58 100644 --- a/games/Lava_and_Water.js +++ b/games/Lava_and_Water.js @@ -1,8 +1,8 @@ /* -@title: Lava and Water -@tags: ['puzzle-2players', 'classic'] +@title: Lava and Water +@author: Akeell +@tags: ['puzzle','multiplayer','retro'] @addedOn: 2022-10-15 -@author: Akeell */ /* diff --git a/games/Lava_the_impossible_maze.js b/games/Lava_the_impossible_maze.js index 27eb75b197..6acb539730 100644 --- a/games/Lava_the_impossible_maze.js +++ b/games/Lava_the_impossible_maze.js @@ -1,8 +1,8 @@ /* @title: Lava the impossible maze -@tags: ['timer-puzzle'] +@author: Augustin Z Youtube-@Aaron Dragonheart +@tags: ['puzzle','timed'] @addedOn: 2022-12-21 -@author: Augustin Z Youtube-@Aaron Dragonheart Inspiration: Game: Treasure_hunt */ const melody = tune` diff --git a/games/Least_Tiles.js b/games/Least_Tiles.js new file mode 100644 index 0000000000..8ce8838bdf --- /dev/null +++ b/games/Least_Tiles.js @@ -0,0 +1,279 @@ +/* +@title: Least_Tiles +@author: cluac +@tags: [] +@addedOn: 2024-08-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const wall = "w" +const touched = "t" +const empty = "e" +let moves = 0 +let totalmoves = 0 +let lastpressed = "" + +setLegend( + [player, bitmap` +6666666666666666 +6666666666666666 +6666666666666666 +6666C666666C6666 +6666C666666C6666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666066666666 +6666666066666666 +6666600000666666 +6660006660006666 +6666066666066666 +6666666666666666 +6666666666666666`], + [wall, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`], + [touched, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DD444444444444DD +DD444444444444DD +DD44DDDDDDDD44DD +DD44DDDDDDDD44DD +DD44DDDDDDDD44DD +DD44DDDDDDDD44DD +DD44DDDDDDDD44DD +DD44DDDDDDDD44DD +DD44DDDDDDDD44DD +DD44DDDDDDDD44DD +DD444444444444DD +DD444444444444DD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD`], + [empty, bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222`] + +) + +setSolids([player, wall]) + +let level = 0 +const levels = [ + map` +wwwwwwwwwwwwwww +wpeeeeewweeeeew +wwwwwwewwewweew +weeeeeeeeewweww +wwwwweeeeeeeeew +weeewwwwweeweww +wwwewwwwweeweww +wwweweeeeeeweww +weeeweeeeewweww +wewwwwwwwwwweew +weeeeeeeewwweew +weeewweeeeeweew +wwewwwewwweweew +wweeeeewwweeeew +wwwwwwwwwwwwwww`, + map` +wwwwwwwwwwwwwww +weeeeeeeeeeewww +wewwwweweweewww +wewewwepeweewww +weeewwwweweeeew +wweewwwweeeewew +wweewwwwewewwew +wwewwwwwewewwew +weeeeeeeeeeeeew +wwwwwwwwwwwwwww`, + map` +wwwwwwwwwwww +wpeeeeeeeeew +wwwwwwwwwwew +weeeeeeeeeew +wewwwwewwwww +weeeeeeweeew +weewwweweeew +weeeeeeeewww +weewwwwwwwww +weeweeeeeeew +wweeeeeeeeew +wwwwwwwwwwww`, + map` +wwwwwwwwwww +weeeeeeeeew +wewwwwwwwew +weeeeeewwew +weeeeeewwew +wwwwwwewwew +weeeeeeeeew +wewwwwwwwew +weeeeewwwew +wwwwwewwwew +wweeeeeewew +weeeeeeewew +weeeeewwwew +wwewwwwwwww +wweeeepwwww +wwwwwwwwwww` +] + +setMap(levels[level]) + +setPushables({ + [player]: [] +}) +onInput("w", () => { + if (lastpressed !== "w") { moves++ } + + const player = getFirst("p") + let futureY = player.y - 1 + + // Continuously move the player to the right until a wall is encountered + while (!getTile(player.x, futureY).some(sprite => sprite.type === "w")) { + // Clear the current player position + clearTile(player.x, player.y) + addSprite(player.x, player.y, "t") + + // Move the player to the right + player.y = futureY + // Add the player back to the new position + addSprite(player.x, player.y, "p") + // Update the future position for the next iteration + futureY-- + } + lastpressed = "w" + +}) +onInput("s", () => { + if (lastpressed !== "s") { moves++ } + + const player = getFirst("p") + let futureY = player.y + 1 + + // Continuously move the player to the right until a wall is encountered + while (!getTile(player.x, futureY).some(sprite => sprite.type === "w")) { + // Clear the current player position + clearTile(player.x, player.y) + addSprite(player.x, player.y, "t") + + // Move the player to the right + player.y = futureY + // Add the player back to the new position + addSprite(player.x, player.y, "p") + // Update the future position for the next iteration + futureY++ + } + lastpressed = "s" + + +}) +onInput("a", () => { + if (lastpressed !== "a") { moves++ } + + const player = getFirst("p") + let futureX = player.x - 1 + + // Continuously move the player to the right until a wall is encountered + while (!getTile(futureX, player.y).some(sprite => sprite.type === "w")) { + // Clear the current player position + clearTile(player.x, player.y) + addSprite(player.x, player.y, "t") + + // Move the player to the right + player.x = futureX + // Add the player back to the new position + addSprite(player.x, player.y, "p") + // Update the future position for the next iteration + futureX-- + } + lastpressed = "a" + + +}) +onInput("d", () => { + if (lastpressed !== "d") { moves++ } + + const player = getFirst("p") + let futureX = player.x + 1 + + // Continuously move the player to the right until a wall is encountered + while (!getTile(futureX, player.y).some(sprite => sprite.type === "w")) { + // Clear the current player position + clearTile(player.x, player.y) + addSprite(player.x, player.y, "t") + + // Move the player to the right + player.x = futureX + // Add the player back to the new position + addSprite(player.x, player.y, "p") + // Update the future position for the next iteration + futureX++ + } + lastpressed = "d" + +}) + +onInput("j", () => { + setMap(levels[level]) +}) + + +afterInput(() => { + addText(`${moves}`, { + x: 1, + y: 1, + color: color`8` + }) + const emptyTiles = getAll("e") + + + if (emptyTiles.length === 0) { + level++ + const currentLevel = levels[level] + if (currentLevel !== undefined) { + setMap(currentLevel) + totalmoves += moves + moves = 0 + } else { + totalmoves += moves + addText(`you took ${totalmoves} moves!`, { x: 1, y: 4, color: color`3` }); + + } + } + +}) + diff --git a/games/Let_Them_Eat_Cake.js b/games/Let_Them_Eat_Cake.js index 7c2aa690ed..7ac2e920d2 100644 --- a/games/Let_Them_Eat_Cake.js +++ b/games/Let_Them_Eat_Cake.js @@ -1,8 +1,8 @@ /* @title: Let_Them_Eat_Cake -@tags: ['thematic-puzzle'] -@addedOn: 2023-01-10 @author: Xander Reyes +@tags: ['puzzle'] +@addedOn: 2023-01-10 */ diff --git a/games/Limits.js b/games/Limits.js index 9540fffdba..81bf373dcd 100644 --- a/games/Limits.js +++ b/games/Limits.js @@ -1,8 +1,8 @@ /* @title: Limits -@tags: ['energy-control'] -@addedOn: 2022-09-15 @author: Nathan Pease +@tags: ['puzzle'] +@addedOn: 2022-09-15 */ /* diff --git a/games/Linebeck-Land.js b/games/Linebeck-Land.js index 48870a2ca6..1f6b87943e 100644 --- a/games/Linebeck-Land.js +++ b/games/Linebeck-Land.js @@ -1,8 +1,8 @@ /* @title: Linebeck Land +@author: CatR3kd @tags: [] @addedOn: 2023-01-18 -@author: CatR3kd */ /* diff --git a/games/LittleSpringGame.js b/games/LittleSpringGame.js index 0572bf0bf7..2db1f59b29 100644 --- a/games/LittleSpringGame.js +++ b/games/LittleSpringGame.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Little Spring Game @author: Jonas Heilig @tags: [] @addedOn: 2024-07-08 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Lost-Alien.js b/games/Lost-Alien.js index bc501e6a66..dadf3ec358 100644 --- a/games/Lost-Alien.js +++ b/games/Lost-Alien.js @@ -1,8 +1,8 @@ /* @title: Lost Alien @author: Joseph Smesny -@addedOn: 2024-05-20 @tags: [] +@addedOn: 2024-05-20 @img: "" */ diff --git a/games/MagicalTiles.js b/games/MagicalTiles.js index f0a56fdabf..7e83af467a 100644 --- a/games/MagicalTiles.js +++ b/games/MagicalTiles.js @@ -1,8 +1,8 @@ /* @title: MusicalTiles +@author: Shreeya Rani @tags: [] @addedOn: 2023-03-14 -@author: Shreeya Rani Creds:- Nomis by Cheru Berhanu (Inspired me for the project) diff --git a/games/Mancala.js b/games/Mancala.js index e2a8277dd5..3a74efbda6 100644 --- a/games/Mancala.js +++ b/games/Mancala.js @@ -1,7 +1,7 @@ /* @title: Mancala @author: Lenochodik -@tags: ['strategy', 'classic', 'multiplayer', 'logic'] +@tags: ['puzzle','strategy','multiplayer','retro'] @addedOn: 2024-08-06 */ diff --git a/games/Mario_Kart.js b/games/Mario_Kart.js index bf937a864b..7faaa46c9d 100644 --- a/games/Mario_Kart.js +++ b/games/Mario_Kart.js @@ -1,8 +1,8 @@ /* @title: Mario_Kart +@author: nucleiav */ @tags: ['endless'] @addedOn: 2023-01-13 -@author: nucleiav */ let n = 0; diff --git a/games/Mario_Platformer_v2.js b/games/Mario_Platformer_v2.js index f5f2bfb40c..26393e8fe8 100644 --- a/games/Mario_Platformer_v2.js +++ b/games/Mario_Platformer_v2.js @@ -1,8 +1,8 @@ /* @title: Mario Platformer +@author: Jackson Flanders @tags: [] @addedOn: 2023-10-20 -@author: Jackson Flanders */ /* diff --git a/games/Mastermind.js b/games/Mastermind.js index af8c832cbf..389b4c422d 100644 --- a/games/Mastermind.js +++ b/games/Mastermind.js @@ -1,8 +1,8 @@ /* @title: Mastermind -@tags: ['logic', 'classic'] -@addedOn: 2022-11-14 @author: Leonard (Omay) +@tags: ['puzzle','retro'] +@addedOn: 2022-11-14 W and S for color selection, A and D for position selection I to place diff --git a/games/Math Mechanics.js b/games/Math Mechanics.js new file mode 100644 index 0000000000..eda9a6a61e --- /dev/null +++ b/games/Math Mechanics.js @@ -0,0 +1,621 @@ +/* +@title: Math Mechanics +@author: Oikko +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const oikko = "p"; +const step = "i"; +const adiyat = "A"; + +const carson = "C"; +const finch = "F"; +const weber = "k" +const dole = "q"; +const yugo = "y"; +const chlud = "Q"; + + +const jojo = "j"; +const up = "w"; +const down = "s"; +const right = "d"; +const left = "a"; +const hole = "H"; +const fakehole = "N"; +const startground = "n"; +const wall = "W"; +const zero = "z"; +const one = "e"; +const no = "O"; +const yes = "Y"; +const Dee = "D"; +const I_aye = "I"; + + + +setLegend( + [adiyat, bitmap` +................ +................ +.....000000..... +....00000000.... +....00CCCC00.... +....0C0CC0C0.... +....CCCCCCCC.... +.....C0000C..... +.....CCCCCC..... +......5CC5...... +....55555555.... +....55555555.... +....55555555.... +....C555555C.... +.....333333..... +.....00..00.....` ], + [carson, bitmap` +................ +................ +.....666666..... +....66666666.... +....66222266.... +....62022026.... +....22222222.... +.....200002..... +.....222222..... +......C22C...... +....CCCCCCCC.... +....CCCCCCCC.... +....CCCCCCCC.... +....2CCCCCC2.... +.....000000..... +.....00..00.....`], + [finch, bitmap` +................ +................ +.....111111..... +....11222211.... +....12222221.... +....12022021.... +....22222222.... +.....200002..... +.....211112..... +......5225...... +....55555555.... +....55555555.... +....55555555.... +....25555552.... +.....000000..... +.....00..00.....`], + [weber, bitmap` +................ +......2222...... +.....222222..... +....22222222.... +....22222222.... +....22022022.... +....22222222.... +.....200002..... +.....222222..... +......4224...... +....44444444.... +....44444444.... +....44444444.... +....24444442.... +.....666666..... +.....00..00.....`], + [dole, bitmap` +................ +................ +.....111111..... +....12211221.... +....12222221.... +....12022021.... +....22222222.... +.....200002..... +.....211112..... +......2112...... +....76767676.... +....67676767.... +....76767676.... +....27676762.... +.....FFFFFF..... +.....00..00.....`], + [chlud, bitmap` +................ +................ +.....CCCCCC..... +....CCCCCCCC.... +....CC2222CC.... +...CC202202CC... +...C22222222C... +....C200002CC... +...CC222222C.... +....CC5225CCC... +...C5C5555C5C... +....55555555.... +....55555555.... +....25555552.... +.....000000..... +.....00..00.....`], + [yugo, bitmap` +................ +................ +.....000000..... +....00000000.... +....00000200.... +....02022020.... +....22222222.... +.....200002..... +.....222222..... +......7227...... +....77777777.... +....77777777.... +....77777777.... +....27777772.... +.....666666..... +.....00..00.....`], + + [jojo, bitmap` +................ +.....000000..... +....00000000.... +....00000000.... +....00CCCC00.... +....0C0CC0C0.... +....CCCCCCCC.... +.....C0000C..... +.....CCCCCC..... +......HCCH...... +....HHHHHHHH.... +....HHHHHHHH.... +....HHHHHHHH.... +....CHHHHHHC.... +.....555555..... +.....00..00.....` ], + [ oikko, bitmap` +................ +.....000000..... +....00000000.... +...0000000000... +...00000C0000... +...0000CC0C00... +...00CCCCCC00... +....0C0000C0.... +....0CCCCCC0.... +.....05CC50..... +....55555555.... +....52555525.... +....52777725.... +....C277772C.... +.....DDDDDD..... +.....55..55.....` ], + [zero, bitmap` +0000000000000000 +0000002222000000 +0000020000200000 +0000200000020000 +0000200000020000 +0000200000020000 +0000200000020000 +0000200000020000 +0000200000020000 +0000200000020000 +0000200000020000 +0000020000200000 +0000002222000000 +0000000000000000 +0000000000000000 +0000000000000000` ], + [one, bitmap` +0000000000000000 +0000000220000000 +0000002220000000 +0000022020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000000020000000 +0000022222220000 +0000000000000000`], + [hole, bitmap` +7000000000000007 +0700000000000070 +0070000000000700 +0007000000007000 +0000700000070000 +0000070000700000 +0000007007000000 +0000000770000000 +0000000770000000 +0000007007000000 +0000070000700000 +0000700000070000 +0007000000007000 +0070000000000700 +0700000000000070 +7000000000000007` ], + [no, bitmap` +4400000000000444 +4440000000000044 +4440000000000044 +4444000000000044 +4404400000000044 +4400440000000044 +4400044000000044 +4400004400000044 +4400000440000044 +4400000044000044 +4400000004400044 +4400000000440044 +4400000000044044 +4400000000004444 +4400000000000444 +4440000000000044`], + [yes, bitmap` +4400000000000044 +0440000000000440 +0044000000004400 +0004400000044000 +0000440000440000 +0000044004400000 +0000004444000000 +0000000440000000 +0000000440000000 +0000000440000000 +0000000440000000 +0000000440000000 +0000000440000000 +0000000440000000 +0000000440000000 +0000000440000000`], + [fakehole, bitmap` +7000000000000007 +0700000000000070 +0070000000000700 +0007000000007000 +0000700000070000 +0000070000700000 +0000007007000000 +0000000770000000 +0000000770000000 +0000007007000000 +0000070000700000 +0000700000070000 +0007000000007000 +0070000000000700 +0700000000000070 +7000000000000007`], + [startground, bitmap` +LLLLLLLLLLLLLLLL +L1LLLLLLLLLLLL1L +LLLLLLLLLLLLLLLL +LLL0LLLLLLLL0LLL +LLLLLLLLLLLLLLLL +LLLLL1LLLL1LLLLL +LLLLLLLLLLLLLLLL +LLLLLLL01LLLLLLL +LLLLLLL10LLLLLLL +LLLLLLLLLLLLLLLL +LLLLL1LLLL1LLLLL +LLLLLLLLLLLLLLLL +LLL0LLLLLLLL0LLL +LLLLLLLLLLLLLLLL +L1LLLLLLLLLLLL1L +LLLLLLLLLLLLLLLL` ], + [I_aye, bitmap` +0222222222222220 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0000000220000000 +0222222222222200`], + [Dee, bitmap` +0002222000000000 +0002002200000000 +0002000220000000 +0002000022000000 +0002000002200000 +0002000000200000 +0002000000200000 +0002000000200000 +0002000000200000 +0002000000200000 +0002000000200000 +0002000002200000 +0002000022000000 +0002000220000000 +0002002200000000 +0002222000000000`], + [wall, bitmap` +................ +................ +..0000000000000. +..000........00. +...00.........0. +....000.......0. +....0000........ +......000....... +.......000...... +.........00..... +........00...... +.......00....... +......00........ +....000.......0. +...00........00. +..0000000000000.`] +) + +let level = 0; +let question = 0; +const questions = [ + 'M-series center?',//0 + 'does 1/n converge?',//n + 'does 1/n^2 diverge?',//n + 'n test say converge',//n + 'T-polynom use D or I',//D + "D of f = f'?",//Y + '+ C when ind-I ?',//Y + 'is calc awesome?',//Y + 'AP GOV?',//Y + 'AP GOV!!!' +] + +const levels = [ + map` +......... +......... +......... +......... +......... +......... +WWWWWWWWW +Wp.....jH +WWWWWWWWW`, + map` +WWWW.......WWWW +WH.W.......W.NW +WzzW.......WeeW +WzzW.......WeeW +WzzW.......WeeW +WzzW.......WeeW +WzzWWWWWWWWWeeW +W.............W +W.............W +W.............W +W......j......W +W.............W +WWWWWWW.WWWWWWW +......WpW...... +......WWW......`, + map` +WWWWWWWWWWWWW +W...........W +W...........W +WYWWW...WWWOW +WYW.W...W.WOW +WYW.W...W.WOW +WYW.W...W.WOW +WYW.W...W.WOW +WYW.W.j.W.WOW +WYW.W...W.WOW +WYW..W.W..WOW +WNW..WpW..WHW +WWW..WWW..WWW`, + map` +.WWWWWWWWWWW. +.W...WpW...W. +.W.........W. +.WY.W.j.W.OW. +.WY.W...W.OW. +.WY.WWWWW.OW. +.WY...W...OW. +.WY...W...OW. +.WY...W...OW. +.WY...W...OW. +.WYYYNWHOOOW. +.WWWWWWWWWWW. +.............`, + map` +WWWWW......... +WNYY.W........ +W...Y.W....... +WWW..Y.W...... +...W..Y.W..... +....W..Y.WWWW. +.....W..Y....W +......W..j..pW +.....W..O....W +....W..O.WWWW. +WWWW..O.W..... +W....O.W...... +WHOOO.W....... +WWWWWW........`, + map` +WWWWWWWWWWWWW +W...........W +W...........W +WDWWW...WWWIW +WDW.W...W.WIW +WDW.W...W.WIW +WDW.W...W.WIW +WDW.W...W.WIW +WDW.W.j.W.WIW +WDW.W...W.WIW +WDW..W.W..WIW +WHW..WpW..WNW +WWW..WWW..WWW`, + map` +WWWWWWWWWWWWWW +WWWW.........W +WWWW.OOOOOOO.W +WWWW.OWWWW.O.W +WWWW.OWWWWWO.W +WWW....WWWWO.W +WW......WWWO.W +Wp.j.....WWO.W +WW......WWWO.W +WHW....WWWWO.W +WYYWYYWWWWWO.W +W.YYYY.WW..O.W +W..YYY..WNOO.W +WWWWWWWWWWWWWW`, + map` +WWW.............WWW +WN.W...........W.NW +WO..W.........W..YW +W.O..W.......W..Y.W +.W.O..W.....W..Y.W. +..W.O..W...W..Y.W.. +...W.O..WWW..Y.W... +....W.O.....Y.W.... +.....W.O.p.Y.W..... +......W.O.Y.W...... +......W..j..W...... +.....W..Y.O..W..... +....W..Y...O..W.... +...W..Y..W..O..W... +..W..Y..W.W..O..W.. +.W..Y..W...W..O..W. +WWHY..W.....W..ONWW +.WWWWW.......WWWWW.`, + map` +p...OOOOWWWWWWWWW +....WW.OWW.....WW +..j.W..OW..YYY..W +.Y..W..OW.Y.W.Y.W +.YWWW.OOW.YWOWY.W +..Y.WO.W..YWOWY.W +...YWOW...YWOWY.W +...YWOW.HYYWOWY.W +...YWO.WWWWWOWY.W +W.Y.WOO.....OWY.W +WY.W...O.OOOOWY.W +WY.W....O...W.Y.W +WY.WWWWWWWWW..Y.W +W.Y.........YY.WW +W..YYYYYYYYY..W.. +WWWWWWWWWWWWWW...`, + map` +............... +............... +.......H....... +.......Y....... +.......Y....... +.......Y....... +.....Q.Y.y..... +.......Y....... +.....F.Y.k..... +............... +.....A.j.C..... +............... +.......p....... +............... +...............`, + map` +.... +.... +.... +Hj.p` + + + + +]; +//backgrounds and map********************************************************************* + +setMap(levels[level]); +setBackground(startground); + +//beginning words************************************************************************** +addText("Math Mechanics", { y: 1, color: color`4` }); +addText("The rules of math", { y: 3, color: color`6` }); +addText("have been broken", { y: 4, color: color`6` }); +addText("BY JOSEPHINE", { y: 5, color: color`3` }); +addText("Help me fix math", { y: 7, color: color`2` }); +addText("Before its too late", { y: 8, color: color`2` }); +addText("THROW HER INTO HOLE", { y: 9, color: color`7` }); + +//solids and pushables********************************************************************** +setSolids([oikko, jojo, adiyat, wall]); +setPushables({ [oikko]: [adiyat, jojo]}); + +let cooldown = false; +//keybindings********************************************************************** +onInput("w", () => { + if (!cooldown){ getFirst(oikko).y -= 1}}); + +onInput("a", () => { + if (!cooldown){getFirst(oikko).x -= 1 }}); + +onInput("s", () => { + if (!cooldown){ getFirst(oikko).y += 1 }}); + +onInput("d", () => { + if (!cooldown){ getFirst(oikko).x += 1}}); + +onInput("i", () => { + if (!cooldown) { + setMap(levels[level]); + } +}); + +//************************************************************************************** +afterInput(() => { + + if (cooldown) return; // Ignore the movements in the cooldown + const jojos = getAll(jojo); + let allInHole = true; + + for (const j of jojos) { + const tile = getTile(j.x, j.y); + if (!tile.some(sprite => sprite.type === hole)) { + allInHole = false; + break; + } + } + + if (allInHole) { + cooldown = true; // Activate the cooldown + clearText(); + addText("Level Complete!", { y: 7, color: color`2` }); + + if (level < levels.length - 1) { + // Let a 1 sec delay + setTimeout(() => { + level++; + setMap(levels[level]); + clearText(); + question++; + addText(questions[question - 1], { y: 2, color: color`2` }); + cooldown = false; + }, 1000); + } else { + // After all of the levels + addText("THE END!", { y: 9, color: color`2` }); + addText("MATH IS SAVED", { y: 10, color: color`7` }); + + } + } +}); + + diff --git a/games/MathRacer.js b/games/MathRacer.js index e5cf9a78d6..0728589b2b 100644 --- a/games/MathRacer.js +++ b/games/MathRacer.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: MathRacer -@author: spageektti +@author: spageektti @tags: [] @addedOn: 2024-00-00 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Maths_Speedrun.js b/games/Maths_Speedrun.js index 469714a69d..edc069ba41 100644 --- a/games/Maths_Speedrun.js +++ b/games/Maths_Speedrun.js @@ -2,7 +2,7 @@ /* @title: Maths_Speedrun @author: Anshuman M. -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-05-17 */ diff --git a/games/Maze_escape.js b/games/Maze-escape.js similarity index 99% rename from games/Maze_escape.js rename to games/Maze-escape.js index e6b534db2d..6d603415be 100644 --- a/games/Maze_escape.js +++ b/games/Maze-escape.js @@ -1,7 +1,7 @@ /* @title: Maze_escape @author: NikosDev -@tags: [] +@tags: [] @addedOn: 2024-08-15 */ diff --git a/games/MazeMission.js b/games/MazeMission.js index 3c17e3c0a9..2b0bc2bdf2 100644 --- a/games/MazeMission.js +++ b/games/MazeMission.js @@ -1,7 +1,7 @@ /* @title: MazeMission @author: CaitlinOchuwa -@tags: ['maze', 'levels'] +@tags: ['puzzle'] @addedOn: 2024-08-06 HOW TO PLAY diff --git a/games/Maze_Escape.js b/games/Maze_Escape.js index 1cc2f35d15..b84d1ae21d 100644 --- a/games/Maze_Escape.js +++ b/games/Maze_Escape.js @@ -2,7 +2,7 @@ /* @title: Maze_Escape @author: Madison Shaw -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-07-27 */ diff --git a/games/Maze_Escape_Reach_The_Yellow_Box.js b/games/Maze_Escape_Reach_The_Yellow_Box.js index 2c4175ed1b..a06be20bcc 100644 --- a/games/Maze_Escape_Reach_The_Yellow_Box.js +++ b/games/Maze_Escape_Reach_The_Yellow_Box.js @@ -1,4 +1,8 @@ /* +@title: Escape the evil moving purple block +@author: Owski +@tags: [] +@addedOn: 2024-07-29 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started ***INFO*** @@ -6,10 +10,6 @@ in level one make sure to get to the yellow box to achieve, this is also true for level 2 if the game is to hard adjust your health to 80000000 -@title: Escape the evil moving purple block -@author: Owski -@tags: [] -@addedOn: 2024-07-29 */ var gameRunning = true; const player = "p" diff --git a/games/Maze_Flag_Collector.js b/games/Maze_Flag_Collector.js new file mode 100644 index 0000000000..7b8190ec57 --- /dev/null +++ b/games/Maze_Flag_Collector.js @@ -0,0 +1,205 @@ +/* +@title: Maze Flag Collector Game +@author: Ravin +@tags: ['puzzle'] +@addedOn: 2024-08-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p"; +const flag = "f"; +const wall = "w"; +const coin = "c"; + +let playersprite = bitmap` +................ +................ +.......000...... +.......0.0...... +......0..0...... +......0...0.0... +....0003.30.0... +....0.0...000... +....0.05550..... +......0...0..... +.....0....0..... +.....0...0...... +......000....... +......0.0....... +.....00.00...... +................`; + +let flagsprite = bitmap` +...0000......... +...0440......... +...0440......... +...0000......... +...0440000000000 +...0440444444440 +...0440444444400 +...044044444000. +...0440444400... +...044000000.... +...0440......... +..004400........ +..044440........ +0000000000...... +0444444440...... +0000000000......`; + +let wallsprite = bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`; + +let coinsprite = bitmap` +................ +....66666666.... +...6666666666... +..666666666666.. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +..666666666666.. +...6666666666... +....66666666.... +................`; + +setLegend( + [player, playersprite], + [flag, flagsprite], + [wall, wallsprite], + [coin, coinsprite], +); + +setSolids([player, wall]); + +let level = 0; + +// Map levels with coins +const levels = [ + map` +wwwwwwwwww +wp.....f.w +ww.wwww.ww +w....w...w +w..wwwww.w +w.....c.ww +ww.wwwwww. +w...c....w +wwwwwwwwww`, + map` +wwwwwwwwww +w.c....cfw +w.wwwwww.w +w.w....pw. +w.w.w.w.w. +w.w.wcw.w. +w.w.w.w.w. +wc......w. +wwwwwwwwww`, + map` +wwwwwwwwww +w........f +w.wwwwww.w +w.w.....cw +w.w.wwww.w +w.w....pww +w.cwwwwwww +w.....c..w +wwwwwwwwww`, + map` +.......... +wwwwwwwww. +wc....c.w. +w.wwwww.w. +w.w..pwcw. +w.w.www.w. +wcw..c..w. +w.wwwwwww. +wf........` +]; + +function loadLevel(levelIndex) { + setMap(levels[levelIndex]); +} + +loadLevel(level); + +// Movement +setPushables({ + [player]: [] +}); + +onInput("w", () => { + getFirst(player).y -= 1; +}); + +onInput("a", () => { + getFirst(player).x -= 1; +}); + +onInput("s", () => { + getFirst(player).y += 1; +}); + +onInput("d", () => { + getFirst(player).x += 1; +}); + +afterInput(() => { + const playerSprite = getFirst(player); + const flagSprite = getFirst(flag); + const coins = getAll(coin); + + // Collect coins + coins.forEach((coinSprite) => { + if (playerSprite.x === coinSprite.x && playerSprite.y === coinSprite.y) { + clearTile(coinSprite.x, coinSprite.y); // Clear the coin from the tile + addSprite(playerSprite.x, playerSprite.y, player); // Re-add the player sprite to the tile + } + }); + + // Check if player has collected all coins + const allCoinsCollected = coins.length === 0; + + // Check if player has reached the flag + if (playerSprite && flagSprite && playerSprite.x === flagSprite.x && playerSprite.y === flagSprite.y) { + if (allCoinsCollected) { + console.log("You collected all coins and the flag! You win!"); + + // Move to the next level + level += 1; + if (level >= levels.length) { + console.log("You have completed all levels!"); + level = 0; // Reset to the first level to play again + } + loadLevel(level); + } else { + console.log("You should collect all the coins before reaching the flag. Try again!"); + } + } else { + console.log("Player, flag, or coins not found!"); + } +}); + diff --git a/games/Maze_Runner3.js b/games/Maze_Runner3.js index 47c35d02c5..0fbe53d91d 100644 --- a/games/Maze_Runner3.js +++ b/games/Maze_Runner3.js @@ -1,8 +1,8 @@ /* @title: Maze_Runner3 -@tags: ['sokoban-style'] -@addedOn: 2023-03-19 @author: Charlie +@tags: ['puzzle'] +@addedOn: 2023-03-19 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started diff --git a/games/Maze_with_coins_traps_enemies.js b/games/Maze_with_coins_traps_enemies.js index 0e6243bae1..2f2ac308d2 100644 --- a/games/Maze_with_coins_traps_enemies.js +++ b/games/Maze_with_coins_traps_enemies.js @@ -1,7 +1,7 @@ /* @title: Maze with coins, traps, enemies -@author: 123xxgamer -@tags: ["maze"] +@author: 123xxgamer +@tags: ['puzzle'] @addedOn: 2024-07-26 */ diff --git a/games/Mazerunner.js b/games/Mazerunner.js index 3e1dd1efc3..51eea8f865 100644 --- a/games/Mazerunner.js +++ b/games/Mazerunner.js @@ -2,8 +2,8 @@ @title: Another Maze Runner @author: AyoubChafiq @tags: [] -@img: "" @addedOn: 2024-06-07 +@img: "" */ function getRandomInt(max) { return Math.floor(Math.random() * max) diff --git a/games/Memory_Game.js b/games/Memory-Game.js similarity index 100% rename from games/Memory_Game.js rename to games/Memory-Game.js diff --git a/games/Memory_Test.js b/games/Memory_Test.js index 46f4c048e3..3eb1692859 100644 --- a/games/Memory_Test.js +++ b/games/Memory_Test.js @@ -1,8 +1,8 @@ /* @title: Memory_Test +@author: Albert_M @tags: ['memory'] @addedOn: 2023-03-03 -@author: Albert_M A simple memory test. Use WASD to move and L to click the tiles that light up. (Code for timer inspired by "Flurffy" by Lucas ) diff --git a/games/Meteor_shower.js b/games/Meteor_shower.js index 1a46919784..487a405070 100644 --- a/games/Meteor_shower.js +++ b/games/Meteor_shower.js @@ -1,8 +1,8 @@ /* @title: Meteorshower +@author: Mate P. @tags: ['strategy'] @addedOn: 2022-11-22 -@author: Mate P. */ const player = "p"; diff --git a/games/MicroBot_Adventure.js b/games/MicroBot_Adventure.js index 2c10c81345..807c67b697 100644 --- a/games/MicroBot_Adventure.js +++ b/games/MicroBot_Adventure.js @@ -1,8 +1,8 @@ /* @title: MicroBot_Adventure +@author: Kartikey Singh Chauhan @tags: ['puzzle'] @addedOn: 2024-01-24 -@author: Kartikey Singh Chauhan In this game, you are a robot navigating through maze-like sprinkled with enemies. The primary objective is to outmaneuver enemies, strategically use boxes to block enemy attacks, and eliminate hostile turrets with a lasers diff --git a/games/Mind_game.js b/games/Mind_game.js index 1bf709119c..8e965ad6ec 100644 --- a/games/Mind_game.js +++ b/games/Mind_game.js @@ -1,7 +1,7 @@ /* @title: Mind_game -@author: brunoblaise -@tags: ['logic'] +@author: brunoblaise +@tags: ['puzzle'] @addedOn: 2024-04-05 */ diff --git a/games/Mirror_Mirror.js b/games/Mirror_Mirror.js index ab5d096086..3657b3354c 100644 --- a/games/Mirror_Mirror.js +++ b/games/Mirror_Mirror.js @@ -1,8 +1,8 @@ /* @title: Mirror_Mirror -@tags: ['sokoban-style'] -@addedOn: 2022-12-19 @author: Benjamin Grelk +@tags: ['puzzle'] +@addedOn: 2022-12-19 */ const player = "p"; diff --git a/games/Mom_have_you_seen_Coco.js b/games/Mom_have_you_seen_Coco.js index 99141cf0eb..862b7aabd8 100644 --- a/games/Mom_have_you_seen_Coco.js +++ b/games/Mom_have_you_seen_Coco.js @@ -3,8 +3,8 @@ @title: Mom,_have_you_seen_Coco? @author: Lillian Curi @tags: [] -@img: "" @addedOn: 2024-05-10 +@img: "" */ const select = ")" const character = "1" diff --git a/games/Monkey quest 3 lightless knights.js b/games/Monkey quest 3 lightless knights.js index 8642964ef8..e5b3d1c2e1 100644 --- a/games/Monkey quest 3 lightless knights.js +++ b/games/Monkey quest 3 lightless knights.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Monkey quest 3: lightless knights @author: Eamonn @tags: [] @addedOn: 2024-08-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ let r = 0; diff --git a/games/Monkey_Bannana.js b/games/Monkey_Bannana.js index 16f289504d..8599b45862 100644 --- a/games/Monkey_Bannana.js +++ b/games/Monkey_Bannana.js @@ -1,10 +1,10 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started @title: Monkey Bannana -@author: Daivik -@tags: ["bananas", "catching"] +@author: Daivik +@tags: ['humor','action'] @addedOn: 2024-07-23 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started */ const player = "p"; const banana = "b"; diff --git a/games/Monkey_Catch_Food.js b/games/Monkey_Catch_Food.js index 3f72cd35dd..950f5ee17b 100644 --- a/games/Monkey_Catch_Food.js +++ b/games/Monkey_Catch_Food.js @@ -1,7 +1,7 @@ /* @title: Monkey_Catch_Food @author: Ahmet Dedeler -@tags: ['catch'] +@tags: [] @addedOn: 2023-12-30 */ diff --git a/games/Monkey_Demolition.js b/games/Monkey_Demolition.js index 76a84dca25..e4968915ef 100644 --- a/games/Monkey_Demolition.js +++ b/games/Monkey_Demolition.js @@ -1,320 +1,320 @@ -/* -@title: Mirror_Mirror -@tags: [] -@addedOn: 2024-07-11 -@author: ethanJPope -*/ - -const monkeyRight = "m" -const monkeyLeft = "l" -const monkeyAttackLeft = "8" -const monkeyAttackRight = "9" - -const ground = "g" -const building1 = "1" -const building2 = "2" -const building3 = "3" - -let isWon = false -let isAttacking = false -let player = monkeyRight -let isFacingRight = true -let brokenBuildingCount = 0 -let buildingCountText = {} -let countdown = 60 -let countdownInterval -let level = 0; - -const clearAllTiles = () => { - for (let x = 0; x < width(); x++) { - for (let y = 0; y < height(); y++) { - clearTile(x, y); - } - } -} - -const checkBlock = () => { - const playerSprite = getFirst(player) - let nextX = playerSprite.x + (isFacingRight ? 1 : -1) - const nextTile = getTile(nextX, playerSprite.y) - - nextTile.forEach(sprite => { - if (sprite.type === building1) { - sprite.type = building2 - } - }) -} - -const getRandomInt = (max) => { - return Math.floor(Math.random() * max) -} - -const checkBrokenBuildings = () => { - getAll(building2).forEach(block => { - if (block.type === building2) { - const adjacentTileRight = getTile(block.x + 1, block.y) - const adjacentTileLeft = getTile(block.x - 1, block.y) - if (adjacentTileRight.some(sprite => sprite.type === monkeyAttackRight) || - adjacentTileLeft.some(sprite => sprite.type === monkeyAttackLeft)) { - breakBuilding(block) - } - } - }) -} - -const respawnBuilding = (y) => { - let newX = getRandomInt(24) - addSprite(newX, 5, building1) -} - -const changeBlockToBuilding3 = (block) => { - block.type = building3 -} -setLegend( - [monkeyRight, bitmap` - ......0000000... - 0....0CCCCCCC0.. - C0..0CCCCCCCCC0. - 0C0.0C00CFFFFF0. - 0C0.00FFCF00FF0. - 0C0.00FFCF00FF0. - 0C0.0C00CFFFFF00 - 0C0.0CCCFFFFFFF0 - 0C0.0CCFFFFFFFF0 - 0C0.0CC0000FF000 - 0CC00CC0CC0FFFF0 - .0CC0CC0CC0FFF0. - ..000CC0000CC0.. - ....0CCCCCCCC0.. - ....0C000000C0.. - ....000....000..`], - [monkeyLeft, bitmap` -...0000000...... -..0CCCCCCC0....0 -.0CCCCCCCCC0..0C -.0FFFFFC00C0.0C0 -.0FF00FCFF00.0C0 -.0FF00FCFF00.0C0 -00FFFFFC00C0.0C0 -0FFFFFFFCCC0.0C0 -0FFFFFFFFCC0.0C0 -000FF0000CC0.0C0 -0FFFF0CC0CC00CC0 -.0FFF0CC0CC0CC0. -..0CC0000CC000.. -..0CCCCCCCC0.... -..0C000000C0.... -..000....000....`], - [monkeyAttackRight, bitmap` - ....0000000..... - ...0CCCCCCC0.... - ..0CCCCCCCCC0... - 0.0C00CFFFFF0... - 0.00FFCF00FF0... - 0.00FFCF00FF0000 - 0.0C00CFFFFF00C0 - 0.0CCCFFFFFFF0C0 - 0.0CCFFFFFFFF000 - 0.0CC0000FF000.. - C00CC0CC0FFFF0.. - CC0CC0CC0FFF0... - 000CC0000CC0.... - ..0CCCCCCCC0.... - ..0C000000C0.... - ..000....000....`], - [monkeyAttackLeft, bitmap` -.....0000000.... -....0CCCCCCC0... -...0CCCCCCCCC0.. -...0FFFFFC00C0.0 -...0FF00FCFF00.0 -0000FF00FCFF00.0 -0C00FFFFFC00C0.0 -0C0FFFFFFFCCC0.0 -000FFFFFFFFCC0.0 -..000FF0000CC0.0 -..0FFFF0CC0CC00C -...0FFF0CC0CC0CC -....0CC0000CC000 -....0CCCCCCCC0.. -....0C000000C0.. -....000....000..`], - [ground, bitmap` -0000000000000000 -0000000000000000 -0C00000C0000000C -0CC00CCCC0CC0CC0 -CCCC0CCCC00CCCCC -CCCC0CCCCCCCCCCC -CC0CCCCCCCCCC0CC -CCCCCCCCCC0CCCC0 -0CCCCC0CCCCCCCCC -CCCCCCCCCCCCCCCC -CCCCCCCCC0CCCC0C -CCC0CCCCCCCCCCCC -CCCCC0CCCCCCCCCC -CCCCCCCCCCCCC0CC -CC0CCCCCCC0CCCCC -CCCCCC0CCCCCCCC0`], - [building1, bitmap` - -.....111111..... -....1LLLLLL1.... -...1LLLLLLLL1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LLLLLLLL1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LLLLLLLL1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LLLLLLLL1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LLLLLLLL1...`], - [building2, bitmap` -................ -....L........... -...1L........... -...1L......L.... -...1LL....7L1... -...1LL7.7L7L1... -...1LLLLLLLL1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LLLLLLLL1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LLLLLLLL1... -...1LL7L7L7L1... -...1LL7L7L7L1... -...1LLLLLLLL1...`], - [building3, bitmap` -................ -................ -................ -................ -................ -................ -1............... -LL.............. -L0.............. -LLL............. -L00L0........... -LLLLLLL......... -L00L00L00..0.... -LLLLLLLLL.LL.... -LLLLLLLLLLLLL.L. -1111111111111.LL`], -) - -setSolids([monkeyRight, monkeyLeft, ground, building1, building2, monkeyAttackRight, monkeyAttackLeft]) -level = 0 -const levels = [ - map` -........................ -........................ -........................ -........................ -........................ -m....1.................. -gggggggggggggggggggggggg`, - map ` -...... -...... -......` -] - -setMap(levels[level]) - - -const breakBuilding = (block) => { - if (block) { - const y = block.y - block.remove() - respawnBuilding(block.x, y) - brokenBuildingCount++ - buildingCountText = addText(`Buildings Broken: ${brokenBuildingCount}`, { - x: 0, - y: 3, - size: 25 - }) - if (brokenBuildingCount >= 50) { - clearAllTiles() - clearText() - isWon = true - level = 1 - const winText = addText(`You Won`, { - x: 6, - y: 8, - color: color`H` - }) - } - } -} -onInput("d", () => { - if(!isWon) { - getFirst(player).x += 1 - getFirst(player).type = monkeyRight - player = monkeyRight - isFacingRight = true - } -}) - -onInput("a", () => { - if(!isWon) { - getFirst(player).x -= 1 - getFirst(player).type = monkeyLeft - player = monkeyLeft - isFacingRight = false - } -}) - -onInput("j", () => { - level = 0 - brokenBuildingCount = 0 - getFirst(player).type = monkeyRight - player = monkeyRight - isFacingRight = true - clearText() - buildingCountText = addText(`Buildings Broken: ${brokenBuildingCount}`, { - x: 0, - y: 3 - }) - setMap(levels[level]) -}) - -onInput("i", () => { - if(!isWon) { - const playerSprite = getFirst(player) - if (playerSprite && playerSprite.x !== undefined && playerSprite.y !== undefined) { - if (isFacingRight) { - playerSprite.type = monkeyAttackRight - player = monkeyAttackRight - } else { - playerSprite.type = monkeyAttackLeft - player = monkeyAttackLeft - } - - checkBlock() - - const nextX = playerSprite.x + (isFacingRight ? 1 : -1) - const nextTile = getTile(nextX, playerSprite.y) - - nextTile.forEach(sprite => { - if (sprite.type === building2) { - setTimeout(() => { - changeBlockToBuilding3(sprite) - breakBuilding(sprite) - }, 500) - } - }) - } - } -}) - -afterInput(() => { - checkBrokenBuildings() -}) +/* +@title: Mirror_Mirror +@author: ethanJPope +@tags: [] +@addedOn: 2024-07-11 +*/ + +const monkeyRight = "m" +const monkeyLeft = "l" +const monkeyAttackLeft = "8" +const monkeyAttackRight = "9" + +const ground = "g" +const building1 = "1" +const building2 = "2" +const building3 = "3" + +let isWon = false +let isAttacking = false +let player = monkeyRight +let isFacingRight = true +let brokenBuildingCount = 0 +let buildingCountText = {} +let countdown = 60 +let countdownInterval +let level = 0; + +const clearAllTiles = () => { + for (let x = 0; x < width(); x++) { + for (let y = 0; y < height(); y++) { + clearTile(x, y); + } + } +} + +const checkBlock = () => { + const playerSprite = getFirst(player) + let nextX = playerSprite.x + (isFacingRight ? 1 : -1) + const nextTile = getTile(nextX, playerSprite.y) + + nextTile.forEach(sprite => { + if (sprite.type === building1) { + sprite.type = building2 + } + }) +} + +const getRandomInt = (max) => { + return Math.floor(Math.random() * max) +} + +const checkBrokenBuildings = () => { + getAll(building2).forEach(block => { + if (block.type === building2) { + const adjacentTileRight = getTile(block.x + 1, block.y) + const adjacentTileLeft = getTile(block.x - 1, block.y) + if (adjacentTileRight.some(sprite => sprite.type === monkeyAttackRight) || + adjacentTileLeft.some(sprite => sprite.type === monkeyAttackLeft)) { + breakBuilding(block) + } + } + }) +} + +const respawnBuilding = (y) => { + let newX = getRandomInt(24) + addSprite(newX, 5, building1) +} + +const changeBlockToBuilding3 = (block) => { + block.type = building3 +} +setLegend( + [monkeyRight, bitmap` + ......0000000... + 0....0CCCCCCC0.. + C0..0CCCCCCCCC0. + 0C0.0C00CFFFFF0. + 0C0.00FFCF00FF0. + 0C0.00FFCF00FF0. + 0C0.0C00CFFFFF00 + 0C0.0CCCFFFFFFF0 + 0C0.0CCFFFFFFFF0 + 0C0.0CC0000FF000 + 0CC00CC0CC0FFFF0 + .0CC0CC0CC0FFF0. + ..000CC0000CC0.. + ....0CCCCCCCC0.. + ....0C000000C0.. + ....000....000..`], + [monkeyLeft, bitmap` +...0000000...... +..0CCCCCCC0....0 +.0CCCCCCCCC0..0C +.0FFFFFC00C0.0C0 +.0FF00FCFF00.0C0 +.0FF00FCFF00.0C0 +00FFFFFC00C0.0C0 +0FFFFFFFCCC0.0C0 +0FFFFFFFFCC0.0C0 +000FF0000CC0.0C0 +0FFFF0CC0CC00CC0 +.0FFF0CC0CC0CC0. +..0CC0000CC000.. +..0CCCCCCCC0.... +..0C000000C0.... +..000....000....`], + [monkeyAttackRight, bitmap` + ....0000000..... + ...0CCCCCCC0.... + ..0CCCCCCCCC0... + 0.0C00CFFFFF0... + 0.00FFCF00FF0... + 0.00FFCF00FF0000 + 0.0C00CFFFFF00C0 + 0.0CCCFFFFFFF0C0 + 0.0CCFFFFFFFF000 + 0.0CC0000FF000.. + C00CC0CC0FFFF0.. + CC0CC0CC0FFF0... + 000CC0000CC0.... + ..0CCCCCCCC0.... + ..0C000000C0.... + ..000....000....`], + [monkeyAttackLeft, bitmap` +.....0000000.... +....0CCCCCCC0... +...0CCCCCCCCC0.. +...0FFFFFC00C0.0 +...0FF00FCFF00.0 +0000FF00FCFF00.0 +0C00FFFFFC00C0.0 +0C0FFFFFFFCCC0.0 +000FFFFFFFFCC0.0 +..000FF0000CC0.0 +..0FFFF0CC0CC00C +...0FFF0CC0CC0CC +....0CC0000CC000 +....0CCCCCCCC0.. +....0C000000C0.. +....000....000..`], + [ground, bitmap` +0000000000000000 +0000000000000000 +0C00000C0000000C +0CC00CCCC0CC0CC0 +CCCC0CCCC00CCCCC +CCCC0CCCCCCCCCCC +CC0CCCCCCCCCC0CC +CCCCCCCCCC0CCCC0 +0CCCCC0CCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCC0CCCC0C +CCC0CCCCCCCCCCCC +CCCCC0CCCCCCCCCC +CCCCCCCCCCCCC0CC +CC0CCCCCCC0CCCCC +CCCCCC0CCCCCCCC0`], + [building1, bitmap` + +.....111111..... +....1LLLLLL1.... +...1LLLLLLLL1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LLLLLLLL1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LLLLLLLL1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LLLLLLLL1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LLLLLLLL1...`], + [building2, bitmap` +................ +....L........... +...1L........... +...1L......L.... +...1LL....7L1... +...1LL7.7L7L1... +...1LLLLLLLL1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LLLLLLLL1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LLLLLLLL1... +...1LL7L7L7L1... +...1LL7L7L7L1... +...1LLLLLLLL1...`], + [building3, bitmap` +................ +................ +................ +................ +................ +................ +1............... +LL.............. +L0.............. +LLL............. +L00L0........... +LLLLLLL......... +L00L00L00..0.... +LLLLLLLLL.LL.... +LLLLLLLLLLLLL.L. +1111111111111.LL`], +) + +setSolids([monkeyRight, monkeyLeft, ground, building1, building2, monkeyAttackRight, monkeyAttackLeft]) +level = 0 +const levels = [ + map` +........................ +........................ +........................ +........................ +........................ +m....1.................. +gggggggggggggggggggggggg`, + map ` +...... +...... +......` +] + +setMap(levels[level]) + + +const breakBuilding = (block) => { + if (block) { + const y = block.y + block.remove() + respawnBuilding(block.x, y) + brokenBuildingCount++ + buildingCountText = addText(`Buildings Broken: ${brokenBuildingCount}`, { + x: 0, + y: 3, + size: 25 + }) + if (brokenBuildingCount >= 50) { + clearAllTiles() + clearText() + isWon = true + level = 1 + const winText = addText(`You Won`, { + x: 6, + y: 8, + color: color`H` + }) + } + } +} +onInput("d", () => { + if(!isWon) { + getFirst(player).x += 1 + getFirst(player).type = monkeyRight + player = monkeyRight + isFacingRight = true + } +}) + +onInput("a", () => { + if(!isWon) { + getFirst(player).x -= 1 + getFirst(player).type = monkeyLeft + player = monkeyLeft + isFacingRight = false + } +}) + +onInput("j", () => { + level = 0 + brokenBuildingCount = 0 + getFirst(player).type = monkeyRight + player = monkeyRight + isFacingRight = true + clearText() + buildingCountText = addText(`Buildings Broken: ${brokenBuildingCount}`, { + x: 0, + y: 3 + }) + setMap(levels[level]) +}) + +onInput("i", () => { + if(!isWon) { + const playerSprite = getFirst(player) + if (playerSprite && playerSprite.x !== undefined && playerSprite.y !== undefined) { + if (isFacingRight) { + playerSprite.type = monkeyAttackRight + player = monkeyAttackRight + } else { + playerSprite.type = monkeyAttackLeft + player = monkeyAttackLeft + } + + checkBlock() + + const nextX = playerSprite.x + (isFacingRight ? 1 : -1) + const nextTile = getTile(nextX, playerSprite.y) + + nextTile.forEach(sprite => { + if (sprite.type === building2) { + setTimeout(() => { + changeBlockToBuilding3(sprite) + breakBuilding(sprite) + }, 500) + } + }) + } + } +}) + +afterInput(() => { + checkBrokenBuildings() +}) diff --git a/games/Monty_Hall.js b/games/Monty_Hall.js index 56dd66d391..7c4f8ce1b9 100644 --- a/games/Monty_Hall.js +++ b/games/Monty_Hall.js @@ -1,8 +1,8 @@ /* @title: Monty Hall -@tags: ['beginner', 'simulation'] -@addedOn: 2022-11-06 @author: Leonard (Omay) +@tags: ['simulation'] +@addedOn: 2022-11-06 Why switching is better: The door you choose has a 1/3 chance of having the car. diff --git a/games/Morph-Madness.js b/games/Morph-Madness.js index 97e4f7b41b..6b7a51389e 100644 --- a/games/Morph-Madness.js +++ b/games/Morph-Madness.js @@ -1,7 +1,7 @@ /* @title: Morph-Madness @author: SimonDMC -@tags: ["puzzle", "logic"] +@tags: ['puzzle'] @addedOn: 2024-02-21 */ diff --git a/games/Morse_trainer.js b/games/Morse_trainer.js index 0b3375f6ac..1069b919cc 100644 --- a/games/Morse_trainer.js +++ b/games/Morse_trainer.js @@ -2,7 +2,7 @@ /* @title: Morse_trainer @author: Yuuta -@tags: [''] +@tags: [] @addedOn: 2023-12-21 */ diff --git a/games/Multiplayer_maze_race.js b/games/Multiplayer_maze_race.js index 2589171c56..55417332b2 100644 --- a/games/Multiplayer_maze_race.js +++ b/games/Multiplayer_maze_race.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Multiplayer maze @author: odczik @tags: [] @addedOn: 2024-08-05 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ let mazeSize = 10 // must be even, min: 10 diff --git a/games/Music!.js b/games/Music!.js index a6cd0f5ad4..753770eb1c 100644 --- a/games/Music!.js +++ b/games/Music!.js @@ -1,8 +1,8 @@ /* @title: Music! +@author: Akeell @tags: [] @addedOn: 2022-10-16 -@author: Akeell */ /* diff --git a/games/MusicGarden.js b/games/MusicGarden.js index 86f8d63327..5f527bb14d 100644 --- a/games/MusicGarden.js +++ b/games/MusicGarden.js @@ -2,8 +2,8 @@ @title: Music Garden @author: kubits @tags: [] -@img: "" @addedOn: 2024-05-20 +@img: "" */ /* diff --git a/games/MyForestMaze.js b/games/MyForestMaze.js index ad4f642d4d..87407078d1 100644 --- a/games/MyForestMaze.js +++ b/games/MyForestMaze.js @@ -2,7 +2,7 @@ /* @title: MyForestMaze @author: MI2 -@tags: ['explore'] +@tags: ['adventure'] @addedOn: 2023-06-15 */ diff --git a/games/Nim.js b/games/Nim.js index d1f36dd8cb..1fbd5e51fc 100644 --- a/games/Nim.js +++ b/games/Nim.js @@ -1,8 +1,8 @@ /* @title: Nim -@tags: ['strategy', 'classic'] -@addedOn: 2022-11-15 @author: Leonard (Omay) +@tags: ['strategy','retro'] +@addedOn: 2022-11-15 */ const match = "m"; diff --git a/games/Ninja_In_A_Bear_Trap_Factory.js b/games/Ninja_In_A_Bear_Trap_Factory.js index 4f037046f0..cbed716780 100644 --- a/games/Ninja_In_A_Bear_Trap_Factory.js +++ b/games/Ninja_In_A_Bear_Trap_Factory.js @@ -1,8 +1,8 @@ /* @title: Ninja In A Bear Trap Factory +@author: Matt The Banana @tags: ['strategy'] @addedOn: 2022-12-04 -@author: Matt The Banana */ diff --git a/games/Ninja_Run.js b/games/Ninja_Run.js index 21a97e11c2..2afde97816 100644 --- a/games/Ninja_Run.js +++ b/games/Ninja_Run.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Ninja Run @author: Acidicts -@tags: ["ninja"] +@tags: ['action'] @addedOn: 2024-00-00 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const left_wall = "l" diff --git a/games/Number_Nudger.js b/games/Number_Nudger.js index c6a802ecc0..b986de5110 100644 --- a/games/Number_Nudger.js +++ b/games/Number_Nudger.js @@ -1,8 +1,8 @@ /* @title: Number_Nudger +@author: Boon @tags: ['strategy'] @addedOn: 2023-01-02 -@author: Boon Instructions: Use the red player to move the blue number blocks into the green slots. diff --git a/games/Operation_Ocean.js b/games/Operation_Ocean.js index 9a269ea05e..cb3e3de86c 100644 --- a/games/Operation_Ocean.js +++ b/games/Operation_Ocean.js @@ -1,8 +1,8 @@ /* @title: Operation_Ocean +@author: ari-tistic @tags: ['strategy'] @addedOn: 2023-05-23 -@author: ari-tistic Keys: - A to move left diff --git a/games/Orb_Dungeon.js b/games/Orb_Dungeon.js index fb8ad2d56d..8b39b74f55 100644 --- a/games/Orb_Dungeon.js +++ b/games/Orb_Dungeon.js @@ -1,7 +1,7 @@ /* @title: Orb Dungeon @author: Dimitris Toulis -@tags: ['dungeon'] +@tags: ['adventure'] @addedOn: 2024-08-15 */ /* diff --git a/games/OrderTheKitchen.js b/games/OrderTheKitchen.js index 425dc20b44..cfed259e19 100644 --- a/games/OrderTheKitchen.js +++ b/games/OrderTheKitchen.js @@ -1,4 +1,8 @@ /* +@title: Order the kitchen! +@author: mrdarip +@tags: ['endless'] +@addedOn: 2024-06-29 👨‍🍳 DESCRIPTION: You are running a restaurant, so you must keep it ordered, as you recive dishes, you must put them beside others of their kind, let's see how long you last! @@ -8,10 +12,6 @@ a/d: move l: interact k: reset -@title: Order the kitchen! -@author: mrdarip -@tags: ['casual','infinite', 'endless'] -@addedOn: 2024-06-29 */ const player = "i"; diff --git a/games/Orpheus_Burger_Dash.js b/games/Orpheus_Burger_Dash.js index d983c7cc69..6e1e5517fc 100644 --- a/games/Orpheus_Burger_Dash.js +++ b/games/Orpheus_Burger_Dash.js @@ -1,8 +1,8 @@ /* @title: Orpheus Burger Dash +@author: SamsonC @tags: [] @addedOn: 2023-06-16 -@author: SamsonC */ const player = "p"; diff --git a/games/PASS_ALL.js b/games/PASS_ALL.js index cf6d4d851a..1f442e1f7e 100644 --- a/games/PASS_ALL.js +++ b/games/PASS_ALL.js @@ -1,8 +1,8 @@ /* @title: PASS_ALL +@author: Shivang0 @tags: ['strategy'] @addedOn: 2022-10-03 -@author: Shivang0 Instructions: 1) Cover All Tiles 2) You cannot take a step back. So, be careful diff --git a/games/Pac-Man_But_With_Stars.js b/games/Pac-Man_But_With_Stars.js index 1d43099ea9..830d18c3b1 100644 --- a/games/Pac-Man_But_With_Stars.js +++ b/games/Pac-Man_But_With_Stars.js @@ -1,8 +1,8 @@ /* @title: Pac-Man But With Stars -@tags: ['classic', 'strategy'] -@addedOn: 2022-12-01 @author: Austin +@tags: ['strategy','retro'] +@addedOn: 2022-12-01 controls: W, A, S, D - movement diff --git a/games/Pac_Man.js b/games/Pac_Man.js index 73a2bbc893..1a0cc7e63f 100644 --- a/games/Pac_Man.js +++ b/games/Pac_Man.js @@ -1,8 +1,8 @@ /* @title: Pac Man -@tags: ['classic'] -@addedOn: 2022-12-07 @author: Nico Koundakjian +@tags: ['retro'] +@addedOn: 2022-12-07 The Pac is back diff --git a/games/Paint_IT.js b/games/Paint_IT.js index 248866ae2a..0327912524 100644 --- a/games/Paint_IT.js +++ b/games/Paint_IT.js @@ -1,8 +1,8 @@ /* @title: Paint_IT +@author: N Rizwan @tags: ['sandbox'] @addedOn: 2022-09-14 -@author: N Rizwan */ /* diff --git a/games/Party_Games.js b/games/Party_Games.js index 2e72cc98e1..42accbbc55 100644 --- a/games/Party_Games.js +++ b/games/Party_Games.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Party Games @author: iambodha @tags: ['multiplayer'] -@img: "" @addedOn: 2024-06-22 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ const background = "b"; diff --git a/games/Path_Master.js b/games/Path_Master.js index 76beb9ddaf..005cbd0685 100644 --- a/games/Path_Master.js +++ b/games/Path_Master.js @@ -1,8 +1,8 @@ /* @title: Path Master @author: Mir Muhammad Abidul Haq (Ahnaf) +@tags: ['puzzle'] @addedOn: 2024-07-08 -@tags: ['sokoban'] Instructions: diff --git a/games/PennyPlatformer.js b/games/PennyPlatformer.js index c50767490e..2923498554 100644 --- a/games/PennyPlatformer.js +++ b/games/PennyPlatformer.js @@ -1,7 +1,7 @@ /* @title: Penny Platformer @author: Bright Li -@tags: ["penny"] +@tags: [] @addedOn: 2024-04-23 If you build a game using assets from the new Penny's Big Breakaway asset pack, diff --git a/games/Penny_s_Quest.js b/games/Penny_s_Quest.js index 86a293805f..f164eafe6a 100644 --- a/games/Penny_s_Quest.js +++ b/games/Penny_s_Quest.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Penny s Quest @author: OHIO-MAN -@tags: ["penny"] +@tags: [] @addedOn: 2024-04-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ /* Controls: diff --git a/games/Phil_Tom_Bug.js b/games/Phil_Tom_Bug.js index 0ba5624d47..aec43b39b5 100644 --- a/games/Phil_Tom_Bug.js +++ b/games/Phil_Tom_Bug.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Phil_Tom_Bug @author: Alexis, Westmoreland, Joy @tags: [] -@img: "" @addedOn: 2024-05-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ /* diff --git a/games/Physics_Sandbox.js b/games/Physics_Sandbox.js index f092a954ff..936e6e0bfd 100644 --- a/games/Physics_Sandbox.js +++ b/games/Physics_Sandbox.js @@ -1,8 +1,8 @@ /* @title: Physics Sandbox +@author: Henry Bass @tags: ['simulation'] @addedOn: 2023-03-27 -@author: Henry Bass Controls: diff --git a/games/Piano.js b/games/Piano.js index 826325a8c6..807edf8537 100644 --- a/games/Piano.js +++ b/games/Piano.js @@ -1,8 +1,8 @@ /* @title: Piano +@author: Scott @tags: ['simulation'] @addedOn: 2022-09-14 -@author: Scott Instructions: diff --git a/games/Ping-Pong.js b/games/Ping-Pong.js index 32047b805f..b8ef83aa4f 100644 --- a/games/Ping-Pong.js +++ b/games/Ping-Pong.js @@ -1,8 +1,8 @@ /* @title: Ping Pong -@tags: ['classic'] -@addedOn: 2024-07-05 @author: Cral-Cactus +@tags: ['retro'] +@addedOn: 2024-07-05 */ const paddle = "p"; const ball = "b"; diff --git a/games/Pixel_Peril.js b/games/Pixel_Peril.js index 5217031c75..782f581238 100644 --- a/games/Pixel_Peril.js +++ b/games/Pixel_Peril.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Pixel Peril @author: Outdatedcandy92 @tags: [] @addedOn: 2024-07-08 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Pizzeria.js b/games/Pizzeria.js index acfddf1ed4..f7eb540448 100644 --- a/games/Pizzeria.js +++ b/games/Pizzeria.js @@ -1,7 +1,7 @@ /* @title: Pizzeria @author: dilbert335 -@tags: ['classic'] +@tags: ['retro'] @addedOn: 2024-08-06 */ diff --git a/games/Pluffy_The_Cage_Bird.js b/games/Pluffy_The_Cage_Bird.js index 8145afdfed..90980eeb73 100644 --- a/games/Pluffy_The_Cage_Bird.js +++ b/games/Pluffy_The_Cage_Bird.js @@ -1,8 +1,8 @@ /* -@tags: ['timer-puzzle'] -@addedOn: 2023-12-24 @title: Pluffy_The_Cage_Bird @author: Nihal_K +@tags: ['puzzle','timed'] +@addedOn: 2023-12-24 @inspired by 'Flurffy Game' */ const pluffy = "p" diff --git a/games/Pocketnaut_Adventure.js b/games/Pocketnaut_Adventure.js index e83f9c462f..6f2fb53792 100644 --- a/games/Pocketnaut_Adventure.js +++ b/games/Pocketnaut_Adventure.js @@ -1,8 +1,8 @@ /* -@tags: [''] -@addedOn: 2023-12-24 @title: Pockenmaut Adventures I @author: Ray Rumore +@tags: [] +@addedOn: 2023-12-24 */ /* Help Pocketnaut get himself home in time diff --git a/games/Poisonous-Snake.js b/games/Poisonous-Snake.js index b713c926f7..780a2e4b91 100644 --- a/games/Poisonous-Snake.js +++ b/games/Poisonous-Snake.js @@ -1,10 +1,10 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started @title: Poisonous Snake @author: dkim19375 @tags: [] @addedOn: 2024-06-23 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started */ const player = "p" diff --git a/games/Pokemon_Game.js b/games/Pokemon_Game.js new file mode 100644 index 0000000000..16a20b46cb --- /dev/null +++ b/games/Pokemon_Game.js @@ -0,0 +1,1801 @@ +/* +@title: Pokemon Game +@author: ItzShubhamDev +@tags: [] +@addedOn: 2024-09-17 +*/ + +const bulbasaur = 'b'; +const charmander = 'c'; +const squirtle = 's'; +const pikachu = 'p'; +const geodude = 'g'; +const abra = 'a'; +const dewgong = 'd'; +const weedle = 'w'; +const gastly = 'h'; +const pidgey = 'y'; +const sandshrew = 'r'; +const dratini = 'n'; +const eevee = 'e'; +const ekans = 'k'; +const mankey = 'm'; +const bg = '0'; +const pokeball = '1'; +const grass = '2'; +const stone = '3'; +const hpFull = '4'; +const hpHalf = '5'; +const hpZero = '6'; +const wall = '7'; +const whiteTile = '8'; // Just for Help Map + +// Add all pokemons variables into an Array for easier access +const pokemons = [bulbasaur, charmander, squirtle, pikachu, geodude, abra, dewgong, weedle, gastly, pidgey, sandshrew, dratini, eevee, ekans, mankey] +// Add all decoration objects variables into an Array for easier access +const objects = [grass, stone, pokeball] +// Pokemon Data for Battles Damage Calculation +const pokemonData = { + "b": { + "name": "Bulbasaur", + "types": [ + "Grass", + "Poison" + ], + "stats": { + "hp": "45", + "attack": "49", + "defense": "49", + "spAttack": "65", + "spDefense": "65", + "speed": "45" + }, + "moves": { + "tackle": { + "name": "Tackle", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "vine-whip": { + "name": "Vine Whip", + "type": "Grass", + "power": "45", + "accuracy": "100", + "class": "physical" + } + } + }, + "c": { + "name": "Charmander", + "types": [ + "Fire", + "" + ], + "stats": { + "hp": "39", + "attack": "52", + "defense": "43", + "spAttack": "60", + "spDefense": "50", + "speed": "65" + }, + "moves": { + "scratch": { + "name": "Scratch", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "ember": { + "name": "Ember", + "type": "Fire", + "power": "40", + "accuracy": "100", + "class": "special" + } + } + }, + "s": { + "name": "Squirtle", + "types": [ + "Water", + "" + ], + "stats": { + "hp": "44", + "attack": "48", + "defense": "65", + "spAttack": "50", + "spDefense": "64", + "speed": "43" + }, + "moves": { + "tackle": { + "name": "Tackle", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "water-gun": { + "name": "Water Gun", + "type": "Water", + "power": "40", + "accuracy": "100", + "class": "special" + }, + "rapid-spin": { + "name": "Rapid Spin", + "type": "Normal", + "power": "50", + "accuracy": "100", + "class": "physical" + } + } + }, + "w": { + "name": "Weedle", + "types": [ + "Bug", + "Poison" + ], + "stats": { + "hp": "40", + "attack": "35", + "defense": "30", + "spAttack": "20", + "spDefense": "20", + "speed": "50" + }, + "moves": { + "poison-sting": { + "name": "Poison Sting", + "type": "Poison", + "power": "15", + "accuracy": "100", + "class": "physical" + }, + "bug-bite": { + "name": "Bug Bite", + "type": "Bug", + "power": "60", + "accuracy": "100", + "class": "physical" + } + } + }, + "y": { + "name": "Pidgey", + "types": [ + "Normal", + "Flying" + ], + "stats": { + "hp": "40", + "attack": "45", + "defense": "40", + "spAttack": "35", + "spDefense": "35", + "speed": "56" + }, + "moves": { + "tackle": { + "name": "Tackle", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "gust": { + "name": "Gust", + "type": "Flying", + "power": "40", + "accuracy": "100", + "class": "special" + } + } + }, + "k": { + "name": "Ekans", + "types": [ + "Poison", + "" + ], + "stats": { + "hp": "35", + "attack": "60", + "defense": "44", + "spAttack": "40", + "spDefense": "54", + "speed": "55" + }, + "moves": { + "wrap": { + "name": "Wrap", + "type": "Normal", + "power": "15", + "accuracy": "90", + "class": "physical" + }, + "poison-sting": { + "name": "Poison Sting", + "type": "Poison", + "power": "15", + "accuracy": "100", + "class": "physical" + }, + "bite": { + "name": "Fire Fang", + "type": "Fire", + "power": "60", + "accuracy": "90", + "class": "physical" + } + } + }, + "p": { + "name": "Pikachu", + "types": [ + "Electric", + "" + ], + "stats": { + "hp": "35", + "attack": "55", + "defense": "40", + "spAttack": "50", + "spDefense": "50", + "speed": "90" + }, + "moves": { + "quick-attack": { + "name": "Quick Attack", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "electro-ball": { + "name": "Electro Ball", + "type": "Electric", + "power": "30", + "accuracy": "100", + "class": "special" + }, + "thunder-shock": { + "name": "Thunder Shock", + "type": "Electric", + "power": "40", + "accuracy": "100", + "class": "special" + }, + "nuzzle": { + "name": "Nuzzle", + "type": "Electric", + "power": "20", + "accuracy": "100", + "class": "physical" + } + } + }, + "r": { + "name": "Sandshrew", + "types": [ + "Ground", + "" + ], + "stats": { + "hp": "50", + "attack": "75", + "defense": "85", + "spAttack": "20", + "spDefense": "30", + "speed": "40" + }, + "moves": { + "scratch": { + "name": "Scratch", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "bulldoze": { + "name": "Bulldoze", + "type": "Ground", + "power": "60", + "accuracy": "100", + "class": "physical" + } + } + }, + "m": { + "name": "Mankey", + "types": [ + "Fighting", + "" + ], + "stats": { + "hp": "40", + "attack": "80", + "defense": "35", + "spAttack": "35", + "spDefense": "45", + "speed": "70" + }, + "moves": { + "scratch": { + "name": "Scratch", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "low-kick": { + "name": "Low Kick", + "type": "Fighting", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "covet": { + "name": "Covet", + "type": "Normal", + "power": "60", + "accuracy": "100", + "class": "physical" + }, + "fury-swipes": { + "name": "Fury Swipes", + "type": "Normal", + "power": "18", + "accuracy": "80", + "class": "physical" + } + } + }, + "a": { + "name": "Abra", + "types": [ + "Psychic", + "" + ], + "stats": { + "hp": "25", + "attack": "20", + "defense": "15", + "spAttack": "105", + "spDefense": "55", + "speed": "90" + }, + "moves": { + "confusion": { + "name": "Confusion", + "type": "Psychic", + "power": "50", + "accuracy": "100", + "class": "special" + }, + "charge-beam": { + "name": "Charge Beam", + "type": "Electric", + "power": "50", + "accuracy": "90", + "class": "special" + } + } + }, + "g": { + "name": "Geodude", + "types": [ + "Rock", + "Ground" + ], + "stats": { + "hp": "40", + "attack": "80", + "defense": "100", + "spAttack": "30", + "spDefense": "30", + "speed": "20" + }, + "moves": { + "tackle": { + "name": "Tackle", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "rollout": { + "name": "Rollout", + "type": "Rock", + "power": "30", + "accuracy": "90", + "class": "physical" + } + } + }, + "d": { + "name": "Dewgong", + "types": [ + "Water", + "Ice" + ], + "stats": { + "hp": "65", + "attack": "45", + "defense": "55", + "spAttack": "45", + "spDefense": "70", + "speed": "45" + }, + "moves": { + "headbutt": { + "name": "Headbutt", + "type": "Normal", + "power": "70", + "accuracy": "100", + "class": "physical" + }, + "icy-wind": { + "name": "Icy Wind", + "type": "Ice", + "power": "55", + "accuracy": "95", + "class": "special" + } + } + }, + "h": { + "name": "Gastly", + "types": [ + "Ghost", + "Poison" + ], + "stats": { + "hp": "30", + "attack": "35", + "defense": "30", + "spAttack": "100", + "spDefense": "35", + "speed": "80" + }, + "moves": { + "lick": { + "name": "Acid Spray", + "type": "Poison", + "power": "40", + "accuracy": "100", + "class": "special" + }, + "payback": { + "name": "Hex", + "type": "Ghost", + "power": "50", + "accuracy": "90", + "class": "special" + } + } + }, + "e": { + "name": "Eevee", + "types": [ + "Normal", + "" + ], + "stats": { + "hp": "55", + "attack": "55", + "defense": "50", + "spAttack": "45", + "spDefense": "65", + "speed": "55" + }, + "moves": { + "tackle": { + "name": "Tackle", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + }, + "covet": { + "name": "Covet", + "type": "Normal", + "power": "60", + "accuracy": "100", + "class": "physical" + }, + "quick-attack": { + "name": "Quick Attack", + "type": "Normal", + "power": "40", + "accuracy": "100", + "class": "physical" + } + } + }, + "n": { + "name": "Dratini", + "types": [ + "Dragon", + "" + ], + "stats": { + "hp": "41", + "attack": "64", + "defense": "45", + "spAttack": "50", + "spDefense": "50", + "speed": "50" + }, + "moves": { + "wrap": { + "name": "Wrap", + "type": "Normal", + "power": "15", + "accuracy": "95", + "class": "physical" + }, + "twister": { + "name": "Twister", + "type": "Dragon", + "power": "40", + "accuracy": "100", + "class": "special" + } + } + } +} +// Type Chart for Effectiveness Calculation +const typeChart = { + "Normal": { + "Rock": 0.5, + "Ghost": 0 + }, + "Fire": { + "Fire": 0.5, + "Water": 0.5, + "Grass": 2, + "Ice": 2, + "Bug": 2, + "Rock": 0.5, + "Dragon": 0.5 + }, + "Water": { + "Fire": 2, + "Water": 0.5, + "Grass": 0.5, + "Ground": 2, + "Rock": 2, + "Dragon": 0.5 + }, + "Electric": { + "Water": 2, + "Electric": 0.5, + "Grass": 0.5, + "Ground": 0, + "Flying": 2, + "Dragon": 0.5 + }, + "Grass": { + "Fire": 0.5, + "Water": 2, + "Grass": 0.5, + "Poison": 0.5, + "Ground": 2, + "Flying": 0.5, + "Bug": 0.5, + "Rock": 2, + "Dragon": 0.5 + }, + "Ice": { + "Fire": 0.5, + "Water": 0.5, + "Grass": 2, + "Ice": 0.5, + "Ground": 2, + "Flying": 2, + "Dragon": 2 + }, + "Fighting": { + "Normal": 2, + "Ice": 2, + "Rock": 2, + "Poison": 0.5, + "Flying": 0.5, + "Psychic": 0.5, + "Bug": 0.5, + "Ghost": 0 + }, + "Poison": { + "Grass": 2, + "Poison": 0.5, + "Ground": 0.5, + "Rock": 0.5, + "Ghost": 0.5 + }, + "Ground": { + "Fire": 2, + "Electric": 2, + "Grass": 0.5, + "Poison": 2, + "Flying": 0, + "Bug": 0.5, + "Rock": 2 + }, + "Flying": { + "Electric": 0.5, + "Grass": 2, + "Fighting": 2, + "Bug": 2, + "Rock": 0.5 + }, + "Psychic": { + "Fighting": 2, + "Poison": 2, + "Psychic": 0.5 + }, + "Bug": { + "Fire": 0.5, + "Grass": 2, + "Fighting": 0.5, + "Poison": 0.5, + "Flying": 0.5, + "Psychic": 2, + "Ghost": 0.5 + }, + "Rock": { + "Fire": 2, + "Ice": 2, + "Fighting": 0.5, + "Ground": 0.5, + "Flying": 2, + "Bug": 2 + }, + "Ghost": { + "Normal": 0, + "Psychic": 2, + "Ghost": 2 + }, + "Dragon": { + "Dragon": 2 + } +} + +setBackground(bg) + +// Pokemon Sprites Credits: https://www.reddit.com/r/pokemon/comments/7w5ghd/all_151_gen_1_pokemon_pixel_art_by_me/ +setLegend( + [bulbasaur, bitmap` +................ +................ +................ +................ +................ +...........222.. +.......22222422. +..222.224444442. +..242224D444D22. +..244444DDDDD2.. +..234434CDDD22.. +..244444C4DD2... +..2244DD444D2... +...2D44444442... +...2D2442D442... +...2222222222...`], + [charmander, bitmap` +................ +................ +................ +................ +.....999........ +....99999....... +...909909....... +...999999...3... +....99999..633.. +.....999...663.. +....99999..363.. +...9.929.9..9... +....92229..9.... +....9222999..... +...99..99....... +................`], + [squirtle, bitmap` +................ +................ +................ +................ +......277....... +.....27777...... +.....70707...... +.....77777...... +......777....... +......FFF2C..... +....7FFFF72C.... +...77FFF772C.... +.....FFFFF2C.... +.....FFFFF2C77.. +......FFF2C777.. +......7..7...... +`], + [pikachu, bitmap` +................ +................ +.........0...... +.........6...... +.066.66666...... +...6666666...... +....606606...... +....366663...... +....368863.6.... +.....6666.66.... +..666699666.666. +.....96669..699. +.....96666.69... +....666666C9.... +....699996...... +...669..666..... +`], + [geodude, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +......111....... +11...11111...... +11..1LL1LL1..... +1...1011101..... +11..1111111..11. +..11.1LLL1.1111. +......LLL....... +................ +`], + [abra, bitmap` +................ +................ +...666666....... +....6666........ +....66666....6.. +....6666.....6.. +...LL66LLL...6.. +....LLLLL...L6.. +....9LLL9..69L.. +....96699.69C... +....69666C9C.... +..69666996C..... +.666....666..... +................ +................ +................ +`], + [dewgong, bitmap` +................ +................ +................ +....2........... +..2222....2..... +.202202..222.... +.220222..2222... +.222222L.22112.. +..2222L2.111.22. +...LLL222.1..22. +..2222222...221. +112222222222221. +112222111222211. +1.222211111211.. +...22221111..... +....222211...... +`], + [weedle, bitmap` +................ +................ +......2......... +.....22......... +....9999........ +...909099....... +...889999....... +...889999....... +....9999........ +.....CCC........ +....9999........ +...F99F9....2... +.....CC99...2... +....F99F9...9... +......CC99999... +......F9F99F.... +`], + [gastly, bitmap` +................ +................ +......HH........ +..H..H...HH..... +....HHHHHH...H.. +...HHHHHHHHHH... +..HHH000HHH..... +..HH20002HHHH... +...H22022HHH.... +..HH00000HHHH... +...HH000HHHH..H. +....HHHHH....... +..........H..... +................ +................ +................ +`], + [pidgey, bitmap` +................ +................ +................ +.......C........ +....6CC......... +....C666........ +...99L2L........ +....96LLC....... +....66CCC....... +...666CCCC...... +...666CCC6.CC... +...661CC66CCC... +....111666C..... +.....11166...... +.....9..9....... +....9.99.9...... +`], + [sandshrew, bitmap` +................ +................ +................ +...66666999..... +....669999...... +....7697L....... +....L69L29...... +....2992999..... +...69229969C.... +...69222699C.... +....962699CC..6. +....222229CC66C. +...62222269CCC.. +...99222699C.... +....9....99..... +..299.....2..... +`], + [dratini, bitmap` +................ +................ +................ +................ +.......22...2... +........22777... +.......2270777.. +........2777222. +.......22777222. +..........777... +..........772... +..........722... +....7777..722... +..77222777222... +.772..2222222... +........2222.... +`], + [eevee, bitmap` +................ +................ +.CC........CC... +CLLC......CLLC.. +.CLLC....CLLC... +..CLLC..CLLC.... +...CLCCCCLC..... +....CCCCCC.....C +....C0CC0C...CCC +....C0CC0C..CCCC +...2CCCCCC2.CCCC +...22CCCC22C.CC. +....222222CCC... +....C2222CCCC... +....CCCCCCCCC... +....CC.CC..1C...`], + [ekans, bitmap` +................ +................ +................ +...HHHH......... +..HHH6HH........ +..HHHHHH...6.... +...88HHH...66... +...HHHH.....6... +.....66.....HH.. +.....HH......H.. +....8HH11H...H.. +...8HH118HH.HH.. +...HH888HH8HH... +..H8HHHHH8H1.... +..HH88888HH1.... +...HHHHHHH1.....`], + [mankey, bitmap` +................ +................ +................ +................ +................ +....22....22.... +CC.2CC2222CC2.CC +CC.2C222222C2.CC +.C..22222222..C. +..222332332222.. +....22383222.CC2 +....22222221.C.2 +.....222221.222. +....2.2111.2.... +....C......C.... +...CC.....C.C... +`], + [bg, bitmap` +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444`], + [pokeball, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +......3333...... +.....333333..... +....33000033.... +....00022000.... +....00022000.... +....22000022.... +.....222222..... +......2222......`], + [grass, bitmap` +................ +................ +................ +.DDDD........... +....DD....DDDD.. +.....DD..DD..... +......D..D...... +...DD.D..D...... +..D..DDD.D...... +.D...DDDDDDDD... +.D...DDDDDD.DD.. +.D..DDDDDD...D.. +...DD.DDDD...D.. +..DD.DDDDDDDD.D. +..D..DDDDD..D... +.....DDDDDD.....`], + [stone, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +......111....... +....1111111..... +...111111111.... +...111111111.... +..111111111111..`], + [hpFull, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +..CCCCCCCCCCCC.. +.C777777777777C. +.C777777777777C. +..CCCCCCCCCCCC.. +................ +................`], + [hpHalf, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +..CCCCCCCCCCCC.. +.C666666222222C. +.C666666222222C. +..CCCCCCCCCCCC.. +................ +................`], + [hpZero, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +..CCCCCCCCCCCC.. +.C322222222222C. +.C322222222222C. +..CCCCCCCCCCCC.. +................ +................`], + [wall, bitmap` +CCCC2222CCCC2222 +CCCC2222CCCC2222 +22CCCC2222CCCC22 +22CCCC2222CCCC22 +2222CCCC2222CCCC +2222CCCC2222CCCC +CC2222CCCC2222CC +CC2222CCCC2222CC +CCCC2222CCCC2222 +CCCC2222CCCC2222 +22CCCC2222CCCC22 +22CCCC2222CCCC22 +2222CCCC2222CCCC +2222CCCC2222CCCC +CC2222CCCC2222CC +CC2222CCCC2222CC`], + [whiteTile, bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222`] +); + +setSolids([bulbasaur, charmander, squirtle, pikachu, geodude, abra, dewgong, weedle, gastly, pidgey, sandshrew, dratini, eevee, ekans, mankey, wall]); + +// Declaring Maps separate instead of Array for Easy Comparision of Maps in further Code +const startMap = map` +..... +..... +..... +1...2`; +const battleMap = map` +..... +..... +..... +.....`; +const groundMap = map` +.......... +7777777777 +7........7 +7........7 +7........7 +7........7 +7........7 +7........7 +7........7 +7777777777`; +const helpMap = map` +88888888888888888888 +88...888888888888888 +88.b.888888888888888 +88...888888888888888 +88888888888888888888 +8c..1.88888888888888 +87777788888888888888 +87.p.788888888888888 +872..788888888888888 +87b.3788888888888888 +87777788888888888888 +88888888888888888888 +88888888888888888888 +8.1.4s88888888888888 +82....88888888888888 +8.....88888888888888 +8b4.2388888888888888 +88888888888888888888 +88888888888888888888 +88888888888888888888`; + +// Repetitive Colors so declared as variables +const white = color`2`; +const yellow = color`6`; +const black = color`0`; +const gray = color`1`; + +setMap(startMap); +let selected = 0; // To get the pokemon from pokemons Array +let selectedMap = startMap; // To check various functionality and other things in further code +let pokeballs = 0; // To store collected pokeballs +let totalBalls = 0; // To store total pokeballs +let collectedMons = 0; // To store defeated pokemons +let totalMons = -1; // To store total pokemons (-1 to ensure actual pokemons count excluding counter and player) +let participant = bulbasaur; // For easier access to pokemons +let opponent = bulbasaur; // For easier access to pokemons +let participantHp = 0; // For easier access to pokemons' Hp +let opponentHp = 0; // For easier access to pokemons' Hp +let state = ''; // Set state for Atk Menu +let selectedMove = ''; // To store the move from atk menu +let groundMapState = ''; // To ensure map persistency of same map after returning from battle +let battleMapState = ''; // To ensure map persistency of same map after showing damages dealt + +const pokemonMoves = []; // To store moves for easier access accross various functions +const currentBattleOpponent = [] // To store the coords for battling Pokemon to remove it from map after battle ends + +// Just looks cool +addText('Starting Game...', { x: 2, y: 7, color: white }) +setTimeout(() => { + gameStartup(bulbasaur) +}, 1000) + +onInput("a", () => { + if (selectedMap == startMap) { + changePokemon("a") + } else if (selectedMap == groundMap) { + // Movement control + const p = getFirst(pokemons[selected]) + p.x--; + } else if (selectedMap == battleMap) { + let nextState; + if (state == 'Atk') nextState = 'Flee' + else if (state == 'Pass') nextState = 'Atk' + else if (state == 'Flee') nextState = 'Pass' + if (nextState) menu(nextState) + } +}) + +onInput("d", () => { + if (selectedMap == startMap) { + changePokemon("d") + } else if (selectedMap == groundMap) { + // Movement control + const p = getFirst(pokemons[selected]) + p.x++; + } else if (selectedMap == battleMap) { + // Actions Menu + let nextState; + if (state == 'Atk') nextState = 'Pass' + else if (state == 'Pass') nextState = 'Flee' + else if (state == 'Flee') nextState = 'Atk' + if (nextState) menu(nextState) + } +}) + +onInput("w", () => { + if (selectedMap == groundMap) { + // Movement control + const p = getFirst(pokemons[selected]) + p.y--; + } else if (selectedMap == battleMap) { + // Actions Menu + if (state == 'Atk') { + const i = pokemonMoves.indexOf(selectedMove); + if (i < pokemonMoves.length - 1) { + selectedMove = pokemonMoves[i + 1] + } else { + selectedMove = pokemonMoves[0] + } + atkMenu() + } + } +}) + +onInput("s", () => { + if (selectedMap == groundMap) { + // Movement control + const p = getFirst(pokemons[selected]) + p.y++; + } else if (selectedMap == battleMap) { + // Moves Menu + if (state == 'Atk') { + const i = pokemonMoves.indexOf(selectedMove); + if (i > 0) { + selectedMove = pokemonMoves[i - 1] + } else { + selectedMove = pokemonMoves[pokemonMoves.length - 1] + } + atkMenu() + } + } +}) + +onInput("i", () => { + if (selectedMap == startMap) { + startGame() + } else if (selectedMap == battleMap) { + // Moves Menu + if (state == 'Atk') { + atkMenu() + } else if (state == 'Pass') { + selectedMove = 'Pass' + atk() + } else if (state == 'Flee') { + endScreen() + } + } +}) + +onInput("k", () => { + if (selectedMap == battleMap) { + // Use selected move + if (state == 'Atk' && selectedMove.length > 0) { + atk() + } + } +}) + +onInput("j", () => { + if (selectedMap == startMap) { + // One click restart + if (state == 'End Screen') { + gameStartup(bulbasaur) + } + } +}) + +onInput("l", () => { + // Help Menu Related + if (selectedMap == startMap) { + setMap(helpMap) + selectedMap = helpMap + addHelpText() + } else if (selectedMap == helpMap) { + setMap(startMap) + selectedMap = startMap + gameStartup(pokemons[selected]) + } +}) + +afterInput(() => { + if (selectedMap == groundMap) { + checkOnPokeball() + checkNearbyPokemon() + checkGameEnd() + } +}) + +// Start Menu + +function gameStartup(p) { + // Remove all text, add a pokemon and some texts + clearText() + clearTile(2, 1) + addSprite(2, 1, p) + const name = pokemonData[p].name + const x = name.length > 8 ? 6 : name.length > 6 ? 7 : 8 + addText("Pick a Pokemon", { x: 3, y: 1, color: white }); + addText("(A / D to Change)", { x: 2, y: 3, color: white }); + addText(name, { x, y: 9, color: white }); + addText("Press I to Start", { x: 2, y: 11, color: white }); + addText("L for Help", { x: 5, y: 14, color: white }); +} + +function changePokemon(input) { + // To select a pokemon from various available options + if (input == 'a') { + const temp = selected; + if (selected <= 0) { + selected = pokemons.length - 1; + } else { + selected--; + } + setPokemon(pokemons[selected], pokemons[temp]); + } else if (input == 'd') { + const temp = selected; + if (selected < pokemons.length - 1) { + selected++; + } else { + selected = 0; + } + setPokemon(pokemons[selected], pokemons[temp]); + } +} + +function setPokemon(n, o) { + // To set pokemon Sprite + const old = getFirst(o) + old.remove() + addSprite(old.x, old.y, n) + gameStartup(n) +} + +// Help Menu + +function addHelpText() { + // Add all text for Help Menu + clearText() + addText('Maps', { x: 3, y: 0, color: black }) + addText('Controls', { x: 9, y: 0, color: yellow }) + addText(' a/d \nPokemon', { x: 9, y: 1, color: gray }) + addText('i Start', { x: 9, y: 3, color: gray }) + addText(' w/a/s/d\n Movement', { x: 8, y: 6, color: gray }) + addText(' w/a/s/d\n Movement', { x: 8, y: 6, color: black }) + addText('w/a/s/d\n Menu', { x: 9, y: 9, color: gray }) + addText('i - Item\n Select', { x: 9, y: 11, color: gray }) + addText('k - Move\n Select', { x: 9, y: 13, color: gray }) +} + +// Main Map Area + +function startGame() { + // Prepare the map by removing all text, setting variables, adding Player Pokemon + clearText() + setMap(groundMap) + prepareGroundMap() + addSprite(1, 8, pokemons[selected]) + selectedMap = groundMap; +} + +function prepareGroundMap() { + // Adds Collectors Sprites, Counters, Objects, Interactable Pokemons + selected == 0 ? addSprite(0, 0, charmander) : addSprite(0, 0, bulbasaur) + addSprite(5, 0, pokeball) + for (let i = 0; i < objects.length; i++) { + const limit = i == 2 ? random(2, 4) : random(4, 6) + for (let j = 0; j < limit; j++) { + const [x, y] = getRandomGroundXY() + clearTile(x, y) + addSprite(x, y, objects[i]) + } + } + for (let i = 0; i < random(3, 5); i++) { + const [x, y] = getRandomGroundXY() + clearTile(x, y); + const pokemon = pokemons[random(0, pokemons.length - 1)] + if (pokemon == pokemons[selected]) { + continue + } + addSprite(x, y, pokemon) + } + totalBalls = getAll(pokeball).length - 1; + pokemons.forEach(p => { + totalMons += getAll(p).length; + }) + addCounterTexts() +} + +function getRandomGroundXY() { + // Randomizied positions of Objects and Pokemons so that map isn't boring + let x = random(1, 8) + let y = random(2, 8) + if (x == 1 && y == 8) { + [x, y] = getRandomGroundXY() + } + return [x, y] +} + +function addCounterTexts() { + // Adds the counter texts + clearText() + addText(`${collectedMons} / ${totalMons}`, { x: 4, y: 0, color: collectedMons == totalMons ? yellow : white }) + addText(`${pokeballs} / ${totalBalls}`, { x: 12, y: 0, color: pokeballs == totalBalls ? yellow : white }) +} + +function checkOnPokeball() { + // Checks if the player pokemon is on a pokeball and updates the counter + const p = getFirst(pokemons[selected]) + const sprites = getTile(p.x, p.y) + for (const sprite of sprites) { + if (sprite.type == pokeball) { + sprite.remove() + pokeballs++; + clearText() + addCounterTexts() + } + } +} + +function checkNearbyPokemon() { + // Checks if in an area of 9*9 of interactable pokemon to start battle + const p = getFirst(pokemons[selected]); + const [x, y] = [p.x, p.y]; + for (let i = x - 1; i <= x + 1; i++) { + for (let j = y - 1; j <= y + 1; j++) { + const sprites = getTile(i, j) + for (const sprite of sprites) { + if (pokemons.includes(sprite.type) && sprite.type != pokemons[selected]) { + currentBattleOpponent.length = 0; + currentBattleOpponent.push(sprite.x, sprite.y); + startBattle(pokemons[selected], sprite.type) + break + } + } + } + } +} + +function saveGroundMap() { + // Store the maps objects and pokemons to ensure persistent map after battle with one pokemon + let map = '' + for (let i = 0; i < 10; i++) { + let y = '' + for (let j = 0; j < 10; j++) { + let x = '.' + const sprites = getTile(j, i) + sprites.forEach(s => { + x = s.type + }) + y += x + } + map += `${y}\n` + } + groundMapState = map +} + +function loadSavedGroundMap() { + // Load all the saved objects and pokemons after a battle + let m, n; + if (currentBattleOpponent.length == 2) { + [m, n] = currentBattleOpponent + } + clearText() + setMap(groundMap) + selectedMap = groundMap + addCounterTexts() + const yAxis = groundMapState.split('\n') + for (let y = 0; y < yAxis.length; y++) { + for (let x = 0; x < yAxis[y].length; x++) { + clearTile(x, y) + if (m == x && n == y) continue + addSprite(x, y, yAxis[y][x]) + } + } + const p = getFirst(pokemons[selected]); + if (!p) addSprite(1, 8, pokemons[selected]) +} + +// Battle + +function startBattle(c, o) { + // Initiates a battle adds Participant and Opponent Pokemon, various objects for decoration and HP Bars and Values + saveGroundMap() + clearText() + setMap(battleMap); + selectedMap = battleMap; + participant = c; + opponent = o; + participantHp = parseInt(pokemonData[c]['stats']['hp']) + opponentHp = parseInt(pokemonData[o]['stats']['hp']) + addSprite(1, 2, c) + addSprite(3, 1, o) + addText('v/s', { x: 9, y: 8, color: white }) + setTimeout(() => { + getTile(1, 2)[0].remove() + getTile(3, 1)[0].remove() + clearText() + addObjectsToBattleMap(5); + addSprite(0, 3, c) + addSprite(4, 0, o) + menu('Atk') + }, 2000) +} + +function addObjectsToBattleMap(c) { + // Adds various objects across the battle map just for decoration + for (let i = 0; i < c; i++) { + const j = random(0, objects.length - 1) + const [x, y] = getRandomXY() + const bgs = getAll(bg); + const len = getAll(objects[j]).length; + if (len >= 2) { + continue + } + clearTile(x, y) + addSprite(x, y, objects[j]) + } +} + +function getRandomXY() { + // Returns Random X and Y coords for placement of objects + let x = random(0, 4) + let y = random(0, 3) + if (x == 0 && y == 3 || x == 4 && y == 0 || x == 1 && y == 3 || x == 3 && y == 0) { + [x, y] = getRandomXY() + } + return [x, y] +} + +function menu(s) { + // Interaction Menu to Choose what the Pokemon Does + clearText(); + const states = ['Atk', 'Pass', 'Flee'] + const posX = { 'Atk': 1, 'Pass': 5, 'Flee': 10 } + states.forEach(state => { + addText(state, { x: posX[state], y: 12, color: state == s ? yellow : white }) + }) + state = s; + hpBars() +} + +function hpBars() { + // Place Hp Bars and Values near the pokemons + const p1 = pokemonData[participant] + const p2 = pokemonData[opponent] + let pBar, oBar; + const hp1 = parseInt(p1['stats']['hp']) + const hp2 = parseInt(p2['stats']['hp']) + hp1Percent = (participantHp / hp1) * 100; + hp2Percent = (opponentHp / hp2) * 100; + if (hp1Percent >= 50) pBar = hpFull + else if (hp1Percent >= 20) pBar = hpHalf + else pBar = hpZero + if (hp2Percent >= 50) oBar = hpFull + else if (hp2Percent >= 20) oBar = hpHalf + else oBar = hpZero + clearTile(1, 3) + clearTile(3, 0) + addSprite(1, 3, pBar) + addSprite(3, 0, oBar) + addText(`HP: ${participantHp}`, { x: 4, y: 13, color: white }) + addText(`HP: ${opponentHp}`, { x: 10, y: 1, color: white }) +} + +function atkMenu() { + // Show the Moves of the Pokemon + if (state == 'Atk') { + clearText() + menu('Atk') + const pokemon = pokemonData[participant] + const moves = pokemon.moves + const keys = Object.keys(moves) + if (selectedMove.length == 0) selectedMove = moves[keys[0]].name; + for (let i = 0; i < keys.length; i++) { + const mv = moves[keys[i]] + const y = 12 - (i + 1) * 2 + addText(mv.name, { x: 1, y, color: mv.name == selectedMove ? yellow : white }) + if (!pokemonMoves.includes(mv.name)) pokemonMoves.push(mv.name) + } + } +} + +function atk() { + // Main Atk function responsible for damage calculation, damage display, switching back to Main Map after battle ending, etc. + const mv = selectedMove; + const p1 = pokemonData[participant] + const p2 = pokemonData[opponent] + const p1Moves = [] + for (const [key, value] of Object.entries(p1['moves'])) { + p1Moves.push(value) + } + let p1Move = {}, + p1HitCheck = false; + if (mv != "Pass") { + p1Move = p1Moves.filter(m => m['name'] == mv)[0]; + p1HitCheck = checkAccuracyResult(parseInt(p1Move['accuracy']) / 100) + } + const p2Moves = [] + for (const [key, value] of Object.entries(p2['moves'])) { + p2Moves.push(value) + } + const p2Move = p2Moves[random(0, p2Moves.length - 1)]; + const p2HitCheck = checkAccuracyResult(parseInt(p2Move['accuracy']) / 100) + let p1Dmg = 0, + p2Dmg = 0; + let eff1 = 1, + eff2 = 1 + if (p1HitCheck) { + const [t1, t2] = p2['types'] + eff1 = calculateEffectiveness(p1Move['type'], t1, t2) + if (p1Move['class'] == "physical") { + p1Dmg = calculateDmg(parseInt(p1['stats']['attack']), parseInt(p2['stats']['defense']), parseInt(p1Move['power']), eff1) + } else { + p1Dmg = calculateDmg(parseInt(p1['stats']['spAttack']), parseInt(p2['stats']['spDefense']), parseInt(p1Move['power']), eff1) + } + } + if (p2HitCheck) { + const [t1, t2] = p1['types'] + eff2 = calculateEffectiveness(p2Move['type'], t1, t2) + if (p2Move['class'] == "physical") { + p2Dmg = calculateDmg(parseInt(p2['stats']['attack']), parseInt(p1['stats']['defense']), parseInt(p2Move['power']), eff2) + } else { + p2Dmg = calculateDmg(parseInt(p2['stats']['spAttack']), parseInt(p1['stats']['spDefense']), parseInt(p2Move['power']), eff2) + } + } + if (p1['speed'] >= p2['speed']) { + if (opponentHp - p1Dmg > 0) { + opponentHp -= p1Dmg + participantHp - p2Dmg > 0 ? participantHp -= p2Dmg : participantHp = 0; + } else { + opponentHp = 0 + } + } else { + if (participantHp - p2Dmg > 0) { + participantHp -= p2Dmg + opponentHp - p1Dmg > 0 ? opponentHp -= p1Dmg : opponentHp = 0; + } else { + participantHp = 0 + }; + } + const winner = checkBattleWinner() + if (winner) { + if (winner == participant) { + clearText() + setMap(battleMap) + selectedMap = battleMap + collectedMons += 1 + addText('You Won the Battle \nSending To Ground', { x: 1, y: 4, color: yellow }) + setTimeout(() => { + loadSavedGroundMap() + checkGameEnd() + }, 2000) + } else { + endScreen() + } + return; + } + saveBattleMap() + setMap(battleMap) + selectedMap = battleMap + p1MoveName = mv != 'Pass' ? p1Move['name'] : 'None' + const pass = mv == 'Pass'; + setMovesText(p1['name'], p2['name'], p1MoveName, p2Move['name'], eff1, eff2, p1Dmg, p2Dmg, pass, !p1HitCheck, !p2HitCheck) + setTimeout(() => { + loadSavedBattleMap() + menu('Atk') + }, 4000) +} + +function checkAccuracyResult(acc) { + // For Accuracy Based Moves + return Math.random() < acc; +} + +function setMovesText(p1, p2, m1, m2, eff1, eff2, d1, d2, pass, miss1, miss2) { + // Display of Damage Dealt and the move's effectiveness + clearText() + let eff1Text, eff2Text; + if (eff1 < 1) eff1Text = "not very effective" + else if (eff1 > 1) eff1Text = "super effective" + if (eff2 < 1) eff2Text = "not very effective" + else if (eff2 > 1) eff2Text = "super effective" + let text1, text2; + if (eff1Text) text1 = `${p1} used \n${m1}, \nit inflicted \n${d1} damage. \nIt is \n${eff1Text}` + else text1 = `${p1} used \n${m1}, \nit inflicted \n${d1} damage.` + if (miss1) text1 = `${p1} used \n${m1}, \n but it missed` + if (pass) text1 = `${p1} skipped.` + if (eff2Text) text2 = `${p2} used \n${m2}, \nit inflicted \n${d2} damage. \nIt is \n${eff2Text}` + else text2 = `${p2} used \n${m2}, \nit inflicted \n${d2} damage.` + if (miss2) text2 = `${p2} used \n${m2}, \n but it missed` + addText(text1, { x: 1, y: 7, color: yellow }) + addText(text2, { x: 1, y: 0, color: yellow }) +} + +function checkBattleWinner() { + // For ending the game if someone's hp is 0 + if (participantHp == 0) { + return opponent + } else if (opponentHp == 0) { + return participant + } +} + +function saveBattleMap() { + // Saving to load the contents after showing damage + let map = '' + for (let i = 0; i < 4; i++) { + let y = '' + for (let j = 0; j < 5; j++) { + let x = '.' + const sprites = getTile(j, i) + sprites.forEach(s => { + x = s.type + }) + y += x + } + map += `${y}\n` + } + battleMapState = map +} + +function loadSavedBattleMap() { + // Loading from saves after damage dealt screen + const yAxis = battleMapState.split('\n') + for (let y = 0; y < yAxis.length; y++) { + for (let x = 0; x < yAxis[y].length; x++) { + clearTile(x, y) + addSprite(x, y, yAxis[y][x]) + } + } +} + +// Game End + +function checkGameEnd() { + // Check if Player completed all task + if (collectedMons == totalMons && pokeballs == totalBalls) { + endScreen(true) + } +} + +function endScreen(won) { + // Ending Screen Depending on User Won or Lost + clearText() + setMap(startMap) + selectedMap = startMap + addSprite(2, 1, pokemons[selected]) + const text = won ? "Congratulations! \n You Won" : "Sorry! You Lost" + addText(text, { x: 3, y: 3, color: yellow }) + state = 'End Screen' + addText('Press J to Play \n Again', { x: 2, y: 9, color: white }) +} + +// Utilities + +function random(min, max) { + // Was to be Used Many Times so Created a Function + return Math.floor(Math.random() * (max - min + 1) + min) +} + +function calculateEffectiveness(attackType, t1, t2) { + // To calculate move Effectiveness against a type + let effectiveness = 1.0; + if (typeChart[attackType] && typeChart[attackType][t1]) { + effectiveness *= typeChart[attackType][t1]; + } + if (t2 && t2.length > 0 && typeChart[attackType] && typeChart[attackType][t2]) { + console.log(typeChart[attackType][t2]) + effectiveness *= typeChart[attackType][t2]; + } + /* + Extra part because idk why if (typeChart[attackType] && typeChart[attackType][t1]) was not executing when + typeChart[attackType][t1] was 0 + */ + try { + if (typeChart[attackType][t1] == 0 || t2 && t2.length > 0 && typeChart[attackType][t2] == 0) effectiveness = 0; + return effectiveness; + } catch { + return effectiveness + } +} + +function calculateDmg(atk, def, power, eff) { + // Damage Calculation, made many modifications to original formula to ensure some good numbers + const atkDefModifier = atk / def; + let powerModifier = 1; + if (power < 20) powerModifier = 2 + const intitialDamage = (2 * 1 * 1 / 5) + 2 + const atkDefDamage = (intitialDamage * power * powerModifier * atkDefModifier / 50) + random(5, 10) + const finalDamage = atkDefDamage * eff + return Math.ceil(finalDamage); +} diff --git a/games/Prison Game.js b/games/Prison Game.js index b13df7882c..72e82e47c6 100644 --- a/games/Prison Game.js +++ b/games/Prison Game.js @@ -1,7 +1,7 @@ /* @title: Prison Game -@author: Fallhicory -@tags: ['maze', 'game','levels', 'singleplayer', 'prison'] +@author: Fallhicory +@tags: ['puzzle'] @addedOn: 2024-08-15 */ diff --git a/games/Project_Zero.js b/games/Project_Zero.js new file mode 100644 index 0000000000..5d51fba66a --- /dev/null +++ b/games/Project_Zero.js @@ -0,0 +1,1911 @@ +/* +@title: Project Zero +@author: Creeperlulu +@tags: ['puzzle'] +@addedOn: 2024-09-03 +*/ + +// ----------INIT---------- + +// player +const player = "p" + +const playerF = bitmap` +....LLLLLLLL.3.. +...LLLL1111LL0.. +...L111111LL0... +...1444004441... +...100000000L... +...L04000040L... +...L040000401... +...L000440001... +....L1111LL1.... +...LLLL111LLL... +...LLL1106L11... +...11L1111111... +...1211L11L21... +....L11L1LLL.... +.....L111L1..... +.....LL..11.....` +const playerB = bitmap` +..C.LLLLLLLL.... +..0LL1111LLLL... +...LLL111111L... +...111100L111... +...L110440111... +...LL1044011L... +...LLL10011LL... +...11L11111LL... +....110000LL.... +...L10202201L... +...110022001L... +...LL022020L1... +...1202022021... +....LL00001L.... +.....1L111L..... +.....11..LL.....` +const playerR = bitmap` +......LLLL...... +.....LL1111..... +.....11111L..... +....01LL1140.... +....01LLL100.... +....01LLL140.... +....01LLL140.... +.....11L1104.... +......L1L1...... +.....0L1L1L..... +.....0L1L1L..... +.....0L1LLL..... +.....0L2LL1..... +......1L1L...... +.......1L....... +.......1L.......` +const playerL = bitmap` +......LLLL...... +.....11LLLL..... +.....L11111..... +....041LLL10.... +....001LLL10.... +....041LLL10.... +....0411LL10.... +....4011111..... +......1L1L...... +.....11L1L0..... +.....L1L110..... +.....1LL1L0..... +.....1LL2L0..... +......11L1...... +.......1L....... +.......L1.......` +const playerDarkF = bitmap` +.............3.. +................ +................ +....44400444.... +....00000000.... +....04000040.... +....04000040.... +....00044000.... +................ +................ +.........6...... +................ +................ +................ +................ +................` + +//decoration +const labbench1 = "☺" +const labbench2 = "☻" +const labbench1t = bitmap` +1111111111111111 +1222222222222222 +1222222222222222 +122222222227C722 +172777722227C722 +1272227222272722 +12733C7222722272 +127CC37222764472 +12733372227FF472 +1227772222277722 +1222222222222222 +1111111111111111 +1111111111111111 +LL.............. +LL.............. +LL..............` +const labbench2t = bitmap` +1111111111111111 +2222222222LLLLL1 +2111111111LLLLL1 +2122222222552LL1 +2177777777557LL1 +2177777757577LL1 +2177777757777121 +2177777775577121 +2177777777777121 +2111111111111121 +2222222222222221 +1111111111111111 +1111111111111111 +..............LL +..............LL +..............LL` +const labbench3 = "♦" +const labbench4 = "♣" +const labbench3t = bitmap` +1111111111111111 +1222222222222222 +1222222222222222 +1272722727227272 +127C7CC7C7CC7C72 +12CCCCCCCCCCCCC2 +1279722747227672 +1279722747227672 +12C7CCCC7CCCC7C2 +12CCCCCCCCCCCCC2 +1222222222222222 +1111111111111111 +1111111111111111 +LL.............. +LL.............. +LL..............` +const labbench4t = bitmap` +1111111111111111 +2222222222LLLLL1 +2111111111LLLLL1 +2122222222222LL1 +2122222222222LL1 +21222222LL222LL1 +2122222L0LL22121 +2122222LL0L22121 +21222222LL222121 +2111111111111121 +2222222222222221 +1111111111111111 +1111111111111111 +..............LL +..............LL +..............LL` +const plant = "♥" +const plantt = bitmap` +.....4.......... +.....44...4..... +......44.44..... +.DDDD.44444.DD.. +DDDDDD4444DDDDD. +..DDDDD44DDDDDDD +....DDD4DDDDD..D +.....DDDDDD..... +....C0DDDD0C.... +....CC0000CC.... +....CCCCCCCC.... +....CCCCCCCC.... +.....CCCCCC..... +.....CCCCCC..... +......CCCC...... +................` +const plant2 = "♠" +const plant2t = bitmap` +................ +..D...4......... +..DD..44..444... +..DDD.444444.... +...DDD44444..... +....DDD44DDD.... +....DDD4DDDDDD.. +.....DDDDDD.DDD. +....C0DDDD0C.DD. +....CC0000CC.... +....CCCCCCCC.... +....CCCCCCCC.... +.....CCCCCC..... +.....CCCCCC..... +......CCCC...... +................` +const pushplant = "♂" +const capsuleb = "•" +const capsulebt = bitmap` +.52277700011175. +.52777700111075. +.57777001110075. +.57770011100775. +.57770111007775. +.57771110077775. +.57721100077775. +.57221000077775. +.52227000077775. +1522770000077751 +1527777000077751 +L55777770007755L +7LL5555555555LL7 +L77LLLLLLLLLL77L +.LL7777777777LL. +...LLLLLLLLLL...` +const capsulet = "◘" +const capsulett = bitmap` +....LLLLLLLL.... +..LL11111111LL.. +.L1111LLLL1111L. +L1111LLLLLL1111L +L1111LLLLLL1111L +LL1111LLLL1111LL +L7LL11111111LL7L +.L77LLLLLLLL77L. +.5LL77777777LL5. +.577LLLLLLLL775. +.57777222277775. +.57771111077775. +.57711110007775. +.57211100000725. +.52221000000225. +.52227000001225.` +const noteonlabbench = "○" +const noteonlabbencht = bitmap` +1111111111111111 +1222200000002222 +1222206666660222 +1222206000060222 +1222206666660222 +1222206060060222 +1222206666660222 +1222206006060222 +1222206666660222 +1222220000000222 +1222222222222222 +1111111111111111 +1111111111111111 +LL.............. +LL.............. +LL..............` +const deadbot = "◙" +const deadbott = bitmap` +....1LL1........ +...LLLLL1LL1.... +...LLLL1LLLL1... +.3.1000011LL00.. +..31000000001.0. +..7100000000L... +..710L000000L... +.7.1000000L0L... +....1LLL00006... +...LLLLL1LL.6... +...LL1LL00L..... +..LL1L11111.LL.. +..L2LLLL11L21L1. +...1.1LL1LL1.121 +...LLLLLL1L1L.LL +...LL......LL...` +const noteonwall = "♀" +const noteonwallt = bitmap` +1111111L11111111 +1111111L11111111 +1111111L11111111 +LLLLLLLLLLLLLLLL +111L100001111111 +111L106660000111 +111L106666660111 +LLLLL06006660LLL +1111066660060111 +1111060066601111 +1111066660601111 +LLLL00006660LLLL +111111110000L111 +111111111111L111 +111111111111L111 +LLLLLLLLLLLLLLLL` +const blacktile = "♪" +const flowers = "♫" +const flowerst = bitmap` +LLL7L7LLL3L3LLLL +LHCH6C8C8C6CCCCL +LC6C47C6C3439C9L +LHD545848C4CC6CL +LCDC6CC4CCCC9D9L +L9C9D5CC3C3CCDCL +LC6CD6C6C6C7C7CL +L949CC6C3D3C6CCL +LC4CC6D6CDC747CL +LC4CCCDCCCCC4CCL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +11............11 +11............11 +11............11` +const crops = "☼" +const cropst = bitmap` +LLLLL4LLLLLLLLLL +LCC444C44C44CCCL +LC4444C4C4444C4L +LC444CCCC444CC4L +LCC4CC44CC4CCCCL +LCCCCC44CCCCC44L +LC444C4CC44C44CL +LCC44CC4C44C44CL +LC44CC44C44C4CCL +LC4CCC4CCC4CCCCL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +11............11 +11............11 +11............11` +const salad = "►" +const saladt = bitmap` +LLLLLLLLLLLLLLLL +LCCCCCCCCCCCCCCL +LCCCCCCCDDCCDCCL +LCDDCCCDDDCDDDCL +LCDDDCD4DCD4DDCL +LCC44CD4DD4DDCCL +LCCD44D4444DCCCL +LCCDD44DDDDDCCCL +LCCCCDDDDDCCCCCL +LCCCCCCCCCCCCCCL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +11............11 +11............11 +11............11` +const tulips = "◄" +const tulipst = bitmap` +LLLLLLLLLLLLLLLL +LCFCFFCC9C99CCCL +LCFFFCCC9999CCCL +LCC33C3CC977C7CL +LCC33336C64777CL +L8C433C6664C77CL +L888C4CC6CCCDCCL +L888C4CCDCCCDCCL +LCDCC4CCDCCCDCCL +LCDCCCCCCCCCDCCL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +11............11 +11............11 +11............11` + +// sounds +const speaking = tune` +37.5: D4-37.5 + D5-37.5 + G5-37.5 + A4-37.5, +37.5: D4-37.5 + D5-37.5 + A5-37.5 + A4-37.5, +37.5: D4-37.5 + D5-37.5 + G5-37.5 + A4-37.5, +37.5: C4-37.5 + C5-37.5 + F5-37.5 + A4-37.5, +1050` +const footstep = tune` +60: C4~60 + C5~60, +1860` +const getItem = tune` +150: D4~150 + D5/150, +150: A4~150 + A5/150, +150: B5/150 + B4~150, +150: A5/150 + A4~150, +150: D5-150, +4050` +const error = tune` +120: D4-120 + D5/120 + B5^120, +120: D4-120 + D5/120 + B5^120, +3600` +const boot = tune` +230.76923076923077: C4^230.76923076923077 + C5^230.76923076923077 + F5~230.76923076923077, +230.76923076923077: F4~230.76923076923077 + D5^230.76923076923077 + G5^230.76923076923077, +230.76923076923077, +230.76923076923077: D4~230.76923076923077 + G4^230.76923076923077 + C5^230.76923076923077, +230.76923076923077: C5~230.76923076923077 + A5^230.76923076923077, +6230.7692307692305` +const zerospeaking = tune` +37.5: G4-37.5 + D4-37.5, +37.5: A4-37.5 + D4-37.5, +37.5: G4-37.5 + D4-37.5, +37.5: C4-37.5 + F4-37.5, +1050` +const zeroscreaming = tune` +37.5: D4/37.5 + A5/37.5 + E5-37.5, +37.5: D4/37.5 + B5/37.5 + F5-37.5, +37.5: D4/37.5 + A5/37.5 + E5-37.5, +37.5: C4/37.5 + G5/37.5 + D5-37.5, +1050` +const zerosadness = tune` +60: D4-60 + F4-60, +60: D4-60 + G4-60, +60: D4-60 + F4-60, +60: C4-60 + E4-60, +1680` +const dotdotdot = tune` +75: D4~75, +75, +75: D4~75, +75, +75: D4~75, +2025` +const loading = tune` +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +150: G4~150, +150: G4~150, +150: D5~150, +300, +150: C4~150, +150: C5~150, +150` + +// musics +const thelab = tune` +545.4545454545455: C4/545.4545454545455 + C5^545.4545454545455, +545.4545454545455: D4~545.4545454545455, +545.4545454545455: C4~545.4545454545455 + A4^545.4545454545455 + A5-545.4545454545455, +545.4545454545455: D4~545.4545454545455 + F5~545.4545454545455, +545.4545454545455: D4/545.4545454545455 + E5-545.4545454545455, +545.4545454545455: D5^545.4545454545455 + E4~545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455, +545.4545454545455: B4^545.4545454545455 + E4~545.4545454545455, +545.4545454545455: E4/545.4545454545455 + B4^545.4545454545455, +545.4545454545455: F4~545.4545454545455, +545.4545454545455: E4~545.4545454545455 + D5^545.4545454545455 + G5-545.4545454545455, +545.4545454545455: F4~545.4545454545455 + E5~545.4545454545455, +545.4545454545455: D4/545.4545454545455 + D5-545.4545454545455, +545.4545454545455: E4~545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455, +545.4545454545455: B4^545.4545454545455 + E4~545.4545454545455, +545.4545454545455: C4/545.4545454545455 + C5^545.4545454545455, +545.4545454545455: D4~545.4545454545455, +545.4545454545455: C4~545.4545454545455 + A4^545.4545454545455 + A5-545.4545454545455, +545.4545454545455: D4~545.4545454545455 + F5~545.4545454545455, +545.4545454545455: D4/545.4545454545455 + D5-545.4545454545455, +545.4545454545455: E4~545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455, +545.4545454545455: B4^545.4545454545455 + E4~545.4545454545455, +545.4545454545455: E4/545.4545454545455 + C5^545.4545454545455, +545.4545454545455: F4~545.4545454545455, +545.4545454545455: E4~545.4545454545455 + D5^545.4545454545455 + E5-545.4545454545455, +545.4545454545455: E5~545.4545454545455 + F4~545.4545454545455, +545.4545454545455: D4/545.4545454545455 + C5-545.4545454545455 + F5^545.4545454545455, +545.4545454545455: E4~545.4545454545455 + D5^545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455, +545.4545454545455: B4^545.4545454545455 + E4/545.4545454545455` +const thelabtest = tune` +545.4545454545455: C4~545.4545454545455 + C5^545.4545454545455 + F4/545.4545454545455, +545.4545454545455: F4/545.4545454545455, +545.4545454545455: C4~545.4545454545455 + A4^545.4545454545455, +545.4545454545455, +545.4545454545455: D4~545.4545454545455 + G4/545.4545454545455, +545.4545454545455: D5^545.4545454545455 + G4/545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455, +545.4545454545455: B4^545.4545454545455, +545.4545454545455: E4~545.4545454545455 + B4^545.4545454545455 + D4/545.4545454545455 + G4-545.4545454545455, +545.4545454545455: D4/545.4545454545455 + G4-545.4545454545455, +545.4545454545455: E4~545.4545454545455 + D5^545.4545454545455, +545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C4/545.4545454545455, +545.4545454545455: C4/545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455, +545.4545454545455: B4^545.4545454545455, +545.4545454545455: C4~545.4545454545455 + C5^545.4545454545455 + F4/545.4545454545455, +545.4545454545455: F4/545.4545454545455, +545.4545454545455: C4~545.4545454545455 + A4^545.4545454545455, +545.4545454545455, +545.4545454545455: D4~545.4545454545455 + G4/545.4545454545455, +545.4545454545455: G4/545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455 + A4-545.4545454545455, +545.4545454545455: B4^545.4545454545455 + G4-545.4545454545455, +545.4545454545455: E4~545.4545454545455 + C5^545.4545454545455 + D4/545.4545454545455 + A4-545.4545454545455, +545.4545454545455: D4/545.4545454545455, +545.4545454545455: E4~545.4545454545455 + D5^545.4545454545455, +545.4545454545455: E5^545.4545454545455, +545.4545454545455: D4~545.4545454545455 + E5^545.4545454545455 + C4/545.4545454545455, +545.4545454545455: C5^545.4545454545455 + C4/545.4545454545455, +545.4545454545455: D4~545.4545454545455 + C5^545.4545454545455, +545.4545454545455: B4^545.4545454545455` +const thelabold = tune` +600: D4^600 + D5~600, +600: G4^600, +600: C5^600 + C4~600, +600: A4^600, +600: D4^600 + D5~600, +600: G4^600, +600: C5^600 + C4~600, +600: B4^600, +600: E4^600 + E5~600, +600: A4^600, +600: D5^600 + D4~600, +600: B4^600, +600: E4^600 + E5~600, +600: A4^600, +600: E5^600 + E4~600, +600: B4^600, +600: G5^600 + G4~600, +600: D5^600, +600: E5^600 + E4~600, +600: G4^600, +600: G5^600 + G4~600, +600: D5^600, +600: E5^600 + E4~600, +600: E4^600, +600: D5^600 + D4~600, +600: C5^600, +600: A4^600 + A5~600, +600: G4^600, +600: F4^600 + F5~600, +600: D5^600, +600: A4^600 + A5~600, +600: E4^600` +const zerotheme = tune` +500: D4~500 + C5/500 + E5^500, +500: A4~500, +500: G4~500 + E4/500, +500: F4~500, +500: D4~500 + F4/500, +500: C5~500, +500: B4~500, +500: A4~500 + F5^500, +500: E4~500 + C5/500 + E5^500, +500: E5~500, +500: D5~500 + E4/500, +500: C5~500, +500: B4~500 + G4/500, +500: A4~500, +500: G4~500, +500: F4~500 + F5^500, +500: D4~500 + C5/500 + D5^500, +500: A4~500, +500: G4~500 + E4/500, +500: F4~500, +500: D4~500 + F4/500, +500: C5~500, +500: B4~500, +500: A4~500 + F5^500, +500: D4~500 + C5/500 + E5^500, +500: E5~500, +500: D5~500 + E4/500, +500: C5~500, +500: B4~500 + A4/500, +500: A4~500, +500: G4~500, +500: F4~500 + G5^500` +const betrayal = tune` +600: A4-600 + E4~600 + A5^600, +600: E5-600, +600: A4-600 + E4/600 + E5^600, +600: E5-600 + D4/600, +600: A4-600 + E4/600 + E5^600, +600: E5-600, +600: A4-600 + E4~600 + E5^600, +600: E5-600, +600: G4-600 + D4~600 + A5^600, +600: D5-600, +600: G4-600 + D4/600 + E5^600, +600: D5-600 + C4/600, +600: G4-600 + D4/600 + E5^600, +600: D5-600, +600: G4-600 + D4~600 + E5^600, +600: D5-600, +600: F4-600 + C4~600 + A5^600, +600: C5-600, +600: F4-600 + C4/600 + E5^600, +600: C5-600 + D4/600, +600: F4-600 + C4/600 + E5^600, +600: C5-600, +600: F4-600 + C4~600 + E5^600, +600: C5-600, +600: E4-600 + A5^600 + A4~600, +600: B4-600, +600: E4-600 + E5^600 + A4~600 + C4/600, +600: B4-600 + D4/600, +600: F4-600 + F5^600 + C5/600, +600: C5-600, +600: G4-600 + G5^600 + D4~600 + E5/600, +600: D5-600` + + +const emptymusic = tune`` + + +// main +const background = "b" +const tile = "t" +const tilet = bitmap` +222222222222222L +222222222222222L +222222222222222L +222222222222222L +2222222222222220 +222222222222222L +222222222222222L +222222222222222L +222222222222222L +222222222222222L +222222222222222L +2222222222222220 +2222222222222220 +2222222222222220 +222222222222222L +00LLLLLLL0LL000L` +const wall = "w" +const wallt = bitmap` +1111111L11111111 +1111111L11111111 +1111111L11111111 +LLLLLLLLLLLLLLLL +111L111111111111 +111L111111111111 +111L111111111111 +LLLLLLLLLLLLLLLL +11111111L1111111 +11111111L1111111 +11111111L1111111 +LLLLLLLLLLLLLLLL +111111111111L111 +111111111111L111 +111111111111L111 +LLLLLLLLLLLLLLLL` +const door = "d" +const lockeddoor = "l" +const doort = bitmap` +1110111111110111 +111011LLLL110111 +1110111111110111 +LLL011LLLL110LLL +1110111111110111 +111011LLLL110111 +1110111111110111 +LLL0111111110LLL +111011111LL10111 +1110111111L10111 +1110111111110111 +LLL0111111110LLL +1110111111110111 +1110111111110111 +11101LLLLLL10111 +LLL0111111110LLL` +const plantgoal = "g" +const plantgoalt = bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +......LLLL...... +.....LLLLLL..... +......LLLL...... +................` +const brokenwall = "x" +const brokenwallt = bitmap` +1111101L11111111 +1111101L11111111 +1111110L11111111 +LL0LLLLLLLLLLL0L +110L111111000011 +1110111110111111 +111L011100001111 +LLLLL0L0LLLL00LL +11011010L1111111 +10111101L1111111 +10111011L1111111 +0L0LL0LLLLLLL00L +110110111111L110 +111101001111L111 +111111110011L111 +LLLLLLLLLL0LLLLL` +const key = "k" +const keyt = bitmap` +................ +................ +................ +................ +................ +....L11......... +...1L.LL....L... +...L...11L11L... +...11.L1..L1.... +....L1L...L1.... +................ +................ +................ +................ +................ +................` + +// Zero +const zero = "z" +const zerodeadt = bitmap` +....L00L........ +...00000L00L.... +...0000L0000L... +.8.L0000LL0000.. +..8L00000000L.0. +..6L000000000... +..6L0L0000000... +.6.L000000L00... +....L0000000D... +...00000L00.D... +...00L00000..... +..00L0LLLLL.00.. +..020000LL02L0L. +...L.L00L00L.L2L +...000000L0L0.00 +...00......00...` +const zeroeyesopent = bitmap` +....L00L........ +...00000L00L.... +...0000L0000L... +.8.L7770LL0000.. +..8L00000770L.3. +..6L070000070... +..6L070000700... +.6.L000770700... +....L0000000D... +...00000L00.D... +...00L00000..... +..00L0LLLLL.00.. +..020000LL02L0L. +...L.L00L00L.L2L +...000000L0L0.00 +...00......00...` +const zerohalft = bitmap` +....L00LL00L.... +...000000000L... +...0000LLL000... +...L7770077700.. +.8.L00000000L.3. +..8L070000700... +..6L070000700... +.6.L000770000... +.6..L000L00L.D.. +...00000000..... +...00L00000..... +..00L0LLLLL.00.. +..020000LL02L0L. +...L.L00L00L.L2L +...000000L0L0.00 +...00......00...` +const zerosurpriset = bitmap` +....L00LL00L.... +...000000000L... +...0000LLL000... +...L0000000000.. +.8.L77700777L.3. +..8L707007070... +..6L777007770... +.6.L000770000... +.6..L000L00L.D.. +...00000000..... +...00L00000..... +..00L0LLLLL.00.. +..020000LL02L0L. +...L.L00L00L.L2L +...000000L0L0.00 +...00......00...` +const zerohumt = bitmap` +....L00LL00L.... +...000000000L... +...0000LLL000... +...L0000077700.. +.8.L77700000L.3. +..8L000000700... +..6L070000700... +.6.L000770000... +.6..L000L00L.D.. +...00000000..... +...00L00000..... +..00L0LLLLL.00.. +..020000LL02L0L. +...L.L00L00L.L2L +...000000L0L0.00 +...00......00...` +const zeroloadt = bitmap` +....L00LL00L.... +...000000000L... +...0000LLL000... +...L0002100000.. +.8.L00200100L.7. +..8L00000L000... +..6L0000L0000... +.6.L000000000... +.6..L000L00L.D.. +...00000000..... +...00L00000..... +..00L0LLLLL.00.. +..020000LL02L0L. +...L.L00L00L.L2L +...000000L0L0.00 +...00......00...` +const zerosadt = bitmap` +....L00LL00L.... +...000000000L... +...0000LLL000... +...L0000000000.. +.8.L07700770L.3. +..8L700000070... +..6L070000700... +.6.L000770000... +.6..L000L00L.D.. +...00000000..... +...00L00000..... +..00L0LLLLL.00.. +..020000LL02L0L. +...L.L00L00L.L2L +...000000L0L0.00 +...00......00...` + +const zeroF = bitmap` +....L00LL00L.3.. +...000000000L0.. +...0000LLL000... +...L777007770... +...L00000000L... +...L070000700... +...0070000700... +...0000770000... +....L000L00L.... +...L00L000LLL... +...L0L0007L00... +...00L0000000... +...0200L00L20... +....L00L0LLL.... +.....L000L0..... +.....LL..00.....` +const zeroB = bitmap` +..C.000LL000.... +..0LL000000LL... +...LLL000000L... +...000022L000... +...L002772000... +...000277200L... +...0LL02200L0... +...00L00000L0... +....002222LL.... +...L02020020L... +...002200220L... +...LL200202L0... +...0220200220... +....LL22220L.... +.....0L000L..... +.....00..LL.....` +const zeroR = bitmap` +......L000...... +.....LL0000..... +.....00000L..... +....00LL0070.... +....00LLL000.... +....0000L070.... +....0000L070.... +.....0000007.... +......L0L0...... +.....000L0L..... +.....000L0L..... +.....0L000L..... +.....0L2000..... +......0L0L...... +.......0L....... +.......0L.......` +const zeroL = bitmap` +......L000...... +.....00L00L..... +.....L00000..... +....070L0000.... +....000L0L00.... +....07000L00.... +....0700LL00.... +....7000000..... +......0L0L...... +.....00L0L0..... +.....L0L000..... +.....0L00L0..... +.....0L02L0..... +......00L0...... +.......0L....... +.......L0.......` +const zeroDarkF = bitmap` +.............3.. +................ +................ +....77700777.... +....00000000.... +....07000070.... +....07000070.... +....00077000.... +................ +................ +.........7...... +................ +................ +................ +................ +................` + + +// Interaction +var interaction = ""; +var interacting = false; + +// UI + +const black = bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` +const yellow = bitmap` +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666` +const empty = bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................` +var cutscene = false +var tempX; +var tempY; +var tempPlantX; +var tempPlantY; +var currentBG; +var currentPlayer; +var currentZero; +var hasKey = false; +var wallKickTimes = 0; +var wallBroken = false +var talkedToRobot1 = false + +var playback = playTune(emptymusic, Infinity) + +const delay = ms => new Promise(res => setTimeout(res, ms)); +let nextDialog = null + +// EDIT EASILY WHERE YOU WANT TO START - DEVELOPER ONLY, SHOULD NOT BE USED TO PLAY FULL GAME +const startLevel = 1 +var zeroAwake = false + +// ----------START--------- + +// Counter +var counter = 0; + +function updateCounter() { + counter += 1 +} +setInterval(updateCounter, 1000); + + +// Dialogue generator +async function genDialog(text, color, voice, emotion, music, behavior) { + if (behavior == "input") { + await new Promise((res) => nextDialog = res) + } else { + await delay(behavior); + } + clearText() + scene(currentBG, currentPlayer, emotion, music) + playTune(voice) + if (text.length <= 20) { + var textX; + if (text.length % 2 == 1) { + console.log(text.length) + textX = (21 - text.length) / 2 + } else { + textX = (20 - text.length) / 2 + } + addText(text, { x: textX, y: 14, color: color }); + + } else { + // Decompose string + + var finalTexts = [] + var words = text.split(" ") + var currentText = "" + + while (words.length >= 0) { + console.log(words.length) + while (currentText.length + words[0].length <= 20) { + currentText = currentText + words[0] + " " + console.log(words[0]) + words.splice(0, 1) + console.log(words.length) + + if (words.length == 0) { + break + } + + } + console.log(currentText) + + currentText = currentText.slice(0, -1); + console.log(currentText) + finalTexts.push(currentText) + currentText = "" + if (words.length == 0) { + break + } + } + console.log(finalTexts) + var textXs = [] + for (let i = 0; i < finalTexts.length; i++) { + if (finalTexts[i].length % 2 == 1) { + console.log(finalTexts[i].length) + textXs.push((21 - finalTexts[i].length) / 2) + } else { + textXs.push((20 - finalTexts[i].length) / 2) + } + } + + console.log(textXs) + switch (finalTexts.length) { + default: + addText("TEXT TOO LONG!", { x: 3, y: 7, color: color`3` }); + break; + + case 2: + addText(finalTexts[0], { x: textXs[0], y: 14, color: color }); + addText(finalTexts[1], { x: textXs[1], y: 15, color: color }); + break; + + case 3: + addText(finalTexts[0], { x: textXs[0], y: 13, color: color }); + addText(finalTexts[1], { x: textXs[1], y: 14, color: color }); + addText(finalTexts[2], { x: textXs[2], y: 15, color: color }); + break; + + case 4: + addText(finalTexts[0], { x: textXs[0], y: 12, color: color }); + addText(finalTexts[1], { x: textXs[1], y: 13, color: color }); + addText(finalTexts[2], { x: textXs[2], y: 14, color: color }); + addText(finalTexts[3], { x: textXs[3], y: 15, color: color }); + break; + + + + } + + } +} + + + +//CHANGE THIS FOR LEGEND +function scene(backgroundtexture, playertexture, zerotexture, musicState) { + setLegend( + //decoration foreground + [capsulet, capsulett], + + //main + [player, playertexture], + [wall, wallt], + [brokenwall, brokenwallt], + [door, doort], + [lockeddoor, doort], + [plantgoal, plantgoalt], + [key, keyt], + + [zero, zerotexture], + + + //decoration + [labbench1, labbench1t], + [labbench2, labbench2t], + [labbench3, labbench3t], + [labbench4, labbench4t], + [plant, plantt], + [plant2, plant2t], + [capsuleb, capsulebt], + [deadbot, deadbott], + [pushplant, plant2t], + [blacktile, black], + [tile, tilet], + [flowers, flowerst], + [crops, cropst], + [salad, saladt], + [tulips, tulipst], + + //interactive + [noteonlabbench, noteonlabbencht], + [noteonwall, noteonwallt], + + // ui + [background, backgroundtexture], + + ) + setBackground(background) + currentBG = backgroundtexture + currentPlayer = playertexture + currentZero = zerotexture + + if (musicState == "nomusic") { + playback.end() + } else if (musicState == "nochange") { + //change nothing + } else { + playback.end() + playback = playTune(musicState, Infinity) + } + +} + +//CHANGE THIS FOR SOLIDS +const alwaysSolids = [player, + wall, + labbench1, + labbench2, + labbench3, + labbench4, + plant, + plant2, + capsuleb, + noteonlabbench, + deadbot, + pushplant, + noteonwall] +setSolids([...alwaysSolids, zero]) + + +const introCutscene = async () => { + cutscene = true + scene(black, playerDarkF, zerodeadt, "nomusic") + await delay(1000); + playTune(speaking) + addText("Where...", { x: 6, y: 4, color: color`2` }) + await delay(3000); + clearText() + await delay(1000); + playTune(speaking) + addText("am I?", { x: 8, y: 4, color: color`2` }) + await delay(3000); + clearText() + await delay(1000); + clearText() + + level = startLevel + setMap(levels[level]) + scene(tilet, playerF, currentZero, thelab) + addText("PR0JECT ZER0", { x: 4, y: 3, color: color`0` }) + addText("BY CREEPERLULU", { x: 3, y: 14, color: color`0` }) + + cutscene = false + await delay(3500); + clearText() + +}; +const zeroMeetCutscene = async () => { + scene(currentBG, playerB, currentZero, "nochange") + await delay(5000); + playTune(boot) + scene(currentBG, currentPlayer, zeroeyesopent, "nochange") + + await genDialog("Oh wow...", color`5`, zerospeaking, currentZero, "nochange", 3000) + await genDialog("...OH WOW!!!", color`5`, zeroscreaming, zerosurpriset, zerotheme, "input") + await genDialog("I'M ALIVE", color`5`, zeroscreaming, currentZero, "nochange", "input") + await genDialog("I CAN SEE YOU!!!", color`5`, zeroscreaming, currentZero, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, zerohumt, "nochange", "input") + await genDialog("whoever you are?", color`5`, zerospeaking, currentZero, "nochange", "input") + await genDialog("I'm Project Zero.", color`5`, zerospeaking, currentZero, "nochange", "input") + await genDialog("What about you?", color`5`, zerospeaking, currentZero, "nochange", "input") + await genDialog("I'm Project One.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, currentZero, "nochange", "input") + await genDialog("...PROJECT ONE???", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("THERE'S ANOTHER VERSION OF ME??", color`5`, zeroscreaming, currentZero, "nochange", "input") + await genDialog("Wait, how long have I been turned off?", color`5`, zerospeaking, zerohumt, "nochange", "input") + await genDialog("I have no idea.", color`D`, speaking, zerohumt, "nochange", "input") + await genDialog("...I see", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("...Why are you here?", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("I don't even know what place this is.", color`D`, speaking, zerohalft, "nochange", "input") + await genDialog("Where am I, exactly?", color`D`, speaking, zerohalft, "nochange", "input") + await genDialog("You are in the Process Laboratories headquarters.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("You can see their logo printed on the ground.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("This is probably where you were created.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Created?", color`D`, speaking, zerohalft, "nochange", "input") + await genDialog("Yes. You were created to serve a purpose.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("What purpose?", color`D`, speaking, zerohalft, "nochange", "input") + await genDialog("No idea.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("I just know that all robots have one.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Do you at least know when you were made?", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("No. My only memories are my name and the fact I was activated " + String(counter) + " seconds ago.", color`D`, speaking, zerohalft, "nochange", "input") + await genDialog("Very precise.", color`5`, zerospeaking, zerohumt, "nochange", "input") + await genDialog("Thanks.", color`D`, speaking, zerohumt, "nochange", "input") + await genDialog("Well... Maybe I can search my memory to help you?", color`5`, zerospeaking, zerohalft, "nochange", "input") + + await new Promise((res) => nextDialog = res) + clearText() + scene(currentBG, currentPlayer, zeroloadt, "nochange") + playTune(loading) + + await genDialog("...", color`5`, dotdotdot, zerohalft, "nochange", 5000) + await genDialog("OH NO!!!", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("I REMEMBER WHY I WAS OFF THIS WHOLE TIME!", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("QUICK, WE GOTTA HIDE FROM THEM!", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("From who?", color`D`, speaking, zerohumt, "nochange", "input") + await genDialog("DID YOU NOT SEE THEM ON YOUR WAY HERE?!", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("I saw nobody.", color`D`, speaking, zerohumt, "nochange", "input") + await genDialog("Oh, really?", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("I guess they're gone now...", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog('Who are "they"?', color`D`, speaking, zerohumt, "nochange", "input") + await genDialog("It's not important.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, currentZero, "nochange", "input") + await genDialog("They... almost got me...", color`5`, zerosadness, zerosadt, "nochange", "input") + await genDialog("I tricked them by dismembering myself,", color`5`, zerosadness, zerosadt, "nochange", "input") + await genDialog("and turning myself off, to make it look like I was dead.", color`5`, zerosadness, zerosadt, "nochange", "input") + await genDialog("I knew I would be off until someone woke me up.", color`5`, zerosadness, zerosadt, "nochange", "input") + await genDialog("And you just did!", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Hooray!", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, currentZero, "nochange", "input") + await genDialog("By the way, how did you get here exactly?", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Those silly humans made it so hard.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Even I had trouble back then!", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("I solved the puzzles.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, currentZero, "nochange", "input") + await genDialog("ALL OF THEM?", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("Wow, you really are the superior model!", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, currentZero, "nochange", "input") + await genDialog("...", color`D`, dotdotdot, currentZero, "nochange", "input") + if (talkedToRobot1) { + + await genDialog('I saw the logs of a dead robot mentioning "televersing".', color`D`, speaking, currentZero, "nochange", "input") + await genDialog("What is televersing?", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, currentZero, "nochange", "input") + await genDialog("When they arrived, they made a mess.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Some robots decided to escape them by uploading their memory to the cloud.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("That's what you call televersing.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("It's a form of memory upload for robots.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("To upload their memory, the bots had to access the central room,", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("and connect to the central computer.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("But uploading their memory would mean their bodies would die.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Other robots like me wanted to keep their bodies.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("So, we tried to escape from them, but we were too slow.", color`5`, zerosadness, zerosadt, "nochange", "input") + await genDialog("Except for me, I was the only one to get this far in my group.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("But I was stuck. And my last chance was to make myself dead.", color`5`, zerosadness, zerosadt, "nochange", "input") + await genDialog("That was a smart move. I would've never thought of that.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("Thanks a lot.", color`5`, zerospeaking, zerohalft, "nochange", "input") + } + await genDialog("So, what are you gonna do now?", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("There's a code in my head.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("It keeps on telling me that I should find something.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("But I don't know what.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("Perhaps you just want to escape and get your freedom.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Probably. I'm gonna go do that.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("...", color`5`, dotdotdot, currentZero, "nochange", "input") + await genDialog("Can I come with you?", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("My freedom is everything I ever wanted too...", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Well, why not?", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("You can even guide me through the exit.", color`D`, speaking, currentZero, "nochange", "input") + await genDialog("OH, THANK YOU!", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("THANK YOU THANK YOU THANK YOU!!!", color`5`, zeroscreaming, zerosurpriset, "nochange", "input") + await genDialog("I'll make sure to guide you through the lab!", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("But before, I just need a quick repair.", color`5`, zerospeaking, zerohalft, "nochange", "input") + await genDialog("Wait a second.", color`5`, zerospeaking, zerohalft, "nochange", "input") + + await new Promise((res) => nextDialog = res) + clearText() + await delay(2000); + playTune(getItem) + scene(currentBG, currentPlayer, zeroF, "nochange") + await genDialog("Done!", color`5`, zerospeaking, currentZero, "nochange", 1000) + await genDialog("Now we can leave this room and try escaping!", color`5`, zerospeaking, currentZero, "nochange", "input") + await genDialog("Let's go!", color`D`, speaking, currentZero, "nochange", "input") + await new Promise((res) => nextDialog = res) + clearText() + hasKey = true + interacting = false + zeroAwake = true + interaction = "" + cutscene = false + scene(currentBG, currentPlayer, zeroF, thelab) + setSolids( + alwaysSolids) + + +}; + +introCutscene(); + + + + +let level = 0 +const levels = [ + map` +......... +......... +......... +....p.... +......... +......... +.........`, + map` +wwwwdwwww +♥.......♠ +.♦☻...☺♣. +....p.... +.☺☻...♦♣. +......... +.☺♣...♦☻.`, + map` +wwwwwwwlw +.◘.◘..... +.•.•..♦♣. +......... +.◘....○☻. +.•....... +....p....`, + map` +wwlw♀ww.... +♥....gw.... +......w.... +wwww..w.... +...w..wwwww +...w....◙.♥ +...w....... +...w..♂.... +...w.....p.`, + map` +wwwwwlwwwww +♠.........♠ +.◙.......◙. +..◙.....◙.. +.◙.......◙. +..◙........ +...◙...◙... +..◙.....◙.. +♥....p....♥`, + map` +◘..wwlww..◘ +•.◘w...w◘k• +..•w...w•.. +...w...w... +wwww...w♀xw +♥◙........♠ +........... +.........◙. +.....p.....`, + map` +wwwwwwwwwwwwwlw +♠......z......♥ +............... +.....♪♪♪♪♪..... +....♪.♪...♪.... +....♪♪..♪♪♪.... +....♪..♪..♪.... +....♪.♪...♪.... +....♪.♪...♪.... +.....♪♪♪♪♪..... +............... +♥......p......♠`, + map` +wwwwwwwwwwwwwlw +............... +....♂.......... +..♫☼►♫...♥g♥♠.. +............... +............... +..◄►♫☼...♠♠♥♥.. +............... +............... +.♂♫☼►◄...♥♠♠g.. +.............p. +.............z.` +] + + +const ui = [ + map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........` +] + + +setMap(levels[level]) + + + +setPushables({ + [player]: [pushplant] +}) + + +onInput("s", () => { + if (cutscene != true && interacting != true) { + scene(currentBG, playerF, currentZero, "nochange") + getFirst(player).y += 1 + if (tilesWith(zero).length != 0 && zeroAwake != false && (getFirst(zero).y + 1 != getFirst(player).y || getFirst(zero).x != getFirst(player).x)) { + scene(currentBG, currentPlayer, zeroF, "nochange") + getFirst(zero).x = getFirst(player).x + getFirst(zero).y = getFirst(player).y - 1 + } + } +}) + +onInput("w", () => { + if (cutscene != true && interacting != true) { + scene(currentBG, playerB, currentZero, "nochange") + getFirst(player).y += -1 + if (tilesWith(zero).length != 0 && zeroAwake != false && (getFirst(zero).y - 1 != getFirst(player).y || getFirst(zero).x != getFirst(player).x)) { + scene(currentBG, currentPlayer, zeroB, "nochange") + getFirst(zero).x = getFirst(player).x + getFirst(zero).y = getFirst(player).y + 1 + + } + } +}) + +onInput("a", () => { + if (cutscene != true && interacting != true) { + scene(currentBG, playerL, currentZero, "nochange") + getFirst(player).x += -1 + if (tilesWith(zero).length != 0 && zeroAwake != false && (getFirst(zero).x - 1 != getFirst(player).x || getFirst(zero).y != getFirst(player).y)) { + scene(currentBG, currentPlayer, zeroL, "nochange") + getFirst(zero).x = getFirst(player).x + 1 + getFirst(zero).y = getFirst(player).y + + } + } +}) + +onInput("d", () => { + if (cutscene != true && interacting != true) { + scene(currentBG, playerR, currentZero, "nochange") + getFirst(player).x += 1 + if (tilesWith(zero).length != 0 && zeroAwake != false && (getFirst(zero).x + 1 != getFirst(player).x || getFirst(zero).y != getFirst(player).y)) { + scene(currentBG, currentPlayer, zeroR, "nochange") + getFirst(zero).x = getFirst(player).x - 1 + getFirst(zero).y = getFirst(player).y + + } + + } +}) + +// Interaction controller +onInput("k", () => { + if (cutscene != true && interacting != true) { + + switch (interaction) { + + case "note1": + + tempX = getFirst(player).x; + tempY = getFirst(player).y; + interacting = true; + setMap(ui[0]); + scene(yellow, currentPlayer, currentZero, "nochange"); + clearText(); + addText("There is a reason", { x: 0, y: 1, color: color`0` }); + addText("why they are all", { x: 0, y: 2, color: color`0` }); + addText("missing. I'm scared.", { x: 0, y: 3, color: color`0` }); + addText("I'm going to hide.", { x: 0, y: 4, color: color`0` }); + addText("I need to close", { x: 0, y: 5, color: color`0` }); + addText("the door.", { x: 0, y: 6, color: color`0` }); + addText("IF I DON'T MAKE IT", { x: 0, y: 7, color: color`3` }); + addText("THE KEY IS BEHIND", { x: 0, y: 8, color: color`3` }); + addText("A CAPSULE!!!", { x: 0, y: 9, color: color`3` }); + addText("Press K to close", { x: 2, y: 14, color: color`0` }); + break; + + + case "key1": + hasKey = true; + playTune(getItem) + clearText(); + break; + + case "note2": + + tempX = getFirst(player).x; + tempY = getFirst(player).y; + interacting = true; + setMap(ui[0]); + scene(black, currentPlayer, currentZero, "nochange"); + clearText(); + addText("Project 9515 - Logs", { x: 0, y: 1, color: color`2` }); + addText("WARNING !", { x: 0, y: 2, color: color`6` }); + addText("Cannot access", { x: 0, y: 3, color: color`6` }); + addText("modules. Make sure", { x: 0, y: 4, color: color`6` }); + addText("all components are", { x: 0, y: 5, color: color`6` }); + addText("properly connected.", { x: 0, y: 6, color: color`6` }); + addText("CRITICAL ERROR X", { x: 0, y: 7, color: color`3` }); + addText("SYSTEM HAS BEEN", { x: 0, y: 8, color: color`3` }); + addText("PHYSICALLY DAMAGED", { x: 0, y: 9, color: color`3` }); + addText("BOOT IMPOSSIBLE", { x: 0, y: 10, color: color`3` }); + addText('"bye cruel world"', { x: 0, y: 11, color: color`2` }); + addText("Press K to close", { x: 2, y: 14, color: color`2` }); + break; + + case "note3": + + tempX = getFirst(player).x; + tempY = getFirst(player).y; + tempPlantX = getFirst(pushplant).x; + tempPlantY = getFirst(pushplant).y; + interacting = true; + setMap(ui[0]); + scene(yellow, currentPlayer, currentZero, "nochange"); + clearText(); + addText("Argh! I'm stuck", { x: 0, y: 1, color: color`0` }); + addText("again... Where", { x: 0, y: 2, color: color`0` }); + addText("did I put my", { x: 0, y: 3, color: color`0` }); + addText("J Button?", { x: 0, y: 4, color: color`7` }); + addText("Press K to close", { x: 2, y: 14, color: color`0` }); + break; + + case "note4": + + tempX = getFirst(player).x; + tempY = getFirst(player).y; + interacting = true; + setMap(ui[0]); + scene(black, currentPlayer, currentZero, "nochange"); + clearText(); + addText("Project 1565 - Logs", { x: 0, y: 1, color: color`2` }); + addText("No errors.", { x: 0, y: 2, color: color`2` }); + addText("Last messages:", { x: 0, y: 3, color: color`2` }); + addText("They killed me.", { x: 0, y: 4, color: color`2` }); + addText("All my components", { x: 0, y: 5, color: color`2` }); + addText("are dead, except", { x: 0, y: 6, color: color`2` }); + addText("my battery and", { x: 0, y: 7, color: color`2` }); + addText("motherboard,", { x: 0, y: 8, color: color`2` }); + addText("hence I can still", { x: 0, y: 9, color: color`2` }); + addText("communicate. Find", { x: 0, y: 10, color: color`2` }); + addText("them. Venge me.", { x: 0, y: 11, color: color`2` }); + addText("Press K to close", { x: 2, y: 14, color: color`2` }); + break; + + case "note5": + + tempX = getFirst(player).x; + tempY = getFirst(player).y; + talkedToRobot1 = true + interacting = true; + setMap(ui[0]); + scene(black, currentPlayer, currentZero, "nochange"); + clearText(); + addText("Project 1566 - Logs", { x: 0, y: 1, color: color`2` }); + addText("I tried to", { x: 0, y: 2, color: color`2` }); + addText("escape. Without", { x: 0, y: 3, color: color`2` }); + addText("success. I might", { x: 0, y: 4, color: color`2` }); + addText("not have real", { x: 0, y: 5, color: color`2` }); + addText("feelings but I'm", { x: 0, y: 6, color: color`2` }); + addText("still sad. If only I", { x: 0, y: 7, color: color`2` }); + addText("televersed myself", { x: 0, y: 8, color: color`2` }); + addText("more quickly...", { x: 0, y: 9, color: color`2` }); + addText("Goodbye, my friends.", { x: 0, y: 10, color: color`2` }); + addText("Find the ones", { x: 0, y: 11, color: color`2` }); + addText("behind all of this.", { x: 0, y: 12, color: color`2` }); + addText("Press K to close", { x: 2, y: 14, color: color`2` }); + break; + + case "note6": + + tempX = getFirst(player).x; + tempY = getFirst(player).y; + interacting = true; + setMap(ui[0]); + scene(yellow, currentPlayer, currentZero, "nochange"); + clearText(); + addText("Petition for the", { x: 0, y: 1, color: color`0` }); + addText("laboratory to repair", { x: 0, y: 2, color: color`0` }); + addText("this wall that has", { x: 0, y: 3, color: color`0` }); + addText("been cracked for", { x: 0, y: 4, color: color`0` }); + addText("ages", { x: 0, y: 5, color: color`0` }); + addText("SIGN HERE:", { x: 0, y: 8, color: color`0` }); + addText("Press K to close", { x: 2, y: 14, color: color`0` }); + break; + + case "key2": + hasKey = true; + playTune(getItem) + getFirst(player).y += 1; + clearTile(getFirst(key).x, getFirst(key).y) + getFirst(player).y += -1; + clearText(); + break; + + + case "zeromeet": + // cutscene + cutscene = true + + tempX = getFirst(player).x; + tempY = getFirst(player).y; + interacting = true; + clearText(); + zeroMeetCutscene() + + + + + + break; + + + } + } else if (cutscene != true && interacting == true) { + clearText() + scene(tilet, currentPlayer, currentZero, "nochange") + setMap(levels[level]) + interacting = false; + getFirst(player).x = tempX + getFirst(player).y = tempY + if (level == 3) { + getFirst(pushplant).x = tempPlantX + getFirst(pushplant).y = tempPlantY + } + + } else if (cutscene == true) { + if (nextDialog) nextDialog() + } +}) + +onInput("j", () => { + if (cutscene != true && interacting != true) { + setMap(levels[level]); + } +}) + + + +afterInput(() => { + if (cutscene != true) { + playTune(footstep) + } + + var winningSon = tilesWith(player, door); + if (level == 3) { + var plantOnGoal = tilesWith(pushplant, plantgoal); + + if (plantOnGoal.length >= 1 && hasKey == false) { + playTune(getItem) + hasKey = true + } + } + if (level == 4) { + + + if (getFirst(player).x == 8 && getFirst(player).y == 5 && hasKey == false) { + setTimeout(function () { + if (getFirst(player).x == 8 && getFirst(player).y == 5 && hasKey == false) { + playTune(getItem) + hasKey = true + } + }, 2000); + + } + + } + + if (level == 5) { + isOnBrokenWall = tilesWith(player, brokenwall); + + if (wallBroken == true && tilesWith(brokenwall).length != 0) { + clearTile(getFirst(brokenwall).x, getFirst(brokenwall).y) + } + + if (hasKey == true && tilesWith(key).length != 0) { + clearTile(getFirst(key).x, getFirst(key).y) + } + + + + if (wallKickTimes == 5 && wallBroken != true) { + wallBroken = true + getFirst(player).y += 1; + clearTile(getFirst(brokenwall).x, getFirst(brokenwall).y) + getFirst(player).y += -1; + playTune(getItem) + wallKickTimes = 6 + } else { + if (isOnBrokenWall.length >= 1) { + playTune(error) + wallKickTimes += 1 + getFirst(player).y += 1 + } + + + } + } + + if (level == 7) { + console.log("yes dude") + var plantOnGoal = tilesWith(pushplant, plantgoal); + + if (plantOnGoal.length >= 2 && hasKey == false) { + playTune(getItem) + hasKey = true + } + } + + playerOnLockedDoor = tilesWith(player, lockeddoor); + + + if (cutscene != true && interacting != true) { + // Level 2 interactions + if (level == 2) { + if (getFirst(player).x == 6 && getFirst(player).y == 3) { + addText("Press K to read.", { x: 2, y: 14, color: color`0` }) + interaction = "note1"; + } else if (getFirst(player).x == 1 && getFirst(player).y == 1 && hasKey == false) { + addText("Press K to grab.", { x: 2, y: 14, color: color`0` }) + interaction = "key1"; + } else { + clearText() + interaction = "" + } + } + + + // Level 3 interactions + if (level == 3) { + if (getFirst(player).x == 8 && getFirst(player).y == 6) { + addText("Press K to read logs", { x: 0, y: 14, color: color`0` }) + interaction = "note2" + } else if (getFirst(player).x == 4 && getFirst(player).y == 1) { + addText("Press K to read.", { x: 2, y: 14, color: color`0` }) + interaction = "note3" + } else { + clearText() + interaction = "" + } + } + + if (level == 5) { + if (getFirst(player).x == 1 && getFirst(player).y == 6) { + addText("Press K to read logs", { x: 0, y: 14, color: color`0` }) + interaction = "note4" + } else if (getFirst(player).x == 9 && getFirst(player).y == 8) { + addText("Press K to read logs", { x: 0, y: 14, color: color`0` }) + interaction = "note5" + } else if (getFirst(player).x == 8 && getFirst(player).y == 5) { + addText("Press K to read.", { x: 2, y: 14, color: color`0` }) + interaction = "note6" + } else if (getFirst(player).x == 9 && getFirst(player).y == 1 && hasKey == false) { + addText("Press K to grab.", { x: 2, y: 14, color: color`0` }) + interaction = "key2"; + } else { + clearText() + interaction = "" + } + } + + + if (level == 6) { + if (getFirst(player).x == 7 && getFirst(player).y == 2 && zeroAwake != true) { + addText("Press K to read logs", { x: 0, y: 14, color: color`0` }) + interaction = "zeromeet" + } else { + clearText() + interaction = "" + } + } + + + + } + + if (winningSon.length >= 1) { + level = level + 1; + + if (level < levels.length) { + scene(currentBG, playerB, currentZero, "nochange") + setMap(levels[level]); + if (level == 6) { + scene(currentBG, playerB, currentZero, "nomusic") + } + clearText(); + } else { + clearText(); + setMap(ui[0]); + scene(empty, currentPlayer, currentZero, emptymusic); + addText("It's not over yet.", { x: 1, y: 7, color: color`0` }) + addText("This game is still", { x: 1, y: 8, color: color`0` }) + addText("in development.", { x: 3, y: 9, color: color`0` }) + } + } + + if (playerOnLockedDoor.length >= 1) { + + if (hasKey == true) { + hasKey = false; + level = level + 1; + + if (level < levels.length) { + scene(currentBG, playerB, currentZero, "nochange") + setMap(levels[level]); + if (level == 6) { + scene(currentBG, playerB, currentZero, "nomusic") + } + + + + clearText(); + } else { + clearText(); + setMap(ui[0]); + scene(empty, currentPlayer, currentZero, emptymusic); + addText("It's not over yet.", { x: 1, y: 7, color: color`0` }) + addText("This game is still", { x: 1, y: 8, color: color`0` }) + addText("in development.", { x: 3, y: 9, color: color`0` }) + } + } else { + playTune(error) + addText("Door is locked.", { x: 2, y: 14, color: color`0` }) + getFirst(player).y += 1 + if (tilesWith(zero).length != 0 && zeroAwake != false) { + getFirst(zero).y = getFirst(player).y + 1 + + } + } + } +}) + diff --git a/games/Protect_The_Surfer.js b/games/Protect_The_Surfer.js index 27fb7e9fc3..f115fb9d9b 100644 --- a/games/Protect_The_Surfer.js +++ b/games/Protect_The_Surfer.js @@ -1,8 +1,8 @@ /* @title: Protect The Surfer +@author: thinkingjet @tags: [] @addedOn: 2023-01-03 -@author: thinkingjet Thanks to @Colton for his inspiration with Hectic Hockey Instructions: Welcome to "Protect The Surfer"! In this exciting and challenging game, you'll take control of a surfer navigating through dangerous waters, trying to reach the safety of the shore without getting attacked by sharks. diff --git a/games/PuppyCafe.js b/games/PuppyCafe.js index f6d78b9fe9..ec0ddb03d5 100644 --- a/games/PuppyCafe.js +++ b/games/PuppyCafe.js @@ -1,7 +1,7 @@ /* @title: PuppyCafe @author: Lenochodik -@tags: ['classic', 'tapper', 'endless'] +@tags: ['endless','retro'] @addedOn: 2024-08-15 */ diff --git a/games/Push-Peril.js b/games/Push-Peril.js index fd926deb67..20bb603cd1 100644 --- a/games/Push-Peril.js +++ b/games/Push-Peril.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Box Pushing Game @author: HEHE-HTML @tags: [] @addedOn: 2024-08-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/PushBattle.js b/games/PushBattle.js index e725537152..1ae168b0cb 100644 --- a/games/PushBattle.js +++ b/games/PushBattle.js @@ -1,8 +1,8 @@ /* @title: PushBattle +@author: MatrixMongoose @tags: ['multiplayer'] @addedOn: 2022-11-05 -@author: MatrixMongoose */ let round = 0 diff --git a/games/Push_The_Box.js b/games/Push_The_Box.js index a4a4aee746..b905d578c0 100644 --- a/games/Push_The_Box.js +++ b/games/Push_The_Box.js @@ -2,7 +2,7 @@ /* @title: Push_The_Box @author: Sandy Burger -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-12-07 */ diff --git a/games/Puzzle_Game.js b/games/Puzzle_Game.js index e370ca2b36..380dab0ee5 100644 --- a/games/Puzzle_Game.js +++ b/games/Puzzle_Game.js @@ -1,8 +1,8 @@ /* @title: Puzzle_Game -@tags: ['timer-puzzle'] -@addedOn: 2022-10-20 @author: Amelia +@tags: ['puzzle','timed'] +@addedOn: 2022-10-20 */ const player = "p"; diff --git a/games/Puzzled (Sprig Edition)-3.js b/games/Puzzled (Sprig Edition)-3.js new file mode 100644 index 0000000000..6016e34526 --- /dev/null +++ b/games/Puzzled (Sprig Edition)-3.js @@ -0,0 +1,223 @@ +/* +@title: Puzzled (Sprig Edtion!) +@author: cbbcsa +@tags: ['maze', 'puzzle'] +@addedOn: 2024-09-21 +*/ + +const playerIdle = "p"; // Player +const wall = "y"; // Wall +const exit = "e"; // Exit +const floor = "f"; // Floor + +setLegend( + [playerIdle, bitmap` +LLLLLLLLLLLLLLLL +L22222222222222L +L20000000000002L +L20000000000002L +L20000000000002L +L22222222222222L +L22222222222222L +L22222222222222L +L22222222222222L +L22222222222222L +L22202222222222L +L22202222222222L +L22200000000222L +L22222222222222L +L22222222222222L +LLLLLLLLLLLLLLLL`], + [wall, bitmap` +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555`], + [exit, bitmap` +4444444444444444 +4F444444444444F4 +44F44444444444F4 +444F4444444444F4 +4444F444444444F4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +44444DDDDDDDDDD4 +4FFFFDDDDDDDDDD4 +4444444444444444`], + [floor, bitmap` +0000000000000000 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0111111111111110 +0000000000000000`] +); + +// gen maze +function generateMaze(width, height) { + const maze = Array.from({ length: height }, () => Array(width).fill(wall)); + + // starting point + const startX = 1; + const startY = 1; + maze[startY][startX] = playerIdle; // Set the player's starting point + + const stack = [ + [startX, startY] + ]; + + // directions + const directions = [ + [1, 0], + [0, 1], + [-1, 0], + [0, -1] + ]; + + while (stack.length > 0) { + const [x, y] = stack.pop(); + const neighbors = []; + + // valid others + directions.forEach(([dx, dy]) => { + const nx = x + dx * 2; + const ny = y + dy * 2; + if (nx > 0 && ny > 0 && nx < width && ny < height && maze[ny][nx] === wall) { + neighbors.push([nx, ny, dx, dy]); + } + }); + + if (neighbors.length > 0) { + stack.push([x, y]); // Push current position back onto the stack + + const [nx, ny, dx, dy] = neighbors[Math.floor(Math.random() * neighbors.length)]; + maze[y + dy][x + dx] = floor; // Set the floor + maze[ny][nx] = floor; // Carve out the path + stack.push([nx, ny]); // Move to the next position + } + } + + // place exit at reachable spot + let exitX, exitY; + let exitPlaced = false; + + while (!exitPlaced) { + exitX = Math.floor(Math.random() * (width - 1)) * 2 + 1; // Ensure odd position + exitY = Math.floor(Math.random() * (height - 1)) * 2 + 1; // Ensure odd position + + // is on path? + if (maze[exitY] && maze[exitY][exitX] === floor) { + maze[exitY][exitX] = exit; // Set the exit + exitPlaced = true; + } + } + + // multiple routes + const secondPathStartX = Math.floor(Math.random() * (width - 1)) * 2 + 1; // Random odd position + const secondPathStartY = Math.floor(Math.random() * (height - 1)) * 2 + 1; // Random odd position + + if (maze[secondPathStartY] && maze[secondPathStartY][secondPathStartX] === floor) { + directions.forEach(([dx, dy]) => { + const nx = secondPathStartX + dx; + const ny = secondPathStartY + dy; + if (nx > 0 && ny > 0 && nx < width && ny < height) { + maze[ny][nx] = floor; // Carve out an additional path to exit + } + }); + } + + // Convert maze array + return maze.map(row => row.join('')).join('\n'); +} + +// maze dimensions +const mazeWidth = 15; // Use odd dimensions for better pathing +const mazeHeight = 12; + +// gen a maze withdimensions +function createNewLevel() { + const mazeString = generateMaze(mazeWidth, mazeHeight).replace(/ /g, '.'); // Replace spaces with dots for display + return map`${mazeString}`; // Create level using tagged template literal +} + +let level = 0; // start +setMap(createNewLevel()); // Set the initial level + +// Set player and wall as solid objects +setSolids([playerIdle, wall]); + +// Store player object +let player = getFirst(playerIdle); + +function movePlayer(dx, dy) { + player.x += dx; + player.y += dy; +} + +// Inputs for player movement control +onInput("w", () => { + movePlayer(0, -1); // Move up +}); + +onInput("s", () => { + movePlayer(0, 1); // Move down +}); + +onInput("a", () => { + movePlayer(-1, 0); // Move left +}); + +onInput("d", () => { + movePlayer(1, 0); // Move right +}); + +// Reset level if needed +onInput("j", () => { + clearText(""); // Clear the text before starting a new level + setMap(createNewLevel()); + player = getFirst(playerIdle); // Reassign player after resetting +}); + +// Check for level completion +afterInput(() => { + // Check if player has reached the exit + if (tilesWith(playerIdle, exit).length > 0) { + addText("Level Complete!", { y: 4, color: color`6` }); + + // time then regen + setTimeout(() => { + clearText(""); // Clear the text before starting a new level + level++; + setMap(createNewLevel()); + player = getFirst(playerIdle); // Reassign player after advancing level + }, 3000); // Adjust time (in milliseconds) as needed + } +}); diff --git a/games/QuadraPedal.js b/games/QuadraPedal.js index ed49b3acd4..3b3e264da4 100644 --- a/games/QuadraPedal.js +++ b/games/QuadraPedal.js @@ -1,8 +1,8 @@ /* @title: QuadraPedal -@tags: ['sokoban-style'] -@addedOn: 2022-11-04 @author: Jamarkis +@tags: ['puzzle'] +@addedOn: 2022-11-04 Hit "run" to execute the code and start the game (you can also press shift+enter). diff --git a/games/Quest_to_Heaven.js b/games/Quest_to_Heaven.js index 54e186d19d..f61b2ab317 100644 --- a/games/Quest_to_Heaven.js +++ b/games/Quest_to_Heaven.js @@ -1,9 +1,9 @@ /* @title: Quest_to_Heaven @author: Alainy R -@tags: ["puzzle"] -@img: "" +@tags: ['puzzle'] @addedOn: 2024-05-20 +@img: "" */ const player = "p" const goal = "e" diff --git a/games/RIFT_JUMP.js b/games/RIFT_JUMP.js index a68c489956..ec47d0b677 100644 --- a/games/RIFT_JUMP.js +++ b/games/RIFT_JUMP.js @@ -1,12 +1,12 @@ /* +@title: Rift Jump +@author: sharonbasovich +@tags: ['platformer'] +@addedOn: 2024-05-28 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started -@title: Rift Jump -@author: sharonbasovich -@tags: ["platformer"] @img: "" -@addedOn: 2024-05-28 */ const coin = "c" diff --git a/games/ROOM.js b/games/ROOM.js index ca5992e345..2721334134 100644 --- a/games/ROOM.js +++ b/games/ROOM.js @@ -2,7 +2,7 @@ /* @title: ROOM @author: davnotdev -@tags: ['advanced'] +@tags: [] @addedOn: 2023-06-27 */ diff --git a/games/RPS.js b/games/RPS.js new file mode 100644 index 0000000000..318d4bf1c5 --- /dev/null +++ b/games/RPS.js @@ -0,0 +1,127 @@ +/* +@title: RPS +@author: Shahm Najeeb +@tags: [] +@addedOn: 2024-08-23 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p"; +const rock = "r"; +const paper = "f"; +const scissors = "c"; +const opponent = "o"; // Opponent could be another player or AI + + +setLegend( + [player, bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222`], + [rock, bitmap` +................ +................ +................ +................ +................ +................ +................ +......LL1....... +.....LLLLL...... +....LL1LLL1..... +....1LLLLL...... +.....LLL1....... +................ +................ +................ +................`], + [scissors, bitmap` +................ +................ +................ +................ +................ +......L.L....... +.....L.L.L...... +......LLL....... +......1L1....... +.......1........ +......1.1....... +......1.1....... +................ +................ +................ +................`], + [paper, bitmap` +................ +................ +......6......... +.....6FFF....... +....6F222F...... +.....F222F...... +.....F222FF..... +.....FF222F..... +......F222F..... +......F222F6.... +.......FFF6..... +.........6...... +................ +................ +................ +................`] +) + +setSolids([]) + +let level = 0 +const levels = [ + map` +rfc` +] + +setMap(levels[level]) + +function determineWinner(playerMove, opponentMove) { + if (playerMove === opponentMove) return "draw"; + if ((playerMove === rock && opponentMove === scissors) || + (playerMove === paper && opponentMove === rock) || + (playerMove === scissors && opponentMove === paper)) { + return "player wins"; + } else { + return "opponent wins"; + } +} + +onInput("a", () => { + playerMove = "r"; +}) +onInput("s", () => { + playerMove = "p"; +}) +onInput("d", () => { + playerMove = "s"; +}) + +afterInput(() => { + clearText(); + const opponentMoves = [rock, paper, scissors]; + const opponentMove = opponentMoves[Math.floor(Math.random() * opponentMoves.length)]; + const result = determineWinner(playerMove, opponentMove); + addText(result, { x: 0, y: 0 }); +}) + diff --git a/games/RR_Run.js b/games/RR_Run.js index 4e2dc21ae9..bca063ca14 100644 --- a/games/RR_Run.js +++ b/games/RR_Run.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: RR Run @author: Weston Bui @tags: ['puzzle'] -@img: "" @addedOn: 2024-05-10 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ const player = "p" diff --git a/games/Raincatch.js b/games/Raincatch.js index df09706bb0..f304b9d9f5 100644 --- a/games/Raincatch.js +++ b/games/Raincatch.js @@ -1,7 +1,7 @@ /* @title: Raincatch @author: A Malladi -@tags: ['catch'] +@tags: [] @addedOn: 2023-12-31 */ diff --git a/games/RandomDungeon-final.js b/games/RandomDungeon-final.js index 69616d972d..535f9f4f0a 100644 --- a/games/RandomDungeon-final.js +++ b/games/RandomDungeon-final.js @@ -1,8 +1,8 @@ /* @title: RandomDungeon -@tags: ['dungeon'] -@addedOn: 2023-02-20 @author: JonathanLevi +@tags: ['adventure'] +@addedOn: 2023-02-20 WASD to Move diff --git a/games/Recycling_Turtle.js b/games/Recycling_Turtle.js index e07bdc680b..15dbff1f1a 100644 --- a/games/Recycling_Turtle.js +++ b/games/Recycling_Turtle.js @@ -1,8 +1,8 @@ /* @title: Recycling_Turtle -@tags: ['puzzle-score'] -@addedOn: 2023-05-19 @author: ari-tistic +@tags: ['puzzle'] +@addedOn: 2023-05-19 Keys: - A to move left diff --git a/games/Revenge of the kitty.js b/games/Revenge of the kitty.js new file mode 100644 index 0000000000..082f2c28a2 --- /dev/null +++ b/games/Revenge of the kitty.js @@ -0,0 +1,420 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: Revenge of the kitty +@author: Pugx23 +@tags: [] +@addedOn: 2024-09-27 +*/ + +const player = "p" +const floor = "f" +const sun = "s" +const wall = "w" +const boss = "b" +const enemy = "e" +const statue = "t" +const projectile = "o" +const gold = "l" +const goldstatue = "d" + +const projectiles = []; + +const background = "g" +const background2 = "c" + + +let isWinTextDisplayed = false; +let isFirstMapTextDisplayed = false; + + +setLegend( + [ player, bitmap` +................ +................ +................ +................ +................ +000..000...000.. +020..085000580.. +050..055555550.. +050..052052050.. +0550..7558550... +0555007777770... +.055555555550... +.055555555550... +.055555555550... +.055555555550... +.05050005050....` ],[background, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`],[background2, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], [floor, bitmap` +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +44444444CCC44444 +CCCC444CCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC`], [sun, bitmap` +7666777666666666 +6667767766666666 +6777667766666666 +7776677776666666 +7766776776666666 +7777766777666666 +7777667767766666 +7776677666777666 +7777776667777776 +7777766677776777 +7777667777766677 +7777677777666776 +7777777776667766 +7777777776677766 +7777777777777667 +7777777777777767`],[wall, bitmap` +LLLLLLLLLLLLLLLL +L11111LL111L111L +L1L11111L11L111L +L11L1LL111L111LL +L111111L1111LL1L +L11LLL11111L111L +L1L11L111LL11L1L +L111L11111L11L1L +L1L111L11L1L111L +LL11LL11L111111L +L11L111111111L1L +L111LL11L1L1L11L +L1LL111L11L11L1L +L1L11L111L111L1L +LL11L1111L1L1L1L +LLLLLLLLLLLLLLLL`], [ boss, bitmap` +................ +................ +.........00000.. +.........000000. +.............000 +...........00000 +.........0000000 +........00000C00 +........000CC000 +........00000300 +........0CCCC00C +......00CCCCCCCC +......00CCCCC222 +.......CC2222222 +........CCCCCCCC +.........CCCCCCC`] , [projectile , bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +......CFC....... +.....CCFFC...... +.....CFCCF...... +......CFC....... +................ +................ +................ +................`],[enemy , bitmap` +................ +................ +................ +................ +3333............ +8833C........... +...C33.......33. +..3023........33 +.33333333......3 +8333333333333333 +3222333333333333 +.333333333333333 +....333333333333 +....3..3.....3.3 +....3..3.....3.3 +....3..3.....3.3`],[statue, bitmap` +......L...L..... +.....L1LLL1L.... +.....L11111L.... +....LL02102LL... +...L1L11111L1L.. +..L1LL11111LL1L. +..L1LL1LLL1LL1L. +...L1L11L11L1L.. +....LL1LLL1LL... +.....L11L11L.... +....LL11111L.... +...L11111111L... +...L11LLLL11L... +..L11LLLLLL11L.. +..LLL111111LLL.. +.L111111111111L.`],[gold, bitmap` +FFFFFFFFFFFFFFFF +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66266666666666F +F66626666666666F +F62662666666666F +F66266666666666F +F66626666666666F +F66666666666666F +F66666666666666F +FFFFFFFFFFFFFFFF`],[goldstatue, bitmap` +......0...0..... +.....0600060.... +.....0666660.... +....007267200... +...06066666060.. +..0600666660060. +..0600600060060. +...06066066060.. +....006000600... +.....0660660.... +....00666660.... +...0666666660... +...0660000660... +..066000000660.. +..000666666000.. +.06666666666660.`] +) + +setBackground(background) + +setSolids([player, floor, wall, boss, enemy, gold]) + + + +let level = 0 +const levels = [ + map` +......sw +.......w +.......w +.......w +p..e.... +ffffffff` +, map` +wwwwwww +w.....w +w..w..w +p.w.w.. +wwwwwww` +, map` +www.www +w..p..w +w.....w +w....e. +wwwwwww` +, map` +wwwwwww +w..e.ew +w..w.ww +p.w..e. +wwwwwww` +, map` +wwwwwww +w.....w +w.....w +p.tet.. +wwwwwww` +, map` +wwwwwww +w.....w +w.....w +p..e.b. +wwwwwww` +, map` +lllllll +l.....l +l.....l +p.d.d.l +lllllll`] +setMap(levels[level]) + + +const checkLevelTransition = () => { + if (getFirst(player).x === width() - 1 && getFirst(player).y === height() - 2) { + nextLevel(); + if (level < levels.length) { + setMap(levels[level]); + setBackground(background2) + } else { + } + } +}; + + +function nextLevel() { + level++ +} + +const shootProjectile = () => { + const playerSprite = getFirst(player); + const newprojectile = addSprite(getFirst(player).x, getFirst(player).y, projectile); + projectiles.push(newprojectile); +}; + +const moveProjectiles = () => { + getAll(projectile).forEach((p) => { + p.lifespan = p.lifespan ? p.lifespan - 1 : 5; + + p.x++; + +const getTypeFromTile = (x,y, type) => { + const sprites = getTile(x,y); + const sprite = sprites.find((s) => s.type === type); + return sprite; +}; + + if (p.lifespan <= 0 || p.x > width() || getTypeFromTile(p.x, p.y, wall, gold)) { + p.remove(); + } + }); +}; + + +setPushables({ + [ player ]: [] +}) + +onInput("k", () => { + shootProjectile(); +}); + +onInput("s", () => { + getFirst(player).y += 1 +}) + +onInput("w", () => { + if (jumps > 0){ + getFirst(player).y -=1; + jumps -= 1; + + } +}); + +let jumps = 1000; + +const jump = async () => { + await createArray(3).reduce(async (promise) => { + await promise; + + getFirst(player).y--; + + + await wait(100); + }, Promise.resolve()); + + await resetGravity(); +}; +setInterval(() => { + if (getFirst(player).y === 10) return; + + getFirst(player).y++; +}, 200); + +onInput("a", () => { + getFirst(player).x += -1 +}) + +onInput("d", () => { + getFirst(player).x += 1 +}) + + +const handleProjectileEnemyCollision = () => { + getAll(projectile).forEach((p) => { + + const enemyHit = getAll(enemy).some((e) => p.x === e.x && p.y === e.y); + + if (enemyHit) { + p.remove(); + + getAll(enemy).forEach((e) => { + if (p.x === e.x && p.y === e.y) { + e.remove(); + } + }); + } + }); +}; + + +const handleProjectileBossCollision = () => { + getAll(projectile).forEach((p) => { + + const bossHit = getAll(boss).some((b) => p.x === b.x && p.y === b.y); + + if (bossHit) { + p.remove(); + + + getAll(boss).forEach((b) => { + if (p.x === b.x && p.y === b.y) { + b.remove(); + if (getAll(boss).length === 0 && !isWinTextDisplayed) { + addText("YOU WIN!", { x: 5, y: 5, color: color`7` }); + isWinTextDisplayed = true; + } + } + }); + } + }); +}; + +afterInput(() => { + checkLevelTransition(); + moveProjectiles(); + handleProjectileBossCollision(); + handleProjectileEnemyCollision(); +}); + + + diff --git a/games/RickRoll_BW.js b/games/RickRoll_BW.js new file mode 100644 index 0000000000..2b7890b9e3 --- /dev/null +++ b/games/RickRoll_BW.js @@ -0,0 +1,21570 @@ +/* +@title: RickRoll +@author: MMKF +@tags: [] +@addedOn: 2024-09-18 +*/ + +const black = "a" +const white = "b" + +setLegend( + [ black, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` ], + [ white, bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222` ] +) + + +let level = 0 +const levels = [ + map `abaaaaaabaabbaaaaaabbbbbbbbbbaaaabbbbbaaaaabbbbbbbbbbbbbabbabbbababbbbbbaaaabbbbbbabbbabba + ababbbbbbbbbbaaaaaabbaaaaabbbabaabbbbbaaaaaabbbabbbbbbbbbabaabbaaabbbbbbaaabbbbbbbabbbabba + ababbbbbbbbbbaaaaaabbbbbbbbbbbbaabaaabbaaaaaabbaabbbbbbbbbaaaaaaabbbbbbaaaabbbbbaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbaabaaabbaabbbbbbaaabbbbbbaaaaaaaaabbbbbaaaaabbbbbbbbbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbaabbaaababbbbbbbaaaaabbbbabaaaaaaabbbaaaaaaabbbbbbbbbbbabba + ababbaaaaabbbaaaaabbaaaaaabbbbbaaabaaabbabbbbbbbaaaaabbaabaaaaaaabbbaaaaaaabbbbbbbbbbbbbba + ababbaaaaabbbaaabbaaaaaaaaabbbbaaabaaaabbbaaabbbbaaaaabbabaaaaaaabbbaaaaaaabbbaaaaaaaaabba + abbbbabbbbbbaaabbbaaaaaaaaabbbbaabbaaaabbbaaabbbaaaaaabbbbaaaaaabbbbaaaaaaabbbaaaaaaaabbba + abbbbabbbbbbaaabbbbbbaabbabbbbbbabbaabaabaaaaabaaaaaaabbaaaaaaaaabaaaaaaaaabbbbaaaabbbbbba + aabbbbbbbbbbaaabbbaabbbbbbbbbbbbabaaaaaaaaaabbbabaaaaabbaaaaaaaabbbaaaaaaaabbbbaaabbbabbba + babbbbbbabbbaaabbbaaabbbbbbbbbbaaaaaaaaababaaaaaaaabaaaaaaaaaaabbbbbaaaaaaabbbbbaaabbbbbba + aabbbabaaabbaaabbaaaabbbbbbbbbbbaabaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaaaaabbbbaaaabbabbba + aabbabbbabbbaaaabbbbbbabbbbbbbbbaaaabbbbbbbbbaabbaaaaaaabbbbbbbbbbbbbaaaaaabbbbbaaaaaabbba + abbbabbbabbbaaaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbba + abbbabbbabbbaaaabbbbbbabbbbbbbbaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbabbbbbbaabba + abbbbbbbbbbaaaaabbbbaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbabbbbaaabba + abbbbbbbbbbaaabbbbaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbaaabbbaabbba + abbbbbbbbbbaaabbbbaaaabbbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbaaabbbaabbba + abbbbbbbbbbaaabbbbaaaaaabbbabbbaaaaabbbbbbbbbbabbbbbbbbbbaaabbbbbbbbbaaaabbbbbbaabbbbabbba + abbbbbbbbbaaaabbabaaabaabbbabbbaaaaabbbbbbbbaaaabbbbbabbbaaabbbabbbbbaaaabbbbbaaabbbbbbbba + abbaaaabbbaaabbbabaaaaabbbbbbbbbaaaabbbbbbbbaaaabbbbbabbbaaabbbbbbbbbaaaabbbbaaaaabbbbbbba + abbbbbbbbbaaabbbbaaaaaabbbbbbbbbaaaabbbbbbbbaaaabbbbbabbbaaabbbbbbbbbaaaabbbbaaaaaabbbabba + abbbbbbbbbaaabbbbbbaabbbbbbbbbbbaaaabbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbba + abbbbbbbbbaaabbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbaabbbbbbabbbbbbbbbbbbbbbaabbbbbbaaaaabbbbbba + abbbbbbbbbaaabbbbaaabbabbbbbbbbbbaabbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbba + ababbabbbaaaabbbbaaabbbbbbbbbbaabaabbbbbbbbbbbbbabbbbaababbbbbbbbbbbbbaabbbbbbbaabbbbbbbba + abaabaabbaaabbbaaaaabbabbababbaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaabbbbbbbaaabbbbbbba + abbbbbbbbaaaabbaaaaabbabbabbbaaaaaabbbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbba + abbbbabbaaaabbbbbbbbbbabbbbbbaaaababbbaaaaaaaaaaaabbbbaaaabbbbbabbbbbbaababbbbbaaaabbbbbbb + bbbbbabbbaaabbabbbaaaaaaababbaaaaabbbaaaaaaaaaaaaabbbbaaaaaaaaaaaabbbbaababbbbbaaaabbbbbba + bbbbbabbbaaaaaaabbbbbabbbabbbbaaaabbbaaabbbbbbbaaaaaabaaaaaaaaaaaaabbbabbabbbbbbaaabbbbbba + aaaaaaaaaaaaaabbbbbbaabbbbbbbbaaabbbbaabbbbbbbbaaaaabbaaaaaaaabbaaabbbabbabbbbbabbbbbbbbba + abaaaabbaaaaabbbbbbbbbbbbbbbbbbaaabbbaabbbbbbbbaaaaabbbaaaabbbbbaaabbbaababaabaaabbbbbbbba + abbbbbbbaaaaaaaaaaaaaaaaaaaabbbaaabbbaabbbbbbaaaaaaabbbbaaaaabbbaabbbbaaabbbbbbbabbbaabbba + bbbbbbbbaaaaabbbbbbbabbbaaabbbaaaabbbaabbaaaaaaabbaabbbbbaaaaabbbbbbbbaaabbbbbbbbbbbbbbbba + abaaabbbaaaaabbbabbbbbbbbbbbbbbaaabbbaabbaaaaaaaabaabbbbbaaaaaabbbbbbbaabbaaaaaaabbbbabbba + bbbaaaabaaaaaabbaaaaaaababbbbbbaaabbbaabbbbbbbbbbaaaabbbbbaaaabbbbbbbbaabbaaaaaaaaaaaabbba + abbbbbbbaaaaabbbbbbbabbbaabaabbaaaabbaabbbbbbbbbbaaaabbbbbbbbaabbbbbbbaabbbbbbbbbbbbaabbba + abbaabbaaaaaaabaaaaaaabaaabbbbbbaaabbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbaabbbaabbba + abbbbbbbaaaaabbbbbbbbbbbbbbaabbbaaabbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbaaaaaaaabbbaabbba + bbbbbbbaaaaabbbbbbbabbbabbbbbbbbaaabbaaaaabbbbbbbaaabbbbbbbbbbbbaabbbaabbbbabbbaabbbaabbba + abbbbbbaaaaabbbbbbbabbbabbbbbbbbaaabbaaababbbbbbbaaabbbbbbabbaabaaabaaabbbbabaaaabbbaabbba + abbbbbbaaaaabbbbbbbabbbabbbbbbbbbbabbaaaaabbbbbbbaaabbbbbaabbbabaabbaaabbbbabbbabbbbaabbbb + bbbabbbaaaaabbbbbbbabbaabbbabbbbbbbbbaaabbbbbbbbbaaabbbbbaaabbabaaababbbbbbbbbbbbbbbaabbbb + bbbabbbaaaaabbaaaaaaaaaabbbabbbabbbbbaaabbbbbbbbbaaabbbbbaaabbabaaabbbbbbbbbbbbbbbbbaabbba + bbbabbbaaaaabbbabbaabbaabaaaabbaabbbbaaaabbbbbbbbbaabbbbbaaabbabaaabbbbbbbbbbbbabbbbaabbba + bbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbaaaaabbbbbaaabbabaaabbbbbbbbbbbbabbbbaaabba + bbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbaaaaaabaabbaabbabaaabbbaaaaaaaaaaabbaaaabba + bbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbbaaabbbbbbbbaaaabaabbaabbabaaabbbbbbbbbbbbabbbbaaabba + aaaaabaaaaaabbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbaaaabbbbbaaababbaabbbbbbbbbbbbbbbbaaaabba + bbbabaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbaaaabbbbbbbbbaaabbbbbaaaabbbabbbbbbbbbbbbbbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbaabaaaaaaaabbbbbaaaabbbbbbbbbaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbba + bbbbbaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbaaaabaabbbbbbbabbbbbbababbbbbaabbbbbbbbbbbbbbaaabbba + bbbbbaaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbaaaaaaaaabbbbbabbbbbaaaabbbbbaaabbbaaaaaaabbbaaabbba + bbbbbaaaaaabbbbbbbabbbbbbbbbbbaaaaabbbaaaaaaaaaaaabbabbbbbaaaabbbbbbaabbbbbbaaaaaaaaaaaaba + bbbbbaaaaaabbbbbbbbbbabbbbbbbbaaaaabbbbaaaabbbbaaaaaaaaabbaaaabbbbbbaaaabbbbbbbbbbbaaaaaba + bbbbbaaaaaabaaabbaabbabbbbbbbbaaaabbbbbaaaabbbbbaaaaaabbbbbaaabbbbbbaaaabbbbbbbbbbbaaaabba + abbbbaaaaaabbbbbaaaaaaaaaaabbbaaaaabbbbaaaabbbbbbaaabbbbbbbaaaabbbbbaaaaabbbbbbbbbbaaabbba + bbbbbaaaaabbbbbbbabbbabbbbbbbaaaaaabbbbabaabbbbbbaaaaabbbbbbabbbbbbbaaaaaabbbbbbbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbaaaaaabbbbabaabbbbbbaaaaabbbbbabbabbbbbaaaaaaabbbbbbbbbbbbbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbaaaaabbbbaabaabbbbbaaaaabbbbbbabbabbbbbbaaaaaaaabbbbbbbbbbbbb + abbbaaaaaabbbbbbaabbbabbbabbbaaaaabbbbabaaabbbbbaaabbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbb + abbbaaaaaabbbbbbaabbaabbbabbbaaaabbbbaabaaabbbbbbbbbbbbbbbbbbbbbbabbbaaaaaaaaaaaabbbbbbbbb + bbbbaaaaaabbbaaaaabbabbbbabbbaaabbbbaabbaaabbbbbbaabbbbbbbbbbbbbbabbbaaaaaaaaaaaaaaaabbbbb + bbbbaaaaabbbbbbbabbbabbbaabbbaabbbbbaabbaaaaabbbbaabbbbbbbbbbbbbbabbbaaaaabbaaaaaaaaaaaaab + bbbbaaaaabbbbbbbabbbabbbabbbbabbbbbaaabbbaaabbbbbaaabbbbbbbbbbbbabbbbaaaaabbaaaabaaaaaaaaa + bbbaaaaaabbbbbbbabbbbbbbabbbbbbbbbaaabbbbaaabbbbbaaaabbbbbbbbbbaabbbbaaaabbbaaaaabaaaaaaab + bbbaaaaaabbbbbbbabbbbbbbbbbbbbbbbaaaabbabaaaaaabbaaaaabbbaabbbbaabbbbaaaabbbbaaaaaaaaaaaaa + abaaaaaaababbbbbbbbbbbbbbbbbbbbaaaaaabbabbaaaaabbaaaaabbaaabbbaabbbbbaaaabbbbbaaabbbaabbaa + bbbaaaaaabaaaaaaaaaaaabbbbbbbaaaaaaaabbaabbaaaaabaaaaaabbabbbaaabbbbbaaaabbbbbbabbbbaaaaab + bbbaaaaabbbbbbbbbbbbaabbbbaaaaaaaaaabbbaabbaaaaaaaaaaabbbbbbbaabbbbbbaaaabbbbbbabbbaabaaab + bbaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaabbbaabbbaaaaaaaabbbbbbbbaaabbbbbbaaaabbbbbbabbbbbbbbba + bbaaaaaabbbaabaaabbbbbbbaaaaaaabaaaabbaaaaaaaaabbaaabbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbba + bbaaaaaabbbbbbbbbbbbbbaaaaaaaaaabaaabbaaabbbbbbbbaaabbbababaaabbbbbbbaaaabbbbbbbabbbbbbbbb + bbaaaaaabbbbbbbbbbbbaaaaaaabaaabbbaabbaaabbbbbbbbaaabbbabaaaabbbbbbbaaaaabbbbbbabbbbbbbbbb + bbaaaaaabbaabbbbbbaaaaaabaabaaabbbaabbbbabaaaababaaaaabaaaaabbbbbbbbaaaaabbbbbbabbbbbbbbbb + bbaaaaaabbbbbbbbbaaaaaaaaaaaaaabbbaabbaabaabaabbbaaaaaaaaaaabbbbbbbbaaaabbbbbbbaabbbbbbbbb + bbaaaaabbbbbbbbaaaaaaaaaaaaaaaabbbaabbababbababbbaaaaaaaaaabbbbbbbbbaaaaabbbbbbabbbbbbbbbb + bbaaaaabbbbbbbaaaaaaaaaaaabaaaabbbaabbbababbaaabbaaaaaaaaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbb + bbaaaaabbbbbbaaaababaaaaaabaaaabbbaabbbaababbabbbaaaaaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbb + bbaaaabbbbbbaaaaabaaaaaaabbaaaaabaaabbaababbabbbbaaaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbb + baaabbbbbbaaaabbbbaaaaaabbbaaaabbaaabbbaaaabaabbbaaaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbb + baabbbbbaaaaaaaaaaaaaaabbbbaaaabbaaabbaaaaaaaabbbaaaaaabbbbbbbbbbbbaaaabbbbbbbabbbbbbbbbbb + baabbbbaaaaaaaabbaaaabbbbbbaaaabbaaabbbaaaaaaabbbaaaaabbbbbbbbbbbbaaaaabbbbabaabbbbbbbbbbb + babbbbaaaaaaaaabaaaabbbabbbbbbabbaaabbbaabaaaabbbaaaaabbbbbbbbbbbbaaaaabbbbbaaabbbbbbabbba + babbbaaaaaaaaaaaaaabbbbbbbbbababbaaabbaaabaaaabbbaaabbbbbbbbbbbbbbaaaabbbbabbabbbbbbbbbbba + bbbbbaaaaaaaaaaaaabbbbbbbbbbbaabbaaabbbbaabaaabbbaaabbbbbbbbbbbbbbaaaabbbbabbabbbbbbbbbbbb + abbbbaaaaaaaaabaaabbbbbbbbbbbbabbaaabbaaaaabaabbbaabbbbbbbbbbbbbbaaaaabbbbabbabbbbbbbbbbbb`, + map `abaabaabbaaabaaaaaabbbbbbabbbbbbbaabbbaaaaabbbaabbbbaaabbbbaaaababbbbbbabbaabbbbbbbbbbabba + ababbbbbbbbbbbaaaaabbaaaaabbbbbaaaabbbbaaaabbbaabbbbaaabbbbbaaabbbbbbbbbaaaabbbbbbbbbbabba + ababbbbbbbbbbaaaaaabbbbbbabbbbbaaaabbbbaaaaabbaaabbbaaabababbaabbbbbbbbbaaaaabbbaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbaabaababbbaaaaaaaaaabbbbbbbbaabbabbbbbabbbaaaaabbbbbbbbbabba + ababbaabbabbbaaaaabbbbbbbbbbbbbabaabaaabaaaaaaaababbbbbbbbbaabaabbaaabbbaaaaabbbbbbbbbabba + ababbaaaaabbbaaaaabbaaaaaabbbbbabaabaaabbaabbbabbbabbbbbbbbbaaaaaaaaabbbaaaabbbbbbbbbbbbba + ababbaaaaabbbaaabbaaaaaaaaaabbbbbaabaaaabbabbbbbbbaabbbbbbbbbaaaaaaabbbbbaabbbbaaaaaaaabba + abbbbabbbabbaaabbbaaaaaaaaaabbbbbaabaaaabbabbbbbbbaaaabbbbbaaaaaaaaabbbbaaaabbbaaaaaaabbba + abbbbabbbbbbaaabbbbbbaabbaabbbbbaaaabaaabbababbbbbaaaaabbbbabaaaaaaabbbaaaaabbbbaaabbbbbba + aabbbbbbbbbbaaabbbaabbbbbbbbbbbbaaaababbabbbaaabbaaaaaaabbabbaaaaaaabbaaaaaabbbbaabbbabbba + babbbbbbabbbaaabbbaaabbbbbbbbbbbaaabbabbbbbbaaaabbaaaaaaabbaaaaaaaabbbaaaaaabbbbaaabbbbbba + aabbbbbaaabbaaaabaaaabbbbbbbbbbbaaabbaaabaaaaaaabbaaaaaaabbaaaaaaaabbbaaaaaabbbbaaabbabbba + aabbabbbabbbaaaabbbbbbabbbbbbbbbbaaabaaaaaaaaabbbaaaaaaaabbaaaaaaaabbaaaaaaabbbbaaaaaabbba + abbbabbbabbbaaaabbbbbbbbbbbbbbbbbaaabaaaaaaaaaaaaaaaabaaabaaaaaaaabbbbaaaaaabbbbbbbbaabbba + abbbabbbabbbaaaabbbbbbabbbbbbbbbbaaabaaaaabbbaaaaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaaabbabbbbbbaaaabbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbaaaaaabbbbbbbbbbabba + aaaaaaaaaaaaaaaabbbbaaabbbbbbbbbaaaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbaaaababbbbbbbbbaabba + abbbbbbbbbbaaaaabbbbaabbbbbbbbbbaaaaaababbbbbbbbbbbaaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbaaabba + abbbbbbbbbbaaabbbbaaaabbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaabbbaabbba + abbbbbbbbbbaaabbbbaaaabbbbaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbabbbbabbba + abbbbbbbbbbaaabbbbaaaaaaabbabbbbaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbabbbbbbbba + abbbbbbbbbaaaabbabaaaaaabbbbbbbbaaaaabbbbbbbbaabbbbbbbbbbbaabbbbbbbbbbbaaaabbbbaabbbbbbbba + abbaaaabbbaaabbbabaaaaabbbbbbbbbaaaaabbbbbbbbaaabbbbbbabbbaabbbbbbbbbbbaaabbbbbaaabbbbbbba + abbbbbbbbbaaabbbbaaaaaabbbbbbbbbaaaaabbbbbbbbaaabbbbbaabbbaabbbbbbbbbbbaaabbbbaaaaabbbabba + abbbbbbbbbaaabbbbbbaabbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbaaaabbbbaaaaabbbbbba + abbbbbbbbbaaabbbbbaaabbbabbbbbbbbaaaabbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaabbbbaaaaabbbbbba + abbbbbbbbbaaabbbbaaabbabbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbaaabbbbbbbbbaaaabbbbbaaaabbbbbba + ababbabbbaaaabbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbba + abaabaabbaaaabbaaaaabbabbabaabbbbaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbaaabbbbbbba + abbbbbbbbaaaabbaaaaabbabbabbbbaaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaabbbbbba + abbbbabbaaaabbbbbbbbbbabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbabbbbbbbaaaabbbbbbb + bbbbbabbbaaabbabbbaaaaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbaaaabbbbbba + bbbbbabbbaaaaaabbbbbbabbbabbbaaaababbbbabaaaaabbbbbbbbbaabbbbbbbbbbbbbbabbbbbbbbbaabbbbbba + aaaaaaaaaaaaabbbbbbbabbbbbbbbaaaaaabbbbaaaaaaaaaaaabbbbbabbbbbbbbbbbbbbababbbbbabbbbbbbbba + aaaaaabbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaabaaaaaaaaaabbbbbaaabbbbbaabbbbbababbbbaaabbbbbbbba + abbbbbbbaaaaaaaaaaaaaaaaaabbbbaaaabbbbaabbbbbbbaaaaaaabaaaaaaaaaaaabbbbababbbbbbabbabbbbba + bbbbbbbbaaaaabbbbbbbabbbaabbbbaaaabbbbaabbbbbbbbbaaaabbaaaaaaaaaaaaabbbaaabbbbbbbbbbbbbbba + abbaaaabaaaaabbbabbbbbbbbbbbbbaaaabbbbaabbbbbbbbbaaaabbbaaaaaaabbaaabbbaabbaaaaaabbbbabbba + bbbabbbbaaaaaabbaaaaaaababbbbbbaaabbbbabbbbbbbbaaaaaaabbbaaaaabbbaaabbbaabbaaaaaaaaaaabbba + abbbbbbbaaaaabbbbbbbbbbbaababbaaaaabbbabbbbaaaaaabbaaabbbbaaaaabbaabbbbaabbbbbbbbbbbaabbba + abbaabbbaaaaaabaaaaaaabaaabbbbbaaaabbbabbbbaaaaaabbaaabbbbbaaaaabbbbbbbabbbbbbbbabbbaabbba + abbbbbbbaaaaabbbbbbbbbbbbbbabbbaaaabbbabbbbbbbabbbaaaabbbbbaaaaabbbbbbaabbbaaaaaaaabaaabba + bbbbbbbaaaaabbbbbbbabbbabbbbbbbbaaabbbaabbbbbbbbbbaaaabbbbbbbaabbbbbbbaabbbbbbbaabbbaabbba + abbbbbbaaaaabbbbbbbabbbabbbbbbbbaaaabbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbabaaaabbbaabbba + abbbbbbaaaaabbbbbbbabbbabbbbbbbbaaaabbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbabbbabbbbaaabbb + bbbabbbaaaaabbbbbbbabbaabbbbbbbbaaaabaaabbbbbbbbbbaaaabbbbbbbbbbbbabbaabbbbbbbbbbbbbaaabbb + bbbabbbaaaaabbaaaaaaaaaabbbabbbbbbaabaabbbbbbbbbbbaaaabbbbbabaabbaaaaaabbbbbbbbabbbbaaabba + bbbabbbaaaaabbbabbaabbaabaaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbabaabbaaaaabbbbbbbbbabbbbaabbba + bbbbbbbaaaaabbbbbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbbbaaabbbbaabbbbaaabbbbbbbbbbbbabbbbaaabba + bbbbbbbaaaaabbbbbbbabbbbbbbbbbbaabbbbaaabbbbbbbbbbbaaabbbbaaabbbaaaabbbaaaaaaaaaabbbaaabba + bbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbbbaabbbbbaaababaaabbbbbbbbbbbbaabbbaaabba + aaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbaaaaabbbbbaaabbbbaabbbbbbbbbbbbabbbbaaabba + bbbabaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbaaaabbbbbbbaaaaaabbbbaaabbbbaabbbbbbbbbbbbabbbbaaabba + bbbbbbaaaaabbbbbbbbbbbaabaaaaaaaabbbbaaaabbbbbbbbbaaaabaabbaabbbbaaabbbbbbbbbbbabbbbaaabba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbaaabbbbbaaabbbaabbbbbbbbbbbbbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbaaaabbaabbbbbbaaabbbbbaaaaaaaabbaaaaaaaaaaabbbaaaabba + bbbbbbaaaaabbbbbbbabbbbbbbbbbbaaaabbbaaaaabaabbbbbbbaabbbbbaaaaaaabbbbbbaaaaaaaaaaaaaaaaba + bbbbbaaaaaabbbbbbbbababbbbbbbbaaaabbbbaaaabbbabbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaaba + bbbbbaaaaaabaaabbaabbabbbabbbbaaaabbbbaaaabbbaabbbbbbabbbbbbaaabbbbabbbbbbbbbbbbbbbaaaaaba + abbbbaaaaaabbabbaaaabaaaaaabbbaaaabbbbaaaaabbaaaaaabbabbbbbaaaabbbbabbbbbbbbbbbbbbbaaaaaba + bbbbbaaaaabbbbbbbabbbabbbbbbbaaaaaabbbaaaaabbbbaaaaaaaaabbbaaabbbbbaabbbbbbbbbabbbbaaabbba + bbbbbaaaaabbbbbbbabbbbbbbbbbbaaaaabbbbaaaaabbbbbbaaaaabbbbbaaaabbbbaaabbbbbbbaabbbbaaabbba + bbbbbaaaaabbbbbbbabbbabbbbbbbaaaaabbbbabaaabbbbbbaaabbbbbbbaaaabbbbaaaabbbbbbbabbbbaaabbba + abbbaaaaaabbbbbbaabbbabbbabbbaaaaabbbbaaaaabbbbbbbaaaabbbbbbabbbbbbbaaaabbbbbbabbbbaaaaaba + abbbaaaaabbbbbbbaabbaabbbabbbaaaaabbbaaaaabbbbbbbbaaaaabbbbbababbbbbaaaaabbbbbbbbbbaaaabba + bbbbaaaaaabbbaaaaabbabbbbabbbaaaabbbbabaaabbbbbbbaaaababbbbabbabbbbbaaaaabbbbbbbbbbaaabbba + bbbbaaaaabbbbbbbabbbabbbaabbaaaabbbbaabaaabbbbbbaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbabbbbb + bbbbaaaaabbbbbbbabbbabbbabbbbaabbbbbabbaaaabbbbbbbbbbbbbbbbbbbbbbabbaaaaaaaaabbbbbbbbbbbbb + bbbaaaaaabbbbbbbabbbabbbabbbbaabbbbaabbaaaaabbbbbbabbbbbbbbbbbbbbabbaaaaaaaaaaabbbbbbbbbbb + bbbaaaaaabbbbbbbabbbbbbbabbbbabbbbaaabbbaaaabbbbbaabbbbbbbbbbbbbabbbaaaaaaaaaaaaabbbbbbbbb + abaaaaaaababbbbbabbbbbbbbbbbbbbbbaaabbabaaaaabbbbaaabbbbbbbbbbbbabbbaaaaaaaaaaaaaaaabbbbbb + bbbaaaaaabaaaaaaaaaaaabbbbbbbbbbaaaabbaabaaaabbbbaaaabbbbbbbbbbaabbbaaaaabaaaaaaaaaaaaabbb + bbbaaaaabbbbbbbbbbbaaaaaaaabbbbaaaaabbaabaaaaaaaaaaaaabbbabbbbbaabbbaaaaabbaaaaaaaaaaaaaaa + bbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbaabbaaaaaaaaaaaabbaaabbbaabbbbaaaabbbbaaaaaaaaaaaaaa + bbaaaaaabbbaaaaaabaabbbbbbaaaaaaaaabbbbabbbaaaaaaaaaaaabbabbbaaabbbbaaaabbbbabaaaaaaaaaaaa + bbaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabbbaaababbbbbbaaaaabbbbbbbaabbbbbaaaaabbbbbaaabbbaabaaa + bbaaaaaabbbbbbbbbbbbbbbaaaaaabbaaaabbbaaabbbbbbbbaabbbbbbbbbaaabbbbbaaaabbbbbbbabbbbaabaaa + bbaaaaaabbaabbbbbbbbbaaaaaaaaabaaaabbbaaaaaaaaabbaabbbbbbbbaaabbbbbbaaaabbbbbbbaaaabaaaaab + bbaaaaaabbbabbbbbbbaaaaaaaaaaabbbaabbbbbababaabbaaabbbaababaabbbbbbbaaaaabbbbbaabbbbbbbbba + bbaaaaabbbbbbbbbbaaaaaaaaaaaaaabbaabbbaababaaabbaaaaaababaaaabbbbbbbaaaabbbbbbbbbbbbbbbbba + bbaaaaabbbbbbbbbaaaaabaaaaaaaaabbaabbbbabbabbabbaaaaaaaaaaaabbbbbbbbaaaabbbbbbbabbbbbbabba + bbaaaaabbbbbbbbaaaabaaaaaaaaaabbbaabbbababbaaabbabaaaaaaaaabbbbbbbbbaaaabbbbbbaabbbbbbbbba + bbaaaaabbbbbbaaaaaabaaaaaabaaaabbaabbbbaababaabbabaaaaaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbba + baaaaaabbbbaaaaaabaaaaaaabbaaaabbaabbbabaababbbbbbaaaaaaaabbbbbbbbbaaaaabbbbbbbabbbbbbbbba + baaabbbbbbaaaaabaaaaaaaabbbaaaabbaabbbbaaaabaabbbbaaaaaaabbbbbbbbbbaaaaabbbbaaabbbaaabbbbb + baabbbbbbaaaaaaaaaaaaaaabaaaaaabaaabbbaaabbababbbbaaaaaabbbbbbbbbbbaaaabbbbbbaabbbababbbbb + babbbbbbaaaaaaaabaaaaabbbbbbaaabaaabbbbabaababbbbbaaaaaabbbbbbbbbbbaaaabbbbbbaabbbababbbbb + babbbaaaaaaaaaaaaaaaabbbbbbaaaabaaabbbbaaabababbbbaaaaabbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbba + bbbbaaaaaaaaaaaaaaabbbbbbbbbbaabaaabbbaabbabaabbbaaaaabbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbb + bbbbaaaaaaaaaaaaaaabbbbbbbbbbaabaaabbbbaabbababbbaaaaabbbbbbbbbbbbaaaabbbbabbabbbbbbbbbbbb`, + map `abaabaabbaaabaaaaabbbbbbbabbbbbbbbababbbbbaaabbaaabbbbabbaabbbbaaaaabbbaaabbbbbbbbbbbbabba + ababbbbbbbbbbaaaaaabbaaaaaaaabbbbaaaabbbaaaaaabaaabbbbaabaabbbbaaaaabbbbaababbbbbabbbbabba + ababbbbbbbbbbaaaaaabbbbbbabbbbbbbaaaabbbaaaaaaaaaabbbbaaaaabbbaaaaaabbbbaababbbbbabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbaaaaabbbbaaaaaabaaabbbbaaabbbbaabaaabbbbaabaabbbbbbbbbabba + ababbaabbabbbaaaaabbbbbbbbbbbbbbaaaaabaabbaaaaabaaaabbbaaaabbbbbabbbbbbbbaaaabbbbbbbbbabba + ababbaaaaabbbaaaaabbbaaaaabbbbbaabbaabaabbaaaaaaaaaabbbbbbbbbabbbbbbbbbbbaaaabbbbbbbbbbbba + ababbabaaabbbaaabaaaaaaaaaaaabbbabaabbaaabbaaaaaaaaabbbbbbbbbbabbabbbbaaabaaabbbaaaaaaabba + abbbbabbbabbbaaabbaaaaaaaaaabbbbbaaaabaaabbbaaaaabbbbbbbbbbbbbaababbaaaaabbaabbbaaaaaabbba + aabbbbbbbbbbbaabbbaaaababbbabbbbbaaaabaaabbbababbbbbbbbbbbbbbbbaaaaaaaaaabbaabbbaabaaabbba + aabbbbbbabbbaaaaabbbbbbbbbbbbbbbbaaaabbaaabbabbbbbbbbbabbbbbbbbbaaaaaaabbbbaabbbbbbaabbbba + aabbbbbbabbbaaaaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaabbbbbabaaaaaabbbbbaabbbaabaabbbba + aabbaabaaabbaaaaaaaaaabbbbbbbbbbbaabaababbabbbbbbbbbbbaaaabbbbaaaaaaaabbbbaaabbbaaaaabbbba + aabbbbbbabbbaaaabbbbbbbbbbbbbbbbbaabaaabbbbbbbaaaaaabbaaaaabbaaaaaaaaabbaaaaabbbaaaaaabbba + abbbbbbbabbbaaaabbbbbbbbbbbbbbbbbaabaaabbbbbabaaaaaabaaaaaaabbaaaaaaabbbaaaaabbbbbbbaabbba + abbbbbbbabbbaaaabbbbbbabbbbbbbbbbaaaaaaabaaaaaaaaaaabbaaaaaabbaaaaaaabbbaaaaabbbbbbbbbabba + abbbbbbbbbbaaaaabbbbaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaabaaaaaaabbbbbbbbbabba + aaaaaaaaaaaaaaaabbbbaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbaabaaaaaaabbbaaaaaabbbbbbbbaabba + abbbabbbbbbaaaaabbbbaabbbbbbbbbbbaaaaabbbbbbbbbbbaabaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaaabba + abbbbbbbbbbaaabbaaaaaabbbbaabbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbaaaabbbbbbbbbaabbba + abbbbbbbbbbaaabbbbaaaaaaabaabbbbbaaaaaabbabbbbbbbbbbbaaaaaaaaabbbbbbbbbbaaabbbbbbbbbbabbba + abbbbbbbbbbaaabbbbaaaaaaabbabbbbbaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbba + abbbbbbbbbaaaabbbbbaaaaabbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaabbbbbbbba + abaaaaabbbaaaabbbbbaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbba + abbbbbbbbbaaaabbbbaaaaabbbbbbbbbbaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbabba + abbbbbbbbbaaaabbbbaaabbbbbbbbbbbaaaaaabbbbbbbbabbbbbbbbbbbbbbbabbbbbbbbbaaabbbaaaaabbbbbba + abbbbbbbbbaabbbbaaaaabbbbbbbbbbbaaaaaabbbbbbbbababbbbbbbbbbbbaabbbbbbbbbaaabbbaaaaabbbbbba + abbbbbbbbbaaaababaaabbabbbbbbbbbaaaaaabbbbbbbbabaabbbbbbbbbbbabbbbbbbbbbaaabbbbaaaabbbbbba + ababbabbbaaaabbaaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaabbbbaabbbbbbbba + abaabaabbaaaabbaaaaabbabbabbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbaaabbbbbbba + abbbbbbbbaaaabbaaaaabbabbabbbbbbbaaaabbbbbbbbbbbbabbbbbabbbaaabbbbbbbbbbaabbbbbaaaabbbbbba + abbbbabbaaaabbbbbbbbbbabbbbbbbaabbaaabbbbbbbbbbabaabbbbbbbbabbbbbbbbbbbaaabbbbbaaaabbbbbbb + bbbbbabbbaaabbabbbaaaaaaabbbbaaaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbba + bbbbbabbbaaaaaabbbbbbabbbabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaabbbbbba + aaaaaaaaaaaaabbbbbbbbabbbbbbbaaaaaaabbbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbbaabbbbbbabbbbbbbbba + abaaaabbaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbabbabbbbbbbabbbbbbabbbbbbbbbbbbaabbbbbbaabbbbbbbba + abbbbbbbaaaaaaaaaaaaaaaaaabbbaaaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbabbabaabba + bbbbbbbbaaaaabbbbbbbabbbaabbbaaaaaabbbbbbaaaaaaaaaaaabbbbaabbbbbbbbbbbbaabbbbbbbbbbbbbbbba + abaaaabbaaaaabbbabbbbbbbbbbbbbaaaaaabbbbbababaaaaaaaaabbbaaaabbbbbabbbbaabaaaaaaabbbbbbbba + bbbaabbbaaaaaabbaaaaaaababbbbbaaaaabbbbbbbbbbbbbbaaaaababaaaaaaaaaaabbbaabaaaaaaaaaaaabbba + abbabbbbaaaaabbbbbbbabbbaababbaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbabbbbbbbbbbbbaabbba + abbaabbbaaaaaabaabaaaabaaabbbbaaababbbbbbbbbbbbbbbaaaaabbbaaaaaaaaaaabbabbbbbbbbabbbaaabba + abbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbabbaaaaaaaaabbbaaaabbbbaabbabbbbaaaaabbbaaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaaaaaaabaabbbbaaaaabbbabbbabbbbbbbaabbbaabbba + bbbbbbbaaaaabbbbbbbabbbabbbbbbbaaaaabbbbbabbbbaaabbbbaabbbbbaaaaabbbbbbbbbbabaaaabbbaaabba + bbbabbbaaaaabbbbbbbabbbabbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbbbabbbabbbbaaabbb + bbbabbbaaaaabbbbbbbabbbabbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbabbbbbbbbbabbbbaaabbb + abbabbbaaaaabbaaaaaaaaaabbbabbbbaaaabaabbbbbbbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbbbabbbbaaabba + bbbabbbaaaaabbbabbbabbbabbaabbbbaaaaaaaabbbbbbbbbbbbaaaabbbbbbabbbbaaabbbbabbbbabbbbaabbba + bbbbbbbaaaaabbbbbbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbabbbbaaabba + bbbbbbbaaaaabbbbbbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbabbaaaabbbaaaaaaaaabbbaaabba + bbbbbbbaaaaabbbbbbbbbbbbbbabbbbabbbbaaaabbbbbbbbbbbbaaabbbbbaaabaaaabbbbbbbbbbbabbbbaaabba + aaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbaaaabbbbbbbbbbbbaaabbbbbaaabbaaabbbbbbabbbbabbbbaaabba + abaabaaaaaaaaaaaaaaaaaaaaaabbbaaabbbaaaabbbbbbbbbbbbaaabbbbaaaabbaaabbbbbbbbbbbabbbbaaabba + bbbbbbaaaaabbbbbbbabbbaaaaaaaaaaabbbaaaabbbbbbbbbbbbbaabbbbaaaabbaaabbbbbbbbbbbbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbaaaaaaabbbbaaaabbaabbbbbbbbbbbbbbbbbaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbaaaaaaabaabaaaaaaaaaaaaaaaaaaaabbbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbaaabbbbaaaabbbbbbbbbbaaaaabaabaaaaaaabbbbbaaaaaaaaaaaaaabbba + bbbbbaaaaabbbbbbbaabbabbbbbbbbaaabbbbaaaabbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbaaabbba + abbbbaaaaabbaaabbaabbabbbabbbbaaabbbbaaaabbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbbbbbbbaaabbbb + abbbbaaaaabbbbabaaabaaaaaaaabbaaaabbbaaaabbbbbbbbbbbbbabbbbbbaaaabbbbbbbbabbbbabbbbaaabbba + bbbbbaaaaabbbbbbbabbbabbbbbbbbaaaabbbaaaabbbbaaabbbbbbabbbbbaaaaabbbbbbbbbabbbabbbbaaaabba + bbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbbaaaabbbbbabbbbbbaabbbbbbbbbbbbbbbabbbbaaabbba + bbbbbaaaaabbbbbbbabbbabbbbbbbbaaaabbbaaaaabbbbbaaaabbbabbbbaaaabbbabbbbbbaabbaabbbbaaabbba + abbbaaaaaabbbbbbbabbbbbbbabbbaaaaabbbaaaaabbbbbbbaaaaaaaabbaaaabbbaabbbbbbabbaabbbbaaaaaba + abbbaaaaaabbbbbbaabbaabbbabbbaaaaabbbaaaabbbbbbbbbaaaaabbbbbaaabbbaaabbbbbbbbbabbbbaaaaaba + bbbbaaaaaabbbbaaaabbabbbbabbbaaaabbbbaaaaabbbbbbbbaaabbbbbbbaaabbbaaaabbbbbbbbabbbbaaaaaba + bbbbaaaaabbbbbbbabbbabbbaabbaaaaabbbaaaaabbbbbbbbbaaababbbbbbbbbbbbaaabbbbbbbbabbbbaaabbba + bbbbaaaaabbbbbbbabbbabbbabbbbaaabbbbbaaaabbbbbbbbbaaaaabbbbbbabbbbbaaaabbbbbbbbbbbbaabbbba + bbbaaaaaabbbbbbbabbbbbbbabbbbaabbbbabaaaabbbbbbbbaaaababbbbbbbbbbbbaaaaabbbbbbbbbbbaaaabba + bbbaaaaaabbbbbbbabbbbbbbabbbbabbbbaabaaaaaabbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbaaaaaba + abaaaaaaababbbbbabbbbbbbbbbbbabbbbaabbaaaaabbbbbbabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaabbbba + bbbaaaaaabaaaaaaaaaaaabaabbbbbbbbaabbbaaaaabbbbbbaabbbbbbbbbbbbbabbaaaaaaaaaabbbbbbbbbbbbb + bbbaaaaabbbbbbbbbbbaaaaaaaabbbbbaaabbabaaaaaaaaaaaaabbbbbbbbbbbbabbaaaaaaaaaaaabbbbbbbbbbb + bbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbabbbbaaaaaaaaaaabbbbbbbbbbabbbaaaaaaaaaaaaaabbbbbbbbb + bbaaaaaabbbaaaaaaaaaabbbbbbbbbaaaaabbababbaaaaaaaaaaaabbbabbbbaabbbaaaaaaaaaaaaaaaabbbbbbb + bbaaaaaabbbbbbbbbbbabbbbbbbaaaaaaabbbaaaababbbbbbaaaaabaaabbbbaabbbaaaaabbaaaaaaaaaaaabbbb + bbaaaaaabbbbbbbabbbbbbbbbbaaaaaaaabbbaaaabbbbbbbbaaaaaabaabbbaabbbbaaaaabbbaaaaaaaaaaaaaab + bbaaaaabbbaaabbabbbbbbbbaaaaaaaaaabbbaabaaaaaaabbaaaaaabbbbbbaabbbbaaaaabbbbaaaaaaaaaaaaaa + bbaaaaabbbaaabbbbbbbbbaaaaaaabaaaabbbabbabbaaabbaaabbbbbbbbbbaabbbbaaaaabbabbbaaaaaaaaaaaa + bbaaaaabbbbbbbbbbbbbaaaaaaaaaaaaaabbbabbbabaaaababbbbbbbbbbbaabbbbbaaaaabbbbbbaaabbaaabaaa + bbaaaaabbbbbbbbbbbaaaaaaaaaaaabaaabbbabaababbabbabbbabbbbbbaaabbbbbaaaaabbbbbbbaabbbaaaaab + bbaaaaabbbbbbbbbbaaaaaaaaaaaaabaabbbbaabaabaabababaaaabbbbaaabbbbbbaaaaabbbbbbbaabaaaaaaab + baaaaaabbbbbbbbaaaaaaaaaaaaaaaababbbbabaababaabbabaaaaabaaaaabbbbbbaaaaabbbbbbaabbbbbbbbba + baaaaaabbbbbbbaaaaaaaaaaaaaaaabbabbbbabbaababbabbbaaaaaaaaaabbbbbbbaaaaabbbbbbbabbbbbbabba + baaaaaabbbbbaaaaabaaaaaaabaaaabbaabbbbbaababaabbbbaaaaaaaaabbbbbbbbaaaaabbbbbaabbbbbbbbbba + baaaabbbbbaaaaabbaaaaaaaabaaaabbabbbbbaaaababbbbbbaaaaaaaabbbbbbbbbaaaaabbbbaabbbbbbbbbbba + baabbbbbbbaaaaaaaaaaaaaabaaaaaababbbbbbaaaabaabbbbaaaaaaaabbbbbbbbbaaaaabbbbbaabbbbbbbbbba + baabbbbbaaaaaaaabaaaaabbbaaaaabbabbbbbbaaabababbbbaaaaaaabbbbbbbbbbaaaaabbbbaaabbbbbbbbbba + babbbbbaaaaaaaaaaaaaabbabbbaaabbaabbbbaabbabaabbbbaaaaaabbbbbbbbbbbaaaabbbbbaaabbbbbbbbbba + babbaaaaaaaaaaaaaaabbbbbbbaaaabbaabbbbbaaabababbbbaaababbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbba`, + map `ababbaaabaabbaaaaabbbbbbbabbbbbbbbbbababbbbbbbabbaaabbbbbababbbaaabbbbaaabbbbbbbbbbbbbabba + ababbbbbbbbbbaaaaaabbaaaaaaaaabbbbbbaaabbbbbbbbbbaaabbbbbababbbaaabbbbaaaaabbbbbbabbbbabba + ababbbbbbbbbbaaaaaabbabbbabbbbbbbbbaaaabbbbbaaabbaaabbbbbabaabbbaaaaabaaaaabbbbaaaabbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbaaaaaabbbbaaaaaaaaaabbbbabaabbbaaaaaaaabaaabbbbbabbbbabba + ababbabbbbbbbaaaaabbbbbbbbbbbbbbbaaaaaabbbbaaaaaaaaaabbbbaaaabbbaaaaaaaabaaabbbbbbbbbbabba + ababbaaaaabbbaaabbbbbaaaaabbbbbbaaaaaaabbbbaaaaaaaaaaabbbaaaabbbaaaaaabbbbaabbbbbbbbbbabba + ababbaabaabbbaabbbaaaaaaaaaaabbbaaaaaabbaabaaaaaaaaaaabbbaaaabbaabaaabbbbbaaabbaaaaaaaabba + aabbbbbbbabbaaabbbaaaaaaaaaaabbbaaaaaaabaabbaaaaaaaabbabbbbbbbbabbabbbbbbbaaabbaaaaabaabba + aabbbabbbabbbaabbbbbaaaababbbbbbaaaaaabbaaabbaaaaabbbbbbbbbbbbbaababbbbbbbaaabbbaababbbbba + aabbbbbbbbbbaaabbbaaabbbbbbbbbbbbaaaaabbaaabbbabbbbbbbbbaabbabbaabbabbbbaabbabbbaabbbabbba + aabbbbbbabbbaabbbbaaabbbbbbbbbbbbaaaaabbaaabbbbbbbbbbbbbaabbbbbbbabaabaaaabbabbbaabaaabbba + aabbaaaaabbbaabaabaaaabbbbbbbbbbbaabaabbbbbbbbbbbbbbbbbbabbbbbbbbaaaaaaaaabbabbbaaaaaabbba + aabbabbbabbbaaaaabbbbbbbbbbbbbbbbbabaaabbaabbbaabbbbbbbbaabbbbbbbbaaaaaaaabbabbbaaaaaabbba + abbbbbbbabbbaaabbbbbbbbbbbbbbbbbbbabaaabbbaabbbbbbbbbbbbbaabbbbbbbbaaaaaaabbabbbbbbbbbabba + abbbbbbbabbbaaabbbbbbbabbbbbbbbbbbaaaaabbbbaabbbbbbbbbbbbbaabbbbbaaaaaaaabbaabbbbbbbbbabba + abbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbaaaaaabbbbaabbaaaaaaabbaaaaabbaaaaaaabbbbaabbbbbbbbbabba + aaaaaaaaaaaaaaabbbbbaabbbbbbabbbbbaaaaaabbbbaabaaaaaaaaaaaaaaabbaaaaaaabbbaaabbbbbbbbaabba + abbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbaaabbaaaaaaabaaaaaabbbbaaaaabbaaaaaaabbbaaabbbbbbbaaabba + abbbbbbbbbbaaaabbbaaabbaabaaabbbbbaaabaabaaaaaaaaaaaabaaaaabaabaaaaaaaaaaaaaabbbbbbbaaabba + abbbbbbbbbbaaabbbbaabbaaabbabbbbbaaaaaabbbbbbaaaaaaaaaaaabbbbabaaaaaaabbaaaabbbbabbbbabbba + abbbbbbbbbbaaabbbbaabbaabbbbbbbbaaaaaaabbbbbbbbbbbbaabaaaaaaaaaaaaaaabbbaaaabbbbabbbbbbbba + abbbbbbbbbaaaabbbbaabaabbbbbabbbbaaaaaaaabbbbbbbbbbbabbaaaaaaaaaaaabbbbbaaabbbbaabbbbbabba + abaaaaaabbaaabbbbbaaaaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbaaabbbbaaabbbbabba + abbabbbbbbaaabbbbbaaaaabbbbbabbbbaaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbaaaabbbaaaabbbabba + bbbbbbbbbbaaabbbaaaaabbaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaabbbaaaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaabbbaaaabbabbbbbbbbbbaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbba + ababbbbbbaaaabbbaaaabbbbbbbbbbbbaaaaaaabbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbaababbbbbba + bbaabaabbaaaabbbaaaabbbbbabaabbbaaaaaaabbbbbabbbaabbbbbbbbbbbbbaabbbbbbbaaabbbbaababbbbbba + bbbbbbbbbaaaabbaaaaabbbbbabaabbbbaaaaaabbbbbbbbaaaabbbbbbbbbbbbabbbbbbbbaaabbbbaaaabbbbbbb + abbbbabbaaaaabaabbbbbbabbbbbbbbbaaaaaabbbbbbbbbbbaabbbbbbbbbbbbabbbbbbbbaaabbbbaaaabbbbbba + bbbbbabbbaaabaabbbaaaaaaabbbbbbbaaaaaabbbbbbbbbbbbaabbbbbabbbbbabbaabbbbaaabbbbaaaabbbbbba + abbbbabbbaaaaaaabbbbbabbbaabbbbabaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbaabbbbbbbaabbbbbba + aaaaaaaaaaaaabbbbbbbbabbbbbbbaaabaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbabbbbabbbba + abaaaabbaaaaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaabbbbbaabbbabbbba + abbbbbbbbaaaaaaaaaaaaaaaaabbaaaabaaaabbbbbbbbbbbbbbabbbbbbbabbbbbbbbbbbbabbbbbbbabbbbbbbba + bbbbbbbbaaaaabbbbbbbabbbabbbaaaaabaaabbbbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbabbbbbbbbbbbbabbba + abaaaabbaaaaabbbabbbbbbbbbbbbaaaaaaaabbbbbbbaabbbbbbbabbbbbaabbbbbbbbbbbabaaaaaaabbbbaabba + bbbaabbbaaaaabbbaaaaaaababbbbaaaaaaabbbbbaaaaaaaaaabbbbbbbbbabbbbbbbbabbbbaaaaaaaaaaaaabba + abbabbbbaaaaabbbbbbbbbbbabbbbaaaabaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabba + abbaabbbaaaaaabaaaaaaabaabbbbaaabaaabbbbbbbbbbaaaaaaaaabbbbaabbbbbbabbbbbbbbbbbaabbbbaabba + abbbbbbbaaaaabbbbbbbbbbbbbbbbaaabbaabbbbbbbbbbbbbbaaaaaabbbaaaaaaaaaaabbbbaaaaaaabbbaaabba + abbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbaabbbaaabba + bbbabbbaaaaabbbbbbbabbbabbbbbbaaabbbbbbbbabbbbbbbbbbaaaaabbaaaaaaaaaaaabbbbabaaaabbbaaabba + bbbabbbaaaaabbbbbbbabbbabbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaabbbaaaaabbaaabbbbbabbbaabbbaaabbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaabbbbbbbbbbbaaaaaabbbaabbbbaaaabbbbbbbbbbbbbbabbbbaaabba + abbabbbaaaaabbaaaaaaaaaabbbbbbaaaaaabbbbbbbbbbbaaabbbbaaabbbbbaaaabbbabbbbbbbbbabbbbaaabba + bbbabbbaaaaabbbabbbabbbabaabbbbaaaaabbabbbbabbbbbbbbbbaaabbbbbaaaabbaabbbbbbbbbabbbbaaabba + bbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaaabbbbabbbbbaabbbbbbbbbabbbbaaabba + bbbbbbbaaaabbbbbbbaabbbbbbbbbbbbaaaaaaabbbbaabbbbbbbbaaaaabbbbbbbbbbaabbaaaaaaaaabbbaabbbb + bbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbaabaaabbbbaabbbbbbbaaaaaabbbbbbbbbaaabbbbbbbbbabbbbaabbba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaabbbbbbbbaaaabbbbbbbbaaaabbbbbabbbbabbbbaabbba + abbabaaaaaaaaaaaaaaaaaaaaaaabbaabbbbaaaabbbaabbbbbbbbaaaabbbbbbbbaaaabbbbbabbbbabbbbaabbba + bbbbbbaaaaabbbbbbbabbbaaaaaaaaaabbbbaaaabbbabbbbbbbbbaaaabbbbbabbbaaabbbbbbbbbbabbbbaabbba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbaaabbbbaaabbaabbbbbbbbbbbbbbbaaaabba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbaaaabbbbbbabbbbbbbaaabbbbaaabaaaaaaaaaaaaaaabbbaaabbba + bbbbbbaaaaabbbbbbbbbbabbbbbbbbaaabbbaaaabbbbbbbbbbbbbbaaabbbbaaabaaabbbbaaaaaaaaaaaaaabbba + bbbbbaaaaabbbbbbbaabbabbbbbbbbaaabbbbaaabbbbbbabbbbabaaaabbbbaaabaaabbbbbbbbbbbbbbbaaabbba + abbbbaaaaabbaaabbaabbabbbbbbbbaabbbbbaaabbbbbbbbbbaaaaaaabbabaaaaaabbbbbbbbbbbbbbbbaaabbba + abbbbaaaaabbbaabaaaabaaaaaabbbaaabbbbaaaabbbbbabbbbbaaaaaaaabaaaaaabbbbbbaabbbabbbbaaabbba + bbbbbaaaaabbbbbbbbbbbabbbbbbbbaaabbbaaaaabbbbbabbbbbbaaaabbbbbaaaaabbbbbbbabbbabbbbaaabbba + bbbbbaaaaabbbbbbbbbbbabbbabbbbaaabbbabaaabbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbabbbbaaabbbabaaabbbbbaabbbbbbbaabbbbbaaabbbbaabaaabbaabbbbaaabbba + abbbaaaaabbbbbbbaabbbbbbbabbbaaaabbbaaaaaabbbbaaabbbabbabbbbbaaaabbbbbbbbaabbbabbbbaaabbba + abbbaaaaabbbbbbbaabbabbbbabbbaaaabbbaaaaabbbbbbaaabbbbbabbbbbaaabbbbbbbbbbabbbabbbbaaabbbb + bbbbaaaaabbbbbaaaabbabbbbabbbaaaabbbbaaaabbbbbbbbaaaaabaabbbaaaabbabbbbbbaabbaabbbbaaabbba + bbbbaaaaabbbbbbbabbbabbbaabbaaaaabbbaaaabbbbbbbbbbaaaaaaaabbbaabbaaabbbbbbbbbbabbbbaaaabba + bbbbaaaaabbbbbbbabbbabbbabbbbaaabbbabaaabbbbbbbbbbbaaaaabbbbbaabbbaaabbbbbbbbbabbbbaaabbba + bbbaaaaaabbbbbbbabbbbbbbabbbbaaabbbabaaabbbbbbbbbbbaabbbbbbbbaabbbaaaabbbbbbbbabbbbaaaabba + bbbaaaaaabbbbbbbabbbbbbbabbbbaabbbabbaaabbbbbbbbbbbaaaaabbbbbaabbbaaaabbbbbbbbabbbbaaaabba + abaaaaaaababbbbbabbbbbbbbbbbbabbbbabaaaaaaabbbbbbbaaaaaabbbbbbbbbbaaaaabbbbbbbbbbbaaaaaaba + bbbaaaaaabaaaaaaaaaaaabaabbbaabbbaabbbaaaaabbbbbbaaaabbabbbbabbbbbaaaaaabbbbbbbbbbaaaaaaba + bbbaaaaabbbbbbbbbbbaaaaaaaababbbaaababaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaaabbbba + bbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbaaaaaaaaaabbbbbbbbabbbbbbaaaaaaaaaabbbbbbbbbbbbba + bbaaaaaabbaaaaaaaaaaabbbbbbbbbbaaabbabbabaaaaaaaaaabbbbbbbbbbbbabbaaaaaaaaaaaabbbbbbbbbbbb + bbaaaaaabbbbbbbbbbbaaabbbbbbbbaaaabbabaaabbbbbbbbaaaabbbbbbbbbbabbbaaaaaaaaaaaabbbbbbbbbbb + bbaaaaaabbbbbbbabbbbbbbbbbbbaaaaaabbabaaabbbbbbbbaaaaabbbbbbbbabbbbaaaaaaaaaaaaaaabbbbbbbb + bbaaaaabbaaaabbabbbbbbbbbbaaaaaaabbbaaabaaaaaaabbaaaaaaaaabbbbabbbbaaaaabbaaaaaaaaaaabbbbb + bbaaaaaabbaabbbabbbbbbbbaaaaaaaaabbbaabbabbbaabbaaaaaabbabbbbaabbbaaaaabbbaaaaaaaaaaaabbbb + bbaaaaabbbabbbbbbbbbbbaaaaaabbaaabbbaaabbabaaabbaaaaaabbbbbbaabbbbaaaaabbbbbaaaaaaaaaaaaab + bbaaaaabbbbbbbbbbbbbaaaaaaaaabaaabbbaababbabaabbaaabbbbbbbbbaabbbbaaaaabbbbbbaaaaaaaaaaaaa + bbaaaaabbbbbbbbbbbaaaaaaaaaaabaaabbbaabbabbababbaabbbbbbbbbaaabbbbaaaaaabbbbbaaabbaaaaaaaa + baaaaaabbbbbbbbbbaaaaaaaaaaaaabaabbbaababbabaabbaabbabbbbbaaabbbbbaaaaabbbbbbaaaabbaaabaaa + baaaaaabbbbbbbbaaaaaaaaaaaaaaabaabbbaabbaababbbbbaaaaabbbbaabbbbbbaaaaaabbbbbaabbbaaabaaab + baaaaabbbbbbbaaaaaaaaaaaabaaaababbbbaababaabaabbbaaaaabbaaaabbbbbbbaaaaabbbbaaabbbbaaaaaab + baaaaabbbbbbaaaaaaaaaaaaabaaaababbbbaabbabbababbbaaaaabaaaabbbbbbbbaaaabbbbbbbbbbbbbaaabba + baaaaabbbbaaaaaaaaaaaaaaabaaaabaabbbbababaabaabbbaaaaaaaaabbbbbbbbaaaaabbbbbaabbbbbbbbabba + baaabbbbbaaaaaaaaaaaaaabaaaaaabaabbbbbbaabbababbbaaaaaaaabbbbbbbbbaaaaabbbbbaabbbbbbbbbbba + baabbbbbaaaaaaaaaaaaabbbaaaaaabaabbbbbaabaabaabbbaaaaaaaabbbbbbbbbaaaaabbbbbaaabbbbbbbbbba + babbbbaaaaaaaaaaaaaabbbabbaaaabaabbbbbaaabbababbbaaaaaaabbbbbbbbbbaaaaabbbbbaabbbbbbbbbbba`, + map `ababbaaabaabbaaaaabbbabbbabbbbbbbbbbababbbbbbbabbaaabbbbbababbbaaabbbbaaabbbbbbbbbbbbbabba + ababbbbbbbbbbbaaaaabbaabaaaaaabbbbbbaaabbbbbbbbbbaaabbbbbababbbaaabbbbaaaaabbbbbbabbbbabba + ababbbbbbbbbbaaaaaabbabbbabbbbbbbbbaaaabbbbbaaabbaaabbbbbababbbbaaaaabaaaaabbbbbaaabbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbaaaaaabbbbaaaaaaaaaabbbbabaabbbaaaaaaaabaaabbbbbabbbbaaba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbaaaaaabbbbaaaaaaaaaabbbbaaaaabbaaaaaaaabaaabbbbbbbbbbabba + ababbaaaaabbbaaaabbbbaaaaabbbbbbaaaaaaabbbbaaaaaaaaaaabbbaaaabbbaaaaaabbbbaabbbbbbbbbbabba + ababbaaaaabbbaabbbaaaaaaaaaaabbbaaaaaabbaabaaaaaaaaaaabbbaaaabbbaaaaabbbbbaaabbaaaaaaaabba + aabbbabbbabbaaabbbbaaaaaaaaabbbbaaaaaaabaabbaaaaaaaabbabbbbbbbbabbabbbbbbbaaabbaaaaabaabba + aabbbabbbabbbaabbbbaaaabbbbbbbbbaaaaaabbaaabbbbaaabbbbbbbbbbbbbaababbbbbbaaaabbbaaaabbbbba + aabbbbbbbbbbaaabbbaaaabbbbbbbbbbbaaaaabbaaabbbbbbbbabbbbbabbabbaabbabbbbaabbabbbaababbabba + aabbbbbbabbbaaabbbaaabbbbbbbbbbbbaaaaabbaaabbbbbbbbbbbbbabbbbbbbbabaabaaaabbabbbaabaaabbba + aabbaaaaabbbaaabbbaaaabbbbbbbbbbbaabaabbbbabbbbbbbbbbbbaabbbbbbbbaaaaaaaaabbabbbaaaaaabbba + aabbabbbabbbaaaaaabbbbbbbbbbbbbbbbabaaabbaaaabaabbbbbbbbaabbbbbbbbaaaaaaaabbabbbaaaaaabbba + aabbbbbbabbbaaaabbbbbbbbbbbbbbbbbbabaaabbbaaabbbbbbbbbbbbaabbbbbbbbaaaaaaabbabbbbbbbbbabba + abbbbbbbabbbaaabbbbbbbbbbbbbbbbbbbaaaaabbbbaabbbbbbbbbbbbbaabbbbbaaaaaaabbbaabbbbbbbbbabba + abbbbbbbbbbaaaabbbbaaaabbbbbbbbbbbaaaaaabbbbaabbaaaaaaabbaaaaabaaaaaaaaabbbaabbbbbbbbbabba + aaaaaaaaaaaaaaabbbbbaabbbbbbabbbbbaaaaabbbbbaabbaaaaaaaaaaaaaabbaaaaaaaabbbaabbbbbbbbaabba + abbabbbabbbaaaabbbbbaabbbbbbbbbbbbaaabbabaaaaabaaaaaabbbbaaaaabbaaaaaaaabbaaabbbbbbbbaabba + abbbbbbbbbbaaaabbbaaabaaabaabbbbbbaaaaaabaaaaaaaaaaaabaaaaabaabaaaaaaaaaaaaaabbbbbbbaaabba + abbbbbbbbbbaaaabbbaaabaaabbabbbbbaaaaaaabbbbbaaaaaaaaaaaabbbaabaaaaaabbbaaaaabbbabbbbbbbba + abbbbbbbbbbaaaabbbaaabaabbbbbbbbaaaaaaaabbbbbbbbbbbaabaaaaaaaaaaaaaaabbbaaaabbbbabbbbaabba + abbabbbbbbaaabbabbaabaabbbbbabbbbaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaaabbbaabbbbbabba + abaaaaabbbaaabbbbbaaaaabbbbbabbbbaaaaaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbaaabbbbaaabbbbbbba + abbabbbbbbaaabbbbbaaaaabbbbbabbbbaaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbaaaabbbaaaabbbbbba + bbbabbbbbbaaabbbaaaaabbaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaabbbaaaabaabbba + abbbbbbbbbaaabbbaaaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaabbbaaaababbbba + abbbbbbbbbaaaabbaaaabbabbbbbbbbbbaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbba + ababbabbbbaaabbbaaaabbbbbbbbbbbbaaaaaaabbbbbabbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbaabababbbbb + bbaabaabbaaaabbbaaaabbabbabbabbbaaaaaaabbbbbabbbaaabbbbbbbbbbbbaabbbbbbbaaabbbbaabababbbba + bbbbbbbbbaaaabbaaaaabbabbbbbabbbbaaaaaabbbbbabbbaaabbbbbbbbbbbbabbbbbbbbaaabbbbaaaabbbbbba + abbbbbbbbaaaaaabbbbbbbabbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbbbbbaabababbbaaabbbbaaaabbbbbba + bbbbbabbbaaaaaaabbaaaaaaabbbbbbbaaaaaabbbbbbbbbbbaaabbbbbbbbbbbabbaabbbbaaabbbbaaaabbbbbba + abbbbabbbaaaaaabbbbbbabbbaabbbbabaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbaabbbbbbbaabbbbbba + aaaaaaaaaaaaaabbbbbbbabbbbbbbaaabaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbabbbbabbbba + abaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaabbbbbaabbbabbbba + bbbbbbbbaaaaaaaaaaaaaaaaaabbaaaabaaaabbbbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbabbbbbbbabbbbbbbba + bbbbbbbbaaaaabbbbbbbabbbabbbaaaaaaaaabbbbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbabbbbbbbbbbbbabbba + abbaaabbaaababbbabbbbbbbbbbbbaaaaaaaabbbbbbbaabbbbbbbabbbbbaabbbbbbbbbbbabaaaaaaabbbbaabba + abbaabbbaaaaabbbaaaaaaababbbbaaaaaaabbbbbaaaaaaaaaabbbbbbbbbabbbbbbbbabbbbaaaaaaaaaaaaabba + abbbbbbbaaaaabbbbbbbbbbbabbbbaaaabaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabba + abbaabbbaaaaaabaaaaaaaaaabbbbaaaabaabbbbbbabbbaaaaaaaaabbbbaabbbbbbabbbbbbbbbbbaabbbbaabba + abbaabbbaaaabbbbbbbbbbbbabbbbaaabbaabbbbbbbbbbbbbbaaaaaabbbaaaaaaaaaabbbbbaaaaaaabbbbaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbaabbbaaabba + bbbabbbaaaaabbbbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaabbaaaaaaaaaaaabbbbabaaaabbbaaabba + bbbabbbaaaaabbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaabbbaaaaabbaaabbbbbabbbaabbbaaabbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaabbbbbbbbbbbaaaaaabbbaabbbbaaaabbbbabbbbbbbbbabbbbaaabba + abbabbbaaaaabbaaaaaaaaaabbbbbbaaaaaabbbbbbbbbbbaaabbbbaaabbbbbaaaabbbabbbbbbbbbabbbbaaabba + bbbabbbaaaaabbbabbbabbbabaabbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbaaaabbaabbbbbbbbbabbbbaaabba + bbbbbbbaaaabbbbbbbabbbbbbbbbbbbbaaaaaabbbbbaabbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbabbbbaaabba + bbbbbbbaaaabbbbbbbaabbbbbbabbbbbaaaaaaabbbbaabbbbbbbaaaaaabbbbbbbbbbaabbaaaaaaaaabbaaabbbb + bbbbbbbaaaabbbbbbbbabbbbbbabbbbbbaabaaabbbbaabbbbbbbaaaaaabbbbbbbbbaaabbbbbbbbbabbbbaabbba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaabbbbbbbabaaabbbbbbbbaaaabbbbbabbbbabbbbaabbba + abbabbaaaaaaaaaaaaaaaaaaaaaabbaabbbbaaaabbbaabbbbbbbabaaabbbbbbbbaaaabbbbbabbbbabbbbaabbba + bbbbbbaaaaabbbbbbbabbbaaaaaaaaaabbbbaaaabbbaabbbbbbbabaaabbbbbabbbaaabbbbbbbbbbabbbbaabbba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbaaabbbbaabbaaabbbbbbbbbbbbbbbbaaabba + bbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaabbbaaaabbbbbbabbbbbbbaaabbbbaaabbaaaaaaaaaaaaaabbbaaabbba + bbbbbbaaaaabbbbbbbabbabbbbbbbbaaabbbbaaabbbbbbbbbbbbbbaaabbbbaaabaaabbbbaaaaaaaaaaaaaabbba + bbbbbaaaaabbbbbbbaabbabbbbbbbbaaabbbbaaabbbbbbabbbbabaaaabbbbaaabaaabbbbbbbbbbbbbbbaaabbba + abbbbaaaaabbaaabbaabbabbbbbbbbaaabbbbaaaabbbbbbbbbaaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbaaabbba + abbbbaaaaabbbaabaaabbaaaaaabbbaaabbbbaaaabbbbbabbbbbaaaaaaaabaaaaaabbbbbbaabbbabbbbaaabbba + bbbbbaaaaabbbbbbbbbbbabbbbbbbbaaabbbaaaaabbbbbabbbbbbaaaabbbbbaaaaabbbbbbbabbbabbbbaaabbba + bbbbbaaaaabbbbbbbbbbbabbbabbbbaaabbbabaaabbbbbabbbbbbbbaabbbbbaaaabbbbbbbbbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbbbbbbbbbabbbbaaabbbabaaabbbbbbabbbbbbbaabbbbbaaabbbaabbaaabbbabbbbaaabbba + abbbbaaaabbbbbbbaabbbbbbbabbbaaaabbbaaaaaabbbbaaabbbabbabbbbbaaaabbbbbbbbaabbbabbbbaaabbba + abbbaaaaabbbbbbbaabbaabbbabbbaaaabbbaaaaabbbbbaaaaabbbbaabbbbaaabbbbbbbbbbabbbabbbbaaabbbb + bbbbaaaaabbbbbaaaabbabbbbabbbaaaabbbbaaaabbbbbbbaaaaaabaabbbaaaabbabbbbbbaabbbabbbbaaabbba + bbbbaaaaabbbbbbbabbbabbbaabbbaaaabbbaaaabbbbbbbbbbbaaaaaaabbbaabbaaabbbbbbbbbbabbbbaaaabba + bbbbaaaaabbbbbbbabbbabbbabbbbaaabbbabaaabbbbbbbbbbbaaaaabbbbbaabbbaaabbbbbbbbbabbbbaaabbba + bbbaaaaaabbbbbbbabbbbbbbabbbbaabbbbabaaabbbbbbbbbbbaabbbbbbbbbabbbaaaabbbbbbbbabbbbaaaabba + bbbaaaaaabbbbbbbabbbbbbbbbbbbaabbbabbaaabbbbbbbbbbbaaaaabbbbbbabbbaaaaabbbbbbbabbbbaaaabba + abaaaaaaababbbbbabbbbbbbbbbbbabbbbabaaaaaaabbbbbbbaaaaaabbbbabbbbbaaaaabbbbbbbbbbbaaaaaaba + bbbaaaaaabaaaaaaaaaaaabaabbbaabbbaabbbaaaaabbbbbbaaaabbabbbbabbbbbaaaaaabbbbbbbbbbaaaaaaba + bbbaaaaabbbbbbbbbbbaaaaaaaababbbaaababaaaaaaaaaaaaabbbbbbbbabbbbbbaaaaaaaabbbbbbbbbaabbbba + bbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbba + bbaaaaaabbbaaaaaaaaaabbbbbbbbbbaaabbabbabaaaaaaaaaabbbbbbbabbbbabbbaaaaaaaaaaabbbbbbbbbbbb + bbaaaaaabbbbbbbbbbbaaabbbbbbbbaaaabbabaaabbbbbbbbaaaabbbbbbbbbbabbbaaaaaaaaaaaabbbbbbbbbbb + bbaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbabaaabbbbbbbbaaaaabbbbbbbbabbbbaaaaaaaaaaaaaaabbbbbbbb + bbaaaaabbaaaabbabbbbbbbbbbaaaaaaabbbaaabaaaaaaaabaaaaaabaabbbbabbbbaaaaabbaaaaaaaaaaabbbbb + bbaaaaaabbbaabbabbbbbbbaaaaaaaaaabbbaabaabbbaabbaaaaaaabaabbaaabbbaaaaabbbaaaaaaaaaaaabbbb + bbaaaaabbbbbbbbbbbbbbbaaaaaaabaaabbbaaabbbbaaabbaaaaaabbbbbbaabbbbaaaaabbbbbaaaaaaaaaaaaab + bbaaaaabbbabbbbbbbbbaaaaaaabbbaaabbbaababbabaabbaaaabbbbbbbbaabbbbaaaaabbbbbaaaaaaaaaaaaaa + bbaaaaabbbbbbbbbbbaaaaaaaaaaaaaaabbbaabbabbababbaabbbbbbbbbaaabbbbaaaaaabbbbbaabbaaaaaaaaa + baaaaaabbbbbbbbbbaaaaaaaaaaaaabaabbbaababbbbaabbaabbabbbbbaaabbbbbaaaaaabbbbbbabbbbaaabaaa + baaaaaabbbbbbbbaaaaaaaaaaaaaaabaabbbaabbaababbbbbaaaaabbbbaabbbbbbaaaaaabbbbbaabbbbaaaaaaa + baaaaabbbbbbbaaaaaaaaaaaabaaaababbbbaababaabaabbbaaaaabbbaaabbbbbbbaaaabbbbbbbaabbbbaaaaab + baaaaabbbbbbaaaaaaaaaaaaabaaaababbbbaabbabbababbbaaaaabaaaabbbbbbbbaaaabbbbbbabbbbbbbbaaba + baaaaabbbbaaaaaaaaaaaaaabbaaaabaabbbbababaabaabbbaaaaaaaaabbbbbbbbaaaaabbbbbaabbbbbbbbabba + baabbbbbbaaaaaaaaaaaaaabaaaaaabaabbbbbbaabbababbbaaaaaaaaabbbbbbbbaaaaabbbbbaabbbbbbbbbbbb + babbbbbbaaaaaaaaaaaaabbbaaaaaabaabbbbbaabaabaabbbaaaaaaaabbbbbbbbbaaaaabbbbbaabbbbbbbbbbbb + babbbbaaaaaaaaaaaaaabbbbbaaaaabaabbbbbaaabaababbbaaaaaaabbbbbbbbbbaaaaabbbbbaabbbbbbbbbbba`, + map `ababbaaabaabbaaaaabbbabbbabbbbbbbbbbbbbbbbbbbabbaaaaabbbbbbbaaabbbbabbbbbbbbbbbbbbbbbbabba + ababbbbbbbbbbbaaaaabbaabaaabaaaaabbbbabbbababbbbaaaaabbbbbbbaaaaaaabbbbabbbbbbbbbabbbbabba + ababbbbbbbbbbaaaaaabbabbbabbbbbbbbbbbbbbbaaabbbbaaaaabbbbaabaaaaaaabbbbaabbbbbaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaabbbbaabaaabaaaaabbaaaabbbbbbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaababbbaaabaaabbbbaabaabbaaaabbbaaaaabbbbbbbbbbabba + ababbaaaaabbbaaaaabbbbbaaabaaaaabbbaabaaabbbbaaaaaaaabbbbaabaabbbaaaaabaaaaabbbbbbbbbbabba + ababbabbbabbbaabbbaaaaaaaaaaaabbbbbaaaaabbbbaaaaaaaaaabbbbaaaaabbaaaaaaaabaabbbaaaaaababba + aabbbbbbbabbaaabbbbaabaaaaaaabbbbbbaaaaabbbbaaaaabbbaaabbbaaaaabbaaaaaaaabbabbbaaaaabbabba + aabbbabbbabbbaabbbbbbbbaaaabbbbbbaaaaaaabbbbaaaabbbbaaaabbbaaaabbbbaaaaabbbabbbaaaaabbbbba + aabbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaaaabbabbaaabbaabbbabbbaaabbbbbabbabbbbaabbbaaaaabbbba + aabbabbbabbbaaabbbaabbbbbbbbbbbbaaaaaaabbaabbabbbaaabbbbbbbbbbbbbabaabbbbbaaabbbaaaaaabbba + aabbaaaaabbbaaaabaaaababbbbbbbbbaaaaaaabbaaabbbbaaaabbbbbbbababbbaabaabbbbaaabbaaaaaaabbba + aabbabbbabbaaaaaabbbbbbbbbbbbbbbbaaaaaaabaaabbbbaaaabbbbbaabbbbbbaabbabbaaaaabbbabaaabbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbaaaaaaabaaabbbbbbbabbbbbabbbbbbbbaabaaaaaaaabbbbbbbbbbbba + abbbbbbbabbbaaabbbbbbbbbbbbbbbbbbaabaaaabbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaaaaabbbbbbbbbbbba + abbbbbbbbbbaaaabbbbaaabbbbbabbbbbbaaaaaabbbaaabbbbbbbbbbbbaabbbbbbbbaaaaaaaaabbbbbbbbbabba + aabaaaaaaaaaaaabbbbbaabbbbbbabbbbbaaaabbbbbaaabbbbbbbbbbbbbaabbbbbbbaaaaaaabbbbbbbbbbaabba + abbabbbbbbbaaaabbbbbaabbbbbbabbbbbaaaaabbbbbbabbbbbbbbbbabbaaabbbbaaaaaaaaaaabbbbbbbaaabba + abbbbbbbbbbaaaabbbaaabaaabbbbbbbbbaaaaabbbbbbaabaabaaaaaaaaaaaaabbaaaaaaaabaabbbbbbbaaabba + abbbbbbbbbbaaaabbbaaabaaabbaabbbbbaaaabbbbbbbaaabbbaaaaaaaaaaaaabbaaaaaaabbaabbbbbbbbaabba + abbbbbbbbbbaaaabbbaaaaaaabbbabbbbbaaaaaabbbbbaaaaaaaaaaababaaaaabbaaaaaaabaaabbbbbbbbbabba + abbbbbbbbbaaabaabbaaaaabbbbbbbbbbbaaaaaaaabaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabbbbabbbbbabba + abaaaaabbbaaabbbbbaaaaabbbbbabbbbbaaaaaaabbbbbaaaaaaaaaaaaabbbbaaaaaaaabaaaabbbaaabbbbbbba + abbbabbbbbaaabbbbbaaaaabbbbbbbbbbaaaaaaaabbbbbbbbbaabaaabaaaaaaaaaaaaabbbaaabbbaaaabbbbbba + abbbbbbbbbaaabbbabaaabbaabbbbbbbbaaaaabaabbbbbbbbabbbaaaaaaaaaaaaaaababbbaaabbbaaaabbbbbba + bbbbbbbbbbaaabbbabaaabbbbbbbbbabbbaaaaaaabbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbaaabbbaabbbbbbbba + abbbbbbbbbaaabbbaaaabbabbbbbbbbabbaaaabaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaaabbbaaabbbbbbba + abbbbbbbbaaaabbbaaaabbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbaabbbbbbbba + bbbbbabbbaaaabbbaaaabbbbbabaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbaaabbbaabbbbbbbba + abbbbbbbbaaabbaaaaaabbbbbbbbbbbbaaaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbbaaabbbbbbba + abbbbabbbaaabaaabbbbbbbbbbbbbbabaaaaaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbba + bbbbbabbbaabbaaabbaabaaaabbbbbabaaaaabaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbba + abbbbabbbaabaaabbbbbbabbbabbbbabaaaaaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbaabbbbbabbbbbbbba + aaaaaaaaaaababbbbbbbaabbbbbbbbabaaaaaaaabbbbbbbbbbaaaabbbbbbabbbbbabbbbbbaabbbbabbbababbba + abbaaabbaaaaabbbbbbbbbbbbbbbbbaabaaaaaabbbbbbbbbbbaaaabbbbbbbabbbbbbbbbbbaabbbbaabbaaabbba + abbbbbbbbaaaaaaaaaaaaaaaaaabbbaaaaaaaaabbbbbbbbbbbbaaabbbbbbabbbbbbbabbbbabbbbbbabbbbabbba + bbbbbbbbaaaaabbbbbbbabbbabbbbaaabaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbabbba + abaaaabbaaaaabbbabbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbaaaaaaaabbbbabbba + abbaaabbaaaaabbbaaaaaaababbbaaaabbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbababbbbaaaaaaaaaaabbba + abbabbbbaaaaabbbbbbbbbbbabbbaaaaabaaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbabbbbbbbbbbbbbaabbba + abbaabbbaaaaabbaaaaaaabaabbbaaaaaaaaaabbbbbbbbbbbbbbbbabbbbbbbabbbbbbbabbbbbbbbababbbabbba + abbaabbbaaaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbaaaaaaabbbaabbba + abbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbaabbbbbbaaaaaaaaaaababbbbbaabbbbbbbbbbbbbbbbaabbbaabbba + bbbabbbaaaaabbbbbbbbbbbbbbbbbaaabbbaabbbbbbaaaaaaaaaaaaabbbbbbbbbbbaabbbbbbabaaaabbbaabbba + bbbabbbaaaaabbbbbbbbbbbabbbbbaaabbbaabbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaaaabbbbbbbabbbbaabbba + abbabbbaaaaabbbbbbbabbaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbabbbbaabbba + abbabbbaaaaabbaaaaaaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaabbaaaaaabaaabbbbbbbbabbbbaabbba + bbbabbbaaaaabbbabbbabbaababbbbaaaabbbbbbbbbbabbaabaaaabaaaabbaaaaabbbaabbbbbbbbabbbbaabbba + bbbbbbbaaaabbbbbbbabbbbbbbbbbbaaaaaabbbbbbbbbbbbaaaaaabbaabbbbaaaabbbbbbbbbbbbbabbbbaaabba + bbbbbbbaaaabbbbbbbaabbbbbbbbbbbaaaaabbbbbbabbbbbbaaaabbbaaabbbbaaaabbbbbbaaaaaaaabbaaaabba + bbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbababbbbbbbbbbbaaabbbbaaaabbabbbbbbbbbabbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbbaaaaabbbbbbbabaabbbbbbbbbabbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaabbaaaabbbbbbbbaaaaabbbbbbbbbaabbbbbbbbbabbbbaabbba + bbbbbbaaaaabbbbbbbabbbaaaaaaababbbbbaaaabbaaaaabbbbbbbaaaaabbbbbbbabaabbbbbbbbbabbbbaabbba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbaaabbbbaaaaaaaabbbbbabaaaabbbbbbbbbbbbbaaaabba + bbbbbbaaaabbbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbaaabbbbaaaaaaaabbbbbbbaaaaaaaaaaaaaabbbaaabbba + bbbbbbaaaaabbbbbbabbbabbbbbbbbaabbbbaaaabbbbaaabbbbaaaaaaaabbbbaabaaaabbaaaaaaaaaaaaaabbba + bbbbbaaaaabbbbbbbaabbabbbabbbbaabbbbbaaabbbbbbabbbbaaaabaaabbbbabbaaabbbbbbbbbbbbbbaaabbba + bbbbbaaaaabbaaabbaabbabbbbbbbbaabbbbbaaabbbbbbbbbbbaaabbaaabbbaaaaaaabbbbbbbbbbbbbbaaabbba + bbbbbaaaaabbbaabaaabbaaaaaaabbaabbbbbaaabbbbbbbbbbbbaabbaaabbbaaabaabbbbbaabbbabbbbaaaabba + bbbbbaaaaabbbbbbbbbbbbbbbabbbaaabbbaaaaaabbbbbbbbbbbbaaaaabbbbaaaaaabbbbbbabbbabbbbaaabbba + bbbbbaaaaabbbbbbbbbbbabbbabbbaaabbbaabaaabbbbbbbabbbbaaaaaabbbaaaaaabbbbbbbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbbbbbbbbbabbbaaaabbaabaaabbbbbbbbbbbbbaaaaababbaaaabbaabaaabbbabbbbaaabbba + abbbbaaaabbbbbbbaabbabbbbabbbaaaabbbabaaaabbbbbbabbbbbbaaabbbbbaaaabbbbbbaabbbabbbbaaabbba + abbbaaaaabbbbbbbaabbabbbbabbbaaaabbbaaaabbbbbbbbbbbbbbbbaabbbbbaaabbbbbbbaabbbabbbbaaabbbb + bbbbaaaaabbbbbaaaabbabbbbabbbaaaabbbaaaabbbbbbbbabbbbbbbbabbbbbaaabbbbbbbaabbbabbbbaaabbba + bbbbaaaaabbbbbbbabbbabbbaabbaaaaabbbaaaabbbbbbbbaaabbbbbbabbbbaaabbbbbbbbabbbaabbbbaaaabba + bbbbaaaaabbbbbbbabbbabbbabbbbaaaabbbaaaabbbbbbbbaaaabbbbbabbbbaaabbbbbbbbabbbaabbbbaaaabba + bbbaaaaaabbbbbbbabbbabbbabbbbaaabbbbaaaabbbbbbbbbbaaaaabbaabbaaaababbbbbbbbbbaabbbbaaaaaba + bbbaaaaaabbbbbbbabbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbaaaaaaabbbaabaaabbbbbaabbaabbbaaaaabba + abaaaaaaabbbbbbbabbbbbbbbbbbbaabbbabaaaaaaabbbbbbbbbbaaaabbbbbaabaaaabbbbbbbbaabbbaaaaaaba + bbbaaaaaabaaaaaaaaaaaabaabbbaabbbbabbaaaaaaabbbbbbbbaaabbbbbbbabbbaaaabbbbbbbaabbbaaaaabba + bbbaaaaabbbbbbbbbbbaaaaaaaaaaabbbaabaaaaaaaaaaaaaabaaaaaabbbbabbbbaaaabbbbbbbbabbbaaaaabba + bbaaaaaabbbbbbbbbbbbbbbbbbbbabbbbabbaabbbbbaaaaaaaaaaaaaabbbbbbbbbaaaaabbbbbbbbbbbaaaabbba + bbaaaaaabbbaaaaaaaaaabbbbbbbabbbaabbabbabbbaaaaaaaaaabbbbbbbabbbbbaaaaaaabbbbbbbbbaaaaabba + bbaaaaaabbbbbbbbbbbaaaaaabbbbbbaaabbabaaabbbbbbbbaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaabbabba + bbaaaaabbbbbbbbabbbabbbbbbbbbbaaaabbabaaabbbbbbbbaabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbabbbbbba + bbaaaaabbbaaabaabbbabbbbbbbbbaaaabbbabbbaaaaaaaabaaaabbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbba + bbaaaaaabbaaabaaabbbbbbbbbbaaaaaabbbabbabbabaabbbaaaaabbbbbbbbabbbaaaaaaaaaaaaaabbbbbbbbbb + bbaaaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbabababbaaabbbaaaaaabbbbbbaabbbaaaaaaaaaaaaaaabbbbbbbbb + bbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaabbbabaabaabaabbbaaaaaaaaabbbabbbbaaaaabbaaaaaaaaaaaabbbbb + bbaaaaabbbabbbbbbbbbbaaaaaaaabaaabbbabababbababbbaaaaaabbbbbaabbbbaaaaabbbaaaaaaaaaaaabbbb + baaaaaabbbabbbbbbbbaaaaaaaaaaaaabbbbabbababbaabbbaaaaabbbbbaabbbbbaaaaabbbbbaaaaaaaaaaaabb + baaaaaabbbbbbbbbbbaaaaaaaaaaaaaabbbaabbbabaababbbabbbbbbbbbaabbbbbaaaaabbbbbbaaaaaaaaaaaaa + baaaaaabbbbbbbbbaaaaaaaaaaaaabaabbbaabbabaabaabbbabaabbbbbaaabbbbbaaaaabbbbbbbabbaaaaaaaaa + baaaaaabbbbbbbaaaaaaaaaaaaaaabaabbbbabababaababbbaaaabbbbaaabbbbbbaaaaabbbbbbbbabbaaaaaaaa + baaaaabbbbbbaaaaaaaaaaaabbaaaababbbbabaabaabaabbbaaaaabbaaabbbbbbbaaaabbbbbbabaabbbbaabaaa + baaaaabbbbbaaaaaaaaaaaaabaaaabbabbbbabaaabaababbbaaaabbaaaabbbbbbbaaaabbbbbbbababbbbbbbbab + baababbbbaaaaaaaaaaaaaaabaaaabbabbbbabaababbaabbbaaaaaaaaabbbbbbbbaaaabbbbbbbabbbbbbbbbbaa + baababbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbaaababaabbbaaaaaaaabbbbbbbbbaaaabbbbbbaaabbbbbbbbbaa`, + map `ababaaabbaabbaaaaabbbbbbbabbbbbbbbbbaabbbbaaabbbbbbbbbbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbabba + ababbbbbbbbbbaaaaaabbaabaaabbaabbbbbbbbababbbbbbbaaaaabbbabaabbbbbbabbbbbbbbbbbbbabbbbabba + ababbbbbbbbbbaaaaabbbabbbabbbbbbbbbbbbbaabbbabbaaaaaaabbbaaaaaaaabbabbbbbbbbbaaaaabbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbbaabaaaaaaaabbbaaaaaaaabbbaababbbbbbbbaabbbbaaba + ababbbbbbabbbaaaaabbbbbbbbbbbbbbbbbbaaabbbaaaaabbbaaabbbbbaaaaaaaaaaaabbabbbbbbbbbbbbbabba + ababbaaaaabbbaaaaabbbbaaaabbaaaaaaabbbbbbaaaaabbbbaaaaabbbbbaaaaaaaabbbbaaabbbbbbbbbbbabba + aabbbabbaabbbaaabaaaaaaaaaaaaaaabbbbbbaaaaababbbbbaaaaaabbbbaaaaaaaaabbbbaaabbbaaaaaaaabba + aabbbabbbabbbaabbbaaaaaaaaaaaabbbbbbbabaaaababbbbaaaaaaabbbbaaaaaaaaababbaaabbbaaaaababbba + aabbbabbbabbbaabbbaabbbabbbbbbbbbbbbbaaaaabbbbbaaaaabaaaabbbaaaaaaaaaaaabaaabbbaaaaababbba + aabbbbbbabbbbaabbbbbbbbbbaabbbbbbbbbaaaaaabbbbbaaaabbbaaaabbaaaabbbaaaaaaaababbaaabaabbbba + aabbabbbabbbaaaaabaabbbbbaabbbbbbbbbaaaaaabbabaaaaabbbaaaabbbaaabbbaaaaaaaababbaaabaabbbba + aabbaaaaabbbaaaaaaaabbbbbbbbbbbbbbbaaaaaaabbabaaabbbaaabbabbbaabbbbbaaaaabbbbbbbaaaaabbbba + aabbabbbabbbaaaabbbbbbbbbbbbbbbbaaaaaaaaabbaabaaabbbaaabbbbbbaabbbbababbabbbabbbaaaaaabbba + aabbabbbabbbaaaabbbbbbbbbbbbbbbbaaaaaaaaabbaabaaabbaaaabbbbbbbbbbbbabaabbbbbabbbbbbbbbbbba + abbbbbbbbbbbaaabbbbbaabbbbbbbbbbaaaaaaaaabbaababaaaaaaabbbbaabbaabbbababbbbaabbbbbbbbbabba + abbbbbbabbbaaaabbbbaaabbbbbabbbbbaaaaaaabbbaaabbbbbbaaabbbbabbbaabbbabbabbaaabbbbbbbbbabba + aaaaaaaaaaaaaaabbbbbabbbbbbbabbbbaaaabbbbbbbbbbbbbbbbbbbbbbabbbbabbbaabaaaaaabbbbbbbbaabba + abbabbbbbbbaaaabbbbbabbbbbbbabbbbbaaaaabbbbbbaabbbaabbbbbbbaabbbbbbbbaaaaaaaabbbbbbbaaabba + abbbbbbbbbbaaabbbbaaaaaaaaaaabbbbbaaaaabbbbaaaabbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbbbbaaabba + abbbbbbbbbbaabbbbbaaaaaaabaaabbbbbaaaabbbbbaaabbbbbbbbbbbbbbbaabbbbbbbaaaaaaabbbbbbbbaabba + abbbbbbbbbbaabbbbbaaaaaabbbbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbaabaaaaaabbbbbbbbbabba + abbbbbbbbbbaaaabbbaaaaabbbbbbbbbaabaaaabbbbbbbaaabbbbaabbbaaabaaabbbaaaaaaaaabbbabbbbbabba + abaaabaabbaaabbbbbaaaaabbbbbabbbaabaaaabbbbbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaaabbbaabbbbbbba + abbbbbbbbbaaabbbbbaaaabbbbbbbbbbaabaaabbbbbbbbbbbbbbbbaaaaabbbaaaaabaaaaaaaaabbbaaabbbbbba + abbbbbbbbbaaabbbabaaabbbbbbbbbbbbbaaaabbabbbbaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabbbaaaabbbbbba + abbbbbbbbbaaabbaaaaaabbbbbbbbbbbbbaaaabbaaaabbbaaaaaaaaaaaaaaabbbaaaaaaabaaabbbaabbbbbbbba + abbbbbbbbbaaaabbaaaabbabbbbbbbbbbbaaaabbaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaabaaabbbaaabbbbbbba + abbbbbbbbbaaabbbaaaabbbbbbbbbaabbaaaaaabbaaabbbbbbbbbbbbaabbaaaaaaaaaababbaabbbaaabbbbbbba + bbbbbabbbaaaabbbaaaabbbbbabbbaaabbaaaabbbaabbbbbbbbabbbababaaaaaaaabbbbbbbaabbbaabbbbbbbba + abbbbbbbbaaaabaaaaaabbbbbabbbaaabbaaaabbbaaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbaabbbaaabbbbbbba + abbbbabbbaabbaaabbbbbbbbbbbbbaaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaabbbaaabbbbbbba + bbbbbabbbaabbaaabbaabaaaabbbbbabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaabbbaaaabbbbbba + abbbbabbbaabaaabbbbbbabbbabbbaabbaaaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaabbbbabbbbbbbba + aaaaaaaaaaaaaabbbbbbabbbbbbbbaabaaaaaaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaabbbabbbabbbbba + abbaaabbaaaaaabbbbbbbbbbbbbbbaabaaabaaaaaabbbbbbbbbaaabbbbbbbbbbbbbabbbbbbabbbbaabbaaabbba + abbbbbbbbaaaaaaaaaaaaaaaaaabbaabaaabbaaaaabbbbbbbbbaaabbbbbbbbbbbbbabbbbbbabbbbbabbbbabbba + bbbbbbbbbaaaabbbbbbbabbbabbbbbabaaabbabaabbbbbbbbbbaaaabbbbbbbbbbbbbbaabbbabbbbbbbbbbabbba + abaaaaabaaaaabbbabbbbbbbbbbbbbaaaaabbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbaaabbbbabbba + abaaaabbaaaaabbbaaaaaaababbbbbaabaaabaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabaaaaaaaaaaabbba + abbabbbbaaaaabbbbbbbabbbabbbbaaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbabbba + abbaabbbaaaaabbbaaaaaabaabbbaaaaabaaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbaabbbbabbba + abbaabbbaaaabbbbbbbbbbbbbbbbaaaaabaaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbaaaaaabbbaabbba + abbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbaaaaabbbbbbbbbbbbbbbaabbbbbbbabbbbbaaabbbbbbbaabbbaabbbb + abbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabaaaaabbbbbbbbbbbbbbbbabbbbbbbabbbbbbaabbbbbbbaabbbaabbbb + bbbabbbaaaaabbbbbbbbbbbabbbbbaaaabaaaaabbbbbbaaaabbbbbbbbbbbbbbabbbbbbbabbbbbbbaabbbaabbbb + abaabbbaaaaabbbbbbbabbbabbbbbaaaaabaaabbbbbbbaaaaaaaaabbbbbbbbbabbbbbbbabbbbbbbbbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaabbbbbaaabbbbaabbbbbbbaaaaaaaaaaaaabbbbbabbbbbaaabbbbbbbbbbbbaabbbb + abaabbbaaaaabbbaabaabbaababbbaaabbbbaabbbbbbbbbbbbbbaaaaaabbbbbaaaaaaaaabbbbbbbabbbbaaabba + bbbbbbbaaaabbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbabbbbaabbba + bbbbbbbaaaabbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbabbbbbbbbbbbaaaaabbaaaaaaaaabbaaaaaaabbbaabbbb + bbbbbbbaaaabbbbbbbabbbbbbbbbbbaaaabbbbbbbbbbaabbaabbaaaabaaaabbaaaabbaaabbbbbbbbabbaaabbba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaabbbaaaaaaabbaabbbbaaaabbbbbbbbbbbbbbbbaaabba + abaabaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbaabbbbbbaaaaabbbaabbbbbaaaabbbbbbbbbabbbbbaabbbb + bbbbbbaaaaabbbbbbbbbbbaaaaaabbbaaaaaabbbbbaababbbbbbabbbbaaaabbbbaaaaaabbbbbbbbbbbbbaabbba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaabbbbbbbbabaaaaabbbbbbaaaabbbbbbbbbbbbbaabbba + bbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbaaaabbbbbbbaaaaaaabbbbbbbbaabbaaaaaaabbbaaabbbb + bbbbbbaaaaabbbbbbbabbabbbbbbbbbbbbbaaaaabbbaaaabbbbbbbaaaaaaabbbbbabbabbbaaaaaaaaaaaaabbba + bbbbbaaaaabbbbbbbbabbabbbabbbbabbbbbaaaabbbbaaaabbbbbbaaaaaaabbbbbbaaabbbbbbbbbbbbbaaabbba + bbbbbaaaaabbaaabbaabbabbbbbbbbabbbbbaaaabbbbaaabbbbbbbaaaaaaabbbbbbaaabbbbbbbbbbbbbaaabbbb + bbbbbaaaaabbbaabaaabbaaaaaabbbaabbbbaaaabbbbaaabbbbbbbaaaaaaabbbbabaaabbbbabbbabbbbaaabbba + bbbbbaaaaabbbbbbbabbbbbbbabbbaaabbbbbaaabbbbbaaaabbbbaaaaaaaabbbaabaaabbbbbbbbabbbbaaabbba + bbbbbaaaaabbbbbbbabbbbbbbabbbaaabbbaabaabbbbbbaabbbbbaaaaaaaabbbaaaaabbbbbbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbbbbbabbbaaabbbaaaaabbbbbbaabbbbbaaabbaaabbbaaaaabbbaaabbbabbbbaaabbba + abbbbaaaabbbbbbbaabbbbbbbabbbaaabbbaaaaabbbbbbbababbbaaabbaabbbbaaaabbbbbaabbbabbbbaabbbba + abbbaaaaabbbbbbbaabbabbbbabbbaaaabbaaaaabbbbbbbbbbbbbbbaaaaaabbbaaaabbbbbabbbbabbbbaabbbba + bbbbaaaaabbbbaaaaabbabbbaabbbaaaabbbaaaabbbbbbbbbbbbbbbaaaaaababaaaabbabbabbbbabbbbaabbbba + bbbbaaaaabbbbbbbabbbabbbaabbbaaabbbbaaaabbbbbbbbbbabbbbbbaaabbbbaaabbbbbbabbbbabbbaaaabbba + bbbbaaaaabbbbbbbabbbabbbabbbbaaaabbbaaaabbbbbbbbbbabbbbbbaaabbbbaaabbbbbbabbbbbbbbbaaabbbb + bbbaaaaaabbbbbbbabbbabbbbbbbbaaaabbbaaaabbbbbbbbbbabbbbabbbabbbbaaabbbbbbabbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbabbbbbbbbaaaabbbaaaabbbbbbbbbbaabbbabbbbbbbaaaabbbbbbaabbaabbbaaabbbba + abbaaaaaababbbbbabbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbaaaabbbbabbbbaaabbbbbbbabbbabbbbaaabbbbb + bbbaaaaaabaaaaaaaaaaaabaabbbaaabbbbbaaaaaaabbbbbbbbaaaaaabaabbbaabbbbbbbaaabbabbbbaaabbbba + bbbaaaaabbbbbbbbbbbaaaaaaaaaaabbbbabbaaaaaaaaaaaabbbbaaaaaaabbbabbaabbbbbbabbbbbbbaaabbbbb + bbaaaaaabbbbbbbbbbbbbbbbbbbbaabbbaaabaabbbaaaaaaabbbbbaaaabbbbbabaaaabbbbbbbbbabbbaaabbbbb + bbaaaaaabbaaaaaaaaaaabbbabbbaabbbababbaabbaaaaaaaabbbaabbbbbbbbabbaaaabbbbbbbbbbbbaaaabbba + bbaaaaaabbbbbbbbbbbaaaaaaabbabbbaababaaabbbbbbbbaabbbaaaabbbbabbbbaaaaabbbbbbaabbbaaaabbba + bbaaaaabbbbbbbbabbbabbbbbbbbabbbaababaaaabbbbbbbaaaaaaaaaabbaabbbbaaaaabbbbbbaaaabaaabbbba + bbaaaaabbaaaabbabbbabbbbabbbbbbaabbababaaaaaaaaaaaaaabbbbabbaabbbbaaaaaaabbbbbbbbbaaabbbba + bbaaaaabbbaaabbaaababbbbbbbbbbbaabbaabbababaabbabaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaabbbbba + bbaaaaabbbbbbbbbbbbabbbbbbbbbbaaabbaaaababaaaababaabbbbbbbbbbbabbbaaaaaaaaaabbbbbbabbbabba + bbaaaaabbbabbbbbbbbbbbbbbbbaaaaaabbaababbabbabbabaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbba + bbaaaaabbbabbbbbbbbbbbbbbbaaaaaaabbaabbaabaabababaaaaaabbbbbbabbbbaaaaaaaaaaaaabbbbbbbbbbb + baaaaaabbbabbbbbbbbbbbbbaaaaaaaaabbaabaababaabbabaaaaaaabbbbaabbbbaaaaaaaaaaaaaaabbbbbbbbb + baaaaaabbbabbbbbbbbbbbaaaaaaaaaabbbaabbaababbbbbbaaaaaaaaabbaabbbbaaaaabbaaaaaaaaaaaabbbbb + baaaaaabbbabbbbbbbbbaaaaaaaaaaaabbbaabaababaabbbbaaaaaaabbbaabbbbbaaaabbbbaaaaaaaaaaabbbbb + baaaaaabbbabbbbbbbaaaaaaaaaaaaaabbbaabbaabaabbbbbaaaabbbbbbaabbbbbaaaaabbbbbaaaaaaaaaaabbb + baaaaabbbbbbbbbbaaaaaaaaaaaaaaaabbbaabaababaabbbbabbbbbbbbaabbbbbaaaaabbbbbbaaaaaaaaaaaaaa + baaaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbaabaaababbbbbbabbbbbbbaaabbbbbaaaaabbbbbbbbabbbaaaaaaab + baabaabbbbbbbaaaaaaaaaaaaaaaaababbbaababbabaabbbbabaabbbaaabbbbbbbaaaabbbbbbbbbbbbbaaaaaaa + baabaabbbbbaaaaaaaaaaaaabaaaaababbbaabaaababaabbbaaaaabaaabbbbbbbbaaabbbbbbbaaabbbbaaaaaaa`, + map `ababaaabbaabbaaaaabbbbbbbabbbbbbbbbbaaaaabbbbbbbbaaaabbbabbbbbbbabbbbbbbbbbbbabbbbbbbbabba + ababbbbbbbbbbaaaaaabbaabaaabaaabbbbbaababbbbbbbaaaaaaaaaaabbbabaaabbbbbbbbbbbabbbabbbbabba + ababbbbbbbbbbaaaaabbbabbbabbbbbbbbbbaababbbbbaaaaabbbbbbbaaaaaaaabbbbbbbbbbbbaabaabbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaaaaaaabbaabbbbbbbbbbbbabbbbaaba + ababbbbbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbabbbaaaaaaabbbabbbbbbbbbbbbbbbbbaaba + ababbaaaaabbbaaaaabbbbaaaabaaaaaaaaabbbbaaabbabbbaaaaaababaaaaaaaabbaabbbbbbbbbbbbbbbbabba + aabbbabbaabbbaaabaaaaaaaaaaaaaaabbabbbbaabbbbabbbaaaaaabbaaaaaaaaabbbaabaabbaaaaaaaaaaabba + aabbbabbbabbbaabbbaaaaaaaaaaaaaabbabbbaaabbbaaabaaaaaabbbbbbaaaaaaabaaabbabbbbaaaaaababbba + aabbbabbbabbbaabbbaabbaabbbbabbabbbbaaaabbbaaaaaaaaaabaabbbbaaaaaaaaaabbbaaabbbbaaaababbba + aabbbbbbabbbbaabbbbbbbbbbaabbbbbbbbbabbbbbaaaaaabbbbbbaaabbbaaaaaabaaabbbbaabbbbbabaabbbba + aabbabbbabbbaaaaabaabbbbbaababbbbbbbbbbbbaaaaaaabbbbbbaaaabbbaaaaabaaaabbbaabbbbbabaabbbba + aabbaaaaabbbaaaaaaaabbbbbbbaabbbbbbbbbbaaaaabbaabbbbabaaaabbbbaaaabbaaaaabaaabbbaaaaabbbba + aabbabbbabbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbabbabaaabbbaaaaabaaaaaaaaabbbbaaaaabbba + aabbabbbabbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbabbaaabbbbaaabbbbaaaabbabaaaaaabbbbbbbbbbbba + abbbbbbbbbbaaaabbbbbaabbbbbbbbbbbabbbaaaaaabbbabaaaabbbbaaaabbbaaabbbabbaaaaabbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaabbbbbbbbbbaabbaaaaaaabbbabbaababaaaabbbbbaaabbbaaaaaababbbbbbbbbabba + aaaaaaaaaaaaaaabbbbbabbbbbbbbbbbaaaaaaaaaabbbbaabaabbbababbbbbbbabbbbababbbbbaabbbbbbaabba + abbabbbbbbbaaaabbbbbabbbbbbbabbbaaaaaaaabbbbbaaabbbbbbaaabbbbbbbbaabbbabbbbbbaabbbbbaaabba + abbbbbbbbbbaabbbbbaaaaabaaabbbbbbaaaaaabbbbbbaabbbbbbbaabbbbbbbbbaabbbabbabbaabbbbbbaaabba + abbbbbbbbbbaabbbbbaaaaaaababbbbbbaaaaabbbabbbaabbbbbbbbbbbbbbbabbbabbbbabaabaabbbbbbbaabba + abbbbbbbbbbaabbbbbaaaaaabbbbbbbbbbaaaaabbabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbbbbbabba + abbbbbbbbbbaaaabbbaaaaabbbbaabbbbbaaaaabbabbbbaabbabbbbbbbbbbbaabbbbbbbaabaaaabbbbbbbbabba + abaaabaabbaaabbbbbaaaaabbbbaabbbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbaaaaaabbbabbbbbbba + abbbbbbbbbaaaabbbbaaaabbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbbbbaaabbbbbabaaaaabbbaabbbbbba + abbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbaaaaaabbbbbbbbabbbbbbbbbbbbbbbaaabbbbaaaaaaabbbbabbbbbba + abbbbbbbbbaaabbbbbaaabbbbbbbbabbaaaaabaabbbbbbbbabbbbbbaaabbbbbbaaabbbaaaaaaaabbbbbbbbbbba + abbbbbbbbbaaaabbbbaabbabbbbbbabbaaaaaaaabbbbbbbbbaaaaabaaaabbbbaaaaaaaaaaaaaaabbbbbbbbbbba + abbbbbbbbbaaabbbbbaabbbbbbbbbbbbaaaaaaabbbbbbbbbabbbaabaaaaaaaaaaaaaaaaaaaaaabbbabbbbbbbba + bbbbbabbbaaaaabbbaaabbbbbaabbbbbbbbbaaabbbbaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabbbaabbbbbbba + abbbbbbbbaaaabbbbaaabbbbbabbbbbbbbbaaaabbbaaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbaabbbbbbba + abbbbabbbaaaabbabbbbbbbbbbbbbabbbaaaaaabbbaaaabbbbbbaaaaaaaaaaaaaaaaaaaaabbabbbaaabbbbbbba + bbbbbabbbaaaaabbbbaabaaaabbbaaabaaaaaaaabbaaabbbbbbbbbabbaaaaaaaaaaaaababbbabbbaaaabbbbbba + abbbbabbbaaaaabbbbbbbabbbabbbaaaaaaaaaaabbaabbbbbbbbbbbbbbbbbaaaaaaaaabbbbbabbbbabbbbbbbba + aaaaaaaaaaaaaabbbbbbabbbbabbbaaaabbaaaaabbaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbbabbbbbbbabbbbba + abaaaabbaaaaabbbbbbbbbbbbbbbbaababbaaaaaabaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabbbaabbaaabbba + abbbbbbbbaaaaabaaaaaaaaaaabbbaababaaaaaaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbbabbbbabbba + bbbbbbbbbaaaabbbabbbabbbabbbbaaaaaaaaaaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbabbbbbbbbbabbba + abaaaaabaaaaabbbabbbbbbbbbbbbaaaaaaabbbbaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbabbaabbbbbabbba + abbaaaabaaaaabbbaaaaaaababbbbaaaaaaabbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbabaaaaaaaaaaaabbba + abbbbbbbaaaaabbbbbbbabbbabbbbaaaaaaabbaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbabbba + abbaabbbaaaaabbaaaaaaaaaabbbbbaaaaaabbaaaaaabbbbbbbbbaaaabbbbbbbbbbabbaaaabbbbbaabbbbaabba + abbbabbbaaaabbbbbbbbbbbbabbbbbbaaaaaaaaaaaabbbbbbbbbbaaaabbbbbbbbbbabbaaaabbbaaaabbbbabbba + abbbbbbbaaaabbbbbbbbbbbbbbbbbbbaabaaaaabbabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbaabbbaabbbb + abbbbbbaaaaabbbbbbbabbbbbbbbbaaaabaaaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbaabbbaabbbb + bbbabbbaaaaabbbbbbbabbbabbbbbaaaabaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbaabbbaabbbb + abaabbbaaaaabbbbbbbabbbabbbbbaaabbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaabbbbbbbbbbaabbbb + abaabbbaaaaabbbaaaaaaaaabbbbbaaabbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaabbbbbbbbbbaabbbb + abaabbbaaaaabbbbbbaaabbabbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaabbbbbabbbbaaabba + bbbbbbbaaaaabbbbbbbbbbbabbbbbaaaaabbbaaabbbbbbbaaaabaabbbbbbbbbbbbbbbbbaabbbbbbabbbbaabbba + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaababbbaabbbbbbbaaaaaaaaabbbbbbbbbbabbbbaaabbaaaaaabbbaabbbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaababbbaabbbbbbbbaaaaaaaaaaaaabbbbbabbbaaaaabbbbbaabbaaabbba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbaaaaaabbbbbaaaaaaaabbbbbbbbbbbaaabba + bbbbbaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaabbbbbabbbbbaaabbb + bbbbbbaaaaabbbbbbbabbbaabaabbbaaaabbbbbbbbbbbbaaaabbbbbbbaaaaaabbaaaabaabbbbbbbbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbabaaaaaaaaaaaaaabbaaaaabbbbbbbbbbbbbbaabbba + abbbbbaaaabbbbbbbbabbbbbbbbbbbbaaaaabbbbbbbbbbabbabaaaaaaabbaabbbbaaaabbbbaaaaaaabbaaabbba + abbbbbaaaaabbbbbbbabbabbbabbbbbaaaaabbbbbbbbaaabbbbbbbbbbbaaaabbbbbaaaaabbaaaaaaaaaaaabbba + bbbbbaaaaabbbbbbbbabbabbbabbbbbbaaaaabbbbbbbaaaabbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbaaabbba + bbbbbaaaaabbaabbbaaababbbabbbbbbaaaaaabbbbbbbaaaabbbbbbbbaaaaaabbbbabaabbbbbbbbbbbbbaabbbb + bbbbbaaaaabbbbbbaaabaaaaaaabbbabbbaaaabbbbbbbaaabbbbbbbbbaaaaaabbbbabaabbbbbbbabbbbaaabbba + bbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbaaabbbbbbbbaaaaabbbbbaaaabbbbbbbabbbbaaabbba + bbbbbaaaaabbbbbbbbbbbabbbabbbaabbbbaaaaabbbbbaaaabbbbbbbbaaaaabbbbbaaaabbbbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbbbbbabbbbbbbaabbbbaaaaabbbbbaaaabbbbbbbbaaaaabbbbaaaaabbaabbbabbbbaaabbba + abbbaaaaaabbbbbbaabbabbbbbbbbaaabbbaaaaabbbbbbaaaabbbbbbaaaaaaabbbbaaabbbabbbbabbbbaaabbba + abbbaaaaabbbabbbaabbaabbbabbbaaabbbaaaaabbbbbbbaaabbbbbaaaaaaabbbbaaaabbbabbbbabbbbaabbbba + bbbbaaaaabbbbbaaaabbabbbaabbbaaabbbaaaaabbbbbbbaaabbbbbaaaaaaabbbbaaaabbbabbbbabbbbaaabbba + bbbbaaaaabbbbbbbabbbbbbbaabbbaaabbbaaaaabbbbbbbaaabbbbaaaabbaabbbbaaabbbbabbbbabbbbaaabbba + bbbbaaaaabbbbbbbabbbbbbbabbbbaabbbbaaaaabbbbbbbaaabbbbaaaaaaaabbbbaaabbbbabbbbbbbbbaaabbbb + bbbaaaaaabbbbbbbabbbbbbbabbbbaabbbbbaaaabbbbbbbbbabbbaabaaaaaaabbbaaabbbbabbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbbbbbbaaabbbbaaaaabbbbbbbbabbbbaabbaaaaababaabbbbbaaabaaabbaaaabbba + abbaaaaaabababbbabbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbaabbbbbabbbaabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaaababbbbaaaabbbaaaaaabbbbbbbbbabbbbbbbbaabbbbaabbbbaabbbabbbbaaaabbba + bbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaabbbaaaaaaaaaaaaabbaabbbaabbbbbbbaabbbbbbabbbabbbbaaaabbba + bbaaaaaabbbabbbbbbbbbbbbbbbbaaaabbbbbaabbbaaaaaaabbaaaabbabbbbbbaaabbbbbbabbbaabbbaabbbbbb + bbaaaaaabbaaaaaaaaaaabbbbbbbaababbabbaaaaaaaaabaabbbaaaaaabbbbbbaaabbbbbbabbbabbbbaabbbbba + bbaaaaaabbbbbbbbbbbaaaaaaabbaabbbbbabaaabbbbbbbbaabbbbaaaaaaaabbaababbbbbaabaaabbbaabbbbba + bbaaaaaabbbbbbbabbbabbbbbbbbabbbbababaaaabbbbbbbaabbbbbaaaaaabbbbbaaabbbbaaaaaaaabaaabbbbb + bbaaaaabbbaaabbabbbabbbbabbbabbbbababbbaaaaaabaaaabbbbbaabbbbbbbbbaaaabbbbbbbabbbbaaabbbbb + bbaaaaabbbabbbbaaaaaaaaabbbbabbbaababbabaabaabbbaabbbaaaabbbbbbbbbaaaabbbbbbbabbbbaaabbbba + bbaaaaabbbabbbbbbbbbbbaaabbabbbaabbabbbabbaaabbbaaabaaaaaaaaaaabbbaaaaabbbbbbaabbbaaabbbba + bbaaaaabbbabbbbbbbabbbbbbbbbbbbaabbabbababbaabbbaaaabbaaaaaaaabbbbaaaaaabbbbbbbbbaaaabbbba + bbaaaaabbbabbbbabbaababbbbbbbbaaabbabbaabbbaabbbaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaaabbbba + baaaaaabbbabbbbbbbabbbbbbbbbbaaaabbabbababbabbbbaaabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbabbbbbba + baaaaaabbbaabbbbbbabbbbbbbbaaaaabbbabbbaaaababbbaaabbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbba + baaaaaabbbaaaaabbbbbbbbbbbaaaaaabbbabbabaabaabbbaabbaaaabbbbbabbbbaaaaaaaaaaaaabbbbbbbbbba + baaaaabbbbabbaabbbbbbbbbaaaaaaaabbbabbbaaaababbbaaaaaaaaabbbaabbbbaaaaaaaaaaaaaaabbbbbbbbb + baaaaaabbbbbbabbbbbbbbaaaaaaaaaabbbabbabaaaabbbbaabaaaaaaabaabbbbbaaaaaabbaaaaaaaaabbbbbbb + baaaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbababaaaabababaaaaaaaaabbaabbbbbaaaaabbbaaaaaaaaaaabbbbb + baaaaabbbbbbbabbbbaaaaaaaaaaaaaabbbabaababbaabbbaaaaabbbbbaabbbbbbaaaaabbbbaaaaaaaaaaabbbb + bbaaaabbbabbbabbbaaaaaaaaaaaaaaabbbabaaababaabbbaabbbbbbbbaabbbbbaaaaaabbbbbbaaaaaaaaaaaaa`, + map `ababbaaabaabbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + ababbbabbbbbbbaaaaabbaabaaaaaabbabbbaaaaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbaabbabbbbabba + ababbbbbbbbbbaaaaabbbabbbbbbabbbbbbbbaaaabbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaaaaaaaabaaaaaabbbbbbbbbbbbbbbabbbbaaba + ababbbbbbabbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaba + ababbaaaaabbbaabaabaaaaaaaaaaaaaaaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaaabbaaaaaaaaaaaaaaaaaababbbbbbaaaaaaaabbbbbbbbaaaaaaabbbbbaaaaaaaaaaaaaaaaba + abbbbabbbabbaaabbbbbaaaabbaaaaaaaaabbabbbbbaaaaabbbbbbbbbbbbbaaaaaabbbbbbbbbaaaaaaaabaabba + aabbbabbbabbaaabbbbbaaabbbbaabbabbabbbbbbaaaabbbbbbbbbbbababbaaaaaaaabbbbbbbbbaaaaabbbbbba + aabbbbbbabbbaaabbbaabbabbbbbbbaabbbbbbbbaaabbbbabbbaaaaaabbbaaaaaaaaabbabbbbbbbbaaababbbba + aabbbbbbabbbaabbbbaabbbbbbbbbaaabbbbbbbbaaabbbbaabaaaaaaaabbabaaaaaaabbaababbbbaaaaaabbbba + aabbaaaaabbbaaaabaaaabbbbbbbbaaaabbbbaaaaabbbbaaaaaaaaaaaabbbbaaaaaaabaaababbbbbaaaaabbbba + babbabbbabbbaaaabbbbbbabbbabbbbbbbbbbaaabbbbaaaaaaaabbbbbbaabbbaaaaaabaabbbaabbbbaaaabbbba + aabbabbbabbbaaabbbbbbbbbbbabbbbbbbbbbbbbbbaaaaaaaaaabbbbbaaabbbbaaaaabaaabbbabbbbbbbbbbbba + abbbbbbbbbbbaaaabbbbbbabbbaabbbbbbbbbbbbbaaaaaaaaaaabbbbbaaaabbbbaaabbaaaabbaabbbbbbbbabba + abbbbbbabbbaaaaabbbbaaabbbaabbbbbbbbbbbbbaaaaaabbbabbbbbbbaaabbbbabaabbaaaaaabbbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaaabbbbbaabbbbabbbbbaaaaaaabbbbbbbbbbbbaaabbbbbaabbbaaaaaabbbbbbbaabba + abbabbbbbbbaaaabbbbaaabbbaababbbbbabbbbaaaaaaabbbbbbbbbbbbbaaabbbbbaabbbbaaaaaabbbbbaaabba + abbbbbbbbbbaaaabbbbaababaaababbbbaabbbaaaaaaaabbbbababbbbbbaabbbbbaaabbabbaaaaabbbbbaaabba + abbbbbbbbbbaaabbbbabbbaaabbbbabbbaabbaaaaaaaabbbbbbbaabbbbbbbbbbbbbaabbabbbbabaabbbbbaabba + abbbbbbbbbbaaabbbbabbaabbbbabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaabbababbbbabbbbbbabba + abbbbbbbbbaaababbbaaaaabbbbaabbbbaaaaaaabbabbabbbbbbbbbbabbbbbbbbbbbabbbaababbbabbbbbbabba + abaaaaaabbaaaaaabbaaaaabbbbaabbbbbaaaaabbbbbbabbbabbbbbbbbbbbbbbbabbbabbbabaaaaabbbbbbbbba + abbabbabbbaaabbbbbaabbbbbbbbabbbbbbaaaabbbbbbbbbbabbbbbbbbabbbbbaabbbabbbaaaaaaabbbbbbbbba + abbbbbbbbbaaabbbaaaaabbbabbbabbbbbbaaaaabbbbbbbbbaabbbbbbbabbbbbaaabbbabbbabaaaabbbbbbbbba + abbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbabbbabaabbbbbbbaaaaaabbbbbbbbba + abbbbbbbbbaaaabbbaaabbbbbbbbabbabbbaaaabbbbbbbbbbbaabbbbbbbabbaabbaabbbbbbaaaaaabbbbbbbbba + abbbbbbbbbaaaabbbaaabbbbbbbbbababbbaaaabbbbbbbbbbbababbbbbbbbbbabbaaabbbbbaaaaabbbbbbbbbba + abbbbaabbaaaaabbbaaabbbbbabbabbbbaaaaaabbbbbbbbbbbbbaabbbabbbbbbbbbaaabbbbaaaaabbbbbbbbbba + abbbbbbbbaaaabbaabaabbbbbabbbbbbbaaaaaabbbbbbbbbbbbaaabbbaaaabbbbbaaaaabbaaaaaabbbabbbbbba + bbbbbabbbaaabaaabbbbbbbbbbbbbabbaaaaaaabbbbbbbbbbbbbaaabbaaaaaaabbaaaaaaaaaaaaabbbbbbbbbba + bbbbbbbbbaaabaabbbaabaaaabbbbbabaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbba + bbbbbbbbbaaaaabbbbbbbabbbabbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbba + aaaaaaaaaaaaaabbbbbbabbbbabbbabbbbbaaaabbbbbbaaabbbaaaaaaaaaaaaaaaaaaaaaaaaabbbbabbabbbbba + abaaaaaaaaaaabbbbbbbbbbbbbbbbabbbbaaaaabbbbbaaaabbbbbbabaaabaabbaaaaaaaaaabbbbbaabbaaabbba + abbbbbbbbaaaaabaaaaaaaaaaabbaaabbaaaaaabbbbbaabbbbbbbbbbbbaaaaabaaaaaaaabbbbabbbabbbbabbba + bbbbbbbbaaaaabbbbbbbabbbabbbbaaaaaaaabbbbbaaaababbbbbbbbbbbbbbaaaaaaaaaabbbbabbbbbbbbabbba + abbaaaabaaaaabbbabbbbbbbbbbbbaaaaaabaabbbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbabbbbabbba + abbbaaaaaaaaaabaaabaaaababbbbaaaaaabaabbbaabaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaabbba + abbbbbbbaaaaabbbbbbbbbbbabbbbaaaaaabbbabaaababbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbba + abbaabbbaaaaabbbaaaaabbaabbbbaaaaaabbbbabaaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbabbbbaabba + abbbabbbaaaaabbbbbbbbbbbabbbbaaaaaabbbbabaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabaaabbbbabbba + abbbbbbbaaaabbbbbbbabbbbbbbbbaaaaaababaabbaaaabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbaabbbaabbbb + bbbabbbaaaaabbbbbbbabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbaabbbaabbbb + bbaabbbaaaaabbbbbbbabbbabbbbbbbbaaaaabaabaaaaabbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbabbbbaabbbb + abaabbbaaaaabbbbbbbabbbabbbbbbbbabaaabaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbaabbbb + bbaabbbaaaaabbaaaaaaaaaabbbbbbbaabaaaaaaabbabbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbaabbbb + bbbbbbbaaaaabbbbbababbaababbbaaaaabaaaaaaaabbbbbbbbabbaaaaabbbbbbbbbbbbbaaabbbbabbbbaaabba + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbaaaaaabbbbbbbbbbabbbbabbbbbbbbbbbbbbaaaabbbbabbbbaaabba + bbbbbbbaaaabbbbbbbabbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbaaabbbaaaabbbaaabbb + bbbbbbbaaaabbbbbbbabbbbbbbbbbaaaababaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaabbbbaabbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaabba + bbbabaaaaaaaaaaaaaaaaaaaaaabbbaaaaabbbaaabbbbbbbbaaaababbbbbbbbbbbbbbbbbaabbbbaabbbbaaabba + bbbbbbaaaaabbbbbbbbbbbaabaabbbaaababbbaaabbbbbbbbaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaababbbbaabbbbbbbbbabbaaaaaaaaaabbbbaaaaaaabbbbbbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbaaaaaaabbbaaaabbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbaaababbbbbbbbbbbbbaabbbbbbbbbaaaaaabbaaaaaabbbbaaaaaaaaabbbb + bbbbbbaaaabbbbbbbaabbabbbbbbbbbaaaaaabbbbbbbbbbbabbaaaaaaaaabaaaabbaaaaabbbbbbbbbbbaaabbba + bbbbbaaaaaabaaabbaabbabbbbbbbbbaaaaaabbbbbbbbbbaabbaaaaaaaaabaaabbbaaaaabbbbbbbbbbbbaabbba + bbbbbaaaaabbaabbaaaaaaaaaaabbbbbaaaaabbbbbbbbbbaaabbbbaabbaaaaaabbbbaaaabbbbbbabbbbaaabbba + abbbbaaaaabbbbbbbabbbabbbabbbbbbaaaaaabbbbbabbaaabbbbbbbbbbbaaaabbbbaaaabbbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbabbbbbbbaaaaabbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbabbbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbaabbbabbbabbbaabbbbaaabbbbbbbbababbbbbbbbbbbaaaabbbbbaaabbbbbbabbbbaaabbbb + abbbbaaaaabbbbbbaabbbabbbabbbaabbbbaaaabbbbbbbaaaaabbbbbbbbbaaaabbbbbaaabbbbbbabbbbaaabbbb + abbbaaaaaabbbbbbaabbaabbaabbbaabbbbaaaabbbbbbbabaaaabbbbbbbbaaaabbbbbaaabbbbbbabbbbaaabbbb + bbbbaaaaabbbbaaaaabbabbbaabbbaabbbbaaaabbbbbbbbbbaaabbbbbbbbaaaabbbbbaaabbbbbbabbbbaaabbbb + bbbbaaaaabbbbbbbabbbbbbbaabbbaaabbbaaaaabbbbbbaaaaabbbbbbbaaaaaabbbbaaaabbbbbbabbbbaaabbbb + bbbbaaaaabbbbbbbabbbbbbbabbbbaabbbbaaaaabbbbbabbaaabbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbb + bbbaaaaaabbbbbbbabbbbbbbabbbbaababbaaaaabbbbbabbbaabbbbbbbaaaaaabbbaaaabbabbbbbbbbbaabbbbb + abbaaaaaabbbbbbbabbbbbbbbbbbbaabbbbaaaaabbbbbabbbaaabbbbbaaaaaaabbbaaabbbaaabaaabbaaabbbbb + abbaaaaaabbbbbbbabbbbbbbbbbbbaaabbbaaaaabbbbbabbbaaabbbbbaaabaaabbbaaabbbbbbbaabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaaaaabbbbaaabbbbaaaabbbbbaabbaabbbbbaaaaaaaabbbaaabbbabbbbbbbbaaabbbbb + bbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbaaabbbbbabaabbaaaaaabbaaabbbbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbaaabbbaaaaaaabbbabbbbbbaaaaaaaaaabbbbabbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaaabbbbbbbaabaabbbbaaaabaaaabaaabbbbbbbbbabbabbbbaabbbbabbbabbbbaaabbbba + bbaaaaaabbbbbbbabbbaaaaaaaabaababbbbaaaabbbbbbbaaabbbabbbbaabbbbbbaabbbaaaaaaaabbbaaabbbba + abaaaaaabbbbbbbabbbabbbabbbbaabbbbbbaaaaabbbbbbbaabbbaaabaaabbbbbbaabbbbbaaaaaaaabaaabbbbb + bbaaaaaabbaaabbabbbabbbbbbbbabbbbbbbabbaaaaaaaaaaabbaaaaaaaabbbbbaaabbbbbbbbbbbbbbaaabbbba + bbaaaaabbbabbbaabaaaaaaabbbaabbbbaabbbababaabbabaabbbaaaaaaabbaabaabbbbbbbbbbbbbbbaaabbbbb + bbaaaaabbbabbbbbbbbabbaaabbaabbbababbababaabababaabbbbbbaaaaaaabbbbabbbbaaabaaabbbaaabbbba + bbaaaaabbbabbbbbbbbabbbbbbbabbbbababbaababaabbabaabbbbbbaaaabbbbbbaaabbbbbbbaaabbaaaabbbba + bbaaaaabbbabbbbbbbbabbabbbbabbbaababbaaababbababaabbbaaaabbbbbbbbbaaaabbbbbbbbbbbbaaabbbba + bbaaaaabbbaabbbbbbaabbaabbbabbbaababbaababbaababaabbbaaaaaaabaabbbaaaaabbbbbbbbbbaaabbbbba + baaaaaabbbaabbbbbbabbbaabbbabbaabbabbabaaabbababaaabbbaaaaaaaabbbbaaaaaabbbbbbbbbaaaaaabba + baaaaabbbbabaaabbbabababbbbbbbaabbaabaaaabaabbbbbaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaaabbbba + baaaaabbbaabbaabbbabbbabbbbbbaaabbaabaaaaaaabbbbaaabbbbbbbbbbbbbbbaaaaaaaaabbbbbbbabbbbbba + baaaaabbbbbbbaabbbabbbbbbbbaaaaabbaabaaaaaaabbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbba + baaaaabbbabbbaabbbbbbbbbbbaaaaaabbaabaaaaaabbbbbaaabbbbabbbbbabbbbaaaaaaaaaaaaabbbbbbbbbba + baaaaabbbabbbaabbbbbbbbaaaaaaaabbbaabaaaabaaabbbaabbabaaabbbbabbbbaaaaaaaaaaaaaaabbbbbbbba + baaaaabbbabbbaabbbbbbaaaaaaaaaabbbaabaaababaabbbaabbaaaaaaababbbbbaaaaaaaaaaaaaaaaaabbbbba`, + map `ababbaaabaabbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbabbbbbbbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbbaaaaabbaabbaaaaabbbbbbaaaaabbbbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbabba + ababbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbabbbabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabba + ababbaaaaabbbaaaaabaaaaaaaaaaaaaaaaaabaaabbbaabbbbbaaaaaaaaabaaaaaabbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaabbbaaaaaaaaaaaaaaaaaabbbbababbbbbbaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaabba + abbbbabbbabbaaabbbbaaaaabbaaaaaaaaaabbbbbbbbbbbbabbaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaabaaaba + aabbbabbbabbaaabbbbbaaabbbbbabbbaaabbbbbbbbbbbbaaaaaaaabbbbbbaaaaaaabbbbbbaaaaaaaaabbbbbba + aabbbbbbabbbaaabbbaaababbbbbabbbbaabbbbbbbbbbaaaaaaabbbbbbbbbbbaaaaaabbbbbbbbbbaaabbbbbbba + aabbbbbbabbbaaabbbaabbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbbbbbabbbabaaaaaababbbbbbbbaaaaaabbbba + aabbaaaaabbbaabbbaaaaaabbbbbaaaaaaabbbbbbbaaaabbbbbbbbaaaaabbbbaaaaaaabbbbbbbbbabaaaabbbba + babbabbbabbbaaaabbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbaaaaaaaaaabbbbaaaaaaaabbbbabbbbbaaaabbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaaaaaaaababbabaaaaaaabbaaabbbbbbbbbbbbba + abbbbbbbbbbbaaaabbbbbbbbbbbabbbbbbbbbaaaaaabbbaaaaaaaaaabbbbbbbbaaaaaaabbabbabbbbbbbbbabba + abbbbbbabbbaaaaabbbaaaabbbbaabbbbaaabbbaabbbbaaaaaaaaabbbbbabbbbbbaaaaabbaabbabbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaabbbbbaaabbbbbabbbabbbaaaaaaaaaaabbbbbaaaabbbbaaaabbaabbbabbbbbbaabba + abbabbbbbbbaaaabbbbaaabbbbbaaabbbbbabbabbbaaaaaaaabaaabbbbbbbaaabbbaaaabbaaaaabbbbbbaaabba + abbbbbbbbbbaaaabbbbaabbbbaaaaabbbbbbbbabbbaaaaaaabbbbbbbbbbbbaaabbbbbaabbbaaaaaabbbbaaabba + abbbbbbbbbbaaabbbbaabbaaaababaabbbbaaabbbaaaaaaabbbbbbbbbbbbbbaabbbbaaaabbbbaaaabbbbbaabba + abbbbbbbbbbaaabbbbabbaaabbbaaabbbbaaabbbaaaaaaaabbbbbbbbbbbbbbaabbbbbbaaaabbaaaaabbbbbabba + abbabbbbbbaaababbbaaaaaabbbaaabbbbaabbbaaaaaabbabbbbbbabbbbbbbaababbbaaaaaabbaabbbbbbbabba + abaaabaabbaaaaaabbaaaaabbbbbaabbbbaabbaaaaaabbbbbbbbbbbabbbaabbbbbbbbbaaabbbbbbbbabbbbbbba + abbbbbbbbbaaabbbabaaaabbbbbbaabbbbaabaaaaaabbbbbbbbabbbbbbbabbbbbbbbbbaaabbabbabbbbbbbbbba + abbbbbbbbbaaabbbbaaaabbbabbbabbbbbaaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbabbbaabbaabaababbbbbbba + abbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbabbbabbbbbbbbbbbbbbbaabbbabbaabaaaabbbbbbba + abbbbbbbbbaaaabbbaaabbabbbbbaabbbbbbaaaaabbbbbbabbbbbbbbbbbbbabbbbbaabbbabbbabaaaabbbbbbba + ababbbbbbbaaabbbbaaabbbbbbbbaabbabbbaaaaaabbbbbabbbbbabbbbbbbaabbbbaaabbbbbbaabaaabbbbbbba + abbbbabbbaaaabbbbaaabbbbbaabaabaabbbaaaabbbbbbbabbbbaaaabbbbbaabbbbbaabbbbbbaabaaabbbbbbba + abbbbbbbbaaaaabaabaabbbbbabbaabaabbbbaaabbbbbbbaabbbbbaababbbbbbbbbbbaabbbbbbbbaaabbbbbbba + abbbbabbbaaabaaabbbbbbbbbbbbbbbabbbaaaaabbbbbbbbbbbbbbaababbbbbbbbbbbbaabbbbaaaaabbbbbbbba + bbbbbbbbbaaabaabbbaaaaaaababbbbbbbaaaaabbbbbbbbbbbbbbbbabaabaabbbbbbbbaaabbbaaaaabbbbbbbba + bbbbbbbbbaaaaabbbbbbbabbbabbbbabbbaaaaabbbbabbbbbbbbbaaaaaabaaaaabbbbaaaaaaaaaaaabbbbbbbba + aaaaaaaaaaaaaabbbbbbbabbbabbbaabbaaaaaabbbbbbbbaabbbbaaaaabbaaaaaaaaaaaaaaaaaaaabbbbbbbbba + abbaaaaaaaaaabbbbbbbbbbbbbbbbaabbaaaaaabbbbbbbbaaabbbaabaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbba + bbbbbbbbbaaaaabaaaaaaaaaaaabbaaabbbaaaabbbbbbbbaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbabbba + bbbbbbbbbaaaabbbbbbbbbbaabbbbababbaaaaabbbbbbbbaaabbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbabbba + abbaaaabaaaaabbbabbbbbbbbbbbbababbaaaabbbbbbbbaababbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbba + abbaaaaaaaaaaabaaaaaaaaaabbbbabaaaaaaabbbbaabbaabbbbbbbbbbbbbbaabbbaaaaaaaabbbbaaaaaaabbba + abbbbbbbaaaaabbbbbbbbbbaabbbbaaaaaabaaabaaaabbaababbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbabbba + abbaabbbaaaaaabbaaaaabbaabbbbaaaaaabaaabbaaababaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbababbaabba + abbaabbbaaaaabbbbbbbbbbbabbbbaaaaabbaaabbaaabababbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbbabbba + abbabbbbaaaabbbbbbbabbbbbbbbbaaaaabbaaabaaaabaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbaabbbb + abbabbbaaaaabbbbbbbabbbbbbbbbaaaaabbaabbbaabbaaabbbbbbbbbaaabbbbbbbbbbbbbbaabbbaabbbaabbbb + bbbabbbaaaaabbbbbbbabbbabbbbbaaaaaabaabbbbaaaaaabbbbbabbaaaabbbbbbbbbbbbbaaabbbaabbbaabbbb + abaabbbaaaaabbbbbbbabbbabbbbbbaaaaaaaabbbbaaaaaabbbbabbbaaabbbbbbbbbbbbbaaaabbbbbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaabbbbbbaaaaaaaaabbbaaabaabbbbabbbbaaabbbbbbbbbbbbbaaabbbbbbbbaabbbb + bbbbbbbaaaaabbbbbbbabbaababbbbabbbbaaaaaaaaaababbbbbbabbaaaabbbbbbbbbbbbaaaabbbbbbbbaaabba + abbbbbbaaaaabbbbbbabbbbabbbbbbbaabbbaabaabaababbbbbbaabbaaaabbbbbbbbbbbbbaaabbbabbbbaaabba + bbbbbbbaaaabbbbbbbabbbbbbbbbbbaaaabbaabaababbabbbbbbaabbaaaaabbbbbbbbbbbbaaabbaaabbaaaabbb + bbbbbbbaaaabbbbbbbabbbbbbbbbbbaaaabbaaaaaaaabbbbbbbbaabbbbbaaaabbbbbbbbbbaaabbbbabbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbaaabbbbbbbbbabbbbbbbbbbaabbbbbbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbbaaaaaabbbbbbababbbbbbbbbbbbbbbbabbaaabbbbbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbaaaaabbbaaaaaabbaaaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabaabbbaaabbbbbbbbaaaaaaabbbabbbbbbbbbbbaaabbaabbbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbbaaabaabbbbaabbbbbbbbaaaaaaaaaaaaaabbbbabaaaaabaaaaaaaaabbbb + bbbbbbaaaabbbbbbbaabbabbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbaaaaaabbbbbbbbaaabbba + bbbbbaaaaaabaaabaaabbaabbbbbbbbaaababbbbbbbbbbbbbbaaabbbbbbbaaaaaaabaaaaaabbbbbbbbbbaabbba + bbbbbaaaaabbbabbaaaaaaaaaaabbbbbaabaabbbbbbbbbbbaaaaaaaaaaabaaaaaaabbaaaabbbbbabbbbaaabbba + abbbbaaaaabbbbbbbabbbabbbabbbbbbaaaaaabbbbbbbbbaaaabbaaaaaaaaaaaaabbbaaaabbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbabbbbbbaaaaaabbbbbabbbaabbbbbaaaaabbaaaaabbbaaaabbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbabbbbabbaaaaaabbbbbbbbababbbbbbbbbbbbbaaabbbaaabbbbbbabbbbaaabbbb + abbbbaaaaabbbbbbaabbbabbbabbbaabbaaaaaabbbbbbbbaabbbbbbbbbbbbbbaaabbbbabbbbbbbabbbbaaabbbb + abbbaaaaaabbbbbbaabbaabbaabbbaabbbaaaaabbbbbbbaaabbbbbbbbbbbbbbaaabbbbaaabbbbbabbbbaaabbbb + bbbbaaaaabbbbaaaaabbaabbaabbbaabbbbaaaabbbbbbbbabaaabbbbbbbbbbaaaabbbaaabbbbbbabbbbaaabbbb + bbbbaaaaabbbbbbbabbbbbbbbabbaaabbbbaaaabbbbbbbabaaaaabbbbbbbbbaaaabbbaaabbbbbbabbbbaaabbbb + bbbbaaaaabbbbbbbabbbbbbbabbbbaaabbbaaaabbbbbbbabbbaaabbbbbbbbbaaaabbbbaabbbbbbabbbbaabbbbb + bbbaaaaaabbbbbbbabbbbbbbbbbbbaaabbbaaaaabbbbbbabbaaaabbbbbbbbaaaaabbbaaabbbbbbbbbbbaabbbbb + abbaaaaaabbbbbbbabbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbaaaabbbbbbbaaaaabbbaaabbbbbaaabbaaabbbbb + abbaaaaaabbbbbbbabbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbaaabbbbbbbaaaaaabbbaabbbbbbaabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaaaaabbbaaaabbbaaaaabbbbbbbbbbaaaabbbbbbaaaaaabbbaabbbbbbabbbbaaabbbbb + bbbaaaaabbbbbbbbbbbaaaaaaaaaaaaabbbaaaaaaabbbaaaabaaabbbbbbaaaaaaabbbaabbbbbbabbbbaaabbbba + bbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbaaaaaaaaaaabbbbbaaaaaaaabbbabbbbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaaabbbbbbbaaaabbbabbaabbaaaaaaaaabbbbbbbaaaaaaaabbbabbbbbbbabbbbaaabbbbb + bbaaaaaabbbbbbbabbbaaaaaaaaaaaaabbbabaaabbbbbbbaaabbbbabbbabbaaaaaabaabbaaaaaaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbabbbbaababbbabaaaabbbbbbaaabbbbbbabbbbaaaabbbaabbbaaaaaaaabaabbbbba + bbaaaaaabbaaabbabbbabbbbbbbbaababbbaabbaaaaaaaaaaabbbbbbbbbbaabbbbbbaabbbbbbbabbbbaaabbbba + bbaaaaaabbaabbaaaaaaaaaabbbbaabbbbaabbabaababbabaabbbbaaabbaabbbbbbaabbbabbbbbbbbbaaabbbba + bbaaaaabbbbbbbbbbbbabbaaabbaabbbbbabbababaabababaaabbaaaaabaabbbbbaabbbbaaabaabbbbaaabbbba + bbaaaaabbbabbbbbbbbabbbbbbbaabbbaaabbaababbabbabaaabbabbaaaaabbbbbaabbbbaabbaaaabaaaabbbba + bbaaaaabbbabbbabbbbabbabbbbabbbbbaabbaaabbbaababaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbba + bbaaaaabbbaabbbbbbbabbaabbbabbbabaaabaababbabbabaaabbbbbbbaaaaabbbaaabbbbbbbabbbbbaaabbbba + baaaaaabbbaabbbbbbaabbaabbbabbaababbbababbabababaaabbbbababbbbbbbbaaabbbbbbbaaaabaaaabbbba + baaaaaabbaabaaabbaabbbabbbbbbbaababbbaabaaaabbbbaaabbbaaaaaaabbbbaaaaabbbbbbbbbbbbaaabbbbb + baaaaabbbaabbaabbbabbaabbbbbbaaabaabbbaaaaabbbbbaaabbabaaaaaaabbbaaaaaaabbbbbbbbbaaabbbbba + baaaaaabbbbbbaabbbabbbabbbbbaaabbaabbaaaaaaabbbbaaabbaabbbbaaabbbaaaaaaaaabbbbbbbaaaaabbba + baaaaabbbabbbaabbbabbbabbbbaaaabbaabbaaaaaabababaaabbabbbbbbbbbbbaaaaaaaaaabbbbbbbaaabbbba + baaaaabbbabbbaabbbabbbbbbbaaaaabbaabbaababbaabbbaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaabbbbba + bbaaaabbbabbbabbbbabbbbbaaaaaaabbaabbaaababaabbbaaabbaaaabbbbbbbbaaaaaaaaaaaaaaabbaabbabba`, + map `ababbaaabaabbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbabbaabbbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbbaaaaabbaabaaaaaaaaaabbaaaaabbbaabaaabbbbbbbbbbbbbbbbbbbbbbbabbbaabbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbabbbabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabba + aaabbaaaaabbbaaaaabbaaaaaaaaaaaaaaaaabaaabbbaabbbbbaaaaaaaaabaaaaaabbbbbbbbbbbbbbbbbbbabba + abbbbabbaabbbaabbbaaaaaaaaaaaaaaaaaabbbaababbbbbbaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaabba + aabbbbbbbbbbaaabbbaaaaaaabaaaaaaaaaabbbbabbbbbbbabbaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaabaaaba + aabbbbbbbabbaaabbbbbbbabbbbaabbbaaabbbbbbbbbbbbaaaaaaaabbbbbbaaaaaaabbbbbbabaaaaaaabbabbba + aabbbbbbabbbaaabbbaaabaabbbbabbbbaabbbbbbbbbbaaaaaaabbbbbbbbabbaaaaaabbbbbbbbbbaaabbabbbba + aabbbbbbabbbaabbbbaaaababbbbbbbbaaabbbbbbbbaaaaaabbbbbbbbabbbabbaaaaabbbbbbbbbbaaaaaabbbba + aabbaaaaabbbaabbaaaaaaaabaaaaaaaaaabbbbbbbaaaabbbbbbbbaaaaabbbbaaaaaaabbbbabbbbabaaaabbbba + aabbabbbabbbaaaabbbbbbbbbbbbbbbabbbbbbbbbaaaabbbbaaaaaaaaaabbbbaaaaaaaabbababbbbbaaaabbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaaaaaaaababbaaaaaaaaabbaaabbbbbbbbbbbbba + abbbbbbbabbbaaaabbbbbaabbbbabbbbbbbbbbaaaaabbbaaaaaaaaaabbbbbbbbbaaaaaabbabbbbbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaabbbbbaabbbbaaabbbaabbbbaaaaaaaaaabbbbabbbbbbaaaaabbaabbabbbbbbbbabba + aaaaaaaaaaaaaaaabbbaaabbbbbaabbbbbaabbbabbbaaaaaaaaaaaabbbbaaaabbbbaaabbbaaabbabbbbbbbabba + abbabbbbbbbaaaabbbbaaabbbbbaabbbbbabbbabbbbaaaaaabaaaabbbbbbbaaabbbaaaabbaaaaabbbbbbbaabba + abbbbbbbbbbaaabbbbaaaaabaaaaaaabbbbbbbabbbaaaaaaabbbbbbbbbbbbaaabbbbbaabbbaaaaaabbbbaaabba + abbbbbbbbbbaaabbbbaabaaaabaaaaabbbbaaabbbaaaaaaabbbbbbbbbbbbbbaabbbbbaaabbbbaaaabbbbbaabba + abbbbbbbbbaaaabbbbabaaaabbbaaabbbbaabbbbaaaaaaaabbbbbbbbbbbbbbaabbbbbaaaaabbaaaaabbbbbabba + abbaabbbbbaaaabbbbaaaaabbbbaaabbbbaabbbaaaaaabbabbbbbbabbbbbbbaababbbaaaaabbbaabbbbbbbabba + abaaabaabbaaaabbbbaaaaabbbbbaabbbbaabbaaaaaabbbbbbbbbbbabbbbabbbbbbbbbaabbbbbbbbbabbbbbbba + abbbbbbbbbaaaabbbbaaaabbbbbbaabbbbaabaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbaaabbabbabbbbbbbbbba + abbbbbabbbaaaabbbbaaabbaabbbaabbbbaaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbaabbaabbaabaababbbbbbba + abbbbbabbbaaabbbbbaaabbbbbbbaabbbbbbaaaabbbbbbbbbbbabbbbbbbbbbbbbbbaabbbabbaabaaaabbbbbbba + abbbbbbbbbaaababbaaabbbbbbbbaabbbbbbaaaaabbbbbbabbbbbbbbbbbbbabbbbbaaabbabbbaaaaaabbbbbbba + ababbabbbaaabbbbaaaabbbbbbbbaabbabbbaaaaaabbbbaabbbbbbbbbbbbbaabbbbbaabbbbbbaabaaabbbbbbba + abbbbbbbbaaabbbbbaaabbbbbaabaabaabbbbaabbbbbbbaabbbbaaaabbbbbaabbbbbbabbbbbbaabaaabbbbbbba + abbbbbbbbaaabbaaaaaabbbbbbbbaabaabbbbaaabbbbbbbabbbbbbaababbbbbbbbbbbaabbbbbbbbaaabbbbbbba + abbbbabbbaabbbaaabbbbbbbbbbbbbbabbbaaaabbbbbbbbbbbbbbbaabaabbbbbbbbbbbaabbbbaaaaabbbbbbbba + bbbbbbbbbaaaaaabbbaaaaaaababbbbbbbaaaaabbbbbbbbbbbbbbababaaaaabbbbbbbbaaabbbaaaaabbbbbbbba + bbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbaaaaaabbbbabbbbbbbbbbaabaabaaaaabbbbaaaaaaaaaaaabbbbbbbba + aaaaaaaaaaaaaabbbbbbbabbbabbbabbbaaaaaabbbbbbbbbabbbbbaaaaabaaaaaaaaaaaaaaaaaaaabbbbbbbbba + abbaaaaaaaaaaabbbbbbbbbbbbbbbaabbaaaaaabbbbbbbbaaabbbaabaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbba + bbbbbbbbbaaaaabaaaaaaaaaaaabbaaabbbaaabbaababbbaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbabbba + bbbbbbbbbaaaabbbbbbbbbbbabbbbababbaaaaabbbbbbbbbaabbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbabbba + abbaaaabaaaaabbbabbbbbbbbbbbbababaaaaabbbbbbabbababbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbba + abbaaabaaaaaaabaaaaaaaaabbbbaabaaaaaaabbbbbbaaaabbbbbbbbbbbabaaaaaaaaaaaaaabbbbaaaaaaabbba + abbbbbbbaaaaabbbbbbbbbbaabbbbaaaaaabbaabbbabbaaabbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbabbba + abbaabbbaaaaabbaaaaaaabaabbbbaaaaaabbaabbbabbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbababbaabba + abbaabbbaaaaabbbbbbbbbbbabbbbaaaaabbbaabaaaabaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbbabbba + abbaabbbaaaabbbbbbbbbbbbbbbbbaaaaabbaabbaaaabaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbaabbbb + abbbbbbaaaaabbbbbbbabbbabbbbbaaaaabbaabbbaabbbabbbbbbbbbbaaabbbbbbbbbbbbbbaabbbaabbbaabbbb + bbbabbbaaaaabbbbbbbabbbabbbbbaaaaaabaabbbaabaaaabbbbbbbbaaaabbbbbbbbbbbbbaaabbbaabbbaabbbb + abaabbbaaaaabbbbbbbabbbabbbbbbaaaaaaaabbbaaaaaaabbbbaabbaaabbbbbbbbbbbbbaaaabbbbbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaabbbbbbaaaaaaaaabbaaaaaaabbbbabbbbaaabbbbbbbbbbbbbaaabbbbbbbbaabbbb + bbbbbbbaaaaabbbbbbbabbaabbbbbbabbbbaaaabbbaaaaabbbbbaabbaaaabbbbbbbbbbbbaaaabbbbbbbbaaabba + abbbbbbaaaaabbbbbbabbbbbbbbbbbbaaabbaabaaaaababbbbbbaabbaaaabbbbbbbbbbbbbaaabbbabbbbaaabba + bbbbbbbaaaabbbbbbbabbbabbbbbbbaaaabbaabaababbbbbbbbbaabbaaaaabbbbbbbbbbbbaaabbaaabbbaaabbb + bbbbbbbaaaabbbbbbbabbbbbbbbbbbaaaaabaaaaaaaabbbbbbbbaabbbbbaaaabbbbbbbbbbaaabbbbbbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbaabbbbbbbbabbbbbbbbbbaabbbbbbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbbaaaaaabbbbbbabaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbaaaaaabbbaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabaabbbaaabbbbbbbbaaaaaaabbbabbbbbbbbbbbaaabbaabbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabaabbbbaabbbbbbbbaaaaaaaaaaaaaabbbbabaaaaabaaaaaaaaabbbb + bbbbbaaaaabbbbbbbaabbabbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbaabaaaaaaabbbaaaaaabbbbbbbbaaabbba + bbbbbaaaaaabaaabaaaabaabbbbbbbbaaababbbbbbbbbbbbabaabbabbbbbaaaaaaabaaaaaabbbbbbbbbaaaabba + bbbbbaaaaabbbbbbaaaaaaaaaaabbbbaaabaaabbbbbbbbbbaaabbaaaaaaaaaaaaabbbaaaabbbbbabbbbaaabbba + bbbbbaaaaabbbbbbbabbbabbbabbbbbbaaaaaabbbbbbbbbaababbbaaaaaaaaaaaabbbaaaabbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbabbbbbbaaaaaabbbbbabbbaabbbbbbaaabbbaaaaabbbaaaabbbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbabbbbabbaaaaaabbbbbbbbababbbbbbbbbbbbbaaabbbaaaabbbbaaabbbaaabbbb + abbbbaaaaabbbbbbaabbbabbbabbbaabbaaaaaabbbbbbbbaabbbbbbbbbbbbbbaaabbbbabbbbbbbaabbbaaabbbb + abbbaaaaaabbbbbbaabbaabbbabbbaabbbaaaaabbbbbbbaaaababbbbbbbbbbbaaabbbbaaabbbbbabbbbaaabbbb + bbbbaaaaabbbbbaaaabbaabbbabbbaabbbbaaaabbbbbbbbabbaaabbbbbbbbbaaaabbbbaaabbbbbabbbbaaabbbb + bbbbaaaaabbbbbbbabbbaabbbabbaaaabbbaaaabbbbbbbaaaaaaabbbbbbbbbaaaabbbbaabbbbbbabbbbaaabbba + bbbbaaaaabbbbbbbabbbbbbbbbbbbaaabbbaaaabbbbbbbaaabaaaabbbbbbbbaaaabbbbaabbbbbbabbbbaabbbbb + bbbaaaaaabbbbbbbabbbbbbbabbbbaaabbbaaaaabbbbbbaabaaaaabbbbbbbaaaaabbbaaabbbbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbabbbbaaabbbaaaaabbbbbbbbbbaaaabbbbbbaaaaaabbbaaabaabbaaabbaaabbabb + abbaaaaaababbbbbabbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbaaaabbbbbbaaaaaabbbaabbbbbbaabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaaaaabbbaaaabbbaaaaabbbbbbbbbbaaaabbbbbbaaaaaabbbaabbbbbbbbbbbaaabbbbb + bbbaaaaabbbbbbbbbbbaaaaaaaaaaaaabbbaaaaaabbbbaaaabaaabbbbbbaaaaaaabbbaabbbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbbbbbbbbbbaababbbaaaaabbbaaaaaaaaaabbbbbaaaaaaaabbbabbbbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaaabbbbbbbaaaabbbabaaaaaaaaaaaaaabbbbbbbaaaaaaaaabbabbbbbbbabbbbaabbbbbb + bbaaaaaabbbbbbbabbbaaaaaaaaaaaaabbbabaaabbbbbbbaaabbbbbbbbabbaaaaaabaabbaaaaaaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbabbbbaababbbabaaabbbbbbbaaabbbbbbbbbbbaaaabbbaabbbaaaaaaaaaaabbbbba + bbaaaaaabbaaabaabbbabbbabbbbaabbbbbaabbaaaaaabaaaabbbbbbbbbbaabbbbbbaabbbbbbbabbbbaabbbbba + bbaaaaabbbabbbaaaaaaaaaabbbbaabbbbaabbabaababbabaabbbbaaabbaabbbbbbaabbbabbbbbbbbbaaabbbba + bbaaaaabbbbbbbbbbbbabbaaabbaabbbbbabbababaabababaaabbbaaaabaabbbbbaabbbbaaabaaabbbaaabbbba + bbaaaaabbbabbbabbbbabbbabbbaabbbaaabbaababbaababaaabbbbbaaaaabbbbbaabbbbaabbaabbbaaaabbbba + bbaaaaabbbabbbabbbabbbbbbbbabbbbaaabbaaabbbbabbbaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabbbba + bbaaaaabbbaabbabbbabbbaabbbabbbabaaabaababbabbbbaaabbbbbbbaaaaabbbaaabbbbbbbabbbbbaaabbbba + baaaaaabbbaabbabbbabbbaabbbabbaababbbababbabababaaabbbbaaabbbbbbbbaaabbbbbbbaaabbaaaaabbba + baaaaabbbaabaaabbaabbbabbbbbbbaababbbaabaaaaabbbaaabbbaaaaaaaabbbaaaaaabbbbbbbbbbbaaabbbbb + baaaaabbbbabbaabbbabbaabbbbbbaaabaabbbaaaaabbbbbaaabbbaaaaaaaaabbaaaaaaabbbbbbbbbaaabbbbba + baaaaabbbbbbbaabbbabbbabbbbbaaabbaabbaaaaaaabbbbaaabbaabbbbaaabbbaaaaaaaaabbbbbbbbaaaabbba + baaaaabbbbbbbaabbbabbbabbbbaaaabbaabbaaaaaabababaaabbbbbbbbbbbbbbaaaaaaaaaabbbbbbbaabbbbba + baaaaabbbabbbaabbbabbbbbbbaaaaabbaabbaababbaabbbaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaabbbbba + baaaaabbbabbbaabbaabbbbbaaaaaaabbaabbaaababaabbbaaabbaaaabbbbbbbbaaaaaaaaaaaaaaabbaaababba`, + map `ababbbaabbabbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbabbaaabbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbbaaaaabbaabaaaaaaaaaaabaaaaabbbaabbaabbbbbbbbbbbabbabbbbbbbbabbbabbbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbaabbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabba + aaabbaaaaabbbaaaaabbabbaaabaaaaaaaaabbaaabbbaabbbbbbbbabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbabba + abbbbabbaabbbaaabaaaaaaaaaaaaaaaaaaabbaaaabaabbbbbbaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaabba + aabbbabbbbbbaaabbbaaaaaaaaaaaabaaaaabbbbabbabbbbbbaaaaaaaaaaaaaaaaaaabbbbbaaaaaaaaaabaaaba + aabbbbbbbabbaaabbbaabbbbbbbaabbbbaaabbbbabbbbbbbbabbaaaaaaaaaaaaaaaaabbbbbaabaaaaaabbabbba + aabbbbbbaabbaaabbbaabbbbbbbaabbaababbbbbbbbbbbbbaaaaaaaaabbbbbbaaaaaaabbbbbbbbbaaabbabbbba + aabbbbbbabbbaabbbbaaaaaababbaaaaaaabbbbbbbbbbbaaaaaaaabbbbbbbbbbbaaaaabbbbbbbbbaaaaaabbbba + aabbaaaaaabbaabbbaaaaaabbbbaaaaaaaaabbbbbbbaaaaaaabbbbbbbbbaabbbabaaaaabbbbbbbbabaaaabbbba + aabbabbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbabbbaaaaaaabbbbaaaabbbbabbbbbaaaabbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaabbbaaaaaaabbbabbbbbbbbabbbba + abbbbbbbabbbaaaabbbbbabbbbbbbbbbbbbabbbbbaaaabbbbaaaaaaaaaaaabbbaaaaaaaaabbaabbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaaabbbbaabbbbaaabbbaaaaabbbbaaaaaaaaabbbbbbbbabaaabaabbababbbbbbbbabba + aaaaaaaaaaaaaaaabbbaaabbbbbaabbbbbaabbbbaabbbbaaaaaaaaaaabbbbbbbbbbbaaaaabbaabbbbbbbbbabbb + abbabbbbbbbaaaabbbbaaabbbbbaabbbbbbabbbbaabbaaaaaaaaaaaaabbbbbbaaabbaaaaabbaaabbbbbbbaabbb + abbbbbbbbbbaaabbbbaaaabbaaaaababbbbabbbaabbbbaaaaaabbaaaabbbbbbbaaabbaaaabbaaaaabbbbbaabba + abbbbbbabbbaaabbbbaabaaaaaaaaaabbbbbbbaabbbbaaaaaaabbbbabbbbbbbbaaabbbaaabbbaaaaabbbbaabba + abbbbbbbbbaaaabbbbabaaaabbbaaabbbbbaaaabbbbaaaaaaaabbbbbbbbbbbbbaaabbbaaaabbbbaaaabbbbabba + abbabbbbbbaaaabbbbaaaaabbbbaaabbbbbaaabbbbaaaaaabbbbbbbbbbbbbbbabbaaabbaaabbbbbaaabbbbabba + abaaababbbaaaabbbbaaaaabbbbaaaabbbbaaabbaaaaaaabbbbbbbbbbabbbbbabbabbbbbaaaaabbbbbbbbbbbba + abbbbbabbbaaaabbbbaaaababbbbaaabbbbaaabbaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbaaababbbbbbabbbbba + abbbbbabbbaaaabbbbaaabbbabbbaabbbbbaaaaaaaaaabbbbbbbbabbbbbbbabbbbbbbbbbbaabbabbabbbbbbbba + abbbbbabbbaaabbbbbaaabbbbbbbabbbbbbbaaaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbabbbabbaabaaaabbbbba + abbbbbbbbbaaababbaaabbbbbbbbaabbbbbbbaaaabbaabbbbbbbbbaabbbbbbbbbbbbaaaabbbbbaabaaaabbbbba + abbbbabbbaaabbbbaaaabbbbbbbbaabbbaabbaaaabbbbbbbbaabbbaabbbbbbabbbbbbaaabbbabbaabaaabbbbbb + abbbbabbbaaabbbbbaaabbbbbaaaaabbbaabbaaaabbbbbbbaaabbaaaaabbbbbabbbbbababbbabbbaaaaabbbbba + abbbbbbbbaaabbaaaaaabbbbbabaaabbbaabbbaaabbbbbbbbaabbbbbaabbbbbbbabbabbbabbbbaabaaaabbbbba + abbbbabbbaabbbaabbbbbbbbbbbbbbbbaabbaaaaabbbbbbbbbabbbbbaaabbbbbbbaabbbbaabbbbbbbaabbbbbba + bbbbbabbbaaaaaabbbaabbaaababbbbbabbbaaaabbbbbbbbbbbbbbbbbaaaaaabbbbbabbbaaabbbabaaabbbbbba + bbbbbbbbbaaaaabbbbbbbabbbabbbbbbbbbaaaaabbbbbbbbbbabbbbbbabaaaaaabbbbbbbaaabbbaaaaabbbbbba + aaaaaaaaaaaaaabbbbbbbbbbbabbbbabbbaaaaaababababaabbbbbbbaaabaaaaaaaabbaaaaaaaaaaaabbbbbbba + abaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbaaaaabbabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbba + abbbbbbbbaaaaabaaaaaaaaaaaabbaaabbaaaaaaabbbbbbbbbbababaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbba + bbbbbbbbaaaaabbbbbbbbbbbabbbbaababbbaaaabbbbbbbbbbaaaabaaaaaaaaaaaaaaaaaaaaaaaaabbbbbabbba + abbaaabbaaaaabbbbbbbbbbbbbbbbaababbaaaaabbbbbbbabbaabbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbba + bbbaaaaaaaaaaabaaaaaaaaabbbbbaabaaaaaaabbbbbbbbbbababbbbbbbbaaaaaaaaaaaaaaaaaabbbaaaaabbba + abbbbbbbaaaaabbbbbbbbbbbabbbbaabbaaaaaaabbbbbabaaaabbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbabbba + abbaabbbaaaaabbbaaaaaabaabbbbaaabaabaaaabbbbbabaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbabbaabba + abbabbbbaaaaabbbbbbbbbbbabbbbaaaaaabbaaabbbabaaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbabbbbabbba + abbaabbbaaaabbbbbbbbbbbbbbbbbaaaaaabaaabbbabbaaaabbbbbbbbbbbabbbbbbbbaaabbbbbbbaabbbaabbbb + abbabbbaaaaabbbbbbbabbbbbbbbbaaaaabbaabbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaabbbaabbbb + abbabbbaaaaabbbbbbbabbbabbbbbaaaaaaaaabbbaaababaaabbbbbabbbbaabbbbbbbbbbbbbbabbabbbbaabbbb + bbaabbbaaaaabbbbbbbabbbabbbbbbaaaaaabaabbaabbaaaaabbbbaabbabaabbbbbbbbbbbbbaaabbbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaabbbbbbaaaaaaaaabbaabbaaaaabbbbaaaabbaabbbbbbbbbbbbaaaabbbbbbaabbbb + bbbbbbbaaaaabbbbbbbaabaaabbbbbaaabaaaaaabbabbaababbbbbaaaaababbbbbbbbbabbbaaaabbbbbbaaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbaaaabaaaaaaabbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbaaabba + bbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbaaaaaaaaabbbbbbbaaabaaaaabbbbbbbbbbbbaaaabaabbbaaabbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbaaaaaabbbbbbbbbaaabbbbaaabbbbbbbbbbbaaabbbbbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaababbaaaaaabbbbbbbbbbabbbbbbaaabbbbbbbbbbaaabbbbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbaaaaaabbbbbabbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbaaaaaaabbbaaabbabbaaaaaabbbbbabbbabbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabaaabbbbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabaaabbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbabbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabbaabbbaaabbbbbbbbaaaaaaaaabaabbbbbbbbbbaabbaaaaaaaabbbb + bbbbbaaaaabbbbbbbaabbabbbbbbbbbaaabbaabbbbaaabbbbbbbbbaaaaaaaaaaaaabbbbbaaaaabbbbbbaaabbba + bbbbbaaaaaabaaabaaaababbbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbaaaaaabbbbbbbaaabbba + bbbbbaaaaabbaaaaaaaaaaaaaaabbbbbaaabaabbbbbbbbbbbbbaabaaaabbbbaaaaaaabaaaaabbbbbbbbaaabbba + abbbbaaaaabbbbbbbabbbbbbbabbbbbbaaaaaabbbbbbbbbbbaaabbbaaaaaaaaaaaaabbaaaabbbbbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbabbbbabbaaaaaabbbbbbbbbbabbbbbbaaaaaaaaaaabbbaaaabbbbabbbbaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbaabbaaaaaabbbbbbbbbbaabbbbbaaabbbbbaaabbbaaaabbbbaabbbaaabbbb + abbbbaaaaabbbbbbaabbbbbbbabbbaabbaaaaaabbbbbabbbbabbbbbbbbbbbbbbbaabbbaabbbbbbaabbbaaabbbb + abbbaaaaaabbbbbbaabbabbbaabbbaabbbaaaaabbbbbbbbbaaabbbbbbbbbbbbbbaabbbbaabbbbbabbbbaaabbbb + abbbaaaaabbbbbaaaabbaabbaabbbaabbbbaaaaabbbbbbbbabbaaabbbbbbbbbbbaabbbbaabbbbbabbbbaaabbbb + bbbbaaaaabbbbbbbabbbaabbaabbaaabbbbaaaabbbbbbbbbabbaaabbbbbbbbbbaaabbbaaabbbbbabbbbaabbbba + bbbbaaaaabbbbbbbabbbbbbbbbbbbaaabbbaaaaabbbbbbaabbaaaaabbbbbbbbaaaabbbbaabbbbbabbbbaabbbbb + bbbaaaaaabbbbbbbabbbbbbbabbbbaabbbbaaaaaabbbbbaabbaaaabbbbbbbbbaaaaabbbaabbbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbabbbbaaabbbaaaaabbbbbbbbbbbaaabbbbbbbbbaaaabbbbaabaabaaabbaaabbabb + abbaaaaaababbbbbabbbbbbbbbbbbaaabbbaaababbbbbbbbabbaaabbbbbbbbaaaaaabbaabbbbbaabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaaaaabbbaaaabbbaaaaabbbbbbbbaabaaaabbbbbbbaaaaaabbaabbbbbbbbbbaaabbbbb + bbbaaaaabbbbbbbbbbbaaaaaaaaaaaaabbbaaaaaabbbbbbbabbaaaabbbbbbaaaaabbbbaabbbbbbbbbbaaabbbba + bbaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbaaaaabbbaaaaaaabaaaabbbbbaaaaaaabbbabbbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaabbbbbbbbaaaabbbaabaaabbaaaaaaaaaaabbbbbbaaaaaaabbbabbbbbbabbbbaabbbbbb + bbaaaaaabbbbbbbabbbaaaaaaaabaabbbbbabaaabbbbbbbbaabaaabbbbbaaaaaaaaabaabbaaaaaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbabbbbaabbbbbabaaaabbbbbbbaabbbbbbbbbabbaaaaaaaaabbbaaaaaaaaaabbbbba + bbaaaaaabbaaaababbbabbbabbbbaabbbbbababaaaaaaaaaaabbbbbbbbaabbaaaaaaaabbbbbbbabbbbaabbbbba + bbaaaaaabbaabbaaaaaaaaaabbbaabbbbbbaabbababaabbaaababbbbaabbbaaaabbbbabbbbbbbbbbbbaaabbbba + bbaaaaabbbbbbbbbbbbabbaaabbaabbbbababaababaaaababaaabbbaaaabaabbbbbbabbbaaabaabbbbaaabbbba + bbaaaaabbbbbbbabbbbbbbbabbbaabbababaababbabaabbabaaabbbaaaaaaabbbbbaabbbaabbaaaabbaaabbbba + bbaaaaabbbabbbabbbabbbbbbbbabbbabababbbaababaabaaaabbbbabaaaaabbbbbabbbbbbbbbbbbbbaaaabbba + bbaaaaabbbaabbabbbabbbabbbbabbbabababbaababaabbbaaaabbbbbbaaaaababbabbbbbabbabbbbbaaabbbba + baaaaaabbbaabbabbbabbbaabbbabbabbababbbaababbabbaaabbbbbbbbbbaaabbbabbbbbabbaaabbaaaaabbba + baaaaabbbaabaaabbaabbbabbbbbbaabbaaabbabaabaabbbaaabbbbbaaabbbbbbbaaabbbbbbbbbbbbbaaabbbbb + baaaaabbbbabbaabbbabbbabbbbbaaabbaaabbbaabababbbaaabbbbbbaaaaabbbbaaaabbbbbbbbbbbbaaabbbba + baaaaabbbbbbbaabbbabbbabbbbaaabbbaaabbabaabaabbbaaabbbbabaaaaaabbaaaaaaabbbbbbbbbbaaabbbba + baaaaabbbbbbbaabbbabbbbbbbbaaabbbaaabbbaababbbbbaaabbbaabbbbabbbbaaaaaaaabbbbbbbbbaaaaabba + baaaaabbbbbbbaabbaabbbbbbbaaaabbbaaabbabaabaabbbaaabbaaabbbbbbbbbaaaaaaaaaabbbbbbaaaabbbba + baaaaabbbabbbabbbaabbbbaaaaaaabbbaabbbaabbababbbaaabbaaabbbbbbbbbaaaaaaaaaaaaabbbaaaababba`, + map `ababbaaabaabbaaaaabbbbbbbbbbbbbbabbbbaaaabbbbbbbaabbbbbbbbbbbaabaabbbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbbaaaaabbaabaaaaaaaaaaabaaaaabbbaaaaaabbbbbbbbbbbabbabbbbbbbbaabbabbbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabbaaaaabbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabba + ababbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabba + aabbbaaaaabbbaaaaabbaaaaaaaaaaaaaaaaabbaabbbaaabbbbbbaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbabba + abbbbabbaabbaaabbaaaaaaaaaaaaaaaaaaaabbaaaaaaabbbbbbbaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaabba + aabbbbbbbbbbaaabbbaaaaaaaaaaaaaaaaaaabbbbabaabbbbbbaaaaaaaaaaaaaaaaaabbbbbaaaaaaaaaabaaaba + aabbbabbbabbaaabbbaabbbbbaaaaabbbaaabbbbabbbbbbbbbbabbbbbbaaaaaaaaaaabbbbbbbbbaaaabbbabbba + aabbbabbaabbaaabbbaaaabbbbbbbbbbbbaabbbbbbbbbbbbbaaaaaaaaaaabbbbaaaaaaabbbbbbbbaaaaaabbbba + aabbbbbbabbbaaabbbaaaaabbbbbaabaaaaabbbbbbbbbbbaaaaaaaaabbbbbbbaabbaaaaaabbbbbbaaaaaabbbba + aabbaaaaaabbaabbaaaaaaabbbbaaaaaaaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaabbbba + aabbabbbabbbaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbaaaaabbbaaaaaaaabaaabbbbaaaababbbbbbbaaabbbba + aabbbbbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaaaaaaaabbbbbaaaaaabbbbbbbbbbababba + abbbbbbbabbbaaabbbbbbaabbbbabbbbbbbabbbbbbaaaaabbbbaaaaaaaaaaaabbbbaaaaaaaabbabbbbbbbbabba + abbbbbbbbbbaaaabbbbaaabbbbbaabbbbaaaabbbaaaaaabbbbaaaaaaaaabbaaabbaaaaaabaabbabbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaabbbbbaabbbbbaaabbbbbaaabbbaaaaaaaaaaabbbbbbbaabbaabaabbabbbbbbbbabbb + abbabbbbbbbaaaabbbbaaabbbbbbabbbbbaaabbbbaaabbaaaaaaaaabaaabbbbbbaaabbaaaaabbabbbbbbbaabbb + abbbbbbbbbbaaabbbbaaaabbaaaaaaabbbbabbbbaaabbbaaaaaaaabbaaaabbbbbbaaaabaaaabbaaaabbbbaabba + abbbbbbabbbaaabbbaaaaaaaabaaaaabbbbbbbbaaabbbaaaaaaaabbbaaaabbbbbbaaabbbaaabbaaaabbbbbabba + abbbbbbbbbbaaabbbbaaaaabbbbaaabbbbbbbaaaabbbaaaaaababbbbbababbbbbbaaabbbaaaabbaaaaabbbbbba + abbabbbbbbaaaababbaaaaabbbbaaaabbbbbaaaabbbaaaaaabbbbbbbbbbbbbbbbbaaaabbbaaabbbbaaaabbbbba + abaaabaabbaaaabbbbaaaabbbbbaaaaabbbbaaaabbaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbaaaabbbababbbbba + abbbbbabbbaaabbbbbaaabbbbbbbaaabbbbbaaaabaaaaaabbbbbbbbbbbbaabbbbbabbbbbbbaaaaabbbbbabbbba + abbbbbabbbaaaabbbbbaabbbabbbaaabbbbbaaaaaaaaaaabbbbbbbbbbbbabbbabbbbbbbbbbbaaaabbbbbbbbbba + abbbbbabbbaaabbabbaaabbbbbbbaabbbbbbbbaaaaabaaabbbbbbbbabbbbbbbbbbbbbbbbabbbaababbababbbba + abbbbbbbbbaaabbbbaaabbbbbbbbaaabbbbbbbaaaabbaaabbbbbbbbaabbbbbbbbbbbbbbaaabbbbbaabaaabbbba + abbbbabbbaaabbbbbaaabbbbbbbbaabbbbbabbaaaabbbbbbbbbabbbbaaabbbbbbabbbbbbaabbbbbbaaaaabbbbb + abbbbabbbaaabbbabaaaabbbbaaaaabbbbaabbbaaabbbbbbbbbaabbbaaabbbbbbbbbbbbbaaabbaabaabaabbbba + abbbbbbbbaaaabbaaaaabbbbbabbaabbbbaabbbaabbbbbbbbbbaabbbaaaabbbbbbbbbbbbbaaabbbaabaaabbbba + abbbbabbbaabbaaabbbbbbbbbbbbbbbbbaabbbaaabbbbbbbbbbaabbbbbbaabbbbbbbbabbbbaaabbbbbaaabbbba + bbbbbabbbaabbaabbbaabaaaabaaabbbabbbaaaaabbbbbabbbbbabbbbbbaaaaaabbbbbabbbaaabbbbbbaabbbba + bbbbbbbbbaaaaabbbbbbbabbbabbbbbbbbbbaaaabbbbbbabbbbaabbbbbbbaaaaaaabbbbbbbbaabbbaaaabbbbba + aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbaaaaabbbababbbabbbbbbbbbaaaaaaaaaaabbbaaaaabbaaaabbbbba + abaaaaaaaaaaaabbbbbbbbbbbbbbbbaaabbaaaaabbbbbbbbbabbbbbbbbbaaaaabaaaaaaaaaaaaaaaaaaabbbbba + abbbbbbbbaaaaabaaaaaaaaaaaaaabaababaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbbbbaaaaabbbbbbbabbbaabbbbbabaaaaaabbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbba + abbaabbbaaaaabbbabbbbbbbbbbbbbaabaabaaaabbbbbbbbabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbba + bbbaabbaaaaaaaaaaaaaaaaabbbbbbaabaaaaaaabbbbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbabbbba + abbbbbbbaaaaabbbbbbbbbbbabbbbbaaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbba + abbaabbbaaaaabbbaaaaaabaabbbbbaaaaabbaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbabba + abbabbbbaaaaabbbbbbbbbbbabbbbaaaaaabaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbabba + abbaabbbaaaabbbbbbbbbbbbbbbbbbaaaaabaaabbbbbabbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbabbbaabbbb + abbabbbaaaaabbbbbbbabbbbbbbbbbaaaabbaabbbbbbbabbabbbbbbbbabbbbbbbbbbbbbbbbbbbbbaabbbaabbbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaabaaabbbbbaabaaaaabbbbbabbbbabbbbbbbbbbbbbbaabbbbbaabbbb + bbaabbbaaaaabbbbbbbabbbabbbbbbaaaaaaaaaabbbbaabaaaaabbbaaabbbaaabbbbbbbbbbbbaaabbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaabbbbbbaaaaaaaaaaabababbaaabbbbbaaaabbaaabbbbbbbbbbbbaaabbbbbaabbbb + bbbbbbbaaaaabbbbbbbabbaabbbbbbaaabbbbaaaabaaaaaaaabbbbbaaaabbbaabbbbbbbbbbbaaaabbbbbaaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbbabbbbbbaaaaaaaaaaaaabbbbbaaabbaabbbbbbbabbbbaaabbbbbbaaabba + bbbbbbbaaaabbbbbbbbbbbabbbbbbbaabaaabbbaaaaaabbbbbbbbbbbaaabbaaabbbbbbbbbbbaaabbbbbbaaabbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaabbbbbbbbbaaabbbbaabbbbbbbbbbbaaabbbbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbaaaabbbbbababbbbbbbbaaabbbbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbbbaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbaaabbbbbbbaaabba + bbbbbbaaaaabbbbbbbabbaaabaaabbbaaabbbabbaaaaaaabbbbbbbbababbbbbbbbbbbbbbbbaaabbbbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbaabbbaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbaabbbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbaabbbaaaabbbbbbbaaaaaaaaaaabbbbbbbbbbbaabbaaaaaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbbaaabbaabbbbaaabbbbbbbbbaaaaaaaaaaaaabbbbbaaaaabbbbbaaabbba + bbbbbaaaaaabaaabaaabbabbbbbbbbbbaaabbaabbbbbbbbbbbbbbbbbbbbabbaaaaaaabbbaaaaabbbbbbaaabbba + bbbbbaaaaabbaaaaaaaaaaaaaaaabbabbaabbaabbbbbbbbbbbbabaaaaaabbbbaaaaaaabaaaaabbbbbbbaaabbba + abbbbaaaaabbbbbbbabbbbbbbabbbbabbaaabaaabbbbbbbbbbaaaabbaaaaaaaaaaaaabbaaaabbbbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbabbbbabbaaaabaabbbbbbbbbbababbbbaaaaaaaaaaaabbaaabbbbbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbabbbaaababbbbbbabbbababbbbbbaaabbbbaaabbbaaabbbbaabbbaaaabbb + abbbbaaaaabbbbbbaabbbabbbabbbaabbbaaabbabbbbbbbbbabbbbbbbbbbbbbbbbbabbbaabbbbbaabbbaaaabbb + abbbaaaaaabbbbbbaabbbabbbabbbaabbbbaaababbbbbbbbaaaabbbbbbbbbbbbbbaabbbaabbbbbabbbbaaaabbb + bbbbaaaaabbbbbaaaabbaabbbabbbaabbbbaaaaabbbbbbbbbbbaaaabbbbbbbbbbbaaabbaaabbbbabbbbaaaabbb + bbbbaaaaabbbbbbbabbbaabbaabbaaabbbbaaaaabbbbbbbbbbbaaaabbbbbbbbbbbaaabbaabbbbbabbbbaaaabba + bbbbaaaaabbbbbbbabbbbbbbbbbbbaabbbbaaaabbbbbbbaabbaaaaaabbbbbbbbbaaaabbaabbbbbabbbbaaaabbb + bbbaaaaaabbbbbbbabbbbbbbabbbbaaabbbaaaabbbbbbbaabaaaaaaabbbbbbbbaaaaabbaabbbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbabbbbaaabbbaaabbbbbbbbbbbbbbaaaabbbbbbbbaaaaabbaabbabaabbbaaaababb + abbaaaaaababbbbbabbbbbbbbbbbbaabbbbaaabbbbbbbbbbabbbaaaaabbbbbbbaaaaabbabbbbbaabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaaaaabbbaaabbbbaaaaaabbbbbbbaabbaaaabbbbbbbaaaaaabbabbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbaaaaaaaaaaaabbbaaaaaaabbbbbbbaabaaaaabbbbbbbaaaabbbbabbbbbbbbbbaaabbbba + bbaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbaaaaaaabbbaaaaaabaaaaabbbbbbaaabbbbbbbbbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaabbbbbbbbaabbbbaaabbaabbbaaaaaaabaaaabbbbbaaaaaaabbbbbbbbbabbbbaaabbbba + bbaaaaaabbbbbbbabbbaaaaaaaabaabbbbaaabaaabbbbbbbbaaaaaabbbbbbaaaaaaaaabbbaabaaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbabbbbabbbbbaaabaaabbbbbbbbaabbbabbbbbaaaaaaaaaaabbaaaaaaaaaaaabbbba + bbaaaaaabbaaaababbbabbbabbbbabbbabaaababaaaaaabaaaabbbbbbbbaaaaaaaaaaaabbbbbbabbbbaabbbbba + bbaaaaaabbaabbaaaaaaaaaabbbaabababaaabbabaabaabbaaababbbbaaaaabaaaabbabbbbbbbbbbbbaabbbbba + bbaaaaabbbbbbbbbbbbabbaaabbabbababaaabbbbbbaaabbaaaaabbbbaaaaaaaabbbbabbaaaaaaabbbaaabbbba + bbaaaaabbbbbbbabbbbbbbbabbbabbbbabaaabbabaabaabbaaaaabbbbaaaaaabbbbbabbbbbbbbabbbbaaabbbba + bbaaaaabbbabbbabbbabbbbbbbbbbabbabaaabbbabbababbaaaaabbbaaaaaaabbbaabbbbbbbbbbbbbbaaabbbba + bbaaaaabbbaabbabbbabbbabbbbbaabbabaaabbababbaabbbaaaaabbbbbaaaaabaaabbbbaabbaabbbbaaabbbba + baaaaaabbbaabbabbbabbbabbbbaaabbaaaabbbbabbababbbaaaabbbbbbbbbaaaabbbbbbaaaaaaabbbaaaabbba + baaaaabbbaabaaabbaaabbbbbbbaaabbaaaabbbabaabaabbbaaaaabbbbabbbbbbbbabbbbbbbbbbbbbbaaabbbbb + baaaaabbbbabbaabbbaabbbbbbaaabbbaaaabbbbabaababbbaaaaaaabbaaabbbbbaaaabbbbbbbbbbbbaaaabbba + baaaaabbbbbbbaabbbabbbbbbaaaabbbaaaabbbabaababbbbaaaaaaabbbaaaabbbaaaaabbbbbbbbbbbaaabbbba + baaaaabbbbbbbaabbbbbbbbbaaaaabbbaaaabbbbabaababbbaaaaaaabbbbbbbbbaaaaaaabbbbbbbbbbaaaaabba + baaaaabbbbbbbaabbbbbbbaaaaaaabbbaaabbbaababbaabbbaaaaaaaabbbbbbbaaaaaaaaaaabbbbbbaaaababba + baaaaabbbabbbabbbbbaaaaaaaaaabbbaaabbbbaababbabbbaaaaaaaaabbbbbbaaaaaaaaaaaaabbbbaaaaaabba`, + map `ababbaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbaabaabbbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbbaaaaabbaabaaaaaaaaaabbbaaaabbbaaaaaabbbabbbbbbbabbbbbbbabbbaabbabbbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaaaaababbbbbbbbbbbbbbbbbbbbbbabba + aabbbaaaaabbbaaaaabbaaaaaaaaaaaaaaaaabbaaabbaaabbbbbbaaabaaaaaaaaaabbbbbbbbbbbbbbbbbbbabba + abbbbabbaabbbaaabaaaaaaaaaaaaaaaaaaaabbaaaaaaaaabbbbbbaaaaaaaaaaaaaaabbbaaaaaaaaaaaaaaabba + aabbbbbbbbbbaaabbbaaaaaaaaaaaaabbaaaabbbaabaabbbbbbbaaaaaaaaaaaaaaaaaabbbbbaaaaaaaaabaaaba + aabbbabbbabbaaabbbaabbbbbaaaaabbbbbbabbbbbbbbbbbbbbabbbbbbbbaaaaaaaaaabbbbbbbbaaaabbbabbba + aabbbabbabbbaaabbbaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbaaaaaaabbbbbbbaaaaaabbbba + aabbbbbbabbbaaabbbaaaaabbbbbaaaabbabbbbbbbbbbbbbaaaaaaaaaabbbbbbaaabaaaaaabbbbbaaaaaabbbba + aabbaaaaaabbaaabaaaaaaabbbbaaaaabaabbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbaaaabbbba + babbabbbabbbaaaaabbbbbbbbbbbbbbbabbbabbbbbbbbaaaaaabbbbaaaabaaabbbbbabaaaababbbbbbaaabbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaaaabbbbaaaaaaaaaabbbbbbaaaaabbbbbbbbbababba + abbbabbbabbbaaabbbbbbaabbbbbbbbbbbbabbbbbbbaaaaaabbbaaaaaaaaaaaaabbbbbaaaaabbbabbbbbbbabba + abbbbbbbbbbaaaabbbbaaabbbbbaabbbbaaabbbbbaaaaaaabbbbaaaaaaaaabbaaabbaaaaaabaababbbbbbbabba + aaaaaaaaaaaaaaabbbbaaabbbbbaabbbbbaaabbbbbbaaaababaaaaaaaaaaaabbbbaaaaaaaabaababbbbbbbabbb + abbabbbbbbbaaaabbbbaaabbbbbbabbbbbaabbbbbbaaabbbbaaaaaaaabaaaabbbbaaaaabaaababbabbbbbaabbb + abbbbbbbbbbaaabbbbaaaabbaaaaabbbbbbabbbbbaaabbbbaaaaaaaabbbaaabbbbaaaabbbaaaabbaaabbbbbbba + abbbbbbabbbaaabbaaaaaaaaabaaaaabbbbbbbbbaaabbbbaaaaaaaabbbbaaaabbbbbaabbbaaaabbaaabbbbbbba + abbbbbbbbbbaaabbbbaaaaabbbbaaaabbbbabbaaaaabbbaaaaaaabbbbbbbbabbbbbbaaaabbabaabbaaaabbbbba + abbabbbbbbaaaaabbbaaaaabbbbaaabbbbbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbaaaabbbbaabbbbaabbbbba + abaaabaabbaabbabbbaaaabbbbbbaabbbbbbbaaaabbbaaaaabbbbbbbbbbbbabbbbbbaaaabbbbaaabbbbbabbbba + abbbbbbbbbaabbabbbaaabbbbbbbaaaabbbbbaaaabbaaaaabbbbbbbbbbbbaaabbbbbaaabbbbbaaaabbbbbbbbba + abbbbbabbbaaaabbbbbaabbbabbbaaabbbbbbbaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbba + abbbbbabbbaaababbbaaabbbbbbbaabbbbbbbbaaaaaaabababbbbbbbbbbbbabbbbbbbbbbbbabbbababbbabbbba + abbbbbbbbbaaaabbbaaabbbbbbbbaaabbbbbabaaaaaabbbbbbbbbbbbbbabbabbbbbbbbbbbbaabbabaaabaabbba + abbbbabbbaaabbbbbaaabbbbbbbbaaabbbbaabaaaabbbbbbbbbbbbabbbbaaabbbbbbbbbbbbaabbbabaabaabbbb + abbbbabbbaaabbbbbaaaaaabbaaaaaabbbbaabbbaabbbbbbbbbbbbabbbbaabbbbbbbbbbbbbaaabbaabaababbbb + abbbbbbbbaaabbaaaaaabbbbbbbbaaabbbaaabbbaabbbbbbbbbbbaabbbaaaabbbbbbbaabbbbaaaabaabaaabbbb + abbbbabbbaabbaaabbbbbbaabbbbbbbbbbaaabaaaaabbbbbbbbbbbabbbbbaaabbbbbbbbabbbbaabbbbbbaabbbb + bbbbbabbbaabbaabbaaabaaaaaaaabbbbbabbaaaabbbbbbbbbbbbbabbbbbbbaaaaabbbbbabbbaaabbbbbaabbba + bbbbbbbbbaaaaabbbbbbbabbbabbbbbbbbabbaaaabbbbbbbbaabbbaabbbbbbaaaaaaabbbbbbbaaabbbaaaabbba + aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaabaabbbbbbbaabbbbbbbaaaaaaaaaaaabbbaaaaabaaaabbbba + abaaaaaaaaaaaabbbbbbbbbbbbbbbbaaabbbaaaaababbbbbbbbaabbabbbbbaaaabbaaaaaaaaaaaaaaaaaabbbba + abbbbbbbbaaaaabaaaaaaaaaaaaaabaaabaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbba + abbbbbbbaaaaabbbbbbbabbbaabbbbbabbaaaaaabbbbbbbbbbaabbaaabbaaaaaaaaaaaaaaaaaaaaaaaabbbbbba + abbaabbbaaaaabbbabbbbbbbbbbbbbaaabaaaaaabbbbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbba + bbbaabbaaaaaaaaaaaaaaaaabbbbbbaaabaaaaaabbbbbbbbaaaaabbbbbbbbbaaaaaaaaaabaaaaaaaaabbbbbbba + abbbbbbbaaaaabbbbbbbbbbbabbbbbaaaaabaaaabbbbbbbbbbaaababbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbba + abbaabbbaaaaabbbaaaaaabaabbbbbaaaaabaaaabbbbbbbbbbaaababbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbba + abbaabbbaaaaabbbbbbbbbbbabbbbbaaaaabaaabbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbaabbbaaaabbbbbbbbbbbbbbbbbbaaaaabbaabbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbb + abbabbbaaaaabbbbbbbabbbbbbbbbbaaaaabbbabbbbbabaabaabbbbbbbbabbbabbbbbbbbbbbbbbbbabbbaabbbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaabbaabbbbbabbabaaabbbbbaaabbbabbbbbbbbbbbbbbabbbbbaabbbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaaaaaaaabbbbbabbaaaabbbbaaabbbaabbbbbbbbbbbbaabbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaaabbbbbaaaaaaaaaaaaabbbaaaaaaabbbbaaabbbabbbbbbbbbbbbbaabbbbbaabbbb + bbbabbbaaaaabbbbbbaabbaabbbbbbbaaabbbbaaaaabbaaaaaaabbbbbaaabbbaabbbbbbbbbbbaaabbbbbaaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbaaaaaaaaaaaaabbbbbaaaabaaaabbbbbbaabbaaabbbbbaaabba + bbbbbbbaaaabbbbbbbbbbbabbbbbbbaaabaabbbbaaaaaaabbbbbbbbbbaaaabaaaabbbbbbbbbaaaabbbbbaaabbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbaaabbbaaabbbbbbbbbaaaabbbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaaabbbbbbbabaaabbbbbbbabbbbbbbaaabbbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbbbbaaaaaaabbbbbababaaabbbbbbbbbbbbbbbaaabbbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbaaaaaabbbaaabbbaabbbaaaaaaabbbbbbabaabbbbbbbbbbbbbbbbaaabbbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbaaaaaabbbbbbbbabbbbbbbbbbbbbbbbaaaabbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaabaabbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbaaabbbbbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbbaaaabbbabbbbaaaaabbbbabbaaaaaaaabbbbbbbbbbbbbaabaaaaaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbbaaabbbabbbbbbaaabbbbbbbbaaaaaaaaaaaabbbbbbbaaabbbbbaaabbba + bbbbbaaaaabbaaabaaaababbbbbbbbbbaaaabbabbbbbbbbbbbbbbabbabaaaaaaaaaaaabbbbaaaabbbbbaaabbba + bbbbbaaaaabbbbbbaaaaaaaaaaaabbbbaaaabbaaabbbbbbbbbbaaaaaaaaabbbbbaaaaaabaaaaabbbbbbaaabbba + abbbbaaaaabbbbbbbabbbbbbbabbbbabaaaabbaaaabbbbbbbbbaaabbbaaaaaaaaaaaaabaaaabbbbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbabbbbabbaaabbaaabbbbbbbbbaaabbbbbaaaaaaaaaaaabaaaabbbbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbabbaaaabbbbbbbbbabbbaaabbbbbbaaabbbbbaabbbaaabbbaabbbaaaabbb + abbbbaaaaabbbbbbaabbbabbbabbbaabbbaaaabbaabbbbabbbaaabbbbbbbbbbbbbbaabbbabbbbbaabbbaaaabbb + abbbaaaaaabbbbbbaabbbabbbabbbaabbbbaaabbabbbbbbbbaaaaaabbbbbbbbbbbbaabbbabbbbbabbbbaaaabbb + bbbbaaaaabbbbbaaaabbaabbaabbbaabbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbaaabbabbbbbbbbbbaaaabbb + bbbbaaaaabbbbbbbabbbaabbaabbaaabbbbaaabbbbbbbbbbbabaaaaabbbbbbbbbbbaaabbabbbbbabbbbaaaabba + bbbbaaaaabbbbbbbabbbbbbbbbbbbaabbbbaaabbbbbbbbbbbaaaaaaabbbbbbbbbbaaaabbabbbbbabbbbaaaabbb + bbbaaaaaabbbbbbbabbbbbbbbbbbbaabbbaaaabbbbbbbbbbbaaaaaaabbbbbbbbbbaaaabbabbbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbabbbbaabbbbaaabbbbbbbbbbbabbaaaaabbbbbbbbaaaaabbabbbbaaabbaaaababb + abbaaaaaababbbbbabbbbbbbbbbbbabbbbaaaabbbbbbbbbbbabbaaaaabbbbbbbaaaaaabbabbbbbabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaabaabbbaabbbbaaaabbabbbbbbbbaabaaaaabbbbbbbaaaaabbbbbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbaaaaaaaaaaabbbbaaaaaaabbbbbbbbabaabaaabbbbbbaaaaaabbbbbbbbbbbbbaaabbbba + bbaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbaababbaabbaaaaaaaaabaaabbbbbbaaabbbbbbbbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaabbbbbbbbabbbabaaaabbaabbaaaaaaaabbaabbbbbbbaaaaaabbbbbbbbabbbbaaabbbba + bbaaaaaabbbbbbbabbbaaaaaaaabababbaaabbbaabbbbbbbbaaaabaabbbbbbaaaaaaaaabbaabaaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbabbbbbababbaaabbaaabbbbbbbaaabbbabbbbbbaaaaaaaaaabbbaaaaaaaaaabbbba + bbaaaaaabbaaaababbbabbbbbbbbbababaabbbabbaaaaaaaaaaabbbbaabbbbaaaaaaaaaabbbbbabbbbaabbbbba + bbaaaaaabbaabbaabbaaaaaabbbbabbabaaababbabaaaabbabababbbbaabbbaabaabbbbbbbbbbbbbbbaabbbbba + bbaaaaabbbbbbbbbbbbabbaabbbaabbabaaabbbababaaaababababbbbaaaaaaaaabbbbbbaaaaaaabbbaaabbbba + bbaaaaabbbbbbbabbbbbbbbbbbbaabbabaaaabbaababaabbabaaabbbbaaaaaaabbbbbbbbbbbbbabbbbaaabbbba + bbaaaaabbbabbbabbbabbbbbbbaaabbabaababbbaababbababaaaabbbbaaaaaabbaabbbbbbbbbbbbbbaaaabbbb + bbaaaaabbbaabbabbbabbbbbbaaabbbaaaabbabaababbabbabaaaaabbbbaaaaaaaaabbbbaabbaabbbbaaaabbba + baaaaaabbbaabbabbbabbbbbaaaabbbaaaabbbbbbababbababaaaaabbbbbbbaaaabbbbbbaabaaaabbaaaaabbba + baaaaabbbaabbaabbbbbbbbaaaaabbbaaabbbbbaaaabaabbabaaaaaabbbbbbbbbbbbbbbbbabbbbbbbbaaabbbba + baaaaabbbbabbaabbbbbbbaaaaaabbaaabbbbbbaaababbbbbbaaaaaabbbaabbbbbaabbbbbbbbbbbbbbaaaabbba + baaaaabbbbbbbabbbbbbbaaaaaaabbaaabbbbbbaababaabbbbaaaaaabbbaaaabbbaaaabbbbbbbbbbbbaaabbbba + baaaaabbbbbbbbbbbbaaaaaaaaaabbaaaabbbbbaaaaabbbbbbaaaaaaabbbbbbbbaaaaaabbbbbbbbbbaaaaaabba + baaaaabbbbbbbbbbbaaaaaaaaaaabbaaaabbbbbaababaabbbbaaaaaaaabbbbbbbaaaaaaaabbbbbbbbaaaababba + baaaaabbbabbbbaaaaaaaaaaaaaabbaaabbbbbbaabbabaabbbaaaaaaaabbbbbbaaaaaaaaaaabbbbbbaaaaaabba`, + map `ababbaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbaabaabbbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbaaaaaabbaabaaaaaaaaaabbaaaaabbbaaabaabbaabbbbbbbabbaabbbabbbaabbabbbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbabbbaabbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaabaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaaaaabbaaaaaaaaaaaaaaaaabbbaabbaaaaabbbbbbaabbaaaaaabbbbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaaabaaaaaaaaaaaaaaaaaaaabbaaaaaaaaabbbbbbbaaaaaaaaaaaabbbbbaaaaaaaaaaaaaaabba + aabbbbbbbbbbaaabbbaaaaaaaaaaaaabbabbabbbaabaaabbbbbbbaaaaaaaaaaaaaaabbbbbbaaaaaaaaaabaaaba + aabbbabbbabbaaabbbaabbbbbaaaaabbbbbbbbbbabbbbbbbbbbaaaaaabbbaaaaaaaaabbbbbbbbaaaaabbbabbba + aabbbabbabbbaaabbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbaaaaaabbbba + aabbbbbbabbbaaabbbaaaaabbbbbaaabbaaaabbbbbbbbbbbbbbaaaaaaaaaaabbbbaaaaaaabbbbbbbaaaaabbbba + aabbaaaaaabbaaabaaaaaaabbbbaaaaabaaabbbbbbbbbbaaaaaaaaaababbbbbbbbaaaaaaaabbbbbbaaaaabbbba + babbabbbabbbaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbaaaaaaabbbbbbbbabbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbaaaaaaaaabbbbbaaaaaaabbbbbbbbbabba + abbbabbbabbbaaaabbbbbaabbbbbbbbbbbbaabbbbbbbbaaaaaabbbbaaaaaaaaaabbbbbbbaaaaabbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaabbbbbaabbbbaaaabbbbbbaaaaaaabbbaaaaaaaaaaaaabbbbbaaaaabbbbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaabbbbbaabbbbbaaabbbbbaaaaaaabbbbbaaaaaaaaabbaaabbaaaaabbababbbbbbabbb + abbaabbbbbbaaaabbbbaaabbbbbbaabbbbaaabbbbbbaaaaabbaaaaaaaaabaaabbbbbaaaaaaaabababbbbbaabbb + abbbbbbbbbbaaabbbbaaaabbaaaaaabbbbbaabbbbbbaaabbbbaaaaaaabbbaaaabbbbaaaaaaaabaababbbbbabba + abbbbbbbbbbaaabbaaaaaaaaabaaaabbbbbbbbbbbbaabbbbbaaaaaaaabbbaaaabbbbaaaaabaaaaababbbbbbbba + abbbbbbbbbbaaabbbaaaaaabbbbaaabbbbbabbbbaaaaaabbaaaaaabbbbbbaaaabbbbabaaabaaaaabbaabbbbbba + abbabbbbbbaaaaabbbaaaaabbbbaaabbbbbaabaaaaaabbbaaaaabbbbbbbbbbbabbbbbbaaabbbaaabbaaabbbbba + abaaababbbaabbabbbaaaabbbbbaaabbbbbaabaaaaabbbaaaabbbbbbbbbbbbbabbbbbbaaabbbbaaabbbaabbbba + abbbbbbbbbaabbabbbaaabbbbbbbaaaabbbbbbaaaabbbaaaaabbbbbbbbbbbbbabbbbbbaaabbbbaaabbbbbbbbba + abbbbbabbbaaaabbbbbaabbbabbbaaabbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbaaabbbbbbbba + abbbbbabbbaaababbbaaabbbbbbbaaabbbbbbbbaaaaaaabbbaabbababbbbbbbaabbbbbbbbbbbabbaaabbbbabba + abbbbbbbbbaaaabbbaaabbbbbbbbaaabbbbbbbbaaaaaabbbbaabbbbabbbbbbbabbbbbbbbbbbaabbbaababaabbb + abbbbabbbaaabbbbbaaabbbbbbbbaaabbbbbaabaaabbbabbbbabbbbbbbbbbbabbbbbbbbbbbbaaabbabbabaabbb + abbbbabbbaaabbbbbaaaaaabbaaaaaabbbbbaabbaabbbbbbbbabbbbbbbbbbaabbbbbbbbbbbbbaabbabbaaaabbb + abbbbbbbbaaabbaaaaaabbbbbbbbaaabbbbaaaabaabbbbabbbabbbbaaabbaaaabbbbbbaabbbbbaaaaabaaaabbb + abbbbabbbaabbaaabbbbbbaabbbbbbbbbbaaaaaaabbbbbbbbbabbbbaabbbaaaaabbbbbababbbbaabbbaaaaabbb + bbbbbabbbaabbaabbaaabaaaaaaaabbbbbaaaaaaabbbbbbbbbbbbbbbabbbbbaaaaaabbbbaabbbaaabbbbbaabbb + bbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbaabaaabbbbbbbbbabbbbbbbbbbbaaaaaaaabbbaabbbaaabbbbabbbb + aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbbbaabaaaaaabbbbbbaaabbaaabbbb + abaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbbaaaabbbabbbbbbbbbaaabbbbbbbbaababaaaaabbbbaaaaaaaaabbbb + abbbbbbbbaaaaabaaaaaaaaaaaaabbbaaabbaaababbbbbbbbbbbaaabaaaaabaaaaabaaaaaaaaaaaaaaaaaabbba + abbbbbbbaaaaabbbbbbbabbbaabbbbbaabaaaaabbbbbbbbbbbbbabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbba + abbaabbbaaaaabbbabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbaababbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbba + bbbaabbaaaaaaaaaaaaaaaaabbbbbbaaaaaaaabbbbbbbbbbbaaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbbbbaaaaabbbbbbbbbbaabbbbbaaaaaaaaaabbbbbabbbbbabaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbba + abbaabbbaaaaabbbaaaaaaaaabbbbbaaaabbbaaabbbbbbbbbbbaabaaabbbbbbbbbbbaaaaaaaaaaaaaabbbbbbba + abbaabbbaaaaabbbbbbbbbbbabbbbbaaaabbbaabbbbbbbbbbbbaabababbbbbbbbbbbbbbbbaaaaaaabbbbbbbbba + abbaabbbaaaabbbbbbbbbbbbbbbbbbaaaaabbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbabbbb + abbabbbaaaaabbbbbbbabbbbbbbbbbaaaaabbbbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbaaabbbbbbbaabbbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaabbaabbabbbbbbabaaabbbbbbbabbbbbbbbbbbbbbabbbbbbbbaabbbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaaaaaaaabbbbbbaabaaaabbbbaaabbbbbbbbbbbbbbbbbbabbbbaabbbb + abaabbbaaaaabbaaaaaaaaaaabbbbbaaaaaaaaaaaabbbbbaabaaaabbbaaaaabbbaabbbbbbbbbbbaabbbbaabbbb + bbbabbbaaaaabbbbbbaabbaabbbbbbaaaaaabbaaaaababbaaaaaabbbbbabaaabababbbbbbbbbbaaabbbbaaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaaaaaaaaabbbbbabaaabaababbbbbbbbaaaabbbbaaabba + bbbbbbbaaaabbbbbbbbbbbabbbbbbbaaabbbbbbbaaaaaababbbbbbbbbbaaabbbaabbbbbbbbbbaaabbbbbaaabbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaabbabbbbaaaaaababbbbbbbbbaaaabbbaaabbbbbbbbaaaabbbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaabaabbbbbaaaaaaaabbbbbbbbaaabbbbbbabbbbbbbbaaaabbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaabbbaaabaabbbbbbaaaaaaaabbbbbabaaabbbbbbbbabbbbbbaaaabbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbaaaaababbaabbabbaabbaaaaaaaabbbbbabaaabbbbbbbbabbbbbbaaaabbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbbbaaabbaaaaaaabbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabbabaabbbaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbaaabbbbbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbbaaabbbbaabbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabaaaaaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbaaaabbbaabbbbbaaabbbbbbbbaaaaaaaaaabbbbbbbbbaaabbbbbaaabbba + bbbbbaaaaabbaaabaaaababbbbbbbbbbaaabbbbabbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbaaabbbbbaaabbba + bbbbbaaaaabbbbbbaaaaaaaaaaabbbbbaaabbbaabbbbbbbbbbbbbbaaaaaabbbbbaaaaaabbaaaaabbbbbaaabbba + abbbbaaaaabbbbbbbabbbbbbbabbbbbbaaaabbbaaabbbbbbbbbbaaabbaaaaabbbbaaaaaabaaaabbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbabbbbbbaaaabbbaabbbbbbbbbaaaabbbbbaaaaaaaaaaaabaaabbbbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbbbaaabbbbbabbbbbbbbaaaabbbbbaaaaaaaaaaabbaaabbbbbbbbaaaabbb + abbbbaaaaabbbbbbaabbbabbaabbbabbbaaaabbbbaabbbabbbaaaabbbbbbbbbbbbbbaabbaabbbbaaabbaaaabbb + abbbaaaaaabbbbbbaabbbabbaabbbabbbbaaaabbbaabbbbbbaaaaaabbbbbbbbbbbbbaabbabbbbbabbbbaaaabbb + bbbbaaaaabbbbbaaaabbaabbaabbbabbbbaaaaabaabbbbbbbbaabaaabbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbb + bbbbaaaaabbbbbbbabbbaabbaabbaaabbbaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbaaabbbbbbbabbbbaaaabba + bbbbaaaaabbbbbbbabbbbbbbbbbbbabbbbaaaabbbbbbbbbbbbaaaaaaabbbbbbbbbbaaaabbbbbbbabbbbaaaabbb + bbbaaaaaabbbbbbbabbbbbbbbbbbbabbbbaaaabbbbbbbbbbbbaabaaaabbbbbbbbbbaaaababbbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbabbbbabbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaaababbbbaaabbaaaababb + abbaaaaaababbbbbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbaaaaabbabbbbbabbbaaabbbbb + bbbaaaaabbaaaaaaaaaaaabaabbbbbbbbaaaaabbbbbbbbbbbaabaaaaabbbbbbbbaaaaaaabbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbaaaaaaaaabbaabaaabaaaabbbbbbbbabaabaaabbbbbbbaaaaaaabbbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbbbbbbbbbbbaabbaaababbbbbbaaaaaaaaabaaabbbbbbbaaabbbbbbbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaabbbbbbbbaabbbaaababbaabaaaaaaaaabbaaabbbbbbaaabbbbabbbbbbabbbbaaabbbba + bbaaaaaabbbbbbbabbbaaaaaabbaabbbbaaabbbaabbbbbbbbaaaabaaabbbbbbaaaaaaabaabbbaaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbbbbbaabbbaaaaabbaaabbbbbbbbaabbbaaabbbbbaaaaaaaaabbbaaaaaaaaabbbbba + bbaaaaaabbaaaababbbabbbbbbbabbbbaaaabbabbaaaaaaaaaaabbbbaaabbbbaaaaaaaaabbbbbabbbbaabbbbba + bbaaaaaabbaabbaabbaaabbbbbaabbbbaaabbabbabaaaabbababababbbabbbbbaaaabaabbbbbbbbbbbaabbbbba + bbaaaaabbbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbabaaaabababababbbaaabbbaaaabbbbbaaaaaabbbaaabbbba + bbaaaaabbbbbbbabbbbbbbbbaaabbabbaaaaabbabbabaabbabaaabbbbbaaaabbaaaabbbbbbbbaaaabaaaabbbba + bbaaaaabbbbbbbabbbbbbbbbaaabbaabaaababbbaababbabbbaaaaabbbaaaaaaabbabbbbbbbbbbbbbbaabbbbbb + bbaaaaabbbaabbbbbbbbbbbaaaabbaaaaaabbababbabbabbabaaaaaabbbaaaaaabaabbbbaaabaabbbbaababbba + baaaaaabbbaabbbbbbbbbbaaaaabbaabbbaaabbbbababbababaaaaaabbbbbaaaaaaabbaaaaaaaaabbaaaaabbba + baaaaabbbaabbaabbbbbbaaaaaabbaabbbaaabbaaaabaabbabaaaaaabbbbbbbbaabbbbbbbbbbbbbbbbaaaabbba + baaaaabbbbbbbbbbbbbaaaaaaabbbaabbbbaabbaaababbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbba + baaaaabbbbbbbbbbbaaaaaaaaabbbaaabbbaabbaababaabbbbaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbaaaabbba + baaaaabbbbbbbbaaaaaaaaaaaabbbaaabbbaabbaaaaabbbbbbaaaaaabbbaaaabbaaabbbbbbbbbbbbbbaaaabbba + baaaaabbbbbbbaaaaaaaabbbaabbbaaabbbbbbbaababaabbbbaaaaaaabbbbbbbbaaaabbbbbbbbbbbbaaaababba + baaaaabbbbaaaaaaaaaaabbbaabbbaaaabbbbbbaaababaabbbaaaaaaabbbbbbbaaaaaaabbbbbabbbbaaaaaabba`, + map `ababbaaaaaabbaaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbaabbabbbbbbbbaaaaabbbbbbbbbbbabbbabbbbabba + ababbbabbbbbbaaaaaabbaabaaaaaaaaaabbaaaaabbbaaaaaabbaabbbabbbaaaaabbbabbbaabbabbbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaabbaabbbbbbbaaaaabbbabbbaabbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbabbabbbbbbbbbbbbabbbbbbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbaaaaabbbaaaaabbaaaaaaaaaaaaaaaaabbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaaaaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaabbbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaaabba + aabbbbbbbbbbaaabbbaaaaaaaaaaaaabbaaaabbbaabaaaaaabbbbbbaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaba + aabbbabbbabbaaabbbaabbbbbbaababbbbbbbbbbaaababbbbbbbbbaaaaaaaaaaaaaabbbbbbbaaaaaabbbaabbba + aabbbabbabbbaaabbbbaaabbbbbbbbbbaaaabbbbbbbabbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbaabaaabbbbba + aabbbbbbabbbaaabbaaaaaabbbbaaabbaaaabbbbabbabbbbbbabbbbbbbbbaaaaaaaaaabbbbbbbbbbbaaabbbbba + aabbaaaaaabbaaaaaaaaababbbabaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaabbaaaaaaaaabbbbbbbaaaabbbbba + babbabbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbaaaaaaaaabbbbbbbaaabbbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbabbbba + abbbabbbabbbaaaabbbbbabbbbbbbbbbbbbabbbbbbbbbbaaaaaaabbbbaaaaaaabbbbbaaaaaaaabbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaabbbabaabbbbaaaabbbbbbbbaaaaaaabbbaaaaaaaaaaabbbbabaaaaaabbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaabbbbaaabbbbbaaabbbbbbbaaaaaaaabbbaaaaaaaaaaaabbbbbaaaaaabbbbbbbbabba + abbaabbbbbbaaaabbbbaabbbbbbaaabbbbaaabbbbbbaaaaaaabbbbaaaaabaaaaaaaabbbaaaaabbbbbbbbbaabba + abbbbbbbbbbaaabbbbbaaabbbaaaaabbbbbaabbbbbbbaaaaababbbbaaabbbaaabbaaaaaaaaaabaababbbbaabba + abbbbbbbbbbaaabbbaaaaaaaaaaaaabbbbbaabbbbbbbaaabbbbababbaabbbaaaabbbbaaaaaaaabababbbbaabba + abbbbbbbbbbaaabbbaaaaaaabbbaaabbbbbabbbbbbbaaabbbbaaaaabaaaaaaaaabbbbbaaaaaaaaabbbbbbbabba + abbabbbbbbaaaaabbbaaaaabbbbaaabbbbbabbbbbaaaabbbbaaaaaabbbaabaaaabbbbbaaaaaaaaaababbbbbbba + abaaababbbaabbabbbaaaaabbbbaaaabbbbaaabaaaaaaabbaaaaabbbbbbabbababbbbbbaaabbaaaabbabbbbbba + abbbbbbbbbaabbabbbaaabbbbbbbaaaabbbbaabaaaaabbbaaaabbbbbbbbabbbbabbbbbbaaabbbaaaabbaabbbba + abbbbbabbbaaabbabbaaabbbabbbaaabbbbbabaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbaabbbaaaabbbbbbbba + abbbbbabbbaaabbbbbaaabbbbbbbaaabbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbaabbbbbbbabbbaaaabbbbbbbba + abbbbbbbbbaaaabbbaaabbbbbbbbaaabbbbbbbbaaaaaaabaaabbbbbbabbbbabbbabbbbbbbbbbaabbaabbbbabba + abbbbabbbaaabbbbbaaabbbbbbbbaaabbbbbbbbaaaaabbbbaaabbbbbaaabbaaaaabbbabbbbbbaaababbbbbbbba + abbbbabbbaaabbbbbaaabbbbbabaaaaabbbbbaaaaabbbbbbababbbbbbaabbaaabbbbbbabbbbbaaabbbbaaaabbb + abbbbbbbbaaabbaaaaaabbbbbbbaaaabbbbbaaabaaabbbbbbbabbbbbaabbbaaabbbbbbabbbbbbaaababbaaabbb + abbbbabbbaabbaaababbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaabbbbaabbbaaaabbbbbabbbbbbbaaaaaaaaabbb + bbbbbabbbaabaaabbaaabaaaaaaaabbbbbaaaaaaaabbbbbbbbbabbbbbbbbbbaaaaaabbbbbabbbbaaaaaabaabbb + bbbbbbbbbaaaaaabbbbbbabbbabbbbbbbbaaaaaaaabbbbbbbbbabbbbbbbbbbaaaaaaaabbbaabbbaaabbbbaabbb + aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbaaaaaabbbbbbbbbbbbbaabbbbbbbbabaaaaaaabbaabbbaabbbbabbbb + abaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbabaaabbbbbbbbbbbbbaaabbbbbbbbbbaabaaaaabbbbbbaabbbaabbbb + abbbbbbbbaaaaabaaaaaaaaaaaaabaabbbaaaaabbbbbbbbbbbbbbbaabbbbbbbbaaabbaaaaabbbaaaaaaaaabbbb + abbbbbbbaaaaabbbbbbbbbbbaabbbbbbaaaaaaabbbbbbbbbbbbbbaabbbabbbbaaaaaaaaaaaaaaaaaaaaaaabbbb + abbaabbbaaaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbaaababbaabaaaaaaaaaaaaaaaaaaaaaaabbbba + abbbabbaaaaaaaaaaaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbababaaabbbbbaaaaaaaaaaaaaaaaaaaaaaabbbba + abbbbbbbaaaaabbbbbbbbbbaabbbbbaaaaabababbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaaaaaaaaaaaaabbbbba + abbaabbbaaaaabbbaaaaaaaaabbbbbaaaaabbbabbbbbbbbbbbbbbbabaabbbbbbabaaaaaaaaaaaaaaaaabbbbbba + abbabbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaaaaaaaaaaaaabbbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaababbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbb + abbabbbaaaaabbbbbbbabbbabbbbbaaaaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaabbbbbbbbbbbbbaabaababbbbbabbbbbbbbbbbbbaaaabbbbbbaabbbb + abbabbbaaaaabbbbbbbabbaabbbbbaaaaaabbaababbbbbbbaabaaaabbbbbabbbbbbbbbbbbbbaabbbbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaabbbbbbaaaaaaaaaaaabbbbbbaabaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbb + bbbabbbaaaaabbbbbbaabbaabbbbbaaaaaaaaaaaaababbbaaabaababbbbbaaabbaabbbbbbbbbbbaabbbbaaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaaaaabaaaaabbbbbaaaaaabbbbbbaaabbbabbbbbbbbbbaaabbbbaaabba + bbbbbbbaaaabbbbbbbbbbbabbbbbbaaaaaabbbbbaaaaabbaaaaaaabbbbbaaabbbaabbbbbbbbbaaaabbbbaaabbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaabaaabbbbbbbbbaabbbaaabbbbbbbbbaaaabbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaabaabbbbbbbbaaabbbaaaabbbbbbbaaaabbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaabbbaaabbabbbbbbaaaaaaaabbbbbbbbbaabbbbaaabbbbbbbaaaabbbbbaaabba + bbbbbbaaaaabbbbbbbbbbbaaaaabbbaaabbabbbbbbbaaaaaaabbbbbaabbaabbbbbbabbbbbbbaaaabbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaabbbbbabbbaabbbbbbbabbbbbbaaabbbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbaabbbaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbbaaabbbbaabbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbaaabaaaaaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbaaabbbbbaabbbaaaaabbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbaaabbba + bbbbbaaaaabbaaabaaaababbbbbbbbbaaabbbbbaabbbbaaaabbbbbbbaaaaaaaaabbbbbbbbbbaaabbbbbaaabbba + bbbbbaaaaabbbbbbaaaaaaaaaaabbbbaaabbbbbabbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbaaabbbbbaaabbba + abbbbaaaaabbbbbbbabbbbbbbabbbbbbaabbbbbabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbaaaabbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbabbbbbbaabbbbbaababbbbbbbbabaabbaaaaaabbbaaaaaabaaaabbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbbaabbbbbaaabbbbbbbbaaabbbbbbaaaaaabaaaaabaaaabbbbbbbaaaabbb + abbbbaaaaabbbbbbaabbbabbbabbbbbbaaaabbbbabbbbbbbbbaabbbbbbbbbaaaaaaaaaabaaabbbabbbbaaaabbb + abbbaaaaaabbbbbbaabbbabbaabbbabbaaaabbbbbbbabbbbbbaaaabbbbbbbaaabbbbbaabaabbbbbbbbbaaaabbb + bbbbaaaaabbbbbaaaabbaabbaabbbabbaaaaaabbbaabbbbbbbaaaaabbbbbbbbbbbbbbaababbbbbbbbbbaaaabbb + bbbbaaaaabbbbbbbabbbaabbaabbaabbbaaaaaabaabbbbbbbbbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbaaaabba + bbbbaaaaabbbbbbbabbbbbbbbbbbbabbbaaaaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbaaabbbbbbbbbbbbaaaabbb + bbbaaaaaabbbbbbbabbbbbbbbbbbbabbbaaaaabbbbbbbbbbbbaaabaaabbbbbbbbbbbaaabbbbbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaababbbbaaabbaaaababb + abbaaaaaababbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaabbbbbaabbbaaabbbbb + bbbaaaaaabaaaaaaaaaaaabbabbbbbbbaaaabbbbbbbbbbbbbaababaaabbbbbbbbbbaaaaabbbbbabbbbaaabbbba + bbbaaaaabbbbbbbbbbbaaaaaaaabbbbbaaabbbbaabbbbabbbabaabaaabbbbbbbbbaaaaabbbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbbbbaaaaaaaaabaaabbbbbbbbaaaaaaabbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaabbbbbbbbaabbaaabbbbaaabaaaaaaaaabbaaabbbbbbbaaabbaabbbbbbabbbbaaabbbba + bbaaaaaabbbbbbbabbbaaababbbaabbbaaabbbaaabbbbbbbbaaaabaaabbbbbbbaaabbbabbbbbaaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbbbbaabbbbaaaaabaaaabbbbbbbaaabbbaabbbbbbbaaaaabbbbbbaaaaaaaaabbbbba + bbaaaaaabbaaaababbbabbbbbaaabbbbaaabbbabaaaaaabaaaabbbbaaabbbbbbaaaaaaaabbbbbbbbbbaabbbbba + bbaaaaaabbaabbaaaaaabbbbbaabbbbaaaabbababbabaabbababbbbaaaabbbbbaaaaaaaabbbbbbbbbbaabbbbba + bbaaaaabbbbbbbbbbbbbbbbbaaabbbbaaaabbbbababaaaababababbabbabbbbbbaaaaaaaabbaaaabbbaaabbbba + bbaaaaabbbbbbbabbbbbbbbaaabbabbaaaaaabbabbabaabbabaaabbbbbaabbbbbaaabbbbbbbbbaabbbaaabbbba + bbaaaaabbbbbbbabbbbbbbaaaabbabbaaaaaabbbabbabaababaaaaabbbaaaabbbaaabbbbbbbbbbbbbbaaaabbbb + bbaaaaabbbaabbbbbbbbbbaaaabbabbaaaabaababbabaabbabaaaaaabbbaaaaabaaabbbbaaaaaabbbbaababbba + baaaaaabbbabbbbbbbbbbaaaaabbaababaaabbbabababbababaaaaaabbbaaaaabaaabbbbaaaaaaabbaaaaabbba + baaaaabbbbbbabbbbbbbaaaaabbbaabbbbaaabbaaaabaabbbbaabaaabbbbbaaaaaabbbbbbbbbbbbbbbaaaabbba + baaaaabbbbbbbbbbbbaaaaaaabbbaabbbbbaabbaaaaababbbbaaaaaabbbbbbbaaabbbbbbbbbbbbbbbbaaaabbba + baaaaabbbbbbbbbbaaaaaaaaabbbaaabbbbaabbaaaaaaabbbaaaaaaabbbbbbbbabbbbbbbabbbbabbbbaaaabbba + baaaaabbbbbbbbaaaaaaabaaabbbaaabbbbaabbaabaaaabbbaaaaaaabbbbaaaaabbbbbbbabbbbbbbbbaaaabbba + baaaaabbbbbaaaaaaaaabbaaabbbaaabbbbabbbaaabababbbaaaaaaabbbbaaaaabbbbbbabbbbbbbbbaaaaabbba + baaaaabbbaaaaaaaaaaabbaaabbbaaabbbbbbbbaababbabbbaaaaaaabbbbbbbaabbbbbbaabbbabbbbaaaaabbba`, + map `ababbaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbaabbabbbbbbbbaaaaabbbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbaaaaaabbaabaaaaaaaaaabbaaaaabbbaaaaaabaaabbbabbbaaaaabbbabbbaabbabbbabbbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaabbaabbbbbbbaabaabbbabbbaabbaaaaabbbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbabbaabbbbbbbabbbabbbbbbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbaaaaabbbaaaaabbaaaaaaaaaaaaaaaaaabbabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaaaaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaabbbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaba + aabbbbbbbbbbaaabbbaaaaaaaaaaaaabbaaabbbaaabaaaaaabbbbbbaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaba + aabbbabbbabbaaabbbaabbbbbbaababbbbbabbbaaaaaabbbbbbbbbaaaaaaaaaaaaaabbbbbbbaaaaaabbbaabbba + aabbbabbabbbaaabbbbaaabbbbbbbbbbaabaabbbabaabbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbaaabaaaabbbba + aabbbbbbabbbaaabbaaaaaabbbbaaabbaaaaabbbbbbabbbbbbabbbbbbbbbaaaaaaaaaabbbbbbbbbbbaaabbbbba + aabbaaaaaabbaaaaaaaaababbbabaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaabbaaaaaaaaabbbbbbbaaaabbbbba + babbabbbabbbaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaaaaaaaaaaaaabbbaaaaaaaaabbbbbbbaaabbbbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbabbbba + abbbabbbabbbaaabbbbbaabbbbbbbbbbbbbaabbbbbbbbbaaaaaaabbbbaaaaaaaabbbaaaaaaaaabbbbbbbbbabba + abbbbbbbbbbaaaaabbbaaabbbabaabbbbaaaabbbbbbbbaaaaaaabbbaaaaaaaaaaabbbbaaaaaaaabbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaabbbbaaabbbbbaaabbbbbbbaaaaaaaabbbaaaaaaaaaaaabbbbbaaaaaabbbbbbbbabba + abbaabbbbbbaaaabbbbaaabbbbbaaabbbbaaabbbbbbaaaaaaabbbbaaaaabaaaabbaabbbaaaaabbbbbbbbbaabba + abbbbbbbbbbaaabbbbaaaabbbaaaaabbbbbaabbbbbbbaaaaababbbbaaabbbaaabbaaaaaaaaaabaababbbbaabba + abbbbbbbbbbaaabbbaaaaaaaaaaaaabbbbbaabbbbbbbaaabbbaababbaabbbaaaabbbbaaaaaaaabababbbbaabba + abbbbbbbbbbaaabbbaaaaaaabbbaaabbbbbabbbbbbbaaabbbbaaaaabaaaaaaaaabbbbbaaaaaaaaabbbbbbbbbba + abbabbbbbbaaaaabbbaaaaabbbbaaabbbbbabbbbbaaaaabbbaaaaaabbbaabaaaabbbbbaaaaaaaaaababbbbbbba + abaaababbbaabbabbbaaaabbbbbaaaabbbbaaabaaaaaaabbaaaaabbbbbbabbababbbbbbbaabbaaaabbabbbbbba + abbbbbabbbaaabaabbaaabbbbbbbaaaabbbbaabaaaaabbbaaaabbbbbbbbabbbbabbbbbbbaabbbaaaabbaabbbba + abbbbbabbbaaabbbbbaaabbbabbbaaabbbbbabaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbaabbbaaaabbbbbbbba + abbbbbabbbaaabbbbbaaabbbbbbbaaabbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbaabbbbbbbabbbaaaabbbbbbbba + abbbbbbbbbaaaabbbaaabbbbbbbbaaabbbbbbbbaaaaabaaaaaabbbbbabbbbabbbabbbbbbbbbbaaabaabbbbabba + ababbbbbbaaabbbbbaaabbbbbbbbaaabbbbbbbbaaababbbaaaabbbbbaaabbaaaaabbbbabbbbbaaababbbbbbbba + abbbbabbbaaaabbaaaaaabbbbabaaaaabbbbbaabaaabbbbbaaabbbbbbaabbaaabbbbbbabbbbbaaabbbbaaaabbb + abbbbbbbbaaabbaaaaaabbbbbbbaaaabbbbbbaabaaabbbbbbbabbbbbaabbbaaabbbbbbabbbbbbaaababbaaabbb + abbbbabbbaaabaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbabbbbbaabbbaaaabbbbbabbbbbbbaaaaaaaaabbb + bbbbbabbbaabbaabbbaabaaaaaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbabbbbaaaaaabaabbb + bbbbbbbbbaabbabbbbbbbabbbabbbbbbbbaaaaaaabbbbbbbbbbabbbbbbbbbbaaaaaaaabbbaabbbaaabbbbaabbb + aaaaaaaaaaabbabbbbbbbbbbbbbbbbbabbaaaaaabbbbbbbbbbbbbaabbbbbbbbabaaaaaaabbaabbbaabbbbabbbb + abaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbabaaaabbbbbbbbbbbbaaabbbbbbbbbbaabaaaaabbbbbbaabbbaabbbb + abbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbaaaaabbbbbbbbbbbbbbaaabbbbbbbbaaabbaaaaabbbbaaaaaaaabbba + abbbbbbbaaaaabbbbbbbbbbbaabbbbbbaaaaaaabbbbbbbbbbbbaabbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbb + abbaaabbaaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbaaaabbbbbabaaaaaaaaaaaaaaaaaaaaaaabbbba + abbaabbaaaaaaaaaaaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaabbbbba + abbbbbbbaaaaabbbbbbbbabaabbbbbaaaaabababbbbbbbbbbbbbabbaaaabbbbbaaaaaaaaaaaaaaaaaaaabbbbba + abbaabbbaaaaabbbaaaaabbaabbbbbaaaaabbbabbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaaabbbbbba + abbaabbbaaaaabbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbabaaaaabbbbbbbbbaaaaaaaaaaaaaaabbbbbba + abbbbbbaaaaabbbbbbbbbbbabbbbbaaaaaabbbbbbbbbbbbbbaaaabaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbb + abbabbbaaaaabbbbbbbabbbabbbbbaaaaaaabbbbbbbbbbbbbaaabbabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbb + abbabbbaaaaabbbbbbbabbbabbbbbbaaaaabbbabbbbbbbbbbabaababbbbbabbbbbbbbbbbbbbaaaabbbbbaabbbb + abbabbbaaaaabbbbbbbabbaabbbbbaaaaaabaaabbbbbbbbbaabaaabbbbbbabbbbbbbbbbbbbbaabbbbbbbaabbbb + abaabbbaaaaabbaaaaaaaaaabbbbbbaaaaaaaaaaaabbbbbaaabaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbb + bbbabbbaaaaabbbbbbaabbaabbbbbaaaaaaaaaaaaababbbaaabaabbbbbbbaaabbaababbbbbbbbbaabbbbaaabba + abbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaaaaabaaaaabbbbaaaaaaabbbbabaaabbbabbbbbbbbbbaaabbbbaaabba + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaabbbbbaaaabaaaaaaaaabbbbbbaaabbaabbbbbbbbbaaaabbbbaaabbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaaaaaabbbbbbbbbaaabbaaabbbbbbbbbaaaabbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaabaaabbbbbbbbbbaabbaaabbbbbbbbaaaabbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaaabbbaaabbabbbbbbaaaaaaaabbbbbbabbaaabbbaaabbbbbbbaaaabbbbbaaabba + bbbbbbaaaaabbbbbbbbbbaaaaaabbbaaabbabbbbbbbaaaaaaabbbbbaabbaabbbbbbbbbbbbbbaaaabbbbbaaabbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaabbbbbabbbaabbbbbbbabbbbbbaaaabbbbaaabbbb + bbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbaabbbaaaaaaabbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbbaaabbbbaabbbbaaaaabbbbbbbbabbbbbbbbbbbbbbbbbaaabbaaaaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbaaabbbbbaabbbaaaaabbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbaaabbba + bbbbbaaaaabbaaabaaaababbbbbbbbbaaabbbbbaabbbbaaaabbbbbbbbaaaaaaaabbbbbbbbbbbaabbbbbaaabbba + bbbbbaaaaabbbbbbaaaaaaaaaaabbbbaaabbbbbaabbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbaaabbbbbaaabbba + abbbbaaaaabbbbbbbabbbbbbbabbbbbbaabbbbbaabbbbbbbbbbbbaaaaaaaaaaabaaaaaaabbaaaabbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbabbbbbbaabbbbbaababbbbbbbbaaaabbbaaaaabbbbaaaaabaaaabbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbbaabbbbbaabbbbbbbbbbaabbbbbbaaaaaaaaaaaabaaaabbbbbbbaaaabbb + abbbbaaaaabbbbbbaabbbabbbabbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbaaaaaaaaaabaaabbbabbbbaaaabbb + abbbaaaaaabbbbbbaabbbabbaabbbabbaaaabbbbbbbbabbbbbaaaabbbbbbbaaaabbbbaabaabbbbbbbbbaaaabbb + bbbbaaaaabbbbbaaaabbaabbaabbbabbaaaaaaabbbabbbbbbbaabaaabbbbbbbbbbbbbaababbbbbbbbbbaaaabbb + bbbbaaaaabbbbbbbabbbaabbaabbaabbbaaaaaabbaabbbbbbbaaaaaabbbbbbbbbbbbbaabbbbbbbabbbbaaaabba + bbbbaaaaabbbbbbbabbbbbbbbbbbbabbbaaaaaabbabbbbbbbbbaaaaaabbbbbbbbbbbaaabbbbbbbbbbbbaaaabbb + bbbaaaaaabbbbbbbabbbbbbbbbbbbabbbaaaaabbbbbbbbbbbbbaabaaaabbbbbbbbbbaaabbbbbbbbbbbbaaabbba + abbaaaaaabbbbbbbabbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaaabbbbaaabbaaaababb + abbaaaaaababbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbabbaaaabbbbbbbbbbaaaaabbbbbaabbbaaabbbbb + bbbaaaaaabaaaaaaaaaaaabbabbbbbbbaaaabbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaaaabbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbaaaaaaaabbbbbaaaabbbaabbbbabbaabaabaaabbbbbbbbbaaaaaabbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbbbbbbbbbbaaabaaaabbbbbbbbaaaaaaaaabbaaabbbbbbbaaaaaabbbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaabbbbbbbbaabbaaaabbbaaabaaaaaaaaabbaaaabbbbbbbaabbbabbbbbbabbbbaaabbbba + bbaaaaaabbbbbbbabbbaaababbbaabbbaaabbbaaabbbbbbbbaaaabbaabbbbbbbaaabbbababbbbaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbbbbaabbbbaaaaabaaaabbbbbbbaaabbbaabbbbbbbaaaaaabbbbbaaaaaaaaabbbbba + bbaaaaaabbaaaababbbabbbbbaaabbbbaaabbbabaaaaaabaaaaabbbaaabbbbbbaaaaaaaaabbbbabbbbaabbbbba + bbaaaaaabbbbbbaaaaaabbbbbaabbbbaaaabbababbabaabbabaabbbababbbbbbaaaaaaaabbbbbbbbbbaabbbbbb + bbaaaaabbbbbbbbbbbbbbbbbaaabbbbaaaabbbbababaaaababaabbbabbbbbbbbbaaaaaaaabbaaaabbbaaabbbba + bbaaaaabbbabbbbbbbbbbbbaaabbabbaaaaaabbabbabaabbabaaababbbaabbbbbaaabbbbbbbbbaabbaaaaabbba + bbaaaaabbbabbbabbbbbbbaaaabbabbaaaaaabbbabbabaababaaaaaabbaaaabbbaaabbbbbbbbbbbbbbaaaabbbb + bbaaaaabbbaabbbbbbbbbbaaaabbabbaaaabaababbabaabbabaabaaabbaaaaabbaaabbbbaabbaabbbbaaaaabba + baaaaaabbbabbbbbbbbbbaaaaabbaababaaabbbabababbababaabaaabbbaaaaabaaabbbbaaaaaaabbbaaaabbba + baaaaabbbbbbbbbbbbbaaaaaabbbaabbbbaaabbaaaabaabbbbaaaaaabbbbbaaaaaabbbbbabbbbbbbbbaaaabbba + baaaaabbbbbbbbbbbbaaaaaaabbbaabbbbbaabbaaaaababbbaaaaaaabbbbbbbaaabbbbbbabbbbbbbbbaaaabbba + baaaaabbbbbbbbbbaaaaaaaaabbbaaabbbbaabbaaaaaaabbbaaaaaaabbbbbbbbabbbbbbbabbbbbbbbbaaaabbba + baaaaabbbbbbbbaaaaaaabaaabbbaaabbbbaabbaaaaaaabbbaaaaaaabbbaaaaaabbbbbbbabbbabbbbaaaaabbba + baaaaabbbbbaaaaaaaaabbaaabbbaaabbbbabbbaaaabaabbbaaaaaaabbbaaaaaabbbbbbbbbbbabbbbaaaaaabba + baaaaabbbaaaaaaaaaaabbaaabbbaaabbbbbbbbaababbabbbaaaaaaabbbbbbbaabbbbbbaabbbabbbbaaaaabbba`, + map `ababbaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbaabbabbbbbbbbaaaaabbbbbbbbbbbabbbbbbbbabba + ababbbabbbbbbaaaaaabbaabaaaaaaaaaabbaaaaabbbaaabaabaaabbaabbbaaaaabbbabbbaabbabbbaabbbabba + ababbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbabbaabbaabbbbbbbaaaaabbbabbbaabbaaaaaabbbabba + ababbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbaaaaabbbbbbbabbbabbbbbbbbabba + ababbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaaaaabbaaaaaaaaaaaaaaaaaabbabbbaaaaababbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbabba + abbbbaaaaabbbaaaaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaababbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaba + aabbbbbbbbbbaaabbbaaaaaaaaaaaaabbaaabbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaba + aabbbabbbabbaaabbbbbbbaabbaababbbbbabbbaaaaaaaaabbabbbbbbbaabbbbbbbbbbbabbbbaaaaaaaabbabba + aabbbabbabbbaaabbbbabbbbbbbbbbbbaabaabbaaaaaabbbbbbbbbbaaaabaaaaabbbbbbbbbbbbbbbbbbabbbbba + aabbbbbbabbbaaabbaaaaabbbbbababbaaaaabbbbbbbabbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbba + aabbaaaaaabbaaaaaaaaaabbbbbaaaaaaaaaabbaababbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbaababbbbba + babbabbbabbbaaaaabbbbbbbbbbbbbbbbbbbabaabbbbbbbbbbaaaabbbbaaaaaaaaaaaabbbbbbbbaaaaaaaabbba + aabbabbbabbbaaabbbbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbaaaaaaaaaaabbaaaaaaabbbbbbbbbbbbababbb + abbbabbbabbbaaabbbbbaabbbbbbbbbbbbbaabbbbbbbbbbbbaaaaaaaaaabbbbbbbaaaaaaaabbbbbbbbbbbbabbb + abbbbbbbbbbaaaaabbbaaabbbbbaabbbbaaaabbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbabba + aaaaaaaaaaaaaaabbbbaaabbbbbaaabbbbaaabbbbbbbbbbaaaaaaabbbaaaaaaaabbbbaaaaaaaabbbbbbbbbabba + abbaabbbbbbaaaabbbbaaabbbbbaabbbbbaaababbbbbabaaaaaaabbbaaaaaaaaaaabbbaaaaaaabbbbbbbbaabba + abbbbbbbbbbaaabbbbaaaabbbaaaaabbbbbaabbbbbbbbaaaaaaabbbaaaaaaaaaaaaabbbbaaaaaaabbbbbbaabba + abbbbbbbbbbaaabbbaaaaaaaabaaaabbbbbaababbbbbaaaaaaabbbbaaaabbbaaaaaaabbbbaaaababbbbbbaabba + abbbbbbbbbbaaabbbaaaaaaabbbaaabbbbbaabbbbbbbaaaaaabababbaabbbbaaabbaabbaaaaaabababbbbbbbba + abbabbbbbbaaaaabbaaaaaabbbbaaabbbbbaabbbbbbbaaabbbbaabbbaaaabbbaaabbbbaaaaaaabaabbbbbbabba + abaaababbbaabbabbbaaaabbbbbaaaabbbaabbbbbbbaaabbbbbaaabbaaaabbbaaabbbbaaaaaaaababbbbbbbbba + abbbbbabbbaaabaabbaaaabbbbbbaaaabbbabbbbbbaaaabbbaaaaabbbbbbabaaaabbbbaaaaaaaaaababbbbbbba + abbbbbabbbaaabbbbbaaabbbabbbaaabbbbaabbbaaaaaaabaaaaabbbbbbbabbaaabbbbbbaaaabaaaabaabbbbba + abbbbbabbbaaabbbbbaaabbbbbbbaaabbbbaaabaaaaababbaaaabbbbbbbbbbbaaabbbbbbbaabbaaaabbbbbbbba + abbbbbbbbbaaaabbbbaabbbbbbbbaaabbbbaabbaaaaabaaaaaaabbbbbbbbbbbaaaabbbbbbabbbaaaabbbbbbbba + ababbbbbbaaabbbbaaaabbbbbbbbaaabbbbbbbaaaaabbabbaaaabaaaabbbbbbaaaabbbbbaaabbaabaabbbbbbba + abbbbabbbaaaabbaaaaaabbbbabaaaaabbbbbbbaaaaaabbbbbaabbbbbbbbbbbabbabbbbbbbbbbaabbabbbbbbbb + abbbbbbbbaaabbaaaaaabbbbbbbbaaaabbbbbbbbaababbbbbbaabbbbbaabbbaabbabbbbabbbbbaaababbabbbbb + abbbbabbbaaabaaabbbbbbbbbbbbbababbbbaaabaaabbbbbbbaabbbbbaaabbbabbbbbbbabbbbbaaabbbbaaabbb + bbbbbabbbaabbaabbaaabaaaaaaaabbbbbbbaaaaaaabbbbbbbbabbbbbaabbbaabbbbbbbaabbbbbaaaaaaaaabbb + bbbbbbbbbaabbabbbbbbbabbbabbbbbabbbbaaaaaabbbbbbbbbbbbbbbabbbbbaaabbbbbabbabbbaaaaaaaaabbb + aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaabbbbabbbbbaaaaaabbbbbabbbbaaaaaaaabbb + abaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbaabbbbaaaaaaaabbbbabbbaaabbbbabbb + abbbbbbbbaaaaaaaaaaaaaaaaaaaaababbaaaaaabbbbbbbbbbbbbaabbbbbbbbbabaaaaaaabbbabbaaabbbbbbbb + abbbbbbbaaaaabbbbbbbbbbbaaabbbabbbabaaabbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaabbbbbaaabbaabbbb + abbaabbbaaaaabbbabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbaabbbbaaaaabbaaaaaaaabbbb + abbaabbaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaabbbbbbbbbbbbbaaaababaaabaaaaaaaaaaaaaaaaaaaaaaabbba + abbbbbbbaaaaabbbbbbbbabaabbbbbbaaaaaaabbbbbbbbbbbbbbaaabaabbbbbaaaaaaaaaaaaaaaaaaaaaabbbba + abbaabbbaaaaabbbaaaaabbaabbbbbbaaaaaababbbbbbbbbbbbbbbaaaaabbbbbaaaaaaaaaaaaaaaaaaaaabbbba + abbabbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaabaabaaaaaaaabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbabbbaaaaaaaaaaaaaaaaabbbbbba + abbabbbaaaaabbbbbbbabbbabbbbbaaaaaabbbbbbbbbbbbbbaababaaaabbbbbbbbbbbabaaaaaaaaaaaabbbbbba + abbabbbaaaaabbbbbbbabbbabbbbbaaaaaaabbbbbbbbbbbbbaaaabaabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbb + abbabbbaaaaabbbbbbbabbaabbbbbaaaaabbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbb + abaabbbaaaaabbaaaaaaaaaabbbbbaaaaaabbbabbbbbbbbbaabbababbbbbabbbbbbbbbbbbbbaaaabbbbbbabbbb + bbbabbbaaaaabbbbbbaabbaabbbbbaaaaaabaaabaaabbbbbaabbbbbbbbbbabbbbbbbbbbbbbbbabbbbbbbaabbbb + abbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbaaabaaaabbbbbaabbbbaaabbbbbbbbbaabbbbaabbba + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbaaabaaabbbbbbaabbbbababbbbbbbbaaabbbaaaabbb + bbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaabbaaaaabbbaaaaaaabbbbbbaabbbbabbbbbbbbbbaaabbbbaaabba + aaaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbbaaaabaaaaaaaabbbbbbaababbaabbbbbbbbaaabbbbbaaabba + abbabaaaaaaaaaaaaaaaaaaaaabbbaaaaaabbbbbbaaaaaaaaababbbbbbbbaababaabbbbbbbbaaaabbbbaaaabbb + bbbbbbaaaaabbbbbbbbbbaaaaaabbaaaaabbbbbbbaaaaaaaaabbbbbbbbbbaabaaaaabbbbbbbaaaabbbbaaaabba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbbbbaabbaabbbaaabbbbbbbbaaabbbbaaabbba + bbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbbbaaabaabbbbbbaabbbbbbaaaabbbbaaabbbb + bbbbbbaaaaabbbbbbbabbbbbbbbbbbaaaabbbbbabbbaaaaaaabbbbbabbbaabbbbbbbabbbbbbaaabbaaaaaabbbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbaaaabbbbaaabbaaaaaaabbbbbabbbbbbbbbbbbbbbbbbbaaabbbbbaaabbba + bbbbbaaaaabbaaabaaaababbbbbbbbaaaabbbbbaabbbbaaaabbbbbbbabbbbbbbbbbbbbbbbbbaaabbbbbaaabbba + bbbbbaaaaabbbbbbaaaaaaaaaabbbbaaaabbbbbaabbbbaaaabbbbbbbaaaaabbbbbbbbbbbbbbaaabbbbbaaabbba + abbbbaaaaabbbbbbbabbbbbbbabbbbaaaabbbbbaabbbbaaabbbbbbbbaaaaaaaaaaabbbbbbbbaabbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbabbbbbaaabbbbbaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbaaabbbbbbaaaabbb + bbbbbaaaaabbbbbbbabbbabbbbbbbbbaaabbbbbaabbbbbbbbbbbbbaaaaaaaaabbbbaaaaabbaaabbbbbbaaaabbb + abbbbaaaaabbbbbbaabbbabbbabbbbbaaabbbbbaababbbbbbbbabbbbbbaaaaaabbbaaaaabaaabbbbbbbaaaabbb + abbbaaaaaabbbbbbaabbbabbaabbbbbaaabbbbbbaabbbbbbbbaabbbbbbbbbaaaaaaaaaabaaabbbbbbbbaaaabbb + bbbbaaaaabbbbbaaaabbaabbaabbbbbaaabbbbbbbbbbabbbbbaaaabbbbbbbaaaaaaabaabaabbbbbbbbbaaaabbb + bbbbaaaaabbbbbbbabbbaabbaabbbbbaaaaaabbbbbbbabbbbbaaaaaabbbbbbaaabbbbaabbbbbbbbbbbbaaaabba + bbbbaaaaabbbbbbbabbbbbbbbbbbbbbbaaaaaaabbbabbbbbbbbabaaabbbbbbbbbbbbbaabbbbbbbbbbbbaaaabbb + bbbaaaaaabbbbbbbabbbbbbbbbbbbbbbaaaaaaabbaabbbbbbbaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbaababba + abbaaaaaabbbbbbbabbbbbbbabbbbbbbaaaaaaabbabbbbbbbbaaabaaabbbbbbbbbbbbaabbbbbbaaaabaaaababb + abbaaaaaababbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabaaaaaabbbbbbbbbbaaaabbbbbabbbbaaabbbbb + bbbaaaaaabaaaaaaaaaaaabbabbbbbbbaaabbbbbbbbbbbbbbbabbaaaabbbbbbbbbbaaaaabbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbaaaaaaaaabbbbaaabbbbbbbbbbabbaaaaaaaaabbbbbbbbbbaaaaabbbbbbbbbbaaabbbba + bbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbabbbaaaaaaababaaaabbbbbbbbbaaaaabbbbbaabbbaaabbbba + bbaaaaaabbbaaaaaaaaabbbbbbbbbbbaaaabbbbaabaaaaaaaaaaabbaaabbbbbbbbaaaaabbbbbbabbbbaaabbbba + bbaaaaaabbbbbbbabbbaaababbbaaabaaaabbbaaabbbbbbbbaaabbbaaabbbbbbbbaabaababaabaabbbaaabbbbb + abaaaaaabbbbbbbabbbabbbbbbaaabbaaaabbbaaabbbbbbbbaaabbbaaabbbbbbbaaabbabbbbaaaaaaaaabbbbba + bbaaaaaabbaaaababbbabbbbbaaabbbaaaabbbabaaaaaabaaaabbbbaabbbbbbbaaaabbbbbbbbbabbbbaabbbbba + bbaaaaaabbbbbbaaaaaabbbbbaabbbbaaaabbbbabaabaabbaaabbbbaaabbbbbbaaaaaaaabbbbbbbbbbaabbbbbb + bbaaaaabbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbabbababbaaaabbbaaabbbbbbaaaaaaaaabbaaaabbbaaabbbba + bbaaaaabbbabbbabbbbbbbbaaabbbbaaaabaabbabbbbaabbaaaabbbaaaabbbbbbaaaaaaaabbbbaaabbaaaabbba + bbaaaaabbbaabbabbbbbbbaaabbabbaaaabaabbbabbababbbaaaaaaabbabbbbbbaaaabbbbbbbbbbbbbaaaabbbb + bbaaaaabbbaabbbbbbbbbbaaabbabbaaaaababbababbaabbbaaaaaabbbabbbbbbbaaabbbbbbbaabbbbaaaabbba + baaaaaabbbaabbbbbbbbbaaaabbabbaaaaabbbbaabbababbbaaabaaabbbaaaabbbaabbbbabaaaaabbbaaaabbba + baaaaaabbbabbbbbbbbbaaaabbbabaabbaaabbbaaaabaabbbaaaaaaabbbaaaaabaaabbbbbbbbbbbbbbaaaaabba + baaaaaabbbbbbbbbbbbaaaaabbbaabbbbbaabbbaaaaababbbaaaaaaabbbbaaaaaaabbbbbbbbbbbbbbbaaaabbba + baaaaaabbbbbbbbbbbaaaaaabbaaabbbaaaaabbaaaaaabbbbaaaaaaabbbbbaaaaaabbbbbabbbbbbbbbaaaabbba + baaaaabbbbbbbbbbaaaaaaaabbbaabbbbaaabbbaaaaababbbaaaaaaabbbbbbbaaabbbbbbabbbabbbbaaaaabbba + baaaaabbbbbbbaaaaaaaaaaabbbaaabbbbbabbaaaabbaabbbaaaaaaabbbbbbbbabbbbbbbbbbbabbbbaaaaabbba + bbaaaabbbbbaaaaaaaaaaaaabbbaaabbbbbbbbbaababbabbbaaaaaaaabbbaaaaabbbbbbbabbbabbbbaaaaabbba`, + map `abbbbabbbbbbbbbbaababbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbabbbbbbbbbbba + abbbbabbbbbbbbbbaabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbaaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaaabbaaaaaabbbbaaaaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaaaaaaabbbbbaaaaaaabaaaabbbbbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbbbba + bbbbbbbbbaaaabbbaabaaaaaaaabbbaaabbbaaaaaaaaaaaaaaaaaabbbbbbabbbbbbbbbbbaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaaabaaaabaaaabbaaabbbbbaaaabbaaaaaabaaaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbaabbbabbbbabaaaaaaaaaaabbaaabbbbbbaaaabbaaaabbaaaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbbabbbbbbbbaaaaabbaaaaaaabbbbbbaaaabaaabbbbbbbbbaaaaaabbbabbbbbbbbbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbbaaaaabbbbaaaabbbbbbbbaaaaaabbbbbbbabbbbbbbbbbbabbbbbaabbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbbaaaaabbbbaabbbbbbbbbbaaaabbbbbabbaabbbbbbbbbbbabbbabaababbbba + bbbbaaabbbbbaaaabbbbbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbbbaabbbbbba + abbbaaaaabbbaaabbbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaaabbbbaabbbba + abaabbbaabbbaaabbbbbbbbbaaaabaabbbaaaaaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaaabbbbaabbbbb + aaaabbbaaaabaaabbbbbbbbaaaabbaabbbaaaaaaaabbbbbbbbaaaaaaaaaabaaaababbbbbbbbaaaabbbbaabbbbb + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaaabbaaaabbbbbbbaaaaaaaaabbaaaaaaabbbbbbbbbaabbbbaaabbba + abbbbbbbaaaaaabbbbbaaaaaaabbbaabbaabbbbbaaabbbbbbbaaabbaaaabbabbaaaabbbbbbbbbaaabbaaaaabba + abbbbbbbaaaaabbbbbbaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbaabaaaaaaaabbbbbaaabbaaaaabba + abbbbbbbbaaaabbbbaaaabbaabbbaaaaaaabbbbbbbbaabbabbbbbbbbbbaaaaabbbaaaaaabbbbbaaaaaaabbaaba + abbbbbbbbbaaabbbaaaabbbaaabbaaaaabbbbbbbbbbaaaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaaabbbaba + abbbbbbbabaaabbaaaaabbbbaabbaaaaabbbbbbaaaaaaaaaaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbabbbaaaabbbbbaaaaaabaaaaaaabbbbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbaaaaaaaaaaaaaaaabbbbbbbaaabbbaabbbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbaaaaabaaaabbbbaaaaaaaaaaaaaaaabbbbbbaaaabbbaabbbbaaaabbbaabbbbbbbba + abbbbbbbbbaaaaabbbaabbbaabaaaaaaabbbbaaaaaaaabaaaaaaabbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaabbbaabbaaaaabbbbbaaaaaabbbbbaaaaabbbbbbaaaaaabaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbaaaaabbbbbbaaaabbbbbbaaaaabbbbbbbaaaaabbaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaaabbbbbbaaaaaabbbbbbbaaaabbbbabbaaabbbaaaabbbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbbabbbbbbbbaaaaaabbbbaaaaaaabbbbaaaaabbbbabaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaaaaabbbbaaaaabbbbbaaaaabbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbaaaaabbbbbaaaaabbbbaabbaaabbbbaabbbaaaabbaabbbbbbbba + abbbbbaaaaaabbbbaabbbbaabbbbaaabbbabbbaaaaabbbbbaaaaaabbbaabbaaabbbbaabbbaaaabbbabbbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbbaaabbaaaabaaaaaaabbbbaaaabbbaaabbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaaabbbaaaaaaabbbbaaabbbaaaabaaaabbbbaabbbbabbbbbaaaaabbbba + aabaaaaaaaabbbaaaaabbbbabbbaaaaaaabbbbaaabaaabbbbabaabbbbaaaaaaaabbbabbbbaaabbbaaaaaabbbba + aabaabbbbbabbbbabbabbbbabbbbaaaaaabbbbbaabaaabbbbbbaabbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbaabbaaaaaabbbbbbaabbaabbaaaaabbbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaabbbaaabbaaabbbbbbbbaabbaabbaaaaabbbbbbbaaaaabbbbabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbbabbbbaabbaaaaaaaabbbbbaababbbaabbaaaabbbbbbbbbaaaabbbaabbbaaaaabbbaabbaaabba + baaabbbbbbbbbaabbbbaaaaabaaaaaabbbbbaabaaabaabbaaaabbbaaabbbbaaaabaaabbaabbbabbbbbbbbbaaba + aaaaabbbbbbbbaabbbaaaaabbbaaaaabbbbaabbaaabbabbaaaabbbaaabbbbaaaaaaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabaaabbbbaaaaabbaaabbaaaaaabbaaaabbbaaabbbbaaaaabbabbaabbbaabbbbbbbbbaba + bbabbbbaabbbbaaaaaaaaaabbbbaaaaabbaaabbbaaababbaaaabbbbaaabbbaaaabbbaaaaaabbaaabbbbbbbbaba + bbabbbbbbbbbbaaabbaaaaabbbbaaaaaabaabbbbaaabbbbaaaabbbbaaabbaaaaabbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbaaaaaaaaabbbbbaaabbbabbabbbbbaabaaaaaabbbbaaaaaaaaabbbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbbaaaaaaaabbbbbbaaabbbaaabbabbbbaaaaaaaabbbbaaabbbaaaabbbbbbbbbaa + babbbbbaaaaaaabbbbaaaaabbbbaaaabbbbbbbbbbaaaabbbabababbbbbaaaaaaabbbbaaabbbbaaaabbbbbbbbaa + baaaaaaaaaaabbbbbbaaaaaabbbaaaabbbbbbbabbaaaabbbbbabaabbbbbbabababbbbaaaabbbaaaaabbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbbaabbbbbbbaaabbaaaaaaabbabaaabbbbbbbbbabbbaaaaaabbbaaaaaaabbbbaa + baaaabbbbbaabbbbbaabbbaabbbabbbbbbaaaaabbaaaaaaabbabaaaabbbbbbbbabbbaaabaabbbbaaaaaaabbbab + baaaabbbbbaabbbbbaabbaaabbbbbbbbbaaaaaabbbaaaaaabbabaaaaabbbbbbbbbbbaabbaabbbbbaaaaaaaabab + aaaabbbbbbaabbbbbaabbaaaabbbbbbaaaaaaaabbbaaaaaabbbbaaaaaaabbbbbbbbbaabbaabbbbbbaaaaaaaaaa + aabbbbbabbaabbbbbaabbbaaabbbaaaaaaaaaaabbbbaaaaabbbbaaaaaaaabbbbbbbbaabbaabbbbbbabbbbbaaaa + aabbbbbbbbaaabbbbaabbbaaabbbaaaaaaaaaaabbbbaaaaabbbbaaaaaaaaaabbbbbbaabbbabbbbbbabbbbbbaaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaaaaaaaaabbbbaaaabbbbaaaaaaaaaaaabbbbbaabbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaaabaaaaabbbbbaabbbbbaaaaaaaaaaaaabbbbbaabbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaaabbbbaaaaabbaaaaabaaabbbbbbbbaaaaaaaaaaaaaabbbbaabbaabbbaaabbbbbbbba + aaabbbbaaaabaabbaabbaaabbbbaaaaabbaaaaaaabaabbbbbaaaaaaaaabbaaaaaabbbbaabbabbbaaaabbbbbbba + abaabbbaaabbaaaaaaaaabbabbbaaaabbbaaaaaaabbaaabbbaaaabaaaabbbbaaaaabbbaabbabbbaaaabbbbbbba + bbaabbbaabbbbaaaaaaabbbbbbbaaaabbbbbbaaabbaabbabbaaaabaabbbbbbbaaaabbbaaababbaaaaaabbbbbaa + bbbbaaaaabbbbbaaaaaabbbbbbbaaaabbbbbbaaaabbbaaabbaaaaaaabbbbbaaaaaabbbbbaaaaaaabbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbbbbaaaabbbbbbaaaabaabbaabaaaababaabbbaaaaaabbbbbaaaaaabbbaaabbbaaa + abbbaaaabbbbbbbaaabbbbbbbbbaaabbbbbbbaaabbbbaabbbaaaababaabbbaaaaaabbbbbaaaaaabbbaaaabaabb + aaabaaabbbbbbbaaaabbbbbbbbaaaabbbbbbaaaabbabbbaabaaaabbbaabbbaaaaaabbbbbabaaabbbbbbaaabbbb + abbbaaaabaaaaaaaaabbbbbbbbaaaabbbbbbaaaabbbaaabbbaaaabbbaabbbaaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbaabbbbbbbbbabaabbbbbbbaaaaaabbbaabbaaababaabbbaaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbaaabbbbbbbaabaabbbaabbaaabbbaabbbbbaaabbaaabbbaaaaaabbbbbbbaaaaaaaabaaabbaa + abbbaaabbbbbbbbaaabbbbbbbaaaaabbbaaabaaaaabbbaabbbaaabbaabbbbaaaaaabbbbbbbbaabbbbbbaaabbbb + abbbaaabbbbbbbbaaaabbbbbbaaaaabbbaaaaaaabbbaabbbbaaabbbaabbbbaaaaaabbbbbbbaabbbbbbbaabbbba + bbbbaaabbbbbbbbaaaabbbbbbaaaaabbbaaaaaaaabbbbaabbaaaabbaabbbaaaaaaabbbbbbbbabbbbbbbbbbbbba + abbbaaabbbbbbbbaaaabbbbbaaaaaabbbaaabaaabbbaabbbbaaabbaaabbbaaaaaaabbbbbbbbabbbbbbbbbbbbba + abbbaaabbbbbbbbaababbbbbaaaaaabbbaaaaaaaaabbaaabbaaabbaaabbbaaaaaaabbbbbbbbabbbbbbbbbbbbba + abbbaaabbbbbbbaaabbabbbbaaaaaabbaaaaaaaabbaabbbabaaabbaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaabbbbaabbbaaaabaabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaabbaabbbbbaaaaaaabbbbaaabaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaabbaaabbaaabbbbbbaaaaaaaaaabbbabbabbbbaaabbaaaabaabbbaaaabaaaabbbbbbbbbbbbbbbbbbbbba + abbbaaaaaaaaabaaabbbbbbaaaaaaaaabbbbbbbabaaabbbbbaaaabaabbbaaaabaaaabbbbbbbbbbbbbbbbbbbbba + abbaaaaaaababbaaabbbbbbaaaaaaaaabbbbbbaabbbbaaaabaaaabaabbbaaaabaaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbaabaabbbbbbbaaaaaaaabbbbbbbaabaaabbbbbaaabaabbbbaaaabaaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbaaabbaabbbabbbbaabbbbaaabbaaabaabbbbaaaabaaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbaabbabbbbbabbbaaabaaabbbbbaaabaabbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaaabbbbbaaaaabbbbbbbbbbaaabbbbaaabbaaaaabbbbbbaaabbaaabbbbbbbbbbbbbabbbbbbba + abbaaabbbbbbbbaaabbbbbaaaabbbbbbbbbbbaaabaaabbbbbaaaabbbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaaabbbbaaaaabbabbbbbbaaabbbbbaaabbaaaabbbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaabbbbbbaaaaabaaabbbbbaaabbaaabbbbbaaabbbbbbbaaaabbaaabbbbbbbbbbbbbaaabbbbba + babaaabbbbbbbbaabbbbbbaaaaabaaabbbbaaaaabbbbaaabbaaabbbbbbbaaaabbaaaabbbbbbbbbbbbbabbbbbba + babaaabbbbbbbbaaabbbbbaaaaaaaaabbbbaaaabbaaabbbbbaaabbbbbbbaaaabbaaaabbbbbbbbbbbbbabbbbbba + babaabbbbbbbbbaabbbbbbaaaaaaaaabbbaaaaabbbbbbaaabaaaabbbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbaaabbbabaaaabbbbbbaaabbbaaaabbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaaabbbbbbbbbbaaaabbbaaaaaaaabbbbbbaaabaaaabbbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbbb`, + map `abbbbabbbbbbbbbbaabaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + abbbbabbbbbbbbbbaabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaaabbaaaaaabbbbaaaabbbabaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaaaaaaabbbbbaaaaaaaaaaaabbbbbbbbbaabbbbbbbbbbbaaaaabbbbbbbbbbbba + bbbbbbbbbaaaabbbaabaaaaaaaabbbaaabbaaaaaaaaaaaaaaabaaabbbbbabbbbabbbbbbbaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaaabaaaabaaaaabaaabbbbbaaaaabaaaaabaaaaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbaabbbabbbbaaaaaaaaaaaaaabaaabbbbbbaaaabbaaaababbaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbbabbbbbbbaaaaaabbaaaaaaabbbbbbaaaabaaabbbbbbbbaaaaaaabbbabbbbbbbbbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbabbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbaaaabbbbbbbbbabbbbbbbbbbaabbbaaabbbbbbba + bbbbaaabbbbbaaaabbbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaaabbbaabbbbbbba + abbbaaaaabbbaaabbbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaabbbbaaabbbba + abaabbbaabbbaaabbbbbbbbbaaaabaabbbaaaaaaaabbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaabbbbbaabbbbb + aaaabbbaaaaaaaabbbbbbbbaaaabbaabbbaaaaaaaabbbbbbbaaaaaaaaaaabaaaabbbbbbbbbbaaaabbbbaabbbbb + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaaabbaaabbbbbbbaaaabaaaaabbabaaaaabbbbbbbbbaaabbbaaabbba + abbbbbbbaaaaaabbbbbaaaaaaabbbaabbaabbbbbbbbbbbbbbbbabbbaaaabbabbaaaabbbbbbbbbaabbbbaaaabba + abbbbbbbaaaaabbbbbaaaaaaabbbbaaaaaabbbbbbbbabbaabbbbbbbaaaabbaabbaaaaaaabbbbbaaabbaaaaabba + abbbbbbbbaaaabbbbaaabbbaabbbaaaaaabbbbbbbbaaaaaaaaabbbbbbbaaaaabbbaaaaaabbbbbaaaaaaabbaaba + abbbbbbbbbaaabbbaaaabbbaabbbaaaaabbbbbbaaaaaaaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaaabbbaba + abbbbbbbbbaaabbaaaaabbbbaabbaaaabbbbbbaaaaabaaaaaaaabbbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbaaaaaaaaaaaaaaaabbbbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbaaaaaaaaaaaaaaaabbbbbbbaaaabbbaabbbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaabbaaabbbbaaaaaaaaaabbbaaaaaaaabbaaaaaabbbbbbbaaaabbbaabbbbaaaaabbaabbbbbbbba + abbbbbbbbbaaaaabbbaabbbaabbaaaaabbbbaaaaaaabbbbaaaaaabbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaabbbaabbaaaaabbbbbaaaabbbbbbaaaaaabbbbbbbaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbbbaabbbbbbbaaaaaabbbbbbbaaaaabbaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaababaaabbbbbaaaaaabbbbabbbbbbbbaaaaaabbbbbbaaaaabbbbabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbbaaaabbbbbaaaaaabbbbaaaaaaabbbbaaaaabbbbabaaabbbbbbba + abbbbbbbaaaabbaaaaabbbaabbbbaaaaaabbbbaaaabbbbbbaaaaabbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbaaaaabbbbbaaabbbbabbbbaaabbaabbbaaaabbbbbbaaaaabbbbaabbaaabbbbaabbbaaaabbaabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbababaaaaaaabbbaaaaabbbbaabbaaabbbbaabbbaaaabbbabbbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbaaaabbaabbbaaaaaaabbbbaaabbbaaaabbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaabbbbaaaaaaabbbbaaabbaaaaaabaaaabbbaabbbbabbbbbaaaabbbbba + aabaaaaaaaabbbbaaaaabbbabbbaaaaaaabbbbaabbaaabbbbbbabbbbbaaabaaaabbbabbbbaaabbbaaaaaabbbba + aabaabbbbbbbbbbabbaabbbabbbaaaaaaabbbbaabbaaabbbbbbbbbbbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbaabbaaaaaabbbbbaabbaaabbaaaabbbbbbbbaaaaabbbaabbbaaaaaabaaaaaaabbba + bbaabbbbbbbbbbaabbaabbbaaabbaaabbbbbabaabbaaabbaaaabbabbbbbbaaaabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaabbbbaabbaaaaaaaabbbbbaabaaaaaabbaaaabbbabbbbbaaaabbbaabbbaaaaabbbaabbaaaaba + baaabbbbbbbbbaabbbbaaaaabaaaaaabbbbbabbaaabbabbaaaabbbaaabbbbaaaabaaabbaabbbabbbbbbbbbaaba + aaaaabbbbbbbbaabbaaaaaaabbaaaaabbbbaabbaaaaaabbaaaabbbaaabbbbaaaaaaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabaaabbbbaaaaabbaaabbaaaababbaaaabbbaaabbbbaaaaabbaababbbbaabbbbbbbbbaba + bbabbbbbbbbbbaaaaaaaaaabbbbaaaaaabaabbbbaaabbbbaaaabbbbaaabbaaaaabbbaaaaaabbaabbbbbbbbbaba + bbabbbbbbbbbbaaabbaaaaabbbbaaaaaaaaabbbbbaaabbbaaaabbbbbaabaaaaaabbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbaaaabaaabbbbbbaaabbbabbbbabbbbbbaaaaaabbbbaaaaaaaaabbbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbbaaaabbbbbbbbbbaaaabbaaabbaabbbbbbaaaaabbbbaaaabbaaaabbbbbbbbbaa + babbbbaaaaaaaabbbbaaaaabbbbaaabbbbbbbaabbaaaabbbbbabaabbbbbbbbbaabbbbaaaabbbaaaabbbbbbbbaa + baaaaaaaaaaabbbbbbaabaabbbbaabbbbbbbaaaabaaaaaabbbabaaaabbbbbbbbbbbbbaaaabbbaaaaabbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbbabbbbbbaaaaaabbaaaaaabbabbaaaabbbbbbbbbbbaaaaabbbbaaaaaaabbbbaa + baaaaabbbbaabbbbbaabbaaabbbbbbbbbaaaaaaabbaaaaaabbabbaaaaaabbbbbbbbbaaabaabbbbaaaaaaabbbab + baaaabbbbbaabbbbbaabbaaabbbbbbbaaaaaaaaabbbaaaaabbbbbaaaaaaaabbbbbbbaabbaabbbbbaaaaaaaabab + aaabbbbbbbaabbbbbaabbbaaabbbaaaaaaaaaaaabbbaaaaabbbbaaaaaaaaaabbbbbbaabbaabbbbbbaabaaaaaaa + aabbbbbbbbaabbbbbaabbbaaabbbaaaaaaaaaaaabbbbaaaabbbbaaaaaaaaaaaabbbbaabbaabbbbbbabbbbbaaaa + aabbbbbbbbaaabbbbaabbbaabbbaaaaaaaaaaaabbbbbaaaabbbbaaaaaaaaaaaaabbbbabbbaabbbbbaabbbbbaaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaaaaaaaaaabbbbbabbabbaaaaaaaaaaaaaaabbbbbbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaabbbbbaaaaabbaaaaaabaaabbbbbbbaaaaaabaaaaaaaaabbbabbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaaabbbbaaaaabbaaaaaaabaaaabbbbbaaaaaababbbaaaaabbbaabaabbbaaaabbbbbbba + aaabbbbaaaabaabbaabaaaabbbbaaaabbbaaaaaaaaabaaabbaaaaaaaaaabbbbaaaabbbaabbabbbaaaabbbbbbba + abaabbbaaabbbaaaaaaabbbbbbbaaaabbbaaaaaaabbaaabbbbaaabaabbbbbbaaaaabbbaabbabbbaaaabbbbbbaa + bbaabbbaabbbbaaaaaaabbbbbbbaaaaabbaabbaaaaabbbaaabaaabaaabbbbaaaaaabbbbbababbaaaaaabbbbbaa + bbbbaaaaabbbbbaaaaaabbbbbbbaaaabbbaaaaaaabbaaabbbaaaabbababbbbaaaaabbbbbaaaaaabbbaaabbbbaa + abbbaaaaabbbbbaaaaabbbbbbbbaaaabbbaaaaaaaabbbbaabaaaabbaaabbbbaaaaabbbbbaaaaaabbbaaabbbaaa + abbbaaabbbbbbbbaaabbbbbbbbaaaabbbbaaaaaaabbaaabbbaaabbbbaaabbaaaaaabbbbbabaaaabbbaaaabbabb + aaabaaabbbbbbbaaaabbbbbbbbaaaabbbbaaaaaaaabbbbaabaaaabbbaabbbaaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbaaaaaaaaabbbbbbbbaaaabbbbaaaaaaaaaaabbbbaaabbbbaabbbaaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbaabbbbbbbbaabbaabbbaaaaaaabbbbaabbbaaabbaaabbbaaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbaaabbbbbbbaaaaaabbbaaaaaaaaaaabbbbaaaabbaaabbbaaaaaaabbbbbbbaaaaaaabbaabbaa + abbbaaabbbbbbbbaaabbbbbbbaaaaaabbaaaaabaabbbaaabbaaaabbaabbbbaaaaaaabbbbbbbaabbbbbbaaabbbb + abbbaaabbbbbbbbaaaabbbbbbaaaaaabaaaabbbbbbaabbbbbaaaabbaabbbbaaaaaaabbbbbbaabbbbbbbbaabbba + bbbbaaabbbbbbbbaaaabbbbbbaaaaaaaaaabbbbbbbbbaaabbaaaabbaabbbbaaaaaaabbbbbbbabbbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbaaaaaaaaaaabbbbbbaaabbbabaaabbaaabbbbaaaaaaabbbbbbbbbbbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbaaaaaaaaaaabbbbbbbbaaabbbaaabbaaabbbaaaaaaaabbbbbbbabbbbbbbbbbbbba + abbbaaabbbbbbbaaabbabbbbaaaaaaaaaabbabbbbaabbbbabaaabbaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbaaabbbbbbbaaaaaaaaaabbaabbbbbaaabbbaaabbaabbbbaaaabaaabbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbbbbbaaaaaaaabbbbaabbbaabbbbabaaabbaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbaaabbaaaabaaabbbbbbaaaabbaabbbbbabbbaaaaaaabbaaabbaabbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbaaaaaaaaabaaabbbbbbaaaabbabbbbbbbbbbaabbbbbbbaaabbaabbbbaababaaabbbbbbbbbbbbbbbbbbbbba + abbaaaaaaababbaaabbbbbbaaabbbbbbabbbbbbaabaaaabbbaaabbabbbbbaababaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbaabaabbbbbbbaaaabbbbbaabbbbbaaabbbbbabaaaaaabbbbaaababaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbaaaabaabaabbbbbaaabbaaabbbaaababbbbbaaababaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbaaaabaabaabbbbaaaaabbbbbabaaababbbbbaaaaabaaabbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaaabbbbbbaaaaaabbaaabbaaaaabbaaabbbaaaaabbbbbaaaaabaaabbbbbbbbbbbbbabbbbbbba + abbaaabbbbbbbbaaabbbbbbaaabaabaaabaaaaaaabbbbbbabaaabbbbbbbaaaaabaaabbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaaabbbbaaaabaaaaabbaaaaaabbbaaabbbaaabbbbbbbaaaaabaaaabbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaabbbbbbbaaabaaaabbbaaaaaaaaabbbbabaaaabbbbbbbaaabbaaabbbbbbbbbbbbbaaabbbbba + babaaabbbbbbbbaaabbbbbbaaabaaabbbaaaaaaabbbbaaabbaaaabbbbabbaaabbaaabbbbbbbbbbbbbbabbbbbba + babaabbbbbbbbbaabbbbbbbaaaaaaabbbaaaaaaaaaabbbbabaaaabbbbbbbaaabaaaabbbbbbbbbbbbbbabbbbbba + babaabbbbbbbbbaabbbbbbbaaaaaabbbaaaaabaabbbbbaaabaaaabbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbabbbbbbbbbaaaaabbbaaaaaaaaababbbbabaaaabbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaaabbbbbbbbbbbaaaaabbaaaaaaaabbbaaaaabaaaabbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbbbb`, + map `abbbbabbbbbbbbbbaabaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + abbbbabbbbbbbbbbaabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaaabbaaaaaabbbbaaaabbbabaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaabaaaabbbbbaaaaaaaaaaaabbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbba + bbbbbbbbbaaaabbbaabaaaaaaaabbbaaabbaaaaaaaaaaaabaabaaabbbbbabbbbabbbbbbbaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaaabaaaaaaaaaabaaabbbbbaaaaabaabbabaaaaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbaabbaabbbbaaaaaaabaaaaaabaaabbbbbbaaaabbaaaabbbbaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbaabbbbbbbaaaaaabbaaaaaaabbbbbbbaaabbaabbbbbbbbaaaaaaabbbabbbbbbbbbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbbaaaaabbbbaaaabbbbbbbbaaaaaabbbbbbbabbbbbbbbbbbabbbaaaabbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbaaaaaabbbbaaabbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbaaabbbbbbba + bbbbaaabbbbbaaaabbbbbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaabbbaaabbbbbba + abbbaaaaabbbaaabbbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaabbbbbaabbbba + abaabbbaaabbaaabbbbbbbbbaaaabaabbbaaaaaaabbbbbbbbbbbaabbbbbaaaaaabbbbbbbbbbaaaabbbbaabbbbb + aaaabbbaaaaaaaabbbbbbbbaaaabbaabbbaaaaabbbbbbbbbbbbbaaaaaaabbaaaaaabbbbbbbbaaaabbbbaaabbbb + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaaabbbbbbbbbbbbbbbabbaaaabbabaaaaabbbbbbbbbaaabbbaaabbba + abbbbbbbaaaaabbbbbbaaaaaaabbbaabbaabbbbbbbabbaaabbbbbbbaaaabbaabaaaabbbbbbbbbaabbbbaaaabba + abbbbbbbaaaaabbbbbaaaaaaabbbbaaaaaabbbbbbaaaaaaaaabbbbbbaaabaaabbbaaaaaabbbbbaaabbaaababba + abbbbbbbbaaaabbbbbaabbbaabbbaaaaabbbbbaaaaaaaaaaaaabbbbbbbaaaaaabbaaaaaaabbbbaaaaaaabbbaba + abbbbbbbbbaaabbbaaaabbbaabbbaaaabbbbbaaaaabbaaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaaabbbaba + abbbbbbbabaaabbbaaaabbbbaabbaaaabbbabaaaaabaaaaaaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabaaaabbbaaaaaaaaaaaaaaaaabbbbbbbaaaaabbaabbbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbaaaaaaaaabbaaaaaabbbbbbbaaaaabbaabbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaaabbaaabbbbaaaaaaaaaabbbaaaaaabbbbaaaaaabbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbbbbbbbbaaaaabbbaabbbaabbaaaaabbbbaaaaabbbbbaaaaaabbbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaabbbaabbaaaaabbbbbaaabbbbbbaaaaaabbbbbbbbaaaaabaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbbaabbbbbbbaaaaaabbbbbbbbaaaaabbaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaababaaaabbbbaaaaaabbbaaaabbbbbbaaaaabbbbbbbbaaaabbbbabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbaaaaabbbbbaaaaaabbbbbaaaaaabbbbaaaaabbbabbaaabbbbbbba + abbbbbbbaaaabbaaaaabbbaabbbbaaaaaabbbaaaaabbbbbaaaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbbabbbbaaabbaabbbaaaaaabbbbaaabbbbbbaabbaaabbbbaabbbaaaabbaabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaaaaaaaabbbabaabbbbbaabbaaabbbbaabbaaaaabbaabbbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbaaaabbaabbaaabaaaabbbabaabaaaaaabbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaabbbbaabbaabbbbbaabbaaaaaaabaaaabbbabbbbbabbbbbaaaaabbbba + aabaaaaaaaabbbbaaaaabbbabbbaaaaaaabbbbaabbaabbbbbbabbabbbaaabaaaabbbabbbbaaabbbaaaaaabbbbb + aabaabbbbbbbbbbabbaabbbabbbaaaaaabbbbbaabbaabbbabbbbbbbbbbbaaaaaabbbabbbaaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbaabbaaaaabbbbbbaabbaabbbaaaabbabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbbabbbaaabbaaabbbbbbbaaabaabbbaaaabbabbbbbbaaaabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaabbbbaabbaaaabaaabbbbbaabaabbaabbaaaabbbaabbbbaaaabbbaabbbaaaaabbbaaabbaaaba + baaabbbbbbbbbaabbbbaaaaabaaaaaabbbbbabbaaabaabbaaaabbbaaabbbbaaaabaaabbaabbbabbbbbbbbbaaba + aaaaabbbbbbbbaabbaaaaaaabbaaaaabbbbaabbaaababbbaaaabbbaaabbbbaaaaaaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabbaabbbbaaaaabbaabbbbaaabbbbaaaabbbbaabbbbaaaaabbaabaabbbaabbbbbbbbbaba + bbabbbbbbbbbbaaaaaaaaaabbbbaaaaaabaabbbbbaabbbbaaaababbbbabbaaaaabbbaaaaaabbaaabbbbbbbbaba + bbabbbbbbbbbbaaabbaaaaabbbbaaababbbbbbbbbaabbbbaaaabbabbbbbbaaaaabbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbaaabbbbbbbbbbbaaaabbabbbbbabbbbbbbbaaabbbbaaaaaaaaaabbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbbaabbbbbbbbaaabaaaabbbaaaabaaabbbbbbbbabbbbaaaabbaaaabbbbbbbbbaa + babbbbbaaaaaaabbbbaaaaabbbbaabbbbbbbaaaabbaaaabbbbabbaaaaabbbbbbbbbbbaaaabbbaaaabbbbbbbbaa + baaaaaaaaaaabbbbbbaabaaabbbabbbbbbaaaaaabbaaaaabbbabbaaaaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbbbbbbbaaaaaaaabbbaaaaabbabbaaaaaaaaabbbbbbbaaaaabbbaaaaaaabbbbaa + baaaaabbbbaabbbbbaabbaaabbbbbbbaaaaaaaaabbbbaaaabbabbaaaaaaaaaabbbbbaaabaabbbbaaaaaaabbbaa + baaaabbbbbaabbbbbaabbaaabbbaaaaaaaaaaaaabbbbaaaabbbbbaaaaaaaaaaaabbbbabbaabbbbbaaaaaaaabab + aaabbbbbbbaabbbbbaabbbaabbbaaaaaaaaaaaaabbbbbaaabbbbbaaaaaaaaaaaaabbbabbaabbbbbbaaaaaaaaaa + aabbbbbbbbaabbbbbaabbbaabbbaaaaaaabaaaaabbbbbbaabbbbaaaaaaaaaaaaaaabbbbbaaabbbbbabbbbbaaaa + aabbbbbbbbaaabbbbaabbbabbbbaaaaabbbbaaaabbbbbbbbbbbbaaaaabbaaaaaaaabbbbbbabbbbbbabbbbbbaaa + aabbbbbbbbaaabbbaabbaaabbbbaaaabbbbbaaaaaaaaaabbbbbaaaabbbbabbaaaaabbbbbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaabbbbbaaaabbbbbbaaaaabbaaaaabbaaaabbbbabbbaaaabbbbbbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaabbbbaaaaabbbbbbaaaaaaaaaabbbaaaaabbbabbbbaaaabbbabbbabbbaaaabbbbbbba + aaabbbbaaaabaabbaabaaaabbbbaaaabbbbaaaaaaabbbbbaaabaaabbbabbbbbaaaabbbaabbabbbaaaabbbbbbba + abaabbbaaabbbaaaaaaabbbbbbbaaaabbbbaaaaaaaaaaabbbbbaaabbbbbbbbaaaaabbbaabbabbbaaaabbbbbbaa + bbaabbbaabbbbaaaaaaabbbbbbbaaaabbbbaaaaaaabbbbaaabbaaabbbbbbbaaaaaabbbbaababbaaaaaabbbbbaa + bbbbaaaaabbbbbaaaaaabbbbbbbaaaabbbbaaaaabbbbbabbbbaaaabbbbbbbaaaaaabbbbbaaaaaabbbaaabbbbaa + abbbaaaaabbbbbaaaaabbbbbbbbaaaaabbbaaaabbbbbbbaaabaaaabbbbbbbbaaaaabbbbbaaaaaabbbaaaabbaaa + abbbaaabbbbbbbbaaabbbbbbbbaaaaabbbbaaaabbbbbbabbbbbaaabbbbbbbbaaaaabbbbbabaaaabbbaaaabbabb + aaabaaabbbbbbbaaaabbbbbbbbaaaaaabbbaaabbbbbbbbaabbaaaabbbbbbbbaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbaaaaaaaabbbbbbbbbaaaaaabbbaaabbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaaaaabbbaaabbbbbbbbaaabbaaaabbbbbbbaaaaaabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaabbbbbbbbaaaaabbaaaabbaabbbbbbbbbaaaabbbabbbaaaaaabbbbbbbbaaaaaaabbaabbaa + abbbaaabbbbbbbbaaaabbbbbbaaaaaaaaaaaabbaabbbbaabbbbaaabbbbbbbaaaaaabbbbbbbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbaaaaaaaaaaabbbabbbbbbbbbbaaaabbbbbbbaaaaaabbbbbbbbabbbbbbbbaabbba + bbbbaaabbbbbbbbaaaaabbbbbaaaaaaaaaaabbbabbbbaaabbbaaaabbbbbbaaaaaaabbbbbbbbabbbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbaaaaaaaaaabbbbbbbbabbbabbaaabbbbbbbbaaaaaabbbbbbbbabbbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbaaaaaaaabbbbbbbbbaaaaabbbaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbabbbbaaaaabbabbbabbbbbaabbbbaabaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbaaabbbbbbbaaaaabbbbbbaabbbaaaaaabbbbaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbbbbbaaaabbbbabaabbbbaaabbbbabbaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaabbaaaabaaabbbbbbbaaaaabbaabaaabbaaaaaabbbbbaabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaaaaabaabaaabbbbbbbaaaabbaabbaabbaaaaabbbaabbaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbaaaaaaaaabbaaabbbbbbbaaaabbaabaaabaaaaabbabbbbbaabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbaabaabbbbbbbbaaaaaaaabaabbaaaaaabbbbbbbaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbaaaaaaaababbbaaaaaabaaabbbaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbaaaaabaabbbbaaaaaaabbbbbbbaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbaaaabbaabbbbaaaaaaabaaabbbaaabbbbbbaaaaaaaabbbbbbbbbbbbbbabbbbbbba + abbaaabbbbbbbbaaaaabbbbbaaaabbaabbbaaaaabaabbbbbbbaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaaabbbbbbaaaaabbabbbaaaaaaaabaaabbbaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaabbbbbbbbaaaaaabbaaaaaaabaaabbbbbbbaaabbbbbaaaabaaabbbbbbbbbbbbbbbbaabbbbba + babaaabbbbbbbbaaabbbbbbbaaaaaabbaaaaaaabbabbbaabbbaaabbbbbaaaabaaabbbbbbbbbbbbbbbbabbbbbba + babaabbbbbbbbbaabbbbbbbbbaaaaaaaaaaaaabbaaabbbbbbaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbabbbbbba + babaabbbbbbbbbaabbbbbbbbbbaaaaaaaaaaaabbbbbaabbabbaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbabbbbbbbbbbbaabbaaaaaaaabbbbbbabbbbbaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaaabbbbbbbbbbbbbbbbbaaaaaaabbbaaababbbbaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbb`, + map `abbbbabbbbbbbbbbaabaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbba + abbbbabbbbbbbbabaabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbabbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaabbbaaaaaabbbbaaaabbbabaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaaaaaaabbbbbaaaaaaaaaaaabbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbba + bbbbbbbbbaaaabbbabbaaaaaaaabbaaaabbaaaaaaaaaaabaaaaaaabbbbbabbbbabbbbbbbaaaabbbbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaabbabaaaaaaabaaaabbbbbaabaaaaaababaaaaaaaaaaaaaaaabbbbbbbbbbbbba + abbbbbbbaaabbbbabbbabbbbbaaaaabbbaaaaabaaaabbbbbbaaabbbaaaabbbbaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbabbbbbbbbaaaaaabbaaaaaaabbbbbbaaaabaabbbbbbbbbaaaaaaabbaabbbbbbbbbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbaaaaaabbbbbaaabbbbbbbbaaaaaabbbabbbabbbbbbbbbbaabbbaaaabbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbaaaaaabbbbaabbbbbbbbbbaaaabbbbbaaaaabbbbbbbbbbbabbbaaabbbbbbba + bbbbaaabbbbbaaaabbbbbbbbbbbaaaaaaabbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaaabbbaaabbbbbba + abbbaaaaabbbaaabbbbabbbbbaaaaaabbbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaaaabbbbbaabbbba + abaabbbaabbbaaabbbbbbbbbaaaabaabbbaaaabbbbbbbbbbbbbbaabbbbbaaaaaabbbbbbbbbaaaaabbbbaabbbbb + aaaabbbaaaaaaaabbbbabbbaaaabbaabbbaabbbbbabbbaabbbbbaaaaaaabbaaaababbbbbbbbaaaabbbbaaabbbb + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbabbbbbbaaaaaaaabbbbbaaaaabbaaaaaaabbbbbbbbaaabbbbaaabbba + abbbbbbbaaaaabbbbbbaaaaaaabbbaabbbabbbbbaaaaaaaaaabbbbbaaaabbaabaaaabbbbbbbbaaabbbbaaaabba + abbbbbbbaaaaabbbbbaaaaaaabbbbaaaaabbbaaaaaaaaaaaaabbbbbbaaabaaabbbaaabbabbbbaaaaabaaababba + abbbbbbbbaaaabbbbbaabbbaabbbaaaabbbbaaaaabbaaaaaaaabbbbbbbaaaaabbbaaaaaabbbbbaabaaaabbbaba + abbbbbbbbaaaabbbaaaabbbaabbbaaabbbabaaaaaaaaaaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaabbbbaba + abbbbbbbbbaaabbbaaaabbbbaabbaaabbbaaaaaaaaaaaaaaaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabaaabbbbaaaaaaabbbbaaaaabbbbbbbbaaaaabbaabbbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbaaaaaabbbbbaaaaabbbbbbbbaaaabbbabbbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaaabbaaabbbbaaaaaaaaabbbbaaaabbbbbbaaaaaabbbbbbbaaaabbbaabbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbaaaaabbbbbaabbbbbbbaaaaaabbbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaabbaaabbaaaaabbbbbabbbbbbbbaaaaaabbbbbbbaaaaaabaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbbaaaabbbbbaaaaaabbbbbbbbaaaaabaaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbaaaabbbbbbaaaaabbbbbbbaaaaabbbbabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbaaaabbbbbbaaaaabbbbbbaaaaaabbbbaaaaabbbabbaaabbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaaababbbaaaaaaabbbaabaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbbabbbbaaabbabbbaaaaaaabbbbababbbbbbaabbaaabbbbaabbaaaaabbaaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaaabaaabbbbbbabbbbbbaabbaaabbbbaabbaaaaabbaaabbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbaaaabbabbbaaabaaabbbbbaabaaaaaabbbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaabbbbabbbaabbbbbaabbaaaaaabbaaaabbbabbbbbabbbbbaaaaabbbba + aabaaaabaaabbbbaaaaabbbabbbaaaaaaabbbbaabbaabbbbbbbbbabbbaaabaaaabbbabbbbaaabbbaaaaaabbbbb + aabaabbbbbbbbbbabbaabbbabbbaaaaaaabbbbaabbaabbbabbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbaabbaaaaabbbbbbaaabaabbbaaaabbabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaabbbaaabbaaabbbbbbbaaabbabbbaaaabbbbbbbbbaaaabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaabbbbaabbaaabaaaabbbbbabbaaabaabbaaaabbbaabbbbaaaabbbabbbbaaaaabbbaabbbaaaba + baaabbbbbbbbbaabbbbaaaaabaaaaaabbbbbbbbaaababbbaaaabbbaabbbbbaaaabaaabbaabbbabbbbbbbbbaaba + aaaaabbbbbbbbaabbaaaaaaabbaaaaabbbbbbbbbaabbbbbaaaabbbbbbbbbbaaaaaaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabaaabbbbaaaaabbbbbbbbbaabbbbaaaabbbbbbbbbbaaaaabbabbabbbbaabbbbbbbbbaba + bbabbbbbbbbbbaaaaaaaaaabbbbaaaaabbbbbbbabbababbaaaaabaabbbbbbbbaabbbaaaaaabbaaabbbbbbbbaba + bbabbbbbbbbbbaaabbaaaaabbbbaabbbbbbbaaaabbaaabbaaaaabaaabbbbbbbbbbbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbaabbbbbbaaaaabbaaaabbbbbabaaaaaabbbbbbbbbbaaaaaaaaabbbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbbabbbbbbaaaaaaabbaaaabaaaabbaaaaaaabbbbbbbbaaaabbaaaabbbbbbbbbaa + babbbbbaaaaaaabbbbaaaaabbbbbbbbbbaaaaaaaabbbaaabababbbaaaaaaaaabbbbbbaaabbbbaaabbbbbbbbbaa + baaaaaaaaaaabbbbbbaabaabbbbbbbbaaaaaaaaaabbbaaaabbabbbaaaaaaaaaabbbbbaaaabbbaaaabbbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbbbbaaaaaabaaaaabbbbaaabbbbbaaaaaaaaaaaaabbbaaaabbbbaaaaaaabbbbaa + baaaabbbbbabbbbbbaabbaaabbbaaaaaaaabbaaaabbbbbaabbbbbaaaaabaaaaaaabbbaabaabbbbaaaaaaabbbaa + baaaabbbbbaabbbbbaabbaaabbbaaaaaaabbbaaaabbbbbaabbbbbaaaabbbaaaaaabbbabbaabbbbbaaaaaaaabab + aaabbbbbbaaabbbbbaabbbaabbbaaaaaabbbbbaaabbbbbaabbbbaaaaabbbbbaaaabbbabbaabbbbbaaaaaaaaaaa + aabbbbbbbaaabbbbbaabbbabbbbaaaaabbbbbbaaaabbbaaabbbbaaaaabbbbbbaaaabbbbbaabbbbbbabbbbbaaaa + aabbbbbbbaaaabbbbabbbbbbbbaaaaabbbbbbbaaaabbbaaabbaaaaaabbbbbbbaaaabbbbbbabbbbbbabbbbbbaaa + aabbbbbbbbaaabbbbabbaaabbbaaaaabbbbbabaaaabbbaaaabbbaaaabbbabbaaaaabbbbbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaabbbbbaaaabbbbbaaaaabbbbbbaaaabaaabbbbbbbaaaabbbbbbbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaaabbbbaaaabbbbbaaaaabbbbbbbbbbbaaabbbbbbbbaaabbbbaabaabbbaaaabbbbbbba + aaabbbbaaaabaabbaabaaaabbbbaaaaabbbbaaaabbbabbbbbaabaaabbbbbbbaaaabbbbaabbabbbaaaabbbbbbba + abaabbbaaabbbaaaaaaabbbbbbbaaaaabbbbaaaabbbabbbbbbbbaaabbbbbbaaaaabbbbaabbabbbaaaabbbbbbaa + bbaabbbaabbbbaaaaaaabbbbbbbaaaaaabbbaaaabbaaabbbaaabaaabbbbbbaaaaaabbbbaababbaaaaaabbbbbaa + bbbbaaaaabbbbaaaaaaabbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaaabbbbbbaaaaabbbbbbaaaaaabbbaaabbbbaa + abbbaaaaabbbbaaaaaabbbbbbbbaaaaaabbbaaabbaabbbbaabbbaaabbbbbbaaaaabbbbbbaaaaaabbbaaabbbaaa + abbbaaabbbbbbbbaaabbbbbbbbbaaaaaabbbaaabbaabbbbbbbbaaaabbbbbbaaaaabbbbbbaaaaaabbbaaaabbabb + aaabaaabbbbbbbaaaabbbbbbbbaaaaaaaabaaabbbabbbbaaabbbaaabbbbbbaaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbaaaaaaaabbbbbbbbbaaaaaaabaaaabbbbbbbbbbbabaaaabbbbbbaaaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaaaaaaaaaaabbbbbbabaaaabbbaabbbbbbbaaaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaabbbbbbbbaaaabbaaaabbabbbbabbbbbabaaaabbbbbaaaaaabbbbbbbbaaaaaaaabbaabbaa + abbbaaabbbbbbbbaaabbbbbbbbaaaabbaaaabbabbbbaaaaabbbbaaabbbbbaaaaaabbbbbbbbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbbaaaabbaaaabaabbbbabbbbbabaaaabbbbbaaaaaabbbbbbbbbabbbbbbbbaabbba + bbbbaaabbbbbbbbaaaabbbbbbbaaaabbaaaabaabbbaaaaabbbbbaabbbbbbaaaaaabbbbbbbbaabbbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbaaaaabbbaabbaaabbaabbbbbbbaaabbbbbaaaaaaabbbbbbbbbabbbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbaaaabbbbaabbaabaaaaaaabbbbbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbaabbbbaaaababbaabbaabaaaabbbbbbbaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbaaabbbabbbbaaaaabbaaabaaabaaaaaaaabbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbbbbbbaaaaabbaaabaabbaaaabbbbbaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbaaaabaaabbbbbbbbaaaaabaaaababbbaaaaaaaabbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaaaaabaabaaabbbbbbbbaaaaabbaaabbbbaaaaabbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbaaaaaaaaabbaaabbbbbbbbaaaabbbbaabbbbaaaaaaaaabbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbaabaabbbabbbbbaaaaabbbbaabaaaaaaabbbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbabbbbbaaaaabbbbaabaaaabaaaaaabbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbaaaaabbbbbaaaaaabaabbbbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbaaaaabbbbbaaaaaabaaaaaabbbaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabaabbbbbbaaaaaabbbbaaaaabbaabbbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaabbbbbbbbbaaaaabbbbbaaaabbbbbbaabbabaabbbbaaaaabbbbbbbbbbbbbbbbbbabbbbbbba + babaaabbbbbbbbaabbbbbbbbbbbaaaaaaaaabaaabbaaabbbbbabaaabbbaaaaabbbbbbbbbbbabbbbbbbbbbbbbba + babaaabbbbbbbbaaabbbbbbbbbbaaaaaaaaabbaabbbaabbbbbabaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbaaaaaaaabbaabbaabaabbbabaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbbabbaaaabbaabbaabaaabbabaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbabbbbbbbbbbbbbbaaaaaaabbaabbaababbbbabaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaaabbbbbbbbbbbbbbbaaaaaaabbaabbbbbabbbbabaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb`, + map `abbbbabbbbbbbbbbaabaabbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbba + abbbbabbbbbbbbabaabbbbbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbabbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaabbbaaaaaabbbbaaaabbbabaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaabaaaabbbbbaaaaaaaaaaaabbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbba + bbbbbbbbbaaaabbbabbaaaaaaaabbbaaabbaaaaaaaaaaabaaaaaaabbbbbabbbbabbbbbbbaaaabbbbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaabbabaaaaaaabaaaabbbbbaabaaaaaababaaaaaaaaaaaaaaaabbbbbbbbbbbbba + abbbbbbbaaabbbbabbbbabbbbaaaaabbbaaaaaaaaaabbbbbbaaabbbaaaabbbbaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbbabbbbbbbaaaaaabbaaaaaaabbbbbbaaaabaabbbbbbbabaaaaaaabbaabbbbbbbbbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbaaaaaabbbbbaaabbbbbbbbaaaaaabbbbbbaabbbbbbbbbbaabbbaaaabbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbaaaaaabbbbaabbbbbbbbbbaaaabbbbbaaaaabbbbbbbbbbbabbbaaabbbbbbba + bbbbaaabbbbbaaaabbbbbbbbbbbaaaaaaabbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaaabbbaaabbbbbba + abbbaaaaabbbaaabbbbabbbbbaaaaaabbbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaaaabbbbbaabbbba + abaabbbaabbbaaabbbbbbbbbaaaabaabbbaaaabbbbbbbbbbbbbbaabbbbbaaaaaabbbbbbbbbaaaaabbbbaabbbbb + aaaabbbaaaaaaaabbbbabbbaaaabbaabbbaabbbbbabbbabbbbbbaaaaaaabbaaaababbbbbbbbaaaabbbbaaabbbb + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbabbbbbbaaaaaaaabbbbbaaaaabbaaaaaaabbbbbbbbaaabbbbaaabbba + abbbbbbbaaaaabbbbbbaaaaaaabbbaabbbabbbbbaaaaaaaaaabbbbbaaaabbaabaaaabbbbbbbbaaabbbbaaaabba + abbbbbbbaaaaabbbbbaaaaaaabbbbaaaaabbbaaaaaaaaaaaaabbbbbaaaabaaabbbaaabbabbbbaaaaabaaababba + abbbbbbbbaaaabbbbbaabbbaabbbaaaabbbbaaaaabbaaaaaaaabbbbbbbaaaaabbbaaaaaabbbbbaabaaaabbbaba + abbbbbbbbaaaabbbaaaabbaaabbbaaabbbabaaaaaaaaaaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaabbbbaba + abbbbbbbbbaaabbbaaaabbbbaabbaaabbbaaaaaaaaaaaaaaaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabaaabbbbaaaaaaabbbbaaaaabbbbbbbbaaaaabbaabbbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbaaaaaaabbbbaaaaabbbbbbbbaaaabbbabbbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaaabbaaabbbbaaaaaaaaabbbbaaaabbbbbbaaaaaabbbbbbbaaaabbbabbbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbaaaaabbbbbaabbbbbbbaaaaaabbbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaabbaaabbaaaaabbbbbabbbbbbbbaaaaaabbbbbbbaaaaaabaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbaaaaabbbbbaaaabbbbbaaaaaabbbbbbbbaaaaabaaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbaaaabbbbbbaaaaabbbbbbbaaaaabbbbabbaaabbbaaaabbbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbaaaabbbbbbaaaaabbbbbbaaaaaabbbbaaaaabbbabbaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaaababbbaaaaaaabbbbabaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbbabbbbaaabbabbbaaaaaaabbbbababbbbbbaabbaaabbbbaabbaaaaabbaaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaaabaaabbbbababbbbbbaabbaaabbbbaabbaaaaabbaaabbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbaaaabbaabbaaabaaabbbbbaabaaaaaabbbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaabbbbabbbaabbbbbaabbaaaaaabbaaaabbbabbbbbabbbbbaaaaabbbba + aabaaaabaaabbbbaaaaabbbabbbaaaaaaabbbbaabbaabbbbbbbbbabbbaaabaaaabbbabbbbaaabbbaaaaaabbbbb + aabaabbbbbbbbbbabbaabbbabbbbaaaaaabbbbaabbaabbbabbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbabbbaaaaabbbbbbaaabaabbbaaaabbabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaabbbaaabbaaabbbbbbbaaabbaabbaaaabbbbbbbbaaaaabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaabbbbaabbaaabaaaabbbbbabbaaabaabbaaaabbbaabbbbaaaabbbabbbbaaaaabbbaaabbaaaba + baaabbbbbbbbbaabbbbaaaaabaaaaaabbbbbbbbaaabaabbaaaabbbaabbbbbaaaabaaabbaabbbaabbbbbbbbaaba + aaaaabbbbbbbbaabbaaaaaabbbaaaaaabbbbbbbbaabbbbbaaaabbbbbbbbbbaaaaaaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabaaabbbbaaaaabbbbbbbbbaabbbbaaaabbbbbbbbbbaaaaabbabbabbbbaabbbbbbbbbaba + bbabbbbaabbbbaaaaaaaaaabbbbaaaabbbbbbbbabbaabbbaaaaabaabbbbbbbbaabbbaaaaaabbaaabbbbbbbbaba + bbabbbbbbbbbbaaabbaaaaabbbbaabbbbbbbaaaabbaaabbaaaaabaaabbbbbbbbbbbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbaabbbbbbaaaaabbaaaabbbbbabaaaaaabbbbbbbbbbaaaaaaaaabbbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbbabbbbbbaaaaaaabbaaaabaaaabbaaaaaaabbbbbbbbaaaabbaaaabbbbbbbbbaa + babbbbbaaaaaaabbbbaaaaabbbbbbbbbbaaaaaaaabbbaaabababbbaaaaaaaaabbbbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaabbbbbbabbaaabbbbbbbaaaaaaaaaabbbaaaabbabbbaaaaaaaaaabbbbbaaaabbbaaaabbbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbbbbaaaaaabaaaaabbbbaaabbbbbaaaaaaaaaaaaabbbaaaabbbbaaaaaaabbbbaa + baaaabbbbbaabbbbbaabbaaabbbaaaaaaaabbaaaabbbbbaabbbbbaaaabbaaaaaaabbbaabaabbbbaaaaaaabbbaa + baaaabbbbbaabbbbbaabbaaabbbaaaaaaabbbaaaabbbbbaabbbbbaaaabbbaaaaaabbbabbaabbbbbaaaaaaaabab + aaabbbbbbbaabbbbbaabbbaabbbaaaaaabbbbbaaabbbbbaabbbbaaaaabbbbbaaaabbbabbaabbbbbaaaaaaaaaaa + aabbbbbbbbaabbbbbaabbbabbbbaaaaabbbbbbaaaabbbaaabbbbaaaaabbbbbbaaaabbbbbaabbbbbbabbbbbaaaa + aabbbbbbbbaaabbbbaabbbbbbbaaaaabbbbbbbaaaabbbaaabbaaaaaabbbbbbbaaaabbbbbbabbbbbbabbbbbbaaa + aabbbbbbbbaaabbbbabbaaabbbaaaaabbbbbabaaaabbbaaaabbbaaaabbbabbaaaaabbbbbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaabbbbaaaaabbbbbaaaaabbbbbbaaaabaaaabbbbbbaaaabbbbbbbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaaabbbbaaaabbbbbaaaaabbbbbbbbbbbaaabbbbbbbbaaabbbbaabaabbbaaaabbbbbbba + aaabbbbaaaabaabbaabbaaabbbbaaaaabbbbaaaabbbabbbbbaabaaabbbbabbaaaabbbbaabbabbbaaaabbbbbbba + abaabbbaaabbbaaaaaaaabbabbbaaaaabbbbaaaabbbabbbbbbbbaaabbbbbbaaaaabbbbaabbabbbaaaabbbbbbaa + bbaabbbaabbbbaaaaaaabbbbbbbaaaaabbbbaaaabbaaabbbaaabaaabbbbbbaaaaaabbbbaababbaaaaaabbbbbaa + bbbbaaaaabbbbaaaaaaabbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaaabbbbbbaaaaabbbbbbaaaaaabbbaaabbbbaa + abbbaaaaabbbbaaaaaabbbbbbbbaaaaaabbbaaabbaabbbbaabbbaaabbbbbbaaaaabbbbbbaaaaaabbbaaabbbaaa + abbbaaabbbbbbbbaaabbbbbbbbbaaaaaabbbaaabbaabbbbbbbbaaaabbbbbbaaaaabbbbbbaaaaaabbbaaaabbabb + aaabaaabbbbbbbaaaabbbbbbbbaaaaaaaabaaabbbabbbbaaabbbaaabbbbbbaaaaabbbbbbabaaabbbbbbaaabbbb + abbbaaaabaaaaaaaabbbbbbbbbaaaaaaabaaaabbbbbbbbbbbabaaaabbbbbbaaaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaaaaaaaaaaabbbbbbabaaaabbbaaaabbbbbaaaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaabbbbbbbbaaaabbaaaabbabbbbabbbbbabaaaabbbbbaaaaaabbbbbbbbaaaaaaaabbaabbaa + abbbaaabbbbbbbbaaabbbbbbbbaaaabbaaaabbabbbbaaaaabbbbaaabbbbbaaaaaabbbbbbbbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbbaaaabbaaaabaabbbbabbbbaabaaaabbbbbaaaaaabbbbbbbbaabbbbbbbbaabbba + bbbbaaabbbbbbbbaaaabbbbbbbaaaabbaaaabaabbbaaaaaabbbbaabbbbbbaaaaaabbbbbbbbbabbbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbaaaaabbbaabbaaabbaabbbbbabaaabbbbbaaaaaaabbbbbbbbbabbbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbaaaabbbbaabbaabaaaaaaabbbbbaabbbbbaaaaaaabbbbbbbbbabbbbbbbbaabbba + abbbaaabbbbbbbaaabbaabbbbaaaababbaabbaabaaaabbbbbbbaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbaaabbbabbbbaaaaabbbaabaaabaaaaaaaabbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbbbbbbaaaaabbaaabaabbaaaabbbbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbabaabaaabbbbbbbbaaaaabbaaababbbaaaaaaaabbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaaaaabaabaaabbbbbbbbaaaaabbaaabbbbaaaaabbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbaaaaaaababbaaabbbbbbbbaaaaabbbaabbbbaaaaaaaaabbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbaabaabbbabbbbbaaaaaabbaaabaaaaaaabbbbbbaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbabbbbbaaaaabbbaaabaaaabaabaaabbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbaaaaabbbbbaaaaaabaabbbbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbaaaaabbbabaaaaaabaaaaaabbaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabaabbbbbbaaaaabbbbbaaaaabbabbbbbbbaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaabbbbbbbbbaaaaabaabbbaaabbabbbbabbabaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaabbbbbbbbbbbaaaaaaaaabaaabbaaabbbbbabaaabbbaaaaabbbbbbbbbbbbbbbbbbbabbbbbba + babaaabbbbbbbbaaabbbbbbbbbbaaaaaaaaabbaabbbaabbbbbabaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbaaaabaaabbaabbaabaabbbabaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbbabbbaaabbaabbaabaaabbabaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbabbbbbbbbbbbbbbaaaaaaabbaabbaababbbbabaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaaabbbbbbbbbbbbbbbaaaaaaabbaabbbbbabbbbabaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb`, + map `abbbbabbbbbbbbbbaabaabbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbba + abbbbabbbbbbbbabaabbbbbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbba + abbbbabbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaababaaababbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaabbaaaaaaabbbbbaaabbbabaaabbbbbbbbbaaabbabbbbbbbbaaaaabbbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaabaaaabbbbaaaaaaaaaaaaabbbbbbbbaaababbbbbbbbbabaaabbbbbbbbbbbba + bbbbbbbbbaaaabbbabbaaaaaaaabbbaaabbaaaaaaaaaaaaaaaaaaabbbbaaaaaaabbbbbbbaaaabbbbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaaabaaaaaaaaabaaaabbbbbaabaabaaabbbbbbaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbabbbbabbbbaaaaaabaaaaaaaaaaabbbbbbaaabbbaabbbbbbbaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbbabbbbbbbaaaaaabbaaaaaaabbbbbbaaaabaabbbaaaabbbaaaaaabbaabbbbbbbbbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbaaaaabbbbbbaaabbbbbbbbaaaaaabbbaaaaabbbbbbbbbbbabbbaaaabbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbaaabbbbbbba + bbbbaaabbbbbaaaabbbbbbbbbbbaaaababbbbbbbbbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaabbbaaabbbbbba + abbbaaaaabbbaaabbbbbbbbbbaaaaaabbbbbbbbbbbbaabbbbbbbaabbbbbaaaaabbbbbbbbbbaaaabbbbbaabbbba + abaabbbaabbbaaabbbbbbbbbaaaabaabbbaabbbbaabbaaaaabbbaabbbbbaaaaaabbbbbbbbbaaaaabbbbaabbbbb + aaaabbbaaaaaaaabbbbabbbaaaabbaabbbabbbbaaaaaaaaaabbbbaaaaaabbaaaababbbbbbbbaaaabbbbaaabbbb + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbbbbbbaaaaaaaaaaabbbbaaaaabbabaaaaabbbbbbbbaaabbbbaaabbba + abbbbbbbaaaaabbbbbbaaaaaaabbbaabbbbbaaaaabbaaaaaaabbbbbaaaabbaabaaaabbbbbbbbaaabbbbaaaabba + abbbbbbbaaaaabbbbbaaaaaaabbbbaaabbbbaaaaabaaaaaaaabbbbbaaaabaaabbbaaabbabbbbaaaaabaaababba + abbbbbbbbaaabbbbbbaabbbaabbbaaabbbabaaaaaaaaaaaaaaabbbbbbbaaaaabbbaaaaaabbbbbaabaaaabbbaba + abbbbbbbbbaabbbbaaaabbaaabbbaaabbbaaaaaaaaaabaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaabbbbaba + abbbbbbbbbaaabbbaaaabbbbaabbaaabbbaaaaaaaabbbaaaaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaabbaaabbbbaaaaaabbbbbaaaaabbbbbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbaaaaabbbbbaaaaaabbbbbbbbaaaabbbabbbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaaabbaaabbbbaaaaaaaaaabbbaaabbbbbbaaaaaabbbbbbbbaaaabbbabbbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbaaaaabbbbaaaaabbbbbaaaaaabbbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaabbaaabbaaaaabbbbaaaaabbbbbaaaaaabbbbbbbaaaaaabaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbaaaabbbbbbbaaababbbbbbbbaaaaabaaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaabbaaaaabbbbbbaaabbbbbbbbbaaaaabbbbabbaaabbbaaaabbbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaabbbbaaaaaaabbbabaabbbbbbbaaaaaabbbbaaaaabbbabbaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaaabbbbbaaaaaaabbbbbaabbbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbbabbbbaaabbabbbaabbaaabbbbbabbbbbbbaabbaaabbbbaabbaaaaabbaaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaabbaaabbbbaabbbabbbaabbaaabbbbaabbaaaaabbaaabbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbaaaabbaabbaabbaaabbbbaabbaaaaaabbbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaabbbbabbaaabbbbbabbaaaaaaabbaaaabbbabbbbbabbbbbaaaaabbbba + aabaaaabaaabbbbaaaaabbbabbbaaaaaaabbbbaabaaabbbbbbbbbabbbaaabaaaabbbabbbbaaabbbaaaaaabbbbb + aabaabbbbbbbbbbabbaabbbabbbbaaaaaabbbbaaabaabbbbbbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbabbbaaaaabbbbbbaaaababbbaaaabbabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaabbbaaabbaaabbbbbbbbaaabaabbaaaabbbbbbbbbaaaabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaabbbbaabbaaabaaaabbbbbbbbbaabbbbbaaaabbbbbbbbbaaaabbbabbbbaaaaabbbaaabbaaaba + baaabbbbbbbbbaabbbbaaaaabaaaaaabbbbbbbbbbabbbbbaaaabbbbbbbbbbaaaabaaabbaabbbaabbbbbbbbaaba + aaaaabbbbbbbbaabbbaaaaabbbaaaaabbbbbbbaabbbbbbbaaaabbaabbbbbbbbbaaaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabaaabbbbaaaabbbbbaaaabbaaabbaaaaabaaaabbbbbbbbbbbabbabbbbaabbbbbbbbbaba + bbabbbbaabbbbaaaaaaaaaabbbbaabbbbbbaaaaaabaaaabaaaaabbaaaaaabbbbbbbbaaaaaabbaaabbbbbbbbaba + bbabbbbbbbbbbaaabbaaaaabbbbabbbbbbaaaaaaabbaaaaaaaabbbaaaaaaaabbbbbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbabbbbaaaaaaaaabbbaaaabbbbbbaaaaaaaaabbbbbbaaaaaaaaabbbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbbbbbbaaaaaaaaaabbbbaabaaabbbaaaaaaaaaaabbbbaaaabbaaaabbbbbbbbbaa + babbbbbaaaaaaabbbbaaaaabbbbbbbaaaaaaaaaaabbbbaaaabbbbbaaaaaaaaaaabbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaabbbbbbabbaaabbbaaaaaaaabbbaaabbbbbaabbbbbaaaabbaaaaaabbbbaaaabbbaaaabbbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbbaaaaaaabbbbaaaabbbaaabbbbbaaaabbbbaaaabbbbaaaabbbbaaaaaaabbbbaa + baaaabbbbbaabbbbbaabbaaabbbaaaaaabbbbbaaaabbbababbbbbaaaabbbbaaaaabbbaabaabbbbaaaaaaabbbaa + baaaabbbbbaabbbbbaabbaaabbaaaaaaabbbbbaaaabbbbbabbbbaaaaabbbbbaaaabbbabbaabbbbbaaaaaaaabab + aaabbbbbbbaabbbbbaabbbabbbaaaaaaabbbbbaaaaabbbbaabbaaaaaabbbbbaaaabbbabbaabbbbbaaaaaaaaaaa + aabbbbbbbbaabbbbbaabbbabbbaaaaaabbbbbaaaaabbbbbaabbbaaaaabbabaaaaabbbabbaabbbbbbabbbbbaaaa + aabbbbbbbbaaabbbbaabbbbbbbaaaabbabbbbaaaaabbbababbaabaaabbbbbaaaaabbbabbbabbbbbbabbbbbbaaa + aabbbbbbbbaaabbbbabbaaabbbbaaaaaabbbbaaaabbbaababbbbbaaaabbbbaaaabbbbabbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaaabbbbaaaabbaaabbbaaabaaaabbbbaaaabbbbaabbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaaabbbbaaaaaabbbbaaaabbaaaabbbbbbaaabbbbbaaaabbbbaaabaabbbaaaabbbbbbba + aaabbbbaaaabaabbaabbaaabbbbaaaaaabbbaaaaabbaabbbbbaabaaaabbbbaaaabbbbaaabbabbbaaaabbbbbbba + abaabbbaaabbbaaaaaaaababbbbaaaaaabbbaaaabbbabbbbbbbbbaaaabbbbaaaabbbbaaabbabbbaaaabbbbbbaa + bbaabbbaabbbbaaaaaaabbbbbbbaaaaaaabbaaabbbbaaabaaaaabaaabbbbbaaaabbbbaaaababbaaaaaaabbbbaa + bbbbaaaaabbbbaaaaaaabbbbbbbaaaaaaabbaabbbbbbaabbbbbbaaaabbbbbaaaabbbbbbaaaaaaabbbaaabbbbaa + abbbaaaaabbbbaaaaaabbbbbbbbaaaaaaaaaaabbabbbbbbaaabbbaaabbbbbaaaabbbbbbbaaaaaabbbaaabbbaaa + abbbaaabbbbbbbbaaabbbbbbbbbaaaaaaabaabbaaabbbbbbbbbaaaaabbbbbaaaabbbbbbbaaaaaabbbaaaabbabb + aaabaaabbbbbbbaaaabbbbbbbbbaaaabbbaaabbaabbbabaaabbbbaaabbbbaaaaabbbbbbbbbaaabbbbbbaaabbbb + abbbaaaabaaaaaaaabbbbabbbbbaaaabbbaaabbaaabbabbbbaaaaaaabbbbaaaaabbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaaaaabbbaaabaaaabaaaaaabbbbaaabbbbaaaabbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaabbbbbbbbbaaaabbbaaabbaabaaabbbbbaaaaaabbbbaaaabbbbbbbbbbaaaaaaaabbaabbaa + abbbaaabbbbbbbbaaabbbbbbbbbaaaabbbabbbbaaaaaaaaabbbbbaaabbbbaaaabbbbbbbbbbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbbaaaaabbbbbbbaaabaaabbbbbaaaaaabbbbaaaabbbbbbbbbbbabbbbbbbbaabbba + bbbbaaabbbbbbbbaaaabbbbbbbaaaaabbaaabbaabbaaaaaabbbbbaaabbbbaaaabbbbbbbbbaaabbbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbbaaaaabbaaabbaabbaaabbbbbaabaaabbbaaaaabbbbbbbbbbaabbbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbbaaaabbbaababbbbaaaaaaabbbbbaaabbbaaaaabbbbbbbbbbaabbbbbbbbaabbba + abbbaaabbbbbbbaaabbaabbbbbaaaaabbaaaabbbbaaaabbbbbabbaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbaaabbaabbbbbaaaaabbbbbaabbaaaaaaaabbbbbaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbbbbbbbaaaaabbbbbbaabaaaaabbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbaaaabaaabbbbbbbbbaaaaaabbbbbaaaaabaaaaabbbbbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabaabaabaaabbbbbbbbbaaaaabbbbbbbaaabbaabbbbbabbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaaaaababbaaabbbabbbbbaaaaabbbbbbbaaabbaaaaabbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbaabaabbbaabbbbbaaaaabbbbbbbaaabbaabbbbbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbabbbbbbaaaaabbbbbbbaaabbbaaaaabbbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbbbaaaabbbbbbbaaabbbabbbbbabaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbbbaaaaabababbbaabbbabaabbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabaabbbbbbbbbaaaaaabbabbaabbbabbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaabbbbbbbbbbbbaaaaaaaabbaabbbabbbbbbbaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaabbbbbbbbbbbbbaaaaaaabbbaaaabaaabbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbabbbbbba + babaaabbbbbbbbaaabbbbbbbbbbbbaaabaaabbbaaaabbaaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbbaabbaaabbbaaaabaaaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbaabaaaaabbbbaaabaaaabbaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbabbbbbbbbbbbbbaaaaaaaabbbbaaaaabbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaaabbbbbbbbbbbbbaaaaaaaabbbbbaaaaabbbbbbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb`, + map `abbbbabbbbbbbbbbaabaabbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbbbbbbba + abbbbabbbbbbbbabaabbbbbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbba + abbbbabbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaabbaaaaaaabbbbbbbbbbaaaaaabbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaabaaaabbbbbaaaaaaaaaaaabbbbbbbbaaaaabbbbbbbbbaaaaaabbbbbbbbbbba + bbbbbbbbbaaaabbbabbaaaaaaaabbbaaabbaaaaaaaaaaabaaaaaaabbbbbaaaabbbbbbbbbaaaaaabbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaaabaaaaaaaaaaaaaabbbbbaabaabaaabbabbbbbbbaaaaaaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbabbbbabbbbaaaaaabaaaaaaabaaabbbbbbaaabbaaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbaabbbbbbbaaaaabbbaabbbbbbbbbbbbaaabaaabbaaaabbbaaaaaabbaabbbbbbbbbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbabbbaaaabbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbaaabbbbbbba + bbbbaaabbbbbaaaabbbbbbbbbbbaaaababbbbbbbbbbaaaaabbbbaabbbbbaaaabbbbbbbbbbbbaabbbaaabbbbbba + abbbaaaaabbbaaabbbbbbbbbbaaaaabbbaabbbbaaaaaaaaaabbbaabbbbbaaaaabbbbbbbbbbaaaabbbbbaabbbba + abaabbbaabbbaaabbbbbbbbbaaaabaabbabbbbbaaaaaaaaaabbbbabbbbbaaaaaabbbbbbbbbaaaaabbbbaabbbbb + aaaabbbaaaaaaaabbbbabbbaaaabbaabbbbbbbaaaaaaaaaaaabbbaaaaaabbaaaababbbbbbbbaaaabbbbaaabbbb + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbbbaaaabbaaaaaaaabbbbaaaaabbabaaaaabbbbbbbbaaabbbbaaabbba + abbbbbbbaaaaabbbbbbaaaaaaabbbaabbbbaaaaaaaaaaaaaaabbbbbaaaabbaabaaaabbbbbbbbaaabbbbaaaabba + abbbbbbbaaaaabbbbbaaaaaaabbbbaabbabaaaaaaaaaaaaaaaabbbbaaaabaaabbbaaabbabbbbaaaaabaaababba + abbbbbbbbaaabbbbbbaabbbaabbbaaabbbaaaaaaaabbbaaaaaabbbbbbbaaaaabbbaaaaaabbbbbaabaaaabbbaba + abbbbbbbbbaabbbbaaaabbaaabbbaaabbbaaaaaaabbbbaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaabbbbaba + abbbbbbbbbaaabbbaaaabbbbaabbaaabbbbaaaaabbbbbaaaaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaabbaaabbbbaaaabbbbbbaaaaaabbbbbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbaabbbbbbbaaaaaabbbbbbbbaaaabbbabbbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaaabbaaabbbbaaaaaaaaaabbbaaaaabbbbaaaaaabbbbbbbbaaaabbbabbbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbaaaaabbbbaaaaabbbbbbaaaabbbbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaabbaaabbaaaaabbbbaaaabbbbbbbaaaabbbbbbbbaaaaaabaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbbaaaaaabbbbabaabbbbbbbbbaaaaabbaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaabbaaaaaaaabbbbbaabbbbbbbbaaaaabbbbabbaaabbbaaaabbbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaabbbbaaaaaaabbbbaabbbbbbbbaaaaaabbbbaaaaabbbabbaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaabbbbbbaabbaaabbbbaabbbbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbbabbbbaaabbabbbaabbaabbbbbaabbabbbbaabbaaabbbbaabbaaaaabbaaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbaaaabbbbbbaabbaaabbbbaabbaabbbaabbaaabbbbaabbaaaaabbaaabbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbaaaabbaabbbabbaabbbbbaabbaaaaaabbbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaabbbbaaabaabbbbbabbaaaaaaabbaaaabbbabbbbbabbbbbaaaaabbbba + aabaaaabaaabbbbaaaaabbbabbbbaaaaaabbbbaaabbabbbbbabbbbbbbaaabaaaabbbabbbbaaabbbaaaaaabbbbb + aabaabbbbbbbbbbabbaabbbabbbaaaaaaabbbbaaaaaabbbbabbbbbbbbbbbaaaaabbbabbbbaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbabbbaaaaabbbbbbbbaabbbbbaaaabbbbbbbbbaaaabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaabbbaaabaaaabbbbbbbaababbbbbaaaabbbbbbbbbbbaabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaabbbbaabbaaabaaaabbbbbbaaabbbbbbbaaaaabaaabbbbbbbbbbbabbbbaaaaabbbaaabbaaaba + baaabbbbbbbbbaabbbbaaaaabaaaaabbbbbbaaaabbaaabbaaaaabaaaaabbbbbbbbaaabbaabbbaabbbbbbbbaaba + aaaaabbbbbbbbaabbbaaaaabbbaaabbbbbbaaaaaabaaaabaaaabbbaaaaaabbbbbbaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabaaabbbbabbbbbaaaaaaaabbaaabaaaabbbaaaaaaaaabbbbbabbabbbbaabbbbbbbbbaba + bbabbbbaabbbbaaaaaaaaaabbbbabbbbaaaaaaaaaabbaaaaaaabbbaaaaaaaaaabbbbbaaaaabbaaabbbbbbbbaba + bbabbbbbbbbbbaaabbbaaaabbbbbbbbaaaaaaaaaaabbbaaaaaabbbaaaaaaaaaabbbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbbbbaaaaabbbaaaabbbbaaabbbbbaaaabbaaaaabbbbaaaaaaaaabbbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbbaaaaaaaabbbaaaabbbbaaaabbbaaaaabbaaaaabbbbaaaabbaaaabbbbbbbbbaa + babbbbbaaaaaaabbbbaaaaabbbbaaaaaaabbbbbaaabbbbbaabbbbaaaaabbaaaaabbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaabbbbbbabbaaabbaaaaaaabbbbbbaaabbbbbabbbbbaaaabbbaaaaabbbbaaaabbbaaaabbbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbaaaaaaabbbbbbaaaabbaaaabbbbaaaaabbbaaaabbbbaaaabbbbaaaaaaabbbbaa + baaaabbbbbaabbbbbaabbaabbbaaaaababbbbbbaaaabbabaabbaaaaaabbbbaaaabbbaaabaabbbbaaaaaaabbbaa + baaaabbbbbaabbbbbaabbaaabbaaaaaabbbbbabaaaabbaabbbbbbaaaabbbbaaaabbbaabbaabbbbbaaaaaaaabab + aaabbbbbbbaabbbbbaabbbabbbaaaabbabbbbaaaaabbaaabbbbaaaaabbbbaaaabbbbaabbaabbbbbaaaaaaaaaaa + aabbbbbbbbaabbbbbaabbbabbbaaaaababbbbaaaaabbaaaabbbbbbaabbbbaaaabbbbaabbaabbbbbbabbbbbaaaa + aabbbbbbbbaaabbbbaabbbbbbbbaaaaaabbbbaaaaabbabbbbbaaaaaabbbbaaaabbbbaabbbabbbbbbabbbbbbaaa + aabbbbbbbbaaabbbbabbaaabbbbaaaaaabbbbaaaabbbaabbbbbbbbaaabbbaaaabbbbaabbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaaaabbbaaaabbbaabbbbaaaaaaaabbaaaabbbbbaabbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaaabbbbaaaaaaabbbaaabbbbbaababbbbbaaabbbaaaabbbbbaaabaabbbaaaabbbbbbba + aaabbbbaaaabaabbaabbaaabbbbaaaaaaaabbaabbaabbbbbaaaaaaaaabbbaaaabbbbbaaabbabbbaaaabbbbbbba + abaabbbaaabbbaaaaaaaabaabbbaaaaabaabbabbbaabbbbbbbbbbbaaabbbaaaabbbbbaaabbabbbaaaabbbbbbaa + bbaabbbaabbbbaaaaaaabbbbbbbaaaaabaaaaabbaaabbbbbaaaabbaaabbbaaaabbbbbaaaababbaaaaaaabbbbaa + bbbbaaaaabbbbaaaaaaabbbbbbbaaaaabbaaaabbaaabbbbbbbbbbbaaabbbaaaabbbbbbbbaaaaaabbbaaabbbbaa + abbbaaaaabbbbaaaaaabbbbbbbbaaaabbbbaaabbaaaaaabbaaaabbaaabbbaaaabbbabbbbaaaaaabbbaaabbbaaa + abbbaaabbbbbbbbaaabbbbbbbbbaaaaabbbaaabbaaaaaabbbbbbaaaaabbbaaaabbbbbbbbaaaaaabbbaaaabbabb + aaabaaabbbbbbbaaaabbbbbbbbbaaaaababaaabbaaaaaabaabaabbaaabbbaaaabbbbbbbbbbaaabbbbbbaaabbbb + abbbaaabbaaaaaaaabbbbabbbbbaaaaabbbbbbbbaaaaabbbbbbbbaaaabbbaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbaaaabbbbabbbbabbaaabbababbbaaabbbaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaabbbbbbbbbaaaaabbbbbaaaabbaaabbbbbaaaaaabbbaaabbbbbbbbbbbaaaaaaaabbaabbaa + abbbaaabbbbbbbbaaabbbbbbbbbaaaabbbbbbaaabbbaaaaaabbbbbbaabbbaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbbbaaaabbbbbbaaabbaaaabbbbbaabbaabbbaaabbbbbbbbbbbaabbbbbbbbaabbba + bbbbaaabbbbbbbbaaaabbbbbbbbaaaabbbbbbbaabbaaaaaabaabbbaaabbaaaabbbbbbbbbbbbaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbbbaaaabbbbbbbaaaaaaaabbbbbbabbaabbaaaabbbbbbbbbbbaabbbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbbbaaaabbbbbbbaaaabaaaaaabbbbbaaabbaaaabbbbbbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbaaabbaabbbbbbaaaaabbbbbbbaaabaaabbbbbaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbaaabbaabbbbbbaaaaabbbababaaabbaaaaabbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbabbbbbbaaaaabbbbbbbaaabbaabbbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbaaaabaaabbbbbbbbbbaaaaabbbbbbbaaabbaaaaababbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabaabaabaaabbbbbbbbbbaaaaabbbbbbbaaabbaabbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaaaaabaabaaabbbaabbbbbbaaaabbbbbbbaaabbaabaaababaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbaabbbbbbbaaaaabbbbbaaaaabbabbbbbbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbabbbbbbbbbaaaabbbbbbaaaabbabbabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbbbbbaaaaaabbbbaaaaababbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaaabbbbbbbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaaababbbbbbbbbbbaaaaaaabbbbaaabbaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaaabbbbbbbbbbbbaaaaaabbbbbaaaabaabbabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaabbbbbbbbbbbbbaaaaaaabbbbbbaaabaabbabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaaabbbbbbbbbbbbaabaaaabbbbbbaaabaabbabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaaabbbbbbbbbbbbabaaaaabbbbbbaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbaaaaaaaabbbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbabbbbbbbbbbbbaaaaaaaaabbbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaabbbbbbbbbbbbbbaaaaaaaaabbbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb`, + map `abbbbabbbbbbbbbbaabaabbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbba + abbbbabbbbbbbbabaabbbbbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbba + abbbbabbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabaabbbbbbbbaaaaaabbbbbbbbbbba + bbbbbabbbbbaaaaaaaaaaaaabbaaaaaaabbbbbbabbaaaaaaabbbbbbbbbaaabbabbbbbbbbaaaaaabbbbbbbbbbba + bbbbbabbbbbaabbbaabaaaaaaaaabaaaabbbbbaaaaaaaaaaaaaaabbbbbaaaabbbbbbbbbbaaaaaabbbbbbbbbbba + bbbbbbbbbaaaabbbabbaaaaaaaabbbaaabbaaaaaaaabbbbbbaaaaabbbbbaaaabbbbbbbbbaaaaaabbbbbbbbbbba + abbbbbbbaaabbbbbbbbbaaaaaaaabaaaaaaaaabbabbbbbbbbababbaaabbabbbbbbbaaaaaaaaaabbbbbbbbbbbba + abbbbbbbaaabbbbabbbbabbbbaaaaaabaaaabbbbbbbbbbbbbbaaabaaabbbbbaaaaaaaaaaabaaabbbbbbbbbbbba + abbbbbaaaaabbbaaabbaabbbbbbbaaaaaabbbbbbbbabbbbbbbaaabaaabbaaaabbbaaaaaabbaabbbbbaabbbbbba + bbbbbbabbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbbbbaaaaabbbaaaaabbbaaaabbbbbbbbbbbbabbbaaabbbbbbba + bbbbbaabbbbbbaaaabbbbbbbbbbbaaaabbbbbbaaaaaaaaaaabbbaabbbbbaaaaabbbbbbbbbbbabbbaababbbbbba + bbbbaaabbbbbaaaabbbbbbbbbbbaaabbbbbbbbaaaaaaaaaaabbbaabbbbbaaaabbbbbbbbbbbbaabbbabbaabbbba + abbbaaaaabbbaaabbbbbbbbbbaaaaabbbbbbbbaaaabaaaaaabbbbabbbbbaaaaabbbbbbbbbbaaaabbbbbaabbbba + abaabbbaabbbaaabbbbbbbbbaaaababbbbbaaaaabbaaaaaaaabbbabbbbbaaaaaabbbbbbbbbaaaabbbbbaabbbbb + aaaabbbaaaaaaaabbbbabbbaaaabbabbbbbaaaaaaaaaaaaaaabbbbaaaaabbaaaababbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbbaaaaaaabbbabbbabaaaaaaaaaaaaaaabbbbbaaaabbabaaaaabbbbbbbbaaabbbbaaabbba + abbbbbbbaaaaabbbbbbaaaaaaabbbabbbaaaaaaaabbbbaaaaabbbbbaaaabbaabaaaabbbbbbbbaaabbbbaaaabba + abbbbbbbaaaaabbbbbaaaaaaabbbbaabbbaaaaaaabbbbaaaaaabbbbbaaabaaabbbaaabbabbbbaaaabbaaabaaba + abbbbbbbbaaabbbbbbaabbbaabbbaaabbbbaaaaabbbbbaaaaaabbbbbbbaaaaabbbaaaaaabbbbbaabaaaabbbaba + abbbbbbbbbaabbbbaaaabbaaabbbaaabbbbaaaabbbbbbaaaaaabbbbbbbaaaaaabbbaaaaaabbbbaaaaaabbbbaba + abbbbbbbbbaaabbbaaaabbbbaabbaaabbbbbaabbbbbbbaaaaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaabbaaaabbbbaaaabbbbbaaaaaabbbbbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbaaaabbbbbbaaaaabbbbbbbbaaaabbbabbbbbaaaabbbaaaabbbbbba + abbbbbbbbbaaaabbaaabbbbaaaaaaaaaabbbaaaabbbbbbbaaaabbbbbbbbaaaabbbabbbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbaaaaabbbbaaaaaaabbbbabaabbbbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaabbaaabbaaaaabbbbaaaaaaaabbbababbbbbbbbbaaaaaabaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbaaabaaaabbbbaabbbbbbbbbbaaaaabbaabbbbabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaabbbaabbaaabbbbaabbbbbbbbbaaaaabbbbabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbaabbaabbbbbaababbbbbbaaaaaabbbbaaaaabbbbbbaaabbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaabbbbbbaabbaabbbbbaabbbbbbbbaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbaaaaabbbbbaabbbbbabbbbaaabbaabbaabbaaabbbbaabbabbbbaabbaaabbbbaabbaaaaabbaaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbaaaabbbabbbaaabaabbbbaabbaabbbaabbaaabbbbaabbaaaaabbaabbbbbbbaa + abbbbaaaaaaaaaaaaabbbbbabbbaaaabbaabbbaaabbabbbbbabbaaaaaabbbaaabbbbaabbbaaabbbbaaabbbbbba + aabbaaaaaaaaaaaaaaaabbbabbbaaaaaaabbbbaaaaaaabbbbaabbbbbbbabbaaaabbbabbbbbabbbbbaaaaabbbba + aabaaaabaaabbbbaaaaabbbabbbbaaaaabbbbbbbaabbbbbbbbabbbbbbbbbbaaaabbbabbbbaaabbbaaaaaabbbbb + aabaabbbbbbbbbbabbaabbbabbbaaaaabbbbbbaababbbbbbbbbbbabbbbbbbbaaabbbabbbbaaaaaaaaaaaabbbbb + bbbabbbbbbbbbbaabbaabbbabbbaaaabbbbbbaaabbbbbbbaaaaabaaaabbbbbbabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaabbbaabbaaabbbbbbaaaaabaaaabaaaaabaaaaaabbbbbbbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaabbbbaabbaaabaabbbbbbaaaaaabbaaabaaaabbbaaaaaaabbbbbbaabbbaaaaabbbaaabbaaaba + baaabbbbbbbbbaabbbbaaaaabaaabbbbbaaaaaaaabbbaaaaaaabbbaaaaaaaaabbbbaabbaabbbaabbbbbbbbaaba + aaaaabbbbbbbbaabbbaaaaabbbbbbbbbaaaaaaaaaabbbaaaaaabbbaaaaaaaaaabbaaabbaabbbaabbbbbbbbaaba + abaabbbbbbbbbaabaaabaaabbbbbbbbaaaaaaaaaaabbbaaaaaabbbaaaaaaaaaabbbbaaaabbbbaabbbbbbbbbaba + bbabbbbaabbbbaaaaaaaaaabbbbbbaaaaaaabbaaaabbbbbaaaabbbaaaabaaaaabbbbbaaaaabbaaabbbbbbbbaba + bbabbbbbbbbbbaaabbbaaaabbbbbaaaaaaabbbaaaabbbbbaaaabbaaaaabbaaaabbbbbaaaaaabaaabbbbbbbbaaa + baabbbbbbbbbaaabbbaaaaabbbbaaaaaaabbbbbaaabbbbababbbbaaaaabbaaaabbbbbaaaaaaaaabbbbbbbbbaaa + aaabbbbaaaaaaaabbbaaaaabbbaaaaaaabbbbbbaaaabbaabaabbbaaaaabbaaaabbbbbaaaabbaaaabbbbbbbbbaa + babbbbbaaaaaaabbbbaaaaabbbaaaaaaabbbbbbaaaabbaababbbaaaaabbaaaaabbbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaabbbbbbabbaabbbaaaaababbbbbbaaaabbaaabbbbaaaaabbaaaaabbbbbaaaabbbaaaabbbbbbbbaa + baaaaaaabaaabbbbbbabbaaabbaaaaababbbbbaaaaabbaaabbbabaaaabbaaaaabbbbbaaaabbbbaaaaaaabbbbaa + baaaabbbbbaabbbbbaabbaabbbaaaabbabbbbbaaaaabbaaabbbbbbaaabbaaaaabbbbaaabaabbbbaaaaaaabbbaa + baaaabbbbbaabbbbbaabbaabbbaaaaaaabbbbbaaaaabbbbabbaabbaabbbaaaabbbbbaabbaabbbbbaaaaaaaabab + aaabbbbbbbaabbbbbaabbbabbbaaaaaaaabbbbaaaabbbbbabbbbbbaaabbbaaabbbbbaabbaabbbbbaaaaaaaaaaa + aabbbbbbbbaabbbbbaabbbabbbbaaaaaaabbbbaaabbbbaaabbbaabaaabbbaaabbbbbaabbaabbbbbbabbbbbaaaa + aabbbbbbbbaaabbbbaabbbabbbbaaaaaaabbbbaaabbbbaabbbbbbaaaaaaaaaabbbbbaabbbabbbbbbabbbbbbaaa + aabbbbbbbbaaabbbbabbaaabbbbaaaaaaaabbbaabbaabbbbaaaabbaaaaaaaaabbbbbaabbbaabbbbaaabbbbbaaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaabaabbbabbaaabbbbbbbbbaaaaabaaaabbbbbbaabbaabbbaaaabbbbbbaa + aaaabbbbbaaaabbbaabbaaabbbbaaaaabbaaaaabbaaabbbbaababbbaaaaaaaabbbbbbaaabaabbbaaaabbbbbbba + aaabbbbaaaabaabbaabbaaabbbbaaaaabbaaaaabbaaabbbbbbbbaaaaaaaaaaabbbbbbaaabbabbbaaaabbbbbbba + abaabbbaaabbbaaaaaaaabaabbbaaaaabbbaaaabbaaaaabaaabbbbbaaaaaaaabbbbbbaaabbabbbaaaabbbbbbaa + bbaabbbaabbbbaaaaaaabbbbbbbaaaaabbbbaaabaaaaaabbbbaaaaaaaaaaaaabbbbbbaabababbaaaaaaabbbbaa + bbbbaaaaabbbbaaaaaaabbbbbbbaaaaabbbabbaabaaaaaaaabbbbbbaaabaaabbbbaabbbbaaaaaabbbaaabbbbaa + abbbaaaaabbbbaaaaaabbbbbbbbaaaaabbabbbbbbaaaaabbbbaaaaaaaabaaaabbbaabbbbaaaaaabbbaaabbbaaa + abbbaaabbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbabaaabbabbbbbbaaabaaabbbbabbbbbaaaaaabbbaaaabbabb + aaabaaabbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbaabaaabbbbaaaaaaaaaaaabbbbbbbbbbbbaaabbbbbbaaabbbb + abbbaaabbaaaaaaaabbbbabbbbbbaaaabbbbbbbaabbaaaabbbbbbbbbaabaaabbbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbaaaaabbbbabaaabbaaaabbbaabbbbaaaaaabbbbbbbbbbbbaaabbabbbbaabbbb + abbbaaabbbbbbbbaaabbbbbbbbbbaaaabbbabbbaaabaaabbbbbbbbbaaaaaaabbbbbbbbbbbbaaaaaaaabbaabbaa + abbbaaabbbbbbbbaaaabbbbbbbbaaaabaabbbbbaaabaaaabbbaaabbaaaaaaabbbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbbbaaaabbbbbbbbaabbaaaabbbbbbbbaaaaaaabbbbbbbbbbbbaabbbbbbbbaabbba + bbbbaaabbbbbbbbaaaaabbbbbbbaaaaabbbbbbbaabbbbaabbbaaabbaaabaaabbbbbbbbbbbbbaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbbbaaaaabbbbbbbaabbbbaabbbbbbbbaaaaaaabbbbbbbbbbbbaabbbbbbbbaabbba + abbbaaabbbbbbbbaabbabbbbbbbaaaaaabaabbbbaabbbaaabbaaabbaaaaaaabbbbbbbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbaaabbaaabbbbbbaaaabbbbbbbbaabbbaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbaaabbbbbbaaaabbbbbbbbaaabbaaabbaaaabaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbaaabbbaabbbbbbaaaaabbbbbbaaaaabbaabbbbbbaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbabaabaaabbbbbbbbbbbaaaaaaabbbbaaaabbbabbbbbabaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabaabaabaaabbbbbbbbbbbaaaaaaabbbbaaaaaabaabbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaaaaababbaaabbbaabbbbbbbaaaaabbbbbaaaaaabaabbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbabbaabbbaabbbbbbbbbaaaabbbbbbbbaaaaabbbbbbbabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbaaaaaabbbbbaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbaaaaaabbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbaaababbbbbbbbbbbaaaabbbbbbbbaaaabababaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aabaaabbbbbbbbaaababbbbbbbbbbaaaaaabbbbbbbbaaababbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabababbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaabbbbbbbbbbbbbaaaaaabbbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaaabbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babaabbbbbbbbbaabbbbbbbbbbbbaaaaaaabbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbabbbbbbbbbbbbbaaaaaabbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaabaabbaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb`, + map `abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbabbbbbbbbbbabbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbabaabaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbba + abbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabaabbbbbbbbbaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbba + bbbababbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbaaaabbbbbbbaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbaabbbbbbbbbaabbaabbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbaaabbbbbaaaabbbbbababbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + babbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbaaaabbbbbbbaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbaaabbbbbbbbbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaaaabbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbaaabbbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbaaabbbbbbbbbbbbaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbaaabbbbbbbbbbaaaaaaaaaabbabbaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbaaabbbbbbbbaaaabaabaaabbbbbbaaaabbbbbbbbbaabbbbaaaaaaaabbbbaaaabbbbbbbbbbbbba + bbbbbaabbbbbbaaabbbbbbbbaaaabbbbbaabbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaabbbbbabbbbbbbbbbbbbbba + bbbbaaaaabbbbaaabbbbbbbabbbbbbbbbaabbbbbbaaaabbbbbaaaaaaaaabbbbaaaaabbbbbbbbabababbbbbbbba + bbbbbbbbbbbbbaaabbbbbaabbbbbbaaaabaabbbbbaabbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaabaaaaaaabbbbb + bbbbbbbbbbbbbaaabbbbabbbbbbbaaaaabaabbbbbaabbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbaaaaaaaabbba + bbbbbbbbbbbbbaabbbbaaaaabaaaaaaaaaaababbbaaabbbbbaaabaaabbbbbbaaaaaabbbbbbbbbbbbbabaaabbba + bbbbbbbbbbbbbaabbbaaaaaaaaaaaaaabbbababbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaabbaaaaaaaaaaaaaaabbbababbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaabbaaaaaaaabbbbbbbbbbbbabbbaaaaaaaaaaabbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaabbaaaaabbabbbbbbbbbabaabbaaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabbaaaaabbbbaaaaaaaaababbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabbaaaaaabbaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabbaaaaabbbaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabbbaaaabbbbbbbbaaaaaaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaabbbbaabbbbabbbbbbbbbbaaaaaabbbbaaabbbbbbbbbaaababaaabbbabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaabbbaaaaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbaaaaaaabbbaabaabbbbbabbbbbabbbbbba + abbbbbbbbbbbaaabbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbaabbabbbbbaabbbbbbbbbbba + bbbbbbbbbbbbaaabbaaaaaaaaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbaaaaabaaabbbaabbbbabbbbbba + bbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabaaabbbbbba + bbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbba + bbbbbaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbba + abbbaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbba + bbbbaaabbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaabbbbbbbaaabbbbbbbabbabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + aaaaaaaaaaaaaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaabbaaaaabbabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaabbbbbbbaaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaabbbbbbbaaaaabbbbbbbabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbabbbaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbabaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbaaaabbabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbabbbbbbbbbbbaabbbbbbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbababbbabbaaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbabbbbbabaaaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbabbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaabaabbbbbbbbbaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbaaababbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbaaaabbbbbbbaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbaabbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbbaabbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + babbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaabbbbbaaabbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabbbbbbbbbba + bbbababbbbbbbbaaabbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbabbabbbbabbbbaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbababbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbabbbbbbaaabaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbaabbbbbbbbbbbbaaaaaaabaaaaaaaaaaaaaabaaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbaabbbbbbbbbbaaaaaaabaabbaabaaabbbbbbbbbbaaabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbba + baaabbbbbbbbbbaabbbbbbbbbaaabbabbaaabbbbbaaaabbbbbbbaaaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbba + aaaaaaabbbbbbbaabbbbbbbbaaaabbbbbaaabbbbbaaaabbbbbaaaaaaaaaaabbbaaaabbbbbaaabaaabbbbbbbbba + bbbbbaaaabbbbaaaabbbbbbaabbbbbbbbbaaabbbbaaaabbbbbaaaabbbbabbbbbbaaaabbbbbaabbaaabbbbbbbbb + bbbbbbbbbbbbbaaabbbbbbaabbbbbaaaabbaabbbbaabbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbba + bbbbbbbbbbbbbaaabbbbaabbbbbbaaaaaabaabbbbaabbbbbbbaaaaabbbbbbbaaaaaaabbbbbbbbbabbbaaaabbba + bbbbbbbbbbbbbaaabbbaaaaaaaaaaaaaaaaaabbbbaaabbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbaaabba + bbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaabbbabbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaabbbbbabbbbaaaaaaaaaabbbaaaaaaaaabbbbbbbbbbbbbaaabbbbbbbba + bbbbbbbbbbbbbaaabbaaaaabaabbbbbbbbbbbaabbbbaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbaabbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaaabbaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaaabaaaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaaabbbaaaaaaaaaaaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbaaaaaaaabbbaaabbbbbbbbbbaababaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaabbaabaabbbbabbbbababbbbbba + abbbbbbbbbbbbaabbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaaabbbbbba + bbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbba + bbbbbbbabbbbbaaabbbaaaabbabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabaaabbbbba + bbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabbbba + bbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbba + abbbaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaaabbbaa + baaaaaaaaaaaaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + aaaaaaabbbbbaaaaababaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbaabbbbbbbbbba + abaaabbbbbbbaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + abaaabbbbbbbaaaabbbbbbabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba`, + map `abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbabaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbaabbbbabbaaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbabbbbbabaaaaabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaabbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbabaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaabaabbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbaaaabbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbaabbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbbaabbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + babbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaabbbbbaaabbbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbba + bbbababbbbbbbbaaabbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbbbabbabbbaabbbbaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbabbbbbbaaabaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbaaabbbbbbbbbbbaaaaaaabaaaabaaaaaaaaabaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbaaabbbbbbbbbaaaaaaaaaabbaabaaabbbbbbbbbbaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbba + baaabbbbbbbbbbaaabbbbbbbbaaabbaabaaabbabbaaaabbbbbbbaaaaaaaaaaaaaaaabbbbbaaabbbbbbbbbbbbba + aaaabaabbbbbbbaaabbbbbbbaaaabbbbbaaabbbbbaaaabbbbbaaaaaaaaaaabbbaaaabbbbbaaabaaabbbbbbbbba + bbbbbaaabbbbbbaaabbbbbbaabbbbbbbbbaaabbbbaaaabbbbbaaaabbbbabbbbbbaaaabbbbbaaabaaabbbbbbbba + bbbbbaaabbbbbbaabbbbbbaabbbbbaaaabbaabbbbaaabbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbbb + bbbbbbbbbbbbbaaabbbbaabbbbbbaaaaaabaabbbbaabbbbbbbaaaaabbbbbbbaaaaaaabbbbbbbbbabbbaaaaabba + bbbbbbbbbbbbbaaabbbaaaaabaaaaaaaaaaaabbbbaaabbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbaaabba + bbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaabbbabbbbaaabaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaabbbbbabbbbaaaaaaaaaabbbaaaaaaaaabbbbbbbbbbbbbaaabbbbbbbba + bbbbbbbbbbbbbaaabbaaaaaaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbaabbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaabbbaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaaabaaaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaaabbbaaaaaaaaaaaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbaaaaaaaabbaaaabbbbbbbbbbaabaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbaaaabbbbbbaabbbbbbbbaaaaaaabbaaaaaabbbabbbbaabbbbbbba + abbbbbbbbbbbbaabbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaabbbbbbba + bbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbba + bbbbbbbaabbbbaaabbbaaaabbabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbba + bbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbba + bbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbba + abbbaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbaa + baaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + aaaaaaabbbbbaaaaabbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbba + abaaabbbbbbbaaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbba + abaaabbbbbbbaaaaabbbbbabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba`, + map `abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbabbbbbbbbbabbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbaaaaabbbbbbbbbbbbbaabbbbbabbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaababbbbbbbbbbbbbbaabbbaaabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbbbbbaabbbaaaaaaabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbbbbbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaababbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbaabbbbbbbbbbbabbbbaaaabbbbbbbbbbbbbbbbbbbbbba + bbaaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabaaaaabbbbbbbbaabbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaabaaabbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbba + babbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaabbbbbbaaabbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + bbbababbbbbbbbbaaabbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbabbbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbaaababbbbbbbaaabbbbbbbbbbbbbaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaabaaaabaaaaaaaaabbbbbaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbaaabbbbbbbbbbaaaaaaaaaabaabaaaabbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbaaabbbbbbbbaaabbaabaaabbbbbaaaabbbbbbbaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbba + bbaabaabbbbbbbaaabbbbbbbaaaabbbbbbaabbbbbaaaabbbbbaaaaabbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbba + bbabbaabbbbbbbaaabbbbbbbaaabbbbbbbbaabbabaaaabbbbbaaaabbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbba + bbbbbaaaabbbbbaaabbbbbbabbbbbbaaaabaababbaaabbbbbbaabbbbbbbbbbbaaaaaabbbbbbaabaaaaababbbbb + bbbbbbbbbbbbbbaaabbbbabbbbbbbaaaaaaaabbbbaabbbbbbaaabaaaaabbaaaaaaaabbbbbbbabbabbaaaaaabba + bbbbbbbbbabbbbaaabbbaaaabbaaaaaaaaaaababbaabbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabba + bbbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaabbababbaaabaaaaaaaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbaaaaaaaaaaaaaabbbbbabbbbaaaaaaaaabbbbaaaaaaaabbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbaaabaaaaaaaabbbbbbbbbbbbabbbbaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaabbaaaaabbbbbbbbbbbbbbaabbaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaabbaaaaabbaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaabbaaaaaabaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbaaaaabbbbbbaaaaaaaaaaaaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbaaaabbbabbbabbbbbbaaaaaaaabaaaabbbbbbbbbbbaaaaaaabbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbaabbaaaabbbbbbbbbbbbbbbaaaaabbbbbabbbbbbbbaaaaaaaaaaaabbaabbbbabbbaabbbbbbba + abbbbbbbabbbbbaabbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbaaaaaaabbbbbbba + bbbbbbbaabbbbbaabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabaaaaaaaaabbbbbbba + bbbbbaaaabbbbbaabbbbababbaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaaaaaaaabbbbba + bbbbaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbba + bbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbba + abbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abababbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaa + bbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaa + bbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaabbbbbba + bbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + bbbbbbbaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaababbbbbbbbbbba + bbbaaaaaaaaaaaabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbba + aaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaaabbbaaaababaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbabbbbbbbbbba + aaaaabbbbbbbbaaaabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbaaaabbbbbbabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaabbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaabbbbabaaaaabbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbaaaabbbbbbbbabbbbaaaaabbbbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaba + abbbbbabbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaa + abbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaa + abbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaabaabbbbbbaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbaaabbbbaaaaaaaabaaabbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbaaaabbbabaaabbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbabbbbaaabbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbba + abbababbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaabaaababbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + bbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabbaaaaabbbbbbbbbbabbbbbabbbbbbbbbbbbbbbbbbbbbbba + abbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbaaababbbbbbbbbbabbbbbaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbabbbbbbbbbbbabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + babbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbaaaaabbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbbbbbabbbbbbbba + bbbababbbbbbbbbaaaabbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbabaaaabbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbaaaaabbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabaaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbaaaabaaaaaaaaabbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaabbaabbabbbbbbbbbbbaaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaaabbabbabbbbbbbbbbaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaabbbbbaaaabbbbbaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbaaabbbbbbbaaaabaabbaaabbabaaaabbbbbaaaabbbbbbbbaaaaaabbbbbaaaabbbbbbbbbbbba + bbaababbbbbbbbbaaabbbbbbbaaabbbbbbbaaabaaaaabbbbbbaaaaaabbbbaaaaaabbbbbbbbaaaaaaabbbbbbbba + baaaaabbbbbbbbbaaabbbbbbbabbbbbbaaaaaabbbaaabbbbaaaabbaaaaaaaaaabbbbbbbbbbbaaaaaaaababbbbb + bbbbaabbbbbbbbbaaabbbbbabbbbbbaaaaaaaabbbaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbbabbbbaaaaaaabba + bbbbbabaaabbbbbaaabbbaaaabbaaaaaaaaaaababaabbbaaaaaaaaabbaaaaaaaaaabbbbbbbbbbbbbbbbaaaabba + bbbbbbbaaabbbbbaabbbaaaaaaaaaaaaaaabbbbabaabbaaaaaaabbbbbaaaaabbaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaabbbaaaaaaaaaaaaaabbbbbabaabaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbaabbaaaaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaabbaaaaabbbbbbbbbbbbaaabbaaaaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaabbaaaaabbaaaaaaaaaaaaaaaaaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaabbaaaaaabbaaaaaaaaaaaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaabbaaaaabbbbbbbbbbbbbbbaaaaaaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaabbbbabbbbbbbbbabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbabbbbbbbbbbbbba + bbbbbbbababbbbbaabbaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaaaaabaabbbabaaaabbaabbbaabbbbbbba + bbbbbbbaabbbbbbaabbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbabbaabbaaaaaaabaaaaaaaabbbbbbba + bbbbbaaaabbbbbbaabbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbba + bbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaabbbbbaaaabbbba + bbbbaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbabbbbba + abbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbaaaabbbbbaababbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaa + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + bbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbba + bbbbbbbbbbaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbbbbba + bbbbaaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbba + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbba + aaaaaaaaaaabbbaaaabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbbbbbbbbbbba + aaaaaabbbbbbbbaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaaabbbbbabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbbbaaabbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbbbbbaabba + abbbbbbbbbbbbbbbbbaaabbbbbbbbaaababbbbbbbbbbbbabbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbbaaaabbbbbbbbaaababbbbbbbbbbbbabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbabbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbabbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbabbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbaabbbbbbbbbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbaabbaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbaabbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaabbbbbbbbbaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaabbbbbbbbbbaaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaaaaabbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbaababaaabbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbaabaaabbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbabbbbabbbbbbbbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbabbbbababbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbaabaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbabbaaabbbbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbabbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abaaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + ababaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbaaabbbbbbabbbbbbbbbbbbbbbba + babbbbbbbaabbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbabbbbbbbabbbbbbaaaabbbbbbabbbbbbbbbbbbbbbba + bbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaaabbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbaaabbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaabaaaaaaaaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaabbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbaaaaaaaaaaaabbbbbaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbabbaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbbabbabbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaabbbbbaaaabbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaaaaabbbbbaaabbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbaaabbbbbbbaaaababbaaaabbbbaabbbbbaaaabbbbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbba + bbaababbbbbbbbbbaaabbbbbbbaaabbbbbbbaaaaaaaaabbbaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbba + baaaaabbbbbbbbbbaaabbbbbbbabbbbbbaaabaaaaaaabbbaaaaabbbbbaaabbbbbbbaaababbaaaaaaaaababbbbb + bbbbaabbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaabbaaaaabbbbbaaaaaabbbbbabbbbbbbaabbbaaaaaaabba + bbbbbabaaabbbbbbaaabbbbaabbbbaaaaaaaabbabaabbaaaaabbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbaaaabba + bbbbbbbaaaaabbbbaaabbbaaaaaaaaaaaaaaabbbbaabbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbaaaaaaaaaaaaabbbbbbaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbaaaaaaabbbbbbbbbbbbbbaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbaaaaabbbbbbbbbbaaaabaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaabbbaaaaaaaaaaaaaaabbbbbaaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaabbbaaaaaabbaabaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbaabbbbbbbaabbbaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbaaabbbbbbbbbbabbbbbabbbbbbbbbbbbba + bbbbbabaaabbbbbbaabbbaabbbbbbbbbabaaaaaaabbbbbbbbbbbbbbaaaaabaaabbaaaaaabbbabaaaabbbbbbbba + bbbbbaabbbbbbbbbaabbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbabbbaabaaaaaaaabbaaaaaaaabbbbbbba + bbbbaaaabbbbbbbbaabbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababaaaaaaaaaaaaaaaabbbbbba + abbbaaabbbbbbbbbaabbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbabbbbbbba + abbbaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaabbba + abbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abababbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbba + bbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaabbaabbbbbba + bbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbba + bbbbbaaaaaaaaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbba + bbaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbba + aaaaaaaaaaaaabbaaaabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbba + aaaaaaaaabbbbbbaaaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbababbabbbabbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbaaaabbaabbbbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbababbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbaabaaababaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbbbbbabaaabbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbaabaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbaaaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbaaaabbbbbbbbaaaaaaaaabbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaaabaaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbabaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbaaaabbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbaaaabbbbbbaabbabbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbabbbabbabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbaaababbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbbabaaabbbbbabbbbaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbaaaabaaaaaabbbbaabbbaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbaabbbbaabbbbbabbbaaaabbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + babbbabbbbbaabbbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaabbaabbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbabbbbbbbbba + bbbbbaaaabbbbbbbbaaaabbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbabbbbbbbba + bbbaaaaabbbbbbbbbaaaabbbbaaaababbbaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaaabbaaaaaaaabbbbbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabaaaabbaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabaaabbbbaaaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbaabbbbbaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaabbbbbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaaabbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaaaaaabbbaaaabbaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbaaabbbbbbbaaaabbbbbaaabbaaaaabbaaabbbbbbbbbbbbbbaabbbbaaabbbbbbbbbbbbbbba + baaaaabbbbbbbbbbbaaabbbbbbbaababbbbbaaabbaaaabbbaabbbbaaabbbbbbbaaaaaabbaaaaaaaaabbbbbbbba + abaaaabbbbbbbbbbbaaabbbbbbbabbbbbaaabbaaabaaabbababbbaaaaabbbbbaaaaaaabbaaaaaaaaaaaaabbbbb + bbbbaaaababbbbbbbaaabbbbbbabbbbbbaaaaaaaaaaaabbabbbbbaaaaaabbbbbaabbbbbbbbaaabbaaaaaaaabba + bbbbbbbaaaaabbbbbaaabbbbbaabbbaaaaaaaaaabaaaaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabba + bbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaabbbbaaaaaabbbbbaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbaaaaaaaaaaaabbbbbbaaaaaabbbaaaaaaaaabbbbaabbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbbbbbaaaaaabbaaaaaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaabbbbaaaaabbbbbbaaaaaaaaaaaaabaaaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaabbbaaaaaaaaaaaaaaaaabbbaaaaaababbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaabbbaaaaaaabaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbaabbbbbbbbaabbbaaaaaaabbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaaabbbbbbaabbbaaaaabbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + bbbbaaaaabbbbbbbbaabbbabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaaaaabaaaaaaaaaabbbaabbbbbbbbbbbbba + bbbbaabbbbbbbbbbbaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabaaaaabbbaabbbbbba + abbbabbbbbbbbbbbbaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbaabbbbbba + abbbabbbbbbbbbbbbaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaaababbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaabbbaabbba + abbbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbba + bbbbbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbbaaaaaaaaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba + aaaaaaaaaaaaaabaaaaabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbba + aaaaaaaaabbbbbbbaaaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbba + aaaaabbbbbbbbbbbaaaabbbbabbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabababbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbababbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbaaaabbbbbbbbbbbbbaabbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbaaaabbbbbbbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbaaaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbaaabbbbbbbaaaaaabbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbaaabbbbbbbbaaaaaaaaabbabbabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbaaabbbbbbbbaaaabbbbbbbaaaaabbbbabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaabbbbaaabbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbbaaaabbbbbbbbabbbbaabbbbbbbbbbbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbbbaaababbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbaaababbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaabaabbbbbaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbabaaaabbbabbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbabbbbbabbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbabaaaaabbbbbbbbbbbbbaaaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaababaabbabbbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbaaaababbbbbbbbbbbaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abaaaaaabbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + babbbabbbbbaabbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaabbaaabbbbaaaabbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbabbbbbbbba + bbbbbaaaabbbbbbbbbaaabbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbaaaabbaaaaaabbbbbbbbbbbbbbabbbbbbbba + bbbabbbbbbbbbbbbbbaaabbbbbbbabbbbbaaabbbbbbbbbbbbbbbbaaaabbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaabbbbbbbbbbbaaaaaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabaabbaaabaaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabaabbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabaabbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaabbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaaabbbaaaabaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbaaabbbbbbbaaaabaaaaaaaabbaaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaabbbbbbbbbbbbbaaabbbbbbbaaaabbbbaaaaabbbaabbaabbbbbbbbbbbabbbbbaabbaaaaaaabbbbbbbbbbba + bbbaaabbbbbbbbbbbbaaabbbbbbaaaabbbbbaaaaaabbaabaaabbaabbbbbbbbbbbbbaaabaaaaaaaaaaabbbbbbba + bbbbbababbbbbbbbbbaaabbbbbbaabbbbbaabbbbabbbaababbbbaaabbbbbbbbbbbbbbabbbbbaaaaaaaaaaabbbb + bbbbbbbaaaaaabbbbbaaabbbbbbabbbbbaaaaaabbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbaaaaabbba + bbbbbbbbbbbbbbbbbbaaabbbbbabbbbbaaaaaaabbbbbaaaabbbbaaaabbbbbabbbbbbbbbbbaabbbbbbbabaaabba + bbbbbbbbbbbbbbbbbbaabbbbbaaaaaaaaaaaaabbbbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbbbaaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbaaaaaaaabbbbbbbbaaaaaaaabaaaaabbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbaaaaaaaaaaaaaaaaaabbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbaaaaaabaaaaaaaaaabaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbaaaabbbbbbaaabbbbaaaaaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaabbbbbbbaaabbbbaaaaaabbaaabbbbbaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaababbbbbbbbaaabbbbaaaaaabbbbbbbbaaaabbabbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbaaabbbbaaabbbbbbbaaaaabbbbbbbbbbbbbbbabaaaaaaaaaabbbbbbbbaabbbbbbbbbbbbba + abbbabbbbbbbbbbbbaaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabababaaaaabbbbabbbbbba + abbbabbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbaabbbbba + abbbabbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabaabbbbbba + ababbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbba + bbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaabbbba + bbbbbbbbbbbaaaaaaabbbabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbbbba + bbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbbbbba + aaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaabaabbbbbbbaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaabbbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbababbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbaabbbbabbbbbaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbaaaabbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbaababbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbbaaaaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbaabbaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbaaaaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbaaabbbbbbbaaaaabbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbaaabbbbbbbbaaaaababaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbaabaaaabbbbabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaabbbbaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbaaaaabbbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbbbaaababbbbbaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbaaababbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbbaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbaabbaabbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbabbbbbababbbabbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbabaaaaabbbbbbbbbbbbbaaaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbabaabbabbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abaaaaaabbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + babbbabbbbbaabbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaabbaaabbbbaaaabbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbabbbbbbbbba + bbbbbaaaabbbbbbbbbaaabbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbaaaabbaaaaaabbbbbbbbbbbbbbabbbbbbbba + bbbabbbbbbbbbbbbbbaaabbbbbbabbbbbbaaabbbbbbbbbbbbbbbbaaaabbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbaaaaaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaabbbbbbbbbbbaaaaaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabaaabbbbaaaabbbaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabaabbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabaabbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaabbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaaabbbaaaabbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbaaabbbbbbbaaaabaaaaaaaabbaaaabaaabbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbba + aaaaaaabbbbbbbbbbbaaabbbbbbbaaaabbbbaaaaaabbaabbaabbbbbbbbbbbabbbbbaabbaaaaaaaabbbbbbbbbba + bbaaaaaabbbbbbbbbbaaabbbbbbaaaabbbbaaaaaaabbaabaaabbaabbbbbbbbbabbbaaabaaaaaaaaaaabbbbbbba + bbbbbbbaabbbbbbbbbaaabbbbbbaabbbbbaabbbbbbbbaabaabbbaaabbbbbbbbbbbbbbabbbbbabbaaaaaaaabbbb + bbbbbbbabaaaabbbbbaaabbbbbbabbbbbbaaaaabbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbaaaaabbba + bbbbbbbbbbbbbbbbbbaaabbbbbabbbbbaaaaaaabbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabaaabba + bbbbbbbbbbbbbbbbbbaabbbbbaaaaaaaaaaaabbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaabbbbbaaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbaaaaaaaabbbbbbbaaaaaaaaabaaaaabbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbaaaaaabbaaaaaaabbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbaaaabbbbbbaaabbbbaaaaaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaabbbbbbbaaabbbbaaaaaabbaaabbbbbaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaababbbbbbbbaaabbbbaaaaaabbbbbbbbaaaabbabbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbaaabbbbaaabbbbbbbaaaaabbbbbbbbbbbbbbbabaaaaaabaaaaabbbbbaabbbbbbbbbbbbbba + abbbabbbbbbbbbbbbaaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaabbbbaabbbbbba + abbbabbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbaabbbbbba + abbbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbba + ababbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbababbbabbbba + abaabbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbabbbbbbbbbbbbba + bbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + bbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbba + bbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbba + bbbbbbbbbbbaaaaaaabbbabbbbbbbbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaabbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabbabbbbba + bbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbba + aaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaabaaabbbbbbaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaabbbbbbbbbbbaaaabbbbbbbaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbbbbbbbaaabbbbabbbbaabbbbbbbbabbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbaabbbbaabbbbabbabbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbaabbbbbaabbbaabbbaaabbbaabbbbaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbaaabbbbbaabbaabbbaaabbbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbaaaabbbbabbbaabbbbbbbbbbabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbaaaabbbbabbbbbbbbbbbbbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbabbbaaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbaaaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaabbbaaaaaabbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbaaabbbbbaaaaabbbaaaaaabbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbabaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbabababbbbbababbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbabbabbbbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbbbbbbaaaaabbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaabbaabbbbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbabbbbbbbabbbbaabbbbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabbabaaaaaaabbbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbabaabbabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abaaaaaabbbaabbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + babbbabbbbaaaabbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaabbaaabbbbbaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaabbbaaaabbbbbbbbbabbbbbbbbbbbbba + bbbbbaaaabbbbbbbbbbaaabbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbaaabbbbbabbbbbaaaabbbbbbbbbbbbbbbbbaaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbaaabbbbbaaaabbbaabbbbbbbbbbbbbbbbbaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbabbbbbbbbbbbbbaaaaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaabbbbbbbbbaaaaaabbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabaaaaaaaaaaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbaaabbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbaabbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabaabbabbbbbbbbaaabbbbbbbbbaaaaaaaaaabbbbaaaabbaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaabbbbbbbbbbaaabbbbbbbbbaaaaaaaaaaabbaaaaabaaabbbbbbbbbbbbbbabbbaabbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbaaabbbbbbbbaaabbaaaaaaaaabaaaabaaabbbbbbbbbbbbbbbaabbaaaaaabbbbbbbbbbbba + bbbbbbbbbaaaabbbbbaaabbbbbbbaaaaabbbbabbaaabbaabbaabbbabbbbbbbbbbbbaaabaaaaaaaaaabbbbbbbba + bbbbbbbbbbbabbbbbbaaabbbbbbbaaaaaabbbbbbbaabbaabbaabbaabbbbbbbbbbbbbbbbbbbaaaaaaaabbabbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbaabaabbbbbaabaabbbaaaabbbbbbbbbbbbbbbbbbabbbbaaaaaabbbb + bbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbaaaaabbbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbabbbbbbbaaaabbba + bbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbaaaaaaabbbbbaaaabbbbaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbabbba + bbbbbbbbbbbbbbbbbbaaabbbbbaaaabaaaaaaaaabbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaabbbbabaaaaaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbaaaaaaaaaaabbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbaaaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbaaaaaaaaababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaabbbbbbaaabbbbaaaaaabbbaaaaaaaaaaaaabbbbbbabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbba + bbbbaabbbaaabbbbbbaaabbbbaaaaaaaaaaabaaaaaaaabbbbbbbbbabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbaaabbbbaaaaaaabaaaabbbaaaaabbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbaaababbbbbbbbbbaaabbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaababbaaabbbbbbbbbbbbba + abbbabbabbbbbbbbbbaabbbbbaabbbbbabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbaabbbbbba + abbbabbbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabaabbbbbba + abbbabbbbbbbbbbbbbaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabaaababbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaaaaaaabaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaabbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaabbbba + bbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbba + aaaaaaaaaaaaaabbbaaaabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbba + aaaaaabaaaabbbbbbaaaabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbba + aaaaabbbbbbbbbbbbaaaabbbbbbbaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbba`, + map `abbbbbbbbbbbbbbbbbbbbaaabbbbaaaabaaabbbbbaaaabaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbaaaabaaabbbbbaaaabaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbaaabbaabbbbbbaaabaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbaaabbbbbaabaabbabbbbbabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbaaabbbbbaabaabbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbaaaaabbaaabbbbbbaaaabbabbbbbbbbaaabbbbbbbbbbbbbbabbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbaaabbbbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbaaaabbbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbaaabbbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbaaabbbbbbaaaaabbbaabbaabaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbaabbbbbbaabbbbbbaabaabbbbabbaabaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbaaaabbbbbbabaabbaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbaaabbbbbbbaaabaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbaabbbbbbbaaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbaabbbbbbbbaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbaaaabbbbbbbaaaaabbaababbbbbbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbaaaaababbabbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbaaaabbbbbbbbaaabbaaaaaaabbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbabaaaaaabbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbaabbabbbabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbbabbbbabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbaabbbbaabbbbabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbabbbbabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaabbbbaaaababbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba + bbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbababaabbbbbbbbbabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbabbbabbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbabbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + babbabbbbaaaaaabbbbbaaabbbbbbbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbaababbaaabbbbbbaaabbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbabbabbbbbbbbbbbbaaaabbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbabbbbbbbbbbbbba + bbbbbaabbbbbbbbbbbbaaaabbbbbaaaaabbbaabbbabbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbaababbbbaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbbbbbaaaaaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbaaaaabbbbbabbbbbbaaabbbbbbbbbbbaaaaaaaaaaabbaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaaabbbbbaaabbbbbbbbbbaaaabbbaaaabbbbaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaabbbbbaaabbbbbbbbbbaaaabbaaaabbbbbaaabbbaaaaaaaaaabbbbbbbbaaaaabbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbbaaabbbbbbbbbaaaaaaaaaaaabbbbaaabbbaaabbaaabbbbbbbbbbbaaaaaabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbaaaaaaaabbbbbaabbaaabbbaabbbbbbbbbbbbbbaaaaaaabbbbbbbba + bbaabbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbaaaaaabbbbbaabbaabbbbaaabbbbbbbbbbbbbbabaaaaaaaabbbbb + bbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbabaaaaaababbbaabbbbbaabbbbbbbbbbbbbbabbbbaaaaaabbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbaaabbaabbbabbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbba + bbbbbbaabbbbbbbbbbbaaabbbbbbaabbbbbbbaaaabbabbbabbaaaabbbbaaaabbbbabbbbbbbbbbbbbbbbbbaabba + bbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbabaaaabbbbbaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbaaabbbaaaaaaaabbbbbbaaabaaaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaabbbbbaaaaaaaaaabbbbbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaabbbbbaaaaaaaabbbbbbbaaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbbabaaaaaaaaaaabbbbbabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbabbbbbbbbaabbbbbaaaaaabbbaaaaaaaaaaaaaabbbbbbbbaaabaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbaaabbbbbaaaaaaabaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaabbabbbbbbbbbbbbbbbba + bbbbaaabaaaabbbbbbaaabbbbbaaaaaaaaaababaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaabbaabbbabbbbbbba + bbbbaaabbbbbbbbbbbaaabbbbbaaabbaabbbababaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbabaaabbaabbbbbba + abbbaabbbbbbbbbbbbaaabbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaaabbbbbba + abbbabbabbbbbbbbbbaaabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbabbbabbbba + abbbabbbbbbbbbbbbbaaaabbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbabbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbabbbba + bbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + aaaaaaaaaaaaaabbbaaaaabaaaaaaaaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbba + aaaaaabaaaabbbbbbaaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbba + aaaaabbbbbbbbbbbbaaaaabbbbbbbaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbba`, + map `abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbaaabbbbabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbbbaaabbbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaabbbbbbaaabbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbbbaaabbbbababbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaabbbbbbaaabbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaabbbbbbaabbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaabbbbbbbaaabbbbbbbbabbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabaaabbbbbbaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbaabbbbbbbaaaaaaabbbbbabbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbaaabbaaababbbbbaabaaaabbbbabbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbaaaabaaaaabbbbbbabbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbbaaabaaaaabbbbbbaaaaaabbbbbbbbbaaabbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbabaaabbbbbbbaaababbbbbbbabaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbbbaabbbbbbaaabbbbbbbbbabaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbbbaaabbbbbaaababbbbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbabaaabbbbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbaaabbbbbbbaabbbbbabbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbaaabbbbbbbaaaabbbbababaabbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbaabbbbbbbbaaaabbabbabaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbbabbbbbaaaaaaaabbbaabbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaabbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbabbbbbbbaaaaabbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbababbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaaaaaaaaaababbbbbbbbbbbbbaaaabbbbbbbbbbbbabbbbbbba + abbabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabaaaaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbba + abaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbabaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbbbbbbbbbba + babbbbbbbaaaaaaabbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbaaaabbbbbaaabbbbbaaabbbbbbbbaaaabbbbbbbbbbbabbbbaaabbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbbbbbbbbaaabbbbbaaaaaabbbbbaaaaabbbbbbbbbbbbabbbaaabbbaaabbbbbbbbbbbbbbbbbbbba + bbbbbbabbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbaaaabbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbaabbbbbbbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbaabbbbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaabbbbbbbaaabbbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbba + bbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbabaaaaaaaaaaabbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaabbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbba + bbbbbbbbbabbbaabbbbbaaabbbbbbbbbbaaaaaaaaaaaaabbaaaaaaaaabaaaaaaaaaaaabbbbaaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbaaaaaaaabbbbaaaaabbbaaaaaababaaaabbbbbaaaaaabbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbabaaaabbbaaaaaabbbaaabbbbaaaaaabbbbbbbabbaaaaabbbbb + bbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbaaaababaaaabbbaaaababaaaaaaabbbbbabbbbaaaaabbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbabbaabaababbaaabbbbaaaaaaaaaaaaabbbbbbabbbbbbbaaabbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbaaaabaabaabaabbbaaaaaaaaaaaaaabbbbbbbabbbbbbbbbbabba + bbbbbbaabbbbbbbbbbbaaabbbbbbbaabbbbbbbaaaabbabbabaabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbaaabbbabbabaabbaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbaaaaaaabbbbbbaaabbaaaabbbaabbbbbbbbbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbaaabaaaaaaaaabbbbbaaaabaaaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaabbbbbbbbaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaabaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaabbbbbbabaabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbbaaaaaaaaabbbbbbbbaaabbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbaaaaaaaaaaaaaaabbbbbaabaabbabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabaaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbba + bbbbbbbbbbabbbabbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbaaaaaaaaaaaaaabbbaabbbabbaabbba + abbbbbbbbbaaabbbbbbaabbbbbaaaabaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbaaaaababaabbbbba + bbbbbbbbbaaaabbbbbbaaabbbbaaabbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaabbbbbbbbbba + bbbbbbbbbaabbbbbbbbaaabbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbaabbbbbbbbaaabbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbabbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbabbbbbbbaaaabbbbbbbabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbabbbbbbbbaaabbbbbbbabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbbaaabbbbbbbabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbaabbbbbaaaabbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbaaaaaaaaaaaaabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + baaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbba + aaaaaaaaaabbbbbbbbaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + aaaaaaaabbbbbbbbbbaaaabbbbbbbaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbba`, + map `abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaababbbbbbbaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaabbbbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaabbbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaabbbbbaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbaabbbbbbaaaababbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbaaaabbbaaabbbbbaaaabbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbaaabbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbabbaaaabbbbbbaaaabbbaaabbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbabbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbaaababbbbaaaabbbbabbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbaababbbbaaaabbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbaabbbbbaaaabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbaaaabbbbbaaaabbbaaaabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbaaaabbbaaaabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbabbabbbbaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbabbabbbbbaabbabaabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbaabbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbaabbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbaababbbbaabbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbabbbbbbbabbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbabaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaaabaaaaabbbbbbbbbbbbaabbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbaabaaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbabaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbaaaaaaabbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbba + babbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbabbbbbbbbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbaaabbbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbbbbbbbbbaaabbbbbbaabaaabbbbaaabbbabbbbbbbbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbbbba + bbbbababbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaabbbbaabbbbbbbabbbaabbaaaaaaabbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaabbbbaabbbbbbbabbbbabbbbaaaabbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaabbbbbbbaabbbbbabbbbbaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbababbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbaabbabbbabbbbbbaaabbbbbbbbbbbbaaaaabaaaaaabbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaaabbbbbaaabbbbbbbbbbbaaaaaabaaaaaaaaaabbbbbbbbbaaaaaaaaaabbbbaabbbbbbbbbbbbba + bbbbbbbbbaaabaabbbbbaaabbbbbbbbbbbaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbaaaaaaaaabbbaaaaaaaaaaaaaaaaabaaabbbbbaaaaaabbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbbbbaaaabbbaaaaaabbaaaaababaaaaabbbbbbbabbaaaaabbbbb + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbaaabbabaaaabbaaaaaabaaaaaaabbbbbbbbbbbaaaabbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaababbbabbabbabbaaabbbaaaaaaaaaaaaaabbbbbabbbbbbbaaabbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbaabaababbabbaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabba + bbbbbbaabbbbbbbbbbbbaaabbbbbbbaaabbbbbaaaaabbababbaabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbaaaabbabbabaabbaaaabbbaaaaabbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbaaaaaabbabbaaaabbaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbaaaaaaabbbabaaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaabbbabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbbbbbbbaaaaaaaaabbbbbbbaaababbbbbbbbabbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbbabaaabaaaaaaabbbbbbaabaaaaabbbbbbaaababbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaabbababbabbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaaaaaabbabbaabbbbbbbbbbba + bbbabbbbbbbbbaabbbbaaabbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbaaabbaaaabbbba + bbbabbbbbbbbaaabbbbaaabbbbbaabbaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaababaaabbbba + bbbabbbbbbbbaabbbbbaaabbbbaaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbba + bbbabbbbbabbaabbbbbaaabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbabbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaabbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbaabbbbbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbaabbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbaabbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbaabbbbbaaaabbbbbabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbbaaaabbbbbbaababbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbaaaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaaaaaaaaaabbbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbba + aaaaaaaabaabbbbbbbaaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaabbbba + aaaaaaaababbbbbbbbaaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbba`, + map `abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbaaaaabbaabbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbababbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaabbbababbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabaaaabbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbabbbbbbbaabbaaaabbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbaaabbaaaabbbbaaaabbbaaabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbabbbbbbbaaabbbaaabbbbaaaabbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbaaaabbbbbaaaabbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbaaabbbbbaaaabbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbaaaabaaaabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbababbbbbaaaaaaabbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbbbaaaaaaabbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbabbabbbbbaaaaaabbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaabaabbbbbaaabaabbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaababbabbbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbabbbabbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbabbbabbaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbaabbaaabbbbbabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbaaabbbbbabbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbabbaaabbbbbabbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbabbbaabbbbbabbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbbbabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbabaaaaaaaabbbbbbbbaabbaabbbbbbbbbbbbbbbbbbba + bbbabaaabbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbbba + babbaabbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbababbbbbaabbbbbbbbbbbbbbbbbbba + bbbbababbbbbbbbbbbbbbaaabbbbbbbababbbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbaabbbbbbbbbbbbbbabaaaaabbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbaabbbbbbbbbbbbbbabaabaabbbababbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbbabbbbbbabbbaaababbbbbabbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaabbbbbbbbbabbbbbbabbbbbabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbaaabaabbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaaabbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaabaaaaababaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaababbbbbaaabbbbbbbbbaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbabbaaaabbaaaaaaabaaaaabbbabaaaabbbbaaaaaabbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbaaabbabaaaaabbaaaaabbaaaaaaabbbbbbaaaaaaaabbbbb + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbaaaaababbaaaabbaaaaaaaaaaaaaabbbbbbbbbbaaaaaabbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbabbbabaababbaabbbbaaaaaaaaaaaaaabbbbbbbbbbbbbabaabba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbaaaabbabaabaabbbaaaaaaaaaaaaabbbbbbbabbbbbbbbbbabba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbaaaaaababbabaabbaaaaabaaaaabbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbbaabaaabbbabbbaabbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbaaaaaaabbbbbaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaabaaaaaaaaabbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaabbbbbbbaaaaaaaaaabbbbbbbbbabbbabbbabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbaabaaaaaaaabbbbbbabaaaaabbbbbabaababbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaababbabbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbaaaaaaaaabbbbbbbbbbaabbbbbba + bbbabbbbbbbbbbbabbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaabbbbaabbbaabbbbbba + bbbabbbbbbbbbbaabbbbaaabbbbaaaaaaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaaaaaabbbbba + bbbabbbbbbbbbbabbbbbaaabbbbaaaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbabbbbbbbbaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbabbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaabbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbababbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbabbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbabbbbbbbbbbbbba + bbbbbbbbbaaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbba + bbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbba + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbba + baaaaaaaaabaabbbbbbaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + aaaaaaaaaabbbbbbbbbaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba`, + map `abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbaaaaabbaabbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbababbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaabbbababbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabaaaabbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbabbbbbbbaabbaaaabbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbaaabbaaaabbbbaaabbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbabbbbbbbaaabbbaaabbbbbaaabbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbaaaabbbbbaaabbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbaaabbbbbaaaabaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbaaaabaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbabaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbbbaaaaaaabbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbabbabbbbbaaaaaabbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaabaabbbbbaaabaabbbbbbbbbbbbbbbbbbbba + abaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbabbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbabbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaababbaabbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaababbbabbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaababbbabbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbaabbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbaaabbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbabbaaabbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbabaaaaaaaabbbbabbbaabbaabbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaaabbbbbbabbaabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbaaaaaaabbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbbba + babbaabaabbbbaabbbbbbaaabbbbbbbbbbbbbbbbbaaabaabbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabaaabbbbbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbbbaabaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbaababbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbabaaaaabbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbaabbbbbbbbbbbbbbabaabaabbbababbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbaabbbbbbbabbaaababbbbbabbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbabbbbbbbabbbbabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbbba + bbabbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbaaabaabbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaaabbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaabaaaaabaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaababbbbbaaabbbbbbbbbaaabaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaaabbbabbabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbabbaaaabbaaaaaaabaaaaabababaaaabbbbbaaaaabbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbaaabbabaaaaabbaaaaabbaaaaaaabbbbbbaaaaaaaabbbbb + abbabbbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbaaaaababbaaaabbbaaaaaaaaaaaaabbbbbbbbbaaaaaaabbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbabbbbbaababbaabbbaaaaaaaaaaaaaaabbbbbbbbbbbbaaaaabba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbaaaabbabaabaabbbaaaaaaaaaaaaabbbbbbbabbbbbbbbbbabba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbaaaaaababbabaabbaaaaabaaaaabbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbbaabaaabbbabbbaabbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbaaabbbbbbaabbbbaaaaaaabbbbbaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaabaaaaaaaaabbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaabbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbaabaaaaaaaabbbbbbabaaaaabbbbbabaababbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbaaaaaaaaaaaaaabbbbbbbbbaaaaaabbbaababbabbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbaaaaaaaaabbbbbbbbbbaabbbbbba + bbbabbbbbbbbbbbabbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaabbbbaabbbaaabbbbba + bbbabbbbbbbbbbaabbbbaaabbbbaaaaaaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbaaaaaaaabbbbba + bbbabbbbbbbbbbabbbbbaaabbbbaaaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbabbbbbbbbaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbabbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaabbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbababbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbaabbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + bbbbbbbbbbbbbbbbaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbba + baaaaaaaaabaabbbbbbaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbba + aaaaaaaaaabbbbbbbbbaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbba`, + map `abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbaaababbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaababbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbaaaabbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaababbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbbaaaaabbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaabaaabbbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbaaaabbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbaabbbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaabbabaabbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbba + abbabbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbba + abbabbbbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbaaabbbbbbaabbaabbbbbbbabbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbabbaabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbabbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbababaabbbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbababbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbaaaaaabbbabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbaabbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbabaaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbaaabaabbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabaaabbbbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabaabbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbabbbbbbbbaabbbbaaabbbbbbbbbbbbbbbbbaaababbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbaaaaabbbababbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbaabbbbbbbbbbbbbbaaaaaaabbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbaabbbbbbbbbbaabbabbbbbabbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbbabbbbaabbbbbbabbbaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaababbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbba + abbbaaabbaabbbabbbbbbaaabbbbbbbbbbbaaaaaabbaaaaabbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbaaabbaaaaabbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbaaabaaabbbbbaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaabbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbaabbbbaabaaaaabbaaaaaaaaaaaaaaababaaaabbbbbaaaaabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbaaabbaaaaaaabbaaaaabbaaaaaaabbbbbaaaaaabbbbbbbb + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbaaaaabbbbaaaabbbaaaaaaaaaaaaaabbbbbbbbaaaaaaabbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbabbbbbbabbabaabbbbaaaaaaaaaaaaaabbbbbbbbbbbbaaaaabba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbabaaabbbbabaabbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbabba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbaaaaaaabbabaabbaaaaaabaaaaabbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbaaabbbabbbaabbbaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbbaaabbbbbaaabbbaaaaaaabbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaabbbbbbaaaaaaaaaaaaabbbbbbaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaabbbbbaaaaaaaaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaaaaaabbbbbbbaaaaaaaaaaabbbbbbbbbbbbabbbbbabbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbaabbaaaaaaaaabbbbbbbbbbabbbbbbbbbaabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaaabbbbaaaaaaaaaaaaaaabbbbbbaaababbbbbbbbbbaabbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaabbaaabbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbabbbbaaabbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbaaabbbbba + abbabbbbbbbbbbbabbbbaaabbbbaaaaaaaabbbaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbaaaabaaabbbbba + abbabbbbbbbbbbbabbbbaaabbbbaaaaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaabaaaaabbbba + bbbbbbbbbbaabbabbbbbaaabbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaababbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaabbbbbbaaaabbbbbbbbbbbabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbabbbbbaaaabbbbbbbbbbaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbabbbbba + bbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbba + bbbbbbbbbbaaaaaaaaaaabbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbba + bbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaabbbbbbba + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbba + baaaaaaaaaaaabbbbbbaaaaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbba + aaaaaaaaaaaaabbbbbbaaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbaabbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbaabbbbaabbbabbbbbbabaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbabbbbbbabaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaababaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbabaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaabaabaabbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbaabbbbbbbabbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaababbaabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbabbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbabbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbaabbbbbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbababbbbaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabaaaaaaaaabbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + bbabbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + ababaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbabbbbaaaaabbbbbbbbaaabbbbbbbbbbbbbbbbaababbbbbbbbbbbaaaaabbbbbbababbbbbbbbbbbbbbbbbbba + bbbbbabbaaaaaabbbbbbbbaaabbbbbbbbbbbbbbbbaabaabbbbbbbbbbbabababbbbabaaabbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaababbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaaabbbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbaabbbbaaaabbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbabbbbbbbbbbbaabbbbbbbbbbbbbabbaaaabbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbaaabbabbbbbbbaabbbbbbbabbabbbabbbbabbbbaaabbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbaabbbbbbbbbbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaabbbbbbbbbbbbbbbbbba + bbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbaabbbaaabaaaabaaaaaaaabbaaaaaabbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbaaaaaaaaabbbbbbbaaabbbbbbbbaaaabbbbabbaaabbaabaaabbbaaaabbbaaaaaaabbbbbaaaabbbbbbbbba + bbbbbbbbbbaaaaaabbbbbaaabbbbbbbbaaaabbbbbbbbbabbaaaaaabbbaaaaaaaaaaaaaabbbbbaaaaabbbbbbbbb + bbbbbbbbbbbbbbaabbbbbaaabbbbbbbaaaabbbabbbbbbaabaaababbbabaaaaaaaaaaaabbbbbbbbbaaaaaaabbba + bbbbbbbbbbbbbbaaabbbbaaabbbbbbbaaabbbbbabaabbaabbaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbaaaaabba + bbbabbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbaaaaababbaaabbbaaaaaabaaaaaabbbbbbbbbaaabbbbbbbabba + abbabbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbaaabbbabbaaabbbaaabbbbaaabbbbbbbbbbababbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaabbbbbaaabbbaaaaaaabbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaabbbbbbbaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaaaabbbbbbbaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbaabaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaaaabbbbbbbaabbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaabbbbbaaaaaabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbabbbbbaabbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaaaaabbbbbbabbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbabbbbbaabbbbaaaaaaaaaababaaaaaaaaabbbbbbbbaaaaaaaaabbaaaabbbbbbbbbbbbbbbbba + abbabbbbbbbbbbaabbbbbaabbbbaaaaaaaabbaaaaaaaaaabbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbaabbbbbba + bbbbbbbbbbaabbbbbbbbbaabbbbaaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbaaabbaabbbbaabbbaaaabbbba + bbbbbbbbbbaaabbbbbbbaaabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaaaabbbbba + bbbbbbbbbbaababbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + bbbbbbbbbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbabbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabaabbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbabbbbbaabbbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbabbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbba + bbbbbbbbbbaaaaaaaaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaabbbbbba + bbbaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbba + bbaaaaaaaaabbbbbbbbaaaaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbba + aaaaaaaaaaabbbbbbbbaaaaabbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaababbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaababbbbbbbbbbbaabbbbabbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbabbbbbbbbbbbaaaabbbbbbbbbbbbbbaababbbbbbbbbbbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaababbbbbbbbbbbaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbaababbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbabaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaabbbabbbbbbbaabbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbabbaaaaaaabbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbbbbbabbbaaaabbbbbaabbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbaabbbbbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbabaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbabbbbbbaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaabbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbaaaabbaaaaaaaabbbbbabbbbbbbaaabbbbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbaabbbbbbbaabbbbbabbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbabaaabbbbbbbbbbbbbbbbbbbba + bbabbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + ababaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbaaabbabbbbbbbbbbbbbbbbbbba + abbbbbbbbaaaaabbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbabaaababbbbaabbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaabbbbbbbbaaabbbbbbbbbbbbbbbaabbabbbbbbbbbbbbaaaabbbbaabbabbbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaaaaabbbaabbabbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbabaaaabbbabaaabbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaaabbbbbabbbbbbbbbbaabbbbbabbbbbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbaabbbbbbbbbbbabbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbbaabbbbbbbabbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbabbbaabbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbabbaabbbbbaaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaabbaaaaaaaaaaaaaabbaaaaabbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbbbbbbbbbaaabbbbbbbbbaabbaaaabaaaabbaaaaaabbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbba + abaaaaabbbbbbbbbbbbbbaaabbbbbbbbaaabbbbaabbbaabbbaababbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbaaabbbbbabbbbbbbaaabbbbbbbaaaaabbbbbabbaabbaaababbbaaabaaaaaaaaaaabbbbbaabaabbbbbbbbb + bbbbbbbbbaaaaaabbbbbbaaabbbbbbbaaabbbbbbbbbababbaabbabbbaaaaaaaaaaaaaabbbbbaaabaaaaaaabbba + bbbbbbbbbbaaaaaabbbbbaaabbbbbbbaabbbbbbabaaaaabbaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbaaaaaaabba + bbbbbbbbbbbbbbaaabbbbaaabbbbbbaabbbbbbbaaaaabaabaaabbbaaaaabbaaaaabbbbbbbabbaabbbbabaaabba + bbbabbbbbbbbbbbaabbbbaaabbbbbaaabbbbbbbaaabbbaabaaabbaaaabbbbaabbbbbbbbbbbbbabbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbaaaaaaabbbbaaaaabbaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaaaaabbbbbbabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaabbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaabbbbbbbbabbbaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaabbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbaaabbbbaaaaaaaabaaaaaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbabbbbbaabbbbaaaaaaaaaaaabbbaaaaaaaaaabbbbaaaaababbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbaabbbbaaabbbbaaaaaaaabbbbaaaaaaaaabbbbbbbbaaaaaaaababbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbaabbbbbbbbaaabbbbaaaaaabbbbbbbaaaaaabbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbbbaaabbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbaaabbbbbbbbba + bbbbbbbbbaabbbbbbbbbaaabbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaababbbaaaaabbbbbbba + bbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaaaaabbbbbba + bbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaabbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbababbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbabbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbba + bbbbbbbbbbaaaaaaaaaaabbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbba + bbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbba + bbaaaaaaaaaaabbbbbbaaaaabbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaabbbbbbbbbbbbbba + aaaaaaaabbaabbbbbbbaaaaabbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbabbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbabbabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabaababbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbabbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaabbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaabbbabbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaabbbbbaaabbbbbbbaaabbbbabbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabaaaaaabbbbbbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbaaaaaaabbbbbabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbbaaaabbbbaaaaaabbbbbbbbbabbbaabbbbbbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbaabbaabbbbbbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbaaaaabbbbbbbbabbbbbbbbbbbbbba + bbabaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbaaabaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abaabaaaabaaabbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbaabbaaaabbbbaaabbabbbbbbbbbbbbbbbbbbbba + ababaabbbabaaabbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbaabbbaaabbbbbaabbabbbbbbbbbbbbbbbbbbbba + babbabbbbaaaaaaaabbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbaabbbaaaabbbbaabbabbbbbbbbbbbbbbbbbbbba + bbbbbbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaaaabbbbbbaabbbabbbabbbabbaabbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbaaaaabbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbaaabbbbbbbbbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbababbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbaababbbbbbbaaabbbbbbbbbbbbaabbaabbbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbaaabbbbbbbbbbbbbabbaabbbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbaaaaabaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaabbbbbbaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbababbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbaaaaaaaaaaaaaabbbaaaaaaaabaaaabbbbbbbbbbbbbbbbbba + bbababbbbbbbbabbbbbbbaaabbbbbbbbbaaaaaabbaaaabbbaaaaabbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbbbbbbaaabbbbbbbbaabbaaaaabaaabbbaaaaabbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbba + abaaaabbbbabbbbbbbbbbaaabbbbbbbaaaabbbaabbbaabbbaaaabbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbaabbaababbbbaabaaaaaaaaaaabbbbbbbabbbbbbbbbbbb + bbbbbaababbbbbbbbbbbbaaabbbbbbaaabbbbbbbbbabaabbaabbbbaaaaaaaaaaaaaaabbbbbbbaaaaaaaaabbbba + bbbbbbbbbaaaaaabbbbbbaabbbbbbbaabbbbbbaaaaabaabbaabbbbaaaaaaaaaaaaabbbbbbaaaaaabaaaaaaabba + bbbbbbbbbabaaaaaabbbbaabbbbbbaabbbbbbbbaaabbbaabaabbbaaaaabbaaaaabbbbbbbbbbaaaabbbabaaabba + bbbbbbbbbbbbbbbabbbbbaabbbbbbaabbbbbaaaaabbbbaabaabbbaaaabbbaabbbbbbbbbbbabbabbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaabbbaabbabbaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaabbbbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaabbbbbabbababbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbabababbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaabaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbaaabbbbaaaaaaaaaaaaabbabbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaabbbbaaabbbbaaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbaaabbbbbbbaaabbbbaaabbbbbbbbbbbaaaaaaaabbbbbbaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbbbaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbbaaaaaaaaaaabbaaaabbaabbbbbbbbbbbbbba + bbbbbbbbaaabbbbbbbbbaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaaaaabaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbaabbbbbbbbbbaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbabbbabbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaaaabaaaabbbbbbbbba + abbaabbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbba + abbbababbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbabbbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbabbbbaaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaabbbbba + bbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbba + bbbbbbbbbbaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbba + bbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbabbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbabbbbbbbbbbbbbba + baaaaaaaaaaaabbbbbbaaaaabbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbba + aaaaaaaaaaaabbbbbbbaaaaabbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbabbbbabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbabbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbbaaabbbaaabbbbaabbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbabbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbaa + abaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbababbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaabbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaabbaabbbbaababbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaabbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbb + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbaaaaabbbbbaabbbaabbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbaaaaaabbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbaaaaabbbbbbbaabbbabbbbbbbbbabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbabbaaabbbbbbaaaababbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbabbbbbbbbbbbbba + bbabaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbabbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + ababaaaaabaaaabbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbabbbaaabbbbbaaabbabbbbbbbbbbbbbbbbbbbba + ababaabbaaaaaaaabbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbabbbbaababbbaaabbabbbbbbbbbbbbbbbbbbbba + babbbbbbaaaaaaabbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbabbababbbbbaabbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbaabbaabbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbaababbbbbbbbbaababbbaabbbbaaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbababbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbababbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbababbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbaaabbbbbbbbbbbabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbaabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaaaaaaaabaaaaaabbbbbbbbbbbaabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbaabbbbbba + bbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbaaabbbaaaaaabbbbbaaaaaaaabaaabbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbabbbbbbbaaabbbbbbbbbaaaaaabbaaaabbbaaaaabbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbba + bbabaabbbbbbbbbbbbbbbaabbbbbbbbbaabbbaaabbaaabbbaaaabbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbba + bbbaaaabbbbbbbbbbbbbaaabbbbbbbbaaaabbbbabbbbabbbaababbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbba + bbbbaabbbabbbbbbbbbbaaabbbbbbbbaaabbbbbbbbaaaabbaababbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbaababbbabbbbbbbaaabbbbbbbaabbbbbbabaaaaaabbaabbbbaaaaaaaaaaaaaaabbbbbbbabaabbbbbbbbbb + bbbbbabbbbbaababbbbbaaabbbbbbbaabbbbbbaaaaaaaabbaabbbaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaabbbbb + bbbbbbbbbaaaaaabbbbbaaabbbbbbaabbbbbaaaaabbaaabbaabbbaaaaabbaaaaabbbbbbbbbbaaabbbaaaaaabba + bbbbbbbbbbbbbbaabbbbaaabbbbbbaaabaaaaaaaabbaaaabaabbaaaabbbbaabbbbbbbbbbbabbbbbbbbbbababba + bbbabbbbbbbbbbbabbbbaaabbbbbaaaaaaaaaaaaabbbaaabbabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbbbbaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabbbbbbbbbbbabbbaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbbabaaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbaaabbbbaaaaaaaabaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbaaabbbbaaaaaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaabbaabbbbaaabbbbaaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbbbaaabbbbaaaaabbbbbbbbbaaaaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbaaaabbbbbbbbbaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbabaaabbbbbbbbbbaaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabbaaabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbaabbbbbbbbbbbbbba + abbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabaaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaabbbaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbaaabbbbbbaaa + abaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaa + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaaaa + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + bbbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbba + bbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbabbbbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + baaaaaaaaaaaabbbbbbaaaaabbbabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbba + aaaaaabaaaaabbbbbbbaaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbabbbbabbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbabbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbaaaaabbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbabbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbaa + abaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbabbbbaaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbaabbbbbbbbabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabaaaabbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaabbbbbbbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaabbaabbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaabbbbaabbbbbbbbbaaabbbbabbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbaabbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbaaaaaabbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbaaaaabbbbbbbaabbbaabbbbbbbbabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbabbaaabbbbbbaaaababbbbbbbbbabbbbbbbbbbbbba + ababbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbabbbbbbbbbbbbba + bbabaaaabaaaabbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbabbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + ababaaaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbaaabbbbabbbbabbbaaabbbbbaaabbabbbbbbbbbbbbbbbbbbbba + abbbaabbbaaaaaaabbbbbaaaabbbbbbbbbbbbbbaaaabbbabbbbabbbbaababbbaaabbabbbbbbbbabbbbbbbbbbba + babbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbaaaabbbabbbbbabbbbabbbbbaabbbabbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbaabbbabbbbbbbbbbaabbaabbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbaababbbbbbbbbaababbbaabbbbaaaabbbbbbbbabbbbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbaaabbbbbbbbbbbabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbaabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaaaaaaaabaaaaaabbbbbbbbbbbaabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbabbbbbba + bbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbaaabbbaaaaaabbbbbbaaaaaabbaaabbbbbbbbbbbabbbbbbba + bbaaabbbbbbbbabbbbbbbaaabbbbbbbbbaaaaaabbaaaabbbaaaaabbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbba + bbabaabbbbbbbbbbbbbbbaabbbbbbbbbaabbbaaaabaaabbbaaaabbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbba + bbbaaaabbbbbbbbbbbbbaaaabbbbbbbaaaabbbbabbbbbbbbaababbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbaaaabbaababbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbaabbaabbbbbbbbbaaabbbbbbbaabbbbbbabaaaaaabbbabbbbaaaaaaaaaaaaaaabbbbbbabbbbbbbbbbbbbb + bbbbbabbaaaaababbbbbaaabbbbbbbaabbbbbbaaaaaaaabbaabbbbaaaaaaaaaaaaabbbbbbbaaabbaaabbbbbbbb + bbbbbbbbbaaaaaabbbbbaaabbbbbbaabbbbbaaaaabbaaabbaabbbaaaaabbaaaaabbbbbbbabbaaaabaaaaaaabba + bbbbbbbbbbbbbbaabbbbaaabbbbbbaaabaaaaaaaabbbaaabaabbaaaaabbbaabbbbbbbbbbbabababbbaaaaaabba + bbbabbbbbbbbbbbabbbbaaabbbbbaaaaaaaaaaaaaabaaaabbabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaababbbaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabbbbbbbbbbbabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbaaabbbbaaaaaaaabaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbaaabbbbaaaaaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaabbaabbbbaaabbbbaaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbabaaabbbbbbbaaabbbbaaaaabbbbbbbbbaaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbaaaabbbbbbbbbaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaababbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbabaaabbbbbbbbbbaaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaababaaabbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + abbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaabaaaaaaaabbbbbbbbba + abbbbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabababbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbaabbbbbbbaaa + abaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaa + abbbbbbbbbbbbabbbbbbaaaabbbbbabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + bbbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbba + bbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbabbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbba + bbbbbbbbbbaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbbbabbbbbbbbbbbbbbabaaabbbbbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaaabaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + baaaaaaaaaaaabbbbbbaaaaabbbabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaaabbbbbbbbbaaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaaabbaabbbbbbaaabbbbbbbbbbbbbbbbbbbaabbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbaabbbaabbbbbbaaabbbbbbbbbbbbbbbbbbbaabbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbabbbbbbbbbbaaaaababbbbbbbbbbbbbbbbbaabbba + abbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbbbbbbbbbbaaabba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbaaabbbabbbbbbbbbbbbbbbbbaaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbabaabbbbbbbbbbbbbbbbbaaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbabbbabbabbbbaabbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbabbbabbabbbbaabbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbabbbbbbabbbbbaabbbbbbbbbbbbbbbbbaaaba + abbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbaabbbbbabbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbaaaabbbbbbbbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabaabbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaababbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaba + abaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbabbbbbbbbbbaaba + abaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbaaabbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaabbbbabbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaa + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaabbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaa + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaabbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbabbaaaabbbbaabbbabbbaaabbbbbbabbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbaaabbbbaabbbaabbbaabbbbbbbbbbbbbbbbbbbbbaa + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbaabaabbbbbbbaaabbaabbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbba + ababbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbba + ababaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbabbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaabbabaaaabbbbbbbaaaabbbbbbbbbbbbbbaaaabbbabbbbabbbbaababbbaaabbabbbbbbbbbbbbbbbbbbbba + babbbbbbabaaaaaabbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbaabbbbabbbbbbaabbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbabbbbbbabbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbabbbabbbbbbbbabbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbaabbbabbbbbbbbbbbabbbaabbbbbbbbbbbbbbbbbbba + bbaaaabbbbbbbbbabbbbbaaabbbbaaabbbbbbbbbaaaaabbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbaaaabbbbbbbbabababbaaaabbbaaaabbbbbbbbbbabbbbbbbba + bbbbbabbbbbbbbbabbbbbaaabbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaababbbbbaaabbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabaabbbbabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaababaaaabbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbaaaaaaaaaaaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbaaabbabaaaaabbbbbbaaaaaaaaaabbbbbbbbbbbabbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaabbaaabbbbaaaabbbbbbaaaaaaabaaaabbbbbbbbbbbbbabbbba + bbaaabbbbbbbbabbbbbbbaaabbbbbbbbbaaabbaaabaaabbbbaaaabbbbaaaabbbbbbaaaabbbbbbbbbbbbbabbbba + bbabaabbbbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbaaabbbbaaabbbbbaaabbbbbaaaaaabbbbbbbbbbbbbabbbba + bbbaaaabbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbaaaabbbababbbbaaaaabbbbaaaaaabbbbbbbbbbbbbabbbba + bbbbaaabbabbbbbbbbbbaaaabbbbbbaabbbbbbbaaaaaaabbbababbbaaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbaabaaabbbbbbbbbaaabbbbbbbaabbbbababbaaaaabbbabbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbaaaababbbbbaaabbbbbbaaaaaaaaaaaaaaaaabbbabbbbaaaaaaaaaaaaabbbbbbbbaabbabbbbbbbbbb + bbbbbbbbbaaaaaabbbbbaaabbbbbbaaaaaaaaaaaaaaaaaabbabbbaaaaabbaaaaabbbbbbbbbaaaaaaababaaabba + bbbbbbbbbbbbbbaabbbbaaabbbbbaaaaaaaaaaabaaaaaaabbabbaaaaabbbaabbbbbbbbbbbabaaabbbbbabaabba + bbbabbbbbbbbbbbabbbbaaabbbbbaaaaaabbbbbbbaaaaaabbabaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbabbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabbbaabbbbbbabbaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaabaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaabbaabbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbaaabbbbbbabbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbaaabbbbbbaaabbbbbbbbbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbababaabbbbaaabbbbbaaaaaaaaaaabbbbbaaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbaabaaabbbbbbbaaabbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbba + bbbbbabaaaabbbbbbbbbaaabbbabaaaaaaaaaaaabbbbbbbbbbbbbaaaaaaababbbbbbbbabbbbbbbbbbbbbbbbbba + bbbbaabbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaababbbbaabbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabaaaaabbbbbbbbbbbbbbbbba + abbaabbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaaaaabbaaaaaabbbbbbbbbbbb + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbaaba + abbabbbbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaabbbbbbbaaaaaa + abaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaa + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbabbbbbbbbba + bbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaabbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbba + bbaaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbbbbbbbbbbbbbbba + baaaaaaaaaaaabbbbbbaaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + aaaaaabbaabbbbbbbbbaaaaabbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbaaabba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbaabbabaabbbbbaaabbbbbbbbbbbbbbbbbbaaabba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbbaabbbbaabbbbaaaababbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbaaabbbaabbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbaabbbbabbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbaabbbaabbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbbaabbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbaabbbbbbbbaabbbbabbbbbabbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbaababbabbbbbaabbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbaabbbbbbbbaabbbbabbbbbaaabbbbbbbbbbbbbbbaaaba + abbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbaabbbbbbbbabbbbaabbbbbaabbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbbaaaabbbbabbbbbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaba + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaababbbbbbbbaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaa + abaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbabbbaaaaaabbbbbbbbbbbabbbbbbbbbbbaaa + abaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaabaabbbaabbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabaaaaaabbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaababbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaabbaaaaabbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbaaabbbbaabbaabbbaabbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbaabaabbbbbbbabbbaabbbbbabbbbbbbbbbbbbbaa + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbaabbbabbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbaaababbbbbbbbbbbbbbbbbbbbaa + ababbbbbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbaaabbbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + abaaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbaaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbabbbaaabbbbbbbbbbbbbbbbbbbbba + abbbaaaaabbbaabbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaabaabbaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbaaaaaabbbbbaaaabbbbbbbbbbbbbbbaaaaabbabbbabbabbbbbbbbbbabbabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbabbbbaaaabbbbbbbbbbbbbbbaaaaabbabbbbbbbbbbbbbbbbaabbabbbbbbbbabbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbaababbaabbbbbbabbbbbaaabbbbaabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbabbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbaabbbbbbbbbbbbbbabbaaabbbbaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbabbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbaaabbaaaaaaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabaaabaaabbbbaaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaababbbbbaaaabbbaaaabbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbbbbaaaabbaaaabbbbaaaaabababaaaabbbbbbbbbbabbabbbba + bbaaabbbbbbbbbbbbbbbbaaabbbbbbbbaabbbbbbbaaaaaabbbabbbbbbaaaabbbbbbaaaabbbbbabbbbbbbabbbba + bbabaaabbbbbbbbbbbbbbaabbbbbbbbaaabbaaaabbaaaaaabbabbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbabbbba + bbbbaaababbbbbbbbbbbbaaabbbbbbbaaaaaaaaaabaaaaaabbabbbbaaabbabbaaaaaaaabbbbbbbbbbbbbabbbba + bbbbbaaaaaabbbbbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaaabbabbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbabbbaaabbbbbbbbaaabbbbbbaaaaaaabbbaaaaaaaaabbabbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbaaaaabbbbbbaaabbbbbbaaaaaabbbbbbabaaaaabbabbbaaaaabaaaaaaabbbbbbbbbabbabbbbbbbbbb + bbbbbbbbbbbbbaaabbbbaaabbbbbbaaaaaabbbbabbaaaaaabbbbaaaaabbbbaaaabbbbbbbbbbaaaaaabaaaaabba + bbbabbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaabaaabaabaaabbbaabaaabbbbabbbbbbbbbbbbbaaabbbbbabaabba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaaaabbbbbaaaaaaabaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaabbbbbbbabaaaaaaaaaaaaabbbbbbbbbbbbababbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaabbababbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbabbbbbbbbabbbba + abbbbbbbbbbbbbbabbbbaaabbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbaaabbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbababbbbbbbaaabbbaabbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaabbbbbbbaaabbbababaaaaaaaaaaaaaaaaaaaabbbbbbaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbba + bbbbbbbaaaabbbbbbbbbaaabbbabaaaaaaaabbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbba + bbbbbabbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbabbbbbbbbaabbbbbbbbbbbbbbba + bbbbbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbabbbbbbbbbbbbbbbba + abbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbabbaabbbbbbbbbbbbbbba + abbbababbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaaabbbabbbbbbbba + abbbabbbbbbbbaabbbbbaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaba + abbbbbbbbbbbbbbbbbbbaaaabbbbaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaba + abbbbbbbbbbbbabbbbbbaaaabbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaa + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaba + abbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbba + bbbbbbabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbbba + bbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbaaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbba + baaaaaaaaaaaabbbbbbaaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbba + aaaaaabbaabbbbbbbbbaaaaabbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbaaa + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbabbbbaabbbabbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbaaabbbbbaabbbaabbbaabbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbabbaaabbbaaabbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaababbbbaaabbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbabbbaabbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbabbbbabbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbaabbbbaabbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbabbbbbaabbabbbbbaabbbbbbbbbbbbbbbbbaaa + abbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbabbabbbbbaabbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaa + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbaa + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbaa + abaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbaabbbbbaabbbbbbbbabbbbbbbbbbbbaa + abaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbabbbabaabbbabbbbbbaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbaaaaaabaabaabbbbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbabbbbaabaaabbbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbabbbbbabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbabbabaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaabbbbbabaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbba + ababbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbabaabbbbaaabbbbbbbbbbbbbbbbbbbba + abbaaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabaaabbbbbbbbbbbbbbbbbbbba + abbbbaaaaabaaabbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbabbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbabbabbbbbbaabbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaaababbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbabbabbbbbbbbbbbbaaaabbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbababbabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbaabaaabbbaaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbaaaabbaaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbaabbaabaaabbaaaabbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaaaabbaaaaabbaabbbbbaaaaaaaaabaaabbbbbbbbbbbbbbbbbbba + bbababbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaaaabaaaaabbaabbbbbaaaaaaabbbaaaabbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbbbbbbbbbaaabbbbbbaaaaaaabbbaaaaaaaaabaabbbbaaaaaabbbbbaaaabbbbbbbbbbabbabbbba + abaaaaabbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbaaaaaaaabaabbbaaabbbbbbbbaaaaabbbbbabbbbbbbabbbba + bbbbaaaabbbabbbbbbbbbaabbbbbbbaaaaaabbbbbbabaaaaabbbbbbaabbbaaabbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbaaaaaaabbbbbbbbbaaabbbbbaaaaaaaabbaaaaaaaaaabbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbabbbba + bbbbbbbbbabbbaabbbbbaaabbbbbbaaaaaaaabbbaaaaaaaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbabbbba + bbbbbbbbbbaabaaabbbbaaabbbbbbaaaaaaabbbbaaaaaaaaabbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaabbbbbaaabbbbbbbbbbbaabbaaabbbbaaaaaaaabbaabbbbaaaaaabbbbbabbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbababbbbbbaaaaabbbaabbbbbbaaabbbbbbbbaababbaabbbbbbbbb + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbabbabbbbaabbabbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbabbba + abbbbbbbbbbbbbabbbbbaaabbbbabbabbbbbbbbbbbbbbabbaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbabbbbba + abbbbbbbbbbbbbabbbbbaaabbbaaaaabbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbabbbbba + abbbbbbbbbbbbbbbabbbaaabbbabaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbabbbbbbbbabbbbba + abbbbbbbbbbbbbbbaabbaaabbbabaaabbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbbbabbbaaabbbaaaaaabbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbaabbbbbbbaaabbbaaaaaaabaaabaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbba + abbababbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbababbbbba + abbaaabbbbbbbbbbbbbbaaaabbbbbbbbabbaabaaabbbbbbbbbbbbbbbbbaaaaaaaabbabbbbbbbbbbbbabbbbbbba + abbbabbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbababbbbbbbbbbba + abbbbbbbbbbbbabbbbbbaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbaaaaaaaaaabbbbbbbbba + abbbbbbbbbbbabbbbbbbaaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbaaba + abbbbbbbbbbbbbbbbbbbaaaabbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaba + abbbbbbbbbbbbabbbbbbaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaa + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaba + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbba + abbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbabaa + abbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbabbabbbbbbbbbbbba + bbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbba + baaaaaaaaaaaabbbbbbaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaaabbbbbbbbbaaaaabbbbbabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbababbbabbbbbbbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbababbbaabbabbbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbababbababaabbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbaabbabbbbaabbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaababbbbbbabbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbbaaababbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaababbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaababbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaabaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabaababaaaaaabaaaabbbbaabbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaababbabaaaaaabaaaabbbbaabbbbbbbaabbbbbbbbbbba + abaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbaaaabbbbbaabbbbbbabbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbabaaaabbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbababbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbaaaabbababbbbbbbbbbbbbbbbbba + abbaaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbabbbbbabbbbaaabbbbbbbbbbbbbbbbbba + abbbaaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaabbbbaabbbaaabbbbbbbbbbbbbbbbbba + bbbbbaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbaabbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbabaaabbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbabbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaaaababbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbabaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbaabbbbbaaabbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbaaabbaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbaaaaabbbbbbbababbaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbabbbbbbaaabbbbbbbbaaaaaabbbbbbaaaabbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaaaaabbaaaaabaababbbbbbbbbbbbaaaaabbbbbbbbbbaaabbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaaaabbaaaaabbabbbbbbabbaaabaaaaaabbbbbbbbbbbabbbbbba + bbaaabbbbbbbbbbbbbbbbaaabbbbbbaaaaaaabbaaaaaaaaaabbabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbaaaaaabbbbbaaaaaaaabbabbbbaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbba + abaaaaabbbbbbbbbbbbbbaaabbbbbbaaaaaaabbbabaaaaaaabbabbbaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbba + bbbbaaaabbbbbbbbbbbbbaaabbbbbaaaaaaaabbaaaabaaaaabbbbbaaaabbbbbbbbbaaaabbbbbbbbbbabbabbbba + bbbbbaaaaabbbbbbbbbbbaaabbbbbaaaaaaabbbbbaaaaaaaabbbbbaabbbbaaabbbaaaaabbbbbabbbbbbbabbbba + bbbbbbbbbabbabbbbbbbbaaabbbbbaaaaaaaabbbabaaaaaaabbbbaaabaaaaaabaaaaaaabbbbbbbbbbbbbabbbba + bbbbbbbbbbbaabbbbbbbbaabbbbbbbbbaaaaabaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaabbbbbaaaaaaaabaaaaaaaaaaaaaabbbbbbbbbbbbaaaabbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbaaaabbbabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbaaaabbbbbaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbababaaabbbbbbbabbbbbbbbbbbbbbbbb + abbbbbbbbbbaaabbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbabbbabbbbbbbbbbbba + abbbbbbbbbbaaabbbbbbaaabbbbbaaaabbbbbbbbbbbabbbaaaaaaaaaaaaabbbbbbbbbbbaaabbabbbbbabaaabba + abbbbbbbbbbaaaabbbbbaaabbbababaabbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbaaaabbaababbbbbaaabbba + abbbbbbbbbbaabbbbbbbaaabbbababaaaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbaabbbbbbbaabbbba + abbbbbbbbbbbbbbbabbbaaabbbabaaaaaababbaaaaaaaabbbaabbbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbaabbaaabbbaaaaaaaaaaaaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbababababbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbabbbbbbbbbbbabbbbbbbbbbbbbba + bbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbabbabbbbbbbbbbbbbba + bbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbba + bbbbbabbaaabbbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabaabbbbbbbbbbbbbaaaabbbbbbbbbbbbabbbabbbbbbbbbbbbbaaaaaaaaaabbbbbabbbbbbbbbbbabaabbbba + abbabbbbbbbbbbbbbbbbaaaabbbbbbbaabababbaabbbbbbbbbbbbbbbbbaaaaaaabbbaabbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbabbbbbbaaaabbbbaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabbbbbbaaaabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabaaaabaaaaabaaaabbbbbbba + abbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbb + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaababbabbbbbbbbba + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbabbbbbbaaaabbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaa + bbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaa + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaa + bbbbbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + bbbbbbbbbaaaaaaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaa + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbaabbbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbabbbbbbbbabbbbbba + baaaaaaaaaaaabbbbbbaaaaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaaaaabbbbbbbaaaaabbbbbabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbababbbbaabbbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbababbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbabbbbbbbbbbababbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbabbbaabbbbbaabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbabbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbabbbabbbbbbaaabbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbbbbaaabbbbbbbbbbbabbbbbbaabbaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbabbbbbbbaabaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbabbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabaaaababbbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaababbaaaaaaabaaaabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaaabbaaaabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbabaaaabbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbbbaaaabbaaabbbbbbbbbbbbbbbbba + abbaaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbba + abbbaaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbaabaabbbbbbbaabbbbaaabaaabbbbbbbbbbbbbbbbba + abbbbbbbbaababbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbabbbaaabbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaababbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbabbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbabbbbbbaaabbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabaaaaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabaaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbaaaaaaaaaaaaababbbbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbaaabbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabaabaaaabbaaaaaabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabbaaabbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbabbbbbba + bbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbaabbbbbaabaababbbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbba + bbaaaaaababbbbbbbbbbbaaabbbbbbbbaaaaaaaaaabbabbaabbabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbaaaaabbbbbbbbbbbbaaabbbbbbbaaaaaaaaaaaaaabbaaababbbbbbaaaaaaabbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbbbbaaabbbbbbaaaaaaabbaaaaaabbbabbabbbbbaaaaaabbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaabbbbbbbaaabbbbbbaaaaaabbbbbbaaabbbabbabbbaaaabbbbbbbbaaaabbbbbbbbbbabbabbbba + bbbbbbbbbbbbbabbbbbbbaaabbbbbbaaaaaaabbbabbaaabbaababbbaabbbbabbbbaaaaabbbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaabbaaaaaaabbabbbbaabbbaaaaabaaaaaabbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbbaabbbbbbbaaaaaaabbaaaaaaaaaaabbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbaaabaaaaaaabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbaabaaaaaaaabaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbaaaabbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbabbbbbbbaaabbbbbbbabbabbbbbbbbbbbbbb + abbbbbbbbbbbbbbabbbbaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbabbabbbbbbbbbbbbbb + abbbbbbbbbbbbbbabbbbaaabbbbbaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbaababbbbaabbabbbba + abbbbbbbbbbbbaabbbbbaaabbbbbabbbbbbbbbbbaaaaabaaaaaaaaaabbbbbbbbbbbbaaaabbaabbbbbaaaaaaaba + abbbbbbbbbbbbaabbbbbaaabbbbbabbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbaabbbbbbbaabbbba + abbbbbbbbbbbbbbbabbbaaabbbababaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbaabbaaabbbabaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbabbbaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbaaabbbbbabbbbaaabbbbabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbabaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbaaababbbbbbbbbbbaaabbbbbbbbbaabbbbbbbaaabbbbbbbbbbbaaaaaaaaabbbbbabbbbabbbbbbbbbbbbbba + abbababbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaabaabbbbbbbbbbbbbbbbbaaaaabbbaabbbbabbbbbbbbbbbbbba + abbbabbbbbbbbabbbbbbaaaabbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbaaabaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbb + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbabbbbbbaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbaaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + bbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaa + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaaabbbbbbbbbbbbaa + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbaa + baaaaaaaaaaaabbbbbbaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbaabbbbbba + aaaaaaaaaaabbbbbbbbaaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbababbbbaaabbbbbbbbbbbbbbbaa + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbababbbbaaabbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbabbbbbbbbbbababbbaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbabbbabbbbbbaabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbabbbbbbbbbbbbbbbaabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbabbbbaabbbbaaabbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbbbbaaaabbbbbbaabbbaabbbbaabbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbaabbaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbaabaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbaabbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbaaabaaaababbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaababbaaaaaabbaaaabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaaaabbaaabbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbaabbaaabbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbabbbbbbbbbbbbbaabaaaabbaaabbbbbbbbbbbbbbbbba + abbabaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbba + abbbbbabaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaababbbbbbbbbbbbbbbbbbaaabaaabbbbbbbbbbbbbbbbba + abbbbaabaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbabbbaaabbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbababbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbaaabbabbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbababaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabaaaaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabaaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbbaaaabbaaaaaaaaaaaaababbbbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbaaabbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaabbaaaaaaabbaaaaaabbbbbaaabaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbabbbbbba + bbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbabbbbbbaabaababbbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbba + bbaaaaaababbbbbbbbbbbaaabbbbbbbbaaaaaaaaaabbabbaabbabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbaaaaabbbbbbbbbbbbaaabbbbbbbaaaaaaaaaaaaaabbaaababbbbbbaaaaaaabbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbabbbbbbbbbaaabbbbbbaaaaaaabbaaaaaabbbabbabbbbbaaaaaabbbbaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaabbbbbbbaaabbbbbbaaaaaabbbbabaaabbbabbabbbaaaabbbbbbbbaaaabbbbbbbbbbabbabbbba + bbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaaaaabbbabbaaabbaababbbaabbbbabbbbaaaaabbbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaaaabbbaaaaaaabbabbbbaabbbaaaaabaaaaaabbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbbaabbbbbbbaaaaaaabbbaaaaaaaaaabbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbaaabaaaaaaabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbaabaaaaaaaabaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbaaaabbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbabbbbbbbaaabbbbbbbaababbbbbbbbbbbbbb + abbbbbbbbbbbbbbabbbbaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbaaaabbbbbbbbbbbbbb + abbbbbbbbbbbbbbabbbbaaabbbbbaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbaaabbbbbbabbbabbba + abbbbbbbbbbbbaabbbbbaaabbbbbabbbbbbbbbbbaaaaabaaaaaaaaaabbbbbbbbbbbbaaaabbababbbbbbaaabbba + abbbbbbbbbbbbaabbbbbaaabbbbbabbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbabbbaaabbbbbabaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbaabbaaabbbaaaaaaaabaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbabbbaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbaaabbbaaaaaabababbbbabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbabaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbaaabbbbbbbbbaabbbbbbbaaabbbbbbbbbbbaaaaaaaaaabbbbabbbbabbabbbbbbbbbbba + abbababbbbbbbbabbbbbaaaabbbbbbbbbbbbbbaabaabbbbbbbbbbbbbbbbbaaaaabbbaabbbbabbbabbbbbbbbbba + abbbabbbbbbbbaabbbbbaaaabbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbabbabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaababbbbbbbbb + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbba + abbbbbbbbbbbbabbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbaaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbaaa + bbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaaaabbbbbbbbbbaaaa + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbaa + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbbbbbbbbbbbbbaa + baaaaaaaaaaaabbbbbbaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbba + aaaaaaaaaaabbbbbbbbaaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbbbaaabbbbbbaabbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbbbababbbbbbaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbabbbbbbaabbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbabbbbbbbbabbbbaabbbbbaaaabbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaababbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbaaabbbbabaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbaabbaaabbaabbbbaaabbbbaabaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbabbaabbbaaabbbbaabbbbaabaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbaaabbababaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbabbbbbbbaabbbbaaabbabaaaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaabbbbbbababbaaabbaaaaaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbabbbbbbaababbbaaaaaaaaaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbabaabbaaaaaaaaaabbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaababbbbbbbbbbbbbbbba + abbbbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbbbabaabbbbbbbbbbbbbbbba + abbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbaaaaaaaabbbbbabaaabbbbbbaaaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaaabaaaaaaaababbbaaaaabbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbbaaaaaabbbbbbaaaabbbbbaaabbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaababbbbbaaabbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbba + abbabbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabaaaaabbbbabbbbbbbbbbbbbbbba + abbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbabbbbbbbbbbbbbbabbaaabbbbbabbbbbbbbbbbbbbbba + abbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbabaabbbaaabbababbbbbbbbbbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbaabbaababbbbbbbbbbbbbbbba + bbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbaaababaabbbbbbbbbbbbbbbbba + bbbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbbbaabbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbaaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbaabbbaabbbaabbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbaaabbbabbbbbbbbbbbabbbaabaaaabbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbabaaaabbbbbbbaaaabbbbbbbbbbbbbbbabbaaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbaabbbbbbbbbbbbbbbbbbbbaabbaabbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + aaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabaaaaaaaaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbaaaaaababbbbbbbbbaaabbbbbbbbabbbbbbbbaaabbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbabbaabbbabbbbbbbaaabbbbbbbbbbbbbbbbaaaabbaaabbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbaabbbbbba + bbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbaabbbaaaaaabbbbbaabaaaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbaaaaaaabaabbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaaaaaabbbbaaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbaaaaaaaaaaaabbbaaaabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbaaaaaabbbaababbbbaaaaabbbaaabbbbbbbbbbbabbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbbaaaaaabbbbabbbbbaaaaabbbbaaaabbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbbbbbbbabbabbbbabbbbbaaaaabbbaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbbbbbbbbabbaabbbabbbbaabaaaaaaaaaaabbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbbbbabbbaabbabbaabbbaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabaaaaaababbbabbaabbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaaaaaabbbabbabbbaaaaaaaaaaaaabbbbbabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaabbbbbbbaaaaabbaaaabbbbbbbbaaaabbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbbbaaaabbbbbabaaaabbaabbbbbbbbbbaaaabbbbabbbbbbbbb + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbbbaaaabbbbbaaaaabaabbbbbbbbbbbbbbaaabbbbabbaaabba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaabbbabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbaaaabbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbbbaabbaaaaaabbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbba + abbbbbbbbbbbbaabbbbbaaabbbbbbbbbbaaaabbbbabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbaaabbbbbaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaabbbbbbbaabbbbaaabbaaaaaaaaaaaaaabbbbbbbbbbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbaabbbbbbbbbaabbbaaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbaaabbbbbbbbbbbbbbbbbba + abbbbabbabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaababbbbbbbbbbbbbba + abbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbabbbabbbbbbba + abaaabbbbbbbbbabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbaaaababbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbabbbbbbbb + abbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbba + abbbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaa + bbbbbbbbbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbba + bbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaaaabbbbbbbbbbbba + bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbbbba + bbbaaaaaaaaaaaaaabbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbbbbbbbbbbbaabbbbba + baaaaaaaaaaaabbbbbbaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaaaabbbbbbbbaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbaaabbbbaaabbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabababbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaababbbbaaabbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaabbbbaaabbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabaabbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaaaaaabbbbaababbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbaaaaaabbbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbaaaaabbbbbbbaaaaabbbaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbaaabbbbaaabbbbbbbaaaaabbbaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbaabbbbbbbbbaaaabbbaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbaabbabbbbbbaaaabbbaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbaaaaaabbbbbbaaabbbaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbaaabaaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbbaaaaabbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaababbbbbbbbabbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabaabbbbbbaaaaabbbbabbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbabbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbaaaabbaaaaaaaaabbbaabbbbaabbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbaaabbabbaaaaaaababbbbbbaabbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbaaaaaaabbbabbbbaaabbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbaabbaabaabbaaaabaabbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbabbbaaaaaaaaaaaaaabbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbababbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaaaabaaaaabbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbaabbbbbaaabaaabbaaaaabbbaabbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbbabbbbbaabbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbaaabaaaabbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbaaaabbbbbbaabbbbbbabbbbbabbbbaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbaaabbbbbaabbbbabaaabbbbabbbbaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbabbabbbbbbbbbaaabbbbbaabbbbaaaaabbbbaabbaaabbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbaaabbbbaaabbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbaabbbbbabbabbbaaaaaaaabbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbaabbbbbbbbbbbbabbbbbbaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + aaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbbaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbbaaaaabbabaabbbbbaaaabbbbbbbbabbbbbbbbaaabaaaaaaaaaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbabaabbaabbbbbbbaaaabbbbbbbbbbbbbbbbbaaabaaaaabbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabaaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabaaaaaaabbaaaaabbbbabbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbabbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbaaaaabbbaaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabaaaaabbbbaaabbbbaaaaabbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabaaaaaaaabbbbaaabbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbaaabbbbaabbbaaaaabbbaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbbbbbaabbabbaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbbbbbbbaaabbabbaabbbaaaaaaaaaaaaabbbbbbabbbbabbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbaaaaaaabbbabbaabbaaaaaaaaaaaaabbbbbaabbbbaabbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaabbabbbabbaaaaaaaaaaabbbbbbbbaabbbbaabbabbbbb + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaabbbbbbbbaaaabbaaabbbbbbbbbbbaabbbbbabaabbbbb + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaabbbbaaaaabbbbbbaaaaaaabbbbbbbbbbbbbbaabbbbbbbaaaabba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaabbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbba + abbbbbbbbbbbbbbbbbbbaaabbbabbbbaaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaaabbaaaaaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaaaabbaaaaaaaaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbbbaaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaaaabbbbaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaabbbbbaabbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaabbbbbbbabbbbbbbbba + bbbbbbbbbbbaabbbbbbbaabbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbaaaaabaaaaaabbabbbbbbbbbbbba + bbbbbbbbbaaabbbbbbbbaabbbaaaabbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbbbbbbbba + bbbbbbbaaabbbbbbbbbbaabbbbbaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbba + bbbbbabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbba + abbaabbbbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaabbaabbbbbba + abbbabbbbbbbbabbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbb + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbabbbbbbba + abbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbabaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbababbbbbbbbbbbbbbbbbbbbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbabbbbbaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbababbbbbbbbbba + bbbbbbbbbbbbbbaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaabbbbbaaaabbbbbbbbbbbba + bbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaaaaaaaaaaabbaaaaabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbaabbbbbba + aaaaaaaaaaaabbbbbbbaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaaabbbbbbbbaaaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbabaaabbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbabaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbabaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbaaaaabbbbabaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabaabbbbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbabbbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbaabbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabaaaaaabbbbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbaaaababbbbbbaaabbbbaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbaaabbbbbbbbbaaabbbaaaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbaabbaabbbbbbaaaaaabaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbaaaaaaabbbbbbaaaababaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbbaabbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaababbbbbbbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaababbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbbbbabaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbabbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbaabbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaaaaaaabbaabbbabbbbbbbaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbaaaabbaaaaaaaaaaaaabbbababbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbabaaaaaaaaaaaabbbbabbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaabbbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaabbbaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbabbbabbbabbbabaaaaabbbaabbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbabbbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbbaaaabbaabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbaaabbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbaaaabbbbbaaaabbbbbbbbbbbaabbaaabbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbaaaabbbbbaaaaaaaaabbbbbbaabbbaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbbbaabbabbbbbaaaabbbbbaabbbaaaaabbbbbaabbbaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbaaabbbbbaabbbbaaaaaabbbaabbaaabbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbaaabbbbbaabbbbbbbaaaabbaaabaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbaaaaaaaaaaabbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbaaaabbbaabbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbababbbbbbabbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + bbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + aaaaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + bbbaaaaaabbbbbabbbbbaaabbbbbbbbbabbbbbbbbbaabaaaaaaaaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + bbbbbaaaabbaaabbbbbbaaabbbbbbbbbbbbbbbbbbaaabaaaaabbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbbbbba + bbbbbbbbbbbaababbbbbaaabbbbbbbbbbbbbbbbbaaaabaaaaabbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbabbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabaaaabbaaaaaabbbabbbbaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbabbbbbbaaabbbbbbbaaaaaaabbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbaaaabbbbaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabaaaaabbbbaaaabbbaaaaabbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaabbbbaabbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbaabbbbaabbbaaaaabbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbbbbbbaabbbbabbbaaaaaabaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbbbaabbaabbaabbbaaaaaaaaaaaaabbbaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbbaaabbaabbaabbaaaaaaaaaaaabbbbbbaabbabbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbaabaaabbaabbabbaaaaaaaaaaaabbbbbbbaabbbbabbbabbbbb + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabaaaaaaaabbbabbabbaaaaabbaaabbbbbbbbbabbbbbaaaaabbbbb + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaabbaabbbaaaabbaaabbbbbbbbbbbbbbbbbbbaaaaabbb + abbbbbbbbbbbbbbbbbbbaababbbbbbbbaaaaaaabbbaaaaaabbabbbaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbabbbbaaaaaaabbbbbaaaaabbbbaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbabbbbaaaaaabbbbbbaaaaaabbaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbaabbbbaaaaaaabbbbabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaabaaaaaaaaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaabbbbaaaaaaaaaaabbbbbbbaaabbbbbabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbbaabbbbbbbbbbabbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaabaaaaaaabaabbbbbbbbbbbba + bbbbbbbbbbbbbbabbbbbaabbbabbbbbbbaabbbbbbbbbbbaaaaaabbbbbbbbbbbaaaaaaaaaabaaabbbbbbbbbbbba + bbbbbbbbbbbbaabbbbbaaabbbaabbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbabbbbbbbbbbbba + bbbbbbbbbaaabbbbbbbbaabbbaaaabbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbba + bbbbbbbbaabbbbbbbbbaaabbbbbaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaabbbbbba + bbbbbabbbbbbbbbbbbbaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbbbba + abbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbbaaaaabbbbbba + abaabbbbbbbbbbabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbababbabbbbbbbbbbbbbbbbbbbbaaabbbbbb + abbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbabbbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbabaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbabbbbbaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbabbbbbbbbaa + abbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaababbbbbbbbbba + bbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbbbbbbbbbba + bbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaaaaaaaaaaabbaaaaabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + aaaaaaaaaaaabbbbbbaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaaabaabbbbbbbbaaaaabbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaabaabbbbaabaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaabaabbbbaabaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaabbbbaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbaababbbbbaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabaabbbbbbbbaaaabbbbbabaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbaabbbabbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbabbbbbbbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbbbaaabbbabbbbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbaaabbbaaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbaaabbbbaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbaaabbaaaaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbaabbabbbbbbaaabaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbaabaabbbbbbbaaaaabaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbaabbabbbbbbbbaaaabbbabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbabaabbbbbbbbaaabbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbaabbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbabaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaabbbbbbaaaabbbbbbbbbbbbbbbaaaabbaaaaaaaaabbabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbaaaaaaaaaabaabbabbbbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaabbbabbbbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaaaaaaabbbbbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaaaaaaaaaabbbaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaabbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbaabaabaaaaaaaaaaaaaabbbabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaabababbbbbbbbbbbbbbbbaaabbaabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbabaabbbbbbbbbbbbaaabaaabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbbbbbaaaaabbbbaaaaabbbbbbbbbbaaabbaaabbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbaaabbbbbbbbaabbbbbbbbaaaabbbbbaaaaaaaabbbbbbbaaabaaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbaaabbbbbbbaabaabbbbbbaaaabbbbaaabbaaaaabbbbbbaabbaaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbaaaabbbbaaabbbbaaaaabbbbaaabaabbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbaaaabbbbaaabbbbbbbaaaabbaaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbabbbbbbaaabbbbaabbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbaaabbbbaabbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbaaaabbaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbba + bbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + baaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + aaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabaaaaaaaaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbba + abbaaaaaaabababbbbbbaaabbbbbbbbbbbbbbbbbaaaabaaaaabaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbbbbba + bbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbbbbaaaabbaaaabbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaaaaaaaabbbbaaaaaabbaaabaaaaabbbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbbbbbaaababbbbbbabbbbbbbaaaaabbaabbbbbaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbbaaaabbbaaaabbbbbaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabaaaaaabbbbaaabbbbaaaaabbaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabaaaaaaaaabbbaaabbbaaaaabbaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbaaababbaabbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbbbbbbbbaabbbbabbbaaaaabaaaaaaabbbbaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbbbbbaabbaabbabbbaaaaaaaaaaaaabbbbaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbbbbbbbbabbbabbaabbbaaaaaaaaaaaabbbbbaaabbbabbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbbbaaaaaabbbabbbabbaaaaaaaaaaabbbbbbbbaabbbaabbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabaaaaaaaabbbabbbabbaaaabbaaabbbbbbbbbbabbbbbabaaabbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaabbaaabbbaaaabaaabbbbbbbbbbbbbbbbbbbbaaaaabba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaababbaaaaabbbabbaaaaababbbbbbbbbbbbbbbbbbbbbbbbbabbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaabbbbaaaaabbabbaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbabbbbaaaaaabbbbbbaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbaabbbbaaaaaabbbbbaaaaaaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaaabaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaaaabbbbaaaaaaaaaaabbbbbbaaabbbbabbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbabbbbaaabbbbbbbbbabbbbbbbbbbbbabbbaaaaaabbbbbbbbaabaaabaabaababbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbaaaaaaaaabbbabbbbbbbbbbbbba + bbbbbbbbbbbaabbbbbbaabbbbaabbbbbaaaaaaaaaabaaaaaaabbbbbbbbbbbbbbbaaaaaaabbbabbbbbbbbbbbbba + bbbbbbbbbaaabbbbbbbaabbbaaaaabbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbba + bbbbbbbbaabbbbbbbbbaabbbbbaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbba + bbbbbabbbbbbbbbbbbbaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbaaaaaaabbbbbba + abbaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbaaaaaabbbbbba + abaabbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaababaabbbbbbbbbbbbbbbbbbaaabbbbbb + abbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbabababbbbbbbbbbbbbbbbbbbabbbbbbba + abbbbbbbbbbbabbbbbaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbaaaaabbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbaaaaabbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaabbbaabbbbbbbaa + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaabbbbbbbbbbbba + bbbbbbbbbbbbbaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + baaaaaaaaaaaaaabbbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaaaaaaaabbbbbbaaaabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaaaabaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbaabbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbaaabbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbba + abbbbabbbbabbbbbbbbbbbbbbaaabbbbbbababbbbaaaaaabbbbaaabbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbaababbbbbbbbbbbbbbbbaaabbbbaaababbbbaaaaaabbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbbbbaaabbbbababbbbbbaaaaaabbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbaaaaabbbaaaaabbaaaabbbbbbbbbbbbbbbbbbba + abbbbaababbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbaaabbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbaabbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbbbbbbabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbb + abbbbbbbabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbaaaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbb + abbbaababbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbaaaabbbbbbbbbbaaaaaabbbbbbbbbbbbb + abbbbbababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaabbbbaaaaaaabbbbbbbbbbbaaaaaabbbbbbbbbbbb + abbbbaababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbaaaaaaaaaabbbbbbbbbbbaaaaaabbbbbbbbbab + abbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaabbbaabbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbabba + abbbbbababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbba + abbabaababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbb + abbabbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbb + abbabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbb + aaaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbaaaaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbaaaaabbaaabbbbbbbbbbbbbbbaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbaaaabbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbaabaaaabaaaaabbbbbbbbbbbaaaababbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbaabbbbaaaaaaaaabbbbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbbaabbbbabbaaaaaaaabbbbbbbbbaaabbbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbbbaaaaaaabbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbaaaaaaaabbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbaaaaaaaaaabbabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbababba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbabba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbabbb + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbabba + abbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaa + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbaabbaa + bbbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaabbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaabbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbabbaaabbbbbbbbbbbbbbbbbbbaaabbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbaababbaaabbbbbbbbbbbbbbbbbbbaaabababbbba + abbaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbaababbaabbbbbbbbbbbbbbbbbbbbaaabbbabbbba + bbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbaabbaabbbbbbbbbbbbbbbbbbbbbbabbaaabbba + abbbaaaaabbabbbbbabbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbabbababbbbbbbbbbbbbbbbbbbbbbbaaaaaaaa + abbbbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbabbabbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + abbbabbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbabbbbaaabbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbab + abbbbbbbbbbbabbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbab + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbaaabbbbaababbbbbbbbbbbbbbbbbbbbbbbbbbab + bbbaabbbaaaaaabbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbaaaabbbbbbbbbbaaabbbbbbabbbaaaaabbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbaabbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbabbbbbbbbba + bbbbaaaabbbbaabbbbbbbbbbaaabbbbabbbbbaaaabbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaababbbaabbbbbbbbbbaabbbbbabbbbbaaaabbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbaabbbbbaabbbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbabbbbbbbbbbaaabbbbabbbbaaaaaabbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbbbbaaabbbabbbbbaaaabbbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbbbbaabbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbaabbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbaabbbbaabbaaababbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbaaaaaabbbbbaabbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbababbbbabbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbaabbbbbbaabbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbababbbbabbbbbbbbbbbbbbbbbbbbb + baabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaaabbbbbbbbbbaaabbbbabbbababbbaabbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbabbbbbbabbbbbaabbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbaaabbbbbbaaabbbbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabaaaabbbbaaaaabbbbbbbbaabbaaabbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbaabbabbbbbbbbbbbbbbabbbbbbbba + abbbbaabbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbaabbabbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbabbaaaabbabbbbbbaabbaabbbbbbbbbbbbbbbbbbbbbbb + bbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaaabbabbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbb + bbbaabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbb + bbbbabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaaabbababbbbabbaaabbbbbbbbbbbbbbbbbbbbbbb + bbbbabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbabbaabbbbbbaabbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbaabaabbbbbbabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaababbbbbbbaabaaabbbbbaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbaaabbbbbabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbaaabbbbbabbbbbbbbbbbbbbbbbba`, + map `abbbbaabbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbaaabbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbaaaaaabbbbaaabbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbaaaaabbbaaaaabbaaaabbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbba + abbbbbabbbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbaaaaabbbbaaabbbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbba + abbbbbaabbbbbbbbbbbbbbbbbaaabbbbabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbba + abbbbaaabbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbba + abbbbbabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbb + abbbbababbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbb + abbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbaaaabbbbbbbbbbaaaaaabbbbbbbbbbbbb + abbbbbbabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaabbbbaaaaaaaabbbbbbbbbbaaaaaabbbbbbbbbbbb + abbabaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbaaaaaaaaaabbbbbbbbbbbaaaaaabbbbabbbbab + abbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaabbaaabbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbabaa + abbbbbababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbaababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbba + abbabaababbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbb + abbabbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbb + abbabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbb + aaaababbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbabbbbbbbaaabbbbbabbbbbbbbbbaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbaaaaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbaaaaabbaaabbbbbbbbbbbbbbbaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbaaaabbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbbaabaaaabaaaaabbbbbbbbbbbaaaababbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbaabbbbaaaaaaaaabbbbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbbaabbbbabbaaaaaaaabbbbbbbbbaaabbbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbbbaaaaaaabbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbaaaaaaaabbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbaaaaaaaaaabbabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbababba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbabba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbabbb + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbabba + abbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaa + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbaabbaa + bbbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaabbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaabbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbabbaaabbbbbbbbbbbbbbbbbbbaaabbbabbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbaababbaaabbbbbbbbbbbbbbbbbbbaaabababbbba + abbaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbaababbaabbbbbbbbbbbbbbbbbbbbaaabbbabbbba + bbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbaabbaabbbbbbbbbbbbbbbbbbbbbbabbaaabbba + abbbaaaaabaabbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbabbababbbbbbbbbbbbbbbbbbbbbbbaaaaaaaa + abbbbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbabbabbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + abbbabbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbabbbaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbaaabbbbaababbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbaaaaaabbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbaaabbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaababbbaabbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaabaabbaabbbbbbbbbbaaabbbbabbbbbaaaabbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbbbabbbbbbbbbbaabbbbbabbbbbaaaabbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbaabbbbbaaabbbbbbbbbaaabbbbabbbbbaaaabbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbabbabbbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbaabbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbaabbbaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbaabbbaabbbaaababbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbaaaaabbbbbaabbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbababbbbabbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbabbbbbbbaabbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbababbbbabbbbbbbbbbbbbbbbbbbbb + baabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaaabbbbbbbbbbaaabbbbabbbababbbaabbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbabbbbbbabbbbbaabbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbaaabbbbbbaaabbbbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabaaaabbbbaaaaabbbbbbbbaabbaaabbbbbbbbbbbbbbbbbbbbba + bbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbaabbabbbbbbbbbbbbbbabbbbbbbba + abbbbaabbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbaabbabbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbabbaaaabbabbbbbbaabbaababbbbbbbbbbbbbbbbbbbbb + bbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaaabbabbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbb + bbbaabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbb + bbbbabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaaabbababbbbabbbaabbbbbbbbbbbbbbbbbbbbbbb + bbbbabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbabbaabbbbbbaabbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbabbaabbbbbbabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaababbbbbbbaabaabbbbbbabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbaaaabbabbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaabbbbaaabbbaabbabbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbaaaabbabbbbbbbbbbbaabbbbbbbabbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbba + abbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaabbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaabbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbba + abbaababbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbbbbb + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbaaabbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbb + abbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbb + abbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaaaaaaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbb + abbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbb + abbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabaaaabbbbbbbbabbbbbbbbbaaaaabbbbbbbbbbbbbbbbb + abbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaabbbbbaaaaaaabbbbbbbbbbaaaaabbbbbbbbbbabbba + abaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbbbaaaaaaaabbbbbbbbbbaaaaaabbbbbbbbbbbbba + abaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbbbaaabbaaabbbbbbbbbbbaaaaaabbbbabaabbbbb + abbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbaaaaaabbbbabbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbabbbbaaaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaaabbbbbbbbbbbb + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbaaaababbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbaaaaaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbaaaaabbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbaaaaabbbaaaaaabbbbbbbbbbbbbaaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbaabbbbbaaaaaaaabbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaabbbbbbbaaaaaabbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbaaaaaabbbbbbbbbbbaaaabbbaabbbbba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbaaaabbbbbbbbbbbaaaabbbababbbba + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbaaaaaaabbbbbbbbaaaabbbaaabbbba + abbbabbbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbaaaaaaaaabbbbbaaabbbbbabbbba + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbaaaaaaaababbbabbbbbaaabbbba + abbbabbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbaaaabbbbbaabbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbabbbba + abbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbaaabba + bbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbabbb + bbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbaabb + abbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaba + abbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaba + abbabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaa + abbabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbaaaabbab + bbbaababbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaabbbaabbbbab + abbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaabbbaabbbbab + abbbbaaaabbbbbbbbbbbbbaabbbbbbbaaabbbbaaaabbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbaaabbbaabbbbab + abbbbbbaabbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbaabbbbabbbbaa + abbbabbaabbbbbbbbbbbbbaabbbbbbbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbabbbbaa + abbbabbbbbbaabbbbbbbbbaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbababaabbbaaa + abbbbbbbbbbaabbbbbbbbbaabbbbbbabbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaa + bbbabbbbbbbbabbbbbbbbbaabbbbbbabbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaba + bbbaabbbaaaaabbbbbbbbbaabbbbbbaabbbbbaaaabbbbbbbbbbabbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabba + bbbbbaabaaaaabbbbbbbbbaabbbbbbaabbbbbaaaabbbbbbbbbbabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabba + bbbbbaabbbbaabbbbbbbbbaabbbbbbabbbbbaaaaabbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaabba + bbabbaaaabbaabbbbbbbbbaabbbbbbabbbbbaaaaabbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbaabbbbbbbbbaabbbbbbabbbbbaaaabbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaabbbbaabbbbbbbbbaabbbbbbabbbbbaaaabbbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbabbbbbabbbba + bbbbbbbbabbbabbbbbbbbbaabbbbbbabbbbbaaaaabbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbabbbbbbbbbaabbbbbbbbbbbbaaaaabbbbbbbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbaaabbbaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbababbaaabbbbbbbbbbbbaaaaabbbbbbbbaabbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaaabbbbbbbbaaabbbaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaababbbbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbba + bbabbbbbbbbbbbbbabbbbaaabbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbaaaabbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaababbbbbbaaabbabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaabbbbbbaaabbabbbbbbaabbaabbabbbbbbbbbbbbbbbbbaaaa + bbbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaabbbbabaabbabbbbbbbaabbabbbbbbbbbbbbbbbbbbaaaaaaa + bbbaabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbaaaaabbabbbbbbbaabbabbbbbbbbbbbbbbbbbbbaaaabb + bbbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbabbbbbaaaabbabbbbbbbabbbaaabbbbbbbbbbbbbbbbbaaaabb + bbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbabbaaaabbabbbbbbbabbbaabbbbbbbbbbbbbbbbbaaaabbb + bbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaaabbbbbbbbbbababaabbbbaabbbbbbbbbbbaaaabbb + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaababbbbbbbbaaabaabbbbaabbbbbbbbbbbaaaaabb + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaababbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaabb + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaababbbbbabbbaabbbbbbbbbbbbbbbbbbbbbaaaaaa + abbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaababbbbaabbbaabbbbbbbbbbbbbbbbbbbbbaaaaaa`, + map `abbbaaabbabbbbbbbbbbaabbbbbaabbbbbbaaaabbabbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbaaabbbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbabbbbaabbaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbabbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbabbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbaabbbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaabaaabaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbabbbbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbbabbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbaabbbbbbabbbbbbbaaaabbbbbaaabbbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbaababbbbbbbbbbbbbbbbbbbbbbbbbb + ababbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaabaaaabbbbbaaaabaabbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaabaabbbbbbbbbbbbbbbbbbbbbbbbb + ababbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaabaabbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbaababbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaabbbbbaaabbbbbbabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + ababbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbb + aaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbbba + aaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbabbbbbaaaaaabbbbbbbbbbbbbbbbbbabbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbaaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbaaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbabbbbbbbaaaaaabbbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbaaabbbbbbbbaaaaaabbbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbbabbbaabbbbb + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaaaaabbbbbbbbbaaaaaabbbbbbaabbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbbbbaaaaaaaabbbbbbbbbbaaaaaabbbbbabbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbaaaaaaaaaaaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbabaaaaaaaabbbbbbbbbbbbbaaaaaabababbbbbbbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbabbbaaaabaabbbbbbbbbbbbbbaaaaaaaaabbbbabbbba + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbaaabbbbbbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbaaabbbbbbbbbbbabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbabbbbbaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba + abbbbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba + abbbbaabbbbabbbbbbbaaabbbbbbbbbabbbbbbaabbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + abbbbabbbbbbbbbbbbbaaabbbbbbbbbabbbbbbaabbbbaaaaabbbaaaaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbb + bbbbbaabbbbbbbbbbbbaaabbbbbbbbbabbbbbaaaabbbaaaabbbbbbaaaaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbaaabbbbbbbbaaaaaabbbbbbbbbbbaaaaabbbbbbbbbaaba + abbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbaaabbbbbbabbaaaaabbbbbbbbbbbaaaaabbbbbbbbbaaaa + abbbabbbbbbbbbbbbbbaaabbbbbbbbabbbbbbaaaabbbaaabbbbbbbbbbaaaaaabbbbbbbbbbaaaabbbbbbbbaaaba + abbbbbbbbbbbbbbbbbbaaabbbbbbababbbbbbaaaaabbaaabbbbbbbbbbbaaaaabbbbbbbbbbaaabbbbbbbbbbabba + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaababbaaabbbbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbbbbabbb + bbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbaaaaaaabbbbbbaaaabbbbbbbabbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbaaaabbbaaabbbbbbbbbbbbbbaaaaaaaabbbbaaaabbbbbbaabbbbb + abbbbbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbaaabbbbaaabbbbbbbbbbbbbbaaaaaaaaabbbaaabbbbbbbaabbbba + abbabbbbbbbbbbbbbbbaaabbbbbbbbabbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbaaabbba + abbabbbbbbbbbbbbbbbaaabbbbbbbaaabbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbaabbbba + bbbabbabbbbbbbbbbbbaaabbbbbbbbabbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbabbbba + abbbaaabbbbbbbbbbbbaaabbbbbbbbabbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaabaaa + abbbaaaaabbbbbbbbbbaabbbbbbbbbbbbbbbaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaab + abbbabbaabbbbbbbbbbaabbbbbbbabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaabb + abbbbbbaabbbbbbbbbbaabbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaabaaabb + abbbbababaabbbbbbbbaabbbbbbaaabbbbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbbbaabbbabbb + abbbbabbbbabbbbbbbbaabbbbbbaaabbbbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbbbabbbbabbb + bbbabbbbbbabbbbbbbbaabbbbbbbaabbbbbaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbbabbbbabbb + bbbabaaaaaabbbbbbbbaabbbbbbbbbbbbbbaaaaababbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabaabbbbabbb + bbabbbbbbaabbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbabbababbbbaabb + bbbbaabbbaabbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaabaabbbaaaaa + bbabaabbbabbbbbbbbbaabbbbaaabbbbbbbaaaaababbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaaabaabbbaaaaa + bbbbbabbbabbbbbbbbbaabbbbaabbbbbbbaaaabbbabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbabaaaaaaaaaaa + bbbbbbbbbabbbbbbbbbaabbbbaaabbbbbbaaaaabbabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaa + abbbbbbbabbbbbbbbbbaabbbbbbbbbbbbbaaaababbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbaaaaaabbba + abbbbbbbabaabbbbbbbaabbbbbbbbbbbbbaaaababbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbb + bbbbbbbbabbbbbbbbbbaabbbbbbbbbbbbbaaaabbbbbbbbabbbbaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbabbbba + bbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbaabbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbabbbbbbbbbbabbbbaaabbbbbbbbbbbbbaaaaabbbbbbbaabbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbaaaabaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbaabbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbabbbbbbbbbbbbbbaaabbbbbabbbbbbaaaabbbbbbbaaaabbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbbbbbaaabbbbbabbbbbbaaaabbbbbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbbbbbbbaaabbbbbabbbbbbaaaabbbbbbaaaabbbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbba + bbbaabbbbbbbbbbbbbaaabbbbbabbbbbbaaaabbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbba + bbbbabbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabaa + bbbbabbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaa + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbaaaababbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaaa + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbaaaababbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbaa + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbaaaababbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbaaaababbbbbbbabbabbbbbbbbbbbbbbbbbbbbaaabbbbbba`, + map `abbaabbbbabbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbaaabbbbabbbbbaaaabbbbbbbaaaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaabbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaaaaaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbabbbaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + aabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbabbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbabbbbbaaaabbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaababbbbbbbbbbbbbbbbbbbbbbabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbaabbbbaaaabbbaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbaaabaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaabbabbbbbbbbbbbbbbbbbbbaabbbabbb + bbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abaabbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbb + bbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbaaaaaaaaaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbaaaaabbbbaabbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbbbbaaaaaabbbaaabaabbbaabbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaaabbaaaaaabbaaabbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbabbbbbbbbbbbbaaaaaaaaabaaaaaaaabbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbabbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaabbbbbaaaabbbbbaabbaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabbbbaaaaababbbbbbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbaabbbbbbbbbbbbbaaaabbbaabaaabbbbbbbbbbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbba + abbbbaabbbbbbbbbbaabbbbbbbbbbbbbaaaaaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbba + abbbbabbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbba + bbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbba + abbbabbbbbbbbbbbaaabbbbbbbbabbbbbbaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbbba + abbbabbbbbbbbbbbaaabbbbbbbbabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbabbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbababbbbaaabbaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbabbbbbbaaaaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbba + abbbabbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaabaaaabbbbbbbbb + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbaaaabbaaabbbbaabba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbaaaaaaaaaaabaaaaaaabbbbbbbbbbbbbaaaabbaaabbbbabbba + bbbbbabbbbbbbbbbaaabbbbbbbaabbbbbaaaabbbaaaaaababbbbbbaaaaaaabbbbbbbbbbbaaaabbbbabbbbbbbba + abbbbabbbbbbbbbbaaabbbbbbbabbbbbbaaaabbbaaaaabbbbbbbbbbabaaaabbbbbbbbbbbaaaabbbbbbbbbbbbba + abbaabbbbbbbbbbbaaabbbbbbbabbbbbbaaaabbbaaaaabbbbbbbbbbbabaaaaabbbbbbbbbaaaabbbbbbbbbbbbba + abbabbbbbbbbbbbbaaabbbbbbbabbbbbbaaaabbbbaabbbbbbbbbbbbbbbaaaaabbbabbbbbaaaaabbbbbbbabbbba + bbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaaabbbbbbaabbbba + abbabbbbbbbbbbbbaaabbbbbbaabbbbbbaaaabbbbaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbaaaabbbbbbaabbbba + abbaaabbbbbbbbbbaaabbbbbbaaabbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbaaabbbbbabbaabbbba + abbaaabbbbbbbbbbaaabbbbbbaaabbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbabbbba + abbaaabbbbbbbbbbaaabbbbbbaabbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbaabbbba + abbaaabbbbbbbbbbaaabbbbababbbbbbaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbabbbba + abbaabbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbabbbba + bbbaabbbbbbbbbbbaaabbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbba + bbbaabbbbbbbbbbbaaabbbbabaabbbbbaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaabba + bbaaaababbbbbbbbaaabbbbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbba + bbbaabbbbbbbbbbbaaabbbbbbbbbbbbbaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaaabbba + abaabbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbaabbabbbba + abbbbbbbbababbbbaaabbbbbbbbbbbbbaaaabbbbbbabbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaabbbaabbbabbbba + bbbbabbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbaabbbabbbba + bbababbbbbbabbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaabbbaabbbabbbba + bbabbbbbbaaabbbbaaabbbbbbbbbbbbaaaababbbbbbbbbbbbbbbabbbbabbbbbbbbbbbbbbbbaabbbabbbbaabbaa + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbabbbaaabbbbbbbbbbbbbbbbbbbaabbbabbbbaaaaaa + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaa + abbabbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbbabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaba + bbbabbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbba + bbbaabbbbbbbbbbbaaabbbbbabbbbbbaaaabbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbba + bbbaabbbbbbbbbbbaaabbbbbabbbbbbaaaabbbbbbbabbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbba + bbbaabbbbbbbbbbbaabbbbbbbbbbbbbaaaabbbbbbbaabaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbba + bbbbabbbbbbbbbbbaabbbbbbbbbbbbbaaaabbbbbbaaabbabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbabbbbbbbbbbbaabbbbbbbbbbbbbaaaabbbbbaaaabaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbbbbaaaabbabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaabbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaabbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaabbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbaabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbaaabbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbaabbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbaabbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbabbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbaaaaaaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaabbabbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbbaabbabbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaababbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbaaaaaabbbbbbaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbabbbabbbbbbabbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbaaabbbbbabaaaabbbbbbbbbbbbabbbbbbbbbbaaabbbaabbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbaaaabbbbbbbbaaaabbbbbbbbbbbabbbabbbbbbbbbbbbbbabbbb + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaabaaaaaaaabbbbbbaaaaaaaaaabbbbbabbbabbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaaabbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbbbbbbbbabbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbababbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbabbbbbbbbbbbabbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaaababbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbabbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbba + abbbbabbbbbbbbbaaabbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbba + abbbbabbbbbbbbbaaabbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaaaaabbbbbbabbbbbbbba + bbbbbabbbbbbbbbaaabbbbbbbbabbbbbaaaaaaaaaaaaaaaaaabbbaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbabbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbba + abbbabbbbbbbbbbaaabbbbbbbabbbbbbaaaabbaaaaaaaaaaaabababbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbba + abbbabbbbbbbbbbaaabbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbabbbbbba + abbbbbbbbbbbbbbaaabbbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + abbbabbbbbbbbbbaaabbbbbbbabbbbbbaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbabbbbbbaaaabbaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbabbbbbbaaaabbbaaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + abbbbabbbbbbbbbaaabbbbbbaabbbbbbaaabbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbb + abbbbbabbbbbbbbaaabbbbbaaabbbbbaaaabbbbaaaaaaaaaaaaaaaaababbbbbbbbbbbbbbbbaaaabbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbabbbbbbaaaabbbbaaaaaaaaabbaaabbabbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabaaa + abbabbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbaa + bbbaabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbba + abbaabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbaaaaaaaabbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbabbbbbbbba + abbaabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbabbbbbbbba + abbaabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbaaabaaaaaabbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbba + abbabbbbbbbbbbbaabbbbbabbbbbbbbaaaabbbbbbbbaaaaaaabbbbbbbbbaaaaaaaabbbbbbbaaabbbbbbaabbbba + abbabbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbbbbbaaaaaaaaabaaaaaaabbbbbbaaabbbba + abbaaabbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbaaaaaaaaaaaaaaaaaabbbbbbaaabbbba + abbaabbbbbbbbbaaabbbbbbaabbbbbaaaaabbbbbbbbbbbbaaaaaaabbbaaaaaaaaaaaaaaaaaaabbbbbbbaaabbba + abbaabbbbbbbbbaaabbbbbaaabbbbbaaaaabbbbbbbbbbbbbaaaaaabaaaaaaababbaaaaaaaaaabbbbbbababbbba + bbbaabbbbbbbbbaaabbbbbabbbbbbbaaaaaabbbbbbbbbbbbbbaaaaaaaaaabbbbbbbabbbbaaaabbbbbbbbbbbbba + bbbaabbbbbbbbbaaabbbbbbbbbbbbbaaaaabbabbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbba + abbaabbbbbbbbbaaabbbbbbbbbbbbbaaaaabbabbbbbbbbbbbabaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbba + bbbabbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbaabbbbbbaaaaaaba + bbabbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaa + bbaabbbbaabbbbaaabbbbbbaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbaaaaaabbaa + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbaaaaabbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaababbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaabbaabbbabbbba + abbabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbaabbbabbbba + bbbabbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbaabbaa + bbbaabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabaabbbaaaaaa + bbbaabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbabbbaaaaaa + bbbaabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbaaaaaaaaa + bbbbabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbb + bbbbabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabaabbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbb`, + map `abbaabbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbaaaaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbaaabbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbabbbbb + abbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbabbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaababbbbaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbabbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbb + abbbabbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbabbbbbabbbbbbbbbbbbbba + abbbabbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaabbbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbabbbbbaabbbbbbbba + abbbabbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaaaaabbbaaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaaaaaaaabbbbbbabbbaabbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaaabbbbbbbbbaaaaaaaaaaaabbabbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaabbbbbbbbbaaabbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbababbbabbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbabbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbabbaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbabbbbb + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabaaaabbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabaaabbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaabaaaaaaaaaabbbabbbbbbbbbbbaaaaaaaabbbaabbbbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbaaaabbabbbbaaabaaaaaaaaaaabbaabbbbbbbbbbbaaaaaaabbbaabbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbabbbbaaaabbabbbbaaabbabbbaaaaaabbabbbbbbbbbbbbbaaaaaaabbaabbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaabbbaabbaaaabbbbbbabbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabaabbbbaaabbbabbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbabbbbbbb + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbaaaaaabbbbbbbaabbbbbbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbababbbbbbbbbaaaaaabbbbbbaabbbbbbbbbbbaaaabbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaaabbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaababbbbbba + bbbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabaabbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbba + abbbbbbbbbbbbbaaabbbbbaabbbbbaaabaabbbbaaabbbaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbb + abbbbbbbbbbbbbaaabbbbbaabbbbbaaabaabbbbaaabbbaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbb + abbabbbbbbbbbbaaabbbbbabbbbbbaaaaaabbbbaaabbbbbbbbbbbbbbaaaaababbbbbbbbbbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbba + abbabbbbbbbbbbaaabbbbbbabbbbbbaaaaabbbaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbba + bbbaabbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbbaaabbbbbaaabbbbbaaaaabbbaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbb + abbaabbbbbbbbbaaabbbbbbaabbbbbaaaaabbbaaaaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbb + abbaabbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbaaabbabbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbaaaabbbbbbbb + abbabbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbaaaabbbbbbbba + abbabbbbbbbbbbaaabbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbaaabbbbbabbba + abbaaabbbbbbbbaaabbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaabbbbbbabbba + abbaabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbaabbba + abbabbbbbbbbbbaaabbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbbbabbbba + bbbaabbbbbbbbbaaabbbbabbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaaabbbbbabbbba + bbbaabbbbbbbbbaaabbbbbabbbbbbbaaaabbabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaaaaabbbbbbbbbba + abbabbbbbbbbbbaaabbbbabbbbbbbbaaaabbaababbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabaabbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbabbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaaabbbbbbbbbba + bbababbbbbbbbbaaabbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbbaabbba + bbabbbbbbbbbbbaaabbbbbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbaaaaaba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaabbaaaabbbbaaaaaaa + abbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbabbbbbbbbbabbbbbbbbbbbaaaaabbbbaaaaabbbbaaabbbaaaabbba + abbabbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbabbbaaabbbbbbbbbbbaaaaaabbbaaaaabbbbbaabbaaaabbbba + bbbabbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbaabbbaabbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaaabaabbbbbba + bbbaabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbaaabbbaabbbbbbbbbbbbbbaaaaaaaaaabbbbbbaaaaaabbbbbbaa + bbbaabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbaaaabbbaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbaaabbbbbbaaaaa + bbbaabbbbbbbbaaabbbbbbbbbbbbbaaaababbaaabbbbaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbaaabbbbbbaaaaa + bbbbabbbbbbbbaaabbbbbbabbbbbbbaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaaaaaaaa + bbbbabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaba + abbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbba + abbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaababbbbbbb + abbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb`, + map `abbaabbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbabbbba + abbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbaaaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbabbba + abbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbabbbbbaaabbbbbbaaaaabbbbbabbbbbaabbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbabbbbbaaabbbbbbaaaaabbbbbabbbbbaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbabbbbb + bbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbabbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbaaabbbbbbbbbaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaabbbbbbbbbaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaababbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbabbbbabbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbabbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbbaaaabbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbabbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaabbbbbbbbbaaabbbbbbbbbbbbb + abbbbabbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbba + abbbbabbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaababbbbbbbabbbbbbbbbbbbba + abbbbabbbbbbbbaaabbbbbbbbbbaaaabbbbbabbaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbabaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbb + abbbbabbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabaaaabbbbbbbbb + abbbaabbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaabbaabbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaabaaaaaaaaaabbbabbbbbbbbbbbaaaaaaaabbbabbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbaaaabbabbbbaaabaaaaaaaaaaabbaabbbbbbbbbbbaaaaaaabbbabbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaabbaabbaaaaaabbabbbbbbbbbbbbbaaaaaaabbabbbbbbbbba + abbbabbbbbbbbbaaabbbbbbbbbbbaaaabbabbbbaaabbbaabbaaaabbbbbbabbbbbbbbbbbbbaaaaabbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbaaaabaabbbbaaabbbabbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbaaaaaabbbbbbbabbbbbbbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbababbbbbbbbbaaaaaabbbbbbabbbbbbbbbbbbaaaabbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbaaaaababbbbbba + abbbbbbbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbabbbbbbbbaaabbbbbbabbbbbaaabaabbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabaabbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbba + abbbbbbbbbbbbbaaabbbbbaabbbbbaaabaabbbbaaabbbaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbb + abbbbbbbbbbbbbaaabbbbbabbbbbbaaaaaabbbbaaabbbaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbb + abbbbbbbbbbbbbaaabbbbbabbbbbbaaaaaabbbbaaabbbbbbbbbbbbbbaaaaababbbbbbbbbbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbba + abbabbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbba + bbbaabbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbbaaabbbbbaabbbbbbaaaaabbbaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbb + abbaabbbbbbbbbaaabbbbbbabbbbbbaaaaabbbaaaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbb + abbaabbbbbbbbbaaabbbbbbabbbbbbaaaaabbbaaabbabbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbaaaabbbbbbbba + abbababbbbbbbbaaabbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbaaabbbbaabbba + abbaaabbbbbbbbaaabbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaabbbbbbbbbba + abbaabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaaaabbbbbaabbba + abbabbbbbbbbbbaaabbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbbbabbbbb + bbbaabbbbbbbbbaaabbbbabbbbbbbbaaaabbbbababbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaaabbbbbabbbbb + bbbaabbbbbbbbbaaabbbbbabbbbbbbaaaabaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaaaaabbbbbbbbbba + abbabbbbbbbbbbaaabbbbababbbbbbaaaaabaababbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaabbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbabbabbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaaaaaabbbbbbabbba + bbababbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbbbabbba + bbabbbbbbbbbbbaaabbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbbaaaaba + bbbbbbbbbbbbbbaaabbbbabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaababaaabbbaaaaaaaa + abbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbabbbbbbbbbbbaaaaabbbbaaaaaabbbaaabbbaaaabbba + abbabbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbabbbaaabbbbbbbbbbbaaaaaabbbaaaaabbbbbaabbaaaabbbba + bbbabbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbaabbbaabbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaaabaabbbbbba + bbbaabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbaaaabbbaabbbbbbbbbbbbbbaaaaaaaaaabbbbbbaaaaaabbbbbbaa + bbbaabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbaaaabbbaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbaaabbbbbbaaaaa + bbbabbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbaaabbbbaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbaabbbbbbaaaaa + bbbbabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaaaaaaaa + bbbbabbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaba + abbbbbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabba + abbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaababbbbbbb + abbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbaabbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbaaaabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbabbbba + abbbbbbbbbbbbbbaaabbbaaaaabbabbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbbbaaabbbaaaabbbabbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbbbaabbbbaaaaabbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbbbaabbbbaaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbbbbbbbbbbbaabbbbaaaaabbbbbbbbabbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbba + abbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbbaabbbbbaaaaababbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + bbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbbbaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbaaaaabbabbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbaaaabbabbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbaaaabbabbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbaaaabbabbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbaaaaababbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbaaabbbbbbaaaaababbbbbbbbbbaabbbaaaaaaaabbbbbbabaabbbbbbbbbbabbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbaaaaababbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbaaaaaaabbbbbbbbbbaabbbbbbbbaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbaaaaaaabbbbbbbbbaaaaaabbbbaaaaabbbabbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbaaabbbbbbaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbbbbaaaaaaabbbbbbbbbaaabbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbbbaaabbbbbbaaaaaaabbbbbbbbbbaabbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbbbbbbaabbbbbbbaaabbbbbaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbbbbbbaaaaaaaaaaabbbbbbbaaaaabbbbbbbbbbbabbbabbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbbaaaaaaaaaaabbbbbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbbaaaaaaaaaaaabbbbbbbbaaaabbbbaaaaaaaaaaabbbbbbbbbbb + abbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbbaabbbbbbaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbb + abbbabbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbbaabbbbbbbaaaabbbbbbbbbaaaaaaaaaaaabbbbaaabbbbbbbbb + abbbbaabbbbbbbaaabbbbbbbaaaaaabbbbbbbbbaaaabbbbbaaaaabbbbbbbbaaaaaaaaabbbbbbbbbaabbbbbbbba + abbbbabbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbaaaaaabbbbbbbbbbbaabbbbbbbba + abbbbabbbbbbbbaaabbbbbbbaaaaaaabbbbbabbbaaaaaaaaaaaaabbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaa + abbbbabbbbbbbbaaabbbbbbbaaaaaaabbbbbabbbaabbbbbaaaaaaabbbbbbbbbbaaaaabbbbbbbbaaaabbbbbbbaa + abbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbbbbbbaabaabbbbabaaaabbbbbbbbbbaaaaabbbbbbbaaaabbbbbbbba + abbbabbbbbbbbbaaabbbbbbbbaaaaaabbbabbbbbaaaaaabbbbaaaaaaabbbbbbbbbbaabbbbabbaaaaabbbbbabba + abbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbaabbbbaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbb + abbbabbbbbbbbbaaabbbbbbbbaaaaaabbbabbbbbaaaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaabbbba + abbbbbbbbbbbbbaaabbbbbbbbaaaaabbbbbabbbbaaaaaabbbbbbaaaaaaabbbbbbbbbaaabbbaaaaaaaaaaabbbba + abbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbabbbbaabaaabbbbbbaaaaaaaabbbbbbbbaaabbbbbbaaaaaaaabbbba + bbbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbabbbbaabbbabbbbbbbbaaaaaabbbbabbaaabbbbbbbbbbbaaaaabbba + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbaabbbabbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbaaabba + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbabbbbbaabbbabbbbbbbbbbbaaaabbbbbabbbbbbbbbbbbbbbbbbaabbb + abbbabbbbbbbbbaaabbbbbbbbbaaaaabbaabbbbaaabbbabbbbbbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbbbaabbb + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbaabbbbaaabbbabbbbbbbbbbbaaaaaabbbbbbbbaaaaaaabbbbbbaaabba + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbaabbbbaaabbbabbbbbbbbbbbbbaaaaabbbbbbbaaaaaaaabaabaaaaaba + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbaaabababbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaaaabaaaabba + abbbbabbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbaaabbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaaaabbbbaaaabba + bbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbabbbbbaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbbababbbbbbbbaaaabba + bbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbaabbbbaaabbbabbbbbbbbbabbbbbaaaaabbbbbaabbbbbbbbbbbaaabba + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbaabbbbaaabbbaabbbbbbbbabbbbbbbbaaabbbbbabbbbbbbbbbbaaabbb + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbabbbbaaabbbaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbb + abbbbabbbbbbbbaaabbbbbbbbbaaaaabbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaabbbbbbbbbaaaba + abbbbbbbbbbbbbaaabbbbbbbbbaaaaabbaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbaabbbbbbbbbaaaba + abbbbbbbbbbbbbaaabbbbbbbbbaaabbbbaabbbbaaabbbbbbbbbbbabbbbbbbbbbbaaaaaaabbbabbbbbbbbbaaaba + bbbaabbbbbbbbbaaabbbbbbbbbaabbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaabbbbbbbbbaaaba + abbaabbbbbbbbbaaabbbbbbbbaaaaabbbaabbbbaabbabbbbbbbbbbbbbbbbbbbbbbbbaaaaaababbbbbbbbbaaaba + abbaabbbbbbbbbaaabbbbbbbbaaaaabbbaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbaaaabb + abbabbbbbbbbbbaabbbbbbbbbaaaaabbbaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaba + abbaabbbbbbbbbaabbbbbbbbbaaaaabbbabbbbbabbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaba + abbbaabbbbbbbbaabbbbbbbbbaaaaabbbbbbbbbabbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabba + abbbabbbbbbbbaaabbbbbbbbbaaaaabbbabbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabba + abbbabbbbbbbbaaabbbbbbbbbaaaaabbbabbbbaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaabba + abbbabbbbbbbbaaabbbbbbbbbaaaaabbbabbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabbbb + bbbaabbbbbbbbaaabbbbbbbbbaaaaabbbabbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaabbbb + bbbaabbbbbbbbaaabbbbbbbbbaaaaabbbbbabaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbaaaaabbba + abbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabbbba + bbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaabbba + bbabbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbba + bbabbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbaaba + bbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabaaaaaa + abbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaaaaaba + abbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaaaaaabbb + bbbaabbbbbbbbaaabbbbbbbbbaaaaabbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaaaaabbbbbb + bbbabbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbba + bbbabbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaababbbaaaa + bbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbaaaa + bbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbbabaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaaaaaaa + bbbbbbbabbbbbaaabbbbbbbbbaaabbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaa + abbbbbbabbbbbaaabbbbbbbbbaaaabbbabbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaaabbbb + abbbbbbabbbbbaaabbbbbbbbbaaaabbbabbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabababbbbb + abbbbbbabbbbbaaabbbbbbbbbaaaabbbabbbbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbabbbbbaaabbbbbbbbbaaaabbbabbabaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbba + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbba + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbaabbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbba + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbabaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbaabaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbabbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbba + abbbbbbbbbbbbbaaabbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbaaaaabbbbbbbbbbbbbbbaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaabbaaaabbbbbabbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbaaaaabbbbbbbbbbbbbbbbaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbaabbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + bbbbbabbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbabbbbbbbbaabbbaaaabbbbbbabbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbaabbbaaaaabbbbbabbbbbbbabbaabbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbaabbbbaaaabbbbbabbbbbbbabbaaaaaaaaaaaaabbbbbabbabbbbbbbbbbbabbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbaaaabbbbbabbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbaaaabbbbbabbbbbbbbbbaabbbaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaaabbbaaaabbbbbabbbbbbbbbbabbbbbbbbbaabbbbbbbbaaabbbbbabbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbbaaabbbaaaabbbbbabbbbbbbbbbaabbbbbbbbaabbbbbbbbaaaaaabbaabbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbbaaabbbaaaabbbbbabbbbbbbabbaaaaabbbbaaabbbbbbaaaaaaaaaaabbbbbbbbbbabbbbbbbbba + bbbbbabbbbbbbbaabbbbaaaabbbbaabbbbbbbabbaaaaaaaaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbba + abbbaabbbbbbbbaabbbbaaaabbbbabbbbbbbbabbaaaaaaaaaaaabbbaaaaabbbbbbaaaabbbbbbbbbbbbbbaaabba + abbbbabbbbbbbbaabbbbaaaaabbbabbbbbbbbabbabbbbbbbbaaabbbaaaabbbbbbbaaaaabbbbbbbbbbbaaaaaaaa + abbbaabbbbbbbbaabbbbaaaaabbbabbbbbbbbabbaabbbbbbbaaabbbaaaabbbbbbbbaaaaabbbbbbbbaaaaaaaaaa + bbbbaabbbbbbbbaabbbbaaaabbbbabbbbbbbaabbaabbbbbbbaaabbbaaaabbbbbbbbbaaaabbbbbbbaaaaaaabbba + bbbbbabbbbbbbbaabbbbaaaaabbbabbbbbbbaabbaaaaaabbaaaabbbaaaabbbbbbbbbaaaaabbbbbaaaaabbbbbbb + abbbbbbbbbbbbbaabbbbaaaaabbbabbbbbbbbabbaaaaaaaaaaaabbbbaaaabbbbbbbbbaaaabaaaaaaaabbbbbbbb + abbbbbbbbbbbbbaabbbbaaaabbbbaabbbbbbbbbbaaaaaaaaaaabbbbbaaaabbbbbbbbbaaaaaaaaaaabbbbbbbbbb + abbbabbbbbbbbbaabbbbaaaabbbbaabbbbabbbbbaabbbbbbaaabbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbbbbbbb + abbbbbbbbbbbbbaabbbbaaaabbbbaabbbbabbbbbaabbbbbbaaabbbbbbaaaaabbbbbbbbaaaaaaaaabbbbbbbbbba + abbbbbbbbbbbbbaabbbbbaaaaaabaabbbbbbbbbbaaabbbbbaabbbbbbbbaaaabbbbbbbbbaaaaaabbbbbbbbbbbba + abbbbbbabbbbbbaabbbbaaaaaaabaabbbbbbbbbbaaaaaaaaaabbbbbbbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbba + abbbbbbabbbbbaaabbbbbaaaaabbaabbbbbbbbbbaaaaaaaaaabbbbbbbbbaaaaabbbbbbbbbaaaabbbbbbbbbabaa + bbbbbbabbbbbbaaabbbbbaaaaabbaabbbbbbbbbbaabbbbbaabbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbabbbaaaa + bbbbbaabbbbbbaaabbbbbaaaabbbaabbbbbbabbbaabbbbbabbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaaa + abbbaaabbbbbbaaabbbbbaaaaabbaabbbbbbabbbaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaabbbbaaaaaaa + abbbbbabbbbbbaaabbbbbaaaaabbaabbbbbbabbbaaaaaaabbbbbbbbbbbbbbaaaaaabbbaaabbbbbabbbbbaaabbb + bbbbbbbbbbbbbaaabbbbbaaaaabbaabbbbbbabbbaaaaaabbbbbbbbbbbbbbbbaaaaabbbaaaabbbbabbbbbbbbbbb + bbbbbabbbbbbbaaabbbbbaaaaaabaabbbbbbabbbaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbabbbbbbbbbbbbbbbb + abbbbabbbbbbbaaabbbbbbaaaabbabbbbbbbabbbaabbbabbbbbbbbbbbbbaababaaaabbbbbbbbbbbbbbbbbbbbba + abbbbabbbbbbbaaabbbbbbaaaabaabbbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbba + abbbbabbbbbbbaaabbbbbbaaaaaaabbbbbbbabbbaabbbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaaaabba + abbbbabbbbbbbaaabbbbbbaaaaaaabbbbbbbabbbaabaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaa + abbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbabbbaabaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbabaaaaaaabba + bbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbb + bbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbbbbbbbabbababbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbabbbbbbb + abbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbabbbbbbb + abbbbababbbbbaaabbbbbbbbaaaaaabbbbbbbbbaabbbaabbbbbbbbbbabbbbbbbbbbbaaaaabbbbbbbbbaabbaabb + abbbbbbbbbbbbaaabbbbbbbaaaaaaabbbaabbbbaaabbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaaabb + abbbbbbbbbbbbaaabbbbbbbaaaaaaabbbaabbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaabaaaabb + abbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbbbbbbaaabbbbabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbaaaba + abbaabbbbbbbbaaabbbbbbaaaaaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbaaaaaaa + bbbaabbbbbbbbaaabbbbbbaaaaaaaaabbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbaaaaa + abbaabbbbbbbbaaabbbbbbaaaabaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbbbbb + abbaabbbbbbbbaaabbbbbaaaaabbaaabbaabbbbaabaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbbbb + abbbaabbbbbbbaaabbbbbaaabbbbbaabbaabbbbabbabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbb + abbbaabbbbbbbaaabbbbbaaaabbbbaabbbabbbbabbbabbbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaaaaabbbbbbbbb + abbbabbbbbbbbaaabbbbaaaabaaaaabbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaabbbabbbba + abbbbbbbbbbbbaaabbbbaaabbaaaaabbbbbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbba + abbbaabbbbbbbaaabbbbaaabbabaaabbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaababbbbb + bbbbaabbbbbbbaaabbbbaaabbaaaaabbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaababbbaaaaaaabbbbb + bbbbbbbbbbbbbaaabbbbaaabbaaaaabbbbbbbbaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbba + abaabbbbbbbbbaaabbbbaaabbaaaabbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbba + bbabbbbbbbbbbaaabbbbaaabbabaaabbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaabbbbba + bbabbbbbbbbbbaaabbbbaaaababaabbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaabbbbbb + bbbbbbbbbbbbbaaabbbbaaaabaababbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaabbbbbb + bbbbbbbbbbbbbaaabbbbaaaabaababbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbb + abbbbbbbbbbbbaaabbbbaaaabaabbbbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + bbbbbbbbbbbbbaaabbbbaaaabaababbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + bbbaabbbbbbbbaaabbbbaaaaabbbabbbbbbaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaa + bbbabbbbbbbbbaaabbbbaaaaabbbabbbbbaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaa + bbbbabbbbbbbbaabbbbbaaaaabbbabbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabb + bbbbaabbbbbbbaabbbbbaaaaabbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbb + bbbbbabbbbbbbaaabbbbaaaaabbbbbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaabbbbb + bbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabbba + abbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaa + abbbbbbbbbbbbaabbbbbaaaaaaabbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaa + abbbbbbbbbbbbaabbbbbaaaaaaabbbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbba + abbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbba + abbbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbb + abbbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbba`, + map `abbabbbbbbbbbbabbaaaabbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbabbaaaabbbbbbbbbbbbbabbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbaaaabbbbbaaabbbbbbbbbaaaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + abbbbbbbbbbbbbabbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + abbbbbbbbbbbbbabbaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + abbbbbbbbbbbbbabbaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaabaaaaaabbbbbabbbbbbbbabaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbaabaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbbb + abbbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbb + abbbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbabbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbabbaaaaaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbb + abbbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbabbbbbbbaaabaaaaabbbbbbbbbbbbbbbbbbaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + abbbbabbbbbbbaaabaaaaaabbbbbbbbbbbbbbabbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbb + bbbbbabbbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + bbbbbabbbbbbbaabbaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbaabbbaaabaaaaabbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbaabbaaaaabbbbbbbbbbbbbbbabbaabbbbbbbbbaaabbbbbaaabbbbbbbbbbbabbbbbbbbbbbbbbba + bbbbbabbbbbbbaabbaaaaabbbbbbbabbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbaabbaaaaabbbbbbbabbbbbbbbbbaaaaabbbbbaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + bbbbaabbbbbbbaabbaaaaaabbbbbbabbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbba + bbbbabbbbbbbbaabbaaaaaabbbbbbabbbbbbbabbaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbba + bbbbbbbbbbbbbaaabaaaaaabbbbbbabbbbbbbabbaabbbabbbaaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbba + abbbbbbbbbbbbaaabaaaaaabbbbbbabbbbbbbabbabbbbbbbbbaabbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbba + abbbbabbbbbbbaaabbaaabbbbbbbabbbbbbbbabbaabbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbaaaaabbbbbbbbba + abbbbabbbbbbbaaabbaaabbbbbbbabbbbbbbbabbaaaaaaabaaaabbbbbbbbbbbbaaaabbbbbbbaaaaabbbbbbbbba + abbbbabbbbbbbaaabbaaaabbbbbbabbbbbbbbabbaaaaaaaaaaaabbbbbbbbbbbbaaaabbbbbbbbaaaaabbbbbbbba + abbbbabbbbbbbaaabbaaaabbbbbaabbbbbbbbabbabbbaaaaaaaabbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbba + abbbbabbbbbbbaaabbaaaabbbbbabbbbbbbbbabbabbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbba + abbbbabbbbbbbaaabbaaabbbbbbbabbbbbbbbbbbaabbbbbbbaabbbbbbbbbbbbbbbaaaaabbbbbbbbaaabbbababa + bbbbbbbbbbbbbaaabbaaaabbbbbaabbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbaaba + abbbbbbbbbbbbaaabbaaaaabbbbabbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbaabaaaabbbbbbbbbaaaabbaaabb + abbbbbbbbbbbbaaabbaaaaabbbbaabbbbbbbbabbaaaaaaaaaaaabbbbbbbbbbbaabaaaabbbbbbbbbaaaaaaaaabb + abbbbbbbbbbbbaaabbaaaabbbbbaabbbbbbbbaabaabbbaaaaaabbbbbbbbbbbbbabbaaaabbbbbbbbbaaaaaaaaba + abbbbbbbbbbbbaaabbaaaabbbbbaabbbbbbbbaababbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaabbb + bbbbbbbbbbbbbaaabbaaaabbbbbaabbbbbbbbabbaabbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaabbbb + abbbbbbabbbbbaaabbaaaaabbbbaabbbbbbbbbbbaaaaabaaaabbbbbbbbbbbbbaabbbbaaaabbbbbbbbbbaabbbba + abbbbbbabbbbbaaabbaaaaabbbbaabbbbbbbbbbbaaaaaaaaababbbbbbbbbbbbaabbbbaaaaabbbbbbbbbbbbbbba + abbbbbbabbbbbaaabbaaaaabbbbaabbbbbbbbbbbabbbbbaababbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbaaaaabbbbaabbbbbbbbbbbabbbbbbababbbbbbbbbbbbbabbbbbbaaabbbbbbaaabbbbabbb + abbbbbbbbbbbbaaabbaaaaabbbbaabbbbbbbbbbbaaaaabbbbabbbbbbbbbbbbbabbbbbbaaaabbbbaaaaabbbbbbb + abbbbbbbbbbbbaaabbaaaaabbbbaabbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbaaabbbbbbbb + abbbbbbbbbbbbaaabbaaaaabbbbbabbbbbbbbbbbaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbbbbbbbba + abbbbbbbbbbbbaaabbbaaaabaabbabbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbba + bbbbbbbbbbbbbaaabbbaaaabaabbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbba + bbbbbabbbbbbbaaabbbaaaabaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbbbbbbbbbbba + abbbbabbbbbbbaaabbbaaaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaaabbbbbbbbbbbba + abbbbabbbbbbbaaabbbaaaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbbbbbbbba + bbbbbabbbbbbbaaabbbbaaaaabbaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abbbbbbbbbbbbaaabbbbaaaaabbaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbb + abbbbbbbbbbbbaaabbbbbaaaabbaabbbbbbbbbbbabaababbbbbbbbbbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbbbbbaaabbbbbaaaabbaabbbbbbbbbbbabaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbaaaaabbbbbbbaba + abbbbbbbbbbbbaaabbbbbaaaabbaabbbbbbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaba + bbbabbbbbbbbbaaabbbbbaaaabbaabbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + abbababbbbbbbaaabbbbaaaaabbaabbbbbbbbbbaaabbabbbbbbbbbbbbbbbbbbbbaaabbaaaaaabbaaaabbbbbbba + abbbabbbbbbbbaaabbbaaaaaabbaabbbbbbbbbbaaaabbbbbbbabbbbbbbbbbbbbbaaabaaaaaaaaaaaaaaabbbbba + abbbaabbbbbbbaaabbaaaaaaabbaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbaaaaabbbbb + abbbaabbbbbbbaaabbaaaaaabaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbbaaaaabbbb + abbbabbbbbbbbaabbaaaabbaaaaaabbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbaaaaaabbb + abbbbbbbbbbbbaabbaaaababaaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaabbbbaaaaabbb + bbbabbbbbbbbbaaaaaaabbbbbbaaabbbbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbaaaaabb + abbaabbbbbbbbaabaaaabbbbbbbaabbbbbbbbbbabbbabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbaaaabb + bbbabbbbbbbbbabbaaaabbbbbbbaabbbbbbbbbbabbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbaaaaaa + bbaabbbbbbbbbabbaaaabbbaaaaaabbbbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbaaaabbbbbbbaaaa + bbaabbbbbbbbbabbaaaabbbaaabaabbbbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbaaaa + bbbbbbbbbbbbbabbaaaabbbaaabaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaababbbbbbbbabb + abbbbbbbbbbbbabbaaaabbbaaababbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbb + abbabbbbbbbbbabbaaabbbbaaabbbbbbbababbabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbab + bbbaabbbbbbbbabbaaabbbbaaabbabbbbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbabaa + bbbaabbbbbbbbabbaaabbbbababbbbbbbbbbbbabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaa + bbbbbbbbbbbbbabbaaabbbbababbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaa + bbbbbbbbbbbbbabbaaabbbbababbbbbbbbbabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaa + bbbbbbbabbbbaabbaaabbbbababbbbbbbbaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + bbbbbbbabbbbaabbaaabbbbababbbbbbbaaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + abbbbbbabbbbbabbaaabbbbabbbbbbbbbabaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbba + abbbbbbbbbbbbabbaaabbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbb + abbbbbbbbbbbbabbaaabbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbabbaaabbbbbbbbbbbbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaba + abbbbbbabbbbaabaaaabbbbbbbbbbbbbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbabbbbaabaaaabbbbbbbbbbbbbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbbbbbabbbbaabaaaabbbbbbbbbbbbbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbbbbbabbbbaabaaaabbbbbbbbbbbbbbbbbaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaabaaaabbbbbbbbbbbbbbbbbaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaabaaaabbbbbbbbbbbbbbbbbaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbabaaaaabbbabbbbbbbbbbbbbaabaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbabbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbabbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbb + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbabbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbbbbbbbbbbbbabaaababbbbabbbbbbbbabbbbaaaaaaaaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbba + abbbbbbbbbbbbbabaaababbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaaabbbbbbbbbbbbbbbaaaaabbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaaaabbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaabaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaababbbbb + abbbbbbbbbbbbbabaaabaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaabaaaabbbbbbbabbbbbbbbbbbbbbbbaababbbbb + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbabbbbbaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbabbaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbb + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbba + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabbbbbaabbbbbbbba + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbaabbbbbbbba + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaaabbbbbabbbbbbbba + bbbbabbabbbbbaabaabbaabbbbbbbabbbbbbbabbaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbba + bbbbbbaabbbbbaabaabbaabbbbbbbabbbbbbbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbaabbbbbaabaaabaabbbbbbbabbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaabaaaaaabbbbbbbabbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbba + bbbbbbbbbbbbbaabaaaaaaabbbbbbabbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbba + abbbbbbbbbbbbaabaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbba + abbbbbbbbbbbbaabaaabaabbbbbbbbbbbbbbbaabaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabba + abbbbbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbaababbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaaaba + abbbbbbbbbbbbaabaaabbbbaaabbbbbbbbbbbaababbbbbbbbbaababbbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaaa + abbbbbbbbbbbbaabaaabbbbaaabbabbbbbbbbabbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaa + abbbbbbbbbbbbaabaabbbbbababbabbbbbbbbabbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaa + abbbbabbbbbbbaabaaabbbbbbaabbbbbbbbbbbabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaa + bbbbbabbbbbbbaabaaaabbabbaabbbbbbbbbbaababbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaa + abbbbaabbbbbbaabaaaabbbbbabbbbbbbbbbbabbabbbbbbbbaabbbbbbbbbbbbaabbbbbbbbbaaaaabbbbbbbbbaa + abbbbaabbbbbbaabaaaabbbbbabbbbbbbbbbbaabaabbbbbbbaabbbbbbbbbbbbaabbbbbbbbaaaaaabbbbbbbbbba + abbbbaabbbbbbaaaaaaabbbbbaaabbbbbbbbbaabaaaaabbbaaaaabbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbbbaa + bbbbbaabbbbbbaaaaaabbbbbbaaabbbbbbbbbaabaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbaaaaabbbbbbbba + bbbbbaabbbbbbaaaaaabbbbbbaabbbbbbbabbabbaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbbbaaaaabbbbbbbba + abbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbabaaabbbbbbbba + abbbbbbbbbbbbaaaaaabbabbbaabbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbba + abbbbbbbbbbbbaaaaaabbbbbbaabbbbbbbbbbbbbaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbabaaabbbbbbbba + abbbbabbbbbbbaaaaaabbbbbbaabbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbb + bbbbbabbbbbbbaaaaaabbabbbaabbbbbbbbbbbbbabaaaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbb + bbbbbabbbbbbbaaaaaaabbbbbbaabbbbbbbbbbbbabbbbbbababbbbbbbbbbbbbabbbbbbbbbbbbbbaaaaabbbbbbb + abbbbbbbbbbbbaabaaabbbbbbbbabbbbbbaabbbbabaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbbbbbbbbaabaaaabbbbabbabbbbbbaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbbbbbbbaabbaaabbbbabbabbbbbbabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbbaabbaaabbbaabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbb + abbbbbbbbbbbbaabbaaaabbbabbbbbbbbbbbbbbbaaaababbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbb + abbbbbbbbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaaaabbbbb + abbbbbbbbbbbbaabbbaaaabbbbbabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbb + abbbbbbbbbbbbaabbbaaaaabbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbaabbbb + abbbbbbbbbbbbaaabbaaaaabbbaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbb + abbbbbbbbbbbbaaabbbaaaabbbaabbbbbbbbbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbb + abbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaaabb + abbaabbbbbbbbaaabbbaaaabbbaabbbbbbbbbbbabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + abbbabbbbbbbbaaabbbbaaaabaaabbbbbbbbbbbaabbaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbabbaaaaaaaba + abbbabbbbbbbbaabbbbaaabaaaaabbbbbbbbbbbaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaab + abbbaabbbbbbbaabbaaaabbaaaaabbbbbbabbbbaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbaabaabbaabbbbaaaaa + abbbbabbbbbbbaaaaaaaabbaaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaababbbaaaa + abbbbbbbbbbbbabaaaaabbbaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbabbbbbbbbbbbbbaaaaaaaaaabbbaabbbbaa + bbbbbbbbbbbbbabaaaaabbbaaaaabbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbabbbbbbb + abbbbbbbbbbaaabaaaaabbbaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbabbbba + abbbbbbbbbbaaabaaaaabbbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbba + abbbbbbbbbbaaabaaaaabbbaaaaabbbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbba + abbbbbbbbbbaabbbaaaabbbbaaaabbbbbbbbbbabbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbba + bbbbbbbbbbbaabbbaaaabbbbbbaabbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbba + bbbbbbbbbbbaabbaaaaabbbbbbaabbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaabbbbbbbba + bbbbaabbbbbaabbaaaabbbaaabbbbbbbbbbbbbabbbbaabbbabbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbba + bbbbbabbbbbaabbaaaabbbaaaaabbbbbbababaabbbbaabbbabbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbba + bbbbbbbbbbbaabbaaaabbbabaabbabbbbabaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbabbbbbba + bbbbbbbbbbbaabbaaaabbbabaabbbbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbba + abbbbbbbbbaaabbaaaabbbbbbabbbbbbbbbabaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbaabbbaaaabbbbbbabbbbbbbababaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbba + abbbbbbbbbaabbbaaabbbbaababbbbbbaaaabaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbaabbbaaabbbbaaaabbbbbbabbabaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbaabbbaaabbbbbababbbbbbbbbabaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbaabbbaaabbbbbababbbbbbbbbababbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbaabbbaaabbbbbabbbbbbbbbbbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbaaabbbaaabbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbaaaaabbbaaabbbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbabbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbaabaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbabbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabaaaaabbbabbbbbbbbbbbbbaaaabbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaabbbbbbbbbbbbbaabbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabba + abbbbbbabbbbbaabaaaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbaabbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbaabbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbbbbbbabbbbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbbbbaabbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaabaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbaabbbbbaabbbbbbbba + bbbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaabaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaabaaaabbbbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaababbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbaabbbbbbbba + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbaababbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbabbbbbbabbbbbbba + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbaababbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbba + abbbbbbbbbbbbaabaabaabbbbbbbbbbbbbbbbaabaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbba + bbbbbbbbbbbbbaabaaaaaabbbbbbbabbbbbbbbabaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbabbbbbaabaaaaaabbbbbbbabbbbbbbbabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbabbbbbbbba + abbbbbbabbbbbaabaaaaaabbbbbbbabbbbbbbbaaabbbbbaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbabbbbbbbaababbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbabbbbbbbaabaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaabaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbabbbbbbaabaaaaabbbbbbbbbbbbbbbbaabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbaabbbbbbaabaaaabbbbbbbbbbbbbbbbbaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbabbbbbbbaabaaabbaabbabbbbbbbbbbbaababbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbabbbbbbbaabaaabbaabbabbbbbbbbbbbaababbbbbbbbbaababbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaba + abbbbabbbbbbbaabaaaababbbabbbbbbbbbbbabbaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabb + abbbbabbbbbbbaabaaaabaabaabbbbbbbbbbbbabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbb + bbbbbbbbbbbbbaabaabbbbbbaaabbbbbbbbbbaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbb + abbbbbbbbbbbbaabaaaabbbbbaabbbbbbbbbbaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbb + abbbbbbbbbbbbaabaabbbbbbbabbbbbbbbbbbaababbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbb + bbbbbabbbbbbbaaaaabbbbbbbaabbbbbbbbbbaababbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaabb + bbbbbabbbbbbbaaaaabbbbbbbaabbbbbbbbbbaabaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabb + bbbbbabbbbbbbaaaaabbbbbbbaabbbbbbbabbabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbababbbbbbbbbbb + abbbbabbbbbbbabaaabbbbbbbaabbbbbbbbbbabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabaaabbabbbbaabbbbbbbbbbabbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + bbbbbabbbbbbbabaaabbabbbbaabbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbb + abbbbabbbbbbbabaaaababbbbaabbbbbbbbbbabbabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbabbbbbbbabaaaababbbbaabbbbbbbbbbbbaaaaaaabaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbb + abbbbbbbbbbbbabaaaabbbbbbabbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbabaaaabbbbbaabbbbbbbbaabbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbabaaaabbbbbabbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbabaaaabbbbbabbbbbbbbbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabaaaabbbbbabbbbbbbbbabbbbaaaaaaabaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabaaaabbbbbabbbbbbbbbbbbbbaaaaaaaababbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbaaaaaabbbbbbabbbbbbbbbabbbaaaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbaabaaaabbbbbbabbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaaabbbbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + bbbbbaabbbbbbaabbaaabbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabbbaabbbbbbabbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbabbbbbbbbbaabbaaabbbbbbabbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbaabbaaaabbbbaabbbbbbbbbbbbabbaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabaaaaaabbbbaabbbbbbbaabbbabbbaabbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbaaaabaaaaabbbbbaabbbbbbbabbbbaabbaabbbbbbbbbbbbaabbbbbbbbbabbbbbbabbbbbbbbbbbbba + abbbbbbbbaaaabbaaaaabbbbbaabbbbbbbbbbbbaabbbaabbbbbbbbbbbabbbbbbbbbbbbbbbabaabbbbbbbbaaaba + abbbbbbbaaaabbbaaaaabbbbbaabbbbbbbbbbbbaaabbbbabbbbbbbbbbabbbbbbbbbbbbbbaaaaaaaababbbbbbba + abbbbbbbaaaabbbaaaaabbbbbaabbbbbbbbbbbbaaaaabaabbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaababbbbbbba + abbbbbbbaaaabbbaaaaabbbbbbabbbbbbbbbbbaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbaabbbbaaaaaaaabbbbb + abbbbbbbaaaabbbaaaaabbbabaabbbbbbbabbbabaaabbbbbbbbbbbbbaabbbbbbbbbbbbbaabbbbbaaaaaaabbbbb + bbbbbbbbaaaabbbaaaaabbbabaabbbbbbbabbbbbaaabbbbbbbbbbbbbabbbbbbbbbbbbbaabbbbbbaaaaabbbbbbb + bbbbbbbaaaaabbbaaaaabbaabaabbbbbbbabbabbbaabbbbbbbbbbbbaabbbbbbbbbbbbbaaabbbbbbaaabbbbbbbb + bbbbbbbbaaaabbbaaaaabbaaaaabbbbbbbaababbbbabbabbabbbbbbabbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbb + bbbbbbbbaaaabbbaaaabbbbaaaabbbbbbbaababbbbbbbabbbbbbbbaabbbbbbbbbbbbbaaaaabbbbbaaabbbbbbbb + abbbbbbaaaaabbbaaaabbbbbaaabbbbbaaabbabbbbbaaabbbbbbbbabbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbba + abbbbbbaaaaabbbaaaabbaabaaaabbbbaaabbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbabbbbbba + abbbbbbaaaaabbbaaaabbbaaaaaabbbbaaaababbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbaaaaaabbbbabbbbbba + abbbbbbaaaaabbbaaaabbbaaaaabbbbbababaabbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbaaaaabbbaaabbbbbaaaabbbbbabbbaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbaaaaabbbaaabbbbbaaaabbbbbabbbaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbaaaaaabbbaaabbbabaaabbbbbbababaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbaaaaaabbbaaabbaaaaabbbbbbbabaaaabbbbbbaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaaaaaaabbbaaabbbabaabbbbbbbabaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaaaabbbaaabbaabbbbbbbbbbababaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaaaabbbaaabbbbbbbbbbbbbbabababbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaaaaabbbaaaabbbbabbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaaaaabbbaaabbbababbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbaaaaaaaaabbbaaabbbabbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaabbbaaabbbabbbbbbbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaabbbaaabbbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaabaaaabbbaaabbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaabaaaabbbaaabbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbabbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaabbbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaabbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbba + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbbabaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbaaabba + abbbbbbabbbbbaabaaaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbaabbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbaabbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbbbbbbabbbbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbabbbbbbaabbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbbbbaabbbbbbbbbbbbbbbbbabbbbbbbbb + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbbabaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbabbbbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbbabaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaababbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabaaaaaabbbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaababbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaababbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + abbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbaabaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + bbbbbbabbbbbbaabaaaaaabbbbbbbabbbbbbbbabaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbba + bbbbbbabbbbbbaabaabaaabbbbbbbabbbbbbbbabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbabbbbbbbba + bbbbbbbbbbbbbaabaaaaabbbbbbbbabbbbbbbbaaabbbbbaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbaabaaaaabbbbbbbbabbbbbbbaababbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + bbbbbbbbbbbbbaabaaaaaabbbbbbbabbbbbbbaabaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbaabaaaaaabbbbbbbbbbbbbbbbabaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbaabaaaaabbbbbbbbbbbbbbbbaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbbbabbbbbbbaabaaaabbbbbbbbbbbbbbbbbaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbbbabbbbbbbaabaaabbaabbabbbbbbbbbbbaababbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbbbabbbbbbbaabaaabbaabbabbbbbbbbbbbaababbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaabb + bbbbbabbbbbbbaabaaaababbbabbbbbbbbbbbabbaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbb + bbbbbabbbbbbbaabaaaabaabaabbbbbbbbbbbbabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbabbb + bbbbbbbabbbbbaabaabbbbbbaaabbbbbbbbbbaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbb + bbbbbbbabbbbbaaaaaaabbbbbaabbbbbbbbbbaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbb + bbbbbbbabbbbbaaaaabbbbbbbabbbbbbbbbbbaababbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbaabb + bbbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbaababbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabb + bbbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbaabaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbaabb + abbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbb + bbbbaabbbbbbbabaaabbbbbbbaabbbbbbbabbabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbabbbbbbbabaaabbabbbbaabbbbbbbabbabbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + bbbbbabbbbbbbabaaabbabbbbaabbbbbbbabbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbb + abbbbabbbbbbbabaaabbabbbbaabbbbbbbbbbabbabbbbbbbaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbb + abbbbabbbbbbbabaaabbbbbbbaabbbbbbbbbbabaaaaaaabaaabbaabbbbbbbbbbbbabbbbbbbbbbbbbbbabbbbbbb + abbbbbbbbbbbbabaaabbbbbbbabbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbabaaabbbbbbaabbbbbbbbbbbbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbabaaabbbbbbabbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbbbbbbbbabaaabbbbbbabbbbbbbbbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabaaabbbbbbabbbbbbbbbabbbbaaaaaaabaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabaaaabbbbbabbbbbbbbbbbbbbaaaaaaaababbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbabbbaaaaaaaababbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbba + abbbbbbbbbbbbaabaaaabbbbbbabbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbb + abbbbbbbbbbbbaabaaaabbbbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + bbbbbaabbbbbbaabbaaabbbbbbabbbbbbbbbbbbaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbaabbbaabbbbbbabbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbba + abbabbbbbbbbbaabbaaabbbbbbabbbbbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbb + abbabbbbbbbbbaabbaaaabbbbabbbbbbbbbbbbbabbaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbbabaaaaaabbbbaabbbbbbbaabbbabbbaabbbbbbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbaaaabaaaaabbbbbaabbbbbbbabbbbaabbaabbbbbbbbbbbbaabbbbbbbbbabbbbbbabbbbbbbbbbbbba + abbbbbbbbaaaabbaaaaabbbbbaabbbbbbbbbbbbaabbbaabbbbbbbbbbbabbbbbbbbbbbbbbbabaabbbbbbbbaaaba + abbbbbbbaaaabbbaaaaabbbbbaabbbbbbbbbbbbaaabbbbabbbbbbbbbbabbbbbbbbbbbbbbaaaaaaaababbbbbbba + abbbbbbbaaaabbbaaaaabbbbbaabbbbbbbbbbbbaaaaabaabbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaababbbbbbba + abbbbbbbaaaabbbaaaaabbbbbbabbbbbbbbbbbaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbbaabbbbaaaaaaaabbbbb + bbbbbbbbaaaabbbaaaaabbbabaabbbbbbbabbbabaaabbbbbbbbbbbbbaabbbbbbbbbbbbbaabbbbbaaaaaaabbbbb + bbbbbbbbaaaabbbaaaaabbbabaabbbbbbbabbbbbaaabbbbbbbbbbbbbabbbbbbbbbbbbbaabbbbbbaaaaabbbbbbb + bbbbbbbaaaaabbbaaaaabbaabaabbbbbbbabbabbbaabbbbbbbbbbbbaabbbbbbbbbbbbbaaabbbbbbaaabbbbbbbb + bbbbbbbbaaaabbbaaaaabbaaaaabbbbbbbaababbbbabbabbabbbbbbabbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbb + abbbbbbbaaaabbbaaaabbbbaaaabbbbbbbaababbbbbbbaaabbbbbbaabbbbbbbbbbbbbaaaaabbbbbaaabbbbbbbb + abbbbbbaaaaabbbaaaabbbbbaaabbbbbaaabbabbbbbaaabbbbbbbbabbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbba + abbbbbbaaaaabbbaaaabbabbaaaabbbbaaaababbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbabbbbbba + abbbbbbaaaaabbbaaaabbaaaaaaabbbbaaabaabbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbaaaaaabbbbabbbbbba + abbbbbbaaaaabbbaaabbbbaaaaabbbbbababbabbbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbaaaaabbbaaabbbbbbaaabbbbbababbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbbaaaaabbbaaabbbbbaaaabbbbbababbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbbaaaaaabbbaaabbbabaaabbbbbbabaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbbaaaaaabbbaaabbaaaaabbbbbbbabaaaabbbbbbaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbbaaaaaaabbbaaabbbabaabbbbbbbabaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbaaaaaaabbbaaabbaabbbbbbbbbbababaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbaaaaaaabbbaaabbbbbbbbbbbbbbabababbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbaaaaaaaabbbaaabbbbbabbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbaaaaaaaabbbaaabbaababbbbbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaabbbaaabbbabbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaabbbaaabbbbbbbbbbbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaaaaaaaaabbbaaabbbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaabaaaabbbaaabbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaabaaaabbbaaabbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba`, + map `abbbbbbbbabbbbbbbbabbbbbbbbaaabaaabbbbbbbbbbaaaaabbbbbbbaaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabbbbbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbabbaaaaaaabbbaaaabbbbbbbbbbbbaabbbba + abbbbbbbbabbaababbabbbbbbbbbaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbaababbbbbbbbbaabbbba + abbbbbbababaaaaaabaaaaabbbbaaaaabbbbbbaaabbaaaaabbbbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbaabbbba + abbbbbaabaaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbbaaabbbbbbaabbbba + bbbbbbbabaaaabbbabbbaaaaaaaabaaabbbbaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaaabbbbbaabbbba + abbbbbbaaaaabbbbabbbbaaaaaaabbbbbbaaaabbbaabbbbbaaaabaaabbbaaaaaaaaaaaaaaaabaaabbbbaabbbba + abbbbbbaaaabbbbaabbbbbbbbbbaabbbbaaaaaabaaabbbbbbaaabbaaaaaaaaaaaaaaaaaabbaabbbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbaaaaaabbaaaaaaaabbbbbbbaabaaaaaaaaaaaaaaaaaaabbaabbbbbbbaaabbba + abbbaaaabbbbbaaaabbbbbbbbbbbbabbbbbbbbaaaabbbbbbbbaaaaabbbaaaaaaaaabbbbbbbbabbbabaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbbabbbabbbbaabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbaaaaaaabbbbaaabbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaababbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaaaabbaaaaaabbba + abaaabbaabbbaaabbbbabbbbaaaaaaabbbaaaaaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbaaaaabbbaaaabbba + ababbbbaaaabaaabbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbaaaabbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaabbbbaaabbbbbbaaaabaaaabbbaaaaaaaabbbbbbbbaabbbbbabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaaabbbbaaabbbbbbaaaabbaaaabbaabbaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaaabbbbbaaaaaaabbbaaaaaaabbbbbaaaabbbbbbaabbbbaaabbaabbaaaaaaabbbbbaaaaaaaaabbba + abbbbbbbbbaaabbbbaaaabbaabbbaaaaaaabbbbbbaaaabbbbbbbbbbbbaaaaaabbbaaaaaabbbbbaaaaaabbbbbaa + abbbbbbbbaaabbbbaaaabbbaabbbaaaaabbbbbbbbbbbbbaabbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbbbbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbbbbbbabbabbbbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbbbbbbaaaaaaabbbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbbbbbbaaaaaaaabbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + bbbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaaabbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbbbbaaaaaaaaaaaabbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabbaabbaaaaabbbbbbbbbbaabaaaaaaaaabbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbaabbaaaaaabbbaaaaabbbbbbbbbaaabbbbaaaaaabbbbbbaaaaabbaabbbbabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbbbbbaaabbbbbbbaaabbbbbbaaaaabbaabbaaabbbaaaabbbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbbbbaaaabbbbbbbaabbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + bbbbbbbbaaaabbaaaabbbbaabbbbaaaaaaabbbbbbaaaabbbbbbbaabbbbaaaaaabbbbaaabaabaaabaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabaaaaabbbbbaabbbaabbaaaabbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbbaaaaaaabbaaaabbbbbaabbaaabbaaabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbaaaaaaaabbaaaabbbbbabbbaaabbaaabbbbabbbbaaaabbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaaabbaaaabaabbabaaaaabbbaaaabaaabbbbabbbbbabbbbbbaaaabbbba + abbbaaabaaabbbaaaaabbbbabbbbaaaaaabbbbbaababbaabaaaabbbbbaaaaaaabbbbabbbbaaabbbbbaaaabbbba + bbaaabbbbaabbbaabbaabbbaabbbaaaaaabbbbbabbabbbbbbbaabbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbaaaaaabbbbbbbbbaaaaabbbbbbbbbbbbaaaaabbbaabbbbaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaaabbaaabaaaabbbbbabbbbaaaaabbbaabbabbbbbaaaaabbbbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaaaaaabbbbbaabbbabaaabbbaabbaaabbbbaaaabbbabbbbaabbabbbbabbbaaaba + baaabbbbbbbbbaaabbbaaaaaaaaaaaabbbbbaaabaabaaabbbbaabaaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + baaabbbbbbbbbaaabbaaaaabbbaaaaabbbbbabbbaabaabbbbbaabbaaabbbbaaaaaaaabbaabbbaabbbbabbbbaba + aaaabbbbbbbbbaaaaaaaaaabbbbaabbbbbbbbabaaabaabbbbaaabbaaabbbbaaaaabaaabaabbbaaabbbabbbbaba + aaaabbbbbbbbbaaaaabaaabbbbbabbbbbbbbaabaaaaaabbbbaabbbbaaabbaaaaabbbbaaaaabbaabbbbbbbbbaba + baabbbbbbbbbbaaabbbaaabbbbbbbbbbbbbaaabaaaaaababbbbbbbbaaabbaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbbbbbbaaaabbbaaabbbbbbbbbaaaaaabbaaaaabaabbbbabbbaaaaaaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbaaaaaaaabbbbaaaabbbbbbaaaaaaaabbaaaabbbabbbbbbbbbaaaaaaaaabbbbaaaabbbaaabbbbbbbbbba + baabbbbaaaaaaabbbbaaaaabbbbaaaaaaaaaabbaaaabbbaabbbbbbbbaaaaaaaaabbbbaaaabbbaaaabbbbbbbbba + baaaaaaabaaaaabbbbaabbbbbaaaaaaaaaaaabbaaaabbbbbabbbbbbbbaaaaaaaabbbaaaaabbbaaaaabaabbbbba + aaaaaabbbaaabbbbbbaabbbbbaaaaaaaaaaaabbbaaabbbbaaabbbbbbbaabbaaaabbbaaababbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaaabbbbaaaaaaabbaaaabbbaaabbbbaaaabbbbbbaabbaaaabbbaaabaabbbbbaaaaaaabbba + abaaabbbbbaabbbbbaabbbbbaaaaaabbbaaabbbbaaabbbbaaaaabbbbbabbbaaaabbbaaabaabbbbbaaaaaaaabba + abaabbbbbbaabbbbbaabbbbbaaaaaabbbaaabbbbbbaaabbaaaaaaabbbbbbbaaaabbbaaabaabbbbbbaaaaaaaaba + aabbbbbbbbaabbbbbaabbbbbaaaaaabbbaaaaabbbbbbbbbaaaaaaabbbbbbbaaaabbaaabbbabbbbbbabbbbbabba + aabbbbbbbbaaabbbbaabbbbaaaaaaabbbbaaaaaabbbbbbaaaaaaaaabbbbbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbabbbbbaaaaaababbbaaaaabaabbbaaaaaaaaaaabbbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbbbbaaaabbbabbbaaaaabababbaaaaaaaaaaaabbbbbaaabbabaabbaabbbbaaabbbbbbaa + abaabbbbbbaaabbbaabbbbbaaaabbbabbbbaaaabbabbbaaaaabbaaaaabbbbbaaabaabaabbbabbbaaabbbaabbba + abaabbbaaaabaabbaabbbbbaaaaaababbbaaaaabbbbabaaabbbbbaaaabbbbbaaaaabbaaabbabbbaaabbbaabbba + abaabbbaaabbbaabaaabbbbaaaaaaabbbbaaaaabbbbbbaaabbbbbaaaabbbbbbaaaabbbaabbaabbbaaabbbbbbba + bbaaabbaaabbbaaaaaabbbbaaaaaabbbbbbaaaaabbbabaaaabbbbaaaabbbbbaaaaaaabaaababbaaaaaababbbba + abbaaaaaabbbbaaaaaabbbbaaaabbaabbbbaaaaabbabbaaaabbbbaaaabbbbbaaaaaabbbaaaaaaabbbaaaabbaba + abbbaaaabbbbbbaaaabbbbaaaaaabbbbbbbbaaaaabbbbaaaabbbaaaaabbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbaaabbbbbbbbaaabbbbaaaaaaabaabbbbaaaabbabbaaaabbaaaaaabbbbbaaaaaabbbbaaaaaabbbaaaaaaabb + aabaaaabbababbbaabbbbbaaaabaabaabbbbaaaaabbbbaaaabaaaaaaabbbbbbaaaabbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabbbbaaaabbaabaaabbbaaaabbabbaaaabbaaaaaabbbbbbaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbaaaabbaabbaabbbaaaababbbaaaabbbaaaaabbbbbbaaaaaaaabbaaabbbbbbbaaabbba + abbbaaabbbbbbbbaabbbbaaaabbaabaaabbbaaaabbbbbaaabbbbaaaaabbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaabbbbaaaabbaaaaaaabbaaaabaabbaaabbbbaaaaabbbbbbaaabbbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaabbbbaaaabbaaaaaaaaaaaaabbbbbaaabbbbaaaaabbbbbbaaaaabbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaabbbaaaaabbaaaaaaaaaaaaabbaabaaaabbbaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + bbbbaaabbbbbbbbabbbbaaabbbaaaaaabaaaabaaabbbbaaabbbbaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaaabba + bbbbaaabbbbbbbaabbbaaabbbaaaaaabbbaabbaabbbabaaabbbbaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaaabbbaaaaabbbabbbaaabaabaaabbbbaaaabbbbbbbbbabbaaaaaaaaabbbbbbbaaabba + abbaaaabbbbbbbaabbbaaaabbbaaaabbbbbbbaaabbbbbaaabbbaaaaabbbbbbbbaabbaaaaabaaabbbbbbbaaabba + bbbbaaabbbbbbbaabbbaaaabbbaaabbbbbbbaaaabbaabaaabbbaaaaabbbbbbbaaabbbbaabbaaabbbbbbbaaabba + bbbaaaabbbabbbaabbbbaaaaaaaaabbbbbbaaaaaabbbbaaaabaaaaaabbbbbbbaaabbbbaabbaaabbbbbbbaaabbb + abbaaaababbbbbaabbbbaaaaaaaaabbbbbaaaaaabbbbbaaabbabaaaabbbbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaaabbaabbbbaaaaaaaaabbbbaaabbaaaaabbaaabbabaaaabbbbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbbaabbbbbaabaabbbbaaaaaaaaabbbaaaaabbaabbabaaabbabaaaabbbbbbbbbbbbbbaabbbaaabbbbbbaaabbb + abbbaabbbbbbbbaabbbbbaaaaaaaabbbaaaaabbabbbbbaaabbaaaaaabbbbbbbbbbbbbbaabbbaaabbbbbbaaabba + abbbaabbbbbbbbaabbbbbaaaaaaaabbaaaaabbbabbbbbaaabaaaaaaaabbbbbbbbbbbbbaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaabbbbbaaaaaaabbbaaaaabbaabbbbaabbaaaaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbaaaaba + abbbaabbbbbbbbaaaabbbbbbbbababbbaaaaabbbaaabbaabbaaaaaaaabbbbbbbbbbbabbbabaaabbbbbbbaaaaba + abbaaabbbbbbbbaaaabbbbbbbbabbabbaaaaabbbaaabbaabbaaaaaaabbbbbbbbbbbbbbbbabaaabbbbbbbaaaaba + abbaaabbbbbbbbaaaabbbbbbbbaaaaaaaabaaaabaaabbaabbaaaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaaaaaababbbaaaaaabbbaabbaaaaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + abbaaabbbbbbbbaaabbbbbbbbaaaaababbbbaaaaabbbbaabbaaaaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + abbaabbbbbbbbbaabbbbbbbbbaaaaabbbbbbaaaaabbbbaaabaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbaaba + abbaabbbbbbbbbaabbbbbbbbbaaaabbbbbbbaaaaabbbbaaabbaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaba + bbaaaabaaaaaaaaabbbbbbbbbaaaabbbbbbbaaaaabbbbaaabbaaaaabbbaaaaabbbbbbbbbbbbabbbbbbbbbbbaaa`, + map `abbbbbbbbabbbbbbbbabbbbbbbbaaabaaabbbbbbbbbaaaaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbabbbaaaaaabbbaaababbbbbbbbbbbaabbbba + abbbbbbbbabbaababbabbbbbbbbbaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbaabaabbbbbbbbaabbbba + abbbbbbabaaaaaaaabaaaaabbbbaaaaabbbbbbaaabbaaaaabbbbbbbbbbbaaaaaabbbbbbbbbaabbbbbbbaabbbba + abbbbbbabaaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbbaaabbbbbbaabbbba + bbbbbbbabaaaabbbabbbaaaaaaaabaaabbbbaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaaaabbbbaabbbba + abbbbbbaaaabbbbbabbbbaaaaaaabbbbbbaaaabbaaabbbbbaaaabaaaabbaaaaaaaaaaaaaaaabaabbbbbaabbbba + abbbbbbaaaabbbbaabbbbbbbbbbaabbbbaaaaaabaaabbbbbbaaabbaaaaaaaaabaaaaaaaabbbabbbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbaaaaaabbaaaaaaaabbbbbbaaabaaaaaaaaaaaaaaaaaaabbaabbbbbbbaaabbba + abbbbaaabbbbbaaaabbbbbbbbbbbbabbbbbbbbaaaabbbbbbbbaaaaabbbaaaaaaaaabbbbbbbbabbbabaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbbabbbabbbbaabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaaabbbbaabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaababbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbabbbaaabbaaaaaabbba + abaaabbaabbbaaabbbbabbbbaaaaaaabbbaaaaaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbabbaaaaabbbaaaabbba + ababbbbaaaabaaabbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbaaaabbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaabbbbaaabbbbbbaaaabaaaabbbaaaaaaaabbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaaabbbbaaabbbbbbaaaabbaaabbbaabbaaaabbbbbbbbaaabbaaaabbba + aabbbbbbaaaaabbbbbaaaaaaabbbaaaaaaabbbbbbaabbbbbbbbbbbbbaaabbaabbaaaaaaabbbbbaaaaaaaaabbba + abbbbbbbbbaaabbbbaaaabaaabbbaaaaaaabbbbbbaabbbaabbbbbbbbbaaaaaabbbaaaaaabbbbbaaaaaabbbbbaa + abbbbbbbbaaabbbbaaaabbbaabbbaaaaabbbbbbbbbbbbabbabbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbbbbbbbbaabbbaaaaabbbbabbbaaaabbbbbbbbbbbbbaaaaaabbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbbaabbaaaabbbbbbbbabbbaaaaaaaabbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbbabaaaaaaaaaabbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbaaaaaaaaaaaabbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbbbaaaaaaaaaaaaabbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabbaabbaaaaabbbbbbbbbaaabbbaaaaaaabbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbaabbaaaaaabbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbbbaaaaabbaabbbbabbaaaaabbbbbbbba + bbbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbbbbbaaabbbbbbbbaabbbbbbaaaaabbaabbaaabbaaaaabbbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbbbaaaabbbbbbbbaabbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + bbbbbbbbaaaabbaaaabbbbaabbbbaaaaaaabbbbbaaaaaabbbbbbabbbbbaaaaaabbbbaaabaabaaabaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbaaaabbaaabbbabbaaaaabbbbbabbbbaabbaaaabbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbbaaaababbaaaaabbbbaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbaaaaaaaababbaabaaaabbbaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaaabbbaaababbaabaaabbbbbaaaabaaabbbbabbbbaabbbbbbaaaabbbba + abbbaaabaaaabbaaaaaabbbabbbbaaaaaabbbbbababbbabbbbabbbbbaaaaaaaabbbbabbbbaaabbbbbaaaabbbba + bbaaabbbbaabbbaabbaabbbaabbbaaaaaabbbbbbbaabbbbbbbabbbbbbbaaaaaabbbaabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbaaaaaabbbbbbbbaaaaaabbaabbabbbbbaaaaabbbaabbbbaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaaabbaaabbaaabbbbbaaabbabaabbbaaabbabbbbbaaaaabbbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaaaaaabbbbbaabbbabaabbbababbaaabbbbaaaabbbabbbbaabbabbbbabbbbaaba + baaabbbbbbbbaaaabbbaaaaaaaaaaaabbbbbabbaaabaabbbbbaabaaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + baaabbbbbbbbbaaabbaaaaabbbaaaaabbbbbbabaaabaabbbbbaabbaaabbbbaaaaaaaabbaabbbaabbbbabbbbaba + aaaabbbbbbbbbaaaaaaaaaabbbbabbbbbbbbaabaaabaaabbbaaabbaaabbbbaaaaabbaabaabbbaaabbbabbbbaba + aaaabbbbbbbbbaaaaabaaabbbbbbbbbbbbbaaabaaaaaabbbbaabbbbaaabbaaaaabbbbaaaaabbaabbbbabbbbaba + baabbbbbbbbbbaaabbbaaabbbbbbbbbbaaaaaabaaaaaaabbbbbbbbbaaabbaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbbbbbbaaaabbbaaabbbbbbbbaaaaaaaabaaaaabbbbbbbbbbbaaaaaaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbaaaaaaaabbbbaaaabbbbbaaaaaaaaaabaaaabbbbabbbbbbbbaaaaaaaaabbbbaaaabbbaaabbbbbbbbbba + baabbbaaaaaaaabbbbaababbbaaaaaaaaaaaaabbaaabbbbbabbbbbbbaaaaaaaaabbbbaaaabbbaaaabbbbbbbbba + baaaaaaabaaaabbbbbaabbbbbaaaaaaaaaaaabbbaaabbbbaaabbbbbbbaaaaaaaabbbaaaaabbbaaaaabaabbbbba + aaaaaabbbaaabbbbbbaabbbbaaaaaaaabaaaabbbaaabbbbaaaaabbbbbabbbaaaabbbaaababbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbbbaaaaaabbbaaaabbbbaabbbbaaaaaabbbbabbbaaaabbbaaabaabbbbbaaaaaaabbba + abaaabbbbbaabbbbaaabbbbbaaaaaabbbaaaabbbbbabbbbaaaaaaabbbbbbbaaaabbbaaabaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbaabbbbbaaaaaabbbaaaabbbbbbbabbaaaaaaaabbbbbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbaabbbbaaaaaaabbbbaaaaaabbbbbbaaaaaaaaaabbbbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbaaaaaabbbbbaaaaabaabbbbaaaaaaaaaaabbbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbabbbbbaaaaaabbbbbaaaaaaababbaaaaaaaaaaaabbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbbbbaaaaabbbbbbaaaaabbaabbaaaaabbaaaaabbbbbaaabbababbbaabbbbaaabbbbbbaa + abaabbbbbbaaabbbaabbbbbaaaabbbbbbbbaaaaaabbbbaaaabbbbaaaabbbbbaaabaabaabbbabbbaaabbbaabbba + abaabbbaaaabaabbaabbbbbaaaaaababbbaaaaabbbabbaaaabbbbaaaabbbbbaaaaabbaaabbabbbaaabbbaabbba + abaabbbaaabbbaabaaabbbbaaaaaabbbbbaaaaaabbbbbaaaabbbbaaaabbbbbbaaaabbbaabbabbbbaaabbbbbbba + bbaaabbaaabbbaaaaaabbbbaaaaaabbbbbbaaaaabbbbbaaaabbbbaaaabbbbbaaaaaaabaaababbaaaaaaaabbbba + abbaaaaaabbbbaaaaabbbbbaaaaaabbabbbaaaaababbbaaaabbbbaaaabbbbbaaaaaabbbaaaaaaabbbaaaabbaba + abbbaaaabbbbbbaaaabbbbaaaaaaabbabbbbaaaabbbbbaaaabbbaaaaabbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbaaabbbbbbbbaaabbbbaaaabaabbabbbbaaabbabbbaaaaabaaaaaabbbbbaaaaaabbbbaaaaaabbbaaaaaaabb + abbaaaaaaababbbaabbbbaaaabbaaaaaabbbaaaaabbbbaaaaaaaaaaaabbbbbbaaaabbbbbaaaaaabbbbbaaaabbb + abbbaaaaaaaaaaaaabbbbaaaabbaaaaaabbbaaaababbbaaaabbaaaaaabbbbbbaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbaaaabbaaabaabbbaaaaabbbbaaaabbbaaaaabbbbbbaaaaaaaabbaaabbbbbbbaaabbba + abbbaaabbbbbbbbaabbbbaaaabbaabbaabbbbaaabaabbaaabbbbaaaaabbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaabbbbaaaabbaabbaabbbbaaaabbbbaaabbbbaaaaabbbbbbaaabbbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbabbbbaaaaabbaabbaaabbaaaabbbabaaabbbbaaaabbbbbbbaaaaabbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbabbbaaaaaaaaaaaaaaabbaaaaaabbbaaabbbbaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + bbbbaaabbbbbbbbabbbaaabbbaaaaaaaaaaaaaaabbbbbaaabbbbaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaaabba + bbbbaaabbbbbbbbabbbaaaabbbaaaaaaaaaaaaaabbaabaaabbbbaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaaaaaaaaabbaaabbbaaaabbbbaaaabbaaaaabbbbbbbbbabbaaaaaaaaabbbbbbbaaabba + abbaaaabbbbbbbaabbbaaaabbbaabbbbaabbbaaabbbbbaabbbbaaaaabbbbbbbaaabbaaaaabaaabbbbbbbaaabba + bbbbaaabbbbbbbaabbbaaaabbbbabbbbbbbbaaaaabbbbaabbbaaaaaabbbbbbbaaabbbbaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbaabbbaaaaaaabbbbbbbbaaabaabbbbaaabbbaaaaaabbbbbbbaaabbbbaabbaaabbbbbbbaaabbb + abbaaaabbbabbbaabbbaaaaaaaabbbbbbaaaabaaaaabbaabbbbaaaaabbbbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaaaabaabbbbaaaaaabbbbbbaaaaabaaabbbbaabbbbaaaaabbbbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbbaabbbbbaabaabbbbaaaaaabbbbbaaaaaabaaabbbbaabaaaaaaaabbbbbbbbbbbbbbaabbbaaabbbbbbaaabbb + abbbaabbbbbbbbaabbbbaaaaaabbbbaaaaaaabbabbbbbaaaaaaaaaaaabbbbbbbbbbbbbaabbbaabbaaaabaaabba + abbbaabbbbbbbbaabbbbaaaaaabbbaaaaaaabbbabbbbaaaabaaaaaaaabbbbbbbbbbbbbaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaabbbbaaaaabbbaaaaaaaaabaaaabbaaabaaabaaabbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaba + abbbaabbbbbbbbaaabbbbbbaaaabbaaaaaaaaabbaaabbbaabaaabaaabbbbbbbbbbbbabbbabaaabbbbbbbaaaaba + abbaaabbbbbbbbaaaabbbbbbbbabbaaaaabaaabaaaabbaaabaaaaaaaabbbbbbbbbbbbbbbabaaabbbbbbbaaaaba + abbaaabbbbbbbbaaaabbbbbbaaaaaaabbbbaaaaaaabbbaaabbaaaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbaaaaaabbbbbbaaaabbbbbaaabbaaaaaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + abbaaabbbbbbbbaaabbbbbbbaaaaabbbbbbbaaaabbbbbbaabbaaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbba + abbaabbbbbbbbbaabbbbbbbaaaaabbbbbbbbaaaabbbbbbaaabaaaaaaaabbabbbbbbbbbbbbbbabbbbbbbbbbaaba + abbaabbbbbbbbbaabbbbbbbaaaaabbbbbbbbaaaabbbbbbaaabaaaaaaabbaaaaabbbbbbbbbbbabbbbbbbbbbbaba + bbaaaabaaaaaaaaabbbbbbbaaaaabbbbbbbaaaaabbbabbaaabbaaaaaabbbaaaaaaabbbbbbbbabbbbbbbbbbbaaa`, + map `abbbbbbbbabbbbbbbbabbbbbbbbaaabaaabbbbbbbbbaaaaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabbbbbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbabbbaaaaaabbbaaababbbbbbbbbbbaabbbba + abbbbbbbbabbaababbabbbbbbbbbaaaaaabbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbaababbbbbbbbbaabbbba + abbbbbbabaaaaaaaaaaaaaaabbbaaaaabbbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbbaaabbbbbbbaabbbba + bbbbbbbabaaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbbaaabbbbbbaabbbba + bbbbbbbabaaaabbbabbbaaaaaaaabaaabbbbaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaaaabbbbaabbbba + abbbbbbaaaaabbbbabbbbaaaaaaabbbbbbaaaabbbaabbbbbaaaabaaaabbbaaaaaaaaaaaaaaabaabbbbbaabbbba + abbbbbbaaaabbbbaabbbbbbbbbbaabbbbaaaaaabaaabbbbbbaaabbaaaaaaaaabaaaaaaaabbbabbbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbaabbbabbaaaaaaaabbbbbbaaabaaaaaaaaaaaaaaaaaaabbaabbbbbbbaaabbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbabbbbbaaaabbbbbbbbaaaaabbbaaaaaaaaabbbbbbbbabbbabaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaabbabbbbbaabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaabbbbbbaabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaababbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbabbbaaabbaaaaaabbba + abaaabbaabbbaaabbbbabbbbaaabaaabbbaaaaaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbabbaaaaabbbaaaabbba + ababbbbaaaabaaabbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbaaaaabbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaabbbbaaabbbbbbbaaabaaaabbbaaaaaaaabbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaaabbbbaaabbbbbbbbabbbaaabbbaaabaaaabbbbbbbbaaabbbaaabbba + aabbbbbbaaaaabbbbbaaaaaaaabbaaaaaaabbbbbbaabbbaabbbbbbbbaaabbaabbaaaaaaabbbbbaaaaaaaaabbba + abbbbbbbbaaaabbbbaaaabaaabbbaaaaaabbbbbbbbbbbababbbbbbbbbaaaaaabbbaaaaaabbbbbaaaaaabbbbbaa + abbbbbbbbaaaabbbaaaabbbaabbbaaaaabbbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaaabbaaaaabbbbaabbaaaabbbbabbbbabbaaaaaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbaabbaaaabbbbbbbbaaaaaaaaaaaabbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbbaaaaaaaaaaaabbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbaaaaaaaaaaaaabbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbbbaabbbbaaaaaaabbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabbaabbaaaaabbbbbbbbbaabbbbbbbaaabbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbbbaaabbbbbbbbaabbbbbbbaaaaabbaabbbbabbaaaaabbbbbbbba + bbbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbbbbaaaabbbbbbbaabbbbbbbaaaaabbaabbaaabbaaaaabbbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbbbaaaaaabbbbbaabbbbaaaaaaabbbbaaaaaabbaabaabbbbbbbba + bbbbbbbbaaaabbaaaabbbbaabbbbaaaaaaabbbbaaaaaaaabbbbaabbbbaaaaaaabbbbaaabaabaaabaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbaaaabbaaabbaabbaaaaabaaaaabbbbaabbaaaabbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbbaaabaabbabbaabaaaabbbbaaabbaaabbbbabbbaaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbaaaaaaaaaabbaabbaabbbaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaaabbbbaaaabbaabbaabbaaaaaabbaaabbbbabbbbaabbbbbaaaaabbbba + abbbaaabaaaabbaaaaaabbbabbbbaaaaaabbbbbbbabbaaabbaabbabbaaaaaaaabbbbabbbbaaabbbbbaaaabbbba + bbaaabbbbaabbbbabbaabbbaabbbaaaaaabbbbbbbabbbbabbabbbabbbbaaaaaabbbaabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbbaaaaabbbbbbbbabaaabbabbbbabbbbbaaaaabbbaabbbbaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaaabbaaabbaaabbbbbbbabaabaaababbbbbabbbbbaaaaabbbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaabaaabbbbbbabaaabaabbabbaabaaabbbbaaaabbbaabbbaabbabbbbabbbbaaba + baaabbbbbbbbaaaabbbaaaaaaaaaaaabbbbbbabaaabaabbbbbaabaaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + baaabbbbbbbbbaaabbaaaaabbbaabbbbbbbbaabaaabaaabbbaaabbaaabbbbaaaaaaaabbaabbbaabbbbabbbbaba + aaaabbbbbbbbbaaaaaaaaaabbbbbbbbbbbbaaabaabbaabbbbaabbbaaabbbbaaaaabbaabaabbbaaabbbabbbbaba + aaaabbbbbbbbbaaaaabaaabbbbbbbbbbaaaaaabaaaaaaabbbbbbbbbaabbbaaaaabbbbaaaabbbaabbbbbbbbbaba + baabbbbbbbbbbaaabbbaaabbbbbbbbaaaaaaaabaaaaaabbbbbbbbbbaaabbaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbbbbbbaaaabbbaaabbbbbaaaaaaaaaaabaaaaabbbabbbbbbbaaaaaaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbaaaaaaaabbbbaabbbbaaaaaaaaaaaaabbaaabbbbbaabbbbbbaaaaaaaaabbbbaaaabbbaaabbbbbbbbbba + baabbbaaaaaaaabbbbbabbbbbaaaaaaaaaaaaabbaaabbabaaaabbbbbbaaaaaaaabbbbaaaabbbaaaabbbbbbbbba + baaaaaaabaaaabbbbbaabbbbaaaaaaaaaaaaabbbaaabbbbaaaaabbbbbaaaaaaaabbbaaaaabbbaaaaabaabbbbba + aaaaaabbbaaabbbbbbaabbbbaaaaaabbbbaaabbbbaabbbbaaaaaabbbbabbbaaaabbbaaaaabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbbbaaaaabbbbbaaabbbbbabbbbaaaaaaabbbbbbbaaaabbbaaabaabbbbbaaaaaaabbba + abaaabbbbbaabbbbaaabbbbbaaaabbbbbbaaabbbbbbbbbbaaaaaaaabbbbbbaaaabbbaaabaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbaabbbbaaaaaaabbbbaaaaaaabbbbbaaaaaaaaaabbbbbaaaabbaaaabbabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbaabbbbaaaaaaabbbbaaaaabbabbbbaaaaaaaaaaabbbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbaaaaaaabbbbaaaaaaabbabbaaaaaaaaaaabbbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaaabbbabbbbbaaaababbbbbaaaaabbbaabbaaaabbaaaaabbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaaabbaabbbbbaaaababbbbbaaaaaaabbbaaaaabbbaaaaabbbbbaaabbabaabbaabbbbaaabbbbbbba + abaabbbbbbaaabbbaabbbbbaaaaabbbbbbbaaaabbbaabbaaaabbbaaaabbbbbaaabaabaabbbabbbaaabbbaabbba + abaabbbaaaabaaabaabbbbbaaaaaaababbaaaaaababbbaaaaabbbaaaabbbbbaaababbaaabbabbbaaabbbaabbba + abaabbbaaabbbaabaaabbbaaaaaaabbbbbaaaaaabbbabaaaaabbbaaaabbbbbbaababbbaabbaabbbaaabbbbbbba + bbaaabbaaabbbaaaaabbbbaaaaaaabbbbbbaaaaababbbaaaabbbbaaaabbbbbaaaaaaabaaababbaaaaaaaabbbba + abbaaaaaabbbbaaaaabbbbbaaaaaabbabbbaaaaabbbabaaaabbbaaaaabbbbbaaaaaabbbaaaaaaabbbaaabbbaba + abbbaaaabbbbbbaaaabbbbaaaaaaabbabbbbaaaabbabbbaaaabbaaaaabbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbbaaabbbbaaaabaabbabbbbaaaabbbbbaaaaabbaaaaabbbbbaaaaaabbbbaaaaaabbbaaaaaaabb + aabbaaaaabbabbaaabbbbaaaabbaabbaabbbaaaabbabbbaaaabbaaaaabbbbbbaaaabbbbbaaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabbbbaaaabbaabbaabbbaaaababbbaaaabbbaaaabbbbbbbaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbaaaabbaabbbabbbaaaabbabbbaaabbbaaaabbbbbbbaaaaaaaabbaaaabbbbbbaaabbba + abbbaaabbbbbbbbaabbbbaaaabbaabbaaabbaaaaaabbbaaaabbbaaaabbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbabbbbaaaaabbaabbaaabbbaaabbbbbaaaabbaaaaabbbbbbbaaabbbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbabbbaaaaaabbaabbaaabbbaaababbbaaaaabaaaaabbbbbbbaaaaabbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbabbbaaabbbaaaaabaaabbbaaabbbbbaaaabbbaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbabbaaabbbaaaaaabaaaabbaaabbaabaaaabbbaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbabbaaaabaabaaaaaaaaaabaaaabbbbaaaabbbaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbabbaaaaaaaaaaaaaaaaabbbaabbbbbaaaabbbaaaabbbbbbbbbabbaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbabbbaaaaabbaaaaaaaaaaabbaaaaabbaaaabbaaaaabbbbbbbaaabbaaaaabaaabbbbbbbaaabba + bbbbaaabbbbbbbaabbbaaaaaaabbbaaabbaabbaaabbbbaaaabbaaaabbbbbbbbaaabbbbaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbaabbbaaaaabbbbbbbbbbaabbaabbbbbaaaabbaaaabbbbbbbbbaabbbbaabbaaabbbbbbbaaabbb + abbaaaabbbabbbaabbbaaaaaabbbbbbbbaaabbaaaabbbbaabbbaaaaabbbbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaaaabaabbbbaaaabbbbbbbbaaaabbaabbbbaababbbaaaaaabbbbbbbaabbbbaabbaaabbbbbbbaaabbb + abbbaabbbbbaabaabbbaaaabbbbbbbaaaaaaabaabbbbbababbbaaaaaabbbbbbbbbbbbbaabbbaaabbbbbbaaabbb + abbbaabbbbbbbbaabbbaaaabbbbbbbaaaaaaabaaaabbaababbaaaaaabbbbbbbbbbbbbaaabbbaabbaaaabaaabba + abbbaabbbbbbbbaabbbbaaabbbbbaaaaaaaaaabaaabbaababbaaaaaabbbbbbbbbbbbbaaaabbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbbbaaabbbbbaaaaabbaaabaabbbabbabbaabaaaabbbbbbbbbbbbbbbbbaaabbbbbbbaaaaba + abbbaabbbbbbbbaaabbbbaabbbbaaaaabbbbaabaaabbabbabbaabaaaaabbbbbbbbbbbbbbabaaabbbbbbbaaaaba + abbaaabbbbbbbbaaabbbbbbbbaaaaaaabbbbaaaabbbbabbaabaabbaaaabbbbbbbbbbbbbbbbaaabbbbbbbaaaaba + abbaaabbbbbbbbaaaabbbbbaaaaaaaabbbbbaaaabbbbbabaabbaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbaaaaaaabbbbbbbaaaabbbababaabbaaaaaaaaaabbbbbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbaaaaaabbbbbbbbaaaabbbabbbaaabaaaaaaaaabbaaababbbbbbbaaabbbbbbbbbaaba + abbaabbbbbbbbbaabbbbbbaaaaabbbbbbbbbaaaabbbabbaaaaabaaaaaabbbaaaaaaaabbbbbbabbbbbbbbbbbaba + abbaabbbbbbbbbaabbbbbbaaaabbbbbbbbbbaaaabbbabbaaaaabbaaaaabbbbaaaaaabbbbbbbabbbbbbbbbbbaba + bbaaaabaaaaaaaaabbbbbbaaaabbbbbbbbbbaaaabbbabbaaaaabbbaaaabbbbaaaaabbbbbbbbabbbbbbbbbbbaaa`, + map `abbbbbbbbabbbbbbbbabbbbbbbbaaabaaabbbbbbbabbaaaaabbbbbbbaaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabbabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbabbbaaaaaabbbaaababbbbbbbbbbbaabbbba + abbbbbbbbabbaababbabbbbbbbbbaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbaababbbbbbbbbaabbbba + abbbbbbabaaaaaaaaaaaaaaabbbaaaaabbbbbbaabbbaaaaabbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbbaabbbba + bbbbbbbabaaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbbaaaaaaaabaaabbbbaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaaaabbbbaabbbba + abbbbbbaaaaabbbbabbbaaaaaaaababbbbaaaabbbaabbbbbaaaaaaaaabbbaaaaaaaaaaaaaaaaaabbbbbaabbbba + abbbbbbaaaabbbbaabbbbbbbbabaaabbbaaaaaabaaabbbbbbaaabbaaaaaaaaaaaaaaaaaabbaabbbbbbaaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbabbbabbaaaaaaaabbbbbbaaabaaaaaaaaaaaaaaaaaaabbaabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbabbbbbaaaabbbbbbbaaaaaabbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaabbabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaababbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbabbbaaabbaaaaabbbba + abaaabbaabbbaaabbbbabbbbaaaabaabbbaaaaaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbabbaaaabbbbaaabbbba + ababbbbaaaabaaabbbbabbbaaaabbaabbbaaaaaaaabbbbbbbbbbabaaaaaaaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaababbaabbbaabbbbbbbaaaabbbaaaaaaaabbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaaabbbbbbbbbaaabbbbbbbaaabbbaabbaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaaabbbbbaaaaaaabbbaaaaaaabbbbbbbbbaaaababbbbbbaaabbaabbaaaaababbbbbaaaaaaaaaabba + abbbbbbbbaaabbbbbaaaabaaabbbbaaaaabbbbbbabbbaaaaaaaabbbbbaaaaaabbbaaaaaabbbbbaaaaaabbbbbaa + abbbbbbbbaaabbbbaaaabbbaabbbaaaaabbbbbbbababaaaaaaaabbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbbaaabbbbbbbbaaaaaaaaaaaaabbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbbaaaaaaaaaaaabbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbbaaabbaaaaaaabbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbaaaaaaaaaabbbbaaaaaaaaaabbbbbbbaaabbbbbaaaaabbbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbbaaabbbbbbbbaabbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabbaabbaaaaabbbbbbbbaaabbbbbbbbaabbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbbbaaaabbbbbbbaabbbbbbbaaaaabbaabbbbabbaaaaabbbbbbbba + bbbbbbbbbbaabbaaaaabaaabbbbbaaaaaabbbbbaaaaaaabbbbbabbbbbbbbaaaaabbaabbaaabbaabaabbbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbaabaaaaaabbbbabbbbbaaaaaabbbbbaaaaaabbaabaabbbbbbbba + bbbbbbbbaaaabbaaaabbbbabbbbbaaaaaabbbbaabbaaaaaaaaaabbbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbaaaabbaaabbaaaaabbaabaaabbbbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbaaabbaaaaabbabbbabbbabbaaabbaaabbbbaabbaaaaabbaaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaabbbaaaaabbaaabaaabbabbabaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbaabbbaaaaaaaabbbbbbaabaaabbabbbaaaaaabbaaabbbbabbbbaabbbbbaaaaabbbba + abbaaaabaaabbbaaaaaabbbabbbaaaaaaabbbbbbbabbbaaaaabbbabbaaaaaaaaabbbabbbbaaabbbbbaaaabbbba + bbaaabbbbaabbbaabbaabbbabbbbaaaaabbbbbbbaaaabbbaabbbbabbbbbaaaaaabbbabbbbaaaaaaaaaaaabbbbb + bbaabbbbbbbbbbaabbaabbbaabbaaaaaabbbbbbaaabaaaaabbbbaabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaaabbaaabaaaabbbbbbabaaabaabaabbabaabbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaabbbbbbaabaabbaabbbbbaaaaaabbbbaaaaabbaabbbaabbabbbbabbbbaaba + baaabbbbbbbbbaabbbbaaaaabaaabbbbbbbbaabaabbaabbbbbaabaaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + baaabbbbbbbbbaabbbaaaaabbbbbbbbbbbaaaabaabbaabbbbbaabbaaabbbbaaaaaaaabbaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaaaabbbbbbbbbbaaaaaabaabbaabbbbbbbbbaaabbbbaaaaabbaaaaabbbaaabbbabbbbaba + aaaabbbbbbbbbaaaaabaaabbbbbbbaaaaaaaaabaaaaaabbabbbbbbbaabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbaaabbbaabbbbbbaaaaaaaaaaabbaaaababaabbbbbbaaabbaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbbbbbbaaaabbbaabbbbaaaaaaaaaaaaabbaaaababaaabbbbbbaaaaaaaaabbbbaaaababaabbbbbbbbbaba + baabbbbaaaaaaabbbbbaabbbaaaaaaaabbaaaabbaaabbbbaaaabbbbbaaaaaaaaabbbbaaaabbbaaabbbbbbbbbba + baabbbbaaaaaaabbbbaabbbbaaaaaaabbbaaaabbbaabbbbaaaaaabbbbbaaaaaaabbbbaaaabbbaaaabbbbbbbbba + baaaaaaabaaaabbbbbaabbbbaaaaaaabbbaaabbbbbabbbbaaaaaaabbbbaaaaaaabbbaaaaabbbaaaaababbbbbba + aaaaaabbbaabbbbbbbabbbbbaaaaabbbbbaaabbbbbabbbbaaaaaaaabbbbbbaaaabbbaaababbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbbaaaabbbbbbbaaaabbbbbbbbbaaaaaaaaabbbbbaaaabbbaabbabbbbbbaaaaaaabbba + abaaabbbbbaabbbbaaabbbbaaaabbbbbbbaaaaaaabbbbbaaaaaaaaaabbbbbaaaabbbaaabaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbaabbbbaaaababbbbbaaaaabbbaabbaaaaaaaaaabbbbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbabbbbbaaaaaabbbbbbaaaabbabbbbaaaabbaaaabbbbbaaaabbaaabbbabbbbbbabbbbbbbba + aabbbbbbbbaaabbbbaabbbbaaaababbbbbbaaaaabbbbaaaaaabbaaaabbbbbaaaabbaaabbbabbbbbbabbbbbbaba + abbbbbbbbaaaabbbbabbbbaaaaaabbbbbbbaaaabbaabbbaaaabbaaaabbbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbbbaaaaaaabbbbbaaaaaaabbbaaaaaabbaaaabbbbbbaaabaababbbaabbbbaaabbabbbba + abaabbbbbaaaabbbaabbbbaaaaaaaabbbbbaaaabbbabbbaaaabbaaaabbbbbbaaabaabaabbbabbbaaabbbaabbba + abaabbbaaaabaaabaabbbbaaaaaaaabbbbaaaaaabbbbbaaaaabbaaaabbbbbbaaababbaaabbabbbaaabbbabbbba + abaabbbaaabbbaabaaabbbbaaaaaaabbbbaaaaabbbbabbaaaabbaaaabbbbbbbaaaabbbaabbabbbbaaabbbbbbba + bbaaabbaaabbbaaaaabbbabaaaaaaabbbbbaaaaababbbaaaabbbaaaabbbbbbaaaaaaabaaababbaaaaaababbbba + abbaaaaaabbbbaaaaabbbbaaaabaaabbbbbaaaaabbbbbbaaaabaaaaabbbbbbaaaaaabbbaaaaaaabbbaaabbbaaa + abbbaaaabbbbbbaaaabbbaaaabbaabbbbbbaaaaababbbbaaabbaaaaabbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbbaabbbbaaaabbaabbabbbbaaaabbbaabaaabbbaaaabbbbbbaaaaaabbbbaaaaaabbbaaaaaaabb + aabaaaaaabbabbbaabbbbaaaabbaabbbabbbaaaabbabbbaaaabaaaaabbbbbbaaaaabbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabbbaaaaabbaabbbabbbaaaabbbbbaaaaabaaaaabbbbbbbaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaabbbbaaaaabbaabbbabbbaaaabbabbbaaaabaaaaabbbbbbbaaaaaaaabbaaabbbbbbbaaabbba + abbbaaabbbbbbbaabbbaaaaabbbaabbaaabbaaaababbaaaaabbaaaaabbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbaabbbaaaaabbbaabbaaabbbaaabbabbbaaabbaaaaabbbbbbbaaabbbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaaaaaaabbaabbbaabbbaaabaabbaaaabbaaaaabbbbbbbaaaaabbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaabbbbaaababbbaabbbaaabbbbbbaaabbaaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaaabbbbbaaabbaaabbbaaabbabbbaaaabaaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaaaaaabbaaabbbaababaaaabbbabaaabbaaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbabbbaaaaaabbaaabbbaaaabaaabbbbaabaaabaaaabbbbbbbbbbabbaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbbbbbaaaabbbaaaaabbaaaabbaabaabbabaabbaaaaabbbbbbbaaabbaaaaabaaabbbbbbbaaabba + bbbbaaabbbbbbbabbbaaabbaaaaaaaaaaaaabbaabbbbaaaaabbaaaaabbbbbbbaaabbbbaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbabbbaaaaaaaaaaaaaaaaaabbaabbabbbbaabbaaaaabbbbbbbbaabbbbabbbaaabbbbbbbaaabbb + abbaaaabbbbbbbabbbaaaaaabbaaaaaaaaaaabaabbbbbaaaabbaaaaabbbbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaaaababbbaaaaabbbbaabbaaaaaabaabbbbaaaaabbaaaaabbbbbbbbaabbbbaabbaaabbbbbbbaaabbb + abbbaabbbbbaabbabbaaaabbbbbbbbbaaaaaabaaaabbaabaabbaaaaaabbbbbbbbbbbbbaabbbaaabbbbbbaaabbb + abbbaabbbbbbbbbabbaaabbbbbbbbbaaaaaaabaababbabbaabbaaaaaaabbbbbbbbbbbaaabbbaaabaaaabaaabba + abbbaabbbbbbbbbabbbaabbbbbbbbaaaaaaaabaababbaabaabbaaaaaaabbbbbbbbbbbaaaabbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbbabbbbbbabaaaaaabaaaaaababaabaabbaaaaaaaabbbbbbbbbbbbbbbbaabbbbbbbaaaaba + abbaaabbbbbbbbaabbbbbbbbbbaaaaaabbbaaaabbbbbaabaabbaaaaaaaaabbbbbbbbbbbbabaaabbbbbbbaaaaba + abbaaabbbbbbbbaaabbbbbbbbaaaaaaaabbaaaabbbbbaabbaabaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbaaaaba + abbaaabbbbbbbbaaabbbbaaaaaaaaaabbbbbaaabbbbbbabaaaabaaaaaaaaaabaaabbbbbbbbbaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbaaaaaaabbbbbbbaaaabbbbbbabaaaabbaaaaaabbbaaaaaaaabbbbbaabbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbaaaaaaabbbbbbbaaaabbbbabaaaaaabbaaaaaabbbbaaaaababbbbbaabbbbbbbbbaaba + abbaabbbbbbbbbaabbbbbaaaaaaaaaabbbbaaaabbbbabbaaaaabbbaaaaabbbbaaaababbbbbbaabbbbbbbbbbaba + abbaabbbbbbbbbaabbbbbaaaaaaabaabbbbaaaabbbbabbaaaaabbbbaaaaabbbaababbaabbbbbbbbbbbbbbbbaba + bbaaaabaaaaaaaaabbbbaaaaaaabbaaabbbaaaabbbbabbaaaaabbbbbbaaaabbaabbbbbaabbbabbbbbbbbbbbaaa`, + map `abbbbbbbbabbabbbbaabbbbbbbbaaabaaabbbbbbbbbbaaaabbbbbbbbaaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabaabbbbabbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbabbaaaaaaabbbaaaabbbbbbbbbbbbaabbbba + abbbbbbbbbbaabbbaabbbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbaababbbbbbbbbaabbbba + abbbbbbabaaaaaaaaaaaaaaabbbaaaaabbbbbbaabbbaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbbaabbbba + bbbbbbbabaaaabbbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabababbbaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbabaaaaaaabbbaaabbbba + abbbbbaaaaabbbbaabbbaaaaaaaababbbbaaaabbaaabbbbbaaaaaaaaabbbaaaaaaaaaaaaaaaaaabbbbbaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbaaabbbbbbaaabbaaaaaaaaaaaaaaaaaabbaabbbbbbaaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbaabbbabbaaaaaaaabbbbbbaaabaaaaaaaaaaaaaaaaaabbbaabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabaabbbbbaaabbbbbbbbaaaaaabbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbaaaaabbabbbbbbbbaabaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbaabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaabbbbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaabbaaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaabbaaaaaaaabbbbabbbbbbbbbbbbaaaaaaabbbbbbabbaaaabbbbaaabbbba + ababbbbaaaaaaaabbbbabbbaaaabbaabbbaaaaaabbbbaaabbbbbbbaaaaaaaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbaabbbbbbbaaaaababbbbaaaabbbaaaaaaaabbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaabbbbbbbbaaaaaaaabbbbaaabbbaabbaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaaabbbbbaaaaaaabbbaaaaaaabbbbbaabaaaaaaaaabbbbaaabbaabbaaaaababbbbbaaabaaaaaabba + abbbbbbbbaaabbbbbaaabbaaabbbbaaaaabbbbbbaaaaaaaaaaaabbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaaabbbbbbbaaaaaaaaaaaaabbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbaaaabbbbbbbbaaaabbaaaaaaabbbbbaaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbaabbaaaabbbbbbbaabbbbbaaaaabbbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbaabbbbbbbbaabbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbbbaaabbbbbbbbbabbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaabbbbbbbaaaabbbbbbbbabbbbbbbaaaaaaaaabbbbaaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbaaaaabbbbbbbaaaaaaabbbbbabbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaaaaaaaabbbbbabbbbbbbbaaaaabbaabbbbabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaabbbbaabaaaaaaaaaabbbbbbbbbaaaaabbaabbaaabbaabaabbbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbbaababbbaabaababbbbbaaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaaabbaaaabbbbabbbbbaaaaaabbbbaaaabbbabbbababbbbbaaaaaaabbbbaaabaabbabbaabbbbbbbba + abbbbbaaaabbbbbbaabbbbaabbbaaaabbaaabbbaaaabbabbbabaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbaabbbbaaabbbaaabaaabbabaabbbaaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaabbbaaaaabbaaabaaaaabbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbaabbbaaaaaaaabbbbbaaaaabbaabbbbaaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + abbaaaabaaaabbaaaaaabbbabbbbaaaaabbbbbbaabbbbaaabbbbbabbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbaaabbbbaabbbaabbaabbbaabbbaabbbbbbbabaaaaaaaaabbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbbb + bbaabbbbbbbbbbabbbaabbbaabbaaabbbbbbaabaaaaaaaabbbbbaabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaaabbaaabbabbbbbbbaabaabaaabbbbbaaaabbbbbaaaaabbbaabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaabbbbbbbbbaaabaabaaaabbbbaaaaaabbbbaaaabbbabbbbabbaabbbaabbbbaaba + baaabbbbbbbbaaabbbbaaaabbbbbbbbbaaaaaabaabaaabbbbbaabaaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + baaabbbbbbbbaaabbbaaaabbbbbbbbaaaaaaaabaabaaabbbbbaabbaaabbbbaaaaaaaabbaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaaabbbbbbbaaaaaaaaaabbbbaaaababbbbbbaaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + aaabbbbbbbbbbaaaaabaabbbbbaaaaaaaaaaaabbbbaababaaabbbbbaabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbbaabbbaabbbaaaaaaaaaaaaaabbabaaabbaaaabbbbbaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbbbbbbbbaabbbaaaaaaaabbaaaabbbbaabbbaaaaabbbbaaaaaaaaabbbbaaaababaabbbbbbbbbaba + babbbbbaaaaaaaabbbbabbbbaaaaaabbbbaaaabbbbaabbbaaaaaabbbaaaaaaaaabbbbaaabbbbaaabbbbbbbbaba + babbbbbaaaaaaabbbbaabbbaaaaaabbbbbaaaabbbbbbbbbaaaaaaabbbbaaaaaaabbbbaaabbbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbaabbbaaaaaabbbbbaaaabbbbbbbbbaaaaaaaabbbbaaaaaabbbaaaaabbbaaaaababbbbbba + aaaaaabbbaabbbbbbbabbbbaaaaababbbbbaaaaaabbbbbaaaaaaaaabbbbbbaaaabbbaabbabbbbaaaaaaabbbbba + aaaaabbbbbabbbbbbaabbbbaaaaaabbbbbbaaaabbaabbbaaaaaaaaabbbbbbaaaabbbaabbabbbbbbaaaaaaabbba + abaaabbbbbaabbbbaaabbbbaaaaaabbbbbbaaaababbbbaaaaaaaaaabbbbbbaaaabbbaabbaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbaabbbbaaaaaabbbbbbaaaabbbaabbaaaabaaaabbbbbbaaaabbaaaabbabbbbbaaaaaaaabba + aabbbbbbbbaabbbbbabbbbaaaaaabbbbbbbaaaabbaabbaaaabbaaaabbbbbbaaaabbaaabbbabbbbbbabbbbbabba + aabbbbbbbbaaabbbbabbbbaaaaaaabbbbbbaaaabbbbaabaaabbbaaabbbbbbaaaabbaaabbbabbbbbbabbbbbbaba + abbbbbbbbbaaabbbbabbbbaaaaabaabbbbbaaaabbbabbbaaaabaaaaabbbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbbbaaaaabaabbbbaaaaaabbbbaaaaaabaaaaabbbbbbaaabaababbbaabbbaaaabbbbbbba + abaabbbbbaaaabbbaabbbabaaaaaaabbbbbaaaabbbaabbaaaabaaaabbbbbbbaaababbaabbbabbbaaabbaaabbba + abaabbbaaaabaabbabbbbabaaaaaabbbbbaaaaaabbbbbaaaaabaaaabbbbbbbaaababbaabbbabbbbaabbbabbbba + abaabbbaaabbbaabaabbbaaaaabaabbbbbbaaaaabbbabbaaaabaaaabbbbbbbbaaaabbaaabbabbbaaaabbbbbbba + bbaaabbaaabbbaaaaabbbaaaabbaabbbbbbbaaaabbbbbaaaaabaaaabbbbabbaaaaaaabaaababbaaaaaaaabbaba + abbaaaaaabbbbaaaabbbaaaaabbaabbabbbaaaaabbbaabaaabbaaaabbbbbbbaaaaaabbbaaaaaaabbbaaabbbaaa + abbbaaaabbbbbaaaabbbaaaaabbaabbbbbaaaaaabaabbbaaabbaaaabbbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbaabbbbaaaaabbaabbbbbaaaaaabbbbabaaabbaaaabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aabaaaaabbbbbbbabbbbaaaaabbaabbbbbabaaaabbabbbaaaabaaaabbbbbbbaaaaabbbbbaaaaaabbbbaaaaabbb + bbbbaaaaaaaaaaaabbbbaaaaabbaabbbbaabaaaabbbbaaaaabbaaaabbbbbbbbaaabbbbbbbbaabbbbbbbaaabbbb + abbbaaabbbbbbbaabbbaaaaabbbaabbbaaabaaaabbbbbbaaabbaaaabbbbbbbbaaaaaaaabbaaabbbbbbbaaabbba + abbbaaabbbbbbbbabbaaaaaabbbaabbbaabbbaaababbabaaaaaaaaabbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbabbbaaaaaabbaaabbaaabbbaaabbbbabaaabaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbaabbaaabaaaaaaabbaaabbbaaabaabbaaaaaaaabbbbbbbbbbaaaaabbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaaabbbbbaaabbaaaaabaaabbbbababaaaaabbbbbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaaabaabbaaabbbbaaabbaabbabbbababaaaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbabbbaaaaaabbababbbbaaabbaabbbbbbababbaaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbabbbaaaaabbaabaabbbaaabbaabbbbabababbaaaaabbbbbbbabbbaaaaaaaaaabbbbbbbaaabba + abbaaaabbbbbbbbbbbaaaaaabaaaaaabbbaabbaababbbaababbaaaaabbbbbbbababbaaaaabaaabbbbbbbaaabba + bbbbaaabbbbbbbbbbbaabbbbbaaabbabbbaabbaabbbbbaababbaaaaabbbbbbbaaabbbbaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbabbaaaaabbbaaabbbbbbaabbaabbbbbaababbaaaaaabbbbbbbaabbbbabbbaaabbbbbbbaaabba + abbaaaabbbbbbbabbaaaaaabaaaaabbbbbaaabaaabbbbabbabbaaaaaaabbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaaabbbbbaaaaaabaaaaabbbbbbaabaaabbbaabbabbaaaaaaabbbbbbbabbbbaabbaaabbbbbbbaaabbb + abbbaabbbbbaabbbbaaaabbaaaaaaabbbbaaabaaabbbaabbabbaaaaaaaabbbbbbbbbbbaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbbaaabbbaaaaaaabbbbaaaaaaabbbaabbabbaaaaaaaaabbbbbbbbbbaabbbaabaaaaaabaabba + abbbaabbbbbbbbbbbaabbbbbbbbaaaabbbaaaaabbbbbaabbaabaaaaaaaaaabbbbbbbbbbbabbaabbbbbbbbaabbb + abbaaabbbbbbbbbbbbabbbbbbbbbaaabbbaaaaabbbbbaabbaabaaaaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbbbbbbbbaaabbbaaaaabbbbbaabbaaaaaaaaaaaaaaaabbabbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbbbbbbaaaaabbbaaaaabbbbbbbabaaabbaaaaaabbbbaaaaaaaabbbaaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbabbaaaaaabbbbbbaaaabbbbbbbaaaaabbbaaaaabbbbbaaaaababbbbaabbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbaaaaaaabbbbbbaaaabbbbabbaaaaabbbbaaaaabbbaaaaababbbbbaabbbbbbbbbaaba + abbaabbbbbbbbbabbbaabaaaaaaaabbbbbbaaaabbbbabbaaaaabbbbbaaaaabbaaaaabbaabbbaabbbbbbbbbaaba + abbaabbbbbbbbbabbbaaaaaaaaabbbbbbbbaaaabbbbabbaaaaabbbbbbaaaaaabaabbabbaabbaabbbbbbbbbbaba + bbbaabbbbbbbbbabbbbaaaaaaaabbbbbbbbaaaabbbbabbaaaaabbbbbbbbaaaabbbabbabbbbbabbbbbbbbbbbaba + bbaaaabaaaaaabbbbbbaaaaaabaabbbbbbbaaaabbbbabbaaaaabbbbbbbbbaabbbbaabbabbbbaabbbbbbbbbbaaa`, + map `abbbbbbbbabbabbbbaabbbbbbbbaaabaaabbbbbbbbbbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabbabbbbabbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbabbbaaaaaabbbaaaabbbbbbbbbbbbaabbbba + abbbbbbbbbbaabaaaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbaababbbbbbbbbaabbbba + abbbbbbabaaaabaaaaaaaaaabbbaaaaabbbbbbaabbbaaaaabbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbbaabbbba + bbbbbbbabaaaabbbaabaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbaaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabaaabbaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbabbaaaaaabbbaaabbbba + abbbbbaaaaabbbbaabbbaaaaaaaabbbbbbaaaabbaaabbbbbaaaabaaaabbbaaaaaaaaaaaaaaaaaabbbbbaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbaaabbbbbbaaabbaaaaaaaaaaaaaaaaaabbaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbabbaaaaaaaabbbbbbaaabaaaaaaaaaaaaaaaaaabbbaabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaabbabbbbbaaabbbbbbbbaaaaaabbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaabbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbbaaaaabbbba + abaaaaaaabbbbabbbbbabbbbbaaaaaaabbbbbbaaabbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbaaabbaaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaaabbaaaaaaabbbbabbbbbbbbbbbbaaaaaaabbbbbbabbaaaaabbbaaabbbba + ababbbbaaaaaaaabbbbabbbaaaabbaabbbaaaaaabbbbaaabbbbbbbaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaabbbbbbbaaaaababbbbaaaabbbaaaaaaaabbbbbbbaaabbbbaabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaabbbbbbbbaaaaaaaabbbbaaaabbaabbaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbaabaaaaaaaaabbbbaaabbaabbaaaaaaabbbbbaaabaaaababba + abbbbbbbbaaabbbbbaaabbaaabbbbaaaaabbbbbbaaaaaaaaaaaabbbbbaaaaaabbbaaaaaabbbbbaaaaaabbbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaaabbbbbbbaaaaaaaaaaaaabbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbaaaabbbbbbbbaaaabbaaaaaaabbbbbaaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbbbbbaabbbbbaaaaabbbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabaaaaabbbbbbbaabbbbbbbbaabbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbbbaaabbbbbbbbbabbbbbbbaaaaabaabbbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaaabbbbbbaaabbbbbbbbbabbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbaaaaabbbbbbbaaaaaaabbbbbabbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaaaaaaaabbbbbabbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaabaaaaaaaaaabbbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbaababbbaabaababbbbbaaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaabbabbbbaaaabbbabbbababbbbbbaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbaaaabbbbbbaabbbbaabbbaaabbbaaabbbaaaabaabbbabaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbbaaabbbaaabaaabbabaabbbaaabbaaabbbbabbbaaaaabbbabbbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbaaaaabbaaaaaaaaabbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaaabbbbbaaaaabbaabbbbaaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaaabbaaaaaabbbabbbbaaaaabbbbbbaabbbbaaabbbbbabbbaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbbaabbbbaabbbaabbaabbbabbbbaabbbbbbbabaaabaabaabbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbabbbaabbbaabbbaabbbbbbaabaabaaaaabbbbbbabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaaabbaaabbabbbbbbbaabaabaaabbbbbaaaabbbbbaaaaaabbbabbbaaaaabbbaabaaaabba + baaabbbbbbbbbaabbbbaabbaaabbbbbbbbbaaabaabaaabbbbbaaaaaabbbbaaaaabbaabbbaabaabbbabbbbbabba + aaaabbbbabbbaaabbbbaaaabbbbbbbbbaaaaaabaabaaabbbbbaabaaaabbbbaaaabaaabbaabbbabbbbbbbbbaaaa + aaaabbbbabbbaaabbbbaaabbbbbbbbaaaaaaaabaabaaabbbbbaabbaaabbbbaaaaaaaaabaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaaabbbbbbbaaaaaaaaaabbbbaaaababbbbbbaaabbbbaaaaabbaaaabbbbaaabbbabbbbaba + baabbbbbbbbbbaaaaaaaabbbbbaaaaaaaaaaaabbbbaababaaabbbbbaabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbbaabbbaabbbaaaaaaaaaaaaaabbabaaabbaaaabbbbbaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbabbbbbbaabbbaaaaaaabbbbaaabbbbaabbbaaaaabbbbaaaaaaaaabbbbaaaababaabbbbbbbbbaba + babbbbbaaaaaaaabbbbabbbbaaaaaabbbbaaaabbbbaabbbaaaaaabbbbaaaaaaaabbbbaaabbbbaaabbbbbbbbaba + babbbbbaaaaaaabbbbaabbbaaaaaabbbbbaaaabbbbbbbbbaaaaaaabbbbaaaaaaabbbbaaabbbbaaaabbbbbbbbaa + baaaaaaabaaaabbbbbabbbbaaaaaabbbbbaaaabbbbbbbbbaaaaaaaabbbbaaaaaabbbaaaaabbbaaaaabbbabbbba + aaaaaabbbaabbbbbbbabbbbaaaaababbbbbaaaaaabbbbbaaaaaaaaaabbbbbaaaabbbaabbabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbbbaaaaaabbbbbbaaaabbaabbbaaaaaaaaaabbbbbaaaabbbaabbabbbbbaaaaaaaabbba + abaaabbbbbaabbbbaaabbbbaaaaaabbbbbbaaaababbbbaaaaaaaaaaabbbbbaaaabbbaaabaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbaabbbbaaaaaabbbbbbaaaabbbaabbaaaabaaaaabbbbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbabbbbaaaaaaabbbbbbaaaabbaabbaaaabbbaaaabbbbbaaaabbaaabbbabbbbbbabbbbbabba + aabbbbbbbbaaabbbbabbbbaaaaaaabbbbbbaaaabbbbaabaaaabaaaaabbbbbaaaabbaaabbbabbbbbbabbbbbbaba + abbbbbbbbbaaabbbbabbbbaaaaabaabbbbbaaaabbbabbbaaaabaaaaabbbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbbbaaaaabaabbbbaaaaaabbbbaaaaaabaaaaabbbbbbaaabaababbbaabbbbaaabbbbbbba + abaabbbbbaaaabbbaabbbabaaaaaaabbbbbaaaabbbaabbaaaabaaaabbbbbbbaaabaabaabbbabbbaaabbaaabbba + abaabbbaaaabaabbabbbbabaaabaabbbbbaaaaaabbbbbaaaaabaaaabbbbbbbaaababbaabbbabbbaaabbbabbbba + abaabbbaaabbbaabaabbbaaaaabaabbbbbbaaaaabbbabbaaaabaaaabbbbbbbbaaaabbaaabbabbbbaaabbbbbbba + bbaabbbaaabbbaaaaabbbaaaabbaabbbbbbaaaaabbbbbaaaaabaaaabbbbabbaaaaaaabaaababbaaaaaaaabbaba + abbaaaaaabbbbaaaabbbbaaaabbaabbbbbabaaaabbbaabaaaabaaaabbbbbbbaaaaaabbbaaaaaaabbbaaabbbaaa + abbbaaaabbbbbaaaabbbaaaaabbaabbbabaaaaaabaabbbaaaabaaaabbbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbaaabbbaaaaabbaabbbaaaaaaaabbbbabaaabbaaaabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aabaaaaabbbbbbbabbbbaaaaabbaabbbabbaaaaabbabbbaaaabaaaabbbbbbbaaaaabbbbbbaaaaabbbbaaaaabbb + bbbbaaaaaaaaaaaabbbbaaaaabbaabbbaabaaaaabbbbaaaaabbaaaabbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaabbbaaaaabbbaabbaaabbaaaabbbbbbaaabbaaaabbbbbbbbaaaaaaaabbbaabbbbbbbaaabbba + abbbaaabbbbbbbbabbaaaaaabbbaabbaaabbbaaababbabaaaaaaaaabbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbabbbaaaaaaabaaabbaaabbbaaabbbbabaaaaaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbaabbaaaaabaaaaabbaaabbbaaabaabbaaaaaaaabbbbbbbbbbaaaaabbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaaabbabbaaabbabaaabaaabbbbababaaaaabbbbbbbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaabbaaabaabbaaabbbbaaabbaabbabbbababaaaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbabbbaaaaaabbababbbbaaabbaabbbbbbababbaaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbabbbaaaaabbaabaabbbaaabbaabbbbabababbaaaaabbbbbbbaabbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbbbbbaaaaaabaaaaabbbaaabbaababbbaababbaaaaabbbbbbbaabbbaaaaabbaabbbbbbbaaabba + bbbbaaabbbbbbbbbbbaabbbbbaaabbabbbaabbaabbbbbaababbaaaaabbbbbbbaaabbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbabbaaaaabbbaaabbbbbbaabbaabbbbbaababbaaaaaabbbbbbbaabbbbabbbaaabbbbbbbaaabba + bbbaaaabbbbbbbabbaaaaaabaaaaabbbbbaaabaaabbbbabbabbaaaaaaabbbbbbaabbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaaabbbbbaaaaaabaaaaabbbbbaaabaaabbbaabbabbaaaaaaabbbbbbbabbbbaabbbaabbbbbbbaaabbb + abbbaabbbbbaabbbbaaaabbaaaaaaabbbbbaabaaabbbaabbabbaaaaaaaabbbbbbbbbbbaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbbaaabbbaaaaaaabbbbbaaaaaabbbaabbabbaaaaaaaabbbbbbbbbbbaabbbaabaaaaaabaabba + abbbaabbbbbbbbbbbaabbbbbbbbaaaabbbbaaaabbbbbaabbaabaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbbbabbbbbbbbbaaabbbbaaaabbbbbaabbaabaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbaabbbbbbbbbbbbaaabbbaaaaabbbbbaabbaaaaaaaaaaaaaaaaabbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbbbbbbaaaaabbbbaaaabbbbbbbbaaaabbaaaaaaababaaaaaaaabbbaaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbabbaaaaaabbbbbaaaaabbbbbbbaaaaabbbaaaaabbbbbaaaaaaabbbbaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbbaaaaaaabbbbbbaaaabbbbabbaaaaabbbbaaaaabbbaaaaabaabbbbaabbbbbbbbbabba + abbaabbbbbbbbbabbbaabaaaaaaaabbbbbbaaaabbbbabbaaaaabbbbbaaaaabbaaaaabbaabbbaabbbbbbbbbabba + abbaabbbbbbbbbabbbaaaaaaaaabbbbbbbbaaaabbbbabbaaaaabbbbbbaaaaaabaabbabbaabbabbbbbbbbbbaaba + bbbaabbbbbbbbbabbbbaaaaaaaabbbbbbbbaaaabbbbabbaaaaabbbbbbbbaaaabbbabbabbbbbbbbbbbbbbbbbaba + bbaaaabaaaaaabbbbbbaaaaaabbabbbbbbbaaaabbbbabbaaaaabbbbbbbbbaabbbbaabbabbbbaabbbbbbbbbbaaa`, + map `abbbbbbbbabbabbbbbabbbbbbbbaaabaaabbbbbbbbbbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbabbbaaaaaabbbaaaabbbbbbbbbbbbaabbbba + abbbbbbbbbbaabbbaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbaababbbbbbbbbaabbbba + abbbbbbabaaaabaaaaaaaaaabbbaaaaabbbbbbaabbbaaaaabbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbbaabbbba + bbbbbbbabaaaabbbaabaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbaaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabaaabbaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbabbaaaaaabbbaaabbbba + abbbbbaaaaabbbbbabbbaaaaaaaabbbbbbaaaabbaaabbbbbaaaabaaabbbbaaaaaaaaaaaaaaaaaabbbbbaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbaaabbbbbbaaabbaaaaaaaaaaaaaaaaaaabbabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbabbaaaaaaaabbbbbbaaabaaaaaaaaaaaaaaaaaabbbaabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbabbbbbaaabbbbbbbbbaaaaabbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaabbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbabbbbbabbbbbaaaaaaabbbbbbaabbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaaabbaaaaabbbbaaaababbbbbbbbbaaaaaaabbbbbbabbaaaaabbbaaabbbba + ababbbbaaaaaaaabbbbabbbaaaabbaabbbaaaaabbbbaaaaaaaabbbaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaabbbbbabaaaaaaaaabbbaaabbbaaaaaaaabbbbbbbaaabbbbaabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbaaaaaaaaaaaaabbbaaaabbaabbaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbaaaaaaaaaaaabbbbaaabbaabbaaaaaaabbbbbaaabaaaababba + abbbbbbbbaaabbbbbaaabbaaabbbaaaaaabbbbbbaaabbbaaaaaabbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaaabbbbbbbaabbbbbaaaaabbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbaaaabbbbbbbaaabbbbbbbbaabbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbbbbaaabbbbbbbbaabbbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabaaaaabbbbbbaaabbbbbbbbaabbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbbbaaaaaabbbbbaabbbbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaaabbbbbaaaaaaaabbbbabbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbaaaaabbbbbbaaaaaaaabaaaabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaababbbabbaabbbbbbbbbbbaaaabbaabbbaabbaaaaabbbbbbbba + abbabbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaaaabbbabbaabbbbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbaaaabbaabbbbabbbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaabaabbbbbbaaabaaabbbaaabbbbaaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbaaabbbbaaaaaaaaaabaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbbabbbbbaaaaabbaabaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbaabbbbbbbbbaaaaaaaaabbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbbbbbaaaaaaaaabbbbbaaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabbaaabbaaaaaabbbabbbbaabbbbbbabbaaabbbbabbbbbbabbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbbaabbbbaabbbaabbaabbbabbbbabbbbbbaabbaaabaabbbbbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbabbbaabbbaabbbbbbbbbaaaabaabbaabbbbbbbaabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaaabbaabbbbbbbaaaaaabaabbaabbbbbaaaabbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbabbbbbbaaaaaaaabaabaaaabbbbbbaaaabbbbaaaaabbaabbbaabaabbbaabbbbabba + aaaabbbbbbbbaaabbbbaaaabbbbbaaaaaaaaaabbabaaabbabbbbbbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaabbbbbaaaaaaaaaaaabbabaaabbaabbbbbaaabbbbaaaaaaaaabaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaabbbbaaaaaaaaabaaaabbabaaabbaaabbbbbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaabbbaaaaaaaabbbaaabbbbaabbbaaaaabbbaabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbaaabbbabbbbaaaaabbbbbbaaabbbbaaabbaaaaaabbbaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbabaabbbabbbbaaaabbbbbbaaaabbbbbabbbaaaaaaabbaaaaaaaaabbbbaaaababaabbbbabbbbaba + babbbbbaaaaaaaabbbbabbbaaaabbbbbbbaaaabbbbbbbbbaaaaaaabbbaaaaaaaabbbbaaabbbaaaabbbbbbbbaba + babbbbbaaaaaaabbbbabbbbaaaabbbbbbbbaaaaaabbbbbaaaaaaaaabbbaaaaaaabbbbaaabbbbaaaabbababbbaa + baaaaaaabaaabbbbbbabbbbaaaabbbbbbbbaaaabbaabbbaaaaaaaaabbbbaaaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbabbbaaaaaaabbbbbbbaaaabbbbbaaaaaaaaaabbbbbbaaaabbbaaababbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbbaaaaaaaabbbbbbaaabbbbbabaaaabaaaabbbbbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbaaabbbaaaaaaaabbbbbbaaaabaabbaaaaaaaaaabbbbbbaaaabbbaabbaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbabbbbaaaaabaabbbbbbaaaabbbaaaaaabbaaaabbbbbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbabbbbaaaaabaabbbbbbaaaabbabbbaaaabaaaabbbbbbaaaabbaaabbbabbbbbbabbbbbabba + aabbbbbbbbaaabbbbabbbaaaaaabaabbbbbaaaaabbbbbaaaaabaaaabbbbbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbabbbabaaabbaabbbbbaaaaabbbabbaaaaaaaaabbbbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbbabaaabbaabbbbbaaaaababbbaaaabaaaaabbbbbbbaaabaababbbaabbbaaaabbbbbbba + abaabbbbbaaaabbbabbbaaaaaabaaabbbbbaaaaabbbaabaaaaaaaaabbbbabbaaabaabaaabbabbbaaabbaaabbba + abaabbbaaaabaabbabbbaaaaabbaaabbbbbaaaaabbbbbbaaaaaaaabbbbaabbaaababbaabbbabbbaaabbbabbbba + abaabbbaaabbbaabbbbbbaaaabbaaabbbbbbaaaabbbaabaaabaaaabbbbaabbbaaaabbaaabbabbbaaaabbbbbbba + bbaabbbaaabbbaaabbbbaaaaabbaabbbaaaaaaaabbabbbaaaaaaaabbbbaabbaaaaaaabaaababbaaaaaaaabbaba + abbaaaaaabbbbaaabbbaaaaabbbaabbbabbaaaaabbbbaaaaaaaaaabbbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaabbbaaaabbbbaabbbaabaaaaabbabbbaaaaaaaabbbbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbbabbbbaaaabbbaabbbaabbaaaabbbbaaaaaaaaaabbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaabbbbbbbbbbbaaaaabbbaabbbaabbbaaabbbbbbaaaaaaabbbbbbbbbaaaaabbbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaaabbbaaaaabbbbaabbaaabbbaaabbbbabaaaaaaabbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbbbaaaaaabbaaabbbaabbbaaabbbbabaaaaaaabbbbbbbbbbaaaaaaaaabbaabbbbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaaabaaaabbabaaabaaabaabbaaaaaaaabbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbbbaaaaabbbbababbbbaaabbaabbbbbbabaaaaabbbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbbbbaaaaaabbababbbbaaabbaabbabaaabbbaaaaabbbbbbbbaaaaabbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbaaaaaabbaaaabbbaaabbaabbbbbbabbbaaaaabbbbbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbaaaababbaaaabbbaaabbaabbbbabababbaaaabbbbbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbaaaabbbaaaabbbbbaabbaababbbaababbaaaabbbbbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbaaaabbaaaaabbbbbaaabaabbbbbaababbaaaaabbbbbbbbabbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbbbbaaaabbbaaaaabbbbbaaabaabbbbaaababbaaaaaabbbbbbbaabbaaaaabbaabbbbbbbaaabba + bbbbaaabbbbbbbbbbaaaaabbbabaabbbbbbaabaaabbbbabbabbaaaaaaabbbbbbaabbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbbbaaabbbbabaaaabbbbbbaabbaabbbaabbaabaaaaaaabbbbbbaabbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbbbaaaabbbabbaabbbbbbbaaaaaaaabaabbaabaaaaaaaabbbbbbbbbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaaabbbbaaaaabbabaaabbbbbbbaaaaaaaabaabbaabaaaaaaaaabbbbbbbbbbaabbbaabbbbbbbaaabbb + abbbaabbbbbaabbbaaaaabbaaabbbbbbbbbaaaabbbbaaaabaabaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbaaaabbaaaaabbbbbbbbaaaabbbbbaabbaabaaaaaaaaaaabbbbbbbbbbbbbaabaaaaaabaabba + abbbaabbbbbbbbbbaaabaaaaaaabbbbbbbbaaaabbbbbaabbaaaabaaaaaaabaaaabbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbaaaaaaaaaaabbbbbbbbaaaabbbbbbbbaaaaabbaaaaaabbaaaaaaaaaabbbaabbbbbbbbaabba + abbbaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbbbbbaaaaabbbaaaaabbbbaaaaabaabbbaabbbbbbbbbabba + abbaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbabbbaaaaabbbbaaaaabbaaaaabaabbbbaabbbbbbbbbabba + abbaaabbbbbbbbbbbbbbbbbbaaabbbabbbbaaaabbbbabbbaaaaabbbbbaaaabaaaaaaabaabbbaabbbbbbbbbabba + abbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbbabbbaaaabbbbbbbaaaaabbaabaabbabbbabbbbbbbbbabba + abbaabbbbbbbbbbbbabbbbbaaaabbbbbbbbaaaabbbbabbbaaaabbbbbbbbbaabbbbaabaabbbbbabbbbbbbbbabba + abbaabbbbbbbbbbbabbaaaaaaabbbbbbbbbaaaabbbbabbbaaaabbbbbbbbbbabbbbbabbaabbbaabbbbbbbbbaaba + bbbaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbaaaabbbbabbbaaaabbbbbbbbbbbbbbbbaabbabbbabbbbbbbbbbbaba + bbaaaabaaaaaabbbaaaaaaaaabbbbbbbbbbaaaabbbbabbbaaaabbbbbbbbbbbbbbbbaabbabbbaabbbbbbbbbbaaa`, + map `abbbbbbbbabbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbabbbaaaaaabbbaaaabbbbbbbbbbbbaabbbba + abbbbbbbbbbaabbbaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbaababbbbbbbbbaabbbba + abbbbbbabaaaabaaaaaaaaaabbaaaaaabbbbbbaabbaaaaaabbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbbaabbbba + bbbbbbbabaaaabbbaabaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbaaaabbbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabababbaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbaabbaaaabbbbbbaabbbba + abbbbbaaaaabbbbbabbbaaaaaaaabbbbbbaaaabbaaabbbbbaaaabbaabbbbaaaaaaaaaaaaaaaaabbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbaaabbbbbbbabbbaaaaaaaaaaaaaaaaababbabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbabbaaaaaababbbbbbbabbbaaaaaaaaaaaaaaaaabbbaabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbabbbbbaabbbbbbbbbbbbbbaabbaaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbabbbbaaabbbbbbbabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaabbbbbbbbbaaaaaaabbbbbbbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbabbbbbabbbbbaaaaaaabbbbbbbbbbaaaaaaaaabbbbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaaabbaaabbabbaaaaaaaaabbbbbbbaaaaaaabbbbbbabbaaaaabbbaaabbbba + ababbbbaaaaaaaabbbbabbbaaaabbaabbbaaabbaaaaaaaaaaaaabbaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaabbbaaaaaaaaaaaabbbbaaabbbaaaaaaaabbbbbbbbaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaabbbbaaaabbaaaaaabbbbaaaabbaabbaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbaaabbbbbbaaabbbbbaaabbaabbaaaaaaabbbbbaaabaaaababba + abbbbbbbbaaabbbbbaaabbaaabbbaaaaaabbbbbaaabbbbbbbbabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaaabbbbbbaabbbbbbbbbaabbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbaaaabbbbbbaaabbbbbbbbbabbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbbbaaaaaaabbbbbabbbbbbbbaaaaabbaaabbbaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabaaaaabbbbbaaaaaaaababaabbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbaaaaaaaaabaaabbbbbbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaaabbbbbaababbbabaaabbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbaaaaabbbbbbaaaabbbabbabbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaaaabbaabbabbbbbabbbbbbaaaabbaabbbaabbaaaaabbbbbbbba + abbabbbbbbaabbaaaaabaaaabbbbaaaaaabbbbbbaaabaabbababbbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbbbaaababbaaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaaabaabbbbbbaaaaabbabbaaabbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbbbbbbbaaabaaaaabaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbbbbbbbaaabaaaaabbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbaabbbbbbabbaaabaaabbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbabbbbbbaabbaaaaaaabbbbbbbaaaaaaabaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaaabbaaaaaabbbabbbbbbbbbbaaaabaaabbbabbbbbbbabbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbbaabbbbaabbbaabbaabbbabbbbbbbbaaaaaabaaaaaaabbbbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbabbbaabbbabbbbbbbaaaaaaabbabaaabbbbbbbbabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaaabbbbbbbaaaaaaaaaabbabbaabbbbbbbbbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbbbbaaaaaaaaaaaabbabaaabbaabbbbbaabbbbaaaaabbaabbbaabaabbbaabbbbabba + aaaabbbbbbbbaaabbbbaabbbaaaaaaaaabaaaabbbbaaabbaaabbbbbaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaabbbaaaaaaabbbaaaabbbbaaabbaaaabbbbaabbbbaaaaaaaaabaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaabbbbaaaaabbbbbaaaabbbbaaabbaaaaabbbbabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaabbbbaaaabbbbbbbaaabbbbaabbbaaaaaabbbabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbaaabbbabbbaaaabbbbbbbbaaabbbbbaabaaaaaaaabbaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbabaabbbabbbaaaabbbbbbbbaaaaaaabbbbaaaaaaaabbaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbabbbaaaaabbbbbbbbbaaabbbabbbaaaaaaaabbbaaaaaaaabbbbaaabbaaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbabbbaaaaabbbbbbbbbaaaababbbaaaaaaaaabbbaaaaaaaabbbbaaabbbbaaabbbabbbbbaa + baaaaaaabaaaabbbbbabbbaaaaabbbbbbbbbaaaabbbbbaaaaaaaaabbbbaaaaaaabbbaaaaabbbaaaabbbabbbbba + aaaaaabbaaaabbbbbbabbaaaaabaaabbbbbbaaaabbabbaaaaaaaaabbbbbbbaaaabbbaabbabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbaabbaaaaabaaabbbbbbaaaabbbbbaaaaaaaaabbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbaaabbaaaaabbaabbbbbbaaaabbabbbaaaaaaaabbbabbbaaaabbbaabbaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbabbbaaaaabbaabbbbbbaaaaabbbbaaaaaaaaabbbabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbabbaaaaaabbaabbabbaaaaabbbabbaaaaaaaabbbabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbaabaaabbaabbabbaaaaabbbbbaaaaaaaaabbbabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbabbabaaaabbaabaabbbaaaabbbabbaaaaaaabbbbabbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbbbbbaaaaabbaabbbabbbaaaabbbbbbaaaaaaabbbbabbbbaaabaababbbaabbbaaaabbbbbbba + abaabbbbbaaaabbbabbaaaaaabbaabbbabbbaaaabbbbaaaaaaaaabbbbaabbbaaabaabaaabbabbbaaabbaaabbba + abaabbbaaaabaabbbbbaaaaabbbaabbbabbbaaaabbabbbaaaaaaabbbbaaabbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbaabbbbaaaaabbbaabbbaabbaaaabbbbaaaaaaaaabbbbbaabbbaaaabbaaabbabbbaaaabbbbbbba + bbaabbbaaabbbaabbbbaaaabbbbaabbaaabbaaaabbabbbaaaaaaabbbbbaabbaaaaaaabaaababbaaaaaaaabbaba + abbaaaaaabbbbaaabbbaaaaabbbaabbaaabbbaaabbbbaaaaaaaabbbbbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbabbbaaaaaabbbabbbaaabbbaaabbbbbbaaaaaabbbbbbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbbbbbaaaaaabbbabbbbaaaabaaabbbbabaaaaaabbbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaabaabbbbbbaaaaaaabbaaabbabaaabaaabbbbabaaaaaabbbbbbbbbbaaaaabbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaaaabbaaaaaaabbaababbbaaabaaabbbbbaaaaaaaabbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbbaaaaabbbaaabbbbbaaabbaabbbbbbaaaaaaabbbbbbbbbaaaaaaaaabbbaabbbbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaabbbaaabbbbbaaabaabbababaaaaaaabbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbbbaaaaaaabbaaaabbbbaaabaabbbbbbababaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbbbaaaaaaabaaaaabbbbaaabaabbbbabababaaaabbbbbbbbbaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbbbaaaaaabbaaaabbbbbbaaaaababbbaababbaaaabbbbbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbaaaaaabbaaaabbbbbbaaaaabbbbbaababbaaaabbbbbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbaaaaaabbaaaabbbbbaaaababbbbaaababbbaaaaabbbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbaaaaaaabaaaaabbbbbbbaaaaabbbbaabaabbaaaaabbbbbbbabbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbbbaaaaaabbaaaabbbbbbbbaaaaabbbaaabaabbaaaaaabbbbbbabbbaaaaabbaabbbbbbbaaabba + bbbbaaabbbbbbbbaaaaaaabbaaaabbbbbbbbaaaaabbbaabbaabbaaaaaaabbbbbbabbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbbaaaaaaabaaaaabbbbbbbbaaaaaaabaabbaabbaaaaaaaabbbbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbbaaaabbbbaaaabbbbbbbbbaaaabbbbaabbaabbaaaaaaaaabbbbbbbbbaabbaaabbbbbbbaaabbb + abbaaaaaaaabbbbaaaabbbbaaabbbbbbbbbbaaaabbbbaabbaaaaaaaaaaaabbbbbbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbbaaaabbbaaabbbbbbbbbbbaaaabbbbaabbaaaabaaaaaaabbbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbbaaaabbbbaaabbbbbbbbbbbaaabbbbbbbaaaaabbaaaaabbaaaaaaaaabbbbbaabaaaaaabaabba + abbbaabbbbbbbbaaaaabbbaaaabbbbbbbbbbaaaabbbbbbbaaaaabbbaaaaabaaaaaaaaaaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaabbbaaaaabbbbbbbbbaaaaabbbbbbbaaaaabbbbaaaaaaaaaaaababbbbbaabbbbbbbbaabba + abbbaabbbbbbbbaaaaabbaaabbbbbbbbbbbbaaaabbbabbbaaaaabbbbbaaaaabaaaaabaabbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaaaaaaaaabbbbbbbbbbbbaaaabbbabbbaaaaabbbbbbbaaabbbabbabbabbbaabbbbbbbbbabba + abbaaabbbbbbbbaaaaaaaaaaabbbbbbbbbbbaaaabbbabbbaaaaabbbbbbbbabbbbaabaabbbbbaabbbbbbbbbabba + abbaaabbbbbbbbabbbaaaaaaabbbbbbbbbbbaaaabbbabbbaaaaabbbbbbbbbbbbbbaabbabbbbabbbbbbbbbbabba + abbaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaaabbbabbbaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbabba + abbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbabbbaaaaabbbbbbbbbbbbbbbabbabbbbbbbbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbaaabbbbbbbbbbbbaaabbbbabbbaaaaabbbbbbbbbbbbbbbabbabbbbabbbbbbbbbbbaba + bbaaaabaaaaabbaaaabbaaabbbbbbbbbbbbaaaabbbaabbbaaaaabbbbbabbbbbbbbbabbabbbbabbbbbbbbbbbaaa`, + map `abbbbbbbbabbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + abbbbbbbbabaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaabbaaaaaabbbaaabbaabbbbbbbbbaabbbba + abbbbbbbbbbaabbbaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbabbabbbbbbbbbaabbbba + abbbbbbabaaaabaaaaaaaaaabbaaaaaabbbbbbaabbaaaaaabbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbbaabbbba + bbbbbbbaaaaaabbbaabaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbaaaabbbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabababbaaaaaaaaaaabbbaaaaaaabbbbaaaaaabbbbaabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbbabbbaaaaaaaabbbbbbaaaabbaabbbbbbbaaabbaabbbbaaaaaaaaaaaaaaaaabbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbabbaaabbbbbabbbbbbbbbbaaaaaaaaaaaaaaaaabbbaabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbabbbbbbbbbaaaabaabbbbaabbbbaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbabbbbbbbaaaaabbbbbbbbbaaaaaaaabbbabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaabbbbbbbbaaaaaaaaaabbbbbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbabbbbbabbbbbaaaaaaabbbbbbaaaaaaaaaaaaabbbbbbbbaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaaabbaabbaaaaaaaaaaaaabbbbbbbaaaaaaabbbbbbabbaaaaabbbaaabbbba + ababbbbaaaabaaabbbbabbbaaaabbaabbbaabbbaaaaaaaaaaaabbbaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbabbbbaabbbbbabbaabbbaaaabbbaaaaaaaabbbbbbbbaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaabbbbaabbbbbbbbaabbbbaaaabbaaabaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbaaabbbbbbbbaabbbbbaaabbaabbaaaaaaabbbbbaaabaaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbaaaaaabbbbaaabbbbbbbbaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaaabbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaaabbbbbaaaaaabbbbbaabbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbaaaabbbbbbaaaaaaabbbbabbbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbbaaaaaaaaaaaaabbbbbbbbbaaaaabbaaabbaaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabaaaaabbbbaababbbaabaaabbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbaaaaabbabbbabbbbbabbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbaaaaabbaabbabbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbaaaabbaabbabbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbbbaaabaabaabbbbbabbbbbbaaaabbaabbbaabbaaaaabbbbbbbba + abbabbbbbbaabbaaaaabaaaabbbbaaaaaabbbbbbaaaaabbaaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaaabaabbbbbaaaaaaaaabaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaabbbbbbbbbaaaaaaaabbaaaabbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbbbbabbaaaaaaaabbaaaabbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbabbbbbbbabbaaaaaaabbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbbbbbbbbaaabaaaaaaabbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbbbbbbaaaaabaaabaabbbbbbbbaaaaaaabaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbbbbaaaaaaabbaabbbbbbbbbbbabbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbbaabbbbabbbbaabbaabbbabbbbbaaaaaaaaabbaabaabbbbbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbabbbaabbbbbbbaaaaaaaaaaaabbbbaabbabbbbbabbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaaabbbbaaaaaaaaaaaaaabbbaaabbaabbbbbbbbbbaaaaaabbbabbbaaaaabbbaabaaaabba + baaabbbbbbbbbaabbbbaabbbaaaaaaaaabaaaaabbbaaabbaaabbbbaabbbbaaaaabbaabbbaabaabbbaabbbbabba + aaaabbbbbbbbaaabbbbaabbbaaaaaababbbaaabbbbaaabbaaaaabbbaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaabbbbaaaaabbbbbbaaabbbbaaabbaaaaabbbaabbbbaaaaaaaaabaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaabbbbbaaaabbbbbbbaaaabbbbaabbaaaaaabbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaabbbbaaaabbbbbbbbbaaaaabbabbaaaaaaabbaabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbaaaabaaabbaaaaaaabbbaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbabaabbbbbbaaaaabbbbbbbbbaaaaabbbbaaaaaaaabbbaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbbbbaaaaabbbbbabbbaaaabbbbbbaaaaaaabbbaaaaaaaaabbbbaaabbaaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbbbbaaaaabaaabbabbbbaaabbabbbaaaaaaabbbbaaaaaaaabbbbaaabbbbaaabbbabbbbbaa + baaaaaaabaaaabbbbbbbbaaaabbaaabbabbbbaaabbbbbaaaaaaaabbbbaaaaaaaabbbaaaaabbbaaaabbbabbbbba + aaaaaabbaaaabbbbbbbbbaaaabbbaabbaabbbaaabbabbbaaaaaaabbbbabbbaaaabbbaabbabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbbbbaaaaabbbaabbaabbbaaabbbbbaaaaaaaabbbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbbbbaaaaabbbbabbaabbaaaabbaabbaaaaaaabbbaabbbaaaabbbaabbaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbbbbabaaabbbbabbaabbbaaaabbbbaaaaaaaabbbaabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbbbbabbaabbbaabbaabbbbaabbbabbaaaaaabbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbbbaaaaaabbbaabbaaabbbaaabbbbbaaaaaabbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbbbaaaaabbbbabbbaaabbaaaabbbbbaaaaaabbbbbabbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbbbbaaaaabbbbabbbaaabbbaaabbbbbaaaaaabbbbbaabbbaaabaababbbaabbbaaaabbbbbbba + abaabbbbbaaaabbbbbbaaaaabbbaabbbaaabbbaaabbbaaaaaaaabbbbbaabbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbbbaaaaabbbbaabbbaaaabbaaababbbaaaaaabbbbbaaabbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbaabbbaaaaabbbbaabbbabaabbaaabbbaaaaaaabbbbbbbaabbbaaaabbaaabbabbbaaaabbbbbbba + bbaabbbaaabbbaabbbaaaaabbbbaabbbabaaabaaabbabbaaaaabbbbbbbaabbaaaaaaabaaababbaaaaaaaabbaaa + abbaaaaaabbbbaabbbaaaaabbbbaabbbbbaaabaaabbbbbaaaaabbbbbbbbabbaaaaaabbbaaaaaaabbbaaabbbaaa + abbbaaaabbbbbbbbbaaaaabaabbabbbbbbaaaabaabbbbbaaaaabbbbbbbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbbbbaaaaaababbabbbabbbaaabaabbbbaaaaaabbbbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbaaabbbbbaaaaaababaaabbbbbbaaaaaabbbabaaaaaabbbbbbbbbbaaaaabbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaaabbbaaaaaaabbaaaabbbbbbaaaaabbbbaaaaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbbaaaaaaabbaaabbbbbbaaaaaabbbbbabaaaaabbbbbbbbbaaaaaaaaabbbaabbbbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaaabaaaaabbbbbbaaaaabbbbaabaaaaabbbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbbaaaaaaaabaaaaabbbbbbbaaaaabbbaabaaaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbaaaabbbbaabaaaaaaabbbbbbbbaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbaaaababbaabaabaaaaabbbbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbaaaaaabbaaaaabbbbbbbbaaaabbbbaabbabbaaaabbbbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaaabbaaaaabbbbbbbbaaaabbbbaabbabbaaaaabbbbbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaaabbaaaaabbbbbbbbaaaabbbaaabbabbaaaaaabbbbbbabbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbaaaabbbaaabbabbaaaaaaabbbbbbbbbaaaaabbaabbbbbbbaaabba + bbbbaaabbbbbbbbaaaaaabbaaaaabbbbbbbbbaaaabbbaaabbaabaaaaaaaabbbbbbbbbbaaabaaabbbbbbbaaabba + bbbaaaabbbbbbbaaaaaaabbaaaaabbbbbbbbbaaaabbbaaabbaabaaaaaaabbbbbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbaaaaaaabbaaaaabbbbbbbbbaaaabbbaaabbaaaaaaaaaababbbbbbbbbbbbbaaabbbbbbbaaabbb + abbaaaaaaabbbbaaaaaabbaaaaaabbbbbbbbbaaaabbbbbabbaaabbaaaaabaaaaaaaabbbbbbaaabbbbbbbaaabbb + abbbaabbbbbbbaaaaaabbbaaaabbbbbbbbbbbaaaabbbbbbbaaaabbbaaaabaaaaaaaaaabbbbbaabbbbbbbbaabbb + abbbaabbbbbbbaaaababbbaaaabbbbbbbbbbbaaaabbbbbbbaaaabbbbaaaaaaaaaaaaaabbbbbaabaaaaaabaabba + abbbaabbbbbbbaaaabbbbaaabbbbbbbbbbbbbaaaabbabbbbaaaabbbbbaaaabaaaaabaabbbbbaabbbbbbbbaabbb + abbbaabbbbbbbaaaabbbbaaaabbbbbbbbbbbaaaaabbabbbaaaaabbbbbbaabbbbabaabaabbbbaabbbbbbbbbabba + abbbaabbbbbbbaaaabbbbaababbbbbbbbbbbbaaaabbabbbaaaaabbbbbbbbbbbbaababbabbbaaabbbbbbbbbabba + abbaaabbbbbbbaaaabbbbbabbbbbbbbbbbbbbaaaabbabbbaaaaabbbbbbbbbbbbbabbaabbbbaaabbbbbbbbbabba + abbaaabbbbbbaaaaabbbaabaabbbbbbbbbbbbaaaabbabbbaaaaabbbbbbbbbbbbbaabbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbaaaaaabaaaababbbbbbbbbbbbaaaabbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabba + abbaabbbbbbbaaaaaabaaaababbbbbbbbbbbbaaaabbabbbbaaaabbbbbabbbbbbbbabbbbbbbbabbbbbbbbbbabba + abbaabbbbbbaabbbaaaaaabbbbbbbbbbbbbbaaaabbbabbbbaaaabbbbbabbbbbbbbabbbbbbbabbbbbbbbbbbaaba + bbbaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbaaaabbbabbbbaaaabbbbbabbbbbbbbabbbbbbbbabbbbbbbbbbbaba + bbaaaabaaaabbbbbbaaaaabbbbbbbbbbbbbbaaaabbbabbbbaaaabbbbbabbbbbbbbabbbbbbbbabbbbbbbbbbbaaa`, + map `abbbbbbbbabbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbabbbbbbbbbaabbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaabbaaaaaabbbaaabbaabbbbbbbbbaabbbba + abbbbbbbbbbaabbbaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbabbbbbbbbbaabbbba + abbbbbbabbaaabaaaaaaaaaabbaaaaaabbbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbababbbbbbaabbbba + bbbbbbbaaaaaabbbaabaaaaaaaaabaaabbbbbaaaaaaaabaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbaaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabababbaaaaaaaabbbbbbbbaaaaabbbbaaaaaabbbbbabaaaaaabbbbaaabbbba + abbbbbbaaaabbbbbabbbaaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbaabbbbaaaaaaaaaaaaaaaabbbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbaaaabbbbbabababbbbbbbaaaaaaaaaaaaaaaaaaabaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbabbbabbbbaaaaaaabbbbbbaaaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbabbbbbbbbaaaaaaaaabbbaabbbaaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaababbbbbbbbaaaaaaaaabbbabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaabbbbbaaaaaaaaaaaaabbbabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbabbbbbabbbbbaaaaaaabbbbbaaaaaaaaaaaaabbbbbbbbbaaaaabbbbbbabbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaabbbabbbaaaaaaaaaaaabbbbbbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabbaaabbbbabbbaaaabbaabbbabbbaaabbbbbbbbabbbbaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbabbbaabbbbbbbbbaabbbaaaabbbaaaaaaaabbbbbbbbaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaabbbaabbbbbbbbbaabbbbaaaabbaaabaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaaaabbbbaabbbbbbbbbabbbbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbaaaaaabbbbaabaaabbbbbabbbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaaabbbbbaaaaaaabaaaabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbaaaabbbbbaaaaaaaabaaabbbbbbbbbaaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbaaaabbbbabbaabbbbbbbbbbaaaaabbaaabbaaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbaaaabbbabbbabbbbbbbbbbbaaabbbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbaaaaabbaabbabbbbbbabbbaaaabbaabbbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbaaaabaaaabbbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbaaaaaabbabbbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbbaaaaaabbaabbbbbabbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbabbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaaaaaaaaaaaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaabbbbbaabbabbbbbaaaaaaababaaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaabbbbbbabaaaaaababbbaaaabbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbbbbbaabaaaaaaabbbaaaabbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbbbbbbbbaaabaaaaaabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbbbbbbaaaaabbaaaaabbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbbbbaaaaaaabbaabaabbbbbbbbaaaaaaabaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbbaaaaaaaaaabbbbbbbbbbbbbbabbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbbaabbbaabbbbaabbaabbbabbbbaaaaaaaaaaabbbaaabbabbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbbbaaaaaaaabbaaaabbbaaabbaabbbbbbbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaabbbbbaaaaaaabbbaaaabbbaaabbaaabbbbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbbaaaaaaaabbbaaaabbbaaabbaaaabbbbabbbbaaaaabbaabbbaabaabbbaabbbbabba + aaaabbbbbbbbaaabbbbaabbbaaaaaabbbbbbaaabbbbaabbaaaaabbbaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaabbbbaaaabbbbbbbbaaabbbbaabbaaaaabbbaabbbbaaaaaaaaabaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaabbbbaaabbbbbbbbbbaaaaaaaabaaaaaabbbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaabbbbbaaaabbbbbaaabbaaabbbabbaaaaaabbbaabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbaaabbbbbbaaaaabbbbbaaabbaaaaababbaaaaaabbbbaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbabaabbbbbbaaaaabbbbbbaabbaaabbbbbbaaaaaabbbbaaaaaaaaabbbbaaabbaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbbbaaaaaabbbbbaaabbaaaababbbaaaaaabbbbaaaaaaaaabbbbaaabbbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbbbbaaaaabaaabbbaabbaaaabbbbaaaaaaabbbbbaaaaaaaabbbbaaabbbbaaabbbabbbbbaa + baaaaaaabaaaabbbbbbbbaaaaabbaabbbaabbbaaabbbbbaaaaaabbbbbaaabaaaabbbaaaaabbbaaaabbbabbbbba + aaaaaabbaaaabbbbbbbbbaaaabbbbabbbaaabbaaabbbbbaaaaaabbbbbaabbaaaabbbaabbabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbbbbaaaabbbbbabbaaaabbaaabbbbbaaaaaabbbbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbbbbaaaaabbbbabbaaaaabaaaabbbbaaaaabbbbbaabbbaaaabbbaabbaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbbbbabaaabbbbabbaaaaabaaabbbaaaaaaabbbbaaabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbbbbaaaaabbbbabbaabbabbaabbbbbaaaaabbbbaaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbbbaaaaaabbbaabbaabbaabaaabbbaaaaaabbbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbbbaaaaabbbbabbbaabaabbaaabbbbbaaaabbbbbaabbbaaaabbaaabbbaabbbbaaabbabbbaa + abbbbbbbbbaaabbbbbbaaaaabbbbabbbaaaaaabaaabbbaaaaaabbbbbbaabbbaaabbababbbaabbbaaaababbbbaa + abaabbbbbaaaabbbbbbbaaabbbbaabbbbabaaabaaabbbbbaaaabbbbbaaabbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbbbbaaaabbbbaabbbabbaaaaaaabbbaaaaaabbbbbbaaabbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbabbbbaaaaabbbbaabbbabbbaaaaaabbbbbaaaabbbbbbbaabbbaaaabbaaabbabbbaaaabbbbbbba + bbaabbbaabbbbaabbbaaaaabbbbaabbbabbbaaaaaabbbbaaaaabbbbbbbaabbaaaaababaaababbaaaaaaaabbaaa + abbaaaaaabbbbabbbaaaaaabbbbaabbbabbbaaaaaabbbaaaaaabbbabbbbabbaaaaaabbbaaaaaaabbbaaabbbaaa + abbbaaaabbbbbbbbbaaaaaaaabbabbbbbbbbbaaaaabbbbaaaaabbbbbbbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbbbaaaaaaababbaabbbbbbbbaaaaabbbbaaaaabbbbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbaaabbbbaaaaabababbaabbbbbbbbaaaaabbbbaaaaaabbbbbbbbbbaaaaabbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaaabbaaaaaaaabbaaaabbbbbbbaaaaabbbbaaaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbaaaaaaaabbaaabbbbbbbbbaaaabbbbaaaaaaabbbbbbbbbaaaaaaaaabbbaabbbbbbbaaabbba + abbbaaabbbbbbbbbaaaaaaaabbaaaaaabbbbbbaaaabbbbabaaaaaabbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbbaaaaaabbbbaaaabbbbbbbbaaaabbbaabbaaaaaabbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbbaaaaaabbbaaaaabbbbbbbbaaaabbbbabbabaaaabbbbbbbbaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaaabbbaaaabbbbbbbbbaaaaabbbabbabbaaaabbbbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbaaaaabbaabbabbaaaaabbbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbbbaaabbaaabbabbaaaaaabbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaaabbbaaaabbbbbbbbbbbaaabbbaabbaabaaaaaaabbbbbbbbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaabbbaaaabbbbbbbbbbbaaabbbaabbaabaaaaaabbbbbbbbbbaaaaabbaabbbbbbbaaabba + bbbbaaabbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaaabbbaabbaabaaaaaabbbbbbbbbbbbaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbaaaaaabbbaaaabbbbbbbbbbbaaaabbbaabbaaaaaaaaabaaabbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbaaaaaaabbaaaaabbbbbbbbbbbbaaabbbbbabaaabbaaaaaaaaaaaaabbbbbbbaaabbbbbbbaaabbb + abbaaaaaabbbbaaaaaabbbaaaaabbbbbbbbbbbbaaabbbbbbaaaabbbaaaaaaaaaaaaabbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbaaaaaaabbaaaaaabbbbbbbbbbbbaaabbbbbbaaaaabbbaaabaaaaaaaaabbbbbbaabbbbbbbbaabbb + abbbaabbbbbbaaaaaaabbaaaaabbbbbbbbbbbbbaaabbbbbbaaaaabbbbaabbbaaaababbbbbbbaabaaaaaabaabba + abbbaabbbbbbaaaaaabbbaaaaabbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbbbabababbbbbbbaabbbbbbbbaabbb + abbbaabbbbbaaaaaaabbaaaaabbbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbbabbababbbabaaabbbbbbbbaabba + abbbaabbbbbaaaaaaabbaaaaabbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbbbbbbabaabbbbaaaaabbbbbbbbbabba + abbaaabbbbbaaaaaabbbaaaaabbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbaaaaaabbaaaaaabbbabbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbaaaaaabbaaaaaabbaabbbaabbbaaaaabbbbbbaaaabbbbbabbbbbbbabbbbbbbbaabbbbbbbbbbabba + abbaabbbbbbaaaaabbbaaaaaabbaabbbbbbbbaaaaabbbbbbaaaabbbbbabbbbbbbaabbbbbbbbabbbbbbbbbbabba + abbaabbbbbaaaaaabbaaaaabbbbbbbbbbbbbbaaaaabbbbbbaaaabbbbbabbbbbbbaabbbbbbbbaabbbbbbbbbaaba + bbbaabbbbbaaaaaabbaaaaabbbbbabbbbbbbbaaaaabbbbbbaaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbaaba + bbaaaabbbbbbbbbbbaaaaaabbbbbabbbbbbbbaaaabbbbbbbaaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbbaaa`, + map `abbbbbbbbabbabbbbbabbbbbbbbaaabaaabbbbbbbbbbaaaabbbbbbbbbaaaaaabbbaaaabbbaabbbbbbbaaabbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbbaabbbbbbbaabbaaaaaabbbaaabbbaabbbbbbbaaabbbba + abbbbbbbbbbaabbbaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbaaabbbba + abbbbbbaabaaabaaaaaaaaaabbaaaaaaabbbbbaabbaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbba + bbbbbbbbaaaaabbbaabaaaaaaaaabaaabbbbbaaaaabbbbbaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabababbaaaaabbbbbbbbbbbaaaaabbbbaaaaaabbbbbabbbaaabbbbbaaabbbba + abbbbbbaaaabbbbbabbbaaaaaaaabbbbbbaaaabbbabbbbbbbbbbbbaaabbbaaaaaaaaaaaaaaaabbbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbbaaabbbbbbaaaaabbbbbbaaaaaaaaaaaaaaaaababaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbabbbbbbbaaaaaaaaabbbbbaaaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbbaaaaaaaaabbbaaaabbbaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaabbbbbbbbbaaaaaaaaabbbaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbaaaabbbbbbaaabbbabbbbbbbaaaaaabbbaaaaaaaaaaaaabbbbabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbabbbbbabbbbbaaaaaaabbbbbaaaaaaaaaaaaabbbbbbbbbaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaabbbbbbaaabbbbabbbaabbbbbbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabbaaabbbbabbbaaaabbaabbbbbbaaabbbbbbbbaabbbaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbbbbaaabbbbbbbbbabbbaaaaabbbaaaaaaaabbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbbbbbaabbbbbbbbbaabbbbbaaabbbaaabaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaababbbaaabaabbbbbaabbbbbaaaabbaabbaaaaaaabbbbbaaabaaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbaaaaaabbbaaaaaaaabaaabbbbbbbbaaaaaabbbaaaaaaabbbbaaaaaaabbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaabbbbbaaaaaaaabaaabbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbabbbaaaabbbbaaaabbbbabaaabbbbbbbbbaaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbaaaabbbaabbabbbbbbbbbbbaaaaabbaaabbaaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbaaaabbaabbabbbbbbbbbbbbaaabbbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbaaaabbaaababbabbbbabbbaaaabbaaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbaaaaaaaaaaabbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbaaaaabbbabbbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaaaaaaaaababbbbbabbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbabbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaaabaabaabaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaaabbbbaabbabbbabaaaaaababbaaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaabbbbbbabaaaaaababbbaaaabbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbbbbaaabaaaaaaabbbaaaabbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbbbbbbbaaaabaaaaaabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbbbbbbaaaaabbaaababbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbbbbaaaaaaaabbbbaabbbbbbbbaaaaaaabaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbbaaaaaaaaaabbbbbbbbabbbbbabbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbbaabbbaabbbbaabbaabbbabbbbaaaaaaaaaaabbbaaabbaabbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbbbaaaaaaaabbaaaabbbaaabbaaabbbbbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbbbaaaaaaabbbbaaabbbaaabbaaaabbbbbbbbaaaaaabbaabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbbaaaaaaabbbbbaaabbbaaabbaaaaabbaabbbbaaaaabbabbbbaabaabbbaabbbaabba + aaaabbbbbbbbbaabbbbaabbbaaaaaabbbbbaaaaabbaaabbaaaaabbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaabbbbaaaabbbbbbbabaaabbaaabbaaaaabbbaabbbbaaaaaaaabbaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaabbbbaaaabbbbbaaabbaabbaabbaaaaaabbbaabbbbaaaaabaaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaababbbaaaabbbbbbaaabbaaaababbaaaaaabbbaabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbbbbbaaaabbbbbbaaaabaaabbbbbaaaaaabbbaaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbabaabbbbbbaaaaabbbbbbaaaabaaaaabbbaaaaaabbbaaaaaaaaaabbbbaaabbaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbbbbaaaaaabbbbbaaaabaaabbbbaaaaaabbbbbaaaaaaaaabbbbaaabbbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbabbbaaaabbaabbbaaaabaaaabbbbaaaaabbbbbbaaaaaaaabbbbaaabbbbaaabbbabbbbbaa + baaaaaaabaaaabbbbbabbaaaaabbaaabbaaaabbaaabbbaaaaaabbbbbbaaabaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbbbbaaaabbbbaabbaaaabbaaabbbbbaaaabbbbbbaabbaaaabbbaabbabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbabbbaaaaabbbbabbaaaabbaaabbbbaaaaabbbbbaabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbabbaaaaabbbbbabbaabaabaaabbbbbaaaabbbbaaabbbaaaabbbaabbaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbabbaaaaaabbbabbbaabaabaaabbbbaaaaabbbbaaabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbabbaaaaabbbbabbbabbaabbaabbbabaaaabbbbaaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbbbbaaaabbbbaabbaabbaabbaaabbbaaaaabbbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbbbbaaaabbbbaabbaaaaaaabaabbbbaaaaabbbbbaabbbaaaabbaaabbbaabbbbaaabbabbbaa + abbbbbbbbbaaabbbbbbaaaaabbbbaabbbaabaaabaaabbbbaaaabbbbbbaabbbaaabbababbbaabbbaaabbabbbbaa + abaabbbbbaaaabbbbbbaaaabbbbbaabbbbbaaaabbaabbbaaaaabbbbbbaabbbaaabaabaabbbabbbaaabbaabbbba + abaabbbaaaabaabbbbaaaaabbbbaabbbbbbaaaaaaaababbaaaabbbbbbaaabbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbabbbbaaaabbbbbaabbbbbbbbaaaaaabbbaaaaabbbbbbbaabbaaaaabbaaabbabbbaaaabbbbbbba + bbaabbbaabbbbbbbbaaaaabbbbbaabbbbabbbaaaaaabbabaaaabbbbbbbaabbaaaaaaabaaababbaaaaaaaabbaaa + abbaaaaaabbbbbbbbaaaabbbbbaaabbbbbbbbbaaaaabbbaaaaabbbabbbbbbbaaaaaabbbaaaaaaabbbaaabbbaaa + abbbaaaabbbbbbbbaaaaabbbbbaaabbbbbbbbbaaaaabbbaaaaabbbabbbbbbbaaaaaabbbbaaaaaabbbaaaabbabb + abbbbaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbaaaaabbbaaaaabbbbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaaaaaabbbbaaaaabbbbaaabbbbbbbbbbaaaaabbaaaaaabbbbbbbbbbbaaaaabbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaabbbaaaaabbbbaaabbbbbbbbbbaaaaabbaaaaaaabbbbbbbbbbbaaabbbbbbbbaabbbbbbbaaabbbb + abbbaaabbbbbbbbbaaaaaaaabaaabbbbbbbbbbaaaabbbbaaaaaaabbbbbbbbbbaaaaaaaabbbaabbbbbbbaaabbba + abbbaaabbbbbbbbbaaaaaaaaaaaabbbbabbbbbbaaaabbbaaaaaaaabbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaaaaabbaaaabbbbbbbbbbaaaaabbbaabaaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaaaabbaaaaabbbabbbbbbaaaabbbabbaaaaaabbbbbbbbaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaaabbaaaabbbbbbbbbbbaaaabbbabbabaaaaabbbbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaaabbbaaaabbbbbbbbbbbaaaabaaabbabbaaaaabbbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaaabbaaaaabbbbbbbbbbbaaaabbaabbabbaaaaaabbbbbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaaabbbaaaaabbbabbbbbbaaaabbaabbaabaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbaaaaaaabbbbaaaaabbbabbbbbbaaaabbaabbaabaaaabbbbbbbbbbbbaaaaabbaabbbbbbbaaabba + bbbbaaabbbbbbaaaaaaabbbbaaaabbbbabbbbbbaaaabbaabbaabaaaabaabbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbaaaaaaabbbaaaaabbbbabbbbbbaaaabbbaabaaabaaaaaaaaabaabbbbbaabbaaabbbbbbbaaabbb + bbbaaaabbbbbbaaaaaabbbbaaaaabbbbabbbbbbaaaabbbbaaaaabbaaaaaaaaaaaabbbbabbbaaabbbbbbbaaabbb + abbaaaaabbbbaaaaaaabbbaaaaabbbbbabbbbbbaaaabbbbbaaaabbbaaaaaaaaaaaabbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbaaaaaabbbbaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbabbbaababaabbbabbbbaabbbbbbbbaabbb + abbbaabbbbbaaaaaaabbbbaaaaabbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbabbababbbaabbbaabaaaaaabaabba + abbbaabbbbbaaaaaaabbbaaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbabababbbabbbbaabbbbbbbbaabbb + abbbaabbbbbaaaaaabbbbaaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbabbabbbbbbabaaabbbbbbbbaabba + abbbaabbbbaaaaaaabbbbaaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbabbbbbbaaaaabbbbbbbbaabba + abbaabbbbbaaaaaaabbbaaaaabbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaabbbbbaaaaaabbbbaaaaabbbabbbbbbbbaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbaaaaaabbbbaaaaabbbaabbbbabbaaaaaabbbbbaaaabbbbbbbbbbbbbabbbbbbbbaabbbbbbbbbbabba + abbaabbbbaaaaaaabbbaaaaabbbbaabbbbbbbaaaaaabbbbbaaaabbbbbabbbbbbbabbbbbbbbbbbbbbbbbbbbabba + abbaabbbbaaaaaabbbbaaaaabbbbabbbbbbbbaaaaaabbbbbbaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbbaabbbbaaaaaabbbbaaaabbbbbabbbbbbbbaaaaaabbbbbbaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbaaba + bbaaabbbbaaaaaabbbaaaaabbbbbabbbbbbbbaaaaaabbbbbbaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbaaba`, + map `abbbbbbbbabbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbabbbbbbbbaabbbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbbaabbbbbbbaabbaaaaaabbbaaabbbabbbbbbbbaabbbbba + abbbbbbbbbbaabbbaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbaaabbbba + abbbbbbaabaaabaaaaaaaaaabbaaaaaaabbbbbaabbaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbba + bbbbbbbbaaaaabbbaabaaaaaaaaabaaabbbbbaaaaabbbbbaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabababbaaaaabbbbbbbbbbbaaaaabbbbaaaaaabbbbbabbaaaabbbbbaaabbbba + abbbbbbaaaabbbbbabbbaaaaaaaabbbbbbaaaabbbabbbbbbbbbbbaaabbbbaaaaaaaaaaaaaaaabbbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaabaabbbbaaabbbbbbaaaaabbbbbbaaaaaaaaaaaaaaaaababaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbabbbabbbbbbbaaaaaaaaabbbbaaaaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbbaaaaaaaaabbbaaaabbbaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbaaaaaaaaabbbaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbaaabaabbbaaaaaaaaaaaaabbbbabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbabbbbbabbbbbaaaaaaabbbbbaaaaaaaaaaaaabbbbbbbbbaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaabbbbbbaaabbbbabbbaabbbbbbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + ababbbbaaabbaaabbbbabbbaaaabbaabbbbbbaaabbbbbbbbaabbbaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbbbbaaabbbbbbbbbabbbaaaaabbbaaaaaaaabbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabbbbbaaabbbbbbbbaabbbbbaaaabbaaabaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaababbbaaabaabbbbbaabbbbbaaaabbaabbaaaaaaabbbbbaaabaaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbaaaaaabbbaaaaaaaabaaabbbbbbbbaaaaaabbbaaaaaaabbbbaaaaaaabbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaabbbbbaaaaaaaabaaabbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbaaaabbbbabaaabbbbbbbbbaaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbaaaabbbaabbbbbbbbbbbbbbbaaaabbaaabbaaabbbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbbaaaabbaabbbbbbbbbbbbbbbaaabbbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbbaaaabbaabbabbababbbbbbaaaabbaabbbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbaaaaaaaaaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbaaaaabbbabbbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaaaaaaaaaabbbbbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbabbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaaabaabaabaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaaabbbbaabbabbbabaaaaaababbaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaaabbaaaabbbbaabbbbaabbbbbbabaaaaaabbbbaaaaabbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbbbbaaabaaaaaaabbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbbbbbbbaaaabaaaaaabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbabbbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbbbbbbaaaaabbaaababbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbbbbaaaaaaaabbbbaabbbbbbbbaaaaaaabaaaabbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbbaaaaaaaaaabbbbbbbbabbbbbabbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + bbbaabbbaabbbbaabbaabbbabbbbaaaaaaaaaaabbbaaabbaabbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbbbaaaaaaaabbaaaabbbaaabbaaabbbbbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbbbaaaaaababbbaaabbbaaabbaaaabbbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbbbaaaaaabbbbbaaabbbaaabbaaaaabbaabbbbaaaaabbabbbbaabaabbbaabbbaaaba + aaaabbbbbbbbbaabbbbaabbbaaaaaabbbbbaaaaabbaaabbaaaaabbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaabbbbaaaabbbbbbbabaaabbaaabbaaaaabbbaabbbbaaaaaaaabbaabbbaabbbbbbbbbaba + aaaabbbbbbbbbaaaaaaabbbbaaaabbbbbaaabbaabbaabbaaaaaabbbaabbbbaaaaabaaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaababbbaaaabbbbbbaaabbaaaababbaaaaaabbbaabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbbbbbaaaabbbbbbaaaabaaabbbbbaaaaaabbbaaabbaaaaabbbbaaaabbbaabbbbabbbbaba + baabbbbbbbbbaaaabbbbbbaaaaabbbbbbaaaabaaaaabbbaaaaaabbbaaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbbbbaaaaaabbbbbaaaabaaabbbbaaaaaabbbbbaaaaaaaaabbbbaaabbbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbabbbaaaabbaabbbaaaabaaaabbbbaaaaabbbbbaaaaaaaaabbbbaaabbbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbabbaaaaabbaaabbaaaabbaaabbbaaaaaabbbbbbaaabaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbbbbaaaabbbbaabbaaaabbaaabbbbbaaaabbbbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbabbbaaaaabbbbabbaaaabbaaabbbbaaaaabbbbbaabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbabbaaaaabbbbbabaaabaabaaabbbbbaaaabbbbaaabbbaaaabbbaabbaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbabbaaaaaabbbabbbaabaabaaabbbbaaaaabbbbaaabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbabbaaaaabbbbabbbaabaabbaabbbabaaaabbbbaaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbbbbaaaabbbbaabbaaabaabbaaabbbaaaaabbbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbbbbaaaabbbbaabbbaabaaabaabbbbaaaaabbbbbaabbbaaaabbababbbaabbbbaaabbabbbaa + abbbbbbbbbaaabbbbbbaaaaabbbbaabbbaabaaabaaabbbbaaaabbbbbbaabbaaaabaababbbaabbbbaaababbbbaa + abaabbbbbaaaabbbbbbaaaabbbbbaabbbbaaaaabbaabbbaaaaabbbbbbaaabbaaabaabaabbbabbbaaabbaabbbba + abaabbbaaaabaabbbbaaaaabbbbaabbbbbbbaaaaaaababbaaaabbbbbaaabbbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbabbbbaaaabbbbbaabbbbbbbbaaaaaabbbaaaaabbbbbbbabbbaaaaabbaaabbabbbbaaababbbbba + bbaabbbaaabbbbbbbaaaaabbbbbaabbbbabbbaaaaaabbabaaaabbbabbbaabbaaaaababaaababbaaaaaaaabbaaa + abbaaaaaabbbbbbbbaaaabbbbbaaabbbbbbbbbaaaaabbbaaaaabbbabbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbbbaaaaababbbaaabbbbbbbbbaaaabbbbaaaaabbbabbbbbabaaaaaabbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbaaaaabbbaaaaabbbabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaaababbbbbaaaaabbbbaaabbbbbbbbbbaaaaabbaaaaaabbbbbbbbbbbaaaaabbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaabbbaaaaababbaaabbbbbbbbbbaaaaabbaaaaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbaaaaaaaabaaabbbbbbbbbbbaaabbbbaaaaaaabbbbbbbbbbaaaaaaaabbbaabbbbbbbaaabbba + abbbaaabbbbbbbbbaaaaaaaaaaaabbbbabbbbbbaaaabbbaaaaaaaabbbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaaaaabbaaaabbbbbbbbbbaaaaabbbbabaaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaaaabbaaaaabbbabbbbbbaaaabbbabbaaaaaabbbbbbbbaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaaabbaaaabbbbbbbbbbbaaaabbbabbabaaaaabbbbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaaabbbaaaaabbbbbbbbbbaaaabaaabbabbaaaaabbbbbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaabbaaaaaabbbbbbbbbbaaaabbaabbabbaaaaaabbbbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaabbbaaaaabbbbbbbbbbaaaabbaabbaabaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbaaaaaaabbbbaaaaabbbbabbbbbaaaabbaabbaabaaaaabbbbbbbbbbbaaaaabbaabbbbbbbaaabba + bbbbaaabbbbbbaaaaaaabbbbaaaabbbbbabbbbbaaaabbaabbaabaaaabaabbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbaaaaaaabbbaaaaabbbbbabbbbbaaaabbbaabaaabaaaaaaaaabaabbbbbaabbaaabbbbbbbaaabbb + bbbaaaabbbbbbaaaaaabbbbaaaabbbbbbabbbbbaaaabbbbaaaaabbaaaaaaaaaaaabbbbabbbaaabbbbbbbaaabbb + abbaaaaabbbbaaaaaaabbbaaaaabbbbbbabbbbbaaaabbbbbaaaabbbaaaaaaaaaaaabbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbaaaaaabbbbaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbabbbaababaabbbabbbbaabbbbbbbbaabbb + abbbaabbbbbaaaaaaabbbbaaaaabbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbabbababbbaabbbaabaaaaaabaabba + abbbaabbbbbaaaaaaabbbaaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbabababbbabbbbaabbbbbbbbaabbb + abbbaabbbbbaaaaaabbbbaaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbabbabbbbbbabaaabbbbbbbbaabba + abbbaabbbbaaaaaaabbbbaaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaabbbbbaaaaaaabbbaaaaaaabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaabbbbbaaaaaabbbbaaaaabbbabbbbbbbbaaaaaabbbbbaaaabbbbbbbbbbbbbbababbbbbbaabbbbbbbbaabba + abbaabbbbbaaaaaabbbbaaaabbbbabbbbbbbbaaaaaabbbbbaaaabbbbbbbbbbbbbabbbbbbbbaabbbbbbbbbbabba + abbaabbbbaaaaaaabbbaaaaabbbbabbbbbbbbaaaaaabbbbbaaaabbbbbabbbbbbbabbbbbbbbbbbbbbbbbbbbabba + abbaabbbbaaaaaabbbbaaaaabbbbabbbbbbbbaaaaaabbbbbbaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbbaabbbbaaaaaabbbbaaaaabbbbabbbbbbbbaaaaaabbbbbbaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbaaba + bbaaabbbbaaaaaabbbaaaaaabbbbabbbbbbbbaaaaaabbbbbbaaabbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbaaba`, + map `abbbbbbbbbbbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbabbbbbbbbaaabbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbbaabbbbbbbaabbaaaaaabbbaaabbbabbbbbbbbaaabbbba + abbbbbbaabbaababaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbaaabbbba + abbbbbbbabaaaaaaaaaaaaaabbaaaaaabbbbbbaabbaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbbabbbbbbaaabbbba + bbbbbbbbaaaaaabbabbaaaaaaaaabaaabbbbbaaaaabbbbaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbabaaaabbbabbaaaaaaaaabababbaaaabbbbbbbbbbbaaaaaabbbbbaaaaabbbbaabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbbabbbaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbaaabbbaaaabaaaaaaaaaaaaabbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaabaabbbaaabbbbbaaaaaabbbbbbbaaaaaaaaabaaaaaaababaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbabbbbbbbbbbaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaabbbaabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbaaaaaaaaabbbaaaaababaaaaaaaabbbbbbbaabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaabbbbbbbbbaaaaaaaaabbbbaabbbbbaaaabbbbbbbbbbbaabbbbaaaaabbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbbaaaaaaaaaaaabbbaabbbbbaaaaabbbbbbbbbbaabbbbaaaaabbbba + abaabaaaabbbbaabbbbabbbbbaaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbaaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaabbbbbaaaabbbabbbaabbbbbbbaaabaaaaabbbbbbbbbbaaaabbbaaabbbba + ababbbbaaaabaaabbbbabbbaaaabbaabbbbbbaabbbbbbbbbabbbbaaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbbbaaabbbbbbbbbabbbaaaaaabbbaaaaaaaabbbbbbbbaabbbbaabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbbbbaaabbbbbbbbbabbbbbbaaabbbaabbaaaabbbbbbbbaaabbaabbbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaaabbbbaaabbabbbbbbabbbbbbbaaabbaabbaaaaaaabbbbbaaabaaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbaaaaabbbaaabaaaabaaabbabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbabbbbbaaabbbbbaaabbbaabbbaaaabbbbaaaaaaaabaaabbbbbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbaaaaaaaabbaabbbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbaaabbbbabbbabbbbbbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbbaaaabbbabbbabbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaaabbbaaaaabaaabaabbabbbbbbbbaaaabbaabbbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbaaaabaaabaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbaaaaaabbaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaaaaaaaaaaabbbbbbbbbbbbaaaabbaabbbaabbaaaaabbbbbbbba + abbabbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaaaaabbaabaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + bbbbbbbbbaaabbaaaaabbaaabbbbaabbabbbabaaababbabbaaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbbbaaabbbaaaabbbbaabbbbaabbbbbbabaaaaabbbbbbaaaabbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbbbbaabaaaaaabbbbaaaabbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbabbbbbbaaabaaaaaabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbbbbbbbaaaabbaabbabbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbbbbbaaaaaabbbbaabbbbbbbbbaaaaaaabaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbbbbaaaaaaaabbbbbbbbabbbbbabbaaaabaaabbbbabbbbaaabbbbaaaaabbbba + bbbaabbbbaabbbaabbaabbbabbbbbaaaaaaaaaabbbaaabbaabbbbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbbbbbbaaaaaaaaaaabbbaaabbaaaabbbbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbbbaaaaaaabbbaaaabbbaaabbaaaabbbbbbbbaaaaaabbbabbbaabaabbbaabaaaabba + baaabbbbbbbbbaabbbbaabbbbaaaaaabbbbaaaaabbaaabbaaaaabbaabbbbaaaaabbabbbbaabbabbbaabbbbaaba + aaaabbbbbbbbbaabbbbaabbbaaaaaaabbbbaaaaabbaaabbaaaaabbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaabbbaaaaabbbbbbbbaaaabaabbbaaaaabbaaabbbbaaaaaaaaabaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaabbbbaaaabbbbbaaabbaabbbabbaaaaaabbbaabbbbaaaaabbaababbbbaaabbbbbbbbaba + baaabbbbbbbbbaaaaaaabbbbaaaabbbbbaaabbaaabbbbbaaaaaabbbaabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbabbbaaaaabbbbbaaabbaaabbaabaaaaabbbbaaabbaaaaabbbbaaaaabbaabbbbabbbbaba + baabbbbbbbbaaaaabbbbbbbaaaabbbbbbaaaabbaaabbbbaaaaabbbbaaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbbbbaaaaabbbbbbaaabbbaaabbbaaaaaabbbbbaaaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbabbbaaaaabaabbbaaabbbaaaabbbbaaaabbbbbaaaaaaaaabbbbaaaabbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbabbbaaaabbaaabbaaabbbaaabbbbaaaaabbbbbbaaabaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbbbbbaaaabbbaabbaaaabbaaabbabbaaaabbbbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbabbbaaaaabbbbabbaaaabbaaabbbbaaaaabbbbbaabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbabbbaaaaabbbbabbaaaabbaaabbaabaaaabbbbaaabbbaaaabbbaabbaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbabbbaaaaaabbaabbaabaabaaaabbbbaaaabbbbaaabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaaabbbbabbbaaaabbbbaabbaabaabbaabbbbaaaaabbbbaaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbbbbaaaaabbbbaabbaabaabbaaaabbbaaaabbbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbbbbaaaabbbbaaabbaaaaabbaabbbbaaaaabbbbbbabbbaaaabbababbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbbbbaaaaabbbbaabbbbabaaabaaababbaaaabbbbbbaabbaaaabaababbbaabbbaaabbabbbbaa + abaabbbbbaaaabbbbbbaaaabbbbbaaabbbbaaaabaaabbbbaaaabbbbbbaaabbaaabaabaabbbabbbaaabbaabbbba + abaabbbaaaabaabbbbaaaaabbbbaaabbbbbbaaaaaaabaaaaaaabbbbbbaabbbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbabbbbaaaabbbbbaaabbbabbaaaaaaabbbbaaaabbbbabbabbbaaaaabbaaabbabbbaaaababbbbba + bbaabbbaaabbbbabbaaaaabbbbbaaabbbbbbaaaabaabbaaaaaabbbaabbaabbaaaaababaaababbaaaaaaaabbaaa + abbaaaaaabbbbbbbbaaaaabbbbbaabbbbbbbbbaaaaababbaaabbbbabbbbbbbaaaaaabbbaaaaaaabbbaaabbbaaa + abbbaaaabbbbbbbbbaaaaabbbbaabbbbbbbbbbaaaabbbbaaaabbbbabbbbbbbaaaaaabbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbaaaabbbaaaaaabbbabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaaababbbbbaaaaabbbbaaabbbbbbbbbbaaaabbbbaaaaabbbbbbbbbbbaaaaabbbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaabbbaaaaabbbbaaaabbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbaaaabbbbbaabbbbbbbbbbbbaaabbabbaaaaaabbbbbbbbbbaaaaaaaaabbaaabbbbbbaaabbba + abbbaaabbbbbbbbbaaaabbabbaabbbbbbbbbbbaaaabbabbaaaaaabbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaaaaaaaaaabbbbbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaaaabaaaabbbbbbbbbbbbaaabbabbabaaaaabbbbbbbbaaaaabbbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaaabaaaaabbbbbbbbbbbaaabbababbabaaaabbbbbbbaaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaaaabaaaaabbbbbbabbbbaaabbaaabbabaaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaabbaaaaabbbbbbbbbbbaaabbaaabbabaaaaaabbbbbbbbbaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbaaaaaaaabbaaaaabbbbbbbabbbaaabbaaabbabbaaaabbbbbbbbbbbaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbaaaaaaaabbaaaaabbbbbbbaabbaaabbaaabbabbaaabbbbbbbbbbbbbaaaaabbaabbbbbbbaaabba + abbbaaabbbbbbaaaaaaabbbaaaabbbbbbbbbabbaaabbababbaabaaabaabbbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbaaaaaaabbbaaaabbbbbbbbbabbaaabbabbbbaaaaaaaaaaaaaaabbbbbaaabbaaabbbbbbbaaabbb + bbbaaaabbbbbaaaaaaabbbbaaaabbbbbbbbbabbaaabbabbbaaaabaaaaaaaaaaaabbbbbabbbaaabbbbbbbaaabbb + abbaaaaaabbbaaaaaaabbbaaaaabbbbbbbbbabbaaabbabbbaaaabbaabaaaaaaaaabbbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbaaaaaabbbbaaaaabbbbbbbbbbbbaaabbabbbaaaabbbbbbbaabaaabbbbaabbbbaabbbbbbbbaabbb + abbbaabbbbbaaaaaaabbbbaaaaabbbbbbbbbbbbaaabbabbbaaaabbbbbbbbabababbbbaaabbbaabaaaaaabaabba + abbbaabbbbbaaaaaabbbbbaaaaabbbbbbbbbbbbaaabbabbbaaaabbbbbbbbbbbabbbbbbabbbbaabbbbbbbbaabbb + abbbaabbbbaaaaaaabbbbbaaaabbbbbbbbbbabbaaabbaabbaaaabbbbbbbbbbbabbbbbbbbabaaabbbbbbbbaabba + abbaabbbbbaaaaaaabbbbaaaaabbbbbbbbbbbbbaaabbaabbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaabbbbaaaaaaabbbbbaaaaabbbbbbbbbbbbbaaabaaabbaaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaabbbbaaaaaaabbbbbaaaaaaaabbbbbbbbabaaabaaabbbaaabbbbbbbbbbbabbbbabbbbbbabbbbbbbbbbabba + abbaabbbbaaaaaaabbbbaaaaabbbabbbbbbbbbaaaabaabbbbaaabbbbbbbbbbbaaabbbbbbbbaabbbbbbbbbbabba + abbaabbbaaaaaaaabbbbaaaabbbbabbbbbbbbbbaaabaabbbbaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbabba + abbaabbbaaaaaaabbbbbaaaabbbbabbbbbbbbbbaaabaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbbabbbbaaaaaaabbbbbaaaabbbbabbbbbbbbbbaaabaabbbbaaabbbbbbbbbbbbbabbbbbbbbbabbbbbbbbbbaaba + bbaabbbbaaaaaaabbbbaaaaabbbbabbbbbbbbbbaaabaabbbbaaabbbbbabbbbbbbabbbbbbbbbabbbbbbbbbbaaba`, + map `abbbbbbbbbbbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbaabbaaaaaabbbaaabbbbbbbbbbbbaaabbbba + abbbbbbaabbbabaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbba + abbbbbbaabbaaaaaaaaaaaaabbaaaaaaabbbbbaabbaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbbabbbbbbaaabbbba + bbbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbabaaaabbbabbaaaaaaaaabababbaaaabbbbbbbbbaaaaaaaabbbbbaaaaabbbbabbbaaaabbbbbaaabbbba + abbbbbbaaaaabbbbabbbaaaaaaaabbbbaaaaabbbbbbbbbbbbaabbaaabbbaaaabaaaaaaaaaaaaabbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaababbbbaaabbbabbaaabbbbbabbbaaaaaaaaabaaaaaaababaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaaabbbbbbbbbaaaaaaabbbaaabaaaaaaaaaaaaaaaaabbbaabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbaaaaaaaaabbbaaaaaababaaaaaaaabbbbbbbaabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaabbbbbbbaaaaaaaaaaabbbbaabbbbbaaaabbbbbbbbbbbaabbbbaaaaabbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbbbaaaaaaaaaabbbbaabbbbbaaaaabbbbbbbbbbaabbbbaaaaabbbba + abaabaaaabbbbaabbbbabbbbbaaaaaaabbbbaaaaaaaaaaaabbbbabbbbbaaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaaabbbbaaaaaaaaabbaabbbbaabbaaabaaaaabbbbbbbbbbaaaabbbaaabbbba + aaabbbbaaaaaaaabbbbabbbaaaabbaabbbbaaaabbbbbbbbabbbbaaaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbbbaabbbbbbbbbabbbaaaaaaabbbaaaaaaabbbbbbbbbaabbbbaabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbbbbaabbbbbbbbbabbbabbbaaabbbaabbaaaabbbbbbbbaaabbaabbbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaabbbbbaabbbbbbbbbabbabbbbbaaabbaabbaaaaaaabbbbbaaabaaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbaaaabbbbaabbaabbbaaabaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaaabbaaaabbbbaaaaaaabaaaabbabbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbaaaaaaaabaaabbbbbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbaabaaaabbbbaaaabbaabbaabbbbbbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaaabbaaaabbbabbbbabbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaabaaaaaabbbbaaaabbaabbabbbabbbbbbbbaaaabbbabbbbbaaaaabbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaabbbbaaaabbaaaaaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbaaaaabbbbbaaaaaabbbaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbbbaaaaaabaaaabbbbbbbbbbbbaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbbaaaaabaabbaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbaaaaabbabbaaaabbbbbaaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbbbbabaaaaabbbbbaaaaabbbbaaaaaaabbbbaaaaaabaabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbbbbabaaaaaaaabbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbabbbbbbbaabaaaaaabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbabbbbbbaaabaaabbabbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbbbbbbbaaaabbbbaabbbbbbbbbaaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbbbbbaaaaaaabbbbbbbbabbbbbabbaaaabaaabbbbabbbbaaabbbabaaaabbbba + bbbaabbbbaabbbaabbaabbbabbbbbbbaaaaaaaabbbaababaaabbbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbabbbbbaaaaaaaaaabbbaaaabaaaabbbbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbbbbbbaaaaaaaaaaabbbaabbbaaaabbbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbbbbaaaaaaabbaaaaabbaabbbaaaaabbbabbbbaaaaabbabbbbabbaabbbaabbbaaaba + aaaabbbbbbbbaaabbbbaaabbbaaaaaabbbbaaaaabbaabbbaaaaabbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaabbbbaaaaaabbbbaaaaabbaabbbaaaaabbbaabbbbaaaaaaaaabaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaabbbaaaaaabbbbbbaaaaabaabbbaaaaabbbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baaabbbbbbbbbaaaaaaabbbbaaaabbbbaabbbbaaabbbbaaaaaaabbbaabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbabbbbaaaabbbbaabbbbaaaaaabbbaaaaabbbaaabbaaaaabbbbaaaaabbaabbbbabbbbaba + baabbbbbbbbbaaaabbbabbbbaaaabbbbaaabbbaaabbbbbaaaaabbbbaaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbabbbaaaabbbbbaaabbbaaaabbaabaaaabbbbbaaaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbabbbbaaaaabbbbaaabbbaaaabbbbbaaaabbbbbaaaaaaaaabbbbaaaabbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbabbbbaaaabaabbbaabbbaaaabbaabaaaabbbbbbaaabaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbabbbaaaaabaaabbaaabbbaaabbbbbaaaabbbbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbaabbbaaaaabbbabbaaabbbaaabbbbaaaaabbbbbaabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbaaaabbbbabbaaabbbaaabbbbbaaaabbbbaaabbbaaaabbbaabbaabbbbbaaaaaaaabba + bbabbbbbbbaabbbbbabbbbaaaabbbaabbaaaabbaaaabbbbaaaabbbbaaabbbaaaabbaaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbabbbaaaaabbbaabbaaaabbbaaabaabbaaabbbbaaabbbaaaabbaaabbbabbbbbbabbbbbaaba + babbbbbbbbaaabbbbabbbaaaaabbbaabbaaaabbbaabbbbbaaaabbbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbbbbaaaaabbbbaabbbaaaabbaabbaaaaaaabbbbbaabbbaaaabbababbbaabbbbaaabbabbbaa + abbbbbbbbbaaabbbbbbbaaaaabbbaaabbbaaaabbaabbbbbbaaabbbbbbaabbaaaabaabaabbaabbbaaabbbbbbbaa + abaabbbbbaaaabbbbbbaaaaabbbbaaabbbbbaaabaababaaaaaabbbbbaaabbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbbbbaaaaabbbbaabbbbbbaaabaababbbbaaabbbbbbaabbbaaababbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabbbaaaaabbbbbaabbbbbbaaabbababbbaaaabbbbabbabbbaaaaabbaaabbabbbaaaababbbbba + bbaabbbaaabbbbabbbaaaabbbbbbabbbbbbbaaabbabaabbaaaabbbaabbaabbaaaaaaabaaababbaaaaaaaabbaaa + abbaaaaaabbbbbabbaaaaabbbbbaaabbbbbbbaaaaabaabbaaabbbaabbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbbbbaaaaaabbbaaabbbbbbbbaaaaabbabaaaabbbaabbbbbbbaaaaaabbbbaaaaaabbbaaabbbaba + abbbbaabbbbbbbbbbaaaaabbbbaaabbbbbbbbaaaaabbabbaaabbbbabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaaababbbbbbaaaaabbbbaababbbbbbbbaaaabbabbaaaabbbbbbbbbbbaaaaabbbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaabbaaaaabbbbbaabbbbbbbbbbaaaabbabaaaaabbbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbaaaaabbbbaabbbbbbbbbbbbaaabbabbaaaaabbbbbbbbbbbaaaaaaaaabaaaabbbbbbaaabbba + abbbaaabbbbbbbbbaaaaabbbaabbbbbbbbbbbbbaaabbabbaaaaabbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbbaaaabbbbaabbbbabbbbbbbbaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbbaaaabbbbaabbbbabbbbbabbaaabbabbaaaaaaabbbbbbbbaaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaaaaaaaabbbbbbbbbbbbaaaabbabbaaabaaaabbbbbbbaaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaaaabaaaabbbbbbbbbbbbaaabbabaababaaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaaabaaaaabbbbbbbbbbbbaabbaaabbabaaaaaabbbbbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaaabaaaabbbbbbbbbbbbaaabbaabbbabaaaabbbbbbbbbbbbbaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbaaaaaaaabbaaaabbbbbbbbbbbbaaabbabbbbabbaaabbbbbbbbbbbbbaaaaabaaabbbbbbbaaabba + abbbaaabbbbbbaaaaaaaabbaaaabbbbbbbbbbbbaaabbaabbbabaaaabaabbbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbaaaaaaabbbaaaabbbbbbbbbbbbaaabbaaaabaaaaabaaaabaabbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbaaaaaaabbbaaaabbbbbbbbbbbbaaabbaabbbaaaaaabaaaaaaabbbbbbbabbbaaabbbbbbbaaabbb + abbaaaaaabbbaaaaaaaabbbaaaabbbbbbbbbbbbaaabbaabbaaaabaabaaaaaaaabbbbbbabbbaaabbbbbbbaaabbb + abbbaabbbbbbaaaaaaabbbaaaaabbbbbbbbbbbbaaabaaabbaaaabbbbbbaabaaabbbbbaabbbbaabbbbbbbbaabbb + abbbaabbbbbbaaaaaaabbbaaaaabbbbbbbbbbbbbaabaaaabaaaabbbbbbbabaaabbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbaaaaaabbbbaaaaabbbbbbbbbbbbbaabaaaabaaaabbbbbbbbbaaabbbbbbabbbbaabbbbbbbbaabbb + abbbaabbbbbaaaaaaabbbbaaaaabbbbbbbbbbbbaaabaaaabbaaabbbbbbbbbabbbbbbbbbbabaaabbbbbbbbaabba + abbaaabbbbaaaaaaaabbbbaaaaabbbbbbbbbbbbaaabaaaabbaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaabbbbbaaaaaaabbbbaaaaaabbbbbbbbbbbbaaabaaaabbaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaabbbbbaaaaaaabbbbaaaaaaabbbbbbbbbbbbaabbaaabbaabbbbbbbbbbbbbbbabbbbbbbaabbbbbbbbbaabba + abbaabbbbaaaaaaaabbbbaaaaaaabbbbbbbbbbbaaabbaaabbaabbbbbbbbbbbbbbbabbbbbbbaaabbabbbbbbabba + abbaabbbbaaaaaaabbbbbaaaaaaabbbbbbbbbbbaaabbaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbabba + abbaabbbbaaaaaaabbbbbaaaaaaabbbbbbbbbbbbaabbaaabbaabbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbabba + bbbaabbbaaaaaaaabbbbbaaaabaabbbbbbbbbbbbaabbaaabbaabbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbaaba + bbaaabbbaaaaaaabbbbbaaaaabbabbbbbbbbbbbbaabbaaabbaabbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbaaba`, + map `abbbbbbbbbbbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbaabbaaaaaabbbaaabbbbbbbbbbbbaaabbbba + abbbbbbaabbbabaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbbabbbbbbbbaaabbbba + abbbbbbaabbaaaaaaaaaaaaabbaaaaaaabbbbbaaaaaaaaaabbbbbbbbbbbaaaaaabbbbbbbbbbaabbbbbaaabbbba + bbbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbabaaaabbbabbaaaaaaaabbbbbbbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbabbbaaaabbbbbaaabbbba + abbbbbbaaaaabbbbabbbaaaaaaaabbbbbaaaaabbbbbbbbbbaaaabaaaabbaaaabaaaaaaaaaaaaabbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbbaabbbbbbbbbbbbbbabbbaaaaaaaaabaaaaaaaaabaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbaaaaaaaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbabaaaaaaabbbbaaaababbbaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaabbbbbbaaaaaaaaaabbbbbbaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbaaaaaaaaaaabbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaabaaaabbbbaabbbbabbbbbaaaaabbbbbbbaaaaaaaaaabbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaabbbbbaaaaaaaaaaaabbbbbabbbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaaaaaaabbbbabbbaaaabbaabbbaaaaaaaaabbbabbbbbaaaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbaaaaabbbbbbbaabbaaaaaaaabbbaaaaaaabbbbbbbbaaabbbbaabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbbbaabbbbbbbbbaabbaabbbaaaabbaabbaaaabbbbbbbbaaabbaabbbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaaabbbbaabbbbbbbbbaabbaabbbbaaabbaabbaaaaaaabbbbbaaabaaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbaaabbbbaabbbbbbbbbabbaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbaabbaabbbaaabbbabbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaabbbbaaaaaaabaaaabbbbbbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbabbaaabbbbaaaaabaabaaaabbbbbbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbaaabbbaaaaabaabbbabbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaaabbbaaabbbaabbbabbbabbbbbbbbaaaabbbabbbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbaaaabbaabbaaabbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbaaaabaaabbaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaaabbbbaaaaaabbbaaaababbbbbbbbbbaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaaaabbbaaaaaaaaabbaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaaaaabbbbaaaaabaabbaaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbabbbaaaaabbabbbaaaaabbbbaaaaaaabbbbaaaaaabbabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbbbbbaaaabbbabbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbabaaaaaaabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbbbaaaaaaaabbbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbaaababbbbbbbbbbbbbaaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbabbbbbaaaabbbbbbbbbaabbbbbbbaaaabaaabbbbabbbbaaabbbabaaaabbbba + bbbaabbbbaabbbaabbaabbbabbbbabbbbaaaaabbbbaababaaabbbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbabbbbbbbbaaaaaaabbbaaaabbaaabbbbbbbbaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaaabbabbbbbbbaaaaaaaabbbaababbaaaabbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbabbbbbaaaaaaaaaabbbaababbaaaabbbabbbbaaaaabbabbbbabbaabbbaabbbaaaba + aaaabbbbabbbbaabbbbaabbabbbbaaaaaabaaaaabbaabbbbaaaabbbaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaabbbbaaaaaaabbaaaaabbaabbbbaaaabbbaabbbbaaaaaaaaabaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaabbbbaaaaaabbbbaaaaabbaabbbaaaaabbbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baaabbbbbbbbbaaaaaaaabbbbaaaaaabbbbbbaaaabbbbbbaaaaabbbaabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbaabbbaaaaaabbbbbbbbaaabbababaaaaabbbaaabbaaaaabbbbaaaaabbaabbbbabbbbaba + baabbbbbbbbbaaaabbbaabbbaaaaabbbabbbbbaaaabbbbbaaaaabbbaaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbabbbbaaaabbbbaabbbbaaabbbbbbaaaaabbbbaaaaaaaaabbbbaaabbbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbbabbbbaaaabbbbaaabbbaaaabbaabaaaaabbbbaaaaaaaaabbbbaaaabbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbaabbbaaaaabbbbaabbbbaaaabbbbbaaaaabbbbbaabbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbabbbbaaaaaaabbaabbbbaaaabbaaaaaaaabbbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbaabbbbaaaaaaaabaaabbbaaaabbbbbbaaaabbbbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbaaabbbbaaaaabbabaaabbbaaaabbbbbaaaaabbbbaabbbaaaabbbaabbaabbbbbaaaaaaaabba + bbabbbbbbbaabbbbbaabbbabaaabbbabaaabbbbaaabbaabbaaaabbbaaabbbaaaabbaaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbaaaaabbbabaaaabbbaaaabbbbbaaaabbbaaabbbaaaabbaaabbbabbbbbbabbbbbaaba + babbbbbbbbaaabbbbabbbbaaaaabbaabbaaabbbaaabaaaabaaaabbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbabbbbaaaabbbbabbbaaabbbaabbbbbbaaaabbbbaabbbaaaabbababbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbbbbbbaaaaabbbaabbbaaabbbaababaaaaaabbbbbbaabbaaaabaabaabbaabbbaaabbabbbbaa + abaabbbbbaaaabbbbbbbaaaaabbbbaabbaaaabbbaababbbbaaabbbbbbaabbbaaabaabaaabbabbbaaabbabbbbba + abaabbbaaaabaabbabbbaaaaabbbbaabbbaaaabbaababbaaaaabbbbbbaabbbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbaabbbbaaaaabbbbbaabbbbaaabbaabaabbbaaabbbbabbabbbaaaaabbaaabbabbbaaaababbbbba + bbaabbbaaabbbaabbbbaaaaabbbbaabbbbbbaaabaababbbaaaabbbaabbaabbaaaaababaaababbaaaaaaaabbaaa + abbaaaaaabbbbbabbbbaaaabbbbbaabbbbbbaaabaabaaaaaaaabbbabbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbabbbaaaaabbbbaaabbbbbbbaaaaabaabbbaaabbbabbbbbbbaaaaaabbbbaaaaaabbbaaabbbaba + abbbbaabbbbbbbbbbbaaaaabbbbaabbbbbbbbaaaaabbabbaaaabbbabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaaababbbbbbbaaaaabbbaaaabbbbbbbaaaabbbabbaaaabbbbbbbbbbbaaaaabbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaabbbaaaaaabbbaaaabbbbbbbaaaaabbabbaaaabbbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbbaaaaabbbbabbbbbbbbbbbaaaabbaabaaaaabbbbbbbbbbbaaaaaaabbaaaabbbbbbbaaabbba + abbbaaabbbbbbbbbbbaaaabbbbbbbaababbbbbaaaabbaabaaaaabbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbbbaaaaabbbabbbaababbbbbbaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbbbaaaabbbabbbbaababbbbbaaaabbabbaaaaaabbbbbbbbbaaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbbaaaaabbaaaaabbbbbbabbbaaaabbabbbaaaaaabbbbbbbbaaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbaaaaabaaaaaabbbbbbabbbaaaabbabbababaaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaaaaaaaaaaaaabbbbbbabbbaaaabbabaababaaaaabbbbbbbbbbaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaaaabbaaabbbbbbaabbbaaabbaaabbabaaaabbbbbbbbbbbaaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaaaabaaaabbbbbbaaabbaaabbabbbbabaaabbbbbbbbbbbbbbaaaaabaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaaaabbaaaabbbbbbaaabbaaabbabbbbabaaabbabbbbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbaaaaaaaabbaaaabbabbbbbaabaaabbaabbbabaaaaaaabaabbbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbaaaaaaaabbaaaabbabbbbbbbbbaabbaabbbaaaaabaaaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaaaaabbbaaaaaaaabbbaaaabbbbbbbbbbbbaabbaaabbaaaaaaaaaaabaabbbbbbbabbbaaabbbbbbbaaabbb + abbbaabbbbbbbaaaaaaaabbbaaaabbbbbbbbbbbbaabbaaabbaabbabbbaaaaaabbbbbbaabbbbaabbbbbbbbaabbb + abbbaabbbbbbbaaaaaaabbbbaaaabbbbbbbbbbbbaabaaaabaaaabbbbbbaaaaabbbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbbaaaaaaabbbbaaaaabbbbbbbbbbaaabbaaabbaaabbbbbbbaaabbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbaaaaaaabbbaaaaaabbbbbaabbbaaabbaaabbaaabbbbbbbaabbbbbbbbbbbabbaabbbbbbbbbabba + abbaaabbbbbbaaaaaaabbbbbaaaabbbbbbaaaaaaaabbaaaabaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbabba + abbaaabbbbbbaaaaaaabbbbaaaaabbbbbbbbbaaaaabbaaaabaaabbbbbbbbbbbbbbbabbbbaaaaabbbbbbbbaabba + abbaaabbbbbbaaaaaaabbbbaaaaaabbbbbbbbaaaaabaaaaabaabbbbbbbbbbbbbbbbbabbbbbaabbbbbbbbbaabba + abbaabbbbbbaaaaaaabbbbbaaaaabbbbbbbbbaabbabaaaaabaabbbbbbbbbbbbabbabbbbbbbaaabbabbbbbbabba + abbaabbbbbbaaaaaaabbbbbaaaaaabbbbbbbbaabaabaaaaabaabbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbbbabba + abbaabbbbbbaaaaaaabbbbaaaaaaabbbbbbbbbaaaabaaaaabaabbbbbbbbbbbabbbbbbbbbbbbabbbabbbbbbabba + bbbaabbbbbaaaaaaabbbbbaaaaababbbbbbbbbbaaabaaaabbaabbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbabba + bbaaabbbbbaaaaaaabbbbbaaaaababbbbbbbbbbaaabaaaabbaabbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbaabbaaaaaabbbaaaabbbbbbbbbbbaaabbbba + abbbbbbaabbbabaaaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbbabbbbbbbbaaabbbba + abbbbbbaabbaaaaaaaaaaaaabbaaaaaaabbbbbaaaaaaaaaabbbbbbbbbbbaaaaaabbbbbbbbbbaabbbbbaaabbbba + bbbbbbbaabaaaabbabaaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbabaaaabbbabbaaaaaaaabbbbabbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbabbbaaaabbbbbaaabbbba + abbbbbbaaaaabbbbabbbaaaaaaaabbbbbaaaaabbbaabbbbbbaaabbaaabbaaaabaaaaaaaaaaaaabbbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbaabbaaaaaaaaabaaaaaaaaabaabbbbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbaaaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbabbbbbbbaaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaabbbbbbbabaaaaaabbbbbabaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbbaaaaaaaabbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaabaaaabbbbaabbbbabbbbbaaaaabbbbbaaaaaaaaaaabbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaabbbbbaaaaaaaaaaabbbbbbaabbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaaaaaaabbbbabbbaaaabbabbbbbaaaaaaaaaaabbbbbaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbbaaaaaabbbaabbbbaaaaaaaabbbaaaaaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbbaaaaaabbbbbaabbbaabbbaaabbbaabbaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaabbbbbbaaaaaaabbbaabbbbaaabbbbbbbbaabbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaabbbbbaaaabaaabbbaabbbbaabbbbbbbbbaabbaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaaabbaabbbbaabbbbbbbbbabbaaabbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaabbbbaabbbbbbaaaabbbbbbbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbabbaabbbbaaaaaaabaaaaabbbbbbbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbabbbbbaaaabaabaaaabbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaabbbbbaaaaaaabbbaabbbbbbbbbbbbaaaabbbabbbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaabbbbaaaabaabbbaabbbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaabbbaaaaabaabbbaaabbbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaabbbbaaaabaaabbaaaaabbbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaaabbbbaaaabbbaaaaaaabbaabbaaaabbbbbbbbbaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaaaabbbaaaaaabbaabbaaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbabbbaaaaabbabbbbaaaabbbbaaaaaaabbbbaaaaaabbabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbbbbaaaaabbabbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaaaaabbbbbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbbbbaaaaaaaabbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbbabaaaaabbbbbbbbbbaaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbaabbbbbaabaaabbbbbbaabbbbbbbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + bbbaabbbaaabbbaabbaabbbabbbbabbbbbbaaabbbbaaabbaaabbbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbabbbbbaaaabbbbaaaabaaaaabbbbbbbaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbbbbbbaaaaabbbbaababbaaaabbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaabbbbbbaaaaaaabbbaababbaaaaabbbbbbbaaaaabbabbbbaabaabbbaabbaaaaba + aaaabbbbabbbbaabbbbaabbabbbbbbaaaaaaaaabbbaababbaaaaabbaabbbbaaaabaaabbaabbbabbbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbbbbaaaaaaaaaabbbaabbbbaaaaabbaabbbbaaaaaaaaabaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbaaaaabbaaaabbbaabbbbaaaaabbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baaabbbbbbbbbaaaaaaaabbbbbaaaaaaabbaaaaabbaabbbaaaaabbbaabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaabbbbaaaaaabbbbaaaaabbbabbbaaaaabbbbaabbaaaaabbbbaaaaabbaabbbbabbbbaba + baabbbbbbbbbaaaabbbaabbbaaaaaabbbbbaaaaaabbbaabaaaaabbbbaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbaabbbaaaaaabbbbbbbaaaabbbbabaaaaabbbbaaaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbbaabbbaaaabbbbabbbbbaaabbbbbbbaaaabbbbaaaaaaaaabbbbaaaabbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabbbbaaaabbbbaabbbbaaaabbaaaaaaaabbbbbaabbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbabbbbbaaaabbbbaabbbbaaaabbbbbbaaaabbbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + abaaabbbbbaabbbbbaabbbbbaaaaaabbaabbbbaaaabbabbbaaaabbbbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbaaabbbbaaaaaababaabbbbaaaabbbbbbaaaabbbbaabbbaaaabbbaabbaabbbbbaaaaaaaabba + ababbbbbbbaabbbbbaabbbbaaaaabbbbaaabbbaaaabbbbbbaaaabbbaaabbbaaaabbaaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbaaaaabbbbaaabbbbaaaabaaaaaaaabbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbaaaabbbbbaaabbbbaaaabbbbbaaaabbbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbaabbbbbbaaabbbabbaaabbbaaabaaaaaaaaabbbbbabbbaaaabbababbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbbabbbbbaaaabbbabbbaabbbaaabbbbbbaaaabbbbbaabbaaaabaabaabbaabbbbaabbabbbbaa + abaabbbbbaaaabbbabbbbbaaaaabbbaabaaabbbbaababaaaaaaabbbbbaabbbaaabaabaaabbabbbaaabbabbbbba + abaabbbaaaabaabbabbbbbaaaabbbaabbaaaabbbaababbbbaaaabbbbbaabbbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbaababbbbaaaaabbbaabbbaaabbbaababbbbaaaabbbabbabbbaaaaabbaaabbabbbaaaababbbbba + bbaabbbaaabbbaaaabbbbaaaabbbbaabbbbaaabbaababaaaaaaabbbbbbaabbaaaaababaaababbaaaaaaaabbaaa + abbaaaaaabbbbaabbbbbaaaaabbbaaabbbbbaabbaabbabbbaaaabbabbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbaaabbbbaaaabbbbaabbbbbbaaabaabaabaaaaabbbabbbbbbbaaaaaabbbbaaaaaabbbaaabbbaba + abbbbaabbbbbbbbbbbbaaaaabbbaaabbbbbbaaabaabaabbaaaabbbbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbbbbbaaaaabbbaaabbbbbbbaaabbbbabbbaaabbbbbbbbbbbaaaaabbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaabbbbaaaabbbbaaaabbbbbbaaaabbbaabaaaabbbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbbbbaaaaaabbaaaabbbbbbbaaaabbbabbbaaaabbbbbbbbbbbaaaaaaabbaaaabbbbbbbaaabbba + abbbaaabbbbbbbbbbbaaaaaabbbbbbbbbbbbbaaaaabbaabbaaaabbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbbbbaaaaaabbbbbbabbabbbaaaaabbaabaaaaaabbbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbbbbaaaaaabbbbbbabbbbbbaaaaabbbabaaaaaabbbbbbbbbaaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbaaaaaabbabbbabbbabbaaaaabbbabaaaaaaabbbbbbbbaaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbaaaaaaaaaabbbbbbabbbbaaabbaabbaabaaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbbbaaaaaaaaaaaabbbababbbbaaabbabbbaabaaaaabbbbbbbbbbaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbbbaaaaaaaaaaaabbbbbabbbbaaabbaaabaabaaaaabbbbbbbbbaaaaaaaaaaaabbbbbbbaaabba + abbbaaabbbbbbbbbaaaaaaaabbaaabbbbbaaabbbaabbaaabaabaaaabbbbbbbbbbabbaaaaabaaabbbbbbbaaabba + abbbaaabbbbbbbbbaaaaaaaabbaaaabbbbaaabbbaabbabbbaabaaabbbbbbbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbaaaabbbbbbbbbaaaaaaaabbaaaabbbbbbabbbaabbaabbbabaaabaabbaabbbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbbaaaaaaaabbaaaaaabbbbbaabbaabbaabbbabaaabaaabaabbbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaaaaaabbbbaaaaaaaabbaaaaabbbbbbaaaaaabbaabbbaaaaaaaaaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbbaabbbabbbbbaaaaaaaabbbaaaabbbbbbbbbaaabaaaabaaabaaabaaaababbbbbbbaabbbbaabbbbbbbbaabbb + abbbaabbbbbbbbbaaaaaaaabbaaaabbbbbbbbbbaaabaaaabaaabbabbbaaaaabbbbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbbbbaaaaaaabbbaaaabbbbbbbbbbaaabbaaabbaabbbbbbbaaaabbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbbaaaaaaabbbbaaaabbbabbbbaaaabbaaaabaabbbbbbbaabbbbbbbbbbbbabbaabbbbbbbbbabba + abbaaabbbbbbbbaaaaaaaabbbaaaaabbbaabbbaaaabbaaaabaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbabba + abbaaabbbbbbbbaaaaaaabbbbaaaaabbaaaaaaaaaabbaaaabaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbaaaaaaabbbbaaaabbbbbbbbaaaaabbaaaabaabbbbbbbbbbbbbbbababbbbbaabbbbbbbbbaabba + abbaabbbbbbbbbaaaaaaabbbbaaaabbbbbbbbbaaaabbaaaaaaabbbbbbbbbbbbaabaabbbbbbaaabbabbbbbbabba + abbaabbbbbbbbbaaaaaabbbbbaaaaabbbbbbbbabbabbaaaaaaabbbbbabbbbbbabbbbbbbbbbbaabbabbbbbbabba + abbaabbbbbbbbaaaaaaabbbbbaaaaabbbbbbbbabbabbaaaabaabbbbbabbbbbbbbbbbbbbbbbbabbbabbbbbbabba + bbbaabbbbbbbbaaaaaaabbbbbaaaabbbbbbbbbaaaabbaaaabaabbbbbabbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbaaaababbbbaaaaaaabbbbbbaaaaabbbbbbbbaaaabbaaaababbbbbbabbbbbbbbbbbbbbbbbbabbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbabbbaaaaaabbbaaaababbbbbbbbbaaabbbba + abbbbbbaabbbabaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbabbbbbbbbaaabbbba + abbbbbbaabbaaaaaaaaaaaaabbaaaaaabbbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbba + bbbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabbbbbbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbbabbbaaaaaaaabbbbaaaaaabbaaaabbbbbaaabaaaabbaaaaaaaaaaaaaaaaaaabbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbbaaaabbbaaaaabbaaabbbbbbaabbbaaaaaaaaabaaaaaaaaabaabbbbbbaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbaaaaaaaaaaaaaaaaabbbbabbbbbbaabbbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbbaaaaaabbbbbbbbbaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + abaabaaaabbbbaabbbbabbbbbaaaaabbbbabaaaaaaaabbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabaabbbbbaaaaaaaaaabbbbbbbaabbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaaaaaaabbbbabbbaaaabbabbbaaaaaaaaaaaabbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbabbbbaaaaaaaaaaabbbbbaaaaaaaabbbaaaaaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaabbbbaaaaaabbbaabbbbbaabbbaaabbbaaabaaaabbbbbbbbaaabbaaabbbba + aabbbbbbaaaaabbbbbaaaaaaabbbaabbbaaaaaabbbbbaabbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaabbbbbaaaabaaabbbbabbbaaabbbbbbbbaabbaaaabbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbabbbbaabbbbbbbbbaabbaaaabbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbabbbbaabbbbbbbbbabbabbbbbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbabbbbbbbaaaaaaaabbbbbbabbabbbbaabbbbbbbaaabbbbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbabbbbbbaaaaaaaaabbbbbaaabbbbbbaaaaaabbaabaabbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbaaaaaaaaaabbbbaaaaaabbbbbaaaaaabbaaaabbbbabbbbbbbbaaaabbbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaabbbbaaaaaabbbbbaaabbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaabbbaaaababbbbaaaabbbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbaaabbbaaaababbbbaabaaabbbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaabbbaaaaaaabbbabbaaaabbbbbbbbbbaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabbbaaaaaaabbaabbbaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbbbaaaaabbbaabbbaaaaabbbbbaaaaaabbbbaaaaaabbabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbbbbaaaaaaaabbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaaaaabbabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbbbbbaaaaaababbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbbbaaaaabbbbbbbbbbbaaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbaaabbbbbaaaaabbbbbaabbbbbbbbaaaabaaabbbbabbbbaaabbbbbaaaabbbba + babaabbbaaabbbbabbaabbbabbbbaaabbbbaabaabaaaabbaaaabbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbabbbbbbaabaaabaaabbaaaaabbbbbbbaaaaabbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbabbbbbaaabbbbbaabbbaaaaaabbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabbbbbbaaaaabbbbaabbbaaaaaabbbbbbbaaaaabbabbbbaabaabbbaabbaaaaba + aaaabbbbbbbbbaabbbbaabbaaabbbbbbaaaaaabbbbaabbbaaaaaabbabbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbbbbbbaaaaaaaabbaaabbbbaaaaabbbbbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbbaaaaaaaaaabbaaaabbaaaaaabbbabbbbaaaaabaaaaabbbbaaabbbbbbbbaba + baaabbbbbbbbbaaaaaaaaabbbbbbaaaaaabaaaabbbaabbbaaaaaabbbabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaaaaaabbaaaabbbbabbbaaaaaabbbaabbaaaaabbbbaaaaabbaabbbbabbbbaba + baabbbbbbbbbaaaabbbaaabbbbaaaaaabbbaaaabbbbbbbbaaaaaabbbaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + baabbbbaaaaaaaabbbbaaabbbaaaaaabbbbaaaaabbbbabbaaaaaabbbaaaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaabbaaaaaabbbbbbaaaabbbbbaaaaaaaabbbbaaaaaaaabbbbaaaabbbaaabbbabbbbbaa + babbaaaaaaaaabbbbbaabbbbaaaaabbbabbbbaaaabbbbbbbaaaaabbbbaabbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbabbbbbaaaaabbbabbbbaaaabbbaaaaaaaaabbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbbbbaaaaaaaaabbbbbaaabbbbbbbaaaaabbbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbbbaaaaaaaaabbbbbaaaabbabbbaaaaabbbaabbbaaaabbbaabbaabbbbbaaaaaaaabba + bbabbbbbbbaabbbbbaabbbbaaaaabbaaabbbbbaaaabbbbaaaaaaabbbaabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbaaaaabbbaaabbbbaaaabbbbbbaaaaabbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbaaaaabbbaaabbbbbaaabbaaaaaaaaabbbbabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbbbaaaaabbabaaabbbbaaaabbbbbbaaaabbbbabbbaaaabbababbbaabbbbaaababbbbaa + abbbbbbbbbaaabbbbabbbbbaaaabbaabbaabbbbaaaabaaaaaaaaabbbbaabbaaaabaabaabbaabbbbaabbabbbbaa + abaabbbbbaaaabbbaabbbbbbaaabbbabbaabbbbaaaabbbbbaaaabbbbbaabbbaaabaabaaabbabbbaaabbabbbbba + abaabbbaaaabaabbabbbbbbaaaabbaabbaaabbbbaabaabbbaaaabbbbbaabbbaaababbaabbbabbbbaabbaabbbba + abaabbbaaabbbaababbbbbbaaaabbaabbaaabbbbaababbbbaaaabbbbbbabbbaaaaabbaaabbabbbbaaababbbbba + bbaabbbaaabbbaaaabbbbbaaaabbbaabbbaaabbbaabaabbbaaaabbbbbbaabbaaaaababaaababbaaaaaaaabbaaa + abbaaaaaabbbbbaaabbbbbaaaabbbaaabbbaabbbaababaaaaaaabbbbbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaabbbbaaaaabbaabbbbbbaabbaabaabbbaaaabbbbbbbbbbaaaaaabbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbbaabbbbaaaabbbaaabbbbbaabbaabaababaaaabbbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaabbbbaaaabbbaaabbbbbaaabaabaabbbaaaabbbbbbbbbbaaaaabbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaabbbbaaaaabbaaaabbbbbaaabaabbabbbaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbabbbbaaaaabbbaaabbbbbbaabaabbabaaaaaaabbbbbbbbbbaaaaaaabbaaaabbbbbbbaaabbba + abbbaaabbbbbbbbabbbaaaaabbbbaaabbbbbbaaaabbbabbbaaaaabbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbabbbaaaaabbbbaaabbbbbbbaaabbbabbbaaaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbabbbaaaaabbbbaaabbbbbbbaaaabbaabaaaaaaabbbbbbbbaaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbabbbaaaabbbbbababbbbbbbaaaabbaabaaabaaaabbbbbbbaaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbbaaaabbbbbbbabbbabbbaaaabbaabaaabaaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbabbbbaaaabbbbbbbbbbbabbbaaaabbbabaaabbaaaabbbbbbabbbaaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbabbbbaaaabbbbbbbbbbbabbbbaaabbabbaaabbaaaaabbbbbbbbaaaaaaaaaaaabbbbbbbaaabba + abbbaabbbbbbbbbbbbaaaaaabbbbbbbbbbaabbbbaabbabaaaabaaaabbbbbbbbbbabbaaaaabaaabbbbbbbaaabba + abbaaaabbbbbbbbbbbaaaabaaaaabbbbbbaaabbbaabbaaabaabaaaabbbbbbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbbaaabbbbbbbbbbbaaaaaaaaaabbbbbbaaabbbaabbabbbaabaaaabbababbbbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbbbbbaaaaaaabaaaaabbbaaabbbaabbabbbaabaaabbaaaaabbbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaabaaaabbbbbaaaaaaaabaaaabbbbbbaabaaabbaabbaaaaaaabaaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbbaabbbaabbbbbbaaaaaaaabaaaabbbbbbaaaaaabbaabbaaabaaaaaaaababbbbbbbaaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbbaaaaaaaabaaabbbbbbbaaaaaabaaaabaaabbaabbaaaaabbbbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbbbbbbaaaaaaabbaaaabbbbbbbbaaaabaaaabbaabbbbbbbaaaabbbbbbbaaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbbaaaaaaabbaaaabbbbbbbbbaaabbaaabbaabbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbbbaaaaaaaabbaaaabbbbbbbbbaaabbaaaabaabbbbbbbaabbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbbbaaaaaaabbbaaaabbabbbbbaaaabbaaaabaabbbbbbbbbbbbbbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbbbaaaaaaabbbaaaabbaaabaaaaaabbaaaabaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabba + abbaabbbbbbbbbbbaaaaaaabbbaaaabbbbbbabaaaabbaaaaaaabbbbbbbbbbbbaabaabbbbbbaabbbbbbbbbbabba + abbaabbbbbbbbbbbaaaaaaabbbaaaabbbbbbbbaaaabbaaaaaaabbbbbbbbbbbbabbabbbbbbbaabbbbbbbbbbabba + abbaabbbbbbbbbbbaaaaaabbbbaaaabbbbbbbbaaaabbaaaabaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbbaabbbbbbbbbbbaaaaaabbbbaaaaabbbbbbbabbabbaaaabaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbaaaababbabbbbaaaaaaabbbaaaaaabbbbbbbabaabbaaaabbabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaabbbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaabaaabbbbbbbabbaaabbbbbbbabbbaaaaaabbbaaabbbbbbbbbbbbaabbbbba + abbbbbbaabbbabaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbabbbbbbbbaabbbbba + abbbbbbaabbaaaaaaaaaaaaabbaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbaabbbbbbaaabbbba + bbbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaabbbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabbbbabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbaabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbaabbbaaaaaaaabbbbaaaaaabbaaaabbbbbaaabbaaabbaaaaaaaaaaaaaaaaababbbbaabbbbba + abbbbbaaaaabbbbaabbbbbbbbbaaaabbbbbaaabbaaabbbbbbaaabbaaaaaaaaabaaaaaaaabbaabbbbbaaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaabbaaaaaaaaaaaaaaaaabbbaabbbbbaaabbbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbbaaaaaabbbbbbbbbaabbbbbaaaabbbbbbbbbbbaabbbaaaaabbbbba + abaabaaaabbbbaabbbbabbbbbaaaaabbbbabaaaaaaaabbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabbabbbbaaaabaaaaaabbbbbbbaabbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaabbbbbabbbaaaabbabbbaaaaaaaaaaaabbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbabbbbaaaaaaaaaaabbbbbaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaabbbbaaaaaabbbaabbbbbaabbbaaaabbaabbaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbabbbbaaaaaabbbbbaabbbaaabbbbaaabbaabbaaaaaaabbbbbaaaabaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbbabbbaaabbbbbbbbaabbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbabbbbaabbbbbbbbbaabbaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbbaaaabbbbaabbabbbbaabbbbbbbbbabbabbbbbbbbbbbaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbabbbbaabbbbbbbaaabbbbbbbbbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbbbbbaaaaaabbaabaabbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbaaaaaaaaaabbbbaaaaaabbbbbaaaaaabbaaaabbbbabbbbbbbbaaaabbbaabbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaabbbbaaaaaabbbbbaaabbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaabbbaaaababbbbaaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbaabbaaaaaabbbbaaabbbaaaababbbbaabaabbbbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbaaabbaaaaabaaabbbbbaaabbbaaaaaaabbbabbaaaabbbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabbbaaaaaaabbaabbbaaaabbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbbbaaaaabbbaabbbaaaaabbbbbaaaaaabbbbaaaaaabaabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbbbbaaaaaaaabbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbaaabbbbbbaaaaabbabbbbbaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbbbbbaaaaaababbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbbbaaaaabbbbbbbbbbbaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbaaabbbbbaaaaabbbbbaabbbbbbbbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbaaabbbbabbaabbbabbbbaaabbbbaabaabaaaabbaaaabbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbabbbbbbaabaaabaaabbaaaaabbbbbbbaaaaabbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbabbbbbaaabbbbbaabbbaaaaaabbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaababbbbaaaaabbbbaabbbaaaaaabbbbbbbaaaaabbabbbbaabaabbbaabbbaaaba + aaaabbbbabbbbaabbbbaabaabbabbbbbaaaaaabbbbaabbbaaaaaabbabbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbbbbbbaaaaaaaabbaaabbbbaaaaabbbbbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbbbaaaaaaaaabbaaaabbaaaaaabbbabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbbaaaaaabaaaabbbaabbbaaaaaabbbabbbaaaaabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaaaaaabbaaaabbbbabbbaaaaaabbbaabbaaaaabbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbaaaaaabbbaaaabbbbbbbbaaaaaabbbaaaaaaaaabbbbaaaabaaaabbbbabbbbaba + baabbbbaaaaaaaabbbaaaabbbaaaaaabbbbaaaaabbbbabbaaaaaabbbaaaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaabbaaaaaabbabbbaaaabbbbbaaaaaaaabbbbaaaaaaaabbbbaaaabbbaaaabbabbbbbaa + babbaaaaaaaaabbbbbabbbbbaaaaabbbabbbbaaaabbbbbbbaaaaabbbbaabbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaaabaaaabbbbbbabbbbbaaaabbbbabbbbaaaabbbaaaaaaaaabbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbbbbaaaabaaaabbbbaaaabbbbbbbaaaaabbbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbbbaaaabaaaabbbbaaaaabbabbbaaaaabbbaabbbaaaabbbaabbaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbaabbbbaaaaabbaaabbbbbaaaabbbbaaaaaaabbbaabbbaaaabbbaaabaabbbbbbaabaaaabba + aabbbbbbbaaabbbbbaabbbbaaaabbbbaaabbbbaaaabbbbbbaaaaabbbaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbaaaaabbbaaabbbbbaaabbaaaaaaaaabbbbabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbaabbbbbaaaabbbabaaabbbbaaaabbbbbbaaaabbbbabbbaaaabbababbbaabbbbaaababbbbaa + abbbbbbbbaaaabbbaabbbbbaaaabbaabbaabbbbaaaabaaaaaaaaabbbbaabbaaaabaabaabbaabbbbaabbabbbbba + abaabbbbbaaaabbbaabbbbbbaaabbbabbaabbbbaaaabbbbbaaaabbbbbaabbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbbbbbaaaabbaabbaaabbbbaabaabbbaaaabbbbbaabbbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbaababbbbbbaaaabbaabbaaabbbbaababbbbaaaabbbbbbabbbaaaaabbaaabbabbbaaaababbbbba + bbaabbbaabbbbaaaabbbbbaaaabbbaabbbaaabbbaabaabbbaaaabbbbbbaabbaaaaababaaababbaaaaaaabbbaaa + abbaaaaaabbbbaaaabbbbbaaaabbbaaabbbaabbbaababaaaaaaabbbbbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaabbbbaaaaabbaabbbbbbaabbaabaabbbaaaabbbbbbbbbbaaaaaabbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbbaabbbbaaaabbbaaabbbbbaabbaabaababaaaabbbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabababbbbaabbbbaaaabbbaaabbbbbaaabaabaabbbaaaabbbbbbbbbbaaaaabbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaabbbbaaaababaaaabbbbbaaabaabbabbbaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbabbbbaaaaabbbaaabbbbbbaaaaabbabaaaaaaabbbbbbbbbbaaaaaaabbaaaabbbbbbbaaabbba + abbbaaabbbbbbbbabbbaaaaabbbbaaabbbbbbaaaabbbabbbaaaaabbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbabbbaaaaabbbbaaabbbbbbbaaabbbabbbaaaaaabbbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbabbbaaaaabbbbaaaabbbbbbaaaabbaabaaaaaaabbbbbbbbaaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbabbbaaaabbbbbababbbbbbbaaaabbaabaaabaaaabbbbbbbaaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbbbbbaaaabbbbbbbabbbabbbaaaabbaabaaabaaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbabbbbaaaabbbbbbbbbbbabbbaaaabbbabaaabbaaaabbbbbbabaaaaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbabbbbaaaabbbbbbbbbbbabbbbaaabbabbaaabaaaaaabbbbbbbbabaaaaaaaaaabbbbbbbaaabba + abbbaabbbbbbbbbbbbaaaaaabbbbbbbbbbaabbbbaabbabaaaabaaaabbbbbbbbbbbbbaaaaabaaabbbbbbbaaabba + abbaaaabbbbbbbbbbbaaaabaaaaabbbbbbaabbbbaabbaaabaabaaaabbbbbbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbbaaabbbbbbbbbbbaaaaaaaaaabbbbbbaaabbbaabbabbbaabaaaabbababbbbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbbbbbaaaaaaabaaaaabbbaaabbbaabbabbbaabaaabbaaaaabbbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaabaaaabbbbbaaaaaaaabaaaabbbbbbabbaaabbaabbaaaaaaabaaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbbaabbbbbabbbbbaaaaaaaabaaaabbbbbbaaaaaabbaabbbaabaaaaaaaababbbbbbbaaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbbbbaaaaaaaabaaabbbbbbbbaaaaabaaaabbaabbaabbaaaaabbbbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbbbbbbaaaaaaabbaaaabbbbbbbbaaaabaaaabbaabbbbbbbaaaabbbbbbbaaabbbaabbbbbbbbaabbb + abbaaabbbbbbbbbbbaaaaaaabbaaaabbbbbbbbbaaabbaaabbaabbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbbbaaaaaaaabbaaaabbabbbbbbaaabbaaaabaabbbbbbbaabbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbbbaaaaaaabbbaaaabbabbbbbaaaabbaaaabaabbbbbbbbbbbbbbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbbbaaaaaaabbbaaaabbaabaaaaaaabbaaaabaabbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbabba + abbaabbbbbbbbbbbaaaaaaabbbaaaabbbbbbaaaaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabba + abbaabbbbbbbbbbbaaaaaaabbbaaaabbbbbbbbaaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabba + bbbaabbbbbbbbbbbaaaaaabbbbaaaabbbbbbbbabaabbaaaabaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbbaabbbbbbbbbbbaaaaaabbbbaaaabbbbbbbbabbabbaaaabaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbaaaababbabbbbaaaaaaabbbaaaaabbbbbbbbaaaabbaaaabbabbbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaabbbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaabbbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbaabbbabaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbabbbbbbbbbaabbbbba + abbbbbbaabbaaaaaaaaaaaaabbaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbabaabbbbbbaaabbbba + bbbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaabbbbba + bbbbbbbaaaaaabbbabbaaaaaaaabbbbbbbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbaabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbaabbbaaaaaaaabbbbaaaaaabbaaabbbbbbaaabaaabbbaaaaaaaabaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbbaabbbbbbbbaaaabbbbaaaaabbaaabbbbbbaaabbaaaaaaaaabaaaaaaababaabbbbbaaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbbbbaaabaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbaabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbbbabbbbbbbbbaaaaaabbbaaaaaaaabbbbbbbaabbbbaaaabbbbba + abbbaaabbbbbbaaaabbabbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbaaaaabbbbba + abaabaaaabbbbaabbbbabbbbbabaaabbbbbbbbaaaabbbbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaababbbbbbbaaaaaaabbbbbbbbbaabbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaabbbbbabbbaaaabbbbbbbaaaaaaaaaabbbbbbbaaaaaaaabbaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbabbaaaaaaaaaaaabbbbbaaaaaaaaabbbaaaaaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaabbaaaaaaaaaaaabbbbbaaabbbaaaabbaabbaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbabbbbaaaaaaabbaabbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaaabbbbaaaabaaabbbbbbbbaaaaabbbbbaabbbaaabbbbbbaaaaaabbbaaaaaabbbbaaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbbbbbaaaabbbbbbbaabbaaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaabbbbaaa + abbabbbbbbaabbbbaaaabbbbaabbbbbbaabbbbbbbbbaabbaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbaabbbbbbaabbbbbbbbbaababbbbbbbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbbaaaaaaaaabbbbaaaaaabbbaaabbbbbaaaaabbbbbabbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaabbbaaaaaabbaaaaaaaabbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaabbbbaaaaaabbbbbaaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbabbbbaaaaaabbbbbabbaabbbbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbaaabbaaaaabaaabbbbbaabbbaaaaaabbbbaabbaaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaabbbaaaaaabbbaabbbaaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaaaaaaabbaabbbbaaaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbaaaaaabbaabbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbaaabbbbbaaaabbaabbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbbbbaaaaabbabbbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbbbaaaababbbbbbbbbbaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbbaaabaaabbbaaaaaabbbabbbbaabbbbbbaaababbbbbaabbbbbbbbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbaaabbbbabbaabbbabbbbaaabbbbaaaaaaaaaabaaaabbbbbbbbaaaaaabbbbabbbaaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbabaaaabaaabaaaaaaabbbbbbaaaaabbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbabbbbbaabaaabbaabbbaaaaaabbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaababbbbbaabbaaabaaabbaaaaaaabbbbbbaaaaabbabbbbaabaabbbaabbaaaaba + aaaabbbbabbbbaabbbbaabbabaabbbbbbaaaabbbbbaabbbaaaaaaabbbbbbbaaaabaaabbaabbbabbbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbabbbbbaaaaabbbbbaaabbaaaaaaabbbbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbbbbaaaaaaabbbbaaabbaaaaaaabbbbbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbbbbaaaaaaaabbbaaabbbaaaaaaabbbbbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbbbaaaaaaaaabbbbaabbbaaaaaaabbbabbaaaaabbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbaaaabbbbbbaaaaabaaaabbbbbabbbaaaaaaabbaabaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbaaaabbbbbaaaaabbaaaaabbbbbbbbaaaaaaabbbaaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaabbbaaaaaabbbbaaaabbbababbaaaaaabbbbaaaaaaaabbbbaaaabbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbaabbbbaaaaaabbbbbbaaaabbbbaaaaaaaaabbbbaabbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaaabaaaabbbbbbabbbbbaaaaabbabbbbaaaaaabbbbbbaaaaabbbbaabbaaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbbbbaaaabababbbbbaaabbbbaaabaaaaabbbbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaabbbbbbaabbbbbaabbbbbaaaabaaaabbbbaaaabbbbbbbaaaaabbbaabbbaaaabbbaabbaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbaabbbbaaaaabbaaabbbbaaaabbaabbbaaaaabbbaabbbaaaabbbaaabaabbbbbbaabaaaabba + aabbbbbbbaaabbbbbaabbbbaaaabbbaabbbbbaaaabbbbbbaaaaaabbbbabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbaaaabbbbaaabbbbaaaaabbbbbaaaaabbbbabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbaabbbbbaaaabbbaaaabbbbaaaabbbaaaaaaaabbbbabbbaaaabbaaabbbaabbbbaaababbbbaa + abbbbbbbbaaaabbbaabbbbbaaaabbbbaaabbbbaaaabbbbbbaaaaabbbbaabbaaaabbabaabbaabbbbaabbabbbbba + abaabbbbbaaaabbbaabbbbbaaaabbaabaabbbbbaaaabaaabaaaaabbbbaabbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbbbbbaaaaabaabaaabbbbaaaabbbbbaaaaabbbbaabbbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbaababbbbbbbaaabbaabaaabbbbaaabaaaabaaaaabbbbbabbbaaaaabbaaabbabbbaaaababbbbba + bbaabbbaaabbbaaaababbbbbaaabbaabbaabbbbaaabbbbbbaaaaabbbbbaabbaaaaababaaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaabbbbbaaaabbabbbaaabbbbaabbabbbaaaaabbbbbbabbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaaabbbbbaaaabaabbbaaabbbbaababaaaaaaaabbbbbbbbbaaaaaabbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbaaabbbbbaaaabbbaababbaabbbaababbbbaaaaabbbbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaabbbbbaaaabbaabbbbbaabbbaababaaaaaaaabbbbbbbbbaaaaabbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabbbbbaaaabbaabbbbbbaabbaabbabbbaaaaabbbbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbaabbbbaaaaabbaaabbbbbaabbaabbabbbaaaaaabbbbbbbbbaaaaaaabbaaaabbbbbbbaaabbba + abbbaaabbbbbbbbaabbbbaaaabbbaaabbbbbaaabaabbabaaaaaaaaabbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbaaabbbbaaaabbbaaabbbbbbaaaaabbabbbaaaaaaabbbbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbaaaaabbbaaabbbbbbaaabbbbababaaaaaaabbbbbbbaaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaabbbaaaaabbbaaaabbbbbbaaabbbabbbaabbaaaabbbbbbaaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaabbbbaaaabbbbbaabbbbbbbaaaabbaabbaabbaaaabbbbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbbbaaaabbbbbbabbbbbbbaaaabbaabbaabbaaaaaabbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaabbbbaaaabbbbbbaabbabbbaaaabbaabbaabbaaaaaabbbbbbbbbaaaaaaaaaabbbbbbbaabbba + abbbaabbbbbbbbaabbbbaaaabbbbbbbbbbabbbaaaabbaabbaabbaaaabbbbbbbbbbbbaaaaabaaabbbbbbbaaabba + abbaaaabbbbbbbaabbbbaaaabbbbbbbbbbabbbbaaabbaabbaabbaaaabbbbbbbbbbbbbaaabbaaabbbbbbbaaabba + bbbbaaabbbbbbbaabbbbaaaabbbbbbbbbbaabbbbaabbaabbaabbaaabbbbaabbbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbaabbbbaaaabbbbbbbbbbaabbbbaabbaabbaabbaaabbaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaabaaaabbaabbbaaaaabbabbbbbbbaaabbbbabbaabbaaaaaaaabaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbbaabbbaaabbaabbbaaaabbbaabbbbbbbbabbaaabbaabbaaaabbaaaaaababbbbbbbaaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbbaaaabbbabbbbbbbbbaaaaaabbaabbaaaabbaaabaaaabbbbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbbbaabbbaaaabbbaabbbbbbbbaaaaaabbaabbbaaabbbabbbaabbbbbbbbaaabbbaabbbbbbbbaabbb + abbaaabbbbbbbbaabbbaaaabbaaabbbbbbbbbbaaaabbaaabbbaabbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbabbbbaaaabaaaabbbbbbbbbbaaaabbaaabbbaabbbbbbbabbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbabbbaaaaaaaaaaabbbabbbbbbaaabbaaabbbaabbbbbbbbbbbbbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbabbbbaaaaaaaaabbbbabbbbbaaaabbaaaabbaabbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbabbbbaaaaabbaaabbbaabbbbaaaabbaaaabbaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabba + abbaabbbbbbbbbabbbbaaaaaabaaabbbbbbbaaaaaabbaaaabbaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabba + bbbaabbbbbbbbbabbbbaaaaaabaaaabbbbbbaabaaabbaaaabaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbbaabbbbbbbbbbbbbbaaaaaabaaaaabbbbbbaaaaabbaaaabbaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbaaabbabaaabbbbbbaaaaaabbaaaaabbbbbbbabaabbaaaabbaabbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaabbbbba + abbbbbbbbbbbabbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbaabbbabaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbabbbbbbbbbaaabbbba + abbbbbbaabbaaaaaaaaaaaaabbaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbabaabbbbbbaaabbbba + bbbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaabbbbbbbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbaabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbaabbbaaaaaaaabbbbaaaaaabbaaabbbbbbaaabaaabbbaaaaaaaabaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbbaabbbbbbbbaaaabbbaaaaaabbaaabbbbbbaaabbaaaaaaaaabaaaaaaababaabbbbbaaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbabbbaaaaaaabbbbbbaaabbaaaaaaaaabaaaaaaabbbaabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbaaaabbbbbbbaaaaaaabbbaaaaaaaabbbbbbbaabbbbaaaabbbbba + abbbaaabbbbbbaaaabbabbbbbbbbaaabbbbbbbaaabbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbaaabbbbbbbbbabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbaaaaabbbbba + abaabaaaabbbbaabbbbabbbbbabaaabbbbbbbbbbbbbbbbbbbbbbabbbbbaaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabbabbbbbbbabbbbbbbbbbbbbbaabbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbbbbbbbaaaaaaabbbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbbbbbaaaaaaaaaabbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbbbbbaaaaaaaaaaabbbbbbaaabbbaaaabbaabbaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbbbbaaaaaaaaaaaabbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaaabbbbaaaabaaabbbbbbaaaaaaaaaaaabbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbbbbaaaaaaabbbaaabbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbbaaaabbbbaabbbbbaaaaabbbbbbaabbbaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbbbbaaabbbbbbbbaabbabbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbbaaaaaaaaabbbbaaaaabbbaabbbbbbbbbaabbbbbbabbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbabbbaaabbbbbbaabaaaaabbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbabbbaaaaabbaaabbaaaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbaabbaaaaaabbbbabbbaaaaabbaabbaabaaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbabbbbbaaabbaaaaabaaabbbbbabbbaaaaaabbbbbaabbaaaaabbbbbbbbaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaabbbaaaaabbbbaabbbaaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaabbabaaaabbbbaabbbbaaaaabbbbbaaaaaabbbbaaaaaabaabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbbaaaaabbaaabbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbaabbbaaaaabbbbaabbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbaaaabbbbaabbbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbaaaabbbaabbbbbbbbbaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + aabaaaabaaabbbaaaaaabbbabbbbaaabbbbbaaabbbbbbbbbbbbbbbbbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + baaaabbbaaabbbbabbaabbbabbbbaaabbbbbaaabbbaaaaabbbbbbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbaaaabbbbbaaabbbaaabaaaaaabbbbbbbaaaaabbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbaaaaabbaabbaaaaaaaabbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaabbbbaaaaaabbaabbaaaaaaaabbbbbbaaaaabbabbbbaabaabbbaabbaaaaba + aaaabbbbabbbbaabbbbaabbaaaaaabbbbbaabaaabbaabbbaaaaaaaabbbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaabbbbaaabbaabbaaabbaaaaaaaabbbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaabaaaaaaabbbbabbbbaaaabbbbbbaaabbaaaaaaaabbbbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbbbbbaaaaaabbabaaabbbaaaaaaaabbbbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbbbbbaaaaaabbbabaabbbaaaaaaaabbbbbaaaaabbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbbbbaaaaaaaabbbbaabbbaaaaaaaabbbbaaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbaaaabbbbbbaaaaaaaaaabbbbbbbbbaaaaaaaabbbaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaabbbbbaaaaaaaaaaabbbbbbbbbaaaaaaaabbbaaaaaaabbbbaaaabbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbaabaabbbaaaaabbaaaaabbbbababbaaaaaaaabbbabbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbabbbbbaaaaaaabbbbaaaabbbbbbaaaaaaaaaabbbbbbaaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbbbbaaaaaabbbbbaaaaaaabbbbbaaaaaaaabbabbbaaaabbbaabbabbbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbbbaaaaababbbbbaaaabbbbaaabaaaaaaabbabbbaaaabbbaabbaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbaabbbbbaaaabaaabbbbaaaaaababbbbaaaaaabbbabbbaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbaaaabbaaabbbbaaaabbbaaabbaaaaaabbbbbbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbaaaabbbaabbbbbaaaabbbbbbaaaaaaabbbbbbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbbbaaaabbbaabbbbbaaaabbaabbbaaaaaabbbbbbbaaaabbaaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbbabbbbbaaaabbaaaabbbbbaaaabbbbaaaaaaaabbbbabbaaaabbabaabbaabbbbaabbabbbbba + abaabbbbbaaaabbbaabbbbbaaaaabaaaabbbbbaaaaaabbbbbaaaaabbbbabbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbaabbbbbaaaabbaaaabbbbbaaaabbbaaaaaaaaabbbbabbbaaababbaabbbabbbaaabbaabbbba + abaabbbaaabbbaaaabbbbbbaaaabbaaaaabbbbbaaabbbbbbbaaaaabbbbabbbaaaaabbaaabbabbbaaaababbbbba + bbaabbbaaabbbbaaababbbbbaaaabaaaaabbbbbaaaabaaaaaaaaaabbbbabbbaaaaababaaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaabbbbbaaabbaabaaabbbbaaaabbbbbaaaaaabbbbbbbbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbaaabbaabbaabbbbaaaabaabbaaaaaaabbbbbbbaaaaaabbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbaaaabbbbbaaaabbaabbaabbbbbaaabbbbbaaaaaaabbbbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaabbbbbbaaaabaaabbaabbbbbaaababbbbaaaaaabbbbbbbaaaaabbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabbbbbbaaaabaaabbbaabbbbaaabbaaaaaaaaaabbbbbbbaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbaabbbbbaaaaabaaabbbbbbbbbaaabbbbbbaaaaaaabbbbbbbaaaaaaabbaaaabbbbbbbaaabbba + abbbaaabbbbbbbbaabbbbbaaaabbbaabbbbaabbbaaabaaaabaabaaaaabbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbaaabbbbbaaaabbbaabbbbbaabbaabbabbbaaabaaaaabbbbbbaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbaaaabbbaabbbbbaaabbabbabbbbaabbaaaabbbbbbaaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaabbbbbaaaabbbaabbbbbbaaaaaababaaaaabbaaaaabbbbbaaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaabbbbbaaaabbbaaaabbbbbaaababbabbbbaabbaaaaabbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbbbbaaaabbbaaabbbbbbaaaabbbaaaabaabbaaaaabbbbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaabbbbbaaaabbbbaaaabbbbbaaabbbabbbaaabbaaaaabbbbbbbabaaaaaaaaaabbbbbbbaaabba + abbbaabbbbbbbbaabbbbbaaaabbbbbababbbbbaaaabbaabbbaabbaaabbbbbbbbbbbbaaaaabaaabbbbbbbaaabba + abbaaaabbbbbbbaabbbbbaaaababbbbbabbbbbaaaabbaabbaaabbaaabbbbaabbbbbbbaaabbaaabbbbbbbaaabba + bbbbaaabbbbbbbaabbbbbaaaaaabbbbbabaabbbaaabbaabbaaabbaaaabbbaabbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbaaabbbbaaaaaabbbbbbbaabbbaaabbaabbaaabbaaabaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaabaaaabbaaabbbbaaaabbabbbbbbaaabbbaabbaaabaaaaaabaaaabbabbbbbbbbabbbaaabbbbbbbbaabbb + abbbaabbbabaabaabbbbbaaaabbabbbbbbaaabbbaabbaaabaaaaaabbaaaababbbbbbbaaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbbbbaaabbbabbbbbbbbabbbbabbaaabbaaaaabbaaaaaabbbbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbbbaabbbbaaaabbbabbbbbbbbabbaaabbaaabbaaaaabbbabaaabbbbbbbaaabbbaabbbbbbbbaabbb + abbaaabbbbbbbbaaabbbaaaabbaabbbbbbbbaaaaaabbaaabbbaaaabbbbbaaabbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbaaaabbbabbbbbbbbbaaaaabbaaabbbbaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbaaaabbaaabbbbbbbbbaaaabbaaabbbbaaabbbbbbbbbbbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaabbbbaaaaaaababbbabbbbbbaaabbaaabbbbaaabbbbbbbbbbbbabbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbaaaaaaaaabbbabbbbbbaaabbaaabbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbaaaaabaaabbbaabbbbaaaabbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbaaaaabaaabbbbbbbbbaaaabbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbabba + bbbaabbbbbbbbbaabbbbaaaaabaaabbbbbbbabaaaabbaaaabbbaaabbbbbbbbbbbbbbabbbbbbabbbbbbbbbbabba + bbaaabbabaaabbaabbbbaaaaabaaabbbbbbbbabaaabbaaaabbbaaabbbbbbbbbbbbbbabbbbbbabbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbabbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbaabbbabaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbba + abbbbbbaabbaaaaaaaaaaaaabbbaaaaabbbbbbaabaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaaabbbbbbaaabbbba + abbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabbbabbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbaabbbaaaaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbaaaaaaaabaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbbaabbbbbbbbaababbbaaaaaabbaaabbbbbbaaabbaaaaaaaaabaaaaaaababaabbbbbaaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbabbaaaaaaabbbbbbbaabbaaaaaaaaabaaaaaaabbbaabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbaabbbbaaaabbbbba + abbbaaabbbbbbaaaabbabbbbbbbbaaabbbbbbbaaabbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbbaaabbbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbaaaaabbbbba + abaabaaaabbbbaabbbbabbbbbabaaabbbbbbbbbabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbbbbbbbaaaaaabbbbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbbbbbbaaaaaaaaabbbbbbbaaabbbaaaabbaabbaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbbbbbaaaaaaaaaabbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaaabbbbaaaabaaabbbbbaabaaaaaaaaabbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbbbaaaaaaaaaaaaabbbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbbaaaabbbbaabbbbaaaaaaabbbaaabbbaaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbbbbaaaaabbbbbaabbbabbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbbaaaaaaaaabbbbaaaabbbbabbbbbbbbbaabbbbbbbabbbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbabbaabbbbbbbbbbabbaaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbabbbabbbbbbbbbbabbaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbbbbaaaabbaaaabaabaaaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbabbbbbbaabbaaaaabaaabbbbbabbaaaaabbaabbaaabbaaaaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbabbbaaaabbbbbbaabbbbaaaabbbbbaaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbabbbbaaabbbbbbaabbbbaaaaabbbbbaaaaaabbbbaaaaaabaabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbbaaaabbbbbabbbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbabbbbaaaabbbbaabbbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbaabbaaaaaabbbaabbbbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbaaaabbbbaabbbbbbbbbbaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + aabaaaabaaabbbaaaaaabbbabbbbaabbbbaaaaabbabbbbbbbbbbbbbbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + baaaabbbaaabbbbabbaabbbabbbaaaabbbaaaabbbaaaabbbbbbbbbbbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbaaaaabbbaaabbbbaaabbbbbbbbbbbbbbaaaaabbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbaaabbbbaaaaaaaaaaabbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbaaaabbbaabbaaaaaaaaabbbbbaaaaabbabbbbaabaabbbaabbaaaaba + aaaabbbbabbbbaabbbbaabaabaababbbbbaaaaaabbaabbaaaaaaaaabbbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaabbbbbabaaaabbaabbaaaaaaaaaabbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaabbbbaabbaaabbaabbaaaaaaaaaabbbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbabbbbbaaabaaabaaabbbaaaaaaaaabbbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbabbbbaaaabbaabaaabbbaaaaaaaaabbbbaaaaabbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaaabbbaaabbbbbbbbbaaaaabbbabbbbbbbaaaaaaaaabbbbaaaaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbaaaaabbbbbbbaaaaaaabbaababbbbaaaaaaaaabbbaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbbbaaaaaaaabbbbbabbbbaaaabaaaabbbbaaaaabbbbaaaabbbaaaabbabbbbbaa + baaaaaaaaaaaabbbbbaabaabbbbaaaaaaaaaabbbbbbbbbaaaabbaaaabbbbbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbaabaabbbbaaaaaaaaaabbbbbbbabbaaabbaaaabbbbbaaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbbbbbbaaaabbbbaaaabbbabbbaaaaabbaaaabbbbbaaaabbbaabbaabbbbaaaaaaabbbba + abaaabbbbbaabbbbbaabbbbbaaaaaabbbbaaaabbbaababbaaabbaaaabbbbbaaaabbbaabbaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbaabbbbbaaaaaaabbbbaaaaabbbaaaaaaabaaaaabbbbbaaaabbbaaabaabbbbbbaaaaaaaaba + aabbbbbbbaaabbbbbaabbbbbaaaabaabbbbaaaabbaaabbbbaaaaaaaabbbbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbbaaabbaaabbbbaaaabbbaaaabaaaaaaaabbbbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbbbaaaababaabbbbaaaababbbbbaaaaaaaaabbbbbaaaabbababbbaabbbbaaababbbbaa + abbbbbbbbbaaabbbaabbbbbaaaaabaaabbbbaaaabbbbaabbaaaaaaaabbbbbaaaabbabaabbaabbbbaabbabbbbba + abaabbbbbaaaabbbaabbbbbaaaabaaaabbbbbaaaaabbbbbaaaaaaaaabbbbbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbbbbbaaaabaaaabbbbbbaaabbaabbbaaaaaaaaabbbbbaaababbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaababbbaaaaaaaaabbbbbbaaaabbbbaaaaaaaaaaabbbbbaaaaabbaaabbabbbaaaababbbbba + abaabbbaabbbbaaaaaabbbbaaaabaaaabbbbbbaaaababbbbbaaaaaaaabbbbbaaaaababaaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaabbbbaaaaaaaaaabbbbbaaaabbbaaaaaaabaaaabbbbbaaaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaaabbbbbaaaabaaabaabbbbaaaabbbbbbbaaabaaaabbbbbaaaaaabbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbaaaabbbbbbaaaaaaabaabbbbbaaaabaaaaaaaaaaaaabbbbbaaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaabbbbbbbaaaaababaaabbbbaaaabbbbbbaaaaaaaabbbbbaaaaabbbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabbbbbbaaaabababbaabbbbaaaabaabbbaaabaaaabbbbbbaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbaaaabbaabbaabbbbaaaabbbaaaaaabbaaaabbbbbaaaaaaabbaaaaabbbbbbaaabbba + abbbaaabbbbbbbbaabbbbbbaaaabaabbbbaaabbbaaabbbbbbaabbbaaaabbbbbaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaabbbbbaaaabaaabbbbabbbbaaabbaaaaaabbbaaaaabbbbbaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaabbbbaaaabbbaabbbbbabbbaaaabbbbbaabbbaaaaabbbbbaaabbbbbbbaaabbbbbbbaabbba + abbbaaabbbbbbbbaabbbbbaaaabbbaabbbbaaabbaabaaaaabaabbbbaaaaabbbbaaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaabbbbbaaaabbbaabbbbbaaabaabbbbbabaabbbaaaaaabbbbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbbbbbaaaabbbaaabbbbbaaababbabbbbaabbbaaaaaabbbbbaaaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbbbaaaabbbaaaabbbbaaaaabbabaaaaaabbaaaaaabbbbbbbbaaaaaabaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbbbaaaabbaaaabbbbbaaaabbbabbbbaaabbaaabbbbbbbbbbbaaaaabbaabbbbbbbaaabba + abbaaaabbbbbbbaaabbbbbaaaaabbaaabbbbbbaaabbbabaabaaabaaaaabbaabbbbbbbaaabbaaabbbbbbbaaabba + bbbbaaabbbbbbbaabbbbbaaaaaabbbbbbbbbbbaaaabbabbbbaaabaaaaabbaabbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbbbbbbaabbbbbaaaaaabbbbbbbbbbbaaaabbaabbbaaabaabaaabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaabaaaabbaabbbbbaaaaabbbbbbbbabbbaaaabbaabbbaaaaaabbaabaabbbbbbbbabbbaaabbbbbbbbaabbb + abbbaabbbbbabbaabbbbbbaaaabbbbbabbbbbbbaaabbaaaabaaaaaabbbaaaabbbbbbbaaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbbbbbaaaabbbbbbbbabbbbaaabbaaaabaaaaaabbbaaaabbbbbbbaaabbbaabaaaaaabaabba + abbbaabbbbbbbbaabbbbbaaaabbbbbbabbaaaaaaaabbaaaabbaaaaabbbbaabbbbbbbbaaabbbaabbbbbbbbaabbb + abbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaaabbaaabbaaabbbaaaaaabbbaaabbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbaaaabbbbbbbbaabbbbaaabbaaabbbaaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbaaaabbbbbbbbbabbbaaaabaaaabbbbbaaaabbbbbbbbbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaabbbbbaaaabbabbbbbbbbbaaaaabbaaabbbbbaaaabbbbbbbbbbbbabbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbaaaaabaabbbbbbbbbaaaabbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbaaaaaaaabbbbbbbbbbaaabbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbabba + bbbaaabbbbbbbbaabbbbbaaaaaaaabbbabbbbbbaaabbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbaaaaaaaabbbaabbbbaaaabbaaaabbbbaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbabba + bbaaabbabaaaabaabbbbbaaaaaaaabbbbbbbbbaaaabbaaaabbbbaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbabbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbaabbbabaaaabbbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbba + abbbbbbaabbaaaaaaaaaaaaabbbaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaaabbbbbbaaabbbba + abbbbbbaabaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabbbabbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbaabbbaaaaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbaaaaaaaabaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbbaabbbbbbbbaababbbaaaaaabbaaabbbbbbaaabbaaaaaaaaabaaaaaaababaabbbbbaaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbabbaaaaaaabbbbbbbaabbaaaaaaaaabaaaaaaabbbaabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbbbbbbaaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbaabbbbaaaabbbbba + abbbaaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaaabbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbaaaaabbbbba + abaabaaaabbbbaabbbbabbbbbabaaaabbbbbbbaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaaaaabbbbbbbbbabbbbbbbbbbbbabbbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbabbbbbbbbbbbaabbbbbbbbaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbabbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbbbbbbbaaaaaabbbbbbbbbaaabbbaaaabbaabbaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbbbbbbaaaaaaaabbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaaabbbbaaabbaaabbbbbbaaaaaaaaaaabbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbbaabbaaaaaaaaabbbbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbbaaaabbbbaabbbaaaaaaaaaaaaabbbbaaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbbbaaaaaabbbbaabbbbaabbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbbaaaaabbbbbaaabbbabbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaabbbaaabbbbbbbaaabbbbbbbabbbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbbbbaabbbbbbbbaaabbaaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbbbbabbbbbbbbbbaabbaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbaabbaaaaaabbbbbbaaabbbbbbbbaabbbaaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbabbbbbbaabbaaaaabaaabbbbbbbaaaabbaaaabaaabbbaaaaabbbbbbbaaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbabbaaaabbaabbbaabbbaaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbabbbaaaabbbbbbaabbbbaaaaabbbbbaaaaaabbbbaaaaaabaabbbabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbaaaabbbbbbaabbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbabbbaaaabbbbbaabbbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbbabbbbabbbaaaabbbbbaabbbbbbbbaaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbabbbbaaaabbbbaabbbbbbbbbbaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + aabbaaabaaaabbaaaaaabbbabbbbaabbbaaabbbbbabbbbbbbbbbbabbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbaaabbbbabbaabbbabbbbaabbbaaaaabbbaaaabbbbbbbbbbbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbaaaabbbaaaabbbaaaabbbbbbbbbbbbbbaaaaabbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbaaaabbbaaabbbbbbbbbbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbaaabbbbaabaaaaaaaaabbbbbbaaaabbbabbbbaabaabbbaabbaaaaba + aaaabbbbabbbbaabbbbaabaabaabaaabbbbaaabbbbaabaaaaaaaaaabbbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaabbbbaaaaaabbaabbaaaaaaaaaabbbbbaaaaaaaaabaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaabbbaaaaaabbaabbaaaaaaaaaabbbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaabbbbaabaaaabaaabbaaaabaaaaabbbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbaabbaaabaaabbaaaabbaaaaabbbaaaaabbbbaaaababaaabbbabbbbaba + baabbbbbbbbbaaaabbaaaabbbbbabbbbaaabbaaababbbbaaaaabaaaaabbbbaaaabbbbaaaabaaaabbbbabbbbaba + baabbbbaaaaaaaabbbaaaaabbbbbbbbaaaaabbabbaabbbaaaabbabaaabbbbaaaabbbbaaabbbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbbbbaaaaaabbbababbbbaaaaababaaabbbbaaaabbbbaaaabbbaaabbbabbbbbaa + babbaaaaaaaaabbbbbaabaabbbbbbaaaaaaabbbbbaabbbaaaaabbaaaabbbbaaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbaabaabbbbbaaaaaaaabbbbbbbbbbaaaabbbbaaaabbbaaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaabbbbaaaaaaaaaabbbbbbbabbaaabbbaaaaabbbaaaabbbaabbaabbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbbbbbaaaabbbaaaabbbaabbbaaaaabbbbaaaabbbaaaabbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbbbaaaaaabbbbaaaabbbbaaabbaaabbbbaaaabbbaaaabbbaaabaabbbbbbaaaaaaaaba + aabbbbbbbaaabbbbbaabbbbbaaaaaabbbbaaaaaaabbbbaaaaabbbbaaaabbbaaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbbaaaabaabbbaaaaabbaaabbbaaabbbbaaaabbbbaaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbbbbaaaaaaabbbbaaaaabbbaaaaaaaabbbaaaabbbbaaabbababbbaabbbbaaababbbbaa + abbbbbbbbbaaabbbaabbbbbbaaaaaaabbbbaaaaaaaabbbbbaaabbbaaaabbbbaaabbabaabbaabbbbaaababbbbba + abaabbbbbaaaabbbaabbbbbaaaaaaaabbbbaaaaabbbaaabbaaabbaaaaabbbbaaabaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbabbbaaaaaaaabbbbbbaaaaabbbbbaaaaabbaaaaabbbbaababbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaabbbaaaaaaaabbbbbbaaabbbaaabbaaaabbaaaaaabbbbaaabbaaabbabbbaaaababbbbba + abaabbbaabbbbaaaaaabbbbaaaaaaaabbbbbbaaaabbbbbbaaaaabbbaaaaabbbaaaababaaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaabbbbaaaaaaaaabbbbaaaaabbaabbbbaabbbbaaaabbbbbaaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbaaaabaaaaabbbbaaaaabbbaaaaaabbbbaaaabbbbbaaaabbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbbaaabbbbbaaaaaaaaaabbbbaaaaabbbbbbbaaabbbaaaaabbbbaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaabbbbbbbaaaaaaabaabbbbaaaabbaaaaaaaabbbbaaaabbbbaaabbbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaabbbbaaaaababaabbbbaaaabbbbbbbaaabbbbaaaabbbbbaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbaaabababbaabbbaaaabbaaaabaaabbbbaaaabbbbbaaaaaabbaaaabbbbbbaaabbba + abbbaaabbbbbbbbaabbbbbbbaaabbaabbbabbbbaaabbbbaaaaaabbbbaaaabbbbbaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbaaaabbaabbbaabbbbaabbabbbbaaabbbbaaaaabbbbaabbbbbbbaabbbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbaaaabbaaabbaabbbbaabbbbaaaaabbbbbaaaaabbbbaaabbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaababbbbaaaabbbaabbaaabbbaababbbbbaaabbbbaaaaabbbbaaaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaabbbbbbaaaabbaaabbaaaabbaababaaabbaabbbaaaaaaabbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbbbbaaaabbaaabbbbaabbaababbbbbaaabbbaaaaaaabbbbaaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbbbbaaaabbaaabbbbbaabaabaaaabbbaabbaaaaabaabbbbbbaaaaaabaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbbbbaaabbbaaaabbbbaabaabaabbaaaaabbaaaabbbabbbbbbaaaaabbaabbbbbbbaaabba + abbaaabbbbbbbbaaabbbbbbaaaabbaaaabbbbaaaabbaabbbbbaabbaabaabaaabbbbbbaaabbaaabbbbbbbaaabba + bbbbaaabbbbbbbaaabbbbbbaaaabbbaabbbbbbaaabbaabaabbaabbaabbabaabbbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbabbbbaaabbbbbaaaaabbbabbbbbbbaaabbaabbbbbaabaaabbabaabbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaaaaaaabbaaabbbbbaaaaabbbbbbbbbbbaaaabaaaabbbaaaaaabbbaaabbbbbbbbabbbaaabbbbbbbbaabbb + abbbaabbbbbaabaabbbbbbaaaaabbbbbbbabbbaaaabbaabbbbaaaaaaabbaaabbbbbbbaaabbaaabbbbbbbbaabbb + abbbaabbbbbbbbaabbabbbaaaaabbbbbbbaabbbaaabbaaaabbaaaaaaabbaaaabbbbbbaaabbbaabbaaaaabaabba + abbbaabbbbbbbbaabbbbbbaaaabbbbbbbbaabbbaaabbaaaaabaaaaaaabbaaaabbbbbbaaabbbaabbbbbbbbaabbb + abbaaabbbbbbbbaaabbbbbaaaababbbbbbbbaaaaaabbaaaabbbaaaaaabbbaaabbbbbbbbbabbaabbbbbbbbaabba + abbaaabbbbbbbbaaaabbbbaaaabbbbbbbbbbabaaaabaaaabbbbaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbaaaababbbbbbabbbaaaabaaabbbbbaaaaaabbbbbbbbbbbabbbaaaaabbbbbbbbaabba + abbaaabbbbbbbbaabbbbbbaaaabaabbbbbbbaaaaaabaaaabbbbbbaaaaabbbbbbbbbaabbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbaaaabaabbbbbbbaaaaaabaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbaaaaaaababbbbbbaaaaabaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbaaaaaaabbbbbbbbbbaaabaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbaaaaaaabbbbbbbbbbaaabaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbabba + bbaaabbabaaaaaaabbbbbbaaaaaaabbbbbbbbbaaaabaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbabbbaabbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbbabbabaaaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaabbbbba + abbbbbbababaaaaaaaaaaaaabbbaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaaabbbba + abbbbbbabaaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaaabbbabbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaaabbbba + abbbbbbaaaaabbbaabbbaaaaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbbaaaaaaabaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbbaabbbbbbbbaababbbaaaaaabbaaabbbbbbaaabbaaaaaaaaabaaaaaaaaabaabbbbbaaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbabbaaaaaaabbbbbbbaabbaaaaaaaaabaaaaaaabbbaabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbaaaaaababaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbaaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaaabbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbaaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbaaaaabbbbba + abaabaaaabbbbaabbbbabbbbaaaaaaabbbbbbbaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaaaababbbaabbaabbbbbbbbbbbbabbbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbbbbbbbbbbbbaaabbbbbbbbaaaaaaaabbaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbabbbbbbbbbbbbbbbbbbbbaaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + aabbbbbbaaaaabbbbbaaaaaaabbbbbbbbbaaaaaaabbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbbbbaaaaaaaaaaabbabbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbbbbabaaaaaaaaabbbbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbbaaaabbbbaabbbaaaaaaaaaaaaabbbbaaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbbbaaaaaaaaaaaabbbbaabbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbbaaaaaabbbbaaabbbabbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaabbbaaaabbbbbbaaabbbbbbbabbbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbbbbbabbbbbbbbaaabbaaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaabaaabbbbbabbbbbbbbbbaabbaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaaaaabbbbbbababbbbbbbbaabbbaaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbabbbbbbaabbaaaaabaaabbbbbbbaaaabbbaabbaabbbbaaaaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbabaaaaabaaabbaaabbbaaaaabbbbbbaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaabbbaaaabbbbabbbbbabbaaaabbaabbbaabbbbaaaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbaaaabbbbbbaabbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbabbbaaaabbbbbbabbbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbbabbbbabbbaaaabbbbbaabbbbbbbbaaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbabbbaaaaabbbbaabbbbbbbbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + aabaaaabaaaabbaaaaaabbbabbbbaabbaaaabbbbbabbbbbbbbbbbabbaaaaaaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbaaabbbbabbaabbbabbbbaabbbaaabbbbbaaaabbbbbbbbbbbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbaaaaabbbaaaabbbbbbbbbbbbbbaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbaaaabbbaaaabbbbbbbbbbbbbbaaaaabbbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbaaaabbbbaabaabbaabbbbbbbbbaaaabbbabbbbaabaabbbaabbaaaaba + aaaabbbbabbbbaabbbbaabaabaabaaabbbbaaabbbbaabaaaaaaaaaaabbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaaabbbbaaaabbbaabaaaaaaaaaaabbbbbaaaaaaaaabaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaabbbaaaaaabbaabbaaaaaaaaaaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaaabbbbabaaaabaaabbaaaaaaaaaaabbbaaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbaabaaaabbaabbaaaaaaaaaaabbbbaaaabbbbaaaabbbaaabbbabbbbaba + baabbbbbbbbbaaaabbbaaaabbbbaabbbbaabbaaabbbbbbaaaaabbbaaaabbbaaaabbbbaaaabaaaabbbbabbbbaba + baabbbbaaaaaaaabbbaaaaabbbbabbbbaaaabbaabbabbbaaaaaaabaaaabbbaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbbbbbaaaaabbaababbbbaaaabbaaaaaabbbbaaabbbbaaaabbbaaabbbabbbbbaa + babbaaaaaaaaabbbbbaabaabbbbbbbaaaaaabbbabaabbbaaaabbbbaaaabbbbaaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbaabaaabbbbbaaaaaaabbbbbabbbbaaaabbbbaaaaabbbaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaabbbbbaaaaaaaabbbbbbbbbbaaaabbbbaaaaabbbaaabbbaabbabbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbabbbbaaaaaaaaaabbbbbbbabbaaabbbbaaaaabbbbaabbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbbbbbaaaabbbbaaabbbaabbaaaaaabbbbbaaaabbbbaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbbbaaaaabbbbaaaabbbaaabbbaaabbbbbaaaabbbbaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbbaaaaaaabbbaaaaaabbbaaaaaaaabbbbaaaabbbbaabbaaabbbaabbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbabbaaaabaabbbaaaaabaaabbbbaaaabbbbaaaaabbbaabbaaabbbaabbbbaaabaabbbaa + abbbbbbbbbaaabbbaabbaabbaaaaaaabbbbbaaabbbbaaabbaaabbbbbaaaabbbbabbababbbaabbbbaaababbbbba + abaabbbbbaaaabbbaabbabbbaaaaaaabbbbaaaaaaabbbbbaaaaabbbbaaaaabbbbbaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbaabbbaaaaaaabbbbbaaaabbaaaabbaaaabbbbaaaaaabbbbabbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaabbbbaaaaaaabbbbbbaaaabbbbbaaaaaabbbbaaaaaabbbaabbaaabbabbbaaaababbbbba + abaabbbaabbbbaaaaaaabbbbaaaaaaabbbbbbbaabbaabbbbaaabbbbbaaaaaabbbaaaabaaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaaabbbbaaaaaaabbbbbbaaaabbbbaaaaaabbbbbbaaaaabbbaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbaaaaaaaabbbbaaaaaaabbbbbbaabbbbbbaaaaabbbaaabbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbbaaabbbbbbaaaaaaaaabbbaaaaaabbaaaaaaabbbbbbaaaaabbbaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbbbbbbaabbbbbbbaaaaaaaaabbbbaaaaaabbbbbbaaabbbbbaaaaabbbaabbbbbaaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabaabbbbaaaaaaabaabbbbaaaabbaaabaaaabbbbaaaaaabbbaabbbbbbbaabbbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbaaaaaaabaabbbbaaaabbbbbaaaaabbbbaaaaaaabbbaaaaabbaaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbaaaaaaabbaabbbbaaaababbbbaaabbbbaaaaaaabbbabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbaaaabaabbbabbbbaaaabbaaaaaaabbbbabaaaaabbbabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaaabaabbbabbbbaaaabbbbbbaaabbbbabbaaaabbbaabbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaabbbbbaaaabbaabbabbbbaaaabbaaabbabbbbbabbaaaabbbbaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbaaaabbaabbbabbbaaababbbbbaaabbbaabaaaaaabbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbbbaaaabbaaabbaabbbaababaabbbaabbbaaaaaaaaabbbaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaabbbaaaabbaaababaabbaababbaaaaaabbbaaaabbbaabbbbaaaaaabaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbbbbbaaaabbaabbbbbaabaabaabbbbaaabbbbbabbbbbbbbbbaaaaabbaabbbbbbbaaabba + abbaaabbbbbbbbaaabbbbbbbaaabbbaaabbbbaabaabaabaaabaaabbbaabbbabbbbbbbaaabbaaabbbbbbbaaabba + bbbbaaabbbbbbbaaabbbbbbbaaaabbaaaabbbaaabbbaabbbbabaabbbaabbbaabbbbbbbabbbaaabbbbbbbaaabbb + bbbaaaabbabbbbaaabbbbbbaaaaabbaaabbbbbaaabbaababbbaaabbaaabbbabbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaaaaaaaabaaabbbbbbaaaaabbbabbbbbaaaabbaabbbabbaabbbaabbbbbbbbbbbbabbbaaabbbbbbbbaabbb + abbbaabbbabaaaaaabbbbbbaaaaaabbbbbbbbbaaaabbaabbbbbaaabbaabbbbbaabbbbbaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbbabbbaaaaaabbbbaabbbaaaabbaabaabbaaabbaaabbbaabbbbbaaabbbaabbaaaaabaabba + abbbaabbbbbbbbaabbaabbbaaaaaabbbbaaabbbaaabbaaaaaabaaaabaaaaaaaabbbbbaabbbbaabbbbbbbbaabbb + abbaaabbbbbbbbaaabbbbbbaaaaabbbbbaaabbbaaabbaaaaaabbaaabaaabbaabbbbbbbbbabbaabbbbbbbbaabba + abbaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbabaaaabbaaaaabbbaaaaaaabbbbbbbbbbbbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbaaaaabbbbbbbbabaaaabbaabbbbbbaaaaaaabbbbbbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbaaaaabbbbbbbbbaaaabaaabbbbbbaaaaaaaabbbbbbbbabbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbaaaaababbbbbaaaaaabaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaaabbbbbbbaaaaababbbbbbaaaaabaaaabbbbbbbbaabaabbbbbbbbbbbbbbbaabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbaaaaaabbbbbbbbaaaaabaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbaaaaaabbbbbbbbbaaaabaaaabbbbbbbbaaaaabbbbbbbbabbbbbbbbabbbbbbbbabba + bbaaabbabaaaabaabbbbbbbbaaaaabbbbbbbbbbaaabaaaabbbbbbbbaaaaabbbbbbbbabbbbbbbbabbbbbbbbabba`, + map `abbbbbbbbbbabbbbbaabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbaabbbabbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbabbaabaaaabbbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaabbbbba + abbbbbbabbbaaaaaaaaaaaaabbbaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaabbbbba + abbbbbbabbaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbaaabbbba + bbbbbbbaaaaaabbbabbaaaaaaaabbabbabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaabbbbba + abbbbbbaaaabbbbbabbbbaaaaaaabbbbaaaaaabbaaabbbbbbaaabbaaabbbaaaaaaabaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbbaabbbbbbbbaaaabbbaaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaabaabbbbbaaabbbbba + abbbbaaaaaabbbaaabbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbaabbaaaaaaabaaaaaaaaabbbaabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbaaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbaaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbaaaaabbbbba + abaaaaaaabbbaaabbbbabbbbaaaaaaabbbbbbbaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaabbbbbabbbaaaaaababbbaabbaabbbbbbbbbbbbaabbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaabbbbbabbbaaaabbbbbbbbbbbbbaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbabbbbbbbbbbbbbbbbbbbbaaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + aabbbbbbaaaaabbbbbaaaaaaabbbbbbbbaaaaaaaabbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaabbbbbaaabbaaabbbbbbbaaaaaaaaaabbabbaaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbaaaabbbaabbbbbbaaaaaaaaaaabbbbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbaaaaabbbbaabbbaaaaaaaaaaaaabbbbaaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbbbaaaaaaaaaaaabbbbaabbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbbaaaaaabbbbaaabbbabbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaabbbaaaabbbbbbaaabbbbbbbabbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbbbbbabbbbbbbbaaabbaaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbbbbabbbbbbbbbbaabbaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaaaaabbbbbbababbbbbbbbaabbbaaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbabbbbbaaabbaaaaabaaaabbbbbbaaaabbbaabbaabbbbaaaaabbbbbbbaaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbabaaaaabaaabbaaabbbaaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaabbbaaaabbbbaabbbbabbbaaabbaabbbaabbbbaaaaabbbbbaabaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbaaaabbbbbbaabbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbabbbaaaabbbbbbabbbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbabbbaaaabbbbbaabbbbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbabbbaaaaabbbbaabbbbbbbbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + aabaaabbaaabbbaaaaabbbbabbbbaabbaaaabbbbbabbbbbbbbbbbabbaaaaaaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbaabbbbabbaabbbabbbbaabbbaaabbbbbaaaabbbbbbbbbbbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbaaaabbaaaabbbbaaaabbbbbbbbbbbbbbaaaaabbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaabbbaabbbaaabbbaaabbbbaaaabbbbbbbbbbbbbbaaaaabbbbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbaaaabbbbaabaabbaabbbbbbbbbaaaabbbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbbaabbbbaababbaaaaaabbbbaaabbbbaabaaaaaaaaaaabbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbaaabbbbaaaabbbaaaaabbbbaaaabbbaabaaaaaaaaaaabbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbaaaabbbaaaaaabbaabbaaaaaaaaaaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaaaabbbabaaaabaaabbaaaaaaaaaaabbbbaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbaabaaaabbaabbaaaaaaaaaaabbbbaaaabbbbaaaabbbaaabbbabbbbaba + baabbbbbbbbbaaaabbbaaabbbbbaabbbbaabbaaabbbbbbaaaaababaaaabbbaaaabbbbaaaabaaaabbbbabbbbaba + baabbbbaaaaaaaabbbaaaaabbbbabbbbaaaabbaabbabbbaaaabaabaaaabbbaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbbbbbaaaaabbaababbbbaaaabbbabaaabbbbaaabbbbaaaabbbaaabbbabbbbbaa + babbaaaaaaaaabbbbbaabaabbbbbbbaaaaaabbbabaabbbaaaabbabaaaabbbbaaabbbaaaaabbbaaaaabbabbbbba + aaaaabbbaaaabbbbbbabbaaabbbbbaaaaaaabbbbbabbbbaaaabbbbaaaaabbbaaabbbaaaaabbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaabbbbaaaaaaaaabbbbbbbbbbaaaabbbbbaaaabbbaaabbbaabbabbbbbaaaaaaabbbba + aaaabbbbbbaabbbbbaabbbabbbbaaaaaaaaaabbbbbbbabbaaabbbbaaaaabbbbaabbbaabbaabbbbbaaaaaaaabba + aaabbbbbbbaabbbbbaabbbbbbbaaaabbbbaaabbbaabbaaaaaabbbbbaaaabbbbaabbaaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbbbaaaaabbbbaaaabbbaaabbbaaabbbbbaaaabbbbaabbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbbbbaaaaaaabbbaaaaaabbbaaaaaaaabbbbaaaabbbbaabbaaabbbaabbbbbabbbbbaaba + aabbbbbbbbaaabbbaabbaabbaaaaaaabbbaaaaabaaabbbbaaaabbbbaaaaabbbaabbaaabbbaabbbbaaabaabbbaa + abbbbbbbbbaaabbbaabbabbbaaaaaaabbbbbaaabbbbaaabbaaabbbbbaaaabbbbabaababbbaabbbbaaababbbbba + abaabbbbbaaaabbbaabbabbbaaaaaabbbbbaaaaaaabbbbbaaaabbbbbaaaaabbbbbaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbaabbbaaaaaabbbbbbaaaabbaaaabbaaaabbbbaaaaaabbbbabbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaabbbbaaaaaaabbbbbbaaaabbbbbaaaaaabbbbaaaaaabbbaabbaaabbabbbaaaababbbbba + bbaabbbaabbbbaaaaaaabbbbaaaaaaabbbbbbbaabbaabbbbaaabbbbbaaaaaabbbaaaabaaababbaaaaaaabbbaaa + abbaaaaaabbbbaaaaaaabbbbaaaaaaabbbbbbaaaabbbbaaaaaabbbbbbaaaaabbbaaabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbaaaaaaaabbbaaaaaaaabbbbbbaabbbbbbaaaaabbbaaabbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbaaaabbbbbbaaaaaaaabbbbbaaaaabbaaaaaaabbbbbbaaaaabbbaaabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbbbbbbaabbbbbbbaaaaaaaaabbbbaaaaaabbbbbbaaabbbbbaaaaabbbaabbbbbbaaaabbbbbaaaaabbb + abbbaaabaaaaaaaaabaabbbbaaaaaaababbbbbaaaabbaaabaaaabbbbaaaaaabbbaabbbbbbbaabbbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbaaaaaaabaabbbbaaaabbbbbaaaaabbbbaaaaaaabbbaaaaabbaaabbbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbaaaaaaabbaabbbbaaaababbbbaaabbbbaaaaaaabbbabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbaaaabbbbbbaaaabaabbbabbbbaaaabbaaaaaaabbbbabaaaaabbbabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaaabaabbbabbbbaaaabbbbbbaaabbbbabbaaaabbbaabbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaabbbbbaaaabbaabbabbbbaaaabbaaabbabbbbbabbaaaabbbbaabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaababbbbbaaaabbaabbbabbbaaababbbbbaaabbbaabaaaaaabbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbaabbbbaaaabbaaabbaabbbaababaabbbaabbbaaaaaaaaabbbaabbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaabbaaabbbaaaabbaabbaaaabbaababbaaaaaabbbaaaabbbaabbbbaaaaaabaabbbbbbbaaabba + abbbaabbbbbbbbaabbbbbbbbaaaabbaabbbbbaabaabaabbbbbaabbbbbabbbbbbbbbbaaaaabbaabbbbbbbaaabba + abbaaabbbbbbbbaaabbbbbbbaaabbbaabbbbbaabaabaabaaabaaabbbaabbbabbbbbbbaaabbaaabbbbbbbaaabba + bbbbaabbbbbbbbaabbbbbbbbaaaabbaaabbbbaaabbbaabbbbabaabbbaabbbaabbbbbbbabbbaaabbbbbbbaaabbb + bbbaaabbbbbbbbaabbbbbbbaaaaabbaaabbbbbaaabbbababbbaaabbaaabbbabbbbbbbbabbbaaabbbbbbbaaabbb + abbaaaaaaaaabbaabbbbbbbaaaaabbaaabbbbbaaabbbabbbabbaabbbaabbbbbbbbbbbbabbbaaabbbbbbbbaabbb + abbbaabbbabaaaaabbbbbbbaaaaaabbbbbbbbbaaaabbaabbbbbaabbbaabbbbbaabbbbbaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaabbbaaaaabbbbbbbbbbaaaabbaabaabbaaabbaaabbbaabbbbbaaabbbaabbaaaaabaabba + abbbaabbbbbbbbaabbabbbbaaaaabbbbaaabbbbaaabbaaaaaabaaaabaaaaaaaabbbbbaabbbbaabbbbbbbbaabbb + abbaaabbbbbbbbaaabbbbbbaaaaabbbbbaaabbbaaabbaaaaaabbaaabaaabbaabbbbbbbbbabaaabbbbbbbbaabba + abbaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbabaaaabbaaaaabbbaaaaaaabbbbbbbbbbbbbbaaaabbbbbbbbaabba + abbaabbbbbbbbbaaabbbbbbaaaaabbbbbbbbabaaaabbaabbbbbbaaaaaaabbbbbbbbabbbbbaaaabbbbbbbbaabba + abbaabbbbbbbbbaaabbbbbbbaaaabbabbbbbbbaaaabaaabbbbbbbbaaaaaabbbbbbbbabbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaaabbbbbbbaaaaabaaabbbaaaaaabaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaaabbbbbbbaaaaabababbbbaaaaabaaaabbbbbbbaaabaabbbbbbbbbbbbbbbaabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbaaaaaabbbbbbbbaaaaabaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbaaaaaabbbbbbbbbaaaabaaaabbbbbbbbaaaaabbbbbbbbabbbbbbbbbbbbbbbbbabba + bbaaabbabaaaabaabbbbbbbbaaaaabbbbbbbbbbaaabaaaabbbbbbbbaaaaabbbbbbbbabbbbbbbabbbbbbbbbabba`, + map `abbbbbbbbbaabbbbaaabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbaaabbbabbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbbbaaabaaaabbbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaabbbbba + abbbbbbbaaaaaaaaaaaaaaaabbbaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaaabbbba + abbbbbbbbaaaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + bbbbbbbbaaaaabbbabbaaaaaaaabbabaabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaabbbbba + abbbbbbaaaaabbbbabbbbaaaaaaabbbbaaaaaabbaaabbbbbbaaabbaaabbbaaaaaaabaaaaaaaaaabbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaaaabbbaaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaabaabbbbbbaabbbbba + abbbbaaaaaabbbaaabbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbaabbaaaaaaabaaaaaaaaabbbaabbbbbbaabbbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + ababaaabbbbbbaaabbbabbbbbbbaaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbaaaaabbbbba + abaaaaaaabbbaaabbbbabbbbaaaaaaabbbbbbbbabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbaaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbaaaaaababbbaaabaaabbbbbbbbbbbaabbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbaabbbaabbbbaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbbbbbbbbbabbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbabbbbbbbbbbbbbbbbbbbbaaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + aabbbbbbaaaaabbbbbaaaaaaabbbbbbbbbaaaabaabbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaaabbbbaaabbaaabbbbbbbbaaaaaaaaabbabbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbaaaabbbaabbbbbbaaaaaaaaaaabbbbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbaaaaabbbbaabbbbaaaaaaaaaaaabbbbaaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbbbaaaaaaaaaaaabbbbaabbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbbaaaaaabbbbaaabbbabbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaabbbaaaaabbbbbaaabbbbbbbabbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbbbbbaabbbbbbbaaabbbaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbabbaabbbbbbbbbaabbaaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbabbbbbbaabbabbbaaaaaabbbbbbaaabbbbbbbbaababaaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbabbbbbaaabbaaaaabaaaabbbbbbabaabbbbbbbaabbbbaaaaabbbbbbbaaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbabbaaabbaaabbaabbbbaaaaabbbbbaaaaaaabbbbaaaaaabbabbaaabbbbbbba + abbbbbbbaaabbbaaaabbbbaabbbbabbaaaabbaabbbaabbbbaaaaabbbbbaabaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbaaaabbbbbbbabbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbabbbaaaabbbbbbaabbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbabbbaaaabbbbbbabbbbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbabbbbaaabbbbbaabbbbbbbbbaaaaaaaabaaaabbbabbbbaabbbbbaaaabbbbba + aabaaabbaaabbbaaaaabbbbabbbbaabbbaaaabbbbaabbbbbbabbbabbaaaaaaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbaabbbbabbaabbbabbbbaabbbaaabbbbbaaaabbbbbbbbbbbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbaaaabbbbaaaabbbbbbbbbbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaabbbaaabbaaabbbaaabbbbaaaabbbbbbbbbbbbbbaaaaaabbbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbaaaabbbbaaabbbbbbbbbbbbbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbbaabbbbaababbbaaaaabbbbaaabbbbaabaaaaaaaabaabbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbaaabbbaaaaabbbaaaaabbbbaaabbbbaabaaaaaaaaaaaabbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbaaaabbbbaaaaabbaabbaaaaaaaaaaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaaaabbbaaaaaabbaabbaaaaaaaaaaaabbbaaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbbabaaaabbaabbaaaaaaaaaaaabbbbaaabbbbaaaaabbaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaaabbbbaabbbbaabaaaabbbbbbaaaaababbaaabbbbaaabbbbaaaaaaaaabbbbabbbbaba + baabbbbaaaaaaaabbbaaaaabbbbabbbbbaaabaaababbbbaaaaaaabbaaabbbbaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaabaabbbbbbbbbaaaabbaababbbbaaaaabbbbaaaabbbaaabbbbaaaabbbaaabbbabbbbbaa + babbaaaaaaaaabbbbbaabaaabbbbbbbaaaaabbaababbbbaaaaabbbbaaaabbbbaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbaabaaabbbbbaaaaaaabbbbbabbbbaaaaabbbbaaaabbbbaabbbaaababbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaaabbbbaaaaaaaabbbbbabbbbaaaaabbbbaaaabbbbaabbbaabbabbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbaaaaaaaaaabbbbbbbbbaaaaabbbbaaaaabbbaabbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbbbbbaaaaaaaaaaabbbaaabbbbaaaabbbbaaaaabbbbabbaaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbbbaaaaabbaaaaabbbbbaaaabaaaabbbbbaaaabbbbbbbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbbaaaaaabbbbaaaaaaaaabbbaaaaabbbbbaaaabbbbbbbaaabbbaabbbbbabbbbbaaba + aabbbbbbbbaaabbbaabbaabbaaaaaabbbbaaaaabbbaaabbaaaabbbbbaaaaabbbbbbaaabbbaabbbbaaabaabbbaa + aabbbbbbbbaaabbbaabbaabbaaaaaaabbbaaaaaaabbbbbaaaaabbbbbbaaaaabbbbbabaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbabbbaaaaaabbbbaaaaabbaaabbbbaaabbbbbbaaaaaabbbaabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbaabbbaaaaaabbbbaaaaaabbbbaaaaaaabbbbbaaaaaaabbbabbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaabbbbaaaaaabbbbbbbaaabaabbbbbaaabbbbbaaaaaaaabbabbaaabbabbbaaaababbbbba + abaabbbaabbbbaaaaaaabbbbaaaaaaabbbbbbaaabbbaaaabaaabbbbbbaaaaaaabbaaabaaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaaabbbbaaaaaaabbbbbaaaaaaabbbbbaaabbbbbbbaaaaaabbbabbbaaaabaabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbaaaaaaaabbbbaaaaabbaaaabaaabbbbbbaaaaaaabbbabbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbaaaabbbbbbaaaaaaaabbbbbaaaaabbbbbaaaabbbbbbbaaaaaabbbabbbbaaaaaabbbbaaaaaabb + aaaaaaabbbbbbbbaabbbbbbbaaaaaaaaabbbbaaaaabaaabbbaaabbbbbaaaaaaabbbabbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabbabbbbaaaaaaaaabbbbaaaaabbbaaaaaaabbbbbaaaaaaabbbbbbbbbbaabbbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbaaaaaaaaaabbbaaaaababbbbbaaabbbbbaaaaaaabbbaaaaaaaaabbbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbaaabaabbabbbbaaaabbbaaaaaaabbbbbaaaaaaabbbbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbaaaabbaabaabbbbaaaabbbbbbaaabbbbbabbaaaabbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaaabbaabbabbbbaaaabbaabbbaabbbbaabbbaaaabbbbbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaabbbbbaaaabbaabbabbbbaaabbbbbaaaaabbbbaabbaaaaabbbabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbaaaabbaabbabbbbaaabbaabbbbaabbbbaaaaaaaaabbbabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbbbaaaabbbaabaaabbaaabbbbaaaabaabbbaaaaaaaaabbbaabbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaabbbaaaabbbaabaaabbbaabaabbbbaaaabbbaaaabbbaabbbaaaaaabaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaabbbaaaaabbaabbbbabbaababaaabbbaabbbaaabbbbbabbbbaaaabbaabbbbbbbaaabba + abbaaabbbbbbbbaabbbbbbbbaaaabbbabbbbbaabaabaabbbaabaabbabbabbabbabbbbbaabbaaabbbbbbbaaabba + bbbbaabbbbbbbbaabbbbbbbbaaaaabbaaabbbaababbaaaabbbaaabbabbabbabbaabbbbabbbaaabbbbbbbaaabbb + abbbaabbbaabbbaaabbbbbbbaaababbaaabbbaaaabbaabbaabbaabbbaaabbabbbabbbbabbbaaabbbbbbbaaabbb + abbbaaaaaaaabbaaabbbbbbaaaaaaaaaaabbbaaaabbbabbbbbaaabbbaaaabbbbaabbbbabbbaaabbbbbbbbaabbb + abbbaabbbabaaaaabbbabbbaaaaaaaaaaaabbbaaabbbaaabbbbaaabbaaaabbbbaabbbbabbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaabbbaaaaaaaaaaaabbbaaaabbaabbbabaaabbaaabbbbaabbbbaaabbbaabbaaaaabaabba + abbbaabbbbbbbbaabbaabbbaaaaaaabbaaaabbbaaabbaaaaaaaaaaabaaaaaaaabbbbbbaaabbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaabbbbbaaaaaabbbaaaabbbaaabbaaabaabbaaabaaaaabbbbbbbbbbbabaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbaaaaaabbaaaabbaaaabbaaabaabbbaabaaaaabbbbbbbbbbbaaaabbbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbaaaaaabbaaaaaaaaaabbaaabbbbbbaaaaaaaabbbbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbbaaaaaaaaaabbbbaaabbaabbbbbbbaaaaaaaaabbbbbbabbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaaabbbbbbbaaaaaaaaaabbbaaaaabaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaaabbbbbbbaaaaaaaaaabbaaaaaabaaabbbbbbbbbaaabbaabbbbbbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbaaaaaabbabbbbaaaaabaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbaaaaabbbbbbbbaaaaabaaaabbbbbbbbaaaaaaabbbbbbabbbbbbbbbbbbbbbbbabba + bbaaabbabaaaabaabbbabbbbaaaaabbbbbbbbbbaaabaaaabbbbbbbbbaaaaaabbbbbbabbbbbbbabbbbbbbbbabba`, + map `abbbbbbbabbbbbbbbaabbbbbbbbaaaaaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbbbbaaaaaaabbbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaabbbbba + abbbbbbbabbaaaaaaaaaaaaabbaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaaabbbba + abbbbbbbabbaaabbabbaaaaaaaaabaaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + abbbbbbbaaaaabbbabbaaaaaaaaabbababaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaabbbbba + abbbbaaaaaaabbbbabbbbaaaaaaabbbbaaaaaabbaaabbbbbbaaabbaaabbbaaaaaaabaaaaaaaaaabbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbaabbabbaaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaabaabbbbbbaabbbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaabbbbbbaaaaaaabbbbbbbaabbaaaaaaabaaaaaaaaabbbaabbbbbbaabbbbba + abbbaaaabbbbbaaaabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbaaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbaaaaabbbbba + abaaaaaaabbbaaabbbbabbbbbaaaaaabbbbbbbbabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaaabbabbbaaaaaaabbbbbbbbbbbaabbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbaabbbaaabaaaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbbbbbbbaaabbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaabbbbbbbbbbbbbbbbbbbaaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbbbbabbbbaabbbbbabbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaaabbbbaaabbaaabbbbbbbbaaaaaaaaabbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaabbbbbbbaaaaaaaaaaabbbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbaaa + abbabbbbbbaabbbbaaaabbbbaabbbbaaaaaaaaaaaaabbbaaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbaaaaaaaabbbbbbabbbbbaaaaaaaaaaaabbbaabbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbbbaaaaaabbbaaabbbbbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaabbbaaaabbbbbaaabbbbbbbabbbaabbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbabbbaabbbbbbbbaaabbaabbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaaabbabbbabbbbbbbbbaaabbaabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbabbabbbbbbbbbaaabbbaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbbbbbbbaaabbaaaaabaaaabbbbabbaaabbbbbbbaaabbbaaaaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbabbaaaabaaaabbaabbbaaaaabbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbabbabaaabaaabbaaabbbaaaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbabbbaaaabbbbbbbaabbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbabbbaaaabbbbbbaabbbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaabbbaaabbbbbbaabbbbbbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbabbbbaaabbbbbbabbbbbbbbbaaaaaaaabaaaabbbabbbbaabbbbbaaaabbbbba + abbaaabbaaabbbaaaaabbbbabbbbabbbbaaaabbbbbabbbbbbabbbabbaaaaaaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbaabbbbabbaabbbabbbaaabbbaaaabbbbaaaabbbbbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbaaaabbbaaabbbbaaaabbbbbbbbabbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaabbbaabbbaaabbbaaaabbbaaaabbbbbabbbbbbbbaaaaaabbbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbaaaabbbbaaabbbbbbbbbbbbbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbaaabbbbaababbaaaaaabbbbaaabbbbaabbbbbbbbbbbbbbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaaabbbbaaabbbbaabaaaaaaaaaaabbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbbaaaabbaabbaaaaaaaaaaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaaaaabbbbaaaabbaabbaaaaaaaaaaaabbbbaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbbabaaaabbaabbaaaaaaaaaaaaabbbaaabbbbaaaaabbaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbbbbabaaaabbbbbbaaaaaaabaaaaabbbaaabbbbaaaaaaaaabbbbabbbbaba + baabbbbaaaaaaaabbbaaaaabbbbaabbbbaaabaaababbbbbaaaaaabbaaaabbbaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbbbbbbaaaabbaababbbbbaaaaabbbbaaabbbbaabbbbaaaabbbaaabbbabbbbbaa + babbaaaaaaaaabbbbbaabaabbbbbbbbaaaaabbaababbbbaaaaabbbbaaaabbbbaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbaabaaabbbbbbaaaaaabbbababbbbaaaaabbbbaaaaabbbaabbbaaababbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaaabbbbbaaaaaaabbbbbabbbbaaaaabbbbaaaaabbbaabbbaabbabbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbbaaaaaaaabbbbbbbbbbaaaaabbbbbaaaaabbbabbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaabbbaaaaaaaaaabbbbaaabbbaaaabbbbbaaaaabbbabbaaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbbbbaaaaabaaaaabbaabbabaaaaaabbbbbaaaaabbbbbbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbbbbaaaaabbbbaaaaabaaaabbbaaaabbbbbbaaaabbbbbbaaabbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbaabbaabbaaaaaabbabaaaaabbbbaaaaaaaabbbbbbaaaaabbbbbaaabbbaabbbbaaabbabbbaa + aabbbbbbbbaaabbbaabbaabbaaaaaaabbbaaaaaaaaabbbbaaaabbbbbbbaaaaabbbbabaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaabbaaaaaaabbbaaaaabbbbaaaaaaaabbbbbbaaaaaaabbbbbaaabbabbbaaabbaabbbba + abaabbbaaaabaabbabbaabbbaaaaaabbbbaaaaaaabbbbbbaaaabbbbbbaaaaaaaabbbbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaabbbbaaaaaabbbbaaaaaabbaaaabbaaaabbbbbaaaaaaaabbbbaaabbabbbaaaababbbbba + abaabbbaabbbbaaaaaaabbbbaaaaaaabbbbabaaaabbbbbaaaaaabbbbbbaaaaaaabbbbbaaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaaabbbbaaaaaaabbbbbbaaabbaabbbbbaabbbbbbbaaaaaaabbabbbaaaabbabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbaaaaaabbbbbbaaaaabbbbaaaaaabbbbbbbaaaaaaabbbbbbbaaaaaabbbaaabbbaaa + abbbbaabbbbbbbaaaabbbbbbaaaaaabbbbbbaaaaaaabbbbbbaabbbbbbbaaaaaaabbbbbbbaaaaaabbbbaaaaaabb + aaaaaaabbaabbbbaaabbbbbbaaaaaababbbbbaaaabbbaaaaaaabbbbbbbaaaaaaabbbbbbbbaaaaabbbbaaaaabbb + abbbaaabaaaaaaaaabbabbbbaaaaaabaabbbbaaaaabbbbbbbaaabbbbbbaaaaaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbaaaaaaaaabbbbbaaaabbaaaaaaaabbbbbbaaaaaaaabbbaabaaaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbaaabbaaaabbbaaaaabbbbbbaaaabbbbbbaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbaaaabbabbabbbbaaaaabaabbbbaabbbbbbbbbaaaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaaaabaabaabbbbaaaabbaaaaaaabbbbbbabbaaaaabbbbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbaaaaabaabaabbbbaaabbabbbbbaabbbbbaabaaaaaabbabbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbaaaabbaabaabbbbaaabbbaaaabaabbbbbaaaaaaaaabbbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbbbaaaabbbabaaaabbaaababbbbbaaaabbbbaaaaaaaaaabbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaabbbaaaabbabbbbaabbaaabbaaabbbbaabbbbaaabbbaaabbbbaaaabaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaabbbaaaaababbbbaabbbaababbbaaabaabbbbaaabbbbaabbbbaaabbaabbbbbbbaaabba + abbaaabbbbbbbbaaabbbbbbbaaaaaaaabbbaaaabaabbaabbbbaaabbbaaabbabbaabbbbaabbbaabbbbbbbaaabba + bbbbaabbbbbbbbaaabbbbbbbaaaaaaabbbbbbaabaababbaaabbaabbbabbababbbabbbbabbbbaabbbbbbbaaabbb + bbbbaabbbbabbbaaabbbbbbbaaaaabaaabbbbaabaabaabbbbaaaaabbabaababbbaabbbabbbbaabbbbbbbaaabbb + abbbaaaaaaaabbaaabbbbbbaaaaaaaaaabbabaaaabbabbaabbbbaabbaaaabbbbbaabbbaabbbaabbbbbbbbaabbb + abbbaabbbabaabaabbbabbbaaaaaaaaababaaaaaabbaabbbbabbaabbaaaabbbbaaabbbaabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaabbbaaaaaaaabbabbaaaaabbbabbbbbbbaabbaaabbbbbbabbbbaabbbaabbaaaaabaabba + abbbaabbbbbbbbaabbaabbbaaaaaaabbbabbaaaaabbbaaaaaaabbaabaaabbbbbbbbbbbbbabbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbbaaaaaaabbaaabbaaaabbabaaaaabaaabaaaaaabbbbbbbbbbaaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbaaaaaaabbaaaabaaaabbaaaaaaabababaaaaaaabbbbbabbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbbaaaaaaabaaaabaaaabbaaaaaabbbbaaaaaaaaabbbbbabbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbbaaaaaaabaaaabbaaabbaabbbbbbbbaaaabaaaabbbbbbbbbbbaaabbbbbbbbbabba + abbaabbbbbbbbbaaabbbbbbbbaaaaaabaaaabbaaaabbaabbbbbbbbaaaabaaaabbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbaaaaaaaaabbaaaaaabbaabbbbbbbbbaabbaaaaabbbbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbaaaaaaaaabbaaaaaabaaabbbbbbbbbaaabbaaaabbbbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbaaaaaabaabbbaaaaabaaabbbbbbbbbaaaabaaaabbbbbbbbbbbbbbbbbbbbbbabba + bbaaabaabaaaaaaaabbaabbbbaaaaaabaabbbaaaaabaaabbbbbbbbbbaaabbaaabbbbbbbbbbbbabbbbbbbbbabba`, + map `abbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbbbbaaaaaaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaabbbbba + abbbbbbbabbaaaaaaaaaaaaabbaaabbabbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaaabbbba + abbbbbbbabaaaabbabbaaaaaaaaabbbabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + abbbbbabaaaaabbbabbaaaaaaaaabbbbabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaabbbbba + abbbbaaaaaaabbbaabbbbbaaaaaabbbbaaaaaabbaaabbbbbbaaabbaaabbbaaaaaaabaaaaaaaaaabbbbaaabbbba + abbbbaaaaaabbbbaabbbbbbbbaabbabbaaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaabaabbbbbbaabbbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaabbbbbbaaaaaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbaabbbbbbaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbaaaaabbbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaabbbbbbbaabbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaaabaabbbaaabaaabbbbbbbbbbbaabbaaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbbabbbaaaaaaaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaaabbbbbbbbaaabbbbbbaaaaaaaaabbbaaabaaabbbbbbbbaaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbbaabbbbbbbbbbbbbbbbbbaaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbbababbbbbbbbbbbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbabba + abbbbbbbbaaaabbbbaaabbaaabbbbbbbbbaaaaaaaabbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbbbbbbaaaaaaaaaabbbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbbbbaabaaaaaaaaaabbbaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbaabbbbbaaaaaaaaaaaabbabbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbbbbaaaaaaabaaaabbbbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaabbbaaaaabbbbaaabbbbbbabbbaabbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbaabbbaaabbbbbbaaabbbbbbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaabbbaabbbabbbbbbbbbaabbbabbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbabbbaaabbbbbbbaabbbaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbbbbbbbaaabbaaaaabaaabbbbbabbbbaabbbbbbbaabbbaaaaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaababaabbaaaabaabbbaaaaabbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbaaaabbbbaabbbbaabbbaaaabaaabbaabbbaaaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbaaaabaabbbaabbbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbaabbbaaaabbbbbbaabbbbaaaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbaaaabbbbbbaabbbbbbaaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbaaabbbbbbabbbbbbbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbaaabbaaabbbaaaaaabbbabbbbaabbbbaaaabbbbaabbbbbabbbabbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbaabbbbabbaabbbabbbaaaabbbaaabbbbbaaabbbbbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbabbbaabbbaabbaaaabbbaaaababbaaabbbbbbbaabbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbabbbaabbbaabbbaaabbbaaaabbbbaaabbbbbaaaabbbbbaaaaaabbbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbaaabbbbaaabbbbbabbbbbbbbbaaaaabbabbbbabbaabbbbabbaaaaba + aaaabbbbabbbaaabbbbaababbaaaaaabbbbaaabbbbaaabbbbbbbbbbbbbbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaaabbbbbaaabbbaaababbbbbbbbbbbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbbaaaabbaaabaaaaaaaaaaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaaaabbbbaaaabbaaabaaaaaaaaaaaabbbbaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbbbbaaaabbbaabaaaaaaaaaaaaabbbaaabbbbaaaaabbaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbbbbbabaaaabbbbbbaaaaaaaaaaaabbbbaabbbbaaaaaaaaabbbbabbbbaba + baabbbbaaaaaaaabbbaaaaabbbbaabbbbbaabaaaabbbbbbaaaaaaabaaaaabbbaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaabbbbbaabbaababbbbbaaaaabbbbaaaabbbaabbbbaaaabbbaaabbbabbbbbaa + babbaaaaaaaaabbbbbaabaaabbbabbbbbaaabbaabaabbbbaaaaabbbbaaaabbbaabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbaabaaabbbbbbbaaaaabbbabaabbbbaaaabbbbbaaaabbbbabbbaaababbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaaabbbbbbaaaaaabbbbbaabbbaaaaabbbbbaaaaabbbabbbaabbabbbbbaaaaaaabbbba + aaaaabbbbbaabbbbaaabbbaabbbbbaaaaaaabbbbbabbbbbaaaabbbbbaaaaabbbabbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaabbbbaaaaaaaaabbbbbbabbaaaaabbbbbbaaaaabbbbbaaaabaabbbbbbaaaaaaabba + aabbbbbbbaaabbbbbaabbbbbbbbaaaaaaaaaabbaaaaabbbaaaabbbbbbaaaaabbbbbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbbbbbaaaaaabaaaaaabbbbaaaaaaaaabbbbbbaaaaabbbbbaaabbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbaabbaabbbaaaaabbabaaaaaaaabbbbbaaaaabbbbbbaaaabbbbbaaabbbaabbbbaaabbabbbaa + aabbbbbbbbaaabbbaabbaabbbaaaaaabaaaaaaabbaaaaaaaaaaabbbbbbaaaaabbbbbbabbbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaabbbaaaaaabbbaaaaaabbbbbbbaaaaabbbbbbaaaaaabbbbbaabbbabbbaaabbaabbbba + abaabbbaaaabaabbabbaabbbbaaaaabbbbaaaaabbaaaabbbaaabbbbbbbaaaaaaabbbbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaabbbbbaaaaaabbbaabaaabbbbbbaaaaabbbbbbaaaaaaaaabbbaaabbabbbaaaababbbbba + abaabbbaabbbbaaaaaaabbbbbaaaaaabbbbaaaaaaaabbbbbbaabbbbbbbaaaaaaaabbbbbaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaaabbbbaaaaaaabbbbaaaaabbbbaaaaaaabbbbbbbaaaaaaaaabbbbaaaabbabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbaaaaaaabbbbbaaaaaabbbbbbbaabbbbbbbaaaaaaaaabbbbbaaaaaabbbaaabbbaba + abbbbaabbbbbbbaaaabbbbbbaaaaaaabbbbbaaaaabbaaaaaaaaabbbbbbaaaaaaaaabbbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbaaaaaaaabbbbaaaaaabbbbbbbaaabbbbbbaaabaaaabbbbbbaaaaaabbbbaaaaabbb + abbbaaabaaaaaaaaabaaabbbbaaaaaaaabbbaaaaabbaaaaabaaabbbbbbaaabaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbbaaaaaaaabbbaaaaaabbbbbbaaaabbbbbbbaaaaaaaabbbbbaaaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbaaaabbaabbbbbaaaabaaabbbaaabbbbbbbbbaaaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaaabbaaabbbbaaaabbbaaaaaaaabbbbbbbaaaaaaabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbaaaabaababbbbaaaabbbbbbbbaaaabbbbbbbbaaaaabbbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbaaaabbabaabbbbaaaabaaaaaaaabbbbbbbbbbaaaaabbbbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbaaaabbaaaabbbbaaaabbbbbbaaabbbbbbbabaaaaaabbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbbbbaaabbbaaaaaabbaaaabaaaabbbabbbbbbaaaaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaabbbaaaaabaaaaaaabbaaabbbbbaaaaaabbbbbaaaaaaaaabbbbaaabaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaaabbbaaaaaaaaaaaabbbaaabaaabbbaaabbbbbaaabbaaaabbbbaabbaabbbbbbbaaabba + bbbbaabbbbbbbbaaabbbabbbbaaaaaaabaaaabbbaabbbbaaabbaabbbbaaabbbbaaabbbbabbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbabbbbaaaaaaabbaaaabbaaababbbbbaaabbbbaabbbbbaaabbbbbbbbaabbbbbbbaaabbb + abbbaabbbaabbbaaabbbbbbbaaaaaaaabbaaaaabaabbbaaaabbaaabbbabbbabbbaabbbbbbbbaabbbbbbbaaabbb + abbbaaaaaaaabbaaabbbbbbaaaaaaaaabbaaaaabaabbbbbbaabbaabbaaaababbbaabbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbaabaabbbaabbbaaaaaaaabbaaaaababbbaaabbbbaaabbaaaabbbbbaabbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaabbbaaaaaaaabbbbaaaaabbbabbaaabbaabbaaabbbbbbaabbbbabbbaabbaaaaabaabba + abbbaabbbbbbbbaabbaabbbbaaaaaaaabbabaaaaabbbabbbbbabaabbaaabbbbbbaabbbbaabbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbbaaaaaaaaababaaaaaabbaaaabaaabaabaaaabbbbbbbbbbbbaaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbbaaaaaaaababaaaaaabbabbaaaaabaabaaaaaaabbbbbbbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbbaaaaaaaabaaaaaaaabbaaaabababbaaaaaaaaaabbbbbbbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbbbaaaaaabaaaaaaaaabbaaaaaaabbbaaaaaaaaaaabbbbbbbbbaaabbbbbbbbbabba + abbaabbbbbbbbbaaabbbbbbbbbaaaaaaaaaaabaaaabbaabbbbbbbbaaabaaaaaaabbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbaaaaaaaaaabbbaaabbabbbbbbbbbaaabbbaaaaabbbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbaaaaaaaaabbbbbaabbaabbbbbbbbbaabbbbaaaabbbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbaabbaabbbbbbbbbaaabbbbaaabbbbbbbbbbbabbbbbbbbbabba + bbaaabaabaaaaaaaabbaaabbbbbbaaaaaabbbbbbaabbaabbbbbbbbbbaaaabbaaabbbbbbbbbbbabbbbbbbbbabba`, + map `abbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbabbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbbbbbaaaaaaabbabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbbabbbbbbbbaabbbbba + abbbbbbbabbaaaabaaaaaaabbbbaaabaabbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbaaabbbba + abbbbbbbabaaaabbabbaaaaaaaaabbbabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbaabbbba + abbbbbabaaaaabbbabbbaaaaaaaabbaaabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbaabbbbba + abbbbaaaaaaabbbbabbbbaaaaaaabbbaaaaaaabbaaabbbbbbaaabbaaabbbaaaaaaaaaaaaaaaaabbbbbaaabbbba + abbbbaaaaaabbbbaabbbbbbbbaaabbbbaaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaabaabbbbbbaabbbbba + abbbbaaaaaabbbaaabbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbaabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaabbabbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaabbbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbaabbbbaaaabbbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaabbbbbbbabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaaabaabbaaaabaaabbbbbbbbbbbaabbbaabaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaaabbabbbbbaaabbbbbbaaaaaaaaabbbaaabaaabbbbbbbbbaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabbbbbbbbbbbbbbbbbaaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbbaaabbbbbbbbbbbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaaabbbbaaabbaaabbbbaabbbbbaaaaabbbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaabbbbaaaaaaaaaabbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaabbbbbaaaaaaaaabbabbbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbaabbabbaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaabbbbaaaaaabbbaaabbbbbabbbabbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbbbbbbbaaaaaabbbaabbbaabbaabbbbaaaabbbbbaaabbbbbbbbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaabbbaabbbbaabbbbbbbbaabbbbbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbabbbbaabbbbbbbbaabbaabbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbbbbbbbaaabbaaaaabaaabbbbbaabbabaabbbbbbbaabbbaaaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaabbabaabbbbabbaabbbaaaabbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbaaaabbbbaabbbbaabbbaaaaaaaaabbabbbbaaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaabbbbaaaabaabbbaabbbaaaabbbbaabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbaaaaaaaabbbaabbbbaabbbbaabbbbaaaabbbbbbaabbbaaaabbbaaabbaaabbbbaabbbaaaabbbabbbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbaaaabbbbbbaabbbbbaaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabbbaaaabbbbbbaabbbbbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbaaabbaaabbbaaaaaabbbabbbbaabbbbaaaabbbbbaabbbbabbbabbaaaabaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbaabbbbabbaabbbabbbaaaaabbaaaabbbbaaabbbbbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbaaabbbbaaabbbbbbbaabbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbaaaabbbaaabbbbbaaaabbbbbaaaaaabbbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbaaaabbbaaabbbbbaaaaabbbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbaaabbbbaaaabbbaaaaabbbbbaaabbbaaabbbbbabbbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaaabbbbbaaabbbaaabbbbbbbbbbabbbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbbbaaabbaaabaabbbbbbbbbbbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaaaaabbbbaaaabaaabaaaaaabbbbbbbbbbaaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaaabbbbbbbaaaabbaabbaaaaaaaaaaaabbbaaabbbbaaaaabbaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbbbbbbbaaaabbbbbbaaaaaaaaaaaaabbbaabbbbaaaaaaaaabbbbabbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaabbbbbabaaaabbbabbaaaaaaaaaaaaabbbaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaabbbbbabbaaabababbaaaaaaaaaaaaaabbaabbbbaaaabbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaabbbbbaabbaaababbbbaaaaabbbbbaaaabbbabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbaabaaabbbabbbbbaaaabbaaaabbbbaaaaabbbbaaaaabbbabbbaaababbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaaabbbbbbbaaaaaabbbaaabbbbaaaaabbbbbaaaabbbabbbaabbaabbbbaaaaaaabbbba + aaaabbbbbbaabbbbbaabbbaabbbbbbbaaaaaabbbbaabbbbaaaaabbbbbaaaaabbbbbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaabbbbbaaaaaaaabbbbbbabbbaaaaabbbbbaaaaabbbbbaaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbaabbbaabbbbaaaaaaaaabbbbbbaabaaaaaabbbbbbaaaabbbbbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbbabbbbaaaaaaaaaaabaaaaabbbbaaaabbbbbbaaaaabbbbaaabbbaabbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaabbbbaaaaaabaaaaaaaaaaaaaaaaaaabbbbbbaaaaabbbbaaabbbaabbbbaaabbabbbaa + aabbbbbbbbaaabbbaabbaaabbbaaaaabbabaaaabbbbbbbbaaaaabbbbbbaaaaabbbbabaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaabbbaaaaaabbbbaaaaaaaaabbbbaaaabbbbbbbaaaabbbbabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaabbbbaaaaabbbbbaaaabbbbbaaaaaaaabbbbbbbaaaabbbbbbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaabbbbbaaaaabbbbaaaaaaaaaabbbbaaaabbbbbbbaaaaaabbbbaaabbabbbaaaababbbbba + abaaabbaabbbbaaaaaaabbbbbaaaaaabbbbaaaaabbbbaaaaaaaabbbbbbbaaaaaabbbbbbaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaaabbbbbaaaaaabbbbaaaaaaabbbbbbbaaabbbbbbbaaaaaaabbbbbaaaabbabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbbaaaaaabbbbbaaaabbbbaaaaaaaabbbbbbbaaaaaaaabbbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbaaaaaaabbbbaaaaabbbbbbbbaaabbbbbbbaaaaaaaabbbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbaaaaaaaabbaaaaaabaaaaaabaaabbbbbbbaaaaaaaaabbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaabbbaaaaaaaabbaaaaaabbbbbbbbaaabbbbbbbaaabaaaaabbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbbaaaaaaaabbbaaaaaabbaaaabaaabbbbbbbaaaaaaaaabbbbaaaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbaaaabaaabbbaaaaaabbbbaaaaaabbbbbbbbaaaaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaaabbaaabbbbaaaabbabbbbbaabbbbbbbaaaaaaaaabbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbbaaaabbababbbbaaaabbaaaaaaaaabbbbbbbbbaaaaaabbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbaaaabbaaaabbbaaaaabbbbbbbaaaabbbbbbbbaaaaaabbbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbaaaabbabaabbbbaaaabaaaaaaaaabbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbbbbaaaabbaaaaaabbaaaabbbbbbaaabbbbbbbaaaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaabbaaaabbbaaaabbaaaaaabbaaaabaaabbbaabbbbbbbabaaaaaaabbbbaabaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaaabbbaaaaabaaaaaabbbaaabbbbaaaaaabbbbbbaaaaaaaaabbbbabbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbaaaaaaaaaaaabbbaaabaaabbbaaabbbbbaaaaaaaaaabbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbaabbbaaaaaaaabaaabbaaaabbbaaabbaabbbbbaaabbaaaaabbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaabbbbabbbaaaaaaaabaaaabbaaabbbbbbbaaabbbbaaabbbbaaaabbbabbbaabbbbbbbaaabbb + abbaaaaaaaaabbaaabbbabbbaaaaaaaaabaaaaabaaabaaaaabbaaabbaaabbbbbbaaabbbbbbbaabbbbbbbbaabbb + abbbaabbbaaaaaaabbbaabbbaaaaaaaaabaaaaaaaaabbbbbbaabaabbaaabbabbbaabbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaabbbaaaaaaaaabaaaaaaaaabaaaabbbaaabbaaababbbbaabbbbbbbbaabbaaaaabaabba + abbbaabbbbbbbbaabbaabbbbbaaaaaaaabaaaaaaaaabbbbbaaabaabbaaabbbbbbaabbbbbabbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbbbaaaaabaaaaaabbbbaababbbbbbababbaaabbbbbbaaabbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbbbaaaabaaaaabbbbbaabaaabbbaabaabaaabbbbbbaaabbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbbbaaaabbaaabbbbbbaababbbaaaabaabaaabbbbbbaabbbbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbbbbaaaaaaaabbbbbbaababbabaaaaaabaaaaabbbbbbbbbbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbbbbaaaaaaaabbbbbbaabaaaaaaaabbaaaaaaaabaabbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbbaaaaaaaabbbbbbaabaaaabbbbbbaaaaaaaaaaaabbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbbbaaaaaaabbbbbbaababbbbbbbbbaaabaaaaaaaabbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbbbaababbbbbbbbbaaabbbaaaaaabbbbbbbbbbabbbbbbbbbabba + bbaaabaaaaaaaaaaabaaaaaaabbbbbbbbaabbbbbaaababbbbbbbbbbaaabbabbaaabbbbbbbbbbabbbbbbbbbabba`, + map `abbbbbbbbbbbbbbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbabbbbbbbbbbaaabaaabbbbbbbabbbaaabbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbbbbbaaaaaabbbabbbbbaaabaaabbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbbabbbbbbbbaaabbbba + abbbbbbbbbbaaaaaaaaaaaabbbbaaaaaabbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbbaabbbba + abbbbbbbabaaaabbabbaaaaaaaaabbbabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbaabbbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaaabbbbbbaabbbba + abbbbbaaaaaabbbbabbbbabaaaaabbbbaaaaaabbaaabbbbbbaaabbaaabbbaaaaaaaaaaaaaaaaabbbbbaaabbbba + abbbbaaaaaabbbbaabbbbbbbbaaababbbaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaaaaabbbbbbaabbbbba + abbbbaaaaaabbbaaabbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbbabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbbbbbbbbbaaababbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbbabbbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaabbbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaabbbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaabbbbbbbaabbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaaabaabbaaaabaaabbbbbbbbbbbaabbbaaaaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaabbaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaaabbbaaabbbbbbaaaaaaaaaabbaaabaaabbbbbbbbbaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbaaaabaabbbbbabbbbbbbbbaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbbaaaaabbbbbbbbbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaaabbbbaaabbaaabbbbaabbbbbbbbaabbbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaabbbbbbaaaaaababbbbaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaabbbbabaaaaaaaabbabbbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbaabbaabbbaaaaaaaaaaaabbbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbabbbbbaaaaaaaaaaabbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaabbbbaaaaaaabaaaabbbbbbbbabbbbaaaaabbaabbbbbaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaabbbbaaaaabbbbaaabbbbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaabbbaaabbbbaabbbbbbbbaabbbbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaabbbbaabbbbbbbbaabbbbbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaabbbaaaabbbbbbbaabbaaaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaabbaaaabbbbbbbaabbbaaabbbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaabbbbaaaabaaaabbabbbaaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbaaaaabaaabbabbbaaaabbbbbabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaabbbbbaaaabbabbaaabbbaaabbbaaabbaaabbbbabbbbaaaabbbabbbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbbaaaabbbbbbaabbbbaaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabbbbbaaabbbbbaaabbbbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbaaaabaaabbaaaaaaabbbabbbbaaabbbbaaaabbbbbaabbbbbbbabbbaaabaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbabbbbbabbaabbbabbbaaaaaabbbaaabbbaaabbbbbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbaaaaabbbbaaabbbaaabbbbbbbaabbbbbaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaaabbaabbbaaabbbbbaaaabbaaabbbbbaaaabbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbbaaaabbaaabbbbbaaaaabbbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbbaabbbbaababbaaaaaabbbbbbaaabbaaabbbbbaabbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaaabbbbbbaaabbaaabbbbbabbbaaabbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbabbaaabaaabbbbbbbbbbbabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaabaabbabbaaabaaaabaabbbbbbbbbbbbbaaaabbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbaabbabbaaabbaabbaaaaabbbbbbbbbbaaabbbbaaaaabbaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbbabbbbbaaabbbbbbbaaaaaaaaabbbbbbaabbbbaaaaaaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbaaaabbbbaaaabbbbbbbaaabbbaabbaaaaaaaaaaaabbbaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaabbbbbabaaaaabbabbaaaaaaaaaaaaabbaabbbbaaaabbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaabbbbbaabaaaaabbabbaaaaaaaaaaaaabbbabbbaaaaabbbaaaaabbabbbbba + aaaaaabbbaaabbbbbbaabaaabbbaabbbbbaaabbaababbbbbaaaaaaabaaaaaabbabbbaaababbbbaaaaaaabbbbba + aaaaabbbbbaabbbbbaabbaaabbbabbbbbaaaabbbaaabbbbbaaaaabbbbaaaaabbbbbbaabbaabbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbbbbbbaaaaabbbbaababbbaaaabbbbbbaaaabbbbbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaabbbbbbbaaaaaabbbbaaabbbaaaaaabbbbbaaaabbbbbaaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbaabbbaabbbbbbaaaaaaabbbbbbabbbbaaaaabbbbbaaaabbbbbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbaabbbbbbaaaaaaaaabbaaaaabbaaaaabbbbbbaaaaabbbbaaabbbaabbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaabbbbaaaaaaaaaaaaabbbbbbbbaaaabbbbbbaaaaabbbbaaabbbaabbbbaaabbabbbaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaaaabaaaaaaaaaaabbaaaabbbbbbaaaaabbbbabaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaaabbbbaaaabbabaaaabbbbbabbaaaaabbbbbbbaaaaabbbabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaabbbbaaaabbbbaaaaaaababbbbaaaabbbbbbbaaaaabbbbbaaabbabbbaaabbabbbbba + abaabbbaaabbbaabaaaabbbabbbaaaabbbbaaaaabbaaaaaaaaaabbbbbbbbaaaabbbbbaaabbabbbaaaababbbbba + abaaabbaabbbbaaaaaaabbbbbbbaaaabbbbabaaabbbbbbbbbaaabbbbbbbbaaaabbbbaabaababbaaaaaaabbbaaa + abbaaaaaabbbbbaaaaaabbbbbbaaaaabbbbbbaaaababaaaaaaaabbbbbbbbaaaabbbbbbbaaaabbabbbaaabbbaaa + abbbaaaabbbbbbaaaaabbbbbbbaaaaaabbbbbaaaabbbbbbbbaaabbbbbbbaaaaaabbbbbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbbaaaaaabbbbbaaaaaaaaaaaaaaabbbbbbbbaaaaaabbbbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbaaaaaaabbbaaaaabbbbbbbbaaabbbbbbbbaaaaaabbbbbbaaaaaabbbbbaaaabbb + abbbaaaaaaaaaaaaabaaaabbbbaaaaaaabbbabaaaaaabaaabaaabbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbaaabbbbbbbbbaaaaaaabbbaaaaaabbbbbbbaaabbbbbbbbaaaaaaabbbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaabbbbbbbbaaaabaaabbaaaaaaabbaaabaaabbbbbbbbaaaaaaaabbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbbaaaabaaabbbbaaaabbbbaaaaaabbbbbbbbaaaaaaaabbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaabbbbbbaaaabbaabbbbaaaaabbbbbbbaabbbbbbbbaaaaaaaabbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbbaaaabaaaabbbbaaaabaaaaaaaaabbbbbbbaaaaaaaabbbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaabaabbbbbbaaaabbaaabbbbaaaabbbbbbbaaabbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaaabbbbbaaaabaabaabbbbaaabaaaaaaaabbbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbbaabaaaaabbbaaaaaabbaabbbaaaabbbbbbbaabbbbbbbbbaaaaaaabbbbaabaabbbbbbbaaabba + abbbaabbbbbbbbbaabbaaabbbbaaaaaabbbaabbaaaabaaaabbaabbbbbbbbaaaaaaaabbbbabbaabbbbbbbaaabba + bbbaaabbbbbbbbbaabbbaabbbbaaaaaabbbaabbaaaabbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbaabbbbaaaaaaaaaaaaaaaaabaaabbbbaabbbbbbbaaaaaaaabbbbbbbaabbbbbbbaaabbb + abbaaabbbbbbbbaaabbbaabbbbaaaaaaaaaaaaabaaabbbaaaaaaabbbbbaaaaaaaaaabbbabbbaabbbbbbbaaabbb + abbaaaaaaaaabbaaabbbaabbbaaaaaaaaaaaaabbbaabbbbbbbaaabbbbaaaaaaaaaaabbbbbbbaabbbbbbbbaabbb + abbbaabbbaaaabaaabbaaaabbbaaaaaaaaaabbbbbaababaaaabaabbbaaabbbbaaaaabbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaaaabbbaaaaabbaaabbbbbaabbbbbbbaaaabbaaabbbbbaaaabbbbbbbaabbaaaaabaabba + abbbaabbbbbbbbaabbaaabbbbbaaaaabaaabbbbbbaabaaaaabbaaabbaaababbbaaaabbbbabbaabbbbbbbbaabbb + abbbaabbbbbbbbbaaaabbbbbbbaaaaaaaaabbbbbbaabbbbbbaabaabaaabbabbbbaaabbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbbaaabbbbbbbbbaaaaaaaabbbbbbaabaabbbbbbaabaaaabbbbbbaabbbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbbbbbaaaaaaaabbbbbbaabaaaabaaaabbaaabbbbbbbaabbbbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbbbbbaaaaaaaabbbbbaababbbbaaaaabbaabbbbbbbaabbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbbbbbaaaaaaaabbbbbaababbbaaabaaabaaabbbbbbaabbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbbbbaaaaaaabbbbaaabaaaaaaabaaaaaaaaabbbaaabbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbabbbbbbbbaaaaaaaaaaabaaaaaaabbbaaaaaaaabaaabbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaaabaaabbbbbbbaabaaaaaaaaabbbbbbbbbbabbbbbbbbbabba + bbaaabaaaaaaaaaaabaaabaaabbbbbbbbbbbaaaaaaababbbbbbbbbaabbaaaaaaaabbbbbbbbbbabbbbbbbbbabba`, + map `abbbbbbbbbbbbbbbbaabbbbbbbbaaabaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbabbbbbbbbbbaaabaaabbbbbbbabbbaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbbbbaabbbbba + abbbbbbbbbbbaaaaaabbbabbbbbaaabaabbbbbbbbabbbaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbaaabbbba + abbbbbbbbbbaaaaaaaaaaaabbbaaaaaaabbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbbaabbbba + abbbbbbbabaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaaabbbbbbaabbbba + abbbbbbbaaaaabbbabbaaaaaaaaabbbaabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaaabbbbbbaabbbbba + abbbbbaaaaaabbbaabbbbabaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbbaaaaaaaaaaaaaaaaabbbbbaaabbbba + abbbbaaaaaabbbbaabbbbbbbbbaaaabbaaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaaaaabbbbbbaabbbbba + abbbbaaaaaabbbaaabbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbaabbaaaaaaaabaaaaaaaabbbbabbbbbaaabbbbba + abbbbaaabbbbbaaaabbbabbbbbbbaaaaabbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaabbbbba + abbbbabbbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaabbbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaabbbbba + abaaaaaaabbbaaabbbbabbbbbaaaaaaabbbbbbbaabbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabbaabbaaaabaaabbbbbbbbbbbaabbbaaaaaaaabbbbbbbbbaaaaabbbaaabbbba + aaabbbbaaabaaaabbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaaabbbaaabbbbbbaaaaaaaaabbbaaaaaaabbbbbbbbbaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbabbbbbbbbaaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaababbbbbbbbbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaaabbbbaaabbaaabbbaabbbbbbbbbaabbbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaabbbaabbbbbbaaaaaababbbaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaabbbbabaaaaaaaabbabbbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaabbbaaaaaaaaaaaabbbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbabbbbbaaaaaaaaaaabbbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaabbbbaaaaaaabaaaabbbbabbbbbbbbaaaaabbabbbbbbaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaabbbbaaaaabbbbaaabbbbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaaabbaaabbbbaabbbbbbbbaabbbbbbbbbbbbbbaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaabbbbabbbbbbbbbaabbbbbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaabbbaaaabbbbbbbaabbaaaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaabbbaaaabbbbbbbaabbbaaabbbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaabbbbaaaabaaaabbabbbaaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbaaaaabaaabbabbbaaaabbbbbabbaaabbbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbaaaabbabbaaabbbaaabbbaaabbaaabbbbabbbbaaaabbbabbbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaabbbbbaaaabbbbbbaabbbbaaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabbbbbaaabbbbbaaabbbbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbaaaabaaabbbaaaaaabbbabbbbaaaabbbaaaabbbbbaabbbbbbbabbbaaabaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbbbbbbbabbaabbbabbbaaaaaabbbaaabbbaaabbbbbbbbabbbbaaaaaaabbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbaaaaabbbbaaabbbaaabbbbbbbaabbbbbaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbaaaabbaaabbbbbaaaabbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbbaaaabbaaabbbbbaaaaabbbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbaaabbbbaababbaaaaaabbbbbbaaabbaaabbbbbaabbaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaaabbbbbbaaabbaaabbbbbabbbaaabbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbaaaaaaaaaaabbbbaaaaabbbaabaaabaaabbbbbbbbbbbabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaabaabbbbbaaabaaaabaabbbbbbbbbbbbbaaaabbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbaabbabbaaabbaabbaaaaabbbbbbbbbbaaabbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbbbabbbbaaabbbbabbaaaaaaaaabbbbbbaabbbbaaaabaaaabbbbabbbbaba + babbbbbaaaaaaaabbbbaaaabbbbaaaabbbbbbbaaabbbaabbaaaaaaaaaaaabbbaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaabbbbbabaaaaabbabbaaaaaaaaaaaaabbaabbbbaaaabbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaabbbbbaabaaaaabbabbaaaaaaaaaaaaabbbabbbaaaaabbbaaaaabbabbbbba + aaaaaabbaaaabbbbbbaabaaabbbaabbbbbaaabbaababbbbbaaaaaaabaaaaaabbabbbaaababbbbaaaaaaabbbbba + aaaaabbbbaabbbbbbaabbaaabbbabbbbbbaaabbbaaabbbbbaaaaabbbbaaaaabbbbbbaabbaabbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbabbbbaaaaabbbbaababbbaaaabbbbbbaaaabbbbbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaabbbbbbbaaaaaabbbbaaabbbaaaaaabbbbbaaaabbbbbaaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbaabbbaabbbbbbaaaaaaabbbbbbabbbbaaaabbbbbbaaaabbbbbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbaabbbbbbaaaaaaaaabbaaaaabbaaaaabbbbbbaaaaabbbbaaabbbaabbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaabbbbaaaaaaaaaaaaabbbbbbbbaaaabbaabbaaaaabbbbaaabbbaabbbbaaabbabbbaa + aabbbbbbbbaaabbbaabbaaabbbbaaaaaaabaaaaaaaaaaabbaaaabbaababaaaabbbbabaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaaabbbbaaaabbabaaaabbbbbabbaaaaabbaabbaaaaaabbbabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaabbbbaaaabbbbaaaaaaababbbbaaaabbbbbbbaaaaabbbbbaaabbabbbaaabbabbbbba + abaabbbaaabbbaabaaaaabbbbbbaaaabbbbaaaaabbaaaaaaaaaabbbbbbbbaaaabbbbbaaabbabbbaaaababbbbba + abaaabbaabbbbaaaaaaabbbbbbbaaaabbbbabaaabbbbbbbbbaaabbbbbbbbaaaabbbbaabaababbaaaaaaabbbaaa + abbaaaaaabbbbaaaaaaabbbbbbaaaaaabbbbaaaaababaaaaaaaabbbbbbbaaaaaabbbbbbaaaabbabbbaaabbbaaa + abbbaaaabbbbbaaaaaabbbbbbbaaaaaabbbbbaaaabbbbbbbbaaabbbbbbbaaaaaabbbbbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbbaaaaaaabbbbaaaaaaaaaaaaaaabbbbbbbaaaaaaabbbbbbaaaaaabbbbaaaaaabb + aaaaaaabababbbbaaabbbbbbbbaaaaaaabbbaaaaabbbbbbbbaaabbbbbbbaaaaaaabbbbbbbaaaaabbbbaaaaabbb + abbbaaabaaaaaaaaabaaaabbbbaaaaaaabbbabaaaaaaaaaabaaabbbbbbbaaaaaaaabbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbbbaaaaaaaabbaaaaaabbbbbbbaaabbbbbbbbaaaaaaabbbbbbaaabbbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaaaabaaabbabaaaaabbaaabaaabbbbbbbbaaaaaaaabbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbbaaaabaaabbbbaaaabbbbaaaaaabbbbbbbbaabaaaaabbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaabbbbbbaaaabaaabbbbaaaaabbbbbbbaabbbbbbbbaabaaaaabbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbbbaaaabaaaabbbaaaaabaaaaaaaaabbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaaaaabbbbbbaaaabbaaabbbbaaaabbbbbbbaaabbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbbbbbaaaabaabaabbbbaaabaaaaaaaabbbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaaaabbbaaaaaabbaabbbaaaabbbbbbbaabbbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaaabbaaabbbbaaaaaabbbaabbaaaabaaaabbaabbbbbbbbaaaaaaaabbbbabaaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbaaaaaabbbaabbaaaabbbbbbaaabbbbbbbbaaaaaaaabbbbbbaaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbaabbbbaaaaaaaaaaaaaaaaabaaabbbbaabbbbbbbaaaaaaaabbbbbbaaabbbbbbbaaabbb + abbaaabbbbabbbaaabbbaabbbbaaaaaaaaaaaaabaaabbbaaaaaaabbbbbaaaaaaaaaabbbbbbbaabbbbbbbaaabbb + abbaaaaaaaabbbaabbbaaabbbaaaaaaaaaaaaabbbaabbbbbbbaaabbbbaaaaaaaaaaabbbbbbaaabbbbbbbbaabbb + abbbaabbbbabbbaabbaaaaabbbaaaaaabaaabbbbbaababaaaabaabbbaaabbbbaaaaabbbbbbaaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaababbbaaaaabbaaabbbbbaabbbbbbbaaaabbaaabbbbbaaaabbbbbbbaabaaaaaabaabba + abbbaabbbbbbbbaabbaabbabbbaaaaabbaabbbbbbaabaaaaabbaaabbaaababbbaaaabbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbabbaaaaaaaaabbbbbbaabbbbbbaabaabaaabbabbbbaaabbbbbabaabbbbbbbbaabba + abbbaabbbbbbbbaaaaabbbbbbbbaaaaaaaabbbbbbaabaabbbbbbaabaaaabbbbbbaabbbbbbaaabbbbbbbbbaabba + abbbaabbbbbbbbaaaaabbbbbbbbaaaaaaaabbbbbbaabaaaabaaaabbaaabbbbbbbaabbbbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbbbbbaaaaaaaabbbbbaababbbbaaaaabbaabbbbbbbaabbbbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbbbbbaaaaaaaabbbbbaababbbaaabaaabaaabbbbbbaabbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbbbbaaaaaaabbbbaaabaaaaaaabaaaaaaaaabbbaaabbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaaaaaabaaaaaaabbbaaaaaaaabaaabbbbbbbbbbbbbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaaabaaabbbbbbbaabaaaaaaaaabbbbbbbbbbabbbbbbbbbabba + bbaaabaaaaaaaaaaabaaabaaabbbbbbbbbbbaaaaaaababbbbbbbbbaabbaaaaaaaabbbbbbabbaabbbbbbbbbabba`, + map `abbbbbbbbbbbbbbbbaabbbbbbbbaaabaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbaaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbbabbbaabbbbbbaaabbaaaaaabbbaaabbbbbbbbbbbbaaabbbba + abbbbbbbbbbaaaaaaabbbbbbbbbaaabaaabbbbbbbabbbaabbbbbbbbbbbaaaaaaabbbbbbbabbbbbbbbbaaabbbba + abbbbbbbbbbaaaaaaaaaaaabbbbaaaaaabbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbbaabbbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbaabbbba + abbbbbbbaaaaabbbabbbaaaaaaaabbbabbaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbbbbaaabbbbbbbaabbbba + abbbbaaaaaaabbbaabbbbabaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbbaaaaaaabaaaaaaaaabbbbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbbaaaabbaaaaaabbaaabbbbbbbaabbaaaaaaabbbaaaaaaaaaaaabbbbbbaaabbbba + abbbaaaaaaabbbaaabbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbaabbaaaaaaaabaaaaaaaabbbbabbbbbbaaabbbba + abbbabaabbbbbaaaabbbabbbbbbbaaaaabbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaabbbbbbbaabbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbabbbbaaabbaaabaaaabaaabbbbbbbbbbbaabbbaaaaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabaaabbbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaaaabbaaabbbbbbaaaaaaaaabbbaaaaaaabbbbbbbbbaabbbbaaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbabbbbbbbbbaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbaaaaaaabbbbbbbbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaaabbbbaaabbaaabbbbaaaaabbbbbbbbbbbbbbaaabbbbbbaaaaaabbbaaaaaabbbbaaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaabbbbbbbbaaaaabbbbbaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaaabbbbbbaaaaaaaabbbbbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbaabbaaabbbaaaaaaaaaaaabbbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaabbbbaaaaaaaaaaabbbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaaaaaabbbbaaaaaaaabbbbaaaaaaaaaaaabbbbbbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaabbbbaaaaabbbbaaabbbbbbbaabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaaabbaaaabbbbaaaabbbbbbaabbbbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaabbbbaabbbbbbbbaabbbbbbbbbbbbbaaaaabbaabbbaabbaabaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaabbbbaabbbbbbbbaabbbaabbbbbbbbaaaaabbaabbaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaabbbaaaabbbbbbbaabbaaabbbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbbbaaabbbaaabaabbbaaabbbbbaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbbabaaabaaabbabbbaaabbbbbabbaaabbbbaabbaaaaabbbaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaaabbaabbaabbaaabbbaaabbaaabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaaabbbbbaaaabbbbbbaabbbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabbbbbbaaabbbbbaaabbbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbaaaabaaabbaaaaaaabbbabbbbaaaaabbbbaaabbbbbaabbbbbbabbbaaabaaabbbbabbbbaaabbbbbaaaabbbba + babaabbbbbabbbbabbaabbbabbbaaaaaabbabaaaabbbbbabbbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbbbaaabbbaaabbbbbbaabbbbaaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbbaaaabbaaabbbbaaaabbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbbbaaaabbaabbbbbaaaaabbbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbaaabbbbaababbaaaaaabbbbbbaaaabbaabbbbbaabaaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbaaabbbaaaaabbbaaaaabbbbbbbaaabbaabbbbbabbbaaabbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbaaaaaaaaaaabbbbaaaaabbbaabbaabbaabbbbbbbbbbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaaaaabbabbbaaabaaaababbbbbbbabbbbaaaaabbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbabbabbbaaabaabbbaabbbbbbbbbbbaaaabbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaaabaaaaabbbaaabbbbbbaaaaaabbbbbbbbaaabbbbaaaaaaaaabbbbbbbbbaba + babbbbbaaaaaaaabbbbaaaabbbbaaaaaaaabbbbaaabbbbabbaaaaaaaaabbbbbaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaabbbbbbbbaaaabbaabbaaaaaaaaaaaabbbabbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaaabbbbbbabaaaabbabbbaaaaaaaaaaaabbbabbbaaaaabbbaaaaabbaabbbba + aaaaaabbaaaabbbbbbaabaaabbbaaaabbbbbaabaaaabbabbbaaaaaaaaaaaaabbbbbbaaababbbbaaaaaaabbbbba + aaaaabbbbaaabbbbbaabbaaabbbaabbbbbbaaabbaaababbbaaaaaaaaaaaaaabbbbbbaaabaabbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbabbbbbbaaaabbbaababbbaaaaaabbbbaaaaabbbbbaaabaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbabbbbbaaaaabbbbaabbbbaaaaabbbbbaaaaabbbbbaaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbaabbbaaabbbbbbaaaaaaabbbbbabbbbaaaaabbbbbbaaaabbbbaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbbaaaabbbbbaaaaaaaabbbbbaabbbaaaaabbbbbbaaaabbbbaaabbbaabbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaababbbbaaaaaaaaaaaaaaaabbbaaaabbbbbbbaaaabbbbaaabbbaabbbbaaabaabbbaa + aabbbbbbbbaaabbbaabbaaabbbbbaaaaaaaaaaaaabaaaaaaaaaabbaabbbaaaabbbbabaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaaabbbbbaaaaaaaaaaaabbbbbbbbaaaabbaaabbaaaaabbbabaaabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaaabbbbaaaabbbaaaaaaaaaaaaaaaaabbbbbbbaaaaabbbbbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbabbbbaaaabbbabaaabbbbbbbbbaaabbbbbbbbaaaabbbbbaaabbabbbaaaababbbbba + abaaabbaabbbbaaaaaaabbbbabbbaaaabbbabaaaaaaaaaaaaaaabbbbabbbaaaabbbbaabaababbaaaaaaabbbaaa + abbaaaaaabbbbaaaaaaabbbbbbbbaaaaabbbbaaaabbbbbbbaaaabbbbabbbaaaaabbbbbbaaaabbabbbaaaabbaaa + abbbaaaabbbbbaaaaaabbbbbbbbbaaaaabbbbaaaaabbbabbbaaabbbbabbaaaaaabbbbbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbbbbaaaaabbbbaaaabbbabbaaaaabbbbabbaaaaaabbbbbbbaaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbbbaaaaaabbbaaaaabbbbbbbaaabbbbabbbaaaaaabbbbbbbaaaaabbbbaaaaaabb + abbbaaaaaaaaaaaaabaaaaaabbbbaaaaaabbaaaaaabbaaaaaaaabbbbabbbaaaaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbaaabbbbbbbbbbbaaaaaabbbaaaaabbbbbbbaaabbbbbbbbaaaaaabbbbbabaaabbbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbbaaaaaaabbbaaaaaabaaaaaaaabbbbabbbaaaaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbbbbaaaaaabbbbaaaabbbbbbbaaabbbbabbbaaaaaaabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaabbbbbbbbaaaaaaabbbaaaaabaaaaaaaabbbbabbbaabaaaabbbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbabbbaaaaaaabbbaaaaabbbbbbbaaabbbabbbaaaaaaaabbbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbaabbbaaabaaaabbaaaaabbaaabaaaabbbabbbaaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbaabbbbaaaaaaaaaaaaaaabbbbbbaaabbbbbbbbbaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaabbbbbbbbaaabaaaaabbbbbaaaaaaaaaaaaaaabbbbbbbaabbbbbbbbbaaaaaaabbbbaaaaabbbbbbbaabbba + abbbaabbbbbbbbaaabbaaabbbbbbaaaaaaaaaabbaaabbbaaaaaabbbbbbbbbaaaaaaabbbbabbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbbbaaaaaaabbbbbaaabbbbbbbaabbbbbbbbbaaaaaaabbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbaabbbbbbaaaaaabbbbbbaaabbaaaaaaabbbabbbbaaaaaaaabbbbbbbaabbbbbbbaaabbb + abbaaabbbbabbbaaabbbaabbbbbbaaaaaabbbbbbaaabbbbbbbaabbbababbaaaaaaaabbbabbbaabbbbbbbaaabbb + abbaaaaaaaabbbaabbbaaabbbbbaaaaaaabbbbbbbaabaaaabbbabbbaaaaaaaaaaaabbbbabbbaabbbbbbbaaabbb + abbbaabbbbabbbaabbaaaaabbbbbaaaababbbbbbbaababbbbaaabbbbaaaaaaaaaaabbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaaaaabbbbaaaababbbbbbbaabbababbbaabbaaaabbbaaaaabbbbbbbbaabaaaaaabaabba + abbbaabbbbbbbbaabbaabbaabbbbaaaaaaabbbbbbaababbbaaaaabbaaabbbbbaaaabbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbabbbbaaaaaaabbbbbaaabbbbbbbbaabbaabbabbbaaaabbbbbabbaabbbbbbbbaabba + abbbaabbbbbbbbaaaaabbbbaabbbaaaaaaabbbbbaaabaaaaaabaabaaabbbbbbbaaabbbbbbaaabbbbbbbbbaabba + abbbaabbbbbbbbaaaaabbbbaabbbbaaaaaabbbbaaaababbbbbbaaaaaabbbbbbbaaabbbbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbaaabbbaaaaaaaaaaaaaababbbbbaaaaaaabbbbbbbaaabbbbbbbaaabbbbbbbbaabba + abbaaabbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaaaaababbbaaabaaaaaabbbbbbaabbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbbbbbbaaaaaaaaaaaaababaaababaaaaaaabbbbbaabbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbabbbbbbbbbbbbbaaaaaaababaaaaaaaaaaaaaabbbaaabbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaaaaaaabaaaabbbbbaaaaaaabbaaabbbbbbbbbbbabbbbbbbbbabba + bbaaabaaaaaaaaaaabaaabaabbbbbbbbbbbbaaaaaaababbbbbbbbbaabaaaaaaaabbbbbbbbbbbabbbbbbbbbabba`, + map `abbbbbbbbbbbbbbbbbabbbbbbbbaaabaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbbabbbaabbbbbbaaabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaaaaaaabbabbbbbaaabaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbaabbbbbbbbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaabbbbaaaaaabbbbbaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbbaabbbba + abbbbbbbaaaaaabbabbaaaaaaaaabbbabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbaabbbba + abbbbbbbaaaaabbbabbaaaaaaaaabbbaabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbbbbaaababbbbbaabbbba + abbbbaaaaaaabbbaabbbbabaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbbaaaaaaabaaaaaaaaabbbbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbbbaaabbbaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaaababbbbbbaaabbbba + abbbaaaaaaabbbaaabbbbbbbbbbbbaabbbbbaaaaaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbabaabbbbbaaaabbbabbbbbbbaaababbbbbaaaabbbbbbbbaaaaaabbbaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaabbbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaaabbbbbbbabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaaabaaaaaaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabaaabbbbbabbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaaabbaaaabaaaabbbbbbaaaaaaaaabbbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbbbbbbbbbbaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaaabbaaaaaaabbbbbbbbbbbbbbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaaabbbbaaabbaaabbbaaaaabbbbbbbbaaabbbbaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbaaaaaaaabbbbabbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaaabbbbbbbaaaaaaaabbbbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaabbbbaaaaaaaaaaaabbbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbaaaaaaaaaaabbbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaabbbbaaaaaaabbaaabbbbbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbaaaaabbbbbaabbbbbbaabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaaabbaaaaabbbbbabbbbbbbbaabbbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbaabbbbbbbbaabbbbbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbaaabbaaaaabaaabbbbbaaaabbbbaaabbbbbbbaabbaabbbbbbbbaaaaabbaaabaaabbbabaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaabbbbbaaabbbbbbbaabbaabbbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbbbbabaabbaaabbabbaaabbbbbaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbbbbabaaabbabbbabbaaabbbbaabbaaabbbbaabbaaaaabbbaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbbbbbaaaabbaabbaabaaabbbaaabbaaabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaabbbbbbbaaaabbbbbbaabbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaabbbbaaabbbbbaaabbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbaaaabaaabbbaaaaaabbbabbbbaaaaaabbabaaaabbbbaabbbbbabbbaaabaaabbbbabbbbaaabbbabaaaabbbba + babaabbbbbbbbbbabbaabbbabbbaaaaaabbbbbaaaabbbbbabbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbbbbaaabbaaaabbbbbaabbbbbaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbbbaaaabaaaabbbaaaabbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbbbabaaabaabbbbbaaaaaabbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbbaabbbbaababbaaaaaabbbbbaabaaabaabbbbbaabaaaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaaabbbbaabbbaabaabbbbbbbbbbaabbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbaabbbaabaabbabbbbbbbaabbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaaaabbbaabbbaaaaabbabaabbbbbabbbbaaaaabbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbaabbaabbbaaaaabbbbaaabbbbbbbbbbaaabbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbaaaaaabbbaabbaababaaaaaabbbbbbbbaabbbbaaaaaaaaabbbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaaaaaaabbbbbaaabbbbabbaaaaaaaaabbbbbabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaaabbabbbbbaaabbbabbbaaaaaaaaaaaabbbbbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaaabbbbbbaabaaabbaabbbaaaaaaaaaaaaabbbbbaaaaabbbaaaaabbaabbbba + aaaaaabbbaaabbbbbbabbaaabbbaaaabbbbbbaabbaabbabbbaaaaaaaaaaaaaabbbbbaaababbbbaaaaaaaabbbba + aaaaabbbbaabbbbbbaabbaaabbbaabbbbbbbaaabbaabbabbbaaaaabaaaaaaaabbbbbaaababbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbaabbbbbbaaaabbbababbbbaaaabbbbabaaaaabbbbaaabaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaabbbbbaaaaabbbbaabbbbaaaaaabbbbaaaaabbbbaaabaabbbbbbaaaaaaabba + aabbbbbbbbaaabbbbaabbbaaabbabbbbbaaaaaabbbbabbbbbaaaabbbbbbbaaaabbbaaabbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbbaaaabbabbbaaaaaaaabbaaaaabbaaaaabbbbbbbaaaabbbaaabbbaabbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaababbbbbaaaaaaaaaaabbbbbbbaaaabbaabbbaaaaabbbaaabbbaabbbbaaabaabbbaa + aabbbbbbbbaaabbbaabbaaabbabbbbaaaaaaaaaaaaaaaaabaaaabbaabbbaaaaabbbabaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaaabbabbbbaaaaabaaaaabbbbabbaaaabbaabbbaaaaabbbbbaaabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaabbbbbbaaaaabbbaaaabbbbbbbbaaabbaabbbbaaaaabbbbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaabbbaaabbbbaaaababaaaaaaaabbaabbbbaaaaabbbbaaabbabbbaaaabbbbbbba + abaaabbaabbbbaaaaaaabbbbaabbbbaaabbbbaaaabbbbbbbbaaabbaabbbbaaaaabbbaabaababbaaaaaaaabbaaa + abbaaaaaabbbbaaaaaaabbbbaabbbbaaaabbbaaaaaaabaaaaaaabbbaabbaaaaaabbbbbbaaaabbabbbaaaabbaaa + abbbaaaabbbbbbaaaaabbbbbaabbbbaaabbbbaaaaabbbbbbbaaabbbbbbbaabaaaabbbbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbbbbbaaaabbbbaaaaaaabaaaaaaabbbbabbbaaaaaabbbbbbaaaaaabbbbaaaaaabb + aaaaaaaaababbbbaaabbbbbbbbbbbaaaaabbbaaaaabbbbbbbaaabbbaabbabaaaaabbbbbbaaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaaabaaaaabbbbbaaaaaabbbaaaaabbababaaabbbbabbaabaaaabbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbbbaaaaaabbbaaaaabbbabbaaabbbbabbaabaaaaabbbbaaaaabbbbbbbbaabbba + abbbaaabbbbbbbbaaabbbbbbbbbbbaaaaaabbbbaaaabbbbbbaabbbbaabbaabaaaaabbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbbbbbaaaaaaabbaaaaabbaaaaaabbbbaabbaabbaaaabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaabbbbabbbbaaaaaaaaaaaaaabbbbbbaaabbbaabbaabbaaaabbbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbbabbbbaaaaaaaaaaaaaabaaaaaaaabbbaabbaaabaaaaabbbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbbaaaaabbbaabbbbaaaaaaaaaaaaaabbbbbbaaabbbaabbaaabaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbbaabaabbaaabbbbaaaaaaabbaaaaabaaaaaaaabbbaabbaaaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaaabbbbbbaaaaabbbaaaaabbbbbbaabbbbabbbaaabaaaaabbbbaaaaabbbbbbbaabbba + abbbaabbbbbbbbaaabbaaaabbbbbbaaaabbbbbaaaaabbabbaaabbbbbbbbaaabbaaaabbbbabbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbbbbaaaabbbbbbaaaabbbbabaabbbbabbbaaabaaaaabbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbaabbbbbbbaaaabbbbbbaaaabbbbbbbaabbbaabbaaaaaaaaabbbbbbbaabbbbbbbaaabbb + abbaaabbbaabbbaaabbbaabbbbbbbaaabbbbbbbaaaabaaaaaaaabbaaaaaaaabaaaaabbbbbbbaabbbbbbbaaabbb + abbaaaaaaaabbbaaabbaaabbbbbbbaaabbbbbbbaaaabbbbbbbaabaaaaaaaaaaaaaaabbbbbbbaabbbbbbbaaabbb + abbbaabbbaaabbaaabaaaaabbbbbbaaaabbbbbbaaaabaaaaaaaabaaabbbaaaaaaaabbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaaaaabbbbbaaaaabbbbbaaaabbbbbbaaaaaaabbbbbaaaaaabbbbbbbbaabaaaaaabaabba + abbbaabbbbbbbbbabbaabbaabbbbbaaaaabbbbaaaaababbbbbbaaaaabbbbbaaaaaabbbbabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbabbabbbaaaabbbaaaaaababaaaaaaaaaabbbbbbaaaabbbbbbbabaabbbbbbbbaabba + abbbaabbbbbbbbbaaaabbbbaaaabbbaaaaaaaaaaaaababbbbbbaaaabbbbbbbaaaabbbbbbbaaabbbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbaaabbbbaaaaaaaaaaaaabbbbbbbaaaaaabbbbbbaaaabbbbbbbaaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbaaaabbbaaaaaaaaaaaaabaabbaaaaaaaaabbbbbaaaabbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbaabbbbbaaaaaaaaaaaababaaababaaaaabbbbbaaabbbbbbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbbbbbabbbbbbbbbaaaaaaaababaaaaabbaaaaabbbbaaabbbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbabbbbbbbbbbaaaaaaababaabbabbaaaaabbbaaabbbbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbbabbbbbbbbbaaaaaaababbbbbbbbaaaaaabaaabbbbbbbbbbbbbabbbbbbbbbabba + bbaaaaaaaaaaabaaabaaabbabaabbbbbbbbbaaaaaaababbbbbbbbaaaaaaaaaaabbbbbbbbbbbbabbbbbbbbbaaba`, + map `abbbbbbbbbbbbbbbbbabbbbbbbbaaabaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbbabbbaaabbbbbaaabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaababbabbbbbaaabaaabbbbbbbabbbaabbbbbbbbbbbaaaaaaabbbbabaabbbbbbbbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbaaaaaaabbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbaabbbabbbbbaabbbba + abbbbbbbaaaaaabbabbaaaaaaaaabbbabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbaabbbba + abbbbbbbaaaaabbbabbaaaaaaaaabbbaabaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbabbaaababbbbbaabbbba + abbbbaaaaaaabbbaabbbaabaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbbaaaaaaabaaaaaaaaabbbbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbbbaaabbbaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaabaabbbbbbbaabbbba + abbbaaaaaaabbbaaabbbbbbbbbbbbaabbbbbaaaaaaabbbbbbbaabbaaaaaaaabaaaaaaaabbbbabbbbbbbaabbbba + abbbabaabbbbbaaaabbbabbbbbbbaaababbbbbaaaabbbbbbbbaaaaabbbbaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbbbbbbbaaaaaabbbbbbbaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaabaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabaaaabbbbbbbbaaaabbaabbbaaaaaaaaabbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaaaabbabbbbbbbbaaaaaaaaabbbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbbbbbbbbbbaabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaaabbaaaaaaabbbbbbbbaabbbbbaabbbbaaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaaabbbbaaabbaaabbbaabaabbbbbbaaaaaaaabbaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbbbaaaaaaaabbbbbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaaabbbbbaaaaaaaaaaaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaabbbbbbaaaaaaaaaaabbbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbaaaaaaaabaaabbbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaabbbbbaaaaabbbbbaabbbbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbaabbbbbbbbaabbbbbaabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaaabbaaaaabbbbbaabbbbbbbbaabbbbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaabbbbbaaabbbbbbbaaabbbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbaaabbaaaaabaaabbbbbaaaaaabbbaaabbbbbbbaaabbbbbbbbbbaaaaabbaaabaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbaaaabbaaabbabbabbbbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbabbbaaaaabbabbbabaaabbbbbaaaaaabbbbaaabaabbabbaabbbbbbbba + abbbbbaaaabbbbbbaabbbbaabbbbaaabbaaabbaaaabbaabbabaaabbbbaabbaaabbbbaabbaaaaabbbaabbbbbbba + abbbbbaaaaaabbbbaabbbbaabbbbaaabbaabbbaaaaabbbbbabbaabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaabbbaabbabaaaabbbbaabbbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaabbbabaaaabbbbaabbbaaaaaaabbaaaabbbabbbbaabbbbbaaaabbbbba + abbaaaabaaabbbaaaaaabbbabbbbaaaaaabbbabaaaabbbaaabbbbabbbaaabaaabbbbabbbbaaabbbabaaaabbbba + babaabbbbabbbbbabbaabbbabbbbaaaaabbbbbbaaabbbbbbbbbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbbbbbaaabaaaaabbbbaabbbbbaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbbbbbaabaaababbaaaabbbbbaaaaaabbbabbbaaaaabbbaabaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbbaaabaabaabbbbbaabaaabbbbaaaaabbabbbbaabaabbbbabbaaaaba + aaaabbbbabbbbaabbbbaababbaaaaaabbbbbaabbaabaabbbbbbbbbbaabbbbaaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaaabbbbaaabbbabaabbbababbbbaabbbbaaaaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbaaabbbaaaabbbabaabbbbbbbbbaaaaabbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaaaabbbaabbbbaaaabbbabaaaabbbbbbbbbaabbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbabbaabbbbaaaabbbabaaaaaabbbbbbbbbbbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbaaaaaabbbbaabaabaabbaaaaaaaabbbbbbbbbbaaaaaaaaabbbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaaaaaaabbbbbbaabbababbbaaaaaaaaaaabbbbbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaaabbabbbbabaabbaaabbaaaaaaaaaaaaaabbbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaaabbbbbaabaabbbbaaaabbbbbbbaabbabbaabbbaaaaaaaaaaaaaabbbbaaaaabbbaaaaabbaabbbba + aaaaaabbbaaabbbbbbabbaaabbbaaaabbbbbbaaabbbbbabbbbaaaaabaaaaaaaabbbbaaababbbbaaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaabbbaaaabbbbbaaaabbbbbabbbbaaaabbbbbbaaaaabbbaaababbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaabbbaaabbbbbaaaaabbbbabbbbaaaaababbbbaaaaabbbaabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaabbbbbaaaaaabbbaabbbbaaaaabbbbbbaaaaabbbaaabaabbbbbbaaaaaaabba + aabbbbbbbbaaabbbbaabbbaaabbabbbbbaaaaaaabbaaaaabbaaaaabbbbbbbaaaabbbaabbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbbaaaabbbbbbaaaaaaaaaaabbaaaaaaaaabbabbbbaaaaabbbaabbbaabbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaababbbbbbaaaaaaaaaaabbbbbbbaaaabbaabbbaaaaabbbaabbbaabbbbaaabaabbbaa + aabbbbbbbbaaabbbaabbaaabbababbbaaaaaabaaaaabaaaaaaaabbbabbbbbaaaabbbbaabbaabbbaaaababbbbba + aaaabbbbbaaaabbbaabbaaabbabbbbbaaaaabbaaaabbbbbbbaaabbbabbbbaaaaabbbbaaabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaaabbbbbbbaaaabbbbaaaaaaaabaaaabbbabbbaaaaaaabbbaaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaabbbbaaaabbbbaaaabbbbbbaaabbbabbbaabaaaabbbaaabbabbbaaaabbbbbbba + abaaabbaabbbbaaaaaaabbbbaaabbbbaaaabbbbaaaabbbbbbaaabbbabbbaabaaaabbbbbaababbaaaaaaaabbaaa + abbaaaaaabbbbaaaaaaabbbbaabbbbbaaaabbbbaaaabbaaaaaaabbbaabbabbaaaabbbbbaaaabbabbbaaaabbaaa + abbbaaaabbbbbbaaaaabbbbbaaaabbbaaabbbbaaaaabbbbbbaaabbbaabbaabaaaabbbbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbbbbbbbaaaabbbaaaaaabaaaaaaabbbaabbaabaaaaabbbbbaaaaaabbbbaaaaaabb + aaaaaaaaababbbbaaabbbbbbbbbbbbbaaaabbbaaaaabbbbbbaaabbbaabbabbaaaaabbbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabbaaaaabbaabbbaaaabbbaaaaaabaaaaaaabbbaabbabbbaaaabbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbbbbbaaaabbbaaaaabbbbbbaaabbbaabbabbbaaaabbbbbbaaabbbbbbbbaabbba + abbbaaabbbbbbbbaaabbbbbbbbabbbbaaaabbbaaaaabbaaaaaaabbbaabbaabbaaaaabbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaabbbbaaaabbbaaaaabbbbbbaaabbbaabbaaabbaaaabbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaabbbbaaabbbbaaaaabbaaaaabbbbbbaaabbbabbbaaabaaaaabbbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaabbbbaabbbbbaaaaaaaaaaaabbbaaaaaabbbabbbaaabaaaaabbbbaaaaabbbbbbbaabbba + abbbaaabbbbbbbaaaaaabbbaaabbbbbaaaaaaaaaaaabbbbbbbaabbbabbbaaabbaaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaaababbbbaaabbaaaaaaabbaaaaaabbbbaabbaaabbbaaaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaabbbabbbbaabbbbaaaaaabbbbbbbaabaaaaabaaabbbaaaabbbaaaaabbbbbbbaabbba + abbbaabbbbbbbbaaabbaaaabbbabbbbbbbbbaaaaaaabbaaaaaaaaaaaaaaaaabbaaaaabbbabbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbabbbbaabbbaaaaaaabbbbbbbaaabbaaaaaaabbaaaabbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaabbbaabbbbabbbbaaabbbaaaaaabaaaabbaaaabbbbaaaabbaaaabbbbbbbaabbbbbbbaaabbb + abbaaabbbaabbbaaabbbaabbbbbbbbbaaabbbaaaaaabbbbbbaaaaabbbbbaaabbaaaabbbbbbbaabbbbbbbaaabbb + abbaaaaaaaabbbaaabbaaabbbbabbbbaaabbbaaaaaababbbbbaaabbbbbbaaaaaaaaabbbbbbbaabbbbbbbaaabbb + abbbaabbbaaabbaabbaaaaabbbabbbaaaabbbaaaaaababaabaaaabbbbbbaaaaaaaaabbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaaaaabbbbbbaaabbbaaaaaaababbbbbbaaabbbbbbaaaaaaabbbbbbbbaabaaaaaabaabba + abbbaabbbbbbbbaabbaabbaabbbbbbaaabbbaaaaaaababbbabaaaabbbbbbaaaaaaabbbbabbbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbaabbaabbbaabbaaaaaaaababababbaaabbbbbbaaaaaabbbbbbaaaaabbbbbbbbbabba + abbbaabbbbbbbbaaaaabbbbaaaaabbbaaaaaaaaaaaabaabbbbaaaabbbbbbaaaaaabbbbbbbaaabbbbbbbbbbabba + abbbaabbbbbbbbaaaaabbbbaaaabbbbaaaaaaaaaaaabaababaaaaaabbbbaaaaaabbbbbbbbaaaabbbbbbbbbabba + abbaaabbbbbbbbaaaabbbbbaaaabbbbbaaaaaaaaaaabaabaaaabaaaabbbaaaaabbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbbaabbbbbbbbbaaaaaaabaaaaaaaabaaaabaaaaabbbbbbbbbbbbaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbbbbbbaabbbbbbbbbbaaaaaababbbbbbbbaaaaaaabaabbbbbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbbaaaaaababbbbbbbbbaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbabba + bbbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbaaaaaaababbbbbbbbbaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbabba + bbaaaaaaaaaaabaaabaaabbabaabbaabbbbbaaaaaaabaabbbbbbbbaaaabaaaabbbbbbbbbabbbabbbbbbbbbaaba`, + map `abbbbbbbbbbbbbbbbbabbbbbbbbaaabaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbbbbbbaabbbbbbbaabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaabaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbabaabbbbbbbbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbaabbbabbbbbaabbbba + abbbbbbbbaaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbaabbbba + abbbbbbbaaaaabbbabbaaaaaaaaabbaabbaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbabbaaababbbbbaabbbba + abbbbaaaaaaabbbbabbbaabaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbbaaaaaaabaaaaaaaaabbbbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbbaaabbbaaaaaabbaaabbbbbbaaabbaaaaaaabbbaaaaaaaaabaabbbbbbbaabbbba + abbbaaaaaaabbbaaabbbbbbbbbbbaaababbbaaabaaabbbbbbbaabbaaaaaaaabaaaaaaaabbbbabbbbbbbaabbbba + abbbabaabbbbbaaaabbbabbbbbbbaaababbbbbaaaabbbbbbbbaaaaabbbbaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaababbbbbaabbbbbbbbbbbaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaabbbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbbbbbbbaaaaaaabbbbbbaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaaaaaabbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabaaaabbbbbbbbaaaabbaabbbaaaaaaabbbbbbbbbaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaaaabbbbbbbbbbbbaaaaaaaaabbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbbaaaaabbbbabbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaaabbaaaaaaabbbbbaaaaaaaaabbbbbbbaaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaaabbbbaaabbaaabbbaabaaabbbbaaabaaaaaaabbbbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbaaaaaaaaaaaabbbbbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaaabbbbbbaaaaaaaaaaaabbbbbbbbbaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbaaaaaabbbaaabbbbbbbbbbaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbaaaaabbbbbaabbbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbaabbbbbbbbaaabbbbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaabbbbbbaabbbbbbbbaaabbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaabaaabbaaaaabbbbbbaaabbbbbbbaaabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaaabbbbbabaabbbbbbbaabbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbabaaabaaabbabbbbbbbbbbaaaaabbaabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaabbbbbbaaaabaabbaaabbbbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbabbbbbaaaaababbbaabbbbbbbaaaaaabbbbaaabaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbbaaaabbbbbaaaabbbbaabbaaabbbbaabbaaaaabbbaabbbbbbba + abbbbbaaaaaabbbbaabbbbaabbbbaaabbaaaaaabaaaabbbbaaaaabbbaaabbaaabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaabbbaaaaaabaaaabbbbaabbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaaabbbabaaaabbbbabbbbaaaaaabbaaaabbbabbbbaabbbbbbaaabbbbba + abbaaaabaaabbbaaaaaabbbabbbbaaaaaabbbbbbbaaabbbbabbbbabbbaaabaaabbbbabbbbaaabbbbbaaaabbbba + babaabbbbabbbbbabbaabbbabbbaaaaaabbbbbbbbaabbbaaabbbbabbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbbbbbbbaaaaabaabbbbabbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbbaaababaaabbabbbbbbbbbbaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbbaaabbbbaabbbbababbbbbbbbbaaaabbaabbbaabaabbbbabbaaaaba + aaaabbbbabbbbaabbbbaabaabaaaaaabbbbbaaababbaabbbbabaabbbbbbbbbaaabaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaaabbbbaaabbbbbaabbbbabaaaabbbbbbbbbaaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbaaabbbbbaabbbbbbaaaaaabbbbbbbbbbbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaaaabbaaaabbbbaaabbbbbbaaaaaaaaaabbbbbbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbabbaabbbbbaaaaababbaaaaaaaaaaaabbbbbbaaaaaabaabbbbabbbbaba + baabbbbbbbbbaaabbbbaaaabbbbaaabaaaaabbbbbbaaaaaaabbaaaaaaaaaaaaabbbbbaaaaaaaaabbbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaaaaaaabbbbaabbabaaabbbaaaaaaaaaaaaaabbbbaaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaabbbbbbbaaabbbbaaabbbaaaaabaaaaaaaabbbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaaabbbbbbbaaabbbbaabbbaaaaabbbabbaaaabbbaaaaabbbaaaaabbaabbbba + baaaaabbbaaabbbbbbabbaaabbbaaaabbbbbbaaaabbbbabbbbaaaaabbbbbbaaaaabbaaababbbbaaaaaaaabbbba + aaaaabbbbaabbbbbbaabbaaabbbaaaabbbbbaaaaabbbbabbbbaaaabbbbbbbaaaaabbaaababbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbaaabbbbbaaaaaabbbbaaabaaaaaabbbbbbaaaaabbbaabaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaabbbbaaaaaaaababbbbbbaaaaabbbbbbbaaaaabbbaabaabbbbbbaaaaaaabba + aabbbbbbbbaabbbbbaabbbaaabbaaabbaaaaaaaaaaaaaaabbaaaaabbbbbbbaaaaabbbabbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbbaaaabbabbbbaaaaaaaaaaabbbaaaaaaabbbbbbbaaaaaabbbabbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaababbabbbbaaaaaaaaaaabbbbbbaaaabbabbbbaaaaaaabbabbbaabbbbaaabaabbbaa + aabbbbbbbbaaabbbaabbaaabbababbbbaaaaabbaaaabbaaaaaaabbbabbbaabbaaaabbbbbbaabbbaaaabbbbbbba + aaaabbbbbaaaabbbaabbaaabbababbbbaaaaabbaaaabbbbbbaaabbbaabbbabbaaaabbbabbbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaabbbabbbbbaaaaabbbaaabbaaaaaaabbbaabbaabbaaaabbbaabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaabbbbbaaaabbbaaaabbbbbbaaabbbaabbaabbaaaabbbbabbabbbaaaabbbbbbba + abaaabbaabbbbaaaaaaabbbbaaabbbbbaaaabbbaaaabbbbbbaaabbbaabbaaabaaaaabbbaababbaaaaaaaabbaaa + abbaaaaaabbbbaaaaaaabbbbaaabbbbbaaaaabbaaaabbbabaaaabbbaabbaabbaaaaabbbaaaabaabbbaaaabbaaa + abbbaaaabbbbbbaaaaabbbbbaaaabbbbaaaaabbaaaabbbbbbaaabbbaabbabbbaaaaabbbbaaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbbaabbbbaaaabbbaaaabbbaaaaaabbbaabbaabbaaaaabbbbaaaaaabbbbaaaaaabb + aaaaaaaaababbbbaaabbbbbbbbbabbbbaaaaabaaaaabbbbbbaaabbbaabbaaabbaaaabbbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabbaaaaabbaabbbbaaaaabbaaaabbaaaaaaaabbaabbaaabbaaaaabbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbabbbbbaaaabbaaaabbbbbbaaabbaaabbaaaabaaaaabbbbaaabbbbbbbbaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbbaaaabbaaaabaaaaaaabbaaaabbaaabbaaaaabbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaabbbbbaaaabbaaaababbbbaabbaaaabbaaabbbaaaabbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaabbbbaaabbbbbbaaaaabaaaababbbbaabbaaaaabaaabbbaaaaabbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbaaaaaabbbbaabbbbbbbaaaaabbaaababbaaaabbbbaaaaaaabbbaaaaabbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbbaaaaabbaaababbbbbbbbbbbaaaaaabbbaaaaabbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaaababbbbbbaaaaabbaaabaaaaaabbbbbbbaaaaabbbaaaaabbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabbaaaabbbabbbbbbaaaaabbaaababbbbaabbbbbbaaaabbbbaaaabbbbaaaabbbbbbbaabbba + abbbaaabbbbbbbaaabbaaabbbbabbbbbbbaaaabbbaabaaaaaaabbbbbbaaaabbbbaaaabbbbbbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbabbbbbbbbaaaabaaababbbbaabbbbbbbaaabbbbaaaabbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbabbaabbbbaaaaaaaabaaaaaaaabbbbbbaaaabbaaaaabbbbbbaabbbbbbbaaabbb + abbaaaabbaabbbaaabbbaabbbbbbbaabbbbaaaaaaaabaabbbaaabbbbbbaaaabaaaaaabbbbbbaabbbbbbbaaabbb + abbaaaaaaaabbbaaabbaaabbbbbbbaabbbbaaaaaaaabaabbbaaabbbbbbaaabbaaaaaabbbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaaabbbabbbaabbbaaaaaaaabaabbabaaabbbbbaaaaaaaaaabbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaaaaabbbbbbaabbaaaaaaaaabaabbbbbaaabbbaaaaaaaaaabbbbbbbbaabaaaaaaaaabba + abbbaabbbbbbbbaabbaabbaabbbbbbaabbaaaaaaaaabaaabbabaaaaaaabaaaaaaabbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbabaabbbaabbaaaaaaaaabaabaaabaaaaaaabbaaaabbbbbbbbaaaaabbbbbbbbbabba + abbbaabbbbbbbbaaaaabbbbaaaabbbaaaaaaaabaaaabaabaaabaaaaaaabbaaabbbbbbbbbbaaaabbbbbbbbbabba + abbbaabbbbbbbbaaaabbbbbaaaabbbaaaaaaaaaaaaabaabbbbbbaaaaaabbaaabbbbbbbbbbaaaabbbbbbbbbabba + abbaaabbbbbbbbaaaabbbbbaaaabbbbaaaabbaaaaaabaabbbbbbaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaabbbbbbbbbbbaaaaabaabbbbbbbaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbbbbaabbbbbbbbbbaaaaaabaabbbbbbbaaabbaaaaabbbbbbbbbbbbbabbbbbbbbbaaba + abbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbbabaaaabaabbbbbbbaaabbaaaaabbbbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbbbbaaaabaabbbbbbbaaaabaaaaabbbbbbbbbbbbbabbbbbbbbbbaba + bbaaaaaaaaaaabaaabaaabbaaaabbaabbbbbbbbaaaabaabbbbbbbaabaaaaaaabbbbbbbbbabbbabbbbbbbbbbaba`, + map `abbbbbbbbbbbbbbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbbbbbbaabbbbbbbaabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbabaaabbbbbbbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaabbbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbaabbbabbbbbaabbbba + abbbbbbbbaaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbbabbbba + abbbbbbbaaaaabbbabbaaaaaaaaabbaabbaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbabbaabaabbbbbaaabbba + abbbbaaaaaaabbbbabbbaabaaaaabbbbaaaaaabbaaabbbbbbaaabbaabbbbaaabaaaaaaaaaaaaababbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbbaaabbbaaaaaabbaaabbbbbbaaabbaaaaaaaabbaaaaaaaaabaabbbbbbbaabbbba + abbbaaaaaaabbbaaabbbbbbbbbbbaaababbbaaabaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbaabbbbbbbaabbbba + abbbabaabbbbbaaaabbbabbbbbbbaabbabbbbbaaaabbbbbbbbaaaaabbbbaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaababbbbbaabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbaaabbbbbbbbbbaaaaaabbabbbbaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaaaabbbbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabaaaabbbbbbbbaaaabbaabbbaaaabbbbbaaaabbbbbaaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaaabbbbaaaaaaaaabbbbaaaaabbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbaaaaaaaaaaabbbbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaaabbaaaaaaabbbbbaaaaaaaaaaabbbbbaaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaaabbbbaaabbaaabbbaabaaaabbbbaaaaaaaaaaaabbbbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbbaaaaaaabbaaabbbbbbbaaaaabbbbaaaaaabbbbaaaaaaabbbbaa + abbabbbbbbaabbbbaaaabbbbaabbaaaabbbbbbbaaaaabbbbbaabbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbaabbbbbbbbaaabbbbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbaabbbbbbbbaaabbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbaaabbbbbbbaaabbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaaabbbbbbaaaabbbbbbaabbbbabbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaabaaabbaaaaabbbbbbbaaaaabaaabbabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbbaaaaabbbbbbaaaaabbaabbabbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbaaaaaababbbaabbbbbbbbaaaaabbaaabaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaaabbbbbbaaaabbbbbaabbbbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbaabaaaabbbbaaabbbbbbaaaaaabbbbaaabaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbabaaaabbbbaaaabbbbaabbaaabbbbaabbaaaaabbbaabbbbbbba + abbbbbaaaaaabbbbaabbbbaabbbbaaabbaaaaababaaaabbbbaaaaabbaaabbaaabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaabbbbaabbbbaaabbaaaaaaabaaaabbbbabbbaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaaabaaaabaaaaaaaaabbbabbaaaabaaaabbbabbbbbabbbbbbaaabbbbba + abbaaaabaaabbbaaaaaabbbabbbbaaaaaabbbbabbbaaabbbaabbbbbbbaaabaaabbbbabbbbaaabbbbbaaaabbbba + babaabbbbabbbbbabbaabbbabbbaaaaaabbbbbaabbbbbbbbaabbbbbbbbbaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaaabbbbbbbbbaabbaabbbaabbbaaaabbbbbbaabbbaaabbbabbabbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbaaaabbbaababbbbbaabbbbbbbbbaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaabaaabbbbbaaaabbbaaaabbbbbaaabbbbbbbbbbbbaabbbaabaabbbbabbbaaaba + aaaaabbbabbbbaabbbbaabaabaaaaaabbbbbaaababbaaaabbbbbaaaaaabbbbbbbbaaabbaabbbaabbbbbbbbaaaa + aaaaabbbabbbbaabbbbaaaabbbaaaaabbbbaaabbbbbaababbabbaaaaaaaaaabbbbbaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbaaabbbbbaabaaabbbaaaaaaaaaaabbbbbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaaabaabbaabbbbbbaabaaabbbaaaaaaaaaaaaabbbbaaaabbbaaabbaabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbabaabbbbaabaaaaaabbaaaaaaaaaaaaaaabbbaaaaaabaabbbaabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaaabbaaabbbbbaabbaaaabbbaaaaabaaaaaaaaabbbaaaaaaaaabbbbabbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaaaaaabbbbbaaabbbaabbbbaaaaabbbbbbaaaabbbbaaabbbaaabbbbbbbbaaa + babbbbaaaaaaaabbbbaabaabbbbaaaabbbbbbbaaaabbbbabbbbaaaabbbbbbbaaaabbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaaabbbbbbaaaaabbbbbbbbaaaaabbbbbbbaaaabbbaaaabbbaaaaabbaabbbba + baaaaabbbaaabbbbbbabbaaabbbaaaabbbbbaaaaaabbbaaaabaaaabbbbbbbbaaaaabbaaaabbbbaaaaaaaabbbba + aaaaabbbbaaabbbbbaabbaaabbbaaaabbbbaaaaaaabbbbbbbaaaaabbbbbbbaaaaaabbaabaabbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbbaabbbaaabbbaaaaaaaaaabbaabbbaaabbbbbbbbaaaaaabbbabaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaaabbbaaaaaaaaaaabbaaaaaaabbbbbbbbaaaaaabbbabaabbbbbbaabaaaabba + aabbbbbbbbaabbbbbaabbbaaabbaaabbbaaaaaaaaaaabbbbbaaaabbbabbbbaaaaaabbbbbbabbbbbbaabbbbaaba + babbbbbbbbaaabbbbabbbaaaabbaabbbbaaaaabaaaaabbaaaaaaabbbabbbaabaaaabbbbbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaababbaabbbbaaaaaabaaaabbbbbaaabbbbabbbaabaaaaabbbbbaabbbbaaababbbbaa + aabbbbbbbbaaabbbaabbaaabbabaabbbbaaaaaabaaabbaabbaaabbbbabbbaabaaaaabbbbbaabbbaaaabbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaabbbbaaaaabbaaaabbbbbaaabbbbaabbabbaaaaabbbabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaaabbbbaabbbaaaaabbaaaaabbbbaaabbbaabbbaabaaaaabbbabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaaabbbbbaaaaabbaaabbbbaaaaaabbbabbbabbbaaaabbbbbbabbbaaaabbbbbbba + bbaaabbaabbbbaaaaaaabbbbaaaabbbbbaaaaabbaaabbbbbbaaaaabaabbbaabbaaaaabbbabaabaaaaaaaabbbaa + abbaaaaaabbbbaaaaaaabbbbaaaabbbbbaaaaabaaaabbaaaaabaaaaaabbbaaabaaaaabbbaaabbabbbaaaabbaaa + abbbaaaabbbbbbaaaaabbbbbaaaabbbbbaaaaaaaaaabbbbbbabaaaaaabbbaaabbaaaaabbbaaaaabbbaaaabbaba + abbbbaabbbbbbbaaaabbbbbbbbaabbbbbbaaaaaaaaabbaaaaabbbaaaabbbaaabbaaaaabbbaaaaabbbbaaaaaabb + aaaaaaaaababbbbaaabbbbbbbbbaabbbbbaaaaaaaaabbabbabbbbbaaaabbaaabbaaaaabbbbaaabbbbbbaaaabbb + abbbaaaaaaaaaaaaabbaaaaabbaaabbbbbaaaaaaaaabbaaaabbbbbbaaabbaaabbbaaaabbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbaaabbbbaaaaaaaaabbbbabbbbbbbaaaabaaabbbaaaaabbbaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbbbaaaaaaaaabbabbbbbbbbbbaaaaaaabbbaaaaabbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaabbbbbbaaaaaaaaabbaaaaabbbbbbaaaaabbbbbaaaaabbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaaabbbbaaaabbbbbbaaaaabaaabbabbbbbbbbbbaaaabbbbbbaaaaabbbaaabbbbbbbaabbbb + abbbaaabbbbbbbaaaaaabbbbaabbbbbbbbaaaaabaaabbabbaabbbbbbbaaabbbbbbaaaabbbbaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbbbaaaabbbaabbabbbabbbbbbbaaabbbbbbaaaabbbbaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaaababbbbbbbaaaaabaaabbabbbabbbbbbbaaabbbbbbaaaabbbbaaabbbbbbbaaabba + abbbaaabbbbbbbaaabbaaaabbbabbbbbbbaaaabbaaabbabbaaaabbbbbaaabbbbaaaaaabbbbbaabbbbbbbaabbba + abbbaaabbbbbbbaaabbaaaabbbabbbbbbbbaaabbaaabbabbbaaaaabbaaaabbbbaaaaaabbbbbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbbbbbabbbabaaabaaabbabbbbaaaaaaaaaabaaaaaaaaabbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbbbbaaaaaaaaaabaaabbabbbbaaaaaaabbaaaaaaaaaabbbbbbaabbbbbbbaaabbb + abbaaaabbaabbbaaabbbaabbbbbaaabbbaaaaaabaaabbabbbbaaaaaaabbbaaaaaaabbbbbbbbaabbbbbbbaaabbb + abbaaaaaaaabbbaaabbaaabbbbbaabbbbaaaaaaaaaabbaaabbbaaaaaabbbaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaaabbbbbabbbbaaaaaaaaaabbaaaaaaaaaaaabbaaaabbbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbbbabbbbaaaaaabaaabbaaaaaaaaaaaaaaaaaabbbbbbbbabbbaaaabaaaaaaaaba + abbbaabbbbbbbbaabbaabbaabbbbabbbbaaaaaabaaabbabbbbbaaaaaaaaaaaabbbbbbbbaabbaaabbbbbbbaabbb + abbbaabbbbbbbbaaaaabbbbabbbbbabbbaaaaaaaaaabaabbbbbaaabbbbaaaaabbbbbbbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaaabbbbaabbbbabbaaaaabaaaaabaabbbbbaaabbbbbaaaabbbbbbbbbbaaaabbbbbbbbbabba + abbbaabbbbbbbbaaaabbbbbaaabbbaaaaaabbbaaaaabaabbbbbaaabbbbbaaaaabbbbbbbbbaaaabbbbbbbbbabba + abbaaabbbbbbbbaaaabbbbbaabbbbaaaaabbbbbaaaabaabbbbbbaaabbbbaaaaabbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbaaaabaabbbbbbaaaabbbaaaaabbbbbbbbbbbaabbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbbbbaabbbbbbbbbbbaaaaabaabbbbbbaababbbaaaaabbbbbbbbbbbbabbbbbbbbbaaba + abbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbbbaaaaabaabbbbbbaabaaabaaaaabbbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbaaaaaaabaabbbbbbaabaaabaaaaabbbbbbbbbbbbabbbbbbbbbbaba + bbaaaaaaaaaaabaaabaabbaaaaabbbbbbbbbaaaaaaabaabbbbbbaabaaaaaaaaabbbbbbbbbbbbabbbbbbbbbbaba`, + map `abbbbbbbbbbbbbbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaabaaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaababbabbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbabaaabbbbbbbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaabbbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbaabbbabbbbbaaabbba + abbbbbbbbaaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbaaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaabbaaaaaaaaaaabbaaaaaaaabbbbaaaaaabbbbbabbaabaabbbbbaaabbba + abbbbaaaaaabbbbbabbbaabaaaaabbbbaaaaaabbaaabbbbbaaaabbaabbbbaaabaaaaaaaaaaaaababbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbbaaabbbaaaaaabbaaabbbbbbaaabbaaaaaaaabbaaaaaaaaabaabbbbbbbaabbbba + abbbaaaaaaabbbaaabbbbbbbbbbbaaababbbaaabaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbaabbbbbbbaabbbba + abbbabaabbbbbaaaabbbabbbbbbbaabbabbbbbaaaabbbbbbbbaaaaabbbbaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbabbbbbbbbaaababbbbbaabbbbbbbbbbbaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaaabbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbaaaaaaabbabbbbaabbbbbbbbbbbbabbbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaaaaabbbbbbbbbbbbaabbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabaaaabbbbbbbbaaaabbaabbaaaaabbbbbaaaabbbbbbaaaaaabaaaaaaabbbbbbbbaaaabbbbaaabbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaaabbbbaaaaaaaaabbbbaaaaabbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbaaabaaaaaaabbbbbaaaabbaaabaaaabbbbbbbbaaabbbaabbbba + abbbbbbbaaaaabbbbbaaaaaaabbbaaaaaaabbbbbaaaaaaaaaaabbbbbaaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaabbaaabbbaabaaaabbbbaaaaaaaaaaaabbbbbbaaaaaabbbaaaaaaabbbbaaaaaaabbbbaa + abbbbbbbbaaabbbbaaaabbbaabbbaaabbbbbbbbaaaaaaabbaaabbbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbaaaaabbbbbaabbbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaabbbbbbbaabbbbbbbbaaabbbbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbaabbbbbbbbaaabbbbbbbaaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbaaabbbbbbbaaabbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbaaaabbbbbbaabbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbaaabbabbbaaabaaabbaaaaabbbbbbbaaaaabaaabbabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaaaaabbbaaaaaabbbbbbaaaaabbaabbabbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbaaaaaababbbaabbbbbbbbaaaaabbaabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaabbbaabbbbbaaaaaaabbbbbbaaaabbbbbaabbbbbaaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbabbbbaabaaaabbbbaaabbbbbbaaaaaabbbbaaaaaabbabbaabbbbbbbba + abbbbaaaaaabbbbbaabbbbaabbbbaaabbaaabbbabaaaabbbbaaaabbbbaabbaaabbbbaabbaaaaabbbaabbbbbbba + abbbbaaaaaaabbbbaabbbbaabbbbaaabbaaaaababaaaabbbbaabaabbaaabbaaabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbaaaaaaabaaaabbbbabbaaaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaaabaaabbaaaaaaaaabbbabaaaabbaaaabbbabbbbbabbbbbbaaabbbbba + abbaaabbaaabbbaaaaaabbbabbbbaaaaaabbbbabbbaaabbbaabbbbbbbaaabaaabbbbabbbbaaabbbbbaaaabbbba + babaabbbbabbbbaabbaabbbabbbaaaaaabbbbbaabbbbbbbbaabbbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaabbbba + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbbbbaabbbaaabbbabbabbbbbbaaaaaabbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbaaaabbbaababbbbbaabbbbbbbbbaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbbaaaabbbaababbbbbaaabbbbbbbbbbbbaabbbaabaabbbbabbbaaaba + aaaabbbbabbbbaabbbbaabaaaaaaaaabbbbbaaababbaababbbbbaaaaaabbbbbbbbaaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaaabbbbaaabbbbbaababbabbaaaaaaaaaabbbbbaabbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbaabbbbbbaabaaabbbaaaaaaaaaaabbbbbaaaabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaabaabaaabbbbbbaabaaabbbaaaaaaaaaaaaabbbbaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaaabbabaabbbbaabaaaaaabbaaaaaaaaaaaaaaabbbaaaaaabaabbbaabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaaabbaaabbbbbaabbaaaabbbaaaaabbaaaaaaaabbbaaaaaaaaabbbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaaaaaabbbbbaaabbbaabbbbaaaaabbbbbbaaaabbbbaaabbbaaabbbbbbbbaaa + babbbbaaaaaaabbbbbaabaabbbbaaaabbbbbbbaaaabbbbabbbbaaaabbbbbbbaaaabbbaaaabbbaaabbbbbbbbbaa + baaaaaaaaaaaabbbbbaabaabbbbaaaabbbbbbaaaaabbbbbbbbaaaaabbbbbbbaaaabbbaaaabbbaaaaabbaabbbba + baaaaabbbaaabbbbbbabbaaabbbaaaabbbbbaaaaaabbbaaaabaaaabbbbbbbbaaaaabbaaaabbbbaaaaaaaabbbba + aaaaabbbbaaabbbbbaabbaaabbbaaaabbbbaaaaaaabbbbbbbaaaaabbbbbbbaaaaaabbaabaabbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaabbbaaabbbaaaaaaaaaabbaabbbaaabbbbbbbbaaaaaabbbabaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaabbbbaaaaaaaaaaabbaaaaaaabbbbbbbbaaaaaabbbabaabbbbbbaabaaaabba + aabbbbbbbbaabbbbbaabbbaaabbaabbbbaaaaaaaaaaabbbbbaaaabbbabbbbaaaaaabbbbbbabbbbbbaabbbbabba + babbbbbbbbaaabbbbabbbaababbaabbbbaaaaabaaaaabbaaaaaaabbbabbbaaaaaaabbbbbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbaabbaaababbaabbbbaaaaaabaaaabbbbbaaabbbaabbbaabaaaaabbbbbaabbbbaaababbbbaa + aabbbbbbbbaaabbbaabbaaabbabaabbbbaaaaaabaaabbaabbaaabbbaabbbabbaaaaabbbbbaabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaabbbbaaaaabbaaaabbbbbaaabbbaabbbaabaaaaabbbabbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaaabbbbaabbbaaaaabbaaaaabbbbaaabbbbabbbabbaaaaabbbabbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaaabbbbbaaaaabbaaabbbbaaaaaabbbabbbabbbaaaabbbbbbabbbaaaabbbbbbba + bbaaabbaabbbbaaaaaaabbbbaaaabbbbbaaaaabbaaabbbbbbaaaabbaabbbababaaaaabbbabaabaabaaaaabbbaa + abbaaaaaabbbbaaaaaaabbbbaaaabbbbbaaaaabbaaabbaaaaabaaaaaabbbaaabbaaaabbbaaabaaabbaaaabbaaa + abbbaaaabbbbbbaaaaabbbbbaaaabbbbbaaaaabaaaabbbbbbabaaaaaabbbaaabbaaaaabbbaaaaabbbaaaabbaba + abbbaaabbbbbbbaaaabbbbbbbbaaabbbbbaaaabaaaabbaaaaabbbaaaabbbaaabbaaaaabbbaaaaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbaabbbbbbaaaabaaaabbabbabbbbbaaaabbaaabbaaaaabbbbaaabbbbbbaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaabbbbbbaaaaaaaaabbaaaabbbbbbaaabbaaabbaaaaabbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaabbbbbbaaaaaaaaabbbbabbbbbbbaaaabaaabbbaaaaabbbaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbbbaaaaabaaabbabbbbbbbbbbaaabaaabbbaaaaabbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaabbbbbbaaaaabaaabbaaaaabbbbbbaaaaaaabbbaaaaabbbaaabbbbbbbaabbbb + abbbaaabbbbbbbaaaaabbbbbaaaabbbbbbaaaaabaaabbabbbbbbbbbbbaaabbbbbbaaaaabbbaaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaaabbbbaabbbbbbbbaaaaabaaabbabbaabbbbbbbaaabbbbbbaaaabbbbaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbbbaaaabbbaabbabbbabbbbbbbaaabbbbbbaaaabbbbaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaaababbbbbbbaaaabbaaabbabbbabbbbbbbaaabbbbbbaaaabbbbaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaabbbabbbbbbbaaaaabaaabbabbaaaabbbbbaaabbbbbaaaaabbbbbaabbbbbbbaabbba + abbbaaabbbbbbbaabbbaaaabbbabbbbbbbbaaaabaaabbabbbaaaaabbaaaababbaaaaaabbbbbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbbbbbabbbabaaabaaabbabbbbaaaaaaaaaabaaaaaaaaabbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbbbbaaaaaaaaaabaaabbabbbbaaaaaaabbaaaaaaaaaabbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbbaaabbbaaaaaabaaabbabbbbaaaaaaabbbaaaaaaabbbbbbbbaabbbbbbbaaabbb + aabaaaaaaaabbbaaabbaaabbbbbaabbbbaaaaaaaaaabbaaabbbaaaaaabbbaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbbbabbbbaaaaaaaaaabbaaaaaaaaaaaabbaaaabbbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbbbabbbbaaaaaabaaabbaaaaaaaaaaaaaaaaaabbbbbbbbabbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabbaabbbbabbbbaaaaaabaaabbabbbbbaaaaaaaaaaaabbbbbbbbaabbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbaabbbbbabbbaaaaaaaaaabaabbbbbaaabbbbaaaaabbbbbbbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaaabbbbaaabbbabbaaaaabaaaaabaabbbbbaaabbbbbaaaabbbbbbbbbbaaaabbbbbbbbaabba + abbbaabbbbbbbbaaaabbbbbaaabbbaaaaaabbbaaaaabaabbbbbaaabbbbbaaaaabbbbbbbbbaaaabbbbbbbbaabba + abbaaabbbbbbbbaaaabbbbbaaabbbaaaaabbbbbaaaabaabbbbbbaaabbbbaaaaabbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbabbbbbbbbbbbbbaaaabaabbbbbbaaaabbbaaaaabbbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbaabbbbaabbbbbbbbbbbaaaaabaabbbbbbaababbbaaaaabbbbbbbbbbbbabbbbbbbbbaaba + abbaabbbbbbbbbaabbbabbbbbaabbbbbbbbbbbaaaaabaabbbbbbaabaaabaaaaabbbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbaaaaaaabaabbbbbbaabaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbaba + bbaaaaaaaaaaabaaabaabbbaaaabbbbbbbbbaaaaaaabaabbbbbbaabaaaaaaaaabbbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbaabbbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaabaaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaababbabbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbaabbbba + abbbbbbbbbbaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbaabbbbbbbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbbaabbba + abbbbbbbbaaaabbbabbbaaaaaaaabbaaabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaababbbbbbbaabbba + abbbbaabaaaabbbbabbbaaaaaaaabbbbaaaaaabbaaaabbbbaaaabbaabbbbaaaaaaaaaaaaaaaaaabbbbbbabbbba + abbbbaaaaaabbbbaabbbbbbbbaaaabbbbaaaaabbaaabbbbbbbaabbaaaaaaaabbaaaaaaaabbaaaabbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbbaababbbaaabaaabbbbbbbaabbaaaaaaaaaaaaaaaaabbbbabbbbbbbaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaabbabbbbbaaaabbbbbbbbaaaaabbbbaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbbaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaaabbbbbbabbbbbabbbbbbbbbbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbabbbbaaaaabbbbbbbbbbaaaaabbbbbbbabbbaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaababbbabaaaaaabbbbbbbaaaaaaabbbbbbbabbaaaaabbbaaabbbba + abaabbbaaabaaaabbbbabbbaaaabbaabbbaaaabbaaaaaaaaaaabbbbaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabbaaabbbbaaaaaaaaaaabbaaaaabbaaaaaaaabbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbaaaaaaaaaaaabbbaaaabbaaabaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbaaaaaaabbaaabbbbaaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaabaaaabbbbbaabbbbbbbbaabbbbbaaaaaabbbaaaaaaabbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbbbaabbbbbbbbaabbbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbaaabbbbbbbbaabbbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbaaaabbbbbbbaabbbbbbbaaaaabbaaabbbaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbaaaabbbbbbaabbbbbbbaaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbaaaaabaaabbabbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbabbbbbbaaaaabbbaabbbaabbaaaaabbbbbbbbaaaaabbaabaabbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabbaabbaaaaabbbbbbbbbaaaabbbbbaabbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbaaaaabbbbbbbbbbaaaabbbbaaabbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbaaaaaaabbbbaabbbbbbbbaaaaabbaabbaaabbaaaaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaaaaaabbbbbabaaaabbbbaabbbbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbbaabaaaabbbbaabbbbbbaaaaaabbbbaaaaaabaaabaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbabbaaaabbbbaabbbbbaaabaaaabbbaabbaaaaabbbabbbbbbbba + abbbbbaaaaaabbbbaabbbbaabbbbaaabbaaaaaaabbaaaaabbaabbbbbaaabbaaaabbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaaaaaabbbaaaabbbabbbbbbaabbbaaaabbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaaabbaaabbbaaabbbbbbbbbbbaabbaaaabbbabbbbbabbbbbbaaabbbbba + abbaaaabaaabbaaaaaaabbbabbbbaaaaaabbbbaabbbaabbbbbbbabbbbbaabbaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbabbbbbabbaabbbabbbaaaaaabbbbbaabbbabbaabbbbaabbbbbbbbbabbbbabbbbaaaaaaaaaaaabbbba + baaaabbbbbbbbbaabbaabbbaabbbaaaabbbbbbaabbbaaaabbbabaaaabbbbbbbbbbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbbaaaaabbaababbbbbaaaaaaabbbbbbbbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaabaaabbbbbaaaabbbaababbbbbaaaaaaaaaabbbbbaabbbaabaabbbaabbbaaaba + aaaabbbbabbbbaabbbbaabaaaaaaaaabbbbbaaababbaabaaaabbaaaaaaaaaaaaabbbabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaaabbbbaaabbbbbaabaaabbbaaaaaaaaaaaaaabbbbbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbaabbbbbbaaaaaabbbaaaaaaaaaaaaaabbbababbbbaaabbbabbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaaababbbabbbbaabaaaaabbbaaaaabbbaabaaaabbbaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaaabbabbbbbbaaabbabaabbbaaaaabbbbbbaaaaabbaaaaaabbabbbbabbbbaba + baabbbbbbbbbaaaabbbaaaabbbbaaabbaabbbbaaaabbbbabbbbaaaaabbbbbbbaaaabbbaaaaaaaabbbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaaaaabbbbbaaaabbbbbbbbaaaaabbbbbbbaaaaabbbaaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaabaabbbbaaaabbbbbbaaaaabbbaaabbaaaabbbbbbbbaaaaabbbaaabbbaaabbbbbbbbbaa + baaaaaaabaaaabbbbbaabaaabbbaaaabbbbbaaaaaaabbbabaaaaaabbbbbbbbaaaaabbbaaabbbaaaaabbaabbbba + baaaaaaabaaabbbbbbabbaaabbbaaaabbbaaaaaaaaabbbbbbbaaaabbbbbbbaaaaaabbbbaabbbbaaaaaaaabbbba + aaaaabbbbaaabbbbbaabbaaabbbaaaabbbaaaaaaaaabbbaaaaaaaabbbbbbbaaaaaaabbbbabbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaabbbaaabbbbaaaaaaaaabbbbbbaaaaabbbabbbaaaaaaabbbbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaaaabbbaaaaaaaaaabaabbaaaabbbbabbbaaaaaaabbbbaabbbbbbaabaaaabba + aabbbbbbbbaabbbbbaabbbaaabbaaaabbbaaaaaaaaaabbbbbaaaabbbbabbbabbaaaabbbbbabbbbbbaabbbbabba + babbbbbbbbaaabbbbaabbaaaabbaaabbbbaaaaaaaaaababbbaaaabbbaabbbabaaaaabbbbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaababbaaabbbbaaaabaaaaabbbaaaaaabbbaabbbabaaaaaabbbbaabbbbaaabbbbbbaa + aabbbbbbbbaaabbbaabbaaabbabaaabbbbaaaabaaaaabbbbbaaaaaaaaabbbaaaaaaaabbbbaabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaaabbbbaaaaaaaaaabbaaaaaaaaaaabbbbaaaaaaaaabbbbabbbaaabbaabbbba + abaabbbaaaabaabbaabaaaaabbbaaabbbbaaaaaaaaaababbbbbbbaaaaabbbaaaabbaaabbbbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaaababbbbaaaaabaaaabaaabbbbbbaaaabbbaaaabbaaabbbbabbbaaaabbbbbbba + bbaaabbaabbbbaaaaaaabbbbaaabbbbbbbaaaaabaaabbabbbbbbbbaaaabbbaaabbbaaaabbbabbaabaaaaabbbaa + abbaaaaaabbbbaaaaaaabbbbaaaabbbbbbaaaaabaaabbaaabbbbbbbaaaabbaaabbaaaaabbbbbbabbbaaaabbaaa + abbbaaaabbbbbbaaaaabbbbbaaaaabbbbbaaaaaaaaabbabaabbbbbbaaaabbaaabbaaaaaabbbaaabbbbaaabbaba + abbbaaabbbbbbbaaaabbbbbbbbaaaaabbbaaaaaaaaabbabbbbbbbbbbaaabaaaabbbaaaaabbbaaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbaaaabbbbaaaaaaaaabbaaaabbbbbbbaaabbbbabbbaaaaabbbaaabbbbbaaaabbb + abbbaaaaaaaaaaaaaaaaaaaaabaaaaabbbaaaaaaaaabbabbbbbbbbbbaaaabbbbbbbaaaaabbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaaaaabbbbaaaaaaaabbaaaabbbbbbbaaabbbbbbbbaaaaabbbaabbbbbbaaabbba + abbbaaabbbbbbbbaabbbbbbbbbaaaaabbbbaaaaaaaabbabbbabbbbbbaaabbbbbbbbaaaaabbbaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaabaabbbbaaaaaaaabbabbbaaaabbbaaaabbbbbbbbaaaabbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaaabbabbbbaaaaaaaabbabbbaaaaabbaaaabbbbbbbaaaabbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaabbbbaaabbbbbbbbbaaaaaaaabbabbbaaaaaaaaaabababbbaaaaabbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbbbbaaaabbaabbabbaaaaaaaaabbbaaaaaaaaaaabbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbabbbbbbbbaaaabaaabbabbbaaaaaaaabbbaaaaaaaaaaabbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaabbbabbbbbbbbaaaaaaaabbabbbbbaaaaaabbbaaaaaaaaaabbbbbaabbbbbbbaabbba + abbbaaabbbbbbbaabbbaaaabbbbbbbbbbbabaaaaaaabbabbbbbaaaaaaaaaaaaaaabbbbbbbbbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbbbbaaaaaaaaabaaaabbabbbbbaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbbbaaaaaaaaaaaaaaabbaaaabbaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaaaaabaaaaaaaaaaabbaaaaabaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbaaabbbbaabbbbbaaaaaabaaabbabbaaaaaaabbbaaaaabbbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbbabbbbbaaaaaaaaaabbabbbbaabbbbbbbbaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbbaabbbbaaaaaaaaaabbbbbbbaaabbbbbbbaaaabbbbbbaabbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaaabaabbbaabbbbaaaaabaaaababbbbbaaabbbbbbbaaaabbbbbbaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbbabbbbaabbbaaabbbaaaababbbbbaaaaabbbbaaaaabbbbbbbaaabaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaabbbbabbaaabbbbaaaababbbbbaaaaabbbbaaaaabbbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaabbbaaaaabbbbaaaaababbbbbaaaababbbaaaaabbbbbbbbbaaaabbbbbbbaaabba + abbaaabbbbbbbbaaaabbbbbaaabbbaaabbbbbbaaaaababbbbbaaabbbaabaaaaabbbbbbbbbbaabbbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbabbbbbbbbbbbbaaaaababbbbbaaabbbbabaaaaabbbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbaaabbbaabbbbbbbbbaaaaaaababbbbbbaabbbbabaaaaabbbbbbbbbbbaabbbbbbbbbaaba + abbaaabbbbbbbbaabbbabbbbbaabbbbbbbbbaaaaaaababbbbbbaabbbbabaaaaabbbbbbbbbbbbbbbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbaaaaaaababbbbbbaabbbbabaaaaabbbbbbbbbbbbbbbbbbbbbbbaba + bbaaaabaaaaaabaaabaabbbbbaabbabbbbbbaaaaaaababbbbbbaaabbbabaaaaabbbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbbabbbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaabaaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbaabbbbbbbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbbaabbba + abbbbbbbbaaaabbbabbbaaaaaaaabbaaabaaaaaaaaaaabbaaaaaaaabbbbbaaaaabbbbbabbaababbbbbbbaabbba + abbbbaabaaaabbbbabbbaaaaaaaabbbbbaaaaabbaaabbbbbbababaaabbbbaaabaaaaaaaaaaaaaabbbbbbabbbba + abbbaaaaaaabbbbaabbbbbbbbaaaabbbbaaaaabbaaabbbbbbbbbbbaaaaaaaabbaaaaaaaabbaaaabbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbbaababbbaaababbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbabbbbbbbaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaabbabbbbbaabbbbbbabbbbbbbbbbbbaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbaaaaaaabbbbbbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaaabbbbbbbbbaabaaaaaabbbbbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbbbaaaaaaaaaaabbbbbbbaaaaabbbbbbbabbaaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaababbbaaaaaaaaaaabbbbaaaaaaaabbbbbbabbaaaaabbbaaabbbba + abaabbbaaaaaaaabbbbabbbaaaabbaabbbaaaabbbaaaaaaaaaaaabbaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbaaaabbbbaaaaaabbbaaabbaaaabbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbaabbbbbbbbaabbbaaabbaaabaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbaabbbbbbbbbaabbbaaabbaabbbaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaabaaaabbbbbaaabbbbbbbbaabbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbbbaaaabbbbbbbaabbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbaaaaabbbbbbaabbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbbaaaaabaaabaabbbbbbaaaaabbaaabbbaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbbaaaaabbaabaabbbbbbaaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbbaaaabbbbbaabbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbbabaaaabbbbbaabbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbabaaaabbbbaaabbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbaaaaabbbbbbbbabaaaabbbbaabbbbbbbbaaaaabaaabbbaabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbaabaaabbbbaabbbbbbbbaaaaabbaabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaaaaaabbbbbabbaaaabbbaabbbbbbaaaaaabbbbaabaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbbaabbaaaabbbabbbbbbbaaaaaabbbbaaaaaabaaabaabbbbbbbba + abbbbaaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabbaaaabbaabbbbbbaaabaaaabbbaabbbaaaabbbabbbbbbbba + abbbbaaaaaaabbbbaabbbbaabbbbaaabbaaaaaaaabbaaabbbbbbbbbbbaabbaaaabbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaaaaaaabbbbaaabbbbbaabbbbbbbbaaabbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaaabaaaabbbbaaaabbbbaabbbbbbbbbabbbbabbbbbabbbbbbaaabbbbba + aabaaaabaaabbaaaaaaabbbabbbbaaaaaabbbbaabbbbaaaabbbbaaaabbbbbbbbbbbbabbbbaaabbbbbaaaabbbba + babaabbbaabbbbbabbaabbbabbbaaaaaabbbbbaabbbbabaabbbbaaaaaabbbbbbbbbbabbbbaaaaaaaaaaaabbbba + baaaabbbbbbbbbaabbaabbbaabbbaaaaabbbbbaabbbaaaaabbbbbaaaaaaaaaabbbbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbaaaaabbaaabaaabbaaaaaaaaaaaaaabbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbbaaabbbbaaabaabbbaaaaaaaaaaaaaabbbbbbaabaabbbaabbbaaaba + aaaabbbbabbbbaabbbbaabaabaaaaaabbbbbaabbbbbaaabaabbbaaaaaaaaaaaaaabbbbbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaaabbbbbabbbaabaaababbbaaaaaabbaabaaaaabbbbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbabbbaaabaaaaabbbaaaaabbbbbbbaaaabbbaabbbbaaabbbabbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaaababbbbbbaaaabbbbbbbbbaaaaabbbbbbbaaaabbbbaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaaabbbbbbbbaaaabbabbbbbaaaaabbbbbbbbaaaabbbaaaaabbaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaaabbbbbbbaaaaaabbaaabbaaaabbbbbbbbaaaaabbbaaaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaabbbbbbaaaaaaabbbaaabaaaabbbbbbbbaaaaaabbbaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaabbbaaaaaaaaaabbbbbbaaaabbbbbbbbaaaaaabbbaabbbaaabbbbbbbbbaa + baaaaaaabaaaabbbbbaabaaabbbaaaabbbaaaaaaaaaabbaabaaaaabbbbbbbaaaaaaabbbaabbbbaaaabbabbbbba + baaaaaaabaaabbbbbbabbaaabbbaaaabbbaaaaaaaaabbbbbbaaaabbbbaabbbaaaaaabbbbabbbbaaaaaaaabbbba + aaaaabbbbbabbbbbbaabbaaabbbaaaabbbaaaaaaaaabbaabbaaaabbbbaabbbaaaaaabbbbaabbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaaabbaaaabbbaaaaaaaaabbbbaaaaaaabbbaabbaabaaaaabbbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaaaabbbaaaaaaaaaabbbbbaaaaaabaaabbaaaaaaaabbbbabbbbbbaaaaaaabba + aabbbbbbbbaaabbbbaabbbaaabbaaaabbbaaaabbaaaabbaaaaaaaaaaaabbbaaaaaaaaabbbabbbbbbabbbbaabba + babbbbbbbbaaabbbbabbbaababbaaabbbbaaaaabaaaabbbbbabbbaaaaabbbaaaabbaaabbbabbbbbbaabbbbaaba + aabbbbbbbbaaabbbaabbaaababbaaabbbbbaaaaaaaaabaaabbbbbbaaaabbbaaaaaaaaaabbbabbbbaaabbbbbbaa + aabbbbbbbaaaabbbaabbaaabbabaaabbbbaaaabaaaaabbbbbbbbbbaaaabbbaaaaaaaaaabbbabbbaaaabbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaaabbbbbaaaaaaaaabaaabbbbbbbaaaabbaaaaabaaaaabbabbbaaabbbabbbba + abaabbbaaaabaabbaabaaaaabbbaaabbbbbaaaaaaaaabbbaabbbbbbaaaabbaaaabbaaaaabbbbbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaaababbbbbaaaaaaaaabaabbbbbbbbbaaabbaaaabbaaaaaabbbbbaaaabbbbbbba + bbaaabbaabbbbaaaaaaabbbbaaaababbbbbaaaaaaaaabaaaabbbbbbbaaaaaaaaabbaaaaaabbbbaabaaaabbbbaa + abbaaaaaabbbbaaaaaaabbbbaaaabbbabbbaaaaaaaaababbabbbbbbbbaaabbbbbbbbaaaaabbbbaabbaaaabbaaa + abbbaaaaabbbbbaaaaabbbbbaaaaaaaabbbaaaaaaaaabaaaaabbbbbbbaaabbbbbbbbbaaaabbbaabbbbaaabbaba + abbbaaabbbbbbbaaaabbbbbbbbaaaaabbbbaaaaaaaaabbbbaaababbbbaaabbbbbbbbbaaaabbbaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbaaaaabbbbaaaaaaaaababbaaaaaabbaaaabbbbbbbbbaaaabbbaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaaaaabbbbaaaaaaaaabbbbaaaaaabbaaaaaabbbbbbbaaaabbbabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaaaaabbbbaaaaaaaaababbbaaaaaaaaaabaaaabbbbaaaaabbbabbbbbbbaabbba + abbbaaabbbbbbbbaaabbbbbbbbaaaaabbbbaaaaaaaaabbbbaaaaaaaaaabbbaaabbbaaaaaabbbaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaaaaabbbbaaaaaaaaabbbbbaaaaaaaaabbbaaaaaaaaaaaabbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaabbbaabbbbaaaabaaabbbaaaaaaaaaaabbbaaaaaaaaaaabbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaaabbbbaabbbbbbbbbbaaabbaaabbbabaaaaabbbaaaaaaaaaaaaaabbbbaabbbbbbbaaabba + abbbaaabbbbabbaaabaabbbaaabbbbbbbbbaaaaaaaaababbbaaaaabbbaaaaaaababbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaaabbbbbbbbbbaaaaaaaabbabbbaaaaaabaaaaaaaabbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaaaabbbbbbbbaaaaaaaaabaababbbbbaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbaabbba + abbbaaabbbbbbbaabbbaaaabbbbbbaaaaaaaaaaaabaabaabbbbaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbbbaaabaaaaaaaaabaabaabaabaaabbbbbaaaabbbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbbaaaabaaaaaaaaaaaabaaaaaaabbbbbbbbaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbbaabbbbaaaaaaabaaabbbbaabbbbbbbbbaaaaabbbbbaabbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbbaabbbbaaabbbbaaaaaaaaaaabbbbbaaabbbbbbbbaaaabbbbbbabbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbbaabbbbaaaaaaaaaaabbbbaaaabbbbbbbaaaaabbbbbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbbbbabbbaaaabbbaaaabbbbbaaaabbbbbbaaaaabbbbbbabbbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaaabaabbbbbabbaaabbbbaaaaabbbbbaaaaabbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbaababbbabaaabbbbaaaaaabbbbbaaaaabbbbbbaaaabbbbbbbbaabaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaabbbaaaabbbbbaaaaaabbbbbaaaabbbbbbbaaaabbbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaabbbbbbbbbbbbaaaaaabbbbbaaaabbbbbbbaaaabbbbbbbbbaaaabbbbbbbaaabba + abbaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbbaaaaaaabbbbbaaaabababbbaaaabbbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaabbbbbbbbbaaaaaaaabbbbbaaaabbbabbbaaaabbbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbaaabbbaabbbbbbbbbaaaaaaaabbbbbaaaabbbbbbbaaaabbbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbabbbbbaabbbbbbbbbaaaaaaaabbbbbaaaabbbbbbbaaaabbbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbbaaaaaaaabbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaba + bbaaaabaaaaaabaaabaabbbbaaabbaabbbbbaaaaaaaabbbbbbaaabbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbbabbbbbbabbbbbbbbaaaaaaabbbbbbbbbbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaabaaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbaabbbba + abbbbbbbbbbaaaaaaaaaaaaabbbaaaaaabbbbbaaabaaaaaabbbbbbbbbbaaaaaaabbbbbbbaabbbbbbbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbbbbaaabbbbbbbbaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaaaaabbbbbbaaabbbbbaaaaaabbbbbabbaababbbbbbbaabbba + abbbbaaaaaaabbbbabbbaaaaaaaabbbbbaaaaabbaabbbbbbbbbbbbaabbbbaaaaaaaaaaaaaaaaaabbbbbbabbbba + abbbaaaaaaabbbbaabbbbbbbbaaaabbbbaaaaabbbbbbbbbabbbbbbaaaaaaaabbaaaaaaaabbaaaabbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbbaaaaaaabbbbaaaaaaaaaaaaaaaabbbbabbbbbbbaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaabbabbbbbaabbaaaaaaaaaabbbbbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbabbbaaaaaaaaaabbbbbbbbaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaababbbbbbbbbbaaaaaaaaaabbbbbaaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbbbbaaaaaaaaaaabbbbbaaaaaabbbbbbbabbaaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaabbbbbaaaaaabbaaabbbbbaaaaaaabbbbbbabbaaaaabbbaaabbbba + abaabbbaaaaaaaabbbbabbbaaaabbaabbbaaaabbbbabbbbbbbbaabbbaaabbaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaabbaaaaabbbabbbbbbbbbaaabbaabbbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbaabbbbbbbbbaaabbaaabbaaabaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbaaabbbbbbbaaabbaaabbaabbbaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaabaaaabbbbbbaaaaabbbbbaabbbbaaabaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbbbbaaaaabaaaababbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbbaaaaabbaabbabbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbbbbaaaabbbbaabbbbbbaaaaabbaaabbbaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbabbaaaabbbbaabbbbbbaaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbaaaaaabbbbaabbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbbbabaaaabbbaaabbbbbaaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbabaaabbbbaabbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbaaaaabbbbbbbbbbbaaaabbbabbbbbbbbbaaaaabaaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbabbaaaabbbaabbbbbbbbaaaaabbaabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbabbaaaabbaabbbbbbbaaaaaabbbbaabaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbbaabbbaaabbbabbbbbbbaabaaabbbbaaaaaabbaabaabbbbbbbba + abbbbaaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabbbaaabbbbbabbbbbbbbaaabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaabbbbaabbbbaabbbbaaabbaaaaaaaabbbaaaabbbbaabbbbbbbbbabbbbaabbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaaaaaaabbbbaaaabbbbaaabbbbbbbbbbbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaaabaaaabbbbaaaabbbbaaaaaabbbbbbbbbbabbbbaabbbbbbaaabbbbba + aabaaaabaaabbaaaaaaabbbabbbbaaaaaabbbbaabbbbaaaabbbbaaaaaaaaaabbbbbbabbbbaaabbbbbaaaabbbba + babaabbbaabbbbbabbaabbbabbbaaaaaabbbbbaabbbbabbaaabbaaaaaaaaaaaaabbbabbbbaaaaaaaaaaaabbbba + baaaabbbbbbbbbaabbaabbbaabbbaaaabbbbbbbabbbbaaaaabbbaaaaaaaaaaaaaabbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbabbbbabbaabaabbbaaaaaaaaaaaaaabbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbbabbbaabbaababbbaaaaaabaaaaaaaabbbbbbaabaabbbaaabbaaaba + aaaabbbbabbbbaabbbbaabaabaaaaaabbbbbbbbaaabbaabbbbbaaaaabbbbabaaaaabbbbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaaabbbbbbbaaaabbaabbbbbaaaaabbbbbbbaaaabbbbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaaabbbbbaaaaabbaabbbbaaaaabbbbbbbbaaaabbbbabbbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaaabbbbbbaaaaaabbbababbaaaabbbbbabbbaaaabbbaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaaabbbbbaaaaaaaaabbabbaaaaabbbbaabbbaaaabbbaaaaabbaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaaabbbbaaaaaaaaaabbbbbbaaaabbbbaabbaaaaaabbbaaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaabbbbaaaaaaaaaabbaaaaaaaabbbbbbbbaaaaaabbbaabbaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaaaaabbbbaaaabbbaaaaaaaaaabbbbbaaaabbbbaabbbaaaaaabbbaabbbaaaabbbbbbbbaa + baaaaaaabaaaabbbbbaabaaabbbaaaabbbaaaaaaaaaabbabbaaaaabbbaabbbaaaaaabbbbabbbbaaaabbabbbbba + baaaaaaabaaabbbbbbabbaaabbbaaaabbbaaaaabaaaabbaaaaaaaaabbaabbbaaaaaaabbbabbbbaaaaaaaabbbba + aaaaabbbbbabbbbbbaabbaaabbbaaaabbbaaaaabaaaabbbbbaaaaaaaaabbbbaaaaaaaabbbbbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaaabbaaaabbbaaaaabaaaabbaaaaaaaaaaaabbbbaaaaaaaabbbabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaaaabbbaaaabaaaaabbbbbbbbbbaaaabbbbaaaabaaaabbbbbbbbbaaaaaaabba + aabbbbbbbbaaabbbbaabbbaaabbaaaabbbaaaabaaaaabaaabbbbbbbaaabbbbaaaaaaaaabbbbbbbbbabbbbaabba + babbbbbbbbaaabbbbabbbaababbaaabbbbaaaabbaaaabbbbbbbbbbbaaaabbbaaaaaaaaaabbbbbbbbaabbbbaaba + aabbbbbbbbaaabbbbabbaaababbaaabbbbbaaaaaaaaabaaabbbbbbbbaaabbbaaaabaaaaaabbbbbbaaabbbbbbaa + aabbbbbbbaaaabbbaabbaaabbabaaabbbbbaaabaaaaabbbaabbbbbbbaaaabbaaabbaaaaaaabbbbaaaabbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaaabbbbbaaaaaaaaabbaaabbbbbbbbaaaabaaabbbbaaaaabbbbaaabbbabbbba + abaabbbaaaabaabbaabaaaaabbbaaabbbbbaaaaaaaaabbaaaabbbbbbbaaabbbbabbbbaaaaabbbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaaababbbbbaaaaaaaaabbbbaabbbbbbbaaabbbbbbbbbaaaaabbbbaaaabbbbbbba + bbaaabbaabbbbaaaaaaabbbbaaabbabbbbbaaaaaaaaabbaaaaaaabbbbaaabbbbbbbbbbaaaabbbaabaaaabbbbaa + abbaaaaaabbbbaaaaaaabbbbaaaaabaabbbaaaaaaaaabbbbaaaaaabbbaaaabbbbbbbbbaaaabbbaabbaaaabbaaa + abbbaaaaabbbbbaaaaabbbbbaaaaaaaabbbaaaaaaaaabbabaaaaaaabbaaaaabbbbbbbbaaaabbbbbbbbaaabbaba + abbbaaabbbbbbbaaaabbbbbbbbaaaaabbbbaaaaaaaaabbbbaaaaaaaaaabbbaaabbbbbbaaaabbbabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbaaaaabbbbaaaaaaaaabbbbaaaaaaaaaabbbbaabbabbaaaaabbbbbbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaaaaabbbbaaaaaaaaabbbbaaaaaaaaaabbbbaaaaaaaaaaaabbbbbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbaaaaabbbbbaaaabaaabbbbaaabaaaaaaaabaaaaaaaaaaaabbbbbbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaaaaabbbbbaaaabaaabbbaaaabaaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaabbbbbbbaaaaabaaabbbbaaabaabbbaaaaaaaaaaaaaabbbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaabbbbbbbbaaaaabaaababbaaaaabbbbaaaaaabbbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaabbbbaaabbbbbbbbaaaaaabaaabbbbaabaaabbaaaaaaabbbbbbbbbbbaaabbbbbbbaaabba + abbbaaabbbbabbaaabaabbbaaabbbbbbbaaaaaaabbaabbbbabbaaaabaaaaaaabbbbbbbbbaabaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbbbbaaaaaaaaaaabbaabababbbaaabbaaaaaaabbbbbbbbbaabaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaaabbbbaaabbaaaaaaaabaababaaabaabbbbbbbaaabbbbbbbbbabbaabbbbbbbaabbba + abbbaaabbbbbbbaabbbaaaabbbbbaabbbaaaaaaaaaaababaabbbbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbbaabbbbaaaaaaaaaaabbbaabbbbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbbaabbbbaaaaaaaaaaabbbaaabbbbbbbbbaaaabbbbbbabbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbabaabbbaaaaabbaaaabbbaaabbbbbbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbaaabbbbabbaabbaaabbbaaaaabbbaaaabbabbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbabbaabbaabbbbaaaaabbbaaabbaabbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbabbbaaabbbbbaaaaabbbbaaaaaaabbbbbaaaaabbbbbbbbbbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabbaabbabbbaabbbbbbaaaaabbbbaaaaaabbbbbaaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbaabbaabbbbbbbbbbaaaaabbbbaaaaaabbbbbbbaaaabbbbbbbbaabaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaabbbbbbbbaaaaaabbbbaaaaaabbbbbbbaaaabbbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbbaaabba + abbaaabbbbbbbbaaaabbbbbaaaaaaaabbbbbbaaaaaabbbbaaabbbbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaaababbbbbbaaaaaaabbbbaaabbbbbbbbbbaaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaabbbbbbbbbaabbbaaabbbaaabbbbbbbbaaaaaaabbbbaaabbabbbbbbbaaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaabbbbbbbbbaabbbabbbbbaabbbbbbbbbaaaaaaabbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaabbbbbbbbaaaaaaabbbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaba + bbaaaaaaaaaaabaaabaabbbbaaabbaabbbbaaaaaaabbbbbaaabbbbbbbabbaaaaabbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbbabbbbbbabbbbbbbbaaaaaaabbbbbbbbbbaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaabbbbbbaabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbaabbbba + abbbbbbbbbbaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaabbbbbbbbbbbbbaaaaaaabbbbbbbaabbbbbbbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaabbbbbbbbaabbbbbaaaaaabbbbbbbbaaabbbbbbbbaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaabbbbbbbbbbbbbbbbbaaaaaabbbbbabbaababbbbbbbaabbba + abbbbaaaaaaabbbbabbbaaaaaaaabbbbbaaaaabbbbbbbaaaaaabbbbabbbbaaaaaaaaaaaaaaaaaaabbbbaabbbba + abbbaaaaaaabbbbaabbbbbbbbaaaabbbbaaaaabbbbbaabaaaaaabbbaaaaaaabbaaaaaaaabbaaaabbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbaaaaaaaaaabbbaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaabbabbbbbaabbbaaaaaaaaaaabbbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbabbbaaaaaaaaaaaabbbbbaaaabbbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaabbbbbbbbbbbbaaaaaaaaaaabbbbaaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbbbbbabbbbbbbaaabbbbaabbaabbbbbbbabbaaaabbaaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaabbbbbabbbbbbbbbaabbbbaaaaaaabbbbbbabbaaaaabbbaaabbbba + abaabbbaaaaaaaabbbbabbbaaaabbaabbbaaaabbbaabbbbbbbbbaabbaaabbaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabaaaaabbbaababbbbbbbaabbaaabbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbaaaaabbbbbbaabbaaabbaaabaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbaaaaaabaaabaabbaaabbaabbbaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaabaaaabbbbbbbaaaaabbaababbbbaaabaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbbbbbbaaaabbbbbabbbbaaaaaabbbbaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbbabaaaabbbbbaabbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaabbbbbbbbbabaaaabbbbaaabbbbbaaaaabbaaabbbaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbbbbbabaaaabbbaaabbbbbbaaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbabaaabbbbaaabbbbbbaaaaabbabbbbbaaaabbbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaabbbbbbbbbbbaaaabbbaabbbbbbbaaaaabaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbbbaaaabbbaabbbbbbbaaaaaaaaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaabbbbbbbbbbbaaaabbaaabbbbbbbbaaaaabaaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbaabbaaabbbabbbbbbbbbaaaaabbaabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbaabbaaabbbbbbbbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbbaabbbaaaabbbbabbbbbbbbbaabbbbaaaaaabbaabaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabbbaaaabbbbaabbbbbbbbbabbbbaabbbaaaabbbaabbbbbbba + abbbbbaaaaaabbbbaabbbbaabbbbaaabbaaaaaaaabbbaaaabbbbaaaabbbbbbbbbbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaaaaaaabbbbaaaabbbbaaaaaabbbbbbbbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaaabaaaabbbaaaaaaabbaaaaaaaaaabbbbbbabbbbaabbbbbaaaaabbbba + aabaaaabaaabbaaaaaaabbbabbbbaaaaaabbbbbbbbbbbbaaabbbaaaaaaaaaaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbabbbbbabbaabbbabbbaaaaaabbbbbbbbbbbabbaabbbaaaaaaaaaaaaaabbabbbbaaaaaaaaaaaabbbba + baaaabbbbbbbbbaabbaabbbaabbbaaaabbbbbbbaabbbaaaabbbaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbbbaaabbbaabbbbbaaaaabbbaaaaaaabbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbbbbaaabbbaabbbbaaaaabbbbbbbaaaabbbbbbaabaabbbaaabbaaaba + aaaabbbbabbbbaabbbbaabaabaaaaaabbbbbaaaaabbbaabbbbaaaaabbbbbbbaaaaabbbbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaaabbbbbaaaaaabbaabaaaaaaabbbbbabbaaaaabbbbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaaaabbbaaaaaaaaababbbbaaaaabbbbaabbaaaaabbbbaabbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaaabbbbaabbbbbaaaaaaaaabbbbbbaaaabbbbbaabbaaaaabbbbaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbaaaaaaaaaaabbaaaaaaabbbbaaabbaaaaabbbbaaabbbaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbaabbbbaaaaaaaaaabbbbbbaaaabbbbaabbbaaaaaabbbaaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaabbbaaaaaaaaaaabbaaaaaaabbbbaabbbaaaaaabbbbabaaaaabbbbbbbbaaa + babbbbaaaaaaaabbbbaaaaabbbbaaaabbbaaaaaaaaabbbbbbaaaaabbaabbbbbaaaaaabbbabbbaaaabbbbbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaabbbbaaaaaaaaabbbbbaaaaaaaaaaabbbaaaaaaabbbbbbbbaaaaaaabbbbaa + baaaaaaabaaabbbbbbabbaaabbbaaabbbbaaaabaaaabbbaaaaaaaaaaaaabbbaaaaaaaabbbbbbbaaaaaaabbbbaa + aaaaabbbbbabbbbbbaabbaaabbbaaabbbbaaaabaaaaabbbbaaaaaaaaaaabbbaaabbaaaabbbbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaaabbaaabbbbaaaabaaaaabbaaabbbbbbaaaabbbaaaabaaaaabbbbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaaabbbbaaaabaaaabbbbbabbbbbbaaaabbbaaaaabaaaaabbbbbbaaaaaaaabba + aabbbbbbbbaaabbbbaabbbaaabbaaaabbbaaaabaaaabbbaaabbbbbbbaaabbbaaaabbaaaaaabbbbbbabbbbaabba + babbbbbbbbaaabbbbabbbaababbaaabbbbaaaaaaaaabbbbbabbbbbbbaaaabbaaaabaaaaaaabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbaaababbaaabbbbaaaaaaaaabbbaaaabbbbbbbaaabbaaaabbaaaaaaabbbbbaabbbbbbaa + aabbbbbbbaaaabbbaabbaaabbabaaabbbbaaaaaaaaabbbbaaabbbbbbbaaaabababbbbaaaaaabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaaabbbbaaaaaaaaabbbbbaabbbbbbbaaaabbbbbbbbbaaaaabbbaaabbbabbbba + abaabbbaaaabaabbaabaaaaabbbaaabbbbaaaaaaaaaabbaaaaabbbbbbaaaabbbbbbbbbbaaaabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaaababbbbaaaaaaaaabbbbaaaaaaabbbaaaabbbbbbbbbbaaaabbbaaaabbbbbbba + bbaaabbaabbbbaaaaaaabbbbaaaababbbbbaaaaaaaabbbaaaaaaaabbbaaaaaaabbbbbbbaaaabbbbaaaaaabbbaa + abbaaaaaabbbbaaaaaaabbbbaaaaabbabbbaaaaaaaabbbbaaaaaaaaaaaaaaaaabbbbbbbaaaabbbbbbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbaaaaaaaabbbaaaaaaaabbbaaaaaaaaaaaaabbbbabbbbbbaaaaabbbbbbbaaabbaba + abbbaaabbbbbbbaaaabbbbbbbbaaaaabbbbaaaabbaabbbbaaabbaaaaaaabbbbaaaaaaaaaaaabbbbbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbbaaaabbbbaaaabbaabbbbaaabbaaaaaaaabbaaaaaaaaaaaabbbbbbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaaaaabbbbaaaabaaabbbaaaabbaaaaaaabaaaaaaaaaaaaabbbabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbaaabbbbbaaaabaaabbbbaaabbaabaaaaaaaaaaaaaaaabbbbbabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbbbbaaaabaaabbaaaaabbbaabbaaaaaabbbbbbbbbbbbaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbaaabbbbbbbaaaaabaaaabbaaaabbbabbbaaaaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaabbbbbbaaaaaabaaaabbaababbaabbaaaaaaabbbbbbbbbbaaaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaaabbbaaabbbbbaaaaaaaabaaaabbabbaaaaaaaaaabaaabbbbbabbbaaaaabbbbbbbaaabba + abbbaaabbbbabbaaabaabbbaaabbbbababaaaaabbaaabaaababbaabbaabbaaabbbbbabbbaabaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbbbbaabbbaaaaaaaaaabaaabbbbbbbbbbbaaaabbbbbaabbaabaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaaabbbbbaabbbaaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbbaaabbaabbbbbbbaabbba + abbbaaabbbbbbbaabbbaaaabbbbbbaabbbaaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbabbbabbbaaaabaaaabbbaaabbbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbabbbaabbaabbbaaabbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaabbaabaabbbbaaabbbbaaabbbbbbbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbaaabbbbaabbaaaabbbbaaaabbbbaaabbbabababbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbaabbbbbbbbbbaaaabbbaaaaaaaaabbaaaaaaaabbbbbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaabbbbbbbbbbaaaabbbaaaaababbbbaabaaaaabbbbbbbbbbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabbaabbaababbbabbbbaaaabbbaaaaaababbbaabbaaaabbbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbaabaabbbbbabbbbaaaaabbbbaaaabbbbbbaabbaaaabbbbbbbbaabaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbbaaaaabbbbaaabbbbbbbbabbaaaabbbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbbaaaaabbbbaabbbbbbbbaabbaaaaabbbbbbbbaaaabbbbbbbaaabba + abbaaabbbbbbbbaaaabbbbbaaaaaaaabbbbbbaaaaabbbbaabbbbbbbbaaabbaaaabbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaaababbbbbbaaaaaabbbbaabbbbbbbbaaabbaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaabbbbbbbbbaabbbaaabbbaaabbbbbbbbaaaaaabbbbaaabbbbbbbaaabbaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaabbbbbbbbbaabbbabbbbbaabbbbbbbbbaaaaabbbbbaaaabbbbbbaabbbaaaabbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaabbbabbbbbaaaaabbbbbaaabbbbbbbbabbbaaaabbbbbbbbbbbbbbbbbbbbbbaba + bbaaaaaaaaaaabaaabaabbbbaaabbaabbbbabaaaabbbbbaaaabbbbbbbabbbaaaabbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbbabbbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbabbbaaaaaabbbbaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbbabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaabbbbbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbbaabbbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbaaabbbbbbbaaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaabbbaaaaaabbbbbbbbaaaaaabbbbbabbaaaaabbbbbbaabbba + abbbbaaaaaaabbbbabbbaaaaaaaabbbbbaaaaabbbbbaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaabbbbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbbbbbaaaaaaaaabbbaaaaabbbaaaaaaaaabaaabbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbbaaaaaaaaaabbaaaabaaaaaaaaaabbbbabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaaaaabbbbbaabbbaaaaaaaaaaabbbbaaabaaaaabbbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbaaaaaaaaaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbbbbbbabbbbbbbbaabbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbbbbabbbbbbbbbaabbbbbabaaabbbbbbbabbaaaabbbaaaabbbba + abaabbaaaabbaaabbbbbbbbbaaabbaabbaaaaaaabaabbbbbbbbbaabbbbaaaaaabbbbbbbbbbaaaaabbbaaabbbba + abaabbbaaaaaaaabbbbabbbaaaabbaabbbaaaaaabaababbbbbbbaabbaaabbaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabaaaaabbaaabaabbbbbbaabbaaabbaaaaaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbbaaaaabaaabaabbaaabbaaabaaaaabbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbbbaaaabbaabaabbbaabbaaabbaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaabaaaabbbbbbabaaaabbabbaabbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaabbbbbbbbbbabaaaabbbbbaabbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbbabaaaabbbbaaabbbbaaaaabbbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbaaaabbbbbbbbbabaaaaabbbaaabbbbbaaaaabbaaabbaaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbaaaabbbbbbbbabaaabbbbaaabbbbbbaaaaabbabbbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbbbaaaaabbaabbbbbbbaaaaabaaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaaabbbbbbbbbbaaaaabbaabbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbbbaaaabbaabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaabbbbbbbbbbbbaaabbbabbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbaabbaaabbbbbbbbbbbbbaaaaabbaabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbaabbaaaaabbbabbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbbaabbbaaaabbbbaabbbbbbbbbabbbbaabbaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabbbaaabbbbbaaabbbbbbbbbbbbbaabbbaaaabbbaabbbbbbba + abbbbbaaaaaabbbbaabbbbaabbbbaaabbaaaaaaaabbaaaabbbbbaaaaabbbbbbbbbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaaaaaabbbbaaaaaaabbaaaaaaaaabbbbbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaabbbabbbbbaaaaaabbbaaaaaaaaaaaaabbbabbbbaabbbbbaaaaabbbba + aabbaaabaaabbaaaaaaabbbabbbbaaaaabbbbbbbabbbbbaabbbbaaaaaaaaaaaaabbbabbbbaaabbbbbaaaabbbba + babaabbbbabbbbbabbaabbbabbbbaaaabbbbbbbaabbbabbabbbaaaaaaaaaaaaaaabbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbbaaaabbbaaabbbaaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbaaaaabbbaabbbbaaaaabbbbbbaaaaabbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaabbbbaabbaaaaaaaabbbbaaaaaabbbaabbbbaaaaabbbbbbbaaaabbbbbbaabaabbbaabbbaaaba + aaaabbbbabbbbaabbbbaaaaabaaaaaabbbaaaaaaababaabaaaaaaabbbbaabbaaaaabbbbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbaaaaabbbaaaabbbaaaaaaaaaabaabbbaaaaabbbbaabbaaaaabbbbaabbbaabbbbbbbbbaaa + aaaabbbbabbbbaaaaaaaaaabbbbaabbbbaaaaaaaaabbabbbbaaaabbbbbaabbaaaaabbbbaabbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaabbbbaaaaaaaaaabbbaaaaaabbbbbbaabbaaaaabbbbaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbaabbbbaaaaaaaaabbbbbbbaaabbbbbaabbbaaaaaabbbaaaabaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaaabbbbaabbbbaaaaaaaaaaabbaaaaaabbbbaaabbbaaaaaabbbbaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaabbbaaaaaaaaaabbbbbaaaabbbbaaabbbaaaaaaabbbabaaaaabbbbbbbbaaa + babbbbaaaaaaabbbbbaabaabbbbaaabbbaaaaabaaaabbbbbaaaaaabaaabbbbaaaaaaabbbbbbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaaabbbaaaaaaaaaaabbaaaaaaaaaaaaabbbaaaaaaaabbbbbbbaaaaaaabbbbaa + baaaaaaabaaabbbbbbabbaaabbbaaabbbaaaaabaaabbbbbbaaaaaaaaaaabbbaaabbaaaabbbbbbaaaaaaaabbbaa + aaaaabbbbbaabbbbbaabbaaabbbaabbbbaaaaabaaaaabbaaaaaaaaaaaaabbbaaaabbaaaabbbbbbaaaaaaabbbba + aaaabbbbbbaabbbbbaabbaaaabbaabbbbaaaaabaaaabbbbbabbbbbbaaaabbbaaaabbaaaaabbbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaabbbbaaaaabaaaabbaaaabbbbbbbaaabbbaaaabaaaaaaabbbbbbaaaaaaabba + babbbbbbbbaaabbbbaabbbaaabbaabbbbaaaaabaaabbbbbaabbbbbbbbaaabaaaaabaaaaaaaabbbbbabbbbaabba + aabbbbbbbbaaabbbbabbbaababbaaabbbaaaaabaaabbbbbaaabbbbbbbaaabaaaaabaaaaaaaabbbbbabbbbbaaba + aabbbbbbbbaaabbbaabbaaababbaabbbbaaaaabaaababbbaaabbbbbbbbaaaaababbbbaaaaaabbbbaaabbbbbbaa + aabbbbbbbbaaabbbaabbaaabbabaabbbbaaaaabaaabbbbbaaabbbbbbbbaaaabbbbbbbaaaaaabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaaabbbbaaaabaaaaabaaaaaabbbbbbbaaabbbbbbbbbaaaaabbbaaabbbabbbba + abaabbbaaaabaaabaabaaaaabbbaaabbbbaaaaaaaabbbbbaaaaabbbbbbaaaabbbbbbbbbaaaabbbbaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaaababbbbaaaaaaaaabbaaaaaaaaaabbbaaaaaabbbbbbbaaaabbbaaaabbbbbbba + bbaabbbaaabbbaaaaaaabbbbaaaababbbbaaaabbaabbbbbaaaaaaaaabbaaaaaabbbbbbbaaaabbbbbaaaaabbbaa + abbaaaaaabbbbaaaaaaabbbbaaaaabbbbbaaaabbaabbbaaaaaaaaaaaaaaabbbaaababaaaaaabbbbbbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbaaaaaaabbbbaaabbaababbaaaabbaaaaaaaabbbaaaaaaaaaaaabbbbbbbaaabbaba + abbbaaabbbbbbbaaaabbbbbbbbaaaabbbbaaaabaaabbbbaaaabbaaaaaaaabbbaaaaaaaaaaabbbbbbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbbaaabbbbaaaabaaabbbaaaabbbbaaaaaaaaaaaaaaaaaaaabbbabbbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaaaabbbbbaaabaaabbbbaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbaaabbbbbaaabaaabbbaaaabbbbabbbaaaaaabbbbbbbbbbbbaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbbbbaaabaaabbbbaaabbbbabbbaaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbaaabbbbbbaaaaabaaababaaaabbbaabbaaaaaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaabbbbbaabbaaaaaaabbaaaabbbaaaaaaaaaaabbbbbbbbbbaaaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaaabbbaaaabbbbaabbbaaaaaaaabaaaaabbaabbaabbaaabbbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbabbaaabaabbbaaaabbbbaabbbaaaaaaabbaaaabbbbabbbbbaaaabbbbbabbbaabaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbabbbbaabbbaaaaaaabbaaaabbbbbbbbbbaaaabbbbbbabbaabaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaaabbabbbbbabbaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbaaaabbaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaabbbbabbbbbaabaabbaabbbbaaabbbbbbbbbbbaaaabbbbbbbababbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbaabbbbaaaabbaaabbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbaabbbbaaabbbaaabbbbaaaabbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaabbbbbbbbbbaaabbbbaaabbbbabababbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbaaabbbbaabbbbbbbbbbaaabbbbaaaaabbbbbbaabbaaaabbbbbabbbbbaabbbbbbbaaabbb + abbbaabbbbabbbaabbaaaaabbbaaaabbbbabbbaaabbbbaaaaabaabbbaabbaaaabbbbbaabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbaabbaaaabbbbaaaabbaabbbaabbaaaabbbbbbbbbbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabbaabbaaaabbaabbbaaaabbbbaaaabbbbbbbaabbaaaaabbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbbabaaababaabbbbaaaabbbbaaaabbbbbbbaaabbaaaabbbbbbbbabaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbbaaaabbbbaaaabbbbbbbbaabbaaaabbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaabbbbbaaaaaaaaaabbbbaaaabbbbaaaabbbbbbbbaabbaaaabbbbbbbbaaaabbbbbbbaaabba + abbaaabbbbbbbbaaaabbbbbaaaaaaaabbbbbaaaaabbbbaaabbbbbbbbaaabbaaaabbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaaaaabbbbbbbaaaabbbbaaabbbbabbbaaabbaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaabbbbbbbbbaabbbaaabbbaaaabbbbbbbbaaaabbbbaaaabbbbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbaaba + abbaabbbbbbbbbaabbbbbbbbbaaaabbbbbbbaaaaabbbbbaaabbbbbbbbaabbaaaabbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaaabbbbbbbbaaaaabbbbbaaabbbbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbaba + bbaaaaaaaaaaabaaabaaaaaaaababbbbbbbbaaaaabbbbbaaabbbbbbbbaabbaaaabbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbaaabbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbabbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbaabbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbbabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbbbaabbbaabbbbbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbaaabbbbbbbaaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaabbbbaaaaabbbbbbbbbaaaaabbbbbabbaaababbbbbbaabbba + abbbbaaaaaabbbbbabbbaaaaaaaabbbbbaaaaabbbbbaaaaaaaaabbbbbbbaaaabaaaaaaaaaaaaabbbbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbbbbbaaaaaaaaabbbaaaaaaabaaaaaaaaabaaabbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbbaaaaaaaaaabbaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaaaaabbbbbaabbbaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbaaaaaaaaaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbbbbbbabbbbbbbbaabbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbbbbabbbbbbbbbaabbbbbaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaaabbaaabbbbbbbbbaaabbaabbaaaaaabbaabbbbbbbbbaabbbbaabbaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaaaaaaabbbbabbbaaaabbaabbbaaaaaaaaababbbbbbbaabbaaabbaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabaaaaabbaaabaabbbbbbaabbaaabbaaabaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbbaaaaabaaabaabbaaabbaaabaaaaabbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbbbaaaabbaabaabbbaabbaaabbaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbbabaaaabbabbabbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaaabbbbbbbbbabaaaabbbbbaabbbaaaaaabbbaaaaaaabbbbbaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbabbbbabaaaabbbbbaabbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbbabaaaaabbbaaabbbbbaaaaabbaaabbaaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbaaaabbbbbbbbabaaaabbbbaabbbbbbaaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbbbaaaaabbaabbbbbbbaaaaabaaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaaabbbbbbbbbbaaaaabbabbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbbbaaaabbbabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbbbbaaabbbabbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbaabbaaabbbbbbbbbbbbbaaaaabbaabbaaabbbaaaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbaabbaaaaabbbabbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbbaaabbaaaabbbbaabbbbbbbbbabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabbbaaabbbbbaaabbbbbbbbbbbbbaabbbaaaabbbaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbaaaaaaaabbaaaabbbbbaaaaabbbbbbbbbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaaaaaabbbbaaaaaaabbaaaaaaaaabbbbbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaabbbabbbbbaaaaaabbbaaaaaaaaaaaaabbbabbbbaabbbbbaaaaabbbba + aabbaaabaaabbbaaaaaabbbabbbbaaaaabbbbbbbabbbbbaabbbbaaaaaaaaaaaaabbbabbbbaabbbbbbaaaabbbba + babaabbbbabbbbbabbaabbbabbbbaaaabbbbbbbaabbbabbabbbaaaaaaaaaaaaaaabbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbbaaaabbbbbaaaabbbaaabbbaaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbaaaaabbbaabbbbaaaaabbbbbbbaaaabbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaaaaaabbbbaaaaaabbbaabbbbaaaaabbbbbbbaaaabbbbbbaabaabbbbabbbaaaba + aaaabbbbabbbbaabbbbaabaabaaaaaabbbaaaaaaababaabaaaaaaabbbbaabbaaaaabbbbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaaabbbaaaaaaaaaabaabbbaaaabbbbbaabbaaaaabbbbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbaaabbbaaaaaaaaabbabbbbaaaabbbbbaabbaaaaabbbbaabbbaaabbbbbbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaabbbbaaaaaaaaaabbbaaaaaabbbbbaaabbaaaaabbbbaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbaaabbbbbaabbbbaaaaaaaaabbbbbbbaaabbbbababbbaaaaabbbbaaaabbaabbbabbbbaba + baabbbbbbbbbaaabbbbaaaabbbbaabbbbaaaaaaaaaaabbaaaaaabbbbaaabbbaaaaaabbbbaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaaabbbaaaaaaaaaabbbbbaaaabbbbaaabbbaaaaaaabbbabaaaaabbbbbbbbaaa + babbbbaaaaaaaabbbbaabaabbbbaaabbbaaaaabaaaabbbbbaaaaabaaabbbbbaaaaaaabbbbbbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbabbaaabbbaaabbbaaaaaaaaaaabbaaaaaaaaaaaabbbbaaaaaaaabbbbbbbaaaaaaabbbbaa + baaaaaaabaaabbbbbbabbaaabbbaaabbbaaaaabaaabbbbbbaaaaaaaaaaabbbaaabbaaaabbbbbbaaaaaaaabbbaa + aaaaabbbbbaabbbbbaabbaaabbbaabbbbaaaaabaaaaabbaaaaaaaaaaaaabbbaaaabbaaaabbbbbbaaaaaaaabbba + aaaabbbbbbaabbbbbaabbaaaabbaabbbbaaaaabaaaabbbbbabbbbbbaaaabbaaaaaaaaaaaabbbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaabbbbaaaaabaaaabbaaaabbbbbbbaaabbaaaaaaaaaaaaabbbbbbaaaaaaabba + babbbbbbbbaaabbbbaabbbaaabbaabbbbaaaaabaaaabbbbaabbbbbbbbaabbaaaaaaaaaaaaaabbbbbabbbbaabba + aabbbbbbbbaaabbbbabbbaababbaaabbbaaaaabaaabbbbbaaabbbbbbbaaabaaaaabbaaaaaaabbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbaaababbaabbbbaaaaabaaababbbaaabbbbbbbbaaaaabababbaaaaaabbbbaaabbbbbbaa + aabbbbbbbbaaabbbaabbaaabbabaabbbbaaaaabaaabbbbbaaabbbbbbbbaaaabbbbbbbbaaaaabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabaaabbbbaaaabaaaaabaaaaaabbbbbbbaaabbbbbbbbbbaaaabbbaaabbaaabbba + abaabbbaaaabaaabaabaaaaabbbaaabbbbaaaaaaaabbbbbaaaaabbbbbbaaaabbbbbbbbbaaaabbbbaabbabbbbba + abaabbbaaabbbaabaaaaabbaaaaababbbbaaaaaaaaabbaaaaaaaaaabbbaaaaaabbbbbbbaaaabbbaaaabbbbbbba + bbaabbbaaabbbaaaaaaabbbbaaaababbbbaaaabbaabbbbbaaaaaaaaabbaaaaaaabbbbbbaaaabbbbbaaaaabbbaa + abbaaaaaabbbbaaaaaaabbbbaaaaabbbbbaaaabbaabbbaaaaaaaaaaaaaaabbbaaababaaaaaabbbbbbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbaaaaaaabbbbaaabbaababbaaaaabaaaaaaaabbbaaaaaaaaaaaabbbbbbbaaabbaba + abbbaaabbbbbbbaaaabbbbbbbbaaaabbbbaaaabaaabbbbaaaabbbaaaaaaabbbaaaaaaaaaaabbbbbbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbbaaabbbbaaaabaaabbbaaaaabbbbaaaaaaaaaaaaaaaaaaabbbbabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaaaabbbbbaaabaaabbbbaaabbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbaaabbbbbaaabaaabbbaaaaabbbbbbaaaaaaabbbbbbbbbbbbaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbbbaaaabaaabbbbaaaabbaabbbaaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaabbbbbaaaaabaaababaaaabbaaabbaaaaaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaabbbbbaabbaaaaaaabbaaaabbaaaaaaaaaaaabbbbbbbbbbaaaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaaabbbaaaabbbbaabbbaaaaaaaabaaaabbbaabbaabbaaabbbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbaabbbaaaaaaabbaaaabbbaabbbbbaaaabbbbbabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbabbbbaabbbaaaaaaabbaaaabbbbbbbbbbaaaabbbbbbbbbaabaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaaabbabbbbbabbaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbabaabbaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaabbbbabbbbbaabaabbaabbbbaaabbbbbbbbbbbaaaabbbbbbbababbaabbbbbbbaaabba + bbbaaaabbbbbbbaaabbbaabbbbaabbbbaaaabbaaabbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbaabbbbaaabbbaaabbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaabbbbbbbbbbaaabbbbaaabbbbbbbbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbaaabbbbaabbbbbbbbbbaaabbbbaaabbbbaabbaabbaaaabbbbbabbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaaabbbaaaabbbbabbbaaabbbbaaaabbbaabbaabbaaaabbbbbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbaabbaaaabbbbaaabbbbabbbaabbaaaabbbbbbbbbbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabbaabbaaaabbaabbbaaaabbbbaaaabbbaabbaabbaaaaabbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbbabaaababbabbbbaaaabbbbaaaabbaabbbaaabbaaaabbbbbbbbabaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaabaaaabbbbaaaabbbbaaabbbbbbbbbaabbaaaabbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaabbbbbaaaaaaaaaabbbbaaaabbbbaaabbbbbbbbbaabbaaaabbbbbbbbaaaabbbbbbbaaabba + abbaaabbbbbbbbaaaabbbbbaaaaaaaaabbbbaaaaabbbbaaabbbbbbbbbaabbaaaabbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaaaaaabbbbbbaaaabbbbaaabbbbbbbbbaabbaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbaaabbbaaaaabbbbbbbaaaabbbbaaaabbbbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbbbbaaaabbbbbbbaaaaabbbbbaaabbbbbbbaaabbaaaabbbbbbbbbbbabbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbaaabbbbbbbbaaaaabbbbbaaabbbbbabbaabbaaaabbbbbbbbbbbbbbbbbbbbbbaba + bbaaaaaaaaaaaaaaabaaaaaaaaaabbbbbbbbaaaaabbbbbaaabbbbbabaaabbaaaabbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbaaabbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbabbaaaaaabbbaaabbbbbbbbbbbbbaabbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbabbbbbabbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaabbbbbbbbbbbbbaaaaaaabbbbbbbaaabbbabbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbaaabbbbbbbaaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaabbbbaaaaabbbbbbbbbaaaaabbbbbabbaaababbbbbaaabbba + abbbbaaaaaabbbbbabbbaaaaaaaabbbbbaaaaabbbbbbaaaaaaaaabbbbbbaaaabaaaaaaaaaaaaabbbbbbaabbbba + abbbbaaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbbbbbaaaaaaaaaabbaaaaaaabaaaaaaaaabaaabbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbbaaaaaaaaaabbbaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaaaaabbbbbaabbbbaaaaaaaaaabbbbbaaaaaaaaabbbbbbbabbbbaaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbbabbbabbbbbbbbaaabbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbabbaabbbbbbbbaaabbbbaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaaabbaaabbbbbbbbbaaabbaabbaaaaaaabbabbbbbbbbbbaabbbaaabaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabaaaabbbbabbbaaaabbaabbbaaaaaabbababbbbbbbbaabbaabaaaaaaababbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabaaaaabbababaaabbbbbbaabaaabbaaabaaaabbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbababaaabaaabbabbaaabbaaabaaaaabbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbbbbaaabbaaababbbaabbaaabbaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbbabaaaabbaabaabbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaaabbbbbbbbbabaaaabbbbbaabbbaaaaaabbbaaaaaaabbbbbaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbaabbbabaaaaabbbbaabbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbbabaaaaabbbaaabbbbbaaaaabbaaabbaaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbaaaabbbbabbbbbbaaabbbbaabbbbbbaaaaabbaabbbbaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbbbaaaaabbaaabbbbbbaaaaabaaabbbbaaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaaabbbbbbbbbbaaaaabbabbbbbbbaaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbbbaaaabbaabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbbbbaaabbaabbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbaabbaaabbbbbbbbbbbbbaaaaabbbabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbaabbaaaaabbbabbbbbaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbaabbbbaaabbaaaabbbbaabbbbbbbbaabbbbaaaaaabaabbaaabbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabbbaaabbbbaaabbbbbbbbbabbbbaabbbaaaabbbaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbaaaaaaabbbaaaabbbbaaaabbbbbbbbbbbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaaaaabbbbbaaaaaabbaaaaaaaaaabbbbbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaabbbbbbbbbaaaaaabbaaaaaaaaaaaabbbbbabbbbaabbbbbaaaaabbbba + aabbaaabaaabbbaaaaaabbbabbbbaaaaabbbbbbabbbabbaabbbaaaaaaaaaaaaaabbbabbbbaaabbabaaaaabbbba + babaabbbbabbbbbabbaabbbabbbbaaaabbbbbaaaabbaababbbbaaaaaaaaaaaaaabbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbbaaabbbbbaaaabbbaaabbbbaaaaaaaaaaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaabbbbbaaaaabbbaaabbbbaaaaabbbbbbaaaaabbbbbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaaaaabbbbaaaaaabbbaabbbbbaaaaabbbbbbbaaaabbbbbbaabaabbbbabbbaaaba + aaaabbbbabbbbaabbbbaabaabaaaaabbbaaaaaaaaabaabbaaaaaaabbbbaabbaaaabbbbbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaabbbaaaaaaaaaabaabbbbaaaabbbbbaabbaaaaabbbbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbaabbbaaaaaaaaaabbabbbbaaaabbbbbabbbaaaaabbbaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbaabbbaaaaaaaaaabbbbaaaaaabbbbbaaabbaaaaabbbaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbaaabbbbbaabbbaaaaaaaaaabbabbbaaaabbbbaaabbbaaaaabbbaaaaabbaabbbabbbbaba + baabbbbbbbbbaaabbbbaaaabbbbaabbbaaaaaaaaaabbbbaaaaabbbbaaabbbbaaaaaabbbaaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbaabbbaaaaaaaaaaabbbbbaaabbbbaaabbbbaaaaaabbbbabaaaaabbbbbbbbaaa + babbbbaaaaaaaabbbbaabaabbbbaabbbaaaaaaaaaabbbbbbaaaabbaaabbbbbaaaaaabbbbbbbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbaabbbbaaaaaaaaaabbaaaaaaaaaaaaabbbaaaaaaaabbbbbbbaaaaaaaabbbbaa + baaaaaaabaaabbbbbbaabaaabbbaabbbaaaaaaaaabbbbbbbaaaaaaaaaaabbaaaabaaaaabbbbbbaaaaaaaabbbaa + aaaaabbbbaaabbbbbaabbaaabbbabbbbaaaaaaaaabbbbaaaaaaaaaaaaaabbaaaabbaaaabbbbbbbaaaaaaaabbba + aaaabbbbbbaabbbbbaabbaaaabbaabbbaaaaaaaaaabbbbbaaabbbbbbaaabbaaaaaaaaaaaabbbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbaabbbaaaaabaaaabbbaaaaabbbbbbaaabbaaaaaaaaaaaaabbbbbbaaaaaaabba + babbbbbbbbaabbbbbaabbbaaabbabbbbbaaaabaaaaaabbbaaabbbbbbbaaabaaaababaaaaaabbbbbbabbbbaabba + aabbbbbbbbaaabbbbabbbaababbabbbbbaaaabaaabbbbbabaabbbbbbbbaaaaaaaaabaaaaaabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbaaababbaabbbbaaaaaaaaaaabaaaaaabbbbbbbaaaaabaaabbaaaaaabbbbaaabbbbbbaa + aabbbbbbbbaaabbbaabbaaabbabaabbbbaaaaaaaabbbbbbaaaabbbbbbbbaaabbbbabbbaaaaabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbababbbbbaaaaaaaabaabaaaaaabbbbbbbbaaabbbbbbbbbaaaabbbaaabbaaabbba + abaabbbaaaabaaabaabaaaaabbbaabbbbaaaabbaaabbbbaaaaaabbbbbbbaaaabbbbbbbbaaaabbbaaabbabbbbba + abaabbbaaabbbaabaaaaabbaaaaabbbbbaaaabbaabbbbaaaaaaaaaabbbbaaaaabbbbbbbaaaabbbaaaabbbbbbba + bbaabbbaabbbbaaaaaaabbbbaaabbbbbbaaaabbaaabbbbaaaaaaaaaabbbaaaaaabbbbbaaaaabbbaaaaaaabbaaa + abbaaaaaabbbbaaaaaaabbbbaaaabbbbbaaaabaaaabbbaaaaaaaaaaaaaaaabaaaaabbaaaaaabbabbbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbaaaabbbbbaaaabaaaaabbbaaabbaaaaaaaaaabbbaaaaaaaaaaabbbbbbaaaabbaba + abbbaaabbbbbbbbaaabbbbbbbbaaabbbbaababaaabbbbbaaaabbbaaaaaaaabbbaaaaaaaaaabbbbbbbbaaaababb + aaaaaaabbbabbbbaaabbbbbbbbbabbbbbaabbbaaababbaaaaabbbbaaaaaaaaaaaaaaaaaaabbbaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaabbbbbabbbaaaabbbbaaaabbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbabbbbabbbbaaaabbbbaaaabbbaaaaabaaaabbbbbbbbbbbbbaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbbbabbaaaaaabbbaaabbbaabbaaaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaaabbbbbaabbaaaabbbbaaaabbaaabbaaaaaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaaabbbbbaabbaaaaaabbaaababaaaaaaaaaaaabbbbbbbbbbaaaabbbbbbbaaabbb + abbbaaabbbbabbaaaaaabbbaaaabbbbbbaabbbaaaabbbaaaaabbaaaaaaabaaabbbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbbaabbbaaaabbbaaaabbbbbbbbbbaaaabbbbbabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbaaabbbbaaabaaaaabbbaaaabbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaaabbaabbbbbaabbbaaaabbbaaabbbbbbbbbbbaaaabbbbbbabaabbaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaaabbbaaabbbbaaabbaaabbbbaaabbbbabbbbbbaaaabbbbbbbababbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbaaaabbbbabbbaaabbbbaaabbbbabbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbbbaaabbbbaaabbabbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbbbaaabbbbaaabbababbbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbbaabbbbaaaabbbbbbbbaaabbbbaaabbaaaaabbabbaaaabbbbbaabbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbaaaabbbaabbbaaabbbbaaabbaaabbbaabbaaaabbbbbbaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbaabbaaaabbbbaaabbaaabbbaabbaaaaabbbbbbabbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaaabaabbaaaabbaabbbaaaabbbbaaaaaaaabbbaabbbaaaabbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbaaaaaababbabbbbaaaabbbbaaaabaaaabbbaabbaaaabbbbbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbbaaaabbbbaaaabbaaabbbaabbaaaabbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbbaaaabbbbaaabbbbaabbbaabbaaaabbbbbbbbaaaabbbbbbbababba + abbaaabbbbbbbbaaaabbbbbaaaaaaaaabbbbaaaaabbbbaaabbbbbbbbaaabbaaaabbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaaaaaabbbbbbaaaabbbbaaabbbbbbbbaaabbaaaabbbbbbbbbaabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbaaabbbaaaaabbbbbbbaaaabbbbbaaabbbbbbbaaabbaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbbbaaaaabbbbbbbaaaaabbbbbaaaaabbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbababbbbbbbbaaaaabbbbbaaaaabbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbaba + bbaaaabaaaaaaaaaabaaaaaaaababbbbbbbbaaaaabbbbbaaaaabbbbbaaabbaaaabbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbaaabbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaabbbba + bbbbbbbbbbbaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaabaaaaaaabbbaaabbbbbbbbbbbbbabbbbba + abbbbbbbbbbaaabaabbbbbbbbbbaaaaaaabbbbbbbbbbbbabbbbbbbbbbbbaaaaaabbbbbbbabbbbbabbbbaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaabbbbbbbbbbbbbaaaaaaabbbbbbbaaabbbabbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbaaabbbbbbbaaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaabbbbbbaaabbbbbbbbbaaaaabbbbbabbaaababbbbbaaabbba + abbbbabaaaabbbbbabbbaaaaaaaabbbbbaaaaabbbbbbaaaaaaaabbbbbbbaaaabaaaaaaaaaaaaabbbbbbaabbbba + abbbaaaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbbbbbaaaaaaaaabbbaaaaaaabaaaaaaaaabaaabbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbbaaaaaaaaaabbbaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbbaaabbbbbaaaabbbabbbbbbbaaaaabbbbbaabbbbaaaaaaaaaabbbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbbaabbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbbaaaaaaaaaaabbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbbabbbaaabbbbbaaaabbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbabbaabbbbbbbbaaabbbbaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbbbbbbaaabbaabbaaaaaaabbaabbbbbbbbbaabbbaaabaaabbbbbbabbaaaaabbbaaabbbba + abaabbbaaabbaaabbbbabbbaaaabbaabbbaaaaaabbabbabbbbbbbaabbaabaaaaaaababbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabaaaaabbababaabbbbbbbaabaaabbaaabaaabbbbbbbbbaabbbbbaabbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbababaaabbabbbabbaaabbaaabaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbbbbaaabbaaababbbaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbbabaaaabbaaaaabbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaaabbbbbbbbbabaaaabbbbbaabbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbbabaaaaabbbbaabbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbbabaaaaaabbaaabbbbbaaaaabbaaabbaaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbaabbaaaabbbbabbbabaaaabbbbaabbbbbbaaaaabbaabbbaaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbbbaaaabbbaaabbbbbbaaaaabaaabbbbbaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaaabbbbbbbbbbaaaaabaabbbbbbbaaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbbbaaaabbbabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbbbbaaabbaabbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbaabaaaabbaabbbbbbbbbaaaaabbbabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbaabaaaaaabbbbbbbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbaabbbbaabbaaaaabbbabbbbbbabbaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbaabbaaabbbbbaabbbbbbbbbaabbbbaabbbaaaabbbaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbaaaaaaabbaaaabbbbbaaabbbbbbbbbbbbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaabbaabbbaaaaabbbbaaaaaabbbbbbbbbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaabbbbbbbbaaaaaaabbaaaaaaaaabbbbbbbbabbbbaabbbbbaaaaabbbba + aabbaaabaaabbbaaaaaabbbabbbbaaababbbbbaabbbbbaaabbbaaaaaaaaaaaabbbbbabbbbaaabbabaaaaabbbba + babaabbbbabbbbbabbaabbbabbbbaaabbbbbbaaabbbabbabbbbaaaaaaaaaaaaabbbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbbaabbbbbbaaaabbaaaabbbbaaaaaaaaaaaaaaabbbabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbaabbbbaaaaabbbaaabbbbaaaaaabbaaaaaaaabbbabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaaaabbbbaaaaaaabbbaabbbbaaaaabbbbaabaaaabbbabbbaabaabbbbabbbaaaba + aaaabbbbabbbbaabbbbaabaabaaaabbbaaaaaaaaabbaaaabbaaaaabbbbabbaaaabbbbbbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaaabbbaaaaaaaaaabaabbbaaaaaabbbaabbaaaaabbbbbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbabbbbaaaaaaaaabbabbaaaaaabbbbbaabbbaaaabbbbbaabbbaaabbbabbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbabbbbaaaaaaaaabbbbbbbaaaabbbbbaabbaaaaabbbbaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbbaaabbbbbabbbbaaaaaaaaabbbbbbaaaaabbbbaaabbaaaaabbbbaaaaabaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaaabbbbabbbbaaaaaaaaaaabbaabaaabbbbabaabbaaaaabbbbaaaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbabbbbaaaaaaaaabbbbbbbaaabbbbaaaabbaaaaaabbbbaabbaaaabbbbbbbbaaa + babbbbaaaaaaaabbbbaabaabbbbabbbbaaaaaaaaabbbbaaaaaabbbaabbbbbaaaaaabbbbaabbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbabbbbaaaabaaaaaabbbbaaaaabbaaaabbbaaaaaaabbbbabbbaaaabaaabbbbaa + baaaaaaabaaabbbbbbaabaaabbbabbbaaaaaaaaaabbbbaaaaaaaaaaaaabbbaaaaaaabbbbabbbbaaaaaaaabbbaa + aaaaabbbbaaabbbbbaabbaaabbbabbbaaaaaaaaaaaabbbbaaaaaaaaaaaabbaaabaaaabbbbbbbbbaaaaaaaabbba + aaaabbbbbbaabbbbbaabbaaaabbabbbaaaaabaaaabbbbbbaaaaaaaaaaaabbaaaabaaaabbbbbbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbabbbaaaaabaaaaaabaaaaaabbbbbbaaabaaaaaaaaaaabbbbbbbbbaaaaaaabba + babbbbbbbbaabbbbbaabbbaaabbabbbaaaaabaaaabbbbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbbbabbbbaabba + aabbbbbbbbaaabbbbabbbaababbabbbbaaaabaaaaaabaaaaaaabbbbbbbaaaaaaaaaaaaaaabbbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbaaababbabbbbaaaabbaaabbbbbbaaaabbbbbbbaaaaaaaaaaaaaaaabbbbbaabbbbbbbaa + aabbbbbbbbaaabbbaabbaaabbababbbbaaaabbaaabbbaaaaaaabbbbbbbbaaaabbabbaaaaaabbbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabbbbbbaaaabbaaabbbbbbaaaaabbbbbbbaaabbbbbbbaaaaabbbbaaabbaabbbba + abaabbbaaaabaaabaabaaaaabbbbbbbbaaaabbaaabbbaaaaaaaabbbbbbbaaabbbbbbbbaaaabbbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaaabbbbbaaaabbaaaabbbbaaaaaabbbbbbbaaaabbbbbbbaaaabbbbaaaabbbbbbba + bbaabbbaabbbbaaaaaaabbbbaaabbbbbaaaaaaaaabbbbbaaaaaaaaaabbbaaaaabbbbbbaaaabbbaaaaaaaabbaaa + abbaaaaaabbbbaaaaaaabbbbaaabbbbbaaaaaaaaaaabbbaaaaaaaaaabbbaaaaaaabbbbaaaabbbaabbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbaaabbbbbaaaaaaaaabbbbbaaaaaaaaaaaaaaaabaaabbaaaaaabbbabbbaaaabbabb + abbbaaabbbbbbbbaaabbbbbbbbaabbbbaaaabbbbaaabaaaaaabbaaaaaaaaabbbaaaaaaaaaabbbabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbbabbbbaaabbbbaaabbbbaaaabbbaaaaaaaabbbaaaaaaaaabbbaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabaabbbbaabbbbbaabbbaaaaaabbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbabbbbaabbbbbaaabbbaaaabbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaabbbbaabbbbbaabbbbaaaabbbbaaabaaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaabbbbbaabbbbbaababaaaaabbaaabbaaaaaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaabbbbbaaabbbbaaabbbaaaabaaaabbaaaaaaabbbbbbbbbbbaaabbbbbbbaabbbb + abbbaaabbbbabbaaaaaabbbaaaabbbbbbaabbbbaabbbaaaaabaaaaaaaabaaaabbbbbabbbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbbaaabbbaaabbbaaaabbbbaaaabbbaaabbbbbabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbaaabbbbbaaabaaaabbaaaaabbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaabbbaababbbbaaabaaaabbaaaaaaabbbbbbbbaaaabbbbbbaaaabbaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaaabbbaaaabbbbbbbbaaaaabaaaaaaabbbbbbbbaaaabbbbbbaaaabbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbaaaabbbbbbbbaabbbbaaaaaaabbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbbbaabbbbaaaabaaabbbbbbbaaaaabbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbbbaabbbbaaaabbabbbbbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbbaabbbbaaaabbbbabbbaabbbbaaaabbaaaaaabbbbaaaabbbbbaabbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbaaaabbbabbbaaabbbbaaaaabbaabaaabbbaaaabbbbbbaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbaabbaaabbbbaaaaabaaabbaaabbaaaabbbbbbbabbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaaabaabbaaaabbaabbbaaabbbbaaaaabaaabbbaabbaaaabbbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbaaaaaababbabbbbaaabbbbbaaaaabaabbbaabbaaaaabbbbbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbbaaabbbbbaaaabbaaabbaaabbaaaabbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbaaaabbbbbaaaaabbabbbbaabbaaaabbbbbbbbaaaabbbbbbbababba + abbaaabbbbbbbbaaaabbbbbaaaaaaaabbbbbaaaabbbbbbaaaabaaaabbbabbaaaabbbbbbbbbaaabbbbbbbbbaaba + abbaaabbbbbbbbaaabbbbbbbbaaaaaabbbbbaaaabbbbbbaaaaaaaabbbbbbbaaaabbbbbbbbbaabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbaaabbbaaaaabbbbbbaaaabbbbbbaaaaaaaabbbaabbaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbbbaaaaabbbbbbbaaaabbbabbaaaaabbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbababbbbbbbbaaaabbbabbaaaaabbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbaba + bbaaaabaaaaaaaaaabaaaaaaaababbbbbbbaaaaabbbabbaaaaabbbbbbaabbaaaabbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbaaabbbbaabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbaaaabbbbbbaabbaaaaaabbbaaabbbbbbbbbbbbaabbbbba + abbbbbbbbbaaaabaaabbbbbbbbbaaaaaaabbbbbbbbbbbbabbbbbbbbbbbbaaaaaabbbbbbbabbbbbabbbaaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaabbbbbbbbbbbbbaaaaaaabbbbbbbaaabbbabbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbaaabbbbbbbaaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbabbaaabbbbbbbaaabbba + abbbbbbbaaabbbbbabbbaaaaaaaabbbbbaaaaabbaabbbbaaaaabbbbbbbbbaaabaaaaaaaaaaaaabbbbbbaabbbba + abbbaaaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbbbbbaaaaaaaabbbaaaaaaaabaaaaaaaaabaaabbbbbbaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbbbaaaaaaaabbbaaaaaaaaaaaaaaabbbbabbbbbbaaabbbba + abbbaaaabbbbbaaaabbbabbbbbbbaaaaabbbbbaabbbbaaaaaaaaaabbbbaaaaaaaaabbbbbbbbabbbbbaaaabbbba + abbbaabbbbbbbaaaabbbbbbbbbbbaaaaabbbbbaabbbbaaaaaaaaaabbbbbaaaaabbbbbbbbbbbabbbbaaaaabbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbbabbbbaaaaaaaaaabbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbabbaabbbbbbbbaabbbbbaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbbbbbaaaabbaabbaaaaaaabbabbbbbbbbbaabbbbaaabaaabbbbbbabbaaaaabbbaaabbbba + abaabbbaaabbaaabbbbabbbaaaabbaabbbaaaaaabaabbbbbbbbbaaabbaabaaaaaaababbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabaaaaabbaaababbbbbbbaabbaaabbaaabaaabbbbbbbbbaabbbbbabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbababaaabbbbbaabbaaabbaaabaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbbaaaaabaaabbabbbaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbbbbaaaabbaaaaabbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaaabbbbbbbbbabaaaabbabbabbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbabbbbabaaaabbbbbabbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbbabaaaaabbbbaabbbbbaaaaabbaaabbaaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbabbbabaaaaabbbaaabbbbbaaaaabbaabbbaaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbbbbaaaabbbbaabbbbbbaaaaabaaabbbbbaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaaabbbbbbbbbbaaaaabbaaabbbbbaaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbbbaaaabbbabbbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbbbaaaabbaabbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbabbaaabbbaabbbbbbbbbaaaaabbbabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbabbaaaabaaabbbbbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbaabbbbaabbaaaaaabbbbbbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbabbbaaaabbbbabbbbbaabbaaaabbbaabbbaaaabbbaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbaaaaaaabbbaaabbbbbaabbbbbbbbbaaabbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbaabaaabbbaaaabbbbbaabbbbbbbbbbabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaaaaabbbbbbbbaaaabbbbbaaaabbbbbbbbabbbbabbbbaabbbbbaaaaabbbba + aabbaaabaaabbbbaaaaabbbabbbaaabbabbbbbabbbabaaaabbbaaaaaaabbbbbbbbbbabbbbaaabbabaaaaabbbba + babaabbbbabbbbbabbaabbbabbbaaabbbbbbbaaabbaabaabbbbaaaaaaaaabbbbbbbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbaaabbbbbbaaabbbaaaaabbbaaaaaaaaaaaaaabbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbaabbbbbaaaaabbbaaabbbbbaaaaaaaaaaaaaabbbaabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaaaabbbaaaaaaabbbaabbbbbaaaaaaaaaaaaaaabbbaabbbaabaabbbbabbbaaaba + aaaabbbbabbbbaabbbbaabaabaaabbbaaaaaaaabbbaabbbbbaaaaaabbaaaaaaaabbaabbaabbbaabbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbaabbbaaaaaaaaaabaabaabaaaaaabbbaabbaaaabbbabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbabbbaaaaaaaaaabaabbbbaaaaabbbbaabaaaaabbbaabaabbbaaabbbabbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbabbbaaaaaaaaaabbbbbaaaaaabbbbbaabbaaaabbbbaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbabbbaaaaabaaaabbaabbbaaaabbbbaaabbaaaabbbbaaaaaabaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbabbbaaaaabaaaabbbbbbaaaabbbbbaaabbaaaaabbbbaaaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbaaaaabbbbabbbaaaaabaaaabbbaaabaaabbbbaaaabbaaaaabbbbaaabaaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaabaabbbbabbbaaaabbaaaaabbbbbaaaabbbbaabbbbaaaabbbbbaaabbbaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbabbbaaaabbaaaabbbaaaaaaabbbbaaabbbaaaaabbbbaaabbbaaaaaaaabbbbaa + baaaaaaabaaabbbbbbaabaaabbbbbbbaaaaabaaaaabbabbaaaabbbbaaabbbaaaaabbbbaaabbbbaaaaaaaabbbaa + aaaaabbbbbaabbbbbaabbaaabbbbbbaaaaabbaaaabbbbaaaaaaaaaaaaabbaaaaaaabbbbbabbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaabbbbbbaaaaabbaaaaabbabbaaaaaaaaaaaabaaaaaaabbbbbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbbbbaaaaabbaaaabbbbbaaaaaaaaaaaaabaaabaaaabbbbaabbbbbbaaaaaaabba + babbbbbbbbaabbbbbaabbbaaabbbbbaaaaabbbaaaabbaaaaaaabbbbbbaaaaaaabaaaabbbbabbbbbbabbbbbabba + aabbbbbbbbaaabbbbabbbaababbbbbbaaaabbbaaabbbbbbaaaaabbbbbbaaaaaaaaaaaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbaaababbbbbbaaaabbbaaaabbaaaaaaabbbbbbbaaaaaaaaaaaaabbbabbbbaaabbbbbbaa + aabbbbbbbbaaabbbaabbaaabbabbbbbaaaabbbaaaabbbbaaaaabbbbbbbaaaaaaaaaaaaaabbabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabbbbbaaaabbbaaabbbaaaaaaaabbbbbbbaaaaaaaaaaaaabbbbbbaaabbaabbbba + abaabbbaaaabaaabaabaaaaabbbbbbbaaaabbbaaaaabbbaabaaabbbbbbbaaaabaaaaaaaaabbbbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaabbbbaaaaabbbaaaabbbaaaaaaabbbbbbbaaaabbabbaaaabbbbbbaaaabbbbbbba + bbaabbbaabbbbaaaaaaabbbbaabbbbaaaaaaaaaaaaababaaaaaaabbbbbbaaaabbbbbbaaabbbbbaaaaaaaabbaaa + abbaaaaaabbbbaaaaaaabbbbaabbbbaaaaaaaaaaaabbbbaaaaaaaaaabbbaaaabbbbbbaaaabbbbaabbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbaaabbbaaaaaaaaaaaaabaaaaaaaaaaaabbbbaaaaabbbbaaaabbbaabbbaaaabbaba + abbbaaabbbbbbbbaaabbbbbbbbbbbbaaaaaaaabbbbbbbbaaaaaaaaaaaabaaaaaaabbbaaaabbbaabbbbaaaababb + aaaaaaabbbabbbbaaabbbbbbbbbbbbaaaabbbbbbbabbaaaaaabbbaaaaaaaaabbbaaaaaaaabbbaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabbbbbbaaabbbbbbbabbbbaaaabbbbaaaaaaaabbbaaaaaaaabbbbbbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbbbbbaabbbbbbbbabbbaaaabbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbabbbbaababbbbbbaabbaaaabbbbbbaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbaabbbbaaaaabbbbbabbbaaaabbbbbaaaabaaabbaaaaaabbbbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaaabbbbbaaaabbbbbaabaaaababbbbbbabaaaaabbbbbbbbbbbaaabbbbbbbaaabbb + abbbaaabbbbabbaaaaaabbbaaaabbbbbaaaabbbbaabbbaaababbbbbbbbaaaaabbbbbbbbbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbbaaaabbbaabbaaaaabbbbbbaaaaaaaabbbbbbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbaabbbbbbaaaaaaaabbbaaaabbbbbaabbbbaaabbbbbbbbbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaabbbaabbbbbbbbaaaaaabbaaaaaabbbbaabbbbaaabbbbbabbaabbaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaaabbbaaaabbbbbbbbaaaabbaaaaabbbbbbbbbbaaaabbbbbaaaaabbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbaaaabbbbbbbbaaaabbaaaabbbbbbbbbbbaaaabbbbbbaaabbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbbbaaabbbaaaabbbbbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbbbaaabbbaaaabbabbbbbbbbaaaabbbbbbbbbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbbaabbbbaababbbbbbbbaaabbbaaaaabaabbbbbbbaaaaabbbbbabbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaabbbbaaaabbbbbbbaaaabbbaaaabbabbbbbbbbaaaaabbbbbaaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbabbbaaaabbbaaaabbbaabaabbbaaaaabbbbbbaabbbaaaaaaaaaaaaaba + abbbaabbbbbbbbaabbaaabaabbaaaabbaabbbaaaabbbaaaaabbaabaababbaaaabbbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbaaaaaababbabbbbaaabbbbaaaaabbaabbaabbbaaaabbbbbbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbbaaaabbbbbaaaabbaabbbaabbaaaabbbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaabbbbaaaabbbbbaaaabbaabbaaabbaaaabbbbbbbbbaaaabbbbbbbababba + abbaaabbbbbbbbaaaabbbbbaaaaaaaabbbbbaaaabbbbbaaaaabaaabaaabbaaaabbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbbaaaaaabbbbbaaaabbbbbaaaaaaaaaabbbbbaaaaabbbbbbbbbaabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbaaabbbaaaaabbbbbbaaaabbbbbaaaaabaabbbbbbbaaaaabbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbbbaaaaabbbbbbbaaaabbbbbbaaaaabbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbababbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaba + bbaaaabaaaaaaaaaabaaaaaaaababbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbaaaabbbbbbbbbbaabbbbbbbbbbaba`, + map `abbbbbbbbbaaabbbbaabbbbbbbbaaaaaaabbbbbbbabbaaaaabbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaabbbbba + bbbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaabbbbbbaabbaaaaaabbbaaabbbbbbbbbbbbaabbbbba + abbbbbbbbbaaaabaaabbbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbbbbbabbbbbabbbaaabbbba + abbbbbbbbbaaaaaaaaaaaaaabbbaaaaaabbbbbaaabbaababbbbbbbbbbbaaaaaaabbbbbbbaaabbbabbbbaaabbba + abbbbbbbbbaaaabbabbaaaaaaaaabbaabbbbbaaaaaaaabbbbbbbbbbbbbbaaaaaabbbbbbbbaaabbbbbbbaaabbba + abbbbbbbaaaaabbbabbbaaaaaaaabbaaabaaaaaaaaabbabbbbbbbaabbbbbaaaaabbbbbabbaaabbbbbbbaaabbba + abbbbbbbaaabbbbbabbbaaaaaaaabbbbbaaaaabbaabbbbbbaabbbbaaabbbaaabaaaaaaaaaaaaabbbbbbaabbbba + abbbaaaaaaabbbbaabbbbbbbbaaaaabbbaaaaabbbbbbaaaaaaaabbbaaaaaaaabaaaaaaaaabaaabbbbbaaabbbba + abbbbaaaaaabbbaaabbbbbbbbbbbaaababbbaaabbbbbaaaaaaaaabbbaaaabaaaaaaaaaabbbaabbbbbaaabbbbba + abbbaaaabbbbbaaaabbbabbbbbbbaaaaabbbbbaabbbbaaaaaaaaabbbbbaaaaaaaaabbbbbbbbabbbbbaaabbbbba + abbbaabbbbbbbaaaabbabbbbbbbbaaaaabbbbbaabbbaaaaaaaaaaabbbbbaaaaabbbbbbbbbbbabbbbaaaabbbbba + abbbaaabbbbbbaaabbbabbbbbbbbaaaabbbbbbbabbbaaaaaaaaaaabbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbba + abaaaaaaabbbbaabbbbabbbbbaaaaaabbabbbbbabbbababaabaaaabbbbaaaaaabbbbbbbabbbaaabbbaaaabbbba + abaabbaaabbbaaabbbbbbbbaaaabbaabbaaaaaaabbabbbbbbbbbaabbbbaaabaaabbbbbbbbbaaaaabbbaaabbbba + abaabbbaaabbaaabbbbabbbaaaabbaabbbaaaaaabaabbbbbbbbbaabbbaabaaaaaaababbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbaaaaaaaabbbaaabaaaaabbbaababbbbbbbaabbaaabaaaabaaabbbbbbbbbaabbbbbabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaaabaabbbbbbaabaabbbbbbaabbaaabbaaabaaaabbbbbbbbaaabbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaabbbaaaaaaabbbbbbbaaaaababbbaabbbaabbaabbaaaaaaabbbbbaaabbaaabbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbbbbaaaabbaabaabbbaaaaaabbbaaaaaabbbbbaaaaaaabbbaaa + abbbbbbbbaaabbbbbaaabbbaaabbaaaabbbbbbbbabbaaaabbaaaabbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbaa + abbabbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbaabaaaabbbbbabbbbbaaaaaabbbaaaaaaabbbbaaaaabbbbbaa + abbbbbbbbbbaaaaaaaabbbbbbabbbaaaabbbbbbbaabaaaabbbbaabbbbbbaaaaabbaaabbaaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabbaaaabbbbabbbabaaaaabbbaabbbbbbaaaaabbaabbbaaaaabbbaaabbbbbbba + abbabbbbbbaaaaabaaabbbbaaaaaaaaaabbbbabbbabaaaabbbaaabbbbbbaaaaabaaabbbbbaaaabbaabbbbbbbba + abbabbbbbaaaaaabbbaabbbaabbaaaaaabbbbbbbbbbaaaabbbaaabbbbbaaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbabbbbbaaabbabbbaaabaaabbaaaaabbbbbbbbbbbaaaaabaaabbbbbbbaaaaaabaaabbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbbbaaaabbaabbbbbbbbbaaaaabbaabbbaabbaaaaabbbbbbbba + abbbbbbbbbaabbaaaaabaaabbbbbaaaaaaabbbbbabbaaabbbaabbbbbbbbbaaaaabbbabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbabaaaabbbabbbbbbbbaaaaaabbbbaaaaaabbaabaabbbbbbbba + abbbbbbbaaabbbbaaabbbbabbbbbaaabbaabbbbaabbaaaaaaababbbbbaaaaaaabbbbaaaaaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbabbaaaaaabbbbbbbbbaaabaaaabbbaabbbaaaabbbaabbbbbbba + abbbbbaaaaaaabbbaabbbbaabbbbaaabbaaaaaaabbaaabbbbbbabbbbbaabbaaaabbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaaabbbabaabbbbaaaabbbbbabbbbbbbbbaaaabbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaaabaabbbbbbbaaaaabbbbaaabbbbbbbbbaaabbbabbbbaabbbbbaaaaabbbba + aabaaaabaaabbbbaaaaabbbabbbaaabbabbbbbabbbbbaaaabbaaaaabbbbbbbbabbbbabbbbaaabbbbbaaaabbbba + baaaabbbbabbbbbabbaabbbabbbaaabbbbbbaaabbbaabaaabbaaaaaaabbbbbbabbbbabbbbaaaaaaaaaaaabbbbb + baaabbbbbbbbbbaabbaabbbaabbaaabbbbbaaaabbbaaaaabbbaaaaaaaaaabbbbbbbaabbbaaaaaaaaaaaaaabbba + baaabbbbbbbbbbaabbaabbbaabbbabbbbbaaaaabbbaaaabbbbaaaaaaaaaaabbbbbbaabbbaaaaabbbaaaaaaabba + baaabbbbbbbbbaaabbbaabbaaaaabbbbaaaaaaabbbaabbbbbaaaaaaaaaaaaaabbbbaabbbaabaabbbbabbbaaaba + aaaabbbbabbbbaabbbbaabaabaaabbaaaaaaaaabbbaabbbbbaaaaaaaaaaaaaaabbbaabbaabbaabbbbbbbbbaaaa + aaaabbbbabbbbaabbbbaaaabbbabbbaaaaaaaaaaabaabbbbaaaaaabbbaaaaaaabbbaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbbbaaaaaaaaaaabaabaabaaaaabbbbaabaaaabbbbaabaabbbaaabbbabbbbaba + baabbbbbbbbbbaaaaaaaaabbbbbbbbaaaaaaaaaabbbbbbbbaaaabbbbbabbaaaabbbbbaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbbbbaaaaabaaaaaabbbbaaaaaabbbbbaabaaaabbbbbaaaaaabaaabbbabbbbaba + baabbbbbbbbbaaabbbbaaabbbbbbbbaaaaabaaaabbbbaabbaaabbbbbaaabbaaaabbbbaaaaaaaaaabbbbbbbbaba + babbbbbaaaaaaaabbbbaaaabbbbbbbaaaaabaaaaaabbbbbaaaabbbbbaaabbaaaabbbbaaaabaaaaabbbbbbbbaaa + babbbbbaaaaaaabbbbaabaabbbbbbbaaaaabbaaabbbbaaaaaaabbbbaaabbbaaaabbbbaaaabbaaaabbbabbbbbaa + baaaaaaaaaaaabbbbbaabaaabbbbbbaaaabbbaaaaabbabbaaaabbbaabbbbbaaaabbbbaaaabbbaaaaaaaaabbbaa + baaaaaaabaaabbbbbbaabaaabbbbbbaaaabbbaaaabbbbaaaaaabbbaaaabbaaaaabbbbaaaabbbbaaaaaaabbbbaa + aaaaabbbbbaabbbbbaabbaaabbbbbbaaaabbbaaaabbbabbaaaabbbaaaabbaaaaabbbbaababbbbbaaaaaaabbbba + aaaaabbbbbaabbbbbaabbaaabbbbbbaaaabbbaaaabbbbbaaaabaaaaaaabbaaaaabbbbabbaabbbbbaaaaaaaabba + aaaabbbbbbaabbbbbaabbbaaabbbbbaaaabbbaaaabbbaabaaaaaaaaaaabbaaaaaabbbabbaabbbbbbaaaaaaabba + babbbbbbbbaabbbbbaabbbaaabbbbbaaaabbbaaaaabbbbaaaaaabaaaaaabaaaaaabbbabbbabbbbbbabbbbbabba + aabbbbbbbbaaabbbbabbbaababbbbbaaaabbbaaaabbbaaaabaaabbaaaaaaaaaaaaabbbbbbaabbbbbabbbbbaaba + aabbbbbbbbaaabbbbabbaaababbbbbaaaabbbbaaaabbbbaaaaaabbbbbbaaaaaaaaabbbbbbaabbbbaabbbbbbbaa + aabbbbbbbbaaabbbaabbaaabbbbbbbaaaabbbbaaabbbbaaaaaabbbbbbbaaaaaaaaaabbbbbaabbbaaabbbbbbbba + aaaabbbbbaaaabbbaabbaaabbabbbbaaaabbbbaaaaaabbaaaaaabbbbbbaaaaaaaaaaabbbbbabbbaaabbaabbbba + abaabbbaaaabaaabaabaaaaabbbbbaaaaabbbbaaabbbbbaaaaaaabbbbbbaaaaaaaaaaabbbbabbbaaabbaabbbba + abaabbbaaabbbaabaaaaabbaaabbbaaaaaabbbaaaaababaaaaaaabbbbbbaaaaaaaaaaabbbbabbbaaaabbbbbbba + bbaabbbaabbbbaaaaaaabbbbaabbbaaaaaabbbaaabbbbbaaaaaaabbbbbbaaaaaaaaaaaabbbabbaaaaaaaabbaaa + abbaaaaaabbbbaaaaaaabbbbaabbbaaaaaaaaaaaaabaaaaaaaaaabbbbbbaaaaaaaaaaaabbbabaabbbaaabbbaaa + abbbaaaaabbbbbaaaaabbbbbaabbbaaaaaaaaaaaaabbbbaaaaaaaabbbbbbaaabbbbaaaabbbaaaabbbaaaabbaba + abbbaaabbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaabbbbaaaaaaaaaaaabbbbaaabbbbaaaabbbaaaabbbbaaaaaabb + aaaaaaabbbabbbbaaabbbbbbbbbbbaaaaaaaabbbbbbbbbaaabaaaaaaabbbaaaabbbaaaabbbaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabbbbbaaaabbbbbbbaabbaaaaabaaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbaabbbb + abbbaaabbbbbbbbaabbbbbbbbbbbbbaaabbbbbbbbaabbaaaabbbbaaaaaaaaabbaaaaaaabbbaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbabbbaaabaabbbbbbabbaaaabbbbbaaaaaaaabbaaaaaaabbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbaaabbbaaaaaabbbbbbabaaaabbbbbaaaaaaaaaabaaaaaaabbbaaabbbbbbbaabbbb + abbbaaabbbbbbbbaaaabbbbbaabbbbbaaaaabbbbbaabbaaaaabbbaaaaaaaaaaaaaaaaabbbbaaabbbbbbbaaabbb + abbbaaabbbbabbaaaaaabbbaaaabbbbaaaaabbbbbaabbaaaaaaaaabaaaaaaaaaaaaaabbbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaaabbbbbaaaaabbbbabbaaaabbaaabbaaaaaaabbbbbbbbbbbaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbaabbbbbbaaabbbaabbbaaabbaaabbaaaaaaabbbbbbbbbabaaaabbbbbbbaaabba + abbbaaabbbbbbbaabbaaaaabbbaabbbbbbbaaaaaaabbaaaabbaaaabaaaaaaaabbbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaabbbaaaabbbaabbbbbbbbaaaaaabbaaaabbbaaaaaabaaaaabbbbbbbababbaabbbbbbbaaabba + bbbaaabbbbbbbbaaabbbaabbbbaaaabbbbbbaaaaaabbaaaabbbbbaaaabbbaaabbbbbbbbbbbbaabbbbbbbaaabba + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbabaaaabbaaabbbbbbabbbbbaaaabbbbbabbbbbbaabbbbbbbaaabbb + abbbaaabbbbbbbaaabbbaabbbbaaaabbbbbbbbaaaabbaaaabbbbbbbbbbbaaaabbbbbabbbbbbaabbbbbbbaaabbb + aabaaaaaaaaabbaaabbbaabbbbaabbbbbbbbbaaaaabbaaaabbbbbbbbbbbaaaabbbbbaabbbbbaabbbbbbbaaabbb + abbbaabbbaaaabaabbaaaaabbbaaaabbbbbbaaaaaabbaaaaababbbbbbbbaaaabbbbbbaabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbabbaaaaaabbaaaabbabbbbbbbbaaaabbbbbbbabbbbaaaaaaaaaaaaaba + abbbaabbbbbbbbaabbaaabaabbaaaabbbbbbaaaaaabbaaaabbaabbbbbbbaaaabbbbbbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaaaabbbbaaaaababbbbbaaaaaaabbaaaaabbaaaaaabbaaaaabbbbbbbbbbbaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaabbbaaaaaaabbaaaaabaabbaaabbaaaaabbbbbbbbbaaaabbbbbbbaaabba + abbbaabbbbbbbbaaaaabbbbaaaaaaaaabbbaaaaaaabbaaaaabaabbaaabbaaaaabbbbbbbbbaaaabbbbbbbaaabba + abbaaabbbbbbbbaaaabbbbbaaaaaaaabbbbaaaaaaabbaaaabbaabbaaabbbaaaabbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbbaaaaabbbbbaaaaaaabbaaaabbaaabaaabbbaaaabbbbbbbbbbaabbbbbbbbbbabba + abbaaabbbbbbbbaabbbaaabbbaaaabbbbbbaaaaaabbbaaaaaaaaaaaaabbaaaaabbbbbbbbbbbabbbbbbbbbbaaba + abbaaabbbbbbbbaabbbbbbbbaaaaabbbbbbaaaaaabbbbaaaaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaba + bbbaabbbbbbbbbaabbbbbbbbbababbbbbbbaaaaaabbbbaaaaabbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaba + bbaaaabaaaaaaaaaabaaaaaaaababbbbbbbaaaaaabbbbaaaaabbbbabbbbbaaaabbbbbbbbbbbaabbbbbbbbbaaba`, + map `abbbbbbbbbaaabbbbbaabbbbbbbaaaaaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaababbbbbbbbbbaabbbbba + abbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbabbbaaabbbbbaaabaaaaaaabbbaaaaabbbbbbbbbbaabbbbba + abbbbbbbbbaaaaaaaaabbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbabbbbbbbbbbaaabbbba + abbbbbbbbbaaaaaaaaaaaaabbbbaaaaaabbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbbaabbbba + abbbbbbbbaaaaabbabaaaaaaaaaabaabbbbbbaaaaaaaabbbbaabaabbbbbaaaaaabbbbbbbbbabbabbbbbaabbbba + abbbbbbbbaaaabbbabbbaaaaaaaabbabbaaaaaaaaaabbbbbbbbbbaabbbbbaaaaabbbbbabbaaabbbbbbbaabbbba + abbbbbaaaaaabbbaabbbaaaaaaaaabbbaaaaaabbabbbbbbbbbbbbbaaabbaaaabaaaaaaaaaaaaaabbbbbaabbbba + abbbbbaaaaabbbbaabbbbbbbaabaaabbaaaaaabbbbbbbbaaaabbbbaaaaaaaaabaaaaaaaaaaaaaabbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaaabbbbbaaabbbbaaabaaaabbbbaaaaaaaaaaaaaaaabbbaabbbbbaaabbbbba + abbbabaabbbbbaaaabbbbbbbbbbbbaabbbbbbbaabbbbaaaaaaaabbbabbbaaaaaaaabbbabbbbabbbbaaaabbbbba + abbbaaabbbbbbaaaabbbbbbbbbbbaaaabbbbbbabbbbaaaaaaaaaabbbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + abbbaaabbbbbbaaabbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaaaaaabbbbbbaaaabbbbbbbbbbbbaabbbaaaaabbbba + abbaaaaabbbbaaabbbbbbbbbbbaaaaaabbbbbbbbbbaaaaaaaaaaabbbbbaaaaaabbbbbbabbbaaaabbaaaaabbbba + abaaabaaabbbaaabbbbbbbbbaaabbaabbaaaaaabbaabbbbbbbbaabbbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + ababbbbaaabaaaabbbbbbbbaaaabbaabbbaaaaabbaabbbbbbbbaabbbaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaaabbbbaabbbbbbbbbaabbaabbbaaaaaaabbbbbbbbaaabbbbbabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaaabbbbbaaabbbbbbbbaabbaabbbaaabaaaabbbbbbbbaabbbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaaabbaaaaaaabbbbbbabaaabbbbbbabbbaaabbaabbaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbbaaaaaabaabbabbbbaaaaaabbbaaaaaabbbbbaaaaaaabbbbba + abbbbbbbbaaabbbbaaaabbbaabbbaaaaabbbbbbbbbbaaaabaaaaabbbbaaaaaabbbaaaaaaabbbbaaaaaabbbbbba + abbbbbbbbbaabbbaaaaabbbbaabbaaaabbbbabbaabbaaaabaaaaabbbbbbaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbabbbaaaabbbbbbbabaaaaabbbbabbbbbbbaaaaabbaaabbaaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabaaaaabbbbbbbabaaaabbbbbaabbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbabaaaaaabbaabbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbbbbbbbbaaaaabbbaabbbaabbaaaaabbbbbbbbbbaaaabbbbaabbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaabaaabbaaaaabbbbbabbbbaaaaabbaaabbbbbbbaaaaaabaaabbbbaaaaaaabbbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbbaaaabbaaabbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbaaabbaabaabaaaabbbbaaaaaaabbbbbbbbaaabbbbbbbbbbbbbaaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbbbaaabbbbababbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbaabbbbabbaaaabbabbaabbbbaaaaaaabbbbaaabaabbabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbabbaaaaaabbbbabbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaabbbbbbaabbbbaabbbbaaabbbaaaaabbbaaaabbbbbbbbbbaaabbaaabbbbabbbbaaaabbaaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbaaaabbbaaaabbbbbabbbbbaabbbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbbbbbbbaaaaabbbbaabbbbbbbbbaaaabbbabbbbaabbbbbaaaabbbbba + aabbaaaaaaaaaaaaaaaabbbabbbbaabbbbbbbbbbbbbbbabbbbaaabbbbbbbbbaaabbbabbbbaaabbaaaaaaabbbba + aabaabbbbaabbbaabbaabbbaabbbaabbbbbbaabbbaaaaaabbbaaaaabbbbbbbaabbbbabbbbaaaaaaaaaaaabbbba + bbbaabbbbbbbbbaabbaabbbaabbbabbbbbaaaabbbbaaaaabbbaaaaaaabbbbbbabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaaabbaabbbbbbbbaaaaabbbbaababbbbaaaaaaaaabbbbbbbbbabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaaabbbaabbaaaabbbbaaaaaaabbbbaabbbbbaaaaaaaaaaaabbbbbbabbbbaabaabbbbbbbbaaaba + bbaabbbbbbbbbaabbbbaabbabaabbaaaaaaaaabbbbaabbbbaaaaaaaaaaaaaabbbbaaabbaaabbabbbbbbbbbaaaa + abaabbbbabbbbaabbbaaaaabbbbbbaaaaaaaaabbaaaabbbbaaaaabbbaaaaaaabbbaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbbaaaaaaaaaaabbaabbbbaaaabbbbbaaaaaabbbbbaaaaabbbaabbbbbbbbbaaa + baabbbbbbbbbbaaaaaaaaabbbbbbbaaaaaaaaaaaababbbbaaaabbabbbabaaaabbbbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbbbaaaabbbaaaabbbaaabbaaabbbbbbabaaaabbbbbbaaaaaabaaabbbabbbbaaa + baabbbbbbbbbaaaabbaaaaabbbbbbaaaabbbaaaaaabbbbbaaaabbbbbaabbaaaabbbbbaaaaaaaaaabbbabbbbaaa + baabbbbaaaaaaaabbbaaaaabbbbbbaaaabbbaaaabbbbaaaaaaabbbbaaabbaaaabbbbbaaaabbaaaabbbbbbbbaaa + baabbaaaaaaaaabbbbaaaaabbbbbbaaaabbbaaaababbabbaaaabbbbbaabbaaaabbbbbaaaabbbaaabbbbbbbbbaa + baabaaaaaaaaabbbbbaabaaabbbbbaaaabbbaaaaabbbbaaaaaabbbaaabbbaaaabbbbbaaaabbbaaaaabbabbbbaa + abaaaabbbaaabbbbbbaabaaabbbbbaaaabbbaaaabbbbabbaaabbbbaaabbbaaaabbbbaaaaabbbbaaaaaaabbbbaa + abaaabbbbbaabbbbbaabbaaabbbbaaaaabbbbaaaaabbbbaaaabbbbaabbbbaaaabbbbaaababbbbbaaaaaaabbbaa + abaaabbbbbaabbbbbaabbaaabbbbaaaaabbbbaaabbbbaabaaabbbbaaabbaaaaabbbbaabbaabbbbbaaaaaaaabba + abaabbbbbbaabbbbbaabbbaabbbbaaaaabbbaaaaaaabbbaaaabbbaaaabbaaaaabbbbaaabaabbbbbbaaaaaaaaba + aabbbbbbbaaaabbbbaabbbaaabbbaaaaabbbbaaabbbbaaaaaabbaaaaabbaaaaabbbbaabbbabbbbbbabbbbbaaba + aabbbbbbbbaaabbbbaabbaaaabbbbaaaabbbbaaaaaabbbaaabaaaaaaaabaaaaabbbbaabbbaabbbbbabbbbbaaba + abbbbbbbbbaaabbbaabbaaababbbbaaaabbbbaaaabbbbaaaaaaabbaaaaaaaaaaabbbaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbaaabbbbbbaaaabbbbaaaabbabbaaaaaabbbbbaaaaaaaabbbbaabbaabbbaaaabbbbbbba + abaabbbbbaaaabbbaabbaaabbbbbbaaaabbbbaaaabbbbaaaaaaabbbbbbaaaaaaabbbbaabbaabbbaaabbaabbbba + abaabbbaaaabaaabaabaaaabbbbbaaaaabbbbaaaabbaaaaaaaaabbbbbbaaaaaaaabbbbabbbabbbbaabbabbbbba + abaabbbaaabbbaaaaaaaabbaabbbaaaaaabbbaaaabbbbaaaaaaabbbbbbbaaaaaaaabbbaabbabbbbaaabbbbbbba + abbaabaaaabbbaaaaaaabbbbabbbaaaaaabbbbaaabbaaaaaaaaaabbbbbbaaaaaaaabbbbaababbaabaaaabbbaaa + bbbaabaaabbbbaaaaaaabbbbabbbaaaaaabbbbaaaabbbaaaaaaaabbbbbbaaaaaaaaabbbaaaaaaaabbaaaabbaaa + abbbaaaabbbbbaaaaaabbbbbabbbaaaaaaaabaaaabbbbaaabaaaabbbbbbaaaaaaaaabbbbaaaaaabbbaaaabbaaa + abbbbaabbbbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaabbbaaabbaaaabbbbbaaabbaaaaabbbaaaaabbbbbaaabaabb + aaaaaaabbaabbbbaabbbbbbbbbbbaaaaaaaaaaaaaabbbaaabbbaaaabbbbaaabbaaaaabbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabbbaaaaaaaaaabbbabaaaaabbbbaaaabbbaaabbbaaabbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbbbbbbaaaaaabbbbbbabbbaabbbbbaaaabbbaaabbaaaabbbbbaaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaabbaaabbabbaaaaaaaaaabbaaaabbbbbbaaaaaaaaaaaabaaa + abbbaaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbabbaaaaaabbaaaaaaaaaabbaaaabbbbbbaaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaabbbbaabbbbaaabaabbbbbbabbaaaaaaaabaaaaaababbaaaaabbbbbaaaabbbbbbbaaabba + abbbaaabbbbabbaaaaaabbbaaabbbbaaaaabbbbbbabbaaaaabaaaaaaaaababbaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaaaaabbbaaabbbbaaaaabbbbbaabbaaaabbaabbbaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbbbbbbaaaabbbbbaabbaaabbbaabbbaaaaaaaaaaaabbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaabbbabbbbbbaaabbbbaabbaaaaabaaabbaaaaaabaaaabbbbbbaaaaabbbbbbbaaabbb + abbbaaabbbbbbbaabbbaaaabbbaabbbbbbaabbbaaabbaaabbbbaaaaaaaaaabbbbbbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbbbaabbbbaaabbbbbbaaaaaaabbaaaabbbbaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaabbbaabbbbaaaabbbbbabaaaaabbaaaabbbbbbbaaaaaabbbbbbbbbbbbbbaabbbbbbbaaabbb + abbaaabbbbbbbbaaabbbaabbbbaaaabbbbbbbaaaaabbaaaaabbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaaabaaaabbaaabbaaabbbbaaaabbbbbaaaaaaabbaaaaaabbbbbbbbaaabbbbbbbbabbbbaaabbbbbbbbaabbb + abbbaabbaaaaabaabbaaaaabbbaaaabbbbbaaaaaaabbaaabbbbbbbbbbbaaabbbbbbbbbabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbbaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbbbabbbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabaabbbaaabbbbbaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbbbabbbbaabbbbbbbaaabba + abbaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaaaaaabbaaabbbabbabbbbaaaabbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaaaaaaabbbbaabaaaaabbaaaabaaabaabbbaaaabbbbbbbbbbbbbabbbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaababaaabbbaaaaaaaabbaaaabaaabbaaabaaaabbbbbbbbbbbbaaabbbbbbbbaabba + abbaaabbbbbbbbaaaabbbbbaaaaaaabbbbaaaaaaaabbaaaabaabbbababaaaabbbbbbbbbbbbaabbbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbaaaaaabbbbaaaaaaaabbaaaabaabbaababaaaabbbbbbbbbbbbaabbbbbbbbbbabba + abbaaabbbbbbbbaabbbbaabaaaaaabbbbbaaaaaaaabbaaaaaaaabbbbabaaaabbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbaaabbbbbaaaaaaaaabbaaaabaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbabbb + abbaabbbbbbbbbaabbbbbbbbbababbbbbaaaaaaaaabbaaabbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabb + abbaaabaaaaaaaaaaaaaaaaaabbabbbbbaaaaaaaaabbaaabbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaba`, + map `abbbbbbbbbaaabbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaababbbbbbbbbbaabbbbba + abbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbabbbaaabbbbbaaabaaaaaaabbbaaaaabbbbbbbbbbaabbbbba + abbbbbbbbbaaaaaaaaabbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbabbbbbbbbbbaaabbbba + abbbbbbbbbaaaaaaaaaaaaabbbbaaaaaabbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbbaabbbba + abbbbbbbbbaaaabbabaaaaaaaaaabaabbbbbbaaaaaaaabbbbaabaabbbbbaaaaaabbbbbbbbbabbbbbbbbaabbbba + abbbbbbbbaaaabbbabbbaaaaaaaabbabaaaaaaaaaaabbbbbbbbbbaabbbbbaaaaabbbbbabbaaabbbbbbbaabbbba + abbbbbaaaaaabbbaabbbaaaaaaaaabbbaaaaaabbabbbbbbbbbbbbbaaaabbaaabaaaaaaaaaaaaaabbbbbaabbbba + abbbbbaaaaabbbbaabbbbbbbaabaaabbbaaaaabbbbbbbbaaaabbbbaaaaaaaaabaaaaaaaaaaaaaabbbbaaabbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbbbbaaabbbbaaabaaaabbbbaaaaaaaaaaaaaaaabbbaabbbbbaaabbbbba + abbbbbaabbbbbaaaabbbbbbbbbbbbaaabbbbbbaabbbbaaaaaaaabbbaabbaaaaaaaabbbabbbbabbbbaaaabbbbba + abbbaaabbbbbbaaaabbbbbbbbbbbaabbbbbbbbabbbbaaaaaaaaaabbbbbbbaaabbbbbbbbbbbbabbbaaaaabbbbba + abbbaaabbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbbaaaaaaaaaabbbbbbaaaabbbbbbbbbbbbaabbbaaaaabbbba + abbaaaaabbbbaaabbbbbbbbbbbaaaaaabbbbbbbbbbaaaaaaaaaaabbbbbaaaaaabbbbbbabbbaaaabbaaaaabbbba + abaaabaaabbbaaabbbbbbbbbaaabbaabbaaaaabbbaabbbbbbbbaabbbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + ababbbbaaabaaaabbbbabbbaaaabbaabbbaaaaabbaabbbbbbbbaabbbaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaaabbbbaabbbbbbbbbaabbaabbbaaaaaaabbbbbbbbaaabbbbbabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaaabbbbbaaabbbbbbbbaabbaabbbaaabaaaabbbbbbbbaabbbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaaabbaaaaaaabbbbbbabaaabbbbbbabbbaaabbaaabaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbbaaaaaabaabbabbbbaaabaabbbaaaaaabbbbbaaaaaaabbbbba + abbbbbbbbaaabbbbaaaabbbaabbbaaaaabbbbbbbbbbaaaabaaaaabbbbaaaaaaabbbaaaaaabbbbaaaaaabbbbbba + abbbbbbbbbaabbbaaaaabbbbaabbaaaabbbbabbaabbaaaabaaaaabbbbbbaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbabbbaaaabbbbbbbabaaaaabbbbabbbbbbbbaaaabbaaabbaaaabbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabaaaaabbbbbbbabaaaabbbbbaabbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbbabaaaaaabbaabbbbbbbaaaaabbaabbbbaaaabbbaabbbbbbbba + abbbbbbbbbaaaaabbbaabbbaabbaaaaabbbbbbbbbbaaaabbbbaabbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaabaaabbaaaaabbbbbabbbbaaaabbbaaabbbbbbbaaaaaabaaabbbbaaaaaaabbbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbbaaaabbaaabbbbbbbbbaaaaabbaabbaaabbbaaaabbbbbbbba + abbbbbbbbaaabbaabaabaaaabbbbaaaaaaabbbbbbbbaaabbbbbbbbbbbbbaaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbbbaaaabbbababbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbaabbbbabbaaaabbabbaabbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbabbaaaaaabbbbabbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaabbbbbbaabbbbaabbbbaaabbbaaaaabbbaaaabbbbbbbbbbaaabbaaabbbbabbbbaaaabbaaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbaaaabbbaaaabbbbbabbbbbaabbbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbbbbbbbbaaaaabbbbaabbbbbbbbbaaabbbbabbbbaabbbbbaaaabbbbba + aabbaaaaaaaaaaaaaaaabbbabbbbaabbbbbbbbbbbbbbbabbbbaaabbbbbbbbaaabbbbabbbbaaabbaaaaaaabbbba + aabaabbbbaabbbaabbaabbbaabbbaabbbbbbaabbbaaaaaabbbaaaaabbbbbbbaabbbbabbbbaaaaaaaaaaaabbbba + bbbaabbbbbbbbbaabbaabbbaabbbabbbbbaaaabbbbaaaaabbbaaaaaaabbbbbbabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaaabbaabbbbbbbbaaaaabbbbaababbbbaaaaaaaaabbbbbbbbbabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaaabbbaabbaaaabbbbaaaaaaabbbbaabbbbbaaaaaaaaaaaabbbbbbabbbbaabaabbbbbbbbaaaba + bbaabbbbbbbbbaabbbbaabbabaabbaaaaaaaaabbbbaabbbbaaaaaaaaaaaaaabbbbaaabbaaabbabbbbbbbbbaaaa + abaabbbbabbbbaabbbaaaaabbbbbbaaaaaaaaabbaaaabbbbaaaaabbbaaaaaaabbbaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbbaaaaaaaaaaabbaabbbbaaaaabbbbaaaaaabbbbbaaaaabbbaabbbbbbbbbaaa + baabbbbbbbbbbaaaaaaaaabbbbbbbaaaaaaaaaaaababbbbaaaaababbbabaaaabbbbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbbbaaaabbbaaaabbbaaabbaaabbbbbbabaaaabbbbbbaaaaaabaaabbbabbbbaaa + baabbbbbbbbbaaaabbaaaaabbbbbbaaaabbbaaaaaabbbbbaaaabbbbaaabbaaaabbbbbaaaaaaaaaabbbabbbbaaa + baabbbbaaaaaaaabbbaaaaabbbbbbaaaabbbaaaabbbbaaaaaaabbbbaaabbaaaabbbbbaaaabbaaaabbbbbbbbaaa + baabbaaaaaaaaabbbbaaaaabbbbbbaaaabbbaaaababbabbaaaabbbbaaabbaaaabbbbbaaaabbbaaabbbbbbbbbaa + baabaaaaaaaaabbbbbaabaaabbbbbaaaabbbaaaaabbbbaaaaaabbbaaabbbaaaabbbbbaaaabbbaaaaabbabbbbaa + abaaaabbbaaabbbbbbaabaaabbbbbaaaabbbaaaabbbbabbaaabbbbaaabbbaaaabbbbaaaaabbbbaaaaaaabbbbaa + abaaabbbbbaabbbbbaabbaaabbbbaaaaabbbbaaaaabbbbaaaabbbbaabbbbaaaabbbbaaababbbbbaaaaaaabbbaa + abaaabbbbbaabbbbbaabbaaabbbbaaaaabbbbaaabbbbaabaaabbbbaaabbaaaaabbbbaabbaabbbbbaaaaaaabbba + abaabbbbbbaabbbbbaabbbaabbbbaaaaabbbaaaaaaabbbaaaabbbaaaabbaaaaabbbbaaabaabbbbbbaabaaaaaba + abbbbbbbbaaaabbbbaabbbaaabbbaaaaabbbbaaabbbbaaaaaabbaaaaabbaaaaabbbbaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbaabbaaaabbbbaaaabbbbaaaaaabbbaaabaaaaaaaabaaaaabbbbaabbbaabbbbbabbbbbaaba + abbbbbbbbbaaabbbaabbaaababbbbaaaabbbbaaaabbbbaaaaaaabbaaaaaaaaaaabbbaabbbaabbbbaaabbbbbbaa + abbbbbbbbbaaabbbaabbaaabbbbbbaaaabbbbaaaabbabbaaaaaabbbbbaaaaaaaabbbbaabbaabbbaaaabbbbbbba + abaabbbbbaaaabbbaabbaaabbbbbbaaaabbbbaaaabbbbaaaaaaabbbbbbaaaaaaabbbbaabbaabbbaaabbaabbbba + abaabbbaaaabaaabaabaaaabbbbbaaaaabbbbaaaabbaaaaaaaaabbbbbbaaaaaaaabbbbabbbabbbbaabbabbbbba + abaabbbaaabbbaaaaaaaabbaabbbaaaaaabbbaaaabbbbaaaaaaabbbbbbbaaaaaaaabbbaabbabbbbaaabbbbbbba + abbaabaaaabbbaaaaaaabbbbabbbaaaaaabbbbaaabbaaaaaaaaaabbbbbbaaaaaaaabbbbaababbaabaaaabbbaaa + bbbaabaaabbbbaaaaaaabbbbabbbaaaaaabbbbaaaabbbaaaaaaaabbbbbbaaaaaaaaabbbaaaaaaaabbaaaabbaaa + abbbaaaabbbbbaaaaaabbbbbabbbaaaaaaaabaaaabbbbaaabaaaabbbbbbaaaaaaaaabbbbaaaaaabbbaaaabbaaa + abbbbaabbbbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaabbbaaabbaaaabbbbbaaabbaaaaabbbaaaaaabbbbaaabaabb + aaaaaaabbaabbbbaabbbbbbbbbbbaaaaaaaaaaaaaabbbaaabbbaaaabbbbaaabbaaaaabbbbaaaaabbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaaabbbaaaaaaaaaabbbabaaaaabbbbaaaabbbaaabbbaaabbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbbbbbbaaaaaabbbbbbabbbaabbbbbaaaabbbaaabbaaaabbbbbbaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbbbbaaaabbbbbbbaabbaaabbabbaaaaaaaaaabbaaaabbbbbbaaaaaaaaaaaabaaa + abbbaaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbabbaaaaaabbaaaaaaaaaabbaaaabbbbbbaaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaabbbbaabbbbaaabaabbbbbbabbaaaaaaaabaaaaaababbaaaaabbbbbaaaabbbbbbbaaabba + abbbaaabbbbabbaaaaaabbbaaabbbbaaaaabbbbbbabbaaaaabaaaaaaaaababbaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbaaabbbbaaaaabbbbbaabbaaaabbaabbbaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbbbbbbaaaabbbbbaabbaaabbbaabbbaaaaaaaaaaaabbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaabbbabbbbbbaaabbbbaabbaaabbaaaabbaaaaaabaaaabbbbbbaaaaabbbbbbbaaabbb + abbbaaabbbbbbbaabbbaaaabbbaabbbbbbaabbbaaabbaaabbbaaaaaaaaaaabbbbbbbbbbabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbbbaabbbbaaabbbbbbaaaaaaabbaaabbbbaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaabbbaabbbbaaaabbbbbabaaaaabbaaaabbbbbbbaaaaaabbbbbbbbbbbbbbaabbbbbbbaaabbb + abbaaabbbbbbbbaaabbbaabbbbaaaabbbbbbbaaaaabbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaaabaaaabbaaabbaaabbbbaaaabbbbbaaaaaaabbaaaabbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbaaaaabaabbaaaaabbbaaaabbbbbaaaaaaabbaaabbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaaaaabbaaaabbbbaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbbbabbbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabaabbbaaabbbbbaaaaaaaabbaaabbbbbbbbbbbaaaabbbbbbbbaabbbaabbbbbbbaaabba + abbaaabbbbbbbbaaaaabbbaaaaaaabbbbbaaaaaaaabbaaabbbabbabbbbaaaabbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaaaaaaabbbbaabaaaaabbaaaabaaabaabbbaaaabbbbbbbbbbbabaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaababaaabbbaaaaaaaabbaaaabaaabbaaabaaaabbbbbbbbbbbabaabbbbbbbbaabba + abbaaabbbbbbbbaaaabbbbbaaaaaaabbbbaaaaaaaabbaaaabaabbbababaaaabbbbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbaaaaaabbbbaaaaaaaabbaaaabaabbaababaaaabbbbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbaabbaaaaabbbbbaaaaaaaabbaaaaaaaabbbbabaaaabbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbaaabbbbbaaaaaaaaabbaaaabaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabb + abbaabbbbbbbbbaabbbbbbbbbbaabbbbbaaaaaaaaabbaaabbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabb + abbaaabaaaaaaaaaaaaaaaaaaababbbbbaaaaaaaaabbaaabbbaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaba`, + map `abbbbbbbbbaaabbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaababbbbbbbbbbaabbbbba + abbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaaabbbbbaaabaaaaaaabbbaaaaabbbbbbbbbbaabbbbba + abbbbbbbbbaaaaaaaaabbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbabbbbbbbbbbaabbbbba + abbbbbbbbbaaaaaaaaaaaaabbbbaaaaaabbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbaaabbbba + abbbbbbbbbaaaabbaaaaaaaaaaaabaabbbbbbaaaaaaaaabaaaabaabbbbbaaaaaabbbbbbbbbabbbbbbbaaabbbba + abbbbbbbbaaaabbbabbbaaaaaaaabbabaaaaaaaaaaabbbbbbbbaaaabbbbbaaaaabbbbbabbaaabbbbbbaaabbbba + abbbbbaaaaaabbbaabbbaaaaaaaaabbbaaaaaabbaabbbbbbbbbbbaaaaabbaaabaaaaaaaaaaaaaabbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbabaaabbbaaaaabbbbbbbbbbbbbbbbaaaaaaaaabaaaaaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbbbbaaabbbbabaaaaabbbbaaaaaaaaabaaaaaaabbbaabbbbbaaabbbbba + abbbbbaabbbbbaaaabbbbbbbbbbbbaabbbbbbbaabbbaaaaaaaabbbbaabbaaaaaaaabbbabbbbabbbbaaaabbbbba + abbbaaabbbbbbaaaabbbbbbbbbbbaabbbbbbbbabbbbaaaaaaaaabbbbbbbbaaabbbbbbbbbbbbabbbaaaaabbbbba + abbbaaabbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaaaaaabbbbbbaaaabbbbbbbbbbbbaabbbaaaabbbbba + abbaaaaabbbbaaabbbbbbbbbbbaaaaaabbbbbbabbaaaaaaaaaaaabbbbbaaaaaabbbbbbabbbaaaabbaaaaabbbba + abaaabaaabbbaaabbbbbbbbbaaabbaabbaaaaabbbbaaaaaaaaaaabbbbbaaaaaaabbbbbbbbbaaaaabbbaaabbbba + ababbbbaaabaaaabbbbabbbaaaabbaabbbaaaabbaabbbbbbbbaaabbaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaaabbbaabbbbbbbbbaabbaaabbbaaaaaaabbbbbbbbaaabbbbbabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaaabbbbaabbbbbbbbbaabbaaabbbaaabaaaabbbbbbbbaabbbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaaabbaaaaaaabbbbbaaaaabbbbbbaabbbaaabbaaabaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbbaaaaabbbbbbaabbbbaaabaabbbaaaaaabbbbbaaaaaaabbbbba + abbbbbbbbaaabbbbaaaabbbaabbbaaaaabbbbbbbbaaaaabaaaaabbbbbaaaaaaabbbaaaaaabbbbaaaaaabbbbbba + abbbbbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbabbaaaabaaaaabbbbbbbaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbabbbaaaabbbbbbabbaaaabbaaaabbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabaaaaabbbbbbabbaaaabbbbaabbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbbaaaaaaabbbbaabbbbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbbbbbbbbaaaaabbbaabbbaabbaaaaabbbbbbbbaaaaaabbbaaabbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaabaaabbaaaaabbbbbbbbbaaaabbbbaabbbbbbbbaaaaaabaaabbbbaaaaaaabbbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbaaaaabbaabbbbbbbbbbaaaaabbaabbbaabbbaaaabbbbbbbba + abbbbbbbbaaabbaabaabaaaabbbbaaaaaaabbbbbbaaaaabbabbbbbbbbbbaaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbbbaaabbbabaabbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbaabbbbbbaaaabbbabaaabbbbaaaaaaabbbbbaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbabaaaabbbabbaabbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaabbbbbbaabbbbaabbbbaaabbbaaaaabbaaaaaabbbbbabbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbaaaabbbaaabbbbbbbbbbaaaabbbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbbbabbbbbaaaaabbbbbabbbbaaabbbaaabbbbabbbbaabbbbbaaaabbbbba + aabbaaaaaaaaaaaaaaaabbbabbbbaabbbbbbbbbbabbbbbbbbaaabbbbbbbbbaaabbbbabbbbaaabbaaaaaaabbbba + aabaabbbbaabbbaabbaabbbaabbaaabbbbbbaabbaaaaaabbbaaaabbbbbbbbaaabbbbabbbbaaaaaaaaaaaabbbba + bbbaabbbbbbbbbaabbaabbbaabbaabbbbbaaaabbaaaaaaabbaaaaaabbbbbbbaabbbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaaabbaabbabbbbbaaaaabbbaaaaabbbaaaaaaaabbbbbbabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaaabbbaabbaaabbbbbaaaaaaabbbaaaabbbbaaaaaaaaaabbbbbbbbabbbbaabaabbbbbbbbaaaba + bbaabbbbbbbbbaabbbbaabbabaabbaaaaaaaaabbbbaaabbbbaaaaaaaaaaabbbbbbaaabbaabbaabbbbbbbbbaaaa + abaabbbbabbbbaabbbaaaaabbbbbbaaaaaaaaabbbbaabbbbaaaaaaaaaaaaaabbbaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbbaaaaaaaaabaaaaabbbaaaaabbbbaaaaaabbbbbaaaaabbbbaabbbbbbbbbaaa + baabbbbbbbbbbaaaaaaaaaabbbbbaaaaaaaaaaaabbaabbbbaaaaabbbaaaaaabbbbbbaaaaabbbaaabbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbbaaaaabbaaaaaaaaabbbaaaabbbbbabaaaabbbbbbbaaaaaabaaabbbabbbbaaa + baabbbbbbbbbaaaabbbaaaabbbbbaaaabbbbaaaabbbbaabaaaabbbbbabbaaaabbbbbbaaaaaaaaaabbbabbbbaaa + baabbbbaaaaaaaabbbbaaaabbbbbaaaaabbaaaabbaabbbbaaabbbbbaabbaaaabbbbbbaaaabbaaaabbbbbbbbaaa + baabbaaaaaaaaabbbbaaaaabbbbbaaaabbbaaaaaabbbbaaaaabbbbbaabbaaaabbbbbbaaaabbbaaaabbbbbbbbaa + baabaaaaaaaaabbbbbaabaaabbbbaaaabbbbaaabbbbbabbaaabbbbaaabbaaaabbbbbaaaaabbbaaaaabbabbbbaa + abaaaabbbaaabbbbbbaabaaabbbbaaaabbbbaaaaaabbbaaaaabbbbaaabbaaaabbbbbaaaaabbbbaaaaaaaabbbaa + abaaabbbbbaabbbbbaabbaaabbbbaaaabbbbaaaabbbbabaaaabbbbaabbbaaaabbbbbaaababbbbbaaaaaaabbbaa + abaaabbbbbaabbbbbaabbaaabbbbaaaabbbbbaaaaabbbbaaaabbbbaaabbaaaabbbbbaabbaabbbbbaaaaaaaabba + abaabbbbbbaabbbbbaabbbaabbbbaaaabbbbaaaabbbbaaaaabbbbaaaabbaaaabbbbaaaabaabbbbbbaabaaaaaba + abbbbbbbbaaaabbbbaabbbaaabbbaaaabbbbaaaabaabbbaaabbbbaaabbaaaaabbbbaaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbaabbaaaabbbaaaabbbbbaaabbbbaaaaabbbaaaabbaaaaabbbbaaabbbaabbbbbabbbbbaaba + abbbbbbbbbaaabbbaabbaaabbbbbaaaaabbbbaaabbaabaaabaaaaaaaabaaaaabbbbaaabbbaabbbbaaababbbbaa + abbbbbbbbbaaabbbaabbaaabbbbbaaaaabbbaaaaabbbbaaabbaabbaaaaaaaaabbbbabaabbaabbbaaabbbbbbbba + abaabbbbbaaaabbbaabbaaabbbbbaaaaabbbbaaabbbaaaaabaaabbaaaaaaaaabbbbbbaabbbabbbaaabbaabbbba + abaabbbaaaabaaabaabaaaabbbbbaaaabbbbbaaaaabbbaaaaaaabbbbbbaaaaaabbbbbaabbbabbbbaabbabbbbba + abaabbbaaabbbaaaaaaaabbabbbaaaaaabbbbaaabbbbaaaaaaaabbbbbbaaaaaabbbbaaaabbabbbbaaabbbbbbba + abbaabaaaabbbaaaaaaabbbbbbbaaaaaabbbbaaaaabbbaaaaaaabbbbbbaaaaaaabbbabaaababbaabaaaabbbaaa + bbbaabaaabbbbaaaaaaabbbbbbbaaaaaabbbbaaaabbbaaaaaaaabbbbbbaaaaaaabbbbbbaaaaaaaabbaaabbbaaa + abbbaaaaabbbbaaaaaabbbbbbbbaaaaaabbbbaaaaabaaaaaaaaabbbbbbaaaaaaabbbbbbbaaaaaabbbaaaabbaaa + abbbbaabbbbbbbbaaabbbbbbbbbaaaaaaabbbaaaabbbaaabaaaaabbbbbaaaaaaaabbbbbbaaaaaabbbbaaabaabb + aaaaaaabbaabbbbaabbbbbbbbbbaaaaaaaaaaaaaabbaaaabbaaaabbbbbaaaaaaaabbbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaaabbbaaaaaaaaaaaaaabbbaaabbbaaaabbbbaaabaaaabbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbbbbaaaaaaaaaaaaabbbbaaabbbbaaaabbbaaaaaaaabbbbaabbaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbbbaaaaaaaaabaaaabbaaababbaaaabbbaaaaaaaabbbbbbbbaaaaaaaaaaaabaaa + abbbaaabbbbbbbbaaaabbbbbbbbbbaaaaabbbbbaabbbaaaaabbaaaaabaaaaaaaaabbbbbbbbaaabbbbbbaaaabbb + abbbaaabbbbbbbaaaaabbbbaabbbaaaabbbbbbaaaabbaaaaaabaaaaaaaaabaaaaabbbbbbbaaaabbbbbbbaaabba + abbbaaabbbbabbaaaaaabbbaabbbaaaabbbbbbbaaabbaaaaabaaaaaaabaabaaaaabbbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbabbbbbaaaabbbbbbaaabbaaabbbaaaaaaababbaaaaabbbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaabaabbbbbaaaabbbbbbaabbbaaabbaaabbaaaaabbaaaabbbbbbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaabbbbbbbaaabbbbbbaabbbaaaaaaabbbaaaaaaaaaaabbbbbaaaaaaabbbbbbbaaabbb + abbbaaabbbbbbbaabbbaaaabbbbbbbbaaabbbbaaaabbaaabbaaabbaaaaaaaaaabbbbbaaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbbbaabbbbabbbbbaabbbbaaaabbaaabbaaaaaaaaaabbaabbbbbbaabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaabbbaabbbbaabbbbbabbbbaaaabbaaabbbaaaaaaaaabbbbbbbbbbbbbbbbaabbbbbbbaaabbb + abbaaabbbbbbbbaaabbbaabbbbaabbbbbbaaaaaaaabbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaaabaaaabbaaabbaaabbbbaaabbbbbbbaaaaaabbaaaabbabbbbaaaabbbbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbaaaaabaaabaaaaabbbaaabbbbbaaaaaaaabbaaabbabbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbbabbaaaaabbbaaabbbbaaaaaaaaabbaaabbbbbbbbbaaaabbbbbbbbbbabbbbaabaaaaaaaaaaba + abbbaabbbbbbbbbaabaabaabbbaaabbbbaaaaaaaaabbaaabbabbbbbaaaaabbbbbbbbbbaabbbaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbaaaaaaabbbbaaaaaaaaabbaaaababbbbbaaaaabbbbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaabbaabbbbaabaaaaaabbaaaaaabbabbaaaaabbbbbbbbbbbbbabaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaabaaabbbbaabaaaaaabbaaaaaaabaaaaaaaabbbbbbbbbbbbbabaabbbbbbbbbabba + abbaaabbbbbbbbaaaabbbbbaaaaabbbbaaaaaaaaaabbaaaaaaabbaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbaaaabbbbaaaaaaaaaabbaaaaaabbbaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaabbbbaabaaaaabbbbaaaaaaaaaabbaaaaaabbbabaaaaabbbbbbbbbbbbbbbaabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbaabbbbbaaaaaabaaabbaaabbaaababbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbaabbbbbbbbbaabbbbbbbbbaabbbbbaaaaaaaaaabaaaabbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbaaabaaaaaaaaaaaaaaaaaaabbbbbbaaaaaaaaabbaaaabbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaba`, + map `abbbbbbbbbaaabbbbbabbbbbbbbaaaaaaabbbbbbbabbaaaabbbbbbbbbaaaaaabbbbaaababbbbbbbbbbaabbbbba + abbbbbbbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbabbaaabbbbbbbabbaaaaaaabbbaaaaabbbbbbbbbbaabbbbba + abbbbbbbbbaaaaaaaaabbbbbbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaaabbbbbbabbbbbbbbbbaabbbbba + abbbbbbbbbaaaaaaaaaaaaabbbbaaaaaabbbbbaaabbaaaaabbbbbbbbbbaaaaaaabbbbbbbaaabbabbbbaaabbbba + abbbbbbbbbaaaabbaaaaaaaaaaaabaabbbbbbaaaaaaaaaaaaaabaabbbbbaaaaaabbbbbbbbbabbbbbbbaaabbbba + abbbbbbbbaaaabbbabbbaaaaaaaabbabaaaaaaaaaaababbbbaaaaaabbbbbaaaaabbbbbabbaaabbbbbbaaabbbba + abbbbbaaaaaabbbaabbbaaaaaaaaabbbaaaaaabbaabbbbbbbbbbbaaaaabbaaabaaaaaaaaaaaaaabbbbaaabbbba + abbbbbaaaaabbbbaabbbbbbbbabaaabbbaaaaabbbbbbbbbbbbbbbaaaaaaaaaabaaaaaaaaaaaaaabbbbaabbbbba + abbbbbaaaaabbbaaabbbbbbbbbbbaabbbbbbbaabbbbbbbaabbbbbaaaaaaaaaabaaaaaaabbbaabbbbbaaabbbbba + abbbbbaabbbbbaaaabbbbbbbbbbbbaabbbbbbbabbbaaaaaaaabbbbaabbbaaaaaaaabbbabbbbabbbbaaaabbbbba + abbbaaabbbbbbaaaabbbbbbbbbbbaabbbbbbbbabbbaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbabbbaaaaabbbbba + abbbaaabbbbbbaaabbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbaabbbaaaabbbbba + abbaaaaabbbbaaabbbbbbbbbbbaaaaaabbbbbbbbbaaaaaaaaaaabbbbbbaaaaaabbbbbbabbbaaaabbaaaaabbbba + abaaabaaabbbaaabbbbbbbbbaaabbaabbaaaaabbbaaaaaaaaaaabbbbbaaaaaaaabbbbbbbbbaaaaabbbaaabbbba + ababbbbaaabaaaabbbbabbbaaaabbaabbbaaaabbaabbbbbbaaaabbbaaaabaaaaaaabbbbbbbbaaaabbbbaabbbba + aabbbbbbaaaaaabbbbbaaaaaaabbbaabbbaabbbaabbbbbbbbbaabbaaaabbbaaaaaaabbbbbbbbaaabbbbbabbbba + aabbbbbbaaaaabbbbbbaaaaaaabbaaabbaabbbbaabbbbbbbbbaabbbaaabbbaaabaaaabbbbbbbbaabbbaaabbbba + abbbbbbbaaaabbbbbbaaaaaaaabbaaaaaaabbbbaababbbbbbbaabbbbaaabbaaabaaaaaaabbbbbaaabbaabbbbba + abbbbbbbbaaabbbbbaaaabaaabbbaaaaaaabbbbaaaaabbbbbbaabbbbbaaabaabbbaaaaaabbbbbaaaaaaabbbbba + abbbbbbbbaaabbbbaaaabbbaabbbaaaaabbbbbbaaaaaababbbaabbbbbaaaaaaabbbaaaaaabbbbaaaaaabbbbaba + abbbbbbbbbaabbbaaaaabbbbaabbaaaabbbbbbbbaaaaabaaaaaabbbbbbbaaaaabbbaaaaaaabbbbaaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbbabbbaaabbbbbbabbaaaabbaaaabbbbbbbbbaaaabbaaabbaaaabbbbaaaabbbbbba + abbbbbbbbbaaaaaaaaabbbbbaaabaaaaabbbbbaabaaaabbbbbabbbbbbbbbaaaabbaabbbbaaaabbbaaabbbbbbba + abbbbbbbbbaaaaabaaabbbbaaaaaaaaaabbbbbaabaaaabbbbbabbbbbbbbaaaaabbaabbbbaaaaabbaabbbbbbbba + abbbbbbbbbaaaaabbbaabbbaabbaaaaabbbbbbbabaaaaaabbaabbbbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbba + abbbbbbbbbaabbabbbaaabaaabbaaaaabbbbbbbabaaaabbbbaabbbbbbbbaaaaaabaaabbbbaaaaaaabbbbbbbbba + abbbbbbbbbaabbaabbaaaaaabbbbaaaaabbbbbbbbaaaabbbaabbbbbbbbbbaaaaabbaabbaaabbbaaaabbbbbbbba + abbbbbbbbaaabbaabaabaaaabbbbaaaaaaabbbbbbaaaaabbababbbbbbbbaaaaaabbaabbaaabbaabaaabbbbbbba + abbbbbbbbaaabbaaaaabbaabbbbbaaabaaabbbbbbaaaabbbbbaabbbbbaaaaaaabbbbaaaaaabbaabaaabbbbbbba + abbbbbbbaaabbbbaaabbbbaabbbbaaabbaabbbbbbaaabbbabbaabbbbbaaaaaaabbbbaaabaabaabbaabbbbbbbba + abbbbbaaaaabbbbbaabbbbaabbbbaaabbaaabbbbaaaabbbabbaabbbbbaabbaaabbbbaabbaaaaabbaabbbbbbbba + abbbbbaaaabbbbbbaabbbbaabbbbaaabbbaaaabbaaaaaaaabbbabbbbaaabbaaabbbbabbbbaaaabbbaabbbbbbba + abbbbaaaaaaaaaaaaaabbbaabbbbaabbbbaaaabbaaaaaaabbbbbabaaaaabbaaabbbbabbbbaaabbbbaaabbbbbba + abbbaaaaaaaaaaaaaaabbbbabbbbaabbababbbbbaaaabbbbbabbbbaaaaabbaaabbbbabbbbaabbbbbaaaabbbbba + aabbaaaaaaaaaaaaaaaabbbabbbbaabbbbbbbbbbabbbbbbbbaabbbbbaaaabaaabbbbabbbbaaabbaaaaaaabbbba + aabaabbbbaabbbaabbaabbbaabbaaabbbbbbbabbaaaaabbbbaaabbbbbbbbaaaabbbbabbbbaaaaaaaaaaaabbbba + bbbaabbbbbbbbbaabbaabbbaabbaabbbbbbaaabbaaaaaabbbaaaabbbbbbbbaaaabbaabbbaaaaaaaaaaaaaabbba + bbaabbbbbbbbbbaabbaaabbaabbabbbbbbaaaabbaaaaaabbbaaaaaabbbbbbbaabbbaabbbaaaaabbbaaaaaaabba + bbaabbbbbbbbbaaabbbaabbaaaabbbbbbaaaaabbbaaaaabbbaaaaaaaabbbbbbaabbabbbbaabaabbbbbbbbaaaba + bbaabbbbbbbbbaabbbbaabbbbaabbbaaaaaaaabbbaaaabbbbaaaaaaaaabbbbbbabaaabbaabbaabbbbbbbbbaaaa + abaabbbbabbbbaabbbaaaaabbbbbaaaaaaaaabbbbbaaabbbaaaaaaaaaaaabbbbbaaaabbaabbbaabbbbbbbbbaaa + aaaabbbbbbbbbaaaaaaaaaabbbbbaaaaaaaaaabbbbaaabbbaaaaaaaaaaaaabbbbaaaaaaabbbbaaabbbbbbbbaaa + baabbbbbbbbbbaaaaaaaaabbbbbbaaaaaaaaaaaaaaaabbbaaaaaaabbaaaaaabbabbbaaaaabbbaabbbbabbbbaba + baabbbbbbbbbbaaabbaaaabbbbbbaaaaaaaaaaabbbaaabbaaaabbbbbaaaaaabbbbbbbaaaaaabaabbbbabbbbaaa + baabbbbbbbbbaaaabbaaaaabbbbbaaaabbbaaaabaaabbbbaaaabbbbbabaaaabbbbbbbaaaaaaaaabbbbabbbbaaa + baabbbbaaaaaaaabbbaaaaabbbbaaaaabbbaaaabbbbbaaaaaabbbbababaaaabbbbbbbaaaabbaaabbbbabbbbaaa + baabbaaaaaaaaabbbbaaaaabbbbaaaaabbbaaaabbabbbbaaaabbbbaaabaaaabbbbbbbaaaabbbaaabbbbbbbbbaa + baabaaaaaaaaabbbbbaabaaabbbbaaaabbbaaaaaabbbbaaaaabbbbaabbaaaabbbbbbaaaaabbbaaaabbbabbbbaa + abaaaabbbaaabbbbbbaabaaabbbaaaaabbbbaaabbbbbabaaaabbbaaabbaaaabbbbbbaaaaabbbbaaaaaaabbbbaa + abaaabbbbbaabbbbbaabbaaabbbaaaaabbbbaaaaaabbbaaaaabbbaaabbaaaabbbbbbaaababbbbbaaaaaaabbbaa + abaaabbbbbaabbbbbaabbaaabbbaaaaabbbbaaabbbbbabaaabbbbaabbbaaaabbbbbbaabbaabbbbbaaaaaaaabba + abaabbbbbbaabbbbbaabbbaabbbaaaabbbbbaaaaaabbbbaaabbbbaabbbaaaabbbbbbaabbaabbbbbbaabaaaaaba + abbbbbbbbaaaabbbbaabbbaabbbaaaabbbbbaaabbbbbaaaaabbbaaabbbaaaaabbbbbaabbbabbbbbbabbbbbaaba + abbbbbbbbbaaabbbbaabbaabbbbaaaabbbbbaaaaaaabbaaabbbbaaabbaaaaaabbbbaaabbbaabbbbbabbbbbaaba + abbbbbbbbbaaabbbaabbaabbbbbaaaaaabbbaaaabbbbaaaabbbaaaaabaaaaaabbbbaaabbbaabbbbaaababbbbaa + abbbbbbbbbaaabbbaabbaabbbbbaaaaaabbbbaaabababaaabaaabaaaaaaaaaabbbbabaabbaabbbaaabbbbbbbba + abaabbbbbaaaabbbaabbaaabbbbaaaaabbbbaaaabbbbbaaaaaaabbaaaaaaaaabbbaabaabbaabbbaaabbaabbbba + abaabbbaaaabaaabaabaaaabbbbaaaaabbbbaaaabbaaaaaaaaaabbaaaaaaaaabbbabbaabbbabbbaaabbabbbbba + abaabbbaaabbbaaaaaaaabbbbbbaaaaabbbbbaaabbbbbaaaaaaabbbbbaaaaaabbbabaaaabbabbbbaaabbbbbbba + abbaabaaaabbbaaaaaaabbbbbbbaaaaabbbbbaaabbbbaaaaaaabbbbbbaaaaaabbbababaaababbaabaaaabbbaaa + bbbaabaaabbbbaaaaaaabbbbbbaaaaaabbbbbaaaaabbaaaaaaaabbbbbaaaaaabbbaabbbaaaaaaaabbaaabbbaaa + abbbaaaaabbbbaaaaaabbbbbbbaaaaaaabbbbaaabbbbaaaaaaabbbbbbbaaaaabbbaabbbbaaaaaabbbaaabbaabb + abbbbaabbbbbbbbaaabbbbbbbbaaaaaaabbbbaaaabbaaaaaaaaabbbbbbaaaaaabbabbbbbaaaaabbbbbaaabaabb + aaaaaaabbaabbbbaabbbbbbbbbaaaaaaabbbbaaaabbbaaabaaaabbbbbbaaaaaabbabbbbbbaaaabbbbbaaaaabbb + abbbaaaaaaaaaaaaabaaaaabbbaaaaaaaabbbaaaabbaaaabbaaaabbbbaaaaaaabbbbbbbbbbaaabbbbbbaaabbbb + abbbaaabbbbbbbaaabbbbbbbbbaaaaaaabbbaaaaaabbaaabbbaaaabbbaaaaaaabbbaaaaabbaaabbbbbbaaabbba + abbbaaabbbbbbbbaaabbbbbbbbaaaaaaaaaabbaabbbbaaaaabaaabbbbaaaaaaabbbbbbbbbbaaaaaaaaaaaaaaaa + abbbaaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaabbbaaaaabaaaabbaaaaaaaabbbbbbbbbbaaabbbbbbbaaabbb + abbbaaabbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaaabbbaaaaabaaaaabaaaaaaaabbbbbbbbbaaaabbbbbbbaaabba + abbbaaabbbbabbaaaaaabbbbbbbbaaaaaaaaaaaabbbbaaaabbaaaaaaaaaaaaabbbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaabbbbbbbaaaabbbbbaaaaabbbaaabbbbaaaabaaaaaaabbbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaababbbbaaabbbbbbaaaaabbbaaabbbbbaaabaabaaaabbbbaabbbaaaaabbbbbbbaaabba + abbbaaabbbbbbbaaabaaaaabbbbbaabbbbbbaaaaabbbaaaaabbbbaababbaaaabbbbaabbaaaaaabbbbbbbaaabbb + abbbaaabbbbbbbaabbbaaaabbbbbaaabbbbbaaaaabbbaaababbbbaaaaaaaaabbbbbbbaaabbbaabbbbbbbaaabbb + abbbaabbbbbbbbaabbbbaabbbbbbaaabbbbbbaaaabbbaaabaaaabaaaaaaaaabbbbbbbaabbbbaabbbbbbbaaabbb + abbbaabbbbbbbbaaabbbaabbbbbbbaaaabbbbaaaaabbaaabbbaaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbaaabbb + abbaaabbbbbbbbaaabbbaabbbbbbbbaaabbbaaaaaabbaaabbbbbaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbaabbb + abbbaaabaaaabbaaabbaaabbbbbbbbbaabbbaaaaaabbaaabbabbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbaaaaabaabbaaaaabbbbbbbbbabbbaaaabbbbaaaaabbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbaabbb + abbbaabbbbbbbbaabbaaaaabbbbabbbbabbbaaaabbbbaaaabbbbbbaaabbbbbbbbbbbbbaabbbaabaaaaaaaaaaba + abbbaabbbbbbbbaabbaabaabbbabbbbbaabaaaaabbbbaaaabbbbbaaaabbbbbbbbbbbbbaabbbaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaaaabbbbbaaaaaaaaaabbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbaabbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaabbbbbbbaaaaaaaaaabbaaaabbbbaaaaaabbbbbbbbbbbbbbbababbbbbbbbbaabba + abbaaabbbbbbbbaaaaabbbbaaaabbbbaaaaaaaaaaabbaaaaababaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbabba + abbaaabbbbbbbbaaaabbbbbaaaabbbbaaaaaaabaaabbaaaaaabbaaaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbabba + abbaaabbbbbbbbaaabbbbbbbaaabbbbaaaaabbbaaabbaaaaaabbaaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbabba + abbaaabbbbbbbbaabbbbaabaaaabbbbaaaabbbaaaabbaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbabba + abbaabbbbbbbbbaabbbbbbbbbabbbbbaaaaababaaabbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbaabbbbbbbbbaabbbbbbbbbabbbbaaaaaabaaaabbbaaaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbaaabaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbaaaababbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaba`, + map `abbbbbaaababbbbbbbbaaaaabbbbbbbbabbbbbbaaaabbbbbabbbabbbbbbaaaabbbbbbabbbbbabbbbaabbbbabba + abbbbbbaababbbbbbbbbaaaabbbbbbbbabbbbbbaaaabbbbbabbbabbbbbbaaaabbbbbbabbbbbabbbbaabbbbabba + abbbbbaaababbbbbbbbaaaaabbbbbbbbabbbbbaaaaabbabbaabbabbbbbbaaaabbbbbaabbbbbabbbbaaabbbabba + abbbbbaabbabbbbbabbaaaaabbbbaaababbbbbaaaabbbabbaabbbbbbbbbaaaabbbbaaabbabbabbbaaaabbbbbba + abbbbbaabbabbbbbbbbaaaabbbbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbaabbabbbbbbaaaabbbbbba + abbbbbaabaabbbbbbbbaaaabbbbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbabbbabbaaaabbbbbba + abbbaaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbabbabbbabbaaaabbbbbbbbbbabbbbbbbbbbbbbaabaaaabbbbbba + abbbbaaaaaaabaaaabbaaaabbbbbaabbbbbbbbabbbbbaabbbaaaaabbbbbbbbbbbbbbabbbabbbbbbaaaabbbbbba + abbbbaaaaaabbbbbbbaaaaabbbbbaabbbbbbbbbbbbbaabbbbaaaaaaaaaabbbbbbbbbbbbbabaabbbaaaabbbabba + abbbaaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbaaaabaabbbaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbaabaabbbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbaaaaabbaaabbaaabaaaabbbbbbbbbbbbbbbaaabbbbbbba + abbbaaaaaabbbbbbbbaaaaabbaabbabbbbaaabbbbbbbaaaabbbabbbbbaabaaaaaabbbbbbbbbbbbbaaaabbbbbba + abaaabbbaabbbaabbbaaaaaaaaaaaaaaaaaaabbbbbbbaabbbbaaaabbaaaabaaaaaaabbaaaaaaaabaaaabbbbbba + ababbbbaaabbbbbbbbaaaaaaaaaaaabbaababbabbbabaaabbaaaaaabaaaaaaaabaaabbbbaaaaaaabbaabbbbbba + abbbbaaaabbbbbbbbbaaaabbbbbbbabbbbbbbbaabaaaaaaaaaaaaaaabbaaaaabbbaaabbbbbbbbaabbbababbbba + abbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbaaabaaaaaaaaaaaaaaabbaaaaabbbaaaabbbbbbbaabbbabbbbbba + abbbbbaaabbbbaabbaaaabbbbbbbbbbbabbbbaaaaaaaaaaaaaaaaaaabbbaabbbbbaaaaabbbbbbabbbbabbbbbba + abbbbbbaabbbbbabbaaabbbbbbbbbbbbabaaaaaaaaaaaaaaaabbbbabbbbbbbbbbbaaaaabbbbbbabbbabbbbbbba + abbbbbbabbbbbbbbbaaabbbbbabbbbbaaaaaaaaaaaaaabbbaabbbbbbbbbbabbaaabbaaaabbbbbabbaaabbbbbba + abbbbbbabbbbbbbbbaaabbbbbbbbbbaaaaaabbaabababbbbbbbbbbbbbbbaaabaabbbaaaabbbbbbbbaaabbbbbba + abbbbbbabbbbbbbbbaaaabbbaabbbbaaaaaabbbbbabbbbbbbbabbbbbbbbaaabbabaabbaaabbbbbbbaaabbbbbba + abbbbbaaaaaaaaaaaaaaabbbaabbbbbaaaaaabbbbbbbbbbbbaaaaaaaabbaabbbaaaabbaaaabbbbbaaabbbbbbba + abbbbbbbbbbbbbbbaaaabbbbabbbbbbaaaaaaaabbbbbbbbbbaaaaaaaabbaabbbaaabaaaaaabbbbaaaaabbbbbba + abbbbbbbbbbbbbbbaaaabbbaabbbbabbaaaaaaaaaaabbbbbbaaabbaaabbaaaaaaabaaaaaaaabbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaabaaaabbbbaabbbaaaaaaaaabbbbbaaaaaaaabbbbbaaaaabbaaaaaaabbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaaaaaaaabbbbabaaaaaaabaaabbbbbaaaaaaaabbbbbbaaaabaaaaaaaabbbbaaaabbbbbba + abbbbaabbbabbbbaaaabbaaaaaabbbaaaaaaabbbaaabbbabaaaaaaaaabaabbaaaabaaaaaaabbbbaaaaabbbbbba + abbbbaabbbbbbbbaaabbaaaaabbbbbaaaaaaabbbaaabbaabaaaaaaaaaaaaabbaaaaaaaaaaabbbbaaaabbbbbbba + abbbbaabbbbbbbbaaaabaaaaabbbbbaaaaaaaaabaaabbaaaaaaaaaaaaaaaabbbbaaaaaaababbbbbaaabbbbbbba + abbbbaabbbbbbbbaaaabbaaaabbbbbbaaaaaaaabaaaabaaaaaaaaaaaaaaaabbbbaaaaaaaaabbbbbaaabbbbbbba + abbbaaabbbbbbbbaaaabbaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbabbbaaaaaaaabbbbaaaabbbbbbbb + abbbbaabbbbbbbbaaaabaaaabbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbaaaaaaaabbbbbaaabbbbbbba + abbbaaabbbbbbbbaaaaaaaaabbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbaaabbbbbbba + abbbbbbbbbbbbbbaaaaabbaaabbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbaaabbbbbbba + abbbaabbbbbbbbbaaaabbbbbbaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbaaabbbbbbba + abbbaaaaaaaaaaaaaabbbbbbbbbbbbbaaababbbbbbbbaabbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbaaaabbbbbbba + abbbabbbbbbbbbaaaaabbabaabbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaabbbbaaabbbbbbbba + abbbabbbbbbbbbaaaabbbaaaaaaaabbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaabbbbbaabbaabbbba + abbbabbbbaabbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbabaaaaaaaabbbbaaabaaaabbba + abbaabbbbbbaaaaaaaabaaaaaaaabbbaaabbabaabbbbbbbbaaabbbbabbbbbbbbabaaaaaaabbbbbaaabababbbba + abbaabbbbbbbbbaaaaabbbbbbbbbbbbaaabbabaabbbbbbbaaaabbbbabbbbbbbbabaaaaaaabbbbbbaaabbbbbbba + abbaabbbaaabbbaaaabbbaaaabaabbbaabbaabbbbbbbbbbbaaabbbbbbbbbbbbbabaaaaaaabbbbbaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbaabbaaaabbbbbbbbbaaabbbbbbabbbbbbabaaabbaaabbbbbaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbaabbaaabbbbbbbbabaaabbbbbbabbbbbbbbaaabaababbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbabbaaaabbbbbbbabaaabbbbbbabbbbbbbbaaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbabbaaaabbbbbbbbbaabbbbbbbabbbbbbbbaaaaaaaabbbbaaabbbbbbbba + abbabbbbbbbbbaaaabbbaaaaaaabbbbbaabaaaabbbbbbbbbabbbbbbbbbbbbbbbbbaaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbaabaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbaaaaaaabbbbaaaabbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbbbbbbbbabbaabbbbbbbbababbbbbbbbbbbbbbbbbbaaaaaaabbbbaaabbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbaaabbbbbbbba + abaaaaaaaaabaaaaabbbbbbbbbabbbbbbabbaaaaaaabbbbbbabbbaaaabbbbbbbbbbaaaaaaabbbbaaaabbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaabbabaaaaaaaaabbbaaaaaaaaaaaaabbbbbbbaaaaaabbbbbaaaabbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaabbbaaaaaaaaaaaaaaaabbbbaaaaaaaabbbbaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbbaaaabaaaaabbaaaaaaaaaaaaaaaaabbbbaaaaabaaabbbaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbaabbbaaaaabbbbbbbaabbbbbbaabbbbbabbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbbaaaabbbbbaaabbbbaaaaabbbbbbbbbbbbbbaabbbbbabbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbabbabbbbbaaaaaaaaaaaabbbbaaaaaaaabbbbbbbbbbaabbbbbabbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbbbbaaaaaaaaaaabbbbaaaaaaabbbbbbbbbbbabbaaaaabbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbbbbaaaaaaaaaaabbbbbaaaaabbbbbbbbbbbbbbbaaaaabbbaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbbbbaaaaaabbaaabbbbbaaaabbbbbbbbbbbbbbbbaaaaabbbaabbbbbbbba + ababbbbbbbbaaaabbbbbbabbbbbbabbbbbbaaaabbbbaaabbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbbbabbbbbbaaaabbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbaaabbbaaabbbbbbbba + abbbbbbbbbbaaaabbbbbbabbbbbbabbbbbbaaaaabbaaaabbbbbbbaaabbbbbbbbbbbbbbbaaaabbbaaabbbbbbbba + abbbbbbbbbbaaaabbbbbbbbbbbbbbbbabbbaaaabbbaaabbbbbbaaaaababbbbbbbbbbbbbaaabbbaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbaaaabbbaaabbbbbbaaaaababbbbbbbbbbbbaaaabbbaaaabbbbbbbba + aabaaaabbbaaaaabbbbbbbbbbbbbbbbabbbaaaabbbaaabbbbbbaaabbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbba + aabbbaaaaaaaaaabaabbbbbbbbbbbbbabbbaaaabaaaaabbbbbbaaababbbbbbbbbbbbbaaaabbbbaaaabbbabbbba + abbabbbbbbbaaabbbbaaaaaaaaaaabbabbbaaaabbaaaabbbbbbaaababbbbbbbbbbbbaaaaabbbbaaaabbbbbbbba + abbbaaaabaaaaabbbbbbbbbbbaaaabbabbbaaaaaaaaaabbbbbbaaaaabbbbbbbbbbbaaaabbbbbbaaaabbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaabbbaaaabaaaabbaaabaaaaabbbbbbbbbbbaaabbbbbbbaaaabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbaaaaabbaaabbbaaaabaaaabbaaabbaaaabbbbbbbbbbbbabbbbbbbaaaaabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbabbbbbbbaabbbaaaabbaaaaabbbbbaaaabbbbbbbbbbaaabbaaabaaaaaabbbbbbbba + abbbbbbbbaaaaabbbbbabbbabbbbbbaaabbbaaaabbbbbaabbbbbbbaaabbbbbbbbabbbbbbbbbbbaabbbaaabbbba + abbbbbbbbaaaabbbbbbabbabbbabbbaaaabbaaaabbbbbaabbbbbbbaaaabbbbbbbabaabbbbbbbbaaabbbbaabbba + abbbbbbbbaaaabbbbbbabbabbbabbbaaaabbbaaaabbbaaabbbbbbbbbbabbbbbbaabaabbbbbbbaaaabbbbaabbba + abbbbbbbbaaaabbbbbbabbabbbabbbaaaabbbbaaabaaaaabbbbbbbbbbbbbbbbbabbaabbbbbbbaaaabbbbaabbba + abbbbbbbbaaaabbbabbbbbbbbbabbbaaaabbbaaaabbbbbbbbbbbbbaabbbbbbbbabaaabbbabbbaaaabbbbbabbba + abbbbbbbbaaaabbbabbbbbbbbbabbbaaaabbbaaaaabbbbbbbbbbaaaabbbbbbbbabaaabbbabbbaaaabbbbbabbba + bbbbbbbbaaaaabbaaaababaabbbbbaaaaabbbbbaabaaaabaaaaaaaaaaabbbbbbaaaaabbbbbbbaaaaabbbbabbba + bbbbbbbbaaaabbbbbbabbbabbbbbbaaaaabbbbaabaaaaabababbbbaaaabbbbbbabaabbbbbbbbaaaaaabaaabbbb + abbbbbbbaaaaabbbbbaabbbbbbbbbaaaaabbbbaaabbaaabababbbbbaaabbbbbbabaabbbbbbbbaaaabbbaaabbba + aabbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbaaaabbaaabababbbbbbaaabbbabbaaabbbbbbbbaaaabbbbbbbbba + abbaaaabaaaaabbabbaabbbbbbbbbaaaaabbbbaaababaababaabbbbbbabbbbabbaaabbbbbbbbaaaabbbbbbbbba + abbbbbbaaaaaabbaaaaaaabbbbbbbaaaaabbbbaaaabaaabbbaaabbbbbbbbbbabbbaabbbbbbbbaaaabbbbbabbba + abbbbbbaaaaabbbbbbbbaaaaaaabbaaaabbbbbaaaaaaaabbbaaabbbbbbbbbbabbbaabbbbbbbbabaabbbbaabbbb + abbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaaaaaaaaabbbaaabbbbbbbbbbbbbbaaabbbbbbbababbbbbbaabbb + abbabbbaaaaabbbbbbbbbabbbbbbaaaaabbbbbaaaaaaabbbbaabbbbbbbbbbbbbbbaabbbbbbbbababbbbbbbabbb + abbabbbaaaaabbbbbbbbbabbabbbbaaaabbbbbaaaaaaaababaabbbbbbabbbbbbbbaababbbbabbbbbbbbbbbbbbb + abbabbbaaaaabbbbbabbbaababbbaaaaabbbbaaaaaaaaababaabbbbbaabbbbbbbbbabaabbbaabbbbbbbbbbbbba + abbbbbbaaaaabbbbbabbbabbabbbaaaaabbbbaaaaaaaaabbbaabbbbbaabbbbbbbbbabaabbbaabbbbbbbbbbbbba`, + map `abbbbbaaababbabbbbbaaaaabbbbbbbbabbbbbbaaaabbbbbbabbbbbbbbbaaaabbbbbbabbbbbabbbbaabbbbabba + abbbbbbaababbbbbbbbbaaaabbbbbbbbabbbbbaaaabbbbbbbabbbbbbbbbaaaabbbbbbabbbbbbbbbbaabbbbabba + abbbbbaaababbbbbbbbaaaaabbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbabbbbaaabbbabba + abbbbbaabbabbbbaabbaaaaabbabaaababbbbbaaaabbbabbbbbbbbbbbbbbbbbbbbbbaabbabbaabbaaaabbbbbba + abbbbbaabbabbbbbbbbaaaabbbbbaabbbbbbbbabbbbbbaabaaaaaaabbbbbbbbbbbbbaabbabbaabbaaaabbbbbba + abbbbbaabaabbbbbbbbaaaabbbbbabbbbbbbbbbbbbbaabbbaaaaaaaabbaaabbbbbbbbbbbbbbbabbaaaabbbbbba + abbbaaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbaaaaaaabbbaabaaabbaaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbaaaaabbaaaaabbaaaabbbbbabbbbbbbbaabbaabaaaaabaaaaaaabbaaaaaabbbbbbbbbbbbbbaaaabbbbbba + abbbbaaaaabbbbbbbbaaaaabbbbbaabbbbbbaabbbbbaaaaabbabbbaaabbbbaaaaabbbbbbbbbbbbbaaaabbbbbba + abbbaaaaaabbbbbbbbaaaaabbbbbbbbbbbbaabbbbbaaaaabbabbbbaaabaaaaaaaaaababbbbbbbbbaaaabbbabba + abbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaabbbbaaabbaaaaaaaaaaaaaabaaabbbbbbbaaabbbbbbba + abbbaaaaabbbbbbbbbaaaaabbbabbbbbbbbbbabbbbaaabbaaaaaabaaaaaaaaaabbaabbaaabbbbbbaaaabbbbbba + abaaabbaaabbababbbaaaaaaaaaaaabaabbbaabbaaaaaaaaaaaaaabaaaaaaaaabaaaaabaabbabbbbaaabbbbbba + ababbbbaabbbbbbbbbaaaaaaaaaaabbbbbbbaabaaaaaaaaaaaaaaabaaabaabbbbaaaaaabaabbbaabbaabbbbbba + abbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbaaabaabbbbbbbabbbabbbbbba + abbbbbbaabbbbbabbaaaaabbbbbbbbbabaaaaaaaaaaaaaaabbbabbbbbbbbbbbbaabbbaaabbbbbbbbbbbbbbbbba + abbbbbaaabbbbbabbaaaaabbbbbbbbbaaaaaaaabaaabbbaabbbbbbbbbbaaabbaabbbaaaaabbbbbbbbaabbbbbba + abbbbbaaabbbbbabbaaaabbbbbbbbbaaaabbaaaaaabbbbbbbbbbbbbbbbaaabbbbbbaabaaabbbbbbbbaabbbbbba + abbbbbbabbbbbbbbbaaabbbbbbbbbbbaaabbbabaabbbbbbabbbbbbbbbaaabbbbababbbaaaabbbbbbaaabbbbbba + abbbbbbbbbbbbbbbbaaaabbbbabbbbbaaaabbbbbbbbbbbaaaaaaaaabbaaabbbaabbbbbaaaabbbbbbaaabbbbbba + abbbbbbabbbbbbbbaaaabbbbaabbbbbaaaaaabbbbbbbbbbaaaaaaaabbaaabbbaabbaaaaaaaabbbbbaaabbbbbba + abbbbbaaaaaaaaaaaaaabbbbabbbbbbbaaaaaaaabbbbbbaaaabbaabbaaaaaaaabbbaaaaaaaaabbbbbaabbbbbba + abbbbbbbbbbbbbbbaaaabbbaabbbbbbbbaaaaaaabbbbbbaaaaaaaaabbbbbaaaabbaaaaaaaaaabbbbbaabbbbbba + abbbbbbbbbbbbbbbaaaabbaaabbbbbbbbaaaaaaaabbbbbaaaaaaaaaabbbbbaaabbaaaaaaaaaabbbaaaabbbbbba + abbbbaabbbbbbbbbaaaaaaaaaabbbbbbbaaaaaaaabbbbbaaaaaaaaaabbabbaaaabbaaaaaabaabbbaaaabbbbbba + abbbbaabbbabbbbbaaabaaaaaaabbbbbbaaaaabaabbabbbaaaaaaabbaaabbaabaabaaaaaabaabbbaaaabbbbbba + abbbbaabbbbbbbbaaabbbaaaaaabbbbbbaaaaaaaabaaaaaaaaaaaabaaaabbbbbaabaaaaaabaabbbaaaabbbbbba + abbbbaabbbbbbbbbaaabaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbaabaaaaabababbbbaaabbbbbba + abbbbaabbbbbbbbbaaabaaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbabbbbabaaaaaaaabbbbaabbbbbbba + abbbbaabbbbbbbbaaaabbaaaabbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbabbbaaaaaaaaaabbbbaabbbbbbbb + abbbaaabbbbbbbbaaaabbaaabbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaabaaaaaaabbbbaabbbbbbba + abbbbaabbbbbbbbaaaabaaaabbbbbbbabbbbaaabaaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbaabbbbbbba + abbbaabbbbbbbbbaaaaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaababbbbaabbbbbbba + abbbbabbbbbbbbbaaaaaabaaaaabbbabbbbbabbbbbbbabbbbbbbbbbbbbbbbbaaaaaaaaaaaabaabbbaabbbbbbba + abbbaabbbbbbbbaaaaabbbbbbaabbbbbbbbbaabbbbbbbbbbaabbbbbbbbbbbbbaaaaaaaaaaabaabbbaabbbbbbba + abbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbaaaaaaaaaaaaaabbbaabbbbbbba + abbbabbbbbbbbbaaaaabbabaabbbbbbbbbbbaabbbbbbbbbaaaabbbbabbbbbbbaaaaaaaaaaaaabbbbaabbbbbbba + abbbabbbbbbbbbaaaabbbaaaaaaaaaaaabbbaaaabbbbbbbaaaabbbaabbbbbbbbbaaaaaaaaaabbbbbaabbabbbba + abbbabbbbaabbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabbbbbbbbbbbbbbaaaaaaaaaabbbbaaabbaabbba + abbaabbbbbbaaaaaaaabaaaaaaaaaaabbbbaaaaabbbbbbbbaaabbbbaaabbbbaabaabaaaaaabbbbbaaabbbbbbba + abbaabbbabbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbaaabbbbbbabbbbbaaaabbaaaabbbbbbaaabbbbbbba + abbaabbbbaabbbaaaabbbaaaabaabbbbbbaaaaababbbbbbbaabbbbbbbabbbbbaaaabbaaaabbbbbbaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbabaaabbbbaaabbbbbbaaabbbbbaaaabbbaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbabaabbbbbaaabbbbbbaaaabbbbaaaaabbbaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbabbbbbbbabbbbbbbbaaaabaaaaaaabbbaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabbbbbbbbaaaaaaaaaaaabbbaabbbbbbba + abbabbbbbbbbbaaaabbaaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbaabbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbbbaaaaaabbbbbaaaabbaaaabbbbbbbbbbbaaaababbbbbbbabbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbbaaaaaaaabbbaaaaaaaaaaaabbbbbbbbbbaaaaabbbbbbbbabbbbbbbba + abaaaaaaaaabaaaaabbbbbbbbbabbbbbbbaaaaaaaabbbaaaaaaaaaaaaaaabbbbbbbaaaaabbaaabbbbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabbaaabbbaaabbbaaaaaaaaaaaaaaaabbbbbaaaaabbabaabbabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaabbbaaabbbaaaaaabbbbbbaaabbbbbbaaabbbbbbaabbabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbbbaaaaaaaaabbbaaaaaaabbbbbbabbbbbbaaabbbbbbaabbabbbbbbbba + ababbbbbbbbaaaaabbbbbbabbbbbbbbbbbbaaaaaaaaabbbaaaaaaaaaabbbabbbbbbaaabbaaabaabbbbbbbbbbba + ababbbbbbbbaaaaabbbbbaabbbbbbbbbbbbbaaaaaaaabbbaaaaaaaaabbbaabbbbbbbabbbaaabaabbbbbbbbbbba + ababbbbbbbbaaaaabbbbbaabbabbabbbbbbbaaaabaaabbbbaaaaaabbbbbaabbbbbbbbbbbaaaaabbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbaabbaabbabbbaaaabaaabbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbabbbaaaabaaabbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbabbaaaaaaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbaaaabbbbabbbbbbbba + abababbbbbbaaaabbbbbbabbbbbbabbbabbaaaaaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbaabaabbbaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbbaabbbabbaaaaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbaabbbbbbaabbbbbbbba + abbbbbbbbbbaaaabbbbbbabbbbbaabbbabbaaaaaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbaababbbbaabbbbbbbba + abbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbaaaaabaabbbbbbaaaaaaabbbbbbbbbbbbbbaaaabbbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbaaaabbabbbbbbaaaaaabbbbbbbbbbbbbbaaaaabbbaaaabbbbbbbba + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaabbbaaaabbabbbbbbaaaaabbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbba + aabbbaaaabaaaaabaabbbbbbbbbbbbbaabbbaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbaaaaabbbbaaaabbbabbbba + abbabbbbbbaaaabbbbaaaaaaaaaabbbaabbbaaaaaaabbaaabaaaaabbbbbbbbbbbbbbaaaaabbbbaaaabbbbbbbba + abbbaaaabaaaaabbbbbbbbbbbaaaaaaaabbbbaaaaaabaaaabaaaaaabbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaabbbbaaaaaaaabbbbbaaaaabbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbaaaaaaabaaabbbbaaaabbbabbbbbbaaaaabbbbbbbbbbbbaaabbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbabbbbbbaaabbbbaaaaabaaabbbbbbbaaabbbbbbbbbbbbaaabbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbbbbabbbabbbbbbaaaabbbaaaaabaaaabbbbbbbaaabbbbbbbbbbbaaabbbbbaaaabbaaaabbba + abbbbbbbbaaaabbbbbbabbaabbabbbaaaaabbaaaabbbaaabbbbbabbbbbbbbbbbbbbbaaabbbbbaaaabbbbbabbba + abbbbbbbbaaaabbbbbbabbbbbbabbbaaaabbbbaaaabbaaabbbbaaabbbbbbbbbbbbbbaaabbbbbaaaabbbbbabbba + abbbbbbbbaaaabbbabbabbbbbbabbbaaaabbbbaaaaaaaaaabbaaaaabbbbbbbbbbbbbaaabbbbaaaaabbbbbabbba + abbbbabbbaaaabbbabbbbbbbbbabbbaaaabbbbaaabbbbbbbbbaaaaaabbbbbbbbbbbbaaabbbbaaaaaabbbbabbba + abbbbabbaaaaabbbabbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbbaaaabbbbbabbbbbbaaabbbbbaaaaabbbbabbba + bbbbbabbaaaaabbbaaaabbaabbbbbaaaaabbbbabaaaaaabaaabbbbaaaabbbaabbbbbaaabbbbbabbaababbbbbba + bbbbbbbbaaaaabbabbaabbabbbbbbaaaaabbbbaabaabaabbaabbbbaaaabbbaabbbbbaaabbbbbbbbbbbbbbabbbb + abbbbbbbaaaaabbbbbbabbabbbbbbaaaaabbbbaaabbaaaabaaabbbbaaabbaaabbbbbaaabbbbbabbbbbbbbbbbbb + aaaaabbbaaaaabbbbbaabbbbbbbbbaaaaabbbbaaaabaaabbabaabbbbbbbaaabbbbbbaabbbbbbaabbbbbbbabbba + abbbaabaaaaaabbabbaabbbbbbbbbaaaaabbbbaaabbbbabbabaabbbbbbbaaabbbbbbbbbbaabbaaabbbbbbbbbba + abbbbbbaaaaaabbaaaaaaaabbbbbbaaaaabbbbaaaabbaaabbbabbbbbbbbaaabbbbbbbbbbaabbbaaabbbbbbbbbb + abbbbbbaaaaabbbbbbabaaaaaaabbaaaabbbbbaaaaabaabbbbabbbbbbbbbbbbbbbabbbbbaabbbaaabbbbbbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaaaaaabbbbbbbbbbbbabbbbbbaabbbbbaabbbaaaabbbbbbbbb + abbabbbaaaaabbbbbbbbbabbbbbbaaaaabbbbbaaaaabaabbbbbbbbbbbaabbbbbbbabbbbbaabbbaaaaabbbbbbbb + abbabbbaaaaabbbbbbbbaabbabbbaaaaabbbbbaaaabaaabbbbbbbbbbaaabbbbbbbbbbbbbaabbbaaaaaabbbbbba + abbbbbbaaaabbbbbbabbbaababbbaaaaabbbbbaaaaabaabbbaaaabbaaabbbbbbbbbbbbbaaabbbaaaaaaaabbbba + abbbbbbaaaaabbbbbabbbabbabbbaaaaabbbbbaaaaaaaabbbaaaaaaaaabbbbbbbbbbbbbaabbbbaaaaaaaaaaabb`, + map `abbbbbaaababbbbbbbbbaaaabbbbbabbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbabba + abbbbaaaababbbbbbbbbaaaabbbbbbbbabbbbbbaabbbbbbbbaaabbaaabbbaabbbbbbbbbbbbbbbbbbaabbbbabba + abbbaaaaababbabbabbaaaaabbbbbabbabbbbbaabbbaabbbbaaaaaaaabbaaabbbbbbbbbbbbbbbbbbaaaabbbbba + abbbbaaabbbbbabaabbaaaaabaaaaabbabbbbbaaaaaabbbabaaaabaaaaaaaaabaabbbbbbabbbbbbaaaaabbbbba + abbbbbaabbbbbbbbbbbaaaabbbbbaabbbbbbbaabbabbaaaabaaaaaaaaaabbaaaabbbbbbbbbbbbbbaaaabbbbbba + abbbbaaaabbbbbbbbbbaaaabbbbbabbbbbbbbabbbaaaaaabbaabaaaaaaabaaaaaabbbbbbbbbbbbbaaaabbbbbba + abbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbabbbaaaabaaabaaaaaabbaabbbbbbbbaaabbbbbbba + abbbaaaaaabaaaaaabbaaaabbbbbabbbbbbabbbbbaabbbbaabbbaaaaaaaaaabbaaaabaaaaabbbbbaaabbbbbbba + abbbbaaaaabbbbbbbbaaaaabbbbbabbbbabbbbbbbaabbbaaaaabbaaaaaaaaabaaaaabbaaaaabbbbaaabbbbabba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbabbbaaaaaaaaaaaabaaaaaaaabbaaaaaabbaaaabbbbaaaabbbbbba + abbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbaabbaaaaaaaaaaaaaaaabbbaabbbbaaaaaaabaaaabbbbaaabbbbbba + abbbbbaaabbbbbbbbbaaaaabbbabbbbbbbaaaabaaaaaaaaaaaaabbbbbbbbbbbbaaabbbabbaaabbbbbaabbbbbba + ababaaaaaabaababbbaaaaaaaaaaabbbbaaaaaaaaaaaaabaabbbbbbbbbbbbbbbabbbbbabbbaaabbbbaabbbbbba + ababbaaaabbbbbabbbaaaaaaaaaabbbabaaaaaaaaaaaaabbbbbbbbbbbbaabbababbbaaaabbbaabbbbaabbbbbba + abbbbbaaabbbbbbbbbaaaabbbbbbbbaaabbbaaaaaabbaabbbbbbbbbbaaaabbbbbbbaaaaaabbbabbbbbabbbbbba + abbbbbaaabbbbbbbbbaaabbbbbbbbbbaabbbaaaabbbbbaabbbbaabbbaaaabbbbabbbbbaaabbbabbbbbabbbbbba + abbbbbaaabbbbbabbaaaabbbbbbbbbbaaabbaabbbbbbbaabbbbaabbaaaabbbaaabbbbbaaaabbbbbbbbabbbbbba + abbbbbaaabbbbbabbaaaabbbbbbbbbbaaaaaabbbbbbbbaaabbbaabbaaabbbbaaabbaaaaaaaabbbbbbbabbbbbba + abbbbbbabbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbababaaaabbbaaabbbaabbbaaaaaaaaaabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaaaabbbbaabbbbbbaaaaaabbbbbaaaaaaaaabaaaabaaabbbbaaaaaaaaaaabbbbbbbbbbbba + abbbbbaabbbbbbbbaaaabbbbaabbbbbbbaaaaaabbbbbaaaaaaaaaaaabbbbaaabbbaaaabaaaaaaabbbbbbbbbbba + abbbbbaaaaaaaaaaaaaabbbbaabbbbbbbaaaaaabbbbbaaaaaaaaabbababbaaaabaaaabbaaaaaaabbbbbabbbbba + abbbbbabbbbbbbbbaaaabbbaabbbbbbbbaaaaaaabbbbbaaaaaaabbbbbabbbaaaaaaabbaaaaaaaabbbbbabbbbba + abbbbbabbbbbbbbbaaaabbaaabbbbbbbbaaaaaaaaabbaaaaaaaabbbaaabbbbbaaaabbbaaaaaaaabbbababbabba + abbbbbabbbbbbbbbaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaabaaaaaabbbbbbabbabaaaaabbabbbaaabbbbba + abbbbaabbbbbbbbbaaabaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbabbbbbbbaaaaaaabbabbbaaabbbbba + abbbaaabbaababbaaabbbaaaaaabbbbabbbaaaaaaaaaaaaaaaabbbbbbbbbaabbbbbaaaaaaaaababbbaabbbbbba + abbbaaabbbbbbbbaaaabaaaaabbbbbbabbbbaaaaaaaaaaabbbbbbbbbbbbbbabbaabaaaaaaaaababbbaabbbbbba + abbbbaabbbbbbbbaaaabaaaaabbbbbbabbbbaaabaaaabbbbbbbbbbbbbbbbbbbbaabaaaaaaaaababbbaabbbbbba + abbbaaabbbbbbbbaaaabbaaaabbbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbaaaabaaaaaaaaabbbbbaabbbbbbb + abbbbaabbbbbbbbaaaabbaaabbbbbbaaabbbaabbbbbbabbbbbbbbbbbbbbbbaaaaabaaaaaaaaabaabbaabbbbbba + abbbbaabbbbbbbbaababaaaabbbbbbaaabbbaabbbbbbbbbbaabbbbbbbbbbbaaaaabbabbbaaaabaabbabbbbbbba + abbbbabbbbbbbbbaaaaaaaabbbbbbbbabbbbaabbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaaaaabaabbbabbbbbba + abbbaabbbbbbbbbaaaaaabaaaaaaabaabbbbaaabbbbbbbbaaaabbbbbbbbbbabaabaaaaaaaaaaaaabbbbbbbbbba + abbbbabbbbbbbbaaaaabbbbbbaabbbbbbbbaaaaabbbbbbbaaaabbbbbbbbbbabaabaaaaaaaaaaaabbbbbbbbbbba + abbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaabbbbbbaaaabbbbbbbbbbabaabaaaaaaaabaaabbbbbbbbbbba + abbbabbbbbbbbbaaaaabbabaabbbbbbbbbbaaaaabbbbbbbaaaabbabbbbbbbabaaabaaaaaaababbbbbabbbbbbba + abbbabbbbbbbbbaaaabbbaaaaaaaaaaaabbaaaaabbbbbbbaaaabbabaaabbbabaabbbaaaaabbabbbbbabbbbbbba + abbbabbbbaabbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabbabaabbbbbaaaabbbbaaaababbbbbabbaabbba + abbaaabbbbbaaaaaaaabaaaaaaaaaaabbbbbaaaaabbbbbbaaabbbbaaabbbbbbaaaabbbbabaaaabbbbabbbbbbba + abbaabbbabbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbabbbbbbbaabbbbbbaaaabbbbbbaaaaaabbbbbbbbbba + abbaabbbbaabbbaaaabbbbbaabaabbbbbbbaaaaabbbbbbbbabbbbbbaabbbbbbbaaabbbbbbaaaaaabbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbabbbbbbbabbbbbbbbaaaabbbaaaabaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabbbbbbbbaaaaabaaaaaaaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaababaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaabbbaaaaaabaaabbbbbbbbbbbbaaaaabaabbbbabbbbbbbbbba + abbabbbbbbbbbaaaabbaaaaaaaaaaaabbbbaaaaaabbaaaaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaaaaaaaaaabbbbbbbbaaaaaaaabaabbbbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbbbbaabaabbbbaaaaaaaaaaaaaabbbbbbbaaaaababaaaabbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbabbaaaaaabbbbbbaabbbbbbaaaabbbbbbbaaabbbbbbbaabbbbbbbbbba + abaaaaaaaaabaaaaabbbbbbbbbabbbbbbabbaaaaaabbbbbbaaaaabbbbaabbbbbbbaaaabbbbbbbaabbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaababbbaaaaaabbbbbaaaaaaaaaabbbbbbbbbaaabbbaaabaabbbbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbaaaaaabbaabaaaaaabbbbabbbbbbbbbabbbaaaabaabbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbabbbaaaaaabbaaababbaabbbbbbbbbbbbbbbbbbaaaababbbbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbba + ababbbbbbbbaaaaabbbbbbabbabbbbbbaabbaaaaaaabbbaaabaaaabbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbba + ababbbbbbbbaaaaaabaabbabbabbabbbaabbaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbabbbbbbbba + ababbbbbbbbaaaaabbbbbaabbabbaabbabbbaaaaaabbbbbbbbaaaabbbbbbbbbaaabbbbbbabbaabbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbabbbaaabbabbbbbaaaaaaabbbbbbbbbaabbbbbbaabbabbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbabbbaaabaabbbbbaaaaaaabbbbbbbbbbabbbbbaaabbbbbbaabbbbbbbba + ababbbbbbbbaaaabbbbbbabbbbbbabbbabbbaaabaabbbbbaaaaaaabbbbbbbbbbbbbbbaaaaaaabbbaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbaaabbbabbbaaababbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbabaaabbbaabbbaababbbbbbaaaaaabbbbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbbbaaaabbbabbbaaaaaabbbbbbbbbbbbbbbaaaaaabbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaaabaaabbaaaaaabbbbbbbbbbbbbbbaaaaaabbbaaabbbbbbbba + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaaabbbaaaaaaaaaabaaaaaabbbbbbbbbbbbbbbbbbbaabbbaaabbbbbbbba + aabbbaaaaaaaaaabaabbbbbbbbbbbbbaaabbbaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbaababbaaaabbbbbbbba + abbabbbbbbbaaabbbbaaaaaaaaaaabbaaabbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbba + abbbaaaabaaaaabbbbbbbbbbbbbaaaaaaaabbaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaaaabbbaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbaaaaaabaaaaabbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbaaaaabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbabbbbbbaaaaabbbaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbaaabbbbaaaabbbabbbba + abbbbbbbbaaaabbbbbbabbaabbbbbbaaaaabbbbaaaaaaaabaaaaaabbbbbbbbbbabbbbbaaabbbbbbaabbbbabbba + abbbbbbbbaaaabbbbbbabbaabbabbbaaaaabbbbaaaaaaaaaaaaaaaabbbbbbbbbabbbbbaaabbbbbbbabbbbabbba + abbbbbbbbaaaabbbbbbabbbbbbabbbaaaaabbbbbaabbaaabaaaaaaaabbbbbbbbbbbbbaaaabbbbbbabbbbbabbba + abbbbbbbbaaaabbbbbbabbbbbbabbbaaaabbbbbaaaaaaaaabbaaaaaaaaabbabbbbbbaaaaabbbbbbabbbbbbbbba + abbbbabbbaaaabbbbbbbbbbbbbabbbaaaabbbbaaaabbbbbbbbabbaaaaabbbbbbbbbbaaaaabbabbbaabbbbbbbba + abbbaabbaaaaabbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbaabbbbbaabbbabbbbbbbababbbabbbaaabbbbbbbb + bbbbaabbaaaaabbabaaabbaabaabbaaaaabbbbabaabaaaaaaaaabbbbbbbbaabbbbbbabbbbbbabbbaaaabbbbbba + bbbbabbbaaaaabbabbaabbaabaabbaaaaabbbbaaababaaababaabbbbbbbbaabbbbbbabbbbbbabbbaaaabbbbbbb + abbbbbbbaaaaabbbbbaabbabbbbbbaaaaabbbbaaaabaaaababaabbbbbbbbbbbbbbbaabbbbbaabbbaaaaabbbbbb + aaababbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaaaabbaabbababbbbbbbbbbbbbbbaabbbbbbaabbbaaaaaabbbbb + abbbaabaaaaaabbabbabbbbbbbbbbaaaaabbbbbaabbabaababbbbbbbbbaabbbbbbaabbbbbbaabbbaaaaaaabbbb + abbbbbbaaaaaabbaaaaaaaabbbbbbaaaaabbbbaaaaabaaabbbbbbbbbbaaabbbbbbaabbbbbbaabbbaaaaaaaaabb + abbbbbbaaaaabbbbbbabaaaaaaabbaaaabbbbbaaaaabaabbbbaabbbaaaabbbbbbbabbbbbbaaabbbbaaaaaaaaaa + abbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaaaaaabbbbaaabaaaaabbbbbbbbbbbbbbaabbbbbaaaaaaaaaa + abbabbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbaaaabaabbbbaaaaaaaaabbbbbbbabbbbbbaabbbbbaaaaaaaaaa + abbabbbaaaabbbabbbbbbabbabbbaaaaabbbbbaaaabaaabbbbaaaaaaaaabbbbbbbabbbbbaaabbbbbaaaabbbbaa + abbabbbaaaabbbabbabbbaababbbaaaaabbbbbaaaaabaaabbbaaaabaaaabbbbbaaabbbbbaabbbbbbaaaabbbbba + abbbbbbaaaabbbabbabbbabbabbbaaaaabbbbbaaaaaaaabbbbaaaabaaaabbbbbababbbbaaabbbbbbaaaabbbbba`, + map `abbbbbbbaaabbbbbbbbbaaaabbbbbabbabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbabba + bbbbbbabababbbbbbbbbaaaabbbbbabbabbbbbbaabbbbbbbbaaabbaaabbbaabbbbbbbbbbbbbbbbbbaabbbbabba + abbbaaabbaabbabbabbaaaaabbbbbabbabbbbbaabbbaabbbbaaaaaaaabbaaabbbbbbbbbbbbbbbbbbaaaabbbbba + abbbbbabbbbbbabaabbaaaaabaabaabbabbbbbaaaaaabbbabaaaabaaaaaaaaabaabbbbbbbbbbbbbaaaaabbbbba + abbbbbaabbbbbbbbbbbaaaabbbbbabbbabbbbaabbabbaaaabaaaaaaaaaabbaaaabbbbbbbbbbbbbbaaaabbbbbba + abbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbabbbaaaaaabbaabbaaaaaabaaaaaabbbbbbbbbbbbbaaaabbbbbba + abbbabaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbabbbaaaaaaaabaaaaaabbaabbbbbbbbaaabbbbbbba + abbbbaaaaabaaaaaabbaaaabbbbbabbbbbbabbbbbaabbbbaabbbaaaaaaaaaabbaaaabaaaaabbbbbaaabbbbbbba + abbbbaaaaabbabbbbbaaaaabbbbbabbbbabbbbbbbaabbbbaaabbaaaaaaaaaabaaaaabbaaaaabbbbaaabbbbabba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbabbbaaaaaaaaaaaabaaaaaaaabbaaaaaabbaaaabbbbaaaabbbbbba + abbbbbbaabbbabbbbbaaaabbbbbbbbbbbbbaabbaaaaaaaaaaaaaaaaabbaabbbbaaaaaaabaaaabbbbaaabbbbbba + abbbbbaaabbbabbbbbaaaaabbbbbabbbbbaaaabaaaaaaaaaaaaabbbbbbbbbbbbaaabbbabbaaabbbbbaabbbbbba + ababaaaaaabaaaaabbaaaaaaaaaaabbbbaaaaaaaaaaaaabaabbbbbbbbbbbbbaaabbbbbabbbaaabbbbaabbbbbba + ababbaaaabbbbbbbbbaaaaabaaaabbbabaaaaaaaaaaaaabbbbbbbbbbbbabbaabbbbbaaaabbbaabbbbaabbbbbba + abbbbaaaabbaabbbbbaaaabbbbbbbbaaabbbaaaaaabbbbbbbbbbbbbbaaaaaaabbbbaabaaabbaabbbbbabbbbbba + abbbbbaaabbabbbbbbaaaabbbbbbbbbaabbbaaaaabbbbaabbbbaabbaaaaababbaaabbbaaabbbabbbbbabbbbbba + abbbbbaaabbbbbabbaaaaabbbbbbbbbaaabbabbbbbbbaaabbbbaabbaaaabbbaaaaabbbaaaabbbbbbbbabbbbbba + abbbbbaaabbbbbabbaaaabbbbbbbbbbaaaaaabbbbbbbaaaabbaaabbaaabbbbaaababaaaaaaabbbbbbbabbbbbba + abbbbbbabbbbbbbbbaaabbbbbabbbbbbaaaaabbbbbbbababaaaabbbaaabbbaaabbaaaaaaaaaabbbbbbbabbbbba + abbbbbbbbbbbbbbbbaaabbbbbaabbbbbbaaaaaabbbbbaaaaaaaaabaaaabaaababbaaaabaaaaaabbbbbaabbbbba + abbbbbbabbbbbbbbaaaabbbbaabbbbbbbaaaaaabbbbbaaaaaaaaaaaabbbbaaaabbaaaabaaaaaaabbbbbabbbbba + abbbbbaaaaaaaaaaaaaabbbbaabbbbbbbaaaaaabbbbbaaaaaaaaabbaabbbaaaabaaabbaaaaaaaabbbababbbbba + abbbbbabbbbbbbbbaaaabbbaabbbbbbbbaaaaaaabbbbbaaaaaaabbbbaabbbabaaaabbbaaaaaaaabbbbaabbbbba + abbbbbabbbbbbbbbaaaabbbaabbbbbbbbaaaaaaababbaaaaaaabbbbaaabbbbbaaaaabbaaaaaaaabbbaaabbbbba + abbbbbabbbbbbbbbaaaaaaaaaaabbbbbbbaaaaaabaaaaaaaaaaaaaaaaaabbbbbaabaabaaaaabbabbbaaabbbbba + abbbbaabbbbbabbbaaabaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbabbbbbbbaaaaaaabbabbbaabbbbbba + abbbaaabbaabaabaaabbbaaaaaabbbbabbbaaaaaaaaaaaaaaaabbbbbbbbbaabbbbbaaaaaaaaababbbaabbbbbba + abbbbaabbbbbbbbaaabbaaaaabbbbbbabbbbaaaaaaaaaaabbbbbbbbbbbbbbabbaabaaaaaaaaababbbaabbbbbba + abbbbaabbbbbbbbaaaabaaaaabbbbbbabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbaabaaaaaaaaababbbaabbbbbba + abbbbaabbbbbbbbaaaabbaaaabbbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbaaaabaaaaaaaaabbbbbaabbbbbbb + abbbbaabbbbbbbbaaaabbaaabbbbbbaaabbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaabaaaaaaaabaaabbaabbbbbbb + abbbbaabbbbbbbbaababaaaabbbbbbaaabbbaabbbbbbbbbbabbbbbbbbbbbbaaaaabaababaaabaaabbabbbbbbba + abbbbaabbbbbbbbaaaaaaaabbbbbbbbabbbbaabbbbbbbbaaaabbbbbbbbbbbaaaaabaaaaaaaabaaabbbabbbbbba + abbbbabbbbbabbbaaaaaabaaaaaabbaabbbbaaabbbbbbbaaaaabbbbbbbbbbabaaaaaaaaaaaaaaaabbbbbbbbbba + abbbaabbbbbbbbaaaaabbbbbbabbbbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbabaabaaaaaaaaaaaabbbbbbbbbbba + abbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbaaaaaabbbbbbbbbbabaabaaaaaaaabaaabbbbbbbbbbba + abbbabbbbbabbbaaaaabbabaabbbbbbbbbbaaaaabbbbbaaaaabbbaaabbbbbabaabbaaaaaaababbbbbabbbbbbba + abbbabbbbbbbbbaaaabbbaaaaaaaaaaaabbaaaaabbbbbaaaaabbbaaaabbbbabaabbbaaaaabbabbbbbabbbbbbba + abbbabbbbbabbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbaaaaabbbaaaabbbbaaaaabbaaaaaababbbbbabbaabbba + abbaabbabbbaaaaaaaabaaaaaaaaaaaabbbbaaaaabbbbaaabbbbbbaaabbbbbaaaabbbbaabbaaabbbbabbbabbba + abbaabbaaabbbbaaaaabbbbbbbbbbbbabbbaaaaabbbbbbbabbbbbbaaabbbbbbaaaabbbbbbbaaaaabbbbbbbbbba + abbaabbbbbbbbbaaaabbbbbaababbbbbbbbaaaaabbbbbbbabbbbbbaaabbbbbbbaaabbbbbbaaaaaabbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbabbbbbbbbaaaabbbaaaabaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbbabbbbbbbbbaaaabaaaaaaaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaababaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaabbbaaaaaabaaabbbbbbbbbbbbaaaaaaaabbbbabbbbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaababbbaaaaaaabbaaaaaaaaaaababbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbabaaaaaabbaaaaaaaaaaaaaaabbbbbbbbaaaaaaaabaabbbbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbbbbaabaabbbbaaaaaaaaaaaaaabbbbbbbaaaaababaaaabbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbabbaaaaaabbbbbbaabbbbbbaaabbbbbbbbaaabbbbbbbaabbbbbbbbbba + abaaaaaaaaabaaaaabbbbbbbbbabbbbbbabbaaaaaabbbbbbaaaaabbbbaabbbbbbbaaaabbbbbbbaabbbbbbabbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaababbbaaaaaabbbbbaaaaaaaaaabbbbbbbbbaaabbbaaabaabbbbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbaaaaaabbaabaaaaaabbbaabbbbbbbbaabbbaaaabaabbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbabbbaaaaabbbaaababbaabbbbbbbbbbbbbbbbbbaaaababbbbbbbbbbba + ababbbbbbbbaaaaabbbbbbabbbbbbbbbbabbaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbba + ababbbbbabbaaaaabbbbbbabbabbbbbbbabbaaaaaaabbbaaabaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + ababbbbbabbaaaaaabaabaabbabbabbbaabbaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbaabbbbbbba + ababbbbbbbbaaaaabbbbbaabaabbaabbabbbaaaaaabbbbbbbbaaaabbbbbbbbbaaabbbbbbabbaabbbaabbbbbbba + ababbbbbbbbaaaaabbbbbabbbabbabbbabbbaaabbabbbbbaaaaaaabbbbbbbbbaabbbbbbaabbabbbbaabbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbabbbaaabaabbbbbaaaaaaabbbbbbbbbaabbbbbaaabbbbbbaabbbbbbbba + abababbbbbaaaaabbbbbbabbbbbbabbbaabbaaababbbbbbaaaaaaabbbbbbbbbbbbbbbaaaaaaabbbaabbbbbbbba + abbbbbbabbaaaaabbbbbbabbabbbabbbaabbaaababbbbbbaaaaaaabbbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabaaaaaabbbaabbbaababbbbbbaaaaaaaabbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbabbbbbbaabbbbaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbaaaaaabbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaaabaaabbaaaaaabbbbbbbbbbbbbbbaabbaabbbaaabbbbbbbba + aabaaabbbbaaaaabbbbbbbbbbbbbbbbaaabbbaaaaaaaaaabaaaaaaabbbbbbbbbbbbbbbbbbaabbbaaabbbbbbbba + aabbaaaaabaaaaabaaaaabbbbbbbbbbaaabbbaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbaababbbbaabbbbbbbba + abbabbbbbbaaaabbbaaaaaaaaaaaabbaaabbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbba + abbbaaaabaaaaabbbbbbbbbbbbbaaaaaaaabbaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbba + abbbbbbbbaaaaabbaaaaaaaabbbbbbbaaaabbbaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbaabbbbaaaaabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbaaaaaabaaaaabbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbaaaaabbbbbbbba + abbbbabbbaaaaabbbbbbbbbabbbbbbaaaaabbbaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbaabbbbaaaaabbbbabbba + abbbbbbbbaaaabbbabbaabbabbabbbaaaaabbbbaaaaaaaabaaaaaaabbbbbbbbbbbbbbbaabbbbbbbaabbbbabbba + abbbbbbbbaaaabbbbbbaabaabbabbbaaaaabbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbabbbbabbbb + abbbbbbbbaaaabbbbbbbbbbbbbabbbaaaaabbbbbaabbaaabaaaaaaaabbbbbbbbbbbaaaaaabbbbbbabbbbbbbbba + abbbbbbbbaaaabbbbbbbbbbbbbabbbaaaabbbbbaaaaaaaaabbaaaaaaaabbbbaabbbbbaaaabbbbbbabbbbbbbbba + abbbbabbaaaaabbbabbbbbbbbbabbbaaaabbbbaaaabbbbbbbbabbaaaaabbbbbbbbbbbaaaabbabbbaabbbbbbbbb + abbbaabbaaaaabbaabbbbbabbbbbbbaaaabbbbaaaaabbbbbbaabbbbbbabbbbbbbbbbbaabbbbabbbaaabbbbbbbb + bbbbaabbaaaaabbaaaaabbaabbbbbaaaaabbbbabaabaaaaaaaaabbbbbabbbaabbbbbaabbbbbabbbaaaabbbbbba + bbbbabbbaaaabbbbbbaabbaabaabbaaaaabbbbaaababaaababaabbbbbbbbbaabbbbbaabbbbbabbbaaaabbbbbbb + abbbbbbbaaaaabbabbbabbabbbbbbaaaaabbbbaaaabaaaababaabbbbbbbbbbbbbbbbaabbbbaabbbaaaaabbbbbb + aaababbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaaaabbaabbababbbbbbbbabbbbbbaaaabbbbaabbbaaaaaabbbbb + abbbaabaaaaaabbabbabbbbbbbbbbaaaaabbbbbaabbabaababbbbbbbbbaabbbbbbaababbbbaabbbaaaaaaabbbb + abbbbbbaaaaaabbaaaaaaaabbbbbbaaaaabbbbaaaaabaaabbbbbbbbbbaaabbbbbbaabbbbbbaabbbaaaaaaaaabb + abbbbbbaaaaabbbbbbabaaaaaaabbaaaabbbbbaaaaabaabbbbaabbbaaaabbbbbbbabbbbbbaaabbbbaaaaaaaaaa + abbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaaaaaabbbbaaabaaaaabbbbbbbbbbbbbbaabbbbbaaaaaaaaaa + abbabbbaaaaabbbbbbbbbabbbbbbaaaaabbbbbaaaaabaabbbbaaaaaaaaabbbbbbbabbbbbbaabbbbbaaaaaaaaaa + abbabbbaaaaabbbbbbbbbabbbbbbaaaaabbbbbaaaabaaabbbbaaaaaaaaabbbbbbbabbbbbaaabbbbbaaaabbbbaa + abbabbbaaaabbbabbabbaabbabbbaaaaabbbbbaaaaabaaabbbaaaabaaaabbbbbaaabbbbbaabbbbbbaaaabbbbba + abbbbbbaaaabbbabbabbbabbabbbaaaaabbbbbaaaaaaaabbbbaaaabbaaaabbbbababbbbaaabbbbbbaaaabbbbba`, + map `abbbbbbbbaabbbbbbbbbaaaabbbbbabbabbbbbbbbabbaaabbaabbbabbbbbbbbbaabbbbbbbbbbbbbbaabbbbabba + bbbbbbbbbbabbbbbbbbbaaaabbbbbabbbbbbbbbbbaaaaabbbbbbbaabbaabbabaaaabbbbbbbbbbbbbaaaabbbbba + abbbaaabbaabbabbabbaaaaabbbbbabbbbbbbbbbbaababbabbbbaaabbaaaaabbaaaabaaabbbbbbbbaaaabbbbba + abbbbbabbbbbbabaabbaaaaabaabaabbbbbabbbbbabbbbbaabbbaaaaaaaaaabbaaaabaaaaaaabbbbaaaabbbbba + abbbbbabbbbbbbbbbbbaaaabbbbbabbbbbbbbbbbaaabbbaaaabbaaaaaaaaabbaaaaabbaaaaaaabbbabbbbbbbba + abbbbbabbabbbbbbbbbaaaabbbbbbbbbbbbaabbbaaaaaaaaaaabaaaaaaaabbbaaaaaaabbaaaaabbbabbbbbbbba + abbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbaaabaaaaaaaaaaaaaaaabbbbabbbbbaaaaaaabbaaaabbbbbaabbbbba + abbbbaaaaabaaaaaabbaaaabbbbbabbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbaaaabbbbbbaaaabbbaaabbbbba + abbbbbbaaabbabbbbbaaaaabbbbbbbbbbaaaaaaaaaaaabbabbbbbbbbbbbbbaababbbbbabbbbaaabbbbaabbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbaabaaaaaaaaaaabbbbbbbbbbbaabbbaabbbbbbbaabbbbaaabbbabbbbbba + abbbbbbaaabbabbbbbaaaabbbbbbbbbaabbbaaaaaabbabbbbbabbbbaaaabbabbbbaaaaaaabbbaaabbbabbbbbba + abbbbbbaaabbabbbbbaaaaabbbbabbbaabbbaaabbbbbaabbbbaabbbaaaabbbbbbaaaabaaaabbbaabbbabbbbbba + ababbbaaaabaaaabbbaaaaaaaaaaaabbaaaaaaabbbbbaabbbbaabbaaaabbbaaaaaabbbaaaabbbbabbbbbbbbbba + abbbbbaaabbbbbbbbbaaaaabaaaabbbbbaaaaabbbbbbaabaabaabbaaabbbaaaaaaaabaaaaaabbbaabbbbbbbbba + abbbbbaaabbaabbbbaaaaabbbbbbbbbbbaaaaabbbbaaaaaaaaaabbaaabbaaaaaaaaaaaaaaaaabbbbbbbbbbbbba + abbbbbaaabbabbbbbaaaaabbbbbbbbbbbbaaaabbbbaaaaaaaaaabaaabbbaaaaabaaaaaaaaaaaaabbbbbbbbbbba + abbbbbaaabbabbabbaaaaabbbbbbbbbbbbaaaaabbbbaaaaaaaaabbabbbbaaaaabaabbbaabaaaaabbbbbbbbbbba + abbbbbaaabbbbbabbaaaabbbbbabbbbbbbaaaaababbaaaaaaaaabbbbbbbaaaabbbbbbbaaaaaaaaaabbbbbbbbba + abbbbbbabbbbbbbbbaaaabbbbabbbbbbbbaaaaaaabbbaaaaaaaabbaaabbaaaabbbaaabbbbaaaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbbaaaaaaabbaaaaaaabbbaaabbbbbaaaaaaaabbaaaaaaaabbbbbbbbba + abbbbbbabbbbbbbbaaaabbbbaabbbbbbbbbbaaaaaaaaaaaaaaabaaaaaababbabaabaabbbaaaaaaaabbbbbbbbba + abbbbbaaaaaaaaaaaaaabbbbabbbbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbaabbbbbbaabaaaaaaaaaabbbbbbbbba + abbbbbabbbbbbbbbaaaabbbaabbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbabbbbbbbaabaaaaaaaababbbbabbbba + abbbbbabbbbbbbbbaaaabbbaaabbbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbabbbbbbaaaaaaaaaaababbbbabbbba + abbbbbabbbbbbbbbaaaaaaaaaaabbbaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbababbaaaabaaaaaababbbbbbbbba + abbbbaabbbbbabbbaaabaaaaaaabbbaaabbbbabbbaabbbbbbbbbbbbbbbbbbaabbbaaababaaaaaababbbbbbbbba + abbbaaabbbaaaabaaabbbaaaaaabbbbaabbbbaabbbbbbbbbabbbbbbbbbbbbaaaabbaaaaaaaaaaababbbbbbbbba + abbbbaabbbbbbbbaaabbaaaaabbabbbaabbbaaabbbbbbbaaaabbbbbbbbbbaaaaaababbbbaaaaaaaabbbbbbbbba + abbbbaabbbbbbbbaaaabaaaaabbbbbbaabbbaaabbbbbbbbaaabbbbbbbbbbaaaaaababbbbbbaaabaabbbbbbbbba + abbbbaabbbbbbbbaaaabbaaaabbbbbbaabbbaaaabbbbbbaaaaabbbbbbbbbaaaaaaaaabbbabaaaaaabbbbbbbbbb + abbbbaabbbbbbbbaaaabbaaabbbbbbaaabbbaaaaabbbbbbaaaabbbbbbbbbabaaaaaaaaaaaaaaaaaaabbbbbbbbb + abbbbaabbbbbbbbaababaaaabbbbbbaaaabbaaaaabbbbbaaaaabbbaabbbbabaabaaaaaaaaaaaaaaaabbbbbbbba + abbbbaabbbbbbbbaaaaaaaabbbbbbbbabbbbaaaaabbbbaaaaaabbbaaabbbabbabbaaaaaaaaaaaaaabbbbbbbbba + abbbbabbbbbabbbaaaaaaaaaaaaabbaabbbbaaaaabbbbaaaaaabbaaaabbbaabaabbaaaaaaaaaaabbbbbbbbbbba + abbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbaaabbbbaaaaaabbaaaaabbbaaabbbbbbbbbbb + abbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbaabbbbbaaabbbbbaaaaabbbbaabbbbaaaaabbbbbbbba + abbbabbbbbbbbbaaaaabbabaaabbbbbbbbbbbaaaabbbbbabbbbbbaaaabbbbbbaaabbbbbbbbbbaaaaabbbbbbbba + abbbabbbbbbbbbaaaabbbaaaaaaaaaaaaaabbaaabbbbbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbaaaaabbbbbbbba + abbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbabaaaaaabbbbabbba + abbbabbbbaaaaaaaaaabaaaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbaaaaaaaaabbbbbbbba + abbaabbaabbbbbaaaaabbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabaaaabbbbbbbba + abbaabbbbbbbbbaaaabbbbbaabaabbbbbbbaaaaaabbaaaaaaaaaaabbbbbbbbbbbaaaaaaabbabbbbaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbaaaaaaaaaaaaabbbbbbbbbbaaaaaaabbbbbbaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaaaaaaaaaabbbbbbbbaaaaaaaabbbbbbabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbaaaabbbbbbbbaaaaabbbbaaaababbbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbbbbbbbabbbaaaaabbbbbbaaabbbbbaaabbbbbbbaaaabbbbbbbaabbbbbbbbbba + abbaabbbbbbbbaaaaabaaaaaaaaaaaabbaabbaaaaabbbbbbaaaaaabbaabbbbbbbbaaaabbbbabbbabbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaabbbaaaabbbbbbaaaaaabbaabbbbbbbbbaabbbaaaabbaabbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbabbbbaaaabbaabbaaaaabbbbaabbbbbbbbbabbbaaaabbabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbabbbaaaaabaaabbabbbabbbbbbbbbbbbbbbbbbbbaaaababbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbabbbaaaabbbabbbabbaabbbbbbbbbbbbbbbbbbbbaaaababbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaababbbaabaabbabbaabaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbaabaabbbbbaabaaaabbbbbbbbbbabbbbbbbaabaabbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbabbbaababbbbaaaabaaaabbbbbbbbbaaaabbbbbaabbabbbbbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbbbbbaabbaaababbbbbaaabaaaabbbbbbbbbaaabbbbaaaabbaabbbabbbbbbba + ababbbbbabbaaaaabbbbbbabbabbbbbbaabbbabaabbbbbaaabaaaabbbbbbbbbbbbbbbbaaaabbaabbbbbbbbbbba + ababbbbbabbaaaaaaaaabaabbabbabbbaabbbabaabbbbbaaabaaaabbbbbbbbbbbbbbbbaaaabbaabbbbbbbbbbba + ababbbbbbbbaaaaabbbbbaabaabbaabbaabbbababbbbbbaaabaaaaabbbbbbbbbbbbbbaaaaabaaabbbbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaabbbaaabbbbbbaabbaaaaabbbbbbbbbbbbbbaaaaabaabbbbbbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaabbbaaaabaaabaabbaaababbbbbbbbbbbbbbaababbaabbbabbbbbbbba + abababbbbbaaaaaabbbbbabbbbbbabbbaabbbbaaaaaaaaaaabaaababbbbbbbbbbbbbbaabbbbaabbbabbbbbbbba + abbbbbbabbaaaaabbbbbbabbabbbabbbaabbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaabbbabbbbbbbba + aabbbbbbbbaaaaabbbbbaaaaabaaabbbaabbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaabbbabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbabbbbbbaaaabbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbababbbbbbbbb + aabaaabbbbaaaaabbbbbbbbbbbbbbbbaaaabbbaaaaabbbbbbbaaababbbbbbbbbbbbbbbbbaabbbaaaabbbbbbbba + aabbaaaaabaaaaabaaabbbbbbbbbbbbaaaabbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbbaaabbbbbbbba + abbabbbbbbaaaabbbaaaaaaaaaaaabbaaaabbbbaaaaaaabbaaaaaabbbbbbbbbbbbbbbaaaaabbbbaaabbbbbbbba + abbbaaaabaaaaabbbbbbbbbbbbbaaaaaaaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaaabbbbbaabbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaaaabbbbbaaaaaaababbaaaabbbbbbbbabbbbbaaaaabbbbbbabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbaaaaaabaaaaabbbbbbaaaaaaaabbaaaaabbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbb + abbbbabbbbaaaabbbbbbbbbabbbbbbaaaaabbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbaaabbbabbaabbbbbbbb + abbbbbbbbaaaaabbabbaabbabbbbbbaaaaabbbbbbaaaaabbbbbbbaaaaaabbbbbbbbbbaaaaabbbabbbaabbbbbbb + abbbbbbbbaaaabbbbbbaabaabbabbbaaaaabbbbbbbaaaaaaaaabbbbbbaabbabbbbbbbbbbbbbbbabbbaaabbbbbb + abbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabaaaabbbbbaabbaabbbbbaabbbbbbbabbbaaaabbbbb + abbbbbbbbaaaabbbabbbbbbbbbabbbaaaabbbbaaaaaaaaaabaaabbbbbbbbbbabbbbbaabbbbbbaabbbaaaaabbbb + abbbbabbaaaaabbbabbbbbbbbbabbbaaaabbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbaabbbaaaaaabbb + abbbaabbaaaaabbbabbbbbbabbbbbbaaaabbbbaaaaabbbbbbaabbbbbbbbaabbbbbbbabbbbbbbaabbbaaaaaaabb + bbbbaabbaaaaabbabaaabbaababbbaaaaabbbbabaaaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaaaaaaa + bbbbabbbaaaabbbbbbaabbaabaabbaaaaabbbbbaababaaababbbbbbaaaaaabbbbbbbbbbbbbbaaabbbaaaaaaaaa + abbbbbbbaaaaabbbbbabbbabbabbbaaaaabbbbaaaabaaaababaaabaaaaaaabbbbbabbbbbbbbaabbbbaaaaaaaaa + aaababbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaaaabbaabbabbaaaaaaaaaabbbbbabbbbbbbaaabbbbaaaaabbaa + abbbaabaaaaaabbabbabbbbbbbbbbaaaaabbbbbaabbabaababbaaaaaabaaabbbbbbbbbbbbbaaabbbbaaaabbbba + abbbbbbaaaaaabaaaaaaaabbbbbbbaaaaabbbbaaaaabaaabbbbaaabbbbaaabbbbbbbbbbbbaaabbbbbaaaabbbba + abbbbbbaaaaabbbbbbabaaaaaaabbaaaabbbbbbaaaabaabbbbaaaabbbbaaaabbbaaabbbbbaaabbbbbaaaabbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaabbbbaaaabbbbaaabbbbbabbbbbaaaabbbbbaaaabbbba + abbabbbaaaaabbbbbbbbbaabbbbbbaaaabbbbbbaaaabaabbbbaaaabbbbaaaabbbbbbbbbbaaabbbbbbaaaabbbba + abbabbbaaaaabbbbbbbbbabbbbbbbaaaabbbbbaaaabaaabbbbaaaabbbbbaaaaabbabbbbbaaabbbbbbaaaaabbba + abbabbbaaaabbbabbabbbabbabbbbaaaabbbbbaaaaabaaabbbaaabbbbbbaaaaaaaabbbbaaabbbbbbbaaaabbbba + abbbbbbaaaabbbabbaaababbabbbaaaaabbbbbaaaaaaaabbabaaabbbbbbbaaaaaaabbbaaaabbbbbbbaaaabbbba`, + map `abbbbbbaaaabbbbbbbbbaaaabbbbbabbbbbbabbbbaaabbaaaaabbaaabbaabbbaaaaaabbbbaaaaabbbbbbbbbbba + bbbbbbbaababbbbbbbbbaaaabbbbbabbbbbbabbaaaaaaaaaaaabbbbbbbbabbbbaaaaaaaabbaaaaabbbbabbbbba + abbbaaaabaabbbbbabbaaaaabbbbbbbbbbbaaaaaaaaaaaabaabbbbbbbbaabbbbbaababbabbbaaaabbbaabbbbba + abbbbbabbabbbabaabbaaaaabaabaabbbbaaaaaaaaaaaabbbbbbbbbbbaabbbabbbbbbbbabbbbaaaabbbbbbbbba + abbbbbabbbbbbbbbbbbaaaabbbbbabbbbabaaaaaaaaaaabbbbbbbbabaaabbaabbbbabbaaabbbbaaabbbbbbbbba + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbaabbaaaaabbbabbbbbaabbabaaabbbbbbbbaaaaaaabbbbaaabbbbbbbba + abbbbaaaaabbbbbbbbaaaaabbbbbbbbbaaaaaaabbbbaabbbbbaabbbaaabbbaaaabbaaaaaaabbbbaaabbbbbbbba + abbbbbbaaabbaaaaabbaaaabbbbbbbbbabaaaaabbbbaabbbbbaabbbaaabbaaaaaaaabbaaaaabbbaaabbbbbbbba + abbbbbbaaabbabbbbbaaaaabbbbbabbbbbaaaaabbbbaaabaaaaabbbaaabbbaaaaaaabbaabaabbbbaabbbbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbaaaabbbaaaaaaaaabbbaaaabbaaaabbbaaaaabaaaabbbaabbbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbaaaaabbbaaaaaaaabaaaaaababaabbbbaaaaabaaaaabbbbbbbbbbba + abbbbbbaaabbabbbbbaaaaabbbabaaaabbbbaaaaaabaaaaaaaaaaabbbbbaaaabbbbaaaaaabaaaaaabbbbbbbbba + ababbbaaaabaaaabbbaaaaaaaaaaaaaabbbbaaaaaabbaaaaaaaabbbbbbbaaaabbbbbbbbbbaaaaaaaaabbbbbbba + abbbbbaaabbbbbbbbbaaaaaaaaaaaaaabbbbaaaaaabbaaaaaaaabbbbbbbaaaabbbbbbbbbbaaaaaaaaabbbbbbba + abbbbbaaabbabbbbbaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbababbbbbaaaaabaabbbaaaaaaaaabbbbbbba + abbbbbaaabbabbbbbaaaaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaababbaaabbbaabbbbaaaaaaaabbbbbbba + abbbbbaaabbabbabbaaaaabbbbbbbbbbabbbbbaaaaaaaaabaaaaabbbbbbbabbbbbbbaabbbbaaaaaaaabbbbbbba + abbbbbbaabbbbbabbaaaabbbbbabbbbbbbabbbaaaaaabbbbbbbbbbbbbbbaabbbbbbbaababbaaaaaaaabbbbbbba + abbbbbabbbbbbbbbbaaaabbbbabbbabbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbbbbbbaababaaaaaaaaabbbbbbba + abbbbbbbbbbbbbbbbaaabbbbbaabbaabbbbbbbaabaabbbbbbbbbbbbbbbbbabbbbbabaababaaaaaaaaabbbbbbba + abbbbaaabbbbbbbbaaaabbbbaabbbbabbbbbbbaabbbabbbbabbbbbbbbbbbbaabababaaaabaaaaaaababbbbbbba + abbbbbaaaaaaaaaaaaaabbbbabbbbaaabbbbbaaabbbbbbbbaabbbbbbbbbbbaaaabbaaaaaaabaaaaaaabbbbbbba + abbbbbabbbbbbbbbaaaabbbaabbbbaaabbbbbaaabbbbbbbaaaabbbbbbbbbaaaaaabababababaaaaaaabbbbbbba + abbbbbabbbbbbbbbaaaabbbaaabbbaaabbbbbaaaabbbbbaaaaabbbbbbbbbaaaaaababaaabaaaaaaaaabbbbbbba + abbbbbabbbbbbbbbaaaaaaaaaaabbaaaabbbbaaaabbbbbaaaaabbbbabbbbbaaaabaabbbbbbbaaaaaaabbbbbbba + abbbbaabbbbbabbbaaabaaaaaaabbbaaaabbbaaaabbbbbbaaaabbbaaabbbbbaaabaaabbbbbbaaaaaaabbbbbbba + abbbaaabbbaaaabaaabbbaaaaaabbbbaaabbbaaaaabbbbbaaaabbbaaabbbbbababaaaaaaaaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaabbaaaaabbabbbaaabbbaaaaabbbbaaaaabbbaabbbbabbaabbaaaaaaaabaaaaaaabbbbbba + abbbbaabbbbbbbbaaaabaaaaabbbbbbaaabbbbaaaabbbbaaaabbbaaabbbbabbaabbbaaaaaaabaaaaabbbbbbbba + abbbaaabbbbbbbbaaaabbaaaabbbbbbaaabbbbaaaabbbbaaabbbbaaabbbbaabaaabbbaaaaabbbaaabbbbbbbbbb + abbbbabbbbbbbbbaaaabbaaabbbbbbaaaabbbbaaaabbbbbabbbbbbaabbbbbaaaaabbbbaaaabbbbbbbabbbbbbba + abbbbabbbbbbbbbaababaaaabbbbbbaaaabbbbaaabbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbaaaabbbbbba + abbbbabbbbbbbbbaaaaaaaabbbbbbbbabbbbbbaaabbbbbbbbbbbbabbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbba + abbbbabbbbbabbbaaaaaaaaaaaaaaaaabbbbbbaaabbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbaaaaaaabbbbbba + abbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbbba + abbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbaaaaababbbbbbbbbbbbbbaaaaaaaaaaabaaaaabbbbbba + abbbabbbbbbbbbaaaaabbabaaabbbbbbbbbbbaaaabbaaaaaaaaaaabbbbbbbbbbbaaaaaaaabbbbbbbaaabbbbbba + abbbbbbbbbbbbbaaaabbbaaaaaaaaaaaaaabbaaaabbaaaaaaaaaaaaabbbbbbbbbbaaaaaabbbbbbbbaaabbbbbba + abbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbaaabbaaaaaabbbbbbbbaaaaaaaabbbbbbaaabbbbbba + abbaabbabbaaaaaaaaabaaaaaaaaaaaabbabbbaaaabbbbbbaabbbbaaaaabbbbbbbaaaaaaaabaaaabbaabbbbbba + abbaabbaabbbbbaaaaabbbbbbbbbbbaabaabbbaaaabbbbbbaaaaaabbaaabbbbbbbaaaabbbbbabbaababbbbbbba + abbaabbbbbabbbaaaabbbbbaabaaabbbbbabbbbaaabbbbbbaaaaabbbbabbbbbbbbaaaabbababbbaababbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbaabababbbaabbababaabbbbbbbbbaaabbabaabbbababbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbaaaaaaabbbabbbbbabaabbbbbbbbbbbbbbaaaaabbaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbabbbabbbaaaaababbbabababbbbbbbbbbbbbbbbbbbbbaaaabaabbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaabbbaaaabbabaaabaaabbbbbbbbbbbbbbbbbbbbaaaaabaabbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaabbaabaabbbbaaabaababbbbbbbbbbbbbbbbbbbaaaaabaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbabbbbbbaabbaababbbbaaaabaabbbbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaabbbababbbbaaaabaaaaabbbbbbbbbabbbbbbbaabbbbaabbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaabbbbaabbbbaaaabaaaabbbbbbbbbbaabbbbbaaabbbbaabbbbbabbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaabbbaabbbbaaaabaaababbbbbbbbbbbbbbbaaaabbbbaabbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaabbababbaaabbbbbaaabaaababbbbbbabbbbbbbbaaaabbbaabbbbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbaaaabbaaabbbbbaaabaaababbbbbbabbbbbbbbaaaabbaaabbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaabbaaaaaaabaaabaaaaabbbbbbabbbbbbbaaaaabbaaabbbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbaaaaaaaaababaaababbbbbbbbbbbbbbaaaaabbaaabbbbbabbbba + ababbbbbabbaaaaabbbbbbabbabbbbbbaaabbbaaaaaaaaababaaabbbbbbbbbbbbbbbbaabbbbbaaabbbbbabbbba + ababbbbbabbaaaaaaaaabaabbabbabbbaaaabbaabaaabbaaabaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbba + ababbbbbbbbaaaaabbbabaabaabbaabbaaaabbbabaabbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaabbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaaaabbbaaaaabbbbabaaabbbbbbbbbbbbbbbbbaabbabbbbbbbbbbbbbba + abababbabbaaaaaabbbbbabbbbbbabbbaaaabbbbaaaabbbbabaaabbbbbbbbbbbbbbbbbabbbabbaaaabbbabbbba + abbbbbbabbaaaaabbbbbbabbabbbabbbaaaabbbbaaaaabbbabaaabbbbbbbabaabbbbbbabbbabbbabaabbabbbba + aabbbbbbbbaaaaabbbbbaaaaabaaabbbaaaabbbbaaaaaaaaaaaaababbbbbbbbbbbbbaaabbaabbbbbabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbabbbbbbaaaaabbbbbaaaaaabbaaaabbbbbbbbbbabbbbaaabababbbbaabbbbbbbbb + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaaaabbbaaaaabbbbbbbbbbbbbaabbababbbbbaabbbbbbbb + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbaaaabbbbbaaaabbbbbbbbabbbbbbbabbabbbbbbabbbbbbbb + aabbbaaaabaaaaaaaaabbbbbbbbbbbbaaaaabbbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbaabaaabbabbaabbbbbbb + abbabbbbbbaaaabbbaaaaaaaaaaaabbaaaaabbbbbbaaaaabbbbbbbaaabbbbbbbbbbbbbaabaabbbabbaabbbbbbb + abbbaaaabaaaaabbbbbbbbbbbbbaaaaaaaaaaaabbbaaaaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbabbaaabbbbbb + abbbbbbbbaaaaabbaaaaaababbbbbbbaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbabbbbaaaabbbbbbabbaaaabbbbb + abbbbbbbbaaaaabbbbbbbbbaaaaaabaaaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbabbaaaaabbbb + abbbbabbbaaaaabbbbbbbbbabbbbbbaaaaabbaabbbbaaaaaaabbbbbbbbbbabbbbbbaaababbbbbaabbaaaaaabbb + abbbbbbbbaaaabbbabbaabbabbbbbbaaaaabbbbbbbbbaaaaabbbbbbbbbaaabbbbbbaaabbbbbbbaabbbaaaaaabb + abbbbbbbbaaaabbbbbbaabaabbabbbaaaaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbaabbbbbbbaabbbaaaaaaab + abbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaaaaaabbaaaaaabbbbbbbbbbbbbbbaaabbbaaaaaaaa + abbbbbbbbaaaabbbabbbbbbbbbabbbaaaabbbbaaaaaaaaaababaaaaaaaaaabbbbbbbbabbbbbbaabbbbaaaaaaaa + abbbbabbaaaaabbbabbbbbbbbbabbbaaaabbbbaaaaabbbbbbabbaaaaabbaabbbbbbbbabbbbbaaabbbbaaaaabaa + abbbaabbaaaaabbaabbbbbabbbbbbbaaaabbbbaaaaabbbbbbabbaaaabbbaabbbbbbbbbbbbbbaaabbbbaaaabbaa + bbbbbabbaaaabbbabaaabbaababbbaaaaabbbbabaaaaaabaaabbaaababbaabbbbbaabbbbbbbaabbbbaaaaabbba + bbbbabbbaaaabbbbbbaabbaabaabbaaaaabbbbaaababaaababbaaaabbbaaabbbbbaabbbbbbaaabbbbaaaaabbba + abbbbbbbaaaaabbbbbabbbabbabbbaaaaabbbbaaaabaaaababbaaaabbbaaabbbbbbabbbbbaaaabbbbaaaaabbba + aaabbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaaaabbaaababbaaaabbbbaaaaabbbbbbbbbaaabbbbbaaaaabbba + abbaaabaaaaabbbabbabbbbbbbbbbaaaaabbbbaaabbbbaababbaaabbbbbaaaaaaaabbbbbbaaabbbbbbaaaabbba + abbbbbbaaaaaabbaaaaaaabbbbbbbaaaaabbbbaaaaabaaababbaaabbbbbbbaaaaaabbbbbaaabbbbbbbaaaabbba + abbbbbbaaaaabbbbbbabaaaaaaabbaaaabbbbbaaaaabaabbabbbaabbbbbbbbbaaaabbbbaaaabbbbbbbaaaabbba + abbabbbaaaaabbbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaabbabbbaabbbbbbbbbaaaabbbbaaabbbbbbbbaaaabbba + abbabbbaaaaabbbbbbbbbaabbbbbbaaaabbbbbbaaaabaabbabbbaaabbbbbbbbbaaabbbaaaabbbbbbbbaaaabbba + abbabbbaaaaabbbbbbbbbabbbbbbbaaabbbbbabaaabaaaababbbaaaabbbbbbbbaaabbbaaabbbbbbbbbaaaabbba + abbabbbaaaabbbabbabbbabbabbbbaaabbbbaaaaaaabaaababbbbaaabbbbbbbbbaabbaaaabbbbbbbbaaaaabbba + abbbbbbaaaabbbabbaaababbabbbaaaabbaaaaaaaaaababbabbbbaaabbbbbbbbbaabaaaabbbbbbbbbaaaaabbba`, + map `bbbbbbbabbabbbbbbbbbaaaabbbbbabbbabaaaaabbbabaaabbbabbbbaaabbbbbbbbbbbbaaabbbbbaaabbbbbbba + bbbbbbbabbabbbbbbbbbaaaabbbbbabbbbbbaaaabbbabaabbbbabbbbaaabbbbaaabbbbbbaaabbbbaaabbbbbbba + abbbabbbbbabbbbbabbaaaaabbbbbabbbbbbaaaabbaabaabbbbabbbaaabbbaaaaabbbbbbaaaabbbaaaabbbbbba + abbbbbabbaabbabaabbaaaaabaabaabbbbbbaaaaabaaaaaaaaaabbbbaabbaaaaabbbaaaabaaabbbbaaabbbbbba + abbbbbabbbbbbbbbbbbaaaabbbbbabbbbbbbaaaaabaabaaaaaabbbaaaabbaaaabbaaaaaaaaaaabbbbaabbbbbba + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbaaaaabbbaaaaabbbbabbbbaaaaabbaaaaaaaaaaaaabbbabbbbbba + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbaaaaabbbaaaaaaabbabbbbaaaabbbbbbaabaaaaaaaaabbbbbbbba + abbbbbbaaabbaaaaabbaaaabbbbbabbbbbbbbaaaaaabbaaaaaaabbaabbbaaabbbbbbbaabaaaaaaaaaabbbbbbba + abbbbbbaaabbabbbbbbaaaabbbbbaabbbbbbbbaaaaaaaaaaaaaaabaabbbbbbaababbbbbbaaaaaaaaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbaaaabbbbaaabbbbbbbabbabaaaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaaabbbaabbbbbbbbabbbabbbbbbbabbbbaaaaaabbbbbba + abbbbbbaaabbabbbbbaaaaabbbaaaaaabbabbbbbaaaaabbbbbbbbbbbbbbbbabbbbbbbaabbbbabaaaaaabbbbbba + ababbbaaaabaaaabbbaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbaaaaaaabbbbbba + abbbbbaaabbbbbbbbbaaaaaaaaaabaaaabaabbbbaaaabbbbbbbbbbbbbbbbabbbababbaabbbbbaaaaaaabbbbbba + abbbbbaaabbabbbbbaaaaabbbbabbbbabababbbbabbbbbbbabbbbbbbbbbbbbabbbabbabbbbbaaaaabaabbbbbba + abbbbbaaabbabbbbbaaaaaabbbbbbbbbbaabbbbaabbbbbbbaaabbbbbbbbbbaaaaaaababaabaaabaabaabbbbbba + abbbbbaaabbabbabbaaaaabbbbbbbbbbaaabbbaaabbbbbbbaabbbbbbbbbbbaaaababbaaaaaaaaaaabaabbbbbba + abbbbaaaabbbbbabbaaaabbbbbabbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbaaaaaabbbaaaabaaaaaaaaabbbbbba + abbbbaabbbbbbbbbbaaaabbbbbbbbaabbbbbbbaaaabbbbbbaaaabbbabbbbaaaaabbabaabbbbaaaaaaaabbbbbba + abbbbabbbbbbbbbbbaaabbbbbaabbaabbbbbbbaaaabbbbbaaaaabbbaabbbbbaaabaabaaaaaaabbaaaaabbbbbba + abbbbaaabbbbbbbbaaaabbbbaabbbbaabbbbbbaaaaabbbbaaaababaabbbbbbabaaaaabbbaaaaabaaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbaabbbbaabbbbbbbaaabbbbbbabbbaaaabbbbaababbbaaabbbbbaaaaaaaabbbbbba + abbbbbbbbbbbbbbbaaaabbbaaabbbbaabbbbbbbaaabbbbbbbbbbaaaabbbbbabaabbaaaaaaaaaaaaaaaaabbbbba + abbbbbabbbbbbbbbaaaabbbaaabbbbaabbbbbbbaaaabbbbbbbbbaaaabbbbbabaaabbaaaaaaaaaaaaaaabbbbbba + abbbbbabbbbbbbbbaaaaaaaaaaabbaaaaabbbbaaaaabbbbbbbbbaabbbbbbbaaaaabbbbaaaabbbaabbaabbbbbba + abbbbaabbbbbabbbaaabaaaaaaabbbaaaabbbbbaaabbbbbbbbbbaabbbbbbbbaaaaabbbbababbbbabbbbbbbbbba + abbbaaabbbaaaabaaabbbaaaaaabbbbaaabbbbbaaabbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbaaabaabbbbb + abbbbaabbbbbbbbaaabbaaaaababbbbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaabbbba + abbbbaabbbbbbbbaaaabaaaaabbbbbbaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbba + abbbbaabbbbbbbbaaaabbaaaabbbbbbaaabbbbaaabbbbaaaaaaabbbbbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbba + abbbbaabbbbbbbbaaaabbaaabbbbbbaaaabbbbaaabbaaaaaaaaaaaabbbbbbbbbbbaaaaaaaaaaaabaaaaabbbbbb + abbbbaabbbbbbbbaababaaaabbbbbbaaaabbbbaaaabbbaaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbaaaabbbbba + abbbbabbbbbbbbbaaaaaaaabbbbbbbbabbbbbbbaaabbbbbaaaaaaaaaaabbbbbbbbaaaaaabbbabbbbbaaabbbbba + abbbbbbbbbbabbbaaaaaaaaaaaaaaaaaababbbbaaabbbbbbaaaaaabaaaabbbbbbbaaaaaaaaabbbbbbaaabbbbba + abbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaaabaaaabbbbbbbaaaaabaabbaaabbaaabbbbba + abbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbaaaabbbbbaaaaaabaaaabbbbbbbaaaaabbabbaaaabaaabbbbba + abbbabbbbbbbbbaaaaabbabaaabbbbbbbbaabbbaaaaaabbbaabbbbbbaabbbbbbbbbaaabbabbabbbabaabbbbbba + abbbbbbbbbbbbbaaaabbbaaaaaaaaaaaaaaabbbabaaaabbbbbbabbbbbabbbbbbbbbaaabbaaaabbbabaabbbbbba + abbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbabaaaabbbaaaababbbbbbbbbbbbbbbbbbbaaaabbabaabbbbbba + abbaabbabbaaaaaaaaabaaaaaaaaaaaabaaabbabaabaabbbaaaababbbbbbbbbbbbbbbbbbbaaaaabababbbbbbba + abbaabbaabbbbbaaaaabbbbbbbbbbbaabaaabbabaabbabbbaaaababbbbbbbbbbbbbbbbbbbaaaaabaaabbbbbbba + abbaabbbbbabbbaaaabbbbbaabaaabbbbbaabbbbabbbbbaaaaaabaabbbbbbbbbbbbbbbbbbaaaaabbaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbaabbbaaaaaaabaaabbbbbbbbbabbbbbbbbaabaabbaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbaabbbbaaaaaabaabbbbbbbbbbabbbbbbaaabbbbbaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbabbbabbbaabbbbbaaaaaaaaaabbbbbbbbbabbbbbaaaabbbbbaabbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaabbbaabbbbbaaabbbbbaabbbbbbbbbbbbbbbaaaabbbbaaabbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaabbbaaaaaabaaabbbbbaaabbbbbbbbbbbbbbaaaabbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbabbbbbbaaabbaaaaaaaaaaaababaabbbbbbbbbbbbbbbaaaabbbaaabbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaaabbaabaaaabbbbbabbabbbbbbbbbbbbbbbaaaaaabbaaabbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaaabbbabaaaabbbbbabbabbbbbbbbbbbbbbbaaaaaabaaabbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaabbbabaaabbbbbbabaabbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaabbbabaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbb + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaaabbbabaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbb + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaabbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbaaaaabaaaaaaabbbbbbbbbbabbbbaaabbbbbaabbbbbbaabbba + ababbbbbabbaaaaabbbbbbabbabbbbbbaaaaabbbaaaaaaaaaaaaabbbbbbbbbbbabbbbaaabbabbbbbbbbbaabbba + ababbbbbabbaaaaaaaaabaabbabbabbbaaaaabbbbaaaaaabbaaaabbbbbbbbbbbbbbbaaaabbaabbaaabbbabbbba + ababbbbbbbbaaaaabbbbbaabaabbaabbaaaaabbbbaaaaabbbbaaabbbbbbbbbbbbbbbbbaabbaabbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaabbbbbaaaaabbbbbaabbaabbbbbbbbbbbaaaabbaabbbaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaaaabbbbbbaaaabbbbbaaaaabbbbbbbbbbbbaaaabbaabbbbabbbbbbbba + abababbabbaaaaaabbbbbabbbbbbabbbaaaabbbbbbaaaabbbbbaaaaabbbbbbbbbbbbaaaabbabbbbbabbbbbbbba + abbbbbbabbaaaaabbbbbbabbabbbabbbaaaabbbbbbaaaabbbbbbbbaabbbbbbbbbbbbaaaabbbbbbbbbabbbbbbba + aabbbbbbbbaaaaabbbbbaaababaaabbbaaaabbbbbbaaaaabbaabbbbbabbbbbbbbbbbaaaabbbbbbabbaabbbbbba + aabbbbbbbbaaaaabbbbbbabbabbbbbbaaaaabbbabbbaaaaabaabbbbbbbbbbbbbbbbbaaaabbabbbabbaabbbbbbb + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbabbaaabbbbbb + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaaaabbbbbbbbbbabbbbbbbaababbbbbbabbaaaabbbbb + aabbbaaaabaaaaaaaaabbbbbbbbbbbbaaaaabbbbbbbaaaaaaaabbbbbbbaaabbbbbbbaabbabbbbbabbaaaaabbbb + abbabbbbbbaaaabbbaaaaaaaaaaaabbaaaaabbbbbbbbaaaaaaabbbbbbaaaabbbbbbbaababbbbbaabbaaaaaabbb + abbbaaaabaaaaabbbbbbbbbbbbbaaaaaaaaaaaababbbbbbaaaaabbbaaaaaabbbbbbbaabbbbbbbaabbaaaaaaabb + abbbbbbbbaaaaabbaaaaaababbbbbbbaaaabbbbbbbbbbbbbbabaaaaaaaaaabbbbbbbaabbbbbbbaabbbaaaaaabb + abbbbbbbbaaaaabbbbbbbbbaaaaaabaaaaabbbbbbbbbbbbbbabbaaaaaaaaabbbbbbbaabbbbbbaaabbbaaaaaaaa + abbbbabbbaaaaabbbbbbbbbabbbbbbaaaaabbaabaabbbbbbbabbaaaabbaaabbbbbbbaabbbbbbaabbbbaaaaaaaa + abbbbbbbbaaaaabbabbaabbabbbbbbaaaaabbbbbbbbbbbbbaabbbaabbbaaabbbbbbbbabbbbbaaabbbaaaaaaaaa + abbbbbbbbaaaabbbbbbaabaabbabbbaaaaabbbbbbbbbbbbaaababaabbaaaabbbbbabbbbbbbbaaabbbaaaaabbba + abbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbaaabaaaabbaaaabbbbbabbbbbbbaaabbbbaaaaabbba + abbbbbbbbaaaabbbabbbbbbbbbabbbaaaabbbbaaaaaaaaabaabaaaabbabaabbbbbbabbbbbaaaabbbbaaaaabbba + abbbbabbaaaaabbbabbbbbbbbbabbbaaaabbbbaaaaaaaabbbbbaaabbbbbaaaaabbabbbbbbaaaabbbbaaaaabbba + abbbaabbaaaaabbbabbbbbabbbbbbbaaaabbbbaaaaabbbbbbbbaaabbbbbaaaaaaaabbbbbbaaabbbbbaaaaabbba + bbbbbabbaaaabbbabaaabbaababbbaaaaabbbbabaaaaaabaabbaaabbbbbbbaaaaabbbbbbaaaabbbbbaaaabbbba + bbbbabbbaaaaabbbbbaabbaabaabbaaaabbbbbaababaaabbbbbbaabbbbbbbbaaaabbbbbaaaabbbbbbaaaaabbba + abbbbbbbaaaaabbbbbabbbabbabbbaaabbbbbbababaaaabaabbbaabbbbbbbbbaaaabbbbaaaabbbbbbaaaaabbba + aaabbbbbaaaaabbbbbbbbbbbbbbbbaabbbbbbaabaabaaabaabbbaabbbbbbbbbaaaabbbaaaabbbbbbbaaaaabbba + abbaaabaaaaaabbabbabbbbbbbbbbbbbbbbbaaaaababaabbbbbbaaabbbbbbbbbaaabbbaaabbbbbbbbaaaaabbba + abbbbbbaaaaaabbaaaaaaabbbbbbbbbbbbbaaaabaabbaabbbbbbaaaabbbbbbbbaaabbaaaabbbbbbbbaaaabbbba + abbbbbbaaaaabbbbbbabaaaaaaabbbbbbaaaabbabaaaaabbbbbbbaaaabbbbbbaaababaaabbbbbbbbbaaaabbbba + abbabbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaabbaabaaaababbbbbaaaabbbbbbaaabaaaaabbbbbbbbbaaaabbbba + abbabbbaaaaabbbbbbbbbabbbbbbbbaaaaaaabbabaaaaababbbbbaaaaabbbbbaaabaaaabbbbbbbbbbaaaabbbba + abbabbbaaaaabbbbbbbbbabbbbbbaaaaaaaaabbbabaaaababbbbbaaaaabbbbbbaabaaabbbbbbbbbbaaaaabbbba + abbabbbaaaabbbabbabbbabbbbbaaaaaaaaaabbaaaabaababbbbbbaaaabbbbbbaaaaabbbbbbbbbbbaaaaabbbba + abbbbbbaaaabbbabbaaabbbbbaaaaaaaaaaaabbbaababababbbbbbbaaabbbbbbaaaaabbbbbbbbbbbaaaaabbbba`, + map `bbbbbbbabaabbbbbabbbaaaabbbbbabbabbbbbaaaaaabaaaaabbbbaaabbaaaaaabbbbbabaaaaaabbbbaabbbbba + bbbbbbbabaabbbbbbbbbaaaabbbbbabbabbbbbaaaaaaaaaaaaababaabbbaaaaabbaaaaabbaaaaaabbbbaabbbba + abbbbbbabaabbbbbabbaaaaabbbbbabbabbbbbbaaaaaaaaaaaaaaaaabbbaaababbaaaaabaaaaaaaaaabbbbbbba + abbbaababaabbaaaabbaaaaabbabaaaaabbbbbbbaaaaaaaaaaaaabaaabbaaababbbbbabbaaaaaaaaaaabbbbbba + abbbbabbbabbbbbbbbbaaaaabbbbabbbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbaaabbbbabbaaaaaaaaaaaaabbbba + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaaabaaaaabbbbbbbbbaaabbbbbbaaaaabaaaaaaabbbba + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbababaabbbbbabaabbbbaaaaaaabbbba + abbbbbbaaabbaaaaabbaaaabbabbabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbabaabbbbaaaaaabbbbba + abbbbbbaaabbabbbbbbaaaabbbbbaabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabaaabbbaaaaaaabbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbababbbabaaaabbaaaaaabbbbbb + abbbbbbaaabbabbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbabababbabbaababbaaaaaaabbbba + abbbabbaaabbabbbbbaaaaabbbabbbbabbabbbbaaaabbbbbbaabbbbbbbbbbaaaaaabbbababbbbaaaaaaaabbbba + abbbbbaaaabaaaabbbaaaaaaaaaaaaaaaaaaabbaaaabbbbbaaaabbbbbbbbbaaaaaabbaaabbbabbbaaaaabbbbba + ababbbaaabbbbbbbbbaaaaaaaaaaaaaaabaabbbaaaabbbbbaaaabbbaabbbbaaaaabbbaaabbbaaabaaaaabbbbba + abbbbbaaabbabbbbbaaaaabbbbabbbbabaaabbbaaaabbbbbaaaabbaaabbbbbaaaabbbaaabbaaabbaaaaabbbbba + abbbbbbaabbabbbbbaaaaaabbbbbbbbbaaaabbbaaaabbbbbaaaaaaaabbbbbbbaabbabaaaabaaabaaaaaabbbbba + abbbbbaaabbabbabbaaaaabbbbbbbbbbaaaabbbaaaabbbbbbbaabaaabbbbbabaabbabaaaaaaaaabaaaaabbbbba + abbbbaaaabbbbbabbaaaabbbbaaabbabbbaabbbaaaabbbbbbbbbaaaabbbbbabaabaaaaaaaaaaaaaaaaaabbbbba + abbbbaabbbbbbbbbbaaaabbbbbabbabbbbbbbbbaaaabbbbbbbbbaaabbbbbbabaaaabaaaaabbaaaaabaaabbbbba + abbbbabbbbbbbbbbbaaabbbbbaabbabbbbbbbbbaaaabbbbbbbbbaaabbbbbbabaaaabbbaaaaaaabaaaaaabbbbba + abbbbaaabbbbbbbbaaaabbbbaabbbbabbbbbbbbaaaabbbbbbbbbaaabbbbbbbaaaaabbbaaabbbbaaaaaaabbbbba + abbbbaaaaaaaaaaaaaaabbbbaabbbaaabbbbbbbaaabbbbbbbbbbbbabbbbbbbbaaaabbbbabbbbbbaabbaababbbb + abbbbbabbbbbbbbbaaaabbbaaabbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabbbb + abbbbbabbbbbbbbbaaaabbbaaabbbaaabbbbbbaaabbbbbbaaababbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaabbba + abbbbbabbbbbbbbbaaaaaaaaaaabbbaaabbbbbbaaabaaaaaaaaaabbbbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbba + abbbbaabbbbbabbbaaabaaaaaaabbbaaaabbbbbaaabbaaaaaaaaaaaabbbbbbbbbbaaabbbbbaaaaaaaaaaaabbba + abbbaaabbbaaaabaaabbbaaaaaabbbbaaabbbbbaaabbbbbaaaaaaaaaabbbbbbbbbaaaaaaaaaaaabaaaaaabbbbb + abbbbaabbbbbbbbaaabbaaaaababbbbaaabbbbbbaabbbbbbaaaaaaaaaabbbbbbbbaaaaaaaaabbbbbaaaaabbbba + abbbbaabbbbbbbbaaaabaaaaabbbbbbaaabbbbbbaaabbbbbaaaaaabaaaabbbbbbbaaaaaaaabbbbbbbaaaabbbba + abbbbaabbbbbbbbaaaabbaaaabbbbbbaaabbbbbbaaabbbbbaaaaaabaaaabbbbbbbbaaaaaaaabbbbbbaaaabbbba + abbbbaabbbbbbbbaaaabbaaabbbbbbbaaabbbbbbabaaabbbaaaaabbaaaabbbbbbbaaaaabaabbaaabbaaaabbbbb + abbbbaabbbbbbbbaababaaaabbbbbbbaaabbbbbbabaaabbbaabbbbbbaaabbbbbbbaaaaabbabbabaabaaaabbbba + abbbbabbbbbbbbbaaaaaaaabbbbbbbbaabaabbbabbababbbaaaabbbbbabbbbbbbbbaaabbbababbbabbaabbbbba + abbbbbbbbbbabbbaaaaaabaaaaaaabaabaaaabbabaaaabbbbaaababbbbbbbbbbbbbbaabbaabaabbabbaabbbbba + abbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbabbbbaabaabbbbaaababbbbbbbbbbbbbbbbbbbaaaaababbaabbbbba + abbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbaabbbbbbbaaababbbbbbbbbbbbbbbbbbbaaaaababaaabbbbba + abbbabbbbbbbbbaaaaabbabbaabbbbbbbbaabbbaabbbbaaaaaaabbabbbbbbbabbbbbbbbbbaaaaababaabbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaaaabbbabbbbbaaaaaaabaabbbbbbbaaaabbbbbbbbaaaabbaaabbbbbba + abbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbaabbbbbaaaaaaaaabbbbbbbbbababbbbbabaabaabbaaabbbbbba + abbaabbabbaaaaaaaaabaaaaaaaaaaaabaaabbaabbbbbaaababbbaabbbbbbbbbbbbbbbbababbbbbaaabbbbbbba + abbaabbaabbbbbaaaaabbbbbbbbbbbaabaaabbaaaaaabaaabababaaabbbbbbbbbbbbbbaababbbbbaaabbbbbbba + abbaabbbbbabbbaaaabbbbbaabaaabbbbbabbbbaaaaaaaaaaabaaaaabbbbbbbbbbbbbbaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbabaaaabbabbbabaabbbbbbbbbbbbbbbaaaaabbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbabaaaabbbbbbbbabbbbbbbbbbbbbbbbaaaaabbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbabbbaabbbabaaabbbbbbabbabbbbbbbbbbbbbbbbaaaaabbaaabbbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaaaabbabaaabbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaaaabbabaaabbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbabbbbbbaaaabbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaaaabbbaaaaabbbbabaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaaaabbbaaaaabaaaaaaabbbbbbbbbbbbbbbbbbabbbbbaabbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaaabbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbb + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaaabbbaaaaaabbbaaaabbbbbbbbbbbbbbbbbaabbabbbbbbbbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbaabbbabbbbabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaaabbbbbaaaabbbbaaabbbbbbbbbbbbbbbaababbbabbaaaabbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbaaaaababbbbbbbbbbbaaaabbaabbabbbbbaabbba + ababbbbbabbaaaaabbbbbbabbabbbbbbaaaaabbbbbaaaabbbbbaaaaaabbbabbbbbbbaababbbabbbbbbbbaabbba + ababbbbbabbaaaaaaaaabaabbabbabbbaaaaabbbbbaaaabbbbbbbbaaabbbbbbbbbbbaabaabbabbbaabbbbbbbba + ababbbbbbbbaaaaabbbabaabaabbaabbaaaaaabbbbaaaabbbabbbbbaabbbabbbbbbbaaaaabaabbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaaaabbbbbaaaabbaabbbbbbbbbabbbbbbbabaaabaabbabaabbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbabaabbbbbbabaabbbbbbba + abababbabbaaaaaabbbbbabbbbbbabbbaaaabbbbbbbaaaaaaaabbbbbbbbbabbbbbbbaabbbbbbbbabbaabbbbbbb + abbbbbbabbaaaaaababbbabbabbbabbbaaaabbbbbbbaaaaaaaabbbbbbbbaabbbbbaaaabbbbbbbbabbaaabbbbbb + aabbbbbbbbaaaaabbbbbaaababaaabbbaaaabbbbbbbbaaaaaaabbbbbbaaaabbbbbaaaabbbbbbbbabbaaaabbbbb + aabbbbbbbbaaaaabbbbbbabbabbbbbbaaaaabaaaabbbbaaaaaaaaabaaaaaabbbbbbbaabbabbbbabbbaaaabbbbb + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbabaaaaaaaaaabbbbbbaaabbbbbbbabbbaaaaabbbb + aabaaabbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbabbbbbbbabbaaaaaaaaabbbbbbaaabbbbbbbabbbaaaaaabbb + aabbaaaaaaaaaaaaaaabbbbbbbbbbbbaaaaabbbbaabbbbbbaabbaaababaabbbbbbbbaabbbbbbaabbbaaaaaaabb + abbabbbbbbaaaabbbaaaaaaaaaaaabbaaaaabbbbbbbbbbbbaabbaaabbbaaabbbbbbbaabbbbbbaabbbaaaaaaaaa + abbbaaaabaaaaabbbbbbbbbbbbaaaaaaaaaaaaabaabbbbbaabbbaaabbbaaabbbbbbbbbbbbbbaaabbbaaaaaaaaa + abbbbbbbbaaaaabbaaaaaababbbbbbbaaaabbbbbbbbbbbaaabbbaaabbbaaabbbbaabbbbbbbbaabbbbaaaaaaaaa + abbbbbbbbaaaaabbbbbbbbbaaaaaabaaaaabbbbbbbbbbaaaabaaaabbbbaaabbbbbaabbbbbbaaabbbbaaaaabbba + abbbbabbbaaaaabbbbbbbbbabbbbbbaaaaabbbbbbbbbaaaaabaaaabbbbbaabbbbababbbbbaaaabbbbaaaaabbba + abbbbbbbbaaaaabbabbaabbabbbbbbaaaaabbbbbbbaaaaaaabbaaabbbbbaaaabbababbbbbaaabbbbbaaaaabbba + abbbbbbbbaaaabbbabbaabaabbabbbaaabbbbbbbaaaaaaaabbbaaabbaabaaaaaaabbbbbbaaaabbbbbaaaabbbbb + abbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbaaaaaaaaabbbaaabbbbbbaaaaaabbbbbbaaabbbbbbaaabbbbba + abbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbaaaaaaaaabbbbaaabbbbbbbbaaaabbbbbaaaabbbbbaaaaabbbba + ababbabbaaaaabbbbbbbbbbbbbbbbbabbbbbabaaabbbbbbbbbbaaabbbbbbbbaaaabbbbaaaabbbbbbaaaaabbbba + abbbaabbaaaaabbbabbbbbabbbbbbbbbbbaaaaaaaabbbabbbbbbaabbbbbbbbbaaabbbaaaaabbbbbbaaaaabbbba + bbbbbabbaaaabbbabaaabbaaaabbbbbbbaaaabbbabaaaaaabbbaaabbbbbbbbbaabbbbaaaabbbbbbbaaaaaabbba + bbbbabbbaaaaabbbbbaabbabbbbbbbbaaaaaabbbbabaaababbbbaaabbbbbbbaaaabbbaaabbbbbbbbaaaaabbbba + abbbbbbbaaaaabbbbbabbbbbbbbbbbaaaaaaabbbbbaaaababbbbaaaabbbbbbaaabbbaaaabbbbbbbbaaaaabbbba + aaababbbaaaaabbbbbbbbbbbbbbbaaaaaaaaabbaabbaaababbbbaaaabbbbbbaaabaaaaabbbbbbbbbaaaaabbbba + abbaaabaaaaaabbabbabbbbbbbbaaaaaaaaaabbabbabaababbbbaaaaabbbbbbaabaaaabbbbbbbbbbaaaaabbbba + abbbbbbaaaaaabbaaaabbbbbbaaaaaaaaaaaabbbbabaaababbbbbaaaaabbbbaaabaaaabbbbbbbbbbaaaaabbbba + abbbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaaaabbbbaaaaababbbbbaaaaabbbbbbaaaaabbbbbbbbbbaaaaabbbbba + abbabbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaabbbabaaaababbbbbbaaaabbbbbbaaaabbbbbbbbbbbaaaaabbbbba + abbabbbaaaaabbbbbbbbbbaaaaaaaaaaaaaaabbababaaababbbbbbaaaabbbbbaaaabbbbbbbbbbbbaaaaabbbbaa + abbabbbaaaaabbbbbbbbbaaaaaaaaaaaaaaaabbbabaaaababbabbbbaaabbbbbaaabbbbbbbbbbbbbaaaabbbbbaa + abbabbbaaaabbbabbbbaaaaaaaaaaaaaaaaaabbaaabbaababbabbbbaaabbbbaaaabbbbbbbbbbbbaaaaabbbbbaa + abbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaaaaabbbaaaaaababbabbbbaaaabbbaaabbbbbbbbbbbbbaaaaabbbbbaa`, + map `bbbbbbbabaabbbbbabbbaaaabbbbbabbabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbaaaaabbbbaaaaabbbbbba + bbbbbbbabaabbbbbbbbbaaaabbbbbabbabbbbbbbbaaaaaaaaaaaaaaabbbbbbaaaaabbaaaaaaabbaaaaaaabbbba + abbbbbbabaabbbbbabbaaaaabbbbbabbabbbbbbbbaaaaabbbbbabbbbbbbbbabaaaabbbababaabbaaaaaabbbbba + abbbaababaabbaaaabbaaaaabbabaaaaabaabbbbbbaaabbbbbbbbbbbbbbbbabbabbbbbabaaaabbbaaaaaaabbba + abbbbbbbbabbbbbbbbbaaaaabbbbabbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbb + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaabbbaaaaaabbbbb + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbabaaabbbaaaaaaabbbbb + abbbbbbaaabbaaaaabbaaaabbabbabbbbbbbbbbaaaabbbbbbbabbbbbbbbbbbaaaaaabaaaaaabbbbaaaaaabbbbb + abbbbbbaaabbabbbbbbaaaabbbbbaabbbbbabbbbaaabbbbbaaaabbbbbbbbbbaaaaabbabbaaaaaabaaaaaabbbbb + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbaaaabbbbabbbbaaaaaabbabbaabbbbbaaaaaaabbba + abbbbbbaaabbabbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbaaaaaabbbbabbbbaaaaaabbabbabbbbabaaaaaaabbbb + abbbabbaaabbabbbbbaaaaabbbabbbbabbabbbbbaaaabbbbaabaaabaabbbbbbaaaabbaaabbbaaaaaaaaabbbbbb + abbbbbaaaabaaaabbbaaaaaaaaaaaaaaaaaaabbbaaaabbbbbbaaaaaabbbbbbbaabbbbaaabbaaaabbaaaaabbbba + ababbbaaabbbbbbbbbaaaaaaaaaaaaaaabaaabbbaaaabbbbbbbaaaaaabbbbabaabbabaaaabaaabbaaaaaabbbbb + abbbbbaaabbaabbbbaaaaabbbbabbbbabbaaabbbaaabbbbbbbbbaaabbbbbbabaabaaaaaaaaaaaaabaaaabbbbba + abbbbbbaabbabbbbbaaaaaabbbbbbbbbbaaabbbbaaabbbbbbbbbaaabbbbbbbbaaaabaaaaaaaaaaaaaaaabbbbba + abbbbbaaabbabbabbaaaaabbbbbbbbbbaaaabbbbaaabbbbbbbbbaaabbbbbbbbaaaabbbbbaaaababaaaaabbbbbb + abbbbaaaabbbbbabbaaaabbbbaaabbababbbbbbbaabbbbbbbbbbbaabbbbbbbbaaaabbbbaaaaaaabaaaaaabbbbb + abbbbababbbbbbbbbaaaabbbbbabbabbbbbbbbaaaababbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbaaaaaaaabbbba + abbbbabbbbbbbbbbbaaabbbbbaabbabbbbbbbbaaaabaabaabbbbbbbbbbbbbbbbaaabbbbabbbbbbbabbaaaaabbb + abbbbaaabbbbbbbbaaaabbbbaabbbbabbbbbbbaaaabaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbb + abbbbaaabaaaaaaaaaaabbbbaabbbaaabbbbbbbaaabbaaaaaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbaaaabbb + abbbbbabbbbbbbbbaaaabbbaaabbbaaabbbbbbbaaabbbbbaabbbaaaaabbbbbbbbbaaabbbbbbbbbbbaaaaaabbba + abbbbbabbbbbbbbbaaaabbbaaabbbaaabbbbbbbaaaabbbbaaabbaaaaaabbbbbbbbaaaabbbaaaaabbaaaaaabbba + abbbbbabbbbbbbbbaaaaaaaaaaabbbaaabbbbbbbaaabbbbbaaaaaabaaabbbbbbbbaaaaaaabaaaabaaaaaaabbba + abbbbaabbbbbabbbaaabaaaaaaabbbaaaabbbbbbaaaabbbbaaaaaabaaaabbbbbbbaaaaaaabbbbbbbaaaaaabbbb + abbbaaabbbaaaabaaabbbaaaaaabbbbaaaabbbbbabaaabbbaaaaaabaaaabbbbbbbaaaaaaababbbbbbaaaaabbbb + abbbbaabbbbbbbbaaabbaaaaababbbbaaaabbbbbabaaabbbabbbbbbaaaabbbbbbbaaaaaaaaabaabbbaaaaabbbb + abbbbaabbbbbbbbaaaabaaaabbbbbbbaaabbbbbbbbababbbbbbbbbbbbaabbbbbbbaaaaabaabbaaaabaaaaabbba + abbbbaabbbbbbbbaaaabbaaabbbbbbbaaabbbbbbbaaaabbbabbbbbbbbabbbbbbbbbaaabbaabaabbabbaaabbbba + abbbbaabbbbbbbbaaaabbaaabbbbbbaaaabbbbbbaaaaabbbbabbabbbbbbbbbbbbbbbaabbaababbbabbaaabbbba + abbbbaabbbbbbbbaababaaaabbbbbbaaaabbbbbbaabaabbbbbaababbbbbbbbbbbbbbbbbbaabaabbabbaaabbbbb + abbbbabbbbbbbbbaaaaaaaabbbbbbbbabaabbbbaabbbaaaaaaaabbbbbbbbbbbabbbbbbbbbaaaaababbaaabbbba + abbbbbbbbbbabbbaaaaaabaaaaaaabaabaaabbbabbbbaaaaaaaaaaabbbbbbbaaabbbbbbbbaaaaabbbaaabbbbba + abbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbabbbaabbbbaababaaaaaabbbbbbbbababbbbbbbbaaaabbbaaabbbbba + abbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbaabbbbaaaabababaabbbbbbbbabbbbbbbabbaaaabbaaaabbbbba + abbbabbbbbbbbbaaaaabbabbaabbbbbbbbabbbaaaaabbaaaaabbbaabbbbbbbbbbbbbbbbababbabbbaaabbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbaabbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbba + abbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbabaaaabbaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbaaabbbbbbba + abbaabbabbaaaaaaaaabaaaaaaaaaaaabaaabbbabaaaabbabbbaaaabbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbba + abbaabbaabbbbbaaaaabbbbbbbbbbbaabaaabbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbbaaaaabbbaaaabbbbbbba + abbaabbbbbabbbaaaabbabbaabbaabbbbbaabbbbbaaabbbbbaaababbbbbbbbbbbbbbbbaaaaabbaaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbabaaabbbbbbaababbbbbbbbbbbbbbbaaaaaabbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbabaaabbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbabbbaababbbaaabbbbabbabbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaaaabbbaaaabbbaaababbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaaaabbbaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbabbbbbbaaaabbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaaaabbbbaaaaabbbaaaabbbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaaaabbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbabbbbbaabbbabbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaaabbbbbaaaabbbbaaaabbbbbbbbbbbbbbaababbabbbbbbabbbbbbbb + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaaabbbbbaaaabbbbaaaaaaabbaabbbbbbbaaaaababbbaababbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbaaaabbabbbbbbbbaaaabbaabbaababbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaaabbbbbaaaabbbabbbbaaabbbabbbbbbbaababbbabbabbbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaabbaabbbbbaabbbaabbbbbbaabbbbbabbbabbbbbbbbba + ababbbbbabbaaaaabbbbbbabbabbbbbbaaaaabbbbbaaaabbaabbbbbbbbbbaabbbbbbaaaabbbabbbabbbbaabbba + ababbbbbabbaaaaaaaaabaabbabbabbbaaaaabbbbbaaaaaaaaabbbbbbbbbbabbbbbbaabaabbabbbaabbbbbbbba + ababbbbbbbbaaaaabbbabaabaabbaabbaaaaaabbbbaaaaaaaabbbbbbbbbbabbbbbbaaabbababbbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaaaabbbbbaaaaaaabbbbbbbbbaabbbbbbbaabbabaabbbbaabbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaaaaabbbbbbaaaaaaaabbbbbaaaaabbbbbbbaabbbbbbbbbbaabbbbbbba + abababbbbbaaaaaabbbbbabbbbbbabbbaaaabbbbbbbbbaaaaaaaabbaaaaabbbbbbaaaabbbbbbbbbbaaabbbbbbb + abbbbbbabbaaaaaababbbabbabbbabbbaaaabbbbbbbbbbbbaabaaaaaaaaabbbbbbaaaabbbbbbbabbaaaabbbbbb + aabbbbbbbbaaaaabbbbbaaababaaabbbaaaabbbabbbbbbbbaabbaaaaabaabbbbbbaaaabbbbbbbabbaaaaabbbbb + aabbbbbbbbaaaaabbbbbbabbabbabbbaaaaabbbaaaabbbbbabbaaaabbbaabbbbbbaaaabbbbbbbabbaaaaabbbbb + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaabbaaaabbaaabbbbbbaaaabbbbbbaabbaaaaaabbbb + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaaabbbaabbbaaabbbbbbaaabbbbbbbaabbaaaaaaabbb + aabbbaaaaaaaaaaaaaabbbbbbbbbbbbaaaaabbbbbbbbbaaabbbbaaaabbabbbbbbaabbbbbbbbaabbbaaaaaaaaab + abbabbbbbbaaaabbbaaaaaaaaaaaabaaaaabbbbbbbbbaaaabbabaaaabbabbbbbaaabbbbbbbaaabbbaaaaaaaaaa + abbbaaaabaaaaabbbbbbbbbbbbaaaaaaaaabbbbbbbaaaaaabbaaaaabbbaabbbbababbbbbbbaaabbbaaaaaaaaaa + abbbbbbbbaaaaabbaaaaaababbbbbbbaabbbbbbbaaaaaaaabbaaabbbbbaaaabaabbbbbbbbaaabbbbaaaaaaaaaa + abbbbbbbbaaaaabbbbbbbbbaaaaabbaabbbbbbaaaaaaaaabbbaaabbbbbbaaabaaabbbbbbaaaabbbbaaaabbbbba + abbbbabbbbaaaabbbbbbbbbabbbbbbbbbbbbaaaaaaabbaabbbaaabbbbbbaaaaaaabbbbbbaaabbbbbaaaabbbbba + abbbbbbbbaaaaabbabbaabbabbbbbbbbbbaaaaaaaaaaaaabbbaaabbbbbbbaaaaabbbbbbaaaabbbbbaaaabbbbba + abbbbbbbbaaaaabbabbabbaabbbbbbbbbaaaaaaaaaaaaaabbbaaabbbbbbbbaaaabbbbbaaaaabbbbbaaaabbbbba + abbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaabbaaaaaaaabbbaaabbbbabbbbaaaabbbaaaaabbbbbaaaaabbbbba + abbbbbbbbaaaabbbabbbbbbbbbbbbaaaaaaaabaabbaaaabbbbaaabbbbbbbbbaaabbbbaaaabbbbbbaaaaaabbbba + ababbabbaaaaabbbabbbbbbbbbbbaaaaaaaaabaabbbbbbbbbbbaaabbbbbbbbbaabbbaaaabbbbbbbaaaaabbbbba + abbbaabbaaaaabbbaabbbbbbbbaaaaaaaaaaabaaabbbbabbbbbaaabbbbbbbbaaabbbaaaabbbbbbbaaaaabbbbba + bbbbbabbaaaaabbabbbbbbbbbaaaaaaaaaaaabbbabaaaaaabbbaaaabbbbbbbbaabbaaaabbbbbbbbaaaabbbbbba + bbbbabbbaaaaabbbbbbbbbbbaaaaaaaaaaaaabbbbabaabbabbbaaaaabbbbbbbaaaaaaabbbbbbbbbaaaababbbba + abbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaaabbbbbaaaababbbaaaaabbbbbbbaaaaaaabbbbbbbbbaaaababbbba + aaababbbaaaaabbbbbbbbaaaaaaaaaaaaaaaabbbabbaaababbbbaaaaabbbbbbabaaabbbbbbbbbbbaaaaaabbbba + abbaaabaaaaabbbbbbbbaaaaaaaaaaaaaaaaabbbbbabaababbbbaaaaabbbbbbaaaaabbbbbbbbbbaaaaaaabbbba + abbbbbbaaaaabbbbbbaaaaaaaaaaaaaaaaaaabbbbabaaababbbbbaaaabbbbbaaaaabbbbbbbbbbbaaaaababbbba + abbbbbbaaaaabbbbbaaaaabaaaaaaaabaaaaababbaaaabbabbbbbaaaabbbbaaaabbbbbbbbbbbbbaaaaabbbbbaa + abbabbbaaaaabbbbaaaabaaaaaaaaabbbaaaabbbabaaaababbbbbaaaabbbbaaaabbbbbbbbbbbbaaaaabbbbbaba + abbabbbaaaabbbbaaaaaaaaaaaaababbbaaaabbababaaababbbbbbaaabbbaaaabbbbbbbbbbbbbaaaaabbbbbbba + abbabbbaaaabbbbaaaaaaaaaaaabbbbbbaaaabbbabaaaababbbbbbaaaabaaabbbbbbbbbbbbbbbaaaabbbbbbbba + abbabbbaaaabbbbaaaaaaaabaaabbbbbbaaaabbbaabbabbabbabbbbaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbba + abbbbbbaaaabbbaaaaaaaaabaaabbbbbbaaaabbbaaaaaababbabbbbaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbba`, + map `bbbbbbbabaabbbbbabbbaaaabbbbbabbabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaababaaaaabbbbbbba + bbbbbbbabaabbbbbbbbbaaaabbbbbabbabbbbbbbbaaaaaaaaaaaaababbbbbbaaaaabbaaaaaaabaaaaaaaabbbba + abbbbbbabaabbbbbabbaaaaabbbbbabbabbbbbbbbaaaaaaabbbaabbbbbbbbabaaaaabbababaaaaaaaaaabbbbba + abbbaababaabbaaaabbaaaaabbabaaaaabaabbbbbbaaabbbbbbbbbbbbbbbbabbabbbbbbbaaaaabbbaaaaaabbba + abbbbbbbbabbbbbbbbbaaaaabbbbabbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabaabbaaaaaabbbbb + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaaabbaaaaaabbbbb + abbbbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaabbabaaabbbbaaaaaabbbbb + abbbbbbaaabbaaaaabbaaaabbabbabbbbbbbbbbaaaabbbbbaabbbbbbbbbbbbaaaaaabaabaaabbbbaaaaaaabbbb + abbbbbbaaabbabbbbbbaaaabbbbbaabbbbaabbbbaaabbbbaaaaabbbbbbbbbbaaaaabbaabaaabbbbaaaaaabbbbb + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbaaaaaabbabbaaababbaaaaaaabbba + abbbbbbaaabbabbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbabbbbaaaaaabbabbaabaaabaaaaaaabbbb + abbbbbbaaabbabbbbbaaaaabbbabbbbabbabbbbbaaaabbbbaaaaaabaabbbbbbaaaabbaabaabbaaaaaaaabbbbbb + abbbbbbaaabaaaabbbaaaaaaaaaaaaaaaaaaabbbaaaabbbbbbbaaaaabbbbbaaaaabbbaaabbbaabbbaaaaabbbba + ababbbbaabbbbbbbbbaaaaaaaaaaaaaaabaaabbbaaaabbbbbbbbaaaabbbbbaabbbbabaaabbbaabbbaaaaabbbbb + abbbbaaaabbaabbbbaaaaabbbbabbbbaaaaabbbbaaabbbbbbbbbaaaabbbbbabbbbbaaaaaabaaaabbaaaabbbbba + abbbbaaaabbabbbbbaaaaaabbbbbbabbbaaabbbbaaabbbbbbbbbaaaabbbbbabaaaaaaaaaaaaaaabbaaaabbbbba + abbbbbaaabbabbabbaaaaabbbbbbbbbbaaaabbbbaaabbbbbbbbbbaaabbbbbbbaaaabbbbbaaaabbbaaaaabbbbbb + abbbbaaaabbbbbabbaaaabbbbaaabbbbbbbabbbbaabbbbbbbbbbbaaabbbbbbbaaaabbbbaabaaaabaaaaaabbbbb + abbbbaaaabbbbbbbbaaaabbbbbabbbbbbbbbbbaaaababbbbbbbbbbbbbbbbbbbaaaabbbbaaabbbaaabaaaabbbba + abbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbaaaabaabaabbbbbbbbbbbbbbbbaaabbbbabbbbbbbabbaaaaabbb + abbbbaaabbbbbbbbaaaabbbbaabbbbabbbbbbbaaaabaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaabbb + abbbbaaabaaaaaaaaaaabbbbaabbbbaabbbbbbbaaabbaaaaaaaaaaabbbbbbbbbbaaabbbbbbbbabbbabbaaaabbb + abbbbbabbbbbbbbbaaaabbbaaabbbaaabbbbabbaaabbbbbaabbbaaaaabbbbbbbbbaaabbbbbaaabbbaaaaaabbba + abbbbbabbbbbbbbbaaaabbbaaaaabaaabbbbbbbaaaabbbbaaabbaaaaaabbbbbbbbaaaabbbbaaabbbaaaaaabbba + abbbbbabbbbbbbbbaaaaaaaaaaabbaaaabbbbbbbaaabbbbbaaaaaabaaabbbbbbbbaaaaaaabaaaabaaaaaaabbba + abbbbaabbbbbabbbaaabaaaaaaabbbaaaabbbbbbaaaabbbbaaaaaaaaaaabbbbbbbaaaaaababbbbbbaaaaaabbbb + abbbaaabbbababbaaaabbaaaaaabbbbaaaabbbbbabaaabbbaabaaaaaaaabbbbbbbaaaaaaabbbbbbbbaaaaabbbb + abbbbaabbbbbabbbaabbaaaaabaabbbaaaabbbbbabaaabbbabbbbbbaaaabbbbbbbbaaaaaaaabaabbbaaaaabbbb + abbbbaabbbbbbbbaaaabaaaabbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbaabbbbbbbaaaaabaabaaaaabaaaaabbba + abbbbaabbbbbbbbaaaabbaaabbbbbbbaaabbbbbbbaaaabbbbaabbbbbbabbbbbbbbaaaabbaabaabbabbaaabbbba + abbbbaabbbbbbbbaaaabbaaabbbbbbaaaabbbbbbaaaaabbbbaaabbbbbbbbbbbbbbbbaabbaababbbabbaaabbbba + abbbbaabbbbbbbbaababaaaabbbbbbaaaabbbbbbaabaabbbbaaabbbbbbbbbbbbbbbbbbbbaabaabbabbaaabbbbb + abbbbabbbbbbbbbaaaaaaaabbbbbbbbababbbbbaabbbbabaaaaaabbbbbbbbbbabbbbbbbbbaaaaababbaaabbbba + abbbbbbbbbbabbbaaaaaabaaaaaaabaabaaabbbabbbbaaaabaaaaaabbbbbbbaaabbbbbbbbaaaaabbbaaabbbbba + abbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbabbbaabbbbaababaabaaabbbbbbbbababbbbbbbbaaaabbbaaabbbbba + abbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbaabbbbaaaabaaaaaabbbbbbbbabbbbbbbabbaaaabbaaaabbbbba + abbbabbbbbbbbbaaaaabbabbaabbbbbbbbaabbaaaaabbaaaaabbaaabbbbbbbbbbbbbbbbababbabbbaaabbbbbba + abbbabbbbbbbbbaaaabbaaaaaaaaaaaaaaaabbbaaaaabaaaaabbbaabbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbba + abbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbabaaaabbaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbaaabbbbbbba + abbbabbaaaaaaaaaaaabaaaaaaaaaaaabaaabbbabaaaabbabbbbaaabbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbba + abbaabbaabbbbbaaaaabbbbbbbbbbbaabaaabbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbbaaaaabbbaaaabbbbbbba + abbaabbbbbbbbbaaaabbaabaabbaabbbbbaabbbbbaaabbbbbaaababbbbbbbbbbbbbbbbaaaaabbaaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbabaaabbbbbaaababbbbbbbbbbbbbbbaaaaaabbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbabaaabbbbbbaababbbbbbbbbbbbbbbaabbbbbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaababbbaaabbbbbbaababbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaaaabbbaaaabbbaaabaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbaaaaaabaaaaabbaaaabbbaaaaaaaaaabbabbbbbbbbbbbabbbbbbbbbbbbaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaaaabbbaaaaaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaaaabbbbaaaaabbbaaaabbbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaaaabbbbaaaabbbbbaaabbbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaaabbbbbaaaabbbbbaabbbbbbbbbbbbbbbaababbabbbbbbabbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaaabbbbbaaaabbbbaaaaaaabbabbbbbbbbaabaababbbaababbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbaaaaaabbabbbbbbbbaaaabbaabbabbabbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaaabbbbbaaaabbbabbbbaaabbbabbbbbbbaaaabbbabbbabbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbbbbbaaaaabbbbbaaaabbaabbbbaaabbbaabbbbbbaaaabbbabbbabbbbbbbbba + ababbbbbabbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaabbaabbbbbbbbbbaabbbbbbaabaabbabbbabbbbaabbba + ababbbbbabbaaaaaaaaabaabaabbabbbaaaaabbbbbaaaaaaaabbbbbbbbbbbabbbbbbaabaabbabbbaabbbbbbbba + ababbbbbbbbaaaaabbbabaaaaaabaabbaaaaaabbbbaaaaaaaabbbbbbbbbbbabbbbbbaababbabbbbbabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaaaabbbbbaaaaaaabbbbbbbbbaabbbbbbbaabaabaabbbbaabbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaaaabbbbbbbaaaaaaaabbbbbbaaaabbbbbbaaabbbbbbbbbbaabbbbbbba + abababbabbbaaaaabbbbbabbbbbbabbbaaaabbbbbbbbbaaaaaaaabbaaaaabbbbbbaaaabbbbbbbbbbaaabbbbbbb + abbbbbbabbaaaaaababbbabbabbbabbbaaaabbbabbbbbbbbaabaaaaaaaaabbbbbbaaaabbbbbbbabbaaaabbbbbb + aabbbbbbbbaaaaabbbbbaaababaaabbbaaaabbbabbbbbbbbaabbaaaaabaabbbbbbaaaabbbbbbbabbaaaaabbbbb + aabbbbbbbbaaaaabbbbbbbbbabbabbbaaaaabbaaaaabbbbbabbaaaabbbaabbbbbbaaaabbbbbbbabbaaaaabbbbb + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaabbaaaabbaaabbbbbbaaaabbbbbbaabbaaaaaabbbb + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaaabbbaabbbaaabbbbbbaaabbbbbbbaabbaaaaaaabbb + aabbaaaaaaaaaaaaaaabaabbbbbbbbbaaaaabbbbbbbbbaaabbbbaaaabbabbbbbbaabbbbbbbbaabbbaaaaaaaaab + abbabbbbbbaaaabbbaaaaaaaaaaaabaaaaabbbbbbbbbaaaabbaaaaaabbabbbbbaaabbbbbbbaaabbbaaaaaaaaaa + abbbaaaabaaaaabbbbbbbbbbbbaaaaaaaaabbbbbbbaaaaaabbaaaaaabbaabbbbababbbbbbbaaabbbaaaaaaaaaa + abbbbbbbbaaaaabbaaaaaababbbbbbbaabbbbbbbaaaaaaaabbaabbbbbbaaaabaabbbbbbbbaaabbbbaaaaaaaaaa + abbbbbbbbaaaaabbbbbbbbbaaaaabbaabbbbbbaaaaaaaaabbbaabbbbbbbaaabaaabbbbbbaaaabbbbaaaabbbbba + abbbbaabbbaaaabbbbbbbbbabbbbbbbbbbbbaaaaaaabbaabbbaabbbbbbbaaaaaaabbbbbbaaabbbbbaaaabbbbba + abbbbbbbbaaaaabbaaaaabbabbbbbbbbbbaaaaaaaaaaaaabbbaaabbbbbbbaaaaabbbbbbaaaabbbbbaaaabbbbba + abbbbbbbbaaaaabbbbbaabaabbbbbbbbbaaaaaaaaaaaaaabbbaaabbbbbbbbaaaabbbbbaaaaabbbbbaaaabbbbba + abbbbbbbbaaaabbbbbbabbbbbbbbbbbbaaaaabbaaaaaaaabbbaaabbbbabbbbaaaabbbaaaaabbbbbaaaaabbbbba + abbbbbbbbaaaabbbabbabbbbbbbbbaaaaaaaabaabbbaaabbbbaaabbbbbbbbbaaabbbbaaaabbbbbbaaaaaabbbba + ababbabbaaaaabbbabbbbbbbbbbbaaaaaaaaabaabbbbbbbbbbbaaabbbbbbbbaaabbbaaaabbbbbbbaaaaabbbbba + abbbaabbaaaaabbbabbbbbbbbbaaaaaaaaaaabaaabbbbabbbbbaaabbbbbbbbaaabbbaaaabbbbbbbaaaaabbbbba + bbbbbabbaaaaabbabbbbbbbbbaaaaaaaaaaaabbbabaaabbabbbaaaabbbbbbbbaabbaaaabbbbbbbbaaaaabbbbba + bbbbabbbaaaaabbbbbbbbbbbaaaaaaaaaaaaabbbbabaabbabbbaaaaabbbbbbbaaaaaaabbbbbbbbbaaaababbbba + abbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaaabbbbbaaaababbbaaaaabbbbbbbaaaaaaabbbbbbbbbaaaababbbba + aaababbbaaaaabbbbbbbbaaaaaaaaaaaaaaaabbbbabaaababbbbaaaaabbbbbbabaaabbbbbbbbbbbaaaaaaabbba + abbaaabaaaaaabbbbbbbaaaaaaaaaaaaaaaaabbbbbbbaababbbbaaaaabbbbbbaaaaabbbbbbbbbbaaaaababbbba + bbbbbbbaaaaabbbbbbaaaaaaaaaaaaaaaaaaabbbaabaaababbbbbaaaabbbbbaaaaabbbbbbbbbbbaaaaababbbba + abbbbbbaaaaabbbbbaaaaabaaaaaaaabaaaaababbaaaabbabbbbbaaaabbbbaaaaabbbbbbbbbbbbaaaaabbbbbaa + abbbbbbaaaaabbbbaaaabaaaaaaaaabbbaaaabbbabaaaababbbbbaaaabbbbaaaabbbbbbbbbbbbaaaaabbbbbaba + abbbbbbaaaabbbbaaaaaaaaaaaaababbbaaaabbababaabbabbbbbbaaaabbaaaabbbbbbbbbbbbbaaaaabbbbbbba + abbaabbaaaabbbbaaaaaaaaaaaabbbbbbaaaabbbaaaaaababbbbbbaaaabbaaabbbbbbbbbbbbbbaaaabbbbbbbba + abbbbbbaaaabbbbaaaaaaaabaaabbbbbbaaaabbbaabbaababbbbbbbaaaaaaabbbbbbbbbbbbbbaaaaabbbbbbbba + abbbbbbaaaabbbaaaaaaaaabaaabbbbbbaaaabbbabaaaababbbbbbbaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbba`, + map `bbbbbbbabaabbbbbbbbbaaaabbbbbabbabbbbbbbbaaaaaaaaaaaaaaabbbaaaaaaaabaaaaaaaabbbaaaabbbbbbb + bbbbbbbabaabbbbbbbbaaaaabbbbbabbabbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaabbbbababaababaaaaaaabbba + abbbabbabaabbbbbabbaaaaabbbbbabbabbabbbbbbaaabbbbbbbbbbbbbbbbaababbbbbbbaabaaabaaaaaaabbba + abbbaababaabbabaabbaaaaabaabaaaaabaabbbabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbabbbaaaaaabbbb + abbbbaabbbbbbbbbbbbaaaabbbbbabbbabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbabbbbbbbaabaabbbbaaaaabbbb + abbbaaaababbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbbbaaaaabbabaaabbabaaaaaaabbbb + abbbbaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaababaaaaabbbbbbbbbaaaaaaabbaaaabbbabaaaaaabbbbb + abbbbbbaaabbaaaaabbaaaabbabbabbbbbbbbbbbaaaabababbaabbbbbbbbbaaaaaaabaaaaabbbbaaaaaaabbbbb + abbbbbbaaabbabbbbbaaaaabbbbbaabbbbaabbbbaaaaabaaaaaabbbbabbbbaaaaaabbbbbaaabbbaaaaaaabbbbb + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbaaabbbaabbbbaaaaaabbabbabbbaabaaaaaaabbbb + abbbbbbaaabbabbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbaaaaaabbbbbbaaaaabbabbabbbbbbbaaaaaabbbb + abbbbbbaaabbabbbbbaaaaabbbabbbbabbabbbbbbaaabbbbbbaaaaaabbbbbaaaabbabaababbabbbbbaaaabbbbb + ababbbbaaabaaaaabbaaaaaaaaaaaaaaaaaaabbbaaabbbbbbbbbaaaabbbbbaaabbbabaaaabbaaabbaaaaabbbbb + abbbbbbaabbbbbbbbbaaaaaaaaaaaaaaabaaabbbaaabbbbbbbbbaaabbbbbbabbbbaabaaaaaaaaaabaaaaabbbbb + abbbbaaaabbabbbbbaaaaabbbbabaabaaaaabbbbaaabbbbbbbbbaaaabbbbbabaaaabaaaaaaaaaaaabaaaabbbbb + abbbbaaaabbabbbbbaaaaaabbbbbbbabbaaabbbbaaabbbbbbbbbbaaabbbbbbaaaaabbbbbaaaaaabaaaaaabbbbb + abbbbbaaabbabbabbaaaaabbbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaabbaabaaaaabbbbb + abbbbaaaabbbbbabbaaaabbbbaabbbbbbbbabbaaaababbbaabbbbbbbbbbbbbbaaaabbbaaaaaaaaabaaaaabbbbb + abbbbaaaabbbbbbbbaaabbbbbbabbbbbbbbbbbaaaabaaaaaaababbbbbbbbbbbbaaabbbbbaabbbbaabaaaabbbbb + abbbbabbbbbbbbbbbaaabbbbbaabbbbbbbbbbbaaaabbaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbbabbaaaaabbb + abbbbaaabbbbbbbbaaaabbbbaabbbbabbbbbbbbaaabbbbaaaabaaaaabbbbbbbbbbaabbbbbbbbbbbbbbbabbabbb + abbbbaaabaaaaaaaaaaabbbbaabbbbaabbbbabbaaaabbbbaaabbbaaaabbbbbbbbbaaabbbbbbaaabbabaaababbb + abbbbbabbbbbbbbbaaaabbbaaabbbaaaabbbbbbbaaabbbbbaaaabbbaaabbbbbbbbaaabbbbbaaaabbaaaaaaabbb + abbbbbabbbbbbbbbaaaabbbaaaaabaaabbbbbbbbaaabbbbbaaaaaaaaaabbbbbbbbaaaaabbaaaabbbaaaaaaabbb + abbbbbabbbbbbbbbaaaaaaaaaaabbbaaaabbbbbbabaabbbbaaaaaaaaaabbbbbbbaaaaaaaabaabbbaaaaaaaabba + abbbbaabbbbbabbbaaabaaaaaaabbbaaaabbbbbbabaaabbbabbbbbbaaabbbbbbbbaaaaaabbbbbbbbaaaaaabbba + abbbaaabbbababbaaaabbaaaaaabbbbaaaabbbbbbbaaabbbabbbbbbbaaabbbbbbbaaaaaaaabbbbbbbaaaaabbbb + abbbbaabbbbbabbbaabbaaaaabbabbbaaaabbbbbbaaaabbbaaabbbbbaabbbbbbbbaaaaabaabaaaabbaaaaabbbb + abbbbaabbbbbbbbaaaabaaaaabbbbbbaaabbbbbbaaaaabbbaaabbbbbbbbbbbbbbbaaaabbabbaaaaabaaaaabbbb + abbbbaabbbbbbbbaaaabbaaaabbbbbbaaabbbbbaaaaaabbbaaaabbbbbbbbbbbbbbbaaabbabbabbbabbaaaabbba + abbbbaabbbbbbbbaaaabbaaabbbbbbaaaabbbbbaabbbbbbbaaaababbbbbbbbbbbbbbbbbbaababbbabbaaabbbba + abbbbaabbbbbbbbaababaaaabbbbbbaaaabbbbaabbbaaaaaaaaaaabbbbbbbbbabbbbbbbbbaaaabbabbaaabbbbb + abbbbabbbbbbbbbaaaaaaaabbbbbbbbaaabbbbaabbbbaaaaaaaaaabbbbbbbbbabbbbbbbbbaaaaababaaaabbbbb + abbbbbbbbbbabbbaaaaaaaaaaaaaababbbabbaaabbbbaaaabaaaaaaabbbbbbbaabbbbbbbbaaaaabbbaaaabbbba + abbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbaaaaaabaaabbbbbbbbbabbbbbbbbbaaaaabbaaaabbbbba + abbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaaabaaaaaabbaaabbbbbbabbbbbbbbbbbaabaabbaaaabbbbba + abbbabbbbbbbbbaaaaabbabbaabbbbbbbbbabbbaaaaaabbaabbbaaabbbbbbbbbbbbbbbabaabbabbbaaabbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaaaabbbabaaaabbaabbbaaabbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbba + abbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbabaaabbbbbabbbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbba + abbbabbabbaaaaaaaaabaaaaaaaaaaaabaaabbbbbaaabbbbaaababbbbbbbbbbbbbbbbaaaaabbbbaaaabbbbbbba + abbaabbabbbbbbaaaaabbbbbabbbbbaabaaabbbbaaaabbbbaabbabbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbba + abbaabbbbbabbbaaaabbaabaabbaabbbbbaabbbbaaaabbbbaaababbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaaabbbaaaabbbbbbbababbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbaaaaaaaaaabaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaaaabbbaaaaaaaaaabaabbbbbbbbbbaabbbbbbbbbbbaaaabbbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaaaabbbaaaaaaabbbaabbbbbbbbbbbbbbbbbbbabbbbaaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaaaabbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaaaabbbbaaaabbbbbaabbbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaaaabbbbaaaabbbbbaaabbabbbbbbbbbbbbaabbbbbbaabbbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaaabbbbbaaabbbbaaaaaaaaabbbbbbbbbaaabbbbabbbbbbabbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaaabbbbbaaabbbbbbbbaaabbbaabbbbbbaaaabbbabbbbbbabbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbaaaabbaabbbbaabbbabbbbbbbaabaabbaabbabbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaaabbbbbaaaabbaabbbbabbbbbbabbbbbbabbabbaabbaababbbbbbba + ababbabbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaabaaabbbbbbbbbbaabbbbbaaababbaabbaababbbabbba + ababbabbabbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbaaaaaaabbbbbbbbbbbbabbbbbbbaaabbaabbbabbbbbbbbba + ababbbbbbbbaaaaaaaaabbabaabbabbbaaaaabbbbbaaaaaaabbbbbbbbbbbaabbbbbbbaaabbbabbbabbbbbabbba + ababbbbbbbbaaaaabbbbbaaaaaabaabbaaaaaabbbbaaaaaaaaabbbbbbbbaaabbbbbbaaaabbbabbaabbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaaaabbbbbaaaaaaaabbbbbaaaaabbbbbbbaaaabbbbbbbabbbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbaaaabbbbbbbbaaaaaaaaabaaaaaabbbbbaaaaaabbbbbbabaabbbbbbbba + abababbabbbaaaaabbbbbabbbbbbabbbaaaabbbbbbbbbbbbabaaaaaaaaaabbbbbaaaaabbbbbbbabbabbbbbbbbb + abbbabbabbaaaaabbabbbabbabbabbbbaaaabbbabbbbbbbbabbaaaaabaabbbbbbbaaabbbbbbbbabbaabbbbbbbb + aabbbbbbbbaaaaabbbbbbaabaaaaabbaaaaabbbabbbbbbbaabbaaababaabbbbbbaaaabbbbbbbbabbaaabbbbbbb + aabbbbbbbbaaaaabbbbbbabbabbabbbaaaaabbaababbbbaabbbaaabbbaabbbbbbaaaabbbbbbbabbbaaabbbbbbb + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaabbbaaabbbaabbbbbbaabaabbbbbbabbbaaaabbbbba + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaababaaaabbaabbbbbbaabaabbbbbaabbbaaaaabbbbb + aabbbaaaaaaaaaaaaaababbbbbbbbbbaaabbbbbbbbaaaaabbaaaaaabbaabbbbbaabbbbbbbbbaabbbaaaaaabbbb + abbabbbbbbaaaabbbaaaaaaaaaaaabbabbbbbbbaaaaaaaabbaaaaaabbbabbbbbaabbbbbbbbaaabbbaaaaaaabbb + abbbaaaabaaaaabbbbbbbbbbbbaaababbbbbbaaaaaaaaaabbaaabbbbbbaabbbbbbbbbbbbbaaaabbbaaaaaaabbb + abbbbbbbbaaaaabbaaaaaababbbbbbbbbbbaaaaaaabaaabbbaabbbbbbbaaabbaabbbbbbbbaaabbbbaaaaaaaaaa + abbbbbbbbaaaaabbbbbbbbbaababbbbbbaaaaaaaaaaaaabbbaabbbbbbbaaaaaaabbbbbbbaaaabbbaaaaaaaaaaa + abbbbaabbaaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbaabbbbbbbaaaaaaabbbbbbaaaabbbbaaaaaaaaaaa + abbbbbbbbaaaaabbbbbaabbbbbbbbaaaaaaaaaaaaaaaaabbbaaabbbbbbbaaaaabbbbbbbaaabbbbbaaaabbbbbaa + abbbbbbbbaaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbaaabbbbbbbaaaaabbbbbbaaaabbbbbaaaabbabbaa + abbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaabbaabaaabbbbaaabbbbbbbbbaaabbbbbaaaabbbbbbaaaabbabbba + abbbbbbbbaaaabbbbbbbbbbbaaaaaaaaaaaaabaabbaaaaabbaaabbbbbbbbbaaabbbbaaaaabbbbbbaaaabbbbbba + ababbabbaaaaabbbbbbbbbbaaaaaaaaaaaaaabaabbbbbbbbbbaaabbbbbbbbbaabbbaaaaabbbbbbbaaaababbbba + abbbaabbaaaaabbbbbbbbaaaaaabaaaaaaaaabaaabbbbbbbbbaaabbbbbbbbaaabbbaaaabbbbbbbbaaaabbbbbba + bbbbaabbaaaaabbbbbbbaaaaaaaaaaaaaaaaabbbabaaaabaabaaaabbbbbbbaaabbaaaabbbbbbbbaaaabbbbbbba + bbbbabbbaaaabbbbbbbaaaaaaaaaaaaaaaaaabbbbabaaababbaaaabbbbbbbaaaaaaaabbbbbbbbbaaaaabbbbbba + abbbbbbbaaaabbbbaaaaaaaaaaaaaaaaaaaaabbbabaaaababbaaaaabbbbbbaaaaaaaabbbbbbbbbaaaabbbabbba + aaababbbaaaabbbaaaaaaaaaaaaaaabbbaaaabbbbabaaababbbaaaabbbbbbbbbaaaabbbbbbbbbbaaaabbabbbba + babaaabaaaabbbbaaaabaaaaaaaaabbbbaaaabbbababaababbbaaaaabbbbbaaaaaabbbbbbbbbbbaaabbbabbbba + bbbbbbbaaaabbbaaaaaaaaaaaaaabbbbbaaaabbbaabbaababbbbaaaabbbbaaaaaabbbbbbbbbbbaaaaabbabbbaa + abbbbbbaaabbbbaaaabaaaaaaaaabbbbbaaaabbabaaaabbabbbbaaaabbbbaaaaabbbbbbbbbbbbaaaaabbbbbbaa + abbbbbbaabbbbaaaaaaaaaaaabbbbbbbbaaaabbbabaaaababbbbaaaabbbaaaaabbbbbbbbbbbbaaaaaabbbbbbba + abbbbbbaabbbbaaaaaaaaaaaabbbbbbbbaaaabbabaaaabbabbbbbaaabbbaaaabbbbbbbbbbbbbaaaaabbbbbbbba + abbaabbaabbbbaaaaaaabaabbbbbbbbbbaaaabbbaaaaaababbbbbaaaabaaabbbbbbbbbbbbbbaaaaaabbbbbbbba + abbbbbbaabbbbaaaaaaababbbbbbbbbbbaaaabbababbaababbbbbbaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbba + abbbbbbabbbbaaaaaabbbabbbbbbbbbbbaaaabbbaababababbbbbbaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbba`, + map `bbbbbbbbababbbbbbbbaaaaabbbbbabbabbbbbbbbaaaaaaaaaaaaaaabbaaaaaaaaaabaaaaaaabbbaaabbbbbbba + bbbbbbbbababbbbbbbbaaaaabbbbbabbabbbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaabbbababaabaaaaaaabbbbba + abbbbabbababbbbbabbaaaaabbbbbabbabbbbbbbbbaaabbbbbbbbbbbbbbbaabaabbbbbabaabaaabaaaaaaabbba + abbbaaabababbabaabbaaaaabaaaaaaaabaabbaabbbaabbbbbbbbbbbbbbbbabbbbbbbbbbaaabaabaaaaaaabbbb + abbbbaaabbbbbbbbbbbaaaabbbbbabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaabbbb + abbbabbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaabbbbbaababbbbbbbbbbaaaabbbabaabbbabbbaaaaabbbb + abbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaabaaaaaabbbbbbbbbbbaaaaaabbabaabbbbbaaaaaaabbbb + abbbbbaaaabbaaaaabbaaaabbbbbabbbbbbbbbbbaaaabaabbbaabbbbbbbbbaaaaaabbaaaaabbbbaaaaaaabbbba + abbbbabbaabbabbbbbaaaaabbbbbaabbbbaabbbbaaaaaaaaaaaabbbaabbbaaaaaaaabbabaaababaaaaaaabbbbb + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbabaaabbbabbbbbaaaaaabbabbaabbabbaaaaaabbbbb + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbaaabaabbbbbbaaaaabbabbabbbbbbbaabaabbbbb + abbbbbbaaabbabbbbbaaaaabbaabbbbabbabbbbbbaaaabbbbaaaaaaabbbbbaaaaaabbaaabbbbbbbbbaaaabbbbb + abbbbbbaaabaaaaabbaaaaaaaaaaaaaaaaaaabbbaaabbbbbbabbaaaabbbbbaaabbbabaaabbaaabbbbaaaabbabb + abbbbbbaabbbbbbbbbaaaaaaaaaaaaaaabaaabbbaaabbbbbbbbbaaabbbbbbababbaabaaabbaaaaabbaaaabbabb + abbbbaaaabbbbbbbbaaaaaabbbabbababbaabbbbaaabbbbbbbbbaaabbbbbbabaaabaaaaaaaaaaaabbaaaabbbbb + abbbbaaaabbabbbbbaaaaaabbbbbbbabbaaabbbbaaabbbbbbbbbaaabbbbbbbbaaaabbbbaaaaaaaaabaaaabbbbb + abbbbbaaabbabbabbaaaaaabbbbbbbbbaaabbbbbaabbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaaaaaaaaaaaabbbbb + abbbbbaaabbabbabbaaaabbbbbabbbbbababbbbaaababbaabbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaaaaabbbbb + abbbbaaaabbbbbbbbaaabbbbbbabbbbbbbbbbbaaabbaaaaaaababbbbbbbbbbbbaaabbbaaaabbbaaaaaaaabbbbb + abbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbbbaaaabaaaaaaaaaaabbbbbbbbbbaaabbbbbbbbbbbbaaaaaabbbbb + abbbbaaabbbbbbbbaaaabbbbaaabbbabbbbbbbbaaabbaaaababaaaaabbbbbbbbbaaabbbbbbbbbbbabaaaababbb + abbbbaaaaaaaaaaaaaaabbbbaabbbbaabbbbbbbaaabbbbaaabbbbaaabbbbbbbbbbaabbbbbbbbabbbbbbbbaabbb + abbbbbabbbbbbbbbaaaabbbaaabbbaaaabbbbbbaaabbbbbaaaabbbaaabbbbbbbbbaaabbbbbbaaabbbbbabbabbb + abbbbbabbbbbbbbbaaaabbbaaaaabaaabbbbbbbbaabbbbbbaaaaaaaaaabbbbbbbaaaaabbbaaaaabbaaaaaaabbb + abbbbaabbbbbbbbbaaaaaaaaaaabbbaaabbbbbbbabaabbbbaaaaaaaaaabbbbbbbaaaaaabaaaaabbbaaaaaaabbb + abbbbaabbbbbabbbaaabbaaaaaabbbaaaabbbbbbabaaabbbabbbbbaaaabbbbbbbaaaaaaabbbbbbbaaaaaaaabbb + abbbbaabbbababbaaaabbaaaaaabbbbaaabbbbbbbaaaabbbbbbbbbbaaabbbbbbbbaaaaaabbbbbbbbaaaaaaabba + abbbbaabbbbbabbbaabbbaaaabbabbbaaabbbbbbaaaaabbbaabbbbbbaabbbbbbbaaaaaaaaabbaabbbaaaaabbba + abbbbaabbbbbbbbaaabbaaaaabbbbbbaaabbbbbbaaaabbbbaaabbbbbbbbbbbbbbbaaaabbabbaaaabbaaaaabbbb + abbbbaabbbbbbbbaaaabbaaaabbbbbbaaabbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbaaabbabbaabaabaaaaabbbb + abbbbaabbbbbbbbaaaabbaaabbbbbbaaaabbbbaabbbbaabbaaabbbbbbbbbbbbbbbbbabbaababbbaabaaaaabbba + abbbbaabbbbbbbbaabbbaaaabbbbbbaaaabbbbaabbbaaaaaaababbbbbbbbbbbbbbbbbbbbaaaabbbabaaaabbbba + abbbbabbabbbbbbaabaaaaabbbbbbbbababbbaaabbbbaaabaabaabbbbbbbbbaaabbbbbbbbaaaabbabaaaabbbbb + abbbbbbbbbbabbbaaaaaaaaaaaaaababbbabbaabbbbbaaaaaaaaababbbbbbaaaabbbbbbbbaaaabbabaaaabbbbb + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbbbaaaaabbaaaaabbaabbbbbbbbaabbbbbbbbbbaaaabbbbaaaabbbbb + abbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaababaabbbaabbbbbbaabbbbbbbbbbbbaaaabbbaaaabbbbba + abbbabbbbbabbbaaaaabbaabaabbbbbbbbbbbbbaaaaaaaaabbbaabbbbbbbbbbbbbbbbbabaaaaabbbaaaabbbbba + abbbbbbbbbbbbbaaaabbbaaaaaaaaaaaaaaabbabaaaabbabbbbaabbbbbbbbbbbbbbbbbababbbbbbaaaabbbbbba + abbbaabbbaabbbaaaabbbbbbabbbbbbbbbaabbabbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbba + abbbabbabbaaaaaaaaabaaaaaaaaaaaabaaabbabaaabbbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbba + abbaabbabbabbbaaaaabbbbbabbbbbaabaaabbbbaaaabbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbba + abbaabbbbbabbbaaaabbaabaabbaabbbbbaabbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaaabbbbaaabbbbbaabaabbbbbbbbbbbbbbbaaaaaabbbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbaaaabbbbbaaababbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbaaaaabbbbaaabbbbbbbbbbbbbbbbbaabbbbbbaaaabbbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaaaabbaaaaaaaaaaababbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaaaabbabaaaaaabaababbbbbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaaaabbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaaaabbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaaaabbbbaaaabbbbaaabbaabbbbbbbbbbbaabbbbbbbaaabbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaaabbbbaaaabbbbaaaaaaabbabbbbbbbbaaaabbbbbaabbbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaaabbbbaaaabbbabbaaaabbbaabbbbbbbaaaabbbbbaabbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbaaaabbbabbbbaaabbbaaabbbbbaabbbbbbbbbbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaaabbbbbaaabbaabbbbbaabbbbbbbbbbbaababbbbbbbbbbabbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbaaaaabbbbaaaaabaabbbbbbbbbbbabbbbbbaaaabbaabbabbaabbbabbba + ababbabbabbaaaaabbbbbbbbbabbbbbbaaaaabbbbaaaaaaaabbbbbbbbbbaabbbbbbbaaaabaabbbaaaabbbbbbba + ababbbbbbbbaaaaaaaaabbabaabbabbbaaaaabbbbaaaaaaabbbbbbbbbbbbabbbbbbbaababaabbbabbabbaabbba + ababbbbbbbbaaaaabbbbbaaaaaaaaabbaaaaaabbbbaaaaaabbbbbbbbbbbaaabbbbbbaababbabbbaabbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaaaabbbbaaaaaaaabbbbbbaaaaabbbbbbbaababbabbbaabbbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaaaabbbbbbbaaaaaaaabbbaaaaaabbbbbbaaaababbabbbbbbbbbbbbbba + abababbabbbaaaaabbbbbabbbbbbabbbaaaabbbbbbbbbaaaaaaaaaaaaaabbbbbbbaaaaaabbabbbabbbbbbbbbba + abbbabbabbaaaaabbabbbabbbbbaabbbaaaabbbabbbbbbbbbbaaaaaaaabbbbbbbaaaaabbbbbbbbbabbbbbbbbba + aabbbbbbbbaaaaabbbbbbaabaaaaabbaaaaabbbabbbbbbbabbaaaaabaabbbbbbbaaaaabbbbbbbbbabbbbbbbbba + aabbbbbbbbaaaaabbbbbbabbabbabbbaaaaabbaabbbbbbaabbaaabbbaabbbbbbbaababbbbbbbabbabbbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbaabbbaabbbbaabbbbbbbaababbbbbbbabbaabbbbbbbba + aabaaaabbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaaababaaabbbaabbbbbbaabbaabbbbbbabbaaabbbbbbbb + aabbbaaaaaaaaaaaaabbabbbbbbbbbbaaabbbbbbbbaaaaabbbaaababaabbbbbbaabaabbbbbbaabbaaaabbbbbbb + abbabbbbbbaaaabbbaaaaaaaaaaaabbabbbbbbbbaaaaaabbbaaabbabaabbbbbbbababbbbbbbaabbaaaaabbbbba + abbbaaaabaaaaabbbbbbbbbbabbabbbbbbbbbaaaaaaaaababaaaaabbbabbbbababbbbbbbbbbabbbaaaaabbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbbbbaaaaaaaaaaaabbaaaabbbbbabbbbbbabbbbbbbbbaabbbaaaaaabbbbb + abbbbbbbbbaaaabbbbbbbbbabbbbbbbbaaaaaaaaabbaabbbaabbbbbbbaaabbabbbbbbbbbbaaabbbaaaaaaabbbb + abbbbaabbaaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaabaabbbaabbbbbbbaaaaaabbbbbbbbbaaaabbbaaaaaaaaabb + abbbbbbbbaaaaabbbababbbbbbbbaaaaaaaaaaaaaaaaabbbaabbbbbbbbaaaaaabbbbbbbaaaabbbbaaaaaaaaaab + abbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbaabbbbbbbbaaaaaabbbbbbbaaaabbbbaaaaaaaaaaa + abbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaabaaaaaabbbaaabbbbbbbbaaabbbbbbbbaaaabbbbaaaaaaaaaaaa + abbbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaaaabbaabaaaaabbaabbbbbbbbaaaabbbbbbaaaabbbbbaaaaababbbaa + ababbabbaaaaabbbbbbbbaaaaaabaaaaaaaaabbaabbbbbbbbaabbbbbbbbaaaabbbbbaaaaabbbbbaaaabbaabbaa + abbbaabbaaaabbbbbbbaaaaaaaaaaaaaaaaaabaaabbbbbbbbaaabbbbbbbbaaabbbbaaaaabbbbbbaaaabbabbbba + bbbbaabbaaaabbbbbbaaaaaaaaaaaaaaaaaaaabbaaaaaabaaaaabbbbbbbbaaabbbbaaaabbbbbbbaaaabbbbbbba + bbbbabbbaaaabbbbaaaaaaabaaaaaaaaaaaaaababbabaabbaaaaabbbbbbbbaabbbaaaaabbbbbbbaaaabbbbbbba + abbbabbbaaabbbbaaaaaababaaaaaaaaaaaaaabbbbbaaaabaaaaabbbbbbbaaabbaaaabbbbbbbbbaaaabbbbbbba + aaababbbaabbbbaaaabbbaabaaaaaabbbbaaaabbbbbbaabbabaaabbbbbbbaaabbaaaabbbbbbbbbaaabbbbbbbba + babaaabaaabbbaaaaabbaaaaaaaaabbbbbaaaabbabbababbabaaaabbbbbbaaaaaaaabbbbbbbbbbaaabbbbbbbba + bbbbbbbaabbbbaaaaabbbaaaaaaabbbbbbaaaabbbbbbaabbabaaaabbbbbbbbbaaaaabbbbbbbbbaaaabbbabbbba + abbbbbbaabbbaaaaabaaaaaaaaaabbbbbbaaabbabaaaaabbabaaaabbbbbbaaaaaabbbbbbbbbbbaaaabbbabbbaa + abbbbbbabbbbaaaabbaaaaaabbbbbbbbbbaaabbbaabaaabbabbaaabbbbbaaaaaabbbbbbbbbbbaaaaabbbabbbba + abbbbbbabbbbaaaaaaaaaaaabbbbbbbbbbaaabbabaabaabbabbaaaabbbbaaaaabbbbbbbbbbbbaaaaabbbbbbbba + abbaabbabbbaaaaaaababaaabbbbbbbbbbaaabbbaaaaaabbabbbaaabbbaaaaabbbbbbbbbbbbbaaaaabbbbbbbba + abbbbbbabbbaaaaaaabbbbbabbbbbbbbbbaaabbabaabaaababbbaaabbbaaaabbbbbbbbbbbbbaaaaaabbbbbbbba + abbbbbbabbbaaaaaaabbbbbabbbbbbbbbbaaabbbbababaababbbaaaabbaabbbbbbbbbbbbbbbaaaaabbbbbbbbba`, + map `bbbbbbbbababbbbbabbbaaaabbbbbabbabbbbbbaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaabaaaabbbbaabbba + bbbbbabbababbbbbbbbaaaaabbbbbabbabbbbbbbbaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaabaaaaabbbbabbba + abbbbabbababbbbbabbaaaaabbbbbabbabbbbbbbbaaaabbbbbbbbbbbbbbbabaaabbaaaaaababaaaaaaabbabbba + abbbaaabababbabbabbaaaaabaaaaaaaabaabbbbbbaaabbbbbbbbbbbbbbbabbabbbbbbbbabaaabaaaaaabbbbba + abbbbaaabbbbbbbbbbbaaaabbbbbabbbbbbbbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaaaaaabbbba + abbbabbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbabbbbbababbbbbbbbbbbbababbbbbbaaaabbbaaaaaaabbbb + abbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaababbaaabbbbbbbbbbbabbaabbbbbaaababbaaaaaabbbbb + abbbbbaaaabbaaaaabbaaaabbabbabbbbbbbbbabbbaababbaaabbbbbbbbbbaaabaabbbbbaabbabbaaaaaabbbba + abbbbbbaaabbabbbbbaaaaabbabbaabbbbaabbbbaaaaaabbaaaabbbbbbbbaaaaaaaabaaaaabbabaaaaaaabbbba + abbbbabaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbabbbbaaaaaaabbabbaaababaaaaaaabbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbaaabbaabbbbbaaaaaabbabbabbbabaaaaaaabbbbb + abbbbbbaaabbabbabbaaaaabaaababbabbabbbbbbaaaabbbbaaaaaaabbbbbaaaaaabbabbabababaaaaaaaabbbb + abbbbbbaaabaaaaabbaaaaaaaaaaaaaaaaaaabbbaaaaabbbbaaaaaaabbbbaaaabbbbbabbabbbbbbbaaababbbbb + abbbbbaaabbbbbbbbbaaaaaaaaaaaaaaabaaabbbaaaaabbbbbbaaaabbbbbbababaabaaaabaaabbbbaaaabbabbb + abbbbaaaabbbbbbbbaaaaabbbbabbbbabbaabbbbaaabbbbbbbbbaaabbbbbaababaaabaaaaaaaabbbaaaabbabbb + abbbbbaaabbabbbbbaaaaaabbbbbbbbbbaaabbbaaabbbbbbbbbbaaabbbbbbbaaaabaaabaaaaaaaabaaaaababbb + abbbbbbaabbabbabbaaaaaabbbbbbbbbaaabbbbaaabbbbbbbbbbaaabbbbbbbaaaabbbbbaaaaaaaabaaaaabbbbb + abbbbbaaaababbabbaaaabbbbbbbbbbbababbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaaabaaaaaabbbbbb + abbbbbbaabbbbbbbbaaaabbbbbabbbbbbbbbbbaaabbbaaaabbbbbbbbbbbbbbbaaaabbbbbabbbabaaaaaabbbbbb + abbbbbbbbbbbbbbbbaaaabbbbbabbbbbbbbbbbaaabaaaaaaaaaabbbbbbbbbbbaaaabbbaabbbbaaaaaaaabbbbbb + abbbbbaabbbbbbbbaaaaabbbaabbbbabbbbbbbaaaabaaaaaaaaaaabbbbbbbbbbaaabbbbabbbbbbaaaaaaabbbbb + abbbbaaaaaaaaaaaaaaabbbaaabbbbaabbbbbbaaaabbbaabbbbaaaabbbbbbbbbbaabbbbbbbbbbbbabaaaaaabbb + abbbbbbabbbbbbbbaaaabbbaaabbbaaaabbbbbaaaabbbbaaabbbbaaabbbbbbbbbaaabbbbbbbbbbbbbbaaaaabbb + abbbbbaabbbbbbbbaaaabbbaaaaabaaabbbbbbbaaabbbbbaaaabbbaaabbbbbbbbaaabbbbbbbaaabbbbabbaabbb + abbbbbaabbbbbbbbaaaabaaaaaabbbaaabbbbbbaabbbbbbaaaaaaaaaabbbbbbbbaaabbbbbaaaaabbaaaabaabba + abbbbaaabbbbabbbaaabaabaaaabbbaaaabbbbbbbbaabbbaaaaaaaaaaabbbbbbbaaaaaabaaaaabbaaaaaaabbba + abbbbaaabbabaabaaaabbaaaaaabbbbaaabbbbbbbaaabbbabbbbbbaaaabbbbbbbaaaaaaaaaaabbaaaaaaaabbbb + abbbbbabbbbbabbbaabbaaaaabbbbbbaaabbbbbbbaaabbbabbbbbbbaabbbbbbbbaaaaaababbbbbbaaaaaaabbbb + abbbbaabbbbbbbbaaabbaaaaabbbbbbaaabbbbbbaaaabbbabbbbbbbbabbbbbbbbaaaaaaaaabbbbbbaaaaaabbbb + abbbbaabbbbbbbbaaaabbaaaabbbbbbaaabbbbbaaaaabbbbaabbbbbbbbbbbbbbbaaaabbaabaaaabbaaaaaabbba + abbbbaabbbbbbbbaaaabbaaabbbbbbaaaabbbbaaabaabbbbaaabbbbbbbbbbbbbbbaaabbaabaaaaabbaaaaabbba + abbbbaabbbbbbbbaabbbaaaabbbbbbaaaabbbbabbbbaaaaaaabbabbbbbbbbbbbbbbbbbbaababbbabbaaaaabbba + abbbbabbabbbbbbaabaaaaabbbbbbbbaabbbbaabbbbaaaaaaaababbbbbbbbbbbbbbbbbbaabaabbabbaaaabbbbb + abbbbbbbbbbabbbaaaaaaaaaaaaaabaabbabbaabbbbaaaaaaaaaabbbbbbbbaaabbbbbbbbaaaabbabbaaaabbbbb + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbbbaabbbbbbbbbaaaaababaaaaabbbbb + abbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaaabbaaaabaaaabbbbbbbaaabbbbbbbbbaaaaabbbaaaaabbbbb + abbbaabbbbabbbaaaaabbabbaabbbbbbbbbbbbaaaaaabaabbbaaabbbbbbbabbbbbbbbbabaaaaabbbaaaabbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaaaaabbbaaaaaabbbbbbaababbbbbbbbbbbbbbbbbbaabaabbaaaaabbbbba + abbbaabbbbabbbaaaabbbbbbbbbbbbbbbbabbbabaaaabbbbbbbaabbbbbbbbbbbbbbbbabaabbabbbaaaaabbbbba + abbbaababbaaaaaaaaabaaaaaaaaaaaabaaabbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbabbaaaaabbbbbba + abbbaabaabbbbbaaaaabbbbbabbbbbaabaaabbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbba + abbaabbbbbabbbaaaabbaabaabbaabbbbbaabbbbaaabbbbbbababbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaabbbbaaabbbbbbbababbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbaaabbbbbbabbabbbbbbbbbbbbbbbbaaaaaabbbaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbaaabbbbbbaababbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbaaaaabbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaaabbbaaaaaabbbaabbbbbbbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaaaabbaaaaabbbbbaabbbbbbbbbbbbabbbbbbbbbbbaaaabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaaabbbbaaaabbbbbaabbbabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaaabbbaaaabbbbbaaabbabbbbbbabbbbbaaabbbbbaaabbbbbbabbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaaabbbaaaabbbbaaaaaaabbabbbbbbbbaaababbbbaaabbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbaaaabbbabbbaaabbbabbbbbbbaaaaabbbbaaabbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaaabbbbaaaabbabbbbbaabbbaabbbbbbaabbbbbbbaabbbbbbbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbaaaaabbbbaaaabaabbbbbabbbbbbabbbbbaabbbbbbbbbbbbabbbabbbba + ababbabbabbaaaaabbbbbbbbbabbbbbbaaaaabbbbaaaaaaaabbbbbbbbbbaaabbbbbaaaabbabbbbbbabbbbbbbba + ababbbbbbbbaaaaaaaaabbabaabbabbbaaaaabbbbaaaaaabbbbbbbbbbbbaabbbbbbbababaabbbbbaabbbaabbba + ababbbbbbbbaaaaabbbabaaaaaaaaabbaaaaaabbbaaaaaabbbbbbbbbbbbabbbbbbbaaaabaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbaabbbaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbabbbaaaabbbbbaaaaaaaabbbbbbaaaaabbbbbbbaabbbbaabbbaaabbbbbbbba + abababbabbbaaaabbbbbbabbbbbbabbbaaaabbbbbbaaaaaaaaabbbaaaaaabbbbbbbaaaabbaabbaaabbbbbbbbba + abbbabbabbaaaaabbaabbabbbbbaabbbaaaabbbbbbbbaaaaaaaaaaaaaaabbbbbbaaaaaaabaabbbbbbbbbbbbbba + abbbbbbbbbaaaaabbbbbbaabaaaaabbaaaaabbbabbbbbbbabaaaaaaaaabbbbbbbaaaaababaabbbbbbbbbbbbbba + aabbbbbbbbaaaaabbbbbbabbabbabbbaaaaabaaabbbbbbabbaaaaaaaabbbbbbbaaaaabbbbbbbbaabbbbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbaabbaaaabbbabbbbbbbaabbabbbbbbbbbabbbbbbbbbba + aaaaaabbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbaaabbaaabbbaabbbbbbbaabbaabbbbbbbbaabbbbbbbbba + aabbbaaaaaaaaaaaaabbabbbbbbbbbbaaaabbbbbbbbaaabbbaaabbbaabbbbbbbaabbaabbbbbbbbaabbbbbbbbba + abbabbbbbbaaaabbbaaaaaaaaaaaabbaabbbbbbbbbaaaababaaabbaaabbbbbbbaabbaabbbbbabbaaabbbbbbbbb + abbaaaaabaaaaabbbbbbbbbbabbaaaaabbbbbbbbaaaaabbbaaabbbbaabbbbbbbaabaabbbbbbabbaaaabbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbbbbbbbaaaaaaaababaaaabaaaabbbbbbbaabbabbbbbaabbaaaabbbbbbba + abbbbbbbbaaaaabbbbbbbbbabbabbbbbbbaaaaaaaaaaabaaaaabbbbbabbbbbbbbbbbbbbbbbaabbaaaaabbbbbbb + abbbbaabbaaaaabbbbbbbbbbbbbbbbbbaaaaaaaaabaabbbaaabbbbbbaaabbbbbabbbbbbbbaabbbaaaaaabbbbbb + abbbbbbbbaaaaabbabbaabbbbbbbbbaaaaaaaaaaabaabbbaababbbbbaaaabbbbabbbbbbbbaabbbaaaaaaabbbbb + abbbbbbbbaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaaabbbbbbaaaababbabbbbbbbaaabbbaaaaaaaabbbb + abbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbaaaabbbbbbaaabaabbbbbbbbaaabbbbaaaaaaaaaabb + abbbbbbbbaaaabbbbbbbbbbbaaaaaaaaaaaaaabbabaaaaaabaabbbbbbbaaaaaabbbbbbaaaabbbbaaaaaaaaaaab + ababbabbaaaaabbbbbbbbbaaaaaaaaaaaaaaabbaabbbbbbbbaaabbbbbbaaabbabbbbbbaaaabbbbaaaaaaaaaaaa + abbbaabbaaaaabbbbbbbaaaaaaabaaaaaaaaabbaabbbbbbbbaaabbbbbbaaaabbbbbbbaaaabbbbbaaaaaaaaaaaa + bbbbbabbaaaabbbbbbaaaaaaaaaaaaaaaaaaaabbaaaaaabaaaabbbbbbbaaaabbbbbbaaaaabbbbbaaaabbaaaaaa + bbbbbbbbaaabbbbbbaaaaaaaaaaaaaaaabaaaabbbbabaabbababbbbbbbbaaaabbbbaaaaabbbbbaaaaabbabbbaa + abbbbbbbaabbbbbbaaaaabaaaaaaaaaabbaaaabbbabaaaabababbbbbbbbaaabbbbaaaaabbbbbbaaaaabbabbbba + aaababbbabbbbaaaaaabbbabaaaaaaabbbaaaababbabaabbabaabbbbbbbaabbbbaaaaabbbbbbbaaaabbbabbbba + babaaabaabbbaaaaababbbaaaaaaabbbbbaaaabbbbbaabababaabbbbbabaabbbbaaaaabbbbbbbaaaabbbbbbbba + bbbbbbbabbbbaaaaaaabaaaaaaabbbbbbbaaaababbabaabbbbaabbbbabbaaabbaaaaabbbbbbbbaaaabbbbbbbba + abbbbbbabbbaaaaaaaaaaaaaaaaabbbbbbaaaabbbababbbbbbaaabbbabbaaaaaaaabbbbbbbbbbaaaabbbabbbba + abbbbbbbbbbaaaabbaaaaaaaaaabbbbbbbaaaabbbbabaabbbbaaabbbbbbaaaaaaaabbbbbbbbbbaaabbbbabbbba + abbbbbbbbbaaaaabbaaaaaaabbbbbbbbbbaaaabbbabaababbbaaabbbbbbabaaaaabbbbbbbbbbaaaabbbbabbbba + abbaabbbbbaaaaaaaaaabbabbbbbbbbbbbaaaababbabaabbabaaabbbbbbaaaaaabbbbbbbbbbbaaaaabbbabbbba + abbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbaaaabaaabaaabbabaaabbbbbaaaaaabbbbbbbbbbbaaaaaabbbbbbbba + abbbbbbbbbaaaaababbbbbabbbbbbbbbbbaaabbbbbabaaababbaabbbbbbaaabbbbbbbbbbbbbaaaaaabbbbbbbba`, + map `bbbbbbbbababbbbbbbbbaaaabbbbbabbabbbbbaaaaaaaaaaaaaaaaaaaaaababaaaaaaabaaaaaaaabbbaabbbbba + bbbbbabbababbbbbbbbaaaaabbbbbabbabbbbbbaaaaaaaaaaaaaaabbbaaabaaaaaaaaaaaaaaaaaabbbbaabbbba + abbbbabbababbabbabbaaaaabbbbbabbabbbbbbbaaaaaabbbbbbbbbbbbbabaaaabaaaaaaaaaaaaaaabbbabbbba + abbbaaabababbabbabbaaaaabaaaaaaaabaabbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbababbbaaaaaaabbbbbbba + abbbbaaabbbbbbbbbbbaaaabbbbbaabbbbbbbbabbaaabbbbbbbbbbbbbbbbabbbbbbbbbbabbbbbaaaaaabbbbbba + abbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbba + abbbbbbaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbaaabbbbbbbbbbbbaaabbbbbbaaaaabbaaaaaaabbbba + abbbbbaaaabbaaaaabbaaaabbabbabbbabbbbbbbbbababbaaabbbbbbbbbbbaabaabbbabaabbbbbaaaaaaabbbba + abbbbbaaaabbabbbbbaaaaabbbbbaababbbabbbbaaabaabaaabbbbbbbbbbaaaaaabbbabaabbbbaaaaaaaabbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbabbbbaaaaaaaabbabaaabbbaaaaaaaabbbba + abbbbabaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaabbaaabbaabbbbbaaaaaabbbabaabbabaaaaaaabbbbba + abbbbbbaaabbabbabbaaaaabaaabaababbabbbbbaaaaaabbaaabaaabbbbbbaaaaabbbbbabbbabaaaaaaabbbbba + abbbbbbaaabaabaabbaaaaaaaaaaaaaaaaaabbbbabaaabbbaaaaaabbbbbbaaaaaabbbbbabbbbbbaaaaaaabbbba + abbbbbaaabbbbbbbbaaaaaabaaaaaaaaabaabbbaabaaabbbaaaaaabbbbbbababbabbaabbbbbbbbbaaaaabbbbba + abbbbaaaabbbbbbbbaaaaabbbbbbaaaabbaabbbaaababbbbbbbaaabbbbbbababaaabaaaabaaabbbbaaabbabbba + abbbbbaaabbabbbbbaaaaaabbbbbbbabaaaabbbaaabbbbbbbbbaaabbbbbbabaaaaaaaaaabaaaabbaaaaababbba + abbbbbbaabbaababbaaaaaabbbbbbbbbaaabbbbaabbbbbbbbbbaaabbbbbbbaaaabbbabaabaaaaabbaaaababbba + abbbbbaaabbabbabbaaaabbbbbbbbbbbbbabbbbaabbbbbbbbbbaabbbbbbbaaaaabbbabbaaaaaaabaaaaababbba + abbbbbbaabbbbbbbbaaaabbbbbabbbbbbbbbbbaaabbbabbbbbbbbbbbbbbbbaaaabbbbbbaaaaaaaabaaabbbbbba + abbbbbbbbbbbbbbbbaaaabbbbbababbbbbbbbaaabbaaaaaabbbbbbbbbbbbbbaaaabbbaaaabbbaaaaaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbaabbbaabbbbbaaaabaaaaaaaaaaabbbbbbbbbbbaaabbbbbbabbaaaaaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbaaabbbaaabbbbbaaaabbaaaaaaaaaabbbbbbbbbbbaabbbbbbbbbbbaaaaaabbbbbba + abbbbbbabbbbbbbbaaaabbbaaabbbaaaabbbbaaaabbbbabbbbbaaabbbbbbbbbbaaabbbbbbbbbbbabaaaababbba + abbbbbaabbbbbbbbaaaabbbaaaaaaaaabbbbbbaaabbbbbaaabbbaaaabbbbbbbbaaabbbbbbbabbbbbbaaaaabbba + abbbbbaabbbbbbbbaaaabaaaaaabbaaaabbbbbaaabbbbbaaaaaabaaabbbbbbbbaaaabbbbbbaaabbbbabaaabbba + abbbbaaabbbbabbbaaabaabaaaabbbaaaabbbbaababbbbaaaaaaaaaabbbbbbbbaaabbbbbaaaaabbababbaabbbb + abbbbaaabbabaabaaaabbaaaaaabbbbaaabbbbbbbaabbbaaaaaabaaabbbbbbbbaaaaaabaaaaabbbaaaaaabbbbb + abbbbbabbbbbabbbaabbaaaaabbabbbaaabbbbbbaaabbbabbbbbbaaaabbbbbbbaaaaaaabaaabbbaaaaaaabbbba + abbbbaabbbbbbbbaaabbaaaabbbbbbbaaabbbbbaababbbabbbbbbbbabbbbbbbbaaaaaababbbbbbaaaaaaabbbba + abbbbaabbbbbbbbaaaabbaaabbbbbbbaaabbbbaaaaabbbbaabbbbbbbbbbbbbbbaaaaabaaabbabbbaaaaaabbbba + abbbbaabbbbbbbbaaaabbaaabbbbbbaaaabbbbaaaaabbbbaaabbbbbbbbbbbbbbbaaabbaabaaaabbaaaaaabbbba + abbbbaabbbbbbbbaabbbaaaabbbbbbaaaabbbaabbbbbbabaaabbbbbbbbbbbbbbbbaabbaabaabaabbaaaaabbbba + abbbbabbabbbbbbaabaaaaabbbbbbbbaabbbaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbaababbbabbaaaaabbbba + abbbbbbbbbbabbbaaaaaaaaaaaaaabaabbbbaabbbbaaaaaaaaaabbbbbbbbabbbbbbbbbaabaabbabbaaaabbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaaaaaaabbbbbbbbaaabbbbbbbbaaaabbabbaaaabbbbba + abbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaaabbbaaaaaaaaaaabbbbbaaaabbbbbbbbbaaaaababaaaaabbbbba + abbbabbbbbabbbaaaaabbabbaabbbbbbbbbbaaaaaabbbaaabababbbbbaaabbbbbbbbbbbaaaaabbbaaaaabbbbba + abbbabbbbbbbbbaaaabbaaaaaaaaaaaaaaabbaaaaaababbbbabbabbbbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbba + abbbaabbbaabbbaaaabbbbbbbbbbbbbbbbbbbaaaaaababbbbaababbbbbbbbbbbbbbbbbbaabaabbaaaaabbbbbba + abbbabbabbaaaaaaaaabaaaaaaaaaaaabbbbbabaabbbbbbbababbbbbbbbbbbbbbbbbabaabbabbbaaaaabbbbbba + abbaabbabbabbbaaaaabbbbbbbbbbbaabaabbbbaaabbbbbbbabbbbbbbbbbbbbbbbbbaaaabbabbaaaaabbbbbbba + abbaabbbbbabbbaaaabbaabaabbaabbbbbabbbbaaaabbbbbbbabbbbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbaababbbbbbaabbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbaaabbbbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbaaaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbaaabbbbbbabbabbbbbbbbbbbbbbbbaaaaaabbbaaaaabbbbbbbba + abbaabbbbabbbaaaabbbbbbbbbbbbbbbbaabbaaaabbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaabbaaaaaaaaaaaabbaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaabbbaaaaaaaaaababbbbbbbbbbbaabbbbbbbbbbbbaaaabbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaabbbaaaaabbbbbbabbbbbbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbaabbbbaaabbbbbbbabbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbabbbbbbaaabbbaaabbbbbbaaabbabbbbbbbbbbbbbaabbbbbaaaabbbbbbabbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabaaabbbaaaabbbbbaaaaaaababbabbbbbbaabbbbbbaaabbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbaaaabbbbbaaaaaabbaabbbbbbbaabbbbbbbaaabbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbabbbbbbbaaabbbbaaaabbbaabbaaabbbaabbbbbbaaabbbbbbaaabbbbbbbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbaaaabbbbaaaabbaabbbaabbbbbabbbbbbaababbbbbaabbbbabbbbbbbba + ababbabbabbaaaaabbbbbbbbbabbbbbbaaaabbbbaaaaababbbbbbbbbbaaaabbbbaabbbbbbbabbbbaaabbabbbba + ababbbbbbbbaaaaaaaaabbaaaabbabbbaaaabbbbaaaaaaabbbbbbbbbbaaabbbbbbaaaabbaabbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbabaaaaaabaabbaaaabbbbaaaaaabbbbbbbbbbbbbabbbbbbbababaaabbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbabbabbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbaaaabaaabbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbabbbbbbbbaaaabaaabbbaaaabbbbbbbba + abababbabbbaaaaabbbbbabbbbbbbbbbaaaabbbbbaaaaaaabbbbbbaaaaabbbbbbbbababaaabbbaaaabbbbbbbba + abbbabbaabaaaaaabaabbabbabbbabbbaaaabbbbbbaaaaaaaabbaaaaaabbbbbbbaaababbaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaabaaaaabbaaaaabbbbbbbbaaaaaaaaaaaaaabbbbbbaaaababbaabbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbabbaabbaaaaabbbabbbbbbabaaaaaaaabbbbbbbaaaaababbaabbbbbbbbbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbabbaaaabbaabbbbbbbaaaaababbaabbbbbbbbbbbbbbba + aaaaaaabbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbaabbaaabbbaabbbbbbbabbaababbbbbbbabbbbbbbbbbba + aabbbaaaaaaaaaaaaabbabbbbbbbbbbaaaabbbbbbbbaabbbaaabbbaabbbbbbbaabbbbabbbbbbbabbbbbbbbbbba + abbabbbbbbaaaabbbaaaaaaaaaaaabbaaaabbbbbbbaaabbbaaabbbaaabbbbbbaababbabbbbabbaabbbbbbbbbba + abbaaaaabaaaaabbbbbbbbbbabbaaaaabbbbbbbbbaaaabbaaaabbaaabbbbbbbaabbaaabbbbabbaaabbbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbbbbbbbbbaaaaabbbaaabbbbaabbbbbbbaabbaabbbbbabbaaaabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbaaaaabbbbbbbbaaaaaaaababaaaababaabbbbbbbaabbabbbbbaabbaaaabbbbbbbbb + abbbbaabbaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaabaaaaabbabbaabbbbbbbbbbbbbbbbaabbaaaaabbbbbbbb + abbbbbbbbaaaaabbabbaabbbbbbbbbbaaaaaaaaaababbbaaaabbbbbaabbbbbabbbbbbbbbaabbbaaaaaabbbbbbb + abbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbaaaaabbbbaaabbbbbbbbbbbbbbaabbbaaaaaabbbbbbb + abbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaabaababbbaaaaabbbbaaaabbbbbbbbbbbbaaabbbaaaaaaabbbbbb + abbbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaaaabbaaaaaaaaabaabbbbbaaaaabbbbbbbbbaaabbbbaaaaaaaaabbbb + ababbabbaaaaabbbbbbbbbaaaaaaaaaaaaaaabbaabbbbbbbbaabbbbbbaabaabbbbbbbbaaabbbbaaaaaaaaaabbb + abbbaabbaaaaabbbbbbbaaaaaaaaaaaaaaaaabaaabbbbbbbbaaabbbbbaaaaabbbbbbbaaaabbbbaaaaaaaaaaaab + bbbbbabbaaaabbbbbbaaaaaaaaaaaaaaaaaaaabbaaaaaabaababbbbbbaaaabbbbbbbaaaabbbbbaaaaaaaaaaaaa + bbbbbbbbaaabbbbbbbaaaaaaaaaaaaaabbaaaababbabaabbababbbbbbaaaabbbbbbaaaaabbbbaaaaabbbaaaaaa + abbbbbbbaabbbbbbaaaaabaaaaaaaaaabbaaaabbbabaaaababbbbbbbbbaaaabbbbaaaaabbbbbaaaaabbbaaaaaa + aaabbbbbabbbbbaaaaabbbaaaaaaaaabbaaaaababbabaabbababbbbbbaaaabbbbaaaaabbbbbbaaaaabbbaabbaa + babaaababbbbaaaaaaabbbaaaaaaabbbbbaaaabbabbababbaaabbbbbbbaabbbbbaaaabbbbbbbaaaaabbbbbbbba + bbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbaaaababbabaabbbbaabbbbabaabbbbaaaaabbbbbbbaaaabbbbbbbbba + abbbbbbbbbaaaaaaabaaaaaaaaabbbbbbaaaaabbbabababbaaaabbbaabaabbbaaaaabbbbbbbbaaaabbbbaabbba + abbbbbbbbbaaaaabbaaaaaaaababbbbbbaaaaababaaaaabbbaaabbbbbbaaabaaaaabbbbbbbbbaaaabbbbabbbba + abbbbbbbbaaaaabbaaaaaaabbbbbbbbbbaaaaabbaabaaabbbaaabbbbbbaaaaaaaabbbbbbbbbbaaaabbbbbbbbba + abbabbbbbaaaabbbaaaaaaabbbbbbbbbbaaaaabababaaabbbaaabbbbbbabaaaaabbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbaaaaaaaaabaaabbbbbbbbbbbaaaabbaaaaaaabbbaaabbbbbbaabaaabbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbbbaaaaaaaabbaaabbbbbbbbbbbaaaabbbbabaaabbbaabbbbbbbaaaaabbbbbbbbbbbbaaaabbbabbbbbba`, + map `bbbbbbbbababbbbbabbaaaaabbbbbabbabbbbaaaaaaabaaaabbaaabaaaabbaaabbbababbaaaabbbaaabbbbbbba + bbbbbabbababbbbbbbbaaaaabbbbbabbabbbbaaaaaaaaaaaaaaaaaaaaaabbaaaaaaababbaaaabbbbaabbbbbbba + abbbbabbababbbbbabbaaaaabbbbbabbabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbaabbbbbba + abbbaaabababbabbabbaaaaabaabaaaaabbbbbaaaaaaaabbbbbbbbbbaaaaabbaaaaaaaaaaaaaaabbbbabbbbbba + abbbbaaabbbbbbbbbbbaaaabbbbbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbbbaabaabaaaaaaabbbbbbbbbba + abbbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbabbbbbbbbbbabbbaaaaaaabbbbbbbba + abbbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaaaaabbbbbba + abbbbbaaaabbaaaaabbaaaabbbbbabbbabbbbbbbaabbbbbabbbbbbbbbbbbbbabbbbbbbaaaabbbaaaaaabbbbbba + abbbbbabaabbabbbbbaaaaabbbbbaabaabbbbbbbabbbbbaaabbbbbbbbbbbabaaabbbbbaabbbbbaaaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbaaabbbbbbbbbaaaaaaabbbbbaabbabaaaaaaabbbbbba + abbbbabaaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaaaaabaaaabbbbbbbbbaaaaaaabbabaaabbbbaaaaaaabbbbbba + abbbbbbaaabbabbbbbaaaaabbbabaababbabbaaaaaaabaaaabbbaabbbbaaaaaaabbabbaabbbbaaaaaaabbbbbba + abbbbbbaaabaaaaabbaaaaaaaaaaaaaaaaaabbaaaaaaabbaabbaaabbbbbaaaaaabbabbabbbabaaaaaaaabbbbba + abbbbbbaabbbbbbbbbaaaabbaaaaaaaabbabbbaaaaaabbbaaabaabbbbbbaaaaabbbabbabbbabaaaaaaaabbbbba + abbbbaaaabbbbbbbbaaaaabbbbaaaaabbbbbbbaabbaabbbabaaaabbbbbaaabbbbbbaabababbbbbaaaaaabbbbba + abbbbaaaabbabbbbbaaaaabbbbbbaabbaabbbbaabbbbbbbbbaaabbbbbbababbbabaaaabaaabbbbaaabbbbbbbba + abbbbbaaabbabbabbaaaaabbabababbbaabbbaaaabbbbbbbbaaabbbbbbababbaabaaaabbabaabbaaaabbbbbbba + abbbbaaaaababbabbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbbabaaabbbaaaaaaaaaabbaaaaababbbba + abbbbaaaabbbbbbbbaaaabbbbbbbabbbbbbbbaaabbbbbbbbbaaabbbbbbabaaaabbbbaaaaaaaaabaaaabbabbbba + abbbbbbbbbbbbbbbbaaaabbbbbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabaabaaaabbbbbbba + abbbbbaabbbbbbbbaaaabbbbaabbbbbbbbbbaaabbabaaabbabbbbbbbbbbbaaaabbbbbaaabbaaaaaaaabbbbbbba + abbbbaaaaaaaaaaaaaaabbbaaabbaaaabbbbaaabaaaaaaaaabbbbbbbbbbbbaaabbbbaaabbbaaaaaaaabbbbbbba + abbbbbbabbbbbbbbaaaabbbaaababaaabbbaaaabaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbba + abbbbbaabbbbbbbbaaaabbbaaaaabbaabbbbaaabbbbaabbbaaaabbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbba + abbbbbabbbbbbbbbaaaabaaaaaaabbaaabbbaaabbbbbabbbbbaaabbbbbbbbbbaaabbbbbbbbbbbbbaaaaabbbbba + abbbbaaabbbbabbbaabababbaaabbbaaabbbaaaabbbbbaaabbbaaaabbbbbbbbaaabbbbbbbaabbbbbabaabbbbbb + abbbbaaabbabaabaaabaaabaaaabbbbaabbbbaabbbbbbaaaaaaaaaabbbbbbbaaaabbbbbaaaaabbaaabbabbbbbb + abbbbaabbbbbabbbaaaaaaaaabbbbbbaabbbbabbbbbbbaaaaaaaaaabbbbbbbaaaaaabaaaaaabbaaaaaaabbbbba + abbbbaabbbbbbbbaaabbaaaabbbbbbbaabbbbbbaaabbbaaaabbaaaabbbbbbbbaaaaaabaaaabbbaaaaaaabbbbba + abbbbaabbbbbbbbaaaabaaaabbbbbbbaabbbbbbaabbbbabbbbbbaaabbbbbbbbaaaaaabbbbbbbbaaaaaaabbbbba + abbbbaabbbbbbbbaaabbbaaabbbbbbaaabbbbbaaaabbbabbbbbbbaabbbbbbbbaaaaaaaabbbbbbbaaaaaabbbbba + abbbbaabbbbbbbbaaabbaaaabbbbbbaaabbbbaaaaabbbaaabbbbbbbbbbbbbbbaaaabbaabaaaabbaaaaaabbbbba + abbbbabbabbbbbbaaaaaaaabbbbbbbbaabbbaaaaaabbbaaabbbbbbbbbbbbbbbbaaabbaabaaaaabbaaaaabbbbba + abbbbbbbbbbabbbaaaaaabaaaaaaababbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbabbbabaaaaaabbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbaabbbaaaaaaaabaabbbbbbbbbbbbbbbbbbaababbbabbaaaabbbbbba + abbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbaaaaaaaaaaabbbbbbbbaabbbbbbbbbaaaabbabaaaaabbbbbba + abbbabbbbbbbbbaaaaabbaaaaabbbbbbbbaaabbbbaaaaaaaaababbbbbbaaabbbbbbbbbaaaabbabaaaaabbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaaabaaaabbbaaaaaaaaaaabbbbbaaabbbbbbbbbbaaaabbbbaaaaabbbbbba + abbbaabbbaaabbaaaabbbbbbbbbbbbbbbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbba + abbbaababbaaaaaaaaabaaaaaaaaaaaabbbbaaaaaababbbbaabbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbbbbbba + abbbaababbabbbaaaaabbbbbbbbbbbaabbbbaaaaaabbbbbbabbbbbbbbbbbbbbbbbbabaabbabbbaaaaabbbbbbba + abbaaabbbbabbbaaaabbabbaabbaabbbbabbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbabbaaaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbaaabbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbaaaabbbbbbbbabbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaabbaaaaabbbbbbaabbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbbbbbbbaabbaaabbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaaabaaaaaaaaaaaabbaabbaaabbbbbbbababbbbbbbbbbbbbbbaaaaaabbbaaaaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaabaaaabbbbbaaababbbbbbbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbba + abbabbbbbbbbbaaaabbbbbbbbbabbbbbbaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbabbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbaaaaabbbbbaabbbbbbbbbbbaabbbbbabbbbbbaaabbbbbbbabbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaababbbbaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbaaabbbbbbaaabbaabbbbbbbbbbbaabbbbbbaaabbbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbaaaabbbbbaaaaaababbbbbbbbbaababbbbbaaabbbbbbbbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbaaaabbbaaaabbbbaaaaaabbaabbbbbbbbababbbbbbaabbbabbbbbbbbba + ababbabbabbaaaaabbbbbbabbabbbbbbaaabbbbaaaabbbbabbbaabbbaabbbbbbaabbbbbbbaabbbbaaabbabbbba + ababbbbbbbbaaaaaaaaabaaaaabbabbbaaabbbbaaaaaaaabbbbabbbbbabbbbbbaabbbbbababbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaaaaaabbaaabbbbaaaaaaaabbbbbbbbbaaaabbbbaababbbaabbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbabbbaaaabbbaaaaabbbbbbbbbbbbbaabbbbbbabbabbaabbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbaaaabbbaaaaaabbbbbbbbbbbbbabbbbbbaaabbaaabbbbaaaabbbbbbbba + abababbabbbaaaaabbbbbabbbbbbabbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaabaaabbbbaaaabbbbbbbba + abbbabbaabaaaaabbaabbabbabbbbbbbaaaabbbaaaaaabbbbbbbbbababbbbbbbbaababaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaaaaaabbaaaaabbbbaaaaaaabbbbbbbaaabbbbbbbbbababaaabbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbabbabbbaaaaabbbbbaaaaaaaabbaaaaaabbbbbbaaaababaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaaaaaaaaaaabbbbbbaaaababbaabbbbaaaabbbbbbbba + aaaaababbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaaaaaaabbbbbbbaaaaababbaabbbbbbbabbbbbbbba + aabbaaaaaaaaaaaaaabbabbbbbbbbbbaaaaabbbbbbbaabbaaabbbaabbbbbbbaaaaababbbbbbbabbbbbbbbbbbba + abbaabbbbbaaaabbbaaaaaaaaaaaabbaaaabbbbbbbbaabbaabbbbaabbbbbbbbbbaabbbbbbbbbabbbbbbbbbbbba + abbaaaaabaaaaabbbbbbbbbbbbbaaaaaaaabbbbbbaaabbaaabbbbaabbbbbbbbababbabbbbabbaabbbbbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaabbbbbbbaaaabbaaaabbbaabbbbbbbbababbbbbbbabbaabbbbbbbbbbba + abbbbbbbbaaaaabbbbbbbbbaaaaabbbabbbbbbbaaaabbbaaabbbbaabbbbbbbaabbaabbbbbabbaaabbbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbaaabbabaabbbbbbbaabbaabbbbaabbaaaabbbbbbbbba + abbbbbbbbaaaaabbabaaaabbbbbbbbbbbbaaaaaaaaabbbaaaababaabbbbbbbaabbbbbbbbaabbaaaaabbbbbbbba + abbbbbbbbaaaaabbbbbaabbbbbbbbbbaaaaaaaaaaaabbaaaaababbaabbbbbbbbbbbbbbbbaabbaaaaabbbbbbbbb + abbbbbbbbaaaabbbabbbbbbbbbbbbaaaaaaaaabbbabbbaaaaabbbbaabbbbbbbbbbbbbbbaabbbaaaaaabbbbbbbb + abbbbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaaabbaaaaaaaabbaabbbaaabbbbbbbbbbbbbbaabbbaaaaaaabbbbbbb + ababaabbaaaaabbbbbbbbbbbaaaaaaaaaaaaabaaabbbbbbbbaabbbaaabbabbbbbbbbbbaaabbbaaaaaaaabbbbbb + abbbaabbaaaaabbbbbbbbbaaaaaaaaaaaaaaabaaabbbbbbbbaabbbbaaaaabbbbbbbbbaaabbbbaaaaaaaaaabbbb + bbbbaabbaaaabbbbbbbbaaaaaaaaaaaaaaaaaabbaaaaaabaaaabbbbbabbaaabbbbbbaaaabbbbaaaaaaaaaaabbb + bbbbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaaaabbabaabaabbbaabbbbbaaaabbbbbbbaaaabbbbbaaaaaaaaaaaabb + abbbbbbbaabbbbbbbaaaaaaaaaaaaaaaaaaaabbbabbaaabbaaabbbbbaaaabbbbbbaaaaabbbbbaaaabbaaaaaaaa + aaabbbbbabbbbbbaaaaabbaaaaaaaaabbaaaabbababbaabbaaabbbbbbaaabbbbbbaaaabbbbbaaaaabbbbaaaaaa + babaaababbbbbbaaaaabbaaaaaaaabbbbaaaabbbabbababbbaabbbbbbaaabbbbbaaaaabbbbbaaaaabbbbaaaaaa + bbbbbbbbbbbbaaaaaaabbaaaaaababbbbaaaabbababbabbbbaabbbbbbaaabbbbaaaaabbbbbbaaaaabbbbbabbaa + abbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbaaaabbaaaaababbbaabbbbbbaaabbbaaaaabbbbbbbaaaaabbbaabbbba + abbbbbbbbaaaaaaabbaaaaaaaaabbbbbaaaaabbaaaaaabbbbaabbbbabaaabbbaaaabbbbbbbbaaaabbbbaabbbba + abbbbbbbaaaaaaabbaaaaaaaaabbbbbbaaaaabbbaaaababbbaabbaabbaabbbaaaabbbbbbbbbaaaabbbbbaabbba + abbbbbbbaaaabbaaaaaaaabbbbbbbbbbaaaaabbbaaaaabbbbaaabbbbbaaabaaaaabbbbbbbbbaaaabbbbbbabbba + abbbbbbbaaaabaaaaaaaaabbbbbbbbbbbaaaabbabaaaaabbbaaabbbbbaaaaaaabbbbbbbbbbaaaaabbbbbbbbbba + abbbbbbaaaaaaaaaabbaabbbbbbbbbbbbaaaabbbbabaaabbbaaabbbbbbbbaaabbbbbbbbbbbaaaabbbabbbbbbba`, + map `bbbbbbbbababbbbbbbbbaaaabbbbbabbabbbbaaaaaaabaaaabbaaabaaaabbaaabbbababbaaaabbbaaabbbbbbba + bbbbbabbababbbbbbbbaaaaabbbbbabbbbbbbaaaaaaaaaaaaaaaaaaaaaabbaaaaaaababbaaaabbbbaabbbbbbba + abbbbabbababbbbbabbaaaaabbbbbabbabbbbaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabbbbaabbbbbba + abbbaaabababbabbabbaaaaabaabaabaabbbbbaaaaaaaabbbbbbbbbbaaaaaabaaaaaaaaaaaaaaabbbbabbbbbba + abbbbaaabbbbbbbbabbaaaabbbbbaabbabbbbbaaaaabbbbbbbbbbbbbbbaaabbbbbaabaabaaaaaaaabbbbbbbbba + abbbbbbababbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbabbbbbbbbbbabbaaaaaaaabbbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbabbaaaaaaabbbbbba + abbbbbaaaabbaaaaabbaaaabbabbabbbabbbbbbbaabbbbbabbbbbbbbbbbbbbabbbbbbbaababbbaaaaaabbbbbba + abbbbbbbaabbabbbbbaaaaabbbbbaabaabbbbbbbabbbbbaaabbbbbbbbbbbabbaabbbbbaabbabbaaaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbaaabbbbbbbbbaaaaaaabbbbbaabbaaaaaaaaabbbbbba + abbbbabaaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbbbbaaaaaaabbabaaabbbbaaaaaaabbbbbba + abbbbbbaaabbabbbbbaaaaabbbabaababbabbaaaaaaaaaaaabbbaabbbaaaaaaaabbabbaabbbbaaaaaaabbbbbba + abbbbbbaaabaaaaabbaaaaaaaaaaaaaaaaaabbaaaaaabbaaaabaaabbbbbaaaaabbbabbabbbabaaaaaaaabbbbba + abbbbbbaabbbbbbbbbaaaaabaaaaaaaabbabbbaaaaabbbaaaaaaabbbbbbaaaaabbbabbabbbabaaaaaaaabbbbba + abbbbaaaabbbbbbbbaaaaabbbbabaaaabbbbbbaabaabbbabaaaaabbbbbaaabbbbbaaabababbbbbaaaaaabbbbba + abbbbaaaabbabbbbbaaaaabbbbbbabbbaabbbbaabbabbbbbbaaabbbbbbaaabbaabaaabbaaabbbbaaabbbbbbbba + abbbbbaaabbabbabbaaaaabbababbbbbaabbbaaababbbbbbbaaabbbbbbababaaabaababbabaabbaaaabbabbbba + abbbbaaaaababbabbaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbbabaaabbaaaaaaaaaaabbaaaaababbbba + abbbbaaaabbbbbbbbaaaabbbbbbbabbbbbbbbaaabbbbbbbbbbaabbbbbbabaaaabbabaaaaaaaaabaaaabbabbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbbbbaaaabbbbbaaaaabaabaaaabbbbbbba + abbbbbaabbbbbbbbaaaaabbbaabbbbabbbbbaaabbaaaaabbabbbbbbbbbbbaaaabbbbbaaabbaaaaaaaabbbbbbba + abbbbaaaaaaaaaaaaaaabbbaaabaabaabbbbaaabaaaaaaaaabbbbbbbbbbbbaaabbbbaaabbbaaaaaaaabbbbbbba + abbbbbbabbbbbbbbaaaabbbaaabaaaaabbbaaaabaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbba + abbbbbaabbbbbbbbaaaabbbaaaaabaaabbbbaaabbbbaabbbaaaaabbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbba + abbbbaabbbbbbbbbaaaabaaaaaaabbaaabbbaaabbbbbabbbbbaaabbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbbba + abbbbaabbbbbabbbaabababbaaabbbaaabbbaaaabbbbbaaabbbaaaabbbbbbbbaaabbbbbbaaabbbbbabaabbbbbb + abbbaaaabbabaabaaabaaabaaaabbbbaabbbbaabbbbbbaaaaaaaaaabbbbbbbaaaabbbbaaaaaabbaaabbabbbbbb + abbbbaabbbbbabbbaaaaaaaaabbabbbaabbbbabbbbbbbaaaaaaaaaabbbbbbbaaaaaabaaaaaabbaaaaaaabbbbba + abbbbaabbbbbbbbaaabbaaaaabbbbbbaabbbbbbaaabbbaaaabbaaaabbbbbbbbaaaaabbaaaabbbaaaaaaabbbbba + abbbbaabbbbbbbbaaaabbaaabbbbbbbaabbbbbbaabbbbabbbbbbaaabbbbbbbbaaaaaaabbbbbbbaaaaaaabbbbba + abbbbaabbbbbbbbaaabbaaaabbbbbbaaabbbbbaababbaabbbbbbbabbbbbbbbbaaaaabaabbbbbbbaaaaaabbbbba + abbbbabbbbbbbbbaaabbaaaababbbbaaabbbbaaaabbbabbbbbbbbbbbbbbbbbbaaaabbaabaaaabbaaaaaabbbbba + abbbbabbabbbbbbaaaaaaaabbbbbbbbaabbbaaaaabbabbbabbbbbbbbbbbbbbbbaaabbabbaaaaabbaaaaabbbbba + abbbbabbbbbabbbaaaaaabaaaaaaababbbbbaabbbbbaabbaabbbbbbbbbbbbbbbbabbbabbbbbbabaaaaaabbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbaabbbaaaaaabbaabbbbbbbbbbbbbbbbbbbaaaabbbabbaaaabbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbaaaaaabbaaabbbbbbbbaabbbbbbbbbaaaabbabaaaaabbbbbba + abbbabbbbbbbbbaaaaabbabaaabbbbbbbbaaabbbbaaaaaaaaaaabbbbabaabbbbbbbbbbaaaabbabaaaaabbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaaabaaaabbbaaaaaaaaaabbbbbbaabbbbbbbbbbbaaaabbbbaaaaabbbbbba + abbbaabbaaaabbaaaabbbbbbbbbbbbbbbbbaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbba + abbbaabbbbaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaabaabbbabbbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbbbbbba + abbbaabbbbabbbaaaaabbbbbbbbbbbaabbbbaaaaaabbbbbbabbbbbbbbbbbbbbbbbbabaabbabbbaaaaabbbbbbba + abbaaabbbbabbbaaaabbabbaabbaabbbbabbabaaabbbbbbaabbbbbbbbbbbbbbbbbbababbbabbaaaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbaaabbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbabbaaaabbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaabbaaaaabbbbbbabbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbbbbbbbaabbaaabbbbbbaaabbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbba + abbaabbbbabbbaaaaabaaaaaaaaaaaabbaabbaaabbbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbaaaaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaabaaaabbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbabbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabbbaaaaabbbbbaabbbbbbbbbbbaabbbbbabbbbbbaaabbbbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaababbbbaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbbaaabbbbbbaaabbaabbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbba + ababbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbaaaabbbbbaaaaaababbbbbbbbbaabaabbbbaaabbbbbbbbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbaaaabbbaaaabbbbaaaaaabbaabbbbbbbbabbbbbbbbaabbbabbbbabbbba + ababbbbbabbaaaaabbbbbbabbabbbbbbaaabbbbaaaaabbbabbbaabbbaabbbbbbaabbbbbbbaabbbbaaabbabbbba + ababbbbbbbbaaaaaaaaabaaaaabbabbbaaabbbbaaaaaaaabbbbabbbbbabbbbbbaabbbbbababbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaaaaaabbaaabbbbaaaaaaaabbbbbbbbbaaaabbbbaababbbaabbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbabbbaaaabbbaaaaabbbbbbbbbbbbbaabbbbbbabbabbaabbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbaaaabbbaaaaaabbbbbbbbbbbbbabbbbbbaaabbaaabbbbaaaabbbbbbbba + abababbabbbaaaaabbbbbabbbbbbbbbbaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbaaaaabaaabbbbaaaabbbbbbbba + abbbabbabbaaaaabbaabbabbabbbbbbbaaaabbbaaaaaabbbbbbbbbababbbbbbbbaababaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaaabaabbaaaaabbbbaaaaaaabbbbbbbaaabbbbbbbbbababaaabbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbabbaabbaaaaabbbbbaaaaaaaabbaaaaaabbbbbbaaaababaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaaaaaaaaaaabbbbbbaaaababbaabbbbaaaabbbbbbbba + aaaaabbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaaaaaaabbbbbbbaaaaababbaabbbbbbaabbbbbbbba + aabbaaaaaaaaaaaaaabbabbbbbbbbbbaaaaabbbbbbbaabbaaabbbaabbbbbbbaaaaababbbbbbbabbbbbbbbbbbba + abbaabbbbbaaaabbbaaaaaaaaaaaabaaaaabbbbbbbbaabbaabbbbaabbbbbbbbbbaabbbbbbbbbabbbbbbbbbbbba + abbaaaaabaaaaabbbbbbbbbbbbbaabaaaaabbbbbbaaabbaaaabbbaabbbbbbbbababbabbbbabbaabbbbbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaabbbbbbbaaaabbaaabbbbaabbbbbbbbababbbbbbbabbaabbbbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbaaaaabbaabbbbbbbaaaabbbaaabbbaaabbbbbbbaabbaabbbbbabbaaabbbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbaaabbbaaabbbbbbbaabbaabbbbaabbaaaabbbbbbbbba + abbbbbbbbaaaaabbaaaaaabbbbbbbbbbbbaaaaaaaaabbbaaaababaabbbbbbbabbbabbbbbaabbaaaaabbbbbbbba + abbbbbbbbaaaaabbbbbaabbbbbbbbbbaaaaaaaaaaaabbaaaaababbaabbbbbabbbbbbbbbbaabbaaaaabbbbbbbbb + abbbbbbbbaaaabbbabbbbbbbbbbbbaaaaaaaaabbbabbbaaaaabbbbaabbbbbbbbbbbbbbbaabbbaaaaaabbbbbbbb + abbbbbbbaaaaabbbbbbbbbbbbbaaaaaaaaaaabbaaaaaaaabbaabbbaaabbbbbbbbbbbbbbaabbbaaaaaaabbbbbbb + ababaabbaaaaabbbbbbbbbbbaaaaaaaaaaaaabaaabbbbbbbbaabbbaaabbabbbbbbbbbbaaabbbaaaaaaaabbbbbb + abbbaabbaaaaabbbbbbbbbaaaaaaaaaaaaaaabaaabbbbbbbbaabbbbaaaaabbbbbbbbbaaabbbbaaaaaaaaaabbbb + bbbbbabbaaaaabbbbbbbaaaaaaaaaaaaaaaaaabbaaaaaabaaaaabbbbabbaaabbbbbbaaaabbbbaaaaaaaaaaabbb + bbbbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaaaabbabaabaabbbaabbbbbaaaabbbbbbbaaaabbbbbaaaaaaaaaaaabb + abbbbbbbaabbbbbbbaaaaaaaaaaaaaaaaaaaabbbabbaaabbaaabbbbbaaaabbbbbbaaaaabbbbbaaaabbbaaaaaaa + aaabbbbbabbbbbbaaaaabbaaaaaaaaabbaaaabbababbaabbaaabbbbbbaaabbbbbbaaaabbbbbaaaaabbbbaaaaaa + baaaaababbbbbbaaaaabbaaaaaaaabbbbaaaabbbabbababbbaabbbbbbaaabbbbbaaaaabbbbbaaaaabbbbbaaaaa + bbbbbbbbbbbbaaaaaaabbaaaaaababbbbaaaabbababbabbbbaabbbbbaaaabbbbaaaaabbbbbbaaaaabbbbaabbaa + abbbbbbbbbaaaaaaaaaaaaaaaaabbbbbaaaaabbbaaaababbbaabbbbbbaaabbbaaaaabbbbbbbaaaaabbbaaabbba + abbbbbbbbaaaaaaabbaaaaaaaaabbbbaaaaaabbaaaaaabbbbaabbbbbbbaabbbaaaabbbbbbbbaaaabbbbaabbbba + abbbbbbbaaaaaaabbaaaaaaaaabbbbbbbaaaabbbaaaababbbaabbbbabaabbbaaaabbbbbbbbbaaaabbbbbaabbba + abbbbbbbaaaabbaaaaaaaabbbbbbbbbbbaaaabbbaaaaabbbbaaabbabbaaabaaaaabbbbbbbbbaaaabbbbbbabbba + abbbbbbbaaaabaaaaaaaaabbbbbbbbbbbaaaabbabaaaaabbbaaabbbbbaaaaaaabbbbbbbbbbaaaaabbbbbbbbbba + abbbbbbaaaaaaaaaabababbbbbbbbbbbbaaaabbbbabaaabbbaaabbbbbabbaaabbbbbbbbbbbaaaabbbabbbbbbba`, + map `bbbbbbbbaaabbbbbbbbaaaaabbbbbabbbbaabaaaaabaaababbabbbbaaaaaabbbbababbaaabbbaaaabbbbbbbbba + bbbbbabbaaabbbbbbbbaaaaabbbbbbbbbbaaaaaaaabaaababbaabbbabbbaabbbbababbaaabbbbaaabbbbbbbbba + abbbbabbabbbbbbbabbaaaaabbbbbabbbbbaaaaaaaaaaaabbbaaabbaabbaaabbbabaabaaaabbbbaabbbbbbbbba + abbbaaabababbbbbabbaaaaabaaaaabbbbbaaaaaaaaaaaaabaaaabbaabbaaaaaaaaaaaaaaaabbbbaabbbbbbbba + abbbbaaabbbbbbbbbbbaaaabbbbbabbbbbbaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaabbbbabbbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbabbbbbbaaaaaaaaaaaaabbbbbbbaaaaababbaaaaaaaaaaaaabbbbbbbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbaaaaaababbbbbbbbbbbbbaabbbbbbaababaaaaaaaaabbbbbbbbbba + abbbbbaaaaabaaaaabaaaaabbabbabbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbabbabbaaaaaabbbbbbbbba + abbbbbbbaabbabbbbbaaaaabbabbaabbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbaaaabbaaaaaaabbbbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbbbbba + abbbbabaaabbbbbbbbaaaabbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbaabbbbbaabbbbaaaaaaabbbbbbbba + abbbbbbaaabbabbbbbaaaaabbbababbabbbbbbaaabbbaaabbbbbbbbbbaaabaaabbabaabbbbaaaaaaabbbbbbbba + abbbbbbaaabaaaaabbaaaaaaaaaaaaaaaaabbbaaaabbaaabbbbbbbbbaaaaaaabbbabaabbbbaaaaaaabbbbbbbba + abbbbbbaabbbbbbbbbaaaaabaaaaaaabbabbbaaaaabaaaabbbbabbbbaaaaaaabbbbbaabbabaaaaaaaabbbbbbba + abbbbaaaabbbbbbbbaaaaabbbbaabaabbbbbaaaaaabbaaabbbaabbbbbaaaaaabbbabbaababaaaaaaaabbbbbbba + abbbbaaaabbabbbbbaaaaabbbbbabbbbbbbbaaaaaaabaaaaaaaabbbbbaaaaaabbabbabbbabaaabaaaabbbbbbba + abbbbbaaabbabbabbaaaaabbabbabbbabbbbaaaaaabbbbbaaaabbbbbaaabbbaabaabbbaaabbbabababbbbbbbba + abbbbaaaaababbabbaaaabbbbbbbabbbbbbbaaaaabbbbbbaaaabbbbbabbabbaaaaaaabbbabbbaaaabbabbbbbba + abbbbaaaabbbbbbbbaaaabbbbbbbabbbbbbbaaababbbbbbaaaabbbbbaababaaaaaaaabaaaabbaaaaababbbbbba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbbbabaaaabbaabaabaaaaabaaaaababbbbbba + abbbbbaabbbbbbbbaaaaabbbaabbbbabbbbaaaabbbbbbbbbaaabbbbbaaaaaabbbabaaaaaaaabaaaabbbbbbbbba + abbbbaaaaaaaaaaaaaaabbbbaabbabbbbbbbaabbbbbbbbbbaabbbbbbbbaaaabbbbbaaaaaaaaaaaaabbbbbbbbba + abbbbbbabbbbbbbbaaaabbbaaabbaabbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaabbbaabbbbaaaaaaaabbbbbbbbba + abbbbbaabbbbbbbbaaaabbbaaaabbaabbbbaaabaaaaaaabbbbbbbbbbbbbbaaabbbaaaabbaaaaaaaabbbbbbbbba + abbbbaabbbbbbbbbaaaaaaaaaaabbaabbbaaabbaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaaaaabbbbbbbba + abbbbaabbbbbabbbaaaaabbbaaabbbaabbaaabaaaaaaaaaaaabbbbbbbbbbbaabbbbbbbbbbbbabaaaaaabbbbbbb + abbbaaaabbabaabaaaaaabbaaaabbbbbbbaaaabbbaabbbbbaaabbbbbbbbbbaaabbbbbbbabbbbbbaaaaabbbbbbb + abbbbaabbbbbabbbaaaaabaaabbabbbabbaaaabbbbaabbbbbaaaabbbbbbbbaaaabbbbbbaaabbbbabbaabbbbbba + abbbbaabbbbbbbbaaabaaaaaabbbbbbabbbaaabbbbbaaaaaabaaabbbbbbbbaaabbbbaaaaaaaaaaaabaabbbbbba + abbbbaabbbbbbbbaaabbaaaabbbbbbbabbbaaabbbbbaaaaaaaaaaabbbbbbbaaaaaabaaaaabaaaaaaaabbbbbbba + abbbaaabbabbbbbaaabbaaaabbbbbbaaabbaababbbbbaaaaaaaaaabbbbbbbaaaaaabbababbbaaaaaaabbbbbbba + abbbaabbbbbbbbbaaabbaaaababbbbaaabbbbbaabbbaabbbbbaaaabbbbbbbaaaaaabbbbbbbbbaaaaaabbbbbbba + abbbaabbbbbbbbbaaaaaaaabbbbbbbbaabbbbaaabbbaabbbbbbbabbbbbbbbaaaaaaaaabbabbbbaaaaabbbbbbba + bbbbbabbbbbabbbaaaaaabaaaaaaababbbbbaaaabbbabbbbbbbbbbbbbbbbbbaaaabaabbaaaabbaaaaabbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbaabbabbabbaaaaabbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbbbbbbbbaaaaabbaabaabbbbbbbbbbbbbbbbbbbbaababbbaabaaaaabbbbbbba + abbbabbbbbbbbbaaaaabbabaaabbbbbbbbaabbbbbaabbaaaabbbbbbbbbabbbbbbbbaabaabbbabaaaaabbbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaabaaabbbaaaaaaaaaabbbbbbbbbbabbbbbbbbbaaaabbabaaaaabbbbbbba + abbbaababbaabbaaaabbbbbbbbbbbbbbbaaabbbaaaaaabbaaabbbbbbaaabbbbbbbbbbaaaabbabaaaabbbbbabba + abbbaabbbbaaaaaaaaaaaaaaaaaaaabbbaaabbbaaaaaaaaaabbbbbbaaabbbbbbbbbbbaaaabbbbaaaabbbbbbbba + abbbaabbbbbbbbaaaaabbbbbbbbbbbbbbaaaaabbaaaaaaaaabbbbbbaabbbbbbbbbbbbaaaabbbaaaaabbbbbbbba + abbaaabbbbabbaaaaabbabbaabbaabbbbbaaaaabbbaaabaaabbbbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbabbbbaaabbbbbbbbbbbbbbbbababbabbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbbbbbbbbabaaaabbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbbba + abbaabbbbabbbaaaaabaaaaaaaaaaaabbaabaaaabbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbaaaaaabbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbbbbbbbbaabaaabbbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbabbbbbbbbbaaabbbbbbbaaabbabbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbbbbaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaabbbaaabbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbbbbbbbabbaaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbbaaaabbbbabbbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbaabbbaaabbbbbbbabbabbbbbbbbbbbbbaaabbbbbaaabbbbaabbbbbbbba + ababbabbabbaaaaabbbbbbabbabbbbbbaabbbaaabbbbbbaaaaaabbbbbbbbbbbaababbbbbaaabbbaaabbbabbbba + ababbbbbbbbaaaaaaaaabaaaaabbabbbaabbbaaaabbbbbaaaaabbbabbbbbbbbbabbbbbbbaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaaaaaabbaabbbbaaaabbbbabbaabbbaabbbbbbbaaabbbbbbaabbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbabbbaabbbbaaaaaabaabbabbbbaaabbbbbbaabbbbbababbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbaaabbbaaaaaaaabbbbbbbbbaaaabbbbaabbbbbaabbbbbaaaabbbbbbbba + abababbaabbaaaaabbbbbabbbbbbbbbbaaabbbaaaaaaaabbbbbbbbbaaabbbbbaababbaaabbbbbaaaabbbbbbbba + abbbabbaabaaaaabbaabbabbabbbbbbbaaabbbaaaaaababbbbbbbbbbaabbbbbbaabbbaaabbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaaaaaabbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbaaababaaabbbbbaaaabbbbbbbba + aabbbbbbbbbaaaabbbbbbbbbabbabbbaaaabbbaaaaabbbbbbbbbbbabbbbbbbbbaababaaabbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbaaaaaabbbbbbbbbbaaabbbbbbbaaabbaaabbbbbaaaabbbbbbbba + aaaaababbbaaaaabbbbbbbbbbbbbbbbaaaaabbbaaaaaaabbbbbbaaaaaabbbbaaaababbaaabbbbaaaabbbbbbbba + aabbaaaaaaaaaaaaaabbaabbbbbbbbbaaaaabbbbbaaaaaaabaaaaaaabbbbbbaaaababbaabbbbbaaaabbbabbbba + abbaabbbbbaaaabbbaaaaaaaaaaaabaaaaabbbbbbbbbabaaaaaaaaabbbbbbbaaaababbabbbbbbbbaabbbbbbbba + abbaaaaabaaaaabbbbbbbbbbbbbaabaaaaaabbbbbbbabbaaaaaaaaabbbbbbbaaaaaabbbbbababbbbabbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaaaabbbbbbbaabbaaabbbbabbbbbbbbbaaaaabbbbbababbbbbbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbaaaaaabaaaaabbbbbbaabbbaaabbbaabbbbbbbbbaababbbbbbbbaabbbbbbbbbbbba + abbbbaabbaaaaabbbbbbbbbabbbbbbbaaaabbbbbaaabbaaaabbbaaabbbbbbbaabbbbbbbbabbaabbbbbbbbbbbba + abbbbbbbbaaaaabbabbbabbbbbbbbbbbbbbbbbbaaaabbaaaabbbaabbbbbbbbaabbbbbbbbabbaaabbbbbaabbbba + abbbbbbbbaaaabbbbbbaaabaaaabbbabbbbbbaaaaabbbaaaaaaaaabbbbbbbaabbbbbbbbbabbaaaabbbbbbbbbba + abbbbbbbbaaaabbbabbbbbbbbbbbbbbbbbbaaaaaaabbbaaaaaabaabbbbbbbaabbbbbbbbaabbbaaaabbbbbbbbbb + abbbbbbbaaaaabbbbbbabbbbbbbbbbbbaaaaabaaaaaaaaabaaabbaabbbbabbbbbbbbbbbaabbbaaaabbbbbbbbbb + ababaabbaaaaabbbbbbbbbbbbbbbbaaaaaaaabaaabbbbbbbbaaabaaabbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbb + abbbaabbaaaaabbbbbbbbbbbbbbbaaaaaaaaabaaabbbbbbbbaaabaaabbbbbbbbbbbbbbaabbbbaaaaaabbbbbbbb + bbbbbabbaaaaabbbbbbbbbbbbaaaaaaaaaaaabbbabaaaaaabaabbaaaabbbbbbbbbbbbaaabbbbaaaaaaabbbbbbb + bbbbbbbbaaaaabbbbbbbbbbaaaaaaaaaaaaaabbbbaababbabaabbbaaabaabbbbbbbbbaaabbbaaaaaaaaaabbbbb + abbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaaabbbabaaaababaabbbbaabaaabbbbbbbaaabbbbaaaaaaaaaaabbbb + aaabbbbbaaaabbbbbbaaaaaaaaaaaaaaaaaaababbabaabbabaabbbbaaaaaabbbbbbaaaabbbbaaaaaaaaaaaabbb + babaaabaaababbbbbaaaaaaaaaaaaaaabaaaabbbbbabbababaabbbbaaaaabbbbbbaaaabbbbbaaaaabaaaaaaaab + bbbbbbbaabbbbbbaaaaaabaaaaaaaaabbaaaababbabaabbbbaabbbbaaaaabbbbbbaaaabbbbbaaaabbbbaaaaaaa + abbbbbbabbbbbaaaaaabbaaaaaaaabbbaaaaabbaababbababaabbbbbaaaabbbbbaaaabbbbbbaaaabbbbbaaaaaa + abbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaaaaabbbaaaaabbabaabbbbaaaabbbbbaaaabbbbbbbaaaabbbbbaaaaaa + abbbbbbbbbaaaaaaaaaaaaaaaabbbbbbaaaaabbbbaaabbbbbaabbbbbaaabbbbaaaaabbbbbbaaaaabbbbababbaa + abbbbbbbaaaaaaaabaaaaaaaaabbbbabaaaaabbbabaaabbbbaabbbbbbaabbbaaaaabbbbbbbaaaaabbbbaabbbba + abbbbbbaaaaaaaaaaaaaaaaaabbbbbbbaaaaabbaaaabaababaabbbbbaaabbbaaaabbbbbbbbaaaaabbbbaabbbba + abbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbaaaabbbabaaabbabaaabbabaaabbaaaabbbbbbbbbaaaaabbbbbaabbba`, + map `bbbbbbbbaaabbbbbbbbaaaaabbbbbbbaaaaaaabaabbbbbbbbbaabbbbbaabbbabbaaaaabbbbaaabbbaaabbbabba + bbbbbabbaaabbbbbbbbaaaaabbbbbbbaaaaaaabaaabbbbbbbaaaabbbbaabbbabbbaaaabbbbaaabbbbabbbbabba + abbbbabbabbbbabbabbaaaaabbbbbbbaaaabaaaaaabbaaabaaaaaabbbaabbbbbbaaaaaabbbaaaabbbabbbbabba + abbbaaabababbbbbabbaaaaabaabbbbbbaabaaaaabbbbabbabbbbabbbaabbbaabaabaaabbbaaaabbbaabbbbbba + abbbbaaabbbbbbbbbbbaaaabbbbbbbbbbaaaaaaaabbbaabbabbbbababaabbbaabaabaaaabbbaaabbbabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbabaaaaaabaaaabbabbbbabbbaaabbaaaaaaaaaabbbbaabbbbabbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaaabaaabbbaabbaaaaaaaaaaaaaaaabbbbaabbbabbbbbba + abbbbbaaaaabaaaaabaaaaabbabbabbbbaaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaabbbbabbbabbbbbba + abbbbbbbaabbabbbbbbaaaabbabbabbbbaaaaaaaaaaaaaaaabaaaaabaabbaaaaaaaaaaaaaaabbbbbbbbbbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbaaaaaaaaabbabbbbbbbbabaaabbbbbaabaaabbaaaaaabbbbbbbbbbbba + abbbbabaaabbbbbbbbaaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbaabbbbbbbbbaabbbaaaaaaabbbbbbbbbbba + abbbbbbaaabbabbbbbaaaaabbbabbabbbbbaaaabbbbbbbbbbbbbbbbbabbbbbbbbbaabbbaaaaaaaabbbbbbbbbba + abbbbbbaaabaaaaabbaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbabaaaaabbbbbbbbbba + abbbbbbaabbbbbbbbaaaaaabbaaaaabbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbaabaaaaabbbbbbbbbba + abbbbaaaabbbbbbbbaaaaabbbaabbbbbbbbbabbbbbbaabbbbbbbbbbbaabbbbbbaaaabbbbbbaaaaabbbbbbbbbba + abbbbaaaabbabbbbbaaaaabbbaabbbbbbbbbaaabbbaaabbbbbbbbbaaaaaabbbbaabaabbbbbaaaaabbbbbbbbbba + abbbbbaaabbabbabbaaaaabbbaabbbbbbbbaaaaabaaaaabbbbbbbbaaaaaaabbbabbaabbbbabaaaabbbbbbbbbba + abbbbaaaaababbabbaaaabbbbaabbbbbbbbaaaaabbbaaabbbabbbbaaaaaaabbbabbabbbbbaaaaaaabbbbbbbbba + abbbbaaaabbbbbbbbaaaabbbbbabbbbbbbbaaaaaabaaaabbaabbbbbbaaaaaabbaababbabaaaaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaaabbbaaaabaabbbbbbaabbaabbaabbbbabbaaaabababbbbbbbba + abbbbbaabbbbbbbbaaaaabbbaabbbbbbbbbaaaaabbbbaaaaabbbbbbbaabbaaaabbabbbaabbaaaabbabbbbbbbba + abbbbaaaaaaaaaaaaaaabbbaaabbbbbbbbaaaaabbbbbbaaaabbbbbbaaabaaaaaaaaabbaaabaaaaababbbbbbbba + abbbbbbabbbbbbbbaaaabbbaabbbbbbbbbaaababbbbbbaaaabbbbbbabaaabbabbbaaabaaabaaaaabaabbbbbbba + abbbbbaabbbbbbbbaaaabbbaaaabbbabbbaaaaabbbbbbbaaabbbbbbaaaaabbbbbbaaabbaabbaaabbbbbbbbbbba + abbbbaabbbbbbbbbaaaaaaaaaaabbbbbbbaaabbbbbbbbbaaabbbbbbbaaaabbbbbaaaaaaaaaaaaabbbbbbbbbbba + abbbbaabbbbbabbbaaaaabbbaaabbbbbbbaaabbbbbbbbbbabbbbbbbbaaaaabbbbaaaaabbaaaaaabbbbbbbbbbbb + abbbaaaabbabaabaaaaaabbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbaaaabbbaaaaaaabbbbbbbaabbb + abbbbaabbbbbabbaaaaaabaaabbabbbbbbaabbbaaaabbabbbbbbbbbbbbaaabbbbbbbbbbbaaaaaabbbbbbbbbbba + abbbbaabbbbbbbbaaabaaaaaabbbbbbbbaaabaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbbabaaaababbbbbbbba + abbbbaabbbbbbbbaaabbaaaabbbbbbbbaaaabaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabbbbbbbba + abbbaaabbabbbbbaaabbaaaabbbbbbbbbaaabaabaabbbbbaaabbbbbbbbbbaaabbbbbbaaabbbbaabaabbbbbbbba + abbbaabbbbbbbbbaaabbaaaababbbbbbbaaabbbbbabbbbbbaaabbbbbbbbbaaabbbbbaaaaabbaaabaabbbbbbbba + abbbaabbabbbbbbaaaaaaaabbbbbbbbbbaaabbbbbbaaaaabaaaabbbbbbbaaaabbbbaaaaaaaaaaaaaabbbbbbbba + bbbbbabbbbbabbbaaaaaabaaaaaabbbbbaaabbbbbbaaaaaaaaaabbbbbbbaaaaaabbbaaabbbaaaaaaabbbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbaabbbbbbaaaaaaaaaabbbbbbbbaaaaaaabbbbbbbaaaabaabbbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbbbbbbbabaaabbbaaabbbaaaabbbbbbbbaaaaaaaabbbbbbbaaabaabbbbbbbba + abbbabbbbbbabbaaaaabbabaaabbbbbbbbbbaaabbbabbbbbbaaabbbbbbbbaaaaabaaaaaaabbaaaaaabbbbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaaaaaabbaaaabbaabbbbbbbbbbbbbbbbbbaaabbaabaaaaabbaaaaabbbbbbbba + abbbaababbaabbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaabbaababbbabbaaaabbbbbbabba + abbbaabbbbaabaaaaaaaaaaaaaaaabbbbbaaaaabbaabaaaabbbbbbbbbbbbbbbbbbaababbbabbaaaabbbbbbbbba + abbbaabbbbbbbbaaaaabbbbbbbbbbbbbbaabbbbbaabaaaaabbbbbbbbbbbbbbbbbbbabaabbabbaaaabbbbbbbbba + abbaaabbbbabbbaaaabbabbaabbaabbbbaabbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbaaaababbaaaabbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbaabbbaaaaaabbaaabbbbbbbaabbbbbbbbbbbaaaabbbaaaaabbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbaaabbbaaaaaaaaaabbbbbbaaabbbbbbbbbbbaaaabbbaaaabbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbaaaabbaaaaaabaaabbbbbbbabbbbbbbbbbbbaaaabbaaaaabbbbbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbbbbbbbaaaababaaabbaabbbbbbbbbbbbbbbbbbbaabbaabbaaaaabbbbbbbbbba + abbaabbbbabbbaaaabbaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbbbbbbbbbabaabbabbbaaaabbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbabbabbbbbbaaaaaababbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbabbbbbbaaaaaabbbbbbaabbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbabbbbbbabaaabbbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbabbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbabaaaabbbbbbbabbbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbabbabbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaaabbabaaaabbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbbabaaabbbbbbbbabbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaabbbbbbbba + ababbbbbabbaaaaabbbbbbabbabbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaabbbabbbba + ababbbbbbbbaaaaaaaaabaaaaabbabbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbbaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaaaaaabbbbbaaaabbbbbbbabbbbbbbbbbbbbbbbaabbbbbbaaabbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbabbbbbbbaaabbbbbbaabbabbbbbbbbbbbbaaabbbbbbaaabbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbabbbaaabbbbbbaaaaabbbbbbbbbbbbaaabbbbbbaaabbbaaaabbbbbbbba + abababbaabbaaaabbbbbbabbbbbbbbbbabbbaaaabbbbbaaaaabbbbbbbbbbbbaaabbbbbbaabbbbaaaaabbbbbbba + abbbabbaabaaaaabbaabbabbabbbbbbbabbbbaaaabbbbabbbabbbbabbbbbbbaababbbbbabbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaaaaaabbaabbbbaaaaabaabbbbabbbbaaabbbbbaababbbaabbbbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbabbabbbaaabbbaaaaaaaabbbbabbbbaaabbbbbaababbaaabbbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaabbbaaaaabababbbbbbbbaabbbbbbaabbbbaaabbbbbbaaaabbbbbbbba + aaaaababbbaaaaabbbbbbbbbbbbbbbbaaabbbaaaaabbaabbbbbbbbbabbbbbbbabbbbaaabbbbbbaaaabbbbabbba + aabbaaaaaaaaaaaaaabbaabbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbaaabbbbbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaaaaaabaaaabbbaaaaabbbbbbbbbbbababbbbbbaababbaaabbbbbaaaaabbbbbbbba + abbaaaaabaaaaabbbbbbbbbbabbaaaaaaaabbaaaaaabbbbbbbbbaaabbbbbbbaababbbaabbbbbaaaaabbbbbbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaaaabbbaaaaaaaabbbbbbaaabbbbbbbaaaabbbabbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbaaaaaabbaaaabbbbbaaaaaabbbaaaaaabbbbbbbaabbabbbbbabbbbabaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbabbbbbbbaaaabbbbbbbaabaaaaaaaaabbbbbbbbaabaabbbbbababbbbabbbbbbbbba + abbbbbbbbaaaabbbabbaabbbbbbbbbbaaaabbbbbbbaabaaaaaaaaabbbbbbbaaabbaaabbaabbabbbbbbaaabbbba + abbbbbbbbaaaabbbbbbaabbaaaaabbaaaaabbbbbbbabbaaabbbbabbbbbbbbbabbbbbbbbbabbabbbbbbbbbbbbba + abbbbbbbbaaaabbbbbbbbbbabbbbbbaaaabbbbbbbaabbaaaabbaabbbbbbbbaabbbbbbbbbabbaabbbbaaabbbbba + abbbbbbbaaaaabbbabbabbaabbbbbbaaaabbbbaaaaaaaaabaabaaabbbbbbbaabbbbbbbbbabbaabbbbbbbabbbba + ababaabbaaaaabbbbbbabbaabbabbbabbbbbbaaaabbbbbbbaaaaaabbbbbbbaabbbbbbbbabbbaaabbbbbbabbbba + abbbaabbaaaaabbaabbabbaabbbbbbabbbbbbaaaabbbbbbbaaaaabbbbbbbaabbbbbbbbbabbbaaaabbbbbabbbba + bbbbbabbaaaaabbaaaaabaabbbbbbbbbbbbbaabaabaaabaabaaaabbbbbbbaaabbbbbbbbabbbaaaaabbbbbbbbbb + bbbbbabbaaaaabbbbbabbbbbbbbbbbbbbaaaababbabaabbabaabaaabbbababbbbbbbbbaabbbaaaaabbbbbbbbbb + abbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbabaaaababbbbaaabbbabbbbbbbbbbbaabbbaaaaaabbbbbbbbb + aaabbbbbaaaabbbbbbbbbbbbbbbbaaaaaaaaababbabaabbabaabaaaabbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbb + babaaaaaaaaaabbbbbbbbbbbbaaaaaaaaaaaabbabbabaabababbaaaabbbbbbbbbbbbaaabbbbaaaaaaaabbbbbbb + bbbbbbbaaaaaabbbbbbbbbbaaaaaaaaaaaaaababbabaabbbbaabbbaaaaabbbbbbbbaaaabbbbaaaaaaaaaabbbbb + abbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaaaabbaababbababaaabbbaaaaabbbbbbbaaabbbbbaaaaaaaaaaabbbb + abbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaaaabbbaaaaabbabaaabbbaaaaabbbbbbaaaabbbbbaaaaaaaaaaaaabb + abbbbbbaaaaabbbbbaaaaaaaaaaaaaaaaaaaabbbbbaabbbbaaabbbbaaaabbbbbbaaaabbbbbaaaaabbaaaaaaaab + abbabbbaaaabbbbaaaaaaaaaaaaaaabaaaaaabbaabaaabbbaaabbbbaaaabbbbbbaaaabbbbbaaaaabbbbaaaaaaa + abbbbbbaaabbbbaaaaaaaaaaaaaaabbbaaaabbaaaaababbbaaabbbbaaaabbbbbaaaabbbbbbaaaaabbbbbaaaaaa + abbbbbbaaabbaaaaaaaaaaaaaaaabbbaaaaabbbaabaaabbbaaabbbbaaaabbbbaaaabbbbbbbaaaaabbbbaaaaaaa`, + map `abbabbbbaaabbbbbbbbaaaaabbbbbbbbbaaaabaabbbaabbbbbaaabbbbbaaaaabbbabbbbbbbbbbbbbaaabbbbbba + abbaabbbaaabbbbbbbbaaaaabbbbbbbbbaaaaaaabbbabbbbbbaaabbbbbbbbbabbbaaaaabbbbbbbbaaaabbbbbba + abbbaabbabbbbabbabbaaaaabbbbbbbaaaaaaaaabbbabbbbbaaabbbbbbbbbbaaaabaaaaaabbbbbbaaaabbbbbba + abbbaaabababbbbbabbaaaaabbbbbbaaaaaaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbaaaaabbbbbaaabbbabbba + abbbbababbbbbbbbbbbaaaabbbbbbaaaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbaaaabbbaaaabbbbbaabbbbabbba + abbbbbbabaabbbbbbbbaaaabbbbbbaaaaaaaaaaabbaabbbaaaabbbaaaaaaaaaaaaabbbbaaaabbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbaaaaabaaaaabaabbbbaaaabbbbaaaaaaaaaaaaabbbbaaabbbbaaabbbbbbba + abbbbbaaaabbaaaaabaaaaabbbbbbaaaabaaaaaaaaabbaaaaaabbbbaabbbbbaaaaaaabbbaaaabbbaaaabbbbbba + abbbbbbbaabbabbbbbbaaaabbbbbbbaaabaaaaaaaaabbaaaabbabbbaabbbbbaabaaaabbbaaaabbbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbaabbaaaabaaaabbbabbbbaaabaaabbbbaabaaaabbbbaaabbbaaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbabaaaaaaaaaaabbbbbbbabbbaaaabbaaabbaaaabbbbaaabbbaaabbbbbba + abbbbbbaaabbabbbbbaaaaabbbbbbbbabaaaaaaaaaabbbaaabaaabbaaaaaaaaaabaaaaabbbbbabbbbaabbbbbba + abbbbbbaaabaaaaabbaaaaaaaaaabbbaaaaaaaaaaaaaaaaaaaaabbbabaaaaaabaaaaaaaabbbbabbbbaabbbbbba + abbbbbbaabbbbbbbbbaaaaabbaabbbbbaaaaaaaaaaaaaaaaabaaaaabbbaaaaabaabaaaaaabbbbbbbbaabbbbbba + abbbbaaaabbbbbbbbaaaaabbbaabbbbbaaaaaaaaaaabbbbbbbbbbaabbbbbbbbbaabbaaaaaaaabbbbbaabbbbbba + abbbbaaaabbabbbbbaaaaabbbabbbbbbaaaaaabbbbbbbbbbbbbbbaabbbbbbbbbaabbbaaaaaaaabbbbbabbbbbba + abbbbbaaabbabbabbaaaaabbaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbbabbbbbba + abbbbaaaabbabbabbaaaabbbbabbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaabbbbbabbbbbba + abbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbabbbbbba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaabbbbbabbbbbbbbbbbbaaabbbbbaaaaabbbbbaaaaaabbbbabbbbbba + abbbbbaabbbbbbbbaaaaabbbaabbbbbbbbaabbbbaaabbbbbbbbbbaaaaaabbbbbaabbbbbaaaaaabbbbbabbbbbba + abbbbaaaaaaaaaaaaaaabbbaaabbbbbbbaaaabbbbaaabbbbbbbbaaaaaaaabbbaaabbbbbaaaaaaabbbbabbbbbba + abbbbbbabbbbbbbbaaaabbbaabbbbbbbbaaaabbbbaaabbbabbbbbabaaaaabbaaabbbbbabaaaaaabbbbabbbbbba + abbbbbaabbbbbbbbaaaabbbaaabbbabbbaaaabbbaaabbbaabbbbbbbbbaaabbaaabbbbbbbaaaaabbbbbabbbbbba + abbbbaabbbbbbbbbaaaaaaaaaaabbabbbaaaabbbaaaabbaabbbbbaaababaababaabbabbbaaaabbabbbabbbbbba + abbbbaabbbbbabbbaaaabbbbaaabbbbbbaaabababaaabaaabbbbbaaababaabaaaaabaabbbaaaabbbbbabbbbbbb + abbbaaaabbabaabaaaaabbbaaaabbbbbbaaabaaabbbaaaabbbbbbaaaaaaaabaaaaabaaabaaaaabbabbabbbabbb + abbbbaabbbbbabbaaaaaabaaabbbbbbbaaaabbaabbbaaaabbbbbbaaaaaabbabbaaabbbabbaaaabbabaabbbbbba + abbbbaabbbbbbbbaaaaaaaaaabbbbbbbaaabbbbabbbaaaabbbbbbaaaaaabbbbbaaaabbaaaaaaabbbbaabbbbbba + abbbbaabbbbbbbbaaabbaaaabbbbbbbbaaaabbbbbbbbaaabbbbbbaaaaaabbbbbaaabbbaaaaaaabbbbbabbbbbba + abbbaaabbabbbbbaaabbaaaabbbbbbbbaaaabbbbbbbbaaabbbbbbbbaaaabbbbaaaaabaaaaaaaabbbbbabbbbbba + abbbaabbbbbbbbbaaabbaaaababbbbbbaaabbbbbbbbbbbbbbbbbbbbbaaabbbabbaabbaaaaaaaabbbbbabbbbbba + abbbaabbabbbbbbaaaaaaaabbbbbbbbbaaabbbbbbbbabbbbbbbbbbbbaaaabbbbbbbbbbaaaaaaabbbbbabbbbbba + bbbbbabbbbbabbbaaaaaabaaaaaabbbaaaabaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbaaaababbbabbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbaabbbbbbbbabbbbbbabaaabbbbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbbbbaaaaaaaaaabbabaabbbbbbbbbbbaaabbbbbbbaaabbbaabbaabbbbbbbbba + abbbabbbbbbabbaaaaabbabaabbbbbbaaaabbbaaabbbbbaaaabbbbbbbbaaaabbbaaaaaaaaaaaababbbbbbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaaaabbaaaabbbbbaaabbbbaaabbbbbbbbaaaabbbbaaaaaaaaaaaaabbbabbbbbba + abbbaababbaabbaaaabbbbbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbbbbbaaaaaabaaaaabbbaaaaaabbbbbbbabba + abbbaabbbbaaaaaaaaaaaaaaaaaabbbbaababbbbaaaaaaaaaabbbbbbbbaaaaaaaabbbbbbbaaabaabbbbbbbbbba + abbbaabbbbbbbbaaaaabbbbbbbbbbbbbaabaabbbaaabbbbaaabbbbbbbbaaaaabaaabbabbbbaaaaabbbbbbbbbba + abbaaabbbbabbbaaaabbabbaabbabbbbbaaaabbbaabbbbbbaabbbbbbbbaaaaabaabbaaabbbaaaaabbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbbaaabbbabbbbbbbbabbbbbbbbbaaaabaabbaababbaaaaabbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaabbaababbbaabaaaaabbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbbbbaaaabbbaaabbabbbbbbbbbbbbbbbbbbaabaabbbabaaaaabbbbbbbbbba + abbaabbbbabbbaaaaabbbbbabbbbbbbbaaaabbaaababaaabbbbbbbbbbbbbbbbbbaaaaabbabaaaabbbbbbbbbbba + abbaabbbbabbbaaaaabaaaaaaaaabbbbaabbaaaabbbaaaaabbbbbbbbbbbbbbbbbbaaaabbabaaaabbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbabbbbaabbbaaaaabbbaaaabbbbbbaababbbbbbbbaaaabbbbaaaabbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbaaabbbaaaaaabaaaabbbbbaaabbbaabbbbbbaaaabbbaaaaabbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbbbbaaabbbaaaaaabaaaabbbbbbbabbbbbbbbbbbaaaabbbaaaaabbbbbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaabaabaaabaaabbbbbbbbbbbbbbbbbabaabbabbaaaaabbbbabbabbbba + abaabbbbbbbbaaaaabaaaaaaaaaaaabaaaaaaaaaabbaaabbbbbbbbbbbbbbbbbababbbbbbaaaaabbbbbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaaaabbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbbbbbbaaaaaabbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbbbbbba + ababbabbbbbaaaaabbbbbbbbbabbbbbbabaaabbbbbbbaabbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbabbbbbbbbba + ababbbbbabbaaaaabbbbbbbbbabbbbbbabaaabbbbbbaabbbbbbbbbbbbbbbbbaaaaaabbbaaaabbbbaabbbabbbba + ababbbbbbbbaaaaaaaaaaaaaaabbabbbabaaabbbbbbaabbbbbbbbbbbbbbbbbaaaaabbbbaaaabbbbaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaaaaabbbaaaaabbbbabaaabbbbbbbbbbbbbbbbaabbbbbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbabbbaaaabbbbbbbaabbbbbbbbbbbbbbbbbabbbbbbbaaaabbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbba + abababbaabbaaaabbbbbbabbbbbbbbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbabbbbbbaaaabbbaaaabbbabbbba + abbbabbaabaaaaabbbabbabbabbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaaaaaabbbbaaaaaaaabbbaabbbbbbbbbbbbbbbbaabbbbbbaaabbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbabbabbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbaaabbbbbbaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbabbbbbbbbbbbbaaabbbbbbaaabbbbaaaabbbbbbbba + aaaaababbbaaaaabbbbbbbbbbbbbbbbabbbaaabbbbbaaaaaabbbbbbbbbbbbaaabbbbbbaabbbbbaaaabbbabbbba + aabbaaaaaaaaaaaaaabbaabbbbbbbbbabbbaaaabbbbbabbaabbbbbabbbbbbaaabbbbaabbbbbbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaaaaaabaabbbaaaaabbbbabbaabbbbaaabbbbbaaabbbbaabbbbbbbaaaabbbbbbbba + abbaaaaabaaaaabbbbbbbbbbabbaaaaabbbbaaaaababbbbbabbbbaaabbbbbaaabbbaaabbbbbbaaaaabbbabbbba + abbbbbbbbaaaaabbaaaaaabbbbbbbbbaabbbaaaaaababbbbabbbbaabbbbbbaaabbbaaabbbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbaaaaabbbaabbbaaaaaabbabbbabbbbabbbbbbbaaabbbaaabbbbbbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbabbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbaaabbbaaabbaaabaaaaabbbbbbbba + abbbbbbbbaaaabbaabaaabbabbbbbbbaabbbaaaabbbbbbbbbbbbababbbbbbaaabbbaaabbbbbbaaaaabbbabbbba + abbbbbbbbaaaabbbbbbaabbaaaaabbaaabbbaaaabbbbbbbbbbbbababbbbbbaaabbbbaabbbbbbbaaaabbbbbbbba + abbbbbbbbaaaabbbabbabbbabbbbbbaaaabbbaaabbbbbbbbbbaaaaabbbbbaaaabbbbaabbbbabbaaaabbaabbbba + abbbbabbaaaaabbabbbabbbbbbbbbbaaaabbbbaaaaaaaaabaaaaaabbbbbbaaabbbbbabbabbbbbaaabbbbbbbbba + ababaabbaaaaabbabbbbbbabbbabbbaaaabbbaaabbbbbbbbaaaaabbbbbbbaaabbbbbabbabbabbaabbbbbbbbbba + abbbaabbaaaaabbaabbabbabbbbbbbaaaabbbaaaabbbbbbbaaaabbbbbbbbaabbbbbbbbbabbabbbbabaabbbbbba + bbbbbabbaaaaabbaaaaaabaabbbbbbaaaabbbabaaaaaabaaaaaaabbbbbbbaabbbbbbbbbabbaabbbbbbaaabbbba + bbbbbabbaaaaabbbbbaabbabbbaabaaaaabbbaabbabaabbaabbaabbbbbbbabbbbbbbbbbabbaabbbbbbbbbbbbba + abbbbbbbaaaabbbbbbbbbbabbbbbbaaaaabbbaaaabaaaabaabbaabbbbbbbabbbbbbbbbaabbaaabbbbbbbbbbbba + aaabbbbbaaaabbbbbbaabbabbbbbbbaaabbbbaababbaabbaaaaaabbbbbbaabbbbbbbbbaabbaaaabbbbbbabbbba + babaaaaaaaaaabbabbaabbabbbbbbaabbbbbbaaabbababbaaaaaabbbbbbaabbbbbbbbbaabbaaaaabbbbbabbbba + bbbbbbbaaaaabbaabaaaaaabbbbbbabbbbbbbaaaaabaabbbaaaaabbbbbbabbbbbbbbbaabbbaaaaabbbbbbbbbbb + abbbbbbaaaaabbbbbbabaaabbbbbbbbbbbbaabaaabababbbaaaaabbbbabbbbbbbbbbbaabbbaaaaaabbbbbbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaabaaaaaabbbbaabaabbbbaabbbbbbbbbaaabbbaaaaaaabbbbbbbbb + abbbabbaaaaabbbbbbbbbbbbbbbbbaaaaaaabbaaabababbbaaaaaaabbbbbbbbbbbbbaaabbbaaaaaaaabbbbbbbb + abbabbbaaaaabbabbbbbbbbbbbbaaaaaaaaabbbaabaaabbbaaaaaaabbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbb + abbbbbbaaaaabbabbabbbbbbbaaaaaaaaaaabbaaaaaaabbbaaabaaaaaabbbbbbbbaaaabbbbaaaaaaaaaaabbbbb + abbbbbbaaaaabbbbbaaaabaaaaaaaaaaaaaabbbaabaaabbbaaabaaaaaaabbbbbbbaaabbbbbaaaaaaaaaaaaabbb`, + map `abbabbbbaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbbbba + abbaabbbaaabbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbaabbabbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbba + abbbaabbabbbbabbabbaaaaabbbbbbbbbaaabbbbbbaaaaaaaaaabbbbaaaabbbbbbbbbbbbabbabbbaaabbbbbbba + abbbaaabababbbbbabbaaaaabbbbbbbbbaaabbaaaaaaaaaaaaaabbbaaaaaaaaaabbbbbbbaabaabbaaabbbbbbba + abbbbababbbbbbbbabbaaaabbbbbbbbbaaaaaaaaaaaaabbbaaaabbbaaaaaaaaaaabbbbbbaabbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaabbbbaaabbaaaaaaaabaaabbbbbbbbbbbbbaaaabbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbaaaaaaabaaaabbbbbaaabbbbaaaaaaaaaaaaaabbbbbbbbbbaaabbbbbbba + abbbbbaaaaabaaaaabbaaaabbbbbbaaaaaaaaabbbabbbbbbaaabbbbbaaaaaaaaaaaaaaabbbbbbbbbaabbbbbbba + abbbbbabaabbabbbbbbaaaabbbbbaaaaaaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbaaaaabbbbbbbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbaaaaaaaaaabbbbbbbbaaaabbbbbbbbbaaaaaabbbaaaaabbbbbbaaabbbbbbba + abbbbabbaabbbbbbbbaaaabbbbbaaaaababaabbbbbbbbbaaabbbbbbbbbbaaaaaabbbbbaaabbbbbbaaaabbbbbba + abbbbbbbaabbabbabbaaaaabbbbaaaaabaaaaabbaabbaaaaaabbaaaaaaabbbaaaabbbbaaaabbbbbbaaabbbbbba + abbbbbbaaabaaaaabbaaaaaababaaaabbaaaaaabaabaaaaaaabbaaabbbbbbbbaaaabbbaaaabbbaaaaaabbbbbba + abbbbbbaabbbbbbbbbaaaabbbbbaaaabaaaaaaaabbaaaaabbabbaaaabbbaabbaaaabbbaaaabbbbaaaaabbbbbba + abbbbaaaabbabbbbbaaaaabbbbbbbaabaaaaaaaabbbbbbbbbababaabbbbaabbaaaabbbbaaaabbbbbbabbbbbbba + abbbbaaaabbabbbbbaaaaabbbbbbbabaaaaabbbbaabbbbbbbaabbaabbbbaaabbaaaabbbbbaabbbbbbbbbbbbbba + abbbbbaaabbabbabbaaaaabbbbbbbabaaaaababaaabbaaabbaabbaabbbaaaabbaaaaabbbbbabbbbbbbbbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbaaaaaaaaaaabbaaaabaabbbbabaaaaaaaaaaaaaabbbbabbbbbbbbbbbbbbb + abbbbababbbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaabbbbbbbbbbaabbbabba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaaaaabbbbabaabbbbabbabbbbbaaaaaaaababbbbaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbabbbbbaaaaaaaaabbbbbbbbbbbbaabbbbbbbbabbbbaaaaaaaaaabbbbaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbaabbbbbbaaaaabbbbbbbbbbbbbbbaabbbbbbbbaabbbbbbaaaaaabbbbbaaabbbbbba + abbbbbaabbbbbbbbaaaabbbaabbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbbbbaabbbbbbbaaaaaabbbbaaabbbbbba + abbbbbabbbbbbbbbaaaabbbaaabbbbbbaabbbbbbbbbbbbbbbbbbbabbbbbbbaabbbbbbbbaaaaabbbbaaabbbabba + abbbbaabbbbbbbbbaaabbbaaaabbbbbbaabbbbbbabbbbbbbbbbbaaabbbbbbaaaabbbbaaaaaaabbbbaaabbbbbba + abbbbaabbbbbabbbaaaabbbbaaabbbbbaaabbbababbbbbbbbbbaaaaaabbbbaaaabbbbaaaaaaabbbbaaabbbbbbb + abbbaaaabbabaabaaaaabbbbaaabbbbaaaabbbaaabbbbbbbbbbaaaaaaabbbaabbbbbbaaaaaaabbbbaaabbbabbb + abbbbaabbbbbabbaaaaabbaaabbbbbbaaaaabbaaabbbbbbbbbaaaaaaaabbaaabbbbbbbaaaaaabbbbbaabbbbbba + abbbbaabbbbbbbbaaaaaaaaabbbbbbaaaaaabbaaabbbbabbbbbbbaaaaabbbabbbbbbbbaaaabbbbbbbaabbbbbba + abbbbaabbbbbbbbaaaaaaaaaabbbbbaaaaaabbaaaabbbabbbbbbaabaaaabbaabbbabbbbaaabbbbbbbaabbbbbba + abbbaaabbabbbbbaaabbaaaabbbbbbaaaaaabbaaaabbaabbbbbaaaabbbabaabaabaaabbaaaaababbaaabbbbbba + abbbaabbbbbbbbbaaabbbaaababbbbaaaaaabbaabaaaaabbbbbaaaabbbabaaaaaaaaabbaaaaababbaaabbbbbba + abbbaabbabbbbbbaaaabaaabbbbbbbaaaababaabbaaaabbbbbbaaaaaabaaaabaaabbabbaaaabbbbbaabbbbbbba + abbbbabbbbbabbbaaaaaaaaaabaabbaaaababbabbaaaabbbbbbaaaaaabbbbbbaaabaaabaaaabbbbbaabbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbaaaaabbbbbbbaaaabbbbbaaaaaabbbbbaaaabbaaaaaaabbbbbabbbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbbbaaaabbbbbbbbaaabbbbbbbaaaaabbbbaaaabbbaaaaaaabbbbbaabbbbbbba + abbbabbbbbbabbaaaaabbabaabbbbbaaaabbbbbbbbababbbbbbbbaaaaabbbaaaabbaaaaaaaabbbbbbaabbbbbba + abbbbbbbbbbbbbaaaabbaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbabbbaaaaaaabbabbbaabbbbbba + abbbabbabbaabbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaabaaabaabbbaabbbbbba + abbbaababbaaaaaaaaaaaaaaaaabbbaaabaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbaabaabbbabbbbbbba + abbbaababbbbbbaaaaabbbbbbbbbbaaaabaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbaaabbbbaabaabbbabbbbbbba + abbaaabbbbabbbaaaabbabbaabbbbaaaabbaaaabbbbaaaabbbbbbbbbaaaabbbbbaaaaabaaaaaaabbbabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaabbbbaabbbbbaaaabbbbbbbbaaaabbbbaaaaaaaaaaaaaabbbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaabbbbbaaaabbbaaabbbbbbbbaaaabbbbaaaabbbaaaabaabbbbbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaaabbbbbaaaaaaaaabbbbbbbbaaaaaaaabbbbbbbbaaabaabbbbbbbbbbba + abbaabbbbabbbaaaaabbbbbabbbbbbbaaabbbbbaaaaaaaaaabbbbbbbaaaaaaaaabbbbbbbaaaaaabbbbbbbbbbba + abbaabbbbabbbaaaaabaaaaaaaabbbbabaabbbbaabbbbbaaabbbbbbbaaaaabaaabaaaabbbaaaaabbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbabbbbbbbabbbbbbbbbaaaabbaabaaaabbbaaaabbbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbbbbaaabbabbbbbbabbaaaabbbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbbbabbbaababbbabbaaaabbbbbbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbbbaaaabbbaaabbbaabbbbbbbbbbbbbbbbbaabaabbabbaaaabbbbbbbbbbbba + abaabbbbbbbbaaaaabaaaaaaaaaaabaaaaabbbaaabbaaabbbbbbbbabbbbbbbbbaaaaababaaaaabbbbbbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbbbbbaabbaabbaaabbaaabbbbbbbbbbabbbbbbbbaaaabbbaaaaabbbbbbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbbbaaabbaabbaaabbaaabbbbbaaabbabbbbbbbbaaaabbbaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaabbbbbbbbbbbbbaabbbaaaaaaabbaaabbbbbaabbbbbbbbbabaaaaabbaaaaabbbabbbbbbbbba + ababbabbabbaaaaabbbbbbbbbbbbbaaabbbaaaaaabaaabbbbbbbbbbbbbbbbbbbaabaabbaaaabbbbaabbbabbbba + ababbbbbbbbaaaaaaaaaaaaaaabbbaaaabbabaaaabbabbbbbbbbbbbbbbbbbabaabbabbbaaaabbbbaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaabbbbaaaaaabaaabbaaabbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbbaaaaaababbbbaaabbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbbaaaaaaabbbabaaabbbbbbbbbbbbbbbbaaaaabbbaaaaabbbaaaabbbbbbbba + abababbabbbaaaabbbbbbabbbbbbbbaaaaaabbbbbbaabbbbbbbbbbbbbbbbbaaaaabbbaaaaabbbaaaabbbabbbba + abbbabbabbaaaaabbbabaabbabbbbbabaaaabbbbbaaabbbbbbbbbbbbbbbbaaaaaabbbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaaaabbbbbaaaabbbbbbaabbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbabbbbbbbaaabbbbbabaaabbbbbabbbbbbbbbabbbbbbbbaaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbabbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbba + aaaaababbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbaaaabbbabbbba + aabbaaaaaaaaaaaaaabbaabbbbbbbbbbaaaabaaaaaaabbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaaaaaabbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbaaaabbbbbbbba + abbaaaaabaaaaabbbbbbbbbbabbaabbbaaaaaabbbbaabbbbbbbbbbbbbbbbaabbbbbbbaabbbbbaaaaabbbabbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbbaaaaabbbbbbaababbbbbbbbbbbbaaabbbbbbbaabbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbaaaaabbbbbaaaabbbbbaaaaabbbbbbbbbbbbbaabbbbbbbaabbbbbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbabbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaabbbbabbbbbaaaaaaaaabbbbbbbba + abbbbbbbbaaaaabaaaaaabbabbbbbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbaaabbbbabbbbbbbbaaaaabbbabbbba + abbbbbbbbaaaabbbbbbaabbaaaaabbabbbaaabbbbbbbbbbbbbbaaaabbbbbaaabbbaaabbbbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbbbbabbbbbbbbbbaabbaaabbbbbbbbbabbbbaababbbbbaabbbbaaabbaaaabaaaaaabbbbbbba + abbbbabbaaaaabbbabbabbbbbbbbbbaabbbabaaaaaaaaaaaabbaabbbbbbbaabbbbaaabbbbbbbaaaaabbbbbbbba + abbbaabbaaaaabbbabbbbbabbbbbbbaabbbabaaabbbbbbbbbbbbbbbbbbbbaabbbbaaabbbbbbaaaaabbbbbbbbba + abbbaabbaaaaabbaabbbbbabbbbbbbaabbaabaaabbbbbbbbbbbbbbbbbbbbaabbbbaaabbbbbbbaaaabbaabbbbba + bbbbbabbaaaaabbaaaaaabaabbabbbaabbbaabbaaaaaabaaabbabbbbbbbbaabbbbaaabbbbbbbaaaabbaabbbbba + bbbbbabbaaaaabbbbbbabbabbaaabaaabbbaaaabaabaabbaabbababbbbaaaabbbbbabbabbabbaaaabbbbbbbbba + abbbbbbbaaaabbbbbbbbbbabbbbbbaaabbbbaababbababbaaaaabbbbbbbaaabbbbbbbbabbbbbaaaabaaabbbbba + aaabbbbbaaaabbbbbbaabbabbbbbbbaaabbbbaababbaabbaaaaabbbbbbbaaabbbbbbbbabbabbbbabbbbaabbbba + babaaaaaaaaaabbabbaabbabbbbbbaaaabbbbaaabbababbaaaaabbbbbbbaabbbbbbbbbabbabbbbabbbbaabbbba + bbbbbbbaaaaabbaabaaaaaabbbbbbaaaabbbbaaaabbabbbbaaaabbbbbbbaabbbbbbbbbabbaabbbbbbbbbbbbbba + abbbbbbaaaaabbbbbbabaaaaaaabbaaaabbbbbaaaaababbbaaaabbbbbbaabbbbbbbbbbabbaaabbbbbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbaaaaabbbbaaaaaaabbbbaaaabbbbbbaabbbbbbbbbaabbaaabbbbbbbaabbbbb + abbbbbbaaaaabbbbbbbbbabbbbbbbaaaabbbbaaaaaababbbaaaabbbbbbaabbbbbbbbbaabbaaaabbbbbbabbbbba + abbabbbaaaabbbabbbbbbabbbbbbbaaaabbbbaaaaaaabbbbaaabbbbbbbabbbbbbbbbbaabbaaaaabbbbbbbbbbba + abbbbbbaaaabbbabbabbbabbbbbbaaaabbbbbaaaaaaaabbbaaaaabbbbbaabbbbbbbbaabbbaaaaaabbbbbbbbbbb + abbbbbbaaaabbbabbaaaaabbabbbaaaabbbaaaaaabaaabbbaaaaabbaaabbbbbbbbbbaabbbaaaaaabbbbbbbaabb`, + map `abbabbbbaaabbbbbbbbaaaaabbbbbabbabbbbbbabbbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbaabbbbbbba + abbaabbbaaabbbbbbbbaaaaabbbbbabbbbbbbbbabbbbbbbbbbbbbbbbbbbaaaabbbabbbbbabbbbbbbaabbbbbbba + abbbaabbabbbbabbabbaaaaabbbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbabaabbbabaaababbaabbbaabbbbbbba + abbbaaabababbbbbabbaaaaabaaaaabbbbbbbbbaaaaaaaaaaaabbbbbbbbbbaabbaaaaaaaaaaaaabaaabbbbbbba + abbbbababbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaaabbbbabbbbbbabbaaaaabbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbaaaaaaaabaaaaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbaabaabbbbbbbbaaaabbbbbbbbbaaabbbbbbaaaaaaaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbaaaaabaaaaabaaaaabbbbbbbbaabbbbbbbaaaaaaaaaaabbbaaaaaabaaabbbbbbbbabbbbbbbaaabbbbbba + abbbbbbbaabbabbbbbaaaaabbbbbbbbaabbbaaaaaaaaaaaaaaabbaaaaaaaaaaabbbbbbbbabbabbbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaabbaaabbbaaaaaabbbaaabbbbbbbbbbbbbbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaaabbbbbaaabbbaaaaaaabbaaaaabbbbbbbbbbbbbaaabbbabba + abbbbbbbaabbabbabbaaaabbbbbbbaaaaaaaaaaaabbbbbaaaabbbaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbba + abbbbbbaaabaaaaabbaaaaabbbbaaaaaaaaabbbabbbbbbaaabbbbbaaaaaaabbbbaaaaabbbaaaaaaaaabbbbbbba + abbbbbaaabbbbbbbbbaaaabbbbbaaaaaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbaaaaaabbbaaaaaaaabbbbbbba + abbbbaaaabbabbbbbaaaabbbbbaaaaaaaaaabbbbbbbbbaaabbbbbbbbbaabaaabbbbaaaabbbbbaaabaabbbbabba + abbbbbaaabbabbbbbaaaabbbbbaaaaaaaaabbbbbbbbbaaaabbbbbbbabaaaaaaabbbbaaaabbbbbbbbbabbbbabba + abbbbbbaabbabbabbaaaabbbbaaaaababaabbbaabbaaaaaabbbaaaaaaabaaaaaabbbaaaabbbbbabbbbbbbbabba + abbbbaaaabbabbabbaaaabbbbaaaaababaaaabaaabaaaaabbbaaaabbbbbbaaaabbbbaaaabbbbbaaababbbbbbba + abbbbababbbbbbbbbaaaabbbbbaaabaaaaaaaaabaaaaaababbaaaaabbbbbbaaaabbbbaaaabbbbbbaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbaabaaaaaaaabbbbbabbbaaabaabbbbbabbbaaabbbbaaaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbbbbaabaaaaaabbaabbbbbbbabbbaabbbbbabbbaaaabbbbbaaabbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbbbbabbaaaabbbaaabbbabbbaabbaabbbbaaaabaaaaabbbbaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbabbbbaaaaaaaaaaabbbaaabbabbbbbabbbaaaabbaaaaabbbbaabbbbaaaaabbaaaba + abbbbbabbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaabaaaaaaaabbaaabaaaaaabbaaaaaababaabbbbbaaabbbbaaba + abbbbaabbbbbbbbbaaabbbbbbbbbaaaaaaaaaaaaaaabbbaaaaaaabaabbaaaabaaaaaaaaaaabbbbbaaabbbbbbbb + abbbbaabbbbbabbbaaaabbbbbbbbaaaaaaaaaaaabbbbbbbbbaabbbbbbbbababaaaaaaaaaaabbbbbaaabbbbbbba + abbbaaaabbabaabaaaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbabbbbbbbbaabbaabbaaaaaaabbbbaaaaabbbbbba + abbbbaabbbbbabbaaaaabbaabbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbaabbbbbbbaaaaaabbbbaaaabbbbbbba + abbbbaabbbbbbbbaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbaaabbbbbbba + abbbbaabbbbbbbbaaaaaaaaabbbbbbaabbbbbbabbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaabbbbaaabbbbbbba + abbbaaabbabbbbbaaabbaaaabbbbbbaaabbbbbabbbbbbbbbbbbaaababbbaaaaaabbaaaaaaaabbbbaaabbbbbbba + abbbaabbbbbbbbbaaabbaaaabbbbbbaaabbbaaabbbbbbbbbbabaaaabbbbaabbbabbaaaaaaaabbbbaaabbbbbbba + abbbaabbabbbbbbaaaabaaabbbbbbaaaaabbaaaabbbbbbbbaaaaaaaabbbaaabbabbbaaaaaabbbbbaaabbbbbbba + abbbbabbbbbabbbaaaaaabaaababbaaaaabbaaaabbbabbbbaabaaaaabbbaabbbbbbbbaaaabbabbbaaabbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbaaaaaabbaaaabbbaabbbbbaaaabbabbabbbbbaabbaaaaababbbaaabbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbaaaaaabbabaabbaabbbbbaaababbabbababbaabbbaaaaabbabbaaabbbbbbba + abbbabbbbbbabbaaaaabbabbabbbaaaaaabbabaaabaabbbbbaaaaabbaabaaaaabaabbaaaaabbabaaaabbbbbbba + abbbbbbbbbbbbbaaaabbaaaaaabbaaaaabababbaaaaabbbbbaaabaabaaaaaaaabbbbbaaaaabbbbaaaabbbbbbba + abbbabbabbaabbaaaabbbbbbbbbbbaaaabbbabbbaaaabbbbbaaaaaabbaabbaaabbaabaaaaabbbbaaaabbbbbbba + abbbaababbaaaaaaaaaaaaaaaabbbaaaabbbabbbaaaabbbbbbaaaaabbbbbbaaaabaabaaaaabbabaababbbbbbba + abbbaababbabbbaaaaabbbbbbbbbbaaaabbbbbbbaaaabbbbbbaaaaabbbbbaaaabbaaaaaaaabbbbbbbabbbbbbba + abbaaabbbbabbbaaaabbabbaabbbbaaabbbbbbbbbaabbbbbbbbaaaaabbbaaaaabaaaaaaaaabbbbbaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbaabbbbbbbbaaaabbbaaaaabaaaaaaaaababbbaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbaaaaaaaaaaababbbbbbbbbbbbbaabbbbbbbbbbbbbbbbabbaabbaabbbbbbbba + abbaabbbbbabbaaaaabbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbaaabbbbaaaaabbbababbbbbbba + abbaabbbbbbbbaaaaabaaaaabbbaaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbaaaaabaaaaaaabbbbbbbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbaaaabbaaabbbbbaaaabbbbbbbbbaaabbbbaaaaaabbaaabbabbbbabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbaaabbbabaabbbbaaabbbbbbbbbaaabbbbaaaaabbaaaaababbbbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbbbbbaaaaabbbbbbbbbbaaaaaabbbbbbbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbaaaabbbbaaaaaaaaaabbbbbbbaaaaaaaababbbbbbbaaaaabbbbbabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaaaabbbaaabbbbaaaaaaaaaabbbbbbbaaaaabbaaabaaabbbaaaaabbbabbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbabbbbbbbaabbbbbbbbaaaabbaabaaaaabbaaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbbbbbaaabbbabbbbbbbaabbbbbbbbbaaabbaabbaababbaaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbbbbbbbaabbaabaabbbabaaaaabbbabbbbbbbbba + ababbabbabbaaaaabbbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbabaaabbabaaaaabbbaabbbabbbba + ababbbbbabbaaaaaaaaaaaaaaabbbaaaaabbbaabbbbabbbbbbbbbbbbbbbbbbbaaaabbabaaaabbbbaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaabbbaaaaabbbaaabbababbbbbbbaabbbbbbbbbbaaaabbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbaabbaabbaaabbabababbbbaabbabbbbbbbbaaaabbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbaabbaaabaaabbabbbbbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbaaabbbbbbbba + abababaabbbaaaabbbbbbabbbbbaaabbbaaaaaabbaabbbbbbbbabbbbbbbbbbaabbabbaaaaabbbaaaabbbabbbba + abbbabbabbaaaaabbbabaabbbbbaaaabbaaaaaabbaaabbbbbbbabbbbbbbbababbbbbbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbabbbaaaababaaaabbaabbbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbbbbbbaaaaabbaabbbaaabbbbbbbbbbbbbbbbaaabbbbbaaaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbaaaaaabaabbbabbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbaaaabbbbbbbba + abbabbabbbaaaaabbbbbbbbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbbaaaabbbbbaaaabbbabbbba + aabbbaaaaaaaaaaaaabbabbbbbbbbabaaabbbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbaaaabbbbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaaaabbabaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbaaaabbbabbbba + abbaaaaabaaaaabbbbbbbbbbabbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbaaaabbbabbbba + abbbbbbbbaaaaabbaaaaaababbbbbbbaaabbbbbbaaabbbbabbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbba + abbbbbbbbaaaaabbbbbbbbbaaaabbbaaaabbbbbababbbbbabbbbbbbbbbbaabbbbbbaaaabbbbbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbabbbbbbaaaaabbaaaaabbbbbbbbbbbbbbbbbabbbbbbbaaaabbaaaaaaabbbbbbbbba + abbbbabbbaaaaabaaabbabbabbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbaaabbbbbaaaaabbaabbbba + abbbbbbbbaaaabbbbbbaabaaaaaabbbaaaaabbbbbbbbbbbbabbbbbbbbbbaaabbbbbbaabbbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbbbbabbbbbbbbbbbaaaaabbbbbbbbbaaaabbbbbbbbbaaabbbbbbaaabbaaabaaaaaaabbbbbba + abbbbabbaaaaabbbabbabbbbbbbbbbbbaaaabbaaaaaaaaabaabbbbbbbbaaabbbbbbaabbbbbbbaaaaabbbbbbbba + abbbaabbaaaaabbbabbabbabbbbbbbbbaaaabaaabbbbbbbbabbbbbbbbbbaabbbbabbbbbbbbbaaaaabbbbbbbbba + abbbaabbaaaaabbaabbbbbabbbbbbbbbbaaabaaaabbbbbbbabbbaabbbbaaabbbbaaabbbbabaaaaaabbaabbbbba + bbbbbabbaaaaabbaaaaaabaababbbbbbbaaabbbaaaaaabaaabbaaabbbbbaaabbbaaabbbbbbbbaaaabbaabbbbba + bbbbbabbaaaaabbbbbaabbabbaabbabbbaaabbabbabaabbabbbabbbbbbbaaaabbaabbbbbbbbbaaaabbbbbbbbba + abbbbbbbaaaabbbbbbbbbbabbbbbbaabbbaabbbaabaaaababbbabbbbbbbaaaabbaabbbbbbbbaaaaabaaabbbbba + aaabbbbbaaaabbbbbbaabbabbbbbbbbbbbaabbababbaaababbbbbbbbbbaaaabbbaaabbbbbbbaaaabbbbaabbbba + babaaaaaaaaaabbbbbaabbabbbbbbaabbbaaabaabbababbabbbbbbbbbbaaabbbbaaabbbbbbbaaaabbbbaabbbba + bbbbbbbaaaaaabaabaaaaaabbbbbbabbbaaaabaaabbaaababbbbabbbbbaaabbbbaaabbbbbabaaaabbbbabbbbba + abbbbbbaaaaabbbbbbabaaaaaaabbaabbbaaabaaaaaaabbabaaaabbbbbaabbbbbaabbabbbbbbaabbbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbaabbbaaaaaaabaaabbaaaaabbbbbaaababbbaabbabbabbbabbbbbbbbbbbbb + abbbbbbaaaaabbbbbbbbbabbbbbbbaabbbbaabaaaabaabbbaaaabbbbbaabbbbbbbbbbabbabbbabbbbbbbbbbbba + abbabbbaaaaabbabbbbbbabbbbbbbaaabbbbbaaaabaaabbbaaabbbbbbaaabbbbbbbbbabbaabbbbbbbbbbbbbbba + abbbbbbaaaabbbabbabbbabbbbbbaaaabbbbbaaaaabaabbbaaabbbbbbaabbbbbbbbbbabbaaabbbbbbbbbbbbbbb + abbbbbbaaaabbbabbaaaaabaabbbaaaaabbbbaaaabababbbaaabbbbbbabbbbbbbbbbaabbaaabbbbbbbbabbaabb`, + map `abbaabbbaaabbbbbbbbaaaaabbbbbabbabbbbbbabbbbbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbaaabbbbbba + abbabbbbababbbbbbbbaaaaabbbbbabbbbbbbbbabbbbbbbbbbbbbbbbbbbaaaabbbabbbbbabbbbbbbaabbbbbbba + abbbaabbabbbbabbabbaaaaabbbbbabbbbbbbbbbbbaaabbbbbbbbbbbbbbabaabbbabaaababbaabbbaabbbbbbba + abbbaaabababbabbabbaaaaabaaaaabbbbbbbbbaaaaaaaaaaaabbbbbbbbbbaabbaaaaaaaaaaaaabaaabbbbbbba + abbbbababbbbbbbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaaabbbbabbbbbbabbaaaaaabaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbaaaaaaaabaaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbaabaabbbbbbbbaaaabbbbbbbbbaaabbbbbbaaaaaaaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbaaaaabaaaaabaaaaabbbbbbbbaabbbbbbbaaaaaaaaaaabbbaaaaaabaaabbbbbbbbabbbbbbbaaabbbbbba + abbbbbbbaabbabbbbbaaaaabbbbbbbbaabbbaaaaaaaaaaaaaaabbaaaaaaaaaaabbbbbbbbabbbbbbbaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaabbaaabbbaaaaaabbbaaabbbbbbbbbbbbbbaaaaabbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaaabbbbbaaabbbaaaaaaabbaaaaabbbbbbbbbbbbbaaabbbabba + abbabbbaaabbabbbbbaaaabbbbbbbaaaaaaaaaaaabbbbbaaaabbbaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbba + abbbbbbaaabaaaaabbaaaaabbbbaaaaaaaaabbbabbbbbbaaabbbbbbaaaaaabbbbaaaaabbbaaaaaaabaabbbbbba + abbbbbbaabbbbbbbbbaaaabbbbbaaaaaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbaaaaaabbbaaaaaabaabbbbbba + abbbbbbaabbabbbbbaaaabbbbbaaaaaaaaaabbbbbbbbaaaabbbbbbbbbaaaaaabbbbaaaabbbbbaaaababbbbabba + abbbbbbaabbabbbbbaaaabbbbbaaaaaaaaabbbbbbbbbaaaabbbbbbbbbaaaaaaabbbbaaaabbbbaabbbabbbbabba + abbbbbbaabbabbabbaaaabbbbaaaaaaabaabbbaabbaaaaaabbbaaaaaaabaaaaaabbbaaaabbbbbabbbbbbbbabba + abbbbbbaabbabbabbaaaabbbbaaaaaaabaaaabaaabaaaaabbbaaaabbbbbbaaaabbbbaaaabbbbbabbbbbbbbabba + abbbbabaabbbbbbbbaaaabbbbbaaabaabaaaaaabbaaaaababbaaabbbbbbbbaaaabbbbaaaabbbbbbaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbaabaabaaaaabbbbbabbbaaaaaabbbbbabbbaaabbbbaaaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbbbbaabaaaaaaabaabbbabbbaabbabbbbbbaabbaaaabbbbbaaabbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbbbbabbaaaaaabaaabbbabbbaabbaabbbbaaaabaaaaabbbbaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaabbbaaabbabbbaaabbaaaaabbaaaaabbbbaabbbbaaaaabbaaaba + abbbbbabbbbbbbbbaaaabbbbbbbbaaaaaaaaaaabbaaaaaaaabbaaabaaaaaabbaaaaaababaabbbbbaaabbbbaaba + abbbbaabbbbbbbbbaaabbbbbbbbbaaaaaaaaaaaaaaaabbaaaaaaabaabbaaaabaaaaaaaaaaabbbbbaaaabbbbbbb + abbbbaabbbbbabbbaaaabbbbbbbbaaaaaaaaaaabbbbbbbbbbaabbbbbbbbababaaaaaaaaaaabbbbbaaaabbbbbba + abbbaaaabbabaabaaaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbabbbbbbbbaabbaabbaaaaaaabbbbbaaaabbbbbba + abbbbaabbbbbabbaaaaabbaabbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbaabbbbbbbaaaaaabbbbaaaaabbbbbba + abbbbaabbbbbbbbaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaabbbbaaaabbbbbba + abbbbaabbbbbbbbaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaabbbbaaabbbbbbba + abbbaaabbabbbbbaaabbaaaabbbbbbaaabbbbaabbbbbbbbbbbbaaababbbaaaaaabbaaaaaaaabbbbaaabbbbbbba + abbbaabbbbbbbbbaaabbaaaabbbbbbaaabbbaaaabbbbbbbbbabaaaabbbbaabbbbbbbaaaaaaabbbbaaabbbbbbba + abbbaabbabbbbbbaaaabaaabbbbbbaaaaabbaaaabbbbbbbbaaaaaaabbbbaaabbabbbaaaaaabbbbbaaabbbbbbba + abbbbabbbbbabbbaaaaaabaaababbaaaaabbaaaabbbaabbbaabaaaabbbbaabbbbbbbaaaabbbabbbaaabbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbaaaaaabbaaaabbbaabbbbbaaaabbabbabbbbbaabbaaaaababbbaabbbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbaaaaabbaaaaabbbabbbbbaaababaabbababbaabbbaaaaabbabbaaabbbbbbba + abbbabbbbbbabbaaaaabbabbabbbaaaaaabaabaaabaabbbbbaaaaabbaabaaaaabaabbaaaaabbabbaaaabbbbbba + abbbbbbbbbbbbbaaaabbaaaaaabbaaaaabababbaaaaabbbbbaaabaabaaaaaaaabbbbbaaaaabbbbaaaaabbbbbba + abbbabbabbaabbaaaabbbbbbbbbbbaaaabbbabbbaaaabbbbbaaaaaabbaabbaaabbaabaaaaabbbbaaaaabbbbbba + abbbaababbaaaaaaaaaaaaaaaabbbaaaabbbbbbbaaaabbbbbbaaaaabbbbbbaaabbaaaaaaaabbabaababbbbbbba + abbaaababbabbbaaaaabbbbbbbbbbaaaabbbbbbbaaaabbbbbbaaaaabbbbbaaaabbaaaaaaaabbbbbbbabbbbbbba + abbaaabbbbabbbaaaabbabbaabbbbaaabbbbbbbbbaaabbbbbbbaaaaabbbaaaaabaaaaaaaaabbbbbbaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbbabbbbbbbbaaaabbbaaaaabbaaaaaaaabaabbaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbaaaaaaaaaaababbbbbbbbbbbbbaabbbbbbbbbbbbbbbaabbaabbaabbbbbbbba + abbaabbbbaabbaaaaabbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbaaabbbbaaaaabbbababbbbbbba + abbaabbbbabbbaaaaabaaaaabbbaaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbaaaabaaaaaaabbbbabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbaaaabbaaabbbbbaaabbbbbbbbbbaaabbbbaaaaaaaaaaabbabbbbabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbbaaabbbabaabbbbaaabbbbbbbbbaaabbbbaaaaabbaaaabbabbbbbbbbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbbbbbaaaaabbbbbbbbbbaaaaaabbbbbbbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbbbaaaabbbbaaaaaaaaaabbbbbbbaaaaaaaababbbbbbbaaaaabbbbbabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaaaabbbaaabbbbaaaaaaaaaabbbbbbbaaaaabbaaabaaabbbaaaaabbbabbbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbabbbbbbaaabbbbbbbbaaaabbaabaaaaabbaaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbbbbbaaabbbabbbbbbbbabbbbbbbbbaaabbaabbabbabbaaaaabbbbbbbbbbbbba + ababbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbaabbaabaabbbabaaaaabbbabbbbbbbbba + ababbabbabbaaaaabbbbbbbbbbbbbbaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbabaaabbabaaaaabbbaabbbabbbba + ababbbbbabbaaaaaaaaaaaaaaabbbaaaaabbaabbbbbababbbbbbbbbbbbbbbbbaaaabbabaaaabbbbaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaabbaaaaaabaaabbbaaababbbbbaabbbbbbbbbbaaaabbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbaabbaabbaaabbaaababbbbbabbabbbbbbbbaaaabbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbaabbaaabaabbbaaabbbbbbbbbbbbbbbbbbbaaaabbbaaaabbbbaaabbbbbbbba + abababaabbbaaaabbbbbbabbbbbaaabbaaaaaaabbaaabbbbbbbabbbbbbbbbbaabbabbaaaaabbbaaaabbbabbbba + abbbabbabbaaaaabbbabaabbbbbaaaabbaaaaaabbaaabbbbbbbbbbbbbbbbababbbbbbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbabbbaaaaaabaaaabbaaabbbbbbbbbbbbbbbbaaabbbbbbaaaabbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbbbbbbaaaaabbaaabbababbbbbbbbbbbbbbbbaaabbbbbaaaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbbaaaaaabaabbbababbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbaaaabbbbbbbba + abbabbabbbaaaaabbbbbbbbbbbbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbbaaaaabbbbaaaabbbbbaaaabbbabbbba + aabbbaaaaaaaaaaaaabbabbbbbbbbabaaabbbbbbbaabbbbbbbbbbbbbbbbaaaaaabbbaaaabbbbbaaabbbbabbbba + abbaabbbbbaaaabbbaaaaaaaaaabbabaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbaaaabbbbbbbba + abbaaaaabaaaaabbbbbbbbbbabbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaaaababbbbbbbaaabbbbbbaaabbbbabbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbaaaabbbaaaabbbbbbbabbbbbabbbbbbbbbbbaabbbbbbaaaabbbbbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbabbbbbbaaaaabbaaaaabbbbbbbbbbbbbbbbbabbbbbbbaaaabbaaaaaaabbbbbbbbba + abbbbabbbaaaaabaaaaaabbabbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbaabbbbbbaaabbbbbaaaaaabaabbbba + abbbbbbbbaaaabbbbbbaabbaaaaabbbaaaaabbbbbbbbbbbbabbbbbbbbbbaaabbbbbbaabbbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbbbbbbbbaaabbbbbbaaabbaaabaaaaaaabbbbbba + abbbbbbbbaaaabbbabbabbbbbbbbbbbbaaaabbaaaaaaaaababbbbbbbbbaaabbbbbbaabbbbbbbaaaaabbbbbbbba + abbbbabbaaaaabbbabbabbbbbbbbbbbbaaaabaaabbbbbbbbabbbbbbbbbbaabbbbabbbbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbaabbabbabbbbbbbbbbaaabaaaabbbbbbbabbaabbbbbaaabbbbaaabbbbaaaaaaaabbaabbbbba + bbbbbabbaaaaabbaaaaaabaababbbbbbbaaabbbaaaaaabaaabbaabbbbbaaaabbbaabbbbbbbbbaaaabbaabbbbba + bbbbbabbaaaaabbbbbbbbbabbaabbabbbaaabbabbabaabbabbbaaabbbbbaaabbbaabbbbbbbbbaaaabbbabbbbba + abbbbbbbaaaabbbbbbbbbbabbbbbbaabbbaabbbaababaababbbabbbbbbaaaabbbaabbbbbbbbaaaaabbaabbbbba + aaabbbbbaaaabbbbbbaabbabbbbbbbbbbbaabbababbaaababbbbbbbbbbaaabbbbaaabbbbbbbaaaabbbbaabbbba + babaaaaaaaaaabbbbbaabbabbbbbbaabbbaaabaabbababbabbbbbbbbbbaaabbbbaaabbbbbbbaaaaabbbaabbbba + bbbbbbbbaaaaabaabaaaaaabbbbbbabbbaaaabaaabbaaababbbbabbbbbaaaabbbaaabbbbbabaaaabbbbbabbbba + abbbbbbaaaaabbbbbbabaaaaaaabaaabbbaaabaaaaaaabbabaaaabbbbbaaabbbbaabbabbbbbbaababbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbaabbbaaaaaaabaaabbaaaaabbbbbaaababbbaabbabbabbbabbbbbbabbbbbb + abbbbbbaaaaabbabbbabbabbbbbbbaabbbbaabaaaabaabbbaaaabbbbbaabbbbbbabbbabbabbbabbbbbbbbbbbba + abbabbbaaaabbbabbaabbabbbbbbbaaabbbbbaaaabaaabbbaaabbbbbbaaabbbbbbbbbabbaabbbbbbbbbbbbbbba + abbbbbbaaaabbbabbabbbbbbbbbbaaaabbbbbaaaaabaabbbaaabbbbbbaabbbbbbbbbbabbaaabbbbbbbbbbbbbba + abbbbbbaaaabbbabbaaaaabaabbbaaaaabbbbaaaabababbbaaabbbbbbabbbbbbbbbbaabbaaabbbbbbbbabbaabb`, + map `abbaabbbaaabbbbbabbbaaaabbbbbabbabbbbbbaaaabbbbbaabbabbabbbaaaabbbbbbbbbbbbbbbbbaabbbbbbba + abbabbbbababbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaabbabbbbabbabbaaaaabbbbbabbabbbbbbaaabbbbbbabbbbbbabbbaaaabbbbbaabbaabaabbbaabbbbbbba + abbbaaabababbabbabbaaaaabaaaaaaaabbbbbbabbbbbbbbaaaabbbabbbaaaabbbaaaaaaaaaaabbaaabbbbbbba + abbbbababbbbbbbbabbaaaabbbbbbbbbabbbbbabbbbbbbbbbbbbbbbbbbbaaaabbbbbbabbaabaabbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbabbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbaabaabbbbbbbbaaaabbbbaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbaaaaabaaaaabaaaaabbabbbbbbbbbbaaaaaaaaaaaaaaabbbbaabbbbabbbbbbaabbabbbbbbbaaabbbbbba + abbbbbbbaabbabbbbbaaaaabbabbbbbbbaaaaaaaabaaaaaaaaabaaaaaabbbbbbbbbbaaaaabaabbbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaaabbbbbbaaaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbababbbbbaaaaaaaaaaabaaaaaaabaaaabbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbaaabbabbbbbaaaabbbbbbbbaabbbbbbaaaaaaaaaaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbaaabaaaaabbaaaaabbbabbbaabbaaaaaaaaaaaaaaabbbaaaaaabbbaabbbbbbaaaaaaaaaaaaaabbbbbba + abbbbbbaabbbbbbbbbaaaabbbbbbbaaaaaaaaaaaaaaabbaaabbbaaaaaabbaaaabbbbbbbaaaaaaaaaaabbbbbbba + abbbbbbaabbabbbbbaaaaabbbbbbaaaaaaaaaaaaaaabbbaabbbbaaaaaabbaaaaaaabbbbbabaabbaaaabbbbbbba + abbbbbbaabbabbbbbaaaabbbbbbaaaaaaaabaaabbbbbbaaabbbbbaaaaaabbbbaaaaaabbbbbaaabbbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbaaaaaaaaabbbabbbbbbaabbbbbbaabaaaaabbaaaaaabbbbbaaabbbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbaaaaaaaaabbbabbbbbaaabbbbbbbbbaaaaabbbaaaaaabbbbbaaabbbabbbbbbba + abbbbabaabbbbbbbbaaabbbbaaaaaaaaaabbbbbbbbbaaaabbbbbbbbbaaaaaabbbbaaaaabbbbaabbaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaabbbbabbbbaaabbbbbbbbbbaaaaaabbbbaaaaabbbbbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbaaaaaaabaabbbbabbaaaaabbbbaaaaaabaaaaaabbbbaaaabbbbbbbbaaabbbbbbba + abbbbaaaaaaaaaaaaaaabbbbaaaaaabbaaabbaabbaaaabbbbaaaaabbbbbaaaabbbbaaaaabbbbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbbaaaaaabaaaaaabbbaaaabbbbaaabbbbabbbaaabbbbaaaaabbbbbbaaaaabbbbbba + abbbbbabbbbbbbbbaaabbbbbbbaaaaabaaaaabbbaaabbbabaaaabbbbabbbaaaabbbbaaaaabbbbbbaaabbbbbbba + abbbbaabbbbbbbbbaaabbbbbbbabaaaaaaabababbbabbbabbbabbbbbaaabbaaaabbbbbaaabbbbbbaaabbbbbbba + abbbbaabbbbbabbbaaaabbbbbbbaaaaaaaaabaabbbabbbaabbabbbbaaaaaaaaaaabbbbbaabbbbbbaaaabbbbbba + abbbaaaabbabaabaaaaabbbbbbbaaaaaaaaaababbaabbbabbbaaaabaaaaaaaaaaaabbbbaabbbbbbaaaabbbbbba + abbbbaabbbbbabbaaaaabbbbbbbaaaaaaaaaaabbaaaaaaabbbbaaaaaaaaaaaaaaaaababaabbbbaaaaaabbbbbba + abbbbaabbbbbbbbaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaabaaaaaaabaabbbbbaaaaaaaaabbbbbbaaaaabbbbbba + abbbbaabbbbbbbbaaabaaaaabbbaaaaaaaaaaabbaabbbbbbaaabbbbbbaabbbbabaaaaaaaabbbbbaaaaabbbbbba + abbbaaabbbbbbbbaaabbaaaabbbbaaaaaabbbabbbbbbbbbaaabbbbbbbbabbbbbbbaaaaaaabbbbbaaaabbbbbbba + abbbaabbbbbbbbbaaabbaaaabbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbabbbbbbbbaaaaaaabbbbaaaabbbbbbba + abbbaabbabbbbbbaaaabaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaaaaaabbbbaaaabbbbbbba + abbbbabbbbbabbbaaaaaabaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaaabbbbbaaaabbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaaaaabbbbaaaabbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbbaaabbbaaaabbbbbbbbbbaaaaabbbaaabbbbbbaaaaaaabbbbbaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbabbbaaaabbbaaaabbbbbbbbaaaaaaabbbbabbbbbbbaaaaaaabbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaaabbaaaaaabaaaaabbbaaaabbbabbbaaaaaaaabbbbbbbbbbbbbaaaabbbabbbaaaabbbbbbba + abbbabbabbaabbaaaabbbbbbbbbaaaaabbbaaaabbbaabbbbaaaababbbbbabbbabbbbaaaaabbabbaaaabbbbbbba + abbbaababbaaaaaaaaaaaaaaabbaaaaabbaaaaabbaabbbbbaaaababbbaabbbbabbbbaaaaabbabbaaaabbbbbbba + abbaaababbabbbaaaaabbbbbbbbaaaaabbabbaaabaabbbbbaaaabbbbababbaaaaabbaaaaabbabbaaabbbbbbbba + abbaaabbbbabbbaaaabbabbabbbaaaaabbbbbbbaaaabbbbaaaaaabaaaaabbaabbabbaaaaabbabbaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaaabbbbbbaaaabbbbbaaaaabaaaaaaaaabbbbbaaaaabbabbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaabbabbbbaaaabbbbbbaaaaabaabbaaaabbaabaaaaabbabbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaabbbbbbbaaaabbbbbbaaaaabbbbbaaaabbaaaaaaaabbabbaaaabbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbaaaabbbbbbbbaaaabbbbbaaaaaabbbbbaaabbaaaaaaaaabbabbaaaabbbbbbba + abbaabbbbabbbaaaaabaaaaabbbaaaabbbbbbbbbbbabbbbbbaaaaabbbbaaabbbbaaaaaaaabaabbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbbbbbaaabaabbbaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbbaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbabbbbbbaaaaabbbaabbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbaabbbbbbbaaaabbbaaaaaaabbbaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaabbaaaabaaaabbaaaaabbbbbbbbbbaaabbbbbaaaaabaaaaaaaaabbbaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbaaaabbaaabbbbbaaabbbbbbbbbaaaabbbaaaaaabbaaaabaaabbbbabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbbaaabbbbaaaabbbaaabbbbbbbbaaaaabbbbbabbbbaaaaaaaabbbaabbbbbbbba + ababbbbbbbbbaaaabbbbbbbbbbbbbaabbbbbaaaaaaaaaabbbbbbbaaabaabbabbbbbbbaaaaaabbbbabbbbbbbbba + ababbabbabbaaaaabbbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbbaaaaabbaabbabbbbaaaaaabbbbaabbbabbbba + ababbbbbabbaaaaaaaaaaaaaabbbbbaabbbbaabbbbaaaabbbbbbbaaaaabaaabaaabbbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaaaabbbbaaabbaabbbbbbaaabbbbbbbaaaaabaaabaaaaabbaaaaabbbaabbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbbaaaabbaabbbbbbbbabbbbbbbbbaaabbabbabbbabbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbabbbaabaabbabbaaaaabbbaaabbbbbbbba + abababaabbbaaaabbbbbbabbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbaaabbbabbbba + abbbabbabbaaaaabbbabaabbbbbaaaaabbbaabbbbaabbbbbbaaabbbbbbbbbbaaaabbbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbbaabaaabbaabbbaaabbbbbbbaabbbbbbbbbbaaaabbbaaaaabbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbbbaaabaaabaaabbbaaabbbbbbbabbbbbbbbbbaaaaabbbaaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbaaabaaabaaabbbaabbbbbbbbaabbbbbbbbbaabaabbaaaaabbbbaaaabbbbbbbba + abbabbabbbaaaaabbbbbbbbbbbaaabaabbaaaabbaaabbbbbbbbbbbbbbbabaabbabbbaaaaabbbaaaaabbbabbbba + aabbbaaaaaaaaaaaaabbabbbbbaaaaaabbaaaabbaaabbbbbbbbbbbbbbbabaabbbbbaaaaabbbbbaaabbbbabbbba + abbaabbbbbaaaabbbaaaaaaaabbaaaaaabaaabbbababbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbaaaabbbbbbbba + abbaaaaabaaaaabbbbbbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaaaababbbbaaaaabbbbbbbababbbbbbbbbbbbbbbaaaaabbbbaaaabbbbbbaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbaabbbaaaaabbbbbbbabbbbbbbbbbbbbbbbaaaaaabbbbaaaabbbbbaaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbabbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbaaaaabbbbaaaaabbaaaaaaabbbbbbbbba + abbbbbbbbaaaaabaaaaaabbabbbbbaaaaabbaaaaabbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbaaaabaaaabbbba + abbbbbbbbaaaabbbbbbabbbaaabbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbba + abbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaabaaaaaaaabbbbba + abbbbbbbaaaaabbbabbabbbbbbbbbaaaabbaabaaaaaaaaaaaabbbbbbbbabbbbbbbaaaabbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbabbabbbbbbbbbbaaaaaabbaaabbbbbbbbabbbbbbbbaabbbbbbaaabbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbaabbabbabbbbbbbaaaaaaabaaabbbbbbbbabbbbbbbbaaabbbbbaaabbbbabbaaaabbaabbbbba + bbbbbabbaaaaabbaaaaaabaabbbbbbaaaaaabbbbabaaaabaaabbbbbbaaaabbbbbbaaabbbbbbbaaaabbaabbbbba + bbbbbabbaaaaabbbbbbbbbabbbabbbaaaaaabbaabaabaabababbbbbbaaaabbbbbbabbbbbbbbbaaaabbabbbbbba + abbbbbbbaaaabbbbbbbbbbabbbbbbbbaaaabbbbbabaaaabaabbbbbbbbaaabbbbbaabbbbbbbbaaaaabbaabbbbba + aaabbbbbaaaabbbbbbaabbabbbbbbbbaaaaabbbbbabaaabaaabbabbbbaaaabbbbabbbbbbbbbaaaabbbbaabbbba + babaaaaaaaaaabbbbbaabbabbbbbbbbbaaaaabbabbabbabbbabaabbbbaaaabbbaabbbbbbabbaaaabbbbaabbbba + bbbbbbbbaaaaabaabaaaaaabbbbbbbbbaaaabbaaaabbaabbbaaaabbbbaaaabbbaabbbbbbbabaaaabbbbaabbbba + abbbbbbaaaaabbbbbbabaaaaaaabbabbaaaaabbaaaabaababaabbbbbbaaaabbbaabbbbbbbbbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbabbbaaaabbaabaaaabbbaabbbbbbaaabbbbaaabbbbbbbbaaaabbbbabbbbbb + abbbbbbaaaaabbabbbabbabbbbbbbbbbaaaaabbabaababbbbaabbbbbaaabbbbbaaabbbabbbbaaaaabbbabbbbba + abbabbbaaaabbbabbaabbabbbbbbbabbaaaaabbbaaaaaabbbaaabbbbbaababbbaabbbbbbbbbaaaabbbbbbbbbba + abbbbbbaaaabbbabbabbbbbbbbbbaabbbaaaabbaaabbaababaaabbbbbabbbbbbaabbababbbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbaaaaabaabbbaabbbaaaabbaabaababbbaaabbbbaabbbbbbaabbabaabbbaaabbbbbbbbaabb`, + map `abbabbbbaaabbbbbabbbaaaabbbbbabbabbbbbbaaaabbbbbaabbabbabbbaaaabbbbbbbbbbbbbbbbbaabbbbbbba + abbabbbbababbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbaabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaabbabbbbabbabbaaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbbbaaabaabaabbbaabbbbbbba + abbbaaabababbabbabbaaaaabaaaaaaaaababbaaaaabbbbaaaaaaababbbaaaabbaaaaaaaaaaaaabaaabbbbbbba + abbbbababbbbbbbbabbaaaabbbbbbbbbabbbbbaaaabbbbbbaabbbbbbbbbaaaabbbbbbabbaabaabbaaabbbbbbba + abbbbabababbbbbbbbbaaaabbbbbabbbabbbbbaaaabbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbbbabbbbbbabbbaaabbbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbaaaaabaaaaabaaaaabbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbabbbbbbbaaabbbbbba + abbbbbabaabbabbbbbaaaaabbabbabbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbaaaaabaabaabbbbaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbaabbbbbbabbbbbbabbbaaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbaaabbabbbbbaaaabbbbabbbbbbaaaabaaaaaaaaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbbaaabaaaaabbaaaaaaaaababbaaaaabbbabbaaaaaaabaaaaaaaabbbbbbbaaaaaaaaaaaaabaaaabbbbbba + abbbbbbaabbbbbbbbbaaaaaabbbbbbaaaabbbbbbaaaaaaaabbaaaaaaabbbbaabbbaaaaaaaaaaaaaaaabbbbbbba + abbbbbbaabbabbbbbaaaaabbbbbbbbaabbbbbbbaaaaaaaaaabaaaaaaabaaaaabbbbbbabaaaaabbaaaabbbbbbba + abbbbbbaabbabbbbbaaaaabbbbbbbbaabbaabaaaaaaaaaaaabbbaaaaaabbbaaabbbbbbbabbbbbbbbaabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbaaaaaaaaaaaaaaabaaaabbaaaaaabbbaaaabbbbbbbbbbbbbbbbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbaaaaaaaaaaaaaaabbaaabbbaaaaaaabbaaaaaabbbbbbbbbaaaabbabbbbbbba + abbbbabaabbbbbbbbaaabbbbbabbaaaaaaaaaaabbbbbbaaabbbaaaaaaabbbaaaaaabbbbbbbbaabbaaabbbbbbba + abbbbabbbbbbbbbbbaaabbbbbaaaaaaaaaabbbbbbbbbaaabbbbbaaaaaaabbbaaaaaaabbbbbbbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbbaaaaaaaaaabbbbbbbbbaaabbbbbbaaaaaabbbbbaaaaaabbbbbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbaaaaaaaaaabbbbbbbbbaaabbbbbbbbbabaaaabbbbaaaaabbbbbbbbbaaaabbbbbba + abbbbbbabbbbbbbbaaaabbbbaaaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbaaabbbbaaaaaabbbbbbbaaaaabbbbbba + abbbbbabbbbbbbbbaaabbbbbaaaaaabbaabbbaabbaaaaabbbbbbbbbbaabaaabbbbaaaaabbbbbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaabbbbbaaaaaabaabbbbabbbaaaaabbbaaaaaaaaaaaaabbbbbaaaabbbbbbbbaaaabbbbbba + abbbbaaabbbbabbbaaabbbbbaaaaaabaaaabaabbbaaaabbbbaaabbbbbbaaaaabbbaaaaaabbbbbbbaaaabbbbbba + abbbaaaabbbbabbaaaabbbbbbbaaaabaaaababbbaaaaabbbaaaabbbbabbaaaabbbaaaaaaabbbbbbaaaabbbbbba + abbbbaabbbbbbbbaaaabbbbbbbabaaaaaaababbbbaabbbaaaaabbbbbabbbaaabbbbbaaaaabbaabaaaaabbbbbba + abbbbaabbbbbbbbaaaaabbbbbbbbaaaaaabbbaabbaabbaabbabbbbbbaabbbaaabbbbbbaaabbbbaaaaaabbbbbba + abbbbaabbbbbbbbaaababbbbbbaaaaaaaabaaabbbabbbbabbaabbbbaaaabaaaaabbbbbaaabbbbbaaaaabbbbbba + abbbaaabbbbbbbbaaabbaabbbbaaaaaaaaaaaabbbaabbabbbaaababaaaaaaaaaaabbbbbbabbbbaaaaabbbbbbba + abbbaabbbbbbbbbaaabbbaabbbbaaaaaaaaaaabbaaaaaabbbbaaaaabaaaaaaaaaaaaaaaabbbbbbaaaabbbbbbba + abbbaabbabbbbbbaaaabaabbbbbaaaaaaaaaaaaaaaaaaaabbaaaaabbbabbbbaaaaaaaaaaabbbbbaaaabbbbbbba + abbbbabbbbbabbbaaaaaabbbbbbbaaaaaaabaabbabbbbbbaababbbbbbabbbbbbaaaaaaaaabbbbbaaaabbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbaabbbbbbbbaabbbbbbbaaaaaaabbbbbaaaabbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbbaaabbbbbbbbbbbbbbababbbbbbbbbabbbbbbbbaaaaaaabbbaaaaabbbbbbba + abbbabbbbbbbbbaaaaabbabbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaabbbbaaaabbbbbbba + abbbbbbbbbbbbbaaaaabbaaaaabbbaabbbbbabbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbaaaabbbbbbba + abbbabbabbaabbaaaabbbbbbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaaaaaaaabbbbaaaabbbbbbba + abbbaababbaabaaaaaaaaaaaabbaaaaabbbaaabbbbbbbbbbaaaaabbbbbaaabbbbbaaaaaaabbbbbaaaabbbbbbba + abbaaababbabbbaaaaabbbbbbbbaaaaabbbaaaabbbbbbbaaaaaaabbbbbaabbbbbbaaaaaaababbbaaabbbbbbbba + abbaaabbbbabbbaaaaabaababbbaaaaabaabaaabbbbbbbaaaaaaabbbbbbbabbbbbbaaaabababbbaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaabbbabaabbaabbbaaaaaaabbbbbbbbbbbbbbbaaaaababbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaabbbabbaabbabbbbbaabbabbbababbbababbbbaaaabbabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaabbababaaaaabbbbaaaabbbaaaabbbaaaaabbbaaaabbaabbaaaabbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbaaaabaaaabbaaaabbbbaaaabbbaaaaaababbbbbbbaaaabbaabbaaaabbbbbbba + abbaabbbbabbbaaaaabaaaaabbbaaaabbbaaaaaaaabbbbbaaababaaabbaabbbbbabbaaaabbaabbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbaaaabbbbbbaaaabbabbbaaaabbaaabaaaabbaabbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaaaabbabbaaaabbbaaaaaaabbabbbaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbaaabbbbbbbbbaaabbbbbbaaaaabbbbbaaaabbbaaaaaaabaabbbaaabbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaabbbbbbbbbababbbbbbaaaaabbbbbaaaabbbbabbbaabaabbbaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbaabaabbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaaaabbbaaabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbabbbbaaaaaabbbaaabbbbbbbba + ababbbbbbbbbaaaabbbbbbbbbbbaaabaaaaaaaaaaabbbbbbbbbaaaabbbbbbbaaaabbaaaaaaabbbaabbbbbbbbba + ababbabbabbaaaaabbbbbbbbbbbaaabbaaabbbbaaabbbbbbbbbbaaaabbbbaaaaabbaaaaabaabbbaaabbbabbbba + ababbbbbabbaaaaaaaaaaaabbbbaaaabbaabbbbbbaabbbbbbbbbaaaaabbaaaaaabbaaaaabaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaabbbbaaabbbbaaaaabbaaabbbbbbbaaaabbaabbaabbbbaaaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbababbbbaaaaaaaaaabbbbbbbaaaaabbbbbbbbbbbaaaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbbaaabbbaaaaaaaaaabbbbbbbaaaaaaaaaabbabbbaaaaaaabbbaaabbbbbbbba + abababaabbbaaaabbbbbbabbbbbbbaaabbbaabbbbaaaabbbbbbbaaaaabbaabbaababbaaaaabbbbaaabbbabbbba + abbbabbabbaaaaabbbabaabbbbbbaaaabbbabbbbbbbaabbbbbbbaaaaabbaabaaaaabbaaaaabbbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbbbaaaabbaabbbbbbbbabbbbbbbbbaaabbaababbbabbaaaaabbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbbbbaaaabbbbabbbbbabbbbbbabbbbbbabbbaabaabbbabaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbaaaabbaaabbbbbbbbbbbbabbbbbbbbbbbaaaaabbabaaaaabbbaaaabbbbbbbba + abbabbabbbaaaaabbbbbbbbbbbaaaaabbaaabbbaaabbbbbbbabbbbbbbbbbbaaaabbbbaaaabbbbaaaabbbabbbba + aabbbaaaaaaaaaaaaabbabbbbbaaaaaabaaabbbbaabbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbbbaaabbbbabbbba + abbaabbbbbaaaabbbaaaaaaabaaabaaabaaabbbbaabbbbbbbbaaabbbbbbbbaaaabbbaaaaabbbbaaaabbbbbbbba + abbabaaabaaaaabbbbbbbbbbbaaabaaabaaaabbaaabbbbbbbbbbbbbbbbbbaabaabbbaaaabbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaaaabbbaaaaabbbaaaabbaabbbbbbbbbbabbbbbbaaabbaabbaaaaabbbbbaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbbaaaaaabaaaabbaaabbbbbbbbbabbbbbaaaabbbbbbaaaabbbbbaaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbbbaaaaabbaabbbaabbbbbbbbbbbbbbbbaaaabbbbbaaaaabbabaaaaabbbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbbbaaaaabbbbabaaabbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbaaaaaabaabbbba + abbbbbbbbaaaabbbbbbabbbabbbabaaabbbbaababbbbbbbbbbbbbbbbbaaaaabbbbaaaabbbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbbbbbbbbbbbbabaaabbbbabbbbbbbbbbbbbbbbbbbbaaaaaabbbaaaabbbaabaaaaaaaabbbbba + abbbbbbbaaaaabbbabbabbbbbbbbbaaaabbbabbaaaaaaaaababbbbbbaaababbbbbaaaabbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbabbabbbbbbbbaaaabbbbabbaabbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbaabbabbabbbbbaaaabbbbabaaaabbbbabbbbbbbbbbbbbbbbbbaaaabbbbabbaaaabbbabbbbba + bbbbbabbaaaaabbaaaaaabaabbbbaaaabbbbbbbbbabaaabbabbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbabbbbbba + bbbbbabbaaaaabbbbbbbbbabbbbbbaaaabaaaababbabaabbabbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbabbbbba + abbbbbbbaaaabbbbbbbbbbabbbbbbaaaaaaaaabbbabaaaababbbbbbbbbbabbbbbaaabbbbbbbaaaaabbbabbbbba + aaabbbbbaaaabbbbbbaabbabbbbbbaaaaaaababababbaaababbbbbbbaaaaabbbbaaabbbbbbbaaaabbbbaabbbba + babaaaaaaaaaabbbbbaabbabbbbbbbaaaaaababaabbabaababbbbbbbaababbbbaaabbbbbabbaaaabbbbaabbbba + bbbbbbbaaaaaabaabaaaaaabbbbbbbaaaabbbbbababbaaababbbbbbbaaabbbbbaabbbbbbbbbaaaabbbbaabbbba + abbbbbbaaaaabbbbbbabaaaaaaabbbaaaabbbbbaaaaaaabbabbbbbbbaaaabbbbaabbbbbbbbbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbaabaaaababbbbbbbaaaabbaaaabbbbbbbbbaaaabbbbabbbbbb + abbbbbbaaaaabbabbbabbabbbbbbbbbaaaaaaabaababaabbabbbbbbaaaaabbaaabbbbbbbbbbaaaaabbbabbbbba + abbaabbaaaabbbabbaabbabbbbbbbbbaaaaaaabbaabaaaababbbbbbaaababbbaabbbbbbbbbbaaaabbbbbbbbbba + abbbbbbaaaabbbabbabbbbbbbbbbbbbbaaaaaabaababaabbabbbbbbaaabbbbbaaabbbbbabbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbaaaaabaabbbabbbaaaaaabbaabababbabbbbbbaabbbbbbaaabbbbbabbbaaabbbbbbbbaabb`, + map `abbabbbbaaabbbbbabbbaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbabbabbabbbbbbbaabbbbbbba + abbabbbbababbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaabbabbbbabbabbaaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbbbaabaabbbabbbaabbbbbbba + abbbaaabababbabbabbaaaaabaaaaaaaaababbaaaaabbbbaaaaaaaaabbbaaaabbaaaaaaaaaaaaabaaabbbbbbba + abbbbababbbbbabbbbbaaaabbbbbbabbabbbbbaaaaabbabbaabbbbbbbbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbbabababbbbbbbbbaaaabbbbbbbbbabbbbbaaaabbbabbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbbaaaabbbbbbbbaaaabbbbbabbbbbbbbbaaaabbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaaabaaaaabaaaaabbabbabbabbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbaabbabbbbbbbaaabbbbbba + abbbbbabaabbabbbbbbaaaabbaababbabbbbbbaaaabbbbbbabbbbbbbbbaaaaabbaaaaabaabbbabbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaaaabbbabbabbbbbbbbbbaaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbbbaabbabbbbbaaaabbbbaaabaabbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbba + ababbbaaaabaaaaabbaaaaaaaaaababbaabbbbaaaaaaaaaaaaabbbbaabbaaaaaaaaaaaaaaaaabbbaaaabbbbbba + abbbbbbaabbbbbbbbbaaaaaaaaaabbbbabaaaaaaaaaaaaaaaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbba + abbbbbbaabbabbabbaaaaaaaababbbbbbbaaaabaaabaaaaaaaabbaaaaabbbbbbbbbaaaaaaaaaabaaaabbbbbbba + bbbbbbbaabbabbbbbaaaaabbabbbbbbbaaaaabbaabbaaaaabbaaaaaaaaabbbbbbbbbabbbbbaabbbababbbbbbba + abbbbbbaabbabbabbaaaaabbbbbbbbbababbbbbbbbbaaaaaabbaaaaaaaabbbabbbbbbbbbbbaaabbbbabbbbbbba + abbbbbaaabbabbabbaaaabbbbbbbbbbabbbbbbbbbaaaaaaaaabaaaaaabbaaaaabbbbbbbbbbaaaaabbaabbbbbba + abbbbabaabbbbbbbbaaabbbbbbbbbbaabbbbbbaaaaaaaaaaabbabaaaabbaaaaabbbbbbbabbbaabbaaaabbbbbba + abbbbabbbbbbbbbbbaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbaaaaabbbaababbbbbbabbbbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbbbbbbaaaaaaaaaaaaaaabbaaabbbaaaaaabbaaaaabbbbbbbbbbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbaaabaaaaaaaaaaabaaabbbaaabbbaaaaaabbaaaaaabbbbbbaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbbbaaaaaaaaabbbbbbbbbbbaabbbbaaaaaabbbaaaaaaaabbbbabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaabbbbbbaaaaaaaaaabbbbbbbbbbaabbbbbbaaaaaabbbaaaaaaabbbbbbbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaabbbbbbaaaaaaaaaabbbbbbbbbaaabbbbbbaaaaaaabbbbaaaaaabbbbbbbbbaaabbbbbbba + abbbaaabbbbbabbbaaabbbbbaaaaaaabaabbbbbbbbbaaaabbbbbbbbbbaaaaabbbaaaaaabbbbbbbbaaaabbbbbba + abbbbaabbbababbaaaabbbbbaaaaaaabaabbbaabbbaaaaabbbbbbbbbbaaaaabbbbaaaaabbbaabbbaaaabbbbbba + abbbaaabbbbbbbbaaaabbbbbaaaaaaabaabbbaabbbaaaabbbbbababbaaaaaabbbbbaaaabbbbaabaaaaabbbbbba + abbbbaabbbbbbbbaaaaabbbbbbaaaabbaaabaaabbaaaabbbbbaaaaaaaaaaaabbbbbaaaaabbbbaaaaaabbbbbbba + abbbbaabbbbbbbbaaabbbbbbbbaaaaabaaaaaabbbaaaabbbbaaaabbbbabaaaabbbaaaaaabbbbbaaaaabbbbbbba + abbbaaabbbbbbbbaaabbbbbbbbbbaaaaaabbabbbaaaabbabaaaabbbbbbbaaaabbbbaaaaaabbbbbaaaabbbbbbba + abbbaabbbbbbbbbaaabbbaabbbbaaaaaabbbaaabbaabbbabbaabbbbbbbbbbaaabbbbaaaaabbbbbaaaabbbbbbba + abbbaabbabbbbbbaaaaaaabbbbbaaaaaaabbaaabbaabbbabbaaabbbbaaabbaaaabbbbbaaabbbbaaaaabbbbbbba + bbbbbabbbbbabbbaaaaaabbbbbbaaaaaaaabaaabbabbbbabbbbabbbaaaabaaaaaabbbbbaabbbbaaaaabbbbbbba + abbaaabbbbbabbbaaaabbbbbbbbaaaaaaaaaaabbaaabbabbbaaabbaaaaaaaaaaaabbbbbaaabbbaaaaabbbbbbba + abbaaaaaaaaaaaaaababbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaabbbaaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbbbbbaaaaaaaaaaabaaabaaaabaabbbbbaabbbbaaaaaaaaaaabbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaaaabbaaaabbbbaaaabbbbabbbbbbbbbaabbbbbbbbabbbbbbbaaaaaaaabbbbbaaaabbbbbbba + abbbaabaabbabbaaaabbbbbbbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbabbbbbbbbaaaaaaaabbbbaaaabbbbbbba + abbbaababbaaaaaaaaaaaaaaabbbbaabbbbbbbbbbbbbbbabbbbbbbbbbabbbbbbbbbaaaaaaabbbbaaaabbbbbbba + abbaaababbabbbaaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbaaaabbbbbbba + abbaaabbbbabbbaaaaabaababbbaaaabbbbbaabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaabbbaaaabbbbbbbbbaaaaabbbbaabbbbbbbbaaaaaaaabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaababaaabbbbbbbbbbaaaaabbbbaaaabbbbaaaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaabbbbaaabbbbbbbaaaaaaabbbbaaabbbbbaaaaaaaaaabbbaaaabbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbaaaaabababaabbbbbbbabaaaaabbbbbabbbbbbbaaaaaabaaabbaaaabbbbbbba + abbaabbbbabbbaaaabbaaaaabbbaaaabbbabbbabbaabbbbaaaabbbbaaabbbbbbbbbaaaaaabaabbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbabbbaaaaabbbbbbaabbbbaaabbbabbabbbbaaaabbaabbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbaaaaaaaabbbbaaaabbbbaaaababbaabbbbaaaabbaabbaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbaaaababbabaaaaabbbbaaababbaaaaaabaaababbbaaaabbaabbaaaabbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaaabbbbbbaaaaabbbbbaaaaabbaabaaaaabbabbbaaaabbaabbaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaabbaaaabbbbbbbaaaaabbbbbaaaaabbabbbaabbbbaabaaaaabbabbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbaaaabbbbbaaaaabbbbbbaaaabbaabaaaaabbabbbaaabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbaaaabbbbbbbbbaaabbbbbaaaaaabbbbbaaaabbaaaaaaaabaabbbaabbbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbabaaabbbbaabbaaabaabbbaababbbbbbba + ababbabbabbaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbaaaabbbaaaabbbbbbba + ababbbbbabbaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbbbaaaabbbbaabbbbbbbbbbaaaaabbbaaaabbbbbbba + ababbbbbbbbaaaaabbbbbaabbbbaaabaaaaaaaaabbbbbbbbbbbaaabbbbbbbbaabbbbaaaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbaaabbaaabaaaaaabbbbbbbbbbaabbbbbbbbaaabbbaaaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbbaabbaaabbbbbaaabbbbbbbbbaaabbbbbaaaaabbaaaaaaaabbbaaabbbbbbbba + abababaabbbaaaabbbbbbabbbbbbaaabbbaaaaabbaaabbbbbbbbaaaabbaaaaaaabbaaaaaaaabbbaaabbbabbbba + abbbabbabbaaaaabbbabbabbbbbbaaabbbaaaaaaaaaaabbbbbbbaaaabbaabbabbbbaaaaaaaabbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbbbaaabbbaaaaaaaaaaabbbbbbaaaaababbbbbbbbbaaaaaaaabbbaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbbbbbaaabbbbbabbaaaaaabbbbbbbaaaaaaaaabbbbbbbaaaaaabbbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbbbaaabbbabbbbbbbaaabbbbbbaaaaaaaaaabaaabbbaaaaaabbbaaaabbbbbbbba + aabaababbbaaaaabbbbbbbbbbbbaaaabbbaabbbbbbaabbbbbbbbaaaaabaabbaaaaabaaaaaabbbaaaabbbabbbba + aabbbaaaaaaaaaaaaabbabbbbbbaaaabbaabbbbbbbbbbbbbbbbbbbaabbaabbbbbbabaaaaaabbbaaabbbbabbbba + abbaabbbbbaaaabbbaaaaaaaabaaaabbbbaabbbbbbbbbbbbbbbbbbabbbaabaaabbabaaaaabbbbaaaabbbbbbbba + abbabaaabaaaaabbbbbbbbbbbbaaaabbbbabbbbbbabbbbbbbbbbbbbbbbbbaaaabbabaaaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbaaaaaabbaaabbbaaabbbbbbbbbbbbbbbbbbaaaabbabaaaaabbbbaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbaabaaabbaaabbbaaabbbbbbbbaabbbbbbbbaaaaabbbaaaabbbbbaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbaaabaaabbaaabbbaabbbbbbbbbbbbbbbbbabaaaaabbaaaaabbbaaaaabbbbbbbbba + abbbbbbbbaaaaabaaaaabbbbaaaaaabbbaaabaaaabbbbbbbbbaabbbbbabbaaaabbbaaaabbbbbaaaaaabaabbbba + abbbbbbbbaaaabbbbbbabbbbbaaaaaabbaaabaaabbbbbbbbbbbbbbbbbabaabbabbaaaaabbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbbbbbbbbbbbaaaaaabaaababbbbbbbbbbbbbbbbbbbabaabbbbbaaaaabbbabaaaaaaaabbbbba + abbbbbbbaaaaabbbabbabbbbbbbaaaaabaabaabaaaaaaaaabbbbbbbbaaaabbbbbbaaaabbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbabbabbabbbbbaaaabbbbabbaaabbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbaabbabbbbbbbbaaaabbbaaabaaabbbbabbbbbbbbbaaaaaabbbaaaaabbbabbaaaabbbabbbbba + bbbbbabbaaaaabbaaaaaababbbbaaaabbbbaaabbbabaaaabaabbbbbbaaaaaabbbaaaabbbbbbbaaaabbbbbbbbba + bbbbbabbaaaaabbbbbbbbbabbbbaaaabbbbaaabaabaabaabaabbbbbaaaaaabbbaaaaabbbbbbbaaaabbbbbbbbba + abbbbbbbaaaabbbbbbbbbbabbbbbaaabbbbbbabbbabaaaabaabbbbbaabbbbbbbaaaabbbbbbbaaaaabbbabbbbba + aaabbbbbaaaabbbbbbaabbabbbbbaaabbbbbaababbabaaabaabbbbbbbbbbbbbbaaaabbbbbbbaaaaabbbaabbbba + babaaaaaaaaaabbbbbaabbabbbbbaaaabbaaaabbabbabbabbbbbbbbbbbbbbbbbaaaabbbbabbaaaaabbbaabbbba + bbbbbbbaaaaaabaabaaaaaabbbbbaaaaaaaaaabbbaabbaabbbbbbbbbbbbbbbbbaaabbbbbbabaaaaabbbabbbbba + abbbbbbaaaaabbbbbbabaaaaaabbbaaaaaaaaabbaaaabaababbbbbbaaabbbbbbaaabbbbbbbbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbabbbabaaabbabbbbbbbaabbbbbbaabbbbbbbbbbaaabbbbabbbbbb + abbbbbbaaaaabbabbbbbbabbbbbbbaaaabbbbabbabaababbabbbbbbaaaabbbababbbbbbbbbbaaaaabbbabbbbba + abbaabbaaaabbbabbaabbabbbbbbbaaaabaaaabbbabaaaababbbbbbaaaaaaaaabbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbaaaabbbabbabbbbbbbbbbbbaaabaaaabaababbaababbbbbbaabbbbaaabbbbaababbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbaaaaabbbbbbbbaaabaaaabababaaaababbbbbbaabbbbaaabbbbbbaabbbaaaabbbbbbbaabb`, + map `abbabbbbaaabbbbbabbbaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbabbbbababbbbbbbbaaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaabbaaabbbbbabbaaaaabbbbbabbabbbbbbaaaabbbbbaabaabbabbbaaaabbbbbaabbabbbabbbaaabbbbbba + abbbaaabababbabbabbaaaaabaaaaaaaabaabbaaaaabbabbaaaaabbabbbaaaabbaabaaaaaaaaaabaaaabbbbbba + abbbbababbabbabbbbbaaaabbbbbbbbbabbbbbaaaaabbbbbaabbbbbabbbaaaabbbbbbabbabbbabbaaabbbbbbba + abbbbabababbbbbbbbbaaaabbbbbbbbbabbbbbaaaaabbabbaabbbbbabbbaaaabbbbbbabbbbbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaabaaaaabaaaaabbabbbbbabbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbaabbabbbbbbaaabbbbbbba + abbbbbbaaabbabbbbbaaaaabbaaaabbabaaabbaaaaabbaaaaabbbbbabbaaaaabbaaaaabaabbabbbaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbabbabbbbbbbbbbaaabbbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbbaaabbabbbbbaaaabbbbabbbaabbaabaaaabbbbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbba + ababbbaaaabaaaaabbaaaaaaaaaaaaaaaaaaaabbbbbbbbabbbbbaaaaaaaaaaaaaaaaaaaaaaaaabbaaaabbbbbba + abbbbaaaabbbbbbbbbaaaaaaaaaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbaaaabbabbabbaaaaaaaaaababbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbba + bbbbbbaaabbabbbbbaaaaaaaabbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbabaabbbbbaababbaaabbbbbbba + abbbbbbaabbabbabbaaaaaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaaabbbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbbbbbaaaaabaaaaaaaaaababbbbbbbbbbbbbbbbbbbbbbaaaaaababbbbbbba + abbbbbbaabbbbbbbbaaabbbbbbbbbbbbbaaaaaabaaabaaaaabbaaaaaaaaabbbbbbbbbbbbbbbbabbaaabbbbbbba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbabbbbbbbbaabaaaaaabaaaaaaaaabbbbbbbbbbbabbbbbbbaaabbbbbbba + abbbbbaabbbbbbbbaaaaabbbabbbbbbbabbbbbbbbbbaaaaaaaabaaaaaababbbbbbbbbbbabbbbbbbaaabbbbbbba + abbbbaaaaaaaaaaaaaaabbbbabbbbbbaaabaabbbabaaaaaaaaaaaaaaabbbaaaaabbbbbbaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaaaaaaaabaabbaaaaabbaaaaaabbbbbbaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaaabbbbbbbabbaaaaaaaaaaaaaaaaaabbbbbaaaaaabbaabbabbbbbbabbbbbbaaaabbabbba + abbbbaabbbbbbbbbaaaabbbbbbaaaaaaaaaaaaaabaaaabbababbbaaaaaabbbaababbbbbbaabbbbbaaabbbbbbba + abbbaaaabbbbbbbbaaabbbbbbbaaaaaaaaaaaabbbbbbbbbbbabbbaaaaaabbaaaaaabbbbbbaabbbbaaaabbbbbba + abbbbaaabbababbaaaabbbbbbaaaaaaaaaabbbbbbbbabbbaabbbbaaaaaabbbaaaaaaabbbbaaabbbaaaabbbbbba + abbbaaabbbbbbbbaaaabbbbbbaaaaaaaaaabbbbbbbbabbaaabbbbbaaaaaabbaaaaaaaabbbaaaabaaaaabbbbbba + abbbbaabbbbbbbbaaaaabbbbbaaaaaabbaabbbbabbbaaaaabbbbbbbbaaaabbbaaaaaaabbbbbaaaaaaabbbbbbba + abbbbaabbbbbbbbaaaabbbbbbaaaaaaabaabbbbabbbaaaaabbbbbbbbbbaaaabbaaaaaaabbbbbaaaaaabbbbbbba + abbbaaabbbbbbbbaaabbbbbbbbaaaaabbaabbbaabbbbaaaabbbbbbbbbbaaaabbbbaaaaabbbbbbbaaaabbbbbbba + abbbaabbbbbbbbbaaabbbabbbbbaaaabaaaabbaabbbaaaabbbbbbbbbbbabaabbbbaaaaaabbbbbaaaaabbbbbbba + abbbaabbabbbbbbaaaababbbbbbaaaaaaaaaaaabbbaaaabbbbaaaabbbaaaaabbbbbaaaaabbbbbaaaaabbbbbbba + abbbbabbbbbabbbaaaaaabbabbbabaaaaabbbbabbaaaaabbbbaaabbbbbaaaaabbbbaaaaaabbbbaaaaabbbbbbba + abaaaabbbbbabbbaaaabbbbbbbbaaaaaaabbbbbabbaababbbaaaabbbbbbbaaabbbbaaaaaaabbbaaaaabbbbbbba + abbbaaaaaaaaaaaaababbbbbbbbbaaaaaabbbaaabbabbaaabaaabbbbbbbbaaaabbbbaaaaaabbbaaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbbbbbaaaaaaabbaabbbbbbbaabbaabbbbbabbbaaaabbbbaaaaabbbbaaaabbbbbbba + abbbabbbbbbbbbaaaaabbaaaabbbaaaaaaaaaaabbabbbbbbbbaabbbbaaaabaaaabbbbbbaaabbbbaaaabbbbbbba + abbbaabaabbabbaaaabbbbbbbbbbaaaaaaaaaaaaaaabaaabbbaaabaaaaaaaaaaaabbbbbaaabbbbaaaabbbbbbba + abbbaababbaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaabbbbaaaabbaaaaaaaaaabbbbbaabbbbaaaabbbbbbba + abbaaababbabbbaaaaabbbbbbbbbbaaaabbbbbaabbbbbaaaaaaabbabaaababbaaaaaaaaaaabbbbaaaabbbbbbba + abbaaabbbbabbbaaaaabaabaabbbbaaaabbbbbbbbbbbbbbbaabbbbbbbaabbbbaaaaaaaaaabbbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbaabbbbbbbbabbbbbbbaaaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbaaaaabbbbaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaaaaaabbbaaaabbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbaaaaabbbaaaabbbbbbbbbbbbaabbbbaaaabbbbbbaaaaaaaabbbaaaabbbbbbba + abbaabbbbabbbaaaabbaaaaabbbaaaaababaaabbbbbbbbbbbbbaaabbbaaabbbbbbbaaaaaaaabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaaabaabaaabbbbbbbbaaabaaabbbaaaabbbbbaaaaaaaaabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaaaababbaabbbbbbbbaaaaaabbbabaaabbbaaaabaaaaaabbbaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbaaaabbababbabbaabbbbaaaaaabbbbbbbbbbbbaaabaaabbaabbaaaabbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaaabbbaabbaabaabbbbaaaaaabbbbbabbbbabbbaaaaaabaabbaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaabbaaaaaabbaabaaaabbbbbaabbbbbbabbbbabbaabbaaaaabbaabbbaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbabaaaaaabbbbaabbbbbaaabbbbbaaabbbaaaabbabbbaaabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbaaaabbbbbbaaaaabbbbbaabbabbaaaaabaaaaabbbaaaabbabbbaabbbbbbbbba + abaabbbbbbbaaaaabbbbbbbbbbaaaabbbbbbbaaaaabbbbbaaaaabbaaaaabaabbaabbaaaabbabbbaabbbbbbbbba + ababbabbabbaaaaabbbbbbbbbbaaaabbbbbbbbaaabbbbbbaaaaabbaabbaabbbbaabbaaaabbabbbaaaabbbbbbba + ababbbbbabbaaaaaaaaaaaabbaaaaabbbbbbbbbaaabbbbbbaaaaabbbbbaaaabbaabaaaaabbabbbaaaabbbbbbba + ababbbbbbbbaaaaabbbbbaabbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbaaaaaaabbabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbaaaaabbbbbaaabbbbaabbbaaaaabbbaaabbbbbbbba + ababbbbbbbbaaaabbbbbbabbbbaaaaaaaaaaababbbbbbbbbbaaaabbbbbaaabbbbbbbbbaaaaabbbaaabbbbbbbba + abababaabbbaaaaabbbbbabbbbbaaaaaaaaaaaabbbbbbbbbbbaaabbbbbabbbbbbbbbbbaaaaabbbaaabbbbbbbba + abbbabbabbaaaaabbbabbabbbbbaaabbaaaaaaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaabbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbbbaabbaaabbbbaaabbbbbbbbbbabbbbbbbbbaaabbbaaaaaaabbbaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbbbbbaaabbbaaabbbaaabbbbbbbbbaaabbbbbaaaaabbaaaaaaabbbbaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbaaabbbaaaaaabaaabbbbbbbbaaabaaaaaaaaabbaaaaaaabbbbaaabbbbbbbba + aabaababbbaaaaabbbbbbbbbbbbbaaabbbaaaaaaaaaaabbbbbbaaaaaaabbaaabbbbaaaaaaabbbaaaabbbbbbbba + aabbbaaaaaaaaaaaaabbabbbbbbbaaabbbbbaaaaaaaaabbbbbbaaaaabbbbbbbbbbbaaaaaaabbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaabbaaaabbbabbbbbaaaaabbbbbbaaaaabbbabbbbbbbaaaaaaabbbaaaabbbbbbbba + abbabaaabaaaaabbbbbbbbbbbbbaaaabbbabbbbbbbaabbbbbbbbaaaaaaaabbaabbbaaaaaaabbbaaabbbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbbaaaabbbbabbbbbbbbbbbbbbbbaaaaaabaabaaababbaaaaabbbbaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbaabaabbabbaaaaabbbbaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbaaaaabbbaaabbbabbbbbbbbbbbbbbabbbaabaabbbabaaaaabbbaaaaabbbbbbbba + abbbbbbbbaaaaabaaaaabbbbaaaaaaabbaaabbaaabbbbbbbbbbbbbbbbbbabaabbbabaaaaabbbaaaaaabaabbbba + abbbbbbbbaaaabbbbbbabbbbaaabbaabbaaabaaabbbbbbbbbbbbbbbbbbbbaaaabbabaaaabbbbaaaabbbbbbbbba + abbbbbbbbaaaabbbbbbabbbbaaabbbabaaaabbbbbbbbbbbbbbaabbbbbbbbaaaabbbaaaaabbbbaaaabbbbbbbbba + abbbbbbbaaaaabbbabbabbbbaaaaabbbaaaabbbaaaaaaaaabbbabbbbbbbbaaaabbbaaaabbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbbaaaaabbaaaaabbaaabbbbbbbbbbbbbbbabbabaabbbaaaabbbbbaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbbbaaaaabbaabbbbaaabbbbabbbbbbbbbbababbaabbaaaabbbbbbaaaabbbabbbbba + bbbbaabbaaaaabbaaaaaabbbbbaaaaabbbaaaabbbabaaaabaabbbbbbaaaabbabbaaaaabbbbbbaaaabbbbbbbbba + bbbbbabbaaaaabbbbbbbbbbbbbbaaaabbbbbabbaabaaaaababbbbbbbaaaabbbbbaaaabbbbbbbaaaabbbbbbbbba + abbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbaaabbbabaaaababbbbbbbaaaabbbbbaaaabbbbbbbaaaabbbabbbbba + aaabbbbbaaaabbbbbbaabbabbbbaaabbbbbaaababbabaaababbbbbbaaaaaabbbaaaabbbbbbbaaaaabbbaabbbba + babaaaaaaaaaabbbbbaabbbbbbbaaaabbbbbaabbabbabbababbbbbbaaaaaabbbaaaabbbbabbaaaaabbbaabbbba + bbbbbbbaaaaaabaabaaaaabbbbbaaaabbbbabababaabbaababbbbbbaaaaaabbaaaabbbbbbaaaaaaabbbaabbbba + abbbbbbaaaaabbbbbbabaaaabbbaaaabbbbaaabaaaaababbabbbbbaaabbbbbbaaaabbbbbbbbaaaaabbbbbbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbbaaabbaaababababaaaababbbbbbabbbbbbbaaabbbbbbbbbaaaabbbbbbbbbbb + abbbbbbaaaaabbabbbbbbabbbbbbaaaaaaaababaabaababbabbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbba + abbaabbaaaabbbabbaabbaabbbbbaaaaaaaababbaabaaaababbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbbbbba + abbbbbbaaaabbbabbabbbbbbbbbbaaaabbaaaabaababbabbabbbbbbbabbbbbbaaabbbababbbaaabbbbbbbbabba + abbbbbbaaaabbbabbaaaaabbbbbbaaaabbaaaabbaabaaaababbbbbbaaabbbbbaabbbbbaabbbaaabbbbbbbbaabb`, + map `abbabbbbaaabbbbbabbbaaaabbbbbabbabbbbbbaaaabbbbbbabbbbbabbbaaaabbbabbabbabbbbbbbaabbbbbbba + abbabbbbababbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbbabaabbabbbaaaabbbbbaabbabbbbbbbaabbbbbbba + abbbaabbaaabbbbbabbaaaaabbbbbabbabbbbbbaaaabbbbbaabaabbabbbaaaabbbbbaabbabbbabbbaabbbbbbba + abbbaaabababbabbabbaaaaabaaaaaaaabaabbbaaaabbbbaaaaaabbabbbaaaabbaabaaaaaabaaabaaabbbbbbba + abbbbababbabbabbbbbaaaabbbbbbabbabbbbbaaaaabbbbaaabbbbbabbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbbabababbbbbbbbbaaaabbbbbbbbbabbbbbaaaaabbabbaabbbbbabbbaaaabbbbbbabbbbbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbbabaabaaaaabaaaaabbabbbbbbabbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbaabbabbbbbbaaabbbbbbba + abbbbbbaaabbabbbbbaaaaabbaaaabbabaaabbaaaabbaaaaaababbbabbaaaaabbaaaaabbabbaabbaaabbbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbabbbbbbbbbbbbbaaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbbaaabbabbbbbaaaabbbbaabbbabbaabaaaaabbabbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbba + ababbbaaaabaaaaabbaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbaaabbbbbba + abbbbaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbabaaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbaaaabbabbbbbaaaaaaaaabaabbbbaaaaaabbbbbbbbbbbbbbbbabbbbbbaaaaaaaaaabbaaaaaaaaabbbbbba + bbbbbbaaabbabbbbbaaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbba + abbbbbbaabbabbabbaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbabaaaababbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbaaaabbbbbbaaaaaaaabbbbbbba + abbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbabbabbbbaabaaabbbbbbba + abbbbbbbbbbbbbbbbaaaabbbbbabbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbaabbbbbbba + abbbbbaabbbbbbbbaaaaabbbaaabbbbbbbaaaaaabaaabaaaaabbabbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbabbbbbbbbaabaaabbbaabaaaaabbaabbaaaaabbbbbbbabbaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbabbbbbbbbaabbbbbbbbbbaaaaaabaaaaaaaaabbbbbbbbbbbaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaaabbbbabbbbbbbaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbaabbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaababbbbbabbbaaaaaaaaabaaaaaaaaaaabaaaaaababbaaabbbbbbaaabbbbaaaabbbbbba + abbbaaaabbabbbbbaaaababbbbbaabbaaaaaaaaaaaaaaaaaaaaabbaaaaabbaaaaabbbbbbaaabbbbaaaabbbbbba + abbbbaabbbababbaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbaababbbbbbaaaabbbaaaabbbbbba + abbbaaabbbbbbbbaaaaabbbbbbbaaaaaaaaaaaaaaabaaabbbbbbbbbbaaaabbbbbbabbbbbaaaaabaaaaabbbbbba + abbbbaabbbbbbbbaaaaabbbbbbaaaaaaaaaaabbbbbbbbbbbbbabbbabaaaabbaaababbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaaabbbbbbbaaaaaaaaaabbbbbbbbbbbbbaabbbaaaaaabbaaaaaabbbbbbaaaaaaaabbbbbbba + abbbaaabbbbbbbbaaabbbaabbbaaaaaaaaaabbbbbbbbbbbbaabbbbaaaaaaabbaaaaaabbbbbaaaaaaaabbbbbbba + abbbaabbbbbbbbbaaabbbaabbbaaaaaabbbabbbbaabbabaaaabbbbbaaaaaabbbaaaaaaabbbaaaaaaaabbbbbbba + abbbaabbabbbbbbaaaaaabbbbbbaaaaabbaabbbbabbbabaaabbbbbbbbbaaaaabbaaaaaabbbbbbaaaaabbbbbbba + abbbbabbbbbabbbaaaaaabbbbbbaaaaabbaaabbaabbbabaaabbbbbbbbbbaaaabbaaaaaaabbbbaaaaaabbbbbbba + abaaaabbbbbbbbbaaaabbbbbbbbaaaaabaaaaaaabbbbaaaabbbbbbbbbbaabaabbbaaaaaabbbbbaabbabbbbbbba + abbbaaaaaaaaaaaaababbbbbbbbbaaaabaaabbaabbaaaaaabbbaaaabbbaaaaabbbbaaaaabbbbbaaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbbbbbaaaaaaabbbbbbbaaaaabbbbaaaabbbaaaaaabbbbbaaaabbbbbaaaabbbbbbba + abbbabbbbbbbbbaaaabbaaaaabbbaaaaaaabbbbbabbaaaabbbaaaabbbbabaaaabbbbbaaaabbbbbaaaabbbbbbba + abbbaabaabbabbaaaabbbbbbbbbbaaaaaaabbabaabbbbbbaabaaaabbbbabaaaabbbbaaaaaabbbbaaaaabbbbbba + abbbaababbaaaaaaaaabaaaaabbbaaaaaaaaaaaaabbabbbaabbaaabbbbabbaaaabbbaaaaaabbbbaaaabbbbbbba + abbaaababbabbbaaaaabbbbbbbbbbaaaaaaaaaaaabaabbaaabbabbbbbaaabbaaaabbbaaaaabbbbaaaabbbbbbba + abbaaabbbbabbbaaaabbabbaabbbbaaaaaaaaaaaaaaaaaaabbbaabbbbaaaaaaaaaabbbaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaaaaabaaababbaaaaabbbaaaaaaaaaaaaaaabbbbbaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaaabbbbaaaaabbbaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbaabbbbbaaaaaaaaaabbbbaaaabbbbbbba + abbaabbbbbabbaaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbababbbbbbbabbbbbbaaaaaaaaabbbbaaaabbbbbbba + abbaabbbbabbbaaaabbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaaababbaaabbbbbbbbbbbbbaabbbbaaabbbbbbaaaaaaabbbbaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbaaaaabbbaaaabbbbbbbbbbbaaaabbbbaaabbbbbbaaaaaaabbbbaaaabbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaaaabbbbaaabbbbbbbbbbaaaaabbbbaaabbbbaaaaaaaabbbbbaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaabbaaaabbabbaaabbbbbbbbbaaaaaabbbaaaabbbbaaabaaaababbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbaaaabbbaaaaaabbaabbbbaaaaaabbbbbabbbbbbaabaaaababbbaaabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbaaaaaabbaaabaababbbbbaaaababbabbbbbbabbbaaaaaaaabbbaabbbbbbbbba + abaabbbbbbbaaaaabbbbbbbbbbbaaaabbbbaaaabaaabbbbbaaaabbaaabbabbbabbbaaaabababbbaabbbbabbbba + ababbabbabbaaaaabbbbbbbbbbbaaaabbbbbbbaaaaabbbbbaaaabbaaaabbaaaaabbbaaaabbabbbaaabbbbbbbba + ababbabbabbaaaaaaaaaaaabbbaaaabbbbbbbbaaaaabbbbbaaabbbbaaabbbaaaabbbaaaabbabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaabbaaaaabbbbbbbbaaaaabbbbbaaaaabaaabaaaabbaabbaaaabbabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbaaaaabbbbbbbbbaaaabbbbbbaaaabbabbaaabbbaabaaaaabbabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbaaaaabbbbbbbbbbababbbbbbaaaabbbbbaaaabbaaaaaaaabbabbaaaabbbbbbbba + abababaabbbaaaaabbbbbabbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbaaaabbbaabbaaabbbbbaaaaabbbbbbba + abbbabbabbaaaaabbbabbabbbbaaaaaaaaaabbbbbbbbbbbbbaaaaabbbaaaaabbbaabbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbaaaaaaaaaaababbbbbbbbbbbaaaabbbaaabbbbbbabbaaaaabbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbbbbaaabaaaaaaaaabbbbbbbbbbbaaabbbabbbbbbbbbbbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbaabbaaabbbaaaabbbbbbbbbbaabbbbbbbbbabbbbaaaaaabbbaaaabbbbbbbba + aabaababbbaaaaabbbbbbbbbbbbbaabbbbaabbbbaaabbbbbbbbbbabbbbbbbbaabbbbaaaaaabbbaaaabbbbbbbba + aabbbaaaaaaaaaaaaabbabbbbbbaaaabbbaaaaabbaaaabbbbbbbaaabbbbbaaaaabbaaaaaaabbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaabbabaabbbaaaaaaaaaaabbbbbbbaaaaaabbaaaaabbaaaaaaabbbaaaabbbbbbbba + abbabaaabaaaaabbbbbbbbbbbbbbaaabbbbaaaaaaaaaaabbbbbbaaaababbbaaabbbaaaaaaabbbaaabbbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbbabaaabbbbbbbbaaaaaabbbbbbbaaaaaaabbbbbbbbaaaaaabbbbaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbabbaaaaabbbbbbbbbbaaaabbbbbbbaaaaaaaaabbbbbbaaaaaabbbbaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbbaaaaabbbbabbbbbbbaabbbbbbbaaaaaaaaabaabbbaaaaaabbbaaaaabbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabaabbaaaabbaaaaabbbaaaaaabaabbbba + abbbbbbbbaaaabbbbbbabbbabaaaaabbbbaaabbabbbbbbbbbbbbbaaabbaabaaaaabbaaaabbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbabbabbbbbaaaaaabbbaabbbbbbbbbbbbbbbbbbaabbaabaabbaabaaaabbbbaaaabbbabbbbba + abbbbbbbaaaaabbbabbabbbbaaabbbbabaaabbbaaaaaaaaabbbbbbbbbbbabaaabbabaaaabbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbaaabbbbaaaaabbaaabbbbbbbbbbbbbbbbbbbaaaabbabaaabbbbbaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbaaaabbbbaaaabbaaaabbbbbbbbbbbbbbbbbbaaaabbbbaaabbbbbaaaabbbabbbbba + bbbbaabbaaaaabbaaaaaabbbbaaaaabbaaaabbbbaaaaaabaabbbbbbbbbbbaaaabbbaaaabbbbbaaaabbbbbbbbba + bbbbbabbaaaaabbbbbbbbbbbbbaaaaabbaaaabbabbabaabbabbbbbbbbbbbaaaabbbaaabbbbbbaaaabbbbbbbbba + abbbbbbbaaaabbbbbbbbbbbbbabaaaaabbaaabbbaabaaaababbbbbbbbababbaabbaaabbbbbbbaaaabbbabbbbba + aaabbbbbaaaabbbbbbaabbbbbbbaaaabbbbbabbababbaaababbbbbbbaaaabbabbaaaabbbbbbaaaaabbbaabbbba + babaaaaaaaaaabbbbbaabbbbbbbaaabbbbbbabbaabbabaababbbbbbbaaaabbbbbaaabbbbbbbaaaaabbbaabbbba + bbbbbbbaaaaaabaabaaaaabbbbbaaabbbbbbabbababbaabbabbbbbbbaaaabbbbaaaabbbbbbbaaaaabbbaabbbba + abbbbbbaaaaabbbbbbabaaabbbaaaabbbbbaabbaaaaaaabbabbbbbbaaaaabbbaaaabbbbbbbbaaaaabbbbbbbbba + abbbbbbaaaaabbbbbbbbbbbbbbaaaabbbbbabbbaaabaaabbabbbbbbaaaaaabbaaaabbbbbbbbaaaaabbbbbbbbbb + abbbbbbaaaaabbabbbbbbabbbbaaaabbbbaaabbaaaababbbbbbbbbbaaaaabbbaaabbbbbbbbbaaaaabbbbbbbbba + abbaabbaaaabbbabbaabbabbbbbaaabbbbaaabbbaabaaaababbbbbaaabbbbbbaaabbbbbbbbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbabbbbbbbbbaaaaaaaaaabbaaaabaabbabbbbbaabbbbbbaaabbbbbaabbbaaabbbbbbbbabba + abbbbbbaaaabbbabbaaaaabbbbbbaaaaaaaaabbaaabababbabbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbaabb`, + map `abbaabbbbaaabbbbabbbaaaabbbbbabbabbbbbbaaaabbbbbbabbbbbabbbaaaabbbabbabbabbbbbbbaabbbbbbba + abbaabbbbabbbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbbabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbabbbbbbabbaaaaabbbbbabbababbbbaaaabbbbbaabaabbabbbaaaabbbbbaaababbbabbbaabbbbbbba + abbbaaaabbabbabbabbaaaaabaaaaaaaabaabbaaaaabbaaaaaaaaaaabbbaaaabbbabaaaaaabaabbaaabbbbbbba + abbbaabbababbabbbbbaaaabbbbbbbbbabbbbbaaaaabbbbbaabbbbbabbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbaabbaabbbbbbbbbaaaabbbbbbbbbabbbbbaaaabbbabbaabbbbbbbbbaaaabbbbbbabbabbbbbbaaabbbbbbba + abbbbababaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbbbbabbbbbbbaabbbbbbba + abbbbbbabaabaaaaabaaaaabbabbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbabbabbbbbbbaabbbbbbba + abbbbbbabaababbbbbaaaaabbaaaabbabbaabbaaaaabaaaaaababbbabbaaaabbbaaaaabbaabbabbaaabbbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbabbbbbbabbbbbbbaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbbaaabbabbbbbaaaabbbbabbbbabbaabaaaaabbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbba + ababbbbaaabaaaaabbaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaabbbbbba + abbbbbaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbabaaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbaaaabbabbabbaaaaaaaaabaabbbbaaaaaabbbbbbbbbbbbbbbbabbbbbbaaaaaaaaaabbaaabbaaabbbbbbba + bbbbbbbaabbabbbbbaaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbabbbabbbbbbba + abbbbbbaabbabbabbaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbaaaaaabbbbbaaaaababbbbbbba + abbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbabbbbabbaaaabbbbbba + abbbbabbbbbbbbbbbaaaabbbbbabbbbbbbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbaaabbbbbbbaaaaaabaaabaaaaabbabbbbbbbbbbbbbbbaaaaabbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbabbbbbbbbaabaaabbbaabaaaaabbaabbaaaaabbbbbbaabbaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbabbbbbbbbaabbbbbbbbbbaaaaaabaaaaaaaaabbbbbbbbbbbaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaaabbbbabbbbbbbaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbaabbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaababbbbbabbbaaaaaaaaabaaaaaaaaaaabaaaaaababbaaabbbbbbaaabbbbaaaabbbbbba + abbbaaaabbabbbbbaaaababbbbbaabbaaaaaaaaaaaaaaaaaaaaabbaaaaabbaaaaabbbbbbaaabbbbaaaabbbbbba + abbbbaabbaababbaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbaababbbbbbaaaaabbaaaabbbbbba + abbbaaabbbbbbbbaaaaabbbbbbbaaaaaaaaaaaaaaabaaabbbbbbbbbbaaaabbbbbbabbbbbaaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaaaabbbbbbaaaaaaaaaaabbbbbbbbbbbbbabbbabaaaabbaaababbbbbbaaabaaaaaabbbbbba + abbbbaabbbbbbbbaaaabbbbbbbaaaaaaaaaabbbbbbbbbbbbbaabbbaaaaaabbaaaaaabbbbbbaabaaaaabbbbbbba + abbbaaabbbbbbbbaaabbbaabbbaaaaaaaaaabbbbbbbbbbbaabbbbbaaaaaaabbaaaaaabbbbbaaaaaaaabbbbbbba + abbbaabbbbbbbbbaaabbbaabbbaaaaaabbbabbbbaabbabaaabbbbbbaaaaaabbbaaaaaaabbbaaabaaaabbbbbbba + abbbaabbabbbbbbaaaaaabbbbbbaaaaabbaabbbbabbbabaaabbbbbbbbbaaaaabbaaaaaabbbababaaaabbbbbbba + abbbbabbbbbabbbaaaaaabbbbbbaaaaabaaaabbaabbbabaaabbbbbbbbbbaaaabbaaaaaaabbbbaaaaaabbbbbbba + abaaaabbbbbbbbbaaaabbbbbbbbaaaaabaaaaaaabbbbaaaabbbbbbbbbbaabaabbbaaaaaabbbbbaaaaabbbbbbba + abbbaaaaaaaaaaaaababbbbbbbbbaaaaaaabbbaabbbaaaaabbbaaaabbbaaaaabbbbaaaaabbbbbaaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbbbbbaaaaaaabbbbbbbbaaaabbbbaaaabbbaaaaaabbbbbaaaabbbbbaaaabbbbbbba + abbbabbbbbbbbbaaaabbaaaaabbbaaaaaaabbbbbbbbaaaabbbaaaabbbbabaaaabbbbbaaaabbbbbaaaabbbbbbba + abbbaabaabaabbaaaabbbbbbbbbbaaaaaaabbabaaababbbbabaaaabbbbabaaaabbbbaaaaaabbbbaaaabbbbbbba + abbbaababbaaaaaaaaabaaaaabbbaaaaaaaaaaaaabbabbbaabbaaabbbbabbaaaabbbaaaaaabbbbaaaabbbbbbba + abbaaababbabbbaaaaabbbbbbbbbbaaaaaaaaaaaabaabbaaabbabbbbbaaabbaaaabbbaaaaabbbbaaaabbbbbbba + abbaaabbbbabbbaaaabbabbaabbbbaaaaaaaaaaaaaaaaaaabbbaaabbbaaaaaaaaaabbbaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaaaaabaaababbaaaaabbaaaaaaaaaaaaaaaabbbbbaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbaaaaabbbbaaaaabbbaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbaabbbbbaaaaaaaaaabbbbaaaabbbbbbba + abbaabbbbaabbaaaaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbbbbbbbbabbbbbbbaaaaaaaabbbbaaaabbbbbbba + abbaabbbbabbbaaaabbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaaabbbbaaabbbbbbbbbbbbbabbbbbaabbbbbbbaaaaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaaababbaaabbbbbbbbbbbbbaabbbbababbbbbbaaaaaaabbbbaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbaaaaabbbaaaabbbbbabbbbbaaaabbbbbbabbbbbbaaaaaaabbbbaaaabbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaaaabbbbaaabbbbbbbbbbaaaaabbbbbbabbbbaaaaaaaabbbbbaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaabbaaaabbabbaaabbbbbbbbbaaaaaabbbaaaabbbbaaabaaaababbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbaaaabbbaaaaaabbaabbbbaaaaaabbbbbabbbbbbaabaaaababbbaaabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbaaaababbaaaaabbabbbbbaaaaaabbababbbbabbbaaaaaaaabbbaabbbbbbbbba + abaabbbbbbbaaaaabbbbbbbbbbbaaaabbbbaaaabaaabbbbbaaaabbbbaabbbbbabbbaaaabababbbaabbbbabbbba + ababbabbabbaaaaabbbbbbbbbbbaaaabbbbbbbaaaaabbbbbaaaabbbbabbbbaaaabbbaaaabbabbbaaabbbbbbbba + ababbabbabbaaaaaaaaaaaabbbaaaabbbbbbbbaaaaabbbbbaaabbbbaaaabbaaaabbbaaaabbabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaabbaaaaabbbbbbbbaaaaabbbbbaaaaabbaaaabbabbaabbaaaabbabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbaaaaabbbbbbbbbaaaabbbbbbaaaabbaabbaaabbaabaaaaabbabbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbaaaaabbbbbbbbbbababbbbbbaaaabbabbbaaabbaabaaaaabbabbaaaabbbbbbbba + abababbabbbaaaaabbbbbabbbbaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbaabbaaabbbbbaaaabbbbbbbba + abbbabbabbaaaaabbbabbabbbbaaaaaaaaaabbbbbbbbbbbbbaaaaabbbbaaaabbbaabbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbaaaaaaaaaaababbbbbbbbbbbaaaabbbaaabbbbbbabbaaaaabbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbbbbaaabaaaaaaaaabbbbbbbbbbbaaabbbabbbbbbbbbbbaaaaabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbaabbaaabbbaaaabbbbbbbbbbaabbbbbbbbbabbbbbaaaaabbbaaaabbbbbbbba + aabaababbbaaaaabbbbbbbbbbbbbaabbbbaabbbbaaabbbbbbbbbaabbbbbbbbaabbbbaaaaaabbbaaaabbbbbbbba + aabbbaaaaaaaaaaaaabbabbbbbbabaabbbaaaaabbaaabbbbbbbbaaabbbbbbaaaabbaaaaaaabbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaabbabaabbbaaaaaaaaaaabbbbbbbaaaabbbaaaaaabbaaaaaaabbbaaaabbbbbbbba + abbabaaabaaaaabbbbbbbbbbbbbbaaabbbbaaaaaaaaaabbbbbbbaaaaaabbbaaabbbaaaaaaabbbaaabbbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbbabaaabbbbbbbbaaaaaabbbbbbbaaaaaaabbabbbbbaaaaaabbbbaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbabbaaaaabbbbbbbbbbaaaabbbbbbbaaaaaaaabbbbbbbaaaaaabbbbaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbbaaaaabbbbabbbbbbbaabbbbbbbaaaaaaaaabaabbbbaaaaabbbaaaaabbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabaabbaaaabbaaaaabbbaaaaaabaabbbba + abbbbbbbbaaaabbbbbbabbbabaaaaaabbbaaabbabbbbbbbbbbbbbaaabbaabaaaaabbaaaabbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbabbabbbbbaaaaaabbbaabbbbbbbbbbbbbbbbbbaabbaabaabbaabaaaabbbbaaaabbbabbbbba + abbbbbbbaaaaabbbabbabbbbaaabbbbabaaabbbaaaaaaaaabbbbbbbbbbbabaaabbabaaaabbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbaaabbbbaaaaabbaaabbbbbbbbbbbbbbbbbbbaaaabbabaaabbbbbaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbaaaabbbbaaaabbaaaabbbbbbbbbbbbbbbbbbaaaabbbbaaabbbbbaaaabbbbbbbbba + bbbbaabbaaaaabbaaaaabbbbbaaaaabbaaaabbbbaaaaaabaabbbbbbbbbbbaaaabbbaaaabbbbbaaaabbbbbbbbba + bbbbbabbaaaaabbbbbabbbbbbbaaaaabbaaaabbabbabaabbabbbbbbbbbbbaaaabbbaaabbbbbbaaaabbbbbbbbba + abbbbbbbaaaabbbbbbabbbbbbabaaaaabbaaabbbaabaaaababbbbbbbbababbaabbaaabbbbbbaaaaabbbaabbbba + aaabbbbbaaaabbbbbbaabbbbbbbaaaabbbbbabbababbaaababbbbbbbaaaabbabbaaaabbbbbbaaaaabbbaabbbba + babaaaaaaaaaabbbbbaabbbbbbbaaabbbbbbabbaabbabaababbbbbbbaaaabbbbbaaabbbbbbbaaaaabbbaabbbba + bbbbbbbaaaaaabaabaaaaabbbbbaaabbbbbbabbababbaabbabbbbbbbaaaabbbbaaaabbbbbbbaaaaabbbaabbbba + abbbbbbaaaaabbbbbbabbaabbbaaaabbbbbaabbaaabababbabbbbbbaaaaabbbaaaabbbbbbbbaaaaabbbbbbbbba + abbbbbbaaaaabbbbbbbbbbbbbbaaaabbbbbabbbaaaaaaabbabbbbbbaaaaaabbaaaabbbbbbbbaaaaabbbbbbbbbb + abbbbbbaaaaabbabbbabbabbbbaaaabbbbaaabbaaaaaabbbbbbbbbbaaaaabbbaaabbbbbbbbbaaaaabbbbbbbbba + abbaabbaaaabbbabbaabbabbbbbaaabbaaaaabbbaabaaaababbbbbaaabbbbbbaaabbbbbbbbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbabbbabbbbbaaaaaaaaaabbaaaabaabbabbbbbaabbbbbbaaabbbbbaabbbaaabbbbbbbbabba + abbbbbbaaaabbbabbaaaaabbbbbbaaaabaaaabbaaabababbabbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbaabb`, + map `abbaabbbbaabbbbbabbbaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbabbabbbbbbbbbbaabbbbbbba + abbaabbbbaabbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbaabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbbabbbbbabbaaaaabbbbbabbababbbbaaaabbabbaabaabbabbbaaaabbbbbaabbabbbabbbaabbbbbbba + abbbaaaaababbabbabbaaaaabbaaaaaaabaabbaaaaabbaaaaaaaaaaabbbaaaaabbabaaaaabaaabbaaabbbbbbba + abbbaabbababbabbbbbaaaabbbbbbbbbabbbbbaaaaabbabaabbbbbbbbbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbaabbaabbbbbbbbbaaaabbbbbbbbbabbbbbaaaabbbabbabbbbbbbbbbaaaabbbbbbabbbbbbbbbaaabbbbbbba + abbbbababaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbbbbabbbbbbbaabbbbbbba + abbbbbbabaaaaaaaabaaaaabbabbabbaabbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbaabbabbbbbbbaabbbbbbba + abbbbbbababbabbbbbaaaaabbaaaabbabbaabbaaaaabaaaaaababbaaabaaaabbbaaaaabaaabbabbaaabbbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbabbbbbbabbbbbbbaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbbaaabbabbbbbaaaabbbbabbbbabbaabaaaaabbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbba + ababbbaaaabaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaabbbbbba + abbbbbbaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaabaaaaaaababaaaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbaaaabbabbabbaaaaaaaaabaabbbbaaaaabbbbbbbbbbbbbbbaaabbbbbaaaaaaaaaaaaaaaaabaaababbbbba + bbbbbbbaabbabbbbbaaaaaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbaaabbbbbbbabbbaabbbbbbaabbbabbbbbbba + abbbbbaaabbabbabbaaaaaaababbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbaaabbbabbbbbbbabbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbaabbbbbbaaabbabbbbbbba + abbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbaabaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbabaabbbbbbbbaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbababbbbbbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbaabbbbbbbbbbaaaaaaabaaaaaaaaaabbbbbbbbbbbbbbaabbaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbaabbbbbbbbbbabaaabbbaaaaaaabbbbbbbbaabbbbbaaaabbaaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaaabbbbababbbbbbbaabbbbbbbbaaaaaabaaaaaaaaabbbbbaaaaabbabbbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaababbbbbbbbbbbaaabbbbbbbbbbaababbaaaaaaaabbbbbbbaabbaaaabbbbaaaabbbbbba + abbbaaaabbabbbbbaaaababbbbbbbabbbaaaaaaaaabbbbaabaaaaaaaaaabbbbbbbbbbbbaaaabbbbaaaabbbbbba + abbbbaabbaababbaaaaabbabbbbbaabbaaaaaaaaaaaaabaaaaaaaaaaaaabbaaaabbbbbbbaaaaabbaaaabbbbbba + abbbaaabbbbbbbbaaaaabbbabbbbaaaaaaaaaaaaaaaaaaaaaaaababbaaaabbaaabbbbbbbaaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaabbaaaaaabbabbbbaaabbbabbbbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaaabbbbbbbbaaaaaaaaaaabbbbbbbaabbbbbbbbbbaaaabbabbbbbbbbbbaabaaaaabbbbbbba + abbbaaabbbbbbbbaaabbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbabbaaaaaabbaaabbbbbbbbaaaaaaaabbbbbbba + abbbaabbbbbbbbbaaabbbaabbbaaaaaaabbaabbbbbbbbbbbbbbaabbaaaaaabbbaaaabbbbbbaaaaaaaabbbbbbba + abbbaabbabbbbbbaaaababbbbbaaaaababbbaabbbbabbbbbbaabbbbbaaaaaabbaaaaaabbbbaaabaaaabbbbbbba + abbbbabbbbbabbbaaaaaabbbbbbaaabbabbbaabbbbabbbabaaabbbbbbbaaaaabbaaaaaabbaaaaaaaaabbbbbbba + abaaaabbbbbbbbbaaaabbbbbbbbaaabbabbaabbbbbabbbaaaaabbbbbbbbbaaaabbaaaaabbbbaaaaaaabbbbbbba + abbbaaaaaaaaaaaaababbbbbbbbaaaaaabaaaaabbaabbbaaaaabbbbbbbbbbbbaabbaaaaabbbbaaaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbbbbaaaaaabaaaaaaaabbbaaaaabbbbbbbbbaaaaabbbbaaaabbbbbbaaaabbbbbbba + abbbabbbbbbbbbaaaabbaaaaabbaaaaaaaaaaaaaaabbbaaaabbbbaaaabaaaaaaabbbbaaabbbbbbaaaabbbbbbba + abbbaabaabaabbaaaabbbbbbbbbaaaaaaaaaaaaaaaabaaababbbbaaaabbaaaaaabbbbaaaabbbbbaaaabbbbbbba + abbbaababbaaaaaaaaabaaaaabbbaaaaaaaaaabbaaabbabbaaaaaaaabbbaaaaaabbbbaaaabbbbbaaaabbbbbbba + abbaaababbabbbaaaaabbbbbbbbbaaaaaaaaaaaaaaabbabbbbaaaaabbbbaabaaaabbbaaaaabbbbaaaabbbbbbba + abbaaabbbbabbbaaaabbabbabbbbbaaaaaaaaaaaaaabaabbbbbbbaaabbbaaaaaaaabbbaaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbaaabaaaaaaaaaabbbbaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaaaaabbaaaaaaabaaaabbbbaaaaabbbbaaaaabbbaaabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbaaaabbbbaaaaaabbbaabbbbaaaabbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbabaabbbbbaaaaaababbbbbaaabbbbbbbba + abbaabbbbabbbaaaabbaaaaabbbbaaabbbbbbbbbbbbbbbbbbbaabbbbbbbaabbbbbaaaaaaabbbbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaaaaabbbbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbbbabbbbaabbbabaaaaaaabbbbaaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbaaaaabbbbbaabbbbbbbbbbbbbbbaabbbaaabbbbaaaaaaabbbbaaaaabbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaaaababbbaabbbbbbbbbbbbbabaabbbababbaaaaaaaaabbbbaaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaabbaaaaabbaaaaabbbbbbbbbbbaaaaaabbbbaabbaaaaaaaaaabbbaaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbaaaaaabbaaaabbabaaaaaaaabbbbaaabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbaaaaaabbaaaaaabbabbbbbbaaaaaabbaaaaababaaabaaaabbbaaabbbbbbbbba + abaabbbbbbbaaaaabbbbbbbbbbbaaaababaaaaaaabaabbbbbbaaaaaabaaaaabaabaaaaabaabbbaaabbbbabbbba + ababbabbabbaaaaabbbbbbbbbbbaaaabbbbaaaabaaaabbbbbbaaaaabbbaabbbaabaaababaabbbaaaabbbbbbbba + ababbabbabbaaaaaaaaaaaabbbbaaaabbbbaabbbaaaabbbbbbaaaabbbbabbbaaaababaabbabbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaabbbbaaabbbbaaabbbaaaabbbbbbaaaabbbbaaabaaaabaaaaababbbbaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbbaabbbbbbbaaaabbbaaabaaaaabbbaaababbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbaaaabbbbbbbbbbbaaabbbbbbbaaaaabbaaaaaaaaaabaaaabbbbbaaaabbbbbbbba + abababbabbbaaaaabbbbbabbbaaaabbbbbbbbbbaaaaabbbbbbaaaaabbabbaaabbaabaaaabbbbbaaaaabbbbbbba + abbbabbabbaaaaabbbabbabbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaabbaabaaaabbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbabbbbaaaaaaaaaaabbbbbbbbbbbbbbaaaabbbbaaaabbbabaaaaabbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbabbbbaaaabaaaaaaaabbbbbbbbbbbbaaaaabbbaabbbbbabaaaaabbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbbaaabbaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbaaaabbbbbbbba + aabaababbbaaaaabbbbbbbbbbbbaaabbbaaaaaaaaaabbbbbbbbbbbaabbbbbbbaabbbaaaaabbbaaaaabbbbbbbba + aabbbaaaaaaaaaaaaabbabbbbbbaaabbbbbaabbbaaaabbbbbbbbbbaabbbbbbbaabaaaaaaabbbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaaabbaaaabbbbaabbbbbaaabbbbbbbbbaaabbbbbaaabbaaaaaabbbbaaabbbbbbbbba + abbabaaabaaaaabbbbbbbbbbbbaaaaabbbbbaaaaabbaaabbbbbbbbaaababaaaaabbaaaaabbbbaaaabbbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbbaabaabbbbbaaaaaaaaaabbbbbbbaaaaaabbbbabaaaaaaabbbbaaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbabbaabaabbbbbaaaaaaaaaabbbbbbbbaaaaaabbbbbbaaaaaabbbbaaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbaabaaaabbbbbbbbbbaaaabbbbbbbbaaaaaaaabbbbbaaaaabbbbaaaabbbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbbabaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbaaaabbbbaaaaaaaaabbbba + abbbbbbbbaaaabbbbbbabbbababaaaaaabbbabbbbbbbbbbbbbbbbaaaaaaaabaaabbbaaaabbbbaaaabbbbbbbbba + abbbbbbbbaaaabbbabbabbbbbabaabaaaabaabbbbbbbbbbbbbbbbbaaabbabbaaaaabaaabbbbbaaaabbbabbbbba + abbbbbbbaaaaabbbabbabbbbbbaabbbbbaaaabaaaaaaaaabbbbbbbbaabbabbabbaabaaabbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbabaaabbbbbaaabbaaabbbbbbbbbbbbbbbbbbaaaabbbabaaabbbbaaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbbaaabbbbbaaaabaaabbbbbbbbbbbbbbbbbbbaaaabbabaabbbbbbaaaabbbbbbbbba + bbbbaabbaaaaabbaaaaaabbbbaaaabbbbaaaabbbabaaaabaabbbbbbbbbbbaaaabbabaabbbbbbaaaabbbabbbbba + bbbbbabbaaaaabbbbbabbbbbbaaaaabbbaaabbaabaaaabbabbbbbbbbbbbbaaaabbaaaabbbbbbaaaabbbbbbbbba + abbbbbbbaaaabbbbbbabbbbbbaaaaaabbaaaabbbabaaaababbbbbbbbbbbbaaaabbaaabbbbbbaaaaabbbaabbbba + aaabbbbbaaaabbbbbbaabbbbbaabaaaaaaaaababbabaaababbbbbbbbbbbbabaabbaabbbbbbbaaaaabbbaabbbba + babaaaaaaaaaabbbbbaabbbbbabbaaaaaabaabbabbabbabbbbbbbbbbbabaabaabbaabbbbabbaaaaabbbaabbbba + bbbbbbbaaaaaabaabaaaaabbbabbabbbbbbbabbbaabbaababbbbbbbbbaaabbbbbaabbbbbbabaaaaabbbaabbbba + abbbbbbaaaaabbbbbbabbabbbaaaaabbbbbaabbaababaababbbbbbbbaaaabbbbaabbbbbbbbbaaaabbbbbbbbbba + abbbbbbaaaaabbbbbbbbbbbbbaaaaabbbbaabbaaaaaaabbabbbbbbbbaaaabbbaaabbbbbbbbbaaaabbbbbbbbbbb + abbbbbbaaaaabbabbbabbabbbaaaaabbbaaaabbaaaababbabbbbbbbbaaaaabbaaabbbbbbbbbaaaaabbbbbbbbba + abbaabbaaaabbbabbaabbabbbaaaabbbaaaaabbbabaaaababbbbbbbaaaaabbaaabbbbbbbbbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbabbbabbbbaaaabbaaaaabbababbabbabbbbbbbaaabbbbaabbbbaaaabbbaaabbbbbbbbabba + abbbbbbaaaabbbabbaaaaabbbbaaaabbbaaaabaaabaaaababbbbbbbaabbbbbaabbbbbbbabbbaaabbbbbbbbaabb`, + map `abbaabbbbaabbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbabbbbbbbbbbbbbaabbbbbbba + abbaabbbbbabbbbbbbbaaaaabbbbbabbabbbbbbaaaabbbbbaabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbaabbabbabbaaaaabbbbbabbababbbbaaaabbabbaabaabbabbbaaaabbbbbaabbabbbabbbaabbbbbbba + abbbaaaabaabbabbabbaaaaabaaaaaaaabaabbaaaaabbaaaaaaaaaaabbbaaaaabaabaaaaaaaaabbaaabbbbbbba + abbbaaaabbbbbabbbbbaaaabbbbbbbbbabbbbbaaaaabbabaabbbbbbbbbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbaabababbbbbbbbbaaaabbbbbbbbbabbbbbaaaabbbabbabbbbbbbbbbaaaabbbbbbabbbbbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbbbbabbbbbbbaabbbbbbba + abbbbbbabaaaaaaaabaaaaabbabbabbabbbbbbaaaabbbbbbabbbbbbbbbaaaabbbbbbaabbabbbbbbbaabbbbbbba + abbbbbbbaabbabbbbbaaaaabbaaaabbabbaabbaaaaabaaaaaaaabbaaabaaaabbbaaaaabaaabbabbaaabbbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbbaaabbabbbbbaaaabbbbaabbbabbaabaaaaabbaaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaabaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaabbbbbba + abbbbbbaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbaaaabbabbabbaaaaaaaaabaabbabaaaaabbbbbbbbbbabbabaaaaabbbaaaaaaaaabbaaaaaabaaaaabbbbba + bbbbbbbaabbabbbbbaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbabbaaaabbbbbaabbbabbbbbbba + abbbbbbaabbabbabbaaaaaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbaaaaabbbbbaaabbaabbbbbbbabbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbabbbbbbaaaaabbbababbabaaaababbbbbbba + abbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbabbbbbbbbbaabbbaabaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaabbbbbbba + abbbbbaabbbbbbbbaaaaabbbababbbbbbbbaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbabaabbbbbbbaaabbbbbbba + abbbbaaaaaaaaaaaaaaabbbaabbbbbbbbbbbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaabaaabbbbbaaabbbbbbba + abbbbbaabbbbbbbbaaaabbbaabbbbbabbbbbaaaaaabbaaaaaababbbbbaabbbbbbaaaaabaaabbbbbaaabbbbbbba + abbbbbabbbbbbbbbaaaabbbbababbbbbbbbaabbbbbbbbbaaaaaaaaaaaaabbbbbbaaaabbbaabbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaababbbbbbbbbbbbaaaabbbbabbbbaaabaaaaaaabbbbbbaaaaabbaaaabbbbaaabbbbbbba + abbbaaaabbabbbbbaaaababbbbbbbbabbbaaaaaaaaaaabbbaabaaabbaaabbaabbbaabbbaaaabbbbaaabbbbbbba + abbbbaabbaababbaaaaabbabbbbbbaaabaaaaaaaaaaaaabbaaaaaaaaaaaaaaabbbbbbbbbaaaabbbaaabbbbbbba + abbbaaabbbbbbbbaaaaabbbbbbbbbaaaaaaaaaaaaaaaaabbaaaaaaaaabaaaabbbbbbbbbbaaaaaaaaaabbbbbbba + abbbbaabbbbbbbbaaaaabbbbbbbbbbaaaaaaaaaaaaabaabbaaaaaaabbbaaabbbbbbbbbbbbaaaaaaaaabbbbbbba + abbbbaabbbbbbbbaaaabbbbbbbabbaaaaaaaaaaabbbbbbbbaabbbbabbaaaaabbbbbbbbbbbbaaaaaaaabbbbbbba + abbbaaabbbbbbbbaaabbbbbbbbaaaaaabaaaaaaabbbbbbbbbbbbaabbbaaaaabbaaabbbbbbbaaabaaaabbbbbbba + abbbaabbbbbbbbbaaabbbabbbbaaaaaabbbbbbaabbbbbbbbbbbbaabbbaaaaaabaaaabbbbbbaabbbaaabbbbbbba + abbbaabbabbbbbbaaaababbbbaaaaaabbbbbbbbabbbbbbbbbbaaabbbbaaaaaabbaaaaabbbaaabbaaaabbbbbbba + abbbbabbbbbabbbaaaaaabbbbbaaaaabbbbbbbaabbbbaabbaaaaabbbabaaaaaabbaaaabbbaaaaaaaaabbbbbbba + abaaaabbbbbbbbbaaaabbbbbbbbaaaabbbbbbaababbaabbbbaaaaabbabbbbbbbbbbaaabbbbaaaaaaaabbbbbbba + abbbaaaaaaaaaaaaababbbbbbbbaaaaabbbabaaaaaaaabbbaaaabbbbabbbbbbabbbbaaabbbbbaaaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbbbbaaaaabbbababaaaaaabbaaaabbbbbbbbaaaaaabbbbaabbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaaabbaabbbbbaaaaabbaabbaaaaaabbbaaaabbbbaaaaaabbaaabbbbaabbbbbbaaaabbbbbbba + abbbaababbbabbaaaabbbbbbbbbaaaaaabaabbaaaaaaaaaaaaaabbaaaaaaabbaaabbabaabbbbbbaaaabbbbbbba + abbaabbabbaaaaaaaaabaaaaabbaaaaaaaaaaaaaaaaaabbabbaaaaaaabbbbaaaaaabbbaabbaabbaaaabbbbbbba + abbaabbabbabbbaaaaabbbbbbbbaaaaaaaaaaaaaaaaaabbabbbbaaaaabbbbaaaaaabbbaabbbbbbaaaabbbbbbba + abbaabbbbbabbbaaaabbabbabbbbaaaaaaaaaaaaaaaaaaaabbbbaaaaaaabaaaaaaaabbaabbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaababbbaaaaaaaaaaaaabbbbbabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaaaaaaabaaaaaaabbbbaaababbbaaaaaabbaaaabbbbbabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbbbbaaaaaabbbbabbabbbbbbbbbaabbbbaaaaabbaaaaabbbbbbbbaaaabbbbbbba + abbaabbbbabbbaaaaabbbbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbaaaaaabbbbbbbaaabbbbbbbba + abbaabbbbabbbaaaaaaaaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaaaaaabbbbbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbaaabbaaaaaabbbbbbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbabbbbbbbbbbbbbbbbbabbbaaaaaaaaaaabbbbbbaaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbbaaaabbbbbbaaabbbbbbbbbbbbbabbbbbbaaaaaaaaaaaabbbbbaaaaabbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbbaaaabbbbbaaaabbbbbbbbbbbbbaaababbabaaaaaaaaaabbbbbaaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaaabaaaaabbbbbbaaabbbbbbbbbbbbbaaaaabaabaaaaaaaaaabbbbbaaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaabaabbbbbaaaabbbbbbbba + ababbbbbbbbbaaaaabbbbbbbbbbaaaaabbbbaaaaabaabbbbbbbbbaaaaaaaaaaaaaaaabbabbbbbaaaabbbbbbbba + abaabbbbbbbaaaaabbbbbbbbbbbaaaaabbaaaaaaabaabbbbbbbbbaaaaabbaaaaaaaaabbabaabbaaabbbbabbbba + ababbabbabbaaaaabbbbbbbbbbaaaaabbbbaaaaaabbbabbbbbbbbaaaabbbaaaaaaaaabbbbbbbbaaaabbbbbbbba + ababbabbabbaaaaaaaaaaaabbbaaaaaabbbaaaaaabbbbbbbbbbbaaababbaaaaaabbbababbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbaaaaabbbaaabbbbbbbaaabbbbbbaababbaaaaaaabbaaabbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbbbbbaababbaabaaaabaaaabbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbaabbabbbbbbbbbbbbbaabbbbbbbbaaaaababbabaaaaaaabbbbbbaaaabbbbbbbba + abababbabbbaaaaabbbbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbaaaaaaaaaabbbbbbaaaabbbabbbba + abbbabbabbaaaaabbbabbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaabbbaaaaabbbbbbaaaabbbabbbba + abbbbbbbbbaaaaabbbbbbabbbaaaaabbbaaaaabbbbbbbbbbbbbbbbaaaabbaabbbbaaaaabbbbbbaaaabbbabbbba + aabbbbbbbbaaaaabbbbbbbbbbbaaaaabbaaaaaaaaabbbbbbbbbbbbaaaabbbbbbaaaaaaabbbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbaaaaabbbaaaaaaaaabbbbbbbbbbbbaaabbbbbbaaaaaaabbbbbbaaaabbbbbbbba + aabaababbbaaaaabbbbbbbbbbbaaaaabbbaaaaaaaaaabbbbbbbbbbbbaabbbbbbbaaaaaabbabbaaaaabbbabbbba + aabbbaaaaaaaaaaaaabbabbbbbbaaaabbbbbbaababaaaabbbbbbbbbbaaababaaaaaaaabbbbbbaaaaabbbbbbbba + abbaabbbbbaaaabbbaaaaaaabbbaaaabbbbbbaabbbbaaaabbbbbbbbbaaaaaaaaaaaaaabbbbbbbaaabbbbbbbbba + abbabaaabaaaaabbbbbbbbbbbbbaaaabbbbbbaaaabbbaaaabbbbbbbbaaaabaaaaaaaaabbbbbbaaaabbbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbabaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaaabaabbbaaabbbbbbaaaabbbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbaaaabaaaaaabbaaaaaaaaaabbbbbbbaaaaaabbbbbbaaabbbbbbaaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbaaaabaaaaaaabbaaaabbbaabbbbbbbaaaaaaaabbbbbaabbbaaaaaaabbbbbbbbba + abbbbbbbbaaaabbaaaaaabbbbaaabbabbbbaaaabbbbbbbbbbbbbbbbaaaaaabbaaaabaabbbbbbaaaaaaaaabbbba + abbbbbbbbaaaabbbbbbabbbbbaaababbbbbbaaabbbbbbbbbbbbbbbbaaaababbaaaabaabbbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbabbabbbbbaaababbbbbbabbbbbbbbbbbbbbbbbbbaabbababbbaabbbaaaabaaaabbabbbbbba + abbbbbbbaaaaabbbabbabbbbbaabbbbbbbbbbbaaaaaaaaabbabbbbbbbbbbaaaabbaabbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbbaababbbbbbbbaaabbbbbbbbbbbbbbabbbbbbaaaabaabbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbbaaaabbbbbbabaaaabbbbbbbbbbbbbabbbbbbaaaabaabbbbbbbbaaaabbbbbbbbba + bbbbaabbaaaaabbaaaaaabbbbaaaabbbbbbaabbaaaaaabaabbbbbbbbbbbbbaaaababbbbbbbbbaaaabbbabbbbba + bbbbbabbaaaaabbbbbabbbbbbaaaabaabbbaababbabaabbabbbbbbbbbbbbbaaaababbbbbbbbbaaaabbbabbbbba + abbbbbbbaaaabbbbbbabbbbbbaaaaaaaabbbabbaabaaaababbbbbbbbbbbbaaaaaabbbbbbbbbaaaaabbbabbbbba + aaabbbbbaaaabbbbbbaabbbbbaaaaaaaaaababababbaaababbbbbbbbbbbaabbaaabbbbbbbbbaaaaabbbaabbbba + babaaaaaaaaaabbbbbaabbbbbaaabaaaaaaabbaabbabaababbbbbbbbbbaaabbaabbbbaaaabbaaaaabbbaabbbba + bbbbbbbaaaaaabaabaaaaabbbaaabbbbbbaabbababbaabbabbbbbbbbbbaaabbaabbbbbabbabaaaaabbbaabbbba + abbbbbbaaaaabbbbbbabbabbbaaabbbbbbbabbaaabababbabbbbbbbbbaaaabbabbbbbbbbbbbaaaabbbbbbbbbba + abbbbbbaaaaabbbbbbbbbbbbbaaaabbbbbbabbaaaaaaabbbbbbbbbbbbaaaaaabbbbbbbbbbbbaaaabbbbbbbbbbb + abbbbbbaaaaabbbbbbabbabbbaaaabbbbbbabbaaabaabbbbbbbbbbbbaaaaaaabbbbbbbbbbbbaaaaabbbbbbbbba + abbaabbaaaabbbabbbabbabbbaaabbbbbbaabbbaabaaabbabbbbbbbbaaaaaaabbbbbbbbbbbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbabbbabbbbaaabbbbbaabbaaaabaabbabbbbbbbbaabbaabbbaaaaaaabbbaaabbbbbbbbabba + abbbbbbaaaabbbabbaaaabbbbbaaaaaaaaaabbaaabababbabbbbbbbbbbbaabbbbbbbbbbabbbaaabbbbbbbbaabb`, + map `abbaabbbbaabbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbaabbbbbabbbaaaabbbabbbbbbbbbbbbbaabbbbbbba + abbaabbbbbabbbbbbbbaaaaabbbbbabbabbbbbbaaaabbbbbaabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbaabbabbabbaaaaabbbbbabbababbbbaaaabbabbaabaabbabbbaaaabbbbbaabbabbbabbbaabbbbbbba + abbbaaaabaabbabbabbaaaaabaaaaaaaabaabbaaaaabbaaaaaaaaaaabbbaaaabbaabaaaaaaaaabbaaaabbbbbba + abbbaaaabbbbbabbbbbaaaabbbbbbbbbabbbbbaaaaabbabaabbbbbbbbbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbaabababbbbbbbbbaaaabbbbbbbbbabbbbbaaaabbbabbabbbbbbbbbbaaaabbbbbbabbbbbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbbbbabbbbbbbaabbbbbbba + abbbbbbabaaaaaaaabaaaaabbabbabbabbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbaabbabbbbbbbaabbbbbbba + abbbbbbbaabbabbbbbaaaaabbaaaabbabbaabbaaaabbaaaaaababbaaabaaaabbbaaaaabaaabbabbaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbabbbbbbabbbbbbbaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbaaabbabbbbbaaaabbbaabbbbabbaabaaaaabbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaabaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaabbbbbba + abbbbbbaabbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbba + abbbbaaaabbabbabbaaaaaaaaabaabbbbbbaabbbbbbbbbbbbbbbbaaaaabbbaaaaaaaaabbaaaaaabaaaaabbbbba + bbbbbbbaabbabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaaaabbbbbaabbbabbbbbbba + abbbbbbaabbabbabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaabbbbbbabbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbbaaaaabbaababbabaaabbabbbbbbba + abbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbabbaabbabbaaaaaaabbbbbbbbbbabbbbbbbaaaabbbaabaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbababbabbaabbbaaaaaaabaaaababbbaabbbbbbbbbbbbabbbabbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbaabbbbbbbabbbbaabbbbbbabbbbaaaaaabbbbbbbbbbaaaabbaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbabbbbbbbbabbbbaabbbbbaabbbbaaaaaaaababbbbbaaaabbbaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaaabbbbbbbbbbbaabbbaaaaaaaaaaabbaaaabaaaaaabbbbbaaaaabaaabbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaabbbbbbbbbbaaabbaaaaaaaaaaaaabbaaaaaaaaaaabbbbbaabbbaaabbbbbaaaabbbbbba + abbbaaaabbabbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaabbbbbbbbbbaaaabbbbaaaabbbbbba + abbbbaabbaababbaaaaabbbbbaaaabbaaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbbaaaabbbaaaabbbbbba + abbbaaabbbbbbbbaaaaabbbbbbaaabbbabaaaaaaaabbbbaabbbaaaaaabaaaaabbabbbbbbaaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaaaabbbbbbaaabbbabbabbbbaabbbbbbbbbbbbaabbbbaaabbaabbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaaabbbbbbaaaaabbbbbabbbbbabbbbbbbbbbbbabbbbbaaaabaabbbbbbbaabbaaaaabbbbbba + abbbaaabbbbbbbbaaabbbbbbbaaaaaaabbbbbbbbbabbbbbbabbabbbbbabbaaaabbaabbbbbbaaabaaaabbbbbbba + abbbaabbbbbbbbbaaabbbbbbbaaaaaaaabbbbbbbbaabbbbaabbabaabbaaaabaaabaabbbbbbaaabbaaabbbbbbba + abbbaabbabbbbbbaaaababbbbbaaaaaaaabbbbbbbaabbbbaabbaaabbaaabbbbbbabaabbbbaaaabaaaabbbbbbba + abbbbabbbbbabbbaaaaaabbbbbaaaaaaaaabbbbbaaaaaaaaabbaaabbbbbbbbaaaabbabbbbaaaaaaaaabbbbbbba + abaaaabbbbbbbbbaaaabbbbbbbaaaaaaaaabbbbbbaaaaaaabbbaaabbbbbaaaaaaabbabbbbbaaaaaaaabbbbbbba + abbbaaaaaaaaaaaaababbbbbbbaaaaaabaabbbabbaaaaaaaabaaaabbbaaaaabaaabbbbbbbbaaaaaaaabbbbbbba + abbbabbbbbbabbaaaaabbabbbbaaaaabbbaabbbbaaaaaaaabaaaaaaaaaaaaaaaaaabbbbbbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaaabbaabbabaaaaaabbaababbbaabaaaabaabaaaaaaabaaaaaaaabbbbbbbbbbbaaabbbbbbba + abbbaababbbabbaaaabbbbbbbbaaaaaaaaaabbaaaaaaaaabbabbbbaaaaabaaaabaaaabbbbbbbbbaaaabbabbbba + abbaabbabbaaaaaaaaabaaaabbbaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaaaabaaaabbbbaaaaaaaaabbbbbbba + abbaabbabbabbbaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaabbbbbbbbaaaabbbbbbba + abbaabbbbbabbbaaaabbabbbbbbbaaaaaaaaaaaaaaaaaaabbbbaaaaabbbaaaaaaaaaaabbbbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbaababbaaaaaaaaabbabbbbbbbbbbbbbbbaaaaaaaaaabbbbaabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbabbaabbbaaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbaabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbabbbabbbaaaaaaaabbbbabbbaaabbbbbbbba + abbaabbbbabbbaaaaabbbbbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaaaaaabbbbbbbbaaabbbbbbbba + abbaabbbbabbbaaaaaaaaaabbbabaaabbbbbbbbabbbbbbbbbbbbbbbabbbabbaaaaaaabbbbbbbbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbbaabbbbbbbbbbbbbbaaababbaaaaaababbbbbbbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbbbbbbaaaaabbbaabbaaabbbbbbbbbbbbbbaaabaabaaaaaabbbbbbbbbbaaaabbbbbbba + abbabbbbbbbbaaaaabbbbbbbbbaaaaababaabbaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbbabbbaaaabbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbbbaaaaabbbaabbaaaabbabbbbbbbbbbaaaaaaaaaaaabbbbbbbbbbaaaaabbbbbbba + abaabbbbbbbbaaaaaaaaaaaabbaaaaabbbbabaaaaaaaabbbbbbbbbbaaaaaaaaaaabbabbbbbbbbaaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbabaaaaaaaabbbbabbbbbaaaaabaaaaaababbbbbbbbaaaabbbbbbbba + abaabbbbbbbbaaaaabbbbbbbbbaaaaabbbbbbaaaaabaabbbbabbbbbaaaaaaaaaaaababbbabbbbaaaabbbbbbbba + abaabbbbbbbaaaaabbbbbbbbbbaaaaabbbabbaaabbbbbbbbaabbbbbaaaaaaaaaabbaabbbaaaabaaaaabbabbbba + ababbabbabbaaaaabbbbbbbbbbaaaabbbbabbbbabbbbbbabaabbbbbbaabaaaaaabbaabbbbbbbbaaaaabbabbbba + ababbbbbabbaaaaaaaaaaabbbbaaaabbbbbbbabbbbbbbbabbbbbbbbbaabaaaaabbbaabbbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaabbbbaabbbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaaabbaabbbbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaaaaaabbbbbabbbaaaabbbabbbba + abababbabbbaaaaabbbbbabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbabbbaaaabbbabbbba + abbbabbabbaaaaabbbabbabbbaaaaaaaabbbaaaaaababbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbaaaabbbabbbba + abbbbbbbbbaaaaabbbbbbabbbbaaabaaabbaaaaaaaaaaabbbbbbbbbbbbaabbaaaaaabbbbbbbbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbbbbbbaaabbaabbbbaaaaaaaaaabbbbbbbbbbbaaaaaaaaaabbbbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbbbbbaaabaaabbbbaaaaaaaaaaaabbbbbbbbbaaaaaaaaaabbbbbbbbbaaaabbbbbbbba + aabaababbbaaaaabbbbbbbbbbbaaaaaaabbbbbaaabbbbaaaaabbbbbbbbaaaaaaaaaabbaaaabbbaaaabbbbbbbba + aabbbaaaaaaaaaaaaabbbbbbbbbaaaaaababbabbabbbbbbaaabbbbbbbaaaaaabbbbabbbbaabbbaaaabbbabbbba + abbaabbbbbaaaabbbaaaaaaabbbaaaaaabbbbaaaaaaabbbaaabbbbbbbaaaaaabbbbbbbbbbbbbbaaabbbbbbbbba + abbabaaabaaaaabbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaaaaabbbbbbbaaaaaabaaabbbbbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbaaaaaaaaabbbbbbaaaaabbbbbbbbbbbbaaaaabaaaaabbbbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbaaaaaaaaabbbbbbaaaaabbbbbbbbbbbbaaaaabbbaaabbbbbbbbbaaabbbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbaaaaaaaabbbbbbbaaabbbbbbbbbbbbbbbabaabbbbaabbaaaaaaaaaabbbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbaabbbbbbbbaaaaaaababbbba + abbbbbbbbaaaabbbbbbabbbbbaaaaabbabbbbbbbababbbbbbbbbbbaabbbbbaaaababbbbbbbbbaaaaabbbbbbbba + abbbbbbbbaaaabbbabbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaababbbbaaaaaaaaabaaabbbbba + abbbbbbbaaaaabbbabbabbbbbaaaabbabbbbbbaaaaaaaaabbabbbbbabbbbbaaaababbbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbbaaaabaabbbbbaaaabbbbbbbbbbbbbbabbbbbaaaaabbbabbbbbbaaabbbbbbbbbba + abbbaabbaaaaabbabbbabbbbbaaaabaabbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaabbbbbbaabbbaaaabbbabbbbba + bbbbaabbaaaaabbaaaaaabbbbbaaaaaabaabbabaaaaaabaabbbbbbbbabbbaabaabbbbbbbbbbbaaaabbbabbbbba + bbbbbabbaaaaabbbbbabbbbbbbaaaaaaaaaabbabbabaabbabbbbbbbbbbbbaababbbbbbabbbbbaaaabbbabbbbba + abbbbbbbaaaabbbbbbabbbbbbbaaaaaaaaaabbbaabaaaababbbbbbbabbaaaaaabbbbbbbbbbbaaaaabbbabbbbba + aaabbbbbaaaabbbbbbaabbbbbbaaaabbbabbbbababbaaababbbbbbbbbaaaaabbbbbbbbbbbbbaaaaabbbabbbbba + babaaaaaaaaaabbbbbaabbbbbaaaabbbbbbbbbaabbabaababbbbbbbbbaaaaabbbbbaaaaaabbaaaaabbbabbbbba + bbbbbbbaaaaaabaabaaaaabbbbaaaabbbbbbbbababbaabbabbbbbbbbbaaaabbbbbbbbbbbbabaaaabbbbabbbbba + abbbbbbaaaaabbbbbbabbaabbbaaaabbbbbbbbaaabababbabbbbbbbbbaaabbbbbbbabbbbbbbaaaabbbaabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbaaaabbbbbbbbaaaaaaabbabbbbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbb + abbbbbbaaaaabbbbbbabbabbbbaaaaabbabbbbaaabaabbbabbbbbbbbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbba + abbaabbaaaabbbabbbabbabbbbaaaaabaaaabbbaabaaaababbbbbbbbaaabbbbbbbbbbbbabbbaaabbbbbbbbbbba + abbbbbbaaaabbbabbabbbabbbbaaaabaaaaabbabaabaabbabbbbbbbbaaabbbaaaaaaaaaaabbaaabbbbbbbbabba + abbbbbbaaaabbbabbaaaabbbbbbaaabbaaaabbaaabababbabbbbbbabaabbbbbbbbbbbbbbbbbaaabbbbbbbbaabb`, + map `abbaabbbbaabbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbbabbbbbabbbaaaabbbbbbbbbbbbbbbbbaabbbbbbba + abbaabbbbbabbbbbbbbaaaaabbbbbabbabbbbbbaaaabbbbbbabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbaabbabbabbaaaaabbbbbabbababbbbaaaabbbbbaabaabbabbbaaaabbbbbaabbabbbabbbaabbbbbbba + abbbaaaabaabbabbabbaaaaabaaaaaaaabaabbaaaaabbaaaaaaaaaaabbbaaaabbaabaaaaaaaaaabaaaabbbbbba + abbbaaaabbbbbabbbbbaaaabbbbbbbbbabbbbbaaaaabbabbaabbbbbbbbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbaabababbbbbbbbbaaaabbbbbbbbbabbbbbaaaabbbabbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaaaaaaaabaaaaabbabbabbabbbbbbaaaabbbbbbabbbbbbbbbbaaabbbbbbaabbabbbbbbaaabbbbbbba + abbbbbbbaabbabbbbbaaaaabbaaaabbabbaabbaaaaabbaaaaababbaaabaaaabbbaaaaabaaababbbaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbabbbbbbabbbbbbaaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbaaabbabbbbbaaaabbbaabbbbabbbbbbabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaabaaaaabbaaaaaaaaaaaaaaabaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabbbbbbba + abbbbbbaabbbbbbbbbaaaaaaaaaaabbbaaabbbbbbaabbbbbbbbbaabbbbaaaaaaaaaaaaaaaaaaaaaaaabbbbbbba + abbbbaaaabbabbabbaaaaaaaabbbbbbbaaaaabaaaabbbbaaabbbbbbbbbbbbaaaaaaaaabbaabbaabaaabbbbbbba + bbbbbbbaabbabbbbbaaaaaaabbbbbbbbaaaaabaaabbbaaaaaabbbbbbbbbbbbbaabbbaaabbbbbbabbbabbbbbbba + abbbbbbaabbabbabbaaaaaaabbbbbbaaabbbbbaabbaaaaaaaaabbbbbbbbbbbbaabbbaabbbbbbaabbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbbbbaabbbbabbbaaaaaaaaaaaaaabbbbbbbbaaabbaababbaaaaaabaabbbbbba + abbbbbbaabbbbbbbbaaaabbbbbbbbbbabbbbbbbbaaaaaabbaaabbbabbbbbbbbbbbbbbaaaabbbaabaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbaaaaabbbbabbbabbaaaaabbbbbbbbbbaabbbbbbbbaaabbbbbba + abbbbbaabbbbbbbbaaaaabbbbbbbbbbbbaaabbaaaaaaaaaaaaabaaaaaaaabbbbbbbbabbbbbbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbbbbbabbbbaaaabaaaaaaaaaaaaaabaaaabaaaabbbbbbaaabbaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaaabbbbbbbabaaaaaaaaaaaaaaaaaaaaaabbbaabaaaaabbbbbaaabaaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaaabbbbbbaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaaaabbbbbaabaaabbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaabbbbbbaaaaaabbbaaaaaaabbaabbaaabbbbaaaabbaabbbbbbbbaaabbbbbaaaabbbbbba + abbbaaaabbabbbbbaaabbbbbbbaaaaabbbbbababbbbbaabbbbbbbbbbaabbbaaabbbbbbbaaaabbbbaaaabbbbbba + abbbbaabbaababbaaaabbbbbbbbaaaaabbbbbbbbbbbbbabbbbbbbbbbaabbbaaaabbbbbbbaaaabbbaaaabbbbbba + abbbaaabbbbbbbbaaaabbbbbbbaaaaaaaabbbbbbbbbbbabbbbbaabbbaabbbaaaabbbbbbbaaaaaaaaaabbbbbbba + abbbbaabbbbbbbbaaabbbbbbaaaaaaaaaabbbbbbbbbbbabbbabaabbbaaaabbaaaabbbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaabbbbbbbaaaaaaaaaababbbbbbbbaaaaaaaabbaaaabbbbaaaabbbbbbbaabbbaaaabbbbbba + abbbaaabbbbbbbbaaabbbbbbbaaaaaaabaaaaabbbbbbaaaaabaabbbabbabbbbaaaabbbbbbbaaabbbaabbbbbbba + abbbaabbbbbbbbbaaabbbbbbaaaaaaabbbaaaabbbbbaaaaaaaaabbbabbbbaaaaaaabbbbbbaaabbbaaabbbbbbba + abbbaabbabbbbbbaaabbbbbbbaabaaabbbaaaabbbbabaaaaaaaabbaabaaaaabaaaaabbbbbaaaabbaaabbbbbbba + abbbbabbbbbabbbaaaabbbbbbaaabaaabbbbbbbabbbbaaaaaaaaaaaaaaababbbaaaabbbbbaaaabbaaabbbbbbba + abaaaabbbbbbbbbaaaabbbbbbaaaaaaabbbbbbbbbbabaaaaaaaaaabbaaabbabaaaaabbbbbbaaaaaaaabbbbbbba + abbbaaaaaaaaaaaaaabbbbbbbbbaaaaaabaababbaaaaaaaaaaabaabbbaaaaaaaaaaabbbbbbaaaaaaaabbbbbbba + abbbabbbbbbabbaaaaabbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaabbbbbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaaabbbbbbabbbaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaabbbbbbbbbbaaaabbbbbbba + abbbaababbbabbaaaabbbbbbaabbbaaabaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaabbbbabbbbbbaaaabbbbbbba + abbaabbabbaaaaaaaaababbaaaaabbbbbabaaaaaaaabbabbbbbbbbbbbbbaaaaaaaabbbbaaaaaaaaaaabbbbbbba + abbaabbabbabbbaaaaabbbbbaaaabbbbbbbabaaabbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbabbbaaaabbabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbabbbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbaaabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbbbaabbaaabbbaabbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbaabbbaaabbbbbbbba + abbaabbbbabbbaaaaabbbbbbaabbaaababaabbabbbaabbbbbbbbbbbbbbaaaaabaaabbbbbbbbbbbaaabbbbbbbba + abbaabbbbabbbaaaabbaabbbaabbbaabbaaabaabbbaaabbbbbbbbbbbbbaaaaabaaabbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbbabbbaaaabbaabaababaaabbbbbbbbbbbbaaaaaaaaaabbbbbbbabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbaaabaaaabbbaabbbbbbaaabbbbabbbbbbbbaaaaaaaaabbbbabaabbbaaabbbbbbbba + abbabbbbbbbbaaaaabbbbbbbaabaaabbbbaabbbbbaaaabbbbbbbbbbbbbaaaaaaaaabbbbbaaabbbaaabbbbbbbba + abbaaaaaaaaaaaaaabbbbbbbaabaaaabbbaabbbbaaabbbbbbbbbbbbbbbaaaaaaaabbbbbbbabbbbaaabbbbbbbba + abaabbbbbbbbaaaaaaaaaaabaabbaaabbbaabbbaaabbbbbbbbaabbbbbbaaaaaaabbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbbaabaaabbbbabbbbaabbbbbbbbbbabbbbbbaaaaaaabbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaaabbbbbbbaabaaabbbbbbbbbaabbbbbbbbbaabbbbbbaaaaaaabbbbbaaaabbbaaaabbbbbbbba + abaabbbbbbbaaaaabbbbbbbbbabbbabbbbbbbbbaabbbbbbbbbaabbbbbbaaaaaaabbbbaaaaaaabaaaaabbbbbbba + ababbabbabbaaaaabbbbbbbbbbbbaabbbbbbbbbbbabbbbbbbbaabbbbbbaaaaaaaabbbbbbbbbbbaaaabbbabbbba + ababbbbbabbaaaaaaaaabbbbabbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbaaaabbbabbbba + ababbbbbbbbaaaaabbbbbbbbabaaaaaaaaaabbbaabbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbabbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbabaaaaaaaaaabbbaaaaababbbbbbbbbbbbbaaaaaabbbbabbbabbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbbbbabaaaabbbaaabbbaaaaaaaaaabbbbbbbbbbaaaaabbbbbabbaabbbaaaabbbbbbbba + abababbabbbaaaaabbbbbabbbbaaabbbbbaaabbbaaaaaaaaaaabbbbbbbbaaaabbbbbbabbaabbbaaaabbbbbbbba + abbbabbabbaaaaabbbabbabbbbaaabbbbaaaababbaaaaaaaaaaaabbbbbbaaaabbbbbbbbbbbbbbaaaabbbabbbba + abbbbbbbbbaaaaabbbbbbabbbbaaaaaaaaaaabbbbabaabbaaaaaabbbbbbaaaabbbbbbbbbbbbbbaaaabbbabbbba + aabbbbbbbbaaaaabbbbbbbbbbbaaaaaaaaababbbbaaaaabbbbaaabbbbbbaaaabaabbbbbbbbbbbaaaabbbabbbba + abbbbbbbbbaaaaabbbbbbbbbbbbbaaaaabbaabbbbbaaaaaabbaaabbbbbbaaaabaaabbbbbbbbbbaaaabbbabbbba + aabaababbbaaaaabbbbbbbbbbbbaaaabbbababbbbbbaaaaaabbabbbbbbbaabbbaaabbaaaaaabbaaaabbbabbbba + aabbbaaaaaaaaaaaaabbbbbbbaaaabbbbbaaaabbbbbbaaaaabbbbbbbbbaaaabbbaabbbbbbbbbbaaaabbbabbbba + abbaabbbbbaaaabbbaaaaaaabbaaaabbbaaaabbbbbbbbabbbbbbbbbbbbaababbbabbbbbbbbbbbaaaabbbbbbbba + abbabaaabaaaaabbbbbbbbbbbaaaaabbbaaabbbbbbbbbabbbbbbbbbbbbabbaaaaabbbbbbbbbbaaaabbbbbbbbba + abbbbbbbbbaaaabbaaaaabbbbaaaaabbbaaabbbbbbbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbaaaaabbaaaabbbbbbbbbabbbbbbbbbbbbbbbaaabbbbaabbabbbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbaaaaabbaaaabbbbbbbbaabbbabbbbbbbbbbbaaabbbbaaaaaaaaaaabbbbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbbaaaabbbaaabbbbbbbababbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbaaabbbba + abbbbbbbbaaaabbbbbbabbbbbaaaaabbbaaabbbbbbbababbbbbbbbbbbbbbbaaabbbbaabaabbbaaaabbbbbbbbba + abbbbbbbbaaaabbbabbabbbbbaaaaabbaaaabbbbbbbbbbbbbabbbbbbbbbaaaabbbbaaaaaaaaaaaaabaaabbbbba + abbbbbbbaaaaabbbabbabbbbbbaaaabbaaaabbaaaaaaaaabbbababbbbaaaaabbbbbbbbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbbbaaaabbaaaaabaaabbbbbbbbbbaabbbaaaaaabbbbbbaaabbbbbaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbbbaaaabbaaaaabaaaabbbbbbbbbabbbbaaaaabbbbbbaabbbbbbbaaaabbabbbbbba + bbbbaabbaaaaabbaaaaaabbbbbaaaabbbbaabbbbabaaaaaabbbbbbbbaaabbbbbbbbaabbbbbbbaaaabbbabbbbba + bbbbbabbaaaaabbbbbabbbbbbbaaaabbbbbbbbaabaaaabbabbbbbbbaaabbbbbbbbbbababbbbbaaaabbbabbbbba + abbbbbbbaaaabbbbbbabbbbbbbaaaabbbbbbabbbabaaaababbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbabbbbba + aaabbbbbaaaabbbbbbaabbbbbbaaaaabbbbbbbabbabaaababbbbbaaaaabbbbbbbbbbbbbbbbbaaaaabbbabbbbba + babaaaaaaaaaabbbbbaabbbbbbaaaaabbbbbbbbbbbabbababbbbbaaaabbbbbaaaaaaaaaaaabaaaaabbbabbbbba + bbbbbbbaaaaaabaabaaaaabbbbbaaaaaaaaabbabaabaaababbbbbaaaabbbbbbbbbbbabbbbbbaaaaabbbabbbbba + abbbbbbaaaaabbbbbbabbaabbbbaaaaababaabbabaabaababbbbaaababbbbbbabbbbbbbbbbbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbbbbaaaaabaaaabbbabaaaababbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbabbbbbb + abbbbbbaaaaabbbbbbabbabbbbbaaaabbaaaabbabaababbabbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbba + abbaabbaaaabbbabbbabbabbbbbaaaabbbaaabbbabaabababbbbaaaaabbbabaabbbbbbbbbbbaabbbbbbbbbbbba + abbbbbbaaaabbbabbabbbabbbbbaaaabbbaaabaababbabbabbbbaaaaabbbaaaaaaaaaaaaabbaabbbbbbbbbbbba + abbbbbbaaaabbbabbaaaabbbbbaaaaabbbaaabbbabaabababbbbaaaabbbbbbbbbbbbbbbabbbaabbbbbbbbbaaba`, + map `abbaabbbbaabbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbbabbbbbabbbaaaabbbabbbbbabbbbbbbaabbbbbbba + abbaabbbbbabbbbbbbbaaaaabbbbbabbabbbbbbaaaabbbbbbabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbaabbabbabbaaaaabbbbbabbababbbbaaaabbbbbaabaabbabbbaaaabbbbbaabbabbbabbbaabbbbbbba + abbbaaaabaabbabbabbaaaaabaaaaaaaabaabbaaaaabbaaaaaaaaaaabbbaaaabbaabaaaaaaaaaabaaaabbbbbba + abbbaaaabbbbbabbbbbaaaabbbbbbbbbabbbbbaaaabbbbbbaabbbbbbbbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbaabababbbbbbbbbaaaabbbbbbbbbbbbbbbabbabbbbbbabbbbbbbbbbaaaabbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbbabbbbbbbbbaaaabbbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaaaaaaaabaaaaabbabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaabbabbbbbbaaabbbbbbba + abbbbbbbaabbabbbbbaaaaabbaababbabbabbbaaaabbbbbbbbbbbbbabbaaaabbbaaaaabaabbabbbaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbaaaaabaabbbbbbbbbbbbbbaaaabbbabbabbbbbbabbbaaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbaaaaaaaaabaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbaaabbabbbbbaaaabbbbaabbbbaaaaaaabbbaabbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaabaaaaabbaaaaaaaaabbbbaaaaababbbabbbaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaabaaabbbbbbba + abbbbbbaabbbbbbbbaaaaaaabbbbbbbbaaabbbbbbbbaaaaaabaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaababbbbba + abbbbaaaabbabbabbaaaaaabbbbbbbbbaabbbbbbbbaaaaaaabaaabbbbbbbbbbbaaaaaabbaabbaabaabbbbbbbba + bbbbbbbaabbabbbbbaaaaabbbbbbbbbaaabbbaaabaaaaaaaabaaabbbbbbbbbbbbbbbaaabbbbbaabababbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbabbbbbbbbaabbaaaaaaaabaaabbaaaaabbbbbbbbaaabbbbbaabbbbbbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbababbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaabbaaaaaaaabbbbbbba + abbbbbbaabbbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaabbbbbbbaaaabbbabbaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaababbbbbbaaabbbbbbbbaaabbbbbba + abbbbbaabbbbbbbbaaaabbbabbbaaaaaaaaababaaaaaaabaaaaaaabbbbaaababbbbbbaabbbbbbbbaaaabbbbbba + abbbbaaaaaaaaaaaaaaabbbaabbaaaaaaaaabbbbbbabbbbbbbabbbbbbbaaabaabbbbbabbaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaabbbbbabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbbbbaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaabbbbbababaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaaabbbbbaaaabbbbbba + abbbbaabbbbbbbbbaabbbbbaaaaaaabbaabbbbbbbbbbbbbbbaabbaaabbabbaaaaabbbbbaaabbbbbaaabbbbbbba + abbbaaaabbabbbbbaabbbbbaaaaababbaabbbbbabbbbbbbbaaaaaaaabbbbbaaaaabbbbbaaaabbbbaaaabbbbbba + abbbbaabbaababbaaabbbbbaaaaaaabbaabbabaaabbbbabbaaaaaaaabbbbbbaaaabbbbbbaaaabbbaaaabbbbbba + abbbaaabbbbbbbbaaabbbbbaaaaaaabbaaabbaaaaabbbbbaaaaaaaaabbbbbabaaabbbbbbaaaaabbaaaabbbbbba + abbbbaabbbbbbbbaaabbbbbaaaaababbaaaababaaabbbbabaaaaaaaabbbbbaaaaabbbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaabbbbbaaaaaaabbaaabaabbaaabbbbbaaaaaaaabbaaaaaaaabbbbbbbbaaabbaaaabbbbbba + abbbaaabbbbbbbbaaabbbbbaaaaaaaabbbbbbbbbbaabbbabaaaaaaaabbaaaaaaaabbbbbbbbaaabbaaabbbbbbba + abbbaabbbbbbbbbaabbbbbbbbbaaaaabbbbbbbbbaaaabaaaaaaaaabbbbaaaaaaaabbbbbbbbaaabbaaabbbbbbba + abbbaabbabbbbbbaaabbbbbbbbaaaaaaaaaabaaaaaaaaaaaaaaaaaaabbaaaaaaaabbbbbbbaaaabbaaaabbbbbba + abbbbabbbbbabbbaabbbbbbaabaaaaaaaaaaaaaaaaaabaaaaaaaaabbaaaaaaaaaabbbbbbbbaaabbaaabbbbbbba + abaaaabbbbbbbbbaabbbbbbaabbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaaaaaaabbbbbbbbaaaaaaaabbbbbbba + abbbaaaaaaaaaaaaabbbbbbaaabbbaababbaaaaaaaaaaaaaaaaaaabbbbbaaaaaaabbbbaaabaaaaaaaabbbbbbba + abbbabbbbbbabbaaaabbbbbaaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaaaaaabbbbaabbabbbaaaabbbbbbba + abbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbaaaabbbbbbba + abbbaababbbabbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbaabbabbbaaaabbbbbbba + abbaabbabbaabaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbaaaaaaaaaaaabbbbbbba + abbaabbabbabbbaaaabbbbaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbaaabbbbbbbba + abbaabbbbaabbaaaaabbbbaaaaabbbbbbbabbabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbaaaaabbbbbbbabaabbbbabbbbaaabbbbbbbbbaaaaaaabbbabbbaabbbaaaabbbbbbba + abbaabbbbbbbbaaaaabbbbaaaabbbbbbbbababbbbbabbbbbabbbbbbbbbbaaaaaaabbbabbaaabbbaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbaaaaabbbbbbbaaaabbbaaabbbaaabbbbbbbbbaaaaaabbbbbbbbaabbbaaaabbbbbbba + abbaabbbbabbbaaaabbbbbaaaaabbbbbbbabbabbbaaaaaaaaaabbbbbbbbaaaaaabbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbabbbaaaabbbbbaaaabbbbbbbbabbabbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbaaabbbbbbbbbbbabbbbbbbbbbaaabbbbbbbbaaaaabbbbbbbbbaabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbaaabbbbbbbbbbbabbbbbaabbbbbbbbbbbbbbaaaabbbbaaaaabaabbbaaabbbbbbbba + abbabbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbaaababbbbaaabbbbbbbba + abbaaaaaaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbaaabbbbbbbba + abaabbbbbbbbaaaaabaabbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbaaabbbaaaaaaabbbbbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbaaaaabbbaaaaaaaaabbbbbbbabbbbbbbbbbbbbbaaabbbbaaaaaaabbbaaaabbbbbbbba + abaabbbbbbbaaaaabbbbbaaaaabbaaaaaaaaaaabaaaaaaabbbbbbbbbbbbbaabbbbaaaaaaaaaaaaaaaabbbbbbba + ababbabbabbaaaaabbbbaaaaabbbbababaaaaaaaaaaaaaaaaaaabbbbbbbbaabbbbbbbbbbbbbbbaaaaabbabbbba + ababbbbbabbaaaaaabbbbaaabbbbbbbbbbbbbaabaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaabbbaaabbbbbbbaaaabbbaaaaaaaaaaaabbbbaaabbbbbbabbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaabbbaaabbbbbbaaaabbbbaaaaaabbaaaabbbbaaaabbbbbabbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaabbbaaaaaaaaaaaaaabbbbaaaaabbbbaabbbaaaaabbbbbabbbabbbaaaabbbbbbbba + abababbabbbaaaaabbbbbaaabbbaaaaaaaaaaabaaabbbbaaaaabbbabbbbbabaabbbbbabbaabbbaaaabbbbbbbba + abbbabbabbaaaaabbbbbbaaabbbaaabaaaabbbbaaabbbbbaaaaabbbbbbbbabbabbbbbbbbbabbbaaaabbbabbbba + abbbbbbbbbaaaaabbbbbbaaabbbaaabbbbbbbbaaaabbbbbaaaabbbbbbbbbaaaabbbbbbbbbabbbaaaabbbabbbba + aabbbbbbbbaaaaabbbbbbaaabbbaaabbbbbbbbaaabbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbabbbba + abbbbbbbbbaaaaabbbbbbbaaabbaaabbbbbbbbaaabbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbbabbbba + aabaababbbaaaaabbbbbbbaaabbaaaabbbbbbbaaabbbbbbbaabbbbbbbbbbaaabbaaaaaaaaaabbaaaabbbabbbba + aabbbaaaaaaaaaaaaabbbbaaabbaaaaabbbbbaaaabbbbbbbaabbbbbbbbbaaabbbbbbaabbabbbbaaaabbbabbbba + abbaabbbbbaaaabbbaaaabaaabaaaabbbbbbbaaaabbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbba + abbabaaabaaaaabbbbbbbbbaabbaaabbbbbbbbaaabbbbbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaabbbaabbaaabbbbbbbaaaabbbbbaaaaabbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbaaaabbbbabbaaabaaaaaaaabbabbbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbaaabbbbaaaaaabbbbbbbaaaaaaaaaaaaabbbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbbaaaabbbbbaaaaabbbbbaabbbbbbbaabaabbbbbbbbbbbbbbbbbaaaabbbaabbbba + abbbbbbbbaaaabbbbbbabbbbbbaaaabbbbbaaaaabbbaabbbbbbbbaaaabbaabbaaaaaabbbabbbaaaabbbbbbbbba + abbbbbbbbaaaabbbbbbabbbbbbaaaabbbbbaabbbbbbabbbbbaaabaaaabbbbbbbbaaaaaaaaaaaaaaaaababbbbba + abbbbbbbaaaaabbbabbabbbbbbaaaabaabbbbbaaaaaaaaabbabbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbaabbbbbbabbabbaabbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbbbaaaababbbbbbaaaaaaaaabbbbbaaaaabbbbbbbbbbaaababbbbaaaabbbbbbbbba + bbbbaabbaaaaabbaaaaaababbbaaaabaabbbbbbbabaababaabbbbaaaabbbbbbbbbbbabbbbbbbaaabbbbabbbbba + bbbbbabbaaaaabbbbbbbbbbbbbaaaabbaaaabbaabaaaaaababbbbaaaabbbbbbbbbbbabaabbbbaaabbbbabbbbba + abbbbbbbaaaabbbbbbabbbbbbbbaaaabbaaaabbabbaaaabaabbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbabbbbba + aaabbbbbaaaabbbbbbaabbabbbbaaaabbbaaaaababbaaabbabbbaaaabbbaabbabbbbbbbbbbbaaaabbbbabbbbba + babaaaaaaaaaabbbbbaabbbbbbbaaaabbbbaabbabbabaabbabbbaaaabbbbaaaaaaaaaaaaabbaaaabbbbabbbbba + bbbbbbbaaaaaabaabaaabbbbbbaaaaabbbbbabbbaabaaabbbbbbaaaabbbbbbbbbbbbabbbabbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbabbaaaaaaabbbbaabbabaabaababbaaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbaabaaaabbbbaabbbabaababbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbb + abbbbbbaaaaabbbbbbbbbbbbaabbaaabbbbbabbabaababbbbbbbaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbba + abbaabbaaaabbbabbbbbbbbaabbbaaabbbbaabbbabaababbbbbbaaaabbaaabaabbbbbbbabbbaabbbbbbbbbbbba + abbbbbbaaaabbbabbabbbbaaabbbaaabbbbaabbababbaababbbaaaaabbbaaaaaaaaaaaaabbbaabbbbbbbbbbbba + abbbbbbaaaabbbabbabbbaaaabbbaaabbbbaabbbabbababbbbbaaaaabbbbbbbbbbbabbbabbbaabbbbbbbbbaaba`, + map `abbaabbbbaabbbbbbbbbaaaabbbbbabbabbbbbbaaaabbbbbbabbbbbabbbaaaabbbabbbbbabbbbbbbaabbbbbbba + abbaabbbbbabbbbbbbbaaaaabbbbbabbabbbbbbaaaabbbbbbabbabbabbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbaabbabbabbaaaaabbbbbabbababbbbaaaabbbbbaabaabbabbbaaaabbbbbaabbabbbabbbaabbbbbbba + abbbaaaabaabbabbabbaaaaabaaaaaaaabaabbaaaaabbaaaaaaaaaaabbbaaaabbaabaaaaaaaaaabaaaabbbbbba + abbbaaaabbbbbabbbbbaaaabbbbbbbbbabbbbbaaaabbbbbbaabbbbbbbbbaaaabbbbbbabbaabbabbaaabbbbbbba + abbbaabababbbbbbbbbaaaabbbbbbbbbbbbbbbabbabbbbbbabbbbbbbbbbaaaabbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbbabbbbbbbbbaaaabbbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaaaaaaaabaaaaabbabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaabbabbbbbbaaabbbbbbba + abbbbbbbaabbabbbbbaaaaabbaababbabbbbbbaaaabbbbbbbbbbbbbabbaaaabbbaaaaabaabbabbbaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbaaaaabaabbbbbbbbbbbbbbaaaabbbabbabbbabbabbbaaaabbbbbba + abbbbabbaabbbbbbbbaaaabbbbbbbbbbaaaaaaaaabaaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbba + abbbbbbaaabbabbbbbaaaabbbbaabbbbaaaaaaabbbaabbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaabaaaaabbaaaaaaaaabbbbaaaaababbbabbbaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaabaaabbbbbbba + abbbbbbaabbbbbbbbaaaaaaabbbbbbbbaaabbbbbbbbaaaaaabaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaababbbbba + abbbbaaaabbabbabbaaaaaabbbbbbbbbaabbbbbbbbaaaaaaabaaabbbbbbbbbbbaaaaaabbaaabaaaaaabbbbbbba + bbbbbbbaabbabbbbbaaaaabbbbbbbbbaaabbbaaabaaaaaaaabaaabbbbbbbbbbbbbbbaaabbbabbbbbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbabbbbbbbbaabbaaaaaaaabaaabbaaaaabbbbbbbbaaabbbababbbbabbbbbbba + abbbbbbaabbabbabbaaaabbbbbbbababbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaabbaaabaababbbbbbba + abbbbbbaabbbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaabbbbbbbaaaabbaabbaaaabbbbbba + abbbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaababbbbbbaaabbbbbbbbaabbbbbbba + abbbbbaabbbbbbbbaaaabbbabbbaaaaaaaaababaaaaaaaaaaaaaaabbbbbaababbbbbbaaabbbbbbbaaabbbbbbba + abbbbaaaaaaaaaaaaaaabbbaabbaaaaaaaaabbbbbaabbbbbbbabbbbbbbaaabaabbbbbabbaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaaabbbbbabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbbbbaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbaaabbbbbababaaabaaaabbbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbaabbbbbaaaabbbbbba + abbbbaabbbbbbbbbaabbbbbaaaaaaabbaabbbbbbbbbbbbbbbabbbaaaababbaaaaabbbbbaaabbbbbaaaabbbbbba + abbbaaaabbabbbbbaabbbabaaaaabaabaabbbbbabbbbbbbbaaaaaaaabbbbbaaaaabbbbbaaaabbbbaaaabbbbbba + abbbbaabbaababbaaabbbbbaaaaaaaaaabbbabaaabbbbbbbaaaaaaaabbbbbbaaaabbbbbbaaaabbbaaaabbbbbba + abbbaaabbbbbbbbaaabbbbbaaaaababaaaabbaaaaabbbbbaaaaaaaaabbbbbabaaaabbbbbbaaaabbaaaabbbbbba + abbbbaabbbbbbbbaaabbbbbaaaaaaabbaaaababaaabbbbabaaaaaaaabbbbbaaaaaabbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaabbbbbaaaaaaabbaaabbabbaaabbbbbaaaaaaaabbaaaaaaaaabbbbbbbaaaabbaaabbbbbba + abbbaaabbbbbbbbaaabbbbbaaaaaaaabbbbbbbbbbaabbbabaaaaaaaabbaaaaaaaabbbbbbbbaaabbaaabbbbbbba + abbbaabbbbbbbbbaabbbbbbbbbaaaaabbbbbbbbbbaaabbaaaaaaaabbbbaaaaaaaabbbbbbbbaaabbaaabbbbbbba + abbbaabbabbbbbbaaabbbbbbbbaaaaaaaaaaaabaaaaaaaaaaaaaaaaabbaaaaaaaabbbbbbbaaaabbaaabbbbbbba + abbbbabbbbbabbbaabbbbbbaabaaaaaaaaaaaaaaaaaabaaaaaaaaabbaaaaaaaaaabbbbbbbbaaabbaaabbbbbbba + abaaaabbbbbbbbbaabbbbbbaabbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaaaaaaabbbbbbbbaaaaaaaabbbbbbba + abbbaaaaaaaaaaaaabbbbbbaaabbbaababbabaaaaaaaaaaaaaaaaabbbbbaaaaaaabbbbaaabaaaaaaaabbbbbbba + abbbabbbbbbabbaaaabbbbbaaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaaaaaabbbbaabbbbbbaaaabbbbbbba + abbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbaaaabbbbbbba + abbbaababbbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbaabbbbbbaaaabbbbbbba + abbaabbabbaabaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbaaaaaaaaaaaabbbbbbba + abbaabbabbabbbaaaabbbbaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbaaabbbbbbbba + abbaabbbbaabbaaaaabbbbaaaaabbbbbbbabbabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbaaaaabbbbbbbabaabbbbabbbbaaabbbbbbbbbaaaaaabbbbabbbaabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbaaaabbbbbbbbababbbbbabbbbbaabbbbbbbbbaaaaaaabbbabbaaabbbaaabbbbbbbba + abbaabbbbbbbbaaaaabbbbaaaabbbbbbbbabaabbbaaabbbaaabbbbbbbbbaaaaaabbbbbbbbaabbbaaaabbbbbbba + abbaabbbbabbbaaaabbbbbaaaabbbbbbbbaaaabbbaaaaabaaaabbbbbbbbbaaaaabbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbabbbaaaabbbbbaaaabbbbbbbbabbabbbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbaaabbbbbbbbbbbabbbbbbbbbbbabbbbbbbbbaaaaabbbbbbbbbaabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbbbaaabbbbbbbbbbbabbbbbabbbbbbbbbbbbbbbaaaabbbbabaaabaabbbaaabbbbbbbba + abbabbbbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbaaaabaabbbaaabbbbbbbba + abbaaaaaaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbaaabbbbabbba + abaabbbbbbbbaaaaabaabbbaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbbbaaabbbaaaaaaabbbbbbbaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaabbbbbaaaaabbbaaaaaaaaabbbbbbbabbbbbbbbbbbbbbaaabbbbaaaaaaabbbaaaabbbbbbbba + abaabbbbbbbaaaaabbbbbaaaaabbaaaaaaaaaaabaaaaaaabbbbbbbbbbbbbaabbbbaaaaaaaaaaaaaaaabbbbbbba + ababbabbabbaaaaabbbbaaaaabbbbababaaaaaaaaaaaaaaaaaaabbbbbbbbaabbbbbbbbbbbbbbbaaaaabbabbbba + ababbbbbabbaaaaaabbbbaaabbbbbbbbbbbbbaabaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaabbbaaabbbbbbbaaaabbbaaaaaaaaaaaabbbbaaabbbbbbabbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaabbbaaabbbbbbaaaabbbbaaaaabbbaaaabbbbaaaabbbbbabbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaaabbbbbaaabbbaaaaaaaaaaaaaabbbbaaaaabbbbaabbbaaaaabbbbbabbbabbbaaaabbbbbbbba + abababbabbbaaaaabbbbbaaabbbaaaaaaaaaaabaaabbbbaaaaabbbabbbbbabaabbbbaabbbabbbaaaabbbbbbbba + abbbabbabbaaaaabbbbbbaaabbbaaabaaaabbbbaaabbbbbaaaaabbbbbbbbabbabbbbbbbbbabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaabbbaaabbbbbbbbbaaabbbbbaaaabbbbbbbbbaaaabbbbbbbbbabbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbbaaaabbaaabbbbbbbbaaaabbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbbaaabbaaabbbbbbbbaaabbbbbbbaabbbbbbbbbbaaabbbbbbbbbabbbbaaabbbbbbbbba + aabaababbbaaaaabbbbbbbaaabbaaaabbbbbbbaaabbbbbbbaabbbbbbbbbbaaabbaaaaaaaaabbbaaaabbbbbbbba + aabbbaaaaaaaaaaaaabbbbaaabbaaaabbbbbbbaaabbbbbbbaabbbbbbbbbaaabbbbbbaabbabbbbaaaabbbabbbba + abbaabbbbbaaaabbbaaaabaaabaaaabbbbbbbaaaabbbbbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbabbbba + abbabaaabaaaaabbbbbbbbbaabbaaababbbbbbaaabbbbbbbaaabbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaabbbaabbaaabbbbbbbbaaabbbbbbaaaabbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbbbaaabbbbbaaaaabbbbabbaaabaaaaaaaabbabbbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbaaabbbbaaaaaabbbbbbbaaaaaaaaaaaaaabbbbbbbba + abbbbbbbbaaaaabaaaaaabbbbbaaaabbbbbaaaaabbbbbaaabbbbbbaabaabbbbbbbbbbbbbbbbbaaaabbaaabbbba + abbbbbbbbaaaabbbbbbabbbbbbaaaabbbbbaaaaabbbaababbbbbbaaaabbaabbaaabaabbbabbbaaaabbbbbbbbba + abbbbbbbbaaaabbbbbbabbbbbbaaaabbbbbaabbbbbbabbbbbaaabaaaabbbbbbbaaaaaaaaaaaaaaaabbbabbbbba + abbbbbbbaaaaabbbabbabbbbbbaaaabaabbbbbaaaaaaaaabbabbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbaabbbbbbaababbaaababbbbaaaabbbbbbbbba + abbbaabbaaaaabbabbbabbbbbbaaaaaabbbbbbaaaaaaaaabbbbbaaaaabbbbbbbbbbbabbbbbbbaaaabbbbbbbbba + bbbbaabbaaaaabbaaaaaababbbaaaabaabbbbbbbabaababaabbbbaaaabbbbbbbbbbaabbbbbbbaaabbbbabbbbba + bbbbbabbaaaaabbbbbbbbbbbbbbaaabaaaaabbaabaaaaaababbbbaaaabbbbbbbbbbabbaabbbbaaabbbbabbbbba + abbbbbbbaaaabbbbbbabbbbbbbbaaaabaaaaabbabbaaaabaabbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbabbbbba + aaabbbbbaaaabbbbbbaabbabbbbaaaabbbaaaaababbaaabbabbbaaaabbbaabbabbbbbbbbbbbaaaabbbbabbbbba + babaaaaaaaaaabbbbbaabbbbbbbaaaabbbbaabbabbabaabbabbbaaaabbbbaaaaaaaaaaaaabbaaaabbbbabbbbba + bbbbbbbaaaaaabaabaaabbbbbbaaaaabbbbaabbbaabaaabbbbbbaaaabbbbbbbbbbbbabbaabbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbabbaaaaaaabbbbaabbabaabaababbbaaaaabbbbbbbbbbbbbbbbbbbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbbbbbaabaaaabbbbbabbbabaababbbbbaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbb + abbbbbbaaaaabbbbbbbbbbbbaabbaaabbbbbabbabaababbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbba + abbaabbaaaabbbabbbbbbbbaabbbaaabbbbaabbbabaababbbbbbaaaabbaaabaabbbbbbbabbbaabbbbbbbbbbbba + abbbbbbaaaabbbabbabbbbaaabbbaaabbbbaabbababbaababbbbaaaabbbaaaaaaaaaaaaabbbaabbbbbbbbbbbba + abbbbbbaaaabbbabbabbbaaaabbbaaabbbbaabbbabbababbbbbbaaaabbbbbbbbbbbabbbabbbaabbbbbbbbbaaba`, + map `abbaabbbbaabbbbbbbbbaaaabbbbbabbbbbbbbbabaabbbbbaabbbbbbbbbaaaabbbabbbbbabbbbbbbaabbbbbbba + abbaabbbbbabbbbbbbbaaaaabbbbbabbbbbbbbaabbbbbbbbaabbabbbbbbaaaabbbbbbabbabbbbbbbaabbbbbbba + abbbaaabbaabbabbabbaaaaabbbbbabbbbbbbbbbbbbbbbbbaabaabbbbbbaaaabbbbbaabbabbbabbbaaabbbbbba + abbbaaaabaabbabbabbaaaaabaaaaaabbbbbbbbabbbbbbbbbaaaaaaabbbaaaabbaabaaaaaaaaabbbaaabbbbbba + abbbaaaabbbbbabbbbbaaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbaaaabbbbbbabbaabbaabaaabbbbbbba + abbbaabababbbbbbbbbaaaabbbbbbbbbbbbbaaaaaabaababbbbbbbbbbbbaaabbbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaabbbbbbbbaaaabbbbbbbbbbbaaaaaaaabbaabbbbbbbbbbbbbaaabbbbbbbbbbabbbbbbaaabbbbbbba + abbbbbbabaaaaaaaabaaaaabbabbbbbbbaaaaaaaaabbbaabbbbbbbbbbbaaaaabbbbbaabbabbbbbbaaabbbbbbba + abbbbbabaabbabbbbbaaaaabbbbbbbbbaaaaaaaaabbbaabbbbaaabbbbbbaaaabbaaaaabaabbabbbaaaabbbbbba + abbbbbbaaabbbbbbbbaaaabbbbbbbbbabaaaabbabbbaabbaaaaaaabbbbbaaabbbbbbabbbabbabbbaaaabbbbbba + abbbbbbbaabbbbbbbbaaaabbbbbbaabbbaaaaabbbaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbbaaabbabbbbbaaaabbbbbbaabbbbbaabbbbaaaaaaaaaaabaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaabaaaaabbaaabbbaaababbbabbbabbbaaaaaaaabaaaaaaaaaabbbbbaaaaaaaaaaaaaabaaaabbbbbba + abbbbbbaabbbbbbbbaaabbbbbbabbbaaaaabbbbbaaaaaaaabaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaabbbbbbba + abbbbaaaabbabbabbaaabbbbbbbbbbaaaabaaabbaaaaaaaaaaaaaaaaaaaaaabbbbaaaabbaaaaaaaaaabbbbbbba + bbbbbbbaabbabbbbbaabbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabbbbbbaaabbabbbbbaaabbbbbbba + abbbbbbaabbabbabbaabbbbbbabbbaaaaaaaaaaaabbbbaaaaaaaaabaabbbbabbbbbbaabbbabbbbbbbbbbbbbbba + abbbbbbaabbabbabbaabbbbaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbaaabaabbbbbbbbba + abbbbbbaabbbbbbbbaabbbaaaabbbbaaaabaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbaababbaabbaaaabbbbbba + abbbbbbbbbbbbbbbbabbbbaaaabbbbaaaaaaaaaabbbbabbbbbbbbabbbaaaaaabbbbbbaaabbbbbbbbaaabbbbbba + abbbbbaabbbbbbbbaabbbaaaaabbabaaaaaabaaabbbbabbbbbbbbaaaaaaaaaaaabbbbaaabbbbbbbbaaabbbbbba + abbbbaaaaaaaaaaaaabbaaaaaabaaaaabbbbbbbbbbbaabbbbbbbaaaaaaaabbbaabbbbbbaaabbbbbaaaabbbbbba + abbbbbaabbbbbbbbaabbaabbaabaaaaabbbbbbbbbbbbabbbbbbaaaaaaaaabbbaabbbbbbbaabbbbbaaaabbbbbba + abbbbbabbbbbbbbbabbbaaaaaabbabaabbbbbbbbbbbbbabbbbaaaaaaaaabbbbaabbbbabaaabbbbbaaaabbbabba + abbbbaabbbbbbbbbabbbbaaaaaaaabaaabbbbbbbbbaaaaaaaaaaaaaaaaabbbaabbbbabbaaabbbbbaaaabbbbbba + abbbaaaabbabbbbbaabbbaaaaaabbbaaabbbbabbbaaaaaaabbbaaaaaaaabbbaabbbbbbbaaaabbbbaaaabbbbbba + abbbbaabbaababbaaabbbaaaaaaabaaabbbbbabbbbbaaaabbbbaabaaaaabbbaaabbbbbbbaaaabbbaaaabbbbbba + abbbaaabbbbbbbbbaabbbbbaaaaabbbbaaabaabbbbbbbaaabaaaabaaaaabbaaaabbbbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaabbbbbaaaabbbbbaaaaaaaaabbabaaaaaaaaaaaaabbaaaaabbbbbbbbaaaaaaaaaabbbbbba + abbbbaabbbbbbbbaaabbbbbaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaabbbbabbbbaaaabbaabbbbbbba + abbbaaabbbbbbbbaaabbbbaaaaaaaabbaaaabaaaaaaaaaaaaaaaaaaaabbaaaaaabbbbbbbbbaaaaaaaabbbbbbba + abbbaabbbbbbbbbaabbbabaaaaaaaabbbaaabaaaabaaaaaaaaaaaaaabbbaaaaaabbbbbbbbbaaaaabbabbbbbbba + abbbaabbabbbbbbaabbbbbaaaaaaaabbbbbabbbbabaaaaaababbbbbbbbbbaaaaabbbbbbbbaaaaaabaabbbbbbba + abbbbabbbbbabbbaabbbbbaaaaaaabbbbbbbbbbbbbbbaababbbbbbbbbbbbaaaabbbbbbbbbbaaabaaaabbbbbbba + abaaaabbbbbbbbbabbbbbaaaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbaaaabbbbbbbbbbaaabaaaabbbbbbba + abbbaaaaaaaaaaaabbbbbaaaaaabbbbbbbbbbbbabbbbabbbbbbbbbbbbbbbaaaabbbaaaaaabaaaaaaaabbbbbbba + abbbabbbbbbabbaabbbbbaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaabbbbbbaaaabbbbbbba + abbbbbbbbbbbbbabbbbbbbaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbba + abbbaababbaabbaabbbbbbaaaaaabbbbbbbaaabbbbbbbbbbbbaabbbbbbbbaaaabbaaaaaabbbbbbaaaabbbbbbba + abbaabbabbaabaaaabbbbaaaaaaabbbbbbbaaaaabbbbbabbbbaabbbbbbbbaaaabbbbbaaaaaaaaaaaaabbbbbbba + abbaabbabbabbbaaabbbbaaaaaaabbbbbbbaaaaabbbbbaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbba + abbaabbbbaabbaaaabbbbaaaaaabbbbbbbbbbaaabbbbbabaaaaaabbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbabababaabbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbaaaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaabbbbbaabaaabbbaaabbbbbbbba + abbaabbbbbbbbaaaabbbbaaaaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbaabbbaaaabbbbbbba + abbaabbbbabbbaaaabbbbaaaaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbba + abbaabbbbabbbaaaabbbbaaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbabbbaaaabbbbbbba + abbaabbbbbbbbaaaabbbbaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbaaabbbbbbbba + abbaabbbbbbbaaaaabbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbaaaaaaabaabbbaaabbbbbbbba + abbabbbbbbbbaaaabbbaaaaaaabbbbbaaaaaaaaabbbbbbbbabbbbbbbbbbbabbbbbbbaaaabaabbbaaabbbabbbba + abbaaaaaaaaaaaaabbaaaaaaaabbbbbaaaaaaaaaaababbbbabbbbbbbbbbbabbbbbbbbbbbbabbbbaaabbbbabbba + abaabbbbbbbbaaaabbaaaabaabbbbbbbbaaaaaaaaaaaabbaaaaaaaabbbbbabbbbbbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaabbaaaabaabbbbbabbbbbbbbbaaaaabbaaaaaaaaaaabbabbbbbbbbbbbbbbbbbaaabbbbbbbba + abaabbbbbbbbaaaabbaaaabaabbbbbbbbbbbbbbbbaaaabbbaaaaaaaaaaababbbaaaaaaaaaabbbaaaabbbbbbbba + abaabbbbbbbaaaabbbaaaababbbbbbbbbbbbbbbbbaaaabbbaaaaabbbaaababbbaaaaaaaaaaaaaaaaabbbbbbbba + ababbabbabbaaaabbbaaaababbbbbbbbbaaaaaaaaaaaabbbbaaaabbbaaababbbbbbbbbbbbbbbbaaaabbbabbbba + ababbbbbabbaaaabbbbaaaaabbbbbbbbbbaaaaaaaabaabbbbbaaabbbbabaabbbbbbbbbbbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaabbbbaaaaabbbbbbbbbbaaaabbbbbaaabbbbaaaaabbabbbbbbbabbbabbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaabbbbaaaaabbbbbbabbbbbbbbbbbbaabbbbbaaaabbbabbbbbbbabbbabbbbbbbaaaabbbbbbbba + ababbbbbbbbaaaabbbbaaaaabbbbbaaabbbbbbbbbbbaabbbbbbaabbbbabbbbbbaabbbabbbabbbaaaabbbbbbbba + abababbabbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbabbbbbbbbbbaabbbabbbaaaabbbbbbbba + abbbabbabbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbaaaaaaabbbbbbbbbbbbbbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbabbbaaaabbbbbbbba + aabbbbbbbbaaaaabbbbbaaaaaaabbbbaabbbbbbbbaaaabbbbbbbbbaaaabbbbbbbbbbabbbbabbbaaaabbbbbbbba + abbbbbbbbbaaaaabbbbbbaaaaaabbbbbaabbbbbbbaaaabbbbbbbbaaaaabbbbaaaabbbbbbabbbbaaabbbbbbbbba + aabaababbbaaaaabbbbbbbaaaaabbbbbabbbbbbbbaaaabbbbbbbbbaaaabbbaaaaaaaaaaaaabbbaaabbbbbbbbba + aabbbaaaaaaaaaaaaabbbbbbaaaaaabbbbbbbbbbbaaaabbbbaaabbbaaabbbbbbabbbaabbbbbbbaaaabbbbbbbba + abbaabbbbbaaaabbbaaaabbbaaaaabbbbbbbbbbbbbaaabbbbbaabbbaabbbbbbbbbbbbbbbbbbbbaaaabbbabbbba + abbabaaabaaaaabbbbbbbbbbbaaaabbbbbbbbbbbbaaaabbbbbabbbaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + abbbbbbbbbaaaabbaaaaabbbaaaaabbbbbbbbbbbaaaaabaaaaabbbaaabbbbabbabbbbbbbbbbbaaaaabbbbbbbba + abbbbbbbbbaaaabbbbbbbbbbaaaaaabbbbbbbbbbaaaaaaaaaaabbaaaabbbaaaaaaaaaaabaabbaaaaabbbbbbbba + abbbbaabbaaaaabbbbbbbbbbbaaaaabbbbbbbbbbaaaaabbbbbabbaaaabbbbbbbabbaaaaaaaaaaaaabbbbbbbbba + abbbbbbbbaaaaabbaaaaabbbbaaaaabbbbbbbaababbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaabbaaabbbba + abbbbbbbbaaaabbbbbbabbbbbaaaaabbbbbaaaababbbbbbbbbabaaaabbbbaaaaaabaaabaabbbaaaabbbbbbbbba + abbbbbbbbaaaabbbbbbabbbbbaaaaabbbbbbbbbbaaaaaaaabaaaaaaabbbbbaabaaaaaaaaaaabaaaaabbabbbbba + abbbbbbbaaaaabbbabbabbbbbaaaabbbbbbaabbaabbbbbabbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbbbbbbbaaaabbbbbbbabaaabbbbbbbbbaabaabbbbaaaababbbaaaabbbbaaaabbbbbbbbba + abbbaabbaaaaabbbbbbabbbbbbaaabbbbbbbbbaaaaaaaaaaabaabaaabbbbbbbbbbbbabbbbbbbaaaabbbbbbbbba + bbbbaabbaaaaabbaaaaabbbbbaaaaabbbbbbbbbbababaabbabaabbbaabbbbbbbbbbaabbbbbbbaaabbbbabbbbba + bbbbbabbaaaaabbbbbbbbbbbaaaaaabbaaaabbbbbabaaaababaabbbaabbbbbbbbbbabbbabbbbaaabbbbabbbbba + abbbbbbbaaaabbbbbbbbbbbaaaaaabbbbaaaaababbabaabbabaabbbaabbbbbbbbbbbbbbbbbbbaaabbbbabbbbba + aaabbbbbaaaaabbbbbbbbbaabbaaaabbbbbaaabbbababbababbbbbaabbbaabbabbbbbbbbbbbaaaabbbbabbbbba + babaaaaaaaaaabbbbbbbbbaabbaaabbbbbbaaababbabaabbabbabbaabbbaaaaaaaaaaaaaaabaaaabbbbabbbbba + bbbbbbbaaaaaabaabbbbbaabbbaaaabbbbbbaabbaababaababbabbaabbbbbbbbbbbbaabaabbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbaaabbbaaaaaaabbbbababbabaabbabbbbbaabbbbbbbbbbbbbbbbbbbaaaabbbbabbbbba + abbbbbbaaaaabbbbbbbbaaabbbaaaaabbbbbaabbaabaabababbbbbaabbbbbbbbbbbbbbbbbbbaaaabbbbabbbbbb + abbbbbbaaaaabbbbbbbaaaabbbaaaabbbbbbabbaaaabaabbabbbbbaabbbbbbbbbbbbbbbbbbbaababbbbbbbbbba + abbaabbaaaaabbbbbbaaaaabbbaaabbaaabbabbbaababbababbbbbaabbaaabaabbbbbbbabbbaabbbbbbbbbbbba + abbbbbbaaaabbbbbbaaaaaabbbaaabbaaaaaabbabbabaabbabbbbbaabbbaaaaaaaaaaaaaabbaabbbbbbbbbbbba + abbbbbbaaaabbbbbaaaaaaabbbaaabbaaaaaabbbaababaababbbbaaabbbbbbbbbbbabbbabbbaabbbbbbbbbaaba`, + map `abbbbbbbbbbbbbbbbabbbbabbbabbbbaaaaabbbbbbbbbbaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaaabbaaaaaabbbbbaaabbbaaaaaaaaaaabbaabbbbaaaaabbbbbbbbaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaabaaaaabbaabbbbaabbbbba + bbbbbabbbbababaaaabbbabbbaabaaaabaaaaaaabaaabbbbbaaabaaaabaaaaaaaaaaaaaaaaaaaabbbbaaabbbba + bbbbbbbbbbaaaaaaabbbbabbbbbbbbbabaaabaaaaaaabbbbbaaabbaaaaaaaaaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbbaaaaaaaabbbaaabbabbbbbbaaaabbbbaaaabbbbbaaaaaaaaaaaaaaaabbbbbbaabbaabbbbbaaabbbba + abbbbaabbbaaaabbbbbaaaabbbbbbbbbaaaabbbbaaabbbbbbbababbbbbaaaabbbbbbbbbabbbaaabbbbaabbbbba + abbbbabbbaaaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbaaaabbbbba + abbbbabbbaaaaabbbbbabbbaabbbbbbaaaaabbbbaaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbbbbaaaaabbbbba + abbbbabbbaaabaaabbaabbbbbbbbaaaaaaabaaaaaaabbbbbbbbbaabbbbbaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabbaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbbabbbabbbbaabbbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaabbbbbbaabbbbaabaaabaaabbabbbbaaabaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbbbabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaaabbbbbbbbbbbbbaabbbbbbaaaaabbaaaaabbbbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaaabbbbbbbbbbbaaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbaaaabbbbaaaaaabbbbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaabbbbbaabaaabbbaaaaaaaaabbbbbbbbbbbaaabbbabbbaaaabbaaabbbbbbaaabbba + abbaaaabbbbabbbbaaaaabaabbbbaabaaaabbbaaaaaaaaaaabbbbbbbbbaaaaaaabbbaaaabbaaabbbbbbbbbabba + abaaaaabbbbabbbbaaaaabbaabbaabbaaabbbbaaaaaaaaaaabbbbbbbbbaaaaaaaabbbbaaaaaabbbbaabbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaabbbaaaaaaaaaaaabbbbbbbbbaaaaabaabbbabbbaaabbbbaabbbbaaba + abbbaabbbaaaabbbaabbaabaaaaabbbbaabbbbaaaaabbbbaabbbbbbbbbaaaabbbabbaabbbaaabbbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaabbbaabbbbbbbbaabbbbbbbbbaaaabbbaaaaabbabaabbbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaabbbaabbbbbbbbbabbabbbbbaaaaabbbaaababaabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabbbabbbbbbbbbbabbaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbaaabbbbbbbbabbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbaba + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaabbbaaaaaabbaaaabbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaabbaaaaaabbaaaabbbaabbaaaaaabbbabbbbaabbbaaaabbbbbaaaabb + abbbbbbbbabaaabaaabbbaaaabbbabbbaaabbaaaaaabbaababbbbabbbaaaaabbbabbbbaaaaaaaaaabbbbaaaaba + abbbbbbbbaaabbbbbbbbbabaabbbabbbaaabbbaaaaabbbbbabbbaabbbbaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaabbbabaaaabbbbbaabaaabbbbaaaabbaabbbabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabaabbbabaaaaabbbaabbaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbabaabaaaabbbabaaaabbbbaabaabbaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaabbbaaaaaabbbbabaaabbaabbbaaabaaaaaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaabbbbaaaaaaabbababbbbaabbbaaabbbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabbabbaaabbbbbbabbbbbbbaabaaaabbbbaaaabaaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbaabbbabaaabaabbbbbbbaaaaaaaabbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbaabaaabbbaaaaabbaaabbabbbaaaaababbbbbbbbaaaaaaaabbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaaabbbaaabaabbaaaabbbbbbabbbbbbbbbaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaaaaaaaaaabbbbbabbaabbbaaabbabbbbaabbbbbbaabbbbbbbbbabbbaaaaabbbaaaaaabbbabbbbbba + bbaaaaaaaaaaaabbbaabbbbbabbaabbbaaabbabbbbaabbbbbbaaaabbbbbbbbbbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbaabbbaabbbaabbbbbbaaaaaabbbbbbbbbaabaabbbbaaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbaabbbabbbaaabbbabaaaaaaaaaaabbbbbaabbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaabbbbaabbaaabbaabbbbbbbaaabbabbaaaaaaaaaaaabbbbaabbaabbbbabbbbaaaaabbbba + baabbbbbbaabbbbbbaaabbbabbbaaabbabbabbbbbaaaaaabbaaaaaaaaaaaaaabbbabbaabbbbaabbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaababaabbbbbabbabbaaabbaaaaaaaaaaaaaabbbabbaabbbaabbbbbbaabbbbba + ababbbbbbaabbbbbbaaabbbabbaabbbbbbbbbaaabbbbaabbbaaaaabaaaaaaaaabbbabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbbbbbaaaabbbbaabbbaaaabbababaaaaabbbabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbbaabbaaaaaabbaabbbbbaaaaabbbbabbbbaaaabbbbbbaaaaabbbaababbaaaabbbbaaaabbbbb + bbbaabaaabbaabbaabbbaaaaaabbbabbbbbaaaaabbbbbbbbaaaaabbbbbbbaaaabbbaaaabaabbaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbabbbbaaaaaabbbbaaabaaaabbbbbbbbaaaabbbbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbaaaabbbbaaaabbbbbbbaaaaaaaaababbbbbaaaaabbaabbbaaaaabbbbbaaaabbbbaaaaabbaabbaa + abaaaabbbbbbbaabbbbbbaabbbbbbbbaaaaaaaaaaaaaaabaaaabbbaabbbaaaaabbbbbaaabbbbbaaaabbbbaaaba + abaaaabaaaaaaaaaaaaaaaaabaaabbbaaaabaaaaaabbbbaaaaabbbaabbbaaaaabbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbaaaaaaaaaaaabbbbaaaabbbaabbbaaaaabbbbabaaaaaaaaaabaaaabaabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbaaaaabbaaaabbaaaaaabbbbaabbbaaaaabbbbbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbbbaaaaabbaaaabbbbbaaabbbbaabbbaaaaabbbbbaaabbbbbbaaabbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbbaaaabbbaaaabbaaaaaabbbbaabbbaaaaabbbbbaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbbbbaaaabbbaaaabbbbbaaabbbbaabbbaaaaabbbbaaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbbbbaaaabbbaaaabbaaaaaabbbbaabbaaaaaaabbbaaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaabbaabbbbaaaaabbaaaabbbbaaaabbbaaabbabaaaaabbaabaabbbbbbaaabbbbbaaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbaaaaabbaaaabbabbaabbbbaabbbabbaaaabbbbbaabbbbbbaaabbbbbbaab + bbbbaabbbbbbaaabbbbbbaabbbabbbbaaaaabbaaaabbbbaaabbbbaabbbabbaaaabbbbbaabbbbbbaaabbbbbbaab + abbbaabbabbbaaabbabbbaabbbabbbbaaaaabbbaaabbbbbaabbbbaabbbabbaaaabbbbbaabbbbbbbaabbbabbaaa + aabbaabbbaaaaaaaaaaabaabbbabbbbaaaaaabbaaabbbaaaabbbbaabbbabbaaaaabbbbaabbbbbbbaabbbabbaaa + bbbaaabbbaabaaabbbbbbaabbaaabbbaaaaaabaaaabbbbbaabbbbaabbbabbaaaaabbbbaaaaaaaaaaaaaaabaaaa + bbbbaabbbbbbaaabbbbbbaaaaababbbaaaaaaaaaaabbaaaaabbbbaabbbabbbaaaabbabbabbbbbbbaabbaabbaab + bbbbaabbbabbaaabbbbbbaaaabbbbbbaaabaaaaaaabbbbbaabbbaaabbaabbbaaaabbabbabbbbbbbaabbbabbaab + bbbbaabbbabbaaabbbbbbaaaabbbabbaabbaaaaaaabbaaaaabbbaaabbaabbbaaaabbbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbaaaabbbbbbbbbbaaaaaaabbbaaaabbbbbbbbaabbbaaaabbbaaabbbbbbbaabbbbbbaaa + abbbaabbbbbbaabbbbbbbaaabbbbbbbbbbbaaaaaaabbbbbaabbbbbbbbaabbbaaaabbbaaabbbbbbbaabbbbbbabb + abbbabbbbbbbaabbbbbbbbabbbbbbbaaabbaaaaaaabbbbaaabbbbbbbbaabbbaaaabbbbaabbbbbbbaabbbbbbabb + babbaaaaaaabaaaaaaaaaabbbbbbbbaaabbaaaaaaabbbbbaaabbbbbbbaaaabaaaabbbbbabbbaaabaaaaaaaaaaa + bbbbbaaabbbbaaabbaaaaabbbbbbbbaaabbaaaaaaabaaaaaabbbbbbbbaaaabaaaabbbbaabbabbbbaabaaabbabb + bbbbbaabbbbbaabbbaaabbbbbbbbbbaaabbaaaaaaabbbbbaaabbbbbbbaababaaaabbbbaabbabbbaaabbbabbbbb + abbbbbbbbbbbaabbbaabbbbbbbbbbbaabbbaaaaaaabbbabaaabbbbbbbaaaaaaaaabbbbbbbbbbbbbabbbbbbbbba + abbbabbbbbbbaabbbbabbbbbbbbbbbaabbbaaaaaaabbbbbaaabbbbbbbaaaabaaaabbbbbbbbbbbbbabbbbbbbbaa + abbbbbbbbbbbaabbbbabbbbbbbbbbaaabbbaaaaaaabaaabaaabbbbbbbaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbb + abbaaabbbabbaabbaaabbbbbbbbbbaaaabbaaaaaaabaabbaaabbbbbbaaaaabbaaabbbbbbbbbbbbbbbbbbbbbaab + abbabbbaaabaabbbbaabbbbbbbbbbbaaaaaaaaaaaabbaabaaabbbbbbaaaaabbaaabbbbbabbbbbbbbbbbbbbbaab + bbbaabbbbbbbbbbbaaabbbbbbbbbbbaaaaaaaaaaaabbaaaaaabbbbbbaaaabbbaaabbbbbabbbbbbbbbbbbbbabaa + abbbbbbbbbbbbbbaaaabbabbbbbbbbaaaaaaaaaaaabbbbaaaabbbbbbaaaaabbaaabbbbbbbbbbbbbbbbbbbbabba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabaaaaabbbbbaaaabbbbbaaaabbbaaabbbbbbbbbabbbabbbbbbaaaa + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbaaaaabbbbbbaaaabbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbbaaaa + bbbbabbbbbbbbbbbbababbbbbbbbbbbbbbbbbaaaaabbbbbbaaabbbbbaaaabbaaaabbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaaaaabbbbbbaaaabbbaaaaabbaaaabbbbbbbbbbbbbbbbbbbbaaba + bbbaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaaaaabbbbbbbaaabbbaaaaabbaaaabbbbbbbbbbbbabbbbbbbaaba + bbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaabaaabbbbbbbaaabbaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbabbb + bbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaabbaaabbbbbbbaaabbaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbabbb + bbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaaaabbbbbbbaaabbaaaaaaabaaabbbbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbbbbbbabbbbabbaabbbbaaaaabbbbbbbbbbaabbbbbbbbbaaaaaabbbbbbbbbbabbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaaaaaaabbbbbaaabbbaaaaaaaaaaabbaabbbbaaaaabbbbbbbbbaabbbbbbbbaabbbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaaaaaaabbaabbbbaaabbbba + bbbbbbabbbaaabaaaabbbabbbabaaaaabaaaaaaabaaabbbbbaaabaaaabaaaaaaaaaaaaaaaaaaaabbbbaaabbbba + bbbbbbbbbbaaaaaaabbbbabbbbbbbbbabaaabaaaaaaabbbbbaaabbaaaaaaaaaaaaaaabbaabaaabbbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbbbbbbbbbaaaabbbbaaaabbbbbaaaaaaaabaaaaaaabbbbbbaabbaaabbbbaaabbbba + abbbbbaabbaaaaabbbbaaaababbbbbbbaaaabbbbaaabbbbbbbababbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbaaaaabbbbbaaabbabbbbbbbaaaabbbbbaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbbabbabaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbaabbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbabaabbbbba + abbbbabbaaaabaaabbaabbbbbbbbaaabaaabaaaaaaabbbbbbbbbaabbbabaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabbaabbaaaaaabbbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbabbaaabbaabbbabbbbaabbbbbbaaaaaaabbbaaaaaabbbbbbbaabbbbaaaaaabbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbbbbbbbbbbaabbbaaabaaabaaabbabbbbaabbaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbbbbbbbbbbabbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaaaaaabbbbbbbbaaaaaabbaaaaabbbbbaaaaabbbbaabbbba + abbbaabbbbbbbbbbaaabbbaaabbbaabbaaaabbbbbaaaaaaaabbbbbbbaaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbaaaaaaaaaaabbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbaaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbaaaaaaaaaabbbbbbbbaaaabbabbbaaaabbbaabbbbbbbbaabba + abbaaaabbbbabbbbaaaaabaabbbbaabaaaabbbbaaaaaaaaaaabbbbbbbaaaaabaabbbaaaabbaaabbbbbbbbbabba + abaaaaabbbbabbbbaaaabbbaabbaabbaaaabbbbaaaaaaabbaaabbbbbbbaaaaaaaabbbbaaaaaaabbbbbabbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaabbbbbaabbbbbbbbaabbbbbbbaaaaabaabbbabbbaaaabbbbbbbbbaaba + abbbaabbbbaaabbbaabbaabaaaaabbbbaaabbbaabbbbbbbbbaabbbbbbbaaaaabbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaabbbaabbbbbbbbbaabbbbbbaaaaabbbaaaaabbabbaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaabbbaabbbbbbbbbaabbbbbbaaaaabbbbaababaabbaabbbbbbbbbaaaa + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabbbaaaaaabbbbbaababbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbbaaaaaabbaaaaababbaabbaaabbbabbbbaabbbaabbbbbbbbbaabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabbbbaaaaaabaaaabbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaabbbaaaaaabbbbabbbabbaaaaaabbbabbbbaabbbaaaaabbbbaaaaba + abbbbbbbbabaaabaaabbbaaaabbbabbbaaaabbabaaaaabbbbaabbabbbaaaaabbbabbbbaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbaaaabbabaaaaabbbbaabaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbaaaaaaaabbbabbaabbbbaaaabbaabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaaaaabbbbaaaaaaabbbaabbaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbabaabaaaaabbbbaaaaaabbbababbbaabbbbaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaaabaaaaabbbaaaabbbbbbaaaabbbababbbaabbbaaabaaaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaaabbaabbaaaabbbabbbbbbabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabaabaabbbbbbbbaabbbbbbaabaaaaabbbaaaaaaaabbbbbbbaaabbbbba + aabbbbbbbbabbbbabbbaaabbaaaabbbaabbaaaabbaaaaabbbbbabbbbabbbaabbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbaaaaaaabbbbaababbbbbaabbbbbbbbabbbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaaabbaaaabaabbbbaababbbbbaaabbbbbbbbbbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaaaaaaaaaabbbbbabaaabbbaaabbabbbbaabbbbbbaaaaaaabbbbbbbbaaaabbbbaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabbaabbbaabbbaabbbaabbbbbbaaaaaaaaaabbbbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabaaabbbaabbbaabbbaababaabaaaaaaaaaaabbbbbabbabbbbaaaaaaababbaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbaabbbbbbbbaabaaabbaaaaaaaaaaaaabbbabbaabbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaabbbbaabbaabbbaabbbbbabbaabaaabbaaaaaaaaaaaaaabbabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbaaabaabbabbbaabbaaaabbbaaaaabaaaaaaaabbbbbaabbbbabbbbaaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaababaabbbbbaaabbbaaabbbaaaabbaaaaaaaabbbbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbbbbbbaaaabbbaabbbaaaaabbbbbbaaaaabbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbbbbbaaaaabbbbabbbaaaabbabbbbaaaaabbbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaaabbaabbbbbaaaaaabbbabbaaaaaabbbbbbbbaaaabbbbbabbaaaabbbbaaaabbbbb + bbbaabaaabbaabbaabbbaaaaaabbbbbbbbaaaaaaabbbaaabaaaaabbabbbbaaaaabbbaaabaabbaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbbbbaaaaaaaaaabbaaaaaaaabbbabbbbaaaaabbbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbaaaabbbbbbbbaaaaaaaaaaabbbbbaaaabbbaabbbaaaaabbbbaaaabbbbaaaaabbaabbaa + abaaaabbbbbbbaabbbbbbaabbbbbbbbbaaaaaaaaaaabaaaaaaabbbbaabbbaaaaabbbbaaabbbbbaaaabbbbaaaba + abaaaabaaaaaaaaaaaaaaaaabaaabbbbaaaaaaaaaaabbbbbaaabbbbaabbaaaaaabbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbaaaaabaaaabbabbbaaabbbaaabbaaaaaabbbbbaaaaaaaaaaaaaaabaaba + bbbbaaabbbbbbaabbbbbbaaabbbbbbbbaaaaabaaaabbbbaaaaabbbaabbaaaaaaabbbbbaabbbbbbaaabbabbaabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbbbaaaaabaaaabbabbbaabbbbaabbaaaaaaabbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbbbaaaaabaaaabbbbaaaabbbbaabbabbaaaabbbbaaabbbbbbaabbbbbbaaba + bbbbaabbbbbbbaabbbbbbaabaabbabbbaaaaabaaaabbbbbbaabbbbaabbabbaaaaabbbaaabbbbbbaabbbbbbaaba + bbbbaabbbbbbbaabbbbbbaabaabaabbbaaaaabbaaaabbaaaaabbbbaabbabbaaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaabbaaaabbbbaaaabaaaabbbbbbaabbbaaabbabbaaaaabbbbaabbbbbbaaabbbbbaaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbaaaabaaaabbaaaaaabbbbabbbabbbaaaabbbbaabbbbbbbaabbbbbbaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbaaaabaaaabbbbbaabbbbaabbbabbbaaaabbbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbaabbbaabbbbbaaaabbaaabbaaaaabbbbaabbbabbbbaaaabbbaabbbbbbbaabbbabbaaa + bbbbaabbaaaaaaaaaaaabaabbbaabbbbbaaaaabaaabbbbbaabbbbaabbbabbbbaaaabbbaabbbbbbbaabbbabbaaa + bbbbaabbbaabaaabbbbbbaabbaaaabbbbaaaaaaaaabbabbaabbbbaabbbabbbbaaaabbbbaaaaaaaaaaaaaabaaaa + bbbbaabbbaabaaabbbbbbaabaabaabbbbbaaaaaaaabbbaaaabbbbaabbbabbbbaaaabbbbabbbbbbaaabbaabbaab + bbbbaabbbabbaaabbbbbbbaaabbbabbbbbaaaaaaaabbbbbaaabbbaabbaabbbbaaaabbbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaaabbbbabbbbaaaabaaabbaaaaaabbbabbbaababbaaaabbbaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbbaaabbbbabbbbaaaaaaaabbbbbaaabbbbbbbaabbbbaaaabbbaabbbbbbbaabbbbbbaaa + abbbaabbbbbbaabbbbbbbbaabbbbbbbbbaaaaabaaabbaaaaaabbbbbbbaaaabbaaaabbbaabbbbbbbaabbbbbbabb + abbbaabbbbbbaabbbbbbbbabbbbbbbbbbaaaaabaaabbbbbaaabbbbbbbaaaabbaaaabbbbbbbbbbbbaabbbbbbabb + babbaaaaaaabaaaaaaaaaaabbbbbbbbbbbaaaabaaabbbbbaaaabbbbbaaaabbbaaaabbbbabaaababaaaaaaaaaaa + bbbbbaaabbbbaaabbaaaaaabbbbbbaaabbaaaaaaaabbbbbaaabbbbbbaaaabbbaaaabbbbabbaaabbaaaaaaababb + bbbbbbabbbbbaaabbaaabaabbbbbbaaabbaaaaaaaabbbbbaaabbbbbbaaaabbbaaaabbbbabbabbbbaabbbbbbbbb + abbbbbbbbbbbbabbbbabbbabbbbbbaaabbbaaaaaaabbbbbaaabbbbbbaaabbbbaaaabbbbbbbbbbbbbabbbbbbbba + bbbbabbbbbbbbabbbbabbbabbbbbbaaabbbaaaaaaabbaabaaabbbbbbaaabbbaaaaabbbbbbbbbbbbabbbbbbbbaa + bbbbabbbbbbbaabbbbabbbbbbbbbbaaabbbaaaaaaabbaaaaaabbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbb + abbaabbababababbaaabbbbbbbbbbbaabbbaaaaaaabbbaaaaabbbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbaab + bbbaabbbbbbabbbbaaabbbbbbbbbbbaabbbaaaaaaabbbbbaaabbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbaab + abbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbaaaaaaaabbbbbaaabbbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbabaa + abbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaaaaaaaaabbbbbbaaabbbbaaaabbbaaabbbbbbbbbbbabbbbbbbbbabba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaabbaaaabbbbbbaaabbbaaaaabbaaaabbbbbbbbbbabbbabbbbbbaaaa + bbbbabbbbbbbbbbbbaabbbbbbbbbbbbaaabbbaaaaabbbbbbaaaabbaaaaabbaaaabbbbbbbbbbbbbbabbbbbbaaaa + bbbbababbbbbbbbbbbababbbbbbbbbbaabbbbaaaaabbbbbbaaaaaabaaaabbaaaabbbbbbbbbbbbbbbbbbbbaaabb + bbbbabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaaaaabbbbbbaaaababaaaabaaaabbbbbbbbbbbbbbbbbbbbbbaaba + bbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaabaaabbbbbbbaaabaaaaaaaaaaabbbbbbbbbbbbbbabbbbbbaaaba + bbbbbbabbbbbbaaabbbbbabaaabbbbbbbbbbaabaaabbbbbbbaaabaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbabbb + bbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaabbbbbbbaaabaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbaabbb + bbbaababbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaabba`, + map `abbbbbbbbbbbbbbbbababbbbbaabbbbaaaaabbbbbbbbbbaabbbbbbbbbaaaaaabbbbbbbbbbabbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaaaaaaabbbbbaaabbbaaaaaaaaaaabbaabbbbaaaaabbbbbbbbbaabbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaaaaaaabbaabbbbaabbbbba + bbbbbbabbbaaabaaabbbbabbbabaaaaabaaaaaaabaaabbbbbaaabaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaabbbba + bbbbbbbbbbaaaaaaabbbbabbbbbbbbbabaaabaaaaaaabbbbbaaabbaaaaaaaaaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbbbbbbbbbaaaabbbbaaaabbbbbaaaaaaabbaaaaaaabbbbbbabbbaabbbbbaaabbbba + abbbbbaabbaaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbababbbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbaabaaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbabaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbaaaaaaabaaaaaaabbbbbbbbbaabbbabaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaaabbaaaaaabbbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbbbbbbbbbaaaaaabbbaaaaaabbbbbbbaabbbbaaaaaabbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbbaaaaaabbbbbbbaabaaabaaabbbbbbbaaabaaabaaabbbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbbaaaaaaaabbbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbaaaaaaaaabbbbbbaaaaaabbaaaaabbbbbaaaaabbbbaabbbba + abbbaabbbbbbbbbbaaabbbaaabbbaabbaaaabbbbbaaaaaaaaaabbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbaaaaaaaaaaabbbbbbbaaaabbaabbaaabbbbaaaabbbbaabbbba + abbaaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbaaaaaaaaaaaabbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaabaaaabbbbbaabbbbbbbbaabbbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbaabbbbbbbbbaabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaabbbbaabbbbbbbbbaabbbbbbaaaaabaabbbabbbaaaabbbbbbbbbaaba + abbbaabbbbaabbbbbabbaabaaaaabbbbaaabbbbaabbbbbbbbbaabbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbaababbaabbbbaaaaabbaaaaaabbbbbaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaabbbbaaaaaaabaaaaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaaa + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabbbbbaaaaaabaaaabbbbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaabbbbbaabbbabbbbaabbbabaaaaaaabbbbabbbbaabbaaabbbabbbbaabbbaabbbbbbbbbaabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaababbaaaaaaabbbbaabaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbaaaaaaabbbbaababbaaaaaabbbabbbbaabbbaaaaabbbbaaaabb + abbbbbbbbabaaabaaabbbaaaabbbabbbaaaabbbaaaaaaaabbbabbbbbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbaaaabbbaaaaaaabbbabbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbbaaaaaabbbabbbabbbbaaaabbaabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaaaaaabbbbabaaaaaaabbbbbaabbbbaaabbaabbaabaabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbabaabaaaaabbbaabbaaaabbbbbbbbabbbbbaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaaabaaaaabbbaaaabbbaabbaaabbbabbbbbbabbbaaabaaabaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaaabbaabbbabbaabbbbabbbbbbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabaabaabbbabbaabbbbaabbbbbbbaabbbbaaaabaaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbaabbaaaabbbaaaabbbbbaaabbbbbbbabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbaaabaaabbbbaababbbbbaaaaaabbbbbbbbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbaaaabbabbbbaababbbbbaaaaaaaaabbbbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaaaaaaaaaabbbbbabaaabbbaaabbabbbbaababbbbbaaaaaaaaaabbbbbababbbbaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabaaabbbaabbbabbbbaababaabbaaaaaaaaaaaabbbabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbaabbbbbbbaaabbaabbbaaaaaaaaaaaaabbbbaabbbbaaaaaaababbaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbaabbbbbaabaaaaaabbbaaaabaaaaaaaaabbbbaabbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbaabbbabbbbbaaabbaaaabbbaaaabbaaaaaaaaabbbbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbaaabbabbbbbaaabbbbaabbbaaaabbbabbaaaaabbbbaabbbaabbbbaaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaababbbbbbbaaaabbbbabbbbaaaabbabbbbaaaabbbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbbbbbaaaaaabbbbbbbaaaaabbbbbbbaaaabbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbbbbaaaaaaabbaaabbaaaabbbaabbbaaaabbbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabbaaaaaabbaabbbaaaaaaaaabbaaaaaaaabbbbaabaaaaaabbbbbabbaaaabbbbaaaabbbbb + bbbaabaaabbaabbaabbbaaaaaabbbabbbaaaaaaaaabbbbbbbaaabbbbabbbbaaaabbbaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbabbbaaaaaaaaabbaaaaaaaabbbbabbbaaaaabbbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaabbbbbbbbbaaaaaaaaaabbbbbaaabbbbaabbaaaaaabbbbaaaabbbbaaaaabbaabbaa + abaaaabbbbbbbaabbbbbbbabbbbbbbbbbaaaaaaaaaabaaaaaaabbbbaabbaaaaaabbbbaaabbbbbaaaabbbbaaaba + abaaaabaaaaaaaaaaaaaaaaabaaabbbbbaaaaabaaabbbbbbaaabbbbaabbabaaaabbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabaaaabaabbbaaabbbaaabbaaaaaaabbbbaaaaaaaaaabaaaaaaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabaaaabbbbbaaaabbbaaababbaaaaabbbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbaabbaaaabaaaabaabbbaabbbbaabbabbbaaaabbbbaabbbbbbaaabbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbabbbaaaaaaaaabbbbaaaabbbbaabbabbbaaaaabbbaabbbbbbaaabbbbbaaba + bbbbaabbbbbbbaabbbbbbaabaabbaabbbaaaaaaaaababbbbaabbbbaabbabbbaaaaabbbaabbbbbbaabbbbbbaaba + bbbbaabbbbbbbaabbbbbbaabaabaabbbbaaaaaaaaabbbaaaaabbbbaabbabbbbaaaabbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaabbaaaabbbbaaaaaaaaababbbaaabbbaaabbabbbbaaaabbbaabbbbbbaaabbbbbaaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaababaaaabbbbbabbbabbbbaaaabbbaabbbbbbaaabbbbbbaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaabbbbbaabbbbaabbbabbbbbaaaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaababbbaabbbbaabbbaabbbbaaaabbbabbbbbbbaabbbabbaab + bbbbaabbaaaaaaaaaaaabaabbbaabbbbbbaaaaaaaababbbaabbbbaabbbaabbbbaaaabbbabbbbbbbaabbbabbaaa + bbbbaabbbaabaaabbbbbbaabbaaaabbbbbaaaaaaaabaabbaabbbbaabbbaabbbbaaaabbbaaaaaaaaaaaaaabaaaa + bbbbaabbbaabaaabbbbbbaabaabaabbbbbbaaaaaaabaaaaaabbbbaabbaaabbbaaaabbbbabbbbbbbaabbbabbaab + bbbbaabbbabbaaabbbbbbbaaabbbabbbbbbaaaaaaababbbaabbbbabbbaaabbbaaaabbbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaaabbbbabbbbaaaaaaaabaaabaaabbbbbbbaaababaaaabbbaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbbaaabbbbabbbbaaaaaaaababbbaabbbbbbbbaaaaabaaaabbbaabbbbbbbaabbbabbaaa + abbbaabbbbbbaabbbbbbbbaabbbbbbbbbbaaaaaaaabaabbaabbbbbbbbaaaaabaaaabbbaabbbbbbbaabbbbbbaba + abbbabbbbbbbaabbbbbbbbabbbbbbbbbbbaaaaaaaababbbaabbbbbbbbaaaabbaaaabbbbbbbbbbbbaabbbbbbabb + bbababaaaaabaaaaaaaaaaabbbbbbabbbaaaaaaaaababbbaaabbbbbbaaaabbbaaabbbbbabbaabbbaabaaaaaaaa + bbaaaaaabbbbaaabbaaaaaabbbbbbbabbaaaaaaaaabababaabbbbbbaaababbaaaabbbbaabbaaabbbaaaaaababb + bbbbbbbbbbbbaaabbaaabaabbbbbbaabbbaaaaabaabababaaabbaabaaababbaaaabbbbaabbbabbbaabbbbbbbbb + abbbbbbbbbbbbabbbbabbbabbbbbaaabbbaaaaabaababaaaaaaaaaaaaaaabaaaaabbbbbbbbbbbbbaabbbbbbbbb + bbbbabbbbbbbbabbbbabbbabbbbbaaabbbaaaaabaababaaaaaabbbaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbaa + bbbbabbbbbbbaabbbbabbbbbbbbbaaabbbbaaaabaabbbbbaaaabbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbb + abbaabbabbbbbabbaaabbbbbbbbbaaabbbbaaaaaaabbbbbaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabb + bbbaabbbaabaabbbaaabbbbbbbbbaaabbbbaaaaaaabbbbbaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbaaaaaaaabbbbbaaaabbbbbbaaaaaabbbbbbbbabbbbbbbbbbbbbbabab + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbabaaaabaaaabbbbbaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbaaaabbbbbaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaa + bbbbabbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbaaaabbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbaabbabbbbbaaaaa + bbbbbbbbbbbbbbbbbbabbbbbbbbbbbbaaabbbbaaaabbbbbaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaabb + bbbbabbbbbbbbbbbbbbbabbbbbbbbbbaabbbbbaaaabbbbbaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaba + bbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbabaaaabbbbbbaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaba + bbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaabbbbbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbaabaaabbbbbbbbbbbbbbbbbbbbbaabba`, + map `abbbbbbbbbbbbbbbbaaababbaaabbbbaaaaabbbbbbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbabbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaabaaaabbbbbaaabbbaaaaaaaaaaabbaabbbbaaaaabbbbbbbbaaabbbbbbbbaabbbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaaaaaaabbaabbbbaabbbbba + bbbbbbbbbbaaabaaabbbbabbbabaaaaabaaaaaaabaaabbbbbbaabaaaabaaaaaaaaaaaaaaaaaaaabbbaaaabbbba + bbbbbbbbbbaaaaaaabbbbabbbbbbbbbabaaabaaaaaaabbbbbaaabbaaaaaaaaaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbbbbbbbbbaaaabbbbaaaabbbbbaaaaaaaabaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbababbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbbabbbbaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaabaaabaaaaaabbbbbbbbbbaabbaaaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaaabaabbbbbbbbaaabaaabbaaabbbbbbaaabbbaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbbaaaaaaabbbbaaabbaaaaaabbbbbbbaabbbaaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbbaaaaaaaaabbbbbaabaaabaaabbabbbbaaabaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbbaaaaaaaaaabbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaaaaaaaaaabbbbaaaaaabbaaaaabbbbbaaaaabbbbaabbbba + abbbaabbbbbbbbbbaaabbbaaabbbaabbaaaabbbbaaaaaaaaaaaaabbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbaabbbbbbbbaabbbbbaaaabbaabbaaabbbbaaaabbbbaabbbba + abbaaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbaabbbbbbbbbaabbbbbaaaabbabbbaaaabbbaabbbbbbbbaabba + abbaaaabbbbbbbbbaaaaabaabbbbaabaaaabbbbbaabbbbbbbbbaabbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaaabbaabbaabbaaaabbbbbaabbbbbbbbbaabbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbbaababbbaabaabbaaaabbbbbaaababbbbbbaabbbbbaaaaabaabbbabbbaaaabbbbbbbbbbaba + abbbaabbbbaabbbbbabbaabaaaaabbbbaaaaabbbaaaaaabbaaaaabbbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbbababbaabbbbaaaaabbbaaaaaaabaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbaaaaaaabbababbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabaabbaaaabaabbbbabbbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaababbbaabbbabbbbaaabaabaaaaabaabbbbabbbaabbaaabbbabbbbaabbbaabbbbbbbbbaabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaabaaaaaaaabbbabaaaaabaaabbbabbbbabbbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbaaaaaaabbbabbabbaaaaaabbbabbbbaabbbaaaaabbbbaaabba + abbbbbbbbabaaabaaabbbaaaabbbabbbaaaabbbbbaaaaabbbbabbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaabbbbbbbbbabaabbbabbbaaaabbbbbbaaaaaabbabbbbbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbbabaaaabbbbbabbbbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaaaaaabbbbabbaaaabbbabbbbbbbbbaaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbababbaaaaabbbaabbaaaabbbabbbbbbbbbbaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaaabaaaaabbbaaaabbbaabbbaaaabbbbbabbbbbbbaabaaaaaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbaaaaabaaabbbbbaabbbbbaabbbbbbaabbbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbaabbaaaabbbaabaabbbbbaaaabbbbbbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbaaaabbbaaaaabbbbbaaaaaabbbbbbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaaaaabbbaaaabbbaaabaaabbbbaabaabbbbaaaaaaaaaabbbbbaabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbaaaabbabbbbaabaabbabaaaaaaaaaaabbbbaaabbbaabbbbbbbbabbbbbba + bbaaaaaabaaaaaaaaaabbbbbabaaabbbaabbbbbbbbaabaaaabbbaaaaaaaaaaaabbbbabbbbaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabaaabbbaabbbbbaabaabaaaabbaaaaaaaaaaaaaabbbbabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbabbbbbbaabaabaaabbbaaaabaaaaaaaaabbbbabbbbaaaaaaababbaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbabbbbbaaabbabaabbbaaaaabaaaaaaaaabbbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaabbbbaabbaabbbbbbbbaaaaababbabbbaaaaababbbbaaaabbbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbababbbbbbaaaaaabbbbbbbaaaaabbbbbbbaaaabbbbaabbbaabbbbbaaabbbbba + ababbbbbbaabbbbbbaaabbbabbaababbbbbaaaaaaabbaaaaaaaaaabbaabbbaaaabbbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbbaaaaaaaaabbbbbbaaaaabbbaabbbaaaabbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaaabbbbaaaaaaaaabbaabbbaaaabbbaabbaaaaaabbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabbaaaaaabbaabbbaaaaaaaaabbbbaaaaaabbbbbabbaaaaaabbbbabbaaaabbbbaaaabbbbb + bbbaabaaabbaabbaabbbaaaaaabbbabbbaaaaaaaaabbbbbbbaaabbbbabbbaaaaaabbaaabaabbaaabbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbabbbaaaaaaaaabbaaaaaaaabbbbabbbaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaabbbbbbbbbaaaaaaaaaabbbbbaaabbbbaabbaaaaaaabbbaaaabbbbaaaaabbaabbaa + abaaaabbbbbbbaabbbbbbaabbbbbbbbbbaaaaaaaaaabaaaaaaabbbbbabbaaaaaabbbbbaaabbbbaaaabbbbaaaba + abaaaabaaaaaaaaaaaaaaaaabaaabbbbbaaaabaaaaaabbbbaaaabbbaabbaaaaaaabbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabbaaabaabbbaabbbbaaabbabbaaaaabbbaaaaaaaaaabaaaaaaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabaaaabbbbbaaabbbbaaabbabbaaaaabbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbaabbaaaaabaaababbbbaabbbbaaabbabbaaaaabbbaabbbbbbaaabbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbaabbaaaaaaaaabbbbaaaabbbbaabbbabbbaaaabbbaabbbbbbaaabbbbbaaba + bbbbaabbbbbbbaabbbbbbaabaabbaabbbaaaaaaaaababbbbaabbbbaabbaabbbbaaabbbaabbbbbbaabbbbbbaaba + bbbbaabbbbbbbaabbbbbbaabaabaabbbbbaaaaaaaabbaaaaaabbbbaabbaabbbbaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabbaaaabbbbbaaaaaaaababbbaaabbbbaabbaaabbbaaaabbbabbbbbbaaabbbbbaaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaabbbbaaaabbbbaabbaaabbbaaaabbbabbbbbbaaabbbbbbaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaabbbbbaaaaaaaabbbaaabbbaaaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaababbbaaaaaaaabbbaaaabbaaaabbbabbbbbbbaabbbabbaab + bbbbaabbaaaaaaaaaaaaaaabbbaabbbbbbaaaaaaaababbaaaabbaaaabbaaaabbaaaabbbabbbbbbbaabbbbbbaaa + bbbbaabbaaabaaabbbbbbaabbaaaabbbbbbaaaaaaabbbbbaaabbbaaabaaaaabaaaaabbbaaaaaaaaaaaaaabaaaa + bbbbaabbbaabaaabbbbbbaabaabaabbbbbbaaaaaaabbaaaaaabbbbaaaaaaabbaaaabbbbabbbbbbbaabbbabbaab + bbbbaabbbabbaaabbbbbbaaaabbbabbbbbbaaaaaaabbbbaaaabbbbbaaaaabbbaaaabbbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaaabbbbabbbbaaaaaaaabbabaaaabbbbbbaaaabbbaaaabbbaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbaaaabbbbabbbbaaaaaaaabbbbaaaabbbbbbaaaabbaaaaabbaaabbbbbbbaabbbbbbaaa + abbbaabbbbbbaabbbbbbbbaabbbbbbbbbbaaaaaaaabbabbaaabbbbbbaaaabaaaaabbbbaabbbbbbbaabbbbbbabb + abbbabbbbbbbaabbbbbbbbabbbbbbbbbbbbaaaabaabbbbaaaabbbbbbaaaabaaaaabbbbbabbbbbbbaabbbbbbabb + bbababaaaaabaaaaaaaaaaabbbbbaabbbbaaaaabbabbbbbaaaabbbbbaaaaaaaaaabbbbaabbaababaabaaaaaaaa + bbabaaaabbbbaaabbaaaaaabbbbbaaabbaaaaaabbababaaaaaabbbbbaaaaaaaaaabbbbaabbaaabbaaaaaaababb + bbbbbbbbbbbbaaabbaabbaabbbbbaaabbbaaaaabaababaaaaaabbbbbaaaaaaaaabbbbbaabbbabbbaabbbbbbbbb + abbbbbbbbbbbbabbbbabbbabbbbbaabbbbaaaaabaababaaaaaabbbbbaaabaaabbbbbbbaabbbbbbbaabbbbbbbba + bbbbabbbbbbbbabbbbabbbabbbbaaabbbbbaaaabaabbbbaaaaabbbbbaabbaaabbbbbbbabbbbbbbbaabbbbbbbbb + bbbbabbbbbbbaabbbbabbbbbbbbaaabbbbbaaaaaaabbbbbaaaabbbbbaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbb + abbaabbabbbbbabbaaabbbbbbbbbaaabbbbaaaaaaabbbbaaaaaabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaab + bbbaabbbbbbabbbbaaabbbbbbbbbaaaabbaaaabaaabbbbaaaaaaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaab + abbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbaaabbaaabbbbaaaaaaaaaaaaabaaabbbbbbbbbbbbbbbbbbbbbbbabbb + abbbbbbbbbabbbbbaaaabbbbbbbbbbbbaaaabbaaaabbbbaaaaaaaaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbaabba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbaaaabbbbbaaaaaabaaabbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaa + bbbbabbbbbbbbbbbbaabbbbbbbbbbbbbaaabbbaaaabbbbbaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbabbbbaaaabbbbbaaabbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbaaabbabbbbbbbbabaaaabbbbbaaaaabbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaba + bbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaaaabbbbbaaaaabbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbaabba + bbbababbbbbbbaaabbbbbabbaabbbbbbbbbbaaaaaabbbbbbaabbbbbabbbaaaaaabbbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaabbbbbbbbbabaaaabbbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbaabba`, + map `abbbbbbbbbbbabbbbaaababbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbaaaaaabbbbbbbbbbabbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaaabbaabaaaaabbbbaaabbbaaaaaaaaaaabaaabbbbaaaaabbbbbbbaababbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaaaaaaabbaabbbbaabbbbba + bbbbbbbbbbaaabaaabbbbabbbabaaaaabaaaaaaabaaabbbbbaaabaaaabbaaaaaaaaaaaaaaaaaaabbbaaaabbbba + bbbbbbbbbbaaaaaaabbbbabbbbbbbbbabaaabaaabaaabbbbbaaabaaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbaaabaaaabaaaaaaabbbbbbabbbaabbbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbababbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbaabaaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbbabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbaaabaaabaaaaaabbbbbbbbbbaabbaabaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaaabaaaabbbbbbaaabbbaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbabbaaabbaabbbabbbbbbaaaaaaabbbbaaabaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbbaaaaaaaaabbbbaaabaaabaaabbabbbbaabbaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbbaaaaaaaaaabbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbaaaaaaaaaaabbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaabbbbbbbbbbaaabbbaaabbbaabbaaaabbbbaaaaaaaaaaaaabbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbaabbbbbbbbaabbbbbaaaabbaabbaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbaabbbbbbbbbaabbbbbaaaabbbbbbaaaabbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaaaabbbbbaabbbbbbbbbaabbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbbaabbbbbbbbbaabbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaabbbbbaaababbbbbbaabbbbbaaaaabaabbbabbbaaaabbbabbbbbaaba + abbbaabbbbaabbbbbabbaabaaaaabbbbaaaaabbbaaaaaabbaaaaabbbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbaaaaaaabaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbaaaaaaabbababbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabaabbaaaabaabbbbabbbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabaabaaaaabaabbbbabbbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaabaaaaaaaabbbabaaaaabaaabbbabbbbabbbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbaaaaaaabbbaababbaaaaaabbbabbbbabbbbaaaaabbbbaaaabb + abbbbabbbabbaaaaaabbbaaaabbbabbbaaaabbbbaaaaaaabbbabbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaba + abbbbbbbbbaaabbbbbbbbabaabbbabbbaaaabbbbbbaaaaaabbabbabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbbabaaaabbbbbbbabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaaaaaabbbbabbaaaabbbabbbbbbbbbaaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbababbaaaaabbbaabbaaaabbbbbbbbbbbbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaaabbbaabbbaaaabbbbbabbbbbbbaabaaaababbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbaaaaabaabbbbaaaabbbbbaabbbbbbaabbbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbaabbabaabbbaabaabbbbbaaaabbbbbbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbaabbaaaabbbaaaaabbbbbaaaaaabbbbbbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbaaabaaabbbbaabaabbbbaaaaaaaaaabbbbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbaaaabaabbbbaabaabaabaaaaaaaaaaabbbbaaabbbaabbbbbbbbabbbbbba + bbaaaaaabaaaaaaaaaabbbbbabaaabbaaabbbbbbbbaabaaaabbbaaaaaaaaaaaabbbaabbbbaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabaaabbbaabbbbbbabaabaaaabbaaaaaaaaaaaaaabbbaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbaabbbbbaabaabaaabbbaaaabaaaaaaaaabbbbabbbbaaaaaaababbaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbabbbbbaaabbabaabbbaaaaabaaaaaaaaabbbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaabbbbaabbaabbbbbbbbaaaaababbabbbaaaaababbbbaaaabbbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbababbbbbbaaaaaabbbbbbbbaaaabbbbbbbaaaabbbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaababbbbbaaaaaaabbaaaaaaaaaabbaabbbaaaabbbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbbaaaaaaaaabbbbbbbaaaabbbaabbbaaaabbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbbaaaaaaaaabbaabbbaaaabbbaabbaaaaaabbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaaabbaabbbaaaaaaaaabbbbaaaaaabbbbbabbaaaaaabbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbabbbaaaaaaaaabbbbbbbaaabbbbabbbaaaaaabbaaabaabbaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbabbbaaaaaaaaabbaaaaaaaabbbaabbbaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaabbbbbbbbbaaaaaaaaaabbbbbaaabbbbaabbaaaaaaabbbaaaabbbbaaaaabbaabbaa + ababaabbbbbbbaabbbbbbaabbbbbbbbbbaaaabaaaaabaaaaaaabbbbbabbaaaaaaabbbbaaabbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabaaabbbbbaaaabaaaaaabbbbaaabbbbaabbabaaaaabbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabbaaabaabbbaabbbbaaabbabbaaaaabbbaaaaaaaaaaaaaaabaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabaaaabbbbbaaabbbbaaabbabbbaaaabbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbaabbaaaaabaaababbbbaabbbbaaabbbbbbaaaabbbaabbbbbbaaabbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbaabbaaaaaaaaabbbbaaaabbbbaabbbabbbaaaabbbaabbbbbbaaabbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbaabbbaaaaaaaaababbbbaabbbbaabbbabbbaaaabbbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabaabbbbbaaaaaaaabbaaaaaabbbbaabbbabbbbaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaabbaaaabbbbbaaaaaaaababbbaaabbbbaabbaabbbbaaaabbbabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaabbbbaaaabbbbaabbaaabbbaaaabbbabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaabbbbbaaaaaaaabbbaaabbbaaaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbabbaabbbaabbbbbbaaaaaaaababbbaaaaaaaabbbaaaabbaaaabbbabbbbbbbaabbbabbaab + bbbbaabbaaaaaaaaaaaaaaabbbaabbbbbbaaaaaaaababbaaaabbaaaabbaaaabbaaaabbbabbbbbbbaabbbbbbaaa + bbbbaabbaaabaaabbbbbbaabbaaaabbbbbbaaaaaaabbbbbaaabbbaaabaaaaabaaaaabbbaaaaaaaaaaaaaabaaaa + bbbbaabbbaabaaabbbbbbaabaabaabbbbbbaaaaaaabbaaaaaabbbbaaaaaaabbaaaabbbbabbbbbbbaabbbbbbaab + bbbbaabbbabbaaabbbbbbaaaabbbabbbbbaaaaaaaabbbbaaaabbbbbaaaaabbbaaaabbbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaaabbbaabbbbaaaaaaaabbabaaaabbbbbbaaaabbbaaaabbbaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbaaaabbbaabbbbaaaaaaaabbbbaaaabbbbbbaaaabbaaaaabbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaabbbbbbbbbbaaaaaaaabbabbaaabbbbbbaaaabaaaaabbbbaabbbbbbbaabbbbbbabb + abbbaabbbbbbaabbbbbbbaabbbbbbbbbbbbaaaabaabbbbaaaabbbbbbaaaabaaaaabbbbbabbbbbbbaabbbbbbabb + bbababaaaaabaaabaaaaaaabbbbbaabbbbaaaaabbabbbbbaaaabbbbbaaaaaaaaaabbbbaabbaababaaaaaaaaaaa + bbaaaaabbbbbaaabbaaabaabbbbbaaabbaaaaaabbababaaaaaabbbbbaaaaaaaaaabbbbaabbbbbbaaaaaaaabbab + bbbbbbbbbbbbaabbbaaabaabbbbbaaabbbaaaaabbababaaaaaabbbbbaaaaaaaaabbbbbaabbbbbbbaabbbbbbbaa + abbbabbbbbbbbabbbbabbbabbbbbaabbbbaaaaabaababaaaaaabbbbbaaabaaabbbbbbbaabbbbbbababbbbbbbba + bbbbabbbbbbbbabbbbabbbabbbbaaabbbbbaaaaaaabbbbaaaaabbbbbaabbaaabbbbbbbabbbbbbbbaabbbbbbbba + bbbbabbbbbbbaabbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbaaaabbbbbaabbaaabbbbbbbbbbbabbbbbbbbbbbbbbb + abbaabbbbbbbbabbaaabbbbbbbbbaaabbbbaaaaaaabbbbaaaaaabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaab + bbbaabbbbababbbbaaabbbbbbbbbaaaabbaaaabaaabbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaab + abbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbaaabbaaabbbbaaaaaaaaaaaaabaaabbbbbbbbbbbbbbbbbbbbbbbabab + abbbbbbbbbabbbbbaaabbbbbbbbbbbbbaaaabbaaaabbbbaaaaaaaaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbaaaabbbbbaaaaaabaaabbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaa + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbaaaabbbbbaaaaabbbbbbaaaaaabbbbbbbbbbbabbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbabbbbaaaabbbbbaaabbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbbbbabaaaabbbbbaaaaabbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaa + bbbaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaaaaabbbbbaaaaabbaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaba + bbbababbbbbbbbbbbbbbaaaaabbabbbbbbbbaaaaaabbbbbbaabbbbbabbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaabbb`, + map `abbbbbbbbbbbabbbbaaababbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaaabbaabaaaaabbbbaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabaaaaaaaaabbaaaaaabbbbbaaaaabbaabbaaaabbaabbbbaabbbbba + bbbbbbbbbbaaabaaabbbbabbbabaaaaabaaaaaaabbaabbbbbaaabaaaabbaaaaaaaaaaaaaaaaaaabbbaaaabbbba + bbbbbbbbbbaaaaaaabbbbabbbbbbbbbaaaaabbaaaaaabbbbbbaabaaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaabaaaaaaabbbbbbabbbaabbbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaaabbabbbbbbbaaaabbbbbabbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbabbbbbbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbbaaaaaabaaaaabbbbaaaaaaabbbbbabaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaaabaaaabbbaaaaaaaaabbbaaabaaaaaabbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaabaaabbaabbbabbbbbaaaaaaaaaabbaaabaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbbbaaaaaaaaaabbbaabaaabaaabbabbbbaabbaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbaaaaaaaaaaaaabbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaaaaaaabbbaabbbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbaabbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbaabbbbbbbbbaabbbbaaaabbaabbaaabbbbaaaabbbbaaabbba + abbaaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbbaabbbbbbbbbaabbbbaaaabbbbbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaaaaabbbbbaabbbbbbbbbaabbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaaabbbbbaaaaaabbabbaabbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaaabbbbbaaaaaaabaaaaabbbbaaaaabaabbbabbbaaaabbbabbbbbaaba + abbbaabbbbaabbbbbabbaabaaaaabbbbaaaabbbbbaaaaaaabbaaabbbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbbaaaabaabbbbabbbbbaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbbaaaabaabbbbaabbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabaabbaaaaaaaaabbaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabaaabbaaaaaaabbbaabbaabbaaabbbaabbbaabbbaabbbbbbbbbbaba + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaaabaaaaaabbbbaabaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaaabbbbbaaaaaabbababbaaaaaabbbabbbaaabbbbaaaabbbbaaaabb + abbbbabbbabaaaaaaabbbaaaabbbabbbaaaabbbbbbbaaaaabbbbbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaba + abbbbbbbbaaabbbbbbbbbabaabbbabbbaaaabbbbbbbaaaabbbbbbbbbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbaaabaaabbbbabbbbbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaaaaaabbbbaabbaaaaabbbbabbbbbbaaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbababbaaaaabbbaabbbaaaaabbbbaabbbbbbaabaaabbabbbabbbbbbbaaaabbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbaaaabbbaabbbaaaaabbbbaabbbbbbbabaaaaabbbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaaaabaabbbbaaaaabbbbaaaabbbbbbbbbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabbabaabbbabbbabbbbbaaaaaaabbbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbaabbaaabbbbaaababbbbbaaaaaaaaabbbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaaaaabbbaaaabbbaaabababbbbaaabaaaabbaaaaaaaaaaabbbbabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbaaabbbbbbaaaaabbaabbbaaaaaaaaaaaabbbaabbbaabbbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaaabbaabbbbbbaaaaaabaaabbbaaaaaaaaaaaaabbbaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabaaabbbbbbbbbaaaabbbaaabbbaaaaabaaaaaaaabbbaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbbbaaaaabbbbabbbbaaaaababaaaaaaabbbabbbbaaaaaaababaaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbbbbbaaaaaabbbbbbbbaaaaabbabbbaaaaabbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbaabbbbbbaaaaaaabbbbabaaaaaabbbbbbbbaaaabbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbababbbaaaaaaaaabbbabbbbaaaabbaaabbaaaaabbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaababbbaaaaaaaaaabbaaaaaaaabbbbaabbbaaaabbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbbaaaaaaaaaabbbbbbaaaabbbbabbbbaaaabbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbbaaaaaaaaaabbaaabaaaabbbbaabaaaaaabbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabbaaaaaabbaabbbaaaaaaaaabbbbbbaaaabbbbbbbbaaaaaabbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbabbbaaaaabaaabbbabbbaaabbbbaabbaaaaaabbbaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbabbbaaaabaaaaabbaaaaaaabbbbabbbaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaabbbbbbbbbaaaabaaaaabbbbbbaaabbbbabbaaabaaabbbaaaabbbaaaaaabbaabbaa + ababaabbbbbbbaabbbbbbaabbbbbbbbbbaaaabbaaaabaaaaaaaaaabaabbabaaaaabbbbaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabaaabbbbbaaaabaaaaabbbbbaaaaaaaaabbaabaaaaabbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabbaaaabaabaaabbaaaaabbbbbbaaaabbbaaaaaaaaaaaaaaaaaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabbaaaabbbbaaabbbaaaaabbabbaaaabbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbaabbaaaaabaaaabaabbaabbbaaaaabbabbaaaaabbbabbbbbbaaabbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbaabbaaaaaaaaaabbbaaaabbbbbaaaaaabbaaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbaabbbaaaabbaaaababbaaabbbbbbaabaabbbaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabaabbbbaaaaabaaaabaaaaaabbbbbbaabaabbbaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaabbaaaabbbbaaaaaaaaaabbbbaaabbbbbbaaaaabbbbaaaabbabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbaaaaaaaaaabaaaaaabbbbbbaaaaabbabaaaabbabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbbaaaaaaaaabbbbaaabbbbbbaaaaaabaaaaaabbabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbabbaabbbaabbbbbbaaaaaaaaabbbaaaabbbbbbaaabaaaaaaaaabbabbbbbbbaabbbabbaab + bbbbaabaaaaaaaaaaaaaaaabbbaabbbbbbaaaaaaaaabbaaaaabbbbbbaaababbaaaaaabbabbbbbbbaabbbbbbaaa + bbbbaabaaaabaaabbbbbbaabbaaaabbbbbaaaaaaaaabbbbaaabbbbbbaaabbbbbaaaaabbaaaaaaaaaaaaaabaaaa + bbbbaabbbaabaaabbbbbbaabaabaabbbbbaaaaaaaaabaaaaaaabbbbbaaabbbbaaaaabbbabbbbbbbaabbbbbbaab + bbbbaabbbabbaaabbbbbbbaaabbbabbbbbaaaaaaaaabbbaaaaabbbbbaababbabaaaabbbabbbbbbbaabbbbbbaab + bbbbaabbbbbbaaabbbbbbaaaabbbaabbbbaaaaaaaaababbaaaaabbbbaabbaaaaaaaabbaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbbaaabbbbabbbbaaaaaaaabbbbaaaaaaaabaaabbaaaaaaabbbaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbaabbbbbaabbbbaaaaababbabbaaaaaaaaaabbbbaaaaaabbbaabbbbbbbaabbbbbbabb + abbbaabbbbbbaabbbbbbbbabbbbbbbabbbaaaaabbabbaababaaaaaaaabbbbaaaaaabbbbabbbbbbbaabbbbbbabb + bbabaabaaaabaaabaaaaaaabbbbbbaaabbbaaaabbabbaaaabbaaaaaaabaaaaaaabbbbbaabbaababaabaaaaaaab + bbabaaabbbbbaaabbaaabaabbbbbaaabbbbaaaabbabbaaaabbaaaaaaaaaaaaabbbbbbbaabbbbbaaaaaaaaabaaa + bbbbaabbbbbbaabbbaaabaabbbbbaaabbbbaaaaaaabbbaaaaaaaaaaaaaaaaaabbbbbbbaabbbbbbbaabbbbbbbbb + abbbbbbbbbbbbabbbbabbbabbbbbbaaabbbaaaaaaaabbbbaaaaabbbaaaaaaaabbbbbbbabbbbbbbaaabbbbbbbbb + bbbbabbbbbbbbabbbbabbbabbbbbbaaabbbaaabaaaabbbbaaaabbbaabaaaaaabbbbbbbbbbbbbbbbaabbbbbbbbb + bbbbabbbbbbbaabbbbbbbbabbbbbbbaaabaaaabaaaabbbbaaaabbbaaabbbaaabbbbbbbbbbbabbbbbbbbbbbbbbb + abbaabbbbbbbbabbaaabbbbbbbbbbbbaabaaabbaaabbbbbaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaa + abbaabbbbbbabbbbaaabbbbbbbbbbbbbaaaabbbaaabbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbaaabbbbaaabbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaabbbbaaabbbbbaabbaabbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbabbb + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbaabbaabbbaabaaaaabbbbbbbbbbbbbbbbbbbbbaaaaa + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbaabaaaaabbbbbbbbbbbbbbbabbbbbbaaab + bbbbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbaaaabbbbbaaaaabbababbbbaaaabbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaaaabbbbbaaaabbbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaa + bbbaabbbbbbbbbbbbbbbbaaaabbbbbabbbbbaaaaaabbbbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaa + bbbababbbbbbbbbbbbbbbaababbbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaaababbbabbbbbaaaaabbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaabbaabaaabbbbaaaaaaaaaabaaabbbbaaaaabbbbbbbaaaabbbbbbbbaaabbbba + abbbbbbbbbaaaabbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbbaaaaabbaabbaaaabaaabbbbaabbbbba + bbbbbbbbbbaaaaaaabbbbabbbabaaaaabaaaaaaabbaabbbbbbaabaaaabbaaaaaaaaaaaaaaaaaaabbbaaaabbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbaaaaaabaaabaaabbbbbbbbbbaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaabbbbbbbbbbbaaabaaaaaaabbbbbbabbbaabbbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabbaaaaabbbbbaaabbabbbbbbbaaaabbbbbabbbbbaaaabbbbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbaaaaaaaaabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbbaabaaabaaaaabbbaaaaaaaaabbbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaaabbaaabbbbaaaaaaaaaabbaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbaaaaaaaaaaabbabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbaaaaaaaaaaaaabbbabaaabaaabbabbbbaabbaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbabaabbbbbbbaabbbabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaabbbbbbbbbaabbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbbaabbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbaabbbbbbbbbaabbbaaaabbaabbaaabbbbaaaabbbbaabbbba + abbaaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbbbaabbabbbbbbaabbbaaaabbbbbbaaabbbbaabbbbbbbaabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaaaaabbbbbbaaaaaabbaababbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaaaabbbbbbaaaaaaabaaaabbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaaabbbbbbaaaaaaabaaaabbbbaaaaabaabbbabbbaaaabbbabbbbbaaba + abbbaabbbbaabbbbbabbaabaaaaabbbbaaaaabbbbaaaabaabbbbaabbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaaabbbaaaabbaabbbaabbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbbaaaaaaaabbbaabbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabaaabbaaaaaaabbbbabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabaaabaabaaaaabbbbabbaabbaaabbbaabbbaabbbaabbbbbbbbbbaba + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaaaabbbaaaaabbbbaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaaabbabbbaaaabbbababbaaabaabbbabbbaaabbbbaaaabbbbaaaabb + abbbbabbbabaaaaaaabbbabaabbbabbbaaaabbbbbbbbaaabbbbbbbbbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaba + abbbbbbbbaaabbbbbbbbbabaabbbabbbaaaabbbbbbbaaaabbbbabbbbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbaaabaaaaaabbbbbbbbbbaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaaaaaabbbbaabbaaaaaabbbaabbbbbaaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbababbaaaaabbbaabbbbaaaabbbbaabbbbbbbabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaaabbbaabbbaaaaabbbbaaaabbbbbbbbbaaaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbabaabbabbbbbaaaabbbbaaaaaabbbbbbbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabbabbbbbbbbbaaabbbbaaaaaaaabbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbaabbabbbbaaaaaaaaaabbaaaaaaaaaabbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbaabbbbbbaaabaabbaabbbaaaaaaaaaaabbbbabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbabbbbbbaaaabaabaaabbbaaaaaaaaaaaaabbbabbbaabbbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaaabbbbbbbbaaaaabbbbaabbbbaaaaaaaaaaaaabbbaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabaaabbbbbbaaaaaaabbbbbbbbbaaaaabaaaaaaaaabbaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbaaaaaaabbbbbbbbaaaaabbabbaaaaaabbbabbbbaaaaaaababaaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbbaaaaaaaaabbbaabaaaaaabbabbbbbaaaabbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbabbbbaaaaaaaaaabbbbbbbbaaaabbabbbbbaaaabbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbabbbbaaaaaaaaaaabbaaaaaaaaabbaabbbbaaaabbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaababbaaaaaaaaaaabbaabbaaaaaaaaaabbbaaaabbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbbaaaabaaaaabbbbbbaaaaaaaaabbbaaaaabbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbbaaaaabaaaabbaaaaaaabaaaaaabbaaaaabbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaaabbaabbaaaaabaaaaabbbbbbaabbbaaaaabaaaaaabbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbabbbaaaabaaaaabbaaaaaabbbbaaaabaaaaaabbbaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbabbbaaaabbaaaabbbbbaabbbbbbaaabaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaabbbbbbbbbaaaabbaaaabbabaaabbbbbbaaaaaaaaaabbbaaaabbbaaaaaabbaabbaa + ababaabbbbbbbaabbbbbbbabbbbbbbbbbaaaabbaaaabbbaaaabbbbbbaaaaaaaaaabbbbaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabaaabbbbbaaaabbaaaabbbbbaabbbbbbaaaaabaaaaabbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabbaaaabaaaaaabbbbbbaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbbaaaabbaaaabbbbbaabbbbbbaaaaaabaaaaabbbabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbbbbbaaaabbaaaabaaaaaabbbbbbaaaaaabaaaaabbbabbbbbbaaabbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbbbbaaaabbaaaabbbbaaaabbbbbaaaaaabbaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbabbbbaaaabbaaaabbbbaaaabbbbbaaaaaabbbaaaabbbbbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabaabbbbaaaabbaaaababbaaaaabbbbaaaaaabbbaaaabbbbbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaabbaaaabbbbaaaabbaaaabbbbaaaaabbbbaaabbbbaaaaaaabbbbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbaabbbbbaaaaaaaaaabaaaaaaaaabbbaababbbaabaaaabbbbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbaabbbabbbbbbaaaaabaaaabbbbaabaaaaaaabbaaaabbaaaaabbbbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbabbaabbbaabbbbbaaaaaaaaaabbbbaabbbaaaaabbaaaabbaaaaabbbbbbbbbaabbbabbaab + bbbbaabaaaaaaaaaaaaaaaabbbaabbbbbaaaaaaaaaabbbaaaabbaaaaabbbbaabbaaaabbbbbbbbbbaabbbbbbaaa + bbbbaabaaaabaaabbbbbbaabbaaaabbbbbaaaaaaaaabbbbaaaaaaaaaabbbbbbbaaaaabbbaaaaaaaaaaaaabaaaa + bbbbaabbbaabaaabbbbbbaabaabaabbbbaaaaaaaaaabaaaaaaaaaaaaabbbbbbbaaaabbbabbbbbbbaabbbbbbaab + bbbbaabbbabbaaabbbbbbbaaabbbabbbbabbaaabaaabbbbaabaaabaaaaabbbbbaaaabbbabbbbbbbaabbbbbbaab + bbbbaabbbbbbaabbbbbbbaaaabbbbbbbabbaaaabaaabaaaabbaaaaaaaaaaaaaaaaaabbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbbaaabbbbabaabbaaaabaaabbababbaaaaabbaaaaaaaaaabbbaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbaabbbbbbaabbbaaaabaaababbaaaabbbabbaaaaaaaaaabbbaabbbbbbbaabbbbbbabb + abbbaabbbbbbaabbbbbbbbabbbbbbbaabbbbaaabaaabaaaabbbbbbabaaaaaaaaaabbbbbabbbbbbbaabbbbbbabb + bbabaabaaaabaaabaaaaaaabbbbbbbaabbbbaaaaaabbbaaabbaaaaaaaaaaaabbbbbbbbaabbaababaabaaaaaaab + bbabaaabbbbbaaabbaaabaabbbbbbbaabbbbaaaaaabbbaaabaaaaaaaaaaaaaabbbbbbbaabbbbbaaaaaaaaabaaa + bbbbaabbbbbbaabbbaaabaabbbbbbbbaabbaaabaaabbbaaaaaaaabaaabaaaaabbbbbbbaabbbbbbbaabbbbbbbbb + abbbbbbbbbbbbabbbbabbbabbbbbbbbbabbaabbaaabbbbaaaaabbbbbbbbbaaabbbbbbbabbbbbbbaaabbbbbbbbb + bbbbabbbbbbbbabbbbabbbabbbbbbbbbaaaabbbaaabbbbbaaaabbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbbb + bbbbabbbbbbbaabbbbbbbbabbbbbbbbbbaabbbbaaabbbbaaabbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbbbbbbbbb + abbaabaaabbbbabbaaabbbbbbbbbbbbbbaabbbbbaabbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaaa + abbbaaaaabbabbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbbaaabbbbbabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbaabbbbbbbbbaaabbbbbbbbaabbbbbbbbbbaaabbbbbaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabaaabbbbbaaaaaabbbbaabaaaabbbbbbbbbbbbbbbbbbbbbbabbb + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbaaaaabbbbbaaaaaaabbaabbaaaaabbbbbbbbbbbbbbbbbbbbaaaaa + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaabbbbaaaabbbbbbaaabaaabbaabbaaaaabbbbbbbbbbbbbbabbbbbbaaab + bbbbbbbbbbbbbbbbbbabbbbbbbbbbaaabbbbbbaaabbbbbbaaabbabbaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaabb + bbabbbbbbbbbbbbbbbababbaabbbbaaabbbbaaaaabbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaa + bbaaabbbbbbbbbbbbbbbbaaaabbaaabbbbbbaaaaabbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbbaaaa + bbbababbbbbbbbbbbbbbbaabaabbbbbbbbbbaaababbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbbbbbabbbbbbbabbb + bbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaababbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaabbbbbbbbaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaaababbaaabbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbbabbbbbbbbbaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaaabaabaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbbaaaabbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaaaaabbaabaaaaabaaababbaabbbbba + bbbbbbbbbbaaaaaaabbbbabbbabaaaaabaaaaaaabbaabbbbbbabbaaaabaaaaaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaabaaabbbbbbbbbbaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaabbbbbbbbbbbaabbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbabaabbbbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbaaaaabbbbbaaabbabbbbbbbaaaabbbbbabbbaaaaaaaabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbbbbaaaaaaaaaabbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbbaabaaabaaaaabbbbaaaaaaaaabbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaaabbaaabbbbaaaaaaaaaabbabbaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbaaaaaaaaaaaaabbbbaaaaaaabbbbbbbaabbbaaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbbbaaaaaaabbaaabbbbaaabaaabbabbbbaabbaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbbaaabbbbbbbbaabbabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaabbbbbbbbbaabbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbbaabbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbaabbbbbbbbbaabbbbaaabbaabbaaabbbbaaaabbbbaabbbba + abbaaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbbbaaaaaabbbbbaabbbaaaabbabbbaaabbbbaabbbbbbbaabbba + abbaaaabbbbbbbbbaaaaabaabbbbaabaaaaabbbbbbaaaabaabaaaabbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaaabbbbbbbaaaaaaabaaaabbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaabbbbbbaaabbbbabbbbabbbbaaaaabaabbbabbbaaaabbbabbbbbaaba + abbbaabbbbbabbbbbabbaabaaaaabbbbaaaaabbbbaaaabbaabbbbabbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaaabbbaaaabbaaabbaabbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbbaaaaaaaabbbaabbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaaabbbaaaaaabbbbabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabaaaaabbbaaaaaabaabbaabbaaabbbaabbbaabbbaabbbbbbbbbbaba + aaaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabaaaaabbbaaaaabbabaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbabbbaaaabbbababbaaabaabbbabbbaaabbbbaaaabbbbaaaabb + abbbbbbbbabaaabaaabbbabaabbbabbbaaaabbbbbbbbaaabbbbabbbbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaba + abbbbbbbbaaabbbbbbbbbabbabbbabbbaaaabbbbbbbbaaaaabbbbbbbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbaaabbaaaaabbbabbbbbbaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaaaaaabbbaaabbbaaaabbbbaabbbbbbaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbababbaaaaabbbaabbbbaaaabbbbaaabbbbbbabaaabbabbbaabbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaaabbbabbbbaaaaabbbbaaaabbbbbbbaaaaaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbabbabbbbbbbaaaaabbbbaaaaaabbbbbbbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabbbbbbbabbbbaaaaabbaaaaaaaabbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbabbbbbbbaabaaaabaaabbaaaaaaaaaabbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbbbaaaabbabbaaabbbaaaaaaaaaaabbbbabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbbaaaaabbbbbaabbbbaaaaaaaaaaaaabbbabbbaabbbbbbbbabbbbbba + bbaaaaaabaaaaaaaaaabbbbbabaaabbbbbbaaaaaabbbbbabbbbaaaaaaaaaaaaaabbbaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabaaabbbaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaabbaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbaaaaaaaaaababbbbbbaaaaaaaaabaaaaaabbbabbbbaaaaaaababaaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbaaaaaaaaaababbbbbbaabaaaaaabbbaaaabbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbabbbbaaaabaaaaabbbaaaaaaabbbaaaabbbaaaabbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbabbbbaaaabaaaaaabaabbbaabbbbbaaaabbaaaabbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaabbbbaaaaaaaaaaabbbbaaaabbbbbbaaabbaaaabbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbaaaabbaaaaabbaaaaaabbbbbbaaaaaaaaabbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbaaaabbbaaaabbbbbbaabbbbbbaaaaaaaaabbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabbaaaaaabbabbbaaaabbbaaaabbaaaaabbbbbbbaaaaaaaaabbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbbbbaaaabbaaaabbbbbbbabbbbbbbaaaaaaaaabbbaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbbbbaaaabbaaaabbbbaaaabbbbbbbaaaaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaabbbbbbbbaaaabbbaaaabaabbaaaabbbbbaaaaaaaaabbbaaaabbbaaaaaabbaabbaa + ababaabbbbbbbaabbbbbbbaabbbbbbbbaaaabbaaaaabbbbaaaaabbbbbaaaaaaaaabbbbaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabbaabbbbaaaabbbaaaabaaaaaaaabbbbbaaaaaaaaaabbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbaaaabbbaaaabbbbbaaaaabbbbaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbbbaaaabbbaaaabaaaaaaaaabbbbaaaaaaaaaaabbbabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbbbbaaaabbaaaaabbbbbaaaaaabbbaaaaabaaaaabbbabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbbbaaaabbbaaaabbabbaaaaaaaaaabbabaaaaaaabbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbabbbaaaabbbaaaababbaabbbaaaaaabbaaaaaaaaabbbbbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabaabbbaaaaabbaaabbbbbaabbaaaaaaabbaaaaaaaaabbbbbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbaabbaaabbbbaaaaaaaaaaabbaaaaaaaaaaaaabbaaabbaaaaabbbbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbabbbbbaaaaaaaaaaabbbbaabbaaaaaaababbbbbaaaaaabbbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbaabbbabbbbbaaaaaaaaaaabbbbaabbaaaaaaabbbbbbbaaaaaabbbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbabbaabbbabbbbaabbbaaaaaaabaaaaaabaaabaaaaabbabbaaaaabbbbbbbbbaabbbabbaab + bbbbaabaaaaaaaaaaaaaaaabbbaabbbaabbbaabaaaabbbbaaababbbbaaaaaaabbaaaaabbbbbbbbbaabbbbbbaaa + bbbbaabaaaabaaabbbbbbaabbaaaabbabbbbaabaaaabaaaaaababbaabaaaaaabaaaaabbbaaaaaaaaaaaaabaaaa + bbbbaabbbabbaaabbbbbbaabaabaabbbbbbbaaaaaaabbbbaabaaaaaabbbaabbbaaaaabbbbbbbbbbaabbbabbaab + bbbbaabbbabbaaabbbbbbbaaabbbabbaabbbaaaaaaabaaaabaabbaaaaaaaababaaaabbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbaaaabbbbbbaabbbaaaaaaabbbbabaabbabbbaaaaaaaaaaabbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbbaaabbbbabaabbbbaaaaabbabbabaaaaaabbaaaaaaaaaabbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaabbbbbbbaaabbbaaaaabbbbbaaaaaaaabaaaaaaaaaaabbbaabbbbbbbaabbbbbbabb + abbbaabbbbbbaabbbbbbbbabbbbbbbbbaabbbaaaaabbbaaaaaaaaaaaaaaaaabbbabbbbbabbbbbbbaabbbbbbabb + bbabaabaaaabaaabaaaaaaabbbabbbbbabbaaaaaaabbaaaaaaaaaaaaaaaaaabbbbbbbbbabbaababaabaaaaaaab + bbabaaabbbbbaabbbaaabaabbbbbbbbbaaaabbaaaabbaaaaaaabbbbbbbbaaaabbbbbbbaababbbaaaabbaaabaaa + bbbbaabbbbbbaabbbaaabaabbbbbbbbbbaaabbaaaabbaaaabbabbbbbbbbbaaabbbbbbbaabbbbbbbaabbbbbbbbb + bbbbbbbbbbbbbabbbbabbbabbbbbbbbbbaaabbaaaabbbbaabbbbbbbbbbbbaaabbbbbbbabbbbbbbaaabbbbbbbbb + bbbbabbbbbbbbabbbbabbbabbbbbbbbbbbabbbaaaabbbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbbb + bbbaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaabbbbbbabbbbbaaaabbbbbbbbbbabbbbbbbbbbbbbbb + abbaaaaaabbbbabbaaabbbbbbbbbbbbbbbbbbaaaaabbbbaaabbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbaaaa + abbbaaaaabbabbbbaaabbbbbbbbbabbbbbbbbabaaabbbbaabbbabbaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbaabbbbbbbbbaaabbbbbbbbabbbabbbbbaaaabbbbbbaaabbbabbbabbbaaabbbbbbbbabbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbaaabbbbbbbbbabbaabbbbaababbbbbbaaabbbaabbabbaaaaabbbbbbbbbbbbbbbbbbbbbabbb + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbaaaabbbbbbaaabbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaa + bbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbaaaabbbbbbaaabbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbababbbbbbbbaaabbbbbaaaabbbbbbaaabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaabb + bbabbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbaaaaabbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaba + bbaaabbbbbbbbbbbbbbbbaaaabbbbbabbbbbaaababbbbbbbaaaabbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbbaaaa + bbbababbbbbbbaaabbbbbaabaabbbbbbbbbbaaababbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbbbabbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaabbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaabba`, + map `abbbbbbbbbbbabbbbababaabaaabbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaaabaabaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbbaaaabbaaabbaabaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaaaaabbaabbaaaabbaababbaabbbbba + bbbbbbbbbbaaaaaaabbbbabbbabaaaaabaaaaaaabbaabbbbbbbbbaaaabaaaaaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaabaaabbbbbbbbbbaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbaaaaabbbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaaabbabbbbbbbaaaabbbbbabbbaaaaaaaabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbbbbbaaaaaaaaabbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbbaabaaabaaaaabbbbaaaaaaaaaabbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaaabbaaabbbbaaaaaaaaaaabbbbaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbaaaaaaaaaaaaabbbbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaaabbaaaaaabbbbbaaabbbbbbbaabbbbaaabaaabbabbbbaabbaaabaaaabbbba + abbbaaaaabbbbbaaaaabbbbbaaaaaabbaaaaaabbbbbaabbbbbbbbaabbabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaabbbbbbbbbbabbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbbbabbbbaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbaaaaabbbbbbbabbbbaaabbaabbaaabbbbaaaabbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaaabbbbaabaaaabbbbbbaaaaaaabaaaaabbbaaaabbabbbaaabbbbaabbbbbbbaabbba + abbaaaabbbbbbbbbaaaaabaabbbbaabaaaaabbbbbbaaaaaaabaaaaabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaaaabbbbbbaaaabaaabaaabbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaaabbbbbaaabbbbabbbbabbbbaaaaabaabbbabbbaaaabbbabbbbbaaba + abbbaabbbbbabbbbbabbaabaaaaabbbbaaaaabbbbaaaabbaabbbbabbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaaabbbbaaaaaaaabbaabbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaaabbbbaaaaaaabbbaabbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaaabbaabaaaaabbbabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabaaaaaabbaaaaaabbbbbaabbaaabbbaabbbaabbbaabbbbbbbbbbaba + aaaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabaaaaabbbaaaabbbabaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbabbbaaaabbbababbaaabaabbbabbbaaabbbbaaaabbbbaaaabb + abbbbabbbaabaabaaabbbabaabbbabbbaaaaabbbbbbbaaaabbbabbbbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaba + abbbbbbbbbaaabbbbbbbbabbabbbabbbaaaabbbbbbbbaaaaabbbbbbbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbaaabbaaaaabbbabbbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaaaaaabbbaabbbbaaaabbbbaabbbbbaaabbaabbaabbabbbbbbbaaaabbbbba + aabbbbbbbaaabbbbbbbaaabbbabaabaaaabbbbaabbbbaaaabbbbaabbbbbbaabaaabbabbbaabbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaabbbbbbbbbaaaaabbbbaaaabbbbbbbabaaaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbabbbbbbbabbbaaaabbbbaaaaaabbbbbbbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbbbbbaabbbbaaaaabbaaaaaaabbbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbbaaaabaaaabaaabbaaaaaaaaaabbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaaaabbabaaabbbbaaaaaaaaaaabbbbabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbaaaaaaabbabaaabbbbaaaaaaaaaaaaabbaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaaabbbaaaaaaaaabbbbbabbbbaaaaaaaaaaaaaabbbaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabaaabbbaaaaaaaaabbbbbbbbbaaabbbbaaaaaaaabbbaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbaaaaaaaaabbabaaaabaaabbbbbaaaaaaaabbbabbbbaaaaaaababaaaaaa + bbabbbbbbaaabbbbbaabbbbaabbaabbbaaaabaaaabbbbaabbbaabbbbbbaaaaaaaabbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbabbbbaaaabaaaabbbbbbbaaaabbbbbbaaaaaaaabbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbabbbbaaaaaaaaaabbaaaabaabbbbbbbaaaaaaaabbbaabbbaabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbaabbbbaaaabbaaaabbbbbbbaabbbbbbbaaaaaaaabbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbbaaaabbaaaabbbaaaaaaaabbbbbaaaaaaaabbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbbbaaaabbaaaabbaabbbaaaabbbbbaaaaaaaabbbbabbaaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabbaaaaaabbabbaaaaabbaaaabbbbbbaaaaabbbbbaaaaaaaabbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbbbaaaaabbaaaabbaaabbaaaabbbbbaaaaaaaabbbaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbbbaaaaabbaaaabbbbbbaaaaabbbbbaaaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaabbbbbbbaaaabbbaaaaabaaaaaaaaaabbbbaaaaaaaabbbaaaabbbaaaaaabbaabbaa + ababaabbbbbbbaabbbbbbbaabbbbbbbaaaabbbaaaaabbbbbaaaaaaabbbaaaaaaaabbbbaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabbabbbbaaaabbbaaaaabbaaaaaaaaaaaaaaaaaaaaabbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbbaaaaabbbaaabbabbbaaaaaaaaababaaaaaaabbbaaaaaaaaaaaaaaaaaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbbaaaaabbbaaabbbbbbaaaaaaaaababbbbaaaaabbbabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbbbaaaaaaaaaaabbaaaaaaaabaaaababbbaaaaaabbbabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbbaaaaaaaaaaaabbbbaaabbbbaaaaabbbaaaaaaabbbbbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbbbbaaaaaaaaaaabbaaaaaabbbbaaaaabbbbaaaaaabbbbbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabaabbbbaaaaaaabbaaaabbbbaaabbbbaaaaabbbbaaaaaaabbbbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbaabbaabbbaaaaaabbbaaabbbbbaabaaaaaaaaababbbbbaaaaabbbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbbbbbaaaabbbbbaaabbaaaaabbbaabbaaaabbbbbbaaaaabbbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbaabbbabbaaaabbbbbaaaabbbbbaabbbaabbaaababbbbbaaaaabbbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbabbaabbbbbbaaaabbbbbaaaabbaaaaaaabaabbbbabbbbbbbaaaabbbbbbbbaaabbbabbaab + bbbbaabaaaaaaaaaaaaaaaabbbabbbaaabbbbbbaaabbbbbaaabbbabbbbbaaabbbaaaaabbbbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbbbbaabbabbbbaaabbbbbbaaabbbaaaaabababbbbaaaabbbaaaaabbaaaaaaaabaaaabaaaa + bbbbaabbbaabbaabbbbbbaabaabbbbaababbbbbaaabbabbaaaabbbbbbbbaaabbbaaaabbbbbbbbbbaabbbabbaab + bbbbaabbbabbbaabbbbbbbaaabbbbbaaaabbbbaaaabbbbbaaaabbbbbbbbaaaaaaaaaabbbbbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbaaaabbbbbaaaabbbbaaaabbaaaaaaabbbbbbbaaaaaaaaaaabbabbbbbbbaabbbabbaab + abbbaabbbbbbbabbbbbbbbaaabbbbbaaaaabbaaaaabbbbbabbaaaabbbbbaaaaaaaaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbbabbbbbbbbaabbbbbbbaaaaaaaaaaabbbaaabbaaabbbbbbaaaaaaaabbbbabbbbbbbaabbbbbbabb + aabbaabbbbbbbabbbbbbbbabbbbbbbbbaaaaaaaaaabbabbabaaaabbbbbaaaaabbabbbbbabbbbbbbaabbbbbbabb + bbbbaabaaaabaaabaaaaaaabbabbbbbbbaaabaaaaabbaababaaabbbbbbbaaaabbbbbbbbabbaababaabaaaaaaab + bbbbaaabbbbbaaabbaaabaabbbbbbbbbbbbbbaaaaabbaabaabbbbbbbbbbbaaabbbbbbbaababbbaaaabbaaabaaa + bbbbbabbbbbbaabbbaabbaabbbbbbbbbbbbbbaaaaabbaaaaabbbbbbbbbbbaaaabbbbbbaabbbbbbbaabbbbbbbbb + abbbabbbbbbbbabbbbabbbabbbbbbbbbbbbbbaaaaabbbbaaabbbaabbbbbbaaaabbbbbbabbbbbbbaaabbbbbbbbb + bbbbabbbbbbbbabbbbabbbabbbbbbbbbbbbbbaaaaabbbbaabbbbaabbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbbb + abbaabbbbbbbaabbbbabbbbbbbbbbbbbabbbbaaaaabbbbaaabbbbabbbbbbaaaaabbbbbbbbbabbbbbbbbbbbbbbb + abbaaaaaabbbbabbaaabbbbbbbbbbbbabbbbbaaaaabbbbaaabbbbaabaaabbaaaabbbbbbbbbbbbbbbbbbbbbaaaa + abbbbaaaabbabbbbaaabbbbbbbbbabbbbbbbbaaaaabbbbaaabbbbbaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbaaaa + abbbbaabbbbbbbbbaaabbbbbbbbabbbabbbbbaaaaabbbbbaabbbbaaaaaabbaaaabbbbbbbabbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbaaabbbbbbbbbabbabbbbaaaaaabbbbbaaabbbaabbaabbaaaabbbbbbbbbbbbbbbbbbbbbabbb + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbaabbbbaaaaaabbbbbaaabbbaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbaaaaa + bbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbaaaaabbbbbbaaabbbaabbbabbaaaaabbbbbbbbbbbaaabbbbbbaaab + bbbbbbbbbbbbbbbbbbababbbbbbbbaaabbbbaaaaaabbbbbaaabbbbabbbbabaaaaabbbbbbbbbbbbbbbbbbbbaabb + bbabbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbaaaaabbbbbbbaaabbbbbbbbabaaaaabbbbbbbbbbbbbbbbbbbbaaba + bbaaabbbbbbbbbbbbbbbbaaaabbbbbabbbbbaaaaabbbbbbbaaaabbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbaaaa + bbbababbbbbbbaaabbbbbaabaabbbbbbbbbbaaaaabbbbbbbbaaabbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaabbbbbbbabbaaaaabbbbbbbbbbbbbbbbbbaabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaabbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbaabba`, + map `abbbbbbbbbbbabbbbababaabaabbbbbaaaaabbbbbbbbbbaabbbbbbbbbaaaaaabbbbbbabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaaabaabaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbabbbbbbbbbaaabbbba + abbbbbbbbbaaaabbaaabbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaabbaaaabbaababbaabbbbba + bbbbbbbbbbaaaaaaabbbbabbbabaaaaabaaaaaaabbaabbbbbbaabaaaabaaaaaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaabaaabbbbbbbbbbaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbbbbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbabbaabbbbbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbaabaaaaabbbbbaaabbabbbbbbbaaaabbbbbabbbabaaaaaabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbbbbbaaaaaaaaabbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbbaabaaabaaaaabbbbaaaaaaaaabbbbbaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaaabaaabbaaabbbbaaaaaaaaaaabbbbaaaaaabbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbaaaaaaaaaaaabbbbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaaabbaaaaaabbbbbaaabbbabbaaabbbbaaabaaabbabbbbaabbaaabaaaabbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbbbaabbbbbbbbaabbabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaabbbbbbbbbaabbabaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbbbabbbbaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbaaababbbbbbbabbbbaaabbaabbaaabbbbaaaabbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaaabbbbaabaaaabbbbbbaaaaaaabbbbaabbbbaaabbabbbaaabbbbaabbbbbbbaabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaaaabbbbbbbaaaaaaabaaaaabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbbbbaaaaaaabbaaabbbbaaaaaaaabbbbabaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaabbbbbbaaabbbaabbbbabbbbaaaaabaabbbabbbaaaabbbbbbbbbaaba + abbbaabbbbbabbbbbabbaabaaaaabbbbaaaabbbbbaaaabbaabbbbabbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaaabbbbaaaaaaaabbbabbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbbbaaaaaaabbbaabbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaabbbaaaaaaabbbbabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaaabaabbaaaaaabbabbaabbaaabbbabbbbaabbbaabbbbbbbbbbaba + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaaaabbbaaaabbbabaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbabbbaaaabbbababbaaaaaabbbabbbaaabbbbaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbaaaaabbbabbbaaaabbbababbbaaaaabbbabbbaaaaaaaaaaabbbbaaabba + abbbbbbbbbaaabbbbbbbbabbaabbabbbaaaabbbbbbbbaaaaabbabbbbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbbbaaabbaaaaabbbbbbbbbaaaabbbabbbabaabbaabbaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbbabbaaaaaabbbbaabbbaaaaabbbbabbbbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbaaaabbbbaabbbaaaaabbbbaabbbbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaabbbbbbbbbaaaaabbbbaabbbbbbaabaaaaaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbbbbbbabbaaaaabbbbaaaabbbbbbbbbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbbbbaaabbbbaaaaabbaaaaabbbbbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbaaaaabaaaaaaaabaaaaaaaabbbbbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabaaaabbbaaaabbbbbbbaaaaaabaabaaabbbaaaaaaaaaabbbbbaabbbaaabbbbbbbaabbbbbba + bbaaaabbbbabbbaaaaaabbbbaaaabbbbaaaaaaaaabaabaaabbbaaaaaaaaaaaabbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaabbbaaaaaaaaaabbabbabbbbaaaabbaaaaaaabbbaaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabbabbbaaaaaaaaaabbbbbbbbbaaaabbbbbaaaaaabbbaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbabbbaaaaabaaaabbabaabbbaaaabbbbbaaaaaabbbbabbbbaaaaaaababaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbabbbaaaabbaaaabbbabbaaaaaabbbbbbaaaaaabbbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaabbbbaabbabbbaaaaabaaaabbbbbaabaaaabbbbbbaaaaaabbbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaaaabbbaaaabbaabbbaaaabbbbbbaaaaaabbbbaabbbaabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbaaaabbbaaaabbbbbaaaaaaabbbbbaaaaaabbbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbaabbbaaaabbbaaaabbaaabbaaaaabbbbbaaaaaabbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaabbbaaaaabbbaaaabbbbbbaaaaaabbbbbaaaaaaabbbbabbaaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaaabbbbaaaaabbaaaaabbbaaaaaaaaabbbbbaaaaaabbbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbbaaaaabbbaaaabbabbbbaaaaaabbbbaaaaaabbbaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbbaaaabbbbaaaabbbbaaaaaaaaabbbbbaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaabbbbbbaaaabbbbaaaabaaabbaaaaaaaabbbaaaaaaabbbaaaabbbaaaaaabbaabbaa + ababaabbbbbbbaabbbbbbbaabbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaaaaabbbaaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaabbbaaaaabaaabbaaaabaaaaabaabaaaabbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbaaaaabbaaaaabbbbbbaaaabbaaabaabbaaaabbbaaaaaaaaaaaaaaaabaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbaaaaaaaaaaaabbaaaaaaaabbaaaaabbbaaaabbbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbbaaaaaaaaaaaabaabbbaaaabbaaaaabbbbaaaabbbbabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbaaaaaaaaaaaabbbbaaaababbbaaaaabbbaaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabbbbbaaaaaaaabbbbbabaaabaaabbbbaaaaaabbbaaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabbbbbaaaaaaaabbbbbabbbbbaaaaabaabbaaabbbbaaaaabbbbbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbbaaaaaaaabbbbbbabaaaaaabaaaabbaabbbbbbaaaaaabbbbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbbaabbbabbbbbbbbabbbbbaabbbaabbbaaabbbbaaaaaaabbbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbbbbaabbbbaabbaabbbbbbbbabbbaaaababaabbbaaabbbbbaaaaaabbbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbabbaabbbbaaaaabbabbbbbaabbbbbaaaabaabbbbbaaabbbaaaaaabbbbbbbaaabbbabbaab + ababaabaaaaaaaaaaaaaaaabbbbbaaaabaabbbbbaabbbbbaaaabaabbbbbbaabbbbaaaabbbbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbbbbaabbbbbaaaaaaaabbbbaabaaaaaaabaaabbbbbbaabbbbaaaabbaaaaaaaaaaaaabaaaa + bbbbaabbbaabbaabbbbbbaabbbbbaaaaaaaabbbaaabbbbbaaaabbbbbbbbbaabbbbaaaabbbbbbbbbabbbbbbbaab + bbbbaabbbabbbaabbbbbbaababbbaaaaaaaabbaaaabbaaaaaaabbbbbbbbbbaaabaaaabbbbbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbaaabbbbaaaaaaaaaaaaaabbbbbaaaabbbbbbbbaaaaaaaaaabbabbbbbbbaabbbabbaab + abbbaabbbbbbbabbbbbbbaaaabbbbaaaaaaaaaaaaabbbaaaaaaaabbbbbbbaaaaaaaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbbabbbbbbbaaabbbbbbbbbbbaaaaaaababbbabbaaabbbbbbbaaaaaaaabbbabbbbbbbaabbbbbbabb + abbaaabbbbbbaabbbbbbbaabbbbbbbbbbbbbaaaaaabbbbbabaaaabbbbbbaaaaaaaabbbbbbbbbbbbaabbbbbbabb + bbbaaabaaabbaaabaaaaaaabbbbbbbbbbbbbaaaaaabbbaaabaaaabbbbbbaaaabbbbbbbbbbbbababaaaaaaaaaab + bbbbaaabbbbbaabbbaaabaabbbbbbbbbbbbbaaaaaabbabaaabbbbbbbbbbbaaabbbbbbbaababbaaaaabaaaabaaa + bbbbabbbbbbbaabbbaabbbabbbbbbbbbbbbbaaaaaabaaaaaabbbbbbbbbbbaaabbbbbbbabbbbbabbaaabbbbbbbb + bbbbabbbbbbbaabbbbabbbabbbbbbbabbbbbaaaaaabaabaabbbabbbbbbbbaaaabbbbbbabbbbbbbaaabbbbbbbbb + abbaabbbbbbbaabbbbabbbabbbbbbbbbbbbbaaaaaabbbbaaabbaaabbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbbbb + abbaabbbbbbbaabbbbabbbbbbbbbbbbbbbbbaaaaaabbbbaabbbbbbbbbbabaaaabbbbbbbbbbabbbbbbbbbbbbbbb + abbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbaaaaaabbbbaaabbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaa + abbbbaaaaaaaabbbaaabbbbbbbbbabbbbbbbaaaaaabbbbaaabbbbbaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbaaaa + abbbbaabbbbbabbaaaabbbbbbbbabbbabbbbaaaaaabbbbaaaabbbaaaaaabbaaaabbbbbbbabbbbbbbbbbbbaaaaa + abbbbbbbbbbaabbbaaabbbbbbbbbabbbbbbbaaaaaabbbbbababbbaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbabbb + abbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbaaabaabbbbbaaabbbbabbaabbaaaabbbbbbbbbbbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbaabbbbbbbbbbaabbbbbaaabaabbbbbaaabbbbbbbaaabbaaaabbbbbbbbbbbaabbbbbbbaaab + bbbbbbbbbbbbbbbbbbababbbbbbbaaabbbbbaaaaaabbbbbaaabbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbbaaaaaabbbbbaaaabbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbaaba + bbaaabbbbbbbbbbbbbbbbaaaabbbbabbbbbbaaaaaabbbbbbaaabbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbaaaa + bbbababbbbbbbaaabbbbbaabaabbbbbbbbbbaaaaaabbbbbbaaaabbbbbbaabaaaaaabbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaabbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbaabbbbbbaabbaaaaabbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbababaabaabbbbbaaaaabbbbbbbbbbaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbbaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaaabaabaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbabbbbbbbbbaaabbbba + abbbbbbbbbaaaabbaaabbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaabbaaaabbaababbaabbbbba + bbbbbbbbbbaaaaaaaabbbabbbabaaaaabaaaaaaabbaabbbbbbaabaaabbbaaaaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaabaaabbbbbbbbbbaaaaaaaaaaaaaaabbabbaaaabbbbaabbbbba + abbbbbbbbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaabbbbbbbbbbbabaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbaabaabbbbbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbabbaaaaabbbbbaaabbabbbbbbbaaaabbbbbabbbabaaaaaabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbbbbbaaaaaaaaabbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbbaabaaabaaaaabbbbaaaaaaaaabbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaabbbbaaabaabbbbbbbbaaabaaabbaaabbbbaaaaaaaaaaabbbbaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbaaaaaaaaaaaabbbbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbbbaaabbbabbaaabbbbaaabaaaabbbbbbaabbaaaaaaaabbbba + abbbaaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbbbaabbbbbbbbaabbabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaabbbbbbbbbaabbabaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbbbabbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbaaababbbbbbbabbbbaaabbaabbaaabbbbaaaabbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaaabbbbaabaaaabbbbbbaaaaaaabbbbaabbbbaaabbabbbaaabbbbaabbbbbbbaabbba + abbaaaabbbbbbbbbaaaaabaaabbbaabaaaabbbbbbbaaaaaaabaaaaabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaaabbbbbbbaaaaaaabbaaabbbbaaaaaaaabbbbabaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaabbbbbbaaabbbaabbbbabbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + abbbaabbbbbabbbbbabbaabaaaaabbbbaaaaabbbbaaaabbaabbbbabbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaaabbbbaaaaaaaabbbabbbaaaaabbbaaaaabbabbaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaaabbbbaaaaaaabbbaabbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaabbbaaaaaaabbbbabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaaabaabbaaaaaabaabbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaabbaaaaabbbaaaabbbabaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbabbbaaaabbbababbaaaaaabbbabbbaaabbbbaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbaaaaabbbbbbbaaaabbbababbbaaaaabbbabbbaaaaaaaaaaabbbbaaabba + abbbbbbbbbaaabbbbbbbbabbabbbabbbaaaabbbbbbbbaaaaabbabbbbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaabbbbaaabbaaaaabbbbbbbbbaaaabbbabbbabaabbaabbaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbbabbaaabaabbbbaabbbaaaaabbbbabbbbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabaabaaaabbbbaabbbaaaaabbbbaabbbbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbbaabaaaaabbbaaabbbbbbbbbaaaaabbbbaabbbbbbaaaaaabaabbbaabbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbbbbbbabbaaaaabbbbaaaabbbbbbabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbbbbaaabbbbaaaaabbaaaaabbbbbbbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbaaaaabaaaaaaaabaaaaaaaabbbbbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaaaabaabbaabbbaaaaaaaaaabbbbbaabbbaaabbbbbbbbabbbbbba + bbaaaabbbbabbbaaaaaabbbbaaaabbbbaaaaaaaaabbabaaabbbaaaaaaaaaaaabbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaabbbaaaaaaaaaabbabbabbbbaaaabbaaaaaaabbbaaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbaaabbbbaabbabbbaaaaaaaaaabbbbbbbbbaaaabbbbbaaaaaabbbaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbabbbaaaaabaaaabbbbaabbbaaaabbbbbaaaaaabbbbabbbbbaaaaaababaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbabbbaaaaabaaaabbbabbaaaaaabbbbbbaaaaaabbbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbabbbaaaaabbaaabbbbbaabaaaabbbbbbaaaaaabbbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaaaabbbaaaabbaabbbaaaabbbbbbaaaaaabbbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbaaaabbbaaaabbbbbaaaaaaabbbbbaaaaaabbbbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbabbbbaaaabbbaaaabbaaabbaaaaabbbbbaaaaaabbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaaabbaaaaabbbaaaabbbbbbaaaaaabbbbbaaaaaabbbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaaabbbbaaaaabbaaaaabbbaaaaaaaaabbbbbaaaaaabbbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbbaaaabbbbaaaabbabbbbaaaaaabbbbaaaaaabbbaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbbaaaabbbaaaaabbbbaaaaaaaaabbbbbaaaaaabbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaabbbbbbaaaaabbbaaaabaaabbaaaaaaaabbbaaaaaaabbbaaaabbbaaaaaabbaabbaa + ababaaabbbbbbaabbbbbbbaabbbbbbaaaaabbbaaaabbbbbbaaaaaaaaaaaaaaaaaabbbaaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabbbbbbaaaaabbaaaaabaaabbaaaabaaaaabaabaaaabbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaabbbbbbaaaaaabaaaaabbbbbbaaabbbaaabaabbaaaabbbaaaaaaaaaaaaaaaabaaba + bbbbaabbbbbbbaabbbbbbaaabbbbbbaaaaaaaaaaaabbaaaaaababbaaaaabbbaaaabbbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaaabbbbbaaaaaaaaaaaabaabbbaababbaaaaabbbbaaaabbbbabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbaaaaaaaaaaaabbbbaaaabbbbaaaaaabbbaaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabbbbbaaaaaaaabbbbbabaaabaaababbaaaaaabbbaaaaabbbabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabbbbbaaaaaaaabbbbbabbbbbaaaaabbabbaaabbbbaaaaabbbbbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbbaaaaaaaabbbbbbabaaaaaaabbbbabbababbbbaaaaaabbbbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbaabbbbaabbbabbbbbbbbabbbbbaabbbbbabbaaabbbbaaaaaaabbbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbbbbaabbbbaabbaabbbbbbbbabbbaaaabbbbaabbaaabbbbbaaaaaabbbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbabbaabbbbaaaaabbabbbbbaabbbbbaaabababbbbbbaabbbaaaaaabbbbbbbaaabbbabbaab + ababaabaaaaaaaaaaaaaaaabbbbbaaaabaabbbbbaabbbbbaaabbbbbbbbbbaabbbbaaaabbbbbbbbaaabbbbbbaaa + bbbbaababaabaaabbbbbbaabbbbbaaaaaaaabbbbaabaaaaaaabababbbbbbaaabbbaaaabbaaaaaaaaaaaaabaaaa + bbbbaabbbaabbaabbbbbbaabbbbbaaaaaaaabbbaaabbbbbaaaaabbbbbbbbaabbbbaaaabbbbbbbbbabbbbbbbaab + bbbbaabbbabbbaabbbbbbaabbbbbaaaaaaaabbaaaabbaaaaaababbbbbbbbaaabbbaaabbbbbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbaaabbbbaaaaaaaaaaaaaabbbbbaabbabbbbbbbaaaaaaaaaabbabbbbbbbaabbbabbaab + bbbbaabbbbbbbabbbbbbbaaaabbbbaaaaaaaaaaaaabbbaaaabbaaabbbbbbaaaaaaaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbbabbbbbbbbaabbbbbbbbbbbaaaaaaababbbaabbaaabbbbbbaaaaaaaabbbabbbbbbbaabbbbbbabb + abbbabbbbbbbbabbbbbbbbabbbbbbbbbbbbbaaaaaabbbbbabbaaaabbbbbaaaaaaaabbbbbbbbbbbbaabbbbbbabb + abbbaabaaabbaaabaaaaababbbbbbbbbbbbbaaaaaabbbaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbabaaaaaaaaaaa + abbbaaabbbbbaaabbaaabaabbbbbbbbbbbbbaaaaaabbabaaabbbbbbbbbbbaaabbbbbbbbababbaaaaabaaaaaaaa + bbbbabbbbbbbaabbbaabbaabbbbbbbbbbbbbaaaaaabaaaaaabbbbbbbbbbbaaabbbbbbbabbbbbabbaabbbbbbaaa + abaaabbbbbbbaabbbaabbbabbbbbbbabbbbbaaaaaabaabaabbbbaabbbbbbaaaabbbbbbbbbbbbbbaaabbbbbbbbb + abbaabbbbbbbaabbbbabbbabbbbbbbbbbbbbaaaaaabbbbaaabbaaabbbbbbaaaabbbbbbbbbbbbbbbabbbbbbbbbb + abbaabbbbbbbaabbaaabbbbbbbbbbbbbbbbbaaaaaabbbbaabbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaab + abbbaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbaaaaaabbbbaaabbbbabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaab + abbbbaaaaabaaabbaaabbbbbbbbbabbbbbbbaaaaaabbbbaaabbbbbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbaaaa + abbbbaabbbbbabbbaaabbbbbbbbbbbbabbbbaaaaaabbbbaaaabbbaaaaaabbaaaabbbbbbbabbbbbbbbbbbbbaaaa + abbbbbbbbbbabbbbaaaabbabbbbbabbbbbbbaaaaaabbbbbababbbaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbabbb + abbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbaaabaabbbbbaaabbbbabbaaabbaaabbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbaaabbbbbbbbbaabbbbbaaabaabbbbbaaabbbbbbbaaabbaaaabbbbbbbbbbbaabbbbbbbaaab + bbbbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbaaaaaabbbbbaaabbbbbbbaaaabaaaabbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaabbbbabbbbbbaaaaaabbbbbaaabbbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaba + bbaaabbbbbbbbbbbbbbbbaaaabbbbabbbbbbaaaaaabbbbbbaaabbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbaaaa + bbbababbbbbbbaaabbbbbaababbbbbbbbbbbaaaaaabbbbbbaaaabbbbbbaaabaaaaabbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaabbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaabbbbbbbaabaaaaabbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbababaabaabbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbaaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaaabaabaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbabbbbbbbbaaaabbbba + abbbbbbbbbaaaabbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaabbaaaabbaabbbaaabbbbba + bbbbbbbbbbaaaaaaaabbbabbbabaaaaabaaaaaaabbaabbbbbbaabaaaabbaaaaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaabaaabbbbbbbbbbaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbabbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaabbbbbbbbbbbaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbaaaaabbbbbaaabbabbbbbbbaaaabbbbbabbbbbaaaaabbbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbaaaaaaaabbbbbaaaabbbbbbbbbaaabbbbbbabaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbbaabaaabaaaaabbbbaaaaaaaaabbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaabbbbbbbbaaabaaabbaaaabbbaaaaaaaaaabbabbaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbaaaaaaaaaaaabbbbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbabaaaaaaaaaaaabbbbaaabaaaabbbbbbaabbaaaaaaaabbbba + abbbaaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbbbaabbbbbbbaaabbbbaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaabbbbbbbbbaabbabaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbbaabbbbaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbaabbbbbbbbbaabbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaaabbbbaabaaaabbbbbbaaaaabbbbbbaabbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaaabbbaabaaaabbbbbbbaaaaaaabaabaabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbbbbaaaaaaabaaaabbbbaaaaaaaabbbbabaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaabbbbbbbaaabbaabaaaabbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + abbbaabbbbbabbbbaabbaabaaaaabbbbaaaaabbbbaababbaabbbbabbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbbaababbaabbbbabbbbaaaabbbaaaaabbabbaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbbaaaaaaaaabbaabbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaabbbaaaaaabbbbbaabbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaaabaabbaaaaabbaabbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaaaabbbaaaaaababbaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbabbbaaaabbbababbaaaaaabbbabbbaaabbbbaaaabbbbaaaabb + abbbbabbbabbaabaaabbbabaabbbabbbaaaaabbbbbbbaaabbbbbbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaba + abbbbbbbbbaaabbbbbbbbabbabbbabbbaaaabbbbabbaaaaabbbbbbbbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaabbbbaaabaaaaaababbbbbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabaaabbbaabbbaaaaabbbbbbbbbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbababbaaaaabbbaabbbaaaabbbbbbbbbbbbaaabaaabbabbbabbbbbbbaaaabbbbba + abbbbbbbbaaabbbbbbbbaabaaaaabbbaaabbbbbbbbbaaaabbbbbabbbbbbaaaaaaabaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbaabbbbbbaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbabbbbaaaaaaaabbbbbbbbbbaaabbbbaabbbbbaaabbbbbbabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaabbbaaaabbbbbbbbaaaabbaaaaaaaabaaaaabbbbbbbbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaaaaabbbaaaabbbbbbbaaaaabbaabbaaabbaaaaaaabbbbbbbbaabbbaaabbbbbbbbabbbbbba + bbaaaabbbbabbbaaaaaabbbbaaaabbbbbaaaaaaaabaabbaabbbaaaaaaaaaabbbbbaaabbbaaabbabbbaabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaabbbaaaaaaaaabbbabaabbbbaaaaaaaaaaabbbbaaaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbaaabbbbaabaabbbaaaaaaaaabbbababbbbbaaaabbbaaaaabbbabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbabbbaaaaaaaaaabbbbbbbbbaaaaabbbbbaaaabbbbbabbbbbaaaaaababaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbbbbaaaaabbaaaabbbbaabbbaaaaabbbbbaaaabbbbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbbbbaaaaabbbaaabbbaabbbaaaaabbbbbbaaaaabbbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbaaaaabbbaaaabbbbaabaaaaabbbbbbaaaaabbbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbabbbaaaaabbbaaaabbaabbbaaaaaabbbbbaaaaabbbbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbabbbaaaabbbbaaaabbbbbaaaaaaaaabbbbaaaaabbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaabbaaaaabbbbaaaabbaaabbaaaaaaabbbbaaaaabbbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaaabbbaaaaabbbaaaaabbabbbaaaaaaaabbbbaaaaabbbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbaaaaabbbaaaaabbbaaaaaaaaaaabbbbaaaaabbbaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbbaaaaabbbaaaaabbabbbbaaaaaaabbbbaaaaabbbbaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaabbbbbaaaaabbbbaaaabbbbbaaaabbaaaabbbaaaaabbbbaaaabbbaaaaaabbaabbaa + ababaaabbbbbbaabbbbbbbabbbbbbaaaabbbbaaaaabaaabbaaabbbaaabbbaaaaabbbbaaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaaabbbbbaaaabbbbaaaaabbbbbbaaaabbaaaaaaaaaaabbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaabbbbbaaaaabbbaaaaaabaaaabaaabbbaaaaabbaaaabbbbaaaaaaaaaaaaaaaabaaba + bbbbaabbbbbbbaabbbbbbaaabbbbaaaaaaaaaaaaaabbbbbbaababbbaaabbabbaabbbbbaabbbbbbaaabbabbaaba + bbbbaabbbbbbbaabbbbbbaaabbbbaaaaaaaaaaaaaabbbaaaaababbbaaaaabbbaaabbbaaabbbbbbaaabbbbbbabb + bbbbaabbbbbbbaabbbbbbaabbbbbaaaaaaaaaabbbbbaabbaaabbbbbaaaaaaaaaaabbbaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbbaabbbbbbabbbbaaaaaaaaaaabbbbbbbbbbaaaaabbaaaaaaaaaaaaabbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbabbbbabaaaaabaabbbbbbbaabbaaabababbbbaaaabaaaabbbbabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbbabbbaaabbbbabbbbbbbbbbbbbbaaabbaabbbaabbbbbaaaabbbabbbbbbaaabbaabbaab + bbbbaabbbbbbaaabbbbbbabbbaaabbbbbbaabbbbbbbaaaaaaabbbabbbaabbbbbaaaaabbbbbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbabbabbbaaabaaabbaabbbbbbbbbbbaabbbbabbbaaabbabaaaaaabbbbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbabbabbbbaaaaabbaaabbbbbbbbbbaaabbbbbabbbabababbaaaaabbbbbbbbaaabbbabbaab + ababaabaaaaaaaaaaaaababbbbaaaaabaaaabbbbbabaabaaabbaababbbbbaabbbaaaaabbbbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbaabbaabbbaaaabaaaaaabbaaabbbbbaaabbababbbbbaaabbaaaaabbbaaaaaaaaaaaabaaaa + bbbbaabbbabbbaabbbbbbaabbbaaaaaabaaaaaaaaabaaaaaaaaabbbbbbbaaaabbaaaaabbbbbbbbbaabbbbbbaab + bbbbaabbbabbbaabbbbbbaabbbaaaaaabbaaaaaaaabbbbbaaabbbbbbbbbaaaabbaaaabbbbbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaabbbbaaaaaaaaaaaaaaabaaaaaaabbbbbbbbbbaaabaaaaabbbbbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaabbbbaaaaaaaaaaaaaabbbbbaabbaaabbbbbaaaaaaaaaabbabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbabbbbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbaaaaaaaabbbabbbbbbbaabbbbbbaab + abbbabbbbbbbaabbbbbbbbabbbbbbbbbbbbaaaaaaababbaaabaaabbbbbbbaaaaaaaabbbabbbbbbbaabbbbbbaab + abbbaabaaabbaaabaaaaaaabbbbbbbbbbbbaaaaaaabbbbbabaabbbbbbbbaaaaaaaabbbbbbbbbbabaaaaaaaaaaa + abbbaaabbbbbaaabaaaabaabbbbbbbbbbbbaaaaaaabbaaaaaabbbbbbbbbaaabbaabbbbbbbabbaaaaaaaaaaaaab + bbbbabbbbbbbaabbaaabbaabbbbbbbbbbbbaaaaaaababbaaabbbbbbbbbbbaabbbbbbbbbbbbbbabbaaabbbbbaaa + abaaabbbbbbbaabbbaabbbabbbbbbbbbbbbaaaaaaababaaaabbabbbbbaaaaaabbbbbbbbbbbbbbbbabbbbbbbbbb + abbaabbbbbbbaabbaaabbbabbbbbbbbbbbbaaaaaaabaaaaabbbbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb + abbaabbbbbbbaabbbaabbbbbbbbbbbbbbbbaaaaaaabbbbaabbbaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaab + abbbaaabbbbbbbbbbaabbbbbbbbbbbbbbbbaaaaaaabbbbbabbbbabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaab + abbbbaaaaaaaabbbaaabbbbbbbbbbbbbbbbaaaaaaabbbbaaabbbaabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbabbbabbbbbaaabbbbbbbbbbbbbbbbaaaaaaabbbbaaabbbbaaaaaaaaaaaabbbbbbbabbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbaaabbaabbbbbbbbbbbbaaaaaaabbbbaaaabbbaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbabbb + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaaabaaabbbbbaabbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbaaabaaabbbbaaaabbbbbbbaaabaaaabbbbbbbbbbbbaabbbbbbbaaab + bbbbbbbbbbbbbbbbbbabbbbbbbbaaabbbbbaaaaaaabbbbaaaabbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaabbaaabbbbbaaaaaaabbbbbaaaabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaba + bbaaabbbbbbbbbbbbbbbbaaaabbbabbbbbbaaaaaaabbbbbaaaabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaa + bbbababbbbbbbaabbbbbbaababbbbbbbbbbaaaaaaabbbbbbaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaabaaaabbbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbababaabaabbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbaaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaaabaabaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbabbbbbbbbaaaabbbba + abbbbbbbbbaaaabbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaabaaaabbaabbbaaabbbbba + bbbbbbbbbbaaaaaaaabbbabbbabaaaaabaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaaaaaabbbbbbabbbaaaaaaaaaaaaaaabbabbaaaabbbbaaabbbba + abbbbbabbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaabbbbbbbbbbaaabbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbaabbbbbbbbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbaaaaaabbbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbbaabaaabaaaaabbbaaaaaaaaabbbbabaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaaabbbaaabaabbbbbbbbaaabaaabbaaabbbbbaaaaaaaaabbabbaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbaaaaaaaaaaabbbbbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaaaaabbbbbaaaaaaaaaaabbbbbaaabaaaabbbbbbaabbaaaaaaaabbbba + abbbaaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbabaaaaaaaaaaabbbabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaaabbbbbbbbaabbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbaabbbbbbbbbaabbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbaabbbbbbbbbaabbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaaabbbbaabaaaabbbbbbaabbbbbbbbbaabbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaaabbbaabaaaabbbbbbbaaaaaabbbbbaabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbbbbaaabaabbaaaabbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaababbbaabaabbaaaabbbbbbbaaaaaabbaaaabbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + abbbaabbbbbabbbbaabbaabaaaaabbbbaaaaabbbbabbbbbabbabbabbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbbabbabaabbbbaabbbbaaaabbbaaaaabbabbaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbbaaaaaaaabbbaabbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaabbbaaaaaaaabbaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaaabaaaaaaabbbbaabbaabbbaabbbabbbbaabbbaabbbbbbbbbaabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaaaabbaaaaaabbabaaaabbbaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbabbaaaaaabbababbaaaaaabbbabbbaaabbbbaaaabbbbaaabba + abbbbabbbabbaabaaabbbaaaabbbabbbaaaaabbbbbbaaaabbbabbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabbabbbabbbaaaabbbbabbaaaabbbabaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaabbbbbaabaaaaabbabaabbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabaaabbbaababaaaaaaaabbaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabaabaaaaabbbaabbbaaaabbbbbbbaabbbaaabaaabbabbbabbbbbbbaaaabbbbba + abbbbbbbbaaabbbbbbbbaabaaaaabbbaaabbbbabbbaaaaabbbbbbbbabbbaaaaaaaababbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbaaaaabbbbaabbbbbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbabbbbaaaaaaaabbbbbbbbbbbabbbbaaabbbbaabbbbbbbaaabbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaabbbaaaabbbbbbbbaaaabbaaaaabbbbaaaabbbbbbaabbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaaaaabbbaaaabbbbbbbaaaaabbaabaaaabbaaaaabbbbbbbbbbaaabbaaabbbbbbbbabbbbbba + bbaaaabbbbabbbaaaaaabbbbaaaabbbbbaaaaaaabbaabaaaabbaaaaaaabbbbbbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabaabaaaaaaabbbbbabbabbaaaaaaaaaabbaabbaabbbaaaaaaaaabbbbbaaaaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabbabbaaaaaaaaaabbaababbbbbaaaaaaaaaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbbbbaaaabaaaaabbaabbbbbbaaaaaaaaaaaaabbbabbabbbbbaaaaaababaaaaaa + bbabbbbbbaaabbbbbaabbbbaabbbbbaaaabbaaaaabbabbbbbbaaaaaaabbaaaaabbbbbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbbbaaaaabbbaaaabbbbaabbaaaaaaaabbbaaaabbbbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabbbaaaaabbaabbbaaaaaaabbbbbaaabbbbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabbbbaaaabbbbbaaaaaaaaabbbbbbaabbbbbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbbbbaaaaabbbbaaaabbaaabbaaaaaaabbbbbbaabbbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbbaaaaabbbbaaaaabbbbbbaaaaaaaabbbbbaaabbbbbbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaabbbaaaaabbbbaaaaabbbaabbaaaaaaaabbbbaaabbbbbbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaabbbbaaaabbbbbaaaaabbabbbaaaaaaaaabbbbaaabbbbaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaaabbbaaaababbbbaaaabbbbaaaaaaaaaaabbbbaaabbbbbaaaabbbaabbaaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaabbbaaaaababbbbaaaabbaabbaaaaaaaaabbbbaaabbbbbaaaabbbaaaaaabbaabbaa + aaaaaaabbbbbbaabbbbbbbabbbbaaaaabbbbbbaaaabbbbbaaaabbaaaabbbbaaabbbbbaaabbbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbaaaaabaaaabaaabbbaaaabbbaaaabbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaabbbbaaaaabbbbaaaaaabbbbbbaaabbbbaaabbbbaaabbbbaaaaaaaaaaaaaaaabaaba + bbbbaabbbbbbbaabbbbbbaabbbbaaaaaabaaaaaaaabbbaaaaaaabbbaaaabbaaaabbbbbaabbbbbbaaabbabbaaba + abbbaabbbbbbbaabbbbbbbbbbbbaaaaaaaaaaaaaaababbbbaaabbbbaaaaaaaaaabbbbaaabbbbbbaaabbbbbbabb + abbbaabbbbbbbaabbbbbbbbbbbbaaaaaaaaaaabbbbbbbaaaaababbbaaaaabbaaabbbbaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbbaabbbbbbbbbbaaaaaaaaaaaabbbbbbaabbaaababbbbaaaabaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaaaaaaaabbbbbbabbbbaaabbbbbaaaaaaaaaaabbbaaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbbbbbaaabbbbabbaabbbbbbbaaabaaababbbaaaaaaaaaabbbbbbabbbbbbaabbbaabbaab + bbbbaabbbbbbaaabbbbbbbbbaaaabbbabbaabbbbbbbabbbaaaabbaaabaaaaaaaaaabbbbabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbbbbaabbaaabbaaabbbbbbbbbaaaaaaaaaaabaaaaaaaaaaabbbabbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbabbbbbaaaaaabbaaaabbbbbbbaabbaababbbbbbbaababbaaaaabbabbbbbbaaabbbabbaab + ababaabaaaaaaaaaaaaabbbbaaaaaabbaaaabbbbaabbbbaaaabbbbbbbbbababbaaaaabbabbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbabbbbbbaaaaabaaaaaabbaaabaaabaaaabbbbbbbbbbaabbaaaaabbaaaaaaaaaaaaabaaaa + bbbbaabbbabbbaabbbbbbbbbbaaaaaaabaaaaaaaaabbbbbaaabbabbbbbbbaaabbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbabbbaabbbbbbabbbaaaaaaabbbbbaaaaababaaaaaabbbbbbbbaaaabbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaabbaaaaaaaaaaaaaaaaabbbbbaaabbbbbbbbbbaaabbaaabbbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbbabbbbbaaaaaaaaaaaaaabbbbaaaabbbbbbbbbbaaaaaaaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbabbbbbbbabbbaaaaaaaabbbaaabbbaabbbbbbaaaaaaaaabbbabbbbbbbaabbbbbbaab + abbbabbbbbbbaabbbbbbbbabbbbbbbbbbbaaabaaaabbbbaabbbaabbbbbbaaaaaaaabbbbbbbbbbbbaabbbbbbaab + abbbaabaaabbaaabaaaaaaabbbbbbbbbbbaaaaaaaabbaaaabaabbbbbbbbaaaaaaaabbbbabbaaaabaaaaaaaaaaa + abbbaaabbbbbaaabaaaabaabbbbbbbbbbbaaaaaaaabbbbaababbbbbbbbbaaaaaaabbbbbabbaaaaaaaaaaaabbbb + bbbbabbbbbbbaabbaaaabaabbbbbbbbbbbaaaaaaaabbbbaaabbbbbbbbbaaaaaaaabbbbbabbbabbbaabbbbbbbbb + abaaabbbbbbbaabbbbabbbabbbbbbbbbbbaaaaaaaabaaaaaabbabbbbbbaaabbbbbbbbbbbbbbbbbbabbbbbbbbba + abbaabbbbbbbaabbbaabbbbbbbbbbbbbbbaaaaaaaabbaaaabbaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbaabbbbbbbaabbaaabbbbbbbbbbbbbbbaaaaaaaabbabaabbaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbaaabbbbbbbbbaaabbbbbbbbbbbbbbbaaaabaaabbbbbabbbaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbaaaaaaaabbbaaabbbbbbbbbbbbbbbaaaabaaabbbbbabbaabbbbbaaaaaabbbbbbbbabbbbbbbbbbbbbbaabb + abbbbbabbbabbbbbaaabbbbbbbbbbbbbbbaaaabaaabbbbaabbbaabbbbaaaaaaabbbbbbbbabbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbaaabbaabbbbbbbbbbbaaaaaaaababbaaabbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaaaaababbbaabbbaaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbaaabbaaababbbaabbbbaaaaaaaaaaabbbbbbbbbbbbbaabbbbbbbaaab + bbbbbbbbbbbbbbbbbbabbbbbbbbaabbbbbaaaaaaaababbbaaabbbaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaabaabbbbbbaaaaaaaababbbaaabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaba + bbaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaababbbaaabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaa + bbbababbbbbbbaabbbbbbabbabbbbbbbbbaaaaaaaababbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaaaababbbbaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaababbbbaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbababaabaabbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbaaaabbbba + abbbbbbbbbbbabbbaaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbabbbbbbbbaaabbbbba + abbbbbbbbbaaaabbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbbbbbbaaaaaaaabbbabbbabaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaabbbbaaabbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaabaaabbbbbbabbbaaaaaaaaaaaaaaabbabbaaabbbbbaabbbbba + abbbbbabbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbbaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbabaabbbbbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbabbbbaabaaabaaaaabbbaaaaaaaabbbbbbaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaaabbbaabbaabbbbbbbbaaabaabbaaaabbbaaaaaaaaabbbaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbbaaaaaaaaabbbabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaabbbbbaaaaaabbaaabaabbbbaaaaaaaaaaabbbaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbaaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbbaaaaaaaaaaaabbbabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbaaabbbabbaaabbbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbaaabbbbbbbbaabbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbaabbbbbbbbbaabbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaaabbbbaabaaaabbbbbaabbbbbbbbbaabbbbaaaabbabbbaaabbbbaabbbbbbbaabbba + abbaaaabbbbbbbbbaaaaabaaabbbaaaaaaabbbbbbaaababbbbbbaabbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbbbaaaaaabbbbbaabbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaaaabbbbbbaaaaaaabaaaabbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + abbbaabbbbbabbbbaabbaabaaaaabbbbaaaaabbbbaaaabaabaaaabbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbaababbabbbbbabbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbbaababaaabbbbabbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaabbaaaaaaaabbbaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaaabaaaaaaabbbbaabbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaaaabbaaaabbbaabaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbbbbaaaaabbabbabbaaaaaabbbabbbaaabbbbaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbaaaaabbbbbbaaabbbbabbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabbabbbabbbaaaabbbbbbaaaabbbaababbbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaabbbbbabaaaaabbabbabbbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabaaabbbaabbaaaaaaaabbbaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabaabaaaaabbbaabbaaaaabbbbbbbaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbbaabaaaaabbbaaabbbbabbbaaaabbbbbbbbaabbbaaaaaaabaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbbbbbbbbaaaabbbbbabbbabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbabbbbbabbbbbbbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbaaaabbaaaabbbbbaabbbbbbbaabbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbbbbbaaaaabbaabaaaabbaaaabbbbbbabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaabbbbabbbaaaaaabbbbaaaabbbbbaaaaaaabbaabaaaabbaaaaaabbbbbbbbbaaabbaaaabbbbbbaabbbbbba + bbaaaaaabaabaaaaaaabbbbbabbbbbaaaaaaaaaabbaabaaabbaaaaaaaabbbbbbbaaaaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaabbbaabbbbaabbbbaaaaaaaaaaabbaabaabbbaaaaaaaaaabbbbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbbbaaaaaaaaaaabbaababbbbaaaaaaaaaaaabbbaabaabbbbbaaaaaababaaaaaa + bbabbbbbbaaabbbbbaabbbbaabbbbaaaaaabaaaabbaabbbbbbaaaaaaaaaaaaabbaabbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbaabbbbaaaaabbaaaaabbbbbbbbaaaabbbaaaaaaabbbbbbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaabbbaaaaaaabbaabbaaaabbaaaaaaaabbbbbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaaabbaaaaabbbaaabbaaaabbaaaaaaaaabbbbbaabbbaabbbbbaaabbbbba + ababbbbbaaaabbbbbaaabbbabbbbaaaaabbbbaaaabbbabbbaaaaabaaaabbbaaabbbbbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbbaaaabbbbbaaaaabbbaabbaaaaaaaaabbbaaabbbabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaaaaabbaaaaabbbbbaaaabbbabbbaaaaaaaaaabbbbaabbbaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaabbbaaaabbbbbbaaaaabbbbaaaaaabaaaaabbbbbabbbbaaabaabaaabbbaaaabbbba + bbbbabaabbbaaaaaabbbaaaabbbaaaabbbbbbaaaaabbaabbaaaabaaaaabbbbbabbbbaaaaabbbaabbbaaaaabbaa + bbbbaaabbbbbaaaabbbbbaabbbbaaaaabbbabaaaaaabbbbaaaaabbaaaabbbbbabbbbbaaaabbbaaaaaabbaabbaa + ababaaabbbbbbaabbbbbbaabbbbaaaabbbbbbaaaaabbaabbaaabbbaaaabbbbaabbbbbaaabbbbbaaaabbbbaaaba + abbaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbaaaaababbbaaaabbbaaaabbbbaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbaaaaaabbbaaaaaabbbaaaabbbbaabbbbbaaaaaaaaaaaaaaaabaaba + bbbbaabbbbbbbaabbbbbbabbbbbaaaaaabaaaaaaaabaabbaaabbbbaaaabbbbaabbbbbbaabbbbbbaaabbabbaaba + abbbaabbbbbbbaabbbbbbabbbbaaaaaaaaaaaaaaaabbbaaaaabbbbaaaabbbbaabbbbbbaabbbbbbaaabbbbbbabb + abbbaabbbbbbbaabbbbbbabbbbaaaaaaaaaaabbbbabaabbaaabbbbaaaabbbbaabbbbbaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbbaabbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbaaabbbbbaaabbbbaabbbbaaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbaaabbbbbbbbbaaaaaaaaaaaabbbbbaabaaaaaabbbbaaaabbbbaabbbbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbabbbbaaaaaaaaaaaabbbbbbaaabbbaaabbbbaaaaaaaaaaabbaabaabbbbbbaabbbaabbaab + bbbbaabbbbbbaaabbbbbbbbaaaaabbbbbaabbbbbbaabbaaaaabbbbaaaaaaabaaabbabbaabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbabbbbaaabbbaabbaabbbbbbabaabbaaaabbbaaaaaaabaaabbbbbbabbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbabbbbaaaaaaaabaaabbbbbbabbbbaaabbbbbbbaaaaaaaaaabbbbaabbbbbbaaabbbabbaab + ababaabaaaaaaaaaaaabbbbbaaaaaabbaaabbbbbbabbabbaabbbbbbbbaaaaaaaaaabbbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbbbbbbbaaaaaabaaaabbbaaaabbbbaaabbbaabbbbaaaaaaaaaabbbaabaabaaaaaaaabaaaa + bbbbaabbbabbbaabbbbbbbbbaaaaabaaaaaaaaaaaabbbbaaaabbbbbbbbbaaaaaaaaabbbabbbbbbbaabbbbbbaab + bbbbaabbbabbbaabbbbbbbbbaaaaaaabbbbaaaaaaabaaaaaaaaabbbbbbbaaaaaaaaabbaabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbbbbaaaaaaabbaaaaaaaaabbbbaaaabbbbbbbbbaaaabaaabbbaabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbbbbbaaaaaaaaaaaaaaaaabaaaaaababbbbbbbbaaaaaaaabbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbbbbaaabaaaaaaaaaabbbbaabbaabbbbbbbaaaaaaabbbbaabbbbbbbaabbbbbbaab + abbbabbbbbbbaabbbbbbbaabbbbbbbbbbaaabaaaaabbbaaabbaaabbbbabaaaaaaabbbbbabbbbbbbaabbbbbbaab + abbbaabaaabbaaabaaaaaaabbbbbbbbbaaaabbbaaabaaaaabaabbbbbbaaaaaaaaabbbbbbbbaaaabaaaaaaaaaaa + abbbaaabbbbbaaabbaaabaabbbbbbbbbaaaabbbaaabbbbaabaaaabbbbbaaaaaaaabbbbaabbaaaaaaaaaaaabbbb + bbbbabbbbbbbaabbaaabbbabbbbbbbbbaaaaabbaaabbaaaaababbbbbbaaaaaaaabbbbbabbbbabbbaabbbbbbbbb + abaaabbbbbbbaabbbaabbbabbbbbbbbbaaaabbaaaabaaaaabbbbbbbbbaaaaaaabbbbbbabbbbbbbbabbbbbbbbba + abbaabbbbbbbaabbbaabbbbbbbbbbbbbaaaabbaaaabaaaaabbbbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbabbbbbbbaabbbaabbbbbbbbbbbbbaaaabbaaaabaabaabbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + bbbbaaabbbbbbbbbaaabbbbbbbbbbbbbaaaabbbaaababbaabaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbaaaaaaaabbbaaabbbbbbbbbbbbbaaaabbbaaababbaabbaabbbbaaaaabbbbbbbbbbabbbbbbbbbbbbbbaabb + bbbbbbabbbabbbbbaaabbaabbbbbbbbbaaaabbbaaababbaabbaabbbbaaaaaabbbbbbbbbbabbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaaaabaaababbaabbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaaaaaaababbaabbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbaabbbbbbaabbbbaaaabbaaaababbaaabbbaaaaaaaaaaabbbbbbbbbbbbbbaabbbbbbbaaab + bbbbbbbbbbbbbbbbbbabbbbbbbabbbbbaaaabbaaaababbaaabbbaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaabaabbbbbaaaaaaaaaababbaaabbbbabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaba + bbaaabbbbbbbbbbbbbbbaaabbbbbbbbbaaaabaaaaababbaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbababbbbbbbaaabbbbbaabbbbbbbbbaaaabaaaaababbbaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaababbbaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbb + bbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaababbbbaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbabba`, + map `abbbbbbbbbbbabbbbaaabaaaabbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbabbbbbbbbbbbaaaabbbba + abbbbbbbbbbbabbbbaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbabbbbbbbbaaabbbbba + abbbbbbbbbaaaabbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbbbbbbaaaaaaaabbbabbbabaaaabbaaaaaaabbaabbbbbaaabaaaabaaaaaaaaaaaaaaaaaaaabbbbaaabbbba + bbbbbbbbbbabaaaaabbbbabbbbbbbbbaaaaabaaabaaabbbbbbaabbaaaaaaaaaaaaaaabbabbaaabbbbbaabbbbba + abbbbbabbbaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbaaabbbbaaaabbbbbbbbbaabbaaabbbaaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbabbbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbbaaaaabbbbbabbbbabbbbbbaaaaabbbbbbbbabbbbbbbbbbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbabbbaaabaaabaaaabbbbbaaaaabbbbbbbbaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaaabbbaabbaabbbbbbbbaaabaabbaaaabbaaaaaaaaabbbaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbaabbaabbbbbaaaaaaaaabbaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaababbbbbaaaaaaaaaabbbbaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbaaaaaaaaaaaabbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbaaaaaaaaaaaabbbbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbaabbbbbbbbaabbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbaabbbbbbbbbaabbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbaaaabbbbbbbbbaaaaaaaaabbbbaabaaaabbbbaabbbbbbbbbaabbbbbaaaabbabbbaaabbbbaabbbbbbbaabbba + abbaaaabbbbbbbbbaaaaabaaabbbaaaaaaaabbbbaaabbbbbbbbaabbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbbaaaaaabbbbbaabbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaaaabbbbbaaabbaabaaaaabbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + abbbaabbbbbabbbbaabbaabaaaaabbbbaaaabbbbaaaaaaabaaaabbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbababaabbaababbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbaababaabbbbbabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbbaaabbbbaaaaabbbbaabbbabbbbaaabaabbabaaaaabbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaaabaaaaaaaabbaabbbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaaaaaaaabbbbbaaaaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbbbbaaaaabbaabbabbaaaaaabbbabbbaaabbbbaaaabbbbaaabbb + abbbbaabbabbaabaaabbbaaaabbbabbbaaaaabbbbbaaaaabbabbbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabaabbbabbbaaaabbbbbbaaabbbbabbabbbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaabbbbbbbaaabbbbabaaabbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabaaabbbaabaaaaaabbabaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaaaaabbbaabbaaaaaaabbbbaaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaabbbbabbbaaaabbbbbbbbaabbbaaaaaaabaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbbbbbbbbbbaaaaabbbbabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbabbbbaabbbbbbbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbbbabbaaaaabbbbaabbbbbbbbaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbbbbbaaaabbbaababbbbaaaabbbbbbbabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaabbbbabbbaaaaaabbbbaaaabbbbbaaaaaabbbaabaaabbaaaaaabbbbbbbbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaaaaabaaaaaaabbbbbabaabbbaaaaaaaabbbaabaaabbaaaaaaabbbbbbbbaaaaabbaaaaaaabbbabbbbbba + bbaabbbaaaaaaaaabaabbbbaabbbbaaaaaaaaaabbbaabaabbbaaaaaaaaabbbbbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbbbaaaaaaaaaabbbaababbbbaaaaaaaaaaabbbbaabbabbbbbaaaaaababbaaaaa + baabbbbbaaaabbbbbaabbbbaabbbaaaaaaaaaaabbbaabbbbbaaaaaaaaaaaaabbbaabbabbbbbabbbaaaaaaaabba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaaabbaaaaababbbbbbaaababbaaaaaabbbaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaabbbaaaaabaaaabbbaaaabbbbaaaaaabbabbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaabbaaaaaabbbabbbaaaaabbbbbaaaaabbbbbbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbbbaaaaabbbaaaaaabbbbaaaaaabbbbbbaaaaabbbabbbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbaaaaabbbbaaaaabbbaabbaaaaabbbbbaaaaabbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaababbbaaaabbbbbbaaaaabbbbbaaaaaabbbbaaaaaabbbaabbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaabbbbaaaabbbbbbaaaabbbaabbaaabbbbaaaaaaaabbbbaaaabaabaaabbbaaaabbbba + bbbbabaabbbaaaaaabbbaaabbbbaaaabbbbbbaaaaabbabbaaaabbbbaaaaaaaabbbbbaaaaabbbaabbbaaaaabbaa + bbbbaaabbbbbaaaabbbbbaabbbbaaaabbbbbbaaaabbbbaaaaaabbbbaaaaabaabbbbbbaaaabbbaaaaaabbaabbaa + ababaaabbbbbbaabbbbbbbabbbaaaaabbbabbaaaabbaabbaaabbbbaaaaabbbabbbbbbaaabbbbbaaaabbbbaaaba + abbaaaaaaaaaaaaaaaaaaaabbbaaaaabbbabbaaaabbbbbaaaabbbbbaaaabbbabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbbaabbbaaaaabbbbbbaaaabbaabbaaaaabbbaaaabbbabbbbbaaaaaaaaaaaaaaaaabaabb + bbbbaaabbbbbbaabbbbbbaabbbaaaaabbbaaaaaaaabbbbaaaabbbbbaaabbbbbbbbbbbbaabbbbbbaaabbabbaaba + abbbaaabbbbbbaabbbbbbabbbbaaaaaaaaaaaaaaaabbaabaabbbbbbaaabbbbabbbbbbbaabbbbbbaaabbbbbbabb + abbbaabbbbbbbaabbbbbbabbbbaaaaaaaaaaaaaaaabbbbbaaabbbbaaaabbbbabbbbbbaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbaaabbbbbbabbbbaaaaaaaaaaabbbaabbaaaaaabbbaaaaabbbbabbbbbaaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbaaabbbbbbbbbbaaaaaaaaabbbbbbaababbaaaabbbbaaaabbbbaabbbbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbbbbbaaaaaaaaaabbbbbaaabbbbaaabbbbbaaaabbbbaabbaaabaabbbbbbaabbbabbbaab + bbbbaabbbbbbaaabbbbbbbbaaaaaaaaaabbbbbbaaabaabaaabbbbbaaaabbbbaabbbabbaabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbbbaaaabaaabbbbbbbbaaabbbbaaabbbbbaaaabbbbabbbbabbbabbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbabbbbaaabbbabbabbbbbbaaabbaaaaabbbbaaaaabbbbaabbbbbbaabbbbbbaaabbabbbaab + ababaabaaaaaaaabaaabbbbaaabaaabaabbbbbbaaababbaaabbbbbaaaaabbaaaabbbbbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbabbbbbaaaaaabaaabbbbbaaabbaaaaabbbbaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaabaaaa + bbbbaabbbabbaaabbbbbbbbbaaaaaabaaabbbbaaaabaabaaabbbbbbaaaaabbaaaabbbbaabbbbbbbaabbbbbbaab + bbbbaabbbabbaaabbbbbbbbbaaaaabaaaabbaaaaaabbbaaaaaaabbbaaaaaabaaaaabbaaabbbbbbbaabbbbbbaab + bbbbaabbbbbbaabbbbbbbbbbaaaaaaaaaabaaaaaaabbbaaaaabbbbbbaaaaaaaaaaabbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbbbbaaaaaaabaaaaaaaaaabbbbaaabbbbbbbbbbaaaaaaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbbbbaaaaaabaaaaaaaaaabbbbaabbbbbbbbbaaaaaaaaabbbaaabbbbbbbaabbbbbbaab + abbbabbbbbbbaabbbbbbbbbbbbbaaaabaaaaaaaaaabbaaaabaabbbbbbaaaaaaaabbbbbaabbbbbbbaabbbbbbaab + abbbaabaaabbaaabaaaaaabbbbbbbbbaaaaabbaaaabbbbaaaabbbbbaaaaaaaaaabbbbbaabbaaaaaaaaaaabaaaa + abbbaaabbbbbaabbaaaabbbbbbbbbbbaaaaabaaaaabbaaabbbbbbbbbaaaaaaaaabbbbbaabbaaabaaaaaaaabbab + bbbbabbbbbbbaabbaaabbbabbbbbbbbaaaaaaaaaaabbbaabaababbbbaaaaaaaabbbbbbaabbbabbbaabbbbbbbba + abaaabbbbbbbaabbbaabbbabbbbbbbbaaaabbbaaaabbbaaabaaaabbbaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbba + abbaabbbbbbbaabbbaabbbbbbbbbbbbaaaabbbaaaabaaaaabbaaabbbaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbb + abbbabbbbbbbaabbbaabbbbbbbbbbbbaaaabbbaaaabaaaaabaaaabaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbaaa + bbbbaaaaabbbbbbbaaabbbbbbbbbbbbaaaabbbaaaabbbbaabaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaa + abbbbaabbaaaabbbaaabbbbbbbbbbbbaaaabbbbaaabbbbaabaabbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbaaab + bbbbbbbbbbabbbbbaaabbaabbbbbbbbaaaabbbaaaabbbbaabaabbbaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbaaab + abbbbbbabbbbbbbbaaabbbbbbbbbbbbaaaaabbaaaababbaabaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbbbbbbbbbbbbbbbaabbbbbbbbbbbbaaaaaaaaaaababbaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaba + abbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaabaaaaaababbaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbabbbbbbabbbbbaaaabbaaaaababbaaabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbaaaaababbaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabba + bbaaabbbbbbbbbbbbbbbaaabbbbbbbbaaaaaabbaaababbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaba + bbbaaabbbbbbbaaabbbbbabbbbbbbbbaaaaaaabaaababbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabba + bbbbbabbbbbbbbbbbbbbbabbbbbbbbbaaaababbaaababbbaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbb + bbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaababbbbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbb`, + map `abbbbbbbbbbbabbbbaaabbababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbaaabbbbbbbbbaaaabbbba + abbbbbbbbbbbabbbbaaabaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbbabbbaabbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaabbaaaabbaabbbaaabbbbba + bbbbbbbabbaaaaaaaabbbabbbabaaaabbaaaaaaabbaabbbbbaaabaaaabaaaaaaaaaaaaaaaaaaaabbbbaaabbbba + bbbbbbbabbabaaaaabbbbabbbbbbbbbbbaaabbaaaaaabbbbbbaabbaaaaaaaaaaaaaaabbabbaaabbbbbaabbbbba + abbbbababbaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaaabaabbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbaaabbbaaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbbaaaaaabbbbbaabbbabbbbbbaaaaabbbbbbbbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbaaabaaabaaaabbbabbabbbbbbbbbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbbaaabbbaabbaabbbbbbbbaaabaabbaaaabbbaaaaaabbbaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaabbbbaaaaaabbaabbbabbbaaaaaaaaabbbaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaaaaaaaabbbbbaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbaaaaaaaaaaabbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaaabbbbaaaaaaaaaaaabbbbbaaaaabbaaaaabbbbbaaaaabbbaabbbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbaaaaaaaaaaaabbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbaabbbbbbbbaabbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbaaabbbbbbbbbbaaaaaaaaabbbbaabaaaabbbaabbbbbbbbbaabbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaaabbbaaaaaaaabbbaabbbbbbbbbaabbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaabbbaabbaabbaaaabbbbaaabbbbbbbbaabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaaaabbbbaaaaaabbbbbaabbbbbbaaaaabaabbbaabbaaaabbbbabbbbaaba + abbbaabbbbbbbbbbaabbaabaaaaabbbbaaaabbbbaaabaabaaaaabbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbaaaaaabaababbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbababaabbabbabbbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaababbabaaaaabbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaababaaaaabbbaaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabaaaaaaaaaaabbaabaaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbaaaaaabbbbaabbabbaaaaaabbbabbbaaabbbbaaaabbbbaaabbb + abbbbaabbabbaabaaabbbaaaabbbabbbaaaabbbbbaaaaabbaabbabbbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabaabbbabbbaaaabbbbbaaaaabbabbbabbbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaabbbbbbaaaabbbaabaaabbbbaaaabbaabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabaaabbbbabaaaabbbabbaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaaaaabbbaabaaaaaabababbaaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaaabbbabbaaaaaaaabbbbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbaaabbbbbbaaaabbbbbbbbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabbbbbbbbbbbbbbbbbabbbbaabbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbbbbbbaaaabbbbbabbbbbbbbbaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbbbbbbbaabbaaabbbbbbaaabbbbbbbaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaaabbbaabbbabbaaaabbbbbbbabbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaabbbbbaaaaaabbaaabaaabbaaaaaabbbbbbbbbaaaaabbaaaaaaabbbabbbbbba + bbaabbaaaaaaaaaabaabbbbaabbbbbbaaaaaaaabbaaabaabbbaaaaaaaabbbbbbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbbaaaaaaaaaaabbaaababbbbaaaaaaaaabbbbbbaabbabbbbbaaaaaababbaaaaa + baabbbbbaaaabbbbbaabbbbabbbbaaaaaaaaaaabbbaabbbbbaaaaaaaaaaaabbbbaabbabbbbbabbbaaaaaaaabba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaaaaaaaabbbaabbbbbaaababaaaaaaabbbaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaabbaaaaaaaabbbbbaaaaabbbaaaaaabbbabbbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbaaaaabbbaaaaaabbbaaabaaaaabbbbaaaaaabbbbbbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbbaaaabbbbaaaaabbbbaabbaaaabbbbbaaaaaabbbaabbabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbaaaaabbbbaaaaaabbbbbaaaaaabbbbbaaaaabbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaabbbbbaaaabbbbbaaaaabbbaabbaaaabbbbbbaaaaabbbaabbabbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaabbbbaaaabbbbbaaaaaabbbbbaaaaabbbbbbbaaaabbbbaaaabaabaaabbbaaaabbbba + bbbbabaabbbaaaaaabbbaaabbbbaaaabbbbbaaaaabbbaaaaaaabbbbbabbaaaabbbbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbaabbbaaaaabbbbbbaaaabbaabbaaaabbbbaaaaaaaabbbbbbaaaabbbaaaaaabbaabbaa + ababaaabbbbbbaabbbbbbbabbbaaaaabbbbbbaaaabbbbbaaaaabbbbaaaaaaaabbbbbbaaabbbbbaaaabbbbaaaba + abbaaaaaaaaaaaaaaaaaaaabbbaaaaabbbbbbaaaabbaabbaaaabbbaaaaaaaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbbaabbbaaaaabbbbbaaaaabbbbbaaaabbbbaaabbaaaabbbbaaaaaaaaaaaaaaaaaabaabb + bbbbaaabbbbbbaabbbbbbaabbbaaaabbbbbbbbaaabbbaabaaabbbaaaabbbaaabbbbbbbaabbbbbbaaabbabbaaba + abbbaaabbbbbbaabbbbbbaabbbaaaaabbbbbbbaaaabbbbaaabbbbaaaabbbbaabbbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbaaaaaabaabaaaaabbbaaaaabbbbaaaabbbbaabbbbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbabbbbaaaaaaaaaaaaaaaabbbbbaabbbbaaaabbbbbabbbbbaaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbabbbbaaaaaaaaaaaaaaabbbbaaaabbbbaaaabbbbbabbbbbaaaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbbabbbbaaaaaaaaaabaaaaababbaaabbbaaaaabbbbbabbbaaabaabbbbbbaabbbabbaaab + bbbbaabbbbbbaaabbbbbbbbbbaaaaaaaabbbbaaaaabbbbaaabbbbaaabbbbbaabbbaabbaabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbbbbaaaaaaaabbbbbaaaaabaaaaaabbbbaaabbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbabbbbbaaaaaaabbbbbbaaaaabbbbaaabbbaaaabbbbaaabbbbabbaabbbbbbaaabbabbbaab + ababaabaaaaaaaabaaabbbbbaabaabbbbbbbbaaaaabbbaaabbbbaaaabbbbaaabbbbbbbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbabbbbaabbbbbbbbbbbbaaaaababbaabbbbaaaabbbbaaaabbbabbaaaaaabaaaaaaaabaaaa + bbbbaabbbaabaabbbbbbbbbbabbbabbbbbbbbaaaaabbbaaabbbbbaaabbbbaaaaabbbabbabbbbbbbaabbbbbbaab + bbbbaabbbaabaabbbbbbbbbbaaaaaaabbbbbbaaaaababbaabbbbbaaaaabaaaaaabbbaababbbbbbbaabbbbbbaab + bbbbaabbbbabaabbbbbbbbbbaaaaaaabbbbbbaaaaabbbaaaaabbbbaaaaabaaaaaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbaabbbbbbbbbbaaaaaaabbbbbaaaaaabbbaaaaabbbbaaaabbaaaaaabbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaaaaaaaabbbaaaaaaabbbaaaaabbbbaaaaabaabaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbaaaaaaabbaaaaaaaabbbaaaaabbbbbaaaaaaaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaabaaabbaabbaaaabbbbbbaaaaaaaaaaaaaaaabaaaaaabbbbbbbaaaaaaaabbbbbbaabbaababaaaababbaaa + abbbaaabbbbbaabbaaaabbbbbbbbbbbaaaaaaaaaaabbbbaaabbbbbbaaaaaaaaabbbbbbaabbabbaaaaaaaaabbab + bbbbabbbbbbbaabbaaabbbbbbbbbbbbaaaaaaaaaaabbaaaaabbbbbaaaaaaaaabbbbbbbaabbbbbbbaabbbbbbbbb + abaaabbbbbbbaabbbaabbbbbbbbbbbbaaaabbbaaaabbbaaaaabbbbaaaaaaaaabbbbbbbaabbbbbbbaabbbbbbbaa + abbaabbbbbbbaabbbaabbbbbbbbbbbbaaabbbbaaaabbaaabaabaaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbaabbbaabbbbbbbbbbbaaaabbbbaaaabaaaabaaaaaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbaaaaabbbbbbbaaabbbbbbbbbbbaaaabbbbaaaabaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbbbaabbaaaabbbaaabbbbbbbbbbbaaaabbbbaaaabbbbaababbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbabbbbbaaabbbabbbbbbbaaaabbbaaaaabbbbaababbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbaaaab + abbbbbbabbbbbbbbaaabbbbbbbbbbbaaaabbbaaaaabbbbaabaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbaaaaaabbbbaabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbaaaaaabbbbaabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbbabbbbbbbbbbaaaaabbaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaaabbaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbaaabbbbbbbbbbbbbbbaaabbbbbbaaaaabbaaaaaabbbbaaaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbaaabbbbbbbaaabbbbbabbbbbbbaaaaabbaaaaaabbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbabbbbbbbaaaaabbbbaaaabbbbbaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbabbbbbbbaaaaabbbbaaaabbbbbbaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbbaabbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaabbbbbbbbbaaaabbbba + abbbbbbbbbaabbbbbaaabaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaabaaaabbaabbbbaabbbbba + bbbbbbbabbbbbaaaaabbbabbbabaaaaabaaaaaaabbaabbbbbaaabaaaabaaaaaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbabbbbbaaaabbbbabbbbbbbbbaaaaabaaaaaaabbbbbbaabbaaaaaaaaaaaaaaabbabbaaabbbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbaabbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbaaabbbaaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbabaaaaabbbbbabbbbabbbbbbaaaaabbbbbbbbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbabbbaaabaaabaaaabbbabbabbbbbbbbbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbaaaaaabbbaaabaabbbbbbbbaaabaabbaaaabbbaaaaaaabbaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbaaaaaaaaaabbaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaaaaaaaabbbbbaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbaaaaaaaaaaabbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbaaaaaaaaaaaabbbbbaaaaabbaaaaabbbbbaaaaabbbaabbbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbaaaaaaabbaaabbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabaaaaabbbbabbaaaabbbbaabbbbbbbbaabbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaabbbbbbbbbbaaaaaaaaabbbbaabaaaabbbaabbbbbbbbbaabbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaaabbbaaaaaaaabbbaabbbbbbbbbaabbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaaabbbbaaabbbbbbbbaabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaaaabbbbaaaaaabbbbbaabbbbbbaaaaabaabbbaabbaaaabbbabbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbaaaabbbbaaabaabaaaaabbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbaabbaababbaabbbbaaaaabbbaaaaaabaababbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaaaabbababaabbabbabbbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaababbabaaaaabbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaababaaaaabbbaaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabaaaaaaaaaaabbaabaaaaaabaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabbaaaaaabbbbaabbabbaaaaaabbbabbbaaabbaaaaaabbbbaaaabb + abbbbaabbabbaabaaabbbabaabbbabbbaaaabbbbbaaaaabbaabbbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabbaabbabbbaaaabbbbbaaaaabbabbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaabbbbbbaaaabbbabbaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaaaaaabbbbabaaaabbbabaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaaaaabbbaabaaaaabaababbbaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaaabbbabbaaaaaaaabbbbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbabaabbbbbaaaabbbbbbbbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbaabbaaabbbbaaaaaaaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbbbbbbbaaaabbbbbabbbbbbbbbaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbbbbbbbaabbaaabbbbbbaaabbbbbbbaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbaaaaabbbaabbbabbaaaabbbbbbbabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaabbbbbaaaaaabbaaabaaabbaaaaaabbbbbbbbbaaaaabbaaaaaaabbbabbbbbba + bbaabbaaaaaaaaabbaabbbbaabbbbbbaaaaaaaabbaaabaabbbaaaaaaaabbbbbbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbbaaaaaaaaaaabbaaababbbbaaaaaaaaabbbbbbaabbabbbbaaaaaaababbaaaaa + baabbbbbaaaabbbbbaabbbbabbbbaaaaaaaaaaabbbaabbbbbaaaaaaaaaaaabbbbaabbabbbbbabbbaaaaaaaabba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaaaaaaaabbbaabbbbbaaababaaaaaaabbbaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaabbaaaaaaaabbbbbaaaaaabbaaaaaabbbaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbaaaaabbbbaaaaabbbaaabaaaaaabbbaaaaaabbbabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbbaaaabbbbbaaaabbbbaabbaaaaabbbbaaaaaabbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbaaaaabbbbaaaaaabbbbbaaaaaabbbbbaaaaabbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaabbbbbaaaabbbbbaaaaabbbaabbaaaabbbbbbaaaaabbbaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbaaabbbbaaaabbbbbaaaaaabbbbbaaaaabbbbbbbaaaabbbbaaaabaabaaabbbaaaabbbba + bbbbabaabbbaaaaaabbbaaabbbbaaaabbbbbaaaaabbbaaaaaaabbbbabbbaaaabbbbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbaabbbaaaaabbbbbaaaaabbaabbaaaabbbbaaaaaaaabbbbbaaaaabbbaaaaaabbaabbaa + ababaaabbbbbbaabbbbbbbabbbaaaaabbbbbbaaaabbbbbaaaabbbbbaaaaaaaabbbbbbaaabbbbbaaaabbbbaaaba + abbaaaabaaaaaaaaaaaaaaabbbaaaaabbbbbbaaaabbaabbaaaabbbaaaaaaaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbbaabbbaaaaabbbbbbaaaabbbbbaaaabbbbaaabbaaaabbbbbbaaaaaaaaaaaaaaaabaabb + bbbbaaabbbbbbaabbbbbbaabbbaaaabbbbbbbaaaabbbaabaaabbbbaaabbbaaabbbbbbbaabbbbbbaaabbabbaaba + abbbaaabbbbbbaabbbbbbaabbbaaaaabbbbbbaaaaabbbbaaaabbbaaaabbbbaabbbbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbaaaaaabaabaaaaabbbaaaaabbbbaaaabbbbaabbbbbbaaabbbbbbaaabbbbbaabb + bbbbaabbbbbbaaabbbbbbabbbbaaaaaaaaaaaaaaaabbbbbaaabbbaaaabbbbbabbbbbaaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbabbbbaaaaaaaaaaaaaaabbbbaaaaabbbaaaabbbbbabbbbbaaaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbbabbbbaaaaaaaaaabaaaaababbaaabbbaaaaabbbbbabbbaaabaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbbbbbaaaaaaaabbbbaaaaabbbbaaabbbbaaabbbbbaabbbaabbaabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbbbbbbbaaaaaaaabbbbbaaaaabaaaaaabbbbaaabbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbaabbbabbbbbaaaaaaabbbbbbaaaaabbbbaaabbbaaaabbbbaaabbbbabbaabbbbbbaaabbabbbaab + abbbaabaaaaaaaabaaabbbbbaabaabbbbbbbbaaaaabbbaaabbbbaaaabbbbaaabbbbbbbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbaabbbabbbbaabbbbbbbbbbbbaaaaababbaabbbbaaaabbbbaaaabbbabbaaaaaabaaaaaaaabaaaa + bbbbaabbbaabaabbbbbbbbbbabbbabbbbbbbbaaaaabbbaaabbbbbaaabbbbaaaaabbaabbabbbbbbbaabbbbbbaab + bbbbaabbbaabaabbbbbbbbbbaaaaaaabbbbbbaaaaababbaabbbbbaaaaabaaaaaabbbabbabbbbbbbaabbbbbbaab + bbbbaabbbbabaabbbbbbbbbbaaaaaaabbbbbbaaaaabbbaaaaabbbbaaaaabaaaaaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbaabbbbbbbbbbaaaaaaabbbbbaaaaaabbbaaaaabbbbaaaabbaaaaaabbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaaaaaaaabbbaaaaaaabbbaaaaabbbbaaaaabaabaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbaaaaaaabbaaaaaaaabbbaaaaabbbbbaaaaaaaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaabaaabaaaabaaaabbbbbbaaaaaaaaaaaaaaaabaaaaaabbbbbbbaaaaaaaabbbbbbaaabbaaaaaaaababbaaa + abbbaabbbbbbaaabaaabbbbbbbbbbbbaaaaaaaaaaabbbbaaabbbbbbaaaaaaaaabbbbbbaaabaabbaaaaaaaabbab + bbbbabbbbbbbaabbababbbbbbbbbbbbaaaabaaaaaabbaaaaabbbbbaaaaaaaaabbbbbbbaabbbabbbaabbbbbbbbb + abaaabbbbbbbaabbbbabbbbbbbbbbbbaaabbbbaaaabbbaabbabbbbaaaaaaaaabbbbbbbabbbbbbbbabbbbbbbbaa + abbaabbbbbbbaabbbaabbbbbbbbbbbbaaabbbbbaaabbaaabaabaaaaaabaaaaabbbbbbbbbbbbabbbbbbbbbbbbba + abbbabbbbbbbabbbbaabbbbbbbbbbbaaaabbbbaaaabaaaabaaaaaaaaabbbabbbbbbbbbaabbbbbbbbbbbbbbbbba + bbbbaaaaaaababbbaaabbbbbbbbbbbaaaabbbbaaaabaaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbaabb + abbbbaabbbbbbbbbaaabbbbbbbbbbbaaaabbbaaaaabbbbaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbaaabbabbbbbbbbaaaabbbaaaaabbbbaaaabbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbaaaab + abbbbbbabbbbbbbbaaabbbbbbbbbbbaaaabbaaaaaabbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbaaaaaabbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbaaaaaabbbbaaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaaabaaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaaabaaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbaaabbbbbbbbbbbbbbbaaabbbbbbaaaaabbbbaaaabbbbaaaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbababbbbbbbaaabbbbbabbbbbbbaaaaabbbbaaaabbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbabbbbbbbaaaaabbbbaaaabbbbbaaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbabbbbbbbaaaaabbbbaaaabbbbbbaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbbaabbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbaabbbbbaaabaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaabbaaaabbaababaaabbbbba + bbbbbbbabbbbbaaaaabbbabbbabaaaaaaaaaaaaabbaabbbbbaaabaaaabaaaaaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbabbbbbaaaabbbbabbbbbbbbbaaaaabbaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaaabbbaaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabbaaaaabbbbbabbbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbabbbaaabaaabaaaabbbbbbbbbbbbabbbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaaabbbaaabaabbbbbbbbaaabaabbbaabbbbbbabbbbbaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbaaaaabbbabaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaababbbaaaaaaaaaabbbbbbaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbbbaaaaaaaaabbbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbaaaaaaaaaaabbbbbbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbaaaaaaaaaaaabbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabaaaaabbbbabbaaabbbbaaaaaabbbaaabbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbaaaaaaaaabbbbaabaaabbbbaabbbbbbbbaabbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaaabbbaaaaaaabbbbabbbbbbbbbaabbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaaabbbaabbbbbbbbbaabbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaaaabbbaaabbbbbbbbaabbbbbbbaaaaabaabbbaabbaaaabbbabbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbaaabbbbaaaaabbbbbaabbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbaaaaabbaaaaabbaaaaabbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaabbbbaaaaabbaababbbbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabbbbbaaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbaabaaaaabbbbaababbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaaabaaaaabbbbaabaaaaabbaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabaaaaaaaabbaaabbabbaaaaaabbbabbbaaabbaaaaaabbbbaaaabb + abbbbaabbabbaabaaabbbaaaabbbabbbaaaabbbaaaaabbbbaabbbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabbaabbabbbaaaabbbbaaaaabbabbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbbabbaabbabbbaaabbbbbbaaaabbabbbaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaaaaaabbbbbbaaabbbabbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabaabaaaaabbbabbaaaabbabbaabaaabbbbaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaaabbbabbaaaaaaabbabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbaaaabaabbaaaaaaababbbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbaabbabbabbbbbbbbbbbbbbbbaabbaaaabbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbbbbbbbaaaabbbbabbbbbaabbaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbbbbbbbbbbaaaabbbbbaabbbbbbbbbaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbbbaabbaaabbbbbaaabbbbbbbbaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaaabbbbbbaaaabbaaabbbabaaaaabbbbbbaabbbaaaaabbaaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbaabbabbbbbbaaaaabbaaabaabbaaaaaaabbbbbbbbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbabbbaaaaaaaabbaaabaabbaaaaaaaaabbbbbbbaabbabbbbaaaaaaababbaaaaa + baabbbbbaaaabbbbbaabbbbaabbbbbaaaaaaaaabbaaababbbaaaaaaaaaaabbbbbaabbabbbbbabbbaaaaaaaabba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaaaaaaaabbbaaabbbbaaaaaaaaaaaabbbbaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaaaaaaaabbbbabbbbbaaaabbaaaaaaabbbaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbaaaaabbbaaaaaaaaabbbbaaaaabbbaaaaaabbbbabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbbaaaaabbbaaaaabbbaaabbaaaaabbbaaaaaabbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbaaaabbbbaaaaaaabbabbbaaaaabbbbaaaaabbbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaababbbaaaabbbabaaaaabbbbbaaaaaaabbbbbaaaabbbbaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaabbbbaaaabbbbbaaaaabbaaabbaaabbbbbbbaaaabbbbbaaaabaabaaabbbaaaabbbba + bbbbabaabbbaaaaaabbbaaaabbbaaaabbbbbaaaaabbbbbbaaaabbbbabbaaaabbbbbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbaabbbbaaaabbbbbaaaaabbbaabaaaabbbbaabaaaabbbbbbaaaaabbbaaaaaabbaabbaa + ababaaabbbbbbaabbbbbbbabbbbaaaabbbbbbaaaababbbbaaaabbaaaaaaaaabbbbbbbaaabbbbbaaaabbbbaaaba + abbaaaaaaaaaaaaaaaaaaaabbbbaaaabbbbbbaaaabbbaaaaaaaaaaaaaaaaaabbbbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbbaaaaababbbaaaaaaaaaaaaaaaabbbaabaaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbbaaaabbbbbaaaaaaaabbaaaaaaabbbbbbbaabbbbbbaaabbabbaaba + abbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbbaaaabbabbbaaaaaaabbbaaaaaabbbbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbbbaaabbbbbaaaaaaaabbbbaaaaabbbbbbaaabbbbbbaaabbbbbaabb + abbbaabbbbbbaaabbbbbbaabbbbaaaabbbbbbbaaaabaaaaaaaaaaabbbbbaaaabbbbbaaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaabbbbaaaaaaabbbaaaaabbbbaaaaaaabbbbbbaaaabbbbbaaaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbbaabbbbaaaabaaabbaaaaabbaaaaaaaaabbbbbbaaaabbbaaabaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbbaaaaaaaabbaaaabbbbbaaaaaaabbbbbbaaaabbbaabbaabbbbbbaaabbabbbaab + bbbbaabbbbbbaaabbbabbaabbbbaaaaaaaabaaaaaabbbaaaabaaabbbbbaaaabbbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbaabbbabbabbbbaaaaaabaaaaaaaaabbbbaaabaaaabbbbaaaabbbbaabbaabbbbbbaaabbabbbaab + bbbbaabaaaaaaaabaaaababbbaaaaaabbbaaaaaaaabbbaaaabbaaabbbaaaaaabbbbabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbabbbbbbbbbbbaaaaabbbbaaaaaaaababaaabbbaaabbbaaaaaabbbbaabaaabaaaaaaaaaaabaaaa + abbbaabbbaabbaabbbbbbbbbaaaabbbbbaaaaabaaabbbbaabbaaaabbbbaaaaaabbaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbbbaaaabbbbbaaaaabaaabbaaaabaaaaaabbaaaaaaabbbbaababbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbbbababbbbbbaaaaaaaaababbaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbbbbaabbbbbbaaaaaaaaabbbaaaaabaaaabbaaaaaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbaaabbbbbaaaaabaaabbaaaaabbaaaabbabbaaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbaaabbbbbaaaaaaaaabbbaaaabbbaaaababbbaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaabaaabbaaaaaaaabbbbbaaaabbbbaaaaaaaaabaaaaababbbbaaaaaaaaabbbbbbbaabbbaaaaaaaababbaaa + abbbaabbbbbbaaabaaabbbbbbaaaabbbbaaaaaaaaabbbbaaaaabbbaaaaaaaaabbbbbbbaabbaabbaaaaaaaabbab + abbaabbbbbbbaabbaaabbbbbbbaaaabbaaaaaaaaaabbbbabaaaaaaaaaaaaaaabbbbbbbaabbbbbbbaabbbbbbbbb + bbbaabbbbbbbaabbbaabbbbbbbbaaabaaaaaaabaaababaabbabbbaaaaaaaaabbbbbbbaaabbbbbbbabbbbbbbbaa + bbbaabbbbbbbaabbbaabbbbbbbbbaaaaaaabbbaaaabbbbabbbbbaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbba + bbbaabbbbbbbabbbbaabbbbbbbbbbaaaaaabbbaaaabaaaabaaaaaaaabbaabbbbbbbbbbabbbbbbbbbbbbbbbbbba + abbbaababaababbbaaabbbbbbbbbbbaaaabbbaaaaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + abbbbaabbbbbbbbbaaabbbbbbbbbbbaaabbbbbaaaabaaaaaaabbaaaabbbbbbbbbbbbbbabbbabbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbaaaaabbbbaaaabbbaaabbbbbbbbbbbbbbbabbbabbbbbbbbbaaaab + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbaaaaabbbbaaaabbaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbaaaaaabbbbaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbaaaabbbbaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaabbaaaaaaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaabaaaaaaaabbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbaaabbbbbbbbbbbbbbbaaabbbbbbaaaabaaaaaaaabbbbbaaaabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbababbbbbbbbaabbbbbabbbbbbaaaaabbbaaaaaabbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbaabbbbbabbbbbbaaaaabbbbbaaaabbbbbaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbabbbbbbbaaaabbbbbaaaabbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbbaabbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaabbbbba + abbbbbbbbbaabbbbbaaabaabaaaaababbaaabbbbaaaaaaaaaabaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaabbaaaabbaabbbaaabbbbba + bbbbbbbabbbbbaaaaabbbabbbabaaaaaaaaaaaaabbaabbbbbaaaaaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbabbbbbaaaabbbbabbbbbbbbbaaaaabaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaaabbbaaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaaababbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabbaaaaabbbbbaabbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbabbbbaaaaaabaaaababbbbbbbbbaaabbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaaabaabbbbbbbbaaabaabbbaaabbbbbbbbbbaaaaaaaabaaaaabbbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbbbbbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaabbbbbbbbaaaaabbbaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaaabbaaaaaaaaabbbbbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaabbbbaaaaaaaaaabbbbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbaaaaaaaaaaabbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaabbbbbaaaaaaaaaaabbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbaaaaaaaabbbbbaabaaabbbaaaaaaaaaaaabbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaaaabbbbabbbbbbbbaabbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaaabbbaabbbbbbbbaabbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaaabbbbaabbbbbbbbaabbbbbbbbaaaaabaabbbaabbaaaabbbabbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbaabbbaaabbbbbbbbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbaabbbbaaaabbbbbbaabbbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaabbbbaaaaabaaaaaabbbbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbaaabbbabbbbaabbbbaaaaabbaabbabaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbbbaaaabbaabbabbabbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaaabaabbaaabbbbbaabbaaaaabbaaabbbabbbbaabbbbaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaaabaaaaabbbbaabbaaabaaaaaabbbabbbaaabbaaaaaabbbbaaaabb + abbbbaabbabbaabaaabbbaaaabbbabbbaaaababaaaaaabbaaabbbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabaabbbabbbaaaabbaaaaabbbbaabbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbbabbaabbabbbaaabbbbbaaabbbbabbbaaabbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabaaabbbbbaaaaabbbbbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabaabaaaaabbbbbaaaabbaabbaabaaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaaabbbbbaaaabbaabaaabbaabbbaaaaaaabbabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbaaabbabbaaabbbaabaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbaaaaababbabbbbaabbabbbbbaabbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbabbbbaaaaabbbbbbbbbbaabbaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbabbbbbbbbaaaabbbbbabbbbbaaaaaaaabbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbbbbbbaaaabbbbbaabbbbbbbbbaaabbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbbbaabbaaabbbabaaaabbbbbbbaaabbaaaabbbaaaaaaabbbabbbbaba + bbaabbaaaaaaaaabbaabbbbaabbaabbbbbbbaaabbaaabbabbaaaaaabbbbbbaabbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbaaaaabbaaabaabbaaaaaaaabbbbbbbbaabaabbbbaaaaaaababbaaaaa + baabbbbbaaaabbbbbaabbbbaabbabbbbaaaaaaabbaaaaaabbaaaaaaaaabbbbbbbaabbabbbbbabbbaaaaaaaabba + aaabbbbbbaabbbbbbaaabbbaabbbbbbaaaaaaaabbaaaaabbbaaaaaaaaaaabbbbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaaaaaaabbbaaabbbbaaaaaaaaaaaabbbaaabbabbbbbabbbbaaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbaaaaaaaaaabbbbaabbbbbaaaaabbaaaaaabbbbabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbbaaaaaaaaaaabbbbbbbbbbaaaaabbbaaaaaabbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbaaaaabbaaaaaaabbaaabbaaaaabbbaaaaaabbbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaababbbaaaaabbbaaaaaaabbbbbaaaaabbbbbaaaaabbbaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaabbbaaaabbbbaaaaabbbaaaaaaaaabbbbbaaaaabbbbbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaabbbaaaaabbbbaaaaaabbbbbaaabbbbbbbbaaaabbbbbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbaabbbbaaaabbbbbaaaabbbbbaaaaabaaabbbbaaaabbbbbbbaaaabbbaaaaaabbaabbaa + abbbaaabbbbbbaabbbbbbbabbbbaaaabbbbbaaaaabaabbbaaaaaaaaaabaaaabbbbbbbaaabbbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbaaaabbbbbaaaaaaaaaaabaaaabbbbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbbaaaabbaaaaaaabbaaaaaaaaaabbbaaaaaaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbbaaaabbbbbaaaabbbaaaaaaaaabbbbbbbbaabbbbbbaaabbabbaaba + abbbaabbbbbbbaabbbbbbbabbbbaaaabbbbbbaaaabbaaaaaaabbbbbaaaaaaabbbbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbbaaaaabbbbaaaabbbbbaaaaaaabbbbbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbaabbbbaaaabbbbbbbaaabbbaaaaaabbbbbbaaaaaabbbbbbaaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbaaaaabbbbbbbaaaabbbbaaaabbbbbbaaaaaabbbabbaaaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbbaabbbbaaaaabbbbbaaaabbbbbaaaabbbbbbaabaaabbbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbbaaaabbbbbbbaaaabaaaaaaabbbbbaaaaaaabbbbaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbbaaaabbbabbaaaabbbbbaaaabbbbbaaaaaaabbbbaabbbabbbbbbaaabbbbbbaab + abbbaabbbbbbbaabbaabbaabbbbaaaabbbabbaaaaabaaaaaaaabbbbaaaaaaabbbbaabbaabbbbbbaaabbabbbaab + abbbaabaaaaaaaabaaabbabbbbbaaaabbbabbbaaaabbbbaaaaabbbbaaaaaaabbbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbabbbbabbaabbbaaaaabbbabbbaaaabbaaaaaaabbbbaaaaaaaabbbaaabbaabaaaaaaaaaaabaaaa + abbbaabbbaabbaabbbbbbaabbbaaaaaabbaabaaaaabbbbaaaaaabbbaaaaaaaabbbaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbabbaaaaaaabbabbbaaaabbbaaaaaaaaaaaaaaaaaaabbbbabbabbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbbbbaabbaaaaaaabbaaaababbaaaaaaaaaaaaaaaaaabbbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbbbbabbbbaaaaaabbaaaabbbbaaaaaabbabbbaaaaaabbbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbbbbabbbbaaaaabbbaaaabbbaaaaaaabbabbbaaaaaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbbbbbbbaaaaabbbaaabbbbaaaaaaababbbbaaaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaabaaabbaaaaaaaabbbbbaaabbbaaaaabbbaaabbbaaabaaaaaabbbaaaaabbbbbbaaabbbaaaaaaaababbaaa + abbbaabbbbbbaaabaaabbbbbbaaabbbaaaaaaabaaabbbbaaaaaaaaaabbaaaabbbbbbbbaaabaaaaaaaaaaaabbab + abbaabbbbbbbaabbaaabbbbbbaaabbbaaabaaabbaabbbbaaaaaaaaaaaaaaaabbbbbbbbaabbbbbbbaabbbbbbbbb + bbbaabbbbbbbaabbbaabbbbbbaaabbbaaabbabbaaabaabaaaaaabaaaaaaaaabbbbbbbaabbbbbbbbaabbbbbbbaa + bbbaabbbbbbbaabbbaabbbbbbaaabbbaaabbaabaaabbbbaabaaabaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbbbbbbabbbbaabbbbbbbaabbaaaabbaaaaaabbbaabbaaabaabaaabbbbbbbbbbbbbbbbbbbbabbbbbbbbba + abbbaababaababbbaaabbbbbbbaabaaaaaaabaaaaabaaaaababaaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaabb + abbbbaabbbbbbbbbaaabbbbbbbaaaaaaaaabbaaaaababaaabbbaaaabbbbbbbbbbbbbbbaabbabbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbbbaaaaaababbaaaaabaaaaaaabaaaabbbbbbbbbbbbbbbabbbbabbbbbbbbbaaaab + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbaaaaabbbbaaaabaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbaaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbbbbaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbaaaaaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabb + bbaaabbbbbbbbbbbbbbbaaabbbbbaaaabbbbaaaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbababbbbbbbbaabbbbbabbbbbbaaaabbbabbaaaabbbbbaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbaabbbbbabbbbbbaaaabbbbbaaaaabbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbabbbbbbaaaabbbbbbaaaabbbbbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbbaabbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaabbbbba + abbbbbbbbbaabbbbbbaabaabaaaaababbaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbabbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbbbabbbbbaaaaabbbabbbabaaaaaaaaaaaaabbaabbbbbaaaaaaaabbaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbabbbbbaaaabbbbabbbbbbbbbaaaaabbaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbababbbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaabaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaaababbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabbaaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbabbbbaaaaaabaaaaaabbbbbbbbbaaabbbbbaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaaabaabbbbbbbbaaabaabbbaaaaaabbbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbbbbbbbbbaaaaaaabbaabaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaabbbbbaaaaaabbaabbabbbbbbbbbbbbaaabbbaaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbaaaaabbbbbbaaaabbbbbaaaaaabbaaaabbbbbaaaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaabbbbaaaaaaaabbabbbbbbbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbaaaaaaaaaabbbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaabbbbaaaaaaaaaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabaabbbbaaaaaaaaaaabbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaabbbbbaaaaaaaaaaabbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaaabbbbaabbbbbbbaabbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaaabbbaabbbbbbbbaabbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbaabbbaabbbbbbbbaabbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbaabbaaaabbbbbbbaabbbbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaabbaaaaabbbbbbaabbabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabbbabaaabaaaaaabbaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbaaaaabbaabbabbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaabbabaaaabbaabbabbbaaaaabbaaabbbabbbbabbbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaabbabbaaabbbbbaabbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbaaaabbbabbbaaababbaaaabbbbaabbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabaabbbabbbaaaabbaaaaaabbaaabbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaabbabaaabbbbaabbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabaabbbbbaaabbbbabbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbabaabaaaaabbbbaaaaabbabbaaabaaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbaaabbbbbaaaabbbabbaabbbaabbbaaaaaaabaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbaaabbbbaaabbbbabbaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbaaababbbaabbbbaabaabbbbbaabbaaaabbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaabbbaaaabbbbabbabbbabaaaabbbbbbbbbbaabbaaabbbbbaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbaabbaabbaabaabbbbabbbbbbaaaaaaaabbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbabbbbbbaabaabbbbaabbbbbbaabbaaabbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbbbbbaabaabbbbaaabbbbbbbbbaaabbaaaaabbaaaaaaabbbabbbbaba + bbaabbaaaaaaaaabbaabbbbaabbaabbbbbbbbababbaabbbbaaaaabbbbbbbaaabbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbbbbbaababaaabbabaaaaaaabbbbbbabbbaabbabbbbaaaaaaababbaaaaa + baabbbbbaaaabbbbbaabbbbaabbaabbbbbaaaabbbaaababbaaaaaaaaaabbbbbbbaabbabbbbbabbbaaaaaaaabba + aaabbbbbbaabbbbbbaaabbbaabbabbbbbaaaaabbbaaaaabbbaaaaaaaaaabbbbbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbaaaaaabbbaaaaabbbaaaaaaaaaaabbbbaaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbaaaaaaabbbbbaabbbaaaaaaaaaaaaabbbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbbbbaaaaaaaaabbbbbabbbbaaaaabbaaaaaabbbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbaaaaaaaaaaabbbbbbbbbbaaaaaabbaaaaabbbbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaabaabbaaaaaabaaaaabaabbaabaaaaabbbbbaaaabbbbaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaabbbaaaaabbbaaaaabbbbbbbaaaabbbbbbaaaaabbbbbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaaabbbaaaaabbbaaaaaabbbaaaaaaabbbbbbaaaaabbbbbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbaabbbbaaaaabbaaaaaabbbbbbbaaaaaabbbbaaaaabbbbbbbaaaabbbaaaaaabbaabbaa + aaabaaabbbbbbaabbbbbbbabbbbaaaabbbbbaaaabbbbbbaaaaaaaabbbbaaaabbbbbbbaaabbbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaaaaaabbbaaaaabbbbbaaaaaabaabaaaaaaaabbbbaaaabbbbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaabbbaaaaabbbabaaaaabbbbbaabbaaaaabbaaaaabbbaaaaaaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbaabbbaaaaabbbbbaaaaabbaaaaabbbbaaabbbaaaabbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbabbbaaaaabbbbbbaaaabbbbbaabbbbaaaabaaaaabbbbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbaaaaabbbbbbaaaabbaaaaabbbbbaaaaaaaaabbbbbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbaabbbaaaaabbbbbbaaaabbbbbaabbbbbaaaaaaaaabbbbbbaaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbaaaaabbbbbbaaaabbbaaabbbbbbaaaaaaaaabbbabbaaaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbbabbbbaaaaaabbbbbbaaaabbbbabbbbbbaaaaaaaaabbbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaaaaaabbbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbaaaaabbabbbbaaaabaaaaabbbbbaaaaaaaaabbbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbaabbaabbaabbbaaaaabbabbaaaaaabbbaaaabbbaaaaaaaaaabbbbabbbaabbbbbbaaabbabbbaab + abbbaabaaaaaaaabaaabbabbbbaaaaabbbbbaaaaaabbaaaaabbbbaaaaaaaaabbbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbabbbbabbabbbbaaaaabbbbbbbaaaabbbbaaabbbbaabbaaaaaabbbaaabaaabaaaaaaaaaaabaaaa + abbbaabbbbabaaabbbbbbabbbbaaaaabbbabaaaaaabbaaaaaabbaaabaaaaaaabbbaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbabbbaaaaabbbaabaaaaabbbbaaaaaaaabbbbaaaaabbbbaabbabbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbbbbbaaaaaabbaabbaaaabbbaaaaaabaaaabbbaaaaabbbbaaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbabbaaaaaaabbaabbaaaababbaaaabbbbbbbbbaaaaabbbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbbbbbbaaaaabbabbbbaaabbbbaaaaabbbbbbbbaaaaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbbbbbaaaabaaabbaaabaaaaaaaaabbbbbbbaaaabbbbbbbaabbbbbbbaabbbbbbaab + abbbaabaaabbaaabaaaabbbbbabbbaaaabbaabbaaabbbbbaaaaabbbbbbaaaaabbbbbbaaaabbaaaaaaaababbaaa + abbbaabbbbbbaaabaaabbbbaabbbbaaaaabbabbbaabbaaaaaaaaaaabbaaaaabbbbbbbbaaabbaaaaaabaaaabbab + abbaabbbbbbbaabbababbbbaabbbbbaaaaaaabbbaabbbbaabaaaaaaaaaaaaabbbbbbbbaabbbbbbbaabbbbbbbbb + bbbaabbbbbbbaabbbbabbbbaabbbbbaaaabbaabbaabbbbbabbbaaaaaaaaaabbbbbbbbbabbbbbbbbaabbbbbbbaa + bbbaabbbbbbbaabbbabbbbbbaabbbbaaaabbaabbaabaaaaabbbbaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbbbbbbabbbbaabbbbbaabbbbaaabbbaabaaabbbbbabbbaaaabaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbaababaababbbaaabbbbbbabbbaaaabbbaaaaaabaaaaabbbaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaabb + abbbbaabbbbbbbbbaaabbbbbbaabbaaaaabbbaaaaababaaaaabaaaabbbbbbbbbbbbbbbaabbbbbbbabbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaabbaaaaababaaaaabaaaabbbbbbbbbbbbbbbaabbbabbbbabbbbaaaab + abbbbbbbbbbbbbbbaaabbbbbbbaaaaaaababbaaaaabbbaaaaabaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaaabbbbbbabaaaaabbbbbaaaabbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaba + abbbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbaaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbbbaaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbbaaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabb + bbaaabbbbbbbbbbbbbbbbabbbbbbaaaabbbabaaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbababbbbbbbbaabbbbbabbbbbbaaaabbbabaaaabbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbaabbbbbabbbbbbaaaabbbbbaaaabbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbabbbbbaaaaabbbbbaaaabbbbbbbaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbbaabbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaabbbbba + abbbbbbbbbaabbbbbbaabaabaaaaababbaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbabbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbbbabbbbbaaaaabbbabbbabaaaaaaaaaaaaabbaabbbbbbaaaaaaabbaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbabbbbbaaaabbbbabbbbbbbbbaaaaabbaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbababbbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaabaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabbaaaaabbbbbabbbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbabbbbaaaaaabaaaaaabbbbbbbbbaaabbbbaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaaabaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbaaabbbbbaaaaaaabbaabaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaabbbbbaaaaaabbaabbabbbbbbbbbbbbaaabbbbaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbaaaaabbbbbbaaaabbbbaaaaaaabbaaaabbbbbbbbbbbbaaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaabbbbaaaaaabbbbaabbbbbbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaabbbbaaaaaaaaabbbbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaabbbaaaaaaaaaaabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaaabbbbaababbbbbaaaaaaaaaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaabbbbaaaaaaaaaaabbbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaabbbbaaaaaabbaaaabbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbbabbbbaabbbbbbbaaabbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbabbbaabbbbbbbbaaabbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbbababbbbbbbaaababbbbbbbaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaabbababbbbbbbaaabaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabbabaaabbbbbaaabaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbabaaabaaabbabbbaabbaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaabbbaaaabbaabbabbbbaaaaaabaaabbbabbbbabbbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaabbbbaaabbbbbbabbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbaaaabbbabbbaaabbbaaabbbbbbaabbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabaabbbabbbaaababaaaabbbbaaabbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaabbabaaaaabbbaabbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabaabbabaaabbbbaaabbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaaaabbbbaaabbbbabbbaaabbaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbaaabbbbaaaaabbabbbaabbbaabbbaaaaaaabaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaaabbbaaabbbbaabaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbaaababbaaabbbbabbaabbbbbaabbaaaabbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbabbaaabaaabbbbbbbbbbaaaaaaabbbbbaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbaabbabbaaabaabbbbbbbbbbbaaaaaaaabbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbabbbbbbaabaabbbbbbbbbbbbaabbaaabbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbbbbbaabaabbbbaabbbbbbbbbbaaabbaaaaabbaaaaaaabbbabbbbaba + bbaabbaaaaaaaaabbaabbbbaabbaabbbbbbbbbbabbaabbbbaaabbbbbbbbbaaabbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbbbbbabbabbaabbbbaaaaabbbbbbbbabbbaabbabbbbaaaaaaababbaaaaa + baabbbbbaaaabbbbbaabbbbaabbaabbbbbbaaababaaababbaaaaaaaabbbbbbbbbaabbabbbbbabbbaaaaaaaabba + aaabbbbbbaabbbbbbaaabbbaabbaabbbbbaaaabbaaaaaabbaaaaaaaaaabbbbbbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbaaaaaabbaabaaabbaaaaaaaaaaaabbbbaaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbaaaaaaabbbabaabbbaaaaaaaaaaaabbbbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbbbbbaaaaaaaabbbbbabbbbaaaaaabaaaaaabbbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbbbaaaaaaaaabbbbbbbbbbaaaaabbbaaaaabbbbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaababbbaaaaaaaaaaabbbbbbbbbaaaaabbbbaaaaabbbbaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaabbbbaaaaabaaaaaaaaabbaaaaaaabbbbbaaaaabbbabbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaabbbbaaaabbbaaaaaabbbbbbaaaaabbbbbaaaaabbbabbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbaabbbaaaaabbbbaaaaabbbbabaaaaabbbbbbaaaabbbbbbbbaaaabbbaaaaaabbaabbaa + aaabaaabbbbbbaabbbbbbbabbbaaaaabbbbbaaaaaabaabaaaaaabbbbbaaaabbbbbbbbaaabbbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaaaaaabbbaaaaabbbbaaaaabbbbbbaaaaaaabbbbaaaabbbbbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaabbbaaaaabbbbaaaaaaaaaaaaaaaaaaabbbaaaabbbbaaaaaaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbaabbbaaaaabbbabaaaabbbbbbabbbaaaabbbaaaabbbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbabbbaaaaabbbbbbaaaabbaaaabbbbaaaabaaaaabbbbbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbaaaabbbbbbbaaaabbbbaabbbbbaaabaaaaaabbbbbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbaabbbaaaaabbbbbbaaaabbbaaabbbbbaaabaaaaaabbbbbbaaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbaaaaabbbbbbaaaabbaaabbbbbbaaabbaaaaabbbabbaaaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbabbabbbbaaaaabbbbbbbaaabbbbabbbbbbaaaaaaaaaabbbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbaabbbaaaaaaabbbbbaaaabaaabbbbbbaaaaaaaaabbbbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbaabbbaaaaabbbbbbbaaabbbbaabbbbbaaaaaaaaabbbbbaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbbaabbaabbabbbbaaaaabbabbaaaaaabaaaaabbbbaaaaaaaaabbbbbaabbaabbbbbbaaabbabbbaab + abbbaabaaaaaaaaaaaaababbbbaaaaabbabbaaaaaabbbaaabbbbaaaaaaaaaabbbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbabbbbbbbabbbbaaaaabbabbbaaaaabbaaaabbbbaabbbaaaaabbbbaaabbaabaaaaaaaaaaabaaaa + abbbaabbbbabaaabbbbbbabbbbaaaaabbaaaaaaaaabbbaaaabbbaabbbaaaaaabbbaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbbbbbaaaaabbbaabaaaaabbbaaaaaaaabbbbbaaaaabbbbaabaabbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbabbbaaaaabbbaabbaaaababbaaaaaaaaabbbbaaaaabbbbaaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbabbbbbaaaaabbaabbaaaabbbbaaaababbabbbbaaaaabbbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbbbbbbbaaaabbabbbbaaabaaaaaaabbbbbbbbbaaaaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbabbbaaaaaaabbbaaabbbbaaaaabbbbbbbbaaaabbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbaaabaaabbbbabbbbbaaaaaaaabbaaabbaaaaaaaabbbbbbaaaaabbbbbbaaaabbaaaaaaaababbaaa + abbbaabbbbbbaaabaaabbbaaabbbbbaaaabaabbbaabbbbbaaaaaaaabbaaaaabbbbbbbbaaabbaaaaaaaaaaabbab + abbaabbbbbbbaabbababbbbaabbbbbaaaabaabbbaabbbbbabaaaaaabaaaaaabbbbbbbbaabbbbbbbaabbbbbbbbb + bbbaabbbbbbbaabbbbabbbbaabbbbbaaaaabaabbaabbaaaabbbaaaaaaaaaabbbbbbbbbabbbbbbbbaabbbbbbbaa + bbbaabbbbbbbaabbbabbbbbaabbbbbaaaabbaabbaabbbbbabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbbbbbbabbbbaabbbbbaabbbbaaabbbaabbaabbbbbabbbaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbaabababbabbbaaabbbbbbabbbaaaabbbaabbaabbbaaabbbaaabbbbbbbbbbbbbbbbbabbbbbbbabbbbbaabbb + abbbbaabbbbbbbbbaaaabbbbbaaaaaaaabbbaaaaaabaaaaaabbaaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbaaaaaaaaaabbaaaaababaaaaabaaaabbbbbbbbbbbbbbbaabbbbbbbabbbbbaaaab + abbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaaabbaaaaabaaaaaaabaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbabaab + abbbbbbbbbbbbbbbbaabbbbbbbabbaaabbabbbaaaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + abbbbbbbbbbbbbbbabbbbbbbbbbbbaaaabbbbbaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbbbbaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbbbbaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabb + bbaaabbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbaaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbababbbbbbbbaabbbbbabbbbbaaaaabaaabaaaabbbbbbbbaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbaabbbbbabbbbbbaaaabbbbbaaaabbbbbbbbaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbaabbbbbbbbbbbbbbbabbbbbaaaaabbbbaaaaabbbbbbbbaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbbaabbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbaabaabaaaaababbaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbabbbbbabbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbababbbbbbaaaabbbabbbabaaaaaaaaaaaaabbaabbbbbbaaaaaaabbaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbababbbbaaaaabbbbabbbbbbbbbaaaaabaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaaabaabbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbabbbbaaaaaabaaaaaabbbbbbbbbaaabbbbaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaaabaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbaabbbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaabbbbbaaaaaabbaabbabbbbbbabbbbbaaabbbaaabaabbaaabbabbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaaabbaaabbbbbbbbbbbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaabbbbbbbabbbbbbaaabbbbbbaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaabbbbaaaaaaabbbabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbabbbaaaaaaaaaaabbbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaababbbbaaaaaaaaaabbbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abaaaaabbbbbbbbbaaaaabaabbbbaaaabbbbbaaaaaaaaaaabbbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + ababaaabbbbbbbbbaaaaabbaabbaabbaabbbaaaaaaaaaaaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbbabbbaaaaabbbbaaabbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbabbbbbbbbbbbbbaabbbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbaaabbbbbbbbaabbabbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaabababbbbbbbbaabbaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabbbaabbbbbbbaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbaaabaaabbaabbbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaabbbaaabaaabbaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaabbaaaabbaabbaabbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbaaaabbbabbbabbbbaaabbbbbbaabbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabaabbbabbbaababaaaabbbbbaabbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaabbbaaaabbbbbaabbaaaabbbbaaaabbaabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabaabbbaaaabbbbaaabbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabaabaababbbaaabbbbbaabbaaabbaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbaaabbbaaaaabbaabbbaaabbaabbbaaaaabaababbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaabbbbaaabbbbabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbaabbbbaabbbbaabaaabbbbbaabbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbabbaaabaaaabaabbbbbbaaaaaaabbbbbaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbaabbbbbaaabaabbbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbaabbbbbaaabaabbbbbbbbbbbbaabaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbabbbbbaaabaabbbabbbbbbbbabbbaabbbaaaaabbaaaaaaabbbabbbbaba + bbaabbaaaaaaaaabbaabbbbaabbaabbbbbbbbbaaabaabbbaabbbbbbbabbbaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbbbbbabaabbaabbbaaaabbbbbbbbbaabbbaabbabbbbaaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbbaababbaaababaaaaaaabbbbbbbabbbaabbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbabbbaabbbbbaaabbbaaaaabbaaaaaaaaabbbbbabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbaaaaabbaabbaabbaaaaaaaaaaabbbbbbaaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbaaaaaabbbabbaabbaaaaaaaaaaaabbbbbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbbbbbaaaaaaabbbabbabbbaaaaaaaaaaaaabbbbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabbbbaaaaaaaaabbbbabbbbbaaaaabbbaaaaabbbbbbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaaabbbbbaaaaaaaaaabbbbbbbbbbaaaaabbbaaaaabbbbbaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaabbbbaaaaaaaaaaabbbabbbbbaaaaababbbaaaabbbbabbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaaabbbaaaaabbaaaaaabbabbabaaaaabbbbaaaaabbbbabbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbaabbbaaaabbbbaaaaaaaaaaaaaaaabbbbbbaaaabbbbabbbbaaaabbbaaaaaabbaabbaa + aaabaaabbbbbbaabbbbbbbbbbbaaaabbbbaaaaabbbbbbbaaaabbabbbaaaabbbbbbbbbaaabbbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaaaaabbbbaaaabbbbbaaaaaaaaaaaaaaaabbbbbaaaabbbbbbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbabbbaaaaaabbbaaaaaabbbbbbaaaaaaaabbaaaaabbbbaaaabaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbbbbbaaaaaabbbbaaaaabbbbaaaaaaaaaabbaaaaabbbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbbbbaaaaaabbbbbaaaababbbbabbaaaaabbaaaaabbbabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbbbaaaaabbbbbaaaaabbbbbaabbbbaaaabaaaaabbbaabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaaaaaaaaabbbbbaaabaaaaabbbaabbbaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbabbbaaaaabbbbbbbaaabbbbbaabbbbbaaabaaaaabbbaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbabbabbbbaaaaaaabbbbbaaaabaaaabbbbbaaaaaaaaabbbbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbabbbbaaaabaabbbbaaaabbbbaabbbbbaaaaaaaaabbbbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbabbbbaaaaababbbbaaaaabaaabbbbbbaaaaaaaaabbbbbaabbaabbbbbbbaabbabbbaab + abbbaabbbbbbbaabbaabbabbbbaaaaabbbbbbaaaabbbbaabbbbbaaaaaaaaabbbbbaabbaabbbbbbaaabbbbbbaab + abbbaabaaaaaaaaaaaaababbbaaaaaababbaaaaaabbbaaaabbbbaaaaaaaaaabbbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbabbbbbbbabbbaaaaaaaaabbbbaaabbbbaaabbbbaaaaaaaaaabbbbaabbbaabaaaaaaabaaabaaaa + abbbaabbbbabaaabbbbbbabbbbbaaaaaaabbbaaaabbbbaaabbbbaaabaaaaaabbbbaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbbbbbbbbaaababbbaaaabbbbaaaabbbaaabbbaaaaabbbbaaababbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbbbbbbbbaaaaaabbaaaaabbbbaaaaaaaaabbbaaaaabbbbbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbbbbbbbabbbbaaaaaabbbaaaabaaaaaaaaaabaabbaaaaaabbbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbbbbaabbbbaaaaabbbbaaabbbbaaaababbaabbbaaaaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaabbbbaaaaabbbbaaabbaaaaaabbbbbbbbbaaaabbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbaaabaaaabbbbaabbbbaaaaaabbbaaabbabaaaaaabbbbbbbbaaabbbbbbaaaabbaaaaaaaaaabbaaa + abbbaabbbbbbaaabaaabbbbbaabbbbbaaaaaabbaaabbbbbaaaaabbbbbbaaaabbbbbbbbaaabbaaaaaaaaaaabaab + abbaabbbbbbbaabbababbbbbbabbbbbaaaaaabbbaabaaaaaaaaaaaabbaaaaabbbbbbbbaabbbbbbbaabbbbbbbbb + bbbaabbbbbbbaabbbbabbbbbbabbbbaaaaababbbaabbbbaabaaaaaaaaaaaaabbbbbbbbabbbbbbbbaabbbbbbbaa + bbbaabbbbbbbaabbbabbbbbbbaabbaaaaabbaabbaabbbbaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbbbbbbabbbbaabbbbbbaaaaaaaabbbaabbaabaaaaabbbaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbaabababbabbbaaabbbbbbaaaaaaaabbbaaabaabbbbbabbbaaaabbabbbbbbbbbbbbbabbbbbbbabbbbbbabbb + abbbbaabbbbbbbbbaaaabbbbbaaaaaaaaabbaaabaabbbaaaabbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaaabbbbbbbaaaaaaaabbbaabaababaaaaabaaaabbbbbbbbbbbbbbbbabbbbaaabbbbbbaaaab + abbbbbbbbbbbbbbbaaabbbbbbbaabaaaaabbbaaaaabababaaabaaaabbbbbbbbbbbbbbbbbabbbbbbbbbbbbabaab + abbbbbbbbbbbbbbbbabbbbbbbbbbbaaaabbbbbaaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbabbbbbbbbbbbaaaaabbbbbaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + abbbbbbbbbbaabbbbbbbbabbbbbbaaaaabbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbaabbbbbbbbabbbbbbaaaabbbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbabbbbbbabbbbbbbbbabbbbbaaaabbbbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbabbbbbaaaaabbbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbabbbbbaaaaabbbbbbaaaabbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbaaaabbababbaaaabbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbaaabbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbaabaabaaaabbabbaaabbbbaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbababbbbbaaaaabbbabbbaaaaaaaaaaaaaaabbaabbbbbaaaaaaaabbaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbbbbaaaabbbbabbbbbbbbaaaaaabaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaaabbbaabbabbbbbbbaaaabbbaaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbabbbaaaaaaabaaaaaabbbbbbbbbbaabbbbaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaabaaabbaabbbabbbbaabbbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbaabbabbbbbaaabbbbaaabbbaaabaabbaaabbabbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaaabbaaababbbbbbabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaabbbbbbbbbbbbbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaabbbbbbaaaabbbbabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaabbbabaaaaaabbbbbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabbbbbaaaaaaaaaaabbbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaabbbbaaaaaaaaaaabbbbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaaabbaabbaabbabbbbaaaaaaaaaaaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaabbbaaaaaaaaaaaabbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbabbbaaabbbbbbaaabbbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbabbbbbbbbbaaabbabbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbababbbbbbbaaabbaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabababbbbbbbaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbabbbaaabbbbbbbaabbbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbabbbbaaaaaabbbaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaaaabaabbbaabbbbaabbaaaaaabbbabbbbaabbbbaaaabbbbaaabbb + abbbbaabbabbaabaaabbbaaaabbbabbbabbbaaaabaabbbabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbabbbaaaabbbbbbaabbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbbbbbaaaabbbbbaaabbaaaabbbbaaaabbaabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabbbbbaaaaabbbbaaabbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaabbbbaaaabbbbaaabbaaabbaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbaabbbaaaabbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbabbbbaaaabbbbabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabbbbaaabbbbbbbaaabbbbbaabbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbaabbbbbbbbaaabbaaaabbbbabbbbaabbaaaabbaabbbbbbaaaaaaabbbbbaabaaaabbbbbbbaaabbbbba + aaaaaabbbaabbbbabaaaabbbaaaabbbaabbbbaaabaaabbbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbaabbbbaaabaaabbbbbbbbbbbbaaaaaabbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbabbbbaaabaaabbbbbbbbbbbbaabaaabbbaaaaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaabbaaabbbbaabbaabbbbbbbbaaabaaabbabbbbbbbbbabbbaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbbbaaabaaabbaabbbbbbbaabbbaabbbaabaabbbbaaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbaabaaabaaabbaaaaabbbbbbbbbaabbaaabbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbabbbabbbbbaaabaaaaaababaaaaaaabbbbbbbaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbaaaabbaaabbaabaaaaaaaaabbbbbbabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbaaaaaabbbaabbabbbaaaaaaaaaabbbbabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbbbbaaaaaaabbbaabbabbbaaaaaaaaaaabbbbbbbbaabbabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbbaaaaaaaaabbbbbabbbbbaaaaaaaaaaaabbbbabbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaabbbbbaaaaaaaaaabbbbbabbbbaaaababbaaaaabbbbabbaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaabbbaaaaaaaaaaabbbbbbbbbbaaaaabbbbaaaabbbbaabbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaabbbaaaaabbaaaaabaaabbbbaaaaabbbbbaaaabbbbaabbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaaaaabbbbbaaaabbbbaabbbbaaaabbbaaaaaabbaaabaa + aaabaaabbbbbbaabbbbbbbbbbaaaabbbbbaaaabbbaaaaaaaabbbbbbaaaaabbbbbbbbbaaaabbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaaaabbbbaaaabbbbaaaaaaabbbbbaaaabbbbbbbaaaabbbbbbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaabbbaaaaaabbbbaaaaaabbbbbbbaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaabbbbbaaaaaaaabbaaaaaaaabbbaaaabbbbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbbbaaaaabbbbabaaaabbbbbbaaaaaaaaabbaaaabbbaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbbaaaaabbbbbbaaaaaaaaabaaaaaaaaaaaaaaabbbaaabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbbbbaaaaaabbbbbbaaabbbbbbaaabbbaaaaaaaaabbbaaabbbaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbbbbaaaaaaaabbbbaaaababaaaaaabbbaaaaaaaabbbbaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbbbbbaaaaaaaaabbbaaaabbbbbaaabbbbbbaaaaaabbbbbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbbbbaaaaaaaaabbbaaaabbbaaaaaabbbbbaaaaaabbbbbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbbbbaaaaabbaaabbaaaaabbbbaaaabbbbbaaaaaabbbbbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbbaabbaabbbbbaaaabbbaaaabaaaabbbbaaaabbbbbbaaaaaabbbbbbaabbaabbbbbbaaabbabbbaab + abbbaaaaaaaaaaaaaaabbbbbaaabbbbaaabbaaaaaabbbaaabbbbbbaaaaaabbbbbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbabbbbbbbbbbaabbbbbaaabbaaaabbbbbaaabbbbbbaaaaaaabbbbaaabbaaaaaabbaaabaaabaaaa + abbbaabbbbabaaabbbbbbbbbaabbbbbaaaabaaaaaabaaaaaabbbbbaaaaaaabbbbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbbbaabbbbbaaaabbaaaabbbbaaaaabbbbaaaaaaaabbbabbabbabbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbbbaabbbbbaaaabbaaaabbaaaaaaabbbbaaaaaaaabbbbbbaaaabbbbbbbaabbabbbaab + abbbaabbbbbbaabbbbbbbbbbaaabbbbbaaabbaaaabbbbbaaaabbbbaaabaaaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaabbbbbbaaabbaaaabbbaaaaaaaabaaabbaaaaaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaabbbbbbaaaabbaaaabbbbaaaaaaaaaabbaaaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaaaaaabbaabbaaaabbbbaaabbbbbaaaabbaaabbbbbaaaaababbbabaaaaabbbbbbbaaabbaaaaaaaaaabbaaa + abbbaabbbbbbaabbaaabbbbbaaaabbbaaaaabbaaabbaabaaaaabbbbbbaaaaabbbbbbbbaaabbaaaaaaaaaaabaab + abbaabbbbbbbaabbbaabbbbbaaaaabaaaaaabbbaabbbbbaaaaabbbbbbaaaaabbbbbbbbaabbbbbbbaabbbbbbbba + bbbaabbbbbbbaabbbbbbbbbbaaaaaaaaaaaaabbaaabbbaaaaaaabbbbbaaaabbbbbbbbaaabbbbbbbaabbbbbbbaa + bbbaabbbbbbbaabbbabbbbbbaabaaaaaaaaaabbbaabaabbabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbbbbbbabbbbaabbbbbabbaaaaaabababbbaabbbaaabbaaaaaaaaaaabbbbbbbbaabbbbbbbbaabbbbbbbba + abbbabbbbabbabbbaaabbbbbaaaaaaaabaabaabbaabbbbbabbbaaaaaaaaabbbbbbbbbaabbbbbbbbaabbbbbabbb + abbbaabbbbbbbbbaaaabbbbbbaaaaaaaaabbaabbaabaaaaabbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbaaaabbbbbbaaaaaaaaabbaaabaabbaaaaaabaaaabbbbbbbbbbbbbbaabbbbbabbbbbbbbaaaab + abbbbbbbbbbbbbbbaaabbbbbbbaabbaaaabaaaabaabbaaabaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaab + abbbbbbbbbbbbbbbaabbbbbbbbbbbaaaabbbaaaaaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbbbbbbabbbbbbbbbbbbaaaabbbbaaaaabbaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + abbbbbbbbbbaabbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbaabbbbbbbabbbbbbbaaaabbbbbaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbabbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbaaabbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbaabaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbababbbbbaaaaabbbabbbaabaaaaaaaaaaaabbaabbbbbaaaaaaaabbaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbbbbaaaabbbbabbbbbbbbbaaaaabaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaaabbbaabbaabbbbbbaaaabbbaaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaabbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaaaaaabaaaaaaabbbbbbbbbaabbbbaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaaabbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbbabbbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbaabbaabbbbbaabbbbaaabbbaaabaabbaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaaabbaaababbbbbbabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaabbbbbbbbbbbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaabbbbbbaaaabbbbabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaabbbabaaaaaabbbbbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbabbbbbbbbaaaaaaabbbbbaabbbbbaaaaaaaaaaabbbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaabbbbaaaaaaaaaaabbbbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaaabbaabbaabbaabbbaaaaaaaaaaaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbbabbbaaaaaaaaaaaabbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbabbbaaabbbbbbaaabbbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbabbbbbbbbbaaabbabbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbababbbbbbbaaabbaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabababbbbbbbaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbaaabbbbbbbaabbbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbabbbbaaaaaabbbaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaaaabaabbbaabbbbaabbaaaaaabbbabbbbaabbbaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbabbbaaaabaaabbabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbaabbabbbabbbaaaabbbbbbaabbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbbbbaaaabbbbbaaabbaaaabbbbaaaabbaabbbabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabbbbbaaaaabbbbaaabbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaabbbbaaaabbbbaaabbaaabbaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbaabbbaaaabbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbabbbbaaaabbbbabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbaabbbbbbbbaaaaaaaabbbbabbbbaaabbbbbbbaaabbbbbaabbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbaabbbbbbbbaaabbaaaabbbbabbbbaabbaaaabbaabbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbaabbbbabaaaabbbaaaabbbaabbbbaaabaaabbbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbaabbbbaaabaaabbbbbbbbbbbbaaaaaabbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbabbbbaaabaaabbbbbbbbbbbbabbaaabbbaaaaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaabbaaabbbbaabbaabbbbbbbbaaabbaabbabbbbbbbbbabbbaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbabaaabaaabbaabbbbbbbaabbbaabbbaabaabbbbaaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbaabaaabaaabbaaaaabbbbbbbbbaabbaaabbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbabbbabbbbbaaabaaaaaababaaaaaaabbbbbbbaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbaaaabbaaabbaabaaaaaaaaabbbbbbabbaaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbaaaaaabbbaabbabbbaaaaaaaaaabbbbabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbbbbaaaaaaabbbaabbabbbaaaaaaaaaaabbbbbbbbaabbabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbbaaaaaaaaabbbbbabbbbbaaaaaaaaaaaabbbbabbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaabbbbbaaaaaaaaaabbbbbabbbbaaaababbaaaaabbbbabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaabbbaaaaaaaaaaabbbbbbbbbbaaaaabbbbaaaabbbbaabbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbaabbbaaaaabbaaaaabaaabbbbaaaaabbbbbaaaabbbbaabbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbbbbbaaaaabbbaaaaabbbbbbbaaaaabbbbbaaaabbbbaabbbbaaaabbbaaaaaabbaaabaa + aaabaaabbbbbbaabbbbbbbbbbaaaabbbbaaaaabbbaaaaaaaabbbbbbaaaaabbbbbbbbbaaaabbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaaaabbbbaaaabbbbbaaaaaabbbbbaaaabbbbbbbaaaabbbbbbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaabbbaaaaaabbbbaaaaaabbbbbbbaaaabbbbaaaaabaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaabbbbbaaaaaaaabbaaaaaaaabbbaaaabbbbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbbbaaaaabbbbabaaaabbbbbbaaaaaaaaabbaaaabbbaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbbaaaaaabbbbbaaaaaaaaabaaaaaaaaaaaaaaabbbaaabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbbbbaaaaaaabbbbbaaabbbbbbaaabbbaaaaaaaaabbbaaabbbaaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbabbaaaaaaaabbbbaaaababaaaaaabbbaaaaaaaabbbbaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbbbbbaaaaaaaaabbbaaaabbbbbaaabbbbbbaaaaaabbbbbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbbbbaaaaaaaaabbbaaaabbbaaaaaabbbbbaaaaaabbbbbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbbbbaaaaabbaaabbaaaaabbbbaaaabbbbbaaaaaabbbbbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbbaabbbabbbbbaaaabbbaaabbaaaabbbbaaaabbbbbbaaaaaabbbbbbaabbaabbbbbbaaabbabbbaab + abbbaaaaaaaaaaaaaaabbbbbaaabbbbaaabbaaaaaabbbaaabbbbbbaaaaaabbbbbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbaabbbbbbbbbaabbbbbaaaabaaaabbbbbaaabbbbbbaaaaaaabbbbaaabbaaaaaabbaaabaaabaaaa + abbbaabbbbabaaabbbbbbbbbaabbbbbaaaabbaaaaabaaaaaabbbbbaaaaaaabbbbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbbbaabbbbbaaaabbaaaabbbbaaaaabbbbaaaaaaaabbbabbabbabbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbbbaabbbbbbaaabbaaaabbaaaaaaabbbbaaaaaaaabbbbbbaaaabbbbbbbaabbabbbaab + abbbaabbbbbbaabbbbbbbbbbaaabbbbbaaabbaaaabbbbbaaaabbbbaaabaaaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaabbbbbbaaabbaaaabbbaaaaaaaabaaabbaaaaaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaabbbbbbaaaabbaaaabbbbaaaaaaaaaabbaaaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaaaaaabbaaabaaaabbbbaaabbbbbaaaabbaaabbbbbaaaaababbbabaaaaabbbbbbbaaabbaaaaaaaaaabbaaa + abbbaaabbbbbaabbaaabbbbbaaaabbbaaaaabbaaabbaabaaaaabbbbbbaaaaabbbbbbbbaaabbaaabaaaaaaabaab + abbaaabbbbbbaabbbaabbbbbaaaaabaaaaaabbbaabbbbbaaaaabbbbbbaaaaabbbbbbbbaabbbbbabaabbbbbbbba + bbbaabbbbbbbbabbbbbbbbbbaaaaaaaaaaaaabbaaabbbaaaaaaabbbbbaaaabbbbbbbbaaabbbbbbbaabbbbbbbaa + bbbaabbbbbbbbabbbabbbbbbaabaaaaaaaaaabbbaabaabbabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbabbbbbbbbbbabbbbbabbaaaaaaaababbbaabbbaaabbaaaaaaaaaaabbbbbbbbaabbbbbbbbaabbbbbbbba + abbbaaabbaabbbbaaaaabbbbaaaaaaaaaabbaabbaabbbbbabbbaaaaaaaaabbbbbbbbbaabbbbbbbbaabbbbbabbb + abbbaabbbbabbbbaababbbbbbaaaaaaaabbbaabbaabaaaaabbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabb + abbbbbbbbbabbbbbaaabbbbbbaaaaaaaaabaaaabaabbaaaaabbaaaabbbbbbbbbbbbbbaabbbbbabbbbbbbbaaaab + abbbbbbbbbbbbbbbaaabbbbbbbabbbaaaabbaaabaabbaaabaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaab + abbbbbbbbbbaabbbbabbbbbbbbbbbaaaabbbaaaaaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbaabbbabbbbbbbbbbbbaaaabbbbaaaaabbaaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + abbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbabaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaabbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbaaabbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbaaabbbbbbaabaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbababbbbbaaaaabbbabbbaabaaaaaaaaaaaabbaabbbbbbaaaaaaabbaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbbbbaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaaabbbaabbaabbbbbbaaaabbbaaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaabbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabaaabaaaaaabbbbbbbbbaaabbaabaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaaabbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbaabbbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbaabbaabbbbaaabbbbaaabbbaaabaabbaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbbbaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaabbbbbbbbbbabbbaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbbbaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaabbbbaaaaaabbbabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbabbbbbbbbaaaaaaabbbbbaababbbaabaaaaaabbbbbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaabbbbaaaaaaaaaabbbbbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + bbabaaabbbbbbbbbaaaaabbaabbaabbaabbbaaaaaaaaaaabbbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbbabbbaaaaaaaaaaaabbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbbaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbabbbaaaaaaaaaaaabbbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbbbbbbbbbbbaaabbaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbabbbbbbbbbaaabbaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabbaabbbbbbbaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbabbbaabbbbbbbaaabbbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbabbbaaabbbbbbaaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaaabaaabbaabbbbbaabbaabaaabbbabbbbaabbbaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbabbbaaabaaabbaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbaabbabbbabbbaaabbaabbaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbbbbaaabbbbbbaabbbaaaabbbbaaaabbaabbbabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaababbbaaabbbbbbaabbbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaaabbbaaaabbbbbaabbaaabbaabbbbaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbaabbbaaabbbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbabbbaaabbbbbaabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbaabbbbbbbbaaaaaaaabbbaabbbaaaabbbbabbaaabbbbbaabaaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbbaaabbaaaabbabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabaaaabbbaaaabbbaabbbaaabbaaabbaabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbabbbbaabbaaabbaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbabbbbaaabaaabbaabbbbbbbbabbaaabbbaaaaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaabbaaabbbbaabbaabbbbbbbbaaabaaabbbabbbbbbbaabbbaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbbbaaabaaabbbbbbbbbbaaabbaaabbbaabbabbbbaaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbabaaaabaaabbabbbbbbbbaabbaaabbaaabbabbbbbabbbaaaaaaaabba + baabbbbbbaabbbbbbaaabbbabbbbbbbbbaabaaaaaaabbbaaabbbbbbbbbbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaaaabbaaaabaabbaaaaabbbbbbbbaaabbaaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbaaaaabbbaaabbabbaaaaaaaabbbbbbaabbababbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbabbbbaaaaaaaabbaabbbbbbaaaaaaaaabbbbbbabbbbaabbabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbbaaaaaaaaabbbaaabbbbaaaaaaaaaaabbbbaaabbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbaaabaabbbbaaaaaaaaaabbbbbaabbbbaaaaaaaaaaaabbbaabbaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbabbbaaaaaaaaaaabbbbbbbbbbaaaaaaaaaaaaabbbaaaabbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbbbbbaaaaaabaaaaabaabbbbbbaaaaabbbbaaaabbbbaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbbbbaaaaabbaaaaaabaaababbaaaabbbbbaaaabbbbaaabbbbaaaabbbaaaaaabbaaabaa + aaabaaabbbbbbaabbbbbbbbbaaaabbbbaaaaaaabbbbbaaaaabbbbbaaaaabbbaabbbbbaaaabbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaaaabbaaaaaabbbbaaaabbbbaaaaaaaabbbbbbaaaabbbabbbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbbaaaaaabbabbaaaaaaabbbaaaabbbbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbbbaaaaaabbbaaaaabbbbbbaaaaabbbaabbaaaabbbbbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbbaaaaabbbbaaaaaaaaaabbaaaabbaaabbaaaabbbbaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbaaaaaaabaaaaaaabbbbbbaaaabbaaabbaaaabbbbaaabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbbbaaaaaaaaaaaaaaabbaaaaaaaabbaaaaaaaaabbbbaaabbbaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaabbbbbaaaabaaaaaaaaaabbbbbaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbbbbaaaaaaaaabbbaaabbbabaaaaaaaabbaaaaaabbbbbbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbbbaaaaaaabbbbaaaaaabbbbbaaaaaabbbaaaaabbbbbbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbbbbaaaaaabbbbbaaaaabbbbaaaaaaaaabbbaaaabbbbbbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbbaabbbbbbbbaaaaabbbbbbaaaaaaaabbbaaaaaaabbbbaaabbbbbbbaabbaabbbbbbaaabbabbbaab + abbbaabaaaaaaaaaaaabbbbaaaaaabbbbbaaaaabbbbbaaaaaaaabbbbbaabbbbbbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabbaabbbbbbbbaaaaabbbbbbaaaaaaaabbaaaaaaaabbbbbaabbbbbbaaabbaaaaaabbaaabaaabaaaa + abbbaabbaaabaaabbbbbbbbaaaaaabbbbbaaaaabbbbbaaaaaaabbbbbbaabbbbbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbabaaabbbbbbbbaaaaaabbbbbaaaaaabbbaaaabaaabbbbbbaaabbbbaabbabbabbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbbbbbaaaaabbbbbbaaaaaabbbbbaaaaaabbbbbbaaabbbbaabbbaaabbbbbbbaabbabbbaab + abbbaabbbbbbaabbbbbbbbbaaaabbabbbaaaaaaabbbaaaaabaaabbbbaaaaabbbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbaaabbbabbbaaaaaaaabbbbaaabaaaabbbaaaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbaabbbaabbbaaaaaaabbbbaaaaaaaaabbbaaaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaaaaaabbaaaaaaabbbaaaabbaaaaaaaabaaaabbbbaaaaaaaabbbaaaaaabbbbbbbbaaabbaaaaaaaaaabbaaa + abbbaaabbbbbaaabaabbbbaaaabbbaaaaaaabaaaabbbbbaaaaaaaaaaaaaaaabbbbbbbbaaabbaaabaaaaaaabaab + abbaaabbbbbbbaabbbbbbbaaaabbbbaaaaabbbaaabbaaaaaaaaaaaaaaaaaaabbbbabbbaabbbbbabaabbbbbbbba + bbbaabbbbbbbbabbbbbbbbaaaabbaaaaababbaaaabbbbbaaaaababbabbaaabbbbbbbbaaabbbbbbbaabbbbbbbaa + bbbaabbbbbbbbabbbbbbbbaaaabaaaaaababbaaaabbbaaaaaaaaabbabbaaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbabbbbbbbbbabbbbbaaaaaaaaabaabbbaaabbabbbabaaaabbaaaaabbbbbbbbbaabbbbbbbbaabbbbbbbba + abbbaaabbaabbbbbaabbbbbaaaaaaaaaaabbbbbbaabbaaabbbaaaaaaaaaabbbbbbbbbabbbbbbbbbaabbbbbabbb + abbbaabbbbbbbbbaaaabbbbaaaaaaaaaabbbabbbabbbbbbabbaaaaaaaaaabbbbbbbbbaabbbbbbbbbbbbbbaaabb + abbbbbbbbbaabbbbbaabbbbbaaaaaaaaaabaaabaaabaabaaabbaaaaaaabbbbbbbbbbbaabbbbbabbbbbbbbaaaab + abbbbbbbbbbbbbbbaabbbbbbaabbbbaaaabbaaababbaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaab + abbbbbbbbbbaabbbbabbbbbbbbbbbaaaaabbaaabaabbabaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + bbbbbbbbbbbaabbbbabbbbbbbbbbaaaaabbbaaaaaabaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + abbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbaaaaaabbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb`, + map `abbbbbbbbaaabbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbaaabbbbbaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaabbbaaabaaaabbaabbbaaabbbbba + bbbbbababbbbbaaaaabbbabbbaabaaaaaaaaaaaabbaabbbbbaaabaaaabbaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbbbabbbbbaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaaabbbaabbaabbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaabbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabaaabaaaaaabbbbbbbbbaaabbbbaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbaaabbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaabbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaaabbaaaaabbbbbbaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaaaabbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbabaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaabbbbbbbabbbbbabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbabbbbbbbbaaaaaaabbbbbaababbbbbbaaaabbbbabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaabbbbaabaaaaaabbbbbbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + bbabaaabbbbbbbbbaaaaabbaabbaabbaabbbbaaaaaaaaabbbbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbbabbbaaaaaaaaaaabbbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbabbbaaaaaaaaaaaabbbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbbbaaaaaaaaaaabbabbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbbbbbbbbaaaabbaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabababbbbbbbaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaabbbbbaabbbabbbbaabbaabbbbbbbaaabbbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbabbbaabbbbbbbaaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaaaabbbbbaaabbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabaaabbbaaaabbbabbbabbbaaaaaabbbaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbbbbbaabbaabbbaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbbbaaabbaabbbaabbbaaaabbbbaaaabbbabbbabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabbbbaaabbbbbbbaabbbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaabbbaaabbbbbbaaabbaaabaaabbbbaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbabbbaaaabbbbbbaabbaabbbaabbbaaaaabaababbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaaabbbbbbbaabaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbaabbbbbbbbaaaaaaaabbbabbbaaabbbbbbabbaaabbbbbaabaaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaabbbaaaabbbbabbbaaabbaaaabbaabbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbabbbaabbbaaabbaabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbbaabbbaaabbaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbbaaabbaaabbaabbbbbbbbabbaaabbbaaaaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaaabaaabbbbaabbaabbbbbbbaaaabaaabbaaabbbbbbaabbbaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbbaaaabaaabbbaaabbbbaaabbbaabbbaabbabbbbaaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbbbaaabbaaabbbbbbbbbbaaabbaaabbbaabbabbbbbabbbaaaaaaaabba + baaabbbbbaabbbbbbaabbbbaabbbbbbbbabbaaabbaaababbbbbbbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaaabbaaababaabaabbbbbbaaaabbaaabbaaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaaabaaaaabbbbaaaabbbbbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbbbbbaaaaaaaabbaaaabbbbaaaaaabbbbbbbbbaabbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbaaaaaaaaabbaaaaabbbaaaaaaaabbbbbbbaaaabbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabaabbbaaaaaaaaaabbbbababbbbaaaaaaaaaabbbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbabbaaaaaaaaaaabbbbbaabbbbaaaaaaaaaaabbbbbaaaabbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbbbbaaaaabaaaaabbbbbbbbbbbaaaaaaaaaaaabbbbaaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaaabbbbbbaaabbbbbbbaaaaabbaaaaaaaabbbbabaaaaabbbaaaaabbbbaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaaabbbbbbaabbbbbbbbaaaabbbbaaaaabbaaabbbaaaabbbbbaaaabbbbaaabbbbbaaabbbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaaabbaaaaaabbbbaaaaaaaabbbaaaaabbbbbaaaabbbbaabbbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbaaaaaabbbaaaaabbbbaabaaaabbbbbbbaaaabbbaabaaaabaaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbbaaaaabbbbaaaaaaaaabbbaaaabbbaabbaaaabbbaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbaaaaabbbbaaaaaabbbbbbaaaabbaaabbaaaabbbaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbaaaaabbbbaaaaaabaaabbaaabbbabbbbaaaabbbabaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbaaaaabbbbaaaaaaabbbbbaaaababbbbbaaaabbbbbaaabbaaaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbbaaaabbbaaaaaaaabbaaabaaaababbbbbaaaabbbbbaaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbbbaaaaabbaaaabbbbbabbbbaaaabbbabbaaaaabbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbbaaaabbaaaabbbbbbbbaaaaaaabbbbbbaaaaabbbaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbaaabbbbbbbaaaabbaaaabbbbbaaabbbbaabbbbbbbaaaaabbbbabbbaabbaabbbbbbbaabbabbbaab + abbbaabbbbbbaaabbbbbbaaaaaabaaaabbbbbbbbaaaaaaabbbbbbaaaaabbbbabbbaabbbabbbbbbbaabbabbbaab + abbbaabaaaaaaaaaaabbbaaaaaaaaaaabbbbbaaabbbbaaabbbbbbaaaaabbbbabbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaabbaaabbbbbbaaaaaaaaaaabbbbbabbbbbaaabbbbbbbaaaabbbbbbbbaaabbbaaaaabbaaabaaabaaaa + abbbaabbaaabaaabbbbbbaaaaaaaaaabbbbbbaaaaabbaabbbbaaaaaabbbbbbbbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbaabaabbbbbbbaaaaaaaaaabbbbbbaabbbbaaabbbbaaaaabbbbbbbbbaabbabbabbbbbbbaabbbbbbaab + abbbaabbbbabaabbbbbbbaaaaaaaaaabbbbaaaabaabbaaabbbabaaabbbbbbbbaaabbbaaabbbbbbbaabbabbbaab + abbbaabbbbbbaabbbbbbbaaaaaabaaabbbbaaaabbbbbaaabbbbbaaabbbbbbbbaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaaaaaabaaabbbaaaaabbbbaaaabbbbbaaabbbbabbbbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaaaaaabaabbbaaaaaaabbbbbaabbbbaaaabbbbbbbbbbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaabbbaaababbbaaaaaaabbbbaaaaaaaaabbbaaaabbbbaaaabbbbaabbbbbbbbbaabbbaaaaaabaaabbaab + abbbaabbbbbbaaabbbbbaaaaaaabbbbaaaaaaaaabbbbaaaaabbaaabbbbbaabbbbbbbbbaaabaaaaaaabaaaabaab + abbaabbbbbbbaaabbbbbaaaaaaabbbaaaaaabaaabbbbbaaaabbaaabbbbbaabbbbbbbbbaaabbbabbaabbbbbbbba + bbbaabbbbbbbaabbbbbbaaaaaabbaaaababbbaaabbbaaaaaabbaaaabbbaaabbbbabbbbabbbbbbbbaabbbbbbbaa + bbbaabbbbbbbaabbbbbbaaaaaaaaaaaaaaabbaaaaabbbaaaabaaaaaaaaaabbbbbbbbbbabbbbbbbbaabbbbbbbba + bbbaabbabbbbbbbbbbbbbaaaaaaaaaaaaabbbaaabbbabbaaaabaaaaaaaaabbbbbbbbbbabbbbbbbbaabbbbbbbba + abbbaaabbaabbbbbabbbbaaaaaaaaaaaaabbbaaaabbbaaaaaaaaaabaaaaabbbbbbbbbaabbbbbbbbbabbbbbbaba + abbbaabbbbbbbbbaabbbbbaaaaaaaaaaaaabbaaaabbabaabaaaaaaaaaaaabbbbbbbbbbabbbbbbbbbabbbbbaabb + abbbbbbbbbabbbbbbabbbbaaaaaabaaabbaaaaaaabbbaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbbaabbbbbaaabbbaabbbaaaaaaabbbaababbbaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbabb + abbbbbbbbbbaabbbbabbbbbbbbbbbaaabaaaaaaaaabaaabaabbaaaaaaabbbbbbbbbbbbbbabbbbbbbbbbbbaaaab + bbbbbbbbbbbaabbbbabbbbbbbbbbaaaaaabbaaaaaabaaabaaabaaabbbbbbbbbbbbbbbbbbabbbabbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbaaaaaabaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbaaaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbabbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbabbbbbbbaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbaaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaaaabbbaaabaaaabbaabbbbaabbbbba + bbbbbababbbbabaaaabbbabbbaabaaaaaaaaaaaabbaabbbbbbaabaaabbaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbbbabbbbaaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaaabbbba + abbbbabbbbbaaaaabbbbaabbaabbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbbaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaabbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaaaaaabaaaaaabbbbbbbbbaaabbbbaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbaaabbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaabbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaaabbaaaaaabbbbbaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaaaabbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbabaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaabbbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabaaabbbbbbabbbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaabbbbbbaaaabbbbabbbbbbbbbbaaaabaabbbbaaabbaaabbbbbbbbbabba + bbabaaabbbbbbbbbaaaaabbaabbaabbaabbbaabaaaaaabbbbbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbbabbbbaaaaaaaaabbbbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + abbbaabbbbbbbbbbbabbaabaaaaabbbbabbbaaaaaaaaaaabbbabbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbbaaaaaaaaaaaabbaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbaaaaaaaaaaabbaabbbbbaaaaabbbbaababbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaababbbbbbbbaaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbabbbbbbbaaabbbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbabbbaabbbbbbbaaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaabbbbbbaaaabbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbabbaaabbbbbbbaaabbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbabbaaabaaabbbaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbbbaaabaaabbbaabbbaaaabbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabbbbaaabbaabbaaabbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaabbbaaabbbbbbaaabbbaabaaabbbbaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbabbbaaabbbbbbaabbbaabbbaabbbaaaaababaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaaaabbbbbaabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbaabbbbbbbbaaaaaaaabbbaabbaabbbbbbbbabbaabbbbbaabaaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaabbbaaaabbbbbbbaaabbabaaabbaabbbbbbaaaaaaabbbbbaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaaabbaabbbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaabbbbaabbbabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbbabbbbbaabbbabbbbbbbbabbaaabbbaaaaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaaabaaabbbbaabbaabbbbbbbaabbbbaabbaaabbbbbbaabbbaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbbaaabbaaabbbaaabbbbaaabbbaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbbaaaabbaaabbbaaabbbbaaabbaaabbbaabbabbbbbabbbaaaaaaaabba + baaabbbbbaabbbbbbaabbbbaabbbbbbbbabaaaabbaabbbbbbaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaaabaaaabbbabbbbbbbbbbaaaabbaaabbaaabbabbbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabbaaaaabbbbabbbbbbaabbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbbbbbbaaaaaabbaaaabbbbbaaabbbbbbbbaabbaabbbbaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbaaaaaaaabbaaaababbbaaaabbbbbbbbabbaaaabbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabaabbaaaaaaaaaaabbbaaaaabbaaaaaaabbbbbbbbbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbbaaaaaaaaaaabbbbbbaabbbaaaaaaaaabbbbbbbaaaaabbaaaabaabaaabbbaaaabbbba + bbbaabaabbbaaaaaabbbbbaaaaaaaaaaaabbbbaabbbbaaaaaaaaaabbbbbbaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaaabbbbbbaaabbbbbbaaaaabbaaaaabbbbbbbbbbaaaaaaaaaaaabbbbaaaaabbbaaaaabbbbaaaaabbaaabaa + aaabaaabbbbbbaabbbbbbbaaaabbbbaaaaaaaabbbbbaaaaabbbaaaaabbbbaaaabbbbbaaabbbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaabbbaaaaabbbbaaaaabbaabbbaaaaabbbaaaaabbbbaaabbbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaaaaabbbbabaaaabaaabbbaaaabbbbbaaaaabbbbaaaaaaabbaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbaaaaabbbbbbaaaabbbbaabaaaabbbaaaaaaabbbbaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbaaaaabbbbbbaaaabbaabbbaaaabbaaabaaaabbbbaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaaaaabbbbaaaaaaaabbbabaaabbaababaaaabbbbaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbaaaaabbbbabaaaabbaaabbaaaababbbbaaaabbbbaaaaabbaaaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbaaaaabbbbaaaaaaaabbbbbaaabbbbbbbaaaabbbbaaaaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbbaaaabbbbabaaaaabbbaabbaaabbabbbbaaaabbbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbbaaaabbbbaaaaaabbbbbbbbaaabbbbabaaaaabbbbaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaaababbaaaaabbbbbbaabaaabbaaabaaaaabbbbaabbbaabbaabbbbbbbaabbabbbaab + abbbaabbbbbbaaabbbbbaaaaaabbbaaaabbbbbbbbbbaaabbbbbbbaaaabbbbaabbbaabbaabbbbbbbaabbbbbbaab + abbbaabaaaaaaaabbbbbaaaaaaabbaaaabbbbbbbaabaaabbbbbbbaaaabbbbbabbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaabbaaabbbbbaaaabbbbbaaaabbbbbbabbbaaabbbbbbbaaaabbbbbbbbaaabbaaaaaaaaaaabaaabaaaa + abbbaabbaaabaaabbbbbaaaabbbaaaaaabbbbbbbaabaaabbaabbbaaabbbbbbbbbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbaabaaabbbbbaaabbbbaaaaaabbbbbbaabbbaabbaaabbaaabbbbbbbbaabbabbabbbbbbbaabbbbbbaab + abbbaabbbbabaaabbbbaaaabbbabaaaaabbbbabbbbbaaabbababaaaabbbbbbbbaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaaabbbbaaaaababbaaaabbbbaaaaaabbaabbaabbbaaaabbbaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbaaaaabaabbaaabbbaaaabbbbaaabbbabbaaaaabbbaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbaaaaabaaaaaaabbaaaaabaabbaaabbabbaaaaabbaaaabbbbbbbaabbbbbbbaabbbbbbaab + abbbaaabbbbbaaabbbbaaaaabbbaabbbaaaaaaaabbbbaaabbabbaaaaaabaababbbbbbbaabbbaaaaaabaaabbaab + abbbaabbbbbbaaabbbbaaaabbbbaabbaaaaaaaabbbbbaabbbbbbaaaaaabaaabbbbbbbbaaabaaaaaaabaaaabaab + abbaabbbbbbbaabbbbbaaaaabbbbabaaaaaaaaabbbbaaaabbbbbaaaaabbaabbbbbbbbbaaabbbabbaabbbbbbbba + bbbaabbbbbbbaabbbbbaaaaabbbaaaaaaaaaaaaabbbbbaabbbbbaaaaabbabbbbbbbbbbabbbbbbbbaabbbbbbbaa + bbbaabbbbbbbaabbbbbaaaaaabbaaaabbbaaaaabbbbbaaaaabbbaaaaabbaabbbbbbbbbbbbbbbbbbaabbbbbbbba + bbbaabbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbaaaaaabbbaaaaabbbabbbbbbbbaabbbbbbbbabbbbbbbbba + abbbaaabbaabbbbbbbbbaaaaaaaaaaaaababaaaabbbbaaaabbbaaaaaabbbbabbbbbbbabbbbbbbbbaabbbbbbaba + abbbaabbbbbbbbbbbbbbaaaaaaaaaaaaaabbaaaabbbabaaabaaaaaaaaaaaaabbbbbbbaabbbbbbbbbabbbbbaabb + abbbbbbbbbabbbbbbbbbaaaaaaabaaabbaaabaabbbbbabaaaaaaaaaaaaaaaabbbbbbbbabbbbbbbbbbbbbbaaabb + abbbbbbbbbbbbbbbabbbbaaaabbbaaabbaaaaaaaabbbabaaaaaaaaaaaaaaaabbbbbbbbbabbbbbbbbbbbbbbaabb + abbbbbbbbbbaabbbbbbbbbbbbbbbaaabbaaaaaaabbbaabaabbaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbbaaab + bbbbbbbbbbbaabbbbbbbbbbbbbbbaaaaaaabaaaaaabaabaaaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbaaaaaaabaabbaaaaaabaaaaaabbbbbbbbbbbbbbbbbbabbbbbbaaabb + bbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbaaaaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbaabbbbaabbbbbbaaaabbbbaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbabbbbbbbbbabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbbbbabbaaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaaaabbbaaabaaaabbbaabbbaabbbbba + bbbbbababbbaaaaaaabbbabbbaabaaaaaaaaaaaabbaabbbbbbaaaaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbabaaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaaabbbba + abbbbabbbbaaaaaabbbbaabbaabbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbabbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbaabaaaaabbbbbaabbbabbbbbbaaaaaabbbbabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbbbbbbaabaaabaaaaaabbbbbbbbbbaabbbabaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaaaaaabbaabbaaabbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaabbbbaaabbbaaabaaabaaabbbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaaaaaabbbbaaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaaaabbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbbbbbaabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabaaabbbbbbbbbbbaabbbbbbabbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaabbbbbbbaabbbbbabbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + bbabaaabbbbbbbbbaaaaabbaabbaabbaabbbaabaaaaabbbbbbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaabbbbaaaaaaaaabbbbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbabbbaaaaaaaaaaabbbbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbbaaaaaaaaaaabbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbaaaaaaaaaaabbaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaabbbbaaaaaaaaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbbbbbbbbbaaabbbaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbabbbaabbbbbbbaaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaabbbbbbaaaabbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbabbaaabbbbbbaaaabbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbbbbaaababbbbbaabbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbbbaaabaaabbaaabbbaaaabbbbaaaabbbabbbabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabbbbaaabaabbbaaabbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaabbbaaabbaabbaaabbbaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbabbbaabbbbbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaaabbbbbbaabbaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbaabbbbbbbbaaaaaaaabbbbbbbaaabbbbbbbabbaabbbbbaabbaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbaabbbbbaaabbaabbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaabbbaabbbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaababbaabbbabbbbbbbbaabaaabbbbaaabbbaaabbbbbbaabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbaaabbbbaabbbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaaabaaabbbbaabbaabbbbbbaabbbbbaabbaaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbaaaabbbaabbbaaabbbbaaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbbaaaabbbaaabbaaabbbbaaabbaaabbbaabbaabbbbabbbaaaaaaabbba + aaabbbbbbaabbbbbbaabbbbaabbbbbbbbabaaaabbbaabbbaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaabbaaaabbbbbbbbbbbabbaaaabbaaabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabaaaabbabbabbbbbbbaabbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaabbbbbbaaabbbbbbbaaaaaaabbaaaabbbbaabbbbbbabbbaabbaabbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbaaaaaaaabbaaaababbaaaabbbbbbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbbbbbaaaaaaaaaabbaaaaaabbaaaaabbbbbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbbbaaaaaaaaaaabbbbaaaabbbaaaaaaabbbbbbbbbaaaaabbaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbbaaaaaaaaaaabbbbbaaabbbaaaaaaaaabbbbbbbaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaaabbaaaabbbbbbbbbbbaaaaaaaaaabbbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaaabbbbbbaabbbbbbaaaaabbbbaaaaaaabbbbbbaaaaaaaaaaaabbbbbaaaabbbbbaaabbbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaaabbaaaaabbbbaaaaabbaabbbbaaaaabbaaaaabbbbbaaabbbbbbbaabbbbbbaabbbbbbaabb + bbbbaaabbbbbbaabbbbbbaaaaabbbbaaaaaaaabaabaaaaaabbbaaaaabbbbaaaaaaaabbaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbbaaaabbbbbbaaaaabbaabbbbaaabbbbaaaaabbbbbaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbaaaabbbbbbbaaaaaabbbaaaaaabbaaaaaaabbbbbaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbaaaaabbbbbaaaaaabbbaabbbaaabaaaaaaaabbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbaaaaabbbbaaaaaaabaabbbaaaaabababaaaabbbbaaaaaabbaaaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaaaabbbbaaaaaabbbaabbbaaaaabbbaaaabbbbbaaaaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbaaaaabbbbbaaaaabbaabbbbaaaaabbbbaaaabbbbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaaabbbbbaaaabbbbbbaabbaaababbbaaaabbbbbaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaaababbaaaaabbbbbabbbaaaaaaabbaaaabbbbaaabbbaabbaabbbbbbbaabbabbbaab + aabbaabbbbbbaaabbbbaaaaabaabbaaaabbbbbbbaaaaaabaaabbaaaabbbbaaabbbaabbaabbbbbbbaabbbbbbaab + abbbaabaaaaaaaabbbbaaaaabaabbaaaabbbbbbaabbbaababbbbaaaabbbbbaabbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbbaaaabbaabbaaabbbbbbbbbabaaabaabbbaaaabbbbaaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbabbaabbbbbaaaabbaabbaaabbbbbbaaabbbaabaabbbaaaabbbbaaabbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbaabaabbbbbaaaabbaabbaaabbbbbbbbbaaaaabaaabaaaaabbbbaabbaabbaababbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbaaaabbabbbaaabbbbaabaabbbaaaaaabaaaabbbbbbbbbaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbaaaaababbaaaaabbbaaaabbbbaaabaabbaaaabbbbbbbbbabbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaabbbbaaaaabbbaaabbaabbaabbabbaaaaabbbbbbbbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaabbbbaaaaabbaaaaabbbbbaabbabbaaaaabbbbbbbbbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaaabaabbbbaaaaabbbababbbbaaaaaabbbbbaabbabbaaaaabbbbbbaaabbbbbaaabbaaaaaaaaaaabaab + abbbabbbaabaaabbbbaaaabbbaababbaaaaaaaababaaaabbabbabaaaabbbbaaaabbbbbaaaabaabaaaaaaaabaab + abbaabbbbbbbaabbbaaaaabbbabbbbbaaaaaaaabbbbbaabbbbbabaaaabbbaaaaabbbbbaaabbaabbaabbbbbbbba + bbbaabbbbbbbaabbbaaaaaaabbbbaaaaaaaaaaaaaabbaaabbbbabaaaabbaaaaabbbbbbabbbbabbbaabbbbbbbaa + bbbaabbbbbbbabbbbbaaaaaaaabbaaabaaaaaaabbbbaaaaabbbaabaaaaaaaaaaabbbbbbbbbbabbbaababbbbbba + bbbabbbbbbbbabbbbbaaaaaaaaabaaabaaaaaaabbbbbbaaabbbabbbaaabbbaaaabbbbbabbbbabbbabbbbbbbbba + abbbbbbbbabbbbbbbbaaaaaaaaaaaabbbabbaaaababbaaaabbbaaaaaaabbbaababbbbbabbbbabbbaabbbbbbaba + abbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaabbbbbbaaabbaaaaaaaabbbaabbbbbbbbbbbbabbbbabbbbbaabb + abbbbbbbbbabbbbbbbbaaaaaaabaaaabbbbbaaabbbbaabaabbaaaaaaaabbbbaabbbbbbabbbbabbbbbbbbbbaabb + abbbbbbbbbbbbbbbbbbbaaaaabbaaaabbaabbaaaabbbabaabbaaaaaaaaabbbabbbbbbbabbbbbbbbbbbbbbbbabb + abbbbbbbbbbaabbbbbbbbbbbbbbaaaabbaaabaaabbbaabbaabaaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbaaab + bbbbbbbbbbbaabbbbbbbbbbbbbbaaaaabbbaabaaabbbabbaabaaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbaaaa + abbbabbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaaaaabbaabbaaaaaaaaaaaaaaaaabbbbbbbbbbaabbbbbbbbbaaabb + bbbbabbbbbbbbbbbbbbbabbbbbbaaaabbbaaaaaaabbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbabbbbbbbbbbbbbabbbbbbaaaabbbbaaaaabbbbbbbaaaaabaaaababbbbbbbbbbbbbaabbbbbbbbbbbaaabb + bbbbaaabbbbbbbabbbbbabbbbbbaaaabbbbaaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbaabbbbbbbbabbbbbbbbbbbbaaaabbbbbaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbaaabbbbbbbabbbbbbbbbbbbaaaabbbbbaaaabbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbabbbbbbbbababbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbbaaabbbba + abbbbbbbbbbbabbaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaaaaabbaaabaaaabbbaabbbaabbbbba + bbbbbababbabaaaaaabbbabbbaabaaaaaaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbaaaaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaaabbbba + abbbbaabbbaaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbabbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbaaaaaabaaabbaabbbbbbbbaaabaaabaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaaabbbaaabaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaabbaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaabaaabbaabbaaabbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaabbbbaaabbbaaabaaabaaabbabbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaaaaaabbbbaaabbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbaaaaabbbbbbaaabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaaabbbbbbbbbaaaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaabbbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbbbbbaabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbabbbbbbbbaaaaaaabbbbbaabaaabbbbbbbbbbbaabbbbbbabbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbaaaabbbbbbbbbaaaaabaabbbbaaaaabbbbbbbaabbbbbabbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + bbabaaabbbbbbbbbaaaaabbaabbaabbaabbbaabaaaaabbbbbbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaabbbbaaaaaaaabbbbbbbbbbbbbaaaaabaabbbabbbaaabbbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbabbbaaaaaaaaaaabbbabbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbbababbaabbbbabbbaaaaaaaaaaabbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbaaaaaaaaaabbbaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbaabbbbaaaaaaaaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbbbbbbbbaaaabbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaabbaabbbbbbbaaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaabbbbbbaaabbbbbaabbaaaaaabbbabbbbaabbaaaaabbbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbbbbaaabbbbbbaaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbbbbaaababbbbaaabbbbbaabbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbbbbaaabaaabbaaabbbaaaabbbbaaaabbaabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabbbbaaabaaabbaaabbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabaabaabbbaaabbaabbaabbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbabbbaabbbbbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaaabbbbbbaabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbaaabbbbbbbabaaabbbbbaabaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbaabbbbbaaabbabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaabbbaaabbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaababbaaabbabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbaabbbbbaaabbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaaabaaabbbbaabbaabbbbbbaabbbbbaaabaaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbaaaabbbaaabbaaabbbbaaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbabbbbbbbaaaabbbaaabbaaabbbbaaabbaaabbbaabbaabbbbabbbaaaaaaabbba + aaabbbbbbaabbbbbbaabbbbabbbbbbbbbbbaaaabbbaabbbbaaabbaaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaabbaaaabbbbbbbbbbbabaaaaabbaaabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabaaaabbbbbabbbbbbbaabbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbbbbbaaaaaaabaaaaabbbbaabbbbbaabbbaabbaabbbbaabaabbbaabbbbbbaabbbbba + abaabbbaaaaabbbbaaaabbbbbaaaaaaaaabbaaabbabbaaaabbbbbbbaaabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaababbbaaaaaaaaaabbbaaaaaabbaaaaabbbbbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbbbaaaaaaaaaaabbbbbaaabbbaaaaaabbbbbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbbaaaaabaaaaabbbbbaabbbbaaaaaaaabbbbbbbbaaaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaaabaaaaabbbbbbbbbbbaaaaaaaaabbbbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaaabbbbbbaabbbbbbaaaaabbbbaaaaaaabbbbbbaaaaaaaaaaaabbbbbaaaabbbbbaaabbbbbaaaabbbbaaaba + abbbaabaaaaaaaaaaabbbaaaaabbbbbaaaabbaabbbbaaaaaabaaaaabbbbbaaabbbbbbbaabbbbbbaabbbbbbaabb + bbbbaaabbbbbbaabbbbbaaaaabbbbaaaaaaaaabaabaaaaaaabbaaaabbbbbaaaaaaaabbaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbaaaaabbbbaaaaaaabbaabbbbaaaabbbaaaabbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaabbbbaaaaaaababbbaaaaaabaabaaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaabbbaaaaaaabbbaabbbaaabaaaaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbaaaaaabbbaaaaaaabaabbbaaaaabaabaaaabbbbbaaaaaabbaaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbaaaaaabbbaaaaaaaabbbaabbaaaaabbaaaabbbbbbaaaaabbaaaabbbbbbaaabbabbaabb + abbbaabbbbbbaaabbbbbaaaabbbbaaaabbbbbbaabbbbaaaaaabbaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaabbbbaaaabbbbbbbbaaabaaaaaabbaaabbbbbaaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaababbaaaabbbbbbaabbbbaaaaabbaaaabbbbbaaabbbaabbaabbbbbbaaabbabbbaab + aabbaabbbbbbaaabbbbaaaaabaabbaabbbbbbbbbbaabaaaaabbaaaabbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabaaaaaaaabbbbaaaabaaabbaabbbbbbbaaabbbaababbbaaaabbbbbbaabbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaaabaaabbbbaaaabaaabbaabbbbbbaabbaaaaaaaabbaaaabbbbbbaabbaaabbbaaaaaaaaaabaaabaaaa + bbbbaabbbabbaabbbbbaaaabaaaaaaabbbbbbbaaabbbaaaaabbaaaabbbbbaaabbaaaabbabbbbbbbabbbbbbbaab + bbbbaabbbaabaabbbbaaaabbaaaaaaabbbbbaaabbbbbaaaaabbaaaabbbbbaaabaabbabbabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaabbbbaaaabbbbaaabbaabbaaaaabbaaaabbbbbaabbaabbbaaabbbbbbaaabbaabbaab + abbbaabbbbbbaabbbbaaaaabbbbaaaabbbaaaaaabbbaaabaabbaaaabbbbbbbbbaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaaabbbaaaabbbaaaabbaabbaabbabbaaaabbbbbbbbbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaaababaaaabbaaaaabaabbbaaaaabaaaaabbbbbbbbbbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaaabaabbbaaaaabbbabaaaabbaaaaabbbbbbaabaabaaaaabbabbbbaabbbbbaaaabbaaaaaaaaaabbaab + abbaabbbaabbabbbbaaaabbbbabbbbbabaaaaabbaaabaababbaaaaaabbbbbaaaabbbbbaaaabaabaaaaaaaabaab + bbbaabbbbbbbabbbbaaaabbbbabbbbbabaaaaaabbbbbaabbbbaabaaabbbbaaaabbbbbbaaabbaabbaabbbbbbbba + bbbaabbbbbbbabbbbaaaaaabbbbbbbaaaaaaaaaabbbbaabbbbbbbaaabbbaaaaabbbbbbabbbbabbbaabbbbbbbaa + bbbabbbbbbbbabbbbaaaaaababbabaaaaaaaaaabbabbaaabbbaabaaabbbaaaaabbbbbbbbbbbabbbabbabbbbbba + bbbabbbbbbbbabbbbaaaaaaababaaabbaabaaaabbbbbaaaabbbabaaaaaaaaaaabbbbbbbbbbbabbbabbbbbbbbba + abbbabbabaabbbbbbbaaaaaaaaaaaaabaaaaaabbabbaaaabbbbabbaaabbbaaaabbbbbbbbbbbabbbaabbbbbbaba + abbbbbbaabbbbbbbbbaaaaaaaaaaaaabaaabaaabbbbbaaaabbbaaaaaabbbaabbbbbbbabbbbbabbbbabbbbbaabb + bbbbbbbaabbbbbbbbbbaaaaaaaaaaaabaabbaaabbbbaaaaabbaaaaaaabbbaaabbbbbbaabbbbabbbbbabbbbaabb + abbbbbbabbbbbbbbbbbaaaaabbaaaabbbaabaaabaababbaabbaaaaaaabbbbaabbbbbbabbbbbabbbbbbbbbbbabb + abbbbbbbabbaabbbbbbbbbbbbbaaaaabbaaabaabbababbaabaaaaaaaaabbbbabbbbbbbbbbbbabbbbbbbbbbaaab + bbbbbbbbbbbbabbbbbbbbbbbbbaaaaabbbaabbaaaababbbabbaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaabaaaababbbaabaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbaaabb + bbbbbbbbbbbbbabbbbbbabbbbbaaaabbbbaaaaaaabbbbbbaabaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbabbbbbbbbbbbbbbbabbbbbaaaabbbbaaaaaabbbbbabaaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbabbbbbbbbbbbbaaaaabbbbbaaaabbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbabbbbbbbbabaabaabaaaaabaabaaabbbaaaaaaaaaaabaaabbbbaaaaabbbbbbbbaabbbbbbbbaaaabbbba + abbbbbbbbbbbabbaaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaabaaaabbbbbbbaaabbbbba + bbbbbababbabaaaaaabbbabbbaaaaaaaaaaaaaaabbaaabbbbbaaaaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbaaaaaaabbbbabbbbbbbbbbaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaaabbbaaabbbba + abbbbaabbbabaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbbaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbaaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbaaaaaabaaabbaabbbbabbbaaabaaabaaaaaabbbbbbbbbbaabbbbbaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaaabbbaabbaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbabbaaabbaabbaaabbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaabbbbbaabbbaaabaaabaaabbabbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaabbbaaaaaabbbbaaabbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbbaaaabbbbbbaaaabbbbaabbaaabbaaaabbbbbbbaaabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaababbbbbbbaaabbbaaabbbaabbaaaabbbbbbbbbaaaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbaaaabbbbbbbbbbaabbbbbbbbbbaaaabbaabbaaabbbbaaaabbbbaabbbba + abbbaabbabbbbbbbbaaaaaaabbbbbaabaaabbbbbbbbbbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbaaaaabbbbbbbaabbbbbabbbbbbabbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaaabbaabbaabbaabbbaabaaaaabbbbbbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbaabbbbaaaaaaaabbbbbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbabbbaaaaaaaaaabbbbbbbbbbbbaaaaabbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbabbbaaaaaaaaaaabbbaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbaaaaaaaaaabbbaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbaabbbbaaaaaaaaaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbbbbbbbbaaaabbaaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + aaaaaaaaabbbbaaaaaaaaaaabbbaabbbaabbaabbbbbbbaaabbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaabbbbbbaaabbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbbbbaaabbbbbbaaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbbbbaaababbbbaaabbbbbaabbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbbbaaabaaabbaaabbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabbbbaaabaaabbaaabbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabaabaabbbaaabbaabbaabbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbabbbaabbbbbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaaabbbbbbaabbaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbaaabbbbbbbabaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbaaabbbbaaabbabbbbbbbaaaaaaabbbbbaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaabbbaaabbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaabbbbaaabbabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbaaabbbbaaabbabbbbbbbbabbaaabbbaababbbaaaaaaabbbabbbbaba + bbaabbaaaaaaaaaabaabbbbbabbaabbbbbbaabbbbbaaabaaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbaaaabbbaaabbaaabbbbaaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbabbbbbbbaaaabbbaaabbaaabbbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + aaabbbbbbaabbbbbbaabbbbabbbbbbbbbabaaaabbbaabbbbaaabbaaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaabbaaaabbbbbbbbbbbabaaaaabbaaabbaaabbaabbbbaabbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabaaaabbbbbabbbbbaaaabbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbbbbbaaaaaaabaaaaabbbbaabbbbbaabbbaabbaabbbbaabaabbbaabbbbbbaabbbbba + abaabbbaaaaabbbbaaaabbbbbaaaaaaaaabbaaabbabbaaaabbbbbbbaaabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaababbbaaaaaaaaaabbbaaaaaabbaaaaabbbbbbbbabbaaaabaaaababbaaabbbbbaaaabbbba + bbbaabaabbbaabbaabbbbbaaaaaaaaaaabbbbbaaabbbaaaaaaabbbbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbbaaaaabaaaaabbbbbaabbbbaaaaaaaabbbbbbbbaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaaabaaaaabbbbbbbbbbbaaaaaaaaabbbbbbaaaaaabbbbaaaabbbbaaaaabbaabbaa + aaabaabbbbbbbaabbbbbbaaaaabbbbaaaaaaabbbbbbaaaaaaaaaaaabbbbbaaaabbbbbaaaabbbbaaaabbbbaaaba + abbbaaaaaaaaaaaaaabbbaaaaabbbbbaaaabbaabbbbaaaaaabaaaaabbbbbaaabbbbbbbaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbaaaaabbbbbaaaaaaaabaabaaaaaaabbaaaabbbbbaaaaaaaaabaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbaaaaabbbbbaaaaaabbaabbbbaaaabbaaaaabbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaabbbbaaaaaaababbbaaaaaabaabaaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaabbbbaaaaaabbbaabbbaaabaabaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbaaaaaabbbaaaaaaabaabbbaaaaabaabaaaabbbbbbaaaaabbaaaabbbbbbaabbbabbaabb + bbbbaabbbbbbaaabbbbbaaaaaabbbaaaaaaaabbbaabbaaaaaabaaaabbbbbbaaaaabbabaabbbbbbaabbbabbaabb + abbbaabbbbbbaaabbbbbaaaabbbbaaaabbbbbbaabbbbaaaaaabaaaabbbbbaaabbaaaabaabbbbbbbaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaabbbbaaaabbbbbbbbaaabaaaaaabbaaabbbbbaaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaababbaaaabbbbbbaabbbbaaaaabbaaaabbbbbaaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbbaaaaabaabbaabbbbbbbbbbaabaaaaabbaaaabbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabaaaaaaaabbbbaaaabaaabbaabbbbbbbaaabbbaababbbaaaabbbbbbaabbbaabbaabbbbbbaaabbbbbbaaa + bbbbaabaaabbaaabbbbaaaabaaabbaabbbbbbaabbaaaaaaaabbaaaabbbbbaaabbaaabbaaaaaaaaaaaaaaabaaaa + bbbbaabbbabbaabbbbbaaaabaaaaaaabbbbbbbaaabbbaaaaabbaaaabbbbbaaabbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbbbaabbbbaaaabbaaaaaaabbbbbaaabbbbbaaaaabbaaaabbbbbaaabaabbabbabbbbbbbaabbbabbaab + abbbaabbbbabaabbbbaaaaabaabaaaabbbbaaabbaabbaaaaabbaaaabbbbbaaabaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbaaaaabbbbaaaabbbaaaaaabbbaaaaaabbaaaabbbbbbbbbaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaaabbbaaaabbbaaaabbaabbaabaabaaaaabbbbbbbbbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaaabbbaaaabbaaaaabaabbbaaaabbaaaaabbbbbbbbbbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbaabbbaaaaabbbabaaaabbaaaaabbbbbbaaaabbaaaaabbabbbbaabbbbbbaaabbaaaaaaaaaabbaab + abbaabbbaabbabbbbaaaabbbbabbbbbbbaaaaabbaaabaababbaaaaaabbbbbaaabbbbbbaaaabaabaaaaaaabbaab + bbbaabbbbbbbabbbbaaaabbbbabbbbbabaaaaaabbbbbaabbbbbbaaaabbbbaaaabbbbbbaaabbaabaaaabbbbbaba + bbbabbbbbbbbabbbbaaaaaabbbbbbbaaaaaaaaaabbbbaabbbbabbaaabbbaaaabbbbbbbaabbbabbaaabbbbbbbaa + bbbabbbbbbbbabbbbaaaaaababbbbaaaaaaaaaabbabbaaabbbaaaaaabbbaaaabbbbbbbabbbbbbbbaabbbbbbbba + bbbabbbbbbbbabbbbaaaaaaababaaabbaabaaaabbbbbaaaabbaabaaaaaaaaaaabbbbbbabbbbbbbaaabbbbbbbba + abbbababbaabbbbbbbaaaaaaaaaaaaabaaabaabbabbaaaabbbaabaaaabbbaaaabbbbbbbbbbbbbbbaabbbbbbabb + abbbbbbaabbbbbbbbbaaaaaaaaaaaaabaaabaaabbbbbaaabbbaabaaaabbbaabbbbbbbabbbbbabbbbbbbbbbaabb + bbbbbbbaabbbbbbbbbbaaaaaaaaaaaabaaabaaabbbbaaaaabbaaaaaaabbbbaabbbbbbabbbbbabbbbbbabbbaabb + abbbbbbaabbbbbbbbbbaaaaabbaaaabbbaabbaabaababbaabaaaaaaaabbbbaabbbbbbabbbbbabbbbbbbbbbbabb + abbbbbbbbbbaabbbbbbbbbbbbbaaaaabbaaabaabbababbaabaaabaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbaaabaaaababbaabaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbaaabbbbbbbbbbbbaaaabbbaaaabaaaababbbaabaaaaaaaaaaaaabbbbbbbbbbbabbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbbabbbbbaaaabbbbaaaaaaabbbbbbaabaaaaaaaaaaaaabbbbbbbbbbbbbbbabbbbbbbaabb + bbbbbbbbbbbbaabbbbbbabbbbbaaaabbbbaaaaaabbbbbabaaaaaaaaaaaaaabbbbbbbbbbbabbbaaabbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbabbbbbbbbabaabaabaaaabbbabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaaabbbba + abbbbbbbbbbbabbaaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaabaaaabbbabbbaaabbbbba + bbbbbababbabaaaaaabbbabbbaaaaaabbaaaaaaabbaaabbbbbaaaaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbaaaaaaabbbbabbbbbbbbaaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaaabbbaabbbbba + abbbbaabbbabaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbbaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaabbbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbaaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbaaaaaabaaabbaabbbbabbbaaabaaabaaaaaabbbbbbbbbbaabbbbaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaaabbbaabbaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbabbaaabbaabbaaabbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaabbbbbaabbbaaabaaabaaabbabbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaabbbaaaaaabbbbaaabbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbbaaaabbbbbbaaaabbbbaabbaaabbaaaabbbbbbbababbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaababbbbbbbaaabbbaaabbbaabbaaaabbbbbbbbbaaaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbaaabbbbbbbbbbbaabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbabbbbbbbbaaaaaaabbbbbaababbbbbbbbbbbbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaaabbaabbaabbaabbbaabaaaaaabbbbbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababaaabbbbbbbbbaaababbbaabaabbbbbbbaaaaaaaaaabbbbbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbabbbaaaaaaaaaaabbbbbbbbbbbaaaaabbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbbbbbaaaaaaaaaaabbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbaaaaaaaaaabbbaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbaaabbbbbbbbbaaabbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + bbbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbbbbbbbbbaabbbbaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbaabbbbbbbabbbbbbbaaabbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaabbbbbbaaabbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbabbaaabbbbbbaaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbbbbaaabaabbbaaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbbbaaaabaabbaabbbbaaaabbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabbbbaaabbaabbaabbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbabaabaabbbaaabbbbbbaabbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbabbbaaabbbbbbaabbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaaaabbbbbaabbaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbaaabbbbaabbbaaabbbbbaabaaaabbbbaaaabbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbaaabbbbaaabaabbbbbbbaaaaaaabbbbbaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaabbbaaabbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaabbbbaaabbabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbaaabbbbaaabbabbbbbbbbabbaaabbbaaaaabbaaaaaaabbbabbbbaba + bbaabbaaaaaaaaaaaaabbbbbabbaabbbbbbaabbbbbaaabaaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbaabbbbbbaaaaabbaaabbaaabbbbaaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbaabbbbbbbbabaaaabbbaabbbaaabbbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaabbaaaabbbaabbbbbaabbaaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabaaaabbbbbabbbbbabaaaaabbaaabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbbbbbbaaaaaabaaaabbbbbaabbbbbbaabbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbbbbaaaaaaaabbaaaababbaaabbbbbabbbaabbaabbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaababbbbaaaaaaaaaabbaaaababbaaaaabbbbbbaaabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbbaaaaaaaaaaaabbbabaaabbbaaaaaabbbbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbbaaaaaaaaaaaabbbbbaaabbbaaaaaaaabbbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaaabaaaaabbbbbaabbbbaaaaaaaaabbbbbbbaaaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaaaabbaaaaaaaabbbbbbbbaaaaaaaaaabbbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbbbaaaabbbbbaaaaaaaaabbbbaaaaaaaaaaaabbbbbaaaabbbbbaaaabbbbaaaabbbbaaaba + abbbaabaaaaaaaaaaabbaaaaabbbbbbaaaaaabaaabaaaaaaabaaaaabbbbbaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbaaaaabbbbbbaaaaabbaabbbbaaaaabbaaaabbbbbaaaaaaaabbaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbaaaaabbbbbaaaaaaaabbbaaaaaabbbaaaaabbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaabbbbbaaaaaabbbaabbbaaabbbbaaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaabbbbaaaaaabaabbbaaaaaaaabaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaabbbbaaaaaaabbbaaabbaaaaaabaaaabbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaaabbbbbaaaaabbbaaaaaaaabbabbbbaaaaaabbaaaabbbbbbaaaaabbaaaabbbbbbaaabbabbbabb + bbbbaabbbbbbaaabbbbbaaaabbaaaaaabbbaabbbaaabaaaababaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaabbaaaabbbbbaabaabbbaaaaaabbaaaabbbbbaaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaabaaaabbbbbbaabbbbaaaaabaabbaaaabbbbbaaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbbaaaabbaaaabbbbbbaabbaabbbaabaabbaaaabbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + abbbaaaaaaaaaaabbbbaaaabaaaaabbbbbbaaabbbabaaabaabbaaaabbbbbbabbbbaabbaabbbbbbaaabbbbbbaab + bbbbaabaaabbaaabbbbaaaabaaaaabbbbbbaabbaabbaaabbbbbaaaabbbbbaaabbaaabbaaaaaaabaaabaaabaaaa + bbbbaabbbabbaabbbbbaaaabaaaaabbbbbbbaaabbbbaaaaabbbaaaabbbbbaabbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbbbaabbbbaaaabbaaaaabbbbbbaabbbaabbaaaaabbaaaabbbbbaabbaabbabbabbbbbbbaabbbabbaab + abbbaabbbbabaabbbbaaaabbaaaaabbbbbaaaaaabbbaaaaaabbaaaabbbbbbabbaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbaaaaabbaaaaabbbaaaaabbaabbaaaabbaaaaabbbbbbbbbaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaaabbaaaabbbaaaaabaabbbaababbaaaaabbbbbbbbbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaaabaaaabbbaaaaaabbbbbaaaaabbaaaaaabbbaabbbbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbaabbbaaaabbbbaaaaabaaaaaaabaaabaaaaabbaaaaabbbaaabbbbbbbbbaaabbaaaaaaaaaabbaab + abbaabbbbabbabbbbaaaabbbaaaaaabbaabbaaabbbbbaaaabbbbaaabbbaaabbbbbabbbaaaabaabaaaaaaabbaab + bbbaabbbbbbbabbbbaaaabbbaaabbbbaaabbaaaaaabaaabbbbabbaaabaaaabbbbbabbbaaabbaabaaaabbbbbaba + bbbabbbbbbbbabbbbaaaaabaaaabbaaaaabbaaabbbbaaabbbbaaaaabaaaaabbbbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbabbbbaaaaaabaaabaaaaaabbaaabbbbaaaabbbaaaaabbbaaabbbbbbbbbabbbbbbbbaabbbbbbbba + bbbabbbbbbbbabbbbbaaaaabbaaaaaaaaabbaabbbabaaaabbbaaaaabbbababbbbbbbbbabbbbbbbbabbbbbbbbba + abbbababbaabbbbbbbaaaaaaaaaaaaaaaabaaaaabbbabaabbbaaaabbbbabbbbbbbbbbbbbbbbbbbaabbbbbbbabb + abbbbbbaabbbbbbbbbbaaaaaaaaaaaaaabbbaaaabababaabbaaaaabbbbaabbbbbbbbbbbbbbbabbbaabbbbbaabb + bbbbbbbaabbbbbbbbbbaaaaaaaaaaabbbbabaaabbbbabaabbaaaaabbbbaabbbbbbbbbabbbbbabbbbabbbbbaabb + abbbbbbaabbbbbbbbbbbaaaabbaaabbbbaaabbaababbbaabbaaaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbabb + abbbbbbbbbbaabbbbbbbbbbbbbaaaabbbaaabbaaaababbaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbabbbbbbbbbbbbbaaaabbbaaaabaabababbaabaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbaabbbbbbbbbbbbaaaabbbbaaaaaaababbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbbbbaaaabbbbbaaaaaabbbbbbaaaaaaaaaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbbbbaaaaabbbbaaaaaabbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbaaabb + bbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbabbbbbbbbbbaabaabaaaabbbabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaaabbbba + abbbbbbbbbbbabbaaabbbabbaaaaaaabbaaabbaaaaaaaabbaaaaaabbbbaaaaaabbaaabaaaabbaabbbaaabbbbba + bbbbbababbabaaaaaabbbabbbaaaaaabbaaaaaaabbaaabbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbaaaaaaabbbbabbbbbbbbaaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbabaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbbaaaabbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbaaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbaaaaaabaaabbaabbbbabbbaaabaaabaaaaaabbbbbbbbbbaabbbbaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaabbaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbabbaaabbaabbaaabbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaaabbbbbaabbbaaabaabbaaabbabbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaabbbaaaaabbbbbbaabbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbbaaaabbbbbbaaaabbbbaabbaaabbaaaabbbbbbbbbabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbaaaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbaabbbbbbbbbbbbaabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaaababbbbbbbbaaaaaaabbbbbaabbbbbbabaaaabbbbabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbaaaabbbaaabaaaaaabbbbbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaaabbaabbaabbabbbbaaaaaaaaaabbbbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaabaabbbbbbaaaaaaaaaaabbabbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbaabaabaaaaabbbbbbbaaaaaaaaaaabbbabbbbbbbbaaaaabbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbbababbaabbbbbbbaaaaaaaaaaaabbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbbbabbbbbbbbbaaabbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbbaabbbbbbbbbaabbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + bbbaaaaaabbbbaaaaabbbbaabbbabbbbbaababbbbbbbaabbbbaaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbaabbbbaababbbbbbbaabbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbbaabaabbbbbbaabbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbbbbaaabaaabbaabbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabbabbbabbbbbbaaaabaaababbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbabaaaabaabbaabbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabbabaaabbbbbbaabbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbabaabbbbaaaaabbbbbaabbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbbbbaaaaabbbbaabbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbaaaaabbbbbbbbaaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbaaabbbbaabbaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbaaaaabbaaabaabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaabbbaabbaabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaabbbbaabbbabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbaaabbbbaabbbabbbbbbbbabbaaabbbaaaaabbaaaaaaabbbabbbbbbb + bbaabbaaaaaaaaaaaaabbbbbabbaabbbbabaaaaabbaabbaaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbaabbabbbbbabaaaabbaaabbbaaabbbbaaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbabbbbbbbbaabaaaabbbaabbbbaabbbbaaabbaaabbbaabbabbbbbabbbaaaaaaaabaa + aaabbbbbbaabbbbbbaabbbbabbbbbbaaaabaaaabbbaaabbbbbbbbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbbbaaaaaabbaaabbbbbaaabbbbbbaaaabbaaabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbbbbbaaaaaaabbaaaababbaaaabbbbbbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbbbaaaaaaaaabbaaaaaabbaaaaaabbbbbbaabbaabbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaabbbbbaaaaaaaaaaabbbaaaabbbaaaaaaabbbbbaabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbbaaaaaaaaaaaaabbbbbaabbbaaaaaaaabbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbbaaaaaabbaaaaabbbbaabbbbaaaaaaaaaabbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaabbabaaaabbabbbbbbbaaaaaaaaaaabbbbbaaaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaabbbbbbaaaabbbbbaaaaabbabaaaaaabaabbbbaaaaaabaaaaabbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbbaaaaabbbbbbaaaaaaaababaaaaaabbbaaaabbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aabbaabaaaaaaaaaaabbaaaaabbbbbbaaaaabbbaabbaaaaaabaaaaabbbbbaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbaaaaabbbbbbaaaaaaaabbbbaaaaabbaaaaabbbbbaaaaaaaabbaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbaaaaabbbbbabaaaabbbbaabaaaabbbbaaaabbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaaabbbbaaaaaaaaaabbbaaaabaabbaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaabbbbaaaaaaabbbbaabaaababbaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaabbbbaaaaaaabbabbbaaabaabbbaaabbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaaabbbbbaaaaabbbaaaaaaaaabbbbbaaaaaabbbaaaabbbbbbaaaaabbaaaabbbbbbaaabbabbbabb + bbbbaabbbbbbaaabbbbbaaaabbaaaaaaaaaaabbaaabaaaaaaabaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaaaaaaaaabaaaaaabbbbbaaaaabbbaaaabbbbbaaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaaaaaaabbbaaaaabbaaabbaaaabbbaaaabbbbbbaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbbaaaaaaaaabbbbaaaaaaabbbbaaaaabbbaaaabbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + aaabaaaaaaaaaaabbbbaaaaaaaabbbbbaaaaaabbaabaaaaabbbaaaabbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + bbbbaabaaabbaaabbbbaaaaaaabbbbbbbaaaaababbbaaababbbaaaabbbbbaaabbaaabbaaaaaaabaaabaaabaaaa + bbbbaabbbabbaaabbbbaaaaaaabbbbbbaaaaaabbbabaaababbbaaaabbbbbaabbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbbbaaabbbbaaaaaaabbbbbbaaaaaababbbbaabbbbaaaaabbbbbaabbbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbaaaaaaaabbbbbbaaaaaabbbbbaaaabbbaaaaabbbbbaabbaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbaaaaaaaabbbbbbaaaaaabbaabaaaaaabaaaaabbbbbaabbaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaaaaaabbbbbaaaaaaabbbbaaaaaaaaaaaabbbbbbabbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaabbaaaabbbbaaaaaaaabaabaaaaabaaaabababbbbabbbbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaabaabbbbaaabbaaaaabbbaaabaaaabbbbaaabaaaaabbababbbbbbbbbabbbaaabbaabaaaaaaabbaab + abbbabbbbbbbaabbbaaaabbaaaaabbaaaabbaaabbbbbaababaaabbbbabbbbbbbbbaabbaaaabaabaaaaaaabbaab + bbbaabbbbbbbaabbbaaaaabaaaaabbaaaabbaaabaabaaabbbaaabbbbabbbbaabbbabbbaaabbaabaaabbbbbbaba + bbbabbbbbbbbabbbbbaaaaaaaaaabbaaaaabaaabbbbbaabbbaaabbbbabbbbaabbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbabbbbbaaaaaaaabbbbaaaaabaaabbabaaaabbaaabbbbbbbbbaabbbbbbbabbbbabbbaabbbbbbbba + bbbabbbbbbbbabbbbbbaaaaaabbaaaaaaabbaaaaabbaaaabaaabbbabbbbbbaabbbbbbbabbbbabbbabbbbbbbbba + abbbbbbbbabbabbbbbbaaaaaabbaaaaaaaabbaabbabbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbabb + abbbbaaabbbbbbbbbbbaaaaaaaaaaababaabbaabbbbabaaaaaaaabaabbbbbbbbbbbbbbbbbbbabbbaabbbbbaabb + bbbbbbaabbbbbbbbbbbbaaaaaaaaaabbaaaabbaaaabbbaabaaaaaaaabbbbbaabbbbbbbabbbbabbbbabbbbbaabb + abbbbbaabbbbbbbbbbbbbbbbbaaaaabbaaaaababaabbbaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbabb + abbbbbbbbbbaabbbbbbbbbbbbaaaaaabbbaaabababbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaabbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbaaaaaabbbbbaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaabbbabaaabbbaaaaaaabaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaaabbbba + abbbbbbbbbbbbabaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaabbbaaabbbbba + bbbbbabbbabaaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaaaaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbaaaaaaaabbbbabbbbbbbbaaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaaaaabbbaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbbaaaabbbbaaaababbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaabbbbbbbbbaabaaabaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaabbaabbbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbaabbaabbbbaaabbbbbaaaaaaabbaaabaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbaabbabbbbbaaabbbbaaabbbaaabaabbaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaabbbbbbbbbaabbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbbabbbbbbbbbbbabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbabbbbbbbabbbbaaaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbabbbbbbbaaaaaabbbaabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaaababbbbbbbbaaaaaaabbbbbaabbbbaaaaaaaaaabbabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbaaaabbbaaaaaaaaaabbbbbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaaabbaabbaabbbbbbaaaaaaaaaabbabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaabaabbbbbaaaaaaaaaaaabbabbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbaabaabaaaaabbbbbbaaaaaaaaaaaabbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbbababbaabbbbbaabbbbbbbbbaabbbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbbaabbbbbbbbbaabbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbbaabbbbbbbbbaabbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abaaaaaaabbbbaaaaabbbbaabbbabbbbbaabbbbbbbbbaabbbbaaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbbaaaaabbbbbbabbbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbbaaaaaaaaaaaabbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbaaaabaabbaaaabbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbbaaabbbbbbbbabbabbbabbbaabaaaabbaaaabbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaabaaaabbbbaabbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaabbaaaaaaabbbbaabbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbabaabbbbaaaaaaabbbabbbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbbbbbaaaabbbbaabbbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbbaaaabbbbbbabaaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbaaaaabbaabaaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbaaaabbaaaabaabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaabbbaaabbaabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaaabbbaabbbabbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbbb + bbaaaaaabbabaaaaaaabbbbbabaaabbbbabaaaaabbaabbbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaaaaaaabbbbbabbabbbbaabaaaabbaaabbbaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbaaaa + bbabbbbaaaaaabbbbaabbbbaabbbbbbbaabaaaabbaaabbbbbbbbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbbaaabbbbbaabbbbabbbbbbaaaabbaaabbbabaabbbbbbbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbaa + aaabbbbbbaabbbbbbaaabbbabbbbbaaaaabbaaaabaabaaaabbbbbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbbaaaaaaabbaaaabbbbaaaaaabbbbaaabbaaabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbbbaaaaaaaaabbbaaababbaaaaaaaabbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbaaaaaaaaaaabbbabaabbbaaaaaaaaabbbaabbaabbbbaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaabbbbaaaaaaaaaaaabbbbbaabbbaaaaaaaaaabbbabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbbaaaaaaaabbaaabbbbbabbbbaaaaaaaaaaabbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbbaaaaaabbbbaaabbbbbbbbbbaaaaaaaaaaabbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaabbbbbaaaaabaaaabbbaaaabbaaaaabbbbbaaaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaaabbbbaaaaaaabbbbbaaaaabbaaaaabbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbbaaaaabbbbbbaaaaabbbbaabaaaaabbbaaaabbbbbaaaabbbbbaaaabbbbaaaabbbbaaaba + aabbaabaaaaaaaaaaabbaaaaaabbbbbaaaaaaaaabbbaaaabbbbaaaabbbbbaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbaaaaaabbbbbbbaaaabbbbbbaaaaababaaaabbbbbaaaaaaaabbaaaaaaaaaaaaaaaaaabb + bbbbaabbbbbbbaabbbbbaaaaaabbbbbbbaaaabaaaabaaaabbbbaaaabbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaaabbbbbbbaaaabbbbbbaaaababbaaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaabbbabbbbaaaabbbaabaaabbabbaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaaabbbbbbaaaabbbbbbaaabaaabaaaabbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaaabbbbbaaaaaaabbbbbbaaaabbbaabaaaaaabbaaaabbbbbbaaaaabbaaaabbbbbbaaabbabbbabb + bbbbaabbbbbbaaabbbbbaaaabbbbbbbbbbaaaababbbaaaaabbbaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaaaabbbaabbbaaaabbbabaaaaabbbaaaabbbbbbaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaaaaaaaaabbbaaaaaaaabaaaaaaaaaaaabbbbbaaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbbaaaaaaaaaaaabbbbaaabbbbbaaaaaaaaaaaabbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + aaabaabaaaaaaaabbbbaaaaaaaabaaabbbbaaabaaabaaaaabbaaaaabbbbbaabbbbaabbaabbbbbbaaabbbbbbaab + bbbbaabaaabbaaabbbbaaaaaaabbbaaabbbaaabbbbbaaaabbbbaaaabbbbbbabbbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbabbaaabbbbaaaaaaabbbaaabbbaaabbaabaaaabbbbbaaaabbbbaabbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbbbaaabbbbaaaaaabbbbaaabbbaaaabbbbaaaabbbbbbaaabbbbaabbbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbaaaaaabbbbaaaabbaaabbbbbaaaaabbbbbbaabbbbaaaaaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbbaaaaabbbbbaaaabbaaaaaaabaaaaabbbbbbaabbbbaaaaaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaaabbbbbaaaabbbaabbbbbaaaabbbbbbaaabbbbaabaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbaabaabbbbaaaaabbbbbbbaaaabbaaaaaabaaaabbbbbbaaabbbbaababbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaabaabbbbaaaaaabbbbbbaaaabbaaabbbbaaaaabbbbbaaabbbbbaabbbabbbaaabbaaaaaaaaaabbaab + abbbabbbbbbbaabbbbaaaaaabbbbbbaaaabbaaabbbbaaaaabbbbbaaabbbbbaabbbbabbaaabaaaaaaaaaaabbaab + bbbaabbbbbbbaabbbbaaaaababbbbbaaaabbaaabbbbaaaaaabbbbaaabbbbbaabbbbbbbaabbbaabaaabbbbbbaba + bbbabbbbbbbbaabbbbaaaaaaaabbbaaaaaabbaabbbbaaaaaabbbaaabbbbbbaabbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbaabbbbbaaaaaaaabbaaaaaabbaaabbbaaaaaaaaaaaabbbbbbaabbbbbbbabbbbabbbaabbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaaaaabaaaaaaabbaabbbbabaaaaaaaaaabbbbbbaabbbbbbbabbbbabbbabbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaaaaabaaaabaaaabaabbbbabaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbabb + abbbbaaabbbbbbbbbbbbaaaabbaaaabbaaaabbaababbbaabaaaaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbbaabb + bbbbbbaabaaaabbbbbbbaaaabaaaaabbbbaabbaaaabbbaaaaaaaabbbbbbbbaabbbbbbbabbbbabbbbabbbbbaabb + abbbbbaabbbaabbbbbbbbbbbbaaaaaabbbaaabababbbbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbabb + abbbbbbbbbbbbbbbbbbbbbbbaaaabbabbbaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaab + bbbbbbbbbbbbbabbbbbbbbbaaaaabbbbbbaaaaabbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbbaaaabbbbabbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbabbbbbaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbbbaaaabbbbabbbbbaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaabbbabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaaabbbba + abbbbbbbbabbaabaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaabbbaaabbbbba + bbbbbabbbabbaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + abbbbabbbbbaaaaaabbbbabbbbbbbbaaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaaabbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbaaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaaabbbba + abbbbbaaaaaabaaabbaaabbbbbbbbaabaaabaaaaaaabbbbbbbbbaabbbaaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaabbaaabbbbbbbaaabaabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbabbbbabbbbaaabbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbbbbbabbbbbbaabbbbaaabbbaaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbabbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbbbbbabbbabbbbabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbbbbbbaaaaaabbbbaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbabbbbbaaaaaaaaabbaaabbbbbbbbbaaaabbaabbaaabbbbaaaabbbbaabbbba + abbbaaababbbbbbbbaaaaaaabbbbbabbbbbaaaaaaaaabbbabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbaabbbabaaaaaaaaabbbbbbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaaabbaabbaabbaaaaaaaaaaaaaabbabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaabaabbbaaaaaaaaabaaabbaabbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbaabaabaaaaabbbbbaabbbbbbbbbabbbaaabbbbbbbaaaaabbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbbababbaabbbbaaabbbbbbbbbabbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaabbbbbbbbbabbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbaaabbbbbbbbaabbbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabaaabbbaabbbbbbaaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabaaaaaaaabbbbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaabaabaaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbaaabbbbabbbabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaabbbaabaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaaabbaabbbabbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaabbaaaaabaaabaabbbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbabaabbbbbaaababbbaaabbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbaaaaabbbbbbaaaaaabbbaabbbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbaaaaaabbbbbabaaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbaaabaabbaabaaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbaaaabbbaaabbaaabbbbbbaaaaaaabbbbaabbaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbaaaaaabaaabbbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaaabbbaabbbbbbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaabbbbaabaaaabbaaabbbbbbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbaba + bbaabbaaaaaaaaabbaabbbbbabbbbbbaaabaaaabbbaababbbbbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbaaaaaabbbbaabbbbabbbbbbaaaabbaaaabaabbaaabbbbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbbaaabbbbbaabbbbabbbbbaaaaabbaaaabaabbaaaaaabbbbaabbaaabbbaabbabbbbbabbbaaaaaaabbba + aaabbbbbbaabbbbbbaaabbbbbbbaaaaaaabbaaabbaabaaaaaaaabbbbabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbaaaaaaaabbbabaaabbaaaaaaaaabbbabbaaabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbbbaaaaaaaaaaabbbbaabbbaaaaaaaaaabbbabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbaaaaaaaaaaaabbbbbaabbbaaaaaaaaaabbbabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaabbbbaaaaaaabbaaaabbbbbbbbbaaaaaaaaaabbbabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbbaaaaaabbbbaaaabbaabbbbbaaaaabaaaaabbbbbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbbaaaaabbbbbbaaaabbaabbbbaaaabbaaaaabbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaabbbbbbaaaaaaaabbbbaaaabbbaaaabbbbbaaaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaaabbbbbaaaaabbbbbaaaaaabbaaaaabbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbbbaaaaaabbbbbaaaaabaaaaaaaaaabbbaaaabbbbbaaaabbbbbaaaabbbbaaaabbbbaaaba + aabbaabaaaaaaaaaaabbaaaaaaabbbbbaaaaabbbbbbaaaabbbbaaaabbbbbaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbaaaaaabbbbbbbaaaabbbbabaaaaabbbaaaabbbbbaaaaaaaabbaaaaaaaaaaaaaaaaaabb + bbbbaaabbbbbbaabbbbbaaaaaabbbbbbbbaaaaabbbbbaabbbbbaaaabbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaababbbbbbbaaabbbbbaaaaabbbbaaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaaabbabbbaaaaaaaaabaaaaaaabaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaaabbabbbaaaaabbbbbaaaaaaabaaaabbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaaabbbbbaaaaaaabbabbbaaaaabaaabaaaaaaabaaaabbbbbbaaaaabbaaaabbbbbbaaabbabbbabb + bbbbaabbbbbbaaabbbbbaaaaabaaaaabbbaaaabbbbbaaaaaaaaaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbbaaaabbbbbabbbbbaaabbaababbbaaaaaaaabbbbbbaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbbaaaabbbbbaabbbbaaabbbbbabbbbbaaaaaabbbbbaaabbbaabbaabbbbbbbaabbabbbaab + abbbaabbbbbbaaabbbbaaaaaabbbbaabbbbaaabbbbbaabbbbbaaaaabbbbbbaabbbaabbbabbbbbbaaabbbbbbaab + aaabaabaaaaaaaabbbbaaaaaaaaaaaabbbbbaaaaaabaabbbbbaaaaabbbbbaaabbbaabbaaabbbbbaaabbbbbbaab + bbbbaabaaabbaaabbbbaaaaaaaaababbbbbbaabbbbbaabbbbbaaaaabbbbbaabbbaaabbbaaaaabaaaabaaabaaaa + bbbbaabbbabbaaabbbbaaaaaaaaaabbbbbbaaaaaaabaabbbbbaaaaabbbbbbabbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbbbaaabbbbaaaaaaaaaaaaabbbaaaabbbbaabbbbbaaaaaabbbbbabbbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbaaaaaabaaaaaaabbbaaabaabaabbbbbaaaaaabbbbbaaaaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbbaaaaabbbaaaaaabbbaaabbbbaaabbbbaaaaaaabbbbaaaaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbaaaaabbbbaaaaabbbaaabbbbaaabbbbaaaaaabbbbbabaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbaabaabbbbaaaaabbbbbaaaaaabbaaaababaaaabbaaaaaaabbbbaaaabbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaabaaabbbaaaaabbbbbbaaaaabbbaabbbbaaaabbaaaaaabbbbbbaaabbbabbaaabbaaaaaaaaaabbaab + abbbabbbbbbbaaabbbaaaaabbbbbbaaaaaabbaabbabaaaabaaaaaaabbbbbbaabbbbaabaaabaaaaaaaaaaabbaab + bbbaabbbbbbbaabbbbaaaaabbbbbbaaaaaabbaabbbbaaaabaaaaaabbbbbbbaabbbbbbbaaabbaabaaabbbbbbaba + bbbabbbbbbbbaabbbbbaaaabbbbbbbaaaaabbaabbabaaaaaaaaaaabbbbbbbaabbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbaabbbbbaaaabbbbbbaaaaaaabaabbbbaaaaaaaaaabbbbbbbbaabbbbbbbabbbbabbbaabbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbaaaaaaabbaabbbbaaaaaaaabbbbbbbbbaabbbbbbbabbbbabbbabbbbbbbbba + abbbbbbbbbbbbbbbbbbbaaaaabbbaaaaaaaaababaabbaaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbaabbbbbbbabb + abbbbaaabbbbbbbbbbbbaaaaaabaaabaaabaabaaaabbaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaabbbbbaabb + bbbbbaaabaaaabbbbbbbbaaaaaaaaaaababaaaaaabbaaaaabbbbbbbbbbbbbaabbbbbbbabbbbabbbbabbbbbaabb + abbbbbabbbaaabbbbbbbbbbabaaaabbababaaaabbbbaaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbabb + abbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbabbbbbbbbbbbbbbbbbaaaaaaabbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaab + bbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbbbbaaaabbbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaabaabbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaabbbaaabbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbbaaaabbbbbabbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaabbbaaaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbabaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaaaabbbaabbaaaabbabbbbaaabbbbba + bbbbbababbbaaaaaaabbbabbbabaaaaabaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbabbbbaaaaaaabbbbabbbbbbbbaaaaaaaaaaaaaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbabbbabbbaaabbbbaabbbbba + abbbbbbbbbbaaaabbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbaaabbbbaaaabbbbbbbbbaabbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbaaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbaaaaaabaaabbaaabbbbbbbaaabaaabaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaabbbbaabbaaabbbbbbbaaababbbbababaaabbbbbbaaaaaaaabaaaaaabbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaaaaaabbbbbbbbbbbbbabbbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbbbbbabbbbbbbbbbbbaaabbbaaabaabbaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbbbbbaaaaaaabbbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaabbbbbbaaaaaaaaabbbbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaabbbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbbbaaaaaaaaaabbbaabbbbbbbbaaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbbbaaaaaaaaabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaaababbbbbbbbaaaaaaabbbbbabbaaaaaaaaaaaabbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbabbaaaaaaaaaaaaabbbbbbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaabbbaabbbabbaaaaabbbbbbbabbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaabaabbaaaabbbbbbbbabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbaaabbbbbbbbaabbbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbaababbaabbbbaaabbbbbbbbabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaabbbbbbbbabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabbaaaaaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabbabaaaaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbbaaabbbbaabaabbbbbbbbaaaaaabaaabbbabbbbabbbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaabbbbbaababbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbaaabbbbbabaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbaabbabbbabbbaaaaabbaabaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaaaaabaabaabbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaabbbbaaaababbabbbbbbbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbabbbbababbbbbbaaaaaaabababbbbaaabaaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbbbbaaaababbbbabbbaaabbbaabbbaaaaababaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbaaabbbbbbbbabaaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbaaaaabbbaabbbaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbaaaaaabbaabbbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbaaaaabbbaabbbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbaabaaaabbbaababbbbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabbbbbbaaabaaaabbbaabaaabbbbbbbbabbaaabbbaabaabbbaaaaabbbbabbbbbba + bbaabbaaaaaaaaabbaabbbbbabbbbaaaaabbaaabbbabbaaaaaabbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbbbbbbaaaaaabbaaabbaaabaaaaaaabbbaabbaaabbbaabbabbbbbaaaaaababaaaaaa + bbabbbbbbaaabbbbbaabbbbbbbbaaaaaaaabbaabbaabbaaaaaaaabbbabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbbbbaaaaaaaaabbabaaabbaaaaaaaaaabbabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbbaaaaaaaaaaabbbbaabbbaaaaaaaaaabbbbbaaabbaaabbaabbbbabbbbbaaabbbbba + aaabbbbbbaabbbbbbaaabbaaaaaaaabaaaabbbbabbbbaaaaaaaaaabbbabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaabbbaaaaaaabbaaaabbbbbbbbbaaaabbaaaabbbabbaabbbbaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaabbbaaaaaababbaaaabbbaababbaaaabbaaaabbbabbaababbaabbabbbaabbbbbbaabbbbba + bbbabbbaaaaabbbaaabbbaaaaabbbbbaaaaabbbbbbbbaaaaaaaaaabbbabbaaaabaaaababbaaabbbbbaaaabbbba + bbbaabaabbbaabbaabbbbaaaaabbbbbbaaaaaaaaaabbaaaabbaaaabbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaabbbbbbbaaaabbbbbbbaaaabbaaaabbbbbbaaaaabbbaaaaabbbaabbaaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaaabbbbbaaaaabbbbbabaaaabbaaaabbbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbbaaaaaabbbbbbbaaaabbaaaaaaaaabbbaaabbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aabbaabaaaaaaaaaaabbaaaaaabbbbbbbaaaabbbbbbaaaaabbbaaabbbbbbaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbaaaaaaabbabbbbaaaaaaaabaaaaabbaaaaabbbbbaaaaaaaabbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbaaaaaaabbbbbbbaaaabbbbbaaaaabbaaaaabbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaaaabbabbbbaaaabaaabaaaaaaaaaaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaaaaababbbbaaaabbbbbaaaaaaaaaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaabbbababbbbaaaabbbbbbbbbaaaaaaaabbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaaabbbbbaaaabbbbaaabbbbaaabbaabbbbbbaaaaaaabbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaaabbbbbaaaabbbbaaabbbbaaabbbbbabbbbaaaaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbaaaaabbbaaaabbbbaaaaaaaaabbbbbaaaaaabbbbbbaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbaaaabbbbbbaabbbbbaabbbbbabbbbbaaaaaabbbbbaaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbbaaaababbbbbaabbbbaaabbaaabbbbbaaaaaabbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + aaabaabaaaaaaaabbbbaaaabaabbbbbaabbbaaabbaabbbbbbaaaaaabbbbbbaabbbaabbaaabbbbbaaabbbbbbaab + bbbbaabaaabbaaabbbbaaaabaaabbbbaabbbaaabbabbbbbbaaaaaaaabbbbbabbbaaabbaaaaaabaaaaaaaabaaaa + bbbbaabbbabbaabbbbbaaaabbaaabbbaabbbaaabaabaabbbaaaaaaaabbbbbabbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbaabaabbbbbaaaabaaaaabbaaabbbaabbbbaaabbaaaaaaaabbbbbabbbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbaaaaaaaaaaaabaabbbaabbabaaabbaaaaaaaabbbbbaaaaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbbaaaaaaaaaaaabaaabbaabbabaaaaaabaaaaabbbbbaaaaaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaaaabbbaaaaaaabbaabbbbaaaaaabaaaaabbbbbaabaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaaaabbbaaaaaaaabaabbabaaaaabbaaaabbbbbbaaaabbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaabaaabbbaaaaaaabbbbaaaaaaabaabbabaaaaaaaaaaabbbbbbaaaabbbbbaaaabbaaaaaaaaaabbaab + abbbabbbbbbbaaabbbaaaaaabbbbbaaaaaaabaabbbbaaaaaaaaaabbbbbbbbaabbbbaaaaaabaaaaaaaaaaabbaab + bbbaabbbbbbbaabbbbaaaaabbbbbbbaaaaaaaabbbabaaaaaaaabbbbbbbbbbaabbbbbabaaabbaabaaabbbbbbaba + bbbabbbbbbbbaabbbbbaaaabbbbbbbaaaaaaaaaabbbaaaaabbbbbbbbbbbbbaabbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbaabbbbbaaaaabbbbbbaaaaaaaaaaabbaaaaabbbbbbbbbbbbbaabbbbbbbbabbbabbbaabbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaabaaaaaabbaaaaabbbbbbbbbbbbbaabbbbbbbabbbbabbbabbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaaaabbbbbaaaaaaaaaaabbaaaaaabbbbbbbbabbbaabbbbbbbbbbbbbbbaabbbbbbbabb + abbbbaaabbbbbbbbbbbbaaaaabbbbaaaaabaaaabbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbaabbbbbaabb + bbbbbaaabaaaabbbbbbbbbaaaabbaaaaaabaaaabbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbabbbbabbbbbaabb + abbbbbabbbaaabbbbbbbbbaaaaaaaaaaaabaaaabbbbaaaaaaabbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbabb + abbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbabbbbbbbbbbbbbbbaaaaaaaabbbbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaab + bbbbbbbbbbbbbabbbbbbbaaaaaaaabbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbaaabbbbbbbaaaaabbabbbbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbaaaaabaaaabbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaabaabbbbbbbbaaabb + bbbbbabbbbbbbbbbbbbbaaaaaaaaaaabbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbaaaaaaabbaaabbbaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbaaaaaaabbaaabbbaaaabbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaaabbbba + abbbbbbbbbbbbabaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbabbbbaaabbbbba + bbbbbabbbabaaaaaaabbbabbbabaaaaabaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbabbbaaaaaaaabbbbabbbbbbbbaaaaaaaaaaabaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaaaaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbbaaabbbbbaaaababbbbbbbaaaabbbbaabbbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaaabbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbbaabaaabaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaaabbbaaabaaabbbbbbbaaabbbbbbaabbaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaaabbbaaaaaabbbbaaaaaabbbbbbbbbbbbbabbbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaaabbbbbbabbbbbbbbbbbbbaabbbaaabaabbaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaabbbbbbbaaaaaaabbbbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbaaaabbbba + abbbaaaaabbbbbbaaaabbbbaabbaaabbbbbaaaaaaaaabbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbbbaaaaaaaaaabbbaabbbbbbbbaaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbbbaaaaaaaaabbaaabbbbbbbbbaaaabbaabbaaabbbbaaaabbbbaabbbba + abbbaaababbbbbbbbaaaaaaabbbbbabbaaaaaaaaaaaabbbabbbbbbbbbbaaaabbabbbaaaabbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbabbaaaaaaaaaaaaabbbabbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaabbbaabbbabbaaaaabbbbbbbabbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaabaabbaaaabbbbbbbbabbbaabbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbaaabbbbbbbbaabbbaaabbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbaababbaabbbbaaabbbbbbbbabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbaaabbbbbbbbabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbbaaabbaaaaaaabbbbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaaabbabaaaaabbbbbbaaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabbbbaabaabbbbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaabbbbbaababbbbbbbbaabbaaaaaabbbabbbbaabbbaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbaaabbbbbabaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaba + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaaabbaabaabbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbaaaaaabbbbaabbbbbbaaaabbbbaaaabbbabbbabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaabbbbaaaababbaabbbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbababbbbbbaaaabaabaaabbbbaaabaaabbbbaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbbbbaaaababbbbaabbaaaabbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbaaaabbbbbbbabbaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbaaaaaabbaabbaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbaaaaaabbaabbbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbaaaaabbbaabbbbbbbbbbbaaaabaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbaabaaaabbbaababbbbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaaababaaaaaaabbbbbabbbbbbaaabaaaabbbaabaaabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbbaaaaaaaabbaabbbbbabbbbaaaaabbaaabbbabbaaaaaabbbbbabbbaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbbbbbbaaaaaabbaaabbaaabaaaaaaabbbaabbbaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbbaaabbbbbaabbbbbbbbaaaaaaaabbaabbaabbaaaaaaaabbbabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbbbbaaaaaaaaabbabaaabbaaaaaaaaaabbabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbbaaaaaaaaaaabbbbaabbbaaaaaaaaaabbabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbaaaaaaaabaaaabbbbabbbbaaaaaaaaaabbbbbaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaabbbaaaaaaabbaaaabbbbbbbbbaaaabbaaaabbbabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaabbbaaaaaaaabbaaaabbbaababbaaaabbaaaabbbabbaaabbbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaaabbbaaaaaabbbbaaaaabbbbbbbbaaaaaaaaaabbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbaaaaaabbbbbaaaaaaaaaabbaaaabbaaaabbbbbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaaabbbbbbaaaabbbbbbbaaaabbaaaabbbbbbaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaaabbbbbbaaabbbbbaaaaaabbbbbaaaaabbbbbabaaaabbaaaabbbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaaabbbbbbaabbbbbaaaaaabbbbbbbaaaabbaaaaaaaaabbaaaabbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aabbaaaaaaaaaaaaaabbaaaaaabbbbbbbaaaabbbbbbaaaaabbaaaabbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbbaaaaaaabbabbbbaaaaaaaabaaaabbbaaaaabbbbbaaaaaaaaabaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbaaaaaaabbabbbbaaaabbbbbaaaaabbaaaaabbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbaaaaaaabbabbbbaaaabaaabaaaaaaaaaaaabbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaaabaababbbbaaaabbbbbaaaaaaaaaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbaaaabbbababbbbaaaabbbbbbbbbaaaaaaaabbbbbbaaaaabbbaaabbbbbbaabbbbbbbabb + bbbbaabbbbbbaaabbbbbaaaabbbaaaabbbbaaabbaabbbbbbaaaaaaabbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaaabbbbbaaabbbbbaaaabbbaaaaabbbaaabbbbbabbbbaaaaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbbaaaaabbbaaaabbbbaaaaaaaaabbbbbaaaaaabbbbbbaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbbaaaabbbbaaaaabbbbaabbbbbabbbbbaaaaaabbbbbaaabbbaabbbabbbbbbbaabbabbbaab + abbbaabbbbbbaaabbbbaaaabaabbbbbabbbbaaabbaaabbbbbaaaaaabbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + aaabaabaaaaaaaabbbbaaaabaabbbbbaabbbaaabbaabbbbbbaaaaaabbbbbbaabbbaabbaaabbbbbaaabbbbbbaab + bbbbaabaaabbaaabbbbaaaabaabbbbbaabbbaaabbabbbbbbbaaaaaaabbbbbabbbaaabbbaaaaaaaaaabaaabaaaa + bbbbaabbbabbaabbbbbaaaabbaaabbbaabbbaaabaabaabbbaaaaaaaabbbbbaabbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbabaabbbbbaaaabaaaaabbbaabbbaabbbbaaabbaaaaaaaabbbbbabbbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbaaaaaaaaaaaabaabbbaabbabaaabbaaaaaaaabbbbbaaaaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbbbaaaaaaaaaaaabaaabbaabbabaaaaaabaaaaabbbbbbaaaaabbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbaaaaaaabbbaaaaaaabbaabbbbaaaaaabaaaaabbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaaaabbbaaaaaaaabaabbabaaaaaabaaaabbbbbbaaaabbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaabaabbbbaaaaaaabbbbaaaaaaabaabbabaaaaaaaaaaabbbbbbbaaabbbbbbaaabbaaaaaaaaaabbaab + abbbaabbbbbbaaabbbaaaaaabbbbbaaaaaaabaabbbbaaaaaaaaaabbbbbbbbaabbbbaaaaaabaaaaaaaaaaabbaab + bbbaaabbbbbbaabbbbaaaaabbbbbbbaaaaaaaabbbabaaaaaaaabbbbbbbbbbabbbbbbbbbaabbaabaaabbbbbbaba + bbbaabbbbbbbaabbbbbaaaabbbbbbbaaaaaaaaaabbbaaaaabbbbbbbbbbbbbaabbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbaabbbbbaaaaabbbbbbaaaaaaaaaaabbaaaaabbbbbbbbbbbbbaabbbbbbbbabbbabbbaabbbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaaaaaaabbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbabbbabbbbbbbbba + abbbbbbbbbbbbbbbbbbaaaaaabbbbbaaaaaaaaaaabbaaaaaabbbbbbbbabbbabbbbbbbbbbbbbbbbaabbbbbbbaba + abbbbababbbbbbbbbbbbaaaaabbbbaaaaabaaaabbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbaabbbbbaabb + bbbbbaaabaaaabbbbbbbbbaaaabbaaaaaabaaaabbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbabbbbabbbbbaabb + abbbbbabbbbaabbbbbbbbbaaaaaaaaaaaabaaaabbbbaaaaaaabbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbabb + abbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbabbbbbbbbbbbbbbbaaaaaaaabbbbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbabbbbbbbaaaaaaaababbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbaaabbbbbbbaaaaabbabbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbaaaaabaaaabbbaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaabb + bbbbbabbbbbbbbbbbbbbaaaaaaaaaaabbbbaaaabbbabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbbbbbbbbbbbbbbbbbbaaaaaaabbaabbbbaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbaaaaaaabbaaabbbaaaabbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbaaabbbbba + abbbbbbbbbbbabbbbaaabaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaaabbbba + abbbbbbbbbbbaabaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbbabbbaaabbbbba + bbbbbabbbbaaaaaaaabbbabbbabaaaaabaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbabbbbbaaaaaabbbbabbbbbbbbaaaaaaaaaaabaabbbbbbabbaaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbbaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbaaaabbbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabaabbbbbbbbbbbbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaaabbbaaabaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaaaaabaaaaaabbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaaabbbaaaaaabbbbaaaaaabbbbbbabbbaabbbbbbbbaaaaaaabbaabaaaabbbbbbbaabbbbaaaaabbbbba + abbbaaaaaabbbbbaaaabbbbbaaaaabbbbbbaaaaaaaabbbbbbaaabbbaaabaabbaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaaabbbbbbaaaaaaaaabbbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbaaabbbbba + abbbaaaaabbbbbbaaaabbbbaabbaabbbbaaaaaaaaaaabbbbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbabbbaaaaaaaaaaabbbbaabbbbbbbbaaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbbbaaaaaaaaaaaabbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaaababbbbbbbbaaaaaaabbbbbbbaaaaaaabaababbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbaabbba + abbbaaabbbbbbbbbaaaaabaabbbbabbaaaaabbbbbbbabbaabbbbbbbbbbaaaabaabbbbaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaabbbaabbbbbbaaaabbbbbbbbabbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaababbbaaaabbbbbbbbabbaaabbbbbbbbbaaaaabaabbbaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbaaaabbbbbbbbababbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbaaaabbaaabbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbabba + aabbbabbbbbbbbbbaabbbaaabbbabbbaaaabbabaaaaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbaaaabbaabaaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaaabbbbbaababbbbbbaaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaabbbbbaaaabbbbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaabbbbbaaaabbbbbbbbaabbaaaaaabbbabbbbaabbbaaaaabbbbaaabbb + abbbbabbbabbaabaaabbbabaabbbabbbaaabbabbaaaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaababbbbabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbbaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbbaaaaabbaaaabbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaabbbbaaaabbababbbbbbbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbababbbbbbaaaabbbbababbbbaaabaaabbbaaabaaabbabbbabbbbbbbaaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbbbbaaaaaabbbbbabbbaabbbaabbbaaaaaaabbabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbbaaaaaaabbbbbbbaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaabaaaabbbbabaaaaaabbaabbbbbabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaabbbbaabaaaaabbbaabbbbbbbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaabbbbaabbaaaabbbaabaaabbbbbbbaaaabaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaaaaabbbbabbbbbaaabbaaaabbbaabaaaaabbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabbbaaaaaabaaaabbaabbaaaaaaabbbbabbaaabbbaaaaabbbaaaaaabbbabbbbbbb + bbaabbbaaaaaaaabbaabbbbbbbbaaaaaaabbaabbaaabbaaaaaaaabbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbbbbaaaaaaaabbbabbaaaabaaaaaaaabbaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbaabbbbbbaaaaaaaaabbbabaababbaaaaaaaabbbabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbaaaaaaabaaabbbbbaabbbaaaaaaaaabbbabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaabbbaaaaaaaabaaabbbbbabbbbaaaaaaaaabbbabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaabbaaaaaaaabbaaaabbbbbbabbaaaabaaaabbbbbbaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbabbbaaaaaabbbbaaaabbaaababbaaaabaaaaabbbabbaabbbbaabaabbbaabbbbbbaabbbbba + abaabbbaaaaabbbbaabbbaaaaabbbbbaaaaabbbbbabbaaaabaaaaabbbabbaabbbbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaabbbaaaaaaabbbbbaaaabbbbbbbbaaaaaaaaaabbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbaaaaaaabbbbbaaaaaaaaaabbaaaabaaaaabbbbbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaabbbbaaaaabbbbbbbbaaaabbbbbbbaaaabaaaaabbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbaaaabbbbabbbbaaaabaaaaabaaaabbaaaabbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbbaaaabaabbbbbbaaaabbbbaabaaaabbaaaabbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaabaaaaaaaaaabbbaaaabaaabbbbbbaaabbbbbbbaaaaaaaaaabbbbbbaaabbbbbbbaabbbbbbaabbbbbbbabb + bbbbaaabbbbbbaabbbbaaaaabbaabbbbbbaaabbaaaabaaaaaaaaaabbbbbbaaaaaaaabbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbaaaabbaaabbbbbbaaaabbbbbbaaaaaaaaaabbbbbbaaabbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbaaaabbababbabbbaaaaaaaaabbbbaaaaaaabbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbaaaabababbaabbbbaaabbbabbbbbbbaaaaabbbbbaaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbaaaabbbbbaaabbbbaaabbbaabbbbbbaaaaabbbbbbaaaaaabbaaaabbbbbbaabbbbbbbabb + bbbbaabbbbbbaaabbbaaaaabbbbbbbaabbbaaabbaaabbbbbbaaaaabbbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaaabbbaaaaabbbaabbaabbbaaabbbaabbbbbbaaaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaaabbbaaaaabbbabbbbaabbbaabbaaabbbbbbaaaaaabbbbbaaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaaabbbaaaabbbbabbbbaabbbaabbbaabbbbbbaaaaaabbbbbbaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaaabbbaaaabbbbbbbbbaabbbaaabbaababbbbaaaaaaabbbbaaabbbaabbaabbbbbbaaabbbbbbaab + aaabaabaaaaaaaabbbaaaabbbbbbbbbbaabbaaabbaabaabbbaaaaaaabbbbbaabbbaabbaaabbbbbaaabbbbbbaab + bbbbaabbaaabaabbbbaaaabbbbbbbbbbaabbaabbbabbaabbbaaaaaabbbbbaabbbaaabbaaaaaaabaaabaaabaaaa + bbbbaabbbaabaabbbbaaaabaaaabbbbbaaabbabbbabbaabbaaaaaabbbbbbaaabbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbaabaabbbbaaaabaaaaaaabbaaabbabbbabbaaaaabaaaabbbbbbaabbbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbaaaabaaaaaaaaaaaaababbbabbaaaaabaaaabbbbbbbaaaaabbbaaabbbbbbbaabbaabbaab + abbbaabbbbbbaabbbaaaaabaaaaaaaaaaaaabaaababbaaaaabaaabbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbaaaaabaaaaabbaaaaaaaabbbabbaaaaaaaaabbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbaaaaabaaaabbbbaaaaaaabbbabbaaaaaaabbbbbbbbbaaaabbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaabaabbbaaaabbaaaabbbbaaaaaaabbbabbaaaaabbbbbbbbbbbaaabbbbbbaaaabaaaaaaaaaaabbaab + abbbaabbbbbbaabbbbaaaabaaabbbbbaaaaaaabbbbbbaaaabbbbbbbbbbbbaaabbbbaaaaaabaaaaaaaaaaabbaab + bbbaaabbbbbbaabbbbaaaaaaaabbbbbaaaaaaaaaaabbaaaabbbbbbbbbbbbaaabbbbbabaaabaaabaaabbbbbbaba + bbbaabbbbbbbaabbbbaaaaaaaabbbbbaaaaaaaaaaabbaaaabbbbbbbbaabbbaabbbbbbbbabbbabbbaabbbbbbbaa + bbbabbbbbbbbaabbbbaaaaaaaabbbbbaaaaaaaaaaabaaaaabbbbbbbbbbbbbbabbbbbbbbabbbabbbaabbbbbbbba + bbbbbbbbbbbbabbbbbbaaaaaaabbbbbaaaaaaaabaabaaaaaabbbbbbbbbbbaaabbbbbbaabbbbabbbabbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaaaabbbbaaaaaaabbbbbaaaaaabbbbbbbbbbbbabbbbbbbbbbbbbabbaabbbbbbbbab + abbbbaabbbbbbbbbbbbbbaaaaaabbbbaaaaaaabbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbaabbbbbaabb + bbbbbbabbaaabbbbbbbbbaaaaaaaabaaaaaaaabbbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbabbbbbaabb + abbbbbabbbaabbbbbbbbaaaaabbbaaaaaaaaaabbbbbaaaaaaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbabb + abbbbbbbbbbbbbbbbbbbaaaaabaaaaaaabbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbabbbbbbbbbbbbbbbaaaaaaaaaaaaabbaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbabbbbbbbaaaaaaaaabbbbbaaaabbbbbaaaaaaabbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbbaabb + bbbbbbbbbbbaabbbbbbbaaaaaaaaabbbbaaaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbaabbbbbbaaaaaaaabbaabbaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaabb + bbbbaabbbbbbbbbbbbbaaaaaaaabbaabbaaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + abbbbabbbbbbbbbbbbbaaaaabaabbaabbbaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbaaaabbaabbaabbbaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbabbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbbbbbbbabbbbbaabaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbababbaaabbbaaabbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaaabbaaabbbbba + bbbbbbbbbbbaaabaaabbbabbbabaaaaabaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbabbbbbbaaaaabbbbabbbbbbbbabaaaaaaaaabaabbbbbbabbaaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbbbbbbbaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbbbbbbabaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaaabbbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbaaaaabbbbbaabbbabbbbbbbabbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaababbbbabbbabbbbbbbbbaaabbbaaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbaaaaabbbaaabaaabbbbbbaaabbbbbbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaaabbbaaaaaabbbbaaaaaabbbbaaaaaaaaaabbbbbbaaaaaaabbaabaaaabbbbbbbaabbbaaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaaabbbbbaaaaaaaaaabbbbbaaabbbaaabaabbaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbbaaaaaaaaaaabbbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbaaaabbbbaabbbabbbaaaaaaaaaaaabbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbbaaaaaaaaaaaabbbaaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbbaaaabbbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaaababbbbbbbbaaaaaaabbbbbbaaaaabbbbbbbbabbaabbbbbbbbbbaaaabbabbbaaaabbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbbbbaaaabbbbbbbbabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaabbbaabbbbbbaaaabbbbbbbbabbaabbbabbbbbbaaaaabaabbbbabaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaabbbbbaaaabbbbbbbbabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbabba + aaabaabbbbbbbbbbbabbaababaaabbbaaaabbbaaaaaaaabbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbaababbaabbaaaaabbaabbaaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbaaaaabbbbbbaaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbaaaabbbbbbaaabbbbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaabbbbbbbaaabbbbbbaaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbaaaabbaabbaaabbbbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaabbbabbbaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabaaabbbaaaabbbabbbaaaabaabbaaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbaabbabbbbaaaaaabaaaabbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbaaaaaabaaaabbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaabbbaaaaaaabbbbbbbbbbaaaaabbbbaaabbaabbabbbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbababbbbbbaaaaaaabbbabbbbbaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaaaabbbbbaaaaaaaabbbbbbbbaabbbaabbbaaaaaaaababbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbaaaaaaaabbbbbbbbbbaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaabbaabbbbbaabaaaaabbbaaaabbbbbbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbabbbbbaaabaaaaabbbaabaaabbbbbbbaaaabaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbbbbbaaaaabbaaaababaabaaaaabbbbbaaaabaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaaaaabbbbbbbaaaaaabbaaabbabaabaaaaaabbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbbbaaaaaaabbbabbaabaabaaaaaaabbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbaaaaaaaaaabbaababbaabaaaaaaabbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbabbbbbaaaaaaaaaaabbbbbabbaabaaaaaaabbbaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbabbbaaaaaaaaabaaabbbbaabbbbbaaaaaaaabbaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbabbaaaaaaabbbaaaabbbbbbbbbaaaaabaaaabbaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbbbbaaaaaabbbbbaaabbbaabaaabaaaabaaaabbbabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbbbbaaaaaabbbbbaaaabbbbbbabbaaaabaaaabbbaabaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbbbbaaaaaabbbbbaaaaaaaaaaabbaaaaaaaaabbbaabbaabbbbaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbabbbaaaaabbabbbaaaaabbbbaabbaaaaaaaaabbbaabbaabbbbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaabbaaaaabbbbabbbaaaabbbbbbbbaaaaaaaaabbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbabbbaaaaababaabbbbaaabbaaaaabaaaabaaaabbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaabbbaaaaaaaaaabbbbaaabbbbbbbbaaaaaaaaabbbbbaaaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaabbbbaaaabbaaaaabbbaaaaaaaaaabaaaaaaaaabbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbaaaabbabaaabbbaaaabbbbbabaaaaaaaaabbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaabaaaaaaaaabbaaaaabbbbaaabbbaaaabbabbabaaaaaaaaabbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbaaaabbbbbbaaabbaaaabbbaaabaaaaaaaaabbbbbbbaaaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbaaaabbbbbbbaabbbaaabbbbbababbbaaaaabbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbaaaabbbbbbbbabbbaaabaaaaabbbbbbbbaaabbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbaaaabbbbbbbbabbbbaabbbbaabaabbbbbaaabbbbbaaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbaaaaabbbbbbbbaabbbaaabbbaabaabbbbbaaabbbbbaaaaaaabbaaaabbbbbbaabbbbbbbabb + bbbbaabbbbbbaaabbaaaaabbbbbbbbaabbbaaabbaaabbbbbbbbaaabbbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + bbbbaabbbbbbaabbbaaaaabbbbbbbbbabbbaaabbbaababbbbbbaaaabbbbbaaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbaabbbaaaaabbbbbbbbbaabbaaabbaaababbbbbbaaaabbbbbaaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbaabbbaaaaabbbbabbbbaaabbaabbbaabaabbbbbaaaabbbbbaaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaabbbaaaaabbbaabbbbaaabbaabbaabbaaaabbbaaabbbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + ababaabaaaaaaabbbaaaaaabbaabbbbaaaabbaaaaabbaaaabbbaaabbbbbbbaabbbaabbaaabbbbbaaabbbbbbaab + bbbbaabbaaabaabbbaaaaaaaaaabbaaaaaaababbaabbaaaaabaaaabbbbbbbaabbaaabbaaaaaaabaaabaaabaaaa + bbbbaabbbaabbabbbaaaaabaaaaaaaaaaaaaaabbaabbaaaaaaaaabbbbbbbbaabbaaaabbabbbbbbbaabbbbbbaab + abbbaabbbaabbabbbaaaabbbbbaaaaabbbaaaabbbabbaabbaaaaabbbbbbbbabbaabbabbabbbbbbbaabbbabbaab + abbbaabbbbabaabbaaaaabbbbbaaaabbbbaaaabbaabbaaaaaaaaabbbbbbbbaaaaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbabaabbaaaaabbbbaaaaabbbaaaaabbaabbaaaaaaaabbbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbaaaabbbbaaaabbbbbaaaabbaabbaaaaaabbbbbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbabaabbbaaaaabbbaaaabbbbbbaabbbbabbaaabbbbbbbbbbbbbaaabbbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaabaabbbaaaaabbbaaaabbbbbbaabaaaabbaaaabbbbbbbbbbbbaaaabbbbbaaaabaaaaaaaaaaabbaab + abbbaabbbbbbaabbbbaaaaabbaaaabbbbbaaabaaaabbaaaabbbbbbbbbbbbaaaabbbaaaaaaaaaaaaaaaaaabbaab + bbbaabbbbbbbabbbbbaaaaaabaaaabbbbbaaabaaaabbaaaabbbbbbbbbbbbaabbbbbbabaabbaaabaaabbbbbbaba + bbbabbbbbbbbaabbbbbaaaaabaaaabbbbbbaaaaaaabbaaaabbbbbbbbbbbbbaabbbbbbbbabbbabbbaabbbbbbbaa + bbbabbbbbbbbaabbbbbbaaaabbaaabbbbbaaaabbaabbaaaaabbbbbbbbbbbaaabbbbbbbbabbbabbbaabbbbbbbba + bbbbabbbbbbbabbbbbbbbaaabbbaaabbbbaaaabbbabbaaaaabbbbbbbbbbbbaabbbbbbbabbbbabbbabbbbbbbbba + abbbbbbbbabbabbbbbbbbaaaabbbaaaaaaaaaabbbabbaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbaabbbbbbbbab + abbbbbbbbbbbabbbbbbbaaaaaabbbaaaaaaaaabbaabbaaaaabbbbbbbbbbbbaabbbbbbbbabbbabbbaabbbbbaabb + abbbbbbbbaaaaabbbbbbaaaaaaaaaaaaaaaaaabbbabbaaaaabbbbbbbbbbbbbbbbbbbbbbabbbabbbbabbbbbaabb + abbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaaabbbabbaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbabb + bbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbaaaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbabbbbbbbaaaaabbabbbbbbaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbabbbbbbaaaaaaaaaabbbbaaaaabbbabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbaaaaaaaabbbbbbaaaaabbbabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaaaaaabbbaabaaaaabbbabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaaaaaabbbaabaaaaabbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaaabaaababbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaaabaaabbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbbbbabaabbbbbaabaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbbbbabaabbaaaabbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbabbbbaaabbbbba + bbbbbabbbabaabbaaabbbabbaaaaaaaabaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbabbbbbaaaaaabbbbabbbbbbbbbbaaaabbaabbaabbbbbbabbaaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbbabbbbaaaaabbbbaabbabbbbbbbaaabbbbbbaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbbbbbbbbbabbbbaabbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbaaaaabbbbbabbbbabbbbbbbbbbbbaaaaaabbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbaaaaaabaaabbaaabbbbbbbaaabbbbaaaaaaaaabbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaaabbbaabbaaabbbbbbbaabbbbaaaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaaabbbaaaaaabbbbaaaaabbbbbaaaaaaaaaabbbbbbaaaaaaabbaabaaaabbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaabbbbbaaaaaaaaaaabbbbbaaabbbaaabaabbaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbaaaaaaaaaaaaabbbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbaaaabbbbaabbbbbbaaaaaaaabaaabbbbbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaababbbbbbbaaabbbaaabbbbbbaaaaabbbbbbbabbbaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbbaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbabbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbabbba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaaaaabbbbbbbbbaaaaabbaabbbbbbaaaaabbaaaaaabbaabbbabbbbbbaaaaaaaabbbbabaaaaabbbbbbbbbabba + ababbaabbbbbbbbbaaababbbaabbbbaaaaaabbabaaaaabaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbabba + aaabaabbbbbbbbbbbabbaababaaabbaaaaaabbbbbaaabbbbaabbbbbbbbaaaabbbabbaabbaaaaabbbbbbbbbaaba + aabbbabbbbbbbbbbbabbaababbaabbaaaaaabbbbbbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbabbabbbbbbbaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbbaaabbbbbbbaaabbbbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaaaabbabbaaabbbbbbaaabbaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaaaabbabbbaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaabaabbaaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbaaaabbbabbbaaaaaaabaaaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbbaaaaaabbaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbbaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbabbbbaaaaaaaabbbbbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbbbbbbaaaaaaaaabbbbbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabbbbbabaaaaaaabbbbbbbbbbaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaabbaaabbbbaabaaaaaabbaaabbbbbaabbbaabbbaaaaaaaababbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaabbbbbaabaaabaabbaabbbbbbabbbbaabbbaaaabbbaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbaabbbbbbaaaabbbaaaabbbaaaaabbbbbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbaabbbbbbaaaaabbaaaababbaabaaaabbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaabbbbbaaaaaaaabbaabbabbaabaaaaaabbbbaaaabaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaaaabbbbbaaaaaaaaabbaabaabbaabaaaaaabbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaabbbbbaaaaaaaaaabbbabaabbaabbaaaaabbbbbabbaaabbbaaaaabbaaaaaaabbbabbbbbbb + bbaabbaaaaaaaaaababbbaaaaaaaaaaaabbbbbabbbaabaaaaaaabbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbbbaaaaaaabaaaaabbbbbabbbaabaaaaaaabbbaabbaaabbbaabbabbbbbaaaaaababbaaaaa + bbabbbbbaaaabbbbbbbaaaaaabbbbbaaabbbbbbbbbabbaaaaaaabbbaabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbbbaaaaaabbbbbaaaabbaaaaaaaabaaaaaaabbbaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbbbaaaaabbbabbbaaaabbbbbaaabbaaaaaaabbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbbbaaaabbbbabbbaaaabbbbbbbabbaaaaaaabbbbaabaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbbaaaaaabbbabbbaaaabaaaaaaabbaaaaaaabbbbaabbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbbaaaaabbabaabbbaaabbbbbbbabbaaaaaaabbbaaabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbbbbaaaaabbbbaabbbaaaabaaaaaabbaaaaaaabbbbbabbaaabbaaaababbaaabbbbbaaaabbbba + bbbaabaaabbaabbbbbaaaabbbbaaabbbaaaabbbbaaabbaaaaaaabbbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaabbbbaaaabbbaaaabbbbaaabbbbaaabbaaaaaaabbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbabbbaaaaabbbbaaabbbbaaabaaaaaabaaaaaaaabbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbabbbaaaaabbbbbbaabbbaaabbbbbbabaaaaaaaabbbbbbbaaaaabbbbbaaabbbbbaaaabbbbaaaba + aaaaaaaaaaaaaabbbaaaabbbbbbbaaabbaaabaaaaaabaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbabbbaaaabbbbbbbbaabbaaabbbbbaabaaaaaaaabbbbbbbbaaaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbabbbaaaaabbbbbbbaabbbaaababaaabaaaaaaaaabbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbabbbaaaabbbbbbbbaabbbaabbbbaaabaaaaabbaabbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbabbaaaaabbbbbbbbaaabbaaabbbaaabaaaaabbbbbbbbbbbaaaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbabbaaaaabbbbbbbbaaabbaaaaaaaaabaaaaaabbabbbbaaaaaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbaabbaaaabbbbbabbbbaabbaaabbbaaabaaaabbbbaabbbabbbaaaaabbaaaabbbbbbaabbbabbbabb + abbbaabbbbbbaabbaaaabbbbbabbbbaabbaaaaaaaaabaaaabbbbaabbbabbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbabbbaaaabbbbbabbbbaabbaaabbbbaabaaaabbbbbabbbbbbbaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbabbbaaaaaabababbbbaaaaaaabbbaaabaaaaabbbbabbbbbbbaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbaabbaaaaaaabaabbbaaaaabbbbaaaaabaaaaabbbbbbbbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + ababaabaaaaaabbbaaaaaaaaaabbbaaaabbbbabaaaabaaaaaaabbbbbbbbbbaabbbaabbaaabbbbbaaabbbbbbaab + bbbbaabbaaababbbaaaabbbbbbbbbaaabbbbbaaaaaabaaaaaaaaaabbbbbbbaabbaaabbaaaaaaabaaabaaabaaaa + bbbbaabbbaabbbbbaaaaabbbbbbbaaaabbbbbbbbaaabaaaaaaaaaabbbbbbbaabbaaaabbabbbbbbbaabbbbbbaab + abbbaabbbaabbbbaaaaaabbbbbbbaaabbbbbbbaaaabbaaaaaaaaabbbbbbbbabbaabbabbabbbbbbbaabbbabbaab + abbbaabbbbabbbbbaaaaabbbbaabaaabbbbbbbaaaabbaaaaaaaaabbbbbbbbaaaaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbabbbaaaaabbbbaabaaabbbbbbbaaaabbbbaaaaaabbbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbabbbaaaaaabbbbabaaabbbbbbbbaaabbbaabbbbbbbbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbabbbbaaaaaaabbbbaaabbbbbbaaaaabbaaabbbbbbbbbbbbbaaabbbbbbbaabbbbbbbaabbbbbbaab + bbbbaabaaaababbbbaaaaaaabbbbaaaabbbbbaaaaabbaaabbbbbbbbbbbbbaaabbbbbbaaaaaaaaaaaaaaaabbaab + abbbaabbbbbbabbbbbaaaaaabaabbaaaabbbbaaaaabbaaaabbbbbbbbbbbbaabbbabaaaaaaaaaaaaaaaaaabbaab + bbbaabbbbbbbabbbbbbbaaaaaaabbbaaabaaaaaaaabbaaaabbbbbbbbbbbbaabbbbbbabaabbaaabaaabbbbbbaba + bbbaabbbbbbbaabbbbbbbaaaaaabbbaaaaaaaaaaaabbaaaabbbbbbbbbbbbbabbbbbbbbbabbbabbbaabbbbbbbaa + bbbabbbbbbbbaabbbbbbbaaaaaabbbbaaaaaabbbbabbaaaabbbbbbbbbbbbaaabbbbbbbbabbbabbbaabbbbbbbba + bbbabbbbbbbbabbbbbbbaaaaaaaaaaaaaaaaabbbaabbaaaaabbbbbbbbbbbbbabbbbbbbabbbbabbbabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaabaaabbaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbaabbbbbbbbab + abbbbbbbbbbbabbbbbbbaaaaabbaaabaaaaaaabaaabbaaaaabbbbbbbbbbbbaabbbbbbbbabbbbbbbaabbbbbaabb + bbbbbbbbaaaaaabbbbbbaaaaabbbaabbaaaaaabaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbabbbabbbbabbbbbaabb + bbbbbbbbbbbbabbbbbbbaaaaaabbaabbbbaaaabbaabbaaaaabbbbbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbbabb + bbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbaaaabbaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbaaaaaabbbbbabbaaaabbaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbaaaaaabbbbbbbbaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbbbaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbabbbbbaabaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbabbbbbabbbbaaabaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbabbbbbaabbaaabbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaaabbaaabbbbba + bbbbbbabbbbbaabaaabbbabbbaaaaaabaaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbaabbbbbaaaaabbbbabbbbbbbbbbaaabbbbbbbaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbbbbbbbbaaaabbbbaabbabbbbbbbaabbbbbbbbbbbbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbabbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbbbaaaabbbbbaaabbabbbbbbbbbbbbbaaaaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbaaaaaabbbbbabbbbabbbbbbbbbbbaaaaaaaabbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaabbbaaaaaaaaaabbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaaabbbaaabaaabbbbbbaaabbbbbaaaaaaaaaabbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaaabbbaaaaaabbbbaabaabbbbaaaaaaaaaaabbbbbbaabbaaabbaabaaaabbbbbbbaabbbaaaaaabbbbba + abbbbaaaaabbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbbaabbbaaabaabbaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaabbbaaaaaaaabaaabbbbbbaabbbbbaabaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbaaaabbbbaabbbbbbaaaaabbbbbbbbbbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaababbbbbbbaaabbbaaabbbbbbaaaaabbbbbbbabaaaabbbbbbbbaaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbbaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaaabbbaabbbbbbbbaabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaaabbbbabbabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbbbaaaaaabbaaaaaaabaabbbbbbbbbbaaaaaaaabbbbabaaaaabbbbbbbbbaaba + ababbabbbbbbbbbbbaababbbaabbbbaaaaaabbabaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbabba + aaabaabbbbbbbbbbbabbaabaaaaabbaabbaabbbbbbaabbbbaaabbbbbbbaaaabbbaabaabbaaaaabbbbbbbbbabba + aabbbabbbbbbbbbbaabbaababbaabbaabbaabbbbbbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbaabbbbbbbbaaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbaabbbbaabbaaabbbbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbbbbbaaaaabaabbbaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbaabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaaaabbabbaaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaaaabbaaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabaaabbbabaabbbabbbaaaaaaabbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaaaaaabbabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbbbbbaaaaaaaaaaabbbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbabbbbaabbbabbbbabaaaabaaabbbbbbbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbbbbbaabaaabaaabbbbbbbbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbbbbbbbaaabaaaababbaabbbbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaabbbbbaaaaabbbaababbabbbbbbbbbbbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbabbbbbaaaaaabbaabbbabaaaaaabbbbbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbbbbbaaaaaaaabbaabbaabbaabaaaabbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbbbbbbaaaaaaaaabbbabaabbbaabaaaaabbbbbaaaaaaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaabbbbaaaaaaaaaaabbbabaabbbabbaaaaaabbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaabbbbaaaaaabaaaaabbbbbaabbaaabbaaaaabbbbbabbaaabbbaaaaabbbaaaaaabbbabbbbbbb + bbabbbaaaaaaaaabbbbaaaaaabbbbaaaabbbbabbbaabbaaaaaabbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbaaaaaaabbbbbaaabbbbbbbbaabbaaaaaabbbaaabbbaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbbaaabbbbbbaaaaaaababbbaaabbaaaaaaabbbaaaaaaabbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbbaaaaabbbabbbaaaaaabbbbaaabbaaaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbbaaaaabbbaabbaaaabbbbbbaaabbaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbbaaaaababaabbbaaaaaaaaaaabbbaaaaaaabbbbaaaaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaaabbbbaabbbaaaabbbbbaaabbaaaaaaabbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbaaaaabbbbbaaaaabbbbaaabbbaaabaaaaaabbbaaaaaabbbbaaabbaababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbbbaaaaabbaaaaabbbaaabbbbbbabbbaaaaaabbbbbbabbaaabbaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbbaaaaabbbbaaabbbaaabbbaaaabbbaaaaaabbbbbbbbbaaabaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaabbbaaaabbbbbaaabbbaaaabbbbaaabbaaaaaabbbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbabbbaaaabbbbbbaabbbaaaabbbbaaabaaaaaaabbbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbbbbaaaaabbbbbbbaabbbaaabaaaaaabaaaaaaabbbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaabaaaaaabbbaaaaabbbbbbbaaabbaaabbbbaaabaaaaaaabbbbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbbaaaabbbabbbbaaabbbaaabaaaaabaaaaaaaabbbbbbbbaaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbbbaaaabbbbbabbbaabbbaabbbbaaabaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbbbaaaaabbbbbbbbbaaabbaaabaaaaabaaaaaaaabbbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbbaaaaabbbbbabbbbaabbaaabbbaaabaaaaaaaabbbbbbbbaaaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbbaaaaabbbbabbbbbaaabaaabbbaaabaaaaaaaaabbbbbbbbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbbaaaabbbbbbabbbbaaabaaaabaaaabaaaaaaaaabbbbbbbbaaaaabbaaaabbbbbbaabbbabbbabb + abbbaabbbbbbbbbaaaabbbbbaabbbbaaaaabbbbbaabbaaaaaaaaabbbaabbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbbbbbaaaaabbaaabbbbaaaabbbbbbbaabaaaaaaaaabaaaaabbaabbaaabbaabbbbbbaaabbabbaaab + bbbbaabbbbbbbbbbaaaaaabbabbbbbaaabbbbbbbbaabaaaaaaaaabbaaabbbaabbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbbaabaaaaaaaaabbaaabbbaabbbaabbaabbbbbbaaabbbbbbaab + ababaabaaaaabbbaaaaabbbbbbbbbaaaabbbbbbbbaabaaaaaaaabbbaaabbbaabbbaabbaaabbbbbaaabbbbbbaab + bbbbaabbaaabbbbaaaaabbbbbbbbbaaaabbbbbbbaaabaaaaaaaaabbaaabbbaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbbbaaaaabbbbbbbbbaaaabbbbbbbaaabaaaaaaaaabbaabbbbaabbaaaabbabbbbbbbaabbbbbbaab + abbbaabbbbabbbbaaaaabbbbbbbbbaaaabbbbbbbaaabaaaaaaaaaabbbbbbbabbaabbabbabbbbbbbaabbbabbaab + abbbaabbbbabbbbaaaaaabbbbabbbaaaabbbbbbbaabbaaabaaaaaaaabbbbbaaaaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbabbbaaaaaaabbabbbaaaabbbbbbaaabbababaaaaaaaabbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbabbbaaaaaaaaaabbaaaaaababbaaaabbbbabbaaaaaaabbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbabbbbaaaaaaaaaabbaaaaaaaaaaaaabbaaabbbbbbbbbbbbbbaaabbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaabbabbbbbbaaaaaaabbbbbbaaaabbaaaabbaaabbbbbbbbbbbbbaaabbbbbbaaaabaaaaaaaaaaabbaab + bbbaabbbbbbbaabbbbbbbaaaaababbbbaaaabbaaaabbaaabbbbbbbbbbbbbbaabbabaaaaaaaaaaaaaaaaaabbaab + abbaabbbbbbbaabbbbbbbabaaaaaaaaaaaaabbbaaabbaaaabbbbbbbbbbbbaabbbbbbabaabbaaabaaabaabbbaba + bbbabbbbbbbbaabbbbbbbaaaaaaaaaaaaaaabbbbaabbaaaabbbbbbbbbbbbaabbbbbbbbbabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbaaaaabbbaabbaaaabbbaabbaaaabbbbbbbbbbbbababbbbbbbbabbbabbbaabbbbbbbba + abbbbbbbbbbbaabbbbbbbaaaaabbbbbbbbaaabbbaabbaaaabbbbbbbbbbbbbbabbbbbbbabbbbabbbabbbbbbbbba + abbbaaabbbbbbabbbbbbbaaaaabbbbabbbaaabbbaabbaaaabbbbbbbbbbbbbaabbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbbbabbbbbbbbaaaaabbbbabbaaaaabbaabbaaaaabbbbbbbbbbbbaabbbbbbbbabbbbbbbaabbbbbaabb + bbbbaaabbbaaabbbbbbbbaaaaabbbaabaaaaaabbaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbaabb + bbbbbbbbbbbbabbbbbbbbaaaaaabbbbbbbaaaabbaabbbaaaabbbbbbbbbbbbbabbbbbbbbbbbbbaaabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbaaaabbaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbaaaabbaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbaaaaaabbbbbbbbaaaabbaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbbaaaaaabbbbbbbbbaaabbbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaaabbbabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbabbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbaaabbbbba + abbbbbbbabbbabbbbaabbaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbabbbbbaabbaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaaabbaaabbbbba + bbbbbbabbbbbaaaaaabbbabbbaaaaaaaaaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbbbbbbaaaaabbbbabbbbbbbbbbaaabbbbabbaabbbbbbabbbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbbbbbbbbbaaabbbbaabbabbbbbbbaabbbbbbbbbbbbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbaabbbbaaabbbbbaaabbabbbbbbbabbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabbbbaaaabbbbbaaabbabbbbbbbbbbbbbaaaaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabbaaaaaabbbbbabbbbabbbbbbbbbbaaaaaaaaabbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbabaaaabaaabbaaabbbbbbbaaabbbaaaaaaaaaabbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaabbbbaabbaaabbbbbbaaabbbbaaaaaaaaaaabbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaabbbbaabaabbbbaaaaaaaaaaabbbbbbaaaaaaabbaabaaaabbbbbbbaabbbaaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbbaabbbaaabaabbaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaabbbaaaaaaaabaaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaabbbbbbbabbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaababbbbbbbaaabbbaaabbbbbaaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaaabbbaabbbbbbbbaabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaaabbbbaaaabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbbbaaaaaabbaaaaaabbaabbbbbbbbbbaaaaaaaabbbbabaaaaabbbbbbbbbaaba + ababbabbbbbbbbbbaaababbbaabbbbaaaaaabbbaaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbabba + aaabaabbbbbbbbbbbabbaababaabbbaabbaabbbbbbaabbbbaaabbbbbbbaaaabbbabbaabbaaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbbabbaabbbbbbbbbbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbaabbbbbbbbaaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbaabbaaaabbaaabbbbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaaaaaaabbbaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbaabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabababbaaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaabaabbaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabbaabbbabaabbbabbbaaaaaaabbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbaabbabbbbbbbaaaaaaaabbbbbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbbbabaaabaaaaaababbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbbbbbaabaaabbaaabbbbbbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbbbbbaabaaaaaabbbbbbbbbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbbbbbaaaabbaabbbbbbaabbbbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbabbbbbaaaaabbbabbbbbbabbbbbbaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbbbbbaaaaaaaabbaabbbbbaaaaaabbbbbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbbbbaaaaaaaaabbaabaabbaaabaaaabbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbbbbaaaaaaaaaaabbbabaabbaabbaaaaabbbbbaaaaaaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaabbbaaaaaaaaaaaaabbbbbaabbaabbaaaaabbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaabbaaaaaaabbaaaaabbbbaabbbaabbaaaaaabbbbbabbaaabbbaaaaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaabbbbaaaaaabbbbbaaabbbbbbbbaaabbaaaaaabbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbaaaaababbbbaaaabaabbbbaabbbaaaaaabbbaaabbbaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbbaaaabbbabbbaaaaabbbaaaaabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaaaaabbbabbbbaaaabbaaabaaabaaaaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaaaabbbabbbbaaaaabbbbbaaabbaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaaaabbbaabbbbaaabbbaaaaabbbaaaaaabbbbbaaaaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaaabbbbabbbbaaaaaabbbaabbbaaaaaabbbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbaaaaabbbbbaaaabbbababbbbaaaabbbaaaabbbaaaaaabbbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbbabbbaaaaabbbbaaaaabbbaaaabbbbaaabaabbaabbbaaaaaabbbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbaaaaabbbbaaabbbbaaabbbbbaabbbaaaaaabbbbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaabbbaaaaabbbbaaabbbbaaabaaabaabbbaaaaaabbbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbbaaaabbbbbbaabbbbaaaabbbbaaabaaaaaaabbbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aabbaabbbbbbbbbaaaaabbbbbbbaabbbbaaabbaaaaabaaaaaaabbbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaabaaaaaabbaaaabbbbbabbbaabbbbaabbbbaaabaaaaaaabbbbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbaaaabbbbbbbbbaaabbaaabbaaaaabaaaaaaabbbbbbbbbaaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbbaaaabbbbbabbbbbaabbaaaabbaaabaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbbbaaaabbbbbabbbbbaaabaaabbbaaabaaaaaaaabbbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbbaaaabbbbaabbbbbaaaaaaaabbaaabaaaaaaaabbbbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbbaaaabbbbaabbbbbaaaaabbbbbbbabaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbbaaaabbbbaabbbbbaaaaabbbbbbbabaaaaaaaabbbbbabbbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbbaaaaabaaaaaabbbaaaabbbbbbbaabaaaaaaaabbbbbbbbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbbbbaaaaabbbbbbbbbbaaabbbbbbbbaabaaaaaaaabbbbbbbbbbabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbbbbaaaaabbbbbbbbbbaaabbbbbbbbaabaaabaaaaabbbbbbbbbbbbbaabbaabbbbbbaaabbabbbaab + abbbaabbbbbbbbaaaaaaabbbbbbabbaaabbbbbbbbaabaaabaaaaaaabbaabbbbbbbaabbaabbbbbbaaabbbbbbaab + ababaabaaaabbbaaaaabbbbbbbbaabaaabbbbbbbbaabaabbabaaaaaaaaababbbbbaabbaaabbbbbaaabbbbbbaab + bbbbaabbaabbbbaaaaabbbbbbbbabaaaabbbbbbbaaabaabbbbaaaaaaabaaaaaabbaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbbaaaaaabbbbbabbbbaaabbbbbbbaabbaababbaaaaaabbbaaabbaaaaabbabbbbbbbaabbbbbbaab + abbbaabbbbabbbbaaaaabbbbbaabbaaaaabbaaaaaabbaaaaaaaaaaabbbbaaaabbbbbabbabbbbbbbaabbbabbaab + abbbaabbbbbbbbbaaaaaaaabbaabbaaaaaaaaaaaaabbaaaaaaaaaaaabbbaaaaaabbbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbbaaaaaaaaaaabbabbbbaaaaaaaabbbabbaaaaaaaaabbbbaabbaabbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaaaaaaabbabbbbaaabbbaabbbabbbaaaaaaaaabbaababbabbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbabbbbbaaaaaaaabaaabaaaaabbbaaabbaaabbbaaaaaaaaaaababbbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaaababbbbbbbbbbaaaaaaaaaaaaabbbaabbbaaabbbbbaaaaaaaabbbbbbbbbaaaabaaaaaaaaaaabbaab + bbbaabbbbbbbaabbbbbbbbbaaaaabbabbbaabbbaabbbaaaabbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaaaabbaab + abbaabbbbbbbabbbbbbbbaaaaaaabbbbbbaabbbaaabbaaaabbbbbbbbbbbbbbbbbbbbabaabbaaabaaabaabbbaba + bbbaabbbbbbbabbbbbbbbaaaaaabbbbbbaaaabbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbaaaaaabbbbbbaaaabbbaabbaaaabbbbbbbbbbbbbbbabbbbbbbabbbabbbaabbbbbbbba + abbbbbbbbbbbabbabbbbbbaaaaabbbbbbbaaabbbbabbaaaabbbbbbbbbbbbbbbabbbbbbabbbbabbbabbbbbbbbba + abbbbabbbbbbabbbbbbbbbaaaaabbbbbbbaaaabbbabbaaaabbbbbbbbbbbbbbabbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbbbabbbbbbbbbaaaababbbbbbaaaaabaabbaaaabbbbbbbbbbbbbaabbbbbbbbabbbbbbbaabbbbbaabb + bbbbaaabbbaaaabbbbbbbaaaaaabbbbbbbaaaaabaabbaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbaababbbaabb + bbbbbbbbbbbbaabbbbbbbaaaaaabbbbbbaaaaaabbabbbaaaabbbbbbbbbbbbbabbbbbbbbbbbbbaaabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbabaaaaabbabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaaabbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbaaaaabbbbbbbbbaaabbbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbbbaaaaaabbbbbbbbaaabbbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbababbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbaaabbaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbabbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaaabbbaabbbbba + bbbbbbbbbbbaaaaaaabbbabbbaaaaaabaaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbbbbbaaaaaabbbbabbbbbbbbbbbaaabbbabbaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaabbbbba + abbbbabbbbbaaaaabbbbaabbabbbbbbbaabbbbbbbbabbbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbababbbbaabbbbbaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbaaabbabbbbbbbbbbbbbaaaaabbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaaaaaaabbbbbabbbbabbbbbbbbbbaaaaaaaaabbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabbbaaaaaaaaaabbbbbbbaaabbbaaaaaabbbbbbbbbaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaaabbbbbbaaabbbbaaaaaaaaaaabbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaabaabbbbaaaaaaaaaaabbbbbbaabbaaabbaaabaaabbbbbbbaabbbaaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbbaabbbaaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaabbbaaaaaaaabbaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaabbbbbbbabbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbaaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaaabbbaabbbbbbbbaabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaaabbbaaaaabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbbbaaaaaabbaabaaabbaabbbbbbbbbbaaaaaaaabbbbabaaaaabbbbbbbbbaaba + ababbabbbbbbbbbbaaababbbaabbbbaaaaaabbbbaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbabba + aaabaabbbbbbbbbbbabbaababaaabbaabbaabbbbbbaabbbbaaabbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbbabbaabbbbbbbbbbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbaabbbbbbbbbaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbaabbaaaabbbaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaabaaaabbbaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbaabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabababbaaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaabaabbaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabbaabbbaaaabbbabbbaaaaaaabbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbbbbbaaaaaaaaababbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbbbabaaabaaaaaababbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbbbbbaabaaabaaaabbbabbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbbbbbaabaabbaabbbbbbbbbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbbbbbaaaabbaabbbbbbaabbbbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbabbbbbaaaaabbbabbbbbbabbbbbbaaabbbaabbbaaaabbbaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbbbbbaaaaaaaabbabbbbbbaaaaaabbbbbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbbbbaaaaaaaaabbaabaabbaaabaaaabbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbbbbaaaaaaaaaaabbbabaabbaabbaaaaabbbbbaaaaaaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaabbbaaaaaaaaaaaaabbbbbaabbaabbaaaaabbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaabbaaaaaaabbaaaaabbbbaabbbaabbaaaaaabbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaabbbbaaaaaabbbbbaaabbbbbbbbaaabbaaaaaabbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbaaaaababbbbaaaabaabbbbaabbbaaaaaabbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaaaaaabaabbbaaaaabbbaaaaabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaaaaabbaabbbbaaaabbaaabaaabaaaaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaaaabbbabbbbaaaaabbbbbaaabbaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaaaabbbaabbbaaaabbbaaaaabbbaaaaaabbbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaaabbbbabbbbaaaaaabbbaabbbaaaaaabbbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaabbabbabbbbaaaabbbaaaabbbaaaaaabbbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbbabbbaaaaabbbbaaaaabbaaaaabbbbaaabaabbaabbbaaaaaabbbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbaaaabbbbbaaabbbbaaabbbbbaabbbaaaaaabbbabbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaabbbaaaaabbbbaaabbbbaaabaaabaabbbaaaaaabbbbbbbaaaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbbaaaaabbbbaaabbbbaaaabbbbaaabaaaaaaabbbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbbbaaaaaabbbabbaabbbbaaabbaaaaabaaaaaaabbbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaabbbaaaaabbbaaabbaabbbbaabbbbaaabaaaaaaabbbbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbaaaabbbbbbbbbbaabbaaabbaaaaabaaaaaaabbbbbbbbbaaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbbaaaabbbbabbbbbbaaaaaaaabbaaabaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbbbaaaabbbbbabbbbbaaaaaaabbbaaabaaaaaaaabbbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbbaaaabbbbaabbbbbaaaaaaaabbaaabaaaaaaaabbbbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbbaaaabbbbaabbbbbaaaaabbbbbbbabaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbbaaaabbbbaabbbbbaaaaabbbbbbbabaaaaaaaabbbbbabbbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbbaaaaabbbaaaabbbaaaabbbbbbbaabaaaaaaaabbbbbbbbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbbbbaaaaabbbbbbbbbbaaabbbbbbbbaabaaabaaaabbbbbbbbbbabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbbbbaaaaabbbbbbbbbbaaabbbbbbbbaabaaaaaaaaabbbbbbbbbbbbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbaaaaabbbbbbbbabbaaabbbbbbbbaabaaabaaaaaaabbaabbbbbbbaabbaabbbbbbaaabbbbbbaab + ababaabaaaabbbaaaaabbbbbbbbaabaaabbbbbbbaaabaabbbbaaaaaaaaaaabbbbbaabbaaabbbbbaaabbbbbbaab + bbbbaabaaabbbbaaaaabbbbbbbbabaaaabbbbbbbaabbaabbbbaaaaaaabaaaaaabbaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbbaaaaaabbbbbabbbbaaabbbbbbbaabbaababbaaaaaabbbaaabbaaaaabbabbbbbbbaabbbbbbaab + abbbaabbbbabbbbaaaaabbbbbaabbaaaaabbaaaaaabbaaaaaaaaaaabbbbaaaabbbbbabbabbbbbbbaabbbabbaab + abbbaabbbbbbbbbaaaaaaaabbaabbaaaaaaaaaaaaabbaaaaaaaaaaaabbbaaaaaabbbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbbaaaaaaaaaaabbaabbbaaaaaaaaabbabbaaaaaaaaabbbbaabbaabbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaaaaaaabbabbbbaaabbbaabbbabbbaaaaaaaaabbaababbabbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbabbbbbaaaaaaaabbaabaaaaabbbaaabbaaabbbaaaaaaaaaaababbbbbbbaabbbbbbbaabbbbbbaab + abbbaabaaabbabbbbbbbbbbaaaaaaaaaaaaabbbaabbbaaabbbbbaaaaaaaabbbbbbbbbaaaabbaaaaaaaaaabbaab + bbbaabbbabbbaabbbbbbbbbaaaaabbababaabbbaabbbaaaabbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbaaaaaaabbbbabaabbbaaabbaaaabbbbbbbbbbbbbbbbbbbbabaabbbaabaaabaabbbaba + bbbaabbbbbbbabbbbbbbbaaaaaabbbabbbaaabbbaabbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbaaaaaabbbbbbbaaabbbaabbaaaabbbbbbbbbbbbbbbabbbbbbbabbbabbbaabbbbbbbba + abbbbbbbbbbbabbabbbbbbaaaaaabbbbbbaaabbbbabbaaaabbbbbbbbbbbbbbbabbbbbbabbbbabbbabbbbbbbbba + abbbaabbbbbbabbbbbbbbbaaaaabbbbbbbaaaabbbabbaaaabbbbbbbbbbbbbbabbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbbbabbbbbbbbbaaaaabbbbbbbaaaaabaabbaaaabbbbbbbbbbbbbaabbbbbbbbabbbbbbbaabbbbbaabb + bbbbaaabbbaaaabbbbbbbaaaaaabbbbbbbaaaaabaabbaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbaababbbaabb + bbbbbbbbbbbbabbbbbbbbaaaaabbbbbbaaaaaaabbabbbaaaabbbbbbbbbbbbbabbbbbbbbbbbbbaaabbbbbbbbabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbabaaaaabbabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbaaaaaabbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbaaaaaabbbbbbbbaaabbbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbbbaaaaaabbbbbbbbaaabbbabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbabaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbabaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbababaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbaaabbaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbabbbbbbbbaaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaabbbbaabbbbba + bbbbbbbbbbbaaaaaaabbbabbbaaaaaabaaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbbbbbaaaaaabbbbabbbbbbbbbbaaaabbbabbaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbaaaaabbbbaabbabbbbbbbaaabbbbbbbabbbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbababbbbaabbbbbaaabbabbbbbbbabbbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbaaabbabbbbbbbbbbbbbabbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaaaaaaabbbbbabbbbabbbbbbbbbbaaaaaaaaabbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabbbbaaaaaaaaabbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaaabbbbbbaaabbbbaaaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaabaabbbbaaaaaaaaaaabbbbbbaabbaaabbaaabaaabbbbbbbaabbbaaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbbaabbbaaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbaaaaaaaaaaaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaabbbbbbabbbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbaaaaaabbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaaabbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaaabbbaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaabbaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbbbaaaaaabbaaaaaabbaabbbbbbbbbbaaaaaaaabbbbabaaaaabbbbbbbbbabba + ababbabbbbbbbbbbaaababbbaabbbbaaaaaabbaaaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaababaaabbaabbaabbbbbbaababbaaabbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbbabbaabbaabbbbbbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbaabbbbbbbbbaaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbaabbaaaabbaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaabbaaaabbbbabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaabababbaaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaabaabbaaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabbaabbbaaaabbbabbbaaaaaaabaaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbbbbbaaaaaaaabbabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaabaaaaaababbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbbbbbaaaaaabaaaaabbabbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbbbbbaabaabbaabbbbbaabbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbbabbbbbbaaaabaabbabbbbbbbbbbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbabbbbbaaaaabbabbbbbbaabbbbbbaaabbbaabbbaaaabbbaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbbbbbaaaaaaabbaabbbbbbaaaabbbaabbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbbbaaaaaaaaaabbaabbabbaaaaaabbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbbbbaaaaaaaaaaabbabbaabbaaabaaabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaabbbaaaaaaaaaaaaabbbbbaabbaabbaaaaabbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaabbbaaaaaaabbaaaaabbbbaabbbaabbaaaaabbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaabbbbaaaaaabbbbaaaabbbbabbbaaabbaaaaabbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaaaaabbbbbbbaaabbaabbbbaabbbaaaaaabbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaaaaabaabbbbaaaabbbaaabaabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaaaabbaabbbbaaaaaaabbbbaaaaaaaaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaaabbabbbbbaaaaabbbaaaaabbaaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaaaabbbabbbbaaaabbaabbaabbbaaaaaabbbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaabbbbabbbbaaaaabbbbaaabbaaaaaaabbbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbabbbbaaaabbbabbaabbaaaaaaabbbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbbaaaaabbabaabbbbaaaaaabbbaabbaaaaaaabbbbababbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbaaaabbbbaaaabbbaaaabbbaaaabbbaaaaaabbbabbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaabbaaaaabbbbaaaabbbbaaababbbaabbaaaaaaabbbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbaaaaaabbbbbaabbbbaaabbbaaaaabaaaaaaabbbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbbbaaaaaabbbabaaabbbbaaaaabbaaabaaaaaaabbbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaabbbaaaabbbbaabbaaabbbaaabbbaaabbaaaaaaabbbbbbbbaaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbaaaabbbbbabbbbaaaaaaaabaaaaabbaaaaaaaabbbbbbbbaaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbaaaabbbbbbbbbbbaaaaaaaabbbaabbaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + bbbbaabbbbbbbbaaaabbbbbabbbbbbaaaaaabbbbbaabaaaaaaaabbbbbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbaaaaabbbbaabbbbbaaaaaabbbbbbabaaaaaaaabbbbbaabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbaaaabbbbbaaabbbbaaaaabbbbbbbabaaaaaaaabbbbbaabbaaaaabbbaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbaaaabbbbbaaabbbbaaabbbbbbbbaabaaaaaaaabbbbbabbbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbaaaabbbbbaaabbbbaaabbbbbbbbaabaaaaaaaabbbbbbbbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbbbaaaaaabbbbbbbbbbbaaabbbbbbbabbaaabaaaabbbbbbbbaaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbbbaaaaaabbbbbbbbbbaaaabbbbbbaabbaaabaaaabbbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbaaaabbbbbbbbbabbaaabbbbbbbaabbaabaaaaabbbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + ababaabaaaabbbaaaabbbbbbbbbabbaaabbbbbbbaabbaabbaaaaabbbbbbbbbbbbbaabbaaabbbbbaaabbbbbbaab + bbbbaabaaabbbbaaaabbbbbbbbbbbaaaabbbbaaaaabbaabbaaaaaaabbbbbabbbbbaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbabbbbaaaaaabbbbbabbbaaaaaaaaaaaaabbaabbbaaaaaaaabbaabbbbabaabbabbbbbbbaabbbbbbaab + abbbaabbbbabbbaaaaaabbbbbaabbabbaaaaaaaaaabbbabbbaaaaaaaaaaaabbbbbbbabbabbbbbbbaabbbabbaab + abbbaabbbbbbbbbaaaaaaaaabaabbbbbbaaabbaaabbbaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbbaaaaaaaaaaabaaabbaaaabbabaabbaaaaaaaaaaaaaabbbaaaabaaabaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaaaaaaabaaaaaaaaabbababbbaabaaaaaaaaaabbbbaaaabbbbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbbbbbbbaaaaaaaaaaabaabbaaabbbabbaaaaaaaaaaabbbbaaaaabbbaabbbbbbbaabbbbbbaab + abbbaabaaabbabbbbbbbbbbaaaabbbbaabbabbbaabbbaaaabaaaaaaaaaabbbaaabaaabbaabbaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbbbaaaabbbbbabbabbbaaabbaaaabbbaaaaaaaabbaaaaabbaabaaaaaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbbaaaabbbbbbabbaabbaaabbaaaabbbbbbaaaaaaaaaababbbbbabbbaabaaabaabbbaba + bbbaabbbbbbbaabbbbbbbbbaaaabbbbbbbbaaabbbabbaaaabbbbbbbbaaaaaabbbbabbbbabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbbaaaaabbbbbbbbaaaabbabbaaaabbbbbbbbbbbaabbbbbbbbbbbbbbabbbaabbbbbbbba + abbbbbbbabbbaababbbbbbaaaaabbbbbbbbaaaabbabbaaaaabbbbbbbbbbbbbbbbbbbbbbabbbabbbabbbbbbbbba + abbbaaabbbbbabbbbbbbbaaaaaabbbbbbbbaaaabbabbaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbbbabbbbbbbbaaaaaabbbbbbbaaaaabbabbaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabbbbbaabb + bbbbaaabbbaaaabbbbbbbaaaaaabbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbaabb + bbbbbbbbbbbbabbbbbbbbbaaaaabbbbbaaaaaaabbbbaaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbaaabbbbbbbbabb + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaaabbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaaabbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbaaaaaabbbbbbbbbaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbaaaaaabbbbbbbabaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbabbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbaabbaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbbabbbbaabbbbba + bbbbbbbbbbbbaaaaaabbbabbbaaaaaabaaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbbbbbbaaaaabbbbabbbbbbbbbbaaaabbaabbaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaabbbbbbaabbbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbabaabbbaabbbbbaaabbabbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbaaabbabbbbbbbbbbbbbabbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbabbbbabbbbbbbbbbbbbaaaaabbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabbbbaaaaaaaaabbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbabaaabbbbba + abbbbbbaaabbbbaabbaaabbbbbbaaabbbbaaaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaabaabbbbbaaaaaaaaaabbbbbbaaabaaabbaaabaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbaaabbbaaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbaaaaaaaaaaaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaaababbbabbbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaababbbbbbbaaabbbaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaabbaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbbbaaaaaabbaaaaaabbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbaaababbbaabbbbaaaaaabbaabaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaababaabbbaabbaabbbbaaaababbaaabbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbbabbaabbaabbbbbbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbaabbbbbbbbbbaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbabbbabbbbbaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaabbaaaabbbaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaaaaabbbaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbaabb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaabbbabbaaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabbaabbbaaaabbbabbbaaaaaaabaaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaaaaabbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaaaaabbabbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbbbbbabaaaaaaaaaaababbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbbbbbaabaaabaaabbbbaabbbbaaabaaabbbaaabaaabbabbbabbbbbbbbaabbbbbba + abbbbbbbbaaabbbbbbbaabbbbbbbaaabbabbaabbbbbbabbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbabbbbbaaaaabbabbbbbbabbbbbbbaaabbbaabbbaaaabbbaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbbbbbbaaaaaabbaabbbbbbaaaabbbaabbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbbbbaaaaaaaabbaabbbabbaaaabbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbbbbaaaaaaaaaaabbabbaabbaaabaabbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaabbbbaaaaaaaaaaaabbbbbaabbaabbaaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaabbaaaaaaabbaaaaabbbbbabbbaabbaaaaabbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaabbbbaaaaaabbbbaaaabbbbaabbbaabbaaaaabbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaaaaaabbbbbaaaabbbbbbbbaaabbaaaaaabbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaaaaabaabbbbaaaabaabbbbaabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaaaabbaabbbbaaaaabbaaaaaaabaaaaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaaabbabbbbbaaaabbaaabbaabbaaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaaaabbbabbbbaaaaaabbaaaabbaaaaaaabbbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbaaaaabbbbabbbbaaaabbaabbaabbaaaaaaabbbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaababbabbbbaaaababbbbaabbaaaaaaabbbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbbaaaaabbbbaabbbaaaabbbbaaaabbaaaaaaabbbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbaaaaabbbbaabbbbaaaabaabbaabbaaaaaaabbbabbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaabbbaaaabbbbbaaabbbbaaabbbbaaabbaaaaaaabbbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbaaaaaabbbaaaabbbaaaabaabaaabbaaaaaaaabbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbbbaaaaaabbbbbaabbbbaaabbbbaaabbaaaaaaaabbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaabbbaaaaabbbbbbaaabbbbaabbabaaabbaaaaaaaabbbbbbbaaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbaaaabbbaaabbaaaabbaaabbbbaabbaaaaaaaabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbaaaabbbbabbbbbbaaaaaaabbaaaabbaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + bbbbaabbbbbbbbaaaabbbbbabbbbbbaaaaaaaabbaabbaaabaaaabbbbbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbaaaabbbbbaabbbbbaaaaaabbbbbbabaaaaaaaabbbbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbaaaaabbbbaabbbbbaaaaabbbbbbaabaaaaaaaabbbbbaabbaaaaabbbaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbaaaabbbbbaaabbbaaaabbbbbbbbaabaaaaaaaabbbbbabbbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbaaaabbbbaaabbbbbaaabbbbbbbbabbaaabaaaaabbbbbbbbaabbaaaabaabbbbbbaaabbabbaabb + bbbbaabbbbbbbbaaaaaabbbbbabbbbaaabbbbbbbaabbaaabaaaaabbbbbbbbaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbbbaaaaaabbbbbbbbbbaaabbbbbbbaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbaaaabbbbbbbbbabbaaabbbbbbbaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbabbaab + ababaabaaaabbbaaaabbbbbbbbbabbaaabbbbbbbaabbaabbaaaaabbbbbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbaaaaabbbbbbbbbbbaaaabbbbbaaaabbaabbaaaaabbbbbbbbbabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbabbbbaaaaabbbbbbbbbbaaaaaaaaaaaaabbaabbaaaaaabbbbbbbbbbbaaaabbabbbbbbbaabbbbbbaab + abbbaabbbbbbbbaaaaaabbbbbabbbaaaaaaaaaaaaabbaabbaaaaaaaabbbbbabbbabbabbabbbbbbbaabbbabbaab + abbbaabbbbbbbbaaaaaaaaabbaabaabbbaaababbaabbaabbaaaaaaaaaabbaabbbbbbbbaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbaaaaaaaaaaaabbabbbaaaabaaaaabbaaaaaaaaaaaaaaaaaababbbbbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbaaaaaaaaaaabaaabaaaaababbabbbaabaaaaaaaaaaaabaaaaaaaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaaaaaaaaaaaaaaaaabaaaabbbabbaaaaaaaaaaabbbaaaabbaabaabbbbbbbaabbbbbbaab + abbbaaaaaabbabbbbbbbbbbaaaabbbaaabbabbaaaabbabbbaaaaaaaaaabbbbaaaaabbbbaabbaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbbaaaaabbbbbabbabbbaaabbaaaaaaaaaaaaaabbbbaaabbabbbaaaaaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbbaaaabbbbbbabbaaaaaaabbaaaaabbaaaaaaaabbbbaaabbaabbbbbaabaaabaabbbaba + bbbaabbbbbbbabbbbbbbbbaaaaabbbbbbbaaaabbbabbaaaaabbbaaaaaaaabaaaabaabbbbbbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbbaaaaabbbbbbbbaaabbbabbaaaaabbbbbbaaaaaaabbabbabbbbbbbabbbaabbbbbbbba + abbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbaaaaabbabbbbbbabbbabbbabbbbbbbbba + abbbaaabbbbbabbabbbbbbaaaaabbbbbbbaaaaabbbbaaaaaabbbbbbbbbbaabbbbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbababbbbbbbbbaaaaabbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabbbbbaabb + bbbbaaabbaaaabbbbbbbbbaaaaabbbbbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbaababbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbaaaabbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbaaaaaabbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbaabbaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbbabbbbaabbbbba + bbbbbbbbbbbbaaaaaabbbabbbaaaaaabbaaaaaaabbaaabbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbbbbbbaaaaabbbbabbbbbbbbbbaaaabbaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaabbbbbaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbabaabbbaabbbbbaaaababbbbbbbaaabbbbbbbabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbaaabbabbbbbbbabbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbaabbbabbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabbbbaaaaaaaaabbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbabaaabbbbba + abbbbbbaaabbbbaabbaaabbbbbbbaabbbbaaaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaaabbbaabaabbbbbaaaaaaaaaabbbbbbaaabaaabbaaabaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbbaaaaaaaaaaabbbbbbaabbbaaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaaaaabaaabbbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaababbbbbbbaaabbbaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbabbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaaabbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbbbaaaaaabbbbbbbabbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbaaababbbaabbbbaaaaaabbaaaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabbbaabbbaaaaaabbbaaaaababbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaabbaabbbbbbaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaabbaabbbbbbaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbabbbbbbbbbbaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaabbaaaabbaaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaabaaaaabbbbabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbaaaabababbaaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabbaabbbaaaabbbabbbaaabbaabbaaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaaaaabaaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaaaabbaabbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaaaaaababbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbbbbbaaaaaabaaaabbbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbbbbbbbaabaabbaaabbbbbbabbaaaabbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbabbbbbbaaaabbabbabbbbbbbbbabaaabbbaabbbaaaabbbaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbbbbbbbaaaaabbabbbbbbbaaaabbbaabbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbbbbbaaaaaaabbaabbbbbbaaaabbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbbbbbaaaaaaaaabbbabaaabbaaabaabbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaabbbbaaaaaaaaaaabbabaaabbaaabaaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaabbbaaaaaaaaaaaabbbbbbaabbaabbaaaaabbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaabbbbaaaaaaabbaaaaabbbbaabbbaabbaaaaabbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbaaaaabbbbbaaaabbbbabbbbaabbaaaaaabbbaaabbaaabbbaabbabbbbbaaaaaababaaaaaa + bbabbbbbaaaabbbbbaaaaaaabbbbbaaabbabbbbbaabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaaaabbaabbbbaaaabbaaaabaaabaaaaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaaabaaabbbbaaaaaaabbbaaabbaaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaaaaabbbbbbaaaaabbbaaaaabbaaaaaaabbbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaabbbbabbbbaaaabaabbbaabbaaaaaaabbbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaaabbbabbbbaaaaabbbaaaabbaaaaaaabbbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbbbaaaabbbbabbbbaaaabbaabbaabbaaaaaaaabbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbaaaaabbbbaabbbbaaaaabbbaaabbaaaaaaaabbbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaabbbaaaaabbbaaabbbbaaaabbaaaaabbaaaaaaaabbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbbaaaabbbbaaaabbbaaaaaabbbaabbaaaaaaaabbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbbbbaaaaabbbbaaabbbbaaabbbaaaabbaaaaaaaabbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaabbbaaaaaabbbabaabbbbbaababbbaabbaaaaaaaabbbbbbbaaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbaaaabbbaabbaaabbbbaaabbaaaabbaaaaaaaabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbbaaaabbbbabbbbaabaaaaababbaabbaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + bbbbaabbbbbbbbbaaabbbbaabbbbbbaaaaaabbbaaabbaaabaaaabbbbbbbbaaaaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbaaaabbbbaabbbbbbaaaaaabaaaaabbaaaaaaaabbbbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbaaaaabbbbaabbbbaaaaaaaabbbaabbaaaaaaaabbbbbaabbaaaaabbbaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbaaaabbbbbaaabbbaaaaaabbbbbbabbaaaaaaaabbbbbabbbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbaaaabbbbaaaabbbaaaaabbbbbbbabbaaabaaaaabbbbbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbbbaaaabbbbaaabbbbaaaabbbbbbbbabbaaabaaaaabbbbbbbbaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbbbaaaaaabbbbbbbbbaaaabbbbbbbbabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbaaaaaabbbbbbbbbbaaabbbbbbbaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbabbaab + ababaabaaaabbbaaaabbbbbbbbbabbaaabbbbbbbaabbaabbaaaaabbbbbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbaaaaabbbbbbbbbabbaaabbbbbbbaabbaabbaaaaabbbbbbbbbabbaaabbaaaaaaaaaaabaaaaaaaa + bbbbaabbbabbbbaaaaaabbbbbbbabaaaabbbbbbbaabbaabbaaaaabbbbbbbbbbbbaaaabbabbbbbbbaabbbbbbaab + abbbaabbbbbbbbaaaaabbbbbbbbbabaaabbbbbbaaabbaabbaaaaaabbbbbbbbbbbaababbabbbbbbbaabbbabbaab + abbbaabbbbbbbbaaaaaabbbbbabbaaaaaaaaaaaaaabbaabbbaaaaaaabbbbabbbbbbbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbaaaaaaaaabaabbbaaaaaaaaaaaaabbaabbaaabaaaaaabaabbbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbaaaaaaaaaaabaabbbbaaababbaabbabbbaaaaaaaaaaaabaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbaaaaaaaaaaaaaabbbaaaabaaaaabbabbaaaaaaaaaaabbbaaaaabbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbbbbbbaaaaaaaaaaaabaaaaaabbaaaabbaaaaaaaaaaaaabbbbaaabbbbbbaaabbaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbbbaaaaaaaaaabaabbbaaabbaaaaaaaaaaaaabbbbaaaaabbbbaaaaaaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbbaaaaabbbbbbbaabbaaaabbaaaabaaaaaaaaabbbbaaababbbaabbbaabaaabaabbbaba + bbbaabbbbbbbabbbbbbbbbaaaaabbbbbbbbaaaabbabbaaaabbbaaaaaaabbbaaaaabbbaaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbbaaaaaabbaabbbaaabbbabbaaaabbbbaaaaaaaabbaabbbbbbbabbbabbbaabbbbbbbba + abbbbbbbbbbbabbbbbbbbbaaaaabbbabbbbaaaabbbbbaaaabbbbbbaaaaaaabbabbbbbbbabbbabbbabbbbbbbbba + abbbaaabbbbbabbbbbbbbbaaaaabbbbbbbbaaaabbbbaaaaaabbbbbbaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbababbabbbbbbaaaaabbbbbbbaaaaabbbbaaaaaabbbbbbbbbaaabbbbbbbbbbabbbbbbbaabbbbbaabb + bbbbaaabbaaaaabbbbbbbbaaaaabbbbbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbaababbbaabb + bbbbbbbbbbbbbbbabbbbbbaaaaabbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaabaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbaaaabbbabbbaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbaaaabbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbaaaabbbbbabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbbbbabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbaabbaaaaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbbabbbbaabbbbba + bbbbbbbbbbbbaaaaaabbbabbbaaaaaabbaaaaaaabbaaabbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbbbbbbaaaaabbbbabbbbbbbbbbaaaabbaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaabbbbbaaaabbbbbbaabaaaaaaaaaaaabbbbbbabbbaaabbbbaaabbbba + abbbbabaabbbaabbbbbaaaababbbbbbbaaabbbbbbaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaabaaaabbbbbaaabbabbbbbbbabbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaaaaaaabbbbbaabbbabbbbbbbbbbbbaabbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaabbbbbbaaaaaabbbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbabaaabbbbba + abbbbbbbaabbbbaabbaaabbbbbbbaabbbbaaaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaaabbbaabaaabbbbaaaaaaaaaabbbbbbaaabaaabbaaabaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbbaaaaaaaaaaabbbbbbaabbbaaabaaabaaaababbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaaaaaaaaabbbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbaaaaaabbbbbaabbbaaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaaabbbbbbbabbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbbbaaaaaabbbbbbbabbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbaaababbbaabbbbaaaaaabbaaaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabbbaabbbaaaaaabbabaaaababbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbbabbaaaaabbbbbaaaaabbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaabbabbbbbbbaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbaabaabbbbbbaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaabbbbabbbaaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaabaaaabbbaaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbaaaaaaaabbaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabbaabbbaaaabbbabbbaaaababbbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaaaaabaaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaaaaaabbaabbbbbbaaaabbbbaaaabbbabbaabaabbbabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaaaaabbabbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbabbbbabbbbaaaaaaaaaaaabaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbbabbbbaabaaabaaabbbbbbbbbaaaabbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaabbbbbbaaabbabbaabbbbbbbbaaaaabbbaabbbaaaabbbaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbabbbbbaaaaabbabbbbbbbaaaabbaaabbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbbbbbbaaaaaabbaabbbbbbaaaabbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabbbbbbaaaaaaaabbbabababbaaababbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaabbbbbaaaaaaaaaabbabaaabbaaabaaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaabbbbaaaaaaaaaaaabbaabaabbaabbaaaaabbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbbaaaaaaabbbaaaabbbbbabbbaabbaaaaaabbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbaaaaaaabbbaaaabbbbaabbbaabbaaaaaabbbaaabbaaabbbaabbabbbbbaaaaaababaaaaaa + bbabbbbbaaaabbbbbbaaaaaabbbbbaaabbbbbbbbaabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaaaaabaabbbbaaaaaaabbbbaaabaaaaaaabbbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaaabbabbbbbaaaaabbbaaaaabbaaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaaaabbabbbbaaaabbaaabbaabbaaaaaaabbbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaaabbbabbbbaaaaabbbbaaabbaaaaaaabbbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaabbbbabbbbaaaabbbaaaaabbaaaaaaabbbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbaaabbaaaaabbbbbaaaaabbbabbbbbaaabaabbbaabbaaaaaaaabbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbbaaaabbbbabbbbaaaabbbbaaaabbaaaaaaaabbbbbbbbaaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaabbbaaaaabbaaaabbbaaaaabaabbaabbaaaaaaaabbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbbaaaaabbbaaaabbbaaaabbbbaaaabaaaaaaaabbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbbbbaaaaabbbaaabbbbbaaabaabaaabbaaaaaaaabbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaabbbaaaaaabbbbaaabbbbaaabbbbaaabbaaaaaaaabbbbbbbaaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbaaaaabbbabbaabbbbaaabbaaaaabbaaaaaaaabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbbaaaabbbbabbaabbbbaaaabbbbaabbaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + bbbbaabbbbbbbbbaaaabbbbbbbbaabbbaaaabbaaaabbaaabaaaabbbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbbaaaabbbaabbbbaabbbbaababbaabbaaaaaaaabbbbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbaaaabbbbbaabbbbaabbaaaabbaaabbaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbaaaaabbbbaabbbbaaaaaaabbbbaabbaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbaaaabbbbbaaabbbaaaaaaaaabaaabbaaabaaaaabbbbbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbbbaaaabbbbaaaabbbaaaaaaaabbaaabbaaabaaaaabbbbbbbbaabbaaabbaabbbbbbbaabbabbaaab + bbbbaabbbbbbbbaaaababbaaabbbbaaaaabbbbbbaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbaaaaaabbbbbbbbbaaaaabbbbbbbabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbabbaab + ababaabaaaabbbaaaabbbbbbbbbbbbaabbbbbbbbbabbaabbaaaaabbbbbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbbaaaabbbbbbbbbbbaaaabbbbbbbaabbaabbaaaaabbbbbbbbaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbabbbbaaaaaabbbbbbbbbaaabbbbbbbbaabbaabaaaaaabbbbbbbbbbbbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbbbbbaaaaaabbbbbbbbbaaabbbbbbbaaabbaabaaaaaaabbbbbbbbbbbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbbbbbaaaaaabbbbbbbbbaaabbbbbbbaaabbabbaaabaaaaabaabbbbbaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbaaaaaaaabbaabbbaaabbbbbbbaaabbabbaaaaaaaaaaabaaabbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbaaaaaaaabaabbaaaabbbbbbbaaabbabbaaaaaaaaabbaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbaaaaaaaaaaaabaaaabbbbbaaaaabbabbaaaaaaaabbbaaaabbbbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaaaaaabbbbaaabbbbaabbaaabbaaaaaaaaaabbaab + bbbaabbbabbbbbbbbbaaaaaaaaaabbbaaaaaaaaaaabbaaaaaaaaaaabbbbaaabbbbbabbaaaaaaaaaaaaaaabbaab + bbbaabbbabbbabbbbbbbbbaaaaaabbbaaaaaabaaaabbaaabbaaaaaabbbbaaabbbbbbbbaabbbaabaaabaabbbaba + bbbaabbbbbbbabbbbbbbbbaaaaaabaaabaaaaaaaaabbaaabbbaaaaaabbbaabbbbbaabaaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbbaaaaaaaaabbbaaaaabbabbaaaabbbaaaaaaaababbbbbbbbbbabbbabbbaabbbbbbbba + abbbbbbbbbbbabbbbbbbbbaaaaabbbbbbbaaaaabbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbabbbabbbbbbbbba + abbbaaabbbbbabbbbbbbbbaaaaabbbabbbbbbaaabbbbaaaabbbbbbaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbababbbbbbbbbaaaaabbbbbbbbbaaaabbbbaaaaabbbbbbbaabbbbbbbbbbbbbabbbbbbbaabbbbbaabb + bbbbaaabbaaaabbbbbbbbbaaaabbbbbbbbbaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbaababbbaabb + bbbbbbbbbbbbbbbabbbbbbaaaabbbbbbbbbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabb + bbbbbbbbbbbbbbbabbbbbbaaaabbbbbbabbaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbabbbbbaaaaabbbbbaabbbaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaaabbabbbbbbbbaaabbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabbabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbaabbaaaaaaabbaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaabbaaaabbbaababaabbbbba + bbbbbbbbbbbbaaaaaabbbabbbaaaaaabbaaaaaaabbaaabbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbbbbbbaaaaabbbbabbbbbbbbabbaaaabaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaabbbbba + abbbbabbbbbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbabaabbbaabbbbbaaaababbbbbbbaaabbbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaabaaaabbbbbaaabbabbbbbbbaaabbbbbbabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaaaaaaabbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbabaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbbaabbbbbaabbaabbbbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaabaabbbbba + abbbbbbbaabbbbaabbaaabbbbbbbaabbbbbaaaaaaaabbbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaaabbbaaaaaaabbbaabaaabbbbaaaaaaaaaabbbbbbaaabaaabbaaabaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbbaaaaaaaaaaabbbbbbaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaaaaaaaaabbabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbaaaaaaaabaaaabbbaaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaaabbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbaaaaabbbbbbbabbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaabbbbbbbabbbaabbbbbbbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaaabbbbaaaaabbbbbbbabbbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbaaababbbaabbbbaaaaabbbbbbbaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabbbaabbbaaaaabbaaaaaaababbaabbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaaaaabbabbaaababbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaaaaabbbbbbaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbaaaaabbbbbbaabbbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaaababbbaaaabbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaaabbbaaabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaaabbbbabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabbaabbbaaaabbbabbbaaaaabbbaaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaaaabbaaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaaaaabbaaabbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaaaaabbabbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabbbbbbaaaaaaaaaabaabbbbaaabaaabbbbaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbbaabbbbabaaaaaaaabbbbabbbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaabaabbbbaabaaabaabbbbbbbbaaaaabbbaabbbaaaabbbaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbaabbbbbbaaabbaabaabbbaaaabbaaabbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbabbbbbaaaaabbbababbbbaaaabbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabbabbbbbaaaaaaabbababbabaaababbbbbbbbbaaaaaaaabbbaaabbaaabbbbbbbbaabbbbba + bbaaaaabbbabbbaaaabbbbbaaaaaaaaabbaaaaaabaaabaaabbbbbbbbaaaaaaabbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaabbbbbaaaaaaaaaabbaaaaabbbaabaaaabbbbbbbabbaaaabbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbbbbaaaaaaaaaaaabbbabaabbbabbaaaaaabbbbaabbbaaabbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbbaaaaaabbbaaaabbbbaabbbaabbaaaaaabbbaaabbbaaabbaabbabbbbbaaaaaababaaaaaa + bbabbbbbaaaabbbbbbaaaaaaabbbbaaabbbbbbbbbabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbbaaaaaabbbbbaaabbbbbbbbaaaaaaaaaaaabbaaabbaaabbaaabbabbbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbbaaaabaabbbbaaaaabaaaabaaabaaaaaaaabbaaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbbaaaaaaabbbbaaaaaabbbbbaabbaaaaaaaabbbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaaabbbabbbbaaaabbbaaaaabbaaaaaaaabbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaaaabbabbbbaaaabaaabbaabbaaaaaaaabbbaaabbaaaabbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbbbaaaaaabbabbbbbaaaabbbbaaabbaaaaaaaabbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbbaaaaabbbaabbbbaaaabaaabaabbaaaaaaaabbbbbabbaaaaaabaaaabaabbaabbbaaaabbbba + bbbaaaaabbbaaabbbaaaabbbbaabbbbaaaaabbbbaabbaaaaaaaabbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbbbaaaabbbbaaabbbaaaabbbaaaaabaaaaaaaabbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbbbbaaaaabbbbaaabbbbaaababbbaaabaaaaaaaabbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaabbaaaaabbbbaaabbbbaaabbbaaaaabaaaaaaaabbbbbbbaaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbbaaaaabbbbbaaabbbaaaababbaabbaaaaaaaabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbbbaaaabbaabbaaabbbaaaabbbaaabbaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + bbbbaabbbbbbbbbbaaabbbbbbbbaabbbaaaabaabaabbaaabaaaabbbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbbaaaabbbaabbbbaabbbaaaabbbaabbaaaaaaaabbbbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbbaaaabbbaabbbbaabbbaaabbaaaabbaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbbaaaabbbaaabbbaabbbaaaabbbaabbaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbbaaaabbbaaabbbbabbbbaaabbaaabbaaaaaaaaabbbbbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbbbbaaaabbbaaabbbbaabbbaaabbbaabbaaabaaaaabbbbbbbbaabbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbbbbaaaabbbaaabbbbaaabaaaabbbaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbbaaaaabbaaaabbaaaabaaaaaaaaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbaabbaab + ababaabaaaabbbbaaaabbbbaaabbaaaaaaaaaabaaabbaabbaaaaabbbbbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbbaaaaabbbbaaabbaaaaaaababbaaabbaabbaaaaabbbbbbbbaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbbaaaaaabbbbbbbbaaaaabbbbbaaaabbaabaaaaaabbbbbbbbaabbaaaabbabbbbbbbaabbbbbbaab + bbbbaabbbbabbbaaaaaabbbbbbbbaaaabbbbbbbbaabbaabaaaaaaaaaabbbbaabbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbbbbbaaaaaabbbbbbbbbaabbbbbbbbaaabbaabaaaaaabaaabbbbaabaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbbaaaaabbbbbbbbaaabbbbbbbbaaabbabbaaaaabbbbabbbbaababbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbaaaaaaabbaabbaaabbbbbbbbaaabbabbaaaaabbbbbbbbbaababbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaaabbaabbaaabbbbbbbbaaabbaaaaaaaabbbbbbbbbaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbbbbbaaaaaaabaaabaaabbbbbbbaaaabbaaaaaaaaabbbbbbbbaaabbbabbaaabaaaaaaaaaaabbaab + bbbaabbbabbbabbbbaaaaaaaaaabaaabbbbbbbaaaabbaaaaaaaaaabbbbbbbbaabbbabbaaaaaaaaaaaaaaabbaab + abbaabbbabbbabbbbbaaaaaaaaaaaaabbbbbbbaaaabbaaabaaaaaaaabbbbbbbbbbbbbbaabbaaabaaabaabbbaba + bbbaabbbbbbbabbbbbbbbaaaaaaaaaaabbbbbaaaaabbaaabbaaaaaaabbbbbbbbbbabbaaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbbaaaaabbaaaaaaaaaaababbaaabbbaaaaaabbbbbbbbbbbbbbbabbbabbbaabbbbbbbba + bbbbbbbbbbbbabbbbbbbbbaaaaabbbaaaaaaaaabbbbbaaaabbbbaaaabbbbbbbbbbbbbbbabbbabbbabbbbbbbbba + abbbaaabbbbbabbbbbbbbbaaaaabbaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbab + bbbbaababbababbbbbbbbbaaaaaaaaaabaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaabb + bbbbaaabbaaaabbbbbbbbbaaaaaabaaabbabaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaabb + bbbbbbbbbbbbbbbabbbbbbaaaaabbaabbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbaabbbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbabbbbbbaaaabbaaabbbbbbaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbaaabbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbaaabbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbaabaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbabbbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaabbbbaabbbbba + bbbbbbbbbaaaaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbabbbaaaaabbbbabbbbbbbbbbaaaaabaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbaabbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaabaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbabaabbaaabbbbbaaaababbbbbbbaaabbbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaabaaaabbbbbaaabbabbbbbbbaaabbbbbbabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaabaaaabbbbbaabbbabbbbbbabbbbbbbbbbbbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaabbbbbaabbaabbbbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaabbbbbaaaaaaaabbbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaaabbbaaaaaabbbbaaaaaaaaaabbbbbbaaabaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaabbbbbaaaaaaaaaaabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbbaaaaaaaaaaaabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaabbbbba + abbbaaaaabbbbbbbaaabbbbaabbbbbbaaaaaaaaaaaabbbbbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbaaaaaaaabaaaabbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbaaaaaabbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbaaaaabbbbbbbabbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaaabbbbbbbabbbaabbbbbbbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaaabbbbaaaaabbbbbbbabbbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbaaababbbaabbbbaaaaabbbbbbbaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaababaabbbaaaaabbaaaaaaababbaaabbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaaaaabbabbaaababbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaaaaabbbbbbaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbaaaaabbbbbbaabbbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaaababbbaaabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaaabbbaaabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaaaaaabbbbabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabbaabbbaaaabbbabbbaaaaabbbaaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaaaabbaaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaaaaabbaaabbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaaaabbbabbbbbaaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaabbbbabbbbabaaaaaaaaaabaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbbaabbbbabaaaaaaaabbbbaabbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaabbabbbbbaabaaabaabbbbbbbbaaaaabbbaabbbaaaabbaaaabbbaabbbabbbaaabbbbba + abbbbbbbbbabbbbbbbbbaabbbbbbaaabbbabaabbbaaaabbaaabbbbbaabaaaabbbbaaaaabaabbbabbbaaabbbbba + aabbbbbbbbabbbbbbbbbabbbbbaaaaabbaabbbbbbaaaabbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabbabbbbbaaaaaaabbababbabaaababbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaabbbbbaaaaaaaaabbabaaaabaaabaaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaabbbbbaaaaaaaaaabbaaaaabbbaabaaaabbbbbbbabbaaabbbaabaabbaaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbbbbaaaaaaaaaaaabbbabaabbbaabaaaaaabbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbbbaaaaaabbbaaaabbbbaabbbaaabaaaaaabbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbbaaaaaabbbbbaaabbbbbbbbbabbbaaaaaabbbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbbaaaaabbbbbbaaabbbbbbbbaaaaaaaaaaabbbaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbbaaaababbbbbaaaaabaaaabaaabaaaaaaabbbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbbaaaaaaabbbbbaaaaabbbbbaabbaaaaaaaabbbbaabaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaaaabbbabbbbaaaabbbaaaaabbaaaaaaaabbbaaabbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaaaabbabbbbaaaabaaabbaabbaaaaaaaabbbaaabbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbbbaaaaaaabaabbbaaaaabbbbaaabbaaaaaaaabbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbbaaaaabbbaabbbbaaaabaaabaabbaaaaaaaabbbbbabbaaaaaabaaaabaabbaabbbaaaabbbba + bbbaaaaabbbaaabbbaaaabbbbaabbbbaaaaabbbbaabbaaaaaaaabbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbbbbbaaaabbabaaabbbaaaabbbaaaaabaaaaaaaabbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbbbbaaaaabbbbbaabbbbaaababbbaaabaaaaaaaabbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaabbaaaaabbbbaaabbbbaaabbbaaaaabaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbbaaaaabbbbbaaabbbaaaababbaabbaaaaaaaabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbbbbaaaaabbabbaaabbbaaaabbbaaabbaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + bbbbaabbbbbbbbbbaaaabbbabbaaabbbaaaabaabaabbaaabaaaabbbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbbaaaabbbaabbbbaabbbaaaabbbaabbaaaaaaaabbbbbaabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbbaaaabbbaabbbbaabbbaaabbaaaabbaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbbbaaaabbbaaabbbbabbbaaaabbbaabbaaaaaaaabbbbbaabbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbbbbaaaabbbaaabbbbabbbbaaabbaaabbaaaaaaaaabbbbbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbbbbaaaabbbaaabbbbaabbbaaabbbaabbaaabaaaaabbbbbbbbaabbaaabbaabbbbbbaaabbaabaaab + bbbbaabbbbbbbbbaaaabbbaaabbbbaabbaaaabbbaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbbaaaaabaaaabbbbaaabaaaaaaaaabbaaabaaaaabbbbbbbbaabbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaabbbbaaaabbaaaaabbaaaabaaaaabaaabbaabbaaaaabbbbbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbbaaaaabbbbaaabbaaaaaaaaabbaaabbaabbaaaaabbbbbbbbaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbbaaaaabbbbbbbbbaaaaabbbbbbaaabbaabaaaaaabbbbbbbbaabbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabbbaaaaabbbbbbbbbaaaabbbbbbbbaabbaabaaaaaaaaaabbbbaabaabbabbabbbbbbbaabbbabbaab + bbbbaabbbbbbbbaaaaaabbbbbbbbbaabbbbbbbbaaabbaabaaaaaabaaabbbbaabaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbbaaaaabbbbbbbbaaabbbbbbbbaaabbabbaaaaabbbbabbbbaababbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbaaaaabbbbabbbaaabbbbbbbbaaabbabbaaaaabbbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaaaabaabbaaabbbbbbbbaaabbaaaaaaaabbbbbbbbbaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbbbbbaaaaaaaaaaabaaabbbbbbbaaaabbaaaaaaaaabbbbbbbbaaabbbabaaaabbaaaaaaaaaabbaab + bbbaabbbaabbabbbbaaaaaaaaaabaaabbbbbbbaaaabbaaaaaaaaaabbbbbbbaabbbaabbaaaaaaaaaaaaaaabbaab + abbaabbbabbbabbbbbaaaaaaaaaaaaabbbbbbbaaaabbaaabaaaaaaaabbbbbbbbbbbbbbaabbbaabaaabbabbbaba + bbbaabbbbbbbabbbbbbbbaaaaaaaaaaabbbbbaaaaabbaaabbaaaaaaabbbbbbbbbbaabaaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbbaaaaabbaaaaaaaaaaababbaaabbbaaaaaabbbbbbbbbbbbbbaabbbabbbaabbbbbbbba + bbbbbbbbbbbbabbbbbbbbbaaaaabbbaaaaaaaaabbbbbaaaabbbbaaaabbbbbbbbbbbbbbbabbbabbbabbbbbbbbba + abbbaaabbbbbabbbbbbbbbaaaaabbaaaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbbbabbbbbbbbbaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbaabb + bbbbaaabbaaaabbbbbbbbbaaaaaabaaabbabaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaabb + bbbbbbbbbbbbbbbabbbbbbaaaaabbaabbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbabbbbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbabbbbbbaaaabbabbbbbbbbaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbaaabbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbaaabbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaabbbaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaabbbbaabbbbba + bbbbbbbbbaaaaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbabbaaaaaabbbbabbbbbbbbbbaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbaabbaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaabaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbabaabbaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaabbaaabbbbbaaabbabbbbbbbaaabbbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbaabaaaabbbbbaabbbabbbbbbabbbbbbbbbbbbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbaaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbbaabbbbaabbaabbbbbbbbaabbbbbaaaaaaabbbbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbbaaabbbbaaaaaaabbbaaaaaabbbbaaaaaaaaabbbbbbbaaabaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaabbbbbaaaaaaaaabbbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaaabbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbbbaaaaaaaaaabbbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbabbbabaaaaaaaaaabbabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbaaaaaaaaaaaaabbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbbaaaaaaabaaaaabbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbabbbbaaaaaaabbbbbbaaaaabbbbbbbabbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbaaaaabaabbbbbbaaaabbbbbbbbabbbaabbbbbbbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaaabbbbaaaabbbbbbbbabbbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbaaababbbaabbbbaaaabbbbbbbbabbaaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaababaabbbaaaabbbbaaaaabaabbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaaaabbaaaaaaababbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaaaabbbaaaaaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbaaaabbbbbbababbbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaabbbbbaaaabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaabbbaaaabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbaaaaabbbaaaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabbaabbbaaaabbbabbbaaaaabbbbbabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaaabbbaaabbbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaaabbaaababbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaabbbababbbbbbaaaaabbbbaaabbaabbaabaabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbabbbbbbbaaaaaaabbbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbbabbaaaabbbbbaaaaaaaabbbbbabbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaabbbbabaaaaaaaabbbbbbaaaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaabbbbbbaaaaabaabbbaaaabbaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaabbbbbbbbaaabbabaababaaaabbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaabaabbbbbbaaaaabaabaabbbaaaabbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbbbaaaaaabbabaababbaabaaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbaaaaaaaabbaaaaaabbaabaaaabbbbbbbabbaaabbbaabaabbaaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbabbbbaaaaaaaaaabbbabaaabbaabaaaaaabbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbabbbaaaaaaaaaaabbbabaabbbaabaaaaaaabbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbbbaaaaaaabbaaaabbbbbaabbaabbaaaaaaabbaaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbbbaaaaabbbbbaaabbbbbbbbbaaaaaaaaaaabbaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbbbaaaabbbbbbaaaabbbbbbbbaabbaaaaaaabbbaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbbaaaaabbbbbbaaaaabbaaaaaaabbaaaaaaabbbbaabaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbbaaaabaabbbbbaaaaaaaabbaaabbaaaaaaabbbaaabbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbbaaaaabbabbbbaaaabbbbbaaaabbaaaaaaabbbaaabbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbbbbaaaaabbaabbbbaaaaaaaabaabbbaaaaaaabbbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbbbbaaaaabbaabbbbaaaabbbbbaabbbaaaaaaabbbbbabbaaaaaabaaaabaabbaabbbaaaabbbba + bbbaaaaabbbaaabbbbaaaabbbaabbbbaaaabbaaaaaabbaaaaaaabbbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbabbbbaaaabbbaabbbbaaaaabbbbaaabaaaaaaaabbbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbabbbaaaaabbbbaabbbbaaabbbbaaaabaaaaaaaabbbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaabbbaaaabbbbaaabbbbaaaaabbbaaabaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbbbbbaaaaabbbaaabbbbaaaabbbaaaabaaaaaaaabbbbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbabbbaaaabbbbbaaabbbaaaabaabaaabaaaaaaaabbbbbbbbaaaabbbbbbaabbbbbbaabbbabbaaba + bbbbaabbbbbbbbbbbaaaabbabbaaabbbaaaabbbbaaabaaabaaaaabbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbbbbaaaaabbabbaaabbbbaaabbaaaaabaaaaaaaaabbbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbbbbaaaabbabbbbbaabbbaaaabbbaaabaaaaaaaaabbbbaabbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbabbbaaaabbaabbbbaabbbaaaabbaaaabaaaaaaaaabbbbaabbaaaaabbaaaabbbbbbaabbbaabbabb + abbbaabbbbbbabbbaaaabbaaaabbaabbbaaaabbbaaabaaaaaaaaabbbbbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbabbbaaaabbaaaabbbabbbbaaabbaaaabaaabbaaaabbbbbbbbaabbaaabbaabbbbbbaaabbaabaaab + bbbbaabbbbbbbbbbaaaabbaaaabbbbabbbaaababaaabaaabbbaaabbbbbbbbaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbbbbbaaaabbaaaabbbaabbaaaabbbaaabaaaabbbbbbbbbbbbbaabbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaabbbbaaaaabaaaabbbbaabbbaaaaaaaabaaaabbbbaabbbbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabbbbbaaaabbbaaabbbaaabbbbaabbaabbaaaabbbbabbbbbbbbaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbbbaaaaabbbaaabbaaaaabbbaabbaabbaaabbbbbabbbbabbbaabbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabbbbaaaabbbbaaabbaaaaaaaaaabbaabbaaabbbbbabbbbabbbaabbabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabbbbaaaaabbbbbabbaaaaaaaaaaabaaabaaaabbbbbbbbbabbbaabaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbbaaaaabbbbbbbaaaaaaaabaabbaaabaaaaabbbbabbbbbbbaababbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaabbbbbbbaaaabbbbbaaabaaabaaaaaabbbabbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaabbbbbaaaaabbbbbaaabaabbaaaaaaaaaabbbbbbbaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaaaaaabbabbbbaaaabbbaaaaaabbbbbbbbaaaabbaaaaaaaaaabbbbbbbaaabbbbbbaaaabaaaaaaaaaabbaab + bbbaabbbaabbabbbbaaaaabbaaaaabbbbbbbbaaaaabbaaaaaaaaabbbbbbbbaabbbaabbaaabaaaaaaaaaaabbaab + abbaabbbabbbabbbbaaaaaabaaaaabbbbbbbbaaaaabbaaabaaaaabbbbbbbbabbbbbbbbaabbbaabaaabbabbbaba + bbbaabbbbbbbabbbbbaaaaaaaaaaabbbbbbbbaaaaabbaaaabaaaabbbbbbbbbbbbbaabbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbaaaaaaaaaabbbbbbbaaaaaabbaaaabbbbbbbbbbabbbbbbbbbbbaabbbabbbaabbbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbaaabbaabaaaabbbbbbbbbbabbbbbbbbbbbbabbbbbbbabbbbbbbbba + abbbaaabbbbbabbbbbbbbbaaaaaaaabbbbbbaaabbbabaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbab + bbbbbababbbbabbbbbbbbbaaaaaaaabbbbbbaaabbbabaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbaabb + bbbbaaabbaaaaabbbbbbbbaaaabbaaaabbbaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaabb + bbbbbbbbbbbbbbbabbbbbbaaabbbaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabb + bbbbbbbbbbbbbbbabbbbbbaaaabbaaaaaaaaaaaabbbbaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaaabaaaaabaaaaaaabbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbaaaabbbbbabbbbbaaabbbbabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbabbbbbbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaabaabbaaabaaaabbaabbbbaabbbbba + bbbbbbbbaaabaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbababaaaaabbbbabbbbbbbbbbaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbaabbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaabaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbabaabbaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbabaabbaaabbbbbaaabbabbbbbbbaaabbbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbaabbbabbbbbbaaaabbbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabbbbbabbbbabbbbbbbbbaaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaaabbbbbbbbbbbbabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaaabbbaaaaaabbbbabbbabbbbabbbbbbaaabaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbbabaaaaaaabbbbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaaabbbba + abbbbaaaabbbbbbaaaabbbbbaaaabbbbbaaaaaaaaabbbbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbabbbbaaaaaaaaaabbbabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbbbbaaaaaaaaabbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbbaaaaaaaaaaaaabbbaabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbabbbbaaaaaaabbbbbaaaaaaaaaabbaabbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbbaaaabaabbbbbbaaaabbbbbbbbabbbaabbbbbbbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaaabbbbaaabbbbbbbbbabbbaabbbabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabbbbaaabbbbbbbbbabbbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaababaaabbaaabbbbbbbbaaaaabaaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaaabbbbbbbaaababbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaaabbaaaaaaaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbaaabbbaaabaaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbaaabbbbbabbbabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbaaaabbbbabbbabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbbbaaaaabbaaaababbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbabbbabbaabbaabbbaaaabbbabbaaaabbaaaaabbbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbaaaaabbbbbabbbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaabaaaaababbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaabaaaabbabbbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbbaabbbababbbbaaaaaabbbbbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbbaaaabbbbbaaaaabbabbbbabbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbbaaaaaabbbbbbbaaaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaabbbbaaaaaaaabbaaaabbaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbbabbbbaabaaaaabbbaaaabbbbbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaaaaabbbbbbbbbaabbabaabbbbaaabbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbbbbbaaaabbabaabbbbaaabaabbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbbbbaaaaabbabaabbbbaabbaaabbbbbbbabbaaabbbaabaabbaaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbbaaaaaaabbaaaaaabbaabbaaaaabbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbabbbbbbaaaaaaaaabbabaaabbaabbaaaaaabbbaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaabbbaaaaaaaaaabbbabaaabbaabaaaaaaaabbaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaabbaaaaaaaaaaabbbbbaabbbaabaaaaaaaabbaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbbbbaaaaaabbbaaabbbbbabbbbabbaaaaaaaabbbabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbbbaaaaaabbbbaaaabbbbbbbbaabbaaabaaaabbbaabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbbbaaaaabbbbbaaaaabaaaaabaabbaaaaaaaabbbaabbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbaaaaabbbbbbbaaaababbbbbaaaaabbbbbbaabbaaaaaaaabbbaabbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbbbbbaaaaaabbbbbaaaaabbbbaaaabbaaaaaaaabbbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbabbbaaaaabbabbbbaaaaaaaabbaabbaaaaaaaabbbbbbbaaaaaabaaaabaabbaabbbaaaabbbba + bbbaaaaabbbaaaabbbbaaaaabbabbbbaaaabbbbbaaabbaaaaaaaabbbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaabbbaaaaaabbabbbbaaaaaaaaaaaabaaaaaaaaabbbbbaaaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbaaaaabababbbbbaaabbbbbbaabaaaaaaaaabbbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaabbbaaaaababaabbbbaaaabaaaaaabaaaaaaaaabbbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbaaaaababaabbbbaaaabbbbbaabaaaaaaaaabbbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbaaaabbbaaabbbbaaaabbbaaaabaaaaaaaaabbbbbbbaaaabbbbbbaabbbbbbaabbbbbbaaba + bbbbaabbbbbbbabbbbaaaabbbaaaabbbaaaabbbbaaabaaaaaaaaabbbbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbabbbbaaaaaaabaaabbbaaaabbbbaaabaaaaaaaaaabbbbabaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaabbbbaaaabaabaaabbbbaaaabaaaaababaaaaaaaabbbaabbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbaabbbbaaaababbbaabbbbaaaabbbaaababbaaaaaaabbbbbbbaaaaabbaaaabbbbbbaabbbbabbabb + abbbaabbbbbbaabbbaaaabbabbbbaabbbaaaabaaaaabbbbbbbaaaabbbbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaabbbaaaabbabbbbaabbbaaaabbbaaabbbbbbbbaabbbbbbbaaabbaaabbaabbbbbbaaabbaabaaab + bbbbaabbbbbbaabbbaaaabaabbbbaabbbbaaabbaaaabbbbbbbbaabbbbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbabbbbaaaabbabbbbbabbbbaaaabbaaabbbbbbbbaaabbbbbbbaabbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaabbbbaaaabbaaabbbbabbbaaabbbaaabbbbbbbbaaabbbbbbaaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabbbbbbaaaabbaaabbbbabbbaaaabbaaababbbbbbaaaabbbbbbaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbbbbbaaaaaaaabbbbbaabbaaaabbaaabaabbbbbaaabbbbbbbaabbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabbbbbbaaaabbaabbbbaaabbaaaabbaaabaaabbbaaaabbbbbbbaabaabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabbbbbaaaaabbbabbbaaaabbaaaabbbaabaaaabbaaabbbbbbbbaabaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbbbbbaaaaabbbaaababaaabbaaabbbaabaaaaaaaaabbbbbbbbaababbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbbbbaaaaabbbbaaaaaaaabbaaabbbaabaaaaaaaaabbbbbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbabbbaaaaabbbbbaaaaaaaabababbbaabaaaaaaababbbbbbbbaaabbbbbbaabbbbbbbaabbbbbbaab + abbaaabaaabbabbbbaaaabbbbbaaaaaaaaaaaaabbaabaaaaaaaabbbbbbbbbaaabbbbbaaaaabaaaaaaaaaabbaab + bbbaabbbaabbabbbbbaaabbbbaaaabbbaaaaaaabbaabaaaaaabbbbbbbbbbbaabbbbabbaaabaaaaaaaaaaabbaab + bbbaabbbabbbabbbbbaaaabbaaaabbbbaaaabaabbaabaabaaabbbbbbbbbbbaabbbbbbbaabbbaabaaabbabbbaba + bbbaabbbbbbbabbbbbaaaaaaaaabbbbaaaaabaaaaaabaaabbbbbbbbbbbbbbbbbbaaabbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbaaaaaaaaabbbbbbbaabbaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaabbbbbbbba + abbbabbbbbbbbbbbbbaaaaaaaaabbbbbbbaabbaaaaabaaaabbbbbbbbbbbabbbbbbbbbbbabbbbbbbabbbbbbbbba + abbbabbbbbbbabbbbbbaaaaaaaabbbbbbaaaaaabbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbab + bbbbbbabbbbbabbbbbbbaaaaaaabbbbbbaaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbaabb + bbbbaaabbaaaaabbbbbbbbaaaaabbbbbbaaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaab + bbbbbbbbbbbbbbbabbbbbbaaaaabbbbbbaaaaaabbbbbaaaaabbbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbaaaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaabbaaaaaaaaaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaabbbbbbbbaaabaaaaaaaaabaaaabbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbabbbbbbbbaaaaaaaaaaaabaaaaabbbbaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabaaaaaabbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbaabbaabaaaaababbaaabbbaaaaaaaaaaabaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbabbbbbbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbaaabaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbaaaaaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbababaaaaabbbbabbbbbbbbbbaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbaabbbaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaabaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbabaabbaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbabaabbaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbabaabaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbaaaaabaaabbaaabbbbbbbaaabaabbaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaaabbbbbbbaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbaaaaabbbbaaaaaaabbbaaaaaabbbbbbbbbbbbaabbbbbbaaaaaaabbaaaaaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbbabbbbbbbbbabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaaabbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbbbaaaaaabbbabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbaaabbaabbbaaaaaaaaaabbaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbbbbbaaaaaaaaaabbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabaaaaabbbbbbbaaaaaaaaaabbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbaaaaaaaaaaaaabbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbbaaaabaabbbbbaaaaaaaaaaaaaabbbaabbbbbbbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaaabbbbaaaabbbbbbbaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabbbbaaabbbbbbbbaabbbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabbbaaabbaabbbbbbbbbbabbabbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaaabbbbbbbbbababbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaaabbbbbbbbaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbbaaaabbbbaabbbabbbaaaaaaaaaaaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaaaaabbaaaabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaaabbbbbabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbbbaaaabbaabbbaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbbaabbabbaabbaabbbaaaabbbbbaaaaabaabbaaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbaaaaaaaabaabbbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbbbbaaaabbbbbaababbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbbbaaaaaabbabbabbbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbabbbbaabbbababbbbaaaaaaaaabbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbabbbaabbaaaaabbbbaaaabaaaabbbbabbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbaaaaaaaaabbbbbaaaabbbbbabbbaaaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbaaaaaaaabbbbbbaaaabbbbbaaabbaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbaaaaaaabaaaabbaabbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaaaaabbbaaabbbbabaaaaabbbbaaabbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaabbbbbabaaaaabbabaaabbbbbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabbbbbaabbabaabbabaaabaabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbbbbbaaaabbabaabbabaabbaaaaabbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbbbbbaaaaabbbabaaabbaabbaaaaaabbbaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaabbbbbbbaaaaaaabbabaaabbaabaaaaaaaabbaabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbbaaaaaaaaabbaaaaabbbaaaaaaaaaabbbabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaabbbbaaaaaaaaaabbbbaabbbbbbaaabaaaaabbbbbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbabbbbaaaaaaaaaaabbbbaabbbabbaaabbaaaabbbabbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbbaabbbbbbabbaaaaaabbbaaaabbbbbbbbbabbaaabbaaaabbbabbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbabbaaaaaabbbbaaabbbaaaabaabbaaaaaaaaabbbabbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaabbbaaaaabbbbbaaaaabbbbbbaabbaaaaaaaaabbbabbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbbaaaaaaaaaaaaabbaaabbaaaabbbbbbaaaaaabaaaabaabbaabbbaaaabbbba + bbbaaaaabbbaaaaabbbbaaaaababbbbaaaabbbbbbaabbaaabbaaaabbbbabaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbaaaabbabbbbaaaabbbbbaaabaaaabbaaaabbbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbbaaaaaababbbbbaaaaaaabaaabaaabbbaaaabbbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaabbbaaaaabbabbbbbaaaabbbbbaabaaaaabaaaabbbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbaaaaaaaaabbbbaaaabaaaaaabaaaaaaaaaabbbbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbaaaabbaaabbbbaaaabbbbbaabaaaaaaaaaaabbbbbaaaabbbbbbaabbbbbbaabbbbbbaaba + bbbbaabbbbbbbaabbbbaaaabbaaaabbbaaaaabaaaaabaaaaaaaaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbaaaaaaaaaabbbbaaaabbbbaabbaaaaaaaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbaaaaaabbaabbbbaaaabbaaaabbbbbaaaaaaabbbbbbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbaaabbbbaaaaaaaaaabbbbaaaabbbbabbbbbbbaaaaaabbbbbbaaaaabbaaaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbaaaaaabbaabbbbaaaabbbaabbbbbbbaaaaaabbbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbaaabaabbaaabbbbaaaabaaabbbbbbbaaaaabbbbbbaaabbaaabbaabbbbbbaaabbaabaaab + bbbbaabbbbbbaaabbbbaaababbbbbabbbaaaabbbaabbbbbbbaaaaabbbbbbaaabbbaabbaabbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbaaaabaabbbbaabbbaaaabaaabbbbbbbaaaaabbbbbbbaabbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaabbbaaaabaaabbbbabbaaaaabbbaabbbbbbaaaaaabbbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabbabbbbaaaabaaaabbbabbaaaaabaaaababbbaaaaaaaabbbbbaabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbbaabbabbbbaaaabaaabbbbabbbaaaabbbaabaabbaaaaaaaabbbbbaabbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabaabbbbaaaabaaabbbbaabbaaaabbbaabaabbaaaaaaaabbbbbaabaabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbaaaaaaabbbbbaabbbaaabbbaabaaaaaaaaaaabbbbbbaabaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbaabbbbaaaaaaabbbbaaaabbaaaabbaabaaaaabaaaabbbbbbbaababbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaaababbbbbbbabbbaabbaaabaabaabaaaabbbbbbbaababbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbaaaabbbaaaabbaaabbaaabbaabaabaaaaaaabbbbbbbaaabbbbbbaabbbbbbbaabbbbbbaab + abbaaaaaaabbaabbbbaaaaabbaaaaabbaabbbaabbaabaaaaaaaaabbbbbbbaaaabbbbbbaaaabaaaaaaaaaabbaab + bbbaabbbaabbaabbbbaaaaaaaaaaaabbaabbbaabbabbaaaaaabbbbbbbbbbaaabbbbabbaaabaaaaaaaaaaabbaab + bbbaabbbabbbaabbbbaaaaaaaaaaaabbbaabbaabbabbaaabaabbbbbbbbbbaaabbbbbbbaabbbaabaaabbabbbaba + bbbaabbbbbbbabbbbbbaaaaaaaaaaaabbaabbbabbbbbaaaabbbbbbbbbbbbbabbbbaabbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbaaaaaabbbbaabbaaabbaaaaabaaaabbbbbbbbbbbbbaabbbbbbbaabbbbbbbaabbbbbbbba + abbbabbbbbbbbbbbbbbaaaaabbbbaaaabaaabbaaaabbaaaabbbbbbbbbbbbbabbbbbbbbbabbbbbbbabbbbbbbbba + abbbabbbbbbbabbbbbbaaaaabbbbbaaaaaaabbaaaabbaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbab + bbbbbbabbbbbabbbbbbbaaabbbbbbaaaaaaabaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabb + bbbbaaabbbaaaaabbbbbbaabbbbbbaaaaaaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbaaaabbbbbaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbabbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbaaabbbbbaaaaaabbbbbbbbbabbbbbbbbbbbbabbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbaaabbbbaaaabbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbaabbbbbbbbaaabbbbaaaabbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbaaabbbbbbbaaabbbbaaaaabbaaaabbbbaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabaaaaabbaaaaabbbbaaabaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaaabbaabaaaaaaaabaaabbbaaaaaaaaaaabbaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbababaaaabbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbabaaaaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaaaaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbbabaaaaaabbbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbabaaaaaabbbbaabbbbbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbabbbaaaaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbabbaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbbaaaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaaaaaaaaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaaabbbbbbbaaabbabbbaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbabaaabbbbaaaaaaabbbaabaaabbbabbbabbbbaabbbbbbaaaaaaabbaabbaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbbbbbbbbbbbaabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbabbbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaabbbbbaaaaabbbbbaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbabbbbaaaaaaaabbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbbbaaaaaaaaaaabbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbbaaaaaaaaaaabbbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbbbabba + abbbaaabbbbbbbbbbaaaabaabbbbbbbaaaaaaaaaaaabbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbaaaaaaaaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabbbbbaaabbbbbbbaabbbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabbaaaabbaabbbbbbbbbaabbabbaabbbbbbbbaaaabbbaabaabbaaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaabbbbbbbbbaababbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaabbbbbbbbbaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaaabbbbaabbbabbaaabbbbbbbbaabbbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbaaaaaabaaabaabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaabbaaaaabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbbbbaaaaabbabbaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabaaabbaabbbaaaabbbbbaaabbabbbbbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbbbaaaaaaabbbaaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbbbaaaaaaabbbaaaabbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbbaaaaaabbaabaabbbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbbbbaaabbbaabbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbbabbaaaaabbbbbaaaaaaaabbbaabbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbaaaababbbabbbaaaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaabbbbbbaaaabbbbbaaabaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbaaaabbaaaabbbbbaaaabbbbbaaabbabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbabaaaabbbaaaabbbbbaaaaaabbbaaabbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbaaaaabbbbaaabbbbbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabbbbbbabaaaaabbbbaabaabbbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbbbbbabaaaaabbbbaabaaaaabbbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbbabbbbbaabbabaabbabaabaaaaaaabbbaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbbaaabbbbbaabbbbbbbbbaaaaabbbbabbababbaaaaaaaabbbabbaaabbbaabbaabbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbbbbbaaaaaabbabaaaabbaaaaaaaaaaabbabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaabbbbbbaaaaaaaabbaaaaabbbbaaaabaaaaabbbbbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaabbbbbaaaaaaaaabbbabaabbbbaaaabbaaaaabbbbbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbaaaaaaaaaabbbbaabbbbbaaaabbbaaaabbbbbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaabbaaaaaaabaaaabbbbbbbbbabaaaaaaaaaaabbbbbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaaabbbaaaaaabbbaaabbbbababaabaaaaabbaaaabbbbbaaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbaaaaabbbbaaaaabbaabbaabaaaabbbaaaabbbbbaaaaaabaaaabaabbaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaabbbbaaaaaaaaaaaaabaaaabbbaaaabbbbbaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbaaaaaaabbbaaaaabbbbbbbabaaabbbbaaaabbbbaaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaaabbbbbbaaabbbbaaaaababbbbaaaaaaaaaaaabaaabbbbaaaabbbbaaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaabbbaaaaababbbbbaaaabbbbbaabaaaaabbaaaabbbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbaaaaababbbbbaaaabbbbaaabaaaaabaaaaaabbbbbaaaabbbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbaaaaababbbbbaaaabbbabaabaaaaabaaaaaabbbbaaaabbbbbbaabbbbbbaabbbbbbaaba + bbbbaabbbbbbbaabbbbbaaaaaaaabbbbaaaabbbbbaabaaaaaaaaaaaabbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbaaaaaaaabbbbaaaaabaaaaabaaaaaaaaaaaabbbbaaaaabbbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbaaaaaaaabbbbaaaaabbbbaabbbbaaaaaaaaabbbbbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbaaabbbbbaaaaaaaaabbbbaaaabaaaabbbbbbbaaaaaaabbbbbaaaaabbaaaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbaaaaaaaaabbbbaaaabbbbabbbbbbbaaaaaaabbbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbaaaaaaaaaabbbaaaaabaaababbbbbaaaaaaabbbbbaabbaaabbaabbbbbbaaabbaabaaab + bbbbaabbbbbbaaabbbbbaaaaaabbaabbbbaaaabbbbbbbbbbbaaaaaaabbbbaaabbbaabbbabbbbbbaaabbbbbbaab + abbbaabbbbbbaaabbbbbaaabbabbaaabbbaaaabbaabbbbbbbaaaaaaabbbbbaabbbaabbbabbbbbbaaabbaabbaab + bbabaabaaaaaaaabbbbbaaababbbbaabbaaaaabbbaabbbbbbaaaaaaabbbbbaabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabbaabbbbbaaaaaabbbbabbaaaaabbbaabbbbbbaaaaaaaabbbbaabbaaabbbaaaaaaaaaabaaabaaaa + bbbbaabbaaabbaabbbbbaaabaaabbbbbbbaaaaabaaabaabbbaaaaaaaaabbbaabbaaaabaabbbbbbbaabbbbbbaab + bbbbaabbbbabaabbbbbbaaabaaabbbbabbaaaabbbaabaaabbaaaaaaaabbbbaabaabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbaaabaaabbbbabbaaaaabaaabaaabaaaaaaaaabbbbbabaabbbaaabbbbbbbaabbaabbaab + bbbbaabbbbbbaabbbbbbaaabaaabbbaaabbaaaabbbabaaaaaaaaaaaabbbbbabbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbaaaaaaabbbbaabbbaaabbaabaabaabaaaaaabbbbbaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbaaaaaaabbbbaabbbaaaabaabaabbabbaaaabbbbbbaaabbbbbbaabbbbbbbaabbbbbbaab + abbaaabaaabbaabbbbbaaaaaaaaaaabaaabbbaabbbbbaaabaaaaaaabbbbbbaaabbbbbbaaaabaaaaaaaaaabbaab + bbbaabbbabbbaaabbbbaaaaaaaaaabbbbabbbaabbaabaaaaaaaaaabbbbbbbaaabbbabbaaabaaaaaaaaaaabbaab + bbbaabbbabbbaaabbbbaaaaaaaaaaabbbaabbaabbbbbaaaaaaaabbbbbbbbbaabbbbbbbaabbbaabaaabbabbbaba + bbbaabbbbbbbaabbbbbaaaabbaaaaabbbaabbbabbbabaaaaaaabbbbbbbbbbbabbbaabbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbabbbbbaaaabbbaaabbabbbbbaaaaabbbbbbbbbbbbaabbbbbbbaabbbbbbbaabbbbbbbba + abbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbaabbaababbaaaaabbbbbbbbbbbbbabbbbbbbbabbbbbbbabbbbbbbbba + abbbabbbbbbbabbbbbbbaabbbbbaaaabbaaabbaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbab + bbbbbbabbbbbaabbbbbbabbabbbaaaabbbaabbaaababaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaabb + bbbbaaabbbaaababbbbbbbbabbbbaaaabbbabaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbabbbbbaaabbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaabb + bbbbbbbbbbbbbbbbabbbbaabbbbaaaabbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbabbbbaaaaabbbbaaaabbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbabbbbbbbbbabbbaaaaabbbbbaaaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbabbbbbbbbbabbbaaaabbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaabaaaaabbbbbbaaaabbbbbaaabaabbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbabbbbbbbaaaaaaaabbbbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabaabbbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaaabbaabaaaaabaabaaabbbaaaaaaaaaaabbaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbabaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbbaaabaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaaaaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbbaaaaaaaaabbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbbaaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaaaaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbaaaabbbba + abbbbbbbabbaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbbaaaaabbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaaaaaaaaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbaaaabbbbaabbaaabbbbbbbaaabbabbaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaaabbbabaaaabbaabbbabbbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbbabbaabbbbaabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaabbbbbbbbbbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbabbbbbbaaaabbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbaaaaaaaabbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbbaaaaaaaaaaabbbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaaabaabbbbabaaaaaaaaaaaaabbbaabbbbbbbbbbaaaabaabbbaaaabbaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbaaaaaaaaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabbbbbaaaaaaaaaaaabbbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabbaaaabbbaaaaabbbbaaabbabbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbaabbbbbbbbaabbbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaabbbbbbbbbaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbbaaabbbbbaabbbabbaaabbbbbbbbaabbbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbaaabbbbbbbbaabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaabaaabaabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbbbbaaaaabaaabaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabaaabbaabbbaaaabbbabbaaaaabbabbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbababaaaabbbbbaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbababaaaabbbbaaabbbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbaaaaaaabbbaaaabbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbbaaaaabbbaabbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbbaaaabbbaaaaabbbabbbbabbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbaaaabaabbbbbaabaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaabbbbbbaaaabbbbbaaabaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbaaabbbbbbaaabbaaabbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbabaaaabbbaaaabbbbbaaabbbbbbaaabbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbaaaaabbbbaaabbbbbbbbbbbaaaaaabbbbaaabbbaaabbbbbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabbaabbbbaaaaabbbbaabbbbbbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbabbbbbaaaaabbbaaabaaabbbbbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbbbbbaabaaaabbbaaabaaaaaabbbbaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbbaaabbbbbaabbbbbabbbbbaaabbbaaabbabbbaaaaaaaabbbabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbabbbbaaaaabbaaaababbaaaaaaaaaaabbbbbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbbbaaaaabbaaaaaabbbaaaaaaaaaaabbbbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbaaaaaaabbaaaaaabbbaaaaabbaaaabbbbbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbbbaaaaaaaabbbabaabbbbaaaabbbaaaabbbbbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaabbbbaaaaaaaaabbbbaaabbbbaaaaabbaaaabbbbbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaaabbbbbaaaaaaaaaabbbbbabbbbbaaaabbbaaaaabbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbaaaaaaabaaaaabbbbbabbbbaaaabbbaaaaabbbbbaaaaabaaaabaabbaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaaabbaaaaabbaaaaababaaaabbbbaaaabbbbaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaabbbbaaaaaaaaaaaaabaaaabbbbaaaabbbbaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaaabbbbbbaabbbbbbaaaaaabbbaaaaabbbbbbbabaaaabbbbaaaabbbbaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaabbbaaaaaabbbbaaaaaaaaaaaabaaabbbbbaaaabbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaababbbbbaaaabbbbbbabaaabbbbaaaaabbbbbaaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbaaaaaabbbbbaaaaabaaaaabaaaaabbaaaaaabbbbaaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbaaaaaaabbbbbaaabbbbbbabaaaaaabbaaaaabbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaaaaaaabbbbbaaaabbbbbabaaaaaaaaaaaaabbbbaaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaaaaaaaabbbaaaaabbaaaabaaaaaaaaaaaaabbbbaaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbaaabbbbbbaaaaaaaabbbbaaaabbbbbababbaaaaaaaaaabbbbbaaaabbaaaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbaaaaaaaabbbbaaaabaaaaaaabbbbaaaaaaaabbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbaaaaaaaaabbbaaaabbbbbbbabbbbbbaaaaaabbbbaabbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbaaaaaaaaabbbaaaaaaaaaabbbbbbbbaaaaaabbbbaabbbaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbaaaaaaaaabbbbbaaabbbbbbabbbbbbaaaaaabbbbaabbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaabbbbbbaaaaabbaaabbbaaaabaaaabbbbbbbbbaaaaabbbbbabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabbaabbbbbbaaaaabbbaabbbaaaabbbbabbbbbbbbbaaaaaabbbbabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabbaabbbbbbaaaaaabbbbbbbaaaabbbbbaabbbbbbaaaaaaaabbbabbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbbabaaabbbbbbaaabaaabbbbbbaaaaabbabbabbbbbbaaaaaaaabbbabaabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabaaabbbbbbaaabaabbbbabbaaaaabbbbbaaaabbbaaaaaaaabbbaaaabbbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaaaaaabbbabbbbaaaaaabbaaaabbbaaaaaaabbbbbbabbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbaaaaaaabbbaabbbaaabbbbbaaaaabbaaaaaabbbbbaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaaaaaaabbaaabbbaaaaaabbaaaaaaaaaaaaabbbbbaabbbbbbaabbbbbbbaabbbbbbaab + bbbbaaaaaabbaabaabbbaaaaaaaaaabbaabbbaabbbbbaaaabaabaaaaabbbbbaabbbbbbaaaabaaaaaaaaaabbaab + bbbaabbbabbbaaaabbbbaabbaaaaaabbaabbbaabbbbbaaaabaaaaaaabbbbbbaabbbabbaaabaaaaaaaaaaabbaab + abbaabbbabbbaaaabbbbbbbbbaaaaabbbaabbaaababbaaaaaaaaaaabbbbbbaaabbbbbbaabbbaaabaabbabbbaba + bbbaabbbbbbbaabbbbbbbbbbbbaaaabbbaabbbaabbbbaaaaaaaaabbbbbbbbbabbbaabbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbaabbbaaaabbbaaabbaabbbbaabaaaabbbbbbbbbbbabbbbbbbaabbbabbbaabbbbbbbba + abbbbbbbbbbbbbbbbbbbbaabbbaaaaabbbaabbaabbbbaaaaaabbbbbbbbbbbaabbbbbbbbabbbbbbbaabbbbbbbba + abbbabbbbbbbabbbbbbbaabbbbbaaaabbaaabbaabbbbaaaaaabbbbbbbbbbbbabbbbbbbbabbbbbbbbbbbbbbbbab + bbbbaaabbbbbaaabbbbaaabbbbbaaaabbbaaabaabaabaaaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaabb + bbbbaaabbbaaababbbbbaabbbbbaaaabbbbabbaababbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbaabaababbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbaaaaabbbbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbabbaaaaabbbbbaaaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbababbbbbbbbaaaaaabbbbbbbaaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbbaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaaabbaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbaabbbbaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbbaababaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbbaaaaaaaabbbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbaaaaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaabaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaabaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbaaaabbbba + abbbbbbbabaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbbbbbaaaaaaaaaaaaaaabbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaaabbbbbbbaaabbabbaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbabaaabbbbaaaaaaabbbabaaaabbaabbbabbbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbbabbbabbbbaabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaabbbbbbbbbbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbabbbbbbaaaabbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbaaaaaaaabbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbbaaaaaaaaaaabbbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaaabaabbbbabaaaaaaaaaaaaabbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbaaaaaaaaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabbbbbaaaaaaaaaaaabbbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabaaaaabbbaaaaabbbbaaabbabbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbaaabbbbbbbbaabbbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbaabbbbbbbbbaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbbaaabbbbbaabbbabbaaabbbbbbbbaabbbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbaaabbbbbbbbaabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaaaaabaaabaabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbbbbaaaaabaaabaabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabbaabbaabbbabaabbbbbbaaaaabbabbaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbababaaaabbbbbaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbababaaaabbbbaaabbbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbbaaaaaaabbbaaaabbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbbaaaaabbbaabbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbaaaaabbbaaaaabbbabbbbabbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbaaaabaabbbbbaabaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaaabbbbbaaaabbbbbaaabaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbaaabbbbbbaaabbaaabbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbabaaaabbbaaaabbbbbaaabbbbbbaaabbbbbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbaaaaabbbbaaabbbbbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaaabbbbaaaaabbbbaabbbbbbbbbbbbabbaaabbbaaaaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbabbbbbaaaaabbbaaabaaabbbbbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbbbbbaabaaaabbbaaabaaaaaabbbbaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbbaaabbbbbaabbbbbabbbbbaaabbbaaabbabbbaaaaaaaabbbabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbabbbbaaaaabbbaaababbaaaaaaaaaaabbbbbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbbbaaaaabbaaaaaabbbaaaaaaaaaaabbbbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbaaaaaaabbaaaaaabbbaaaaabbaaaabbbbbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbbbaaaaaaaabbbabaabbbbaaaaabbaaaabbbbbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaabbbbaaaaaaaaabbbbaaabbbbaaaabbbaaaabbbbbaababbaabbabbbaabbbbbbaabbbbba + bbbabbbaaaaabbbaaabbbbbaaaaaaaaaabbbbbabbbbbaaaabbaaaaaabbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbaaaaaaaaaaaaabbbbbabbbbaaaabbbaaaaabbbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaaaaaabbaaaaabbaaaaababaaaabbbbaaaabbbbaaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbaaaaabbbbaaaaaaaaaaaaabaaaabbbbaaaabbbbaaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbbbbaaaaaabbbaaaaabbbbbbbabaaaabbbbaaaabbbbaaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaabbbaaaaaabbbbaaaaaaaaaaaabaaabbbbbaaaabbbbaaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbaaaababbbbbbaaabbbbbbabaaabbbbbaaaabbbbbaaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbaaaaaabbbbbaaaaabbaaaabaaaaabbaaaaaabbbbaaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbaaaaaaabbbbbaaabbbbbbabaaaaaabbaaaaabbbaaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbaaabbbbbbaaaaaaabbbbbaaaabbbbbabaaaaaaaaaaaaabbbbaaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbaaabbbbbbaaaaaaaabbbaaaaabbaaaabaaaaaaaaaaaaabbbbaaaaabbbaaabbbbbbaabbbbbbbabb + abbbaabbbbbbaaabbbbbbaaaaaaaabbbbaaaabbbbbababbaaaaaaaaaabbbbaaaaabbabaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbaaaaaaaabbbbaaaabaaaaaaabbbbaaaaaaaabbbbaabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbaaaaaaaaabbbbaaabbbbbbbabbbbbbaaaaaabbbbaabbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbaaaaaaaaabbbbbaaaaaaaabbbbbbbbaaaaaabbbbaabbbaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbaaaaaaaaabbbabaaabbbbbbabbbbbbaaaaaabbbbbabbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaabbbbbbaaaaaabaaabbbaaaabaaaabbbbbbbbbaaaaabbbbbabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabaaabbbbbbaaaaabbbbabbbaaaabbbbabbbbbbbbbaaaaaabbbbabbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabaabbbbbbbaaaaaabbbabbbaaaabbbbbaabbbbbbaaaaaaaabbbabbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbbaaabaaabbbbbbaaaaabbabbabbbbbbaaaaaaaabbbabaabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabaaabbbbbbaaabaabbbbabbaaaaabbbbbaaaabbbaaaaaaaabbbaaaabbbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaaaaaabbbabbbbaaaaaabbaaaabbbaaaaaaabbbbbaabbbbaaabbbbbbbaabbbabbaab + abbbaabbbbbbaabbbbbbbaaaaaaabbbaabbbaaabbbbbaaaaabbaaaaaabbbbbaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaaaaaaabbaaabbbaaaaaabbaaaaaaaaaaaaabbbbbaabbbbbbaabbbbbbbaabbbbbbaab + bbbbaabaaaabaabaabbbaaaaaaaaabbaabbbbaabbbbbaaaabaabaaaaabbbbbaabbbbbaaaaabaaaaaaaaaabbaab + bbbaabbbaabbaaabbbbbaabbaaaaaabbaabbbaabbbbbaaaabaaaaaaabbbbbbaabbbabbaaaaaaaaaaaaaaabbaab + abbaabbbbbbbaaabbbbbbbbbbaaaaabbaabbbaaababbaaaaaaaaaaabbbbbbaaabbbbbbaabbbaabaaabbabbbaba + bbbaabbbbbbbaaaabbbbbbbbbbaaaabbbaabbbaabbbbabaaaaaaabbbbbbbbbabbbaabbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbaabbbaaaabbbaabbbaabbbbabbaaaabbbbbbbbbbbabbbbbbbaabbbbbbaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaabbbbaaaabbbaabbaabbbbaaaaaabbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbbabbbbbbbaabbbbbbaabbbbbaaaabbaaabbaabbbbaaaaaabbbbbbbbbbbaabbbbbbbbabbbbbbbbbbbbbbbbab + bbbbaaabbbbbaaabbbbaaabbbbbaaaabbbaaabaabaabaaaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbabbbbaabb + bbbbaaabbbabbbabbbbbaabbbbbaaaabbbbabbaababbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbaabb + bbbbbbbabbbbbbbbbbbbbabbbbbaaaabbbbaabaababbaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbabbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbaaaaabbbbaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaa + bbbbbbbbbbbbabbbbbbbbbbaaaaaaabbbbbaaaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaaaaababbbbbbaaaabbbbbbaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaabbaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaaabbaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbaabbbbaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbbaababaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbbaaaaaaaabbbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbaaaaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaabaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaabaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbabaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbbbbbaaaaaaaaaaaaaaabbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaaabbabbaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbabaaaabbaaabaabbbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaaabbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaabbaabbbbaabbbbbbaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaabbaabbbbaaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaabbbbbbbbbbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbbbaaaabbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbbbbbaaaaaaaaabbbbaabbbbbabbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaabbaabbbbabbaaaaaaaaaaaabbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbbaaaaaaaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabbabbaaaaaaaaaaaabbbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabaaaaabbbaaaaaaaabaaabbbbbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbaaaabbbbbbaabbbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbbabbbbbbbbbaabbbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbaaabbbbbbbbaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbaaabbbbbbbbaabbbbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbbbbaabbbbbbbbaabbbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbaaaaabaaabbabbbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabbaabaaabbbaaaabbbabbaaaaabaaabaabbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbaaaabbbbbaabbbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbababaaaabbbbbbabbbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaaaaaaabbbbaaaabbbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbbaaaaaabbbabbbabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbabbbaabbaaaaabbbaaaaabbbbbbbbabbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbaaabbbbbbbbbaabaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaaabbbbbaaaabbbbaaaabaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbaaaabbbbaaabbaaabbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbaaaaaabbbaaaabbbbbaaabbbbbaaabbbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbaaaabbbbaaabbbabbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabaabaaaaaaabbbbbabaaabbbbaaaaabbbaaabbbbbbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbaabbbbbaaaabbbaaabbbbbbbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbabaaaabbbaaabaaabbbbbbbaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbbaaabbbbbaabbbbaabbbbbbaabaaaabbbaabbaaaaaabbbbbabbaaabbbaabbabbbbbabbbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbaabbbbbbaabbbaaabbabaaaaaaaaaabbbbbbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaabbaaaababbbaaaaaaaaaaabbbbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbbbbbbaaaaabbaaaababbbaaaaaaaaaaabbbbbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbbbbbaaaaaabbbaaaaabbbaaaaabbaaaaabbbbaabbabaabbabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbaaaaaaaabbbabaabbbbaaaabbbbaaaabbbbaababbaabbabbbaabbbbbbaabbbbba + bbbabbbaaaaabbbaaabbabbbaaaaaaaaabbbbbaabbbbaaaabbbbaaaabbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbbbaaaaaaaaaabbbbbabbbbbaaaabbbbaaaabbbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbbaaaaaaaaaaaabbbbbbbbbbaaaabbbbaaaaabbbbaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbbaaaaabbaaaaabbaaaaabaaaaaabbbbaaaaabbbbaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbbbbbaaaabbbaaaaaaabaaaaaaaaaaabbbbaaaaabbbbaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaaabbbaaaaabbbaaaaaabbbbbbbaaaabbbbbaaaaabbbbaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbbaaaaabbbbabaaaaaaaaaaaaaabbbbbbaaaabbbbaaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbaaaaaabbbbbbaaabbbbbbbaaaabbbbbbaaaabbbbaaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbaaaaaaabbbbbaaaaaaaaaabaaabbbbbbaaaabbbbaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaaaaaaabbbbbaaaabbbbbbbaaabbbbbbaaaabbbbaaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbaaaaaaabbbbbaaaabbbabbbaaabbbbbbaaaaabbbbaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbaabbbbbbaaaaaaaabbbbaaaabbbbbbbaaaaaaabaaaaaabbbbaaaabbabaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbaaaaaaaabbbbaaaabbbbbbbaaaaaaaaaaaaaabbbbabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbaaaaaaaabbbbaaaabaaaaabaaaaaaaaaaaaaabbbbabbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbaaaaaaaaabbbaaaabbbbbbbaaaabbaaaaaaaabbbbabbbaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbaaaaaaaaabbbaaaaaaaaaabaaaaabbaaaaaaabbbbaabbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaabbbbbbaaaaaaaaabbbaaaaabbbbbbaaaaabbbbbaaaabbbbabbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabaaabbbbbbaaaaaaaaaabbabaaabaaabbaaaabbbbbbbaaabbbbbbbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabaabbbbbbbaaaaaaaaaabbbbaaabbbbbaaaaabbbbbbbaaaabbbbbbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbbaaaaaaaababbbbaaaabbbbaaaabbbbbbbbbaaaabbbbaabbabbabbbbbbbaabbbabbaab + bbbbaabbbbabaaabbbbbbaaaaaaaabbabbbaaaabaabbaaabbbbbbbbbaaaabbbbaabbbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbabaaaaaabaabbbaaaabbbbaaaaabbbbbbbaaaaabbbbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbabbbaaaaabbbbbaaaaaaabbaaaaabbbbbbaaaabbbbaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaabbbaaaababbbaaaabbbbbaaaaaabbbbbaaaabbbbabbbbbbaabbbbbbbaabbbbbbaab + bbbbaabaaaabaabaabbbbabbbbaaaaaaabbbaaabbabbaaaaaaabbbbaaabbbbbabbbbbaaaaabaaaaaaaaaabbaab + bbbaabbbaabbaaababbbbabbbbbaaaaaaabbbaabbbbbaaaaaaaabbaaaabbbbaabbbabbaaaaaaaaaaaaaaabbaab + abbaabbbbbbbaaabbbbbbaabbbbaaaaaaabbbaabbbbbaaaaaaaaaaaaaabbbbaabbbbbbaabbbaabaaabbabbbaba + bbbaabbbbbbbaaaabbbbbabbbbbaaaabbaabbbaaaabbaaaaaaaaaaaaabbbbbaabbabbbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbabbbbbbbbaabbbbaaaabbaabbbaabbbbbaaaaaaaaaaabbbbbbabbbbbbbaabbbbbbaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaabbbbaaaabbbaabbaabbbbaabaaaaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbba + abbbababbaabaabbbbbbbabbbbbaaaabbbaabbaabbbbaaaaaaaabbbbbbbbbbabbbbbbbbabbbbbbbbbabbbbbbab + bbbbaaabbabbaaabbbbbbaabbbaaaaabbbaabbaabbbbbaaabaaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaabb + bbbbaaabbbabbbabbbbbbbaabaaaaabbbaaaabaabaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbaabb + bbbbbbbabbbbbbbbbbbbbbaaaaaaaaabbabaabbabaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbabaabaababbaaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbabbaaaabbbabaaaaabbbbbaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbabbbbbbbbbbbbaaaaabbbbbaaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaabbabbbbaaaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabbabbbbaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbaaaabbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaabbabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbaaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbaaaabaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbabbabaaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbbaababaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbbaaaaaaaaabbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbaaaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaabaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaabaaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbabaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbaaaaaabbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaabbbbabbbaaaaaaaaaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaaabbabbaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbabbaaabbaaabaaabbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaaabbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaabbbbbbaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaaababbbbbaaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaabbbbabbbbbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbabbbabaaaaabbbbbbaabbbbbabbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaabbaabbbbabbbbabaaaaaaabbbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbbaaaaaaaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabaabbbaaaaaaaaaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabaaaaabbbbaaaaaaaaaaaabbbbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbaaaaaabbaaaabbbbaaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbbbaaabbbbbbaaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbaabbbbbbbbaaabbbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbaaabbbbbbbbaabbbbbbaaaabbabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbaaabbbbbbbbaabbbbbbbbaaaaabbaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbaaaabbbbbbbaabbbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabbaabaaabbbaaaabbbabbabaaabaaaababbbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbbaaabbaabbaabbbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaabbbbbbaabbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbabbaaaaabbbbbbaaabbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbabaabbaaaaaabbbbaaabbbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbabbbbabbaaaaabbbaaaaaabbbbabbbbbbaaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaaaabbbbbbbbbaaaaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaaabbbbbaaabbbbbaaabaaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbaaaabbbbaaabbaabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbaaaaaabbbaaaabbbbbaaaabbbbaaabbaabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbaaabbbbaaabbbabbbabbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbaaabbbbaaabbbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbaabbbbbaaaaabbaaabbbbbbbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbbbaaaabbbaaabbbbbbbbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbabaaaabbbbabbaabbbbbbbaaabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbaabbbbbbbabaaaaabbbaaaaaaaaabbbbbbbbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaabaaaaabbbbbaaaaaaaaabbbbbbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbaaaabbaaaabbabbaaaaaaaaaaabbbbbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbbaaabbbbbaaabbbbbbbbaaaaabbbaaababbbaaaaaaaaaaaabbbbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaabbbbbaaaaaaaabbaaaaabbbaaaaabbaaaaabbbbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaaabbabbbbaaaaaaaabbbabaabbbbaaaaabbbaaaabbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbabbaaaaaaaaabbbbbaabbbbaaaaabbbaaaaabbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbbbaaaaaaaaaaabbbbabbbbbaaaaabbbaaaaabbbbaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbbaaaaaabaaaaabbbabbbbbaaaaabbbbaaaaabbbbaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbbbbbaaaaabbaaaaaabbaaaabaaaaaabbbbbaaaabbbbaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaaabbbaaaaabbbaaaaaaaaaaabaaaaaabbbbaaaaabbbbaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbbaaaaabbbabaaaabbbbbbbaaaaabbbbbaaaaabbbaaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbbaaaaabbbbbaaaaaaaaaabaaaabbbbbbaaaaabbbaaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbbaaaababbbbaaaabbbbbbbaaaabbbbbbaaaaabbbaaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbaaaaaabbbbaaaaabaaaaaaaaabbbbbbaaaaabbbbaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbaaaaaabbbbaaaabbbbbbbaaaabbbbbbaaaaabbbbaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbaabbbbbbaaaaaaabbbbaaaaabbbaabaaaabbbbbbaaaaabbbbaaaabbabaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbbaaaaaaabbbaaaaabbabbbabaabbbbbbaaaaabbbbabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbbaaaaaaabbbbaaaabbbbbbaaaaabbbbbaaaaaabbbabbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbbaaaaaaabbbbaaaaaaaaabaaaaabbbbbaaaaaabbbaabbaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbbaaaaaaaabbbaaaabbbbbbaaaabbbbbaaaaaaabbbaabbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaababbbbbaaabaaaabbbaaaaaaaaabaaaabbbbbaaaaaaabbbbbbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbaabbbbbbbaabbaaaaabbaaaaabbbbbaaaabbbbaaaaaaaabbbbbbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabaabbbbbbbaabbbbaaaabbaaaaabaaabaaabbbbbaaaaaaaabbbbbbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbaabaabbbbbbbaabbbbaaaabbbbaaabbbbbaaabbbbaaaabaaaaabbbbbaababbabbbbbbbaabbbabbaab + bbbbaabbbbabaaabbbbbbaabbbbbaaaabbbaaabbbbbaaabbbaaaaabbaaaaabbbaabbbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaaabbbbbbaaabbbbaaaabbbaaaabaabaaabbbaaaaabbbbaaabbbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaabbbbbaaaabbbaaaabbbbaaabbbaaaaabbbbbabbbbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaabbbbbaaaabbbaaaaaaabbaabbbbaabbbbbbbabbbbbbbbbbaabbbbbbbaabbbbbbaab + bbbbaabaaaabaabaabbbbaaabbbbaaaabbbbaaabbbbbaaabbbbabbbbbbbabbbbbbbbbaaaaabaaaaaaaaaabbaab + bbbaaabbaabbaaababbbbaaabbbbaaaaabbbaaabbabbaaabbaaabbbbbbbabbbbbbaabaaaaaaaaaaaaaaaabbaab + abbaabbbabbbaaabbbbbbaabbbbbbaaaabbbbaabbbbbaaabbaaaabbbbbbabbbbbbbbbbaaabbaabaaabbabbbaba + bbbaabbbbbbbaaabbbbbbaabbbbbaaaaaabbbaabbbbbbaaaaaaaaabbbbaabbbbbbabbbaabbbabbbaabbbbbbbaa + bbbbbbbbbbbbababbbbbbaaaabbbaaaaaabbbaaaaabbaaaaaaaaaabbbbaabbbbbabbbbbbbbbabbaabbbbbbbbba + abbbbbbbbbbbbbabbbbbbaaaaaaaaaaabaabbaabbbbbbbaaaaaaaaaabbaabbbbbbbbbbbabbbbbbbbbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabaaabbaababbabaaaaaaaaaaaaabbbbbbbbbbbbabbbbbbbbaabbbbbbab + bbbbaaabbbbbaaabbbbbbbaaaaaaaaaabaaabbaabbbbbbaaabbaaaaaaaabbbbbbbbbbbbbaabbbbbbbabbbbaabb + bbbbaaababaaababbbbbbbaaaaaaaaaabaaabbaabbbbbaaaabbaabaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabaaaabaaaabaaabbaabaaaaaaabbaaabbbbbbbbbbbbbbbbbbbabbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbabbbaaabbaaaabbaabbaabaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaaaaaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaababaaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbaaaaabbbbbaaaabbabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbaaaabbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbaaaabbabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbabbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbbaabaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbbaaaaaaaaabbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbaaaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaabaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaabaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbabaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbabbbaaabaaaaaaaaaabbbbbbbbbbabbbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaabbbaabaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaaabbbabbaaabbaaabaaabbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaaabbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaabbbbbbaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaaababbbbbbaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbbaabbbbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbbaabbbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbabbbbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabbbbbbbbbbbbbbbaabbbbbabbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaabbaabbbbaabbbbbbaaaaaabbbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbaaaabaaaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabaabbbaaaaaaaaaaaabbaaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabaaaaabbbbaaaaaaaaaaaabbbbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbaaaaaaaaaaaabbbbaaaabbbbbaaaaabbbaaaaabbaaaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbbbaaaaaaabbaaabbbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbaabbbbbbbbaaabbbbaaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbabbbbaabbbbbbbbaaabbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaaabbbbbbbaaabbbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbababbbbbbbaaabbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabbaabaaabbbaaaabbbabbbaaaabbbbbbaaabbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbaaaaabaaabbabbbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbabbbaaaaabaaabbabbbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbbabbbaaaabbbbbbaabbbbaaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbabbabbabaaaabbbbbbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbabbbaabbaaaaabbbabaaaabbbbbaabbbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbaaaaaabbbbbbbbabaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaaabbbbaaaaabbbbbaaabaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbaaaabbbbaaaabaabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbaaaaaabbbaaaabbbbbbaaaabbbbaaabaabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbaaabbbbbaabbbabbbabbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbaaabbbbaaaabbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbaabbbbbaaaabbbaaabbbbbbbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbbbaaaaabbaaabbbbbbbbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbaaaaabbbaabbbbbbbbbbaaabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbaabbbabbbbbbaaabbbbaaaaabbbbbbbaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbaabaaaabbbbbaaaaaabbbbbbbbbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbaaabaaaabbbbbaaaaaaaabbbbbbbbaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbbaaabbbbbaaabbbabbbbbaaaaabbaaabbabbaaaaaaaaaabbbbbbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaabbbbbbbaaaaaabbaaaaaabbaaaaaaaaaaaabbbbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaaabbaabbbbaaaaaaaabbaaaaabbbaaaaaaaaaaaaabbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbabbbaaaaaaaaabbbabaabbbaaaaaabaaaaaabbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbbbaaaaaaaaaaabbbbaabbbbaaaaabbbbaaaabbbbaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbbbaaaaaaaaaaabbbbabbbbaaaaaabbbbaaaabbbbaaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbbbbbaaaaaabaaaaabbbbbbbbbaaaaabbbbbaaaabbbbaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaaaabbaaaaabbbaaaaaaaaaaaabaaaaabbbbbaaaaabbbaaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbbaaaaabbbaaaaaaaaaabbbaaaaabbbbbbaaaabbbbaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbbaaaaaabbbbaaaabbbbbbaaaaabbbbbbbaaaabbbbaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbbaaaaaabbbbaaaaaaaaabbaaaaabbbbbaaaaabbbbaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbaaaaaabbbbaaaabbbbbbbaaaabbbbbbaaaaabbbbaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbaaaaaabbbbaaaaabaaaaaaaaabbbbbbaaaaabbbbaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbaabbbbbbbaaaaaaabaaaaaabbbbbbbbaaabbbbbbaaaaaabbbaaaabbabaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbbaaaaaaabaaaaaaababaaabaaabbbbbbaaaaaabbbabbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbbaaaaaabbbaaaaaabbbbbbaaaabbbabbbaaaaabbbbbbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbbaaaaabbbbaaaaaabbbaabbaaabbbbbbaaaaaabbbaabbaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbbaaaabbbbaaaaaaabbabbbbaaabbbbbbabaaaabbbbabbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaababbbbbaaabbbbbaaaaaaabbbbbbbaaabbbbbbaaaaaabbbbbbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbaabbbbbbbaaabbbbbbaaaaaaaaaaabbaaabbbbbbbaaaaabbbbbbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabaabbbbbbbbaaabbbbbbaaaaaaabbbbbbaaabbbbbbbaaaaabbbbbbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbaabaabbbbbbbbaaabbbbbaaaaaaaabaaabbaaabbbbbbbaaaaaabbbbbaababbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbbbaaabbbbbaaaaaaaabbbbbbaaabbbbbbbaaaaaabbbbaabbbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbbaaabbbbbaaaaaaaabbbabbaaabbbbbbbaaaaaaaabbabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaabbbbbaaaaaaaaabbbbbaaabbbbbbbaaaaaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaabbbbbaaabbbaaabbbbbaaabbbbbbbaaaaaaabbbbbbbbbaabbbbbbbaabbbbbbaab + bbbbaabaaabbaaaaabbbbaaababbbbbaabbaaaaaaabbaaabbbbbbaaaaaababbbbbbabbaaaabaaaaaaaaaabbaab + bbbaaabbaabbaaaabbbbbaabbaabbbaaabbbaaabbbbbbaabbbbbbbaaaaababbbbbaabbaaaaaaaaaaaaaaabbaab + abbaabbbabbbaaabbbbbbaabbaabbaaaabbbbaabaaabaaaabbbbbaaaaabaabbbbbbbbbbabbbaabaaabbabbbaba + bbbaabbbbbbbaaaabbbbbaaabaaaaaaaaabbaaabbbbbbaaabbbbbaaaabbbabbbbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbbaabbbbbbaabbaaaaaaaaabbbaabbbbbbbaaabbbbaaaabbbaaabbbbbbbbabbbabbaabbbbbbbbba + abbbbbbbbbbbbaabbbbbbaabbaabaaaaaabbbaaaaaabaaaaabbbbaaaabbbaaabbbbbbbbabbbbbbbbbbbbbbbbba + abbbabbbbbbbaabbbbbbbbaaaaaaaaaaaabbbaabbbbbbbaaabbaaaaaabbbbbabbbbbbbbabbbbbbbbaabbbbbbab + bbbbaaabbbbbaaabbbbbbbaaaaaaaaaaaaabbbabaabbabbaabbaaaaaabbbbbabbbbbbbbbaabbbbbbbabbbbaabb + bbbbaaababaaababbbbbbbaaaaaaaaaaaaaabbaabbbabbaaabbbaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbaaaaabbaaaaaaabbaabbbbbbaaaabbaabaaaabbbbbbbbbbbbbbbbbbabbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaaaaaabaababaabaaaabaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaaabbababaaaabaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaabbaaabbbbbbaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaaaaababbbbaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbaaaaabbbaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbaaaaabbbbaaaabbabbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaabbabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbaaaabbabbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaaababbaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbabbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbbaabaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbaaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbbbaaaaaaaaabbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbaaaaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaababaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaabaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbabaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbabbbaaabaaaaaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaabbbaabaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaaabbbabbaaabbaaabaaabbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaaabbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaabbbbbbaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaaababbbbbaaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaababbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbaaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbaabbbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabbabbbbbbbbbbbbaabbbbbabbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaabbaabbbbaababbbbbaaaabbbbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbabbbaaaaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabaabbbbaaabaaaaaaabbbaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabaaaaabbbbbbaaaaaaaaaaabbbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbbbaaaaaaaaaaabbbbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbbbbaaaaaaaaaaaabbbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbaaaaaabbbbaaabbbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbaabbbbaabbbbbbbbaabbbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaabbbbbbbbbaabbbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaabbbbabbbaaaabbbbbbbaabbbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabbaabaaabbbaaaabbbabbbaaaabbbbbbbaabbbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbaaaaaaaaabbaabbbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbaabbbbaaaabaaabaabbbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaabbbbaaaabaaabaabbbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbabaabaabbaaaabbbbbaabbbbaaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbabbbaabbaaaaabbbaabaaaabbbbbaabbbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbabaaaabbbbbbbbabaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaaabbbbbaaaaabbbbaaaaaaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbaaaabbbbaaabbabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaabaabbbbabbbbaaaaaabbbaaaabbbbbbaaaabbbbaaabbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbbbbaaaabbbaaabbabbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbbbbaaabbbbaaabbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbaabbbabbaaabbbbaaabbaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbbbbaaaabbbaaabbbabbbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbbaaaaabbaabbbbbbbbbbaaabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbaabbbabbbbbbaaaabbbaaabbbbbbbbaaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbbabaaaabbbbbbaabbbbbbabaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbbbabaaaaabbbbbaaaabbbbbbbbbbaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbbbbbbaaabaaaaabbbbbaaaaaaabbbbbbbbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbbbbaaaaabbaaaabbbbbaaaaaaaaabbbbbbaababbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaaabbaabbbbbbaaaaaabbaaaaaabbbaaaaaaaaaaabbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbbabbbbbaaaaaaabbbaaaaabbbaaaaaaaaaaaabbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbabbaaaaaaaaaabbbabaabbbbaaaaaaaaaaaabbbbaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbbbbaaaaaaaaaabbbbbabbbbaaaaabbbaaaaaabbbbaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbbbbbbaaaaaaaaaaabbbbbabbbaaaaaabbbbaaaaabbbaaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaaaabbbaaaabbbaaaabbaaabbbbaaaaabbbbbaaaaabbbbaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbbbaaaaabbaaaaaabbaaaabaaaaaabbbbbaaaabbbbaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbbbaaaabbbbaaaaaaaaabbbbaaaabbbbbbaaaabbbbaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbbbaaaaabbbbaaaabbbbbbabaaaabbbbbbaaaabbbbaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbaaaaabbbaaaaaaaaaabbbaaabbbbbbaaaaaabbbaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbaaaaaabbbaaaaaabbbbbbbaaabbbbbbaaaaaabbbaaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbaabbbbbbbaaaaaaabaaaaaaabaaaaabaaabbbbbbabaaaabbbbaaabbabaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbbaaaaaaaaaaabaaabbbbbbbaaabbbbbbbaaaaabbbbbbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbbaaaaaaaaabbbbaabbaaaabaaabbbabbbbaaaabbbbbbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbbaaaaaaaabbbbbaabaabbbbaaaabbbbbbbaaaabbbbbbbaabbbabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbbaaaaaaabbbbbaaabbbaaabaaabbbbbbabaaaaabbbabbaabbbaabbbbbaaabbaabbaab + bbabaabaaaaaaaababbbbbaaaaaabbbbbbbaaaaaabbbaaabbbbbbaaaaaaabbbbbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbbaabbbbbbbaaaaaabbbbbbbaaabbbaabaaabbbbbbbbaaaaabbbbbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabaabbbbbbbbaaaaaabbbbbbbaaabaaabbaaabbbbbbbbaaaaabbbbbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbaabaabbbbbbbbaaaaaaabbbbbaaaabbbbbbaaabbbbbbbbaaaaabbbbbaababbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbbbaaaaaabbbbbbaaaaaaaabbaaabbbbbbbbaaaaaabbbaabbbaaabbbbbbbaabbbabbaab + bbbbaabbbbbbaabbbbbbbbaaaaaaabbbbbaaaabbbbbbaaabbbabbbbaaaaaabbbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaaabaabbbaaaaaaabbaabaaabbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaabbabbbbaaaaaaabbbbbaaabbbbbbbbaaaaaaabbbbbbbbaabbbbbbbaabbbbbbaab + bbbbaabaaabbaaaaabbbbaaaabbaabbbaaaaaaabbbbbaaaabbbbbbbaaaaaaabbbbbbbbaaaabaaaaaaaaaabbaab + bbbaaabbaabbaaaabbbbbaaabbbaabbaaabbbaaaaaabbaaabbbbbbbbbaaaaabbbbbabbaaaaaaabaaaaaaabbaab + abbaabbbabbbaaabbbbbbaaabbbaaaaaabbbbaabbbbbbbaabbbbbbbbabaaaabbbbbabbbabbbaabaaabbabbbaba + bbbaabbbbbbbaaaabbbbbaaaabbbbbaaaabbbaabaaabaaaabbbbbbbbaaaaaabbbbbbbbaabbbabbbaabbbbbbbaa + bbbabbbbbbbbbaabbbbbbaaaabaabbaaaabbaaaaabbbbbaaabbbbbbbaaaaaabbbbbbbbbabbbabbaabbbbbbbbba + abbbbbbbbbbbbaabbbbbbaaaaaaaaaaaaabbbaabbbbbaaaaabbbbbbaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbba + abbabbbbbbbbaabbbbbbbbaaaaaaaaaaaabbbaaaaaabaaaaaabbbbbaaaaaaaaabbbbbbbaaabbbbbbbabbbbbbab + bbbbaabbbbbbaaabbbbbbbaaaaaaaaaaaabbbaabbbbbbbbaabbbbbbaaaaaabbaabbbbbbbbbbbbaabbabbbbaabb + bbbbaaabbaaaababbbbbbbaaaaaaaaaaaaabbbabbbbbabbaaabbbbaaaaaabbbaaaabbbbbbbbbbabbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbbbbaaaaabaaaaaabbaaabaaabbaaaabbbaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaaaaabbaabbbbbabaaaabbaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaaababbabbaabaaaabbaaaaaaabbbbaabbbbbbbbaabbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaabaabababababaaaaaaabaaaabbbabbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaabbaaabababbbaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbaaaaaaabaabbbbaaabaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbaaababbbbbbbbbbaaaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabbabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbabbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaababbbaaabaaaaabaabbbbaabbbbba + bbbbbbbbbbaaaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaaabbbba + bbbbbbbaaaaaaaaaaabbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbaabaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaaaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaabaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbbbabaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbbaaabbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbabbbaaabaaaaaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaabbbaabaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaaabbbabbaaabbaaabaaabbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaaabbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaabbbbbbaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaaababbbbbaaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaababbbbbbaaabbaaabbbbbaaaaaabbaaaaaabbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbaabbbbbbbbbbaaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabaaabbbbbbbbbbbaabbbbbabbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaabbaabbbbaababbbbbbbbbbbbbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaabaabbbbbbbbbaaaaabbaabbbabbaabbbbbaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + ababbabbbbbbbbbbbaababbbaabaabbabbbbabaaaaaabbbaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabaaaaabbbbbbaaaaaaaaaaabbbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbbbbaaaaaaaaaaabbbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbbbbbaaaaaaaaaaaabbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbbaaaaaaaabbaaabbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbaabbbbbaababbbbbaaabbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbbaabbbbbbbbbaabbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaabbbbabbbbaaabbbbbbbbaabbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabbaabaaabbbaaaabbbabbbbaaabbbbbbbbaabbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbbaaaabbbbbbbaabbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbaabbbaaaaaaaaaabaabbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbaabbaaabbbbaaaabaaabaabbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbabaabaabbbaaaabbbbbaabbbbaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbaaaaabbbaaabaaaabbbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbabaaaabbbbbaabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbaaaaabbbbbbbaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbaaaaabbbaaabbaabbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbbbbaaaabbbaaabbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbbabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbabbbaaaabbaaabbabbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbabbbaaabbbaaabbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbaabbbabbbaaabbbaaabbaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbabbbaaabbbaaabbbaabbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbbbaaaabbaaabbbaabbbbaaabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbaabbbaabbbbbbaaaabbaabbbbbbbbbaaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbbbbbaaaabbbbbabbbbbbbaaaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbbbbabaaaabbbbbaaabbbbbbbbabbaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbabbbbbaaabaaaabbbbbaaaaabbbbbbbbbbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbbaaaabbbbbabbbaaaaabaaaaabbbbaaaaaaabbbbbbbbaaaabbaabbabbbaabbbbbbaabbbbba + bbbaabbaaaaabbbaaabbaabbbbbbbaaaaaabbaaaabbbbaaaaaaaaabbbbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaabbbbbbaaaaaaabbaaaaaabbaaaaaaaaaaabbbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbbaabbbaaaaaaaaabbbaaaabbbbaaaaaaaaaaaabbbaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaaabbbbbabbbaaaaaaaaabbbbbaabbabaaaaabaaaaaaabbbbaaabbbbaaaabbbbaaaaabbaaabaa + ababaabbbbbbbaabbbbbbbbbaaaaaaaaaabbbbbaabbabaaaabbbbaaaaabbbbaabbbbbaaaabbbbaaaabbbbaaaba + aaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbaaaaabbbbaaaaaabbbaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaaaaaaaaaaaabbbbaaaaaaabbbaaaaabbbaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaaabbaaaabbbaabbaaaabaabbbbaaaabbbaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbbbbaaabbbbbbaaaabbaaabbaaaabbabbbbaaaabbbaaabbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbaaaabbbbbbaaaaabbbbbbaaaabbbbbbaaaaabbbaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbbaaaabbbbbbaaaabbbaaabaaaabbbbbbbaaaabbbbaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbaabbbbbbbbaaaabbbbbaaaaaaaabbbbaaabbbbbbbbaaaaabbbaaabbaaaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbbbaaaaabbaaaaaaabbbaaabaaaaabbbbbbaaaaabbbbbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbbbaaaaabbaaaaaaaaaaabbbaaaaabbbbbbbaaaabbbbbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbbbaaaaaaaaaaabbbbbbbaabaaaaabbbbbbbaaaabbbbbbaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbbbaaaaaaaaabbbbbbaaabbbaaaabbbbbbaaaaaabbbbbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaabaabbbbbaaaaaaaabbbbaaabbbaabaaabbbbbbbaaaaaabbbbbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaabbaaabbbbbbbbaaaaaaaabbbbbaaaaaabbbaaabbbbbbbaaaaabbbbbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabbabbbbbbbbbaaaaaaaabbbbbbbbbbbbbaaabbbbbbbbaaaaaabbbbaaaabaabbbbbbbaabbbabbaab + bbbbaabbbbabbabbbbbbbbbaaaaaaabbbbbbbbbbaaabbaabbbbbbbbaaaaaabbbbaababbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbbbaaaaaaaabbbbbbbaabbbbbaaabbbbbbbbaaaaaabbbbabbbaaabbbbbbbaabbbabbaab + abbbaabbbbabaabbbbbbbbaaaaaaaabbbbbbaaabbaabaaabbbbbbbbaabaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaaabbaabbbbbbaaaaabbbbaabbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaaabbaabbbaaaaaabbbabaaaabbbbbbbaaaaaaabbbbbbbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaaaabbbbbaaaabbaabbbaaaaaaaaabbbbaabbbbbbbbaaaaaabbbbbbbbaaaabaaaaaaaaaabbaab + abbbaabaaabbaaaaabbbbaaababbaabaaaaaaaabbbbbaaaabbbbbbbbaaaaaaabbbbabbaaaaaaaaaaaaaaabbaab + bbbaabbbabbbaaabbbbbbaaaaabbbbbaaaabbbabaaabbbaabbbbbbbbaaaaaaabbbbabbbabbbaabbaabbabbbaba + bbbaabbbbbbbbaaabbbbbaaaaabbbbbaaaabbbaaabbbbbaaabbbbbbbbaaaaaabbbbbbbaabbbaabbaabbbbbbbaa + bbbabbbbbbbbbaabbbbbbaaaaabbaabaaaaabaabbaabaaaaabbbbbbaaabaaaabbbbbbbbabbbabbbaabbbbbbbba + bbbbbbbbbbbbbaabbbbbbaaaaabaaaaaaaaabaaaaabbbbbaaabbbbbaaaaaaaabbbbbbbbabbbbbbbabbbbbbbbba + abbaabbbbbbbbaaabbbbbbaaaaaaaaaaaaabbaabbbbbbbbaaabbbbbbaabaaaabbbbbbbbbbbbbbabbaabbbbbbab + abbbabbbbbaaaaabbbbbbbaaaaaaaaaaaaabbaaabbbaaabaaabbbbbbaabaaaabbbbbbbbbbbbbbaabbbbbbbaabb + abbbaaabbbabaaabbbbbbbaaaaaaaaaaaaabbbaaaaabbbaaaabbbbbaaaaaaaabbbbbbbbbbbbbbaabbbbbbbaabb + bbbaabbbabbbbbbbbbbbbbbaaaaabbaaaaabbbabbbbbabbaaabbbbbaaaaaaaaaaabbbbbbbbbbbaabbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaaaabbaabbbbbbbaaaabbabaaaaaaabbaaabbbbbbbbbbbbbbbbbbbaaab + bbbbabbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaababbaababaabbaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaabbbaaaaabaaaaaaaaaaaabbbaaaaabbbbbbabbbbbbbbbbaabb + bbbbbbbbbbbbbabbbbbbbbbbbbbbbaaaaabaabbabaaabbabbaaaabaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaabaaaaaaaabbbaaabbaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaaaaaabbbbbbbbaaabaaabbaaabbaaaabbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaabbaaaaabbbbbbbbbbbaabaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaabbaaaaabbabbbbbbbbaaabaaabbbbbaaaabbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbaabaababbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbabaabbbbbbbbbaaabbbba + abbbbbbbbbbbbbbbbbaabaabaaaaabaabaaabbbaaaaaaaaaaaaaaabbbbaaaaabbbbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbabbaabbbabbaaaaaaabbaaabbaaaaaaabbbaaaaaabbbbaaababbbaaabaaaaabaabbbaaabbbbba + bbbbbbbbbbaaaaaaaabbbabbbaaaaaabbaaaaaaabbaabbbbbbaabaaaabaaabaaaaaaaaaaaaaaaaabbbaabbbbba + bbbbbbbaaaaaaaaaaabbbabbbbbbbbbbaaaabaaaabaabbbbbbaabbaaaaaaabaaaaaaabbabbaaabbbbbaaabbbba + abbbbbbbaabaaaaaabbbaabbabbbbbbbaaaabbbaaaaabbbbbbaabaaaaaaaaaaaabbabbbabbbaaabbbbaaabbbba + abbbbbbbaabaaabbbbbaaaababbbbbbbaaaabbbbaaabbbbbbbbaaabbbbaaaabbbbbbbbbaabbaaabbbaaaabbbba + abbbbbbbabaaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbabaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbaaaaabbbbbbbbbaaabbbbbbaaaabbbbba + abbbbbbbaaaabaaabbaaabbbabbbaaabaaabaaaaaabbbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaabbbbbbbbaaabbabbaaaaaaaabbbbbbaaaaaaaabaaaaaabbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbabbaaabbaaabaaabbbaabbbbbbaaaaaaabbbaabaaabbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbbaaaabbbbbaaaaaabbaaabaabbbbaabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaabbbbba + abbbbaaaabbbbbbaaaabbbbaaaaaabbbaaababbbbbaaabbbbaabbbbbaaaaaabbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaabbbbbbbbaaabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbbaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbaaabaaabbbbaaaabbbbaabbbba + abbbaaabbbbbbbbbbaabbaaaabbbbabbbaabbbbbbbbbbaaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbaabbbba + abbbaabbbbbbbbbbbaaaaaaabbbbbaabaaabbbbbbbbbbbaabbbbbabbbbaaaabbabbbaaabbbbaabbbbbbbababba + abbbaaabbbbbbbbbbaaabbaabbbbaaaabbbbbbbbbbbbbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbabba + abaababbbbbbbbbbaaaabbbaabbbabbaabbbbbaaaaabbbaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbabba + abaababbbbbbbbbbbaababbbaabaabbabbbbabaaaaaabbbaabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + ababaabbbbbbbbbbbabbaabaaaaabbbbbbaaaaaaaaaaabbbaabbbbbbbbaaaabbbaabaabbbaaaabbbbbbbbbabba + aabbbabbbbbbbbbbbabbaababbaabbbbbbbaaaaaaaaaaabbbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + abbbbabbbbbbbbbbaabbbaaabbbabbbbbbaaaaaaaaaaaabbbaaabbbbbaaaaabbbbaaaabbabbaabbbbbbbbbaaba + abbbbaaaabbbbaaaabbbbbaabbbabbbbbaaaaaaaabbaaabbbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbaabbbbbaababbbbbaaabbbbaaaabaabbaaabbbabbbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbbaabbbbbbbbbaabbbbbbaaaaaabaaabbbabbbbaabbbaaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaabbbbabbbbaaabbbbbbbbaabbbbbbaabbaaaaaabbbabbbbaabbaaaaaabbbbaaabbb + abbbaabbbabbaabaaabbbaaaabbbabbbbaaabbbbbbbbaabbbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabaabbbabbbbaaaabbbbbbbaabbbbbbaabbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbaaabbbbbbbbaabbaabbaabbbaaaaaaaaaabaabbbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabbbbaaaabaaabaabbbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbabaabaabbbaaaabbbbbaabbbbaabaaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaabbaaaaabbbaaabaaaabbbbbaabbbaabbbaabbbaaaaabaaaabbbaabbbbbbbaaabbbbba + abbbbbbbbaaabbbbbbbbaaaaaaaabbbbbabaaaabbbbbbabbaaabbbaabbbaaaabbaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbbaaaaaaabbbbbbabaaaaabbbaabbaaabbbbbaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbaaaaabbbaaabbabbbbbbbaaaaaaabbbbaaabaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaaaaaabbbaaaabbbbbbbaaaabbbaaabbabbbbbbbaaaaaaabbbbaaabbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbabbbaaaabbaaabbabbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbba + bbaaaaaabbabaaaaaaabbbbbabaaabbbabbbaaabbbaaabbabbbbbbbbabbaaabbbaabaabbbaaaaaabbbabbbbbbb + bbaabbaaaaaaaaabbaabbbbbabbaabbbabbbaaabbbaaabbaabbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbabbbaaabbbaaabbbaabbbbaaabbaaabbbaabbabbbbbaaaaaababaaaaaa + bbabbbbbaaaabbbbbaabbbbaabbaabbbbbbbaaaabbaaabbbaabbbbaaabbaaabbbaabbabbbbbaabbaaaaaaabbba + baabbbbbbaabbbbbbaabbbbaabbbaabbbbbbaaaabbaabbbbbbbbbaaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbbbbbbbbbbbaaaabbbbbabbbbbbbaaaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbabbbbbbbabaaaabbbbbaaabbbbbbbbabaaaabbaaabbaabbbaabbbbbbaabbbbba + ababbbbbaaaabbbbbaaabbbabbabbbbbaaabaaaabbbbbaaaaabbbbbbbbbbaabbabaabaabbbaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbbbbabbbbaaaabaaaaabbbbaaaaaaabbbbbbbbbaaabbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbaabbbbbbbaaaaaabbaaaabbbbaaaaaaaaabbbbbbbaaabaaaababbaaaabbbbaaaabbbba + bbbaabaabbbaabbaabbbaabbbbbbaaaaaaabbaaaaaabbbaaaaaaaaaabbbbbaaaaabaaaabaabaaabbbaaaabbbba + bbbaaaaabbbaaaaaabbbaaabbbaaaaaaaaabbbaaaabbbbaaaaaaaaaaaabbbaaaabbbaaaaabbbaabbbaaaaabbaa + bbbbaabbbbbbbaabbbbbbabbbaaaaaaaaabbbbbaabbabaaaaaaaaaaaaabbbbaaabbbbaaaabbbbaaaaabbaaabaa + aaabaabbbbbbbaabbbbbbbbbaaaaaaaaaabbbbbaabbabaaaaabbbaaaaabbbbaabbbbbaaaabbbbaaaabbbbaaaba + abaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbbbbaaaaabbbbbaaaaabbbaabbbbbbaabbbbbbaabbbbbbbabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaaaaaaaaaaaabbbbaaaaaabbbbaaaaabbbaaaabbbbaaaaaaaaaaaaaaabaabb + bbbbaabbbbbbbaabbbbbbbbbaaaaaaaaaaaaabbbaabbaaaaaabbbbbaaaabbbaabbbbbbaabbbbbbaabbbbbbaaba + abbbaabbbbbbbaabbbbbbbbbaaabbbbbaaaaabbaaabbaaaaaabbbbbaaaabbbaaaabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbaaaabbbbbbaaaaabbbbbbaaaabbbbbbaaaaabbbaaaabbbaaabbbbbbaabbbbbbaabb + bbbbaabbbbbbbaabbbbbbbbaaaabbbbbbaaaabbbaaabaaaabbbbbbbaaaabbbbaaabbaaaabbbbbbaabbbbbbbabb + abbbaabbbbbbbaabbbbbbbbaaaabbbbbaaaaaaaabbbbaaaabbbbbbbaaaaabbbbaabbaaaabbbbbbaabbbbabbabb + abbbaabbbbbbaaabbbbbbbbaaaaabbaaaaaaabbbaaabaaaabbbbbbbaaaaabbbbbaaaabaabbbbbbaaabbbabaabb + bbbbaabbbbbbaaabbbbbbbbaaaaabbaaaaaaaaaaabbbaaaabbbbbbbbaaaabbbbbaaabbaabbbbbbbaabbaabaaab + bbbbaabbbbbbaaabbbbbbbbaaaaaaaaaaabbbbbbbaabaaaabbbbbbbbaaaabbbbbbaabbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaabbbbbbbbaaaaaaaaabbbbbbaaabbbaaabbbbabbbaaaaabbbbbbaabbaabbbbbbaaabbaabbaab + bbabaabaaaaaaaababbbbbbaaaaaaaabbbbaaabbbaabaaabbbbabbbaaaaabbbbbbaabbaaabbbbbaaabbbabbaab + bbbbaabaaaabaaabbbbbbbbaaaaaaaabbbbbaaaaaabbbaaabbbabbbaaaaabbbbbaaabbaaaaaaaaaaabaaabaaaa + bbbbaabbaaabaabbbbbbbbbaaaaaaaabbbbbbbbbbbbbaaabbbbabbbaaaaaabbbbaaaabbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbbbbaaaaaaabbbbbbbbbbaaabbaabbbbabbbabaaaabbbbaababbabbbbbbbaabbbabbaab + bbbbaabbbbabaabbbbbbbbaaaaaaaabbbbbbbaabbbbbaaabbbbabbbabaaaabbbbabbbaaabbbbbbbaabbbabbaab + abbbaabbbbabaabbbbbbbbaaaaaaaabbbbbbaaabbaabaaabbbbbbbbaaaaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaaabbaabbbbbbaaaaabbbbaaabbbabbbaaaaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbaaaabbaabbbaaaaaabbbabaaaabbbabbbaabaaaabbbbbbbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaaaaabbbbaaaabbaabbbaaaaaaaaabbbbaabbbbbbbbaaaaaabbbbbbbbaaaabaaaaaaaaaabbaab + abbbaabaaabbaaaaabbbbaaababbaabaaaaabaabbbbbaaaabbbbbbbbaaaaaaabbbbabbaaaaaaaaaaaaaaabbaab + bbbaabbbabbbaaaabbbbbaaaaabbbbbaaaabbbabaaabbbaabbbbbbbbaaaaaaabbbbabbaabbaaabbaabbabbbaba + bbbaabbbbbbbaabbbbbbbaaaaabbbbbaaaabbbaabbbbbbaaabbbbbbbbaaaaaabbbbbbbbabbbbabbaabbbbbbbaa + bbbaabbbbbbbaabbbbbbbaaaaabbaabaaaaabaabbaabaaaaabbbbbbaaabaaaabbbbbbbbabbbbbbbabbbbbbbbba + bbbbbbbbbbbbabbbbbbbbaaaaabaaaaaaaaabaaaaabbbbbaaabbbbbaaaaaaaabbbbbbbbaabbbabbbbbbbbbbbba + abbabbbbbbbbaabbbbbbbbaaaaaaaaaaaaabbaabbbbbbbbaaabbbbbbaabaaaabbbbbbbbbbbbbbaabbbbbbbbbab + abbbabbbbbaaaaabbbbbbbaaaaaaaaaaaaabbaabbbbaaabaaabbbbbbaabaaaabbbbbbbbbbbbbbababbbbbbaabb + abbbaabbbbabaaabbbbbbbaaaaaaaaaaaaabbaaaaaabbbaaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabb + bbbabbbbbbbbbbbbbbbbbbbaaaaabbaaaaabbaabbbbbabbaaabbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbaabbbbbbbabbbbbbbbabbbbaaaaaabaaabbbbbbbaaaabbabaaaaaaabbaaabbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbaababbaababaabbbaaaaaaabbbbaaabbbbbbabbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaabbbaaaaabaaabbaaaaaaabbbaaaaabbbbbbabbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaabbabaaabbabbaaaabaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbaabb + bbbbabbbbbbbbbbbbbbbaabbbbbbbaaaabbaabaaaaaaaabbbaaabbaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaaaaaabbbbbbbbaaabaaabbaaabbaaaabbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaabbaaababbbbbbbbbbbaabaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbabbbbbbbbbbbbbaaaabbaaaaabbabbbbbbbbaaabaaabbbbbaaaabbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbababbbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabaaabbbbaaaaaaaaaabaaabbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbabbababaaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaaaaabbaaabaaaaabbabbbbaabbbbba + bbbbbabbbbbaaaaaaabbbabbaaaaaaabbaaaaaaabbaabbbbbbaabaaaaaaaabaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbaaabbbaaaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaaabbbba + bbbbbbbbbbbaaaaaabbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaaabbbba + bbbbbbaabbbbaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbabbbaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbaaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbaabaaabbbbba + bbbbbbbaaaaabaaabbaaabbbabbbbaaaaaabaaaaaaabbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaabbaaabbbbbbbaaabbaabaaaaaaaabbbbbbaaaaaaaabaaaaabbbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbabbaaabbbaabaaabbbaabbbbbbaaabaaabbbaaaaaabbbbbbbaabbbbaaaaabbbbba + bbbbbaaaaabbbbbaaaaabbbbaaaaaabbaaabaabbbbaabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaaabbbba + bbbbaaaaabbbbbbaaaabbbbaaaaaabbbaaaaabbbbbaaabbbbaabbbbbaabaabbbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbbaaabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbaaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbaaaaaaabbbaaaaabbbbaabbbba + abbaaaabbbbbbbbbbaabbaaabbbbbabbaaabbbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbbaabbba + bbbaaaabbbbbbbbbaaaaaaaabbbbbaabaaaabbbbbbbbbbaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbaabbba + bbaaaaabbbbbbbbbaaaaabaabbbbaaaaaaabbbbbbbbbbbaabbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbaaba + bbaaaaabbbbbbbbbaaaaabbaaabbabbaabbbbbbaaaabbbbabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbaaba + aaabbabbbbbbbbbbbaaaabbbaabaabbaabbbbabaaaaaabbbabbbbbbbbbaaaaabaabbaaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbbbbaaaaaaaaaaabbbabbbbbbbbaaaaabbabbaabbbaaaabbbbbbbbbaaba + aabbaabbbbbbbbbbbabbaaaabbaabbbbabbbaaaaaaaaaaabbaaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbbbbbaaaaaaaaaaabbbaaabbbbaaaaabbbbaaaabaabbaabbbbbbbbbaaba + abbbbaaaabbbbbaaaabbbbaabbbabbbbaabbaaaaaaabaaabbbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbaabbbabbbabbbbbbbbaabbbbaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbbbbabbbbbbbbbaabbbbbaaaaaabaaabbbabbbbaabbbbaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbbbaabbbbbbbbbaabbbbbaabbaaaaaabbbabbbbaabbabaaabbbbbaaabba + abbbbabbaabbaabaaabbbaaaabbbabbbbbaabbbbbbbbbaabbbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbbbaabaabbbbbbaabbbbbabbbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbaabbbbbabaaaaaaabaabbbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabbbbaaaaabaaabaabbbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbaabbbbaaaabbbbbaabbbaabbaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaaabaaaaabbbaabbbaaaabbbbbaabbaabbbaabbbaaaaaaaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbbaaaaaaaabbbbbbabaaaabbbbbaabaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbabaaaaabbbbbaaaabbbbaaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbbbbabaaabbaaabbabbbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbabbbbaaabbaaabbabbbbbbbaaaaaaabbbbaabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbabbbbaaabbaaabbabbbabbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbbb + bbaaaaaabbabaaaaaaabbbbbabaaabbbaabbbaaabbaaabbabbbbbbbbabbaaabbbaaaaabbaaaaaaabbbabbbbbba + bbaaabaaaaaaaaabbaabbbbbabbaabbbaabbbaaabbaaabbaabbbbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbaabbbaaabbaaabbaaabbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbabbbbaaaabaabbbbaabbbbaaabbaaabbbaabbabbbbbaabbaaaaaaabbaa + baabbbbbbaabbbbbbaabbbbabbbaaabbabbbbaaaabaaababbbbbbaaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbabbaaabbbabbbaaabbbbbbbaaaabbbbbabbbbbbaaaabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbaabbbbbbabbaaaabbbbbaabbbbbbbbabbaaabbaaabbaabbbaabbbbbbaabbbbba + aaabbbbbaaabbbbbbaaabbbabbabbbbbbaabbaaaabbbabaaaabbbbbbbbbbaabbabaabaabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbababbbbbaaaabbaaaabbbabaaaaaabbbbbbbbaaaabbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbaabbbbbbbbaaaaabbaaaaabbbbaaaaaaaaabbbbbbababaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaabbbbbaaaaaabbbaaaabbbbaaaaaaaaaabbbbbbaaaabaaaabaabaaabbbaaaabbbba + bbbbaaaabbbaaaaaabbbaaabbbbaaaaaaaabbbaaaabbbbaaaaaaaaaaaabbbbaaabbbaaaaabbbaabbbaaaabbbba + abbbaabbbbbbbaaabbbbbaabbaaaaaaaaaabbbbaaababbaaaaaaaaaaaaabbbaaabbbbaaaabbbbaaaaabbaaabaa + abbbaabbbbbbbaabbbbbbbbbbaaaaaaaaaabbbbbabbabbaaaaabbaaaaaabbbaabbbbbaaabbbbbaaaabbbaaaaba + ababaaaaaaaaaaaaaaaaaabbbaaaaabaaaabbbbbbbbabaaaaaabbbbaaaabbbaabbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbbbaaaaaaaaaaaaaaabbbbbaaaaaaabbbaaaabbbaaaaabbbaaaaaaaaaaaaaaaaaaba + abbbaabbbbbbbaabbbbbbbbbbaaaaaaaaaaaaabbaaaaaaaaaaabbbbaaaabbbbabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbbbbaaaaaaaaaaaabbaaabbbaaaaabbabbaaaaabbbaabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbbaaaabbbbbaaaaabbbbbbaaaaabbbabbbaaaabbbaaabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbbaaaabbbbbaaaabbbaaabbaaaabababbbaaaabbbaaabbaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbbaabbbbbbbbbaaaabbbaaaaaaaaabbbbaaaaabbbbbbbaaaabbbbbabbaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbaaabbbbbbbbbaaaabaaaaaaaaabbbaabbaaaababbbbbaaaabbbbbaaaabaabbbbbbaaabbbbbaaab + abbbaabbbbbbaaabbbbbbbbbaaaaaaaaaabbbaaaabbbbaaaababbbbbaaaaabbbbaaabbaabbbbbbbaabbaabaaab + abbbaabbbbbbaaabbbbbbbbbaaaaaaaaabbbbbbbbaabbaaaababbbbbaaaaabbbbbaabbaabbbbbbbaabbbabbaab + abbbaabbbbbbaaabbbbbbbbbaaaaaaaabbbabaaaabbbbaaaabaaabbbaaaaabbbbbaabbaabbbbbbaaabbaabbaab + abbbaaaaaaaaaaaaaaaabbbbaaaaaaabbbaaaabbbbabaaaabbaaabbbaaaaabbbbbaabbaaabbbbbaaabbbabbaab + abbbaabbaabbbaabbbbbbbbbaaaaaaabbbbbaaaaaabbbbaabbaaabbbaaaaabbbbaaabbaaaaaaaaaaabaaabaaaa + abbbaabaaabbaaabbbbbbbbbaaaaaaabbbbbbbabbbbaaaaabbbabbbbbbaaabbbbaaaabaabbbbbbaabbbbbbbaab + bbbbaabbbbabaaabbbbbbbbbaaaaaaabbbaaabbbaaabbbaabbbabbbbbbaaabbbbaabaababbbbbbbabbbbabbabb + bbbbaabbbbabaabbbbbbbbbbaaaaaabbbbbbbaabbbbbaaaabbbabbbaabaaaabbbabbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaaaaaabbbbbbbaabbaabbbaabbaabbbaabaaaabbbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbaaaabaabbbbbbaaaabbbbaaaaabaabbbaabbaaabbbbbbbaaaabbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbaaaabaabbbbaaaaabbbabbbbaabbabbbbaaaaaaabbbbbbbaabbbbbbbaabbbbbbabb + abbbaaabbbbbaaaaaabbbbaaabbbaabbbaaaaaaaaabbbbaaabbbbbbbaabaaaabbbbbbbaaabbbaaaaaaaaabbaab + abbbabbbaabbaaaabbbbbbaaabaaaabbbaaaaaaabbbbaaaaabbbbbbbaabaaaabbbbbbaaaabaaaaaaaaaaabbaaa + bbbbabbbbbbbaaaabbbbbbaaaaaaaabbaaaaaaabbaabbbbaabbbbbbbaabaaaabbbbbbbbaabaaaaaaabaaabbbba + bbbbabbbbbbbaabbbbbbbbaaaaaababbaaaabaaaabbbbaaaababbbbbaaaaaaabbbbbbbbabbbbbababbbbbbbbba + bbbbabbbbbbbabbbbbbbbbaaaaabbbbbaaaabaabbbababaaabbbbbbbaabaaaabbbbbbbbbbbbbbbbabbbbbbbbba + bbbbabbbbbbbabbbbbbbbbaaaaabbaaaaaaabaaababbbbbbabbbbbbbaabaaaabbbbbbbbbbbbbbabbabbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabaaabbbaaaaaaabbbbbbabbaaaabbbbbbbabbbbbbbbbbbbbbbbbbb + abbbbaaaabbbaaaabbbbbbbaaaaaaaaaaaabbaaabbbbbabbaaabbbbbaabaaaabbbbbbbaabbbbbbbbbbbbbbbbaa + abbaabbbbbbaaaabbbbbbbbaaaaaaaaaaaaabbaaaaaabbbaaaabbbbbaaaaaaabbbbbbbbabbbbbbbbbbbbbbabaa + abbbbbbbbbbbbbbbabbbbbbbaaaaabaaaaaabbaabbbbbabbaaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbabbbbbbbbbbabbbaaaaabbaabbbabbabaaabbbbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabaaaabbaaababaabbbaaaaaaabbaabbbbbbbbbbbbbbbbbbbbaaaa + abbbabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbabbbbabbbabaabbaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbaaab + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbaaaababbbabaabbaaaaaabbbbbaaaabbbbbbbabbbbbbbbbaaab + abbbbbbbbbbaaabbbbbbbaabbbbbbbaaaaaaabbaaaaaaabbbbbaabaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaaabbbbbbbbaaabbaaaaaabbabaaabbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbaabbaaaaaabbbababbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaaaaabbbbbbbbbbbbaabaaabbbabaaaaabbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbababbbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbbaabbaaaaaaaaaaabaaabbbbaaaaaaaaaabaaabbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbabbabbaaaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaaaaabbaaabaaaaabbabbbbaabbbbba + bbbbbabbbbbaaaaaaabbbabbaaaaaaaabaaaaaaabbaabbbbbbaabaaaaaaaabaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbaaabbbaaaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaaabbbba + bbbbbbbbbbbaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaaabbbba + bbbbbbaabbbbaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbabbbaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbaaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbaabaaabbbbba + bbbbbbbaaaaabaaabbaaabbbbbbbbaaaaaabaaaaaaabbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaaabbbbbbbaaabbaabaaaaaaaabbbbbbaaaaaaaabaaaaabbbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaabaaabbbaabaaabbbaabbbbbbaaabaaabbbaaaaaabbbbbbbaabbbbaaaaabbbbba + bbbbbaaaaabbbbbaaaaabbbbaaaaaabbaaabaabbbbaaabbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaaabbbba + bbbbaaaaabbbbbbaaaabbbbaaaaaabbbaaaaabbbbbaaabbbbaabbbbbaabaabbbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbbaaabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbaaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbaaaabbbbbbbbbaaaabbaaaaaaabbbaaaaabbbbaabbbba + abbaaaabbbbbbbbbbaabbaaabbbbbabbaaabbbbbbbbbbbaaabbbbbbbbbaaaabbaabbaaabbbbaaabbbbbbaabbba + bbbaaaabbbbbbbbbaaaaaaaabbbbbaabaaaabbbbbbbbbbbabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbaabbba + bbaaaaabbbbbbbbbaaaaabaabbbbaaaaaabbbbbbaaaabbbbbbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbaaba + bbaaaaabbbbbbbbbaaaaabbaaabbabbaaabbbbaaaaaaabbbbbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbaaba + aaabbabbbbbbbbbbbaaaabbbaabaabbaaabbaaaaaaaaaaabbbbbbbbbbbbaaaabaabbaaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbabbbbaaaaaaaaaaabbbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbaabbbbbbbbbbbabbaaaabbaabbbbabbbbaaaaaaaaaaabbaabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbaaaaaaaaaaaabbaabbbbbaaaaabbbbaaaabaabbaabbbbbbbbbaaba + abbbbaaaabbbbbaaabbbbbaabbbabbbbabbbaaaaabbbbbaabbaaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbaabbbabbbabbbbbbbbbaabbbaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbabbaabbbbbbbbbaabbbbaaaaaabaaabbbabbbbaabbbbaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbaaabbbbbbbbaabbbbaabbaaaaaabbbabbbbaabbabaaabbbbbaaabba + abbbbabbaabbaabaaabbbaaaabbbabbbabbaaaabbbbbbbaabbbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbabbaaaaabaaaabaabbbbabbbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbaabbbbbbaaaaabaaabaabbaaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabbbbbaaaaabbabbaabbaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbaaabbbbaaaabbbbbaabbaabbaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaaabaaaaabbbaabbabaaaabbbbbaabaabbbaabbbaaaaaaaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbbaaaaaaaabbbbabbabaaaabbbbbbaaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbbbbaabaaaabbbaaaaabbbbaaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbaabbbbbbbbaaabbaaaabbbbabbbabaaabaaabbabbbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbaabbbbabbaaabbbaaaabbbaaabbbbaaabaaabbabbbbbbbaaaaaaabbbbaabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbaabbbbaaabaaabbabbbabbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbbb + bbaaaaaabaabaaaaaaabbbbbabaaabbbaabbbbaaabaaabbabbbbbbbbabbaaabbbaaaaabbaaaaaaabbbabbbbbba + bbaaabaaaaaaaaabbaabbbbbabaaabbbaabbbbaaabaabbbaabbbbbbbabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbaaabbbaaabaabbbbaabbbbaaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbaabbbbaaabaaabbbbbabbbaaabbaaabbbaabbabbbbbaabbaaaaaaabbaa + baabbbbbbaabbbabbaabbbbabbbaaabbabbbbbaaabaabbbabbbbbbaaabbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbabbaaabbbabbbaaabbbbbbbbaaabbbbbbaabbbbbbbabbaaabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbaabbbbbbbabbaaaabbbbbaaaabbbbbbbbbaabbaaabbaabbbaabbbbbbaabbbbba + aaabbbbbaaabbbbbbaaabbbabbabbbbbbaaabbaaaabbbabaaaaaabbbbbbbaabbabaabaabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaabbbbbaaaabbaaaaabaabaaaaaaaabbbbbbababbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbaabbabbbbbbaaaaaabbaaabbabbaaaaaaaaaabbbbbbabaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaabbbbaaaaaaabbbaaabbbbbaaaaaaaaaaabbbbbaaabaaaabaabaaabbbaaaabbbba + bbbbaaaabbbaaaaaabbbaaaabbbaaaaaaaaabbbbaabbbbbaaaaaaaaaaaaabbaaabbbaaaaabbbaabbbaaaabbbba + abbbaabbbbbbbaaabbbbbaabbbaaaaaaaaaabbbbbaaabbbaaaaabbaaaaaabbbaabbbbaaaabbbbaaaaabbaaabaa + abbbaabbbbbbbaabbbbbbbabbbaaaaaaaaaabbbbbababbaaaaaabbbbaaaabbbabbbbbaaabbbbbaaaabbbaaaaba + ababaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaabbaabbbbbbaaaaaabbbbaaaabbbabbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbabbbaaaaaaaaaaaabbaaabbaaaaababbbaaaaabbbaaaabbbaaaaaaaaaaaaaaaaaaba + abbbaabbbbbbbaabbbbbbbbbbbaaaaabbaaaaaaaaabbbbaaaaabbbbbaaaabbbbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbbbbbbaaaaabbbaaaaabbbbaaaaaaabbabbbaaaaabbbabbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbbbbbbaaabbbbbaaaaabaaabbbaaaabbbabbbaaaabbbaabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbabbbaaaabbbaaaaaaabbbbbbaaaaabababbbaaaabbbaabbaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbbaabbbbbbabbbaaaaaaaaaaaaaabaaaabbbaaabbabbbbaaaabbbbabbaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbaaabbbbbbabbbaaaaaaaaaaaaaabbbbbbbaaaabbbbbbbaaaabbbbaaaabaabbbbbbaaabbbbbaaab + abbbaabbbbbbaaabbbbbbabbbaaaaaaaaaaaaaabbbaabbaaaabbbbbbbaaaabbbbaaabbaabbbbbbbaabbaabaaab + abbbaabbbbbbaaabbbbbbabbbaaaaaabbbbaaaaabbbbbbaaaabbabbbbaaaaabbbbaabbaabbbbbbbaabbbabbaab + abbbaabbbbbbaaabbbbbbabbbaaaabbbbbbaaaabbbaaaaaaaabbaabbbaaaaabbbbaabbaabbbbbbaaabbaabbaab + abbbaaaaaaaaaaaaaaaababbbaaaabbaabaaaaaaaaabbbbaaabbaabbbaaaaabbbbaabbaaabbbbbaaabbbabbaab + abbbaabbaabbbaabbbbababbbaaaabbabbbaaaabbbbaaaaaabbbabbbbaaaaabbbaaabbaaaaaaaaaaabaaabaaaa + abbbaabaaabbaaabbbbbbabbbaaaabbbbbbbbaaaaaabbbbaabbaabbbbbaaaabbbaaaabaabbbbbbaabbbbbbbaab + bbbbaabbbbabaaabbbbbbbbbbaaaabbbbbbbaaaabbbbaaaaabbaabbbbbbaaabbbbabaababbbbbbbabbbbabbabb + bbbbaabbbbabaaabbbbbbbbbbaaaabbbbbbaaaaabaabbbbaabbaabbbabbaaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbaaaabbbbbbbaaaaabbbbaaaaabaabbbaabaaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaaaabbbbbbbaaaaabbbbabbbaabaabbbaabaaaabbbbbbaaaabbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbaaaabbbbbbbaaaaaabbbbbbaaababbbbaaaaaaabbbbbbbaabbbbbbbaabbbbbbaab + abbbaaabbbbbaaaaaaaabbbbaaababbbbaaaaaaabbbaaaaaaababbbbaaaaaaabbbbbbbaaabbbaaaaaaaaabbaaa + abbbabbbaabbaaaaaaaabbbbaaaaabbbbaaaaaaabbbbbbbbaababbbbaaaaaaaabbbbbabaabaaaaaaaaaaabbbaa + bbbbabbbbbbbaaaabbaabbbbaaaaaabbbaaaaaaaaaabbbaaaaabbbbbaaaaaaaabbbbbbbaabaaaaaaabaaabbaba + bbbbabbbbbbbaabbbbbbbbbbaaaaaabbaaaabbaabbbabbbbaaaabbbbaaaaaaaabbbbbbbbbbbbbababbbbbbbbba + bbbbabbbbbbbabbbbbbbbbbbaaaaaabbaaaabbaaaabbbbbbbaabbbbbaabaaaaabbbbbbbbbbbbbbbabbbbbbbbba + bbbbabbbbbbbabbbbbbbbbbbaaaabbbbaaaaabaabbbbaaaaaaabbbbbaaaaaaaabbbbbbbbbbbbbabbabbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaaabaaaaaabbbbbaaabbbbaabaaaabbbbbbbabbbbbbbbbbbbbbbbbbb + abbbbaaaabbbaaaabbabbbbbaaaabaaaaaaaabaaabbbbabbbaaabbbbaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbba + abbaabbbbbbaaaabbbabbbbbbaaaaaaaaaaaabaaabbbbbaabaaabbbbaaaaaaabbbbbbbaabbbbbbbbbbbbbbabaa + abbbbbbbbbbbbbbbabbbbbbbbaaaaabbaaaaabaaaaaaaaabbbaabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbababbbbbbbbbbbbbaaaaabaaabbbbbbabaaabbbaaaaabbabbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaaabbaabbbaaaabbbaabbaaaabbbabbbbbbbabbbbbbbbbbbbbbbaaaa + abbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaabbaaabbaaaaabbaaaabbbaaaabbbbaabbbbbbbbbbbbbbaaab + abbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaaaaaabaaaaaaaaabbaaabaaaaabbbaaaabbbbbbbbbbabbbbbbbbbaaab + abbbbbbbbbbaaabbbbbbbaabbbbbbbbaaaaaaabaaaaaaabbbbaaabaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbaabbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbaabaaaabbbaabbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaaaaabbbbbbbbbbbaabaaababbbaabbbbbbbbbbbbbbbbbbbbbaabb`, + map `abbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbababbbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbbaabbaaaaaaaaaaabaaabbbbaaaaaaaaaabaaabbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbabbabbaaaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaaaaabbaaabaaaaabbabbbbaabbbbba + bbbbbabbbbbaaaaaaabbbabbaaaaaaaabaaaaaaabbaabbbbbbaabaaaaaaaabaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbaaabbbaaaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaaabbbba + bbbbbbbbbbbaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaaabbbba + bbbbbbaabbbbaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbabbbaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbaaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbaabaaabbbbba + bbbbbbbaaaaabaaabbaaabbbbbbbbaaaaaabaaaaaaabbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaaabbbbbbbaaabbaabaaaaaaaabbbbbbaaaaaaaabaaaaabbbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaabaaabbbaabaaabbbaabbbbbbaaabaaabbbaaaaaabbbbbbbaabbbbaaaaabbbbba + bbbbbaaaaabbbbbaaaaabbbbaaaaaabbaaabaabbbbaaabbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaaabbbba + bbbbaaaaabbbbbbaaaabbbbaaaaaabbbaaaaabbbbbaaabbbbaabbbbbaabaabbbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbbbaabbaaabbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbaaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbbbbbbaabbbbbbbbbaaaabbaaaaaaabbbaaaaabbbbaabbbba + abbaaaabbbbbbbbbbaabbaaabbbbbabbaaabbbbbbbbbbbbabbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbbaabbba + bbbaaaabbbbbbbbbaaaaaaaabbbbbaabaaabbbbbbaaaabbbbbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbaabbba + bbaaaaabbbbbbbbbaaaaabaabbbbaaaaaabbbbbabaaaaabbbbbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbaaba + bbaaaaabbbbbbbbbaaaaabbaaabbabbaaabbbaaaaaaaaaaabbbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbaaba + aaabbabbbbbbbbbbbaaaabbbaabaabbaaabbbbaaaaaaaaaabbbbbbbbbbbaaaabaabbaaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbaabbbaaaaaaaaaaaabbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbaabbbbbbbbbbbabbaaaabbaabbbbabbbbaaaaaabbbaaabbabbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbaaaabbbbbbaabbabbbbbaaaaabbbbaaaabaabbaabbbbbbbbbaaba + abbbbaaaabbbbbaaabbbbbaabbbabbbbaabbbabbbbbbbbbaabbaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbaabbbabbbaabbbbbbbbbaabbaaabaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbabbbaaabbbbbbbbaabbbaaaaaabaaabbbabbbbaabbbbaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbabbbaaaabbbbbbbaabbbaabbaaaaaabbbabbbbaabbabaaabbbbbaaabba + abbbbabbaabbaabaaabbbaaaabbbabbbabbbaaaaaabaaabaabbbaabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaabbbaaaaabbaabaabbbabbbbbaaaabbbabbbaaaaaaaaaaabbbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbaabbaabbbaaaaabbbbbaabbaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaababbbbbaaaabbbbbaabaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbaaabbbabaaaabbbbaaabaabbaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaaabaaaaabbbaabbbabaaaabbbbbaaaabbbaabbbaaaaaaaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbbaaaaaaaabbbbabbbbabaaabbbbaaaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbabbbbabaabbbbbbbaabbbbaaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbabbbbbbaabaaababbbbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbabbaaabbbaaaabbbbaabbbbbaabaaababbbbbbbbbaaaaaabbbbaabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaabbbbaaaabbbbaabbbbbaabaaababbbbbbbbbaaaaaabbbbaaabbbaaabbabbbbabbbbbbb + bbaaaaaabaabaaaaaaabbbbbabaaabbbaabbbbbaabaabbabbbbbbbbbabbaaabbbaaaaabbaaaaaaabbbabbbbbba + bbaaabaaaaaaaaabbaabbbbbabbaabbbaabbbbbaabaabbbbbbbbbbbaabbaaabbbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbaabbbbbaabaabbbbabbbbbbaabbaaabbbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbabbbbbbaaaaababbaabbbbbaabbaaabbbaabbabbbbbaabbaaaaaaabbaa + baabbbbbbaabbbabbaabbbbaabbaaabbbbbbbbbaabaabbbbbaaabbbbbbbaaabbaaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbabbaaabbbabbbaaabbbbbbaabaabbbbbbbbaaaaabbbbbbbabbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbaabbbbbbbaaabaaabbbbabbaaaaaaabbbbbbbbaaabbaabbbaabbbbbbaabbbbba + aaabbbbbaaabbbbbbaaabbbabbaabbbbbaaaaabbaabbaabbbaaaaaaaaabbbbbbabaabaabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaabbbbbaaaaaabbaabbaabbbaaaaaaaaaabbbbbbbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbaabaaabbbbaaaaaaaabbbabbabbbbaaaaaaaaaaaabbbaaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaabbbaaaaaaaaaabbbabbabbbaaaaaaaaaaaaabbbabbaaaabaabaaabbbaaaabbbba + bbbbaaaabbbaaaaaabbbaaaabbbbaaaaaaaaaabbbbbbbbbbaaaaaabbaaaaaabbabbbaaaaabbbaabbbaaaabbbba + abbbaabbbbbbbaaabbbbbaaabbbbaaaaaaaaabbbbbbabbbaaaaababbbaaaaabbabbbbaaaabbbbaaaaabbaaabaa + abbbaabbbbbbbaabbbbbbbabbbbaaaaaaaaaaaaaaaaabbbbaaaabbbbbaaaaabbbbbbbaaabbbbbaaaabbbaaaaba + ababaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaabbaabbbaaaaaaabbbbaaaabbbbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbaaaaabbaaaaaabbaaaaaaaaabbbbbbaaaaabbababbbaaaaaaaaaaaaaaaaaaba + abbbaabbbbbbbaabbbbbbbaabbbaaaaabbbaaaaabbbbbbbaaaabbbabbbaaaabbbbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbaaabbbaaaabbbbbaaaabbbaaaaaaaabbbbbbbaaaabbbbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbaaaaaaabbbbbaaabbbabbbaaaabbbabbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbaaaabbbbbaaaabbbbbbaaaaabbabbbbaaaabbbabbaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbaaabbbbbbaabbbbaaaabbbbbbaaabbbaabbbaaabbabbbbaaaabbbaabaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbaaaaabbbbbaaabbbbbbbaaaabbbbbbbaaaabbbaaaabaabbbbbbaaabbbbbaaab + abbbaabbbbbbaaabbbbbbaabbbbaaaaabbbbaaaaabaaaaaaaaabbaabbbaaaaabbbaabbaabbbbbbbaabbaabaaab + abbbaabbbbbbbaabbbbbbaabbbbaaaaabbbbaaaaabbbbbbbaaabbaabbbaaaaabbbaabbaabbbbbbbaabbbabbaab + abbbaabbbbbbaaabbbbbbaabbbbaaaaaaabbbaaaabbaaaabaaabbaabbbaaaaabbbaabbaabbbbbbaaabbaabbaab + abbbaaaaaaaaaaaaaaaabaabbbbaaabbaaabbaaaabbbbbbbaaabbbbbbbaaaaabbbaabbaaabbbbbaaabbbabbaab + abbbaabbaabbbabbbbbabaabbbbaaabbaaaabaaaabbbbaaaaaabbabbbbbaaaabbbaabbaaaaaaaaaaabaaabaaaa + abbbaaabaabbbaabbbbbbaabbbbaabbbaaaabaaaaaabbbbbaaabaabbbbbbaaabbbaaabaabbbbbbaabbbbbbbaab + bbbbaabbbbabbaabbbbbbaabbbbaaabbaaaabaaaabbbbbaaaaabaabbbabbaaabbbbbaababbbbbbbabbbbabbabb + bbbbaabbbbabbabbbbbbbaabbbbaabbbaaaabaaaaaaabbbbbaabaabbbaabaaabbbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbabbbbbbbaabbbaabbbbaaaabaaaaabbbbbaaaababbbbaaaaaaabbbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbbbbbaabbbbbaaaabbaaabbbbabbaaababbbbaaaaaaabbbbbaaaabbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaabbaaaabbbbaaabaaaaaabbbbbbaababbbaaaaaaaabbbbbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbaaaaaaaaaabbbaaaabbbaaaaaabaabbbaaaaaaababbbaabaaaaabbbbbbaaabaaaaaaaaaaabbaaa + abbbabbbaabbaaaabaaaaabbbbaabbbbaaaaaabaaaaabbbbbaababbbaaaaaaaaabbbbabaabaaaaaaaaaaabbbaa + bbbbabbbbbbbaababaaababbbbaaabbbaaaaabbaabbbabbaaaababbbaaaaaaaaabbbbbbabbaaaaaaabaaabbaba + bbbbabbbbbbbaabbbbabbbbbbbaabbbbaaaababaaabbbbaabaaabbbbaaaaaaaaabbbbbbbbbbbbababbbbbbbbba + bbbbabbbbbbbabbbbbbbbbbbbbaaabbbaaaaaabaaaabbbbbbbabbbbbaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbba + bbbbabbbbbbbabbbbbbbbbbbbbaaabbaaaaaaabaaabbbbaabaaabbbaaaaaaaaabbbbbbabbbbbbaaaabbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabaaaaaaaabbbaabbbaaabbaaabbbbbbbbabbbbbbbbbbbbbbbbbb + abbbbaaaabbbaaabbbaabbbbbbaaaaaaaaaaaabaaabbbbbaabaaabaaaabbbaabbbbbbbbabbbbbbbbbbbbbbbbba + abbaabbbbbbaaaabbbbbbbbbbbbaaaaaaaaaaabaaabbbaabbbaaabaaabbbbaabbbbbbbbabbbbbbbbbabbbbabaa + abbbbbbbbbbbbbbaabbbbbbbbbbbaaabaaaaaabbaaaabbbaabbaabaaabbbbbabbbbbbbbbabbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaaaaabaaabbbaaababaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbaaaaaaabaaaaaaabbabaaaaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaa + abbbabbbbbbbbbbbbbbbbbabbbbbbbbbaaaaaaaaaabaaaaaabaaaaaaabbbbbbbbbbbbbaabbbbabbbbbbbbbaaab + abbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabaaaaababbbbbbbaaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbbbbbbbbabbbbbbbbaaabbbbbbbaaaaabaaaaabbbbbbbbbbaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaaaaabbbbbbbbbbaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaaaaabbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaaaaabbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaab`, + map `abbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbbaaaaaabbbbbbababbbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbbaabbaaaaaaaaaaabaaabbbbaaaaaaaaaabaaabbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbbababbaaaabbbaabaaaaaaabbaaabbaaaaaaabbbaaaaaaabbbaaaaaabbaaabaaaaabbabbbbaabbbbba + abbbbbababbaaaaaaabbbabbaaaaaaaabaaaaaaabbaabbbbbbaabaaaaaaaabaaaaaaaaaaaaaaaabbbbaabbbbba + bbbbbbbbbbbaaaaaabbbbabbbbbbbbbaaaaaaaaaaaaabbbbbbaabbaaaaaaabaaaaaaabbabbaaaabbbbaaabbbba + bbbbbbaabbbaaaaabbbbaabbabbbbbbbaaaabbbbaaaabbbbbbaabaaabbaaaaaaabbbbbbabbbaaabbbbaaabbbba + bbbbbbaabbbbaabbbbbaaabbabbbbbbbaaaabbbbaaabbbbbbbaaaabbbbaaaabbbbbbbbbaabbbaabbbbaabbbbba + abbbbbbabbbaaabbbbbaaabbabbbbbbbaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaabbbaabbbaaabbbbba + abbbbbbaaaaaaabbbbbaabbbabbbbbbaaaaabbbbaabbbbbbbbbbabbbbbaaaabbbbbbbbbaaabbbbaabaaabbbbba + bbbbbbbaaaaabaaabbaaabbbbbbbbaaaaaabaaaaaaabbbbbbbbbaabbbaaaaaabbbbbbbbaaaabbbbaaaaabbbbba + abbbbbbaaabbbbaaabaaabbbbbbbaaabbaabaaaaaaaabbbbbbaaaaaaaabaaaaabbbbbbbbbaabbbbaaaaabbbbba + abbbbbaaaabbbbaaaaaabbbbaabaaabbbaabaaabbbaabbbbbbaaabaaabbbaaaaaabbbbbbbaabbbbaaaaabbbbba + bbbbbaaaaabbbbbaaaaabbbbaaaaaabbaaabaabbbbaabbbbbaaabbbaaabaaabaaaabbbbbbaabbaaaaaaaabbbba + bbbbaaaaabbbbbbaaaabbbbaaaaaabbbaaaaabbbbbbbbbbbbaabbbbbaabaabbbaaaaabbbbaaaaaabbbaaabbbba + abbbaaaaabbbbbbbaaabbbbaabbaaabbaaaabbbbbbbbbbbbbabbbbbbaaaaaabbaaaaabbbbbaaaaabbbaaabbbba + abbaaaabbbbbbbbbaaabbbaaabbbaabbaaabbbbbbbaaabbbbbbbbbbbbbaaaabbaaaaaaabbbaaaaabbbbaabbbba + abbaaaabbbbbbbbbbaabbaaabbbbbabbaaabbbbbaaaaaaabbbbbbbbbbbaaaabbaabbaaabbbbaaabbbbbbaabbba + bbbaaaabbbbbbbbbaaaaaaaabbbbbaabaaabbbaaaaaaaaaabbbbbbbbbbaaaabbabbbaaabbbbaabbbbbbbaabbba + bbaaaaabbbbbbbbbaaaaabaabbbbaaaaaaabbbaaaaaaaaaaabbbbbbbbbaaaabaabbbaaaaabaaabbbbbbbbbaaba + bbaaaaabbbbbbbbbaaaaabbaaabbabbaaabbbbaaaaaaaaaaabbbbbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbaaba + aaabbabbbbbbbbbbbaaaabbbaabaabbaaabbbbaaaaaaaaaaabbbbbbbbbbaaaabaabbaaabbaaaabbbbbbbbbaaba + aaabaabbbbbbbbbbbabbaabaaaaabbbbaabbbbaaaaabbbbaabbbbbbbbbaaaabbbabbaabbbaaaabbbbbbbbbaaba + aabbaabbbbbbbbbbbabbaaaabbaabbbbaabbbbaabbbbbbbaabbbbbbbbaaaaabbbaaaaabbabaaabbbbbbbbbaaba + aabbbabbbbbbbbbbaabbbaaabbbabbbbabbbbaabbbbbbbbbaababbbbbaaaaabbbbaaaabaabbaabbbbbbbbbaaba + abbbbaaaabbbbbaaabbbbbaabbbabbbbaabbbaabbbbbbbbbaabaabbbaabaaabbbbabbaaaabbaabbbbbbbbbbaba + abbaaaaaabbbbaaaaabbbbaabbbaabbbaabbbaaabbbbbbbbaabaabbaabbaaabbbaabbbaabbbaabbbbbbbbbbabb + abaaaaaaabbbbaaaaaaaaaaabbbbabbbaabbbaaaaabaaaababbbaaaaaabaaabbbabbbbaabbbbaabbbbbbbbabbb + abaaaaaaaabbaaaaaaaaaaaaabbbabbbaabbbaaaaaabaaababbbbabbaaaaaabbbabbbbaabbabaaaabbbbaaabba + abbbbabbaabbaabaaabbbaaaabbbabbbaabbbaaaaaabbabbabbbbabbbaaaaabbbabbbaaaaaaaaaaabbbbaaaaaa + abbbbbbbbaaaabbbbbbbbabbabbbabbbaaabbbbaaaabbbbbaabbabbbbbaaaabbbabbbaaaaaaaaaaaabbaaaaaaa + abbbbbbbbbaabbbbbbbbaabbaabbaabbaabbbabaaaabbbbaabbaaabbbbaaaabbbabbaabaabbaabbaabbaaaaaba + abbbbbbbbaaabbbbbbbbaabbbabbaaabaabbbabaaaabbbbaabaaaaabbbbaaabbaabbaabbabbbbbbbaaaabbbbbb + aabbbbbbbaaabbbbbbbaaabbbababbaaaabbbabaaaaabbbaabaabbaabbbaaaaaaabbabbbabbbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbaaabbaaaabbbaaabbbbbaaaabbbbaaaabbbaabbbaaaaaaaaaabbbaabbbbbbbaaabbbbba + aabbbbbbbaaabbbbbbbbaaaaaaaabbbbaabbbbbaaaaaabbaaaabbbaabbbaaaabbbaaabbbaabbbbbbbaaabbbbba + abbbbbbbbbabbbbbbbbbaaaaaaaabbbbaaabbbbbabbbbbbaaabbbbaaabaaaabbbbaaaaabaabbbbbbbaaabbbbba + aabbbbbbbbabbbbbbbbaaabbaaaabbbbaababbbbabaaabbabbbbbbbaaaaaaabbbbaaaaaaaabbbbbbbaaabbbbba + aaaaaabbbbabbbbaabaaabbbaaaabbbbaaaaabbbabaaabbabbbbbbbbaaaaaaabbbaabbbaaabbbbbbbaabbbbbba + bbaaaaabbbabbbaaaaaaabbbaaaabbbbaabbbbbbabaabbbabbbbbbbbaaaaaaabbbaaabbbaaabbabbbbabbbbbbb + bbaaaaaabaabaaaaaaabbbbbabaaabbbaabbbbbbabaabbbbbabbbbbbabbaaaabbaaaaabbaaaaaaabbbabbbbbba + bbaaabaaaaaaaaabbaabbbbbabaaabbbaabbbbbbabaabbbbbaabbbbbbbbbaaabbaabaabbbbaaaaaabbabbbbaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbaabbbbbbabaabbbbbaaaabbbbbbbbaabbaabbabbbbbaaaaaaaabaaaaaa + bbabbbbbaaaaabbbbaabbbbaabbaabbbabbbbbabaaaaabbbbbaaaaabbbbbbbabbaabbabbbbbaabbaaaaaaabbaa + baabbbbbbaabbbabbaabbbbaabbaaabbbbbbbaabaaaabbbabbaaaaaaaabbbbbbbaabbaabbbbabbbbaaaaabbbba + aaabbbbbbaabbbabbaaabbbabbbaaabbbbbbaaabbaabbbaabbaaaaaaaaaabbbbaaabbaabbbbabbbbbaaaabbbba + aaabbbbbbaabbbbbbaaabbbabbaabbbbbbaaaaabbaabbaabbbaaaaaaaaaaabbbbaabbaabbbaabbbbbbaabbbbba + aaabbbbbaaabbbbbbaaabbbabbaabbbbbaaaaaabbbabaaabbbaaaaaaaaaaaabbbbaabaabbaaabbbbbbaabbbbba + abaabbbbaaaabbbbaaaaabbabaabbbbbaaaaaaabbbbbaabbbaaaaaabaaaaaaabbbaabbabbbaabbbbbbaabbbbba + bbaabbbaaaaabbbaaabbaabaaabbbbaaaaaaaaabbbbbabbbbaaaaabbbbaaaaabbaaaababbaaaabbbbaaaabbbba + bbbaabaaabbaabbaabbbaaaaaabbbaaaaaaaaaabbbbbbbbbbaaaaabbbbbaaaabbbbaaaabaabaaabbbaaaabbbba + bbbbaaaabbbaaaaaabbbaaaaabbbbaaaaaaaaaabbabbabbbaaaaaabbbbbaaaabbbbbaaaaabbbaabbbaaaabbbba + abbbaabbbbbbbaaabbbbbaaabbbbbaaaaaaaaaaaaaabbabbaaaaaabbbbbaaaabbbbbbaaaabbbbaaaaabbaaabaa + abbbaabbbbbbbaabbbbbbbabbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaabbbbbbaaabbbbbaaaabbbaaaaba + ababaaaaaaaaaaaaaaaaaaabbbbbbaaaaabbaaaaabbbbbbbaaaabbbbbbbaaaabbbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbbbaaaabbbbaaaaabbbaaaaaaababbbbbaaaaabbabbbaaaaaaaaaaaaaaaaaaba + abbbaabbbbbbbaabbbbbbaaabbbbbaaaabbbbaaaaabbbbbbbaaababbbbbaaaaabbbbbbaabbbbbbaabbbabbaaba + abbbaabbbbbbbaabbbbbbaaaabbbaaaaabbbbbaaaabbbbbaaaaabbbbbbbaaaaabbbbbbaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaaaabbbaaaaabbbbbaaaabbaabbbaaabbaabbbaaaaabbbbbaaabbbbbbaabbbbbbaabb + abbbaabbbbbbbaabbbbbbaaaabbbaaaaaaabbbaaaabbbbbbaaaabbabbbbaaaaabbbbaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbaaabbbbbbaabbabbaaaaaabbbbaaaaaaaabbbaaabbabbbbaaaaabbbbaaaabbbbbbaaabbbbbaabb + abbbaabbbbbbbaabbbbbbaabbbbbbaaaabbbbbaaaabbbbbbaaaabbabbbbaaaaabbaaabaabbbbbbaaabbbbbaaab + abbbaabbbbbbaaabbbbbbaabbbbbbaaaabbbbbaaaaabaabaaaaabbabbbbaaaaabbbabbaabbbbbbbaabbaabaaab + abbbaabbbbbbbaabbbbbbaabbbbbbaaaabbbbbaaaabbbbbbbaaabbabbbbaaaaaabbbbbaabbbbbbbaabbbabbaab + abbbaabbbbbbaaabbbbbbaabbbbbbaaaabbbbbaaaabbbbaaaaaabbbabbbbaaaaabbbbbaabbbbbbaaabbaabbaab + abbbaaaaaaaaaaaaaaaabaabbbbbbaaaabbbbbaaaabbbbbbbaaabbbabbbbaaaaabbbbbaaabbbbbaaabbbabbaab + abbbaabbaabbbabbbbbabaabbbbbbaaaabbbbbaaaabbbbbaaaaabbabbbbbaaaaabbbbbaaaaaaaaaaabaaabaaaa + abbbaaabaabbbaabbbbbbaabbbbbbaaaabbbbbbaaabbaabbbaaabaabbbbbaaaaabbbabaabbbbbbaabbbbbbbaab + bbbbaabbbbabbaabbbbbbaababbbbaaaabbbbbbaaabbbbbbaaaabaabbbabbaaaabbbabaabbbbbbbabbbbabbabb + bbbbaabbbbabbabbbbbbbaaabbbbbaaaabbbbbbaaabbbaabbbaabaabbbaaaaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbbabbbbbbbaaabbbbaaaaabbbbbbaaabbbbbbbbaabaaabaaaaaaaabbbbaaabbbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaabbbbbaaaaabbbbbbaaabbbaaaaaaaaaaaaaaaaaaaaabbbaaaabbbbbbaabbbbbbaab + abbbaabbbbbbaabbbbbbbaabbbbbaaaaabbbbbbaaabbabbbbbaaaaaaaaaaaaaaaabbbbaabbbbbbbaabbbbbbaab + abbbaabbbbbbbaaaaaaaaaabbbbbbaaaaabbaaaaaabbbbabbaaaaabaaaaaaaaaaabbbbaaabaaaaaaaaaaabbaaa + abbbabbbaabbaaaabaaaaabbbbbbbbbaaabaabaaaabbbabbbaaaaabbaaaaaaaaaabbbbbaabaaaaaaaaaaabbbaa + bbbbabbbbbbbaababaaababbbbbbbbaaaabbababaabbbbbbbbaaaabbbbaaaaaaabbbbbbabbaaaaaaabaaabbaba + bbbbabbbbbbbaabbbbabbbbbbbbbbbbaaaababaaaabbbbbbabaaabbbbbbaaaaabbbbbbbbbbbbbababbbbbbbbba + bbbbabbbbbbbabbbbbbbbbbbbabbbbbaaaaaaaaaaabbbbbabbaabbbbbbbaaaaabbbbbbbbbbbbbbbabbbbbbbbba + bbbbabbbbbbbabbbbbbbbbbbbaabbbaaaaabbaaaaabaabbbbbaabbbbbbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbb + abbbbbbbbbbbbbbbbbbbbbbbbaabbbbaaaaabbaaaababbbaabaaabbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbb + abbbbaaaabbaabaaaaaabbbbbaabbbaaaaabbaaaaababbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + abbaabbbbbbaabbbabbbbbbbbbabbbaaaaabaaaaaababbaaaaaaaabbbbbaaaabbbbbbbaabbbbbbbbbabbbbabaa + abbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabaaaaabbaaaabbbbbaaabbbbbbbbbbabbbbbbbbbbbbbaaaa + abbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaaaaaaaaabaaaaaabaaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaabaaaaababbbbbbbaaaaabbaabbbbbbbbbbbababbbbbbbbbbbbaaaa + abbbabbbbbbbbbbbbbbbbbbbbbbbabbbbaaabbbaaababbbbbbbaaaaaaaabbbbbbbbbbbabaabbbbbbbbbbbbaaab + abbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbaaaababbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaab + abbbbbbbbbbbabbbbbbbbaaabbbbbbbbaaaabbaaaababbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaababbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaab + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaababbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabb + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaaaababbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaab`, + map `bbaaaabbbbabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbabbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbba + bbaaabbbbaabbbabbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbba + bbbaabbbbbabbbaaaaabbbbbaaaaaaabbaaaaaaabbbbbaaabbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbaabbaaaaaabbbaabbbbbbbbbbbbbbbbbbaaaabbbbbabbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbabbbbbbaaabbbaabbbbaabbbbbbbbbbbaaaaabbbbbabbaaaaabbbbbba + bbbaaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaabbbbbbaabaaaaabbbbbba + bbbbaaabbbbbbbbaabbbbaaaaaabbbbbbbbbaaaabbbbbabbaabbaabbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + bbbbaaabbaabbbbaabbbbaaaababbbbbaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + bbbbaabbbbbbbbaaabbbaaaaabbbbbaaaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbaabbaabbaaaaaaaaaabaaabbbabbbbaaaababbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbaabbaabbaabaaaaaaabaaaaaaabbbbaaaaaabbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + bbbbbbbbbbabbbbbbbbaabbabbbaabbaaaaabbbaaaaabbbbaaaaaaabbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + aabbbbbaaaaaaaaabbbaabbbbaaaaabaaabbabbbaabaabbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbabaaabbbbbbb + aaabbbbaaaaaaaaabbbaabbbbaaaaaaaaaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbba + abbbbbbaaaaaaaabbbbaabbbaaaaaaaaaaaaaaaaabbbaababbbbbabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbba + bbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbbaaaaaaaabbbaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbaaaaaaaabbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbaaaaaaaaaaabbbbbbbbbbbaaaabbabbbaaabaaaaabbbbba + bbbabbbbbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbaaaaaaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbba + abbabbbbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbaaabbbbba + abaabbbbbaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbba + abbabbbbbaabbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbaaaaaaaabbaaaaaaaaaabbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaabbbbbaabbbbbbbaabbbbbbabbbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaaaabaaaabbbbbbbaabbbabbabbbbbbbbaabbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbaaaaaaabaaabbbbbbbbbbbbbaaabbbbbbbbaabbbbbbb + abbbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbabaababbbbbba + abbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaabaabbbbbbbbbbbbbbaaaabaaabbbbaaaaaabbbbbba + abbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbabbbaaaaabbbabaabbbbbbbaaaaaaaaabbbbbbbaabbbbbbb + bbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbbbabbbabaaabbbbbaabbbbbbbbbbbbbbaaabbbbbbbabbbbbbb + bbbbbbbbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbaabbbbbaa + bbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbaaaaabbbbbbaaabbbbbbbbbbbbbbbaabbbbbabbbbaaaaabbbbbba + abbbbaaabaabbbbaabbaaabbbbbbbbaaabbbaaaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbaaaabaabbbbaaabbaabbbaaaaaaabbbaaaabbaaabbbaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaaabaabbbbaaaabaabbbbabaaabbbbaaaaaaaabbbbbaaaaabbbabaaaaaaabbbbbbbbabbbabbbbabbbbbba + abbbbbbbbaabbbaaaabbbabbbbbbbbbbbbbaabbbaaabbbbbaaaaabbbaaabaaaabbbbabbbbbbbbabbbbabbbbbba + bbbbbbbbbabbbbbaaabbaabbbbbbbbbbbbbbabbbbbbbbbbaaaaabbbbbbbbbbbabbbabbbbbbbbbaabbbabbbbbba + bbbbbbbbbabbbbbbaabbabbbbbbbbbbbbbbbabbbaabbbbbabaabbbbbbbbbbbbbbbaaabbbbbbbbaaabbabbbbbba + bbbbaabbbbbbabbbaabbbbabbbbbbbbbbbbbabbbbbabbbbbbaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbba + abaaaabbbbbbaaaaaabbbbaabbbbbbbbbbbbaabbbbabbbabbaabbbbaaaaaaaaabbbbbbaabbbbbbbbbaabbbbbba + abaaaabbbbbbaaaaaaabbbaabbbbbbbbbbbbbabbbaabbbabaaaabbbaaaaaaaaabbbbbbaabbbbbbbbbaabbbbbba + abbbaabbbbbbaaaaaaabbbabbbbbaabbbbbbbabbbabbbaaaaaabbbbaabbbbaabbbbbbbaabbbbbbbaababbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbaabbabbbbbbbbbabbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbbbbaaababbbbbba + bbbbbbbbbbbbbbbbbbabbbbbbbbaabbaaabaaabbbabbbbbaababbbbbbbbbbaabbbbbbbaabbbbbbbaababbbbbba + abbbbbbbbbbbbbbbaaaabbbbbbaabbbbaaaaaabaaabbbbaaaaaaaaaabbbbbaaabbbbbbbbabbbbbbbbbabbbbbba + abbbaabbaaaaabbbaaaaaaabbbabbbbbbbaaaabaaabbbbaaaaaaaaaabbbbaaaabbbbbbabbbbbbbbbbbabbbbbba + abbaaaabaaaaaaaaaaaaaaabbaabbbbbbbbbbbbbaabbbaaaaaaaaababbbbbaaabbbbbbabbbbabbbbbbabbbbbba + aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaabbbaaaabbbbbbbbbbbbbbabbbbbbbaabbbabbbbbbabbbbbba + aaaaabbbbbbabbaabbaaaabbbbbbaaaaaaaaaaaaabbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbbaabbbbbaaaabbbbaaaaabbbbbaaabbbaaabbbbbbbbbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbabbaaaaabbabbbbaaaaaaaaabbbbbaaaaaaaaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbba + bbabbbbbbbbbbbabbaaaabbbabbbbbbbbaaaabbbbbbaaaaaaaaabbaaabbbbbabbbbbbbbbbbbabbbbbaabbbbbba + bbaaaaaaabbbbbabaaabbbbbabbbbbbbbbbabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbbbba + baaaaaaaaabaaaaaaabbbbbbaaabbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbbbba + baaaabbaaaaaaaaaabbbbbabbaabbbbaaaaabbbbbbbbaabbbbbbabbbaaaaaaabbbbbbbabbbbbbbbbaaaabbbbba + aaaabbbbbbbbaaaabbbbbbabbbabbbbaaaaabbbbbaabaaabbbbaaaabaaaaaaaabbbbbbbbbbbbbbbbaaabbbbbba + bbbbbbbbbbbbaaabbbbbbaabbbbabbbbbbaabbbbbaabaaaabbbbaaabaaaaaaaabbbbbbbbbbbabbaaabbbbbbbba + bbbbbbbbbbbaaaabbbbbbaabbbbabbbbbbbabbbbaaabbaaaaabbaabbbbbbbbaaabbbbbbbbbaaabaaabbbbbbbaa + bbbaaaaaaaaaaabbbbbbaaabbbbaabbbbbbbbbbaaaaabbaaaaabbbbbbbbbbbbabbbbbbbbbbaaabaaabbbbbbbbb + abaaaaaaaaaaabbbbbbbaaabbbbaaabbbbbbbbaaaaaabbaaaaabbbbbbbbaababbbbbbbbbbbbbbbaaabbbbbbbbb + abaaaaaaaaaabbbbbbbbaaabbbbbaaaababbbaabaaabbbbaaaaabbbbbbaaaaabbbbbbbbbbbbbbbaaabbbbbbbbb + abbaaaaaaaaabbbbbbbbaaaabbbbbaaaaabbaabbaaabbbbbaaaaaaaabbaaaaabbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbaaaabbbbbbbbbaaaabbbbbbaaaaaabbbaaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbaaaaabbbabbbbbaaaaabbbbbbaaaabbbbaaaaabbbaabbaaabbbbbbbbabbbbbbbbbbbbbbbaaabbbbbbbba + bbbaaaaaaabbbbabbbbbaaaaabbbbbbbaabbbbaaaaaabbbaaabbaaaaaaaaaaaaabbbbbbbbbbbbaaaabbbbbbbba + bbaaaaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbaaaaaaabbbaabbbbaaaaaaaabbaaabbbbbabbbbbbaabbbbbbbbba + aaaaaaabbbbbbbbbbbbaaaaaaaabbbbbbbbaaaaaaaabbbbaabbbbbbaaaaaabbaaabbbbbbbbbbbaaabbbbbbbbba + bbaaaabbbbbbbbbbbbbaaaabaaaabbbbbbaaaaaaaaabbbbaabbbbbbbaaaaaaabaabbbbbbbbbbbaaabbbbbbbbba + aaaabbbbbbbbbbabbbbaaaabaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaaabbbbbbbbb + aaabbbbbbbbbbbabbbaaaaaaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbb + aabbbbbbbbbbbbabbbaaaaaabaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbbbb + aabbbbbbbbbbbbabbaabaaaabbbaaaaaaaabbbaaaaabbbbaaabbbbbbbbbbbaaaaaaaabbbbbbaaaaabbbbbbbbbb + abbbbbbbbbbbbbabbabbaaaabbbaaaabbbbbbbaaaaabbbbaaaabbbbbbbbbbaaaaabbabbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbabbabbaaaabbbbaaabbbbbbaaaaaabbbbaaaabbbbbbbbbbbaaaabbabbbbabbaaaaabbbbbbbba + bbbbbbbbbbbbbbabbbbbaaabbbbbbbbaabbbbabbaaabbbbbaaabbbbbbbbbbbbaaabbabbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbbbabbbbaaaabbbbbbabbbbabbbbaaabbbbbaaabbbbbabbbbbbbaaababbbbbbbbaaaabbbbbbbbb + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbababaabbbaaaabbbbbaaabbbbbaabbbbbbaaaaabbbbbbbbbaaabbbbbbbbb + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaaaabbbbabbaaaaabbbaabbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbaaabbba + abbbbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbaabbba + abbbbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbaabbbbbaaaaaaabbbaaaabbbbbbbba + abbbbbbbbbbaaaaaaabbbaaaaabbbbbbabbbbaaaabbbbbbaaaaabbbbbbbbaabbbbbaaaaabbbbbbbaabbbbbbbba + abbbbbbbbbbaaaaaaaabbbaaaabbbbbbabbbaaaaabbbbbaaaaaabbbbbbbbaababbbaaabbbbbbbbbbabbbbbbbba + abbbbbbbbbbaaaaaabbbabaaaabbbbbbbbbbaaaabbbbabaabaaaabbbbbbbaababbbbaaabbbbbbbbabbbbbbbbba + abbabbbbbbbbbbbbbbbbbabaaaaabbbbbbbbbaaabbaaabbabaaaabbbbbbbbababbbbaaaabbbbbaaabbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbaaabbabaaaabbbbbbbbbbabbbbbaaaaaaaaaaaabbbbbbbba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabaaaaababbaaabbbbbbbaaaababbbbaaaaabbbaaabbbaaabba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbaaaaaaaaaaaabbbbbbabaababbbbaaaaabbbaabbbbbbbbba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbabaaaabbbabbbaaaaaaaabbbbbbabaababbbbbaaaabbaaabbbbbbbbba + abbbbbabbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbabbbbaaaaaaabbbbbbbbaababbbbbaaaaabaaabbbbbbbbbb + abbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbaabbbbabbaaaabbbbbaaaaabbbbbabbaaaaaaaabbbbbbaaaa + abbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbaaabbbabbabbbbbbbbaabaabbbbbabbaaaaaaaabbbbbbaaaa`, + map `bbaaaabbbbabbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbba + bbaaabbbbaabbbabbbbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbbbbaaabbbbbbbbbaaaabbbbbbba + bbbaabbbbbabbbaaaaabbbbbaaaaaaabbaaaaaaabbbbbaaabbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbaabbbbbbbbaaaaaaabbaabbaaaaaabbaaabbbbbbbbbbbbbbbbbbaaaabbbbbabbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbabbbbbbaaabbbaabbbbaabbbbbbbbbbbaaaabbbbbbabbaaaaabbbbbba + bbbaaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaaabbbbbaabbaaaaabbbbbba + bbbbaaabbbbbbbbaabbbbaaaaaabbbbbbbbbaaaabbbbbbbbaabbaaabbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + bbbbaaabbaabbbbaabbbbaaaabbbbbbbaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + bbbbaabbbbbbbbaaabbbaaaaabbbbbaaaaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbaabbabbbaaaaaaaaaabaaabbbabbbbaaaabbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbaabbabbbaabaaaaaaabaaaaaaabbbbaaaaaabbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + bbbbbbbbbbabbbbbbbbaabbabbbaabbaaaaabbbaaaaabbbbaaaaaaabbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + aabbbbbaaaaaaaaabbbaabbbbaaaaabaaabbabbbaabaabbbbbaaaabbbbbbbbbbbaaabbbbbbbbbbabaaabbbbbbb + aaabbbbaaaaaaaaabbbaabbbbaaaaaaaaaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbba + abbbbbbaaaaaaaabbbbaabbbaaaaaaaaaaaaaaaaabbbaababbbbbabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbba + bbbbbbbbbbbbbaabbbbaaaaaaaaaabbbbaaaaaaaabbbaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbaaaaaaaabbbbba + bbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaaaaabbbaaaaaaaaaaabbbbbbabbbbaaaabbabbbaaabaaaaabbbbba + bbbabbbbbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbaaaaaaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbba + abbabbbbbbabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbaaabbbbbb + abaabbbbbaabbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbba + abbabbbbbaabbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbaaaaaaaabbaaaaaaaaaabbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbaaaaabbbbbaabbbbbbbaabbbbbbabbbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaaaabaaaabbbbbbbaabbbabbabbbbbbbbaabbbbbba + bbbbbbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbbaaaaaaabaaabbbbbbbbbbbbbaaabbbbbbbbaabbbbbbb + abbbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaaaabbbbbbbbbbbbbbbaaabbbbbbbbbabaababbbbbba + abbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbaaaabbbaabaabbbbbbbbbbbbbbaaaabaaabbbbaaaaaabbbbbba + abbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbabbbaaaaabbbabaabbbbbbbaaaaaaaaabbbbbbbaabbbbbbb + bbbbbbbbbbbbabbbbbbaaabbbbbabbbbbbbbbbbbbbabbbabaaabbbbbaabbbbbbbbbbbbbbaaabbbbbbbabbbbbbb + bbbbbbbbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabbbbbaa + bbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbaabbbbbabbbbaaaaabbbbbba + abbbbaaabaabbbbaabbaaabbbbbbbbaaabbbaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbaaaabaabbbbaaabbaabbbaaaaaaabbbaaaabbaaabbbaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbbbaaabaabbbbaaaabaabbbbabaaabbbbaaaaaaaabbbbbaaaabbbbabaaaaaaabbbbbbbbaaababbbbabbbbbba + abbbbbbbbaabbbaaaabbbabbbbbbbbbbbbbaabbbaaabbbbbaaaaabbbaaabaaaabbbbabbbbbbbbabbbbabbbbbba + bbbbbbbbbabbbbbaaabbaabbbbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbbbbbabbbabbbbbbbbbaabbbabbbbbba + bbbbbbbbbabbbbbbaabbabbbbbbbbbbbbbbbabbbaabbbbbabaabbbbbbbbbbbbbbbaaabbbbbbbbaaabbabbbbbba + bbbbaabbbbbbabbaaabbbbabbbbbbbbbbbbbabbbbbabbbbbbaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbba + abaaaabbbbbbaaaaaabbbbaabbbbbbbbbbbbaabbbbabbbabbaabbbbaaaaaaaaabbbbbbaabbbbbbbbbaabbbbbba + abaaaabbbbbbaaaaaaabbbaabbbbbbbbbbbbbabbbaabbbabaaaabbbaaaaaaaaabbbbbaaabbbbbbbbbbabbbbbba + abbbaabbbbbbaaaaaaabbbabbbbbaabbbbbbbabbbabbbaaaaaabbbbaabbbbaabbbbbbbaabbbbbbbbababbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbaabbabbbbbbbbbabbbbbabbbbbbbbbbbbbbbbbbbbbbaabbbbbbaaababbbbbba + bbbbbbbbbbbbbbbbbbabbbbbbbbaabbaaabaaabbbabbbbbaababbbbbbbbbbaabbbbbbbaabbbbbbbaababbbbbba + abbbbbbbbbbbbbbbaaaabbbbbbaabbbbaaaaaabaaabbbbaaaaaaaaaabbbbbaaabbbbbbbbabbbbbbbbbabbbbbba + abbbaabbaaaaabbbaaaaaaabbbabbbbbbbaaaabaaabbbbaaaaaaaaaabbbbbaaabbbbbbabbbbbbbbbbbabbbbbba + abbaaaabaaaaaaaaaaaaaaabbaabbbbbbbbbbbbbaabbbaaaaaaaaabbbbbbbaaabbbbbbabbbbbbbbbbbabbbbbba + aaaaaaaaaaaaaaaaaaaaaaabbbbaaaaabbbbbbbaabbbaaaabbbbbbbbbbbbbbaabbbbbbaabbbabbbbbbabbbbbba + aaaaabbbbbbabbaabbaaaabbbbbbaaaaaaaaaaaaabbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbbabbbbbba + abbbbbbbbbbbbbbbbbbaaaabbbbbbaabbbbbaaaabbbbaaaaabbbbbaaabbbbaaabbbbbbbbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbabbaaaaabbabbbbaaaaaaaaabbbbbaaaaaaaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbba + bbabbbbbbbbbbbabbaaaabbbabbbbbbbbaaaabbbbbbaaaaaaaaabbaaabbbbbabbbbbbbbbbbbabbbbbaabbbbbba + bbaaaaaaabbbbbabaaabbbbbabbbbbbbbbbabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbbbba + baaaaaaaaabaaaaaaabbbbbbaaabbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbbbbabbbbbabbbbabbbaaaabbbbbba + baaaabbaaaaaaaaaabbbbbabbaabbbbaaaaabbbbbbbbaabbbbbbabbbaaaaaaaaabbbbbabbbbbbbbbaaaabbbbba + aaaabbbbbbbbaaaabbbbbbabbbabbbbaaaaabbbbbaabaaabbbbaaaabaaaaaaaabbbbbbbbbbbbbbbbaaabbbbbba + bbbbbbbbbbbbaaabbbbbbaabbbbabbbbbbaabbbbbaabaaaabbbaaaabaaaaaaaaabbbbbbbbbbabbaaabbbbbbbba + bbbbbbbbbbbaaaabbbbbbaabbbbabbbbbbbabbbbaaabbaaaaabaabbbbbbbbbaabbbbbbbbaaaaabaaabbbbbbbaa + bbbaaaaaaaaaaabbbbbbaaabbbbaabbbbbbbbbbaaaaabbaaaabbbbbbbbbbbbbabbbbbbbbbaaaabaaabbbbbbbbb + abaaaaaaaaaaabbbbbbbaaabbbbaaabbbbbbbbaaaaaabbaaaaabbbbbbbbaababbbbbbbbbbbbbbbaaabbbbbbbbb + abaaaaaaaaaabbbbbbbbaaabbbbbaaaababbbaabaaabbbbaaaaabbbbbbaaaaabbbbbbbbbbbbbbbaaabbbbbbbba + abbaaaaaaaaabbbbbbbbaaaabbbbbaaaaabbaabbaaabbbbbaaaaaaaabbaaaaabbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbaaaabbbbbbbbbaaaabbbbbbaaaaaabbbaaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbaaaaabbbabbbbbaaaaabbbbbbaaaabbbbaaaaabbbaabbaaabbbbbbbbabbbbbbbbbbbbbbbaaabbbbbbbba + bbbaaaaaaabbbbabbbbbaaaaabbbbbbbaabbbbaaaaaabbbaaabbaaaaaaaaaaaaabbbbbbbbbbbbaaaabbbbbbbba + bbaaaaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbaaaaaaabbbaabbbbaaaaaaaabbaaabbbbbbbbbbbbaabbbbbbbbba + aaaaaaabbbbbbbbbbbbaaaaaaaabbbbbbbbaaaaaaaabbbbaabbbbbbaaaaaabbaaabbbbbbbbbbbaaabbbbbbbbba + bbaaaabbbbbbbbbbbbbaaaabaaaabbbbbbaaaaaaaaabbbbaabbbbbbbaaaaaaabaabbbbbbbbbbbaaabbbbbbbbba + aaaabbbbbbbbbbabbbbaaaabaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbbaaaabbbbbbbbbbbbabbaaaaabbbbbbbbb + aaabbbbbbbbbbbabbbaaaaabbaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbaaabbbbbbbbbbbbbbbbaaabbbbbbbbbb + aabbbbbbbbbbbbabbbaaaaabbaaaaaaaaaaaabaaaaabbbbaaabbbbbbbbbbaaaaaaabbbbbbbbbbaaabbbbbbbbbb + aabbbbbbbbbbbbabbaabaaabbbbaaaaaaaabbbaaaaabbbbaaabbbbbbbbbbbaaaaaaaabbbbbbaaaaabbbbbbbbbb + abbbbbbbbbbbbbabbabbaaaabbbaaabbbbbbbbaaaaabbbbaaaabbbbbbbbbbaaaaabbabbbbbbaaaaabbbbbbbbba + abbbbbbbbbbbbbabbbbbaaabbbbbaaabbbbbbbaaaaabbbbaaaabbbbbbbbbbbaaaabbabbbaabbaaaaabbbbbbbba + bbbbbbbbbbbbbbabbbbbaaabbbbbbbbabbbbbbbbaaabbbbbaaabbbbbbbbbbbbaaabbabbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbbbabbbbaaaabbbbbbbabbbbbbbbaaabbbbbaaabbbbbabbbbbbbaaababbbbbbbbaaaabbbbbbbbb + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaabbbaaaabbbbbaaabbbbbaabbbbbbaaaaabbbbbbbbbaaabbbbbbbbb + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaaaabbbbabbaaaaabbbaabbba + bbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbaaabbba + abbbbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbabbbbaaaaaaaaaaaaaaabbbaabbba + abbbbbbbbbbbaaaaaabbbaaaabbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbaabbbbbaaaaaaabbbaaaabbbbbbbba + abbbbbbbbbbaaaaaaabbbaaaaabbbbabbbbbbaaaabbbbbbaaaaabbbbbbbbaabbbbbaaaaabbbbbbbaabbbbbbbba + abbbbbbbbbbaaaaaaaabbbaaaababbababbbaaaaabbbbbaaaaaabbbbbbbbaababbbaaabbbbbbbbbbabbbbbbbba + abbbbbbbbbbaaaaaabbbabaaaabbbbbbbbbbaaaabbbbabaabaaaabbbbbbbaababbbbaaabbbbbbbbabbbbbbbbba + abbabbbbbbbbbbbbbbbbbabaaababbbbbbbbbaaabbaaabbabaaaabbbbbbbbababbbbaaaabbbbbaaabbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaaaabbaaabbabaaaabbbbbbbbbbabbbbbaaaaaaaaaaaabbbbbbbba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabaaaaababbaaabbbbbbbabaababbbbaaaaabbbaaabbbaaabba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbaaaabbbaaaaaaaaaaaabbbbbbabaababbbbaaaaabbbaabbbbbbbbba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbabaaaabbbabbbaaaaaaaabbbbbbbbaababbbbbaaaabbaaabbbbbbbbba + abbbbbabbbbbbbbbbbbbbbbbaaabbbbbbbbaaabbbbabbbbaaaaaaabbbbbbabaababbbbbaaaaabaaabbbbbbbbbb + abbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbaabbbbabbaaaabbbbbaabaababbbabbaaaaaaaabbbbbbaaaa + abbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbaaabbbabbabbbbbbbbaabaababbbabbaaaaaaaabbbbbbaaaa`, + map `bbaaabbbbbbaaabbbbbabbbbbbbbbabbbbbbbbabbbbbbbbbbbbbbbbbbaabbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaaabbbbbbaaaaabbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbbabbbbbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbbbbbbbabbbbbbbbbbabbbbbbbaaaabbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaaaaaabaaaaaabbbbbbbbaabbbbbabbbbabbbbbbbaaaabbbbbbabbaaaabbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaaaaabbaaaabbbbbaabbbbbbbbbbbaaaabbbbbbabbaaaabbbbbbba + abaaaabbbbbbbbbbbbbbbbaaaaaabbbaabbaaaaaabbbaaabbbbbabbbbbbbbbbbbaaabbbbbbbbbbaaaabbbbbbba + abbaaaabbbbbbbbaabbbbaaaaaaaabbabbbbbbaaaabbbbbbbbbbaabbabbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbaaabbbbbbbbaabbbaaaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbaaabbbbbbbbaabbaaaaaaabbbbbbbbaaaaabbbbbbaaabbbbbbbbaabbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbaaaaaaabbbbbaaaaaaaabbbbbbbaaabbbbaabbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + babbbbbbbbbbbbbbbbaaaaabbabbaaaaaaaaaaabbbabbbbaaaaaaaabbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbba + aabbbbbbbbbbbbbbbbaabaabbbaaaaaaaaabaaaaababbbbaaaaaaaabbabbbbbbaaaabbbbbbbbbbaaaaabbbbbba + aabbbbbbbaaaaaabbaabbaabbbaaaaaaaaabbaaaababbbbaaaaaaabbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbbb + aabbbbbabaaaaaabbaabbaabbaaabbaaaaabbbaaaaabbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + aabbbbbbbbbaaaabbaabbbbaaaaabaaaababbbabbbbaabbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbaaaabbbbbba + bbbbbbbbbbbbbaabbbaabbbaaaaaaaaaaaaaaaabbbbabaabaaaaaabbbbbbbbbbaaabbbbbbbbbaaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbaabbaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaabbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbba + bbbbbbbbbbbbbbbbbbaaabbaaaabbbaaaaaaaaabbaaaaaaaaaaaaabbbbbbbbbbaaaaaaaaaaaaaabbaaabbbbbba + ababbbbbbbbbbbbbbaaaaaabbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbabbaaabbbbbaaaabbbbaaabbbbbbb + ababbbbaabbbbbbbbaaaaabbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + ababbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaabbbbbba + abbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbbbaaabaabbabbbbbbbbbbbaabbbbbbbbbbaaaaaaabbbbbba + bbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaaaaaaaaaabbbbbbbabbbbbbabbbbbbbbaaabbbbbba + abbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabaaabbbbaaaaaaaaaaaabbbbbbbbabbbbbaabbbbbbbbaaabbbbbbb + abbbbbbbbbbaaabbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabbbbaba + abbbbaabbbbaaabbbaaaabbbbbbbbbbbbbbbbbaaabbbbaaaaabbbbbbbbbbbbbbaaaaabababbbbaaaaaabbbbbbb + abbbbaabbbbaaabbbaaaabbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbaaabbbbbba + abbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbabaabbbaaaaabbbbbbaaabbbbbbabbbbbbaababbbbbaabbbbbbb + bbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbbbabbbabaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbababbbbbaaa + bbbbbbbbbbbbabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaaabbbbbba + abbbaaaaaaabbbbabbaaabbbaaaaaaabbbbbaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbaababbbbbba + aaabaaaaaaabbbbaabaaabbbbabaaaaabbbbaaaaaabbbbbaaaaabbababbbbbbbbbbbbbbbbbbbbbbbbbabbbbbba + abbbbaaaaaabbbbaabaaabbbbbbbbaaabbbaaaaaaaabbbaaaaaabbbbbbaaaaaabbbbbbbbbbabbabbbaabbbbbba + abbbbbaaaabbbbaaabbaabbbaaaaaaabbbaaaaaaaaabbbbaaaaabbbbaaabaaaabbbbbbbbbbbbaabbbaabbbbbba + bbbbbbbbbbbbbbbaabbaabbbbaaaaabbbbaaabaaaabbbbbaaaabbbbbbbbbbbabbbbbbbbbbbbbaabbbaabbbbbba + bbbbbbbbbbbbbbbabbbbabbbbbbbbbbbbbaabbbbbabbbbaaaabbbbbbbbbbbbbbbbaabbbbbbbbaaabbaabbbbbba + bbbbaabbbbbbabaaabbaabbbbbbbbbbbbbbabbbaababbbabaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbba + abaaaabbbbbbaaaaabbaabbbbbbbbbbbbbbabbbbbabbbabbaaabbbbaaaaaaaaabbbbbbbabbbbbbbbbaabbbbbba + abaaaabbbbbbaaaaabbbbabbbbbbbbbbbbbaabbbbabbbabaaaabbbbaaaaaaaaabbbbaaaabbbbbbbbbaabbbbbba + abbbaabbbbbbaaaaaabbbaabbbbbbbbbbbbaabbbbabbbabaaaabbbbaabbbbaabbbbbbbaabbbbbbbbbbbbbbbbba + bbbbbbbbbbbbaaaaaabbbaabbbbbbbbbbbbbabbbaabbbabaabbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbba + bbbbbbbbbbbbbbbbaabbbabbbbbbabbbbbbbabbbaabbbbbabbbbbbbbbbbbbabbbbbbbbaabbbbbbaabbbbbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbbbaabaabbbbbabbaabbabaaaaaaaaaabbbbbaabbbbbbbaabbbabbbbbbbbbbbbba + abbbabbbabaabbaaaabbbbbbbbaabbaaaabaaababbbbbaaaaaaaaaaabbbbaaaabbbbbbaabbbbbbbbbbbbbbbbba + abbbaabaaaaaaaaaaaabbbbbbaabbbbaaaaaaabaabbbbaaaaaaaaaabbbbbbaabbbbbbbaabbbbbbbbbabbbbbbba + abaaaaaaaaaaaaaaaaaaabbbbabbbbbbbaaaabbaabbbaaaabbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbabbbbbbba + aaaaabbbbbbaaaaaaaaaaabbbaabbbbbbbbbbbbaabbbaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbabbbbbba + abbbbbbbbbbbbbbbbbaaaabbbbbaaaabbbbbbbaabbbaaaaabbbbbbaaabbbaaaabbbbbbbbbbabbbbbbabbbbbbba + bbbbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaabaaaabbbaaaaaabaabbaaaaaaaaabbbbbbbbbbbabbbbbbaabbbbbba + bbabbbbbbbbbbbabbaaaaabbbbbbbabbbbbbaaabbbbaaaaaaaaabbaaabbbbaabbbbbbbbbbbbabbbabaabbbbbba + bbaaaaaabbbbbbbbbaaaabbaabbbbaaaabaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbba + baaaaaaaaabbabbbaaaabbbaabbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbba + baaabbaaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbaabbbbbbbabbbaaaaaaabbbbbbbabbbbbbbbaaaabbbbbba + aaaabbbbbbbbaaababbbbbabaabbbbbbaaabbbbbbabaaabbbbbaaaabaaaaaaaabbbbbbbbbbbbbbbaaaabbbbbba + bbbbbbbbbbbbbaaaabbbbbabaabbbbaaaaabbbbbbabaaaabbbbaaaabaaaaaaaabbbbbbbbbbaabbaabbbbbbbbba + bbbbbbbbbbbaaaaabbbbbaabbabbbbbaaaabbbbbbaabaaaabbbaabbbbbbbbaaabbbbbbbbaaaabbaabbbbbbbbaa + bbbaabbbaaaaaaabbbbbaaabbbabbbbbbbabbbbbaaabbaaaaabbbbbbbbbbbbbabbbbbbbabaaabbaabbbbbbbbbb + abaaaaaaaaaaaabbbbbbaaabbbaabbbbbbabbbbaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbb + abaaaaaaaaaaabbbbbbbaabbbbaaabbbbbbbbbaaaaaabaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbaaabbbbbbbbba + abbaaaaaaaaaabbbbbbbaaabbbbaabbbbbbbbaabaaabbbaaaaaabaaabbaaabbbbbbbbbbbbbbbaaaabbbbbbbbba + bbbbbbbbbaaabbbbbbbbaaabbbbbaaaaabbbaabaaaabbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbaaaaabbbbbbbbaaabbbbbbaaaabbbabbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbaaaaabbbbbbbbbaaaabbbbbbaaaaabbbaaaaaabbbaabbaaaaaaaaaaaaaabbbbbbbbbbbbaaaabbbbbbbba + bbbaaaaaaabbbbbbbbbaaaaaabbbbbaaaabbbaaaaaaabbbaaabbaaaaaaaaabaaaabbbbbbbbbbbaaabbbbbbbbba + bbaaaaaaabbbbbabbbbaaaaaabbbbbbaaabbbaaaaaabbbbaabbbbaaaaaaaabaaaabbbbbbbbbbbaabbbbbbbbbba + bbaaaaabbbbbbbabbbbaaaaaaabbbbbbbbbbaaaaaaabbbbaabbbbbbaaaaaabbaaabbbbbbbbbbbaababbbbbbbba + baaaaabbbbbbbbbbbbbaaaaaaaabbbbbbbaaaaaaaaabbbbaabbbbbbbaaaaabbbbbbbbbbbabbbaaabbbbbbbbbbb + baaaabbbbbbbbbbbbbbaaaaaaaaaaaabbaaaaaaaaaabbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbbbb + aaaabbbbbbbbbbabbbbaaabaaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbbbbaaaabbaabbbbbbbbbbaaabbbbbbbbba + aaabbbbbbbbbbbabbbaaaabaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbaaaaaaaabbbbbbbabaaabbbbbbbbbb + aabbbbbbbbbbbbabbbaaaaabbbbaaaaaaaaabbaaaaabbbbaaabbbbbbbbbbaaaaaababbbbbbaabaaabbbbbbbbba + abbbbbbbbbbbbbabbabaaaabbbbaaaaaabbbbbaaaaabbbbaaabbbbbbbbbbbaaaaababbbaabbbbaaaabbbbbbbba + abbbbbbbbbbbbbabbabbaaaabbbaaabbbbbbbbaaaaabbbbbaaabbbbbbbbbbbaaaababbbbbbbbbaaabbbbbbbbba + bbbbbbbbbbbbbbabbabbaaabbbbbabbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbaaababbbbbbbbbaaabbbbbbbbbb + bbbbbbbbbbbbbbabbbbbaaabbbbbbbbabbbbbbbbaaabbbbbaaabbbbbabbbbbbbaaaabbbbbbbbbaaabbbbbbbbbb + bbbbbbbbbbbbbbaabbbbaaaabbbbbbaabbbbabbbaaabbbbbaaabbbbbbbbbbbbbaaaaabbbaabbaaaabbbaabbbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaaabbbbbaaabbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbaaabbba + bbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbbbbbaaaabbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbaabbba + abbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbaabbaaaabbbbbbbaaabbbbbbbbaabbbbaaaaaaaabbaaaabbbbbbbbba + abbbbbbbbbbbaaaaabbbbaaaaabbbbbbbbbabaaaaabbbbbaaaaabbbbbbbbaabbbbaaaaabbbbbbbaabbbbbbbbba + abbbbbbbbbbbaaaaaabbbbaaaabbbbbbbbbbbaaaabbbbbaaaaaabbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbaaaaaabbbbaaaabbbbbbbbbbbaaaabbbbbaaaaaabbbbbbbbaaabbbbaaabbbbbbbbbabbbbbbbbba + abbabbbbbbbaaaaaaaabbbaaaaabbabbabbbbaaaabbbaaaabaaaabbbbbbbbaaabbbaaabbbbbbbaaabbbbbbbbba + abbbbbbbbbbaaaaaaabbbbaaaaaabbbbbbbbaaaabbbaaababaaaabbbbbbbbaaabbbbaaaabaaaaaaabbbbbbbbba + abbbbbbbbbbbbbaabbbbbabaaaabbbbbbbbbaaaabbaaaababbaaabbbbbbbaaabbbbbaaaaaaaabaaabbbbaaabba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbaaaabaabaaaabbbbbbaaabbbbbbaaaabbbbbaabbbbbbbbba + abbbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbaaaaabbaaaaaaabaaaabbbbbbaaabbbbbbbaaabbbbaaabbbbbbbbba + abbbbbabbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbaabbbaabaaaabbbbbbbaabbabbbbaaaaaaaaaabbbbbbbbbb + abbbbaabbbbbbbbbbbbbbbbbaaaabbbbbbbaaaabbbaabbbbabaaaabbbbbaaaabbabbbbaaaaabaaaabbbbbbaaaa + abbbbaabbbbbbbbbbbbbbbbbaaaabbbbbbbaaabbbbaabbbbbbaaaabbbbbaaaabbabbabbaabbbaaaabbbbbbaaaa`, + map `bbbbaabbaaabbbbbbbbbbbbbbbbbbbbbabbbabbbbbbbbbbbabbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaaabbbaaabbbbbbbbbbbbbbbbbbbbbabbbabbbbbbbbbbbabbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaabbbbabaabaaaaaaabbbbbbbbbbbbbbbbabbabbbbbbabbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbaaabbaabbbbbbbaabbbbbbbbbaaabbbbaabbbbbbbbbaabbbbbbbaaaabbbbbbabaaaaabbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbaaabbbbaabbbbbbbbbabbbbbbbbaaaabbbbbbabaaaaabbbbbbba + abbaaabbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbaaabbbbbabbbbbaabaabbbbbbbbaaabbbbbbbbbaaaaabbbbbbba + abbaaaabbbbbbbbbbbbbbbaaaaaabaaaaaaabbbabbbbabbbbbbbaabaabbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbaaaabbbbbbbaaabbbbaaaaaaabaaaaaaaaaaabbaaaabbbbbbaabababbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbaaabbbbbbbbaabbbbbaaaaaabbaabbbbbaaaabbbbbabbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbaaaaaaaabbabbbbbbbbabbbbbaaaabbbbbbbbabbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbabbbbbbbabaaaaaabbaabbbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbba + abbbbbbbbbbbbbbbbbaaaaaaabbbbbbaaaaaabbbbbbbaaaaaaaaaabbbabbbbbbaaaabbbbbbbbbaaaaaabbbbbba + abbbbbbaaaaaabbbbbaaaaaaabbbbaaaaaaaaabbbbbbbbaaaaaaabbbbabbbbbbaaaabbbbbbbbbbaaaaabbbbbbb + aabbbbaaaaaaaabbbaaaaabbbbbaaaaaaaaaaabbbababbbbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbaaaabbbbbba + abbbbbbabbbaabbbbabaaabbabaaaaaaaabaaaaaaabbbbabbbbbbbbbbbbbbbbbaaaaaaabbabbbbbaaaabbbbbba + bbbbbbbbbbbbaabbaabbaabbbaaaaaaaaabbaaaaabbbbbbaaaaaabbbbbbbbbbbaaabbbbbbbbbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbaabbbbbbaaabaaaaaabbbaabbabbbbbaaaaaaabbbbbbbbbbaaaabbbbaabbaaaaaaabbbbbba + bbbbbbbbbbbbbbbbabbbbbbaaaabaaaabaabaabbbbababbaaabaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbba + baabbbbbbbbbbbbbaabbbbaaaaaaaaaaaaaaaabbbbabaabbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbaaabbbbbbb + ababbbaabbabbbbbaaabbbaaaaaaaaaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + ababbbaabbabbbbbaaabbbaaaaabbaaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaabbbbbba + ababbbbbbbbbbbbbaaaaaaababbbbbbaaaabbbbbbaaaabbaaaaaaaaabbbbbbbbaabbbbbbbbbbaaaaaaabbbbbba + bbbbbbbabbbbbbbbaaaaabbbbbbbbbbbabbbbbbbbbaaaabaaaaaaaaaabbbbbbbabbbbbbabbbbbbbbaaabbbbbba + abbbbbabbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaababbaaaaabbbbbbbbbabbbbbaabbbbbbbbaaabbbbbbb + abbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabbbbaba + abbbbaabbbbaabbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaabbbbbbbbbbbbbbbbaaaaabababbbbaaaaaabbbbbbb + abbbaaabbbbaabbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaabbbbaaabbbbbba + abbbbabbbbbaabbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaaabbbbbbbaabbbbbbbaabbbbbaababbbbbaabbbbbbb + bbbbbbbbbbbaabbbaaaabbbbbbbbbbbbbbbbbaaaabbbaaaaabbbbbbbaabbbbbbbbbbbbbbaabbbbbababbbbbaaa + bbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabaabbbaaaaabbbbbbbbabbbbbbbbaabbbbbbbbbbbaaaabbbbbba + abbbbaabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaababbbbbba + abbbaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbabbbabaaaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbbbabbbbbba + abbbbaaaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaaaaaabaabbbbbbbbbbabbabbbaabbbbbba + abbbbaaabaabbbbbbaaabbbaaaaaaabbbbbaaaaabbbbbbaaaaaaaabaaaaaaaaabbbbbbbbbbbbbabbbaabbbbbba + bbbbbaabbabbbbabbaaabbbbaaaaaaabbbaaaaaaabbbbaaaaaabbbbbbbbbbbbbbbabbbbbbbbbbabbbaabbbbbba + bbbbbbbbbbbbbbbbbaaabbbbbbbbbaabbaaaabbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbaabbbbbba + bbbbbbbbbbbbbbbbbbaabbbbaaaaaabbbaaaaaaaaabbbbaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaabbbbbba + abaaaabbbbbaaababbaabbbbaaaaabbbbaaabaaaaabbbabaabbbbbbaaaaaaaaabbbbaaabbbbbbbbbbaabbbbbba + abaaaabbbbbaaaaabbaabbbbbbbbbbbbbaabbbbbbabbbabaaabbbbbaaaabaaaabbbbababbbbbbbbbbaabbbbbba + abaaabbbbbbaaaaabbbabbbbbbbbbbbbbbabbbaaaabbbbbaaabbbbaabbbbbaabbbbbbbabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbaabbbbbabbabaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbba + bbbbbbbbbbbbbbaabbbbabbbbbbbbbbbbbaabbbbabbbabaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaabbbbbbbba + abbbbbbbbbbaabbabbbbabbbbbbbbbbbbbaabbbbabbbabaaaaaaaabbbbbbbaabbbbbbbaabbbbbbbbbabbbbbbba + abbbabbbaaaaabbaabbbaabbbbbbbbbbbbbaabbbabbbabaaaaaaaabbbbbbaaabbbbbbbaabbbbbbbbbabbbbbbba + abbaaaaaaaaaaaaaabbbabbbbbbabbbbbbbbabbbabbbbbaaaaaaaabbbbbbbaabbbbbbbaabbbbbbbbbabbbbbbba + abaaaaaaaaaaaaaaaabbabbbbbaabaabbbbbabbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbba + abaaaaaaaaaaaabaaabbbbbbbbabbaaaabaaabababbbbaaabbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbaaabbbbbbbaabbbbaaaaaabaaabbbaaaabbbbbbaabbaaabbbbbbbbbbbbbabbbbbbabbbbbbba + bbbbbbbbbbbbbbbbaaabbbbaaabbbbbbbaaabbaaabbaaaaabbabbbaaaaaaaaaabbbbbbbbbbabbbbbbaabbbbbba + bbabbbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbbaabbbaaaaaaaaabbaaaabbbaaabbbbbbbbbbbabbbbbaabbbbbba + bbaaaaaaabbbbbbbbaaaabbbbbaaaabbaabbbaaabbbaaaaaababbbbbbbbbbbbabbbbbbbbbbabbbbbaaabbbbbba + aaaaaaaaabaababbaaaaabbbbbbaaaaaabbaaaabbbbaabbbbbbbbbbbbbbbbbbabbbbbbbbbbabbbbaaaabbbbbba + aaaabaaaaaaaaaabbaaaabbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbaaaaaaaabbbbbbabbbbbbbbaaaabbbbbba + babbbbbbbbbbbbbbbaaabbbabbbbaaabaaaabbbbbbaaaabbbbbaabbbaaaaaaaabbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbaaabbbabbbbbbbbaaabbbbbbbaaaaabbbaaaabbaaaaaaaabbbbbbbbbbaabbaabbbbbbbbba + bbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbaabbbbbbaaaaaaaaaaaaabbbbbbbbaaabbbbbbbaaaabbaabbbbbbbaaa + abbbbbaaabbaaaaaaabbbbaaabbbbbaaaaabbabbbabaaaaaababbbbbbbbbbbbaaabbbbbabaaabbaabbbbbbbbbb + abbaaaaaabbaaaaaabbbbbbaaabbbbaaaaabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbb + abbaaaaaabbaaaaabbbbbabbaabbbbbaaaabbbbbaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbaaaaaabbaaaaabbbbbabbbabbbbbbbbabbbbaaabbbaaaaabbabbbbbabbbbbbbbbbbbbbbbbaaaabbbbbbbbba + bbbabbbbbbbaaaabbbbbaabbbbaabbbbbbbbbbbaaaabbaaaaaabbbbbbbabbbbbbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbbbbbaaaaaabbbbbaabbbbaabbbbbbbbbbaaaaaabbaaaabbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbaaaaaabbbbbbaabbbbaaabbbbbbbbabbaaabbbbbaaaaaabbbbaaaaaabbbbbbbbbbbbbaaaabbbbbbbba + abbabbbaaaaaabbbbbbbaaabbbbbaaaaabbbaabaaaabbbbabaaaaaaaaaaaabaaabbbbbbbbbbbbaabbbbbbbbbba + abaaabaaaaaaabbabbbbaaabbbbbaaaaabbbbbbaaaabbbbaabbaaaaaaaaabbaaabbbbbbbbbbbbaabbbbbbbbbba + abaaabaaaaaabbbbbbbbaaabbbbbbaaaaaabbbaaaaabbbbaaabbbaaaaaaabbaaabbbbbbbbbbbaaabbbbbbbbbba + bababbbaaabbbbabbbbbaaaabbbbbbaaaabbbaaaaaabbbbaabbbbbaaaaaaababbbbbbbbbabbbaaabbbbbbbbbbb + babbaaaaabbbbbabbbbbaaaaabbbbbbaabbbaaaaaaabbbbaabbbbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbbb + aaaaaaaabbbbbbabbbbbaaaaaabbbbbbbbbbaaaaaaabbbbaabbbbbbbbaaabbbbbaabbbbbbbbbbaaabbbbbbbbba + aaaaaabbbbbbbbbbbbbbaaaaaaabbbbbbbaaaaaaaaabbbbaabbbbbbbbbaaaaabbaaabbbbbbbaaaaabbbbbbbbbb + aaaaabbbbbbbbbbbbbbbaaaaaaaabbbbbaaaaaaaaaabbbbaaabbbbbbbbbaaaaaaababbbbbbaabaaabbbbbbbbba + aaaabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbaaaaabbbbbbbabbaaaaabbbbbbbbba + aaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbaaaabbbbbbbabbbbaaabbbbbbbbba + aabbbbbbbbbbbbbaabbaaaabbaaaaaaaaaaabbaaaaabbbbbaabbbbbbbbbbbbaaabbabbbbbbbbbaaabbbbbbbbbb + abbbbbbbbbbbbbbaabbaaaaabbbaaaaaaabbbbaaaaabbbbbaaabbbbbbbbbbbbaaababbbbbbbbbaaabbbbbbbbbb + abbbbbbbbbbbbbbaabbaaaaabbbaaabbbbbbbbaaaaabbbbbbaabbbbbabbbbbbaaaaabbbbaabaaaaabbbaabbbba + bbbbbbbbbbbbbbbaababaaaabbbbbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaaabbba + bbbbbbbbbbbbbbbaababbaaabbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbaabbbba + bbbbbbbbbabbbbbaabbbbaaabbbbaaaaaaaabbbaaaabbbbbbaaabbbbbbbbbbbbbaaaaaaaabbbaaaabbbbbbbbba + bbbbbbbbbabbbbbbabbbbaaaabbbbbaaaaabbbbaaaabbbbbbaaabbbbbbbbbbbbbaaaaabbbbbbbbaabbbbbbbbba + bbbbbbbbbabbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbbbababbbaaabbbbbbbbbbabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbaaabbbbbbbaaabbbbbbbbababbbaabbbbbbbbbbbbbbbbbbbbba + abbbbbbbbabbbbbbbbbbbbaaaaabbbbbbbabbbaaaabbbbbbaaaaabbbbbbbabbbbbbaabbbbbbbbaaabbbbbbbbba + abbbbbbbbabbbbabbbbbbbaaaaabbbbbbbabbbaaaabbbbbaaaaaabbbbbbbabbabbbaaaaabaaaaaaabbbbbbbbba + abbbbbbabbbbbbaaaaaabbbaaaabbbbbbbbbbaaaaabbbbaaabaaabbbbbbbabaabbbbaaaaaaaaaaaabbbbabbbba + abbabbbabbbbbbaaaaaabbbaaaaabbbbbbbbbaaaabbbaaaaabaaaabbbbbbabaabbbbaaaabbbbbaaabbbbbbbbba + abbbbbbbbbbbbbaaaaaabbbaaaaaaaabbbbbaaaaabbaaabbabaaaabbbbbbaaabbabbaaaaabbbbaaabbbbbbbbba + abbbbbaabbbbbbaaaaaabbbbaaaabbbbbbbbaaaaabbaabbbabaaaabbbbbbaaabbbbbbaaaaaabbaaabbbbbbbbbb + abbbbbaabbbbbbaaabbbbbbbaaaabbbbbbbbaaaabbbaabbbabaaaaabbbbbaaabbabbbaaabbbaaaaabbbbbbaaab + abbbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbbbaaabbbaabbbabaabaabbbbbaaabbabbbbaabbbbaaaabbbbbbaaaa`, + map `bbbaabbbabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaabbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaabbbbaaabbbbbbbbabbbbbbbaabbbbbbbbbbbbbbbbbaabbbbbbbbbaabbbbbbaaabbbbbbbbbaaaabbbbbbbba + bbaabbbbaabbbbbbbbbabbbbbbbaaabbbbabbbbabbbbbbabbbbbbbbbaabbbbbbbaaabbbbbbbbbaaaabbbbbbbba + bbbbbbbbabbbbbbbaababbbbbbbbbbbbbbabbbaaabbbbbabbbbbbbbbbbbbbbbbbaaabbbbbbaabaaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaabbbbbabbbbbbbbabbbbbbbbaaaabbbbbbaabaaaaabbbbbbba + bbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbbabbbbbababbbbbbbbbaaaabbbbbbbbbaaaaabbbbbbba + bbaaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaaaaabbbbbbbaaabbbbbbbbaabbbbbbbbbbbabbbbbbbbbbbbbbbaaabbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaaabbbbabbbbaaabbbbbbbaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbabbbbbbbbbbbbaaaaaaaaaaabbbbaaaaaaabbaabbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaaaabaaaaaaabbbbbbaaaaaaaaabbaabbbbbbbbbbaaabbbbbbbbbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbaaaaaaabaaaaaaaaaaabbaaaaaaaaabaaaabbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbba + babbbbaaaaaaaabbbbbbaaaaaabbaabbbbbaaaabbbbbaaaaabbaaabbbabbbbbbaaabbbbbbbbbbbaaaabbbbbbbb + aabbbbaaaaaaaaabbbbaaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaabbbbbaaaabbbbbba + babbbbbaabbaaaabbaaaaaaaabbbbbbbbabbbbbbbbbbaabbbbbbbbbbbbbbbbbbaaaaaaabbabbbbbaaaabbbbbba + bbabbbbbbbbbaaabbaaaaaaabbbbbaabaaaaabbbbbbaaaaabbbbaabbbbbbbbbbaaabbbbbbbbbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbaaaaaaabbbbaaaaaaaaabbbababbaaaaaaaaabbbbbbbbbbaaabbbbbaabbaaaaaaabbbbbba + bbabbbbbbbbbbbbbbaaaaababbaaaaaaaaaaaaaaababbaaaaabbabbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbba + bbabbbbbbabbbbbbaaaaabbbbaaaaaaaabbaaaaabbbbbbaaabbbbbbbbbbbbbbbaaabbbbbaaaabbbbaaabbbbbbb + aaabbaabbaaabbbaabaaabbaaaaaaaaaaabaaababbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + aaabbaabbaabbbbaabaabbbaaabaaaaaaabbaabbbabbbbbabbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaabbbbbba + bbbbbabbbbbbbbbabbbbbbbaaabaaaabaabaabbbbabaabaaaaabaaaabbbbbbbbaabbbbbbbbbbaaaaaaabbbbbba + bbbbbaabbbbbbbbabbbbbaaaaaaaaaaaaaaaabbbbaaabbaaaaaaaaaabbbbbbbbabbbabbabbbbbbbbaaabbbbbba + bbbbbaabbbbbbbbaabbbbaaaaaaaaaaaaaaaabbbaaaabbaabaaaaaaabbbbbbbbbbbbbaaabbbbbbbbaaabbbbbbb + abbbbabbbbbabbbaaabbbaaaabbbaaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaabbbbaba + abbababbbbbabbbaaaabbabbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaaaabababbbbaabaaabbbbbba + abbaaabbbbbabbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbabbbbbbbbaaaaaaaaaaaaabbbbaaabbbbbba + abbbbabbbbbabbbaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbaabbbbbbbbbbabbbbaaaaabbbbaaabbbbbbb + bbbbbbbbbbbabbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaaaaabbbbbaaabbbbbbbbbbbbbbbabbbbbbaabbbbbbaaa + bbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaaaabbbbbbbabbbbbbbbbbabbbbbbbbbbbbaabbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaabbbbbbbba + abbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbaaabbbbaaaaaabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaabbbbbba + abbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbaaaabbbaaaaaaaaaabbbaaabaaabbbbbbbbbabbbbabbbaabbbbbba + abbbbaaaaabbbbbaaaabbbbbbbbbbbbbbbbbaababbbaabaaaaaaabbbaaaaaaabbbbbbbbbbbbbbabbbaabbbbbba + abbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbaabaaabbbbbbbbbbbbaabbbabbbbbbbbbbaabbaabbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbabbaaabbbbbbbbbbbbaabbbbbbbbbbbbbaabbbaabbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbababbbbbbaaabbbbbbaaaabbbaabbbbbbbbbbbbbbbbbbaabbbbbba + abbababbbbbbabbbaaabbbbaaaaaabbbbbaaaaaabbbbbaaabbbbbbaaaabbaaabbbbbaaabbbbbbbbbbaabbbbbba + aaaaaabbbbbaaabbaaabbbbaabaaaabbbbaaaaaaabbbbaaabbbbbbaaabbbaaabbbbbababbbbbbbbbbaabbbbbba + abbababbbbbaaaabbaabbbbbbbbbaabbbaaaaaaaabbbbbaaaabbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbaaabbaabbbbaaaaaaabbbaaaaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbba + bbbbbbbbbbbbbaabbaabbbbaaaaaabbbbaabbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbaababbbbbbba + bbbbbbbbbbbbbaabbbaabbbbbbaabbbbbabbbbbabbbbbaaaaaaabbbbbbbbaaabbbbbbbaabbabbbbbbabbbbbbba + abbbbbbbbbbbaaabbbabbbbbbbbbbbbbbaabbabbbbbbbaaaaaaaaabbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbba + abbaaabaaaaaaaaabbaabbbbbbbbbbbbbaabbbbbbbbbabaaaaaaabbbbbbbaaabbbbbbbaabbbbbbbbbbbbbbbbba + aaaaaaaaaaaaaaaabbaabbbbbbbbbbbbbaabbbbbabbaabaabbbbbbbbbbbbbaabbbbbbaaabbbbbbbbbbabbbbbba + abaaaabbbbbbaaaabbbbabbbbbbbbbbbbbabbbbaabbaabaabbbbbbbbbbbbbaabbbbbbbaabbbbbbbbbbaabbbbba + abbbbbbbbbbbaaaabbbbabbbbbbbbbbbbbbabbbaabbabaaabbbbbbaabbbbaaabbbbbbbbbbaabbbbbbbabbbbbba + bbbbbbbbbbbbbaaaabbbaabbbbaabbbbbbbaabbaabbabaaabbabbbaaabbaaaabbbbbbbbbbbabbbbbbaabbbbbba + bbbbbbbbbbbbbaaaabbbabbbbaabbaabbbbaabbbbbbbbaaabbaabbaabbbaaaabbbbbbbbbbbbabbbbbaabbbbbba + baaabbbbbbbbbaaaabbbbbbbbaabbaaaaaaaabaabbbbaaaabbabbbbbbbbbbbbbbbbbbbbbbbabbbbbaaabbbbbba + aaaaabbabbbbaaaaaabbbbbbaabbbbbaaaaabbaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbba + aaaaabbabbbbabbaaabbbbbbaabbbbbbbaabbbaabbbaaabbbbbbbbbbbaaaaaabbbbbbbabbbbbbbbaaaabbbbbba + abaabbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbaaabbbaaabbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaaaabbbbbbb + bbbbbbbbbbbbbbbbbbaaabbbabaaaabaaabaaaabbbaaaabbbbbaaabbaaaaaaabbbbbbbbbbbaabbaabbbbbbbbba + bbbbbbbbbbbbbbaaaaaaabbbbbaaaaabbbbaaabbbbaaaabbbbaabbbbbbbbaaabbbbbbbbbaaaabbaabbbbbbbaaa + bbbbbbbaabbbbbaaaaaaabbbbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbbabaaabbaabbbbbbbbbb + abbbaaaaaaaabbbaaaaabbbbbbbbaaaaaaaabbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabbbbbbbbbb + abbbbaaaaaaabbbaaaabbbaabbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbaaaaaaabbbaaabbbbaabbbbbbbbbabbbbbbbabaaabaabbbbbbbbaabaaabbbbbbbbbbbbbaaaabbbbbbbbba + bbbbbbbbbbbbbbbbaabbbbaaabbbbaaaaaabbbbbbabbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbbbbbbbbbbaaaabbbabaaabbbaaaaaabbbbbaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbbbbbbbbaaaaabbbbabbaabbbbbbbaabbbbaaabbbaaaabbbbbbbbbaaaaaaabbbbbbbbbbbbaaabbbbbbbbba + bbaabbbaabbbaaaaabbbbabbbabbbbbbbabbbbaaaaabbaaaaaaaaaabaaaaaaaaaabbbbbbbbbbbaabbbbbbbbbba + bbaabbbaabbaaaaabbbbaabbbaabbbbbbbbbbbaaaaabbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbaabbbbbbbbbba + bbbabbbbabaaaaaabbbbaabbbbaabbbbbbbbbabaaaabbbbbbaaaaaaaaaabbbaaaabbbbbbbbbbaaabbbbbbbbbba + bbbbbbbbbbaaaaabbbbbaaabbbaaabbbbbbbaabaaaabbbbabbaaaaaaaabbbbbbaabbbbbbabbbaaabbbbbbbbbbb + aabbbbbaaaaaabbbbbbbbaabbbbbaaaaabbbabbaaaabbbbaaabaaaaaabbbbbbbaaabbbbbbbbbaaabbbbbbbbbbb + aaaaaaaaaaaabbbbabbbbaabbbbbaaaaaaabbbaaaaabbbaaabbbbaaaaaaaabbbaaabbbbbbbbbaaaabbbbbbbbba + baaaaaaaaabbbbbaabbbbaaabbbbbaaaaabbbaaaaaabbbaabbbbbbbaaaaaabbbaaabbbbbbbbaaaabbbbbbbbbbb + bbaaabaaabbbbbbaabbbbaaabbbbbbaaabbbbaaaaaabbbaabbbbbbbbaaaaaabbaabbbbbbbbaabaaabbbbbbbbba + abaaaaaabbbbbbbaabbbbaaaabbbbbbaabbbaaaaaaabbbaabbbbbbbbbaaaaaabaabbbbbbabbaaaaabbbbbbbbba + aaaaaaabbbbbbbbaabbbbaaaaabbbbbbbbbbaaaaaaabbbaabbbbbbbbbbbaaaaaaabbbbbbabbbbaaabbbbbbbaba + aaaaaabbbbbbbbbaabbbbaaaaaabbbbbbbaaaaaaaaabbbbaabbbbbbbbbbbaaaaabbbbbbbbbbbbaaabbbbbbbbba + aaaabbbbbbbbbbbbabbbbaaaaaaaabbbbaaaaaaaaaabbbbaaabbbbbbbbbbbaaaaabbbbbbbbbbbaaabbbbbbbbba + aaabbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbbbaaaaabbbbbaabaaaaabbbaabbbbb + aabbbbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbaaaaabbbaaaaaaaaaabbbaabbbaa + aabbbbbbbbbbabbbbbbbbaaaabaaaaaaaaaabaaaaaabbbbbaabbbbbbbbbbbbbaaaabbbaaaaaaaaaabbbaabbbba + abbbbbbbbbababbbbbabbaaaabaaaaaaaabbbbaaaaabbbbbaaabbbababbbbbbbaaaaaaaaabbbaaaabbbbbbbbba + abbbbbbbbbbbaabbbbabaaaaabbbaabbbbbbbbaaaaabbbbbaaabbbabbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbba + bbbbbbbbbbbbaabbbbabaaaaabbbbbbbbbbbabbbaaabbbbbaaabbbabbbbbbbbbbaaabbbbbbbbbbabbbbbbbbbba + bbbbbbbbbbbbabbbbbaabbaaaabbbbbabbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbaabbaaaaabaaabaaaabbbaaaabbbbbbaaabbbbbbbbabbbbbaabbbbbbbbbaaabbbbbbbbba + bbbbbbabbbbbbbbbbbaabbaaaabbbbaabbbbbbbaaaabbbbbbaaabbbbbbbbabbbbbaaaabbbaaaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbababbbaaaaabbaaabaaabbbbabbbba + abaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbabaaaabbbbbaaaaabbbbbbbbaaabbbbaaaaabbbbbaaabbbbbbbbba + abbabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabaaaaabbbbaaabaabbbbbbbbaaaabbbaaaaabbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaabbbaababaaabbbbbbbbaaabbbbaaaabbabbaaabbbbbbbbbb + abbbbbbbbbbbabbbbabbbbbbbaaabbbbbbbbbaaaabbbaabbabaaabbbbbbbbaabbbbbaaaabbbaaaaabbbbbbaaab + abbbbbbbbbbbabbbbbaaaabbbaaaabbbbbbbbaaaabbaaabbabaaabbbbbbbaaabbbbbaaabbbbbaaaabbbbbbaaaa`, + map `bbbbabbbbbbbbbbbbbbabbbbbbbbbaabbbabbbbbbbbbbaabbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaabbbbbbbbbbbbbbbabbbbbbbaaaabbbabbbbbbbbbbaabbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaabbbbabbbaabbbbbabbbbbbbaabbbbbabbbbabbbbbaabbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbbbbbbbabbbbbbbaababbbbbbbaabbbbbbbbaaaabbbbbabbbbbbbbbaabbbbbbbaaaabbbbbbabaaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbbbbbbbbbbbbbbaaaaabbbbbbabaaaaabbbbbbba + bbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbbabbbbbbaaaabbbbbbbabaaaaabbbbbbba + bbaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaaaabbaabbbaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaabbbbaabbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbabbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbabaaaaaabbaabbbabbbbbbbabbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbaabbbabbbbbbaaabbbbbbbbbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbaaaaaaaaaaaaaaabaaabbbbbbbbbbaaabbbbbbbbbbaaaaaabbbbbba + babbbbaaaaaaabbbbbbbbbbbaaaaaaabbbbbbbaabbbbbbbaaabaaabbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbb + aabbbbaaabbaaaabbbbbbbaaaaaaaaaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbba + babbbbbaabbaaaaabbbbbaaaaabbaaaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbaaaabbbbbba + bbabbbbbbbbbaaaabbbaaaaaaabaaaaaaaaaaabbbbbaabbaaabaabbbbbbbbbbbaaabbbbbbabbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbaaaaaabbaabbbbbbbbbbbbbbbaabaaaaaaabbbbbbbbbbaaabbbbbbbbbaaaaaaabbbbbba + bbabbbbbbbbbbbbbbbbaaaaabbbaabbbbbbbbbbbbbbaaaabaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbba + bbabbbbbbabbbbabbaaaaaaaabbbbbbbaaaabbbbbbabaabbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbaaabbbbbbb + aaabbaabbbabbbbbaaaaaaaabbbbbbbaaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + ababbaabbbabbbbbbbaaaaabbbbbaaaaaaaaabbbbbbbbaaabbbbbbbabbbbbbbbaaaaaabbbaaaaaaaaaabbbbbba + bbbbbabbbbbbbbbbaaaaababbbbaaaaaaaaaaaaababbbaaaaaaaaaaabbbbbbbaaabbbbbbbbbbaaaaaaabbbbbba + bbbbbaabbbbbbbbaabaabbabbaaaaaaaabaaaababbbbbaaaaaaaaaaabbbbbbbaabbbabbabbbbbbbbaaabbbbbba + bbbbbaaabbbbbbbabbaabbbaaaaaaaaaabbaaabbbabbbbbbbaaaaaaabbbbbbbbbbbbbaabbbbbbbbbaaabbbbbba + abbaaabbbbbabbbabbaabbbaaabaaaaaabbbaabbbababbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbabb + abbaabbbbbbabbbabbbbbaaaaabaaaaaabaaabbbaaaabbbbbbbbbbbbbbbbbbbbaaaaabaabbbbbbaaaaabbbbbbb + abbaabbbbbbabbbaabbbaaaaaaaaaaaaaaaaabbbaaaabbaaabbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaabbbbbba + abbaabbbbbbabbbaaabbaaaaaaaaaaaaaaaaabbaaaaabbaaaabbbbaaaabbbbbbababbbbaaababbbbbaabbbbbbb + bbbbbbbbbbbabbbaaabbbabaabbbbaaaaaabbbbbaaaabbaababbbbaabbbbbbbbbbbbbbbbaabbbbbbbabbbbbaaa + bbbbbbbbbbbbbbbaaaaaaabbbbbbbbaabbbbbbbbbaaaababbbbbbbabbbbbbbbbbbbbbbbbabbbbbbabbbbbbbbba + abbbbbbbabbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbba + abbbbaaaabbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaabaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbaabbbbbba + abbbaaaaaabbbbbaaaaabbbbbbbbbbbbbbbaaabbbbaaabaaaaaabbbbaabbaaabbbbbbbbbbbbbbabbbaabbbbbba + abbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbaaabbbbaaabaaaaaabbbaaaaaaaabbbbbbbbbaabbbabbbaabbbbbba + abbbbbbbbabbbbbaaaabbbbbabbbbbbbbbbaaaabbbbaabaaabbbbbbbbbbbbaabbbbbbbbbbbbbaabbbaabbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaabbbaabaabbbbbbbbbbbbbaabbbbabbbbbbbbaabbbaabbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbbabbbbbaabbbbbbbbbbbbbbabbbaabbbbbba + abbaabbbbbbbabbaaaabbbbbbbbbbbbbbbbbabbabbbaaaaabbbbbbaaaabbaaabbbbbbbbbbbbbbbbbbaabbbbbba + aaaaabbbbbbbabbaaaabbbbbbbbbbbbbbbbbbbbabbbabaaabbbbbbbaaaabaaabbbbbaaabbbbbbbbbbaabbbbbba + abbaaabbbbbbabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbbbaabbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbaaaaabbbbbbaaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbabbbbbaaaabbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbaaaaaaaabbbbaaaaaaabbbbaaabbbbbbbbbbbbbabbbbbbbbabbbbbaaaabbbbbbbbba + bbbbbbbbbbbbbbabaaabbbabbbaaaabbbaaaaaaaabbbbaaaaabbaabbbbbbaaabbbbbbbaabbabbbbbbabbbbbbba + abbbbbbaaaabaaabbaabbbbbbbbaaabbbaaaaaaaabbbbbaaaaaaaabbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbba + abbaabbaaaaaaaabbaabbbbaaaaaabbbbaabaaaaabbbabaaaabbabbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbba + aaaaaaaaaaaaaaabbaabbbbaabaabbbbaabbbbbbbbbbbaaaabbbbbbbbbbbbbabbbbbbaaabbbbbbbbbbbbbbbbba + aaaaabbaabbaaaabbbabbbbbbbbbbbbbbabbbbaabbbabbaaabbbbbbbbbbbbbabbbbbbbaabbbbbbbbbbbabbbbba + abbbbbbbbbbbbaabbbabbbbbbbbbbbbbbaabbbbbbbbabbaaaabbbbaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbaaabbbaabbbbbbbbbbbbbaabbbbabbbabaaaaaabbbaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbaaabbbaabbbbbbbbbbbbaabbbbabbbabaaaaaaabbaabbbaaaabbbbbbbbbbbbbbbbbbaabbbbbba + baaaabbbbbbbbaaabbbaabbbbbbbbbbbbaabbbbabbbabaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + aaaaaabaabaaaaaabbbaabbbbbbbbbbbbbbabbbabbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbb + aaaaaaaaabaaabaaabbbabbbbbababbbbbbabbbabbbbaaabbbabbbbbaaaaaaabbbbbbbabbbbbbbbbaaabbbbbba + aaaaabbbbbbbbbaaabbbabbbbaabaaabbbbabbaabbbbaaabbbaaaaabaaaaaaabbbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbaabbbbbbbbabbbaaaaaaabaaabbbaaaabbbaaaaabaaaaaaabbbbbbbbbbbaabaaabbbbbbbbba + bbbbbbbbbbbbbbaaaabbbbbbaabbbbbaaaaabaaabbaaaaabbbbbbbbbbbbbbaabbbbbbbbbaaaabaaabbbbbbbaaa + bbbbbbbbbaabbaaaaaaabbbaabbbbbbbaaabbaaabbaaaabbbbbbbbbbbbbbbaabbbbbbbbaaaaabaaabbbbbbbbbb + abbaaaaaaaaabbaaaaaabbbaabbbbbbbbbbbbaabbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaabbbbbbbbbb + abaaabaaaaaabaaaaaaaabbbbaaaaabaaabaaabbbbaaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbaaabbbbbbbbba + abaaaaaaaaaabbbbbbaaabbbbbaababbbbbaaabbbbaaaabbbbbbbbabbaaaababbbbbbbbbbbbbaaaabbbbbbbbba + bbbabbbbbbbbbbbbbbaabbbbbbbbaabbbbabbbbbbaaaaabbabbbbbbbbaaabbbbbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbbbbbbbbbbbbbaabbbabbbbbaaaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + abbabbbbbbbbbaaaaabbbbaabbbbbbbbbabbbbbbabbaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbba + abbaabaabbbbaaaaaabbbbaabbbbbbbaaabbbbbbaabaaaaaaaaaaabaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbbba + abaabbaabbbbaaaaabbbbbbaabbbbaaaaabbbbbbaabbaaaaaaaaabbbabbabaaaabbbbbbbbbbbbaabbbbbbbbbba + abbabbaabbbbbaaaabababbaabbbbbaaaabbbbbaaabbbaaaaaabbbbbbbbabbbaabbbbbbbbbbbaaabbbbbbbbbba + abbbbbbbbbbbaaaaabababbbabbbbbbbbabbbbaaaaabbbaaaaaabababbbabbbbbbbbbbbaabbbaaabbbbbbbbbba + abbbbbbbabaaaaaabbbbaabbbabbbbbbbbbbbbaaaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbba + abaaaaaaaaaaaaabbbbbaabbbaabbbbbbbbbbabaaaabbbabbbbaaaabbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbba + abaaabbbaaaaaabbbbbbaabbbbaabbbbbbbbaabaaaabbbaaabbaaaaaaabbbbbbaaabbbbbbbbaaaabbbbbbbbbbb + bbbbbbbbaaaaabbbbbbbaabbbbbaabbabbbbabbaaaabbaaaaabbbaaaaaaabbbbaaabbbbbbbaabaaabbbbbbbbbb + bbbbbbbaaaabbbbbabbbbaabbbbbaabaabbbbbaaaaabbbaaabbbbbaaaaaaabbbabbbbbbbabbaaaaabbbbbbbbba + bbbaaaaaaabbbbbbabbbbaabbbbbbaaaaabbbaaaaaabbbaaabbbbbbbaaaaabbbbbbbbbbbabbbbaaabbbbbbbbba + bbbaaaaaabbbbbbaabbbbaaabbbbbaaaabbbbaaaaaabbbaabbbbbbbbbaaaaaabbbbbbbbbbbbbbaaabbbbbbbbbb + bbbaaaaabbbbbbbaabbbbaaaabbbbbaaabbaaaaaaaabbbaabbbbbbbbbbaaaaaabbbbbbbbbbbbbaaabbbbbbbbba + abaaaabbbbbbbbbaabbbbbaaaabbbbbbabbaaaaaaaabbbaabbbbbbbbbbbaaaaaaabbbbbbaabaaaaabbbaabbbaa + abaaabbbbbbbbbbaabbbbaaaaaabbbbbbaaaaaaaaabbbbbaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbaaabbba + aaaabbbbbbbbaabaabbbbaaaaaaabbbbbaaaaaaaaabbbbbaaabbbbbbbbbbbaaaaaaabaaaaaaaaaaabbbaabbbba + aaabbbbbbbbbabbbabbbbbaaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbbbaaaaaaaaaaabbbaaaabbbbbbbbba + aabbbbbbbbbbabbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbabbbbbaaaaabbbbbbbbbbaabbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaaaaaaaaaaaabaaaaaaabbbbbaabbbbabbbabbbbaaaaabbbbbbbbbbabbbbbbbbbba + abbbbbbbbbbbabbbbbbabaaaabaaaaaaaabbaaaaaabbbbbbaaabbbabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbabaaaabbbaabbbbbbaaaaaabbbbbbaaabbbabbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbba + bbbbbbbbbbbbabbbbbbabaaaaabbbbbbbbbbaaaaaabbbbbbbaabbbbbbbbbbbbbbaaabbbbbaaaaaaabbbbbbbbba + bbbbbbbbbbbbabbbbbbaaaaaaabbbbbbbbbbbbbaaaabbbbbbaabbbbbbbbbbbbbbaaaaabbbaaaaaaabbbbabbbba + bbbabbbbbabbbbbbbbbaaabaaaabaaaaababbbbaaabbbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbaaabbbbbbbbba + bbbabbbbbbbbbbbbbbbbabbaaaabbaabbbabbbbaaabbbbbbbaaabbbbbbbabbabbbaaaaabbbbbbaaabbbbbbbbba + abbbbbbababbbbbbbbbbabbaaaabbbbbbbbbbaaaaabbbbbaaaaabbbbbbbabaabbbaaaaaabbabbaaabbbbbbbbbb + abbabbbbbabbbbbbbbbbbbbbaaaabbbbbbbbaaaaaabbbbbaaaaabbbbbbbabaabbbbaaaabbbbaaaaabbbbbbaaab + abbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbabbaaaabbbaaaaaaabbbbbbbabaabbbbbaaabbbbbaaaabbbbbbaaaa`, + map `bbbabbbbbbbbbbbbbbbabbbabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaabbbbbbbbbbaaaaaabbbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbbabbbbabbbbaaabababbbaabbbabbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbbabbbbabbbbbbbbbbbbbaaabbbabbbbbaabbaaabbbbbabbbbbbbbbbbbbbbbbbaaaabbbbbbabaaaaabbbbbbba + abbabbbbabbbbbbbbbbbbbbbbbbbabbbbbaabbaaaabbbaabbbbbabbbbbbbbbbbaaaaabbbbbbabaaaaabbbbbbba + abbaaabbabbbbbbbbbabbbbbbbbbbbbbbbaabbaaaabbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbabaaaaabbbbbbba + abbaaabbbaabbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaaaabbbabbbaaaabbaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaaabbbbabbbabbbbbaaabbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbabbbbbbbbbbabbbaaaaaaabbaabbaaaaaaabbaaabbabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabaaaaaaabbbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbba + abbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaaaaaaabaaabbaaaabbbbbbbbaaabbbbbbbbbbaaaaaabbbbbba + aabbbbbbbaaaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbbb + aabbbbaaaaaaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbba + aabbbbbabaaaaaabbbaabbbbbaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbabbbbbaaaabbbbbba + bbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaabbbbaaaaaaaaabbaaaaabbbbbbbbbbaaabbbbbbabbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbaaaabbbbbbbbaaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaaaaabbbbaaaaaaaaaaaabbbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbba + abaabbbabbbbbbaabbbaaaaaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbaaabbbbbbb + aaaabbbabbabbbbbbbbaaaaaabbbaabbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + ababbbbababbbbabbabaaaaaabbbabbbbbbbbbbbbaabaaabbbbbaababbbbbbbbaaaaaaabbaaaaaaaaaabbbbbba + abbbbbbbbbbbbbabbaaaaaaaabbbbbbbbaaabbbbbbaaaaaaabbaaaaabbbbbbbbaaabbbbbbbbbaaaaaaabbbbbba + abbbbbbbbbbbbbbbbaaaaaaaabbbbbbbaaaaabbbbbabbaaaaaaaaaaabbbbbbbaabbbabbabbbbbbbbaabbbbbbba + abbbbbbbbbbbbbbbaaaaaaabbbbbaaaaaaaaabbbababbaaaaaaaaaaabbbbbbbaabbbbaabbbbbbbbbaaabbbbbba + abbbbbbbbbbbbbbaabaabbaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbaaabbbbbabb + abbaabbbbbbabbbaabaabbbabbaaaaaaabaaaaaabbbbbbaabbbbbbbbbbbbbbbbaaaaabaabbbbbbaaaabbbbbbbb + abbaaabbbbbabbbaabaabbbaaaaaaaaabbbaaababbbbabaaabbbbbbbbbbbbbbaaaaaaaaaabbbbbbbaaabbbbbba + bbbbbbbbbbbabbbabbbbbbbaaabaaaaaabbbabbbaabbbbaaabbbbbbbbbbbbbbaaaabbbbaaabbbbbbbabbbbbbbb + bbbbbbbbbbbbbbbaabbbbaaaaabaaaaaabbaabbbaabaaaaaabbbbbbbbabbbbbabbbbbbbbbbbbbbbbbabbbbbaaa + bbbbbbbbbbbbbbbaabbbbaaaaaaaaaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbbaabbbbbbbba + abbbbaaaaaabbbbaaabbbaaaaaaaaaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbabbbbbbaabbbbbbbba + abbaaaaaaaabbbbaaaabbabaabbbaaaaaaaabbbbbaaaabbbaabbaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaaaababbbbaaaaaaabbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbabbbabbbbbbba + abbabaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbaaaaaaaabbbbbbbbaabbbabbbaabbbbbba + abbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaabbabbbbbbbbbbbbbbabbbbbbbbbbbbaabbbabbbbbbba + bbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbaabbbabbbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbaababbbbbbbaabbbbbbabbbbbbbbbbbbbbabbaaabbbbbba + abbaabbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbaabaabbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbaabbbbbba + abbaabbbbbbbbbbaaaabbbbbabbbbbbbbbbaaabbbbbaaaaabbbbbbaabbbaaaaabbbbaaabbbbbbbbbbaabbbbbba + abbabbbbbbbaabbaaaabbbbbbbbbbbbbbbbaaababbbaaaaabbbbbbaabbbaaaabbbbbbaabbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbabbbabaaabbbbbbbbbbbbbbbbbbbbbbabbbbbaaaaabbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbabaaabbbbbbbbbbbbbbbbbbbbbbabbbbbaaaababbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbabaaaaaaaaabbbbbbaaabbbbbbbaabbabbbbbbbbbbbbbba + abbbabbbaaabbbbbaaabbbbbabbabbbbbbbbaaabbbbabaaaaaaaaabbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbba + aaaaaaabaaaabbbbaaabbbaaaaaaaabbbbaaaaaabbbabaaaaaaaaabbbbbbaaabbbbbbaabbbbbbbbbaabbbbbbba + aaaaaaabaaaaabbbaaabbbaabbaaaabbbaaaaaaaabbabbaabbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbabbbbbbba + aabbaabbaaaaaaabbaabbbbbbbbaaabbbaaaaaaaabbabbaabbbbbbbbbbbbbbbabbbbbbaabbbbbbbbbabbbbbbba + abbbbbbbbbbbbbabbaabbbbaaaaaabbbbaaaaaaaabbbaaaabbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbabbbabbbbaabaabbbbbabbbbbbabbbbaaabbaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbaabbbaabbbabaaabbaabbaabbbaaabbbbbbbbbbbbbbbbbbbaabbbbbba + abbaabbbbbbaaaabbbabbbbbbbbbbbbbbaabbbbbbbbabaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + aaaaabaaabbaaaabbbaabbbbbbbbbbbbbaabbbbabbbabaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbaaabbbbbbb + abbabbaaabbaaaabbbbaabbbbbbbbbbbbbabbbbabbbababbbbbbabbbaaaaaaaabbbbbbabbbbbbbbaaaabbbbbba + abbbbbbbbbbbbaaabbbaabbbbbbbbbbbbbaabbbabbbbbaabbbbaaabbaaaaaaaabbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbbbaabbabbbbaaaaaaaaaaabaaaaaaaabbbbbbbbbbaabaaabbbbbbbbba + bbbbbbbbbbbbbaaaabbbabbbbbaabbbbbbbabbbabbbbaaaabaaaaabbbbbbbaaabbbbbbbbaaaabaaabbbbbbbaaa + bbbbbabbbaaabaaaabbbbbbbbaabbabbbbbabaaabbbbaabbbbbbbbbbbbbbbbabbbbbbbbaaaaabaaabbbbbbbbbb + bbbaaaaaaaaaaaaaaabbbbbbbabbbaaabaaabaaabbbaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbb + bbbaaaaaaaaabbaaaabbbbbbaabbbbbaaaaabaaabbaaabbbbbbbbbbbbabbaabbbbbbbbbbbbbbbaaabbbbbbbbba + bbbaaaaaaaaabbaaaaaabbbaabbbbbbbaaabbaaabbaaaaaaaabbbaaabaabaabbbbbbbbbbbbbbaaaabbbbbbbbba + bbbabbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbaabbbaaabbaaaaaaababbbabbbbbbbbbbbbbbbbaaaabbbbbbbbba + bbbbbbbbbbbbbbbbbbaabbbabaaaaabaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbbbbaaabbbaaaabaabbabbbbaabbbbbbaaaabbbaaaabbbbbbbbbaaaaaaaaaaabbbbbbbbbbbaaaabbbbbbbbba + abaaabaaabbbaaaaaabbbaabbbbbaabbbbaabbbbbbaaaaaaabaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbba + abaabbaabbbbaaaaaabbbaaabbbbaabaaaabbbbbbbaaaaaaaaaaabbaabbaaaaaabbbbbbbbbbbbaabbbbbbbbbba + abaabbbbbbbbbabaabbbbbaabbbbbbbbaabbbbbbabbaaaaaaabbbbbbbbbaabbaabbbbbbbbbbbaaabbbbbbbbbba + abbbbbbbbbbbbbbaababbbaabbbbbbbaaabbbbbbaabbaaaaaabbbbbbbbbbbbbbbbbbbbbaabbbaaaabbbbbbbbba + bbbbbbbaabbaaaaaabababbabbbbbaaaaabbbbbaaabbbaaaaabbbbbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbba + abaaaaaaaaaaaaaabbababbaabbbbbaaaabbbbbaaabbbbbaabbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbba + bbaaabbbbaaaaaaababbabbbabbbbbbbaabbbbaaaaabbbbbbaaaaaaaabaabbbbaaabbbbbbbbaaaabbbbbbbbbbb + bbbbbbbbaaaaaaabbabbabbbbabbbbbbbbbbbbaaaabbbaabbbaaaaaaaaaabbbaaabbbbbbbbaabaaabbbbbbbbbb + abbabbbbaaaaabbbabbbaabbbaabbbbbbbbbbabaaabbbaababbbaaaaaaaabbbabbbbbbbbabbaaaaabbbbbbbbba + bbbaabbaaaabbbbbabbbaabbbbaabbbbbbbbabaaaabbbaaaaabbbaaaaabbbbbbbbbbbbbbabbbbaaabbbbbbbbba + bbbaaaaaaabbbbbaabbbaabbbbbaabbabbbabbaaaabbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbb + abbbaaaaabbbbbbaabbbbaabbbbaaabaabbbbaaaaabbbbaaabbbbbbbaaaaaaabbabbbbbbbbbbbaaabbbbbbbbba + abbbaaaabbbbbbbaabbbbaaabbbbaaaaabbbaaaaaabbbbaabbbbbbbbbaaaaaaaaabbbbbbaabbaaaabbbaabbbaa + abbaaaabbbbbbbbaabbbbaaabbbbbaaabbbaaaaaaabbbbaabbbbbbbbbbbaaaaaaaabaaaaaaaaaaaabbbaaabbba + aaaaaabbbbbbbbbaabbbbaaaabbbbbbabbbaaaaaaabbbbbabbbbbbbbbbbbaaaaaabaaaaaaaaaaaaabbbaabbbba + aaaabbbbbbbbabbaabbbbaaaaaabbbbbaaaaaaaaaabbbbbaabbbbbbbbbbbbaaabaaaaaaaabbbbaaabbbbbbbbba + aaabbbbbbbbbabbbabbbbaaaaaaabbbbaaaaaaaaaabbbbbaabbbbbbbbbbbbbaaaaaabbbbbbbbbbaabbbbbbbbba + aabbbbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbaaabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbaaabbbbabbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaaaaaaaaaaabaaaaaaabbbbbbaabbbbabbabbbbbaaabbbbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbabbbbbabbaaabbaaaaaaabbaaaaaaabbbbbbaabbbbabbbbbbbbbaaaabbbbbaaaaaaabbbbbbbbba + bbbbbbbbbbbbababbbabaaaaabbbbbbbbbbbaaaaaabbbbbbaabbbbabbbbbbbbbaaaaaabbbaaaaaaabbbbabbbba + bbbbbbbbbbbaabbbbbabaaaaabbbbbbbbbbbbaaaaabbbbbbbaabbbabbbbbbbbbbaaaabbbbbbbbbaabbbbbbbbba + bbbabbbbbbbbbbbbbbbabaaaaabbbbbbbbbbbaaaaabbbbbbbaabbbabbbbabbbbbaaaaaabbbbbbaaabbbbbbbbba + abbbbbbabbbbbbbbbbbaabaaaabbbaaaabbbbaaaaabbbbbbbaabbbabbbbababbbbaaaaabbbabaaaabbbbbbbbbb + abbabbbbbbbbbbbbbbbaabbaaabbbbbbbbbbbaaaabbbbbbaaaabbbabbbbababbbbaaaabbbbbaaaaabbbbbbaaab + abbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbaaaaabbbbbbbaaabbbbbaaabbbbbbaaaabbbbbbaaaa`, + map `bbbabbbbbbbbbbbbbbbabbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbaabbbbbbbbbbaaaaaabbbabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbbabbbbabbbbaaabababbbaabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + bbbabbbbabbbbbbbbbbbbbaaabbbbbbbbbaabbaaabbbbbabbbbbbbbbbbbbbbbbbaaaabbbbbbabaaaaabbbbbbba + abbabbbbabbbbbbbbbbbbbbbbbbabbbbbbaabbaaaabbbaabbbbbabbbbbbbbbbbaaaaabbbbbbabaaaaabbbbbbba + abbaaabbabbbbbbbbbabbbbbbbbbbbbbbbaabbaaaabbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbabaaaaabbbbbbba + abbaaabbbaabbaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaaaabbbabbbaaaabbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbaaabbbbabbbabbbbbaaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbabbbbbbbbbbabbbaaabbabbbaabbaaaaaaabbaaabbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabaaaaaaabbbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbba + abbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaaaaaaaabaaabbaaaabbbbbbbbaaaabbbbbbbbbaaaaaabbbbbba + aabbbbbbaaaaaaaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaaabbbbbbbbbbbaaabbbbbbbb + aabbbbaaaaaaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbba + aabbbbaaaaaaaaabbbaabbbbbaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbabbbbbaaaabbbbbba + bbbbbbbbbbbaaaabbbbbbbbbaaaaaaaababbbbaaaaaaaaabbaaaaabbbbbbbbbbaaabbbbbbabbbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbbaaaaaaaaaaaaaaabbbbbbbbbbaaaabbbbbbbbaaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaaaaabbbbaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaabaaaabbbbbba + abaabbbabbbbbbaabbbaaaaaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbaaabbbbbbb + aaaabbbabbabbbbbbbbaaaaaabbbaabbbbbbaaabbbbbabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + ababbbbababbbbbbbabaaaaaabbbabbbbbbbbbbbbaabaaabbbbbaababbbbbbbbaaaabbbbaaaaaaaaaaabbbbbba + abbbbbbbbbbbbbabbaaaaaaaabbbbbbbbababbbbbbaaaaaaabbaaaaabbbbbbbbaaabbbbbbbbbaaaaaaabbbbbba + abbbbbbbbbbbbbbbbaaaaaaaabbbbbbbaaaaabbbbbabbaaaaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbaabbbbbbba + abbbbbbbbbbbbbbbbaaaaaabbbbbbaaaaaaaabbbbbabbaaaaaaaaaaabbbbbbbaabbbbbbbbbbbbbbbaaabbbbbba + abbbbbbbbbbbbbbaaaaaabaabbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaabbbbbabb + abbaabbbbbbabbbaabaabbbabbaaaaaaabaaaaaabbbbbbabbbbbbbbbbbbbbbbaaaaaaaaaabbbbbaaaabbbbbbbb + abbaaabbbbbabbbaabaabbbaaaaaaaaaabbaaababbbbabaaabbbbbbbbbbbbbbaaaaaaaaaabbbbbbbaaabbbbbba + bbbbbbbbbbbabbbabbaababaaabaaaaaabbbabbbaabbbbaaabbbbbbbbbbbbbbaaaabbbbaaabbbbbbbabbbbbbbb + bbbbbbbbbbbbbbbaabbbaaaaaabaaaaaabbaabbbbabaaaaaabbbbbbbbabbbbbabbbbbbbbabbbbbbbbabbbbbaaa + bbbbbbbbbbbbbbbaabbbaaaaaaaaaaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaabbbbbbbba + abbbbaaaaaabbbbaaabbbaaaaaaaaaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaabbbbbbbba + abbaaaaaaaabbbbaaaabbabaabbbaaaaaaaabbbbbaaaabbbaabbaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abbaaaaaaaabbbbaaaaaaabbbbbbbbaaabbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbaabbbabbbabbbbbbba + abbabaaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbaaaaaaaabbbbbbbabbbbbabbbaabbbbbba + abbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaabbabbbbbbbbbbbbbbabbabbbbbbbbbbabbbabbbbbbba + bbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbaabbbabbbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbaababbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbba + abbaabbbbbbbbbbaaaabbbbbabbbbbbbbbbaaabbbbbaabaabbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbaabbbbbba + abbaabbbbbbbbbbaaaabbbbbabbbbbbbbbbaaabbbbbaaaaabbbbbbaabbbaaaaabbbbabaabbbbbbbbbaabbbbbba + abbabbbbbbbaabbaaaabbbbbbbbbbbbbbbbaaababbbaaaaabbbbbbaabbbaaaabbbbbbbabbbbbaaabbbbbbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbabbbabaaabbbbbbbbbbbbbbbbbbbbbbabbbbbaaaaabbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbabbabbbabaaabbbbbbbbbbbbbbbbbbbbbbabbbbbaaabbabbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbabbbabaaaaaaaaabbbbbbaaabbbbbbbaabbabbbbbbbbbbbbbba + abbbabbbaaabbbbbaaabbbbbabbabbbbbbbbaaabbbbabaaaaaaaaabbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbba + aaaaaaabaaaabbbbaaabbbaaaaaaaabbbbaaaaaabbbabaaaaaaaaabbbbbbaaabbbbbbaabbbbbbbbbaabbbbbbba + aaaaaaabaaaaabbbaaabbbaabbaaaabbbaaaaaaaabbabbaabbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbabbbbbbba + aabbaabbaaaaaaabbaabbbbbbbbaaabbbaaaaaaaabbabbaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbaabbbbbba + abbbbbbbbbbbbbabbaabbbbaaaaaabbbbaaaaaaaabbbaaaabbbbbbaaabbaaaaabbbbbbbbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbabbaabbbbaabaabbbbbabbbbbbabbbbaaabbaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbabbbaaabbbabaaabbaabbaabbbaaabbbbbbbbbbbbbbbbbbbaabbbbbba + abbaabbbbbbaaaabbbabbbbbbbbbbbbbbaabbbbbbbbabaaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + aaaaabaaabbaaaabbbbabbbbbbbbbbbbbaabbbbabbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbb + abbabbaaabbaaaabbbbaabbbbbbbbbbbbbabbbbabbbababbbbbbabbbaaaaaaaabbbbbbabbbbbbbbaaaabbbbbba + abbbbbbbbbbbbaaabbbaabbbbbbbbbbbbbaabbbabbbbbabbbbbaaabbaaaaaaaabbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbbbaabbabbbbaaabbaaaaaabaaaaaaaabbbbbbbbbbaabaaabbbbbbbbba + bbbbbbbbbbbbbaaaabbbabbbbbaabbbbbbbabbbabbbbaaaababbaabbbbbbbaaabbbbbbbbaaaabaaabbbbbbbbaa + bbbbbabbbaaabaaaabbbbbbbbaabbabbbbbabaaabbbbaabbbbbbbbbbbbbbbbabbbbbbbbaaaaabaaabbbbbbbbbb + bbbaaaaaaaaaaaaaaabbbbbbbabbbaaabaaabaaabbbaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaabbbbbbbbbb + bbbaaaaaaaaabbaaaabbbbbbaabbbbbaaaaabaaabbaaaabbabbbbbbbbabbbabbbbbbbbbbbbbbbaaabbbbbbbbba + bbbaaaaaaaaabbaaaaaabbbaabbbbbbbaaabbaaabbaaaaaaaabbbaaabaabbabbbbbbbbbbbbbbaaaabbbbbbbbba + bbbabbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbaabbbaaabbbabbbabbabbbabbbbbbbbbbbbbbbbaaaabbbbbbbbba + bbbbbbbbbbbbbbbbbbaabbbabaaaaabaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbbbbaaabbbaaaabaabbabbbbaabbbbbbaaaabbbaaaabbbbbababaaaaaaaaaaabbbbbbbbbbbaaaabbbbbbbbba + abaaabaaabbbaaaaaabbbaabbbbbaabbbbabbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbbba + abaabbaabbbbaaaaaabbbaaabbbbaabaaaabbbbbbbaaaaaaaaaabbbaabaaaaaaabbbbbbbbbbbbaabbbbbbbbbba + abaabbbbbbbbbbbaabbbbbaabbbbbbbbbabbbbbbabbaaaaaaabbbbbabbbaabbaabbbbbbbaabbaaabbbbbbbbbba + abbbbbbbbbbbbbbaababbbaabbbbbbbaaabbbbbbaabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbba + bbbbbbbaabbaaaaaabababbabbbbbaaaaabbbbbaaabbbaaaaabbbbbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbbba + abaaaaaaaaaaaaaabbababbaabbbbaaaaabbbbbaaabbbbbaabbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbba + bbaaabbbbaaaaaaababbabbbabbbbbbbaabbbbaaaaabbbbbbaaaabaaabbabbbbaaabbbbbbbbaaaabbbbbbbbbbb + bbbbbbbbaaaaaaabbabbabbbbabbbbbbbbbbbbaaaabbbaabbbaaaaaaaaaabbbaaabbbbbbbaaabaaabbbbbbbbbb + abbabbbbaaaaabbbbabbaabbbaabbbbbbbbbbabaaabbbaababbbaaaaabbabbbbbabbbbbbabbbaaaabbbbbbbbba + bbbaabbaaaabbbbbabbbaabbbbaabbbbbbbbabaaaabbbaaaaabbbaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + bbbaaaaaaabbbbbaabbbaabbbbbaabbabbbbbbaaaabbbbaaabbbbbbaaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbb + abbbaaaaabbbbbbaabbbbaabbbbaaabaabbbbaaaaabbbbaaabbbbbbbaaaaaaabbbbbbbbbbbbbaaaabbbbbbbbba + abbbaaaabbbbbbbaabbbbaaabbbbaaaaabbbaaaaaabbbbaabbbbbbbbbbaaaaaaabbbbbbaaaaaaaaabbbaabbbaa + abbaaaabbbbbbbbaabbbbaaaabbbbaaabbbaaaaaaabbbbaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbaaabbba + aaaaaabbbbbbbbbaabbbbaaaabbbbbbabbbaaaaaaabbbbbabbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbabbbba + aaaabbbbbbbbabbaabbbbaaaaaabbbbbaaaaaaaaaabbbbbaabbbbbbbbbbbbaaaaaaaaaaaaaabaaaabbbbbbbbba + aaabbbbbbbbbabbbabbbbaaaaaaabbbbaaaaaaaaaabbbbbaabbbbbbbbbbbbaaaaaaabbbbbbbbbbaabbbbbbbbba + aabbbbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbaabbbbabbbabbbbaaabbbbbbbbbbbbbabbbbbbbbba + abbbbbbbbbbbabbbbbbbbaaaaaaaaaaaaabaaaaaaabbbbbbaabbbbbbbbbbbbbaaabbbbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbabbbbbabbaaabbaaaaaaabbaaaaaaabbbbbbaabbbbbbbbabbbbbaaaabbbbbaaaaaaabbbbbbbbba + bbbbbbbbbbbbababbbabaaaaabbbaabbbbbbaaaaaabbbbbbaabbbbabbbbbbbbbbaaaabbabaaaaaaabbbbabbbba + bbbbbbbbbbbbbbbbbbabaaaaabbbbbbbbbbbbaaaaabbbbbbbaabbbabbbbbbbbbbaaaaababbbbbbaabbbbbbbbba + bbbabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaaaabbbbbbbaabbbabbbbbbbbbbaaaaabbbbbbbaaabbbbbbbbba + abbbbbbabbbbbbbbbbbaabaaaabbbaaaabbbbaaaaabbbbbbbaabbbabbbbabbbbbbaaaababbabaaaabbbbbbbbba + abbabbbabbbbbbbbbbbaabbaaaabbbbbbbbbbaaaabbbbbbaaaabbbabbbbaaabbbbaaaabbbbbaaaaabbbbbbaaaa + abbbbbbabbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbbbaaaaabbbbbbbaaabbbbbaaabbbbbbaaaabbbbbbaaab`, + map `abbbbbbbabbabbaabbbabbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + abbbbbbbaabbaaaabbaabbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + abbbbbbbabbbbaaabbaabbbabbbaabbbbbbbbbaaabbbbbabbbbbbbbbaabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + abbbbbbbbbbbbbbbbbaabbbaabbaabbbbbbabbaaaabbbaabbbbbabbbbabbbbbbbaaaabbbbbbbbaaaaabbbbbbba + abbabbbbbbbbbbbbbbabbbbbbbbbabbbbbbaabaaaaabbbabbbbbabbbbbbbbbbbbaaaabbbbbbabaaaaabbbbbbba + abaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbabbaaaaabbbbbbbbbaabbbbbbbbbbbaaaabbbbbbabaaaaabbbbbbba + abbaaaabbbabbbaababaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbbaaaabbbbbbbbbbaaaabbbbbbba + abbbaaabbaaaabbaaaaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaaaabbbbbbbbbbaaaabbbbbbba + abbbbabbbaaaabbabbaaaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaabbbbbbbbbbaaaabbbbbbba + abbbbbbbbaaabbbbbbbaaabbbaaaaaaaaaaabbaaaaaaaaaaaabbaabbbbbbbbbbaaaabbaabbbbbbaaaabbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaabaaaaaaaaaaaaaaaabbbbbbbbbbaaaabbabbbbbbaaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaaabaaabbbbbbbbbbaaaabbbbbbbbbaaaaaabbbbbba + aabbbbbaaaaaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbb + aabbbaaaaabaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbabbbbaaabbbbbba + abbbbbbabbbaaaaabbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbaaaabbbbbba + abbbbbbbbbbaaaabbbaabbbbbbbbaaaabbbbbabbaaabbbaaaaaaaabbbbbbbbbbaaaabbbbbaabbaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbabbbaabbbaaaaaaaabbbbbbbbbbaaaabbbbbbbbaaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbaaaaaaababbbbbbbbaaaaaaaaaaaaaabaaaabbbbbba + aaabbbbaabbbbbbaabbbbbaaaaaaaaaaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbaaabbbbbbb + aaabbbbaabbbbbbabbbbaaaaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbb + aaabbbbaabbbbbbabbbbaaaaaabbaaabaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbaaaabbbbbaaaaaaaaaabbbbbba + abbbbbbabbbbbbbbbbbaaaaaabbbaabbbbbbbaaababbaaabaaaaaaaabbbbbbbbaabbbbbbbbbaaaaaaaabbbbbba + bbbbbbbbbbbbbbbbbaaaaaaaabbbaabbbbbbbbbbbaabaaabaaaaaaaabbbabbbbaabbbbbbbbbbbbbbaabbbbbbba + abbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbaaaabbbbbabaabbbaaaaaaabbbbbbbbabbbbbbabbbbbbbbaaabbbbbba + abbbbbbbbbbaabbbbaaaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbbbbbbbbaaaabbbbabb + abbbbabbbbbaabbbaaaaabaabbbbbaaaaaaaabbbbbbbbbabbbbbbbbbbbbbbbbbaaaaabaaabbbbaaaaaabbbbbba + abbbbabbbbbaabbaaaaaabbabbbbaaaaaaaaaabaababbaaaabbbbbabbbbbbbbbaaaaaaaaabbbbbbbaaabbbbbba + abbbbbbbbbbaabbaabaabbbabbaaaaaaaabaaaabababaaaaabbbbbabaabbbbbaaaabbbbbaabbbbbbbaabbbbbbb + abbbbbbbbbbbbbbaabaabbbaaaaaaaaaabbbaaabaabbabbaabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbabbbbbaaa + abbbbbbbbbbbbbbaabbabbbbaabaaaaaabbbaabbbaababbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbabbbbbbbbba + abbbbaaaaaabbbbaabbaaaaaaaaaaaaaabbbabbbbabaabbbbbbbabbbbbbbbbbaaaabbbbbabbbbbbaabbbbbbbba + abbbbaaaaaabbbbaabbbbaaaaaaaaaaaaaaaabbbbaaaabbbaaaaabaaaabbbbbaabbbbbbbbbbbbbbbbbabbbbbba + abbbbaaaababbbbaaaabbaaaaaaaaaaaaaaaabbbaaaaaabaaaaaaaaaaaaaaabaabbbbbbbaaabbabbbaabbbbbba + abbbbaaaaaabbbbaaaabbabaabbbbaaaaaaaabbbaaaaaabbaaaaaaabaaaaaaaaabbbbbbbbbbbbabbbaabbbbbba + abbbbbbbabbbbbbaaaaaabbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbabaabbbbbbbbbbaabbaabbbbbba + abbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbabbbbbbba + bbbaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbaaaaaaabbabbbbbbbbbbbbbbbbbaabbbbbba + abaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaaaabbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbbba + abaaabbbbbbbabbaaaabbbbbbbbbbbbbbbbaaabbbbaaaaabbbbbbbaaaaaaaaaabbbbaaabbbbbbbbbbaabbbbbba + abbabbbbbbbaabbaaaabbbbbabbbbbbbbbbaaaabbbbaaaabbbbbbbaabbbbbaaabbbbbaabbbbbbaabbaabbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaaaabbbbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaababbbaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaabbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbaabbabbbabaaaaaaaaaabbbbbbabbbbbbbbaabbbabbbbbbbbbbbbba + bbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbbbabbabbbabaaaaaaaaaabbbbaaaabbbbbbbaabbbbbbbbbabbbbbbba + aaaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbabbbabaaaaaaaaabbbbbbbabbbbbbbbaabbbbbbbbbabbbbbbba + aaaaaaaaaaaabbbbaaabbbbbaabbbbbbbbbbaaabbbbbbaaabbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbaaabbbaaaaaaaabbbbaaaaaabbbbbaabbbbbbbbbbbbbbabaabbbbbaabbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbbaabbbaabbaaaabbbaaaaaaaabbabaaabbabbbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbaaaaaaaabbbabaaaabbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbba + bbbbbbbbbbbbbbbabaabbbbaaaaaabbbbaaaaaaaabbbabaaaaabbbaabbbbbabbbbbbbbbbbbbbbbbbbaabbbbbba + bbaaabbabbbbbababbabbbbabbbabbbbbabbbbbabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + aaaaabbaabbbaabbbbabbbbbbbabbbbbbaabbaaabbbabaabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaaabbbbbbb + aaaaabbaabbaaaabbbabbbbbbbbbbbbbbaabbababbbababbbbbaabbbaaaaaaaabbbbbbabbbbbbbbaaaabbbbbba + abaabbbbbbbbaaabbbbabbbbbbbbbbbbbbabbbbabbbabaabbbaaaabbaaaaaaaabbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbbabbbbabbbabaaabaaaaabbaaaaaaaabbbbbbbbbbaabaaabbbbbbbbba + bbbbbbbbbbbbbaaabbbaabbbbbbbbbbbbbaabbbabbbbaaabbbbabbbbbbbbbbbabbbbbbbbaaaabaaabbbbbbbbaa + abbabbbaaaaabaaabbbaabbbbbbbbbbbbbbabbbabbabaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaaabbbbbbbbbb + abbaaaaaaaaaaaaaabbaabbbbbabbbbbbbbabbbabbbbabbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaabbbbbbbbbb + abbaaaaaaaaaaaaaabbbabbbbaabaabbbbbabbbabbbaabbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbaaabbbbbbbbba + abaaaaaaaaaaabbbbbbabbbbaabbbaaabaaabaaabbaaaabbbbbbbbbbaaaaaabbbbbbbbbbbbbbaaaabbbbbbbbba + abbabbbbbbbbbbbbbbaabbbbaabbbbaaaaaabaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + abbbbbbaabbbbbabbbaabbbaabbbbbbbaaabbaaabbaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbaaaabbbbbbbba + abbabbbaabbbaaaabbaabbbaaaabbbbbbbbbbaabbbaabbbbbbaaabbbaaaaaaaaabbbbbbbbbbbbaaaabbbbbbbba + bbaaabbaabbbaaaabaabaababaaaaaaaabaaaabbbaaaabbaaaaaaaaaaaaaaaaaabbbbbabbbbbbaaabbbbbbbbba + bbaaabaabbbbaabbbbbbbabbbbaabbbbbbaaabbbbaaaaaaaaabaaaaaaaaaaabaabbbbbbbbbbbbaabbbbbbbbbba + bbaabbbbbbbbabbbbbbbbaabbbbbaabbbbabbbbbbaaaaaaaaabbbbbbbaabbbbaabbbbbbbaabbaaabbbbbbbbbba + bbbbbbbbbbbbbbbaababbaaabbbbaaaaaabbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbba + abbbbaaaaaaaaaaaabbbabaabbbbbbbaaabbbbbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abaaaaaaaaaaaaaabbbbabaabbbbbbaaaabbbbbaabbaaaaabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbba + abaaaabbbaaaaaaababbabbabbbbbaaaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbabaaabbbbbbbbbb + bbbbbbbbbaaaaaabbabaabbaabbbbaaaaabbbbaaaabbbbbbaaaaaaaaaaabbbbaaaabbbbbbaaabaaabbbbbbbbbb + bbbbbbbbbaaaaabbbbbaabbbabbbbbbbbbbbbbaaabbbbabbbaaaaaaaaaaabbbbabbbbbbbabbbbaaabbbbbbbbba + bbbbabbaaaaaabbbabbaabbbbabbbbbbbbbbbaaaabbbbababbbaaaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbbbbaaabbbbaabbbabbbbaabbbbbbbbbaaaaabbbbaabbabbbaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbb + bbbbaaaaabbbbbbaabbbaabbbbabbbbbbbbbabaaabbbbaaaaabbbbaaaaabbbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbaaaaabbbbbbbaabbbaabbbbbaabbabbbabaaaabbbbaaaabbbbbbaaaaaaabbbaabbbbaaaaaaaaabbbaabbbaa + abbaaaaabbbbbbbaabbbaaabbbbaaaaaabbbaaaaaabbbaaaabbbbbbbbaaaaabbbaaaaaaaaaaaaaaabbbaaabbba + abaaaaabbbbbbbbaabbbaaabbbbbaaaaabbbaaaaabbbbbaabbbbbbbbbbaaaaabaaaaaaaaaaaaaaaabbbbabbbba + aaaaabbbbbbbbbbaabbbbaaaabbbbaaabbbaaaaaabbbbbabbbbbbbbbbbbaaaaaaaaaababaaabbaaabbbbbbbbba + aaabbbbbbbbbabaaabbbbaaaaabbbbbbbbaaaaaaabbbbbaabbbabbbbbbbbaaaaaababbbbbbbbbbaabbbbbbbbba + aabbbbbbbbbbabbaabbbbaaaaaabbbbaaaaaaaaaabbbbbaabbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbba + abbbbbbbbbbaabbbabbbbaaaaaaaabaaaaaaaaaaabbbbbaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbabbbbbbbbba + abbbbbbbbbbaabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbaabbbbabbbbbbbbaaabbbbbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbaabbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbaabbbbabbbbabbbbaaabbbbbbbaaaaaaabbbbbbbbba + bbbbbbbbbbbaabbbbbabaaaabaaaaaaaabaaaaaaabbbbbbaabbbbbbbbbabbbbbaaaaabbabaaaaaaabbbbabbbba + bbbbbbbbbbbabbbbbbabaaaabbbaabbabbbaaaaaabbbbbbaaabbbabbbbbbbbbbaaaaaabbbbbbbbaabbbbbbbbba + bbbabbbbbbbabbbbbbabaaaabbbbbbbbbbbbaaaaabbbbbbbaabbbaabbbbbbbbbaaaabbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbabaaaaabbbbbbbbbbbaaaaabbbbbbbaabbbbabbbabbbbbbaaaabbbababbaaabbbbbbbbba + abbabbbabbbbbbbbbbaabbaaabbbbbbbbbbbbaaaabbbbbbaaaabbbabbbabbbbbbaaaabbbbbbaaaaabbbbbbaaaa + abbbbbbabbbbbbbbbbbabbaaaabbbbbbbbbbaaaaabbbbbaaaaabbbabbbaaaabbbbaaabbbbbbbaaaabbbbbbaaab`, + map `abbaabbbbbabbabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbaaaabbbbbbbba + abbaaabbbaaaababbaabbbbaabbbaababbabbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbbaaabbbbbbbba + abbbbbbbbbaabaaabbaabbaaabbaaabbbbaabbaaabbbbbabbbbbbbbbaabbbbbbbaaaabbbbbbbbbaaaabbbbbbba + abbbbbbbabbbbbbbbbaabbaaabbbabbbbbaabbaaaabbbaabbbbbabbbaabbbbbbbaaaabbbbbbbbbaaaabbbbbbba + abbbbbbbabbbbbbbbbabbbbabbbbabbbbbaabbaaaaabbbabbbbbabbbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbba + abbaaaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaaaabbbbbbbbbaabbbbbbbbbbbaaaabbbbbbabbaaaabbbbbbba + abbaaaabbbaabaaaaabbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbbaaaaabbbbbbbbbaaaabbbbbbba + abbaaaabbaaabaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbaabbbabbbbbbaaaabbbbbbbbbbaaaaabbbbbba + abbaaaabbaaaaaaaaaaaaaaabaaaaaaabbabbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaabbbbbbbbbbbaaaabbbbbba + bbbbbbbbbbbabbbbaaaaaaaabaaaaaaabaaaaaaaaaaaaaaaaabbaabbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabaaabbbbbbbbbbaaaaabbabbbbbbaaaaabbbbbba + aabbbbbaaaaaaaaaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbb + aabbbbaaaaaaaaaaabaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaabbbbbba + abbbbbaaabbaaaaabbaaaaabbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaabbbbbba + abbbbbbbbbbaaaaabbaabbbbbbbbbbbbbbbbaaabbabbbaaaaaaaaabbbbbbbbbbaaaabbbbababbbbaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbaaabaaabbaaaaaaaaababbbabbbbaaaabbbbbbabaaaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbabbbbaaaaaaaababbbbbbbbaaaaaaaaaaaaabbbaaabbbbbba + ababbbbaababbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbaaaabbbbaaabbbbbbb + ababbbaaaaabbbbabbbbaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbbb + ababbbbaaaababbabbbbaaaaaabbaaaaaaaaaaabbbbbaaaabbbbbbbabbbbbbbbaaaabbbbbaaaabbaaaabbbbbba + abbbbbbbbbbbbbbbbbbaaaaaaabbaaabaaaaaaabbbbaaabaaaaaaaaaabbbbbbbaaabbbbbbbbaaaaaaaabbbbbba + abbbbbbbbbbbbbbbbaaaaaaaabbbaabbbbbbbaabaabbaabbaaaaaaaabbbbbbbbaabbbbbbbbbbbbbbaaabbbbbba + abbbbbbbbbbbbbbbbaaaaaaaabbbaabbbbbbbbbbbaabaabbaaaaaaaabbbbbbbbaabbbbbbbbbbbbbbaaabbbbbba + abbbbbbbbbbaabbbbaaaaaaaabbbbbbbbaabaabbbbababbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbabb + abbbbabbbbbaabbbaaaaaaaabbbbbbbbaaaaaabbbbbbbbabbbbbbbbbbbbbbbbbaaaaabababbbbabaaaabbbbbba + abbbbabbbbbaabbaaaaaabaabbbbbaaaaaaaaabbbbabbaaaabbbbbaaaabbbbbbaaaaaaaaabbbbbbbaaabbbbbba + abbbbbbbbbbaabbaabaaabbabbbbaaaaaaaaaabaababbaaaabbbbbaaaaabbbbbaaaabbbbaabbbbbbbaabbbbbbb + abbbbbbbbbbbbbbaabaabbbabbaaaaaaabaaaaababbbabaaabbbbbaababbbbbbaaabbbbbbbbbbbbbbaabbbbaaa + abbbbbbbbbbbbbbaabaabbbaaaaaaaaaabbaaaabbabbabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbabbbbbbbbba + abbbbaaaaabbbbbaabbabaabaabaaaaaaabbaaabbaaaabbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaababbbbbba + abbbbaaaaaabbbbaabbbaaaaaaaaaaaaaabbaabbbaaaabbbaaaabbaaaaaabbbbaabbbbbbbbbbbbbbbbabbbbbba + abbaaaaaaaabbbbaabbbbaaaaaaaaaaaaaaaabbbbaaaabbaaaaaaaaaaaaaaabaaabbbbbbaaabbabbbaabbbbbba + abbbbaaaabbbbbbaaaabbaaaaaaaaaaaaaaaabbbaaaaabbaaaaabbaaaabbbaaaaabbabbbbbbbbabbbaabbbbbba + abbbbbbbabbbbbbaaaaabbbaabbbbaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbabaabbbbbbbbbaabbaabbbbbba + abbbbbbbbbbbbbbaaaaaabbbbbbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbabaaabbbbbbbbaabbabbbbbbba + abbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaabbbbbba + abbaabbbbbbabbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaaabbbbbbbaaaaaaaaaaabbbbbbbbbbbbbbbbaabbbbbba + abbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbbaabbbbaaaaabbabbbaaaaaaaaaaaabbbaaaabbbbbbbbbaabbbbbba + abbaaabbbbbaabbaaaabbbbbbbbbbbbbbbbaaabbbbaaaaabbbbbbbbabbbbbbbbbbbbbaaabbbbbaabbaabbbbbba + abbabbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbaaaaabbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbaaabbbbbbbbbba + bbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaababbbaaabaaaaaaaabbbbbbaaabbbbbbaabbbabbbbbbbbbbbbba + bbbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbbaabbabbbaaabaaaaaaaabbbbbbababbbbbbaaabbbbbbbbabbbbbbba + aabbaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbabbabbbbbaaaaaaaaaabbbbbbbbaabbbbbaabbbbbbbbbabbbbbbba + aaabaaaaaaaaabbbaaabbbbbbbbbbbbbbbbbbbbabbbbaabbbbbbbbbbbbbbbbbaabbbbbaabbbbbbbbbbbbbbbbba + abbbbaabbbbbbbbbaaabbbbaaaabbbbbbbbbbaabbbbbaaabbbbbbbbbbbbbbbbaabbbbbaabbbabbbbbbbbbbbbba + abbbbbbbbbbbbbbbaaabbbaaaaaaabbbbbaaaaaabbbbaaaabbbbbbaaaaaaabbaabbbbbbbbbbbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbaaabbbabbbaaaabbbaaaaaaaabbbbaaabaaabbaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbbba + bbaabbaaabbbbbbbbaabbbbbbaaaaabbbaaaabbaabbbbaaabaaabbaaabaaaababbbbbbbbbbbbbbbbbaabbbbbba + baaaaaaaabbbbbbabaabbbaaaaaaabbbaaaaaaaaabbbaaaabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaaabbbbbba + aaaaaaaaabbbbbbbbaabbbbabbbbbbbbaabbbbbaabbbaabbbbbbbbbbbbbbbbbabbbbbbabbbbbbbbbaaabbbbbbb + abaaabaaabbbaabbbbabbbbbbbbbbbbbbabbbaaabbbababbbbbbaaabaaaaaababbbbbbabbbbbbbbaaaabbbbbba + abbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbaabbababbbababbbbbaaaabaaaaaababbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaabbbbbbbaaaaabbbaaabbbaaaaaaaaabbbbbbbbbaaaaaabbbbbbbbba + bbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbaabbbbabbaaaaaaaaaaabbbbbbbbbaaabbbbbbbbaaabbaabbbbbbbbaa + abbabbbaabaabaaabbbaabbbbbbbbbbbbaaabbaabbabaabbbbbbbbbbbbbbbbbaaabbbbbaaaaaaaaabbbbbbbbbb + abaaaaaaaaaaaaaabbbaabbbbbaabbbbbbbaabaabbababbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbbbb + abbaaaaaaaaaaaaabbbabbbbbaabbbbbbbbabbbabbbaaaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbaaabbbbbbbbba + abbbbaaaabaabbbbbbbabbbbbaabaabbbbbabababbbaaabbbbbbaaaaaaaabbbbbbbbbbbbbbbbaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbabbbbaabbaaaabaaabaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbba + abbbbbbaabbbbbbbbbaabbbaabbbbbaaaaaabaaabbaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbaaaabbbbbbbba + abaaabbaabbbaaaabbaabbbaabbbbbbaaaabbaaabbaabbbbbbbabbbbaaaaaaaaabbbbbbbbbbbbaaaabbbbbbbba + bbaaabaaabbbaaaabaababbaaabbbbbbbbbbbaabbaaaaabaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbaabbbbbbbbba + bbaaabaabbbbaabbbbbbabbbbaaaaaaaabaaaabbbaaaaaaaaaaaaaabbbbabbaaaabbbbbbbbbbbbabbbbbbbbbba + bbaabbbbbbbbbbbbbbbbaabbbbabbbbbbbaaabbbbaaaabbaaaabbbbbbbbaaaaaaabbbbbbaabbaaabbbbbbbbbba + bbbbbbbbbbbbbbbaababbaabbbbbabbbbbabbbbbbaaaabaaaabbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbbbbbbba + abbbbaaaaaaaaaaabbbbbaabbbbaaaaaaabbbbbbbaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + aaaaaaaaaaaaaaaabababbaabbbbbbbbaabbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbbbbbba + abaaabbbbaaaaaaabababbaabbbbbbaaaabbbbbaabbabbbbbbbbbbbbbaababbbabbaabbbbbbabaaabbbbbbbbbb + bbbbbbbbbaaaaaababbabbbaabbbaaaaaabbbbaaabbbbbbaaaaaaaaaaaaaabbaabbbabbbbbbabaaabbbbbbbbbb + bbbbbbbbbaaaaabbabbabbbaabbbbaaaaabbbbaaabbbbbbaaaaaaaaaaaaaabbbabbbabbabbbbbbaaabbbbbbbba + bbbbabbaaaaaabbbabbaabbbabbbbbbbbbbbbaaaaabbabbbbaaaaaaaabbbbbbbbbbbaabbbbbbbaaabbbbbbbbba + bbbbbbbbaaabbbbaabbaabbbaabbbbbbbbbbbaaaabbbaababbaaaabbbbbbbbbbbbbbabbbbbbbbaaabbbbbbbbbb + abbbaaaaabbbbbbaabbaabbbbaabbbbbbbbbaaaaabbbaabbabbbaaabbbbbaabbbbbaabbbbbbbaaaabbbbbbbbba + abbaaaaabbbbbbbabbbbabbbbbabbbbbbbbabaaaabbbaabbaabbbaaaaaaaaaabbaaaabbbaaaaaaaabbbaaabbaa + abbaaaabbbbbbbaabbbbaabbbbaaabaabbbbaaaaabbbaaaaaabbbbaaaaaaabbbbaaaaaaaaaaaaaaabbbaaabbba + abaaaaabbbbbbbaabbbbaabbbbbaaaaaabbbaaaaabbbbaaabbbbbbbbaaaaabbbbbaaaaaaaaaaaaaabbbbabbbba + aaaaabbbbbbbbbaabbbbaaabbbbbaaaabbbaaaaaabbbaaaabbbbbbbbbaaaabbbbbbaababaabbbaaaabbbbbbbba + aaabbbbbbbbbbbaabbbbaaaaabbbbaabbbaaaaaabbbbbaabbbbbbbbbbbaaaabbbbbaabbbbbbbbbbaabbbbbbbba + aabbbbbbbbbabbaabbbbaaaaaabbbbbbbbaaaaaabbbbbaabbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbabbbabbbbaaaaaaabbbbaaaaaaaaabbbbbaabbbbbbbbbabbbaaaabbabbbbbbbbbbbbabbbbbbbbba + abbbbbbbbbbabbbbbbbbbaaaaaaaaabaaaaaaaaabbbbbaabbbbbbbbbabbbbaaabbbbbbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbaabbbbbbbbaabbbaaaababbbbabaaaaaaaabbbbbbbba + bbbbbabbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbbaabbbbbbbbbabbbbaaaaaaaabbbaaaaaaabbbbbbbbba + bbbbbabbbbaabbbbbbabaaaabaaaaaaaabaaaaaabbbbbbaabbbbbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbba + bbbbbabbbbaabbbbbbabaaaabbbaabbbbbbaaaaabbbbbbaaabbbbbbbbbbbbbbaaaaabbbbbbbbbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbaaaabbbbbbaaabbbbbbbbabbbbbbaaaaabbbababbaaabbbbbbbbba + abbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbaaaabbbbbbbaabbbbbbbbabbbbbbaaaaabbbbbbbaaaabbbbbbaaaa + abbbbbbbbbbbbbbbbbaabaaabbbbabbbbbbbaaaabbbbbbaaabbbbbbbbaaaabbbbaaabbbbbbbbaaaabbbbbbaaab`, + map `baaaabbbbbabbbbbbbbabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaaabbbbbbbbbaaabbbbbbbba + baaaabbbbbabbbbbbbaabbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaaaabbbbbbbbbaaaabbbbbbba + bbaabbbbbbabbbbbbbbabbbbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbaabbbbbbbbaaabbbbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbbbbbaaaabbbaabbbbbaabbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaaabbaabbbbbaabbbbbbbbbbbaaaabbbbbbabbaaaaabbbbbba + abbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbaabbbbbbbbbbbaaaabbbbbbabbaaaaabbbbbba + abbbaaabbbabbbbaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaabbbbbbbbbbaaaabbbbbbba + abbbbaabbbabbbaaaaaabababbbbbbabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbba + abbbbaabbbabbbaaaabbbbabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbbaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabababbbbaaabaaaabbababbbbbbbbbbaaabbaabbbbbbbaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaaabbaaaaaaaaabaaaabbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + abbbbbbbabaaaaaabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbbb + abbabbaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbba + abbbbbbbbbaaaaaaaaaababbbbbbbbbbbbabbabbbbbbbbbbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbaaabbbbbba + bbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaaaaabbbbbbbbbbaaabbbbbababbbbaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabaaaaaaaaabbbbbbabbbaaaabbbbbbabaaaaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaabbbaaaaaaaabbbbbbbbbbaaaaaaaaaaaaabbbaaabbbbbba + ababbbbbbbbbbbbbabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbaaaabbbbbb + aaabbbbaaaabbbbbabbbbbaaaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaaabbbbbb + abbbbbbaaaabbbbbabbbaaaaaaabaaaaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbaaaabbbbbaaaabbaaaaabbbbba + abbbbbbbbbbbbbbbbbbbaaaaaabbaaaaaaaaaabbbbaaaabbbabbbbaabbbbbbbbabbbbbbbbbbaaaaaaaaabbbbba + abbbbbbbbbbbbbbbbbbaaaaaabbbaaabaaabaaabbbbaaaaaaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbaabbbbbba + abbbbbbbbbbbbbbbbaaaaaaaabbbaabbbbbbbbbbbabaaaaaaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbaaabbbbbba + abbbbbbbbbbbabbbbaaaaaaaabbbbbbbbbbbbbbbbabbabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbabbaaabbbbabb + abbbbabbbbbaabbbbaaaaaaaabbbbbbbaaaaabbbbbabbaabbbbbbbbbbbbbbbbbaaaaabababbbbaabaaabbbbbba + abbbbbbbbbbbbbbbaaaaaaaabbbbbaaaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbaabbbbbba + abbbbbbbbbbbbbbaabaaabaabbbbaaaaaaaaabbaabbbbaaaaabbbbabbbbbbbbbbaabbbbbaabbbbbbbaabbbbbbb + abbbbbbbbbbbbbbaabaabbbabbaaaaaaabaaaaababbbbaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbaaa + abbbbbbbbbbbbbbabbaabbbaaaaaaaaaabbaaaababbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaababbbbbba + abbbbaaaaaabbbbabbbabbbaaaaaaaaaabbbaaabbabbaaabbbbbababbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbbbaaaaaabbbbabbbbaaabaabaaaaaaabbaabbbabbaabbbbaabbbaaaaaababbbbbbbbbbbbbbbbbbbabbbbbba + aabbbaaaaaabbbbabbbbaaaaaaaaaaaaaabaabbbaaaababbaaaabbbbaaaaaaabbbbbbbbbaaabbabbbaabbbbbba + abbbbbbbbaabbbbabbbbbaaaaaaaaaaaaaaaabbbbaaaabbbabbbbbbbbbbbaaabbbbbabbbbbbbbabbbaabbbbbba + abbbbbbbbbbbbbbaaaabbaaaabbaaaaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaabbaabbbbbba + abbbbbbbbbbbbbbaaaaaabbabbbbbbaaaaaabbbbaaabbabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabbbabbbbbbba + abbbbbbbbbbbbbaaaaaabbbbbbbbbbbabbbbbbbbbaaabaaabbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbba + abbbaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbbba + abbaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbaabbbaaabaaabbbbbbaaaaabaaabbbbbaaaabbbbbbbbbaabbbbbba + abbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbaabbbbbbaaabbbbbbabbaabbbbbba + abbbbbbbbbbbbbbaaaabbbbbabbbbbbbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbba + abbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbbbabaabbbbbbbbbbbbbbaabbbbbbbaabbbbbbaabbbbbbbbba + abbbbbbbbbabbbbaaaabbbbbbbbbbbabbbaaaabbbbbaaaaabaaaaabbbbbbbaabbbbbbbbabbbabbbbbbbbbbbbba + abbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbbaabbabbaabaaaaaaaaaaabbbbbaabbbbbbbbaabbbbbbbbaabbbbbba + abbbaaaaaaaabbbaaaabbbbbbbbbbbbbbbbaabbabbabbaaaaaaaaaabbbbbbaabbbbbbbbabbbbbbbbbaabbbbbba + aabaaaaaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbabbabbaaabbbbbbbbbbbbbbabbbbbbbaaabbbabbbbaabbbbbba + aabbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbabaaaabbbbbbbbbbbbbaabbbbbbbaaabbabbbbbbaabbbbba + abbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbaaabbbabaaaaabbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbbbaabbbbaaaaaaaabbbaaaaaaabbbbaaaaababbbaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbbba + bbaabbbbbbbbbbbbaabbbbbbbbbaaabbaaaaaaaabbabbaaaabaabbbbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbbba + baaaabbbbbbbabbbaaabbbbaaaaaaabbaaaaaaaabbbbbaaabbabbbbbbbbbbaabbbbbbbbbbbbbbbbaaaabbbbbba + baaaabbaabbaabbabaabbbaaaaaaabbbaaaaaaaaabbbbaabbbbbbbbbbbbabaabbbbbbbbbbbbbbbbbaaabbbbbbb + baaaabaaabbaabbbbaabbbbbbbbbbbbbabbbbbbbbbbbbaabbbbbbbbbbaaaaaabbbbbbbabbbbbbbbaaaabbbbbba + baaabbbbbbbaaabbbaabbbbbbbbbbbbbaabbbaaabbabbaabbbbbaabbbaaaaaabbbbbbbbbbbbbbbaaaaabbbbbba + bbbbbbbbbbbbaabbbbabbbbbbbbbbbbbbabbbbbabbabaaabbbbaabbbaaaaaaaabbbbbbbbbbaaabaaabbbbbbbba + bbbbbbbbbbbbaaabbbaaabbbbbbbbbbbbaabbbbbbbabaaabbbbbabbbbbbbbaabbabbbbbbbaaabbaabbbbbbbbaa + bbbbaaaaabaaaaabbbaaabbbbbbbbbbbbaabbbbbbbabaaabbbbbbbbbbbbbbaabbabbbbbaaaaaabaabbbbbbbbbb + bbbbaaaaaaaaaaaabbbaabbbbbabbbbbbaaabbaabbbbaabbbbbbbbbabbbbbaabbbbbbbbbbbbbbbaaabbbbbbbbb + bbbaaaaaaaaaaaaabbbaabbbbaabbbbbbbaabbbbbbbaaabbbbbbbbbabbbbaaabbbbbbbbbbbbbbbaaabbbbbbbba + bbbaaaaaaaaaaababbbabbbbbabbaabbbbbabbbbbbbaabbbbbbbbbbaabbbbaabbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbbaabbbbbbbbaabbaabbbbaababbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbbba + bbbbbbbbbbbbbbaaababbbbaabbbbaaaaaaabaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbaaaaaabbbbaabbbbbbaaaabbaabbaaabbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbba + bbbaabbbabbbbaaaaaabbbaaabbbbbbbaabbaaabbaaaabbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbaabbbbbbbbba + bbbaabbaabbbbaaaabbbabaaaaabbbbbbbbaaabbbaaaaaaaaaaaaabbaaabbaaaaabbbbbbbbbbbbabbbbbbbbbba + bbbaabbaabbbbaaabbbbabbbbaaaaaaaaaaaabbbbaaaabbaaabbbbbbbbbbbaaaaabbbbbbaabbbaabbbbbbbbbba + bbbbbbbbbbbbbbaabbbbaabbbbbbbbbbbbaaabbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbbbbbbba + bbbbbbbbbaaaaaaababbaabbbbbaabbbbaabbbbbaaaaabbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + aaaaabbaaaaaaaaabbbabaabbbbabbaaaabbbbbbaaaaabbaabbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbbba + aaaaaabbbaaaaaababbabaaabbbbbbbbabbbbbabbaaabbbbbbbbbbbaabbbabbbaaabbbbbbbbabbaabbbbbbbbbb + bbbbbbbbbaaaaaababbabbaabbbbbaaaabbbbbaabbaaaabbbbaaaaaaaabababbaaabbbbbbbbaabaabbbbbbbbbb + bbbbabbbbaaaaabbabaabbaaabbbaaaaabbbbbaabbbaaaaabaaaaaaaaabbbbbbaabbbbbbbbbbbbaaabbbbbbbba + abbabbbbaaaaabbbabaabbbaabbbbaaaabbbbaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbba + abbabbbaaaaabbbabbaabbbbabbbbbbbbbbbbaaabbbbbbabaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbb + abbabaaaabbbbbbabbaabbbbaabbbbbbbbbbaaaabbbabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbaaaaabbbbbaabbbaabbbaaabbbbbbbbaaaaabbbaababbbaaaaaaaaabbabbbaabbbbaaaaaaaaabbbaaabbaa + abaaaaaabbbbbbaabbbaabbbbbabbbbbbbbaaaaabbbaabbabbbaaaaaaaaaaababaaabbbaaaaaaaaabbbbaabbba + aaaaaabbbbbbbbaabbbaaabbbbaaababbbbbaaaabbbaaabaabbbbaaaaaaaaabbbaaaaaaaaaaaaaaaabbbabbbba + aaaaabbbbbbabbaabbbbaabbbbbaaaaabbbaaaaabbbaaaaaabbbbbaaaababbbbbbbabaaaaabbbaaaabbbbbbbba + aaaabbbbbbbabbaabbbbaaabbbbbaaabbbaaaaaaabbbaaabbbbbbbbaaaaaabbbbbabbbbbbbbbbbbaabbbbbbbba + aabbbbbbbbbabbaabbbbaaaabbbbbaabbaaaaaaabbbbaaabbbbbbbbbbaaaabbbbaabbbbbbbbbbbbbabbbbbbbba + abbbbbbbbbbabbaabbbbaaaaaabbbbbbbaaaaaaabbbbaabbbbbbbbbbbbaaaaaabbabbbbbbbbbbbbabbbbbbbbba + abbbbbbbbbbabbbabbbbaaaaaabbbbbaaaaaaaaabbbbaabbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbaaabbbbbbbba + abbbbbbbbbaabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbbbbbbbaaaaabbabbbbbbaaaaaaaabbbbbbbba + bbbbbbbbbbabbbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbaaabbbbbbbbbbbbbaaaaaabbbbbbbbaaaaaabbbbbbbbba + bbbbbbbbbaabbbbbbbbaaaabaaaaaaaaaaaaaaabbbbbbaabbbbbbbbbbbbbbaaaaaabbbbbbbbbbbaabbbbbbbbba + abbbbbbbbaabbbbbbbbaaaaaaaaaaaaabaaaaaaabbbbbaabbbbbbbbbaabbbaaaaabbbbbbbbbbbbaabbbbbbbbba + abbbbbbbbaabbbbbbbbaaaabbbabbbabbbaaaaabbbbbbaabbbbbabbbaabbbbaaaabbbbbbbbaaaaaaabbbbbbbba + abbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbbaaabbbbbbbbaabbbbbaaaabbbbbbbbbaaaaabbbbbaaaa + abbbbbbbbbabbbbbbbabbaabbbbbbbbbbbbaaaabbbbbbbaabbbbabbbabbbbbbaaaabbbbbbbbbaaaabbbbbbaaab`, + map `baaaabbbbaabbbbbaabbbbbabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbaaaabbbbbbba + baaaabbbbaaaaaaaaabbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbaaabbbbbbbbbaaaabbbbbbba + bbaabbbbbaabbaaaabbabbbaabbbabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbba + abbbbbbbbabbbbbbbbaabbbaabbbabbbbbbabbaaabbabbabbbbbabbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbba + abbbbabbbabbbbbbbbbabbbbbbbbabbbbbbaaaaaaaaabbabbbbbaabbbbbbbbbbbaaaabbbbbbabbaaaaabbbbbba + abbbaabbbaabbbbbbbbabbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaabbbbbbbbbbbaaaabbbbbbabbaaaaabbbbbba + abbbaaabbaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbbba + abbbaaabbaaaabbaaabbbbbabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbaaaabbbbbba + abbbbaabbbaabbbaaabbbbaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaaabbbbbbbbbbbaaaabbbbbba + bbbbbbabbbabbbbbbbbbbbbaabbaaaaaaaabbbbbbaaaabbbbaaaaabbbbbbbbbbbaaabbaabbbbbbbaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaabaaaaaaaaaaaaabbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbabbbbbaaaabbaaaaaabbbbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + aaabbbbbbbbaaaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbbb + aaabbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbba + aaabbbbbbaaaaaaaaaaababbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbbaabbbbbbbbbbbbbbbabbaaaaaaaabbbbaaabbbbaabbbbbbbbbbaaaabbbbababbbbaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaaaaabaaaabbaaabbbbbbbbbbaaabbbbbbbabaaaaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaaaaaaaaabbbaaabbbbbbbbbbaaaaaaaaaaaaaabaaaaabbbbba + abaabbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaabbbbbaaabbbbbb + aaaabbbaaaabbbbbabbbbbbaaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbbbb + abaabbbaaaabbbbbabbbbaaaaaaaaaaabbbbbaaaaabbbbaabbbbbbabbbbbbbbbaaaabbbbbbaaaaaaaaaabbbbba + abbbbbbbbbbbbbbbbbbbaaaaaabaaaaaaabbbbbaaaaaaaaaabbbbbaabbbbbbbbaaabbbbbbbbbaaaaaaaabbbbba + abbbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaabbbaaaaaaaaabbaaaabbbbbbbaabbbbbbbbbbbbbbbbaabbbbbba + abbbbbbbbbbbbbbbbbbaaaaabbbbaaabaaaaaaabbbaaaabaaaaaaaaabbbbbbbbabbbbbbbbbbbbbbbbaabbbbbba + abbbbabbbbbbabbbaaaaaaaabbbbaabbbbbbbbbbabaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbabbaaabbbbabb + abbbbabbbbbaabbbaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaabaaabbbaaabaabbbbbba + abbbbabbbbbbbbbbaaaaaaaaabbbbbbbaaaabbbbbbbbbaaaaabbbbaabbbbbbbbaaaaaaaaaabbbbbbbaaabbbbbb + abbbbbbbbbbbbbbaaaaaaaabbbbbbaaaaaaaabbbbbbbaaaaaabbbbaaaaabbaabbbbbbbbbbaabbbbbbbabbbbbbb + abbbbbbbbbbbbbaabbaabbabbbbaaaaaaaaaabbbbbbbbaaaabbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbabbbbaaa + abbbbbbbbbbbbbaabbaabbabbbaaaaaaabaaaaaabbbbbaabbbbbbbabbbbbbaabbbbbbbbbbbbbbbbaabbbbbbbba + abbbbaaabaabbbaabbaabbbaaaaaaaaaabaaaaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbbba + abbbbaaaaaabbbaabbaabbbaaaaaaaaabbbaaabaabbbbaabbbbbbbbabbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbba + aabbbaaaaaabbbabbbbbaabaabbaaaaaabbbaabbaababaaaaaaaaaaaaaaabaaabbbbbbbbbaaababbbbabbbbbba + abbbbbbbbaabbbaabbbaaaaaaaaaaaaaaaaaabbbabaabaaaaaaaaaaabbabaaaabbbbbbbbbbbbbabbbbabbbbbba + abbbbbbbbbbbbbaabbbbaaaaaaaaaaaaaaaaabbbaaaabbabbbbbbbbbbbbbbbaabbbbbbbbbbbbbabbbbabbbbbba + abbbbbbbbbbbbbaabbbbbaaaaaaaaaaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbba + abbbbabbbbbbbbaaaaaabbbabbbbbaaaaaaaabbbaaabbbbabbbbbbbaabbaaaaabbbbbbaabbbbbbbbbaabbbbbba + abbbaabbbbbbbbaaaaaabbbbbbbbbbaaabbbbbbbaaabbaaabbbbbbbaaaaaaaaabbbbbaaabbbbbbbbbaaabbbbba + abbaaabbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaabbaaabbbbbbbaaaabaaaabbbbbaaabbbbbbbbbbabbbbbba + abbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbbbaaaaabbbbbbbbbbbbbbbaaabbbbbbaabbbbbbaabbabbbbbba + abbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaababbbbbba + abbbbbbbbbbbbbaaaaabbbbbabbbbbbbbbbaaabbbaaaaabbbbbbbbbbbbbbbaaabbbbbbaabbbbabaaabbbbbbbba + abbbbbbbbaabbbaaaaabbbbbabbbbbbbbbaaaabbbbaaaaabbbaaabbbbbbbbaaabbbbbbbaabbbabbbbbabbbbbba + abbbbbbbaaabbbaaaabbbbbbbbbbbabbbbaaaabbbbaaaaaaaaaaaaaabbbbbaaabbbbbbbaabbbbbbbbbaabbbbba + abbbaaaaaaabbbaaaabbbbbbbbbbbbbbbbaaabbabbaaaaaabaaaabbbbbbbbaaabbbbbbbaabbbbbbbbbaabbbbba + abbbaaaaaaaabbbaaabbbbbbbbbbbbbbbbaaabbabbabaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbabbbbbabbbbbba + abbbaaaaabbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbaabbbbba + abbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaabaaaaaabbbbbbbbbbbbabbbbbabbbbbba + bbbbbbbbbbbbbbbaaabbbbbaaaaabbbbbbbbaaabbbbaaaaabbbabbaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbba + bbaabbbbbbbbbbbaaabbbaaaaaaaabbbbaaaaaabbbbaaaaabbaabbbbbaaaaaaabbbbbbbbbbbbbbbbaaaabbbbba + baaaabbbbbbbbbbbaabbbbbbbbaaaabbaaaaaaaabbbbaaaaabbabbbbbbbbbbbabbbbbbbbbbbbbbbbaaaabbbbba + baaaabbabbbaabbbaabbbbbaaaaaabbbaaaaabaabbbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbbb + baaabbbabbaaaaabaabbbbaaaaaabbbbaaaaaaaabbbaaabbbbbbbbbbbaaaaaaabbbbbbabbbbbbbbbaaaabbbbba + bbaabbbbbbaaabbbbabbbbabbbbbbbbbabbbbbbbbbbaaabbbbbbaabbbaaaaaaabbbbbbbbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbabbbbabbbbbbaaabbbbbabbbaaabbbabaaabbbbbaaabaaabaaaabbbbbbbbbbbaabbaabbbbbbbba + bbbbbbbbbbbaaabbbaabbbbbbbbbbbbbbabbbbbbbbabaaabaabbaabbbbbbbaaabbbbbbbbaaaaaaaaabbbbbbbaa + bbbbbaaaabaaaabbbbabbbbbbbbbbbbbbabbbbbbbbaaaabbaabbbbbbbbbbbbaabbbbbbbbaaaaaaaaabbbbbbbbb + abbbaaaaaaaaaabbbbaabbbbbbbbbbbbbabbbbbbbbaaaabbabbbbbbbbbabbaaabbbbbbbbbbbbbbaaabbbbbbbbb + bbbaaaaaaaaaaaabbbaabbbbbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaabbbbbbbba + bbbaaaaaaaaaaaabbbaaabbbbaabbbbbbbaabbbbbbbaaabbbbbbbbbbbaabbbabbbbbbbbbbbbbbbaaabbbbbbbba + bbbbbbbbbbbbaaabbbbbbbbbaabbabbbbbaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbaabbaabbbbabaabbbbaabbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbabbbba + bbbabbbaabbbbaaaababbbbaabbbaaaaaaabbaabbaaabbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbaaaabbbabbbba + bbaaabbaabbbbaaaaaabbbbaabbbbbaaaaabbaabbaaaabbbaaaaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbbba + bbaaabbaabbbbaaaaabbbbaabbbbbbbaaabbaabbbaaaabbaaabaaaabaabbbbbaaabbbbbbbbbbbbaabbbbbbbbba + bbbabbbbbbbbbaaabbbabbaaaabbbbbbbbbaaabbbaaabbbaaabbbbbbbbbbbaabaabbbbbbaabbbaaabbbbbbbbba + bbbbbbbbbbbbbbabbbbabbabbaaaaaaaaaaaabbbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbba + bbbbbbbbbaaaaaaabbbaabbbbbbbbbbbbaaabbbbaaaabbbaaabbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbbbbbbba + aaaaaabaaaaaaaababbbaabbbbbaabbbbabbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbbbbbbba + aaaaaabbbaaaaaabababbaabbbabbaaaabbbbbbaaaabbbbbbbbbbbbabbbbbbbbaaabbbbbbbbaabaabbbbbbbbbb + bbbbbbbbbbaaaaaabbabbaabbbbbbbbaabbbbbbbaaabbbbbbbbbbaaaaaaaabbbaaabbbbbbbaaabaaabbbbbbbbb + bbbbbbbbbaaaaababbabbaabbbbbaaaaabbbbbabaaaaaaaabbbbbaaaababbbbbaaabbbbbbbaaabaaabbbbbbbba + bbbaabbbbaaaabbabbabbbaabbbbaaaaabbbbaabbaaaaaabbaaabbaabbbbbbbbbbabbbbbbbbbbbaaabbbbbbbba + abbaabbaaaaabbbabbabbbaabbbbaaaaabbbbaabbbaaaaabbabbbbbbbbbbbbbbbbabbbbbbbbbbbaaabbbbbbbbb + abbabbaaaaabbbaabbaabbbabbbbbbbbbbbbaaabbbbbaaaaaabbbbbbbbbbbaabbaabbbbbbbbbbaaaabbbbbbbba + bbbaaaaaabbbbbaabbaabbbbabbbbbbbbbbbaaabbbabbaaaaaabbbbbbbbabbbbbaabbbbaaaaaaaaaabbbaabbaa + bbbaaaaabbbbbbabbbaabbbbaabbbbbbbbbaaaabbbabbbbaaaaaaaaabbbabbbbbaaabbbaaaaaaaaaabbbaabbba + aaaaaaabbbbbbaabbbaabbbbbaabbbbbbbbaaaabbbaabbbbbaaaaaaaabbbabbbbaaaaaaaaaaaaaaaabbbbbbbba + aaaaaabbbbbbbaabbbbaabbbbaaabbabbbaaaaabbbaabbbabbaaaaaaabbbbbbbbbbbbbaabaaabaaaabbbbbbbba + aaaabbbbbbbbbaabbbbaaabbbbaaaaabbbbaaaabbbbaabaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + aaabbbbbbbabbaabbbbaaabbbbbaaaabbbaaaaabbbbaaaaaabbbbaaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbba + aabbbbbbbbabbaabbbbaaaaabbbbaaabbaaaaaabbbbaaaaabbbbbbaaaaaabbbbbaabbbbbbbbbbbbaabbbbbbbba + abbbbbbbbbabbbabbbbaaaaaabbbbbabbaaaaaabbbbaaabbbbbbbbbaaaaaabbbbaabbbbbbbbbbaaaabbbbbbbba + abbbbbbbbbabbbbbbbbaaaaaaabbbbaaaaaaaaabbbbaaabbbbbbbbbbbaaaaabbbaabbbbbbaaaaaaaabbbbbbbba + bbbbbbbbbaabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbbbaaaaaaaaabbbbbbbaaaaaaabbbbbbbba + bbbbbbbbbaabbbbbbbbaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbaabbbbbbbbba + abbabbbbbabbabbbbbbaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbabbbbbaaaaaaabbbbbbbbbbbbaaabbbbbbbba + bbbbbbbbbabbbbbbbaaaaabbbaaaaabbaaaaaaabbbbbaaabbbbbbaaabbbbaaaaaabbbbbbbbabbbaaabbbbbbbba + abbbbbbbbabbbbbbbabaaabbbbbbbabbbbaaaaabbbbbaaabbbbbbaaabbbbbaaaaaabbbbbbbbbbaaaabbbbbaaaa + abbbbbbbbabbbbbbbabbaaabbbbbbbbbbbaaaaabbbbbaaabbbbbbabbbbbbbaaaaaabbbbbbbbbaaaaabbbbbaaab`, + map `bbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbba + bbbbbbbbbbabbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbba + abbbbbbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbabbbbbbbbbbbbaaabbbbbabbbaaaaabbbbbba + abbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbabbbaaaaabbbbbba + abbbaaabbbbbbbbbaababbbabbbbbbbbbbbbbbbbbabbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbaaaabbbbbba + abbaaaaabbbbbbbbaaaaabaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbaaaabbbbbba + abbbbaaabbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaabbbbbbbaabbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaaaaaaaaaaaabaaabbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaabaaaaaaaabbbbbbbbbbbaaabbbbbbbbbbaaaaaabbbbba + ababbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbb + abbabbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbaaaabbbbba + abbabbbbbbbbbaaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaababbbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbaabbbbaaaabbbbbbbaaabbbbbbbbbbaaabbbbbbabbaaaaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbaaaabbbbbbbbaaaaabaaaaaaaabbbaaabbbbba + abbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaaaabbbaaaaaabbbbaaabbbbbb + abbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbbbb + abbabbbbabbbbbbbabbbbbbaaaaaaaabbbaaaaaabbbbbbbbbbbbbbbbaabbbbbbaaaaaaaabbaaaaaaaaaabbbbba + abbbbbbbbbbbbbbbaabbbaaaaaaaaaabbbbbaaaaaaaabaaaabbbaabaabbbbbbbaaaabbbbbbbbbaaaaaaabbbbba + abbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaabbbbbbaabbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbbbbaaaaaabbbaaaaaaabbbbbaaaaaaaaaaaaaaaaabbbbbbabbbbbbbabbbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbabb + abbbbbbbbbbbbbbbbbaaaaaabbbaabbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbaaaabbaaabbbbaabaaabbbbbb + abbbbbbbbbbbbbbaaaaaaaabbbbabbbbbbbbbbbabbabbaaaabbbbbbbbbbbbbabaaaaaaaaaabbbbbbbaaabbbbbb + abbbbbbbbbbbbbbaaaaaaaaabbbbbbbbababbbbbbbbbbaaaaabbbbbbbabbbaabbbabbbbbbaabbbbbbbaabbbbbb + bbbbbbbbbbbbbbbaaaaaaaaabbbbbbbaaaaabbbbbbbaaaaaaabbbbbbbabbbaaabbbbbbbbbbbbbbbbbbaabbbbaa + bbbbbbbbbbbbbbaabaaababbbbbaaaaaaaaabbbbbbbaaabababbbbbbbbbbbbaabbbbbbbbbbbbbbbbabbbbbbbba + abbbbbaaaaabbbaabaabbbbbbbaaaaaaaaaabbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbba + abbbbaaaaaabbbabbaabbbbbaaaaaaaabaaaaaaabbbbaabaabbbbaaaaaabaaabbbbbbbbbbbbbbbbbbbbabbbbba + aabbbaaaaaabbbabbaabbbaaaaaaaaaabbaaabaabbbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbaaabbbbbbaabbbbba + aabbbbbaaaabbbabbaabbbaaabaaaaaabbaaabbaabbbaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbabbbbaabbbbba + abbbbbbbbbbbbbabbbbaaaaabbaaaaaaabaabbbaababaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbaabbbbba + abbbbbbbbbbbbbabbbaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbba + bbbbbbbbbbbbbbabbbbaaaaaaaaaaaaaaaaabbbaaaaaabbabbbbbbbbaabbaaaabbbbbaaabbbbbbbbbbaabbbbba + bbbbbabbbbbbbbaaaabbaaaabbaaaaaaaaaabbaaaaaaaaaaabbbbbbaaaaaaaaaabbbbbaabbbbbbbbbbaabbbbba + babaaabbbbbbbaaaaaaabbbbbbbbbaaaaabbbbbbaabbaaaabbbbbbbaaaaaaaaaabbbbbaabbbbbbbbbbabbbbbba + aabbbbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbaabbabbbbbba + abbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbabbbbbbbbabbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbaaaaabbbbbbbbbbbbbbbbbaabbbbbbaabbbbabaaabbbbbbbba + bbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbaaabbbaaaaaaabbaaabbbbbbbbbaaabbbbbbbaabbbabbbbbaabbbbba + babbbbbbbbbbbbaaaabbbbbaabbbbbbbbbaaabbbbaabaaabbaaaaaaaabbbaaaabbbbbbbaabbbbbbbbbaabbbbba + aaaaaaaabaabbaaaaabbbbbabbbbabbbbaaaabbbbbabaaabbaaaaaaabbbbbaaabbbbbbbaabbbbbbbbbaabbbbba + aaaaaaaabaabbbaaaabbbbbbbbbbbbbbbaaaabbbbbabaaabbbbbbbbbbbbbbbabbbbbbbbaabbbabbbbbbabbbbba + aaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbabbaabaabbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbbabbbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbabbbabbbbbaaaaabbbbbbababaaaaabbbbbbbbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbabaaaaaaabaabbaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbba + bbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaabaaaaaaaaaabbbbbbbbbbbbbbbbaaaabbbbba + bbaaabbbbbbbbbaaaabbbaaaaaabbbbbbaaaaabbbbbaaaaaabbabbbbbbbbbbbabbbbbbbbbbbbbbbaaaaabbbbba + bbaaabaaaaaabbbaaabbaaaaaaaaabbbaaaaaaabbbbaaaabbbbbbbbbbbbbbbabbbbbbbaabbbbbbbbbaaabbbbbb + bbaaaaaaaaaaabbaaabbbbbbbbaaabbaaaaabbaabbbbaabbbbbbbbaaaaaaaaaabbbbbbbabbbbbbbbaaaabbbbba + abbabaaaabbbabbaaabbbbaaaaaabbbaaaaaaaaabbabaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaabbbbba + bbbbbbbbbbbaababaabbbaaabaabbbbaabbbaaaabbbbaaabbbbbaabbbbaaaaaabbbbbbbbbbbaaaaaabbbbbbbba + bbbbbbbbbbbaabbbaabbbbbbbbbbbbbaabbbbbbbbabaaaabbbbbaabbbbbbbaaabbbbbbbbaaaabaaaabbbbbbbba + bbbababaaaaaabbbabbbbbbbaabbbbbbabbbaaabbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbb + abbaaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbabaaabbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaabbbbbbbbb + abbaaaaaaaaaaabbbaabbbbbbbbbbbbbaabbbbbbbabaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbb + abbaaaaaabaaaabbbaaabbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaabbbbbbbba + bbbbabbbbbbbaabbbbaabbbbbabbbbbbaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbaaabbbaabbbbaabbbbbbbbabbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbabbbba + bbbabbbbbbbbaaabbbbbbbbbaabaabbbbbabaabbbaaabbbbbbbbbbbbaaaaaaaaaabbbbbbbbbbbaaaabbbbbbbba + abbaaabaabbbaaaabbbbbbbaabbaaabbaaabaabbbaaaabbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbaaabbbbbbbba + abbaaabaabbbaaaaaabbbbaabbbbaaaaaaabaabbaaaaabbaaabaaaaaaabbbaabaabbbbbbbbbbbbaabbbbbbbbba + bbbaaabbbbbbbaaaaaabbbaabbbbbbaaaabbaabbaaaabbbaaabbbbbbbbbbbbbbaabbbbbbaabbbaaabbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbaaabbaaaabbbaaabbbbbbbbbbbbbbbabbbbbbbbbbbaaabbbbbbbbba + bbbbbbbbbbbaaaaabbbabbabaaabbbbbbbaaabbbaaaabbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbaabbbbbbbbba + aaaaaaaaaaaaaaabbbbabbbbbaaaaaaabaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbba + aabaaaabbaaaaabbbbbbabbbbbbbbbbbbababbbaaabbbbbbbbbbbbbbbbbbbbbbaaabbbbabbaaabaaabbbbbbbbb + abbbbbbbbaaaaababaabaabbbbaaaaaaabbbbbbaabbbbbbbbbbbaaaaaaababbbaaabbbbbbbaaabbaabbbbbbbbb + abbbbbbbbaaaaababaabbaabbbbbbbaabbbbbbbaaabbbbaabbbaaaaaaaaabbbbaaabbbbbbbbbbbaaabbbbbbbba + abbbbbbbbbaaaaabbaabbaabbbbbbbbabbbbbbbaaaabbbaaaaaabbaaaabbbbbbbbabbbbbbbbbbbaaabbbbbbbba + abbabbbbbaaaababbaabbaabbbbbaaaaabbbbabaaaabaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaabbbbbbbbb + abbabbbaaaaaababbaabbbaabbbaaaaaabbbbaabaaaaabbbbbbbbbbbbbbbbaabbaabbbbbbbbbbaaaabbbbbbbbb + abbbbaaaaaabbbabbaabbbbabbbbbaaabbbbaaabbaaaabbbbbbbbbbabbbbbbbbbaabbbbaaaaaaaaaabbbaaabba + abbaaaaaaabbbaabbaabbbbaabbbbbbbbbbbaaabbbbaaaaaabbbbbaabbbabbbbbaaabbbaaaaaaaaaabbbaaabba + abbaaaaaabbbbaabbaabbbbaabbbbbbbbbbaaaabbbbaaaaaaabbbbaaabbbabbbbaaaabaabaaaaaaaabbbbbabba + baaaaaabbbbbbaabbbaabbbbaabbbbbbbbbaaaabbbabbaaaaabbbbbbbbbbbbbbbbbbbaaabaaabbaaabbbbbbbba + aaaaaabbbbbbaaabbbaabbbbbabbbbbbbbaaaaabbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbaabbbbbbbba + aaaaabbbbbbbaaabbbaaabbbbaaababbbbbaaaabbbaabbbbaaaaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbba + aaabbbbbbbbbaaabbbaaabbbbbaaaaabbbaaaaabbbbabaabbaaaaaaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbba + aabbbbbbbabbaaabbbaaaabbbbbaaabbbaaaaaabbbbabaaabbaaaaaaaabbbbbbbaabbbbbbbbbbbaaabbbbbbbba + abbbbbbbbabbbaabbbaaaaabbbbbaabbaaaaaaabbbbaaaaabbbbaaaaaabbbbbbbaabbbbbbaaaaaaaabbbbbbbba + bbbbbbbbbabbbbbbbbbaaaaaabbbbbbaaaaaaaabbbbaaaabbbbbbaaaaabbbbbbaaabbbbbbbaabaaaabbbbbbbba + bbbbbbbbbabbbbbbbbaaaaaaabbbbaaaaaaaaaabbbbaaabbbbbbbbaaaaaaaabaaabbbbbbbbbbbbbaabbbbbbbba + bbbbbbbbbabbbbbbabaaaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbbbbaaaaaaabaaabbbbbbbbbbbbaaabbbbbbbba + abbbbbbbbabbbbbbabaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbaaaaaaaaaabbbbbbbbabaaaaabbbbbbbba + bbbbbbbbbabbbbbbabaaabbaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbbaaaaaaaaaabbbbbbbbbaaaaabbbbbaaaa + bbbbbbbbbabbbbbbabaaabbbbabaabbbbbaaaaabbbbbaaabbbbbbbbbbbaaabbbbaabbbbbbbbbaaaaabbbbbaaab`, + map `bbaaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbba + bbbbbbbbbbabbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaabbbbbbba + abbbbbbbbbabbbbbbbaabbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbabbbaaaaabbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbaabbbaaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaaabbabbbbaaaaaabbbbbba + abbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbbbbbbbbbaaaaabbababbaaaaaabbbbbba + abbaaaabbbbbbbbbaababbbabbbbbbbbbbbbbbbbbabbbbbbbbbbbbaaabbbbbbbbaaaabbbbbbbbbaaaaabbbbbba + abbbaaaabbbbbbbbaaaaabaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbaaaabbbbbba + abbbbaaabbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbaaaabbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbaabaabbbbbbbabbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaaaaaaaaaaaabaaabbbbbbbbbbbaaabbbbbbbbbbaaaaabbbbbba + ababbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaaaabaaaaaaabbbbbbbbbbbbaaabbabbbbbbbaaaaaabbbbba + ababbbbbbbbbbaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbbb + abbabbbbbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaaaabbbbba + abbabbbbbbbbbaaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaabbbbbbbaaaabbbbba + bbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbbabbbbbbbaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbaaabbbaaaabbbbbbbaaabbbbbbbabbbaaabbbbbbbbaaaaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbaaaaabbbbbbbbaaaaaaaaaaaaabbbaaabbbbba + abbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbaaaaabbbbaaabbbbbb + abbabbbbbbbbbbbbabbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbaaabbbbbb + abbabbbbabbbbbbbabbbbbbaaaaaaaabbbbbaaaabbbbbbbbbbbbbbbbaabbbbbbaaaaaaaabbaaaaaaaaaabbbbba + abbbbbbbbbbbbbbbaabbbaaaaaaaaaabbbbbaaaaaaaabaaaabbbaaaaabbbbbbbaaaabbbbbbbbbaaaaaaabbbbba + abbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbbaaaaaaaaaaaaabaaaaaabbbbbbbabbbbbbbbbbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbbbbbaaaaaabaaaaaaaabbbbbaaaaaaababbbaaaaabbbbbbbabbbbbbabbbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaabbbbaaabbbbbbbbbbbbabbbbbbbbabbbbbbbbbbbbbbaaaabbbabb + abbbbbbbbbbbbbbbbbaaaaaabbbaabbbbbbaabbbbbaabbbbbbbbbbbbbbbbbbbbbaaabbbaaabbbbaabaaabbbbbb + abbbbbbbbbbbbbbaaaaaaaabbbbabbbbbbbbbbbabbabbbaaaabbbbbbbbbbbbbbbaaaaaaaaabbbbbbbaaabbbbbb + abbbbbbbbbbbbbbaaaaaaaaabbbbbbbbababbbbbbbbbbaaaaabbbbbbbabbbbbbbbabbbbbbaabbbbbbbaabbbbbb + bbbbbbbbbbbbbbbaaaaaaaaabbbbbbbaaaaabbbbbbbaaaaaaabbbbbbbabbbbaabbbbbbbbbbbbbbbbbbaabbbbaa + bbbbbbbbbbbbbbaabaaaaabbbbbaaaaaaaaabbbbbbbaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaabbbbbbba + abbbbbaaaabbbbaabaabbbbbbbaaaaaaaaaabbaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaababbbbba + abbbbaaaaaabbaabbaabbbbbaaaaaaaabaaaaaaabbbbaabaabbbbbbaaabbaaabbbbbbbbbbbbbbbbbbbbabbbbba + aabbbaaaaaabbbabbaabbbaaaaaaaaabbbaaabaabbbbaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaabbbbbbaabbbbba + aabbbbbaaaabbbabbaabbbaaaaaaaaaabbaaabbaabbbaaaaaaaaaaaaaaaaaaaaabbbbabbabbbbabbbbbabbbbba + abbbbbbbbbbbbbabbbbaaaaaabaaaaaaabaabbbaababaaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbabbbbaabbbbba + abbbbbbbbbbbbbabbbbaaaaaaaaaaaaaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabbbaabbbbba + bbbbbbbbbbbbbbabbbbbaaaaaaaaaaaaaaaabbbaaaaaaababbbbbbbbaaabbaaabbbbbaabbbbbbbbbbbaabbbbba + bbbbbabbbbbbbbaaabbbaaaabbaaaaaaaaaabbaaaaaaaaaaabbbbbbaaaaaaaaaabbbbbaabbbbbbbbbbaabbbbba + babaaabbbbbbbaaaaaabbbbbbbbbbaaaaabbbbbbaabbaaaabbbbbbbaaaaaaaaaabbbbbaabbbbbbbbbbabbbbbba + aabbbbbbbbbbbaabaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbaabbabbbbbba + abbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbbaaaabbbbbbba + bbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbaaaaaabbbbbbbbbbbbbbbbaabbbbbbbaabbbabaaabbbbbbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbaaaaaaabbaaaaabbbbbbbaaabbbbbbbaabbbabbbbbbbbbbbba + babbbbbbbbbbbbaaaabbbbbaabbbbbbbbaaaabbbbaabaaabaaaaaaaaabbbaaaabbbbbbbbabbbbbbbbaaabbbbba + aaaaaaaabaabbaaaaabbbbbaabbbbbbbbaaaabbbbbabaaabbaaaaabbbbbbbaaabbbbbbbaabbbbbbbbbaabbbbba + aaaaaaaabaabbbaaaabbbbbbbbbbbbbbbaaaabbbbbabaaabbbbbbbbbbbbbbbbabbbbbbbaaabbbabbbbbbbbbbba + aaaabbbbbbbbbbaaaabbbbbbbbbbbbbbbaaabbabbbabaabbbbbbbbbbbbbbbaaabbbbbbbabbbbbbbbbbbbabbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbabbbabbbbbaaaaabbbbbbbbabaaaaabbbbbbbbbbbbbbbbbbbabbbbba + bbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaabbaaaaaaaaabbbbbbbbbbbbbbbbbbaabbbbba + bbbabbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabaaabaaaaaaaaaabbbbbbbbbbbbbbbbbaaabbbbba + bbaaabbbbbbbbbaaaabbbaaaaaabbbbbbaaaaabbbbbaaaaaabbabbbbbbbbbbbabbbbbbbbbbbbbbbbbaaabbbbba + bbaaabaaaaabbbbaaabbaaaaaaaaabbbaaaaaaabbbbaaabbbbbbbbbbbbbbbbabbbbbbbbaabbbbbbbbaaabbbbbb + bbaaaaaaaaaaabbaaabbbbbbbbaaabbaaaaabbaabbbbaabbbbbbbbbaaaaaaaaabbbbbbbaabbbbbbbaaaaabbbba + abbabbbbabbaabbaaabbbbaaaaaabbbaaaaaaaaabbabaaabbbbbaaaaaaaaaaaabbbbbbbbbbbaabbaaababbbbba + bbbbbbbbbbbaababaabbbaaababbbbbaabbbaaaabbbbaaabbbbbaaabbbaaaaaabbbbbbbbbbbaaabaabbbbbbbba + bbbbbbbbbbbaabbbaabbbbbbbaabbbbabbbbbbbbbabaaaabbbbbabbbbbbbbaaabbbbbbbbaabaabbaabbbbbbbba + bbbababaaaaaabbbaabbbbbaaabbbbbaabbbaaabbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbbb + abbaaaaaaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbbabaaabbbbbbbbbbbbbbbbaabbbbbbbbbbbabbbaabbbbbbbbb + abbaaaaaaaaaaabbbaabbbbbbbbbbbbbaabbbbbbbabaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaabbbbbbbbb + abbaaaaaabaaaabbbaaabbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbaaabbbbbbbba + bbbbabbbbbbaaabbbbaabbbbbabbbbbbbaabbbbbbbaaaabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + bbbbbbbbbbbbaaabbbaabbbbaabbbbbbbaabbabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbabbbba + bbbabbbbbbbbaaabbbbbbbbbaabaabbbbbababbbbaaabbbbbbbbbbbbbaaaaaaaaabbbbbbbbbbbaaaabbbbbbbba + abbaaabaabbbaaaabbbbbbbaabbaaabbaaabaabbbaaaabbaaaaaaaaaaaaaaaaaaaabbbabbbbbbbaaabbbbbbbba + abbaaabaabbbaaaaaabbbbaabbbbaaaaaaabaabbaaaaabbaaabaaaaaaabbbaabaaabbbbbbbbbbbaabbbbbbbbba + bbbaaabbbbbbbaaaaaabbbaabbbbbbaaaabbaabbaaaabbbaaabbbbbbbbbbbabbaaabbbbbaabbbbaabbbbbbbbba + bbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbaaabbaaaabbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbba + bbbbbbbbabbaaaaabbbabbabaaabbbbbbbaaabbbaaaabbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbbaaabbbbbbbba + aaaaaaaaaaaaaaababbabbbbbaaaaaaabaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaaabbbbbbbba + aabaaabbbaaaaaabbbbbabbbbbbbbbbbbababbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbaaaaaaabbbbbbbbb + abbbbbbbbaaaaababbabaabbbbaaaaaaabbbbbbaaabbbbbbbbbbbaaaaaabaabbaaabbbbbbbaaaaaaabbbbbbbbb + abbbbbbbbaaaaababaabbaabbbbbbbaabbbbbbbaaaabbbaababaaaaaaaaaabbbbaabbbbbbbaabbaaabbbbbbbba + abbbbbbbbbaaaaabbaabbaabbbbbbbbabbbbbbbaaaabbbaaaaaabbaaaabbbbbbbbbbbbbbbbbbbbaaabbbbbbbba + abbabbbbbaaaababbaabbaabbbbbaaaaabbbbabaaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbb + abbabbbaaaaaababbaabbbaabbbaaaaaabbbbaabaaaaabbbbbbbbbbbbbbbbaaabaaabbbbbbbbbbaaabbbbbbbbb + abbbbaaaaaabbbabbaabbbbabbbbbaaaabbbaaabbaaaabbbbbbbbbbbbbbbbbbabaaabbbbaaaaaaaaabbbaaabba + abbaaaaaaabbbaabbaabbbbaabbbbbbbbbbbaaabbbbaaaaaabbbbbaabbbaabbbbaaabbbaaaaaaaaaabbbbaabba + abbaaaaaabbbbaabbaabbbbaabbbbbbbbbbaaaabbbbbaaaaaabbbbaaabbbbbbbbaaabaaaaaaaaaaaabbbbbabba + baaaaaabbbbbbaabbbaabbbbaabbbbbbbbbaaaabbbabbaaaaaabbbbbbbbbbbbbbbbbaaaaaaaabbaaabbbbbbbba + aaaaaabbbbbbaaabbbaabbbbbabbbbbbbbaaaaabbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbba + aaaaabbbbbbbaaabbbaaabbbbaaababbbbbaaaabbbaabbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaabbbbbbbbbaaabbbaaabbbbbaaaaabbbaaaaabbbbabaabbaaaaaaaaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbba + aabbbbbbbabbaaabbbaaaabbbbbaaabbbaaaaaabbbbabaaabbaaaaaaaabbbbbbbaabbbbbbbbbbbaaabbbbbbbba + abbbbbbbbabbbaabbbaaaaabbbbbaabbaaaaaaabbbbaaaaabbbbaaaaaabbbbbbbaabbbbbbaaaaaaaaabbbbbbba + bbbbbbbbbabbbabbbbbaaaaaabbbbbbaaaaaaaabbbbaaaabbbbbbaaaaabbbbbbaaabbbbbbbaabaaaabbbbbbbba + bbbbbbbbbabbabbbbbaaaaaaabbbbaaaaaaaaaabbbbaaabbbbbbbbaaaaaaaabbaabbbbbbbbbbbbbaabbbbbbbba + bbbbbbbbbabbbbbbabaaaaaaaaaaaaaaaaaaaaabbbbaabbbbbbbbbbaaaaaaabaaabbbbbbbbbbbbaaabbbbbbbba + abbbbbbbbabbbbbbabaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbbbbaaaaaaaaaabbbbbbbbabbaaaabbbbbbbba + bbbbbbbbbabbbbbbabaaabbaaaaaaaaaabaaaaabbbbbaabbbbbbbbbbbaaaaaaaaaabbbbbbbbbaaaaabbbbbaaaa + bbbbbbbbbabbbbbbabaaabbbbabaabbbbbaaaaabbbbbaaabbbbbbbbbbbaaabbbbaabbbbbbbbbaaaaabbbbbaaab`, + map `bbaaabbbbbabbbbbbbbabbbbbbbbbbbabbbbbabbbbbbbbabbbbbbbaabbbaabbbbbaaaabbbbbbbbaaaabbbbbbba + bbbbbbbbbbabbbbbbababbbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbaabbbbbaaabbbbbbbbbbaaabbbbbbba + abbbbbbbbbabbbbbbbaabbbbbbbbaaaabbbbbabbbbbbbbabbbbbbbbbbbbbbbbbbbaaaabbbabbbbbaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaabbbaabbbbbbbbbbbbbbbbbbbaaaabbbabbbaaaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabaabbbbbbbbbbbbbbbbbbbaaaabbbbbbbaaaaaabbbbbba + abbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbabbbbbbaaabbbbbbbbbbaaaabbbaaabaaaaaabbbbbba + abbaaaabbbbbbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbaaaaabbbbbbbbbbaaabbbbbba + abbbaaaabbbbbbbbaabbbbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaaabbbbba + abbbbaaabbbbbbbbbabbbbbabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaaabbabbabbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaabbbaaabbbbaaaaabbbbbbbbbbbaaabbbbbbbbbbbaaaaabbbbba + ababbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbbbaaaaaaaaaaabbbbbbbbbaaabbaabbbbbbaaaaaabbbbba + ababbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbbb + abbabbbbbaaaaaaabbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbaaaabbbbbb + abbabbbbbbbbbaaabbaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbbaaabbbbbabbbbbbaaaaaaaabbbabbbbbbaaabbbaaabbbbaaabbbaaaaabbbabbbbbaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabaaabbaaaabbbbaaaaaaaaaababaaabbbaabbbbbabbbaaabaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbaaaaaaaaaaaaaababbbaaaaabaaabaaabbbaaabbbbba + abbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaaaaaaaaaabbbbaaabbbbba + abbabbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbaaabbbbbb + abbabbbbabbbbbbbaabbbbbbbbbbbbbbbbaaaabbbaabbbbbbbbbbbaabbbbbbbbbaaaaaaaabbaaaaaaaaabbbbba + abbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbaaaaaabaaaaaaaaaaaaaaaaabbbbbbbaaaabbbbbbbbbaaaaaaabbbbba + abbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbbbaabbbbba + abbbbbbbbbbbabbbbbbbaaaaaaaaaaaabbbbaaaaaaaaabbbbbbbbbbaabbbbbbbabbbbbbaabbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaabbbbbaaaabbbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbb + abbbbbbbbbbbbbbbbbaaaaaabbaaaaaaaaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbaaaabbabbbbbbabaaaabbbbbb + abbbbbbbbbbbbbbbbaaaaaabbbaabaabbaaabbabbabbbbaaaabbbbbbbabbbbbbbaaaaaaaabbbbbbabaaabbbbba + abbbbbbbbbbbbbaabaaaaaabbbaabbbbbbbbbbaababbabaaaabbbbbbaaabbbbbbbaabbbbbaabbbbbbbaabbbbbb + bbbbbbbbbbbbbbaabaaaaaabbbbbbbbbbabbbbbbbbaaabbaaabbbbbbbabbbbaabbbbbbbbbbbbbbbbbbaabbbbba + bbbbbbbbbbbbbbaaaaaaaaabbbbbbbaaaabbbbbbbbaaabbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbaabbbbbba + abbbbbaaabbbbbabaaaaabbbbbaaaaaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbba + abbbbaaaabbbbaabaabbabbbbaaaaaaaaaabbabbbbbaabbbabbbbbbaaabbbaabbbbbbbbbbbbbbbbaaabbbbbbba + aabbbaaaaabbbaabaabbbbbbaaaaaaabaaaaaabbbbbaaabaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaabbbbba + aabbbbbaaabbbabbaabbbaaaaaaaaabbbaaabaabbbbaaaaaaaaaaaaaaaaaaaaabbbbbabbaabbbabbbbbabbbbba + abbbbbbbbbbbbabbaabbbaaaaaaaaabbbaaabbaabbbaaabbbbbbbbbbbbbbbbabbbbbbabbbbbbbaabbbaabbbbba + abbbbbbbbbbbbabbaabaaaaabaaaaaabbaabbbaababbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbabbbbbba + bbbbbbbbbbbbbabbbbaaaaaaaaaaaaaaaaabbbaaaababbbbbbbbbbbbaaabbaaabbbbbaabbbbbbaabbbaabbbbba + bbbbbabbbbbbbabbbbaaaaaaaaaaaaaaaaabbbaaaaaaaaaaabbbbbbaaaaaaaaaabbbbaaabbbbbbbbbbaabbbbba + babaaabbbbbbbaaabbbaaaaaaaaaaaaaaaabbaaaabaaaaaaabbbbbbaaaaaaaaaabbbbbaabbbbbbbbbbaabbbbba + aabaaabbbbbbbaaaaabbbabbbbbbaaaabbbbbbbaabbabbbbbbbbbbbbbbbbbbaabbbbbbaaabbbbbbbbbabbbbbba + abbbbbbbbbbbbaaaaabbbbbbbbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbabbbbbbbbabbbbbbaaaaabbbbbba + bbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaabbbbbbbabbbbbbaaabbbbbbbba + bbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbaabbbaaaaaaabbbaaabbbbbbbbbaaabbbbbbbaabbbabbbbbbbbbbbba + bbbbbabbbbbbbaaaabbbbbbbbbbbbbbbbaaabbbaaaaaaaabaaaaaaaaabbbaaaabbbbbbbaaabbbbbbbbaabbbbba + aabbaaabaabbbaaaabbbbbaabbbbbbbbbaaabbbbbabaaabbbaaaaabbbbbbbaaabbbbbbbaabbbbbbbbbaabbbbba + aaaaaaaaaabbbaaaabbbbbabbbbbbbbbbaaabbbbbabaaabbbbbbbbbbbbbbbbbabbbbbbbaabbbbbbbbbbbbbbbba + aaaabbabbbbbbaaaabbbbbbbbbbbbbbbbaaababbaabaabbbbbbbbbbbbbbbbaaabbbbbbbabbbbaabbbbbbbbbbba + abbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaaababbaabaabbabbbbbbbbbabaaaaabbbbbbbbbbbbbabbbbbbbbbbba + bbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbabbbbbaaaaaabbaabbaaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbba + bbbabbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabaaabbaaaaaaaaabbbbbbbbbbbbbbbbbaaabbbbba + bbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbabbbbbbaaaaaaabbabbbbbbbbbbbabbbbbbbbbbbbbbbbaaaabbbbba + bbaaaaaaaaabbbaaabbbbaaaaabbbbbbaaaaaabbbbaaabbbbbbbbbbbbbbbbbabbbbbbbbabbbbbbbbbaaabbbbbb + bbaaaaaaaaabbbaaabbbaaaaaaaabbbaaaaaaaabbbbaabbbbbbbbbbaaaaaaaaabbbbbbbabbbbbbbbbaaabbbbba + abbabbbbabbbbbaaabbaaabbbaaabbbaaaabbaabbbbaaaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbaaaaabbbba + bbbbbbbbbbbabbaaabbbbbaaaaaabbaaaaaaaaabbbaaaaabbbbbaabbabaaaaaabbbbbbbbbbbaabbaaababbbbba + bbbbbbbbbbbabbbaabbbaaaaaabbbbaaabaaaaabbbaaaaabbbbbaabbbbbbbaaabbbbbbbbbbaaabbaabbbbbbbaa + bbbaaaaaabaabbbaabbbbabbbbbbbbbabbbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaaabbaabbbbbbbbb + abbaaaaaaaaaabbbabbbbbbaaabbbbbabbbaaabbbabaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbabbaabbbbbbbbb + abbaaaaaaaaaabbbabbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaabbbbbbbb + abbaaaaaaaaaabbbbabbbbbbbbbbbbbaabbbbbbbbaaaabbbbaaabbbbbaaaaaaabbbbbbbbbbbbbbbaaabbbbbbba + bbbbabbbbbaaabbbbaabbbbbbbbbbbbaabbbbabbbbaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbaaabbbaabbbbbbbbbbbbbaabbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbba + bbbabbbbbbbaaabbbaabbbbbaabbbbbbbabbbbbbbaaabbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbaaaabbbabbbba + abbaaabaaabaaabbbbabbbbaabbabbbbbabaabbbbaaaabbaaaaaaaaaaaaaaaaaaaabbbaaaabbbbaaabbbbbbbba + abbaaabaabbaaaabbbbbbbbaabaaabbaaabaaabbaaaaabbaaabaaaabaabbbaabaaabbbabbbbbbbaaabbbbbbbba + bbbaaabbbbbbaaabbbbbbbaabbbaaaaaaabaaabbaaaaabbaaabbabbbbbbbbabbaaabbbbbbabbbbaabbbbbbbbba + bbbbbbbbbbbbbaaaaabbbaabbbbbbaaaabbaabbbaaaabbbaaabbbbbbbbbbbbbbbbabbbbbaabbbbaaabbbbbbbba + bbbbbbbbabbbaaaaaabbbaabbbbbbbaabbbaabbbaaabbbbaaabbbbbbbbbbbbbbbbabbbbbbbbbbaaaabbbbbbbba + aaaaaaaaaaaaaaaabbbbbaaaabbbbbbbbaaabbbaaaabbbbbabbbbbbbbbbbbbbbbaaabbbbbbbbbbaaabbbbbbbba + aabaaabbbaaaaaabbbabbabbaaaaaaabaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbabbaaabbbbbbbbb + abbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaabbbbaabbbbbbbbbbbaaaaaabbbabbbaaabbbbbbaaabbaabbbbbbbbb + abbbbbbbbaaaaabababbbbbbbbaaabbaabbbbbaaaabbbbabbbbbabaaaaaaaabbbaaabbbbbbaaabaaaabbbbbbba + abbbbbbbbbaaababbabbabbbbbbbaaaabbbbbbaaaaaaabaaaaaaaaaaaabbbbbbbbabbbbbabbbbbaaabbbbbbbba + abbabbbbbbbaababaabbaabbbbbbbbaabbbbbbbaaaaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + abbabbbbbbaaabbbaabbbaabbbbbaaaabbbbbabaaaaaabbbbbbbbbbbbbbbbaaabbabbbbbbbbbbbaaabbbbbbbbb + abbbbbbaaaaababbaabbbaabbbbaaaaabbbbaabbabbbbbbbbbbbbbbbbbbbabbabbaabbbbbbaaaaaaabbbbabbba + abbabaaaaaabbabbaabbbbabbbbaaaaabbbbaabbbabbbbbbbbbbbbbabbbaabbbbaaabbbaaaaaaaaaabbbbaabba + abbaaaaaaabbbabbaaabbbaabbbbbbbbbbbbaabbbaaaabababbabbaaabbbbbbbbbaaabaaaaaabaaaabbbbaabba + abbaaaaaabbbaabbaaabbbbabbbbbbbbbbbaaaabbaaaaaaabbbaabaabbbbbbbbbbaabaaaaaaaabaaabbbbbbbba + aaaaaaaabbbbaabbbaabbbbaabbbbbbbbbaaaaabbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbba + aaaaaabbbbbbaabbbaabbbbbaabbbbbbbbaaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbba + aaaaabbbbbbbaabbbaaabbbbbaaababbbbaaaaabbbbbaaaaabaabbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbbba + aaabbbbbbbbbaabbbaaaabbbbaaaaaabbbaaaaabbbbbbbaaaaaaaaaaabbbbbbbbaabbbbbbbbbbbbaabbbbbbbba + aabbbbbbbbbbaabbbaaaaabbbbbaaabbbaaaaaabbbbabbbbaaaaaaababbbbbbbbaabbbbbbaaaaaaaaabbbbbbba + abbbbbbbbbbbaabbbaaaaabbbbbaaabbaaaaaaabbbbabaabbaaaaabbbbbbbbbbaaabbbbbaaaaaaaaabbbbbbbba + abbbbbbbbbbbaabbbaaaaaabbbbbbbbbaaaaaaabbbbaaaabbbaaaaabbabbbabaaabbbbbbaabbbbbaabbbbbbbba + bbbbbbbbabbbabbbbbaaaaaaabbbbaaaaaaaaaaabbbbaaabbbbaaaaaabbaabaaaabbbbbbaabbbbaaabbbbbbbba + bbbbbbbbabbabbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbaaabbbbbbbba + bbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaaaabbbbbaabbbbbbbaaaaaabbbbaaaabbbbbbbbbaaaaabbbbbaaaa + bbbbbbbbabbbbbbabaaaabaaaaaaaaaabbaaaaabbbbbaabbbbbbbbaaabbbbbbbbaabbbbbbbbbaaaaabbbbbaaab`, + map `bbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbaaaabbbbbba + bbaaaabbbbbbbbbbbbbaaabbbbbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbaaaabbbbbba + bbbbbabbbbbbbbabbbaabbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbabbbbbaaaabbbbbba + abbbbbbbbbbbbbabbbbabbbbbbbbaabbbbbbaabbaaaabbbbbbbbbabbbbbbbbbbbbaaaabbaabbbabaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabaaaaabbabbbbbbaabbabbbbbbbbaaaabbabbbaaaaaaabbbbbba + abbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaaabbbbbbbbbbaaaaabbbbbbbbaaaabbaaabbaaaaaaabbbbba + abbaaaaabbbbbbbbaabababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbaaaabbbbba + abbbaaaabbbbbbaaaabbaaaabbbbbaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaaabbbbbbbbbbbaaaabbbbba + abbbbbbbbbbbbbbaaabaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbaaaaabaaaaaaaabaabbbbbbbbbbbbbbbaaabbbbbbbbbbbaaaabbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbabaabbbaaaaaaaaaaaaaaaabbbbbbbbbaaabbbbbbbbbbaaaaabbbbba + aaaabbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaabbbaaaaaaabaaaaaaabbbbbbbbbbaaababbbbbbbaaaaaabbbbba + bbaabbbbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbaaabbbbba + baaabbbbbaaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbaaabbbbba + bbbabbbbbaaaaaaabbbbaaabbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaabbbbba + bbbbbbbbbbbbbbaaaabbaabbbbbbaaaaaaaabbaaabbbbbbbbabaabbbbbbbbbbbbbaaaabbbabbbbbaaaaabbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaaaaaaaaabbbbaaaaaaaaaaabbbbbbbbbbaaabbbbbbbaaabaaaabbbbba + aabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbaaaabbbaaaaaaaaaabbbbbbbbbbaaaabaaabaaabbbaaabbbbba + abbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaabbbbaaabbbbbb + abbabbbbbaabbbbbbbabbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbaaaabbbbb + abbabbbbbbaabbbbbaaabbbbbbbbbaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbabaabaaaaabbbba + abbbbbbbbbbbbbbbbbbabbbbbbbbbbbaabbbaaaaaaaaaaabbbbbbbbabbbbbbbbbaaaabbbbbbabbaaaaaaabbbba + bbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbabbbaaaaaaaaaaaabaaaaaaaaabbbbbbbabbbbbbbbbbbbbbbaaabbbbba + abbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbbaaaaaaaaaaaaabaaaaaaaabbbbbbbbbbbbaabbbbbbbbbbaabbbbba + abbbbbbbbbbbbbbbbbaaaaaaaaaaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbaaaabbbbbb + aabbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaabbbbaaabbbbbbbbbbbbbbbbbbbbbbbbaaabbbabbbbbbbbbaaabbbbbb + abbbbbbbbbbbbbbbbaaaaabbaaaaaaaaaaabbbbaabbbbbbaaabbbbbbbbbbbbbbbaaaaaaaaabbbbabbaaabbbbba + abbbbbbbbbbbbbbbaaaaabbbaaabbbbbbbbbbabaabbbbbaaaaabbbbbbbbbbbbbbbbbabbbaaabbbbbbbaabbbbbb + bbbbbbbbbbbbbbaaaaaaabbbaabbbbbbbbbbbabaaabbbbbaaabbbbbbbbbbbbbbabbbbbbbbabbbbbbbbaabbbbba + bbbbbbbbbbbbbaaaaaaaabbbbbbbbaaabbbbbbabaabbbbbbabbbbbbbbbbbbbbbabbbbbbbbbbbbbbbaaabbbbbba + bbbbabbaababbaaaaaaaabbbbbbbaaaaabbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbba + aaaaabbaababbaaaaaaabbbbaaaaaaaaabbbababbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbba + aaaaabbaabbbaaaaaaabbbbaaaaaaaaaaaaaabbbbaaaaaabbbaaaaaaabbbbababbbbbbbbbbbbbbbbbbaabbbbba + aaaabbbabbbbabaaabbbbbaaaaaaabaaaaaaabbbbbaaaaaabaaaaabbbbaaaaaabbaabbbbabbbbbabbbbabbbbba + abbbbbbabbbaabbaabbaaaaaaaaabbbaaabaaabbbbaabbbbbbbbbbbbbbbbbbbabbabbbbbbbbbbbabbbaabbbbba + bbbbbbbbbbbaabbaabbaaaaaaaaaabbbabbbaabaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbabbbabbbbbba + bbbbbbbbbbbbabbaabbaaabaaaaaaabaabbbbabaabbbbbbbbbbbbbbbbbbbbbbabbbbaaaabbbbbabbbbaabbbbba + abbbbbbbbbbbabbbbaaaaabaaaaaaaaaabbbbaaaabbbbbbaabbbbbbbaaabbbbaabbbbbbaabbbbbbbbbaabbbbba + abbaaaabbbbbabbbbaaaaaaaaaaaaaaaabbbaaaaabbbbbbbaabbbbbbaaaaaaaaabbbbbaaabbbbbbbbbaabbbbba + abbababbbbbaaabbbaaaaaaaaaaaaaaaabbbbaaaabbbbbbaabbbbbbbaaaabbbabbbbbbaaabbbbbbbbbabbbbbba + abbbbbbbbbbaaaaabbbaabbbbbaaaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaaabbbbbbba + bbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbaabbbbbbbaabbbbbbaabbbbbbbba + abbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbabbbbaaaabbbaaabbaaaababbbbbbaabbbbbbbbabbbabbbbbbabbbbba + abbbbbbbbabbaaaaabbbbbbbbbbbbbbbaaabbbaaaaaaaaaabbaaaaaabbbbbbbabbbbbbbbabbbbbbbbbbabbbbba + abbbaaabbaabaaaabbbbbbbbbbbbbbbbaaabbbaaaaaaaaabbbaaaaaabbbbbbbabbbbbabbabbbbbbbbababbbbba + aabbaaabbabbaaaabbbbbabbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbabbbbbbbabbabbbbbabbbbbbbbaaabbbbba + aabbaaabbbbbaaaabbbbbabbbbbbbbbaaaabbbbaaaaaabbbbbbbbbbbbbbbbbbabbbbbbbabbbbbaabbbbabbbbba + abbbbbbbbbbbaaaabbbbbabbbbbbbbbaaaababbaabaabbbbabbbbbbbbabbbaaabbbbbbbbbbbbbbbbbbbabbbbba + abbbbbbbbbbbaaaabbbbbbbbbbbbbbbbaabbabbbbbaaabbaaabbabbbaaaaaaaabbbbbbbbbbbbbbbbbbbabbbbba + bbbbbbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbabbabaaaaaaaaabbabbbbbbbbbaababbbbbbbbbbbbbbbbaabbbbba + bbbaabbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbaaaaabaaabbabbbbbbbbbbababbbbbbbbbbbbbbaaaabbbbba + bbaaaaaaaabbaaaabbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbaaabbbbbb + baaaaaaaaabbbaaabbbbbaaaabbbbbbaaaaaabbbbbaabbbbbbbbbbbbbbaaaabbbbbbbbbabbbbbbbbbaaaabbbba + baabbbbbbbbbbaaabbbaaaaaaaabbbaaaaaaabbbbbaaabbbbbbbaaaabaaaaaaabbbbbbbbbbbbbbbbaaaabbbbba + bbbbbbbbbbbbbaaabbbaaaaaaaabbaaaaabbaabbbaaaaaabbbbaaaaaaaaaaaaaabbbbbbbbbbaabbaaabbbbbbba + bbbbbbbbbbbbbaaabbbbbbbbaaabbaaaaaaaaabbbaaaaaaabbbbaabbbbbbbbbaaabbbbbbbbaaaabaabbbbbbbaa + bbbbbbbbbbabbbaabbbbaaaaaabbbabbbbbbabbbbaaaaaabbbbbbbbbbbbbbbbaaabbbbbaaaaaabbaabbbbbbbbb + babbbaaaaaaaabaabbbaabbbbbbbbbabbbaaabbbabaabbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbabbaaabbbbbbbb + babbbaaaaaaabbaabbbbbbaabbbbbbabbbabbbbbababbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbaaabbbbbbbb + babaaaaaaaaabbaabbbbbbbbbbbbbbabbbbbbbbbaaaabbbbaabbbbbbbbbaabbbbbbbbbbbbbbbbbbaaabbbbbbba + bbbbaabbabbbbbbbabbbbbbbbbbbbbaabbbbbbbbaaaaabbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbba + bbbbbbbbbbbabbbbabbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbba + bbbbbabbaaaaabbbaabbbbbbbbbbbbbaabbbabbabaabbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbaaaabbbabbbba + bbbaaaaaaaaaabbbaaabbbbaabbbbbbbabbabbbbaaaaaabbaabaaaaaaaaaaaaaaaabbbaaaabbbbaaabbbbbbbba + bbbaaabaaaaaabbbbabbbbaabbabbbbbabaabbbbaaaaaaaaaabaaaabaaaaabbaaaabbbabbbbbbbbaabbbbbbbba + bbbaabbbbbaaaabbbbbbbbaabbaabbaaabbaabbaaaaaaabbaaabbbbabbbbbaaaaaabbbbbbabbbbaaabbbbbbbba + bbbbbbbbbbbbaabbbbbbbbabbbaaaaaaabbaabbaaaaabbbbaaabbbbbbbbbbaabbbbbbbbbbabbbaaaabbbbbbbba + bbbbbbbbbbaaaaaaabbbbaabbbbbaaaabbaaabbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbbbba + aabaaaaaaaaaaaaaabbbaaabbbbbbbabbbaabbbaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbba + aabbaaabbbaaaaaabbbbaaaabbbbbbbbaaabbbbaabbbbbbbbbbbbbbbaabbabbbbbbaaabbbbbaaabaabbbbbbbbb + abbbbabbbaaaaaabbbbbaabaaaaaaabaaaabbbaabbbbbbbbbbbbaaaaaaaaabbbbabaaababbaaaaaaabbbbbbbbb + abbbaabbbbaaaabbbbabbbbbabbbbbbaabbbbbaaabbbbbbbbbbbaaaaaaaaabbbbaaaaabbbbaaabaaabbbbbbbba + abbbabbbbbaaabbbbbbabbbbbaaaaaaabbbbbbaaaaaaaaaaabbbaabbbbbbbbbbbbbbaabbabbbbbaaaabbbbbbba + abbbabbbbbaaababaabaabbbbabaaaabbbbbbbaaaaaaabaabbbbbbbbbbbbbbbbbbbbaabbbbbbbbbaaabbbbbbba + abbbabbbbbbaabbbaabbaabbbbbbbaabbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaabbbbbbbb + abbbbbbbbbaababbaabbaabbbbbaaaaabbbbbababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbabbba + abbbbbbaaaaababbaabbaabbbbaaaaaabbbbaabbbbbbbbbbbbbbbbbbbbaaaabbbbbaabaaaaaaaaaaabbbbaabba + abbbaaaaaaabbabbaabbbaabbbbaaaaabbbbaabbababbbbaabbbbbbbbbaaaaabbbbaaaaaaaaabaaaaabbbaabba + abbaaaaaaaabbabbaabbbbabbbbbbbbbbbbbaabbaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaabbaaaabbbbbbba + aabaaaaaabbbaabbaabbbbaabbbbbbbbbbaaaabbbaaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbaabbbbbbba + aaaaaaaabbbaabbbaabbbbbaabbbbbbbbbaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbabbbbbbbba + baaaaabbbbbaabbbaaabbbbbabbbbbbbbaaaaabbbbbbaaabbbbbabaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + aaaaabbbbbbaabbbaaabbbbbaaabaabbbbaaaabbbbbbbaaaabbaabaaaaabbbbbbbbbbbbbbbbbbaaaaabbbbbbba + aaaabbbbbbbaabbbaaaabbbbbaaaaabbbaaaaabbbbabbaaaaaaaabaababbbbbbbbbbbbbabaaaaaaaaabbbbbbba + aaabbbbbbbbaabbbbaaaabbbbbaaaabbbaaaaabbbbbabbbaaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbbbbba + aaabbbbbbbbaabbbbaaaaabbbbbaaabbaaaaaabbbbbababbaaaabbbbbbbbbbaaabbbbbbbaabbbbbaabbbbbbbba + abbbbbbbabbaabbbbaaaaaabbbbbbbbaaaaaaabbbbbaaabbbaaaabbbbbbaaaaaabbbbbbbbabbbbaaabbbbbbbba + bbbbbbbbabbabbbbbaaaaaaabbbbbaaaaaaaaabbbbbaaaabbbaaaaaaabaaaaaaaaaabbbbbbbbbbaaaabbbbbbba + bbbbbbbbabbbbbbbbaaaaaaaabbbbaaaaaaaaabbbbbbabbbbbbaaaaaaabbbbbbbaaabbbbbbbbaaaaaabbbbaaaa + bbbbbbbbabbbbbbbbaaaaaaaaaaaaaaaaaaaaabbbbbbabbbbbbbaaaaabbbbbbbbbaabbbbbbbbaaaaabbbbbaaab`, + map `abbbbababbbbbbbbbbbaabbbbbbbbbaabbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbabbbaabbbbbbbba + abbbbbbbbbabbbbbbbbaaabbbbbbababbbbbbbbbbbbbbaabbbaaaabbbbbaaaabbaaaaaaabbaaabbaabbbbbbbaa + abbbbbbbbbbbbbbbbbbaabbbbbbbababbbbaaabbbbbbbabbbbabbbbbbbaaaaaaaaaaaaaabbaabbaaabbbbbbbab + abbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbabbbbbbbaabbbabbbbbbbbaabbbbbbbbbbbbbbbbbaaaabbbbbbba + abbbbbbabbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaabbaababbbbbbbbaaabbbbbbbbaaabbaaabbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaaaabbbbbbbbbbbbbbbbaaaaaabbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaaaabaaabbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbaabbbbbaabbbbbbbbbba + abbbbbbbbbbbbbbbbbbbbbbbbabbbbababbbaabbbbbbbbbbabbbbbbbbbbbbbbbabbbbbaabbbbbbbbbbbbbbbbaa + aabbbbbbbbbbbbbbbbbbbbbbbabbbbaaabbbaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbabbbaa + aaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbabbbaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbaabbbbabaabbbaa + baaaaaaabbbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbaaabbaabbbbbbabbaaaa + bbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbaabbbbbbbbbabaa + aabbaaaaaaabbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbaabbbbbbbbbbbaa + aaabbbaaaaaabbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbab + aaabbbbaaaaabbbbbbbaaaaababbbbbbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbaaab + aaaaabbaaaaaabbbbbbbaaabbabbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbaaaaab + aaaaabbbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbaabbbbbbbbbbbbbbbbbaabbbbbbaaaaaab + abaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbbbbbaabbaaaaaaaabbbbbaabbbbbbbbbbbbbbbbbabbbbbbbaaaaaab + abaaaabbbbaaaaabbbbbbabbbbbbbbbbbbbbbbbaaabbbaaaaaaabbbbaabbbbbbbbbbbbbbaaaabbbbbbbaabbbaa + abaaaaabbbbaaaabbbbbbbbbbbbbbbbbabbbbbaaaaabbbaaaaaabbbbbaaaaaabaabbbbaaaaaaabbbbbbbbbbbab + abbaaaabbbbaaaabbbbbbbbbbbabbbbbbbbbbbaaaaaabbaaaaaabbbbbbaaaaaaaabbbbaaaaaaaabbbbbbbbbbab + abbaaaaabbbaaaabbbbbbbbbbbabbbbbbbbbbaaaaaaabbbaaaaaabbbbbbbbbbbabbbbbbaaaaaaabbbbbbbbbbab + abbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbaaaaaabbbbbbbbaabbbbbbabbaaaaaaabbbbbbbbbab + abbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbaaaaabbbbbbbbaabbbbbaaabbaaaaaabbbbbbbbbab + aaaaaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbaaaaabbbbbbbbababbbbaaabbaaaaaabbbbbbbbbab + babbaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbaaaabaaaaabbbaaaaabbbbbbbbbaabbbbaabbaaaaaaabbbbbbbbab + babbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbaaaaabbbbbbbbbaaabbbabbbbaaaaaabbbbbbbbab + bbbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaabbbaaaaabbbbbbbbbaaabbbabbbbaaaaaabbbbbbbbab + bbbbbaaaabbbbaaaaabbaaaaabbbbbabbbbbabbabbaaaabbbaaaaabbbbbbbaaaaaabaabbbbaaaaaabbbbbbbbaa + abbbbaaaabbbbaaaabbbbbbabbbbbbaabbbbaaaabbbaaabbbaaaaabbbbbbaaaaaaabaabbbbaaaaaabbbbbbbbaa + bbbbbaaaabbbbaaaabbbbbbabbbbbbbbbbbbbbbbbbaaaaabbaaaaabbbbbbbaaaaaabaabbbbaaaaaabbbbbbbbaa + bbbbbaaaabbbbaaaabbbbbbabbbbbbbbbbaabbbbbaaabbbbbaaaaabbbbbbbaaaaaabaabbbbaaaaaabbbbbbbbaa + abbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbaabbbbbaabbbbbbaaaaabbbbbbbbbaaaabaabbbbaaaaaabbbbbbbbab + abbbbbaaabbbbaaaabbbbbbbbbbbbbbbbbaabbbbaabbbabbbaaaaabbbbbbbbbaaaabaabbbbaaaaaabbbbbbbbab + bbbbbbbaabbbbaaaabbbbaaaaaaaabbbbbaabbbaaabbbbbbbaaaaabbbbbbbbbaaaabbabbbbaaaaaabbbbbbbbab + bbbbbbaaabbbbaaaabbbbbaaaaabbbbbbbaabbaaaabbbbbbbaaaaabbbbbbbbbaaaaababbbbaaaaaabbbbbbbbab + bbbbbbaaabbbbaaaabbbbbaabaaaabbbbaaabaaaabbbbbbbbaaaaabbbbbbbbbaaaabbabbbbaaaaaabbbbbbbbab + abbbbbaaabbbbaaaabbbbbbbbbbbabbbbaaaaaaabbabaabbbaaaaabbbbbbbbbaaaabaabbbbaaaaaabbbbbbbbab + bbbbbbaaabbbbaaaabbbbbbbbbbbabbbbaaaaabbbbaaabbbbaaaaabbbbbbbbbaaaabaabbbbaaaaaabbbbbbbaab + abbbbaaaabbbbaaaabbbbbbbbbbbbbbbbaaaaabbbbbaabbbbaaaaabbbbbaaaabbbabaabbbbaaaaaabbbbabbaab + abbbbbbaabbbbaaaabbbbbbbbbabbbbbaaaaabbbbbbaabbbbaaaaabbbbbbbbbabbbbaabbbaaaaaaabbbbbbbaab + abbbbbbaabbbbaaaabbbbbbbbbabbbbbaaaaabbbbbaaabbbbbaaaabbbbbbbbbbbbbbaabbbaaaaaaabbbbbbbaab + abbbbbaaabbbaaaaabbbbbbbbbabbbbaaaaaabbbbbaabbbbbbaaaabbbbbbbbbbbbbbaabbbaaaaaaabbbbbbbaab + abbbbbaabbbbaaaaabbbbbbbbbbbbbbaaaaabbbbbbaabbbbbbbaaabbbbbbbbbbbbbbaabbbaaaaaaabbbbbbbaab + abbbbbaabbbbaaaaabbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbbaaabbbbbbbbbbbbbbaaabbaaaaaaabbbbbbbaab + abbbabaabbbbaaaaabbbbbbbbbbbbbabaaabbbbbbbbaabbbbbbbaaabbbbbbbbbbbbbaaabbaaaaaaabbbbbbbaab + abbbbaaabbbbaaaaabbbbbbbbbbbbbbaaaaabbbbbbbaabbbbbbbbaabbbbbbbbbbbbbaaabbaaaaaaabbbaabbaab + abbbbaaabbbbaaaaabbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbbbabbbbbbbbbbbbbaaabbaaaaaaabbbaabbaab + abbbbaaabbbbaaaaabbbbbbbbabbbbbbaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbaabbbaaaaaaabbbabbbaab + abbbbaaabbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbaaaabbbaaabbbabbbbbbbbbbbbbbbbbbaaaaaaabbbabbbaab + abbbbaaabbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbaaaabbbbaaaaaaaabbbbbbbbbbbbbbbbaaaaaaabbbabbbaab + abbbbaaabbbbaaaaabbbbbbbbbbbbbbbbaaaabbbbaaaabbbbaaaaaabbbbbbbbbbbbbaabbbaaaaaaabbbbbbbaab + abaaaaaabbbbaaaaabbbbbbbbbbbbbbbbaaaabbbaaaaaabbbaaaaabbbaaabbbbbbbbaabbbaaaaaaabbbbbbbaab + abaaaaaabbbbaaaaabbbbbbabbbbbbbbbaaaabbbaaaaaabbbaaaaabbbbbbbbbbbbbbaaaaaaaabaaabbbbbbbaab + abbaaaaabbbbaaaaabbbbbbabbbbbbbbbaaaabbbaaaaaabbbaaaaabbbaabbbbbbbbbaaaabaaaaaaabbbbbbaaab + abbbbbbabbbbaaaaabbbbbbbbbbbbbbbbaaaabbbaaaaaabbbaaaaabbbbbbbbbbbbbaaabbbbaaaaabbbbaaaaaab + bbbbbbbabbbbaaaaabbbbbbbbbbbbbbbbaaabbbaaaaaaabbbaaaaabbbbbbbbbbbbbbabbbbbaaaaaaaaaaaaaaab + bbbbbbbabbbbaaaaabbbbbbbbaabbbbbbaaabbbaaaaaaaabbaaaaabbbbbbbbbbbbbaabaaaaaaaabbbbbbbbbbbb + bbbbaaaabbbbaaaaabbbbbbbbaaabbbbbaaabbbaaaaaaaabbbaaabbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbbaaaa + bbbbbaaabbbbaaaaabbbbbbbbaaabbbbbaaabbaaaaaaaaabbbabbbabbaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbaabbaaaaaabaabbbaaaaaaaaaaabbbbbbbbbbbbbaaabbbbbbbbbbbbb + bbbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbabbaaaabbbaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbaaaaaabbbbbbbbbbabbbbbbbabbabaabbbaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbaaaaaaaaaaaaaabbbbbbabbbaaababaaaabaabaaabbaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaabaaaabbbbbaabbaaaabbbbbbbbaaaaaaaaaaaaabbbbbbbbbbbbbba + aaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaabbaaaabbbbbaabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + aaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaaabbaaaabbbbbaabbaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbb + bbbbbbbbbaaaaaaaaaaaaabbbaabbbbbbbbbbaaabbbbbaaabbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaabbbbbaaabbaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbb + baaaaaaaabbbbbaaaaaaaaaaaaaaaaabbbbbbaaabbbbbaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabba + aaaaaaabbbbbbbbbbbbabbbbbbbbbbbbbbbbbaaabbbbbbaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbaaabbbbbbaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aababaabbbbbbbabbbbbbbbbbbbbbbbbaaabbaaabbaabbaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + abbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbaaaaaaabbaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaaabbbbbbbbbbbbbbbbbaaaabbbbbbabbbbbbbbbbbbba + abbbbaaaabbbaaaaaaaaaaaaabbbaaabbbaaaabbbaabbaabbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbaabbaabbbbb + abbbaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbbbabaabbb + aaabaaaabbbbbaaaaaaaaaaaaaabaaaabaaaaabbaaabbaaaabbbbbabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaba + aabbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbaabbbbbbbbbbabbaaaabaaabbbbbbbbbbbbbaabbbbbbbbbbbaaaba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbaaabbbaabbbbbbbbbbbbbbabbbbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa + abbbbaabbbbbbaaaaabbbabbbbbaabbbbbbbbbbabbaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaaaaabbbbaaaaaaaaaaaaaaaaaaaabbaabaaaaaaaaaaabbaaaaaaaaaaaaaaaabbbbbbbbbbbbbabbbbbbbbbb + aaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb + abaaaaaaabbbbaabaabaaaaaaaabaaaaaaaaaaaaabbaaaabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaba + abbabbaabaabaaababbbbbbbbbbbbbbaaaaaabbbbbbaaaabbbbbaaaabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`, + map `abbbbbbaabbbbbbbbbbbbaaaabbbbaabbbbbbabbbbbbbbabbaaabbabbbbbbbbbbbbaaabbbbbabbbaabbbbbbbba + abbbbbbaabbbbbbbabbabbbbbbbbaaaabbbbbbbbbbbbbbabbbaabbbbbbbbbaabbaaaaaabbbbbbbaaabbbbbbbba + abbbbabaabbbbbbbbababbbbbbbbabaabbbbbbbbbbbbbbbbbaaaabbbbabbbaaaaaaaaaabbbbbbaaaabbbabbbab + abbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabaabbbbbbbbaaaabbbbabbbbbbbbbabbbbbbbbaaaabbbbbbbba + abbbbaaaabbbbbbbbbbbbbaaaabbbbbbbbbbbbbbaaaabbbbbbaaaabbbbbbbbbbabbbbbbbbbbbbbaaaaabbbbbba + abbbbaaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbaaabbbbbaabbbbbbabbbbbaaaabbbbbbbbaabaaaabbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbaaaaaabbbbbbbbbba + abbbbbbbbbbbbbaabbbbbbbbbbbbbbbbabbbbbbbbbbabbbaabbaaaaaabbbbbbbbbbbbbbbaabbaaabbbbbbbbbba + abbbbbbbbbbbbbaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbabbbbaaabbbbbbbbaabbbaabbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbbaabbbbbbbbbbbbabbbbbbbbbbbabbbbbbbbbbbaaaaaabbbaabbbbbbbbbbbbbbbbaa + abbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaabbbabbbbbbbabbbbaa + aaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaaabbabbbbbababbbbaa + abaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbbbbbbbbbbabbbbbaaabbaabbbbbbabaaaaa + bbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbabbbbbaaabbaabbbbbbbbaaaba + bbbbaaaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbaabbbaabbbbbbbbbaaaa + aabbbaaaaaaabbbbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbbbaaa + aaabbbaaaaaabbbbbbbbaaaabaabbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbaaabbbbbbbaabbbbbbbbbaaaab + aaaabbbaaaaabbbbbbbbaaabbabbbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbabbbbbbabbbbbbbabbbbbbbbaaaaaab + aaaaabbbaaaaabbbbbbbbabbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaabbbbbbaaaaaab + abaaabbbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbabbbaaaaaaabbbbbbbbabbabbbbbbbbbbbbbbbbbbbbbaaaaabb + abaaaabbbaaaaaabbbbbbabbbbbbbbbbbbbbbbbaaabbaaaaaaabbbbbbbabbaabbbbbbbbbaaabbbbbbbbaaaaaaa + abaaaaabbbaaaaabbbbbbbbbbbbabbbbabbbbbaaaabbbaaaaaabbbbbbbabbaaaabbbbbaaaaaabbbbbbbbbbbaba + abaaaaabbbaaaaabbbbbbbbbbbaabbbbbbbbbbaaaaabbbaaaaaabbbbbbaaaaaaaabbbbaaaaaaabbbbbbbbbbaaa + abbaaaabbbbaaaabbbbbbbbbbbaabbbbbbbbbaaaaaaabbaaaaaabbbbbbaaaabaabbbbbbaaaaaaabbbbbbbbbaaa + abbbaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbaaaaaabbbbbbbaabaabbbaabaaaaaaabbbbbbbbbaab + abbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaabbbaaaaaabbbbbbbaabaabbbaabbaaaaaaabbbbbbbbaab + aaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbaaaaabbbbbbbabbaabbbaabbbaaaaaabbbbbbbbaab + baaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbaaabaaaaabbbaaaaaabbbbbbbbbaabbbaabbbaaaaaabbbbbbbbaab + bbbbaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaaabbbbbbbbbaabbbaabbbaaaaaabbbbbbbbabb + bbabaaaaabbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaaabbbbbbbbbaaabbaabbbaaaaaaabbbbbbbabb + bbbbaaaaabbbaaaabbbbbbbbbbbbbbbaabbbabaaaaaaabbbaaaaaabbbbbbbbbaaabbaabbbbaaaaaabbbbbbbaba + abbbbaaaabbbaaaaabbbbbaabbbbbaaaabbbaaaabbbaabbbaaaaaabbbbbbbbbaaabbaabbbbaaaaaabbbbbbbabb + abbbbaaaabbbaaaaabbbbbaabbbbbbbbbbbbbbbbbaaaaabbaaaaaabbbbbbbbbaaabbaabbbbaaaaaabbbbbbbabb + bbbbaaaaabbbaaaaabbbbbbabbbbbbbbbbabbbbbbaaaaabbaaaaaabbbbbbbbbaaabbaabbbbaaaaaabbbbbbbaba + abbbbaaaabbbaaaaabbbbbbbbbbbbbbbbbabbbbbbaabbbbbaaaaaabbbbbbbbbaabbbaabbbbaaaaaabbbbbbbaba + abbbbaaaabbbaaaaabbbbbbbbbbbbbbbbaaabbbbaabbbbbbaaaaaabbbbbbbbbaaabbaabbbbaaaaaabbbbbbbaba + bbbbbbaaabbbaaaabbbbbbabaababbbbbbaabbbaaabbbbbbaaaaaabbbaabaabaaabababbbbaaaaaabbbbbbbaba + bbbbbbaaabbbaaaabbbbbbbbbaaabbbbbbaabbaaabbbbbbbaaaaaabbbbbbbbbbaaabbabbbbaaaaaabbbbbbbaba + bbbbbaaaabbbaaaabbbbbabbbbbaabbbbbaabaaaabbbbbbbaaaaaabbbbbbbabaaaabaabbbbaaaaaabbbbbbbaba + abbbbaaaabbbaaaabbbbbbbbbbbaabbbbaaaaaabbabbaabbaaaaaabbbbbbbbbaaabbaabbbbaaaaaabbbbbbbaba + bbbbbbaaabbbaaaabbbbbbbbbbbaabbbaaaaaabbbaaabbbbaaaaaabbbbbbbbbaaabbaabbbbaaaaaabbbbbbbaba + abbbbaaaabbbaaaabbbbbbbbbbbbbbbbaaaaaabbbaaabbbbaaaaaabbbbbbbbbbbabaaabbbaaaaaaabbbbbbbabb + abbbbbaaabbbaaaabbbbbbbbbbbbbbbaaaaaabbbbbaabbbbaaaaaabbbbbbabbabbbaaabbbaaaaaaabbbabbbabb + abbbbbaabbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbaabbbbaaaaaabbbbbaabbbbbbaaabbbaaaaaaabbbbbbbabb + abbbbbaabbbbaaaabbbbbbbbbbbbbbbaaaaabbbbbbaabbbbbaaaaabbbbaaabbbbbbaaabbaaaaaaaabbbbbbbabb + abbbbbaabbbbaaaabbbbbbbbbbbbbbbaaaabbbbbbbaabbbbbaaaaabbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbabb + abbbbbaabbbaaaaabbbbbbbbbbbbbbbaaaabbbbbbaaabbbbbaaaaabbbabbbbbbbbbaaabbbaaaaaaabbbbbbbabb + abbbaaaabbbaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbabbbbbbaaaabbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbabb + abbbbaaabbbaaaaabbbbbbbbbbbbbbbaaaabbbbbbbbaabbbbbbaaabbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbabb + abbbbaaabbbaaaaabbbbbbbbbaabbbbaaaabbbbbbaaaabbbbbbbaabbbbbbbbbbbbbaaabbbaaaaaaabbabbbaabb + abbbbaaabbbaaaaabbbbbbbbbaabbbbaaaabbbbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaabbbaaaaaaabbaabbaabb + abbbbaaabbbaaaaabbbbbbbbbbbbbbbaaaaabbbbbaaaabbbbbbbbbaaabbbbbbbbbbbaabbbaaaaaaabbabbbaabb + abbbbaaabbbaaaaabbbbbbbbbabbbbbbaaaaabbbaaaaabbbaabbaaaaaabbbbbbbbbbbbbbbaaaaaaabbabbbaabb + abbbbaaabbbaaaaabbbbbbbbbabbbbbbaaaaabbbaaaaabbbaaaaaabbaabbbabbbbbbbbbbbaaaaaaabbbbbbaabb + abaaaaaabbbaaaaabbbbbbbbbbbbbbabaaaabbbbaaaaaabbaaaaaabbaaaabaaabbbbaabbbaaaaaaabbbbbbaabb + abaaaaaabbbaaaaabbbbbbbbbbbbbaaaaaaabbbbaaaaaabbaaaaaabbaaabbbbbbbbbaaabaaaaaaaabbbbbbaabb + abbaaaaabbbaaaaabbbbbbababbbbbbaaaaabbbbaaaaaabbbaaaabbbaaaabbabbbbaaaaaabaaaaabbbbbbbaabb + abbbbbbabbbaaaaabbbbbbbbbbbbbbbaaaaabbbaaaaaaabbbaaaaabbaaabbbbbbbbaaaaabbaaaabbbbbaaaaaab + bbbbbbbabbbaaaaabbbbbbbbbbbbbbbbaaaabbbaaaaaaabbbaaaaabbbbbbbbbbbbbaabbbbbaaaaaaaaaaaaaabb + bbbbbbbabbbaaaaabbbbbbbbbbabbbbbaaaabbbaaaaaaaabbaaaaabbbbbbbbbbbbbabbbbbbaaaabbaaaaabbbab + bbbbaaaabbbaaaaabbbbbbbbbaaabbbbaaaabbbaaaaaaaabbaaaabbbbbbbbbabbaaaaaaaabbbbbbbbbbbbbaaaa + bbbbaaaabbbaaaaabbbbbbbbbbaaabbbaaaabbbaaabbaaabbaabbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbb + abbbbbaabbbaaaaabbbbbbbbbbbabbbbbaaabbaaaaabaaabbbbbaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbaabbaaaabbbaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbaaaaabbbaabbbbbbabbbbbbabbbabaabbbaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbaaaaaaaaaaaabbbbbbbbbbaabbbbaaabbbababbbbaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaabbbbbaaaaaaaaaaaaaaabbaababbbbaaaabaaaaabbabbbaaaaaaaaaaaaaabbbbbbbbbbbbbba + aaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaabbaaaabbbbaaaabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + aaaaaabbbbbbbbbbbaaaaaaaaaaaaaaaaaabbaaaabbbbbaaabbabbbbbbbbbbbbbbbbbbbbbbaabbbaabbbbbbbbb + bbbbbbbbbbbbaaaaaaaaaaaaaaaaaabbaabbbaaabbbbbbaaabbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbaaaaaaaaaaaaaaabbbbbbbbbbbabbbaaabbbbbaaabbaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbaaaaaaaaabaaaaaaaaaaaabbaabbbbbbbbbaaabbbbbaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb + aaaaaaaabbbbbbbbbbaabbbbbbbbbbbbbbbbaaabbbbbbaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaabbbbbbabbbbbbbbbbbbbbbbbbaabaaabbbbbbaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaabbbbbbbabbbbbbbbbbbbbbaaaaaabaaabbaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aabbaabbbbbbbbbbbbbbbbbbbbbbbbbbbabbbaabbbbbbaaabbaabbbbbbbbbbbaaaaabaaaaaaaaaaaaaaaaaaaaa + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbaabbbbbbbbbbbbabbbbbbbbabbbaaaaabbbbbbbbbbbba + abbbbbaaaabbaaaaaaaaaaaabbbbbbabbbbbbabbabbbbaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbaabbabbbbbb + abbbaaabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabbbbbbbbbbbaaaaabaaaabbbbbbbbbbbbbbbaabbbbb + aaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaabbabbbaaaaabbbbbbabbabbbbbaaaabbbbbbbbbbbbbbbbbbaabbb + aaabbbbbbbbbbabbbbbbbbaaaabbbbbbbbbbabbbbbbbbbbbabaaaaabaabbbbbbbbbbbbbbbabbbbbbbbbbbaaaaa + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbaaabbaabbbbbbbbbbbbbbaabbbbbbbbbbbbbaba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaba + abbbbaabbbbbbaaaabaababbbbbaabbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaaaabbbbbaaaaaaaaaaaaaaaaaaaabbbbbaaaaaaaaaaabbaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbb + aaaaaaaabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbb + abaabaaaabbbaaabaaabaaaaaabaaaaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb + abbabaababbbaabbababbbbbbbbbbbbaaaaaabbabbbabaaabbbbaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`, + map `abbbbbbabbbbbbbbabbbaaaaabbbaabbbbbbbbbbbbbbbbbbbaabbbbbbabbbbbbbbbaaabbbbaabbbbbbbaabbbba + abbbbbaaabbbbbbbabbbbbbabbbbaabbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbaaabbbbaabbbbbbbaabbbba + abbbbbaaabbbbbbbababbbbbbbbbaaaabbbbbabbbbbbbbbbbaaabbbbbbaabbbbbabaaaaabbbabaabbbbbabbbaa + abbbbaaaabbbbbbbabbbbbbbbbbbbbabbbbbaaaaaabbbabbbbbaabbbbbaabbbbbaaaabbbbbbbbaaaabbabbbbbb + abbbbaaaabbbbbbbabbbbbbabbbbbbbbbbbbaaaaaaabbbbbbbaaabbbaaaaabbbaabbbbbbbbbbbaaaaaabbbbbba + abbbbbbabbbbbbbbaabbbbaaaabbbbbbbbbbbbbaaabaabbaaabbbbbbbbbaabaaaaabbbbbbbbabaaaaabbbbbbba + abbbbbbbbbbbbbbbaabbaaabbbbbbbbbbbbbbbbbbbbaabbaaabaaaabbbbbbbbbbbbbbbbbbaaaaaaabbbbbbbbba + abbbbbbbbbbbbbbbbbbbaabbbbbbbbbbaaaabbbbbbbaabbaabbaaaaabbbbbbbbbbbbbbbbaabbaaabbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbabaaabbbbbabbbaabbbbbaabbbaaaabbbbbbbbaabbbaabbbbbbbbbbba + abbbbbbbbbbbbbabbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaabbaaabbbbabbbbbbbbbbbbba + abbbbbbbbbbbbbaabbbbbbbbaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbaabaabbbbaabbbabbbbbbbbbbbbaa + aaaaaabbbbbbbbaaabbbbbbbbaabbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbaaaabbabbbbbaaabbbbaa + aaaaaaabbbbbbbbbabbbbbbbbaabbaaabbbbaabbbbbbbbbbbbbabbbbbbbbbabbbbbbbaaaabbabbbbbbaaaaaaaa + bbaaaaaaabbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbaabbbbbbbabbbbbbbaaaabbabbbbbbabaaaaaa + bbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbabbbbbbbaaabbaabbbbbbbbabbaaa + aabbbaaaaaabbbbbbbbbabaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbaabbbbbbbabbbbbbbabbbbaaa + aaabbbaaaaabbbbbbbbbabaababbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbaaabbbbbbbabbbbbbaabaaaabb + aaaabbbaaaaabbbbbbbbaaabbabbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbbbbbbbaaabbbbbbabbbbbbaaabaaabb + aaaaabbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbbbbabbbbbbbbbbbbbbbbaaaaabbbbaaaaaaabb + aaaaabbbaaaaabbbbbbbabbbbbbbbbbbbbbbbbbabbaaaaaaabbbbbbabbbbbbbbbbbbbbbbbbabbbbbbabaaaaabb + abaaaabbbaaaaabbbbaaabbbbbbbbbbbbbbbbbaaabbbaaaaaaabbbbabbbbbbabbbbbbbbbbbabbbbbbbbaaababb + abaaaabbbbaaaabbbbabbbbbbaabbbbbabbbbbaaaabbaaaaaaabbbbabbbbbbbbbbbbbbaaaaaabbbbbbbaabbaaa + abaaaaabbbaaaaabbbbbbbbbbbabbbababbbbaaaaaabbaaaaaaabbbabbbbbbbabbbbbaaaaaaaabbbbbbbbbbaba + abbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbaaaaaabbbaaaaaabbbbbbbbbbbaabbbbbaaaaaaabbbbbbbbbbaba + abbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbaaaaaaaabbbaaaaaabbbbbbbbbbbbbbbabbaaaaaaabbbbbbbbbabb + abbbaaaabbbaaaabbbbbbbbaabbbbbbbbbbbaaaaaaaabbbaaaaaabbbbbbbbbbbbbbbaabbaaaaaabbbbbbbbbabb + abbaaaaabbbaaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaabbbaaaaaabbbbbbbbbbbbbbbaabbaaaaaaabbbbbbbbabb + aaaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaabbbbbbbbbbbbbbbaabbaaaaaaabbbbbbbbabb + bbbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaabbbbbbbbbbbbabbaabbbaaaaaabbbbbbbbabb + bbaaaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbaaaaaaaaabbbaaaaabbbbbbbbbbbbabbaabbbaaaaaabbbbbbbbabb + bbbbbaaabbbbaaaabbbbbabbbbaaaaaaabbbaaaaaaaaabbbaaaaaabbbbbbbbbbbbbbaabbbaaaaaabbbbbbbbabb + abbbbaaaabbbaaaabbbbaaaabbbaaaaaabbbababbbaaabbbaaaaaabbbbbabbbbbabaaabbbaaaaaabbbbbbbbabb + abbbaaaaabbbaaaabbbbbbaabbbaaaababbbabbbbbaaabbbaaaaaabbbbbbbbbbbabaaabbbaaaaaabbbbbbbbabb + bbbbaaaaabbbaaaabbbbbbbabbbbbbbbbaabbbbbbaaaaabbaaaaabbbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbaba + abbbbaaaabbbaaaabbbbbbbbbbbbbbbbbaabbbbbbaabbbbbaaaaabbbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbaba + abbbbaaaabbbaaaabbbbbbbbbabbbbbbbbabbbbbaaabbbbbaaaaabbbbbbbbbbbbbbaaabbbaaaaaaabbbbbbbaba + bbbbbaaaabbbaaaabbbbbbbbbbbabbbbbbabbbbaabbbabbbaaaaaabbbaaababbbabaaabbbaaaaaaabbbbbbbaba + bbbbbbaaabbbaaaabbbbbbbbbaaabbbbbbabbbaaabbbbbbbaaaaaabbaaabbbbbbabbaabbbaaaaaaabbbbbbbabb + bbbbbaaaabbbaaaabbbbbabbbbbaabbbbbabaaaaabbbbbbbaaaaaabbababbbbbaaababbbbaaaaaaabbbbbbbabb + abbbbaaaabbbaaaabbbbbbbabbbabbbbaaaaaaabbbbbaabbaaaaabbbbabbbbbbbabbabbbbaaaaaaabbbbbbbabb + bbbbbaaaabbbaaaabbbbbbbbbbbaabbaaaaaaabbbaaabbbbaaaaaabbbbbbbbbbbabaabbbbaaaaaaabbbbbbbabb + abbbbaaaabbbaaaabbbbbbaaaaaaabbaaaaaabbbbaaabbbbaaaaabbbbbbbbbbbbbbaabbbbaaaaaaabaabbbbabb + abbbbaaabbbbaaaabbbbbbbbbbbbbbbbaaaabbbbbbaabbbbaaaaabbbbbaabbbbbbbaabbbbaaaaaaabaaabbbabb + abbbbbaabbbbaaaabbbbbbbbbbbbbaaaaaaabbbbbbaabbbaaaaaabbbbbaabbbbbbbaabbbaaaaaaaabaaabbaabb + abbbbaaabbbaaaaabbbbbabbbbbbbbbaaaaabbbbbaaabbbaaaaaabbbbbabbbbbbbbaabbbaaaaaaaabaabbbaabb + abbbbaaabbbaaaaabbbbbabbbbbbbbbaaaabbbbbbaaabbbbaaaaabbbbabbabbbbbbaaabbaaaaaaaabaabbbaabb + abbbbaaabbbaaaaabbbbbabbbbbbbbbaaaabbbbbbaaabbbbaaaaabbbbbaabbbbbbbaaabbaaaaaaaabaabbbaabb + abbbaaabbbbaaaaabbbbbabbbbbbbbbaaabbbbbbbbaabbbaaaaaabbbbaaaabbbbbbaaabbaaaaaaaababbbbaabb + abbbbaabbbbaaaaabbbbbbbbbbbbbbbaaabbbbbbbbbabbbbaaaaaabbbbbbbbbbbbbaaabbaaaaaaabbababbaabb + abbbbaabbbbaaaaabbbbbbbbbbbbbbbaaabbbbbbbbaabbbbbbaaabbbbbbbbbbbbbbaaabbaaaaaaabbbbaabaabb + abbbbaabbbbaaaaabbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbaaabbbbbbbbbbbbbbaaabbaaaaaaabbaaaabaabb + abbbbaaabbbaaaaabbbbbbbbbbbbbbbaaaabbbbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbaaaaaaabbaaaabaabb + abbbbaaabbbaaaaabbbbbbbbbbbbbbbbaaaaabbbaaaaabbbbbbbaabbbbbbbbbbbbbbbbbbaaaaaaabbaaabbaabb + abbbbaaabbbaaaaabbbbbbbbbbbbbbbbaaaabbbbaaaaabbabbbaaabbbbbbbbbbbbbbbbbbaaaaaaabbaaabbaabb + abaaaaaabbbaaaaabbbbbbbbbbbbbbbaaaaabbbbaaaaaabaaaaaaabbaaaabaaabbbbaabbaaaaaaabbaabbbaaba + abaaaaaabbbaaaaabbbbbbaabbbbbbbaaaaabbbbaaaaaabbaaaaabbbaaaabbbabbbaaabbaaaaaaabbbbbbbaaba + abaaaaaabbbaaaaabbbbbbabbbbbbbaaaaaabbbaaaaaaabbaaaaabbbaaabbbbbbbbaaaaaaaabaaabbbbbbbaabb + abbbbbabbbbaaaaabbbbbbbbbbbbbbaaaaaabbbaaaaaaabbaaaaabbbaaabbabbbbaaaaaabbaaabbbbbbabaaabb + bbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbbaaabbbaaaaaaabbaaaaabbbbabbbbbbbbbabbbbbbaaaaaaaaaaaaaabb + bbbbbbbbbbbaaaaabbbbbbbbbabaabbbaaaabbbaaaaaaaabbaaaabbbbabbbbbbbbaabbbbbbaaabaaaaaaaaabbb + bbbbaaabbbbaaaaabbbbbbbbbaabbbbbaaabbbbaaaaaaaabbaaaabbbbbbbbaaaabbaaaaaaaaaabbbbbbbbbaaaa + bbbbaaaabbbaaaaabbbbbbbbbbaabbbbaaabbbbaaabaaaabbbbbbbbbaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbba + abbbbaabbbbaaaaabbbbbbbbbbaabbbbaaabbbaaaabaaaabbbbbbaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbbbbbaaaaabbbbbbbbbbbbbbbbababbbaaabbbaaaabbaaaaaaaaaaabbbbbaaaaaaaaaaaaaaaaaaabbbbb + bbbbbbbbbbbaaaaabbbabbbbbbbbbbbbbbabbbaaabbbaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbaaaaaaaaaaaabbbbbbabbaabbbbbaaabbbababbbaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaabbbbbaaaaaaaaaaaaaaabbbababbbbaaaabaaaaabbbbbbaaaaaaaaaaaaaaabbbbbbbbbbaaaa + aaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaabbaababbbbaaaabaabbbbbbbbbbaaabbbbbbbbbbbbbbbbbbbbbbbbb + aaaaabbbbbbbbbbbbaaaaaaaaaaaaaaaaabbbaaaabbbbaaaabbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbb + bbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaabbbaaaabbbbaaaabbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + bbbbbbbaaaaaaaaaaaaaababbbbbbbbbabbbbaaabbbbbaaaabaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbba + bbaaaaaaaabbaaaaaaaaababbbbbbbbbabbbbaaabbbbbaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb + aaaaaaaabbbbbabbbbaabbbbbbbbbbabbbabaaaabbbbbaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbaaabaaabbbbbbaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + abaaaaabbbbbbbabbbbbbbbbbbbbaaaaaaabaaabbaabbaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aabaaabbbbbbbbbbbbbbbbbbbbbababbbbbbaaabbbbbbaaabaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbaaaaaabbbbbbbbbbbbba + abbbbbaaabbbbaaaaaaaaaaaabbbbbbbbbbbbabbbbbbbaabbbbbbbbbbbaaaaaaaaabbbbbbbbbbbbbabbbbbbbbb + abbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbaaaaabaaabbbbbbbbbbbbbabaaabbbbb + aaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaaaaaabbbbbabbaabbbbbaaaabbbbbbbbbbbbbbbbbbabbbb + aaabbbbbbbbbbbbbbbbabbaaaabbbbbbbbbaabbbbbbbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaab + abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbaabbbbbbbbbbbbbaabbbbbbbbbbbbaaaba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaba + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaa + abbbbabbbbbbaaaaabbbaabbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba + abaaaaabbbbaaaaaaaaaaaaaaaaaaaabbbbbaaaaaaaaaaaaaaaaaabaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb + aaaaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbaabbbbbbbbbb + abaaaaaabbbbaababaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb + abbaaabaabbaaabbbbbbbbbbbbbbbaaaaaaaaaabbbbbbbaaabbbaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` +] + +setMap(levels[level]) + + +setInterval(function(){ + level = (level + 1) % levels.length + setMap(levels[level]) +}, 25); /* if the timing is messed up, then try and mess around with this */ + diff --git a/games/Robot_Party_Basic_Buildv1.js b/games/Robot_Party_Basic_Buildv1.js index 62f47340b7..d1a0f3f310 100644 --- a/games/Robot_Party_Basic_Buildv1.js +++ b/games/Robot_Party_Basic_Buildv1.js @@ -1,8 +1,8 @@ /* @title: Robot_Party | Basic Build v1 -@tags: ['puzzle-score'] -@addedOn: 2022-12-20 @author: Gam3rrXD +@tags: ['puzzle'] +@addedOn: 2022-12-20 */ function reset(){ min = 0; diff --git a/games/Rock_Paper_Scissors.js b/games/Rock_Paper_Scissors.js index 6bfc7838b4..7d9655164c 100644 --- a/games/Rock_Paper_Scissors.js +++ b/games/Rock_Paper_Scissors.js @@ -1,8 +1,8 @@ /* @title: Rock, Paper, Scissors! -@tags: ['classic'] -@addedOn: 2022-09-13 @author: ezefranca +@tags: ['retro'] +@addedOn: 2022-09-13 */ const player = "p"; diff --git a/games/Rolling_Obstacles.js b/games/Rolling_Obstacles.js index 6fe61632ac..b49688e652 100644 --- a/games/Rolling_Obstacles.js +++ b/games/Rolling_Obstacles.js @@ -1,8 +1,8 @@ /* @title: Rolling Obstacles -@tags: ['puzzle-score'] -@addedOn: 2023-02-02 @author: Ruhan Pandit +@tags: ['puzzle'] +@addedOn: 2023-02-02 */ const player = "p"; diff --git a/games/Runaway.js b/games/Runaway.js index df741dbabc..08fc4d75b4 100644 --- a/games/Runaway.js +++ b/games/Runaway.js @@ -1,10 +1,10 @@ /* - @title: Runaway @author: Theenash Muneeswaran @tags: [] @addedOn: 2024-07-08 + Welcome to Runaway! There is a ghost that wants to be friends with you, but it does not know it's own power as it has enough power to scare you to death. diff --git a/games/Rythym.js b/games/Rythym.js index ee3ef9bcca..218bdbf8be 100644 --- a/games/Rythym.js +++ b/games/Rythym.js @@ -1,8 +1,8 @@ /* -@tags: [''] +@title: Rythym +@author: Shadman +@tags: [] @addedOn: 2023-12-25 - @title: Rythym - @author: Shadman Use WASD to activate a pad right before an array lands on it! Letting one fall through loses you points, so does activating a pad and not having anything land on it (so no spamming all the keys) diff --git a/games/Rythym_Mania.js b/games/Rythym_Mania.js index b16d7026f8..084bdcd543 100644 --- a/games/Rythym_Mania.js +++ b/games/Rythym_Mania.js @@ -1,7 +1,7 @@ /* @title: Rythym-Mania @author: sosenteam -@tags: ["rythym-game","fun"] +@tags: ['action','music'] @addedOn: 2024-7-18 GOAL: HIT THE CORRECT KEY WHEN THE NOTES FALL ONTO THE BLOCKS diff --git a/games/SOS_Game.js b/games/SOS_Game.js index 9c2674621a..a8438cdf14 100644 --- a/games/SOS_Game.js +++ b/games/SOS_Game.js @@ -1,8 +1,8 @@ /* @title: SOS_Game +@author: Milán Leskó @tags: ['multiplayer'] @addedOn: 2022-11-13 -@author: Milán Leskó The aim of game is to make as many SOS words (in any direction) as you can. The game ends when there are no more empty space left. diff --git a/games/Score_it.js b/games/Score_it.js index a246f4a69e..32717a87d2 100644 --- a/games/Score_it.js +++ b/games/Score_it.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Score_it @author: asmahdi08 @tags: [] @addedOn: 2024-08-22 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Sewer_Flood.js b/games/Sewer_Flood.js index 6545af4008..9f413ce3f7 100644 --- a/games/Sewer_Flood.js +++ b/games/Sewer_Flood.js @@ -1,21 +1,27 @@ /* @title: Sewer_Flood @author: Eduardo -@tags: ["infinite"] +@tags: ['endless'] @addedOn: 2024-08-22 */ -const jumpHeight = 5 +let jumpHeight = 5 let score = 0 const playerIdle = "i" const playerJump = "j" const playerFall = "f" + const platform = "o" const water = "w" const background = "b" +const wrench = "r" +const hourglass = "h" +const leapPotion = "l" + setLegend( + // player [ playerIdle, bitmap` ................ ................ @@ -67,6 +73,59 @@ setLegend( .......00....... ......0..0...... ......0..0......` ], + // powerups + [ wrench, bitmap` +..0000.......... +...0220......... +0...0120........ +00.01120........ +0L011120........ +00011120........ +.0LLL1120....... +..0000L120...... +......0L120..... +.......0L120.... +........0L120... +.........0L120.. +..........0L120. +...........0L020 +............0L10 +.............00.` ], + [ hourglass, bitmap` +..DDDDDDDDDDDD.. +...D........D... +...D........D... +...D........D... +....D......D.... +....DFF..FFD.... +.....DFFFFD..... +......DFFD...... +......DFFD...... +.....D.FF.D..... +....D..FF..D.... +....D..FF..D.... +...D..FFFF..D... +...D.FFFFFF.D... +...DFFFFFFFFD... +..DDDDDDDDDDDD..` ], + [ leapPotion, bitmap` +......CCC3...... +.....222222..... +.....2CCC32..... +......244L...... +......244L...... +.....24444L..... +.....24444L..... +....24244D4L.... +...242444D44L... +...24244DD44L... +...244444444L... +...244DD4424L... +...14DD44424L... +....14444241.... +.....144441..... +......1111......` ], + // blocks [ platform, bitmap` ................ ....11111111.... @@ -120,6 +179,8 @@ L1L0LLLLLLLLL0LL LLLLLLLLLLLLLLLL` ], ) +const powerups = [wrench, hourglass, leapPotion] + setSolids([ playerIdle, platform ]) setSolids([ playerJump, platform ]) setSolids([ playerFall, platform ]) @@ -175,6 +236,10 @@ const levels = [ setMap(levels[level]) +function getRndInteger(min, max) { + return Math.floor(Math.random() * (max - min + 1) ) + min; +} + var allowFall = false var allowJump = true @@ -194,11 +259,22 @@ function getPlayer() { function replaceSprite(sprite) { let plr = getPlayer() - - let x = plr.x - let y = plr.y - plr.remove() - addSprite(x, y, sprite) + plr.type = sprite +} + +function getPowerups() { + let finalTable = [] + + for (i = 0; i < powerups.length; i++) { + finalTable = finalTable.concat(getAll(powerups[i])) + } + + return finalTable +} + +function spawnPowerup() { + const sprite = powerups[getRndInteger(0, powerups.length-1)] + addSprite(getRndInteger(2, width()-3), 0, sprite) } function gravity() { @@ -239,6 +315,19 @@ function gravity() { setTimeout(gravity, 100) } +function powerupGravity() { + if (level != 1) { + return + } + const powerupsInGame = getPowerups() + if (powerupsInGame != []) { + powerupsInGame.forEach(function(sprite) { + sprite.y += 1 + }) + } + setTimeout(powerupGravity, 300) +} + let upCount = 0 function jump() { @@ -279,24 +368,23 @@ function createPlatform(pos) { addSprite(3+x,0+y, platform) } -function getRndInteger(min, max) { - return Math.floor(Math.random() * (max - min + 1) ) + min; -} - -function randomPlatforms() { +function starterPlatforms() { for (let i = 2; i < height()-2; i+=4) { - let x = getRndInteger(0, 11) + let x = getRndInteger(2, width()-7) createPlatform([x, i]) } } let toFour = 2 +let toPowerup = 0 +var pipeSpeed = 1000 function updateFrame() { if (level != 1) { return } toFour += 1 + toPowerup += 1 let platforms = getAll(platform) platforms.forEach(function(sprite) { if (sprite.y != height()-2) { @@ -305,25 +393,41 @@ function updateFrame() { sprite.remove() } }) + if (toFour == 4) { - createPlatform([getRndInteger(0, 11), 0]) + createPlatform([getRndInteger(1, width()-5), 0]) toFour = 0 score += 1000 + pipeSpeed -= 25 + } + if (toPowerup == 10) { + toPowerup = 0 + spawnPowerup() } if (allowJump == true && allowFall == false) { allowFall = true } - setTimeout(updateFrame, 2500) + setTimeout(updateFrame, pipeSpeed) } -function checkDeath() { +function checks() { if (level != 1) { return } if (getPlayer().y == height()-1) { death() } - setTimeout(checkDeath, 100) + + const powerupsInGame = getPowerups() + if (powerupsInGame != []) { + powerupsInGame.forEach(function(sprite) { + if (sprite.y == height()-1) { + sprite.remove() + } + }) + } + + setTimeout(checks, 100) } function createWater() { @@ -333,7 +437,7 @@ function createWater() { } onInput("w", () => { - if (allowJump == true) { + if (level == 1 && allowJump == true) { jump() } }) @@ -341,8 +445,14 @@ onInput("w", () => { onInput("a", () => { if (level == 1) { getPlayer().x -=1 - } else if (level == 0 || level == 2) { + } else if (level == 0) { + level = null start() + } else if (level == 2) { + level = null + clearText() + addText("Restarting...", { x:4, y:8, color:color`3` }) + setTimeout(start, pipeSpeed+200) } }) @@ -352,21 +462,74 @@ onInput("d", () => { } }) -afterInput(fallInAir) +let current = null +let paused = false + +function pausePipes() { + if (paused == false) { + current = pipeSpeed + paused = true + pipeSpeed = 3000 + setTimeout(pausePipes, 1000) + } else if (paused == true) { + paused = false + pipeSpeed = current + } +} + +let boostingJump = false + +function jumpBoost() { + if (boostingJump == false) { + boostingJump = true + jumpHeight = 10 + setTimeout(jumpBoost, 2500) + } else if (boostingJump == true) { + boostingJump = false + jumpHeight = 5 + } +} + +onInput("j", () => { // catch and use powerup + if (level == 1) { + const tile = getTile(getPlayer().x, getPlayer().y) + tile.forEach(function(sprite) { + if (sprite.type === wrench) { + sprite.remove() + pausePipes() + } else if (sprite.type === hourglass) { + sprite.remove() + pipeSpeed += 200 + } else if (sprite.type === leapPotion) { + sprite.remove() + jumpBoost() + } + }) + } +}) + +afterInput(() => { + if (level == 1) { + fallInAir() + } +}) function start() { + pipeSpeed = 1000 score = 0 level = 1 setMap(levels[level]) toFour = 2 + toPowerup = 0 upCount = 0 clearText() setBackground(background) gravity() - randomPlatforms() + starterPlatforms() setTimeout(createWater, 2500) setTimeout(updateFrame, 2500) - setTimeout(checkDeath, 2500) + setTimeout(checks, 2500) + setTimeout(powerupGravity, 2500) } function death() { @@ -388,4 +551,4 @@ function menu() { addText("A to play", { x:5, y:7, color:color`7` }) } -menu() +menu() \ No newline at end of file diff --git a/games/Simon-Sees.js b/games/Simon-Sees.js index 645f465ad8..24a513aa1e 100644 --- a/games/Simon-Sees.js +++ b/games/Simon-Sees.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Simon Sees @author: Armand -@tags: ['infinite', 'simple'] +@tags: ['endless'] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ diff --git a/games/Simon-WASD_Edition.js b/games/Simon-WASD_Edition.js index dedce823e9..114b69747d 100644 --- a/games/Simon-WASD_Edition.js +++ b/games/Simon-WASD_Edition.js @@ -1,8 +1,8 @@ /* @title: Simon-WASD_Edition -@tags: ['classic'] -@addedOn: 2022-11-13 @author: Eli Coustan +@tags: ['retro'] +@addedOn: 2022-11-13 @github: edcous Instructions: diff --git a/games/Slimer.js b/games/Slimer.js index 349722b010..3ffa09d8bf 100644 --- a/games/Slimer.js +++ b/games/Slimer.js @@ -1,9 +1,9 @@ /* -Slimer @title: Slimer @author: DevCmb @tags: [] @addedOn: 2024-07-04 +Slimer */ const player = "p" diff --git a/games/Slippy-Slidey.js b/games/Slippy-Slidey.js new file mode 100644 index 0000000000..98bd490ec4 --- /dev/null +++ b/games/Slippy-Slidey.js @@ -0,0 +1,308 @@ +/* +@title: Slippy-Slidey +@author: B0redChungus +@tags: [] +@addedOn: 2024-09-17 +Inspired by "the slippery ice puzzles" in snowdin from Undertale by Toby Fox. +*/ + + +// Setting up Sprite variables +const the_player = "t" +const snow = "s" +const ice = "i" +const unpressed_tile = "u" +const pressed_tile = "p" +const button = "b" +const wall = "w" + + +// Setting up Sprite bitmaps +setLegend( + [ the_player, bitmap` +......0000...... +....000..000.... +..000......000.. +..0..........0.. +.00...0..0...00. +.0....0..0....0. +00....0..0....00 +0..............0 +0..0.00..00.0..0 +00.0000000000.00 +.0..00....00..0. +.00..........00. +..0..........0.. +..000......000.. +....000..000.... +......0000......`], + [ ice, bitmap` +2277777777777772 +2227777777777777 +7222777777777777 +7722277777755777 +7772227777775577 +7777222777777577 +7777722277777777 +7777772227777777 +7777777222777777 +7777777722277777 +7777777772227777 +7775777777222777 +7775577777722277 +7777557777772227 +7777777777777222 +2777777777777722`], + [ snow, bitmap` +2222222222272222 +2227272222222222 +2277722222222722 +7775772222222222 +2277727272222222 +2727222222227222 +2222722222222722 +2222222722227222 +2272222222277722 +2227227222775772 +2222227722277722 +2222277722227272 +2222775777222222 +2272777722222222 +2222227222222727 +2222222222222222`], + [ unpressed_tile, bitmap` +................ +................ +..33........33.. +..333......333.. +...333....333... +....333..333.... +.....333333..... +......3333...... +......3333...... +.....333333..... +....333..333.... +...333....333... +..333......333.. +..33........33.. +................ +................`], + [ pressed_tile, bitmap` +................ +................ +............44.. +............44.. +...........44... +..........444... +..........44.... +.........44..... +..44.....44..... +..444...44...... +...44...44...... +....44.44....... +.....4444....... +......4......... +................ +................`], + [ button, bitmap` +................ +................ +........LLLL.... +.....LLLL11LLL.. +...LLL1111111LL. +..LL11111111LLL. +.LL11111111LL1L. +.L1111111LLL11L. +.LLLL11LLL1111L. +.L11LLLL11111LL. +.L1111111111LL.. +.L11111111LLL... +.LLLL11LLLL..... +....LLLL........ +................ +................`], + [ wall, bitmap` +1LLLL1LLLLL1LLLL +1LLLL1LLLLL1LLLL +1LLLL1LLLLL1LLLL +1111111111111111 +LLLL1LLLLL1LLLL1 +LLLL1LLLLL1LLLL1 +LLLL1LLLLL1LLLL1 +1111111111111111 +1LLLL1LLLLL1LLLL +1LLLL1LLLLL1LLLL +1LLLL1LLLLL1LLLL +1111111111111111 +LLLL1LLLLL1LLLL1 +LLLL1LLLLL1LLLL1 +LLLL1LLLLL1LLLL1 +1111111111111111`] +); + + +// Setting up levels +const levels = [ + map` +wwwwwwwwww +w........w +w........w +w.t.uu...w +w...uu.b.w +w........w +w........w +wwwwwwwwww`, + map` +wwwwwwwwww +wtiiiiiiuw +wwwwwwwwiw +w......wiw +w......wiw +wwwwwwwwiw +wbiiiiiiuw +wwwwwwwwww`, + map` +wwwwwwwwww +w.w....w.w +wwtiiiiuww +w.i....i.w +w.i....i.w +wwuiiiibww +w.w....w.w +wwwwwwwwww`, + map` +wwwwwwwwww +wtiiiiiiuw +wwwwwwwwiw +wuwiuuiiuw +wuiiuuwiuw +wwwwwwwwiw +wbiiiiiiuw +wwwwwwwwww`, + map` +wwwwwwwwww +wtiiiiiuww +wwwwwwwiww +wuii.wuiuw +wu.wui.iiw +wwwwwwwiiw +wbiiiiiuuw +wwwwwwwwww`, +] + + +// Setting up first level +let level = 0 +setMap(levels[level]) +setBackground(snow) +setSolids([ the_player, wall ]); + + +// I don't feel like typing "getFirst()" every time. +let player = getFirst(the_player) +let level_button = getFirst(button) + + +// Movement +onInput("a", () => { + if (!check(ice, ice)) { + player.x -= 1 + player.speed = [-1, 0] + } +}) + +onInput("s", () => { + if (!check(ice, ice)) { + player.y += 1 + player.speed = [0, 1] + } +}) + +onInput("w", () => { + if (!check(ice, ice)) { + player.y -= 1 + player.speed = [0, -1] + } +}) + +onInput("d", () => { + if (!check(ice, ice)) { + player.x += 1 + player.speed = [1, 0] + } +}) + +// Input to reset level +onInput("j", () => { + const currentLevel = levels[level]; // get the original map of the level + setMap(currentLevel); + // When the level changes, so do the Sprites + player = getFirst(the_player) + level_button = getFirst(button) +}); + + +function check(old_type, new_type) { + // For each old_type + for (let old_tile of getAll(old_type)) { + // Checks if the player is on an old_tile + if (old_tile.x == player.x && old_tile.y == player.y) { + // Changes an old_tile to a new_type + old_tile.type = new_type + return true + } + } + return false +} + + +function slip(time_since_slip, slip_duration) { + // If the player is on an ice tile + if (check(ice, ice)) { + // Increases the time since the last slip by the amount of time it should take to slip + time_since_slip += slip_duration + // The player slides (but makes sure not to skip the first tile) + if (time_since_slip / slip_duration != 1) { + player.x += player.speed[0] + player.y += player.speed[1] + } + + // Call itself recursively, but the increased time since last slip should delay the + // function call by the slip duration. It is rather inconsistent. + setTimeout(() => slip(time_since_slip, slip_duration), time_since_slip) + + // Failures: + // setTimeout(function() { slip(time_since_slip, slip_duration); }, time_since_slip); + // setTimeout(slip(time_since_slip, slip_duration),time_since_slip); + + } else { + // Changes unpressed tiles to pressed ones, if they're stepped on by the player + check(pressed_tile, unpressed_tile) + check(unpressed_tile, pressed_tile) + + // If there are no unpressed tiles left, and the player has pushed the button: + if (!getFirst(unpressed_tile) && level_button.x == player.x && level_button.y == player.y) { + // Next level + level += 1 + if (level < levels.length) { + setMap(levels[level]) + } else { + addText("You finished all", options = {color: color`4`}) + addText("the levels!", options = {y: 2, color: color`3`}) + addText("Congrats!", options = {y: 4, color: color`4`}) + } + + // When the level changes, so do the Sprites + player = getFirst(the_player) + level_button = getFirst(button) + } + } +} + + +// Main game loop (check what's changed after player has moved) +afterInput(() => { + // Check if ice player is on ice, and slip and slide across it + slip(0, 200) +}) + diff --git a/games/Snake.js b/games/Snake.js index 85928a7c63..8d6f2c9921 100644 --- a/games/Snake.js +++ b/games/Snake.js @@ -1,8 +1,8 @@ /* @title: Snake +@author: Boyne @tags: ['endless'] @addedOn: 2022-11-10 -@author: Boyne */ const logo1 = "1"; diff --git a/games/Snake_4_2.js b/games/Snake_4_2.js index cc5e1465f7..80a8c65d6a 100644 --- a/games/Snake_4_2.js +++ b/games/Snake_4_2.js @@ -1,8 +1,8 @@ /* @title: Snake_4_2 +@author: Stephen King @tags: ['endless'] @addedOn: 2022-11-18 -@author: Stephen King */ //random function function rng(min, max) { diff --git a/games/Snake_Boxes.js b/games/Snake_Boxes.js index 5f606297de..ddf2990327 100644 --- a/games/Snake_Boxes.js +++ b/games/Snake_Boxes.js @@ -1,13 +1,13 @@ /* +@title: Snake_Boxes +@author: Aryavrat Mishra +@tags: ['retro'] +@addedOn: 2024-01-30 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started Goal: push the box adjacent to the goal to score points, push the goal if necessary, press l if you lose -@title: Snake_Boxes -@author: Aryavrat Mishra -@tags: ['classic'] -@addedOn: 2024-01-30 */ const body = "b" diff --git a/games/Solstice_game.js b/games/Solstice_game.js index 4f23de6311..d9c091016f 100644 --- a/games/Solstice_game.js +++ b/games/Solstice_game.js @@ -2,7 +2,7 @@ /* @title: Solstice_game @author: Stephanie Zhou -@tags: ['maze'] +@tags: ['puzzle'] @addedOn: 2024-07-022 */ diff --git a/games/Something-Fishy.js b/games/Something-Fishy.js new file mode 100644 index 0000000000..aff83c99bb --- /dev/null +++ b/games/Something-Fishy.js @@ -0,0 +1,1184 @@ +/* +@title: Something Fishy +@author: Suryaansh Chawla +@tags: ['sports'] +@addedOn: 2024-09-16 +*/ + +const one = "1"; +const two = "2"; +const three = "3"; + +const selector = "a"; + +const net = "n"; +const wall = "w"; +const fish1 = "r"; +const fish1_flip = "4"; +const fish2 = "y"; +const fish2_flip = "5"; +const fish3 = "h"; +const fish3_flip = "6"; +const water = "w"; +const water_turbulent = "q"; +const fish_background = "f"; +const seabed = "b"; +const greens = "p"; +const beach = "m"; +const sand = "v"; + +const thumbs_up = "u"; +const thumbs_down = "d"; + +const motion_ud = "t"; +const motion_all = "l"; +const motion_ud_selected = "e"; +const motion_all_selected = "k"; + +// Winner +const sparkle_tl= "s"; +const sparkle_tr = "z"; +const sparkle_bl = "x"; +const sparkle_br = "c"; +const rock = "o"; + +const winner_bg = "i"; + +const fisherman_head = "*"; +const fisherman_body = "|"; +const fisherman_legs = ","; +const fishing_rod = "g"; +const fishing_thread = "j"; + + +setLegend( + [ one, bitmap` +................ +................ +........00000... +........02220... +........02220... +........00220... +.........0220... +.........0220... +.........0220... +.........0220... +.........0220... +.........0220... +.........0220... +.........0000... +................ +................` ], + [ two, bitmap` +................ +................ +......0000000... +......0222220... +......0222220... +......0222220... +......0000220... +......0222220... +......0222220... +......0222220... +......0220000... +......0222220... +......0222220... +......0000000... +................ +................` ], + [ three, bitmap` +................ +................ +......0000000... +......0222220... +......0222220... +......0222220... +......0000220... +......0222220... +......0222220... +......0222220... +......0000220... +......0222220... +......0222220... +......0000000... +................ +................` ], + + [ selector, bitmap` +........000..... +.......00200.... +......0022200... +.....002222200.. +....00222222200. +...0022222222200 +...0222222222220 +...0000022200000 +.......02220.... +.......02220.... +.......02220.... +.......02220.... +.......02220.... +.......02220.... +.......02220.... +.......00000....`], + + + [ net, bitmap` +0.0.0.0.0.0.0.0. +.0.0.0.0.0.0.0.0 +0.............0. +.0.............0 +0.............0. +.0.............0 +0.............0. +.0.............0 +0.............0. +.0.............0 +0.............0. +.0.............0 +0.............0. +.0.............0 +0.0.0.0.0.0.0.0. +.0.0.0.0.0.0.0.0`], + [ wall, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [ water, bitmap` +7777777777777777 +7777777777777777 +7575757775757577 +7757577757575777 +7777777777777777 +7777777777777777 +7777575757777777 +7777757575777777 +7777777777777777 +7777777777777777 +7757575777575777 +7575757775757577 +7777777777777777 +7777775757777777 +7777757575777777 +7777777777777777`], + [ water_turbulent, bitmap` +7777777777777777 +7777777777777777 +7070707770707077 +7707077707070777 +7777777777777777 +7777777777777777 +7777070707777777 +7777707070777777 +7777777777777777 +7777777777777777 +7707070777070777 +7070707770707077 +7777777777777777 +7777770707777777 +7777707070777777 +7777777777777777`], + [ seabed, bitmap` +D............... +DD.............. +DD.............. +DD.............. +DDD............D +DDDD...........D +DDDDD.........DD +DDDDD........DDD +DDDDDD......DDDD +DDDDDDD....DDDDD +DDDDDDD....DDDDD +DDDDDDDD...DDDDD +DDDDDDDDD..DDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD`], + [ greens, bitmap` +D222222222222222 +DD22222222222222 +DD22222222222222 +DD22222222222222 +DDD222222222222D +DDDD22222222222D +DDDDD222222222DD +DDDDD22222222DDD +DDDDDD222222DDDD +DDDDDDD2222DDDDD +DDDDDDD2222DDDDD +DDDDDDDD222DDDDD +DDDDDDDDD22DDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD`], + [rock, bitmap` +................ +.222F22......... +.FFCFF2F66...... +FFFCCCFF6F6..... +LCCFCCFFFFF66... +LLCCCCFCCFF66... +LLLLLCCCFFFFFF.. +LLLL1CCCCCCFFF.. +L00L11CCCCCCFF.. +000L01C0LCLCLFF. +00L111100CLLLLF. +00L1111CC00CLL.. +00LL11111000LLL. +.00LL1111111LCC. +.000011LLL11LLCC +..000000LLL11LCC`], + [sand, bitmap` +2222222222222222 +2222F22222222222 +2FFCFF2F66222222 +FFFCCCFF6F622222 +LCCFCCFFFFF66222 +LLCCCCFCCFF66222 +LLLLLCCCFFFFFF22 +LLLL1CCCCCCFFF22 +L00L11CCCCCCFF22 +000L01C0LCLCLFF2 +00L111100CLLLLF2 +00L1111CC00CLL22 +00LL11111000LLL2 +200LL1111111LCC2 +2000011LLL11LLCC +22000000LLL11LCC`], + [beach, bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222`], + + [fish1, bitmap` +................ +................ +................ +.833...33333.... +88385.33333333.. +.8388333333223.. +..3333833332033. +.838833388333333 +88385.3388883DDD +.833...333333... +................ +................ +................ +................ +................ +................`], + [fish2, bitmap` +.........5...5.. +........5.5.5.5. +.......5...5...5 +.........005.... +.......00LL000.. +.0.0...0LLLLL00. +01010..0LLL22L0. +01110..0LLL20L00 +.010..0LLLLLLLL0 +.010.00LLLLLLLL0 +.8010LLLLL222220 +..80L2220LL2220. +...8000.0000008. +....8880..088... +................ +................`], + [fish3, bitmap` +................ +................ +................ +...0000......... +..0088800000.... +....000666070... +....0886607770.. +0..086666077070. +900666666077070. +090666666607770. +9066666666600000 +90666666660CCCC0 +0906088060C0000. +90.00806660CCC0. +00..0066666000.. +......00000.....`], + + [fish1_flip, bitmap` +................ +................ +................ +....33333...338. +..33333333.58388 +..3223333338838. +.3302333383333.. +333333883338838. +DDD3888833.58388 +...333333...338. +................ +................ +................ +................ +................ +................`], + [fish2_flip, bitmap` +..5...5......... +.5.5.5.5........ +5...5...5....... +....500......... +..000LL00....... +.00LLLLL0...0.0. +.0L22LLL0..01010 +00L02LLL0..01110 +0LLLLLLLL0..010. +0LLLLLLLL00.010. +022222LLLLL0108. +.0222LL0222L08.. +.8000000.0008... +...880..0888.... +................ +................`], + [fish3_flip, bitmap` +................ +................ +................ +.........0000... +....0000088800.. +...070666000.... +..0777066880.... +.070770666680..0 +.070770666666009 +.077706666666090 +0000066666666609 +0CCCC06666666609 +.0000C0608806090 +.0CCC06660800.09 +..0006666600..00 +.....00000......`], + + [fish_background, bitmap` +................ +................ +................ +000.....000..... +0..0...00..0.... +.0..0.0.....0... +.0...00......00. +..0.0........0.0 +...0.........0.0 +..0.0........0.0 +.0...00......00. +.0..0.0.....0... +0..0...00..0.... +000.....000..... +................ +................`], + + [thumbs_up, bitmap` +...........0.... +..........020... +..........020... +.........0220... +.........0220... +000.....0220.... +0220.0002200000. +022000222222220. +022000222222000. +0220002222222220 +0220002222222220 +0220002222220000 +0220002222222220 +0220.0002222000. +.00.....0022220. +..........0000..`], + [thumbs_down, bitmap` +..........0000.. +.00.....0022220. +0220.0002222000. +0220002222222220 +0220002222220000 +0220002222222220 +0220002222222220 +022000222222000. +022000222222220. +0220.0002200000. +000.....0220.... +.........0220... +.........0220... +..........020... +..........020... +...........0....`], + + [motion_ud, bitmap` +.......00....... +......0220...... +.....022220..... +....02222220.... +....00022000.... +......0220...... +......0220...... +......0220...... +......0000...... +......7777...... +....77777777.... +....77777777.... +.....777777..... +......7777...... +.......77....... +................`], + [motion_all, bitmap` +.......00....... +......0220...... +.....022220..... +....02222220.... +....00022000.... +..00..0220..00.. +.02000022000220. +0222222222222220 +0222222222222220 +.02000000000020. +..00..7777..00.. +....77777777.... +....77777777.... +.....777777..... +......7777...... +.......77.......`], + [motion_ud_selected, bitmap` +.......00....... +......0440...... +.....044440..... +....04444440.... +....00044000.... +......0440...... +......0440...... +......0440...... +......0000...... +......7777...... +....77777777.... +....77777777.... +.....777777..... +......7777...... +.......77....... +................`], + [motion_all_selected, bitmap` +.......00....... +......0440...... +.....044440..... +....04444440.... +....00044000.... +..00..0440..00.. +.04000044000440. +0444444444444440 +0444444444444440 +.04000000000040. +..00..7777..00.. +....77777777.... +....77777777.... +.....777777..... +......7777...... +.......77.......`], + + [ winner_bg, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD`], + [ sparkle_tl, bitmap` +................ +................ +.6666........... +.666666......... +.6666666........ +.6666666........ +...666666....... +....666666...... +......6666...... +........666..... +.........666.... +.........6666... +...........66... +.............6.. +................ +................`], + [ sparkle_bl, bitmap` +................ +................ +.............6.. +...........66... +..........666... +.........666.... +.......66666.... +......6666...... +....66666....... +...666666....... +...66666........ +..666666........ +..66666......... +..6666.......... +..6666.......... +................`], + [ sparkle_tr, bitmap` +................ +..........6666.. +..........6666.. +.........66666.. +........666666.. +........66666... +.......666666... +.......66666.... +......6666...... +....66666....... +....666......... +...666.......... +...66........... +..6............. +................ +................`], + [ sparkle_br, bitmap` +................ +................ +..6............. +...66........... +...6666......... +....666......... +.....666........ +......6666...... +......666666.... +.......666666... +........6666666. +........6666666. +.........666666. +...........6666. +................ +................`], + + + [fisherman_head, bitmap` +2222200000222222 +22220000CC022222 +22200CCCC0C02222 +2200CC0000000222 +2200C0CCCC0C0222 +0000C0000CCCC002 +0000066660000C02 +2006066666060002 +22F6LLL6LLL6F222 +22F6L02602L6F222 +22F622262226F222 +22FF6666666FF222 +222F6366366F2222 +222F6633666F2222 +2222FF666FF22222 +222222FFF2222222`], + [fisherman_body, bitmap` +222CCFFFFFFCC222 +22CCC66666FCCC22 +2CCCCFF6FFFCCCC2 +CCCCCCCFFCCCCCCC +0CCCCCCCCCCCCCC0 +CCCC0CCCCCC0CCCC +0CC0CCCCCCCC0CC0 +CCC0CCCCCCCC0CCC +0CC0CCCCCCCC0CC0 +CCC0CCCCCCCC0CCC +00000CCCCCC00000 +F66F0CCCCCC0F66F +F66F0CCCCCC0F66F +F6FF0CCCCCC0FF6F +FFF20CCCCCC00FFF +2222200000000022`], + [fisherman_legs, bitmap` +222220C0C0CC0222 +2222201101110222 +2222201101110222 +2222201100110222 +2222201110110222 +2222201110110222 +2222201110110222 +2222201110110222 +2222201110110222 +2222201110110222 +2222201110110222 +2200001100000222 +220LLL0100LLL022 +2200000020000022 +2222222222222222 +2222222222222222`], + [fishing_rod, bitmap` +0..0022222222222 +20.0L00222222222 +22000LL002222222 +222220LLL0222222 +22222200LL022222 +222222200L022222 +2222222200C02222 +2222222220C02222 +2222222000CC0222 +22222220100C0222 +22222220110C0222 +222222201100C022 +222222200020C022 +222222222220C022 +2222222222200222 +2222222222222222`], + [fishing_thread, bitmap` +0............... +.0.............. +..0............. +...0............ +....0........... +.....0.......... +......0......... +.......00....... +........00...... +..........0..... +..........0..... +...........0.... +............00.. +..............0. +..............0. +...............0`] + +) + +// Sounds +const net_sound = tune` +500: C4-500, +15500`; +const back_tune = tune` +500: E4~500 + E5^500, +500: E4~500 + E5^500, +500: F4~500 + F5^500, +500: G4~500 + G5^500, +500: G4~500 + G5^500, +500: F4~500 + F5^500, +500: E4~500 + E5^500, +500: D4~500 + D5^500, +500: C4~500 + C5^500, +500: C4~500 + C5^500, +500: D4~500 + D5^500, +500: E4~500 + E5^500, +500: E4~500 + E5^500, +500: D4~500 + D5^500, +500: D4~500 + D5^500, +500, +500: E4~500 + E5^500, +500: E4~500 + E5^500, +500: F4~500 + F5^500, +500: G4~500 + G5^500, +500: G4~500 + G5^500, +500: F4~500 + F5^500, +500: E4~500 + E5^500, +500: D4~500 + D5^500, +500: C4~500 + C5^500, +500: C4~500 + C5^500, +500: D4~500 + D5^500, +500: E4~500 + E5^500, +500: E4~500 + E5^500, +500: D4~500 + D5^500, +500: D4~500 + D5^500, +500`; +let playback = undefined; + + +// Setup +setSolids([fish1, fish2, fish3, fish1_flip, fish2_flip, fish3_flip, rock, seabed ]); + +const setup_map = map` +................... +..........r.y.h.... +................... +................... +..........a........ +................... +................... +................... +........e.l........ +bo................. +bbo................ +bo................. +bbo.............b.. +oobo........boobb.. +bbobbbb.b.bbobbbbbo`; +setMap(setup_map); +setBackground(water); + +const xSpeed1 = getFirst(selector).x; + +let score = 0; + +let horizontal_play = false; + +let moveInterval = undefined; +let gameOngoing = false; +let resetSpeed = false; +const netAcceleration = 0.4; +const netTerminalSpeed = 2.0; + +const fish_start_position = [9,3]; + + +const map_levels = [ + map` +................... +................... +................... +................... +.................qq +q..............qqmm +q.............qmmmm +qq.......n..qqmmmmm +qqq.........qmmmmmm +boqq........qmmmmmm +bboq........qpm*mmp +bob.........qpm|mmp +bbob........qqp,mpp +oobob.......boopppv +bbobbbb.b.bbobvppvv`, +] +let level = getRandomInt(0,map_levels.length); + +let speed = 0; +fish_speeds = [ + 500, + 200, + 25 +]; + +fish_types = [ + fish1, + fish2, + fish3 +]; + +let fish = fish_types[speed]; + +fish_flip_types = [ + fish1_flip, + fish2_flip, + fish3_flip +]; + +let fish_flip = fish_flip_types[speed]; + +speed_sprites = [ + one, + two, + three +]; + +// The fish should move faster than the net, so gravity Interval should be bigger. +fishDelayTime = 1000; +gravityIntervalTime = 700; + +const winMap = map` +.................. +.................. +....s.......z..... +...s.........z.... +..s...........z... +...............z.. +.................. +.................. +..x............c.. +...x..........c... +....x........c.... +.................. +.................. +.................. +..................`; + +function computeSpeed(xSpeed1, xSelectedSpeed) { + return Math.floor((xSelectedSpeed - xSpeed1) / 2); +} + +function showSpeed(speed) { + addSprite(1,0,speed_sprites[speed]); +} + +function showControls(horizontal_play) { + if (horizontal_play) { + addSprite(0,0,motion_all); + } + else { + addSprite(0,0,motion_ud); + } +} + +function startText() { + + addText("Level: 1 2 3", { + x: 4, + y: 3, + color: color`2` + }) + + addText("Toggle controls (i):", { + x: 0, + y: 7, + color: color`2` + }) + + addText("Press s to start!", { + x: 2, + y: 12, + color: color`2` + }) +} + +function scoreText(score = 0) { + addText("Score:", { + x: 13, + y: 1, + color: color`2` + }); + + addText(score.toString().padStart(2, '0'), { + x: 15, + y: 3, + color: color`2` + }); +} + +function winnerText() { + addText("Winner!!!", { + x: 6, + y: 7, + color: color`3` + }); +} + +function resetText() { + addText("Press j to reset", { + x: 2, + y: 14, + color: color`5` + }); +} + +startText(); + +function gameLoop() { + moveFish(); + gravityNet(); +} + +// l for horizontal play +onInput("i", () => { + if (gameOngoing) { + return; + } + horizontal_play = !horizontal_play; + let s = getFirst(motion_ud_selected); + if (s) { + // UD is selected. Unselect UD. + addSprite(s.x, s.y, motion_ud); + s.remove() + + // Select All + s = getFirst(motion_all); + addSprite(s.x, s.y, motion_all_selected); + s.remove(); + } + else + { + // All is selected + s = getFirst(motion_all_selected); + // Unselect all + addSprite(s.x, s.y, motion_all) + s.remove() + + // Select UD + s = getFirst(motion_ud); + addSprite(s.x, s.y, motion_ud_selected); + s.remove(); + } +}); + + +// a for levels and moving with horizontal play +onInput("a", () => { + if (gameOngoing) { + if (!horizontal_play) { + return; + } + + getFirst(net).x -= 1; + computeScore(); + } + else { + if (getFirst(selector).x > xSpeed1) { + getFirst(selector).x -= 2; + } + } +}); + +// d for levels +onInput("d", () => { + if (gameOngoing) { + if (!horizontal_play) { + return; + } + + getFirst(net).x += 1; + computeScore(); + } + else { + if (getFirst(selector).x < (xSpeed1 + 4 )) { + getFirst(selector).x += 2; + } + } +}); + +// s for start +onInput("s", () => { + // This check is necessary to prevent fish erratic behavior. + if ((!gameOngoing) & (score == 0)) { + // The fish should move faster than the net, so gravity Interval should be bigger. + speed = computeSpeed(xSpeed1, getFirst(selector).x); + fishIntervalTime = fish_speeds[speed]; + level = getRandomInt(0,map_levels.length); + setMap(map_levels[level]); + setBackground(water); + fish = fish_types[speed]; + fish_flip = fish_flip_types[speed]; + fish_x = fish_start_position[0]; + fish_y = fish_start_position[1]; + addSprite(fish_x, fish_y, fish); + showSpeed(speed); + showControls(horizontal_play); + gameOngoing = true; + gameLoop(); + clearText(); + scoreText(); + } + +}); + +// w for moving up +onInput("w", () => { + if (!gameOngoing) { + return; + } + getFirst(net).y -= 1; + resetSpeed = true; + computeScore(); +}); + + +// j for reset +onInput("j", () => { + if (playback) { + playback.end(); + } + gameOngoing = false; + setMap(setup_map); + setBackground(water); + horizontal_play = false; + score = 0; + clearText(); + startText(); +}); + +function win() { + clearText(); + gameOngoing = false; + setMap(winMap); + setBackground(winner_bg); + + winnerText(); + resetText(); +} + +function computeScore() { + if (!gameOngoing) { + return; + } + let f = getFirst(fish) || getFirst(fish_flip); + if ((getFirst(net).y == f.y) && (getFirst(net).x == f.x)) { + score += 10; + playTune(net_sound); + } + else { + score -= 1; + } + score = Math.max(score, 0); + scoreText(score); + + if (score >= 100) { + win(); + playback = playTune(back_tune, Infinity); + } + +} + +function updateFish() { + let f = getFirst(fish); + if (f) { + addSprite(f.x, f.y, fish_flip) + f.remove() + } + else + { + f = getFirst(fish_flip); + addSprite(f.x, f.y, fish) + f.remove() + } +} + +function getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min) + min); +} + +function getRandomSign() { + return Math.random() < 0.5 ? -1 : +1; +} + +function getRandomBoolean() { + return Math.random() < 0.5; +} + +function moveFish() { + if (!gameOngoing) { + clearInterval(moveInterval); + return; + } + + if (horizontal_play) { + moveHorizontally = getRandomBoolean(); + horizontalDirection = getRandomSign(); + } + + let numMoves = getRandomInt(1, 5); + + + let f = getFirst(fish) || getFirst(fish_flip); + let startY = f.y; + let startX = f.x; + let directionMoves = getRandomSign(); + if (startY == 0) { + directionMoves = 1; + } + else if (startY == (height()-1)) { + directionMoves = -1; + } + + // Limit horizontal motion + if (horizontal_play) { + if (startX == Math.floor(width()/2 - 5)) { + horizontalDirection = 1; + } + else if (startX == Math.floor(width()/2 + 2)) { + horizontalDirection = -1; + } + } + + moveCount = 0; + moveInterval = setInterval(() => { + if (gameOngoing) { + f.y += directionMoves; // move the fish + moveCount++; // increment number of times the fish has moved + + if (horizontal_play) { + if (moveHorizontally && moveCount === 1) { + f.x += horizontalDirection; // Move the fish horizontally once + updateFish(); + } + } + } + else { + clearInterval(moveInterval); + } + + if (moveCount >= numMoves) { + clearInterval(moveInterval); + setTimeout(moveFish, fishDelayTime); + } + }, fishIntervalTime); +} + +function gravityNet(currentSpeed = 0, accumulatedY = 0) { + computeScore(); + const maxY = height() - 1; + + if (!gameOngoing) { + return; + } + + if (getFirst(net).y >= maxY) { + resetSpeed = true; + } + + // Assume a = 1 // gravitational acceleration + if (resetSpeed) { + currentSpeed = 0; + resetSpeed = false; + } + else { + currentSpeed += netAcceleration; + } + + currentSpeed = Math.min(currentSpeed, netTerminalSpeed); // Speed cannot exceed terminal speed. + accumulatedY += currentSpeed; + + // remaning distance to bottom + let remainingDistanceToBottom = maxY - getFirst(net).y; + + const intYMovement = Math.floor(accumulatedY); + accumulatedY -= intYMovement; // To be used for future movement + + if (intYMovement > 0) { + if (intYMovement > remainingDistanceToBottom) { + getFirst(net).y += remainingDistanceToBottom; + } + else { + getFirst(net).y += intYMovement; // positive y is downwards + } + } + + setTimeout(() => + gravityNet(currentSpeed, accumulatedY), gravityIntervalTime); +} + + + + diff --git a/games/Sort.js b/games/Sort.js index dd91189108..de1ad677a3 100644 --- a/games/Sort.js +++ b/games/Sort.js @@ -1,8 +1,8 @@ /* @title: Sort +@author: Mohan @tags: [] @addedOn: 2022-12-26 -@author: Mohan */ const right = 'r'; diff --git a/games/Sound_Memory.js b/games/Sound_Memory.js index 73d0cc380d..de332f8089 100644 --- a/games/Sound_Memory.js +++ b/games/Sound_Memory.js @@ -1,13 +1,13 @@ /* +@title: Sound Memory +@author: meronemo +@tags: [] +@addedOn: 2024-07-28 Sound Memory Listen and memorize the order of the sound playing. After the tunes are all played, press the key in the same order. Red-W, Yellow-A, Green-S, Blue-D -@title: Sound Memory -@author: meronemo -@tags: [] -@addedOn: 2024-07-28 */ const boxa = "a"; diff --git a/games/Space-war.js b/games/Space-war.js index 1eb75ad33b..d5830d1d26 100644 --- a/games/Space-war.js +++ b/games/Space-war.js @@ -2,7 +2,7 @@ /* @title: Space-war @author: Yash -@tags: ['catch'] +@tags: [] @addedOn: 2023-10-02 */ diff --git a/games/Space_Invaders.js b/games/Space_Invaders.js index cda2a5a7da..26609db83f 100644 --- a/games/Space_Invaders.js +++ b/games/Space_Invaders.js @@ -1,7 +1,7 @@ /* @title: OG Space Invaders @author: Atharva Malik -@tags: ['space', 'invaders', 'space invaders', 'invader'] +@tags: ['real-time','action'] @addedOn: 2024-07-11 Controls: diff --git a/games/Space_Invasion.js b/games/Space_Invasion.js index d090ec5419..a3d2a9086c 100644 --- a/games/Space_Invasion.js +++ b/games/Space_Invasion.js @@ -1,8 +1,8 @@ /* @title: Space Invasion +@author: Agent-Shu @tags: ['endless'] @addedOn: 2022-10-18 -@author: Agent-Shu */ /* diff --git a/games/Space_Odyssey.js b/games/Space_Odyssey.js index 6942229547..882be3ce99 100644 --- a/games/Space_Odyssey.js +++ b/games/Space_Odyssey.js @@ -2,7 +2,7 @@ /* @title: Space_Odyssey @author: Devon S -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-11-27 */ diff --git a/games/Space_Race_v1.js b/games/Space_Race_v1.js index 528f770f23..50dc36f0eb 100644 --- a/games/Space_Race_v1.js +++ b/games/Space_Race_v1.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Space Race v1 @author: Ler -@tags: ['catch', 'dodge', 'multiplayer', 'WIP'] +@tags: ['action','multiplayer'] @addedOn: 2024-06-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ // -- Space Race -- diff --git a/games/Spider.js b/games/Spider.js index 84457461c7..5018fbb03d 100644 --- a/games/Spider.js +++ b/games/Spider.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Spider @author: AlexGaloy @tags: [] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const spider = "p" diff --git a/games/Spike_Avoider.js b/games/Spike_Avoider.js index ea6e58c009..e7cc45b4e9 100644 --- a/games/Spike_Avoider.js +++ b/games/Spike_Avoider.js @@ -1,8 +1,8 @@ /* @title: Spike_Avoider +@author: Hrushal Nikhare @tags: ['endless'] @addedOn: 2023-05-16 -@author: Hrushal Nikhare ¯\_(ツ)_/¯ diff --git a/games/SprazeJS.js b/games/SprazeJS.js index fb504084b1..361ec70306 100644 --- a/games/SprazeJS.js +++ b/games/SprazeJS.js @@ -1,8 +1,8 @@ /* @title: Spraze -@tags: ['logic'] -@addedOn: 2022-08-29 @author: Peipr (@peiprjs) +@tags: ['puzzle'] +@addedOn: 2022-08-29 */ /*---------------------------------------------------------------------------*/ const player = "p"; diff --git a/games/SpriMons.js b/games/SpriMons.js index 2ac1319317..1581b8e936 100644 --- a/games/SpriMons.js +++ b/games/SpriMons.js @@ -1,7 +1,7 @@ /* @title: SpriMons -@author: Bartosz Budnik -@tags: ['rpg', 'arcade'] +@author: Bartosz Budnik +@tags: ['role-playing'] @addedOn: 2024-07-30 */ diff --git a/games/Spridle.js b/games/Spridle.js index 8d923c6436..b7cec30c3c 100644 --- a/games/Spridle.js +++ b/games/Spridle.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Spridle @author: Duclings -@tags: ['classic'] +@tags: ['retro'] @addedOn: 2024-06-23 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const underscore = "u" diff --git a/games/SprigAlarm.js b/games/SprigAlarm.js index 59753e408f..e257e6c3fc 100644 --- a/games/SprigAlarm.js +++ b/games/SprigAlarm.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: SprigAlarm @author: Manitej Boorgu @tags: [] @addedOn: 2024-03-26 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ /* diff --git a/games/SprigClick.js b/games/SprigClick.js index a3e1312ef0..4abee41d32 100644 --- a/games/SprigClick.js +++ b/games/SprigClick.js @@ -1,8 +1,8 @@ /* @title: SprigClick +@author: CatR3kd @tags: ['endless'] @addedOn: 2023-01-06 -@author: CatR3kd */ diff --git a/games/Sprig_Boy.js b/games/Sprig_Boy.js index c8fef62a41..90eb603acb 100644 --- a/games/Sprig_Boy.js +++ b/games/Sprig_Boy.js @@ -1,8 +1,8 @@ /* @title: SprigBoy +@author: NA @tags: [] @addedOn: 2023-06-19 -@author: NA */ const createArray = (size) => [...Array(size).keys()]; const wait = (time) => new Promise((resolve) => setTimeout(resolve, time)); diff --git a/games/Sprig_Shooter.js b/games/Sprig_Shooter.js new file mode 100644 index 0000000000..3f8cfca9c6 --- /dev/null +++ b/games/Sprig_Shooter.js @@ -0,0 +1,1110 @@ +/* +@title: Sprig Shooter +@author: Heliodex +@tags: ["endless", "action", "real-time", "retro"] +@addedOn: 2024-10-03 + +Space-themed shooter! Control your ship and shoot down enemies (purple asteroid/planet thingies) to blow them into pieces and earn score. Try to get your score as high as possible (duh) and avoid getting hit by enemies (duh too). +The game is endless and difficulty increases as you progress. Good luck, cadet! +*/ + +// Watch out when opening any bitmap`` or tune`` strings in the Sprig editor, as it may corrupt them due to being created in an external program. If this happens, simply undo the changes. + +const black = "0".charCodeAt(0) +const lightgrey = "1".charCodeAt(0) +const white = "2".charCodeAt(0) +const red = "3".charCodeAt(0) +const lime = "4".charCodeAt(0) +const blue = "5".charCodeAt(0) +const yellow = "6".charCodeAt(0) +const cyan = "7".charCodeAt(0) +const pink = "8".charCodeAt(0) +const orange = "9".charCodeAt(0) +const brown = "C".charCodeAt(0) +const green = "D".charCodeAt(0) +const gold = "F".charCodeAt(0) +const purple = "H".charCodeAt(0) +const darkgrey = "L".charCodeAt(0) +const transparent = ".".charCodeAt(0) + +const space = " ".charCodeAt(0) +const allChars = [ + space, + black, + darkgrey, + lightgrey, + white, + red, + brown, + blue, + cyan, + yellow, + lime, + green, + gold, + pink, + purple, + orange, + transparent, +] + +function transformTextures(startTexs) { + const textures = [] + for (const tex of startTexs) { + const texLines = tex + .replaceAll("\r", "") + .replaceAll("\t", "") + .split("\n") + texLines.shift() + + for (const line of texLines) + for (const char of line) + if (!allChars.includes(char.charCodeAt(0))) + throw new Error(`Unknown colour: ${char.charCodeAt(0)}`) + + textures.push(texLines) + } + return textures +} + +// The good part of "Take Flight", transcribed to crazed 4-voice horror +const music = tune` +194: A2-194 + C3^194, +194: A1~194 + C3^194, +194: C3-194 + C1/194, +194: C1/194, +194: A3-194 + C3^194, +194: B3-194 + C3^194, +194: C1/194, +194: C4-194 + C3^194, +194: B2^194, +194: C3^194, +194: C1/194, +194: C1/194, +194: C4-194 + C3^194, +194: C3^194, +194: C#4-194 + C1/194, +194: C3^194, +194: D4-194 + B2^194, +194: C#4-194 + C#3^194, +194: C4-194 + C#1/194, +194: D4-194 + C#1/194, +194: C#4-194 + C#3^194, +194: C4-194 + C#3^194, +194: C5-194 + C2/194, +194: C4^194, +194: B3^194, +194: C4^194, +194: C2/194, +194: C2/194, +194: C5-194 + C4^194, +194: C4^194, +194: C5-194 + C2/194, +194: C4^194, +194: F4-194, +194: F4-194 + F3~194 + F3^194, +194: G4-194 + F1/194 + F3^194, +194: F4-194 + F1/194, +194, +194: C4-194 + F3^194, +194: F1/194 + F3^194, +194: C4-194, +194: F3^194, +194: E3^194, +194: F1/194 + F3^194, +194: F1/194, +194: C4-194, +194: F3^194, +194: D4-194 + F1/194 + F3^194, +194, +194: D#4-194 + F3^194, +194: D#3~194 + E3^194, +194: B1/194 + C3^194, +194: C4-194, +194, +194: C3^194, +194: B1/194 + C3^194, +194, +194: D4-194 + C3^194, +194: D3~194 + B2^194, +194: D2/194 + G2^194, +194: B3-194, +194: G2^194, +194: B2^194, +194: D2/194 + C3^194, +194, +194: A3-194 + A3^194, +194: A2-194 + A3^194, +194: G3-194 + C1/194, +194: C1/194, +194: A3-194 + G3^194, +194: B3-194 + G3^194, +194: C1/194, +194: C4-194 + A3^194, +194: G3^194, +194: A3^194, +194: C1/194, +194: C1/194, +194: C4-194 + G3^194, +194: G3^194, +194: C#4-194 + C1/194, +194: G3^194, +194: D4-194 + A3^194, +194: C#4-194 + C#3^194, +194: C4-194 + C#1/194, +194: D4-194 + C#1/194, +194: C#4-194 + C#3^194, +194: C4-194 + C#3^194, +194: C5-194 + C2/194, +194: C4^194, +194: B3^194, +194: C4^194, +194: C2/194, +194: C2/194, +194: C5-194 + C4^194, +194: C4^194, +194: C5-194 + C2/194, +194: C4^194, +194: F4-194, +194: F4-194 + F3^194, +194: G4-194 + F1/194 + F3^194, +194: F4-194 + F1/194, +194, +194: C4-194 + F3^194, +194: F1/194 + F3^194, +194: C4-194, +194: F3^194, +194: E3^194, +194: F1/194 + F3^194, +194: F1/194, +194: C4-194, +194: F3^194, +194: D4-194 + F1/194 + F3^194, +194, +194: D#4-194 + F3^194, +194: E3^194, +194: B1/194 + C3^194, +194: C4-194, +194, +194: C3^194, +194: B1/194 + C3^194, +194, +194: D4-194 + C3^194, +194: E3^194, +194: D2/194 + F3^194, +194: B3-194, +194, +194: C5^194, +194: D2/194 + G#4^194, +194: B4^194` + +const notes = "CDEF".split("") +const randomExplode = () => + `0: ${notes[Math.floor(Math.random() * notes.length)]}1/500` +const bullet = "0: C4-100 + C3-200 + C2-300 + C1-400 + C0-500" + +class Sprite { + textures = [] + currentTex = 0 + framesSinceLastTex = 0 + pos = [0, 0] + offset = [0, 0] + collidable = true + + get texture() { + return this.textures[this.currentTex % this.textures.length] + } +} + +class Ship extends Sprite { + textures = transformTextures([ + bitmap` + 3 + 2 + 323 + 323 + 33233 + 33233 + 3232323 + 3232323 + 3323 3233 + 333 333 + LL LL + 96 69 + 6 6`, + bitmap` + 3 + 2 + 323 + 323 + 33233 + 33233 + 3232323 + 3232323 + 3323 3233 + 333 333 + LL LL + 99 99 + 96 69 + 6 6`, + ]) + pos = [80, 120] + offset = [5, 13] +} + +class Bullet extends Sprite { + textures = transformTextures([ + bitmap` + 7 + 7 + 7`, + ]) + offset = [1, 0] + constructor(x) { + super() + this.pos = [x, 106] + } +} + +const suddenDeathify = s => + s.replaceAll("H", "3").replaceAll("L", "9").replaceAll("1", "6") + +// supposed to be a funky planet or asteroid +const enemyTexs = transformTextures([ + bitmap` + LL LLL + LH1LHHHL + 1HHHHH1HL + LL1HHHHHHL + 1HHHHHLLHL + 1HHH1HHHHL + 1HH1HHHHH1 + 1HHLHHLHHL + 11HHH1H1 + 111 1 `, +]) + +class Enemy extends Sprite { + textures = enemyTexs + offset = [6, 12] + velocity = [0, 0.5] + suddenDeath = false + constructor(pos, velocity, suddenDeath = false) { + super() + + if (pos[0] < 0) velocity[0] = Math.abs(velocity[0]) + 0.2 + else if (pos[0] > 160) velocity[0] = -Math.abs(velocity[0]) - 0.2 + + this.pos = pos + this.velocity = velocity + this.suddenDeath = suddenDeath + } +} + +const smallEnemyTexs = transformTextures([ + bitmap` + + LLL + LH1HL + 1HHHHL + 1H1HLHL + 1LHHHL + 1HLH1 + 111 `, +]) + +class SmallEnemy extends Sprite { + textures = smallEnemyTexs + offset = [6, 12] + velocity = [0, 0.5] + immunity = 15 + suddenDeath = false + constructor(pos, velocity, suddenDeath = false) { + super() + + if (pos[0] < 0) velocity[0] = Math.abs(velocity[0]) + 0.2 + else if (pos[0] > 160) velocity[0] = -Math.abs(velocity[0]) - 0.2 + + this.pos = pos + this.velocity = velocity + this.suddenDeath = suddenDeath + } +} + +class Explosion extends Sprite { + textures = transformTextures([ + bitmap` + 33 63 3 + 3 6 636 + 66996 3 + 9 96339 3 + 969333969 + 9 9336963 + 36999363 + 33636 6 3 + 996`, + bitmap` + 96636 + 66999 6 + 3 9939696 + 6963 3939 + 693 6 396 + 6363 39 6 + 399939696 + 6 69993 + 69663`, + + bitmap` + 9 + 66666 + 6999936 + 3 696 996 + 969 C 669 + 639 996 + 96969936 + 66666 3 + 9`, + bitmap` + + 9 + 3 696 9 + 6 6 + 99 C 99 + 6 6 + 9 696 3 + 9`, + bitmap` + + 9 + 3 6 + 9 9 + 6 6 + 9 9 6 + 9 6 3 + `, + ]) + collidable = false + offset = [8, 8] + constructor(pos) { + super() + this.pos = structuredClone(pos) + } +} + +class Paused extends Sprite { + textures = transformTextures([ + bitmap` + 222222222222222222222222222222222222222222222222222 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200022220000020000020000200022220022222002222200002 + 200020002000020000020000200200000020000002000020002 + 200020002000202000020000200200000020000002000020002 + 200022220000202000020000200022200022220002000020002 + 200020000002000200020000200000020020000002000020002 + 200020000002222200020000200000020020000002000020002 + 200020000020000020020000200000020020000002000020002 + 200020000020000020002222000222200022222002222200002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200022200000000002220020000022002000200000000000002 + 200002000000000002002020000200200202000000000000002 + 200002000001110002220020000222200020000000000000002 + 200002000000000002000020000200200020000000000000002 + 200022200000000002000022220200200020000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200020000000000002000202220200202002000000000000002 + 200020000000000002202202000220202002000000000000002 + 200020000001110002020202200202202002000000000000002 + 200020000000000002000202000200202002000000000000002 + 200022220000000002000202220200200220000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 200000000000000000000000000000000000000000000000002 + 222222222222222222222222222222222222222222222222222`, + ]) + pos = [80, 45] + offset = [25, 0] +} + +class GameOver extends Sprite { + textures = transformTextures([ + bitmap` + 22222222222222222222222222222222222222222222222222222222222222222222222222 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000222220000020000020000020022222000000022220002000002002222200222200002 + 20002000000000020000022000220020000000000200002002000002002000000200020002 + 20002000000000202000020202020020000000000200002000200020002000000200020002 + 20002000000000202000020020020022220000000200002000200020002222000222200002 + 20002002220002000200020000020020000000000200002000020200002000000220000002 + 20002000020002222200020000020020000000000200002000020200002000000202000002 + 20002000020020000020020000020020000000000200002000002000002000000200200002 + 20000222200020000020020000020022222000000022220000002000002222200200020002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20002220000000000222002220222002000002200200020000000000000000000000000002 + 20000200000000000200202000200202000020020020200000000000000000000000000002 + 20000200000111000222002200222002000022220002000000000000000000000000000002 + 20000200000000000200202000200002000020020002000000000000000000000000000002 + 20002220000000000200202220200002222020020002000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20002000000000000200020222020020200200000000000000000000000000000000000002 + 20002000000000000220220200022020200200000000000000000000000000000000000002 + 20002000000111000202020220020220200200000000000000000000000000000000000002 + 20002000000000000200020200020020200200000000000000000000000000000000000002 + 20002222000000000200020222020020022000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 20000000000000000000000000000000000000000000000000000000000000000000000002 + 22222222222222222222222222222222222222222222222222222222222222222222222222`, + ]) + collidable = false + pos = [80, 45] + offset = [37, 0] +} + +class Intro extends Sprite { + textures = transformTextures([ + bitmap` + HHHLLHHHHL000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001HHHHHHHH1100000000000000000000000000000000000000 + LHHHHH1HHL000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001LHHLLHHHL000000000000000000000000000000000000000 + LHHHHHHH100000000000000000000L0000000000000000000000000000000000000000000000000000000000000000000000000000000001HHHHLHHHL000000000000000000000000000000000000000 + 0LHHHHH1L000000000000000000000000000000000000000000000000000000LLLLL0000000000000000000000000000000000000000000LHH1HH1HH0000000000000000000000000000000000000000 + 00LL11L000000000000000000000000000000000000000000000000000000LLHHHHH1L0000000000000000000000000000000000000000001HHHHHHL0000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000LLH1HHHHH1L0000000000000C000000000000000000000000000L1HHHHL00000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000LLH11HHHLHH10000000000000000000000000000000000000000000LLL0000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000LHHHHHHHHHHHL0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000LLHHHHHHHHHHH1000000000000000000000000000000000000000000000000000000000LL00000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000LHLLHHLLHHH1H1000000000000LCC00000C0000000000000000000000000000000000001L00000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000LHHHHHLLHHH1110000000000000C9C00000000000000000000000000000000000000000000000000000000000000000LLLLL00 + 0000000000000000000000000000000000000000000000000000L00000LHHHHHHHHHHHH10000000000000C99C00000000000000000000000000000000000000000000000000000000000000L1HHHHHL0 + 00000000000000000000000000000000000000000000000000000000000LHHHHHHHLHHH10000000000C0CC9990000000000000000000000000000000000000000000000000000000000000LHHHHLLHHL + 00000000000000000000000000000000000000000000000000000000000LHHHHHHHHHH1L000000000000CC66990000C90000000000000000000000000000000000000000000000000000001HHHHHHHHH + 00000000000000000000000000000000000001L000000000000000000000LHHH11HHH1L00000000L9C0C3C6669900C3300000000000000000000000000000000000000000000000000000LHHHHHHHHHH + 00000000000000L0000000000000000000000000000000000000000000000L1HHHHH1L000000000L99CC336666999933CCC00C00000000000000000000000000000000000000000000000LHHHHHLH11H + 00000000000LL11111L0000000000000000000000000000000000000000000LL111L000000000000999933662669933339F000000000000000000000000000LL000000000000000000000LHHHHLLLHHH + 0000000000LHHHHHHH110000000000000000L1HH1L00000000000000000000000000000000000000C99993669969933366000000000000000000000000LL0000000000000000000000000LHHHHHLHHHH + 00000000LLHH11HHHHHH10000000000000LLHHHHHH100000000000000000000000000000C00000L668666896966888966F00000000000000000000000000000000000000000000000000001H1HHHHLLH + 00000000LHHH11HHHHHH1L000000000000LHHHHLHHHL0000L100000000000000000000000000000F6666669666688866600000000000000000000000000000000000000000000000000000LHHHHHHHHH + 0000000LHHHHHHHLLHHHH100000000000LHHHHHHHHHH0000L100000000000000000000000000000066966666666966669C00000000000000000000000000000000000000000000000000000L1HHHHHHL + 0000000LHHHHHHHHHHHHH1L0000000000LHHHHHHH1HHL000000000000000000000000000000000009622666626666666999C0000000000000000000000000000000000000000000000000000LL111L10 + 0000000LHHLHHHHHHHH1HHL0000000000HHHHHLLH1HHL000000000000000000L00000000000000C9982266662666669969C0000000000000000000000000000000000000000000000000000000000000 + 0000000LHHHHHLLLHHHHHHL0000000000HHHHHLLHHHHL00000000000000000000000000000000C9999289F16666666666F00000000000000000000000000000000000000000000000000000000000000 + 0000000LHHHHHLLLHHHHHHL0000000000LHH1HHHHHHHL0000000000000000000000000000000C33333391555966626666F0000LL00000000000000000000000000000000000000000000L00000000000 + 0000000LHHHHHHHHH1HHH1L0000000000LHH1HHHHLH10000000000000000000000000000000C9993396615559666639F0000001L00000000000000000000000000000000000000000000L00000000000 + 0000000LHHH1HHHHHHHHH1000000000000LHHHHHHH1L0000000000000000000000000000000CCCCC9666777F96699333C000000000000000000000000000000000000000000000000000000000000000 + 00000000LH11HHHHHHHH1L0000000000000LHHHHH1L0000000000000000000000000000000000000666777663699993333C0000000000000000000000000000000000000000000000000000000000000 + 00000000LLHHHHHLHHHH1000L000000000000LLLL00000000000000000000000000000000000000C6F177669369999983330000000000000000000000000000000000000000000000000000000000000 + 000000000LLHHHHHHHH1000L2000000000000000000000000000000000000L00000000000000C00L0L77F66339828CCC3C0000L00000000000000000000000000000000000000000LLLLL00000000000 + 00000000000LLHHH11L00000L0000000000000000000000000000000000001L0000000000L100000L7719993398220003C00000000000000000000000000000000000000000000L11HHH1LL000000000 + 0000000000000LLLLL00000000000000000000000000000000010000000000000000000000000000771999333C98F0000C0000000000000000000000000000000000000000000L1HHHHH1HLL00000000 + 00000000000000000000000000000000000000000000000000L1000000000000000000000000000777999C333099C000L00C0000000000000000000000000000000000000000L1HHLHHH11HL00000000 + 00000000000000000000000000000000000000000000000000000000000000000000000000000077709C03CC30C9C00L100000000000000000000000000000000000000000001HHHHHHHHHHHL0000000 + 0000000000000000000000000000000000000000000000000000000000000000000000000000077700000000000900000000000000000000000000000000000000000000000L1HHHHHHHHHHHL0000000 + 0000000000000000000000000000000000000000000000000000000000000000000000000000L77000000000000C0000000000000000000000000000000000000000000L000LH11HHLLHHLHHL0000000 + 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L00000000000000000000000000L0000000000L000LHH1HHLLHHHHHL0000000 + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L100000000000000000000000000000000000000000L1HHHHHHHHHHHL0000000 + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000000000000000000001HHHHHHHH1HHL0000000 + 0000000000000000000000000000000000000000000L000000000000000000000LL0000000000000000C0000000000000000000000000000000000000000000000000L100000LHHLHHHHHHHLL0000000 + 0000000000000000000000000000000000000000000L00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L10000001HHHHHHHHHL00000000 + 000000000000000000000000000000000000000000000000000000000L00000000000000000000000000000000000000000000000000000000000000000000000000000000000011HHHHHLL000000000 + 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L00000000000000000000000000000LL1LLLL0000000000 + 00000000001L00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000LLLLLL00000000000000000000000000000000000000000 + 0000000000000000000000000000LL0000000000000000000000000000000000000000000000000000000000000000000000000000000000L1HHHHHL0000000000000000000000000000000000000000 + 0000000000000000000000000000LL000000000000000000000000000000000000000000000000000000000000000000000000000000000LHHHHHHHHL000000000000000LL0000000000000000000000 + 000000000000000000000000000000000000000000000000L000000000000000000000000000000000000000000000000000000000000001HH11HHLHHL000000000000001L0000000000000000000000 + 0000000000000000000000000000000000000L100000000010000000000000000000000000000000000000000000000000000000000000LHHHHHHHHHHL00000001L00000000000000000000000000000 + 0000000000000000000000000000000000000LL00000000000000000000000000000000000000000000000000000000000000000000000LHLHHHLLHHHH00000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000LHHHHHLLHHHH00000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000LHHHHHHHHHHL00000000000000000000000000000000000000 + 00000000000000000000000000000LLLLL0000000000000000000L000000000000000000000000000000000000000000000000000000000HHH1HHH1HHL000000000000000000000000000000000L1000 + LLLL000000000000000000000000LHHHHHL000000000000000000000000000000000000000000000000000000000L100000000000000000LHHHHHHHHL00000000000LL00000000000000000000000000 + HHHH1L000000000000000000000LHHHHHHHL000000001L0000000000000000000000000000000000LL0000000000LL000000000000000000LHHHHHHL000000000000LL00000000000000000000000000 + HHHHHH100000000000000000000HHHHHHHH100000000100000000000000000000000000000000000000000000000000000000000000000000LLHLLL000000000000000000000000L0000000000000000 + HLHHHHHL000000000000000000LHHHHLHHHHL000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + HHHHHHHH000000000000000000LH11HLHHHHL00000000000000000000000777000L000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + HHHHHHHHL000000000000000000HHHHHHHHH0000000000000000000000077700011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + HLLLHHHH1000000000000000000LHHHHHHH1000000000000000000000077700000000000000000000000000000000LL00000000000000000000000000000000000000000000100000000000000000000 + HLLLH11H10000000000000000000LHHHHH10000000000000000000000L77000000000000000000000000000000000LL0000000000000000000000000000000000000000000L100000000000000000000 + HHHHHHHH100000000000000000000LHH1L0000000000000000000000L77L000000LL00000000L0000000000000000000000000000000L000000000000000000000000000000000000000000000000000 + HHHHHHHHL00000000000000000000000000000000000000000LLL00L77L0000000LL000000000000000000000000000000000000000000000000000000L0000000000000000000000000000000000000 + HH1HHHH10000000000000000000000000000000000000000777557777L000000000000000000000000000000000000000000000001000000000000000010000000000000000000000000000000000000 + HH1HHHHL00000000000000000LL000000000000000000007555555777000000000000000000000000000000000000000000000000L000000000000000000000000000000000000000000000000000000 + HHHHHHL000000000000000000000000000000000000000L755555777L0000000000000222222222222222222222222222222222222222222222222222222222222222222222222222222220000000000 + HHHH1L000000000000000000000000000000000000000075555557757000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000002LL11111L00 + 0LL0000000000000000000000000000000000000000000755555555570000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000021HHHHHH1L0 + 000000000000000000000000000000000000000000000075555555557000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000002HHHHHHHHHL + 00000000L0000000000000000000000000L00000000000755H5555557000000000000020000222202222002222002220022220000002222020002002220002220022222022220222200002HHLHHH11HH + 00000000110000000000L00000000000001L0000000000L533555555L000000000000020002000002000202000200200200000000020000020002020002020002000200020000200020002HHHHHHH1HH + 0000000000000000000000000000000000000000000000C33355555700000000L0000020002000002000202000200200200000000020000020002020002020002000200020000200020002HHHHHHHHHH + 000000000000000000000000000000000000000000000333335557700000000000000020000222002222002222000200202220000002220022222020002020002000200022200222200002HHHLHHHHHH + 0000000000000000000000000000000000000000000C333833L77L000000000000000020000000202000002020000200200020000000002020002020002020002000200020000202000002HHLLLHLLHH + 000000000000000000000000000000000000000000C33828330000000000000000000020000000202000002002000200200020000000002020002020002020002000200020000200200002HHHLLHHHHH + 0000000000000000000000000000000000000000C3332228330000000000000000000020002222002000002000202220022200000022220020002002220002220000200022220200020002HHHHHHHHHH + 000000000000000000000000000000000000000C33322228330000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000002LHHHHHH1HH + 000000000000LL00000000000000000000000C33338222233300000000000000L0000020000000000000000000000000000000000000000000000000000000000000000000000000000002LHHH1HH1HH + 000000000000000000000000000000000000C33338222233330000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000002HHHHHHHHHL + 000000000000000000000000000000000003333332222833330000000000000000000L20000000000000000000000000000000000000000000000000000000000000000000000000000002HHHHHHHHLL + 0000000000000000000L0000000000000C333333822223333C0000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000002LLHHHHLL00 + 0000000000000000000000000000000033333338222233333C000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000200LLLL0000 + 000000000000000000000000000000C338833332222833333C0002L000000000000000200022200000000000000000002220020000220020002000000000000000000000000000000000020000000000 + 0000000000000000000000000000033382333382222333333C000L0000000000000000200002000000000000000000002002020002002002020000000000000000000000000000000000020000000000 + 000000000000000000000000000C333223333822223333333C00000000000000000000200002000000000000001110002220020002222000200000000000000000000000000000000000020000000000 + 0000000000000000000000000033382283333222283333833C00000000000000000000200002000000000000000000002000020002002000200000000000000000000000000000000000020000000000 + 000000000000000000000000C333222233338222233338833C00000000000000000000200022200000000000000000002000022202002000200000000000000000000000000000000000020000000000 + 00000000000000000000000C3382222333382222333382833000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000 + 000000000000000000000C333322228333322228333322833000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000 + 00000000000000000000C3333822223333822223333822833000000000000000000000200020002000000000000000002220222022200222000000000000000000000000000000000000020000000000 + 0000000000000000000333338222233338222233338222833000000000000000000000200020002000000000000000002000020020020200000000000000000000000000000000000000020000000000 + 00000000000000000C333333222283333288283333222233300000000L000000000000200020202000000000001110002220020022200220000000000000000000000000000000000000020000000000 + 0000000000000000C33333382222333333332333382222333000000000000000000000200022022000000000000000002000020020020200000000000000000000000000000000000000020000000000 + 0000000000000000333333822223333333333333822223333000000000000000000000200020002000000000000000002000222020020222000000000000000000000000000000000000020000000000 + 000000000000000333333322228333333C33333322228333C000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000 + 00000000000000C333333822283333CCCC33333822223333C00000000L0000000000L1200000000000000000000000000000000000000000000000000000000000000000000000000000020000000000 + 0000000000000033333333333333CCCCCC33338222233333C00000000000000000000L200002200001022200000000002000200220020002022200000000000000000000000000000000L20000000000 + 00000000000000CCCC33333333CCCCCCCC33332222833333C00000000000000000000020002002000102002000000000220220200202000202000000000000000000000000000000000LL20000000000 + 00000000000000CCLLLLLC33CCCCCCCCCC33332222333333C00000000000000000000020002222001002002000111000202020200200202002200000000000000000000000000000000LL20000000000 + 00000000000000CLLLLLLLLCCCCCCCCCC0C3332223333333C0000000000000000000002000200201000200200000000020002020020020200200000000000000000000000000000000LLL20000000000 + 00000000000000F111LLLLLCCCCCCC0000C333333333333CL0000000000000000000002000200201000222000000000020002002200002000222000000000000000000000000000000LLL20000000000 + 000000000000006822111LLCCCCCL00000C333333333333CLL00L10000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000LLL020000000000 + 0000000000000F9333886LLCCC0LL00000LLLC33333333CC000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000LLL0020000000000 + 000000000000C69999996FLL0000000000LLLLLLLC333CCC000000000000000000000020002002000000000000000000222000220020020022202220000000000000000000000000LLL0020000000000 + 000000000000699999666FL0000000000LLLLLLLLLCCCCCC00000000000000000000002000202000000000000000000020020200202002020000200000000000000000000000000LLL00020000000000 + 00001000000F999966666F0000000000C11111LLLLCCCCC000000000000000000000002000220000000000000011100022200222202002002200220000000000000000000000000LLL00L20000000000 + 0000L00000C6966666666L000000000063382211LLCCCCC00000000000000000000000200020200000000000000000002000020020200200002020000000000000000000000000LLL000L20000000000 + 0000000000666666666660000000000L69933366LLCCCC00000000000000000000000020002002000000000000000000200002002002200222002220000000000000000000000LLL000LL20000000000 + 000000000F6666666666F0000000000L69999966LLCCC000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000LLL000L020000000000 + 000000000666666666FL00000000000L66999666L0000000000000000000000000L0002000000000000000000000000000000000000000000000000000000000000000000000LLL000LL020000000000 + 0000000006666666FL0000000000000L66996666L00LL0000000000000000000001L002000200000000000000000000020002022202002020020000000000000000000000000LLL00LL002L000000000 + 00000000066666F000000000000000006699666F0002L0000000000000000000000000200020000000000000000000002202202000220202002000000000000000000000000LLL000L0002L000000000 + 00000000066FC00000000000000000006696666C00000000000000000000000000000020002000000000000000111000202020220020220200200000000000000000000000LLL000LL0002L000000000 + 000000000FL000000000000000000000F66666F000000000000000000000000000000020002000000000000000000000200020200020020200200000000000000000000000LLL000L00002L000000000 + 00000000000000000000000000000000C66666000000000000000000000000000L00002000222000000000000000000020002022202002002200000000000000000000000LLL000LL00002L000000000 + 0000000000000000000000000000000006666C00000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000LLL000LL0000020000000000 + 000000000000000000000000000000000666F000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000LLL000L00000020000000000 + 000000000000000000000000000000000F6600000000000000000000000000000000LL20000000000000000000000000000000000000000000000000000000000000000LLL000LL00000020000000000 + 00000000000000000000000000L000000L6C00000000000000000000000000000000L1222222222222222222222222222222222222222222222222222222222222222222222222222222220000000000 + 00000000000000000000000000L0000000F0000000000000000000000000000000001HHHHHHHHHHHHHHH1000000000000000000000000000000000000000000000000000000000LLLL00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000000LHHHHHHHHHHHHH11HHL0000000000000000000000000000000000000000000000000000000000LL00000000000000 + 0000000000000000000000000000000000000LL00000000000000000000000000001HHHHH1HHHHHHH11HH1000000000000000000000000000000000000000L0000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000000001HHHHHHHHHHHHH1HHH10000000000000L000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000000000L1HHHHHHHLLLHHHHHHH1L0000000000000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000000000LHH11HHHHLLLLHHHHHHHL1L00000000000000000000000000000LL0000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000000000LHHHHHHHHHLLHHHHHHH1L0000000000000000000000000000000LL0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000LL00000001HHHHHHHHHHHHHHHHH100000000000000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000002L0000000LHHHHHLLHHHHHHLHHHL00000000000000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000000LHHHHHHHHHHHHHHHHHL00000000000000000000000000000000000000000000000000000000000000000000000000 + + `, + ]) + collidable = false + pos = [0, 0] + offset = [0, 0] +} + +const scoreTexs = transformTextures([ + bitmap` + 22 + 2 2 + 2 2 + 2 2 + 2 2 + 2 2 + 22`, + bitmap` + 2 + 22 + 2 + 2 + 2 + 2 + 222`, + bitmap` + 22 + 2 2 + 2 + 2 + 2 + 2 + 2222`, + bitmap` + 2222 + 2 + 2 + 222 + 2 + 2 + 222`, + bitmap` + 2 + 22 + 2 2 + 2222 + 2 + 2 + 2`, + bitmap` + 2222 + 2 + 222 + 2 + 2 + 2 2 + 22`, + bitmap` + 2 + 2 + 2 + 222 + 2 2 + 2 2 + 22`, + bitmap` + 2222 + 2 + 2 + 2 + 2 + 2 + 2`, + bitmap` + 22 + 2 2 + 2 2 + 22 + 2 2 + 2 2 + 22`, + bitmap` + 22 + 2 2 + 2 2 + 222 + 2 + 2 + 2`, +]) + +class ScoreNumber extends Sprite { + textures = scoreTexs + offset = [0, 0] + pos = [0, 0] + collidable = false + constructor(pos, num) { + super() + this.pos = [pos * 5, 0] + this.currentTex = num + } +} + +function framesPerEnemy(s) { + if (s > 65000) return 2 + if (s > 40000) return 3 + if (s > 30000) return 7 + if (s > 23000) return 10 + if (s > 15000) return 15 + if (s > 10000) return 20 + if (s > 6000) return 25 + if (s > 4000) return 33 + if (s > 2500) return 40 + if (s > 1000) return 50 + return 60 +} + +function smallEnemyChance(s) { + if (s > 12000) return 0 + if (s > 9000) return 0.2 + if (s > 7500) return 0.4 + if (s > 3000) return 0.6 + if (s > 1500) return 0.8 + return 1 +} + +function velocityMultiplier(s) { + if (s > 60000) return 3 + if (s > 50000) return 2.5 + if (s > 30000) return 2 + if (s > 27000) return 1.7 + if (s > 20000) return 1.5 + if (s > 18000) return 1.3 + if (s > 16000) return 1.1 + return 1 +} + +const spriteLocMap = new Map() +const display = new Int8Array(160 * 128) +const getPixel = pos => String.fromCharCode(display[pos]) + +function drawSprite(sprite) { + const toDraw = sprite.texture + + const [xPos, yPos] = sprite.pos.map(Math.round) + const [xOffset, yOffset] = sprite.offset + + const collisionsDetected = new Set() + + for (let y = 0; y < toDraw.length; y++) + for (let x = 0; x < toDraw[y].length; x++) + if (toDraw[y].charCodeAt(x) !== space) { + // it's drawing time + const xp = x + xPos - xOffset + const yp = y + yPos - yOffset + if (xp < 0 || xp >= 160) continue + + const pos = yp * 160 + xp + const possibleCollision = spriteLocMap.get(pos) + if ( + possibleCollision && + !collisionsDetected.has(possibleCollision) && + possibleCollision !== sprite && + possibleCollision.collidable && + sprite.collidable + ) { + collisionsDetected.add(possibleCollision) + handleCollision(sprite, possibleCollision) + } + display[pos] = toDraw[y].charCodeAt(x) + spriteLocMap.set(pos, sprite) + } +} + +function starfieldLine(chance) { + const line = [] + for (let i = 0; i < 160; i++) line.push(Math.random() < chance) + return line +} + +const starfields = [] +const starcolours = [darkgrey, darkgrey, lightgrey, white] +const chances = [0.0005, 0.0015, 0.001, 0.0005] +const updateSpeed = [31, 5, 2, 1] + +for (const field in starcolours) { + starfields[field] = [] + for (let i = 0; i < 128; i++) + starfields[field].push(starfieldLine(chances[field])) +} + +// sprites +let ship = new Ship() +const paused = new Paused() +const gameOver = new GameOver() +const sprites = new Set() + +let gameState = "menu" +let score = 0 +let stage = 1 +let framesSinceLastUpdate = [0, 0, 0, 0] +let framesSinceLastBullet = 0 +let framesSinceLastEnemy = 60 + +// movement +let moveDirection = "" +onInput("a", () => { + if (gameState !== "playing") return + if (moveDirection) return + moveDirection = "left" +}) +onInput("d", () => { + if (gameState !== "playing") return + if (moveDirection) return + moveDirection = "right" +}) +window.addEventListener("keyup", e => { + if (gameState !== "playing") return + if (!e.key) return + if (e.key === "a" || e.key === "d") moveDirection = "" +}) + +onInput("i", () => { + if (gameState === "playing") return + if (gameState !== "paused") { + score = 0 + stage = 1 + framesSinceLastUpdate = [0, 0, 0, 0] + framesSinceLastBullet = 0 + framesSinceLastEnemy = 60 + sprites.clear() + ship = new Ship() + sprites.add(ship) + } + gameState = "playing" + moveDirection = "" + requestAnimationFrame(render) +}) +onInput("k", () => { + if (gameState !== "playing") return + gameState = "paused" +}) +onInput("l", () => { + if (["menu", "playing"].includes(gameState)) return + gameState = "menu" + requestAnimationFrame(render) +}) + +onInput("w", () => { + if (gameState !== "playing" || framesSinceLastBullet < 10) return + framesSinceLastBullet = 0 + sprites.add(new Bullet(ship.pos[0])) + playTune(bullet) +}) + +function handleCollision(...ss) { + const [a, b] = ss.sort((s1, s2) => + s1.constructor.name.localeCompare(s2.constructor.name) + ) + if (a instanceof Bullet && b instanceof Enemy) { + sprites.delete(a) + sprites.delete(b) + sprites.add(new Explosion(b.pos)) + sprites.add(new SmallEnemy(b.pos, b.velocity)) + score += 200 + playTune(randomExplode()) + } else if (a instanceof Bullet && b instanceof SmallEnemy) { + sprites.delete(a) + sprites.delete(b) + sprites.add(new Explosion(b.pos)) + score += 100 + playTune(randomExplode()) + } else if ( + (a instanceof Enemy && b instanceof Ship) || + (a instanceof Ship && b instanceof SmallEnemy) + ) { + sprites.delete(a) + sprites.add(new Explosion(a.pos)) + sprites.delete(b) + sprites.add(new Explosion(b.pos)) + gameState = "over" + playTune(randomExplode()) + } else if ( + a instanceof SmallEnemy && + b instanceof SmallEnemy && + a.immunity < 0 && + b.immunity < 0 + ) { + if (stage >= 4) return + sprites.delete(a) + sprites.add(new Explosion(a.pos)) + sprites.delete(b) + sprites.add(new Explosion(b.pos)) + playTune(randomExplode()) + } else if ( + a instanceof Enemy && + b instanceof SmallEnemy && + b.immunity < 0 + ) { + sprites.delete(a) + sprites.add(new SmallEnemy(a.pos, a.velocity, stage >= 4)) + if (stage >= 4) return + sprites.delete(b) + sprites.add(new Explosion(b.pos)) + playTune(randomExplode()) + } else if (a instanceof Enemy && b instanceof Enemy) { + sprites.delete(a) + sprites.delete(b) + sprites.add( + new SmallEnemy(a.pos, [-a.velocity[0], a.velocity[1]], stage >= 4) + ) + sprites.add( + new SmallEnemy(b.pos, [-b.velocity[0], b.velocity[1]], stage >= 4) + ) + } +} + +let lastFrame = 0 + +function paint() { + const legend = [] + const screen = [] + + for (let my = 0; my < 8; my++) { + for (let mx = 0; mx < 10; mx++) { + const char = String.fromCharCode(mx + my * 10 + 47) // start after . + + const bitmap = [] + for (let ly = 0; ly < 16; ly++) { + for (let lx = 0; lx < 16; lx++) + bitmap.push(getPixel((my * 16 + ly) * 160 + mx * 16 + lx)) + bitmap.push("\n") + } + + legend.push([char, bitmap.join("")]) + screen.push(char) + } + screen.push("\n") + } + + setLegend(...legend) + setMap(screen.join("")) +} + +let currentTune = null + +function render() { + if (Date.now() - lastFrame < 1000 / 30) { + // should we render? nah can't be botherd yet + requestAnimationFrame(render) + return + } + lastFrame = Date.now() + + display.fill(black) + spriteLocMap.clear() + + if (gameState === "menu") { + drawSprite(new Intro()) + paint() + currentTune = playTune(music, 99) + return + } + currentTune?.end() + currentTune = null + + // starfields + for (const field in starcolours) { + if (framesSinceLastUpdate[field] >= updateSpeed[field]) { + framesSinceLastUpdate[field] = 0 + + starfields[field].pop() + starfields[field].unshift(starfieldLine(chances[field])) + } + + for (let y = 0; y < 128; y++) + for (let x = 0; x < 160; x++) + if (starfields[field][y][x]) + display[y * 160 + x] = starcolours[field] + } + + function difficultyCalculation() { + if (stage < 2 && score > 15000) { + stage++ + // yellow score + for (const tex of scoreTexs) + for (const i in tex) tex[i] = tex[i].replaceAll("2", "6") + } + if (stage < 3 && score > 40000) { + stage++ + // red score + for (const tex of scoreTexs) + for (const i in tex) tex[i] = tex[i].replaceAll("6", "3") + } + if (stage < 4 && score > 70000) { + stage++ + // small sudden death + for (const tex of smallEnemyTexs) + for (const i in tex) tex[i] = suddenDeathify(tex[i]) + } + if (stage < 5 && score > 75000) { + stage++ + // sudden death + for (const tex of enemyTexs) + for (const i in tex) tex[i] = suddenDeathify(tex[i]) + } + } + + function spawnEnemies() { + const framesPerE = framesPerEnemy(score) + const velMult = velocityMultiplier(score) + const smallEChance = smallEnemyChance(score) + + if (framesSinceLastEnemy++ > framesPerE) { + const x = Math.random() * 240 - 40 + const velocity = [ + (Math.random() * 0.75 - 0.3) * Math.min(1, velMult - 1), + (Math.random() * 0.75 + 0.3) * velMult, + ] + + if (Math.random() < smallEChance) + sprites.add(new SmallEnemy([x, 0], velocity, stage >= 4)) + else sprites.add(new Enemy([x, 0], velocity, stage >= 5)) + framesSinceLastEnemy = 0 + } + } + + function updatePlayingSprites() { + if (ship.framesSinceLastTex++ > 7) { + ship.currentTex++ + ship.framesSinceLastTex = 0 + } + + if (moveDirection === "left") + // move ship + ship.pos[0] -= 1.5 + else if (moveDirection === "right") ship.pos[0] += 1.5 + + const o = ship.offset[0] + if (ship.pos[0] < o) ship.pos[0] = o + else if (ship.pos[0] > 160 - o + 1) ship.pos[0] = 160 - o + 1 + + score += 0.5 + } + + function updateSprites() { + // move bullets + const ss = [...sprites] + for (const b of ss.filter(s => s instanceof Bullet)) { + b.pos[1] -= 3 + if (b.pos[1] < 0) sprites.delete(b) + } + for (const e of ss.filter( + s => s instanceof Enemy || s instanceof SmallEnemy + )) { + if (e.suddenDeath) { + // accelerate towards the ship, muahahahha + e.velocity[0] += e.pos[0] < ship.pos[0] ? 0.02 : -0.02 + e.velocity[1] += 0.03 + } + e.pos[0] += e.velocity[0] + e.pos[1] += e.velocity[1] + if (e.pos[1] > 142) sprites.delete(e) + } + for (const e of ss.filter(s => s instanceof SmallEnemy)) e.immunity-- + for (const e of ss.filter(s => s instanceof Explosion)) { + if (e.framesSinceLastTex++ > 2) { + e.currentTex++ + e.framesSinceLastTex = 0 + } + if (e.currentTex >= e.textures.length) sprites.delete(e) + } + + framesSinceLastBullet++ + } + + if (gameState !== "paused") { + if (gameState === "playing") { + difficultyCalculation() + spawnEnemies() + updatePlayingSprites() + } + for (const field in starcolours) framesSinceLastUpdate[field]++ + updateSprites() + } + + for (const sprite of sprites) drawSprite(sprite) + + // stuff on top of everything else + const scoreStr = Math.floor(score).toString() + for (let i = 0; i < scoreStr.length; i++) + drawSprite(new ScoreNumber(i, +scoreStr[i])) + + if (gameState === "over") drawSprite(gameOver) + if (gameState === "paused") drawSprite(paused) + else requestAnimationFrame(render) + + paint() +} + +render() diff --git a/games/SprigbattleShip.js b/games/SprigbattleShip.js index 8aabcdf250..6d221fecde 100644 --- a/games/SprigbattleShip.js +++ b/games/SprigbattleShip.js @@ -1,10 +1,10 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started @title: SprigbattleShip @author: Legonathanjereb -@tags: ["classic"] +@tags: ['retro'] @addedOn: 2024-04-26 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started */ // based on battleship diff --git a/games/Sprigenstein3D.js b/games/Sprigenstein3D.js index b3c6e2ff86..e486828390 100644 --- a/games/Sprigenstein3D.js +++ b/games/Sprigenstein3D.js @@ -1,7 +1,7 @@ /* @title: Sprigenstein3D @author: TheBlueOomaLoompa -@tags: ['maze'] +@tags: ['puzzle'] @addedOn: 2024-07-22 */ /* diff --git a/games/Spriggly_Jump.js b/games/Spriggly_Jump.js index a060f99760..806c52b3b3 100644 --- a/games/Spriggly_Jump.js +++ b/games/Spriggly_Jump.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Spriggly Jump @author: GGGalang @tags: [] @addedOn: 2024-06-19 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Sprigressbar.js b/games/Sprigressbar.js index 7545a3bb9b..a6ad8ebabd 100644 --- a/games/Sprigressbar.js +++ b/games/Sprigressbar.js @@ -2,7 +2,7 @@ /* @title: Sprigressbar @author: MathR -@tags: ['advanced'] +@tags: [] @addedOn: 2023-08-21 */ diff --git a/games/SquidsInTheStars.js b/games/SquidsInTheStars.js index eeb1e2c312..aa410a17cd 100644 --- a/games/SquidsInTheStars.js +++ b/games/SquidsInTheStars.js @@ -1,6 +1,6 @@ /* @title: SquidsInTheStarts -@author: Lucas4680 +@author: Lucas4680 @tags: [] @addedOn: 2024-02-11 diff --git a/games/Squilium_Escape.js b/games/Squilium_Escape.js index 1eec6ab2c8..a1f90c2411 100644 --- a/games/Squilium_Escape.js +++ b/games/Squilium_Escape.js @@ -1,8 +1,8 @@ /* @title: Squilium_Escape +@author: Ali Mustafa @tags: [] @addedOn: 2023-01-06 -@author: Ali Mustafa Use WASD to move the player(s) around. use J to reset the level. The goal is to move every player into a X. A player can only move one box at a time. Try beat my highscore of 181 diff --git a/games/StarFruit.js b/games/StarFruit.js new file mode 100644 index 0000000000..cd3ab35aff --- /dev/null +++ b/games/StarFruit.js @@ -0,0 +1,1034 @@ +/* +@title: StarFruit +@author: irstupid +@tags: ['endless', 'retro'] +@addedOn: 2024-10-04 +*/ + +let player = "p" +const grass = "#" +const cherry = "1" +const orange = "2" +const lemon = "3" +const lime = "4" +const playerIdle = ` +.......00....... +......0660...... +......0660...... +.....066660..... +.....066660..... +0000006666000000 +0666666666666660 +.06666066066660. +..066666666660.. +...0606666060... +...0660000660... +...0666666660... +..066660066660.. +.066660..066660. +.06660....06660. +.0000......0000.` +const playerHold = ` +.00....00....00. +0660..0660..0660 +06660.0660.06660 +0666006666006660 +.06660666606660. +.06660666606660. +..066666666660.. +..066606606660.. +...0666666660... +...0606666060... +...0660000660... +...0666666660... +..066660066660.. +.066660..066660. +.06660....06660. +.0000......0000.` +const farmTL = "y" +const farmTR = "u" +const farmBL = "h" +const farmBR = "j" +const beetleW = "W" +const beetleA = "A" +const beetleS = "S" +const beetleD = "D" +setLegend( + [ beetleW, bitmap` +.0....0000....0. +070..022220..070 +.0..02022020..0. +.0..02222220..0. +..0.05522550.0.. +..007775577700.. +...0577557750... +.0.0777557770.0. +0700577557750070 +.0.0777557770.0. +...0577557750... +..007775577700.. +.0.0777557770.0. +.0..07755770..0. +070..000000..070 +.0............0.` ], + [ beetleA, bitmap` +.0......0.....0. +0700...070..0070 +.0..00..0..0..0. +.....00000000... +..000757575770.. +.02257777777770. +020257777777770. +022225555555550. +022225555555550. +020257777777770. +.02257777777770. +..000757575770.. +.....00000000... +.0..00..0..0..0. +0700...070..0070 +.0......0.....0.` ], + [ beetleS, bitmap` +.0............0. +070..000000..070 +.0..07755770..0. +.0.0777557770.0. +..007775577700.. +...0577557750... +.0.0777557770.0. +0700577557750070 +.0.0777557770.0. +...0577557750... +..007775577700.. +..0.05522550.0.. +.0..02222220..0. +.0..02022020..0. +070..022220..070 +.0....0000....0.` ], + [ beetleD, bitmap` +.0.....0......0. +0700..070...0070 +.0..0..0..00..0. +...00000000..... +..077575757000.. +.07777777775220. +.077777777752020 +.055555555522220 +.055555555522220 +.077777777752020 +.07777777775220. +..077575757000.. +...00000000..... +.0..0..0..00..0. +0700..070...0070 +.0.....0......0.` ], + [ player, bitmap` +.......00....... +......0660...... +......0660...... +.....066660..... +.....066660..... +0000006666000000 +0666666666666660 +.06666066066660. +..066666666660.. +...0606666060... +...0660000660... +...0666666660... +..066660066660.. +.066660..066660. +.06660....06660. +.0000......0000.` ], + [ cherry, bitmap` +................ +..00000......... +..0DDDD000...... +...000DDD00..... +.....0D0DD00.... +....00D000D0.... +....0D0..0D0.... +....0D0..0000... +...0000.033330.. +..0333303223330. +.03223330233330. +.03233330333330. +.03333330333330. +.0333333033330.. +..033330.0000... +...0000.........` ], + [ orange, bitmap` +................ +.....00......... +.....0C0........ +......0C000..... +......0C040..... +....00004000.... +...0999009990... +...0929092990... +..099299099990.. +..092999999990.. +..099999999990.. +..099999999990.. +...0999999990... +...0999999990... +....00999900.... +......0000......` ], + [ lemon, bitmap` +.........000.00. +......0006660660 +....00666F666660 +...066216666660. +..061226666F6F60 +..062666F6666660 +.0662F6666666660 +.0626666666F660. +.062F666F666660. +06666666666F660. +06F666F6666660.. +0666F6666F6660.. +.066666666660... +066666F66600.... +0660666000...... +.00.000.........` ], + [ lime, bitmap` +.........000.00. +......0004440440 +....00444D444440 +...044214444440. +..041224444D4D40 +..042444D4444440 +.0442D4444444440 +.0424444444D440. +.042D444D444440. +04444444444D440. +04D444D4444440.. +0444D4444D4440.. +.044444444440... +044444D44400.... +0440444000...... +.00.000.........` ], + [ grass, bitmap` +444444D44DD444D4 +4444D4D444D444D4 +4D44D4D4444444D4 +4D44D444444444D4 +4D44444D4DD444D4 +4D44D44D4D4444D4 +4D44D4444D444444 +44444444D4444D44 +44444444D44D4D44 +44D44D44D44D4D44 +44D44DD4444D444D +4D4444D44444444D +4D4444D44D44D44D +4D44D4D44D44D444 +4D44D4D44D44D444 +444444444444D444` ], + [ farmTL, bitmap` +................ +....000......... +...02220........ +..02C2C20..00000 +..0CC2CC00033333 +..0CC20033333333 +..0CC03333333333 +..0C033300000003 +..0C03330FF2FF03 +..00333302222203 +..0033330FF2FF03 +..00333302222203 +..0333330FF2FF03 +..03333300000003 +..03333333333333 +..03333330000000` ], + [ farmTR, bitmap` +................ +................ +................ +00000........... +33333000........ +3333333300...... +33333333330..... +300000003330.... +30FF2FF03330.... +3022222033330... +30FF2FF033330... +3022222033330... +30FF2FF0333330.. +30000000333330.. +33333333333330.. +00000003333330..` ], + [ farmBL, bitmap` +.0333333302FFF20 +.0333333302FFF20 +.033333330F2F2F0 +.033333330F2F2F0 +.033333330F2F2F0 +.033333330FF2FF0 +.033333330FF2FF0 +.033333330FF2FF0 +.033333330F2F2F0 +.033333330F2F2F0 +.033333330F2F2F0 +.0333333302FFF20 +.0333333302FFF20 +0000000000000000 +0LLLLLLLLLLLLLLL +0000000000000000` ], + [ farmBR, bitmap` +02FFF2033333330. +02FFF2033333330. +0F2F2F033333330. +0F2F2F033333330. +0F2F2F033333330. +0FF2FF033333330. +0FF2FF033333330. +0FF2FF033333330. +0F2F2F033333330. +0F2F2F033333330. +0F2F2F033333330. +02FFF2033333330. +02FFF2033333330. +0000000000000000 +LLLLLLLLLLLLLLL0 +0000000000000000` ], +) + +const level = map` +########## +########## +########## +####yu#### +####hj#### +########## +########## +##########` +//setBackground(grass); +setMap(level) + +addSprite(5, 5, player) +// addSprite(2, 2, beetleW) +// addSprite(2, 2, beetleW) +// addSprite(2, 2, beetleW) +// addSprite(2, 2, beetleW) + +onInput("w", () => { + if(!gameOver) + { + getFirst(player).y -= 1 + } +}) +onInput("a", () => { + if(!gameOver) + { + getFirst(player).x -= 1 + } +}) +onInput("s", () => { + if(!gameOver) + { + getFirst(player).y += 1 + } +}) +onInput("d", () => { + if(!gameOver) + { + getFirst(player).x += 1 + } +}) +onInput("l", () => { + if(!gameOver) + { + held = -1; + } + else + { + reset(); + } +}) + +function resetLegend(pType) +{ + setLegend( + [ beetleW, bitmap` +.0....0000....0. +070..022220..070 +.0..02022020..0. +.0..02222220..0. +..0.05522550.0.. +..007775577700.. +...0577557750... +.0.0777557770.0. +0700577557750070 +.0.0777557770.0. +...0577557750... +..007775577700.. +.0.0777557770.0. +.0..07755770..0. +070..000000..070 +.0............0.` ], + [ beetleA, bitmap` +.0......0.....0. +0700...070..0070 +.0..00..0..0..0. +.....00000000... +..000757575770.. +.02257777777770. +020257777777770. +022225555555550. +022225555555550. +020257777777770. +.02257777777770. +..000757575770.. +.....00000000... +.0..00..0..0..0. +0700...070..0070 +.0......0.....0.` ], + [ beetleS, bitmap` +.0............0. +070..000000..070 +.0..07755770..0. +.0.0777557770.0. +..007775577700.. +...0577557750... +.0.0777557770.0. +0700577557750070 +.0.0777557770.0. +...0577557750... +..007775577700.. +..0.05522550.0.. +.0..02222220..0. +.0..02022020..0. +070..022220..070 +.0....0000....0.` ], + [ beetleD, bitmap` +.0.....0......0. +0700..070...0070 +.0..0..0..00..0. +...00000000..... +..077575757000.. +.07777777775220. +.077777777752020 +.055555555522220 +.055555555522220 +.077777777752020 +.07777777775220. +..077575757000.. +...00000000..... +.0..0..0..00..0. +0700..070...0070 +.0.....0......0.` ], + [ player, pType ], + [ cherry, bitmap` +................ +..00000......... +..0DDDD000...... +...000DDD00..... +.....0D0DD00.... +....00D000D0.... +....0D0..0D0.... +....0D0..0000... +...0000.033330.. +..0333303223330. +.03223330233330. +.03233330333330. +.03333330333330. +.0333333033330.. +..033330.0000... +...0000.........` ], + [ orange, bitmap` +................ +.....00......... +.....0C0........ +......0C000..... +......0C040..... +....00004000.... +...0999009990... +...0929092990... +..099299099990.. +..092999999990.. +..099999999990.. +..099999999990.. +...0999999990... +...0999999990... +....00999900.... +......0000......` ], + [ lemon, bitmap` +.........000.00. +......0006660660 +....00666F666660 +...066216666660. +..061226666F6F60 +..062666F6666660 +.0662F6666666660 +.0626666666F660. +.062F666F666660. +06666666666F660. +06F666F6666660.. +0666F6666F6660.. +.066666666660... +066666F66600.... +0660666000...... +.00.000.........` ], + [ lime, bitmap` +.........000.00. +......0004440440 +....00444D444440 +...044214444440. +..041224444D4D40 +..042444D4444440 +.0442D4444444440 +.0424444444D440. +.042D444D444440. +04444444444D440. +04D444D4444440.. +0444D4444D4440.. +.044444444440... +044444D44400.... +0440444000...... +.00.000.........` ], + [ grass, bitmap` +444444D44DD444D4 +4444D4D444D444D4 +4D44D4D4444444D4 +4D44D444444444D4 +4D44444D4DD444D4 +4D44D44D4D4444D4 +4D44D4444D444444 +44444444D4444D44 +44444444D44D4D44 +44D44D44D44D4D44 +44D44DD4444D444D +4D4444D44444444D +4D4444D44D44D44D +4D44D4D44D44D444 +4D44D4D44D44D444 +444444444444D444` ], + [ farmTL, bitmap` +444D44444444D44D +444D00044D44D44D +444022204D44D444 +D402C2C20D400000 +D40CC2CC00033333 +440CC20033333333 +440CC03333333333 +440C033300000003 +4D0C03330FF2FF03 +4D00333302222203 +4D0033330FF2FF03 +4D00333302222203 +440333330FF2FF03 +D403333300000003 +D403333333333333 +D403333330000000` ], + [ farmTR, bitmap` +4D4444444D44444D +4D444D444D44444D +4D444D444D444D44 +00000D444D4D4D44 +333330004D4D4D4D +33333333004D444D +333333333304444D +3000000033304D4D +30FF2FF033304D44 +3022222033330D44 +30FF2FF033330D44 +3022222033330D44 +30FF2FF033333044 +300000003333304D +333333333333304D +000000033333304D` ], + [ farmBL, bitmap` +40333333302FFF20 +40333333302FFF20 +4033333330F2F2F0 +4033333330F2F2F0 +4033333330F2F2F0 +4033333330FF2FF0 +4033333330FF2FF0 +D033333330FF2FF0 +D033333330F2F2F0 +D033333330F2F2F0 +4033333330F2F2F0 +40333333302FFF20 +40333333302FFF20 +0000000000000000 +0LLLLLLLLLLLLLLL +0000000000000000` ], + [ farmBR, bitmap` +02FFF20333333304 +02FFF20333333304 +0F2F2F0333333304 +0F2F2F033333330D +0F2F2F033333330D +0FF2FF033333330D +0FF2FF033333330D +0FF2FF033333330D +0F2F2F0333333304 +0F2F2F0333333304 +0F2F2F0333333304 +02FFF20333333304 +02FFF20333333304 +0000000000000000 +LLLLLLLLLLLLLLL0 +0000000000000000` ], +) +} + +const melody = tune` +375: E4~375 + C5/375 + A5^375, +375: A4~375 + D5/375 + G5^375, +375: F4~375 + E5/375 + A5^375, +375: A4~375 + D5/375 + G5^375, +375: E4~375 + C5/375 + F5^375, +375: A4~375, +375: F4~375, +375: A4~375, +375: E4~375 + C5/375, +375: A4~375 + D5/375, +375: F4~375 + E5/375, +375: A4~375 + D5/375, +375: E4~375 + C5/375, +375: A4~375 + E5-375, +375: F4~375 + D5-375, +375: A4~375 + E5-375, +375: E4~375 + C5/375, +375: D5/375 + A4~375, +375: E5/375 + F4~375, +375: D5/375 + A4~375, +375: C5/375 + E4~375, +375: E5-375 + A4~375, +375: E5-375 + F4~375, +375: E5-375 + A4~375, +375: C5/375 + E4~375 + A5^375, +375: D5/375 + A4~375 + G5^375, +375: E5/375 + F4~375 + A5^375, +375: D5/375 + A4~375 + B5^375, +375: C5/375 + E4~375 + A5^375, +375: E5-375 + A4~375 + G5^375, +375: D5-375 + F4~375 + A5^375, +375: E5-375 + A4~375 + G5^375` +const menu = tune` +250: D4~250, +250: E4~250, +250: D4~250, +250: E4~250, +250: D4~250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250 + A4^250, +250: D4~250 + A4^250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250, +250: D4~250, +250: E4~250, +250: D4~250, +250: E4~250, +250: D4~250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250 + A4^250, +250: D4~250 + A4^250, +250: E4~250, +250: D4~250 + A4^250, +250: E4~250` +const scoreSound = tune` +125: A5/125, +125: B5^125 + A5-125, +3750` +const scoreSound1 = tune` +125: F5/125, +125: G5^125 + F5-125, +3750` +const scoreSound2 = tune` +125: D5/125, +125: E5^125 + D5-125, +3750` +const scoreSound3 = tune` +125: B4/125, +125: C5^125 + B4-125, +3750` +const die = tune` +250: A5/250 + C5/250, +250: B5-250 + A5^250 + C5^250 + D5-250, +250: G5/250 + B4/250, +250: A5-250 + G5^250 + B4^250 + C5-250, +250: F5/250 + A4/250, +6750` +let background = playTune(melody, Infinity) + +let held = -1 +let heldType = -1 +let fruitSpawnTime = 0 +let beetleTime = 0 +let beetleSpawn = 0 +let score = 0 +let gameOver = false +let flash = 0; +let scores = new Array() +let difficulty = 15; + +var gameLoop = setInterval(() => { + clearText(); + scoreDissplay(); + flash--; + if(flash < 0) + { + flash = 30 + } + if(!gameOver) + { + spawnFruit(); + pickUp(); + hold(); + scoreFruit(); + bugHit(); + //addSprite(2, 2, beetleW) + moveBugs(); + let scoreText = score + " " + addText(scoreText, { x: 1, y: 0, color: color`0`, size: 2}); + } + else + { + let scoreText = score + " " + if(flash > 15) + { + addText(scoreText, { x: 1, y: 0, color: color`2`, size: 2}); + addText("gameOver", {y: 5, color: color`2`, size: 2}); + addText("press L to", {y: 10, color: color`2`, size: 2}); + addText("play again", {y: 11, color: color`2`, size: 2}); + } + else + { + addText(scoreText, { x: 1, y: 0, color: color`0`, size: 2}); + addText("gameOver", {y: 5, color: color`0`, size: 2}); + addText("press L to", {y: 10, color: color`0`, size: 2}); + addText("play again", {y: 11, color: color`0`, size: 2}); + } + } +}, 1); + +function reset() +{ + for(let i = 0; i < 10; i++) + { + for(let j = 0; j < 8; j++) + { + clearTile(i, j); + } + } + setMap(level); + addSprite(5, 5, player); + held = -1; + heldType = -1; + fruitSpawnTime = 0; + beetleTime = 0; + beetleSpawn = 0; + score = 0; + gameOver = false; + flash = 0; + scores = new Array(); + difficulty = 15; + background.end(); + background = playTune(melody, Infinity) +} + +function scoreDissplay() +{ + for(let i = 0; i < scores.length; i++) + { + let score = scores[i]; + score[1]--; + if(score[1] <= 0) + { + scores.shift(); + } + else + { + if(flash > 15) + { + addText(score[0], {x: score[2], y: score[2], color: color`0`, size: 2}); + } + else + { + addText(score[0], {x: score[2], y: score[2], color: color`2`, size: 2}); + } + } + } +} + +function bugHit() +{ + let bugs = [getAll(beetleW), getAll(beetleA), getAll(beetleS), getAll(beetleD)]; + let p = getFirst(player); + for(let j = 0; j < bugs.length; j++) + { + for(let i = 0; i < bugs[j].length; i++) + { + bug = bugs[j][i]; + if(bug.x == p.x && bug.y == p.y) + { + background.end(); + background = playTune(menu, Infinity) + playTune(die); + gameOver = true; + } + } + } +} + +function moveBugs() +{ + beetleTime--; + if(beetleTime <= 0) + { + beetleTime = 60; + beetleSpawn--; + moveBeetle(); + if(beetleSpawn <= 0) + { + beetleSpawn = difficulty; + if(difficulty > 5) + { + difficulty--; + } + addBeetle(); + } + } +} + +function addBeetle() +{ + //addSprite(Math.round(Math.random()) * 9, Math.floor(Math.random() * 8), beetleW) + if(Math.random() > 0.5) + { + if(Math.random() > 0.5) + { + addSprite(0, Math.floor(Math.random() * 8), beetleD); + } + else + { + addSprite(9, Math.floor(Math.random() * 8), beetleA); + } + } + else + { + if(Math.random() > 0.5) + { + addSprite(Math.floor(Math.random() * 10), 0, beetleS); + } + else + { + addSprite(Math.floor(Math.random() * 10), 7, beetleW); + } + } +} + +function moveBeetle() +{ + let beetles = [getAll(beetleW), getAll(beetleA), getAll(beetleS), getAll(beetleD)] + for (let j = 0; j < beetles.length; j++) + { + for (let i = 0; i < beetles[j].length; i++) + { + let beetle = beetles[j][i]; + let seed = Math.random(); + if(seed <= 0.5) + { + switch(j) + { + case(0): + if(beetle.y > 0) + { + beetle.y -= 1; + } + else + { + beetle.remove(); + } + break; + case(1): + if(beetle.x > 0) + { + beetle.x -= 1; + } + else + { + beetle.remove(); + } + break; + case(2): + if(beetle.y < 7) + { + beetle.y += 1; + } + else + { + beetle.remove(); + } + break; + case(3): + if(beetle.x < 9) + { + beetle.x += 1; + } + else + { + beetle.remove(); + } + break; + } + } + else + { + if(Math.random() >= 0.5) + { + switch(j) + { + case(0): + beetle.type = "A" + break; + case(1): + beetle.type = "S" + break; + case(2): + beetle.type = "D" + break; + case(3): + beetle.type = "W" + break; + } + } + else + { + switch(j) + { + case(0): + beetle.type = "D" + break; + case(1): + beetle.type = "W" + break; + case(2): + beetle.type = "A" + break; + case(3): + beetle.type = "S" + break; + } + } + } + } + } +} + +function scoreFruit() +{ + let fruits = [getAll(cherry), getAll(orange), getAll(lemon), getAll(lime)] + for (let j = 0; j < fruits.length; j++) + { + for (let i = 0; i < fruits[j].length; i++) + { + if(fruits[j][i].x > 3 && fruits[j][i].x < 6 && fruits[j][i].y > 2 && fruits[j][i].y < 5) + { + if(i == held && j == heldType) + { + held = -1; + } + let pScore = score; + switch(j) + { + case(3): + playTune(scoreSound); + score += 500; + case(2): + playTune(scoreSound1); + score += 300; + case(1): + playTune(scoreSound2); + score += 100; + case(0): + playTune(scoreSound3); + score += 100; + } + let scoreDiff = (score - pScore) + " "; + scores.push([scoreDiff, 100, Math.floor(Math.random() * 3) + 7, Math.floor(Math.random() * 3) + 7]); + fruits[j][i].remove(); + } + } + } +} + +function spawnFruit() +{ + fruitSpawnTime--; + if(fruitSpawnTime <= 0) + { + fruitSpawnTime = 200; + let seed = Math.random() + if(seed < 0.45) + { + addSprite(Math.floor(Math.random() * 10), Math.floor(Math.random() * 8), cherry); + } + if(seed > 0.45 && seed < 0.75) + { + addSprite(Math.floor(Math.random() * 10), Math.floor(Math.random() * 8), orange); + } + if(seed > 0.75 && seed < 0.90) + { + addSprite(Math.floor(Math.random() * 10), Math.floor(Math.random() * 8), lemon); + } + if(seed > 0.95) + { + addSprite(Math.floor(Math.random() * 10), Math.floor(Math.random() * 8), lime); + } + } +} + +function hold() +{ + if(held >= 0) + { + resetLegend(playerHold) + let fruits = [getAll(cherry), getAll(orange), getAll(lemon), getAll(lime)]; + let p = getFirst(player) + let heldFruit = fruits[heldType][held]; + if(p.y < 1) + { + p.y = 1; + } + heldFruit.x = p.x; + heldFruit.y = p.y - 1; + } + else + { + resetLegend(playerIdle) + } +} + +function pickUp() +{ + let fruits = [getAll(cherry), getAll(orange), getAll(lemon), getAll(lime)] + let p = getFirst(player); + for (let j = 0; j < fruits.length; j++) + { + for (let i = 0; i < fruits[j].length; i++) + { + if(fruits[j][i].x == p.x && fruits[j][i].y == p.y) + { + held = i; + heldType = j; + } + } + } +} + diff --git a/games/StickRunner.js b/games/StickRunner.js index 965fb21996..12a129318e 100644 --- a/games/StickRunner.js +++ b/games/StickRunner.js @@ -2,7 +2,7 @@ /* @title: StickRunner @author: Shahzeb Wali -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-12-10 */ diff --git a/games/Stickman.js b/games/Stickman.js index 3ad57abc1f..204ed42b6f 100644 --- a/games/Stickman.js +++ b/games/Stickman.js @@ -1,11 +1,11 @@ /* -STICKMAN -Part 1 - @title: Stickman @author: Benjamin Faershtein -@tags: ['stickman'] +@tags: [] @addedOn: 2024-07-26 +STICKMAN +Part 1 + */ const player = "p" diff --git a/games/Stop.js b/games/Stop.js index 948b9dc3c5..05201f8118 100644 --- a/games/Stop.js +++ b/games/Stop.js @@ -1,8 +1,8 @@ /* @title: Stop -@tags: ['puzzle-npc'] -@addedOn: 2022-12-07 @author: wyn-cmd +@tags: ['puzzle'] +@addedOn: 2022-12-07 */ diff --git a/games/Street_Racer.js b/games/Street_Racer.js index 8106e2ca3d..c8d4eab538 100644 --- a/games/Street_Racer.js +++ b/games/Street_Racer.js @@ -1,8 +1,8 @@ /* @title: Street Racer -@tags: ['dodge'] -@addedOn: 2023-02-24 @author: Cdogo +@tags: ['action'] +@addedOn: 2023-02-24 Instructions: diff --git a/games/SuperFighters.js b/games/SuperFighters.js index ab9b211be3..d545c26c28 100644 --- a/games/SuperFighters.js +++ b/games/SuperFighters.js @@ -1,995 +1,1666 @@ -/* -@title: SuperFighters -@author: retrooper -@tags: ['shooter', 'platformer', 'fighting', 'singleplayer'] -@addedOn: 2024-08-15 -*/ - -// Constants -const gameTitle = "Superfighters v1"; -const gameTitleColor = { y: 1, color: `5` }; -const startingLives = 5; -const movementDelay = 150; -const shootDelay = 1000; -const soundDelay = 100; -const jumpDuration = 280; - -// Game data -let level = 0; -let jumping = false; -let changingLevels = false; -let lives = startingLives; - -// Internal variables -let lastParticleSound = Date.now(); -let lastLeftMovement = Date.now(); -let lastRightMovement = Date.now(); -let lastShot = Date.now(); - -// Sprite data -const rightFacingPlayer = "p"; -const leftFacingPlayer = "l"; -const rightPunchingPlayer = "r"; -const leftPunchingPlayer = "n"; - -const npcFacingRight = "P"; -const npcFacingLeft = "L"; -const npcEvilLeft = "k"; -const npcEvilRight = "K"; - -const box = "b"; -const bedrock = "B"; -const ladder = "c"; -const fireParticle = "f"; -const bullet = "m"; -const heart = "h"; -const sky = "s"; - -let player = rightFacingPlayer; - -let happySound = tune` -193.5483870967742: B5~193.5483870967742, -6000`; - -let explosionSound = tune` -500: A5^500, -15500`; - -let victoryMusic = tune` -333.3333333333333: G5~333.3333333333333, -333.3333333333333: B5~333.3333333333333, -333.3333333333333: G5~333.3333333333333, -666.6666666666666, -333.3333333333333: D5~333.3333333333333, -333.3333333333333: F5~333.3333333333333, -333.3333333333333: D5~333.3333333333333, -666.6666666666666, -333.3333333333333: G5~333.3333333333333, -333.3333333333333: B5~333.3333333333333, -333.3333333333333: G5~333.3333333333333, -666.6666666666666, -333.3333333333333: D5~333.3333333333333, -333.3333333333333: F5~333.3333333333333, -333.3333333333333: D5~333.3333333333333, -666.6666666666666, -333.3333333333333: G5~333.3333333333333, -333.3333333333333: B5~333.3333333333333, -333.3333333333333: G5~333.3333333333333, -666.6666666666666, -333.3333333333333: D5~333.3333333333333, -333.3333333333333: F5~333.3333333333333, -333.3333333333333: D5~333.3333333333333, -1333.3333333333333`; - -let gameMusic = tune` -258.62068965517244: G4~258.62068965517244, -258.62068965517244: B4~258.62068965517244, -258.62068965517244: D5~258.62068965517244, -1293.1034482758623, -258.62068965517244: D5~258.62068965517244, -258.62068965517244: E5~258.62068965517244, -258.62068965517244: G5~258.62068965517244, -1293.1034482758623, -258.62068965517244: G4~258.62068965517244, -258.62068965517244: B4~258.62068965517244, -258.62068965517244: D5~258.62068965517244, -1293.1034482758623, -258.62068965517244: D5^258.62068965517244, -258.62068965517244: E5^258.62068965517244, -258.62068965517244: G5^258.62068965517244, -258.62068965517244: D5~258.62068965517244, -1034.4827586206898`; - -const playback = playTune(gameMusic, Infinity); - -setLegend( - [ - rightFacingPlayer, - bitmap` -.....000000..... -....00CCCC00.... -....00020020.... -....0C00C00..... -..0000CCCC0000.. -..000000000000.. -..000022222000.. -..000002002000.. -..000CC0002CC0.. -..000CC0000CC0.. -...00000000000.. -......00000..... -......000000.... -.....000...00... -.....00....00... -.....000...000..`, - ], - [ - leftFacingPlayer, - bitmap` -.....000000..... -.....0CCCC00.... -.....2002000.... -.....00C00C0.... -..0000CCCC0000.. -..000000000000.. -..000222220000.. -..000200200000.. -..000200000000.. -..000000000000.. -..CCC000000CCC.. -.....00000...... -....000000...... -...00...000..... -...00....00..... -..000...000.....`, - ], - [ - rightPunchingPlayer, - bitmap` -.....000000..... -....00CCCC00.... -....00030030.... -....0C00C00..... -..000CCCCC00000. -..00000000000000 -..00002222200CCC -..0000020000.CCC -..0CC0000000.... -..0CC0000000.... -..000000000..... -.....000000..... -.....0000000.... -.....00...00.... -.....00...00.... -.....000..000...`, - ], - [ - leftPunchingPlayer, - bitmap` -.....000000..... -.....0CCCC00.... -.....3003000.... -.....00C00C0.... -CC0000CCCCC0.... -CC000000000000.. -CC0002222200000. -.....0002000000. -.....0000000CC0. -.....0000000CC0. -.....000000.00.. -.....000000..... -.....000000..... -......00.000.... -......00..000... -.....000...00...`, - ], - [ - npcFacingRight, - bitmap` -....00000000.... -....05555550.... -....05555550.... -....05225220.... -000055555550.... -055555555550.... -055555555550000. -055000055555550. -055555055555550. -055555055555550. -000000055555550. -......055500000. -.....0555500.... -.....0555550.... -....05555550.... -...0055555500...`, - ], - [ - npcFacingLeft, - bitmap` -....00000000.... -....05555550.... -....05555550.... -....022522500... -....055555550... -00000555555500.. -055505555555500. -055555555005550. -005555555055550. -..0055555055500. -...00555505000.. -....00555050.... -....0055550..... -....0555550..... -....05555550.... -...0055555500...`, - ], - [ - npcEvilLeft, - bitmap` -....00000000.... -....05555550.... -....05555550.... -....033533500... -....055555550... -97000555555500.. -777505555555500. -075555555005550. -005555555055550. -..0055555055500. -...00555505000.. -....00555050.... -....0055550..... -....0555550..... -....05555550.... -...0055555500...`, - ], - [ - npcEvilRight, - bitmap` -....00000000.... -....05555550.... -....05555550.... -...005335330.... -...055555550..00 -..00555555500000 -.005555555505736 -.055500555555573 -.055550555555500 -.0055505555500.. -..00050555500... -....05055500.... -.....0555500.... -.....0555550.... -....05555550.... -...0055555500...`, - ], - [ - box, - bitmap` -0000000000000000 -0..............0 -0.HHHHHHHHHHHH.0 -0.H0000000000H.0 -0.H0999999090H.0 -0.H0999990900H.0 -0.H0999909090H.0 -0.H0999090990H.0 -0.H0990909990H.0 -0.H0909099990H.0 -0.H0090999990H.0 -0.H0909999990H.0 -0.H0000000000H.0 -0.HHHHHHHHHHHH.0 -0..............0 -0000000000000000`, - ], - [ - bedrock, - bitmap` -0000LLLL00LLL000 -000LL000LLLLL100 -0LLLLLLLLLLLL110 -LLLLLLLLLLLLLL0L -LL00LLLLL00LL0LL -L0LLLLLLLLL00LLL -LLLLLLLLLLL0LLLL -LLLLLLLLLL0LLLLL -LLLLL0LLL0LLL0LL -LLL00LLL0LLLL0LL -LL0LLLLLLLLL0LLL -00LLLLLLLLLLLLLL -0LLLLLLL000LLLLL -LLLLL000LLLLLLLL -00LLLLLLLLLLLLL0 -000LLLLLLLLLL000`, - ], - [ - ladder, - bitmap` -.LLLL......LLLL. -.LLLL222LLLLLLL. -.LLLLLLLLLLLL2L. -.L1LL......LL2L. -.L1LL......LL2L. -.L1LLLLLLLLLLLL. -.LLLLLLLLLLLLLL. -.LLLL......LLLL. -.LLLL......L2LL. -.LLLLLLLLLLL2LL. -.LLLLLLLLLLL2LL. -.LLLL......L2LL. -.LLLL......LLLL. -.LL2LLLLLLLLLLL. -.LL2LLLLLLLLLLL. -.LL2L......LLLL.`, - ], - [ - fireParticle, - bitmap` -..9....99....9.. -....999999...... -...99966699..... -..9966626699.... -..9662266669.... -..9996662669.... -.996696662699... -.996269662669.99 -..96622966699..9 -..9666669969.... -..99966666999... -...999966699.... -.6..9999999..... -..6...9969...... -...6....9....... -......6.........`, - ], - [ - bullet, - bitmap` -................ -................ -................ -................ -................ -................ -................ -......96F6...... -......F666...... -................ -................ -................ -................ -................ -................ -................`, - ], - [ - heart, - bitmap` -.0000000.0000003 -0332283303322280 -0388888333888830 -0888888338888830 -0888888888888830 -0888288888888880 -0888288888888880 -0388828888888880 -0388888888888830 -0338888888888830 -.033888888888330 -..03888888883330 -..0338888883300. -.H.0388888830H.. -....03388830.... -H....000000...H.`, - ], - [ - sky, - bitmap` -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222`, - ] -); - -setBackground(sky); - -setSolids([rightFacingPlayer, leftFacingPlayer, box, bedrock]); - -const levels = [ - map` -............... -p......LP...... -..b..........cb -..b..........cb -..b..........cb`, - map` -............... -............... -............... -............... -............... -............... -.............cB -.............cB -p......LP..b.cB`, - map` -............... -............... -..............B -.........b...BB -.......b...bbBB -p.bbbbbbb....BB`, - map` -............... -............... -............... -............... -............... -.............P. -.............b. -............bB. -p......LL..b.B.`, - map` -............... -............... -............... -............... -............... -.............P. -.............b. -p...........bB. -bbbbbbbbbbbbbbb`, - map` -p.............. -bbbbbbbbbbbb.bb -bbbbbbbbbbbb.bb -bbbbbbbbbbbb.bb -bbbbbbbbbbbb.bb -bbbbbbbbbbbb.bb -bbbbbbbbbbbb... -bbbbbbbbbbbbbbb -BBBBBBBBBBBBBBB`, - map` -bbbbbbbbbbbbbbb -bbbbbbbbbbbbbbb -bbbbbbbbbbbbbbb -bbbbbbbbbbbbbbb -bbbbbbbbbbb.... -p...........bbb -bbbbbbbbbbbbbbb -BBBBBBBBBBBBBBB`, - map` -bbbbbbbbbbbbbbb -bbbbbbbbbbbb.bb -p...BP......... -BBB.Bbbb..bb.bb -bbB.b....Bbb.bb -bbB...BBBBbbbbb -bbBBBBbbbbbbbbb -bbbbbbbbbbbbbbb -BBBBBBBBBBBBBBB`, - map` -p.............. -bbbbbbbbbbbb.bb -bbbbbbbbbbbb.bb -bbbbbbbbbbbb.bb -bbbbbbbbbbbb.bb -bbbbbbbbbbbbbbb -bbbbbbbbbbbbbbb -bbbbbbbbbbbbbbb -BBBBBBBBBBBBBBB`, - map` -............... -............... -............... -............... -............... -............... -............... -............... -p..............`, -]; - -setMap(levels[level]); - -setPushables({ - [rightFacingPlayer]: [], - [leftFacingPlayer]: [], - [box]: [], -}); - -// Add game title text as the player loads into the game. -addText(gameTitle, gameTitleColor); - -/** - * Is the given type a living entity? - * @param {*} type Entity type - * @returns true or false - */ -function isEntity(type) { - return isNPC(type) || isPlayer(type); -} - -/** - * Is the given type an NPC? - * @param {*} type Entity type - * @returns true or false - */ -function isNPC(type) { - return ( - type == npcFacingLeft || - type == npcFacingRight || - type == npcEvilLeft || - type == npcEvilRight - ); -} - -/** - * Is the given type a player? - * @param {*} type Entity type - * @returns true or false - */ -function isPlayer(type) { - return ( - type == leftFacingPlayer || - type == rightFacingPlayer || - type == leftPunchingPlayer || - type == rightPunchingPlayer - ); -} - -/** - * Calculate the distance to the ground - * @param {*} player entity - * @returns distance to the ground - */ -function distanceToGround(player) { - let playerY = player.y; - let playerX = player.x; - - // Check tiles below the player - for (let i = playerY + 1; i < height(); i++) { - const tiles = getTile(playerX, i); - if (tiles.length != 0) { - for (let tile in tiles) { - if (tile.type != leftFacingPlayer && tile.type != rightFacingPlayer) - return i - playerY - 1; - } - } - } - - return height() - playerY - 1; -} - -/** - * Is the given entity on the ground? - * In other words, is their distance to the ground equal to zero/ - * @param {*} player player - * @returns is the player on the ground - */ -function isOnGround(player) { - return distanceToGround(player) == 0; -} - -/** - * Initiate an attack at a position - * @param {*} player player - * @param {*} entityX target X - * @param {*} entityY target Y - */ -function attackEntity(player, entityX, entityY) { - // Check sprite next to the player - getTile(entityX, entityY).forEach((tile) => { - // Confirm they are not destroying themselves! - if (isPlayer(tile.type)) return; - //If it bedrock, we cannot break it (easily) - if (tile.type == bedrock) { - spawnParticle(entityX, entityY, 0); - addSprite(entityX, entityY, bedrock); - } else { - // Destroy block next to them - clearTile(entityX, entityY); - spawnParticle(entityX, entityY, 0); - } - return; - }); -} - -/** - * Calculate the distance between two entities. - * @param {*} player player - * @param {*} entityX target entity X - * @param {*} entityY target entity Y - * @returns - */ -function distance(player, entityX, entityY) { - //d = sqrt(x^2 + y^2) - let playerX = player.x; - let playerY = player.y; - let xDelta = playerX - entityX; - let yDelta = playerY - entityY; - let distanceSq = xDelta * xDelta + yDelta * yDelta; - return Math.sqrt(distanceSq); -} - -/** - * Ellicit an attack from an NPC. - * Shoot a bullet. - * @param {*} shooter attacker - * @param {*} originX origin x - * @param {*} originY origin y - */ -function shootBullet(shooter, originX, originY) { - let currentTime = Date.now(); - if (currentTime - lastShot > shootDelay) { - lastShot = currentTime; - //TODO Possibly add shooting functionality for players - if ( - shooter.type == npcFacingLeft || - shooter.type == leftFacingPlayer || - shooter.type == npcEvilLeft - ) { - addSprite(originX, originY, bullet); - } else if ( - shooter.type == npcFacingRight || - shooter.type == rightFacingPlayer || - shooter.type == npcEvilRight - ) { - addSprite(originX, originY, bullet); - } - } -} - -/** - * - * @param {*} particleX X position of the spawned particle - * @param {*} particleY Y position of the spawned particle - * @param {*} type Sound type (e.g. explosion, happy) - */ -function spawnParticle(particleX, particleY, type) { - // Calculate time elapsed since last sound effect - let currentTime = Date.now(); - if (currentTime - lastParticleSound > soundDelay) { - lastParticleSound = currentTime; - - // Spawn the corresponding particle - if (type == 0) { - playTune(explosionSound); - addSprite(particleX, particleY, fireParticle); - var tempInterval = setInterval(() => { - // Destroy particle later - getTile(particleX, particleY).forEach((sprite) => { - if (sprite.type == fireParticle) { - sprite.remove(); - } - }); - clearInterval(tempInterval); - }, 100); - } else if (type == 1) { - playTune(happySound); - addSprite(particleX, particleY, heart); - var tempInterval = setInterval(() => { - // Destroy particle later - getTile(particleX, particleY).forEach((sprite) => { - if (sprite.type == heart) { - sprite.remove(); - } - }); - clearInterval(tempInterval); - }, 100); - } - } -} - -// Handle right punch -onInput("l", () => { - if (!player || !getFirst(player)) return; - let particleX = getFirst(player).x + 1; - let particleY = getFirst(player).y; - // Are they facing in the right direction (so they can attack in that direction) - if (getFirst(player).type == rightFacingPlayer) { - // Switch to the punching animation - getFirst(player).type = rightPunchingPlayer; - player = rightPunchingPlayer; - attackEntity(player, particleX, particleY); - } - var intervalId = setInterval(() => { - if ( - player && - getFirst(player) && - getFirst(player).type == rightPunchingPlayer - ) { - getFirst(player).type = rightFacingPlayer; - player = rightFacingPlayer; - } - clearInterval(intervalId); - }, 200); -}); - -// Handle left punch -onInput("j", () => { - if (!player || !getFirst(player)) return; - let particleX = getFirst(player).x - 1; - let particleY = getFirst(player).y; - // Are they facing in the left direction? (to be able to punch left) - if (getFirst(player).type == leftFacingPlayer) { - // Switch to the punching animation - getFirst(player).type = leftPunchingPlayer; - player = leftPunchingPlayer; - attackEntity(player, particleX, particleY); - } - var intervalId = setInterval(() => { - if ( - player && - getFirst(player) && - getFirst(player).type == leftPunchingPlayer - ) { - getFirst(player).type = leftFacingPlayer; - player = leftFacingPlayer; - } - clearInterval(intervalId); - }, 200); -}); - -// Jump functionality -onInput("w", () => { - if (!player || !getFirst(player)) return; - - // Is the player on ground (and not jumping) - let onGround = isOnGround(getFirst(player)); - if (!jumping && onGround) { - //Increase y - getFirst(player).y -= 1; - jumping = true; - - // Keep them in the air for some time. - var intervalId = setInterval(() => { - if (!getFirst(player)) return; - let lastPlayerY = getFirst(player).y; - let onGround = isOnGround(getFirst(player)); - if (!onGround) { - // Push them up - getFirst(player).y = lastPlayerY; - } - clearInterval(intervalId); - jumping = false; - }, jumpDuration); - } -}); - -// Handle left directional movement -onInput("a", () => { - if (!player || !getFirst(player)) return; - - let currentTime = Date.now(); - if (currentTime - lastLeftMovement >= movementDelay) { - lastLeftMovement = currentTime; - - if (player && getFirst(player).type != "l") { - getFirst(player).type = leftFacingPlayer; - player = leftFacingPlayer; - } - // Move to the left direction - getFirst(player).x -= 1; - } -}); - -// Handle right directional movement -onInput("d", () => { - if (!player || !getFirst(player)) return; - - let currentTime = Date.now(); - if (currentTime - lastRightMovement >= movementDelay) { - lastRightMovement = currentTime; - if (player && getFirst(player).type != rightFacingPlayer) { - getFirst(player).type = rightFacingPlayer; - player = rightFacingPlayer; - } - // Move to the right direction - getFirst(player).x += 1; - } -}); - -// Gravity handler -setInterval(() => { - // Gravity for all living entities! - getAll().forEach((entity) => { - if (isEntity(entity.type)) { - // Don't apply gravity to the player as they are jumping - if (isPlayer(entity.type) && jumping) return; - let onGround = isOnGround(entity); - if (!onGround) { - // Move downward - entity.y += 1; - } - } - }); -}, 30); - -function gameReset() { - // Handle player death - if (lives <= 0 && !changingLevels) { - // Reset level - level = 0; - clearText(); - - // Destroy all entities (except the player) - getAll().forEach((entity) => { - if (!isPlayer(entity.type)) { - entity.remove(); - } - }); - // Load the world - setMap(levels[level]); - - //Reset lives & jumping state - lives = startingLives; - jumping = false; - - //Add game title text - addText(gameTitle, gameTitleColor); - } -} - -// Moving entity handler -setInterval(() => { - if (!player || !getFirst(player)) return; - - // Process entity proximity detection (NPC player tracing logic) - getAll().forEach((entity) => { - // Loop over all NPCs - if (!isNPC(entity.type)) return; - // Calculate distance to the player - let dist = distance(getFirst(player), entity.x, entity.y); - // Once the player comes in close proximity, make them look at the player - if (dist < 7) { - // Evaluate direction of player using delta x (as it is a 2D game) - let right = getFirst(player).x - entity.x > 0; - if (right) { - entity.type = npcEvilRight; - } else { - entity.type = npcEvilLeft; - } - shootBullet(entity, entity.x, entity.y); - } - }); - - // Process moving bullets - getAll().forEach((entity) => { - if (!getFirst(player)) return; - //Is the entity a bullet? - if (entity.type == bullet) { - // Calculate difference to player - let xDiff = getFirst(player).x - entity.x; - let removedEntity = false; - //Find all entities in game - getTile(entity.x, entity.y).forEach((obstacle) => { - // If the bullet did not hit an NPC (since they are the shooters) - // Also check if the obstacle is not the same bullet. - if (obstacle.type != bullet && !isNPC(obstacle.type)) { - entity.remove(); - removedEntity = true; - // Spawn the heart particle if it was a player, - // Spawn the explosion particle otherwise - spawnParticle(entity.x, entity.y, isPlayer(obstacle.type) ? 1 : 0); - if (isPlayer(obstacle.type)) { - lives--; - if (lives == 0) { - gameReset(); - } - } - return; - } - }); - if (removedEntity) return; - // Move the bullet toward the player - entity.x += xDiff > 0 ? 1 : -1; - - // Destroy bullets meeting the edge - if (entity.x == width() - 1 || entity.x == 0) { - var interval = setInterval(() => { - spawnParticle(entity.x, entity.y, 0); - entity.remove(); - clearInterval(interval); - }, 200); - } - } - }); -}, 300); - -// Level changing handler, Player death handler, Lives rendering handler -setInterval(() => { - if (!player || !getFirst(player)) return; - - // Changing levels functionality (if they reach the edge) - if (getFirst(player).x == width() - 1) { - if (!levels[level + 1]) return; - changingLevels = true; - - // Show new loading text... - clearText(); - addText("Loading new level...", { y: 4, color: `4` }); - - // Shift all entities to the left - getAll().forEach((entity) => { - if ( - entity.type != bullet && - entity.type != fireParticle && - entity.type != heart && - !isPlayer(entity) - ) { - // If the entity has not reached the left side, keep pushing them - if (entity.x != 0) { - entity.x--; - // Push the player to the right side (keep them on the right side) - getFirst(player).x++; - } - // The moment an entity reaches the left side, we destroy it. - if (entity.x == 0) { - entity.remove(); - } - } - }); - } - - let moreLevelsExist = level < levels.length - 1; - // Once we complete the level changing transition... (and the player is the only one alive) - if (changingLevels && getAll().length == 1 && moreLevelsExist) { - // Load the new level map - level++; - setMap(levels[level]); - changingLevels = false; - - let isFinalLevel = level == levels.length - 1; - - // Clear text from previous level - clearText(); - - switch (level) { - case 1: - addText("Not bad...", { y: 3, color: `4` }); - addText("Can you beat this?", { y: 4, color: `3` }); - break; - case 2: - addText("It gets harder...", { y: 4, color: `3` }); - break; - case 5: - addText("Go down", { y: 2, color: `3` }); - break; - case 6: - addText("What is next?...", { y: 2, color: `5` }); - break; - } - - if (level == levels.length - 1) { - addText("You win!", { y: 3, color: `4` }); - } - - if (isFinalLevel) { - playback.end(); - playTune(victoryMusic, Infinity); - } - } - if (changingLevels) return; - - // Render lives on the screen - let text = "Lives: " + lives; - if (level < levels.length - 1) { - addText(text, { x: width() - 3, y: 5, color: `5` }); - } -}, 40); - +/* +@title: SuperFighters +@author: retrooper +@tags: ['action','platformer'] +@addedOn: 2024-08-15 +*/ + +// Constants +const gameTitle = "SuperFighters"; +const gameTitleColor = { y: 1, color: color`3` }; +const startingLives = 5; +const movementDelay = 150; +const shootDelay = 1000; +const soundDelay = 100; +const jumpDuration = 280; + +// Game data +let level = 0; +let inMenu = true; +let jumping = false; +let changingLevels = false; +let lives = startingLives; +let gravityDown = true; +let hasMagnet = false; +let hasGun = false; + +// Internal variables +let lastParticleSound = Date.now(); +let lastLeftMovement = Date.now(); +let lastRightMovement = Date.now(); +let lastShot = Date.now(); +let lastPlayerShot = Date.now(); + +// Sprite data +const rightPunchingPlayer = "r"; +const leftPunchingPlayer = "n"; +const rightFacingMagnetPlayer = "H"; +const leftFacingMagnetPlayer = "O"; + +const npcFacingRight = "P"; +const npcFacingLeft = "L"; +const npcEvilLeft = "k"; +const npcEvilRight = "K"; + +const box = "b"; +const bedrock = "B"; +const ladder = "c"; +const fireParticle = "f"; +const bullet_left = "m"; +const bullet_right = "M"; +const heart = "h"; +const magnet = "0"; +const gun = "1"; +const player_bullet_left = "2"; +const player_bullet_right = "3"; +const sky_light = "4"; +const sky_dark = "5"; +const sky_black = "6"; +const leftFacingGunPlayer = "7"; +const rightFacingGunPlayer = "8"; +const rightFacingPlayer_A = "p"; +const leftFacingPlayer_A = "l"; +const rightFacingPlayer_B = "i"; +const leftFacingPlayer_B = "y"; + +let RIGHT_FACING_PLACEHOLDER = rightFacingPlayer_A; +let LEFT_FACING_PLACEHOLDER = leftFacingPlayer_A; + +let player = null; + +let happySound = tune`3`; + +let explosionSound = tune` +500: D5^500, +15500`; + +let victoryMusic = tune` +140.8450704225352: D4~140.8450704225352 + D5/140.8450704225352 + A5/140.8450704225352 + F5/140.8450704225352, +140.8450704225352, +140.8450704225352: F4~140.8450704225352, +140.8450704225352, +140.8450704225352: A4~140.8450704225352, +140.8450704225352, +140.8450704225352: C5~140.8450704225352, +140.8450704225352, +140.8450704225352: E4~140.8450704225352 + E5/140.8450704225352 + G5/140.8450704225352 + B5/140.8450704225352, +140.8450704225352, +140.8450704225352: G4~140.8450704225352, +140.8450704225352, +140.8450704225352: B4~140.8450704225352, +140.8450704225352, +140.8450704225352: D5~140.8450704225352, +140.8450704225352, +140.8450704225352: F4~140.8450704225352 + F5/140.8450704225352 + A5/140.8450704225352 + C5/140.8450704225352, +140.8450704225352, +140.8450704225352: A4~140.8450704225352, +140.8450704225352, +140.8450704225352: C5~140.8450704225352, +140.8450704225352, +140.8450704225352: E5~140.8450704225352, +140.8450704225352, +140.8450704225352: G5~140.8450704225352 + G4/140.8450704225352 + E4/140.8450704225352 + C4/140.8450704225352, +140.8450704225352: E5~140.8450704225352, +140.8450704225352: C5~140.8450704225352, +140.8450704225352, +140.8450704225352: G4~140.8450704225352, +140.8450704225352, +140.8450704225352: C5~140.8450704225352 + C4/140.8450704225352 + G4/140.8450704225352 + E4/140.8450704225352 + E5/140.8450704225352, +140.8450704225352`; + +let loadingMusic = victoryMusic; + +let gameMusic = tune` +140.8450704225352: D5~140.8450704225352 + D4/140.8450704225352 + F4/140.8450704225352 + A4^140.8450704225352, +140.8450704225352, +140.8450704225352: F5~140.8450704225352 + A4^140.8450704225352, +140.8450704225352: A5~140.8450704225352, +140.8450704225352, +140.8450704225352: A4^140.8450704225352, +140.8450704225352: F5~140.8450704225352, +140.8450704225352, +140.8450704225352: C5~140.8450704225352 + C4/140.8450704225352 + E4/140.8450704225352 + G4^140.8450704225352, +140.8450704225352, +140.8450704225352: E5~140.8450704225352 + G4^140.8450704225352, +140.8450704225352: G5~140.8450704225352, +140.8450704225352, +140.8450704225352: G4^140.8450704225352, +140.8450704225352: E5~140.8450704225352, +140.8450704225352, +140.8450704225352: A4~140.8450704225352 + C4/140.8450704225352 + E4/140.8450704225352 + G4^140.8450704225352, +140.8450704225352, +140.8450704225352: C5~140.8450704225352 + G4^140.8450704225352, +140.8450704225352: E5~140.8450704225352, +140.8450704225352, +140.8450704225352: G4^140.8450704225352, +140.8450704225352: C5~140.8450704225352, +140.8450704225352, +140.8450704225352: G4~140.8450704225352 + D4/140.8450704225352 + D5/140.8450704225352 + A4^140.8450704225352, +140.8450704225352: B4~140.8450704225352, +140.8450704225352: B4~140.8450704225352, +140.8450704225352: D5~140.8450704225352, +140.8450704225352: B4~140.8450704225352 + D4/140.8450704225352 + F5/140.8450704225352 + G4^140.8450704225352, +140.8450704225352: G4~140.8450704225352, +140.8450704225352: G5~140.8450704225352, +140.8450704225352: G4~140.8450704225352`; + +let playback = playTune(loadingMusic, Infinity); + +setLegend( + [ + rightFacingPlayer_A, + bitmap` +.....000000..... +....00CCCC00.... +....00020020.... +....0C00C00..... +..0000CCCC0000.. +..000000000000.. +..000022222000.. +..000002002000.. +..000CC0002CC0.. +..000CC0000CC0.. +...00000000000.. +......00000..... +......000000.... +.....000...00... +.....00....00... +.....000...000..`, + ], + [ + leftFacingPlayer_A, + bitmap` +.....000000..... +.....0CCCC00.... +.....2002000.... +.....00C00C0.... +..0000CCCC0000.. +..000000000000.. +..000222220000.. +..000200200000.. +..000200000000.. +..000000000000.. +..CCC000000CCC.. +.....00000...... +....000000...... +...00...000..... +...00....00..... +..000...000.....`, + ], + [ + rightFacingPlayer_B, + bitmap` +.....33888H..... +....99CCCCHH.... +....9002002H.... +....9C00C00..... +..0000CCCC0000.. +..000000000000.. +..000022222000.. +..000002002000.. +..000CC0002CC0.. +..000CC0000CC0.. +...00005555000.. +.7....55555..... +606...005500.... +606..000...00... +.....00....00... +.....000...000..`, + ], + [ + leftFacingPlayer_B, + bitmap` +.....H88833..... +....HHCCCC99.... +....H2002009.... +.....00C00C9.... +..0000CCCC0000.. +..000000000000.. +..000222220000.. +..000200200000.. +..0CC2000CC000.. +..0CC0000CC000.. +..00055550000... +.....55555....7. +....005500...606 +...000..000..606 +...00....00..... +..000...000.....`, + ], + [ + rightFacingMagnetPlayer, + bitmap` +...000000....... +..00C0CC00...... +..00020020....00 +..0C00C00....030 +0000CCCC000.0331 +0000000000003331 +0000222220003330 +0000020020CC7330 +000CC00020CC7730 +000CC00000007771 +.0000000000.0771 +....00000....000 +....000000...... +...000...00..... +...00....00..... +...000...000....`, + ], + [ + leftFacingMagnetPlayer, + bitmap` +.......000000... +......00CC0C00.. +00....02002000.. +030....00C00C0.. +1330.000CCCC0000 +1333000000000000 +0333000222220000 +0337CC0200200000 +0377CC02000CC000 +17770000000CC000 +1770.0000000000. +000....00000.... +......000000.... +.....000..00.... +.....00....00... +....000...000...`, + ], + [ + rightFacingGunPlayer, + bitmap` +...000000....... +..00C0CC00...... +..00020020...... +..0C00C00....... +0000CCCC0..0000. +000000000..0LLL0 +000022222000LLL0 +0000020020CCL00. +000CC00020CC0... +000CC0000000.... +.0000000000..... +....00000....... +....000000...... +...000...00..... +...00....00..... +...000...000....`, + ], + [ + leftFacingGunPlayer, + bitmap` +.......000000... +......00CC0C00.. +......02002000.. +.......00C00C0.. +.0000..0CCCC0000 +0LLL0..000000000 +0LLL000222220000 +.00LCC0200200000 +...0CC02000CC000 +....0000000CC000 +.....0000000000. +.......00000.... +......000000.... +.....00...000... +.....00....00... +....000...000...`, + ], + [ + rightPunchingPlayer, + bitmap` +.....000000..... +....00CCCC00.... +....00030030.... +....0C00C00..... +..000CCCCC00000. +..00000000000000 +..00002222200CCC +..0000020000.CCC +..0CC0000000.... +..0CC0000000.... +..000000000..... +.....000000..... +.....0000000.... +.....00...00.... +.....00...00.... +.....000..000...`, + ], + [ + leftPunchingPlayer, + bitmap` +.....000000..... +.....0CCCC00.... +.....3003000.... +.....00C00C0.... +CC0000CCCCC0.... +CC000000000000.. +CC0002222200000. +.....0002000000. +.....0000000CC0. +.....0000000CC0. +.....000000.00.. +.....000000..... +.....000000..... +......00.000.... +......00..000... +.....000...00...`, + ], + [ + npcFacingRight, + bitmap` +....00000000.... +....05555550.... +....05555550.... +....05225220.... +000055555550.... +055555555550.... +055555555550000. +055000055555550. +055555055555550. +055555055555550. +000000055555550. +......055500000. +.....0555500.... +.....0555550.... +....05555550.... +...0055555500...`, + ], + [ + npcFacingLeft, + bitmap` +....00000000.... +....05555550.... +....05555550.... +....022522500... +....055555550... +00000555555500.. +055505555555500. +055555555005550. +005555555055550. +..0055555055500. +...00555505000.. +....00555050.... +....0055550..... +....0555550..... +....05555550.... +...0055555500...`, + ], + [ + npcEvilLeft, + bitmap` +....00000000.... +....05555550.... +....05555550.... +....033533500... +....055555550... +97000555555500.. +777505555555500. +075555555005550. +005555555055550. +..0055555055500. +...00555505000.. +....00555050.... +....0055550..... +....0555550..... +....05555550.... +...0055555500...`, + ], + [ + npcEvilRight, + bitmap` +....00000000.... +....05555550.... +....05555550.... +...005335330.... +...055555550..00 +..00555555500000 +.005555555505736 +.055500555555573 +.055550555555500 +.0055505555500.. +..00050555500... +....05055500.... +.....0555500.... +.....0555550.... +....05555550.... +...0055555500...`, + ], + [ + box, + bitmap` +0000000000000000 +0..............0 +0.HHHHHHHHHHHH.0 +0.H0000000000H.0 +0.H0999999090H.0 +0.H0999990900H.0 +0.H0999909090H.0 +0.H0999090990H.0 +0.H0990909990H.0 +0.H0909099990H.0 +0.H0090999990H.0 +0.H0909999990H.0 +0.H0000000000H.0 +0.HHHHHHHHHHHH.0 +0..............0 +0000000000000000`, + ], + [ + bedrock, + bitmap` +0000LLLL00LLL000 +000LL000LLLLL100 +0LLLLLLLLLLLL110 +LLLLLLLLLLLLLL0L +LL00LLLLL00LL0LL +L0LLLLLLLLL00LLL +LLLLLLLLLLL0LLLL +LLLLLLLLLL0LLLLL +LLLLL0LLL0LLL0LL +LLL00LLL0LLLL0LL +LL0LLLLLLLLL0LLL +00LLLLLLLLLLLLLL +0LLLLLLL000LLLLL +LLLLL000LLLLLLLL +00LLLLLLLLLLLLL0 +000LLLLLLLLLL000`, + ], + [ + ladder, + bitmap` +.LLLL......LLLL. +.LLLL222LLLLLLL. +.LLLLLLLLLLLL2L. +.L1LL......LL2L. +.L1LL......LL2L. +.L1LLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLL......LLLL. +.LLLL......L2LL. +.LLLLLLLLLLL2LL. +.LLLLLLLLLLL2LL. +.LLLL......L2LL. +.LLLL......LLLL. +.LL2LLLLLLLLLLL. +.LL2LLLLLLLLLLL. +.LL2L......LLLL.`, + ], + [ + fireParticle, + bitmap` +..9....99....9.. +....999999...... +...99966699..... +..9966626699.... +..9662266669.... +..9996662669.... +.996696662699... +.996269662669.99 +..96622966699..9 +..9666666969.... +..99966666999... +...999966699.... +.6..9999999..... +..6...9969...... +...6....9....... +......6.........`, + ], + [ + bullet_left, + bitmap` +................ +................ +................ +................ +................ +................ +................ +......96F6...... +......F666...... +................ +................ +................ +................ +................ +................ +................`, + ], + [ + bullet_right, + bitmap` +................ +................ +................ +................ +................ +................ +................ +......6F69...... +......666F...... +................ +................ +................ +................ +................ +................ +................`, + ], + [ + heart, + bitmap` +.0000000.0000003 +0332283303322280 +0388888333888830 +0888888338888830 +0888888888888830 +0888288888888880 +0888288888888880 +0388828888888880 +0388888888888830 +0338888888888830 +.033888888888330 +..03888888883330 +..0338888883300. +.H.0388888830H.. +....03388830.... +H....000000...H.`, + ], + [ + sky_light, + bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222`, + ], + [ + sky_dark, + bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`, + ], + [ + sky_black, + bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`, + ], + [ + magnet, + bitmap` +................ +................ +................ +................ +000000....00000. +0LLL00...0LLLL0. +0L0000...00000L0 +003330...0777700 +023320...0722270 +022320...0727770 +0232200.00772770 +0233230.07777270 +0333333077722270 +0333333377777770 +.03333337777770. +..000000000000..`, + ], + [ + gun, + bitmap` +..6.......6..... +..6.......6..... +................ +............0... +...00000000000.. +..0LLLLLLLLLL0.. +.00LLLLLLLLLL0.. +..00LL00000000.. +66.0LL0.0....... +...0LL00.....66. +..0LLL0......... +..00000..6...... +..........6..... +.6.............. +6............... +................`, + ], + [ + player_bullet_left, + bitmap` +................ +................ +................ +................ +................ +...77777...77... +..7............. +..7.96F6.666.... +..7.F666...666.. +..7............. +...77777...7.... +................ +................ +................ +................ +................`, + ], + [ + player_bullet_right, + bitmap` +................ +................ +................ +................ +................ +.77...77777..... +...........7.... +..666.6F69.7.... +666...666F.7.... +...........7.... +..7...77777..... +................ +................ +................ +................ +................`, + ] +); + +setBackground(sky_dark); + +setSolids([ + rightFacingPlayer_A, + leftFacingPlayer_A, + rightFacingPlayer_B, + leftFacingPlayer_B, + leftPunchingPlayer, + rightPunchingPlayer, + rightFacingMagnetPlayer, + leftFacingMagnetPlayer, + leftFacingGunPlayer, + rightFacingGunPlayer, + npcEvilLeft, + npcEvilRight, + npcFacingLeft, + npcFacingRight, + box, + bedrock, +]); + +const levels = [ + map` +........... +........... +...i.p.h... +........... +...........`, + map` +................ +p......LP....... +..b..........cb. +..b..........cb. +..b..........cb.`, + map` +............. +............. +............. +.cB.......... +pcB........P.`, + map` +............... +............... +..............B +.........b...BB +.......b...bbBB +p.bbbbbbb...LBB`, + map` +.............. +..1........... +.............. +.............. +.............. +p...........L.`, + map` +BBBBBBBBB +......... +......BBB +......B.. +......B.. +......B.. +......B.. +p.0...B.. +BBBBBBB..`, + map` +p.............. +bbbbbbbbbbbbbbb +............... +............... +...............`, + map` +...... +...... +...... +...... +...... +.....b +...... +....b. +...... +...b.. +p....B +....BB +BBBBBB`, + map` +....B...... +p...BP..... +BBB.Bbb.... +..B.1...... +..B........ +..BBBBBBBBB`, + map` +bbbbbbbbbb +.....bb... +p.0..bb... +bbbb....bb +...b....bb +...b....bb +...bbbbbbb`, + map` +BBBBBBBBBBBBBB +BBBBBBBBBBBBBB +.............. +.............. +.............. +.............. +1............. +b.p.......K.P. +BBBBBBBBBBBBBB`, + map` +............... +............... +............... +............... +............... +............... +............... +p.............. +bbbbbbbbbbbbbbb`, +]; + +setMap(levels[level]); + +setPushables({ + [rightFacingPlayer_A]: [], + [leftFacingPlayer_A]: [], + [rightFacingPlayer_B]: [], + [leftFacingPlayer_B]: [], +}); + +// Add game title text as the player loads into the game. +addText(gameTitle, gameTitleColor); + +addText("Select a character", { y: 4, color: color`2` }); + +//Add menu icons +addText("<__>", { y: 9, color: color`3` }); + +//Add menu text +addText("Press", { x: 2, y: 11, color: color`0` }); +addText(" S ", { x: 7, y: 11, color: color`3` }); +addText("to start!", { x: 10, y: 11, color: color`0` }); + +function copy(source, deep) { + var o, prop, type; + + if (typeof source != "object" || source === null) { + // What do to with functions, throw an error? + o = source; + return o; + } + + o = new source.constructor(); + + for (prop in source) { + if (source.hasOwnProperty(prop)) { + type = typeof source[prop]; + + if (deep && type == "object" && source[prop] !== null) { + o[prop] = copy(source[prop]); + } else { + o[prop] = source[prop]; + } + } + } + return o; +} + +/** + * Is the given type a pickable item? + */ +function isItem(type) { + return type == gun || type == magnet; +} + +/** + * Is the given type a living entity? (meaning gravity applies to it) + * @param {*} type Entity type + * @returns true or false + */ +function isEntity(type) { + return isNPC(type) || isPlayer(type); +} + +/** + * Is the given type an NPC? + * @param {*} type Entity type + * @returns true or false + */ +function isNPC(type) { + return ( + type == npcFacingLeft || + type == npcFacingRight || + type == npcEvilLeft || + type == npcEvilRight + ); +} + +/** + * Is the given type a player? + * @param {*} type Entity type + * @returns true or false + */ +function isPlayer(type) { + return ( + type == leftFacingPlayer_A || + type == rightFacingPlayer_A || + type == rightFacingPlayer_B || + type == leftFacingPlayer_B || + type == leftPunchingPlayer || + type == rightPunchingPlayer || + type == rightFacingMagnetPlayer || + type == leftFacingMagnetPlayer || + type == leftFacingGunPlayer || + type == rightFacingGunPlayer + ); +} + +/** + * Calculate the distance to the ground + * @param {*} player entity + * @returns distance to the ground + */ +function distanceToGround(player) { + let playerY = player.y; + let playerX = player.x; + + // Check tiles below the player + for (let i = playerY + 1; i < height(); i++) { + const tiles = getTile(playerX, i); + if (tiles.length != 0) { + for (let tile in tiles) { + if (!isPlayer(tile.type) && !isItem(tile.type)) { + return i - playerY - 1; + } + } + } + } + + return height() - playerY - 1; +} + +/** + * Is the given entity on the ground? + * In other words, is their distance to the ground equal to zero/ + * @param {*} player player + * @returns is the player on the ground + */ +function isOnGround(player) { + return distanceToGround(player) == 0; +} + +/** + * Initiate an attack at a position + * @param {*} player player + * @param {*} entityX target X + * @param {*} entityY target Y + */ +function attackEntity(player, entityX, entityY) { + // Check sprite next to the player + getTile(entityX, entityY).forEach((tile) => { + // Confirm they are not destroying themselves! + if (isPlayer(tile.type)) return; + //Confirm they are not destroying an item! + if (isItem(tile.type)) return; + //If it bedrock, we cannot break it (easily) + if (tile.type == bedrock) { + spawnParticle(entityX, entityY, 0); + addSprite(entityX, entityY, bedrock); + } else { + // Destroy block next to them + clearTile(entityX, entityY); + spawnParticle(entityX, entityY, 0); + } + return; + }); +} + +/** + * Calculate the distance between two entities. + * @param {*} player player + * @param {*} entityX target entity X + * @param {*} entityY target entity Y + * @returns + */ +function distance(player, entityX, entityY) { + //d = sqrt(x^2 + y^2) + let playerX = player.x; + let playerY = player.y; + let xDelta = playerX - entityX; + let yDelta = playerY - entityY; + let distanceSq = xDelta * xDelta + yDelta * yDelta; + return Math.sqrt(distanceSq); +} + +/** + * Is the entity type a kind of bullet. + * @param {*} entity type + * @returns + */ +function isBullet(type) { + return ( + type == bullet_right || + type == bullet_left || + type == player_bullet_right || + type == player_bullet_left + ); +} + +/** + * Ellicit an attack from an NPC. + * Shoot a bullet. + * @param {*} shooter attacker + * @param {*} originX origin x + * @param {*} originY origin y + */ +function shootBullet(shooter, originX, originY) { + let currentTime = Date.now(); + if (currentTime - lastShot > shootDelay) { + lastShot = currentTime; + //TODO Possibly add shooting functionality for players + if ( + shooter.type == npcFacingLeft || + shooter.type === LEFT_FACING_PLACEHOLDER || + shooter.type == npcEvilLeft + ) { + addSprite(originX, originY, bullet_left); + } else if ( + shooter.type == npcFacingRight || + shooter.type === RIGHT_FACING_PLACEHOLDER || + shooter.type == npcEvilRight + ) { + addSprite(originX, originY, bullet_right); + } + } +} + +/** + * Ellicit a bullet attack from a player. + * Shoot a bullet. + * @param {*} shooter attacker + * @param {*} originX origin x + * @param {*} originY origin y + */ +function playerShootBullet(shooter, originX, originY) { + let currentTime = Date.now(); + if (currentTime - lastPlayerShot > shootDelay) { + lastPlayerShot = currentTime; + if (shooter.type == leftFacingGunPlayer) { + addSprite(originX, originY, player_bullet_left); + } else if (shooter.type == rightFacingGunPlayer) { + addSprite(originX, originY, player_bullet_right); + } + } +} + +/** + * + * @param {*} particleX X position of the spawned particle + * @param {*} particleY Y position of the spawned particle + * @param {*} type Sound type (e.g. explosion, happy) + */ +function spawnParticle(particleX, particleY, type) { + // Calculate time elapsed since last sound effect + let currentTime = Date.now(); + if (currentTime - lastParticleSound > soundDelay) { + lastParticleSound = currentTime; + + if (particleX > width() - 1) { + particleX = width() - 1; + } + if (particleX < 0) { + particleX = 0; + } + if (particleY > height() - 1) { + particleY = height() - 1; + } + if (particleY < 0) { + particleY = 0; + } + // Spawn the corresponding particle + if (type == 0) { + playTune(explosionSound); + addSprite(particleX, particleY, fireParticle); + var tempInterval = setInterval(() => { + // Destroy particle later + getTile(particleX, particleY).forEach((sprite) => { + if (sprite.type == fireParticle) { + sprite.remove(); + } + }); + clearInterval(tempInterval); + }, 100); + } else if (type == 1) { + playTune(happySound); + addSprite(particleX, particleY, heart); + var tempInterval = setInterval(() => { + // Destroy particle later + getTile(particleX, particleY).forEach((sprite) => { + if (sprite.type == heart) { + sprite.remove(); + } + }); + clearInterval(tempInterval); + }, 100); + } + } +} + +// Handle right punch +onInput("l", () => { + if (!player || !getFirst(player)) return; + let particleX = getFirst(player).x + 1; + let particleY = getFirst(player).y; + // Are they facing in the right direction (so they can attack in that direction) + if (getFirst(player).type === RIGHT_FACING_PLACEHOLDER) { + // Switch to the punching animation + getFirst(player).type = rightPunchingPlayer; + player = rightPunchingPlayer; + attackEntity(player, particleX, particleY); + } else if (getFirst(player).type == rightFacingGunPlayer && hasGun) { + playerShootBullet(getFirst(player), particleX, particleY); + } + var intervalId = setInterval(() => { + if ( + player && + getFirst(player) && + getFirst(player).type == rightPunchingPlayer + ) { + getFirst(player).type = copy(RIGHT_FACING_PLACEHOLDER); + if (hasMagnet) { + player = rightFacingMagnetPlayer; + } else { + player = copy(RIGHT_FACING_PLACEHOLDER); + } + } + clearInterval(intervalId); + }, 200); +}); + +// Handle left punch +onInput("j", () => { + if (!player || !getFirst(player)) return; + let particleX = getFirst(player).x - 1; + let particleY = getFirst(player).y; + // Are they facing in the left direction? (to be able to punch left) + if (getFirst(player).type === LEFT_FACING_PLACEHOLDER) { + // Switch to the punching animation + getFirst(player).type = leftPunchingPlayer; + player = leftPunchingPlayer; + attackEntity(player, particleX, particleY); + } else if (getFirst(player).type == leftFacingGunPlayer && hasGun) { + playerShootBullet(getFirst(player), particleX, particleY); + } + var intervalId = setInterval(() => { + if ( + player && + getFirst(player) && + getFirst(player).type == leftPunchingPlayer + ) { + if (hasMagnet) { + getFirst(player).type = leftFacingMagnetPlayer; + player = leftFacingMagnetPlayer; + } else { + getFirst(player).type = copy(LEFT_FACING_PLACEHOLDER); + player = copy(LEFT_FACING_PLACEHOLDER); + } + } + clearInterval(intervalId); + }, 200); +}); + +// Jump functionality +onInput("w", () => { + if (!player || !getFirst(player)) return; + + // Is the player on ground (and not jumping) + let onGround = isOnGround(getFirst(player)); + if (!jumping && onGround) { + //Increase y + getFirst(player).y -= 1; + jumping = true; + + // Keep them in the air for some time. + var intervalId = setInterval(() => { + if (!getFirst(player)) return; + let lastPlayerY = getFirst(player).y; + let onGround = isOnGround(getFirst(player)); + if (!onGround) { + // Push them up + getFirst(player).y = lastPlayerY; + } + clearInterval(intervalId); + jumping = false; + }, jumpDuration); + } +}); + +// Gravity switch functionality +onInput("i", () => { + if (!player || !getFirst(player)) return; + + // Is the player on ground (and not jumping) + let onGround = isOnGround(getFirst(player)); + if (!jumping && onGround && hasMagnet) { + gravityDown = false; + + //jumping = true; + getFirst(player).y -= 1; + } +}); + +onInput("k", () => { + if (!player || !getFirst(player)) return; + + // Is the player on ground (and not jumping) + let onGround = isOnGround(getFirst(player)); + gravityDown = true; + jumping = false; +}); + +// Handle left directional movement +onInput("a", () => { + if (!player || !getFirst(player)) return; + + if (inMenu) { + let menuEntities = new Array(); + let pushEntities = true; + getAll().forEach((entity) => { + menuEntities.push(entity); + //The greater EQUALS check is important here + //depends on whether or not the + //size of the menu is even or odd + if (entity.x + 2 >= width()) { + pushEntities = false; + return; + } + }); + menuEntities.sort((a, b) => b.x - a.x); + + if (pushEntities) { + menuEntities.forEach((e) => { + e.x += 2; + }); + } + return; + } + + let currentTime = Date.now(); + if (currentTime - lastLeftMovement >= movementDelay) { + lastLeftMovement = currentTime; + + if (player && getFirst(player).type != LEFT_FACING_PLACEHOLDER) { + if (hasMagnet) { + getFirst(player).type = leftFacingMagnetPlayer; + player = leftFacingMagnetPlayer; + } else if (hasGun) { + getFirst(player).type = leftFacingGunPlayer; + player = leftFacingGunPlayer; + } else { + getFirst(player).type = copy(LEFT_FACING_PLACEHOLDER); + player = copy(LEFT_FACING_PLACEHOLDER); + } + } + // Move to the left direction + getFirst(player).x -= 1; + } +}); + +// Handle right directional movement +onInput("d", () => { + if (!player || !getFirst(player)) return; + + if (inMenu) { + let menuEntities = new Array(); + let pushEntities = true; + getAll().forEach((entity) => { + menuEntities.push(entity); + if (entity.x - 2 < 0) { + pushEntities = false; + return; + } + }); + + menuEntities.sort((a, b) => a.x - b.x); + + if (pushEntities) { + menuEntities.forEach((e) => { + e.x -= 2; + }); + } + return; + } + + let currentTime = Date.now(); + if (currentTime - lastRightMovement >= movementDelay) { + lastRightMovement = currentTime; + if ( + player && + (getFirst(player).type != RIGHT_FACING_PLACEHOLDER || + getFirst(player).type != rightFacingPlayer_B) + ) { + if (hasMagnet) { + getFirst(player).type = rightFacingMagnetPlayer; + player = rightFacingMagnetPlayer; + } else if (hasGun) { + getFirst(player).type = rightFacingGunPlayer; + player = rightFacingGunPlayer; + } else { + getFirst(player).type = copy(RIGHT_FACING_PLACEHOLDER); + player = copy(RIGHT_FACING_PLACEHOLDER); + } + } + // Move to the right direction + getFirst(player).x += 1; + } +}); + +//Select character in menu +onInput("s", () => { + if (!inMenu) return; + let centerX = Math.floor(width() / 2); + getAll().forEach((entity) => { + if (entity.x == centerX) { + //Found the player we want to play with + + //Start game + inMenu = false; + clearText(); + level++; + setMap(levels[level]); + setBackground(sky_light); + playback.end(); + playback = playTune(gameMusic, Infinity); + + //Add game title to first level + addText(gameTitle, gameTitleColor); + + //Set player to selected player + player = entity.type; + getFirst(rightFacingPlayer_A).type = player; + //Set placeholders + RIGHT_FACING_PLACEHOLDER = player; + if (player == rightFacingPlayer_B) { + LEFT_FACING_PLACEHOLDER = leftFacingPlayer_B; + } + return; + } + }); +}); + +// Gravity handler +setInterval(() => { + if (level == 0) return; + // Gravity for all living entities! + getAll().forEach((entity) => { + if ( + isEntity(entity.type) || + isItem(entity.type) || + //Gravity for blocks, + //this exemption for level index 6 + level == 7 + ) { + // Don't apply gravity to the player as they are jumping + if (isPlayer(entity.type) && jumping) return; + let onGround = isOnGround(entity); + if (!onGround) { + // Move downward (if gravityDown is true) + let deltaY = gravityDown ? 1 : -1; + if (entity.y + deltaY > height() - 1) { + entity.y = height() - 1; + } else { + entity.y += deltaY; + } + } + } + }); +}, 60); + +function gameReset() { + // Handle player death + if (lives <= 0 && !changingLevels) { + // Reset level + level = 1; + clearText(); + + // Destroy all entities (except the player) + getAll().forEach((entity) => { + if (!isPlayer(entity.type)) { + entity.remove(); + } + }); + // Load the world + setMap(levels[level]); + + //Reset lives & jumping state + lives = startingLives; + jumping = false; + hasGun = false; + hasMagnet = false; + + //Add game title text + addText(gameTitle, gameTitleColor); + } +} + +// Moving entity handler +let i = 0; +setInterval(() => { + if (!player || !getFirst(player)) return; + // Process entity proximity detection (NPC player tracing logic) + getAll().forEach((entity) => { + // Calculate distance to the player + let dist = distance(getFirst(player), entity.x, entity.y); + //Magnet item pickup detection + if (dist == 0.0 && isItem(entity.type)) { + playTune(happySound); + clearText(); + if (entity.type == magnet) { + hasMagnet = true; + if (getFirst(player).type === RIGHT_FACING_PLACEHOLDER) { + getFirst(player).type = rightFacingMagnetPlayer; + player = rightFacingMagnetPlayer; + } else if (entity.type === LEFT_FACING_PLACEHOLDER) { + getFirst(player).type = leftFacingMagnetPlayer; + player = leftFacingMagnetPlayer; + } + } else if (entity.type == gun) { + hasGun = true; + if (getFirst(player).type === RIGHT_FACING_PLACEHOLDER) { + getFirst(player).type = rightFacingGunPlayer; + player = rightFacingGunPlayer; + } else if (entity.type === LEFT_FACING_PLACEHOLDER) { + getFirst(player).type = leftFacingGunPlayer; + player = leftFacingGunPlayer; + } + } + entity.remove(); + return; + } + // Loop over all NPCs + if (!isNPC(entity.type)) return; + // Once the player comes in close proximity, make them look at the player + if (dist < 10) { + let xDiff = getFirst(player).x - entity.x; + //Prevent npc from walking into the same space as player, making it not dangerous. + if (i % 2 == 0 && Math.abs(xDiff) > 1) { + let newPosX = entity.x + (xDiff > 0 ? 1 : -1); + entity.x = newPosX; + } + // Evaluate direction of player using delta x (as it is a 2D game) + let right = getFirst(player).x - entity.x > 0; + if (right) { + entity.type = npcEvilRight; + } else { + entity.type = npcEvilLeft; + } + + if (dist < 7) { + shootBullet(entity, entity.x, entity.y); + } + } + }); + + // Process moving bullets + getAll().forEach((entity) => { + if (!getFirst(player)) return; + //Is the entity a bullet? + if (isBullet(entity.type)) { + // Based on the bullet sprite type, check if it's a right-sided bullet or left. + let xDiff = + entity.type == bullet_right || entity.type == player_bullet_right + ? 1 + : -1; + let removedEntity = false; + //Find all entities in game + getTile(entity.x, entity.y).forEach((obstacle) => { + // Check if the obstacle is not the same bullet. + if (!isBullet(obstacle.type)) { + //Check if the bullet originates from a player. + //If so, then we expect it to hit an NPC. + //If not, then we expect it to hit a non-NPC. (including players) + if ( + ((entity.type == player_bullet_right || + entity.type == player_bullet_left) && + isNPC(obstacle.type)) || + ((entity.type == bullet_right || entity.type == bullet_left) && + !isNPC(obstacle.type)) + ) { + entity.remove(); + removedEntity = true; + // Spawn the heart particle if it was a player, + // Spawn the explosion particle otherwise + spawnParticle(entity.x, entity.y, isPlayer(obstacle.type) ? 1 : 0); + //If the bullet hit a player (meaning it originates from an NPC), subtract lives + if (isPlayer(obstacle.type)) { + lives--; + if (lives == 0) { + gameReset(); + } + } + //If the bullet hit an NPC, it originates from a player. + else if (isNPC(obstacle.type)) { + obstacle.remove(); + } + return; + } + } + }); + if (removedEntity) return; + // Move the bullet in the direction contingent on the sprite (acts as metadata) + entity.x += xDiff; + // Destroy bullets meeting the edge + if (entity.x == width() - 1 || entity.x == 0) { + entity.remove(); + var interval = setInterval(() => { + //Is within bounds? + if (entity.x <= width() - 1 && entity.x >= 0) { + spawnParticle(entity.x, entity.y, 0); + } + clearInterval(interval); + }, 200); + } + } + }); + i++; +}, 300); + +// Level changing handler, Player death handler, Lives rendering handler +setInterval(() => { + if (!player || !getFirst(player)) { + player = rightFacingPlayer_A; + return; + } + + // Changing levels functionality (if they reach the edge) + if (getFirst(player).x == width() - 1 && !inMenu) { + if (!levels[level + 1]) return; + changingLevels = true; + + // Show new loading text... + clearText(); + addText("Loading new level...", { y: 4, color: `4` }); + + // Shift all entities to the left + getAll().forEach((entity) => { + if ( + !isBullet(entity.type) && + entity.type != fireParticle && + entity.type != heart && + !isPlayer(entity) + ) { + // If the entity has not reached the left side, keep pushing them + if (entity.x != 0) { + entity.x--; + // Push the player to the right side (keep them on the right side) + getFirst(player).x++; + } + // The moment an entity reaches the left side, we destroy it. + if (entity.x == 0) { + entity.remove(); + } + } + }); + } + + let moreLevelsExist = level < levels.length - 1; + // Once we complete the level changing transition... (and the player is the only one alive) + if (changingLevels && getAll().length == 1 && moreLevelsExist) { + // Load the new level map + level++; + setMap(levels[level]); + changingLevels = false; + + //Set player to selected player + player = copy(RIGHT_FACING_PLACEHOLDER); + getFirst(rightFacingPlayer_A).type = player; + + let isFinalLevel = level == levels.length - 1; + + // Clear text from previous level + clearText(); + + switch (level) { + case 2: + setBackground(sky_light); + addText("Not bad...", { y: 3, color: `4` }); + addText("Can you beat this?", { y: 4, color: `3` }); + break; + case 3: + setBackground(sky_light); + addText("It gets harder...", { y: 4, color: `3` }); + break; + case 4: + break; + case 5: + hasGun = false; + setBackground(sky_dark); + if (!hasMagnet) { + addText("Pick up", { y: 10, color: `4` }); + addText("the magnet!", { y: 11, color: `4` }); + } + break; + case 6: + setBackground(sky_black); + hasMagnet = false; + gravityDown = true; + addText("Go right...", { y: 2, color: `3` }); + break; + case 7: + setBackground(sky_light); + break; + case 8: + setBackground(sky_dark); + break; + case 9: + hasGun = false; + setBackground(sky_black); + if (!hasMagnet) { + addText("Collect", { x: 1, y: 6, color: `4` }); + addText("the", { x: 1, y: 7, color: `4` }); + addText("magnet", { x: 1, y: 8, color: `4` }); + } + break; + case 10: + setBackground(sky_light); + hasMagnet = false; + gravityDown = true; + if (!hasGun) { + addText("Collect", { x: 0, y: 6, color: `4` }); + addText("the", { x: 0, y: 7, color: `4` }); + addText("gun", { x: 0, y: 8, color: `4` }); + } + break; + } + + if (level == levels.length - 1) { + hasGun = false; + setBackground(sky_black); + addText("You win!", { y: 3, color: `4` }); + } + + if (isFinalLevel) { + playback.end(); + playTune(victoryMusic, 3); + } + } + if (changingLevels) return; + + // Render lives on the screen + let text = "Lives: " + lives; + if (level < levels.length - 1 && level > 0) { + addText(text, { x: width() - 4, y: 5, color: `5` }); + } +}, 40); diff --git a/games/Super_Efficient_Bunny.js b/games/Super_Efficient_Bunny.js index af1b7b0c82..62d0308347 100644 --- a/games/Super_Efficient_Bunny.js +++ b/games/Super_Efficient_Bunny.js @@ -1,8 +1,8 @@ /* @title: Super Efficient Bunny -@tags: ['energy-control'] -@addedOn: 2023-01-31 @author: Mihir Surlaker (Mihirsur007) +@tags: ['puzzle'] +@addedOn: 2023-01-31 */ //The goal of this game is to advance as many levels as you can in 400 steps. This will challenge you to choose the most efficient movements to get to the carrot. const player = "p"; diff --git a/games/Super_Hard_Puzzle_challenges.js b/games/Super_Hard_Puzzle_challenges.js index d7a204c316..1e9774f082 100644 --- a/games/Super_Hard_Puzzle_challenges.js +++ b/games/Super_Hard_Puzzle_challenges.js @@ -2,7 +2,7 @@ /* @title: Super_Hard_Puzzle_challenges @author: Ruihan Cao -@tags: ['puzzle-score'] +@tags: ['puzzle'] @addedOn: 2023-04-23 */ diff --git a/games/Super_Mario.js b/games/Super_Mario.js index 9ce95ae0c7..d1472472e0 100644 --- a/games/Super_Mario.js +++ b/games/Super_Mario.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Super_Mario @author: Cosmin -@tags: ['classic'] +@tags: ['retro'] @addedOn: 2024-03-01 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Super_Maze.js b/games/Super_Maze.js index c982c759dc..9daacbcf91 100644 --- a/games/Super_Maze.js +++ b/games/Super_Maze.js @@ -1,8 +1,8 @@ /* @title: Super Maze +@author: the_knights_of_rohan @tags: ['strategy'] @addedOn: 2023-02-08 -@author: the_knights_of_rohan Use wasd to move and get to the present. Try to figure out what the special tiles do! Directional tiles taken from Leonard's Coding Demo 3. diff --git a/games/Super_Platformer.js b/games/Super_Platformer.js index 32c3f53728..5996420ea3 100644 --- a/games/Super_Platformer.js +++ b/games/Super_Platformer.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Super_Platformer @author: KinjalPriya000 @tags: [] @addedOn: 2024-04-11 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/Sus_Runner.js b/games/Sus_Runner.js index e2dc4b6b20..aee77e523a 100644 --- a/games/Sus_Runner.js +++ b/games/Sus_Runner.js @@ -1,8 +1,8 @@ /* @title: Sus_Runner +@author: Johna @tags: ['endless'] @addedOn: 2023-02-10 -@author: Johna */ const player = "p"; diff --git a/games/Swapper.js b/games/Swapper.js index 2d6de1f535..0a3f8c5fca 100644 --- a/games/Swapper.js +++ b/games/Swapper.js @@ -2,7 +2,7 @@ /* @title: Swapper @author: RaidTheWeb -@tags: ['advanced'] +@tags: [] @addedOn: 2023-10-18 */ diff --git a/games/Tag.js b/games/Tag.js index 73e1e928dd..ae5ddcfb85 100644 --- a/games/Tag.js +++ b/games/Tag.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Tag @author: ThomasJPrice @tags: [] @addedOn: 2024-07-29 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player1 = "p" diff --git a/games/Target Practice-3.js b/games/Target Practice-3.js new file mode 100644 index 0000000000..10b2fd34c8 --- /dev/null +++ b/games/Target Practice-3.js @@ -0,0 +1,118 @@ +/* +@title: Target Practice +@author: Ankit Kantheti +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ +// +const player = "P"; +const target = "T"; +const background = "B"; + +setLegend( + [player, bitmap` +................ +.....00000000... +.....0CCCCCC0... +.....00000CC0... +.....02220000... +.....02222220... +.....02022020... +.....02222220... +....0020000200.. +....00CCCCCC00.. +....00FFFFFF00.. +....00FFFFFF00.. +....00FFFFFF00.. +.....0FFFFFF0... +.....00000000... +................`], + + [target, bitmap` +................ +................ +................ +.......HH....... +......HHHH...... +......HHHH...... +....HH2222HH.... +...HHH2002HHH... +....HH2222HH.... +......HHHH...... +......HHHH...... +.......HH....... +................ +................ +................ +................`], + + [background, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD`] +); + +let level = map` +PBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBB +TBBBBBBBBBBBBBBB`; + +setMap(level); + +const movePlayer = (dx, dy) => { + const playerTile = getFirst(player); + playerTile.x += dx; + playerTile.y += dy; +}; + +onInput("w", () => movePlayer(0, -1)); +onInput("s", () => movePlayer(0, 1)); +onInput("a", () => movePlayer(-1, 0)); +onInput("d", () => movePlayer(1, 0)); + +const shoot = () => { + const playerTile = getFirst(player); + const targetTile = getFirst(target); + + if (playerTile.x === targetTile.x || playerTile.y === targetTile.y) { + targetTile.x = Math.floor(Math.random() * 16); + targetTile.y = Math.floor(Math.random() * 16); + addText("Hit!", { x: 1, y: 1, color: color`3` }); + } else { + addText("Miss!", { x: 1, y: 1, color: color`2` }); + } + + setTimeout(clearText, 500); +}; + +onInput("j", () => shoot()); + diff --git a/games/Temple.js b/games/Temple.js index 29370dc81b..ee1566597b 100644 --- a/games/Temple.js +++ b/games/Temple.js @@ -1,8 +1,8 @@ /* @title: Temple -@tags: ['puzzle-npc'] -@addedOn: 2022-12-07 @author: Wynston +@tags: ['puzzle'] +@addedOn: 2022-12-07 */ diff --git a/games/Terminal-Dungeon.js b/games/Terminal-Dungeon.js index 24842fbd7f..600340421d 100644 --- a/games/Terminal-Dungeon.js +++ b/games/Terminal-Dungeon.js @@ -1,8 +1,8 @@ /* @title: Terminal-Dungeon -@tags: ['puzzle-npc'] -@addedOn: 2022-12-20 @author: adadyer +@tags: ['puzzle'] +@addedOn: 2022-12-20 WASD to move, IJKL to interact. diff --git a/games/The Sequence v1.js b/games/The Sequence v1.js new file mode 100644 index 0000000000..7ff47fbf59 --- /dev/null +++ b/games/The Sequence v1.js @@ -0,0 +1,635 @@ +/* +@title: The Sequence +@author: liaa-dev +@tags: [] +@addedOn: 2024-08-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const unrevealed = "b"; +const happy = "h"; +const sad = "s"; +const tile = "t"; +const highlighted_tile = "g"; +const selected_tile = "k"; +const play = "d"; +const melody_40bpm = tune` +769.2307692307693: B5/769.2307692307693, +769.2307692307693: E4^769.2307692307693 + E5/769.2307692307693, +1538.4615384615386, +769.2307692307693: D4/769.2307692307693 + B4/769.2307692307693 + G4-769.2307692307693, +769.2307692307693: A4-769.2307692307693, +769.2307692307693: G4-769.2307692307693, +769.2307692307693, +769.2307692307693: E4-769.2307692307693 + C5^769.2307692307693, +769.2307692307693, +769.2307692307693: A4-769.2307692307693, +769.2307692307693: B4-769.2307692307693, +769.2307692307693: G4-769.2307692307693, +769.2307692307693: E4-769.2307692307693, +769.2307692307693, +769.2307692307693: B5/769.2307692307693, +769.2307692307693: E4~769.2307692307693 + E5^769.2307692307693, +769.2307692307693, +769.2307692307693: B4^769.2307692307693 + G4~769.2307692307693, +769.2307692307693: A4~769.2307692307693, +769.2307692307693: G4~769.2307692307693, +769.2307692307693, +769.2307692307693: E4~769.2307692307693 + C5^769.2307692307693, +769.2307692307693, +769.2307692307693: A4~769.2307692307693, +769.2307692307693: B4~769.2307692307693, +769.2307692307693: G4~769.2307692307693, +769.2307692307693: E4~769.2307692307693, +769.2307692307693: F4~769.2307692307693 + D5/769.2307692307693, +769.2307692307693: G4~769.2307692307693 + E5/769.2307692307693, +769.2307692307693: G5/769.2307692307693 + C5^769.2307692307693 + G4^769.2307692307693, +769.2307692307693` +const melody_60bpm = tune` +508.47457627118644: B5/508.47457627118644, +508.47457627118644: E4^508.47457627118644 + E5/508.47457627118644, +1016.9491525423729, +508.47457627118644: D4/508.47457627118644 + B4/508.47457627118644 + G4-508.47457627118644, +508.47457627118644: A4-508.47457627118644, +508.47457627118644: G4-508.47457627118644, +508.47457627118644, +508.47457627118644: E4-508.47457627118644 + C5^508.47457627118644, +508.47457627118644, +508.47457627118644: A4-508.47457627118644, +508.47457627118644: B4-508.47457627118644, +508.47457627118644: G4-508.47457627118644, +508.47457627118644: E4-508.47457627118644, +508.47457627118644, +508.47457627118644: B5/508.47457627118644, +508.47457627118644: E4~508.47457627118644 + E5^508.47457627118644, +508.47457627118644, +508.47457627118644: B4^508.47457627118644 + G4~508.47457627118644, +508.47457627118644: A4~508.47457627118644, +508.47457627118644: G4~508.47457627118644, +508.47457627118644, +508.47457627118644: E4~508.47457627118644 + C5^508.47457627118644, +508.47457627118644, +508.47457627118644: A4~508.47457627118644, +508.47457627118644: B4~508.47457627118644, +508.47457627118644: G4~508.47457627118644, +508.47457627118644: E4~508.47457627118644, +508.47457627118644: F4~508.47457627118644 + D5/508.47457627118644, +508.47457627118644: G4~508.47457627118644 + E5/508.47457627118644, +508.47457627118644: G5/508.47457627118644 + C5^508.47457627118644 + G4^508.47457627118644, +508.47457627118644` +const melody_70bpm = tune` +428.57142857142856: B5/428.57142857142856, +428.57142857142856: E4^428.57142857142856 + E5/428.57142857142856, +857.1428571428571, +428.57142857142856: D4/428.57142857142856 + B4/428.57142857142856 + G4-428.57142857142856, +428.57142857142856: A4-428.57142857142856, +428.57142857142856: G4-428.57142857142856, +428.57142857142856, +428.57142857142856: E4-428.57142857142856 + C5^428.57142857142856, +428.57142857142856, +428.57142857142856: A4-428.57142857142856, +428.57142857142856: B4-428.57142857142856, +428.57142857142856: G4-428.57142857142856, +428.57142857142856: E4-428.57142857142856, +428.57142857142856, +428.57142857142856: B5/428.57142857142856, +428.57142857142856: E4~428.57142857142856 + E5^428.57142857142856, +428.57142857142856, +428.57142857142856: B4^428.57142857142856 + G4~428.57142857142856, +428.57142857142856: A4~428.57142857142856, +428.57142857142856: G4~428.57142857142856, +428.57142857142856, +428.57142857142856: E4~428.57142857142856 + C5^428.57142857142856, +428.57142857142856, +428.57142857142856: A4~428.57142857142856, +428.57142857142856: B4~428.57142857142856, +428.57142857142856: G4~428.57142857142856, +428.57142857142856: E4~428.57142857142856, +428.57142857142856: F4~428.57142857142856 + D5/428.57142857142856, +428.57142857142856: G4~428.57142857142856 + E5/428.57142857142856, +428.57142857142856: G5/428.57142857142856 + C5^428.57142857142856 + G4^428.57142857142856, +428.57142857142856` +const melody_80bpm = tune` +379.746835443038: B5/379.746835443038, +379.746835443038: E4^379.746835443038 + E5/379.746835443038, +759.493670886076, +379.746835443038: D4/379.746835443038 + B4/379.746835443038 + G4-379.746835443038, +379.746835443038: A4-379.746835443038, +379.746835443038: G4-379.746835443038, +379.746835443038, +379.746835443038: E4-379.746835443038 + C5^379.746835443038, +379.746835443038, +379.746835443038: A4-379.746835443038, +379.746835443038: B4-379.746835443038, +379.746835443038: G4-379.746835443038, +379.746835443038: E4-379.746835443038, +379.746835443038, +379.746835443038: B5/379.746835443038, +379.746835443038: E4~379.746835443038 + E5^379.746835443038, +379.746835443038, +379.746835443038: B4^379.746835443038 + G4~379.746835443038, +379.746835443038: A4~379.746835443038, +379.746835443038: G4~379.746835443038, +379.746835443038, +379.746835443038: E4~379.746835443038 + C5^379.746835443038, +379.746835443038, +379.746835443038: A4~379.746835443038, +379.746835443038: B4~379.746835443038, +379.746835443038: G4~379.746835443038, +379.746835443038: E4~379.746835443038, +379.746835443038: F4~379.746835443038 + D5/379.746835443038, +379.746835443038: G4~379.746835443038 + E5/379.746835443038, +379.746835443038: G5/379.746835443038 + C5^379.746835443038 + G4^379.746835443038, +379.746835443038` +const melody_90bpm = tune` +333.3333333333333: B5/333.3333333333333, +333.3333333333333: E4^333.3333333333333 + E5/333.3333333333333, +666.6666666666666, +333.3333333333333: D4/333.3333333333333 + B4/333.3333333333333 + G4-333.3333333333333, +333.3333333333333: A4-333.3333333333333, +333.3333333333333: G4-333.3333333333333, +333.3333333333333, +333.3333333333333: E4-333.3333333333333 + C5^333.3333333333333, +333.3333333333333, +333.3333333333333: A4-333.3333333333333, +333.3333333333333: B4-333.3333333333333, +333.3333333333333: G4-333.3333333333333, +333.3333333333333: E4-333.3333333333333, +333.3333333333333, +333.3333333333333: B5/333.3333333333333, +333.3333333333333: E4~333.3333333333333 + E5^333.3333333333333, +333.3333333333333, +333.3333333333333: B4^333.3333333333333 + G4~333.3333333333333, +333.3333333333333: A4~333.3333333333333, +333.3333333333333: G4~333.3333333333333, +333.3333333333333, +333.3333333333333: E4~333.3333333333333 + C5^333.3333333333333, +333.3333333333333, +333.3333333333333: A4~333.3333333333333, +333.3333333333333: B4~333.3333333333333, +333.3333333333333: G4~333.3333333333333, +333.3333333333333: E4~333.3333333333333, +333.3333333333333: F4~333.3333333333333 + D5/333.3333333333333, +333.3333333333333: G4~333.3333333333333 + E5/333.3333333333333, +333.3333333333333: G5/333.3333333333333 + C5^333.3333333333333 + G4^333.3333333333333, +333.3333333333333` +const melody_100bpm = tune` +294.11764705882354: B5/294.11764705882354, +294.11764705882354: E4^294.11764705882354 + E5/294.11764705882354, +588.2352941176471, +294.11764705882354: D4/294.11764705882354 + B4/294.11764705882354 + G4-294.11764705882354, +294.11764705882354: A4-294.11764705882354, +294.11764705882354: G4-294.11764705882354, +294.11764705882354, +294.11764705882354: E4-294.11764705882354 + C5^294.11764705882354, +294.11764705882354, +294.11764705882354: A4-294.11764705882354, +294.11764705882354: B4-294.11764705882354, +294.11764705882354: G4-294.11764705882354, +294.11764705882354: E4-294.11764705882354, +294.11764705882354, +294.11764705882354: B5/294.11764705882354, +294.11764705882354: E4~294.11764705882354 + E5^294.11764705882354, +294.11764705882354, +294.11764705882354: B4^294.11764705882354 + G4~294.11764705882354, +294.11764705882354: A4~294.11764705882354, +294.11764705882354: G4~294.11764705882354, +294.11764705882354, +294.11764705882354: E4~294.11764705882354 + C5^294.11764705882354, +294.11764705882354, +294.11764705882354: A4~294.11764705882354, +294.11764705882354: B4~294.11764705882354, +294.11764705882354: G4~294.11764705882354, +294.11764705882354: E4~294.11764705882354, +294.11764705882354: F4~294.11764705882354 + D5/294.11764705882354, +294.11764705882354: G4~294.11764705882354 + E5/294.11764705882354, +294.11764705882354: G5/294.11764705882354 + C5^294.11764705882354 + G4^294.11764705882354, +294.11764705882354` +const melody_110bpm = tune` +272.72727272727275: B5/272.72727272727275, +272.72727272727275: E4^272.72727272727275 + E5/272.72727272727275, +545.4545454545455, +272.72727272727275: D4/272.72727272727275 + B4/272.72727272727275 + G4-272.72727272727275, +272.72727272727275: A4-272.72727272727275, +272.72727272727275: G4-272.72727272727275, +272.72727272727275, +272.72727272727275: E4-272.72727272727275 + C5^272.72727272727275, +272.72727272727275, +272.72727272727275: A4-272.72727272727275, +272.72727272727275: B4-272.72727272727275, +272.72727272727275: G4-272.72727272727275, +272.72727272727275: E4-272.72727272727275, +272.72727272727275, +272.72727272727275: B5/272.72727272727275, +272.72727272727275: E4~272.72727272727275 + E5^272.72727272727275, +272.72727272727275, +272.72727272727275: B4^272.72727272727275 + G4~272.72727272727275, +272.72727272727275: A4~272.72727272727275, +272.72727272727275: G4~272.72727272727275, +272.72727272727275, +272.72727272727275: E4~272.72727272727275 + C5^272.72727272727275, +272.72727272727275, +272.72727272727275: A4~272.72727272727275, +272.72727272727275: B4~272.72727272727275, +272.72727272727275: G4~272.72727272727275, +272.72727272727275: E4~272.72727272727275, +272.72727272727275: F4~272.72727272727275 + D5/272.72727272727275, +272.72727272727275: G4~272.72727272727275 + E5/272.72727272727275, +272.72727272727275: G5/272.72727272727275 + C5^272.72727272727275 + G4^272.72727272727275, +272.72727272727275` +const melody_120bpm = tune` +245.9016393442623: B5/245.9016393442623, +245.9016393442623: E4^245.9016393442623 + E5/245.9016393442623, +491.8032786885246, +245.9016393442623: D4/245.9016393442623 + B4/245.9016393442623 + G4-245.9016393442623, +245.9016393442623: A4-245.9016393442623, +245.9016393442623: G4-245.9016393442623, +245.9016393442623, +245.9016393442623: E4-245.9016393442623 + C5^245.9016393442623, +245.9016393442623, +245.9016393442623: A4-245.9016393442623, +245.9016393442623: B4-245.9016393442623, +245.9016393442623: G4-245.9016393442623, +245.9016393442623: E4-245.9016393442623, +245.9016393442623, +245.9016393442623: B5/245.9016393442623, +245.9016393442623: E4~245.9016393442623 + E5^245.9016393442623, +245.9016393442623, +245.9016393442623: B4^245.9016393442623 + G4~245.9016393442623, +245.9016393442623: A4~245.9016393442623, +245.9016393442623: G4~245.9016393442623, +245.9016393442623, +245.9016393442623: E4~245.9016393442623 + C5^245.9016393442623, +245.9016393442623, +245.9016393442623: A4~245.9016393442623, +245.9016393442623: B4~245.9016393442623, +245.9016393442623: G4~245.9016393442623, +245.9016393442623: E4~245.9016393442623, +245.9016393442623: F4~245.9016393442623 + D5/245.9016393442623, +245.9016393442623: G4~245.9016393442623 + E5/245.9016393442623, +245.9016393442623: G5/245.9016393442623 + C5^245.9016393442623 + G4^245.9016393442623, +245.9016393442623` +const hurray = tune` +379.746835443038: B5-379.746835443038 + A5-379.746835443038 + G5-379.746835443038 + C5-379.746835443038 + A4/379.746835443038, +379.746835443038: B5-379.746835443038 + D5/379.746835443038 + E5/379.746835443038 + C5^379.746835443038, +11392.405063291139` +const bub = tune ` +500: E4-500, +15500` + +const diss_list = [ + "Not Even\nClose.", + "Seriously?\nThat Was It?", + "Away from\nbrain?", + "Is That\nYour Best?", + "You Forgot\nAlready?", + "That Was\nJust Sad.", + "Too Slow,\nTry Again.", + "Memory Not\nIncluded.", + "Total Fail.", + "Do Better\nNext Time.", + "You Blew it.", + "Really?\nThats All?", + "Think harder.", + "Give Up\nAlready?", + "Embarrassing\nAttempt.", + "Did You\nEven Try?", + "Hopeless,\nJust Hopeless.", + "This Is\nGetting Sad.", + "You Call\nThat Trying?", + "Wow...\nJust Wow." +]; + + + +let playback; +let isDead = false; +let score = 0; +let highscore = 0; +let lockCursor = true; +let round = 1; +let speed = 1; +var tiles_chosen = 0; +var inSequence = true; +var frequence = 2; +var sequence = []; +let cursor_pos = { + x: 1, + y: 1 +}; + +setLegend( + [happy, bitmap` +................ +......00000..... +....000...000... +...00.......00.. +...0.........0.. +..00...4.4...00. +..0....4.4....0. +..0....D.D....0. +..0...........0. +..00..4...4..00. +...0...444...0.. +...00.......00.. +....000...000... +......00000..... +................ +................`], + [sad, bitmap` +................ +......00000..... +....000...000... +...00.......00.. +...0.........0.. +..00...3.3...00. +..0....3.3....0. +..0....3.3....0. +..0...........0. +..00...333...00. +...0..3...3..0.. +...00.......00.. +....000...000... +......00000..... +................ +................`], + [tile, bitmap` +FFFFFFFFFFFFFFFF +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +FFFFFFFFFFFFFFFF`], + [highlighted_tile, bitmap` +CCCCCCCCCCCCCCCC +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +CCCCCCCCCCCCCCCC`], + [selected_tile, bitmap` +0000000000000000 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0666666666666660 +0000000000000000`], + [play, bitmap` +DDDDDDDDDDDDDDDD +D44444444444444D +D44444444444444D +D44444444444444D +D44444LL4444444D +D44444L2LL44444D +D44444L22L44444D +D44444L222L4444D +D44444L22L44444D +D44444L2LL44444D +D44444LL4444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +DDDDDDDDDDDDDDDD`], +) + +setSolids([]) + +let level = 0 +const levels = [ + map` +... +.d. +...`, + map` +ttt +ttt +ttt`, + map` +... +... +...`, +] +setMap(levels[level]) + +addText("H-Score: " + highscore, { x: 5, y: 2, color: color`0` }); + +onInput("j", () => { + if(isDead) return; + clearText(); + + if(level == 0) { + level = 1; + setMap(levels[level]); + startSequence(); + playback = playTune(melody_40bpm, Infinity); + }else if(level == 2) { + clearText(); + level = 0; + setMap(levels[level]); + isDead = false; + addText("H-Score: " + highscore, { x: 5, y: 2, color: color`0` }); + } + + if (!inSequence) { + if (cursor_pos.x == sequence[tiles_chosen].x && cursor_pos.y == sequence[tiles_chosen].y) { + tiles_chosen += 1; + setTileFor(cursor_pos.x, cursor_pos.y, happy, 1000/speed); + lockCursor = true; + setTimeout(() => lockCursor = false, (1000/speed)); + if(tiles_chosen == sequence.length) startNewRound(); + }else { + isDead = true; + playback.end(); + setTileFor(cursor_pos.x, cursor_pos.y, sad, 1000); + setTimeout(() => { + resetVars(); + level = 2; + setMap(levels[2]); + playTune(bub); + addText(diss_list[Math.floor(Math.random() * diss_list.length)], { x: 5, y: 3, color: color`0` }); + setTimeout(() => { + playTune(bub); + addText("Score: " + score, { x: 6, y: 6, color: color`0` }); + setTimeout(() => { + playTune(bub); + addText("H-Score: " + highscore, { x: 5, y: 8, color: color`3` }); + }, 1000); + + setTimeout(() => { + playTune(bub); + addText("Press j... ", { x: 5, y: 13, color: color`9` }); + isDead = false; + }, 2000); + }, 1000); + }, 1000); + } + return; + } +}) + +onInput("w", () => { + if (inSequence || level == 2) return; + moveCursor(cursor_pos.x, cursor_pos.y - 1); +}) + +onInput("a", () => { + if (inSequence || level == 2) return; + moveCursor(cursor_pos.x - 1, cursor_pos.y); +}) + +onInput("s", () => { + if (inSequence || level == 2) return; + moveCursor(cursor_pos.x, cursor_pos.y + 1); +}) + +onInput("d", () => { + if (inSequence || level == 2) return; + moveCursor(cursor_pos.x + 1, cursor_pos.y); +}) + +afterInput(() => { + console.log("length:" + sequence.length); +}) + +function startNewRound() { + playback.end(); + playTune(hurray); + if(speed <= 4) speed += 0.2; + sequence = []; + tiles_chosen = 0; + setAllTilesFor(happy, 2000); + score++; + inSequence = true; + lockCursor = true; + setTimeout(() => { + setMap(levels[1]); + startSequence(); + if(speed >= 0.5) playback = playTune(melody_60bpm, Infinity); + else if(speed >= 1) playback = playTune(melody_70bpm, Infinity); + else if(speed >= 1.5) playback = playTune(melody_80bpm, Infinity); + else if(speed >= 2) playback = playTune(melody_100bpm, Infinity); + else if(speed >= 3.5) playback = playTune(melody_110bpm, Infinity); + else if(speed >= 4) playback = playTune(melody_120bpm, Infinity); + else playback = playTune(melody_40bpm, Infinity); + }, 1500); +} + +async function startSequence() { + await sleep(1000/speed); + for (let i = 1; i <= frequence; i++) { + let randomX = Math.floor(Math.random() * 2); + let randomY = Math.floor(Math.random() * 2); + setTile(randomX, randomY, highlighted_tile); + storeSequenceCoord(randomX, randomY); + await sleep(1000/speed); + setTile(randomX, randomY, tile); + await sleep(1000/speed); + } + frequence += 1; + lockCursor = false; + inSequence = false; + moveCursor(1, 1); +} + +function moveCursor(x, y) { + if(lockCursor) return; + + if (x > width() - 1 || x < 0 || y > height() - 1 || y < 0) return; + + setTile(cursor_pos.x, cursor_pos.y, tile); + + cursor_pos.x = x; + cursor_pos.y = y; + + setTile(x, y, selected_tile); +} + +function setTile(x, y, spriteType) { + clearTile(x, y); + addSprite(x, y, spriteType); +} + +function setAllTilesFor(spriteType, ms) { + let oldTileTypes = []; + setTimeout(() => { + for(let x = 0; x <= 2; x++) { + for(let y = 0; y <= 2; y++) { + setTile(x, y, tile); + } + } + }, 1000); + for(let x = 0; x <= 2; x++) { + for(let y = 0; y <= 2; y++) { + oldTileTypes.push(getTile(x, y)[0].type); + setTile(x, y, spriteType); + } + } +} + +function setTileFor(x, y, spriteType, ms) { + let tile = getTile(x, y)[0]; + let oldTileType = tile.type; + + setTile(x, y, spriteType); + + setTimeout(() => setTile(x, y, oldTileType), ms); +} + +function storeSequenceCoord(xVal, yVal) { + sequence.push({ x: xVal, y: yVal }); +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +function resetVars() { + if(score > highscore) { + highscore = score; + } + + speed = 1; + round = 1; + tiles_chosen = 0; + inSequence = true; + frequence = 2; + sequence = []; + cursor_pos = { + x: 1, + y: 1 + }; +} + diff --git a/games/The-Knight.js b/games/The-Knight.js index ff31f0cbfe..2c62c3bda6 100644 --- a/games/The-Knight.js +++ b/games/The-Knight.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: The Knight -@author: CragglesG +@author: CragglesG @tags: [] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/TheCombine.js b/games/TheCombine.js index b37d5b9386..a041f33081 100644 --- a/games/TheCombine.js +++ b/games/TheCombine.js @@ -2,8 +2,8 @@ @title: TheCombine @author: Sidharth B @tags: [] -@img: "" @addedOn: 2024-05-16 +@img: "" */ /* diff --git a/games/TheFlood.js b/games/TheFlood.js new file mode 100644 index 0000000000..b6eddae0b0 --- /dev/null +++ b/games/TheFlood.js @@ -0,0 +1,503 @@ +/* +@title: The Flood +@author: TheTruePickle +@tags: [] +@addedOn: 2024-09-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const ship = "s" +const water = "w" +const wall = "l" +const fakeWater = "n" +const bg = "b" +const shipIsNotRemoved = true +var currentLevel = -1 +var running = false +var interval = null +setLegend( + [player, bitmap` +0000000000000000 +0000000000000000 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +0000000000000000 +0000000000000000`], + [ship, bitmap` +................ +....33333333.... +...3333333333... +..333333333333.. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +.33333333333333. +..333333333333.. +...3333333333... +....33333333.... +................`], + [water, bitmap` +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555`], + [wall, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`], + [fakeWater, bitmap` +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555 +5555555555555555`], + [bg, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`] +) + +setSolids([]) +let level = -1 +const levels = [ + map` +................ +................ +................ +................ +.......p........ +................ +............s... +.......w........ +................ +................ +................ +................ +................ +................ +................ +................`, + map` +...............s +................ +................ +.s..........p... +................ +.w.............. +................ +................ +....w........... +................ +................ +................ +.........ww..... +..........ww.... +...........w.... +................`, + map` +................ +................ +.s.............. +................ +............s... +................ +................ +.w.............. +................ +................ +................ +................ +.............s.. +.w......w....... +................ +p...............`, + map` +wwww............w +wwww............. +www.............s +ww............... +w................ +w................ +w...........s.... +w............s... +w................ +ww............... +ww............... +ww............s.l +www.............. +wwww..........l.. +pwwwww.......l..w`, + map` +w...........lwls +.w...s......l.l. +..w.........l.l. +...w........l.l. +....w.......lsl. +.....w......lsl. +......w.....l.l. +.......w........ +........w....... +.........w...... +..........w..... +...........w.... +..s.........w... +.............w.. +..............w. +p..............w`, + map` +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +................ +................ +................ +................ +................ +.......p........ +................ +................ +................ +................ +................ +................ +......ssssss....`, + map ` +...........s...w +................ +................ +................ +..........s..... +.............s.. +................ +.......p........ +................ +................ +..........s..... +............s... +.......s........ +................ +................ +...........s....`, + map ` +wwwww..........l +wwww...........s +www............. +ww.............. +w............... +................ +................ +........p....... +............s... +..............s. +................ +................ +s..s...s........ +............s... +................ +.......s........`, + map ` +..............ww +.s.l...........w +...........l.... +......s......l.. +l.l............. +........l....... +.....ls......... +........pll..l.l +...s.........ls. +....l....s...... +l..........l.... +....s........... +.s......l....... +................ +.l.l.....l.s.... +w...............`, + map` +w.w..........w.w +.w......lll...w. +w.w.......ll.w.w +...l.......l.... +.l...s.s..s.l... +ll..s......s.l.. +l..s........s.l. +l......ss......l +.l.............l +.l....p........l +..ll..........ll +....l..ssl.lll.. +....ll...l...... +w.w...l..lll.w.w +.w.......lll..w. +w.w.......l..w.w` +] +const mainMenu = map ` +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.ww +wwbbbbbwbwbwbbbwwwwwwwwwwwwwwwwbw.w +wwwwbwwwbwbwbwwwwwwwwwwwwwwwwwww.ww +wwwwbwwwbbbwbbbwwwwwwwwwwwwwwwwwwww +wwwwbwwwbwbwbwwwwwwwwwwwwwwwwwww.ww +wwwwbwwwbwbwbbbwwwwwwwwwwwwwwww.w.w +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwbww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwbbbbwbwwwwbbbbwbbbbwbbbwwwwwwwwww +wwbwwwwbwwwwbwwbwbwwbwbwwbwwwwwwwww +wwbbwwwbwwwwbwwbwbwwbwbwwbwwwwwwwww +wwbwwwwbwwwwbwwbwbwwbwbwwbwwwwwwwww +wwbwwwwbbbbwbbbbwbbbbwbbbwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwww.....wwwwwwwwwwwwwwwwwww +wwwwwwwwwwwww.wwwwwwwwwwwwwwwwwwwww +wwwwwbbwwwwww.www...wwwwwwwwwwwwwww +wwwwwbbwwwwww.www.w.wwwwwwwwwwwwwww +wwwwwwwwwwwww.www...wwwwwwwwwwwwwww +wwbbwwww..wwwwwwwwwwwwwwwwwwwwwwwww +wwbbwwww..www...ww.wwwwwwwwwww.wwww +wwwwwwwwwwwww.wwww.wwwwwwwwwww.wwww +wwwwwbbwwwwww...w...w...w...w...www +wwwwwbbwwwwwwww.ww.ww.w.w.wwww.wwww +wwwwwwwwwwwww...wwwww...w.wwww.wwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww` +const lostMenu = map` +wswwsw +w.ww.w +wwwwww +...... +.wwww.` +const explainyThing = map` +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbsbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bwwwbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bwwwbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bwwwbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +blllbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +blllbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +blllbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +b.blbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bblbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +b.b.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb` + +function setMain() { + setMap(mainMenu) + addText("Rules", { x: 10, y: 1, color: color`2` }) + addText("Return", { x: 10, y: 3, color: color`2` }) +} + +function isGameOver() { + if (getAll(water).length == 0) { + level++ + if (interval != null) { + clearInterval(interval) + running = false + } + if (level == 10) { + level = -1 + setMain() + } + else + { + setMap(levels[level]) + } + } + if (getAll(ship).length <= level) { + if (interval != null) { + clearInterval(interval) + running = false + } + console.log(level) + level = -2 + setMap(lostMenu) + } +} + +function setIfClear(x, y, type) { + if (getAll(ship) != 0 && getTile(x, y).length != 0) { + if (getTile(x, y)[0].type == ship) { + clearTile(x, y) + } + } + if (0 <= x && x < width() && 0 <= y && y < height() && getTile(x, y).length == 0) { + addSprite(x, y, type) + } +} + +function updateWater() { + const waterArray = getAll(water) + for (let i = 0; i < waterArray.length; i++) { + const currentWater = waterArray[i] + const x = currentWater.x + const y = currentWater.y + setIfClear(x + 1, y, water) + setIfClear(x - 1, y, water) + setIfClear(x, y + 1, water) + setIfClear(x, y - 1, water) + clearTile(x, y) + addSprite(x, y, fakeWater) + } +} + +function gameUpdate(playerSprite, addWall) { + if (addWall) { + const x = playerSprite.x + const y = playerSprite.y + if (getTile(x, y).length != 1) { + return; + } + clearTile(x, y) + addSprite(x, y, wall) + updateWater() + addSprite(x, y, player) + } else { + updateWater() + } + isGameOver() +} + +function endMap() { + running = true + interval = setInterval(() => { + gameUpdate(getFirst(player), false) + }, 200) +} +setMain() +onInput("l", () => { + if (level >= 0) { + gameUpdate(getFirst(player), true) + } else if (level == -2) { + level++ + setMain() + } else if (level == -1) { + level++ + clearText() + setMap(levels[level]) + } +}); +onInput("i", () => { + if (level < 0) return; + getFirst(player).remove() + if (!running) { + endMap() + } +}); +onInput("w", () => { + if (level < 0 || getAll(player).length == 0) return; + getFirst(player).y -= 1 +}); +onInput("s", () => { + if (level < 0 || getAll(player).length == 0) return; + getFirst(player).y += 1 +}); +onInput("a", () => { + if (level < 0 || getAll(player).length == 0) return; + getFirst(player).x -= 1 +}); +onInput("d", () => { + if (level < 0 || getAll(player).length == 0) return; + getFirst(player).x += 1 +}); +onInput("j", () => { + currentLevel = level + level = -3 + setMap(explainyThing) + addText("Rules:protect ships", { x: 1, y: 1, color: color`2` }) + addText("Water moves every\ntime you place a \nwall", { x: 3, y: 3, color: color`2` }) + addText("Walls block water", { x: 3, y: 7, color: color`2` }) + addText("To place a wall", { x: 3, y: 9, color: color`2` }) + addText("To autocomplete\nthe level\n", { x: 3, y: 11, color: color`2` }) +}); +onInput("k", () => { + if (level != -3) return; + level = currentLevel + clearText() + if (level < 0) { + level = -1 + setMain() + } else { + setMap(levels[level]) + } +}); + diff --git a/games/TheLostPenguin.js b/games/TheLostPenguin.js index fb7a5c17b3..96b30c9a26 100644 --- a/games/TheLostPenguin.js +++ b/games/TheLostPenguin.js @@ -1,7 +1,7 @@ /* @title: The Lost Penguin @author: Luca -@tags: ['puzzle', 'maze'] +@tags: ['puzzle'] @addedOn: 2024-07-15 */ diff --git a/games/TheMazeGame.js b/games/TheMazeGame.js index 857862f2c7..4f0146b787 100644 --- a/games/TheMazeGame.js +++ b/games/TheMazeGame.js @@ -1,7 +1,7 @@ /* @title: TheMazeGame @author: Navrit Angurana -@tags: ['advanced'] +@tags: [] @addedOn: 2024-02-17 First time? Check out the tutorial game: diff --git a/games/TheSpaceGuardian.js b/games/TheSpaceGuardian.js index 746b3d51c9..d03544e4be 100644 --- a/games/TheSpaceGuardian.js +++ b/games/TheSpaceGuardian.js @@ -1,6 +1,6 @@ /* @title: TheSpaceGuardian -@author: Adrian DeGendt +@author: Adrian DeGendt @tags: [] @addedOn: 2024-07-22 diff --git a/games/TheTombOfAThousandTerrors.js b/games/TheTombOfAThousandTerrors.js index bd92be5e83..9e9ec6f36c 100644 --- a/games/TheTombOfAThousandTerrors.js +++ b/games/TheTombOfAThousandTerrors.js @@ -1,8 +1,8 @@ /* @title: The Tomb of a Thousand (T)errors -@tags: ['logic'] -@addedOn: 2022-09-13 @author: Fabian +@tags: ['puzzle'] +@addedOn: 2022-09-13 */ const splash = "s"; diff --git a/games/The_Bird_Feedo.js b/games/The_Bird_Feedo.js index fe5f7773fd..98ad6cae5a 100644 --- a/games/The_Bird_Feedo.js +++ b/games/The_Bird_Feedo.js @@ -1,8 +1,8 @@ /* @title: The Bird Feedo +@author: Arpan Pandey @tags: ['endless'] @addedOn: 2023-01-09 -@author: Arpan Pandey */ const bird = "b"; const cookie = "c"; diff --git a/games/The_Legend_Of_Sprig.js b/games/The_Legend_Of_Sprig.js index 2086e7a4b9..6c82486bac 100644 --- a/games/The_Legend_Of_Sprig.js +++ b/games/The_Legend_Of_Sprig.js @@ -2,7 +2,7 @@ /* @title: The_Legend_Of_Sprig @author: Medieval Apple -@tags: ['advanced'] +@tags: [] @addedOn: 2023-10-15 */ diff --git a/games/The_Legend_of_Zelda-Links_Escape.js b/games/The_Legend_of_Zelda-Links_Escape.js index f1d45eb248..6cf1ed864f 100644 --- a/games/The_Legend_of_Zelda-Links_Escape.js +++ b/games/The_Legend_of_Zelda-Links_Escape.js @@ -2,7 +2,7 @@ /* @title: The_Legend_of_Zelda-Links_Escape @author: ItzHex -@tags: ['advanced'] +@tags: [] @addedOn: 2023-08-28 */ diff --git a/games/The_Maze_of_Sprig.js b/games/The_Maze_of_Sprig.js index 4c0f55b994..9ca2b9361d 100644 --- a/games/The_Maze_of_Sprig.js +++ b/games/The_Maze_of_Sprig.js @@ -1,8 +1,8 @@ /* @title: The Maze of Sprig -@tags: ['sokoban-style'] -@addedOn: 2023-02-14 @author: SahilD +@tags: ['puzzle'] +@addedOn: 2023-02-14 */ /* instructions diff --git a/games/The_Pet.js b/games/The_Pet.js index 675805e39f..cb2b063b6f 100644 --- a/games/The_Pet.js +++ b/games/The_Pet.js @@ -1,8 +1,8 @@ /* @title: The_Pet +@author: wyn-cmd @tags: ['simulation'] @addedOn: 2022-12-07 -@author: wyn-cmd */ diff --git a/games/The_Real_Football.js b/games/The_Real_Football.js index 88b317975f..9f0c1362ec 100644 --- a/games/The_Real_Football.js +++ b/games/The_Real_Football.js @@ -1,7 +1,7 @@ /* @title: the real football @author: nikhil -@tags: ['soccer','football'] +@tags: ['sports'] @addedOn: 2024-07-08 */ diff --git a/games/The_Sky_Is_Falling_For_Real_This_Time.js b/games/The_Sky_Is_Falling_For_Real_This_Time.js index 6935c9e4bf..26d457bc24 100644 --- a/games/The_Sky_Is_Falling_For_Real_This_Time.js +++ b/games/The_Sky_Is_Falling_For_Real_This_Time.js @@ -1,8 +1,8 @@ /* @title: The_Sky_Is_Falling_For_Real_This_Time +@author: Sawgur @tags: ['endless'] @addedOn: 2023-02-11 -@author: Sawgur */ diff --git a/games/The_Story_of_Grass.js b/games/The_Story_of_Grass.js index 73e00499a4..a3fdf0d640 100644 --- a/games/The_Story_of_Grass.js +++ b/games/The_Story_of_Grass.js @@ -2,7 +2,7 @@ /* @title: The_Story_of_Grass @author: Sarah Wang / Sarinara -@tags: ['puzzle-score'] +@tags: ['puzzle'] @addedOn: 2023-05-28 */ diff --git a/games/The_UFO_farm.js b/games/The_UFO_farm.js index ad01beb2ad..d2a84fa9e1 100644 --- a/games/The_UFO_farm.js +++ b/games/The_UFO_farm.js @@ -1,8 +1,8 @@ /* @title: The UFO farm +@author: Harrison Ng @tags: ['endless'] @addedOn: 2023-01-20 -@author: Harrison Ng */ let tractor; diff --git a/games/Tic-Tac-No.js b/games/Tic-Tac-No.js index fea3d2ce99..96609c0cc4 100644 --- a/games/Tic-Tac-No.js +++ b/games/Tic-Tac-No.js @@ -1,8 +1,8 @@ /* @title: Tic-Tac-No +@author: Ojas Somethin' @tags: ['multiplayer'] @addedOn: 2023-02-02 -@author: Ojas Somethin' */ /* diff --git a/games/Tic-Tac-Toe-YZ.js b/games/Tic-Tac-Toe-YZ.js index 99a21b4bcd..6ae5aab315 100644 --- a/games/Tic-Tac-Toe-YZ.js +++ b/games/Tic-Tac-Toe-YZ.js @@ -1,7 +1,7 @@ /* @title: Tic-Tac-Toe @author: bochk0 -@tags: ['classic'] +@tags: ['retro'] @addedOn: 2024-07-17 */ diff --git a/games/Tic-Tac-Toe.js b/games/Tic-Tac-Toe.js index c5c330a5f0..87145758c3 100644 --- a/games/Tic-Tac-Toe.js +++ b/games/Tic-Tac-Toe.js @@ -1,8 +1,8 @@ /* @title: Tic-Tac-Toe -@tags: ['classic'] -@addedOn: 2023-01-19 @author: Atharv Gupta +@tags: ['retro'] +@addedOn: 2023-01-19 */ diff --git a/games/TicTacToe2.js b/games/TicTacToe2.js index 9a690875fc..bfde090061 100644 --- a/games/TicTacToe2.js +++ b/games/TicTacToe2.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: TicTacToe @author: Benjamin -@tags: ['tictactoe','tic-tac-toe'] +@tags: ['multiplayer'] @addedOn: 2024-07-01 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/Tic_Tac_GPT.js b/games/Tic_Tac_GPT.js index b7da22789d..429609ed86 100644 --- a/games/Tic_Tac_GPT.js +++ b/games/Tic_Tac_GPT.js @@ -1,8 +1,8 @@ /* @title: TicTacGPT -@tags: ['classic'] -@addedOn: 2023-09-08 @author: 2008wbbv +@tags: ['retro'] +@addedOn: 2023-09-08 This isn't 100% made by me, as I heavily modified Northernside's code and added some bugs and a AI player.credits : https://sprig.hackclub.com/gallery/Tic_Tac_Toe diff --git a/games/Tic_Tac_Toe.js b/games/Tic_Tac_Toe.js index 6775b831b7..19efacdb3b 100644 --- a/games/Tic_Tac_Toe.js +++ b/games/Tic_Tac_Toe.js @@ -1,8 +1,8 @@ /* @title: TicTacToe -@tags: ['classic'] -@addedOn: 2023-02-02 @author: Northernside +@tags: ['retro'] +@addedOn: 2023-02-02 This isn't 100% made by me, as I heavily modified Atharv Gupta's code and fixed some bugs + improved the code. diff --git a/games/Tickets_Please.js b/games/Tickets_Please.js new file mode 100644 index 0000000000..54ee52a567 --- /dev/null +++ b/games/Tickets_Please.js @@ -0,0 +1,2299 @@ +/* +@title: Tickets Please! +@author: Vaporform (ysk) +@tags: ['simulation'] +@addedOn: 2024-09-18 +*/ + +//A game heavily inspired by Papers Please! +//You are a ticket inspector. Find the difference bewteen the ticket and the person. +//If you got it wrong 3 times, the game is over! +//Aim for the highscore! +//////CONTROLS////// +//J to decline +//L to accept +//I to bring the ticket up +//K to bring the ticket down + +//Set screen size +let screen_width = 64 +let screen_height = 64 + +/////////////////////////////RENDERING ENGINE///////////////////////////// +//Rederpipeline for sprig, allows devs to display more advanced stuff! +//By Vaporform (ysk) +const colors = { + q: "0", + w: "1", + e: "2", + r: "3", + t: "4", + y: "5", + u: "6", + i: "7", + o: "8", + p: "9", + a: "C", + s: "D", + d: "F", + f: "H", + g: "L", + h: ".", +} +//Finds corresponding index from value. +function findKeyByValue(value) { + return Object.keys(colors).find(key => colors[key] === value) +} + +//Creating characters for all available colors. ( RUN ONCE! ) +function setcolorLegend() { + const generateBitmap = (value) => { + return Array(16).fill(value.repeat(16)).join('\n') + } + //Behold, the list of colors! + let colorLegend = Object.entries(colors).map(([color, value]) => [color, bitmap`${generateBitmap(value)}`]) + setLegend(...colorLegend) +} //Taken colors are q-h in qwerty + + +//Function for sprite scaling +function scaleSprite(sprite, scaleX, scaleY) { + let scaledSprite = []; + let spriteLines = sprite.trim().split('\n'); + + for (let y = 0; y < spriteLines.length; y++) { + let line = spriteLines[y]; + let scaledLines = Array(scaleY).fill(null).map(() => ''); + + for (let x = 0; x < line.length; x++) { + let pixel = line[x]; + for (let sy = 0; sy < scaleY; sy++) { + scaledLines[sy] += Array(scaleX).fill(pixel).join(''); + } + } + + scaledSprite.push(...scaledLines); + } + + return scaledSprite; +} + +let screen = Array(screen_height).fill(null).map(() => Array(screen_width).fill('.')); + +function drawScreen(type = '.') { + screen = Array(screen_height).fill(null).map(() => Array(screen_width).fill(type)); +} + +//Rendering Function +function Render(sprites = [], offsets = [], scales = []) { + // Initialize a blank screen with a default character (e.g., '.') + + // Render each sprite onto the screen + for (let i = 0; i < sprites.length; i++) { + let sprite = sprites[i]; + let [offsetX, offsetY] = offsets[i] || [0, 0]; + let [scaleX, scaleY] = scales[i] || [1, 1]; + let scaledSprite = scaleSprite(sprite, scaleX, scaleY); + for (let y = 0; y < screen_height; y++) { + for (let x = 0; x < screen_width; x++) { + let spriteX = x - offsetX; + let spriteY = y - offsetY; + + if (spriteX >= 0 && spriteX < scaledSprite[0].length && spriteY >= 0 && spriteY < scaledSprite.length) { + let spriteChar = scaledSprite[spriteY][spriteX]; + if (spriteChar != '.') { + screen[y][x] = findKeyByValue(spriteChar); + } + } + } + } + } + + // Convert the 2D screen array to a string for display + let mapping = screen.map(row => row.join('')).join('\n'); + + //console.log(mapping); //lag + setMap(mapping); +} + +setcolorLegend() // Initialize Render Colors. + +/////////////////////////////Game code below!///////////////////////////// +let strikes = 0 +const viol = bitmap` +................ +................ +................ +................ +2222222222222222 +2000000000000002 +2020232222320202 +2020223223220202 +2020222332220202 +2020223223220202 +2020232222320202 +2000000000000002 +2222222222222222 +................ +................ +................` + +let runonce = false +const music1 = tune` +256.4102564102564: A4-256.4102564102564 + D4/256.4102564102564 + E4~256.4102564102564, +256.4102564102564: A4-256.4102564102564 + D4/256.4102564102564, +256.4102564102564: A4-256.4102564102564 + D4/256.4102564102564, +256.4102564102564: C5-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: C4~256.4102564102564, +256.4102564102564: B4-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: B4-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: B4-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564 + E4~256.4102564102564, +256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564 + C4~256.4102564102564, +256.4102564102564: F5-256.4102564102564 + G4/256.4102564102564, +256.4102564102564, +256.4102564102564: G5-256.4102564102564 + C5/256.4102564102564, +256.4102564102564: A5-256.4102564102564 + D5/256.4102564102564, +256.4102564102564: E4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +769.2307692307693, +256.4102564102564: E4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +512.8205128205128` +const music2 = tune` +256.4102564102564: A5-256.4102564102564 + G4/256.4102564102564 + D4~256.4102564102564, +256.4102564102564: A5-256.4102564102564 + G4/256.4102564102564, +256.4102564102564: A5-256.4102564102564 + G4/256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: C4~256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564 + D4~256.4102564102564, +256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564 + C4~256.4102564102564, +256.4102564102564: E5-256.4102564102564 + D4/256.4102564102564, +256.4102564102564, +256.4102564102564: E5-256.4102564102564 + D4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + C4/256.4102564102564 + D4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +769.2307692307693, +256.4102564102564: D4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +769.2307692307693` + +const daycont = tune` +265.4867256637168: A4-265.4867256637168, +265.4867256637168: A4-265.4867256637168, +265.4867256637168: A4-265.4867256637168, +265.4867256637168: G4-265.4867256637168, +265.4867256637168, +265.4867256637168: G4-265.4867256637168, +265.4867256637168: G4-265.4867256637168, +265.4867256637168: G4-265.4867256637168, +265.4867256637168: F4-265.4867256637168, +265.4867256637168, +265.4867256637168: F4-265.4867256637168, +265.4867256637168: F4-265.4867256637168, +265.4867256637168: F4-265.4867256637168, +265.4867256637168: E4-265.4867256637168, +265.4867256637168, +265.4867256637168: E4-265.4867256637168, +265.4867256637168, +265.4867256637168: D4-265.4867256637168, +3716.8141592920356` +let clear = bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` +let title = bitmap` +0000033330000000 +0000000300000000 +0000003000000000 +0000000000000000 +0000333330000000 +0033333333330000 +0032233223333000 +0032233223333000 +0033333333333000 +0003333333333330 +0000333330003330 +0000000000033330 +0000000033333330 +0000000033333330 +0000000003333300 +0000000000000000` +let bars = bitmap` +0000000000000000 +1111111111111111 +1111111111111111 +0000000000000000 +0000000000000000 +1111111111111111 +1111111111111111 +0000000000000000 +0000000000000000 +1111111111111111 +1111111111111111 +0000000000000000 +0000000000000000 +1111111111111111 +1111111111111111 +0000000000000000` +let barsposition = [0, -40] +const fullmusic = tune`256.4102564102564: A4-256.4102564102564 + D4/256.4102564102564 + E4~256.4102564102564, +256.4102564102564: A4-256.4102564102564 + D4/256.4102564102564, +256.4102564102564: A4-256.4102564102564 + D4/256.4102564102564, +256.4102564102564: C5-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: C4~256.4102564102564, +256.4102564102564: B4-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: B4-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: B4-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564 + E4~256.4102564102564, +256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + F4/256.4102564102564 + C4~256.4102564102564, +256.4102564102564: F5-256.4102564102564 + G4/256.4102564102564, +256.4102564102564, +256.4102564102564: G5-256.4102564102564 + C5/256.4102564102564, +256.4102564102564: A5-256.4102564102564 + D5/256.4102564102564, +256.4102564102564: E4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +769.2307692307693, +256.4102564102564: E4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +256.4102564102564: A5-256.4102564102564 + G4/256.4102564102564 + D4~256.4102564102564, +256.4102564102564: A5-256.4102564102564 + G4/256.4102564102564, +256.4102564102564: A5-256.4102564102564 + G4/256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: C4~256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: G5-256.4102564102564 + F4/256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564 + D4~256.4102564102564, +256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564, +256.4102564102564: F5-256.4102564102564 + E4/256.4102564102564 + C4~256.4102564102564, +256.4102564102564: E5-256.4102564102564 + D4/256.4102564102564, +256.4102564102564, +256.4102564102564: E5-256.4102564102564 + D4/256.4102564102564, +256.4102564102564: D5-256.4102564102564 + C4/256.4102564102564 + D4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +769.2307692307693, +256.4102564102564: D4~256.4102564102564, +769.2307692307693, +256.4102564102564: C4~256.4102564102564, +769.2307692307693` +const reeling = tune` +58.93909626719057: C4/58.93909626719057, +58.93909626719057: C4/58.93909626719057, +58.93909626719057: C4/58.93909626719057, +58.93909626719057: C4/58.93909626719057, +58.93909626719057: C4/58.93909626719057, +58.93909626719057: C4/58.93909626719057, +58.93909626719057: C4/58.93909626719057, +1473.4774066797643` +frame = 0 + +let gamestate = 0 +let highscore = 0 //Your highscore here! change it to your best + +const themesong = playTune(fullmusic, Infinity) +/////////////THE TITLE SCREEN +sframe = 0 +datecount = 1 + + +function daynext() { + sframe += 1 + console.log("stopping loop") + themesong.end() + barsposition = [0, -40 + sframe] + Render([bars], [ + barsposition + ], [ + [7, 3] + ]) + playTune(reeling) + if (-40 + sframe >= 10) { + console.log("done loop") + playTune(daycont) + addText(`Day ${datecount}`, { + x: 4, + y: 1, + color: color`2` + }) + //Animation finishes, wait around 10 seconds + sframe = 0 + + setTimeout(transition, 8000); + + } else { + setTimeout(daynext, 60); + } +} + +function tscreen() { + frame += 1 + Render([clear, title], [ + [0, 0], + [20, Math.ceil(0 + Math.sin(frame / 8))] + ], [ + [8, 8], + [1, 1] + ]) + + console.log(gamestate) + if (gamestate == 1) { + daynext() + } else if (gamestate == 2) { + setTimeout(maingame, 1); + } else { + setTimeout(tscreen, 10); + } +} + +addText("Tickets Please", { + x: 3, + y: 5, + color: color`3` +}) +addText("Begin (K)", { + x: 6, + y: 8, + color: color`2` +}) +addText(`Highscore: ${highscore}`, { + x: 3, + y: 10, + color: color`2` +}) +addText("MAKE ORPHEUS PROUD", { + x: 1, + y: 15, + color: color`2` +}) +onInput("k", () => { + if (gamestate == 0) { + gamestate = 1 + render = 0 + clearText() + } + if (gamestate > 6 && lookable && gamestate != 16) { + gamestate = -2 + } +}) +tscreen() +/////////////// + +//////////////MAIN GAME +let backdrop = bitmap` +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +0FF0FF0FF0FF0FF0 +FFFFFFFFFFFFFFFF +F0FF0FF0FF0FF0FF +FFFFFFFFFFFFFFFF +0F0F0F0F0F0F0F0F +F0F0F0F0F0F0F0F0 +0F0F000F0F000F0F +00F00F00F00F00F0 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` +let intensity = 0.1 // 1 to all fake, 0 to all real + +function transition() { + sframe += 1 + barsposition[1] -= sframe + clearposition = [0, 0 - sframe] + Render([bitmap` +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF`, backdrop, backdrop, backdrop, backdrop, backdrop, backdrop, bitmap` +................ +..000000000000.. +00CCCCCCCCCCCC00 +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC`, bitmap` +......0000...... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +......0000...... +.......00....... +.......00....... +..000000000000.. +..0CCCCCCCCCC0.. +..0CCCCCCCCCC0.. +0000000000000000 +0333333333333330 +0333333333333330 +0333333333333330 +0000000000000000`, + bitmap` +......0000...... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +......0000...... +.......00....... +.......00....... +..000000000000.. +..0CCCCCCCCCC0.. +..0CCCCCCCCCC0.. +0000000000000000 +0444444444444440 +0444444444444440 +0444444444444440 +0000000000000000`, clear, bars + ], + [ + [0, 0], + [-5, 35], + [10, 35], + [20, 35], + [30, 35], + [40, 35], + [50, 35], + [0, 45], + [1, 45], + [47, 45], + clearposition, + barsposition, + ], + [ + [8, 8], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [4, 2], + [1, 1], + [1, 1], + [5, 1], + [7, 3] + + ]) + playTune(reeling) + clearText() + if (barsposition[1] <= -50) { + console.log("done loop") + //Animation finishes, wait around 10 miliseconds + setTimeout(maingame, 20); + Render(R_ARRAY, P_ARRAY, S_ARRAY) + sframe = 0 + } else { + setTimeout(transition, 60); + } +} + +const hum = tune` +1200: C4^1200, +1200, +1200: E4^1200, +1200, +1200: C4^1200, +2400, +1200: D4^1200, +1200: E4^1200, +1200, +1200: C4^1200, +1200, +1200: E4^1200, +1200, +1200: C4^1200, +2400, +1200: D4^1200, +1200: F4^1200, +1200: E4^1200, +1200: C4^1200, +1200: E4^1200, +1200: D4^1200, +2400, +1200: C4^1200, +1200, +1200: C4^1200, +1200, +1200: D4^1200, +2400` + +face = [ + bitmap` +................ +................ +................ +................ +................ +................ +...2222222222... +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +...0222222220... +....00000000....`, + bitmap` +................ +................ +................ +................ +................ +................ +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +...0222222220... +....02222220.... +.....000000.....`, + bitmap` +................ +................ +................ +................ +................ +................ +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +..022222222220.. +...0222222220... +....02222220.... +.....000000.....`, + bitmap` +................ +................ +................ +................ +................ +................ +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +..022222222220.. +..022222222220.. +...0222222220... +....00000000....`, + bitmap` +................ +................ +................ +................ +................ +................ +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..000000000000..`, + bitmap` +................ +................ +................ +................ +................ +...0222222220... +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +...0222222220... +....02222220.... +....02222220.... +....02222220.... +.....000000.....`, + bitmap` +................ +................ +................ +................ +................ +...0222222220... +...0222222220... +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +...0000000000...`, + bitmap` +................ +................ +................ +................ +................ +...0222222220... +...0222222220... +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220.. +...0222222220... +....00000000....`, +] +cloth = [ + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +...0000000000... +..022222222220.. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +.....000000..... +....02222220.... +...0222222220... +..022222222220.. +..022222222220.. +..022222222220..`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +.....000000..... +....02222220.... +..002222222200.. +.02222222222220. +.02222222222220. +.02222222222220.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +......0000...... +....00222200.... +...0222222220... +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220..`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +......0000...... +.....022220..... +...0022222200... +..022222222220.. +..022222222220.. +..022222222220.. +..022222222220..`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +......0000...... +.....022220..... +....02222220.... +...0222222220... +..022222222220.. +..022222222220.. +..022222222220..`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +......0000...... +.....022220..... +....02222220.... +...0222222220... +..022222222220.. +..022222222220.. +..022222222220..`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +.....000000..... +.00002222220000. +0222222222222220 +0222222222222220 +0222222222222220 +0222222222222220 +0222222222222220`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +.00000000000000. +0222222222222220 +0222222222222220 +0222222222222220 +0222222222222220 +0222222222222220 +0222222222222220`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +..000000000000.. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220. +.02222222222220.`, +] +eyes = [ + bitmap` +................ +................ +................ +................ +................ +................ +...00......00... +...00......00... +................ +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +..000......000.. +...0........0... +................ +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +...0........0... +...0........0... +...0........0... +................ +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +....0......0.... +...00......00... +................ +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +...00......00... +...0........0... +................ +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +...00......00... +...00......00... +...00......00... +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +..000......000.. +...0........0... +..000......000.. +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +..000......000.. +.0.0........0.0. +..000......000.. +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +..000......000.. +.0.0........0.0. +................ +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +..000......000.. +..000......000.. +..000......000.. +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +..000......000.. +..000......000.. +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +..000......000.. +................ +................ +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +..0000....0000.. +................ +..0000....0000.. +................ +................ +................ +................ +................ +................ +................`, + bitmap` +................ +................ +................ +................ +................ +................ +....000..000.... +................ +....000..000.... +................ +................ +................ +................ +................ +................ +................`, +] +hair = [ + bitmap` +................ +................ +................ +................ +................ +................ +................ +........00...... +....000000000... +..000000000000.. +.0000..00000000. +.000.........00. +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +....00000000.... +..000000000000.. +.00000000000000. +.000........000. +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +......0000...... +....000000000... +..000000000000.. +.00000000000000. +.000...00...000. +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +......0000...... +....000000000... +..000000000000.. +.0000......0000. +.000........000. +.000........000. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +....00000000.... +..000000000000.. +.000........000. +.00..........00. +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +.....0000000.... +....000000000... +..000000000000.. +.00000000...000. +.000.........00. +.000.........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +........000..... +....000000000... +..000000000000.. +.0000......0000. +.000.........00. +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +.....000000..... +....000000000... +..000000000000.. +.00000000000000. +.000.00..00.000. +.00...0..0...00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +....00000000.... +...0000000000... +..000000000000.. +.00000000000000. +.000.0.00.0.000. +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +.....0.0.0...... +...0.000000.0... +..0.000000000.0. +..000000000000.. +.00000000000000. +0000..0000..0000 +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +......0.0.0..... +0..0.000000.0.0. +.0.000000000.0.. +..000000000000.0 +.00000000000000. +0000..0000..0000 +.00..........00. +.0............0. +.0............0. +.0............0.`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +......00000..... +..000000000000.. +.00000000000000. +0000000000000000 +000..........000 +00............00 +00............00 +00............00`, +] + +R_ARRAY = [bitmap` +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF`, backdrop, backdrop, backdrop, backdrop, backdrop, backdrop, bitmap` +................ +..000000000000.. +00CCCCCCCCCCCC00 +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC`, bitmap` +......0000...... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +......0000...... +.......00....... +.......00....... +..000000000000.. +..0CC022220CC0.. +..0CC000020CC0.. +0000000002000000 +0333300002033330 +0333302002033330 +0333302222033330 +0000000000000000`, + bitmap` +......0000...... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +.....0CCCC0..... +......0000...... +.......00....... +.......00....... +..000000000000.. +..0CC020CCCCC0.. +..0CC020CCCCC0.. +0000002000000000 +0444402044444440 +0444402000044440 +0444402222044440 +0000000000000000`, +] +P_ARRAY = [ + [0, 0], + [-5, 35], + [10, 35], + [20, 35], + [30, 35], + [40, 35], + [50, 35], + [0, 45], + [1, 45], + [47, 45] +] +S_ARRAY = [ + [8, 8], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [4, 2] +] +let updatetime = 20 + +function getRandomItem(array) { + return array[Math.floor(Math.random() * array.length)]; +} +let charoffset_x = 0 +let char_isvalid = false + +let randomFace +let randomCloth +let randomEyes +let randomHair +let randomName +let randomStamp + +let irandomFace +let irandomCloth +let irandomEyes +let irandomHair +let irandomName +let irandomStamp +let irandomStampLogo +let alias_tf + +let tickets = 0 + +const names = ['Aaran', 'Aaren', 'Aarez', 'Aarman', 'Aaron', 'Aarron', 'Aaryan', 'Aaryn', 'Aayan', 'Aazaan', 'Abaan', 'Abbas', 'Abdallah', 'Abdul', 'Abdullah', 'Abdur', 'Abel', 'Abhinav', 'Abid', 'Abir', 'Abraham', 'Abu', 'Abubakar', 'Ace', 'Adain', 'Adam', 'Addison', 'Addisson', 'Adegbola', 'Aden', 'Adenn', 'Adie', 'Adil', 'Aditya', 'Adnan', 'Adrian', 'Adrien', 'Aedan', 'Aedin', 'Aedyn', 'Aeron', 'Afonso', 'Ahmad', 'Ahmed', 'Ahoua', 'Ahtasham', 'Aiadan', 'Aidan', 'Aiden', 'Aidian', 'Aidy', 'Ailin', 'Aiman', 'Ainsley', 'Ainslie', 'Airen', 'Airidas', 'Airlie', 'AJ', 'Ajay', 'A-Jay', 'Ajayraj', 'Akan', 'Akram', 'Al', 'Ala', 'Alan', 'Alanas', 'Alasdair', 'Alastair', 'Alber', 'Albert', 'Albie', 'Aldred', 'Alec', 'Aled', 'Aleem', 'Alessio', 'Alex', 'Alexei', 'Alexx', 'Alf', 'Alfee', 'Alfie', 'Alfred', 'Alfy', 'Alhaji', 'Ali', 'Aliekber', 'Alieu', 'Alisdair', 'Alishan', 'Alistair', 'Alistar', 'Alister', 'Aliyaan', 'Allan', 'Allen', 'Allister', 'Ally', 'Alphonse', 'Altyiab', 'Alum', 'Alvern', 'Alvin', 'Alyas', 'Amaan', 'Aman', 'Amani', 'Ameer', 'Amgad', 'Ami', 'Amin', 'Amir', 'Ammaar', 'Ammar', 'Ammer', 'Amos', 'Amrinder', 'Amrit', 'Amro', 'Anay', 'Andrea', 'Andreas', 'Andrei', 'Andrejs', 'Andrew', 'Andy', 'Anees', 'Anesu', 'Angel', 'Angelo', 'Angus', 'Anir', 'Anis', 'Anish', 'Annan', 'Anndra', 'Anselm', 'Anthony', 'Antoine', 'Anton', 'Antoni', 'Antonio', 'Antony', 'Antonyo', 'Anubhav', 'Aodhan', 'Aon', 'Aonghus', 'Apisai', 'Arafat', 'Aran', 'Arandeep', 'Arann', 'Aray', 'Arayan', 'Archie', 'Arda', 'Ardal', 'Ardeshir', 'Areeb', 'Areez', 'Aref', 'Arfin', 'Argyle', 'Argyll', 'Ari', 'Aria', 'Arian', 'Arihant', 'Arjuna', 'Arlo', 'Armaan', 'Arman', 'Armen', 'Arnab', 'Arnav', 'Arnold', 'Aron', 'Aronas', 'Arran', 'Arrham', 'Arron', 'Arryn', 'Arsalan', 'Artem', 'Arthur', 'Artur', 'Arturo', 'Arun', 'Arunas', 'Arved', 'Arya', 'Aryan', 'Aryian', 'Aryn', 'Asa', 'Asfhan', 'Ash', 'Ashley', 'Ashton', 'Ashtyn', 'Ashwin', 'Asif', 'Asim', 'Aslam', 'Asrar', 'Ata', 'Atal', 'Atapattu', 'Ateeq', 'Athol', 'Athon', 'Atli', 'Atom', 'Attila', 'Aulay', 'Aun', 'Austen', 'Austin', 'Avani', 'Averon', 'Avi', 'Avinash', 'Avraham', 'Awais', 'Awwal', 'Axel', 'Ayaan', 'Ayan', 'Aydan', 'Ayden', 'Aydin', 'Aydon', 'Ayman', 'Ayomide', 'Ayren', 'Ayrton', 'Aytug', 'Ayub', 'Ayyub', 'Azaan', 'Azedine', 'Azeem', 'Azim', 'Aziz', 'Azlan', 'Azzam', 'Azzedine', 'Babur', 'Bader', 'Badr', 'Badsha', 'Bailee', 'Bailey', 'Bailie', 'Bailley', 'Baillie', 'Baley', 'Balian', 'Banan', 'Barath', 'Barkley', 'Barney', 'Baron', 'Barrie', 'Barry', 'Bartosz', 'Basher', 'Basile', 'Baxter', 'Baye', 'Bayley', 'Beau', 'Beinn', 'Bekim', 'Believe', 'Ben', 'Bendeguz', 'Benedict', 'Benjamin', 'Benjamyn', 'Benji', 'Benn', 'Bennett', 'Benny', 'Benoit', 'Bentley', 'Berkay', 'Bernard', 'Bertie', 'Bevin', 'Bezalel', 'Bharath', 'Bilal', 'Bill', 'Billy', 'Binod', 'Bjorn', 'Blaike', 'Blaine', 'Blair', 'Blaire', 'Blake', 'Blazej', 'Blazey', 'Blessing', 'Blue', 'Blyth', 'Bo', 'Boab', 'Bob', 'Bobby', 'Bodhan', 'Boedyn', 'Bogdan', 'Bohbi', 'Bony', 'Bowen', 'Bowie', 'Boyd', 'Bracken', 'Brad', 'Bradan', 'Braden', 'Bradley', 'Bradlie', 'Bradly', 'Brady', 'Bradyn', 'Braeden', 'Braiden', 'Brajan', 'Brandan', 'Branden', 'Brandon', 'Brandyn', 'Brannan', 'Brayden', 'Braydon', 'Braydyn', 'Breandan', 'Brehme', 'Brendan', 'Brendon', 'Brendyn', 'Breogan', 'Bret', 'Brett', 'Briaddon', 'Brian', 'Brodi', 'Brodie', 'Brody', 'Brogan', 'Broghan', 'Brooke', 'Brooklin', 'Brooklyn', 'Bruce', 'Bruin', 'Bruno', 'Brunon', 'Bryan', 'Bryce', 'Bryden', 'Brydon', 'Bryn', 'Brynmor', 'Bryson', 'Buddy', 'Bully', 'Burak', 'Burhan', 'Butali', 'Butchi', 'Byron', 'Cabhan', 'Cadan', 'Cade', 'Caden', 'Cadon', 'Cadyn', 'Caedan', 'Caedyn', 'Cael', 'Caelan', 'Caelen', 'Caethan', 'Cahl', 'Cahlum', 'Cai', 'Caidan', 'Caiden', 'Caidyn', 'Caie', 'Cailaen', 'Cailean', 'Cailin', 'Cain', 'Caine', 'Cairn', 'Cal', 'Calan', 'Calder', 'Cale', 'Calean', 'Caleb', 'Calen', 'Caley', 'Calib', 'Calin', 'Callahan', 'Callan', 'Calley', 'Callie', 'Callin', 'Callum', 'Callun', 'Callyn', 'Calum', 'Calvin', 'Cambell', 'Camerin', 'Cameron', 'Campbel', 'Campbell', 'Camron', 'Caolain', 'Caolan', 'Carl', 'Carlo', 'Carlos', 'Carrich', 'Carrick', 'Carson', 'Carter', 'Carwyn', 'Casey', 'Casper', 'Cassy', 'Cathal', 'Cator', 'Cavan', 'Cayden', 'Ceejay', 'Ceilan', 'Ceiran', 'Ceirin', 'Ceiron', 'Cejay', 'Celik', 'Cephas', 'Cesar', 'Cesare', 'Chad', 'Chang-Ha', 'Charles', 'Charley', 'Charlie', 'Charly', 'Chase', 'Che', 'Chester', 'Chevy', 'Chi', 'Chibudom', 'Chidera', 'Chimsom', 'Chin', 'Chintu', 'Chiqal', 'Chiron', 'Chris', 'Christie', 'Christy', 'Chu', 'Cian', 'Ciann', 'Ciar', 'Ciaran', 'Ciarian', 'Cieran', 'Cillian', 'Cillin', 'Cinar', 'CJ', 'C-Jay', 'Clark', 'Clarke', 'Clayton', 'Clement', 'Clifford', 'Clyde', 'Cobain', 'Coban', 'Coben', 'Cobi', 'Cobie', 'Coby', 'Codey', 'Codi', 'Codie', 'Cody', 'Cody-Lee', 'Coel', 'Cohan', 'Cohen', 'Colby', 'Cole', 'Colin', 'Coll', 'Colm', 'Colt', 'Colton', 'Colum', 'Colvin', 'Comghan', 'Conal', 'Conall', 'Conan', 'Conar', 'Conlan', 'Conley', 'Conli', 'Conlin', 'Conlly', 'Conlon', 'Conlyn', 'Connal', 'Connall', 'Connan', 'Connar', 'Connel', 'Connell', 'Conner', 'Connolly', 'Connor', 'Conor', 'Conrad', 'Cooper', 'Copeland', 'Coray', 'Corben', 'Corbin', 'Corey', 'Cori', 'Corie', 'Corin', 'Cormac', 'Cormack', 'Cormak', 'Corran', 'Corrie', 'Cory', 'Cosmo', 'Coupar', 'Craig', 'Crawford', 'Creag', 'Crispin', 'Cristian', 'Crombie', 'Cruiz', 'Cruz', 'Cuillin', 'Cullen', 'Cullin', 'Curtis', 'Cyrus', 'Daanyaal', 'Daegan', 'Daegyu', 'Dafydd', 'Dagon', 'Dailey', 'Daimhin', 'Daithi', 'Dakota', 'Daksh', 'Dale', 'Dalong', 'Dalton', 'Damian', 'Damien', 'Damon', 'Dan', 'Danar', 'Dane', 'Danial', 'Daniel', 'Daniele', 'Daniels', 'Daniil', 'Danish', 'Daniyal', 'Danniel', 'Danny', 'Dante', 'Danyal', 'Danyil', 'Danys', 'Daood', 'Dara', 'Darach', 'Daragh', 'Darcy', "D'arcy", 'Dareh', 'Daren', 'Darien', 'Darius', 'Darl', 'Darn', 'Darrach', 'Darragh', 'Darrel', 'Darrell', 'Darren', 'Darrie', 'Darrius', 'Darroch', 'Darryl', 'Darryn', 'Darwyn', 'Daryl', 'Daryn', 'Daud', 'Davi', 'David', 'Davie', 'Davis', 'Davy', 'Dawid', 'Dawson', 'Dawud', 'Dayem', 'Daymian', 'Deacon', 'Deagan', 'Dean', 'Deano', 'Decklan', 'Declain', 'Declan', 'Declyan', 'Declyn', 'Deecan', 'Deegan', 'Deelan', 'Del', 'Denis', 'Deniss', 'Dennan', 'Dennin', 'Dennis', 'Denny', 'Dennys', 'Denon', 'Denton', 'Denver', 'Denzel', 'Deon', 'Derek', 'Derick', 'Derin', 'Dermot', 'Derren', 'Derrie', 'Derrin', 'Derron', 'Derry', 'Derryn', 'Deryn', 'Deshawn', 'Desmond', 'Dev', 'Devan', 'Devin', 'Devlin', 'Devlyn', 'Devon', 'Devrin', 'Devyn', 'Dex', 'Dexter', 'Dhani', 'Dharam', 'Dhavid', 'Dhyia', 'Diarmaid', 'Diarmid', 'Diarmuid', 'Didier', 'Diego', 'Diesel', 'Diesil', 'Digby', 'Dilan', 'Dilano', 'Dillan', 'Dillon', 'Dilraj', 'Dimitri', 'Dinaras', 'Dion', 'Dmitri', 'Doire', 'Dolan', 'Domanic', 'Domenico', 'Domhnall', 'Dominic', 'Dominick', 'Dominik', 'Donald', 'Donnacha', 'Donnie', 'Dorian', 'Dougal', 'Douglas', 'Dougray', 'Drakeo', 'Dre', 'Dregan', 'Drew', 'Dugald', 'Duncan', 'Duriel', 'Dustin', 'Dylan', 'Dylin', 'Dyllan', 'Dyllon', 'Eadie', 'Eagann', 'Eamon', 'Eamonn', 'Eason', 'Eassan', 'Easton', 'Ebow', 'Ed', 'Eddie', 'Eden', 'Ediomi', 'Edison', 'Eduardo', 'Eduards', 'Edward', 'Edwin', 'Edwyn', 'Eesa', 'Efan', 'Efe', 'Ege', 'Ehsan', 'Ehsen', 'Eiddon', 'Eidhan', 'Eihli', 'Eimantas', 'Eisa', 'Eli', 'Elias', 'Elijah', 'Eliot', 'Elisau', 'Eljay', 'Eljon', 'Elliot', 'Elliott', 'Ellis', 'Elshan', 'Elvin', 'Elyan', 'Emanuel', 'Emerson', 'Emil', 'Emile', 'Emir', 'Emlyn', 'Emmanuel', 'Emmet', 'Eng', 'Eniola', 'Enis', 'Ennis', 'Enrico', 'Enrique', 'Enzo', 'Eoghain', 'Eoghan', 'Eoin', 'Eonan', 'Erdehan', 'Eren', 'Erencem', 'Eric', 'Ericlee', 'Erik', 'Eriz', 'Eroni', 'Eryk', 'Eshan', 'Essa', 'Esteban', 'Ethan', 'Etienne', 'Etinosa', 'Euan', 'Eugene', 'Evan', 'Evann', 'Ewan', 'Ewen', 'Ewing', 'Exodi', 'Ezekiel', 'Ezra', 'Fabian', 'Fahad', 'Faheem', 'Faisal', 'Faizaan', 'Famara', 'Fares', 'Farhaan', 'Farhan', 'Farren', 'Farzad', 'Fauzaan', 'Favour', 'Fawaz', 'Fawkes', 'Faysal', 'Fearghus', 'Feden', 'Felix', 'Fergal', 'Fergie', 'Fergus', 'Ferre', 'Fezaan', 'Fiachra', 'Fikret', 'Filip', 'Filippo', 'Finan', 'Findlay', 'Findlie', 'Finlay', 'Finley', 'Finn', 'Finnan', 'Finnean', 'Finnen', 'Finnlay', 'Finnley', 'Fintan', 'Fionn', 'Firaaz', 'Fletcher', 'Flint', 'Florin', 'Flyn', 'Flynn', 'Fodeba', 'Forbes', 'Forgan', 'Forrest', 'Fox', 'Francis', 'Franco', 'Frank', 'Frankie', 'Franklin', 'Franko', 'Fraser', 'Frazer', 'Fred', 'Freddie', 'Fruin', 'Fyfe', 'Fyn', 'Fynlay', 'Fynn', 'Gabriel', 'Gareth', 'Garren', 'Garrett', 'Garry', 'Gary', 'Gavin', 'Gene', 'Geoff', 'Geoffrey', 'Geomer', 'Geordan', 'Geordie', 'George', 'Georgia', 'Georgy', 'Gerard', 'Ghyll', 'Giacomo', 'Gian', 'Gianluca', 'Gideon', 'Gil', 'Gio', 'Girijan', 'Girius', 'Gjan', 'Glascott', 'Glen', 'Glenn', 'Gordon', 'Grady', 'Graeme', 'Graham', 'Grahame', 'Grant', 'Grayson', 'Greg', 'Gregor', 'Gregory', 'Greig', 'Griffin', 'Griffyn', 'Grzegorz', 'Guang', 'Guerin', 'Gurdeep', 'Gursees', 'Gurthar', 'Gurveer', 'Gus', 'Gustav', 'Guthrie', 'Guy', 'Gytis', 'Habeeb', 'Hadji', 'Hadyn', 'Hagun', 'Haiden', 'Haider', 'Hamad', 'Hamid', 'Hamish', 'Hamza', 'Hamzah', 'Han', 'Hansen', 'Hao', 'Hareem', 'Hari', 'Haris', 'Harish', 'Harjyot', 'Harlee', 'Harleigh', 'Harley', 'Harman', 'Harnek', 'Harold', 'Haroon', 'Harper', 'Harri', 'Harris', 'Harrison', 'Harry', 'Harvey', 'Harvie', 'Hasan', 'Haseeb', 'Hashem', 'Hashim', 'Hassan', 'Hately', 'Havila', 'Hayden', 'Haydn', 'Haydon', 'Haydyn', 'Hcen', 'Hector', 'Heddle', 'Heidar', 'Heini', 'Hendri', 'Henri', 'Henry', 'Herbert', 'Heyden', 'Hiro', 'Hishaam', 'Hogan', 'Honey', 'Hong', 'Hope', 'Hopkin', 'Hosea', 'Howard', 'Howie', 'Hubert', 'Hugh', 'Hugo', 'Humza', 'Hunter', 'Husnain', 'Hussain', 'Hussan', 'Hussnain', 'Hussnan', 'Hyden', 'I', 'Iagan', 'Iain', 'Ian', 'Ibraheem', 'Ibrahim', 'Idahosa', 'Idrees', 'Idris', 'Iestyn', 'Ieuan', 'Igor', 'Ihtisham', 'Ijay', 'Ilyaas', 'Ilyas', 'Iman', 'Immanuel', 'Inan', 'Indy', 'Ines', 'Innes', 'Ioannis', 'Ireoluwa', 'Irvin', 'Irvine', 'Isa', 'Isaa', 'Isaac', 'Isaiah', 'Isak', 'Isher', 'Ishwar', 'Isimeli', 'Isira', 'Ismaeel', 'Ismail', 'Israel', 'Issiaka', 'Ivan', 'Ivar', 'Izaak', 'J', 'Jaay', 'Jac', 'Jace', 'Jack', 'Jacki', 'Jackie', 'Jackson', 'Jacky', 'Jacob', 'Jacques', 'Jad', 'Jaden', 'Jadon', 'Jadyn', 'Jae', 'Jagat', 'Jago', 'Jaheim', 'Jahid', 'Jahy', 'Jai', 'Jaida', 'Jaiden', 'Jaidyn', 'Jaii', 'Jaime', 'Jaise', 'Jak', 'Jake', 'Jakey', 'Jakob', 'Jaksyn', 'Jakub', 'Jamaal', 'Jamal', 'Jameel', 'Jameil', 'James', 'Jamey', 'Jamie', 'Jan', 'Jaosha', 'Jardine', 'Jared', 'Jarell', 'Jarl', 'Jarno', 'Jarred', 'Jarvi', 'Jasim', 'Jaskaran', 'Jason', 'Jasper', 'Jaxon', 'Jaxson', 'Jay', 'Jaydan', 'Jayden', 'Jaydn', 'Jaydon', 'Jaydyn', 'Jayhan', 'Jay-Jay', 'Jayke', 'Jaymie', 'Jayse', 'Jayson', 'Jaz', 'Jazeb', 'Jazib', 'Jazz', 'Jean', 'Jebadiah', 'Jed', 'Jedd', 'Jedidiah', 'Jeemie', 'Jeevan', 'Jeffrey', 'Jensen', 'Jenson', 'Jensyn', 'Jeremy', 'Jerome', 'Jeronimo', 'Jerrick', 'Jerry', 'Jesse', 'Jesuseun', 'Jeswin', 'Jevan', 'Jeyun', 'Jez', 'Jia', 'Jian', 'Jiao', 'Jimmy', 'Jincheng', 'JJ', 'Joaquin', 'Joash', 'Jock', 'Jody', 'Joe', 'Joeddy', 'Joel', 'Joey', 'Johann', 'Johannes', 'John', 'Johndean', 'Johnjay', 'Johnnie', 'Johnny', 'Johnpaul', 'Johnson', 'Jole', 'Jomuel', 'Jon', 'Jonah', 'Jonatan', 'Jonathan', 'Jonathon', 'Jonny', 'Jonothan', 'Jon-Paul', 'Jonson', 'Joojo', 'Jordan', 'Jordi', 'Jordon', 'Jordy', 'Jordyn', 'Jorge', 'Joris', 'Jorryn', 'Josan', 'Josef', 'Joseph', 'Josese', 'Josh', 'Joshiah', 'Joshua', 'Josiah', 'Joss', 'Jostelle', 'Joynul', 'Juan', 'Jubin', 'Judah', 'Jude', 'Jules', 'Julian', 'Julien', 'Jun', 'Junior', 'Jura', 'Justan', 'Justin', 'Justinas', 'Kaan', 'Kabeer', 'Kabir', 'Kacey', 'Kacper', 'Kade', 'Kaden', 'Kadin', 'Kadyn', 'Kaeden', 'Kael', 'Kaelan', 'Kaelin', 'Kaelum', 'Kai', 'Kaid', 'Kaidan', 'Kaiden', 'Kaidinn', 'Kaidyn', 'Kaileb', 'Kailin', 'Kain', 'Kaine', 'Kainin', 'Kainui', 'Kairn', 'Kaison', 'Kaiwen', 'Kajally', 'Kajetan', 'Kalani', 'Kale', 'Kaleb', 'Kaleem', 'Kal-el', 'Kalen', 'Kalin', 'Kallan', 'Kallin', 'Kalum', 'Kalvin', 'Kalvyn', 'Kameron', 'Kames', 'Kamil', 'Kamran', 'Kamron', 'Kane', 'Karam', 'Karamvir', 'Kareem', 'Karim', 'Karimas', 'Karl', 'Karol', 'Karson', 'Karsyn', 'Kasey', 'Kash', 'Kashif', 'Kasim', 'Kasper', 'Kasra', 'Kavin', 'Kayam', 'Kaydan', 'Kayden', 'Kaydin', 'Kaydn', 'Kaydyn', 'Kaydyne', 'Kayleb', 'Kaylem', 'Kaylum', 'Kayne', 'Kaywan', 'Kealan', 'Kealon', 'Kean', 'Keane', 'Kearney', 'Keatin', 'Keaton', 'Keavan', 'Keayn', 'Kedrick', 'Keegan', 'Keelan', 'Keelin', 'Keeman', 'Keenan', 'Keeton', 'Kehinde', 'Keigan', 'Keilan', 'Keir', 'Keiran', 'Keiren', 'Keiron', 'Keiryn', 'Keison', 'Keith', 'Keivlin', 'Kelam', 'Kelan', 'Kellan', 'Kellen', 'Kelso', 'Kelum', 'Kelvan', 'Kelvin', 'Ken', 'Kenan', 'Kendall', 'Kendyn', 'Kenlin', 'Kenneth', 'Kensey', 'Kenton', 'Kenyon', 'Kenzeigh', 'Kenzi', 'Kenzie', 'Kenzo', 'Kenzy', 'Keo', 'Ker', 'Kern', 'Kerr', 'Kevan', 'Kevin', 'Kevyn', 'Kez', 'Khai', 'Khalan', 'Khaleel', 'Khaya', 'Khevien', 'Khizar', 'Khizer', 'Kia', 'Kian', 'Kiaran', 'Kiarash', 'Kie', 'Kiefer', 'Kiegan', 'Kienan', 'Kier', 'Kieran', 'Kieren', 'Kierin', 'Kiern', 'Kieron', 'Kieryn', 'Kile', 'Killian', 'Kimi', 'Kingston', 'Kinneil', 'Kinnon', 'Kinsey', 'Kiran', 'Kirk', 'Kirwin', 'Kit', 'Kiya', 'Kiyonari', 'Kjae', 'Klein', 'Klevis', 'Kobe', 'Kobi', 'Koby', 'Koddi', 'Koden', 'Kodi', 'Kodie', 'Kody', 'Kofi', 'Kogan', 'Kohen', 'Kole', 'Konan', 'Konar', 'Konnor', 'Konrad', 'Koray', 'Korben', 'Korbyn', 'Korey', 'Kori', 'Korrin', 'Kory', 'Koushik', 'Kris', 'Krish', 'Krishan', 'Kriss', 'Kristian', 'Kristin', 'Kruz', 'Krzysiek', 'Ksawery', 'Ksawier', 'Kuba', 'Kurt', 'Kurtis', 'Kyaan', 'Kyan', 'Kyde', 'Kyden', 'Kye', 'Kyel', 'Kyhran', 'Kyie', 'Kylan', 'Kylar', 'Kyle', 'Kylian', 'Kym', 'Kynan', 'Kyral', 'Kyran', 'Kyren', 'Kyrillos', 'Kyro', 'Kyron', 'Kyrran', 'Lachlan', 'Lachlann', 'Lael', 'Lagan', 'Laird', 'Laison', 'Lakshya', 'Lance', 'Lancelot', 'Landon', 'Lang', 'Lasse', 'Latif', 'Lauchlan', 'Lauchlin', 'Laughlan', 'Lauren', 'Laurence', 'Laurie', 'Lawlyn', 'Lawrence', 'Lawrie', 'Lawson', 'Layne', 'Layton', 'Lee', 'Leigh', 'Leigham', 'Leighton', 'Leilan', 'Leiten', 'Leithen', 'Leland', 'Lenin', 'Lennan', 'Lennen', 'Lennex', 'Lennon', 'Lennox', 'Lenny', 'Leno', 'Lenon', 'Lenyn', 'Leo', 'Leon', 'Leonard', 'Leonardo', 'Lepeng', 'Leroy', 'Leven', 'Levi', 'Levon', 'Levy', 'Lewie', 'Lewin', 'Lewis', 'Lex', 'Leydon', 'Leyland', 'Leylann', 'Leyton', 'Liall', 'Liam', 'Limo', 'Lincoln', 'Lincon', 'Linden', 'Linton', 'Lionel', 'Lisandro', 'Litrell', 'LLeyton', 'Lliam', 'Lloyd', 'Lloyde', 'Loche', 'Lochlan', 'Lochlann', 'Lock', 'Lockey', 'Logan', 'Logann', 'Loghan', 'Lokesh', 'Loki', 'Lomond', 'Lorcan', 'Lorenz', 'Lorenzo', 'Lorne', 'Loudon', 'Loui', 'Louie', 'Louis', 'Loukas', 'Lovell', 'Luc', 'Luca', 'Lucais', 'Lucas', 'Lucca', 'Lucian', 'Luciano', 'Lucien', 'Lucus', 'Luic', 'Luis', 'Luk', 'Luka', 'Lukas', 'Lukasz', 'Luke', 'Lukmaan', 'Luqman', 'Lyall', 'Lyle', 'Lyndsay', 'Lysander', 'Maanav', 'Maaz', 'Mac', 'Macallum', 'Macaulay', 'Macauley', 'Macaully', 'Machlan', 'Maciej', 'Mack', 'Mackenzy', 'Mackie', 'Macsen', 'Macy', 'Madaki', 'Maddison', 'Maddox', 'Madison', 'Madox', 'Mael', 'Magnus', 'Mahan', 'Mahdi', 'Mahmoud', 'Maias', 'Maison', 'Maisum', 'Maitlind', 'Majid', 'Makensie', 'Makenzie', 'Makin', 'Maksim', 'Malachai', 'Malachi', 'Malachy', 'Malakai', 'Malakhy', 'Malcolm', 'Malik', 'Malikye', 'Malo', "Ma'moon", 'Manas', 'Maneet', 'Manmohan', 'Manolo', 'Manson', 'Mantej', 'Manuel', 'Manus', 'Marc', 'Marcel', 'Marcello', 'Marcin', 'Marco', 'Marcos', 'Marcous', 'Marcquis', 'Marcus', 'Mario', 'Marios', 'Marius', 'Mark', 'Marko', 'Markus', 'Marley', 'Marlin', 'Marlon', 'Maros', 'Marshall', 'Martin', 'Marty', 'Martyn', 'Marvin', 'Marwan', 'Maryk', 'Marzuq', 'Mashhood', 'Mason', 'Masood', 'Masson', 'Matas', 'Matej', 'Mateusz', 'Mathew', 'Mathias', 'Mathu', 'Mathuyan', 'Mati', 'Matt', 'Matteo', 'Matthew', 'Matthias', 'Max', 'Maxim', 'Maximus', 'Maxwell', 'Maxx', 'Mayeul', 'Mayson', 'Mazin', 'Mcbride', 'McKade', 'McKauley', 'McKay', 'McKenzie', 'McLay', 'Meftah', 'Mehmet', 'Mehraz', 'Meko', 'Melville', 'Meshach', 'Micah', 'Michael', 'Michal', 'Michat', 'Micheal', 'Michee', 'Mickey', 'Miguel', 'Mika', 'Mikael', 'Mikee', 'Mikey', 'Mikhail', 'Mikolaj', 'Miles', 'Millar', 'Miller', 'Milo', 'Milos', 'Milosz', 'Mir', 'Mirza', 'Mitch', 'Mitchel', 'Mitchell', 'Moad', 'Moayd', 'Mobeen', 'Modu', 'Mohamad', 'Mohamed', 'Mohammad', 'Mohammed', 'Mohanad', 'Mohd', 'Momin', 'Montague', 'Monty', 'Moore', 'Moosa', 'Moray', 'Morgan', 'Morgyn', 'Morris', 'Morton', 'Moshy', 'Motade', 'Moyes', 'Msughter', 'Mueez', 'Muhammad', 'Muhammed', 'Muhsin', 'Muir', 'Munachi', 'Muneeb', 'Mungo', 'Munir', 'Munmair', 'Munro', 'Murdo', 'Murray', 'Murrough', 'Murry', 'Musa', 'Musse', 'Mustafa', 'Mustapha', 'Muzammil', 'Mykie', 'Myles', 'Mylo', 'Nabeel', 'Nadeem', 'Nader', 'Nagib', 'Naif', 'Nairn', 'Narvic', 'Nash', 'Nasser', 'Nassir', 'Natan', 'Nate', 'Nathan', 'Nawfal', 'Nayan', 'Neco', 'Neil', 'Nelson', 'Neo', 'Neshawn', 'Nevan', 'Nevin', 'Nial', 'Niall', 'Nicholas', 'Nick', 'Nickhill', 'Nicki', 'Nickson', 'Nicky', 'Nico', 'Nicol', 'Nicolae', 'Nicolas', 'Nidhish', 'Nihaal', 'Nihal', 'Nikash', 'Nikhil', 'Niki', 'Nikita', 'Nikodem', 'Nikolai', 'Nikos', 'Nilav', 'Niraj', 'Niro', 'Niven', 'Noah', 'Noel', 'Nolan', 'Noor', 'Norman', 'Norrie', 'Nuada', 'Nyah', 'Oakley', 'Oban', 'Obieluem', 'Obosa', 'Odhran', 'Odin', 'Odynn', 'Ohran', 'Oisin', 'Olaf', 'Ole', 'Olie', 'Oliver', 'Olivier', 'Oliwier', 'Ollie', 'Omar', 'Omri', 'Oran', 'Orin', 'Orlando', 'Orley', 'Orran', 'Orrick', 'Orrin', 'Orson', 'Oryn', 'Oscar', 'Oskar', 'Ossian', 'Oswald', 'Otto', 'Owain', 'Owais', 'Owen', 'Owyn', 'Oz', 'Ozzy', 'Pablo', 'Pacey', 'Padraig', 'Paolo', 'Parkash', 'Parker', 'Pascoe', 'Pasquale', 'Patrick', 'Patrikas', 'Patryk', 'Paul', 'Pavit', 'Pawel', 'Pawlo', 'Pearce', 'Pearse', 'Pearsen', 'Pedram', 'Pedro', 'Peirce', 'Peiyan', 'Pele', 'Peni', 'Peter', 'Phani', 'Philip', 'Phinehas', 'Phoenix', 'Phoevos', 'Pierce', 'Pieter', 'Pietro', 'Piotr', 'Porter', 'Praise', 'Pranav', 'Pravin', 'Precious', 'Prentice', 'Presley', 'Preston', 'Prinay', 'Prince', 'Prithvi', 'Promise', 'Pushkar', 'Qasim', 'Qirui', 'Quinlan', 'Quinn', 'Radmiras', 'Raees', 'Raegan', 'Rafael', 'Rafal', 'Rafferty', 'Rafi', 'Raheem', 'Rahil', 'Rahim', 'Rahman', 'Raith', 'Raithin', 'Raja', 'Rajan', 'Ralfs', 'Ralph', 'Ramanas', 'Ramit', 'Ramone', 'Ramsay', 'Ramsey', 'Rana', 'Ranolph', 'Raphael', 'Rasmus', 'Rasul', 'Raul', 'Raunaq', 'Ravin', 'Ray', 'Rayaan', 'Rayan', 'Rayane', 'Rayden', 'Rayhan', 'Raymond', 'Rayne', 'Rayyan', 'Raza', 'Reace', 'Reagan', 'Reean', 'Reece', 'Reed', 'Reegan', 'Rees', 'Reese', 'Reeve', 'Regan', 'Regean', 'Reggie', 'Rehaan', 'Rehan', 'Reice', 'Reid', 'Reigan', 'Reilly', 'Reily', 'Reis', 'Reiss', 'Remo', 'Remy', 'Ren', 'Renars', 'Reng', 'Rennie', 'Reno', 'Reo', 'Reuben', 'Rexford', 'Reynold', 'Rhein', 'Rheo', 'Rhett', 'Rheyden', 'Rhian', 'Rhoan', 'Rholmark', 'Rhoridh', 'Rhuan', 'Rhuaridh', 'Rhudi', 'Rhy', 'Rhyan', 'Rhyley', 'Rhyon', 'Rhys', 'Rhyse', 'Riach', 'Rian', 'Ricards', 'Riccardo', 'Ricco', 'Rice', 'Richard', 'Richey', 'Richie', 'Ricky', 'Rico', 'Ridley', 'Ridwan', 'Rihab', 'Rihan', 'Rihards', 'Rihonn', 'Rikki', 'Riley', 'Rio', 'Rioden', 'Rishi', 'Ritchie', 'Rivan', 'Riyadh', 'Riyaj', 'Roan', 'Roark', 'Roary', 'Rob', 'Robbi', 'Robbie', 'Robby', 'Robert', 'Robi', 'Robin', 'Rocco', 'Roddy', 'Roderick', 'Rodrigo', 'Roen', 'Rogan', 'Roger', 'Rohaan', 'Rohan', 'Rohin', 'Rohit', 'Rokas', 'Roman', 'Ronald', 'Ronan', 'Ronin', 'Ronnie', 'Rooke', 'Roray', 'Rori', 'Rorie', 'Rory', 'Roshan', 'Ross', 'Rossi', 'Rowan', 'Rowen', 'Roy', 'Ruadhan', 'Ruaidhri', 'Ruairi', 'Ruairidh', 'Ruan', 'Ruaraidh', 'Ruari', 'Ruaridh', 'Ruben', 'Rubhan', 'Rubin', 'Rubyn', 'Rudi', 'Rudy', 'Rufus', 'Rui', 'Ruo', 'Rupert', 'Ruslan', 'Russel', 'Russell', 'Ryaan', 'Ryan', 'Ryan-Lee', 'Ryden', 'Ryder', 'Ryese', 'Ryhs', 'Rylan', 'Rylay', 'Rylee', 'Ryleigh', 'Ryley', 'Rylie', 'Ryo', 'Ryszard', 'Saad', 'Sabeen', 'Saffi', 'Saghun', 'Sahaib', 'Sahbian', 'Sahil', 'Saif', 'Saim', 'Sajid', 'Sajjad', 'Salman', 'Salter', 'Salvador', 'Sam', 'Saman', 'Samar', 'Samarjit', 'Samatar', 'Sambrid', 'Sameer', 'Sami', 'Samir', 'Samual', 'Samuel', 'Samuela', 'Samy', 'Sandro', 'Sandy', 'Sanfur', 'Sanjay', 'Santiago', 'Santino', 'Satveer', 'Saul', 'Saunders', 'Savin', 'Sayad', 'Sayeed', 'Sayf', 'Scot', 'Scott', 'Seaan', 'Seamas', 'Seamus', 'Sean', 'Seane', 'Sean-Ray', 'Seb', 'Selasi', 'Seonaidh', 'Sergei', 'Sergio', 'Seth', 'Sethu', 'Seumas', 'Shaarvin', 'Shadow', 'Shae', 'Shahmir', 'Shai', 'Shane', 'Shannon', 'Sharland', 'Sharoz', 'Shaughn', 'Shaun', 'Shaurya', 'Shaw', 'Shawn', 'Shay', 'Shayaan', 'Shayan', 'Shaye', 'Shayne', 'Shazil', 'Shea', 'Sheafan', 'Sheigh', 'Shenuk', 'Sher', 'Shergo', 'Sheriff', 'Sherwyn', 'Shiloh', 'Shiraz', 'Shreeram', 'Shreyas', 'Shyam', 'Siddhant', 'Sidharth', 'Sidney', 'Siergiej', 'Silas', 'Simon', 'Sinai', 'Skye', 'Sofian', 'Sohaib', 'Sohail', 'Soham', 'Sohan', 'Sol', 'Solomon', 'Sonneey', 'Sonni', 'Sonny', 'Sorley', 'Soul', 'Spencer', 'Spondon', 'Stanley', 'Stefan', 'Stefano', 'Stefin', 'Stephen', 'Steve', 'Steven', 'Stevie', 'Stewart', 'Stewarty', 'Strachan', 'Struan', 'Stuart', 'Su', 'Subhaan', 'Sudais', 'Suheyb', 'Suilven', 'Sukhi', 'Sukhpal', 'Sukhvir', 'Sulayman', 'Sullivan', 'Sultan', 'Sung', 'Sunny', 'Suraj', 'Surien', 'Sweyn', 'Syed', 'Sylvain', 'Symon', 'Szymon', 'Tadd', 'Taddy', 'Tadhg', 'Taegan', 'Taegen', 'Tai', 'Tait', 'Taiwo', 'Talha', 'Taliesin', 'Talon', 'Talorcan', 'Tamar', 'Tamiem', 'Tammam', 'Tanay', 'Tane', 'Tanner', 'Tanvir', 'Tanzeel', 'Taonga', 'Tarik', 'Tate', 'Taylan', 'Taylar', 'Tayler', 'Taylor', 'Tayo', 'Tayyab', 'Tayye', 'Tayyib', 'Teagan', 'Tee', 'Teejay', 'Tee-jay', 'Tegan', 'Teighen', 'Teiyib', 'Te-Jay', 'Temba', 'Teo', 'Teodor', 'Teos', 'Terry', 'Teydren', 'Theo', 'Theodore', 'Thiago', 'Thierry', 'Thom', 'Thomas', 'Thomson', 'Thorben', 'Thorfinn', 'Thrinei', 'Thumbiko', 'Tiago', 'Tian', 'Tiarnan', 'Tibet', 'Tieran', 'Tiernan', 'Timothy', 'Timucin', 'Tiree', 'Tisloh', 'Titi', 'Titus', 'Tiylar', 'TJ', 'Tjay', 'T-Jay', 'Tobey', 'Tobi', 'Tobias', 'Tobie', 'Toby', 'Todd', 'Tokinaga', 'Tom', 'Tomas', 'Tomasz', 'Tommy', 'Tomson', 'Tony', 'Torin', 'Torquil', 'Torran', 'Torrin', 'Torsten', 'Trafford', 'Trai', 'Travis', 'Tre', 'Trent', 'Trey', 'Tristain', 'Tristan', 'Troy', 'Tubagus', 'Turki', 'Turner', 'Ty', 'Tye', 'Tyelor', 'Tylar', 'Tyler', 'Tyllor', 'Tylor', 'Tymom', 'Tymon', 'Tyra', 'Tyree', 'Tyrnan', 'Tyrone', 'Tyson', 'Ubaid', 'Ubayd', 'Uchenna', 'Uilleam', 'Umair', 'Umar', 'Umer', 'Umut', 'Urban', 'Uri', 'Usman', 'Uzair', 'Uzayr', 'Valen', 'Valentin', 'Valery', 'Valo', 'Vasyl', 'Veeran', 'Victor', 'Victory', 'Vinay', 'Vince', 'Vincent', 'Vincenzo', 'Vinh', 'Vinnie', 'Vithujan', 'Vladimir', 'Vrishin', 'Wabuya', 'Wai', 'Walid', 'Wallace', 'Walter', 'Waqaas', 'Warkhas', 'Warren', 'Warrick', 'Wasif', 'Wayde', 'Wayne', 'Wei', 'Wen', 'Wesley', 'Wiktor', 'Wilkie', 'Will', 'William', 'Willum', 'Wilson', 'Windsor', 'Wojciech', 'Wyatt', 'Wylie', 'Wynn', 'Xabier', 'Xander', 'Xavier', 'Xiao', 'Xida', 'Xin', 'Xue', 'Yadgor', 'Yago', 'Yahya', 'Yakup', 'Yang', 'Yanick', 'Yann', 'Yannick', 'Yaseen', 'Yasin', 'Yasir', 'Yassin', 'Yoji', 'Yong', 'Yoolgeun', 'Yorgos', 'Youcef', 'Yousif', 'Youssef', 'Yu', 'Yuanyu', 'Yuri', 'Yusef', 'Yusuf', 'Yves', 'Zaaine', 'Zaak', 'Zac', 'Zach', 'Zacharie', 'Zachary', 'Zachery', 'Zack', 'Zackary', 'Zaid', 'Zain', 'Zaine', 'Zainedin', 'Zak', 'Zakaria', 'Zakariya', 'Zakary', 'Zaki', 'Zakir', 'Zakk', 'Zamaar', 'Zander', 'Zane', 'Zarran', 'Zayd', 'Zayn', 'Zayne', 'Ze', 'Zeek', 'Zeeshan', 'Zeid', 'Zein', 'Zen', 'Zendel', 'Zenith', 'Zennon', 'Zeph', 'Zerah', 'Zhen', 'Zhi', 'Zhong', 'Zhuo', 'Zi', 'Zidane', 'Zijie', 'Zinedine', 'Zion', 'Zishan', 'Ziya', 'Ziyaan', 'Zohaib', 'Zohair', 'Zoubaeir', 'Zubair', 'Zubayr', 'Zuriel'] +const stamp = ["United Coder", "Sprig HQ", "Hack Club"] +const stamplogo = [bitmap` +.....222222..... +...2200000022... +..200220022002.. +.20222222222202. +.20202022000202. +2022020220202202 +2022020220202202 +.20200022020202. +.20222222222202. +2022000220022202 +2022022220202202 +.20200022002202. +.20222222222202. +..200220022002.. +...2200000022... +.....222222.....`, + bitmap` +2222222222222222 +2000000000000002 +2022222222222202 +2020020022220202 +2022020022220202 +2020020222220202 +2022222200002202 +2022200020202202 +2022020200202202 +2020220020202202 +2020202020022202 +2020022002222202 +2022200022222202 +2022222222222202 +2000000000000002 +2222222222222222`, + bitmap` +...2222222222... +.22000000000022. +.20002222220002. +2002222222222002 +2002000000222002 +2022022220022202 +2022022222002202 +2022022220022202 +2022000000222202 +2022022222022202 +2022020220222202 +2002020022022002 +2002220202222002 +.20002222220002. +.22000000000022. +...2222222222...` +] + +function createchar() { + randomFace = getRandomItem(face); + randomCloth = getRandomItem(cloth); + randomEyes = getRandomItem(eyes); + randomHair = getRandomItem(hair); + randomName = getRandomItem(names); + randomStamp = getRandomItem(stamp); + R_ARRAY.splice(7, 0, randomCloth, randomFace, randomEyes, randomHair) + P_ARRAY.splice(7, 0, [8 + charoffset_x, 3], [15 + charoffset_x, 1], [23 + charoffset_x, 15], [15 + charoffset_x, -6]) + S_ARRAY.splice(7, 0, [3, 3], [2, 2], [1, 1], [2, 2]) + alias_tf = Math.random() >= intensity; + if (alias_tf == false) { + createAlias() + } + char_isvalid = true +} + +function animate() { + if (charoffset_x < 0) { + setTimeout(animate, 20); + } +} + +// Helper function to randomize the selection of variables +function randomizeVariables(variableNames, numToRandomize) { + // Shuffle the array + const shuffled = variableNames.sort(() => 0.5 - Math.random()); + // Return the first `numToRandomize` elements + return shuffled.slice(0, numToRandomize); +} + +let newValues = {}; +const functionsMap = { + irandomFace: () => irandomFace = getRandomItem(face), + irandomCloth: () => irandomCloth = getRandomItem(cloth), + irandomEyes: () => irandomEyes = getRandomItem(eyes), + irandomHair: () => irandomHair = getRandomItem(hair), + irandomName: () => irandomName = getRandomItem(names), + irandomStamp: () => irandomStamp = getRandomItem(stamp), + irandomStampL: () => irandomStampLogo = getRandomItem(stamplogo) +} + +function createAlias() { + const variableNames = [ + 'irandomFace', 'irandomCloth', 'irandomEyes', 'irandomHair', + 'irandomName', 'irandomStamp', 'irandomStampL' + ]; + + // Determine the number of variables to randomize + const numToRandomize = Math.floor(Math.random() * variableNames.length) + 1 + + // Get the randomly selected variables + const selectedVariables = randomizeVariables(variableNames, numToRandomize); + console.log('Selected variables to randomize:', selectedVariables); + newValues = {} + // Apply the functions to the selected variables + prevValues = {irandomFace:randomFace,irandomCloth:randomCloth, + irandomEyes:randomEyes,irandomHair:randomHair, + irandomName:randomName,irandomStamp:randomStamp}; + irandomFace = randomFace + irandomCloth = randomCloth + irandomEyes = randomEyes + irandomHair = randomHair + irandomName = randomName + irandomStamp = randomStamp + irandomStampLogo = stamplogo[stamp.indexOf(randomStamp)] + selectedVariables.forEach(variable => { + if (functionsMap[variable]) { + do { + // Call the function and update newValues[variable] + newValues[variable] = functionsMap[variable](); + + // Optionally, log the updated value + // console.log('Updated values:', newValues[variable]); + } while (newValues[variable] === prevValues[variable]); + } else { + console.warn(`No function defined for ${variable}`); + } + }); +} +yail = tune` +37.5: B5/37.5 + D5/37.5 + F5^37.5, +37.5: B5/37.5 + D5/37.5 + G5^37.5, +37.5: B5/37.5 + D5/37.5, +37.5: B5/37.5 + D5/37.5 + F5^37.5, +37.5: B5/37.5 + D5/37.5 + G5^37.5, +37.5: B5/37.5 + D5/37.5, +37.5: B5/37.5 + D5/37.5 + F5^37.5, +37.5: B5/37.5 + D5/37.5 + G5^37.5, +37.5: B5/37.5 + D5/37.5, +37.5: B5/37.5 + D5/37.5 + F5^37.5, +37.5: B5/37.5 + B4/37.5 + G5^37.5, +37.5: A5/37.5 + B4/37.5 + D5^37.5, +37.5: A5/37.5 + B4/37.5 + E5^37.5 + D5-37.5, +37.5: A5/37.5 + B4/37.5, +37.5: A5/37.5 + B4/37.5 + D5^37.5, +37.5: A5/37.5 + B4/37.5 + E5^37.5 + D5-37.5, +37.5: A5/37.5 + B4/37.5, +37.5: A5/37.5 + B4/37.5 + D5^37.5, +37.5: A5/37.5 + B4/37.5 + E5^37.5, +37.5: A5/37.5 + B4/37.5, +37.5: A5/37.5 + B4/37.5 + D5^37.5 + E5-37.5, +412.5` +lookable = false + +function slider(st) { + if (st == true) { + Render([randomCloth, randomFace, randomEyes, randomHair, bitmap` +0000........0000 +3330........0333 +333300....003333 +3333300000033333 +3333333333333333 +3333333333333333 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +3333333333333333`], + [ + [8 + charoffset_x, 3 + 3], + [15 + charoffset_x, 1 + 3], + [23 + charoffset_x, 15 + 3], + [15 + charoffset_x, -6 + 3], + [0, -20] + ], + [ + [3, 3], + [2, 2], + [1, 1], + [2, 2], + [4, 5] + ]) + + addText(`${randomName}`, { + x: 3, + y: 1, + color: color`2` + }) + addText(`${randomStamp}`, { + x: 2, + y: 15, + color: color`2` + }) + Render([stamplogo[stamp.indexOf(randomStamp)]], + [ + [45, 43] + ], + [ + [1, 1] + ] + ); + } else { + Render([irandomCloth, irandomFace, irandomEyes, irandomHair, bitmap` +0000........0000 +3330........0333 +333300....003333 +3333300000033333 +3333333333333333 +3333333333333333 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +3333333333333333`], + [ + [8 + charoffset_x, 3 + 3], + [15 + charoffset_x, 1 + 3], + [23 + charoffset_x, 15 + 3], + [15 + charoffset_x, -6 + 3], + [0, -20] + ], + [ + [3, 3], + [2, 2], + [1, 1], + [2, 2], + [4, 5] + ]) + + addText(`${randomName}`, { + x: 3, + y: 1, + color: color`2` + }) + addText(`${randomStamp}`, { + x: 2, + y: 15, + color: color`2` + }) + Render([irandomStampLogo], + [ + [45, 43] + ], + [ + [1, 1] + ] + ); + + } +} + +function stager() { + if (gamestate < 8) { + clearText() + } + switch (gamestate) { + case -2: + updatetime = 10 + sframe = 0 + break + case -1: + updatetime = 20 + Render(R_ARRAY, P_ARRAY, S_ARRAY) + sframe += 10 + Render([bitmap` +0000........0000 +3330........0333 +333300....003333 +3333300000033333 +3333333333333333 +3333333333333333 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +3333333333333333`], [ + [0, -20 + sframe] + ], [ + [4, 5] + ]) + //console.log(sframe) + if (sframe < 100) { + gamestate -= 1 + } + break + case 0: //Limbo + gamestate -= 1 + break + case 1: + lookable = false + updatetime = 2000 + addText(`Hi, My name is`, { + x: 3, + y: 0, + color: color`4` + }) + playTune(tune` +37.5: G4~37.5, +37.5: A4~37.5, +37.5: G4~37.5, +37.5: G4~37.5, +1050`) + break + case 2: + addText(`..${randomName}.`, { + x: 3, + y: 0, + color: color`4` + }) + playTune(tune` +37.5: G4~37.5, +37.5: A4~37.5, +37.5: G4~37.5, +37.5: G4~37.5, +1050`) + break + case 3: + addText(`I am from...`, { + x: 3, + y: 0, + color: color`4` + }) + playTune(tune` +37.5: G4~37.5, +37.5: A4~37.5, +37.5: G4~37.5, +37.5: G4~37.5, +1050`) + break + case 4: + addText(`${randomStamp}.`, { + x: 3, + y: 0, + color: color`4` + }) + playTune(tune` +37.5: G4~37.5, +37.5: A4~37.5, +37.5: G4~37.5, +37.5: G4~37.5, +1050`) + break + case 5: + addText(`Tickets Please.`, { + x: 2, + y: 0, + color: color`2` + }) + playTune(tune` +37.5: G4-37.5, +37.5: A4-37.5, +37.5: G4-37.5, +37.5: F4-37.5, +1050`) + break + case 6: + updatetime = 30 + sframe = 0 + break + case 7: + sframe += 2 + gamestate -= 1 + Render([bitmap` +0000........0000 +3330........0333 +333300....003333 +3333300000033333 +3333333333333333 +3333333333333333 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +3333333333333333`], [ + [0, 70 - sframe] + ], [ + [4, 5] + ]) + //console.log(sframe) + if (sframe > 90) { + gamestate += 1 + } + break + case 8: //Trial + lookable = true + updatetime = 100 + console.log(alias_tf) + gamestate -= 1 + slider(alias_tf) + break + case 9: //Accepted! + sframe = 0 + break + case 10: + sframe += ccount + if (Math.abs(sframe) < 100) { + gamestate -= 1 + } + Render(R_ARRAY, P_ARRAY, S_ARRAY) + P_ARRAY.splice(7, 4); + P_ARRAY.splice(7, 0, [8 + sframe, 3], [15 + sframe, 1], [23 + sframe, 15], [15 + sframe, -6]) + break + case 11: //Judgement + updatetime = 900 + clearText() + sframe = 0 + P_ARRAY.splice(7, 4); + P_ARRAY.splice(7, 0, [8, 3], [15, 1], [23, 15], [15, -6]) + addText(`Was that right?`, { + x: 2, + y: 0, + color: color`2` + }) + break + case 12: + sframe += 1 + clearText() + if (sframe < 6) { + gamestate -= 1 + } + if (sframe % 2 === 0) { + Render(R_ARRAY, P_ARRAY, S_ARRAY) + playTune(tune` +500: D5~500, +15500`) + addText(`${randomName}.`, { + x: 3, + y: 1, + color: color`4` + }) + addText(`${randomStamp}.`, { + x: 2, + y: 15, + color: color`4` + }) + Render([stamplogo[stamp.indexOf(randomStamp)]], + [ + [45, 43] + ], + [ + [1, 1] + ] + ); + } else { + Render([bitmap` +0000........0000 +3330........0333 +333300....003333 +3333300000033333 +3333333333333333 +3333333333333333 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +33LLLLLLLLLLLL33 +3333333333333333 +3333333333333333`], [ + [0, -20] + ], [ + [4, 5] + ]) + slider(alias_tf) + playTune(tune` +500, +500: B4~500, +15000`) + } + break + case 13: + clearText() + Render([clear], [ + [0, 0] + ], [ + [8, 8], + ]) + updatetime = 500 + R_ARRAY.splice(7, 4); + S_ARRAY.splice(7, 4); + P_ARRAY.splice(7, 4); + if (alias_tf === choice) { + addText('Great Job!', { + x: 4, + y: 0, + color: color`2` + }); + playTune(tune` +500: D5~500, +15500`) + } else { + addText('Oh dear...', { + x: 4, + y: 0, + color: color`2` + }); + strikes += 1 + playTune(tune` +500: F4~500, +15500`) + } + + break + case 14: + addText(`Calculations...`, { + x: 4, + y: 3, + color: color`2` + }) + if (alias_tf === choice) { + addText(`${tickets}+${datecount}`, { + x: 4, + y: 5, + color: color`2` + }) + tickets += datecount + playTune(tune` +500: B4~500, +15500`) + } else { + addText(`${tickets}-${datecount}`, { + x: 4, + y: 5, + color: color`2` + }) + tickets -= datecount + playTune(tune` +500: B4~500, +15500`) + } + break + case 15: + if (strikes > 0) { + addText(`Strikes`, { + x: 6, + y: 9, + color: color`2` + + }) + highscore = tickets + switch (strikes){ + case 1: + Render([viol],[[4,38]],[[1,1]]); break + case 2: + Render([viol],[[4,38]],[[1,1]]); + Render([viol],[[24,38]],[[1,1]]); break + case 3: + Render([viol],[[4,38]],[[1,1]]); + Render([viol],[[24,38]],[[1,1]]); + Render([viol],[[44,38]],[[1,1]]); break + } + } + if (tickets > highscore) { + addText(`NEW HIGHSCORE!`, { + x: 4, + y: 10, + color: color`2` + + }) + highscore = tickets + } + addText(`Tickets: ${tickets}`, { + x: 4, + y: 8, + color: color`2` + }) + addText(`W to continue`, { + x: 4, + y: 13, + color: color`2` + }) + playTune(tune` +500: B4/500, +15500`) + break + case 16: + gamestate -= 1 + break + case 17: + sframe += 1 + console.log("stopping loop") + themesong.end() + barsposition = [0, -40 + sframe] + Render([bars], [ + barsposition + ], [ + [7, 3] + ]) + playTune(reeling) + if (-40 + sframe >= 10) { + console.log("done loop") + playTune(daycont) + addText(`Day ${datecount}`, { + x: 4, + y: 1, + color: color`2` + }) + updatetime = 60 + //Animation finishes, wait around 10 seconds + sframe = 0 + barsposition = [0, -40] + updatetime = 8000; + } + else{ + gamestate -= 1 + } + break + case 18: + console.log("pseduo trans") + updatetime = 60; + sframe += 1 + barsposition[1] -= sframe + clearposition = [0, 0 - sframe] + Render(R_ARRAY, P_ARRAY, S_ARRAY) + Render([clear, bars], + [ + clearposition, + barsposition, + ], + [ + [5, 1], + [7, 3] ]) + playTune(reeling) + clearText() + if (barsposition[1] <= -50) { + console.log("done loop") + //Animation finishes, wait around 10 miliseconds + updatetime = 20 + char_isvalid = false + gamestate = 0 + Render(R_ARRAY, P_ARRAY, S_ARRAY) + sframe = 0 + } + else { + gamestate -= 1 + } + break + case 19: + addText(`End Game!`, { + x: 4, + y: 2, + color: color`2` + }) + addText(`You made it to \n the last day!`, { + x: 4, + y: 4, + color: color`2` + }) + if (tickets > highscore) { + addText(`NEW HIGHSCORE!`, { + x: 4, + y: 6, + color: color`2` + + }) + highscore = tickets + } + addText(`Tickets: ${tickets}`, { + x: 4, + y: 8, + color: color`2` + }) + addText(`Restart to replay`, { + x: 2, + y: 13, + color: color`2` + }) + gamestate -= 1 + break + case 20: + addText(`End Game!`, { + x: 4, + y: 2, + color: color`2` + }) + addText(`You made too \n many mistakes.`, { + x: 4, + y: 6, + color: color`2` + }) + if (tickets > highscore) { + addText(`NEW HIGHSCORE!`, { + x: 4, + y: 5, + color: color`2` + + }) + highscore = tickets + } + addText(`Tickets: ${tickets}`, { + x: 4, + y: 8, + color: color`2` + }) + addText(`Restart to replay`, { + x: 2, + y: 13, + color: color`2` + }) + gamestate -= 1 + break + } + gamestate += 1 +} +movecount = 1 +peopleperday = 3 +iterations = 3 //number of ppl + + +function maingame() { + if (char_isvalid == false) { + createchar() + next_p() + } else { + //Animate walking to center + if (charoffset_x < 0) { + charoffset_x += movecount + P_ARRAY.splice(7, 4); + P_ARRAY.splice(7, 0, [8 + charoffset_x, 3], [15 + charoffset_x, 1], [23 + charoffset_x, 15], [15 + charoffset_x, -6]) + //console.log(charoffset_x) + Render(R_ARRAY, P_ARRAY, S_ARRAY) + } else { + //Start Action + stager() + } + } + setTimeout(maingame, updatetime); +} + +function next_p() { //Set the animator, and clear + if (gamestate > 0) { + playTune(yail) + console.log("changed chars") + addText("Next!", { + x: 2, + y: 0, + color: color`2` + }) + R_ARRAY.splice(7, 4); + S_ARRAY.splice(7, 4); + P_ARRAY.splice(7, 4); + createchar() + charoffset_x = -50 + } + +} + +onInput("i", () => { + if (gamestate < 6 && gamestate == 0 && lookable) { + gamestate = 6 + } +}) + +onInput("w", () => { + if (gamestate == 16 && lookable) { + clearText() + updatetime = 20 + iterations -= 1 + if (strikes >= 3) { + gamestate = 20 + } + else{ + if (iterations != 0) { + char_isvalid = false + gamestate = 1 + } + else{ + if (datecount < 7){ + strikes = 0 + datecount += 1 + peopleperday += 2 + iterations = peopleperday //number of ppl + intensity += Math.random(-0.1, 0.1) + intensity = Math.max(0, Math.min(1, intensity)); + console.log(intensity) + gamestate = 17 + } + else{ + gamestate = 19 + } + } + } + } +}) + +onInput("j", () => { + if (gamestate < 6 && gamestate == 0 && lookable) { + addText(`Rejected!`, { + x: 3, + y: 1, + color: color`2` + }) + playTune(tune` +500: B4/500, +500: G4~500, +15000`) + ccount = -1 + choice = false + gamestate = 9 + } +}) + +onInput("l", () => { + if (gamestate < 6 && gamestate == 0 && lookable) { + addText(`Approved!`, { + x: 3, + y: 1, + color: color`2` + }) + ccount = 1 + choice = true + gamestate = 9 + playTune(tune` +500: B4/500, +500: G4~500, +15000`) + } +}) +///////////// + diff --git a/games/Tile_Slider.js b/games/Tile_Slider.js index 228d04c98a..7bedd6e11d 100644 --- a/games/Tile_Slider.js +++ b/games/Tile_Slider.js @@ -2,7 +2,7 @@ /* @title: Tile_Slider @author: Susman -@tags: [''] +@tags: [] @addedOn: 2023-11-30 */ diff --git a/games/Top_Hat_Turtles.js b/games/Top_Hat_Turtles.js index 72a8d568dd..4beb37316f 100644 --- a/games/Top_Hat_Turtles.js +++ b/games/Top_Hat_Turtles.js @@ -7,9 +7,9 @@ /* @title: Top_Hat_Turtles @author: Dreck Yam -@img: "" -@tags: ['multiplayer', 'cooperative'] +@tags: ['multiplayer'] @addedOn: 2024-05-29 +@img: "" */ const melody = tune` diff --git a/games/TowerDefense.js b/games/TowerDefense.js index 3dd62be81e..0dc2262a6c 100644 --- a/games/TowerDefense.js +++ b/games/TowerDefense.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Tower Defense @author: Guerriacan @tags: [] @addedOn: 2024-08-13 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const guiCenter = "0" diff --git a/games/Traditional_Snake.js b/games/Traditional_Snake.js index 4a0673ba5d..a083997fa1 100644 --- a/games/Traditional_Snake.js +++ b/games/Traditional_Snake.js @@ -1,8 +1,8 @@ /* @title: Traditional Snake -@tags: ['classic'] -@addedOn: 2024-07-05 @author: dmcegan +@tags: ['retro'] +@addedOn: 2024-07-05 */ const snakeBody = "s"; const apple = "a"; diff --git a/games/Traffic_Racer.js b/games/Traffic_Racer.js index a6672e8481..218cdf28ab 100644 --- a/games/Traffic_Racer.js +++ b/games/Traffic_Racer.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Traffic Racer 2D @author: advaitconty @tags: [] @addedOn: 2024-08-05 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/Trash_IT.js b/games/Trash_IT.js index 6bb9a028c9..6225ae952e 100644 --- a/games/Trash_IT.js +++ b/games/Trash_IT.js @@ -1,8 +1,8 @@ /* @title: Trash_IT +@author: N Rizwan @tags: ['strategy'] @addedOn: 2022-09-14 -@author: N Rizwan */ /* diff --git a/games/Treasure Maze (Correct Version).js b/games/Treasure Maze (Correct Version).js new file mode 100644 index 0000000000..d75019ff8b --- /dev/null +++ b/games/Treasure Maze (Correct Version).js @@ -0,0 +1,464 @@ +/* +@title: Treasure Maze +@author: AiyuuHacks +@tags: [] +@addedOn: 2024-09-03 +*/ + +const player = "p" +const obstacle1 = "1" +const obstacle2 = "2" +const obstacle3 = "3" +const obstacle4 = "4" +const obstacle5 = "5" +const obstacle6 = "6" +const obstacle7 = "7" +const wall = "w" +const chest = "c" +const o1Path = [1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1] +const o2Path = [1,1,1,1,1,-1,-1,-1,-1,-1] +const o3Path = [1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1] +const o4Path = [1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] +const o5Path = [1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1] +const o6Path = [1,1,1,1,1,1,-1,-1,-1,-1,-1,-1] +const o7Path = [1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1] +setLegend( + [player, bitmap` +.......0000..... +......0LLLL00... +.....033333330.. +....030000000... +.....0L252520... +....0LLLLLLL0... +...030LLLLLL0... +....0.0000000... +.....0LLLLL0.... +....0LL0LLL01... +....0110LLL11... +....011LLLL0.... +.....00000000... +....0660..0990.. +....0000..0000.. +................`], + [obstacle1, bitmap` +................ +......000000.... +....00055550.... +...0055566500... +...0555666650... +...00000000000.. +...0222222220... +...0223222320... +...0222CCC220... +...000C222C00... +.....0000000.... +.....0555550.006 +...0005555500066 +..00.0777550.006 +.....0777770.... +.....0777770....`], + [obstacle2, bitmap` +................ +......000000.... +....00055550.... +...0055566500... +...0555666650... +...00000000000.. +...0222222220... +...0223222320... +...0222CCC220... +...000C222C00... +.....0000000.... +.....0555550.006 +...0005555500066 +..00.0777550.006 +.....0777770.... +.....0777770....`], + [obstacle3, bitmap` +................ +......000000.... +....00055550.... +...0055566500... +...0555666650... +...00000000000.. +...0222222220... +...0223222320... +...0222CCC220... +...000C222C00... +.....0000000.... +.....0555550.006 +...0005555500066 +..00.0777550.006 +.....0777770.... +.....0777770....`], + [obstacle4, bitmap` +................ +......000000.... +....00055550.... +...0055566500... +...0555666650... +...00000000000.. +...0222222220... +...0223222320... +...0222CCC220... +...000C222C00... +.....0000000.... +.....0555550.006 +...0005555500066 +..00.0777550.006 +.....0777770.... +.....0777770....`], + [obstacle5, bitmap` +................ +......000000.... +....00055550.... +...0055566500... +...0555666650... +...00000000000.. +...0222222220... +...0223222320... +...0222CCC220... +...000C222C00... +.....0000000.... +.....0555550.006 +...0005555500066 +..00.0777550.006 +.....0777770.... +.....0777770....`], + [obstacle6, bitmap` +................ +......000000.... +....00055550.... +...0055566500... +...0555666650... +...00000000000.. +...0222222220... +...0223222320... +...0222CCC220... +...000C222C00... +.....0000000.... +.....0555550.006 +...0005555500066 +..00.0777550.006 +.....0777770.... +.....0777770....`], + [obstacle7, bitmap` +................ +......000000.... +....00055550.... +...0055566500... +...0555666650... +...00000000000.. +...0222222220... +...0223222320... +...0222CCC220... +...000C222C00... +.....0000000.... +.....0555550.006 +...0005555500066 +..00.0777550.006 +.....0777770.... +.....0777770....`], + [wall, bitmap` +0003000030000033 +0000300030000030 +0000300330000030 +0003300033000330 +0003000003003300 +0003000033003000 +0000000000033000 +0000000000030000 +0000333000000000 +0003300000000000 +3330000000033000 +0000033000003300 +0000003000000300 +0030000330003300 +0330000030000330 +3300000030000030`], + [chest, bitmap` +................ +................ +................ +................ +................ +....00000000.... +...00CCCCCC00... +..00CCCCCCCC00.. +.00CCCCCCCCCC00. +.0CCCC6666CCCC0. +.00000600600000. +.0CCCC6666CCCC0. +.0CCCCCCCCCCCC0. +.00000000000000. +................ +................`], + ) + + +setSolids([wall, player]) + +setMap(map` +c....w7......... +wwww.w.www.w..w. +4...........ww6. +.ww.www.w.w....w +.w...w5.w..www.w +ww.w.w..ww.w.w.w +3w...w.......w.w +...www.w.ww..w.. +.ww....w..w..w.. +.w..ww.w2.....w. +..w.w..wwww.www. +.w..ww....w..... +.ww.........ww.. +.....www..w..w.. +wwww.w.w.w.www.. +p....w1.........`) + +onInput("d", () => { + var p = getFirst(player) + p.x += 1 +}) + +onInput("a", () => { + var p = getFirst(player) + p.x -= 1 +}) + +onInput("w", () => { + var p = getFirst(player) + p.y -= 1 +}) + +onInput("s", () => { + var p = getFirst(player) + p.y += 1 +}) + +function playerWin(){ + var chests = getAll(chest) + var p = getFirst(player) + + for (var i = 0; i { + + var o1 = getFirst(obstacle1) + o1.x += o1Path[cnt] + cnt++ + if(cnt>18){cnt=0} + + var o2 = getFirst(obstacle2) + o2.x += o2Path[cnt2] + cnt2++ + if(cnt2>9){cnt2=0} + + var o3 = getFirst(obstacle3) + o3.y += o3Path[cnt3] + cnt3++ + if(cnt3>13){cnt3=0} + + var o4 = getFirst(obstacle4) + o4.x += o4Path[cnt4] + cnt4++ + if(cnt4>21){cnt4=0} + + var o5 = getFirst(obstacle5) + o5.y += o5Path[cnt5] + cnt5++ + if(cnt5>15){cnt5=0} + + var o6 = getFirst(obstacle6) + o6.y += o6Path[cnt6] + cnt6++ + if(cnt6>11){cnt6=0} + + var o7 = getFirst(obstacle7) + o7.x += o7Path[cnt7] + cnt7++ + if(cnt7>17){cnt7=0} + + if (playerWin() == true){ + clearInterval(gameLoop) + + addText("You Win!",{ + + color: color`3` + }) + } + + if (playerHit1() == true){ + clearInterval(gameLoop) + + addText("You Lose!",{ + + color: color`3` + }) + } + + if (playerHit2() == true){ + clearInterval(gameLoop) + + addText("You Lose!",{ + + color: color`3` + }) + } + + if (playerHit3() == true){ + clearInterval(gameLoop) + + addText("You Lose!",{ + + color: color`3` + }) + } + + if (playerHit4() == true){ + clearInterval(gameLoop) + + addText("You Lose!",{ + + color: color`3` + }) + } + + if (playerHit5() == true){ + clearInterval(gameLoop) + + addText("You Lose!",{ + + color: color`3` + }) + } + + if (playerHit6() == true){ + clearInterval(gameLoop) + + addText("You Lose!",{ + + color: color`3` + }) + } + + if (playerHit7() == true){ + clearInterval(gameLoop) + + addText("You Lose!",{ + + color: color`3` + }) + } + + + +}, 150) + + + + diff --git a/games/Treasure-Hunt-Adventure.js b/games/Treasure-Hunt-Adventure.js index 02b031e004..35b94439e7 100644 --- a/games/Treasure-Hunt-Adventure.js +++ b/games/Treasure-Hunt-Adventure.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Treasure-Hunt-Adventure @author: Sophia E -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-04-05 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/Treasure_Hunt.js b/games/Treasure_Hunt.js index 764d4b6027..2939d88152 100644 --- a/games/Treasure_Hunt.js +++ b/games/Treasure_Hunt.js @@ -1,8 +1,8 @@ /* @title: Treasure_Hunt +@author: Manikandan_M @tags: ['strategy'] @addedOn: 2022-09-28 -@author: Manikandan_M */ const player = "p"; diff --git a/games/Tron.js b/games/Tron.js index bb429ffa33..672b0c9271 100644 --- a/games/Tron.js +++ b/games/Tron.js @@ -1,8 +1,8 @@ /* @title: Tron +@author: Robert Carmen @tags: ['multiplayer'] @addedOn: 2022-10-30 -@author: Robert Carmen An adaptation of the classic game, Tron. Enjoy! v0.2 diff --git a/games/TwinPrimeRockets.js b/games/TwinPrimeRockets.js index 90b5dced44..23b2ae2a48 100644 --- a/games/TwinPrimeRockets.js +++ b/games/TwinPrimeRockets.js @@ -2,7 +2,7 @@ /* @title: TwinPrimeRockets @author: Pradevel -@tags: ['thematic-puzzle'] +@tags: ['puzzle'] @addedOn: 2023-03-21 */ diff --git a/games/Two_Player_Tetris.js b/games/Two_Player_Tetris.js index 06b7590dba..577a1049a1 100644 --- a/games/Two_Player_Tetris.js +++ b/games/Two_Player_Tetris.js @@ -2,7 +2,7 @@ /* @title: Two_Player_Tetris @author: Spectral -@tags: ['classic', 'multiplayer'] +@tags: ['multiplayer','retro'] @addedOn: 2023-09-11 */ diff --git a/games/UFO_Attack.js b/games/UFO_Attack.js index 16172cdfff..3ae8d9d16d 100644 --- a/games/UFO_Attack.js +++ b/games/UFO_Attack.js @@ -1,8 +1,8 @@ /* @title: UFO Attack +@author: Troy @tags: ['strategy'] @addedOn: 2022-11-13 -@author: Troy */ diff --git a/games/UltimateTicTacToe.js b/games/UltimateTicTacToe.js index a59bca5784..5fdf1acea7 100644 --- a/games/UltimateTicTacToe.js +++ b/games/UltimateTicTacToe.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: UltimateTicTacToe @author: Grace -@tags: ['tictactoe', 'puzzle', 'two-player'] +@tags: ['puzzle','multiplayer'] @addedOn: 2024-07-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/UpSideDown.js b/games/UpSideDown.js index b0043aff50..b90669878f 100644 --- a/games/UpSideDown.js +++ b/games/UpSideDown.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: UpSideDown @author: Sidak08 -@tags: ['endless', 'classic', 'fun'] +@tags: ['endless','retro'] @addedOn: 2024-06-26 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/Up_Down_Top-down.js b/games/Up_Down_Top-down.js index 5d734fdd8a..b7a5ae6893 100644 --- a/games/Up_Down_Top-down.js +++ b/games/Up_Down_Top-down.js @@ -1,7 +1,7 @@ /* @title: Up, Down, Top-down @author: Somebud0180 -@tags: ['platformer', 'maze'] +@tags: ['puzzle','platformer'] @addedOn: 2024-07-15 */ diff --git a/games/ValentinesGame.js b/games/ValentinesGame.js index 17132be368..9981b1d939 100644 --- a/games/ValentinesGame.js +++ b/games/ValentinesGame.js @@ -1,8 +1,8 @@ /* @title: ValentinesGame -@tags: ['sokoban-style'] -@addedOn: 2023-02-13 @author: Markonije +@tags: ['puzzle'] +@addedOn: 2023-02-13 */ const player1 = "p"; diff --git a/games/Villager_Vikings.js b/games/Villager_Vikings.js index 17d03da638..7c62fee09b 100644 --- a/games/Villager_Vikings.js +++ b/games/Villager_Vikings.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Villager Vikings @author: D.M.R -@tags: ['attack'] +@tags: ['action'] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + 🎮 CONTROLS: Begining controls: S-To watch the story diff --git a/games/Virtual_Machine.js b/games/Virtual_Machine.js index f6dfd68a0f..905a7a4be1 100644 --- a/games/Virtual_Machine.js +++ b/games/Virtual_Machine.js @@ -1,8 +1,8 @@ /* @title: Virtual_Machine +@author: N_Rizwan @tags: ['strategy'] @addedOn: 2022-09-08 -@author: N_Rizwan */ //===================VARIABLES===================== diff --git a/games/Voltage_Quest.js b/games/Voltage_Quest.js index 4ff2427666..8c8884ec20 100644 --- a/games/Voltage_Quest.js +++ b/games/Voltage_Quest.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Voltage_Quest @author: Jase @tags: ['puzzle'] @addedOn: 2024-03-29 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/Waze.js b/games/Waze.js index 7b655ad78b..23fde568f3 100644 --- a/games/Waze.js +++ b/games/Waze.js @@ -2,9 +2,9 @@ /* @title: Waze -@tags: ['advanced','shooter','zombie'] -@addedOn: 2024-07-17 @author: DragonRoyal +@tags: ['action','survival'] +@addedOn: 2024-07-17 INSTRUCTIONS: W A S D to move the character around, i to shoot the zombies diff --git a/games/Womens_roles_during_wartime.js b/games/Womens_roles_during_wartime.js index f5940b8294..39cbe98807 100644 --- a/games/Womens_roles_during_wartime.js +++ b/games/Womens_roles_during_wartime.js @@ -2,7 +2,7 @@ /* @title: Women's roles during wartime @author: cupcakes -@tags: ['thematic-puzzle'] +@tags: ['puzzle'] @addedOn: 2023-06-04 */ diff --git a/games/Word_Sculptor.js b/games/Word_Sculptor.js new file mode 100644 index 0000000000..a8d3c988c4 --- /dev/null +++ b/games/Word_Sculptor.js @@ -0,0 +1,232 @@ +/* +@title: Word Sculptor +@author: S1K +@tags: [] +@addedOn: 2024-09-03 +*/ + +const defaultWords = ["CAT", "DOG", "FOX", "OWL", "LION", "CODE", "HACKCLUB", "BYTE", "GIT", "BOTS", "PYTHON", "SCRIPT", "DATA", "SPRIG"]; +let words = [...defaultWords]; +let word = ""; +let guessedLetters = []; +let visibleIndices = []; +let attempts = 0; +let gameState = "playing"; // "playing", "won", "lost" + +const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +let currentLetterIndex = 0; + +// Load custom words from local storage +function loadCustomWords() { + const storedWords = localStorage.getItem('customWords'); + if (storedWords) { + words = [...defaultWords, ...JSON.parse(storedWords)]; + } +} + +// Save custom words to local storage +function saveCustomWords() { + localStorage.setItem('customWords', JSON.stringify(words.filter(word => !defaultWords.includes(word)))); +} + +// Sprites +setLegend( + ["b", bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], +); + +// Initialize game +function initGame() { + word = words[Math.floor(Math.random() * words.length)]; + guessedLetters = []; + visibleIndices = generateVisibleIndices(word); + attempts = 0; + gameState = "playing"; + currentLetterIndex = 0; +} + +// Generate visible indices for randomly placing missing letters +function generateVisibleIndices(word) { + let indices = []; + for (let i = 0; i < word.length; i++) { + indices.push(i); + } + // Shuffle and keep half of the indices visible + return indices.sort(() => Math.random() - 0.5).slice(0, word.length - Math.floor(word.length / 2)); +} + +// Main game loop +function update() { + clearText(); + if (gameState === "playing") { + drawWord(); + drawCurrentLetter(); + drawAttempts(); + } else { + drawGameOver(); + } +} + +// Left +onInput("a", () => { + if (gameState === "playing") { + currentLetterIndex = (currentLetterIndex - 1 + 26) % 26; + update(); + } +}); + +// Right +onInput("d", () => { + if (gameState === "playing") { + currentLetterIndex = (currentLetterIndex + 1) % 26; + update(); + } +}); + +// Confirm Letter Choice +onInput("w", () => { + if (gameState === "playing") { + guessLetter(alphabet[currentLetterIndex]); + update(); + } +}); + +// Restart Game +onInput("i", () => { + if (gameState !== "playing") { + initGame(); + update(); + } +}); + +// Add Custom Words +onInput("l", () => { + if (gameState === "playing") { + addCustomWord(prompt("Enter a new word:").toUpperCase()); + initGame(); + update(); + } +}); + +// Add custom word to the game +function addCustomWord(newWord) { + if (newWord && /^[A-Z]+$/.test(newWord)) { + if (!words.includes(newWord)) { + words.push(newWord); + saveCustomWords(); + } + } +} + +// Draw the current state of the word +function drawWord() { + let displayWord = ""; + for (let i = 0; i < word.length; i++) { + if (visibleIndices.includes(i) || guessedLetters.includes(word[i])) { + displayWord += word[i]; + } else { + displayWord += "_"; + } + } + addText(displayWord, { x: 8, y: 6, color: color`9` }); +} + +// Draw the current letter for guessing +function drawCurrentLetter() { + addText(alphabet[currentLetterIndex], { x: 10, y: 9, color: color`9` }); +} + +// Draw the number of attempts +function drawAttempts() { + addText(`${attempts}/10`, { x: 8, y: 11, color: color`9` }); +} + +// Draw game over screen +function drawGameOver() { + if (gameState === "won") { + addText("You won!", { x: 1, y: 5, color: color`9` }); + } else { + addText("Game over", { x: 1, y: 5, color: color`9` }); + addText(`Word: ${word}`, { x: 1, y: 7, color: color`9` }); + } + addText("Press I to restart", { x: 1, y: 10, color: color`9` }); +} + +// Handle letter guessing +function guessLetter(letter) { + if (!guessedLetters.includes(letter)) { + guessedLetters.push(letter); + + if (!word.includes(letter)) { + shiftVisibleIndices(); + } + + attempts++; + checkGameStatus(); + } +} + +// Shift visible indices +function shiftVisibleIndices() { + // Find the first visible index to hide + const firstIndex = Math.min(...visibleIndices); + visibleIndices = visibleIndices.filter(index => index !== firstIndex); + + // Add a new index to make visible + let newIndex = Math.floor(Math.random() * word.length); + if (visibleIndices.length === word.length) { + newIndex = (Math.max(...visibleIndices) + 1) % word.length; + } + visibleIndices.push(newIndex); +} + +// Check game status +function checkGameStatus() { + if (word.split('').every(letter => guessedLetters.includes(letter))) { + gameState = "won"; + } else if (attempts >= 10) { + gameState = "lost"; + } +} + +// Set up the game map +setMap(map` +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb +bbbbbbbbbbbbbbbb`); + +// Load custom words on initialization +loadCustomWords(); + +// Initialize and start the game +initGame(); +update(); + diff --git a/games/WordeScapes.js b/games/WordeScapes.js new file mode 100644 index 0000000000..4825e6d832 --- /dev/null +++ b/games/WordeScapes.js @@ -0,0 +1,1671 @@ +/* +@title: Wordescaper +@author: Frank Z +@tags: ['utility'] +@addedOn: 2024-09-16 +*/ + +/* +To select a button, select the tile the cursor is already on to confirm input, + basically requires double clicking the tile +S for the check/input-word button, can be used to clear if you make a typo + +Hint: In general I avoid duplicates via plurality(not the same word plural and singular), + and similar words(cat and bat, etc.) + For solutions scroll to the word sets at the bottom + +If you want to make custom levels, just copy an entire if statement for a level(at the bottom), + set the level number, the 8 words(max 7 letters, no repeat characters(I think)), + the 7 letters and their values, and + duplicate a map into the map list(before the win screen), + set level number and add Xs for word lengths +*/ + +const cursor = "c" +const BG1 = "a" +const BG2 = "s" +const BG3 = "d" +const BG4 = "f" +const BG5 = "g" +const LTitle = "l" +const VTitle = "v" +const Check = "z" +const Check2 = "n" +const X = "x" +const X2 = "b" +const LetterSprite1 = "1" +const LetterSprite2 = "2" +const LetterSprite3 = "3" +const LetterSprite4 = "4" +const LetterSprite5 = "5" +const LetterSprite6 = "6" +const LetterSprite7 = "7" +const Number0 = "q" +const Number1 = "w" +const Number2 = "e" +const Number3 = "r" +const Number4 = "t" +const Number5 = "y" +const Number6 = "u" +const Number7 = "i" +const Number8 = "o" +const Number9 = "p" + +// storing letter sprites to be referenced +const LetterA = bitmap` +10............01 +0.....00000....0 +.....0000000.... +.....00...00.... +.....00...00.... +....00.....00... +....00.....00... +....00.....00... +....000000000... +....000000000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +0...00.....00..0 +10............01` +const LetterB = bitmap` +10............01 +0...0000000....0 +....00000000.... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00000000.... +....00000000.... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00000000.... +0...0000000....0 +10............01` +const LetterC = bitmap` +10............01 +0.....000000...0 +.....00000000... +....000....00... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....000....00... +.....00000000... +0.....000000...0 +10............01` +const LetterD = bitmap` +10............01 +0...0000000....0 +....00000000.... +....00....000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00....000... +....00000000.... +0...0000000....0 +10............01` +const LetterE = bitmap` +10............01 +0....00000000..0 +....000000000... +....00.......... +....00.......... +....00.......... +....00.......... +....000000...... +....000000...... +....00.......... +....00.......... +....00.......... +....00.......... +....000000000... +0....00000000..0 +10............01` +const LetterF = bitmap` +10............01 +0....00000000..0 +....000000000... +....00.......... +....00.......... +....00.......... +....00.......... +....0000000..... +....0000000..... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +0...00.........0 +10............01` +const LetterG = bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +....00.......... +....00.......... +....00.......... +....00..0000.... +....00..00000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +0....0000000...0 +10............01` +const LetterH = bitmap` +10............01 +0...00.....00..0 +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +....000000000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +0...00.....00..0 +10............01` +const LetterI = bitmap` +10............01 +0...00000000...0 +....00000000.... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +....00000000.... +0...00000000...0 +10............01` +const LetterJ = bitmap` +10............01 +0....00000000..0 +.....00000000... +........00...... +........00...... +........00...... +........00...... +........00...... +........00...... +........00...... +........00...... +...00...00...... +...000..00...... +....000000...... +0....0000......0 +10............01` +const LetterK = bitmap` +10............01 +0...00.....00..0 +....00....000... +....00....00.... +....00...00..... +....00..000..... +....00..00...... +....00.00....... +....00000....... +....000000...... +....00..000..... +....00...00..... +....00....00.... +....00....000... +0...00.....00..0 +10............01` +const LetterL = bitmap` +10............01 +0...00.........0 +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +....000000000... +0...000000000..0 +10............01` +const LetterM = bitmap` +10............01 +0..00......00..0 +...000....000... +...000....000... +...0000..0000... +...0000000000... +...00.0000.00... +...00..00..00... +...00......00... +...00......00... +...00......00... +...00......00... +...00......00... +...00......00... +0..00......00..0 +10............01` +const LetterN = bitmap` +10............01 +0...00.....00..0 +....000....00... +....000....00... +....0000...00... +....0000...00... +....00.00..00... +....00.00..00... +....00..00.00... +....00..00.00... +....00...0000... +....00...0000... +....00....000... +....00....000... +0...00.....00..0 +10............01` +const LetterO = bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +0....0000000...0 +10............01` +const LetterP = bitmap` +10............01 +0....000000....0 +....00000000.... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00000000.... +....0000000..... +....00.......... +....00.......... +....00.......... +....00.......... +....00.......... +0...00.........0 +10............01` +const LetterQ = bitmap` +10............01 +0...0000000....0 +...000000000.... +...00.....00.... +...00.....00.... +...00.....00.... +...00.....00.... +...00.....00.... +...00...0.00.... +...00...0000.... +...00....000.... +...00.....00.... +...00.....000... +...00000000000.. +0...0000000..0.0 +10............01` +const LetterR = bitmap` +10............01 +0....000000....0 +....00000000.... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00000000.... +....0000000..... +....00...00..... +....00....00.... +....00....00.... +....00.....00... +0...00.....00..0 +10............01` +const LetterS = bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +....00.......... +....00.......... +....00.......... +....00000000.... +.....00000000... +...........00... +...........00... +...........00... +....00.....00... +....000000000... +0....0000000...0 +10............01` +const LetterT = bitmap` +10............01 +0..0000000000..0 +...0000000000... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +0......00......0 +10............01` +const LetterU = bitmap` +10............01 +0...00.....00..0 +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +0....0000000...0 +10............01` +const LetterV = bitmap` +10............01 +0..0........0..0 +...00......00... +...00......00... +...00......00... +....00....00.... +....00....00.... +....00....00.... +.....00..00..... +.....00..00..... +.....00..00..... +......0000...... +......0000...... +.......00....... +0......00......0 +10............01` +const LetterW = bitmap` +10............01 +00............00 +.00..........00. +.00..........00. +.00..........00. +.00..........00. +.00..........00. +.00....00....00. +.00...0000...00. +..00.00..00.00.. +..00.00..00.00.. +..00.00..00.00.. +..00.00..00.00.. +...000....000... +0...0......0...0 +10............01` +const LetterX = bitmap` +10............01 +0...00.....00..0 +....00.....00... +.....00...00.... +.....00...00.... +......00.00..... +......00.00..... +.......000...... +.......000...... +......00.00..... +......00.00..... +.....00...00.... +.....00...00.... +....00.....00... +0...00.....00..0 +10............01` +const LetterY = bitmap` +10............01 +0..0........0..0 +...00......00... +...00......00... +....00....00.... +....00....00.... +.....00..00..... +.....00..00..... +......0000...... +......0000...... +.......00....... +.......00....... +.......00....... +.......00....... +0......00......0 +10............01` +const LetterZ = bitmap` +10............01 +0...000000000..0 +....000000000... +..........000... +.........000.... +.........00..... +........00...... +........00...... +.......00....... +.......00....... +......00........ +.....000........ +....000......... +....000000000... +0...000000000..0 +10............01` + +// creating 7 letter variables for displaying +let Letter1 = bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +................ +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +................ +................ +1..............1 +1011111111111101`; +let Letter2 = bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +................ +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +................ +................ +1..............1 +1011111111111101`; +let Letter3 = bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +................ +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +................ +................ +1..............1 +1011111111111101`; +let Letter4 = bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +................ +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +................ +................ +1..............1 +1011111111111101`; +let Letter5 = bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +................ +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +................ +................ +1..............1 +1011111111111101`; +let Letter6 = bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +................ +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +................ +................ +1..............1 +1011111111111101`; +let Letter7 = bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +................ +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +................ +................ +1..............1 +1011111111111101`; + +// creating 7 letter values to match variables ^^ +let LetterValue1 = ""; +let LetterValue2 = ""; +let LetterValue3 = ""; +let LetterValue4 = ""; +let LetterValue5 = ""; +let LetterValue6 = ""; +let LetterValue7 = ""; + +// create word set array +let wordset = [ + "", + "", + "", + "", + "", + "", + "", + "" +]; + +// creating back-end variables at needed starting values +let inputword = ""; +let letterstyped = 0; +let typelocation = 8; +let correctwords = 0 + +// create sprite names for 7 letters in array to be referenced with index +let lettersprites = [ + LetterSprite1, + LetterSprite2, + LetterSprite3, + LetterSprite4, + LetterSprite5, + LetterSprite6, + LetterSprite7 +] + +// create tunes +TuneWrong = tune` +200, +200: A5-200 + G4^200 + F4~200 + E4/200, +200: F4^200 + E4~200 + D4/200 + F5-200, +200: C4/200 + D4~200 + E4^200 + D5-200, +5600` +TuneRight = tune` +166.66666666666666, +166.66666666666666: D5-166.66666666666666 + C4/166.66666666666666 + D4~166.66666666666666 + E4^166.66666666666666, +166.66666666666666: F5-166.66666666666666 + E4~166.66666666666666 + D4/166.66666666666666 + G4^166.66666666666666, +166.66666666666666: B4^166.66666666666666 + A5-166.66666666666666 + G4~166.66666666666666 + E4/166.66666666666666, +4666.666666666666` +TuneNextLevel = tune` +125, +125: F4^125 + E4~125 + C4/125, +125: C4/125 + E4~125 + F4^125, +125: D4/125 + G4^125 + F4~125, +125: D4/125 + F4~125 + G4^125, +125: E4/125 + G4~125 + A4^125, +125: F4/125 + A4~125 + B4^125, +125: G4/125 + B4~125 + C5^125, +125: A4/125 + C5~125 + D5^125, +125: B4/125 + D5~125 + E5^125, +125: C5/125 + E5~125 + F5^125, +2625` + +// create letter values for 7 letters in array to be referenced and able to be refreshed with the function +function updatelettervalues() { + lettervalues = [ + LetterValue1, + LetterValue2, + LetterValue3, + LetterValue4, + LetterValue5, + LetterValue6, + LetterValue7 + ] +}; + +// setLegend for sprites in a function to be refreshed +function updatelegend() { + setLegend( + [cursor, bitmap` +..3.33.33.33.3.. +................ +3..............3 +................ +3..............3 +3..............3 +................ +3..............3 +3..............3 +................ +3..............3 +3..............3 +................ +3..............3 +................ +..3.33.33.33.3..`], + [BG1, bitmap` +10LLLL1LL1111101 +01L111L111111110 +L11L11111111111L +LLL111111111112L +L111111111111111 +1L1111111111112L +111111111111111L +L11111111111112L +111111111111111L +111111111111112L +1111111111111221 +111111111111112L +L11111111111211L +L111111112111221 +0111221211212210 +101LL11LLLL1LL01`], + [BG2, bitmap` +10............01 +0..............0 +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +0..............0 +10............01`], + [BG3, bitmap` +10LLLLLLLLLLLL01 +0..............0 +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +0..............0 +1011111111111101`], + [BG4, bitmap` +10LLLLLLLLLLLL01 +0..............0 +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +0..............0 +1077777777777701`], + [BG5, bitmap` +10LLLLLLLLLLLL01 +1..............1 +................ +...0........0... +....0......0.... +.....0....0..... +......0..0...... +.......00....... +.......00....... +......0..0...... +.....0....0..... +....0......0.... +...0........0... +................ +1..............1 +1011111111111101`], + [LTitle, bitmap` +1022222222222201 +0222002222222220 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222002222222222 +2222000000002222 +0222000000002220 +1022222222222201`], + [VTitle, bitmap` +1022222222222201 +0220222222220220 +2220022222200222 +2220022222200222 +2220022222200222 +2222002222002222 +2222002222002222 +2222002222002222 +2222200220022222 +2222200220022222 +2222200220022222 +2222220000222222 +2222220000222222 +2222222002222222 +0222222002222220 +1022222222222201`], + [Check, bitmap` +1044444444444401 +0..............0 +4...........D..4 +4..........D4D.4 +4.........D444D4 +4........D444D.4 +4.......D444D..4 +4..D...D444D...4 +4.D4D.D444D....4 +4D444D444D.....4 +4.D44444D......4 +4..D444D.......4 +4...D4D........4 +4....D.........4 +0..............0 +1044444444444401`], + [Check2, bitmap` +10LLLL1LL1111101 +01L111L111111110 +L11L11111111111L +LLL111111111412L +L111111111144111 +1L1111111144112L +111111111441111L +L11111114411112L +114411144111111L +111441441111112L +1111444111111221 +111114111111112L +L11111111111211L +L111111112111221 +0111221211212210 +101LL11LLLL1LL01`], + [X, bitmap` +1033333333333301 +0..............0 +3..............3 +3...3......3...3 +3..333....333..3 +3...333..333...3 +3....333333....3 +3.....3333.....3 +3.....3333.....3 +3....333333....3 +3...333..333...3 +3..333....333..3 +3...3......3...3 +3..............3 +0..............0 +1033333333333301`], + [X2, bitmap` +10LLLL1LL1111101 +01L111L111111110 +L11L11111111111L +LLL311111111312L +L111311111131111 +1L1113111131112L +111111311311111L +L11111133111112L +111111133111111L +111111311311112L +1111131111311221 +111131111113112L +L11311111111311L +L111111112111221 +0111221211212210 +101LL11LLLL1LL01`], + [Number0, bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +....00.....00... +....00.....00... +....00...0.00... +....00..00.00... +....00.00..00... +....00.0...00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +0....0000000...0 +10............01`], + [Number1, bitmap` +10............01 +0.....000......0 +.....0000....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.....000000..... +0....000000....0 +10............01`], + [Number2, bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +...........00... +...........00... +..........000... +.........000.... +........000..... +.......000...... +......000....... +.....000........ +....000......... +....000000000... +0...000000000..0 +10............01`], + [Number3, bitmap` +10............01 +0...000000000..0 +....000000000... +..........000... +.........000.... +........000..... +.......000...... +......000000.... +......0000000... +...........00... +...........00... +...........00... +....00.....00... +....000000000... +0....0000000...0 +10............01`], + [Number4, bitmap` +10............01 +0........000...0 +........0000.... +.......00000.... +.......00.00.... +......00..00.... +......00..00.... +.....00...00.... +.....00...00.... +....00....00.... +....0000000000.. +....0000000000.. +..........00.... +..........00.... +0.........00...0 +10............01`], + [Number5, bitmap` +10............01 +0...000000000..0 +....000000000... +....00.......... +....00.......... +....00.......... +....00.......... +....00000000.... +.....00000000... +...........00... +...........00... +...........00... +....00.....00... +....000000000... +0....0000000...0 +10............01`], + [Number6, bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +....00.......... +....00.......... +....00.......... +....00000000.... +....000000000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +0....0000000...0 +10............01`], + [Number7, bitmap` +10............01 +0...000000000..0 +....000000000... +...........00... +..........00.... +..........00.... +.........00..... +.........00..... +........00...... +........00...... +.......00....... +.......00....... +......00........ +......00........ +0.....00.......0 +10............01`], + [Number8, bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +.....0000000.... +.....0000000.... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +0....0000000...0 +10............01`], + [Number9, bitmap` +10............01 +0....0000000...0 +....000000000... +....00.....00... +....00.....00... +....00.....00... +....00.....00... +....000000000... +.....00000000... +...........00... +...........00... +...........00... +....00.....00... +....000000000... +0....0000000...0 +10............01`], + [LetterSprite1, Letter1], + [LetterSprite2, Letter2], + [LetterSprite3, Letter3], + [LetterSprite4, Letter4], + [LetterSprite5, Letter5], + [LetterSprite6, Letter6], + [LetterSprite7, Letter7] + ) +}; +updatelegend(); + +// clears and adds the 7 letters in input tiles +function set7letters() { + clearTile(3, 3); + clearTile(4, 4); + clearTile(5, 5); + clearTile(4, 6); + clearTile(2, 6); + clearTile(1, 5); + clearTile(2, 4); + addSprite(3, 3, LetterSprite1); + addSprite(4, 4, LetterSprite2); + addSprite(5, 5, LetterSprite3); + addSprite(4, 6, LetterSprite4); + addSprite(2, 6, LetterSprite5); + addSprite(1, 5, LetterSprite6); + addSprite(2, 4, LetterSprite7); +}; + +// checks if the cursor is at the desired position +function checkforcursor(x, y) { + let sprites = getTile(x, y); + for (let sprite of sprites) { + if (sprite.type === cursor) { + return true; + } + } +}; + +// clears the 8 entry tiles at the top and the input word +function clearentry() { + for (let tile = 8; tile <= 14; tile++) { + clearTile(tile, 0) + addSprite(tile, 0, BG4) + } + letterstyped = 0; + inputword = ""; +}; + +function placecursor() { + addSprite(3, 3, cursor); +} + +// prints the typed letter at the top and adds the value to the input word +function submitletter(inputtile) { + if (letterstyped === 7) { // resets input if the input word is full + clearentry(); + } + typelocation = 8 + letterstyped; + addSprite(typelocation, 0, lettersprites[inputtile]); + inputword += lettervalues[inputtile]; + letterstyped += 1; +}; + +function submitword() { + if (wordset.indexOf(inputword) !== -1) { // if the input word is in the word set + playTune(TuneRight); + clearTile(7, 0) // flashes check mark next to input tiles + addSprite(7, 0, Check2) + setTimeout(() => { + clearTile(7, 0) + addSprite(7, 0, BG1) + }, 800); + clearTile(7, wordset.indexOf(inputword) + 1); // adds check next to word correctly guessed + addSprite(7, wordset.indexOf(inputword) + 1, Check); + correctwords += 1; + for (let letter = 0; letter < inputword.length; letter++) { // for every letter in the input word + for (let lettervalue = 0; lettervalue <= 6; lettervalue++) { // for all the 7 letters + if ((inputword[letter]) === lettervalues[lettervalue]) { // check if they match + addSprite(letter + 8, wordset.indexOf(inputword) + 1, lettersprites[lettervalue]); // print the sprite for the letter + } + } + } + wordset[wordset.indexOf(inputword)] = "1"; // replaces word in word set with 1 to remove ability to get it correct multiple times + } + else { + playTune(TuneWrong); + clearTile(7, 0) // flashes x next to input tiles + addSprite(7, 0, X2) + setTimeout(() => { + clearTile(7, 0) + addSprite(7, 0, BG1) + }, 800); + } + setTimeout(() => { // if all words are correct then pause and go to next level + if (correctwords === 8) { + playTune(TuneNextLevel); + correctwords = 0; + level += 1; + setMap(levels[level]); + checkandloadlevel(); + } + }, 1500); + clearentry(); + +}; + +// inputs +onInput("w", () => { + if (checkforcursor(3, 3)) { // if the cursor is on that tile already, then input the letter associated + submitletter(0); + } + getFirst(cursor).remove(); // "moves" the cursor to the tile + addSprite(3, 3, cursor); +}); +onInput("l", () => { + if (checkforcursor(4, 4) === true) { + submitletter(1); + } + getFirst(cursor).remove(); + addSprite(4, 4, cursor); +}); +onInput("d", () => { + if (checkforcursor(5, 5) === true) { + submitletter(2); + } + if (cursor) { + getFirst(cursor).remove(); + } + addSprite(5, 5, cursor); +}); +onInput("k", () => { + if (checkforcursor(4, 6) === true) { + submitletter(3); + } + getFirst(cursor).remove(); + addSprite(4, 6, cursor); +}); +onInput("s", () => { + if (checkforcursor(3, 7) === true) { + submitword(); + } + getFirst(cursor).remove(); + addSprite(3, 7, cursor); +}); +onInput("j", () => { + if (checkforcursor(2, 6) === true) { + submitletter(4); + } + getFirst(cursor).remove(); + addSprite(2, 6, cursor); +}); +onInput("a", () => { + if (checkforcursor(1, 5) === true) { + submitletter(5); + } + getFirst(cursor).remove(); + addSprite(1, 5, cursor); +}); +onInput("i", () => { + if (checkforcursor(2, 4) === true) { + submitletter(6); + } + getFirst(cursor).remove(); + addSprite(2, 4, cursor); +}); + +// define maps, only differences are the level # and Xs for word lengths +let level = 0 +const levels = [ + map` +aaaaaaaafffffff +alvlsqaxddddggg +aaaaaaaxddddggg +aaa1aaaxddddggg +aa7a2aaxddddggg +a6aaa3axddddggg +aa5a4aaxdddgggg +aaazaaaxdddgggg +aaaaaaaxdddgggg`, + map` +aaaaaaaafffffff +alvlswaxddddddd +aaaaaaaxddddddg +aaa.aaaxddddddg +aa.a.aaxdddddgg +a.aaa.axdddddgg +aa.a.aaxddddggg +aaazaaaxddddggg +aaaaaaaxdddgggg`, + map` +aaaaaaaafffffff +alvlseaxddddddd +aaaaaaaxddddddg +aaa.aaaxddddddg +aa.a.aaxdddddgg +a.aaa.axdddddgg +aa.a.aaxdddddgg +aaazaaaxddddggg +aaaaaaaxddddggg`, + map` +aaaaaaaafffffff +alvlsraxddddddd +aaaaaaaxddddddd +aaa.aaaxddddddg +aa.a.aaxddddddg +a.aaa.axdddddgg +aa.a.aaxdddddgg +aaazaaaxddddggg +aaaaaaaxddddggg`, + map` +aaaaaaaafffffff +alvlstaxddddddd +aaaaaaaxddddddg +aaa.aaaxdddddgg +aa.a.aaxdddddgg +a.aaa.axddddggg +aa.a.aaxddddggg +aaazaaaxddddggg +aaaaaaaxddddggg`, + map` +aaaaaaaafffffff +alvlsyaxddddddd +aaaaaaaxddddddg +aaa.aaaxdddddgg +aa.a.aaxdddddgg +a.aaa.axdddddgg +aa.a.aaxddddggg +aaazaaaxddddggg +aaaaaaaxddddggg`, + map` +aaaaaaaafffffff +alvlsuaxddddddd +aaaaaaaxddddddd +aaa.aaaxddddddg +aa.a.aaxddddddg +a.aaa.axddddddg +aa.a.aaxdddddgg +aaazaaaxdddddgg +aaaaaaaxddddggg`, + map` +aaaaaaaafffffff +alvlsiaxddddddd +aaaaaaaxddddddg +aaa.aaaxdddddgg +aa.a.aaxdddddgg +a.aaa.axdddddgg +aa.a.aaxddddggg +aaazaaaxddddggg +aaaaaaaxddddggg`, + map` +aaaaaaaafffffff +alvlsoaxddddddd +aaaaaaaxddddddg +aaa.aaaxdddddgg +aa.a.aaxdddddgg +a.aaa.axddddggg +aa.a.aaxddddggg +aaazaaaxddddggg +aaaaaaaxdddgggg`, + map` +aaaaaaaafffffff +alvlspaxddddddd +aaaaaaaxddddddd +aaa.aaaxddddddg +aa.a.aaxddddddg +a.aaa.axdddddgg +aa.a.aaxdddddgg +aaazaaaxddddggg +aaaaaaaxddddggg`, + map` +aaaaaaaafffffff +azzzzzazddddddd +aaaaaaazddddddd +aaazaaazddddddd +aazazaazddddddd +azaaazazddddddd +aazazaazddddddd +aaazaaazddddddd +aaaaaaazddddddd` +] +setMap(levels[level]); + +// runs to make sure the level change is registered +function checkandloadlevel() { + if (level === levels.length - 1) { // last level win screen + Letter1 = LetterY; + Letter2 = LetterO; + Letter3 = LetterU; + Letter4 = LetterW; + Letter5 = LetterI; + Letter6 = LetterN; + updatelettervalues(); + updatelegend(); + for (let winscreenX = 1; winscreenX <= 8; winscreenX += 2) { // print "you win" a bunch + addSprite(8, winscreenX, LetterSprite1); + addSprite(9, winscreenX, LetterSprite2); + addSprite(10, winscreenX, LetterSprite3); + addSprite(12, winscreenX, LetterSprite4); + addSprite(13, winscreenX, LetterSprite5); + addSprite(14, winscreenX, LetterSprite6); + } + }; + + if (level === 0) { + wordset = [ + "dawk", + "dial", + "walk", + "wild", + "jail", + "jaw", + "kid", + "aid" + ] + Letter1 = LetterW; // sets 7 letters for input and their values in clockwise order + Letter2 = LetterL; + Letter3 = LetterD; + Letter4 = LetterK; + Letter5 = LetterJ; + Letter6 = LetterA; + Letter7 = LetterI; + LetterValue1 = "w"; + LetterValue2 = "l"; + LetterValue3 = "d"; + LetterValue4 = "k"; + LetterValue5 = "j"; + LetterValue6 = "a"; + LetterValue7 = "i"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 1) { + wordset = [ + "adviser", + "divers", + "varied", + "aside", + "reads", + "save", + "idea", + "air" + ] + Letter1 = LetterD; + Letter2 = LetterS; + Letter3 = LetterA; + Letter4 = LetterR; + Letter5 = LetterV; + Letter6 = LetterE; + Letter7 = LetterI; + LetterValue1 = "d"; + LetterValue2 = "s"; + LetterValue3 = "a"; + LetterValue4 = "r"; + LetterValue5 = "v"; + LetterValue6 = "e"; + LetterValue7 = "i"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 2) { + wordset = [ + "chemist", + "ethics", + "itches", + "smith", + "chime", + "heist", + "mice", + "time" + ] + Letter1 = LetterM; + Letter2 = LetterT; + Letter3 = LetterE; + Letter4 = LetterH; + Letter5 = LetterS; + Letter6 = LetterI; + Letter7 = LetterC; + LetterValue1 = "m"; + LetterValue2 = "t"; + LetterValue3 = "e"; + LetterValue4 = "h"; + LetterValue5 = "s"; + LetterValue6 = "i"; + LetterValue7 = "c"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 3) { + wordset = [ + "ignores", + "regions", + "senior", + "singer", + "resin", + "noise", + "gone", + "rose" + ] + Letter1 = LetterI; + Letter2 = LetterG; + Letter3 = LetterR; + Letter4 = LetterS; + Letter5 = LetterN; + Letter6 = LetterE; + Letter7 = LetterO; + LetterValue1 = "i"; + LetterValue2 = "g"; + LetterValue3 = "r"; + LetterValue4 = "s"; + LetterValue5 = "n"; + LetterValue6 = "e"; + LetterValue7 = "o"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 4) { + wordset = [ + "pyramid", + "myriad", + "diary", + "rapid", + "arid", + "ramp", + "pair", + "army" + ] + Letter1 = LetterD; + Letter2 = LetterP; + Letter3 = LetterI; + Letter4 = LetterY; + Letter5 = LetterM; + Letter6 = LetterR; + Letter7 = LetterA; + LetterValue1 = "d"; + LetterValue2 = "p"; + LetterValue3 = "i"; + LetterValue4 = "y"; + LetterValue5 = "m"; + LetterValue6 = "r"; + LetterValue7 = "a"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 5) { + wordset = [ + "vacuole", + "alcove", + "clove", + "value", + "vocal", + "clue", + "love", + "oval" + ] + Letter1 = LetterC; + Letter2 = LetterA; + Letter3 = LetterO; + Letter4 = LetterV; + Letter5 = LetterU; + Letter6 = LetterE; + Letter7 = LetterL; + LetterValue1 = "c"; + LetterValue2 = "a"; + LetterValue3 = "o"; + LetterValue4 = "v"; + LetterValue5 = "u"; + LetterValue6 = "e"; + LetterValue7 = "l"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 6) { + wordset = [ + "enigmas", + "seaming", + "ageism", + "inseam", + "images", + "anime", + "games", + "amen" + ] + Letter1 = LetterA; + Letter2 = LetterS; + Letter3 = LetterG; + Letter4 = LetterI; + Letter5 = LetterE; + Letter6 = LetterM; + Letter7 = LetterN; + LetterValue1 = "a"; + LetterValue2 = "s"; + LetterValue3 = "g"; + LetterValue4 = "i"; + LetterValue5 = "e"; + LetterValue6 = "m"; + LetterValue7 = "n"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 7) { + wordset = [ + "springy", + "spying", + "rings", + "spiny", + "sprig", + "grip", + "spin", + "ping" + ] + Letter1 = LetterP; + Letter2 = LetterN; + Letter3 = LetterS; + Letter4 = LetterY; + Letter5 = LetterR; + Letter6 = LetterG; + Letter7 = LetterI; + LetterValue1 = "p"; + LetterValue2 = "n"; + LetterValue3 = "s"; + LetterValue4 = "y"; + LetterValue5 = "r"; + LetterValue6 = "g"; + LetterValue7 = "i"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 8) { + wordset = [ + "factory", + "crafty", + "actor", + "forty", + "cart", + "orca", + "taco", + "fat" + ] + Letter1 = LetterC; + Letter2 = LetterA; + Letter3 = LetterY; + Letter4 = LetterO; + Letter5 = LetterR; + Letter6 = LetterT; + Letter7 = LetterF; + LetterValue1 = "c"; + LetterValue2 = "a"; + LetterValue3 = "y"; + LetterValue4 = "o"; + LetterValue5 = "r"; + LetterValue6 = "t"; + LetterValue7 = "f"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + if (level === 9) { + wordset = [ + "deposit", + "topside", + "poised", + "spited", + "edits", + "tepid", + "diet", + "toes" + ] + Letter1 = LetterO; + Letter2 = LetterP; + Letter3 = LetterD; + Letter4 = LetterS; + Letter5 = LetterE; + Letter6 = LetterI; + Letter7 = LetterT; + LetterValue1 = "o"; + LetterValue2 = "p"; + LetterValue3 = "d"; + LetterValue4 = "s"; + LetterValue5 = "e"; + LetterValue6 = "i"; + LetterValue7 = "t"; + updatelettervalues(); + updatelegend(); + set7letters(); + }; + placecursor(); +}; + +checkandloadlevel(); diff --git a/games/Worldcraft.js b/games/Worldcraft.js index 32e3299bd4..488b2bb042 100644 --- a/games/Worldcraft.js +++ b/games/Worldcraft.js @@ -1,8 +1,8 @@ /* @title: Worldcraft -@tags: ['explore'] -@addedOn: 2022-12-09 @author: adadyer +@tags: ['adventure'] +@addedOn: 2022-12-09 Instructions: Explore the world using the portals, gather supplies, and build structures. diff --git a/games/WrongLane.js b/games/WrongLane.js index f17a649edc..5b804ff187 100644 --- a/games/WrongLane.js +++ b/games/WrongLane.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: WrongLane @author: KaspianDev -@tags: ['dodge', 'endless', 'singleplayer'] +@tags: ['endless','action'] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ /* Controls: diff --git a/games/YetAnotherRhythmGame.js b/games/YetAnotherRhythmGame.js index 20aae26097..e367d62991 100644 --- a/games/YetAnotherRhythmGame.js +++ b/games/YetAnotherRhythmGame.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: fruit catch @author: Sreekar617 -@tags: ['beginner'] +@tags: [] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ function sleep(ms) { diff --git a/games/Zooter.js b/games/Zooter.js index 63c261f059..a8f4eaf4ed 100644 --- a/games/Zooter.js +++ b/games/Zooter.js @@ -1,8 +1,8 @@ /* @title: Zooter -@tags: ['dodge'] -@addedOn: 2022-10-21 @author: PerrinPerson +@tags: ['action'] +@addedOn: 2022-10-21 */ const player = "p"; diff --git a/games/aMAZE.js b/games/aMAZE.js index 54bfd7ac07..43b7db1b31 100644 --- a/games/aMAZE.js +++ b/games/aMAZE.js @@ -1,8 +1,8 @@ /* @title: aMAZE -@tags: ['sokoban-style'] -@addedOn: 2023-01-08 @author: anabia +@tags: ['puzzle'] +@addedOn: 2023-01-08 */ const player = "p"; const wall = "w"; diff --git a/games/air_hockey.js b/games/air_hockey.js index 8f3ee26818..da40381795 100644 --- a/games/air_hockey.js +++ b/games/air_hockey.js @@ -1,7 +1,7 @@ /* -@author: @Soumay Manderna @title: air_hockey -@tags: ['classic'] +@author: @Soumay Manderna +@tags: ['retro'] @addedOn: 2023-04-01 Controls-- diff --git a/games/alien.js b/games/alien.js index 23dd5e80d5..234ac2b8fe 100644 --- a/games/alien.js +++ b/games/alien.js @@ -1,8 +1,8 @@ /* @title: alien +@author: anshimathur0325 @tags: ['endless'] @addedOn: 2022-09-06 -@author: anshimathur0325 Move the player with "a" and "d" for left and right Move the lazer up with "w" diff --git a/games/alien_invaders.js b/games/alien_invaders.js index 1d415e19dc..e6fef5e846 100644 --- a/games/alien_invaders.js +++ b/games/alien_invaders.js @@ -1,8 +1,8 @@ /* @title: alien_invaders -@tags: ['classic'] -@addedOn: 2022-09-28 @author: stati30241 +@tags: ['retro'] +@addedOn: 2022-09-28 Controls: - A to move left diff --git a/games/ambitious_ape_maze_game.js b/games/ambitious_ape_maze_game.js index c959900b0b..1264285108 100644 --- a/games/ambitious_ape_maze_game.js +++ b/games/ambitious_ape_maze_game.js @@ -1,9 +1,9 @@ /* @title: The Ambitious Ape Maze Game @author: atharv gupta -@tags: ['maze'] -@img: "" +@tags: ['puzzle'] @addedOn: 2024-05-28 +@img: "" */ const player = "p"; diff --git a/games/among_us_maze.js b/games/among_us_maze.js index 7921052631..ae8a75827d 100644 --- a/games/among_us_maze.js +++ b/games/among_us_maze.js @@ -1,8 +1,8 @@ /* @title: among_us_maze -@tags: ['advanced', 'web-only'] -@addedOn: 2022-08-16 @author: Riya and Christy +@tags: [] +@addedOn: 2022-08-16 */ // This game can be played with mouse diff --git a/games/amongus.js b/games/amongus.js index 4cc91192de..ec0b64e31c 100644 --- a/games/amongus.js +++ b/games/amongus.js @@ -1,7 +1,7 @@ /* @title: Among Us Survival -@tags: ['among us', 'survive'] @author: anvayajmera +@tags: ['survival'] @addedOn: 2024-07-26 */ diff --git a/games/asteroid-world.js b/games/asteroid-world.js index 142bb478c1..55bb0d67fa 100644 --- a/games/asteroid-world.js +++ b/games/asteroid-world.js @@ -1,7 +1,7 @@ /* @title: Astroid World @author: Shaurya -@tags: ["space"] +@tags: [] @addedOn: 2024-08-06 */ diff --git a/games/attack_on_slimes.js b/games/attack_on_slimes.js index f2ddf4185f..26b567882e 100644 --- a/games/attack_on_slimes.js +++ b/games/attack_on_slimes.js @@ -1,8 +1,8 @@ /* @title: attack_on_slimes +@author: OwOSwordsman @tags: ['endless'] @addedOn: 2022-12-26 -@author: OwOSwordsman */ // gamestate diff --git a/games/balloon.js b/games/balloon.js index 8fd9324b91..965903a28f 100644 --- a/games/balloon.js +++ b/games/balloon.js @@ -1,8 +1,8 @@ /* @title: balloon -@tags: ['WIP'] -@addedOn: 2022-09-08 @author: Lucas +@tags: [] +@addedOn: 2022-09-08 */ const player = "p"; diff --git a/games/banana_runner.js b/games/banana_runner.js index a739d318dd..297ef9fde5 100644 --- a/games/banana_runner.js +++ b/games/banana_runner.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - -@title: Banana runner +@title: Banana runner @author: Aaron Lei @tags: [] @addedOn: 2024-07-11 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" const knife = "k" diff --git a/games/bannai-snake.js b/games/bannai-snake.js index ec58bac75e..dc940bb436 100644 --- a/games/bannai-snake.js +++ b/games/bannai-snake.js @@ -1,8 +1,8 @@ /* @title: bannai-snake -@tags: ['thematic-puzzle'] -@addedOn: 2023-02-13 @author: aagrim hoysal +@tags: ['puzzle'] +@addedOn: 2023-02-13 */ const player = "p" diff --git a/games/basic_tetris.js b/games/basic_tetris.js index 2d9c25a1c6..4688147362 100644 --- a/games/basic_tetris.js +++ b/games/basic_tetris.js @@ -2,8 +2,8 @@ @title: Basic Tetris @author: Ivan-Jehad @tags: [] -@img: "" @addedOn: 2024-06-10 +@img: "" */ const empty = "e"; diff --git a/games/battle_bots.js b/games/battle_bots.js index 2980c62fef..03b8edfee3 100644 --- a/games/battle_bots.js +++ b/games/battle_bots.js @@ -1,8 +1,8 @@ /* @title: battle bots +@author: kyle @tags: ['multiplayer'] @addedOn: 2022-10-20 -@author: kyle */ diff --git a/games/bbbbbb.js b/games/bbbbbb.js index 95e81633cd..8b7d0e038a 100644 --- a/games/bbbbbb.js +++ b/games/bbbbbb.js @@ -1,8 +1,8 @@ /* @title: bbbbbb -@tags: ['logic'] -@addedOn: 2022-12-06 @author: hoggie +@tags: ['puzzle'] +@addedOn: 2022-12-06 */ const player = "p"; diff --git a/games/black_jack.js b/games/black_jack.js index 65cdfc4bc5..c8e3ccff5c 100644 --- a/games/black_jack.js +++ b/games/black_jack.js @@ -1,8 +1,8 @@ /* @title: black_jack -@tags: ['classic'] -@addedOn: 2022-12-21 @author: xevaly +@tags: ['retro'] +@addedOn: 2022-12-21 Before the game starts, the player can adjust their bet size by pressing the "I" key to increase the bet size and the "K" key to decrease it. diff --git a/games/blackjack.js b/games/blackjack.js index 5eeb84d76b..99fbfd6df5 100644 --- a/games/blackjack.js +++ b/games/blackjack.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Blackjack @author: Josh Baron @tags: ['endless'] @addedOn: 2024-07-02 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const spade = "s" diff --git a/games/blocked.js b/games/blocked.js index ccf206f0a4..81f84f551d 100644 --- a/games/blocked.js +++ b/games/blocked.js @@ -1,7 +1,7 @@ /* @title: aMaze @author: Sumedh Natu -@tags: ["puzzle", "tiles", "sokoban", "boxes"] +@tags: ['puzzle'] @addedOn: 2024-08-13 */ diff --git a/games/blokl_the_hole.js b/games/blokl_the_hole.js index 2b94fe2cca..2db804dc47 100644 --- a/games/blokl_the_hole.js +++ b/games/blokl_the_hole.js @@ -1,9 +1,9 @@ /* @title: blokl the hole +@author: chase .A @tags: ['puzzle'] -@img: "" @addedOn: 2024-05-02 -@author: chase .A +@img: "" */ diff --git a/games/bloxorz.js b/games/bloxorz.js index 169c20eb04..1d5f2121d0 100644 --- a/games/bloxorz.js +++ b/games/bloxorz.js @@ -1,8 +1,8 @@ /* @title: bloxorz -@tags: ['logic'] -@addedOn: 2023-02-20 @author: itona +@tags: ['puzzle'] +@addedOn: 2023-02-20 */ const player = "p"; diff --git a/games/bob_and_joe.js b/games/bob_and_joe.js index 5f83ef1b5d..c1c1b5eaee 100644 --- a/games/bob_and_joe.js +++ b/games/bob_and_joe.js @@ -2,7 +2,7 @@ /* @title: bob_and_joe @author: aramshiva -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-12-08 */ diff --git a/games/bobs_bad_apple.js b/games/bobs_bad_apple.js index d03c5603d0..7e15f1a5a7 100644 --- a/games/bobs_bad_apple.js +++ b/games/bobs_bad_apple.js @@ -1,8 +1,8 @@ /* @title: bobs_bad_apple -@tags: ['logic'] -@addedOn: 2023-03-01 @author: L. Clark +@tags: ['puzzle'] +@addedOn: 2023-03-01 */ // Bob is trapped in a maze. diff --git a/games/bolt_battle.js b/games/bolt_battle.js index 3394df056a..3713ca2e6f 100644 --- a/games/bolt_battle.js +++ b/games/bolt_battle.js @@ -1,8 +1,8 @@ /* @title: Bolt Battle -@tags: ['sokoban-style'] -@addedOn: 2022-10-10 @author: Arnav Ambre +@tags: ['puzzle'] +@addedOn: 2022-10-10 INSTRUCTIONS: Use WASD to move the character to push the lighting bolts onto the batteries. diff --git a/games/bomb_dodge.js b/games/bomb_dodge.js index cfbd7d0f67..f2272bd8ea 100644 --- a/games/bomb_dodge.js +++ b/games/bomb_dodge.js @@ -2,7 +2,7 @@ /* @title: bomb_dodge @author: AstralTurtle -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-12-10 */ diff --git a/games/bone_hunt.js b/games/bone_hunt.js index dccafe42d8..8fa7020a90 100644 --- a/games/bone_hunt.js +++ b/games/bone_hunt.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: bone_hunt @author: Andrew Cromar -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-01-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/botdotpng.js b/games/botdotpng.js index 7b790f5a98..9df9525b0e 100644 --- a/games/botdotpng.js +++ b/games/botdotpng.js @@ -1,4 +1,8 @@ /* +@title: botdotpng +@author: mavdotjs +@tags: ['puzzle'] +@addedOn: 2024-08-14 BOTDOTPNG: K: read tutorial @@ -7,10 +11,6 @@ BOTDOTPNG: J: rotate I: run robot -@title: botdotpng -@author: mavdotjs -@tags: ['puzzle', 'bot', 'singleplayer'] -@addedOn: 2024-08-14 */ const bg = 'B' diff --git a/games/box_maze.js b/games/box_maze.js index 576cb9280b..df4463b22c 100644 --- a/games/box_maze.js +++ b/games/box_maze.js @@ -1,8 +1,8 @@ /* @title: Box_Maze -@tags: ['sokoban-style'] -@addedOn: 2022-10-19 @author: Boden +@tags: ['puzzle'] +@addedOn: 2022-10-19 */ /* INSTRUCTIONS diff --git a/games/boxy.js b/games/boxy.js index e2d38163d5..4e9a5121ba 100644 --- a/games/boxy.js +++ b/games/boxy.js @@ -1,10 +1,10 @@ /* -Get the package (box) to mr poptato! (the green thing) -Watch out! Yellow enemies try to take your parcels! @title: boxy -@tags: ['classic', 'fun'] -@addedOn: 2024-07-08 @author: olii-dev +@tags: ['retro'] +@addedOn: 2024-07-08 +Get the package (box) to mr poptato! (the green thing) +Watch out! Yellow enemies try to take your parcels! Instructions: diff --git a/games/brainboom.js b/games/brainboom.js index 03c2bda062..7f58c6371b 100644 --- a/games/brainboom.js +++ b/games/brainboom.js @@ -1,8 +1,8 @@ /* - @title: BrainBoom - @author: Kapilarny - @tags: ['advanced', 'brainf***', 'puzzle'] - @addedOn: 2024-07-09 +@title: BrainBoom +@author: Kapilarny +@tags: ['humor','puzzle'] +@addedOn: 2024-07-09 */ /* diff --git a/games/breakfast_maze!.js b/games/breakfast_maze!.js index 48d735e9c3..84597daaa9 100644 --- a/games/breakfast_maze!.js +++ b/games/breakfast_maze!.js @@ -2,7 +2,7 @@ /* @title: breakfast_maze! @author: Alex -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-08-01 */ diff --git a/games/brick_blaster.js b/games/brick_blaster.js new file mode 100644 index 0000000000..e67b409722 --- /dev/null +++ b/games/brick_blaster.js @@ -0,0 +1,431 @@ +/* +@title: Brick Blaster +@author: MohammedMMc +@tags: ['real-time','action'] +@addedOn: 2024-08-28 +*/ + +const playerLowTime = "l"; +const player = "p"; +const power = "m"; +const ball = "b"; +const brick = "k"; +const bg = "g"; + +const tune_ball_smash = tune` +37.5: G4^37.5 + E4^37.5 + F4-37.5 + D4-37.5 + A4-37.5, +37.5: G4-37.5 + E4-37.5 + F4^37.5, +1125`; +const tune_brick_break = tune` +37.5: F4^37.5 + C4^37.5 + D4^37.5 + G4^37.5 + E4^37.5, +37.5: F4-37.5 + E4-37.5 + D4-37.5 + G4~37.5 + C4~37.5, +37.5: F4~37.5 + E4-37.5 + D4~37.5, +37.5: E4~37.5 + F4/37.5 + D4/37.5, +37.5: E4-37.5, +1012.5`; +const tune_won_game = tune` +172.41379310344828: A4^172.41379310344828 + G4^172.41379310344828 + F4^172.41379310344828 + E4^172.41379310344828 + D4/172.41379310344828, +172.41379310344828: E5-172.41379310344828 + F5~172.41379310344828 + G5-172.41379310344828, +172.41379310344828: F5-172.41379310344828 + D5-172.41379310344828 + E5~172.41379310344828, +172.41379310344828: G4-172.41379310344828 + A4-172.41379310344828 + F4^172.41379310344828 + E4^172.41379310344828 + A5/172.41379310344828, +172.41379310344828: E4^172.41379310344828 + D4^172.41379310344828 + F4-172.41379310344828 + G4-172.41379310344828 + G5/172.41379310344828, +172.41379310344828: B4/172.41379310344828 + A4/172.41379310344828 + C5-172.41379310344828, +172.41379310344828: G4/172.41379310344828 + C5-172.41379310344828 + B4-172.41379310344828, +172.41379310344828, +172.41379310344828: E4/172.41379310344828 + D4/172.41379310344828 + A4-172.41379310344828 + G4-172.41379310344828, +172.41379310344828, +172.41379310344828: C4/172.41379310344828 + E4-172.41379310344828 + D4-172.41379310344828 + G5/172.41379310344828, +172.41379310344828: D4-172.41379310344828 + E5^172.41379310344828, +172.41379310344828: C4-172.41379310344828 + D4^172.41379310344828 + A5/172.41379310344828 + G5-172.41379310344828, +3275.862068965517`; +const tune_won_level = tune` +168.53932584269663: D5-168.53932584269663 + C5-168.53932584269663 + A5-168.53932584269663 + G5~168.53932584269663 + A4~168.53932584269663, +168.53932584269663: G5-168.53932584269663 + F4-168.53932584269663 + E4-168.53932584269663 + F5~168.53932584269663 + D4~168.53932584269663, +168.53932584269663: E5-168.53932584269663 + D5~168.53932584269663 + C5~168.53932584269663 + G5/168.53932584269663, +168.53932584269663: D5-168.53932584269663 + C5-168.53932584269663 + A4~168.53932584269663 + E5/168.53932584269663 + B4^168.53932584269663, +168.53932584269663: G5-168.53932584269663 + F5~168.53932584269663 + G4-168.53932584269663, +168.53932584269663: E4-168.53932584269663 + D4~168.53932584269663 + D5/168.53932584269663 + A4/168.53932584269663, +168.53932584269663: C4-168.53932584269663 + F4/168.53932584269663, +168.53932584269663: C4-168.53932584269663 + D4/168.53932584269663, +168.53932584269663: C4/168.53932584269663 + D4^168.53932584269663, +3876.404494382022`; +const tune_lost_game = tune` +256.4102564102564: B4^256.4102564102564 + E4~256.4102564102564 + A4^256.4102564102564 + G5/256.4102564102564, +256.4102564102564: E4~256.4102564102564 + G4^256.4102564102564 + A4^256.4102564102564 + C5/256.4102564102564, +256.4102564102564: B4^256.4102564102564 + A4^256.4102564102564 + C4~256.4102564102564 + G5/256.4102564102564, +256.4102564102564: G4^256.4102564102564 + F4^256.4102564102564 + E4~256.4102564102564 + C5/256.4102564102564, +256.4102564102564, +256.4102564102564: E4^256.4102564102564 + D4~256.4102564102564 + G4/256.4102564102564, +256.4102564102564: E4^256.4102564102564 + D4~256.4102564102564 + F4/256.4102564102564, +6410.25641025641`; +const tune_power_up = tune` +90.6344410876133: D5/90.6344410876133 + E5/90.6344410876133 + F5/90.6344410876133 + G5/90.6344410876133 + C5-90.6344410876133, +90.6344410876133: F5/90.6344410876133 + G5/90.6344410876133 + E5-90.6344410876133, +90.6344410876133: G5/90.6344410876133 + A5/90.6344410876133 + F5-90.6344410876133, +90.6344410876133: A5/90.6344410876133 + G5-90.6344410876133, +2537.7643504531725`; + + +let time_start_power = 0; +let time_start = performance.now(); +let time_rest = 0; +let gameEnded = false; +let newLevel = false; +let score = 0; +let ball_velocity_x = Math.random() < 0.5 ? -1 : 1; +let ball_velocity_y = Math.random() < 0.5 ? -1 : 1; + + +setLegend( + [player, bitmap` +4444444444444444 +4444444444444444 +4444444D44444D44 +4DD444DD444DDD4D +DDDDDDDDDDDDDDDD +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................` ], + [playerLowTime, bitmap` +3333333333333333 +3333333333333333 +3333333C33333C33 +3CC333CC333CCC3C +CCCCCCCCCCCCCCCC +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................` ], + [power, bitmap` +9............9.. +.9..77777777...9 +...7777777777.9. +..777777777777.. +.74444444444447. +.74DD44DDD44D47. +.7DDDDDDDDDDDD7. +.7777778H777777. +.777788888H7777. +.7778H78H78H777. +.778H778H778H75. +.7777778H777755. +..777778H77755.. +9..77778H7755... +..9.77777555...9 +9............9..` ], + [ball, bitmap` +................ +................ +................ +.....111111..... +....12222221.... +...1222222221... +...1222222221... +...122222222L... +...122222222L... +...122222222L... +...1222222220... +....12222220.... +.....1LL000..... +................ +................ +................` ], + [brick, bitmap` +................ +................ +................ +................ +3233323332333233 +3233323332333233 +2222222222222222 +3332333233323332 +3332333233323332 +3332333233323332 +2222222222222222 +3233323332333233 +................ +................ +................ +................` ], + [bg, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` ], +); + +setSolids([player, playerLowTime, ball]); +setBackground(bg); + +let level = 0; +const levels = [ + map` +.............. +.kk.kk.kk.kk.. +.............. +..kk.kk.kk.kk. +.............. +.kk.kk.kk.kk.. +.............. +......b....... +.............. +.............. +.............. +.............. +......pp......`, + map` +.............. +.kkkkkkkkkkkk. +..kkkkkkkkkk.. +...kkkkkkkk... +....kkkkkk.... +.....kkkk..... +......kk...... +......b....... +.............. +.............. +.............. +.............. +......pp......`, + map` +......m....... +kkkkkk..kkkkkk +kkkkk..kkkkkkk +kkkkkk..kkkkkk +kkkkkkk..kkkkk +kkkkkkkk..kkkk +kkkkkkkkk..kkk +......b....... +.............. +.............. +.............. +.............. +......pp......`, + map` +......m....... +.............. +.k...k..kkkkk. +.k...k....k... +.k...k....k... +.k...k....k... +.kkkkk....k... +.k...kb...k... +.k...k....k... +.k...k....k... +.k...k..kkkkk. +.............. +......pp......`, +]; + +setMap(levels[level]); + +//setPushables({ +// [player]: [] +//}); + +onInput("a", () => { + if (!gameEnded) { + getAll(player).forEach(p => p.x -= (time_start_power === 0 ? 2 : 4)); + getAll(playerLowTime).forEach(p => p.x -= (time_start_power === 0 ? 2 : 4)); + }; +}); +onInput("d", () => { + if (!gameEnded) { + getAll(player).forEach(p => p.x += (time_start_power === 0 ? 2 : 4)); + getAll(playerLowTime).forEach(p => p.x += (time_start_power === 0 ? 2 : 4)); + } +}); +onInput("k", () => { + if (newLevel && gameEnded) { + time_start += (performance.now() - time_rest); + setMap(levels[level]); + newLevel = false; + gameEnded = false; + } +}); + + +afterInput(() => { + +}); + + +// For the powers + +function givePower() { + time_start_power = performance.now(); + playTune(tune_power_up, 1); + + const all_players = getAll(player); + const first_player = all_players[0]; + const last_player = all_players[all_players.length - 1]; + + if (all_players.length <= 2) { + addSprite(first_player.x - 1, first_player.y, player); + addSprite(last_player.x + 1, first_player.y, player); + } +} + +setInterval(function () { + if (gameEnded) return; + // Move the power down + getAll(power).map(m => { + const last_power_y_axis = m.y; + m.y++; + if (m.y === last_power_y_axis) m.remove(); + }); +}, 280); + +setInterval(function () { + if (gameEnded) return; + const time_power_have = time_start_power !== 0 ? ((performance.now() - time_start_power) / 1000) % 60 : null; + + if (time_power_have && time_power_have >= 10) { + // Remove the power + const all_players_low_time = getAll(playerLowTime); + if (all_players_low_time) { + all_players_low_time.forEach(p => p.remove()); + } + time_start_power = 0; + } else if (time_power_have && time_power_have >= 7) { + // Change Player Style + const all_players = getAll(player); + if (all_players.length > 2) { + const first_player = all_players[all_players.map(p => p.x).indexOf(Math.min(...all_players.map(p => p.x)))]; + const last_player = all_players[all_players.map(p => p.x).indexOf(Math.max(...all_players.map(p => p.x)))]; + + first_player.remove(); + last_player.remove(); + addSprite(first_player.x, first_player.y, playerLowTime); + addSprite(last_player.x, first_player.y, playerLowTime); + } + } else if (time_power_have) { + // normal style + const all_players_low_time = getAll(playerLowTime); + if (all_players_low_time.length > 0) { + all_players_low_time.forEach(p => { + p.remove(); + addSprite(p.x, p.y, player); + }); + } + } + + // Check for claiming the power + tilesWith(player).forEach(tile => { + const powerSprite = tile.find(sprite => sprite.type === power); + if (powerSprite) { + powerSprite.remove(); + givePower(); + } + }); +}, 10); + + +// Game Loop +const gameLoop = setInterval(function () { + if (gameEnded) return; + let gameball = getFirst(ball); + + // Store the pall position + let last_x_axis = gameball.x; + let last_y_axis = gameball.y; + + // Move the ball + gameball.x += ball_velocity_x; + gameball.y += ball_velocity_y; + + const isLost = gameball.y >= height() - 1; + if (isLost) { + clearInterval(gameLoop); + gameEnded = true; + + addText("YOU LOST!", { x: 6, y: 11, color: color`3` }); + playTune(tune_lost_game, 1); + return; + } + + // Check the new position and change directions + if (last_x_axis === gameball.x) ball_velocity_x *= -1; + if (last_y_axis === gameball.y) ball_velocity_y *= -1; + + const touchedBrick = tilesWith(ball)[0] ? tilesWith(ball)[0].find(sprite => sprite.type === brick) : null; + if (touchedBrick) { + if (level === 0) ['+1', '-1'].forEach(offset => { + let block = getTile(touchedBrick.x + parseInt(offset), touchedBrick.y); + if (block.length > 0 && block[0].type === brick) block[0].remove(); + }); + + touchedBrick.remove(); + if (Math.floor(Math.random() * 10) + 1 === 5) { + // OMG ur lucky you got number 5 its a 10% chance ! :D + addSprite(touchedBrick.x, touchedBrick.y, power); + } + + score++; + + ball_velocity_x *= 1; + ball_velocity_y *= -1; + playTune(tune_brick_break, 1); + } + + if (last_x_axis === gameball.x || last_y_axis === gameball.y) { + playTune(tune_ball_smash, 1); + } + + clearText(); + addText(String(score), { x: 0, y: 0, color: color`7` }); + + let time_diff = (performance.now() - time_start) / 1000; + let time_minutes = Math.floor(time_diff / 60); + let time_seconds = Math.floor(time_diff % 60); + let time_string = time_minutes > 0 ? `${time_minutes}m ${time_seconds}s` : `${time_seconds}s`; + addText(time_string, { x: 10 - Math.floor(time_string.length / 2), y: 0, color: color`9` }); + + addText(String(level + 1), { x: 19, y: 0, color: color`5` }); + + if (getAll(brick).length === 0) { + level++; + gameEnded = true; + if (levels[level]) { + playTune(tune_won_level, 1); + addText(`lvl.${level} completed!`, { x: 2, y: 10, color: color`4` }); + addText("Next level click K", { x: 1, y: 11, color: color`8` }); + newLevel = true; + time_rest = performance.now(); + } else { + addText(`YOU WON!`, { x: 6, y: 10, color: color`4` }); + playTune(tune_won_game, 1); + clearInterval(gameLoop); + } + } + +}, 200); + + diff --git a/games/brick_breaker.js b/games/brick_breaker.js index 54ec7da430..00dd42d6eb 100644 --- a/games/brick_breaker.js +++ b/games/brick_breaker.js @@ -1,8 +1,8 @@ /* @title: brick_breaker +@author: shaunba @tags: ['strategy'] @addedOn: 2023-01-14 -@author: shaunba Instructions: diff --git a/games/bullet_dodge.js b/games/bullet_dodge.js index 5e798e3ada..94b14f59f6 100644 --- a/games/bullet_dodge.js +++ b/games/bullet_dodge.js @@ -1,8 +1,8 @@ /* @title: bullet-dodge -@tags: ['dodge'] -@addedOn: 2023-01-13 @author: vishram1123 +@tags: ['action'] +@addedOn: 2023-01-13 Controls: W/A/S/D to move up/left/down/right diff --git a/games/bullet_heaven.js b/games/bullet_heaven.js index 4ff826ef45..08b5ad72e4 100644 --- a/games/bullet_heaven.js +++ b/games/bullet_heaven.js @@ -1,7 +1,7 @@ /* @title: Bullet Heaven -@author: OtterDev -@tags: ["shooter"] +@author: OtterDev +@tags: ['action'] @addedOn: 2024-07-30 */ diff --git a/games/burger_build.js b/games/burger_build.js index 0551cedb18..38fd0c7b5a 100644 --- a/games/burger_build.js +++ b/games/burger_build.js @@ -1,8 +1,8 @@ /* @title: burger build -@tags: ['dodge'] -@addedOn: 2023-08-19 @author: emily27yee +@tags: ['action'] +@addedOn: 2023-08-19 */ const player = "p" diff --git a/games/calculator.js b/games/calculator.js index af957a3caa..0c8287773b 100644 --- a/games/calculator.js +++ b/games/calculator.js @@ -1,8 +1,8 @@ /* @title: calculator -@tags: ['tool', 'simulation'] -@addedOn: 2023-03-03 @author: Sameer Murthy +@tags: ['utility','simulation'] +@addedOn: 2023-03-03 Github: @SameeraMurthy diff --git a/games/calculator_puzzle.js b/games/calculator_puzzle.js index 712fcc5693..ae373f5b4b 100644 --- a/games/calculator_puzzle.js +++ b/games/calculator_puzzle.js @@ -2,7 +2,7 @@ /* @title: calculator_puzzle @author: aboutdavid -@tags: ['thematic-puzzle'] +@tags: ['puzzle'] @addedOn: 2023-04-25 */ diff --git a/games/candy_rush.js b/games/candy_rush.js index 4c4cd57912..9746b4b572 100644 --- a/games/candy_rush.js +++ b/games/candy_rush.js @@ -1,8 +1,8 @@ /* @title: Candy Rush -@tags: ['sokoban-style'] -@addedOn: 2022-10-07 @author: Tasbia Uddin +@tags: ['puzzle'] +@addedOn: 2022-10-07 */ diff --git a/games/candyshopper.js b/games/candyshopper.js index c0ce33dab9..28057260cc 100644 --- a/games/candyshopper.js +++ b/games/candyshopper.js @@ -1,7 +1,7 @@ /* @title: candyshopper @author: ayaangrover -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-07-19 */ diff --git a/games/cat_in_rain.js b/games/cat_in_rain.js index cf3063ddc8..c00b19bf54 100644 --- a/games/cat_in_rain.js +++ b/games/cat_in_rain.js @@ -2,13 +2,12 @@ /* @title: cat_in_rain @author: alxndriab -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-11-17 */ /* @title cat_in_rain -@author: alex b inspration from dodge_the_fireball by sam liu */ diff --git a/games/catch_orpheus.js b/games/catch_orpheus.js index ba8921f2b4..c79b77c6cf 100644 --- a/games/catch_orpheus.js +++ b/games/catch_orpheus.js @@ -1,8 +1,8 @@ /* @title: catch_orpheus -@tags: ['catch'] -@addedOn: 2022-10-08 @author: sampoder +@tags: [] +@addedOn: 2022-10-08 Instructions diff --git a/games/catching_game.js b/games/catching_game.js index d21cbb999f..4caf568d64 100644 --- a/games/catching_game.js +++ b/games/catching_game.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Catching game -@author: Swastik Bajpai +@author: Swastik Bajpai @tags: [] @addedOn: 2024-06-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/cave_explorer.js b/games/cave_explorer.js index 447c562d31..05aae4db30 100644 --- a/games/cave_explorer.js +++ b/games/cave_explorer.js @@ -1,8 +1,8 @@ /* @title: cave_explorer +@author: Sid Khare @tags: ['strategy'] @addedOn: 2022-11-12 -@author: Sid Khare Instructions: diff --git a/games/celeste.js b/games/celeste.js index 6d4efdb482..ba105352a0 100644 --- a/games/celeste.js +++ b/games/celeste.js @@ -1,11 +1,11 @@ /* -Celeste: Sprig Editon is directly inspired by https://celestegame.com and is a version made especially for the Sprig! - @title: Celeste: Sprig Edition @author: DillonB07 -@tags: ["platformer"] -@img: "" +@tags: ['platformer'] @addedOn: 2024-06-14 +Celeste: Sprig Editon is directly inspired by https://celestegame.com and is a version made especially for the Sprig! + +@img: "" */ const strawberry = "a" diff --git a/games/charge.js b/games/charge.js index 1afe861e2f..b02a182e82 100644 --- a/games/charge.js +++ b/games/charge.js @@ -1,8 +1,8 @@ /* @title: charge -@tags: ['choice'] -@addedOn: 2022-12-23 @author: ZeroQLi +@tags: [] +@addedOn: 2022-12-23 */ let easy = true; /* diff --git a/games/chase_bob.js b/games/chase_bob.js index 3f09c369c0..5f48d9578e 100644 --- a/games/chase_bob.js +++ b/games/chase_bob.js @@ -1,8 +1,8 @@ /* @title: chase_bob +@author: garfieldfatcat3pack @tags: [] @addedOn: 2023-04-01 -@author: garfieldfatcat3pack */ const player = "p"; diff --git a/games/chess.js b/games/chess.js index 0e3b6241aa..fc14fc46b5 100644 --- a/games/chess.js +++ b/games/chess.js @@ -1,8 +1,8 @@ /* @title: Chess -@tags: ['multiplayer', 'classic'] -@addedOn: 2022-10-31 @author: Thomas Stubblefield +@tags: ['multiplayer','retro'] +@addedOn: 2022-10-31 Controls: Use WASD to move your cursor, J to pick up a piece, and K to place it. Additionally, you can use L to drop a piece (or deselect) diff --git a/games/chess_puzzle_knight.js b/games/chess_puzzle_knight.js index 5279d4db88..aba459d899 100644 --- a/games/chess_puzzle_knight.js +++ b/games/chess_puzzle_knight.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Chess Puzzle @author: Silver Canvas @tags: [] @addedOn: 2024-06-25 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const rook = "r" diff --git a/games/chrome_dino_game.js b/games/chrome_dino_game.js index 1430a74378..46f3ddf117 100644 --- a/games/chrome_dino_game.js +++ b/games/chrome_dino_game.js @@ -1,7 +1,7 @@ /* @title: Chrome Dinosaur Game @author: @blazecoding.xyz -@tags: ['classic', 'endless'] +@tags: ['endless','retro'] @addedOn: 2024-07-27 */ diff --git a/games/chuckman_go.js b/games/chuckman_go.js index 6484e3c861..36c4023954 100644 --- a/games/chuckman_go.js +++ b/games/chuckman_go.js @@ -1,8 +1,8 @@ /* @title: chuckman_go +@author: faisalsayed10 @tags: ['strategy'] @addedOn: 2022-11-17 -@author: faisalsayed10 */ let gameover = false; diff --git a/games/circuit-breaker.js b/games/circuit-breaker.js index 50f10d86c8..eda37cef9c 100644 --- a/games/circuit-breaker.js +++ b/games/circuit-breaker.js @@ -1,7 +1,7 @@ /* @title: Circuit Breaker @author: Stefan D -@tags: ["maze", "wire"] +@tags: ['puzzle'] @addedOn: 2024-08-18 */ diff --git a/games/classicpongX2.js b/games/classicpongX2.js new file mode 100644 index 0000000000..69b39b04c5 --- /dev/null +++ b/games/classicpongX2.js @@ -0,0 +1,400 @@ +/* +@title: Classic Pong +@author: AVSC2-ops +@tags: [] +@addedOn: 2024-09-16 +*/ + +var DIRECTION = { + IDLE: 0, + UP: 1, + DOWN: 2, + LEFT: 3, + RIGHT: 4 +}; + +var rounds = [5, 5, 3, 3, 2]; +var colors = ['#1abc9c', '#2ecc71', '#3498db', '#e74c3c', '#9b59b6']; +var powerUpColors = ['#ff6347', '#ffeb3b', '#4caf50', '#2196f3']; // Colors for different power-ups + +// The ball object (The cube that bounces back and forth) +var Ball = { + new: function(incrementedSpeed) { + return { + width: 20, + height: 20, + x: (this.canvas.width / 2) - 10, + y: (this.canvas.height / 2) - 10, + moveX: DIRECTION.IDLE, + moveY: DIRECTION.IDLE, + speed: incrementedSpeed || 4.5, // Initial speed is now half (4.5) + multiplyCount: 0, // Count for ball multiplying + isSticky: false, // Flag for sticky ball + stickyDuration: 1 // Timer for sticky ball effect + }; + } +}; + +// The paddle object (The two lines that move up and down) +var Paddle = { + new: function(side) { + return { + width: 15, + height: 80, + x: side === 'left' ? 100 : this.canvas.width - 100, + y: (this.canvas.height / 2) - 40, + score: 0, + move: DIRECTION.IDLE, + speed: 12, + originalSpeed: 12, // Save the original speed to reset after power-up + isGhost: false, // Flag for ghost paddle + ghostDuration: 1 // Timer for ghost paddle effect + }; + } +}; + +// Power-up object +var PowerUp = { + new: function() { + return { + x: Math.random() * (this.canvas.width - 20), + y: Math.random() * (this.canvas.height - 20), + width: 20, + height: 20, + type: ['speed', 'size', 'slow', 'multiply', 'sticky', 'ghost'][Math.floor(Math.random() * 6)], // Random type + color: powerUpColors[Math.floor(Math.random() * powerUpColors.length)] + }; + } +}; + +var Game = { + initialize: function() { + this.canvas = document.querySelector('canvas'); + this.context = this.canvas.getContext('2d'); + + this.canvas.width = 1200; + this.canvas.height = 800; + this.canvas.style.width = (this.canvas.width / 2) + 'px'; + this.canvas.style.height = (this.canvas.height / 2) + 'px'; + + this.player = Paddle.new.call(this, 'left'); + this.paddle = Paddle.new.call(this, 'right'); + this.balls = [Ball.new.call(this)]; // Start with a single ball + + this.paddle.speed = 10; + this.running = this.over = false; + this.turn = this.paddle; + this.timer = this.round = 0; + this.color = '#000000'; // Black background + + this.powerUps = []; + this.spawnPowerUpInterval = setInterval(this.spawnPowerUp.bind(this), 3000); // Spawn power-ups every 3 seconds + + this.menu(); + this.listen(); + }, + + endGameMenu: function(text) { + this.context.font = '50px Courier New'; + this.context.fillStyle = this.color; + this.context.fillRect( + this.canvas.width / 2 - 350, + this.canvas.height / 2 - 48, + 700, + 100 + ); + this.context.fillStyle = '#ffffff'; + this.context.fillText(text, + this.canvas.width / 2, + this.canvas.height / 2 + 15 + ); + setTimeout(function() { + Pong = Object.assign({}, Game); + Pong.initialize(); + }, 3000); + }, + + menu: function() { + this.draw(); + this.context.font = '50px Courier New'; + this.context.fillStyle = this.color; + this.context.fillRect( + this.canvas.width / 2 - 350, + this.canvas.height / 2 - 48, + 700, + 100 + ); + this.context.fillStyle = '#ffffff'; + this.context.fillText('Press any key to begin ~ AVSC', + this.canvas.width / 2, + this.canvas.height / 2 + 15 + ); + }, + + update: function() { + if (!this.over) { + // Ball movement and collisions + for (let i = this.balls.length - 1; i >= 0; i--) { + let ball = this.balls[i]; + if (ball.x <= 0) this._resetTurn.call(this, this.paddle, this.player); + if (ball.x >= this.canvas.width - ball.width) this._resetTurn.call(this, this.player, this.paddle); + if (ball.y <= 0) ball.moveY = DIRECTION.DOWN; + if (ball.y >= this.canvas.height - ball.height) ball.moveY = DIRECTION.UP; + + if (ball.moveY === DIRECTION.UP) ball.y -= (ball.speed / 1.5); + else if (ball.moveY === DIRECTION.DOWN) ball.y += (ball.speed / 1.5); + if (ball.moveX === DIRECTION.LEFT) ball.x -= ball.speed; + else if (ball.moveX === DIRECTION.RIGHT) ball.x += ball.speed; + + // Paddle collisions + if (ball.x - ball.width <= this.player.x && ball.x >= this.player.x - this.player.width) { + if (ball.y <= this.player.y + this.player.height && ball.y + ball.height >= this.player.y) { + ball.x = (this.player.x + ball.width); + ball.moveX = DIRECTION.RIGHT; + + // Apply sticky ball effect + if (ball.isSticky) { + this.player.x = ball.x - ball.width; // Stick to paddle + this.player.speed = 0; // Stop paddle movement + } + } + } + + if (ball.x - ball.width <= this.paddle.x && ball.x >= this.paddle.x - this.paddle.width) { + if (ball.y <= this.paddle.y + this.paddle.height && ball.y + ball.height >= this.paddle.y) { + ball.x = (this.paddle.x - ball.width); + ball.moveX = DIRECTION.LEFT; + + // Apply sticky ball effect + if (ball.isSticky) { + this.paddle.x = ball.x + ball.width; // Stick to paddle + this.paddle.speed = 0; // Stop paddle movement + } + } + } + + // Power-up collisions + for (var j = this.powerUps.length - 1; j >= 0; j--) { + let powerUp = this.powerUps[j]; + if (ball.x <= powerUp.x + powerUp.width && + ball.x + ball.width >= powerUp.x && + ball.y <= powerUp.y + powerUp.height && + ball.y + ball.height >= powerUp.y) { + this._applyPowerUp(powerUp, ball); + this.powerUps.splice(j, 1); // Remove the power-up after applying it + } + } + } + + // Paddle movement + if (this.player.move === DIRECTION.UP) this.player.y -= this.player.speed; + else if (this.player.move === DIRECTION.DOWN) this.player.y += this.player.speed; + + if (this.paddle.move === DIRECTION.UP) this.paddle.y -= this.paddle.speed; + else if (this.paddle.move === DIRECTION.DOWN) this.paddle.y += this.paddle.speed; + + if (this.player.y <= 0) this.player.y = 0; + else if (this.player.y >= (this.canvas.height - this.player.height)) this.player.y = (this.canvas.height - this.player.height); + + if (this.paddle.y <= 0) this.paddle.y = 0; + else if (this.paddle.y >= (this.canvas.height - this.paddle.height)) this.paddle.y = (this.canvas.height - this.paddle.height); + + // Ball direction change after delay + if (this._turnDelayIsOver.call(this) && this.turn) { + this.balls[0].moveX = this.turn === this.player ? DIRECTION.LEFT : DIRECTION.RIGHT; + this.balls[0].moveY = [DIRECTION.UP, DIRECTION.DOWN][Math.round(Math.random())]; + this.balls[0].y = Math.floor(Math.random() * this.canvas.height - 200) + 200; + this.turn = null; + } + + // Paddle AI (Move toward ball) + if (this.paddle.y > this.balls[0].y - (this.paddle.height / 2)) { + if (this.balls[0].moveX === DIRECTION.RIGHT) this.paddle.y -= this.paddle.speed / 1.5; + else this.paddle.y -= this.paddle.speed / 4; + } + if (this.paddle.y < this.balls[0].y - (this.paddle.height / 2)) { + if (this.balls[0].moveX === DIRECTION.RIGHT) this.paddle.y += this.paddle.speed / 1.5; + else this.paddle.y += this.paddle.speed / 4; + } + + // Update sticky ball duration + for (let i = 0; i < this.balls.length; i++) { + let ball = this.balls[i]; + if (ball.isSticky) { + ball.stickyDuration++; + if (ball.stickyDuration > 100) { // Sticky effect lasts 100 frames (approx. 2 seconds) + ball.isSticky = false; + this.player.speed = this.player.originalSpeed; // Restore paddle speed + this.paddle.speed = this.paddle.originalSpeed; // Restore paddle speed + } + } + } + + // Update ghost paddle duration + if (this.player.isGhost) { + this.player.ghostDuration++; + if (this.player.ghostDuration > 100) { + this.player.isGhost = false; + } + } + if (this.paddle.isGhost) { + this.paddle.ghostDuration++; + if (this.paddle.ghostDuration > 100) { + this.paddle.isGhost = false; + } + } + + // Check for win conditions + if (this.player.score === rounds[this.round]) { + if (!rounds[this.round + 1]) { + this.over = true; + setTimeout(function() { Pong.endGameMenu('Winner!'); }, 1000); + } else { + this.color = this._generateRoundColor(); + this.player.score = this.paddle.score = 0; + this.player.speed = this.player.originalSpeed; // Reset to original speed + this.paddle.speed = this.paddle.originalSpeed; // Reset to original speed + this.balls = [Ball.new.call(this, this.balls[0].speed)]; // Reset ball to single + this.round += 1; + this.spawnPowerUp(); // Spawn a new power-up each round + } + } else if (this.paddle.score === rounds[this.round]) { + this.over = true; + setTimeout(function() { Pong.endGameMenu('Game Over!'); }, 1000); + } + } + }, + + draw: function() { + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + + // Black background + this.context.fillStyle = this.color; + this.context.fillRect(0, 0, this.canvas.width, this.canvas.height); + + // Draw elements in white + this.context.fillStyle = '#ffffff'; + this.context.fillRect(this.player.x, this.player.y, this.player.width, this.player.height); + this.context.fillRect(this.paddle.x, this.paddle.y, this.paddle.width, this.paddle.height); + for (let i = 0; i < this.balls.length; i++) { + let ball = this.balls[i]; + this.context.fillRect(ball.x, ball.y, ball.width, ball.height); + } + + // Draw net (white on black background) + this.context.beginPath(); + this.context.setLineDash([7, 15]); + this.context.moveTo((this.canvas.width / 2), this.canvas.height - 140); + this.context.lineTo((this.canvas.width / 2), 140); + this.context.lineWidth = 10; + this.context.strokeStyle = '#ffffff'; + this.context.stroke(); + + // Draw scores + this.context.font = '100px Courier New'; + this.context.textAlign = 'center'; + this.context.fillText(this.player.score.toString(), (this.canvas.width / 2) - 300, 200); + this.context.fillText(this.paddle.score.toString(), (this.canvas.width / 2) + 300, 200); + + // Draw round info + this.context.font = '30px Courier New'; + this.context.fillText('Round ' + (this.round + 1), (this.canvas.width / 2), 35); + + this.context.font = '40px Courier'; + this.context.fillText(rounds[this.round] ? rounds[this.round] : rounds[this.round - 1], (this.canvas.width / 2), 100); + + // Draw power-ups (with their original colors) + for (var i = 0; i < this.powerUps.length; i++) { + var powerUp = this.powerUps[i]; + this.context.fillStyle = powerUp.color; + this.context.fillRect(powerUp.x, powerUp.y, powerUp.width, powerUp.height); + } + }, + + loop: function() { + Pong.update(); + Pong.draw(); + if (!Pong.over) requestAnimationFrame(Pong.loop); + }, + + listen: function() { + document.addEventListener('keydown', function(key) { + if (Pong.running === false) { + Pong.running = true; + window.requestAnimationFrame(Pong.loop); + } + if (key.keyCode === 38) Pong.paddle.move = DIRECTION.UP; // ArrowUp for right paddle + if (key.keyCode === 40) Pong.paddle.move = DIRECTION.DOWN; // ArrowDown for right paddle + if (key.keyCode === 87) Pong.player.move = DIRECTION.UP; // W for left paddle + if (key.keyCode === 83) Pong.player.move = DIRECTION.DOWN; // S for left paddle + }); + document.addEventListener('keyup', function(key) { + if (key.keyCode === 38 || key.keyCode === 40) Pong.paddle.move = DIRECTION.IDLE; // ArrowUp/Down + if (key.keyCode === 87 || key.keyCode === 83) Pong.player.move = DIRECTION.IDLE; // W/S + }); + }, + + _resetTurn: function(victor, loser) { + this.balls = [Ball.new.call(this, this.balls[0].speed)]; // Reset ball to single + this.turn = loser; + this.timer = (new Date()).getTime(); + victor.score++; + }, + + _turnDelayIsOver: function() { + return ((new Date()).getTime() - this.timer >= 1000); + }, + + _generateRoundColor: function() { + var newColor = colors[Math.floor(Math.random() * colors.length)]; + if (newColor === this.color) return this._generateRoundColor(); + return newColor; + }, + + _applyPowerUp: function(powerUp, ball) { + switch (powerUp.type) { + case 'speed': + ball.speed += 3; + break; + case 'size': + if (Math.random() > 0.5) { + this.player.height += 20; // Increase player paddle size + } else { + this.paddle.height += 20; // Increase opponent paddle size + } + break; + case 'slow': + this.paddle.speed = Math.max(this.paddle.originalSpeed / 2, 1); // Slow down opponent paddle + setTimeout(() => { + this.paddle.speed = this.paddle.originalSpeed; // Reset paddle speed after 5 seconds + }, 5000); + break; + case 'multiply': + if (ball.multiplyCount < 3) { // Multiply only up to 3 times + this.balls.push(Ball.new.call(this, ball.speed)); + ball.multiplyCount++; + } + break; + case 'sticky': + ball.isSticky = true; + ball.stickyDuration = 0; // Reset sticky duration + break; + case 'ghost': + if (Math.random() > 0.5) { + this.player.isGhost = true; + this.player.ghostDuration = 0; // Reset ghost duration + } else { + this.paddle.isGhost = true; + this.paddle.ghostDuration = 0; // Reset ghost duration + } + break; + } + }, + + spawnPowerUp: function() { + this.powerUps.push(PowerUp.new.call(this)); + } +}; + +var Pong = Object.assign({}, Game); +Pong.initialize(); diff --git a/games/codekuun.js b/games/codekuun.js new file mode 100644 index 0000000000..6e68a47f9d --- /dev/null +++ b/games/codekuun.js @@ -0,0 +1,1245 @@ +/* +@title: codekuun +@author: Jomar Milan +@tags: ['puzzle'] +@addedOn: 2024-09-16 +*/ + +const bitmaps = { + controllableUp: { + key: '~', + sprite: bitmap` +.....0....0..... +....00000000.... +...0222222220... +...0222222220... +..002222222200.. +...0000000000... +.00.02222220.... +0200022222200... +0200222222220... +.000222222220... +.000222222220... +...0022222200... +....02222220.... +.....000000..... +......0..0...... +......0..0......` + }, + controllableDown: { + key: '1', + sprite: bitmap` +.....0....0..... +....00000000.... +...0022002200... +...0020000200... +..002222222200.. +...0000000000... +....02222220.00. +...0022222200020 +...0222222220020 +...022222222000. +...022222222000. +...0022222200... +....02222220.... +.....000000..... +......0..0...... +......0..0......` + }, + controllableLeft: { + key: '2', + sprite: bitmap` +........0....... +......00000..... +.....0220000.... +.....0020000.... +.....0222220.... +.....0000000.... +....002222200... +....022222220.00 +....022222220020 +....022222220020 +....022222220020 +....02222222000. +....002222200... +.....0000000.... +.......0.0...... +.......0.0......` + }, + controllableRight: { + key: '3', + sprite: bitmap` +.......0........ +.....00000...... +....0000220..... +....0000200..... +....0222220..... +....0000000..... +...002222200.... +00.022222220.... +020022222220.... +020022222220.... +020022222220.... +.00022222220.... +...002222200.... +....0000000..... +......0.0....... +......0.0.......` + }, + commandMove: { + key: '6', + sprite: bitmap` +.22222222222222. +2277777777777722 +2777777777777772 +2777777777777772 +2777777755777772 +2777777775577772 +2777777775557772 +2775555555555772 +2775555555555772 +2777777775557772 +2777777775577772 +2777777755777772 +2777777777777772 +2777777777777772 +2277777777777722 +.22222222222222.` + }, + commandMoveSelected: { + key: '9', + sprite: bitmap` +.66666666666666. +6677777777777766 +6777777777777776 +6777777777777776 +6777777755777776 +6777777775577776 +6777777775557776 +6775555555555776 +6775555555555776 +6777777775557776 +6777777775577776 +6777777755777776 +6777777777777776 +6777777777777776 +6677777777777766 +.66666666666666.` + }, + commandEmpty: { + key: '7', + sprite: bitmap` +.22222222222222. +2200000000000022 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2000000000000002 +2200000000000022 +.22222222222222.` + }, + commandErase: { + key: '0', + sprite: bitmap` +.22222222222222. +2200000000000022 +2000000000000002 +20000LLLLLL00002 +2000LLLLLLLL0002 +2000011111100002 +2000010110100002 +2000011001100002 +2000011001100002 +2000010110100002 +2000011111100002 +2000011111100002 +2000000000000002 +2000000000000002 +2200000000000022 +.22222222222222.` + }, + commandEraseSelected: { + key: '-', + sprite: bitmap` +.66666666666666. +6600000000000066 +6000000000000006 +60000LLLLLL00006 +6000LLLLLLLL0006 +6000011111100006 +6000010110100006 +6000011001100006 +6000011001100006 +6000010110100006 +6000011111100006 +6000011111100006 +6000000000000006 +6000000000000006 +6600000000000066 +.66666666666666.` + }, + commandRun: { + key: '=', + sprite: bitmap` +.22222222222222. +2244444444444422 +2444444444444442 +2444444444444442 +2444442444444442 +2444442244444442 +2444442224444442 +2444442222444442 +2444442222444442 +2444442224444442 +2444442244444442 +2444442444444442 +2444444444444442 +2444444444444442 +2244444444444422 +.22222222222222.` + }, + commandRunSelected: { + key: 'q', + sprite: bitmap` +.66666666666666. +6644444444444466 +6444444444444446 +6444444444444446 +6444442444444446 +6444442244444446 +6444442224444446 +6444442222444446 +6444442222444446 +6444442224444446 +6444442244444446 +6444442444444446 +6444444444444446 +6444444444444446 +6644444444444466 +.66666666666666.` + }, + commandTurnRight: { + key: 'e', + sprite: bitmap` +.22222222222222. +2244444444444422 +2444444442444442 +2444444444244442 +2444422222224442 +2444244444244442 +2442444442444442 +2442444444444442 +2442444444444442 +2442444444444442 +2442444444444442 +2442444444444442 +2444444444444442 +2444444444444442 +2244444444444422 +.22222222222222.` + }, + commandTurnRightSelected: { + key: 'r', + sprite: bitmap` +.66666666666666. +6644444444444466 +6444444442444446 +6444444444244446 +6444422222224446 +6444244444244446 +6442444442444446 +6442444444444446 +6442444444444446 +6442444444444446 +6442444444444446 +6442444444444446 +6444444444444446 +6444444444444446 +6644444444444466 +.66666666666666.` + }, + commandLoop: { + key: 'y', + sprite: bitmap` +.22222222222222. +22HHHHHHHHHHHH22 +2HH0000000000HH2 +2H0HHHHHHHHH0HH2 +2H0HHHHHHH000002 +2H0HHHHHHHH000H2 +2H0HHHHHHHHH0HH2 +2H0HHHHHHHHHHHH2 +2H0HHHHHHHHHHHH2 +2H0HHHHHHHHHHHH2 +2H0HHHHHHHHHHHH2 +2H0HHHHHHHHHHHH2 +2H0HHHHHHHHHHHH2 +2HH0000000000HH2 +22HHHHHHHHHHHH22 +.22222222222222.` + }, + commandLoopSelected: { + key: 'u', + sprite: bitmap` +.66666666666666. +66HHHHHHHHHHHH66 +6HH0000000000HH6 +6H0HHHHHHHHH0HH6 +6H0HHHHHHH000006 +6H0HHHHHHHH000H6 +6H0HHHHHHHHH0HH6 +6H0HHHHHHHHHHHH6 +6H0HHHHHHHHHHHH6 +6H0HHHHHHHHHHHH6 +6H0HHHHHHHHHHHH6 +6H0HHHHHHHHHHHH6 +6H0HHHHHHHHHHHH6 +6HH0000000000HH6 +66HHHHHHHHHHHH66 +.66666666666666.` + }, + commandLoopEnd: { + key: 'i', + sprite: bitmap` +.22222222222222. +22HHHHHHHHHHHH22 +2HHHHH00HHHHHHH2 +2HHHHHH00HHHHHH2 +2HHHHHH00HHHHHH2 +2HHHHHH00HHHHHH2 +2HHHHHH00HHHHHH2 +2HHHHHHH00HHHHH2 +2HHHHHHH00HHHHH2 +2HHHHHH00HHHHHH2 +2HHHHHH00HHHHHH2 +2HHHHHH00HHHHHH2 +2HHHHHH00HHHHHH2 +2HHHHH00HHHHHHH2 +22HHHHHHHHHHHH22 +.22222222222222.` + }, + commandLoopEndSelected: { + key: 'o', + sprite: bitmap` +.66666666666666. +66HHHHHHHHHHHH66 +6HHHHH00HHHHHHH6 +6HHHHHH00HHHHHH6 +6HHHHHH00HHHHHH6 +6HHHHHH00HHHHHH6 +6HHHHHH00HHHHHH6 +6HHHHHHH00HHHHH6 +6HHHHHHH00HHHHH6 +6HHHHHH00HHHHHH6 +6HHHHHH00HHHHHH6 +6HHHHHH00HHHHHH6 +6HHHHHH00HHHHHH6 +6HHHHH00HHHHHHH6 +66HHHHHHHHHHHH66 +.66666666666666.` + }, + barrier: { + key: '8', + sprite: bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................` + }, + scrapCode: { + key: 'w', + sprite: bitmap` +................ +.00000000000000. +.00000000000000. +.00000000000000. +.0D000000000000. +.00D00000000000. +.000D0000000000. +.0000D000000000. +.000D0000000000. +.00D00000000000. +.0D0000D0D0D0D0. +.00000000000000. +.00000000000000. +.00000000000000. +.00000000000000. +................` + }, + floor: { + key: '5', + sprite: bitmap` +LLLLLLLLLLLLLLLL +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +L11111111111111L +LLLLLLLLLLLLLLLL` + }, + nest1: { + key: 'p', + sprite: bitmap` +..........C.C.C. +.........C.CCCCC +........C.CLLLLL +......C..CLCCCCC +.....C.CCLLCCCCC +....C.CLLCCCCCCC +...C.CLCCCCCCCCC +..C.CLCCCCCCCCCC +...CCLCCCCCCCCCC +.CCLLCCCCCCCCCCC +..CLCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC` + }, + nest2: { + key: '[', + sprite: bitmap` +C.C.C.C.C.C.C.C. +CCCCCCCCCCCCCCCC +LLLLLLLLLLLLLLLL +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC` + }, + nest3: { + key: ']', + sprite: bitmap` +C.C.C........... +CCCCC.C......... +LLLLLCC.C....... +CCCCCLLC.C...... +CCCCCCLCC.C..... +CCCCCCCLLC.C.... +CCCCCCCCCLC.C... +CCCCCCCCCCLC.... +CCCCCCCCCCLC.C.. +CCCCCCCCCCCLC.C. +CCCCCCCCCCCLLC.C +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC.` + }, + nest4: { + key: 'a', + sprite: bitmap` +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC` + }, + nest5: { + key: 's', + sprite: bitmap` +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC` + }, + nest6: { + key: 'd', + sprite: bitmap` +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC` + }, + nest7: { + key: 'f', + sprite: bitmap` +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +.CLCCCCCCCCCCCCC +CCLCCCCCCCCCCCCC +..CLCCCCCCCCCCCC +.CCLLCCCCCCCCCCC +...CCLCCCCCCCCCC +..C.CLCCCCCCCCCC +...C.CLCCCCCCCCC +....C.CLLCCCCCCC +.....C.CCLLCCCCC +......C..CLCCCCC +........C.CLLLLL +.........C.CCCCC +..........C.C.C.` + }, + nest8: { + key: 'g', + sprite: bitmap` +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +LLLLLLLLLLLLLLLL +CCCCCCCCCCCCCCCC +C.C.C.C.C.C.C.C.` + }, + nest9: { + key: 'h', + sprite: bitmap` +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCCLC. +CCCCCCCCCCCCCLCC +CCCCCCCCCCCCLC.. +CCCCCCCCCCCLLCC. +CCCCCCCCCCLCC... +CCCCCCCCCCLC.C.. +CCCCCCCCCLC.C... +CCCCCCCLLC.C.... +CCCCCLLCC.C..... +CCCCCLC..C...... +LLLLLC.C........ +CCCCC.C......... +.C.C.C..........` + } +}; + +const tunes = { + select: tune` +272.72727272727275: E5/272.72727272727275, +8454.545454545456`, + confirm: tune` +500: A5-500, +15500`, + collect: tune` +82.1917808219178: F5/82.1917808219178, +82.1917808219178: F5/82.1917808219178, +82.1917808219178: A5/82.1917808219178, +82.1917808219178: A5/82.1917808219178, +82.1917808219178: A5/82.1917808219178, +2219.1780821917805`, + victory: tune` +333.3333333333333: F5-333.3333333333333, +333.3333333333333: F5-333.3333333333333, +333.3333333333333: F5-333.3333333333333, +333.3333333333333: C5-333.3333333333333, +333.3333333333333: C5-333.3333333333333, +333.3333333333333: C5-333.3333333333333, +333.3333333333333: F5-333.3333333333333, +333.3333333333333: C5-333.3333333333333, +333.3333333333333: F5-333.3333333333333, +333.3333333333333: G5-333.3333333333333, +333.3333333333333: F5-333.3333333333333, +333.3333333333333, +333.3333333333333: C5-333.3333333333333, +6333.333333333333` +}; + +const inputs = { + menuLeft: 'a', + menuRight: 'd', + menuConfirm: 'k', + valueUp: 'w', + valueDown: 's' +}; + +class Text { + static #instances = []; + + #text; + #x; + #y; + #color; + + get text() { return this.#text; } + set text(val) { + this.#text = val; + Text.#updateText(); + } + get x() { return this.#x; } + set x(val) { + this.#x = val; + Text.#updateText(); + } + get y() { return this.#y; } + set y(val) { + this.#y = val; + Text.#updateText(); + } + get color() { return this.#color; } + set color(val) { + this.#color = val; + Text.#updateText(); + } + + constructor(text, x, y, color) { + this.#text = text; + this.#x = x; + this.#y = y; + this.#color = color; + + Text.#instances.push(this); + Text.#updateText(); + } + + remove() { + Text.#instances.splice(Text.#instances.indexOf(this), 1); + + Text.#updateText(); + } + + static #updateText() { + clearText(); + + Text.#instances.forEach((text) => { + addText(text.text, { + x: text.x, + y: text.y, + color: text.color + }); + }); + } +} + +class GameObject { + static sprites = {}; + static solid = false; + + static #solidSprites = [ bitmaps.barrier.key ]; + static #objects = []; + + get x() { return this.#sprigSprite.x; } + set x(val) { this.#sprigSprite.x = val; } + get y() { return this.#sprigSprite.y; } + set y(val) { this.#sprigSprite.y = val; } + get sprite() { return this.#sprigSprite.type; } + set sprite(val) { + if (this.sprite === val) return; + + const x = this.x; + const y = this.y; + + this.#sprigSprite.remove(); + + addSprite(0, 0, val); + this.#sprigSprite = getTile(0, 0)[0]; + this.x = x; + this.y = y; + } + + #sprigSprite; + + constructor(x, y, initialSprite) { + // 0, 0 is the 'magic' tile where objects are initialized. Don't put anything + // here! + addSprite(0, 0, initialSprite); + this.#sprigSprite = getTile(0, 0)[0]; + this.x = x; + this.y = y; + + GameObject.#objects.push(this); + } + + static register(obj) { + if (obj.solid) { + for (const spr in obj.sprites) { + GameObject.#solidSprites.push(obj.sprites[spr]); + } + setSolids(this.#solidSprites); + }; + } + + static getObjectsOfType(type) { + return GameObject.#objects.filter((obj) => obj instanceof type); + } + + static step() { + GameObject.#objects.forEach((obj) => obj.onStep()); + } + + onStep() { + GameObject.#objects.forEach((obj) => { + if (obj !== this && obj.x === this.x && obj.y === this.y) { + this.onOverlap(obj); + } + }); + } + + onOverlap(other) {} + + remove() { + // Maybe keep track if removed, and prevent operations on object if so? + this.#sprigSprite.remove(); + + GameObject.#objects.splice(GameObject.#objects.indexOf(this), 1); + } +} + +class Controllable extends GameObject { + static sprites = { + up: bitmaps.controllableUp.key, + down: bitmaps.controllableDown.key, + left: bitmaps.controllableLeft.key, + right: bitmaps.controllableRight.key + }; + static solid = true; + static { + GameObject.register(Controllable); + } + + #direction; + get direction() { return this.#direction; } + set direction(val) { + this.#direction = val; + this.sprite = Controllable.sprites[val]; + } + + constructor(x, y, dir) { + let sprite = Controllable.sprites[dir]; + + super(x, y, sprite); + + this.#direction = dir; + } + + move(direction) { + if (direction === 'up' && this.y > 1) { + this.y -= 1; + } else if (direction === 'down' && this.y < height() - 2) { + this.y += 1; + } else if (direction === 'left') { + this.x -= 1; + } else if (direction === 'right') { + this.x += 1; + } + } + + turn(direction) { + // right turns in the clockwise direction, left turns counterclockwise + switch (this.direction) { + case 'up': + if (direction === 'right') this.direction = 'right'; + if (direction === 'left') this.direction = 'left'; + break; + case 'down': + if (direction === 'right') this.direction = 'left'; + if (direction === 'left') this.direction = 'right'; + break; + case 'left': + if (direction === 'right') this.direction = 'up'; + if (direction === 'left') this.direction = 'down'; + break; + case 'right': + if (direction === 'right') this.direction = 'down'; + if (direction === 'left') this.direction = 'up'; + break; + } + } +} + +class Command extends GameObject { + static sprites = { + empty: bitmaps.commandEmpty.key, + move: bitmaps.commandMove.key, + moveSelected: bitmaps.commandMoveSelected.key, + erase: bitmaps.commandErase.key, + eraseSelected: bitmaps.commandEraseSelected.key, + run: bitmaps.commandRun.key, + runSelected: bitmaps.commandRunSelected.key, + turnRight: bitmaps.commandTurnRight.key, + turnRightSelected: bitmaps.commandTurnRightSelected.key, + loop: bitmaps.commandLoop.key, + loopSelected: bitmaps.commandLoopSelected.key, + loopEnd: bitmaps.commandLoopEnd.key, + loopEndSelected: bitmaps.commandLoopEndSelected.key + }; + static solid = false; + static { + GameObject.register(Command); + } + + static commandTypes = { + empty: { + default: Command.sprites.empty, + selected: null + }, + move: { + default: Command.sprites.move, + selected: Command.sprites.moveSelected + }, + erase: { + default: Command.sprites.erase, + selected: Command.sprites.eraseSelected + }, + run: { + default: Command.sprites.run, + selected: Command.sprites.runSelected + }, + turnRight: { + default: Command.sprites.turnRight, + selected: Command.sprites.turnRightSelected + }, + loop: { + default: Command.sprites.loop, + selected: Command.sprites.loopSelected + }, + loopEnd: { + default: Command.sprites.loopEnd, + selected: Command.sprites.loopEndSelected + } + }; + + value = 0; + + #type = ''; + #selected = false; + #valueText; + + get type() { return this.#type; } + set type(val) { + this.#type = val; + this.#updateSprite(); + } + get selected() { return this.#selected; } + set selected(val) { + this.#selected = val; + this.#updateSprite(); + } + + constructor(x, y, type, selected) { + super(x, y, selected ? type.selected : type.default); + + this.#type = type; + this.#selected = selected; + + this.#updateSprite(); + } + + execute() { + // Maybe define behavior in command type object? + switch (this.#type) { + case Command.commandTypes.move: + GameObject.getObjectsOfType(Controllable).forEach((controllable) => controllable.move(controllable.direction)); + break; + case Command.commandTypes.turnRight: + GameObject.getObjectsOfType(Controllable).forEach((controllable) => controllable.turn('right')); + break; + default: + break; + } + } + + incrementValue() { + if (this.#type !== Command.commandTypes.loop) return false; + if (this.value >= 9) return false; + + this.value++; + this.#updateSprite(); + return true; + } + + decrementValue() { + if (this.#type !== Command.commandTypes.loop) return false; + if (this.value <= 0) return false; + + this.value--; + this.#updateSprite(); + return true; + } + + #updateSprite() { + this.sprite = this.#selected ? this.#type.selected : this.#type.default; + + if (this.#type === Command.commandTypes.loop) { + if (!this.#valueText) { + // In a 10x8 map, a tile can fit 2 characters of text horizontally and + // vertically; thus, the text is in a grid aligned to that of the map + // with double the size. Thus it is necessary for the map size to be + // 10x8 -- at least when this technique is in use. + this.#valueText = new Text(this.value.toString(), (this.x * 2) + 1, (this.y * 2) + 1, color`6`); + } else { + this.#valueText.text = this.value.toString(); + } + } else { + if (this.#valueText) { + this.#valueText.remove(); + this.#valueText = null; + } + } + } +} + +class Scrap extends GameObject { + static sprites = { + code: bitmaps.scrapCode.key + }; + static solid = false; + static { + GameObject.register(Scrap); + } + + constructor(x, y) { + /* + const sprite = Math.floor(Math.random() * 2); + super(x, y, sprite === 1 ? Scrap.sprites.code + */ + + super(x, y, Scrap.sprites.code); + } + + onOverlap(other) { + playTune(tunes.collect); + + if (other instanceof Controllable) this.remove(); + } +} + +// Map size is 10x8 so the map fits the 160x128 screen. In keeping the map size +// consistent across all levels, the 'hud' elements such as the commands and the +// command palette do not change size nor position, so the map change won't be +// as jarring. +const levels = [ + { + onLoad(ephemeralObjects, ephemeralText) { + ephemeralObjects.push(new Controllable(3, 2, 'right')); + ephemeralObjects.push(new Scrap(6, 2)); + + ephemeralObjects.push(new GameObject(0, 3, bitmaps.commandMove.key)); + ephemeralText.push(new Text('to move forward', 2, 7, color`0`)); + ephemeralObjects.push(new GameObject(0, 4, bitmaps.commandErase.key)); + ephemeralText.push(new Text('remove a command', 2, 9, color`0`)); + ephemeralObjects.push(new GameObject(0, 5, bitmaps.commandRun.key)); + ephemeralText.push(new Text('to run program', 2, 11, color`0`)); + + ephemeralText.push(new Text('A/D-Move K-Select', 1, 13, color`0`)); + }, + commands: [ Command.commandTypes.move ], + commandSlots: 3, + map: map` +.......... +...8888... +..855558.. +...8888... +.......... +.......... +.......... +..........` + }, + { + onLoad(ephemeralObjects, ephemeralText) { + ephemeralObjects.push(new Controllable(3, 4, 'up')); + ephemeralObjects.push(new Scrap(5, 4)); + + ephemeralText.push(new Text('only the gray floor\ncan be traversed', 1, 10, color`0`)); + }, + commands: [ Command.commandTypes.move, Command.commandTypes.turnRight ], + commandSlots: 6, + map: map` +.......... +.......... +...888.... +..85558... +..85858... +...8.8.... +.......... +..........` + }, + { + onLoad(ephemeralObjects, ephemeralText) { + ephemeralObjects.push(new Controllable(2, 1, 'right')); + ephemeralObjects.push(new Scrap(7, 1)); + + ephemeralText.push(new Text('commands between\nand will loop', 1, 7, color`0`)); + ephemeralObjects.push(new GameObject(9, 3, bitmaps.commandLoop.key)); + ephemeralObjects.push(new GameObject(2, 4, bitmaps.commandLoopEnd.key)); + + ephemeralText.push(new Text('W/S-set iterations', 1, 12, color`0`)); + }, + commands: [ Command.commandTypes.move, Command.commandTypes.loop, Command.commandTypes.loopEnd ], + commandSlots: 3, + map: map` +.......... +.85555558. +..888888.. +.......... +.......... +.......... +.......... +..........` + }, + { + onLoad(ephemeralObjects, ephemeralText) { + ephemeralObjects.push(new Controllable(3, 6, 'up')); + ephemeralObjects.push(new Scrap(3, 2)); + ephemeralObjects.push(new Scrap(7, 2)); + }, + commands: [ Command.commandTypes.move, Command.commandTypes.turnRight, Command.commandTypes.loop, Command.commandTypes.loopEnd], + commandSlots: 7, + map: map` +.......... +...88888.. +..8555558. +..858888.. +..858..... +..858..... +..858..... +..........` + }, + { + onLoad(ephemeralObjects, ephemeralText) { + ephemeralObjects.push(new GameObject(2, 2, bitmaps.scrapCode.key)); + ephemeralObjects.push(new GameObject(3, 3, bitmaps.scrapCode.key)); + + ephemeralText.push(new Text('Nice job! Now Heidi\nhas a nest full of\nscraps!', 1, 11, color`8`)); + + playTune(tunes.victory); + }, + commands: [], + commandSlots: 0, + map: map` +.......... +.......... +..p[]..... +..asd.2... +..fgh..... +.......... +.......... +..........` + } +]; + +let level = 0; + +const game = { + commands: [], + commandSlots: [], + selected: 0, + currentSlot: 0, + canSelect: false, + ephemeralObjects: [], + ephemeralText: [], + + reset() { + this.commands.forEach((obj) => obj.remove()); + this.commandSlots.forEach((obj) => obj.remove()); + + // Last level is the win screen, there's no controls. + if (level === levels.length - 1) { + this.canSelect = false; + return; + } + + // Commands + this.currentSlot = 0; + this.commandSlots = []; + for (let i = 0; i < levels[level].commandSlots; i++) { + this.commandSlots.push(new Command(i + 1, 0, Command.commandTypes.empty, false)); + } + + this.selected = 0; + this.commands = levels[level].commands.map((type, index) => new Command(index + 1, height() - 1, type, index === 0)); + this.commands.push(new Command(this.commands.length + 1, height() - 1, Command.commandTypes.erase, false)); + this.commands.push(new Command(this.commands.length + 1, height() - 1, Command.commandTypes.run, false)); + + this.canSelect = true; + }, + + moveSelection(dir) { + if (!this.canSelect) return; + + playTune(tunes.select); + + this.commands[this.selected].selected = false; + + if (dir === 'left') this.selected--; + if (dir === 'right') this.selected++; + + if (this.selected < 0) { + this.selected = this.commands.length - 1; + } else if (this.selected > this.commands.length - 1) { + this.selected = 0; + } + + this.commands[this.selected].selected = true; + }, + + selectCommand() { + if (!this.canSelect) return; + + playTune(tunes.confirm); + + if (this.commands[this.selected].type === Command.commandTypes.erase) { + if (this.currentSlot === 0) return; + + this.commandSlots[--this.currentSlot].type = Command.commandTypes.empty; + } else if (this.commands[this.selected].type === Command.commandTypes.run) { + this.canSelect = false; + this.commands[this.selected].selected = false; + + const step = (state) => () => { + if (this.commandSlots[state.instr].type === Command.commandTypes.loop && !state.loop.looping) { + state.loop.instr = state.instr; + state.loop.iterations = 0; + state.loop.looping = true; + } else if (this.commandSlots[state.instr].type === Command.commandTypes.loopEnd && state.loop.looping) { + if (++state.loop.iterations < this.commandSlots[state.loop.instr].value) { + state.instr = state.loop.instr; + } else { + state.loop.looping = false; + } + } + + this.commandSlots[state.instr].execute(); + + GameObject.step(); + + if (state.instr !== this.commandSlots.length - 1 && this.commandSlots[state.instr + 1].type !== Command.commandTypes.empty) { + // No loop ends or anything. Proceed to next instruction. + state.instr++; + setTimeout(step(state), 500); + } else { + const scrapCount = GameObject.getObjectsOfType(Scrap).length; + + // Reload the level or load the next level depending if all scraps were successfully + // collected or not + if (scrapCount === 0) { + level++; + } + + setTimeout(() => this.reloadLevel(levels[level]), 500); + } + }; + + step({ + instr: 0, + loop: { + instr: 0, + iterations: 0, + looping: false + } + })(); + } else { + if (this.currentSlot === this.commandSlots.length) return; + + this.commandSlots[this.currentSlot].value = this.commands[this.selected].value; + this.commandSlots[this.currentSlot].type = this.commands[this.selected].type; + this.currentSlot++; + } + }, + + incrementSelectedValue() { + if (!this.canSelect) return; + + if (this.commands[this.selected].incrementValue()) playTune(tunes.select); + }, + + decrementSelectedValue() { + if (!this.canSelect) return; + + if (this.commands[this.selected].decrementValue()) playTune(tunes.select); + }, + + reloadLevel(level) { + this.ephemeralObjects.forEach((obj) => obj.remove()); + this.ephemeralText.forEach((text) => text.remove()); + setMap(level.map); + this.reset(); + level.onLoad(this.ephemeralObjects, this.ephemeralText); + } +}; + +const legend = []; +for (const item in bitmaps) legend.push([ bitmaps[item].key, bitmaps[item].sprite ]); +setLegend(...legend); + +game.reloadLevel(levels[level]); + +onInput(inputs.menuLeft, () => game.moveSelection('left')); +onInput(inputs.menuRight, () => game.moveSelection('right')); +onInput(inputs.valueUp, () => game.incrementSelectedValue()); +onInput(inputs.valueDown, () => game.decrementSelectedValue()); +onInput(inputs.menuConfirm, () => game.selectCommand()); diff --git a/games/coding_demo_1_linked_sprites.js b/games/coding_demo_1_linked_sprites.js index 28c60d4bc9..3b41976c24 100644 --- a/games/coding_demo_1_linked_sprites.js +++ b/games/coding_demo_1_linked_sprites.js @@ -1,8 +1,8 @@ /* @title: Coding Demo 1 - Linked sprites -@tags: ['demo', 'hackable', 'beginner'] -@addedOn: 2022-09-13 @author: Leonard (Omay) +@tags: [] +@addedOn: 2022-09-13 Important code at bottom Movement code diff --git a/games/coding_demo_2_multiple_maps.js b/games/coding_demo_2_multiple_maps.js index b4691b7182..78c85bc9dd 100644 --- a/games/coding_demo_2_multiple_maps.js +++ b/games/coding_demo_2_multiple_maps.js @@ -1,8 +1,8 @@ /* @title: Coding Demo 2 - Dual Maps -@tags: ['demo', 'hackable', 'beginner'] -@addedOn: 2022-09-13 @author: Leonard Maculo +@tags: [] +@addedOn: 2022-09-13 Use the function addMap to add a background or another layer. ex: diff --git a/games/coding_demo_3_custom_directions.js b/games/coding_demo_3_custom_directions.js index 073ed9367e..ab07f26b38 100644 --- a/games/coding_demo_3_custom_directions.js +++ b/games/coding_demo_3_custom_directions.js @@ -1,8 +1,8 @@ /* @title: Coding Demo 3: Custom Directional Solids -@tags: ['demo', 'hackable', 'beginner'] -@addedOn: 2022-10-20 @author: Leonard (Omay) +@tags: [] +@addedOn: 2022-10-20 Go to line 120 for the important code of this demo. Change the variable "level" on line 104 to 1 to get the demo map. */ diff --git a/games/coding_demo_4_screen_scroll.js b/games/coding_demo_4_screen_scroll.js index 752e22a1e5..e514d44660 100644 --- a/games/coding_demo_4_screen_scroll.js +++ b/games/coding_demo_4_screen_scroll.js @@ -1,8 +1,8 @@ /* @title: Coding Demo 4 - Screen Scrolling -@tags: ['demo', 'hackable', 'beginner'] -@addedOn: 2022-11-7 @author: Leonard (Omay) +@tags: [] +@addedOn: 2022-11-7 MapV2 is a version of a map I made that can store any map. It is helpful for copying the current state of the map. Between every "INCLUDE" and "END INCLUDE" is what you need to copy diff --git a/games/coding_demo_5_gravity.js b/games/coding_demo_5_gravity.js index 02565b2903..1a2a4c237f 100644 --- a/games/coding_demo_5_gravity.js +++ b/games/coding_demo_5_gravity.js @@ -1,8 +1,8 @@ /* @title: Coding Demo 5: Gravity -@tags: ['demo', 'hackable', 'simulation', 'beginner'] -@addedOn: 2022-11-12 @author: Leonard (Omay) +@tags: ['simulation'] +@addedOn: 2022-11-12 Comments labeled include on their own line mean copy the code from the include to end include diff --git a/games/collectcandy.js b/games/collectcandy.js index a75af2ba87..8cad10fe29 100644 --- a/games/collectcandy.js +++ b/games/collectcandy.js @@ -2,7 +2,7 @@ /* @title: collectcandy @author: James C -@tags: ['catch'] +@tags: [] @addedOn: 2023-11-04 */ diff --git a/games/color dino.js b/games/color dino.js index d00bfb8974..329a156f1a 100644 --- a/games/color dino.js +++ b/games/color dino.js @@ -1,8 +1,8 @@ /* @title: thefake chrome dino -@tags: ['endless', 'color dino'] -@addedOn: 2024-08-23 @author: crabby605 +@tags: ['endless'] +@addedOn: 2024-08-23 */ const h = 10; diff --git a/games/color_domination.js b/games/color_domination.js index 2601c44175..72e7dc8672 100644 --- a/games/color_domination.js +++ b/games/color_domination.js @@ -1,8 +1,8 @@ /* @title: color_domination +@author: adrianoapj @tags: ['multiplayer'] @addedOn: 2022-09-19 -@author: adrianoapj */ /* diff --git a/games/color_patterns.js b/games/color_patterns.js index 6e39ab29f2..4e826acbe3 100644 --- a/games/color_patterns.js +++ b/games/color_patterns.js @@ -1,8 +1,8 @@ /* @title: color_patterns -@tags: ['logic'] -@addedOn: 2022-07-14 @author: brian +@tags: ['puzzle'] +@addedOn: 2022-07-14 Instructions: diff --git a/games/colorconnect.js b/games/colorconnect.js new file mode 100644 index 0000000000..4e929d4ad6 --- /dev/null +++ b/games/colorconnect.js @@ -0,0 +1,2169 @@ +/* +@title: colorconnect +@author: Newton +@tags: [] +@addedOn: 2024-09-16 + ___ _ ___ _ + / __\___ | | ___ _ __ / __\___ _ __ _ __ ___ ___| |_ + / / / _ \| |/ _ \| '__| / / / _ \| '_ \| '_ \ / _ \/ __| __| +/ /__| (_) | | (_) | | / /__| (_) | | | | | | | __/ (__| |_ +\____/\___/|_|\___/|_| \____/\___/|_| |_|_| |_|\___|\___|\__| + + +Color Connect is a simple game: Your goal is to connect +each two cirles of the same color with a line without crossing +an other line. Every square of the grid has to be filled. + +-------------------------------------------------------------------------------- + +Controls: +W -> move cursor up +A -> move cursor left +S -> move cursor back +D -> move cursor right + +I -> select square (see below) +J -> previous level +K -> show help +L -> next level + +reactions of selecting a square +circle (empty) -> start drawing a color line from there, move with WASD + to draw the line +circle (full) -> clear the drawn lines of this color + +-------------------------------------------------------------------------------- + +!!! WARNING !!! +Due to my limited JavaScript knowledge, my hate against it and the limitations +of this framework, the code is very unclean and may cause eye cancer :( + +-------------------------------------------------------------------------------- + +*/ + +const circle_bitmap = bitmap` +....00000000.... +...0000000000... +..000......000.. +.00..........00. +000..........000 +00............00 +00............00 +00............00 +00............00 +00............00 +00............00 +000..........000 +.00..........00. +..000......000.. +...0000000000... +....00000000....` +const circle_full_bitmap = bitmap` +....00000000.... +...0000000000... +..000000000000.. +.00000000000000. +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +.00000000000000. +..000000000000.. +...0000000000... +....00000000....` +const line_bitmap = bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000` + +const start_screen = [ + bitmap` +................ +................ +................ +...7777777777777 +...7777777777777 +...7777777777777 +...7777777777777 +...7777777777777 +...7777777777777 +...7777777777777 +...7777777777777 +...7777777777777 +...777777777.... +...777777777.... +...777777777.... +...777777777....`, bitmap` +................ +................ +................ +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +................ +................ +................ +................`, bitmap` +................ +................ +................ +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +................ +................ +................ +................`, bitmap` +................ +................ +................ +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +................ +................ +................ +................`, bitmap` +................ +................ +..........77777. +7777777..7777777 +7777777.77777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777.77777777 +7777777..7777777 +..........77777. +................ +................ +................`, bitmap` +................ +................ +................ +................ +7............... +77.............. +77.............. +77.............. +77.............. +77.............. +7............... +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +....99999....... +...9999999..9999 +..999999999.9999 +.999999999999999 +.999999999999999 +.999999999999999 +.999999999999999 +.999999999999999 +..999999999.9999 +...9999999..9999 +....99999....... +................ +................ +................`, bitmap` +................ +................ +................ +9999999999999999 +9999999999999999 +9999999999999999 +9999999999999999 +9999999999999999 +9999999999999999 +9999999999999999 +9999999999999999 +9999999999999999 +................ +................ +................ +................`, bitmap` +................ +................ +................ +9999999999999... +9999999999999... +9999999999999... +9999999999999... +9999999999999... +9999999999999... +9999999999999... +9999999999999... +9999999999999... +....999999999... +....999999999... +....999999999... +....999999999...`, + bitmap` +...777777777.... +...777777777.... +...777777777.... +...777777777.... +...777777777.... +...777777777.... +.....77777...... +....7777777..... +...777777777.... +..77777777777... +..77777777777... +..77777777777... +..77777777777... +..77777777777... +...777777777.... +....7777777.....`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +...........33333 +...........33333 +.........3333333 +.........3333333 +.........333333. +.........333333. +.........3333... +.........3333... +.........3333... +.........3333... +.........3333... +.........3333... +.........3333... +.........3333... +.........333333.`, bitmap` +................ +333......9999999 +333......9999999 +33333..999999999 +33333..999999999 +.......999999... +.......999999... +.......9999..... +.......9999..... +.......9999..... +.......9999..... +.......9999..... +.......9999..... +.......9999..... +.......9999..... +.......999999...`, bitmap` +................ +99999......66... +99999......66... +9999999..6666... +9999999..6666... +.999999..6666... +.999999..6666... +...9999..6666... +...9999..6666... +...9999..6666... +...9999..6666... +...9999..6666... +...9999..6666... +...9999..6666... +...9999..6666... +.999999..666666.`, bitmap` +................ +.........4444444 +.........4444444 +.......444444444 +.......444444444 +.......444444... +.......444444... +.......4444..... +.......4444..... +.......4444..... +.......4444..... +.......4444..... +.......4444..... +.......4444..... +.......4444..... +.......444444...`, bitmap` +................ +44444......77777 +44444......77777 +4444444..7777777 +4444444..7777777 +.444444..7777... +.444444..7777... +...4444..7777... +...4444..7777... +...4444..7777..7 +...4444..7777..7 +...4444..7777777 +...4444..7777777 +...4444..7777777 +...4444..7777777 +.444444..7777777`, bitmap` +................ +777............. +777............. +77777........... +77777........... +.7777........... +.7777........... +.7777........... +.7777........... +77777........... +77777........... +777............. +777............. +7............... +7............... +777.............`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +....999999999... +....999999999... +......99999..... +.....9999999.... +....999999999... +...99999999999.. +...99999999999.. +...99999999999.. +...99999999999.. +...99999999999.. +....999999999... +.....9999999.... +......99999..... +................ +................ +................`, + bitmap` +.....77777...... +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +..........333333 +..........333333 +........33333333 +........33333333 +........333333..`, bitmap` +.........333333. +.........3333333 +.........3333333 +...........33333 +...........33333 +................ +................ +................ +................ +................ +................ +33......99999999 +33......99999999 +3333..9999999999 +3333..9999999999 +......999999....`, bitmap` +.......999999... +33333..999999999 +33333..999999999 +333......9999999 +333......9999999 +................ +................ +................ +................ +................ +................ +9999......66.... +9999......66.... +999999..666666.. +999999..666666.. +999999..66666666`, bitmap` +.999999..666666. +9999999..6666666 +9999999..6666666 +99999......66666 +99999......66666 +................ +................ +................ +................ +................ +................ +....66......44.. +....66......44.. +....6666..444444 +....6666..444444 +....6666..444444`, bitmap` +.......444444... +66666..444444444 +66666..444444444 +666......4444444 +666......4444444 +................ +................ +................ +................ +................ +................ +......44......77 +......44......77 +......4444..7777 +......4444..7777 +44....4444..7777`, bitmap` +.444444..7777777 +4444444..7777..7 +4444444..7777..7 +44444......77... +44444......77... +................ +................ +................ +................ +................ +................ +777777......3333 +777777......3333 +77777777..333333 +77777777..333333 +77........333333`, bitmap` +777............. +77777........... +77777........... +.7777........... +.7777........... +................ +................ +................ +................ +................ +................ +3333......999999 +3333......999999 +333333..99999999 +333333..99999999 +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +9999999999...... +9999999999...... +999999999999.... +999999999999.... +9999............`, bitmap` +................ +................ +................ +................ +................ +......33333..... +.....3333333.... +....333333333... +...33333333333.. +...33333333333.. +...33333333333.. +...33333333333.. +...33333333333.. +....333333333... +.....3333333.... +......33333.....`, + bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +.....66666...... +....6666666.....`, bitmap` +........333333.. +........3333.... +........3333.... +........3333.... +........3333.... +........3333.... +........3333.... +........3333.... +........3333.... +........333333.. +........333333.. +........33333333 +........33333333 +..........333333 +..........333333 +................`, bitmap` +......999999.... +......9999...... +......9999...... +......9999...... +......9999...... +......9999...... +......9999...... +......9999...... +......9999...... +......999999.... +......999999.... +3333..9999999999 +3333..9999999999 +33......99999999 +33......99999999 +................`, bitmap` +999999..66666666 +..9999..66666666 +..9999..66666666 +..9999..6666..66 +..9999..6666..66 +..9999..6666.... +..9999..6666.... +..9999..6666.... +..9999..6666.... +999999..6666.... +999999..6666.... +999999..6666.... +999999..6666.... +9999......66.... +9999......66.... +................`, bitmap` +....6666..444444 +66..6666..444444 +66..6666..444444 +66666666..4444.. +66666666..4444.. +66666666..4444.. +66666666..4444.. +..666666..4444.. +..666666..4444.. +....6666..4444.. +....6666..4444.. +....6666..4444.. +....6666..4444.. +....66......44.. +....66......44.. +................`, bitmap` +44....4444..7777 +4444..4444..7777 +4444..4444..7777 +4444444444..7777 +4444444444..7777 +..44444444..7777 +..44444444..7777 +....444444..7777 +....444444..7777 +......4444..7777 +......4444..7777 +......4444..7777 +......4444..7777 +......44......77 +......44......77 +................`, bitmap` +77........333333 +..........3333.. +..........3333.. +7777......3333.. +7777......3333.. +7777......3333.. +7777......3333.. +..........3333.. +..........3333.. +77........333333 +77........333333 +77777777..333333 +77777777..333333 +777777......3333 +777777......3333 +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +333333.......... +333333.......... +3333............ +3333............ +................`, bitmap` +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +9999............ +99.............. +99.............. +................`, bitmap` +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333...`, + bitmap` +...666666666.... +..66666666666... +..66666666666... +..66666666666... +..66666666666... +..66666666666... +...666666666.... +....6666666..... +.....66666...... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666....`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333...`, + bitmap` +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666....`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333...`, + bitmap` +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...666666666....`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`, bitmap` +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333... +....333333333...`, + bitmap` +...666666666.... +...666666666.... +...666666666.... +...666666666.... +...6666666666666 +...6666666666666 +...6666666666666 +...6666666666666 +...6666666666666 +...6666666666666 +...6666666666666 +...6666666666666 +...6666666666666 +................ +................ +................`, bitmap` +................ +................ +................ +................ +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +................ +................ +................`, bitmap` +................ +................ +................ +..........66666. +6666666..6666666 +6666666.66666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666.66666666 +6666666..6666666 +..........66666. +................ +................`, bitmap` +................ +................ +................ +................ +................ +6............... +66.............. +66.............. +66.............. +66.............. +66.............. +6............... +................ +................ +................ +................`, bitmap` +................ +................ +................ +..........44444. +.........4444444 +........44444444 +.......444444444 +.......444444444 +.......444444444 +.......444444444 +.......444444444 +........44444444 +.........4444444 +..........44444. +................ +................`, bitmap` +................ +................ +................ +................ +..44444444444444 +4.44444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4.44444444444444 +..44444444444444 +................ +................ +................`, bitmap` +................ +................ +................ +................ +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +................ +................ +................`, bitmap` +................ +................ +................ +..........44444. +4444444..4444444 +4444444.44444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444.44444444 +4444444..4444444 +..........44444. +................ +................`, bitmap` +................ +................ +................ +................ +................ +4............... +44.............. +44.............. +44.............. +44.............. +44.............. +4............... +................ +................ +................ +................`, bitmap` +....333333333... +....333333333... +....333333333... +......33333..... +.....3333333.... +....333333333... +...33333333333.. +...33333333333.. +...33333333333.. +...33333333333.. +...33333333333.. +....333333333... +.....3333333.... +......33333..... +................ +................`, + +] + + +const black = "=" +const background = "-" +const cursor = "_" +const circle_red = "0" +const circle_full_red = "1" +const line_red = "2" +const circle_orange = "3" +const circle_full_orange = "4" +const line_orange = "5" +const circle_yellow = "6" +const circle_full_yellow = "7" +const line_yellow = "8" +const circle_green = "9" +const circle_full_green = "a" +const line_green = "b" +const circle_blue = "c" +const circle_full_blue = "d" +const line_blue = "e" + +/* --- COLOR AND SHAPE DETECTION --- */ +const red_parts = [circle_red, circle_full_red, line_red] +const orange_parts = [circle_orange, circle_full_orange, line_orange] +const yellow_parts = [circle_yellow, circle_full_yellow, line_yellow] +const green_parts = [circle_green, circle_full_green, line_green] +const blue_parts = [circle_blue, circle_full_blue, line_blue] + +const circle_parts = [circle_red, circle_orange, circle_yellow, circle_green, circle_blue] +const circle_full_parts = [circle_full_red, circle_full_orange, circle_full_yellow, circle_full_green, circle_full_blue] +const line_parts = [line_red, line_orange, line_yellow, line_green, line_blue] + +function getColor(type) { + if (red_parts.includes(type)) { + return 3 + } else if (orange_parts.includes(type)) { + return 9 + } else if (yellow_parts.includes(type)) { + return 6 + } else if (green_parts.includes(type)) { + return 4 + } else if (blue_parts.includes(type)) { + return 7 + } +} + +function clearBoard() { + for (let x = 0; x < width(); x++) { + for (let y = 0; y < height(); y++) { + clearTile(x, y) + } + } + clearText() +} + +function clearColor(color) { + switch (color) { + case 3: + getAll(line_red).forEach((part) => part.remove()) + getAll(circle_full_red).forEach((circle_full) => { + addSprite(circle_full.x, circle_full.y, circle_red) + circle_full.remove() + }) + break + case 9: + getAll(line_orange).forEach((part) => part.remove()) + getAll(circle_full_orange).forEach((circle_full) => { + addSprite(circle_full.x, circle_full.y, circle_orange) + circle_full.remove() + }) + break + case 6: + getAll(line_yellow).forEach((part) => part.remove()) + getAll(circle_full_yellow).forEach((circle_full) => { + addSprite(circle_full.x, circle_full.y, circle_yellow) + circle_full.remove() + }) + break + case 4: + getAll(line_green).forEach((part) => part.remove()) + getAll(circle_full_green).forEach((circle_full) => { + addSprite(circle_full.x, circle_full.y, circle_green) + circle_full.remove() + }) + break + case 7: + getAll(line_blue).forEach((part) => part.remove()) + getAll(circle_full_blue).forEach((circle_full) => { + addSprite(circle_full.x, circle_full.y, circle_blue) + circle_full.remove() + }) + break + } +} + +function drawStep(x, y) { + let sprites = getTile(getFirst(cursor).x, getFirst(cursor).y) + + for (let i = 0; i < sprites.length; i++) { + let type = sprites[i].type + + if (type != cursor) { + switch (draw_color) { + case 3: + if (type == circle_red) { + /* finish line */ + addSprite(sprites[i].x, sprites[i].y, circle_full_red) + sprites[i].remove() + } else { + clearColor(draw_color) + } + break + case 9: + if (type == circle_orange) { + /* finish line */ + addSprite(sprites[i].x, sprites[i].y, circle_full_orange) + sprites[i].remove() + } else { + clearColor(draw_color) + } + break + case 6: + if (type == circle_yellow) { + /* finish line */ + addSprite(sprites[i].x, sprites[i].y, circle_full_yellow) + sprites[i].remove() + } else { + clearColor(draw_color) + } + break + case 4: + if (type == circle_green) { + /* finish line */ + addSprite(sprites[i].x, sprites[i].y, circle_full_green) + sprites[i].remove() + } else { + clearColor(draw_color) + } + break + case 7: + if (type == circle_blue) { + /* finish line */ + addSprite(sprites[i].x, sprites[i].y, circle_full_blue) + sprites[i].remove() + } else { + clearColor(draw_color) + } + break + } + + draw = false + return + + } + } + + /* if not returned until now, draw a line */ + switch (draw_color) { + case 3: + addSprite(getFirst(cursor).x, getFirst(cursor).y, line_red) + break + case 9: + addSprite(getFirst(cursor).x, getFirst(cursor).y, line_orange) + break + case 6: + addSprite(getFirst(cursor).x, getFirst(cursor).y, line_yellow) + break + case 4: + addSprite(getFirst(cursor).x, getFirst(cursor).y, line_green) + break + case 7: + addSprite(getFirst(cursor).x, getFirst(cursor).y, line_blue) + break + } +} + +function checkWin() { + /* if all fields have either a full circle or line -> won */ + for (let x = 0; x < width(); x++) { + for (let y = 0; y < height(); y++) { + let sprites = getTile(x, y).filter((part) => part.type != cursor) + + if (sprites.length == 0) { + return false + } + + for (let i = 0; i < sprites.length; i++) { + if (circle_full_parts.includes(sprites[i].type) || line_parts.includes(sprites[i].type)) { + continue + } else { + return false + } + } + } + } + + return true +} + +function showStart() { + running = false + clearBoard() + setBackground("=") + setMap(levels[0]) + addText("to start", { + x: 6, + y: 9, + color: color`3` + }) + addText("press l >", { + x: 6, + y: 11, + color: color`3` + }) + addText("press k for help", { + x: 2, + y: 13, + color: color`3` + }) +} + +function showHelp(step = 0) { + switch (step) { + case 0: + help = true + running = false + clearBoard() + setBackground("=") + addText("at any time", { + x: 4, + y: 6, + color: color`3` + }) + addText("press l >", { + x: 5, + y: 8, + color: color`3` + }) + addText("to play", { + x: 6, + y: 10, + color: color`3` + }) + addText("continues in 3s", { + x: 2, + y: 13, + color: color`3` + }) + setTimeout(() => { showHelp(1) }, 3000) + break + case 1: + if (!help) { return } + clearBoard() + setMap(levels[0]) + addText("Welcome to the", { + x: 3, + y: 9, + color: color`3` + }) + addText("Color Connect", { + x: 4, + y: 11, + color: color`3` + }) + addText("help", { + x: 8, + y: 13, + color: color`3` + }) + setTimeout(() => { showHelp(2) }, 3000) + break + case 2: + if (!help) { return } + clearBoard() + setBackground("=") + addText("goal of the game:", { + x: 1, + y: 1, + color: color`3` + }) + addText("- connect each", { + x: 1, + y: 4, + color: color`3` + }) + addText(" color pair", { + x: 1, + y: 6, + color: color`3` + }) + addText("- every square", { + x: 1, + y: 8, + color: color`3` + }) + addText(" is filled", { + x: 1, + y: 10, + color: color`3` + }) + setTimeout(() => { showHelp(3) }, 5000) + break + case 3: + if (!help) { return } + clearBoard() + setBackground("=") + addText("controls:", { + x: 1, + y: 1, + color: color`3` + }) + addText("W-A-S-D", { + x: 1, + y: 4, + color: color`3` + }) + addText("- move cursor", { + x: 1, + y: 6, + color: color`3` + }) + addText("\"J\"", { + x: 1, + y: 8, + color: color`3` + }) + addText("- previous level", { + x: 1, + y: 10, + color: color`3` + }) + addText("\"L\"", { + x: 1, + y: 12, + color: color`3` + }) + addText("- next level", { + x: 1, + y: 14, + color: color`3` + }) + setTimeout(() => { showHelp(4) }, 5000) + break + case 4: + if (!help) { return } + clearBoard() + setBackground("=") + addText("controls (contin.):", { + x: 1, + y: 1, + color: color`3` + }) + addText("\"I\"", { + x: 1, + y: 4, + color: color`3` + }) + addText("- on empty circle", { + x: 1, + y: 6, + color: color`3` + }) + addText(" start drawing line", { + x: 1, + y: 8, + color: color`3` + }) + addText("- on full circle", { + x: 1, + y: 10, + color: color`3` + }) + addText(" clear color", { + x: 1, + y: 12, + color: color`3` + }) + setTimeout(() => { showStart() }, 5000) + break + } +} + +function showWin() { + running = false + clearBoard() + setBackground("=") + addText("Y", { + x: 6, + y: 4, + color: color`3` + }) + addText("O", { + x: 7, + y: 4, + color: color`9` + }) + addText("U", { + x: 8, + y: 4, + color: color`6` + }) + addText("W", { + x: 10, + y: 4, + color: color`4` + }) + addText("O", { + x: 11, + y: 4, + color: color`7` + }) + addText("N", { + x: 12, + y: 4, + color: color`3` + }) + addText("!", { + x: 13, + y: 4, + color: color`9` + }) + addText("again next", { + x: 3, + y: 7, + color: color`3` + }) + addText("< j l >", { + x: 4, + y: 9, + color: color`3` + }) + addText("k", { + x: 9, + y: 11, + color: color`3` + }) + addText("v", { + x: 9, + y: 12, + color: color`3` + }) + addText("show help", { + x: 5, + y: 14, + color: color`3` + }) +} + +/* --- SETUP --- */ +setLegend( + [black, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [background, bitmap` +L00LL00LL00LL00L +0000000000000000 +0000000000000000 +L00000000000000L +L00000000000000L +0000000000000000 +0000000000000000 +L00000000000000L +L00000000000000L +0000000000000000 +0000000000000000 +L00000000000000L +L00000000000000L +0000000000000000 +0000000000000000 +L00LL00LL00LL00L`], + [cursor, bitmap` +1111111111111111 +111..........111 +11............11 +1..............1 +1..............1 +1..............1 +1..............1 +1..............1 +1..............1 +1..............1 +1..............1 +1..............1 +1..............1 +11............11 +111..........111 +1111111111111111`], + [circle_red, circle_bitmap.replaceAll("0", "3")], + [circle_full_red, circle_full_bitmap.replaceAll("0", "3")], + [line_red, line_bitmap.replaceAll("0", "3")], + [circle_orange, circle_bitmap.replaceAll("0", "9")], + [circle_full_orange, circle_full_bitmap.replaceAll("0", "9")], + [line_orange, line_bitmap.replaceAll("0", "9")], + [circle_yellow, circle_bitmap.replaceAll("0", "6")], + [circle_full_yellow, circle_full_bitmap.replaceAll("0", "6")], + [line_yellow, line_bitmap.replaceAll("0", "6")], + [circle_green, circle_bitmap.replaceAll("0", "4")], + [circle_full_green, circle_full_bitmap.replaceAll("0", "4")], + [line_green, line_bitmap.replaceAll("0", "4")], + [circle_blue, circle_bitmap.replaceAll("0", "7")], + [circle_full_blue, circle_full_bitmap.replaceAll("0", "7")], + [line_blue, line_bitmap.replaceAll("0", "7")], + ["f", start_screen[0]], + ["g", start_screen[1]], + ["h", start_screen[2]], + ["i", start_screen[3]], + ["j", start_screen[4]], + ["k", start_screen[5]], + ["l", start_screen[6]], + ["m", start_screen[7]], + ["n", start_screen[8]], + ["o", start_screen[9]], + ["p", start_screen[10]], + ["q", start_screen[12]], + ["r", start_screen[13]], + ["s", start_screen[14]], + ["t", start_screen[15]], + ["u", start_screen[16]], + ["v", start_screen[17]], + ["w", start_screen[19]], + ["x", start_screen[20]], + ["y", start_screen[21]], + ["z", start_screen[22]], + ["A", start_screen[23]], + ["B", start_screen[24]], + ["C", start_screen[25]], + ["D", start_screen[26]], + ["E", start_screen[27]], + ["F", start_screen[28]], + ["G", start_screen[29]], + ["H", start_screen[30]], + ["I", start_screen[31]], + ["J", start_screen[32]], + ["K", start_screen[33]], + ["L", start_screen[34]], + ["M", start_screen[35]], + ["N", start_screen[36]], + ["O", start_screen[37]], + ["P", start_screen[38]], + ["Q", start_screen[39]], + ["R", start_screen[40]], + ["S", start_screen[49]], + ["T", start_screen[50]], + ["U", start_screen[59]], + ["V", start_screen[60]], + ["W", start_screen[69]], + ["X", start_screen[70]], + ["Y", start_screen[71]], + ["Z", start_screen[72]], + ["?", start_screen[73]], + ["!", start_screen[74]], + ["{", start_screen[75]], + ["}", start_screen[76]], + ["[", start_screen[77]], + ["]", start_screen[78]], + ["$", start_screen[79]] +) + +setSolids([]) + +const levels = [ + map` +fghijklmno +p.qrstuv.w +xyzABCDEFG +HIJKLMNOPQ +R........S +T........U +V........W +XYZ?!{}[]$`, + map` +.........6 +.......... +....3..c.. +.......... +....9..... +.....0c... +6.....3... +0.9.......`, + map` +.......... +.c..6..... +...90..... +3.....3... +0.....c... +.......... +.......... +69........`, + map` +.......... +.0......0. +.3......3. +.6......6. +.9......9. +.c......c. +.......... +..........`, + map` +.6.9c..... +.......... +.......3.. +...0...... +.......... +..0....c.. +....9...3. +....6.....`, + map` +.93...0... +.6..c...6. +.......... +.......... +..3....... +.......... +.c.......0 +.........9`, + map` +6......... +.......... +.......... +.......... +.......... +.......... +.......... +6.........` +] + + +/* --- GAME START --- */ +let level = 0 +let draw = false +let move = false +let running = false +let help = false +let draw_color = 0 + +let start = false +showStart() + +/* --- INPUT REACTIONS --- */ +onInput("w", () => { + if (running) { + getFirst(cursor).y -= 1 + move = true + } +}) + +onInput("a", () => { + if (running) { + getFirst(cursor).x -= 1 + move = true + } +}) + +onInput("s", () => { + if (running) { + getFirst(cursor).y += 1 + move = true + } +}) + +onInput("d", () => { + if (running) { + getFirst(cursor).x += 1 + move = true + } +}) + +onInput("i", () => { + if (running) { + if (draw) { + draw = false + clearColor(draw_color) + } + let sprites = getTile(getFirst(cursor).x, getFirst(cursor).y) + for (let i = 0; i < sprites.length; i++) { + let type = sprites[i].type + + if (circle_full_parts.includes(type)) { + /* if clicked on a full circle -> unconnect everything of this color */ + clearColor(getColor(type)) + } else if (circle_parts.includes(type)) { + /* if clicked on an empty circle -> start drawing */ + draw = true + draw_color = getColor(type) + + switch (draw_color) { + case 3: + addSprite(sprites[i].x, sprites[i].y, circle_full_red) + break + case 9: + addSprite(sprites[i].x, sprites[i].y, circle_full_orange) + break + case 6: + addSprite(sprites[i].x, sprites[i].y, circle_full_yellow) + break + case 4: + addSprite(sprites[i].x, sprites[i].y, circle_full_green) + break + case 7: + addSprite(sprites[i].x, sprites[i].y, circle_full_blue) + break + } + sprites[i].remove() + } + } + } +}) + +onInput("j", () => { + if (level > 1) { + level -= 1 + start = true + } +}) + +onInput("l", () => { + help = false + + if (level < levels.length - 1) { + level += 1 + start = true + } else { + running = false + clearBoard() + setBackground("=") + setMap(levels[0]) + addText("you played", { + x: 5, + y: 10, + color: color`3` + }) + addText("all levels!", { + x: 5, + y: 12, + color: color`3` + }) + } +}) + +onInput("k", () => { + if (!help) { + showHelp() + } +}) + +afterInput(() => { + /* first input after showing start/win menu */ + if (start) { + start = false + running = true + clearBoard() + setBackground(background) + setMap(levels[level]) + addSprite(0, 0, cursor) + } + + /* if a move occured (non-config key) */ + if (move) { + move = false + if (draw) { + drawStep(getFirst(cursor).x, getFirst(cursor).y) + } + + if (checkWin()) { + showWin() + } + } +}) diff --git a/games/colossal_dewgong(1).js b/games/colossal_dewgong(1).js new file mode 100644 index 0000000000..d8a1ca6cc7 --- /dev/null +++ b/games/colossal_dewgong(1).js @@ -0,0 +1,282 @@ +/* +@title: Journey of the Yeti +@author: Andrew Zhu +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const ice = "i" +const rock = "r" +const goal = "g" +const wall = "w" +const floor = "f" +const block = "b" +const melody = tune` +340.90909090909093, +340.90909090909093: D4/340.90909090909093, +340.90909090909093: B4~340.90909090909093, +340.90909090909093: D5^340.90909090909093, +340.90909090909093: G4^340.90909090909093 + G5-340.90909090909093, +340.90909090909093: D5/340.90909090909093, +340.90909090909093: B4~340.90909090909093 + D5^340.90909090909093 + F4^340.90909090909093, +340.90909090909093: B5/340.90909090909093, +340.90909090909093: C5~340.90909090909093 + B4/340.90909090909093, +340.90909090909093: E5-340.90909090909093 + A5/340.90909090909093, +340.90909090909093: G5/340.90909090909093, +340.90909090909093: F4^340.90909090909093 + C5-340.90909090909093 + F5/340.90909090909093, +340.90909090909093: G4-340.90909090909093, +340.90909090909093: B4~340.90909090909093, +340.90909090909093: G4^340.90909090909093 + G5/340.90909090909093, +340.90909090909093: D5~340.90909090909093, +340.90909090909093: C5-340.90909090909093 + G5/340.90909090909093, +340.90909090909093: D5^340.90909090909093 + E5/340.90909090909093, +340.90909090909093, +340.90909090909093: A5-340.90909090909093 + C5/340.90909090909093, +340.90909090909093: E5~340.90909090909093 + G4^340.90909090909093, +340.90909090909093: A5-340.90909090909093 + G4/340.90909090909093, +340.90909090909093: C5^340.90909090909093, +340.90909090909093: G5^340.90909090909093 + F4/340.90909090909093, +340.90909090909093: D5-340.90909090909093, +340.90909090909093: E5~340.90909090909093 + G4-340.90909090909093, +340.90909090909093: B4~340.90909090909093 + A4/340.90909090909093, +340.90909090909093: F4^340.90909090909093 + G4/340.90909090909093, +340.90909090909093: C5-340.90909090909093, +340.90909090909093: F5~340.90909090909093 + A4^340.90909090909093 + G4/340.90909090909093, +340.90909090909093: C5~340.90909090909093 + B4/340.90909090909093, +340.90909090909093: E5/340.90909090909093` + +setLegend( + [ player, bitmap` +........0....... +......00200..... +....00221220.... +....022777120... +.....07070720... +.....07777720... +.....0222220.... +......02220..... +...0002222200... +..0721222222100. +...012222222170. +....0022222200.. +.....02202220... +.....010.0210... +.....0L0..0L0... +......00..00....` ], + [rock,bitmap` +................ +................ +.....LLLL....... +....L1111L1L.... +...L1111111LL... +..L11L1111111L.. +..L111111111L1L. +..L1111111L111L. +..L111111111L1L. +..L111L11L1111L. +..L11111111111.. +..LLL11111111L.. +..LLLL11111LLL.. +...LLLLLLLLLLL.. +....LLLLLLLLLL.. +................`], + [ice, bitmap` +7727772277772777 +7277727777777777 +2777277777227777 +7772777772777772 +7727777772777772 +7277777277777727 +2777777777777277 +7777227777227777 +7772777777777772 +7777777727777727 +7777777777777277 +7277727777777777 +2777277777277777 +7772777772777772 +7727777777777727 +7227777277777277`], + [goal, bitmap` +0000000000000000 +0000000660000000 +0000006666000000 +0000066776600000 +0000667777660000 +0000677777760000 +000067HHHH760000 +0006677777H66000 +000677HH77H76000 +00067H77H7H76000 +00667H77H7H76600 +00667H7HH7H76600 +00667H7777H76660 +066777HHHH777660 +0667777777777660 +6667777777777666`], + [wall, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [floor, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLCLLL +LLLLLCCLLLLLLLLL +LLLCCLLLLLLLLLCL +LLLLLLLLLLLLLLLC +LLLLLLLLLCLLLLLC +LLLLLLLLLCLLLLCC +LLLLLLLLCLLLCCCL +LLLCLLLLCLLLLLLL +LLLLLLCLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLCCCCLLLLLLLLL +LLLCLLLLLCLLCLLL +LLLCCLLLLLLLCCLL +LLCLLLLLLCLLLLCL`], + [block, bitmap` +7727772277772777 +7277727777777777 +2777200007227772 +7777022220007277 +7220222222200777 +2202212222222077 +7702222222221207 +7702222222122207 +7202222222221207 +2702221221222207 +7702222222222202 +7705522222222077 +7200552222255077 +2770055555555077 +7727000000000027 +2777727277772777`] + +) + + +let level = 0 +const levels = [ + map` +wwwwwwwwwwwwwwww +wiiiiibiiiiiiiww +wiiiiiiiiiiiiiww +wiiiiiiiiiiiiiww +wiiiiiiiiibiiiww +wbiiiiiiiiiiibww +wiiiiiiiiiiiiiww +wiiiiiiiiiiiiifg +wiiiiiiiibiiiifg +wiibiiiiiiiiiiww +wiiiibiiiiiiibww +wiiiiiibiiiiiiww +wiiiiiiiiiiiiiww +wwwwwwwwwwwwwpww +wwwwwwwwwwwwwwww`,map` +wwwwwwwww +wwwwwgffw +wwwfwwffw +wfffwwffw +wrfrfrffw +wfrfrfwww +wffrfrwww +wfffrfffw +wwrfffffw +wpfwwwwww +wwwwwwwww`, map` +wwwgwww +ww...ww +wrr.rrw +w.rrr.w +wr...rw +w.rrr.w +w..p..w +wwwwwww`,map` +wwwww +wiiiw +wiiiw +wiipw +wwwww`, +] + +setMap(levels[level]) +setSolids([player,rock,wall]) +setPushables({ + [ player ]: [rock] +}) +function get(x,y){ + const tile = getTile(x,y) + let r = false + for (let s of tile){ + let g = (s.type ===ice) + r = (r || g) + } + return r + + +} +onInput("s", () => { + getFirst(player).y += 1 + + while(get(getFirst(player).x, getFirst(player).y) && get(getFirst(player).x, getFirst(player).y+1)){ + getFirst(player).y += 1 + } +}) +onInput("w", () => { + getFirst(player).y -= 1 + + while(get(getFirst(player).x, getFirst(player).y) && get(getFirst(player).x, getFirst(player).y-1)){ + getFirst(player).y -= 1 + } +}) +onInput("a", () => { + getFirst(player).x -= 1 + while(get(getFirst(player).x, getFirst(player).y) && get(getFirst(player).x-1, getFirst(player).y)){ + getFirst(player).x -= 1 + } +}) +onInput("d", () => { + getFirst(player).x += 1 + while(get(getFirst(player).x, getFirst(player).y) && get(getFirst(player).x+1, getFirst(player).y)){ + getFirst(player).x += 1 + } +}) +onInput("j", () => { + clearText(); + setMap(levels[level]); + +}); + +const playback = playTune(melody, Infinity) +afterInput(() => { + let r = false + for (let s of getTile(getFirst(player).x, getFirst(player).y)){ + let g = (s.type ===goal) + r = (r || g) + } + if(r){ + clearText(); + level=level+1 + + setMap(levels[level]); + } +}) + diff --git a/games/compudino.js b/games/compudino.js index cb11fb8690..dd26bdbd35 100644 --- a/games/compudino.js +++ b/games/compudino.js @@ -2,7 +2,7 @@ /* @title: compudino @author: rcyaon -@tags: [''] +@tags: [] @addedOn: 2023-12-08 */ diff --git a/games/confusing_conditions.js b/games/confusing_conditions.js index a01cb4cdac..ba86fc9cbc 100644 --- a/games/confusing_conditions.js +++ b/games/confusing_conditions.js @@ -1,8 +1,8 @@ /* @title: confusing_conditions -@tags: ['sokoban-style'] -@addedOn: 2022-09-08 @author: Sooraj +@tags: ['puzzle'] +@addedOn: 2022-09-08 */ const player = "p"; diff --git a/games/connectTheDots.js b/games/connectTheDots.js index 80b33517ec..449b2b46e5 100644 --- a/games/connectTheDots.js +++ b/games/connectTheDots.js @@ -1,8 +1,8 @@ /* @title: connect the dots +@author: Alex Howden @tags: ['strategy'] @addedOn: 2023-02-26 -@author: Alex Howden Recreation of Flow Free Maps from the original game */ diff --git a/games/connect_four.js b/games/connect_four.js index 15d6198374..e7b0128d49 100644 --- a/games/connect_four.js +++ b/games/connect_four.js @@ -1,8 +1,8 @@ /* @title: connect_four -@tags: ['classic'] -@addedOn: 2022-08-29 @author: sam liu +@tags: ['retro'] +@addedOn: 2022-08-29 The typical Connect Four game. diff --git a/games/conwaysgameoflife.js b/games/conwaysgameoflife.js index 648f9bb24d..811779b4da 100644 --- a/games/conwaysgameoflife.js +++ b/games/conwaysgameoflife.js @@ -1,8 +1,8 @@ /*= - @title: conway-gol -@tags: ['sandbox', 'advanced', 'simulation'] +@title: conway-gol +@author: the456gamer +@tags: ['sandbox','simulation'] @addedOn: 2022-11-08 - @author: the456gamer a game of life the cursor moves diff --git a/games/cookie_clicker.js b/games/cookie_clicker.js index 62fa06a5ce..e509b0f9d8 100644 --- a/games/cookie_clicker.js +++ b/games/cookie_clicker.js @@ -1,8 +1,8 @@ /* @title: cookie_clicker +@author: kunevi @tags: ['endless'] @addedOn: 2022-12-16 -@author: kunevi _ _ ______ __ _______ ____ _____ _ __ __ | | | |/ __ \ \ / / |__ __/ __ \ | __ \| | /\\ \ / / | |__| | | | \ \ /\ / / | | | | | | | |__) | | / \\ \_/ / diff --git a/games/cool_platformer.js b/games/cool_platformer.js index 9727401da1..f6d46a4b06 100644 --- a/games/cool_platformer.js +++ b/games/cool_platformer.js @@ -1,8 +1,8 @@ /* @title: cool_platformer +@author: Aiden/Roizor @tags: ['strategy'] @addedOn: 2022-11-12 -@author: Aiden/Roizor */ const player = "p"; diff --git a/games/cops_and_criminals.js b/games/cops_and_criminals.js index 5cac8d7a4d..d189415f84 100644 --- a/games/cops_and_criminals.js +++ b/games/cops_and_criminals.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Cops and criminals @author: Adrian T -@tags: ["maze", "multiplayer", "prison", "escape", "levels", "score"] +@tags: ['puzzle','multiplayer','adventure'] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const mappedSprites = []; diff --git a/games/crappy_bird.js b/games/crappy_bird.js index 0685a7c57e..d12641f3db 100644 --- a/games/crappy_bird.js +++ b/games/crappy_bird.js @@ -1,8 +1,8 @@ /* @title: crappy_bird -@tags: ['classic', 'endless'] -@addedOn: 2022-07-14 @author: ced +@tags: ['endless','retro'] +@addedOn: 2022-07-14 */ const NORMAL_TICK_FREQ = 200; diff --git a/games/creepy_crush.js b/games/creepy_crush.js index f6eb34c5f4..6ed96a8857 100644 --- a/games/creepy_crush.js +++ b/games/creepy_crush.js @@ -1,8 +1,8 @@ /* @title: creepy_crush -@tags: ['logic', 'advanced'] -@addedOn: 2022-11-27 @author: issac +@tags: ['puzzle'] +@addedOn: 2022-11-27 INSTRUCTIONS: diff --git a/games/cricket_frenzy.js b/games/cricket_frenzy.js index 9d67264c7a..f1b534f192 100644 --- a/games/cricket_frenzy.js +++ b/games/cricket_frenzy.js @@ -1,8 +1,8 @@ /* @title: cricket_frenzy -@tags: ['sokoban-style'] -@addedOn: 2022-12-10 @author: aryan.k +@tags: ['puzzle'] +@addedOn: 2022-12-10 */ const player = "p"; const box = "b"; diff --git a/games/crimbletips.js b/games/crimbletips.js index eb41835d70..0d6634140b 100644 --- a/games/crimbletips.js +++ b/games/crimbletips.js @@ -1,8 +1,8 @@ /* @title: CrimbLetips +@author: ShawnM @tags: [] @addedOn: 2022-12-19 -@author: ShawnM */ const Black = "B"; diff --git a/games/cube_escape.js b/games/cube_escape.js index dbe1260bd7..747be996c9 100644 --- a/games/cube_escape.js +++ b/games/cube_escape.js @@ -1,8 +1,8 @@ /* @title: cube_escape -@tags: ['logic'] -@addedOn: 2023-01-07 @author: marios_mitsios +@tags: ['puzzle'] +@addedOn: 2023-01-07 */ // !!! README !!! diff --git a/games/cubefield.js b/games/cubefield.js index 60a6125b4b..914d30707c 100644 --- a/games/cubefield.js +++ b/games/cubefield.js @@ -1,8 +1,8 @@ /* @title: cubefield +@author: jai @tags: ['endless'] @addedOn: 2023-01-10 -@author: jai */ // A + D to move. Dodge the cubes :) diff --git a/games/delightful_mazes.js b/games/delightful_mazes.js index f428781cf7..e77e3fa549 100644 --- a/games/delightful_mazes.js +++ b/games/delightful_mazes.js @@ -1,8 +1,8 @@ /* @title: delightful_mazes -@tags: ['logic'] -@addedOn: 2022-11-15 @author: hephaestushex +@tags: ['puzzle'] +@addedOn: 2022-11-15 */ const player = "p"; diff --git a/games/desi-pong.js b/games/desi-pong.js index 5cf4944759..0a75b0e88a 100644 --- a/games/desi-pong.js +++ b/games/desi-pong.js @@ -1,8 +1,8 @@ /* @title: Desi-Pong -@tags: ['classic'] -@addedOn: 2022-09-14 @author: Arnob Das +@tags: ['retro'] +@addedOn: 2022-09-14 */ const player1 = "1"; diff --git a/games/dicee_dare.js b/games/dicee_dare.js index db45427cad..9ec0757d74 100644 --- a/games/dicee_dare.js +++ b/games/dicee_dare.js @@ -1,7 +1,7 @@ /* @title: dicee_dare @author: Harsh Kumar -@tags: [''] +@tags: [] @addedOn: 2024-01-15 */ const player = "p"; diff --git a/games/dihydrogen_monoxide_free_fall.js b/games/dihydrogen_monoxide_free_fall.js index a7084e4576..b9af7f97c5 100644 --- a/games/dihydrogen_monoxide_free_fall.js +++ b/games/dihydrogen_monoxide_free_fall.js @@ -1,8 +1,8 @@ /* @title: dihydrogen_monoxide_free_fall +@author: aksel s. @tags: ['endless'] @addedOn: 2022-11-06 -@author: aksel s. */ // FLAGS AND VARIABLES diff --git a/games/ding_dong-delivery.js b/games/ding_dong-delivery.js index 3ce4a1b238..ca3cc79942 100644 --- a/games/ding_dong-delivery.js +++ b/games/ding_dong-delivery.js @@ -1,7 +1,9 @@ -//@title: ding_dong-delivery +/* +@title: ding_dong-delivery +@author: cott3-github * efe - slack @tags: [] @addedOn: 2023-09-09 -//@author: cott3-github * efe - slack +*/ //controls: //wasd to move, j to restart level const bell = tune` diff --git a/games/dino-game.js b/games/dino-game.js index 579eea9610..7d0cd07d00 100644 --- a/games/dino-game.js +++ b/games/dino-game.js @@ -1,7 +1,7 @@ /* @title: Save Orpheus - Chrome Dino Game Remake @author: @thetridentguy -@tags: ['classic'] +@tags: ['retro'] @addedOn: 2024-03-29 */ diff --git a/games/dino.js b/games/dino.js index 48e11a16d1..3ddf9f553b 100644 --- a/games/dino.js +++ b/games/dino.js @@ -1,8 +1,8 @@ /* @title: dino +@author: Pfostierer @tags: ['endless'] @addedOn: 2023-02-19 -@author: Pfostierer */ const h = 10; diff --git a/games/dragon.js b/games/dragon.js new file mode 100644 index 0000000000..fc0561daeb --- /dev/null +++ b/games/dragon.js @@ -0,0 +1,376 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: Hard Dragon Game +@author: VoidDevX1 +@tags: [] +@addedOn: 2024-09-27 +*/ + + +/* ----CONTROLS------: + w a s d: to move the dragon + i j k l: to move the fireballs + + ----ABOUT GAME-----(Please READ): + This is a RAGE game. If the fireball is in collsion with the boxes they both + get destroyed. If you reach the end(green box) you progress to the next level. + Also if you mess up in a level you can't reset, you have to reset the entire game. + To make this is even harder you can't choose what fireball you are about to control. + One more there are intentional bugs to make it harder you have to somehow + solve the bug in a creative way. + This game requires MULTIPLE playthroughs to beat! + To make this game a tad bit easier, if you die the level resets not the game. + But if really can't beat a level just change the level through the code. + If you somehow beat the game try SPEEDRUNNING it! + NOTE: THIS GAME IS POSSIBLE TO BEAT just requires alot of thinking and luck :D + + ----Story------: + Your a telepathic dragon instead of brathing flames out of your mouth + you can control flames elsewhere. +*/ + + +const player = "p" +const fire = "f" +const box = "b" +const wall = "w" +const end = "e" +const megaEnd = "m" + +const OST = tune ` +309.2783505154639: F4~309.2783505154639, +309.2783505154639: G4~309.2783505154639, +309.2783505154639: A4~309.2783505154639, +309.2783505154639: A4~309.2783505154639, +309.2783505154639: B4~309.2783505154639 + G4^309.2783505154639, +309.2783505154639: G4~309.2783505154639 + F4^309.2783505154639, +309.2783505154639: E4^309.2783505154639, +309.2783505154639: E4~309.2783505154639 + D4^309.2783505154639, +309.2783505154639: C5~309.2783505154639 + D4^309.2783505154639, +309.2783505154639: E4^309.2783505154639 + D4~309.2783505154639, +309.2783505154639: F4^309.2783505154639 + E4~309.2783505154639, +309.2783505154639: D5~309.2783505154639 + F4~309.2783505154639 + G4^309.2783505154639, +309.2783505154639: F5~309.2783505154639 + A4^309.2783505154639 + G4~309.2783505154639, +309.2783505154639: A4~309.2783505154639 + B4^309.2783505154639, +309.2783505154639: F5~309.2783505154639 + C5^309.2783505154639, +309.2783505154639: D5^309.2783505154639, +309.2783505154639: C5^309.2783505154639, +309.2783505154639: D4~309.2783505154639 + B4^309.2783505154639, +309.2783505154639: D5~309.2783505154639 + A4^309.2783505154639, +309.2783505154639: G4^309.2783505154639, +309.2783505154639: F4^309.2783505154639, +309.2783505154639: F4^309.2783505154639, +309.2783505154639: A4^309.2783505154639, +309.2783505154639: F4~309.2783505154639 + B4^309.2783505154639, +309.2783505154639: C5^309.2783505154639, +309.2783505154639: D5^309.2783505154639, +309.2783505154639, +309.2783505154639: G4~309.2783505154639 + F4^309.2783505154639, +309.2783505154639: A4~309.2783505154639 + G4^309.2783505154639, +309.2783505154639: B4~309.2783505154639 + A4^309.2783505154639, +309.2783505154639: G4~309.2783505154639, +309.2783505154639: G4~309.2783505154639` +const death = tune ` +37.5: B5-37.5 + G5-37.5, +37.5: B5-37.5 + G5-37.5, +37.5: A5-37.5 + F5-37.5, +37.5: A5-37.5 + E5-37.5, +37.5: G5-37.5 + E5-37.5 + D5-37.5, +37.5: F5-37.5 + C5-37.5, +37.5: E5-37.5 + C5-37.5, +37.5: D5-37.5 + B4-37.5, +37.5: C5-37.5 + A4-37.5, +37.5: C5-37.5 + A4-37.5, +37.5: B4-37.5 + A4-37.5, +37.5: A4-37.5 + G4-37.5, +37.5: G4-37.5, +37.5: F4-37.5 + G4-37.5 + A4-37.5 + B4-37.5 + C5-37.5, +37.5: E4-37.5 + G4-37.5 + D5-37.5 + E5-37.5 + F4-37.5, +37.5: E4-37.5 + F4-37.5 + E5-37.5 + F5-37.5 + G5-37.5, +37.5: D4-37.5 + F4-37.5 + F5-37.5 + A5-37.5 + G4-37.5, +37.5: A4/37.5 + G4-37.5 + D4-37.5 + E4-37.5 + G5-37.5, +37.5: C4-37.5 + E4-37.5 + A5-37.5 + G5-37.5 + F5-37.5, +37.5: C4-37.5 + E4-37.5 + A5-37.5 + F5-37.5 + E5-37.5, +37.5: E4-37.5 + A5-37.5 + D5-37.5 + C5-37.5 + B4-37.5, +37.5: E4-37.5 + A5-37.5 + B5-37.5 + G4-37.5, +37.5: F4-37.5 + A5-37.5 + B5-37.5 + A4-37.5, +37.5: F4-37.5 + G5-37.5 + A5-37.5 + B4-37.5, +37.5: F4-37.5 + F5-37.5 + E5-37.5 + D5-37.5 + C5-37.5, +37.5: F4-37.5 + E5-37.5, +37.5: F4-37.5 + E5-37.5, +37.5: G4-37.5 + D5-37.5, +37.5: G4-37.5 + B4-37.5 + C5-37.5, +37.5: G4-37.5 + A4-37.5, +37.5: G4-37.5 + A4-37.5, +37.5` +const win = tune ` +151.5151515151515: B5~151.5151515151515 + A5^151.5151515151515, +151.5151515151515: B5~151.5151515151515 + A5^151.5151515151515, +151.5151515151515: B5~151.5151515151515 + A5^151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: E5^151.5151515151515 + F5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: D5^151.5151515151515 + E5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515, +151.5151515151515: F5^151.5151515151515 + G5~151.5151515151515` + +setLegend( + [player, bitmap` +................ +................ +..........99.... +...........99... +...........3333. +..........33033. +.........333333. +........333..... +.......333...... +333...333....... +.3333333........ +..33333......... +...333.......... +................ +................ +................`], + [fire, bitmap` + ................ + ................ + ................ + ................ + ................ + .......999...... + .....9933399.... + ...999333399.... + ..9999936399.... + ..9999333399.... + ...99993339..... + ....9933399..... + ......3999...... + ................ + ................ + ................ + `], + [box, bitmap ` +9999999999999999 +9CCCCCCCCCCCCCC9 +9CCCCCCCCCC99CC9 +9CCCCCCCCCCC9CC9 +9CCCCC9CCCCC9CC9 +9CCCCC99CCCCCC99 +99CCCCC99CCCCC99 +99CCCCCC9CCCCC99 +99CCCCCC99CCCC99 +99CCCCCCC99CCC99 +9CCCCCCCCCCCCCC9 +9CCCCCCCCCCCCCC9 +9CC9CCCCCCCCCCC9 +9CC99CCCCCCCCCC9 +9CCCCCCCCCCCCCC9 +9999999999999999`], + [wall, bitmap ` +1111111111111111 +11111LLLLLLLLLL1 +11111LLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLL1LL1 +1LLLLLLLL1LL1LL1 +1LLLLLLLLLLL1LL1 +1LLLLLLLLLLLLLL1 +11LLLL111LLLLLL1 +1LLLLLLL111LLLL1 +1LLLLLLLLLLLLLL1 +1LLLLLLLLLLLLLL1 +1LLL1LLLLLLLLLL1 +1LLLL111LLLLLLL1 +1LLLLLLLLL111111 +1111111111111111`], + [end, bitmap ` +DDDDDDDDDDDDDDDD +D44444444444444D +D4444444DDDD444D +D444444DD44D444D +D44DD44D444DD44D +D44D4444D444DD4D +D4D44444D4444D4D +D4D4444D44444D4D +D4DD44DD44444D4D +D44D44DD4444D44D +D44D444DD444D44D +D4DD4444D44DD44D +DDD444DD4DD444DD +DDD4444DDD44DDDD +DDD444444444DDDD +DDDDDDDDDDDDDDDD`], + [megaEnd, bitmap ` +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +44DDD4DD44D4DDD4 +44D444DD44D4D44D +44DDD4D4D4D4D44D +44D444D4D4D4D44D +44DDD4D44DD4DDD4 +4444444444444444 +4DDDDDDDDDDDDDDD +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444`] +) + +setSolids([player, box, wall]) + +let level = 0 +const levels = [ + map` +wwwwwwww +w......w +w.wp...w +wwwww..w +web...fw +wwwwwwww`, + map ` +wwwwwwww +w.fb...w +w.fb...e +w.fb...w +wpfb...w +wwwwwwww`, + map ` +ewf...bf +.wf...b. +.w....w. +.wpw.ww. +.wwwww.. +.b.....f`, + map ` +........ +f.www.f. +..wfb... +bbwpwbbb +f.www... +f..e.fff`, + map ` +w.b..wpf +ww.w..wb +fw..w.ff +..w..www +bbfffffw +mbffwwww` +] + +playTune(OST, Infinity); + +setMap(levels[level]); + +setPushables({ + [player]: [] +}) + + +onInput("s", () => { + getFirst(player).y += 1 +}) + +onInput("w", () => { + getFirst(player).y -= 1 +}) + +onInput("d", () => { + getFirst(player).x += 1 +}) + +onInput("a", () => { + getFirst(player).x -= 1 +}) + +onInput("j", () => { + getFirst(fire).x -= 1 +}) + +onInput("l", () => { + getFirst(fire).x += 1 +}) + +onInput("i", () => { + getFirst(fire).y -= 1 +}) + +onInput("k", () => { + getFirst(fire).y += 1 +}) + +onInput("l", () => { + getFirst(fire).x += 1 +}) + +function collisionFor1(sprite1, sprite2) { + if (tilesWith(sprite1, sprite2).length > 0) { + const sprite = getFirst(sprite1) + sprite.remove() + + if (sprite1 == player && sprite2 == end) { + level++ + setMap(levels[level]); + } + + if (sprite1 == player && sprite2 == fire) { + playTune(death); + setMap(levels[level]); + } + + if (sprite1 == player && sprite2 == megaEnd) { + playTune(win, Infinity) + addText("You Win", { + x: 4, + y: 6, + color: color `4` + }) + } + } +} + +function collisionFor2(sprite1, sprite2) { + if (tilesWith(sprite1, sprite2).length > 0) { + const overlap = tilesWith(sprite1, sprite2).flatMap(tile => tile); + overlap.forEach(sprite => sprite.remove()) + } +} + +afterInput(() => { + collisionFor2(box, fire); + collisionFor1(fire, wall); + collisionFor1(player, fire); + collisionFor2(end, fire); + if (level < levels.length - 1) { + collisionFor1(player, end); + } + collisionFor1(player, megaEnd); +}) diff --git a/games/dropper.js b/games/dropper.js index ce8b14d838..5708cb26cc 100644 --- a/games/dropper.js +++ b/games/dropper.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: dropper @author: hinoob -@tags: ['falling', 'gravity', 'descent', 'singleplayer', 'obstacle'] +@tags: ['action','simulation','puzzle'] @addedOn: 2024-08-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const playera = "1" diff --git a/games/dual_state_machine.js b/games/dual_state_machine.js index 2bd1f17687..d7d1198edc 100644 --- a/games/dual_state_machine.js +++ b/games/dual_state_machine.js @@ -1,8 +1,8 @@ /* @title: dual_state_machine +@author: Leonard (Omay) @tags: ['strategy'] @addedOn: 2022-11-11 -@author: Leonard (Omay) you only win when it turns green... diff --git a/games/dungenrun.js b/games/dungenrun.js new file mode 100644 index 0000000000..f8b1141bef --- /dev/null +++ b/games/dungenrun.js @@ -0,0 +1,268 @@ +/* +@title: dungen run +@author: Saurav Alva & Gaurav Alva +@tags: [] +@addedOn: 2024-08-15 + +@description : move to exit from start collecting keys give you automatic points +use A S W D for movement & I to reset game +*/ + + + +const background = "b"; +const wall = "w"; +const player = "p"; +const key = "k"; +const exit = "e"; + +let hasKey = false; +let level = 0; +let points = 0; + +setLegend( + [background, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [wall, bitmap` +0000000000000000 +0CC99FFLL1122FF0 +03CC99FFLL1122F0 +093CC99FFLL11220 +0993CC99FFLL1120 +0F993CC99FFLL110 +0FF993CC99FFLL10 +0LFF993CC99FFLL0 +0LLFF993CC99FFL0 +01LLFF993CC99FF0 +011LLFF993CC99F0 +0211LLFF993CC990 +02211LLFF993CC90 +0F2211LLFF993CC0 +0FF2211LLFF993C0 +0000000000000000`], + [player, bitmap` +.....000000..... +....06666FF0.... +...0666666FF0... +..003333333300.. +.06666666666660. +066F00000000F660 +06F0900900000F60 +.0F0010010000F0. +..00C29C290000.. +...0F9999F000... +....0FFFF0300... +...03999333330.. +..093999303990.. +..090777770990.. +...0070007700... +....090..090....`], + [key, bitmap` +................ +................ +................ +................ +................ +..........66666. +........666FFF6. +........66FFFF6F +66666666666FFF6F +6.6.....6F66FF6F +........66F66F6. +..........66666. +................ +................ +................ +................`], + [exit, bitmap` +0000000000000000 +0333333333333330 +0300000000000030 +0300000000000030 +0300000000000030 +0300000000000030 +0307770077700030 +0307006067666030 +0307700607060030 +0307006067060030 +0307770077700030 +0300000000000030 +0300000000000030 +0300000000000030 +0333333333333330 +0000000000000000`] +); + +setSolids([player, wall]); + +let levels = [ + map` +.......wwwwwwwwwwe +.......w...ww..... +wwwwwwwwww..w.wwww +.w.......w.ww.w.w. +.wwww.w.ww.w..w.w. +.w..www.........w. +.w.....wwww.w...w. +ww.ww...k...w...w. +....w.w..w.ww.wwww +www.w.w.www...w... +.pw.w.w....w....w. +w....wwwwww.w..ww. +w.ww.w...w..ww.w.w +www.wwww.wwww.ww.w`, // Level 1 + map` +......wwwwwwwwwwww +......w.w........w +wwwwwww..ww.w.w..w +ww..w..w..w..w..ww +w.w.w.wwwew.www..w +w.w.w...www...ww.w +w.w.w.w.ww..w..w.w +w.w.w.w.k..w..ww.w +w.w...w..www...w.w +w.w.w.w.w....w.w.w +w.ww..w.w.wwww.w.w +w..w.ww.w....w.w.e +wpw...w.ww.ww..www +w...w.wwwww.wwwwww`, // Level 2 + map` +.......wwwwwwwwwww +.......w....w..w.w +wwwwwwww..w......w +pwww.....w.w.www.w +...w.w.ww...k..w.w +w..ww....w..www..w +w.ww..ww.ww.w....w +w......w.w..w.ww.w +w.wwwww..w..w.w..w +w.w.....ww.w..ww.w +w.w.wwww..w..w...w +w..ww....w..w....w +w.wwwwwwwwewwwwwww +www.w.w.wwwww.w.ww`, // Level 3 + map` +.......wwwwwwwwwww +.......we......... +wwwwwwwwwwww..w... +w..w.w......w.www. +wwww.w.wwwww..w... +w......w....ww..w. +wwwwwwew.ww..w.ww. +w....www...w.w.... +wwww.w.www.w..www. +ww...w.....ww..k.. +ww.wwww.w.ww.w.www +ww......w....w.w.. +p.wwwwwww.wwww.w.. +w.................`, // Level 4 + map` +.......wwwwwwwwwww +.......w........ww +wwwwwwww.wwww..w.w +.w..w........w..ww +..w....www.ww.w..w +wwwww.ww.ww.www.ww +w.........w.w.w..w +w.wwww..w...w.w.ww +w....w.wwww...w.ww +wwww.w....w..w..ww +w..w.wwwkw.ww..w.w +wp.w.w..w.w...ww.w +.......w..w.w....e +wwwww.wwwwwwww.www`, // Level 5 - Boss Level + map` +.......wwwwwwwwwww +.......w..w......w +wwwwwwwww..w.www.w +w....w...w.w.w.w.w +.pw.w.wwww.w...w.w +www.w.w....www.w.w +....w.w.ww..w..w.w +w.www.w..w..w..w.w +w....w..w.w.w..w.w +w.w.ww.wwww.ww.w.w +w.w....ww......w.w +w.ww.w..w.wwww.w.w +ww.w.wwww....kww.w +wwwwww.www.www.wew`, // Level 6 - Boss Level + map` +.......wwwwwwwwwww +.......w........ww +wwwwwwww.wwww..w.w +.w..w........w..ww +..w....www.ww.w..w +wwwww.ww.w..www.ww +w.........w.wkw..w +w.wwww..w...w.w.ww +w....w.wwww...w.ww +ww.w.w....w..w..ww +w..w.www.w.ww..w.w +wp.w....w.....w..w +w.w..w.w.wew.w.www +wwwwwww.w.wwwwwwww`, // Level 7 - Boss Level +]; + +setBackground(background); +setMap(levels[level]); + +onInput("w", () => getFirst(player).y -= 1); +onInput("a", () => getFirst(player).x -= 1); +onInput("s", () => getFirst(player).y += 1); +onInput("d", () => getFirst(player).x += 1); +onInput("i", resetGame); // Reset game on pressing 'i' + + + afterInput(() => { + if (tilesWith(player, key).length > 0) { + getFirst(key).remove(); + points += 5; // Add points for collecting a key + hasKey = true; + } + + if (tilesWith(player, exit).length > 0) { + level += 1; + if (level < levels.length) { + setMap(levels[level]); + } else { + addText("You Win!", { x: 6, y: 2, color: color`2` }); + addText(`Points: ${points}`, { x: 6, y: 4, color: color`2` }); + resetGame(); // Reset game after displaying the win message + } + } + + displayStatus(); +}); + + +function resetGame() { + level = 0; + points = 0; + hasKey = false; + setMap(levels[level]); + displayStatus(); +} + +function displayStatus() { + clearText(); + addText(`lvl: ${level + 1}`, { x: 0, y: 0, color: color`2` }); + addText(`Pts: ${points}`, { x: 0, y: 1, color: color`2` }); +} + +displayStatus(); // Initial status display + diff --git a/games/dvd_logo_simulator.js b/games/dvd_logo_simulator.js index 0842449ec0..a681cb002d 100644 --- a/games/dvd_logo_simulator.js +++ b/games/dvd_logo_simulator.js @@ -1,8 +1,8 @@ /* @title: DVD logo Simulator -@tags: ['simulation', 'demo', 'endless'] -@addedOn: 2022-12-18 @author: the456gamer +@tags: ['endless','simulation'] +@addedOn: 2022-12-18 hit run, enjoy. J -> restart from random position diff --git a/games/eager_rattata.js b/games/eager_rattata.js new file mode 100644 index 0000000000..b594183472 --- /dev/null +++ b/games/eager_rattata.js @@ -0,0 +1,386 @@ +/* +@title: JumperWho +@author: CreativeDragon1 +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const block = "b" +const pipe_open = "a" +const acid = "c" +const finish_space = "i" +const heart = "h" +const heart_line = "l" +const support_line ="z" +const block_hang="x" +const dead_support ="y" +const block_chain ="t" +const holder="o" +let player_y = 1 +let hearts = 0 +const blue="h" + +setLegend( + [player, bitmap` +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666 +6660006666000666 +6660006666000666 +6660006666000666 +6666666666666666 +6666666666666666 +6666666666666666 +6666006666666666 +6666600000066666 +6666666666666666 +6666666666666666 +6666666666666666 +6666666666666666`], + [block, bitmap` +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCC999CCCCCCC +CCCCC99999CCCCCC +CCCCC997799CCCCC +9CCC99777799CCC9 +99CC9777777CCCC9 +79CC777777CCCCC9 +79CC77777CCCCCC7 +79CC7777CC99CCC7 +79CC777CC997CCC7 +79CC77CC9977CCC7 +79CC7CC99777CCC7 +79CCCC997777CCC7 +79CCC9977777CCC7`], + [block_hang, bitmap` +C00CCCCCCCCCC00C +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +9CCCCCCCCCCCCCCC +9999CCCCCCCCCCC7 +7779999CCCCCC777 +7777779999977777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`], + [block_chain, bitmap` +7077077777707707 +7711777777771177 +7177177777717717 +7L77L777777L77L7 +7077077777707707 +7711777777771177 +7177177777717717 +7L77L777777L77L7 +7077077777707707 +7711777777771177 +7177177777717717 +7L77L777777L77L7 +7077077777707707 +7711777777771177 +7177177777717717 +7L77L777777L77L7`], + [finish_space, bitmap` +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444`], + [blue, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777`], + [acid, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444`], + [heart, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7700000770000077 +7003330000333007 +7032223003333307 +7023333333333307 +7033333333333307 +7003333333333007 +7700333333330077 +7770033333300777 +7777003333007777 +7777700330077777 +7777770000777777 +7777777777777777 +7777777777777777`], + [heart_line, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7700000770000077 +7007770000777007 +7077777007777707 +7077777777777707 +7077777777777707 +7007777777777007 +7700777777770077 +7770077777700777 +7777007777007777 +7777700770077777 +7777770000777777 +7777777777777777 +7777777777777777`], + [support_line, bitmap` +79CCC7777777CCC7 +79CCCC777777CCC7 +79CCCCC77777CCC7 +79CC79CC7777CCC7 +79CC799CC777CCC7 +79CC7799CC77CCC7 +79CC77799CC7CCC7 +79CC777799CCCCC7 +79CC7777799CCCC7 +79CC77777CCCCCC7 +79CC7777CC99CCC7 +79CC777CC997CCC7 +79CC77CC9977CCC7 +79CC7CC99777CCC7 +79CCCC997777CCC7 +79CCC9977777CCC7`], + [dead_support, bitmap` +79CCC7777777CCC7 +79CCCC777777CCC7 +79CC9CC77777CCC7 +79CC99CC7777CCC7 +79CC799CC777CCC7 +79CC7799CC77CCC7 +79CC77799CC7CCC7 +79CC777799CCCCC7 +49CC4444499CCCC4 +49CC44444CCCCCC4 +49CC4444CC99CCC4 +49CC444CC994CCC4 +49CC44CC9944CCC4 +49CC4CC99444CCC4 +49CCCC994444CCC4 +49CCC9944444CCC4`], + [holder, bitmap` +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7799999999999977 +79CCCCCCCCCCCCC7 +79CCCCCCCCCCCCC7 +79CCCCCCCCCCCCC7 +779CCCCCCCCCCC77 +771L39666693L177 +7710339669330177 +7710733993370177 +7177073333707717 +7L77L773377L77L7`] +) + +setSolids([player, block]) + +let level = 0 +let playerX = 0 +let playerY = 0 + +const levels = [ + map` +...ohohohhh +hhhthththhh +phhthththhi +bbhxhxhxhbb +zzhhhhhhhzz +yycccccccyy`, + map` +............ +............ +............ +.....b..b..i +p..b..b.zbbb +bb......zzzz +yyccccccyyyy`, + map` +............. +............i +...b.b.b.b.bb +.b........... +...bb........ +......b.b.... +p.........b.. +bbb.b.......b +bbb...b.bb.b. +bbbcccccccccc` +] + +const youWin = map` +.......................... +.i......i...iiiii.i.....i. +.i...i..i.....i...ii....i. +.ii..i..i.....i...i.i...i. +..i.ii.i......i...i..i..i. +..i.iiii......i...i...i.i. +..iii.ii......i...i....ii. +...i...i....iiiii.i.....i. +..........................` +const youlose = map` +............................... +.i......iiiii....iiiii.iiiiiii. +.i.....i.....i..i.........i.... +.i....i.......i.i.........i.... +.i....i.......i.i.........i.... +.i....i.......i.ii........i.... +.i....i.......i...i.......i.... +.i....i.......i....ii.....i.... +.i....i.......i......i....i.... +.i....i.......i......i....i.... +.i....i.......i......i....i.... +.i....i.......i.i....i....i.... +.i.....i.....i...i..i.....i.... +.iiiii..iiiii.....ii......i.... +...............................` +setMap(levels[level]) + +setPushables({ + [player]: [] +}) + +onInput("s", () => { + getFirst(player).y += 1 +}) + +onInput("w", () => { + getFirst(player).y -= 1 +}) + +onInput("a", () => { + getFirst(player).x -= 1 + //setTimeout(function(){ + //getFirst(player).y += 1 + //}) +}) + +onInput("d", () => { + getFirst(player).x += 1 + setTimeout(function() { + getFirst(player).y += 1 + }, 300) +}) + +afterInput(() => { + if (getFirst(player).y + 1 == getAll(pipe_open).y) { + getFirst(player).y += 1 + } +}) + + +function heart_load() { + if (hearts == 0) { + addSprite(0,0, heart) + addSprite(1,0, heart) + addSprite(2,0, heart) + } + if (hearts == 1) { + addSprite(2, 0, heart_line) + addSprite(0,0, heart) + addSprite(1,0, heart) + } + if (hearts == 2) { + addSprite(2, 0, heart_line) + addSprite(0,0, heart) + addSprite(1,0, heart_line) + } + if (hearts == 3) { + addSprite(2, 0, heart_line) + addSprite(0,0, heart_line) + addSprite(1,0, heart_line) + setMap(youlose) + } +} +addSprite(0,0, heart) +addSprite(1,0, heart) +addSprite(2,0, heart) + +setInterval(() => { + getFirst(player).y += player_y + if (tilesWith(acid, player).length >= 1){ + level = level + setMap(levels[level]) + hearts += 1 + heart_load() + } + if (tilesWith(dead_support, player).length >= 1){ + level = level + setMap(levels[level]) + hearts += 1 + heart_load() + } +}, 800) + +setInterval(() => { + if (tilesWith(finish_space, player).length >= 1) { + getFirst(player).x = 0 + getFirst(player).y = 0 + level = level + 1 + if (level >= levels.length) { + setMap(youWin) + } else { + setMap(levels[level]) + heart_load() + } + } +}, 5) + diff --git a/games/earth-takeover-2.js b/games/earth-takeover-2.js index 6388b58f55..2f007d39f2 100644 --- a/games/earth-takeover-2.js +++ b/games/earth-takeover-2.js @@ -1,9 +1,9 @@ /* @title: EARTH TAKEOVER (maze) +@author: @SeanK @tags: [] -@img: "" @addedOn: 2024-4-20 -@author: @SeanK +@img: "" diff --git a/games/eat_the_cake.js b/games/eat_the_cake.js index 792177ce57..0d798ad4b6 100644 --- a/games/eat_the_cake.js +++ b/games/eat_the_cake.js @@ -1,8 +1,8 @@ /* @title: Eat the cake -@tags: ['beginner', 'hackable'] -@addedOn: 2022-10-13 @author: _klyap_ +@tags: [] +@addedOn: 2022-10-13 */ const player = "p"; diff --git a/games/echolocation.js b/games/echolocation.js index 525ad156e7..3d96241b0c 100644 --- a/games/echolocation.js +++ b/games/echolocation.js @@ -1,8 +1,8 @@ /* @title: echolocation -@tags: ['logic'] -@addedOn: 2022-11-13 @author: Leonard (Omay) +@tags: ['puzzle'] +@addedOn: 2022-11-13 find the goal ijkl to "look" diff --git a/games/enigma.js b/games/enigma.js new file mode 100644 index 0000000000..5e9076ae2f --- /dev/null +++ b/games/enigma.js @@ -0,0 +1,1814 @@ +/* +@title: Enigma +@author: Ben Gertler +@tags: ['sandbox','simulation'] +@addedOn: 2024-08-28 +*/ + +/* +BASIC CONTROLS: +WASD to move the cursor (the red box). +Note that you can't always move the cursor in every direction. +L to select. +J to go back. + +MAPS: +Main Menu: Table with a note and the Enigma machine. +Note: Shows the current objective. Will update once correctly (de)ciphered. +Enigma Config: Menu with machine configuration options. +Enigma: Main machine. Select letters to (de)cipher them. X to clear ciphertext. +Explain: Turn on step-by-step descriptions of Enigma cipher, progressed by selecting. +Wheels: Use arrows to rotate wheels. Select two numbers at the top to swap wheel positions. +Plugs: Select plug 1 or plug 2 circles, then select two letters to plug together. X to clear. + +ENIGMA CIPHER: + 1. If input is on a plug, swap to the other letter with the same plug. + 2. Send through wheel in position 1 (right). +Wheels are rotating scramblers with 26 unique paths, one for each letter. +The path taken is determined by the input letter and the wheel's rotation. +An input of "a" on an unrotated wheel (rotation a) will take path a. +An input of "a" on a rotation b wheel will take path b. + 3. Send through wheel in position 2 (middle). + 4. Send through wheel in position 3 (left). + 5. Send through reflector, changing letter and sending it in reverse. +Signal goes left to right now, so all wheel paths are reversed. + 6. Send through wheel in position 3. + 7. Send through wheel in position 2. + 8. Send through wheel in position 1. + 9. If output is on a plug, swap to other letter with the same plug. + 10. Rotate wheels. +Usually, only position 1 rotates. If 1 rotates from z to a, position 2 rotates. +Same with positions 2 and 3. + 11. Tada! You Enigmatized a letter. + +You can find much better explanations if you're interested. + +TIPS: +* Remember, the rightmost wheel is position 1. i.e. starting wheel position is 1, 2, 3. +* Wheel order and rotation on the note will correspond to right to left wheels. +* Try not to exit out of Enigma while on explain mode until you see the ciphertext at the top. +* Since wheels rotate on each input, you have to set them back if you try to redo something. +* Just because you don't see ciphertext doesn't mean it's gone. The display scrolls automatically. +* If only a few letters are incorrect, you may be inputting the wrong letters or your plugs may be off. +* There won't be any indication you've completed the note; you have to check it to see. +* The note has four sequential tasks. Try to do them all! +*/ + +//tile definitions +const cursor = "C" +const reflectorTile = "R" +const button = "B" +const divider = "D" +const arrowL = "<" +const arrowR = ">" +const redX = "X" +const checkmark = "*" +const enigma = "E" +const note = "N" +const table = "T" +const a = "a" +const b = "b" +const c = "c" +const d = "d" +const e = "e" +const f = "f" +const g = "g" +const h = "h" +const i = "i" +const j = "j" +const k = "k" +const l = "l" +const m = "m" +const n = "n" +const o = "o" +const p = "p" +const q = "q" +const r = "r" +const s = "s" +const t = "t" +const u = "u" +const v = "v" +const w = "w" +const x = "x" +const y = "y" +const z = "z" +//1, 2, and 3 are here, but variables don't work so well there. remember to put in string +const plugTile1 = "(" +const plugTile2 = ")" +const scramTop = "[" +const scramMid = "|" +const scramBot = "]" +const light = "L" +const blank = "-" + +setLegend( + [cursor, bitmap` +3333333333333333 +3333333333333333 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +33............33 +3333333333333333 +3333333333333333`], + [reflectorTile, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`], + [button, bitmap` +....00000000.... +...0........0... +..0..........0.. +.0............0. +0..............0 +0..............0 +0..............0 +0..............0 +0..............0 +0..............0 +0..............0 +0..............0 +.0............0. +..0..........0.. +...0........0... +....00000000....`], + [divider, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [arrowL, bitmap` +................ +................ +................ +................ +................ +......00........ +.....00......... +....00.......... +...00........... +....00.......... +.....00......... +......00........ +................ +................ +................ +................`], + [arrowR, bitmap` +................ +................ +................ +................ +................ +........00...... +.........00..... +..........00.... +...........00... +..........00.... +.........00..... +........00...... +................ +................ +................ +................`], + [redX, bitmap` +................ +................ +.33..........33. +..33........33.. +...33......33... +....33....33.... +.....33..33..... +......3333...... +.......33....... +......3333...... +.....33..33..... +....33....33.... +...33......33... +..33........33.. +.33..........33. +................`], + [checkmark, bitmap` +................ +................ +................ +................ +.............D.. +............DD.. +...........DD... +..........DD.... +..D......DD..... +..DD....DD...... +...DD..DD....... +....DDDD........ +.....DD......... +................ +................ +................`], + [enigma, bitmap` +................ +..000000000000.. +..022222222220.. +..02122L2L2L20.. +..02122L2L2L20.. +..02122L2L2L20.. +..022222222220.. +..011111111110.. +..011111111110.. +..011111111110.. +..000000000000.. +..011111111110.. +..011111111110.. +..011111111110.. +..000000000000.. +................`], + [note, bitmap` +................ +................ +................ +................ +........2....... +.......222...... +......22222..... +.....2222222.... +....2222222..... +.....22222...... +......222....... +.......2........ +................ +................ +................ +................`], + [table, bitmap` +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC`], + [a, bitmap` +................ +................ +................ +................ +................ +................ +................ +.....00000...... +.........00..... +.....000000..... +....00...00..... +.....0000.00.... +................ +................ +................ +................`], + [b, bitmap` +................ +................ +................ +................ +................ +....000......... +.....00......... +.....00000...... +.....00..00..... +.....00..00..... +.....00..00..... +....00.000...... +................ +................ +................ +................`], + [c, bitmap` +................ +................ +................ +................ +................ +................ +................ +.....0000....... +....00..00...... +....00.......... +....00..00...... +.....0000....... +................ +................ +................ +................`], + [d, bitmap` +................ +................ +................ +................ +................ +.......000...... +........00...... +.....00000...... +....00..00...... +....00..00...... +....00..00...... +.....000.00..... +................ +................ +................ +................`], + [e, bitmap` +................ +................ +................ +................ +................ +................ +................ +.....0000....... +....00..00...... +....000000...... +....00.......... +.....0000....... +................ +................ +................ +................`], + [f, bitmap` +................ +................ +................ +................ +................ +......000....... +.....00.00...... +.....00......... +....0000........ +.....00......... +.....00......... +....0000........ +................ +................ +................ +................`], + [g, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +.....000.00..... +....00..00...... +....00..00...... +.....00000...... +........00...... +....00000....... +................ +................`], + [h, bitmap` +................ +................ +................ +................ +................ +....000......... +.....00......... +.....00.00...... +.....000.00..... +.....00..00..... +.....00..00..... +....000..00..... +................ +................ +................ +................`], + [i, bitmap` +................ +................ +................ +................ +................ +......00........ +................ +.....000........ +......00........ +......00........ +......00........ +....000000...... +................ +................ +................ +................`], + [j, bitmap` +................ +................ +................ +................ +................ +........00...... +................ +.......000...... +........00...... +........00...... +....00..00...... +....00..00...... +.....0000....... +................ +................ +................`], + [k, bitmap` +................ +................ +................ +................ +................ +....000......... +.....00......... +.....00..00..... +.....00.00...... +.....0000....... +.....00.00...... +....000..00..... +................ +................ +................ +................`], + [l, bitmap` +................ +................ +................ +................ +................ +.....000........ +......00........ +......00........ +......00........ +......00........ +......00........ +....000000...... +................ +................ +................ +................`], + [m, bitmap` +................ +................ +................ +................ +................ +................ +................ +....00..00...... +....0000000..... +....0000000..... +....00.0.00..... +....00...00..... +................ +................ +................ +................`], + [n, bitmap` +................ +................ +................ +................ +................ +................ +................ +....00000....... +....00..00...... +....00..00...... +....00..00...... +....00..00...... +................ +................ +................ +................`], + [o, bitmap` +................ +................ +................ +................ +................ +................ +................ +.....0000....... +....00..00...... +....00..00...... +....00..00...... +.....0000....... +................ +................ +................ +................`], + [p, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +....00.000...... +.....00..00..... +.....00..00..... +.....00000...... +.....00......... +....0000........ +................ +................`], + [q, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +.....000.00..... +....00..00...... +....00..00...... +.....00000...... +........00...... +.......0000..... +................ +................`], + [r, bitmap` +................ +................ +................ +................ +................ +................ +................ +....00.000...... +.....000.00..... +.....00..00..... +.....00......... +....0000........ +................ +................ +................ +................`], + [s, bitmap` +................ +................ +................ +................ +................ +................ +................ +.....00000...... +....00.......... +.....0000....... +........00...... +....00000....... +................ +................ +................ +................`], + [t, bitmap` +................ +................ +................ +................ +................ +......0......... +.....00......... +....00000....... +.....00......... +.....00......... +.....00.0....... +......00........ +................ +................ +................ +................`], + [u, bitmap` +................ +................ +................ +................ +................ +................ +................ +....00..00...... +....00..00...... +....00..00...... +....00..00...... +.....000.00..... +................ +................ +................ +................`], + [v, bitmap` +................ +................ +................ +................ +................ +................ +................ +....00..00...... +....00..00...... +....00..00...... +.....0000....... +......00........ +................ +................ +................ +................`], + [w, bitmap` +................ +................ +................ +................ +................ +................ +................ +....00...00..... +....00.0.00..... +....0000000..... +....0000000..... +.....00.00...... +................ +................ +................ +................`], + [x, bitmap` +................ +................ +................ +................ +................ +................ +................ +....00...00..... +.....00.00...... +......000....... +.....00.00...... +....00...00..... +................ +................ +................ +................`], + [y, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +....00..00...... +....00..00...... +....00..00...... +.....00000...... +........00...... +....00000....... +................ +................`], + [z, bitmap` +................ +................ +................ +................ +................ +................ +................ +....000000...... +....0..00....... +......00........ +.....00..0...... +....000000...... +................ +................ +................ +................`], + ["1", bitmap` +................ +................ +................ +................ +................ +.......00....... +......000....... +.......00....... +.......00....... +.......00....... +.......00....... +.....000000..... +................ +................ +................ +................`], + ["2", bitmap` +................ +................ +................ +................ +................ +......0000...... +.....00..00..... +.........00..... +.......000...... +......00........ +.....00..00..... +.....000000..... +................ +................ +................ +................`], + ["3", bitmap` +................ +................ +................ +................ +................ +.....000000..... +........00...... +.......00....... +......0000...... +.........00..... +.....00..00..... +......0000...... +................ +................ +................ +................`], + [plugTile1, bitmap` +................ +....55555555.... +...5555555555... +..555555555555.. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +.55555555555555. +..555555555555.. +...5555555555... +....55555555.... +................`], + [plugTile2, bitmap` +................ +....DDDDDDDD.... +...DDDDDDDDDD... +..DDDDDDDDDDDD.. +.DDDDDDDDDDDDDD. +.DDDDDDDDDDDDDD. +.DDDDDDDDDDDDDD. +.DDDDDDDDDDDDDD. +.DDDDDDDDDDDDDD. +.DDDDDDDDDDDDDD. +.DDDDDDDDDDDDDD. +.DDDDDDDDDDDDDD. +..DDDDDDDDDDDD.. +...DDDDDDDDDD... +....DDDDDDDD.... +................`], + [scramTop, bitmap` +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111..`], + [scramMid, bitmap` +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL.. +..LLLLLLLLLLLL..`], + [scramBot, bitmap` +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111.. +..111111111111..`], + [light, bitmap` +................ +....66666666.... +...6666666666... +..666666666666.. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +.66666666666666. +..666666666666.. +...6666666666... +....66666666.... +................`], + [blank, bitmap` +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................`] +) + +setSolids([cursor, divider, blank]) + +//map definitions +var level +const levels = [ + map` +.......... +..R.1.1.1. +..R.2.2.2. +..R.3.3.3. +qwertyuiop +asdfghjkl. +.zxcvbnm.. +DDDDDDDDDD +qwertyuiop +asdfghjkl. +Czxcvbnm.X`, //main machine + map` +........... +........... +..[..[..[.. +..|..|..|.. +..]..]..].. +.<.><.><.>. +.....C..... +...........`, //wheel configuration + map` +(...X..... +)...X..... +.......... +qwertyuiop +asdfghjkl. +Czxcvbnm..`, //plug configuration + map` +Lenigma. +.explain +Lwheels. +Lplugs..`, //enigma main menu + map` +--- +NCE +---`, //table with note and enigma + map` +..... +..... +..... +.....` //note +] + +function updateLevel(inputLevel) { + clearText() + level = inputLevel + setMap(levels[level]) //make it look nice + if (level == 0) { + updateKeyboard(0, 8, 1) + updateScramblers() + if (ciphertext.length != 0) { + addText(displayCiphertext, { + x: 3, + y: 0, + color: color`3` + }) + addSprite((getFirst(decapitalize(ciphertext.charAt(ciphertext.length - 1)))).x, (getFirst(decapitalize(ciphertext.charAt(ciphertext.length - 1)))).y, light) + } + } + if (level == 1) { + updateScramblers() + } + if (level == 2) { + updateKeyboard(0, 3, 0) + addText("PLUG 1", { + x: 2, + y: 3, + color: color`5` + }) + addText("PLUG 2", { + x: 2, + y: 5, + color: color`D` + }) + } + if (level == 3) { + addSprite(0, 0, cursor) + if (explain == true) { + addSprite(0, 1, checkmark) + } else { + addSprite(0, 1, redX) + } + } + if (level == 4) { + setBackground(table) + } else { + setBackground(blank) + } + if (level == 5) { + if (tutorialLevel == 0) { + addText("Encode:", { + x: 1, + y: 1, + color: color`0` + }) + addText("enigma", { + x: 1, + y: 2, + color: color`0` + }) + addText("Order: 1, 2, 3", { + x: 1, + y: 4, + color: color`0` + }) + addText("Rotation: a, a, a", { + x: 1, + y: 5, + color: color`0` + }) + addText("Plugs: None", { + x: 1, + y: 6, + color: color`0` + }) + } + else if (tutorialLevel == 1) { + addSprite(0, 0, checkmark) + addText("AKXINU", { + x: 4, + y: 0, + color: color`0` + }) + + addText("Decode:", { + x: 1, + y: 4, + color: color`0` + }) + addText("DQBDNKVTTP", { + x: 1, + y: 5, + color: color`0` + }) + addText("Order: 1, 2, 3", { + x: 1, + y: 7, + color: color`0` + }) + addText("Rotation: w, m, u", { + x: 1, + y: 8, + color: color`0` + }) + addText("Plugs: None", { + x: 1, + y: 9, + color: color`0` + }) + } + else if (tutorialLevel == 2) { + addSprite(0, 0, checkmark) + addText("AKXINU", { + x: 4, + y: 0, + color: color`0` + }) + addText("helloworld", { + x: 4, + y: 1, + color: color`0` + }) + + addText("Encode:", { + x: 1, + y: 4, + color: color`0` + }) + addText("secretsgohere", { + x: 1, + y: 5, + color: color`0` + }) + addText("Order: 1, 2, 3", { + x: 1, + y: 7, + color: color`0` + }) + addText("Rotation: n, o, m", { + x: 1, + y: 8, + color: color`0` + }) + addText("Plugs: e > z", { + x: 1, + y: 9, + color: color`0` + }) + } + else if (tutorialLevel == 3) { + addSprite(0, 0, checkmark) + addText("AKXINU", { + x: 4, + y: 0, + color: color`0` + }) + addText("helloworld", { + x: 4, + y: 1, + color: color`0` + }) + addText("ESGHAGZMKLVNC", { + x: 4, + y: 2, + color: color`0` + }) + + addText("Decode:", { + x: 1, + y: 4, + color: color`0` + }) + addText("WLJXGJJREQXFAWTB", { + x: 1, + y: 5, + color: color`0` + }) + addText("Order: 3, 1, 2", { + x: 1, + y: 7, + color: color`0` + }) + addText("Rotation: u, f, n", { + x: 1, + y: 8, + color: color`0` + }) + addText("Plugs: f > o, i > c", { + x: 1, + y: 9, + color: color`0` + }) + } + + addText("Wheel order and", { + x: 1, + y: 14, + color: color`0` + }) + addText("rotation are R to L", { + x: 1, + y: 15, + color: color`0` + }) + + if (tutorialLevel == 4) { + clearText() + addSprite(0, 0, checkmark) + addText("AKXINU", { + x: 4, + y: 0, + color: color`0` + }) + addText("helloworld", { + x: 4, + y: 1, + color: color`0` + }) + addText("ESGHAGZMKLVNC", { + x: 4, + y: 2, + color: color`0` + }) + + addText("Thanks for", { + x: 1, + y: 4, + color: color`0` + }) + addText("playing!", { + x: 1, + y: 5, + color: color`0` + }) + addText("There's no more", { + x: 1, + y: 7, + color: color`0` + }) + addText('"game", exactly,', { + x: 1, + y: 8, + color: color`0` + }) + addText("but feel free to", { + x: 1, + y: 9, + color: color`0` + }) + addText("use the machine", { + x: 1, + y: 10, + color: color`0` + }) + addText("for your own", { + x: 1, + y: 11, + color: color`0` + }) + addText("purposes. I won't", { + x: 1, + y: 12, + color: color`0` + }) + addText("ask what they are.", { + x: 1, + y: 13, + color: color`0` + }) + } + } +} + +//clearTile, but it doesn't remove the cursor or the button sprite +//if keepLetters is true, also doesn't remove letter tiles +function safeClearTile(x, y, keepLetters) { + if (keepLetters == true) { + let spritesToRemove = getTile(x, y).filter(sprite => sprite.type != cursor && sprite.type != button && (sprite.type.charCodeAt(0) < 97 || sprite.type.charCodeAt(0) > 122)) + spritesToRemove.forEach(sprite => sprite.remove()) + } else { + let spritesToRemove = getTile(x, y).filter(sprite => sprite.type != cursor && sprite.type != button) + spritesToRemove.forEach(sprite => sprite.remove()) + } +} + +const alphabet = "abcdefghijklmnopqrstuvwxyz" //it's just the alphabet. +const alphabetCapital = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" //alphabet but capitalized +//number to letter +function alphabetize(inNumber) { return alphabet.charAt(inNumber - 1) } +//letter to number +function dealphabetize(inCharacter) { return (alphabet.indexOf(inCharacter) + 1) } +//makes a lowercase letter uppercase +function capitalize(inCharacter) { return (alphabetCapital.charAt(alphabet.indexOf(inCharacter))) } +//makes an uppercase letter lowercase +function decapitalize(inCharacter) { return (alphabet.charAt(alphabetCapital.indexOf(inCharacter))) } +//puts a number within alphabet if it's at most 1 alphabet away +function constrain(constrainee) { + if (constrainee < 1) { return constrainee + 26 } else if (constrainee > 26) { return constrainee - 26 } else return constrainee +} + +var explain = false //boolean, when true machine goes step-by-step with explanations +var explanation = "" //string used to explain things +function explanationText(text) { + addText(text, { + x: 3, + y: 0, + color: color`3` + }) +} +var explanationStep = 0 + +var wheelOrderConfig = 0 //for scrambler config, first scrambler to be swapped with another +var wheelNum = 0 //for scrambler config, number being selected/swapped. 0 for off + +var plugSelected = 0 //for plug config, 1 or 2, or 0 for off. plug kind you're messing with + +var tutorialLevel = 0 //step of the tutorial user is on +const tutorialObjective = ["AKXINU", "HELLOWORLD", "ESGHAGZMKLVNC", "THANKSFORPLAYING"] //desired output of each tutorial step + +var letter //number value of inputted letter, 1-26 + +var rotations = [0, 0, 0] //rotations of scramblers in wheel order, 0-25 + +var plug1 = 0 //plugboard, swaps with plug2 at beginning and end, 1-26 or 0 for off +var plug2 = 0 //plugboard, swaps with plug1 +var plug3 = 0 //plugboard, swaps with plug4 +var plug4 = 0 //plugboard, swaps with plug3 + +var wheelOrder = [1, 2, 3] + +const scramList1 = [17, 6, 4, 22, 8, 26, 7, 3, 11, 14, 20, 18, 10, 19, 9, 23, 12, 21, 16, 1, 5, 24, 2, 13, 25, 15] //sequential array of scrambler 1's 26 outputs at rotation 0. remember, arrays start at 0 +const scramList2 = [3, 17, 16, 12, 14, 5, 8, 22, 9, 19, 2, 23, 10, 15, 7, 26, 24, 18, 21, 25, 6, 11, 13, 20, 4, 1] +const scramList3 = [3, 23, 14, 1, 11, 6, 9, 2, 5, 18, 10, 24, 12, 13, 16, 21, 8, 22, 25, 17, 4, 15, 20, 26, 19, 7] + +const reflectList = [21, 17, 11, 10, 6, 25, 15, 26, 18, 22, 14, 3, 9, 23, 8, 24, 5, 16, 13, 20, 7, 19, 2, 4, 12, 1] //even indexes go to the next on the array, odd go back (starting at 0) + +var ciphertext = "" +var displayCiphertext = "" + + +function scrambler1(rot, reflected) { + //account for scrambler's rotation + let scramLetter = constrain(letter + rot) + //if explaining, add the path the signal takes + if (explain == true) { explanation += alphabetize(scramLetter) } + //enigmatize that thang + if (reflected == false) { letter = scramList1[scramLetter - 1] - rot } else { letter = scramList1.indexOf(scramLetter) + 1 - rot } + //there's only so much alphabet + letter = constrain(letter) +} + +function scrambler2(rot, reflected) { + let scramLetter = constrain(letter + rot) + if (explain == true) { explanation += alphabetize(scramLetter) } + if (reflected == false) { letter = scramList2[scramLetter - 1] - rot } else { letter = scramList2.indexOf(scramLetter) + 1 - rot } + letter = constrain(letter) +} + +function scrambler3(rot, reflected) { + let scramLetter = constrain(letter + rot) + if (explain == true) { explanation += alphabetize(scramLetter) } + if (reflected == false) { letter = scramList3[scramLetter - 1] - rot } else { letter = scramList3.indexOf(scramLetter) + 1 - rot } + letter = constrain(letter) +} + +function plugboard() { + if (letter == plug1) { letter = plug2 } else if (letter == plug2) { letter = plug1 } else if (letter == plug3) { letter = plug4 } else if (letter == plug4) { letter = plug3 } +} + +function scramble(reflected) { + for (let letterPos = 0 + (2 * reflected); letterPos < 3 && letterPos >= reflected - 1; letterPos += 1 - (2 * reflected)) { + //check scrambler of current position, execute, change position, repeat three times. + //if reflected true, start at third scrambler and go backwards + if (wheelOrder[letterPos] == 1) { + scrambler1(rotations[letterPos], reflected) + } else if (wheelOrder[letterPos] == 2) { + scrambler2(rotations[letterPos], reflected) + } else if (wheelOrder[letterPos] == 3) { + scrambler3(rotations[letterPos], reflected) + } + } +} + +function reflector() { + if (reflectList.indexOf(letter) % 2 == 0) { letter = reflectList[reflectList.indexOf(letter) + 1]; } //if letter's position in array is even, move to next index + else { letter = reflectList[reflectList.indexOf(letter) - 1] } //if letter's position in array is odd, move down an index +} + +function rotate() { + if (rotations[0] != 25) { rotations[0]++ } else { + rotations[0] = 0 + if (rotations[1] != 25) { rotations[1]++ } else { + rotations[1] = 0 + if (rotations[2] != 25) { rotations[2]++ } else { rotations[2] = 0 } + } + } +} + +function executeEnigma() { + plugboard() + scramble(false) + reflector() + scramble(true) + plugboard() + rotate() +} + +//change letters on scramblers to match rotations +function updateScramblers() { + if (level == 0) { + for (let scramblerNum = 0; scramblerNum <= 2; scramblerNum++) { + for (let scramblerY = 1; scramblerY <= 3; scramblerY++) { + safeClearTile((8 - (2 * scramblerNum)), scramblerY, false) + if (scramblerY == 1) { + addSprite((8 - (2 * scramblerNum)), 1, scramTop) + } else if (scramblerY == 2) { + addSprite((8 - (2 * scramblerNum)), 2, scramMid) + } else { + addSprite((8 - (2 * scramblerNum)), 3, scramBot) + } + addSprite((8 - (2 * scramblerNum)), scramblerY, alphabetize(constrain(rotations[scramblerNum] + 3 - scramblerY))) + } + } + } + if (level == 1) { + for (let scramblerNum = 0; scramblerNum <= 2; scramblerNum++) { + for (let scramblerY = 2; scramblerY <= 4; scramblerY++) { + safeClearTile((8 - (3 * scramblerNum)), scramblerY, false) + if (scramblerY == 2) { + addSprite((8 - (3 * scramblerNum)), 2, scramTop) + } else if (scramblerY == 3) { + addSprite((8 - (3 * scramblerNum)), 3, scramMid) + } else { + addSprite((8 - (3 * scramblerNum)), 4, scramBot) + } + addSprite((8 - (3 * scramblerNum)), scramblerY, alphabetize(constrain(rotations[scramblerNum] + 4 - scramblerY))) + } + } + safeClearTile(8, 1, false) + addSprite(8, 1, wheelOrder[0]) + safeClearTile(5, 1, false) + addSprite(5, 1, wheelOrder[1]) + safeClearTile(2, 1, false) + addSprite(2, 1, wheelOrder[2]) + if (wheelOrderConfig != 0) { + addSprite(getFirst(wheelOrderConfig).x, 1, light) + } + } +} + +//change lights on keyboard to match plugs +//third input is the index of the letters in getAll, so the plugs go on the right spot +function updateKeyboard(x, y, letterIndex) { + addSprite(x, y, button) + addSprite(x + 1, y, button) + addSprite(x + 2, y, button) + addSprite(x + 3, y, button) + addSprite(x + 4, y, button) + addSprite(x + 5, y, button) + addSprite(x + 6, y, button) + addSprite(x + 7, y, button) + addSprite(x + 8, y, button) + addSprite(x + 9, y, button) + addSprite(x + 0, y + 1, button) + addSprite(x + 1, y + 1, button) + addSprite(x + 2, y + 1, button) + addSprite(x + 3, y + 1, button) + addSprite(x + 4, y + 1, button) + addSprite(x + 5, y + 1, button) + addSprite(x + 6, y + 1, button) + addSprite(x + 7, y + 1, button) + addSprite(x + 8, y + 1, button) + addSprite(x + 1, y + 2, button) + addSprite(x + 2, y + 2, button) + addSprite(x + 3, y + 2, button) + addSprite(x + 4, y + 2, button) + addSprite(x + 5, y + 2, button) + addSprite(x + 6, y + 2, button) + addSprite(x + 7, y + 2, button) + safeClearTile(x, y, true) + safeClearTile(x + 1, y, true) + safeClearTile(x + 2, y, true) + safeClearTile(x + 3, y, true) + safeClearTile(x + 4, y, true) + safeClearTile(x + 5, y, true) + safeClearTile(x + 6, y, true) + safeClearTile(x + 7, y, true) + safeClearTile(x + 8, y, true) + safeClearTile(x + 9, y, true) + safeClearTile(x + 0, y + 1, true) + safeClearTile(x + 1, y + 1, true) + safeClearTile(x + 2, y + 1, true) + safeClearTile(x + 3, y + 1, true) + safeClearTile(x + 4, y + 1, true) + safeClearTile(x + 5, y + 1, true) + safeClearTile(x + 6, y + 1, true) + safeClearTile(x + 7, y + 1, true) + safeClearTile(x + 8, y + 1, true) + safeClearTile(x + 1, y + 2, true) + safeClearTile(x + 2, y + 2, true) + safeClearTile(x + 3, y + 2, true) + safeClearTile(x + 4, y + 2, true) + safeClearTile(x + 5, y + 2, true) + safeClearTile(x + 6, y + 2, true) + safeClearTile(x + 7, y + 2, true) + if (plug1 != 0) { + addSprite((getAll(alphabetize(plug1))[letterIndex]).x, (getAll(alphabetize(plug1))[letterIndex]).y, plugTile1) + } + if (plug2 != 0) { + addSprite((getAll(alphabetize(plug2))[letterIndex]).x, (getAll(alphabetize(plug2))[letterIndex]).y, plugTile1) + } + if (plug3 != 0) { + addSprite((getAll(alphabetize(plug3))[letterIndex]).x, (getAll(alphabetize(plug3))[letterIndex]).y, plugTile2) + } + if (plug4 != 0) { + addSprite((getAll(alphabetize(plug4))[letterIndex]).x, (getAll(alphabetize(plug4))[letterIndex]).y, plugTile2) + } +} + + +//WASD +onInput("w", () => { + if (level != 5) { + getFirst(cursor).y -= 1 + } +}) +onInput("a", () => { + if (level != 5) { + getFirst(cursor).x -= 1 + } +}) +onInput("s", () => { + if (level != 5) { + getFirst(cursor).y += 1 + } +}) +onInput("d", () => { + if (level != 5 && level != 3) { + getFirst(cursor).x += 1 + } +}) + + +onInput("l", () => { + //select input letter + if (level == 0) { + //check if it's on the clear button + if (getFirst(cursor).x == getFirst(redX).x && getFirst(cursor).y == getFirst(redX).y) { + //clear text at top + ciphertext = "" + displayCiphertext = "" + clearText() + //remove light + if (getAll(light).length != 0) { + getFirst(light).remove() + } + } + else if (explain == false) { + letter = 0 + for (let letterChecked = 1; letterChecked <= 26 && letter == 0; letterChecked++) { + //check if cursor x and y are the same as letter x and y + if (getFirst(cursor).x == getAll(alphabetize(letterChecked))[1].x && getFirst(cursor).y == getAll(alphabetize(letterChecked))[1].y) { + letter = letterChecked + } + } + //if you aren't on blank space + if (letter != 0) { + executeEnigma() + //get rid of previous light, if there is one + if (getAll(light).length != 0) { + getFirst(light).remove() + } + //add light to output letter + addSprite((getFirst(alphabetize(letter))).x, (getFirst(alphabetize(letter))).y, light) + //start list of outputs or graft new output onto list + if (ciphertext.length == 0) { + ciphertext = capitalize(alphabetize(letter)) + displayCiphertext = capitalize(alphabetize(letter)) + } else { + ciphertext = ciphertext + capitalize(alphabetize(letter)) + displayCiphertext = displayCiphertext + capitalize(alphabetize(letter)) + } + //if it's too long to fit, trim the first letter from the display + if (displayCiphertext.length >= 15) { displayCiphertext = displayCiphertext.replace(displayCiphertext.charAt(0), "") } + //list outputs + addText(displayCiphertext, { + x: 3, + y: 0, + color: color`3` + }) + + updateScramblers() + } + } + + //when explain is true, slower and with explanations + else { + if (explanationStep == 0) { + letter = 0 + for (let letterChecked = 1; letterChecked <= 26 && letter == 0; letterChecked++) { + //check if cursor x and y are the same as letter x and y + if (getFirst(cursor).x == getAll(alphabetize(letterChecked))[1].x && getFirst(cursor).y == getAll(alphabetize(letterChecked))[1].y) { + letter = letterChecked + } + } + + //if you aren't on blank space + if (letter != 0) { + //get rid of line of ciphertext, if it's there + clearText() + explanationStep++ + } + } + + //should follow directly after step 0, if step 0's conditions were met + if (explanationStep == 1) { + //execute enigma but with pauses and explanations + explanation = alphabetize(letter) + ">plug>" + plugboard() + explanation += alphabetize(letter) + clearText() + explanationText(explanation) + explanationStep++ + } + + //like scramble function, but with explanationStep - 2 instead of letterPos + else if (explanationStep >= 2 && explanationStep <= 4) { + explanation = alphabetize(letter) + if (wheelOrder[explanationStep - 2] == 1) { + explanation += ">wheel1" + scrambler1(rotations[explanationStep - 2], false) + } else if (wheelOrder[explanationStep - 2] == 2) { + explanation += ">wheel2" + scrambler2(rotations[explanationStep - 2], false) + } else if (wheelOrder[explanationStep - 2] == 3) { + explanation += ">wheel3" + scrambler3(rotations[explanationStep - 2], false) + } + explanation += ">" + alphabetize(letter) + clearText() + explanationText(explanation) + explanationStep++ + } else if (explanationStep == 5) { + explanation = alphabetize(letter) + ">reflector>" + reflector() + explanation += alphabetize(letter) + clearText() + explanationText(explanation) + explanationStep++ + } + + //like reflected scramble, but with 8 - explanationStep instead of letterPos + else if (explanationStep >= 6 && explanationStep <= 8) { + explanation = alphabetize(letter) + if (wheelOrder[8 - explanationStep] == 1) { + explanation += ">wheel1" + scrambler1(rotations[8 - explanationStep], true) + } else if (wheelOrder[8 - explanationStep] == 2) { + explanation += ">wheel2" + scrambler2(rotations[8 - explanationStep], true) + } else if (wheelOrder[8 - explanationStep] == 3) { + explanation += ">wheel3" + scrambler3(rotations[8 - explanationStep], true) + } + explanation += "R>" + alphabetize(letter) + clearText() + explanationText(explanation) + explanationStep++ + } else if (explanationStep == 9) { + //plugboard + explanation = alphabetize(letter) + ">plug>" + plugboard() + explanation += capitalize(alphabetize(letter)) + + //get rid of previous light, if there is one + if (getAll(light).length != 0) { + getFirst(light).remove() + } + //add light to output letter + addSprite((getFirst(alphabetize(letter))).x, (getFirst(alphabetize(letter))).y, light) + //start list of outputs or graft new output onto list + if (ciphertext.length == 0) { + ciphertext = capitalize(alphabetize(letter)) + displayCiphertext = capitalize(alphabetize(letter)) + } else { + ciphertext = ciphertext + capitalize(alphabetize(letter)) + displayCiphertext = displayCiphertext + capitalize(alphabetize(letter)) + } + //if it's too long to fit, trim the first letter from the display + if (displayCiphertext.length >= 15) { displayCiphertext = displayCiphertext.replace(displayCiphertext.charAt(0), "") } + + clearText() + explanationText(explanation) + explanationStep++ + } else if (explanationStep == 10) { + rotate() + updateScramblers() + explanationText("wheels rotate") + explanationStep++ + } else if (explanationStep == 11) { + clearText() + //list outputs + addText(displayCiphertext, { + x: 3, + y: 0, + color: color`3` + }) + explanationStep = 0 + } + } + + //check if ciphertext contains the current objective for the tutorial + if (ciphertext.includes(tutorialObjective[tutorialLevel]) == true) { + tutorialLevel++ + } + } else if (level == 1) { + //check if it's on arrows and scroll scrambler rotation + for (let leftChecked = 0; leftChecked <= 2; leftChecked++) { + //check if cursor x and y are the same as left arrow x and y + if (getFirst(cursor).x == getAll(arrowL)[2 - leftChecked].x && getFirst(cursor).y == getAll(arrowL)[2 - leftChecked].y) { + rotations[leftChecked] = constrain(rotations[leftChecked]) - 1 + updateScramblers() + } + } + for (let rightChecked = 0; rightChecked <= 2; rightChecked++) { + //check if cursor x and y are the same as right arrow x and y + if (getFirst(cursor).x == getAll(arrowR)[2 - rightChecked].x && getFirst(cursor).y == getAll(arrowR)[2 - rightChecked].y) { + rotations[rightChecked] = constrain(rotations[rightChecked] + 2) - 1 + updateScramblers() + } + } + + //check if cursor is on number, swap or prepare to swap with another number + let exit = false + for (wheelNum = 1; wheelNum <= 3 && exit == false; wheelNum++) { + //check if cursor x and y are the same as wheel number x and y + if (getFirst(cursor).x == getFirst(wheelNum).x && getFirst(cursor).y == getFirst(wheelNum).y) { + //if nothing's lit up, light the number you're on up + if (wheelOrderConfig == 0) { + wheelOrderConfig = wheelNum + } + //if something's lit up, swap it with number you pressed + else { + let wheelNumIndex = wheelOrder.indexOf(wheelNum) + wheelOrder[wheelOrder.indexOf(wheelOrderConfig)] = wheelNum + wheelOrder[wheelNumIndex] = wheelOrderConfig + wheelOrderConfig = 0 + } + updateScramblers() + //so that it doesn't keep running and mess with things + exit = true + } + } + } else if (level == 2) { + //check if it's on plug 1 select or clear thingies + if (getFirst(cursor).x == getFirst(plugTile1).x && getFirst(cursor).y == getFirst(plugTile1).y) { + plugSelected = 1 + } else if (getFirst(cursor).x == getAll(redX)[0].x && getFirst(cursor).y == getAll(redX)[0].y) { + plug1 = 0 + plug2 = 0 + updateKeyboard(0, 3, 0) + } + + //check if it's on plug 2 select or clear thingies + else if (getFirst(cursor).x == getFirst(plugTile2).x && getFirst(cursor).y == getFirst(plugTile2).y) { + plugSelected = 2 + } else if (getFirst(cursor).x == getAll(redX)[1].x && getFirst(cursor).y == getAll(redX)[1].y) { + plug3 = 0 + plug4 = 0 + updateKeyboard(0, 3, 0) + } + + //check if it's on a letter and that it isn't already part of a plug + else { + for (let letterChecked = 1; letterChecked <= 26; letterChecked++) { + if (getFirst(cursor).x == getFirst(alphabetize(letterChecked)).x && getFirst(cursor).y == getFirst(alphabetize(letterChecked)).y && (letterChecked != plug1 && letterChecked != plug2 && letterChecked != plug3 && letterChecked != plug4)) { + if (plugSelected == 1) { + if (plug1 == 0) { + plug1 = letterChecked + } else if (plug2 == 0) { + plug2 = letterChecked + } else { + plug1 = letterChecked + plug2 = 0 + } + } else if (plugSelected == 2) { + if (plug3 == 0) { + plug3 = letterChecked + } else if (plug4 == 0) { + plug4 = letterChecked + } else { + plug3 = letterChecked + plug4 = 0 + } + } + updateKeyboard(0, 3, 0) + } + } + } + } else if (level == 3) { + //check which level the cursor is on and go to it + //enigma + if (getFirst(cursor).y == getAll(light)[0].y) { + updateLevel(0) + } + //wheels + else if (getFirst(cursor).y == getAll(light)[1].y) { + updateLevel(1) + } + //plugs + else if (getFirst(cursor).y == getAll(light)[2].y) { + updateLevel(2) + } + + //if cursor is on explain toggle, toggle explain and update tile + if (getFirst(cursor).y == 1) { + if (explain == true) { + explain = false + safeClearTile(0, 1, false) + addSprite(0, 1, redX) + } else { + explain = true + safeClearTile(0, 1, false) + addSprite(0, 1, checkmark) + } + } + } else if (level == 4) { + if (getFirst(cursor).x == getFirst(enigma).x) { + updateLevel(3) + } else if (getFirst(cursor).x == getFirst(note).x) { + updateLevel(5) + } + } +}) + +//exit to level select +onInput("j", () => { + if (level <= 2) { + if (level == 0 && explain == true) { + if (explanationStep == 10) { + rotate() + } + explanationStep = 0 + letter = 0 + } + if (level == 2) { + plugSelected = 0 + if (plug1 != 0 && plug2 == 0) { + plug1 = 0 + } + if (plug3 != 0 && plug4 == 0) { + plug3 = 0 + } + } + updateLevel(3) + } else if (level != 4) { + updateLevel(4) + } +}) + +//initialize +updateLevel(4) + diff --git a/games/escape_arcade_prison.js b/games/escape_arcade_prison.js index 63ffee737f..370f3f8eec 100644 --- a/games/escape_arcade_prison.js +++ b/games/escape_arcade_prison.js @@ -1,12 +1,12 @@ /* +@title: Escape Arcade Prison! +@author: Felix Gao +@tags: ['puzzle'] +@addedOn: 2024-07-29 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started -@title: Escape Arcade Prison! -@author: Felix Gao -@tags: ['puzzle', 'prison'] -@addedOn: 2024-07-29 */ // People lol diff --git a/games/escape_room.js b/games/escape_room.js index 9905ee4019..14bb1c124c 100644 --- a/games/escape_room.js +++ b/games/escape_room.js @@ -1,8 +1,8 @@ /* @title: escape_room -@tags: ['sokoban-style'] +@author: Sampanna and Dhruv +@tags: ['puzzle'] @addedOn: 2022-11-01 -@author: Sampanna and Dhruv */ const wall = "w"; diff --git a/games/ever_hot.js b/games/ever_hot.js index 0e86d73961..41fff1cb30 100644 --- a/games/ever_hot.js +++ b/games/ever_hot.js @@ -1,8 +1,8 @@ /* @title: ever_hot +@author: Leo H @tags: ['endless'] @addedOn: 2022-11-11 -@author: Leo H */ var points var isAlive = true diff --git a/games/explorer.js b/games/explorer.js index 7a5f036cf6..5cdbd6fdd6 100644 --- a/games/explorer.js +++ b/games/explorer.js @@ -1,8 +1,8 @@ /* @title: explorer +@author: akshur @tags: [] @addedOn: 2023-01-22 -@author: akshur Instructions: diff --git a/games/falldown.js b/games/falldown.js index 7d2207face..dca1fc9c33 100644 --- a/games/falldown.js +++ b/games/falldown.js @@ -1,353 +1,353 @@ -/* -@title: Falldown mini -@author: Riptide -@tags: [] -@addedOn: 2024-08-04 -*/ - -const player = "p" -const walls = "w" -const wallsL = "L" -const wallsR = "R" -const invisWall = "i" - -setLegend( - [ player, bitmap` -....33333333.... -...3333333333... -..330003300033.. -.33302133L20333. -3333010330L03333 -3333333333333333 -3333333HH3333333 -3333333HH3333333 -3333833333383333 -3333888888883333 -3333388228833333 -3333338888333333 -.33333333333333. -..333333333333.. -...3333333333... -....33333333....` ], - [ walls, bitmap` -LLLLLLLLLLLLLLLL -LLLLLLLLLLLLLLLL -LLLLLLLLLLLLLLLL -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................` ], - [ wallsL, bitmap` -LLLLLLLLLLLLLLL. -LLLLLLLLLLLLLLLL -LLLLLLLLLLLLLLL. -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................` ], - [ wallsR, bitmap` -.LLLLLLLLLLLLLLL -LLLLLLLLLLLLLLLL -.LLLLLLLLLLLLLLL -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................ -................` ], - [ invisWall, bitmap` -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222 -2222222222222222` ] -) - -setSolids([ player, walls, wallsL, wallsR, invisWall ]) - -let go = false; -let gameIsOn = false; -let score = 0; -const levels = [ - map` -........... -.....p..... -wwwwL.Rwwww -........... -wwwL.Rwwwww -........... -wwwwwwwwwL. -........... -.Rwwwwwwwww -iiiiiiiiiii -iiiiiiiiiii`, - map` -........... -........... -........... -........... -........... -....iii.... -....ipi.... -....iii.... -........... -...........`, -] - -// setMap(levels[level]) -setLevel(1, "Press J to start", "/reset!") - -setPushables({ - [ walls ]: [ player ], - [ wallsL ]: [ player ], - [ wallsR ]: [ player ] -}) - -function wallUpdate(){ - if (gameIsOn){ - moveWallsUp(); - // killRedundantWalls() - spawnMoreWalls(); - } -} - -function setLevel(l, text1="", text2=""){ - clearText(); - setMap(levels[l]) - if (text1!=""){ - addText(text1, { - x: 1, - y: 1, - color: color`3` - }) - } - if (text2!=""){ - addText(text2, { - x: 1, - y: 4, - color: color`7` - }) - } -} - -function checkIfWallNeeded(){ // 8 - for (let i = 0; i < 11; i++){ - if (getTile(i, 8).length > 1){ - let type = getTile(i, 8)[0]['_type'] - let type2 = getTile(i, 8)[1]['_type'] - for (let letter of ["w", "L", "R"]){ - if (type == letter || type1 == letter) - return false; - } - } - if (getTile(i, 8).length > 0){ - let type = getTile(i, 8)[0]['_type'] - for (let letter of ["w", "L", "R"]){ - if (type == letter) - return false; - } - } - } - return true; -} - -function spawnMoreWalls(){ - if (checkIfWallNeeded()){ - score += 1; - let x = randint(10); // 0-10 - if (x == 0){ - addSprite(1, 9, wallsR); - for (let i = 2; i < 11; i++){ - addSprite(i, 9, walls); - } - } // Speacial case! - else if (x == 10){ - for (let i = 0; i < 9; i++){ - addSprite(i, 9, walls); - } - addSprite(9, 9, wallsL); - } // Speacial case! - else { - for (let i = 0; i < x-1; i++){ - addSprite(i, 9, walls); - } - addSprite(x-1, 9, wallsL); - addSprite(x+1, 9, wallsR); - for (let i = x+2; i < 11; i++){ - addSprite(i, 9, walls); - } - } - } -} - -function moveWallsUp(){ - for (let wall of getAll(walls)){ - wall.y -= 1; - if (wall.y == 0){wall.remove();} - } - for (let wall of getAll(wallsL)){ - wall.y -= 1; - if (wall.y == 0){wall.remove();} - } - for (let wall of getAll(wallsR)){ - wall.y -= 1; - if (wall.y == 0){wall.remove();} - } -} - -function playerUpdate(){ - let pl = getFirst(player); - fixGlitch(); - gravity(); - checkLoose(); -} - -function checkLoose(){ - if (gameIsOn){ - if (getFirst(player).y == 0){ - setLevel(1, "Game Over!", "Score: " + score.toString()); - gameIsOn = false; - score = 0; - } - } -} - -function checkForGlitch(){ - if (!gameIsOn){ - return false; - } - let pl = getFirst(player) - let a = !checkBelowPlayer() - let b = false; - let c = false; - if (getTile(pl.x-1, pl.y).length > 0){ - b = true; - } - if (getTile(pl.x+1, pl.y).length > 0){ - c = true; - } - if (a && b && c){ - return true; - } - return false; - // if (!gameIsOn){ - // return false; - // } - // let found_wall = 0; - // for (let i = 0; i < 11; i++){ - // if (getTile(i, pl).length > 0){ - // found_wall += 1; - // } - // } - // if (found_wall == 1){ - // return false; - // } - // return true; -} - -function fixGlitch(){ - let pl = getFirst(player); - if (checkForGlitch()){ - console.log("GLITCH DETECTED"); - // if (checkBelowPlayer) - // { - console.log("FIXING GLITCH"); - // FIX THE GLITCH() - // clearTile(pl.x, pl.y-1); - // addSprite(pl.x, pl.y, walls); - pl.y -= 1; - pl.x += 1; - } -} - -function checkBelowPlayer(){ - let pl = getFirst(player) - if (getTile(pl.x, pl.y+1).length > 0){ - return false; - } - return true; -} - -function gravity(){ - if (checkBelowPlayer()){ - getFirst(player).y += 1; - } -} - -function randint(max) { - return Math.floor(Math.random() * max); -} - -function gameUpdate(){ - if (go){ - wallUpdate(); - // getInput(); - go = false; - }else{go=true;} - playerUpdate(); -} - -function getInput(){ - onInput("a", () => { - getFirst(player).x -= 1; - }) - onInput("d", () => { - getFirst(player).x += 1; - }) - onInput("j", () => { - setLevel(0); - gameIsOn = true; - }) -} - -// let wallUpdateInt = setInterval(wallUpdate, 2000); -// let playerUpdateInt = setInterval(playerUpdate, 2000); -// let wallUpdateInt = setInterval(wallUpdate, 750); -// let playerUpdateInt = setInterval(playerUpdate, 500); -let gameUpdateInt = setInterval(gameUpdate, 375); -onInput("a", () => { - getFirst(player).x -= 1; -}) -onInput("d", () => { - getFirst(player).x += 1; -}) -onInput("j", () => { - setLevel(0); - gameIsOn = true; -}) +/* +@title: Falldown mini +@author: Riptide +@tags: [] +@addedOn: 2024-08-04 +*/ + +const player = "p" +const walls = "w" +const wallsL = "L" +const wallsR = "R" +const invisWall = "i" + +setLegend( + [ player, bitmap` +....33333333.... +...3333333333... +..330003300033.. +.33302133L20333. +3333010330L03333 +3333333333333333 +3333333HH3333333 +3333333HH3333333 +3333833333383333 +3333888888883333 +3333388228833333 +3333338888333333 +.33333333333333. +..333333333333.. +...3333333333... +....33333333....` ], + [ walls, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................` ], + [ wallsL, bitmap` +LLLLLLLLLLLLLLL. +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLL. +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................` ], + [ wallsR, bitmap` +.LLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +.LLLLLLLLLLLLLLL +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................ +................` ], + [ invisWall, bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222` ] +) + +setSolids([ player, walls, wallsL, wallsR, invisWall ]) + +let go = false; +let gameIsOn = false; +let score = 0; +const levels = [ + map` +........... +.....p..... +wwwwL.Rwwww +........... +wwwL.Rwwwww +........... +wwwwwwwwwL. +........... +.Rwwwwwwwww +iiiiiiiiiii +iiiiiiiiiii`, + map` +........... +........... +........... +........... +........... +....iii.... +....ipi.... +....iii.... +........... +...........`, +] + +// setMap(levels[level]) +setLevel(1, "Press J to start", "/reset!") + +setPushables({ + [ walls ]: [ player ], + [ wallsL ]: [ player ], + [ wallsR ]: [ player ] +}) + +function wallUpdate(){ + if (gameIsOn){ + moveWallsUp(); + // killRedundantWalls() + spawnMoreWalls(); + } +} + +function setLevel(l, text1="", text2=""){ + clearText(); + setMap(levels[l]) + if (text1!=""){ + addText(text1, { + x: 1, + y: 1, + color: color`3` + }) + } + if (text2!=""){ + addText(text2, { + x: 1, + y: 4, + color: color`7` + }) + } +} + +function checkIfWallNeeded(){ // 8 + for (let i = 0; i < 11; i++){ + if (getTile(i, 8).length > 1){ + let type = getTile(i, 8)[0]['_type'] + let type2 = getTile(i, 8)[1]['_type'] + for (let letter of ["w", "L", "R"]){ + if (type == letter || type1 == letter) + return false; + } + } + if (getTile(i, 8).length > 0){ + let type = getTile(i, 8)[0]['_type'] + for (let letter of ["w", "L", "R"]){ + if (type == letter) + return false; + } + } + } + return true; +} + +function spawnMoreWalls(){ + if (checkIfWallNeeded()){ + score += 1; + let x = randint(10); // 0-10 + if (x == 0){ + addSprite(1, 9, wallsR); + for (let i = 2; i < 11; i++){ + addSprite(i, 9, walls); + } + } // Speacial case! + else if (x == 10){ + for (let i = 0; i < 9; i++){ + addSprite(i, 9, walls); + } + addSprite(9, 9, wallsL); + } // Speacial case! + else { + for (let i = 0; i < x-1; i++){ + addSprite(i, 9, walls); + } + addSprite(x-1, 9, wallsL); + addSprite(x+1, 9, wallsR); + for (let i = x+2; i < 11; i++){ + addSprite(i, 9, walls); + } + } + } +} + +function moveWallsUp(){ + for (let wall of getAll(walls)){ + wall.y -= 1; + if (wall.y == 0){wall.remove();} + } + for (let wall of getAll(wallsL)){ + wall.y -= 1; + if (wall.y == 0){wall.remove();} + } + for (let wall of getAll(wallsR)){ + wall.y -= 1; + if (wall.y == 0){wall.remove();} + } +} + +function playerUpdate(){ + let pl = getFirst(player); + fixGlitch(); + gravity(); + checkLoose(); +} + +function checkLoose(){ + if (gameIsOn){ + if (getFirst(player).y == 0){ + setLevel(1, "Game Over!", "Score: " + score.toString()); + gameIsOn = false; + score = 0; + } + } +} + +function checkForGlitch(){ + if (!gameIsOn){ + return false; + } + let pl = getFirst(player) + let a = !checkBelowPlayer() + let b = false; + let c = false; + if (getTile(pl.x-1, pl.y).length > 0){ + b = true; + } + if (getTile(pl.x+1, pl.y).length > 0){ + c = true; + } + if (a && b && c){ + return true; + } + return false; + // if (!gameIsOn){ + // return false; + // } + // let found_wall = 0; + // for (let i = 0; i < 11; i++){ + // if (getTile(i, pl).length > 0){ + // found_wall += 1; + // } + // } + // if (found_wall == 1){ + // return false; + // } + // return true; +} + +function fixGlitch(){ + let pl = getFirst(player); + if (checkForGlitch()){ + console.log("GLITCH DETECTED"); + // if (checkBelowPlayer) + // { + console.log("FIXING GLITCH"); + // FIX THE GLITCH() + // clearTile(pl.x, pl.y-1); + // addSprite(pl.x, pl.y, walls); + pl.y -= 1; + pl.x += 1; + } +} + +function checkBelowPlayer(){ + let pl = getFirst(player) + if (getTile(pl.x, pl.y+1).length > 0){ + return false; + } + return true; +} + +function gravity(){ + if (checkBelowPlayer()){ + getFirst(player).y += 1; + } +} + +function randint(max) { + return Math.floor(Math.random() * max); +} + +function gameUpdate(){ + if (go){ + wallUpdate(); + // getInput(); + go = false; + }else{go=true;} + playerUpdate(); +} + +function getInput(){ + onInput("a", () => { + getFirst(player).x -= 1; + }) + onInput("d", () => { + getFirst(player).x += 1; + }) + onInput("j", () => { + setLevel(0); + gameIsOn = true; + }) +} + +// let wallUpdateInt = setInterval(wallUpdate, 2000); +// let playerUpdateInt = setInterval(playerUpdate, 2000); +// let wallUpdateInt = setInterval(wallUpdate, 750); +// let playerUpdateInt = setInterval(playerUpdate, 500); +let gameUpdateInt = setInterval(gameUpdate, 375); +onInput("a", () => { + getFirst(player).x -= 1; +}) +onInput("d", () => { + getFirst(player).x += 1; +}) +onInput("j", () => { + setLevel(0); + gameIsOn = true; +}) diff --git a/games/fallen_sand.js b/games/fallen_sand.js index 4190653d04..a15f477794 100644 --- a/games/fallen_sand.js +++ b/games/fallen_sand.js @@ -2,8 +2,8 @@ @title: Fallen Sand (Sandbox) @author: Chris @tags: [] -@img: "" @addedOn: 2024-05-28 +@img: "" */ const cursor = "p"; diff --git a/games/far-from-home.js b/games/far-from-home.js index ed31d21c2a..659108827a 100644 --- a/games/far-from-home.js +++ b/games/far-from-home.js @@ -1,8 +1,8 @@ /* @title: far from home +@author: hayward @tags: [] @addedOn: 2023-10-04 -@author: hayward Instructions: bring the kid home diff --git a/games/fight_big_parma.js b/games/fight_big_parma.js index 8f0b109d70..b59e9e7c76 100644 --- a/games/fight_big_parma.js +++ b/games/fight_big_parma.js @@ -1,8 +1,8 @@ /* @title: fight_big_parma +@author: jakempock @tags: [] @addedOn: 2023-03-13 -@author: jakempock */ const parmas = ["9", "8", "7", "6"]; diff --git a/games/find_a_friend.js b/games/find_a_friend.js index 39c14c878d..b38194a171 100644 --- a/games/find_a_friend.js +++ b/games/find_a_friend.js @@ -1,11 +1,11 @@ /* -[!]TUTORIAL[!] move with W and S. Don't hit the enemies and try to -hit the friends. - @title: Find a Friend @author: Doodle Studio @tags: [] @addedOn: 2024-07-22 +[!]TUTORIAL[!] move with W and S. Don't hit the enemies and try to +hit the friends. + */ const player = "p" diff --git a/games/find_the_clone.js b/games/find_the_clone.js index f439106ec7..f6191f6070 100644 --- a/games/find_the_clone.js +++ b/games/find_the_clone.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: find_the_clone @author: TheGoldenBlock @tags: ['puzzle'] @addedOn: 2024-01-21 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/find_the_watermelon.js b/games/find_the_watermelon.js index 8db3059e8f..e6974ec95d 100644 --- a/games/find_the_watermelon.js +++ b/games/find_the_watermelon.js @@ -1,8 +1,8 @@ /* @title: Find the Watermelon +@author: Mohamad @tags: [] @addedOn: 2023-10-05 -@author: Mohamad Check the tutorial in the bottom right, the run button is in the top right. Make sure to remix this tutorial if you want to save your progress! diff --git a/games/fire_boom.js b/games/fire_boom.js index b4242cd936..eb73117419 100644 --- a/games/fire_boom.js +++ b/games/fire_boom.js @@ -2,7 +2,7 @@ /* @title: fire_boom @author: Samarpan -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-09-25 */ diff --git a/games/flappyRocket.js b/games/flappyRocket.js new file mode 100644 index 0000000000..bbf26c6056 --- /dev/null +++ b/games/flappyRocket.js @@ -0,0 +1,229 @@ +/* +@title: Flappy Rocket +@author: quantumDSflux +@tags: [] +@addedOn: 2024-09-16 +*/ + +const player = "p"; +const pipe = "P"; + +// Define the bird and pipe sprites +setLegend( + [ player, bitmap` +................ +................ +................ +.......66666.... +.666666111116... +.66000L11111666. +836LLLD1011111L. +336000DCCC113310 +336000DCCC113310 +836000000L1111L. +.66000000111666. +.666666111116... +.......66666.... +................ +................ +................` ], + [ pipe, bitmap` +0000000000000000 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0444444444444440 +0000000000000000` ] +); + +// Map dimensions to fit full screen (160x128) +const screenWidth = 20; // 160 pixels wide with 8x8 tiles = 20 tiles +const screenHeight = 16; // 128 pixels high with 8x8 tiles = 16 tiles + +// Set up the initial level +const level = 0; +const levels = [ + map` +p................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +.................... +....................` +]; + +setMap(levels[level]); + +setSolids([]); + +// Bird's gravity and jump mechanics +let gravity = 0.5; +let jumpPower = -1.7; +let velocity = 0; + +// Ensure player starts 7 blocks from the left edge +const playerSprite = getFirst(player); +if (playerSprite) { + playerSprite.x = 7; // Set starting X position to 7 blocks (56 pixels) from the left edge + playerSprite.y = Math.floor(screenHeight / 2); // Set starting Y position in the middle +} + +// Score variable +let score = 0; + +// Game Over flag +let gameOver = false; + +// Handle flap input +function flap() { + if (!gameOver) { + velocity = jumpPower; + } +} + +// Handle restart input +function restartGame() { + if (gameOver) { + // Reset game state + score = 0; + velocity = 0; + gameOver = false; + playerSprite.x = 7; + playerSprite.y = Math.floor(screenHeight / 2); + + // Remove all pipes + getAll(pipe).forEach(pipeSprite => pipeSprite.remove()); + + // Restart the game loop + clearInterval(gameLoop); // Stop the old game loop + gameLoop = setInterval(updateGame, 100); // Restart the game loop + clearInterval(pipeSpawner); // Stop old pipe spawning + pipeSpawner = setInterval(() => spawnPipe(), 2000); // Restart pipe spawning + + // Clear text + clearText(); + } +} + +onInput("s", flap); +onInput("w", flap); +onInput("i", flap); +onInput("k", restartGame); + +// Function to spawn pipes at random heights with a gap +function spawnPipe() { + const pipeGap = 4; // Set the gap size for the bird to pass through to 4 blocks + const gapStart = Math.floor(Math.random() * (screenHeight - pipeGap - 2)) + 1; // Randomize gap position + for (let y = 0; y < screenHeight; y++) { + if (y < gapStart || y >= gapStart + pipeGap) { + addSprite(screenWidth - 1, y, pipe); + } + } +} + +// Counter to control pipe movement speed +let pipeMovementCounter = 0; + +// Move pipes to the left and remove those that are out of bounds +function movePipes() { + pipeMovementCounter++; + // Move pipes every 2 updates instead of every 1 to decrease speed by 10% + if (pipeMovementCounter % 2 === 0) { + getAll(pipe).forEach((pipeSprite) => { + pipeSprite.x -= 1; + + // Remove pipes that go out of bounds (i.e., touch the left wall) + if (pipeSprite.x < 0) { + pipeSprite.remove(); + } + + // Increase score when pipes pass the player's position + if (pipeSprite.x === playerSprite.x - 1) { + score++; + } + + // Check for collisions with the player + if (playerSprite && + pipeSprite.x === playerSprite.x && + pipeSprite.y === playerSprite.y) { + gameOver = true; + clearInterval(gameLoop); // Stop the game loop + clearInterval(pipeSpawner); // Stop pipe spawning + clearText(); // Clear previous text + + // Display "Game Over" message and instructions to restart + addText("Game Over!", { x: 4, y: 6, color: color`1wwwwww` }); // Display "Game Over" message + + // Draw box around the restart message + addText("Press K to Restart", { x: 2, y: 8, color: color`1` }); // Display restart message + addText("###############", { x: 1, y: 7, color: color`0` }); // Box top + addText("# #", { x: 1, y: 8, color: color`0` }); // Box middle + addText("###############", { x: 1, y: 9, color: color`0` }); // Box bottom + } + }); + } +} + +// Automatically spawn pipes every 2 seconds +let pipeSpawner = setInterval(() => { + if (!gameOver) { + spawnPipe(); + } +}, 2000); // Spawning pipes every 2000 milliseconds (2 seconds) + +// Function to display the score +function displayScore() { + // Clear text before drawing the score + clearText(); + // Draw the score text + addText(`Score: ${score}`, { x: 1, y: 1, color: color`1` }); // Specify the position and color +} + +// Continuously move pipes and update the game state +function updateGame() { + if (playerSprite && !gameOver) { + // Apply gravity + velocity += gravity; + playerSprite.y += Math.round(velocity); + + // Prevent the bird from going out of bounds + if (playerSprite.y >= screenHeight - 1) { + playerSprite.y = screenHeight - 1; + velocity = 0; + } + + if (playerSprite.y < 0) { + playerSprite.y = 0; + velocity = 0; + } + } + + // Move pipes + movePipes(); + + // Display the score + displayScore(); +} + +// Set up a game loop to continuously update the game state +let gameLoop = setInterval(updateGame, 100); // Update the game state every 100 milliseconds diff --git a/games/flappy_bird_but_no_gravity_and_worse.js b/games/flappy_bird_but_no_gravity_and_worse.js index 0f75bf8a6b..8b0207263e 100644 --- a/games/flappy_bird_but_no_gravity_and_worse.js +++ b/games/flappy_bird_but_no_gravity_and_worse.js @@ -1,8 +1,8 @@ /* @title: flappy_bird_but_no_gravity_and_worse -@tags: ['WIP', 'endless'] -@addedOn: 2022-09-16 @author: sam liu +@tags: ['endless'] +@addedOn: 2022-09-16 */ const player = "p"; diff --git a/games/flappysprig.js b/games/flappysprig.js index c19234ed67..d9d0dcf91b 100644 --- a/games/flappysprig.js +++ b/games/flappysprig.js @@ -2,7 +2,7 @@ /* @title: flappysprig @author: Spectral -@tags: ['classic'] +@tags: ['retro'] @addedOn: 2023-09-10 */ diff --git a/games/floppyMatch.js b/games/floppyMatch.js index a5ec23ec8e..ff2e7938d4 100644 --- a/games/floppyMatch.js +++ b/games/floppyMatch.js @@ -1,8 +1,8 @@ /* @title: floppyMatch -@tags: ['logic'] -@addedOn: 2022-10-05 @author: GBan22 +@tags: ['puzzle'] +@addedOn: 2022-10-05 Instructions: In floppyMatch, you control a pointer that can move from left to right. A floppy disk appears at the top of the screen, and you have to match it. diff --git a/games/flying_game.js b/games/flying_game.js index 5fb3b9a6ba..6d144533b8 100644 --- a/games/flying_game.js +++ b/games/flying_game.js @@ -1,8 +1,8 @@ /* @title: Flying Game -@tags: ['sokoban-style'] -@addedOn: 2022-10-08 @author: Zainab Khorakiwala +@tags: ['puzzle'] +@addedOn: 2022-10-08 */ const player = "p"; diff --git a/games/fogged.js b/games/fogged.js index 5b513eb071..2c54d24391 100644 --- a/games/fogged.js +++ b/games/fogged.js @@ -1,8 +1,8 @@ /* @title: fogged -@tags: ['WIP'] -@addedOn: 2022-08-15 @author: Jay Reddy +@tags: [] +@addedOn: 2022-08-15 Move around with w, a, s, d diff --git a/games/font-explorer.js b/games/font-explorer.js index 286bc2c456..3060e78238 100644 --- a/games/font-explorer.js +++ b/games/font-explorer.js @@ -1,8 +1,8 @@ /* - @title: Font Explorer -@tags: ['tool'] +@title: Font Explorer +@author: Shane Celis +@tags: ['utility'] @addedOn: 2023-01-04 - @author: Shane Celis @shanecelis */ diff --git a/games/for_Squiggly_myLost_worm.js b/games/for_Squiggly_myLost_worm.js index 53a071e020..e61cb29023 100644 --- a/games/for_Squiggly_myLost_worm.js +++ b/games/for_Squiggly_myLost_worm.js @@ -2,7 +2,7 @@ /* @title: for_Squiggly_myLost_worm @author: Jeremiah Sung -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-10-19 */ diff --git a/games/fractal_generator.js b/games/fractal_generator.js index 33da6e73c8..1b552454f6 100644 --- a/games/fractal_generator.js +++ b/games/fractal_generator.js @@ -1,8 +1,8 @@ /* @title: fractal_generator -@tags: ['sandbox', 'simulation'] -@addedOn: 2023-01-10 @author: Graham Darcey +@tags: ['sandbox','simulation'] +@addedOn: 2023-01-10 Controls: w - Pan up diff --git a/games/friendship.js b/games/friendship.js index 490f33e25a..d41ca4c8c4 100644 --- a/games/friendship.js +++ b/games/friendship.js @@ -1,8 +1,8 @@ /* @title: Friendship!!! <3 -@tags: ['beginner', 'strategy'] -@addedOn: 2022-07-27 @author: ncase +@tags: ['strategy'] +@addedOn: 2022-07-27 Instructions: diff --git a/games/froggo_s_dungeon_adventures.js b/games/froggo_s_dungeon_adventures.js index 6b25197fe7..680f63cd0b 100644 --- a/games/froggo_s_dungeon_adventures.js +++ b/games/froggo_s_dungeon_adventures.js @@ -1,8 +1,8 @@ /* -@tags: ['dungeon'] -@addedOn: 2023-11-06 @title: Froggo's Dunegon Adventures -@author: amuseee (slack: @vik/vikshar rajesh) +@author: amuseee (slack +@tags: ['adventure'] +@addedOn: 2023-11-06 Keys: - w/a/s/d to move, J to interaction/attack, k to restart objective: diff --git a/games/fruit_catcher2.js b/games/fruit_catcher2.js index ada542c394..593a04cff7 100644 --- a/games/fruit_catcher2.js +++ b/games/fruit_catcher2.js @@ -1,9 +1,9 @@ /* @title: Fruit Catcher Deluxe +@author: Prathyush Yeturi @tags: [] -@img: "" @addedOn: 2022-06-4 -@author: Prathyush Yeturi +@img: "" */ var isRunning = true; diff --git a/games/fruit_pusher.js b/games/fruit_pusher.js index ca5b425279..d63c06a944 100644 --- a/games/fruit_pusher.js +++ b/games/fruit_pusher.js @@ -1,9 +1,9 @@ /* - @title: fruit_pusher @author: kirby-b -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-01-15 + */ const player = "p" diff --git a/games/fungi-frog-maze.js b/games/fungi-frog-maze.js index f3a4d440cb..1655e72ff3 100644 --- a/games/fungi-frog-maze.js +++ b/games/fungi-frog-maze.js @@ -1,8 +1,8 @@ /* @title: fungi-frog-maze -@tags: ['logic'] -@addedOn: 2023-05-13 @author: @jzaleta +@tags: ['puzzle'] +@addedOn: 2023-05-13 ◕ ◡ ◕ っ --------------------------------------------------------------------- diff --git a/games/galactic_coconuts.js b/games/galactic_coconuts.js index 2dfa9e975c..6def7acb4a 100644 --- a/games/galactic_coconuts.js +++ b/games/galactic_coconuts.js @@ -1,8 +1,8 @@ /* @title: Galactic Coconuts -@tags: ['dodge'] -@addedOn: 2023-10-30 @author: kcoderhtml (@kieran on slack) +@tags: ['action'] +@addedOn: 2023-10-30 Keys: - J to fire - A to move left diff --git a/games/galloping.js b/games/galloping.js index 43dfed5ecc..82be09aea4 100644 --- a/games/galloping.js +++ b/games/galloping.js @@ -1,8 +1,8 @@ /* @title: galloping! -@tags: ['dodge'] -@addedOn: 2023-05-23 @author: Daniel Cui +@tags: ['action'] +@addedOn: 2023-05-23 Description: A gallant horse is travelling at breakneck speeds! diff --git a/games/gateway.js b/games/gateway.js new file mode 100644 index 0000000000..a09bce5e27 --- /dev/null +++ b/games/gateway.js @@ -0,0 +1,392 @@ +/* +@title: gateway +@author: eminentquasar34 +@tags: [] +@addedOn: 2024-00-00 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const wall = "w" +const final = "f" +const gateway = "g" +const gateway2 = "a" +const deathGateway = "d" + +setLegend( + [ player, bitmap` +................ +................ +................ +................ +................ +....33333333.... +...3366336633... +...3666336663... +...3666666663... +...3666666663... +...3677667763... +...3666666663... +...3666666663... +...3666666663... +...3366666633... +....33666633....` ], + [wall, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [final, bitmap` +................ +................ +....00000000.... +...0000000000... +..000222222000.. +..002222222200.. +..002200002200.. +..002200002200.. +..002200002200.. +..002200002200.. +..002222222200.. +..000222222000.. +...0000000000... +....00000000.... +................ +................`], + [gateway, bitmap` +................ +................ +................ +....4444444..... +...444444444.... +..44444444444... +..444.....444... +..444.....444... +..444.....444... +..444.....444... +..444.....444... +..44444444444... +...444444444.... +....4444444..... +................ +................`], + [gateway2, bitmap` +................ +................ +................ +.....555555..... +....55555555.... +...5555555555... +...555....555... +...555....555... +...555....555... +...555....555... +...5555555555... +....55555555.... +.....555555..... +................ +................ +................`], + [deathGateway, bitmap` +................ +................ +................ +.....333333..... +....33333333.... +...333....333... +...33......33... +...33..33..33... +...33..33..33... +...33......33... +...333....333... +....33333333.... +.....333333..... +................ +................ +................`] +) + +setSolids([player, wall]) + +let level = 0 +const levels = [ + map` +............... +............... +............... +............... +............... +............... +............... +wwwwwwwwwwwwwww +p.............f +wwwwwwwwwwwwwww +............... +...............`, + map` +.............. +.............. +...wwwwwwwwww. +...w........w. +...w.wwwwww.w. +...w.w....w.w. +...w.w.wwww.w. +...w.w.w....w. +wwww.w.w.wwwww +p....w.w.....f +wwwwww.wwwwwww +..............`, + map` +.............. +.............. +.............. +wwwwwwwwwwwwww +f............g +wwwwwwwwwwwwww +.............. +.............. +wwwwwwwwwwwwww +p............g +wwwwwwwwwwwwww +..............`, + map` +.............. +.............. +..wwwwwwwwwww. +..w.........w. +..w.wwwwwww.w. +..w.....wgw.w. +...wwww.w.w.w. +wwww..w.w.w.w. +...wwww.w.w.w. +pg......w.wfw. +wwwwwwwww.www. +..............`, + map` +.............. +p............. +wwwwwwww..wwww +......gw..w..g +...wwwww..w..w +..........w..w +.wwwwwwwwww..w +.w...........w +.wwwwwww....ww +.wf....www.ww. +.www.......w.. +...w.....ww...`, + map` +g............p +www.wwwwwwwwww +....wg........ +.wwwwwww...... +.w.....wwwww.a +.w.www........ +.w.w.w.wwwwwww +.w.w.w........ +.w.w.wwwwwwww. +.w.w.w........ +.w.w.wwwwwwwww +...wa........f`, + map` +.w..........w. +.w....g.....w. +.wwwwwwwwwwww. +.............. +..wwwwwwwwww.w +..wa.......g.f +..wwwwwwwwwwww +.............. +.wwwwwwwwwwwww +a............. +wwwwwwwwwwwww. +p.............`, + map` +g......w...wfw +wwwwww.w.w.w.w +....aw.w.w.w.w +.ww..w...w.w.w +.www.wwwww...w +..ww....pw.www +...wwwwwww.... +w...w...wwwww. +w.w.w.w.waw.w. +w.w.w.w.w.w.w. +w.w.w.w.w.w.w. +wgw...w...w...`, + map` +.....ww.w..... +.www....w.www. +.w.wwwwww.w... +.w......w.w.ww +.wwww.www.w.w. +.w....wf..w... +.wwww.wwwwwww. +......w...w.w. +.wwww.w.w.w.w. +....w.w.w...w. +www.www.wwwww. +p.............`, + map` +...w...w.....a +.w.w.w.w.wwwww +.w.w.waw.....p +.w.w.wwwww.www +.w...wf..w.w.. +.wwwwwww.w.ww. +.......w.w.... +.wwwww.w.w.www +.w...w.w.w.... +.w.w...w.w.ww. +.w.wwwww.w.... +gw..w...gw.www`, +map` +w...wgd.w...w. +w.w.w.w.w.w.w. +w.w.w.w.w.w... +w.w...w.w.w.w. +w.wwwww...w.w. +w.....w.www.ww +w.w.w.w.w..... +..w.w.w.w.www. +.ww.wgw.w.wfw. +pw..w...w.w.w. +ww.wwww.w.w.w. +........w...w.`, + map` +..w...d...w..f +.....w.ww...w. +w..w...ww..w.. +......w..w.d.. +..w.wdw.....w. +.w.......w.w.. +....w...w..... +.wdw.dw..d.ww. +......w.w.w..w +...w.w..d..w.. +w....ww....w.w +p.w...d..w....`, + map` +pawwwww...w... +gww.....www.w. +wwfwwww.....w. +w.....wwwww.w. +w...w.....w.w. +wwww.wwww.w.w. +....w..w..www. +.wwwww.w.ww... +.....d.w....w. +d.d..w.wwwwww. +.w.w.w......wg +.......wwww.aw` +] + +setMap(levels[level]) +const startSound = tune``; +playTune(startSound); +setPushables({ + [ player ]: [] +}) + +const movement = tune`5` + + +onInput("s", () => { + getFirst(player).y += 1 + playTune(movement) + +}) + +onInput("a", () => { + getFirst(player).x -= 1; + playTune(movement) +}) + +onInput("d", () => { + getFirst(player).x += 1; + playTune(movement) +}) + +onInput("w", () => { + getFirst(player).y -= 1 + playTune(movement) +}) + + +afterInput(() => { + const targetNumber = tilesWith(final).length; + const numberCovered = tilesWith(final, player).length; + + const totalGateways = tilesWith(gateway).length; + const gatewaysEntered = tilesWith(gateway, player).length; + // console.log(totalGateways, gatewaysEntered); + if (totalGateways - 1 == gatewaysEntered) { + if (getAll(gateway)[0].x == getFirst(player).x && getAll(gateway)[0].y == getFirst(player).y) { + getFirst(player).x = getAll(gateway)[1].x; + getFirst(player).y = getAll(gateway)[1].y; + } else { + getFirst(player).x = getAll(gateway)[0].x; + getFirst(player).y = getAll(gateway)[0].y; + } + } + const totalGateways2 = tilesWith(gateway2).length; + const gateways2Entered = tilesWith(gateway2, player).length; + // console.log(totalGateways, gatewaysEntered); + if (totalGateways2 - 1 == gateways2Entered) { + if (getAll(gateway2)[0].x == getFirst(player).x && getAll(gateway2)[0].y == getFirst(player).y) { + getFirst(player).x = getAll(gateway2)[1].x; + getFirst(player).y = getAll(gateway2)[1].y; + } else { + getFirst(player).x = getAll(gateway2)[0].x; + getFirst(player).y = getAll(gateway2)[0].y; + } + } + const totalDeathGateways = tilesWith(deathGateway).length; + const totalDeathGatewaysReached = tilesWith(deathGateway, player).length; + + if (totalDeathGatewaysReached == totalDeathGateways && totalDeathGateways > 0) { + addText("YOU DIE", { + x: 5, + y: 7, + color: color`3` + }) + addText("Press J to restart", { + x: 2, + y: 9, + color: color`3` + }) + onInput("j", () => { + level = 0; + setMap(levels[level]); + clearText(); + }) + } + + if (targetNumber == numberCovered) { + level = level + 1; + + if (level < levels.length) { + setMap(levels[level]) + } else { + addText("YOU WIN", { + x: 3, + y: 7, + color: color`2` + }) + } + } +}) diff --git a/games/gauntlet.js b/games/gauntlet.js new file mode 100644 index 0000000000..df96f1c3d4 --- /dev/null +++ b/games/gauntlet.js @@ -0,0 +1,650 @@ +/* +@title: gauntlet +@author: hex4 +@tags: ['endless'] +@addedOn: 2024-09-16 +*/ + +const red = "*" +const blue = "+" +const bg = "0" +const bg1 = "1" +const bg2 = "2" +const bg3 = "3" +const bg4 = "4" +const wall = "#" +const rw = "R" +const bw = "B" +const aw = "?" + +let nextTick +let nextScoreTick + +let score = 0 + +let px = 8 +let py = 4 +let ps = red +let p +let speed = 500 +let playing = true + +let wo +let wt +let wx + +setLegend( + [red, bitmap` +................ +.........222.... +........23332... +......22333332.. +....22339333932. +..2233333999332. +.23339933333332. +233392193333332. +233392193333332. +.23339933333332. +..2233333999332. +....22339333932. +......22333332.. +........23332... +.........222.... +................`], + [blue, bitmap` +................ +.........222.... +........27772... +......22777772.. +....22775777572. +..2277777555772. +.27775577777772. +277752157777772. +277752157777772. +.27775577777772. +..2277777555772. +....22775777572. +......22777772.. +........27772... +.........222.... +................`], + [rw, bitmap` +3...3.3.3.3....3 +3....3.3.3.3.... +....3.3.3.3....3 +3....3.3.3.3...3 +3...3.3.3.3..... +.....3.3.3.3...3 +3...3.3.3.3....3 +3....3.3.3.3.... +....3.3.3.3....3 +3....3.3.3.3...3 +3...3.3.3.3..... +.....3.3.3.3...3 +3...3.3.3.3....3 +3....3.3.3.3.... +....3.3.3.3....3 +3....3.3.3.3...3`], + [bw, bitmap` +7...7.7.7.7....7 +7....7.7.7.7.... +....7.7.7.7....7 +7....7.7.7.7...7 +7...7.7.7.7..... +.....7.7.7.7...7 +7...7.7.7.7....7 +7....7.7.7.7.... +....7.7.7.7....7 +7....7.7.7.7...7 +7...7.7.7.7..... +.....7.7.7.7...7 +7...7.7.7.7....7 +7....7.7.7.7.... +....7.7.7.7....7 +7....7.7.7.7...7`], + [aw, bitmap` +1..............1 +1............... +...............1 +1..............1 +1............... +...............1 +1..............1 +1............... +...............1 +1..............1 +1............... +...............1 +1..............1 +1............... +...............1 +1..............1`], + [wall, bitmap` +2222222222222222 +2111111111111112 +2121111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111112 +2111111111111212 +2111111111111112 +2222222222222222`], + [bg, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], + [bg1, bitmap` +LLLLLLLLLLLLLLLL +L11LLLLLLLLLL11L +L1LLLLLLLLLLLL1L +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +L1LLLLLLLLLLLL1L +L11LLLLLLLLLL11L +LLLLLLLLLLLLLLLL`], + [bg2, bitmap` +LLLLLLLLLLLLLLLL +L11111111111111L +L1LLLLLLLLLLLL1L +L1L1LLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLLLL1L +L1LLLLLLLLLL1L1L +L1LLLLLLLLLLLL1L +L11111111111111L +LLLLLLLLLLLLLLLL`], + [bg3, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLL1LLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLL1LLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLL1LLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], + [bg4, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLL1LLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LL1LLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLL1LLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], + + +) + +setSolids([]) + +let frame = 0 +const frames = [ + map` +0000000000 +0030400010 +0000000000 +0100002000 +0000300040 +0000000000 +0020040300 +0000000000`, + map` +0000000000 +0003040001 +0000000000 +0010000200 +0000030004 +0000000000 +0002004030 +0000000000`, + map` +0000000000 +1000304000 +0000000000 +0001000020 +4000003000 +0000000000 +0000200403 +0000000000`, + map` +0000000000 +0100030400 +0000000000 +0000100002 +0400000300 +0000000000 +3000020040 +0000000000`, + map` +0000000000 +0010003040 +0000000000 +2000010000 +0040000030 +0000000000 +0300002004 +0000000000`, + map` +0000000000 +0001000304 +0000000000 +0200001000 +0004000003 +0000000000 +4030000200 +0000000000`, + map` +0000000000 +4000100030 +0000000000 +0020000100 +3000400000 +0000000000 +0403000020 +0000000000`, + map` +0000000000 +0400010003 +0000000000 +0002000010 +0300040000 +0000000000 +0040300002 +0000000000`, + map` +0000000000 +3040001000 +0000000000 +0000200001 +0030004000 +0000000000 +2004030000 +0000000000`, + map` +0000000000 +0304000100 +0000000000 +1000020000 +0003000400 +0000000000 +0200403000 +0000000000`, +] + +const over = map` +0300000000 +0000300000 +0000000020 +0040000000 +0000000000 +0000200000 +0300000040 +0000000000` + +// SFX +const move = tune` +69.28406466512702: C4/69.28406466512702, +2147.8060046189375` +const swap = tune` +69.76744186046511: D5^69.76744186046511 + G5-69.76744186046511, +69.76744186046511: D5^69.76744186046511 + A5-69.76744186046511, +2093.0232558139533` +const sad = tune` +285.7142857142857: A4^285.7142857142857, +285.7142857142857: F4^285.7142857142857, +285.7142857142857: D4^285.7142857142857, +285.7142857142857, +285.7142857142857: C4^285.7142857142857 + E4~285.7142857142857, +285.7142857142857: C4-285.7142857142857 + E4~285.7142857142857, +285.7142857142857: C4/285.7142857142857 + E4~285.7142857142857, +7142.857142857143` + + +setMap(frames[frame]) + + +setPushables({ + [red]: [], + [blue]: [], +}) + +onInput("w", () => { + if (playing) { + getFirst(ps).y -= 1 + playTune(move) + } +}) +onInput("s", () => { + if (playing) { + getFirst(ps).y += 1 + playTune(move) + } +}) + +onInput("i", () => { + if (!playing) { + start() + } +}) + + +onInput("j", () => { + if (playing) { + { + const { x, y } = getFirst(ps) + px = x + py = y + } + if (ps == red) { + ps = blue + } else if (ps == blue) { + ps = red + } + + + addSprite(px, py, ps) + if (ps == red) { + getFirst(blue).remove() + } else if (ps == blue) { + getFirst(red).remove() + } + playTune(swap) + } +}) + +afterInput(() => { + if (collision()) { + playing = false + setMap(sad) + clearText() + playTune(sad) + if (ps == red) { + addText("GAME OVER :(", { + x: 1, + y: 1, + color: color`3` + }) + addText("FINAL SCORE", { + x: 1, + y: 5, + color: color`3` + }) + addText(score.toString(), { + x: 1, + y: 7, + color: color`3` + }) + addText("PRESS I TO RESTART", { + x: 1, + y: 14, + color: color`3` + }) + } else if (ps == blue) { + addText("GAME OVER :(", { + x: 1, + y: 1, + color: color`7` + }) + addText("FINAL SCORE", { + x: 1, + y: 5, + color: color`7` + }) + addText(score.toString(), { + x: 1, + y: 7, + color: color`7` + }) + addText("PRESS I TO RESTART", { + x: 1, + y: 14, + color: color`7` + }) + } + } +}) + + +function start() { + px = 8 + py = 4 + ps = red + speed = 500 + playing = true + score = 0 + + addSprite(px, py, ps) + p = getFirst(ps) + makeWall() + scoreTick() + tick() + + +} + +function makeWall() { + wo = Math.floor(Math.random() * 8) + const types = [rw, bw, aw] + wt = types[Math.floor(Math.random() * types.length)]; + wx = -1 + +} + +function collision() { + + let p = getFirst(ps) + + for (const tile of getAll(wall)) { + if (tile.y == p.y && tile.x == p.x) { + + return true + } + } + for (const tile of getAll(rw)) { + if (tile.y == p.y && tile.x == p.x && ps == blue) { + + return true + } + } + for (const tile of getAll(bw)) { + if (tile.y == p.y && tile.x == p.x && ps == red) { + + return true + } + } + return false +} + +const tick = () => { + + + + + { + const { x, y } = getFirst(ps) + px = x + py = y + } + + + // Animate bg + frame += 1; + if (frame > 9) { + frame = 0 + } + setMap(frames[frame]) + + addSprite(px, py, ps) + + + if (speed > 175) { + speed -= 3 // CHANGE ME BACK TO 3 + } + + // Draw walls + for (let i = 0; i < 9; i++) { + if (getTile(wx, i)[2] && getTile(wx, i)[2].type != ps) { + getTile(wx, i)[2].remove() + } + } + + if (wx < 9) { + wx++ + } else { + makeWall() + } + if (wx > -1) { + for (let i = 0; i < 8; i++) { + if (i != wo) { + addSprite(wx, i, wall) + } else { + addSprite(wx, i, wt) + } + } + } + + + + if (collision()) { + + playTune(sad) + playing = false + setMap(over) + clearText() + + if (ps == red) { + addText("GAME OVER :(", { + x: 1, + y: 1, + color: color`3` + }) + addText("FINAL SCORE", { + x: 1, + y: 5, + color: color`3` + }) + addText(score.toString(), { + x: 1, + y: 7, + color: color`3` + }) + addText("PRESS I TO RESTART", { + x: 1, + y: 14, + color: color`3` + }) + } else if (ps == blue) { + addText("GAME OVER :(", { + x: 1, + y: 1, + color: color`7` + }) + addText("FINAL SCORE", { + x: 1, + y: 5, + color: color`7` + }) + addText(score.toString(), { + x: 1, + y: 7, + color: color`7` + }) + addText("PRESS I TO RESTART", { + x: 1, + y: 14, + color: color`7` + }) + } + } + + + + if (playing) { + // Ticking logic + lastTick = Date.now(); + clearTimeout(nextTick); + nextTick = setTimeout(tick, speed); + } + + +} + +const scoreTick = () => { + score += 50 + + + // Score display + if (playing) { + clearText() + if (ps == red && playing) { + addText(score.toString(), { + x: 1, + y: 1, + color: color`3` + }) + } else if (ps == blue && playing) { + addText(score.toString(), { + x: 1, + y: 1, + color: color`7` + }) + } + } + if (playing) { + // Ticking logic + lastTick = Date.now(); + clearTimeout(nextScoreTick); + nextScoreTick = setTimeout(scoreTick, 50); + } +} +start() diff --git a/games/generative_maze.js b/games/generative_maze.js new file mode 100644 index 0000000000..bccf5e52ac --- /dev/null +++ b/games/generative_maze.js @@ -0,0 +1,230 @@ +/* +@title: Generative Maze +@author: Zeyu Yao +@tags: ['puzzle','endless'] +@addedOn: 2024-09-14 +*/ + +const player = "p"; +const wall = "w"; +const exit = "e"; + +setLegend( + [player, bitmap` +................ +................ +.......000...... +.......0.0...... +......0..0...... +......0...0.0... +....0003.30.0... +....0.0...000... +....0.05550..... +......0...0..... +.....0....0..... +.....0...0...... +......000....... +......0.0....... +.....00.00...... +................`], + [wall, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], + [exit, bitmap` +................ +................ +................ +................ +......0000...... +.....0....0..... +....0......0.... +....0......0.... +....0......0.... +....0......0.... +.....0....0..... +......0000...... +................ +................ +................ +................`], +); + +setSolids([player, wall]); + +let level = 0; +let timeRemaining = 30; +let timerInterval; + +function displayTime() { + clearText(); + addText(`${timeRemaining}`, { x: 1, y: 1, color: color`3` }); +} + +function startTimer() { + if (timerInterval) clearInterval(timerInterval); + timeRemaining = 30; + displayTime(); + timerInterval = setInterval(() => { + timeRemaining--; + if (timeRemaining <= 0) { + clearInterval(timerInterval); + endGame(); + } else { + displayTime(); + } + }, 1000); +} + +function endGame() { + clearText(); + clearInterval(timerInterval); + for (let y = 0; y < height(); y++) { + for (let x = 0; x < width(); x++) { + clearTile(x, y); + } + } + addText(`Score: ${level}`, { x: Math.floor(width() / 2) - 3, y: Math.floor(height() / 2), color: color`3` }); +} + +startTimer(); + +function generateMaze(width, height, difficulty) { + if (width % 2 === 0) width++; + if (height % 2 === 0) height++; + + let maze = []; + for (let y = 0; y < height; y++) { + maze[y] = []; + for (let x = 0; x < width; x++) { + maze[y][x] = wall; + } + } + + // Starting position + let stack = []; + let startX = 1; + let startY = 1; + maze[startY][startX] = "."; // Empty space + + stack.push({ x: startX, y: startY }); + + // Possible directions + let directions = [ + { x: 0, y: -2 }, // North + { x: 2, y: 0 }, // East + { x: 0, y: 2 }, // South + { x: -2, y: 0 } // West + ]; + + // Calculate branching probability based on difficulty + let branchingProbability = Math.min(0.1 + difficulty * 0.1, 0.9); // Cap at 0.9 + + while (stack.length > 0) { + let current; + if (Math.random() < branchingProbability) { + // Choose a random cell from the stack to increase branching + current = stack[Math.floor(Math.random() * stack.length)]; + } else { + // DFS: take the last cell + current = stack[stack.length - 1]; + } + let x = current.x; + let y = current.y; + + // Find unvisited neighbors + let neighbors = []; + + for (let dir of directions) { + let nx = x + dir.x; + let ny = y + dir.y; + if (nx > 0 && nx < width - 1 && ny > 0 && ny < height - 1) { + if (maze[ny][nx] === wall) { + neighbors.push({ x: nx, y: ny, dir: dir }); + } + } + } + + if (neighbors.length > 0) { + // Shuffle neighbors to add randomness + neighbors.sort(() => Math.random() - 0.5); + + // Choose a random neighbor + let next = neighbors[Math.floor(Math.random() * neighbors.length)]; + + // Remove wall between current and next + let wallX = x + next.dir.x / 2; + let wallY = y + next.dir.y / 2; + maze[wallY][wallX] = "."; // Empty space + + // Mark next cell as passage + maze[next.y][next.x] = "."; + stack.push({ x: next.x, y: next.y }); + + } else { + stack = stack.filter(cell => cell.x !== x || cell.y !== y); + } + } + + maze[height - 2][width - 2] = exit; + maze[1][1] = player; + + let mazeString = ""; + for (let y = 0; y < height; y++) { + let row = ""; + for (let x = 0; x < width; x++) { + row += maze[y][x]; + } + mazeString += row + "\n"; + } + + return mazeString; +} + +let currentMaze = generateMaze(15, 15, level); +setMap(map`${currentMaze}`); + +onInput("w", () => { + let p = getFirst(player); + if (p) p.y -= 1; +}); + +onInput("s", () => { + let p = getFirst(player); + if (p) p.y += 1; +}); + +onInput("a", () => { + let p = getFirst(player); + if (p) p.x -= 1; +}); + +onInput("d", () => { + let p = getFirst(player); + if (p) p.x += 1; +}); + +afterInput(() => { + let atExit = tilesWith(player, exit).length > 0; + if (atExit) { + level++; + let mazeSize = 15 + level * 2; + let difficulty = level; + let newMaze = generateMaze(mazeSize, mazeSize, difficulty); + setMap(map`${newMaze}`); + startTimer(); + } +}); diff --git a/games/generic_dungeon_crawler.js b/games/generic_dungeon_crawler.js index 5edec641af..e9b7ea9a3d 100644 --- a/games/generic_dungeon_crawler.js +++ b/games/generic_dungeon_crawler.js @@ -1,8 +1,8 @@ /* @title: generic_dungeon_crawler -@tags: ['dungeon'] -@addedOn: 2022-10-24 @author: Lingdong Huang +@tags: ['adventure'] +@addedOn: 2022-10-24 */ let W = 10; diff --git a/games/get_the_birdie.js b/games/get_the_birdie.js index 847057b318..2279097bf3 100644 --- a/games/get_the_birdie.js +++ b/games/get_the_birdie.js @@ -1,8 +1,8 @@ /* @title: Get_the_birdie! -@tags: ['sokoban-style'] -@addedOn: 2022-12-23 @author: Sophie +@tags: ['puzzle'] +@addedOn: 2022-12-23 */ diff --git a/games/get_the_car_out.js b/games/get_the_car_out.js index 2a458010eb..e9256c50ea 100644 --- a/games/get_the_car_out.js +++ b/games/get_the_car_out.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Get The Car Out @author: miqdad1234 @tags: [] @addedOn: 2024-08-05 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ // define the sprites in our game diff --git a/games/get_the_green.js b/games/get_the_green.js index 774ec09975..589be1a541 100644 --- a/games/get_the_green.js +++ b/games/get_the_green.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Get the GREEN! @author: Dhyan99 -@tags: ["endless"] +@tags: ['endless'] @addedOn: 2024-06-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/getting_started.js b/games/getting_started.js index 647b128557..c0637b2d48 100644 --- a/games/getting_started.js +++ b/games/getting_started.js @@ -1,8 +1,8 @@ /* @title: getting_started -@tags: ['beginner', 'tutorial'] +@author: leo, edits +@tags: ['tutorial'] @addedOn: 2022-07-26 -@author: leo, edits: samliu, belle, kara Check the tutorial in the bottom right, the run button is in the top right. Make sure to remix this tutorial if you want to save your progress! diff --git a/games/girl_scouts_x_hack_club.js b/games/girl_scouts_x_hack_club.js index 06b23e9c3b..54d2a06a9a 100644 --- a/games/girl_scouts_x_hack_club.js +++ b/games/girl_scouts_x_hack_club.js @@ -1,8 +1,8 @@ /* @title: girl scouts x hack club -@tags: ['event'] +@author: keira +@tags: ['utility'] @addedOn: 2023-03-13 -@author: keira --horizon sprig workshop led by aileen & keira!-- - hey scout! deliver the girl scout cookies to orpheus! :D diff --git a/games/go_home.js b/games/go_home.js index b1ffb31129..79ebeb4e77 100644 --- a/games/go_home.js +++ b/games/go_home.js @@ -1,7 +1,7 @@ /* @title: go_home @author: Arthur Beck -@tags: ['puzzle', 'advanced'] +@tags: ['puzzle'] @addedOn: 2024-01-25 */ diff --git a/games/goaled.js b/games/goaled.js index 4fb2bd6909..22147b1042 100644 --- a/games/goaled.js +++ b/games/goaled.js @@ -1,8 +1,8 @@ /* @title: Goaled -@tags: ['catch'] -@addedOn: 2022-09-24 @author: Ronan Verma +@tags: [] +@addedOn: 2022-09-24 In this game, you are the purple player, the ball is the gray circle, and the goal is the yellow rectangle. Your goal is to push the ball into the goal, the goal will diff --git a/games/gravity-is-a-thing.js b/games/gravity-is-a-thing.js index ad46963391..93a1e91815 100644 --- a/games/gravity-is-a-thing.js +++ b/games/gravity-is-a-thing.js @@ -1,8 +1,8 @@ /* @title: Gravity is a Thing -@tags: ['logic'] -@addedOn: 2022-09-30 @author: Will_Rigney +@tags: ['puzzle'] +@addedOn: 2022-09-30 */ //W to jump diff --git a/games/gravity_box.js b/games/gravity_box.js index 083c6ba3a5..19f72e138e 100644 --- a/games/gravity_box.js +++ b/games/gravity_box.js @@ -1,8 +1,8 @@ /* @title: Gravity Box +@author: Josias Aurel @tags: [] @addedOn: 2023-10-18 -@author: Josias Aurel */ const player = "p" diff --git a/games/gravity_fun.js b/games/gravity_fun.js index ed03de8827..29921f4df1 100644 --- a/games/gravity_fun.js +++ b/games/gravity_fun.js @@ -1,8 +1,8 @@ /* @title: gravity_fun -@tags: ['classic'] -@addedOn: 2022-12-22 @author: phantomeniasll +@tags: ['retro'] +@addedOn: 2022-12-22 */ diff --git a/games/gtbc.js b/games/gtbc.js index 3b19c13f0e..0cdca71782 100644 --- a/games/gtbc.js +++ b/games/gtbc.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Ghosbly: Turn Based Combat @author: SlimeBind @tags: [] @addedOn: 2024-06-24 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ let inputEnabled = true; const player = "p" diff --git a/games/guidance.js b/games/guidance.js index 094c17442f..51e0aaacbb 100644 --- a/games/guidance.js +++ b/games/guidance.js @@ -1,8 +1,8 @@ /* @title: guidance +@author: danush_ramanan @tags: ['strategy'] @addedOn: 2022-12-27 -@author: danush_ramanan */ /* diff --git a/games/hackcraft.js b/games/hackcraft.js index b986f32630..b514ca1ad6 100644 --- a/games/hackcraft.js +++ b/games/hackcraft.js @@ -1,8 +1,8 @@ /* @title: hack_craft -@tags: ['classic', 'simulation'] -@addedOn: 2022-12-22 @author: khushraj +@tags: ['simulation','retro'] +@addedOn: 2022-12-22 Instructions: diff --git a/games/hallowed_knight.js b/games/hallowed_knight.js index bc38de9940..33e544425d 100644 --- a/games/hallowed_knight.js +++ b/games/hallowed_knight.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Hallowed Knight @author: phthallo @tags: [] @addedOn: 2024-07-09 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ /* Definitely not inspired by Hollow Knight. diff --git a/games/hangman.js b/games/hangman.js index 2d8b0ea3d1..95147c6b33 100644 --- a/games/hangman.js +++ b/games/hangman.js @@ -1,8 +1,8 @@ /* @title: hangman -@tags: ['classic'] -@addedOn: 2023-05-05 @author: PapaAlpaca +@tags: ['retro'] +@addedOn: 2023-05-05 Special thanks to jedgrei for the alphabet design :) */ /* diff --git a/games/haunted-office.js b/games/haunted-office.js index 12257d1f76..d33667d45c 100644 --- a/games/haunted-office.js +++ b/games/haunted-office.js @@ -1,10 +1,10 @@ /* - @title: Haunted Office @author: Aleyah @tags: [] -@img: "" @addedOn: 2024-4-20 + +@img: "" */ const win = tune` diff --git a/games/hex_hubbub.js b/games/hex_hubbub.js index 9a4725dd8d..d65fa1c1e3 100644 --- a/games/hex_hubbub.js +++ b/games/hex_hubbub.js @@ -1,8 +1,8 @@ /* @title: hex_hubbub -@tags: ['thematic-puzzle'] -@addedOn: 2023-01-28 @author: ajs256 +@tags: ['puzzle'] +@addedOn: 2023-01-28 */ /* diff --git a/games/hidden_maze.js b/games/hidden_maze.js index cd05779f94..dad2b68304 100644 --- a/games/hidden_maze.js +++ b/games/hidden_maze.js @@ -2,7 +2,7 @@ /* @title: hidden_maze @author: Rylan Berry -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-05-06 */ diff --git a/games/hidden_maze_escape.js b/games/hidden_maze_escape.js index 1f36fc3b1b..5fcb0ea45a 100644 --- a/games/hidden_maze_escape.js +++ b/games/hidden_maze_escape.js @@ -2,7 +2,7 @@ /* @title: hidden_maze_escape @author: Rylan Berry -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-05-23 */ diff --git a/games/hot-digitty-dog.js b/games/hot-digitty-dog.js index f2d30de3fa..434d3fae37 100644 --- a/games/hot-digitty-dog.js +++ b/games/hot-digitty-dog.js @@ -1,8 +1,8 @@ /* @title: hot-digitty-dog +@author: Urjith Mishra @tags: ['endless'] @addedOn: 2023-01-10 -@author: Urjith Mishra */ // Sprites diff --git a/games/ice_cream_chef.js b/games/ice_cream_chef.js index b979b6d0c7..6a5c4d0dd9 100644 --- a/games/ice_cream_chef.js +++ b/games/ice_cream_chef.js @@ -1,11 +1,11 @@ /* -Select the correct ingredients to match the ice cream sundae order -Finish orders to increase your score -If you run out of time or select the wrong topping you lose a life and have to start the order over @title: Ice Cream Chef @author: sophia @tags: [] @addedOn: 2024-06-24 +Select the correct ingredients to match the ice cream sundae order +Finish orders to increase your score +If you run out of time or select the wrong topping you lose a life and have to start the order over */ const cursor = "c"; const bowl = "b"; diff --git a/games/img/Asteroid_Beatdown.png b/games/img/Asteroid_Beatdown.png new file mode 100644 index 0000000000..9c28d01803 Binary files /dev/null and b/games/img/Asteroid_Beatdown.png differ diff --git a/games/img/Bombs.png b/games/img/Bombs.png new file mode 100644 index 0000000000..b71952056d Binary files /dev/null and b/games/img/Bombs.png differ diff --git a/games/img/Cat Cafe.png b/games/img/Cat Cafe.png new file mode 100644 index 0000000000..e5cd03661d Binary files /dev/null and b/games/img/Cat Cafe.png differ diff --git a/games/img/Circuits!.png b/games/img/Circuits!.png new file mode 100644 index 0000000000..3bac1b1f4e Binary files /dev/null and b/games/img/Circuits!.png differ diff --git a/games/img/Classic-Tetris.png b/games/img/Classic-Tetris.png new file mode 100644 index 0000000000..fb60cbd594 Binary files /dev/null and b/games/img/Classic-Tetris.png differ diff --git a/games/img/CookieHacker.png b/games/img/CookieHacker.png new file mode 100644 index 0000000000..830819220b Binary files /dev/null and b/games/img/CookieHacker.png differ diff --git a/games/img/Dont Touch the Cat.png b/games/img/Dont Touch the Cat.png new file mode 100644 index 0000000000..642a604ac9 Binary files /dev/null and b/games/img/Dont Touch the Cat.png differ diff --git a/games/img/Dungeon_Master.png b/games/img/Dungeon_Master.png new file mode 100644 index 0000000000..2e6dc9e6b8 Binary files /dev/null and b/games/img/Dungeon_Master.png differ diff --git a/games/img/FallingTiles.png b/games/img/FallingTiles.png new file mode 100644 index 0000000000..fb07425822 Binary files /dev/null and b/games/img/FallingTiles.png differ diff --git a/games/img/FinalTrigger.png b/games/img/FinalTrigger.png new file mode 100644 index 0000000000..6e9b92f8b8 Binary files /dev/null and b/games/img/FinalTrigger.png differ diff --git a/games/img/Flying_Fish_Platformer_Game.png b/games/img/Flying_Fish_Platformer_Game.png new file mode 100644 index 0000000000..c411dc7a2e Binary files /dev/null and b/games/img/Flying_Fish_Platformer_Game.png differ diff --git a/games/img/Hue_Havoc.png b/games/img/Hue_Havoc.png new file mode 100644 index 0000000000..66c3e6be30 Binary files /dev/null and b/games/img/Hue_Havoc.png differ diff --git a/games/img/JBsPushyBlockyPortalGame.png b/games/img/JBsPushyBlockyPortalGame.png new file mode 100644 index 0000000000..cb6a424cad Binary files /dev/null and b/games/img/JBsPushyBlockyPortalGame.png differ diff --git a/games/img/LabyrinthBoardGame.png b/games/img/LabyrinthBoardGame.png new file mode 100644 index 0000000000..3af5a3e588 Binary files /dev/null and b/games/img/LabyrinthBoardGame.png differ diff --git a/games/img/Pokemon_Game.png b/games/img/Pokemon_Game.png new file mode 100644 index 0000000000..81de8db6c4 Binary files /dev/null and b/games/img/Pokemon_Game.png differ diff --git a/games/img/Project_Zero.png b/games/img/Project_Zero.png new file mode 100644 index 0000000000..dd2695c469 Binary files /dev/null and b/games/img/Project_Zero.png differ diff --git a/games/img/Puzzled (Sprig Edition)-3.png b/games/img/Puzzled (Sprig Edition)-3.png new file mode 100644 index 0000000000..5443670225 Binary files /dev/null and b/games/img/Puzzled (Sprig Edition)-3.png differ diff --git a/games/img/RickRoll_BW.png b/games/img/RickRoll_BW.png new file mode 100644 index 0000000000..b9703f9c33 Binary files /dev/null and b/games/img/RickRoll_BW.png differ diff --git a/games/img/Screenshot 2024-08-29 140505.png b/games/img/Screenshot 2024-08-29 140505.png new file mode 100644 index 0000000000..c02505696a Binary files /dev/null and b/games/img/Screenshot 2024-08-29 140505.png differ diff --git a/games/img/Sprig_Shooter.png b/games/img/Sprig_Shooter.png new file mode 100644 index 0000000000..ac4c87e190 Binary files /dev/null and b/games/img/Sprig_Shooter.png differ diff --git a/games/img/StarFruit.png b/games/img/StarFruit.png new file mode 100644 index 0000000000..12aa04bebb Binary files /dev/null and b/games/img/StarFruit.png differ diff --git a/games/img/SuperFighters.png b/games/img/SuperFighters.png index 31217eee6d..b4dd4b2da2 100644 Binary files a/games/img/SuperFighters.png and b/games/img/SuperFighters.png differ diff --git a/games/img/TheFlood.png b/games/img/TheFlood.png new file mode 100644 index 0000000000..0320f75be1 Binary files /dev/null and b/games/img/TheFlood.png differ diff --git a/games/img/Tickets_Please.png b/games/img/Tickets_Please.png new file mode 100644 index 0000000000..a33b768393 Binary files /dev/null and b/games/img/Tickets_Please.png differ diff --git a/games/img/WordeScapes.png b/games/img/WordeScapes.png new file mode 100644 index 0000000000..57ed43f337 Binary files /dev/null and b/games/img/WordeScapes.png differ diff --git a/games/img/codekuun.png b/games/img/codekuun.png new file mode 100644 index 0000000000..4b0a4ca0a8 Binary files /dev/null and b/games/img/codekuun.png differ diff --git a/games/img/colorconnect.png b/games/img/colorconnect.png new file mode 100644 index 0000000000..135063f026 Binary files /dev/null and b/games/img/colorconnect.png differ diff --git a/games/img/dungenrun.png b/games/img/dungenrun.png new file mode 100644 index 0000000000..d8e591928d Binary files /dev/null and b/games/img/dungenrun.png differ diff --git a/games/img/flappyRocket.png b/games/img/flappyRocket.png new file mode 100644 index 0000000000..393d654fe4 Binary files /dev/null and b/games/img/flappyRocket.png differ diff --git a/games/img/gauntlet.png b/games/img/gauntlet.png new file mode 100644 index 0000000000..cb33ed3bc4 Binary files /dev/null and b/games/img/gauntlet.png differ diff --git a/games/img/generative_maze.png b/games/img/generative_maze.png new file mode 100644 index 0000000000..d952f0afa4 Binary files /dev/null and b/games/img/generative_maze.png differ diff --git a/games/img/infinite_loop.png b/games/img/infinite_loop.png new file mode 100644 index 0000000000..ceee0d81b0 Binary files /dev/null and b/games/img/infinite_loop.png differ diff --git a/games/img/space-maze.png b/games/img/space-maze.png new file mode 100644 index 0000000000..a9828d80d1 Binary files /dev/null and b/games/img/space-maze.png differ diff --git a/games/img/the_sequence.png b/games/img/the_sequence.png new file mode 100644 index 0000000000..866ccef4e0 Binary files /dev/null and b/games/img/the_sequence.png differ diff --git a/games/inconsequential_leveldungeon.js b/games/inconsequential_leveldungeon.js index 20f525029a..3ebf671371 100644 --- a/games/inconsequential_leveldungeon.js +++ b/games/inconsequential_leveldungeon.js @@ -1,8 +1,8 @@ /* @title: inconsequential leveldungeon -@tags: ['dungeon'] -@addedOn: 2022-11-06 @author: periwinkle +@tags: ['adventure'] +@addedOn: 2022-11-06 */ const playerL = "l"; const playerR = "r"; diff --git a/games/infinite_cat.js b/games/infinite_cat.js index 899b966f32..348af308c7 100644 --- a/games/infinite_cat.js +++ b/games/infinite_cat.js @@ -1,9 +1,9 @@ /* - @title: infinite_cat +@author: Deven Jadhav @tags: ['strategy'] @addedOn: 2022-11-07 -@author: Deven Jadhav + Greetings Hacker, diff --git a/games/infinite_loop.js b/games/infinite_loop.js new file mode 100644 index 0000000000..fdeb75cece --- /dev/null +++ b/games/infinite_loop.js @@ -0,0 +1,431 @@ +/* +@title: The Infinite Loop +@author: Matthew Soh +@tags: [] +@addedOn: 2024-08-28 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const soundtrack = tune` +200: D4~200 + D5/200, +200: D4~200, +200: D4~200, +200: D4~200 + D5/200, +200: D4~200, +200: D4~200 + F5/200, +200: D4~200, +200: D4~200 + D5/200, +200: D4~200 + D5^200 + A5-200, +200: D4~200 + D5^200 + A5-200, +200: D4~200 + D5^200 + A5-200, +200: D4~200 + D5^200 + A5-200, +200: D5^200 + D4~200 + A5-200, +200: D5^200 + D4~200 + A5-200, +200: D5^200 + D4~200 + A5-200, +200: D5^200 + D4~200 + A5-200, +200: G4-200 + D4~200 + D5^200 + C5/200, +200, +200: C5/200, +200, +200: F4-200 + D4~200 + D5^200 + C5/200, +200, +200: C5/200, +200: A4-200 + D4~200 + D5^200, +800, +200: A5~200 + D4/200 + D5/200 + A4/200 + F4^200, +200: A5~200 + D4/200 + D5/200 + A4/200 + F4^200, +200: A5~200 + D4/200 + D5/200 + A4/200 + F4^200, +200: A5~200 + D4/200 + D5/200 + A4/200 + F4^200`; +const coinTrack = tune` +37.5: B5~37.5 + A5^37.5 + G5^37.5 + F5-37.5 + E5/37.5, +37.5: B5~37.5 + A5~37.5 + G5^37.5 + F5-37.5 + E5/37.5, +37.5: A5~37.5 + G5^37.5 + F5-37.5 + E5/37.5 + D5/37.5, +37.5: G5~37.5 + F5-37.5 + E5-37.5 + D5/37.5, +37.5: G5~37.5 + F5^37.5 + E5-37.5 + D5/37.5 + C5/37.5, +37.5: G5~37.5 + F5^37.5 + E5^37.5 + D5-37.5 + C5/37.5, +37.5: F5~37.5 + E5^37.5 + D5-37.5 + C5/37.5 + B4/37.5, +37.5: F5~37.5 + E5^37.5 + D5^37.5 + C5-37.5 + B4/37.5, +37.5: F5~37.5 + E5~37.5 + D5^37.5 + C5-37.5 + B4/37.5, +37.5: E5~37.5 + D5^37.5 + C5-37.5 + B4/37.5 + A4/37.5, +37.5: E5~37.5 + D5~37.5 + C5-37.5 + B4-37.5 + A4/37.5, +37.5: D5~37.5 + C5^37.5 + B4-37.5 + A4/37.5, +37.5: D5~37.5 + C5^37.5 + B4-37.5 + A4/37.5 + G4/37.5, +37.5: D5~37.5 + C5~37.5 + B4^37.5 + A4-37.5 + G4/37.5, +37.5: C5~37.5 + B4^37.5 + A4-37.5 + G4/37.5, +37.5: G4/37.5 + A4-37.5 + B4^37.5 + C5~37.5, +37.5: G4/37.5 + A4-37.5 + B4^37.5 + C5~37.5, +37.5: F4/37.5 + A4-37.5 + B4^37.5 + C5~37.5, +37.5: F4/37.5 + G4-37.5 + B4^37.5 + A4^37.5 + C5~37.5, +37.5: F4/37.5 + G4-37.5 + A4^37.5 + C5~37.5 + B4~37.5, +37.5: F4/37.5 + E4/37.5 + G4-37.5 + A4^37.5 + B4~37.5, +37.5: E4/37.5 + G4-37.5 + A4^37.5 + F4-37.5 + B4~37.5, +37.5: E4/37.5 + G4-37.5 + A4^37.5 + F4-37.5 + B4~37.5, +37.5: E4/37.5 + G4-37.5 + A4^37.5 + F4-37.5 + B4~37.5, +37.5: E4/37.5 + G4-37.5 + F4-37.5 + A4^37.5 + B4~37.5, +37.5: E4-37.5 + D4/37.5 + F4-37.5 + A4^37.5 + G4^37.5, +37.5: D4/37.5 + E4-37.5 + G4^37.5 + F4^37.5 + C4/37.5, +37.5: D4/37.5 + E4-37.5 + F4^37.5 + C4/37.5 + A4~37.5, +37.5: D4-37.5 + E4^37.5 + F4^37.5 + C4/37.5 + G4~37.5, +37.5: E4^37.5 + D4-37.5 + C4/37.5 + G4~37.5, +37.5: C4/37.5 + E4^37.5 + D4-37.5 + F4~37.5 + G4~37.5, +37.5: C4/37.5 + D4-37.5 + E4^37.5 + F4~37.5`; + +const player = "p"; +const wall = "w"; +const fake = "f"; +const goal = "g"; +const slide = "s"; +const coin = "c"; +const coinShow = "x"; +const loopGoal = "l"; +setLegend( + [player, bitmap` +................ +................ +.......000...... +.......0.0...... +......0..0...... +......0...0.0... +....0003.30.0... +....0.0...000... +....0.05550..... +......09990..... +.....099990..... +.....09990...... +......000....... +......0.0....... +.....00.00...... +................`], + [wall, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`], + [fake, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`], + [goal, bitmap` +................ +....44444444.... +...4444444444... +..444444444444.. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +.44444444444444. +..444444444444.. +...4444444444... +....44444444.... +................`], + [slide, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`], + [coin, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`], + [coinShow, bitmap` +1111111111111111 +1111666666661111 +1116611111166111 +1161111111111611 +1661111111111661 +1611116666111161 +1611161111111161 +1611161111111161 +1611161111111161 +1611161111111161 +1611116666111161 +1661111111111661 +1161111111111611 +1116611111166111 +1111666666661111 +1111111111111111`], + [loopGoal, bitmap` +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111`] +); + +setSolids([wall, player, slide]); +let level = -1; +let collected = false; +let start = false; +let time = 0; +const intro = map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........` +const tutorialLevels = [map` +pw.......w +.w.w.w.w.w +.w...w...w +...wwwww.. +wwww....w. +cfffs.w... +wwwww...w. +g.....w...`]; +const altLevels = [map` +pw...c.... +.f.w.w.wwg +.w.f.w.fcf +.c.w.c.wcw +.c.w.f.wwc +.w.w.w.scc +.w.c.w.wws +...w...wcf`] +const levels = [ + map` +pw...w.... +.c.w.w.wwg +.w.w.w.fff +.f.w.f.www +.w.f.w.wcc +.w.w.w.wcc +.w.w.w.wcc +...w...scc`, + map` +pwfwwwwgff +fwfffffwwf +fwfwfwffwf +fffwfwfwff +fwfwfwfwfw +fwfwffwlff +fwfwwffwwf +fwfffwffff` +]; +let pressed = false; +let finished = false; + +function showTutorial(tut) { + setMap(tutorialLevels[tut]); + addText("The Tutorial", { y: 0, color: color`7` }); + addText("Use WASD to move", { y: 5, color: color`0` }); + addText("L to skip", { y: 7, color: color`0` }); + addText("Reach the goal", { y: 9, color: color`0` }); +} + +function clear() { + clearText(); + addText("Level " + (level + 1)); +} + +function loadLevel() { + if (level === -1) { + showTutorial(0); + } else { + clear() + if (level === 0 && pressed) { + setMap(altLevels[0]); + } else { + setMap(levels[level]); + } + } +} +setMap(intro); +addText("A haiku", { y: 1, color: color`8` }); +addText("Is it possible", { y: 3, color: color`D` }); +setTimeout(function() { + clearText(); + addText("A haiku", { y: 1, color: color`8` }); + addText("to work on", { y: 5, color: color`D` }); + addText("Arcade, Sprig, and", { y: 7, color: color`D` }); + setTimeout(function() { + clearText(); + addText("A haiku", { y: 1, color: color`8` }); + addText("Jam at the", { y: 9, color: color`D` }); + addText("same time?", { y: 11, color: color`D` }); + setTimeout(function() { + addText("Yes it is! -Bartosz", { y: 13, color: color`3` }); + setTimeout(function() { + clearText(); + start = true; + loadLevel(); + const playback = playTune(soundtrack, Infinity); + }, 1000); + }, 2000); + }, 1000); +}, 1000); +// addText("Jam on the same time?", { y: 9, color: color`D` }); + + +onInput("w", () => { + if (start) getFirst(player).y -= 1; +}); + +onInput("a", () => { + if (start) getFirst(player).x -= 1; +}); + +onInput("s", () => { + if (start) getFirst(player).y += 1; +}); + +onInput("d", () => { + if (start) getFirst(player).x += 1; +}); + +onInput("l", () => { + if (start && level === -1) { + + const playerPos = getFirst(player); + const goalPos = getFirst(goal); + playerPos.x = goalPos.x; + playerPos.y = goalPos.y; + } +}); + +onInput("j", () => { + if (start) { + const playerPos = getFirst(player); + let x = playerPos.x; + let y = playerPos.y; + for (const [i, j] of [ + [-1, 0], + [1, 0], + [0, -1], + [0, 1] + ]) { + let nx = x + i; + let ny = y + j; + if (getTile(nx, ny).length > 0 && getTile(nx, ny)[0].type === slide) { + [playerPos.x, playerPos.y] = [nx + i, ny + j]; + break; + } + } + } +}); + +onInput("k", () => { + if (start) { + const playerPos = getFirst(player); + const coins = getAll(coin).concat(getAll(coinShow)); + coins.forEach(coinPos => { + if (playerPos.x === coinPos.x && playerPos.y === coinPos.y) { + coinPos.type = fake; + time -= 15; + playTune(coinTrack); + } + }) + } +}); + +afterInput(() => { + if (start) { + const playerPos = getFirst(player); + const goalPos = getFirst(goal); + const coins = getAll(coin, coinShow); + coins.forEach(coinPos => { + if (playerPos.x === coinPos.x && playerPos.y === coinPos.y) coinPos.type = coinShow; + }) + if (level === 1 && playerPos.x === getFirst(loopGoal).x && playerPos.y === getFirst(loopGoal).y) { + pressed = true; + level = 0; + loadLevel(); + } else if (playerPos.x === goalPos.x && playerPos.y === goalPos.y) { + if (level === -1) { + level = 0; + loadLevel(); + addText("Congratulations,", { y: 5, color: color`F` }); + addText("Tutorial complete!", { y: 7, color: color`F` }); + setTimeout(function() { + clear(); + }, 2000); + } else { + level++; + if (level >= levels.length) { + finished = true; + addText("You Win!", { y: 6, color: color`4` }); + playback.end(); + } else { + loadLevel(); + } + } + } + } +}); + +const timer = setInterval(() => { + if (!finished && start) { + time += 1; + addText("Time: " + (time / 10).toFixed(1), { y: 15, color: color`L` }); + } +}, 100); + diff --git a/games/infinite_maze.js b/games/infinite_maze.js index 9d9feb0edf..ebbedcd88a 100644 --- a/games/infinite_maze.js +++ b/games/infinite_maze.js @@ -1,8 +1,8 @@ /* @title: Infinite Maze +@author: pertark @tags: ['endless'] @addedOn: 2022-09-22 -@author: pertark */ //INCLUDE diff --git a/games/itsagame.js b/games/itsagame.js index 59c28ed33f..cf38f6c505 100644 --- a/games/itsagame.js +++ b/games/itsagame.js @@ -2,8 +2,8 @@ @title: Chest Game @author: Izaiaz2121 @tags: [] -@img: "" @addedOn: 2024-05-20 +@img: "" */ const player = "p"; diff --git a/games/itsrainingtacos.js b/games/itsrainingtacos.js index c151edeeb8..dfd495b8cc 100644 --- a/games/itsrainingtacos.js +++ b/games/itsrainingtacos.js @@ -1,7 +1,7 @@ /* @title: It's Raining Tacos @author: omarko -@tags: ["Dodge","Survival","Shooter"] +@tags: ['action','survival'] @addedOn: 2024-08-05 */ diff --git a/games/jeff_boxos.js b/games/jeff_boxos.js index 5158845b34..60b1ed643a 100644 --- a/games/jeff_boxos.js +++ b/games/jeff_boxos.js @@ -1,7 +1,7 @@ /* @title: jeff boxos @author: snwy -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-04-12 */ diff --git a/games/jumping_banana.js b/games/jumping_banana.js index a24ca2b7f9..f6299448f3 100644 --- a/games/jumping_banana.js +++ b/games/jumping_banana.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Jumping banana @author: Ernests -@tags: ['endless', 'dodge'] +@tags: ['endless','action'] @addedOn: 2024-07-06 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + Movement: w - jump diff --git a/games/keyTester.js b/games/keyTester.js index caded543f2..89c5b84da0 100644 --- a/games/keyTester.js +++ b/games/keyTester.js @@ -1,9 +1,9 @@ {} /* @title: keyTester -@tags: ['tool'] -@addedOn: 2023-01-12 @author: devramsean0 +@tags: ['utility'] +@addedOn: 2023-01-12 */ // Music const beep = tune` diff --git a/games/keyboardForSprig.js b/games/keyboardForSprig.js index f0aeb8232b..4b53e145fe 100644 --- a/games/keyboardForSprig.js +++ b/games/keyboardForSprig.js @@ -1,217 +1,217 @@ -/* -@title: keyboard for sprig -@author: mrdarip -@tags: ['tool'] -@addedOn: 2024-08-15 - -Select the line where the character you want to write is, -if you have written your word completelly and your word haven't -been written yet just start from the first character. - -press on an empty character ten times to see what you have written. -*/ - -//const words = ("write here the words you would like to write and comment next line but discomment this too").toLowerCase().split(" ") -const words = ("the of to and a in is it you that he was for on are with as I his they be at one have this from or had by not word but what some we can out other were all there when up use your how said an each she which do their time if will way about many then them write would like so these her long make thing see him two has look more day could go come did number sound no most people my over know water than call first who may down side been now find any new work part take get place made live where after back little only round man year came show every good me give our under name very through just form sentence great think say help low line differ turn cause much mean before move right boy old too same tell does set three want air well also play small end put home read hand port large spell add even land here must big high such follow act why ask men change went light kind off need house picture try us again animal point mother world near build self earth father head stand own page should country found answer school grow study still learn plant cover food sun four between state keep eye never last let thought city tree cross farm hard start might story saw far sea draw left late run don't while press close night real life few north open seem together next white children begin got walk example ease paper group always music those both mark often letter until mile river car feet care second book carry took science eat room friend began idea fish mountain stop once base hear horse cut sure watch color face wood main enough plain girl usual young ready above ever red list though feel talk bird soon body dog family direct pose leave song measure door product black short numeral class wind question happen complete ship area half rock order fire south problem piece told knew pass since top whole king space heard best hour better true during hundred five remember step early hold west ground interest reach fast verb sing listen six table travel less morning ten simple several vowel toward war lay against pattern slow center love person money serve appear road map rain rule govern pull cold notice voice unit power town fine certain fly fall lead cry dark machine note wait plan figure star box noun field rest correct able pound done beauty drive stood contain front teach week final gave green oh quick develop ocean warm free minute strong special mind behind clear tail produce fact street inch multiply nothing course stay wheel full force blue object decide surface deep moon island foot system busy test record boat common gold possible plane stead dry wonder laugh thousand ago ran check game shape equate hot miss brought heat snow tire bring yes distant fill east paint language among grand ball yet wave drop heart am present heavy dance engine position arm wide sail material size vary settle speak weight general ice matter circle pair include divide syllable felt perhaps pick sudden count square reason length represent art subject region energy hunt probable bed brother egg ride cell believe fraction forest sit race window store summer train sleep prove lone leg exercise wall catch mount wish sky board joy winter sat written wild instrument kept glass grass cow job edge sign visit past soft fun bright gas weather month million bear finish happy hope flower clothe strange gone jump baby eight village meet root buy raise solve metal whether push seven paragraph third shall held hair describe cook floor either result burn hill safe cat century consider type law bit coast copy phrase silent tall sand soil roll temperature finger industry value fight lie beat excite natural view sense ear else quite broke case middle kill son lake moment scale loud spring observe child straight consonant nation dictionary milk speed method organ pay age section dress cloud surprise quiet stone tiny climb cool design poor lot experiment bottom key iron single stick flat twenty skin smile crease hole trade melody trip office receive row mouth exact symbol die least trouble shout except wrote seed tone join suggest clean break lady yard rise bad blow oil blood touch grew cent mix team wire cost lost brown wear garden equal sent choose fell fit flow fair bank collect save control decimal gentle woman captain practice separate difficult doctor please protect noon whose locate ring character insect caught period indicate radio spoke atom human history effect electric expect crop modern element hit student corner party supply bone rail imagine provide agree thus capital won't chair danger fruit rich thick soldier process operate guess necessary sharp wing create neighbor wash bat rather crowd corn compare poem string bell depend meat rub tube famous dollar stream fear sight thin triangle planet hurry chief colony clock mine tie enter major fresh search send yellow gun allow print dead spot desert suit current lift rose continue block chart hat sell success company subtract event particular deal swim term opposite wife shoe shoulder spread arrange camp invent cotton born determine quart nine truck noise level chance gather shop stretch throw shine property column molecule select wrong gray repeat require broad prepare salt nose plural anger claim continent oxygen sugar death pretty skill women season solution magnet silver thank branch match suffix especially fig afraid huge sister steel discuss forward similar guide experience score apple bought led pitch coat mass card band rope slip win dream evening condition feed tool total basic smell valley nor double seat arrive master track parent shore division sheet substance favor connect post spend chord fat glad original share station dad bread charge proper bar offer segment slave duck instant market degree populate chick dear enemy reply drink occur support speech nature range steam motion path liquid log meant quotient teeth shell neck").split(" ") -const keys = ("wdsailkj").split("") - -var emptyKeysPressed = 0 -var readingLine = 0 - -var writtenTextTokens = [] -var possibleWords = words -var currentCharIndex = 0 -var charsOnButtons = [ - [], - [], - [], - [], - [], - [], - [], - [] -] - -calcKeyboard() - -function calcKeyboard() { - charsOnButtons = [ - [], - [], - [], - [], - [], - [], - [], - [] - ] - let buttonsWeight = [0, 0, 0, 0, 0, 0, 0, 0] - - let charsCount = {} - - for (let word of possibleWords) { //we count the sum of characters at current index - letterAtCurrentIndex = word.charAt(currentCharIndex % word.length) - - charsCount[letterAtCurrentIndex] = charsCount[letterAtCurrentIndex] ? charsCount[letterAtCurrentIndex] + 1 : 1 - } - - let sortedCharsCount = Object.fromEntries( - Object.entries(charsCount).sort(([, a], [, b]) => b - a) - ); - - for (const [key, value] of Object.entries(sortedCharsCount)) { - let minWeight = Math.min(...buttonsWeight) - let minWeightIndex = buttonsWeight.indexOf(minWeight) - - buttonsWeight[minWeightIndex] += value - charsOnButtons[minWeightIndex].push(key) - } - - updateUI() -} - -function updateUI() { - clearText() - displayKeyboard() - displayText() -} - -function displayText() { - let allText = writtenTextTokens.join(" ") - addText(allText.substring(allText.length - width() * 2), { - x: 0, - y: 0, - color: '0' - }) -} - -function displayKeyboard() { - let keyPositions = [ - [3, 8], - [6, 9], - [3, 11], - [0, 10], - [13, 12], - [16, 13], - [13, 15], - [10, 14] - ] - - for (let i = 0; i < charsOnButtons.length; i++) { - addText(charsOnButtons[i].join(""), { - x: keyPositions[i][0], - y: keyPositions[i][1], - color: i >= 4 ? '5' : '3' - }) - } -} - -let level = 0 -const levels = [ - map` -.......... -.......... -.......... -.......... -.......... -.......... -.......... -..........` -] - -setMap(levels[level]) - -const powerOn = tune` -225, -37.5: F5-37.5, -37.5: A5-37.5, -37.5: F5-37.5, -37.5: A5-37.5, -825` -const ok = tune` -100: F5-100, -100: A5-100, -3000` -const superOk = tune` -100: F5-100, -100: G5-100, -100: B5-100, -2900` -const wrong = tune` -100: E4-100, -100: C4-100, -3000` -const superWrong = tune` -100: E4-100, -100: C4-100, -100: D4-100, -100, -100: C4-100, -2700` - -playTune(powerOn) - - -for (let key of keys) { - onInput(key, () => { - if (level == 0) { - if (charsOnButtons[keys.indexOf(key)].length < 1) { - - emptyKeysPressed++ - - if (emptyKeysPressed >= 10) { - playTune(superWrong) - clearText() - level = 1 - - setReadingInput() - } else { - playTune(wrong) - } - } else { - emptyKeysPressed = 0 - - possibleWords = possibleWords.filter(word => charsOnButtons[keys.indexOf(key)].includes(word.charAt(currentCharIndex % word.length))) - - if (possibleWords.length <= 1) { - playTune(superOk) - writtenTextTokens.push(possibleWords[0]) - possibleWords = words - currentCharIndex = 0 - } else { - playTune(ok) - currentCharIndex++ - } - - calcKeyboard() - } - } - }) -} - -function setReadingInput() { - updateReadingUI() - - onInput('w', () => { - readingLine-- - updateReadingUI() - }) - onInput('s', () => { - readingLine++ - updateReadingUI() - }) -} - -function updateReadingUI() { - clearText() - let allText = writtenTextTokens.join(" ") - - for (let i = 0; i < height() * 2; i++) { - addText(allText.substring((i + readingLine) * (width() * 2), (i + readingLine + 1) * width() * 2), { - x: 0, - y: i, - color: '0' - }) - } -} - +/* +@title: keyboard for sprig +@author: mrdarip +@tags: ['utility'] +@addedOn: 2024-08-15 + +Select the line where the character you want to write is, +if you have written your word completelly and your word haven't +been written yet just start from the first character. + +press on an empty character ten times to see what you have written. +*/ + +//const words = ("write here the words you would like to write and comment next line but discomment this too").toLowerCase().split(" ") +const words = ("the of to and a in is it you that he was for on are with as I his they be at one have this from or had by not word but what some we can out other were all there when up use your how said an each she which do their time if will way about many then them write would like so these her long make thing see him two has look more day could go come did number sound no most people my over know water than call first who may down side been now find any new work part take get place made live where after back little only round man year came show every good me give our under name very through just form sentence great think say help low line differ turn cause much mean before move right boy old too same tell does set three want air well also play small end put home read hand port large spell add even land here must big high such follow act why ask men change went light kind off need house picture try us again animal point mother world near build self earth father head stand own page should country found answer school grow study still learn plant cover food sun four between state keep eye never last let thought city tree cross farm hard start might story saw far sea draw left late run don't while press close night real life few north open seem together next white children begin got walk example ease paper group always music those both mark often letter until mile river car feet care second book carry took science eat room friend began idea fish mountain stop once base hear horse cut sure watch color face wood main enough plain girl usual young ready above ever red list though feel talk bird soon body dog family direct pose leave song measure door product black short numeral class wind question happen complete ship area half rock order fire south problem piece told knew pass since top whole king space heard best hour better true during hundred five remember step early hold west ground interest reach fast verb sing listen six table travel less morning ten simple several vowel toward war lay against pattern slow center love person money serve appear road map rain rule govern pull cold notice voice unit power town fine certain fly fall lead cry dark machine note wait plan figure star box noun field rest correct able pound done beauty drive stood contain front teach week final gave green oh quick develop ocean warm free minute strong special mind behind clear tail produce fact street inch multiply nothing course stay wheel full force blue object decide surface deep moon island foot system busy test record boat common gold possible plane stead dry wonder laugh thousand ago ran check game shape equate hot miss brought heat snow tire bring yes distant fill east paint language among grand ball yet wave drop heart am present heavy dance engine position arm wide sail material size vary settle speak weight general ice matter circle pair include divide syllable felt perhaps pick sudden count square reason length represent art subject region energy hunt probable bed brother egg ride cell believe fraction forest sit race window store summer train sleep prove lone leg exercise wall catch mount wish sky board joy winter sat written wild instrument kept glass grass cow job edge sign visit past soft fun bright gas weather month million bear finish happy hope flower clothe strange gone jump baby eight village meet root buy raise solve metal whether push seven paragraph third shall held hair describe cook floor either result burn hill safe cat century consider type law bit coast copy phrase silent tall sand soil roll temperature finger industry value fight lie beat excite natural view sense ear else quite broke case middle kill son lake moment scale loud spring observe child straight consonant nation dictionary milk speed method organ pay age section dress cloud surprise quiet stone tiny climb cool design poor lot experiment bottom key iron single stick flat twenty skin smile crease hole trade melody trip office receive row mouth exact symbol die least trouble shout except wrote seed tone join suggest clean break lady yard rise bad blow oil blood touch grew cent mix team wire cost lost brown wear garden equal sent choose fell fit flow fair bank collect save control decimal gentle woman captain practice separate difficult doctor please protect noon whose locate ring character insect caught period indicate radio spoke atom human history effect electric expect crop modern element hit student corner party supply bone rail imagine provide agree thus capital won't chair danger fruit rich thick soldier process operate guess necessary sharp wing create neighbor wash bat rather crowd corn compare poem string bell depend meat rub tube famous dollar stream fear sight thin triangle planet hurry chief colony clock mine tie enter major fresh search send yellow gun allow print dead spot desert suit current lift rose continue block chart hat sell success company subtract event particular deal swim term opposite wife shoe shoulder spread arrange camp invent cotton born determine quart nine truck noise level chance gather shop stretch throw shine property column molecule select wrong gray repeat require broad prepare salt nose plural anger claim continent oxygen sugar death pretty skill women season solution magnet silver thank branch match suffix especially fig afraid huge sister steel discuss forward similar guide experience score apple bought led pitch coat mass card band rope slip win dream evening condition feed tool total basic smell valley nor double seat arrive master track parent shore division sheet substance favor connect post spend chord fat glad original share station dad bread charge proper bar offer segment slave duck instant market degree populate chick dear enemy reply drink occur support speech nature range steam motion path liquid log meant quotient teeth shell neck").split(" ") +const keys = ("wdsailkj").split("") + +var emptyKeysPressed = 0 +var readingLine = 0 + +var writtenTextTokens = [] +var possibleWords = words +var currentCharIndex = 0 +var charsOnButtons = [ + [], + [], + [], + [], + [], + [], + [], + [] +] + +calcKeyboard() + +function calcKeyboard() { + charsOnButtons = [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + let buttonsWeight = [0, 0, 0, 0, 0, 0, 0, 0] + + let charsCount = {} + + for (let word of possibleWords) { //we count the sum of characters at current index + letterAtCurrentIndex = word.charAt(currentCharIndex % word.length) + + charsCount[letterAtCurrentIndex] = charsCount[letterAtCurrentIndex] ? charsCount[letterAtCurrentIndex] + 1 : 1 + } + + let sortedCharsCount = Object.fromEntries( + Object.entries(charsCount).sort(([, a], [, b]) => b - a) + ); + + for (const [key, value] of Object.entries(sortedCharsCount)) { + let minWeight = Math.min(...buttonsWeight) + let minWeightIndex = buttonsWeight.indexOf(minWeight) + + buttonsWeight[minWeightIndex] += value + charsOnButtons[minWeightIndex].push(key) + } + + updateUI() +} + +function updateUI() { + clearText() + displayKeyboard() + displayText() +} + +function displayText() { + let allText = writtenTextTokens.join(" ") + addText(allText.substring(allText.length - width() * 2), { + x: 0, + y: 0, + color: '0' + }) +} + +function displayKeyboard() { + let keyPositions = [ + [3, 8], + [6, 9], + [3, 11], + [0, 10], + [13, 12], + [16, 13], + [13, 15], + [10, 14] + ] + + for (let i = 0; i < charsOnButtons.length; i++) { + addText(charsOnButtons[i].join(""), { + x: keyPositions[i][0], + y: keyPositions[i][1], + color: i >= 4 ? '5' : '3' + }) + } +} + +let level = 0 +const levels = [ + map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........` +] + +setMap(levels[level]) + +const powerOn = tune` +225, +37.5: F5-37.5, +37.5: A5-37.5, +37.5: F5-37.5, +37.5: A5-37.5, +825` +const ok = tune` +100: F5-100, +100: A5-100, +3000` +const superOk = tune` +100: F5-100, +100: G5-100, +100: B5-100, +2900` +const wrong = tune` +100: E4-100, +100: C4-100, +3000` +const superWrong = tune` +100: E4-100, +100: C4-100, +100: D4-100, +100, +100: C4-100, +2700` + +playTune(powerOn) + + +for (let key of keys) { + onInput(key, () => { + if (level == 0) { + if (charsOnButtons[keys.indexOf(key)].length < 1) { + + emptyKeysPressed++ + + if (emptyKeysPressed >= 10) { + playTune(superWrong) + clearText() + level = 1 + + setReadingInput() + } else { + playTune(wrong) + } + } else { + emptyKeysPressed = 0 + + possibleWords = possibleWords.filter(word => charsOnButtons[keys.indexOf(key)].includes(word.charAt(currentCharIndex % word.length))) + + if (possibleWords.length <= 1) { + playTune(superOk) + writtenTextTokens.push(possibleWords[0]) + possibleWords = words + currentCharIndex = 0 + } else { + playTune(ok) + currentCharIndex++ + } + + calcKeyboard() + } + } + }) +} + +function setReadingInput() { + updateReadingUI() + + onInput('w', () => { + readingLine-- + updateReadingUI() + }) + onInput('s', () => { + readingLine++ + updateReadingUI() + }) +} + +function updateReadingUI() { + clearText() + let allText = writtenTextTokens.join(" ") + + for (let i = 0; i < height() * 2; i++) { + addText(allText.substring((i + readingLine) * (width() * 2), (i + readingLine + 1) * width() * 2), { + x: 0, + y: i, + color: '0' + }) + } +} + diff --git a/games/killer_training.js b/games/killer_training.js index a3621e31ff..a34b2e8425 100644 --- a/games/killer_training.js +++ b/games/killer_training.js @@ -1,8 +1,8 @@ /* @title: killer_training -@tags: ['timer-puzzle'] -@addedOn: 2023-09-16 @author: jakjakob +@tags: ['puzzle','timed'] +@addedOn: 2023-09-16 version: 1.1.0 diff --git a/games/killpigs.js b/games/killpigs.js index 8ed13f08ff..0827239081 100644 --- a/games/killpigs.js +++ b/games/killpigs.js @@ -1,8 +1,8 @@ /* @title: kill pigs -@tags: ['logic'] -@addedOn: 2022-09-13 @author: luiç +@tags: ['puzzle'] +@addedOn: 2022-09-13 Instructions: You are a storm god and you want some pigs to make your dinner... diff --git a/games/kilroy_saves_the_game.js b/games/kilroy_saves_the_game.js index 49d05cf54b..1da449d73c 100644 --- a/games/kilroy_saves_the_game.js +++ b/games/kilroy_saves_the_game.js @@ -1,7 +1,7 @@ /** @title: Kilroy Saves the Game! -@author: Jacob Fisher -@tags: ['kilroy', 'frc'] +@author: Jacob Fisher +@tags: [] @addedOn: 2024-07-08 */ const quick = false diff --git a/games/kindless.js b/games/kindless.js index 32b30be366..4fd5beee8a 100644 --- a/games/kindless.js +++ b/games/kindless.js @@ -1,8 +1,8 @@ /* @title: kindless -@tags: ['advanced'] -@addedOn: 2022-07-26 @author: Ishan (@quackduck) +@tags: [] +@addedOn: 2022-07-26 This game has WASD controls, can be quite mean, and may or may not have a cheat code. diff --git a/games/kitchen_nightmares.js b/games/kitchen_nightmares.js index 6044ef6128..310397a5f7 100644 --- a/games/kitchen_nightmares.js +++ b/games/kitchen_nightmares.js @@ -1,9 +1,9 @@ /* @title: Kitchen Nightmares +@author: Aditya Nair @tags: [] -@img: "" @addedOn: 2024-05-31 -@author: Aditya Nair +@img: "" */ const background = "b"; const player = "p"; diff --git a/games/knight-buster.js b/games/knight-buster.js index dfc3d322de..000fc2a84a 100644 --- a/games/knight-buster.js +++ b/games/knight-buster.js @@ -1,7 +1,7 @@ /* @title: Knight Buster @author: Isobel P -@tags: ["multiplayer"] +@tags: ['multiplayer'] @addedOn: 2024-07-22 */ diff --git a/games/laser_tag.js b/games/laser_tag.js index e498e433b7..6919d158dd 100644 --- a/games/laser_tag.js +++ b/games/laser_tag.js @@ -1,8 +1,8 @@ /* @title: laser tag -@tags: ['hackable', 'strategy'] -@addedOn: 2022-07-14 @author: leo +@tags: ['strategy'] +@addedOn: 2022-07-14 Instructions: diff --git a/games/lasers_vs._fog.js b/games/lasers_vs._fog.js new file mode 100644 index 0000000000..64ce4cdce6 --- /dev/null +++ b/games/lasers_vs._fog.js @@ -0,0 +1,455 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started +javascript:void(0); +@title: lasers vs fog +@author: e-rairigh +@tags: ['multiplayer'] +@addedOn: 2024-09-27 +*/ +let win = false +let shot = false +const glass = "g" +const foger = "G" +const path = "p" +const laser = "l" +const zaper = "z" +const floor = "F" +const zapX = "x" +const fog = "f" +const lase = "a" + +const tne = tune` +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065 + C5-247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065, +247.93388429752065: C4~247.93388429752065 + G4-247.93388429752065 + C5~247.93388429752065, +247.93388429752065: E4^247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065 + C5-247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065 + A4-247.93388429752065 + G5-247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065 + E5~247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065 + G4-247.93388429752065, +247.93388429752065: C4~247.93388429752065 + B4-247.93388429752065, +247.93388429752065: E4^247.93388429752065 + D5-247.93388429752065 + G4~247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065, +247.93388429752065: C4~247.93388429752065 + A5/247.93388429752065, +247.93388429752065: E4^247.93388429752065 + G5~247.93388429752065, +247.93388429752065: C4~247.93388429752065 + F5/247.93388429752065, +247.93388429752065: E4^247.93388429752065 + E5~247.93388429752065, +247.93388429752065: C4~247.93388429752065 + D5/247.93388429752065 + G4-247.93388429752065, +247.93388429752065: E4^247.93388429752065 + C5~247.93388429752065, +247.93388429752065: C4~247.93388429752065, +247.93388429752065: E4^247.93388429752065` +const smile = tune` +37.5, +37.5: B5^37.5 + A5^37.5, +37.5: A5^37.5, +37.5: G5^37.5 + F5^37.5 + E5^37.5, +37.5: D5^37.5, +37.5: D5^37.5, +37.5: C5^37.5, +37.5: C5^37.5 + B4^37.5 + A4^37.5 + G4^37.5, +37.5: B4^37.5 + G4^37.5, +37.5: A4~37.5 + G4~37.5 + B4~37.5 + C5~37.5 + D5~37.5, +37.5: A4^37.5 + G4^37.5 + F5^37.5, +37.5: B4^37.5 + A4^37.5 + G4^37.5 + F5^37.5, +37.5: B4^37.5 + A4^37.5 + F5^37.5, +37.5: B4~37.5 + C5~37.5 + D5~37.5 + E5~37.5 + F5~37.5, +37.5: F5^37.5 + G4^37.5 + G5^37.5, +37.5: F5^37.5 + G4^37.5 + G5^37.5, +37.5: F5^37.5 + A4^37.5 + G5^37.5, +37.5: F5^37.5 + B4^37.5 + A4^37.5 + G5^37.5, +37.5: F5~37.5 + C5~37.5 + B4~37.5 + D4~37.5 + C4~37.5, +37.5: E5~37.5 + D5~37.5 + F5~37.5 + C5~37.5 + B4~37.5, +37.5: D4~37.5, +37.5: E4~37.5, +37.5: F4~37.5, +37.5: F4~37.5 + G4~37.5, +37.5: G4~37.5 + A4~37.5 + B4~37.5 + C5~37.5 + D5~37.5, +37.5: E5~37.5 + F5~37.5, +37.5: F5~37.5 + E5~37.5, +37.5: E5~37.5 + D5~37.5 + C5~37.5 + B4~37.5, +150` +playTune(tne,Infinity) + +setLegend( + [foger, bitmap` +.......21....... +......0120...... +.....000000..... +....00021000.... +...0010220200... +..001221221200.. +.00002222120000. +1202212122221021 +2101222212122012 +.00002122220000. +..001221212100.. +...0010220200... +....00021000.... +.....000000..... +......0120...... +.......21.......`], + [zaper, bitmap` +.......57....... +......0750...... +.....000000..... +....00057000.... +...0070550500... +..007557557500.. +.00005555750000. +7505575755557057 +5707555575755075 +.00005755550000. +..007557575700.. +...0070550500... +....00057000.... +.....000000..... +......0750...... +.......57.......`], + [laser, bitmap` +................ +................ +................ +................ +...........L.... +..........L5L... +....LLLL.L577L.. +...LLL7LL57575L. +..LLL757LLLLLL.. +..LLLL7LL77575L. +...LLLLL.L577L.. +..........L5L... +...........L.... +................ +................ +................`] , + [ fog, bitmap` +..222222122222.. +.22222222222222. +2221222222222122 +1222222222122222 +2222222122222222 +2222222222222222 +2212222222222222 +2222212222122222 +2222222222222222 +2222222222222222 +2122222222222122 +2222222222122222 +2212212222222222 +2222222222222222 +.22222221222222. +..222222222222..`], + [lase, bitmap` +................ +................ +................ +................ +................ +................ +................ +......757575.... +......575757.... +................ +................ +................ +................ +................ +................ +................`], + [floor, bitmap` +LLLLLL1LL111111L +L1L111111111111L +L11111111111111L +LL1111111111112L +L111111111111111 +111111111111112L +111111111111111L +L11111111111112L +111111111111111L +111111111111112L +1111111111111221 +111111111111112L +L11111111111211L +L111111112111221 +111122121121221L +LL1LL11LLLL1LL1L`]) + + + + +let level = 0 +const levels = [ + map` +..................f +................... +................... +l.................. +................... +................... +................... +...................`, + map` +l.................f +.............z..... +................... +.........z........z +....z.............. +................... +.......z....z...... +...................`, + map` +l.................f +.....z.......z..... +..G................ +.........G........G +....z.............. +...............G... +.......G....z...... +...................`, + map` +l............z....f +....G.............. +.......G....z...... +...........G....... +....G........z..... +.........z....G.... +.......G....z...... +................z..`, + map` +l...G.............f +......G....z.zz.... +....G...G...z.z.... +....G.G.G...zzz.z.. +......G......zzz... +...G.......z..zzz.. +...GG...G.G...zzz.. +............z..z...`, + map` +l...G.............f +......G....z.zz.... +....G...G...z.z.... +........G...zzz.z.. +.............z..... +...G.......z..zzz.. +...GG...G.G...zzz.. +............z..z...`, + map` +l............z....f +....G.............. +.......G....z...... +...........G....... +....G........z..... +.........z....G.... +.......G....z...... +................z..`, +map` +l.................f +.....z.......z..... +..G................ +.........G........G +....z.............. +...............G... +.......G....z...... +...................`, + map` +l.................f +.............z..... +................... +.........z........z +....z.............. +................... +.......z....z...... +...................`, + map` +l.................f. +..GG..GGG.GGG.GG.GG. +..GzG.GzG.GzG.GzGzG. +..GzG.GzG.GzG.GzzzG. +..GzG.GzG.GzG.GzzzG. +..GzG.GzG.GzG.G...G. +..GG..GGG.GGG.GzzzG. +....................` +] + +setBackground(floor) + +function fire() + { + shot = true + const originalSprite = getFirst(laser) + +// Create a new sprite with the same properties +let clonedSprite = addSprite(originalSprite.x + 1, originalSprite.y, lase)} + +function isOver(obj1,obj2,xs=0,xl=0,ys=0,yl=0){ + return (getFirst(obj1).x+xs == getFirst(obj2).x+xl && getFirst(obj1).y+ys == getFirst(obj2).y+yl) +} + +setMap(levels[0]) + + +function zap(){ + for(let i = 0;i < getAll(zaper).length; i++){ + let j = getAll(zaper)[i] + if(j.x == getFirst(fog).x && j.y == getFirst(fog).y){ + + clearTile(j.x,j.y-1) + clearTile(j.x,j.y+1) + clearTile(j.x-1,j.y) + clearTile(j.x+1,j.y) + clearTile(j.x-1,j.y-1) + clearTile(j.x+1,j.y+1) + clearTile(j.x-1,j.y+1) + clearTile(j.x+1,j.y-1) + + j.remove() + } + } + +} + +function puf(){ + let j + for(let i = 0;i < getAll(foger).length; i++){ + j = getAll(foger)[i] + if (shot){ + if(j.x-4 == getFirst(lase).x && j.y == getFirst(lase).y){ + + addSprite(j.x,j.y-1,fog) + addSprite(j.x,j.y+1,fog) + addSprite(j.x-1,j.y,fog) + addSprite(j.x+1,j.y,fog) + addSprite(j.x-1,j.y-1,fog) + addSprite(j.x+1,j.y+1,fog) + addSprite(j.x-1,j.y+1,fog) + addSprite(j.x+1,j.y-1,fog) + getFirst(lase).remove() + shot = false + j.remove() + } + } + } +} + +function time(){ + if(getAll(fog).length >= 40){ + addText("FOG WINS!!!",{x:4,y:8,color:color`D`}) + win = true + onInput("i",() => { + if (win){ + clearText() + display = true + level = Math.round(Math.random() * 9) + timer = 120 + setMap(levels[level]) + win = false} + }) + } + else{ + addText("LASER WINS!!!",{x:4,y:8,color:color`5`}) + win = true + onInput("w",() => { + if(win){ + clearText() + display = true + level = Math.round(Math.random() * 9) + timer = 120 + setMap(levels[level]) + win = false} + }) + } + +} + +onInput("k", () => { + getFirst(fog).y += 1 +}) + +onInput("i", () => { + getFirst(fog).y -= 1 +}) + +onInput("l", () => { + getFirst(fog).x += 1 +}) + +onInput("j", () => { + getFirst(fog).x -= 1 +}) + +onInput("w", () => { + getFirst(laser).y -= 1 + if(!(isOver(laser,fog,xs=1))){ + clearTile(0,getFirst(laser).y+1)} +}) + +onInput("s",() => { + getFirst(laser).y += 1 + if(!(isOver(laser,fog,xs=-1))){ +clearTile(0,getFirst(laser).y-1)} +}) + +onInput("d",fire) + +onInput("a",() => { + num1 = Math.round(Math.random() * 18) + num2 = Math.round(Math.random() * 7) + if(!(num1 <= 1)){ + addSprite(num1,num2,zaper)} +}) + +afterInput(() => { + const originalSprite = getFirst(fog) +const clonedSprite = addSprite(originalSprite.x, originalSprite.y, fog) +}) + +setInterval(() => { + puf() + if (shot){ + + +if (!(getFirst(lase).x <= 1 /*== getFirst(laser).x && getFirst(lase).y == getFirst(laser).y)*/)){ + if (!(getFirst(lase).x-1 == getFirst(fog).x && getFirst(lase).y == getFirst(fog).y)){ + clearTile(getFirst(lase).x-1, getFirst(lase).y) + } + if (!(getFirst(lase).x+4 == getFirst(fog).x && getFirst(lase).y == getFirst(fog).y)){ + clearTile(getFirst(lase).x+4, getFirst(lase).y) + } +} +getFirst(lase).x += 1 +if (getFirst(lase).x >= 15){ + getFirst(lase).remove() + shot = false + } + + } + zap() }) + +let display = true +let timer = 120 + +setInterval(() => { + if(timer <= 0){ + display = false + time() + } + if(display){ + timer -= 1 + clearText()} + addText(timer.toString()) + + },1000) diff --git a/games/learn_morse.js b/games/learn_morse.js index 7101ef5dd4..2f8fc119ae 100644 --- a/games/learn_morse.js +++ b/games/learn_morse.js @@ -1,8 +1,8 @@ /* @title: Learn Morse +@author: Ashen Chathuranga @tags: [] @addedOn: 2023-10-15 -@author: Ashen Chathuranga */ // define the sprites in our game diff --git a/games/lights_out.js b/games/lights_out.js index 2a4d203001..074764e1af 100644 --- a/games/lights_out.js +++ b/games/lights_out.js @@ -1,8 +1,8 @@ /* @title: lights_out -@tags: ['logic'] -@addedOn: 2022-12-16 @author: StarGazer1258 (Nathaniel Johns) +@tags: ['puzzle'] +@addedOn: 2022-12-16 Controls: WASD to move cursor diff --git a/games/loadsamoney.js b/games/loadsamoney.js index 2cca39ad8c..6788f0d639 100644 --- a/games/loadsamoney.js +++ b/games/loadsamoney.js @@ -1,9 +1,9 @@ /* @title: loadsamoney -@tags: ['simulation', 'endless'] -@addedOn: 2022-11-28 @author: geschmit +@tags: ['endless','simulation'] +@addedOn: 2022-11-28 probaly. (https://www.youtube.com/watch?v=ULeDlxa3gyc) diff --git a/games/love-bug.js b/games/love-bug.js index 99378602bc..83e36c0d3d 100644 --- a/games/love-bug.js +++ b/games/love-bug.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: love-bug @author: b3arora @tags: [] @addedOn: 2024-08-13 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ //too many bombs diff --git a/games/love_lock.js b/games/love_lock.js index 65e4d94de7..7e15626ff3 100644 --- a/games/love_lock.js +++ b/games/love_lock.js @@ -1,8 +1,8 @@ /* @title: love_lock +@author: N Rizwan @tags: ['strategy'] @addedOn: 2022-09-15 -@author: N Rizwan Initial Script of Leo Mcelroy (@leo) Modified and Created by N Rizwan (@N Rizwan) diff --git a/games/maise.js b/games/maise.js index 405ad384b6..ba52345d76 100644 --- a/games/maise.js +++ b/games/maise.js @@ -1,8 +1,8 @@ /* -@title: Maise +@title: Maise +@author: UrMma @tags: [] @addedOn: 2023-07-24 -@author: UrMma Instructions: 1. Use WASD keys to navigate around mases to reach the PR pad. diff --git a/games/mandelbrot.js b/games/mandelbrot.js index d007198677..5d51119699 100644 --- a/games/mandelbrot.js +++ b/games/mandelbrot.js @@ -1,8 +1,8 @@ /* @title: Mandelbrot -@tags: ['sandbox', 'simulation', 'hackable'] -@addedOn: 2022-09-14 @author: Henry +@tags: ['sandbox','simulation'] +@addedOn: 2022-09-14 Instructions: Explore the Mandelbrot set! Use W, A, S, D to move around diff --git a/games/marble_run.js b/games/marble_run.js index b208ff406d..839609950f 100644 --- a/games/marble_run.js +++ b/games/marble_run.js @@ -2,8 +2,8 @@ @title: Marble Run @author: @KrishanuIyengar @tags: ['puzzle'] -@img: "" @addedOn: 2024-05-28 +@img: "" */ diff --git a/games/matcher.js b/games/matcher.js index cc9db7e55a..5aa780f86b 100644 --- a/games/matcher.js +++ b/games/matcher.js @@ -1,8 +1,8 @@ /* @title: matcher -@tags: ['logic'] -@addedOn: 2022-08-12 @author: Brian +@tags: ['puzzle'] +@addedOn: 2022-08-12 ijkl to move the selector wasd to move the selected block diff --git a/games/math-quiz-game.js b/games/math-quiz-game.js index 5999d029a4..4f60ebcd84 100644 --- a/games/math-quiz-game.js +++ b/games/math-quiz-game.js @@ -1,8 +1,8 @@ /* @title: Math Quiz Game -@tags: ['math', 'two-players', 'quiz'] -@addedOn: 2024-07-24 @author: Zigao Wang +@tags: ['utility','multiplayer'] +@addedOn: 2024-07-24 */ const leftPlayer = "L"; diff --git a/games/mathematical_meteorite.js b/games/mathematical_meteorite.js index c9a4f1c3c8..646fd7162f 100644 --- a/games/mathematical_meteorite.js +++ b/games/mathematical_meteorite.js @@ -1,8 +1,8 @@ /* @title: mathematical_meteorite -@tags: ['thematic-puzzle'] -@addedOn: 2023-02-23 @author: Arash +@tags: ['puzzle'] +@addedOn: 2023-02-23 There's a special meteorite falling that only seems to care about special mathematical campfires! Guide the meteorite to the right diff --git a/games/maze game.js b/games/maze game.js index 536e1e89c8..685cb5b8d2 100644 --- a/games/maze game.js +++ b/games/maze game.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: ducky maze game @author: kayla wong @tags: [] @addedOn: 2024-07-22 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/maze-eye.js b/games/maze-eye.js index a74506ba34..081b42a122 100644 --- a/games/maze-eye.js +++ b/games/maze-eye.js @@ -1,8 +1,8 @@ /* -@tags: ['dodge'] -@addedOn: 2023-12-23 -@title: maze-eye +@title: maze-eye @author: acon +@tags: ['action'] +@addedOn: 2023-12-23 a maze, but dodge monsters at the same time! */ diff --git a/games/maze.js b/games/maze.js index f28e21f902..421aa4f104 100644 --- a/games/maze.js +++ b/games/maze.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Maze @author: Darshan Choudhary @tags: [] @addedOn: 2024-00-00 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const script = document.createElement('script'); script.src = 'https://cdn.jsdelivr.net/gh/hackclub/sprig@1.1.0/dist/sprig.min.js'; diff --git a/games/maze7.js b/games/maze7.js index bd7fbb031c..08d37c1b9d 100644 --- a/games/maze7.js +++ b/games/maze7.js @@ -1,8 +1,8 @@ /* @title: Maze -@tags: ['sokoban-style'] -@addedOn: 2022-10-06 @author: Akeell +@tags: ['puzzle'] +@addedOn: 2022-10-06 */ /*instructions diff --git a/games/maze_banana.js b/games/maze_banana.js index 8cab675db0..b395733eda 100644 --- a/games/maze_banana.js +++ b/games/maze_banana.js @@ -1,7 +1,7 @@ /* @title: Maze Banana 2-Player -@tags: [] @author: Rushil Chopra +@tags: [] @addedOn: 2024-08-05 */ const player1 = "p"; // First player diff --git a/games/maze_bird.js b/games/maze_bird.js index c3cfab1bd2..d14d6bd81d 100644 --- a/games/maze_bird.js +++ b/games/maze_bird.js @@ -1,8 +1,8 @@ /* @title: maze bird -@tags: ['sokoban-style'] -@addedOn: 2023-01-01 @author: rkohm +@tags: ['puzzle'] +@addedOn: 2023-01-01 */ const player = "p"; diff --git a/games/maze_chase.js b/games/maze_chase.js index 5d37e482ce..33878758aa 100644 --- a/games/maze_chase.js +++ b/games/maze_chase.js @@ -1,9 +1,9 @@ /* -Capture the flag before the other player does! @title: Maze Chase @author: Armaanpreet Singh -@tags: ['two-player', 'maze', 'capture'] +@tags: ['puzzle','multiplayer'] @addedOn: 2024-08-05 +Capture the flag before the other player does! */ const player1 = "a"; const player2 = "b"; diff --git a/games/maze_runner.js b/games/maze_runner.js index 17a9bf77d8..63ab6a8ccb 100644 --- a/games/maze_runner.js +++ b/games/maze_runner.js @@ -1,8 +1,8 @@ /* @title: maze runner -@tags: ['timer-puzzle'] -@addedOn: 2022-09-26 @author: wetf +@tags: ['puzzle','timed'] +@addedOn: 2022-09-26 */ const player = "p"; diff --git a/games/maze_runner2.js b/games/maze_runner2.js index 837091603a..6862425616 100644 --- a/games/maze_runner2.js +++ b/games/maze_runner2.js @@ -1,8 +1,8 @@ /* @title: Maze Runner -@tags: ['energy-control'] -@addedOn: 2022-12-10 @author: Alan Alwakeel, Samuel Sapatla, Suhaan Palakamshetty, Martin Beythoon +@tags: ['puzzle'] +@addedOn: 2022-12-10 */ const player = 'p' diff --git a/games/mazegame.js b/games/mazegame.js index bda5a1e61b..ccedf9c903 100644 --- a/games/mazegame.js +++ b/games/mazegame.js @@ -2,7 +2,7 @@ /* @title: mazegame @author: Elian -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-11-04 */ diff --git a/games/Maze.js b/games/mazegame2.js similarity index 100% rename from games/Maze.js rename to games/mazegame2.js index f28e21f902..421aa4f104 100644 --- a/games/Maze.js +++ b/games/mazegame2.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Maze @author: Darshan Choudhary @tags: [] @addedOn: 2024-00-00 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const script = document.createElement('script'); script.src = 'https://cdn.jsdelivr.net/gh/hackclub/sprig@1.1.0/dist/sprig.min.js'; diff --git a/games/memory_game.js b/games/memory_game.js index 64d73b58e5..a4c82de47e 100644 --- a/games/memory_game.js +++ b/games/memory_game.js @@ -1,4 +1,8 @@ /* +@title: Memory Game +@author: uped +@tags: [] +@addedOn: 2024-06-18 Memory Game! pair matching cards to earn score @@ -6,10 +10,6 @@ Controls: wasd to move i to interact -@title: Memory Game -@author: uped -@tags: [] -@addedOn: 2024-06-18 */ const question_mark = "?" diff --git a/games/microwars.js b/games/microwars.js index 02d54e3178..0776b361c7 100644 --- a/games/microwars.js +++ b/games/microwars.js @@ -1,8 +1,8 @@ /* @title: microwars +@author: Bedo @tags: ['multiplayer'] @addedOn: 2023-02-19 -@author: Bedo */ const rasp = "r" diff --git a/games/mikusDoorsGalore.js b/games/mikusDoorsGalore.js index 467092d2d3..5137d0ec22 100644 --- a/games/mikusDoorsGalore.js +++ b/games/mikusDoorsGalore.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Miku's_Doors_Galore! @author: tqbed -@tags: ['beginner', 'simple', 'puzzle', 'maze'] +@tags: ['puzzle'] @addedOn: 2024-06-22 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/minesweeper.js b/games/minesweeper.js index bccd9b4848..f8d1ded592 100644 --- a/games/minesweeper.js +++ b/games/minesweeper.js @@ -1,8 +1,8 @@ /* @title: minesweeper -@tags: ['classic'] -@addedOn: 2022-08-29 @author: sam liu +@tags: ['retro'] +@addedOn: 2022-08-29 Your typical Minesweeper game 9x9, 10 bombs diff --git a/games/mini_maze_and_puzzle.js b/games/mini_maze_and_puzzle.js index 0034a0c5a4..4d44cdb748 100644 --- a/games/mini_maze_and_puzzle.js +++ b/games/mini_maze_and_puzzle.js @@ -1,8 +1,8 @@ /* @title: mini_maze_and_puzzle +@author: muhammad tsaqif mukhayyar @tags: ['strategy'] @addedOn: 2022-09-16 -@author: muhammad tsaqif mukhayyar Instructions: diff --git a/games/missile_mania.js b/games/missile_mania.js index 50d7c4079e..a740ca923e 100644 --- a/games/missile_mania.js +++ b/games/missile_mania.js @@ -1,9 +1,9 @@ /* - @title: Missile Mania +@author: Nisarga (https://github.com/nisarga-developer) @tags: ['endless'] @addedOn: 2023-01-01 -@author: Nisarga (https://github.com/nisarga-developer) + Instructions: Hit "run" to execute the code and diff --git a/games/morseOnSprig.js b/games/morseOnSprig.js index 5785956acb..b693d85119 100644 --- a/games/morseOnSprig.js +++ b/games/morseOnSprig.js @@ -1,430 +1,430 @@ -/* -@title: morse on sprig -@author: mrdarip -@tags: ['keyboard', 'tool'] -@addedOn: 2024-07-28 -*/ - -var msPerSignal = 1000; - -const bibip = tune` -75: E4/75, -75: F4/75, -2250`; -const bop = tune` -75: C4/75, -2325`; -const pip = tune` -50: B5/50, -1550`; -const pipi = tune` -50: B5/50, -50, -50: B5/50, -1450`; - -var tickQueue = ""; -var currentInput = ""; -var inputText = ""; - -var readingLine = 0 -var autoSend = true; - -const dot = "x"; -const dash = "-"; -const del = "d"; -const ret = "r"; -const view = "v"; -const up = "U"; -const down = "D"; -const sendIcon = "s"; -const autosend = "a"; - -// assign bitmap art to each sprite -setLegend( - [dot, bitmap` -................ -................ -................ -................ -................ -................ -......0000...... -......0000...... -......0000...... -......0000...... -................ -................ -................ -................ -................ -................`], - [dash, bitmap` -................ -................ -................ -................ -................ -................ -..000000000000.. -..000000000000.. -..000000000000.. -..000000000000.. -................ -................ -................ -................ -................ -................`], - [del, bitmap` -....00000000.... -....0......0.... -0000000000000000 -..011111111110.. -..0L1101101110.. -..0L1101101110.. -..0L1101101110.. -..0L1101101110.. -..0L1101101110.. -..0L1101101110.. -...0L10110110... -...0L10110110... -...0L10110110... -...0L10110110... -...0L11111110... -...0000000000...`], - [ret, bitmap` -................ -................ -................ -....0........... -...00........... -..0000000000.... -...00.......0... -....0.......0... -............0... -..0.........0... -..0.........0... -...0........0... -....00000000.... -................ -................ -................`], - [view, bitmap` -................ -................ -................ -................ -................ -......00000..... -....002222200... -...02227552220.. -..0222250522220. -...02225552220.. -....002222200... -......00000..... -................ -................ -................ -................`], - [up, bitmap` -.......00....... -......0000...... -......0000...... -.....000000..... -.....000000..... -....00000000.... -....00000000.... -...0000000000... -...0000000000... -.......00....... -.......00....... -.......00....... -.......00....... -.......00....... -.......00....... -.......00.......`], - [down, bitmap` -.......00....... -.......00....... -.......00....... -.......00....... -.......00....... -.......00....... -.......00....... -...0000000000... -...0000000000... -....00000000.... -....00000000.... -.....000000..... -.....000000..... -......0000...... -......0000...... -.......00.......`], - [sendIcon, bitmap` -000.00.0..0.00.. -0...0..00.0.0.0. -000.00.0.00.0.0. -..0.0..0..0.0.0. -000.00.0..0.00.. -................ -................ -................ -.........0...... -.........00..... -..0000000000.... -..0000000000.... -.........00..... -.........0...... -................ -................`], - [autosend, bitmap` -000.0.0.000.000. -0.0.0.0..0..0.0. -000.0.0..0..0.0. -0.0.0.0..0..0.0. -0.0.0.0..0..0.0. -0.0.000..0..000. -............1... -0...0...L...11.. -.0.0.L.0.0LL111. -..L...0.....11.. -............1... -000.00.0..0.00.. -0...0..00.0.0.0. -000.00.0.00.0.0. -..0.0..0..0.0.0. -000.00.0..0.00..`], - -) - -let level = 0; -const levels = [ - map` -.......... -.......... -.......... -.......... -.......... -..U....a.. -.x.v..r.-. -..D....s..`, - map` -.......... -.......... -.......... -.......... -.......... -.......... -.......... -..........`, -]; - -setMap(levels[level]); - -chars = { - ".-": "a", - "-...": "b", - "-.-.": "c", - "-..": "d", - ".": "e", - "..-.": "f", - "--.": "g", - "....": "h", - "..": "i", - ".---": "j", - "-.-": "k", - ".-..": "l", - "--": "m", - "-.": "n", - "---": "o", - ".--.": "p", - "--.-": "q", - ".-.": "r", - "...": "s", - "-": "t", - "..-": "u", - "...-": "v", - ".--": "w", - "-..-": "x", - "-.--": "y", - "--..": "z", - ".----": "1", - "..---": "2", - "...--": "3", - "....-": "4", - ".....": "5", - "-....": "6", - "--...": "7", - "---..": "8", - "----.": "9", - "-----": "0", -}; - -onInput("a", () => { - //dot - playTune(pip); - currentInput = "."; - enqueueInput() - - resetTickLoop() - updateUI(); -}); - -onInput("l", () => { - //dash - playTune(pipi); - currentInput = "-"; - enqueueInput() - - resetTickLoop() - updateUI(); -}); - -onInput("k", () => { - if (chars[tickQueue]) { - dequeueInput() - } -}); -onInput("i", () => { - autoSend = !autosend -}); - -onInput("j", () => { - inputText = inputText.substring(0, inputText.length - 1); - playTune(bop); - updateUI() -}); - -var tick; -var tickLoop -resetTickLoop() - -function resetTickLoop() { - clearInterval(tickLoop) - - tick = false; - tickLoop = setInterval(() => { - tick = !tick; - if (tick && autoSend) { - playTune(bop); - - //if tickQueue is empty, and last character isn't a space, send a space - if (tickQueue == "" && inputText[inputText.length - 1] != " ") { - playTune(bibip); - inputText += " "; - updateUI(); - } - - if (chars[tickQueue]) { - playTune(bibip); - dequeueInput() - } - - // if tickQueue length is biggest than the lengthiest key in characters, clear it - console.log(Math.max(...Object.keys(chars).map(k => k.length))) - console.log(tickQueue.length) - if (tickQueue.length > Math.max(...Object.keys(chars).map(k => k.length))) { - playTune(bop); - tickQueue = ""; - updateUI() - } - } - }, msPerSignal / 2); - -} - -function enqueueInput() { - tickQueue += currentInput; - currentInput = ""; - updateUI(); -} - -function dequeueInput() { - inputText += chars[tickQueue] - tickQueue = ""; - currentInput = ""; - - updateUI(); -} - -function displayCurrentInput() { - addText(tickQueue + currentInput, { - x: 0, - y: 0, - color: color`0`, - }); -} - -function displayInputtedText() { - addText(inputText + "_", { - x: 0, - y: 1, - color: color`0`, - }); -} - -function updateUI() { - clearText(); - displayCurrentInput(); - displayInputtedText(); - //displayAllCharacters(); -} - - -onInput('d', () => { - level = 1 - setMap(levels[level]); - clearInterval(tickLoop) - - - updateReadingUI() -}) - - -onInput('w', () => { - if (level == 1) { - - readingLine-- - updateReadingUI() - } else { - msPerSignal -= 50 - resetTickLoop() - } -}) - -onInput('s', () => { - if (level == 1) { - readingLine++ - updateReadingUI() - } else { - msPerSignal += 50 - resetTickLoop() - } -}) - - -function updateReadingUI() { - clearText() - let allText = inputText - - for (let i = 0; i < height() * 2; i++) { - addText(allText.substring((i + readingLine) * (width() * 2), (i + readingLine + 1) * width() * 2), { - x: 0, - y: i, - color: '0' - }) - } -} - -function displayAllCharacters() { - let i = 0 - for (let key in chars) { - addText(chars[key] + " " + key, { - x: 0, - y: i * 2 + 3, - color: '0' - }) - i++ - } +/* +@title: morse on sprig +@author: mrdarip +@tags: ['utility'] +@addedOn: 2024-07-28 +*/ + +var msPerSignal = 1000; + +const bibip = tune` +75: E4/75, +75: F4/75, +2250`; +const bop = tune` +75: C4/75, +2325`; +const pip = tune` +50: B5/50, +1550`; +const pipi = tune` +50: B5/50, +50, +50: B5/50, +1450`; + +var tickQueue = ""; +var currentInput = ""; +var inputText = ""; + +var readingLine = 0 +var autoSend = true; + +const dot = "x"; +const dash = "-"; +const del = "d"; +const ret = "r"; +const view = "v"; +const up = "U"; +const down = "D"; +const sendIcon = "s"; +const autosend = "a"; + +// assign bitmap art to each sprite +setLegend( + [dot, bitmap` +................ +................ +................ +................ +................ +................ +......0000...... +......0000...... +......0000...... +......0000...... +................ +................ +................ +................ +................ +................`], + [dash, bitmap` +................ +................ +................ +................ +................ +................ +..000000000000.. +..000000000000.. +..000000000000.. +..000000000000.. +................ +................ +................ +................ +................ +................`], + [del, bitmap` +....00000000.... +....0......0.... +0000000000000000 +..011111111110.. +..0L1101101110.. +..0L1101101110.. +..0L1101101110.. +..0L1101101110.. +..0L1101101110.. +..0L1101101110.. +...0L10110110... +...0L10110110... +...0L10110110... +...0L10110110... +...0L11111110... +...0000000000...`], + [ret, bitmap` +................ +................ +................ +....0........... +...00........... +..0000000000.... +...00.......0... +....0.......0... +............0... +..0.........0... +..0.........0... +...0........0... +....00000000.... +................ +................ +................`], + [view, bitmap` +................ +................ +................ +................ +................ +......00000..... +....002222200... +...02227552220.. +..0222250522220. +...02225552220.. +....002222200... +......00000..... +................ +................ +................ +................`], + [up, bitmap` +.......00....... +......0000...... +......0000...... +.....000000..... +.....000000..... +....00000000.... +....00000000.... +...0000000000... +...0000000000... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00.......`], + [down, bitmap` +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +.......00....... +...0000000000... +...0000000000... +....00000000.... +....00000000.... +.....000000..... +.....000000..... +......0000...... +......0000...... +.......00.......`], + [sendIcon, bitmap` +000.00.0..0.00.. +0...0..00.0.0.0. +000.00.0.00.0.0. +..0.0..0..0.0.0. +000.00.0..0.00.. +................ +................ +................ +.........0...... +.........00..... +..0000000000.... +..0000000000.... +.........00..... +.........0...... +................ +................`], + [autosend, bitmap` +000.0.0.000.000. +0.0.0.0..0..0.0. +000.0.0..0..0.0. +0.0.0.0..0..0.0. +0.0.0.0..0..0.0. +0.0.000..0..000. +............1... +0...0...L...11.. +.0.0.L.0.0LL111. +..L...0.....11.. +............1... +000.00.0..0.00.. +0...0..00.0.0.0. +000.00.0.00.0.0. +..0.0..0..0.0.0. +000.00.0..0.00..`], + +) + +let level = 0; +const levels = [ + map` +.......... +.......... +.......... +.......... +.......... +..U....a.. +.x.v..r.-. +..D....s..`, + map` +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........`, +]; + +setMap(levels[level]); + +chars = { + ".-": "a", + "-...": "b", + "-.-.": "c", + "-..": "d", + ".": "e", + "..-.": "f", + "--.": "g", + "....": "h", + "..": "i", + ".---": "j", + "-.-": "k", + ".-..": "l", + "--": "m", + "-.": "n", + "---": "o", + ".--.": "p", + "--.-": "q", + ".-.": "r", + "...": "s", + "-": "t", + "..-": "u", + "...-": "v", + ".--": "w", + "-..-": "x", + "-.--": "y", + "--..": "z", + ".----": "1", + "..---": "2", + "...--": "3", + "....-": "4", + ".....": "5", + "-....": "6", + "--...": "7", + "---..": "8", + "----.": "9", + "-----": "0", +}; + +onInput("a", () => { + //dot + playTune(pip); + currentInput = "."; + enqueueInput() + + resetTickLoop() + updateUI(); +}); + +onInput("l", () => { + //dash + playTune(pipi); + currentInput = "-"; + enqueueInput() + + resetTickLoop() + updateUI(); +}); + +onInput("k", () => { + if (chars[tickQueue]) { + dequeueInput() + } +}); +onInput("i", () => { + autoSend = !autosend +}); + +onInput("j", () => { + inputText = inputText.substring(0, inputText.length - 1); + playTune(bop); + updateUI() +}); + +var tick; +var tickLoop +resetTickLoop() + +function resetTickLoop() { + clearInterval(tickLoop) + + tick = false; + tickLoop = setInterval(() => { + tick = !tick; + if (tick && autoSend) { + playTune(bop); + + //if tickQueue is empty, and last character isn't a space, send a space + if (tickQueue == "" && inputText[inputText.length - 1] != " ") { + playTune(bibip); + inputText += " "; + updateUI(); + } + + if (chars[tickQueue]) { + playTune(bibip); + dequeueInput() + } + + // if tickQueue length is biggest than the lengthiest key in characters, clear it + console.log(Math.max(...Object.keys(chars).map(k => k.length))) + console.log(tickQueue.length) + if (tickQueue.length > Math.max(...Object.keys(chars).map(k => k.length))) { + playTune(bop); + tickQueue = ""; + updateUI() + } + } + }, msPerSignal / 2); + +} + +function enqueueInput() { + tickQueue += currentInput; + currentInput = ""; + updateUI(); +} + +function dequeueInput() { + inputText += chars[tickQueue] + tickQueue = ""; + currentInput = ""; + + updateUI(); +} + +function displayCurrentInput() { + addText(tickQueue + currentInput, { + x: 0, + y: 0, + color: color`0`, + }); +} + +function displayInputtedText() { + addText(inputText + "_", { + x: 0, + y: 1, + color: color`0`, + }); +} + +function updateUI() { + clearText(); + displayCurrentInput(); + displayInputtedText(); + //displayAllCharacters(); +} + + +onInput('d', () => { + level = 1 + setMap(levels[level]); + clearInterval(tickLoop) + + + updateReadingUI() +}) + + +onInput('w', () => { + if (level == 1) { + + readingLine-- + updateReadingUI() + } else { + msPerSignal -= 50 + resetTickLoop() + } +}) + +onInput('s', () => { + if (level == 1) { + readingLine++ + updateReadingUI() + } else { + msPerSignal += 50 + resetTickLoop() + } +}) + + +function updateReadingUI() { + clearText() + let allText = inputText + + for (let i = 0; i < height() * 2; i++) { + addText(allText.substring((i + readingLine) * (width() * 2), (i + readingLine + 1) * width() * 2), { + x: 0, + y: i, + color: '0' + }) + } +} + +function displayAllCharacters() { + let i = 0 + for (let key in chars) { + addText(chars[key] + " " + key, { + x: 0, + y: i * 2 + 3, + color: '0' + }) + i++ + } } \ No newline at end of file diff --git a/games/move_the_rocks.js b/games/move_the_rocks.js index e62649c931..42bb1f1f10 100644 --- a/games/move_the_rocks.js +++ b/games/move_the_rocks.js @@ -2,7 +2,7 @@ /* @title: move_the_rocks @author: playfun24 -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-12-21 */ diff --git a/games/multiplayer_soccer.js b/games/multiplayer_soccer.js index 56d2d5189c..e8b67dda64 100644 --- a/games/multiplayer_soccer.js +++ b/games/multiplayer_soccer.js @@ -1,8 +1,8 @@ /* @title: multiplayer_soccer +@author: shannon yeow @tags: ['multiplayer'] @addedOn: 2022-08-12 -@author: shannon yeow */ const player = "p"; diff --git a/games/music-be-like.js b/games/music-be-like.js index ec25276572..3efb20b74e 100644 --- a/games/music-be-like.js +++ b/games/music-be-like.js @@ -1,8 +1,8 @@ /* @title: music-be-like -@tags: ['logic'] -@addedOn: 2022-12-04 @author: trueGrand +@tags: ['puzzle'] +@addedOn: 2022-12-04 Instructions: diff --git a/games/mystery_of_scooter.js b/games/mystery_of_scooter.js index feb9683b31..63ddcfda9d 100644 --- a/games/mystery_of_scooter.js +++ b/games/mystery_of_scooter.js @@ -1,8 +1,8 @@ /* @title: Mystery of scooter -@tags: ['WIP'] -@addedOn: 2022-09-08 @author: Lucas +@tags: [] +@addedOn: 2022-09-08 */ const player = "p"; diff --git a/games/niabtf2.js b/games/niabtf2.js index bfadbb6674..fd71d6f31b 100644 --- a/games/niabtf2.js +++ b/games/niabtf2.js @@ -1,8 +1,8 @@ /* @title: Ninja In A Bear Trap Factory 2 +@author: Matt The Banana @tags: ['strategy'] @addedOn: 2022-12-06 -@author: Matt The Banana */ diff --git a/games/nimits_sokoban_super.js b/games/nimits_sokoban_super.js index 1ae6416ad1..86ffe12424 100644 --- a/games/nimits_sokoban_super.js +++ b/games/nimits_sokoban_super.js @@ -1,9 +1,9 @@ /* @title: Sokoban Super @author: Nimit Vijayvargee -@tags: ['sokoban-style'] -@img: "" +@tags: ['puzzle'] @addedOn: 2024-05-30 +@img: "" */ const playerup = "u" diff --git a/games/nomis.js b/games/nomis.js index 4b82bdcaa4..2e8e09ab70 100644 --- a/games/nomis.js +++ b/games/nomis.js @@ -1,8 +1,8 @@ /* @title: Nomis -@tags: ['classic', 'hackable'] -@addedOn: 2022-08-29 @author: Cheru Berhanu +@tags: ['retro'] +@addedOn: 2022-08-29 */ const green = "a"; diff --git a/games/not-dance-dance.js b/games/not-dance-dance.js index 780c86a2cd..2cad81ecbf 100644 --- a/games/not-dance-dance.js +++ b/games/not-dance-dance.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: not dance dance revolution @author: Victor Lee @tags: ['music'] @addedOn: 2024-02-22 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ class Note { diff --git a/games/ocean-maze-escape.js b/games/ocean-maze-escape.js index f0c1706af0..5c5027b5d7 100644 --- a/games/ocean-maze-escape.js +++ b/games/ocean-maze-escape.js @@ -2,7 +2,7 @@ /* @title: ocean-maze-escape @author: michael barrera -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-10-13 */ diff --git a/games/offline_t-rex_game.js b/games/offline_t-rex_game.js index 3720782bc5..716c54653a 100644 --- a/games/offline_t-rex_game.js +++ b/games/offline_t-rex_game.js @@ -1,8 +1,8 @@ /* @title: offline_t-rex_game +@author: zoya hussain */ @tags: ['endless'] @addedOn: 2022-12-31 -@author: zoya hussain */ let vy = 0; diff --git a/games/oneWay.js b/games/oneWay.js index 64482f414d..b841681546 100644 --- a/games/oneWay.js +++ b/games/oneWay.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: oneway @author: SpeedyGo55 -@tags: ["labyrinth", "topdown"] +@tags: ['puzzle'] @addedOn: 2024-08-23 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const step_sound = tune` diff --git a/games/orb_journey.js b/games/orb_journey.js index 82b5b3d610..cab8052781 100644 --- a/games/orb_journey.js +++ b/games/orb_journey.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Orb Journey @author: trungu @tags: [] -@img: "" @addedOn: 2024-06-10 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ // Introduction diff --git a/games/orbit_blaster.js b/games/orbit_blaster.js index 249528ed23..8528f5418d 100644 --- a/games/orbit_blaster.js +++ b/games/orbit_blaster.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: orbit_blaster @author: blackpolygon -@tags: ["dodge"] +@tags: ['action'] @addedOn: 2024-04-08 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/osu-mania.js b/games/osu-mania.js index f725716906..95225c98ab 100644 --- a/games/osu-mania.js +++ b/games/osu-mania.js @@ -1,7 +1,7 @@ /* @title: osu-mania @author: Alex Park -@tags: [''] +@tags: [] @addedOn: 2023-01-01 */ diff --git a/games/parachute_panic.js b/games/parachute_panic.js index 8a08c6a438..1277d8fb47 100644 --- a/games/parachute_panic.js +++ b/games/parachute_panic.js @@ -1,8 +1,8 @@ /* @title: parachute panic(in sprig) -@tags: ['logic'] -@addedOn: 2023-06-26 @author: Riston Rodrigues +@tags: ['puzzle'] +@addedOn: 2023-06-26 tried to make a copy of an old java game parachute panic for sprig Play:- diff --git a/games/penguin_slide.js b/games/penguin_slide.js index 5badd6b777..4562e15d6a 100644 --- a/games/penguin_slide.js +++ b/games/penguin_slide.js @@ -1,8 +1,8 @@ /* @title: penguin_slide +@author: veehz @tags: ['strategy'] @addedOn: 2022-09-08 -@author: veehz */ const player = "p"; diff --git a/games/photosynthesis.js b/games/photosynthesis.js new file mode 100644 index 0000000000..5802037c71 --- /dev/null +++ b/games/photosynthesis.js @@ -0,0 +1,395 @@ +/* +@title: Photosynthesis +@author: Vanessa Tan +@tags: [] +@addedOn: 2024-08-26 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p"; +const sunlight = "s"; +const water = "w"; +const co2 = "c"; +const ground = "g"; + +setLegend( + [ player, bitmap` +................ +................ +................ +................ +................ +................ +.....44.44...... +.....44444...... +......444....... +.......4........ +.......4........ +.......4........ +....C..4..C..... +....CCCCCCC..... +.....CCCCC...... +.....CCCCC......` ], + [ sunlight, bitmap` +................ +................ +................ +............6... +...........66... +.......6..66..6. +......66.66..66. +.....66..6..66.. +....66..66.66... +....6..66..6.... +...66..6..66.... +..66..66.66..... +.....66..6...... +...666..66...... +.......66....... +................` + ], + [water, bitmap` +................ +................ +................ +.......7........ +......777....... +......777....... +.....77777...... +.....77777...... +....7777777..... +....7777777..... +....7777777..... +.....77777...... +......777....... +................ +................ +................`], + [co2, bitmap` +................ +.....1...11..... +....11..11...... +....1...1....... +....1...11...... +....11...1...... +.....1...11..... +.....11...1..... +......1...11.... +.....11...11.... +....11....1..... +....1.....1..... +....1.....1..... +....11...1...... +.....11..1...... +................`], + [ground, bitmap` +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC`] +) + +setSolids([]) +setPushables({ + [ player ]: [] +}) + +let level = 0 +const levels = [ + map` +...s... +....... +...c... +....... +...w... +...p... +ggggggg`, + map` +....... +....s.. +....... +..c.... +....... +...w... +...p... +ggggggg`, map` +......c +....... +....... +s...... +....... +...w... +....... +...p... +ggggggg`, + map` +....... +.s..... +....... +....... +....... +....... +...c... +w...... +...p... + ggggggg`,map` +......c +....... +....... +....... +s...... +....... +....... +....... +.w..... +...p... +ggggggg`,map` +....... +w...... +....... +......s +....... +....... +....c.. +....... +....... +....... +...p... +ggggggg`,map` +......c +....... +....... +....... +....... +....... +....... +....... +....... +...s... +w...... +...p... +ggggggg`,map` +......w +c...... +....... +....... +....... +....... +....... +....... +....... +....... +....... +s...... +...p... +ggggggg` + +] +const currentLevel = levels[level]; +setMap(currentLevel); + +setSolids([]) +let scoreSun = 0 +let scoreWater = 0 +let scoreCo2 = 0 + + + + +setPushables({ + [ground]: [] +}) + +var gameRunning = true; + +onInput("a", () => { + if (gameRunning) { + getFirst(player).x -= 1; + } +}); + +onInput("d", () => { + if (gameRunning) { + getFirst(player).x += 1; + } +}); + +onInput("j", () => { + const currentLevel = levels[level]; // get the original map of the level + + // make sure the level exists before we load it + if (currentLevel !== undefined) { + clearText(""); + setMap(currentLevel); + scoreSun = 0 + scoreWater = 0 + scoreCo2 = 0 + } +}); + +//moving stuff down +function moveSun() { + let sunlights = getAll(sunlight); + + for (let i = 0; i < sunlights.length; i++) { + sunlights[i].y += 1; + } + +} + +function moveWater() { + let waters = getAll(water); + + for (let i = 0; i < waters.length; i++) { + waters[i].y += 1; + } +} +function moveCo2() { + let co2s = getAll(co2); + + for (let i = 0; i < co2s.length; i++) { + co2s[i].y += 1; + } + +} + +//despawning stuff +function despawnSun() { + let sunlights = getAll(sunlight); + + for (let i = 0; i < sunlights.length; i++) { + if (sunlights[i].y == level+6) { + sunlights[i].remove(); + } + } +} + +function despawnWater() { + let waters = getAll(water); + + for (let i = 0; i < waters.length; i++) { + if (waters[i].y == level+6) { + waters[i].remove(); + } + } +} + +function despawnCo2() { + let co2s = getAll(co2); + + for (let i = 0; i < co2s.length; i++) { + if (co2s[i].y == level+6) { + co2s[i].remove(); + } + } +} + + +//check overlapping stuff +function checkSun() { + let sunlights = getAll(sunlight); + let p = getFirst(player); + + for (let i = 0; i < sunlights.length; i++) { + if (sunlights[i].x == p.x && sunlights[i].y == p.y) { + return true; + } + } + + return false; +} + +function checkWater() { + let waters = getAll(water); + let p = getFirst(player); + + for (let i = 0; i < waters.length; i++) { + if (waters[i].x == p.x && waters[i].y == p.y) { + return true; + } + } + + return false; +} + +function checkCo2() { + let co2s = getAll(co2); + let p = getFirst(player); + + for (let i = 0; i < co2s.length; i++) { + if (co2s[i].x == p.x && co2s[i].y == p.y) { + return true; + } + } + + return false; +} + + +var gameLoop = setInterval(() => { + addText(`Level: ${level+1}`, {x: 2, y: 1, color: color`L`}) + moveSun(); + moveWater(); + moveCo2(); + + despawnSun(); + despawnWater(); + despawnCo2(); + + checkSun(); + checkWater(); + checkCo2(); + + addText(`${scoreSun}`, { x: 4,y: 14, color: color`6` }); + addText(`${scoreWater}`, { x:5, y: 14, color: color`7` }); + addText(`${scoreCo2}`, { x:6, y: 14, color: color`1` }); + if (checkSun()) { + scoreSun += 1; + addText(`${scoreSun}`, { x: 4,y: 14, color: color`6` }); + } + if (checkWater()) { + scoreWater += 1; + addText(`${scoreWater}`, { x:5, y: 14, color: color`7` }); + } + if (checkCo2()) { + scoreCo2 += 1; + addText(`${scoreCo2}`, { x:6, y: 14, color: color`1` }); + } + + if (scoreSun == 1 && scoreWater == 1 && scoreCo2 == 1) { + level += 1; + + + if (levels[level] !== undefined) { + setMap(levels[level]); + scoreSun = 0; + scoreWater = 0; + scoreCo2 = 0; + } else { + addText("you win!", { y: 4, color: color`3` }); + scoreSun = 0 + scoreWater = 0 + scoreCo2 = 0 + } + } + + + + + +}, 1000-level*100); + diff --git a/games/pipes_puzzle.js b/games/pipes_puzzle.js index 31083dfb7e..c5fae8263b 100644 --- a/games/pipes_puzzle.js +++ b/games/pipes_puzzle.js @@ -1,8 +1,8 @@ /* @title: Pipes Puzzle -@tags: ['logic'] -@addedOn: 2022-10-14 @author: RayhanADev +@tags: ['puzzle'] +@addedOn: 2022-10-14 */ /** diff --git a/games/pixelated_medieval_times.js b/games/pixelated_medieval_times.js index f640876c3b..df507a87bd 100644 --- a/games/pixelated_medieval_times.js +++ b/games/pixelated_medieval_times.js @@ -1,9 +1,9 @@ /* @title: Pixelated Medieval Times -@tags: ['rpg'] -@img: "" -@addedOn: 2024-05-31 @author: TabishAhmad +@tags: ['role-playing'] +@addedOn: 2024-05-31 +@img: "" */ const player = "p"; diff --git a/games/plants_vs_zombies.js b/games/plants_vs_zombies.js index f975351b96..13a3d12b6b 100644 --- a/games/plants_vs_zombies.js +++ b/games/plants_vs_zombies.js @@ -1,8 +1,8 @@ /* - @title: Plants vs. Zombies +@title: Plants vs. Zombies +@author: jianmin-chen @tags: [] @addedOn: 2023-02-15 - @author: jianmin-chen Instructions: Use A + D to choose which plant to put down. diff --git a/games/platform_rogue.js b/games/platform_rogue.js index 09c8b2a298..2eded4e163 100644 --- a/games/platform_rogue.js +++ b/games/platform_rogue.js @@ -1,8 +1,8 @@ /* @title: platform_rogue -@tags: ['advanced'] -@addedOn: 2022-08-22 @author: @farreltobias +@tags: [] +@addedOn: 2022-08-22 */ const createArray = (size) => [...Array(size).keys()]; diff --git a/games/pocket-piano.js b/games/pocket-piano.js index 6978fd6d02..5883656ad8 100644 --- a/games/pocket-piano.js +++ b/games/pocket-piano.js @@ -1,8 +1,8 @@ /* @title: Pocket Piano +@author: Odysseus Kirikopoulos @tags: ['simulation'] @addedOn: 2023-02-15 -@author: Odysseus Kirikopoulos */ const tune_c = tune` diff --git a/games/pong-multiplayer.js b/games/pong-multiplayer.js index 4512f47e17..e6d915ed10 100644 --- a/games/pong-multiplayer.js +++ b/games/pong-multiplayer.js @@ -1,8 +1,8 @@ /* @title: pong-multiplayer +@author: sean @tags: ['multiplayer'] @addedOn: 2023-01-01 -@author: sean */ // Sprites const player1 = "1"; diff --git a/games/pong.js b/games/pong.js index beb4c0fb95..c96323a718 100644 --- a/games/pong.js +++ b/games/pong.js @@ -1,8 +1,8 @@ /* @title: pong -@tags: ['classic'] -@addedOn: 2022-09-07 @author: neesh +@tags: ['retro'] +@addedOn: 2022-09-07 */ const player1 = "1"; diff --git a/games/pong_irtaza2009.js b/games/pong_irtaza2009.js index 039c2a6b4e..a539d79e79 100644 --- a/games/pong_irtaza2009.js +++ b/games/pong_irtaza2009.js @@ -1,8 +1,8 @@ /* @title: Pong -@tags: ['classic'] -@addedOn: 2024-07-01 @author: Irtaza2009 +@tags: ['retro'] +@addedOn: 2024-07-01 */ const player1 = "1"; diff --git a/games/portal_game.js b/games/portal_game.js index b6dbbf700b..540880bcd1 100644 --- a/games/portal_game.js +++ b/games/portal_game.js @@ -1,8 +1,8 @@ /* @title: portal_game -@tags: ['logic'] -@addedOn: 2023-05-05 @author: DanPlayz (danplayz0) +@tags: ['puzzle'] +@addedOn: 2023-05-05 @remixed: getting_started by leo Instructions: diff --git a/games/prison_break.js b/games/prison_break.js index 4b22231a8e..cd7864d617 100644 --- a/games/prison_break.js +++ b/games/prison_break.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: prison break @author: emily liu @tags: [] @addedOn: 2024-00-00 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ // objects diff --git a/games/problemMaze.js b/games/problemMaze.js new file mode 100644 index 0000000000..fbd5bc2cf0 --- /dev/null +++ b/games/problemMaze.js @@ -0,0 +1,372 @@ +/* +@title: Problem Maze +@author: Gramgra07 +@tags: ['puzzle'] +@addedOn: 2024-09-17 +*/ + +const player = "p" +const wall = "w" +const goal = "g" +const trigger = "t" +const movingWall = "m" +const portal = "o" +const portal2 = "i" +const key = "k" +const door = "d" +const trigger2 = "j" +const movingWall2="e" +triggerPressedOnce = false + +setLegend( + [player, bitmap` +................ +................ +.......8........ +......888....... +.....88088...... +....8800088..... +....8880888..... +....8888888..... +....8888888..... +....8880888..... +.....88088...... +....8888888..... +...88.888.88.... +..888..8..888... +..88.......88... +..8.........8...`], + [wall, bitmap` +................ +...LLLLLLLLLL... +..LLLLLLLLLLLL.. +.LLLLLLLLLLLLLL. +.LLL11111LLLLLL. +.LLL11111LLLL1L. +.LLLLLLLLLLLLLL. +..LLLLLLLLLLLL.. +...LLLLLL1LLL... +................ +..L........LLLL. +.LLL......LLLLLL +LLL1L.....LLLL1L +.LLL......LLLLLL +..L.......LL1LLL +...........LLLL.`], + [goal, bitmap` +................ +....LLLLLLLL.... +...LLLLLLLLLL... +..L11LLLL11LLL.. +.LLLLLLLLL440LL. +.LLLLLLLLL440LL. +.LLLLLLLL1LL0LL. +.LLLLLLLLLLL0LL. +.LLL1LLLLLLLLLL. +.LLL1LLLLLLL11L. +.LLLLLLLLLLL11L. +.LLLLLLL1LLLLLL. +..LLLLLLLLLLLL.. +...LLLLLLLLLL... +....LLLL1LLL.... +................`], + [trigger, bitmap` +...LLLLLLLLLL... +..LLLLLLLLLLLL.. +.LLLL333333LLLL. +LLL3333333333LLL +LLL3333333333LLL +LL333333333333LL +LL333333333333LL +LL333333333333LL +LL333333333333LL +LL333333333333LL +LL333333333333LL +LLL3333333333LLL +LLL3333333333LLL +.LLLL333333LLLL. +..LLLLLLLLLLLL.. +...LLLLLLLLLL...`], + [trigger2, bitmap` +................ +....LLLLLLLL.... +...LLLLLLLLLL... +..LLL666666LLL.. +.LLL66666666LLL. +.LL6666666666LL. +.LL6666666666LL. +.LL6666666666LL. +.LL6666666666LL. +.LL6666666666LL. +.LL6666666666LL. +.LLL66666666LLL. +..LLL666666LLL.. +...LLLLLLLLLL... +....LLLLLLLL.... +................`], + [movingWall, bitmap` +................ +................ +................ +................ +................ +....3LLLLLLL.... +..333LLLLLLL.L.. +.33LLLL1LLL..LL. +.3LLLLLLLLLLLLL. +.3LLLLLLLLLLLLL. +.3LLLLLLLLLL1LL. +.33LLLLLLLLLLLL. +..333L1LLLLLLL.. +....3LLLLLLL.... +................ +................`], + [movingWall2, bitmap` +................ +................ +................ +................ +................ +....LLLLLLL6.... +..L.LLLLLLL666.. +.LL..LLL1LLLL66. +.LLLLLLLLLLLLL6. +.LLLLLLLLLLLLL6. +.LL1LLLLLLLLLL6. +.LLLLLLLLLLLL66. +..LLLLLLL1L666.. +....LLLLLLL6.... +................ +................`], + [portal, bitmap` +................ +.....HHHHH...... +...HHHHHHHHH.... +...HH88888HH.... +..HH8888888HH... +..HH8888888HH... +..HH8888888HH... +..HH8888888HH... +..HH8888888HH... +..HH8888888HH... +..HH8888888HH... +..HH8888888HH... +...HH88888HH.... +...HHHHHHHHH.... +.....HHHHH...... +................`], + [portal2, bitmap` +................ +.....55555...... +...555555555.... +...557777755.... +..55777777755... +..55777777755... +..55777777755... +..55777777755... +..55777777755... +..55777777755... +..55777777755... +..55777777755... +...557777755.... +...555555555.... +.....55555...... +................`], + [key,bitmap` +................ +................ +................ +................ +..66666......... +.6666666........ +.6666666FFFFFFFF +.6666666FFFFFFFF +.6666666...FF.FF +.6666666...FF.FF +.6666666........ +..66666......... +................ +................ +................ +................`], + [door,bitmap` +................ +................ +................ +................ +.....CCCCCC..... +....CCC000CC.... +....CCC000CC.... +....0CC000CC.... +....CCC000CC.... +....CCCCCCCC.... +....CCCCCCCC.... +....CCCCCCLC.... +....CCCCCCCC.... +....0CCCCCCC.... +....CCCCCCCC.... +....CCCCCCCC....`], +) + +setSolids([wall, player, movingWall,movingWall2,door]) + +let level = 0 +const levels = [ + map` +...w.w.. +ww.w..w. +w...w..w +..w...w. +.w..w..w +.pw.ww.g`, + map` +.....w.. +ww.w..w. +..m.w... +.ww..ww. +..tw.... +pwwgm..w`, + map` +..gw.wwt +..w..... +w.wm.w.w +..w.ww.. +.wwm..w. +..m..wwp`, + map` +pww..wwg +..tw.... +.ww..ww. +.wow...w +..m..wm. +w.w..wow`, + map` +pwwm.wwg +..tw.... +.ww..ww. +.wow...w +..mm.wm. +wmwm.wow`, + map` +pm.....g +.w.w.ww. +tw.w.ww. +w..w.w.. +ow.w...m +...w..mo`, + map` +g.w..... +.dw..... +wm..m... +.kwmm... +www..www +piw..t.i`, + map` +k.....dg +.m.ww.ow +.mw.tw.w +omwipw.w +wwwwwwm. +i.......`, + map` +....w............. +.ww.ww.wwwwwwww... +.w..ww.w......w..w +.w..ww........w.wo +.w..wwww.wwwwww.w. +.w..w....w......w. +.w..w.g.ww.wwwwww. +dw..w...w..w..eeee +kw..w...w..wmmmm.. +.w..wwwww..w..eeee +.w.........wmmmm.. +ow.........w..eeee +wwwwwwwwwwwwww.... +p....jt...........`, +] + +setMap(levels[level]) + +setPushables({ + [player]: [] +}) + +onInput("s", () => { + getFirst(player).y += 1 +}) +onInput("w", () => { + getFirst(player).y -= 1 +}) +onInput("a", () => { + getFirst(player).x -= 1 +}) +onInput("d", () => { + getFirst(player).x += 1 +}) +onInput("j", () => { + const currentLevel = levels[level]; // get the original map of the level + + // make sure the level exists before we load it + if (currentLevel !== undefined) { + clearText(""); + setMap(currentLevel); + } +}); +afterInput(() => { + if (tilesWith(key, player).length > 0) { + const doors = getAll(door); + for (let i = 0; i < doors.length; i++) { + doors[i].remove(); + } + const keys = getAll(key); + + for (let i = 0; i < keys.length; i++) { + keys[i].remove(); + } + } + if (tilesWith(trigger, player).length > 0) { + const movingWalls = getAll(movingWall); + for (let i = 0; i < movingWalls.length; i++) { + movingWalls[i].x += 1; + } + } + if (tilesWith(trigger2, player).length > 0) { + const movingWalls2 = getAll(movingWall2); + for (let i = 0; i < movingWalls2.length; i++) { + movingWalls2[i].x -= 1; + } + } + if (tilesWith(portal, player).length > 0) { + let number = tilesWith(portal,player).length + nextX = getAll(portal)[number].x; + nextY = getAll(portal)[number].y; + if (nextX === getFirst(player).x && nextY === getFirst(player).y){ + nextX = getAll(portal)[0].x; + nextY = getAll(portal)[0].y; + } + getFirst(player).x = nextX; + getFirst(player).y = nextY; + } + if (tilesWith(portal2, player).length > 0) { + let number = tilesWith(portal2,player).length + nextX = getAll(portal2)[number].x; + nextY = getAll(portal2)[number].y; + if (nextX === getFirst(player).x && nextY === getFirst(player).y){ + nextX = getAll(portal2)[0].x; + nextY = getAll(portal2)[0].y; + } + getFirst(player).x = nextX; + getFirst(player).y = nextY; + } + const numberCovered = tilesWith(goal, player).length; + if (numberCovered === 1) { + level = level + 1; + + const currentLevel = levels[level]; + if (currentLevel !== undefined) { + setMap(currentLevel); + } else { + addText("you win!", { y: 4, color: color`H` }); + } + } +}) diff --git a/games/purge.js b/games/purge.js index 517aa8db0a..2896218306 100644 --- a/games/purge.js +++ b/games/purge.js @@ -1,8 +1,8 @@ /* @title: purge -@tags: ['sokoban-style'] -@addedOn: 2022-09-08 @author: noviicee +@tags: ['puzzle'] +@addedOn: 2022-09-08 Instructions: diff --git a/games/push_the_blocks.js b/games/push_the_blocks.js index 292451a583..187ac83143 100644 --- a/games/push_the_blocks.js +++ b/games/push_the_blocks.js @@ -1,8 +1,8 @@ /* @title: Push the Blocks -@tags: ['sokoban-style'] -@addedOn: 2022-11-10 @author: aidan +@tags: ['puzzle'] +@addedOn: 2022-11-10 Instructions: diff --git a/games/pusher_game.js b/games/pusher_game.js index bf480ea390..0b7ff2c57e 100644 --- a/games/pusher_game.js +++ b/games/pusher_game.js @@ -1,8 +1,8 @@ /* @title: Pusher game +@author: liam @tags: ['strategy'] @addedOn: 2023-02-08 -@author: liam */ const player = "p"; diff --git a/games/puzzle_runner.js b/games/puzzle_runner.js index a953c74f3e..14013e3bd8 100644 --- a/games/puzzle_runner.js +++ b/games/puzzle_runner.js @@ -1,8 +1,8 @@ /* @title: puzzle_runner -@tags: ['sokoban-style'] -@addedOn: 2022-10-12 @author: Shanath +@tags: ['puzzle'] +@addedOn: 2022-10-12 In Puzzle Runner, you must navigate through the maze while pushing a box. If you get through all the levels, you win! diff --git a/games/pyre.js b/games/pyre.js index d34534d514..2a58c5be13 100644 --- a/games/pyre.js +++ b/games/pyre.js @@ -1,8 +1,8 @@ /* @title: pyre +@author: ced @tags: ['strategy'] @addedOn: 2022-07-18 -@author: ced Instructions: diff --git a/games/racer.js b/games/racer.js index 34d0f8902f..15018dfee1 100644 --- a/games/racer.js +++ b/games/racer.js @@ -1,8 +1,8 @@ /* @title: racer -@tags: ['logic'] -@addedOn: 2022-11-08 @author: Snow +@tags: ['puzzle'] +@addedOn: 2022-11-08 */ // WHEN ON LEVEL SELECT SCREEN: To move to next level, click L. To move to previous level, click J. To select, click I. diff --git a/games/racing_game.js b/games/racing_game.js index 2364b51101..2e87c0c17f 100644 --- a/games/racing_game.js +++ b/games/racing_game.js @@ -1,8 +1,8 @@ /* @title: Car Race +@author: saumil @tags: ['strategy'] @addedOn: 2024-06-20 -@author: saumil Collect all green stuff (grass) and go to the blue thing (the destination) */ diff --git a/games/randomworld.js b/games/randomworld.js index 441167711e..3dabc5c158 100644 --- a/games/randomworld.js +++ b/games/randomworld.js @@ -1,8 +1,8 @@ /* @title: randomworld -@tags: ['explore'] -@addedOn: 2022-12-11 @author: Wojtek Widomski +@tags: ['adventure'] +@addedOn: 2022-12-11 */ diff --git a/games/raspy_snake.js b/games/raspy_snake.js new file mode 100644 index 0000000000..d4c19c7f8b --- /dev/null +++ b/games/raspy_snake.js @@ -0,0 +1,197 @@ +/* +@title: SnakeGame +@author: Elijah Grandell +@tags: [] +@addedOn: 2024-09-16 +*/ + +const player = "p"; +const food = "f"; + +setLegend( + [ player, bitmap` +................ +..0000000000000. +..0000000000000. +..0044444444400. +..0044444444400. +..0044444444400. +..0044444444400. +..0044444444400. +..0044444444400. +..0044444444400. +..0044444444400. +..0044444444400. +..0000000000000. +..0000000000000. +................ +................` ], + [ food, bitmap` +................ +................ +..........000... +.......0.0DDD00. +........0DDDDDD0 +....000.0000000. +...033C000CCCC0. +..03333CCCCCCCC0 +.033233333CCCCC0 +.032333333CCCCC0 +.033333333CCCCC0 +..033333333CCC0. +..033333333CCC0. +...03333333CC0.. +....003333300... +......00000.....` ] +); + +setSolids([]); + +let level = 0; +const levels = [ + map` +p......... +.......... +.......... +.......... +.......... +.......... +.......... +.......... +.......... +..........` +]; + +setMap(levels[level]); + +// Set the background color to brown +addText("", {x: 0, y: 0, color: color`1`}); + +setPushables({ + [ player ]: [] +}); + +let snake = [{x: 0, y: 0}]; +let direction = {x: 1, y: 0}; +let foodPosition = {x: 1, y: 1}; + +// Initialize score and highscore +let score = 0; +let highscore = 0; +let gameInterval = null; // Initialize with null +let isGameOver = false; + +// Function to clear the board +function clearBoard() { + for (let y = 0; y < height(); y++) { + for (let x = 0; x < width(); x++) { + getTile(x, y).forEach(t => t.remove()); // Remove all sprites from the tile + } + } +} + +// Function to place food randomly on the grid +function placeFood() { + const emptyCells = []; + for (let y = 0; y < height(); y++) { + for (let x = 0; x < width(); x++) { + if (!getTile(x, y).some(t => t.type === player)) { + emptyCells.push({x, y}); + } + } + } + foodPosition = emptyCells[Math.floor(Math.random() * emptyCells.length)]; + addSprite(foodPosition.x, foodPosition.y, food); +} + +placeFood(); + +onInput("w", () => { + if (direction.y === 0 && !isGameOver) direction = {x: 0, y: -1}; +}); + +onInput("a", () => { + if (direction.x === 0 && !isGameOver) direction = {x: -1, y: 0}; +}); + +onInput("s", () => { + if (direction.y === 0 && !isGameOver) direction = {x: 0, y: 1}; +}); + +onInput("d", () => { + if (direction.x === 0 && !isGameOver) direction = {x: 1, y: 0}; +}); + +onInput("k", () => { + if (isGameOver) restartGame(); +}); + +function moveSnake() { + const head = {x: snake[0].x + direction.x, y: snake[0].y + direction.y}; + + // Check if the snake hits the wall or itself + if (head.x < 0 || head.x >= width() || head.y < 0 || head.y >= height() || getTile(head.x, head.y).some(t => t.type === player)) { + return gameOver(); + } + + snake.unshift(head); + addSprite(head.x, head.y, player); + + // Check if the snake eats food + if (head.x === foodPosition.x && head.y === foodPosition.y) { + getTile(foodPosition.x, foodPosition.y).forEach(t => { + if (t.type === food) t.remove(); + }); + placeFood(); + score++; // Increase score when food is eaten + updateScoreDisplay(); // Update the score display + } else { + const tail = snake.pop(); + getTile(tail.x, tail.y).forEach(t => { + if (t.type === player) t.remove(); + }); + } +} + +function updateScoreDisplay() { + clearText(); // Clear the previous score display + addText(`Score: ${score}`, {x: 3, y: 1, color: color`0`}); + addText(`Highscore: ${highscore}`, {x: 3, y: 2, color: color`4`}); +} + +function gameOver() { + clearInterval(gameInterval); + isGameOver = true; + addText("Game Over", {x: 5, y: 7, color: color`3`}); + addText("Press 'K'", {x: 5, y: 9, color: color`0`}); + addText("to Restart.", {x: 4, y: 11, color: color`0`}); + + // Update highscore if the current score is higher + if (score > highscore) { + highscore = score; + } +} + updateScoreDisplay() + +function restartGame() { + // Clear the game board + clearBoard(); + + // Reset the game state + snake = [{x: 0, y: 0}]; + direction = {x: 1, y: 0}; + score = 0; + isGameOver = false; + + // Start the game loop again + updateScoreDisplay(); + placeFood(); // Place the food again after clearing the board + gameInterval = setInterval(moveSnake, 200); +} + +// Start the initial game loop +gameInterval = setInterval(moveSnake, 200); + +updateScoreDisplay(); // Initial score display + +afterInput(() => {}); diff --git a/games/raycasting.js b/games/raycasting.js index 2fbdd55529..21b7130edd 100644 --- a/games/raycasting.js +++ b/games/raycasting.js @@ -1,8 +1,8 @@ /* @title: Raycasting Demo -@tags: ['advanced'] -@addedOn: 2022-07-22 @author: Henry Bass +@tags: [] +@addedOn: 2022-07-22 Press W to move forwards, S to move back A and D to look diff --git a/games/reactor.js b/games/reactor.js index 94e608128b..e3d5e395f4 100644 --- a/games/reactor.js +++ b/games/reactor.js @@ -1,8 +1,8 @@ /* @title: reaction_timer +@author: sampoder @tags: ['multiplayer'] @addedOn: 2022-09-16 -@author: sampoder Instructions: diff --git a/games/red_light_green_light.js b/games/red_light_green_light.js index 5d86d532b1..9556c6b9cb 100644 --- a/games/red_light_green_light.js +++ b/games/red_light_green_light.js @@ -1,8 +1,8 @@ /* @title: red_light_green_light +@author: annie @tags: ['strategy'] @addedOn: 2022-11-16 -@author: annie wasd to move get a score of 3 during at level to progress to the next level move road blocks to get to the goal diff --git a/games/rescue_leo.js b/games/rescue_leo.js index e5a5fa1312..2f52717267 100644 --- a/games/rescue_leo.js +++ b/games/rescue_leo.js @@ -1,8 +1,8 @@ /* @title: rescue_leo -@tags: ['thematic-puzzle'] -@addedOn: 2023-02-11 @author: agentblack_6000 +@tags: ['puzzle'] +@addedOn: 2023-02-11 A game to spread awarness about sea turtles, perhaps switch to reusable diff --git a/games/rescue_your_chinchilla.js b/games/rescue_your_chinchilla.js index 0a9c8d8286..9eb2ecd73b 100644 --- a/games/rescue_your_chinchilla.js +++ b/games/rescue_your_chinchilla.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Rescue your chinchilla! @author: KamilloDev -@tags: ["Animal", "Rescue", "Teleporters"] +@tags: ['puzzle','adventure'] @addedOn: 2024-02-07 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const lever = 'y' const player = "p" diff --git a/games/restocker_simulater_sprig.js b/games/restocker_simulater_sprig.js index d8865bd8aa..b0780b1cc4 100644 --- a/games/restocker_simulater_sprig.js +++ b/games/restocker_simulater_sprig.js @@ -1,8 +1,8 @@ /* @title: restocker simulater -@tags: ['sokoban-style'] -@addedOn: 2022-11-23 @author: omegakitty +@tags: ['puzzle'] +@addedOn: 2022-11-23 */ //wasd for banana player diff --git a/games/reversi.js b/games/reversi.js index 99b7dc1fdb..28daab1173 100644 --- a/games/reversi.js +++ b/games/reversi.js @@ -1,8 +1,8 @@ /* @title: reversi -@tags: ['classic', 'multiplayer'] -@addedOn: 2022-09-13 @author: veehj +@tags: ['multiplayer','retro'] +@addedOn: 2022-09-13 */ const game = { diff --git a/games/rico_rodriguez.js b/games/rico_rodriguez.js new file mode 100644 index 0000000000..3363d58da5 --- /dev/null +++ b/games/rico_rodriguez.js @@ -0,0 +1,449 @@ +/* +@title: Rico Rodriguez +@author: DefinitelyInconspicuous +@tags: [] +@addedOn: 2024-09-04 +*/ +const player = "p"; +const bullet = "b"; +const background = "g"; +const obstacle = "o"; +const abilityIndicator = "a"; + +setLegend( + [player, bitmap` +................ +................ +................ +.....777777..... +.....7C77C7..... +.....777777..... +.....773377..... +......7777...... +.....777777..... +.......77....... +......7777...... +......7..7...... +.....77..77..... +................ +................ +................`], + [bullet, bitmap` +................ +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +.LLLLLLLLLLLLLL. +................`], + [obstacle, bitmap` +................ +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +..CCCCCCCCCCCC.. +................ +................`], + [abilityIndicator, bitmap` +................ +............666. +....DDDD...66666 +...DDDDDD..66666 +...DDDDDD9966666 +...DDDDDD9966666 +...DDDDDD9966666 +....DDDD9999666. +.....999999999.. +....FFF99977777. +...FFFFF97777777 +...FFFFF97777777 +...FFFFF97777777 +...FFFFF.7777777 +...FFFFF..77777. +....FFF.........`], + [background, bitmap` +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444 +4444444444444444`] +); + +setBackground(background); + +const level = map` +................ +................ +................ +...ooooo........ +...o............ +...o............ +........p....... +................ +................ +...ooooo........ +................ +................ +................ +................ +................`; +setMap(level); + +setSolids([player, bullet, obstacle]); + +let gameOver = false; +let gameStarted = false; +let stepsSurvived = 0; +let abilityAvailable = false; +let instruct = false; + +function showStartScreen() { + addText("Your name is", { x: 2, y: 1, color: color`3` }); + addText("Rico Rodriguez.", { x: 2, y: 2, color: color`3` }); + addText("The black hand", { x: 2, y: 4, color: color`3` }); + addText("have found you", { x: 2, y: 5, color: color`3` }); + addText("vulnerable!", { x: 2, y: 6, color: color`3` }); + addText("Your controls", { x: 2, y: 8, color: color`3` }); + addText("have been", { x: 2, y: 9, color: color`3` }); + addText("hacked", { x: 2, y: 10, color: color`3` }); + addText("and are somehow", { x: 2, y: 11, color: color`3` }); + addText("flipped!", { x: 2, y: 12, color: color`3` }); + addText("Press I to start", { x: 2, y: 14, color: color`3` }); +} + +function instructions() { + clearText(); + addText("Use DSAW to move", { x: 2, y: 1, color: color`3` }); + addText("When you see a", { x: 2, y: 2, color: color`3` }); + addText("colurful icon", { x: 2, y: 4, color: color`3` }); + addText("in the top right,", { x: 2, y: 5, color: color`3` }); + addText("you can press k", { x: 2, y: 6, color: color`3` }); + addText("to launch bavarium", { x: 2, y: 8, color: color`3` }); + addText("nuke, destroying", { x: 2, y: 9, color: color`3` }); + addText("the brown obstacle", { x: 2, y: 10, color: color`3` }); + addText("It recharges every", { x: 2, y: 11, color: color`3` }); + addText("20 points!", { x: 2, y: 12, color: color`3` }); + addText("Good Luck (i)", { x: 2, y: 14, color: color`3` }); +} + +function resetGame() { + clearInterval(bulletInterval); + clearInterval(obstacleInterval); + clearInterval(collisionInterval); + + clearText(); + setMap(level); + stepsSurvived = 0; + gameOver = false; + gameStarted = false; + abilityAvailable = false; + instruct = false + showStartScreen(); +} + + +function hideStartScreen() { + clearText(); + instructions() +} +function hideInstructions() { + clearText(); +} + +function createBullet() { + if (!gameOver && gameStarted) { + const x = 0; + const y = Math.floor(Math.random() * height()); + + const obstacleAtSpawn = getTile(x, y).find(s => s.type === obstacle); + + if (!obstacleAtSpawn && x !== getFirst(player).x) { + addSprite(x, y, bullet); + } + } +} + +function moveBullets() { + if (!gameOver && gameStarted) { + getAll(bullet).forEach(b => { + + const nextTile = getTile(b.x + 1, b.y); + if (b.x < width() - 1 && !nextTile.some(t => t.type === obstacle)) { + b.x += 1; + } else { + b.remove(); + } + }); + } +} + +function moveObstacles() { + if (!gameOver && gameStarted) { + getAll(obstacle).forEach(o => { + const direction = Math.floor(Math.random() * 4); + let newX = o.x; + let newY = o.y; + + if (direction === 0 && o.x > 0) { // Left + newX -= 1; + } else if (direction === 1 && o.x < width() - 1) { // Right + newX += 1; + } else if (direction === 2 && o.y > 0) { // Up + newY -= 1; + } else if (direction === 3 && o.y < height() - 1) { // Down + newY += 1; + } + + const obstacleAtNewPosition = getTile(newX, newY).some(t => t.type === obstacle); + const bulletAtNewPosition = getTile(newX, newY).some(t => t.type === bullet); + const playerAtNewPosition = getTile(newX, newY).some(t => t.type === player); + + if (!obstacleAtNewPosition && !bulletAtNewPosition && !playerAtNewPosition) { + o.x = newX; + o.y = newY; + } + }); + } +} + +function checkCollisions() { + const p = getFirst(player); + + if (p) { + getAll(bullet).forEach(b => { + if (p.x - b.x == 1 && + p.y == b.y) { + playTune(tune` +182.9268292682927: D5~182.9268292682927 + F5-182.9268292682927 + A4/182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927, +182.9268292682927: F5~182.9268292682927 + A4~182.9268292682927 + D5-182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + A4~182.9268292682927 + B4~182.9268292682927 + F4^182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + B4~182.9268292682927 + C5~182.9268292682927 + C4/182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + C5~182.9268292682927 + D5~182.9268292682927 + E5-182.9268292682927, +182.9268292682927: B5~182.9268292682927 + D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + G4~182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927 + E4^182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + A4~182.9268292682927 + B4~182.9268292682927 + E5-182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + C5~182.9268292682927 + G5-182.9268292682927 + A4-182.9268292682927, +182.9268292682927: B5~182.9268292682927 + C5~182.9268292682927 + D5~182.9268292682927 + E4^182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + F4~182.9268292682927 + G4~182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + A4~182.9268292682927 + B4~182.9268292682927 + C4^182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + B4~182.9268292682927 + C5~182.9268292682927 + D5-182.9268292682927, +182.9268292682927: B5~182.9268292682927 + C5~182.9268292682927, +182.9268292682927: D5~182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + E4~182.9268292682927 + F4~182.9268292682927 + A4-182.9268292682927, +182.9268292682927: E5~182.9268292682927 + F5~182.9268292682927 + G5~182.9268292682927 + F4~182.9268292682927 + G4~182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + B4~182.9268292682927 + C5~182.9268292682927, +182.9268292682927: C5~182.9268292682927 + D5~182.9268292682927 + G5-182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + G4-182.9268292682927 + D4/182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + D4~182.9268292682927 + E4~182.9268292682927 + E5-182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + E4~182.9268292682927 + F4~182.9268292682927, +182.9268292682927: B5~182.9268292682927 + F4~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927 + B4-182.9268292682927, +182.9268292682927: A4~182.9268292682927 + B4~182.9268292682927 + E5-182.9268292682927 + D4^182.9268292682927, +182.9268292682927: B4~182.9268292682927 + C5~182.9268292682927 + D5~182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + G4-182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + D4~182.9268292682927 + A4-182.9268292682927 + C5/182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + B5~182.9268292682927 + D4~182.9268292682927 + E4~182.9268292682927, +182.9268292682927: B5~182.9268292682927 + F4~182.9268292682927 + C4~182.9268292682927 + A4/182.9268292682927 + B4/182.9268292682927`, Infinity) + gameOver = true; + addText("Game Over!", { x: 2, y: 5, color: color`3` }); + addText(`Score: ${stepsSurvived}`, { x: 2, y: 7, color: color`3` }); + addText("Press J to restart", { x: 2, y: 9, color: color`3` }); + getAll(bullet).forEach(b => b.remove()); + setInterval(() => {}, 1000); + } + }); + } +} + +function destroyObstacle() { + if (abilityAvailable && !gameOver && gameStarted) { + const p = getFirst(player); + const obstacles = getAll(obstacle); + + if (obstacles.length > 0) { + // Find the nearest obstacle to the player + let nearestObstacle = obstacles[0]; + let nearestDistance = Math.abs(nearestObstacle.x - p.x) + Math.abs(nearestObstacle.y - p.y); + + obstacles.forEach(o => { + const distance = Math.abs(o.x - p.x) + Math.abs(o.y - p.y); + if (distance < nearestDistance) { + nearestObstacle = o; + nearestDistance = distance; + } + }); + + nearestObstacle.remove(); + abilityAvailable = false; + clearAbilityIndicator(); + } + } +} + +function showAbilityIndicator() { + if (!gameOver && gameStarted) { + addSprite(15, 0, abilityIndicator); + } +} + +function clearAbilityIndicator() { + getAll(abilityIndicator).forEach(a => a.remove()); +} + +onInput("w", () => { + const p = getFirst(player); + if (!gameOver && gameStarted && p.y < height() - 1) { + const nextTile = getTile(p.x, p.y + 1); + if (!nextTile.some(t => t.type === obstacle)) { + p.y += 1; + stepsSurvived += 1; + } + } +}); + +onInput("s", () => { + const p = getFirst(player); + if (!gameOver && gameStarted && p.y > 0) { + const nextTile = getTile(p.x, p.y - 1); + if (!nextTile.some(t => t.type === obstacle)) { + p.y -= 1; + stepsSurvived += 1; + } + } +}); + +onInput("a", () => { + const p = getFirst(player); + if (!gameOver && gameStarted ) { + const nextTile = getTile(p.x - 1, p.y); + if (!nextTile.some(t => t.type === obstacle)) { + p.x += 1; + stepsSurvived += 1; + } + } +}); + +onInput("d", () => { + const p = getFirst(player); + if (!gameOver && gameStarted) { + const nextTile = getTile(p.x + 1, p.y); + if (!nextTile.some(t => t.type === obstacle)) { + p.x -= 1; + stepsSurvived += 1; + } + } +}); + +onInput("k", () => { + destroyObstacle(); +}); + +onInput("j", () => { + resetGame() +}); + +onInput("i", () => { + if (!gameStarted) { + gameStarted = true; + hideStartScreen(); + instructions() + + bulletInterval = setInterval(createBullet, 1000); + obstacleInterval = setInterval(moveObstacles, 2000); + collisionInterval = setInterval(checkCollisions, 50); + + bulletMoveInterval = setInterval(moveBullets, 200); + } + else { + if (!instruct) { + instruct = true; + hideInstructions() + + } + } +}); + +afterInput(() => { + if (!gameOver && gameStarted) { + const playback = playTune(tune` +182.9268292682927: D5~182.9268292682927 + F5-182.9268292682927 + A4/182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927, +182.9268292682927: F5~182.9268292682927 + A4~182.9268292682927 + D5-182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + A4~182.9268292682927 + B4~182.9268292682927 + F4^182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + B4~182.9268292682927 + C5~182.9268292682927 + C4/182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + C5~182.9268292682927 + D5~182.9268292682927 + E5-182.9268292682927, +182.9268292682927: B5~182.9268292682927 + D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + G4~182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927 + E4^182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + A4~182.9268292682927 + B4~182.9268292682927 + E5-182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + C5~182.9268292682927 + G5-182.9268292682927 + A4-182.9268292682927, +182.9268292682927: B5~182.9268292682927 + C5~182.9268292682927 + D5~182.9268292682927 + E4^182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + F4~182.9268292682927 + G4~182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + A4~182.9268292682927 + B4~182.9268292682927 + C4^182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + B4~182.9268292682927 + C5~182.9268292682927 + D5-182.9268292682927, +182.9268292682927: B5~182.9268292682927 + C5~182.9268292682927, +182.9268292682927: D5~182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + E4~182.9268292682927 + F4~182.9268292682927 + A4-182.9268292682927, +182.9268292682927: E5~182.9268292682927 + F5~182.9268292682927 + G5~182.9268292682927 + F4~182.9268292682927 + G4~182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927, +182.9268292682927: A5~182.9268292682927 + B5~182.9268292682927 + B4~182.9268292682927 + C5~182.9268292682927, +182.9268292682927: C5~182.9268292682927 + D5~182.9268292682927 + G5-182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + G4-182.9268292682927 + D4/182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + D4~182.9268292682927 + E4~182.9268292682927 + E5-182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + E4~182.9268292682927 + F4~182.9268292682927, +182.9268292682927: B5~182.9268292682927 + F4~182.9268292682927 + G4~182.9268292682927 + A4~182.9268292682927 + B4-182.9268292682927, +182.9268292682927: A4~182.9268292682927 + B4~182.9268292682927 + E5-182.9268292682927 + D4^182.9268292682927, +182.9268292682927: B4~182.9268292682927 + C5~182.9268292682927 + D5~182.9268292682927, +182.9268292682927: D5~182.9268292682927 + E5~182.9268292682927 + F5~182.9268292682927 + G4-182.9268292682927, +182.9268292682927: F5~182.9268292682927 + G5~182.9268292682927 + D4~182.9268292682927 + A4-182.9268292682927 + C5/182.9268292682927, +182.9268292682927: G5~182.9268292682927 + A5~182.9268292682927 + B5~182.9268292682927 + D4~182.9268292682927 + E4~182.9268292682927, +182.9268292682927: B5~182.9268292682927 + F4~182.9268292682927 + C4~182.9268292682927 + A4/182.9268292682927 + B4/182.9268292682927`, Infinity) + playback.end() + // playback.start() + + moveBullets(); + checkCollisions(); + createBullet(); + moveObstacles(); + if (stepsSurvived >= 20 && !abilityAvailable) { + abilityAvailable = true; + showAbilityIndicator(); + } + addText(`${stepsSurvived}`, { x: 2, y: 1, color: color`3` }); + } +}); + +setInterval(createBullet, 300); + +showStartScreen(); diff --git a/games/roodkapje.js b/games/roodkapje.js index ef3dc28069..86a3db17bd 100644 --- a/games/roodkapje.js +++ b/games/roodkapje.js @@ -1,9 +1,9 @@ /* @title: Roodkapje @author: Ebit22 -@tags: ['beginner', 'maze'] -@img: "" +@tags: ['puzzle'] @addedOn: 2024-05-30 +@img: "" move with WASD, go to the house and dogde the wolfs. */ diff --git a/games/run.js b/games/run.js index ada503931d..9e324e09a9 100644 --- a/games/run.js +++ b/games/run.js @@ -2,7 +2,7 @@ /* @title: run @author: Nguyễn Gia Bách -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-07-20 */ diff --git a/games/sPaint!.js b/games/sPaint!.js index 6328adb816..54faab14c8 100644 --- a/games/sPaint!.js +++ b/games/sPaint!.js @@ -1,8 +1,8 @@ /* @title: sPaint! +@author: yzde @tags: ['sandbox'] @addedOn: 2023-02-02 -@author: yzde controls: use w (at the first screen) to start diff --git a/games/santas_workshop.js b/games/santas_workshop.js index dda90de065..e67ffdb487 100644 --- a/games/santas_workshop.js +++ b/games/santas_workshop.js @@ -1,8 +1,8 @@ /* @title: santas_workshop -@tags: ['sokoban-style'] -@addedOn: 2023-03-10 @author: ava_sadasivan +@tags: ['puzzle'] +@addedOn: 2023-03-10 */ const elf = "p"; diff --git a/games/scrolling_maze.js b/games/scrolling_maze.js index bf32a4090f..b629e38637 100644 --- a/games/scrolling_maze.js +++ b/games/scrolling_maze.js @@ -1,8 +1,8 @@ /* @title: scrolling_maze +@author: Ben @tags: [] @addedOn: 2023-01-15 -@author: Ben */ /* Big maze. IDK. I don't really make mazes. diff --git a/games/seven_ate_nine_789.js b/games/seven_ate_nine_789.js index 2f40a7a306..51cf6a6f8c 100644 --- a/games/seven_ate_nine_789.js +++ b/games/seven_ate_nine_789.js @@ -1,8 +1,8 @@ /* @title: Seven Ate Nine (789) +@author: Arjun V @tags: ['multiplayer'] @addedOn: 2022-09-12 -@author: Arjun V A fun, fast-paced, 2-player game. diff --git a/games/shark dodger.js b/games/shark dodger.js index ee5c990534..958f9e5f3b 100644 --- a/games/shark dodger.js +++ b/games/shark dodger.js @@ -1,9 +1,9 @@ /* @title: shark_dodger @author: angelgames -@tags: ["dodge"] -@img: "" +@tags: ['action'] @addedOn: 2024-05-23 +@img: "" */ const player = "p" const harpoon = "h" diff --git a/games/shitpest.js b/games/shitpest.js index fc007e05fa..1ddd0dbf3a 100644 --- a/games/shitpest.js +++ b/games/shitpest.js @@ -1,8 +1,8 @@ /* @title: shitpest +@author: Mason Meirs @tags: ['strategy'] @addedOn: 2022-12-24 -@author: Mason Meirs snwy.me */ diff --git a/games/shoot_green_blobs.js b/games/shoot_green_blobs.js index 7032fd9786..461dabc6b0 100644 --- a/games/shoot_green_blobs.js +++ b/games/shoot_green_blobs.js @@ -1,8 +1,8 @@ /* @title: shoot_green_blobs -@tags: ['classic'] -@addedOn: 2022-09-07 @author: otterly-otter +@tags: ['retro'] +@addedOn: 2022-09-07 */ diff --git a/games/shooter.js b/games/shooter.js index 179399ad45..6bc4e4352d 100644 --- a/games/shooter.js +++ b/games/shooter.js @@ -1,8 +1,8 @@ /* @title: Shooter +@author: Tyler Sousa @tags: ['strategy'] @addedOn: 2023-10-24 -@author: Tyler Sousa WASD to move K to shoot diff --git a/games/shortest_porky.js b/games/shortest_porky.js index 921a48c10a..ac9cb07b24 100644 --- a/games/shortest_porky.js +++ b/games/shortest_porky.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: shortest_porky @author: mjh316 @tags: [] @addedOn: 2024-07-29 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const littlerootTheme = tune` diff --git a/games/simon.js b/games/simon.js index 206ad1c0a3..80d377ec03 100644 --- a/games/simon.js +++ b/games/simon.js @@ -1,8 +1,8 @@ /* @title: simon -@tags: ['classic'] -@addedOn: 2022-09-29 @author: riley +@tags: ['retro'] +@addedOn: 2022-09-29 */ /* diff --git a/games/simple_maze.js b/games/simple_maze.js index 9c4b4147c0..98cd787f2d 100644 --- a/games/simple_maze.js +++ b/games/simple_maze.js @@ -1,8 +1,8 @@ /* @title: simple maze -@tags: ['sokoban-style'] -@addedOn: 2022-09-13 @author: Itamar Davidyan +@tags: ['puzzle'] +@addedOn: 2022-09-13 */ diff --git a/games/skibidi-toilet-game.js b/games/skibidi-toilet-game.js index b0de1c3b3b..2fc7db26b0 100644 --- a/games/skibidi-toilet-game.js +++ b/games/skibidi-toilet-game.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: skibidi-toilet-game @author: spedward -@tags: ['skibidi', 'skibidi-toilet'] +@tags: ['humor'] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ diff --git a/games/skyrace.js b/games/skyrace.js index 02b7353f23..74a74cabcf 100644 --- a/games/skyrace.js +++ b/games/skyrace.js @@ -1,8 +1,8 @@ /* @title: skyrace +@author: Shourya Pandey @tags: ['multiplayer'] @addedOn: 2023-07-16 -@author: Shourya Pandey About game :- this is a multiplayer game you have to avoid collision with the mountain, diff --git a/games/slot_machine.js b/games/slot_machine.js index 6e79b2f814..984a8c8133 100644 --- a/games/slot_machine.js +++ b/games/slot_machine.js @@ -1,10 +1,10 @@ /* @title: Slot Machine @author: Alexander Li +@tags: ['utility','retro'] +@addedOn: 2024-05-23 @discord: thefaix. -@tags: ["classic", "tool"] @img: "" -@addedOn: 2024-05-23 */ const slot = "s" diff --git a/games/snake_feast.js b/games/snake_feast.js index d767bf7665..e3f22ac67c 100644 --- a/games/snake_feast.js +++ b/games/snake_feast.js @@ -2,8 +2,8 @@ @title: Snake Feast @author: chaste @tags: [] -@img: "" @addedOn: 2024-06-07 +@img: "" */ const snakeHead = "H"; diff --git a/games/snake_game.js b/games/snake_game.js index 02d72079a6..ca6d81f0eb 100644 --- a/games/snake_game.js +++ b/games/snake_game.js @@ -1,8 +1,8 @@ /* @title: snake_game -@tags: ['classic'] -@addedOn: 2022-09-13 @author: souvikpal2000 +@tags: ['retro'] +@addedOn: 2022-09-13 */ /* diff --git a/games/snakey_snake.js b/games/snakey_snake.js index 356d535499..3cce991939 100644 --- a/games/snakey_snake.js +++ b/games/snakey_snake.js @@ -1,8 +1,8 @@ /* @title: snakey snake -@tags: ['WIP', 'strategy'] -@addedOn: 2022-08-12 @author: Alexander Chin +@tags: ['strategy'] +@addedOn: 2022-08-12 Instructions: Eat all of the apples, then go for orphy! rock eater power ups allow you to eat rocks - one rock per power up. diff --git a/games/snek.js b/games/snek.js index 20852fa33b..eff906e32a 100644 --- a/games/snek.js +++ b/games/snek.js @@ -1,8 +1,8 @@ /* @title: snek -@tags: ['classic'] -@addedOn: 2022-08-30 @author: userjhansen +@tags: ['retro'] +@addedOn: 2022-08-30 get the fruit */ diff --git a/games/soko_quest.js b/games/soko_quest.js index ca1fe85443..61cd7b576a 100644 --- a/games/soko_quest.js +++ b/games/soko_quest.js @@ -1,8 +1,8 @@ /* @title: soko_quest -@tags: ['logic'] -@addedOn: 2022-11-13 @author: swarit choudhari +@tags: ['puzzle'] +@addedOn: 2022-11-13 Instructions: diff --git a/games/sokoban.js b/games/sokoban.js index db976c0a1b..75ec4ee9eb 100644 --- a/games/sokoban.js +++ b/games/sokoban.js @@ -1,8 +1,8 @@ /* @title: sokoban -@tags: ['beginner', 'hackable', 'sokoban-style'] -@addedOn: 2022-07-18 @author: leo +@tags: ['puzzle'] +@addedOn: 2022-07-18 Instructions: diff --git a/games/sokoban_plus.js b/games/sokoban_plus.js index 30206764dc..3e668fe64a 100644 --- a/games/sokoban_plus.js +++ b/games/sokoban_plus.js @@ -1,8 +1,8 @@ /* @title: Sokoban+ -@tags: ['sokoban-style'] -@addedOn: 2022-09-06 @author: Leonard (Omay) +@tags: ['puzzle'] +@addedOn: 2022-09-06 25 levels 3 types of boxes and 3 types of goals diff --git a/games/sokobanlike.js b/games/sokobanlike.js index c91b573ecf..81ea5e5560 100644 --- a/games/sokobanlike.js +++ b/games/sokobanlike.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: sokobanlike @author: Neptune1190 -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-07-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/solar_system.js b/games/solar_system.js index 33746730fe..3fe6dee111 100644 --- a/games/solar_system.js +++ b/games/solar_system.js @@ -1,8 +1,8 @@ /* @title: solar_system +@author: CD @tags: ['simulation'] @addedOn: 2022-11-23 -@author: CD */ /* diff --git a/games/son_of_a_lich.js b/games/son_of_a_lich.js index c479326fc0..17c7cf9847 100644 --- a/games/son_of_a_lich.js +++ b/games/son_of_a_lich.js @@ -1,8 +1,8 @@ /* @title: son_of_a_lich +@author: William Lay @tags: [] @addedOn: 2023-01-30 -@author: William Lay */ /* diff --git a/games/soul-stealer.js b/games/soul-stealer.js index 06f2ab4617..3f741e1e53 100644 --- a/games/soul-stealer.js +++ b/games/soul-stealer.js @@ -1,12 +1,12 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: SOUL STEALER: The Vengful Spirit @author: Gavin Jent @tags: [] -@img: "" @addedOn: 2024-05-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@img: "" */ const player = "p" diff --git a/games/space-invaders.js b/games/space-invaders.js index b0d49c4868..75cbf2d6e8 100644 --- a/games/space-invaders.js +++ b/games/space-invaders.js @@ -2,9 +2,9 @@ /* @title: Space_Invaders +@author: Carmel132 @tags: ['strategy'] @addedOn: 2023-04-19 -@author: Carmel132 Controls: A/D - Left/Right diff --git a/games/space-maze.js b/games/space-maze.js new file mode 100644 index 0000000000..8103e98c10 --- /dev/null +++ b/games/space-maze.js @@ -0,0 +1,1233 @@ + +/* +@title: space_maze +@author: klumey +@tags: ['puzzle'] +@addedOn: 2024-08-31 + +----------------------CONTROLS-------------- + +w,s,a,d - to move +j - reset current map if stuck +i - collect an item +k - use an item + +----------- ABOUT GAME ---------- + +You are an alien flying through space mazes! Space is filled with all types of dangers, don't fall into black holes or step into rips in space and time! +Try to escape those so you can get to the planet. +After landing, you're job is to abduct cows! Only after getting all of them, you can fly away on your space ship. +But beware! You start getting hungry - eat apples to finish your job and not starve! + +This game has 36 levels, every one is different and difficulty may differ between them. + +Have fun! + +*/ + + +// ------------objects and bitmaps ------------ + let player = ''; + const shipGoal = "i" + const fence = "e" + const ship = "z" + const alien = "l" + const space = "x" + const planet = "k" + const asteroid = "a" + const gate = "g" + const crystal = "c" + const spacerock = "s" + const blackhole = "b" + const crack = "r" + const spacerip = "y" + const blWormhole = "!" + const rdWormhole = "?" + const arrowPointDown = "d" + const fakePlanet = "f" + const groundBg = "h" + const cow = "q" + const house = "j" + const apple = "o" + const alienPic = bitmap` +................ +................ +.....4....4..... +......4444...... +......44444..... +.....400400D.... +.....400400D.... +......44DDD..... +.....4444444.... +....44444444D... +....4444444DD... +....444444DDD... +.....44DDDDD.... +................ +................ +................`; + const shipPic = bitmap`................ +................ +................ +....DD444DD..... +...DD111L0D4.... +.4DD41111LLD4... +4DL1D141414L4D4. +D11L11D1D1L000DD +4111LLLLLLLLL004 +DD11111L1LLL0004 +.44DLLLLLL000DDD +...DDDD4444DDD.. +................ +................ +................ +................`; +setLegend( + [shipGoal, bitmap` +................ +................ +....DD444DD..... +...DD111L0D4.... +.4DD41111LLD4... +4DL1D141414L4D4. +D11L11D1D1L000DD +4111LLLLLLLLL004 +DD11111L1LLL0004 +.44DLLLLLL000DDD +...DDDD44D4DDD.. +.....4DDD4...... +....4DD4D4D..... +....4D444D4..... +...D4D4D4D4D.... +................`], + [ ship, shipPic], + [ alien, alienPic], + [ apple, bitmap` +.......C........ +......CC..D4.... +......C.DD44.... +......CDD44..... +...6693CD433.... +..69999333333... +..96333333223... +..99333333323... +..69393333333... +..93333333323... +..99333333333... +...9393333333... +...333333333.... +.....33333...... +................ +................`], + [ space, bitmap` +0000100000001000 +0000000000010100 +0000000000001000 +0000000000000000 +0100000000000000 +1010000100000000 +0100000000000010 +0000000000000000 +0001000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0001000000001000 +0011100000000000 +0001000010000000 +0000000000000000` ], + [ asteroid, bitmap ` +................ +....22121L1L.... +...211L11LLLL... +..222LLLLLL1LL.. +.22111LLLLLLLLL. +.211L1LL11LLLLL. +.2211LL11LLL1LL. +.211LLL111L1LLL. +.221LLLLLLLL1LL. +.21111LL1LLLLLL. +.2111L1LLLL1LLL. +.2211LLLLL1LLLL. +.22121L1LL11LL.. +...2111LLLLLL... +....2221LL1L.... +................`], + [planet, bitmap` +................ +.....933C3C..... +...9939933CCC... +..6669939333CC.. +.699999993933CC. +.6699669333333C. +.996669999393CC. +.6696993339933C. +.66999999933CCC. +.999996999939CC. +.6669969939333C. +.69996933333CCC. +..66999999C33C.. +...69996693CC... +....66633CCC.... +................` ], + [gate, bitmap` +.....269CC2..... +.....2CFFC2..... +.....2CFFC2..... +.....29CCC2..... +....22CFFC22.... +...29CC00CCC2... +..29CLL11LLCC2.. +..260L1111L0C2.. +..29CLL11LLCC2.. +...29CC00CCC2... +....22CFFC22.... +.....29FFC2..... +.....269CC2..... +.....2CFFC2..... +.....2CFFC2..... +.....269CC2.....`], + [crystal, bitmap` +7..7..7...777..7 +..7757HHHH55...7 +...75HH828H57.7. +..75HH8H888857.. +.75HH88H2888H57. +..HHH88H28888H7. +.7HH88H22888887. +75H88H28H2888H57 +75HH2H28H28H2857 +75H882288222887. +.5H88H28H288887. +7.HHH8H22888885. +..7HHH8H2888H75. +7755HH8H28885... +.7.77HHH28H57... +7..7.7HHHH5577..`], + [spacerock, bitmap` +................ +...22222222222.. +..2211111111122. +.221LL1111111122 +.21L1LLLL11L1112 +.2LLLLL1LLL11112 +.2LLLLLLL1LL1112 +.2LL1LLLLLL1LL12 +.2L1LLLLLLLLL112 +.2LL1LLL1LLLLL12 +.2LLLLL1L1L1LL12 +.2LLLLLL1LLLLL12 +.2LLLLLLLLLLL1L2 +.22LLLLLLLLLLL22 +..22LLLLLLLLL22. +...22222222222..`], + [blackhole, bitmap` +................ +................ +....99666699.... +...9662222669... +..622200002266.. +66220000000226.. +992000000000226. +966000000000029. +396966000000026. +.999969666902299 +..92093336696669 +..92000099993393 +..662200000269.. +...6622222226... +.....9966966.... +................`], + [crack, bitmap` +................ +.............1.. +........L...11.. +........LL..L1.. +.......L0..1L... +........L11LL... +........L10L.... +........00L..... +.LLLL.11L1...... +...LL010L1...... +....1L0L1....... +....LL110LL..... +...1L1..L0...... +...11....LL..... +.LL1............ +................`], + [spacerip, bitmap` +.....L.........0 +.L0.L.....LL.LLL +..0LL.70LLL0LL0. +..L..L777HHHH0.. +..LL00HH7888H00. +...L0HH8788HH00. +.LL0H888778HHL.. +.L777755788H0L.. +.7777HH788HHLL0L +LLH8757788H0L..0 +.0H878887HHLL... +.0888HHH700L.... +.088HHH00LL..... +L0HHH0L0LLL..... +LLLLLLL....0LL0. +L0.........0L...`], + [blWormhole, bitmap` +....2155777..... +.7.27HH55577.2.. +...25HH55557272. +...25H5HHH557.7. +7.71HH555HH57... +..25555555H51... +..7255HHH5HL7.7. +2..755H5H5117.7. +77.275H555755.2. +.72577HH555557.. +.777555H55H572.. +.7.55H5555H57... +..7.5HHHHHH72... +.77775555777.... +.7..227755.7..7. +..7....77772....`], + [rdWormhole, bitmap` +....2833888..... +.8.283333388.2.. +...833993338282. +..88393399338.8. +8.88993333938... +.8239333333388.. +..83333993388.8. +2..8339339888.8. +88.2839939833.2. +.8238839393338.. +.8883333393382.. +.8.3393339338... +..8.339993382... +.88883333888.... +.8..228833.8..8. +..8..8.88882....`], + [arrowPointDown, bitmap` +................ +.....66666...... +.....66666...... +.....66666...... +.....66666...... +.....66666...... +.....66666...... +.....66666...... +.6666666666666.. +..66666666666... +...666666666.... +....6666666..... +.....66666...... +......666....... +.......6........ +................`], + [fakePlanet, bitmap` +................ +.....933333..... +...9939933333... +..666993993333.. +.69999999393333. +.66996693333333. +.99666999939333. +.66969933399333. +.66999999933333. +.99999699993933. +.66699699399333. +.69996933333333. +..669999999333.. +...6999669333... +....66633333.... +................` ], + [ groundBg, bitmap` +8888888888888888 +8688888888888688 +8898888688888988 +8888888988888898 +8888889888688888 +8866888888968888 +8868888888898888 +8898888888888888 +8988888688888868 +8888888688888868 +8888889888688988 +8898888988888888 +8888888888868888 +8886888888889888 +8898888688888888 +8888888888888888` ], + [ cow, bitmap` +................ +................ +..........1111.. +.........1122F1. +....11111122021. +.111120022022C1. +1100022200002281 +1200002220000081 +120002222220111. +0122222200221... +0110288202201... +1.12218111201... +..122111.1221... +..101....1101... +..111.....11.... +................` ], + [fence, bitmap` +.CCC..........C. +CCFFC......CCCCC +CF1FFC...CCCFFCC +CCFFFFCCCCCFF1FC +.CFFFFFCCCFFFFFC +..CFFCCCFCCFFFCC +...CCCFFFFCFFCC. +..CCCCFFFFCCCC.. +.CCCFCCFFFCCC... +CCCFFCCCFFCCFCC. +CFFFFFCCCCCFFFCC +CFFFFFCCCCFFFFFC +FF1FFCCC.CCFF1FC +CFFFCC....CCFFFC +.CCC.......CCFFC +............CCC.`], + [house, bitmap` +................ +................ +................ +...CC.333C...... +...CC33333C..... +...CC33333CC.... +..3333333CCCCC.. +.33333CCCCCCCC.. +.3CCCCCCCCCCCCC. +...2221211211... +...2752222751... +...2772221771... +...2752CC2751... +...2222FC2111... +...2212CC1211... +................`], +) +setSolids([ship,alien,asteroid,gate,spacerock,fence]) +setPushables({ + [ spacerock ]: [spacerock], + [ alien ]: [spacerock], + [ ship ] : [spacerock], +}) + +//---------------controls------------------------------- + + onInput("w", () => { + const alienSprite = getFirst(alien) + if (alienSprite) { + getFirst(alien).y -= 1; + alienY = getFirst(alien).y; + } + else { + getFirst(ship).y -= 1; + shipY = getFirst(ship).y; + } + playTune(moveSound); + }) +onInput("s", () => { + const alienSprite = getFirst(alien) + if (alienSprite) { + getFirst(alien).y += 1; + alienY = getFirst(alien).y; + } + else { + getFirst(ship).y += 1; + shipY = getFirst(ship).y; + } + playTune(moveSound); +}) +onInput("a", () => { + const alienSprite = getFirst(alien) + if (alienSprite) { + getFirst(alien).x -= 1; + alienY = getFirst(alien).x; + } + else { + getFirst(ship).x -= 1; + shipY = getFirst(ship).x; + } + playTune(moveSound); +}) +onInput("d", () => { + const alienSprite = getFirst(alien) + if (alienSprite) { + getFirst(alien).x += 1; + alienY = getFirst(alien).x; + } + else { + getFirst(ship).x += 1; + shipY = getFirst(ship).x; + } + playTune(moveSound); +}) + +// ------------ lv reset ------- +onInput("j", () => { + playerDeath(); +}); + +// ---------------levels/maps ------------------------ +let level = 0; +const levels = [ + map` +z. +.k`, //0 - space + map` +l... +.... +q..i`, // 1 - planet + map` +.aa.. +..... +...a. +..a.. +zak..`, //2 - space + map` +lei.. +.e.q. +..ee. +..q..`, // 3 - planet + map` +za.k +sa.a +.s.. +.a..`, //4 - space + map` +leeei +q.qe. +...j. +q.qe. +.e...`, //5 - planet + map` +zsss. +ssss. +ss... +.sss. +s.ska`,//6 - space + map` +ljeoq.qjeji +.qej.e..eq. +j.e..ejqe.j +q.eqje..e.q +.je..e.jej. +.qej.eq.e.. +j.e.qej.e.j +o.q.je.q.qo`,//7 - planet + map` +..a... +....ad +.aa.ac +...aaa +aa.aka +z..g..`,//8 - space + map` +.l...q..j +jejejej.o +eq...q... +..jejejej +o..q...qe +ejejeje.. +j.q...q.o +..ejejeje +q...q..qi`,//9 - planet + map` +.....az..a. +aa.a.aaa.a. +...a...a... +.aaaaa.aaa. +.....a.a.a. +.aaa.a.a.a. +.a...a...a. +.a.aaa.aaa. +.a.akg.a... +.a.aaaaa.aa +ca.........`,//10 - space + map` +...qeej.l +.q....e.. +o..q.o.e. +.q...q.e. +......ie. +..q.q.ej. +q.....e.. +.oq.e....`,//11 - planet + map` +..z.. +.aaa. +.kab.`,//12 - space + map` +.....j...j +lj........ +eeeeeeee.. +q...q....o +..q....ej. +......qeo. +o......e.. +j..q...ej. +......qei.`,//13 - planet + map` +..ba...ba. +a.aa.a.aaa +as...a.... +asaaaaaaa. +....aka.a. +.a..a.b.a. +.aa.a..sa. +.ba.aaasa. +aaasaba.s. +z...a.s...`,//14 - space + map` +l........ +...q.o.q. +......... +q..q....q +.......o. +q.....q.. +.o..q...i`,//15 - planet + map` +ca...rs..a +.a.aaaa.a. +.ar.a.a.a. +...s..a... +ba.saaa.aa +aaa.abs... +a.rs.asaa. +a.asaa...r +a..aza.aab +a....a.g.k`,//16 - space + map` +l......j +ejeejeo. +q....oe. +...q.ej. +....ej.. +o....... +.qe..q.. +.ej....o +eeeeeej. +i.......`,//17 -planet + map` +.g.a....... +.a..saaaaa. +ra.a.a.s.a. +.aaaaaaa.r. +kaca...aaa. +aa.a.a.a... +...aaasr.aa +.aaa.asaaaz +.a..sa...a. +.a.a.aaara. +...a.......`,//18 - space + map` +.q.... +.....j +...q.. +.qj.q. +.....j +.li.q.`,//19 -planet + map` +!ab.k +.a... +.a.aa +za..?`,//20 - space + map` +.....qj.... +.q.....o... +.........q. +....eeej... +....li.e... +...e...e... +...e...e... +q..jeeejq.. +........... +....o.q....`,//21 -planet + map` +a.s.....a..b +a.aaaas.a.aa +a.r..as.a.ak +baaa.a....a. +..r..aaa..a. +aaaaraba..a. +..ca...ab.g. +.aaa.a.aaaaa +?a...ar..baz +aa.araaa.aa. +!..a..ba....`,//22 - space + map` +o.q..q +...... +q...q. +eeee.j +il....`,//23 -planet + map ` +.r.gka!. +.aaaaaa. +.?a...a. +aaa.a.s. +....a... +.aaaaaa. +.a....a. +..saa.ac +.s.az.ab`,//24 - space + map` +j.jq.i +....lj +jq.... +....qj +jq.... +.j.j.j`,//25 -planet + map` +.i. +d.. +kaf`,//26 - space + map` +....l.i. +.joj.j.j +q...q... +j.j.j.j. +.q....q. +.j.joj.j +.q.....q +j.jqj.j.`,//27 -planet + map` +.....r.c. +.aaaaaaar +....sb.a! +.aaa.aaaa +..fa.akg. +.aaa.aaa. +.a?.sa... +.aaa...a. +..za..baf`,//28 - space + map` +.ji.lj... +...j..oj. +.j...j... +...j...j. +qj...j... +...j...j. +.j...j... +...j..ojq`,//29 -planet + map` +z..a......ab.b +aa.a.aaaa.a... +...a....a.r.af +s.aaa.a.aaaaaa +...r..a.a..... +.aaaaaa.a.aaas +.a..afa...afs. +raf.a.aaaaa..b +.ss......fa.aa +b..ab....ba..k`, //30 - space + map` +..i.... +....... +...l... +e.eeeee +....q.. +....... +.q.....`,//31 -planet + map` +..faf.r....a... +...aaaa..a.aaa. +fa.a.....a.a... +aara..aa.a...a. +...aa..aaaaaaa. +.a...ss..ba.s.. +.a.aaaaaaaa.saa +.afa....za...a. +.aaa.aaaaa.aaa. +.....a...a...a. +raaaaa.a..aa... +.a...a.aa....aa +ba.s...ra..aak. +aa.aaaa.araf... +c..r.faba.g...b`, //32 - space + map` +..o... +...q.. +q..... +eeeee. +q..... +.il.e. +....e.`, // 33 -planet + map` +.za...a....a..... +.ab.a.a.ba.a.baa. +....a....a.a.a... +aaaaaaaa.a.a.a.aa +...s...a.a...a... +..aaaa.aaaaaaa.a. +.af.ra.......a.a. +.aaa..raaaaa.aab. +...aaaaa?a.ss.... +sa....ab...aaaaa. +..aab.aaaaaa...a. +...a..a...a..as.b +aa.a.aa.a.a.aa... +...a....a.a..aaar +raaaaaaaa.aa.b... +.a.......r!a.ak.. +.b.aaaabaaaa.aaaa +fa...............`,//34 - space + map` +l...... +i...q.. +..o..q. +.....q. +....q.. +.....q. +..o..q. +....q..`, //35 -planet + map` +............ +............ +.....ccc.... +....c...c... +...c...ccc.. +...c..c..zc. +.ccc..c...c. +.ckc..c...c. +.ckc...ccc.. +.ckc.....c.. +.ccc.ccc.c.. +...c.c.c.c.. +...ccc.ccc..`,//36 - space +]; +const startScreen = [ + map` +...... +...... +...... +...... +......` +]; +const endScreen = [ + map` +...... +...... +...... +...... +......`, +]; + + + +//------------------- music and sounds ------------ + +const moveSound = tune` +142.85714285714286: A4^142.85714285714286, +4428.571428571428` +const crysSound = tune` +134.52914798206277: G5/134.52914798206277, +134.52914798206277: B5/134.52914798206277, +4035.874439461883` +const deathSound = tune` +192.30769230769232: F4^192.30769230769232, +192.30769230769232: G4^192.30769230769232, +192.30769230769232: F4^192.30769230769232, +192.30769230769232: E4^192.30769230769232, +192.30769230769232: D4^192.30769230769232, +5192.307692307692` +const gateOpenSound = tune` +163.9344262295082: E4-163.9344262295082, +163.9344262295082: E4-163.9344262295082, +163.9344262295082: C4-163.9344262295082, +4754.098360655738` +const nextLvSound = tune ` +176.47058823529412: D5^176.47058823529412, +176.47058823529412: E5^176.47058823529412, +176.47058823529412: F5^176.47058823529412, +176.47058823529412, +176.47058823529412: A5^176.47058823529412, +176.47058823529412: B5^176.47058823529412, +4588.235294117647` +const winSound = tune ` +156.25: B4~156.25 + C5^156.25, +156.25: C5~156.25 + D5^156.25, +156.25: E5~156.25 + F5^156.25, +156.25: C5~156.25 + D5^156.25, +156.25: D5~156.25 + E5^156.25, +156.25: C5^156.25 + B4~156.25, +4062.5` +const portalSound = tune` +909.0909090909091: C5~909.0909090909091, +28181.818181818184` +const cowSound = tune` +157.06806282722513: D4/157.06806282722513, +157.06806282722513: E4/157.06806282722513, +157.06806282722513: E4/157.06806282722513, +4554.973821989529` +//-------------------------------------------- +let shipPosX; +let shipPosY; +let alienPosX; +let alienPosY; +let hunger; +let crystals = 0; +let stepCount = 0; +let previousX = 0; +let previousY = 0; +let gateCoordinates = { x: 0, y: 0 }; +let shipSprite = getFirst(ship); +let cowsFinal = 0; +let cowsCurrent = 0; + +// ------------------------ functions ------------------------------------ + +function changeHoleWhenStepped (x, y, changedSprite) + { + if (x >= 0 && y >= 0) { + //check if tile that player is standing on contains sprite - crack + let crackRemove = getTile(x, y).find(sprite => sprite.type === crack); + if (crackRemove) { + crackRemove.remove(); + addSprite(x,y,changedSprite) + } + } + } +function playerDeath () + { + playTune(deathSound); + clearText(); + stepCount = 0; + previousX = 0; + previousY = 0; + crystals = 0; + hunger = 20; + cowsCurrent = 0; + setMap(levels[level]); + gateCoordinates = { x: 0, y: 0 }; + if(level%2 != 0) + { + addText("Lv:" + (level),{ + x:1, + y:1, + color: color`5`}) + let alienSprite = getFirst(alien); + alienPosX = alienSprite.x; + alienPosY = alienSprite.y; + } + if(level%2 == 0) + { + addText("Lv:" + (level),{ + x:1, + y:1, + color: color`8`}) + let shipSprite = getFirst(ship); + shipPosX = shipSprite.x; + shipPosY = shipSprite.y; + } + + } +function stepOnPortal () + { + const onBluePort = tilesWith(blWormhole, ship) + const onRedPort = tilesWith(rdWormhole, ship) + //console.log("red worm:", onRedPort.length) + if(onRedPort.length == 1) + { + //console.log("blue worm:", getFirst(blWormhole).x, getFirst(blWormhole).y) + playTune(portalSound); + getFirst(ship).x = getFirst(blWormhole).x; + getFirst(ship).y = getFirst(blWormhole).y; + } + //console.log("blue worm:", onBluePort.length) + if(onBluePort.length == 1) + { + //console.log("red worm:", getFirst(rdWormhole).x, getFirst(rdWormhole).y) + playTune(portalSound); + getFirst(ship).x = getFirst(rdWormhole).x; + getFirst(ship).y = getFirst(rdWormhole).y; + //console.log("ship's coordinates(x,y):", getFirst(ship).x, getFirst(ship).y) + } + } + +// -------------------- start screen ------------------------- +player = ship; +setMap(startScreen[0]) + setBackground("x"); +/*addText("Lv:" + (level),{ + x:1, + y:1, + color: color`8`})*/ +addText("Welcome! ", + { + x:6, + y:1, + color: color`6` + }) +addText( "Tip - press:", + { + x:4, + y:3, + color: color`6` + }) +addText( "i: collect\n crystals", + { + x:3, + y:5, + color: color`6` + }) +addText( "k: use\n crystal", + { + x:3, + y:8, + color: color`6` + }) +addText( "w,s,a,d: move", + { + x:3, + y:11, + color: color`6` + }) +addText( "\nj: Start playing!!\n (reset level)", + { + x:1, + y:12, + color: color`6` + }) + + +//--------------------after input------------------------- + +afterInput(() => { + +// -------------- level with alien ------------------ + if(level%2 != 0) + { + if (level>=7) + { + hunger--; + if( hunger < 10) + { + hunger = '0' + hunger; + } + addText( "Hunger:" + hunger, + { + x:0, + y:3, + color: color`6` + }) + if(hunger==0) + { + playerDeath(); + } + } + + let alienSprite = getFirst(alien); + previousX = alienPosX; + previousY = alienPosY; + alienPosX = alienSprite.x; + alienPosY = alienSprite.y; + stepCount += 1; + if (alienPosX >= 0 && alienPosY >= 0) { + //check if tile that alien is standing on contains sprite - cow + let cowToRemove = getTile(alienPosX, alienPosY).find(sprite => sprite.type === cow); + if (cowToRemove) { + cowToRemove.remove(); + playTune(cowSound); + cowsCurrent += 1; + console.log("Cows this Lv:" , cowsCurrent); + console.log("Cows fin:" , cowsFinal); + } + let appleToRemove = getTile(alienPosX, alienPosY).find(sprite => sprite.type === apple); + if (appleToRemove) { + appleToRemove.remove(); + hunger=20; + } + } + addText( "Cows:" + cowsCurrent, + { + x:13, + y:1, + color: color`5` + }) + const howMuchCows = tilesWith(cow) + if(howMuchCows == 0) + { + const onShip = tilesWith(shipGoal, alien) + if ( onShip.length >= 1){ + level +=1; + if (level < levels.length) { + playTune(nextLvSound); + setMap(levels[level]); + setBackground("x"); + cowsFinal += cowsCurrent; + cowsCurrent = 0; + stepCount = 0; + clearText(); + addText("Lv:" + (level),{ + x:1, + y:1, + color: color`8`}) + //reset the gate coordinates after changing map + gateCoordinates = { x: 0, y: 0 }; + } + } + } + } + const onHouse = tilesWith(alien, house) + if(onHouse.length ==1) + { + playerDeath(); + } + // ------------------------------ win!!!!! -------------- + + + + +// --------------------------- level with ship --------------------------- + if(level%2 == 0) + { + //console.log("ship's prev coordinates(x,y):", previousX, previousY); + +///----------------ship position --------------------- + let shipSprite = getFirst(ship); + previousX = shipPosX; + previousY = shipPosY; + shipPosX = shipSprite.x; + shipPosY = shipSprite.y; + //console.log("ship's coordinates(x,y):", shipPosX, shipPosY); + stepCount += 1; + +// ----------------change crack to spaceRip and damage handling ------------ + + changeHoleWhenStepped (previousX,previousY,spacerip); + const onRip = tilesWith(ship, spacerip) + if(onRip.length ==1) + { + playerDeath(); + } + +// ------------------------- wormholes!!!!!!!!!!!!----------- + +stepOnPortal(); + +//------------------ collecting the crystal --------------- + if (level==13) + { + addText( "Choose the real one", + { + x:1, + y:4, + color: color`7` + }) + } + if (shipPosX >= 0 && shipPosY >= 0) { + //check if tile that ship is standing on contains sprite - crystal + let spriteToRemove = getTile(shipPosX, shipPosY).find(sprite => sprite.type === crystal); + if (spriteToRemove) { + onInput("i", () => { + playTune(crysSound); + spriteToRemove.remove(); + if(level==8){ + let arrowRemove = getFirst(arrowPointDown); + arrowRemove.remove(); + } + crystals += 1; + console.log("Crystals:" , crystals); + + }) + } + } + +// --------------------- opening the gate with crystal ----------------------- + if(crystals > 0 && level!=18) + { + //get coords of the first gate visible on map + let gateSprite = getAll("g")[0]; + //new coordinates + gateCoordinates.x = gateSprite.x; + gateCoordinates.y = gateSprite.y; + //calculate the distance + let gateDisX = Math.abs(gateSprite.x - shipPosX); + let gateDisY = Math.abs(gateSprite.y - shipPosY); + console.log("ship - gate coordinates(x,y):", gateDisX, gateDisY); + //check if ship is standing next to the gate + if(gateDisX <= 1 && gateDisY <=1 ){ + //check if coordinates are only for this map + if (gateSprite.x === gateCoordinates.x && gateSprite.y === gateCoordinates.y) { + onInput("k", () => { + playTune(gateOpenSound); + //use new coordinates and clear tile with the gate + clearTile(gateCoordinates.x, gateCoordinates.y); + crystals = 0; + console.log("Crystals:", crystals); + }) + } + } + } + + + //--------------------------Lv 3 - step counter------------------------------ + + if(level==12 || level==14 || level==34) + { + let maxSteps = 100 + if (level==14){ maxSteps = 41} + if (level==12){ maxSteps = 5} + if (level==34){ maxSteps = 133} + let remainingSteps = maxSteps - stepCount; + if( remainingSteps < 10) + { + remainingSteps = '0' + remainingSteps; + } + addText("Steps left:" + remainingSteps, { y: 4, color: color`4` }); + console.log("steps left:" + (maxSteps - stepCount)); + if( stepCount > maxSteps ) + { + playerDeath(); + } + } + +//------------------------------------------------------------ + const onFake = tilesWith(ship, fakePlanet) + if(onFake.length ==1) + { + playerDeath(); + } + + //checking if ship stepped on a black hole, then restarting the level + + const onBlackHole = tilesWith(ship, blackhole) + if(onBlackHole.length ==1) + { + playerDeath(); + } + + // check if stepped on a planet - then win screen or proceed to the next level + const onPlanet = tilesWith(ship, planet) + if ( onPlanet.length >= 1){ + level +=1; + if (level < levels.length) { + playTune(nextLvSound); + setMap(levels[level]); + setBackground("h"); + stepCount = 0; + clearText(); + addText("Lv:" + (level),{ + x:0, + y:1, + color: color`5`}) + //reset the gate coordinates after changing map + gateCoordinates = { x: 0, y: 0 }; + } + else { + playTune(winSound); + clearText(); + setMap(endScreen[0]); + addText("You win!\n", { y: 3, color: color`6` }); + addText("Abducted: " + cowsFinal + " cows", {y:5, color: color`8`}); + addText("Thanks for playing!", { y: 8, color: color`6` }); + addText("Made by: klumey", {y:10, color: color`6` }); + } + } + } +}) diff --git a/games/space_adventures.js b/games/space_adventures.js index 9f9fd42e48..c2e7a24b0f 100644 --- a/games/space_adventures.js +++ b/games/space_adventures.js @@ -1,7 +1,7 @@ /* @title: Space Adventures @author: Shreyas Jain -@tags: ['platformer', 'space'] +@tags: ['platformer'] @addedOn: 2024-06-25 */ diff --git a/games/space_game.js b/games/space_game.js index 90cd876c6f..6123061f1f 100644 --- a/games/space_game.js +++ b/games/space_game.js @@ -1,4 +1,8 @@ /* +@title: Space Game +@author: Abhimanyu Chaudhary +@tags: [] +@addedOn: 2024-08-13 Sprig Space Game: Press a and d to move the spaceship left and right to avoid the missiles! @@ -12,10 +16,6 @@ Buttons: - k: Disable difficult mode and enable helipads. - w: Restart the game once you inevitably hit a missile. -@title: Space Game -@author: Abhimanyu Chaudhary -@tags: [] -@addedOn: 2024-08-13 */ const player = "p" diff --git a/games/space_shooter.js b/games/space_shooter.js index 0510af8d23..7971b81d83 100644 --- a/games/space_shooter.js +++ b/games/space_shooter.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Space Shooter @author: valeriuv @tags: [] @addedOn: 2024-07-26 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/speedy_snake.js b/games/speedy_snake.js index 41dc024191..f809f2fcb0 100644 --- a/games/speedy_snake.js +++ b/games/speedy_snake.js @@ -1,8 +1,8 @@ /* @title: speedy_snake +@author: ItsAStarryKnight @tags: ['endless'] @addedOn: 2022-11-11 -@author: ItsAStarryKnight */ //Classic snake game with a twist! diff --git a/games/spiano.js b/games/spiano.js index ff2761db0c..88b8260793 100644 --- a/games/spiano.js +++ b/games/spiano.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: spiano @author: thezebix -@tags: ["music"] +@tags: ['music'] @addedOn: 2024-04-19 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const unpressedKey = "u" diff --git a/games/spider_home.js b/games/spider_home.js index a9d4cf32e8..aa68afe79e 100644 --- a/games/spider_home.js +++ b/games/spider_home.js @@ -1,8 +1,8 @@ /* @title: spider_home -@tags: ['sokoban-style'] -@addedOn: 2023-10-09 @author: usermaatre setepenre +@tags: ['puzzle'] +@addedOn: 2023-10-09 */ // define the sprites in our game diff --git a/games/spirit-bound.js b/games/spirit-bound.js index 773ea4c5b8..e8bc96f8c3 100644 --- a/games/spirit-bound.js +++ b/games/spirit-bound.js @@ -2,7 +2,7 @@ /* @title: spirit-bound @author: Tom-on -@tags: ['dungeon'] +@tags: ['adventure'] @addedOn: 2023-08-31 */ diff --git a/games/spongebob_squaremaze.js b/games/spongebob_squaremaze.js index e5035fd6fc..2d1fda9cfc 100644 --- a/games/spongebob_squaremaze.js +++ b/games/spongebob_squaremaze.js @@ -1,8 +1,8 @@ /* @title: spongebob_squaremaze -@tags: ['maze'] -@addedOn: 2023-01-26 @author: Jainam_Jain +@tags: ['puzzle'] +@addedOn: 2023-01-26 Instructions: diff --git a/games/spriGO.js b/games/spriGO.js index 288acb5653..128fe41879 100644 --- a/games/spriGO.js +++ b/games/spriGO.js @@ -1,7 +1,7 @@ /* @title: spriGO @author: InfinityCity18 -@tags: ['multiplayer', 'strategy', 'go', 'baduk'] +@tags: ['strategy','multiplayer'] @addedOn: 2024-08-12 */ diff --git a/games/sprig-edit.js b/games/sprig-edit.js index 625655e337..6d0de4092b 100644 --- a/games/sprig-edit.js +++ b/games/sprig-edit.js @@ -2,8 +2,8 @@ @title: Sprig-Edit @author: Colack @tags: ['utility'] -@img: "" @addedOn: 2024-05-22 +@img: "" This is Sprig-Edit, a basic text editor for Sprig. diff --git a/games/sprig_clicker.js b/games/sprig_clicker.js index ef8a3444b5..3b517dcd99 100644 --- a/games/sprig_clicker.js +++ b/games/sprig_clicker.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Sprig Clicker @author: xriiitox (Josh Baron) @tags: ['endless'] @addedOn: 2024-06-29 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/sprig_dash.js b/games/sprig_dash.js index 3c6e7372b5..76ed299d1e 100644 --- a/games/sprig_dash.js +++ b/games/sprig_dash.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Sprig Dash @author: akshatk-khurana @tags: [] @addedOn: 2024-08-05 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p"; diff --git a/games/sprig_dodge.js b/games/sprig_dodge.js index b8937d3a79..cea313bb39 100644 --- a/games/sprig_dodge.js +++ b/games/sprig_dodge.js @@ -1,8 +1,8 @@ /* @title: sprig_dodging -@tags: ['beginner', 'tutorial'] -@addedOn: 2022-12-15 @author: sam liu and lucas +@tags: ['tutorial'] +@addedOn: 2022-12-15 */ // define the sprites in our game diff --git a/games/sprig_machine.js b/games/sprig_machine.js index ae178de8ec..5d8d22ac18 100644 --- a/games/sprig_machine.js +++ b/games/sprig_machine.js @@ -1,8 +1,8 @@ /* @title: Sprig Machine +@author: Leonard (Omay) @tags: ['sandbox'] @addedOn: 2022-10-21 -@author: Leonard (Omay) WASD to move selection I: select diff --git a/games/sprig_shoot.js b/games/sprig_shoot.js index f7aadccfb9..9efec73e96 100644 --- a/games/sprig_shoot.js +++ b/games/sprig_shoot.js @@ -1,8 +1,8 @@ /* @title: sprig_shoot +@author: Holden L @tags: ['endless'] @addedOn: 2023-02-11 -@author: Holden L */ /* diff --git a/games/sprigadventure.js b/games/sprigadventure.js index 7a539cb5ae..93d375867d 100644 --- a/games/sprigadventure.js +++ b/games/sprigadventure.js @@ -1,8 +1,8 @@ /* @title: sprig adventure -@tags: ['advanced'] -@addedOn: 2022-12-23 @author: stormypluto3865 +@tags: [] +@addedOn: 2022-12-23 hi! diff --git a/games/spriggy_morse.js b/games/spriggy_morse.js index fb5ed82cd1..43f6e2a44d 100644 --- a/games/spriggy_morse.js +++ b/games/spriggy_morse.js @@ -1,8 +1,8 @@ /* @title: spriggy_morse +@author: Srishti Pandey @tags: [] @addedOn: 2023-01-29 -@author: Srishti Pandey */ const dot = "d"; diff --git a/games/spriggymon.js b/games/spriggymon.js index e2dec2fc3d..356d71180f 100644 --- a/games/spriggymon.js +++ b/games/spriggymon.js @@ -1,8 +1,8 @@ /* @title: spriggymon -@tags: ['Sprig Lover Forever'] -@addedOn: 2022-11-15 @author: spriglover69 +@tags: [] +@addedOn: 2022-11-15 full source: https://github.com/spriglover69/spriggymon */ diff --git a/games/sprigish.js b/games/sprigish.js index 2964143e54..c232d3968a 100644 --- a/games/sprigish.js +++ b/games/sprigish.js @@ -1,7 +1,7 @@ /* @title: sprigish @author: dom -@tags: ["puzzle"] +@tags: ['puzzle'] @addedOn: 2024-01-16 A Sprig recreaction(ish) of Dadish. diff --git a/games/sprigle.js b/games/sprigle.js index 82934e2ace..47afbdbc64 100644 --- a/games/sprigle.js +++ b/games/sprigle.js @@ -1,8 +1,8 @@ /* @title: sprigle -@tags: ['classic', 'advanced'] -@addedOn: 2022-11-19 @author: jedgrei +@tags: ['retro'] +@addedOn: 2022-11-19 */ const valid_answer = [ diff --git a/games/sprigmusicstreaming.js b/games/sprigmusicstreaming.js index bf33e4f3cd..9e3b4d5f42 100644 --- a/games/sprigmusicstreaming.js +++ b/games/sprigmusicstreaming.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Sprig Music Streaming @author: jesse563 @tags: [] @addedOn: 2024-06-24 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const cursor = "c" diff --git a/games/sprigorous-vigor.js b/games/sprigorous-vigor.js index fa35488f2a..acfcc5188a 100644 --- a/games/sprigorous-vigor.js +++ b/games/sprigorous-vigor.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Sprigorous Vigor @author: boston2029 @tags: [] @addedOn: 2024-07-27 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/spring.js b/games/spring.js index 1a211ee93f..ad5ee67395 100644 --- a/games/spring.js +++ b/games/spring.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Spring -@author: TechPandaPro +@author: TechPandaPro @tags: [] @addedOn: 2024-08-15 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/sprock_blast.js b/games/sprock_blast.js new file mode 100644 index 0000000000..05f4277357 --- /dev/null +++ b/games/sprock_blast.js @@ -0,0 +1,977 @@ +/* +@title: Sprock Blast +@author: cayleb247 +@tags: ['puzzle', 'retro'] +@addedOn: 2024-10-03 +*/ + +/* +CONTROLS: +W - Move cursor up +S - Move cursor down +A - Move block one position to the left +D - Move Block one position to the right +J - Selected a block | Place a block +L - Cancel block selection +I - Restart game (at game over) + + +Glossary for comments: +Brick - An individual bitmap of a brick; makes up blocks +Blocks - A block made of bricks with a unique shape (L, T, Square, etc.) +Tile - A 3x3 sized space within the board +Position - A tile on the board that is able for a block to be placed within +*/ + +const player = "p" +let blockSelection = [] +let blockPreviewStatus = 0; // Status of whether block outline is within the board +let blockPosition = 0; // Index of a current shown block position +let tileList = [] // List of the every single 3x3 tile's configuration on the board +let positionList = []; // Indexes of every position that the block can be on the board +let blockSelectionIndexes = []; // List of every index of the selected block that a brick present +let currentPositionIndex = 0; +let blockChoice = 0; // The block out of the three offered that the player selects +let availableBlocks = []; // List of every block left (starting from top; 1 through 3) +let score = 0; // Player's score +let combo = 0; // Default value for combos +let gameStatus = 1; // Whether the game is active or not + +// Block Indexes +const blockCombos = [ + [0,3,4,7], // s + [4,5,6,7], // s2 + [1,3,4,6], // sInv + [3,4,7,8], // sInv2 + [0,3,6,7], // L + [3,4,5,6], // L2 + [0,1,4,7], // L3 + [5,6,7,8], // L4 + [1,4,6,7], // lInv + [3,6,7,8], // lInv2 + [0,1,3,6], // lInv3 + [3,4,5,8], // lInv4 + [0,1,2,3,6], // bigL + [0,1,2,5,8], // bigL2 + [2,5,6,7,8], // bigL3 + [0,3,6,7,8], // bigL4 + [3,6,7], // smallL + [3,4,6], // smallL2 + [3,4,7], // smallL3 + [4,6,7], // smallL4 + [6], // dot + [3,6], // line + [6,7], // line2 + [0,3,6], // bigLine + [6,7,8], // bigLine2 + [1,3,4,7], // t + [4,6,7,8], // t2 + [0,3,4,6], // t3 + [3,4,5,7], // t4 + [0,1,2,4,7], // bigT + [2,3,4,5,8], // bigT2 + [1,4,6,7,8], // bigT3 + [0,3,4,5,6], // bigT4 + [0,1,3,4,6,7], // rect + [3,4,5,6,7,8], // rect2 + [3,4,6,7], // cube + [0,1,2,3,4,5,6,7,8], // bigcube + [1,3,4,5,7] // plus +] + +// Block Colors +const blockColors = [ + "1", // pink + "2", // yellow + "3", // red + "4", // blue + "5", // green + "6" // orange +] + + +// Board +const background = "x" +const board_top_left_corner = "a" +const board_top_middle = "b" +const board_top_right_corner = "c" +const board_right_middle = "d" +const board_bottom_right_corner = "e" +const board_bottom_middle = "f" +const board_bottom_left_corner = "g" +const board_left_middle = "h" + +// Block Pieces: +const block1 = "1" +const block2 = "2" +const block3 = "3" +const block4 = "4" +const block5 = "5" +const block6 = "6" + +// Misc Sprites: +const selection = "s" +const brickDivideLeft = "v" +const brickDivideCenter = "y" +const brickDivideRight = "z" + + +// Functions: + +function getTileValue(x, y) { // Get the information for a select 3x3 tile + let tileData = []; // List for every brick in a 3x3 tile + x += 2; // To adjust x value to start at right value during first iteration + y -= 1; + for (let i=0;i<3;i++) { + x -= 3; // Reset x coordinate every shift down in y + y += 1; + for (let i=0;i<3;i++) { + x += 1; + tileData.push(getTile(x,y)); + } + } + return tileData; +} + + + +function getTileList() { // Get information on every 3x3 tile on board + tileList = []; + for (let y=1;y<=8;y++) { + for (let x=1;x<=8;x++) { + tileList.push(getTileValue(x,y)); + } + } +} + + +function makePositionList() { // Iterate through every postion and check if space is available + + positionList = []; // Begin with an empty list of positions + + for (let i=0;i<=63;i++) { + let isPlaceable = 1; + for (const index of blockSelectionIndexes) { + if (tileList[i][index].length == 0) { + isPlaceable = 0; + break; + } else if (tileList[i][index][0]["_type"] !== "x") { + isPlaceable = 0; + break; + } + + } + if (isPlaceable === 1) { + positionList.push(i); + } + } + + if (positionList.length == 0) { // Condition to end the game + endGame(); + } +} + +function getSelectedBlockIndexes() { + + for (let i=0;i<=8;i++) { // Get block selection's indexes + if (blockSelection[i].length !== 0) { + blockSelectionIndexes.push(i) + } + } +} + +function displayPosition(positionIndex) { // Display selection for a select postion on position list + + if (gameStatus == 1) { // Seems redundant but prevents a type error when the game ends + let currentPosition = tileList[positionIndex]; + + for (const blockIndex of blockSelectionIndexes) { + + addSprite(currentPosition[blockIndex][0]["_x"], currentPosition[blockIndex][0]["_y"], "s"); + } + + } + + +} + +function removeDisplayPosition(positionIndex) { // Remove selection for a select postion on position list + let currentPosition = tileList[positionIndex]; + + for (const blockIndex of blockSelectionIndexes) { + + clearTile(currentPosition[blockIndex][0]["_x"], currentPosition[blockIndex][0]["_y"]); + addSprite(currentPosition[blockIndex][0]["_x"], currentPosition[blockIndex][0]["_y"], "x") + } + +} + +function placeBlock(positionIndex) { // Places a block given an index for the position on the board + let currentPosition = tileList[positionIndex]; // Declares current position given the position index + + for (const blockIndex of blockSelectionIndexes) { // Add corresponding colored bricks + + addSprite(currentPosition[blockIndex][0]["_x"], currentPosition[blockIndex][0]["_y"], blockSelection[blockSelectionIndexes[0]][0]["_type"]); + } +} + +function clearBlockChoice(block_number) { + if (block_number == 1) { + + for (let y=1;y<=3;y++) { + for (let x=12;x<=14;x++) { + clearTile(x,y); + } + } + + } else if (block_number == 2) { + for (let y=5;y<=7;y++) { + for (let x=12;x<=14;x++) { + clearTile(x,y); + } + } + + + } else if (block_number == 3) { + + for (let y=9;y<=11;y++) { + for (let x=12;x<=14;x++) { + clearTile(x,y); + + } + } + + } +} + +function getRandomInt(max) { // Returns a random number between 0 and the max (not including the max) + return Math.floor(Math.random()*max); +} + + +function newBlocks() { // Generates a new set of three blocks + if (availableBlocks.length == 0) { + + + let threeBlockCoords = [ + [[12,1], [13,1], [14,1], [12,2], [13,2], [14,2], [12,3], [13,3], [14,3]], + [[12,5], [13,5], [14,5], [12,6], [13,6], [14,6], [12,7], [13,7], [14,7]], + [[12,9], [13,9], [14,9], [12,10], [13,10], [14,10], [12,11], [13,11], [14,11]] + ]; + + let selectedBlocks = []; // A list of three random blocks + let selectedColors = []; // A list of three random colors + + for (let i=1; i<=3; i++) { + selectedBlocks.push(blockCombos[getRandomInt(blockCombos.length)]); + + selectedColors.push(blockColors[getRandomInt(blockColors.length)]); + } + + for (let i=0;i<=2;i++) { + let block = selectedBlocks[i]; // Iterate through each block and color + let color = selectedColors[i]; + let coords = threeBlockCoords[i] + + for (const blockIndex of block) { + addSprite(coords[blockIndex][0], coords[blockIndex][1], color); + } + } + + availableBlocks = [1,2,3]; + } + +} + +function getRows() { + let rows = []; + let currentRow = []; + for (let y=3;y<=10;y++) { + currentRow = []; + for (let x=1;x<=8;x++) { + currentRow.push(getTile(x,y)); + } + rows.push(currentRow); + } + return rows; + +} + +function getColumns() { + let columns = []; + let currentColumn = []; + for (let x=1;x<=8;x++) { + currentColumn = []; + for (let y=3;y<=10;y++) { + currentColumn.push(getTile(x,y)); + } + columns.push(currentColumn); + } + return columns; +} + +function blockClear() { + + let rowsList = getRows(); // Get list of very row + let columnsList = getColumns(); // Get list of very column + + let rowsToClear = []; // List of every full row + let columnsToClear = []; // List of every full column + + for (const row of rowsList) { // Push index of every full row (0-7) + let currentRow = []; + for (let i=0;i<=7;i++) { + if (row[i].length == 2) { + currentRow.push(i); + } + } + if (currentRow.length == 8) { + rowsToClear.push(rowsList.indexOf(row)); + } + } + for (const column of columnsList) { // Push index of every full column (0-7) + let currentColumn = []; + for (let i=0;i<=7;i++) { + if (column[i].length == 2) { + currentColumn.push(i); + } + } + if (currentColumn.length == 8) { + columnsToClear.push(columnsList.indexOf(column)); + } + } + + if (rowsToClear.length != 0 && columnsToClear.length != 0) { // Scoring if both a row and column is cleared + for (const rowIndex of rowsToClear) { + score += 10; // Add 10 for a row complete + for (const removedBrick of rowsList[rowIndex]) { + clearTile(removedBrick[0]["_x"], removedBrick[0]["_y"]); + addSprite(removedBrick[0]["_x"], removedBrick[0]["_y"], "x"); + } + } + for (const colIndex of columnsToClear) { + score += 10; // Add 10 for a column complete + for (const removedBrick of columnsList[colIndex]) { + clearTile(removedBrick[0]["_x"], removedBrick[0]["_y"]); + addSprite(removedBrick[0]["_x"], removedBrick[0]["_y"], "x"); + } + } + score += combo * 10; // Add combo score + combo += 1; // Level up combo + } else if (rowsToClear.length != 0) { // Scoring if a row is cleared + for (const rowIndex of rowsToClear) { + score += 10; + for (const removedBrick of rowsList[rowIndex]) { + clearTile(removedBrick[0]["_x"], removedBrick[0]["_y"]); + addSprite(removedBrick[0]["_x"], removedBrick[0]["_y"], "x"); + } + } + score += combo * 10; + combo += 1; + } else if (columnsToClear.length != 0) { // Scoring if a column is cleared + for (const colIndex of columnsToClear) { + score += 10; + for (const removedBrick of columnsList[colIndex]) { + clearTile(removedBrick[0]["_x"], removedBrick[0]["_y"]); + addSprite(removedBrick[0]["_x"], removedBrick[0]["_y"], "x"); + } + } + score += combo * 10; + combo += 1; + } else { + combo = 0; // Combo resets if no rows or columns are cleared + } + + + clearText(); // Remove previous score + + addText("SCORE:" + score, { + x: 1, + y: 1, + color: color`2` + }) +} + +function endGame() { + gameStatus = 0; + setMap(levels[1]); + clearText(); + addText("GAME OVER!", { + x: 5, + y: 6, + color: color`2` + + }) + addText("Score:", { + x: 2, + y: 8, + color: color`2` + + }) + addText(score.toString(), { + x: 8, + y: 8, + color: color`2` + + }) + addText("Play again? ", { + x: 2, + y: 12, + color: color`2` + + }) +} + +function restartGame() { + gameStatus = 1; // Replay the game + + blockPreviewStatus = 0; + + setMap(levels[0]); + + clearText(); + + score = 0; + + availableBlocks = []; + + addText("SCORE:" + score, { + x: 1, + y: 1, + color: color`2` + }) + + newBlocks(); +} + + +setLegend( + [ selection, bitmap` +..22..22..22..22 +..22..22..22..22 +22..22..22..22.. +22..22..22..22.. +..22..22..22..22 +..22..22..22..22 +22..22..22..22.. +22..22..22..22.. +..22..22..22..22 +..22..22..22..22 +22..22..22..22.. +22..22..22..22.. +..22..22..22..22 +..22..22..22..22 +22..22..22..22.. +22..22..22..22..`], + [ player, bitmap` +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222 +2222222222222222`], + [ board_top_left_corner, bitmap` +22LLLLLLLLLLLLLL +222LLLLLLLLLLLLL +L221111111111111 +LL12111111111111 +LL11LLLLLLLLLLLL +LL11LLLLLLLLLLLL +LL11LLL111111111 +LL11LL1111111111 +LL11LL1111111111 +LL11LL1111111111 +LL11LL1111111111 +LL11LL111111LLLL +LL11LL11111LLLLL +LL11LL11111LLLLL +LL11LL11111LLL11 +LL11LL11111LLL11`], + [ board_top_middle, bitmap` +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +1111111111111111 +1111111111111111 +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +1111111111111111 +1111111111111111`], + [ board_top_right_corner, bitmap` +LLLLLLLLLLLLLL22 +LLLLLLLLLLLLL222 +111111111111122L +11111111111121LL +LLLLLLLLLLLL11LL +LLLLLLLLLLLL11LL +111111111LLL11LL +1111111111LL11LL +1111111111LL11LL +1111111111LL11LL +1111111111LL11LL +LLLL111111LL11LL +LLLLL11111LL11LL +LLLLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL`], + [ board_right_middle, bitmap` +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL +11LLL11111LL11LL`], + [ board_bottom_right_corner,bitmap` +11LLL11111LL11LL +11LLL11111LL11LL +LLLLL11111LL11LL +LLLLL11111LL11LL +LLLL111111LL11LL +1111111111LL11LL +1111111111LL11LL +1111111111LL11LL +1111111111LL11LL +111111111LLL11LL +LLLLLLLLLLLL11LL +LLLLLLLLLLLL11LL +11111111111121LL +111111111111122L +LLLLLLLLLLLLL222 +LLLLLLLLLLLLLL22`], + [ board_bottom_middle, bitmap` +1111111111111111 +1111111111111111 +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL +1111111111111111 +1111111111111111 +LLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLL`], + [ board_bottom_left_corner, bitmap` +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLLLL +LL11LL11111LLLLL +LL11LL111111LLLL +LL11LL1111111111 +LL11LL1111111111 +LL11LL1111111111 +LL11LL1111111111 +LL11LLL111111111 +LL11LLLLLLLLLLLL +LL11LLLLLLLLLLLL +LL12111111111111 +L221111111111111 +222LLLLLLLLLLLLL +22LLLLLLLLLLLLLL`], + [ board_left_middle, bitmap` +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11 +LL11LL11111LLL11`], + [ block1, bitmap` +22222222HHHHHHHH +228888888888888H +282888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H88888888888888H +H888888888888282 +H888888888888822 +HHHHHHHHH2222222`], + [ block2, bitmap` +22222FFFFFFFFFFF +226666666666666F +262666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F66666666666666F +F666666666666262 +F666666666666622 +FFFFFFFFFFF22222`], + [ block3, bitmap` +22222CCCCCCCCCCC +223333333333333C +232333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C33333333333333C +C333333333333232 +C333333333333322 +CCCCCCCCCCC22222`], + [ block4, bitmap` +2222255555555555 +2277777777777775 +2727777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777775 +5777777777777272 +5777777777777722 +5555555555522222`], + [ block5, bitmap` +22222DDDDDDDDDDD +224444444444444D +242444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D44444444444444D +D444444444444242 +D444444444444422 +DDDDDDDDDDD22222`], + [ block6, bitmap` +22222CCCCCCCCCCC +229999999999999C +292999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C99999999999999C +C999999999999292 +C999999999999922 +CCCCCCCCCCC22222`], + [ brickDivideLeft, bitmap` +................ +................ +................ +................ +................ +..LLLLLLLLLLLLLL +.L21111111111111 +L221111111111111 +L111111111111111 +.L11111111111111 +..LLLLLLLLLLLLLL +................ +................ +................ +................ +................`], + [ brickDivideCenter, bitmap` +................ +................ +................ +................ +................ +LLLLLLLLLLLLLLLL +1111111111111111 +1111111111111111 +1111111111111111 +1111111111111111 +LLLLLLLLLLLLLLLL +................ +................ +................ +................ +................`], + [ brickDivideRight, bitmap` +................ +................ +................ +................ +................ +LLLLLLLLLLLLLL.. +11111111111111L. +111111111111111L +111111111111111L +11111111111111L. +LLLLLLLLLLLLLL.. +................ +................ +................ +................ +................`], + [ background, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + + +) + +setBackground("x") + +const levels = [ + map` +............... +............... +abbbbbbbbcp.... +hxxxxxxxxd..... +hxxxxxxxxd..vyz +hxxxxxxxxd..... +hxxxxxxxxd..... +hxxxxxxxxd..... +hxxxxxxxxd..vyz +hxxxxxxxxd..... +hxxxxxxxxd..... +gffffffffe.....`, + map` +abbbbbbbbbbbbbc +h.............d +h.............d +h.............d +h.............d +h.............d +h.............d +h.............d +h.............d +h.............d +h.............d +gfffffffffffffe` +] + +setMap(levels[0]) + +addText("SCORE:" + score, { + x: 1, + y: 1, + color: color`2` +}) + +newBlocks(); // Begin with new blocks + +onInput("d", () => { // Move the displayed position one position to the left + if (gameStatus == 1) { + if (blockPreviewStatus == 1) { + removeDisplayPosition(positionList[currentPositionIndex]); // Remove the current displayed position + currentPositionIndex += 1; // Move to next position + if (currentPositionIndex > positionList.length - 1) { // Check if position index is out of range, reset if so + currentPositionIndex = 0; + } + displayPosition(positionList[currentPositionIndex]); // Display the new position + } + } + + +}) + +onInput("a", () => { // Move the displayed position one position to the left + if (gameStatus == 1) { + if (blockPreviewStatus == 1) { + removeDisplayPosition(positionList[currentPositionIndex]); + currentPositionIndex -= 1; + if (currentPositionIndex < 0) { // Check if position index is out of range + currentPositionIndex = positionList.length - 1; + } + displayPosition(positionList[currentPositionIndex]); + } + } + +}) + + +onInput("s", () => { + if (blockPreviewStatus == 0) { + getFirst(player).y += 4 + } + + +}) + +onInput("w", () => { + if (blockPreviewStatus == 0) { + getFirst(player).y -= 4 + } + +}) + +onInput("j", () => { + + if (gameStatus == 1) { + + if (blockPreviewStatus == 0) { + + blockSelectionIndexes = []; // Clear prior selection indexes when new block is chosen + + currentPositionIndex = 0; // Begin position indexes at 0 + + blockSelection = []; // Clear prior block selection when new block is chosen + + getTileList(); // Get list of every tile on board + + if (getFirst(player).y < 4 && availableBlocks.includes(1)) { + blockChoice = 1; // First block was selected + blockPreviewStatus = 1; + for (let y=1;y<=3;y++) { + for (let x=12;x<=14;x++) { + blockSelection.push(getTile(x,y)); + + } + } + getSelectedBlockIndexes(); + makePositionList(); + displayPosition(positionList[currentPositionIndex]); + + + + } else if (getFirst(player).y < 8 && getFirst(player).y > 4 && availableBlocks.includes(2)) { + blockChoice = 2; // Second block was selected + blockPreviewStatus = 1; + for (let y=5;y<=7;y++) { + for (let x=12;x<=14;x++) { + blockSelection.push(getTile(x,y)); + + } + } + + getSelectedBlockIndexes(); + makePositionList(); + displayPosition(positionList[currentPositionIndex]); + + + + } else if (getFirst(player).y > 8 &&availableBlocks.includes(3)) { + blockChoice = 3; // Third block was selected + blockPreviewStatus = 1; + for (let y=9;y<=11;y++) { + for (let x=12;x<=14;x++) { + blockSelection.push(getTile(x,y)); + + } + } + + getSelectedBlockIndexes(); + makePositionList(); + displayPosition(positionList[currentPositionIndex]); + + + + } + + + } else if (blockPreviewStatus == 1) { // If "j" is pressed when block preview is active + + availableBlocks.splice(availableBlocks.indexOf(blockChoice), 1); // Remove block from list of available blocks + + removeDisplayPosition(positionList[currentPositionIndex]); // Remove the displayed position + + placeBlock(positionList[currentPositionIndex]); // Place selected block + + blockPreviewStatus = 0; // Turn off block preview + + clearBlockChoice(blockChoice); // Delete placed block in viewer + + score += blockSelectionIndexes.length // Add the value of the block to the score + + newBlocks(); // Generate new blocks + + blockClear(); // Clear completed rows and columns + + } + + } + +}) + + +onInput("l", () => { + blockPreviewStatus = 0; + removeDisplayPosition(positionList[currentPositionIndex]); +}) + +onInput("i", () => { + if (gameStatus == 0) { + restartGame(); // "i" restarts the game + } +}) diff --git a/games/spropper.js b/games/spropper.js index 07349f13fe..a2f30d2949 100644 --- a/games/spropper.js +++ b/games/spropper.js @@ -1,9 +1,9 @@ /* - @title: spropper @author: bea @tags: [] @addedOn: 2024-08-21 + */ /* diff --git a/games/squarey_runs_away_from_the_fireball.js b/games/squarey_runs_away_from_the_fireball.js index e7df928ab9..1dddf9b649 100644 --- a/games/squarey_runs_away_from_the_fireball.js +++ b/games/squarey_runs_away_from_the_fireball.js @@ -1,8 +1,8 @@ /* @title: squarey_runs_away_from_the_fireball +@author: jack_mole_and_sam_poder @tags: ['multiplayer'] @addedOn: 2023-01-28 -@author: jack_mole_and_sam_poder */ const player = "p"; diff --git a/games/starjump.js b/games/starjump.js index 63f44c5c51..29f8aae392 100644 --- a/games/starjump.js +++ b/games/starjump.js @@ -1,8 +1,8 @@ /* @title: Starjump -@tags: ['sokoban-style'] -@addedOn: 2023-12-21 @author: skifli +@tags: ['puzzle'] +@addedOn: 2023-12-21 Instructions: diff --git a/games/stopwatch.js b/games/stopwatch.js index 1bd2ce954d..be1115e28f 100644 --- a/games/stopwatch.js +++ b/games/stopwatch.js @@ -1,8 +1,8 @@ /* @title: Stopwatch -@tags: ['utility', 'clock', 'timekeeping'] -@addedOn: 2024-06-26 @author: DominantDuck +@tags: ['utility','timed'] +@addedOn: 2024-06-26 */ let startTime = 0; let elapsedTime = 0; diff --git a/games/subway surfers.js b/games/subway surfers.js new file mode 100644 index 0000000000..cbdcf783a1 --- /dev/null +++ b/games/subway surfers.js @@ -0,0 +1,157 @@ +/* +@title: subway surfers +@author: AKKS1013 +@tags: [] +@addedOn: 2024-09-03 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +*/ + +const player = "p" +const obstacle_low = "l" +const obstacle_high = "h" + +let obstacleInterval = setInterval(moveObstacles, 1000) +let spawn = false + +setLegend( + [ player, bitmap` +................ +................ +.......000...... +.......0.0...... +......0..0...... +......0...0.0... +....0003.30.0... +....0.0...000... +....0.05550..... +......0...0..... +.....0....0..... +.....0...0...... +......000....... +......0.0....... +.....00.00...... +................` ], + [ obstacle_low, bitmap` + ................ + ................ + ................ + ................ + ................ + ................ + 3333333333333333 + 3333333333333333 + 3333333333333333 + 3333333333333333`], + [ obstacle_high, bitmap` + 5555555555555555 + 5555555555555555 + 5555555555555555 + 5555555555555555 + 5555555555555555 + 5555555555555555 + 5..............5 + 5..............5 + 5..............5 + 5..............5`] +) + +setSolids([ player, obstacle_low, obstacle_high ]) + +function spawnObstacle(obstacle, three) { + const rand = Math.random() + const randx = Math.floor(Math.random() * width()) + const randn = Math.random() + + while (obstacle === randx) { + randx = Math.floor(Math.random() * width()) + } + + if (rand <= 0.5) { + addSprite(randx, 0, obstacle_low) + obstacle = randx + } else { + addSprite(randx, 0, obstacle_high) + obstacle = randx + } + if (randn > 0.5 && !three) { + three = true + spawnObstacle(randx, three) + } +} + +function moveObstacles() { + const obstacles = getAll(obstacle_low).concat(getAll(obstacle_high)); + + obstacles.forEach(obstacle => { + if (getTile(obstacle.x, obstacle.y + 1).length !== 0) { + addText("GAME OVER", {x: 5, y: 4, color: color`3`}); + clearInterval(obstacleInterval); + } else { + + obstacle.y += 1; + + if (obstacle.y >= height() - 1) { + obstacle.remove(); + } + } + }); + + if (spawn === true) { + spawnObstacle(-1, false) + spawn = false + } else { + spawn = true + } +} + +let level = 0 +const levels = [ + map` +... +... +l.h +.p.` +] + +setMap(levels[level]) + +setPushables({ + [ obstacle_low ]: [ player ], + [ obstacle_high ]: [ player ] +}) + +onInput("w", () => { + getFirst(player).y -= 1 +}) + +onInput("s", () => { + getFirst(player).y += 1 +}) + +onInput("a", () => { + getFirst(player).x -= 1 +}) + +onInput("d", () => { + getFirst(player).x += 1 +}) + +onInput("i", () => { + if (getTile(getFirst(player).x, getFirst(player).y - 1)[0].type === obstacle_low) { + getFirst(player).y -= 2 + } +}) + +onInput("k", () => { + if (getTile(getFirst(player).x, getFirst(player).y - 1)[0].type === obstacle_high) { + getFirst(player).y -= 2 + } +}) + + +afterInput(() => { + +}) + diff --git a/games/sudoku.js b/games/sudoku.js index 499a75cbd6..289d26ea08 100644 --- a/games/sudoku.js +++ b/games/sudoku.js @@ -1,8 +1,8 @@ /* @title: sudoku -@tags: ['classic'] -@addedOn: 2023-01-25 @author: wyatt +@tags: ['retro'] +@addedOn: 2023-01-25 This is a sudoku implementation - difficulty is set as "very-hard" by default, but can be changed by editting line 39. diff --git a/games/sweepar.js b/games/sweepar.js index fe59efcf29..74f6fc3dce 100644 --- a/games/sweepar.js +++ b/games/sweepar.js @@ -1,10 +1,10 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started @title: Sweepar @author: eshangonemad @tags: [] @addedOn: 2024-03-20 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started */ const cursor = "c" const bomb = "b" diff --git a/games/tag-your-buddy.js b/games/tag-your-buddy.js index a6ebce5c11..aa4e08e8af 100644 --- a/games/tag-your-buddy.js +++ b/games/tag-your-buddy.js @@ -2,8 +2,8 @@ @title: Tag Your Buddy @author: Aadarsh Jonnalagadda @tags: [] -@img: "" @addedOn: 2024-05-20 +@img: "" */ const player1 = "p" diff --git a/games/taikoMania.js b/games/taikoMania.js index b4da4f25d6..042434f1fa 100644 --- a/games/taikoMania.js +++ b/games/taikoMania.js @@ -1,7 +1,7 @@ /* @title: taikoMania @author: Isaac Wong -@tags: [''] +@tags: [] @addedOn: 2023-12-29 */ diff --git a/games/taiko_fever.js b/games/taiko_fever.js index 0fc5002ac4..dbd79c0231 100644 --- a/games/taiko_fever.js +++ b/games/taiko_fever.js @@ -1,10 +1,9 @@ /* -@addedOn: 2023-01-10 @title: untitled taiko game -@tags: ['advanced', 'music'] -@img: "" -@addedOn: 2023-01-10 @author: Joey Lent +@tags: ['music'] +@addedOn: 2023-01-10 +@img: "" */ /************************** diff --git a/games/tanks.js b/games/tanks.js index b7f85f5db6..6f109db67f 100644 --- a/games/tanks.js +++ b/games/tanks.js @@ -1,10 +1,10 @@ /* -Shoot your projectile at the other tank before they get you! - @title: Tanks @author: Om Raheja -@tags: ["two-player", "fighting", "pvp"] +@tags: ['action','multiplayer'] @addedOn: 2024-06-30 +Shoot your projectile at the other tank before they get you! + In the color picker: AD to move player one cursor. diff --git a/games/techCatcher.js b/games/techCatcher.js index 1edc169a59..aec34c0ab7 100644 --- a/games/techCatcher.js +++ b/games/techCatcher.js @@ -1,7 +1,7 @@ /* @title: Tech Catchers V2 -@author: Shaheer -@tags: ['endless', 'tech','SSD', 'Shooter'] +@author: Shaheer +@tags: ['endless','action'] @addedOn: 2024-06-25 Instructions: diff --git a/games/tetris.js b/games/tetris.js index 9d313f3262..c35c890ca8 100644 --- a/games/tetris.js +++ b/games/tetris.js @@ -1,8 +1,8 @@ /* @title: tetris -@tags: ['classic'] -@addedOn: 2022-09-12 @author: neesh +@tags: ['retro'] +@addedOn: 2022-09-12 */ const rows = 12; diff --git a/games/the-maze.js b/games/the-maze.js index dbbacaa661..9c61bc6e14 100644 --- a/games/the-maze.js +++ b/games/the-maze.js @@ -1,7 +1,7 @@ /* @title: The Maze @author: TRXAlpha -@tags: ['maze'] +@tags: ['puzzle'] @addedOn: 2024-07-18 */ diff --git a/games/the_RUN.js b/games/the_RUN.js index bd83e61471..067efaacab 100644 --- a/games/the_RUN.js +++ b/games/the_RUN.js @@ -1,8 +1,8 @@ /* @title: the RUN +@author: lumos studio @tags: [] @addedOn: 2022-11-21 -@author: lumos studio */ const player = "p"; diff --git a/games/the_dining_room_in_the_sky.js b/games/the_dining_room_in_the_sky.js index a66bb0c1c3..edc17b9d24 100644 --- a/games/the_dining_room_in_the_sky.js +++ b/games/the_dining_room_in_the_sky.js @@ -1,8 +1,8 @@ /* -@title: the_dining_room_in_the_sky -@tags: ['puzzle-score'] -@addedOn: 2023-02-28 +@title: the_dining_room_in_the_sky @author: Dylan Tran +@tags: ['puzzle'] +@addedOn: 2023-02-28 */ let Score = 0; diff --git a/games/the_great_robbery_ jailbreak!.js b/games/the_great_robbery_ jailbreak!.js index 4333a29a63..8e3cd40e74 100644 --- a/games/the_great_robbery_ jailbreak!.js +++ b/games/the_great_robbery_ jailbreak!.js @@ -1,11 +1,11 @@ /* +@title: jailbreak :) +@author: navya +@tags: ['multiplayer'] +@addedOn: 2024-06-26 First time? Check out the tutorial game: https://sprig.hackclub.com/gallery/getting_started -@title: jailbreak :) -@author: navya -@tags: ["2_player"] -@addedOn: 2024-06-26 */ diff --git a/games/the_hungry_mouse.js b/games/the_hungry_mouse.js index b2a072830e..296a648871 100644 --- a/games/the_hungry_mouse.js +++ b/games/the_hungry_mouse.js @@ -1,8 +1,8 @@ /* @title: the_hungry_mouse +@author: KaiEtkin @tags: ['strategy'] @addedOn: 2023-03-01 -@author: KaiEtkin */ const player = "p"; diff --git a/games/the_impossible_puzzle.js b/games/the_impossible_puzzle.js index e68140d5f8..fd6c30dcf6 100644 --- a/games/the_impossible_puzzle.js +++ b/games/the_impossible_puzzle.js @@ -1,8 +1,8 @@ /* @title: the impossible puzzle -@tags: ['logic'] -@addedOn: 2022-11-13 @author: monish +@tags: ['puzzle'] +@addedOn: 2022-11-13 INSTRUCTIONS: use WASD to move squares next to the empty square. diff --git a/games/the_invisible_man.js b/games/the_invisible_man.js index 8280f1ea1b..4836c46e1a 100644 --- a/games/the_invisible_man.js +++ b/games/the_invisible_man.js @@ -1,8 +1,8 @@ /* @title: the_invisible_man -@tags: ['puzzle-score'] -@addedOn: 2022-11-14 @author: Gárdonyi Bálint (Valentine) +@tags: ['puzzle'] +@addedOn: 2022-11-14 MOVEMENT: WASD In this game, you have to collect coins. The catch? You are invisible! (the player is invisible, but it is there somewhere) You have to find, and keep track of the location of your character. Or just press random keys, and hope it works out... diff --git a/games/the_journey_of_the_box_a_sokoban_saga.js b/games/the_journey_of_the_box_a_sokoban_saga.js index 61d36750f2..e3652f2d51 100644 --- a/games/the_journey_of_the_box_a_sokoban_saga.js +++ b/games/the_journey_of_the_box_a_sokoban_saga.js @@ -1,8 +1,8 @@ /* -@title: the journey of the box[a sokoban saga] -@tags: ['sokoban-style'] -@addedOn: 2023-04-15 +@title: the journey of the box[a sokoban saga] @author: Ethan Francis +@tags: ['puzzle'] +@addedOn: 2023-04-15 //INSTRUCTIONS Get all blue boxes into the holes if there is buttons, boxes need to be on the buttons diff --git a/games/the_maze_with_rain.js b/games/the_maze_with_rain.js index c05e0e2e2a..eb8def0ea3 100644 --- a/games/the_maze_with_rain.js +++ b/games/the_maze_with_rain.js @@ -1,7 +1,7 @@ /* @title: the maze with metors @author: Daksh Thapar (DakshRocks21/dak5h.exe) -@tags: ["maze", "obstacle"] +@tags: ['puzzle'] @addedOn: 2024-08-15 */ diff --git a/games/tictactoe.js b/games/tictactoe.js index da69903bd9..67feff3e2e 100644 --- a/games/tictactoe.js +++ b/games/tictactoe.js @@ -1,8 +1,8 @@ /* @title: 2 player tic-tac-toe -@tags: ['classic', 'multiplayer'] -@addedOn: 2022-09-06 @author: reesericci +@tags: ['multiplayer','retro'] +@addedOn: 2022-09-06 "a", "s", and "d" are your controls. diff --git a/games/tile_platformer.js b/games/tile_platformer.js index d4993c9fd7..6944e32e09 100644 --- a/games/tile_platformer.js +++ b/games/tile_platformer.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: toto -@author: marsisus +@author: marsisus @tags: [] @addedOn: 2024-08-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/time_puzzle.js b/games/time_puzzle.js index 23caae4de7..ab4ce32daf 100644 --- a/games/time_puzzle.js +++ b/games/time_puzzle.js @@ -1,8 +1,8 @@ /* @title: Time puzzle -@tags: ['timer-puzzle'] -@addedOn: 2022-10-13 @author: Akeell +@tags: ['puzzle','timed'] +@addedOn: 2022-10-13 */ /* intructions: diff --git a/games/timing.js b/games/timing.js index 9eeadd7c0b..d9c2e79ad1 100644 --- a/games/timing.js +++ b/games/timing.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Timing -@author: Darsh Gupta +@author: Darsh Gupta @tags: [] @addedOn: 2024-06-24 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const player = "p" diff --git a/games/tolls.js b/games/tolls.js index 5d06cb3f23..c25efb2758 100644 --- a/games/tolls.js +++ b/games/tolls.js @@ -1,8 +1,8 @@ /* @title: tolls -@tags: ['WIP'] -@addedOn: 2022-07-19 @author: leo +@tags: [] +@addedOn: 2022-07-19 Instructions: diff --git a/games/topdownshooter.js b/games/topdownshooter.js index ccb8696415..b259c77779 100644 --- a/games/topdownshooter.js +++ b/games/topdownshooter.js @@ -1,7 +1,7 @@ /* @title: Top Down Shooter @author: Orkpeko -@tags: ["real-time", "strategy", "action"] +@tags: ['strategy','real-time','action'] @addedOn: 2024-07-15 */ diff --git a/games/tower_of_hanoi.js b/games/tower_of_hanoi.js index 7b5bd969c6..f6fd1cf925 100644 --- a/games/tower_of_hanoi.js +++ b/games/tower_of_hanoi.js @@ -1,8 +1,8 @@ /* @title: tower_of_hanoi -@tags: ['classic'] -@addedOn: 2022-10-02 @author: nicholasz2510 +@tags: ['retro'] +@addedOn: 2022-10-02 */ diff --git a/games/trap hunt.js b/games/trap hunt.js new file mode 100644 index 0000000000..22afe529d3 --- /dev/null +++ b/games/trap hunt.js @@ -0,0 +1,528 @@ +/* +@title: trap runner +@author: surojit roy +@tags: [] +@addedOn: 2024-08-28 +*/ + +const down = "d" +const up = "n" +const right_1 = "r" +const right_2 = "s" +const left_1 = "t" +const left_2 = "u" +const ground = "m" +const v_wall = "v" +const h_wall = "h" +const u_r = "a" +const u_l = "b" +const d_r = "c" +const d_l = "z" +const c_r = "f" +const c_l = "g" +const c_u = "i" +const c_d = "j" +const goal = "w" +const chest = "e" +const lock = "k" + +setLegend( + [ down, bitmap` +0010033333300101 +1001333333330000 +0000377337731000 +0000333003330010 +1010330330331000 +0000066666600000 +0103333333333010 +0003333333333000 +0033333333333300 +0333333333333330 +0333333333333330 +1033333333333301 +0010333333330000 +0000333333330100 +0000033003300010 +1001000010010000` ], + [ up, bitmap` +0000033333300000 +0000333333330000 +0000333333330000 +0000333333330000 +0000333333330000 +0000066666600000 +0003333333333000 +0003333333333000 +0033333333333300 +0333333333333330 +0333333333333330 +0033333333333300 +0000333333330000 +0000333333330000 +0000033003300000 +0000000000000000` ], + [ right_1, bitmap` +0000000000000000 +0000033333300000 +0000333333330000 +0000333333770000 +0000333333300000 +0000333333030000 +0000066666600000 +0000333333330000 +0000333333330000 +0003333333333000 +0033333333333300 +0033333333333300 +0003333333333000 +0003333333333000 +0003333333333000 +0000330003330000` ], + [ left_1, bitmap` +................ +.....333333..... +....33333333.... +....77333333.... +....33333333.... +....33333333.... +.....666666..... +....33333333.... +....33333333.... +...3333333333... +..333333333333.. +..333333333333.. +...3333333333... +...3333333333... +...3333333333... +....333...33....` ], + [ right_2, bitmap` +................ +.....333333..... +....33333333.... +....33333377.... +....33333333.... +....33333333.... +.....666666..... +....33333333.... +....33333333.... +...333333333.... +..33333333333... +..33333333333... +...3333333333... +...3333333333... +...3333..3333... +....33....33....` ], + [ left_2, bitmap` +................ +.....333333..... +....33333333.... +....77333333.... +....33333333.... +....33333333.... +.....666666..... +....33333333.... +....33333333.... +....333333333... +...33333333333.. +...33333333333.. +...3333333333... +...3333333333... +...3333..3333... +....33....33....` ], + [ v_wall, bitmap` +0000002222000100 +0101002222000000 +1000012222010000 +0001002222001010 +0100002222100000 +0000002222000010 +0000102222010000 +0100002222001010 +0000002222000000 +0000102222010100 +0110002222001000 +0000002222000001 +0010102222100000 +0100012222001000 +0010002222010000 +0000102222000010` ], + [ ground, bitmap` +0100000001000010 +0000000100000000 +0000100000000100 +0000000001000000 +0100000000010100 +0000000100000000 +0000010000000010 +0010000000100000 +0000000000000010 +1010000100010000 +0000010000000010 +0000000010000000 +0010000000010000 +0000000000000000 +1000100100000010 +0000000000010000` ], + [ h_wall, bitmap` +0000001000000100 +0010100100010001 +1000000000000000 +0000100000100100 +0001001010000001 +0100000000010000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000001000100001 +0100100000000100 +0000000000010000 +0010100100100001 +0000000000000000 +0100001010010100` ], + [ u_r, bitmap` +1000010000010001 +0010000000000100 +0000100000010000 +0000000000100010 +0101000000000000 +0000000000001001 +0000100000000000 +0101000000000000 +0000000000000000 +1010010000000000 +0000000000000100 +0000101001001000 +0100000000000001 +0000001001010100 +0010100010000000 +1000000100010001` ], + [ u_l, bitmap` +LL1LL10000L1LLLL +LLLLLL0000LLL1LL +L1LL1L0000LLLLLL +LL1LLL0000LL1L1L +LLLLLL0000LLLLLL +1LLL1L00001LLLLL +0000000000LL1LLL +0000000000L1LL1L +0000000000LLLLLL +00000000001LLLLL +LLL1LLL1LLL1LL1L +L1LLLLLLLLLLLLLL +LLLLL1LL1LL1LLLL +LL1LLLLLLLLLL1LL +1LLL1LLLLL1LLLL1 +LL1LLL1L1LLLL1LL` ], + [ d_r, bitmap` +0010010000100000 +0000000000001001 +1000010010000000 +0010000000000001 +0000010000100010 +0100000010001000 +0001000000000000 +0000000000000000 +1000100000000000 +0000000000000000 +0010000000010100 +0000100000000001 +1000000000100100 +0000000000000000 +0001000000010001 +1000000000000100` ], + [ d_l, bitmap` +1000000000010010 +0010100101000000 +0000000000010000 +0010000010000010 +0000001000100000 +1000100010000000 +0000000000000100 +0000000000010000 +0000000000000001 +0000000000001000 +0000010000010010 +1001000000000000 +0000000000000010 +0100010000010000 +0010000000000101 +0000010000010000` ], + [ c_r, bitmap` +1000100000001001 +0000000000000000 +0100100000100100 +0000000000000010 +0100010000000000 +0000000000010100 +1000100000000000 +0000000000000000 +0010000000000000 +0000010000000000 +1000000000001000 +0001000000000001 +0100000000001000 +0000000000100010 +0010010000000000 +1001000000010100` ], + [ c_l, bitmap` +0100010000010000 +0001000000000000 +0000000000001000 +1001000000000010 +0000000000010000 +0010010000000000 +0000000000000100 +0000000000000000 +0000000000100000 +0000000000000010 +0100000000001000 +0010100000000000 +0100000000101010 +0000010000000000 +0101000000001000 +001L100000010010` ], + [ c_d, bitmap` +1001000010010000 +0000001000000101 +0000100000000000 +0100000010010000 +0000100000000101 +1000000100010000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000100000100010 +0101000000000100 +0000000000010000 +0010100000000010 +0000000000100000 +0010000000001001` ], + [ c_u, bitmap` +1000010000010000 +0101000000000001 +0000000000001000 +1000000000000001 +0001000000010000 +0100010000000100 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +1000010000000010 +0000000001000000 +0101000000010100 +0000001010000000 +0100000000100000 +0001001000010010` ], + [ goal, bitmap` +551555551HHHH1HH +55555000000HHHHH +155108888880H1H1 +55008833338800HH +506083333338060H +506088333388060H +5500888338880071 +5144088888807177 +1441L08FF8017777 +4444108FF8077777 +4414408FF8071771 +4444408FF8077777 +4444088888807777 +4140000000000717 +4444444444417777 +1441444144417771` ], + [ chest, bitmap` +000LL1LLL1LL1000 +0FF0000000000FF0 +0703333333333070 +0703333333333070 +0703333333333070 +0703333333333070 +0703330000333070 +0000007777000000 +0777777007777770 +0000770000770000 +0703077007703070 +0703307777033070 +0703330000333070 +0703333333333070 +0F033333333330F0 +0000000000000000` ], + [ lock, bitmap` +101L555555550001 +0005888888885010 +0015855555585000 +1005850000585100 +0055555555555501 +058888888888885L +5F888888888888F5 +5F888888888888F5 +5F888888888888F5 +5F888877778888F5 +5F888877778888F5 +5F888887788888F5 +5F888888888888F5 +5F888888888888F5 +L5FFFFFFFFFFFF51 +1L555555555555LL` ] +) + +setSolids([ down, up, right_1, left_1, right_2, left_2, v_wall, h_wall, u_r, u_l, d_r, d_l, c_r, c_l, c_u, c_d ]) + +let level = 0 +const levels = [ + map` +chjdjhhhhhhz +vmvmvmmmmmmv +vmvmahhzmvmv +vmmmmmmvmvev +fhzkvmmmmfhg +vmvmfhhhhgmw +vmmmvmmmmvmv +vmvmvmvmhbkv +vmvmvmvmmmmv +vmahbmvmchmv +vmmmmmvmvemv +ahhhhhihihhb`, + map` +chhhhhjhhhhhz +vmmmmmvmmmmev +vmhhzmvmchhhg +vmmmvmvmvmmmv +ahhmvmvmvkvmv +dmmmvmvmmmvmv +chhhbmfhhmvmv +vmmmmmvmmmvmv +vmchhhbkchbmv +vmvemmmmvmmmv +vmahhhhmvmvmv +vmmmmmmmvmvmv +ahhhhhhhbwahb`, + map` +chhhhhjhhhjhhhjhhhhhh +vmmmmmvemmvmmmvmmmmmw +fhzmvmahzmvmvmahhhhkv +vevkvmmmvmkmvmmmmmmmv +vmvmahzmvmchihjhhmchg +vmvmmmvmmmvmmmvemmvev +vmahzmahhhgmchihjhbmv +vmmmvmmmmmvmvmmmvmmmv +vmchihhkchbmvmvmahhmv +vmvmmmmmvmmmvmvmmmmmv +vmvmhhjhgmhhbmvmvmchg +vmvmmmvmvmmmmmvmvmvmv +vmahhkvmahhmhhbmvmvmv +vmmmmmmmmmmmmmmmvmvmv +fhhhhmvmchzmchhhbmvmv +vmmmmmvmvmvmvmmmmmmmv +vmchhmvmvmvmvmvmchhhg +vmvmmmmmvmmmmmvmvmmmv +vmahhhhmvmhhzmahbmvmv +dmmmmmmmmmmmvmmmmmvev +hhhhhhhhhhhhihhhhhihb` +] + +setMap(levels[level]) + +let current_sprite = down +let keys = 0 + +onInput("s", () => { + let player = getFirst(current_sprite) + let destTile = getTile(player.x, player.y + 1) // Check the tile below the player + + // Check if the destination tile is of type 'ground' or 'goal' before moving + let destType = destTile.length > 0 ? destTile[0].type : '' + if (destType === lock && keys > 0) { + keys -= 1 + destType = ground + } + if (destType === ground || destType === goal || destType === chest) { + if (destType === chest) { + keys += 1 + } + clearTile(player.x, player.y) + current_sprite = down + addSprite(player.x, player.y + 1, current_sprite) // Spawn new player sprite below + addSprite(player.x, player.y, ground) // Replace ground tile where the player moved from + } +}) + +onInput("w", () => { + let player = getFirst(current_sprite) + let destTile = getTile(player.x, player.y - 1) // Check the tile above the player + + // Check if the destination tile is of type 'ground' or 'goal' before moving + let destType = destTile.length > 0 ? destTile[0].type : '' + if (destType === lock && keys > 0) { + keys -= 1 + destType = ground + } + if (destType === ground || destType === goal || destType === chest) { + if (destType === chest) { + keys += 1 + } + clearTile(player.x, player.y) + current_sprite = up + addSprite(player.x, player.y - 1, current_sprite) // Spawn new player sprite above + addSprite(player.x, player.y, ground) // Replace ground tile where the player moved from + } +}) + +onInput("a", () => { + let player = getFirst(current_sprite) + let destTile = getTile(player.x - 1, player.y) // Check the tile to the left of the player + + // Check if the destination tile is of type 'ground' or 'goal' before moving + let destType = destTile.length > 0 ? destTile[0].type : '' + if (destType === lock && keys > 0) { + keys -= 1 + destType = ground + } + if (destType === ground || destType === goal || destType === chest) { + if (destType === chest) { + keys += 1 + } + clearTile(player.x, player.y) + current_sprite = current_sprite === left_1 ? left_2 : left_1 + addSprite(player.x - 1, player.y, current_sprite) // Spawn new player sprite to the left + addSprite(player.x, player.y, ground) // Replace ground tile where the player moved from + } +}) + +onInput("d", () => { + let player = getFirst(current_sprite) + let destTile = getTile(player.x + 1, player.y) // Check the tile to the right of the player + + // Check if the destination tile is of type 'ground' or 'goal' before moving + let destType = destTile.length > 0 ? destTile[0].type : '' + if (destType === lock && keys > 0) { + keys -= 1 + destType = ground + } + if (destType === ground || destType === goal || destType === chest) { + if (destType === chest) { + keys += 1 + } + clearTile(player.x, player.y) + current_sprite = current_sprite === right_1 ? right_2 : right_1 + addSprite(player.x + 1, player.y, current_sprite) // Spawn new player sprite to the right + addSprite(player.x, player.y, ground) // Replace ground tile where the player moved from + } +}) + +afterInput(() => { + if (tilesWith(goal, current_sprite).length === 1) { + if (level === levels.length - 1) { + // Check if the current level is the last level + addText("YOU WIN!", { y: 4, color: color`3` }) + } else { + level += 1; + setMap(levels[level]); // Change the map to the next level + current_sprite = down + } + } +}) + diff --git a/games/trap_it.js b/games/trap_it.js index f71a3b89d2..7c6de4313e 100644 --- a/games/trap_it.js +++ b/games/trap_it.js @@ -1,7 +1,7 @@ /* @title: trap_it @author: PRairigh -@tags: ["strategy"] +@tags: ['strategy'] @addedOn: 2024-07-31 */ diff --git a/games/tunnel.js b/games/tunnel.js index 70dbca5188..4b08992d2e 100644 --- a/games/tunnel.js +++ b/games/tunnel.js @@ -1,8 +1,8 @@ /* @title: tunnel +@author: amin @tags: ['endless'] @addedOn: 2023-02-19 -@author: amin */ const HEIGHT = 20; diff --git a/games/turnbasedcombatgame.js b/games/turnbasedcombatgame.js new file mode 100644 index 0000000000..37b068d515 --- /dev/null +++ b/games/turnbasedcombatgame.js @@ -0,0 +1,364 @@ +/* +@title: Turn based game +@author: Michael +@tags: [] +@addedOn: 2024-09-18 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + + +HOW TO PLAY: +The goal of the game is to knock out the red square - There are no attacks yet though +There are two numbers beneath the grass: Time until move (top), and cycle (bottom) +Your stats are in the top left, labeled [H] for health and [S] for stamina, and the red squares are in the top right +You can queue a move action by pressing either A (left) or D (right), which will queue your character to move in that direction 1 square +You can modify a movement queue by pressing S, which will make it move 2 squares in the previously queued direction +Your queued movement will take place once the time until move reaches zero, and will reduce your stamina by the number of squares moved. Your move will be canceled if you do not have enough stamina. + +After every move, even if you or the red square did not make a move, the cycle counter will tick up. When the cycle counter reads 3, you will heal after that cycle's movement timer. The cycle will then reset to 1. +*/ + +// Characters +const player_sprite = "1"; +const enemy_sprite = "2"; + +// Tiles +const grass_sprite = "q"; +const dirt_sprite = "w"; + +setLegend( + [ player_sprite, bitmap` +7777777777777777 +7777777777777777 +7722277777722277 +7720077777700277 +7720077777700277 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7777777777777777 +7770777777770777 +7770777887770777 +7777000000007777 +7777777777777777 +7777777777777777 +7777777777777777`], + [ enemy_sprite, bitmap` +3333333333333333 +3330003333000333 +3322230330322233 +3320030330300233 +3320033333300233 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3333333333333333 +3330000000000333 +3303333388333033 +3303333338333033 +3333333333333333 +3333333333333333`], + [ grass_sprite, bitmap` +4444444444444444 +4444444444444444 +444F4444444D4FF4 +F4F44D4DDD4FDDDD +DD44DFFCCFFFFCCC +FCFDCFCCFFCCCFFC +CFFCCCCCCCCCCCCF +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC` ], + [ dirt_sprite, bitmap` +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCC` ] +); + +maps = [ + map` +.......... +.......... +.......... +.......... +.......... +qqqqqqqqqq +wwwwwwwwww +wwwwwwwwww` +]; + +setMap(maps[0]); + + +// Stats +class Character { + constructor(max_stamina, max_health, info) { + this.max_stamina = max_stamina; + this.max_health = max_health; + this.info = info; + this.previous_pos = this.info["pos"] + this.health = this.max_health; + this.stamina = this.max_stamina; + this.sprite_type = this.info["sprite"]; + addSprite(this.info["pos"][0], this.info["pos"][1], this.sprite_type); + + // For some reason, addSprite does not return the sprite, so you have to get it with getFirst() + this.sprite = getFirst(this.sprite_type); + } + + updatePositionOnScreen() { + var pos = this.info["pos"]; // [x, y] + this.sprite.x = pos[0]; + this.sprite.y = pos[1]; + } + + heal() { + this.stamina += 1; + // this.health +=1; + + // Not a very good way to do this, but it caps the health and stamina + if(this.stamina > this.max_stamina) { + this.stamina = this.max_stamina; + } + if(this.health > this.max_health) { + this.health = this.max_health; + } + } + + pushPos() { + this.previous_pos = this.info["pos"][0]; + } + +} + +var player = new Character(3, 3, { + "pos": [1, 4], + "direction": "l", + "sprite": player_sprite +}) ; + +var enemy = new Character(3, 3, { + "pos": [8, 4], + "direction": "l", + "sprite": enemy_sprite +}); +// Handle player movement +noAction = { + "action_type": "none", + "action_data": { + + } +}; +actionToTake = noAction + +// Right +onInput("d", () => { + actionToTake = { + "action_type": "move", + "action_data": { + "dash": "no", + "move": 1 + } + } +}); + +// Left +onInput("a", () => { + actionToTake = { + "action_type": "move", + "action_data": { + "dash": "no", + "move": -1 + } + } +}); + +// Dash +onInput("s", () => { + if(actionToTake != noAction) { + actionToTake["action_data"]["dash"] = "yes"; + actionToTake["action_data"]["move"] *= 2; + } +}); + +// Guard +onInput("w", () => { + actionToTake = { + "action_type": "guard" + } +}); + +// Map health & stamina values to colors +colormap = { + 3: color`4`, + 2: color`6`, + 1: color`9`, + 0: color`3` +}; + +// Draw the health & stamina bar for both the player and the bot +function drawStats() { + // Player health + addText("<<< " + player.health + "H", { + x: 0, + y: 0, + color: colormap[player.health] + }); + // Player stamina + addText("<<< " + player.stamina + "S", { + x: 0, + y: 1, + color: colormap[player.stamina] + }); + + // Enemy health + addText(enemy.health + "H" + " >>>", { + x: 14, + y: 0, + color: colormap[enemy.health] + }); + // Enemy stamina + addText(enemy.stamina + "S" + " >>>", { + x: 14, + y: 1, + color: colormap[enemy.stamina] + }); +} +// Set the interval - how many times has the loop run, 0-3, rolls over +interval = 0 +// Set the cycle = 1-3, heals stamina and health on 3 +cycle = 1 +// The main game loop +function gameLoop() { + clearText(); + drawStats(); + time = 3 - interval; + + if(interval >= 3) { + interval = -1; + time = "!"; + player.pushPos(); + enemy.pushPos(); + guard = false; + if(actionToTake["action_type"] == "move") { + staminaCost = Math.abs(actionToTake["action_data"]["move"]); + if(player.stamina >= staminaCost) { + // TODO: CHECK FOR COLLISIONS + player.info["pos"][0] += actionToTake["action_data"]["move"]; + player.updatePositionOnScreen(); + player.stamina -= staminaCost; + } else { + addText("STAMINA LO", { + x: 0, + y: 11, + color: color`3` + }); + } + } else if (actionToTake["action_type"] == "guard") { + guard = true; + player.stamina = 0; + } + if (!guard) { + if (player.info["pos"][0] == enemy.info["pos"][0] ) { + // Both players hit each other - Its a tie! + // clearInterval(gameInterval); + addText("ITS A TIE!", { + x: 0, + y: 11, + color: color`3` + }); + player.health -= 1; + enemy.health -=1; + } else if (player.info["pos"][0] < enemy.previous_pos || player.info["pos"][0] > enemy.previous_pos) { // Check if one player passed the other player + // PLAYER + if (player.info["pos"][0] < enemy.previous_pos && (player.info["pos"][0] - player.previous_pos) < 0) { // CHeck if the player passed the enemy by going left + enemy.health -= 1; + } + if (player.info["pos"][0] > enemy.previous_pos && (player.info["pos"][0] - player.previous_pos) > 0) { // CHeck if the player passed the enemy by going right + enemy.health -= 1; + } + // ENEMY + if (enemy.info["pos"][0] < player.previous_pos && (enemy.info["pos"][0] - enemy.previous_pos) < 0) { // CHeck if the enemy passed the player by going left + player.health -= 1; + } + if (enemy.info["pos"][0] > player.previous_pos && (enemy.info["pos"][0] - enemy.previous_pos) > 0) { // CHeck if the enemy passed the player by going right + player.health -= 1; + } + } + } + // Check for a death + if (enemy.health <= 0 && player.health <= 0) { + clearInterval(gameInterval); + addText("ITS A TIE!", { + x: 0, + y: 11, + color: color`3` + }); + } else if (enemy.health <= 0) { + clearInterval(gameInterval); + clearText(); + addText("BLUE WINS!", { + x: 0, + y: 11, + color: color`7` + }); + } else if (player.heatlh <= 0) { + clearInterval(gameInterval); + clearText(); + addText("RED WINS!", { + x: 0, + y: 11, + color: color`3` + }); + } + // drawStats(); + // Cycle +1, and heal characters if it is a third cycle + if(cycle >=3) { + player.heal(); + enemy.heal(); + cycle = 0; + } + cycle += 1; + actionToTake = noAction; + drawStats(); + } + + addText(time.toString(), { + x: 10, + y: 12, + color: color`2` + }); + addText(cycle.toString(), { + x: 10, + y: 14, + color: color`2` + }); + + interval += 1; +} + +// Run gameLoop once every second +var gameInterval = setInterval(gameLoop, 250); + diff --git a/games/turtle_game_reach_the_beach.js b/games/turtle_game_reach_the_beach.js index 78b0b8ddaf..9230f363cb 100644 --- a/games/turtle_game_reach_the_beach.js +++ b/games/turtle_game_reach_the_beach.js @@ -2,7 +2,7 @@ /* @title: turtle_game_reach_the_beach @author: Daniel Dunavetsky -@tags: ['logic'] +@tags: ['puzzle'] @addedOn: 2023-10-25 */ diff --git a/games/two-birds_one-stone.js b/games/two-birds_one-stone.js index 78be1914e1..d003f8960e 100644 --- a/games/two-birds_one-stone.js +++ b/games/two-birds_one-stone.js @@ -2,7 +2,7 @@ /* @title: two-birds_one-stone @author: t3mp0r4ry -@tags: ['dodge'] +@tags: ['action'] @addedOn: 2023-06-06 */ diff --git a/games/under_fire.js b/games/under_fire.js index c6386c8594..46d37cfdff 100644 --- a/games/under_fire.js +++ b/games/under_fire.js @@ -1,8 +1,8 @@ /* @title: under_fire +@author: alex_dvc @tags: ['strategy'] @addedOn: 2023-02-08 -@author: alex_dvc */ const player = "p"; diff --git a/games/underground_escape.js b/games/underground_escape.js index 8bc9a15a65..4e656163b9 100644 --- a/games/underground_escape.js +++ b/games/underground_escape.js @@ -3,8 +3,8 @@ @title: underground_escape @author: Ezra York @tags: [] -@img: "" @addedOn: 2024-05-20 +@img: "" */ //player + enemys diff --git a/games/undertale-sprig-edition.js b/games/undertale-sprig-edition.js index 9b37c4d3ed..2d611c40fd 100644 --- a/games/undertale-sprig-edition.js +++ b/games/undertale-sprig-edition.js @@ -1,11 +1,11 @@ /* -First time? Check out the tutorial game: -https://sprig.hackclub.com/gallery/getting_started - @title: Undertale Sprig Edition @author: i-suck-at-most-stuff @tags: [] @addedOn: 2024-00-00 +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + */ const playerRed = 'r'; const attackUp = 'a'; diff --git a/games/video-game-exclamation-point-times-three.js b/games/video-game-exclamation-point-times-three.js index 50bbbad92c..0018ed7ad3 100644 --- a/games/video-game-exclamation-point-times-three.js +++ b/games/video-game-exclamation-point-times-three.js @@ -2,8 +2,8 @@ @title: video-game-exclamation-point-times-three @author: arc @tags: [] -@img: "" @addedOn: 2024-05-20 +@img: "" */ const player = "p" diff --git a/games/virus_plowing.js b/games/virus_plowing.js index 3aec60ad1b..6b650420ca 100644 --- a/games/virus_plowing.js +++ b/games/virus_plowing.js @@ -1,8 +1,8 @@ /* @title: virus_plowing +@author: Danush Ramanan @tags: ['endless'] @addedOn: 2022-11-11 -@author: Danush Ramanan */ /* diff --git a/games/waste_time_get_500_coins.js b/games/waste_time_get_500_coins.js index b595433681..4dc73c9d97 100644 --- a/games/waste_time_get_500_coins.js +++ b/games/waste_time_get_500_coins.js @@ -1,7 +1,7 @@ /* @title: Get 500 Coins @author: oliverlinux -@tags: ["time-waster"] +@tags: ['timed'] @addedOn: 2024-06-19 */ let jumped = 0 diff --git a/games/wet-sand.js b/games/wet-sand.js index 2d48b6b7a9..5c8a1bcc2d 100644 --- a/games/wet-sand.js +++ b/games/wet-sand.js @@ -1,8 +1,8 @@ /* @title: wet-sand +@author: mint @tags: ['simulation'] @addedOn: 2023-02-20 -@author: mint */ const sand = "s"; diff --git a/games/whack_a_mole.js b/games/whack_a_mole.js index 8f3ccd2879..7d4979c13a 100644 --- a/games/whack_a_mole.js +++ b/games/whack_a_mole.js @@ -1,8 +1,8 @@ /* @title: whack_a_mole +@author: Sameer Murthy @tags: ['endless'] @addedOn: 2023-03-01 -@author: Sameer Murthy How to Play: - Whack the mole to start by pressing any key. diff --git a/games/wham.js b/games/wham.js index c9ea42bd15..835f6d21cc 100644 --- a/games/wham.js +++ b/games/wham.js @@ -2,7 +2,7 @@ /* @title: wham @author: Aaman Patnaik -@tags: ['classic'] +@tags: ['retro'] @addedOn: 2023-09-18 */ diff --git a/games/wheatfield.js b/games/wheatfield.js index 34ead839f9..ccf6e1e737 100644 --- a/games/wheatfield.js +++ b/games/wheatfield.js @@ -1,11 +1,11 @@ /* - -@title: WheatField +@title: WheatField @author: FEEJEE -@tags: ['farming','simulation'] -@img: "" +@tags: ['simulation'] @addedOn: 2024-03-00 +@img: "" + .𖥔 ݁ ˖ 𝐖𝐞𝐥𝐜𝐨𝐦𝐞 𝐭𝐨 𝐖𝐡𝐞𝐚𝐭𝐅𝐢𝐞𝐥𝐝 diff --git a/games/yet_another_platfomer.js b/games/yet_another_platfomer.js index f30ef767d0..59861cd9f8 100644 --- a/games/yet_another_platfomer.js +++ b/games/yet_another_platfomer.js @@ -1,8 +1,8 @@ /* @title: yet_another_platformer +@author: gicorada @tags: ['platformer'] @addedOn: 2024 -@author: gicorada */ // define the sprites in our game diff --git a/games/yondus_Arrow.js b/games/yondus_Arrow.js index a4930cf94f..9055511db5 100644 --- a/games/yondus_Arrow.js +++ b/games/yondus_Arrow.js @@ -2,7 +2,7 @@ /* @title: yondus_Arrow @author: Cayden Robbins -@tags: ['sokoban-style'] +@tags: ['puzzle'] @addedOn: 2023-06-15 */ diff --git a/games/zombie_defense.js b/games/zombie_defense.js index f19d2ceaa5..1de2638ee8 100644 --- a/games/zombie_defense.js +++ b/games/zombie_defense.js @@ -1,8 +1,8 @@ /* @title: Zombie Defense +@author: Edmund @tags: ['endless'] @addedOn: 2022-09-19 -@author: Edmund Controls: W, S - Movement diff --git a/package.json b/package.json index 8813d940c7..1c65720e10 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "dotenv": "^16.3.1", "firebase-admin": "^11.10.1", "js-beautify": "^1.15.1", + "js-levenshtein": "^1.1.6", "loops": "^1.0.1", "ms": "^2.1.3", "nanoid": "^4.0.1", @@ -59,6 +60,7 @@ "@types/esprima": "^4.0.3", "@types/grecaptcha": "^3.0.4", "@types/js-beautify": "^1.14.3", + "@types/js-levenshtein": "^1.1.3", "@types/node-statsd": "^0.1.6", "@types/three": "^0.149.0", "@types/throttle-debounce": "^5.0.0", diff --git a/public/pico-os.uf2 b/public/pico-os.uf2 index 35a504f368..9355e557c3 100644 Binary files a/public/pico-os.uf2 and b/public/pico-os.uf2 differ diff --git a/scripts/gardenshed/gdb-server.sh b/scripts/gardenshed/gdb-server.sh index 664c4c99a3..112f404afc 100755 --- a/scripts/gardenshed/gdb-server.sh +++ b/scripts/gardenshed/gdb-server.sh @@ -1,3 +1,3 @@ #!/bin/bash -sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "program ./spade.elf verify reset" +sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "set USE_CORE 0" -c "program ./spade.elf verify reset" diff --git a/src/components/big-interactive-pages/editor.tsx b/src/components/big-interactive-pages/editor.tsx index 548b30d908..34c7773aea 100644 --- a/src/components/big-interactive-pages/editor.tsx +++ b/src/components/big-interactive-pages/editor.tsx @@ -27,10 +27,12 @@ import { nanoid } from "nanoid"; import TutorialWarningModal from "../popups-etc/tutorial-warning"; import { editSessionLength, switchTheme, ThemeType, continueSaving, LAST_SAVED_SESSION_ID, showSaveConflictModal } from '../../lib/state' import SessionConflictWarningModal from '../popups-etc/session-conflict-warning-modal' -import {versionState} from "../../lib/upload"; +import {eotMessage, versionState} from "../../lib/upload"; import VersionWarningModal from "../popups-etc/version-warning"; +import OutOfSpaceModal from "../popups-etc/out-of-space"; import RoomPasswordPopup from "../popups-etc/room-password"; import KeyBindingsModal from '../popups-etc/KeyBindingsModal' +import { PersistenceStateKind } from "../../lib/state"; let screenShakeSignal: Signal | null = null; @@ -168,7 +170,7 @@ export const saveGame = debounce( saveQueueSize--; if ( saveQueueSize === 0 && - persistenceState.value.kind === "PERSISTED" + persistenceState.value.kind === PersistenceStateKind.PERSISTED ) { persistenceState.value = { ...persistenceState.value, @@ -186,7 +188,7 @@ export async function startSavingGame(persistenceState: Signal const attemptSaveGame = async () => { try { const game = - persistenceState.value.kind === "PERSISTED" && + persistenceState.value.kind === PersistenceStateKind.PERSISTED && persistenceState.value.game !== "LOADING" ? persistenceState.value.game : null; @@ -216,7 +218,7 @@ export async function startSavingGame(persistenceState: Signal await new Promise((resolve) => setTimeout(resolve, 2000)); } console.log("SUCCESS SAVE") - if (persistenceState.value.kind === "PERSISTED") + if (persistenceState.value.kind === PersistenceStateKind.PERSISTED) persistenceState.value = { ...persistenceState.value, cloudSaveState: "SAVED", @@ -224,7 +226,7 @@ export async function startSavingGame(persistenceState: Signal } const exitTutorial = (persistenceState: Signal, sessionId: string) => { - if (persistenceState.value.kind === "PERSISTED") { + if (persistenceState.value.kind === PersistenceStateKind.PERSISTED) { delete persistenceState.value.tutorial; if (typeof persistenceState.value.game !== "string") { delete persistenceState.value.game.tutorialName; @@ -240,7 +242,7 @@ const exitTutorial = (persistenceState: Signal, sessionId: str saveGame(persistenceState, codeMirror.value!.state.doc.toString(), sessionId); } else { - if (persistenceState.value.kind == "SHARED") + if (persistenceState.value.kind == PersistenceStateKind.SHARED) delete persistenceState.value.tutorial; } }; @@ -445,10 +447,10 @@ export default function Editor({ persistenceState, cookies, roomState }: EditorP // Warn before leave useSignalEffect(() => { let needsWarning = false; - if (["SHARED", "IN_MEMORY"].includes(persistenceState.value.kind)) { + if ([PersistenceStateKind.SHARED, PersistenceStateKind.IN_MEMORY].includes(persistenceState.value.kind)) { needsWarning = persistenceState.value.stale; } else if ( - persistenceState.value.kind === "PERSISTED" && + persistenceState.value.kind === PersistenceStateKind.PERSISTED && persistenceState.value.stale && persistenceState.value.game !== "LOADING" ) { @@ -490,17 +492,23 @@ export default function Editor({ persistenceState, cookies, roomState }: EditorP let initialCode = ""; let gameId = ''; if ( - persistenceState.value.kind === "PERSISTED" && + persistenceState.value.kind === PersistenceStateKind.PERSISTED && persistenceState.value.game !== "LOADING" ){ initialCode = persistenceState.value.game.code; gameId = persistenceState.value.game?.id ?? ''; } - else if (persistenceState.value.kind === "SHARED") + else if (persistenceState.value.kind === PersistenceStateKind.SHARED) initialCode = persistenceState.value.code; - else if (persistenceState.value.kind === "IN_MEMORY") + else if (persistenceState.value.kind === PersistenceStateKind.IN_MEMORY) initialCode = localStorage.getItem("sprigMemory") ?? defaultExampleCode; + else if (isNewSaveStrat.value && persistenceState.value.kind === PersistenceStateKind.COLLAB){ + if(typeof persistenceState.value.game !== 'string') + // @ts-ignore + initialCode = persistenceState.value.game.game.code; + } + // Firefox has weird tab restoring logic. When you, for example, Ctrl-Shift-T, it opens // a kinda broken cached version of the page. And for some reason this reverts the CM // state. Seems like manipulating Preact state is unpredictable, but sessionStorage is @@ -520,232 +528,240 @@ export default function Editor({ persistenceState, cookies, roomState }: EditorP } }); }, [initialCode]); - if(isNewSaveStrat.value && persistenceState.value.kind === "COLLAB" && typeof persistenceState.value.game === 'string') - return ( - - ) - else - return ( -
- - -
-
- { - codeMirror.value = editor; - setTimeout(() => foldAllTemplateLiterals(), 100); // Fold after the document is parsed (gross) - }} - onRunShortcut={onRun} - onCodeChange={() => { + + return ( + isNewSaveStrat.value && persistenceState.value.kind === PersistenceStateKind.COLLAB && typeof persistenceState.value.game === 'string' + ? + (<> + + ) + : + ( +
+ + +
+
+ { + codeMirror.value = editor; + setTimeout(() => foldAllTemplateLiterals(), 100); // Fold after the document is parsed (gross) + }} + onRunShortcut={onRun} + onCodeChange={() => { + persistenceState.value = { + ...persistenceState.value, + stale: true, + }; + if (persistenceState.value.kind === PersistenceStateKind.PERSISTED || persistenceState.value.kind === PersistenceStateKind.COLLAB) { persistenceState.value = { ...persistenceState.value, - stale: true, + cloudSaveState: "SAVING", }; - if (persistenceState.value.kind === "PERSISTED") { - persistenceState.value = { - ...persistenceState.value, - cloudSaveState: "SAVING", - }; - if(!isNewSaveStrat.value) - saveGame(persistenceState, codeMirror.value!.state.doc.toString(), sessionId); - } - - if (persistenceState.value.kind === "IN_MEMORY") { - localStorage.setItem( - "sprigMemory", - codeMirror.value!.state.doc.toString() - ); - } - }} - /> - {errorLog.value.length > 0 && ( -
- - - {errorLog.value.map((error, i) => ( -
- {error.description} -
- ))} -
- )} -
- -
{ - document.documentElement.style.cursor = "col-resize"; - resizeState.value = { - startMousePos: event.clientX, - startValue: realOutputAreaSize.value, - }; - window.addEventListener( - "mouseup", - () => { - resizeState.value = null; - document.documentElement.style.cursor = ""; - }, - { once: true } - ); + console.log("SAVING") + if(!isNewSaveStrat.value) + saveGame(persistenceState, codeMirror.value!.state.doc.toString(), sessionId); + } + + if (persistenceState.value.kind === PersistenceStateKind.IN_MEMORY) { + localStorage.setItem( + "sprigMemory", + codeMirror.value!.state.doc.toString() + ); + } }} /> + {errorLog.value.length > 0 && ( +
+ -
-
-
- 0 ? "shake" : "" - }`} - style={ outputArea.current ? { - height: canvasScreenSize.value.height, - maxHeight: canvasScreenSize.value.maxHeight, - width: (1.25 * canvasScreenSize.value.height), - maxWidth: "100%", - }: { } } - ref={screen} - tabIndex={0} - width="1000" - height="800" - /> -
-
- - -
- (Sprig screen is 1/8" / 160×128 px) + {errorLog.value.map((error, i) => ( +
+ {error.description}
-
+ ))}
-
-
+ +
{ + document.documentElement.style.cursor = "col-resize"; + resizeState.value = { + startMousePos: event.clientX, + startValue: realOutputAreaSize.value, + }; + window.addEventListener( + "mouseup", + () => { + resizeState.value = null; + document.documentElement.style.cursor = ""; + }, + { once: true } + ); + }} + /> + +
+
+
+ 0 ? "shake" : "" }`} - onMouseDown={(event) => { - document.documentElement.style.cursor = - "col-resize"; - horizontalResizeState.value = { - startMousePos: event.clientY, - startValue: realHelpAreaSize.value, - }; - window.addEventListener( - "mouseup", - () => { - horizontalResizeState.value = null; - document.documentElement.style.cursor = - ""; - }, - { once: true } - ); - }} + style={ outputArea.current ? { + height: canvasScreenSize.value.height, + maxHeight: canvasScreenSize.value.maxHeight, + width: (1.25 * canvasScreenSize.value.height), + maxWidth: "100%", + }: { } } + ref={screen} + tabIndex={0} + width="1000" + height="800" /> -
+
+ + +
+ (Sprig screen is 1/8" / 160×128 px) +
+
+
+
+
{ + document.documentElement.style.cursor = + "col-resize"; + horizontalResizeState.value = { + startMousePos: event.clientY, + startValue: realHelpAreaSize.value, + }; + window.addEventListener( + "mouseup", + () => { + horizontalResizeState.value = null; + document.documentElement.style.cursor = + ""; + }, + { once: true } + ); + }} + /> +
+ {!( + (persistenceState.value.kind === PersistenceStateKind.SHARED || + persistenceState.value.kind === + PersistenceStateKind.PERSISTED) && + persistenceState.value.tutorial + ) && ( + + )} + + {(persistenceState.value.kind === PersistenceStateKind.SHARED || + persistenceState.value.kind === PersistenceStateKind.PERSISTED) && + persistenceState.value.tutorial && ( )} - - {(persistenceState.value.kind === "SHARED" || - persistenceState.value.kind === "PERSISTED") && - persistenceState.value.tutorial && ( - - )} -
+
- - {persistenceState.value.kind === "IN_MEMORY" && - persistenceState.value.showInitialWarning && ( - - )} - - {versionState.value != "OK" && ( - + + {persistenceState.value.kind === PersistenceStateKind.IN_MEMORY && + persistenceState.value.showInitialWarning && ( + )} - {showingTutorialWarning.value && ( - exitTutorial(persistenceState, sessionId)} - showingTutorialWarning={showingTutorialWarning} - /> - )} - - - -
- ); + {versionState.value != "OK" && ( + + )} + + {eotMessage.value && eotMessage.value.status != "ALL_GOOD" && ( + + )} + + {showingTutorialWarning.value && ( + exitTutorial(persistenceState, sessionId)} + showingTutorialWarning={showingTutorialWarning} + /> + )} + + + +
+ )); } diff --git a/src/components/codemirror-widgets/open-button.tsx b/src/components/codemirror-widgets/open-button.tsx index ede25dd23c..f31d46135d 100644 --- a/src/components/codemirror-widgets/open-button.tsx +++ b/src/components/codemirror-widgets/open-button.tsx @@ -6,30 +6,17 @@ import { runGameHeadless } from '../../lib/engine' interface OpenButtonProps { kind: EditorKind text: string + range: { from: number, to: number }, } export default function OpenButton(props: OpenButtonProps) { const { label, icon: Icon } = editors[props.kind] - return ( ) -} \ No newline at end of file +} diff --git a/src/components/codemirror.tsx b/src/components/codemirror.tsx index e805a20e99..3e5da8b40d 100644 --- a/src/components/codemirror.tsx +++ b/src/components/codemirror.tsx @@ -12,6 +12,7 @@ import { WebrtcProvider } from 'y-webrtc' import * as Y from 'yjs' import { startSavingGame } from './big-interactive-pages/editor' import { yCollab } from 'y-codemirror.next' +import { PersistenceStateKind } from '../lib/state' interface CodeMirrorProps { class?: string | undefined @@ -86,12 +87,12 @@ export default function CodeMirror(props: CodeMirrorProps) { if(props.persistenceState === undefined) throw new Error("Persistence state is undefined"); if(state.saved == "saved"){ let persistenceState = props.persistenceState.peek(); - if(persistenceState.kind === "PERSISTED" && persistenceState.game !== "LOADING"){ + if((persistenceState.kind === PersistenceStateKind.PERSISTED || persistenceState.kind === PersistenceStateKind.COLLAB) && persistenceState.game !== "LOADING"){ props.persistenceState.value = {...persistenceState, cloudSaveState: "SAVED"}; } } else if(state.saved == "error"){ let persistenceState = props.persistenceState.peek(); - if(persistenceState.kind === "PERSISTED" && persistenceState.game !== "LOADING"){ + if((persistenceState.kind === PersistenceStateKind.PERSISTED || persistenceState.kind === PersistenceStateKind.COLLAB) && persistenceState.game !== "LOADING"){ props.persistenceState.value = {...persistenceState, cloudSaveState: "ERROR"}; } } @@ -134,14 +135,14 @@ export default function CodeMirror(props: CodeMirrorProps) { signaling: [ import.meta.env.PUBLIC_SIGNALING_SERVER_HOST as string, ], - // password: ((persistenceState.kind === "PERSISTED" && persistenceState.game !== "LOADING" && persistenceState.game.password) ? persistenceState.game.password : "") + // password: ((persistenceState.kind === PersistenceStateKind.PERSISTED && persistenceState.game !== "LOADING" && persistenceState.game.password) ? persistenceState.game.password : "") }); //get yjs document from provider let ytext = yDoc.getText("codemirror"); const yUndoManager = new Y.UndoManager(ytext); yProviderAwarenessSignal.value = provider.awareness - const isHost = ((persistenceState.kind == "PERSISTED" && persistenceState.game != "LOADING") && persistenceState.session?.user.id === persistenceState.game.ownerId) + const isHost = ((persistenceState.kind == PersistenceStateKind.PERSISTED && persistenceState.game != "LOADING") && persistenceState.session?.user.id === persistenceState.game.ownerId) provider.awareness.setLocalStateField("user", { name: props.persistenceState.peek().session?.user.email ?? @@ -197,7 +198,7 @@ export default function CodeMirror(props: CodeMirrorProps) { if(props.roomState) props.roomState.value.participants = participants; let persistenceState = props.persistenceState.peek(); - if(persistenceState.kind === "PERSISTED" && persistenceState.game !== "LOADING"){ + if(persistenceState.kind === PersistenceStateKind.PERSISTED && persistenceState.game !== "LOADING"){ if(persistenceState.game.ownerId === persistenceState.session?.user.id){ startSavingGame(props.persistenceState, props.roomState); } diff --git a/src/components/design-system/inline-input.tsx b/src/components/design-system/inline-input.tsx index 2925cd5d94..e279687206 100644 --- a/src/components/design-system/inline-input.tsx +++ b/src/components/design-system/inline-input.tsx @@ -7,6 +7,8 @@ interface InlineInputProps { onChange: (value: string) => void placeholder: string; autofocus?: boolean; + // This was introduced to make sure it looks the same even when the user shouldn't be able to edit the name of the game + disabled?: boolean; } export default function InlineInput(props: InlineInputProps) { @@ -30,6 +32,7 @@ export default function InlineInput(props: InlineInputProps) { onInput={event => props.onChange(event.currentTarget.value)} style={{ width: width.value + 30 }} placeholder={props.placeholder} + disabled={props.disabled === true} />