From 1e48e3a45402f548057282f246c5607d82a5489b Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 13 Feb 2019 10:12:02 +0100
Subject: [PATCH 001/122] a

---
 codejam/src/util/input.rs                     |    4 +-
 codejam_2008/.gitignore                       |    2 +
 codejam_2008/Cargo.toml                       |   10 +
 codejam_2008/format.bat                       |    1 +
 codejam_2008/rustfmt.toml                     |    4 +
 codejam_2008/src/main.rs                      |   45 +
 .../src/y2008qual/A-large-practice.in         | 6023 +++++++++++++++++
 .../src/y2008qual/A-large-practice.out        |   20 +
 .../src/y2008qual/A-small-practice.in         | 1343 ++++
 .../src/y2008qual/A-small-practice.out        |   20 +
 codejam_2008/src/y2008qual/a.rs               |   70 +
 codejam_2008/src/y2008qual/mod.rs             |    1 +
 12 files changed, 7541 insertions(+), 2 deletions(-)
 create mode 100644 codejam_2008/.gitignore
 create mode 100644 codejam_2008/Cargo.toml
 create mode 100644 codejam_2008/format.bat
 create mode 100644 codejam_2008/rustfmt.toml
 create mode 100644 codejam_2008/src/main.rs
 create mode 100644 codejam_2008/src/y2008qual/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008qual/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008qual/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008qual/A-small-practice.out
 create mode 100644 codejam_2008/src/y2008qual/a.rs
 create mode 100644 codejam_2008/src/y2008qual/mod.rs

diff --git a/codejam/src/util/input.rs b/codejam/src/util/input.rs
index 6d2da6a..d89bc74 100644
--- a/codejam/src/util/input.rs
+++ b/codejam/src/util/input.rs
@@ -159,10 +159,10 @@ impl<'a> InputReader<'a>
         self.s.chars().take(amt).collect::<Vec<_>>()
     }
 
-    pub fn read_string(&mut self) -> &str
+    pub fn read_string(&mut self) -> String
     {
         self.s.clear();
         self.i.read_line(&mut self.s).unwrap();
-        self.s.trim()
+        self.s.trim().to_string()
     }
 }
diff --git a/codejam_2008/.gitignore b/codejam_2008/.gitignore
new file mode 100644
index 0000000..3d6c96d
--- /dev/null
+++ b/codejam_2008/.gitignore
@@ -0,0 +1,2 @@
+log
+.idea
\ No newline at end of file
diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
new file mode 100644
index 0000000..5b56be8
--- /dev/null
+++ b/codejam_2008/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "codejam_2008"
+version = "0.1.0"
+authors = ["eric7237cire <eric7237cire@gmail.com>"]
+edition = "2018"
+
+[dependencies]
+rust-algorithm-problems = { path = "../codejam" }
+log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
+itertools = "*"
\ No newline at end of file
diff --git a/codejam_2008/format.bat b/codejam_2008/format.bat
new file mode 100644
index 0000000..0b7cef2
--- /dev/null
+++ b/codejam_2008/format.bat
@@ -0,0 +1 @@
+cargo +nightly fmt
\ No newline at end of file
diff --git a/codejam_2008/rustfmt.toml b/codejam_2008/rustfmt.toml
new file mode 100644
index 0000000..c66d0fe
--- /dev/null
+++ b/codejam_2008/rustfmt.toml
@@ -0,0 +1,4 @@
+brace_style = "AlwaysNextLine"
+fn_single_line = false
+newline_style = "Unix"
+# control_brace_style = "AlwaysNextLine"
\ No newline at end of file
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
new file mode 100644
index 0000000..b1672ce
--- /dev/null
+++ b/codejam_2008/src/main.rs
@@ -0,0 +1,45 @@
+//#![allow(non_snake_case)]
+mod y2008qual;
+
+
+extern crate codejam;
+
+/*#[macro_use]
+extern crate itertools;*/
+
+/*#[macro_use]
+extern crate log;*/
+
+use codejam::util::log::init_log;
+
+pub fn run_y2008_roundQual()
+{
+    
+}
+
+pub fn run_y2008_round1A()
+{
+
+}
+
+pub fn run_y2008_round1B()
+{
+
+}
+
+pub fn run_y2008_round1C()
+{
+
+}
+
+pub fn run_y2008_round2()
+{
+
+}
+
+fn main()
+{
+    init_log();
+
+    y2008qual::a::solve_all_cases();
+}
diff --git a/codejam_2008/src/y2008qual/A-large-practice.in b/codejam_2008/src/y2008qual/A-large-practice.in
new file mode 100644
index 0000000..66b2836
--- /dev/null
+++ b/codejam_2008/src/y2008qual/A-large-practice.in
@@ -0,0 +1,6023 @@
+20
+2
+YouGoogle
+Googol Fiji
+0
+2
+Googol Malta
+Googol Sweden
+5
+Googol Malta
+Googol Malta
+Googol Malta
+Googol Malta
+Googol Malta
+3
+Googol Switzerland
+Alta View
+Googol Bosnia and Herzegovina
+12
+Alta View
+Googol Switzerland
+Alta View
+Alta View
+Alta View
+Alta View
+Googol Bosnia and Herzegovina
+Googol Bosnia and Herzegovina
+Googol Bosnia and Herzegovina
+Googol Bosnia and Herzegovina
+Googol Switzerland
+Googol Bosnia and Herzegovina
+3
+Tra Tra
+Googol Timor Leste
+Googol Morocco
+7
+Tra Tra
+Googol Timor Leste
+Tra Tra
+Googol Timor Leste
+Googol Morocco
+Googol Morocco
+Googol Morocco
+3
+Googol Greece
+Googol Finland
+Googol Libya
+19
+Googol Finland
+Googol Greece
+Googol Finland
+Googol Finland
+Googol Finland
+Googol Finland
+Googol Libya
+Googol Libya
+Googol Libya
+Googol Libya
+Googol Greece
+Googol Libya
+Googol Finland
+Googol Greece
+Googol Finland
+Googol Greece
+Googol Libya
+Googol Libya
+Googol Libya
+3
+Googol Bulgaria
+Googol
+Alibubu
+19
+Googol
+Googol Bulgaria
+Googol
+Googol Bulgaria
+Alibubu
+Alibubu
+Alibubu
+Googol
+Googol Bulgaria
+Googol
+Googol
+Googol
+Googol
+Alibubu
+Alibubu
+Alibubu
+Alibubu
+Googol Bulgaria
+Alibubu
+2
+Googol Portugal
+CoolBot
+1000
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+Googol Portugal
+CoolBot
+3
+Googol Egypt
+HNH
+Googol Mauritius
+998
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+Googol Mauritius
+Googol Egypt
+HNH
+2
+A
+B
+20
+B
+A
+B
+B
+B
+B
+A
+B
+A
+B
+B
+A
+B
+A
+A
+A
+B
+A
+B
+B
+100
+Googol Pitcairn Islands
+Googol Ethiopia
+Googol Oman
+Googol Namibia
+Googol Colombia
+Googol Niue
+Googol New Zealand
+Googol Indonesia
+Info Seeker
+Googol Switzerland
+Quantum
+Googol Pakistan
+Googol Thailand
+Googol Greenland
+Googol Australia
+Googol Armenia
+Googol San Marino
+Googol Republic of the Congo
+Googol Hungary
+Northern Lightenning
+Googol Uruguay
+DontAsk
+Tomato
+Googol Iceland
+Googol Burundi
+All Thee Web
+Googol British Virgin Islands
+Googol Timor Leste
+Googol Haiti
+Googol Liechtenstein
+AskMe
+Googol Fiji
+Googol Cuba
+Googol India
+Googol Mauritius
+Googol Honduras
+Googol France
+Googol Belgium
+Time Warmer
+Googol Senegal
+Googol Panama
+Googol Jordon
+Googol Rwanda
+WebCrawlee
+Vivasimo
+Googol Poland
+Googol Argentina
+Googol Bangladesh
+HNH
+Googol Belize
+Googol Peru
+Googol
+Googol Latvia
+Googol South Korea
+YouGoogle
+Googol Bahrain
+Googol US Virgin Islands
+NSM Search
+Googol Venezuela
+Googol Luxembourg
+Googol China
+Googol Ivory Coast Cote DIvoire
+Googol Holland
+Gurujh
+Googol Malta
+Googol Guernsey
+Index
+Googol Puerto Rico
+Alibubu
+Googol Bolivia
+Bad Search
+Googol Chile
+Googol Solomon Islands
+Googol Vanuatu
+Googol Seychelles
+fBay
+MeGoogle
+Googol Morocco
+Alta View
+Googol Egypt
+Googol Greece
+Googol Hong Kong
+Googol Malaysia
+Googol Bulgaria
+Googol Micronesia
+Googol Dominican Republic
+Megallan
+Googol Canada
+Googol American Samoa
+Googol Trinidad and Tobago
+Dont Ask Me
+Googol The Gambia
+Googol Libya
+Googol Uzbekistan
+Googol USA
+Googol Mexico
+Googol Norfolk Island
+Googol Dominica
+Googol Kenya
+Googol Austria
+1000
+Googol Trinidad and Tobago
+Quantum
+AskMe
+Googol Vanuatu
+Googol USA
+Bad Search
+Googol American Samoa
+Googol Timor Leste
+Googol Panama
+Googol Bahrain
+Googol Argentina
+Googol Vanuatu
+Gurujh
+Googol US Virgin Islands
+NSM Search
+Googol Seychelles
+DontAsk
+Gurujh
+Googol Austria
+Googol Burundi
+Googol Vanuatu
+Googol Dominican Republic
+Googol Bolivia
+Googol Hong Kong
+Info Seeker
+Googol Luxembourg
+Quantum
+Googol Hungary
+Googol Puerto Rico
+Googol Guernsey
+Googol Hungary
+Info Seeker
+fBay
+Googol Pitcairn Islands
+Googol Hong Kong
+DontAsk
+Googol Chile
+DontAsk
+HNH
+Googol Pakistan
+MeGoogle
+Googol Argentina
+Googol France
+Googol Panama
+Googol Bahrain
+Googol Uzbekistan
+Index
+MeGoogle
+Googol US Virgin Islands
+Googol Guernsey
+Googol Latvia
+Googol Hong Kong
+Googol Namibia
+Googol Vanuatu
+Googol Armenia
+Googol Pakistan
+Googol Cuba
+All Thee Web
+Googol Hong Kong
+Googol Austria
+Dont Ask Me
+Googol Latvia
+Googol Luxembourg
+Googol Hungary
+Googol Latvia
+Googol Libya
+Googol Senegal
+fBay
+Googol Greenland
+Googol Panama
+Megallan
+Dont Ask Me
+Megallan
+fBay
+AskMe
+Googol Uzbekistan
+Alibubu
+HNH
+Googol Bolivia
+Googol Morocco
+Index
+Googol Vanuatu
+Quantum
+Googol Bolivia
+Googol Bangladesh
+All Thee Web
+Googol Cuba
+Googol Egypt
+Googol Namibia
+Googol Australia
+Googol Fiji
+Googol Uzbekistan
+Index
+Googol Rwanda
+Gurujh
+Bad Search
+Googol Honduras
+Googol Bahrain
+Googol Argentina
+HNH
+Googol Mexico
+Googol Micronesia
+Dont Ask Me
+Googol India
+Googol Luxembourg
+Googol Solomon Islands
+Googol Timor Leste
+Googol Haiti
+DontAsk
+HNH
+NSM Search
+Googol Senegal
+Googol Seychelles
+Googol Puerto Rico
+Info Seeker
+DontAsk
+Googol Poland
+Googol Libya
+Googol Latvia
+HNH
+Googol New Zealand
+Googol Honduras
+Googol Uzbekistan
+Googol Burundi
+Alta View
+NSM Search
+Googol Bangladesh
+Googol Greenland
+Googol Thailand
+Googol Uzbekistan
+Googol Greenland
+Googol Luxembourg
+Googol Morocco
+Googol Colombia
+Vivasimo
+Googol Trinidad and Tobago
+Googol Haiti
+Googol Iceland
+Googol Republic of the Congo
+Googol Belize
+Googol Solomon Islands
+Googol British Virgin Islands
+Googol American Samoa
+Googol Argentina
+Googol Uzbekistan
+HNH
+Northern Lightenning
+Time Warmer
+Googol Jordon
+Googol Chile
+Time Warmer
+Googol Austria
+Googol Indonesia
+Googol Cuba
+MeGoogle
+Googol Dominican Republic
+Googol Trinidad and Tobago
+Googol Iceland
+Googol Peru
+Googol South Korea
+Alibubu
+Googol Armenia
+Googol Thailand
+Googol Dominica
+Googol Chile
+Info Seeker
+Megallan
+Googol Pitcairn Islands
+Googol Cuba
+Googol Namibia
+Googol Ethiopia
+Googol US Virgin Islands
+Googol Hong Kong
+Googol Rwanda
+Googol Oman
+Googol Timor Leste
+Dont Ask Me
+Googol Vanuatu
+Googol Guernsey
+Googol Bulgaria
+Vivasimo
+Googol US Virgin Islands
+Googol Honduras
+Googol Namibia
+Googol American Samoa
+Googol Pakistan
+Googol American Samoa
+Googol Liechtenstein
+Googol Mauritius
+Dont Ask Me
+Googol Malaysia
+YouGoogle
+Googol Venezuela
+Googol Argentina
+Googol
+Googol Liechtenstein
+YouGoogle
+Time Warmer
+Googol Liechtenstein
+Time Warmer
+Googol Uzbekistan
+Googol Bulgaria
+Googol USA
+fBay
+All Thee Web
+HNH
+Googol Oman
+Googol Puerto Rico
+DontAsk
+Northern Lightenning
+Googol Namibia
+Index
+fBay
+Time Warmer
+Googol Bolivia
+Gurujh
+Googol Belize
+Quantum
+Googol Libya
+Googol Honduras
+Googol Latvia
+Googol British Virgin Islands
+Googol Trinidad and Tobago
+Quantum
+Googol Solomon Islands
+Googol Panama
+Googol Libya
+Googol Egypt
+AskMe
+DontAsk
+Googol Republic of the Congo
+Googol Burundi
+Googol US Virgin Islands
+Googol Thailand
+Googol Austria
+Googol Hong Kong
+Googol Thailand
+Googol South Korea
+Googol Ethiopia
+Googol Mauritius
+Googol Solomon Islands
+Googol Colombia
+Googol Latvia
+HNH
+Googol Rwanda
+Googol Vanuatu
+Gurujh
+Googol The Gambia
+Googol Honduras
+Info Seeker
+Alta View
+Googol American Samoa
+Googol Mauritius
+Googol Puerto Rico
+Googol Peru
+Googol Luxembourg
+Googol Luxembourg
+Googol Rwanda
+Dont Ask Me
+Dont Ask Me
+Googol San Marino
+Googol Indonesia
+Index
+Googol Solomon Islands
+Googol Chile
+Googol Guernsey
+YouGoogle
+Googol Micronesia
+Googol Hungary
+Googol Indonesia
+Bad Search
+Googol Rwanda
+Googol Pakistan
+Tomato
+Googol Rwanda
+Googol South Korea
+Googol Mexico
+Googol New Zealand
+Googol Norfolk Island
+Googol Fiji
+Googol Australia
+Googol Seychelles
+Northern Lightenning
+Googol Pitcairn Islands
+Googol Uzbekistan
+DontAsk
+Googol Pakistan
+Googol Colombia
+Googol Malta
+Googol Ethiopia
+Googol Argentina
+Googol Cuba
+Googol Ivory Coast Cote DIvoire
+Googol Thailand
+Googol Colombia
+Googol Micronesia
+Googol Liechtenstein
+Quantum
+Googol Uruguay
+Googol Austria
+Googol Republic of the Congo
+Dont Ask Me
+Googol Rwanda
+Googol Haiti
+Googol Thailand
+Googol Micronesia
+Googol India
+Info Seeker
+Googol Rwanda
+Googol Liechtenstein
+Googol Senegal
+Googol US Virgin Islands
+Googol Bahrain
+Quantum
+Googol Switzerland
+HNH
+Googol Bulgaria
+Googol Uruguay
+Googol Niue
+Googol Austria
+Googol Seychelles
+Googol
+Googol Fiji
+Googol Honduras
+Googol Malta
+Googol France
+Northern Lightenning
+Googol Poland
+Googol Kenya
+Googol Panama
+Googol Poland
+Googol San Marino
+AskMe
+Googol Canada
+Googol Norfolk Island
+Googol Mexico
+Googol Iceland
+Googol Malaysia
+Googol Namibia
+Index
+Googol Pakistan
+Googol USA
+Googol Seychelles
+Northern Lightenning
+Googol US Virgin Islands
+Googol Bulgaria
+Googol Puerto Rico
+Googol The Gambia
+Googol US Virgin Islands
+Googol Burundi
+Googol The Gambia
+AskMe
+MeGoogle
+Tomato
+Googol Guernsey
+Googol Libya
+Quantum
+Googol France
+Googol Belgium
+Googol Switzerland
+MeGoogle
+Googol Malaysia
+Googol Morocco
+Googol Luxembourg
+DontAsk
+All Thee Web
+YouGoogle
+Googol Poland
+Googol Indonesia
+Googol Switzerland
+Googol Pakistan
+Northern Lightenning
+Googol Bahrain
+Googol Belgium
+Time Warmer
+Googol Pakistan
+DontAsk
+NSM Search
+Googol Oman
+Googol Liechtenstein
+Googol Malaysia
+Googol Uzbekistan
+Googol Luxembourg
+Quantum
+Alibubu
+MeGoogle
+Googol Oman
+Alta View
+Googol Thailand
+Googol Senegal
+Googol Senegal
+Googol Jordon
+Googol Seychelles
+Googol San Marino
+Googol Pitcairn Islands
+Googol Mexico
+Googol Rwanda
+Googol New Zealand
+Googol Libya
+Googol Belize
+Googol Armenia
+Googol Bahrain
+Googol Uruguay
+Bad Search
+Googol Uzbekistan
+Quantum
+Googol India
+Index
+Alibubu
+Googol Canada
+Googol Mexico
+Googol Oman
+Googol India
+Googol New Zealand
+Googol Thailand
+Googol Ethiopia
+Googol Malaysia
+Index
+Googol Fiji
+Googol Argentina
+NSM Search
+Googol Chile
+Googol Canada
+Googol Fiji
+Googol Senegal
+Googol Canada
+Googol Egypt
+Googol India
+Googol Uzbekistan
+Googol Chile
+Googol Bulgaria
+Googol China
+Googol Timor Leste
+Googol Bahrain
+AskMe
+Googol Solomon Islands
+Index
+Gurujh
+Time Warmer
+Megallan
+Googol
+Googol Dominican Republic
+Googol Panama
+Googol Micronesia
+Googol The Gambia
+Googol Colombia
+Googol Belgium
+All Thee Web
+Bad Search
+Alibubu
+Googol Chile
+Googol Timor Leste
+Googol The Gambia
+Googol Luxembourg
+Googol Pakistan
+Googol Fiji
+Googol Kenya
+Dont Ask Me
+Googol Malta
+Vivasimo
+Googol Greenland
+Googol Austria
+Googol Colombia
+Googol Libya
+Googol Indonesia
+Googol Canada
+Googol Malta
+Googol Vanuatu
+Googol Oman
+YouGoogle
+Googol Pakistan
+Googol Niue
+Googol Senegal
+Googol
+Googol Jordon
+Googol Malaysia
+Googol Bahrain
+Alta View
+Googol Indonesia
+Googol Morocco
+Googol Austria
+Googol Egypt
+Googol US Virgin Islands
+Dont Ask Me
+Dont Ask Me
+Googol Puerto Rico
+Googol Vanuatu
+Googol American Samoa
+Googol Switzerland
+Dont Ask Me
+Googol Cuba
+Googol Iceland
+Googol Trinidad and Tobago
+Googol Trinidad and Tobago
+Googol Puerto Rico
+Googol Norfolk Island
+MeGoogle
+Googol Micronesia
+DontAsk
+Alta View
+Time Warmer
+Googol Cuba
+Googol Micronesia
+AskMe
+Googol Honduras
+Googol Morocco
+Googol Malta
+Dont Ask Me
+Googol US Virgin Islands
+Googol Solomon Islands
+Googol Puerto Rico
+Googol Bahrain
+Googol Namibia
+Googol Burundi
+Googol Dominica
+Googol Uzbekistan
+WebCrawlee
+Googol Iceland
+Googol India
+Googol South Korea
+Googol Greenland
+Googol Hungary
+Googol Haiti
+YouGoogle
+Googol Luxembourg
+Googol Mexico
+Googol Namibia
+Googol Honduras
+Googol Egypt
+Googol Burundi
+Googol Guernsey
+Bad Search
+Googol Switzerland
+Googol Ethiopia
+Googol Pitcairn Islands
+Vivasimo
+Googol Egypt
+Googol Malta
+Googol Canada
+Googol Canada
+Googol American Samoa
+YouGoogle
+Googol USA
+WebCrawlee
+AskMe
+Googol The Gambia
+Googol American Samoa
+Googol British Virgin Islands
+Googol Australia
+Tomato
+Googol Egypt
+Googol Egypt
+Googol Libya
+Googol Luxembourg
+Googol Mauritius
+Googol
+Googol New Zealand
+Googol Belgium
+Time Warmer
+Megallan
+Googol Greenland
+Googol Bahrain
+Info Seeker
+Tomato
+NSM Search
+Info Seeker
+Northern Lightenning
+Googol American Samoa
+Googol Burundi
+Googol New Zealand
+Googol Timor Leste
+Googol Guernsey
+Googol China
+DontAsk
+Info Seeker
+WebCrawlee
+Googol Malta
+Googol Dominica
+Googol Bolivia
+Googol Egypt
+Googol Chile
+Googol Pitcairn Islands
+Quantum
+Googol Armenia
+Googol Pakistan
+Vivasimo
+Index
+Googol Republic of the Congo
+Googol Hong Kong
+Googol US Virgin Islands
+Googol Bahrain
+Googol Bangladesh
+Googol Pakistan
+Gurujh
+Googol Bolivia
+Googol Uruguay
+Googol Iceland
+Googol American Samoa
+Googol China
+Googol Pitcairn Islands
+Googol USA
+Googol Canada
+Googol Guernsey
+Googol Indonesia
+Info Seeker
+All Thee Web
+Googol Oman
+Googol Vanuatu
+Tomato
+Googol Iceland
+Googol Colombia
+Googol Poland
+fBay
+Googol Australia
+Googol China
+Megallan
+Googol Luxembourg
+Alta View
+Googol Bahrain
+Googol Libya
+Googol Mauritius
+Googol Pakistan
+Googol Senegal
+Googol Kenya
+Googol Seychelles
+Googol Ivory Coast Cote DIvoire
+Googol Hungary
+Googol Peru
+Googol Ethiopia
+Googol Fiji
+Googol Peru
+HNH
+Googol Hungary
+Googol Armenia
+Googol Indonesia
+Googol Timor Leste
+Googol Libya
+Googol Switzerland
+Googol Latvia
+Googol Puerto Rico
+Googol Micronesia
+Googol US Virgin Islands
+Googol Thailand
+Googol Pakistan
+Tomato
+All Thee Web
+Googol Belize
+Googol India
+Googol Namibia
+Googol Colombia
+Alta View
+Dont Ask Me
+Googol Puerto Rico
+Googol Bolivia
+Googol Panama
+Googol USA
+AskMe
+Quantum
+Vivasimo
+Googol Micronesia
+Googol Jordon
+Googol USA
+Googol Cuba
+Googol China
+Googol Ivory Coast Cote DIvoire
+Googol Senegal
+Googol Senegal
+Googol South Korea
+Googol Pitcairn Islands
+Googol The Gambia
+Googol Uruguay
+Googol France
+Googol Austria
+Googol Dominican Republic
+Googol Bangladesh
+Googol Vanuatu
+Quantum
+Googol Norfolk Island
+Googol Indonesia
+Googol Guernsey
+Googol Latvia
+Googol Belgium
+Googol Indonesia
+Googol Uruguay
+Googol New Zealand
+Googol Bangladesh
+Index
+Googol Trinidad and Tobago
+Googol Venezuela
+Quantum
+Googol Vanuatu
+Googol
+Googol US Virgin Islands
+Googol Niue
+Googol Pakistan
+Googol Bolivia
+Googol Norfolk Island
+Googol Oman
+Googol Seychelles
+Googol Norfolk Island
+Googol Uzbekistan
+Googol Mexico
+Googol Micronesia
+Vivasimo
+Googol Greece
+Googol Fiji
+Bad Search
+Googol Rwanda
+Googol Egypt
+Googol Liechtenstein
+Googol Luxembourg
+Googol Bulgaria
+Index
+Googol Puerto Rico
+Googol Bahrain
+Googol Solomon Islands
+Index
+DontAsk
+Googol Ivory Coast Cote DIvoire
+MeGoogle
+Googol Bulgaria
+Googol Mauritius
+Googol Haiti
+Googol Senegal
+Googol The Gambia
+Googol Senegal
+Googol China
+Googol Canada
+Googol Rwanda
+Googol Honduras
+Googol Honduras
+Googol Canada
+AskMe
+Northern Lightenning
+Googol Micronesia
+Googol Holland
+Googol Oman
+YouGoogle
+Googol US Virgin Islands
+Googol Hong Kong
+Googol Honduras
+Googol Armenia
+Googol Guernsey
+Googol Ethiopia
+Googol Mauritius
+Googol Uruguay
+All Thee Web
+Googol Ethiopia
+Googol USA
+Googol Senegal
+Googol Morocco
+Googol Morocco
+All Thee Web
+NSM Search
+Googol Bolivia
+Googol Bolivia
+Googol Dominica
+Googol Liechtenstein
+Googol US Virgin Islands
+Googol The Gambia
+Googol Malta
+Googol Libya
+AskMe
+Googol Argentina
+Gurujh
+Googol Australia
+Googol China
+Index
+Googol Uruguay
+Alibubu
+Googol Bangladesh
+Googol Indonesia
+Googol France
+Googol Malta
+Info Seeker
+Tomato
+Googol Belgium
+Megallan
+Googol Iceland
+Googol Fiji
+Googol Morocco
+Googol South Korea
+Info Seeker
+YouGoogle
+Quantum
+Googol Morocco
+Googol Iceland
+Googol Luxembourg
+Googol Luxembourg
+Googol Greece
+Googol Peru
+fBay
+Googol Burundi
+Googol India
+Googol Seychelles
+Googol Canada
+Googol Bangladesh
+Megallan
+Googol South Korea
+Googol Uruguay
+Googol Bahrain
+Googol South Korea
+Googol Timor Leste
+WebCrawlee
+Googol Republic of the Congo
+Googol American Samoa
+Googol Guernsey
+YouGoogle
+Googol British Virgin Islands
+Googol Jordon
+Googol Dominican Republic
+Googol Namibia
+Googol Argentina
+Googol Argentina
+NSM Search
+Info Seeker
+fBay
+Googol Hong Kong
+Alibubu
+Megallan
+Googol Greenland
+Bad Search
+Googol Holland
+Googol Belgium
+Googol Namibia
+Googol American Samoa
+Googol Burundi
+Googol Namibia
+Googol Seychelles
+AskMe
+Googol Iceland
+Googol Hong Kong
+Googol Bulgaria
+Googol Oman
+MeGoogle
+Googol Latvia
+Googol Rwanda
+Googol Rwanda
+Googol Indonesia
+Alibubu
+Googol Bulgaria
+Vivasimo
+Googol Iceland
+Googol Hong Kong
+Googol Rwanda
+Googol Hong Kong
+Googol Trinidad and Tobago
+Googol Hungary
+Googol Australia
+NSM Search
+Googol US Virgin Islands
+Googol Timor Leste
+Googol Greece
+Googol Hungary
+Googol San Marino
+Googol Bulgaria
+Googol Venezuela
+Googol Libya
+Time Warmer
+Googol India
+Tomato
+Googol Greenland
+Index
+NSM Search
+Googol San Marino
+WebCrawlee
+Quantum
+Googol Venezuela
+Googol Belgium
+Googol Bolivia
+Googol Egypt
+Googol Solomon Islands
+Googol Greenland
+Googol Oman
+Googol South Korea
+Info Seeker
+Googol Honduras
+Googol Rwanda
+Alta View
+Googol Ethiopia
+Googol Latvia
+Googol Mauritius
+Googol Haiti
+Googol Cuba
+Googol Niue
+Googol Norfolk Island
+Googol Puerto Rico
+Gurujh
+Googol Trinidad and Tobago
+Googol New Zealand
+HNH
+Gurujh
+Northern Lightenning
+Googol Puerto Rico
+DontAsk
+Googol Honduras
+Quantum
+Googol Bulgaria
+Googol Argentina
+Googol Austria
+Googol Latvia
+Googol Morocco
+Googol Chile
+Googol Republic of the Congo
+Googol Egypt
+Googol Burundi
+All Thee Web
+Googol Armenia
+Googol Hungary
+Googol Namibia
+Alibubu
+Bad Search
+Dont Ask Me
+Googol Dominica
+Googol Oman
+Googol Mexico
+Googol Poland
+Bad Search
+Quantum
+Megallan
+Googol Haiti
+Googol Luxembourg
+Googol Peru
+Googol Bangladesh
+Googol British Virgin Islands
+Googol Iceland
+Googol Honduras
+Googol American Samoa
+Googol New Zealand
+Googol India
+Googol Canada
+Quantum
+Quantum
+Googol Venezuela
+Googol Timor Leste
+Googol Trinidad and Tobago
+Googol Mauritius
+Googol South Korea
+Googol US Virgin Islands
+Googol Latvia
+Info Seeker
+All Thee Web
+Googol Iceland
+Googol Peru
+Googol Seychelles
+Googol Morocco
+Googol Poland
+Googol Chile
+Googol Austria
+Googol US Virgin Islands
+Googol Venezuela
+Googol Timor Leste
+Googol Puerto Rico
+Googol China
+fBay
+Googol Poland
+Googol Bulgaria
+Googol Holland
+Googol India
+Googol Jordon
+Googol Mexico
+Googol Uruguay
+Googol
+Googol Niue
+AskMe
+AskMe
+Googol Argentina
+Googol San Marino
+Googol Honduras
+Googol Bahrain
+Alibubu
+Googol Norfolk Island
+Googol Cuba
+WebCrawlee
+Googol Argentina
+Googol Venezuela
+Googol Vanuatu
+Vivasimo
+Googol Liechtenstein
+Googol Solomon Islands
+Googol Latvia
+Googol Senegal
+Googol Latvia
+Northern Lightenning
+Googol Austria
+Googol Egypt
+Googol Malta
+Googol Mauritius
+Googol Jordon
+Googol Belize
+Googol Timor Leste
+Googol France
+DontAsk
+AskMe
+Googol Uzbekistan
+Googol Namibia
+Googol Ivory Coast Cote DIvoire
+Googol Senegal
+Northern Lightenning
+Googol Norfolk Island
+4
+Googol Japan
+Googol Cuba
+Googol Mauritius
+Googol Djibouti
+60
+Googol Djibouti
+Googol Mauritius
+Googol Mauritius
+Googol Mauritius
+Googol Japan
+Googol Djibouti
+Googol Mauritius
+Googol Djibouti
+Googol Djibouti
+Googol Cuba
+Googol Mauritius
+Googol Djibouti
+Googol Djibouti
+Googol Djibouti
+Googol Djibouti
+Googol Cuba
+Googol Mauritius
+Googol Cuba
+Googol Japan
+Googol Mauritius
+Googol Mauritius
+Googol Djibouti
+Googol Djibouti
+Googol Djibouti
+Googol Japan
+Googol Mauritius
+Googol Djibouti
+Googol Djibouti
+Googol Mauritius
+Googol Djibouti
+Googol Djibouti
+Googol Djibouti
+Googol Mauritius
+Googol Djibouti
+Googol Djibouti
+Googol Mauritius
+Googol Djibouti
+Googol Japan
+Googol Djibouti
+Googol Djibouti
+Googol Cuba
+Googol Mauritius
+Googol Djibouti
+Googol Mauritius
+Googol Mauritius
+Googol Cuba
+Googol Djibouti
+Googol Djibouti
+Googol Djibouti
+Googol Djibouti
+Googol Mauritius
+Googol Djibouti
+Googol Djibouti
+Googol Japan
+Googol Djibouti
+Googol Djibouti
+Googol Djibouti
+Googol Mauritius
+Googol Mauritius
+Googol Djibouti
+10
+Googol Sweden
+Googol Venezuela
+Googol Germany
+Googol Panama
+Googol Romania
+Googol Namibia
+Googol Guatemala
+Googol Morocco
+InkToMilk
+Time Warmer
+100
+Googol Panama
+Time Warmer
+Googol Morocco
+Googol Sweden
+Googol Sweden
+Googol Venezuela
+Googol Germany
+Googol Romania
+Time Warmer
+Googol Sweden
+Googol Sweden
+Googol Germany
+Time Warmer
+Time Warmer
+Googol Namibia
+Googol Romania
+Googol Guatemala
+Googol Namibia
+Googol Panama
+Googol Romania
+Googol Venezuela
+Googol Venezuela
+Googol Guatemala
+Googol Sweden
+Time Warmer
+Googol Sweden
+Googol Panama
+Googol Panama
+Googol Panama
+Googol Namibia
+Time Warmer
+Time Warmer
+Time Warmer
+InkToMilk
+InkToMilk
+Googol Morocco
+Time Warmer
+Time Warmer
+InkToMilk
+Googol Morocco
+Time Warmer
+Googol Morocco
+InkToMilk
+InkToMilk
+InkToMilk
+Googol Morocco
+Time Warmer
+Time Warmer
+Time Warmer
+Time Warmer
+Time Warmer
+Googol Venezuela
+InkToMilk
+Time Warmer
+Googol Morocco
+InkToMilk
+Googol Morocco
+Time Warmer
+InkToMilk
+Time Warmer
+Time Warmer
+Time Warmer
+InkToMilk
+Googol Morocco
+Googol Morocco
+Time Warmer
+InkToMilk
+Time Warmer
+Time Warmer
+Time Warmer
+Googol Morocco
+Googol Morocco
+Time Warmer
+Time Warmer
+InkToMilk
+InkToMilk
+Time Warmer
+Googol Morocco
+Time Warmer
+InkToMilk
+Googol Romania
+Time Warmer
+InkToMilk
+InkToMilk
+Time Warmer
+Time Warmer
+Time Warmer
+Time Warmer
+InkToMilk
+Googol Morocco
+InkToMilk
+Googol Namibia
+Time Warmer
+Time Warmer
+InkToMilk
+Googol Morocco
+InkToMilk
+Time Warmer
+Googol Namibia
+Time Warmer
+3
+Googol Switzerland
+Googol Jamaica
+Googol Puerto Rico
+30
+Googol Jamaica
+Googol Switzerland
+Googol Jamaica
+Googol Puerto Rico
+Googol Jamaica
+Googol Puerto Rico
+Googol Jamaica
+Googol Jamaica
+Googol Puerto Rico
+Googol Puerto Rico
+Googol Jamaica
+Googol Puerto Rico
+Googol Jamaica
+Googol Switzerland
+Googol Jamaica
+Googol Jamaica
+Googol Jamaica
+Googol Jamaica
+Googol Puerto Rico
+Googol Switzerland
+Googol Switzerland
+Googol Jamaica
+Googol Puerto Rico
+Googol Jamaica
+Googol Jamaica
+Googol Switzerland
+Googol Switzerland
+Googol Puerto Rico
+Googol Jamaica
+Googol Puerto Rico
+100
+Googol Guernsey
+Googol Cook Islands
+YouGoogle
+Googol Jamaica
+Googol El Salvador
+Googol Hong Kong
+Googol Oman
+Googol Dominican Republic
+Googol Malta
+AskMe
+Googol Isle of Man
+Googol Bahrain
+Googol Saint Vincent and the Grenadines
+Googol Djibouti
+Googol China
+Googol Dominica
+Googol Luxembourg
+Googol Nauru
+Info Seeker
+Wiki Search
+Googol Libya
+Dont Ask Me
+Googol Singapore
+Googol Switzerland
+Googol Iceland
+WebCrawlee
+Googol Portugal
+Googol Bolivia
+Googol Brazil
+Googol Indonesia
+Googol Australia
+Googol Micronesia
+Googol The Philippines
+Googol American Samoa
+Googol Morocco
+Googol US Virgin Islands
+Googol Malaysia
+Bad Search
+Googol Kyrgyzstan
+Googol Greece
+Googol Samoa
+Googol The Bahamas
+Googol Namibia
+Googol Romania
+Googol Latvia
+Googol Senegal
+Northern Lightenning
+Googol Vanuatu
+Googol Holland
+NSM Search
+Tra Tra
+Googol Malawi
+Googol Niue
+Googol Timor Leste
+Googol Pakistan
+Googol Finland
+Googol Saudi Arabia
+Googol Belize
+Googol Cuba
+CoolBot
+InkToMilk
+Googol Lesotho
+Googol Jordon
+Googol The Gambia
+Googol Colombia
+Googol Ethiopia
+Googol Israel
+Googol New Zealand
+Googol Costa Rica
+Googol Uganda
+HNH
+Googol Thailand
+Googol Vietnam
+Googol Botswana
+Alibubu
+Googol Paraguay
+Googol South Korea
+Googol Puerto Rico
+Googol Spain
+Googol Ecuador
+Googol Mongolia
+Googol Canada
+Googol Italy
+AliWebsite
+Time Warmer
+Googol Nicaragua
+Googol British Virgin Islands
+Excitement
+Googol Uruguay
+Googol Bulgaria
+Informatics
+Googol Uzbekistan
+Googol Azerbaijan
+Googol Panama
+Quantum
+Googol South Africa
+Googol Sri Lanka
+Googol Hungary
+Micro Phone
+Googol Trinidad and Tobago
+1000
+YouGoogle
+Googol Hungary
+AliWebsite
+Info Seeker
+Wiki Search
+Googol Australia
+Googol Nauru
+Googol Switzerland
+Googol New Zealand
+HNH
+Googol Malawi
+Googol Indonesia
+AliWebsite
+Googol Greece
+Alibubu
+Googol Thailand
+AliWebsite
+Googol Bolivia
+Googol Senegal
+AskMe
+Googol Malaysia
+Googol Senegal
+Googol Libya
+Googol Panama
+Googol The Bahamas
+Googol Greece
+Googol Namibia
+Googol The Gambia
+Googol Romania
+Googol Saint Vincent and the Grenadines
+Googol Singapore
+AliWebsite
+Googol Bahrain
+Googol Vanuatu
+YouGoogle
+Googol Costa Rica
+Googol Luxembourg
+Wiki Search
+Googol Uzbekistan
+AliWebsite
+Informatics
+Googol Canada
+Googol Saint Vincent and the Grenadines
+Googol Paraguay
+InkToMilk
+Excitement
+Excitement
+Googol Latvia
+Googol Timor Leste
+Googol The Philippines
+Googol Uzbekistan
+Googol Indonesia
+Googol Luxembourg
+Googol Timor Leste
+Googol Singapore
+Googol Sri Lanka
+Informatics
+Googol El Salvador
+Googol Trinidad and Tobago
+Googol Vietnam
+Googol Nauru
+Googol Lesotho
+Googol Cuba
+Googol Brazil
+AskMe
+InkToMilk
+Googol Sri Lanka
+WebCrawlee
+Wiki Search
+Googol Indonesia
+Googol Holland
+Tra Tra
+Tra Tra
+Googol Trinidad and Tobago
+Googol Colombia
+AskMe
+Googol Brazil
+Googol Timor Leste
+Googol Uzbekistan
+Googol Puerto Rico
+Googol Portugal
+Googol Italy
+Googol Malta
+Googol The Bahamas
+Alibubu
+Googol New Zealand
+Googol South Korea
+Googol Ethiopia
+HNH
+Googol South Korea
+Googol Samoa
+Googol Uruguay
+Googol Greece
+Bad Search
+Googol Finland
+Googol Nicaragua
+Bad Search
+Googol Niue
+Tra Tra
+Googol Finland
+Wiki Search
+Googol Hungary
+Googol El Salvador
+Googol Israel
+Bad Search
+Googol Isle of Man
+Googol Luxembourg
+Googol Jordon
+Googol Lesotho
+Googol Malta
+Googol Canada
+Excitement
+Googol Micronesia
+Excitement
+Googol Israel
+Googol Oman
+Googol Sri Lanka
+Googol Latvia
+Googol Saint Vincent and the Grenadines
+AskMe
+InkToMilk
+Googol Bulgaria
+Googol Sri Lanka
+Googol Kyrgyzstan
+Googol Brazil
+Googol Uzbekistan
+Googol Iceland
+Googol Jordon
+Googol Canada
+Googol Djibouti
+Info Seeker
+Googol Guernsey
+Tra Tra
+Googol Lesotho
+AskMe
+Googol British Virgin Islands
+Googol Uganda
+WebCrawlee
+Googol Bulgaria
+Googol Vietnam
+Googol Uganda
+Googol Uganda
+InkToMilk
+Googol The Bahamas
+Googol Hungary
+Googol Israel
+Googol Nicaragua
+Googol Panama
+Tra Tra
+Googol Hungary
+Googol Cook Islands
+Tra Tra
+Googol Indonesia
+Googol Greece
+Excitement
+Googol Finland
+Googol Australia
+Tra Tra
+Googol Nauru
+Googol Saint Vincent and the Grenadines
+Googol Jordon
+Googol Malaysia
+Googol Niue
+Googol Djibouti
+Googol Kyrgyzstan
+InkToMilk
+Googol Trinidad and Tobago
+Googol Holland
+Googol Iceland
+Googol Uruguay
+Dont Ask Me
+Googol US Virgin Islands
+Googol Hungary
+Googol Libya
+Googol Botswana
+Googol Sri Lanka
+Excitement
+Googol Guernsey
+Googol Australia
+Googol Kyrgyzstan
+Googol Greece
+HNH
+Excitement
+Googol Colombia
+Googol Isle of Man
+Googol China
+Wiki Search
+Googol Puerto Rico
+Googol Jordon
+Googol Kyrgyzstan
+Googol Bulgaria
+Googol Brazil
+Googol Saint Vincent and the Grenadines
+Googol Canada
+Googol Spain
+Googol Uruguay
+Googol Namibia
+Googol Puerto Rico
+Bad Search
+Googol Hong Kong
+Googol Dominican Republic
+Googol Cuba
+Googol Samoa
+Googol Senegal
+Googol Puerto Rico
+Googol Pakistan
+Googol The Bahamas
+Googol Ethiopia
+Googol Panama
+Googol Isle of Man
+Googol Romania
+Googol The Philippines
+Googol Mongolia
+Googol Costa Rica
+Googol Sri Lanka
+Googol Bulgaria
+Googol Italy
+Googol Belize
+AskMe
+Googol Nicaragua
+Googol American Samoa
+Googol Kyrgyzstan
+Googol Timor Leste
+Northern Lightenning
+Wiki Search
+Googol The Philippines
+Googol Morocco
+Googol Trinidad and Tobago
+Googol Isle of Man
+Googol Isle of Man
+Googol Hong Kong
+Googol Saudi Arabia
+Googol Israel
+AliWebsite
+Googol Trinidad and Tobago
+Googol Vanuatu
+Googol Kyrgyzstan
+Googol Spain
+Googol Niue
+Googol Micronesia
+Googol Uruguay
+Googol Morocco
+Googol El Salvador
+Googol Costa Rica
+Googol El Salvador
+Googol Samoa
+Micro Phone
+Googol Bolivia
+Googol Sri Lanka
+Googol Vanuatu
+Googol Saint Vincent and the Grenadines
+Googol Australia
+AliWebsite
+Googol El Salvador
+Googol Luxembourg
+YouGoogle
+Googol Malaysia
+Googol Uruguay
+Googol Romania
+AliWebsite
+Micro Phone
+Googol Holland
+Googol Samoa
+Googol Oman
+Googol Uganda
+Googol Spain
+Googol Niue
+Googol Holland
+CoolBot
+Googol Romania
+Googol Puerto Rico
+Googol British Virgin Islands
+Googol Paraguay
+Googol Libya
+Quantum
+Wiki Search
+InkToMilk
+Googol Morocco
+Googol Senegal
+Googol Sri Lanka
+Googol Ecuador
+Googol South Africa
+Googol Ethiopia
+Googol Jordon
+Googol Trinidad and Tobago
+Googol Libya
+Googol Oman
+Googol Vietnam
+Googol Isle of Man
+Googol Holland
+CoolBot
+Googol Holland
+Googol US Virgin Islands
+Googol Hungary
+Googol Timor Leste
+Googol El Salvador
+Googol Nauru
+Googol Senegal
+Googol Niue
+Googol Botswana
+Googol Bolivia
+Googol Costa Rica
+Googol Lesotho
+Googol Cook Islands
+Googol Micronesia
+Googol Sri Lanka
+InkToMilk
+Informatics
+Googol Australia
+Googol Senegal
+Excitement
+Googol Isle of Man
+Googol Samoa
+Googol Panama
+Googol Saint Vincent and the Grenadines
+Googol Puerto Rico
+Googol China
+Googol Cuba
+Googol Azerbaijan
+Googol Jordon
+Googol Oman
+Googol Niue
+Googol Isle of Man
+Googol Ecuador
+Googol Uruguay
+Googol Jamaica
+WebCrawlee
+Googol Hong Kong
+Googol Nicaragua
+Googol Luxembourg
+Googol Ecuador
+Googol Saint Vincent and the Grenadines
+Googol Portugal
+Googol Mongolia
+Googol Timor Leste
+Googol Finland
+Googol South Korea
+Googol Saint Vincent and the Grenadines
+Googol Vanuatu
+Googol Vanuatu
+Googol Belize
+Googol Vietnam
+Googol Saudi Arabia
+Bad Search
+Googol Ethiopia
+AskMe
+Googol Finland
+Wiki Search
+Googol Colombia
+Googol Holland
+Googol Italy
+Googol Bahrain
+Micro Phone
+Googol American Samoa
+Googol Micronesia
+Excitement
+Alibubu
+Googol Finland
+Googol The Philippines
+Googol Lesotho
+Googol Isle of Man
+Googol Bahrain
+Googol Djibouti
+Googol US Virgin Islands
+Googol The Philippines
+Googol Dominican Republic
+Googol Bulgaria
+Googol Holland
+CoolBot
+Googol Botswana
+Googol Panama
+Googol Saudi Arabia
+Excitement
+Googol Uruguay
+Googol Uzbekistan
+Googol Panama
+Googol Sri Lanka
+Googol British Virgin Islands
+Googol China
+Googol Cook Islands
+Googol Vietnam
+Googol Sri Lanka
+Googol Saint Vincent and the Grenadines
+Googol Saint Vincent and the Grenadines
+Googol Micronesia
+Googol Romania
+Googol Greece
+Googol Oman
+Bad Search
+Googol Costa Rica
+Googol Malta
+Googol Vanuatu
+Wiki Search
+InkToMilk
+Googol Mongolia
+Googol Niue
+Googol Israel
+Googol Isle of Man
+Googol Samoa
+Googol Bolivia
+Googol Portugal
+Googol American Samoa
+Googol Libya
+Googol Saint Vincent and the Grenadines
+Googol Lesotho
+Googol Timor Leste
+Googol Vanuatu
+CoolBot
+Googol Greece
+InkToMilk
+InkToMilk
+Googol Niue
+Googol Sri Lanka
+Googol Saint Vincent and the Grenadines
+Googol Jordon
+Googol Israel
+Googol Finland
+Googol Guernsey
+Googol Saint Vincent and the Grenadines
+Googol Micronesia
+Googol Costa Rica
+InkToMilk
+Googol South Korea
+Googol Micronesia
+Googol Libya
+Googol Sri Lanka
+Googol Canada
+Googol Brazil
+Googol Vanuatu
+InkToMilk
+Googol Uzbekistan
+Googol Uganda
+Googol Panama
+Googol Djibouti
+Googol Switzerland
+Googol Saudi Arabia
+Googol Colombia
+Googol Costa Rica
+Googol Pakistan
+Googol Latvia
+Googol Costa Rica
+Googol Timor Leste
+Quantum
+Googol Ethiopia
+Googol The Gambia
+CoolBot
+Googol Vietnam
+CoolBot
+Micro Phone
+Googol Nicaragua
+Googol Bulgaria
+AskMe
+Googol Vanuatu
+Googol Colombia
+Googol Greece
+Googol Dominican Republic
+Googol Lesotho
+InkToMilk
+Googol American Samoa
+Googol Holland
+Wiki Search
+Googol Bolivia
+Wiki Search
+Googol China
+Googol Greece
+Googol Romania
+AskMe
+Googol El Salvador
+Googol Niue
+YouGoogle
+Googol Vanuatu
+Wiki Search
+Googol Finland
+Googol Canada
+Googol British Virgin Islands
+Wiki Search
+Googol Samoa
+InkToMilk
+Googol Puerto Rico
+Googol Puerto Rico
+Time Warmer
+Googol Israel
+Googol British Virgin Islands
+Googol Micronesia
+Googol Thailand
+Googol Portugal
+Googol Kyrgyzstan
+Googol Vietnam
+AliWebsite
+Googol Isle of Man
+Googol Singapore
+Googol Hong Kong
+Googol Malaysia
+Googol Mongolia
+CoolBot
+Googol Vietnam
+Googol Switzerland
+Googol Malta
+Googol Luxembourg
+Googol Vietnam
+Googol Isle of Man
+YouGoogle
+Googol Morocco
+Googol The Gambia
+AliWebsite
+Wiki Search
+WebCrawlee
+Googol Jordon
+Wiki Search
+Googol Namibia
+Googol Namibia
+Northern Lightenning
+Tra Tra
+Googol Indonesia
+Alibubu
+Dont Ask Me
+Googol Azerbaijan
+Googol Timor Leste
+Googol Malaysia
+Googol South Korea
+Googol Jordon
+Googol Hungary
+Googol Canada
+Googol Greece
+Googol Puerto Rico
+Googol Ecuador
+Googol Bahrain
+Googol Guernsey
+Excitement
+Googol Israel
+Googol China
+Googol Sri Lanka
+Googol Costa Rica
+Googol Holland
+Googol Trinidad and Tobago
+Googol Azerbaijan
+Googol Malta
+Googol Jordon
+Googol Saudi Arabia
+Googol Israel
+Googol Hong Kong
+Googol Kyrgyzstan
+Googol Bahrain
+Googol Finland
+Googol El Salvador
+Googol Brazil
+Googol Luxembourg
+Googol Sri Lanka
+Wiki Search
+Googol Malawi
+Googol Vietnam
+Googol Singapore
+Googol Uruguay
+Quantum
+CoolBot
+Googol Ethiopia
+Googol Botswana
+Googol Isle of Man
+Googol Dominican Republic
+Googol Guernsey
+Googol South Korea
+InkToMilk
+Bad Search
+Time Warmer
+Googol Holland
+Bad Search
+Googol Puerto Rico
+Googol Saudi Arabia
+Googol Trinidad and Tobago
+Googol Morocco
+Googol Lesotho
+Googol El Salvador
+Googol Bahrain
+Googol Vietnam
+Micro Phone
+Googol Luxembourg
+Googol Samoa
+Googol Pakistan
+Googol Saint Vincent and the Grenadines
+CoolBot
+Googol Senegal
+Time Warmer
+Wiki Search
+Googol American Samoa
+Wiki Search
+Googol Spain
+Micro Phone
+Googol Panama
+Googol Indonesia
+Googol Hong Kong
+Googol Malaysia
+Googol Hong Kong
+Googol Colombia
+HNH
+Googol Bulgaria
+Googol Saint Vincent and the Grenadines
+Googol Malta
+Googol New Zealand
+AskMe
+Googol Vanuatu
+Googol Namibia
+Googol Costa Rica
+Informatics
+Googol Uzbekistan
+Googol Canada
+Googol Bulgaria
+Googol Malta
+Googol Lesotho
+Googol Italy
+Wiki Search
+InkToMilk
+Googol Brazil
+Googol Senegal
+Googol Spain
+InkToMilk
+Googol The Gambia
+CoolBot
+Googol Cuba
+Googol Hungary
+Googol Brazil
+Googol Lesotho
+Googol American Samoa
+Googol The Philippines
+Googol Israel
+Googol El Salvador
+Googol Lesotho
+Googol Ecuador
+Googol Niue
+Googol Micronesia
+Googol Indonesia
+Googol Hungary
+Googol Saint Vincent and the Grenadines
+Googol Kyrgyzstan
+Googol Indonesia
+Googol El Salvador
+Wiki Search
+Info Seeker
+Googol Niue
+Dont Ask Me
+Googol Guernsey
+Googol Costa Rica
+Googol Canada
+Googol New Zealand
+Googol Pakistan
+InkToMilk
+Googol Brazil
+Googol Cuba
+CoolBot
+AliWebsite
+Googol Finland
+AliWebsite
+Excitement
+Googol Indonesia
+Googol Nauru
+Googol Finland
+HNH
+Info Seeker
+Googol Vietnam
+Googol Switzerland
+Excitement
+YouGoogle
+InkToMilk
+Googol Trinidad and Tobago
+Googol Samoa
+Googol Bulgaria
+Googol Latvia
+Micro Phone
+Googol Holland
+Googol Panama
+Wiki Search
+Excitement
+Googol El Salvador
+Googol Guernsey
+Googol Saudi Arabia
+Googol Hungary
+Googol Guernsey
+Googol Italy
+Googol Finland
+CoolBot
+Googol Israel
+Googol Isle of Man
+Googol Senegal
+Googol Panama
+Googol South Korea
+Googol Guernsey
+Googol Uruguay
+Tra Tra
+Info Seeker
+Googol Jordon
+HNH
+Googol Oman
+Googol Hong Kong
+Googol American Samoa
+Northern Lightenning
+Googol Senegal
+Googol Lesotho
+Googol Brazil
+Googol Italy
+AskMe
+Googol Lesotho
+Googol El Salvador
+Googol South Africa
+Googol Hong Kong
+Googol Senegal
+Googol Niue
+YouGoogle
+Northern Lightenning
+Googol Morocco
+Googol Saudi Arabia
+Googol El Salvador
+Googol The Bahamas
+Googol Oman
+Excitement
+Googol Malaysia
+Googol Italy
+Googol Indonesia
+Googol Portugal
+HNH
+Time Warmer
+Googol Brazil
+Googol Senegal
+Googol Micronesia
+Googol American Samoa
+Googol Luxembourg
+Googol Botswana
+Googol Nauru
+Googol South Korea
+Googol Romania
+Googol Trinidad and Tobago
+Time Warmer
+Googol El Salvador
+Googol Romania
+Googol Mongolia
+AskMe
+Googol Bolivia
+HNH
+Googol Isle of Man
+Googol Uganda
+Googol Hong Kong
+Googol Dominican Republic
+Googol Dominica
+Googol Nicaragua
+Googol Niue
+Googol Romania
+Googol Lesotho
+Googol Malaysia
+Googol Costa Rica
+Googol Nicaragua
+Googol Vanuatu
+Googol Panama
+Googol Timor Leste
+Googol Bulgaria
+Googol Bolivia
+AliWebsite
+Googol Vanuatu
+Googol Guernsey
+Googol Namibia
+Googol Jordon
+Googol Canada
+Googol Mongolia
+Excitement
+Googol Nicaragua
+Googol Switzerland
+Googol New Zealand
+Googol Panama
+Googol Holland
+Googol Ecuador
+Googol Senegal
+CoolBot
+AliWebsite
+Googol Bulgaria
+Googol China
+Googol Isle of Man
+Googol Romania
+Googol Saudi Arabia
+HNH
+Googol Nauru
+Googol Colombia
+Googol Sri Lanka
+Googol Jordon
+CoolBot
+Tra Tra
+Googol Panama
+AliWebsite
+Googol Vietnam
+Googol Samoa
+Googol Portugal
+Googol Luxembourg
+YouGoogle
+Googol Malta
+Googol South Africa
+Googol Bulgaria
+Googol American Samoa
+Googol Cuba
+Micro Phone
+Googol Israel
+Googol Vanuatu
+Info Seeker
+Googol Bahrain
+Northern Lightenning
+Googol El Salvador
+Googol The Bahamas
+CoolBot
+Googol China
+Googol Italy
+Googol Pakistan
+Googol Portugal
+Googol Trinidad and Tobago
+Info Seeker
+Dont Ask Me
+Googol Jordon
+Info Seeker
+Googol Uganda
+Googol Belize
+YouGoogle
+AliWebsite
+Bad Search
+Googol Israel
+Googol Guernsey
+Googol Samoa
+Googol China
+Googol Malaysia
+Googol New Zealand
+Googol Holland
+Googol American Samoa
+Googol Malta
+Googol China
+Wiki Search
+Googol Bolivia
+Googol The Gambia
+Googol The Gambia
+Googol New Zealand
+Googol Hong Kong
+Googol Lesotho
+Dont Ask Me
+Googol Brazil
+Googol Luxembourg
+Googol Vanuatu
+Googol Brazil
+Googol US Virgin Islands
+Googol Israel
+Googol Bulgaria
+Googol Timor Leste
+Googol Puerto Rico
+Excitement
+Googol Panama
+Googol Jordon
+Googol Switzerland
+Googol Cook Islands
+Googol El Salvador
+Googol Cook Islands
+Googol Saudi Arabia
+Googol Puerto Rico
+Googol Uganda
+YouGoogle
+Googol Niue
+Googol Nauru
+Googol Saudi Arabia
+Googol Uganda
+Googol Canada
+InkToMilk
+Googol US Virgin Islands
+Googol Malawi
+Googol Hong Kong
+Googol Sri Lanka
+HNH
+Googol American Samoa
+Googol Timor Leste
+Googol Cuba
+Micro Phone
+Googol Brazil
+Googol The Gambia
+Googol Australia
+Wiki Search
+Googol Canada
+Googol Luxembourg
+Googol China
+Northern Lightenning
+Googol Greece
+Googol Finland
+Googol Uruguay
+Googol Ecuador
+Googol Isle of Man
+Googol Ethiopia
+Tra Tra
+Googol Timor Leste
+Info Seeker
+Googol Malta
+Googol Holland
+Googol Indonesia
+Googol Bulgaria
+Googol Holland
+Googol Jamaica
+Googol Samoa
+Googol Azerbaijan
+Googol Samoa
+Googol Malawi
+Googol The Gambia
+Googol Uzbekistan
+Googol Holland
+Googol Jordon
+Wiki Search
+Googol Saint Vincent and the Grenadines
+Googol Uzbekistan
+Googol Samoa
+Googol Panama
+Googol Malta
+Googol Azerbaijan
+Googol Ecuador
+Time Warmer
+Googol Holland
+Googol Israel
+Googol Colombia
+Googol Hungary
+Googol Vietnam
+Googol Finland
+Googol Bulgaria
+Googol The Philippines
+Googol Cook Islands
+Googol Greece
+Googol Trinidad and Tobago
+Googol Bulgaria
+Googol Bolivia
+Googol Cook Islands
+Googol Costa Rica
+Info Seeker
+Googol The Bahamas
+InkToMilk
+Googol Italy
+Googol American Samoa
+AskMe
+Googol Vanuatu
+Googol Azerbaijan
+InkToMilk
+Googol South Korea
+Googol The Philippines
+Googol Finland
+AliWebsite
+Googol Portugal
+Googol Vietnam
+Googol Isle of Man
+Googol Saint Vincent and the Grenadines
+Googol Canada
+Googol China
+Tra Tra
+Googol Panama
+Googol Costa Rica
+Googol The Bahamas
+Googol Ethiopia
+Googol Uganda
+Info Seeker
+Googol Colombia
+Googol Guernsey
+AliWebsite
+Googol Israel
+Googol Uganda
+Googol El Salvador
+AskMe
+Googol Uganda
+Googol Bolivia
+Googol Mongolia
+Googol Puerto Rico
+Googol Bahrain
+Googol Vietnam
+Googol Kyrgyzstan
+Excitement
+Northern Lightenning
+Googol Micronesia
+Googol Saint Vincent and the Grenadines
+AskMe
+Googol Senegal
+Googol Lesotho
+InkToMilk
+Googol Bolivia
+Googol Botswana
+Googol Bahrain
+Wiki Search
+AliWebsite
+Informatics
+Googol Nicaragua
+Googol Panama
+Tra Tra
+Googol Malawi
+Quantum
+Googol American Samoa
+Googol Cuba
+Googol Hong Kong
+Googol South Korea
+Googol Hong Kong
+Alibubu
+Googol Namibia
+Googol Bolivia
+Googol Azerbaijan
+Googol Timor Leste
+Micro Phone
+Googol Costa Rica
+Googol Ecuador
+Googol Italy
+Googol Guernsey
+Googol Uzbekistan
+8
+Googol UAE
+Alta View
+Googol Trinidad and Tobago
+Googol Australia
+Googol Singapore
+Googol Djibouti
+Googol Colombia
+Googol Burundi
+40
+Googol UAE
+Googol Singapore
+Googol Singapore
+Googol Djibouti
+Alta View
+Googol Djibouti
+Googol Colombia
+Googol Trinidad and Tobago
+Googol Singapore
+Googol UAE
+Googol Colombia
+Googol Burundi
+Googol Colombia
+Googol Burundi
+Googol Burundi
+Googol Burundi
+Googol Djibouti
+Googol Colombia
+Googol Colombia
+Googol Singapore
+Googol Burundi
+Googol Burundi
+Googol Djibouti
+Googol Australia
+Googol Australia
+Googol Colombia
+Googol Burundi
+Googol Colombia
+Googol Burundi
+Googol Djibouti
+Googol Australia
+Googol Burundi
+Googol Burundi
+Googol Burundi
+Googol Burundi
+Googol Colombia
+Googol Singapore
+Googol Burundi
+Googol Burundi
+Googol Djibouti
+9
+Googol UK
+Googol Norfolk Island
+Googol Haiti
+Vivasimo
+Googol Dominican Republic
+Googol Israel
+Googol Sri Lanka
+Googol Ecuador
+Googol Chile
+999
+Googol Sri Lanka
+Googol Norfolk Island
+Googol Ecuador
+Googol Sri Lanka
+Googol Norfolk Island
+Googol Ecuador
+Googol Haiti
+Vivasimo
+Googol Dominican Republic
+Googol Sri Lanka
+Googol Haiti
+Googol Haiti
+Googol Norfolk Island
+Googol Israel
+Googol Sri Lanka
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Haiti
+Googol UK
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol UK
+Googol Dominican Republic
+Googol UK
+Vivasimo
+Googol Norfolk Island
+Vivasimo
+Googol Dominican Republic
+Googol Haiti
+Googol Haiti
+Googol Norfolk Island
+Googol Sri Lanka
+Vivasimo
+Googol Sri Lanka
+Googol UK
+Googol Sri Lanka
+Googol Norfolk Island
+Googol Dominican Republic
+Googol UK
+Googol Ecuador
+Vivasimo
+Googol Norfolk Island
+Googol UK
+Googol Israel
+Googol Haiti
+Googol Dominican Republic
+Googol Ecuador
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Ecuador
+Googol Norfolk Island
+Googol UK
+Vivasimo
+Googol Ecuador
+Googol Dominican Republic
+Googol Ecuador
+Googol Chile
+Googol UK
+Googol Ecuador
+Googol Haiti
+Googol Sri Lanka
+Googol Norfolk Island
+Googol Norfolk Island
+Googol Sri Lanka
+Vivasimo
+Googol Norfolk Island
+Googol Ecuador
+Googol Dominican Republic
+Googol Haiti
+Googol Ecuador
+Googol Ecuador
+Googol Haiti
+Googol Norfolk Island
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Haiti
+Googol Dominican Republic
+Googol Israel
+Googol Norfolk Island
+Googol Sri Lanka
+Googol Norfolk Island
+Googol UK
+Googol Dominican Republic
+Googol Haiti
+Vivasimo
+Googol UK
+Googol Haiti
+Vivasimo
+Vivasimo
+Googol Dominican Republic
+Googol UK
+Googol UK
+Googol Haiti
+Vivasimo
+Googol Sri Lanka
+Googol Norfolk Island
+Googol Dominican Republic
+Googol UK
+Googol Norfolk Island
+Vivasimo
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Ecuador
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Chile
+Googol Dominican Republic
+Googol Ecuador
+Googol Israel
+Googol UK
+Googol Ecuador
+Googol Ecuador
+Vivasimo
+Googol Chile
+Googol Sri Lanka
+Vivasimo
+Googol Ecuador
+Googol Haiti
+Googol Ecuador
+Googol Ecuador
+Googol UK
+Googol Ecuador
+Googol Dominican Republic
+Googol Israel
+Vivasimo
+Googol UK
+Googol Haiti
+Googol Haiti
+Googol Haiti
+Vivasimo
+Googol Haiti
+Googol Ecuador
+Vivasimo
+Googol Dominican Republic
+Googol Haiti
+Googol UK
+Googol UK
+Googol Sri Lanka
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Haiti
+Vivasimo
+Googol Norfolk Island
+Googol Norfolk Island
+Googol Haiti
+Googol Dominican Republic
+Googol UK
+Googol Haiti
+Vivasimo
+Googol Norfolk Island
+Vivasimo
+Googol Haiti
+Googol Sri Lanka
+Googol Norfolk Island
+Googol Norfolk Island
+Googol Chile
+Googol Dominican Republic
+Vivasimo
+Googol Haiti
+Googol Norfolk Island
+Vivasimo
+Googol Dominican Republic
+Googol Sri Lanka
+Googol Dominican Republic
+Googol Ecuador
+Googol Norfolk Island
+Googol Haiti
+Googol Norfolk Island
+Vivasimo
+Googol Dominican Republic
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Dominican Republic
+Googol Ecuador
+Googol Haiti
+Googol Haiti
+Vivasimo
+Googol Chile
+Googol Norfolk Island
+Googol Dominican Republic
+Googol Ecuador
+Vivasimo
+Googol Ecuador
+Googol UK
+Googol Dominican Republic
+Googol Haiti
+Googol Sri Lanka
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Haiti
+Vivasimo
+Googol Sri Lanka
+Googol Chile
+Googol UK
+Googol Dominican Republic
+Googol Norfolk Island
+Googol Ecuador
+Googol Sri Lanka
+Googol UK
+Vivasimo
+Googol Norfolk Island
+Googol Ecuador
+Googol Haiti
+Googol Haiti
+Googol Sri Lanka
+Googol UK
+Googol UK
+Googol Sri Lanka
+Googol Dominican Republic
+Googol Norfolk Island
+Googol Ecuador
+Vivasimo
+Googol Norfolk Island
+Googol Israel
+Vivasimo
+Googol Haiti
+Googol Ecuador
+Googol Israel
+Googol Haiti
+Googol UK
+Googol Ecuador
+Googol Sri Lanka
+Googol Sri Lanka
+Vivasimo
+Googol Haiti
+Googol Haiti
+Googol UK
+Googol Norfolk Island
+Googol Dominican Republic
+Googol UK
+Googol UK
+Googol Haiti
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Norfolk Island
+Googol Ecuador
+Googol Dominican Republic
+Googol Ecuador
+Vivasimo
+Googol Haiti
+Googol Sri Lanka
+Googol Haiti
+Googol Ecuador
+Googol Ecuador
+Googol Haiti
+Googol Norfolk Island
+Googol Haiti
+Googol Chile
+Googol Haiti
+Googol Sri Lanka
+Vivasimo
+Googol Norfolk Island
+Googol Dominican Republic
+Googol Ecuador
+Vivasimo
+Googol Haiti
+Googol Ecuador
+Googol UK
+Vivasimo
+Googol Haiti
+Googol UK
+Googol Sri Lanka
+Googol Haiti
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Haiti
+Vivasimo
+Googol Israel
+Googol Haiti
+Googol Norfolk Island
+Googol Ecuador
+Googol Sri Lanka
+Googol UK
+Googol Norfolk Island
+Googol Dominican Republic
+Googol Norfolk Island
+Googol Ecuador
+Googol Dominican Republic
+Googol UK
+Googol Dominican Republic
+Vivasimo
+Googol Dominican Republic
+Googol Norfolk Island
+Googol Haiti
+Vivasimo
+Googol UK
+Googol Dominican Republic
+Vivasimo
+Vivasimo
+Googol Ecuador
+Googol UK
+Googol Sri Lanka
+Googol Israel
+Vivasimo
+Googol Dominican Republic
+Vivasimo
+Googol Ecuador
+Vivasimo
+Googol Dominican Republic
+Googol Norfolk Island
+Googol Dominican Republic
+Googol Chile
+Googol Haiti
+Googol Norfolk Island
+Googol Dominican Republic
+Googol Ecuador
+Googol Ecuador
+Vivasimo
+Googol Ecuador
+Googol Ecuador
+Googol Norfolk Island
+Googol Haiti
+Vivasimo
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Haiti
+Googol UK
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Dominican Republic
+Googol Ecuador
+Googol Dominican Republic
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Haiti
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Israel
+Vivasimo
+Googol Chile
+Googol Haiti
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Dominican Republic
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Dominican Republic
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Vivasimo
+Googol Ecuador
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Dominican Republic
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Vivasimo
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Israel
+Googol Sri Lanka
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Sri Lanka
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Norfolk Island
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Ecuador
+Googol Chile
+Vivasimo
+Googol Chile
+Googol Chile
+Googol Chile
+Vivasimo
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Israel
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Dominican Republic
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Israel
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Sri Lanka
+Vivasimo
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Israel
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Norfolk Island
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Haiti
+Googol Ecuador
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Dominican Republic
+Googol Ecuador
+Googol Dominican Republic
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Haiti
+Googol Dominican Republic
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Vivasimo
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Ecuador
+Vivasimo
+Googol Sri Lanka
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Dominican Republic
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Dominican Republic
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Israel
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Sri Lanka
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Norfolk Island
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Dominican Republic
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Vivasimo
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Israel
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Sri Lanka
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Haiti
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Dominican Republic
+Googol Chile
+Googol Ecuador
+Googol Norfolk Island
+Googol Israel
+Googol Chile
+Googol Sri Lanka
+Googol Ecuador
+Googol Chile
+Googol Dominican Republic
+Googol Chile
+Googol Sri Lanka
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Vivasimo
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Vivasimo
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Dominican Republic
+Googol Ecuador
+Googol Israel
+Googol Chile
+Vivasimo
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Israel
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Vivasimo
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Dominican Republic
+Googol Sri Lanka
+Googol Ecuador
+Googol Israel
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Sri Lanka
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Sri Lanka
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Chile
+Googol Ecuador
+Googol Israel
+10
+Googol El Salvador
+Googol Mexico
+Micro Phone
+Live Seek
+NSM Search
+Googol Belgium
+Googol Democratic Republic of the Congo
+Googol Jamaica
+Googol Romania
+Googol Saudi Arabia
+90
+Googol El Salvador
+Googol Jamaica
+Googol Mexico
+Googol Democratic Republic of the Congo
+Googol Belgium
+Googol Democratic Republic of the Congo
+Googol Romania
+Googol Mexico
+Googol Mexico
+NSM Search
+Googol El Salvador
+NSM Search
+Googol Belgium
+Googol El Salvador
+Googol El Salvador
+Googol Mexico
+Googol Romania
+Googol Mexico
+Googol El Salvador
+Googol Romania
+Live Seek
+Googol Democratic Republic of the Congo
+Googol Jamaica
+Googol Democratic Republic of the Congo
+Googol Mexico
+Live Seek
+Live Seek
+Googol Democratic Republic of the Congo
+Googol Democratic Republic of the Congo
+Googol El Salvador
+Googol Romania
+Googol Democratic Republic of the Congo
+Googol Saudi Arabia
+Googol El Salvador
+Googol Belgium
+Googol Democratic Republic of the Congo
+Googol Democratic Republic of the Congo
+Googol Belgium
+Googol Jamaica
+Googol Jamaica
+Googol El Salvador
+Googol Saudi Arabia
+Live Seek
+Googol Jamaica
+Googol El Salvador
+NSM Search
+Googol El Salvador
+Googol Romania
+Googol Jamaica
+Googol El Salvador
+Micro Phone
+Googol El Salvador
+Googol Belgium
+Micro Phone
+Micro Phone
+Googol Saudi Arabia
+Live Seek
+Micro Phone
+Googol Belgium
+Googol Jamaica
+Googol Democratic Republic of the Congo
+Googol Romania
+Googol Democratic Republic of the Congo
+Googol Mexico
+Googol Belgium
+Googol El Salvador
+Googol Romania
+Micro Phone
+Googol Mexico
+Googol Mexico
+Googol Mexico
+Googol Democratic Republic of the Congo
+Googol Romania
+Googol El Salvador
+Googol Mexico
+Googol Romania
+Googol Saudi Arabia
+Googol Democratic Republic of the Congo
+Googol Romania
+Live Seek
+Googol El Salvador
+Live Seek
+Googol Romania
+Googol Romania
+Googol Democratic Republic of the Congo
+Googol Mexico
+Googol Romania
+Live Seek
+Googol Democratic Republic of the Congo
+Googol Jamaica
+9
+InkToMilk
+Googol Romania
+Googol UK
+Googol Uganda
+Googol Pakistan
+Googol Peru
+Wiki Search
+MeGoogle
+Googol Lesotho
+90
+Googol Pakistan
+Googol Peru
+Googol Pakistan
+Googol Pakistan
+Googol Romania
+MeGoogle
+Wiki Search
+Googol Peru
+Googol UK
+Wiki Search
+Googol Peru
+Googol Lesotho
+MeGoogle
+Wiki Search
+Googol Uganda
+Wiki Search
+Wiki Search
+Googol Uganda
+Wiki Search
+Googol Peru
+Googol Pakistan
+Googol Pakistan
+Googol Pakistan
+Googol Peru
+Googol Romania
+Googol Peru
+Wiki Search
+Googol UK
+Googol Uganda
+InkToMilk
+Googol Romania
+Wiki Search
+Googol Lesotho
+Googol UK
+Wiki Search
+Googol Lesotho
+InkToMilk
+Googol Pakistan
+Googol Lesotho
+InkToMilk
+Googol Romania
+Googol Peru
+Wiki Search
+Googol UK
+InkToMilk
+Googol Peru
+Googol Pakistan
+Googol Peru
+Googol Lesotho
+Googol UK
+Wiki Search
+Googol Romania
+Googol Uganda
+Googol UK
+InkToMilk
+Googol Uganda
+Googol Romania
+MeGoogle
+Googol Peru
+Googol UK
+Googol Peru
+Wiki Search
+MeGoogle
+Googol Pakistan
+MeGoogle
+Googol Pakistan
+Googol Uganda
+Googol Peru
+Googol Lesotho
+Googol Romania
+Googol Peru
+Googol Lesotho
+Wiki Search
+InkToMilk
+Googol Romania
+Googol Pakistan
+Googol Peru
+Googol Uganda
+Googol Romania
+Googol Uganda
+Googol Uganda
+Googol Peru
+Googol UK
+Googol Pakistan
+Googol Peru
+Googol UK
+Googol Peru
+Wiki Search
+MeGoogle
+Googol UK
+7
+Live Seek
+Googol Republic of the Congo
+Googol Ireland
+Googol Greece
+Googol American Samoa
+Quantum
+Googol Rwanda
+100
+Googol Greece
+Googol Republic of the Congo
+Googol Ireland
+Googol Greece
+Googol Ireland
+Googol Ireland
+Live Seek
+Googol Rwanda
+Googol Rwanda
+Googol Republic of the Congo
+Quantum
+Googol American Samoa
+Quantum
+Googol Rwanda
+Googol Rwanda
+Googol Rwanda
+Googol Ireland
+Googol Rwanda
+Googol Rwanda
+Quantum
+Googol Republic of the Congo
+Googol Rwanda
+Quantum
+Quantum
+Googol Greece
+Quantum
+Quantum
+Googol Rwanda
+Quantum
+Googol Rwanda
+Googol Rwanda
+Quantum
+Googol American Samoa
+Quantum
+Googol Ireland
+Googol Rwanda
+Googol Rwanda
+Quantum
+Googol Greece
+Googol Greece
+Quantum
+Googol Rwanda
+Googol American Samoa
+Googol Rwanda
+Googol American Samoa
+Googol American Samoa
+Googol Rwanda
+Quantum
+Googol Rwanda
+Quantum
+Googol Ireland
+Googol Ireland
+Googol Rwanda
+Googol American Samoa
+Googol Republic of the Congo
+Googol Ireland
+Googol Republic of the Congo
+Googol Rwanda
+Googol American Samoa
+Googol Ireland
+Googol Republic of the Congo
+Googol Greece
+Googol American Samoa
+Googol American Samoa
+Googol Rwanda
+Quantum
+Googol Republic of the Congo
+Quantum
+Googol Rwanda
+Googol American Samoa
+Live Seek
+Quantum
+Googol Rwanda
+Googol Ireland
+Quantum
+Live Seek
+Googol American Samoa
+Live Seek
+Googol Ireland
+Googol American Samoa
+Googol Republic of the Congo
+Googol American Samoa
+Googol Greece
+Googol Ireland
+Googol American Samoa
+Googol American Samoa
+Googol American Samoa
+Googol Rwanda
+Googol American Samoa
+Googol American Samoa
+Googol American Samoa
+Googol Republic of the Congo
+Googol Republic of the Congo
+Googol Ireland
+Googol Republic of the Congo
+Googol Ireland
+Googol Republic of the Congo
+Googol Ireland
+Googol American Samoa
+Googol Greece
+10
+Googol Colombia
+Googol Bosnia and Herzegovina
+Googol Demark
+Googol Malawi
+Googol Luxembourg
+Googol Hong Kong
+Googol Kenya
+Googol Democratic Republic of the Congo
+Dont Ask Me
+Googol Dominican Republic
+100
+Dont Ask Me
+Googol Demark
+Googol Demark
+Googol Kenya
+Googol Demark
+Googol Dominican Republic
+Googol Hong Kong
+Googol Colombia
+Googol Malawi
+Googol Kenya
+Googol Dominican Republic
+Googol Dominican Republic
+Dont Ask Me
+Googol Democratic Republic of the Congo
+Googol Hong Kong
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Democratic Republic of the Congo
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Hong Kong
+Googol Democratic Republic of the Congo
+Googol Kenya
+Googol Democratic Republic of the Congo
+Googol Democratic Republic of the Congo
+Googol Kenya
+Googol Dominican Republic
+Googol Hong Kong
+Dont Ask Me
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Dominican Republic
+Dont Ask Me
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Kenya
+Googol Kenya
+Dont Ask Me
+Googol Dominican Republic
+Googol Luxembourg
+Googol Malawi
+Googol Luxembourg
+Googol Luxembourg
+Googol Bosnia and Herzegovina
+Googol Democratic Republic of the Congo
+Googol Demark
+Googol Democratic Republic of the Congo
+Googol Hong Kong
+Googol Democratic Republic of the Congo
+Googol Demark
+Googol Democratic Republic of the Congo
+Googol Bosnia and Herzegovina
+Googol Malawi
+Googol Malawi
+Googol Luxembourg
+Googol Demark
+Googol Demark
+Googol Kenya
+Googol Democratic Republic of the Congo
+Googol Kenya
+Googol Colombia
+Googol Malawi
+Googol Democratic Republic of the Congo
+Googol Malawi
+Googol Kenya
+Googol Demark
+Googol Malawi
+Googol Democratic Republic of the Congo
+Googol Demark
+Googol Hong Kong
+Googol Democratic Republic of the Congo
+Googol Kenya
+Googol Luxembourg
+Googol Demark
+Googol Bosnia and Herzegovina
+Googol Democratic Republic of the Congo
+Googol Dominican Republic
+Googol Dominican Republic
+Googol Democratic Republic of the Congo
+Googol Kenya
+Googol Kenya
+Googol Luxembourg
+Googol Malawi
+Googol Dominican Republic
+Googol Demark
+Googol Democratic Republic of the Congo
+Googol Demark
+Googol Luxembourg
+Googol Malawi
+Googol Dominican Republic
+Googol Kenya
+Dont Ask Me
+Googol Democratic Republic of the Congo
+Googol Malawi
+Googol Bosnia and Herzegovina
+Googol Malawi
+Googol Colombia
+Googol Luxembourg
+Googol Kenya
diff --git a/codejam_2008/src/y2008qual/A-large-practice.out b/codejam_2008/src/y2008qual/A-large-practice.out
new file mode 100644
index 0000000..c5ebff7
--- /dev/null
+++ b/codejam_2008/src/y2008qual/A-large-practice.out
@@ -0,0 +1,20 @@
+Case #1: 0
+Case #2: 0
+Case #3: 1
+Case #4: 1
+Case #5: 3
+Case #6: 3
+Case #7: 999
+Case #8: 498
+Case #9: 12
+Case #10: 1
+Case #11: 4
+Case #12: 1
+Case #13: 6
+Case #14: 0
+Case #15: 1
+Case #16: 11
+Case #17: 1
+Case #18: 3
+Case #19: 3
+Case #20: 2
diff --git a/codejam_2008/src/y2008qual/A-small-practice.in b/codejam_2008/src/y2008qual/A-small-practice.in
new file mode 100644
index 0000000..1e73441
--- /dev/null
+++ b/codejam_2008/src/y2008qual/A-small-practice.in
@@ -0,0 +1,1343 @@
+20
+2
+Googol USA
+Googol Japan
+0
+2
+Googol Sweden
+Googol Norfolk Island
+5
+Googol Sweden
+Googol Sweden
+Googol Sweden
+Googol Sweden
+Googol Sweden
+3
+Googol Vietnam
+Googol Jersey
+Googol Ethiopia
+12
+Googol Jersey
+Googol Vietnam
+Googol Jersey
+Googol Jersey
+Googol Jersey
+Googol Jersey
+Googol Ethiopia
+Googol Ethiopia
+Googol Ethiopia
+Googol Ethiopia
+Googol Vietnam
+Googol Ethiopia
+3
+Googol British Virgin Islands
+Googol Italy
+Gurujh
+7
+Googol British Virgin Islands
+Googol Italy
+Googol British Virgin Islands
+Googol Italy
+Gurujh
+Gurujh
+Gurujh
+3
+Yeehaw Search
+Googol British Virgin Islands
+Googol Bahrain
+19
+Googol British Virgin Islands
+Yeehaw Search
+Googol British Virgin Islands
+Googol British Virgin Islands
+Googol British Virgin Islands
+Googol British Virgin Islands
+Googol Bahrain
+Googol Bahrain
+Googol Bahrain
+Googol Bahrain
+Yeehaw Search
+Googol Bahrain
+Googol British Virgin Islands
+Yeehaw Search
+Googol British Virgin Islands
+Yeehaw Search
+Googol Bahrain
+Googol Bahrain
+Googol Bahrain
+3
+Gurujh
+Googol New Zealand
+Googol Ecuador
+19
+Googol New Zealand
+Gurujh
+Googol New Zealand
+Gurujh
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol New Zealand
+Gurujh
+Googol New Zealand
+Googol New Zealand
+Googol New Zealand
+Googol New Zealand
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Googol Ecuador
+Gurujh
+Googol Ecuador
+2
+Googol Uzbekistan
+MeGoogle
+100
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+Googol Uzbekistan
+MeGoogle
+3
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+98
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+HNH
+Googol Armenia
+Googol Trinidad and Tobago
+2
+A
+B
+20
+A
+B
+A
+B
+B
+B
+A
+B
+B
+A
+B
+B
+A
+A
+A
+A
+B
+A
+A
+A
+10
+InkToMilk
+Live Seek
+Googol Colombia
+Googol Spain
+Googol Lesotho
+Googol Luxembourg
+Googol US Virgin Islands
+Googol Montserrat
+Googol Demark
+Googol Afghanistan
+100
+Googol Montserrat
+Googol Spain
+Googol Afghanistan
+Googol Montserrat
+Googol Spain
+InkToMilk
+InkToMilk
+Googol Afghanistan
+Googol Montserrat
+Live Seek
+Googol Spain
+Googol Lesotho
+Googol Colombia
+Googol Lesotho
+InkToMilk
+InkToMilk
+Googol Lesotho
+Googol Afghanistan
+InkToMilk
+Googol Lesotho
+Googol Montserrat
+Googol Colombia
+Googol Luxembourg
+Googol Luxembourg
+Googol Montserrat
+Googol US Virgin Islands
+Googol Luxembourg
+Googol Demark
+Googol Montserrat
+Googol Demark
+Googol Afghanistan
+Googol US Virgin Islands
+Googol Colombia
+InkToMilk
+Googol Spain
+Googol Luxembourg
+Googol Spain
+Googol Luxembourg
+Googol US Virgin Islands
+InkToMilk
+Googol Montserrat
+Googol Afghanistan
+Googol Luxembourg
+Live Seek
+Googol Luxembourg
+Googol Montserrat
+Googol Colombia
+Live Seek
+Googol Afghanistan
+Googol Lesotho
+Googol Montserrat
+Googol US Virgin Islands
+Googol Afghanistan
+Googol Spain
+Live Seek
+Googol Demark
+Live Seek
+Googol Afghanistan
+Googol Montserrat
+InkToMilk
+Googol Montserrat
+Googol Demark
+Googol US Virgin Islands
+Live Seek
+Googol Demark
+Googol Afghanistan
+Googol Demark
+Live Seek
+Googol Montserrat
+Googol Lesotho
+Googol Lesotho
+Googol Lesotho
+Googol US Virgin Islands
+Live Seek
+Googol Montserrat
+Live Seek
+Googol Demark
+Googol Afghanistan
+Googol Spain
+Googol Afghanistan
+Googol US Virgin Islands
+Googol Colombia
+Googol US Virgin Islands
+Googol Luxembourg
+Googol Luxembourg
+Googol Afghanistan
+Googol Spain
+Googol Montserrat
+InkToMilk
+InkToMilk
+Googol Montserrat
+InkToMilk
+InkToMilk
+Googol Lesotho
+Live Seek
+Googol Afghanistan
+Googol Luxembourg
+InkToMilk
+Googol Colombia
+Googol Colombia
+4
+Googol Cook Islands
+Googol Guernsey
+Googol Timor Leste
+Googol Taiwan
+60
+Googol Taiwan
+Googol Timor Leste
+Googol Guernsey
+Googol Taiwan
+Googol Guernsey
+Googol Timor Leste
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Timor Leste
+Googol Timor Leste
+Googol Timor Leste
+Googol Guernsey
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Timor Leste
+Googol Timor Leste
+Googol Timor Leste
+Googol Timor Leste
+Googol Timor Leste
+Googol Taiwan
+Googol Guernsey
+Googol Taiwan
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Taiwan
+Googol Guernsey
+Googol Taiwan
+Googol Taiwan
+Googol Guernsey
+Googol Guernsey
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Taiwan
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Timor Leste
+Googol Timor Leste
+Googol Timor Leste
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Timor Leste
+Googol Timor Leste
+Googol Taiwan
+Googol Timor Leste
+Googol Taiwan
+Googol Taiwan
+Googol Taiwan
+Googol Guernsey
+Googol Timor Leste
+Googol Guernsey
+Googol Taiwan
+10
+Googol Jordon
+Googol Nicaragua
+B9
+Bad Search
+Googol Belize
+Googol Pitcairn Islands
+Googol Sri Lanka
+Googol British Virgin Islands
+Never
+Googol Germany
+100
+Never
+Googol Nicaragua
+Googol Nicaragua
+B9
+Googol British Virgin Islands
+Googol Sri Lanka
+Googol Pitcairn Islands
+Googol Pitcairn Islands
+Googol Jordon
+Never
+Bad Search
+Googol Pitcairn Islands
+Googol British Virgin Islands
+Googol Nicaragua
+Never
+Googol Sri Lanka
+Bad Search
+Never
+Googol Nicaragua
+Googol Sri Lanka
+Googol Jordon
+Googol Belize
+Bad Search
+Googol Pitcairn Islands
+Googol British Virgin Islands
+Googol Belize
+Googol Pitcairn Islands
+Googol Belize
+B9
+Googol Sri Lanka
+Never
+Googol Germany
+Googol Germany
+Googol Germany
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Never
+Googol British Virgin Islands
+Googol Sri Lanka
+Never
+Googol Sri Lanka
+Never
+Never
+Googol British Virgin Islands
+Googol Germany
+Never
+Googol British Virgin Islands
+Never
+Googol Pitcairn Islands
+Never
+Googol Germany
+Googol Germany
+Googol Germany
+Googol Germany
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Googol Germany
+Googol Germany
+Googol Germany
+Googol British Virgin Islands
+Never
+Never
+Googol Germany
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Googol Germany
+Googol Pitcairn Islands
+Googol Sri Lanka
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Googol British Virgin Islands
+Googol Germany
+Never
+Googol Germany
+Googol Germany
+Googol Sri Lanka
+Googol Germany
+Googol Germany
+Googol Sri Lanka
+Googol Germany
+Never
+3
+CoolBot
+Googol Nicaragua
+Googol Oman
+30
+Googol Oman
+Googol Oman
+Googol Oman
+CoolBot
+Googol Nicaragua
+CoolBot
+CoolBot
+Googol Oman
+CoolBot
+Googol Nicaragua
+Googol Nicaragua
+Googol Nicaragua
+Googol Oman
+Googol Oman
+Googol Oman
+Googol Nicaragua
+Googol Oman
+Googol Nicaragua
+Googol Oman
+Googol Nicaragua
+CoolBot
+CoolBot
+CoolBot
+Googol Oman
+CoolBot
+Googol Nicaragua
+Googol Oman
+Googol Nicaragua
+Googol Nicaragua
+Googol Oman
+10
+Googol UK
+Googol Bahrain
+Googol Canada
+Googol Slokvia
+Googol Haiti
+Yeehaw Search
+Googol Saint Helena
+Googol Malta
+Googol Mexico
+Googol Azerbaijan
+100
+Yeehaw Search
+Googol Bahrain
+Googol Haiti
+Googol Saint Helena
+Googol Saint Helena
+Googol UK
+Googol Malta
+Googol Slokvia
+Googol UK
+Googol Azerbaijan
+Googol Slokvia
+Googol Saint Helena
+Googol Haiti
+Googol Bahrain
+Googol UK
+Yeehaw Search
+Googol Haiti
+Googol Malta
+Googol Saint Helena
+Googol Canada
+Googol Bahrain
+Googol Slokvia
+Googol Haiti
+Googol Saint Helena
+Yeehaw Search
+Googol UK
+Googol Canada
+Googol Malta
+Googol UK
+Googol Haiti
+Googol Saint Helena
+Googol Malta
+Yeehaw Search
+Googol Bahrain
+Googol Haiti
+Googol Canada
+Googol Bahrain
+Googol Bahrain
+Googol Saint Helena
+Googol Canada
+Googol UK
+Googol Azerbaijan
+Googol Azerbaijan
+Yeehaw Search
+Googol Bahrain
+Googol UK
+Googol Bahrain
+Yeehaw Search
+Googol Mexico
+Googol Mexico
+Googol Malta
+Googol UK
+Googol UK
+Googol Bahrain
+Googol Mexico
+Googol Malta
+Googol Canada
+Googol UK
+Googol Haiti
+Googol Haiti
+Googol Haiti
+Googol Bahrain
+Googol UK
+Googol Azerbaijan
+Googol Slokvia
+Yeehaw Search
+Googol Canada
+Yeehaw Search
+Googol Saint Helena
+Googol Mexico
+Googol Mexico
+Googol Mexico
+Googol Mexico
+Googol Mexico
+Googol Slokvia
+Googol Azerbaijan
+Googol Mexico
+Yeehaw Search
+Yeehaw Search
+Googol Malta
+Googol Haiti
+Googol Slokvia
+Googol Mexico
+Yeehaw Search
+Googol Haiti
+Yeehaw Search
+Googol Canada
+Googol Malta
+Googol Saint Helena
+Googol Malta
+Googol Bahrain
+Googol Azerbaijan
+Googol Azerbaijan
+Googol Canada
+Googol Azerbaijan
+Googol Canada
+Googol Malta
+Googol Bahrain
+Googol Mexico
+Googol Haiti
+8
+Googol Kazakhstan
+Googol Canada
+Googol Kenya
+Googol Israel
+Googol Malaysia
+Googol The Gambia
+Googol Rwanda
+Googol Panama
+40
+Googol The Gambia
+Googol Kazakhstan
+Googol The Gambia
+Googol Malaysia
+Googol Rwanda
+Googol The Gambia
+Googol Canada
+Googol Kazakhstan
+Googol Rwanda
+Googol The Gambia
+Googol Panama
+Googol Panama
+Googol Panama
+Googol Rwanda
+Googol Panama
+Googol Panama
+Googol The Gambia
+Googol Rwanda
+Googol Panama
+Googol Malaysia
+Googol Rwanda
+Googol Panama
+Googol Rwanda
+Googol Panama
+Googol Panama
+Googol The Gambia
+Googol Canada
+Googol Rwanda
+Googol Rwanda
+Googol Kazakhstan
+Googol Malaysia
+Googol Panama
+Googol Panama
+Googol Panama
+Googol Panama
+Googol Panama
+Googol Israel
+Googol Panama
+Googol Panama
+Googol Malaysia
+9
+Googol Jordon
+Googol British Virgin Islands
+Googol Turkmenistan
+Googol Spain
+Googol Greenland
+Googol Oman
+Dubai
+Googol Sweden
+Googol Anguilla
+99
+Googol Oman
+Googol Oman
+Dubai
+Googol Turkmenistan
+Googol Jordon
+Googol Jordon
+Googol Spain
+Googol Anguilla
+Googol British Virgin Islands
+Googol Oman
+Googol Sweden
+Dubai
+Googol British Virgin Islands
+Googol British Virgin Islands
+Googol Sweden
+Dubai
+Dubai
+Googol Sweden
+Googol Jordon
+Googol Anguilla
+Googol Jordon
+Googol Oman
+Googol Turkmenistan
+Googol Sweden
+Googol Turkmenistan
+Dubai
+Googol Sweden
+Googol Jordon
+Googol Sweden
+Googol Turkmenistan
+Googol Spain
+Googol British Virgin Islands
+Dubai
+Dubai
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Sweden
+Googol Anguilla
+Dubai
+Googol Anguilla
+Googol Anguilla
+Googol Sweden
+Googol Anguilla
+Googol Anguilla
+Googol Sweden
+Dubai
+Googol Sweden
+Googol Anguilla
+Googol Anguilla
+Googol Sweden
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Dubai
+Googol Sweden
+Googol Anguilla
+Googol Sweden
+Googol Anguilla
+Googol Anguilla
+Dubai
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Dubai
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Sweden
+Googol Greenland
+Googol Anguilla
+Dubai
+Googol Sweden
+Googol Anguilla
+Googol Anguilla
+Dubai
+Googol Sweden
+Googol Oman
+Googol Anguilla
+Googol British Virgin Islands
+Googol Anguilla
+Googol Anguilla
+Googol Anguilla
+Googol Sweden
+Googol Anguilla
+Googol Anguilla
+Dubai
+Dubai
+Googol Anguilla
+Googol Jordon
+Googol Sweden
+10
+Googol Montserrat
+Googol Micronesia
+Googol Panama
+Northern Lightenning
+fBay
+Megallan
+Googol Rwanda
+B9
+Googol Hungary
+All Thee Web
+90
+Megallan
+Northern Lightenning
+Googol Hungary
+Googol Rwanda
+Megallan
+Googol Micronesia
+Northern Lightenning
+fBay
+Northern Lightenning
+Megallan
+fBay
+Googol Panama
+Megallan
+All Thee Web
+Megallan
+B9
+All Thee Web
+All Thee Web
+All Thee Web
+Googol Rwanda
+Northern Lightenning
+Googol Panama
+fBay
+B9
+Northern Lightenning
+Googol Panama
+Googol Montserrat
+fBay
+All Thee Web
+Northern Lightenning
+Northern Lightenning
+fBay
+B9
+Northern Lightenning
+Googol Panama
+fBay
+fBay
+Megallan
+All Thee Web
+All Thee Web
+Googol Panama
+Northern Lightenning
+fBay
+B9
+fBay
+All Thee Web
+Googol Rwanda
+Northern Lightenning
+Googol Hungary
+Megallan
+Googol Hungary
+Googol Panama
+Northern Lightenning
+Googol Hungary
+Googol Rwanda
+Googol Montserrat
+All Thee Web
+Megallan
+fBay
+Googol Panama
+Googol Hungary
+B9
+Googol Panama
+Googol Hungary
+fBay
+Googol Panama
+Googol Montserrat
+fBay
+Googol Hungary
+Googol Montserrat
+Googol Hungary
+B9
+Northern Lightenning
+Googol Panama
+Northern Lightenning
+All Thee Web
+All Thee Web
+Googol Montserrat
+All Thee Web
+Googol Montserrat
+All Thee Web
+Googol Hungary
+fBay
+Googol Panama
+Megallan
+Googol Hungary
+Googol Panama
+fBay
+Googol Micronesia
+Googol Rwanda
+9
+Googol Brazil
+Yeehaw Search
+Googol Hungary
+Googol India
+Googol Germany
+Googol Demark
+Googol The Bahamas
+Googol Tonga
+Googol Portugal
+90
+Googol Brazil
+Googol Germany
+Googol The Bahamas
+Googol Hungary
+Googol Germany
+Googol Brazil
+Yeehaw Search
+Googol Brazil
+Googol Brazil
+Yeehaw Search
+Googol Portugal
+Googol Germany
+Googol Germany
+Googol India
+Googol The Bahamas
+Googol Hungary
+Yeehaw Search
+Googol Brazil
+Googol Brazil
+Googol Portugal
+Googol Germany
+Googol Portugal
+Googol Germany
+Googol Germany
+Googol Tonga
+Googol Demark
+Googol Germany
+Googol The Bahamas
+Googol Brazil
+Googol Hungary
+Googol Germany
+Googol The Bahamas
+Googol Demark
+Googol Germany
+Googol Germany
+Googol Demark
+Googol Tonga
+Googol Demark
+Googol Demark
+Googol Brazil
+Googol Hungary
+Googol The Bahamas
+Yeehaw Search
+Googol Demark
+Googol Portugal
+Googol Portugal
+Googol Brazil
+Googol The Bahamas
+Googol India
+Googol India
+Googol Portugal
+Googol Hungary
+Googol The Bahamas
+Googol The Bahamas
+Googol Germany
+Googol India
+Googol India
+Googol Hungary
+Googol Demark
+Googol Portugal
+Googol Demark
+Yeehaw Search
+Googol India
+Googol Hungary
+Googol India
+Googol Portugal
+Googol Tonga
+Googol Hungary
+Googol Germany
+Yeehaw Search
+Googol Brazil
+Googol Germany
+Googol Tonga
+Googol Portugal
+Googol Tonga
+Googol The Bahamas
+Googol Tonga
+Googol Tonga
+Googol India
+Googol Brazil
+Yeehaw Search
+Googol Brazil
+Googol Hungary
+Googol Portugal
+Googol Tonga
+Googol Germany
+Googol Brazil
+Googol Portugal
+Googol The Bahamas
+Googol The Bahamas
+7
+Googol Portugal
+Googol Sri Lanka
+Googol Dominica
+Googol Morocco
+Googol UK
+Googol Saudi Arabia
+Googol South Korea
+100
+Googol Dominica
+Googol Dominica
+Googol Morocco
+Googol Morocco
+Googol Morocco
+Googol Morocco
+Googol Saudi Arabia
+Googol South Korea
+Googol Saudi Arabia
+Googol Portugal
+Googol South Korea
+Googol UK
+Googol Saudi Arabia
+Googol South Korea
+Googol South Korea
+Googol South Korea
+Googol South Korea
+Googol South Korea
+Googol Saudi Arabia
+Googol Dominica
+Googol South Korea
+Googol South Korea
+Googol Saudi Arabia
+Googol Dominica
+Googol UK
+Googol Morocco
+Googol Morocco
+Googol UK
+Googol South Korea
+Googol UK
+Googol South Korea
+Googol Saudi Arabia
+Googol UK
+Googol South Korea
+Googol South Korea
+Googol South Korea
+Googol Morocco
+Googol UK
+Googol South Korea
+Googol UK
+Googol South Korea
+Googol South Korea
+Googol Saudi Arabia
+Googol South Korea
+Googol Saudi Arabia
+Googol South Korea
+Googol South Korea
+Googol Saudi Arabia
+Googol South Korea
+Googol UK
+Googol Dominica
+Googol South Korea
+Googol South Korea
+Googol South Korea
+Googol UK
+Googol Morocco
+Googol South Korea
+Googol Dominica
+Googol Dominica
+Googol Morocco
+Googol Dominica
+Googol Dominica
+Googol UK
+Googol UK
+Googol UK
+Googol Sri Lanka
+Googol UK
+Googol South Korea
+Googol Dominica
+Googol Portugal
+Googol UK
+Googol South Korea
+Googol Dominica
+Googol Sri Lanka
+Googol South Korea
+Googol UK
+Googol Saudi Arabia
+Googol Dominica
+Googol UK
+Googol Sri Lanka
+Googol South Korea
+Googol UK
+Googol Saudi Arabia
+Googol Dominica
+Googol Sri Lanka
+Googol South Korea
+Googol South Korea
+Googol Sri Lanka
+Googol Dominica
+Googol Dominica
+Googol Sri Lanka
+Googol Dominica
+Googol Dominica
+Googol UK
+Googol Sri Lanka
+Googol South Korea
+Googol South Korea
+Googol Sri Lanka
+Googol Dominica
+Googol South Korea
+10
+Alta View
+Googol Poland
+Wiki Search
+Googol Montserrat
+Googol Bulgaria
+Googol Singapore
+Googol Greece
+Yeehaw Search
+Googol Canada
+Googol South Africa
+100
+Googol South Africa
+Googol Montserrat
+Alta View
+Alta View
+Googol South Africa
+Googol Greece
+Googol Singapore
+Alta View
+Googol South Africa
+Googol Canada
+Googol South Africa
+Googol South Africa
+Googol South Africa
+Googol South Africa
+Googol Canada
+Googol Canada
+Googol South Africa
+Googol Canada
+Googol South Africa
+Googol South Africa
+Googol South Africa
+Googol South Africa
+Googol South Africa
+Googol Canada
+Googol Canada
+Googol South Africa
+Googol South Africa
+Googol Canada
+Googol South Africa
+Googol Greece
+Googol South Africa
+Googol South Africa
+Yeehaw Search
+Googol South Africa
+Googol Canada
+Googol South Africa
+Googol Canada
+Googol Greece
+Googol Canada
+Googol South Africa
+Googol Canada
+Googol Greece
+Googol Greece
+Googol Singapore
+Alta View
+Alta View
+Alta View
+Googol Bulgaria
+Alta View
+Googol Canada
+Googol Montserrat
+Googol Montserrat
+Wiki Search
+Googol Greece
+Googol Canada
+Googol Canada
+Googol Montserrat
+Googol South Africa
+Alta View
+Alta View
+Alta View
+Googol Singapore
+Alta View
+Googol Canada
+Alta View
+Googol Poland
+Googol Canada
+Googol Singapore
+Googol Canada
+Googol Canada
+Wiki Search
+Alta View
+Googol Singapore
+Googol Canada
+Googol Singapore
+Googol South Africa
+Googol Montserrat
+Alta View
+Yeehaw Search
+Googol Bulgaria
+Googol Canada
+Alta View
+Wiki Search
+Alta View
+Alta View
+Googol Montserrat
+Googol Montserrat
+Googol Bulgaria
+Googol Montserrat
+Googol Bulgaria
+Googol Canada
+Googol Greece
+Googol Canada
+Googol Montserrat
+Googol Singapore
+Googol Bulgaria
+Googol Canada
+Googol Canada
+Googol Montserrat
+Alta View
diff --git a/codejam_2008/src/y2008qual/A-small-practice.out b/codejam_2008/src/y2008qual/A-small-practice.out
new file mode 100644
index 0000000..68af193
--- /dev/null
+++ b/codejam_2008/src/y2008qual/A-small-practice.out
@@ -0,0 +1,20 @@
+Case #1: 0
+Case #2: 0
+Case #3: 1
+Case #4: 1
+Case #5: 3
+Case #6: 3
+Case #7: 99
+Case #8: 48
+Case #9: 10
+Case #10: 3
+Case #11: 0
+Case #12: 1
+Case #13: 5
+Case #14: 2
+Case #15: 0
+Case #16: 1
+Case #17: 2
+Case #18: 3
+Case #19: 1
+Case #20: 2
diff --git a/codejam_2008/src/y2008qual/a.rs b/codejam_2008/src/y2008qual/a.rs
new file mode 100644
index 0000000..f89fbe9
--- /dev/null
+++ b/codejam_2008/src/y2008qual/a.rs
@@ -0,0 +1,70 @@
+//use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use std::usize;
+
+/*
+Simulation
+Digits
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let n = reader.read_int();
+
+                let search_engines : Vec<_> = (0..n).map(|_| reader.read_string()).collect();
+
+                let q = reader.read_int();
+
+                let queries : Vec<_> = (0..q).map(|_| reader.read_string()).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(search_engines.as_slice(), queries.as_slice())
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(search_engines: &[String], queries: &[String]) -> usize
+{
+    let mut s_changes = 0;
+	let mut cur_q = 0;
+
+	while cur_q != queries.len() {
+
+        let s_potential_progress = search_engines.iter().map( |search| {
+            let idx = queries[cur_q..queries.len()].iter().position( |q| q == search);
+            if let Some(idx) = idx  {
+                idx + cur_q
+            } else {
+                queries.len()
+            }
+        });
+
+        cur_q = s_potential_progress.max().unwrap();
+        s_changes += 1;
+    }
+
+	if s_changes > 0 {
+        s_changes -= 1;
+    }
+
+    s_changes
+}
diff --git a/codejam_2008/src/y2008qual/mod.rs b/codejam_2008/src/y2008qual/mod.rs
new file mode 100644
index 0000000..c444ec6
--- /dev/null
+++ b/codejam_2008/src/y2008qual/mod.rs
@@ -0,0 +1 @@
+pub mod a;
\ No newline at end of file

From 06474c6ea5d0521bf940fc60e439236a6961d3b0 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 13 Feb 2019 10:36:28 +0100
Subject: [PATCH 002/122] b

---
 codejam_2008/Cargo.lock                       |  485 ++
 codejam_2008/src/main.rs                      |   16 +-
 .../src/y2008qual/B-large-practice.in         | 7718 +++++++++++++++++
 .../src/y2008qual/B-large-practice.out        |  100 +
 .../src/y2008qual/B-small-practice.in         |  416 +
 .../src/y2008qual/B-small-practice.out        |   20 +
 codejam_2008/src/y2008qual/a.rs               |    2 +
 codejam_2008/src/y2008qual/b.rs               |   57 +
 codejam_2008/src/y2008qual/mod.rs             |    3 +-
 9 files changed, 8808 insertions(+), 9 deletions(-)
 create mode 100644 codejam_2008/Cargo.lock
 create mode 100644 codejam_2008/src/y2008qual/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008qual/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008qual/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008qual/B-small-practice.out
 create mode 100644 codejam_2008/src/y2008qual/b.rs

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
new file mode 100644
index 0000000..fe9ab89
--- /dev/null
+++ b/codejam_2008/Cargo.lock
@@ -0,0 +1,485 @@
+[[package]]
+name = "alga"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "approx"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bimap"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bit-set"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "byteorder"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "codejam_2008"
+version = "0.1.0"
+dependencies = [
+ "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rust-algorithm-problems 0.1.0",
+]
+
+[[package]]
+name = "either"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "generic-array"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "hamming"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "indexmap"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "itertools"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "libm"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "log"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "matrixmultiply"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "matrixmultiply"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "nalgebra"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "alga 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "matrixmultiply 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num_cpus"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "permutohedron"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rawpointer"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rulinalg"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rust-algorithm-problems"
+version = "0.1.0"
+dependencies = [
+ "bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nalgebra 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "threadpool"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "try_opt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "typenum"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum alga 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "104e81d8a5813ac86ef14f6bef070d81de6da950c51648a8df8fe877f9316189"
+"checksum approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c57ff1a5b00753647aebbbcf4ea67fa1e711a65ea7a30eb90dbf07de2485aee"
+"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
+"checksum bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6b282b982237078bfac61a948a2198f185aceea8b9a6e794b70b96fd31923d3d"
+"checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a"
+"checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf"
+"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
+"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
+"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
+"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+"checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
+"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592"
+"checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1"
+"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d"
+"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
+"checksum libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)" = "e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047"
+"checksum libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "03c0bb6d5ce1b5cc6fd0578ec1cbc18c9d88b5b591a5c7c1d6c6175e266a0819"
+"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
+"checksum matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
+"checksum matrixmultiply 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfed72d871629daa12b25af198f110e8095d7650f5f4c61c5bac28364604f9b"
+"checksum nalgebra 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f75ff2a99063281e23bc062bed0144a9c1f627f4ac00b060b378276d7cff1d83"
+"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
+"checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
+"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8"
+"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
+"checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124"
+"checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10"
+"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
+"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba"
+"checksum permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c"
+"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
+"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+"checksum rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9ea758282efe12823e0d952ddb269d2e1897227e464919a554f2a03ef1b832"
+"checksum rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b7c690732391ae0abafced5015ffb53656abfaec61b342290e5eb56b286a679d"
+"checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05"
+"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+"checksum rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
+"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+"checksum rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "04ada202c9685e1d72a7420c578e92b358dbf807d3dfabb676a3dab9cc3bb12f"
+"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
+"checksum try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e282c6497867d439f3454cebee548f5961d2787c72c1b7b96481d7f0a3e5bc0"
+"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
+"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index b1672ce..8efccb5 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -7,27 +7,27 @@ extern crate codejam;
 /*#[macro_use]
 extern crate itertools;*/
 
-/*#[macro_use]
-extern crate log;*/
+#[macro_use]
+extern crate log;
 
 use codejam::util::log::init_log;
 
-pub fn run_y2008_roundQual()
+pub fn run_y2008_round_qual()
 {
-    
+    y2008qual::a::solve_all_cases();
 }
 
-pub fn run_y2008_round1A()
+pub fn run_y2008_round_1a()
 {
 
 }
 
-pub fn run_y2008_round1B()
+pub fn run_y2008_round_1b()
 {
 
 }
 
-pub fn run_y2008_round1C()
+pub fn run_y2008_round_1c()
 {
 
 }
@@ -41,5 +41,5 @@ fn main()
 {
     init_log();
 
-    y2008qual::a::solve_all_cases();
+    y2008qual::b::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008qual/B-large-practice.in b/codejam_2008/src/y2008qual/B-large-practice.in
new file mode 100644
index 0000000..2eabd42
--- /dev/null
+++ b/codejam_2008/src/y2008qual/B-large-practice.in
@@ -0,0 +1,7718 @@
+100
+0
+1 2
+01:40 01:41
+01:39 01:40
+01:40 01:41
+3
+1 1
+01:40 01:41
+01:44 01:45
+10
+3 2
+01:40 01:41
+01:40 01:42
+01:40 01:43
+01:49 01:50
+01:50 01:51
+1
+2 2
+12:01 12:03
+12:07 12:10
+12:03 12:04
+12:06 12:08
+5
+4 2
+00:15 00:22
+00:05 00:11
+00:11 00:16
+00:00 00:08
+00:13 00:20
+00:10 00:16
+0
+4 2
+00:09 00:19
+00:20 00:27
+00:00 00:08
+00:13 00:19
+00:02 00:09
+00:07 00:12
+9
+4 5
+20:27 20:52
+20:04 20:34
+20:45 21:10
+20:01 20:13
+20:28 20:58
+21:00 21:18
+20:26 20:36
+20:05 20:32
+20:38 21:08
+10
+7 8
+05:15 05:16
+05:09 05:12
+05:14 05:17
+05:15 05:18
+05:04 05:09
+05:01 05:03
+05:03 05:04
+05:13 05:16
+05:01 05:02
+05:04 05:05
+05:15 05:20
+05:12 05:16
+05:12 05:17
+05:15 05:19
+05:14 05:18
+4
+3 11
+19:50 20:08
+19:21 20:13
+19:11 19:46
+19:00 19:22
+19:04 19:19
+19:45 20:11
+19:24 19:44
+19:25 19:44
+19:23 19:35
+19:52 20:16
+19:32 19:52
+19:34 19:49
+19:30 19:50
+19:02 19:19
+13
+25 69
+13:53 14:05
+13:59 14:16
+13:51 14:02
+12:47 13:04
+13:36 13:50
+13:17 13:29
+13:26 13:38
+13:30 13:44
+14:00 14:18
+12:04 12:20
+12:30 12:50
+13:07 13:19
+12:52 13:04
+13:56 14:09
+12:18 12:37
+13:33 13:52
+12:49 13:05
+12:20 12:32
+13:44 13:58
+12:44 12:54
+12:05 12:21
+12:08 12:24
+13:10 13:23
+12:03 12:17
+12:17 12:28
+11:33 11:49
+11:03 11:21
+11:13 11:31
+12:34 12:44
+13:37 13:55
+14:25 14:38
+14:30 14:50
+11:36 11:46
+13:17 13:28
+11:34 11:47
+12:37 12:53
+11:17 11:29
+13:10 13:21
+14:32 14:47
+13:18 13:30
+11:43 11:56
+13:01 13:12
+13:33 13:48
+14:24 14:38
+14:06 14:20
+12:48 12:58
+11:58 12:08
+12:11 12:27
+11:25 11:45
+14:18 14:36
+14:24 14:34
+11:39 11:56
+11:52 12:05
+14:43 15:02
+14:49 15:00
+12:01 12:19
+14:19 14:33
+12:57 13:16
+12:42 13:00
+12:00 12:10
+11:51 12:09
+12:24 12:35
+14:11 14:23
+12:02 12:19
+13:32 13:51
+12:10 12:28
+13:14 13:28
+11:05 11:25
+14:08 14:22
+14:37 14:49
+14:21 14:41
+11:48 12:05
+14:49 15:03
+12:47 13:06
+11:56 12:12
+11:06 11:19
+13:03 13:16
+14:51 15:11
+12:43 13:03
+11:40 11:51
+12:12 12:26
+13:16 13:35
+12:10 12:29
+12:01 12:15
+11:53 12:04
+13:51 14:08
+11:35 11:51
+14:09 14:28
+12:23 12:34
+14:17 14:30
+12:18 12:28
+14:01 14:19
+11:40 11:56
+12:54 13:12
+15
+29 58
+10:28 10:39
+17:10 18:23
+12:24 15:09
+17:03 19:04
+16:15 19:23
+18:06 20:04
+18:21 21:34
+09:20 13:16
+09:36 10:05
+11:57 14:15
+11:51 12:22
+17:48 21:25
+09:33 12:35
+18:19 22:14
+11:28 13:12
+16:53 18:54
+09:16 11:31
+15:30 19:27
+10:50 13:48
+15:13 19:01
+15:04 17:05
+16:12 18:12
+14:49 17:22
+10:18 11:37
+09:51 11:21
+11:17 15:15
+09:51 12:27
+11:59 14:41
+16:42 17:59
+11:21 15:55
+14:54 16:08
+16:43 17:52
+18:02 19:25
+17:56 20:57
+09:49 13:29
+15:24 16:51
+17:54 21:36
+18:46 20:32
+15:13 19:57
+12:57 15:58
+16:22 17:55
+19:43 21:33
+11:22 14:49
+11:47 16:38
+12:43 15:44
+14:04 15:49
+09:09 11:08
+16:50 21:44
+09:59 13:31
+17:40 18:58
+12:57 15:52
+12:41 13:51
+10:13 13:46
+14:56 16:21
+10:25 14:58
+10:23 13:28
+20:00 23:40
+15:08 19:36
+19:02 23:04
+11:30 12:00
+17:10 21:51
+10:13 12:46
+09:18 10:44
+13:46 18:12
+14:27 16:06
+09:15 11:14
+11:38 15:50
+10:41 14:01
+18:09 21:25
+18:26 22:00
+09:41 12:14
+09:56 11:43
+09:48 14:23
+09:19 13:30
+14:06 17:26
+14:24 16:47
+18:55 20:41
+12:58 15:37
+12:55 16:49
+16:25 16:46
+11:38 14:45
+09:00 13:41
+19:21 20:36
+13:05 15:19
+10:35 15:00
+15:42 20:30
+16:20 16:39
+45
+19 42
+17:05 20:06
+03:37 06:59
+18:17 21:33
+08:42 12:31
+07:34 10:46
+13:08 16:44
+07:52 11:00
+02:45 05:46
+12:19 15:59
+06:08 09:19
+00:19 04:14
+19:27 22:47
+08:35 12:02
+16:12 19:37
+02:00 05:20
+18:05 21:52
+05:12 09:05
+15:15 18:41
+03:55 07:01
+02:30 07:24
+02:26 17:24
+14:22 17:46
+04:04 17:26
+15:48 20:46
+08:18 12:26
+14:03 16:40
+00:42 09:58
+07:46 12:19
+10:25 18:55
+18:16 21:07
+01:33 15:28
+15:05 19:25
+02:24 12:04
+15:32 18:55
+05:45 15:05
+11:55 13:26
+10:22 13:19
+10:09 23:44
+13:04 15:29
+10:42 16:22
+13:56 19:52
+11:14 15:12
+00:59 06:55
+04:48 19:39
+07:18 18:47
+12:32 20:19
+09:58 13:22
+07:09 08:27
+02:09 04:13
+16:21 21:46
+16:08 19:46
+00:15 14:04
+09:44 14:14
+10:44 18:05
+12:07 16:31
+15:03 20:13
+03:37 16:48
+18:42 23:39
+03:22 17:26
+18:56 20:38
+11:34 14:16
+60
+100 20
+04:55 08:54
+09:15 12:16
+15:53 19:36
+01:08 04:29
+03:32 06:44
+13:29 16:56
+13:53 17:40
+16:02 20:00
+17:35 20:55
+12:44 16:23
+09:09 12:11
+17:44 21:09
+16:17 20:04
+00:41 04:35
+08:30 12:30
+00:40 04:26
+11:48 15:33
+09:10 12:51
+18:27 22:13
+10:08 13:27
+03:30 06:56
+18:19 21:41
+07:40 10:58
+10:34 13:41
+04:19 07:40
+01:00 04:27
+13:38 17:37
+04:45 08:28
+14:48 18:10
+14:20 17:29
+13:02 16:34
+06:34 10:04
+12:58 16:10
+04:38 07:48
+14:15 17:17
+12:52 16:14
+02:06 06:00
+06:19 10:15
+17:56 21:02
+08:41 12:04
+04:35 08:04
+19:03 22:41
+01:05 04:18
+19:15 22:31
+19:09 22:12
+10:27 13:55
+07:07 10:37
+10:06 13:53
+16:13 20:06
+17:32 21:21
+15:22 18:31
+05:31 08:55
+10:30 13:34
+09:23 12:50
+06:07 09:24
+06:10 09:57
+12:50 16:17
+06:10 10:01
+05:44 08:49
+04:55 08:52
+02:11 05:36
+10:20 13:48
+16:12 19:15
+04:27 08:10
+06:57 10:35
+02:07 05:59
+12:04 15:22
+19:14 23:00
+18:34 22:24
+11:26 14:39
+00:02 03:37
+19:35 22:58
+06:44 09:45
+14:44 18:21
+13:03 16:50
+17:28 21:14
+05:00 08:41
+18:01 21:57
+17:19 21:10
+17:07 20:38
+05:27 09:12
+15:20 18:44
+07:35 11:33
+04:05 07:52
+08:09 11:11
+14:50 18:15
+19:57 23:05
+11:50 15:27
+06:19 09:38
+11:56 15:08
+02:28 06:17
+00:53 04:04
+10:12 13:56
+17:16 20:20
+05:10 08:14
+00:10 03:30
+03:04 07:01
+09:06 12:25
+11:02 14:43
+07:57 11:47
+11:08 14:35
+14:26 17:54
+16:13 21:03
+13:58 17:26
+07:16 11:28
+02:59 07:15
+12:14 15:44
+06:22 11:16
+02:31 06:02
+05:31 10:24
+17:09 20:52
+04:10 09:02
+06:28 10:43
+04:26 09:13
+01:46 06:44
+08:25 12:57
+09:39 12:44
+17:00 21:50
+14:16 18:39
+17:23 21:56
+13
+20 30
+12:11 12:30
+13:20 13:59
+14:55 15:27
+15:55 16:00
+17:07 17:54
+18:53 19:24
+20:30 20:32
+21:10 22:09
+17:26 18:11
+18:31 19:04
+19:20 19:34
+20:10 20:41
+21:47 22:32
+01:54 02:51
+03:25 03:35
+04:40 04:43
+05:24 06:15
+06:26 07:26
+08:04 08:13
+08:28 09:04
+12:36 13:11
+14:06 14:54
+15:34 15:50
+16:07 16:59
+17:58 18:48
+19:34 20:28
+20:40 21:07
+22:14 23:05
+17:10 17:21
+18:19 18:29
+19:13 19:16
+19:36 20:00
+20:47 21:38
+22:35 23:23
+03:00 03:17
+03:44 04:36
+04:50 05:22
+06:17 06:20
+07:33 08:00
+08:18 08:23
+09:14 09:57
+11:03 11:58
+12:20 12:59
+13:33 14:24
+14:36 15:15
+16:20 17:03
+17:51 18:00
+18:49 19:26
+19:51 20:00
+20:17 20:53
+0
+60 40
+05:10 05:24
+05:28 05:48
+06:22 06:44
+07:46 07:55
+08:31 09:03
+09:58 10:25
+11:16 11:28
+12:21 12:28
+13:10 13:49
+14:07 15:06
+15:37 15:49
+16:25 17:04
+17:39 18:16
+18:49 18:59
+19:58 20:57
+21:55 22:00
+22:10 22:39
+22:59 23:10
+09:46 10:10
+10:16 10:38
+11:10 11:52
+12:41 13:39
+14:12 14:55
+15:20 15:21
+15:51 16:45
+17:30 17:35
+18:16 18:44
+18:50 19:19
+19:35 19:51
+20:26 21:09
+21:43 22:28
+14:59 15:37
+16:33 17:30
+18:30 18:45
+18:57 19:09
+20:04 20:47
+21:00 21:25
+21:42 22:00
+22:59 23:23
+05:40 06:13
+06:25 07:24
+08:17 08:35
+09:23 09:45
+10:08 10:31
+11:15 11:30
+12:02 12:45
+13:11 13:26
+14:04 14:21
+14:45 15:17
+16:14 16:55
+17:15 18:14
+18:46 18:52
+19:19 20:09
+21:02 21:30
+21:34 22:13
+01:17 01:48
+02:27 03:26
+03:32 03:56
+04:54 05:25
+05:38 05:49
+05:03 05:10
+05:24 05:27
+05:48 06:22
+06:45 07:45
+07:55 08:31
+09:03 09:57
+10:25 11:16
+11:29 12:21
+12:29 13:10
+13:50 14:06
+15:06 15:37
+15:49 16:24
+17:05 17:39
+18:17 18:49
+19:00 19:58
+20:57 21:55
+22:01 22:10
+22:39 22:59
+09:29 09:45
+10:10 10:15
+10:39 11:09
+11:53 12:41
+13:39 14:12
+14:55 15:20
+15:21 15:50
+16:45 17:30
+17:35 18:15
+18:45 18:49
+19:19 19:35
+19:51 20:26
+21:10 21:43
+22:28 23:10
+14:21 14:58
+15:38 16:33
+17:30 18:29
+18:46 18:57
+19:09 20:03
+20:47 20:59
+21:25 21:41
+22:01 22:58
+24
+10 12
+04:52 05:02
+04:10 04:14
+04:21 04:24
+04:38 04:40
+04:54 04:57
+04:22 04:31
+04:38 04:44
+04:49 04:59
+04:12 04:13
+04:25 04:26
+04:46 04:47
+04:18 04:20
+04:27 04:37
+04:41 04:50
+04:34 04:37
+04:46 04:48
+04:15 04:24
+04:31 04:36
+04:45 04:54
+04:09 04:10
+04:17 04:22
+04:31 04:39
+5
+15 2
+11:35 13:26
+14:54 16:03
+13:16 14:53
+05:22 07:07
+09:17 10:33
+12:43 14:27
+11:52 13:17
+04:58 06:19
+07:41 09:31
+11:07 13:04
+14:23 15:37
+13:04 14:18
+01:36 02:50
+05:05 06:06
+07:19 08:28
+14:52 16:14
+09:52 11:27
+13
+4 12
+13:32 14:15
+14:50 15:33
+12:07 12:42
+13:31 14:16
+12:46 13:31
+14:19 14:50
+11:15 12:04
+12:44 13:30
+14:19 15:18
+11:57 12:42
+13:35 14:23
+10:34 11:16
+12:01 12:56
+13:41 14:40
+13:24 14:12
+10:30 11:00
+5
+13 17
+10:28 10:47
+10:44 11:04
+10:30 10:45
+10:07 10:18
+10:48 10:58
+10:15 10:30
+10:53 11:08
+10:20 10:38
+10:06 10:21
+10:41 10:56
+10:50 11:05
+10:08 10:25
+10:45 11:00
+10:01 10:21
+10:48 11:08
+10:50 11:08
+10:26 10:45
+10:36 10:49
+10:01 10:15
+10:41 11:01
+10:27 10:39
+10:57 11:08
+10:29 10:43
+10:30 10:43
+10:44 10:54
+10:10 10:20
+10:38 10:50
+10:45 10:56
+10:52 11:11
+10:57 11:07
+15
+18 19
+10:31 10:45
+11:15 11:31
+12:16 12:36
+13:07 13:25
+14:06 14:26
+14:42 14:53
+15:14 15:24
+15:51 16:09
+16:43 16:53
+17:35 17:49
+18:06 18:25
+18:51 19:11
+19:34 19:45
+20:18 20:30
+21:15 21:35
+16:27 16:39
+17:06 17:26
+18:01 18:17
+10:59 11:09
+11:48 12:04
+12:39 12:51
+13:43 13:58
+14:30 14:40
+15:00 15:14
+15:26 15:38
+16:15 16:34
+17:02 17:21
+17:53 18:03
+18:35 18:51
+19:20 19:34
+19:57 20:09
+20:44 21:04
+21:36 21:56
+16:49 17:02
+17:41 18:01
+18:21 18:32
+19:01 19:16
+2
+20 19
+21:56 22:08
+21:15 21:26
+21:45 21:55
+21:31 21:43
+22:00 22:11
+19:16 19:33
+19:59 20:17
+20:42 20:56
+21:11 21:24
+21:53 22:04
+19:51 20:09
+20:28 20:42
+21:02 21:14
+21:45 21:57
+20:56 21:14
+21:39 21:59
+21:01 21:12
+21:32 21:42
+21:45 21:55
+19:19 19:37
+21:46 22:06
+20:51 21:09
+21:31 21:45
+21:46 22:00
+19:39 19:55
+20:23 20:34
+20:57 21:10
+21:33 21:43
+19:40 19:50
+20:11 20:23
+20:48 21:01
+21:22 21:41
+21:18 21:32
+21:15 21:31
+21:52 22:05
+21:21 21:41
+19:02 19:17
+19:41 19:53
+20:15 20:27
+30
+20 20
+17:30 18:40
+20:57 22:06
+16:16 17:34
+20:13 21:31
+16:09 17:26
+19:25 20:40
+19:16 20:21
+20:56 21:58
+14:55 15:55
+18:00 19:10
+14:49 15:50
+18:28 19:36
+21:53 23:04
+16:03 17:21
+20:12 21:26
+15:07 16:14
+18:54 19:54
+18:28 19:33
+20:01 21:01
+13:13 14:31
+15:39 16:51
+19:08 20:23
+18:23 19:24
+17:51 18:54
+21:25 22:25
+20:58 22:09
+20:59 22:09
+19:23 20:28
+12:49 13:58
+16:17 17:29
+20:07 21:13
+13:16 14:28
+16:41 17:51
+20:24 21:30
+21:41 22:46
+18:17 19:25
+12:52 14:09
+17:10 18:25
+20:50 22:08
+16:27 17:39
+40
+50 50
+00:43 01:31
+00:06 00:43
+00:10 00:45
+00:25 01:08
+00:37 01:11
+00:39 01:22
+00:18 01:05
+00:42 01:22
+00:06 00:47
+00:47 01:21
+00:45 01:27
+00:19 01:08
+00:31 01:14
+00:41 01:34
+00:25 01:10
+00:50 01:45
+00:05 00:42
+00:15 01:00
+00:16 00:50
+00:10 00:56
+00:47 01:22
+00:01 00:31
+00:10 00:47
+00:25 00:59
+00:10 00:47
+00:40 01:37
+00:50 01:35
+00:14 01:11
+00:07 01:04
+00:12 00:53
+00:33 01:03
+00:13 01:03
+00:27 01:26
+00:20 01:20
+00:38 01:29
+00:28 01:12
+00:44 01:38
+00:23 00:54
+00:10 01:07
+00:40 01:13
+00:54 01:32
+00:59 01:35
+00:30 01:30
+00:27 01:21
+00:28 01:22
+00:41 01:24
+00:40 01:21
+00:22 00:58
+00:16 00:56
+00:40 01:29
+00:07 00:54
+00:50 01:49
+00:07 00:46
+00:13 00:54
+00:57 01:57
+00:49 01:30
+00:23 00:54
+00:31 01:07
+00:50 01:34
+00:50 01:36
+00:39 01:18
+00:25 01:10
+01:00 01:58
+00:47 01:19
+00:15 00:51
+00:04 00:43
+00:50 01:28
+00:22 01:03
+00:56 01:27
+00:44 01:24
+00:47 01:39
+00:16 00:49
+00:12 01:09
+01:00 01:53
+00:28 00:58
+00:03 00:50
+00:39 01:29
+00:37 01:18
+00:10 00:53
+00:24 00:58
+00:34 01:32
+00:47 01:34
+00:47 01:31
+00:19 01:08
+00:26 01:15
+00:15 00:52
+00:12 01:00
+00:08 00:53
+00:36 01:15
+00:49 01:46
+00:39 01:15
+00:07 00:37
+00:45 01:36
+00:26 00:58
+00:40 01:30
+00:44 01:21
+00:29 01:28
+00:03 01:01
+00:16 00:56
+00:26 01:15
+41
+49 51
+00:14 00:45
+01:27 01:59
+01:46 02:31
+00:57 01:47
+00:38 01:13
+00:46 01:17
+01:23 02:19
+00:18 01:07
+02:00 02:57
+00:10 00:55
+00:58 01:32
+00:54 01:51
+00:00 00:35
+00:10 00:48
+00:03 00:54
+01:48 02:38
+01:02 01:32
+00:16 00:53
+00:57 01:54
+00:44 01:15
+00:26 00:56
+00:10 00:47
+01:21 01:57
+00:41 01:37
+01:16 02:05
+00:27 01:23
+00:41 01:34
+00:05 00:44
+01:02 01:40
+01:51 02:39
+00:49 01:42
+01:30 02:07
+01:07 01:39
+00:02 00:44
+01:39 02:24
+01:37 02:20
+00:43 01:20
+01:11 01:53
+01:00 01:42
+00:28 01:14
+01:13 02:11
+01:39 02:25
+00:34 01:34
+01:18 02:05
+01:51 02:32
+00:38 01:19
+00:44 01:27
+01:18 01:49
+01:03 01:35
+01:49 02:33
+01:15 01:59
+01:58 02:51
+01:07 01:39
+01:22 01:59
+01:35 02:31
+00:48 01:38
+01:33 02:08
+01:13 01:56
+01:11 02:07
+00:36 01:21
+00:03 00:56
+01:43 02:36
+01:44 02:30
+00:30 01:14
+01:58 02:38
+00:57 01:53
+00:24 01:06
+00:19 00:53
+00:10 01:00
+00:06 00:50
+00:24 01:02
+02:00 02:58
+01:35 02:27
+00:27 00:59
+00:12 01:09
+00:04 00:48
+00:29 01:29
+01:22 01:54
+01:25 01:58
+01:16 02:10
+01:45 02:19
+01:31 02:15
+01:13 01:51
+01:33 02:05
+02:00 02:58
+00:29 01:17
+01:33 02:27
+01:56 02:33
+00:29 01:20
+01:47 02:24
+00:46 01:29
+00:44 01:23
+01:59 02:59
+01:18 02:07
+01:20 02:03
+01:43 02:33
+01:36 02:30
+00:42 01:20
+00:43 01:17
+01:21 02:01
+42
+48 52
+00:51 01:26
+02:45 03:34
+00:37 01:07
+02:54 03:35
+02:09 02:52
+01:14 02:14
+00:44 01:21
+02:14 02:52
+02:13 03:07
+02:24 02:58
+02:17 02:49
+01:38 02:23
+00:10 00:54
+01:53 02:40
+02:32 03:22
+02:29 03:26
+00:04 00:47
+02:28 03:14
+02:12 02:44
+00:42 01:33
+00:28 01:00
+00:58 01:56
+01:58 02:35
+01:08 01:52
+01:12 02:03
+01:40 02:29
+01:15 01:49
+01:08 02:06
+00:43 01:20
+01:29 02:07
+02:47 03:30
+02:57 03:45
+01:39 02:14
+01:29 02:26
+00:05 00:52
+00:10 00:54
+02:40 03:20
+00:05 00:46
+00:08 00:58
+01:42 02:29
+00:04 00:35
+01:58 02:42
+02:52 03:32
+00:29 01:06
+02:32 03:04
+02:11 03:08
+00:32 01:13
+00:30 01:13
+01:20 02:13
+01:37 02:34
+02:19 03:00
+02:38 03:24
+00:26 01:21
+01:49 02:26
+01:24 02:18
+01:41 02:21
+01:58 02:53
+01:48 02:43
+01:32 02:30
+00:44 01:28
+02:26 03:17
+02:33 03:05
+02:23 03:12
+00:28 01:09
+01:00 01:32
+01:18 02:00
+02:34 03:05
+00:41 01:33
+01:03 01:51
+00:44 01:17
+01:36 02:31
+01:18 01:49
+01:24 02:01
+01:14 01:44
+02:23 03:00
+01:23 02:19
+01:53 02:41
+01:39 02:32
+02:40 03:18
+02:47 03:37
+02:27 03:27
+01:43 02:16
+00:29 01:04
+00:34 01:07
+00:21 00:59
+01:41 02:21
+00:28 01:18
+01:05 01:38
+01:50 02:26
+00:12 01:12
+02:47 03:46
+00:32 01:23
+02:58 03:30
+02:13 02:57
+01:57 02:29
+01:20 02:01
+01:32 02:13
+02:10 03:02
+00:35 01:09
+01:02 01:49
+43
+47 53
+02:21 03:15
+00:48 01:20
+00:39 01:24
+01:43 02:28
+02:56 03:34
+00:51 01:49
+01:04 01:41
+00:14 01:00
+02:55 03:44
+03:57 04:29
+01:32 02:07
+00:47 01:32
+01:30 02:07
+02:47 03:22
+03:33 04:23
+01:09 02:09
+01:37 02:34
+02:31 03:13
+01:49 02:42
+03:28 04:03
+00:48 01:18
+02:03 02:44
+00:31 01:25
+01:49 02:46
+01:56 02:27
+02:02 02:55
+02:12 03:11
+02:54 03:54
+02:39 03:35
+02:59 03:57
+03:50 04:38
+02:48 03:21
+02:49 03:49
+00:26 01:19
+00:25 01:20
+00:42 01:36
+03:11 04:01
+03:48 04:26
+01:20 02:01
+00:58 01:39
+01:14 01:51
+02:49 03:37
+03:08 04:02
+01:07 01:47
+00:08 01:08
+03:11 03:52
+02:07 03:00
+00:28 01:24
+01:52 02:40
+01:46 02:38
+02:36 03:35
+00:22 01:19
+03:44 04:42
+03:44 04:42
+01:53 02:33
+03:28 04:12
+03:42 04:32
+00:53 01:35
+03:19 04:13
+01:48 02:46
+01:36 02:33
+00:42 01:18
+00:33 01:22
+03:17 04:03
+00:31 01:20
+03:41 04:31
+03:43 04:40
+03:33 04:32
+03:31 04:31
+03:03 03:36
+03:14 03:47
+03:20 03:58
+00:46 01:26
+03:21 03:52
+00:00 00:50
+02:22 03:12
+03:33 04:27
+03:35 04:07
+02:04 02:55
+02:06 02:41
+02:48 03:20
+00:48 01:18
+01:03 01:41
+01:23 01:54
+01:38 02:19
+02:40 03:32
+03:29 04:06
+01:53 02:26
+01:23 02:13
+01:47 02:42
+01:21 01:53
+02:39 03:31
+00:03 00:40
+03:12 03:49
+02:53 03:38
+02:47 03:25
+01:00 01:31
+02:13 03:11
+02:09 02:48
+03:52 04:32
+44
+46 54
+03:41 04:18
+00:34 01:16
+01:45 02:30
+01:50 02:24
+01:43 02:26
+02:11 02:48
+02:13 03:06
+03:38 04:38
+02:29 03:09
+01:13 01:57
+04:47 05:29
+01:36 02:11
+03:56 04:56
+01:28 02:15
+04:01 04:47
+04:50 05:44
+01:30 02:29
+01:08 01:52
+02:45 03:18
+03:48 04:18
+01:31 02:20
+01:43 02:16
+02:58 03:35
+01:49 02:43
+00:03 00:57
+02:08 03:02
+00:10 01:02
+03:20 04:13
+04:59 05:33
+03:13 03:49
+01:50 02:26
+02:25 02:55
+02:48 03:37
+00:49 01:42
+02:50 03:44
+03:49 04:19
+04:03 04:54
+00:53 01:28
+01:35 02:26
+02:53 03:23
+04:13 05:06
+04:38 05:20
+02:06 02:49
+04:19 04:57
+01:30 02:08
+03:03 03:48
+02:16 03:12
+00:28 01:07
+00:27 01:04
+00:47 01:19
+04:23 05:12
+04:37 05:23
+03:50 04:44
+01:57 02:29
+04:41 05:24
+03:12 04:07
+02:56 03:32
+00:43 01:39
+02:05 02:49
+01:04 01:44
+02:39 03:20
+03:42 04:37
+00:56 01:37
+03:59 04:55
+03:10 03:46
+04:36 05:16
+02:07 02:54
+00:57 01:42
+00:17 01:11
+01:04 01:57
+01:22 01:54
+01:41 02:39
+02:19 02:58
+01:20 02:14
+03:07 03:49
+00:32 01:16
+04:06 04:38
+02:27 03:02
+03:17 04:13
+00:46 01:41
+02:13 02:53
+01:16 01:48
+00:30 01:26
+00:26 00:59
+04:02 04:46
+00:37 01:29
+00:34 01:22
+00:33 01:09
+02:24 03:19
+03:23 04:14
+01:16 01:47
+03:09 03:57
+04:25 05:01
+01:02 01:56
+00:27 01:21
+02:28 03:05
+03:56 04:29
+01:34 02:18
+00:16 00:57
+04:50 05:42
+45
+45 55
+04:04 04:34
+00:53 01:26
+05:30 06:10
+05:37 06:33
+05:00 05:48
+05:50 06:41
+03:44 04:37
+02:35 03:11
+04:45 05:38
+01:49 02:30
+00:18 01:16
+05:19 05:52
+04:04 05:04
+04:56 05:51
+01:09 01:49
+03:20 04:02
+01:53 02:23
+03:52 04:42
+04:11 04:57
+01:18 01:53
+03:29 04:12
+03:32 04:19
+02:54 03:47
+00:16 00:46
+05:21 05:58
+05:33 06:23
+05:58 06:38
+00:12 01:05
+03:09 04:05
+05:37 06:10
+04:04 05:04
+04:58 05:50
+03:59 04:42
+05:12 05:42
+00:02 01:01
+04:16 04:50
+00:09 00:55
+03:38 04:13
+03:29 04:20
+04:47 05:38
+00:09 00:47
+05:14 06:07
+01:37 02:36
+03:15 04:14
+02:03 02:45
+00:20 01:06
+05:07 05:51
+01:54 02:25
+05:04 05:34
+00:34 01:08
+01:29 02:09
+03:32 04:14
+03:57 04:56
+04:10 04:59
+01:18 01:55
+00:29 01:10
+02:43 03:27
+00:53 01:49
+04:52 05:43
+01:55 02:31
+04:33 05:28
+02:42 03:15
+00:47 01:38
+01:03 01:51
+00:47 01:38
+01:56 02:49
+03:35 04:28
+00:54 01:31
+04:24 04:56
+02:10 02:49
+03:03 04:01
+02:38 03:16
+01:37 02:19
+00:49 01:35
+03:58 04:34
+01:29 01:59
+04:04 04:44
+05:26 06:26
+03:44 04:32
+01:01 01:37
+03:47 04:42
+01:15 01:46
+02:10 03:06
+01:07 02:05
+02:01 02:39
+03:43 04:15
+00:07 01:01
+00:49 01:43
+04:31 05:24
+05:09 05:49
+03:38 04:37
+05:05 06:01
+05:16 06:09
+02:49 03:32
+04:57 05:40
+01:46 02:40
+03:28 04:24
+03:01 03:50
+01:24 02:13
+04:27 05:10
+46
+44 56
+04:49 05:49
+02:25 03:24
+00:14 00:53
+04:06 04:50
+01:43 02:25
+01:21 02:03
+05:38 06:13
+02:09 03:00
+03:23 03:55
+02:04 03:00
+00:28 01:02
+02:57 03:43
+01:12 02:07
+00:29 00:59
+05:08 06:07
+00:25 01:04
+00:29 01:18
+05:09 05:44
+06:54 07:36
+06:06 06:45
+01:20 01:55
+04:04 05:03
+04:23 05:04
+06:37 07:10
+02:33 03:12
+02:58 03:44
+00:08 00:43
+04:38 05:08
+06:10 07:00
+01:24 02:21
+01:11 02:01
+06:07 07:03
+02:03 02:52
+03:03 03:57
+02:05 03:00
+04:31 05:07
+00:07 01:00
+00:12 00:58
+03:44 04:25
+04:44 05:27
+01:24 02:21
+06:09 07:08
+06:35 07:27
+03:03 03:41
+02:09 03:09
+05:22 06:13
+02:28 03:26
+04:27 05:23
+00:40 01:23
+02:10 03:03
+02:36 03:13
+00:11 00:45
+01:47 02:33
+06:11 06:50
+03:57 04:45
+00:00 00:30
+00:44 01:24
+05:19 06:06
+00:49 01:34
+00:01 00:35
+03:34 04:30
+06:05 06:35
+01:36 02:36
+06:23 07:07
+06:24 07:10
+03:32 04:05
+01:02 01:40
+00:42 01:42
+06:20 06:59
+03:43 04:23
+00:08 01:03
+05:49 06:26
+06:58 07:33
+06:01 06:38
+00:28 01:26
+03:38 04:34
+06:34 07:08
+02:35 03:29
+05:20 05:54
+06:01 06:38
+02:56 03:50
+05:47 06:39
+00:31 01:30
+06:52 07:39
+03:22 04:20
+04:48 05:42
+01:26 02:16
+06:30 07:20
+06:55 07:52
+02:10 02:49
+06:24 06:56
+03:35 04:28
+02:12 03:12
+04:21 04:56
+00:51 01:37
+02:42 03:37
+04:36 05:36
+03:51 04:30
+01:54 02:51
+03:48 04:46
+47
+43 57
+01:59 02:58
+06:03 07:00
+06:39 07:13
+04:36 05:36
+06:16 06:51
+02:24 03:19
+04:52 05:28
+01:56 02:30
+07:24 08:04
+07:50 08:43
+05:54 06:52
+04:55 05:52
+01:42 02:32
+04:00 04:47
+01:43 02:22
+05:37 06:22
+04:16 04:52
+06:20 07:01
+00:52 01:34
+01:32 02:05
+05:18 06:14
+05:06 05:58
+07:39 08:35
+07:32 08:06
+05:49 06:41
+02:48 03:43
+05:48 06:44
+01:44 02:27
+04:05 05:05
+04:38 05:38
+06:39 07:29
+08:00 08:30
+00:44 01:26
+03:39 04:34
+04:20 05:02
+01:31 02:18
+05:44 06:29
+07:56 08:34
+01:54 02:39
+04:52 05:38
+04:14 05:05
+07:56 08:53
+02:53 03:40
+07:13 08:09
+06:21 07:09
+07:27 08:19
+01:48 02:40
+04:03 04:35
+07:45 08:24
+05:22 06:09
+01:37 02:13
+06:44 07:19
+06:30 07:21
+02:55 03:30
+01:00 01:31
+04:15 04:55
+02:59 03:52
+04:27 05:27
+07:09 07:57
+07:23 08:15
+05:00 05:45
+04:40 05:26
+04:57 05:39
+00:33 01:33
+05:59 06:40
+06:42 07:28
+06:00 06:56
+03:58 04:48
+03:08 04:01
+00:46 01:43
+06:45 07:27
+00:50 01:35
+02:03 02:58
+05:10 06:04
+07:08 08:01
+01:35 02:24
+02:35 03:32
+02:56 03:50
+07:51 08:43
+04:25 05:20
+05:58 06:52
+07:46 08:41
+04:52 05:39
+07:12 07:54
+01:16 01:53
+00:34 01:30
+05:44 06:28
+05:57 06:47
+03:33 04:22
+02:08 02:44
+03:03 03:48
+00:30 01:21
+02:38 03:26
+03:45 04:40
+04:45 05:43
+01:38 02:21
+02:25 03:01
+03:34 04:07
+05:25 06:23
+05:00 05:57
+48
+42 58
+07:09 07:53
+03:28 04:19
+05:23 06:07
+06:13 06:53
+08:22 09:11
+08:11 08:43
+02:06 02:53
+04:12 04:51
+02:39 03:30
+07:43 08:22
+04:48 05:20
+06:12 06:55
+02:10 02:42
+06:26 07:26
+05:59 06:42
+08:22 08:53
+08:26 09:08
+02:59 03:37
+03:34 04:20
+08:14 08:51
+03:41 04:38
+03:40 04:23
+07:47 08:20
+05:18 06:08
+06:04 07:04
+06:44 07:20
+05:32 06:04
+00:53 01:33
+00:16 01:16
+02:08 02:46
+03:46 04:29
+06:30 07:00
+05:36 06:14
+08:20 09:05
+08:01 08:48
+03:16 03:55
+03:24 04:00
+08:15 09:09
+00:43 01:27
+00:30 01:15
+00:42 01:25
+03:10 04:08
+04:11 04:56
+04:55 05:41
+04:18 04:58
+06:35 07:19
+03:10 03:59
+05:53 06:29
+03:08 03:56
+05:34 06:13
+02:10 02:55
+08:41 09:35
+04:13 05:02
+08:26 09:09
+07:36 08:31
+01:27 02:26
+07:52 08:41
+06:35 07:26
+01:30 02:06
+08:15 09:06
+08:41 09:34
+00:30 01:23
+01:01 01:40
+01:13 01:46
+07:27 08:00
+01:00 01:44
+08:17 08:48
+02:37 03:29
+02:45 03:29
+02:03 02:56
+03:24 04:00
+01:43 02:25
+08:19 08:53
+04:08 04:42
+06:10 06:54
+07:21 08:01
+07:47 08:32
+01:52 02:40
+03:36 04:10
+05:10 06:08
+00:49 01:26
+08:35 09:32
+08:30 09:11
+06:49 07:25
+00:01 00:35
+01:23 02:13
+03:44 04:31
+01:12 02:01
+06:09 06:42
+02:59 03:56
+06:37 07:32
+01:56 02:29
+00:44 01:19
+08:42 09:16
+08:05 09:00
+08:38 09:34
+06:22 07:08
+07:29 08:21
+00:21 01:11
+02:32 03:25
+49
+41 59
+01:30 02:26
+06:52 07:52
+04:04 04:53
+02:05 02:36
+04:33 05:16
+00:22 01:01
+06:52 07:34
+07:21 08:15
+08:00 08:37
+08:49 09:38
+08:19 08:53
+08:03 08:37
+04:47 05:45
+04:38 05:16
+03:39 04:31
+07:18 08:17
+04:31 05:24
+06:38 07:11
+02:48 03:26
+06:34 07:07
+03:08 03:57
+01:25 02:00
+05:17 06:03
+05:32 06:26
+09:04 09:41
+08:23 09:14
+00:59 01:39
+02:28 03:25
+08:56 09:41
+00:04 00:49
+03:42 04:37
+09:01 09:43
+00:04 00:54
+05:20 05:52
+00:41 01:35
+08:21 09:03
+04:08 04:53
+09:49 10:29
+07:26 08:18
+00:57 01:44
+09:59 10:34
+07:13 08:00
+09:24 09:58
+01:35 02:25
+05:52 06:35
+00:45 01:24
+02:50 03:44
+08:59 09:29
+00:51 01:22
+01:08 01:40
+02:32 03:04
+09:57 10:38
+07:12 08:01
+02:44 03:35
+06:19 06:58
+07:35 08:20
+03:50 04:25
+02:47 03:41
+05:24 06:23
+03:29 04:26
+08:00 08:45
+08:41 09:14
+08:14 08:53
+00:23 00:59
+00:26 01:12
+00:25 01:03
+03:36 04:21
+08:41 09:26
+00:37 01:36
+05:52 06:52
+05:24 05:59
+05:29 06:05
+02:02 02:47
+05:51 06:46
+01:53 02:26
+08:10 08:41
+09:39 10:10
+05:54 06:30
+09:25 10:19
+05:21 06:21
+07:35 08:06
+05:06 06:05
+05:07 05:45
+04:49 05:28
+00:54 01:40
+03:32 04:26
+06:11 07:11
+04:56 05:38
+05:24 06:13
+00:01 00:48
+09:53 10:32
+01:21 02:21
+05:59 06:52
+03:34 04:10
+03:25 03:57
+06:10 07:01
+09:50 10:21
+00:34 01:34
+05:02 05:42
+00:28 01:08
+50
+40 60
+03:54 04:32
+07:49 08:49
+05:10 05:50
+00:55 01:48
+02:46 03:30
+05:30 06:27
+07:09 08:05
+02:05 02:41
+01:18 02:15
+00:34 01:06
+05:39 06:36
+00:54 01:35
+10:35 11:19
+03:08 03:54
+06:21 07:05
+07:28 08:12
+06:08 06:45
+05:20 06:07
+03:05 03:42
+02:19 03:08
+04:10 04:51
+00:32 01:22
+09:53 10:39
+09:43 10:38
+05:15 05:56
+00:13 00:43
+07:17 08:13
+08:14 08:51
+10:21 11:03
+09:31 10:12
+04:28 05:09
+06:16 07:10
+00:41 01:12
+01:02 01:58
+07:46 08:36
+07:15 08:07
+08:17 09:08
+02:13 02:48
+02:33 03:10
+10:10 10:45
+03:34 04:21
+09:29 10:23
+07:04 07:41
+03:57 04:42
+00:39 01:28
+06:00 06:36
+00:15 00:57
+04:34 05:07
+01:31 02:13
+03:51 04:49
+03:31 04:27
+08:29 09:12
+09:49 10:33
+04:17 05:02
+01:58 02:34
+10:08 11:00
+10:11 10:42
+00:00 00:57
+05:00 05:49
+04:11 05:04
+10:17 11:06
+06:57 07:34
+02:57 03:32
+09:07 09:42
+06:38 07:37
+10:52 11:50
+05:51 06:33
+10:11 10:44
+06:56 07:29
+10:45 11:35
+03:28 04:28
+01:08 01:46
+03:55 04:32
+05:54 06:45
+00:09 00:43
+04:12 05:02
+08:10 09:00
+07:16 07:47
+04:06 05:01
+06:32 07:26
+09:34 10:34
+08:29 09:05
+07:57 08:43
+10:29 11:14
+02:04 02:46
+00:24 01:16
+10:06 10:44
+10:51 11:35
+05:01 06:01
+08:05 08:55
+00:23 01:19
+00:55 01:40
+06:02 06:41
+02:45 03:31
+06:24 06:55
+00:08 00:54
+00:07 00:44
+03:45 04:27
+07:49 08:38
+07:36 08:25
+51
+39 61
+11:53 12:33
+04:31 05:12
+04:24 05:24
+09:01 09:50
+02:19 03:14
+02:15 03:04
+00:41 01:31
+03:25 04:13
+06:12 07:06
+04:20 04:58
+05:54 06:28
+10:16 11:03
+01:31 02:15
+02:58 03:39
+11:00 11:55
+09:09 10:08
+11:27 11:59
+00:43 01:26
+02:22 02:55
+11:59 12:44
+06:18 07:17
+08:02 09:02
+03:55 04:30
+01:14 02:08
+09:08 09:43
+00:32 01:27
+01:48 02:42
+02:47 03:47
+05:53 06:32
+07:19 07:57
+04:22 05:05
+00:32 01:04
+03:09 03:48
+02:21 02:54
+11:06 12:00
+03:29 04:23
+02:01 02:34
+10:12 10:56
+00:55 01:35
+07:36 08:09
+11:11 11:51
+11:18 11:58
+07:25 08:05
+05:59 06:44
+00:53 01:30
+05:10 05:53
+10:05 10:38
+02:37 03:13
+07:39 08:35
+06:47 07:36
+12:00 12:44
+02:12 02:55
+05:23 06:00
+09:37 10:25
+06:27 07:14
+10:16 10:46
+09:15 09:52
+09:54 10:38
+11:13 12:08
+07:33 08:05
+00:20 01:05
+05:45 06:37
+01:59 02:29
+08:56 09:37
+07:16 08:09
+01:28 02:10
+06:31 07:15
+04:43 05:25
+05:03 05:51
+03:41 04:19
+02:38 03:32
+11:47 12:28
+03:57 04:43
+02:27 03:06
+07:44 08:43
+07:50 08:42
+06:57 07:53
+04:34 05:06
+04:36 05:27
+00:44 01:25
+00:52 01:49
+08:43 09:21
+08:42 09:41
+02:00 02:51
+02:08 03:07
+10:44 11:33
+07:30 08:29
+10:24 10:54
+01:57 02:35
+06:30 07:11
+00:29 01:19
+04:03 04:42
+04:42 05:28
+03:24 04:03
+05:45 06:30
+11:56 12:26
+09:58 10:29
+10:51 11:33
+00:59 01:41
+06:40 07:11
+52
+38 62
+03:32 04:03
+04:45 05:38
+02:03 02:52
+10:58 11:31
+02:14 03:01
+10:04 10:49
+00:11 00:50
+01:45 02:37
+12:16 12:56
+00:12 00:58
+12:08 12:58
+06:22 07:02
+02:59 03:36
+11:28 12:18
+00:14 01:06
+09:03 09:39
+08:47 09:42
+02:16 02:46
+10:49 11:20
+08:41 09:19
+05:54 06:31
+10:26 10:58
+01:28 02:09
+03:02 03:40
+02:05 03:01
+02:56 03:34
+05:10 05:53
+08:31 09:16
+05:58 06:31
+11:40 12:11
+02:45 03:43
+05:08 05:46
+04:38 05:12
+04:32 05:03
+08:10 08:56
+04:49 05:47
+05:26 06:07
+06:38 07:24
+12:52 13:36
+07:25 08:02
+02:27 02:58
+05:35 06:29
+10:44 11:32
+12:07 13:02
+12:34 13:24
+10:24 11:09
+02:00 02:51
+01:01 01:36
+04:53 05:42
+07:35 08:15
+10:42 11:26
+01:24 02:05
+02:06 02:39
+06:39 07:13
+06:54 07:38
+12:13 12:58
+10:14 10:44
+07:25 07:56
+07:08 08:08
+07:24 08:08
+02:21 03:05
+04:28 05:08
+06:42 07:36
+05:29 06:10
+04:56 05:53
+03:36 04:19
+10:39 11:34
+12:55 13:25
+07:45 08:39
+09:39 10:36
+08:59 09:31
+07:14 07:45
+10:29 11:07
+11:18 12:00
+01:06 01:45
+05:02 05:39
+12:25 13:03
+02:18 03:04
+12:11 12:57
+01:49 02:46
+00:56 01:41
+06:45 07:33
+11:30 12:04
+08:26 09:02
+11:05 11:42
+07:30 08:06
+01:03 01:35
+07:40 08:21
+11:30 12:29
+11:07 11:40
+11:19 11:55
+07:19 07:50
+09:11 09:49
+12:52 13:45
+09:14 09:57
+01:01 01:36
+00:47 01:33
+04:29 05:08
+02:37 03:27
+11:52 12:44
+53
+37 63
+00:34 01:26
+08:43 09:18
+12:43 13:27
+02:31 03:17
+13:21 13:51
+12:24 13:13
+04:43 05:32
+12:25 13:00
+13:45 14:45
+12:05 13:02
+01:16 01:46
+12:46 13:36
+05:56 06:45
+08:32 09:31
+04:47 05:27
+06:34 07:19
+11:06 11:46
+05:19 06:06
+01:06 01:39
+07:05 07:45
+10:16 11:02
+05:58 06:30
+08:08 08:41
+06:18 07:09
+07:01 07:54
+02:10 03:07
+03:20 04:10
+03:23 04:23
+08:05 08:43
+13:24 14:06
+06:59 07:41
+00:49 01:37
+03:48 04:18
+09:03 10:02
+05:47 06:27
+01:33 02:22
+00:49 01:19
+13:31 14:02
+08:29 09:02
+07:11 07:57
+07:23 08:20
+13:34 14:30
+02:33 03:29
+08:44 09:25
+01:02 02:02
+06:22 06:54
+02:20 03:17
+09:40 10:27
+05:57 06:42
+09:58 10:37
+11:56 12:32
+13:09 13:44
+01:49 02:29
+06:11 07:02
+13:09 13:57
+00:25 01:11
+13:23 14:09
+04:30 05:05
+00:27 00:59
+05:09 05:39
+01:18 02:12
+00:33 01:05
+05:06 05:39
+08:23 08:57
+00:56 01:52
+03:00 03:34
+05:59 06:57
+04:44 05:36
+01:24 02:11
+11:38 12:11
+02:53 03:46
+06:24 07:20
+00:18 00:48
+03:39 04:25
+13:34 14:32
+08:35 09:22
+00:13 01:01
+07:54 08:37
+04:44 05:25
+10:45 11:28
+04:17 05:08
+10:10 10:45
+07:49 08:23
+09:08 09:56
+00:49 01:27
+06:32 07:17
+06:15 07:05
+05:11 05:43
+10:51 11:41
+07:00 07:38
+04:06 04:45
+03:01 03:41
+00:24 01:09
+11:21 12:16
+06:48 07:38
+13:59 14:43
+03:09 03:48
+00:35 01:22
+05:42 06:39
+01:36 02:17
+54
+36 64
+02:43 03:29
+03:56 04:50
+12:46 13:23
+13:36 14:31
+08:25 09:16
+09:28 10:16
+03:39 04:33
+12:18 13:18
+01:40 02:38
+11:05 11:35
+04:10 05:02
+13:35 14:12
+13:37 14:16
+04:05 04:42
+14:40 15:28
+05:23 06:16
+10:49 11:40
+13:44 14:33
+12:26 13:03
+07:47 08:37
+03:44 04:39
+11:52 12:32
+01:07 01:48
+13:59 14:51
+09:38 10:24
+00:33 01:23
+06:39 07:25
+05:43 06:15
+01:58 02:58
+03:15 04:10
+09:42 10:39
+01:21 02:17
+01:01 01:55
+14:22 15:04
+04:52 05:24
+02:53 03:34
+04:14 05:00
+05:10 06:09
+00:03 00:41
+08:57 09:41
+12:38 13:32
+08:54 09:41
+11:17 11:58
+08:33 09:12
+04:13 04:45
+11:56 12:31
+02:52 03:45
+02:15 03:12
+09:57 10:33
+04:12 04:57
+04:15 05:10
+10:58 11:35
+03:47 04:40
+09:04 10:04
+03:37 04:35
+01:51 02:34
+05:16 05:46
+01:43 02:36
+04:09 05:02
+00:16 01:03
+01:11 01:52
+09:07 09:54
+14:29 15:00
+05:14 05:55
+14:35 15:07
+08:36 09:36
+04:14 04:47
+11:07 11:53
+03:07 04:01
+08:40 09:34
+09:21 10:10
+03:32 04:07
+11:25 12:19
+02:58 03:43
+14:14 15:11
+08:29 09:01
+14:21 15:06
+12:00 12:58
+09:01 09:51
+09:40 10:15
+07:17 08:04
+06:23 07:05
+14:08 14:56
+07:13 07:48
+04:00 04:45
+06:47 07:17
+02:43 03:31
+08:56 09:32
+08:16 09:05
+08:21 09:10
+04:31 05:11
+03:10 03:49
+09:53 10:28
+13:03 13:45
+10:33 11:12
+02:34 03:28
+03:32 04:23
+04:49 05:24
+05:04 05:58
+00:34 01:12
+55
+35 65
+10:30 11:01
+01:59 02:38
+03:49 04:28
+03:58 04:47
+14:52 15:34
+06:41 07:23
+07:12 08:05
+04:35 05:05
+06:02 06:41
+04:29 05:05
+05:06 05:55
+11:20 12:17
+05:30 06:27
+10:05 11:03
+14:02 14:48
+14:26 15:03
+03:47 04:41
+10:24 10:54
+05:36 06:17
+14:30 15:00
+12:49 13:31
+01:04 01:56
+01:59 02:39
+12:57 13:40
+06:14 07:01
+12:13 13:00
+11:00 11:38
+02:49 03:40
+00:51 01:49
+14:52 15:46
+05:06 05:50
+04:50 05:45
+01:51 02:37
+00:43 01:37
+14:38 15:37
+09:55 10:28
+08:51 09:36
+05:34 06:11
+08:19 09:18
+10:43 11:37
+15:14 16:09
+02:11 02:46
+05:44 06:42
+00:11 00:59
+02:23 03:15
+14:38 15:29
+01:27 02:27
+09:14 10:10
+04:54 05:49
+12:57 13:35
+09:20 10:20
+03:37 04:13
+04:25 05:13
+01:33 02:14
+01:53 02:33
+02:01 02:50
+07:02 07:59
+07:16 08:16
+06:09 07:02
+09:40 10:18
+04:55 05:35
+04:42 05:20
+02:40 03:25
+00:49 01:37
+10:21 10:52
+00:17 01:13
+03:07 03:55
+08:56 09:52
+00:52 01:30
+03:47 04:34
+07:43 08:29
+08:53 09:29
+15:19 15:57
+02:17 03:01
+14:57 15:44
+06:51 07:33
+13:26 14:05
+03:57 04:41
+09:06 10:02
+14:37 15:23
+01:36 02:28
+06:07 07:06
+07:22 08:17
+14:27 15:21
+01:12 01:43
+10:57 11:57
+14:37 15:10
+03:58 04:36
+00:35 01:18
+04:36 05:27
+01:36 02:12
+07:46 08:39
+15:51 16:34
+07:57 08:51
+00:57 01:55
+14:45 15:26
+10:51 11:24
+10:19 11:11
+09:52 10:51
+09:35 10:25
+56
+34 66
+02:25 03:02
+04:32 05:10
+12:14 13:00
+12:23 13:12
+13:41 14:27
+11:01 11:58
+04:31 05:06
+00:22 00:55
+07:46 08:42
+05:14 05:52
+16:55 17:28
+07:54 08:47
+16:44 17:28
+14:15 15:08
+03:10 04:00
+00:05 00:37
+08:50 09:48
+12:55 13:48
+07:37 08:22
+12:55 13:50
+12:06 12:48
+16:09 17:07
+01:26 02:00
+06:35 07:14
+15:42 16:17
+08:17 08:59
+14:46 15:35
+07:54 08:42
+10:48 11:26
+00:46 01:44
+04:38 05:32
+14:44 15:16
+07:44 08:24
+15:20 16:14
+11:04 11:44
+00:04 00:35
+01:57 02:41
+15:13 16:04
+08:54 09:38
+02:34 03:05
+16:36 17:34
+01:17 02:13
+00:10 00:51
+12:11 12:47
+01:47 02:17
+04:42 05:40
+01:03 02:03
+03:58 04:40
+03:09 04:01
+09:17 09:55
+10:33 11:29
+16:05 17:05
+13:26 14:02
+06:58 07:42
+12:59 13:45
+00:59 01:59
+13:16 13:49
+15:57 16:43
+04:08 04:47
+16:53 17:25
+08:50 09:50
+07:45 08:19
+03:53 04:43
+08:38 09:32
+11:37 12:21
+06:28 06:59
+10:43 11:37
+02:42 03:12
+05:20 06:03
+00:11 01:07
+13:13 13:56
+07:51 08:44
+10:01 10:36
+07:55 08:35
+08:31 09:04
+05:25 06:10
+03:09 04:09
+13:44 14:33
+11:40 12:30
+11:25 12:00
+08:56 09:28
+07:42 08:32
+06:28 07:21
+13:27 14:02
+01:47 02:32
+11:16 11:53
+04:08 04:49
+04:46 05:22
+15:59 16:59
+13:06 13:52
+16:16 16:47
+10:34 11:23
+12:37 13:34
+01:07 01:48
+16:43 17:36
+05:33 06:15
+05:10 05:45
+03:06 03:57
+10:42 11:28
+11:14 11:54
+57
+33 67
+03:28 04:21
+05:20 06:10
+07:17 08:05
+16:16 16:51
+06:47 07:35
+07:52 08:41
+00:53 01:37
+09:53 10:23
+06:30 07:16
+16:03 17:02
+14:13 15:01
+14:44 15:18
+04:45 05:43
+00:11 00:44
+02:17 02:47
+09:54 10:40
+05:50 06:23
+10:11 11:04
+05:26 06:13
+13:29 14:01
+07:33 08:07
+12:29 12:59
+08:40 09:18
+16:02 16:52
+08:24 09:21
+15:12 15:47
+00:28 01:13
+13:44 14:30
+08:44 09:19
+16:33 17:28
+02:04 03:03
+02:01 02:51
+16:21 17:13
+11:58 12:49
+09:03 09:48
+05:48 06:31
+06:22 07:20
+10:48 11:27
+04:50 05:25
+16:39 17:30
+06:57 07:31
+11:20 12:03
+08:30 09:21
+15:56 16:26
+12:37 13:27
+09:41 10:31
+12:30 13:27
+11:34 12:17
+12:35 13:20
+09:03 09:45
+17:17 17:49
+11:28 12:11
+09:20 09:51
+14:08 14:44
+15:51 16:42
+06:15 06:51
+02:18 03:03
+02:29 03:07
+04:41 05:38
+09:23 09:53
+05:22 05:56
+07:50 08:46
+03:48 04:41
+11:57 12:52
+00:00 01:00
+09:15 09:50
+01:20 02:11
+12:19 13:08
+02:31 03:29
+07:52 08:26
+14:43 15:20
+13:27 14:09
+08:02 08:51
+06:26 06:58
+12:05 12:51
+17:26 17:57
+08:49 09:43
+11:02 11:38
+01:28 02:08
+07:17 08:12
+09:57 10:52
+16:57 17:30
+14:00 14:46
+08:09 09:00
+08:40 09:20
+01:58 02:42
+13:12 14:09
+12:22 13:13
+09:45 10:30
+05:41 06:40
+01:57 02:27
+08:51 09:44
+06:06 07:05
+17:50 18:44
+00:30 01:26
+13:00 13:59
+09:54 10:46
+00:10 00:58
+02:16 02:49
+13:53 14:37
+58
+32 68
+16:49 17:19
+10:37 11:18
+03:08 03:54
+07:14 07:47
+08:34 09:25
+02:05 02:58
+00:35 01:23
+16:34 17:14
+18:02 18:44
+00:44 01:39
+16:26 17:09
+00:47 01:26
+18:00 18:51
+07:53 08:29
+10:02 10:56
+16:46 17:34
+18:11 18:53
+00:19 01:18
+00:58 01:50
+04:46 05:26
+11:42 12:15
+18:21 19:01
+16:09 16:58
+11:31 12:16
+00:18 01:01
+05:53 06:45
+05:48 06:40
+15:48 16:24
+16:57 17:57
+17:09 17:39
+12:40 13:40
+05:58 06:45
+00:39 01:26
+09:40 10:29
+13:40 14:13
+11:26 12:11
+09:47 10:19
+14:13 14:49
+16:15 17:02
+15:33 16:06
+01:15 01:57
+17:40 18:12
+05:42 06:41
+00:41 01:18
+12:18 12:55
+03:15 04:00
+15:04 15:59
+15:21 15:58
+01:12 01:46
+01:48 02:34
+03:52 04:36
+06:08 07:00
+13:03 13:43
+08:08 08:40
+15:30 16:06
+01:46 02:32
+18:24 18:59
+16:51 17:45
+11:00 11:35
+05:22 06:17
+18:17 18:55
+09:16 10:04
+15:14 15:48
+09:17 10:07
+17:35 18:33
+04:02 04:46
+17:43 18:40
+05:15 06:10
+10:35 11:19
+02:27 03:24
+10:14 10:59
+01:07 02:05
+06:26 07:24
+08:18 09:03
+18:34 19:25
+03:35 04:23
+14:39 15:35
+00:02 00:44
+05:16 06:00
+18:57 19:37
+02:51 03:24
+02:55 03:53
+14:22 15:16
+07:35 08:27
+12:09 12:54
+15:28 15:58
+01:38 02:08
+05:21 06:07
+04:48 05:48
+08:48 09:33
+05:39 06:26
+02:11 02:46
+06:56 07:52
+03:46 04:33
+12:16 12:58
+09:00 09:41
+18:01 18:56
+18:35 19:22
+05:30 06:06
+06:11 07:01
+59
+31 69
+19:01 19:45
+14:51 15:31
+04:36 05:27
+18:09 18:57
+07:50 08:45
+04:05 04:48
+19:19 20:16
+15:05 15:56
+05:25 06:06
+12:42 13:17
+09:32 10:03
+02:03 02:54
+17:03 17:45
+16:05 16:40
+15:30 16:29
+02:30 03:08
+08:24 09:08
+05:44 06:40
+11:43 12:23
+05:30 06:09
+04:26 05:26
+01:14 01:47
+07:23 08:23
+02:41 03:15
+02:52 03:48
+00:33 01:17
+09:50 10:32
+18:08 19:04
+10:18 11:16
+09:44 10:22
+09:36 10:11
+13:05 13:40
+06:49 07:25
+10:23 11:01
+12:01 12:38
+09:34 10:15
+12:14 12:55
+18:20 19:04
+04:27 05:07
+06:41 07:38
+13:03 13:59
+15:51 16:38
+19:12 19:48
+02:13 02:55
+13:56 14:34
+13:34 14:25
+09:53 10:47
+19:31 20:31
+13:51 14:21
+09:11 09:49
+03:42 04:24
+18:24 19:20
+06:13 07:08
+16:36 17:19
+09:34 10:05
+17:33 18:04
+08:40 09:23
+15:32 16:12
+05:04 05:41
+17:16 17:48
+09:14 09:57
+19:39 20:31
+07:33 08:05
+00:59 01:36
+08:56 09:43
+01:51 02:34
+15:50 16:39
+09:54 10:37
+03:04 04:03
+03:10 03:48
+15:39 16:36
+09:05 09:37
+13:29 14:23
+16:51 17:35
+06:56 07:53
+15:37 16:13
+12:41 13:30
+01:25 02:16
+03:05 04:03
+13:02 13:50
+13:39 14:36
+02:39 03:15
+06:17 07:13
+02:29 03:26
+10:07 11:05
+03:53 04:24
+16:42 17:40
+07:14 08:03
+00:45 01:44
+10:40 11:34
+14:49 15:19
+09:20 09:51
+04:20 05:00
+14:16 15:10
+14:45 15:24
+06:37 07:26
+01:17 02:02
+07:41 08:21
+17:52 18:43
+07:43 08:30
+60
+50 80
+04:20 04:30
+15:00 15:10
+09:12 09:23
+00:45 00:59
+19:16 19:31
+15:30 15:41
+04:13 04:23
+13:10 13:21
+22:37 22:49
+18:40 18:52
+13:14 13:28
+18:49 19:01
+21:46 21:57
+20:23 20:34
+22:29 22:39
+03:46 03:57
+05:49 06:03
+01:08 01:22
+09:04 09:14
+19:21 19:33
+07:05 07:19
+21:14 21:28
+03:33 03:46
+00:08 00:19
+03:02 03:16
+20:52 21:02
+03:33 03:47
+04:28 04:38
+16:03 16:17
+07:26 07:37
+01:12 01:27
+16:31 16:44
+16:45 17:00
+12:33 12:47
+08:59 09:09
+02:17 02:29
+02:03 02:13
+01:33 01:48
+09:08 09:18
+02:54 03:05
+21:47 22:00
+17:02 17:13
+17:51 18:01
+03:49 04:03
+16:50 17:04
+13:13 13:24
+14:22 14:37
+08:54 09:08
+06:24 06:38
+11:59 12:12
+12:58 14:45
+05:10 06:49
+19:15 20:40
+10:30 11:55
+20:12 21:19
+14:38 15:47
+18:20 20:16
+13:39 15:33
+16:59 18:50
+12:43 13:51
+20:58 22:02
+00:59 02:15
+13:24 14:31
+17:04 18:35
+13:35 14:56
+03:57 05:07
+18:29 20:29
+04:49 06:18
+04:45 06:28
+16:30 17:46
+17:17 18:46
+06:39 08:27
+18:04 19:21
+19:06 20:41
+22:36 23:39
+20:46 22:35
+08:17 10:01
+00:57 02:27
+09:07 10:18
+09:31 11:27
+22:11 23:56
+14:24 16:24
+11:16 12:31
+12:14 13:58
+17:54 19:16
+13:55 14:54
+03:12 04:13
+04:33 06:02
+05:35 06:55
+21:18 23:15
+10:40 11:42
+09:44 11:03
+14:42 16:27
+14:21 15:46
+02:58 04:33
+11:50 13:35
+21:00 22:48
+13:47 15:33
+19:50 21:43
+00:28 02:14
+19:58 21:26
+09:39 11:12
+05:31 06:44
+16:00 17:11
+11:27 13:26
+16:22 17:31
+05:36 06:58
+16:59 18:58
+03:49 05:09
+04:11 05:59
+12:14 14:00
+15:05 16:26
+09:01 10:44
+13:58 15:35
+19:04 20:29
+22:07 23:21
+11:31 12:39
+05:18 06:31
+08:59 10:42
+12:58 14:13
+19:46 21:28
+01:22 03:14
+16:26 17:46
+17:37 18:56
+05:10 07:02
+08:33 10:16
+22:46 23:53
+04:40 05:47
+15:49 17:11
+13:14 14:21
+59
+49 81
+13:23 13:43
+14:51 15:01
+05:00 05:19
+17:03 17:19
+18:57 19:08
+11:52 12:04
+04:29 04:41
+18:35 18:46
+08:52 09:08
+16:32 16:43
+21:26 21:39
+21:41 21:51
+08:58 09:14
+16:57 17:15
+06:33 06:52
+15:11 15:29
+16:07 16:27
+19:18 19:30
+00:14 00:24
+17:15 17:28
+20:29 20:49
+16:56 17:07
+21:37 21:52
+00:22 00:42
+05:53 06:08
+17:27 17:44
+05:56 06:10
+21:52 22:07
+21:42 21:53
+05:39 05:52
+03:56 04:10
+05:02 05:19
+01:41 01:56
+18:20 18:39
+09:52 10:05
+08:27 08:46
+03:05 03:24
+01:55 02:12
+18:53 19:06
+17:12 17:28
+12:59 13:14
+13:24 13:44
+10:13 10:27
+21:58 22:14
+21:28 21:45
+12:59 13:09
+19:55 20:07
+16:03 16:17
+00:58 01:10
+05:09 06:54
+06:18 08:04
+06:27 08:00
+19:53 21:22
+10:09 11:56
+16:35 18:34
+19:19 20:41
+19:27 20:44
+15:40 17:36
+08:40 10:27
+05:04 06:06
+01:33 02:47
+19:02 20:05
+00:33 01:56
+12:59 14:19
+08:23 09:40
+05:38 07:24
+11:54 13:06
+03:03 04:32
+19:45 21:19
+14:31 15:52
+17:55 18:56
+00:16 01:28
+02:10 03:33
+14:14 15:33
+09:13 11:07
+19:45 21:34
+07:03 08:02
+16:14 17:55
+18:20 19:42
+04:22 06:20
+20:17 21:35
+04:12 06:00
+18:20 19:58
+16:23 17:41
+10:21 12:09
+05:18 06:35
+14:55 16:36
+09:32 10:52
+13:03 14:09
+11:44 13:35
+07:28 09:17
+10:39 11:40
+03:34 05:29
+12:30 13:37
+01:16 03:07
+06:49 08:03
+07:37 09:11
+17:55 19:45
+19:09 20:11
+15:58 17:27
+03:52 05:31
+18:33 19:38
+17:02 18:29
+18:19 19:32
+12:04 13:06
+13:15 14:43
+00:02 01:28
+01:59 03:59
+19:40 21:29
+03:26 04:42
+10:56 12:17
+08:59 10:58
+16:03 17:30
+00:35 02:00
+18:27 19:57
+19:14 20:55
+17:51 18:50
+15:59 17:04
+01:18 02:29
+09:54 11:39
+12:15 13:17
+04:13 05:42
+16:32 17:36
+10:51 11:52
+11:37 12:37
+12:28 14:02
+10:28 11:38
+05:29 06:35
+20:36 21:49
+08:47 10:27
+58
+48 82
+06:31 06:53
+12:25 12:35
+12:53 13:14
+16:07 16:24
+08:16 08:37
+05:39 06:03
+09:37 10:02
+05:55 06:08
+14:07 14:22
+02:49 03:10
+19:56 20:16
+14:37 14:47
+15:35 15:51
+06:17 06:40
+05:55 06:14
+08:10 08:28
+11:01 11:21
+20:23 20:42
+02:37 03:02
+20:13 20:38
+18:20 18:31
+14:51 15:12
+06:33 06:49
+05:55 06:15
+05:25 05:36
+02:41 03:03
+05:49 06:12
+06:27 06:41
+13:46 14:07
+02:15 02:28
+05:35 05:45
+15:47 16:05
+02:30 02:47
+01:09 01:20
+14:32 14:55
+17:11 17:28
+03:17 03:29
+16:32 16:52
+19:44 20:01
+01:59 02:24
+16:17 16:34
+07:31 07:41
+00:45 01:03
+03:39 03:59
+14:15 14:32
+02:58 03:10
+04:45 04:55
+10:59 11:16
+02:20 04:13
+20:03 21:04
+05:29 07:13
+10:20 11:34
+11:23 12:27
+11:46 12:46
+01:17 03:17
+13:12 14:31
+17:33 18:56
+10:22 12:11
+07:31 08:38
+02:55 04:43
+16:13 18:08
+02:55 04:35
+04:49 06:14
+14:57 16:42
+03:12 04:22
+00:38 02:17
+01:58 03:47
+16:47 18:34
+03:18 04:53
+08:14 09:35
+01:34 03:11
+11:15 12:40
+12:01 13:48
+16:27 18:26
+01:38 03:06
+08:08 09:43
+04:22 06:02
+18:21 19:52
+00:00 01:26
+20:21 21:55
+03:42 05:34
+11:51 13:05
+12:49 13:58
+07:28 08:59
+20:41 22:21
+16:35 17:56
+15:35 16:45
+01:09 03:07
+02:41 04:41
+02:24 03:47
+07:10 09:10
+07:01 08:20
+16:06 17:06
+02:51 04:40
+06:17 08:08
+09:35 10:53
+15:12 16:21
+17:40 18:55
+17:12 18:54
+16:13 18:04
+05:23 07:08
+03:56 05:20
+20:09 21:53
+05:47 07:33
+02:14 03:16
+13:05 14:44
+08:24 09:23
+03:09 05:05
+03:20 05:08
+04:10 05:23
+17:38 19:10
+18:35 20:17
+04:34 06:01
+08:57 10:41
+12:40 14:18
+14:13 16:01
+04:55 06:42
+09:44 11:39
+09:20 10:23
+02:57 04:40
+13:00 14:20
+10:49 12:03
+19:31 20:36
+06:10 07:46
+11:37 12:52
+10:36 12:20
+06:01 07:30
+11:17 12:54
+12:10 14:10
+12:34 13:52
+57
+47 83
+00:05 00:19
+03:13 03:36
+13:28 13:55
+08:34 08:56
+03:59 04:25
+10:31 10:45
+06:21 06:44
+04:03 04:17
+15:18 15:39
+19:54 20:13
+13:06 13:19
+19:25 19:38
+01:06 01:18
+07:10 07:39
+13:02 13:19
+04:25 04:51
+12:28 12:41
+00:02 00:19
+18:25 18:45
+12:06 12:17
+14:35 14:55
+00:52 01:22
+06:26 06:39
+03:46 03:57
+17:38 18:03
+01:41 02:08
+05:42 05:54
+05:11 05:26
+01:09 01:25
+06:00 06:30
+16:37 16:53
+10:30 10:42
+11:44 12:07
+02:30 02:52
+01:30 01:40
+03:00 03:10
+11:48 12:08
+16:04 16:14
+10:11 10:25
+02:00 02:26
+05:25 05:44
+08:14 08:44
+19:48 20:10
+07:04 07:22
+04:31 04:59
+18:19 18:30
+16:56 17:20
+00:59 02:14
+12:25 13:57
+12:21 13:48
+10:56 12:40
+03:47 05:30
+16:16 17:35
+06:34 07:35
+19:14 20:54
+17:22 18:55
+00:31 01:33
+15:19 16:29
+16:51 18:38
+15:30 16:33
+09:51 11:46
+14:55 16:19
+18:44 19:57
+00:53 02:23
+06:48 08:31
+18:10 19:32
+03:14 05:14
+19:24 21:12
+01:45 03:02
+14:17 16:11
+17:47 18:51
+12:32 13:32
+12:31 14:00
+08:13 10:03
+08:11 09:12
+11:51 13:16
+18:59 19:59
+05:59 07:14
+01:08 02:15
+06:26 07:31
+05:49 07:07
+09:20 11:04
+16:18 17:34
+09:19 10:43
+03:31 05:14
+16:38 18:32
+05:37 07:25
+01:03 02:05
+02:04 03:18
+02:08 03:33
+13:56 15:15
+07:22 09:18
+00:47 02:37
+11:11 13:10
+04:07 05:31
+12:53 14:26
+01:15 02:15
+15:26 16:49
+07:10 08:31
+00:09 01:46
+19:42 21:42
+11:35 13:12
+01:31 03:14
+01:33 03:22
+06:28 08:19
+15:42 16:48
+07:48 09:42
+19:33 20:53
+00:58 02:46
+18:38 20:19
+10:53 12:44
+09:15 10:27
+02:53 04:42
+00:11 01:24
+05:14 06:24
+16:29 17:57
+06:58 08:10
+19:06 20:22
+18:09 19:58
+13:11 14:39
+15:21 16:38
+09:00 10:21
+06:15 07:37
+00:39 01:50
+00:47 02:04
+18:49 20:14
+13:28 15:03
+09:19 11:05
+09:14 10:50
+04:45 05:54
+56
+46 84
+02:32 02:59
+04:17 04:47
+11:11 11:25
+15:09 15:27
+06:20 06:37
+00:49 01:04
+06:45 07:01
+06:29 07:04
+03:54 04:05
+10:49 11:04
+16:07 16:31
+00:47 01:08
+04:39 05:14
+14:46 15:18
+18:39 19:02
+17:33 18:01
+08:34 08:51
+13:24 13:58
+10:12 10:36
+10:01 10:20
+11:30 11:41
+16:59 17:31
+03:33 04:08
+08:44 09:04
+11:16 11:31
+15:37 15:59
+09:56 10:16
+04:52 05:27
+09:18 09:28
+04:50 05:25
+18:08 18:29
+11:09 11:43
+13:47 14:08
+15:17 15:49
+10:05 10:24
+11:35 11:56
+12:48 13:03
+07:31 07:53
+08:25 08:52
+18:10 18:31
+13:18 13:41
+11:31 11:49
+00:12 00:24
+05:43 06:09
+12:34 13:08
+01:16 01:34
+02:26 04:13
+10:20 11:36
+11:09 12:09
+15:56 16:59
+10:59 12:33
+07:05 08:46
+08:11 10:02
+14:03 15:36
+03:42 04:53
+14:26 15:45
+10:58 12:12
+12:55 14:25
+06:23 07:41
+04:49 06:20
+04:13 05:40
+14:34 16:29
+15:45 17:20
+08:37 10:09
+15:30 17:07
+09:28 10:49
+03:55 05:55
+06:46 08:43
+05:49 07:35
+09:58 11:32
+07:36 09:19
+17:53 19:51
+11:51 13:51
+12:35 14:01
+15:57 17:43
+02:04 03:50
+06:37 08:30
+03:19 04:23
+03:13 04:21
+04:36 06:12
+11:44 13:08
+13:41 14:42
+11:58 13:32
+17:44 19:38
+13:21 14:51
+13:17 15:04
+13:52 15:42
+12:08 14:06
+16:16 17:53
+11:47 13:28
+07:46 09:15
+16:23 18:00
+17:25 18:42
+13:49 14:48
+09:39 10:52
+10:46 11:59
+14:41 15:40
+12:51 14:12
+00:25 02:23
+17:29 19:17
+12:10 13:13
+02:32 04:29
+17:39 19:04
+09:23 11:22
+18:10 19:33
+12:22 14:08
+13:32 15:12
+01:49 03:03
+10:41 11:59
+11:59 13:56
+14:13 15:15
+02:21 03:26
+09:33 10:50
+12:53 14:24
+01:27 03:15
+17:34 18:54
+08:43 09:52
+15:12 16:48
+04:22 05:43
+12:30 14:02
+14:32 15:55
+16:47 18:36
+12:21 14:16
+08:17 09:59
+03:59 05:50
+09:54 11:32
+17:06 18:07
+02:17 03:25
+11:14 12:30
+03:42 04:43
+55
+45 85
+12:51 13:06
+10:15 10:40
+11:41 11:54
+03:31 03:49
+16:48 17:00
+15:38 15:53
+09:06 09:33
+02:03 02:41
+04:44 05:18
+11:42 12:01
+09:31 09:44
+07:04 07:32
+00:34 00:55
+01:35 02:10
+12:38 13:03
+06:55 07:16
+02:55 03:34
+06:17 06:50
+06:41 06:57
+01:01 01:41
+02:32 03:03
+12:32 12:45
+16:48 17:17
+13:55 14:09
+00:18 00:52
+16:10 16:30
+16:26 16:47
+04:47 05:05
+10:52 11:07
+14:27 14:52
+10:40 10:59
+09:05 09:40
+02:06 02:46
+12:05 12:45
+14:21 14:39
+04:20 04:33
+14:08 14:23
+13:04 13:19
+08:27 08:55
+05:38 06:12
+14:08 14:31
+05:45 06:03
+03:18 03:52
+05:24 05:48
+09:22 09:38
+04:11 05:47
+17:24 18:37
+02:13 03:19
+07:51 09:15
+15:41 17:33
+02:23 03:37
+14:11 15:11
+04:08 05:44
+10:21 11:47
+08:03 09:42
+15:29 17:16
+04:51 06:07
+06:33 08:33
+02:28 04:03
+14:52 16:03
+17:31 19:08
+10:09 11:15
+01:45 03:40
+05:56 06:55
+01:31 02:40
+06:20 07:33
+12:28 13:50
+16:58 18:36
+17:09 18:37
+12:28 13:59
+10:45 12:16
+16:12 18:08
+04:58 05:57
+10:39 12:19
+12:38 14:38
+15:09 16:32
+04:13 06:08
+15:49 17:09
+03:10 04:32
+15:42 17:31
+17:52 19:44
+03:09 04:48
+09:24 10:45
+11:42 12:58
+00:31 02:24
+03:20 04:55
+03:53 05:22
+06:35 08:00
+13:16 14:17
+13:31 14:54
+07:40 08:50
+08:14 10:05
+17:46 19:33
+10:05 11:37
+17:32 18:58
+08:12 09:25
+14:04 15:19
+17:00 18:26
+06:47 08:02
+06:47 07:59
+04:47 05:50
+05:59 07:53
+00:10 01:20
+17:44 19:17
+11:03 12:54
+00:37 02:10
+10:35 11:44
+13:27 15:04
+06:37 07:39
+17:19 19:15
+04:40 06:19
+08:05 09:27
+07:08 08:21
+16:00 17:54
+08:14 09:27
+03:11 04:37
+05:53 06:56
+15:33 16:36
+10:11 11:40
+00:38 01:56
+11:39 13:21
+13:59 15:34
+14:02 15:58
+02:09 03:58
+08:37 10:34
+08:02 09:46
+17:35 18:53
+14:38 15:43
+04:24 05:31
+11:54 13:44
+54
+44 86
+07:46 07:58
+03:57 04:37
+06:18 06:44
+00:26 00:51
+03:58 04:41
+09:14 09:44
+10:23 10:35
+12:53 13:10
+02:45 03:13
+01:40 02:08
+12:42 13:22
+06:55 07:32
+01:32 01:50
+03:38 04:22
+02:20 02:36
+13:03 13:31
+15:40 16:03
+09:17 09:57
+14:06 14:30
+10:42 10:52
+05:14 05:29
+16:36 16:53
+05:09 05:48
+16:13 16:48
+11:01 11:34
+02:12 02:39
+09:57 10:18
+13:17 14:01
+13:12 13:35
+10:40 11:05
+12:00 12:13
+11:01 11:44
+05:48 06:22
+02:24 03:07
+12:11 12:22
+16:26 16:38
+03:23 03:38
+15:09 15:54
+05:29 06:08
+06:56 07:39
+12:06 12:31
+03:33 03:50
+10:43 11:26
+06:36 06:58
+15:24 16:54
+07:21 08:55
+06:14 07:25
+07:09 09:00
+05:06 06:12
+01:38 03:26
+11:28 13:03
+08:28 10:08
+08:13 09:32
+16:13 17:12
+13:13 14:56
+08:30 10:25
+06:47 08:05
+12:25 13:24
+10:31 11:44
+02:43 04:16
+04:14 05:31
+03:22 05:14
+10:25 11:51
+00:31 01:32
+00:23 02:12
+12:25 13:26
+10:06 11:59
+07:20 09:14
+00:14 01:45
+15:56 17:56
+01:45 03:42
+16:10 17:53
+10:49 11:51
+15:12 17:00
+13:31 14:34
+05:24 06:54
+13:27 14:26
+15:23 17:12
+14:08 15:14
+16:57 18:25
+03:22 04:27
+05:39 06:43
+09:11 10:42
+13:43 15:32
+09:59 11:32
+16:03 17:40
+00:54 01:55
+13:05 14:35
+16:58 18:28
+16:09 17:15
+04:52 06:32
+15:46 16:45
+12:58 14:14
+13:12 14:38
+05:32 07:32
+05:18 06:58
+00:14 01:39
+11:50 13:15
+12:59 14:51
+04:38 06:12
+00:06 01:05
+14:23 15:43
+14:46 16:11
+00:52 02:06
+15:51 16:56
+11:46 12:55
+06:34 08:22
+13:30 14:49
+02:28 03:55
+11:09 12:18
+07:31 09:31
+09:02 10:24
+02:24 04:02
+15:37 16:36
+02:12 03:50
+01:54 03:15
+12:01 13:01
+07:33 09:29
+08:45 10:08
+08:54 09:59
+15:46 17:17
+16:44 18:29
+01:00 02:47
+14:11 15:46
+07:23 08:36
+09:47 11:44
+15:51 16:54
+07:00 08:25
+06:57 08:33
+08:58 10:47
+53
+43 87
+14:29 14:59
+10:09 10:41
+07:06 07:24
+15:49 16:02
+07:21 08:09
+04:32 04:44
+15:31 16:00
+00:46 01:19
+03:09 03:54
+03:36 03:58
+07:54 08:31
+04:44 05:27
+04:28 05:07
+08:56 09:11
+08:05 08:34
+12:55 13:25
+11:11 11:41
+12:52 13:17
+13:02 13:31
+04:49 05:13
+11:57 12:10
+09:34 10:16
+05:03 05:49
+08:37 08:54
+09:36 10:19
+05:03 05:21
+13:44 13:58
+01:57 02:44
+06:17 06:54
+04:07 04:44
+14:22 14:48
+12:28 13:07
+01:00 01:50
+05:18 05:56
+03:39 04:04
+09:37 10:04
+14:19 14:30
+04:34 04:58
+07:51 08:37
+09:27 09:51
+00:15 00:58
+01:38 01:48
+04:07 04:33
+09:01 10:07
+07:05 09:02
+05:51 06:59
+03:23 04:54
+13:27 15:14
+15:29 16:51
+00:45 02:32
+15:25 16:38
+03:52 04:57
+12:05 13:55
+03:07 04:09
+07:19 08:51
+05:27 06:50
+13:38 15:38
+00:01 01:39
+15:56 17:36
+00:56 02:13
+08:21 09:22
+04:59 06:33
+06:27 07:37
+08:05 09:23
+05:50 07:46
+12:49 14:15
+10:31 12:14
+06:50 08:14
+04:29 06:05
+07:28 09:13
+15:59 17:59
+06:26 07:53
+04:44 06:04
+15:56 17:11
+00:56 02:18
+15:01 16:49
+03:35 05:32
+10:54 12:39
+02:58 04:14
+13:48 14:55
+12:14 13:26
+02:51 04:36
+07:08 08:08
+00:14 02:04
+13:16 14:59
+15:00 16:13
+11:48 13:29
+03:30 04:36
+07:33 09:32
+04:09 05:20
+13:42 15:10
+01:45 03:16
+04:50 05:50
+09:58 10:58
+10:39 12:39
+04:09 05:53
+02:00 03:21
+05:21 06:57
+04:48 06:03
+10:09 11:28
+06:20 08:05
+03:34 05:19
+14:50 15:53
+02:33 03:41
+08:29 09:36
+13:22 15:03
+02:47 04:24
+01:41 03:06
+06:35 08:04
+14:12 16:04
+07:09 08:59
+14:15 16:15
+14:26 16:14
+13:12 15:09
+14:10 15:22
+10:53 12:46
+03:45 05:17
+13:16 14:59
+07:22 08:33
+14:09 15:36
+07:07 08:06
+00:41 01:50
+05:42 06:49
+04:05 05:36
+12:36 14:01
+12:07 14:04
+11:06 12:21
+07:03 08:16
+05:19 07:15
+05:25 06:31
+52
+42 88
+14:02 14:36
+02:13 03:06
+04:49 04:59
+14:03 14:45
+12:09 12:59
+12:43 13:04
+06:37 06:54
+11:39 12:03
+14:49 15:39
+14:58 15:10
+02:31 03:11
+09:14 10:05
+07:50 08:44
+06:44 06:54
+02:41 02:57
+05:55 06:34
+01:06 01:34
+08:15 08:53
+10:08 10:21
+13:55 14:26
+04:18 04:58
+12:31 13:16
+05:15 05:44
+00:34 01:04
+11:39 12:08
+07:59 08:30
+06:25 06:44
+11:23 12:04
+08:54 09:28
+02:53 03:16
+13:02 13:44
+11:10 11:37
+11:51 12:17
+10:53 11:07
+12:30 13:22
+08:51 09:41
+02:49 03:21
+08:13 08:35
+01:08 01:51
+04:26 05:21
+07:55 08:09
+06:52 07:18
+02:44 04:36
+01:09 02:39
+02:14 03:35
+05:30 06:57
+01:48 02:47
+01:58 03:00
+10:28 12:09
+13:34 15:00
+04:07 05:36
+07:34 08:44
+01:21 02:45
+04:44 06:05
+00:17 02:10
+03:16 05:10
+09:23 10:41
+14:35 16:25
+02:07 03:57
+08:28 09:35
+05:44 07:16
+05:05 06:25
+13:39 14:53
+07:39 08:58
+00:15 01:33
+08:06 10:00
+01:40 03:15
+04:09 05:58
+14:52 16:15
+14:46 15:47
+00:44 02:24
+03:55 04:55
+04:33 06:25
+09:32 10:43
+02:00 03:38
+07:40 08:50
+05:19 06:40
+09:32 11:03
+04:38 05:46
+07:46 08:57
+03:43 04:55
+08:16 09:21
+04:36 06:29
+01:39 03:10
+03:51 05:16
+07:29 08:46
+08:33 10:00
+13:24 15:04
+08:23 09:40
+03:01 04:51
+11:00 12:34
+10:14 12:11
+14:15 15:52
+04:48 05:53
+12:00 13:15
+09:30 11:02
+02:34 04:32
+07:40 09:11
+09:38 10:58
+00:10 01:47
+00:15 01:17
+00:54 02:53
+04:55 06:20
+13:36 15:29
+05:13 06:31
+08:58 10:54
+02:15 03:23
+05:58 07:42
+12:38 14:16
+08:38 09:53
+02:56 04:01
+01:33 03:33
+06:52 08:03
+01:09 02:31
+08:03 09:20
+08:24 10:01
+03:04 04:14
+00:37 01:58
+14:17 15:21
+13:30 15:24
+06:38 08:38
+10:11 11:11
+06:14 08:08
+04:30 05:38
+12:03 13:09
+09:02 10:32
+00:58 02:18
+02:36 03:45
+00:41 02:19
+13:19 14:46
+51
+41 89
+01:24 02:17
+06:32 07:16
+08:36 09:22
+05:24 05:59
+12:20 12:54
+07:20 08:01
+09:07 09:52
+04:51 05:24
+01:07 01:43
+02:14 02:55
+11:20 11:51
+13:44 14:34
+06:08 07:07
+09:06 09:42
+00:43 01:14
+09:05 09:52
+09:15 09:29
+08:35 09:03
+03:22 04:05
+11:31 12:12
+05:23 05:36
+02:52 03:13
+01:06 01:21
+03:43 04:32
+05:03 05:14
+00:08 00:58
+12:10 12:24
+07:21 07:45
+13:56 14:37
+13:38 14:22
+11:09 11:20
+04:02 04:37
+00:51 01:17
+09:51 10:32
+11:43 12:13
+09:01 09:45
+00:50 01:13
+08:43 09:11
+01:46 01:57
+04:27 05:01
+08:42 09:18
+07:58 09:17
+11:34 13:23
+00:56 02:02
+03:43 05:38
+11:47 13:06
+05:53 07:12
+09:19 11:10
+06:15 08:03
+11:46 12:54
+04:42 06:00
+07:11 09:01
+08:48 10:48
+01:28 02:32
+03:38 05:34
+02:44 04:12
+03:01 04:35
+02:11 04:05
+09:59 11:36
+04:41 06:09
+08:28 10:03
+07:54 09:30
+04:12 05:55
+12:20 13:26
+04:56 06:28
+04:07 05:27
+01:53 03:18
+04:48 06:37
+10:18 11:17
+11:02 12:56
+08:02 09:30
+04:44 06:00
+01:53 03:51
+03:19 04:48
+13:01 14:03
+05:05 06:05
+03:13 04:15
+00:28 01:34
+00:33 02:18
+09:50 11:12
+07:20 09:17
+12:57 14:26
+08:09 09:20
+11:56 13:10
+07:32 09:19
+02:26 04:00
+00:31 02:02
+09:55 11:15
+09:02 10:15
+12:09 13:31
+12:19 13:41
+01:52 03:49
+05:17 06:56
+02:06 04:05
+09:35 11:30
+04:45 05:46
+10:11 11:23
+11:28 12:47
+01:15 03:04
+00:08 01:26
+10:00 11:19
+04:21 05:56
+02:42 03:59
+02:42 03:57
+08:57 10:52
+10:22 11:55
+12:06 13:44
+12:51 14:07
+08:57 10:34
+09:57 10:56
+06:33 08:32
+03:19 05:16
+02:39 04:28
+06:25 07:32
+06:08 08:02
+04:51 06:45
+12:32 14:18
+10:07 11:20
+09:38 11:01
+01:27 02:49
+08:02 09:07
+02:27 03:53
+07:33 09:24
+11:24 12:47
+01:15 02:57
+12:23 13:40
+02:31 03:41
+02:55 04:24
+06:38 07:43
+08:01 09:48
+50
+40 90
+04:10 05:03
+04:08 04:19
+12:13 13:12
+12:49 13:37
+09:13 09:30
+09:30 10:25
+00:01 00:38
+00:36 01:08
+02:53 03:31
+00:56 01:49
+09:38 10:30
+03:53 04:10
+02:05 02:59
+01:32 02:16
+03:55 04:10
+02:56 03:50
+02:00 02:11
+01:18 01:53
+08:28 09:03
+04:39 04:58
+09:22 10:06
+01:16 02:20
+09:15 09:46
+01:09 02:02
+05:03 06:04
+00:38 01:36
+10:47 11:34
+09:21 09:38
+00:08 00:32
+02:13 02:54
+12:45 13:33
+08:37 09:05
+02:24 02:53
+09:00 10:00
+04:34 05:17
+12:46 13:51
+12:05 12:26
+02:36 02:46
+09:56 11:00
+12:34 13:06
+05:51 06:50
+12:49 13:48
+02:07 04:05
+01:48 03:29
+02:31 04:23
+11:51 13:44
+00:21 01:24
+10:16 11:24
+00:23 01:54
+04:09 05:21
+12:45 13:52
+01:04 02:59
+04:18 05:56
+04:41 05:46
+10:00 11:29
+08:25 09:39
+04:26 05:59
+06:49 08:09
+08:05 09:31
+09:25 10:42
+05:51 06:52
+10:09 11:36
+11:56 13:09
+04:44 05:50
+07:29 08:36
+11:56 13:17
+10:59 12:55
+07:52 09:40
+12:21 13:42
+02:27 03:48
+04:17 05:30
+08:39 09:53
+09:07 10:07
+01:35 02:35
+08:50 10:30
+02:12 04:08
+05:26 07:00
+12:35 13:41
+08:28 09:41
+01:19 03:15
+02:59 04:06
+03:43 05:15
+07:31 09:00
+11:21 12:23
+01:34 02:41
+06:41 08:22
+07:13 08:13
+11:27 12:33
+05:09 06:24
+00:25 01:26
+09:21 10:41
+00:25 01:26
+11:10 12:55
+12:34 13:59
+12:12 13:55
+01:41 02:42
+08:40 10:09
+12:07 13:52
+06:54 08:42
+07:24 08:40
+08:51 10:37
+11:08 12:18
+03:55 05:07
+12:04 13:44
+01:58 03:22
+01:28 03:00
+04:09 05:21
+10:35 12:11
+12:32 14:07
+06:04 07:16
+12:54 14:08
+09:57 11:12
+06:39 08:35
+06:36 08:14
+03:18 05:17
+09:14 10:17
+10:04 11:51
+10:09 11:26
+04:30 05:32
+09:28 11:21
+07:47 09:16
+04:23 06:21
+06:27 08:07
+02:40 03:44
+08:14 09:49
+12:22 13:26
+00:08 01:12
+01:13 03:11
+12:09 14:06
+00:41 02:28
+49
+39 91
+09:44 10:47
+09:30 09:40
+07:33 07:49
+04:25 05:34
+01:35 02:25
+08:08 09:00
+05:32 06:13
+05:18 06:00
+01:27 01:52
+01:51 02:16
+04:47 05:51
+06:40 07:27
+01:11 01:46
+06:13 06:26
+02:50 03:47
+07:34 08:20
+00:40 00:54
+06:23 06:39
+08:18 08:50
+03:09 03:54
+08:54 09:22
+03:52 04:32
+04:01 04:12
+11:16 11:28
+08:34 09:14
+06:30 06:51
+07:37 08:10
+00:27 00:38
+07:25 07:45
+05:17 05:50
+03:40 04:08
+02:50 04:00
+01:09 01:41
+05:44 06:33
+11:52 12:13
+05:29 06:31
+03:02 03:14
+09:31 10:28
+05:49 06:50
+03:38 05:33
+05:31 06:47
+02:17 03:36
+07:21 08:53
+04:55 06:05
+06:39 08:09
+07:35 09:32
+01:55 03:46
+00:37 02:32
+03:39 05:05
+04:14 05:48
+04:26 05:49
+01:53 03:06
+04:53 06:28
+00:44 02:17
+10:12 11:15
+05:21 06:58
+01:50 03:00
+02:11 03:17
+07:04 09:04
+08:42 10:09
+11:25 12:49
+03:21 05:07
+08:32 09:32
+11:35 13:10
+01:03 02:29
+10:03 11:09
+05:45 07:29
+04:57 06:17
+11:48 12:53
+02:01 03:16
+08:21 09:20
+01:33 02:41
+08:10 09:21
+02:28 03:49
+08:26 10:19
+08:15 09:42
+07:23 08:51
+03:33 05:24
+00:21 01:26
+03:54 05:15
+02:48 03:55
+07:18 08:24
+01:31 03:11
+11:10 12:15
+08:21 09:21
+08:36 10:07
+09:00 10:16
+09:57 11:51
+05:38 07:06
+03:42 05:36
+03:03 04:40
+05:35 07:01
+07:10 09:06
+05:26 06:30
+07:15 08:55
+01:20 02:52
+05:31 07:25
+06:55 08:50
+08:13 09:50
+03:00 04:41
+01:13 02:20
+01:41 03:11
+11:12 12:33
+08:50 09:53
+01:57 03:53
+11:55 13:53
+07:50 09:28
+05:54 07:00
+03:40 05:14
+01:07 02:08
+00:04 02:03
+06:31 07:55
+05:12 06:29
+10:23 11:33
+00:24 01:54
+09:03 10:21
+11:46 13:41
+10:34 11:48
+03:55 05:13
+08:17 09:57
+05:58 06:57
+04:36 06:13
+04:31 05:51
+09:47 10:58
+09:38 10:59
+11:08 13:05
+07:29 09:17
+02:37 03:56
+11:12 12:35
+05:31 07:24
+48
+38 92
+00:37 01:00
+01:08 01:34
+06:25 06:53
+04:46 05:32
+07:13 07:40
+02:12 02:50
+05:47 06:14
+10:32 11:37
+00:01 01:01
+03:27 03:54
+06:07 06:38
+08:08 09:10
+10:02 10:41
+04:24 05:11
+01:50 02:05
+02:40 03:41
+09:44 10:15
+05:50 06:15
+04:15 04:33
+07:12 08:13
+04:10 05:13
+04:22 05:34
+06:13 07:09
+08:18 08:42
+04:02 04:47
+01:35 02:25
+00:47 01:12
+02:47 04:00
+00:20 01:08
+09:22 09:37
+07:02 07:31
+01:28 01:48
+01:23 01:41
+09:16 10:23
+05:13 06:21
+07:00 07:46
+03:32 04:17
+10:32 11:23
+09:35 11:26
+07:22 09:00
+02:04 03:51
+01:28 02:56
+10:19 11:18
+09:08 11:01
+07:15 08:54
+00:24 01:54
+05:43 07:35
+03:26 04:33
+06:20 07:29
+02:36 03:45
+10:13 11:51
+07:35 09:08
+03:42 05:31
+00:52 02:39
+01:05 02:46
+05:02 06:45
+00:48 02:15
+10:30 11:50
+05:48 07:17
+08:06 09:08
+06:52 08:48
+09:56 11:14
+10:39 12:03
+05:43 07:42
+07:06 08:09
+06:26 07:55
+03:18 04:43
+09:47 11:14
+02:25 03:47
+07:55 09:52
+07:25 09:14
+00:34 01:53
+00:25 01:39
+02:56 04:01
+10:54 12:13
+02:58 04:18
+04:15 05:43
+06:42 08:16
+06:15 07:39
+07:01 08:51
+09:54 11:06
+00:39 01:44
+04:25 06:19
+00:57 01:56
+04:23 05:42
+06:08 07:11
+04:48 06:21
+05:03 06:56
+00:24 02:21
+01:41 03:04
+01:50 03:23
+10:27 12:25
+09:20 10:40
+05:21 06:51
+05:16 07:03
+04:38 05:47
+02:15 03:27
+06:10 07:50
+04:00 05:59
+00:50 02:25
+08:55 10:15
+02:37 04:35
+02:51 04:14
+09:21 10:42
+06:12 07:35
+06:17 07:58
+04:37 06:25
+10:03 11:09
+00:12 01:34
+00:23 01:48
+01:25 02:37
+02:51 04:31
+01:37 03:18
+06:18 07:49
+07:02 09:01
+03:10 05:04
+10:44 12:22
+07:27 09:07
+08:20 10:20
+07:15 09:10
+01:44 03:00
+08:07 09:52
+00:22 02:03
+04:13 06:02
+10:08 11:24
+08:49 10:07
+03:59 05:42
+05:44 07:10
+08:00 09:51
+06:17 07:25
+47
+37 93
+02:12 03:13
+01:26 02:10
+03:25 04:29
+08:15 09:32
+04:15 04:59
+03:51 04:50
+05:45 06:40
+06:29 06:43
+03:26 04:41
+01:46 02:17
+01:20 01:50
+01:26 02:41
+09:45 10:37
+07:48 08:10
+08:24 09:41
+03:24 04:02
+02:46 03:11
+03:51 04:37
+07:34 07:56
+04:22 05:07
+01:18 02:24
+05:47 06:13
+01:21 01:51
+06:14 06:30
+04:40 05:13
+06:12 06:49
+08:58 10:07
+09:22 10:33
+06:27 07:17
+07:26 08:38
+03:53 04:38
+07:22 08:24
+06:18 07:04
+06:10 06:52
+06:35 07:46
+08:45 09:27
+05:13 06:07
+09:22 10:32
+02:11 03:40
+08:42 10:09
+01:15 02:35
+02:54 04:22
+09:23 10:35
+07:56 09:43
+07:03 08:50
+05:09 06:22
+02:31 04:08
+08:20 10:01
+04:40 06:27
+04:14 06:06
+09:32 11:05
+06:13 08:05
+07:28 09:24
+09:57 11:09
+00:07 01:47
+09:44 11:24
+03:59 05:00
+03:26 05:18
+09:39 11:31
+00:54 02:01
+01:39 02:40
+04:38 05:48
+05:43 06:47
+06:46 07:49
+09:50 10:55
+08:12 09:25
+09:19 10:41
+07:11 09:08
+02:53 03:58
+06:30 07:51
+00:32 02:07
+04:17 05:17
+06:28 08:08
+00:40 02:25
+04:26 06:22
+05:39 07:17
+00:30 01:49
+08:23 10:16
+02:36 04:10
+01:36 03:36
+09:13 10:55
+08:09 09:47
+01:28 03:25
+05:05 06:19
+01:49 03:25
+02:34 04:23
+09:41 11:01
+08:08 09:16
+02:11 03:13
+04:25 06:03
+06:41 08:31
+02:40 04:15
+00:06 01:29
+06:11 07:49
+01:16 02:15
+01:22 02:51
+04:58 06:46
+06:52 08:28
+06:40 08:38
+06:19 07:58
+08:16 09:17
+08:46 09:51
+09:40 11:16
+03:10 05:01
+07:40 09:24
+07:15 08:26
+01:45 03:05
+06:06 07:55
+03:37 05:22
+09:49 11:28
+07:39 09:26
+09:01 11:01
+03:51 05:00
+01:04 02:59
+06:03 08:00
+00:40 01:43
+00:39 02:02
+00:38 01:49
+08:19 10:14
+01:13 02:42
+05:36 06:37
+02:30 03:39
+05:22 07:14
+05:30 07:00
+05:45 07:12
+04:32 05:42
+00:48 02:39
+05:24 07:20
+08:21 09:45
+02:08 03:29
+46
+36 94
+06:31 07:07
+01:17 02:29
+04:20 05:39
+08:27 09:36
+01:11 02:20
+06:00 07:08
+06:23 07:33
+02:20 02:40
+02:43 03:26
+08:23 09:29
+07:51 08:55
+01:52 02:56
+04:01 05:04
+00:33 00:43
+05:28 05:51
+04:32 05:06
+03:11 03:25
+03:23 04:35
+06:08 06:51
+04:04 04:23
+07:08 07:58
+07:47 08:22
+07:53 08:10
+07:12 07:24
+00:29 01:43
+08:12 09:23
+04:16 05:09
+07:54 09:08
+00:14 00:42
+01:55 02:35
+05:46 07:05
+08:43 10:05
+00:40 01:40
+04:16 04:30
+06:30 07:34
+01:51 03:01
+07:21 08:37
+00:28 01:55
+01:46 03:27
+07:52 09:24
+04:54 06:47
+06:46 08:07
+02:43 04:19
+05:49 07:12
+05:59 07:31
+00:55 02:07
+01:49 03:33
+02:03 03:57
+08:24 09:50
+03:26 04:39
+08:51 10:32
+04:35 05:59
+08:27 10:22
+06:34 08:13
+01:00 02:50
+03:01 04:28
+08:23 10:19
+05:05 06:18
+05:41 07:25
+03:08 04:40
+02:19 03:57
+07:21 08:44
+04:13 06:02
+03:20 04:35
+04:57 06:09
+05:12 06:44
+00:49 01:56
+00:46 02:15
+04:35 06:29
+00:40 02:05
+03:57 05:23
+03:56 05:46
+07:25 09:12
+03:52 05:18
+01:30 02:30
+07:10 08:38
+05:19 07:10
+04:27 05:47
+07:25 08:59
+00:02 01:12
+08:14 09:51
+04:46 06:17
+05:13 06:24
+05:00 06:20
+01:09 02:32
+05:12 06:22
+06:28 07:57
+08:48 10:24
+05:06 06:16
+00:45 02:09
+00:54 02:23
+01:47 03:34
+06:21 07:38
+05:55 07:34
+03:30 05:19
+02:42 04:00
+03:12 04:29
+04:21 05:40
+07:25 09:20
+00:35 01:59
+06:26 07:28
+07:06 09:06
+07:37 09:13
+05:02 06:03
+00:30 02:13
+02:09 03:25
+05:47 07:21
+02:18 03:18
+02:20 04:00
+01:56 03:14
+07:33 09:00
+07:02 08:42
+04:08 05:55
+00:56 02:35
+02:16 03:44
+01:57 03:02
+06:07 07:17
+01:44 03:09
+01:54 03:26
+01:14 02:54
+04:23 05:35
+01:11 02:17
+07:38 09:15
+04:04 05:57
+07:54 09:30
+03:36 05:18
+01:27 02:32
+05:39 06:52
+08:41 10:09
+00:44 01:47
+45
+35 95
+00:01 01:20
+01:58 02:43
+07:52 08:29
+06:00 06:34
+03:56 04:26
+02:50 03:11
+05:41 06:09
+01:21 02:16
+02:02 03:29
+01:27 02:45
+02:15 02:39
+04:51 05:17
+05:28 06:51
+04:24 05:08
+03:31 04:56
+02:28 03:08
+06:31 07:03
+03:38 04:47
+02:41 03:08
+04:46 05:17
+00:38 01:47
+06:30 07:36
+04:58 06:19
+06:17 07:06
+04:41 05:33
+06:36 07:57
+07:31 08:31
+01:10 02:02
+05:07 05:59
+00:12 01:41
+05:28 06:45
+02:36 02:52
+00:36 00:46
+06:55 07:46
+05:04 05:50
+01:54 03:01
+02:59 04:56
+05:33 07:04
+00:10 01:19
+01:58 03:39
+02:29 03:30
+03:18 04:59
+07:02 08:56
+04:51 06:39
+06:52 08:10
+06:33 08:18
+03:55 05:52
+07:30 09:05
+06:39 08:29
+06:37 08:14
+07:35 09:01
+01:27 02:53
+02:01 03:29
+07:58 09:41
+01:11 02:34
+06:53 08:42
+01:09 02:30
+05:11 06:57
+05:03 06:13
+02:17 03:38
+00:40 01:49
+03:40 04:43
+02:31 04:11
+06:40 08:09
+00:53 02:18
+05:25 06:57
+06:11 07:50
+07:33 09:31
+03:00 04:43
+07:26 09:06
+07:54 09:36
+07:31 09:31
+03:22 05:16
+06:26 07:58
+06:00 07:08
+05:55 07:16
+02:06 03:12
+07:00 08:14
+00:31 02:27
+05:51 07:36
+05:31 07:28
+07:13 08:34
+02:50 04:17
+03:31 05:15
+05:52 06:52
+04:02 05:31
+00:50 02:05
+06:26 08:09
+06:16 08:09
+02:55 04:08
+05:22 06:34
+02:50 04:14
+02:55 04:30
+05:08 07:02
+07:19 08:20
+06:46 08:20
+03:16 04:25
+00:43 02:10
+07:58 09:48
+02:44 04:07
+01:58 03:06
+04:58 06:27
+01:09 02:57
+03:35 04:53
+00:26 01:53
+00:32 01:45
+04:03 05:10
+00:42 02:27
+02:07 04:00
+01:10 02:58
+04:23 06:21
+07:21 08:52
+02:52 04:01
+01:17 02:57
+00:08 01:44
+06:53 08:47
+01:58 03:01
+00:01 01:45
+02:17 04:16
+07:37 09:31
+01:44 02:56
+00:27 01:56
+01:41 03:30
+01:57 03:14
+04:43 05:58
+07:51 09:50
+00:47 02:29
+07:13 09:10
+05:47 07:31
+00:30 01:35
+44
+34 96
+06:40 07:42
+06:09 06:30
+02:30 03:21
+05:25 06:28
+03:04 04:35
+05:37 06:18
+03:46 04:16
+03:18 03:32
+01:42 01:57
+02:12 03:21
+02:14 02:26
+05:35 06:35
+01:45 03:20
+01:01 02:20
+01:20 01:45
+06:39 08:02
+06:20 06:54
+03:07 03:34
+01:38 03:06
+04:59 06:16
+04:31 05:36
+06:27 07:54
+06:13 06:33
+05:58 07:13
+01:52 02:45
+05:15 05:42
+03:21 04:00
+02:27 03:13
+03:20 04:46
+03:22 03:54
+00:48 01:37
+06:24 07:36
+06:06 06:42
+00:58 02:29
+06:32 08:20
+06:36 08:19
+03:43 05:29
+02:16 03:18
+07:00 08:30
+04:18 06:03
+04:47 06:35
+04:10 05:15
+04:47 06:17
+02:32 04:01
+03:28 04:36
+04:25 06:14
+02:02 03:54
+03:02 04:55
+05:45 07:44
+00:50 02:36
+00:59 02:43
+02:13 03:54
+02:10 03:27
+01:59 03:39
+06:13 07:41
+00:29 01:46
+06:58 08:56
+00:48 01:53
+01:19 03:05
+01:22 02:33
+06:54 08:20
+02:41 04:21
+04:19 06:12
+04:55 06:44
+00:06 01:22
+06:12 07:52
+04:30 06:18
+05:00 06:57
+03:03 04:45
+00:17 02:11
+04:13 05:45
+00:34 01:37
+03:40 05:08
+01:01 02:35
+05:12 06:18
+05:09 07:00
+00:33 02:21
+05:19 07:15
+04:24 05:33
+05:27 06:41
+04:50 06:24
+04:16 06:11
+04:11 05:51
+04:17 05:29
+02:43 04:17
+00:13 01:22
+02:15 03:30
+06:48 07:59
+00:38 01:48
+01:26 02:57
+03:35 05:29
+05:54 07:27
+03:23 05:10
+02:16 03:42
+05:52 07:06
+02:55 04:51
+02:56 04:38
+06:33 08:27
+03:18 04:39
+00:51 01:52
+04:36 06:16
+03:07 04:28
+05:34 06:40
+03:56 04:59
+06:45 08:02
+05:23 06:51
+05:41 07:39
+03:06 04:59
+05:01 06:28
+06:21 08:09
+03:15 05:03
+04:00 05:10
+01:35 03:34
+04:54 05:56
+03:35 05:12
+03:00 03:59
+01:12 02:57
+03:14 05:01
+06:31 07:55
+00:23 02:04
+03:52 05:00
+06:39 08:15
+04:59 06:10
+01:56 02:58
+02:58 04:03
+04:23 06:03
+03:35 04:46
+05:42 07:20
+01:29 03:27
+01:05 03:00
+43
+33 97
+04:37 06:15
+04:08 04:38
+01:46 02:22
+00:56 02:19
+03:28 03:59
+05:26 06:29
+05:02 06:31
+04:35 04:58
+03:44 03:59
+05:00 06:24
+05:52 07:16
+01:37 03:10
+00:34 01:43
+00:50 02:26
+02:28 03:41
+04:23 05:17
+01:09 02:32
+01:26 02:54
+05:44 07:24
+00:28 01:05
+01:40 02:00
+03:54 04:46
+03:30 03:55
+02:17 03:56
+02:51 03:07
+05:07 05:54
+00:01 00:40
+05:34 06:46
+00:20 01:49
+05:03 06:35
+00:49 02:10
+00:04 00:21
+03:51 05:12
+03:23 04:25
+01:06 02:53
+03:12 04:28
+05:06 06:06
+01:33 03:10
+03:30 04:47
+00:36 01:44
+04:23 06:06
+04:18 05:23
+02:38 03:49
+01:48 02:48
+05:45 07:44
+04:00 05:31
+02:52 04:18
+04:18 05:32
+01:27 02:40
+04:17 06:02
+04:38 06:03
+03:29 05:28
+02:54 04:07
+05:37 07:26
+05:27 07:12
+01:41 02:42
+02:47 04:29
+02:22 03:37
+02:14 03:48
+02:44 04:17
+04:16 06:09
+00:42 02:15
+05:30 07:19
+04:06 06:00
+00:42 01:50
+05:00 06:21
+04:24 05:45
+03:23 04:52
+05:53 07:07
+00:32 01:50
+02:28 03:44
+05:54 07:34
+01:20 03:11
+04:52 05:55
+01:39 03:19
+03:12 05:01
+04:27 06:16
+02:51 04:02
+03:20 05:20
+03:50 05:19
+00:32 01:36
+02:48 04:45
+05:42 06:54
+04:31 06:25
+00:34 01:52
+02:50 03:50
+03:29 05:27
+05:56 07:16
+00:11 01:13
+02:55 04:13
+00:45 02:04
+05:27 07:05
+02:57 04:41
+05:39 07:05
+04:18 06:15
+02:12 04:03
+01:24 03:19
+04:46 06:29
+03:30 04:32
+03:04 04:15
+00:13 01:22
+03:56 05:16
+05:58 07:40
+05:08 06:34
+02:09 03:17
+04:21 05:31
+02:53 04:48
+05:55 07:44
+02:23 03:59
+04:35 05:34
+01:55 03:53
+01:37 02:57
+04:06 06:06
+01:14 03:13
+03:16 04:18
+05:14 06:13
+01:35 02:41
+05:04 06:04
+02:35 04:24
+05:09 06:26
+05:57 07:47
+03:40 05:34
+02:47 04:40
+01:29 03:17
+00:57 02:40
+05:10 06:54
+00:32 01:32
+01:11 02:16
+01:10 02:51
+05:59 07:09
+42
+32 98
+00:33 02:06
+04:17 05:49
+01:30 02:04
+04:24 04:57
+04:53 05:46
+03:57 04:30
+03:25 04:11
+04:31 05:14
+03:19 03:45
+04:04 04:37
+01:01 02:38
+03:55 05:35
+03:15 04:00
+02:25 02:35
+04:16 04:34
+04:49 06:04
+01:03 02:41
+01:57 02:16
+04:05 05:34
+03:48 04:29
+02:05 03:26
+03:15 03:27
+02:32 04:13
+00:22 01:23
+00:10 00:42
+01:35 02:41
+03:35 04:02
+02:30 04:12
+00:12 01:06
+02:36 03:55
+02:22 03:57
+03:17 03:59
+04:14 05:28
+00:17 02:17
+02:55 04:39
+02:41 03:46
+04:07 05:23
+04:03 06:03
+00:35 02:02
+01:57 03:02
+00:01 01:57
+04:41 06:22
+00:55 02:53
+03:29 04:48
+03:57 05:23
+02:29 03:51
+00:42 02:16
+01:10 03:06
+03:11 05:06
+00:31 02:12
+04:28 06:08
+04:47 06:27
+00:06 01:12
+04:04 05:24
+00:34 02:10
+00:46 02:21
+04:09 05:14
+04:33 05:42
+00:49 02:00
+01:41 03:00
+03:34 04:45
+02:01 03:28
+01:50 03:15
+00:53 02:31
+04:12 05:45
+00:00 01:50
+02:31 03:50
+02:53 04:51
+01:22 03:03
+00:58 02:52
+03:57 05:35
+01:39 02:50
+03:13 04:56
+03:04 04:27
+01:26 02:40
+00:57 01:58
+01:33 03:15
+02:55 04:50
+02:21 03:21
+02:17 04:15
+02:38 04:16
+00:37 01:58
+02:53 04:35
+00:44 01:56
+01:15 03:04
+02:09 03:50
+02:58 04:44
+04:38 06:06
+00:23 01:26
+01:25 02:39
+00:55 02:49
+03:11 05:09
+00:50 02:36
+03:41 05:17
+01:13 02:16
+01:41 03:34
+00:23 01:34
+01:45 03:35
+04:13 05:17
+02:36 04:02
+01:11 03:05
+00:59 02:04
+00:06 01:18
+00:50 02:21
+03:19 04:54
+02:55 04:17
+01:38 03:01
+03:03 04:06
+03:12 04:27
+02:43 04:12
+01:07 02:13
+00:44 02:23
+00:00 01:39
+01:34 02:45
+03:31 04:37
+00:17 01:28
+04:02 05:51
+04:06 05:51
+01:53 03:27
+00:06 01:28
+03:04 04:28
+02:00 03:04
+02:51 03:59
+02:29 04:10
+04:37 06:27
+03:13 04:49
+02:53 03:58
+02:19 03:30
+00:44 02:31
+04:05 05:44
+41
+31 99
+00:27 02:08
+01:32 02:20
+02:57 03:27
+00:02 01:16
+01:59 02:53
+02:18 03:04
+01:54 03:41
+00:25 02:06
+03:45 05:05
+03:54 04:46
+00:31 02:09
+00:40 01:13
+02:43 03:34
+01:15 02:49
+00:31 01:49
+00:08 00:48
+02:04 02:19
+02:41 04:31
+01:51 03:03
+02:46 03:13
+01:15 02:04
+03:10 04:11
+01:29 01:52
+00:41 01:14
+01:59 02:40
+02:24 03:27
+03:23 04:06
+03:24 05:14
+02:51 03:06
+00:20 01:44
+00:18 00:54
+00:46 02:44
+00:14 02:09
+01:46 03:27
+03:31 05:21
+02:19 04:17
+03:01 04:06
+03:59 05:33
+03:19 04:19
+03:14 05:06
+02:11 03:33
+01:38 02:55
+02:05 03:58
+00:49 01:55
+02:50 04:01
+02:42 03:50
+02:56 04:31
+02:29 03:56
+02:06 03:51
+03:01 04:14
+02:37 04:22
+01:02 03:00
+02:12 03:18
+01:31 02:34
+02:51 03:51
+00:11 01:58
+01:58 03:35
+01:30 02:32
+01:12 02:33
+03:14 04:23
+02:08 03:52
+02:48 04:24
+00:04 01:13
+00:03 01:30
+02:02 03:39
+00:54 02:23
+03:20 05:19
+01:18 02:26
+01:59 03:04
+02:50 03:49
+01:43 03:15
+01:01 02:47
+03:41 05:01
+04:00 05:41
+02:11 03:15
+00:26 02:12
+03:42 04:56
+02:08 03:36
+00:04 01:43
+01:58 03:55
+00:46 02:01
+02:28 03:50
+02:03 03:49
+00:17 02:09
+03:51 04:56
+02:17 03:22
+01:04 02:51
+00:48 02:22
+00:26 02:18
+03:12 04:35
+02:54 04:47
+03:50 05:41
+02:11 03:12
+02:44 04:02
+00:32 01:49
+01:00 02:00
+03:59 05:07
+00:23 02:15
+03:07 04:41
+03:32 04:41
+01:55 03:45
+03:39 05:13
+02:09 03:31
+01:26 02:48
+00:07 01:51
+00:46 02:34
+00:04 01:06
+01:02 02:27
+02:08 03:18
+03:04 04:06
+02:53 04:28
+01:54 03:11
+01:40 03:25
+03:37 05:19
+03:24 04:30
+01:07 03:03
+00:38 02:20
+01:47 03:16
+03:58 05:17
+03:45 05:43
+02:08 03:26
+01:16 02:27
+02:56 04:28
+03:43 04:50
+01:06 02:28
+02:03 03:29
+03:40 05:30
+02:06 03:09
+02:02 03:10
+01:17 03:06
+0
+50 49
+00:00 00:06
+00:00 00:09
+00:00 00:07
+00:00 00:10
+00:00 00:07
+00:00 00:06
+00:00 00:07
+00:00 00:08
+00:00 00:06
+00:00 00:08
+00:00 00:05
+00:00 00:07
+00:00 00:09
+00:00 00:08
+00:00 00:10
+00:00 00:06
+00:00 00:06
+00:00 00:06
+00:00 00:06
+00:00 00:05
+00:00 00:10
+00:00 00:09
+00:00 00:07
+00:00 00:09
+00:00 00:05
+00:00 00:10
+00:00 00:09
+00:00 00:08
+00:00 00:09
+00:00 00:06
+00:00 00:08
+00:00 00:05
+00:00 00:09
+00:00 00:08
+00:00 00:08
+00:00 00:06
+00:00 00:09
+00:00 00:05
+00:00 00:08
+00:00 00:06
+00:00 00:06
+00:00 00:05
+00:00 00:05
+00:00 00:05
+00:00 00:07
+00:00 00:05
+00:00 00:08
+00:00 00:07
+00:00 00:10
+00:00 00:08
+00:00 00:08
+00:00 00:10
+00:00 00:10
+00:00 00:05
+00:00 00:07
+00:00 00:10
+00:00 00:05
+00:00 00:08
+00:00 00:10
+00:00 00:10
+00:00 00:05
+00:00 00:07
+00:00 00:09
+00:00 00:07
+00:00 00:08
+00:00 00:10
+00:00 00:08
+00:00 00:08
+00:00 00:05
+00:00 00:08
+00:00 00:06
+00:00 00:07
+00:00 00:06
+00:00 00:08
+00:00 00:09
+00:00 00:08
+00:00 00:05
+00:00 00:08
+00:00 00:08
+00:00 00:05
+00:00 00:06
+00:00 00:06
+00:00 00:06
+00:00 00:06
+00:00 00:05
+00:00 00:07
+00:00 00:09
+00:00 00:06
+00:00 00:09
+00:00 00:10
+00:00 00:06
+00:00 00:10
+00:00 00:07
+00:00 00:10
+00:00 00:09
+00:00 00:07
+00:00 00:10
+00:00 00:10
+00:00 00:09
+1
+49 48
+00:00 00:10
+00:02 00:13
+00:12 00:17
+00:13 00:18
+00:04 00:11
+00:07 00:16
+00:05 00:10
+00:16 00:27
+00:17 00:22
+00:02 00:11
+00:03 00:08
+00:11 00:22
+00:02 00:13
+00:12 00:17
+00:19 00:27
+00:15 00:21
+00:20 00:31
+00:02 00:07
+00:18 00:27
+00:16 00:21
+00:18 00:23
+00:02 00:11
+00:08 00:15
+00:19 00:25
+00:11 00:21
+00:17 00:25
+00:06 00:12
+00:18 00:23
+00:12 00:21
+00:20 00:27
+00:11 00:19
+00:12 00:23
+00:05 00:11
+00:09 00:20
+00:11 00:16
+00:03 00:08
+00:15 00:26
+00:19 00:29
+00:00 00:06
+00:09 00:20
+00:03 00:08
+00:17 00:23
+00:11 00:18
+00:16 00:25
+00:17 00:24
+00:18 00:28
+00:14 00:23
+00:09 00:16
+00:11 00:22
+00:19 00:30
+00:17 00:23
+00:09 00:15
+00:15 00:26
+00:14 00:23
+00:19 00:28
+00:07 00:17
+00:20 00:25
+00:18 00:26
+00:17 00:28
+00:15 00:20
+00:08 00:18
+00:20 00:30
+00:09 00:19
+00:11 00:16
+00:16 00:26
+00:05 00:11
+00:10 00:20
+00:00 00:09
+00:13 00:21
+00:16 00:21
+00:10 00:17
+00:19 00:29
+00:01 00:08
+00:09 00:14
+00:07 00:15
+00:05 00:12
+00:18 00:23
+00:04 00:11
+00:16 00:21
+00:07 00:13
+00:11 00:16
+00:14 00:23
+00:01 00:06
+00:13 00:19
+00:14 00:23
+00:14 00:25
+00:09 00:15
+00:00 00:09
+00:13 00:21
+00:03 00:13
+00:04 00:09
+00:02 00:08
+00:14 00:19
+00:19 00:28
+00:17 00:28
+00:15 00:23
+00:03 00:13
+2
+48 47
+00:15 00:25
+00:27 00:39
+00:33 00:44
+00:32 00:39
+00:32 00:42
+00:37 00:42
+00:40 00:50
+00:30 00:36
+00:32 00:39
+00:40 00:51
+00:07 00:15
+00:11 00:18
+00:01 00:10
+00:31 00:38
+00:33 00:38
+00:22 00:34
+00:22 00:27
+00:37 00:44
+00:14 00:23
+00:00 00:07
+00:18 00:23
+00:40 00:47
+00:40 00:47
+00:37 00:42
+00:21 00:33
+00:00 00:11
+00:27 00:33
+00:03 00:13
+00:13 00:24
+00:27 00:34
+00:03 00:11
+00:38 00:46
+00:14 00:21
+00:32 00:42
+00:21 00:30
+00:36 00:42
+00:02 00:12
+00:29 00:37
+00:02 00:14
+00:19 00:24
+00:35 00:46
+00:30 00:41
+00:40 00:45
+00:00 00:07
+00:08 00:17
+00:20 00:26
+00:01 00:13
+00:17 00:25
+00:39 00:50
+00:28 00:38
+00:16 00:27
+00:40 00:51
+00:11 00:22
+00:32 00:37
+00:23 00:31
+00:24 00:34
+00:22 00:27
+00:14 00:21
+00:30 00:37
+00:26 00:37
+00:33 00:39
+00:34 00:40
+00:28 00:36
+00:12 00:24
+00:11 00:20
+00:39 00:50
+00:28 00:37
+00:35 00:46
+00:06 00:18
+00:28 00:34
+00:37 00:43
+00:35 00:41
+00:17 00:26
+00:34 00:43
+00:24 00:33
+00:22 00:27
+00:12 00:21
+00:28 00:38
+00:39 00:46
+00:35 00:45
+00:37 00:44
+00:29 00:40
+00:38 00:43
+00:14 00:20
+00:02 00:09
+00:34 00:41
+00:06 00:17
+00:36 00:44
+00:20 00:28
+00:39 00:48
+00:19 00:29
+00:40 00:47
+00:23 00:31
+00:39 00:47
+00:15 00:24
+3
+47 46
+00:55 01:06
+00:01 00:08
+00:42 00:50
+00:49 01:00
+00:02 00:13
+00:43 00:53
+00:44 00:55
+00:26 00:33
+00:55 01:07
+00:07 00:12
+00:32 00:43
+00:23 00:35
+00:53 01:03
+00:42 00:55
+00:06 00:16
+00:32 00:45
+00:36 00:49
+00:40 00:46
+00:32 00:39
+00:26 00:36
+00:14 00:19
+00:52 00:59
+00:52 00:59
+00:05 00:13
+00:41 00:47
+00:49 00:56
+00:41 00:48
+00:27 00:32
+00:45 00:52
+00:20 00:29
+00:55 01:05
+00:16 00:23
+00:53 01:02
+00:21 00:32
+00:41 00:50
+00:03 00:14
+00:48 00:54
+00:39 00:45
+00:47 00:55
+00:35 00:45
+00:06 00:17
+00:50 00:56
+00:32 00:38
+00:28 00:39
+01:00 01:09
+00:43 00:56
+00:26 00:32
+00:42 00:52
+00:22 00:34
+00:15 00:27
+00:57 01:06
+00:30 00:35
+00:47 00:52
+00:16 00:21
+00:46 00:55
+00:56 01:05
+00:42 00:55
+00:21 00:26
+00:58 01:10
+00:26 00:31
+00:56 01:02
+00:23 00:32
+00:53 01:05
+00:19 00:26
+00:47 01:00
+00:46 00:57
+00:32 00:40
+00:39 00:45
+00:17 00:26
+01:00 01:07
+00:51 01:01
+00:30 00:35
+00:59 01:06
+00:58 01:10
+00:15 00:25
+00:33 00:45
+00:43 00:51
+00:30 00:39
+00:35 00:40
+00:23 00:36
+00:59 01:04
+00:19 00:32
+00:53 01:02
+00:34 00:47
+00:16 00:22
+00:51 00:58
+00:25 00:36
+00:11 00:20
+00:55 01:07
+00:48 00:54
+00:45 00:58
+00:52 01:05
+00:48 00:57
+4
+46 45
+01:02 01:08
+00:53 01:04
+00:20 00:26
+00:43 00:57
+00:32 00:41
+00:55 01:02
+01:20 01:28
+00:21 00:30
+01:00 01:12
+00:29 00:34
+00:49 00:55
+01:01 01:09
+01:16 01:27
+00:54 01:03
+00:38 00:44
+01:06 01:18
+00:43 00:55
+00:39 00:48
+01:03 01:17
+00:31 00:38
+01:08 01:14
+00:02 00:07
+00:34 00:47
+01:12 01:19
+00:40 00:52
+00:18 00:26
+01:06 01:13
+00:21 00:28
+00:41 00:49
+01:08 01:14
+01:09 01:21
+00:01 00:13
+00:47 00:54
+01:07 01:13
+00:12 00:21
+00:46 00:56
+01:08 01:21
+01:04 01:10
+00:45 00:58
+00:31 00:42
+01:04 01:14
+00:38 00:48
+01:13 01:19
+00:51 01:00
+00:54 00:59
+00:51 00:59
+00:33 00:43
+01:13 01:22
+00:28 00:42
+01:10 01:16
+00:14 00:25
+00:42 00:50
+01:07 01:21
+01:15 01:20
+00:10 00:21
+00:45 00:53
+01:19 01:28
+00:36 00:49
+00:56 01:01
+01:18 01:29
+01:13 01:20
+01:15 01:27
+00:57 01:11
+01:16 01:27
+00:58 01:11
+00:56 01:03
+01:11 01:25
+00:25 00:39
+00:49 00:54
+00:47 00:55
+01:18 01:23
+00:21 00:33
+00:58 01:05
+00:20 00:29
+00:52 01:06
+00:37 00:50
+01:17 01:25
+00:30 00:40
+00:51 01:03
+01:14 01:23
+00:26 00:39
+01:09 01:18
+00:32 00:45
+00:59 01:05
+00:44 00:56
+01:11 01:17
+01:01 01:12
+00:11 00:20
+00:46 00:58
+00:20 00:26
+00:49 01:02
+5
+45 44
+01:30 01:42
+00:27 00:38
+00:53 01:02
+01:10 01:21
+00:44 00:49
+01:11 01:23
+00:31 00:36
+00:57 01:06
+01:31 01:45
+01:40 01:47
+00:48 00:56
+01:34 01:46
+01:18 01:29
+00:41 00:51
+01:23 01:34
+00:55 01:04
+01:18 01:26
+00:35 00:42
+01:14 01:19
+01:05 01:10
+00:28 00:34
+00:59 01:08
+01:38 01:50
+00:27 00:40
+01:04 01:17
+01:25 01:32
+01:10 01:22
+01:39 01:48
+01:11 01:19
+00:06 00:14
+00:26 00:39
+01:07 01:22
+01:21 01:33
+01:12 01:22
+00:19 00:25
+00:43 00:56
+01:14 01:22
+01:39 01:48
+01:14 01:26
+01:39 01:47
+00:44 00:53
+01:20 01:35
+00:15 00:28
+01:05 01:18
+00:50 00:56
+01:05 01:15
+00:41 00:48
+01:05 01:10
+01:23 01:31
+00:18 00:32
+01:00 01:06
+01:31 01:40
+00:15 00:20
+00:42 00:56
+01:18 01:30
+01:19 01:33
+01:05 01:19
+01:36 01:46
+00:19 00:29
+01:06 01:21
+01:34 01:41
+01:22 01:31
+00:44 00:49
+01:04 01:16
+01:38 01:49
+00:23 00:29
+00:54 01:02
+01:28 01:35
+00:43 00:52
+01:25 01:35
+00:37 00:50
+01:16 01:29
+00:51 01:00
+01:26 01:33
+01:15 01:23
+01:36 01:50
+00:51 01:00
+01:29 01:42
+01:28 01:43
+00:14 00:21
+00:50 01:03
+01:30 01:39
+01:11 01:19
+01:38 01:49
+01:29 01:42
+00:32 00:37
+01:00 01:07
+01:27 01:36
+01:29 01:39
+6
+44 43
+01:42 01:55
+01:05 01:19
+01:32 01:44
+01:11 01:22
+01:51 02:00
+01:27 01:36
+01:52 01:57
+00:16 00:30
+00:53 01:04
+01:16 01:24
+01:39 01:48
+01:26 01:35
+00:03 00:11
+00:39 00:44
+01:06 01:22
+01:36 01:45
+01:41 01:52
+00:32 00:44
+01:10 01:15
+01:29 01:45
+01:48 01:58
+01:34 01:40
+01:52 02:08
+01:38 01:53
+01:35 01:50
+00:55 01:00
+01:24 01:34
+01:48 01:58
+00:15 00:23
+00:50 00:57
+01:23 01:34
+00:44 00:53
+01:07 01:17
+01:34 01:42
+01:53 02:08
+00:43 00:59
+01:19 01:33
+01:56 02:05
+00:18 00:24
+00:55 01:03
+01:24 01:29
+01:31 01:47
+00:29 00:36
+01:03 01:19
+01:24 01:40
+02:00 02:08
+01:21 01:32
+01:45 01:57
+00:47 01:03
+01:33 01:47
+01:42 01:50
+00:06 00:15
+00:39 00:51
+01:06 01:12
+01:30 01:38
+01:51 02:01
+01:36 01:47
+01:51 02:07
+00:21 00:26
+00:44 00:56
+01:23 01:36
+01:56 02:11
+01:29 01:39
+00:58 01:07
+01:17 01:23
+01:56 02:11
+01:24 01:37
+01:16 01:23
+01:44 01:49
+01:17 01:32
+01:12 01:24
+02:00 02:14
+01:14 01:21
+01:42 01:47
+01:59 02:14
+00:23 00:38
+01:07 01:19
+01:46 01:59
+00:30 00:36
+00:53 00:59
+01:25 01:34
+01:52 02:03
+01:27 01:39
+01:48 01:53
+01:02 01:16
+01:42 01:48
+00:09 00:18
+7
+43 42
+01:01 01:08
+01:29 01:43
+02:03 02:15
+00:45 00:56
+01:24 01:34
+01:53 02:05
+02:00 02:15
+00:48 01:01
+01:31 01:46
+02:08 02:22
+01:02 01:07
+01:20 01:29
+01:50 01:57
+01:06 01:21
+01:44 01:55
+02:20 02:37
+00:35 00:44
+01:09 01:14
+01:46 01:59
+02:14 02:19
+00:47 01:02
+01:27 01:34
+01:57 02:13
+01:27 01:33
+02:05 02:13
+02:02 02:18
+00:46 00:57
+01:34 01:44
+02:13 02:30
+01:55 02:02
+02:16 02:30
+00:34 00:47
+01:07 01:17
+01:46 02:02
+02:16 02:30
+01:23 01:36
+01:49 01:54
+00:32 00:47
+01:13 01:25
+01:49 01:59
+00:32 00:40
+01:11 01:22
+01:45 01:50
+00:44 00:56
+01:12 01:23
+01:47 01:59
+02:15 02:31
+00:26 00:38
+01:07 01:21
+01:37 01:42
+02:08 02:13
+01:44 01:58
+01:07 01:20
+01:54 02:00
+00:47 01:00
+01:13 01:20
+01:39 01:47
+02:04 02:18
+00:47 00:53
+01:32 01:41
+02:01 02:10
+00:49 01:04
+01:26 01:40
+02:00 02:12
+01:04 01:17
+01:46 01:57
+02:15 02:23
+01:10 01:19
+01:43 02:00
+00:23 00:33
+01:09 01:21
+01:48 02:05
+02:04 02:16
+00:17 00:32
+00:54 01:05
+01:22 01:33
+02:08 02:16
+01:37 01:49
+02:04 02:18
+00:54 01:05
+01:36 01:43
+02:06 02:22
+02:05 02:21
+00:03 00:19
+00:46 01:02
+8
+42 41
+02:01 02:18
+01:02 01:17
+01:45 01:57
+02:13 02:25
+02:35 02:47
+01:06 01:18
+01:46 01:52
+02:12 02:18
+00:50 01:05
+01:28 01:34
+02:01 02:11
+02:34 02:39
+00:46 00:57
+01:17 01:27
+01:45 01:55
+02:13 02:19
+01:03 01:15
+01:46 01:59
+02:20 02:34
+01:05 01:23
+01:48 01:55
+02:20 02:30
+00:36 00:47
+01:12 01:18
+01:49 02:05
+02:28 02:36
+00:30 00:43
+01:07 01:15
+01:37 01:53
+02:11 02:23
+00:18 00:26
+00:58 01:05
+01:27 01:34
+01:51 02:07
+02:31 02:43
+02:02 02:09
+02:38 02:55
+01:06 01:19
+01:44 02:00
+02:33 02:41
+00:04 00:15
+00:33 00:43
+02:40 02:54
+01:43 01:56
+02:29 02:40
+01:26 01:41
+01:58 02:03
+02:31 02:40
+02:16 02:28
+00:56 01:04
+01:26 01:34
+02:03 02:09
+02:27 02:34
+01:15 01:20
+01:43 01:56
+02:18 02:23
+01:04 01:12
+01:35 01:43
+02:04 02:13
+02:25 02:43
+01:22 01:40
+02:08 02:15
+02:36 02:53
+01:25 01:39
+02:01 02:15
+02:35 02:44
+00:59 01:04
+01:29 01:41
+02:14 02:27
+00:09 00:27
+00:55 01:00
+01:23 01:36
+01:54 02:00
+02:29 02:36
+00:38 00:54
+01:13 01:27
+01:35 01:44
+02:18 02:23
+01:50 02:02
+02:20 02:38
+00:44 00:59
+01:20 01:38
+02:10 02:24
+9
+41 40
+02:31 02:46
+00:53 00:58
+01:26 01:32
+01:48 02:06
+02:31 02:38
+03:00 03:14
+01:15 01:27
+01:43 01:56
+02:23 02:42
+02:57 03:09
+00:03 00:10
+00:26 00:39
+01:05 01:24
+01:54 02:05
+02:13 02:29
+02:55 03:08
+00:05 00:21
+00:36 00:54
+01:17 01:34
+01:57 02:15
+02:21 02:39
+02:58 03:08
+02:34 02:47
+02:07 02:20
+02:35 02:51
+01:45 01:54
+02:17 02:36
+01:08 01:20
+01:40 01:46
+02:01 02:15
+02:40 02:58
+01:53 02:08
+02:35 02:53
+02:18 02:27
+02:42 02:54
+02:03 02:22
+02:37 02:46
+00:47 01:03
+01:24 01:29
+02:02 02:11
+02:32 02:51
+02:50 03:00
+01:08 01:17
+01:38 01:46
+02:15 02:23
+02:48 02:59
+00:51 01:10
+01:28 01:41
+02:03 02:13
+02:42 03:00
+00:14 00:21
+00:46 00:58
+01:30 01:43
+02:08 02:13
+02:38 02:53
+00:23 00:30
+00:55 01:08
+01:38 01:51
+02:15 02:20
+02:42 02:51
+02:49 03:00
+02:23 02:31
+03:00 03:12
+01:56 02:06
+02:46 03:05
+00:44 00:57
+01:28 01:33
+01:52 02:01
+02:19 02:35
+02:17 02:27
+02:53 03:04
+02:32 02:39
+02:24 02:37
+02:53 03:01
+01:10 01:17
+01:38 01:54
+02:16 02:30
+02:58 03:09
+01:28 01:35
+01:53 02:11
+02:33 02:52
+10
+40 39
+00:06 00:20
+00:49 00:56
+01:15 01:35
+01:55 02:07
+02:30 02:38
+02:59 03:16
+02:43 02:59
+01:24 01:43
+02:16 02:34
+03:01 03:18
+01:48 02:02
+02:17 02:36
+03:00 03:15
+02:50 03:04
+00:58 01:07
+01:35 01:55
+02:27 02:39
+03:14 03:28
+00:08 00:25
+00:56 01:03
+01:23 01:35
+02:10 02:21
+02:47 02:54
+03:13 03:18
+03:12 03:23
+01:58 02:14
+02:34 02:43
+03:12 03:31
+01:05 01:24
+01:46 01:59
+02:24 02:33
+03:04 03:20
+00:25 00:43
+01:10 01:25
+01:55 02:11
+02:36 02:56
+03:14 03:19
+01:51 01:59
+02:20 02:30
+02:53 03:00
+00:28 00:42
+01:00 01:07
+01:37 01:47
+02:10 02:27
+02:45 02:50
+02:19 02:35
+03:04 03:23
+00:55 01:15
+01:49 02:08
+02:36 02:55
+01:37 01:43
+02:02 02:11
+02:41 03:00
+03:16 03:36
+03:13 03:28
+00:38 00:56
+01:12 01:28
+01:58 02:17
+02:49 03:08
+00:32 00:49
+01:11 01:16
+01:45 02:04
+02:28 02:37
+03:03 03:09
+03:20 03:34
+02:57 03:11
+01:50 01:56
+02:15 02:30
+02:50 03:04
+01:31 01:40
+02:05 02:24
+02:41 02:58
+03:20 03:31
+00:16 00:24
+00:47 01:06
+01:27 01:45
+02:14 02:30
+02:59 03:19
+01:59 02:13
+11
+39 38
+00:17 00:30
+00:51 01:01
+01:36 01:41
+01:53 01:58
+02:13 02:22
+02:41 02:51
+03:15 03:29
+00:26 00:32
+00:48 01:01
+01:23 01:39
+01:54 02:05
+02:16 02:28
+02:52 03:11
+03:39 03:58
+02:52 03:12
+00:34 00:40
+00:55 01:14
+01:36 01:45
+02:13 02:21
+02:41 02:48
+03:15 03:32
+00:01 00:17
+00:44 00:55
+01:18 01:27
+01:58 02:04
+02:22 02:43
+03:08 03:14
+03:34 03:45
+02:23 02:28
+02:45 02:56
+03:20 03:34
+03:02 03:18
+03:32 03:46
+02:28 02:46
+03:12 03:21
+02:05 02:16
+02:25 02:32
+03:06 03:15
+03:29 03:39
+00:00 00:16
+00:34 00:45
+01:10 01:27
+01:43 01:53
+02:04 02:13
+02:22 02:39
+02:58 03:09
+03:31 03:41
+00:36 00:48
+01:09 01:16
+01:39 01:46
+02:08 02:16
+02:32 02:47
+03:19 03:34
+03:18 03:36
+00:40 00:46
+01:20 01:27
+01:50 02:11
+02:30 02:35
+02:57 03:14
+03:32 03:45
+00:21 00:35
+00:56 01:11
+01:35 01:50
+02:07 02:22
+02:44 03:02
+03:19 03:29
+02:28 02:40
+03:05 03:15
+03:20 03:28
+02:11 02:21
+02:46 03:07
+03:26 03:46
+02:20 02:25
+02:41 03:02
+03:15 03:28
+02:46 02:55
+03:19 03:30
+12
+38 37
+00:20 00:32
+00:52 01:09
+01:28 01:49
+02:03 02:22
+02:34 02:52
+03:05 03:26
+02:56 03:07
+03:24 03:45
+01:10 01:22
+01:42 01:57
+02:25 02:47
+03:15 03:21
+03:56 04:18
+02:03 02:24
+02:41 02:59
+03:16 03:29
+03:50 03:59
+03:45 03:51
+00:20 00:30
+00:53 00:59
+01:17 01:37
+01:53 02:01
+02:28 02:44
+02:54 03:09
+03:40 03:47
+03:29 03:43
+03:58 04:19
+02:38 02:50
+03:08 03:17
+03:41 03:59
+03:13 03:35
+03:59 04:17
+00:40 00:49
+01:14 01:24
+01:34 01:46
+02:14 02:31
+02:57 03:13
+03:42 03:51
+00:38 00:50
+01:15 01:22
+01:53 01:58
+02:27 02:32
+02:54 03:02
+03:31 03:53
+03:14 03:19
+03:53 04:15
+01:28 01:42
+02:02 02:21
+02:53 03:11
+03:29 03:51
+02:24 02:33
+03:01 03:15
+03:33 03:46
+03:53 03:59
+00:10 00:15
+00:32 00:48
+01:04 01:10
+01:40 01:52
+02:03 02:25
+02:44 02:54
+03:17 03:32
+03:52 04:02
+03:49 03:54
+02:51 03:00
+03:23 03:41
+02:53 03:08
+03:37 03:51
+00:56 01:14
+01:28 01:34
+01:51 02:08
+02:32 02:50
+03:20 03:41
+03:54 04:14
+03:28 03:50
+03:54 03:59
+13
+37 36
+00:46 01:05
+01:32 01:46
+02:07 02:13
+02:23 02:46
+03:15 03:22
+03:31 03:42
+03:51 04:12
+03:44 04:05
+00:55 01:01
+01:19 01:30
+01:56 02:17
+02:40 02:52
+03:04 03:17
+03:42 03:59
+04:15 04:36
+03:17 03:26
+03:53 04:08
+00:41 00:49
+01:14 01:26
+01:48 01:56
+02:08 02:31
+02:45 02:54
+03:21 03:42
+04:07 04:29
+01:09 01:18
+01:36 01:57
+02:20 02:27
+02:56 03:18
+03:45 04:04
+03:00 03:21
+03:47 04:00
+02:18 02:25
+02:41 03:00
+03:27 03:46
+04:12 04:34
+00:55 01:01
+01:15 01:37
+00:32 00:43
+01:12 01:30
+01:51 02:04
+02:14 02:21
+02:47 03:08
+03:23 03:29
+03:44 03:50
+04:19 04:33
+04:10 04:30
+00:30 00:53
+01:08 01:14
+01:35 01:53
+02:17 02:39
+02:52 03:01
+03:20 03:36
+04:03 04:15
+02:52 03:14
+03:26 03:46
+04:09 04:29
+00:15 00:37
+00:52 01:11
+01:29 01:43
+01:56 02:06
+02:31 02:41
+02:57 03:19
+03:45 04:06
+01:24 01:32
+02:02 02:20
+02:33 02:52
+03:19 03:38
+04:05 04:21
+03:21 03:40
+04:07 04:28
+02:28 02:40
+03:06 03:25
+03:52 04:09
+14
+36 35
+03:56 04:10
+04:36 04:52
+03:08 03:20
+03:39 04:01
+04:27 04:50
+02:36 02:41
+03:12 03:28
+03:56 04:18
+04:32 04:37
+00:34 00:58
+01:12 01:17
+01:47 01:59
+02:22 02:33
+03:02 03:13
+03:37 03:46
+03:59 04:19
+02:58 03:18
+03:34 03:45
+04:08 04:16
+04:38 04:56
+03:41 04:04
+04:13 04:23
+02:29 02:38
+02:57 03:17
+03:44 04:01
+04:31 04:51
+00:39 00:53
+01:12 01:21
+01:36 02:00
+02:12 02:21
+02:47 03:09
+03:30 03:43
+03:57 04:13
+04:29 04:43
+00:52 01:03
+01:23 01:42
+03:29 03:51
+04:14 04:30
+02:45 03:06
+03:24 03:37
+04:03 04:24
+02:17 02:32
+02:46 03:06
+03:33 03:51
+04:21 04:30
+00:05 00:28
+01:03 01:10
+01:22 01:43
+01:59 02:17
+02:34 02:57
+03:16 03:35
+03:50 03:59
+04:22 04:45
+03:20 03:29
+03:50 04:02
+04:17 04:37
+04:05 04:10
+04:29 04:37
+02:08 02:24
+02:40 02:51
+03:17 03:38
+04:04 04:27
+00:55 01:11
+01:25 01:30
+02:00 02:08
+02:26 02:44
+03:11 03:26
+03:47 03:57
+04:14 04:25
+01:04 01:21
+01:43 02:06
+15
+35 34
+00:41 00:49
+01:02 01:27
+01:57 02:22
+02:44 03:01
+03:26 03:38
+04:03 04:11
+04:21 04:34
+01:34 01:41
+02:08 02:23
+02:32 02:50
+03:14 03:25
+03:55 04:10
+04:29 04:44
+05:00 05:14
+04:02 04:09
+04:27 04:50
+01:01 01:13
+01:41 01:51
+02:17 02:24
+02:49 03:07
+03:23 03:47
+04:06 04:21
+04:48 05:04
+02:19 02:31
+02:41 02:57
+03:17 03:36
+03:48 04:11
+04:33 04:42
+04:18 04:33
+04:50 05:08
+02:07 02:14
+02:32 02:50
+03:17 03:32
+03:51 04:09
+04:43 05:00
+00:52 01:00
+01:30 01:55
+02:26 02:42
+03:03 03:26
+03:38 03:59
+04:11 04:21
+04:37 04:59
+01:41 02:06
+02:23 02:32
+02:50 03:14
+03:28 03:51
+04:12 04:28
+04:46 04:55
+03:48 04:01
+04:13 04:26
+04:50 05:10
+01:13 01:37
+01:54 02:12
+02:28 02:46
+03:07 03:23
+03:48 04:03
+04:24 04:45
+02:34 02:39
+03:01 03:15
+03:40 03:46
+04:15 04:31
+04:43 04:59
+04:02 04:14
+04:35 04:46
+01:47 02:07
+02:15 02:31
+02:52 03:17
+03:33 03:46
+04:14 04:39
+16
+34 33
+02:02 02:27
+02:43 02:48
+03:16 03:27
+03:57 04:04
+04:19 04:35
+04:59 05:11
+03:30 03:42
+04:01 04:20
+04:32 04:49
+05:13 05:22
+00:01 00:23
+00:44 01:08
+01:36 01:55
+02:24 02:43
+03:04 03:30
+03:59 04:22
+04:45 04:57
+05:07 05:19
+02:48 03:03
+03:24 03:48
+04:00 04:26
+04:33 04:40
+04:54 05:19
+01:38 01:43
+02:02 02:22
+02:48 03:05
+03:18 03:24
+03:49 04:01
+04:25 04:40
+04:58 05:18
+02:16 02:22
+02:46 02:56
+03:20 03:36
+03:56 04:21
+01:32 01:58
+02:29 02:41
+02:50 03:13
+03:30 03:56
+04:04 04:18
+04:39 04:57
+05:15 05:35
+03:22 03:29
+03:45 03:58
+04:21 04:28
+04:52 05:10
+00:26 00:41
+01:12 01:32
+01:57 02:21
+02:43 03:02
+03:34 03:58
+04:25 04:43
+04:57 05:06
+03:07 03:21
+03:49 03:59
+04:26 04:32
+04:44 04:54
+05:20 05:46
+01:43 01:58
+02:22 02:45
+03:08 03:15
+03:28 03:47
+04:05 04:23
+04:42 04:56
+05:19 05:26
+02:22 02:43
+03:00 03:20
+03:38 03:52
+17
+33 32
+00:46 01:09
+01:25 01:31
+01:46 01:53
+02:25 02:37
+02:50 03:11
+03:28 03:52
+04:02 04:09
+04:37 04:54
+05:01 05:14
+05:27 05:54
+03:59 04:14
+04:40 04:56
+05:09 05:22
+02:21 02:30
+02:53 03:20
+03:29 03:36
+04:06 04:25
+04:55 05:14
+05:29 05:36
+04:59 05:14
+04:16 04:21
+04:35 04:57
+05:10 05:35
+01:22 01:48
+01:59 02:09
+02:22 02:49
+03:05 03:22
+03:40 03:55
+04:11 04:38
+05:01 05:26
+01:55 02:22
+02:45 02:50
+03:06 03:28
+01:11 01:24
+01:31 01:45
+01:56 02:22
+02:37 02:48
+03:13 03:26
+03:54 04:00
+04:12 04:36
+04:55 05:01
+05:14 05:25
+04:16 04:37
+04:58 05:07
+05:25 05:52
+02:08 02:21
+02:32 02:50
+03:21 03:26
+03:39 04:03
+04:28 04:52
+05:17 05:28
+05:37 06:02
+05:17 05:38
+04:22 04:34
+04:58 05:08
+05:37 05:51
+01:07 01:19
+01:50 01:56
+02:12 02:19
+02:52 03:02
+03:22 03:37
+03:57 04:11
+04:38 05:00
+05:28 05:48
+01:49 01:54
+18
+32 31
+04:39 05:04
+05:29 05:54
+04:22 04:46
+05:13 05:18
+05:46 06:01
+05:14 05:35
+05:46 06:05
+00:07 00:13
+00:21 00:42
+01:04 01:31
+02:00 02:11
+02:39 03:00
+03:23 03:42
+04:10 04:26
+04:36 04:42
+05:03 05:28
+05:58 06:08
+04:29 04:45
+05:08 05:26
+05:38 05:48
+02:14 02:27
+02:38 03:02
+03:13 03:36
+03:53 04:08
+04:29 04:40
+05:06 05:18
+05:40 05:45
+02:22 02:42
+02:53 03:13
+03:22 03:43
+03:56 04:04
+04:21 04:39
+05:04 05:27
+05:55 06:11
+04:46 05:13
+05:19 05:44
+05:35 05:46
+00:15 00:21
+00:42 01:03
+01:32 02:00
+02:11 02:38
+03:00 03:23
+03:42 04:10
+04:28 04:36
+04:43 05:01
+05:30 05:57
+04:47 05:07
+05:26 05:37
+05:48 06:07
+01:46 02:12
+02:29 02:37
+03:04 03:11
+03:37 03:52
+04:10 04:29
+04:40 05:06
+05:18 05:38
+05:47 06:10
+02:44 02:52
+03:15 03:20
+03:43 03:54
+04:05 04:21
+04:40 04:50
+05:20 05:32
+19
+31 30
+01:33 02:01
+02:31 02:48
+03:14 03:20
+03:40 03:56
+04:18 04:37
+05:01 05:26
+05:46 05:53
+06:07 06:23
+06:12 06:29
+05:15 05:41
+05:51 06:01
+04:20 04:38
+04:58 05:25
+05:30 05:38
+06:02 06:12
+00:44 01:02
+01:11 01:27
+01:45 02:13
+02:36 02:58
+03:14 03:28
+03:36 03:43
+04:11 04:31
+04:52 04:57
+05:16 05:44
+05:54 06:21
+05:37 06:06
+01:50 01:55
+02:12 02:36
+03:03 03:08
+03:39 04:03
+04:30 04:54
+02:02 02:30
+02:48 03:13
+03:21 03:40
+03:57 04:18
+04:37 05:01
+05:27 05:45
+05:54 06:07
+05:42 05:50
+06:02 06:28
+04:15 04:20
+04:38 04:58
+05:25 05:30
+05:39 06:02
+06:13 06:39
+00:31 00:43
+01:02 01:11
+01:27 01:44
+02:13 02:36
+02:59 03:14
+03:28 03:35
+03:44 04:11
+04:32 04:51
+04:58 05:15
+05:45 05:53
+05:22 05:36
+06:06 06:33
+01:42 01:50
+01:56 02:11
+02:36 03:02
+03:09 03:38
+30
+10 10
+12:48 12:55
+13:49 13:57
+14:44 14:54
+15:15 15:24
+16:27 16:32
+16:48 16:55
+17:16 17:26
+18:23 18:28
+19:00 19:09
+19:55 20:01
+13:18 13:28
+14:16 14:23
+14:58 15:05
+15:52 16:01
+16:41 16:46
+17:05 17:14
+17:55 18:03
+18:43 18:48
+19:27 19:37
+20:30 20:38
+29
+10 10
+04:52 05:02
+05:34 05:39
+06:29 06:39
+07:36 07:46
+08:26 08:35
+09:16 09:24
+10:05 10:15
+11:02 11:08
+11:50 12:00
+12:43 12:50
+05:10 05:21
+05:51 06:01
+07:07 07:14
+08:15 08:20
+08:44 08:52
+09:43 09:51
+10:46 10:55
+11:25 11:36
+12:21 12:31
+13:10 13:16
+28
+10 10
+17:20 17:26
+17:59 18:08
+18:47 18:58
+19:39 19:44
+20:43 20:50
+03:02 03:09
+04:04 04:13
+05:22 05:30
+06:11 06:17
+06:50 07:01
+17:54 17:59
+18:20 18:27
+19:12 19:19
+20:07 20:13
+21:00 21:10
+03:40 03:46
+04:45 04:52
+06:00 06:05
+06:25 06:37
+07:08 07:18
+27
+10 10
+16:33 16:46
+17:15 17:27
+18:24 18:33
+18:53 19:01
+19:48 20:00
+10:15 10:27
+11:04 11:10
+12:01 12:08
+13:15 13:25
+14:04 14:14
+15:55 16:05
+16:50 16:56
+17:50 17:55
+18:35 18:41
+19:26 19:37
+09:49 09:59
+10:49 10:57
+11:36 11:48
+12:34 12:43
+13:57 14:03
+26
+10 10
+13:05 13:17
+14:11 14:22
+14:58 15:10
+15:43 15:57
+16:42 16:48
+17:31 17:36
+18:33 18:40
+02:33 02:43
+03:31 03:44
+04:56 05:09
+12:57 13:02
+13:49 13:56
+14:38 14:45
+15:21 15:30
+16:25 16:31
+17:03 17:10
+17:54 18:07
+18:44 18:55
+02:12 02:24
+03:09 03:15
+25
+10 10
+08:56 09:07
+09:55 10:03
+10:51 10:57
+11:50 11:55
+12:34 12:39
+13:36 13:47
+14:37 14:50
+15:33 15:42
+16:16 16:26
+17:22 17:35
+17:40 17:53
+09:22 09:30
+10:26 10:39
+11:18 11:25
+12:16 12:21
+13:01 13:10
+14:17 14:22
+15:19 15:24
+15:46 15:54
+16:39 16:52
+24
+10 10
+14:15 14:31
+15:36 15:43
+16:29 16:37
+08:38 08:51
+09:32 09:47
+10:20 10:36
+11:53 12:02
+12:51 12:58
+13:36 13:43
+14:21 14:31
+15:03 15:13
+15:56 16:06
+09:12 09:21
+10:11 10:19
+11:08 11:23
+12:05 12:16
+13:01 13:06
+14:09 14:15
+14:53 15:08
+16:00 16:15
+23
+10 10
+14:33 14:47
+15:06 15:20
+14:18 14:34
+15:43 15:50
+03:11 03:19
+04:30 04:39
+05:49 06:05
+07:00 07:11
+07:57 08:05
+09:12 09:28
+14:54 15:02
+15:49 15:57
+13:39 13:50
+14:54 15:11
+15:50 16:05
+03:44 03:53
+05:06 05:12
+06:39 06:50
+07:33 07:39
+08:26 08:39
+22
+10 10
+01:24 01:33
+02:15 02:33
+03:02 03:17
+04:25 04:38
+05:36 05:51
+06:36 06:52
+07:56 08:06
+08:38 08:56
+10:10 10:28
+11:00 11:18
+00:38 00:47
+01:43 01:57
+02:40 02:57
+03:52 04:00
+05:14 05:23
+06:02 06:15
+07:06 07:24
+08:21 08:31
+09:28 09:40
+10:49 10:58
+21
+10 10
+13:29 13:34
+01:15 01:21
+01:43 02:02
+02:58 03:10
+03:42 03:50
+04:54 05:11
+06:03 06:16
+07:11 07:24
+07:54 08:00
+08:56 09:02
+13:48 14:02
+00:40 00:51
+01:27 01:33
+02:10 02:28
+03:11 03:28
+04:20 04:33
+05:40 05:59
+06:44 06:49
+07:41 07:50
+08:27 08:40
+20
+10 10
+02:54 03:08
+04:05 04:19
+05:19 05:29
+06:24 06:31
+07:18 07:26
+08:12 08:19
+09:04 09:09
+10:09 10:15
+11:02 11:07
+11:47 11:57
+03:37 03:54
+04:34 04:52
+05:42 05:49
+06:35 06:50
+07:42 08:02
+08:44 08:59
+09:11 09:29
+10:34 10:51
+11:08 11:17
+12:02 12:19
+19
+10 10
+10:45 11:05
+11:32 11:47
+04:48 05:06
+06:20 06:29
+07:27 07:37
+08:44 08:55
+09:20 09:31
+10:15 10:35
+11:19 11:35
+02:48 03:04
+10:07 10:26
+11:09 11:30
+11:50 12:00
+05:34 05:42
+06:55 07:11
+08:09 08:28
+08:58 09:17
+09:59 10:09
+11:07 11:14
+11:55 12:16
+18
+10 10
+01:11 01:18
+02:33 02:52
+04:06 04:21
+05:05 05:27
+06:34 06:52
+07:23 07:38
+08:11 08:33
+09:28 09:39
+10:11 10:25
+07:32 07:39
+01:42 01:56
+03:11 03:30
+04:21 04:34
+06:07 06:28
+07:04 07:20
+07:48 08:05
+08:42 08:47
+09:52 10:01
+10:53 11:02
+08:02 08:11
+17
+10 10
+06:34 06:57
+07:49 08:05
+09:19 09:25
+09:55 10:02
+01:59 02:21
+03:34 03:46
+04:32 04:40
+05:22 05:27
+06:37 06:55
+08:06 08:26
+07:15 07:28
+08:39 08:57
+09:32 09:49
+01:43 01:53
+02:51 03:12
+03:51 04:06
+04:55 05:16
+05:52 05:57
+07:38 07:48
+08:44 08:59
+16
+10 10
+07:57 08:15
+08:22 08:41
+02:08 02:31
+03:32 03:41
+04:44 04:58
+06:25 06:48
+07:37 07:53
+07:23 07:34
+08:31 08:36
+09:00 09:07
+08:15 08:21
+09:00 09:20
+01:39 01:52
+02:34 02:55
+04:16 04:25
+05:42 06:00
+07:22 07:28
+08:21 08:32
+08:04 08:24
+08:45 08:57
+15
+10 10
+00:49 00:55
+01:40 01:49
+02:21 02:41
+03:27 03:41
+04:32 04:47
+05:54 06:00
+07:07 07:32
+08:00 08:06
+01:50 02:12
+03:12 03:24
+01:07 01:17
+02:08 02:18
+02:45 03:10
+04:07 04:14
+05:10 05:19
+06:13 06:25
+07:33 07:49
+00:55 01:17
+02:33 02:52
+03:54 04:00
+14
+10 10
+03:41 03:54
+04:38 05:00
+05:55 06:17
+06:32 06:37
+01:48 02:06
+02:30 02:47
+03:35 03:45
+04:50 05:13
+06:29 06:55
+04:06 04:16
+04:01 04:15
+05:13 05:34
+06:41 06:57
+02:09 02:19
+03:19 03:27
+04:11 04:17
+05:37 05:57
+04:27 04:43
+06:09 06:23
+00:31 00:44
+30
+100 100
+06:16 06:23
+06:57 07:03
+07:48 07:55
+08:42 08:52
+09:40 09:50
+10:23 10:33
+11:14 11:24
+12:10 12:19
+12:51 13:00
+13:36 13:46
+14:35 14:41
+15:39 15:45
+16:45 16:53
+17:54 17:59
+18:28 18:33
+18:53 19:02
+19:53 20:00
+20:33 20:40
+21:06 21:13
+21:39 21:45
+22:22 22:31
+18:53 18:58
+19:37 19:46
+20:18 20:24
+21:17 21:27
+22:02 22:11
+22:53 22:59
+21:14 21:20
+21:43 21:49
+22:30 22:39
+14:07 14:16
+15:02 15:12
+16:18 16:24
+16:56 17:04
+17:38 17:48
+18:27 18:33
+19:24 19:33
+20:02 20:11
+20:56 21:04
+21:20 21:30
+21:55 22:04
+22:33 22:38
+07:10 07:18
+08:07 08:14
+08:49 08:59
+09:36 09:45
+10:05 10:10
+10:52 11:00
+11:44 11:51
+12:25 12:35
+13:18 13:26
+14:00 14:09
+14:24 14:32
+14:58 15:05
+15:47 15:56
+16:32 16:38
+16:59 17:05
+17:51 17:56
+18:35 18:42
+19:22 19:32
+20:20 20:30
+20:48 20:58
+21:47 21:55
+22:49 22:59
+17:45 17:52
+18:49 18:55
+19:34 19:43
+20:16 20:25
+20:59 21:08
+21:41 21:46
+22:46 22:55
+22:20 22:25
+22:51 22:59
+11:43 11:52
+12:20 12:28
+13:04 13:10
+13:55 14:02
+14:28 14:35
+14:57 15:05
+15:42 15:49
+16:27 16:33
+16:59 17:09
+17:54 18:04
+18:52 19:01
+19:32 19:39
+20:34 20:41
+21:02 21:09
+21:43 21:52
+22:12 22:17
+22:44 22:51
+15:30 15:40
+16:18 16:26
+16:59 17:07
+18:03 18:09
+18:33 18:39
+19:21 19:28
+19:44 19:50
+20:17 20:24
+21:05 21:15
+22:02 22:07
+06:45 06:53
+07:14 07:23
+08:14 08:24
+09:16 09:22
+10:11 10:19
+10:52 10:59
+11:48 11:58
+12:31 12:41
+13:21 13:28
+14:06 14:15
+15:02 15:10
+16:13 16:20
+17:21 17:29
+18:03 18:13
+18:38 18:45
+19:25 19:34
+20:06 20:14
+20:56 21:04
+21:20 21:27
+21:55 22:00
+22:47 22:55
+18:23 18:32
+19:16 19:24
+19:49 19:55
+20:52 21:00
+21:50 21:57
+22:24 22:34
+20:44 20:51
+21:23 21:33
+21:59 22:08
+22:39 22:45
+13:36 13:41
+14:26 14:33
+15:41 15:49
+16:30 16:35
+17:24 17:33
+17:54 18:02
+18:52 18:57
+19:46 19:56
+20:30 20:40
+21:09 21:14
+21:44 21:52
+22:16 22:25
+22:51 22:59
+07:29 07:39
+08:19 08:27
+09:09 09:15
+09:49 09:58
+10:31 10:37
+11:23 11:31
+12:16 12:23
+12:57 13:07
+13:55 14:00
+14:14 14:20
+14:43 14:49
+15:18 15:26
+16:19 16:29
+16:45 16:54
+17:16 17:23
+18:16 18:25
+19:01 19:08
+19:58 20:07
+20:35 20:41
+21:27 21:33
+22:17 22:22
+18:16 18:25
+19:19 19:25
+19:57 20:05
+20:37 20:44
+21:17 21:25
+22:14 22:24
+22:26 22:31
+12:12 12:19
+12:31 12:37
+13:23 13:32
+14:15 14:24
+14:41 14:50
+15:32 15:42
+15:53 15:59
+16:49 16:54
+17:38 17:47
+18:30 18:40
+19:05 19:15
+20:07 20:14
+20:48 20:53
+21:29 21:36
+22:03 22:09
+22:23 22:30
+15:52 15:59
+16:51 16:56
+17:30 17:39
+18:25 18:33
+19:08 19:16
+19:31 19:41
+19:51 20:00
+20:46 20:52
+21:38 21:45
+22:08 22:17
+23:00 23:09
+11:40 11:45
diff --git a/codejam_2008/src/y2008qual/B-large-practice.out b/codejam_2008/src/y2008qual/B-large-practice.out
new file mode 100644
index 0000000..66c1e74
--- /dev/null
+++ b/codejam_2008/src/y2008qual/B-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0
+Case #2: 0
+Case #3: 0
+Case #4: 0
+Case #5: 0
+Case #6: 0
+Case #7: 0
+Case #8: 0
+Case #9: 0
+Case #10: 0
+Case #11: 0
+Case #12: 0
+Case #13: 0
+Case #14: 0
+Case #15: 0
+Case #16: 0
+Case #17: 0
+Case #18: 0
+Case #19: 0
+Case #20: 0
+Case #21: 0
+Case #22: 0
+Case #23: 0
+Case #24: 0
+Case #25: 0
+Case #26: 0
+Case #27: 0
+Case #28: 0
+Case #29: 0
+Case #30: 0
+Case #31: 0
+Case #32: 0
+Case #33: 0
+Case #34: 0
+Case #35: 0
+Case #36: 0
+Case #37: 0
+Case #38: 0
+Case #39: 0
+Case #40: 0
+Case #41: 0
+Case #42: 0
+Case #43: 0
+Case #44: 0
+Case #45: 0
+Case #46: 0
+Case #47: 0
+Case #48: 0
+Case #49: 0
+Case #50: 0
+Case #51: 0
+Case #52: 0
+Case #53: 0
+Case #54: 0
+Case #55: 0
+Case #56: 0
+Case #57: 0
+Case #58: 0
+Case #59: 0
+Case #60: 0
+Case #61: 0
+Case #62: 0
+Case #63: 0
+Case #64: 0
+Case #65: 0
+Case #66: 0
+Case #67: 0
+Case #68: 0
+Case #69: 0
+Case #70: 0
+Case #71: 0
+Case #72: 0
+Case #73: 0
+Case #74: 0
+Case #75: 0
+Case #76: 0
+Case #77: 0
+Case #78: 0
+Case #79: 0
+Case #80: 0
+Case #81: 0
+Case #82: 0
+Case #83: 0
+Case #84: 0
+Case #85: 0
+Case #86: 0
+Case #87: 0
+Case #88: 0
+Case #89: 0
+Case #90: 0
+Case #91: 0
+Case #92: 0
+Case #93: 0
+Case #94: 0
+Case #95: 0
+Case #96: 0
+Case #97: 0
+Case #98: 0
+Case #99: 0
+Case #100: 0
diff --git a/codejam_2008/src/y2008qual/B-small-practice.in b/codejam_2008/src/y2008qual/B-small-practice.in
new file mode 100644
index 0000000..8509720
--- /dev/null
+++ b/codejam_2008/src/y2008qual/B-small-practice.in
@@ -0,0 +1,416 @@
+20
+0
+1 2
+01:40 01:41
+01:39 01:40
+01:40 01:41
+3
+1 1
+01:40 01:41
+01:44 01:45
+1
+2 2
+12:02 12:03
+12:06 12:09
+12:10 12:12
+12:04 12:07
+5
+4 2
+00:12 00:18
+00:00 00:10
+00:00 00:10
+00:01 00:06
+00:07 00:13
+00:02 00:11
+0
+4 2
+00:11 00:17
+00:13 00:19
+00:05 00:11
+00:01 00:09
+00:13 00:19
+00:06 00:11
+4
+4 5
+20:20 20:35
+20:20 20:44
+20:17 20:33
+20:47 21:03
+20:51 21:15
+20:18 20:39
+20:46 20:57
+20:02 20:30
+20:47 21:10
+4
+7 8
+05:13 05:17
+05:13 05:15
+05:02 05:04
+05:08 05:09
+05:01 05:05
+05:15 05:19
+05:13 05:18
+05:06 05:07
+05:03 05:08
+05:13 05:14
+05:04 05:05
+05:03 05:08
+05:11 05:16
+05:04 05:09
+05:13 05:17
+4
+3 11
+18:09 18:55
+19:40 19:59
+19:56 20:43
+19:42 19:55
+19:42 20:07
+19:55 20:17
+19:27 19:39
+19:03 19:21
+19:51 20:06
+19:17 19:39
+19:26 19:45
+19:57 20:18
+19:22 19:37
+19:35 20:01
+3
+15 9
+13:06 13:20
+13:58 14:17
+13:22 13:35
+13:22 13:38
+12:48 13:07
+13:35 13:48
+12:27 12:43
+13:39 13:49
+12:39 12:52
+12:32 12:50
+13:38 13:54
+12:24 12:35
+13:25 13:35
+12:47 13:06
+13:00 13:15
+14:31 14:44
+14:10 14:28
+11:08 11:20
+11:48 12:08
+12:02 12:22
+11:58 12:09
+12:10 12:22
+11:32 11:42
+11:12 11:31
+5
+19 18
+14:29 15:17
+15:16 17:48
+17:09 19:46
+09:55 13:40
+17:19 20:53
+12:49 13:30
+15:39 19:35
+17:55 19:55
+14:26 18:24
+15:01 16:48
+12:54 15:51
+19:38 22:38
+15:01 15:23
+12:51 16:37
+19:42 22:13
+17:45 21:07
+16:51 17:28
+12:15 12:48
+15:29 15:51
+09:20 13:15
+15:30 19:09
+13:15 13:27
+18:19 20:19
+17:37 21:57
+12:42 16:50
+13:56 14:44
+10:35 12:58
+15:47 18:38
+12:01 15:36
+11:13 14:22
+16:29 21:11
+12:25 16:08
+17:57 21:51
+10:08 14:29
+16:17 19:20
+19:27 23:59
+14:13 16:42
+5
+19 20
+13:06 16:49
+05:49 09:31
+10:00 13:02
+17:21 20:24
+01:22 04:31
+17:10 20:10
+04:51 08:33
+02:09 05:50
+06:57 10:16
+16:31 19:42
+10:57 14:35
+17:07 20:41
+05:38 08:42
+17:15 20:27
+11:05 14:11
+02:53 06:46
+17:31 21:24
+15:01 18:36
+05:53 09:05
+18:51 22:35
+13:00 17:34
+03:26 08:10
+06:32 09:38
+13:15 17:13
+04:06 08:49
+03:10 06:58
+07:30 11:00
+12:51 17:21
+03:33 07:01
+10:50 15:13
+05:50 09:48
+05:48 09:01
+01:43 04:54
+16:34 21:07
+04:02 08:03
+04:33 08:57
+05:22 09:13
+04:41 09:19
+07:15 12:15
+3
+2 3
+18:27 18:31
+19:30 19:52
+18:32 19:20
+19:57 20:54
+21:42 22:10
+0
+6 4
+12:50 13:21
+14:00 14:12
+14:50 15:44
+16:41 17:01
+17:42 17:48
+18:02 18:19
+13:22 13:59
+14:13 14:50
+15:45 16:40
+17:02 17:41
+4
+10 12
+04:54 05:01
+04:37 04:43
+04:51 04:53
+04:45 04:52
+04:38 04:40
+04:44 04:52
+04:51 04:58
+04:56 05:01
+04:15 04:23
+04:37 04:39
+04:28 04:32
+04:46 04:48
+04:55 04:56
+04:34 04:41
+04:57 05:07
+04:30 04:34
+04:42 04:43
+04:55 05:00
+04:48 04:52
+04:24 04:34
+04:41 04:48
+04:59 05:09
+5
+15 2
+09:03 10:04
+11:26 13:16
+04:29 05:38
+06:45 08:25
+10:22 11:23
+13:02 14:24
+07:34 09:18
+10:55 12:08
+13:45 14:47
+08:54 10:23
+11:36 13:32
+08:29 09:53
+11:02 12:58
+14:14 15:14
+12:40 13:58
+07:15 08:55
+10:12 11:19
+3
+4 12
+12:19 12:56
+13:53 14:27
+11:46 12:45
+13:30 14:22
+11:42 12:19
+12:56 13:49
+14:28 15:17
+12:45 13:29
+14:22 14:56
+11:50 12:25
+13:23 14:18
+11:24 11:57
+13:00 13:53
+14:55 15:45
+10:50 11:32
+12:22 13:03
+5
+13 17
+10:31 10:46
+10:43 10:53
+10:30 10:47
+10:32 10:45
+10:18 10:36
+10:58 11:10
+10:50 11:00
+10:27 10:37
+11:00 11:12
+10:15 10:35
+10:19 10:31
+10:53 11:10
+10:24 10:44
+10:53 11:05
+10:18 10:37
+11:00 11:12
+10:49 10:59
+10:56 11:07
+10:48 11:05
+10:51 11:09
+10:02 10:14
+10:40 10:54
+10:21 10:41
+10:02 10:19
+10:43 10:58
+10:44 10:54
+10:34 10:50
+10:57 11:11
+10:04 10:20
+10:52 11:06
+5
+18 19
+14:05 14:25
+14:53 15:06
+15:36 15:56
+16:16 16:31
+17:04 17:15
+17:56 18:14
+18:44 18:54
+19:22 19:34
+19:57 20:08
+20:39 20:57
+21:25 21:40
+07:32 07:46
+08:13 08:26
+08:53 09:13
+09:37 09:57
+10:16 10:27
+10:48 11:06
+11:35 11:54
+14:31 14:50
+15:09 15:29
+15:59 16:13
+16:38 16:54
+17:26 17:46
+18:22 18:38
+18:56 19:16
+19:35 19:55
+20:16 20:32
+21:06 21:17
+21:46 22:01
+07:51 08:09
+08:29 08:47
+09:15 09:26
+09:58 10:16
+10:32 10:47
+11:17 11:28
+11:59 12:18
+12:42 12:52
+2
+20 19
+21:17 21:34
+20:03 20:18
+20:38 20:57
+21:15 21:27
+21:41 21:58
+20:44 20:56
+21:31 21:44
+21:59 22:17
+21:28 21:43
+21:20 21:37
+21:52 22:11
+21:00 21:17
+21:41 22:00
+19:23 19:39
+20:09 20:20
+20:55 21:14
+21:36 21:54
+20:05 20:18
+20:45 21:00
+21:19 21:35
+20:55 21:09
+21:43 21:53
+19:45 20:00
+20:21 20:31
+20:57 21:07
+21:29 21:39
+21:59 22:19
+21:04 21:21
+21:45 21:56
+21:57 22:09
+21:04 21:18
+21:50 22:05
+21:00 21:16
+21:41 21:51
+21:23 21:40
+19:05 19:22
+19:42 20:01
+20:28 20:45
+21:18 21:29
+2
+20 20
+18:22 19:29
+16:27 17:40
+20:03 21:17
+15:49 16:51
+19:15 20:21
+16:11 17:28
+19:55 21:14
+17:32 18:37
+21:13 22:32
+15:10 16:17
+18:34 19:52
+19:26 20:30
+15:23 16:40
+18:40 19:42
+17:28 18:43
+21:24 22:34
+14:21 15:40
+18:19 19:21
+21:49 22:51
+20:24 21:35
+20:18 21:25
+14:47 15:51
+18:07 19:14
+20:32 21:32
+20:16 21:34
+13:47 15:04
+17:44 18:53
+20:41 21:41
+18:12 19:22
+21:36 22:52
+19:28 20:43
+16:41 17:42
+20:50 21:50
+17:39 18:59
+21:30 22:32
+17:06 18:17
+20:35 21:46
+19:17 20:25
+21:11 22:28
+12:40 13:49
diff --git a/codejam_2008/src/y2008qual/B-small-practice.out b/codejam_2008/src/y2008qual/B-small-practice.out
new file mode 100644
index 0000000..a4fe456
--- /dev/null
+++ b/codejam_2008/src/y2008qual/B-small-practice.out
@@ -0,0 +1,20 @@
+Case #1: 0
+Case #2: 0
+Case #3: 0
+Case #4: 0
+Case #5: 0
+Case #6: 0
+Case #7: 0
+Case #8: 0
+Case #9: 0
+Case #10: 0
+Case #11: 0
+Case #12: 0
+Case #13: 0
+Case #14: 0
+Case #15: 0
+Case #16: 0
+Case #17: 0
+Case #18: 0
+Case #19: 0
+Case #20: 0
diff --git a/codejam_2008/src/y2008qual/a.rs b/codejam_2008/src/y2008qual/a.rs
index f89fbe9..f5e203d 100644
--- a/codejam_2008/src/y2008qual/a.rs
+++ b/codejam_2008/src/y2008qual/a.rs
@@ -49,6 +49,8 @@ fn solve(search_engines: &[String], queries: &[String]) -> usize
 
 	while cur_q != queries.len() {
 
+        //given 1 switch, how many queries can we get through by choosing the search engine that occurs the latest in the next
+        //batch of queries
         let s_potential_progress = search_engines.iter().map( |search| {
             let idx = queries[cur_q..queries.len()].iter().position( |q| q == search);
             if let Some(idx) = idx  {
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
new file mode 100644
index 0000000..45dbe84
--- /dev/null
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -0,0 +1,57 @@
+//use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use std::usize;
+
+/*
+Simulation
+Digits
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let t = reader.read_int();
+
+                let (na, nb) = reader.read_tuple_2();
+
+                let read_times = |in_string : String| -> [usize;2] {
+                    [
+                        &in_string[0..2].parse::<usize>().unwrap() * 60 + &in_string[3..5].parse::<usize>().unwrap(),
+                        &in_string[6..8].parse::<usize>().unwrap() * 60 + &in_string[9..11].parse::<usize>().unwrap()
+                        ]};
+
+                let arrivals : Vec<_> = (0..na).map(|_| read_times(reader.read_string()) ).collect();
+                let departures : Vec<_> = (0..nb).map(|_| read_times(reader.read_string()) ).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(t, arrivals.as_slice(), departures.as_slice())
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(turn_around_time: usize, arrivals: &[ [usize;2] ], departures: &[ [usize;2] ]) -> usize
+{
+    debug!("{:?}", arrivals[0]);
+
+    (i < na ? station_a_events : station_b_events).push(TrainEvent.new(startTime, -1))
+		(i < na ? station_b_events : station_a_events).push(TrainEvent.new(add_time(doneTime, turnAroundTime), 1))
+   0
+}
diff --git a/codejam_2008/src/y2008qual/mod.rs b/codejam_2008/src/y2008qual/mod.rs
index c444ec6..2e59ed7 100644
--- a/codejam_2008/src/y2008qual/mod.rs
+++ b/codejam_2008/src/y2008qual/mod.rs
@@ -1 +1,2 @@
-pub mod a;
\ No newline at end of file
+pub mod a;
+pub mod b;
\ No newline at end of file

From 560dd93bab55ef7d8bc1534a8a583835c7ce2ea3 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 13 Feb 2019 10:51:49 +0100
Subject: [PATCH 003/122] b wrong

---
 codejam_2008/src/main.rs                      |   1 -
 .../src/y2008qual/B-large-practice.out        | 200 +++++++++---------
 .../src/y2008qual/B-small-practice.out        |  40 ++--
 codejam_2008/src/y2008qual/a.rs               |  19 +-
 codejam_2008/src/y2008qual/b.rs               |  91 ++++++--
 codejam_2008/src/y2008qual/mod.rs             |   2 +-
 6 files changed, 208 insertions(+), 145 deletions(-)

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 8efccb5..124f063 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -1,7 +1,6 @@
 //#![allow(non_snake_case)]
 mod y2008qual;
 
-
 extern crate codejam;
 
 /*#[macro_use]
diff --git a/codejam_2008/src/y2008qual/B-large-practice.out b/codejam_2008/src/y2008qual/B-large-practice.out
index 66c1e74..602d3c1 100644
--- a/codejam_2008/src/y2008qual/B-large-practice.out
+++ b/codejam_2008/src/y2008qual/B-large-practice.out
@@ -1,100 +1,100 @@
-Case #1: 0
-Case #2: 0
-Case #3: 0
-Case #4: 0
-Case #5: 0
-Case #6: 0
-Case #7: 0
-Case #8: 0
-Case #9: 0
-Case #10: 0
-Case #11: 0
-Case #12: 0
-Case #13: 0
-Case #14: 0
-Case #15: 0
-Case #16: 0
-Case #17: 0
-Case #18: 0
-Case #19: 0
-Case #20: 0
-Case #21: 0
-Case #22: 0
-Case #23: 0
-Case #24: 0
-Case #25: 0
-Case #26: 0
-Case #27: 0
-Case #28: 0
-Case #29: 0
-Case #30: 0
-Case #31: 0
-Case #32: 0
-Case #33: 0
-Case #34: 0
-Case #35: 0
-Case #36: 0
-Case #37: 0
-Case #38: 0
-Case #39: 0
-Case #40: 0
-Case #41: 0
-Case #42: 0
-Case #43: 0
-Case #44: 0
-Case #45: 0
-Case #46: 0
-Case #47: 0
-Case #48: 0
-Case #49: 0
-Case #50: 0
-Case #51: 0
-Case #52: 0
-Case #53: 0
-Case #54: 0
-Case #55: 0
-Case #56: 0
-Case #57: 0
-Case #58: 0
-Case #59: 0
-Case #60: 0
-Case #61: 0
-Case #62: 0
-Case #63: 0
-Case #64: 0
-Case #65: 0
-Case #66: 0
-Case #67: 0
-Case #68: 0
-Case #69: 0
-Case #70: 0
-Case #71: 0
-Case #72: 0
-Case #73: 0
-Case #74: 0
-Case #75: 0
-Case #76: 0
-Case #77: 0
-Case #78: 0
-Case #79: 0
-Case #80: 0
-Case #81: 0
-Case #82: 0
-Case #83: 0
-Case #84: 0
-Case #85: 0
-Case #86: 0
-Case #87: 0
-Case #88: 0
-Case #89: 0
-Case #90: 0
-Case #91: 0
-Case #92: 0
-Case #93: 0
-Case #94: 0
-Case #95: 0
-Case #96: 0
-Case #97: 0
-Case #98: 0
-Case #99: 0
-Case #100: 0
+Case #1: 1 2
+Case #2: 1 0
+Case #3: 3 2
+Case #4: 1 1
+Case #5: 4 1
+Case #6: 2 2
+Case #7: 3 3
+Case #8: 6 6
+Case #9: 2 10
+Case #10: 0 44
+Case #11: 10 35
+Case #12: 8 29
+Case #13: 84 5
+Case #14: 2 11
+Case #15: 22 0
+Case #16: 6 10
+Case #17: 14 0
+Case #18: 0 11
+Case #19: 7 10
+Case #20: 4 2
+Case #21: 4 6
+Case #22: 7 5
+Case #23: 50 50
+Case #24: 40 35
+Case #25: 27 31
+Case #26: 25 26
+Case #27: 16 29
+Case #28: 10 32
+Case #29: 15 20
+Case #30: 10 26
+Case #31: 5 26
+Case #32: 8 26
+Case #33: 8 26
+Case #34: 9 27
+Case #35: 9 28
+Case #36: 6 33
+Case #37: 7 35
+Case #38: 5 35
+Case #39: 4 37
+Case #40: 4 38
+Case #41: 6 41
+Case #42: 4 42
+Case #43: 12 34
+Case #44: 5 42
+Case #45: 9 38
+Case #46: 8 39
+Case #47: 6 43
+Case #48: 6 42
+Case #49: 5 45
+Case #50: 6 46
+Case #51: 4 51
+Case #52: 9 55
+Case #53: 11 56
+Case #54: 7 54
+Case #55: 10 59
+Case #56: 7 62
+Case #57: 9 66
+Case #58: 9 65
+Case #59: 9 74
+Case #60: 13 74
+Case #61: 8 82
+Case #62: 18 78
+Case #63: 50 49
+Case #64: 28 25
+Case #65: 22 17
+Case #66: 23 10
+Case #67: 18 10
+Case #68: 16 9
+Case #69: 17 7
+Case #70: 11 11
+Case #71: 13 6
+Case #72: 13 9
+Case #73: 11 8
+Case #74: 10 9
+Case #75: 11 9
+Case #76: 9 7
+Case #77: 9 10
+Case #78: 9 8
+Case #79: 10 6
+Case #80: 10 5
+Case #81: 9 7
+Case #82: 7 6
+Case #83: 3 1
+Case #84: 2 1
+Case #85: 2 1
+Case #86: 1 2
+Case #87: 2 1
+Case #88: 2 1
+Case #89: 3 2
+Case #90: 3 2
+Case #91: 1 2
+Case #92: 1 2
+Case #93: 2 1
+Case #94: 4 1
+Case #95: 3 1
+Case #96: 1 2
+Case #97: 4 2
+Case #98: 2 2
+Case #99: 2 2
+Case #100: 10 9
diff --git a/codejam_2008/src/y2008qual/B-small-practice.out b/codejam_2008/src/y2008qual/B-small-practice.out
index a4fe456..1551071 100644
--- a/codejam_2008/src/y2008qual/B-small-practice.out
+++ b/codejam_2008/src/y2008qual/B-small-practice.out
@@ -1,20 +1,20 @@
-Case #1: 0
-Case #2: 0
-Case #3: 0
-Case #4: 0
-Case #5: 0
-Case #6: 0
-Case #7: 0
-Case #8: 0
-Case #9: 0
-Case #10: 0
-Case #11: 0
-Case #12: 0
-Case #13: 0
-Case #14: 0
-Case #15: 0
-Case #16: 0
-Case #17: 0
-Case #18: 0
-Case #19: 0
-Case #20: 0
+Case #1: 1 2
+Case #2: 1 0
+Case #3: 2 0
+Case #4: 4 2
+Case #5: 3 1
+Case #6: 3 2
+Case #7: 3 5
+Case #8: 1 10
+Case #9: 8 7
+Case #10: 7 7
+Case #11: 7 11
+Case #12: 1 1
+Case #13: 2 0
+Case #14: 3 6
+Case #15: 13 0
+Case #16: 0 8
+Case #17: 6 8
+Case #18: 2 2
+Case #19: 7 3
+Case #20: 8 4
diff --git a/codejam_2008/src/y2008qual/a.rs b/codejam_2008/src/y2008qual/a.rs
index f5e203d..62b8147 100644
--- a/codejam_2008/src/y2008qual/a.rs
+++ b/codejam_2008/src/y2008qual/a.rs
@@ -18,11 +18,11 @@ pub fn solve_all_cases()
             for case_no in 1..=t {
                 let n = reader.read_int();
 
-                let search_engines : Vec<_> = (0..n).map(|_| reader.read_string()).collect();
+                let search_engines: Vec<_> = (0..n).map(|_| reader.read_string()).collect();
 
                 let q = reader.read_int();
 
-                let queries : Vec<_> = (0..q).map(|_| reader.read_string()).collect();
+                let queries: Vec<_> = (0..q).map(|_| reader.read_string()).collect();
 
                 if case_no != 3 {
                     // continue;
@@ -45,15 +45,16 @@ pub fn solve_all_cases()
 fn solve(search_engines: &[String], queries: &[String]) -> usize
 {
     let mut s_changes = 0;
-	let mut cur_q = 0;
-
-	while cur_q != queries.len() {
+    let mut cur_q = 0;
 
+    while cur_q != queries.len() {
         //given 1 switch, how many queries can we get through by choosing the search engine that occurs the latest in the next
         //batch of queries
-        let s_potential_progress = search_engines.iter().map( |search| {
-            let idx = queries[cur_q..queries.len()].iter().position( |q| q == search);
-            if let Some(idx) = idx  {
+        let s_potential_progress = search_engines.iter().map(|search| {
+            let idx = queries[cur_q..queries.len()]
+                .iter()
+                .position(|q| q == search);
+            if let Some(idx) = idx {
                 idx + cur_q
             } else {
                 queries.len()
@@ -64,7 +65,7 @@ fn solve(search_engines: &[String], queries: &[String]) -> usize
         s_changes += 1;
     }
 
-	if s_changes > 0 {
+    if s_changes > 0 {
         s_changes -= 1;
     }
 
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index 45dbe84..8b7e6f2 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -2,6 +2,8 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
 use std::usize;
+use std::cmp::min;
+use std::cmp::Ordering;
 
 /*
 Simulation
@@ -20,14 +22,18 @@ pub fn solve_all_cases()
 
                 let (na, nb) = reader.read_tuple_2();
 
-                let read_times = |in_string : String| -> [usize;2] {
+                let read_times = |in_string: String| -> [usize; 2] {
                     [
-                        &in_string[0..2].parse::<usize>().unwrap() * 60 + &in_string[3..5].parse::<usize>().unwrap(),
-                        &in_string[6..8].parse::<usize>().unwrap() * 60 + &in_string[9..11].parse::<usize>().unwrap()
-                        ]};
+                        &in_string[0..2].parse::<usize>().unwrap() * 60
+                            + &in_string[3..5].parse::<usize>().unwrap(),
+                        &in_string[6..8].parse::<usize>().unwrap() * 60
+                            + &in_string[9..11].parse::<usize>().unwrap(),
+                    ]
+                };
 
-                let arrivals : Vec<_> = (0..na).map(|_| read_times(reader.read_string()) ).collect();
-                let departures : Vec<_> = (0..nb).map(|_| read_times(reader.read_string()) ).collect();
+                let arrivals: Vec<_> = (0..na).map(|_| read_times(reader.read_string())).collect();
+                let departures: Vec<_> =
+                    (0..nb).map(|_| read_times(reader.read_string())).collect();
 
                 if case_no != 3 {
                     // continue;
@@ -35,11 +41,12 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
+                let ans = solve(t, arrivals.as_slice(), departures.as_slice());
                 writeln!(
                     buffer,
-                    "Case #{}: {}",
-                    case_no,
-                    solve(t, arrivals.as_slice(), departures.as_slice())
+                    "Case #{}: {} {}",
+                    case_no, ans[0], ans[1]
+
                 )
                 .unwrap();
             }
@@ -47,11 +54,67 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(turn_around_time: usize, arrivals: &[ [usize;2] ], departures: &[ [usize;2] ]) -> usize
+#[derive(Eq, PartialEq)]
+struct TrainEvent
+{
+    time: usize,
+    num_train_change: i64,
+}
+impl Ord for TrainEvent {
+    fn cmp(&self, other: &TrainEvent) -> Ordering {
+        self.time.cmp(&other.time).then_with(|| self.num_train_change.cmp(&other.num_train_change))
+    }
+}
+
+impl PartialOrd for TrainEvent {
+    fn partial_cmp(&self, other: &TrainEvent) -> Option<Ordering> {
+        Some(self.cmp(other))
+    }
+}
+
+
+fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
+{
+	station_events.sort();
+
+    let mut trains_min = 0;
+    let mut trains = 0;
+
+	for evt in station_events.iter() {
+        trains += evt.num_train_change;
+        trains_min = min(trains, trains_min)
+    }
+
+	return trains_min.abs()
+}
+
+fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]]) -> [i64;2]
 {
-    debug!("{:?}", arrivals[0]);
+    debug!("{:?}", a_to_b[0]);
+
+    let mut station_a_events = Vec::new();
+    let mut station_b_events = Vec::new();
+
+    for time in a_to_b.iter() {
+        station_a_events.push(TrainEvent {
+            time: time[0],
+            num_train_change: -1,
+        });
+        station_b_events.push(TrainEvent {
+            time: time[1] + turn_around_time,
+            num_train_change: 1,
+        });
+    }
+    for time in b_to_a.iter() {
+        station_b_events.push(TrainEvent {
+            time: time[0],
+            num_train_change: -1,
+        });
+        station_a_events.push(TrainEvent {
+            time: time[1] + turn_around_time,
+            num_train_change: 1,
+        });
+    }
 
-    (i < na ? station_a_events : station_b_events).push(TrainEvent.new(startTime, -1))
-		(i < na ? station_b_events : station_a_events).push(TrainEvent.new(add_time(doneTime, turnAroundTime), 1))
-   0
+    [ find_required_trains(&mut station_a_events) , find_required_trains(&mut station_b_events) ]
 }
diff --git a/codejam_2008/src/y2008qual/mod.rs b/codejam_2008/src/y2008qual/mod.rs
index 2e59ed7..677af14 100644
--- a/codejam_2008/src/y2008qual/mod.rs
+++ b/codejam_2008/src/y2008qual/mod.rs
@@ -1,2 +1,2 @@
 pub mod a;
-pub mod b;
\ No newline at end of file
+pub mod b;

From 0dd56a2d82c18c7312b1d00d5f22913a03545f47 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 13 Feb 2019 11:05:26 +0100
Subject: [PATCH 004/122] b

---
 .../src/y2008qual/B-large-practice.out        | 36 +++++++++----------
 .../src/y2008qual/B-small-practice.out        |  4 +--
 codejam_2008/src/y2008qual/a.rs               |  4 +--
 codejam_2008/src/y2008qual/b.rs               | 15 ++++----
 4 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/codejam_2008/src/y2008qual/B-large-practice.out b/codejam_2008/src/y2008qual/B-large-practice.out
index 602d3c1..fb523e9 100644
--- a/codejam_2008/src/y2008qual/B-large-practice.out
+++ b/codejam_2008/src/y2008qual/B-large-practice.out
@@ -1,22 +1,22 @@
-Case #1: 1 2
+Case #1: 0 2
 Case #2: 1 0
 Case #3: 3 2
 Case #4: 1 1
 Case #5: 4 1
 Case #6: 2 2
 Case #7: 3 3
-Case #8: 6 6
+Case #8: 5 6
 Case #9: 2 10
 Case #10: 0 44
 Case #11: 10 35
 Case #12: 8 29
 Case #13: 84 5
 Case #14: 2 11
-Case #15: 22 0
+Case #15: 21 0
 Case #16: 6 10
 Case #17: 14 0
 Case #18: 0 11
-Case #19: 7 10
+Case #19: 6 10
 Case #20: 4 2
 Case #21: 4 6
 Case #22: 7 5
@@ -26,7 +26,7 @@ Case #25: 27 31
 Case #26: 25 26
 Case #27: 16 29
 Case #28: 10 32
-Case #29: 15 20
+Case #29: 14 20
 Case #30: 10 26
 Case #31: 5 26
 Case #32: 8 26
@@ -56,31 +56,31 @@ Case #55: 10 59
 Case #56: 7 62
 Case #57: 9 66
 Case #58: 9 65
-Case #59: 9 74
+Case #59: 8 74
 Case #60: 13 74
 Case #61: 8 82
-Case #62: 18 78
+Case #62: 17 78
 Case #63: 50 49
-Case #64: 28 25
-Case #65: 22 17
-Case #66: 23 10
-Case #67: 18 10
+Case #64: 26 25
+Case #65: 21 17
+Case #66: 21 10
+Case #67: 17 10
 Case #68: 16 9
-Case #69: 17 7
+Case #69: 16 7
 Case #70: 11 11
-Case #71: 13 6
-Case #72: 13 9
-Case #73: 11 8
-Case #74: 10 9
+Case #71: 12 6
+Case #72: 12 9
+Case #73: 10 8
+Case #74: 9 9
 Case #75: 11 9
 Case #76: 9 7
-Case #77: 9 10
+Case #77: 8 10
 Case #78: 9 8
 Case #79: 10 6
 Case #80: 10 5
 Case #81: 9 7
 Case #82: 7 6
-Case #83: 3 1
+Case #83: 2 1
 Case #84: 2 1
 Case #85: 2 1
 Case #86: 1 2
diff --git a/codejam_2008/src/y2008qual/B-small-practice.out b/codejam_2008/src/y2008qual/B-small-practice.out
index 1551071..b57f277 100644
--- a/codejam_2008/src/y2008qual/B-small-practice.out
+++ b/codejam_2008/src/y2008qual/B-small-practice.out
@@ -1,4 +1,4 @@
-Case #1: 1 2
+Case #1: 0 2
 Case #2: 1 0
 Case #3: 2 0
 Case #4: 4 2
@@ -16,5 +16,5 @@ Case #15: 13 0
 Case #16: 0 8
 Case #17: 6 8
 Case #18: 2 2
-Case #19: 7 3
+Case #19: 6 3
 Case #20: 8 4
diff --git a/codejam_2008/src/y2008qual/a.rs b/codejam_2008/src/y2008qual/a.rs
index 62b8147..d4bdf73 100644
--- a/codejam_2008/src/y2008qual/a.rs
+++ b/codejam_2008/src/y2008qual/a.rs
@@ -4,8 +4,8 @@ use std::io::Write;
 use std::usize;
 
 /*
-Simulation
-Digits
+Greedy
+Induction (proof)
 */
 pub fn solve_all_cases()
 {
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index 8b7e6f2..8b43843 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -6,8 +6,7 @@ use std::cmp::min;
 use std::cmp::Ordering;
 
 /*
-Simulation
-Digits
+
 */
 pub fn solve_all_cases()
 {
@@ -35,7 +34,7 @@ pub fn solve_all_cases()
                 let departures: Vec<_> =
                     (0..nb).map(|_| read_times(reader.read_string())).collect();
 
-                if case_no != 3 {
+                if case_no != 1 {
                     // continue;
                 }
 
@@ -61,8 +60,8 @@ struct TrainEvent
     num_train_change: i64,
 }
 impl Ord for TrainEvent {
-    fn cmp(&self, other: &TrainEvent) -> Ordering {
-        self.time.cmp(&other.time).then_with(|| self.num_train_change.cmp(&other.num_train_change))
+    fn cmp(&self, rhs: &TrainEvent) -> Ordering {
+        self.time.cmp(&rhs.time).then_with(|| rhs.num_train_change.cmp(&self.num_train_change))
     }
 }
 
@@ -75,16 +74,20 @@ impl PartialOrd for TrainEvent {
 
 fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
 {
+    debug!("find_required_trains");
 	station_events.sort();
 
     let mut trains_min = 0;
     let mut trains = 0;
 
 	for evt in station_events.iter() {
+        debug!("Train event at time {}.  Change {}", evt.time, evt.num_train_change);
         trains += evt.num_train_change;
-        trains_min = min(trains, trains_min)
+        trains_min = min(trains, trains_min);
+        debug!("Trains now {}.  min {}", trains, trains_min);
     }
 
+    debug!("Done find_required_trains {} ", trains_min.abs());
 	return trains_min.abs()
 }
 

From 4314cbcc784a0e5d66b25643dafb427e4ef584c5 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 13 Feb 2019 11:46:07 +0100
Subject: [PATCH 005/122] c

---
 codejam_2008/src/main.rs                      |   3 +-
 .../src/y2008qual/C-large-practice.in         | 100 ++++++++++++++++++
 .../src/y2008qual/C-large-practice.out        |  99 +++++++++++++++++
 .../src/y2008qual/C-small-practice.in         |  10 ++
 .../src/y2008qual/C-small-practice.out        |   9 ++
 codejam_2008/src/y2008qual/b.rs               |   3 +-
 codejam_2008/src/y2008qual/c.rs               |  47 ++++++++
 codejam_2008/src/y2008qual/mod.rs             |   1 +
 8 files changed, 270 insertions(+), 2 deletions(-)
 create mode 100644 codejam_2008/src/y2008qual/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008qual/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008qual/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008qual/C-small-practice.out
 create mode 100644 codejam_2008/src/y2008qual/c.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 124f063..935c9b1 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -14,6 +14,7 @@ use codejam::util::log::init_log;
 pub fn run_y2008_round_qual()
 {
     y2008qual::a::solve_all_cases();
+    y2008qual::b::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -40,5 +41,5 @@ fn main()
 {
     init_log();
 
-    y2008qual::b::solve_all_cases();
+    y2008qual::c::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008qual/C-large-practice.in b/codejam_2008/src/y2008qual/C-large-practice.in
new file mode 100644
index 0000000..0da2c94
--- /dev/null
+++ b/codejam_2008/src/y2008qual/C-large-practice.in
@@ -0,0 +1,100 @@
+99
+0.000002 1.000000 0.000001 0.000260 0.002002
+0.000001 1.000000 0.001006 0.000067 0.002002
+0.000118 1.000000 0.000011 0.000506 0.002002
+0.000016 1.000000 0.000321 0.000024 0.002002
+0.000001 1.000000 0.000124 0.000001 0.002002
+0.000211 1.000000 0.001520 0.001856 0.002002
+0.000010 1.000000 0.000073 0.000067 0.002002
+0.000003 1.000000 0.004521 0.000019 0.002002
+0.000001 1.000000 0.000002 0.000002 0.002002
+0.000035 1.000000 0.000135 0.000058 0.002002
+0.000016 1.000000 0.001035 0.000040 0.002002
+0.000001 1.000000 0.000001 0.000094 0.002002
+0.000001 1.000000 0.001169 0.000002 0.002002
+0.000001 1.000000 0.000001 0.000002 0.002002
+0.000001 1.000000 0.000035 0.000001 0.002002
+0.000001 1.000000 0.001245 0.000002 0.002002
+0.000001 1.000000 0.007009 0.000001 0.002002
+0.000110 1.000000 0.000003 0.000406 0.002002
+0.000347 1.000000 0.000042 0.000532 0.002002
+0.000001 1.000000 0.000043 0.000001 0.002002
+0.000024 1.000000 0.000852 0.000243 0.002002
+0.000019 1.000000 0.000001 0.000167 0.002002
+0.000001 1.000000 0.000009 0.000001 0.002002
+0.000348 1.000000 0.000031 0.000838 0.002002
+0.000001 1.000000 0.000119 0.000001 0.002002
+0.000148 1.000000 0.000002 0.000248 0.002002
+0.000001 1.000000 0.004737 0.000002 0.002002
+0.000001 1.000000 0.000082 0.000003 0.002002
+0.000042 1.000000 0.000047 0.000087 0.002002
+0.000003 1.000000 0.001635 0.000005 0.002002
+0.000003 1.000000 0.000004 0.000307 0.002002
+0.000047 1.000000 0.002924 0.000338 0.002002
+0.000002 1.000000 0.000008 0.000024 0.002002
+0.001334 1.000000 0.000001 0.005970 0.002002
+0.000001 1.000000 0.000336 0.000003 0.002002
+0.000059 1.000000 0.000037 0.000208 0.002002
+0.000400 1.000000 0.000133 0.004130 0.002002
+0.000005 1.000000 0.001259 0.000051 0.002002
+0.000001 1.000000 0.001820 0.000002 0.002002
+0.000006 1.000000 0.001967 0.000034 0.002002
+0.000005 1.000000 0.000024 0.000017 0.002002
+0.000012 1.000000 0.000098 0.000077 0.002002
+0.000017 1.000000 0.000088 0.000060 0.002002
+0.000860 1.000000 0.000021 0.003005 0.002002
+0.000001 1.000000 0.000957 0.000029 0.002002
+0.000078 1.000000 0.000012 0.000758 0.002002
+0.000004 1.000000 0.017662 0.000372 0.002002
+0.000004 1.000000 0.001627 0.000067 0.002002
+0.000081 1.000000 0.000178 0.000535 0.002002
+0.000001 1.000000 0.000079 0.000002 0.002002
+0.000002 1.000000 0.000643 0.000003 0.002002
+0.000001 1.000000 0.000047 0.000001 0.002002
+0.000001 1.000000 0.004712 0.000001 0.002002
+0.000017 1.000000 0.000039 0.000106 0.002002
+0.000001 1.000000 0.006796 0.000002 0.002002
+0.000001 1.000000 0.002268 0.000001 0.002002
+0.000001 1.000000 0.001736 0.000001 0.002002
+0.000024 1.000000 0.000075 0.000082 0.002002
+0.000191 1.000000 0.000105 0.000942 0.002002
+0.000001 1.000000 0.001948 0.000003 0.002002
+0.000124 1.000000 0.000006 0.000535 0.002002
+0.000001 1.000000 0.000021 0.000001 0.002002
+0.000002 1.000000 0.000306 0.000021 0.002002
+0.000001 1.000000 0.000070 0.000001 0.002002
+0.000514 1.000000 0.000324 0.018855 0.002002
+0.000561 1.000000 0.000001 0.001041 0.002002
+0.000001 1.000000 0.000506 0.000012 0.002002
+0.000021 1.000000 0.000938 0.000126 0.002002
+0.000001 1.000000 0.000372 0.000026 0.002002
+0.000001 1.000000 0.000005 0.000001 0.002002
+0.000046 1.000000 0.000014 0.000182 0.002002
+0.000015 1.000000 0.000276 0.000075 0.002002
+0.000001 1.000000 0.000035 0.000001 0.002002
+0.000001 1.000000 0.001149 0.000001 0.002002
+0.000051 1.000000 0.000205 0.000279 0.002002
+0.000002 1.000000 0.000154 0.000053 0.002002
+0.000001 1.000000 0.003920 0.000001 0.002002
+0.000023 1.000000 0.000002 0.000037 0.002002
+0.000321 1.000000 0.003886 0.001860 0.002002
+0.000009 1.000000 0.004176 0.000017 0.002002
+0.000007 1.000000 0.002676 0.000008 0.002002
+0.000047 1.000000 0.000866 0.001073 0.002002
+0.000007 1.000000 0.000133 0.000014 0.002002
+0.000024 1.000000 0.000029 0.000724 0.002002
+0.000001 1.000000 0.001422 0.000001 0.002002
+0.000001 1.000000 0.007590 0.000001 0.002002
+0.000013 1.000000 0.000094 0.000030 0.002002
+0.000003 1.000000 0.000058 0.000005 0.002002
+0.000239 1.000000 0.001212 0.000933 0.002002
+0.002273 1.000000 0.000307 0.006931 0.002002
+0.000025 1.000000 0.000028 0.000423 0.002002
+0.000003 1.000000 0.000538 0.000004 0.002002
+0.000049 1.000000 0.000084 0.000397 0.002002
+0.000305 1.000000 0.000015 0.000563 0.002002
+0.000001 1.000000 0.000346 0.000001 0.002002
+0.000438 1.000000 0.000004 0.001385 0.002002
+0.000006 1.000000 0.000561 0.000017 0.002002
+0.000140 1.000000 0.000283 0.000720 0.002002
+0.001074 1.000000 0.000064 0.011198 0.002002
diff --git a/codejam_2008/src/y2008qual/C-large-practice.out b/codejam_2008/src/y2008qual/C-large-practice.out
new file mode 100644
index 0000000..af92979
--- /dev/null
+++ b/codejam_2008/src/y2008qual/C-large-practice.out
@@ -0,0 +1,99 @@
+Case #1: 0
+Case #2: 0
+Case #3: 0
+Case #4: 0
+Case #5: 0
+Case #6: 0
+Case #7: 0
+Case #8: 0
+Case #9: 0
+Case #10: 0
+Case #11: 0
+Case #12: 0
+Case #13: 0
+Case #14: 0
+Case #15: 0
+Case #16: 0
+Case #17: 0
+Case #18: 0
+Case #19: 0
+Case #20: 0
+Case #21: 0
+Case #22: 0
+Case #23: 0
+Case #24: 0
+Case #25: 0
+Case #26: 0
+Case #27: 0
+Case #28: 0
+Case #29: 0
+Case #30: 0
+Case #31: 0
+Case #32: 0
+Case #33: 0
+Case #34: 0
+Case #35: 0
+Case #36: 0
+Case #37: 0
+Case #38: 0
+Case #39: 0
+Case #40: 0
+Case #41: 0
+Case #42: 0
+Case #43: 0
+Case #44: 0
+Case #45: 0
+Case #46: 0
+Case #47: 0
+Case #48: 0
+Case #49: 0
+Case #50: 0
+Case #51: 0
+Case #52: 0
+Case #53: 0
+Case #54: 0
+Case #55: 0
+Case #56: 0
+Case #57: 0
+Case #58: 0
+Case #59: 0
+Case #60: 0
+Case #61: 0
+Case #62: 0
+Case #63: 0
+Case #64: 0
+Case #65: 0
+Case #66: 0
+Case #67: 0
+Case #68: 0
+Case #69: 0
+Case #70: 0
+Case #71: 0
+Case #72: 0
+Case #73: 0
+Case #74: 0
+Case #75: 0
+Case #76: 0
+Case #77: 0
+Case #78: 0
+Case #79: 0
+Case #80: 0
+Case #81: 0
+Case #82: 0
+Case #83: 0
+Case #84: 0
+Case #85: 0
+Case #86: 0
+Case #87: 0
+Case #88: 0
+Case #89: 0
+Case #90: 0
+Case #91: 0
+Case #92: 0
+Case #93: 0
+Case #94: 0
+Case #95: 0
+Case #96: 0
+Case #97: 0
+Case #98: 0
+Case #99: 0
diff --git a/codejam_2008/src/y2008qual/C-small-practice.in b/codejam_2008/src/y2008qual/C-small-practice.in
new file mode 100644
index 0000000..3926a81
--- /dev/null
+++ b/codejam_2008/src/y2008qual/C-small-practice.in
@@ -0,0 +1,10 @@
+9
+0.000002 1.000000 0.000001 0.000260 0.068965
+0.000001 1.000000 0.001006 0.000067 0.068965
+0.000118 1.000000 0.000011 0.000506 0.068965
+0.000016 1.000000 0.000321 0.000024 0.068965
+0.000001 1.000000 0.000124 0.000001 0.068965
+0.000211 1.000000 0.001520 0.001856 0.068965
+0.000010 1.000000 0.000073 0.000067 0.068965
+0.000003 1.000000 0.004521 0.000019 0.068965
+0.000001 1.000000 0.000002 0.000002 0.068965
diff --git a/codejam_2008/src/y2008qual/C-small-practice.out b/codejam_2008/src/y2008qual/C-small-practice.out
new file mode 100644
index 0000000..7b59bf3
--- /dev/null
+++ b/codejam_2008/src/y2008qual/C-small-practice.out
@@ -0,0 +1,9 @@
+Case #1: 0
+Case #2: 0
+Case #3: 0
+Case #4: 0
+Case #5: 0
+Case #6: 0
+Case #7: 0
+Case #8: 0
+Case #9: 0
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index 8b43843..475bc4b 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -6,7 +6,7 @@ use std::cmp::min;
 use std::cmp::Ordering;
 
 /*
-
+Scan line
 */
 pub fn solve_all_cases()
 {
@@ -77,6 +77,7 @@ fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
     debug!("find_required_trains");
 	station_events.sort();
 
+    //so as trains arrive (+1) they cannot affect the minimum
     let mut trains_min = 0;
     let mut trains = 0;
 
diff --git a/codejam_2008/src/y2008qual/c.rs b/codejam_2008/src/y2008qual/c.rs
new file mode 100644
index 0000000..da63a03
--- /dev/null
+++ b/codejam_2008/src/y2008qual/c.rs
@@ -0,0 +1,47 @@
+//use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use std::usize;
+use std::cmp::min;
+use std::cmp::Ordering;
+
+/*
+
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+
+                let floats = reader.read_num_line();
+
+
+
+                if case_no != 1 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                let ans = solve(floats[0], floats[1], floats[2], floats[3], floats[4]);
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no, ans
+
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(fly_radius: f64, racket_radius : f64, t: f64, chord_radius: f64, gap_len:f64) -> f64
+{
+   0f64
+}
diff --git a/codejam_2008/src/y2008qual/mod.rs b/codejam_2008/src/y2008qual/mod.rs
index 677af14..4f053df 100644
--- a/codejam_2008/src/y2008qual/mod.rs
+++ b/codejam_2008/src/y2008qual/mod.rs
@@ -1,2 +1,3 @@
 pub mod a;
 pub mod b;
+pub mod c;

From 322000c586dd302c9854fa92a3525a4039ba8fb4 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 13 Feb 2019 12:12:17 +0100
Subject: [PATCH 006/122] c

---
 .../src/y2008qual/C-large-practice.out        | 198 +++++++++---------
 .../src/y2008qual/C-small-practice.out        |  18 +-
 codejam_2008/src/y2008qual/c.rs               | 136 +++++++++++-
 3 files changed, 239 insertions(+), 113 deletions(-)

diff --git a/codejam_2008/src/y2008qual/C-large-practice.out b/codejam_2008/src/y2008qual/C-large-practice.out
index af92979..c4aaea3 100644
--- a/codejam_2008/src/y2008qual/C-large-practice.out
+++ b/codejam_2008/src/y2008qual/C-large-practice.out
@@ -1,99 +1,99 @@
-Case #1: 0
-Case #2: 0
-Case #3: 0
-Case #4: 0
-Case #5: 0
-Case #6: 0
-Case #7: 0
-Case #8: 0
-Case #9: 0
-Case #10: 0
-Case #11: 0
-Case #12: 0
-Case #13: 0
-Case #14: 0
-Case #15: 0
-Case #16: 0
-Case #17: 0
-Case #18: 0
-Case #19: 0
-Case #20: 0
-Case #21: 0
-Case #22: 0
-Case #23: 0
-Case #24: 0
-Case #25: 0
-Case #26: 0
-Case #27: 0
-Case #28: 0
-Case #29: 0
-Case #30: 0
-Case #31: 0
-Case #32: 0
-Case #33: 0
-Case #34: 0
-Case #35: 0
-Case #36: 0
-Case #37: 0
-Case #38: 0
-Case #39: 0
-Case #40: 0
-Case #41: 0
-Case #42: 0
-Case #43: 0
-Case #44: 0
-Case #45: 0
-Case #46: 0
-Case #47: 0
-Case #48: 0
-Case #49: 0
-Case #50: 0
-Case #51: 0
-Case #52: 0
-Case #53: 0
-Case #54: 0
-Case #55: 0
-Case #56: 0
-Case #57: 0
-Case #58: 0
-Case #59: 0
-Case #60: 0
-Case #61: 0
-Case #62: 0
-Case #63: 0
-Case #64: 0
-Case #65: 0
-Case #66: 0
-Case #67: 0
-Case #68: 0
-Case #69: 0
-Case #70: 0
-Case #71: 0
-Case #72: 0
-Case #73: 0
-Case #74: 0
-Case #75: 0
-Case #76: 0
-Case #77: 0
-Case #78: 0
-Case #79: 0
-Case #80: 0
-Case #81: 0
-Case #82: 0
-Case #83: 0
-Case #84: 0
-Case #85: 0
-Case #86: 0
-Case #87: 0
-Case #88: 0
-Case #89: 0
-Case #90: 0
-Case #91: 0
-Case #92: 0
-Case #93: 0
-Case #94: 0
-Case #95: 0
-Case #96: 0
-Case #97: 0
-Case #98: 0
-Case #99: 0
+Case #1: 0.37238293458068916
+Case #2: 0.12505139696601242
+Case #3: 0.6567646367761009
+Case #4: 0.07714824048519864
+Case #5: 0.004236913305580736
+Case #6: 0.9237959428720074
+Case #7: 0.13914096762391903
+Case #8: 0.05131300629118174
+Case #9: 0.0059791299877681725
+Case #10: 0.1682078121347106
+Case #11: 0.1065746355214755
+Case #12: 0.16599305621598692
+Case #13: 0.008297622591867615
+Case #14: 0.005977141776806527
+Case #15: 0.004059617194311582
+Case #16: 0.008448556358580217
+Case #17: 0.017903214040936866
+Case #18: 0.5990767614416277
+Case #19: 0.818136717769955
+Case #20: 0.0040755545541428795
+Case #21: 0.3842798015010731
+Case #22: 0.29316038958478907
+Case #23: 0.004007819711256189
+Case #24: 0.8739972695170134
+Case #25: 0.004226953334665717
+Case #26: 0.5337338321345091
+Case #27: 0.015370249457046237
+Case #28: 0.008116690664562998
+Case #29: 0.22321503383811503
+Case #30: 0.019063005550127854
+Case #31: 0.4178518667840089
+Case #32: 0.49540174895528377
+Case #33: 0.05010667534701607
+Case #34: 1
+Case #35: 0.008620653651578825
+Case #36: 0.3930373442069094
+Case #37: 0.9863030083098685
+Case #38: 0.10589440402889294
+Case #39: 0.009590082624739038
+Case #40: 0.07944506837652654
+Case #41: 0.042810910371991806
+Case #42: 0.1584881837768971
+Case #43: 0.14006177230906214
+Case #44: 0.9987629860913589
+Case #45: 0.05920747596786935
+Case #46: 0.7247204426559812
+Case #47: 0.49117518475918265
+Case #48: 0.13138154511936495
+Case #49: 0.6414424120714208
+Case #50: 0.0061322137628828655
+Case #51: 0.011212107576080932
+Case #52: 0.00408352319615346
+Case #53: 0.013354318798716625
+Case #54: 0.2099653992804983
+Case #55: 0.019440027748145683
+Case #56: 0.008502730029171568
+Case #57: 0.007445207966261247
+Case #58: 0.18633436549015847
+Case #59: 0.8263286722705662
+Case #60: 0.0118154336541052
+Case #61: 0.6740916965447386
+Case #62: 0.004031726484059361
+Case #63: 0.045091956310448156
+Case #64: 0.004129342216188103
+Case #65: 0.999398469884426
+Case #66: 0.9536214672839438
+Case #67: 0.026489919161618802
+Case #68: 0.24531005124369398
+Case #69: 0.05259623512510625
+Case #70: 0.003999850772898661
+Case #71: 0.3483951502070588
+Case #72: 0.1607804488005421
+Case #73: 0.004059617194311582
+Case #74: 0.006277593187939745
+Case #75: 0.4494422997002183
+Case #76: 0.10192326581567801
+Case #77: 0.011783426347820147
+Case #78: 0.11230979537299113
+Case #79: 0.9439782830331052
+Case #80: 0.0583598250058357
+Case #81: 0.034712472425804775
+Case #82: 0.7887888438147699
+Case #83: 0.04122008351365203
+Case #84: 0.6792412604970204
+Case #85: 0.006820725096625457
+Case #86: 0.019052146064274633
+Case #87: 0.08186915290477226
+Case #88: 0.015960888488117386
+Case #89: 0.8452158918416466
+Case #90: 1
+Case #91: 0.5302842486060637
+Case #92: 0.014948725878057068
+Case #93: 0.5364033141737625
+Case #94: 0.8020960399174493
+Case #95: 0.004679084340710737
+Case #96: 0.9443795535820481
+Case #97: 0.04575829879414006
+Case #98: 0.7499369147025754
+Case #99: 1
diff --git a/codejam_2008/src/y2008qual/C-small-practice.out b/codejam_2008/src/y2008qual/C-small-practice.out
index 7b59bf3..740a8d4 100644
--- a/codejam_2008/src/y2008qual/C-small-practice.out
+++ b/codejam_2008/src/y2008qual/C-small-practice.out
@@ -1,9 +1,9 @@
-Case #1: 0
-Case #2: 0
-Case #3: 0
-Case #4: 0
-Case #5: 0
-Case #6: 0
-Case #7: 0
-Case #8: 0
-Case #9: 0
+Case #1: 0.015073667027034388
+Case #2: 0.005946850091020028
+Case #3: 0.035710776813868694
+Case #4: 0.0029942911338424194
+Case #5: 0.0003661811852258001
+Case #6: 0.11344276414292132
+Case #7: 0.00462766015298266
+Case #8: 0.010294221775637769
+Case #9: 0.00018032778608612077
diff --git a/codejam_2008/src/y2008qual/c.rs b/codejam_2008/src/y2008qual/c.rs
index da63a03..cab4a49 100644
--- a/codejam_2008/src/y2008qual/c.rs
+++ b/codejam_2008/src/y2008qual/c.rs
@@ -1,9 +1,6 @@
-//use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
 use std::io::Write;
-use std::usize;
-use std::cmp::min;
-use std::cmp::Ordering;
+use std::f64::consts::PI;
 
 /*
 
@@ -41,7 +38,136 @@ pub fn solve_all_cases()
     );
 }
 
+fn circle(x:f64, r:f64) -> f64 {
+    (r.powi(2) - x.powi(2)).sqrt()
+}
+
+fn integral_circle(x:f64, r: f64) -> f64 {
+	let y = circle(x, r);
+	(	x * y + ( x / y ).atan() * r.powi(2) ) / 2.
+}
+
 fn solve(fly_radius: f64, racket_radius : f64, t: f64, chord_radius: f64, gap_len:f64) -> f64
 {
-   0f64
+    /*
+    dbg!( fly_radius );
+	dbg!( racket_radius);
+	dbg!( t) ; //Racket outer circle radius
+	dbg!( chord_radius);
+	dbg!( gap_len);
+	*/
+
+	if gap_len < 2. * fly_radius {
+        return 1f64;
+    }
+	if fly_radius > racket_radius - t {
+        return 1f64;
+    }
+
+    let total_area = PI * racket_radius.powi(2);
+    let mut miss_area = 0f64;
+
+    //Go through squares with x1 < x2 ; y1 < y2
+    //These squares are where the fly can get through
+
+    //To go from x1 to x2 or y1 to y2
+    let next_position2_inc = gap_len - 2. * fly_radius;
+
+    //To go from x2 to x1' or y2 to y1'
+    let next_position1_inc = 2. * chord_radius + 2. * fly_radius;
+
+    //The first x1 and y1
+    let first_position = chord_radius + fly_radius;
+
+    //The lenght of a full square + chords
+    let square_length = next_position1_inc + next_position2_inc;
+
+    //The actual radius we generally care about
+    let inner_radius = racket_radius - t - fly_radius;
+
+    //dbg!(inner_radius);
+
+    //Go up chord + fly, when do wo intersect
+    let x_stop = circle(chord_radius + fly_radius, inner_radius);
+
+    //dbg!(x_stop);
+
+    let mut x1 = first_position;
+
+    //dbg!(x1);
+
+    let num_cols = ( (x_stop-x1) / square_length).ceil() as u64;
+
+    //Are that a fly can get through
+    let regular_square_area = next_position2_inc * next_position2_inc;
+
+    assert!(x1 <= x_stop);
+
+    for col in 0..num_cols
+    {
+        let mut x2 = x1 + next_position2_inc;
+        if col == num_cols - 1 && x_stop < x2 {
+            x2 = x_stop
+        }
+
+        let mut y1 = first_position;
+        let y_stop = circle(x1, inner_radius );
+
+        let y_arc_intersection = circle(x2, inner_radius);
+
+        let num_squares = ( (y_stop-y1) / square_length).ceil() as u64;
+
+        //The real time saver.  We need to know the first y2 that is < y_arc_intersection
+        //
+        // y2_0 + square_length * lowest_arc_intersection_square_num < y_arc_intersection
+        // square_length * lowest_arc_intersection_square_num < y_arc_intersection - y2_0
+        // lowest_arc_intersection_square_num > (y_arc_intersection - y2_0) / square_length (dividing switches comparison)
+        // lowest_arc_intersection_square_num == ceil ( ... )
+        let lowest_arc_intersection_square_num = ( ( (y_arc_intersection - (y1 + next_position2_inc) ) / square_length).ceil() ) as u64;
+
+        //Catch up y1
+        y1 += lowest_arc_intersection_square_num as f64 * square_length ;
+
+        //Init missed area with all the regular squares
+        let mut slice_miss_area = (lowest_arc_intersection_square_num as f64) * regular_square_area;
+
+        for square_num in lowest_arc_intersection_square_num..num_squares
+        {
+            let mut y2 = y1 + next_position2_inc;
+            if square_num == num_squares - 1 && y_stop < y2 {
+                y2 = y_stop;
+            }
+            debug!( "  y1:[{}] y2:[{}]", y1, y2);
+
+            //This means an arc is going through the square
+            let mut x1_arc_intersection = circle(y2, inner_radius);
+            let mut x2_arc_intersection = circle(y1, inner_radius);
+
+            debug!( "  X1 arc {} x2 arc {}", x1_arc_intersection, x2_arc_intersection);
+
+            //take care of the curve
+            x1_arc_intersection = if x1 > x1_arc_intersection { x1 } else { x1_arc_intersection };
+            x2_arc_intersection = if x2 < x2_arc_intersection { x2 } else { x2_arc_intersection };
+
+            slice_miss_area +=  (y2-y1) * (x2_arc_intersection-x1) ;
+
+            let area_under_curve = integral_circle(x2_arc_intersection, inner_radius) - integral_circle(x1_arc_intersection, inner_radius);
+            let rect_area = y2 * (x2_arc_intersection - x1_arc_intersection);
+            let arc_area = rect_area - area_under_curve;
+
+            //Subtract what the curve cut off
+            slice_miss_area -= arc_area;
+
+            y1 = y2 + next_position1_inc;
+
+            //debug!( "  Slice Miss area: {} total area: {}", slice_miss_area,slice_total_area);
+        }
+
+        miss_area += slice_miss_area;
+        x1 = x2 + next_position1_inc;
+    }
+
+    miss_area *= 4.;
+
+    1. - miss_area / total_area
 }

From 73807400698c01348b030a86e8c34f0e328a3d85 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 13 Feb 2019 12:15:14 +0100
Subject: [PATCH 007/122] c

---
 codejam_2008/src/y2008qual/c.rs | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/codejam_2008/src/y2008qual/c.rs b/codejam_2008/src/y2008qual/c.rs
index cab4a49..412b7e3 100644
--- a/codejam_2008/src/y2008qual/c.rs
+++ b/codejam_2008/src/y2008qual/c.rs
@@ -3,7 +3,8 @@ use std::io::Write;
 use std::f64::consts::PI;
 
 /*
-
+Circle / slice area
+Direct Geometry area calculations
 */
 pub fn solve_all_cases()
 {
@@ -17,12 +18,6 @@ pub fn solve_all_cases()
 
                 let floats = reader.read_num_line();
 
-
-
-                if case_no != 1 {
-                    // continue;
-                }
-
                 println!("Solving case {}", case_no);
 
                 let ans = solve(floats[0], floats[1], floats[2], floats[3], floats[4]);
@@ -30,7 +25,6 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no, ans
-
                 )
                 .unwrap();
             }
@@ -146,8 +140,8 @@ fn solve(fly_radius: f64, racket_radius : f64, t: f64, chord_radius: f64, gap_le
             debug!( "  X1 arc {} x2 arc {}", x1_arc_intersection, x2_arc_intersection);
 
             //take care of the curve
-            x1_arc_intersection = if x1 > x1_arc_intersection { x1 } else { x1_arc_intersection };
-            x2_arc_intersection = if x2 < x2_arc_intersection { x2 } else { x2_arc_intersection };
+             if x1 > x1_arc_intersection { x1_arc_intersection=x1 }
+             if x2 < x2_arc_intersection { x2_arc_intersection =x2 }
 
             slice_miss_area +=  (y2-y1) * (x2_arc_intersection-x1) ;
 

From 028fc3d79c9f27c157388b3c997d6994804a765c Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 15 Feb 2019 10:02:58 +0100
Subject: [PATCH 008/122] a

---
 codejam_2008/src/main.rs              | 10 +++-
 codejam_2008/src/y2008practice/a.rs   | 70 +++++++++++++++++++++++++++
 codejam_2008/src/y2008practice/mod.rs |  3 ++
 3 files changed, 82 insertions(+), 1 deletion(-)
 create mode 100644 codejam_2008/src/y2008practice/a.rs
 create mode 100644 codejam_2008/src/y2008practice/mod.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 935c9b1..1e5ac0a 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -1,5 +1,6 @@
 //#![allow(non_snake_case)]
 mod y2008qual;
+mod y2008practice;
 
 extern crate codejam;
 
@@ -15,6 +16,12 @@ pub fn run_y2008_round_qual()
 {
     y2008qual::a::solve_all_cases();
     y2008qual::b::solve_all_cases();
+    y2008qual::c::solve_all_cases();
+}
+
+pub fn run_y2008_round_practice()
+{
+    //https://code.google.com/codejam/contest/32003/dashboard
 }
 
 pub fn run_y2008_round_1a()
@@ -41,5 +48,6 @@ fn main()
 {
     init_log();
 
-    y2008qual::c::solve_all_cases();
+
+    y2008practice::a::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008practice/a.rs b/codejam_2008/src/y2008practice/a.rs
new file mode 100644
index 0000000..b27acf4
--- /dev/null
+++ b/codejam_2008/src/y2008practice/a.rs
@@ -0,0 +1,70 @@
+//use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use itertools::Itertools;
+
+/*
+Change of base
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008practice",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let in_s = reader.read_string_line();
+
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(&in_s[0], &in_s[1], &in_s[2])
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(alien_number: &String, source_lang: &String, target_lang: &String) -> String
+{
+    let source_base = source_lang.len();
+    let target_base = target_lang.len();
+
+    let mut al_converted = 0;
+
+    //#First convert alienNumber
+    for (i, digit) in alien_number.chars().enumerate() {
+        debug!("Digit is {}", digit);
+        let digit_value = source_lang.chars().position(|ch| ch == digit).unwrap();
+        debug!("Digit Value {}", digit_value);
+        al_converted = al_converted + digit_value * source_base.pow( (alien_number.len() - i - 1) as u32);
+    }
+
+
+
+    debug!("Alien # converted is {}",  al_converted);
+
+    let mut tl_converted = Vec::new();
+  while al_converted > 0
+      {
+          let digit = al_converted % target_base;
+          debug!( "tlDigit {}", digit);
+          tl_converted.push( target_lang.chars().skip(digit).take(1).next().unwrap() );
+          al_converted = al_converted / target_base
+      }
+
+      tl_converted.reverse();
+
+    tl_converted.iter().join("")
+}
diff --git a/codejam_2008/src/y2008practice/mod.rs b/codejam_2008/src/y2008practice/mod.rs
new file mode 100644
index 0000000..d500f3c
--- /dev/null
+++ b/codejam_2008/src/y2008practice/mod.rs
@@ -0,0 +1,3 @@
+pub mod a;
+//pub mod b;
+//pub mod c;

From 79c7bb44a70fa0d1eead0d3710aff46ecf30fabd Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 15 Feb 2019 10:06:28 +0100
Subject: [PATCH 009/122] a

---
 .../src/y2008practice/A-large-practice.in     | 101 +++
 .../src/y2008practice/A-large-practice.out    | 100 +++
 .../src/y2008practice/A-small-practice.in     | 101 +++
 .../src/y2008practice/A-small-practice.out    | 100 +++
 .../src/y2008practice/B-large-practice.in     |  21 +
 .../src/y2008practice/B-small-practice.in     | 101 +++
 .../src/y2008practice/C-large-practice.in     | 101 +++
 .../src/y2008practice/C-small-practice.in     | 101 +++
 .../src/y2008practice/D-large-practice.in     | 625 ++++++++++++++
 .../src/y2008practice/D-small-practice.in     | 772 ++++++++++++++++++
 codejam_2008/src/y2008practice/mod.rs         |   5 +-
 11 files changed, 2126 insertions(+), 2 deletions(-)
 create mode 100644 codejam_2008/src/y2008practice/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008practice/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008practice/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008practice/A-small-practice.out
 create mode 100644 codejam_2008/src/y2008practice/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008practice/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008practice/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008practice/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008practice/D-large-practice.in
 create mode 100644 codejam_2008/src/y2008practice/D-small-practice.in

diff --git a/codejam_2008/src/y2008practice/A-large-practice.in b/codejam_2008/src/y2008practice/A-large-practice.in
new file mode 100644
index 0000000..a3b2843
--- /dev/null
+++ b/codejam_2008/src/y2008practice/A-large-practice.in
@@ -0,0 +1,101 @@
+100
+9 0123456789 oF8
+Foo oF8 0123456789
+13 0123456789abcdef 01
+CODE O!CDE? A?JM!.
+eEEeeeEEeeeEeE...E E.e !0TtKXJ]hZi_|Q8sg[>~DNAnWx$Gf%,k"2L&ydYB
+<-"i4g m<zqSI#F2]$`"9+~4>kQxoGV{?T;7yvR_l3B-ti/ag6.%ews[8 u%v
+FgPsQn 2&K4d=s'pFgqQoNX-0):\k6H,}n_fP ^l{snH}R4e5EPVG`[!<C/tUQfLA-p:$?r+8zcZhX20K#Mq|D@'=J7.aj(O~&3TxwmIdbg_o
+,?uy77y,~ 7,8ey(cU~u5? 9jHE
+oyboyPo>B j>yBPt1bo 9Ds5<-+vuY%2fPm~3`,rx/8)RAGWK\@M;lpBc$Fg!70[_?6*thE|wU4q"}1=yVO:{&NzoI']Xnd.aQCj>e#Tk
+0P2i^ xV1cO.'kA0u&~X>PF=lKs#/(Nr"`,2H?Mm@3Z}YJy+a5G\-*|bh$if)9Qe^<UInvDz6TwtqoR8; $&>8:4mbEy!\<udQ^2r"TBYoIS-qaG~D7*U_.
+mnaan#mm#$n $amn#Ed Gge5/9YJQ-O3Sl${k;&uo(+[DRr62NdA])8<|@M
+_,~,qqg6__6 6~_gyq, <lDzb(yiQV`XY
+Y:|atat:|YY t|:YPa] lE6Xd8#gck]h
+]]{]]]{{{]{{]{]{]{]{]]] {] wMkbYcG
+M6>X00m -6Mt"ULTm$X}eF3_0]4&bgsBD> vw23M}.0|C+=
+Eg$qE/E4s gqEbos&*$/4 P\ux!l60DsJ&^t4CK
+id.#A;i;i siA1n&d;.|'# BMzVvq;8%~ylA.Lc+$)QJ`ak
+^^__mB0m r_'^cBm9AMF#$0 Hh-$5;lv+aBVeSI_pq?Z\z
+Ur}^rUnr}}U} rU$n^} Yk6z7RvC\mx~Zu:ft`gq049/8KlW!cHUI<JAo%|n^S*iayXMp,O[F.+51#ET2'}_-Ne
+Q5wc;w 24cAQ^-bXEf:VJF8{)MG53kUpowv*<|!;Blm}W+6\ysR ?K5/A\LblDck#]h973BdO<v|
+ZPuZ|hh'P| u'Z|=Pbh :].7Ju#5H+3^B)&0{b,TZ
+Sn!^M- &SX}+AUt/~aLel<nx5{Pg-1@(8E3K^vWBCbMyHIFj4!z 0p|cJAID\OR]m!H}P,7=lSr_w+2C>&VG4'NhvU/FKq%Eje#M"
+QQn+^in.^n .inQ^+ XWqKIds$i9b)[4Tk'_-h1cHm2nY
+:]Okkk:OOkH]k OkH:] eY
+``OZ>O`{ZM Z[M{j`O> e3@y&\6iYo7%LV)Zm
+3a7LoOT,O _3LTO,7joaS6 EsU]jh~Vi%HamY
+@{{99{0M@M{9{ 0{@9M f3:9I&0eQ>JSP-?*Ht_L2CYuEMB]U<+)
+gFIE" og@,D)x2]WaAI*N'`MV-^Tju<3F\O|~+{r[7h1kc9H(R_t/6QzElfdYp}50mv8XB?L=in;"wJ LlA
+f5+Ck;j :5fKC!k;tV@[`jEz*+ 7d_s&gk2-"GDB<o4P(jh'!ISfm@6nv?u|3F;c[,8
+#L*LSZ 6[c7MpNY9*x?"#XSF`'DEbZ8aLn!hK;lt saI;!,7V6zt{%eo^&L
+1RPSPbppP1R pR1PbS^ 9K%2\)jE+Z8R0L
+f\(G45x;f xa5f\4@(;HG x]Pm3g>D"+\K}'zXh0uB=
+>FeR>FVRVZ ZeFR>V \}L0teW,]-JG6w4ChKf7Qc{U:(qXD*p#8
+4;;4ee;444;;eee4;;e ;e4 ]/x\E*BJ
+#lFDrS V#v@)ZE$zSjmt^:X+3lr9*\yF.Y&!1cALNWD<b/%,TQKJ4|_H ]&;pr7NI\uaLzFRDy
+!%MMg<:O i\U2!OpgM<:% ;J}9<(IR^8E|5jvLxWybl*N1?[gDF\ai0k).HB#Mp/-'O
+1};F}{U Y1A!{N;CX@}+d[P/>.H(&Fs"]zU^ yi[8=VsR.%?"ona)Uk{^rl`93S10H2vZ*_hJE:6(}O]~|q+xw/5M!IL'-#BtQFWjYe<XNguf\d&DbpT7PzC
+4[["44""""444"[4"[[ ["4 .eTuq`w%ObZ&r)N6DSoM5J-B^QL"Wi@s~dm${c2vfhX4Uln}+I=*;gxpVz>t3P'KY8CH_
+_='G/O CP<heO}./N_G=+IWK'E2g~qAon '1}e!uiNZ/qQ80Oav&A[doW)XntjU5(bY|:P3Elw+#^p2<4.=yxz9~s\KG
+*l3kWfff F?*WD5q3k^l]f/). ynO~\WolSV`.cJMZtsX}=/KwYA:u@-624{_E
+dxOrk) Nkvjcz4Ixn8eM1PC)FQdh0qifOr muFs{qia~!x.^%VI_'K$9T
+n\ZR0\ Y!@R2k\n`+vZqNF{K=0O|7LGh*&'1>sl/ owWxPfa(s
+]\]T46\a 6]TfF!4eap=\*d9 )UNjF+&{qev9~X|
+:$=G1b o#G/:_r%$C6Tbz=!4M?-@Iv"~m1VX[fFE.Y)x<`B ,q*Lsk
+ts&s4g= =t`Oy@]Hpd&$41jJ7sl8EreZg;0<} 7W]"59})wd(!~:OR;
+WWUUUUWUUUWWUWWUUWUUWWUUUWUWUW UW zRXb_Cmx+OpKow(i"jS98
+G;wB}n ]09jG*<s-/PxntXQ^S23+VO4Ly;[WMNZRBCpJhcgw.}{8: *?e>p70HN_oBvd"9<zaM:@-`ZK2cVD)^[APyFT
+W#vWWv#WWvWv##v# #vW G}7+|0Bx
+oX??{~X ?A$`o{i<;X]guF_2tslr7[~ $-@WVZu%tbv
+)yOMa g]SO#Ap[_%=/T}r6Y>l'R";(07`|&J$avX3^.yMxH)ow*<Nf{IVGzU4cm1b~K5L+ qRZkfpS',_xz-*.Jv
+|:|,_]BB ]:3B6l|_, Hp5y!~*lWkUEs"o}xu02&dr{T^nz%
+=##5#55#5=#==#55## #=5 P$OY`0wzDBLa8_K;Nq*x9S&?v1\ZX%y}{7(W/Q"6c[t@Ghid+,sb5RfT]'Ck=
+V59zrVVV"9R z5VrR9" 1l]/U.[
+bP4hQ OWQ/bgNY%36AKHm4+hejF$y-1n;*o<iEvV"ZU`PJ|0f ojXE&
+Cf2Gx4 :KQzPCk~G4^fU;1"$xA&'2eu% *2^5
+IO0,U_+ mIFOi_h'e&0G<JXytpR;o9Un,g+s cd6MviB~]D|9@Z
+"[$}}$c$"} 0[$lgc}" }`RLi81,-u@Px_6#7^)\'If.[0*Sag3$?<
+5clA] Tc9|>.1&@]i"t3yAmD4ZlsR5uH0jhJqXoF l"syIFB+=?D3
+:rqz1r- AB)1RcXWo?hObzr:q- )U7Cg=5Ispj(^Ga
+6o5zFY65 ox5sz4]6@YF B@N
+,Kc`f: b,~=Nl$kd<PD!a?#}:e6{%Ytw-Sy"JcpvXf7>gqF^ZV)CBK]`4o 9B^["K$V'i}Lsbp#-
+'VCSVo?SVCC V'?CSo 7e?B6UQ;w>"oTX~J(:%iE^m!02&Aj@Wz_u[{4}#LyKRv1*dh9gq'
+{j)6):3^) :a{j^c)9643 2HG]
+z[-G:OOt[ t:OFG-z[ k'
+3<()@Cm <H23F+8u]R(Sm';Tkg}CX@)1 5)40zFERs`c&Qr
+P/So{^{ '\PlW$^_"KLohu{H@/SQ% 9>$lRvJ]51i~8GXkwAedh\6M,;V!3
+N1:!-r= mNTh%;5+1[ad:r-O79{)=6!v]VC(#u d3en!A0&v}J96qXP\L@cU[u
+ulul1uTu^TT^T 1l^uT fP/<Ig>kE3*W(R=CVi
+zc=s\ 1d_.q^o=Pk'>?@#8xKzV6n<Qc(Sy[&ZG]YWTgtRh~sM\H`!)EC{mf|iU547X$jua}-rL:9l30p;AveBJF/I% GWL-icdlg9~\|3@I(Yu,0^`x!8ntwTq.7yeo"B?fa2])};4$XAmN#<
+Bm4OAp )8W=pV+F_iuABml,NC2M%v}Efor?X4*tOcP bR@_4ln|j#>Wp
+UU55N! ^G@5IiNhK#>)c"Yb%Uf!,<V/(yrlJq]L'v b]*W1|O)
+cTcTc'c$kr $kTlrc7' \N.R~jO3H|DaL`AFz+:bK=J#T'i[GB&,oQdC}]92-y"hkXEeY%7pV{xsc;
+~C1lW~lW111 1~&lCPW C{2|%zF#Y-?s:Nd@P1lyh&
+0VlCi A{+!P`/4V3YmD%hNX5Hv2jL0Efgs-C\8z|@qeQ)]GWx6'~cFMKi^7=n,_lU*Bp&T9$OkZ:<;trIub c&[fehr"6
+(4"4("("(44((4(44( 4"( O*F[K:QB,-47x\
+ffL_sp Ts;_d-B"9:*p[OQ1jF'I\ufLn}`&?^ 9#XPfyG
+Jz6TQ )3JxLwcSQ7o0C_RNdtOih+T.km~BV\8Mq?svD>=H2zI@P#XG^pljy|;Kb6`- %=X9t\
+fmt6TS~ [f4*ClW~X:SmK_RNTB>76kZ$tM "BC0(;=H/ceo8fKYq]m2JZ%MI$OsGk_tL-W#A<9~|R^4\NX*&jE+{
+.}&-r, N.HpT8dLD{hO3=VKg`W]6>,u~Ss#JYz%xt!-Are)"&}<iF|;@$ Z}SzrY<
+Y;rB;jj\ rjY;\zB]O)q2 uk+}EZsV{a.t]In9C*4HO!^-Peq
+5~rrkk~9 E1~r5k97\g X1]
+jrU3u? AE\re/?xvj,'q{YJ>[N#Z)yUzTu3kD]i Bd%pQAHncq=LExUND|r^e8_[wP/hu}S')+*.XG,6V3`~kM\R"
+b-sIY @jEORZ.}9\^eh0Jl56]$8aPqv=x?"FKXM_|#igU`!:+dymS'b3DNLYQs1o{;-T<z>I) YKvE:^whcS{57'9frFlZso`HxL1itVnWqO}3y)m+A\
+DK@hD@h c|D%hA(Jd:]m_4L!gM<*@O;K30 ZkSGR{H
+v~v5v555v~55~v555v~ 5v~ 3)HmOa.V#g-kZ1!qU7NCB}TEr5F%+s*KQ]MwxIDW0'{u>9cz2,=lP`iy|^S
+:n::n::n::nn:n:::nn::nnnnnn:nn n: =l4*UO7P]`Je'ibQ}{G,/;tX>(K25C<&ryScVm3?:dEa"nu
+@((({}S U;}s{Z'y6E3@(zbQhS~ YO;:Uz{4
+r))arXUaUrU UaXrv) HlCn{c3*r/|\e`!)y7SWY-Ks]gM'<:VwAk#mb$p+d
+u)}k6G z|Wka`5u,6Tt)O}G"d(Q'vLxM;-/~%I3pY2# q.T(DwMxRn
+B6[B88MBMh [B8MIh6 rRdNa\ChsVL}TKcv[>{905xil8fo#2n]!6p7$QF
+?3!KVZ,Z Ey,?)VZQ[1bK!Y3 U:l\Nv
+{HSzX bt54F{8dzckJ9r7w.('),f@XSp$E|HoZ;VY~+O#R1?sGKU%MBP`^ WOaPj-Z,<N_muc]YUi"G*2tk06x'If@)L/DE~r+?q[b&3{J5`
+'Sp1h' =Idj^S1Q-]&wMm#G?prU'E6yhbLa~ zGn0_wuHjFJ$(;+KZ8=r}Ev'oC>
+AHA|AL/= |(aH>L*/2EA= GCZqvk|>o}7Ke#[PB
+g~RRBBR~g''B 7'g~RB @#A4{j8U?~R:
+o4>4KhS (oPsh~u?>Sw:N<kH\bZEKG6;4n I]F7nO?Y6(ZK4Lk%UCo'-qwj^8*zcVA[1mMRQT0vxtaJ`d/"&!h>9=g$)3b.<f{sGN2@iy5SBeEW
+.-BM:q y"(q[?X+z7sHoCN:UY_.M-DZA\$B )'};?qE5*(dC#.2DuQ>s"`:%8GA0/t@&a
+uLL\uuu]u\\\\ ]\uL >9g/OVd8M&=`v^\]mT4NG}A0,KlHC)L%2B!ZF?Y_huc6<X3e'Pt[Dkb7*yRrEf~Qi
+D(tL. mEAu<43B\t&k2Uq+D8T-*exLJ%.H^NzrCycl~F:50hQM=|ZK,Xs>!W')OSv6pV7fj;9IgYbP(["@ .<w^&}8yx|M-s=F
+yC8E~'@ F@y*1"%8T#(<r^VCUb~}'3`>Eg2 ~);u'%}aYX{F\nGBEWw=
diff --git a/codejam_2008/src/y2008practice/A-large-practice.out b/codejam_2008/src/y2008practice/A-large-practice.out
new file mode 100644
index 0000000..be587dd
--- /dev/null
+++ b/codejam_2008/src/y2008practice/A-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: Foo
+Case #2: 9
+Case #3: 10011
+Case #4: JAM!
+Case #5: T$|gB~
+Case #6: %%u%%vu%u%vvu%%u%vv
+Case #7: 4bxhT
+Case #8: E9HE9H9H99Hjjj9
+Case #9: +n~N)
+Case #10: :bQ:^Q
+Case #11: Jr+g5O
+Case #12: l<<ibyzyX
+Case #13: 6666l6E6g
+Case #14: MMckbbMcw
+Case #15: w}+CMvC2v
+Case #16: \\6\u4D6
+Case #17: VA%~`~.
+Case #18: -z?\_$?
+Case #19: 018Al
+Case #20: /O#v?5c
+Case #21: J.HZ#J5
+Case #22: /"2rc
+Case #23: q42YWY
+Case #24: YYeYYYeYYYeeeYYYeeeYYeYeYYYeeY
+Case #25: 3)VV3ye\
+Case #26: Vjh%U%]U
+Case #27: HHJYJJ
+Case #28: AALLlAlLLALAlAAL
+Case #29: n76'h
+Case #30: ^^I;^7e
+Case #31: )L\90\\+
+Case #32: "K=uggX
+Case #33: }tWX{W
+Case #34: B]x\Ex*]xB
+Case #35: y;&7ru7
+Case #36: 'N(aW
+Case #37: n\8}<
+Case #38: $WX;r
+Case #39: Q'3)[
+Case #40: .@l6Sc
+Case #41: F!Ksu%I
+Case #42: aP(ffWsoa
+Case #43: U9UN&)9q
+Case #44: qq,sLL***ks,
+Case #45: ]9}:w9~}
+Case #46: OpOpooi
+Case #47: BP^A@a
+Case #48: }x}7G|770
+Case #49: W$WvVv$tZ
+Case #50: RzJpZ_S.
+Case #51: psnU!k
+Case #52: Lz7O]
+Case #53: ]l.1/]]][.U
+Case #54: jEX&oj&&XXE
+Case #55: 5*^55^52^2555
+Case #56: id|B6v9@
+Case #57: I1R3[1
+Case #58: Dy?yy+3
+Case #59: C7Caa77=
+Case #60: @BB@@N@BN@BN@NN@@@
+Case #61: B}$B^bB9
+Case #62: >Q;7U
+Case #63: H]H]222]]GH]GG]
+Case #64: ''k''''k''kkkk'k'kk'kkkk'''
+Case #65: FEsczz`E
+Case #66: ~V6VX!
+Case #67: 0&3Xq}6
+Case #68: PgV/=kf>
+Case #69: W<-m,3
+Case #70: >4Wn@|R4
+Case #71: |)W]1OObOW
+Case #72: NjAV"T
+Case #73: |hP:Y#l
+Case #74: [c"""6re"f
+Case #75: F,4-Q*Q:
+Case #76: #GfGPyPGXGy
+Case #77: 9Xt\ttt%\X
+Case #78: B(HE]L
+Case #79: SZSrzY}SZrz
+Case #80: ZCe9qe
+Case #81: ]]]11]]]1]1X]11X
+Case #82: dQpE'.
+Case #83: h`nl'F
+Case #84: GkSkkG{H{GS
+Case #85: ^!NP7
+Case #86: *}O&&"
+Case #87: UYzz{Y:YY;
+Case #88: Cn3|SW
+Case #89: DDDqxMq(w
+Case #90: !{R\T
+Case #91: :v:\v:v\N:N\
+Case #92: ,aJD@
+Case #93: GG'F;v0
+Case #94: Pk>>ZGK
+Case #95: AA?@?j84:
+Case #96: C5"JL
+Case #97: *%?(`E
+Case #98: g[g!E
+Case #99: ^&||yw|-
+Case #100: B{G%)E%
diff --git a/codejam_2008/src/y2008practice/A-small-practice.in b/codejam_2008/src/y2008practice/A-small-practice.in
new file mode 100644
index 0000000..7f222ea
--- /dev/null
+++ b/codejam_2008/src/y2008practice/A-small-practice.in
@@ -0,0 +1,101 @@
+100
+9 0123456789 oF8
+Foo oF8 0123456789
+13 0123456789abcdef 01
+CODE O!CDE? A?JM!.
+0V I50VD >Lg
+}~PP ~P} AkB7D.
+5W5 W5v (o|2e<
+l m:0ly _*
+O{{Q i{QLO V~\%[L
+h]) )Dh]|7~ #\QcA@_~}
+} 4Q}% F~Q
+x0x 0x DH
+` u` 5ScXVm
+o}%} }o% X\dE
+tqt @Ptq ty"
+y___ _-y Nj6Z
+{{ 3{ ?(z>
+|yoo y|o YIp<
+? `?G# ]5D
+( H(G8 %{
+"" x"K*$ 2&/
+; ?; dgH
+@4b b4_@ 8oG@W:
+n}g }ng ta}
+0* *0 .q/
+NNfN fN ly
+n <n6G 0}
+O +O }m8".U2
+S qLS4~# ~?iNj
+!s-! -!ts bA4xz
+p3pq qp3 zJ
+L: hAq~s;:>L k5\FsN
+SB_ B"SQH_% d?I
+qf fq 5Y
+yww wdy svAk
+J} >0J} Ne`
+'I'' I' +KLA0
+: 1: {,M3.
+YYC CY U;
+xqqx qx f@Z1C
+- lP`\0Yv- Sua9V
+D W:MlD<n6` g2JRI\
+>> T>- W+
+8388 38 !gIN[E
+i pi N%
++7 7+f wb9
+*& ~*a)v& HJm{
+PPPn nP H$
+((Q Q(N) }si>
+ur ru HV-
+R0 =0IRQ }?
+;; /; !M
+XXX HXE_ Z$\
+DcWc Wc>wD yZ)W6
+tzzt zt ey
+YYee eY Ew
+hg gh Qy
+22 @2 >?BqXU
+ds sqd_X[ C-J
+> ~>) LJs
+FmM -)m^&U@FM f_
+[ dij["(; 3Lui9/qPv
+5(r r5( 6@
+,>s6 s6t,> F^7
+c$c s:S$[4*cz E</g[
+333 +3 !1L{-
+I88 iwI98 &uv
+7"17 \";7'1 Z=
+jS5 aj5S) Z~YzBL
+H 0H ca
+}PP #P}2 OB{1
+pp<p sp< 2:s`'
+n :n r>GCxq.v
+P #D0P Z8
+% z% rI
+q L~q ].GN
+BB] ]B *_
+tr v:tr3B; A5Za@`
+KZ wZ->A|%UK 6L,;d|}5
+XXw wfX pZr&^U"
+ggg 6g {c
+< A<_W fYt^U+.
+NNO 3NLHOf mA
++R+ R+ 8#g
+I NI ?N:
+RDBB DB6R )D
+m]] ]Am:E 7b!)EwpN|
+F bFGa q]Q'-`
+??S [?S =U/x[}
+xxx vx 7>
+.: :. 4rs
+2 g2j; cwJj
+p U,p c>]B
+t! 7,!`:Q'tI rR$.
+IP ]JdOP6I +&
+6o ]K76Gpo>= az!
+-t- t- EC;^
+e roe5 {]gJwp
+9 MA~59 8vQS
+0D D>asC0 a,$X}(F3z9
diff --git a/codejam_2008/src/y2008practice/A-small-practice.out b/codejam_2008/src/y2008practice/A-small-practice.out
new file mode 100644
index 0000000..1cdd1c2
--- /dev/null
+++ b/codejam_2008/src/y2008practice/A-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: Foo
+Case #2: 9
+Case #3: 10011
+Case #4: JAM!
+Case #5: LLL
+Case #6: k7D
+Case #7: oe
+Case #8: **
+Case #9: \\[[
+Case #10: \AQ
+Case #11: Q
+Case #12: HDH
+Case #13: S
+Case #14: dX\
+Case #15: y"ty
+Case #16: Zj6
+Case #17: >
+Case #18: pY<
+Case #19: 5
+Case #20: {
+Case #21: /2
+Case #22: g
+Case #23: oGW
+Case #24: at}
+Case #25: /
+Case #26: yyly
+Case #27: }
+Case #28: m
+Case #29: i
+Case #30: z4x
+Case #31: JJzzzz
+Case #32: \5k
+Case #33: ?dI??
+Case #34: Y5
+Case #35: vsA
+Case #36: eN`
+Case #37: LK
+Case #38: ,
+Case #39: ;;U
+Case #40: @C
+Case #41: ua
+Case #42: I
+Case #43: +WW
+Case #44: gE
+Case #45: %
+Case #46: bw
+Case #47: m{
+Case #48: $$$H
+Case #49: ss}
+Case #50: -
+Case #51: ?}}}}
+Case #52: MM
+Case #53: \$Z
+Case #54: 6ZyZ
+Case #55: yeey
+Case #56: wwEE
+Case #57: yQ
+Case #58: q
+Case #59: --C
+Case #60: J
+Case #61: _ff_f_fff_
+Case #62: i
+Case #63: @@@@
+Case #64: ^77^77
+Case #65: [[E<
+Case #66: 1L
+Case #67: vv&v
+Case #68: =Z==ZZ==Z=
+Case #69: ~~Z
+Case #70: a
+Case #71: {BB
+Case #72: :``
+Case #73: >
+Case #74: 88
+Case #75: I
+Case #76: G
+Case #77: __*
+Case #78: Z`
+Case #79: LLL
+Case #80: &&
+Case #81: ccc
+Case #82: Y
+Case #83: AmAAAm
+Case #84: #g
+Case #85: N
+Case #86: DD)))D)D
+Case #87: ww
+Case #88: ]
+Case #89: //
+Case #90: >>>
+Case #91: s
+Case #92: w
+Case #93: ]
+Case #94: RrrR
+Case #95: &+&&&+
+Case #96: za!a
+Case #97: CC
+Case #98: g
+Case #99: v8
+Case #100: Xa
diff --git a/codejam_2008/src/y2008practice/B-large-practice.in b/codejam_2008/src/y2008practice/B-large-practice.in
new file mode 100644
index 0000000..ce4ca05
--- /dev/null
+++ b/codejam_2008/src/y2008practice/B-large-practice.in
@@ -0,0 +1,21 @@
+20
+WRWWLWWLWWLWLWRRWRWWWRWWRWLW WWRRWLWLWWLWWLWWRWWRWWLW
+WW WW
+WWWLWLWWRRWWLWLWWRRWWRWLWLWRRWLWLWRRWRWWLWWLWLWRWRWLWLWWRRWLWLWRRWLWLWWLWRRWLWLWRWLWLWWRRWWLWLWRWWWWRRWWLWLWRWLWLWRRWLW WLWRRWLWLWRRWWLWLWRRWWLWLWWRRWWLWLWWWLWWRRWWRWWLWLWWRRWWLWLWWRRWWWLWLWWWRWRRWLWWLWWLWLWRRWLWRRWLWLWRRWRWLWLWRRWWWLWWWWRWLWLWWLWWWWRRWLWLWRRWLWLWRRWRWWLWWWLWLWWRRWWLWWLWLWRWRRWLWRWLWLWWLWRWRWLWLWRWRRWLWLWWLWRRWWLWLWWRRWWRWWLWLWWRRWLWLWRRWRWLWRWRWLWLWWWRWLWLWWLWWRWRRWLWLWRWWLWLWWRRWLWLWWLWRWRWLWWRRWLWWLWLWRRWRWWRRWLWLWRRWLWLWRWLWLWWRRWLWWRWLWLWRWLWLWWWRRWWWLWWLWLWRWRWLWLWRRWWLWLWWRRWWLWLWRRWLWLWRWRWRRWLWLWRWWLWLWWWRRWWWLWLWWWRRWWWRWLWLWRRWRWLWLWRWLWLWWRRWWWLWLWRWLWLWRRWLWLWRRWWLWLWRRWLWLWRWLWLWRRWWLWLWWWLWRRWRWLWWRWLWLWRRWLWLWRWRRWLWLWRRWWWRWLWWLWWLWLWRRWRWLWLWWLWRWRRWLWLWWLWRRWRWWWLWWLWLWRWWWLWWRRWWWRRWLWLWRWRRWLWLWWLWRWRWWLWRWLWLWWLWRRWLWLWRRWWLWLWWRRWWWLWWLWLWRWWWRRWLWLWWLWWLWRRWRWLWLWRRWLWLWRRWLWLWRRWWWRRWWLWWLWLWRWRRWLWRWLWLWWLWRRWWRRWLWLWWLWRRWWLWLWRRWLWLWWLWRWWLWLWRRWRWLWLWWLWWRWRRWLWLWWLWRRWWLWLWWRRWLWLWRRWRWLWLWRRWWRWLWWLWLWRRWWWLWWLWLWRRWRWLWWLWLWRWLWWRWWWWRRWWWWLWLWWWWRWRRWLWWWWLWLWWWRRWWWLWLWRRWLWLWWLWRWWRRWLWLWRRWLWLWRRWRWWLWLWRWWWLWLWRWLWLWRWRWRRWLWLWWWLWLWRRWLWLWWRWRRWLWLWRWRRWLWLWRWLWLWRWLWLWRRWRWRWLWLWRRWWLWLWWRWWWRRWWWLWWLWLWRWRRWLWLWRWRRWLWWLWWLWLWRRWWLWLWRRWWRWLWWLWLWRWWWLWLWWRRWWLWWLWLWRWRRWLWLWRRWWLWLWWRRWLWLWRWRRWLWLWRRWWLWLWWRRWWLWLWRRWLWLWWLWRWLWWRRWWRWLWLWRRWLWLWRWWRRWWLWLWWRRWWWLWWLWLWRRWLWLWRRWLWLWRRWRWWWLWLWRWLWLWRWRRWLWRWRWLWWRRWLWLWWLWWLWRRWLWLWWLWRRWRWLWLWWLWRWWLWRRWWRRWLWWLWLWRRWWWLWLWWWWRRWWWWRWWLWLWWRRWLWLWWLWRWLWWLWLWRRWWRWLWLWRWRRWLWLWRRWWRWLWLWRWWRWLWRWWLWLWWWWWLWLWWRRWWLWLWRRWLWLWRRWLWLWRRWLWLWRWWRRWLWLWRWRRWLWRWLWLWRWWLWLWWWRRWWWWRRWLWLWWWLWLWRRWLWLWWWRRWWLWLWWRRWLWLWWLWWRRWWLWLWWRWWRRWLWWLWLWRRWWRRWLWRWWLWLWWWLWRRWRWLWLWRRWLWLWWLWRRWRWWLWLWWRRWLWLWRWLWLWRRWLWLWWLWRRWLWLWRRWWRRWLWLWRRWLWWLWLWRRWLWLWRWLWLWRWWLWWWRRWWLWLWRWLWLWRWRWRRWLWLWWLWRRWRWLWLWRRWWLWLWWRWRRWLWWWLWLWWRRWWLWLWWRWRRWLWLWWLWWLWWRRWWRWLWLWRRWRWLWRWLWRRWLWLWRWLWWLWLWRRWLWLWRRWLWLWWRRWWWLWWLWLWRWRRWLWLWWLWRRWRWWWLWLWRRWLWLWWLWRWWLWWRRWLWWRRWWLWLWRRWWWLWRWWLWWLWLWRWRWLWLWWRWWWLWRRWRWWWLWLWWWRRWWWLWLWRWLWLWRWRWRRWLWLWWLWRRWRWLWRWLWLWWLWRWLWRWLWLWRRWRWRWLWRWLWLWRRWWWLWLWRRWWLWLWWWWLWLWRRWRWRWWWLWLWRRWWLWLWWWLWRRWRWLWWLWLWRWLWWRWLWRRWLWWWWLWLWWWRRWWWLWLWWWWRWRRWLWLWRWRRWLWLWWWLWLWRRWLWLWRWLWLWRWWRRWWLWLWRWRRWLWLWRRWLWLWRWRRWLWWLWLWRWLWRRWRWLWWWLWLWWRWLWWRRWWLWLWWRRWWRWLWRRWLWLWWWLWLWRWLWRRWLWWLWLWRRWLWLWRRWLWLWRRWWLWLWWRRWWWRRWLWLWRWWRRWWLWLWRRWLWLWWWLWLWRRWLWRRWWWWWLWRWRWLWLWWLWRWLWLWRWLWRWRRWLWWLWLWRWLWRRWLWLWRRWLWLWRRWRWWLWLWWW
+WRWLWLWRRWLWWLWLWRWWLWLWRWRRWLWLWW WWWRWWLWWLWLWRRWWRRWLWLWRRWWLWLWRRWLWLWWLWRRWWLWWLWLWRRWLWLWRRWLWLWRRWLWLWRRWWLWWLWLWRRWWLWLWWRRWWWLWLWRWLWLWRWRRWLWLWRRWLWLWRRWLWWWRWRRWLWWWWLWLWRWLWLWRRWWWLWLWWWRRWWWRWLWLWRWLWLWWWWRRWWWWRWRWLWLWRWRRWLWWLWLWRRWRWLWLWRRWLWLWRWLWLWWRRWWLWLWWRWLWLWRWLWLWRRWWRRWLWLWRRWWLWRWRWLWLWWLWWRRWLWLWRWLWLWWWRWRRWLWLWRRWLWWLWLWRRWWRWLWLWRRWRWLWLWRWRWRRWLWLWRWWLWLWWRWLWLWRRWWLWLWWRWLWLWRWRWRRWLWLWRWRWLWLWRRWLWWLWLWRWLWRWWLWLWWRRWLWLWRRWLWLWRRWRWWLWLWWRRWWWWLWLWRRWLWLWRRWLWLWWLWWRWRRWLWWLWLWRWLWRRWRWLWLWRRWLWRRWLWWWLWLWRWLWLWRRWRWRWLWLWWLWWWLWRWLWRRWRWLWWLWLWRRWRWRWLWWWLWLWRRWLWLWWLWRRWLWWRRWWLWLWWRRWLWLWRRWRWLWRWLWLWRRWLWLWWLWWRRWWRWLWWLWLWRRWRWWRRWLWLWRRWLWLWWWWLWLWRWLWLWRRWRWWRRWLWLWRWLWLWWWLWRRWLWLWWLWRRWLWLWRWRWLWLWRRWLWLWRRWRWWLWLWWRRWLWLWRWRRWLWLWRRWLWLWRRWRWLWLWWWLWLWRWRWRRWLWLWRWRWWLWWLWLWRWWWRWWLWLWWRWLWLWWWRRWLWLWRRWLWLWRRWRWWLWWLWLWRRWLWLWRRWWLW
+WLWRWRWLWLWRWWRRWLWLWWLWRRWRWWLWLWWRWWRWLWWWLWWRRWLWLWWLWWLWRWLWLWRRWRWRWLWRWWLWLWWWLWRWLWRRWLWLWRRWLWLWRWRRWLWLWWLWRRWWRRWLWLWWWLWLWRRWRWRWWLWLWRRWRWLWLWWWLWLWRRWLWLWRRWRWWLWLWRWLWLWRRWRWLWWLWLWRRWLWWLWLWRRWWLWLWRRWLWWLWLWRWLWRRWRWLWLWRWWRWRRWLWLWWLWWWLWLWRRWRWRWWLWLWWRRWWRWLWLWRRWWWLWLWWWRRWLWLWRRWLWWLWLWRRWRWWLWLWWRRWWWLWLWWWRWRRWLWWWRWLWLWWLWRWLWLWRWRRWLWRWRWLWRWWLWWWWLWLWWRWLWLWRRWWLWRWLWWWLWRRWLWLWRRWRWLWLWRWWRRWWLWLWWRRWWWLWWLWLWRRWRWLWRWLWRWLWLWWLWRRWLWLWWRRWWLWLWWWRRWWWRWLWLWWLWWWRWLWWLWLWRRWLWRRWWLWWW WWWWLWLWWWRRWWWLWLWWWRRWWWRWWLWLWWRRWWWLWLWRRWLWWLWRRWLWLWWLWWLWRRWLWRRWWWWLWLWWWWRRWWLWLWRWLWLWRWRWLWLWRRWWWLWLWWWRRWWLWLWWRRWLWLWRRWRWLWLWRRWLWLWRWRRWLWLWRRWWLWLWWRRWLWLWRRWWLWLWWRRWLWLWRRWRWLWLWRRWWLWLWRWLWLWRWRWLWLWRWLWLWWRRWWLWLWWRWRRWLWLWRRWLWRWWRWLWWLWWWLWLWWRRWLWRRWLWLWRWWLWLWWWRRWLWWLWLWRRWLWRRWWRWLWWLWLWRRWWRRWLWLWRRWWWLWLWWWRRWLWRWWLWLWWRRWWLWLWWWLWWRRWWRWLWLWRRWRWLWLWRRWLWLWRRWLWLWRWLWLWWWRWLWWLWLWRRWRWWRRWLWWLWRRWLWRRWLWLWWLWRRWLWLWRWLWWLWWLWLWRRWRWLWLWRRWRWWWLWLWRRWRWLWLWWWLWLWRRWRWLWLWWLWWRRWLWLWWRWWLWRWLWRRWWLWLWRRWRWRWLWLWRWWLWWLWLWRRWLWLWRRWLWLWRWRRWLWLWRRWWWWLWLWWWWRRWWWWRWLWLWWLWWRRWWLWLWWRWLWLWWRRWLWLWRWRRWLWLWRRWLWLWRRWRWLWLWRWRWLWLWWLWWWRWLWLWRRWRWRWLWLWRRWLWWLWLWRRWWLWWLWLWRWWRWLWLWRWRWRRWLWLWRWRWLWWLWLWRWWLWLWRWRWLWLWRW
+WWWWWLWWLWLWRRWLWLWRRWLWLWRWRWRRWLWLWRWWLWLWWWRRWWWRWLWWWLWLWWRRWLWLWRRWRWLWLWRWLWLWRRWRWLWRWLWWLWLWRRWLWLWWRRWWRWLWRWLWLWWLWRRWLWLWWRRWWRWWWLWLWRRWLWWLWLWRWLWRRWWLWLWWRRWWLWRWWLWLWWWLWRRWRWWLWLWWRRWLWLWWLWWWRRWWWWLWLWRWLWLWRRWLWLWRWRWRRWLWLWRWWLWLWWWRWWLWLWRRWWRRWLWLWWLWRWLWRWWWLWLWRRWWWRWRRWLWWLWLWRRWWWWLWLWRWRRWLWWLWLWRRWLWLWWRRWLWRRWLWRWLWLWRRWLWLWRRWLWLWWLWWWRRWWWRWWLWLWWWLWWRRWLWLWWLWRWWRWLWLWWRRWLWLWRWLWLWRWRWLWLWRRWWWRRWWLWRWLWLWRWLWLWWRWRRWLWLWRRWLWLWRWRRWLWLWRRWLWWLWLWRRWWLWWLWLWRWWWRWRRWLWLWWRRWWLWLWRRWLWLWRWLWLWWRRWWRWWLWRWLWWLWLWRRWLWLWWRWRRWLWLWRRWLWRWLWLWWLWRWRRWLWLWRRWWWLWLWRRWWLWWWLWLWRRWLWLWWLWRRWRWLWLWWRRWWLWLWWRRWLWLWRWLWWLWLWRRWWLWRWRWLWLWRWWWWLWRRWWRRWLWWWWLWLWRWLWLWRWRWLWRRWLWLWRRWRWWLWLWRWRWLWLWWLWWRRWLWLWWWRRWWWRWLWRWLWRRWLWLWRWLWLWWRRWLWLWRWWWRRWLWLWWRRWLWLWRWWLWRWLWRWLWWLWLWRRWLWLWRWLWLWRRWLWRRWLWLWRRWRWLWLWRRWWLWLWWWLWWRRWLWWLWLWRWLWRRWLWRRWWLWWLWLWRWWWWRRWWLWRRWLWWLWLWRWLWRWLWLWWRRWLWLWRRWLWLWRWLWLWRRWWRRWLWLWRWWLWLWWRRWLWWWWRWRRWLWLWRRWLWLWRRWLWLWWRWRRWLWWLWLWRWRWWLWLWRRWLWLWRWLWLWWRRWWRWLWLWRWLWLWWWWRRWWLWWLWLWRWWLWRRWLWRRWLWLWRRWRWLWWLWLWRRWWLWWLWLWRRWLWLWRRWLWWLWLWRRWRWWLWLWWRWWLWLWWRRWWLWLWWRRWWLWLWRRWWRRWLWLWRRWLWLWRRWLWLWRRWWWLWLWWWRRWWWLWLWWWRRWWLWLWWRRWWRWLWLWWLWRWLWLWRWRRWLWWLWLWRRWWRRWLWLWRRWWLWLWWRWRRWLWWLWLWRRWRWLWLWRWWLWLWWRRWWWLWLWRWLWLWRRWRWRWLWLWWWLWLWRRWLWLWRWLWWRWWLWLWRRWWRRWLWWLWLWRRWRWRWLWLWRRWLWLWWLWRRWLWLWWLWRWRRWLWLWRWRRWLWWLWLWRWWLWLWRRWRWLWLWRRWRWWWLWRWLWLWWLWRRWLWLWRRWLWLWRRWRWWWWWLWLWWRRWLWWWWLWLWWWRRWLWLWRWLWLWRRWWRRWLWRWLWLWRRWWLWWLWLWRWRRWLWLWRRWWWLWLWWWRRWWWLWLWWWRRWLWWLWLWRWRRWLWWLWLWRWLWWLWRWRRWLWRWWRWLWLWWRRWLWLWWRRWLWWLWLWRRWWWWLWLWWRRWLWLWRRWRWLWLWWWLWWLWLWRRWRWLWWLWLWRRWLWLWRWRRWLWLWRWRWLWLWWRRWWRWLWLWWLWWWWRWRWRRWLWLWWWWLWWLWLWRWRRWLWLWWWRWLWRRWRWLWWLWLWRRWRWLWWLWLWRWLWWWWWRWRRWLWLWRRWLWLWWLWWRWRRWLWLWRRWLWLWWLWRRWLWLWRRWRWWWWWLWWLWLWRRWRWLWLWRRWLWLWWLWWRRWLWLWWLWRRWWRRWLWLWRRWLWWLWLWRWLWWRWLWWRRWLWLWRRWLWLWRRWWRRWLWWLWLWRWWLWLWRRWRWRWWLWLWRRWLWLWWLWRWLWWRRWWRWLWWLWLWRRWWRWLWLWRWLWLWWRRWLWLWWLWRWRRWLWLWWLWRWRWLWLWRRWRWLWLWRRWRWWLWLWWRRWLWWLWLWRRWLWLWWWWRWRRWLWLWRWRRWLWLWWWRWWLWLWRRWLWWRRWLWLWRWLWRWLWLWWLWRRWLWLWRWRWRRWLWLWWLWWLWWWLWRWRRWLWLWWRRWWWLWWLWLWRRWLWLWRWWRRWWLWLWWRRWLWLWWLWWRRWLWWRWLWLWRRWWRWRRWLWLWRWLWWLWLWRRWWWRWLWLWWLWWRRWWLWLWWWLWRRWWLWLWWRRWWLWWLWLWRRWRWRWWWWLWLWWWWRRWWLWLWWRWWRRWWLWWLWLWRWRRWLWLWRWRRWLWWWLWWWLWLWRWLWLWRRWRWLWRRWWLWLWWRRWWWRWLWLWWLWRRWRWWWLWLWWWWRRWLWWLWLWRRWRWLWLWWLWWWWLWRRWLWLWRWLWRWWRRWWLWLWWRWRWRRWLWLWWLWRRWLWLWRWWLWLWWRRWWRWLWLWWLWRRWLWLWRRWRWWWLWWLWLWRRWRWLWWLWLWRRWLWLWWWRRWWLWRRWLWWLWLWRRWRWLWRWLWWLWLWRRWLWLWWRRWWLWLWRWLWLWRWRWRRWLWLWRWRWLWLWWLWRRWWWLWLWWWWLWRWRWLWLWWWRRWLWLWRWLWRWRRWLWLWRRWWLWLWWWLWRWRRWLWLWWLWRWLWLWRRWLWLWRRWRWLWLWWRRWLWLWRRWRWLWWLWLWRWLWWRRWWRWLWLWRRWWRWLWLWRWLWLWRRWWWWWWWLWWLWLWRWRRWLWWLWLWRWLWRWRRWLWWLWLWRWLWRWRRWLWWLWLWRWLWRWLWRWWRRWWLWLWRWLWLWRRWRWLWRRWWLWWLWLWRRWLWLWRRWRWLWLWRWLWLWRRWLWLWWLWRRWRWWLWWLWLWRWWLWWRRWLWLWRWLWRRWWWRRWWLWLWWRRWLWLWRWLWLWRRWLWLWWLWRWRRWLWRWWLWLWWWLWRRWRWWLWLWWRWRRWLWLWRRWLWRWLWRWWWLWLWWWRWRRWLWLWRRWLWLWRWWWWWLWLWWRRWLWRWLWLWWLWRRWRWLWRWLWLWWLWRRWLWRRWWWLWRWLWLWRWLWLWRWLWLWRRWRWLWLWRRWRWWLWLWWWLWWRRWWLWLWWWLWRRWLWLWWRWWWRRWWWLWLWRWLWLWRRWLWLWRRWWRRWLWWLWLWRRWLWLWWRRWWRWWWLWLWWRRWLWLWWLWRRWRWWLWLWRWRRWLWLWWRWLWLWWLWRRWRWWLWWWLWLWRWLWLWRRWRWRWLWLWWLWRWLWLWRRWLWLWRWWRWLWLWRRWRWRWLWLWRRWLWLWRWLWLWRRWWWLWLWWWWLWRWWRRWLWLWRRWRWLWLWRWLWRRWLWLWRRWLWWLWLWRRWWLWLWWWRRWWLWLWRRWWLWWWLWLWWRRWLWLWRRWLWLWRWLWLWRRWLWRRWWLWWLWLWRRWWLWWLWLWRWRRWLWLWRRWWRWLWLWWWWRRWWLWLWWRWWRRWWLWWLWLWRWWLWRWRRWLWLWRRWWWLWLWRRWWWLWLWWWWLWRWWLWRWLWLWRRWRWLWRRWWLWLWWRRWLWLWRWLWLWWRRWWLWLWWRRWWWRRWLWWLWLWRWLWRWRRWLWWWRRWWLWLWRWWLWLWWRRWWWLWLWRRWLWLWRRWLWLWWLWWRRWLWWLWLWRRWRWRWWLWLWRRWWLWWWLWLWRRWRWLWLWWLWWWLWRRWRWLWRRWLWLWRRWLWRWLWLWRWLWLWWRRWWLWRRWLWWLWLWRRWRWLWLWRWWLWWLWLWRRWLWLWRWWRRWLWLWWLWRRWLWLWWRRWLWLWRRWLWLWRWRWRRWLWLWWRRWLWWLWLWRRWWWLWLWRRWLWLWWLWRWWWLWRWLWWWRRWWLWLWWRRWLWRWLWLWRWWRRWWLWWLWLWRWRRWLWLWWLWWRRWLWRRWLWLWRRWWWWWRRWLWLWRWLWLWWRRWLWLWRWLWRWWWLWLWRRWLWLWRWLWLWRWLWLWRRWWLWRRWWLWLWWRWRWLWLWRRWLWLWRRWLWLWRWWRWRRWLWLWRRWLWLWRWWLWLWWWWRRWLWLWRRWRWLWLWRRWLWLWRWLWRRWRWLWLWRWLWRWLWLWWWLWLWRRWRWRWLWRWLWLWRWLWLWWRWLWRRWRWLWLWWLWRRWLWLWWLWRRWLWLWWRRWLWWLWRWWWRRWWWLWRWWLWLWWWLWRRWLWLWRWRRWLWLWRWRRWLWLWRRWLWLWWLWWRRWLWLWRWRRWLWRWLWLWRRWWWLWWLWLWRRWRWLWWWWRWWWLWLWWRRWWLWLWRRWLWLWWLWRRWLWLWWRWLWWWRWLWLWRRWLWWRWRWRRWLWLWWWRWLWWLWLWRRWLWLWWWRRWWWRWWLWRWLWWLWLWRWLWRRWRWLWWRRWLWLWWLWRWLWLWWWRRWLWLWWWRRWLWLWRWWLWLWRWLWLWRRWRWLWLWRWRWLWLWRWRRWLWLWWLWRWRWLWRWRRWLWLWRRWWLWLWRWLWLWRWLWWRRWWRWLWRWLWWLWLWRRWLWLWRWLWLWRRWRWWLWLWWWLWRWWRRWWLWLWRRWLWLWWLWRRWRWLWLWRRWRWLWWLWLWRWLWWRRWLWLWRRWRWLWLWRRWLWLWRRWRWLWLWRWRWLWLWWWRWRWLWLWRWWWLWLWRWLWLWRWRWRRWLWLWRWLWLWWRRWLWLWWLWRWLWLWRRWLWLWRRWRWLWWLWLWRWRWLWLWRRWRWLWLWRRWLWLWRRWRWWWLWLWWWRRWWLWLWRRWLWRRWLWWLWLWRWLWWLWRWLWRRWWWRRWWLWLWRWWRWLWWLWLWRRWLWLWWWWRWLWRRWLWLWRWRRWLWRWLWRRWLWLWWLWRRWLWLWRRWLWLWRRWWLWLWRRWLWLWRWLWLWWRRWWLWLWWWRRWWWRWWRWLWLWWLWRWLWLWRWRRWLWLWRWLWLWWWWWWWLWRWWRRWLWLWWRRWWRWLWLWRWWLWLWRRWRWLWLWRWRRWLWLWWLWWLWWWWWLWRRWRWWLWLWWWWLWLWRRWLWLWRRWRWLWLWRWRWWWRRWWWLWLWRWLWLWRRWLWLWRRWRWLWWLWLWRRWRWLWWLWLWRWRRWLWLWRRWWWLWWLWLWRWRRWLWRWLWRWLWLWRRWRWLWLWWLWRWLWLWRRWRWLWRRWLWLWRWWLWLWWRRWWLWLWRRWLWLWWLWRRWRWWWLWLWWRRWLWLWWLWRRWWWLWRWLWLWRWWLWWLWLWRWWRWWRRWWLWWLWLWRRWLWLWRWLWRRWLWLWRRWRWWLWLWRRWWLWLWWWLWRWLWWRRWLWRRWLWRWLWRWLWLWWLWRWLWRWRRWLWRWLWLWWLWRRWLWLWWRRWLWLWRWRRWLWLWWRRWWWLWRWWLWLWWWLWRWWRRWWLWLWWWLWRRWRWWWWLWLWRWLWLWRRWLWLWRRWRWLWWLWLWRWLWRRWRWLWLWWLWWWLWRRWLWRRWLWLWRWWLWLWRRWRWRWWLWRWLWWLWLWRWLWRRWLWLWRRWLWLWRWLWLWRRWLWLWRRWWRRWLWLWRRWLWLWRWRRWLWWLWLWRRWWWWLWWWLWLWWRRWLWLWRWWRRWLWLWRWLWLWWRRWWRWRWLWRWLWLWWLWRRWRWLWLWRWRWWLWLWRWWWWLWLWWWWRWLWRWLWLWRWWWWRRWLWLWRWRRWLWRWLWWLWLWRWWLWLWRRWLWRRWLWWLWLWRRWRWLWLWRWRRWLWLWRWRRWLWLWRRWLWLWRRWLWWLWLWRRWWWLWLWWRRWWWLWLWRWLWLWRRWWLWLWWRWLWRRWLWLWRRWLWLWRWRRWLWLWRRWWWWLWLWRRWLWLWRRWWLWLWWWLWRWLWLWRRWWRRWLWRWLWLWRRWLWLWWLWWRRWWWRRWLWWRWLWLWRRWLWLWRRWLWLWRRWWLWRRWLWLWWLWRWLWLWWRRWWLWLWWRWLWWRWLWLWRWWRRWWLWLWWWRWRWRRWLWLWWLWRRWLWWRWLWWLWLWRRWRWWLWLWWRRWWLWLWWRWRWLWLWWLWRWLWLWRRWLWLWRRWLWLWRRWLWLWRWWRRWWLWLWWRRWWWLWLWRWLWLWRWRRWLWRWRWLWLWRRWWLWLWWRRWWLWLWRRWLWLWRRWWLWRWWLWLWWRRWLWLWRWLWLWWRRWWLWRWLWLWWLWRWRRWLWRWWLWLWWRRWLWLWWLWWRRWLWLWWWRRWWWRWLWLWRWLWLWWWRWRWLWWWWWLWRWLWWRWWRWRRWLWWLWLWRRWLWRWLWLWWLWRWW WWLWRWWWWWWWRWLWLWWLWWRRWWLWLWRRWWRWLWLWRRWLWLWRRWLWRWLWLWWLWRRWRWLWLWWLWRRWLWWLWLWRWWLWLWRRWRWWLWLWWRRWLWLWRWWWLWRWLWRWWWRRWWWLWLWWWWLWRWWLWRRWRWWLWLWWRWRRWLWLWWLWRWRRWLWRWWLWWLWLWRWWLWRRWRWWLWLWRRWWLWLWRRWLWWLWLWRWLWRRWLWLWWRRWWWRWRRWLWLWWLWRWLWLWRWWLWLWWRRWWLWLWWRRWWRWWLWLWWRRWLWLWRWRWLWLWRRWLWLWRWLWLWWRRWLWLWWLWRWWRRWLWLWWLWRWWRWRRWLWWLWLWRRWWWLWRRWWLWLWRWWLWLWRRWLWLWWLWRRWLWRWLWLWRWLWLWRRWRWLWLWRWRRWLWWLWLWRRWLWLWWWRRWLWLWWLWRRWRWWLWLWWRWWWWW
+WLWRRWWLWLWRWLWLWRRWRWLWLWRRWRWWLWLWWRWLWLWRRWWWLWLWWWRRWWWWLWLWWWRWRRWLWWLWWLWLWRRWLWRWLWLWWWRRWLWLWWRWLWLWRRWRWLWWLWLWRRWLWLWRRWLWLWRWWRRWLWLWRRWLWLWRWRWRRWLWLWWRRWLWWLWLWRWLWWLWRRWRWLWRRWLWLWWLWWLWRRWRWWWWWLWLWWRWLWLWRRWLWLWRWRRWLWLWRRWLWLWRWRRWLWWLWLWRRWRWRWLWLWWLWRRWWLWLWRRWLWLWRWLWLWWRRWLWLWWRRWWLWLWRRWRWWLWLWWRWRRWLWLWRWLWLWWRRWWLWLWRRWLWWLWLWRRWWRWWLWLWWRWLWLWRRWLWLWRRWLWLWRWLWLWWRWWLWLWWRRWWWRRWLWLWRRWLWWLWLWRRWLWLWWRRWLWWLWLWRRWRWLWWLWLWRRWRWLWLWWRWRRWLWWLWLWRRWLWLWWRWRRWLWWLWLWRRWRWWWWWWLWLWWWRRWLWLWRRWRWLWLWRRWLWLWRRWWLWWLWLWRWRRWLWWWLWLWWRRWWRWLWLWWLWWRRWWRWWRWLWLWRRWLWLWWLWWWRRWLWWLWWLWLWRRWLWRRWWWLWLWWWRRWLWRRWLWLWWLWWWLWLWRRWLWRRWWWLWLWRWLWLWRWRWRRWLWLWWLWWRWRRWLWWLWLWRWLWRWRRWLWRWLWRWLWLWWLWRWLWRRWLWLWWRRWLWLWRWLWRRWLWLWWLWRRWWRRWLWWLWLWRRWRWLWLWRWRRWLWRWLWLWRRWLWLWWLWRRWRWLWLWWLWWWLWRRWRWLWLWWLWRRWRWWWRRWLWLWWRWLWLWWLWRRWLWRRWWWLWLWWRRWLWLWRRWLWLWRRWWLWLWRWLWRWLWLWRRWLWWWLWLWWRRWLWLWWWRRWLWRRWLWWLWLWRRWLWLWWRRWWRWWWLWLWWRRWLWRWLWLWWLWRWLWRWLWWWRRWWWLWLWWRRWLWWLWLWRWRRWLWLWRRWLWLWRWWRRWWLWLWWRWRRWLWLWRRWLWLWRRWLWLWRWWLWLWRWLWLWRRWLWWLWLWRRWRWLWLWRRWRWWLWLWRRWLWLWWLWRRWWWRRWWLWWRWWLWWLWLWRRWRWLWRRWLWLWWWLWLWRRWLWLWWRWRRWLWWLWLWRRWLWLWRRWRWLWLWRRWRWLWWLWLWRWLWWRRWWLWWLWLWRRWLWLWRRWLWRRWLWLWRRWLWLWWLWRWLWLWRRWLWLWWRRWWRWLWLWRWLWLWWRRWLWLWWLWRWRRWLWLWRRWLWLWRRWLWLWRRWRWWLWLWRWLWLWRRWRWRWLWLWRWLWLWWWWLWRWLWLWRWRWLWLWRWRRWLWLWWRWRWLWWRRWWRWLWLWWWLWWLWLWRRWWRWLWRRWLWWLWLWRRWWRWRRWLWLWRWWWLWLWRWWWLWLWWRRWLWLWWLWRRWWRRWLWLWRRWLWWLWLWRRWLWLWWRRWWWRRWLWLWWWWLWWLWLWRWRWLWWRRWWRWLWLWRWRWWLWRWLWWLWLWRRWLWLWWRRWWLWLWWRRWLWWLWLWRRWLWLWRWRRWLWRWLWLWWLWRRWRWWLWLWWWLWWWRWRRWLWWLWLWRRWLWLWWRRWWLWLWWWRWRWLWLWRWLWLWRRWRWLWLWRRWWRRWLWWLWLWRRWWRWLWLWWWLWLWRWRRWLWLWWLWRWRWRRWLWLWRWWWLWLWWWRRWLWLWWLWRRWRWWRWLWWRWLWWWLWWLWLWRWRWLWWRRWLWRRWLWRWLWLWRWRWLWLWRRWLWWLWLWRRWLWLWWWRRWLWLWWLWRRWRWWRWLWLWRWLWLWWWWWLWWRRWLWWWLWLWRRWWRRWLWLWRRWWWWLWLWWRRWWLWRRWLWWLWLWRRWRWLWLWWRRWWLWLWWRRWWLWLWWWRWLWLWWLWRWRWLWLWWRWRRWLWLWRRWLWRWLWLWWLWRWLWWRWLWRWWWLWLWRRWWLWWRRWWRWLWRWWLWLWWWLWRRWRWWLWLWRWLWLWRRWWRRWLWRWLWLWRRWWLWLWRRWWLWLWWRRWLWLWWRWLWRWWLWLWWWLWRRWRWWWLWLWWWWLWWWRRWLWLWRRWLWWRRWWWLWLWRWLWLWRWWRRWLWLWRWWWRWRRWLWWWLWLWWRRWWWLWLWRWLWLWRRWLWLWRRWWRRWLWLWRRWLWWLWLWRWLWRRWLWWWLWLWWRRWLWLWWRRWWRWLWLWWLWWRRWLWLWWLWRRWLWLWRWWRRWLWRRWLWLWRWWLWLWRWLWLWRWRRWLWWLWLWRWLWWRRWWRWLWLWWLWWWRRWLWLWRRWRWLWWRWLWLWWLWWRRWWRWWLWLWWRRWWRWWLWWLWLWRWRRWLWLWRRWWWLWLWWWRRWLWWLWLWRRWRWWRRWLWLWRRWLWLWWLWWRRWWLWLWRWLWLWRRWWLWLWWRRWLWLWRRWRWLWLWRRWLWLWRRWLWLWWLWWWRRWWWWRRWLWWLWLWRRWLWWWWLWLWRWLWLWRWRRWLWLWRRWLWRRWLWLWRWLWWLWLWRWRRWLWLWRRWWLWLWWWWLWLWRWRRWLWLWWLWRRWRWWLWLWWRWRRWLWLWWLWRRWWLWLWWRWWLWLWRRWWWLWLWWRRWLWLWRRWRWLWLWRWRWRRWLWLWWLWW WLWRRWLWLWRRWLWLWRRWLWLWRWWLWWLWLWRRWLWLWRWWWRRWWWLWLWRWLWLWRWRRWLWLWRRWWLWLWWRRWWRWWLWLWRRWLWWWRWLWWLWLWRWLWRRWLWLWRWLWLWWRRWWLWLWWRRWLWRRWLWLWWRRWWWWWLWLWWWWWWLWRWRRWLWLWRRWLWRWRRWLWLWWLWWLWWWLWRRWRWWLWLWRRWRWLWLWRRWLWLWWLWRRWLWLWWLWRRWLWLWRWLWRRWWRRWLWLWWLWRRWRWLWLWRRWLWLWRRWLWLWRWRRWLWWLWLWRRWRWLWWLWLWRRWRWWLWLWRRWLWLWWLWRWRRWLWLWWLWWLWRRWRWWWRWLWLWRWWLWLWRRWLWLWRWLWLWWRWWWRRWWWLWWRWLWLWRRWLWLWRWLWLWWWWRRWLWLWRRWWLWLWWRWLWRWRRWLWLWWLWWLWRWRRWLWLWRRWLWLWRWRRWLWWLWLWRRWRWRWLWLWWRWWWLWLWWWWLWRRWLWLWRRWRWWWLWLWRWLWLWRRWLWLWRRWRWLWWLWLWRRWRWRWWLWRWLWLWRRWWLWLWRRWLWLWRWRWLWLWWLWWRRWLWLWWLWRRWLWRWLWLWRRWWLWWRRWLWLWRWRRWLWRWLWRWLWRWLWLWRWRRWLWLWWLWRWRRWLWWLWLWRWRWLWLWWLWRRWWRRWLWLWWWWLWLWWRRWWLWLWWWWWRRWLWLWRWLWLWWRWWRRWWLWWLWLWRRWLWLWRWLWRRWLWLWRRWRWWLWLWWWLWRRWLWRWLWRRWWRRWLWLWWWWWLWLWWWRRWLWWWLWLWWRRWWLWLWRWLWLWRRWWRRWLWRWLWLWRWLWLWWRRWWRWRWLWLWWLWWRRWWRWLWLWRWRRWLWRWLWLWWLWRRWWWWLWWLWLWRRWLWLWRWWRRWLWLWRRWRWLWLWRWWWLWWLWLWRWRWLWLWRRWRWRWLWLWRWLWLWRRWRWLWLWRWLWLWWRRWWLWLWWWLWRRWRWWLWLWWRRWWRWLWLWWLWWRWLWLWRWWLWLWRRWLWLWRRWRWWLWLWWWLWWRRWLWLWRRWWLWWRWRWRRWLWLWWLWRRWWLWLWRWWWLWLWRWWLWLWWRWRRWLWLWWRRWWLWLWWWLWRWWRRWLWWLWLWRWLWRRWWRRWLWLWRWRWWLWLWWRRWLWWLWLWRRWLWLWWRRWWRWWLWLWWWLWWRRWWWLWLWRWLWWLWLWRRWWLWRRWLWLWWRWRRWLWWLWLWRWRRWLWLWWLWWLWRRWLWWRRWWLWLWWRWWWRRWWWLWLWRRWLWLWRRWLWRRWLWLWWLWWLWRWLWWRWRRWLWLWRWRRWLWLWRWLWRWWWWLWLWWWRRWWWRWLWWLWLWRRWRWLWLWRWLWLWWRRWWLWRWLWLWWLWRRWLWWLWLWRRWLWRWRRWLWLWRRWLWRWLWLWWWLWLWRRWLWWRWWWWLWLWRRWLWRWRRWLWLWRRWLWLWRRWLWLWRRWLWRRWLWWRRWWLWLWWWWLWLWRRWLWLWWRWLWLWRRWLWWLWRRWRWLWLWRRWLWLWRWRWRRWLWLWRWWLWLWRRWLWLWRRWLWLWRRWRWLWLWWLWWRRWLWWLWLWRRWLWLWRRWRWLWLWRRWRWLWLWRWLWLWRRWLWWLWLWRRWRWWLWLWWRWLWRWLWLWWLWRWWWRRWWWLWWLWLWRWWRRWWLWWWLWLWWRRWLWWLWLWRRWRWLWLWRWRRWLWLWWLWRWLWLWRRWWWRWRRWLWLWRRWLWLWRWLWLWWRWWLWLWWRRWWLWLWWRWRRWLWWLWLWRRWRWWWRWWLWWWLWLWWRRWLWLWRWRRWLWRWLWRWLWWWWLWLWRRWWRWWLWLWWWLWRRWLWLWWWLWLWRRWWWLWLWRRWRWLWRWRRWLWLWRRWLWWLWWLWLWRRWLWWWLWRRWLWRRWWWLWLWWRRWWRWLWWLWLWRWLWWWWLWRWLWWRWRWLWLWRRWLWLWRRWWRRWLWWRWLWLWWWLWLWRWRRWLWLWRWLWLWRRWRWRWLWWRWLWLWRWLWLWWWRRWLWWLWWLWLWRRWRWLWLWRRWRWLWLWRRWWRRWLWLWWLWRWRWRRWLWLWWWLWLWRRWLWLWRRWWLWWWWLWLWRWLWLWRRWWLWLWWRRWWLWRRWWRWLWLWRRWWLWLWRWLWLWRWWLWLWRRWLWLWRRWRWWLWRWLWLWWWLWLWRRWWLWWRWRRWLWLWWRRWWLWLWRWLWLWRWLWRRWRWLWRWLWLWRWLWLWWRWLWRWLWLWRRWWRRWLWLWRRWLWLWRRWRWLWLWRWLWWLWLWRWRRWLWLWWLWRRWRWWLWLWWRRWWRWLWWRWLWRWWLWWLWLWRRWLWLWRRWRWLWLWRWRRWLWLWWLWRWLWLWWWWRWLWLWRWRWLWWRWWLWLWRWWRWRRWLWWLWLWRRWWRWWLWWLWLWRWRWRRWLWLWRWWLWLWRWLWLWRRWLWLWRWLWWRRWLWLWWLWRRWLWWLWLWRRWRWLWLWRRWWRRWLWWLWLWRRWRWLWWLWLWRRWRWLWWLWLWRRWRWRWLWLWRWLWRWLWWLWLWRWLWRRWLWLWRRWLWLWRRWWRRWLWWLWLWRWLWRRWRWLWRWLWLWRWLWLWRRWLWLWRRWRWWWWLWLWRRWLWLWWLWRWRRWLWLWWLWRWLWWWLWWRRWWLWWLWLWRRWRWRWWWWWRWLWLWRWRRWLWLWWWLWLWRWLWRRWLWLWWLWRWRWLWLWRWRWLWLWRWRRWLWLWRRWWLWLWWWLWWRRWWRWWWRWWLWLWWWLWRWLWLWRWRRWLWLWWLWRRWWLW
+WLWRRWLWLWWLWRRWRWLWLWRRWLWLWRRWRWWLWLWWRWRWLWLWRRWLWLWWLWWRRWWWLWWLWLWRWRRWLWRWRWLWLWRWRRWLWLWWWLWLWRRWLWWLWLWRRWLWLWRRWRWWRWLWLWWLWWWRRWWWWLWLWWRWLWLWRWRWLWWLWLWRWRWLWLWRRWRWLWLWWLWWRRWWRWWLWLWWWRWLWRRWWLWLWRWLWWLWLWRRWRWWRRWLWLWRWRRWLWLWWLWRRWRWLWLWRWRWLWLWWLWRRWLWLWWLWRWRWLWLWRRWRWRWLWLWRWWWLWLWWWWWRRWWLWLWWRWRRWLWWRWLWWWRWLWWLWLWRWWLWLWRWWRRWLWLWWWRRWLWLWWRRWWRWLWWRWLWLWRWRWLWLWRRWLWLWWRWLWLWRRWWLWWLWLWRWWLWWRRWWLWLWWRRWLWLWRRWLWLWRRWRWLWLWWLWWRRWLWWWRWWRRWWLWWWLWLWWRRWWWWRWLWLWRWLWLWWRRWLWLWRRWLWWLWLWRWWLWLWRWRWRRWLWLWWLWRRWLWLWRRWLWRRWWWLWLWWWRRWWLWLWWRRWWRWLWLWRRWLWLWRRWLWLWWLWWRRWWLWLWWWLWRWWRWRRWLWWLWLWRRWWWWRWLWRRWLWLWRWWWLWLWRRWWLWWLWWLWLWRRWRWLWRWLWLWWLWRRWLWLWRRWWRRWLWWWLWLWWRWLWRRWLWLWRWLWLWWRRWWLWLWRWWWWRRWLWLWWLWRRWRWWRWLWLWRWRRWLWLWWLWRWWWWLWLWWRWLWLWRWRRWLWLWWRRWLWLWWLWWLWRRWRWLWLWRRWWLWLWWRWRWRRWLWLWWRWRWLWLWRWLWLWWWWLWRRWRWWWWRWLWLWRRWWLWWLWRRWWLWLWWWLWWLWRRWRWWLWLWWRWLWLWRWRRWLWLWWLWRWRWLWLWRWRWRRWLWLWWRRWLWLWRRWWLWLWWRRWLWLWRRWLWLWRRWLWLWRWRWRRWLWLWWLWWLWRRWWWLWLWWWWLWRRWLWWLWLWRWRRWLWLWWWLWLWRRWWRRWLWLWWLWRWRRWLWRWWWLWRRWLWLWRRWLWLWWWLWLWRRWLWLWRWLWRWWRRWWLWWLWLWRWWLWWRRWLWLWWRRWLWLWWRRWWRWLWLWRRWLWLWRRWRWLWLWWRWRRWLWLWWLWRWRWLWLWRWWLWLWWWRRWWWRWWLWLWWRWLWLWWWWRRWLWRWRRWLWLWWWLWLWRRWLWLWRWWLWLWWRRWWLWLWWRRWLWLWWRWLWRWLWRWWWLWRWRWRRWLWLWWLWRRWRWLWWWLWLWWRRWWLWLWWWWRWWRRWWLWLWWRRWWLWWWRWLWLWRWLWWLWLWRWWWRRWLWLWRRWRWLWWLWLWRRWLWLWRRWRWLWLWWRRWWLWLWWRRWLWWLWLWRWLWRRWLWLWWLWRRWLWLWWRWWLWRRWWLWLWWRRWWLWLWWRRWLWLWRRWRWLWLWRWWRRWWLWWWRWLWWLWWLWLWRRWRWLWLWWLWRWWRWRRWLWLWRRWLWLWWLWWWRRWLWLWRRWRWLWLWRRWLWRWLWLWWLWRRWRWLWRRWLWLWRWLWLWRRWLWWLWLWRRWLWLWWRRWWLWLWWWRRWLWLWRRWWRRWLWLWWLWWWLWLWRRWLWLWRWWLWRRWRWLWWRRWWLWLWWWLWWLWWRRWLWLWRRWLWLWRWLWLWRWLWLWRRWRWWRRWLWLWWLWRRWRWLWWLWLWRRWRWRWLWLWRWLWRRWLWLWRWWLWRRWWWLWLWWRRWWLWLWWRWRRWLWLWWLWWLWWWRWRRWLWLWWLWRWLWLWWRWLWRWRRWLWLWWLWRWLWRWWRWWRRWWLWWLWLWRWWLWRRWRWWLWWLWLWRRWWWWLWLWWWWRWLWWRRWWRWLWWLWLWRRWRWLWWLWLWRRWWRWLWWLWLWRRWLWWLWLWRWRRWLWLWWWWLWLWWRRWWRWLWLWRRWWLWLWWRRWLWLWRWRWRRWLWLWWRRWLWLWRWLWWLWLWRWWLWRRWRWLWLWRWRRWLWLWRWRRWLWWLWLWRWRWWWLWWLWLWRWRRWLWRWLWWWWLWLWRWLWLWRWRRWLWLWWRRWLWLWRRWLWLWWLWRRWLWRRWWWLWLWWWWRWLWLWRWRRWLWLWRRWLWLWRRWRWLWLWRRWWLWWLWLWRRWLWLWRRWRWWLWWLWLWRWRRWLWLWRRWLWLWRRWRWLWLWRRWLWWWLWWLWLWRWRRWLWLWWWWRRWWLWLWWRRWWRWLWWLWLWRWLWWWRRWWLWLWWW WWLWLWRRWLWLWRWRRWLWLWRRWWWLWLWRRWLWRRWLWLWRWLWLWWRRWWWLWLWWWRRWWWLWLWWWRRWLWLWRRWRWLWLWWWLWLWRWRRWLWWLWWLWLWRRWWLWLWRRWLWLWRWWWWRRWWLWRWRRWLWLWWLWRWLWLWWRWLWWWLWLWWRRWLWRRWLWWLWLWRRWRWRWLWLWRWLWLWRRWLWLWRRWRWLWLWRRWWLWLWWRRWWRWLWLWRRWRWWLWLWRWLWLWRRWLWLWRRWLWLWWLWRRWLWLWRRWWRRWLWLWRRWLWWLWRWLWLWRRWLWWLWLWRWLWWRRWWLWLWRWRWWRRWWLWLWWWLWRRWRWWLWLWWRRWWLWLWWWWLWLWRWWRWRRWLWLWRRWLWLWRWRWWWLWLWRRWWLWLWRWLWLWRRWWWRWLWLWWLWWRRWWRWLWLWWLWWRWLWLWRRWWLWLWWWRWWRRWWLWWLWLWRWRRWLWLWWWWWRRWWWWWLWLWRWLWLWRRWLWWLWLWRRWWRWRRWLWLWWWLWLWRRWWRRWLWLWRRWLWLWRRWRWLWLWRRWLWLWWWLWLWRRWRWWLWLWRRWWLWLWWWLWRRWRWWLWRWLWLWRWWLWLWWWRRWWLWLWWRRWLWLWWWWRWLWLWRRWWLWRWLWLWRWRRWLWLWRRWWLWLWRWLWLWRRWRWRWLWRWWLWLWRRWWLWLWWRRWWWLWLWRRWLWLWWLWRWRWRRWLWLWRWWLWLWWRRWWLWLWWWLWRRWRWWWLWLWRRWRWLWLWRWLWLWWWWLWRWRRWLWLWWLWRRWLWWLWLWRWWLWLWRRWRWLWLWRWWRWLWLWRRWLWRRWWRWLWWLWLWRWLWRRWRWLWWLWRRWLWWLWLWRRWLWLWWWLWRRWWRRWLWWWLWWLWLWRWRRWLWWWLWLWRWLWLWRRWWLWWRRWWLWLWWRWWLWLWRRWWWRRWWLWLWRRWWWLWLWWRRWLWLWRRWRWLWLWRWWLWRWLWLWWLWRWWWWLWWRWLWRRWWRRWLWLWWLWRWRRWLWWWWWLWLWRRWWLWLWWWLWRRWLWLWRWRWLWRRWRWLWLWRWWWLWLWRWLWLWRWWRWLWLWRRWRWRWLWWLWLWRRWWWRRWLWLWRWLWRWLWLWRRWLWLWRWLWLWWRRWWLWLWWWLWRRWWRRWLWWLWLWRRWRWLWLWRRWLWLWWLWRWWLWWLWLWRWRWWWLWRRWWLWLWWRWWWWRRWWWWLWWLWLWRWWRWLWLWRRWWRRWLWRWLWLWRRWLWLWWLWRRWRWLWLWRRWLWWLWLWRRWRWRWLWLWWWLWLWRWRWWLWWLWLWRWWWWRRWWWWLWLWWWRRWWWWLWWLWLWRRWLWWLWLWRRWRWLWLWRRWLWWLWLWRWRRWLWLWWRWRRWLWWLWLWRWLWWRRWLWRRWLWLWRWRRWLWWLWLWRWLWRRWRWLWWLWLWRRWWWLWLWRRWLWRWLWLWWLWRWLWRWWWRRWLWLWRWRWRRWLWLWRWLWWLWLWRWRRWLWWLWLWRRWWWRWRWLWWLWLWRRWLWWWWLWWLWLWRWWRRWWLWLWWRRWWLWLWWRRWWWWLWLWRWLWLWRWWRRWWLWRWLWLWWLWRRWWLWLWWRWLWRRWLWLWRRWLWLWRRWLWLWRRWLWLWRWRWLWLWRRWRWRWLWLWRWWWWWLWWLWLWRWWRWLWLWRWWWRRWWLWLWRRWRWLWLWRWRWLWWLWLWRWLWWRRWLWLWWLWRRWLWLWRWLWRRWRWLWLWRWRRWLWLWRRWLWWLWLWRRWRWLWRWLWRWLWWWLWLWWRRWWWLWLWRRWLWLWWLWRWRWLWLWRRWLWRRWWLWLWWRRWWLWLWRRWLWLWWLWRRWLWLWWRWRWRRWLWLWWRWWWRWWWWLWLWRWLWLWRRWLWLWRRWLWLWRRWRWLWLWRWLWWWLWLWWRRWLWLWRRWLWWLWLWRRWWRRWLWLWWWLWLWRRWWLWRWLWRWLWLWRRWRWRWLWLWRRWLWLWRWWRRWWLWRWLWLWRWLWWLWLWRWRWWLWRWRRWLWLWRRWLWLWRRWRWLWWLWLWRWRWLWLWRRWLWWWWLWLWWRWLWLWRRWLWWRRWLWLWRRWRWLWWLWLWRWLWWWRRWLWRRWLWWLWLWRRWRWWLWLWRRWWLWLWWWRRWLWLWWLWWLWRRWWLWLWRRWLWLWRRWLWLWRRWLWWLWLWRWRWLWRRWLWLWRRWRWWLWLWWRRWLWLWRRWWLWLWWRWRRWLWLWWLWRWRWRRWLWLWWLWRWRRWLWRWLWWLWLWRRWWLWLWRRWLWLWRRWLWLWWLWWRWRRWLWWLWLWRWRRWLWWLWLWRRWWRRWLWLWRRWLWRRWLWLWWWLWLWRWLWRRWLWRRWWLWWLWWLWLWRRWRWLWLWRRWLWWWLWLWWRRWLWLWWRRWWRWLWLWWLWWWRRWLWLWWLWRRWWRRWLWWLWLWRRWRWWLWLWWRRWWLWLWWRRWWWWLWLWWWWRWRRWLWLWRRWLWLWWLWWRRWWWLWLWWWW
+WWWLWLWWRRWLWLWRWRRWLWRWLWWLWLWRWLWRRWWWLWWLWLWRWWWRRWLWLWRWWRRWWLWRWLWWLWLWRRWWLWRRWLWLWWLWWLWRRWLWLWRWRRWLWWRRWLWLWRRWLWWLWLWRRWRWWLWLWWWLWWRRWLWLWWLWRRWRWLWLWWLWWRWLWWRRWLWRWRRWLWLWRWLWLWWRWRRWLWWLWLWRWWLWLWRRWRWRWWLWLWRRWLWLWWWLWLWRRWLWWRWWRWRRWLWWLWLWRRWLWWLWLWRRWLWLWRRWRWWWLWRRWLWLWRRWLWLWWLWRRWRWLWLWRWLWRWWLWWLWLWRWWLWRWRWRRWLWLWRWWLWWLWLWRRWRWRWLWLWWLWWWLWWRWWLWWRRWLWLWRWLWLWRRWWLWLWRRWRWLWLWRRWRWLWLWRRWRWLWLWWLWWRWRRWLWLWRWRRWLWLWRWLWLWWRRWLWLWRWLWRRWLWLWWWLWLWRWLWRWWRRWWLWLWWWLWRWRRWLWRWLWLWWLWRRWWWRRWWLWLWRRWLWLWRRWWLWLWRWRRWLWLWWLWRWRWLWWWLWLWRRWLWLWWLWRRWWLWLWRRWLWLWRRWLWLWRWRRWLWLWWWRRWLWLWRRWRWLWLWRRWLWWWWWLWLWWRWLWLWRWRRWLWLWWRRWWWRWLWWRWLWRRWWLWLWWRWLWLWRRWLWRWLWLWWRWLWLWWLWRRWLWRRWWLWLWWWRRWWWWRRWLWLWWWLWLWRRWRWLWLWRWLWLWWRRWWWWLWLWWRWRRWLWWLWLWRRWRWLWLWWWLWWLWLWRRWWWLWWRWWLWRRWRWWLWWLWLWRWWLWRWLWLWRRWRWRWLWLWRRWWLWLWRRWRWLWLWWLWWRRWWLWLWWWLWWRWLWWWRWWWRRWLWLWWLWRRWLWRWRRWLWLWRRWLWWWRRWLWLWWLWWLWRRWLWRWLWWLWLWRRWLWLWWRRWLWLWWRWRRWLWWRWLWLWWLWWRRWLWLWRRWRWLWWLWLWRWLWWRWLWWRRWLWLWRWWLWRRWLWLWRWLWRRWRWLWLWRWRRWLWLWWLWRRWRWWLWWLWLWRRWRWLWLWRWLWRWLWLWWLWRRWLWLWRRWLWLWRRWRWWLWLWRWLWLWRRWLWLWWRRWLWLWRRWRWLWLWRRWWLWLWWRRWWRWLWWLWLWRRWRWRWLWLWRWLWWLWLWRRWWLWLWWRRWWLWLWWRRWLWLWWWWRWLWLWRWRRWLWLWRWRRWLWWRWLWLWRWLWLWRWLWLWRWRRWLWLWWRRWLWLWRRWRWLWWRWLWRWRWLWLWWWRWLWWLWLWRWLWWRWRRWLWLWWLWRRWRWLWWLWLWRRWLWRRWWRWWLWLWWRRWLWLWRWRWLWLWWLWRRWRWLWLWWLWRRWLWLWRRWLWWWLWLWRWLWLWRRWLWWRWLWRWRRWLWRWLWWLWLWRWLWRRWLWLWRRWWRRWLWWLWLWRRWWLWRWLWRWLWWLWLWRRWRWRWLWWLWLWRWRRWLWLWWLWRWLWRWLWLWWLWRWRRWLWLWRRWWWRWLWWLWLWRWWLWLWRRWWLWLWWRRWWLWLWWRRWLWLWRWRRWLWLWWWLWLWRRWRWLWRRWLWLWRWRRWLWLWRRWWLWLWWRWRRWLWLWRRWLWLWWWLWLWRRWLWLWRRWRWLWWLWLWRWRRWLWRWWLWRWLWLWWLWRWWLWRRWWLWLWRWLWLWRRWLWLWRRWLWLWWRWRRWLWLWRWLWLWWRRWLWLWRRWRWLWLWWLWWRWRRWLWLWWLWRWWWLWRRWRWWWLWWLWLWRWRWRRWLWLWRWRWLWWLWLWRRWWLWLWWWWRRWLWWLWLWRRWLWLWWRRWWLWLWWWWRRWWLWLWRRWRWLWLWRWLWLWWRWLWLWRWRRWLWLWRRWWLWLWWRWLWRRWLWWRRWLWLWWWRRWWLWLWWRRWWRWLWLWWLWRWLWLWRRWLWLWRRWRWWRWLWRWWWLWLWRRWLWLWWLWRRWWWLWWLWLWRWWRRWWLWLWWWRRWWLWRRWLWLWWLWWLWRRWRWWLWLWWWLWWRRWLWLWRWWRWRRWLWWLWLWRRWWLWLWRRWWWWRWWLWRRWLWLWWRWLWLWWLWRRWRWLWLWWLWWWRRWLWWLWLWRRWLWWWWWWWLWLWRRWRWWRRWLWWWWWWLWLWWWRWLWLWRWRRWLWLWWRRWLWLWRRWRWLWLWRRWLWRWLWLWWLWRWLWRWLWLWRRWLWLWRRWRWWRWLWLWRWRRWLWWLWLWRWRRWLWWWLWLWRRWLWRWLWLWWLWRWLWRRWWRRWLWLWWRRWLWLWRRWLWLWRWWLWWRWWLWLWWRWLWWLWLWRWRRWLWLWWLWRRWWWWLWRWLWWRWRRWLWWWLWLWWRRWWRWRWLWLWRWWWLWWWLWLWWRWRRWLWLWRRWLWLWWLWWRWRRWLWWLWLWRWLWRRWLWLWRRWLWLWWLWRWRRWLWLWRRWLWLWWLWWRWRRWLWLWRRWLWWLWLWRRWLWLWWWWRRWWLWLWRWWRRWLWLWWLWRRWLWLWRRWRWWWLWLWWWRRWWLWLWWRRWWRWLWLWWLWWRWRRWLWLWRWRRWLWLWRWWWWLWLWRWLWLWRRWLWLWRWRRWLWLWRRWLWWLWLWRRWLWLWRWLWLWRWRRWLWLWWRWRRWLWLWWLWWLWWRWWLWWRRWWWRRWLWWLWLWRRWLWLWRWLWLWRRWWRRWLWLWRRWWLWLWWW WWWLWLWWRRWWLWLWRRWLWLWWLWRRWWRRWLWLWRRWLWRWLWWLWWLWLWRRWLWRWLWWRRWWRWLWLWWLWWWRRWWLWLWRRWWRRWLWLWRWWLWWLWLWRWWRRWWLWLWRRWLWWWLWLWRRWLWLWWLWRRWWLWLWRRWLWRWWLWLWWRWWWLWRRWRWWWLWWLWLWRWRRWLWRWLWLWWLWRWLWRRWRWLWLWRRWWLWRRWLWLWRRWLWLWRRWLWLWRRWRWWLWLWWRRWLWLWRRWLWLWWRWLWWLWLWRWLWRRWWRRWLWLWRWLWLWWWLWWWRWRRWLWLWRRWLWLWRRWLWLWRRWWLWWLWLWRRWRWLWLWRWLWLWRWLWWLWLWRRWRWRWLWRRWLWLWRRWWLWLWRWRRWLWWLWLWRRWLWLWWRRWWLWWLWLWRWRRWLWLWRRWWLWLWRRWLWLWRRWRWLWLWWLWRWWLWLWWRRWWLWLWWWWRRWWWWLWLWWRRWWWLWLWRWLWLWRRWRWRWLWLWRWLWLWRWWLWLWRRWLWLWWLWRRWRWLWLWWWRWLWRWWRWRRWLWWLWLWRRWLWLWWWWLWLWRRWLWLWRRWRWLWLWRWRRWLWRWLWRWWLWLWWRRWWRWLWLWRWRRWLWLWRWLWLWWWLWRRWWLWRWWLWRWLWWWLWLWRWLWLWRRWLWRWRRWLWWWLWLWWRRWLWLWWWRWWWLWLWRRWWRRWLWLWRRWWWWLWLWRRWLWLWWLWRRWRWWLWLWWRWLWLWRWLWLWRWRWWLWWRWLWWRRWLWLWRRWLWLWWLWRRWRWWWLWLWRWLWWLWLWRRWRWLWRWLWRRWRWLWWLWLWRWLWWRRWWLWLWWRRWLWLWRRWRWLWLWWLWRWWRWLWLWRWLWRWRRWLWLWRWRRWLWWLWLWRRWLWLWRRWLWLWWLWRRWRWWRWWLWRWLWLWRRWLWLWRWWWWLWLWWWRWLWLWRWRWLWLWRRWRWRWLWLWRWRWLWLWRRWLWWLWRRWLWLWRWLWWRRWLWRWLWLWRRWLWLWRWLWWLWLWRRWWLWLWWRRWLWLWRRWRWLWLWRWLWLWWRWLWWRRWLWLWRRWLWLWWRRWWLWLWRWWRRWWLWLWRRWWWWLWRWLWLWWLWRRWLWLWRWWRRWWLWLWWWLWWRWLWRRWLWRRWWLWLWRRWLWLWRWLWLWWRRWLWLWWWLWRRWWWRWRRWLWWLWWLWLWRRWWLWLWRRWRWRWLWLWRWLWLWWWRRWLWRRWLWLWRRWLWWRWLWLWWLWWRWLWWWLWRRWWRRWLWWLWLWRRWLWLWWRWRRWLWLWRRWLWLWRRWWWLWLWWWRRWWWLWLWWRRWWRWLWLWWRWWLWLWRWLWLWRRWLWLWRWLWLWRRWWRRWLWRWLWLWRRWWWRWLWLWWLWWRRWWLWWWLWLWWRWRRWLWWWLWLWWRRWWRWWLWLWRRWLWLWWLWRWLWWWWRRWLWLWWLWRRWRWLWRRWLWLWRWRRWLWLWRRWLWLWWWLWLWRRWRWWLWRWWWLWWWLWLWRWLWLWRRWRWLWLWRWLWRRWLWRRWWLWLWRRWWLWLWWRWLWWLWLWRRWLWLWRRWRWWRWWRWLWLWRWLWWLWLWRRWLWLWRWWWWLWLWRWWWLWRWLWRRWRWLWLWWLWRWRRWLWLWRWLWLWRRWLWLWRRWLWLWRRWRWLWRWRRWLWLWWRWLWWLWLWRRWRWLWWLWLWRRWWRRWLWLWWLWRWRWWWWLWRWWLWLWWWLWRRWWLWLWWRRWLWLWRWRRWLWRWLWWLWLWRWLWRRWLWLWWWRWLWLWRWWWRRWWWLWLWWWWLWRRWRWWLWWLWLWRRWLWLWRRWLWLWWRRWWLWLWWWLWRRWRWWWLWLWWRRWLWWLWLWRRWLWRWLWRWLWLWRRWLWLWRRWWRWRRWLWLWWLWRRWLWRRWLWLWRWLWWRWWLWRWWWWLWLWWRRWWLWLWWWLWRRWLWLWRWLWRWWWLWLWRWRWWLWRWLWWRRWWLWWLWLWRWRRWLWRWWLWLWWRRWLWLWRWRRWLWLWRRWLWLWRRWRWLWLWRWRWLWLWRRWLWWLWLWRRWWWLWLWWWRRWLWLWRRWRWLWLWRWWLWLWRRWRWLWLWRWLWRWWLWWLWLWRRWLWLWRRWLWWLWLWRWRRWLWRWLWLWWLWRRWRWWLWLWWWRWWWLWWRRWWLWLWRRWLWLWWLWRRWRWLWLWRWRRWLWWLWLWRRWRWRWLWLWWLWWRRWWRWLWLWRRWLWWWLWRRWLWLWWWLWLWRRWLWLWWRWRRWLWLWRRWLWLWWLWRWWWRRWWWLWLWRWLWLWRWRRWLWLWRRWWLWLWRRWRWWLWWWWLWLWWWRRWLWLWRRWRWLWWLWLWRRWLWLWWWWRWLWLWRWLWRRWWRRWLWLWWRRWLWRWLWLWWLWRRWRWWLWWLWLWRWRRWLWLWRWRRWLWWLWLWRRWWWWLWLWWRRWLWLWWLWRWRWLWLWRWLWWWWRWRRWLWLWWLWWLWRWLWLWRRWWLWRRWWRRWLWLWRWLWLWRWLWLWRRWRWWRRWLWLWWLWWLWWWRWRRWLWLWRRWLWWLWLWRRWRWLWLWRRWLWRRWWLWLWRRWLWLWRWWLWLWRRWLWLWWWLWLWRRWRWLWWLWRRWWRRWLWWLWWLWLWRRWLWRRWWRWWLWLWWRRWWLWWLWLWRRWWLWRWLWLWWLWRWRRWLWRWWRWWLWLWWRRWLWWRWLWLWWWLWLWRRWLWLWRRWLWRRWWWLWLWWRRWWLWLWRRWLWLWWLWRRWWLWLWWWRRWLWLWWRWRRWLWLWWLWRWLWRWRRWLWRWLWWRWRRWLWLWWLWRWLWLWWRRWWLWLWWRWLWLWWRWRRWLWLWWLWWLWRWRRWLWLWWRWWLWLWRRWWRRWLWLWRRWLWRRWLWWLWLWRWWLWLWRWLWRRWRWLWLWRWRRWLWLWRRWLWLWRRWWWLWLWWWWLWWWRRWWWLWLWRWLWLWRWRRWLWLWRRWWRWLWRWWLWWLWLWRWWLWRRWRWWLWWLWLWRWRRWLWRWWLWWWRWLWLWRRWLWWLWLWRRWRWLWLWWLWWWRRWLWLWRWLWLWWRRWWLWLWWRRWLWLWRRWWLWRRWRWLWLWRWWRWLWLWRRWLWLWWLWWWWWWWWRWLWLWRRWLWLWRWRRWLWLWWLWRRWRWWWLWLWWWRRWWWWLWLWWWRRWWLWLWWWLWRRWWRRWLWWLWLWRRWRWLWRWLWRWRWLWLWWRRWLWLWWLWRRWLWLWRRWLWLWWLWRRWWLWLWWWLWRWRRWLWLWRWLWRRWRWLWWWWRWWRRWLWLWWLWWWLWLWRRWLWLWRRWRWWLWLWWRRWLWRRWLWLWRRWLWWRWLWLWWLWRWLWLWRRWRWRWLWLWWLWWRRWLWWLWLWRWRRWLWLWWRWLWWLWLWRWLWRWLWRRWLWLWRRWRWWLWLWWWRRWWWWLWRWLWLWRWLWLWWRWRRWLWLWWLWRRWLWLWRWRWLWLWRRWLWLWRRWLWWWWRRWWLWRRWLWLWRRWLWWWRWLWLWRWWLWLWRRWLWWLWLWRRWLWLWWRRWLWLWRWWRRWWLWRWLWLWWLWRRWLWLWRRWWRRWLWLWRWRRWLWLWWLWWRRWLWRRWLWLWWLWRRWWWWLWLWRWLWLWRRWRWWLWWLWLWRRWLWLWRRWRWWLWLWWWLWWWWRRWWLWWLWLWRWRRWLWLWRRWWRWWLWWRWWLWLWRRWWLWRWLWLWRRWLWLWRWLWLWWRWLWLWRRWWLWRRWRWLWLWRRWWLWLWWRRWLWWLWLWRRWWLWWLWLWRRWLWLWRWRRWLWLWWLWRWRWLWLWRWWRRWWLWLWRRWWLWLWRWLWLWRWLWRRWRWLWLWRRWWRWLWRWWLWLWRWLWLWRRWWRRWLWLWWLWWLWRRWWLWLWWRWLWWLWLWRWRRWLWLWRWRWLWRRWRWLWLWWWWLWLWRRWLWLWWLWRRWRWWLWLWWWRRWWLWLWRWLWLWRRWLWWRRWWWRWLWWRRWLWLWWWLWLWRRWLWLWRRWLWLWRWLWLWWRWRRWLWLWRWWLWLWRWLWLWRRWWRWLWLWRRWRWLWLWWRRWLWLWRRWLWWLWRRWLWLWRRWLWLWRWLWRWLWLWRWRWWLWRWRWLWLWRRWRWRWLWLWRWWLWLWWWRRWWLWRWLWLWWLWRWWLWRRWRWLWWLWLWRWLWRWLWLWRWRRWLWLWWLWRRWRWLWRRWLWWLWLWRWLWRWRRWLWWLWLWRRWWWRRWWLWRWLWLWRWWLWLWRRWWLWWLWLWRWWLWRRWLWLWRRWRWWWLWLWRRWWRWLWLWRRWLWLWRRWRWLWWLWLWRWWLWLWRRWRWLWLWRWWLWLWWWRRWWWRWLWLWRRWLWLWRRWLWLWRWWLWLWWWRRWWLWLWRWRWWLWLWWWWLWLWRWRWLWRRWRWLWLWRWRWLWLWWLWWWRWLWLWRRWWWRRWLWLWRWLWLWWWRRWWLWLWRWWRRWLWLWWWLWLWRRWRWLWLWWRWWRRWLWRRWLWLWWRWWWLWLWWRRWLWLWWLWRWLWRWLWRRWRWLWLWRRWWLWLWWRRWWLWLWWRRWWRWLWWWLWLWWRWLWRRWWWRRWWLWLWWRWRWLWLWRWLWLWRRWWLWLWRWLWLWRRWWLWLWWWRWRRWLWWLWLWRRWWRRWLWLWRWWLWLWWWRRWWWWLWLWRWLWLWRWWRRWWLWLWWRWWRWLWLWRRWLWLWWLWRWLWLWRWWRRWWLWLWWRRWWWRWLWRWLWLWRWWLWLWWWRRWWLWRRWLWWRRWLWLWRWWLWWLWLWRRWLWLWRWRRWLWWLWLWRWLWRWLWLWRWRRWLWLWWWLWRWWRRWLWLWWLWRRWWLWLWWRRWWRWLWLWWLWRWLWLWRWRRWLWLWRRWLWLWWLWRWRRWLWLWRWRRWLWLWRRWLWLWRRWLWLWRWLWLWWRRWWLWLWRWLWLWRWLWRWRRWLWRWLWWLWLWRWLWRRWRWLWRWLWLWRRWLWLWRRWWWLWLWWWRWLWRRWLWLWRRWRWWLWLWRWLWLWRRWRWLWLWRWRWRRWLWLWRWWLWLWWRWRWWLWWWLWWLWLWRWRWRRWLWLWRWRWLWLWRWWRWLWLWWLWWRWWLWLWWRWRWRRWLWLWWLWRRWLWWLWLWRWLWWRWLWLWRRWRWLWLWRWRWRRWLWLWWLWRRWRWLWLWRRWLWLWWLWRWLWLWRWWLWWRRWLWLWRRWRWLWLWRRWWLWLWWRRWWRWLWLWRWRWLWLWRRWLWLWWLWRRWLWLWWLWRWRRWLWWLWLWRWLWRWWRRWLWLWRRWLWLWRRWRWWLWLWWRRWLWLWWRRWLWLWWLWWLWRRWLWLWRWRRWLWWLWLWRRWWRRWLWLWRRWWLWLWWRRWWLWLWWRWWRRWWLWWLWLWRRWLWLWRRWRWLWLWRRWLWLWRRWLWLWWLWRRWWLWLWRRWRWLWLWRWWLWWLWLWRRWWRWRRWLWLWWLWRRWRWLWLWWLWWRWWLWLWRWLWWLWLWRRWWWWLWRWLWWLWLWRRWRWRWLWLWRWLWRRWLWLWWRRWWLWLWWRRWLWLWRWRWRRWLWLWWLWRRWRWLWLWWLWRRWRWLWLWRRWLWLWRRWLWLWRWLWWWLWLWWRWWWWWLWRRWRWWWWLWLWWWWRRWLWLWRRWWRRWLWLWWWRWLWLWWLWRRWWRWWLWLWWRRWLWWLWLWRRWRWLWLWRWLWLWRRWLWLWWWLWLWRRWWWRWRRWLWLWWWLWLWRWLWWRWRRWLWLWWLWWRRWLWWWRRWLWLWRRWRWLWWLWLWRWRRWLWWLWLWRWRRWLWRWLWLWRWLWLWWRWLWWLWRWLWRRWLWLWRRWWRRWLWWLWLWRRWWWRWLWWLWLWRRWRWLWRWWWLWLWRWWWLWRRWLWWLWLWRRWLWRWLWLWWWLWLWRRWWLWRWRWLWLWRRWRWRWLWLWWRRWLWLWRWWLWLWWWRRWLWLWWLWWRWWRRWWLWWLWLWRWRRWLWLWRRWWWWLWLWWWWWLWWRWWRRWWLWWLWLWRRWRWWLWLWWWLWWRWLWRRWLWLWRWWRRWWLWLWRWLWLWRRWRWRWLWWWLWLWWRWLWWRRWWRWLWWLWLWRRWWWLWLWWWWRRWWLWLWWWLWRWRWRRWLWLWRWWLWLWWWRRWWLWLWRRWRWLWRWLWRWLWLWRRWLWWRRWLWLWRWLWWWLWLWWRRWLWLWRRWLWLWWWRRWWLWLWRRWRWLWRWWLWLWWWLWRRWLWRRWWWWWLWLWRRWWWLWWLWLWRRWLWLWRWWLWRWWRRWWLWRWWLWLWWRRWLWLWRWLWLWWWRWRRWLWLWWLWWRRWWRWLWRRWLWLWWLWWLWRRWRWWLWLWRRWLWRRWLWLWWLWWWWLWLWWRRWLWRRWLWLWRRWWRWWWLWWLWWLWLWRRWRWWLWLWWRRWLWLWRRWLWWLWLWRWLWRRWLWLWRRWLWLWRRWWLWLWWWRRWLWLWRWRWWLWWLWLWRRWLWLWRRWWRRWLWLWRRWLWLWWLWRWLWLWRRWLWLWRRWRWLWLWRRWLWLWWRRWWLWLWWRRWLWLWRRWLWRRWWLWLWWWWWLWRRWRWLWLWRRWRWLWLWWLWRRWRWWLWLWRRWLWLWRRWLWLWRRWLWLWRRWLWLWRRWLWLWRWLWLWRRWWWLWLWWWWLWRRWLWLWRWWWRRWWWLWLWWRRWLWWLWLWRWLWRRWLWWLWLWRRWWLWRRWRWLWLWRRWWLWLWWRRWWRWLWLWRRWLWLWRWRWWLWLWRRWLWWLWRRWLWWWRWLWWLWLWRRWRWWWLWLWRWLWLWRWRRWLWLWWLWWRRWWLWLWRWLWLWRRWLWLWWRWWWRWLWWLWRRWLWRRWWWRWLWLWRRWLWWLWLWRWWRRWWLWLWRWLWLWRRWLWLWRRWLWLWWLWRWLWWRWRWLWWLWLWRRWRWLWLWRRWLWLWRRWLWLWRRWRWWLWLWRRWRWLWWWRWLWLWWRWLWRWLWLWWLWRRWLWLWWRWRRWLWWLWLWRWLWRRWLWRRWWLWLWWRRWWWWLWLWWWRRWLWRWRRWLWLWWWLWLWRRWLWLWWWWWLWLWRRWLWRRWLWLWRWLWLWRWRRWLWLWWRRWLWWLWLWRWWRRWLWLWRWWW
+WRWLWWLWLWRRWRWLWWLWLWRRWLWRRWLWLWWLWWLWRWRWLWLWRWRRWLWRWRWLWLWRWLWLWWWRWLWLWWRRWWWRRWLWLWRRWWLWWLWLWRWWRRWWLWLWRRWWLWLWWRRWWLWLWRRWLWLWRRWLWLWRRWLWLWRRWWLWWWLWLWRWLWLWRRWRWRWLWLWWLWWWWWWRRWWWWWLWLWWWRRWWLWLWWRRWWRWLWLWWLWWRRWLWWLWLWRWLWRWLWWRWRRWLWWLWWLWLWRRWLWRRWLWLWRRWLWRRWWLWLWWWLWWRWRRWLWWLWLWRRWRWWWLWLWWWRRWWLWLWWRRWWRWLWRWLWWWWLWLWWWRWLWRRWRWLWWWLWLWRWLWLWRRWWLWLWRWRRWLWLWWWLWLWRRWWRRWLWLWRRWWLWLWWRRWWRWLWLWWRRWWLWLWWRRWWLWLWRRWWLWLWRRWWLWLWRRWWLWLWRWLWLWRWLWRRWRWLWRWWLWLWWWRRWWWRWLWLWRWWWLWLWRRWLWLWWLWRRWLWLWRWRRWLWLWRRWLWLWWWLWLWRWRWWRRWWLWLWWRWWLWLWWRWRWLWWLWLWRRWWWLWLWWRRWLWLWWWLWLWRRWWRRWLWWLWLWRRWLWRRWWRWLWLWWLWWRWWRWLWRRWRWLWWLWLWRWLWRRWRWLWLWRWWLWLWWWRRWWWLWWLWLWRWWRRWLWRRWLWLWRWRWLWLWWLWWWWLWRWWLWLWRWRWLWRRWRWLWLWWWLWLWRWRRWLWLWRRWWLWLWWWRRWWWLWLWWRWLWLWRRWRWRWLWLWRRWLWRWWLWRRWLWWLWLWRRWWWLWLWWWWRRWLWLWWLWWRRWLWLWRRWLWLWWRRWWRWLWLWRWRRWLWLWWRRWWWLWLWRWLWLWRRWLWLWRRWLWRRWWLWLWRRWRWLWLWWLWRRWRWLWLWWWWLWLWWRWWRRWWLWWRWLWLWWLWWRRWWLWWLWLWRWRWLWWLWRRWRWLWLWWLWRRWWLWLWRWLWRWWLWRRWWRRWLWLWRRWLWLWRWLWLWWRRWLWLWWLWRRWLW WLWRRWLWWRWLWLWWLWWRWLWRRWWRRWLWLWWLWRRWWLWLWWRRWWRWLWLWRWLWLWWRRWWLWLWWWLWRWRRWLWWLWLWRRWRWRWLWWWWLWRWLWLWWLWRWWRRWLWWLWLWRWWRWRRWLWLWRRWLWLWRWRWWLWLWWRRWLWLWRWWLWLWWRRWWWRRWLWLWWLWWWLWLWRRWLWLWRRWLWLWRWWLWRRWLWLWRWRWWLWLWWRWRRWLWWRWRWWLWLWWRRWLWWWLWLWWRRWLWLWWWRRWWLWLWWRWLWLWWRWLWWRRWWRWLWLWRRWLWLWRRWWLWRRWWLWLWRRWLWLWWLWRRWRWWWLWRWLWWWWRWLWLWRWWLWLWWWWWRRWLWLWWLWRRWLWRWRRWLWWLWRRWLWRWLWLWRRWLWLWWLWWRRWLWLWWWLWRRWLWRRWWLWLWWRWLWLWRRWWRWLWLWWLWWRWLWLWRRWRWWLWLWWWRWRWRRWLWLWWLWRWRRWLWLWRWRWLWLWWLWWRRWLWLWRRWLWLWWLWWRRWWRWWLWWLWLWRWRRWLWLWRRWWRWWWWLWLWWWWRWRRWLWWLWLWRWLWRWRRWLWRWLWRWLWWLWLWRWLWRWLWRRWRWLWRWLWLWRWRWLWLWRWLWWWLWLWWRRWWLWLWWRWWRRWWLWLWRRWLWLWRRWLWLWRWLWLWWWRRWLWLWRWWRRWWLWLWRWRWLWLWWLWWRRWWRWWRWRWLWLWWLWWWRRWLWLWRRWWLWLWRRWWLWLWWWLWRRWRWWWLWRWLWLWWLWRRWWLWLWWRWRRWLWWLWRRWLWWLWWLWLWRRWLWWLWRRWLWRRWWWWLWLWWRRWLWLWWWLWLWRRWRWLWLWRRWLWLWRWLWLWWRRWWWWLWRRWRWLWRRWLWLWWLWRRWRWLWLWRWWWWWRWLWLWRWLWLWWRWRWWLWLWRWLWLWRRWLWLWWWRWRRWLWLWWLWRWRRWLWLWRRWWWLWLWWRRWWLWRWLWLWWLWRRWLWLWRWLWRRWWLWLWWWWRRWWWLWLWWWRRWWLWLWWRRWLWLWWWRRWLWLWWRRWLWLWWLWRRWRWWRWLWRWLWLWWLWRRWWRRWLWWLWLWRWLWRRWRWLWWLWLWRWLWWRRWWLWLWWRRWLWLWRRWWLWLWRRWRWRWLWLWRWWLWWLWLWRWWWRRWWWLWLWWRRWWLWLWRWRWLWLWWLWRRWRWLWWLWLWRRWRWLWRWLWLWWRWLWWLWLWRRWLWLWWRRWLWRRWLWLWWWLWLWRRWWRRWLWLWWLWWRRWLWRRWLWLWRRWWWLWLWWWWLWRWRWLWLWRWLWRRWRWLWLWRRWWRWLWLWRWWWWLWLWRRWRWWLWWLWLWRRWLWLWRWLWWWLWRWWWRWLWLWRWRWRRWLWLWRWRWLWWLWLWRRWRWLWLWRWWLWRRWLWRWLWRWWLWLWRWLWLWRRWRWRWLWLWWLWRWLWLWRRWLWWLWLWRWRWWLWLWWRWRRWLWWWLWLWWRWRRWLWLWRWLWLWRRWWLWLWWWRWRWRRWLWLWWLWWLWWRRWLWLWRWRRWLWLWRRWLWLWWLWWRRWLWLWRRWWRRWLWLWRWWLWLWRRWRWWLWLWRWWLWLWWRRWWWLWLWWRRWWRWWLWLWRRWWLWLWRWLWLWRWLWRRWWWRWLWLWWLWWWWWRWLWLWRRWWLWLWWRWLWRRWLWLWRRWLWLWRRWLWLWWRRWLWLWRRWRWLWLWRRWWWWWLWLWRWRRWLWLWRWLWLWWWLWWRRWWLWLWWRWWRRWWLWLWWRWWRRWWLWWLWWLWLWRRWRWRWLWWLWLWRRWLWLWRRWRWLWRRWLWLWWRWLWLWRRWRWLWLWRWLWWWLWLWWRWRRWLWWLWLWRWRWRRWLWLWWWWLWWWLWLWWRWRRWLWLWWRRWWLWLWRRWWWLWLWRWLWLWRWWLWRWWLWLWRRWLWRRWWLWLWRRWLWLWRRWLWRRWLWLWRRWRWLWLWWWLWLWRRWWLWLWWRRWLWLWWRWRRWLWWRWLWLWWLWWRWLWWRRWLWLWRWRRWLWLWRRWWLWWLWLWRWRRWLWRWRWLWLWWRWWLWLWWWLWRRWLWLWRWLWRRWRWLWLWRWRRWLWWWLWLWWRRWLWLWWRWWWRRWWWLWLWWWRWRRWLWLWRRWLWWLWLWRRWWLWLWRRWLWLWWLWRRWLWLWRRWLWLWRRWRWWLWLWRRWRWLWLWRRWLWRWLWLWWLWRRWLWLWWWWWLWRRWRWWWWWRWLWLWWLWWRRWLWLWRRWWRRWLWLWRWLWLWRWLWLWRRWLWLWWWRRWWWRWWLWWLWLWRRWLWLWRRWLWLWRWWLWLWWRRWLWLWRWWWLWRRWLWLWRWLWLWRWRRWLWLWRRWLWLWRWRRWLWLWRWRRWLWWLWLWRWLWRRWWRRWLWLWWLWRWWWWLWLWWWWWWWRRWWWLWRRWLWWWLWLWWRRWWRWLWLWWLWWRRWLWLWWLWRWRWLWLWWRWRRWLWLWWLWRRWRWWLWLWWRWRRWLWLWWLWRRWRWWLWLWRRWLWRWLWLWRWWLWLWWWRRWWWLWLWWRRWWRWLWRRWLWWLWLWRRWWWLWLWWRWLWLWRWRRWLWLWRRWLWLWRRWLWLWWWLWLWRWWWRWLWWRWLWLWRWLWRWRRWLWLWRWRRWLWLWRRWLWLWRWRWLWLWWLWRRWLWLWWLWRWWWLWWRWRWRRWLWLWWRWWWLWLWWWRRWLWWLWLWRWLWWRRWWRWLWRWLWLWWLWRRWRWWLWLWWRRWWRWLWLWRRWRWLWWWLWLWWRWRRWLWWLWLWRRWLWLWWWWLWLWRRWRWRWWWLWLWWWRRWLWLWRRWRWLWWRWLWLWRWWLWRRWLWLWRWLWLWRRWLWLWRRWLWLWWLWWRRWLWLWWRWRRWLWWLWLWRRWRWWLWLWRRWLWWLWLWRWLWRRWLWLWWWWRWRRWLWLWRWLWLWRWRRWLWLWRRWWRWLWLWWWWLWLWWRWWRWWRRWWLWWLWLWRWRRWLWLWRWLWLWWWRRWLWRRWLWWRWWLWWLWLWRWRRWLWLWRRWLWLWRRWLWRRWLWWLWLWRWLWWLWRWLWWWRRWWWRWLWLWWLWRRWWRWRRWLWLWWWWLWWLWLWRWRRWLWLWRRWWWLWLWWWRWWLWRRWLWLWWLWWLWRWWRRWWLWWLWLWRWRRWLWLWWWRWRRWLWWWLWLWRRWRWLWLWRWRWLWWLWLWRWLWWRRWWLWLWRWWLWLWRWLWLWRRWRWLWLWWLWRRWWLWRRWRWLWLWRRWLWLWWLWRRWLWWLWLWRWLWRRWLWWRRWWLWLWWWRRWWWRWLWLWRWRWWLWLWWWWLWLWRWWRWLWLWRWRRWLWWLWLWRWLWRRWWLWRRWLWLWRRWLWRWRRWLWLWRRWLWWLWLWRWLWWWLWWWRRWWWWLW
+WWRWLWLWRRWLWLWWLWWRWLWLWRRWWWRWRRWLWLWRRWLWLWRWLWLWRRWLWLWRRWWLWLWWRWLWLWWWRWRRWLWLWRRWLWLWRWRRWLWLWRWWRRWLWLWWLWWLWRRWWRWLWLWRWLWLWRWLWLWRWRWLWLWRWLWRWWRWRRWLWWLWLWRRWWLWWLWLWRWRRWLWLWWLWRRWRWWWRWLWRWLWLWRWLWLWWRRWLWLWWWWWRRWLWRRWLWWLWRRWLWWLWLWRWRRWLWLWRWLWLWWWLWRRWLWLWWRRWLWWLWRRWWWRRWWLWWLWLWRRWWWWLWLWWRRWWLWWLWLWRWRWLWLWWRWRWWLWLWRRWRWRWWLWLWWRWLWLWWWRRWWWRWWLWLWRWLWLWRWLWWWRRWWLWLWWWLWRRWRWWLWLWWRRWWRWLWRWLWLWWWRWLWLWWLWWRRWLWRWRRWLWLWRWLWLWRWLWLWRWLWWRWRRWLWLWRRWLWLWRRWLWLWRWRRWLWRWLWLWWLWRRWLWLWRWLWLWRRWRWRWLWLWRRWWWLWLWWRRWWWLWLWWRWRRWLWLWRRWLWWLWLWRRWLWLWWWRRWLWLWWLWRRWLWLWWLWRRWLWLWRRWLWRRWLWLWRRWWLWWRWLWLWRWLWLWWWRWRRWLWLWRRWLWWLWLWRRWLWWLWLWRWWRWLWLWRRWRWLWLWRRWRWWLWWLWLWRRWLWLWRRWRWLWLWRWRRWLWWWWWLWLWWWWRRWLWLWWRRWWRWLWWWLWWLWLWRWRRWLWWLWLWRWWWRRWLWLWRWRRWLWRWLWWLWLWRWLWRRWRWLWLWRWLWLWRRWWWLWRWLWWLWLWRRWLWLWWRWRRWLWLWRRWLWLWWWLWLWRWRRWLWLWWRRWWLWLWRWLWLWRRWRWWRRWLWLWRWLWLWWRRWWLWLWWRRWWRWLWWWWLWLWWWRRWLWLWWWWRRWWLWLWWRRWWLWLWWRRWLWLWRRWRWLWLWRRWWLWLWRWLWLWRRWWRRWLWWLWLWRRWRWRWLWLWRWLWLWWRWLWLWRRWLWLWWWWRRWWWLWLWRWLWLWRWRWRRWLWLWRWLWLWRWLWLWRW WLWRWLWLWRRWRWWLWWRWRRWLWLWWLWRWLWLWRRWLWLWWWLWLWRRWWLWRWLWLWRRWRWWRRWLWLWRWLWLWWRWRRWLWWWWLWLWWWRRWWWLWLWRRWLWLWWLWRRWRWWLWLWWWLWRWLWLWRRWRWRWLWLWRRWWWWLWLWRRWRWLWLWRRWRWLWWLWLWRWLWRRWLWLWRWLWLWWRRWLWLWWWRWLWLWRWLWRWRWRRWLWLWRWLWLWWWLWWRRWWRWLWRWRRWLWLWWWLWLWRRWRWWLWLWRRWLWLWWLWRWRRWLWLWWLWRWLWLWWRWWWWLWRRWRWWWWLWLWWRRWLWLWWLWRRWLWLWRRWRWWWRWLWLWWLWRRWRWLWWLWLWRWRRWLWLWRWLWLWWWLWRWRRWLWLWWLWWRRWLWLWRWRRWLWLWRRWWLWWLWLWRWRWRRWLWLWWLWRRWRWLWLWWRRWWWLWWLWLWRRWLWLWRRWLWLWRWLWWLWRRWLWLWRRWWRRWLWLWRWWRRWWLWLWWRWLWWLWWLWLWRRWRWWLWLWWWWWRRWLWLWWLWRRWRWLWLWRRWRWLWLWRRWWLWWWWWLWLWWWWRRWWWWLWWWLWLWWRWRRWLWLWRWLWLWRWLWLWRRWRWLWWWRWRRWLWLWRRWLWWWLWLWWRRWWWRWLWLWWWWWLWLWWWRRWWWWLWLWWWWRWWWWRRWWLWLWWRRWWWRRWLWLWWLWWLWWRRWWLWWLWLWRRWLWLWRRWRWWLWLWWWLWWWRWRRWLWLWRRWLWWLWLWRRWRWWLWLWRWLWLWRRWWRRWLWRWLWRWLWWRWLWLWRRWLWLWWWLWLWRRWWLWLWWRWRRWLWLWWRRWWLWRWLWLWRWLWLWWRWRWLWLWRRWLWRRWWRWLWLWWLWWRRWWLWLWRRWRWLWWLWLWRRWLWLWWWRWLWLWWRWLWRRWRWLWWLWLWRRWWRWRRWLWLWWLWRWLWLWWWRRWLWLWRRWWRRWLWLWWRWRWLWWLWLWRRWLWLWWWWLWRRWRWLWRRWLWWWLWRWLWRWLWLWWLWRRWLWLWWRWRRWLWLWWRWLWLWWRRWWLW
+WWWWWWWWLWLWWRWLWLWRWWRWLWLWRWRRWLWLWRRWWRWLWWLWLWRRWWRWLWLWRRWLWLWWLWWWRWLWLWRWRWLWWLWLWRRWRWRWWRWLWLWRWRWLWLWRWRRWLWLWWLWRRWWLWLWWRRWWLWLWRWLWWLWLWRRWRWRWWLWLWWWWLWLWRRWLWRRWLWLWRRWLWLWRRWLWLWWLWWWWLWRRWLWRWRRWLWLWWLWRRWRWWLWLWRRWLWWLWLWRWLWRRWLWLWWWRRWWLWLWWRWRRWLWLWRRWLWLWWLWWRRWWLWLWWRRWLWLWRRWRWLWLWRWWRRWWLWWWLWLWWRRWLWLWRRWRWLWRWLWWLWLWRWLWRRWWRRWLWLWWWLWLWRRWLWLWWRRWWRWLWLWWLWRRWLWLWWLWRRWLWLWRWLWRWWWWRRWWWWLWRWLWLWWLWRWWWRRWWWLWLWWWRRWLWLWRRWLWLWRRWRWWLWWWLWLWWRRWWRWLWLWRWRRWLWLWWWLWLWRWLWRWLWLWRWWWRRWWLWLWWRRWWRWLWLWRWRWLWRWLWLWRWLWLWWRWWLWLWRWWWWWLWRWRWRRWLWLWWRRWLWWLWLWRRWLWLWWWLWRRWWRRWLWWLWWLWLWRRWLWRRWWRWWLWLWRRWWWLWLWWWWLWRRWLWRRWWWWWLWWLWLWRWWWRRWWWLWWLWLWRWWRRWLWLWRRWRWLWLWRWWWLWLWWWWRRWLWLWWLWRRWLWRWLWLWWLWRRWRWLWLWWLWWRWRRWLWWLWLWRWLWRRWRWLWLWWLWRRWLWLWWRRWLWLWRRWLWWLWLWRRWRWRWLWLWRRWRWLWWLWLWRRWLWLWRRWWRRWLWLWWWWWLWLWWWRRWLWLWRRWLWLWRRWRWLWLWRWRRWLWLWRRWWLWLWWRWLWLWRWLWLWRRWWLWRWLWLWWWLWLWRRWRWLWRRWLWWLWLWRRWRWLWLWRRWWLWLWRWWLWWWLWWLWLWRWRRWLWLWRRWLWWRRWLWWLWLWRRWLWLWWRRWLWLWRRWRWLWLWRRWWLWLWWWRRWWWRWLWLWWLWWWRWWLWLWWRWLWRRWRWLWLWRRWLWLWWRRWLWLWRRWRWLWLWRWRRWLWLWRWWLWWLWLWRWWRRWWLWLWWRRWWWLWLWRWLWLWRRWLWLWRRWWRRWLWWLWLWRRWRWWLWWWWWLWLWWWWRRWWLWLWWRRWLWRRWLWRWLWLWWLWRWWLWLWRRWLWLWWRRWLWLWRWWRRWWLWLWWRRWWLWLWWRRWWRWLWLWRWWRWWLWWLWWLWLWRRWWLWWRRWWLWWLWLWRWRRWLWWLWLWRWLWWRRWLWLWRRWWLWLWWRRWWLWLWWRRWWWRRWLWWRWLWLWRWLWLWWWRWLWRRWRWLWWWWRWLWWLWLWRRWLWRWLWWLWLWRRWLWLWWRRWLWLWRRWRWLWLWRWLWLWRWLWLWRWRWRRWLWLWWLWRRWLWRRWWLWRWLWLWWLWRRWLWLWRWLWRRWRWLWLWRRWWWWWLWLWWRRWLWLWWLWRWWRRWWLWLWWRRWWWLWLWWWRRWWWWRRWLWLWWRRWLWLWRWWLWWLWLWRRWRWLWLWWLWWRRWWWLWWLWLWRWRWLWLWRRWLWRRWWRWLWLWWLWRWLWLWRRWRWLWLWWLWWRWWRRWLWLWWLWRWWRWRRWLWLWRRWLWLWWWLWLWRRWLWLWRRWRWLWLWRWRWLWLWRRWWRRWLWLWRRWWLWLWRWLWLWRRWWWLWWLWLWRRWRWWLWLWWRWLWLWWRRWLWLWWLWRRWWWRWRRWLWLWRRWLWLWWWLWLWRWRRWLWLWRRWWRWLWLWRWLWLWRRWLWLWRWLWLWWRWWRRWWLWLWWRRWLWWLWLWRRWRWRWWLWLWWRRWLWLWRWRRWLWWLWLWRRWWLWLWWWRWRRWLWWWLWLWRWLWLWRRWWLWLWRRWLWLWRWLWLWRWRRWLWLWWLWRWRWLWLWRWWRRWWLWLWWRRWWWLWLWRWLWLWRRWWLWLWWRRWWLW WWLWLWRRWLWLWRRWRWWWLWWLWLWRWRRWLWLWWLWRRWWRRWLWLWRRWLWLWRWRRWLWLWRWLWLWWRRWLWWLWLWRWWWLWLWRWLWLWRRWRWLWLWRWWRRWWLWLWWRRWWLWRRWLWLWRRWLWLWRWWLWLWWRWRRWLWWWWLWRWLWLWRRWLWLWWLWRWLWLWRRWWRRWLWLWWWLWWRWRWWLWLWWWRWRWRRWLWLWWWLWLWRRWRWWRWWLWLWWRWWWWLWWLWLWRWWRWRRWLWWLWLWRRWWRWLWWLWLWRRWLWRWLWLWWLWRWRRWLWLWRWLWLWRWLWLWRRWWRWLWLWWWRRWWLWLWWRWWRWRRWLWWLWLWRRWLWLWRRWLWLWWLWRRWRWWLWRRWWLWLWWRWRRWLWLWRWLWLWWRRWLWLWRWRWLWWWLWRWLWLWRRWLWLWWLWWRWRRWLWLWRWRRWLWLWRWWLWLWWWRRWWLWLWWWLWWRRWLWWLWLWRWLWRRWRWLWLWRRWLWLWRWRWLWLWRRWLWLWWRWRWWRRWWLWLWWWRRWLWWLWLWRWLWWLWRRWRWLWRRWLWWRRWLWLWRWWLWLWRWLWLWRRWWWLWLWWWRRWLWRRWLWLWWLWWLWRWRWLWLWRRWWLWLWRRWLWLWWRRWWRWLWLWRRWRWLWLWRRWWLWLWWRRWWWLWLWRWLWLWRRWWRRWLWLWRWWLWLWRRWLWWWLWLWWRWWLWLWRRWWLWWRRWLWLWRRWRWLWWLWLWRRWLWWLWLWRWRRWLWLWWLWRRWWRWLWLWWLWWWRRWLWLWWLWRWRRWLWRWLWLWRWWRRWLWLWRRWRWLWLWRWLWLWWWRRWLWLWRRWLWLWRRWRWWLWLWRWLWLWRRWRWRWLWLWWLWWRWWWLWLWWRRWLWRRWLWWLWLWRRWLWLWRWLWLWRWLWRRWLWLWWRWRRWLWWLWLWRRWLWWLWLWRRWLWLWRRWRWWLWLWWRRWWWRRWLWLWRWRRWLWLWWLWRRWLWWLWLWRRWRWLWLWRWWLWWWRWLWWLWLWRWLWWRWLWLWRRWWWRWRRWLWLWRRWLWLWRWLWWLWLWRWRRWLWLWWWLWLWRRWLWRWWLWLWWRRWWWRRWLWLWRRWWWLWWLWLWRRWLWLWRWRRWLWLWRRWWWLWRRWLWLWRWRRWLWLWWLWRRWLWWLWRWLWLWWLWRRWRWLWLWRRWWLWWLWLWRRWWLWLWWRWRWLWLWWLWRWRWWWWWLWLWRRWWRRWLWLWRWRRWLWWLWLWRWRRWLWWRRWLWLWWWWLWLWWRRWLWLWRRWLWLWWLWRWRRWLWLWWWLWRRWRWWWWLWLWWWWRRWWWWRWLWLWRWRRWLWLWRWLWLWWRWRWLWLWWLWWRWLWLWRWRRWLWLWRRWLWLWWLWWRWWWWRRWLWLWRRWRWLWLWRRWLWWLWWLWLWRRWLWWWRRWWWWWWRWLWLWWLWWRRWLWLWWWLWLWRRWRWLWLWRRWLWLWRWRRWLWLWRRWLWLWRRWWRRWLWLWWLWRRWLWWWLWLWWRRWWLWLWWRRWLWLWWLWRWRWLWLWRRWWLWLWWRRWWWRRWLWRWLWLWWLWRRWRWWWLWLWRWLWLWRRWRWLWRWLWLWWLWRRWRWLWWLWLWRRWWWLWLWWRRWLWLWRWLWLWRWLWLWRRWWRRWLWLWWLWRWRRWLWLWWRWLWLWRRWLWLWRRWRWWRWLWLWRRWLWWWWLWWLWLWRWRWLWLWRRWRWRWLWLWRWRWLWLWWLWWRWLWLWRRWLWLWRWLWRWRRWLWLWRRWWLWLWWWLWWRWRWRRWLWLWWRWLWLWWLWRRWRWLWLWRRWRWLWRWLWWWWLWLWWWRWLWRRWRWLWWWLWLWWRWRRWLWLWWLWWLWRRWWLWLWWRRWLWLWRRWRWLWLWWLWWRRWWRWWWWLWLWWRRWLWLWWLWRWRRWLWLWRRWLWWLWLWRRWRWRWWLWLWRWLWLWRRWRWRWLWLWWLWWRRWWRWLWLWRWRWLWLWWRWWLWRWWLWLWWWLWRWWRWLWLWWLWRRWWRRWLWLWWLWRWRRWLWLWRRWWWLWLWWRRWWLWLWRRWRWLWRWLWWLWLWRRWWLWLWWWRRWLWLWRRWRWLWLWWWLWLWRRWWLWLWWRRWLWLWWRWWLWRWLWRRWWRRWLWLWRWLWRRWLWLWWLWRRWWLWLWWWLWWRWRRWLWLWRRWLWLWRRWLWWLWLWRRWRWLWLWRRWRWLWLWWLWWRWRWWRRWWLWLWWRWWWRRWLWLWWLWWLWRWRRWLWLWWLWRRWLWLWRRWLWWLWLWRWLWWWWRWRRWLWLWWWLWLWRRWRWRWWWLWLWWRRWWLWWLWLWRWWLWRRWWRRWLWWLWLWRWLWRRWLWLWRRWRWWLWLWWRRWWLWWLWLWRWRRWLWWLWLWRRWWRRWLWWWWLWLWRWLWLWRRWWLWLWWRRWWRWRWLWLWWLWWRRWLWLWWRWLWLWWWLWLWRRWRWLWLWRRWRWWLWLWRRWLWWLWLWRWRRWLWWLWLWRWLWWLWRRWRWLWLWWLWRRWWRRWLWWLWLWRRWRWWLWLWWWLWWWRRWLWLWRWWRRWWLWLWWRWRRWLWLWRRWLWWLWLWRRWLWLWWWW
+WWRWLWRWWLWLWRRWLWLWRRWWLWLWWWLWWRWLWRRWRWLWLWRWLW WRWLWLWRWLWLWWRRWWLWLWWRRWLWLWRRWWLWLWWRWWRRWWLWWRWRWLWLWRWWLWWLWLWRWRRWLWLWRRWLWLWRRWLWLWWLWRWLWLWRWRRWLWLWRRWWLWLWWWRWLWLWRRWWRRWLWLWRWRRWLWWLWLWRRWLWLWRRWLWLWWLWRRWLWLWRRWRWLWWLWLWRRWLWLWRRWRWLWLWRRWLWLWRWWLWLWWWWWWLWRRWLWLWRRWRWLWLWRRWLWLWWLWRWLWLWRWWRRWWLWLWWRRWLWLWRWLWRRWRWLWLWRRWLWLWRRWRWLWLWWRWLWLWWLWRRWLWLWRRWWWRRWWLWLWRRWLWLWRWWRRWWLWLWWWRWWLWLWRRWLWLWRRWLWLWWWLWLWRWRRWLWRWLWLWWLWRRWLWLWRRWLWWWWRRWLWLWRWLWLWRRWWRRWLWLWRRWWLWWLWLWRRWRWRWLWLWWLWWRRWLWRRWLWLWWLWRRWLWWLWLWRRWLWLWWWRRWWLWRWRRWLWLWRWWLWLWRRWRWLWWWWLWLWWRWRRWLWLWRRWLWLWWWLWLWRRWRWLWWLWLWRRWLWLWRWLWLWRWRWLWWRRWLWWRRWWLWRWLWLWRWLWLWWRRWWWLWLWWRRWWWLWLWRWLWLWRWWLWRRWWRRWLWLWRRWLWLWRWWLWLWRRWLWWLWWLWLWRRWLWRRWLWLWRWRRWLWLWRRWWLWLWRWLWLWRRWLWLWWWWWRWRRWLWLWRRWLWWWWRWWLWLWRRWLWLWWLWRWLWWWWRWRRWLWLWWLWRRWLWLWWRRWWRWLWRRWLWWLWLWRRWLWLWWWLWRRWLWLWWWWRRWWLWLWWRWRRWLWLWWLWRRWLWRRWLWRRWLWLWRRWLWLWWLWWWLWRWLWRRWRWLWRWLWLWWLWRRWWRRWLWWWRRWLWLWWRWLWLWWLWRRWWLWRRWLWLWRRWLWWLWLWRWLWWRWRRWLWWRWLWLWRRWLWLWRWWLWLWRWLWWLWLWRRWRWLWLWRRWLWLWRRWLWWLWWWRWRRWLWWLWLWRRWLWLWWRRWLWLWRWRRWLWLWRRWLWLWWLWRRWRWWRWLWLWWLWRWLWLWRWRRWLWLWRRWWRWLWRWLWLWWRRWWLWLWRWWLWLWWRWLWWLWRRWRWWRWLWLWRRWLWWRRWLWLWWWLWLWRWLWWRRWLWLWWRWLWLWRRWWLWLWWRRWLWLWRWWLWLWRRWWRWRRWLWLWRWWLWLWWWRWRRWLWLWRRWLWWWLWLWWRRWWWLWLWWWWWRRWWWLWLWWWRWRRWLWLWRRWLWWRWLWLWRRWLWLWRRWLWLWRRWWRRWLWLWWLWRWLWLWRRWLWLWRRWWLWLWRRWWLWRWLWLWRRWLWWLWLWRWLWRRWRWLWLWWWLWLWRWWLWRRWWRRWLWWLWLWRWLWWLWRRWLWWRWRRWLWLWWLWRRWLWLWWRRWWWRRWLWWWLWLWRRWLWWWLWLWWRRWWLWLWRWLWLWRWRRWLWRWLWLWRWLWLWRWRWRRWLWLWRWRWLWWRRWLWWLWLWRRWWWRWLWLWWLWWRRWWLWWLWLWRRWLWLWRWLWRWRRWLWRWLWRWLWLWRWWLWLWWWRRWLWLWRWWLWLWWRRWLWRRWLWRWLWLWRRWWLWLWRRWLWLWWLWRRWLWLWWWRRWLWLWRWRRWLWLWRRWWLWWRWLWLWRWLWLWWWRRWWLWLWWRWLWRWRWRRWLWLWRWLWWLWLWRWRRWLWLWRRWWWLWLWRRWLWLWWLWRWWLWWWRRWLWLWWLWRRWWLWLWRWRRWLWLWRRWWLWLWWWRRWLWWLWLWRRWRWLWLWRRWLWWRRWLWLWRRWLWLWRRWRWWLWLWRRWLWWWLWWLWLWRWRRWLWRWLWWLWLWRWLWRWRRWLWLWRRWWLWLWWWLWRWRRWLWWLWLWRRWRWRWLWLWRRWLWWWRWWLWLWWRRWWLWLWWRWLWWLWLWRWWWRWRRWLWLWWLWWLWWRRWWLWLWRRWLWLWRWRRWLWLWRRWWWWWRWWLWWLWLWRRWWWLWLWWWRWLWWWRWLWLWRWWRRWWLWLWWRRWWWWLWLWRRWRWRWLWLWWLWRRWLWRWLWWLWLWRRWWRRWLWLWRWLWLWRWLWLWRRWRWLWLWRWLWLWWWRRWWWLWLWWRWLWLWRRWRWRWLWWLWLWRWLWRWLWLWRWLWWWRRWLWLWRWRRWLWLWRRWWLWLWRRWLWLWWLWRWLWWRRWLWRRWLWLWRWLWLWRWWLWRWWRWRRWLWLWRRWLWLWRWWLWRWRWLWLWRRWLWLWRWLWLWRWLWLWRWWWLWRRWWLWLWWRWWRWRRWLWLWRRWLWLWWLWWRWRRWLWWWLWRRWWLWLWRRWLWLWWLWRRWLWRRWWWLWLWRWLWLWRWRWLWLWRWLWWWLWLWWRRWLWRRWLWLWRRWLWLWWRWRRWLWWLWLWRRWLWLWRRWRWWWLWLWWWRRWWLWLWRWLWLWRRWRWLWLWRRWRWWLWWLWLWRWRWRRWLWLWWLWRRWRWLWRWLWLWWLWRRWLWWLWLWRWRWLWLWRRWRWRWLWLWRWWLWLWRWLWLWRWWRRWLWRRWLWLWRWRWLWLWRWRRWLWLWRWLWLWRWWLWLWWRRWWLWLWRRWRWLWLWWLWWWLWRRWLWLWRWRRWLWLWRWWLWWLWLWRWRRWLWWLWLWRWLWRRWWRRWLWLWWLWWRRWWRWLWLWRWWRRWWLWLWRRWLWLWWLWRRWRWLWLWRRWLWLWRRWWWLWWWWLWLWWWRRWWWLWLWRRWLWWLWLWRWLWRWRRWLWLWRRWWLWLWWRRWWWLWLWWRWLWLWRWWLWLWRRWRWWLWLWWRRWLWWLWLWRRWRWRWLWLWRRWLWLWRRWRWWLWLWWRWRRWLWLWRWLWLWWRRWWLWLWRWWLWLWRRWRWRWLWLWWRWWWWLWLWWRRWLWLWRWLWLWWRRWWWRRWLWLWWRWLWLWWLWRWLWWWWRRWWWWRWLWRWWLWLWWRRWLWLWWLWWRWWLWLWRRWLWWLWLWRRWWRWLWLWRRWLWLWRRWRWLWLWWWWLWRRWWRRWLWLWRRWLWWLWLWRRWWRRWLWLWRWLWLWWRRWWWLWLWRWLWLWRRWRWLWLWRWLWLWWWRWLWWRRWWLWLWWRWLWWLWLWRWRRWLWLWRRWLWWLWLWRRWRWLWLWWWRRWLWLWRWWRRWWLWLWRRWLWLWWLWRWLWRRWRWLWLWRRWWWRWLWLWWRWLWLWRWLWLWWRRWLWLWRWRRWLWLWWLWRRWWWRRWWLWLWRRWLWLWRRWLWLWWLWRWWLWLWWRRWWLWLWRRWWRWRRWLWLWWWLWLWRRWRWLWLWRRWRWWLWWLWLWRWRRWLWLWRRWLWLWRWLWLWWWWRRWWWWWLWWLWLWRRWLWLWRRWLWLWRWRRWLWLWRWLWLWWRRWLWLWWRRWWRWLWWLWLWRRWRWRWLWRWLWWLWWLWLWRRWWLWLWRRWLWWRWWRRWLWLWRRWRWLWLWWWRWLWLWRRWWWLWLWWRWLWLWRRWLWLWWRWLWLWRWRWRRWLWLWRWRWLWLWRRWLWLWRRWLWWLWWLWLWRRWLWWWRRWWWLWLWWWWLWRRWRWLWRRWLWWLWLWRRWRWLWRWLWLWRWRWLWLWRWWLWWRWLWLWWLWWRWRWLWLWRWWRRWWLWRWRWLWLWWWLWLWRWRRWLWRWLWLWRRWWLWLWRRWLWLWRRWLWLWWLWWRRWLWLWWWRRWWWRWLWRWLWLWWLWRRWLWLWWRRWLWLWWWLWLWRRWWRWLWLWRWRWWRRWWLWLWWRRWLWLWWLWWRRWLWLWRRWRWLWLWWWLWLWRWRWLWLWRRWLWWRRWWWLWLWWWRRWLWLWRRWRWLWLWRRWLWRWWLWLWRWLWLWRWLWRRWRWLWLWRRWLWLWRRWRWLWWWWWWWLWLWRWWWLWLWRWLWLWRWRRWLWLWRRWLWLWRRWWLWLWWRRWLWLWRRWLWWRRWWLWLWRRWLWLWWLWRRWRWWRWWLWLWRWRWLWLWWLWRRWLWLWRWLWLWWRRWWWLWLWWRRWLWLWRRWLWLWRRWRWWLWLWWRRWLWLWRRWRWLWWWRRWLWLWRWLWRWWLWLWRWWLWLWWRWLWRRWLWLWRWLWWWRRWWLWLWWRRWLWLWWLWRWRRWLWRWWRWLWLWWLWRWLWLWRWRRWLWWWLWLWWRRWLWLWWWRRWWWWRRWLWLWRWRWWLWRWLWRWWLWRRWLWLWWRRWLWLWRWWLWLWRRWLWLWWLWRWWLWRRWRWWLWLWRRWWWLWLWWRRWLWWLWLWRRWLWLWWRRWLWLWWRRWWLWLWWRWLWLWRRWLWWLWLWRRWRWWLWRRWWRRWLWLWWLWRWRRWLWLWRWLWWLWLWRWWRRWWLWRWWWLWLWRWRRWLWWLWLWRWWLWLWRRWLWLWRRWLWLWWLWRWRWWLWRWRRWLWRWWLWLWRWLWLWRRWRWLWLWRWWLWLWWWRWLWLWRRWLWLWRRWRWWRWLWWLWLWRRWLWWLWLWRRWRWLWLWWLWWRWRRWLWWLWLWRWWLWLWRRWLWRRWWRWWLWLWRWLWLWRWWLWLWRWWRRWWLWLWWRWRWLWLWWLWWRRWWRWLWLWRRWLWLWRWRWRRWLWLWWRRWLWWLWLWRRWWRWLWLWWWLWWLWLWRRWRWRWWLWLWWWLWWRRWLWLWRWLWRWRWLWLWRWRWRRWLWLWRWRWLWLWRWLWLWRWLWLWRRWLWLWRWRRWLWLWRWRRWLWWWRWLWWLWLWRWLWWRRWWRWLWWWLWLWWRRWWWRRWLWLWRWLWLWWRRWWLWLWRWLWLWRRWLWLWWRRWWRWWWLWLWWWRWLWLWRWLWLWRRWLWLWRRWLWLWRRWWRRWLWWLWLWRRWRWLWWLWLWRRWLWLWWWRRWWWRWLWLWWLWWRWLWLWRRWLWLWRRWWLWLWWWRRWWLWLWWWWWWRRWWWLWLWWWRRWLWLWRWRRWLWLWRRWLWLWWLWRWLWLWRRWWWLWRRWRWLWLWRWLWLWWRRWWRWRWLWLWRRWWLWLWRWLWLWRRWWWRWLWLWWLWWWWRRWWWLWLWWWRWLWLWWRWRRWLWLWWLWRRWWRRWLWLWRRWLWLWWRRWLWRWLWLWRRWLWWLWLWRRWRWWLWWLWLWRRWLWWLWLWRRWLWWWWRWLWWLWRRWLWLWRRWRWWWRWLWLWRRWLWWLWLWRRWRWLWWWLWLWWRRWWLWLWRRWRWLWWRRWLWLWWRWLWLWWLWRWLWWRRWLWLWRWLWLWRRWRWLWLWRWLWLWWWRWLWRRWRWLWLWWLWWRRWWRWLWWLWLWRWLWWWRRWLWWLWLWRRWWRWLWLWRWRRWLWRWRWLWLWWLWWWLWRRWRWWWLWLWWRRWLWRRWLWLWRRWWWLWWLWWLWLWRRWRWLWLWRWRRWLWLWWLWWLWRRWLWLWRWLWRWLWRRWRWLWWLWLWRRWRWRWLWLWRWLWLWWWRWRRWLWLWWWLWLWRRWRWRWWWLWLWRRWLWLWRRWLWRRWLWLWWRWWWLWLWRWLWLWRRWLWLWRWWLWLWRRWLWRWLWWRWRRWLWLWRRWLWLWWLWWRWLWLWRWRRWLWLWRWWRRWWLWLWWRWWRRWWLWWLWLWRWRRWLWWLWWLWLWRRWLWWRRWLWLWRRWRWLWLWRRWLWWWLWLWRWLWLWRRWLWWWRRWLWLWRRWRWLWWLWLWRRWRWLWRWLWRWLWLWWLWRRWWWLWLWRRWLWLWRRWRWLWWWWLWLWWWRRWLWRWLWRWWLWLWRRWLWLWRRWLWLWWLWRWLWLWRRWLWRWWLWLWRRWRWLWLWRWLWWRWWRRWWLWWWLWLWWRRWWRWLWLWRRWLWLWWLWWWWRRWWWWLWLWWRWLWLWRRWLWLWRRWRWLWLWRWRRWLWLWRRWWLWLWWRRWWWLWWLWWLWLWRRWWRRWLWLWRRWWWLWLWRRWRWLWWLWLWRRWRWLWLWRRWWWWLWLWWRRWLWLWRRWLWLWWLWWRRWLWLWRRWRWLWLWRRWWWLWLWWWRRWLWLWWWLWLWRRWLWLWRWRRWLWLWWLWRWRWLWLWRRWLWLWRWWRWRRWLWWLWWLWLWRRWLWWLWWRWLWLWRRWRWRWLWLWRRWLWLWRRWLWRRWLWLWRRWLWLWRRWLWLWWLWWRWLWLWRWLWRRWRWLWLWRWRRWLWWWWLWLWRRWRWRWWLWLWWRWLWRRWLWWLWLWRRWLWLWRRWWLWLWWRRWLWWLWLWRWLWWRRWLWLWWRRWWLWLWRWLWLWRRWRWRWLWRWWLWLWRRWWLWLWRRWWLWLWRRWLWLWWLWRRWLWLWWRRWLWLWWRRWWRWLWLWRRWLWRRWLWWLWLWRRWRWLWWWLWLWRRWLWRWWLWLWWWLWRWLWRRWRWLWLWRRWWWLWLWWWWLWWRRWLWLWRRWLWLWRWWLWLWRRWWLWLWRRWLWLWRRWLWLWRRWRWWWLWLWWWWLWWRRWLWLWRRWLWWRRWLWWLWLWRRWLWLWWRRWWWLWLWRRWLWWLWLWRRWLWLWWRWRWLWRRWRWLWLWWLWWRRWWLWLWRRWWWRRWWLWLWWRWLWLWRRWLWLWRWLWLWWRRWWLW
+WWLWLWRRWLWLWRRWRWLWLWRRWRWLWLWWLWRWWLWWLWLWRWRWRRWLWLWRWRWWLWRWLWLWWLWRRWLWLWRRWLWLWWWWRRWLWLWWLWWRWRRWLWWLWLWRWLWRRWRWLWRWLWLWWLWRRWWRRWLWLWRRWLWLWRRWWLWWLWLWRRWRWWLWLWRRWLWLWRWRRWLWLWWLWWWLWLWRWRWLWLWRRWWLWWLWLWRRWRWLWWRWWLWLWWRRWWRWWRRWLWWLWLWRRWLWLWRRWLWLWRRWLWLWWLWWRRWWRWWWLWLWWWRWRRWLWWWWLWLWWRRWLWRWLWLWWLWRWLWRRWLWRWRRWLWWLWLWRWLWRWRRWLWLWRRWWLWWWLWLWWRRWLWLWRRWRWLWLWRRWLWRRWLWLWRRWLWLWWRWLWWLWLWRWLWRRWRWLWLWWWLWLWRWRRWLWLWWRWLWWRRWWWRRWLWLWWLWRRWLWLWRRWWLWLWRRWLWLWWLWRRWRWWLWLWWRRWLWLWWLWRRWLWLWRWLWLWWRWRRWLWLWWLWRWRWRRWLWLWWLWWLWWRWWWWLWRWWRWRRWLWWLWLWRWLWRRWRWLWLWWLWWRRWWRWWLWLWWRRWLWLWWRRWWRWLWLWWWLWLWRRWLWLWRRWWWLWLWWWRRWWWLWLWRWLWLWRWWRRWWLWLWWRRWWLWLWRWLWLWRRWLWLWWWWRRWLWLWRRWLWLWRWRRWLWLWRRWWLWLWWRWRRWLWWRWLWLWWWWLWLWWRRWWWLWLWWWRRWLWW WWLWLWRRWLWWLWLWRRWRWRWLWWWLWLWWRRWWRWRWWLWLWWWLWWRRWWRWWLWLWWRWLWWLWLWRWRRWLWLWWLWRWRWRRWLWLWRWLWRRWLWLWRWRRWLWLWRWLWLWRWLWRWLWLWWLWRRWLWWWWLWRRWLWLWRRWWRRWLWWWWWWLWLWRRWRWLWRWLWLWRRWLWLWWLWWRRWLWLWRRWWLWRWWLWLWWWLWRWRRWLWWLWWLWLWRRWLWWRRWLWLWRRWLWLWWRWWRWWLWLWWRRWWLWLWRRWWWRRWWLWWRWWLWWLWWLWLWRRWRWWLWRRWLWLWWLWWLWRWRRWLWLWWLWRWRRWLWLWRRWWWWWLWRRWLWLWRWLWLWWWLWRWWWRWLWLWRWRRWLWLWRRWLWLWRRWRWLWRWLWWWLWLWWRWLWRRWLWLWWRWLWLWRRWRWWWLWLWRWLWLWRWRRWLWLWRWRRWLWWLWLWRRWRWWLWLWRRWWRWWLWLWWRWWLWWLWLWRWRRWLWRWLWLWWLWRRWLWLWWRRWLWLWRRWRWLWWLWLWRWLWRWLWLWRRWLWRRWWRWLWLWRRWWLWLWWRRWWWRWLWLWRWRRWLWLWWLWWLWRWLWLWRWWWWRWRRWLWLWRRWLWWLWLWRRWRWLWLWWLWRRWRWLWLWWWLWLWRRWRWRWWWWLWLWRRWLWRWLWLWRWLWLWWRWRRWLWLWWLWWLWRRWWWLWWRRWLWLWWLWWWRWLWRRWLWLWRWRRWLWLWRWRRWLWLWRRWLWWLWLWRRWLWLWWRRWWLWLWWWLWRRWWRRWLWLWRRWLWLWRRWLWLWRRWLWLWRRWLWLWWRRWWLWRRWLWLWRWWLWWRWWLWLWWRWLWLWWWRWWRRWWLWLWRRWLWLWRRWLWWLWWLWLWRRWLWWRRWLWLWRWLWLWRWRWRRWLWLWRWLWLWRWWLWWLWLWRWRRWLWRWLWLWWLWRRWLWRWRWLWRWLWLWWLWRRWRWLWLWRRWWWRRWWLWLWWRWLWLWWRRWLWLWRWRRWLWRWLWLWRRWWRWLWLWRWLWRWLWLWWWLWLWRRWWRWLWLWRWLWWRWLWRRWRWLWLWRWRRWLWLWRWLWLWWRWRRWLWWWLWLWWRRWWRWWLWLWWWLWRRWLWLWRRWLWLWWWLWLWRWRWWRWWRRWWLWWLWLWRWWRRWLWWWLWLWWRRWWRWWLWWLWLWRRWWWLWRWLWLWWLWRWRRWLWLWWLWRRWRWWWLWRRWLWLWRWLWLWWRRWWLWWLWLWRRWLWLWRRWLWLWWWRWWRRWWLWLWRWLWLWRRWLWWLWLWRRWLWLWRWRWRRWLWLWWLWRWWLWRRWRWWLWRWLWLWWLWRRWLWLWRRWLW
+WWWWWLWLWRWLWLWRWRWRRWLWLWWLWWLWWRRWWRWWRWLWLWRWRRWLWWLWLWRRWWLWLWWRRWWRWLWLWWRWLWLWWLWRWWWLWRRWWRRWLWLWWLWRRWRWWLWLWRRWLWLWWLWRRWRWLWWRWLWRWLWLWRRWLWLWRWLWLWRWLWLWRRWLWLWRRWRWWLWLWWWLWRWRRWLWLWWRRWWWWLWRRWLWLWRWLWLWWWLWRWRRWLWLWWLWRWWLWRRWLWLWRWRRWLWLWRWRRWLWWWWLWLWRRWWWWLWLWRWLWLWRRWLWLWRRWWLWLWWRWWLWLWRRWRWLWRRWLWLWRWRWRRWLWLWRWLWLWRRWLWLWWLWRRWWRWLWLWRRWLWLWRRWWLWWLWLWRRWLWLWRRWWWLWLWRWLWLWRRWLWLWRRWRWWLWLWRWLWLWRRWLWLWWWRWWRRWWLWWWLWLWWRRWLWLWRWLWRWWRRWWLWLWWWLWRRWRWWLWLWWRRWWWRRWLWLWWLWRWLWRWWWWLWLWRWLWLWRWWRRWWLWLWWWLWRWLWLWRRWRWLWLWRWWRWRRWLWWLWLWRRWWWLWRWWWLWLWRWLWLWRWRWLWLWRWLWLWRRWRWLWLWRWRRWLWLWRRWWWLWRWRWLWLWRWWLWLWWWWWLWRRWLWLWRWRRWLWLWRWWRRWWLWLWRRWLWWWWLWRRWLWLWWLWRWLWLWWRRWWLWLWWRWRRWLWLWWRRWWLWLWWWRRWWWWWLWLWWWRWLWLWRWRWWRRWWLWLWRWLWLWRRWWLWLWWWRRWWWWRRWLWRWLWLWRRWLWLWWLWRRWLWRWLWLWRRWRWLWLWRWWLWLWWWRRWLWLWRRWLWLWWLWWRWWLWLWRWRWLWRRWLWRRWWLWLWRWLWLWRRWWWLWWLWLWRWWRRWWLWLWRRWLWLWWLWRRWWLWLWWRWLWLWRRWRWLWWLWLWRRWWRRWLWLWWLWRRWWWRRWWLWLWRRWLWLWRRWLWWWLWLWWRRWWLWWWLWLWWRRWLWLWRWRRWLWLWWLWRRWLWRRWWLWLWWRWWRRWWLWLWRRWLWRWLWWLWLWRWLWRRWRWLWWRWWLWRWLWWWLWLWWRWLWRWRRWLWLWRRWLWLWWLWRRWLWWLWLWRRWWLWWLWLWRWRRWLWLWWLWRRWWRRWLWLWRRWLWWLWLWRWLWRRWRWLWLWWLWWRWRRWLWLWWRRWWLWLWWRRWWWWWLWLWRRWLWLWWLWRRWLWLWRWRRWLWLWWLWRRWWRRWLWWLWLWRRWLWWLWLWRWRWWRWLWLWRRWRWRWLWWLWLWRWLWWRRWLWLWW WWRWLWWWWLWLWWWRWWLWLWRWRRWLWRWRWWLWWWLWLWWRRWLWLWRRWLWLWRRWRWWLWLWRWWLWLWWRRWLWLWWRRWWLWLWWWLWRRWLWLWWRWWLWRRWWRRWLWLWRRWLWLWWLWWRRWLWLWRWWRRWWLWLWWRRWWLWRRWLWLWWWLWLWRRWRWLWLWRRWLWLWRRWWWLWLWWRRWLWLWRWWWWLWLWRWLWLWRWWWRRWLWRRWLWWLWWLWLWRRWLWRRWWLWLWWWWLWLWRWRWWWRRWWWLWLWWWRRWWLWLWWRRWWLWLWWRWLWLWRWLWLWRWWRWRRWLWWLWLWRRWLWWRRWWLWLWWRRWWLWLWWRRWLWLWRRWRWLWRWLWLWWWLWLWRRWWLWLWRWRWRRWLWLWRWRWLWLWRWRRWLWWWLWLWWRRWWWLWLWWWWRRWWWWLWLWWWWRRWLWRRWLWLWRRWLWWLWLWRRWRWLWLWWLWRRWLWLWWLWRWWWLWRRWRWWLWLWRRWRWLWLWWLWWWLWRRWRWWWRWLWLWRRWLWLWRWLWRRWLWLWWLWRWLWLWWRWWRRWWLWLWWWLWRWWRRWWLWLWRWWLWLWWRRWWRWRWWLWLWRRWLWWLWLWRRWLWLWWRWLWWRWRRWLWLWRWRRWLWLWRWLWLWRWLWLWRRWRWRWLWLWRWWLWLWRWWLWLWWRWRWRRWLWLWWRWRWLWLWRWLWLWRWWLWLWWRWRWLWLWWRRWLWWLWLWRWWRRWWLWWRRWLWWWLWWWLWLWWRWRRWLWWLWLWRWWLWWRWRRWLWLWRRWLWLWRRWLWLWRRWRWLWLWWRRWWLWLWWWLWRRWWWLWLWRWLWLWRWRRWLWLWRWLWLWWWRWLWLWRRWRWLWLWWWWRWWLWLWWRRWWWRRWLWLWWLWRRWWRRWLWWWWLWWLWLWRRWLWLWRWRRWLWLWRRWLWLWRRWLWLWWLWWRRWWRWWRWWLWLWWRRWWLWLWWRWWLWLWWRWLWLWRRWWLWLWWRWRRWLWLWWLWRRWRWWLWLWWRRWLWLWRRWWRRWLWLWWWRRWLWLWRWLWLWRRWLWLWWLWRWRRWLWWLWLWRRWRWWLWLWWRWRRWLWWLWLWRRWWLWLWWRWLWLWRWLWRWLWLWRWWWWLWRWRRWLWLWRWLWWLWLWRRWWRRWLWLWRRWWWRWLWLWRWRRWLWLWWWWLWWRWLWLWWLWWRRWLWLWRRWRWLWLWWLWRRWWLWLWWRRWLWLWRWWWRRWWWLWLWRWLWLWRWRRWLWRWRWLWLWRRWLWLWRWLWLWWWWWLWRRWRWLWLWRRWRWLWWWLWLWWRRWLWLWWWRWWWRRWWWLWLWWWRWRRWLWWWLWWLWLWRRWLWLWRRWRWWWLWLWWWWRRWWWLWRRWLWLWRRWLWLWRWWLWWLWLWRRWRWLWLWWLWWRRWLWLWRWRRWLWWWLWLWWRRWWLWRWLWLWWLWRWWWRRWLWWLWLWRRWRWRWWLWWLWLWRWWLWWRRWWRWWLWLWWRRWLWLWWLWRRWLWLWWLWRRWLWRRWWLWLWWWWLWLWRWLWRRWRWLWLWRRWLWLWWLWRRWLWRRWLWRRWLWLWWWLWLWRRWRWRWWWLWRWLWWLWLWRRWLWLWWRWWRRWWLWWWLWLWWRRWWLWLWWRRWWWWWWRRWLWLWRRWWRRWLWLWWLWRRWLWLWWRWLWLWWWLWLWRRWWWRRWLWLWRWRRWLWRWLWLWRWLWRRWLWLWWLWWLWRWRRWLWLWRWLWLWRRWRWRWLWLWRRWLWLWRRWLWRWWLWLWRWLWLWRWLWRRWRWLWLWWLWRRWLWLWRRWLWLWRWLWLWWWRWRRWLWLWRRWLWLWWWLWLWRWRWRRWLWLWRWLWLWWRRWWRWWWWLWLWRWLWLWRWWRRWWLWWLWLWRWRRWLWLWRRWWRWLWLWRRWWLWLWWRRWWLWLWWRRWLWLWWLWWRWLWLWRRWLWLWRRWLWLWRWRRWLWLWW
+WLW WWLWLWRRWLWLWRRWLWLWRRWLWLWRWWRWLWLWRWWWRRWLWLWWWLWLWRRWRWLWLWRWWRRWLWLWWLWRWRWWLWLWWRRWLWWLWLWRRWRWLWLWRRWWLWLWWRRWLWLWRWRWLWWLWLWRRWRWLWLWRRWLWLWRRWLWLWRRWLWLWRRWLWLWRRWLWWLWLWRRWWWRWLWLWRWWRRWWLWLWWWLWRRWWLWLWWRWRRWLWWLWLWRWLWRWRRWLWLWWLWRRWLWLWRWRWLWLWRRWLWLWRWRWWRRWWLWLWWRWWRRWWLWLWWRWLWLWWRRWLWLWRRWLWLWRRWLWLWRRWLWLWRWWWRRWLWLWWLWRRWLWLWRRWLWWLWLWRRWRWRWLWLWWLWRWLWLWRRWRWLWLWRWRRWLWLWWWLWLWRRWRWLWLWRRWLWWLWLWRRWRWLWLWRRWWLWLWRWLWLWRRWWRWLWLWRRWLWLWRRWLWLWRWWRRWLWWLWLWRWLWRRWLWLWRRWWLWLWWRRWLWWLWLWRRWRWLWWLWLWRRWRWWLWLWRRWLWLWRWLWLWWRRWWRWLWRRWLWLWWLWWLWRRWRWLWWLWLWRRWRWLWLWRWRRWLWLWRWLW
+WWLWLWRWRRWLWWWRRWWLWLWWRRWLWLWWRWLWRWLWLWRRWLWLWWLWWRRWWLWWRRWLWLWRWLWLWWRWLWLWWWRWWRRWWLWLWWRRWWLWWLWLWRRWLWLWRRWRWLWLWWLWRWLWLWRRWWRRWLWLWWRWRRWLWWWLWLWWRRWLWLWWRRWWRWLWLWRRWLWWLWLWRRWRWWLWLWRRWLWLWRRWLWLWWLWWRWLWWWRRWLWLWWLWRWRRWLWWLWLWRWLWRRWRWLWLWRRWWWRRWLWLWWLWRWRRWLWWLWLWRWRRWLWLWRWLWLWWWLWRRWLWRRWLWRRWLWLWRRWLWWLWLWRRWLWLWRRWRWLWLWRWLWLWWRRWWWLWLWRWLWLWRRWRWLWWLWLWRRWRWLWLWRWWLWLWWWRWLWLWRRWLWLWRWRRWLWLWWRRWWLWLWWWRRWWWLWWRRWWWLWWRWLWLWWLWWRRWLWLWRWRWRRWLWLWRWLWLWWWLWRRWRWWLWLWWRRWWRWLWWLWLWRRWRWLWLWWLWWRRWLWLWWLWRRWRWWLWLWWWWLWLWRWRWRRWLWLWRWLWLWWRWLWLWRRWLWLWRWWLWRWRRWLWLWWLWRRWLWLWWLWRWRWWRRWWLWLWRWLWLWRRWRWLWLWWLWWRRWWRWWLWWLWLWRWRRWLWLWRWLWLWWWWRRWWWWLWLWWWWRRWLWLWWLWRRWRWWRWLWLWRRWLWLWWLWWRRWLWLWWLWRWRRWLWLWRRWWWLWWWLWLWWRWRRWLWLWWLWRRWWRRWLWWLWLWRRWWRWLWWLWLWRRWRWRWLWRRWLWLWWWLWLWRWLWRWLWWRRWLWLWRRWRWLWWRRWLWLWRWLWLWRRWLWWLWLWRRWWWRWLWLWWLWWWWWRRWLWLWRWLWLWRRWLWLWRRWRWWLWLWWWWLWLWRRWRWRWWLWLWWRRWLWLWRRWLWLWRRWRWLWLWRRWRWLWLWWRRWLWLWWLWWLWRWRWWRRWWLWLWWWLWRRWRWWLWLWWWLWWRRWWRWWWLWWWLWLWRWLWLWRRWWRRWLWLWRRWWLWLWWRRWWLWLWWWWLWLWRWRRWLWLWRRWWWLWWLWLWRRWLWWLWLWRRWRWLWWLWLWRWWRRWWLWLWWRRWWLWLWWRRWLWLWRRWWRRWLWLWWRRWLWLWRWWLWWLWLWRRWLWLWRWWLWRRWWRRWLWWLWLWRWRRWLWWLWLWRRWRWLWRWWLWLWWRWRRWLWWLWLWRRWLWLWRRWWWLWLWRWWLWLWWRWRRWLWWLWLWRRWLWLWRRWLWLWRRWLWLWRWWLWLWWWWRWRRWLWLWWRRWLWLWWLWRRWWLWLWWRRWWLWLWRRWRWWRWLWLWRRWLWRWLWLWWWLWLWRRWLWRRWWWWLWLWWRRWWLWLWWRWLWLWWRWRRWLWWLWLWRWLWWRRWWLWLWWRWWWLWLWRRWLWLWRRWWLWRRWRWLWLWRRWLWLWRWRRWLWLWRRWLWWWLWLWWRRWLWRRWLWLWRWLWLWRRWLWLWWLWRWLWRRWLWLWRWRRWLWWLWLWRRWWRRWLWLWRRWWLWWLWLWRRWWWLWLWWWRRWLWLWWRWLWLWRRWRWLWLWRRWWRRWLWWLWLWRWRRWLWLWRWLWWRWWWLWLWWRRWLWWLWLWRWLWRRWRWLWLWRRWWWLWWWWWWLWLWWWWWRRWWWWLWLWWRWLWLWRWRWRRWLWLWRWRWLWWRWLWLWRWLWWWRRWLWLWWWLWLWRRWLWLWWRRWLWLWWLWRRWLWLWRRWWRRWLWLWWWWRRWWWWLWLWWRRWWLWWLWLWRWWLWRWWLWRWRWLWLWRWRRWLWLWWLWRRWRWWWLWRRWWLWLWWRRWLWLWWRRWWLWLWRWLWLWRWLWRRWRWLWRWLWLWWLWRRWRWLWRWLWLWWWRWLWLWWLWWRRWWLWWLWLWRRWRWRWWLWLWRRWLWLWWLWRWLWRRWLWLWWLWRRWRWLWLWWWRRWWLWLWWRRWLWLWWRRWWLWLWWRWRRWLWLWWLWRRWLWRRWWWLWRWWLWLWRWLWLWRWLWRRWRWLWLWWLWWRRWLWLWRWLWRWRRWLWRWLWLWWLWRRWRWWWLWLWWWRWRRWLWWLWRRWLWLWWLWWLWRRWLWRRWWWRWWLWWLWLWRRWRWLWLWRRWWLWLWRRWLWLWRWLWLWWRRWLWLWRRWRWLWWWLWLWWRRWWWLWLWWRRWLWLWWLWRRWLWWLWLWRRWWLWRWWRRWWLWLWWWRRWWLWLWWWLWRWWRWRRWLWWLWLWRWLWRRWWRRWLWLWWLWRRWLWLWRWRRWLWLWRWLWLWRRWLWLWWWRRWWLWWWWWWLWLWWWRRWWWLWLWRRWLWLWWLWRWRWLWLWWRRWLWLWRRWRWLWLWWRRWWWRWLWLWRWWLWLWWRWLWLWRRWLWLWRRWLWLWRWWLWWWRRWWLWLWRRWLWLWRWWWRWLWLWRRWRWRWLWLWRRWLWLWRRWLWLWRWWLWRWWLWLWRWLWLWRWLWRRWLWLWRRWLWLWRRWLWLWRWRRWLWLWWLWRRWRWWWWWWLWWLWWLWLWRRWRWWLWLWWRRWLWLWRWRRWLWLWRRWWLWLWWWLWWRRWWWWRRWWLWWWWRWLWLWRRWLWRWLWRWLWWWWRWLWLWWLWWWWRRWWWWLWLWRWLWLWRWWWRWLWRRWRWLWWWLWLWWRRWWWLWLWRRWRWLWLWRRWLWLWRWLWLWWWWWLWRWWRWRRWLWLWRRWLWLWRWLWLWWWWLWWRWWWRWLWLWRRWLWLWRRWRWLWLWWRWRRWLWLWRRWLWRWLWRWLWWWLWLWWRRWWLWLWRRWWLWWLWLWRWWLWRWRWLWRRWRWLWLWWLWRWLWWLWLWRRWRWLWLWRRWRWLWLWRWRRWLWLWRRWWLWWLWLWRWWWLWLWRWRWRRWLWLWWLWRRWRWLWLWWLWRWLWLWRRWRWRWLWLWRRWLWLWRRWRWLWLWRRWLWWLWLWRRWRWLWWLWLWRRWWLWRRWLWLWRWLWLWRRWLWLWRWLWLWRWLWLWRRWLWRWRRWLWLWRRWLWRWLWRWWWLWLWRWLWLWRWWLWRRWRWWLWRWRWLWLWWLWWWLWRRWRWWWLWRRWLWLWWWLWLWRWWLWLWRRWWRWLWLWWWRWLWWRWLWLWRRWWLWLWRWRRWLWLWRWWWRWRRWLWWLWLWRRWLWLWWRRWWRWWLWLWWRWLWLWRRWWLWLWWRRWWLWLWWWLWWRWWRRWLWLWRRWRWLWLWWLWWRRWWLWLWWRWRRWLWWLWLWRRWWRRWLWLWRRWLWLWWWWLWLWWRWRRWLWWLWLWRWLWRWLWLWRRWRWLWRRWWLWRWLWLWRWLWLWWRRWWRWWLWLWWRRWLWWLWLWRWLWWWRRWWWLWLWRRWRWWLWLWWRRWWLWLWWRWLWLWRRWLWLWWLWRWWWLWRWRWLWLWWRRWLWRWLWLWRWLWLWRRWLWWRWWRRWWLWWWRWLWLWWLWWRWLWLWRRWRWRWLWWLWLWRRWWWRRWWLWWWWRWLWLWWWLWLWRWWWRWWLWRRWWRRWLWWLWWWLWLWWRRWWLWLWRRWWLWLWWWRRWWLWLWWWLWRWRRWLWLWRRWWWLWRWLWLWWLWRWWRRWWLWLWWRRWWWLWWLWLWRWWRRWWLWLWWRRWWLWLWWRRWWLWLWRWLWLWRRWRWWRRWLWLWRWWLWLWRWLWLWRWRRWLWWLWLWRRWRWLWRRWWLWRWLWLWWLWRRWWRRWLWLWRRWLWLWWLWRWLWLWRRWWRRWLWWLWLWRWLWRWRWLWLWRWWLWRWLWLWWLWRRWLWLWRWRRWLWLWRRWWLWRRWLWLWWWLWLWRRWLWLWWRWRRWLWLWWLWWWRRWWWRWWLWLWWWWLWLWRWWWRWRWRRWLWLWWLWRRWLWLWWLWWWRWWRRWWLWWLWLWRWRRWLWLWRWLWLWWWRRWWLWLWRWLWRRWWRRWLWLWRWLWLWWRRWLWLWRRWRWLWWLWLWRRWRWWLWWLWLWRRWLWLWRRWRWLWLWRWWWLWLWWWWWWRWRRWLWWWWWWRWLWWLWLWRRWLWLWWWRRWWWLWLWWWRRWWWRWLWLWWWLWLWRRWRWRWWWLWRWLWLWRWLWLWRWLWLWRRWWRRWLWLWRRWWLWLWRRWLWWLWLWRWLWRRWLWLWWWWRWLWLWRWWLWLWRWRWRRWLWLWRWRWLWLWWLWWWRRWWLWLWWRWLWLWRWRRWLWLWRRWWLWLWWRWRRWLWWLWLWRWRRWLWLWWLWWWRRWLWLWRWRRWLWLWRRWWLWLWWRRWWLWRWLWLWWLWRWRRWLWLWRRWWWRWLWWWLWWLWLWRWRRWLWLWWWWWRWWRRWWLWLWWRRWWLWLWWRRWWLWLWWWWLWLWRWWRWRRWLWWLWLWRRWWRWWWWLWLWRRWLWLWRRWLWLWWLWWRWRWLWLWRRWRWRWLWLWWRWWWWLWLWWWRRWLWLWRWWLWWLWLWRWRRWLWLWWLWRRWRWLWLWWLWRRWRWWRWLWLWRRWLWLWRRWWWWLWLWWRRWLWRWLWLWRRWLWWWLWLWWRRWLWLWWWRWLWRWRRWLWRWLWLWRRWLWLWRRWLWLWWLWWWRRWLWLWRRWRWLWLWRRWLWLWWRRWLWWLWLWRWLWRWLWLWWRWWRRWWLWWRWLWLWWWLWLWRWRRWLWLWRWWLWLWRWRWRRWLWLWRWRWWLWLWRWLWLWRWLWWWRWRRWLWWLWLWRRWLWRRWWLWLWWRWRRWLWLWWLWWLWWWWLWRRWLWLWRRWRWWWWLWLWWWWRWRRWLWWLWLWRWLWRRWRWLWLWWLWWRRWLWLWRRWLWLWRRWRWLWLWRRWRWLWLWRWWLWLWRWWWLWLWWWRWWRRWWLWWLWLWRRWRWLWLWWLWWRRWWWRRWLWLWRRWLWWRWWWLWLWRRWWLWLWWRWLWLWRRWLWLWWLWRRWRWWRWLWLWRRWLWRWWLWWLWLWRRWLWLWRRWRWLWRWLWLWRWLWLWWRRWWWLWWLWLWRRWLWLWRRWLWLWRWWWRRWWLWWLWLWRWRRWLWLWRWLWWLWLWRWRRWLWLWRRWLWWLWLWRRWWWRWWLWLWRWRRWLWLWRRWWRWWLWWLWLWRRWLWLWRRWRWLWWLWLWRRWWWWRRWLWLWWRWWLWLWRWLWLWRRWLWLWRRWLWLWWLWRRWRWWWLWLWWWWLWRRWLWLWRRWLWLWRWRRWLWRWWWLWLWRWLWLWRWWLWRWLWRWRRWLWLWWLWRRWLWLWRWRRWLWLWWLWRRWRWWLWLWWRRWWLWLWRRWRWWLWLWRRWLWWLWRRWLWLWRWLWLWRRWRWLWLWRWWRRWLWLWWRRWLWLWWWLWWLWLWRRWLWRRWLWLWWWRWLWLWRWWWLWRWLWRRWWLWLWRRWRWRWLWLWRWLWRWRRWLWLWWLWRWRWLWWWRWLWRWLWLWWLWRWWLWWLWLWRRWWRWLWWWRRWWWRWLWLWWWLWLWRRWLWLWRWRWWLWLWWRWLWRWLWRWRRWLWRWLWRWLWLWRWLWLWWRWLWRRWRWLWLWWLWWWRWWLWLWRRWRWLWLWWRRWWRWWWLWLWWRRWLWLWWLWRRWWRRWLWWRWLWLWWRWWLWWLWLWRWRWLWLWWRWRWLWRWWRRWWLWLWRRWWLWLWWRWRWLWLWRWRWLWLWRRWWLWLWWWLWWWWWWRWLWRRWRWLWWWWLWLWWWRRWWWWRRWLWLWWLWRRWLWRRWLWWLWLWRRWWWLWLWWWRRWWLWLWWWWLWLWRRWLWRWRRWLWLWRWLWRWLWLWRWLWLWWRWWLWRRWLWLWRRWLWWLWLWRRWWWWWRRWWWWLWRWLWRRWLWWWLWLWWRRWLWLWWWLWRWLWRWWWRRWWWLWRWLWLWWLWRWWRRWLWLWRRWRWLWLWRWLWLWWWRRWWWRWLWLWWLWWWWRRWLWRRWLWWWWLWLWWWRWLWWLWRRWWRWLWLWRRWWRWLWLWWLWWWRRWWWRWWRWRWLWLWRWLWLWWWRRWLWLWWWLWLWRRWRWLWLWWLWWRWRRWLWLWWLWRW WLWRWLWLWRRWRWLWLWWLWWW
+WLWRWRRWLWLWRWWLWLWRWLWLWRRWRWLWLWRWWWLWWLWLWRRWLWLWRRWLWLWRWWRRWWLWLWRWLWLWRRWLWLWRRWLWLWRRWWRRWLWWLWLWRWRRWLWLWRRWWLWLWRRWWLWWWWLWRRWLWLWRWLWRWWLWWLWLWRWRRWLWLWWLWRRWLWLWWLWRRWWLWRRWRWLWWLWLWRWLWWRWRRWLWLWRWLWRRWRWLWLWRWLWLWWWRRWWWWWLWLWRRWRWLWWLWLWRRWRWLWWLWLWRRWLWLWRWLWLWRWWWWWLWLWRRWRWLWLWRWRWLWWLWLWRWRWWLWRRWRWWLWLWWRRWLWRWLWLWWLWRRWRWWRWLWRWLWLWWRRWLWWLWLWRRWWRRWLWLWWLWRRWLWWLWLWRRWLWLWWRRWWLWRRWWLWLWRRWWLWLWWWLWRWRWWLWLWWWLWRRWLWLWWRWRRWLWLWWLWWRWRWLWLWRWWLWRRWRWWLWRWRWLWLWWRWWLWLWWWLWRWWLWRWWLWRWWRRWWLWLWWRRWWLWLWRWLWLWRRWRWRWLWLWRRWWLWLWWRRWWLWLWWRWRRWLWLWWLWRWWWWWWLWWWLWLWWRRWLWLWRWRRWLWLWWLWRWWRRWWLWLWRRWWLWWLWLWRRWLWLWRRWLWLWRRWLWLWWLWRRWWLWLWRRWRWLWLWRRWLWLWRWWRRWLWLWRRWRWLWLWRWWWLWLWWWWRRWWWWLWLWWWWWLWRRWWRRWLWWWLWLWWRWLWRWRRWLWRWLWWRWLWWWLWLWWRRWWLWLWWWWRWLWRRWRWLWWLWWLWLWRRWLWWRRWWWRWWLWLWRRWLWRWWLWWLWLWRWRWLWLWWRRWLWRRWLWLWRWLWLWWWLWRWRWLWRWLWLWRWWWLWRRWRWLWRRWLWWLWLWRRWLWLWRRWRWLWLWRRWWLWLWRRWWLWLWRWWWLWLWWWRRWWWWLWWRWWLWLWWRRWLWLWWLWWWRRWWWLWLWWWRWRRWLWLWWLWRWRRWLWLWRRWWWLWLWRRWLWLWWLWRRWLWWLWLWRRWLWRRWLWLWRRWRWLWLWRWLWLWRWLWLWRWRWWLWLWRRWLWRRWWRWWLWLWWRRWLWLWRRWWLWLWWRWRRWLWWLWLWRRWRWLWLWRRWWLWLWRRWLWWWLWLWWRWRRWLWLWWLWRRWRWWLWLWWRRWWLWRRWLWLWWWLWLWRRWLWLWWRRWWLWLWWRWRRWLWWLWLWRRWLWWLWLWRRWLWLWRRWLWLWWRRWLWLWRRWRWLWLWWWLWLWRWRWLWWRRWWRWLWLWWLWWRWRRWLWLWWLWRWRWRRWLWLWWLWRWRRWLWRWLWWLWLWRRWWLWRWLWLWWLWRRWLWLWRWRRWLWLWWRRWLWRRWLWWLWLWRRWLWLWWWLWRRWLW WLWRRWLWWWLWLWWRRWWRWWWLWLWRRWLWLWRRWWLWLWWWLWWRWRRWLWLWRRWLWLWRWRRWLWWWWLWWWLWWWLWLWWRRWLWLWRRWWRRWLWLWRWLWLWRRWRWWWLWRRWLWLWWLWWLWRRWLWLWRWRRWLWLWWWLWLWRWWRRWWLWLWRWLWLWRRWLWLWWRWWRRWWLWLWWWLWRRWLWLWRWRWLWLWRWRWRRWLWLWWRRWLWRWLWLWRWWWWLWLWWWRRWWLWLWWRRWLWLWWLWWRWRWLWRWLWLWWRRWWRWRWLWLWWLWRRWRWWWLWLWWRWWLWLWWRWLWRRWRWLWLWRRWLWRWLWRRWLWLWWLWWWLWLWRRWLWRWLWWRRWLWLWWLWRRWLWLWWRWLWRRWWRRWLWLWWLWRRWLWLWRWRRWLWLWRRWWLWLWRRWLWLWWLWRRWWRRWLWLWRRWLWLWRWLWRWLWLWRWLWLWWRWRRWLWWLWLWRWLWRRWWRRWLWLWRWWRWLWLWRWLWLWRWLWLWRWWWRRWWWLWLWRWLWLWRWRRWLWLWRWRRWLWWLWLWRRWWLWLWRRWLWLWWLWRWRWRRWLWLWWRRWLWLWRRWLWLWRRWWWRWLWWLWLWRWWRRWWLWLWWRRWLWLWRWLWWLWLWRRWRWWLWLWWWRWLWLWWLWRWRWWRRWWLWLWRWLWRRWLWLWWWLWLWRWLWRRWWLWLWRRWLWWLWLWRWRWRRWLWLWRWWRRWLWLWRRWLWLWRWLWLWWWWWWWLWRRWRWLWWLWLWRRWRWRWWLWWLWLWRRWRWLWLWRWRRWLWLWWLWRWLWLWWWWWRRWWWLWLWWWRRWLWLWWLWRWRWRRWLWLWWLWRWRRWLWLWRRWWLWLWRRWLWLWWLWRRWRWWWLWWLWLWRWWRRWLWLWRRWRWLWLWRWWLWLWWRRWWLWLWWWLWRWRRWLWWWLWLWWRRWWRWRWWLWLWWRWRRWLWLWRRWLWLWWLWWRRWWLWRWLWLWRWRWLWLWRWLWLWWWWRWRRWLWLWRRWLWLWRRWLWLWRWLWLWWRWLWLWRRWRWRWLWWRWLWLWWWWWLWLWWWRRWWLWLWWRRWWLWLWRRWRWWLWLWRRWLWLWWLWRWLWWRWWLWLWRRWLWLWRRWWRRWLWLWWLWRWRWLWLWRRWRWRWLWLWRWWLWLWRRWWWLWWLWRWLWLWWLWRRWWRRWLWLWWWLWLWRWRWWRRWWLWLWWRRWLWRWWWLWLWWWWLWRRWRWWWLWLWWRRWWLWLWWWLWRRWRWWWLWLWWWRRWLWLWRRWRWLWLWRRWLWLWRRWWLWLWRRWLWLWRRWRWWLWWLWLWRWRRWLWLWWLWWRRWWRWLWLWWLWRWLWWLWLWRRWRWRWWLWLWRRWWLWLWWWLWRRWRWWLWLWWWLWRRWLWLWRRWLWLWRRWLWLWRWLWLWWWWRWRRWLWWLWLWRRWLWLWWRWRRWLWLWWWRRWLWLWRWLWLWRWRRWLWRWRWLWRWLWLWRRWLWLWRWWLWLWWWWRWRRWLWWLWLWRRWRWLWWLWLWRRWLWLWWRWLWLWRRWLWLWRRWRWWRWLWLWRRWLWLWRRWLWLWWLWWWWWWLWWWRWRWLWLWWRWLWRRWLWLWRRWRWLWLWRRWLWLWRRWLWLWRRWRWWWLWLWWWRRWLWRWLWLWWLWRRWLWRWLWRRWLWLWWRRWLWLWRRWRWLWLWWWLWLWRRWLWLWRRWRWLWRRWLWLWRWWLWLWWWWLWRRWRWWLWLWWRWLWLWWWRWRRWLWWWLWRWLWLWRWLWLWWRWRRWLWWWWLWLWRRWLWLWWLWRWRRWLWRWLWWLWLWRRWLWLWWRRWLWRWLWLWRRWWWWLWRRWLWLWWRRWLWRWLWLWWLWRRWLWLWRRWWWRRWLWLWRRWRWLWLWWLWWRRWLWLWRRWRWLWLWRWRWLWLWRWLWLWRRWRWLWWWLWRWLWLWRWLWLWWRRWLWLWRRWWLWLWRWWLWRRWRWLWLWRWLWLWWWRWRWLWLWRRWRWRWLWLWWLWWRWRRWLWLWWRRWWLWLWRWRWLWRWLWLWWLWRRWRWLWRWLWLWRWLWWLWLWRWRRWLWLWWWRRWWWLWLWWRWLWLWRWLWRWRRWLWLWWWLWRRWRWLWLWRRWRWLWLWRRWLWLWWRRWWLWLWWRRWLWRWLWWRWLWRWLWLWWLWRRWLWLWWWRRWLWLWWRWLWRWLWLWRWLWRRWLWLWRRWLWLWRRWRWLWRWRRWLWLWWLWRWRWLWRWLWWRWLWLWRWWLWLWWWRRWLWLWWLWRRWLWRRWWWRWLWLWWLWWRRWWLWLWRRWLWWLWLWRRWLWLWWRRWLWLWWRRWLWLWRRWLWLWRWWWWLWRRWRWLWLWRWWWRRWWLWLWRRWRWLWLWRWLWWLWLWRRWRWLWLWRWWLWRWLWLWWLWRRWRWLWLWWLWWRRWLWLWRRWLWLWRRWRWWLWLWWRRWWWLWLWWWWLWRRWLWRRWWLWLWWRWWRRWLWLWRRWRWLWLWWLWRRWWLWWWLWLWWRRWLWLWRRWRWLWLWRRWWWLWLWWRRWWWLWWLWLWRRWLWLWRWRRWLWRWWLWWLWLWRWRRWLWLWWLWWRWLWWRWLWRWLWLWRWRRWLWLWRRWLWWLWLWRWLWWRRWLWRRWLWLWRRWLWLWWLWWRRWWRWLWLWRWRRWLWLWRRWWLWLWWRRWWWLWLWRWLWLWRWRWRRWLWLWRWWWLWLWWWWRRWWLWWLWLWRWRRWLWLWRWRRWLWLWRWRRWLWLWRWWLWLWRRWLWLWWLWRWRRWLWRWWLWLWRWLWLWRWRRWLWLWRWLWWLWLWRRWWRRWLWWLWLWRRWLWLWRWLWLWRRWWLWLWWWWWRWLWRRWLWWWWRWRRWLWWLWLWRRWRWLWWLWLWRRWRWLWLWWLWWRWLWLWRRWLWLWRWRRWLWLWRWRRWLWWWRWLWWLWLWRRWLWLWRRWLWLWWLWRWWRRWWLWLWRRWWLWLWWRRWWLWLWRRWLWLWRWLWLWRWLWLWRRWLWWRWRRWLWWWLWLWWRRWWWWRRWWLWLWWWLWRWRWRRWLWLWRWWWLWLWRWLWLWRWWRRWLWLWRRWLWLWW
+WWWWWRWLWLWWLWWWWWRRWWWWWLWLWWRRWWLWWLWLWRWWLWRRWLWLWRWRRWLWLWRRWWWLWLWRRWRWLWLWRWWLWLWWRWLWWLWLWRRWWLWRWRRWLWRWLWLWWLWRRWRWWLWLWWRRWWWRRWLWLWWRWLWLWWLWRRWRWWLWLWWWLWWRWRWWLWLWRWLWLWRRWWLWLWWWWRWRRWLWLWWLWRWRRWLWLWRRWLWLWRRWRWLWWLWLWRRWLWLWRRWLWLWWLWRWRRWLWLWRRWWWLWLWRWLWLWRWRRWLWLWRRWLWLWRWRRWLWRWLWLWRWRRWLWWLWWLWLWRRWLWWWLWLWRWRWLWLWRRWLWRRWLWLWRRWRWLWRWLWLWRWLWLWWRRWLWLWWWRWRRWLWWWWWRRWWLWLWWWLWWWWLWLWRWLWLWRRWRWLWLWRWWRRWLWRRWLWLWRWWLWLWWWWLWRWRWWRRWWLWLWRWLWLWRRWLWLWWRRWWLWRRWWWLWLWWWRRWWWLWWLWLWRRWWWLWLWRWLWLWRRWWLWLWWRRWWLWWRRWWLWLWWRRWWRWLWWLWLWRWRWLWLWWLWRWWWWLWLWRWWRWRWRRWLWLWWLWRWWRRWLWWLWLWRRWRWLWWLWLWRRWLWLWRWLWLWRWWRRWLWLWRRWRWLWLWRWRWLWWLWLWRRWLWLWRWLWRWWLWLWWWLWRRWRWLWLWRWRWRRWLWLWWWRRWWLWLWWRWWLWLWRRWLWLWRWLWLWWRWWLWWRRWWRWWLWWLWLWRWRRWLWWRWRRWLWLWWRWLWLWRWLWLWWRWLWWWLWWRRWWWRRWLWLWRRWLWLWWLWWRWRRWLWLWRRWLWLWRWWLW WRWWLWLWWRRWWLWLWRRWLWLWRWLWLWWRRWWLWLWWRRWLWLWWLWRRWWLWLWWRRWWRWRWLWLWWLWWRWRRWLWWLWLWRWLWRRWWRRWLWLWWLWRRWRWLWWLWLWRRWLWLWWRRWWRWWLWLWRWLWLWRRWLWLWWRRWWWLWWWLWLWWRRWLWLWRRWLWLWRRWLWLWWRRWLWLWRWLWRRWRWLWRWLWLWWLWRRWRWLWLWRRWRWLWLWRRWLWLWRRWLWLWRRWLWLWRWLWLWRRWRWLWLWWLWRWLWLWRRWLWWLWLWRWRWWWWRWRRWLWWWWLWLWRWRWWLWLWWRRWWLWRWLWLWWLWRWWLWRRWLWLWWWLWLWRRWRWRWWLWLWRRWRWLWLWRRWWWWLWWLWLWRRWLWLWRRWLWLWRWRRWLWLWRRWWWWWLWLWWWWWRRWWWLWLWRRWRWLWLWRWLWLWRWLWLWRRWLWLWRRWLWLWWRWRRWLWLWRRWLWLWRWRRWLWWWLWLWWRRWWWWLWLWRWLWLWRRWLWLWRWWRRWWLWLWWRRWWWWLWWWLWLWWRRWLWLWRWRRWLWLWWLWRRWWWRRWWLWLWRWRRWLWLWWLWRWLWLWWWRRWLWLWRRWLWLWWLWRRWRWWLWLWWRRWLWRWRRWLWLWRWLWRRWLWWLWLWRRWLWRWLWWLWLWRRWLWWLWLWRWRRWLWLWRRWWLWWLWLWRWRRWLWLWWLWRRWRWWWWLWLWRWLWLWRWWRRWWLWLWRRWLWLWRWLWLWWRRWWLWLWWWRWRRWLWLWWLWWRRWWWRRWLWWLWLWRRWLWLWWRRWWWWWWLWLWWRWLWLWRWWWRRWLWLWRRWRWLWLWRRWLWLWRWLWLWRRWLWLWWLWRWWRRWLWLWRRWRWLWLWRWWLWLWWRRWWWLWLWWWWLWRWRRWLWLWRRWLWWLWLWRRWRWWRWRRWLWLWWLWWWLWLWRWRRWLWRWLWLWWWLWLWRRWLWWRWLWLWRRWLWLWRRWWRRWLWWRWLWWWLWLWWRWLWRWLWLWRRWLWRRWWLWWLWLWRWRRWLWLWRRWLWLWRWRRWLWRWLWLWRWRRWLWLWRRWLWLWRRWLWWLWLWRRWWLWLWRWLWLWRRWLWWLWLWRRWWRRWLWLWRRWWLWWLWLWRRWWLWLWRRWLWLWWLWRRWRWLWWLWLWRRWRWLWWLWLWRRWLWLWWWWRRWWWWWLWLWWRWLWLWRWWRRWWLWRWLWLWWLWRRWLWLWRRWWRRWLWWLWLWRWRRWLWLWRRWLWLWRWRRWLWRWLWLWWLWRWLWRRWRWLWRWLWWLWLWRRWLWLWWRWLWWRRWLWLWRRWRWLWRWLWLWRRWLWLWRWLWWLWLWRWRRWLWRWLWLWWLWRWLWRRWRWLWLWWLWRWRRWLWLWRRWLWLWRRWRWLWWLWLWRRWRWLWLWRRWLWWLWLWRWLWWWRWLWLWRWRRWLWLWRWRRWLWWRWLWWLWLWRWLWRRWLWLWRRWLWLWWLWWRRWLWRWRRWLWLWRWWRWLWLWRWLWLWRRWLWWLWWLWLWRRWLWRRWWLWLWWRWRWWLWLWWRRWWRWRWWLWLWWRWWLWLWWRWRRWLWWLWLWRWLWRWLWLWWWRRWLWLWRRWRWLWWWLWLWWRRWWRWRWLWLWRRWLWWLWLWRRWRWLWLWRRWRWWWLWLWRWLWLWRRWWWLWWLWLWRRWLWLWRRWLWLWRRWLWWRRWWLWRRWLWLWRWLWWLWLWRWWLWRRWLWLWRRWRWLWLWRWRRWLWLWRWRRWLWWLWWLWLWRRWLWRRWLWLWRWRRWLWWLWLWRWLWRRWRWLWRWLWLWRRWWLWLWWWLWWRWLWWRWRRWLWLWRWRRWLWLWWRRWLWLWWRWLWLWWWLWLWRRWLWRRWWWLWLWWRWLWLWRRWLWLWRWWRWRRWLWWLWLWRRWWWRWLWWLWLWRRWRWLWLWWLWRWLWLWRRWWLWLWWRRWWLWLWWRRWLWLWRRWLWLWRWRRWLWLWRRWLWLWRWRRWLWLWRRWWLWWLWLWRWRWLWLWWRWLWLWRRWRWRWLWLWRWLWLWRRWRWRWLWLWRWRWLWLWWLWRWLWLWRRWLWLWRRWLWLWRRWWLWLWRWLWLWRWWWLWRWRRWLWWLWLWRRWRWRWLWLWRRWLWWLWLWRWLWRWLWWLWLWRRWRWRWWLWRRWWLWLWWWLWWLWRWRRWLWRWLWLWWLWRRWRWWLWLWWRWRRWLWWLWLWRRWLWLWRRWRWWLWLWRWWLWLWWRRWLWRRWLWLWRWLWLWWRWLWWLWLWRRWWLWLWWRRWWRWLWLWWRRWWRWWLWLWWW
+WWRWLWLWRWWWRWLWRWWWLWLWWWRRWWLWLWRWLWLWRRWRWLWLWRWLWWWLWLWWRWRRWLWWLWLWRWLWRWWRRWWLWLWRWLWLWRRWLWLWRRWWLWLWWRWWWRRWWWLWLWWWWLWRRWWRRWLWWLWRRWLWLWRRWLWLWRWRWLWWRWLWLWRRWLWLWWLWWWRRWLWWLWLWRWWWWRWLWLWWRRWWLWLWRRWRWWRWLWWWLWLWWRRWWLWLWWRWLWLWRWWRRWWLWLWWRRWWWLWLWWRRWLWLWWLWRRWRWWRWLWLWRRWWWLWWLWLWRWRRWLWLWWRRWWWWWLWLWWWWWRRWWWLWRRWLWLWRWLWRRWLWLWWLWRRWWLWLWWWLWRRWWRRWLWWLWRRWLWLWRWWLWLWWWWLWRRWLWWLWWWWLWRRWRWWWLWLWWRRWLWLWWWLWLWRRWRWRWLWLWRRWRWLWLWRRWLWLWRRWWLWLWWWLWWWRWLWLWRRWLWLWRWWLWRRWRWLWRRWLWLWRWLWLWWWLWRRWLWLWWRRWLWLWRWWRRWWLWLWWRWWRRWWLWLWWRRWWLWWLWLWRWRRWLWWLWLWRWRRWLWLWRWRRWLWLWRRWLWLWWLWRWRRWLWLWRWLWLWWWLWWRRWLWLWWWRRWWWLWLWWWRRWLWLWWLWWRRWLWLWWRRWLWLWRRWLWLWRRWRWWLWLWRRWWLWLWWWLWRRWRWWWLWLWRWWLWWLWLWRWRWRRWLWLWRWRWWRWWLWLWRWLWLWRRWRWRWLWWLWLWRWLWRWRRWLWRWLWLWRWLWLWWRRWLWLWWRWLWLWWWRRWWWRWRWLWWRWLWLWWLWWRRWWWRRWLWLWWLWRWWWWLWLWWWWRWRRWLWWWWLWWLWLWRWRRWLWLWWLWRRWWWLWRWLWLWRWLWLWWRRWLWLWRRWLWWRWWRRWWLWWLWLWRRWRWLWLWWLWWRWWLWLWRRWRWRWWLWLWWWLWWRRWWRWWLWLWWRRWWRWLWLWRWLWLWWRWLWLWRWRRWLWWLWLWRRWRWWRRWLWLWRWLWLWRWLWLWRRWRWRWLWLWWLWWRRWLWLWRRWLWLWRRWRWLWLWRWLWWLWLWRRWRWRWWLWLWWWWLWLWRWRRWLWLWRRWWLWLWRRWLWLWRRWLWLWRWWWLWWLWLWRRWWLWLWWRRWLWWLWLWRRWRWLWLWRRWLWRWLWLWRRWLWLWRRWLWLWRRWRWWWRWLWLWWWLWLWRWWWWRRWLWWWLWLWWRRWLWLWRWLWLWRRWWWWRRWLWLWWWLWLWRRWRWRWWWRWLWLWRRWLWLWRWLWLWWRWRRWLWLWRRWLWWLWLWRRWLWLWWRWLWLWRRWLWLWRRWLWLWWLWRWRRWLWLWRRWLWLWRWRRWLWLWRRWWLWLWWRRWLWLWW WLWRRWLWRWLWLWWLWRRWRWLWWLWLWRRWWLWLWWWWWRWWWRRWWWLWWWLWLWWRWRRWLWLWWLWRRWRWWLWWLWLWRWRWRRWLWLWRWRWLWLWWLWWWRRWLWLWRRWLWLWRRWRWWLWWLWWLWLWRRWRWRWWLWRWLWLWWLWRRWLWLWRRWRWWLWLWWRWLWRWWWLWWLWLWRRWRWLWLWRWLWLWWWRRWLWLWRWLWRWWWRRWWLWLWRRWRWLWLWWLWWWLWRWWLWLWRRWRWLWLWRRWRWWWLWLWWRWLWLWRRWWRRWLWWRRWLWLWWWWWRWLWLWWLWWWWRRWLWLWWWRRWWWRWLWLWRWRRWLWLWWRWLWLWWLWRRWWWLWLWWRWLWLWRWRRWLWLWWLWRWRRWLWLWWLWRRWLWLWRWRRWLWRWLWLWWLWRWLWRRWRWLWLWRRWLWLWRRWRWLWLWRRWLWRWLWLWRWRRWLWLWWWWRWLWLWRRWLWRWLWWLWLWRRWLWLWWRRWWLWLWWWRRWWLWLWRRWWLWLWWWLWRRWLWLWWRWWRWLWWWRRWWWRWLWWLWLWRRWLWLWRWLWLWRRWWRWRRWLWLWRWLWLWWRRWWLWLWWRRWWLWLWRRWLWWWLWLWWRWLWRRWLWWRRWWWLWLWRRWLWRWLWLWWWLWLWRRWLWRWRRWLWLWWLWWWLWRWLWLWRRWWRRWLWLWWLWRRWRWWLWLWWWLWWRWLWWWRWWRRWWLWLWWWLWRWWRRWLWRRWLWLWWLWWLWRRWWRRWLWWRWLWLWRRWLWWLWLWRRWLWLWWRRWWWLWLWWRRWLWLWWLWRWLWRWRRWLWLWWRRWWLWLWWRRWLWWWLWLWWRRWWRWRWWWLWLWRRWWLWLWWWLWRWRRWLWLWRRWWWLWLWRWRRWLWLWRWLWLWWRRWLWLWRRWLWWLWLWRWLWWWWRRWLWLWRRWRWLWLWRRWLWLWRRWLWRWLWLWRRWWWLWLWWWRRWWLWWLWLWRRWLWLWRWLWWWRRWWWLWLWRWLWLWRRWLWLWRWRRWLWLWRWLWLWWRWWRRWWLWLWWWWLWLWRRWWWRWWRRWWLWWLWLWRRWWWLWLWWRRWWWRRWLWLWWLWRWRWLWLWRRWLWWWLWLWWRRWLWLWRWLWLWRRWLWLWRWRWLWLWRRWLWLWRRWRWWRWLWLWRWLWWLWLWRWRRWLWLWWLWRWWLWWRRWLWLWRWLWRRWLWRRWLWLWRWWRRWWLWRWLWLWRWLWWRRWLWWLWLWRWLWWLWWRWRRWLWLWRRWLWLWRRWLWLWWLWRRWRWWLWLWWRWRRWLWWRWWLWWLWLWRRWRWWLWWLWLWRWRWLWLWWWRRWLWRRWLWWLWLWRWLWWLWRWWRRWWLWLWRWLWLWRWRRWLWRWLWWLWLWRWLWRRWWRRWLWLWRWLWLWRRWLWLWWLWRRWRWWWRRWLWLWRRWLWWWWLWLWWRRWWLWLWWRRWLWRRWLWLWRWLWLWWWLWRWLWWRRWLWWRWRRWLWWLWWRRWLWLWRWWWWWLWLWWWWRRWLWLWWLWRWWLWWRRWLWRRWLWLWRRWWWLWLWWWRWRRWLWLWRRWLWWLWLWRRWLWLWRRWRWLWRRWLWLWWRWLWWLWLWRRWRWLWRWWLWLWRWLWLWRWLWRRWRWLWLWRWWLWLWWWRRWWWWLWRWLWLWRRWLWLWRRWLWLWWLWWWRWWRRWWLWLWRWLWLWRWLWRRWRWLWRWRWLWLWWLWWRWLWLWWRRWLWLWWWWRRWWWLWWLWLWRWWRRWLWLWRWRRWLWRWLWLWWLWRWRWLWRRWLWLWRRWRWWLWLWRWLWLWRRWWLWLWWWRWWLWLWWRRWWLWLWWWWRWLWRWRRWLWLWRRWWLWWLWLWRRWLWLWRRWWRRWLWLWRRWLWLWWLWWRRWWWLWLWRWLWLWRRWLWLWRRWRWLWLWRRWRWLWWRRWLWLWRWLWRWWLWWLWLWRWRRWLWLWRRWWLWLWWRRWLWLWRRWRWLWWLWLWRWLWRWLWLWRRWRWWLWLWWRRWLWRRWLWLWWWLWLWRWRRWLWLWRWLWLWWWLWRRWRWLWLWRRWLWLWWLWWRRWLWLWRWRWLWLWRWRWWLWLWWRRWLWLWRWRRWLWLWRRWWLWLWWRRWLWWLWLWRWLWRRWLWLWRRWLWWRRWWWLWWLWLWRWWRRWLWLWRRWRWLWLWWLWRWLWLWRRWWRRWLWWLWLWRRWLWLWWRWRWRRWLWLWWWLWLWRRWRWWRRWLWLWWRWLWLWRWLWRWWLWLWWRRWLWLWRRWWWLWLWRRWLWRWWLWLWWWLWRWWLWLWRRWRWRWLWLWWLWWWRWLWLWRRWLWLWRRWRWWLWLWRWWRRWLWLWRRWRWLWLWWLWWRRWWRWLWWLWLWRRWLWWLWWLWLWRRWWWRRWLWLWRRWRWLWLWRWWWWRWLWLWRWLWWLWLWRRWWLWLWWRRWLWLWRWWRRWLWLWWLWRWRRWLWLWWLWRRWRWLWLWRRWRWLWLWRRWLWWLWLWRRWRWWLWLWRWLWLWRWLWRWRRWLWRWLWWRWLWRWWLWLWRWLWLWRWLWRWLWWRWRRWLWWLWRWWLWWLWWLWLWRRWWLWRRWRWLWLWWLWRWLWRRWRWLWLWWLWRRWLWLWWRWLWLWRRWWRWLWLWRRWRWRWLWLWRWLWLWRRWLWLWWLWRWRRWLWLWRWRRWLWWWWLWRWRRWLWLWWWLWLWRRWRWLWLWRRWLWLWRRWLWLWRRWLWLWRRWWLWLWRRWLWLWRWRRWLWLWWLWRWLWLWRWLWLWRWRWRRWLWLWRWLWLWRWLWLWRWLWWRRWWLWLWRRWLWLWRRWRWWWLWLWWRRWWWLWLWWRRWLWLWRRWLWLWWLWRWLWLWRRWLWRRWLWLWWRWLWLWRRWRWRWLWWLWLWRWLWWRRWLWLWRRWLWLWRRWRWLWLWRWLWLWWWRRWLWLWWRRWLWLWRWRRWLWLWWRRWLWLWRWRRWLWRWLWWLWLWRRWWLWLWWWRRWWLWRRWLWLWRWRWLWLWWLWRWLWLWRRWLWLWRRWLWLWWRWWRRWWLWLWRWLWLWRRWLW
diff --git a/codejam_2008/src/y2008practice/B-small-practice.in b/codejam_2008/src/y2008practice/B-small-practice.in
new file mode 100644
index 0000000..0e29674
--- /dev/null
+++ b/codejam_2008/src/y2008practice/B-small-practice.in
@@ -0,0 +1,101 @@
+100
+WRWWLWWLWWLWLWRRWRWWWRWWRWLW WWRRWLWLWWLWWLWWRWWRWWLW
+WW WW
+WRWLWLWRWRRWLWLWRWLWLWWRRWLWWLWLWRRWRWLWLWRRWWRWRRWLWLWWLWRRWLWLWRWRWLWLWRWLW WRWLWLWRWLW
+WWWLWLWRRWLWLWWLWRW WLWRWWRWWRWWLWLWWRRWLWLWRRWRWLWLWRRWWLW
+WWRWLWLWRRWLWLWRRWLWWLWLWRRWWWWRRWLWLWRRWRWLWLWRRWLWLWRWWWWRWLWLWW WWLW
+WLWWRWLWLWRWWRWRRWLWLWRRWLWLWRWRWLWLWRRWLWLWRRWLWWLWLWRRWRWLWLWRWRWLWWLWLWRRWWRWLW WRWLWLWRWWRWLWLWRWWWLW
+WRWLWWLWLWRRWWRRWLWLWRRWLWLWRWWRRWWLWWLWLWRWWLWRWRRWLWLWRRWLWLWW WLWRWRRWLWLWWRRWLWLWWLWWLWRRWWRRWLWLWRWLWLWWRWLW
+WWWLW WLWWWRRWWWWWW
+WWWWWWWWRRWWWWWWWLW WLW
+WWRWLWLWRWRRWLWLWWWLWLWRRWRWWLWLWWRWRRWLWLWRRWLWWLWLWRRWRWWLW WRWLWLWRWLWLWWRWRRWLWWLWLWRRWLWLWWRWWRWRRWLWLWRRWLWLWWLWRWLWLWRRWLW
+WLWRWLWWLWLWRRWW WLWRWWRWLWWLWLWRRWWWRRWLWLWRRWRWLWLWRWLW
+WWWLW WWRRWLWLWRRWLWLWWLWWRWRRWLWLWRRWLWLWRRWWWLW
+WWWWWWWWWWWLW WLWWWRRWWWWWWWWWWWWWW
+WWRWRWLW WRWLWLWW
+WLW WLWRWLWLWRRWRWWLWLWRWLWLWRRWRWRWLWLWRRWWRWLWLWW
+WWWWWWWLW WLWWWRRWWWWWWWWWW
+WLWRWRWLWWLWLWRRWRWRWLWWLWLWRRWWRRWLWLWRWLWLWRWLWLWRRWW WLWRWLWLWRWRRWLWLWRWRRWLWLWRWLWLWWRRWLWLWRRWRWLWLWWLWRWLWLWRW
+WWWWWWWWWWWRRWWWWWWLW WLWWWWW
+WRWLWWLWLWRRWLWLWRWLWLWRRWRWLWLWRW WLWRWWLWLWWRWRWRRWLWLWWLWRRWLWLWRRWLWWLWLWRRWWRRWLWLWRWWRWRRWLWWLWLWRRWLWLWWRWLW
+WWRRWLWLWWWLWLWRRWW WLWRWLWLWRRWWRRWLWLWWLWRRWWLW
+WWLWLWRRWLWLWRWRRWLWLWWLWRRWLW WWWWWRWW
+WLWRRWLWLWRW WLWWRRWLWLWWLWRRWLWLWRRWLWLWRRWLWLWRRWLWWWLWLWWRRWWWRWLWLWRRWLWWLWLWRRWRWRWWWRWLWLWRWWWWWWWWLW
+WLWWWRWLWLWRRWLWLWRRWLWLWRWRRWLWLWWWLWLWRRWRWLWLWRRWRWWWWWWWWRRWLWLWWLWRRWLWLWRW WLWW
+WWLWLWRRWRWLWLWRWRRWLWLWWLWRRWLWLWRWWRRWLWLWWLWRRWLWLWRRWLWWLWLWRRWWRWLWLWRRWLW WWRWLWLWRWWWWWRWLWLWRWWWWWW
+WWWWWWWWWWLW WLWWRRWWWWWWWWWWWW
+WWWWWWWWWLW WRWWWWWWWWW
+WWWWWRRWWWWLW WLW
+WRWWLWLWWWLWRRWWRRWLWWWLWLWWRWLWRRWRWLWWWLWLWWRRWWRWRWLWWLWLWRRWLW WWWWLW
+WLWWRRWLWLWRWWRRWWLWLWWWLWRWLW WRWLWLWRRWLWLWRRWWRRWLWLWWWWLWLWWRRWWW
+WLWRWRWLWLWRWRRWLWLWRRWWRWLWLWW WLW
+WWWWWWWWWWRRWWLW WLWWWWWWWW
+WWWWWW WWWWWW
+WLWWWWWWWWW WWWWWWWWWWRRWLW
+WWW WWW
+WWRWLWLWRRWLWLWRWRRWLWWLWWLWLWRRWWLWLWRRWRWLWLWRWRRWLWLWWLWRRWLWLWRWLW WRWLWLWRRWWLWLWWRRWWRWLWWWLWLWWRRWWRWLWLWRWWRWLWWLWLWRRWWRRWLWLWRRWLWLWW
+WLWRRWLWWLWLWRRWWWLW WLWRWLWLWRWRRWLWLWWLWRRWLWLWRWWWWRWRRWLWWLWLWRRWWRRWLWLWWLWRWWWWRWLWWWLWLWWRRWWWWW
+WWRWRRWLWLWWWLWLWRRWLW WLWWWWRRWLWLWRRWRWLWLWRRWLWLWRRWLWLWRWWWLW
+WLWWRRWWWWWLW WLWRRWWWWLW
+WWLWLWRRWRWWLWWWLWLWWRRWLWLWRRWWLW WRWLWLWRWRWWLWWLWLWRWRWWRRWWLWLWRWLWLWRRWRWLWLWWLWWWRRWWWRWLWLWRRWRWLWLWRRWWLWLWWRRWWLWLWWRRWLWLWW
+WLWWWWWRRWWWWWWWWWWWWWRRWWLW WLWWWWWWLW
+WLWWRWWRWWWWWRWLW WWLWLWRRWWRRWLWLWRRWWLWLWWWWLWLWRRWRWLWLWWLWWRW
+WWWRWRRWLWLWWLWRRWLWWLWLWRRWRWLWLWRWRWWLWLWWRWWRRWWLWLWWWLWRRWWLWLWRWLWLWRRWWRWLWLWRRWWRRWLWLWRWLW WRWLWWLWLWRWLWRWRWLWLWRRWLWLWRRWLWLWRWWRRWLWWLWLWRWWLWLWRRWRWLWLWRWRRWLWLWWLWW
+WLWLW WLWWWRRWWWWWWWWWWWWWRRWWWWWWWWWLW
+WWLWLWRRWLWLWRWRRWLWLWWLWRWWWLW WLWRWLWLWRWWWWWRWRWRRWLWLWWLWRRWLWLWRWRRWLWLWWLWRWRWLWWLWLWRRWRWLWWLWLWRRWWWWWRWW
+WLWW WWWWWWWWWWWWWWWRRWWWWWWWWWWWWWLW
+WRWLWWLWLWRWLWRRWLWLWRWRRWLWWLWLWRRWRWRWLWLWRRWLWLWRWWW WWLWLWRRWLWLWRRWWLW
+WWWRRWWLW WLW
+WLWWRWLWLWRRWRWWLWLWWRRWWLWLWRRWLWLWRWLWLWWRRWWLW WWRWLWLWRWRRWLWLWRRWLWLWRWRRWLWLWWLWRRWWLWLWWRW
+WLWWWW WWWWWWWWWWWWWWWRRWWWWWWWWWWWLW
+WWWWWWWWWWWWWWLW WLWRRWWWWWWWWWWWWWWW
+WLWWWWRRWWWWWWWWWWWLW WLWRRWWWWWWWWLW
+WRWLWLWRRWLWWLWLWRRWLW WWLWLWRWRRWLWLWWLWRRWRWLWLWRRWRWLWWLWLWRRWRWLWWLWLWRRWRWLWLWRRWWLW
+WLW WLWWRRWLWLWRRWWRRWLWLWW
+WWRWLWLWRRWLWLWRWWWWRRWLWLWRRWRWLWWLWLWRRWRWLWLWRWWWW WWLWLWW
+WRWLWLWRRWWLWLWWRWRRWLWLWWLWRRWWLWLWRWLWLWRRWRWWLWLWWRWRRWLWLWWLWRRWRWWLWLWWW WWLWLWRRWRWLWLWRRWLWLWRRWWLWLWWRWRRWLWLWRWLWWLWLWRWRRWLWLWRWRRWLWLWWLWRRWRWLWLWRWLW
+WLWLW WLWRRWWRW
+WWWLWWLWLWRWRRWLWLWRRWLWLWW WWWRRWLWLWRWWRWWLWWLWLWRWRRWLWLWRRWWRWWLW
+WWWWWWWWWWRRWWWLW WLWWWWWWW
+WLWWWWWW WWWWWWRW
+WRWLWLWRWRRWLWLWWWWLWLWWRRWWRWLWWLWLWRRWRWLWLWRRWWRRWLWLWRRWLWLWRRWLWLWRRWLWLWW WWLWLWRRWLWLWRRWLWWLWLWRRWRWWLW
+WWWWWRRWLW WLWWWW
+WWWWRRWWLWLWWW WWLWLWRRWRWLWLWRWRRWLWLWRRWLWLWW
+WRWWWW WWWWLW
+WLWRWLWLWRWWWRWRWRRWLWLWWWLWLWRRWWWRRWLWLWWLWRRWLWLWRRWW WLWWLW
+WWWWWWWWWWWWWW WWWWWWWWWWWWWW
+WWLWLWRWRRWLWLWRWRRWLWWLWLWRRWW WLWWW
+WWWWRW WLWWWW
+WLWWWWWRRWWWWWWWWWWWWWWW WWWWWWWWWWLW
+WLWWWWW WWWWWWRRWLW
+WWWWLW WLWWWWWRRWWWWWWWWW
+WWLWWWLWLWWRRWWRWWRRWLWLWWLWRRWWLWLWWRRWWLWLWWRWRRWLWLWW WWLWLWRWRRWLWLWRWRRWLWLWWLWRRWWLWLWWRRWWLWLWWRWW
+WLWRRWLWWLWLWRRWRWWRWLWLWRRWLWLWRRWRWLWLWRRWLW WWLWRWLWLWWLWRRWLW
+WWRRWLWLWRRWLWLWRRWLWLWRWRRWLWLWRRWWLW WLWWLW
+WLWLW WRWLWLWRRWLWLWRRWLWLWRRWLWWWLWLWWRRWWWWWRRWLWLWRRWRWLWLWRRWLWLWRWWWWWWW
+WWWW WWWW
+WLWWWRRWWLWLWWRRWWLW WLWWWRRWLWLWRRWRWLWWLWLWRW
+WLWWWRRWWLWLWWRWLW WRWLWWWLWLWWRRWWRWRWLWLWRW
+WWLWLWRRWLWLWRWRWWRRWWLWLWWW WWLWWLWLWRRWRWLWLWRRWWRRWLWLWW
+WWWW WWWW
+WWLW WRWLWLWRRWRWLW
+WLWRWRRWLWLWWLWRRWRWLWLWRWRRWLWLWRWW WLWRRWLWLWWLWW
+WRW WLW
+WRWLWLWRRWLWLWRRWRWWW WLWLW
+WWLWLWRRWLWLWRRWLWLWRRWLWLWRWRRWLWLWRW WLWWWWWWRRWLWLWRRWLW
+WLWRRWLWLWRRWLWLWRRWWRRWLWWLWLWRWLWRWRRWLWLWW WLWRRWLWWLWLWRRWWLW
+WRWWWWWW WWWWWWLW
+WWWWWWWLW WLWWRRWWWWWWWWW
+WWLW WRWLWWLWLWRWLWRRWRWLWLWRRWWLWLWWRRWWLWLWRWLWLWRRWRWWRRWLWLWRWWWWLW
+WLWWWRWRWRRWLWLWWLWW WLWWWRRWWWLWLWWWRRWWLW
+WRWLWLWRRWLWLWRRWLWLWRRWLWLWRRWLWLWRRWLW WWWWWWRWLW
+WLWRWWRRWWLWLWWWWLWLWRRWRWLWLWRWWRRWLWLWWLWRRWLWLWRWRRWLWLWRWLWLWRRWLWLWRWLWLWWRRWWRWWLW WRWLWLWRWWRWLWWLWLWRRWRWLWLWRWRRWLWLWRWLWLWWRWRRWLWLWWLWRRWLWLWRRWLWLWRWRRWLWLWW
+WWWWWW WWWWWW
+WWLWLWRRWWRWLWLWRRWLWLWRRWLWLWRWWRWLWLWW WWLWLWRRWRWWRWLWWLWLWRRWWWWRWLWLWRWW
+WLWRWWRWLWLWRWWRWLWLWRRWLWLWRRWLWLWRW WLWRWWWRWLWLWRRWLWLWRWRWLWLWRRWLWLWRW
+WLW WWRRWLW
+WWLWLWRW WLWRWLWLWRRWRWLWLWRRWRWLWLWRRWLW
+WLWWRRWLWLWRRWLWLWRRWRWWLWLWRWLWLWRRWWWRRWWLWLWWWLWRWRWLWWLWLWRRWRWWLWLWWRRWWRWWRRWLWLWWRWLWLWWLWRW WLWWRRWLWLWWWWLWLWWRRWWLW
+WLWWWLW WLWWWWRRWWWWWWWWWRRWWLW
+WWWWWW WWWWWW
+WLWWWRRWWWWWWWLW WLWWWRRWWWWWWWLW
diff --git a/codejam_2008/src/y2008practice/C-large-practice.in b/codejam_2008/src/y2008practice/C-large-practice.in
new file mode 100644
index 0000000..afc78f6
--- /dev/null
+++ b/codejam_2008/src/y2008practice/C-large-practice.in
@@ -0,0 +1,101 @@
+100
+3 3 3
+7 5 3
+1 1 1
+1312683601 37906895 2316650
+651832418 39789265 402855
+115671077 915 66
+1112818449 855131647 543194508
+426274996 116557630 97570257
+1395056893 115427736 83327394
+572654993 199564 171140
+867963691 21818 21235
+19716824 876568072 206733330
+633199557 5250893 2514418
+1514059515 672721479 217934827
+1805418818 8674330 7950966
+1055255952 43 28
+10 9 3
+114048537 83331 55323
+956514065 10654745 9116447
+1328079113 133 10
+1809653649 778326 255473
+568129229 50987732 28512781
+1143780056 14093601 1674814
+391236197 13798 13285
+1647584377 23140 14813
+1001615212 805935 759985
+249861 400 192
+1 2 1
+1413920662 583265 337300
+290578488 7464965 5772757
+101 9 3
+6 4 4
+1 1 1
+1437 11 7
+885200 21 20
+72 8 8
+24 9 2
+5834 23 4
+1 1 1
+2 2 1
+6 3 3
+17 8 3
+6 4 2
+2 4 1
+69 8 4
+6653 13 12
+30185 60 3
+16863 17 11
+22 5 3
+3 2 2
+1 4 2
+1 1 1
+42476 93 3
+2 2 1
+1 1 1
+21516631 169 5
+109 7 6
+4 5 1
+1 1 1
+431 10 7
+115 9 6
+914104362 31 24
+5 8 1
+7 10 2
+274055380 30 15
+3 4 3
+6 7 4
+81 7 4
+338162448 30 23
+1 1 1
+1 8 1
+452 51 3
+1 3 1
+13 6 2
+493 12 11
+377 10 5
+15595671 28 19
+1307 21 3
+341 10 6
+2 4 2
+41 6 6
+8 6 4
+9 5 5
+570 13 9
+352 10 10
+1 1 1
+173 10 3
+389996112 47 9
+252 9 8
+1 1 1
+7 5 5
+18 6 2
+2 2 1
+794299957 31 22
+1 1 1
+1 1 1
+1 2 2
+490 10 5
+18226902 198 4
+1 1 1
diff --git a/codejam_2008/src/y2008practice/C-small-practice.in b/codejam_2008/src/y2008practice/C-small-practice.in
new file mode 100644
index 0000000..0615f83
--- /dev/null
+++ b/codejam_2008/src/y2008practice/C-small-practice.in
@@ -0,0 +1,101 @@
+100
+3 3 3
+7 5 3
+2 2 1
+33 81 6
+95 67 62
+52 82 45
+1 26 6
+100 83 6
+79 72 42
+67 50 20
+21 19 13
+34 85 81
+42 76 11
+27 71 12
+93 30 25
+46 51 27
+100 26 7
+24 94 1
+66 89 41
+63 7 3
+34 90 54
+65 89 8
+61 53 40
+47 14 14
+77 16 8
+87 98 96
+92 39 35
+20 46 7
+6 5 3
+16 45 1
+32 44 5
+56 65 60
+82 58 14
+88 34 31
+85 72 38
+34 27 20
+43 86 40
+42 97 94
+20 90 75
+2 2 1
+41 53 47
+2 8 4
+38 24 17
+56 97 28
+68 17 16
+3 42 7
+40 95 36
+66 88 42
+44 16 5
+55 24 11
+1 6 4
+12 35 7
+9 4 2
+44 22 19
+1 3 1
+71 11 8
+2 2 2
+59 29 24
+92 17 9
+5 3 3
+1 14 1
+86 10 8
+3 3 1
+99 30 22
+37 36 9
+72 12 11
+18 31 22
+32 15 11
+44 23 19
+30 12 4
+4 12 1
+62 25 4
+50 11 5
+80 9 9
+77 11 3
+28 51 5
+74 10 8
+82 69 2
+36 23 22
+47 96 2
+68 25 17
+4 8 1
+9 28 1
+76 29 10
+53 22 2
+26 25 11
+51 25 18
+73 35 13
+57 18 11
+12 5 2
+53 22 11
+25 11 6
+99 21 4
+35 44 1
+9 25 7
+3 6 1
+6 3 2
+36 78 7
+80 90 4
+88 30 12
diff --git a/codejam_2008/src/y2008practice/D-large-practice.in b/codejam_2008/src/y2008practice/D-large-practice.in
new file mode 100644
index 0000000..2a11322
--- /dev/null
+++ b/codejam_2008/src/y2008practice/D-large-practice.in
@@ -0,0 +1,625 @@
+20
+14 3 1
+mo! dq! gi xt! fy vk kj fn ph! js fm! at! no! wn
+-50 -502 no:423 vk:499 wn:552 js:267 fy:331 fn:608 ph:214 fm:604
+-283 -334 kj:773 vk:78 wn:133 js:332 xt:728 fy:802 at:505 fm:85
+398 -221 no:829 mo:586 vk:240 fy:316 fn:853 ph:766 at:59 gi:932 dq:292
+14 48 1
+lv sa! ux sv mj! jv! ub! dv fv zx! um oy! ya! db
+288 -333 lv:351 jv:47 sv:693 mj:774 um:506 zx:128 oy:860 dv:592 sa:900
+902 506 ya:54 sv:19 mj:553 um:126 zx:37 oy:416 dv:168 ub:773
+880 633 lv:859 ya:497 jv:268 sv:225 ub:18
+-254 -983 lv:888 fv:240 sv:653 mj:664 um:510 zx:839 oy:992 dv:57 sa:828 ub:738
+-604 729 lv:884 ux:525 ya:983 jv:185 mj:184 zx:218 oy:941 ub:87
+844 -243 ya:51 jv:994 sv:549 zx:353 oy:415 ub:842
+1000 844 ux:556 fv:733 ya:505 mj:768 um:366 zx:459 oy:602 dv:16
+560 253 ux:824 ya:593 jv:466 um:151 oy:553 ub:642
+-553 -398 lv:811 ux:862 db:163 sv:789 um:364 dv:378 ub:383
+894 -827 ux:171 ya:397 jv:426 db:355 mj:535 um:39 oy:752 dv:192 sa:878 ub:888
+-177 -592 fv:82 jv:552 sv:52 mj:316 um:841 zx:106 oy:423 dv:276
+-917 852 fv:147 ya:841 jv:17 mj:666 um:93 zx:25 dv:158 sa:912 ub:182
+452 644 ux:798 sv:972 um:123 ub:755
+822 -91 ya:212 um:178 zx:241 dv:593
+234 312 lv:530 ux:865 fv:137 jv:598 sv:635 um:567 zx:464 dv:479
+-569 -855 lv:412 ux:330 jv:459 sv:995 um:454 zx:190 oy:623 dv:403 sa:640 ub:475
+-929 188 lv:358 ux:383 mj:134 um:40 zx:44
+-807 1 fv:363 ya:950 jv:438 db:422 sv:126 um:852 zx:687 oy:363 dv:329 sa:305
+619 930 lv:277 fv:740 ya:11 sv:55 um:313 zx:712 oy:220 sa:892
+718 -27 lv:701 ux:685 fv:589 jv:672 db:889 sv:413 mj:329 dv:115 sa:116 ub:168
+-699 -704 lv:401 ux:66 fv:76 jv:84 um:729 ub:290
+178 -368 ux:535 fv:169 ya:263 db:164 zx:336 oy:361 ub:358
+-147 -219 lv:407 ux:402 ya:508 mj:852 zx:77 oy:898 dv:293 sa:601 ub:980
+724 983 lv:255 ux:865 fv:350 jv:133 db:534 sv:726 dv:321
+221 -202 lv:648 ux:449 jv:731 sv:388 um:229 ub:776
+-662 277 lv:720 fv:819 sv:108 um:678 oy:525 dv:314
+932 517 lv:101 ux:458 ya:973 mj:375 um:111 ub:762
+-6 47 fv:197 ya:886 sv:888 mj:195 zx:323 sa:560
+432 162 fv:941 ya:292 jv:877 sv:714 mj:730 um:825 zx:575 oy:203 dv:201 sa:901
+-708 -480 ux:518 fv:639 ya:78 um:4 zx:70 oy:507 dv:194 sa:476 ub:389
+-365 -416 lv:88 ux:525 jv:4 sv:205 mj:239 zx:576 oy:680 sa:565 ub:737
+934 -142 lv:867 ux:823 fv:648 ya:713 jv:350 mj:491 oy:618 dv:214 ub:195
+-891 -647 ux:897 fv:605 ya:390 jv:399 db:81 sv:867 dv:412 sa:374 ub:520
+-111 -740 lv:183 jv:697 db:952 mj:548 um:591 zx:673 sa:891
+-259 967 lv:499 ux:522 ya:874 mj:165 um:731 zx:983 oy:142 dv:483 ub:426
+201 -313 lv:53 ux:843 ya:170 db:94 mj:986 zx:604 dv:874 sa:11 ub:911
+-802 70 lv:907 ux:530 ya:12 db:17 sv:871 mj:120 um:452 oy:631 dv:305 ub:276
+-382 -689 fv:72 db:167 mj:680 um:843 zx:363 oy:856 dv:866
+597 137 ux:843 fv:839 ya:537 jv:951 db:989 sv:923 mj:209 um:80 oy:321 dv:393 sa:121
+-774 440 ya:628 jv:382 um:415 zx:613 dv:356
+-757 488 ux:848 db:863 mj:155 zx:261 oy:193 dv:500 sa:143
+-337 -945 fv:639 ya:547 sv:428 mj:371 um:380 sa:526 ub:505
+485 -777 lv:921 ux:47 fv:246 jv:49 db:992 sv:431 mj:187 oy:477 dv:622 sa:276
+384 902 lv:235 ux:465 ya:561 jv:361 db:783 sv:11 mj:656 um:960 zx:592 oy:323 dv:755 ub:156
+263 296 lv:46 fv:990 jv:956 db:987 mj:710 um:415
+276 601 lv:300 ux:346 ya:400 jv:113 db:561 mj:765 zx:364 ub:928
+-67 -25 db:484 sv:725 mj:884 zx:615
+179 -503 ux:237 jv:310 db:567 sv:618 mj:206 um:575 oy:760 sa:774 ub:928
+11 43 0
+up! ti ul cv ct ni je! om! rs! ye gl
+-321 -667 rs:825 up:56 ti:508
+-218 -611 cv:640
+334 -277 rs:142 ye:477 ul:700 ti:176 je:410 cv:824
+-795 451 om:722 rs:830 ye:417 ti:30 je:820
+-857 -4 rs:261 ye:306 ti:736 gl:79 cv:250
+-510 -814 rs:686 ye:272 up:799 ti:877 cv:287 ct:185
+727 41 om:692 ti:201 gl:372
+464 693 om:129 rs:523 up:836 ul:429 ti:578 gl:813 cv:580 ct:251
+-254 -851 ni:657 ul:798 gl:452 cv:315
+315 -174 om:671 ye:769 up:625 ul:408 je:684 cv:418 ct:877
+-111 -622 ni:571 rs:119 up:592 ti:168 je:972 cv:6
+-507 -855 ni:933 om:679 up:524 je:164 cv:261
+-225 -178 ni:708 rs:896 up:941 ti:249 je:73 gl:591 cv:669 ct:988
+-915 -411 om:159 rs:561 ye:208 up:924 ul:418 je:828 gl:349 ct:778
+-325 -440 ni:237 rs:263 je:67 gl:291 cv:660 ct:410
+116 -368 ni:498 rs:340 up:381 ul:667 ti:691 gl:240 cv:449 ct:99
+732 703 ye:908 up:845 ul:940 cv:771
+-256 135 ni:511 rs:659 ye:104 up:333 ti:556 je:628 ct:117
+971 -107 ni:377 om:865 ti:50 je:461 cv:132
+-432 -476 ni:445 up:518 ul:216 je:623 ct:796
+-233 291 ni:1 om:461 rs:966 ye:347 up:442 ul:849 ti:586 je:236 cv:925
+426 -590 ni:344 rs:4 ul:679 ti:700 gl:730 cv:205
+-641 205 ni:566 om:566 rs:226 je:256 gl:811 cv:706 ct:854
+313 41 up:690 ul:679 cv:418 ct:809
+-435 -701 om:827 ye:567 up:979 ti:766 gl:309
+-864 -286 ni:589 om:103 rs:790 up:625 ul:969 ct:871
+-636 -504 om:943 rs:668 up:867 ul:421 ti:741 je:255 gl:261
+23 858 ni:280 ye:714 ul:485 gl:654 ct:320
+-752 343 om:474 gl:821 ct:703
+-863 -259 ni:602 rs:639 ye:307 up:929 ti:166 gl:906
+848 -639 om:339 rs:897 ye:628 up:210 ul:79 ti:800 gl:262 ct:804
+-659 99 ni:935 up:743 ul:342 ti:773 je:196 gl:21 cv:51
+-90 -652 ul:334 ti:924 je:213 ct:457
+565 -392 ni:276 rs:629 ye:854 ul:273 je:953
+-236 -172 om:931 rs:495 ye:355 ti:312 cv:878 ct:633
+-843 560 ni:638 om:339 ye:72 ul:856 ti:307 gl:418 ct:789
+132 -297 ni:191 om:76 rs:113 ye:358 ti:550 je:304 gl:381 ct:375
+17 -457 ni:733 rs:325 up:863 ul:42 ti:154
+113 467 rs:634 ul:982 ti:776 cv:924
+-652 251 ni:901 om:427 up:557 ul:859 je:614 cv:644 ct:747
+-84 -295 rs:538 ye:384 up:686 ul:465 ti:976 cv:226 ct:49
+826 959 om:45 rs:429 ul:687 ti:879 je:344 gl:667 cv:214 ct:916
+-193 -635 up:821 ti:889 je:59 gl:412 cv:11 ct:184
+1 23 0
+gs
+846 -405 gs:662
+-924 -193 gs:606
+-328 666 gs:231
+681 173 gs:522
+-360 -219 gs:187
+214 154 gs:362
+323 -398 gs:467
+-712 808 gs:8
+-583 -3 gs:865
+738 -613 gs:630
+380 597 gs:111
+949 -729 gs:187
+519 -864 gs:900
+860 -149 gs:177
+-521 -937 gs:394
+-342 -774 gs:634
+-96 128 gs:377
+25 280 gs:448
+-821 -928 gs:362
+258 631 gs:37
+126 -513 gs:2
+140 772 gs:161
+-129 -488 gs:696
+5 32 1
+ku! zr rp ea gc
+82 -538 ea:353 zr:675
+159 233 gc:519 zr:142 ku:216
+494 22 ea:60 zr:779
+767 908 rp:633 gc:690 zr:157 ku:322
+105 293 ea:545 zr:235 ku:853
+182 548 gc:184 ku:41
+540 855 gc:286 zr:97
+259 992 rp:83 gc:734
+79 426 gc:198 ea:651
+-551 292 ku:951
+-98 103 ku:269
+-261 -546 gc:824 ku:624
+-700 33 rp:746 ea:161 zr:344
+-84 73 rp:523 gc:732 zr:236 ku:999
+-800 -303 rp:536 ea:730
+-771 949 zr:866
+124 -763 ea:733 zr:726
+-782 68 zr:529 ku:877
+136 -546 rp:251 gc:181 ea:141 zr:553 ku:302
+-202 955 rp:593 gc:474 ku:537
+-335 217 zr:311 ku:697
+71 429 rp:81 gc:336 ea:990
+499 739 rp:823 ea:710
+656 -992 gc:456 ea:705
+-806 75 rp:742 ea:43 zr:294 ku:658
+146 -845 ea:798
+-753 -697 rp:791 gc:321 ea:242 ku:236
+-331 889 rp:537 gc:208 ea:402 zr:706
+311 -886 rp:389 gc:777 ea:774 zr:726
+707 228 zr:235 ku:433
+-422 -969 gc:411 ea:882 ku:550
+464 361 rp:427 gc:53 ea:143
+5 48 141
+qn! cm xv! nh! ti
+579 722 nh:135 qn:269
+674 876 xv:216 cm:877 qn:265
+145 -492 nh:327 xv:842
+897 -34 xv:400 cm:637 qn:748
+813 88 nh:292 ti:154 xv:634 cm:177
+-672 214 nh:816 cm:103
+-383 -410 nh:239 qn:974
+483 -555 qn:218
+329 -625 nh:520 ti:429 cm:260
+139 338 ti:701
+281 799 cm:872
+149 891 xv:150 qn:380
+-444 894 nh:291 ti:669 cm:106 qn:374
+-484 -418 nh:19 cm:964
+-717 -424 nh:103 ti:141 xv:955 qn:999
+-899 287 ti:340 qn:276
+708 362 ti:924 xv:836 cm:662 qn:461
+223 673 xv:537 cm:433 qn:82
+794 -170 cm:993 qn:164
+-774 -567 ti:590 qn:816
+-616 -193 cm:432
+273 386 nh:342 ti:875
+506 525 nh:714 ti:501 xv:603 cm:61 qn:966
+13 191 nh:430 ti:835 xv:968 cm:220
+-15 -401 xv:488 cm:551
+360 576 nh:204 ti:865 xv:647 cm:806 qn:310
+895 891 ti:629 cm:805 qn:659
+-113 -706 nh:372 ti:303
+-189 242 xv:268 qn:746
+369 92 nh:673 xv:670 cm:906
+-695 -870 xv:270 cm:650 qn:95
+-272 251 xv:62
+969 187 nh:129 ti:194 cm:953
+766 720 nh:632 ti:633 xv:300 cm:225
+407 927 nh:805 ti:767 xv:847 qn:268
+764 -803 cm:176 qn:198
+375 884 ti:41 cm:719
+411 -532 nh:89 xv:578
+250 -451 nh:75 xv:586 qn:219
+519 903 nh:902 xv:604 cm:421 qn:680
+-880 25 ti:143 xv:615
+761 -837 ti:283 xv:437 cm:762 qn:651
+-82 -413 ti:98 cm:62 qn:427
+-867 954 nh:863 ti:309 cm:218 qn:645
+132 363 nh:326 xv:207 cm:111
+-114 -325 ti:906 xv:936 qn:923
+218 332 nh:653 ti:253 xv:444 cm:566 qn:471
+638 301 nh:894
+11 10 1
+wi nk! lp! jx! xu ax! zq mw pe zo! kz!
+672 -327 jx:729 wi:619 mw:961 kz:413 lp:584 pe:744
+693 -165 mw:723 lp:243 ax:34 xu:290
+-249 -470 nk:556 jx:916 wi:117 zo:959 mw:618 pe:437 ax:885
+-319 913 jx:436 wi:107 mw:644 kz:222 lp:311 pe:197 xu:499
+95 437 jx:13 wi:793 zo:839 mw:535 kz:980 pe:426 ax:971 zq:952 xu:464
+-726 678 zo:727 mw:882 lp:27 ax:629 zq:441 xu:540
+-921 -305 nk:966 jx:475 mw:104 kz:576 ax:658 zq:392
+-544 864 nk:396 wi:195 zq:726 xu:537
+-739 -750 nk:66 wi:162 kz:180 lp:49 pe:81 xu:995
+-24 438 zo:286 kz:165 lp:193 ax:208 xu:376
+15 30 0
+pd! fo ki ky xq ow rx! zp! db ie! kj! sp lx! hc ov
+922 -859 kj:758 ki:880 sp:310 db:359 pd:302 ow:239 xq:103 ie:321 fo:868
+-787 -941 kj:603 db:822 ow:371 ov:775 xq:426 ie:746 fo:451
+683 632 ki:142 sp:935 db:873 zp:754 pd:432 ow:405 xq:839 fo:906
+24 -947 kj:443 sp:911 db:422 hc:562 ov:496 xq:5 lx:742
+303 -560 kj:682 sp:733 zp:88 pd:203 ky:225 ie:408
+-470 -366 kj:381 rx:662 db:701 pd:689 xq:476 lx:501
+-118 -718 kj:621 ki:752 sp:968 db:734 zp:332 pd:369 ow:510 ov:692 lx:725 fo:730
+33 -754 ki:711 sp:133 rx:42 db:695 zp:835 ow:712 ov:538 ky:337 xq:858
+-810 726 kj:804 sp:802 zp:160 ky:7 xq:672
+-805 -102 kj:374 ki:934 sp:826 rx:75 zp:938 pd:788 hc:530 ow:418 ie:46
+876 481 ki:26 rx:796 db:252 hc:495 ov:426 ky:498 xq:735 ie:708 lx:746
+-94 738 rx:467 zp:327 pd:534 hc:584 ow:814 ov:847 xq:810 lx:277
+149 339 kj:187 ki:339 db:968 zp:130 ow:718 ov:246 ky:661 ie:55 lx:164
+319 919 kj:158 sp:439 db:89 pd:846 hc:594 ow:700 ov:188 ky:228 xq:292 lx:26 fo:363
+-946 110 sp:746 rx:813 db:514 zp:273 hc:323 ov:633 ky:727 xq:565 fo:774
+880 851 kj:634 sp:558 db:531 pd:463 hc:553 ov:934 ky:779 xq:92 lx:250
+381 -140 kj:327 db:785 zp:500 hc:833 lx:350 fo:23
+-565 -30 kj:822 rx:356 db:909 zp:475 pd:745 hc:985 ow:330 ov:229 lx:988
+-62 -553 kj:802 ki:687 sp:641 pd:590 hc:55 ow:552 ov:853 xq:754
+-995 -237 kj:595 sp:263 db:870 pd:861 hc:235 ow:985 ov:519 ky:281 xq:5 ie:668 fo:922
+-237 770 sp:621 rx:370 db:821 pd:847 ow:220 ie:218
+155 -331 hc:267 ov:538 ky:775 xq:634 lx:347 fo:28
+-479 -218 kj:295 ki:732 rx:201 db:889 hc:650 ov:101 xq:494 lx:281
+-369 354 kj:397 ki:518 sp:809 rx:509 db:241 hc:793 ow:782 ov:276 ky:497 lx:503 fo:49
+-191 -358 db:655 pd:302 ow:779 ov:17 ie:82 lx:612
+990 282 zp:860 pd:641 hc:12 ow:357 ov:588 ky:160 ie:233 lx:582 fo:924
+-211 376 kj:102 sp:12 rx:831 db:460 zp:583 hc:132 ow:458 ov:335 ky:534 xq:197 ie:902 fo:718
+-659 627 kj:566 ki:741 pd:263 hc:546 ov:389 ky:331 lx:611 fo:873
+161 -219 kj:503 rx:754 db:526 zp:416 ow:353 ky:593 xq:944 lx:243
+-502 -258 ki:939 pd:913 hc:159 ov:177 lx:955
+12 45 0
+wy! jj! bp jh! kq! nt zs! mz! cs mx vl iz!
+886 867 vl:609 cs:81 bp:338 zs:277
+-688 -109 kq:244 jh:467 cs:630 mz:960 mx:42 wy:647
+950 -471 iz:883 vl:447 kq:414 jh:417 mz:68 nt:956 mx:717
+613 -178 iz:354 vl:243 kq:851 jh:984 cs:913 mz:28 nt:841 mx:118 wy:321 zs:283
+409 -606 iz:980 jj:355 bp:432 wy:104
+238 -216 iz:438 vl:648 cs:18 zs:502
+-130 353 kq:848 jj:14 cs:586 bp:893
+-522 -43 kq:479 jh:35 jj:10 cs:341 mx:300
+-520 871 iz:123 vl:613 bp:753 mx:250 wy:328
+478 -639 kq:280 jh:831 jj:203 bp:768 nt:124 mx:547
+23 -389 iz:305 vl:213 kq:309 cs:723 mz:298 mx:207 zs:257
+-978 676 iz:348 jh:389 jj:110 cs:988 mx:350
+-301 989 iz:157 vl:22 jj:45 cs:918 nt:60 wy:245
+-447 -194 jh:900 jj:885 cs:610 mz:472 nt:832 zs:297
+-146 845 kq:972 jj:749 mz:335 nt:665
+795 669 kq:661 jh:790 cs:641 bp:730 mz:548 nt:796 wy:489
+324 786 vl:644 jh:935 mz:810
+-729 -647 kq:2 jh:976 jj:985 cs:914 mz:475 nt:886 mx:165 wy:753
+530 584 jh:595 jj:722 cs:235 bp:892 mx:137 wy:952 zs:944
+-93 402 iz:61 vl:435 bp:857 mz:824 wy:574 zs:954
+-545 924 iz:479 jj:53 bp:637 mz:402 wy:824 zs:353
+106 -292 iz:565 vl:46 cs:882 bp:977 nt:400 wy:748
+-433 963 vl:560 jj:699 cs:335 bp:813 wy:764 zs:897
+-158 -397 vl:850 kq:632 jj:400 mz:459 nt:560 wy:128
+536 343 jj:775 bp:57 wy:682
+-583 149 jj:365 bp:85 nt:903 wy:99 zs:418
+819 620 vl:440 kq:905 nt:624 wy:333
+-916 137 vl:55 jj:804 mz:864
+-485 -107 iz:332 vl:207 jh:963 mz:376 nt:900 mx:476 zs:290
+-975 840 vl:829 kq:672 jh:654 nt:94 mx:595 wy:481
+668 -435 jh:138 jj:467 cs:479 mz:841 mx:326 wy:935 zs:452
+990 -61 iz:5 vl:249 kq:667 jh:18 cs:732 bp:722 mx:656 wy:893 zs:481
+-344 686 iz:535 vl:147 jj:840 mz:290
+422 -49 vl:81 kq:50 jh:143 jj:373 cs:925 mz:289 mx:51 zs:250
+-779 -865 iz:436 vl:182 kq:825 jh:529 jj:69 bp:108 mx:806 wy:590 zs:520
+12 337 iz:723 kq:10 jh:705 cs:367 mz:348 mx:148 wy:102 zs:234
+777 -833 jj:758 cs:686 bp:380 mx:26
+612 -375 iz:419 jj:881 cs:182 mz:894 nt:107 mx:234 zs:453
+-952 153 iz:538 vl:16 kq:614 bp:229 nt:56 mx:118 zs:372
+-691 -713 iz:628 vl:160 jh:949 jj:286 cs:322 wy:916 zs:604
+215 -808 iz:585 vl:750 jh:585 cs:534 wy:143 zs:834
+-394 -891 jh:237 cs:328 bp:438 mz:534 nt:573 wy:958
+-22 848 jh:702 jj:893 mz:435 nt:258
+-599 464 vl:448 jj:70 bp:283 nt:823
+-197 -830 iz:783 jj:863 cs:867 bp:662 wy:94
+14 41 0
+si! at! vu! sc! wn! pw! pb xx ew ko! bf se! ef bo
+232 -942 bf:205 bo:849 pw:154 xx:482 pb:387 vu:916 ew:838
+268 412 pw:66 wn:472 ko:138 xx:113 pb:679 si:608 vu:396 sc:262 ew:238 at:633
+799 -178 bf:41 ko:666 pb:188 si:212 se:307
+965 -913 bf:570 wn:837 ef:606 pb:567 si:864 vu:52 sc:773 at:468
+-56 -707 bf:230 bo:263 pw:193 ef:106 ko:837 xx:21 si:179 vu:369 ew:544 se:733 at:49
+-241 711 bf:158 bo:413 wn:552 xx:667 si:477 vu:953 sc:787
+823 -464 bf:980 si:26 vu:356 sc:579 at:227
+-977 744 bf:402 pw:276 ef:786 ko:143 xx:338 pb:169 vu:29
+75 445 wn:552 ef:427 ko:389 pb:353 sc:910 ew:633 se:29
+-639 -569 bf:459 wn:821 ef:587 ko:788 si:355 sc:569 ew:910 at:269
+-951 169 wn:264 ko:576 pb:1 si:456 vu:580 ew:153 se:27
+69 -370 wn:74 ef:657 xx:854 se:171
+78 -468 bo:307 wn:782 xx:948 pb:288 si:72 se:962
+32 76 bo:807 vu:556 sc:211 at:582
+-570 -256 xx:571 pb:943 vu:304 sc:634 se:468
+-754 157 bf:364 wn:729 xx:180 pb:340 si:982 vu:142 se:871 at:217
+-683 -777 bf:795 ko:896 xx:315 si:870
+-741 380 bf:282 bo:538 xx:168 sc:88
+917 5 bf:100 ef:607 xx:537 sc:755 ew:168 se:884
+878 -426 pw:527 ef:879 ko:992 vu:312 ew:983
+-300 416 bf:192 pw:611 wn:754 vu:363 sc:335 ew:513 at:27
+-168 -214 bf:98 ef:89 ko:193 xx:689 vu:592 sc:931 ew:187
+468 768 bf:274 wn:476 xx:316 pb:820 vu:260 at:303
+-393 586 bf:842 bo:529 ko:523 xx:436 pb:21 si:427 sc:159 ew:390
+90 -637 bo:130 wn:752 ko:414 xx:719 pb:721 si:136 sc:816 ew:68 at:809
+-56 -610 bo:854 wn:876 ef:216 xx:562 sc:234
+-806 60 bf:903 ko:536 xx:883 pb:553 si:906 vu:332 sc:884 ew:189 at:52
+-701 328 pw:16 wn:690 ef:521 pb:163 vu:711 sc:124 ew:970 at:308
+-152 390 vu:575 sc:637 ew:903 at:996
+-724 -686 bf:1 bo:796 ko:555 si:644 sc:838 se:922 at:22
+-762 -957 ko:589 pb:798 si:321 sc:829 ew:35 se:276
+344 149 bo:253 pw:869 wn:716 ef:738 ko:564 si:34 vu:650 ew:459
+661 954 bo:634 wn:676 ko:992 vu:62 sc:719 at:561
+520 533 bf:960 pw:790 ko:825 pb:286 si:910 sc:47 se:490 at:40
+-330 517 bf:54 bo:646 ko:462 pb:843 si:820 vu:745 ew:274 at:552
+-408 -43 bf:693 bo:432 pw:171 wn:969 ko:94 si:277 sc:803 at:482
+899 74 bf:334 bo:334 pw:544 ef:538 pb:750 sc:486 se:655
+-399 -932 bf:318 bo:490 pw:530 wn:693 ef:821 ko:368 si:948 vu:571 se:918 at:967
+879 -445 bf:208 bo:718 wn:343 xx:761 pb:776 si:343 vu:940 ew:577 at:833
+849 577 bf:2 pw:18 xx:311 pb:584 vu:451 ew:723 se:750 at:612
+-533 -998 bo:916 ef:406 xx:269 si:122 ew:608
+2 35 1
+zw as!
+-650 18 zw:334
+450 -166 as:284
+938 -621 as:341
+139 198 as:235
+991 591 as:354
+-236 970 as:558
+-20 -74 zw:107
+-239 876 as:27
+490 974 zw:186
+-24 -953 as:340
+589 818 as:626
+679 -515 zw:443
+-167 571 zw:464
+197 871 zw:293
+823 -459 as:455 zw:57
+604 -462 as:181 zw:514
+801 -436 as:696
+-63 -868 zw:909
+837 -173 as:223
+151 -659 zw:738
+518 257 zw:549
+-800 521 as:406 zw:725
+-18 -88 as:661
+-912 564 zw:406
+621 -745 zw:575
+636 -79 zw:44
+589 -116 zw:213
+-683 303 zw:702
+446 -473 as:136
+-876 -291 zw:327
+277 256 zw:124
+-938 892 as:506
+-470 -595 as:209
+27 -930 as:969
+-95 372 as:90
+5 3 267
+tj! vs mh st! kp!
+757 271 kp:35 tj:17 vs:314 st:415 mh:893
+421 -54 kp:99 tj:509 st:773
+-959 -359 tj:426 vs:275 st:645
+3 40 0
+nf xf lx
+362 406 xf:170 nf:100 lx:165
+172 475 lx:387
+-470 563 lx:925
+109 -700 xf:585 nf:532
+231 601 xf:583 nf:807
+448 685 nf:644
+251 630 xf:939 nf:550
+435 866 nf:779
+879 -840 xf:842 nf:644
+-384 531 lx:944
+-911 825 xf:967 nf:364
+-743 -176 nf:461 lx:197
+764 -894 nf:76
+-397 -740 nf:885
+-855 820 xf:638
+639 41 nf:552
+208 -402 lx:17
+-776 -222 xf:263 lx:90
+98 161 nf:483 lx:941
+915 768 nf:400
+-853 -5 xf:600 lx:345
+1000 199 xf:940 nf:759
+-961 -966 xf:446 lx:291
+-992 829 nf:901
+860 893 xf:62 lx:235
+-87 917 xf:959 nf:984 lx:948
+213 699 nf:892
+-117 -511 nf:190
+-778 990 xf:610 lx:130
+-620 -706 xf:620
+-231 -952 xf:139
+508 -991 xf:895 nf:960
+-58 -699 xf:474 nf:663
+843 -580 lx:743
+772 -768 xf:974
+614 -30 xf:979 lx:405
+879 -263 nf:101 lx:522
+-856 6 xf:221
+1 -808 xf:90 nf:758
+-295 -36 lx:650
+15 5 1
+fr oq zu! oo! vo! bd! jy xf! gy xw! pv vp cm! kt my!
+954 999 bd:734 fr:502 pv:926 cm:200 xf:16 gy:815 kt:571 my:66 xw:490
+-159 427 bd:71 pv:44 jy:422 cm:190 xf:300 gy:557 vo:619 vp:441 zu:458 my:871
+828 -844 bd:720 fr:936 jy:43 cm:184 gy:378 vo:519 vp:329 xw:446 oq:100
+-104 35 bd:928 fr:691 cm:548 xf:677 gy:567 zu:14 my:837 xw:820
+474 -428 oo:179 bd:907 fr:480 jy:930 xf:376 gy:685 vp:718 kt:689 oq:26
+8 18 0
+ec an! hv fw fi! pr! xg! lq
+-777 -318 pr:810 fw:625 hv:912 xg:274 ec:601
+755 -910 pr:809 ec:176 an:412 fi:655
+-575 -407 hv:911 ec:252 fi:396
+736 -637 hv:176 ec:50 an:421 lq:989 fi:372
+-717 -546 pr:657 fw:859 hv:531 ec:602 lq:604 fi:22
+-121 -205 hv:821 ec:869 lq:205 fi:639
+960 915 hv:392 an:851 lq:1 fi:941
+440 394 xg:575 ec:837 an:978 lq:933
+189 -62 fw:789 xg:9 ec:973 lq:840 fi:104
+-435 136 xg:960 an:374 lq:553 fi:268
+543 -345 lq:160
+-578 194 pr:160 xg:883 ec:808 lq:825 fi:937
+266 -310 pr:72 fw:521 ec:227 an:597 fi:353
+513 -520 pr:347 fw:616 ec:828 an:380 fi:768
+478 148 fi:377
+72 -562 pr:967 fi:85
+748 -824 ec:165 an:3 lq:748 fi:577
+983 559 pr:569 fw:617 xg:178 ec:288 fi:817
+11 12 0
+vx! ao! nj cf zx jc qf! mf! ht wy! nq
+604 -497 mf:358 nq:365
+234 975 ht:420 wy:110
+152 -396 mf:403 cf:888 vx:393 wy:255 jc:625
+44 682 nj:355 mf:428 ht:300 qf:802 vx:872 nq:769 jc:230
+-587 -451 nj:941 cf:876 vx:499 wy:277
+575 874 nj:128 mf:570 cf:839 nq:630 wy:841 jc:739
+625 -521 cf:540 ht:45 qf:780 vx:972 nq:804 jc:157
+-269 -330 cf:282 ao:761 ht:431 qf:683 vx:561 nq:359 wy:278 jc:202
+-345 287 cf:218 ao:250 ht:415 nq:584 wy:550 jc:262
+-359 -807 nj:714 ao:881 nq:294 jc:487
+849 -807 mf:602 qf:291 vx:143 jc:375
+708 -96 ao:181 zx:735 ht:150 nq:354 wy:695
+4 49 1
+ht bv nq af!
+303 169 nq:48
+980 -536 nq:828 bv:435 ht:606 af:764
+393 354 nq:580 bv:199 af:569
+331 35 nq:773
+-391 -820 bv:480 ht:511
+9 -529 bv:9 af:545
+281 372 ht:902 af:617
+-86 -27 nq:725 bv:672 ht:961
+-65 622 nq:305 bv:597 af:194
+579 702 bv:611 af:300
+-810 883 af:209
+569 828 bv:61 ht:336 af:861
+184 345 ht:493
+581 637 bv:597 ht:502 af:147
+-9 640 bv:34
+668 -742 nq:928 bv:327 ht:263
+978 -318 nq:402 bv:403 ht:612 af:835
+676 504 nq:234 af:486
+590 -339 bv:300 af:17
+-461 767 nq:16 ht:161
+-315 826 nq:167 bv:918 ht:590 af:598
+-62 -140 nq:923 ht:163 af:675
+-484 564 af:347
+589 495 nq:678 bv:83 ht:581
+924 -720 ht:812
+505 -836 ht:273
+101 -708 ht:515
+-32 229 nq:903
+416 299 bv:691
+239 746 nq:816
+-658 5 nq:778 bv:486 ht:803
+992 395 nq:717 af:535
+-623 809 bv:633
+969 599 nq:500 bv:305 af:537
+552 -810 bv:705
+-471 750 af:56
+56 -413 nq:848 af:322
+589 -147 nq:937
+198 -211 nq:58 ht:515
+-257 597 nq:828 af:618
+327 622 nq:412 bv:221 ht:795
+162 629 bv:118 ht:120
+345 -645 af:701
+758 -904 nq:704
+-388 -305 af:20
+-404 468 bv:248 ht:546 af:746
+-679 -846 nq:603 bv:789 af:173
+-939 905 nq:483 bv:175
+408 -70 nq:349 ht:979 af:198
+12 48 1
+sk ry! mc le ot! dz qm dh bm! nf! be! ym!
+-203 -513 be:944 ym:45 dh:605 ry:606 nf:198 sk:445
+-247 -248 be:339 le:176 ry:250 nf:124 ot:802
+-765 -992 be:755 le:44 dh:218 mc:367 bm:97 sk:664 qm:952
+-771 542 be:870 ym:490 dh:638 bm:405 ry:141 nf:989 sk:770
+555 -938 le:650 ym:970 dh:852 mc:1000 ry:300 sk:809 dz:589 ot:503 qm:597
+-482 837 le:768 mc:82 bm:117 dz:857 ot:811
+-661 -331 be:516 le:548 mc:187 ry:527 nf:938 sk:621 dz:54 ot:146
+727 -308 be:738 nf:64 sk:583 dz:919 ot:838 qm:304
+-434 336 be:325 le:358 dh:701 sk:950 qm:204
+-218 -971 be:751 le:307 ym:12 dh:734 mc:195 ry:659 sk:746 dz:233
+3 -454 be:881 ym:202 dh:207 ry:13 nf:53 dz:389 qm:147
+458 -763 ym:302 dh:132 mc:257 dz:199 ot:515 qm:149
+536 821 le:515 ym:743 mc:641 bm:432 dz:106 qm:979
+696 -897 be:749 ym:869 bm:856 nf:328 sk:831 dz:510 qm:776
+-92 651 le:474 dh:465 bm:477 sk:632 ot:504 qm:22
+-406 613 le:643 dh:72 mc:228 ry:9 nf:734 ot:341 qm:459
+-843 977 be:65 le:833 ym:616 mc:59 nf:106 sk:139 qm:642
+-859 -980 le:900 ym:701 dh:504 bm:554 ry:622 nf:639 qm:258
+541 628 be:994 dh:989 bm:348 nf:179 dz:413 ot:538
+276 -35 dh:247 bm:606 ry:207 dz:984 qm:605
+-554 -947 ym:338 dh:629 mc:662 bm:359 ry:536 nf:424 dz:236
+52 761 be:856 mc:818 sk:460 dz:262 ot:106
+-204 -755 be:856 dh:269 nf:541 sk:698 dz:393 ot:873 qm:556
+464 -629 be:222 bm:765 nf:475 sk:381 ot:44 qm:857
+999 -297 be:584 le:557 bm:948 nf:172 dz:647 ot:123 qm:140
+438 -379 ym:59 dh:118 mc:306 bm:947 nf:477 sk:373
+146 422 le:685 ry:621 sk:271 ot:366 qm:126
+485 275 be:322 le:239 bm:89 nf:75 sk:240 dz:257 ot:728
+393 -807 be:230 le:824 mc:530 bm:973 ry:769 nf:322 sk:790 dz:90 ot:836
+-205 429 be:442 le:73 ym:188 ry:141 dz:645 ot:469 qm:320
+-474 -538 be:7 le:485 dh:311 ry:310 sk:572 qm:733
+939 -213 be:121 le:812 bm:740 nf:358 sk:11
+787 -571 le:733 ym:57 mc:955 ry:449 dz:118 ot:816 qm:872
+-443 131 be:918 mc:98 ry:831 qm:945
+-330 -705 bm:35 dz:688 qm:19
+663 5 le:663 dh:76 ry:126 ot:891 qm:747
+746 -724 be:275 le:364 dh:831 mc:881 bm:214 sk:343 ot:910 qm:366
+-510 -859 le:271 ym:180 dh:546 mc:607 bm:60 ry:13 nf:628 sk:767
+423 686 be:384 ym:270 bm:29 sk:814 dz:376 ot:800 qm:992
+744 -86 be:949 le:497 ym:485 bm:787 ry:930 sk:180 dz:993 ot:68
+-634 636 le:226 dh:332 bm:973 ry:858 nf:298 sk:305 qm:277
+-982 850 le:450 sk:969 dz:109
+-727 -938 dh:415 bm:962 nf:792 dz:430 ot:469 qm:157
+594 913 be:978 le:370 ym:944 ry:875 nf:333
+-689 -271 be:880 ym:856 nf:259
+109 399 be:738 le:569 ym:6 dh:822 bm:918 ry:479 sk:179 dz:496
+-769 -359 be:979 ym:434 dh:706 mc:230 ry:99 nf:105 sk:37 qm:989
+32 883 be:184 ym:211 mc:179 bm:289 nf:906 sk:435 dz:529
+5 45 0
+da! gc xr mb! cs!
+677 281 xr:218 mb:928
+-154 539 gc:970 da:913
+-44 -600 xr:131 cs:691 da:295
+117 -665 xr:492 cs:218 gc:924
+-642 -696 xr:993 cs:465 da:458
+-863 -712 xr:175 gc:719 da:431
+924 -642 gc:319
+787 426 xr:336 cs:656 gc:507
+-7 161 xr:696 cs:597 gc:474 da:624
+613 -805 cs:952 gc:34 da:548
+-559 -435 xr:572 cs:113 da:588
+973 -576 da:336
+743 -556 xr:822 cs:555 mb:461 da:818
+-343 496 xr:489 mb:726
+230 -738 xr:71 cs:146
+432 -225 cs:194 mb:529 da:611
+-678 653 xr:874 cs:313 mb:273
+-421 822 xr:835 mb:533 gc:473 da:612
+-209 -676 xr:679 cs:531 gc:610 da:750
+175 -289 xr:431 da:899
+-810 -128 mb:402 gc:957 da:888
+234 352 cs:332
+136 -794 xr:822 da:83
+-603 971 xr:69 cs:961 mb:678 da:37
+-644 681 cs:160
+-783 -85 xr:361 cs:288 gc:735 da:111
+-104 -596 mb:689 da:888
+389 406 xr:511 cs:351 gc:531 da:81
+511 302 xr:570 gc:992
+877 901 cs:54 gc:73 da:708
+-969 -964 xr:354 cs:328 gc:89 da:381
+-283 200 cs:620 mb:123 da:669
+-1000 438 xr:175 gc:863
+746 38 xr:691 da:587
+207 -777 xr:134 mb:992
+-911 -198 xr:90 da:97
+93 491 xr:69 cs:612 mb:735
+735 122 cs:951 gc:294 da:243
+-251 224 xr:269 cs:592 gc:128
+-633 773 cs:1 mb:285 gc:586
+251 549 xr:622 cs:265
+-410 -163 mb:416
+753 807 gc:995
+-160 -846 xr:886 cs:757 gc:344
+-604 -295 cs:179
+10 6 1
+rl! pg! sf! gv ps! qn ez hm zy! qq
+242 -722 ps:667 hm:86 rl:250 qn:788
+-542 921 ps:175 zy:921 hm:770 rl:2 sf:157 qn:470
+211 377 qq:874 ps:460 ez:44 zy:930 pg:307 qn:984
+87 -600 ps:680 gv:183 ez:849 zy:140 hm:348 rl:133 qn:825
+-443 520 ps:405 ez:936 pg:920 hm:867 sf:350 qn:153
+59 40 qq:396 ps:365 zy:336
diff --git a/codejam_2008/src/y2008practice/D-small-practice.in b/codejam_2008/src/y2008practice/D-small-practice.in
new file mode 100644
index 0000000..52ffb3c
--- /dev/null
+++ b/codejam_2008/src/y2008practice/D-small-practice.in
@@ -0,0 +1,772 @@
+100
+3 6 0
+xb dd cd
+-392 -84 dd:179
+790 -744 dd:850
+-653 565 dd:444 cd:96
+-135 -484 xb:778
+56 926 xb:713 dd:467
+-479 -445 xb:807
+5 1 0
+oa! rv vj an! ik
+-864 153 rv:521 an:468 ik:208 oa:713 vj:653
+3 1 1
+tt vu nt!
+506 359 tt:58 nt:808 vu:974
+3 2 1
+gk cr! qq!
+-883 -292 cr:953 gk:967
+526 -734 qq:794 gk:41
+4 10 0
+se hh og wj!
+888 -114 og:664 hh:966 wj:202
+-323 509 og:149 hh:937 wj:35
+-564 -455 se:782
+-243 -77 og:187 hh:39 wj:549
+-358 -39 og:828 wj:762
+621 -92 og:421 hh:850 wj:515
+629 125 wj:623
+-906 -274 og:877 se:318
+485 -858 og:141
+-623 312 hh:592 se:401
+2 1 284
+ft yy
+-325 -830 yy:393 ft:635
+5 2 760
+hp bc sn yu bn
+553 -140 bc:43
+-490 162 hp:796 sn:153 yu:204 bn:188
+5 10 0
+at! fs an! nq! yd
+-872 -55 fs:121 at:527
+-64 290 nq:828 fs:938
+211 266 an:882
+135 -896 nq:165 at:694 yd:892 an:213
+-205 740 nq:123 at:585
+-230 539 yd:113 an:300
+521 -810 at:525 an:871
+468 -406 nq:359 at:604 yd:33
+-521 -8 fs:173 at:262 an:967
+-342 549 an:928
+5 5 462
+ac sr li dn! uo
+316 -376 sr:122 uo:191
+152 -520 dn:960 uo:456
+712 237 sr:489 li:263
+481 628 dn:357 uo:566
+-995 96 dn:152 sr:411 uo:573 ac:729 li:553
+4 2 737
+bd az it rl!
+787 425 rl:67 bd:569 az:699 it:666
+-291 5 rl:921 az:843
+1 10 0
+dt!
+204 806 dt:978
+-247 -715 dt:973
+624 -987 dt:314
+-926 653 dt:807
+-590 844 dt:819
+929 13 dt:171
+-950 112 dt:750
+-398 -756 dt:318
+213 706 dt:768
+810 160 dt:484
+3 8 312
+rj! qp at
+878 808 qp:576 at:901 rj:208
+-83 -195 qp:44 rj:822
+176 104 at:540
+559 806 qp:851
+221 501 at:588
+-678 92 qp:70 at:636
+-764 -392 qp:841 at:848 rj:883
+-915 -548 at:115
+1 5 0
+zi
+780 -230 zi:242
+-734 -623 zi:365
+736 -735 zi:805
+841 81 zi:49
+-578 -198 zi:590
+2 1 427
+yf! du!
+860 217 du:719 yf:391
+1 1 0
+fm!
+709 307 fm:103
+3 6 839
+ve! dg az!
+664 578 dg:634 az:209 ve:157
+187 -243 ve:931
+503 -359 dg:735 az:594
+304 394 ve:238
+982 -426 az:240 ve:500
+335 -998 dg:434 ve:181
+3 6 893
+bx nx! ns!
+770 -592 nx:4 ns:820
+705 -987 nx:546 bx:937
+5 689 nx:521 ns:542 bx:712
+-717 -825 nx:931 ns:674
+-361 -975 ns:838 bx:651
+-895 -99 bx:390
+2 5 26
+kq! yc!
+-765 841 kq:336
+-722 449 kq:140 yc:502
+992 191 yc:981
+309 -500 yc:181
+771 -731 yc:650
+2 9 1
+dm sn!
+-470 -93 dm:588
+420 -494 sn:917
+-559 697 sn:354
+588 802 sn:713
+428 240 dm:901
+207 529 dm:582 sn:232
+918 666 dm:747 sn:463
+-59 -671 sn:814
+-490 919 sn:501
+3 6 0
+ol qg! gd!
+693 295 ol:67
+-16 -581 ol:678
+213 601 ol:294
+68 277 gd:501 qg:66 ol:866
+-295 -167 qg:425
+-915 90 qg:876
+2 4 1
+cy! to!
+974 599 to:895 cy:390
+-661 658 to:3 cy:117
+841 -834 cy:217
+13 -579 to:46 cy:943
+5 8 852
+wj pf! fo us! og!
+-636 -155 wj:487 fo:989
+337 -516 us:184 fo:890
+534 -555 us:839 fo:170
+465 394 og:3 pf:158 wj:519 us:673
+375 -393 us:555
+105 47 wj:450
+-979 868 wj:933 us:999
+774 307 wj:308 us:539 fo:451
+5 10 894
+ow qp tx za! np!
+-441 -857 ow:382 np:540 za:641 tx:480
+482 50 np:227 za:697 qp:258
+294 -715 ow:146 qp:460
+593 -138 ow:667 np:129
+-650 -669 tx:39
+-350 -776 qp:917
+-793 -615 tx:518
+665 -886 ow:845 qp:2
+810 -552 np:707 tx:772 qp:909
+64 -600 tx:471 qp:462
+3 3 0
+jq! lq! yr!
+659 642 yr:436 jq:873
+405 -1 jq:540
+-286 769 lq:959
+5 9 1
+vx ly gq nr! sw!
+797 385 vx:166 gq:110
+129 -510 vx:147 nr:586 sw:400 ly:853
+836 59 vx:120 nr:267 sw:990 gq:2 ly:827
+445 -78 vx:597 nr:488 sw:730 gq:370
+444 -502 vx:173 sw:975 ly:874
+-220 670 vx:418 nr:829 sw:868
+720 -919 vx:170
+377 -700 gq:791 ly:675
+-978 706 vx:938 gq:37 ly:63
+1 3 796
+wz
+677 398 wz:49
+-433 -811 wz:65
+274 680 wz:213
+3 4 614
+dp! uy xd!
+-410 6 dp:994
+-675 -780 uy:286 xd:338
+46 -487 xd:503
+-656 954 uy:876 xd:479
+2 8 1
+lq cs
+177 319 cs:288
+-945 166 lq:464
+-153 449 cs:604
+957 968 cs:163 lq:211
+284 -479 lq:227
+-237 744 cs:187
+-490 -565 lq:958
+-980 330 cs:452 lq:950
+2 7 1
+qg! sl
+-196 164 sl:881
+730 765 qg:905 sl:770
+-481 -273 qg:729
+102 -562 qg:191
+-150 6 qg:818
+-253 714 qg:263
+585 -325 sl:863
+1 1 814
+ho
+836 381 ho:383
+1 3 308
+uk!
+-375 276 uk:777
+823 216 uk:453
+968 795 uk:200
+2 2 1
+jb! no
+-595 629 jb:550 no:735
+693 -719 no:19
+5 9 0
+bg! ex! vw! hq! zc
+813 -34 vw:268 ex:254 bg:597 zc:759
+-936 -18 vw:106 ex:441 bg:983 zc:145
+-585 673 zc:934
+671 -912 vw:884
+-268 -676 zc:430
+856 882 hq:559 ex:242 zc:281
+979 732 hq:663 vw:847 ex:698
+628 391 hq:708 vw:936
+-905 -361 vw:559 ex:520 zc:307
+4 6 1
+mr ey! dn rc!
+-69 -862 ey:38
+643 979 dn:329 mr:85 rc:726
+80 903 dn:888 mr:908
+691 -727 mr:809 rc:325
+18 -437 mr:443
+82 -163 dn:846 ey:263 rc:395
+5 9 0
+er! fw! zw uq! pq
+665 468 zw:295
+424 536 uq:619 er:713 zw:472
+509 504 uq:954 pq:703 er:711 fw:652
+-815 927 uq:509 zw:887 fw:124
+896 408 uq:748 pq:237 er:966 fw:593
+756 -552 pq:460 fw:528
+340 -328 pq:952
+-59 -546 er:454 zw:249
+319 251 uq:176
+3 5 1
+st! pl! mz
+773 -625 pl:415 mz:573
+738 102 pl:10 mz:482
+839 -64 st:852 pl:126 mz:628
+799 -766 st:295 mz:79
+894 377 pl:979
+2 2 539
+ja! br!
+-303 690 ja:257
+920 -782 ja:530 br:403
+4 10 1
+up mh! id! qv
+815 -633 up:647 qv:506
+-452 810 id:238 mh:535 qv:175
+-146 232 id:712 qv:824
+-5 832 id:4
+-381 -814 id:955 mh:638 qv:940
+-487 -33 mh:182 up:915 qv:458
+-82 -857 mh:551 up:849
+-586 -280 id:99 mh:553
+-916 -914 id:882 up:855
+474 145 id:698 mh:67
+5 6 0
+ka! gf! bz! oo dz!
+526 -605 oo:428 bz:417
+-295 382 oo:195 gf:760 dz:678 bz:552
+378 317 gf:222 dz:793
+-751 861 dz:213 bz:655
+-507 460 ka:769 bz:222
+-724 102 dz:685 bz:303
+1 7 648
+ko!
+142 583 ko:866
+535 -452 ko:441
+-877 -351 ko:562
+-942 -691 ko:698
+77 -951 ko:889
+451 9 ko:304
+192 -976 ko:678
+2 10 958
+yh! kk
+270 -734 kk:223
+930 828 kk:170
+688 579 kk:529 yh:960
+720 241 kk:75
+-512 927 kk:759
+427 -435 yh:277
+798 -936 kk:406
+90 -500 kk:975
+-391 492 kk:557
+652 419 yh:309
+5 9 0
+rq ml cv! lr! mn!
+80 -22 ml:502 mn:924 lr:912
+66 561 mn:883 lr:39 rq:446
+450 698 mn:978 rq:701 cv:677
+214 177 ml:475 mn:595 lr:440 cv:868
+-382 -42 ml:706 mn:508 lr:856 rq:552
+957 304 lr:905
+-804 -8 ml:618
+297 993 mn:903 rq:902
+-812 -198 ml:413 mn:321 lr:644 rq:126 cv:532
+1 5 0
+lr!
+-62 655 lr:520
+-449 264 lr:541
+-142 -164 lr:204
+-335 -758 lr:262
+-39 323 lr:434
+4 3 0
+ea sf! vn xe
+-489 960 sf:29
+-834 314 ea:834 sf:789 vn:197 xe:102
+-833 -72 ea:611 sf:371 xe:211
+2 5 169
+jt! od
+-901 281 jt:41
+-656 50 jt:105
+489 52 jt:532
+-475 895 jt:379 od:305
+-593 695 jt:775
+5 2 1
+ue oq lt! zr xc
+396 856 xc:70 zr:55
+-209 985 ue:745 lt:137 oq:240
+1 5 479
+fh!
+600 -115 fh:764
+17 352 fh:917
+832 803 fh:395
+96 525 fh:464
+657 773 fh:777
+3 1 1
+op! fh! ru
+659 875 fh:551 ru:376 op:722
+1 9 0
+xs!
+902 907 xs:783
+-45 467 xs:612
+574 -31 xs:366
+-111 188 xs:404
+685 562 xs:791
+-985 912 xs:943
+621 736 xs:737
+140 -43 xs:834
+775 336 xs:340
+2 4 0
+oc la!
+-999 -763 oc:405
+-472 -750 la:975
+781 247 la:267
+202 766 la:135
+5 7 0
+xe! pb jt is! xw
+434 -913 jt:111 is:387 xw:798
+-691 -809 pb:301
+-149 -605 pb:707 is:568 xe:708
+-91 -707 xw:88
+76 628 jt:668 xw:463
+580 -161 xe:141
+-765 561 is:807 xw:74 xe:349
+3 5 1
+iz! lq! zo!
+750 -63 lq:416
+685 -356 zo:51 iz:577 lq:259
+-355 891 zo:734 iz:587
+-706 832 zo:733 iz:969 lq:594
+-829 -285 iz:272 lq:195
+1 3 1
+oz!
+746 -436 oz:589
+-561 -508 oz:780
+372 687 oz:168
+3 9 1
+xa! qa! ui!
+150 683 qa:335
+607 334 qa:94
+-700 -38 qa:417 xa:214 ui:306
+573 708 qa:388 xa:539
+336 -254 xa:914 ui:960
+149 209 ui:323
+-835 23 qa:231
+-254 -703 qa:645 xa:360 ui:93
+-42 366 qa:537 ui:165
+2 7 391
+gc kn
+-121 438 kn:969
+275 5 gc:637
+-595 -211 gc:812
+-690 -176 kn:685
+889 228 gc:373
+15 -819 gc:736 kn:437
+381 -738 kn:363
+4 1 0
+ve! gf! nl! ir
+-921 47 gf:845 ir:632 nl:935 ve:894
+1 8 1
+xb!
+54 -212 xb:934
+-235 82 xb:715
+-643 -322 xb:100
+891 173 xb:705
+145 -717 xb:2
+-459 -804 xb:100
+274 358 xb:203
+-445 704 xb:418
+4 9 991
+no! zo bn pt!
+-674 727 bn:455 pt:427 no:220
+491 199 bn:128 zo:995 no:438
+565 697 no:300
+420 400 pt:948 no:530
+250 -961 no:404
+807 52 bn:208
+245 -165 bn:688 zo:958 no:55
+-40 110 pt:926 no:461
+624 -154 bn:119 zo:399
+5 6 484
+hx! qg sh jq! st
+-324 470 jq:678 qg:64
+96 -965 hx:361 sh:277 jq:695 qg:714 st:279
+52 632 qg:570
+-592 621 st:462
+-518 606 sh:292 jq:838 st:643
+-431 613 hx:647 sh:321 jq:76 qg:694
+5 4 0
+bu bn! et if rq
+853 973 bu:30 et:204 rq:781
+436 842 bu:429 bn:695 rq:37
+-827 131 et:766 bn:302 if:391
+-409 -393 bu:905 et:305 rq:736
+3 4 0
+tq! qh! sb!
+-838 888 qh:311 tq:60
+574 695 qh:596 tq:968 sb:383
+-285 -140 qh:960 tq:191
+557 -558 sb:408
+3 8 754
+kf! lg! pd
+63 498 kf:710
+-657 133 lg:86 kf:738
+-82 -804 pd:681
+-440 -832 lg:30
+196 904 pd:927
+-324 -922 pd:161
+-337 -314 lg:794 pd:234
+-483 697 lg:704
+2 4 0
+sd! nd!
+148 -668 nd:859 sd:900
+98 -292 nd:234 sd:933
+-684 -606 sd:698
+390 868 sd:866
+3 8 781
+fl! vf! ar
+-885 564 ar:865 vf:27
+-73 -271 ar:895 fl:10 vf:666
+-243 -648 ar:754
+-953 -689 fl:594
+-19 -934 ar:297 fl:971
+-856 -508 ar:554 fl:210
+86 -353 ar:949 vf:636
+342 488 ar:454 vf:121
+4 8 0
+qo zo! av pq!
+-147 -543 zo:495 qo:589 av:932
+-866 240 qo:589 av:447
+80 426 pq:620 qo:457 av:647
+-390 916 pq:294 zo:741
+784 923 pq:289 qo:781 av:444
+-145 -610 zo:54 qo:994 av:230
+-625 -418 zo:562 qo:211 av:18
+703 475 zo:537 qo:98
+5 2 0
+wf! ov zm! uz kl!
+908 -30 kl:45
+670 -942 zm:913 ov:911 uz:248 wf:262
+3 9 1
+ae! qv fi
+-976 -623 fi:331 ae:635 qv:307
+70 59 qv:860
+591 -154 fi:295 qv:36
+-4 398 fi:490 ae:602
+506 771 fi:668 ae:606 qv:761
+-827 444 fi:125 qv:194
+663 -318 fi:746
+-416 39 ae:692 qv:793
+-132 585 fi:147 qv:448
+3 4 0
+dx! tj! nk!
+852 523 tj:6
+-359 -696 tj:920 dx:14
+959 -570 nk:635
+-306 19 nk:143 tj:4
+4 2 1
+iv lv vh! wl
+-110 714 lv:79 iv:743
+-829 70 vh:967 wl:201 iv:102
+5 4 0
+iq! by rk yk rs!
+805 342 iq:50 yk:503 by:1000
+-497 -792 iq:392 yk:874 rs:121 by:289
+-24 -142 iq:207 yk:280 rs:779 by:96
+853 584 yk:323 by:501 rk:37
+2 1 1
+vj! bl!
+348 891 bl:507 vj:242
+1 6 1
+mt
+365 -352 mt:32
+881 -684 mt:605
+-144 -784 mt:240
+-64 241 mt:516
+47 -758 mt:602
+-466 -960 mt:381
+3 4 0
+lo id! il!
+-25 -558 lo:236
+405 431 lo:300
+44 -868 lo:359 id:21
+948 525 il:977
+3 6 0
+xr! kh! nw!
+-506 167 xr:119
+854 -628 xr:738
+887 -567 kh:111 nw:472
+308 -386 xr:389 nw:549
+-222 842 xr:357 kh:27
+57 -980 kh:948
+4 5 937
+gh! sb! rx nm
+292 -753 sb:998 nm:707
+402 702 nm:949 gh:303
+-123 -119 sb:202 rx:40 nm:287 gh:961
+-934 533 sb:970 rx:648 gh:82
+-953 -906 sb:539 gh:838
+5 9 1
+zh ll we! ha sc!
+-523 801 we:958 ll:637
+-323 -532 we:437 ha:815
+234 210 sc:174 we:685 ll:211
+-632 552 sc:993 ha:662 zh:811
+-550 544 sc:296 zh:285 ll:535
+635 -677 we:152 zh:396
+-195 951 sc:18 ll:114
+-852 420 sc:396 we:939 zh:209 ll:888
+-190 683 ll:293
+3 9 0
+rm! ca dv!
+10 -810 rm:680 ca:200
+-886 -376 rm:856 ca:920
+475 730 rm:34
+585 -412 rm:552 ca:388
+357 395 rm:391 ca:578
+954 -126 ca:713
+-316 257 dv:828
+724 325 rm:103
+-81 584 ca:542
+4 6 1
+ij rf! ac! mq
+-106 -607 ij:636 ac:78
+-660 -20 mq:269
+339 -731 rf:146 ij:946 mq:551 ac:41
+440 -533 rf:557 ij:785 ac:853
+-657 -952 rf:956 ij:547 mq:371
+532 -941 rf:835 ij:519 ac:844
+5 5 0
+nl! fm id! ef qf!
+-591 320 ef:438
+842 -73 ef:342 fm:507 id:349
+-860 -834 ef:912 qf:211 nl:397 id:425
+286 48 qf:537
+-358 422 ef:419 nl:290 fm:919
+3 5 392
+xg hg sl
+482 124 sl:759 hg:93 xg:308
+990 -984 xg:632
+-706 849 sl:699 hg:313
+-266 -771 sl:786 xg:743
+-765 839 sl:626 xg:210
+1 5 489
+vm!
+-130 924 vm:860
+728 767 vm:762
+-85 -856 vm:194
+-770 -221 vm:698
+-171 290 vm:239
+1 8 0
+gt
+601 157 gt:222
+162 -853 gt:237
+831 761 gt:558
+-242 459 gt:814
+4 51 gt:278
+716 -288 gt:830
+-319 -145 gt:956
+706 -166 gt:864
+3 7 1
+vp zm! op
+504 -875 op:874
+-623 895 zm:553
+215 101 vp:920
+782 643 vp:48 zm:788
+838 -349 vp:301
+-49 -105 vp:93 zm:555 op:849
+-190 392 vp:988 zm:7
+1 4 0
+ja
+-774 -547 ja:720
+44 -13 ja:1000
+607 925 ja:182
+-394 901 ja:393
+2 6 0
+nh! qv
+299 290 qv:564
+429 -239 qv:974
+920 -959 nh:349 qv:476
+-698 -955 qv:449
+66 -884 qv:136
+695 -417 nh:975 qv:22
+1 9 655
+yh
+77 -511 yh:468
+937 532 yh:917
+804 788 yh:595
+228 -568 yh:25
+724 -247 yh:75
+155 -902 yh:885
+440 992 yh:452
+-342 536 yh:773
+-697 -595 yh:595
+5 8 411
+rb! uc! ep! fh! oy!
+885 -556 fh:595 uc:109
+885 -958 oy:725
+-712 58 ep:524
+-117 570 fh:363 oy:421 rb:267 ep:732
+-698 513 fh:320 uc:466
+543 968 oy:486 uc:209 rb:853 ep:919
+535 649 uc:296 rb:842 ep:645
+-737 -648 oy:524
+4 7 809
+tp! na! hk yy!
+-342 -894 hk:501 tp:537
+474 240 hk:16 tp:304 na:666
+622 503 yy:588 na:345
+-201 68 yy:791 hk:60 na:189
+291 -337 yy:335 tp:320
+484 963 tp:831
+-159 -702 yy:131 hk:930 tp:446
+4 10 540
+ka bw! yy nk!
+-439 -509 ka:816 nk:18
+870 770 yy:777 bw:907 nk:771
+601 141 nk:522
+-491 340 bw:711
+790 785 nk:608
+-808 -923 ka:898 bw:133 nk:571
+-568 -577 yy:47
+-118 109 yy:201 ka:857
+503 -720 ka:90 bw:758 nk:675
+-602 -74 yy:179 bw:243
+2 8 5
+wz! ge!
+-160 -55 wz:272
+51 -20 wz:114
+338 -179 wz:367
+-160 -529 wz:789
+-332 -944 ge:815 wz:250
+947 -578 ge:483 wz:727
+-476 755 ge:650
+355 44 ge:101 wz:75
+4 10 0
+mq jk rm! gb!
+520 -831 mq:169 gb:66
+552 -357 mq:382 jk:603
+86 -134 rm:761 mq:735
+473 -676 rm:135 mq:961
+541 -298 mq:200 gb:75 jk:57
+973 -535 rm:505 gb:285
+29 -697 gb:116 jk:207
+322 -155 rm:129 gb:24
+780 975 gb:783
+-139 886 mq:52 gb:362
+2 1 0
+aq! mj
+-57 -92 aq:346 mj:620
+2 1 859
+hm kg
+-59 28 kg:918 hm:829
+3 10 0
+we! jr hu
+295 -363 jr:217 hu:976
+790 -90 jr:960 hu:37
+-199 899 we:369
+463 -232 we:255 jr:365 hu:593
+-904 -31 hu:641
+462 737 we:536 jr:264 hu:808
+-669 917 we:959
+308 175 hu:235
+-306 -278 jr:505 hu:881
+66 720 we:577 hu:131
+5 6 1
+in dg ea! ei! sl
+671 -363 ei:756 ea:621 dg:900 sl:489
+86 37 ei:763 in:12
+-133 491 ei:409 in:75 ea:952 sl:631
+-510 417 ei:724 dg:673
+847 434 in:346 dg:432 sl:310
+777 23 in:274 ea:357 sl:898
+2 6 201
+gw eh!
+-933 546 gw:639
+-548 986 eh:869
+-833 -722 gw:94
+-716 166 eh:800
+-685 39 gw:813 eh:784
+991 411 eh:57
+5 10 1
+ts dz! kz re! xy!
+-361 -551 re:603 dz:939 kz:107
+-717 926 dz:471 ts:339 kz:861
+-369 860 dz:269 kz:809
+932 559 re:251 xy:835
+898 -581 re:111 dz:12 ts:610 kz:812
+129 -597 ts:676
+845 -491 ts:275 kz:553
+54 -294 re:318 xy:641 dz:70
+-891 393 re:272 kz:843
+-394 -156 re:46 xy:397 dz:207 kz:888
+5 10 26
+am bz bs ug ir!
+643 -795 ug:681 bs:268
+-922 -370 ir:278 bz:740
+903 228 ug:279 am:122 bs:983
+-557 226 ir:61 am:507
+-971 395 ug:231 am:428 bs:741
+831 200 ir:324 bz:45 bs:348
+-907 -577 am:701
+-507 -824 bs:946
+388 -432 bz:793 bs:986
+43 -536 am:260 bz:668
+2 10 1
+hv rj!
+-497 831 rj:404
+-903 93 hv:990 rj:635
+27 3 hv:596 rj:452
+-155 -178 rj:917
+276 706 rj:847
+947 -379 hv:97
+456 -726 rj:314
+232 628 hv:174
+571 -221 hv:895 rj:894
+-544 788 hv:550
+4 1 530
+jr! sr! kp kx
+524 -42 sr:927 kp:172 jr:88 kx:629
diff --git a/codejam_2008/src/y2008practice/mod.rs b/codejam_2008/src/y2008practice/mod.rs
index d500f3c..f693abf 100644
--- a/codejam_2008/src/y2008practice/mod.rs
+++ b/codejam_2008/src/y2008practice/mod.rs
@@ -1,3 +1,4 @@
 pub mod a;
-//pub mod b;
-//pub mod c;
+pub mod b;
+pub mod c;
+pub mod d;

From f337cf9b8e924e7cf6214cf1deca85d0580b7460 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 15 Feb 2019 10:24:14 +0100
Subject: [PATCH 010/122] warnings

---
 codejam/src/main.rs                 |  4 +---
 codejam/src/util/vector_2d.rs       | 13 +++++++++++
 codejam/src/y2017round2/c.rs        |  2 +-
 codejam/src/y2017round3/a.rs        |  2 +-
 codejam/src/y2017round4/a.rs        | 18 +++++++--------
 codejam/src/y2017round4/b.rs        |  3 ++-
 codejam/src/y2017round4/e.rs        |  4 ++--
 codejam/src/y2017round4/f.rs        | 35 +++++++++--------------------
 codejam_2008/src/y2008practice/b.rs |  0
 codejam_2008/src/y2008practice/c.rs |  0
 codejam_2008/src/y2008practice/d.rs |  0
 11 files changed, 40 insertions(+), 41 deletions(-)
 create mode 100644 codejam_2008/src/y2008practice/b.rs
 create mode 100644 codejam_2008/src/y2008practice/c.rs
 create mode 100644 codejam_2008/src/y2008practice/d.rs

diff --git a/codejam/src/main.rs b/codejam/src/main.rs
index 0c65086..d9ef79a 100644
--- a/codejam/src/main.rs
+++ b/codejam/src/main.rs
@@ -44,9 +44,7 @@ fn main()
     y2017round3::c::solve_all_cases();
     y2017round3::d::solve_all_cases();*/
 
-    y2017round2::c::solve_all_cases();
-    y2017round2::d::solve_all_cases();
-    y2017round3::d::solve_all_cases();
+    y2017round4::f::solve_all_cases();
 
     //y2016qual::d::solve_all_cases();
 }
diff --git a/codejam/src/util/vector_2d.rs b/codejam/src/util/vector_2d.rs
index d293c61..6cf8370 100644
--- a/codejam/src/util/vector_2d.rs
+++ b/codejam/src/util/vector_2d.rs
@@ -3,6 +3,7 @@ use std::default::Default;
 use std::fmt;
 use std::fmt::{Debug, Display, Formatter};
 use std::ops::{Add, AddAssign, Mul, Sub, Rem, Div,Index, IndexMut};
+use std::ops::Neg;
 
 //#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
 #[derive(PartialEq, Eq, Hash, Clone, Copy, Ord, PartialOrd)]
@@ -75,6 +76,18 @@ impl<T> Vector2d<T> where T: Copy
     }
 }
 
+impl<T> Vector2d<T> where T: Neg<Output=T> + Copy
+{
+    pub fn rotate_rc_right(&self) -> Vector2d<T>
+    {
+        Vector2d{ data: [self.data[1], -self.data[0] ] }
+    }
+    pub fn rotate_rc_left(&self) -> Vector2d<T>
+    {
+        Vector2d{ data: [-self.data[1], self.data[0] ] }
+    }
+}
+
 impl<T> Vector2d<T> where T: Rem<Output=T> + Div<Output=T> + Copy
 {
     pub fn from_rowcol_index(row_col_index: T, C: T) -> Vector2d<T>
diff --git a/codejam/src/y2017round2/c.rs b/codejam/src/y2017round2/c.rs
index 1803187..299a588 100644
--- a/codejam/src/y2017round2/c.rs
+++ b/codejam/src/y2017round2/c.rs
@@ -11,7 +11,7 @@ Simulation, grid, backtracking
 use crate::algo::graph::connectivity::ConnectivityGraph;
 use crate::algo::graph::Graph;
 use crate::util::grid::constants::*;
-use crate::util::grid::{Grid, GridCoord, GridRowColVec};
+use crate::util::grid::{Grid};
 
 use crate::util::codejam::run_cases;
 use bimap::BiMap;
diff --git a/codejam/src/y2017round3/a.rs b/codejam/src/y2017round3/a.rs
index 4565eec..9606686 100644
--- a/codejam/src/y2017round3/a.rs
+++ b/codejam/src/y2017round3/a.rs
@@ -20,7 +20,7 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let G: &str = reader.read_string();
+                let G = reader.read_string();
 
                 write!(buffer, "{}", solve(case, &G, &mut memo)).unwrap();
             }
diff --git a/codejam/src/y2017round4/a.rs b/codejam/src/y2017round4/a.rs
index 2cc3567..8ad4f1a 100644
--- a/codejam/src/y2017round4/a.rs
+++ b/codejam/src/y2017round4/a.rs
@@ -68,7 +68,7 @@ const NUM_DICE_VALUES: usize = 6;
 const MAX_DICE_VALUE: usize = 1_000_000;
 const MAX_N_DICE: usize = 50_000;
 
-const INVALID_MATCH_i32: i32 = -1;
+const INVALID_MATCH_I32: i32 = -1;
 
 fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
 {
@@ -84,10 +84,10 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
     let n = dice.len();
 
     //matchL[dice value]
-    let mut matchL = vec![INVALID_MATCH_i32; MAX_DICE_VALUE];
+    let mut matchL = vec![INVALID_MATCH_I32; MAX_DICE_VALUE];
 
     //matchR[dice index]
-    let mut matchR = vec![INVALID_MATCH_i32; n];
+    let mut matchR = vec![INVALID_MATCH_I32; n];
 
     //Storing values
     let mut queue = vec![0; MAX_DICE_VALUE];
@@ -103,8 +103,8 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
         if value_to_dice[cur_dice_value_i].len() == 0 {
             //				System.err.println(i + " NOEDGE");
             for j in rangeStart..rangeEnd {
-                matchR[matchL[j] as usize] = INVALID_MATCH_i32;
-                matchL[j] = INVALID_MATCH_i32;
+                matchR[matchL[j] as usize] = INVALID_MATCH_I32;
+                matchL[j] = INVALID_MATCH_I32;
             }
             rangeStart = cur_dice_value_i + 1;
             rangeEnd = cur_dice_value_i + 1;
@@ -115,14 +115,14 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
         let mut queueTail = 1;
         queue[0] = cur_dice_value_i as i32;
         used.set(cur_dice_value_i, true);
-        back[cur_dice_value_i] = INVALID_MATCH_i32;
+        back[cur_dice_value_i] = INVALID_MATCH_I32;
         let mut found = false;
         'bfs: loop {
             assert!(queue[queueHead] >= 0);
             let mut cur = queue[queueHead] as usize;
             queueHead += 1;
 
-            let mut cedges = &value_to_dice[cur];
+            let cedges = &value_to_dice[cur];
             for j in 0..cedges.len() {
                 let mut next_dice_index = cedges[j] as usize;
                 //Found a non matched dice index
@@ -162,8 +162,8 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
             loop {
                 assert_ne!(rangeStart, rangeEnd);
                 //Reset dice index
-                matchR[matchL[rangeStart] as usize] = INVALID_MATCH_i32;
-                matchL[rangeStart] = INVALID_MATCH_i32;
+                matchR[matchL[rangeStart] as usize] = INVALID_MATCH_I32;
+                matchL[rangeStart] = INVALID_MATCH_I32;
                 assert_ne!(rangeStart, rangeEnd);
                 rangeStart += 1;
 
diff --git a/codejam/src/y2017round4/b.rs b/codejam/src/y2017round4/b.rs
index d871b3c..12d39f8 100644
--- a/codejam/src/y2017round4/b.rs
+++ b/codejam/src/y2017round4/b.rs
@@ -37,7 +37,8 @@ pub fn solve_all_cases()
 
                 let cards = (0..C)
                     .map(|_| {
-                        let mut sw = reader.read_string().split_whitespace();
+                        let some_string = reader.read_string();
+                        let mut sw = some_string.split_whitespace();
                         (
                             sw.next().unwrap().parse::<char>().unwrap(),
                             sw.next().unwrap().parse::<i16>().unwrap(),
diff --git a/codejam/src/y2017round4/e.rs b/codejam/src/y2017round4/e.rs
index f7df612..d45dfd3 100644
--- a/codejam/src/y2017round4/e.rs
+++ b/codejam/src/y2017round4/e.rs
@@ -9,8 +9,8 @@ use rand::prelude::{SliceRandom, StdRng};
 use rand::{Rng, SeedableRng};
 use std::collections::{HashMap, HashSet, VecDeque};
 use std::io::Write;
-use std::ops::Sub;
-use std::time::Instant;
+//use std::ops::Sub;
+//use std::time::Instant;
 
 /*
 Cross product / dot product
diff --git a/codejam/src/y2017round4/f.rs b/codejam/src/y2017round4/f.rs
index 5c92790..410e355 100644
--- a/codejam/src/y2017round4/f.rs
+++ b/codejam/src/y2017round4/f.rs
@@ -1,8 +1,7 @@
-use crate::algo::vectors::*;
+//use crate::algo::vectors::*;
 use crate::util::codejam::run_cases;
 use crate::util::grid::Grid;
 use bimap::BiMap;
-use num_bigint::BigInt;
 //use num_traits::*;
 use rand::distributions::{Distribution, Uniform};
 use rand::prelude::{SliceRandom, StdRng};
@@ -12,7 +11,6 @@ use std::collections::{HashMap, HashSet, VecDeque};
 use std::i64;
 use std::io::Write;
 use std::mem;
-use std::ops::Sub;
 use std::time::Instant;
 
 /*
@@ -136,20 +134,10 @@ fn solve(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
         .iter()
         .fold(i64::MAX, |acc, t| min(acc, dist(&dest, t)));
 
-    let max_dist_home = teleporters
-        .iter()
-        .fold(i64::MIN, |acc, t| max(acc, dist(&home, t)));
-
-    let max_dist_dest = teleporters
-        .iter()
-        .fold(i64::MIN, |acc, t| max(acc, dist(&dest, t)));
 
-    let max_dist = max(max_dist_dest, max_dist_home);
-
-    ///extra
+    //extra
     let mut dist_matrix = Vec::new();
 
-    let mut max_step_idx = 1;
 
     /*
     create a matrix [log steps][t_idx][t2_idx]
@@ -169,10 +157,10 @@ fn solve(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
                 }
             }
         } else {
-            for (t1_idx, t1) in teleporters.iter().enumerate() {
-                for (t2_idx, t2) in teleporters.iter().enumerate() {
+            for (t1_idx, _t1) in teleporters.iter().enumerate() {
+                for (t2_idx, _t2) in teleporters.iter().enumerate() {
                     let mut best = -1;
-                    for (v_idx, v) in teleporters.iter().enumerate() {
+                    for (v_idx, _v) in teleporters.iter().enumerate() {
                         best = max(
                             best,
                             dist_matrix[steps_idx - 1][t1_idx][v_idx]
@@ -266,11 +254,10 @@ fn solve(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
 /// And validates iterative squaring approach to calculing max U distance per step
 fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
 {
-    let target_distance = dist(home, dest);
     //let mut L: Vec<Vec<i64>> = Vec::new();
     //let mut U: Vec<Vec<i64>> = Vec::new();
 
-    let target_distance = dist(home, dest);
+    //let target_distance = dist(home, dest);
 
     let min_dist_home = teleporters
         .iter()
@@ -290,7 +277,7 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
 
     let max_dist = max(max_dist_dest, max_dist_home);
 
-    ///extra
+    //extra
     let mut dist_matrix = Vec::new();
 
     for steps_idx in 0..50 {
@@ -306,10 +293,10 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
                 }
             }
         } else {
-            for (t1_idx, t1) in teleporters.iter().enumerate() {
-                for (t2_idx, t2) in teleporters.iter().enumerate() {
+            for (t1_idx, _t1) in teleporters.iter().enumerate() {
+                for (t2_idx, _t2) in teleporters.iter().enumerate() {
                     let mut best = -1;
-                    for (v_idx, v) in teleporters.iter().enumerate() {
+                    for (v_idx, _v) in teleporters.iter().enumerate() {
                         best = max(
                             best,
                             dist_matrix[steps_idx - 1][t1_idx][v_idx]
@@ -348,7 +335,7 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
     }
 
     let mut initial = Vec::new();
-    for (t_idx, t) in teleporters.iter().enumerate() {
+    for (_t_idx, t) in teleporters.iter().enumerate() {
         /*println!("Teleporter #{}, dist home: {}",
         t_idx, dist(home, t));*/
         initial.push(dist(home, t));
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
new file mode 100644
index 0000000..e69de29
diff --git a/codejam_2008/src/y2008practice/c.rs b/codejam_2008/src/y2008practice/c.rs
new file mode 100644
index 0000000..e69de29
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
new file mode 100644
index 0000000..e69de29

From ba575a241955026369196fc4a0482b96476947bc Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 15 Feb 2019 17:56:11 +0100
Subject: [PATCH 011/122] b

---
 codejam/src/util/vector_2d.rs                 |  48 ++
 codejam_2008/src/main.rs                      |   7 +-
 .../src/y2008practice/A-small-practice.out    | 100 ---
 .../src/y2008practice/B-large-practice.out    | 697 ++++++++++++++++++
 .../src/y2008practice/B-small-practice.out    | 580 +++++++++++++++
 codejam_2008/src/y2008practice/a.rs           |  25 +-
 codejam_2008/src/y2008practice/b.rs           | 119 +++
 codejam_2008/src/y2008practice/c.rs           |   1 +
 codejam_2008/src/y2008practice/d.rs           |   1 +
 codejam_2008/src/y2008qual/b.rs               |  47 +-
 codejam_2008/src/y2008qual/c.rs               |  73 +-
 11 files changed, 1525 insertions(+), 173 deletions(-)
 create mode 100644 codejam_2008/src/y2008practice/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008practice/B-small-practice.out

diff --git a/codejam/src/util/vector_2d.rs b/codejam/src/util/vector_2d.rs
index 6cf8370..ccf9a7e 100644
--- a/codejam/src/util/vector_2d.rs
+++ b/codejam/src/util/vector_2d.rs
@@ -86,8 +86,35 @@ impl<T> Vector2d<T> where T: Neg<Output=T> + Copy
     {
         Vector2d{ data: [-self.data[1], self.data[0] ] }
     }
+    pub fn rotate_rc_reverse(&self) -> Vector2d<T>
+    {
+        Vector2d{ data: [-self.data[0], -self.data[1] ] }
+    }
+
+    pub fn rotate_rc_right_mut(&mut self)
+    {
+        let r = self.data[0];
+        let c = self.data[1];
+        self.data[0] = c;
+        self.data[1] = -r;
+
+
+    }
+    pub fn rotate_rc_left_mut(&mut self)
+    {
+        let r = self.data[0];
+        let c = self.data[1];
+        self.data[0] = -c;
+        self.data[1] = r;
+    }
+    pub fn rotate_rc_reverse_mut(&mut self)
+    {
+        self.data[0] = -self.data[0];
+        self.data[1] = -self.data[1];
+    }
 }
 
+
 impl<T> Vector2d<T> where T: Rem<Output=T> + Div<Output=T> + Copy
 {
     pub fn from_rowcol_index(row_col_index: T, C: T) -> Vector2d<T>
@@ -194,4 +221,25 @@ mod test_vector2d
         assert_eq!(Vector2d::with_val(0i8, 2),
                    Vector2d::with_val(0i8, 3) + &WEST.convert());
     }
+
+    #[test]
+    fn test_rotate()
+    {
+        assert_eq!(NORTH.rotate_rc_right(), EAST);
+        assert_eq!(EAST.rotate_rc_right(), SOUTH);
+        assert_eq!(SOUTH.rotate_rc_right(), WEST);
+        assert_eq!(WEST.rotate_rc_right(), NORTH);
+
+        assert_eq!(NORTH.rotate_rc_left(), WEST);
+        assert_eq!(WEST.rotate_rc_left(), SOUTH);
+        assert_eq!(SOUTH.rotate_rc_left(), EAST);
+        assert_eq!(EAST.rotate_rc_left(), NORTH);
+
+
+        assert_eq!(NORTH.rotate_rc_reverse(), SOUTH);
+        assert_eq!(WEST.rotate_rc_reverse(), EAST);
+        assert_eq!(EAST.rotate_rc_reverse(), WEST);
+        assert_eq!(SOUTH.rotate_rc_reverse(), NORTH);
+
+    }
 }
\ No newline at end of file
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 1e5ac0a..70d1f93 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -1,6 +1,6 @@
 //#![allow(non_snake_case)]
-mod y2008qual;
 mod y2008practice;
+mod y2008qual;
 
 extern crate codejam;
 
@@ -22,6 +22,8 @@ pub fn run_y2008_round_qual()
 pub fn run_y2008_round_practice()
 {
     //https://code.google.com/codejam/contest/32003/dashboard
+
+    y2008practice::a::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -48,6 +50,5 @@ fn main()
 {
     init_log();
 
-
-    y2008practice::a::solve_all_cases();
+    y2008practice::b::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008practice/A-small-practice.out b/codejam_2008/src/y2008practice/A-small-practice.out
index 1cdd1c2..e69de29 100644
--- a/codejam_2008/src/y2008practice/A-small-practice.out
+++ b/codejam_2008/src/y2008practice/A-small-practice.out
@@ -1,100 +0,0 @@
-Case #1: Foo
-Case #2: 9
-Case #3: 10011
-Case #4: JAM!
-Case #5: LLL
-Case #6: k7D
-Case #7: oe
-Case #8: **
-Case #9: \\[[
-Case #10: \AQ
-Case #11: Q
-Case #12: HDH
-Case #13: S
-Case #14: dX\
-Case #15: y"ty
-Case #16: Zj6
-Case #17: >
-Case #18: pY<
-Case #19: 5
-Case #20: {
-Case #21: /2
-Case #22: g
-Case #23: oGW
-Case #24: at}
-Case #25: /
-Case #26: yyly
-Case #27: }
-Case #28: m
-Case #29: i
-Case #30: z4x
-Case #31: JJzzzz
-Case #32: \5k
-Case #33: ?dI??
-Case #34: Y5
-Case #35: vsA
-Case #36: eN`
-Case #37: LK
-Case #38: ,
-Case #39: ;;U
-Case #40: @C
-Case #41: ua
-Case #42: I
-Case #43: +WW
-Case #44: gE
-Case #45: %
-Case #46: bw
-Case #47: m{
-Case #48: $$$H
-Case #49: ss}
-Case #50: -
-Case #51: ?}}}}
-Case #52: MM
-Case #53: \$Z
-Case #54: 6ZyZ
-Case #55: yeey
-Case #56: wwEE
-Case #57: yQ
-Case #58: q
-Case #59: --C
-Case #60: J
-Case #61: _ff_f_fff_
-Case #62: i
-Case #63: @@@@
-Case #64: ^77^77
-Case #65: [[E<
-Case #66: 1L
-Case #67: vv&v
-Case #68: =Z==ZZ==Z=
-Case #69: ~~Z
-Case #70: a
-Case #71: {BB
-Case #72: :``
-Case #73: >
-Case #74: 88
-Case #75: I
-Case #76: G
-Case #77: __*
-Case #78: Z`
-Case #79: LLL
-Case #80: &&
-Case #81: ccc
-Case #82: Y
-Case #83: AmAAAm
-Case #84: #g
-Case #85: N
-Case #86: DD)))D)D
-Case #87: ww
-Case #88: ]
-Case #89: //
-Case #90: >>>
-Case #91: s
-Case #92: w
-Case #93: ]
-Case #94: RrrR
-Case #95: &+&&&+
-Case #96: za!a
-Case #97: CC
-Case #98: g
-Case #99: v8
-Case #100: Xa
diff --git a/codejam_2008/src/y2008practice/B-large-practice.out b/codejam_2008/src/y2008practice/B-large-practice.out
new file mode 100644
index 0000000..0e55696
--- /dev/null
+++ b/codejam_2008/src/y2008practice/B-large-practice.out
@@ -0,0 +1,697 @@
+Case #1:
+ac5
+386
+9c7
+e43
+9c5
+Case #2:
+3
+Case #3:
+2ac428632228f4
+bf487873333ad4
+3bee78fdf5bd42
+11113296b4bc43
+8c6879e5949ec5
+8cf4969e48cfc4
+869ce5af42adc4
+29eefe79cddec6
+9e5133bcce4321
+8f6233bc4b4bf4
+8539713a494194
+a61858f5a6a422
+1962a69c79dc73
+869713869e6ad5
+2b63232bc519e4
+959f7b7be4a694
+8cc795b59c79e4
+acc5acfcc41872
+18ec587a6228d5
+8c7acef5b732a6
+861185b439fd51
+ad68ced41afcc4
+32b48f48619cc4
+19d68f62bc62a4
+28cfc597329dd4
+9ce7228ff5a422
+8e53bfc79edc53
+ad61118f43ace7
+185862ad495851
+28623bdc486222
+b6bfd7aee4bfd7
+13338d71bc7963
+8d518cd618d411
+28cce4872a4222
+96aefeef5bc7b5
+8d51113bcd49d4
+8e6ac6132accc4
+859d496b5bccc6
+8ccc6233afcc41
+28ec7bdd5b4ae4
+bc5adfc4adc5b4
+1a6187a4b6a694
+859e4bd41b71a4
+aeefefe42132b6
+111313b69eff51
+8cef6111853b62
+8c519c48cc5195
+Case #4:
+222a4868e523a48ccc6
+9f596878f49738cc6a5
+8dec58dc7ac538eefd6
+ae7aec6af7287a51941
+119518731b78ffc48e4
+ae4ae4bd411859e6ad4
+1b4196322228ce795a4
+adeeedffff78e5be4b4
+38713a5311bc587b632
+1af4394bc6be4a519d7
+a73ad68f613b4962ae5
+1119494194194859594
+Case #5:
+2228c62ae48622222286a496
+b7b62b5138e59739f5a596a5
+13333b4af4968738d6b4a596
+ad79ff4318638732a5323ae7
+b4187b6b4a79cf53bcd79731
+1ae613bd61328def7869c594
+8739e738fcf586331a522a42
+851a53b43afecf5bc5afdde7
+862961187331ad4bce5b4a71
+8d7a58ce531a5acf49494132
+8edd4ae721a7a5a7286ae695
+8dec433bd413963b72973186
+8efe43338cef4133bde7bec5
+851941138c594851941119c4
+Case #6:
+2a42228ce4a6a4386a4a43a42a4222a4a48e4222a4222222228e4
+9f497b62323132963bc5239633239df4bc43ad53b4bff73339ed4
+af48719f53b49d6397ac53873b7b6a72b4239623b413333b5afc6
+1328722b497222972bd4238f513195979633a5b5bc6119dfc5941
+8f729d7b4a5339633b4239c7223a428ded59fe58d6122aedc48e4
+21338efd43297a5333ad7ac7b5972b4a5a4a512ac58f51b62ae72
+9697a712ad58fd439f58518dd629f5232b49e4bf4223287953195
+8dcd5963bc48fc4329622a428f52b439f5a4b61963397872af4a4
+a686a69ddc68f4a532333329e52bf432bcd41328f5befcdd7bed6
+396b73acee5ad49cd7bd597a7231bc5bd422a738d633bce413961
+18d51b7a5bc58cc6a59e42319f529cc7863b71b4ad73b6b62b432
+28eee531afe4228df48d6bd4a5232ae72bd5123ad61111197b4b5
+9e511af411963962b4ae5968fcd59519f522879f61a4a4a419494
+8f4ac51accedd63b521b4232b4228cce58f529e79c52b4b422222
+8d4942218c5aedfde5296bdd7a7386232ad4bc71a6a5bcdcd5bd7
+286869728ce71a5adcfcfde4b7bf63bdffccd4123132328e4af61
+38fcdc79685185a58ef6b4b413133b5a5be42a6332b5b52b43132
+3af4acdcd628687ae51396962187bf49439497b5397af4b7ad695
+9594186a4b5af41118c5a7afd487196ac78687bcfef79e59d49c4
+28c6acddcdc7962868ee711322296871afcde71a531b49e4a4a62
+968d58cc62a723323231b48f797a7a5233ae596961ad68defc7b5
+8f42228c7971bffd7bf6be439e51194971194a585a785a41b4194
+29cdd72a5a7a5318f5131b41adeec4acf48ecfce41beedc49cce6
+3ac68fdfc511a58cf6238d687a7bc618de61ad6b687132ac42851
+b529e58d62ae7aec79796858713b63aee53ad613b63afdfe4bc62
+18fcf42af531331a5ad49ec494313131b431ad6311113a79cd497
+8cd69495963a5b41adc68de48ed6b618d418d61b6aec71bc42285
+aee5a6aee51b4be494a52a5ac7871122aceeed63111a78dcc7386
+11943b51b623a7386af4bd69418f629dd631961b6223b4aceddc5
+86a6394a7195139697b4b6328ce7b5aee794af619f51961adcec4
+8f5bf6a5968ecf4387963113ae511a7319e411b6ade48f6b62bc6
+a7a71338e5a78f63a787be4b5bc4873968d68e53b6942333b5b63
+1119411858518511118511858dc4859418cd494119c4951118511
+Case #7:
+28686868e42a68c68ed422a6
+bedede587a5132232b62bd71
+19418d68f58c797397b59612
+28e6a49696223ad5a5948fe5
+9c53968fcdd539ecd4868712
+8c69c7af4a4a5adcc4adcdc5
+acfe6959cdcf69ec62be62a4
+18539686a4a712321b51bdf4
+86a5a78fdc73adff6be41ad6
+8f5a59ed4a59d41397bc4941
+8d418c7aef48ce418594a4a4
+8e4a68511b4acf4286863232
+afc718e62963872bcfcdddd5
+1943223b7ad7afdd6bee48e4
+a68dd711972139c411194232
+19e6adccedd49c4a4a42aff5
+285b58c69ee42a43a52b7196
+be638ecde71879ef5af79421
+119521221bcc7a5be739ce52
+aee6969fcd48f52111b48dc5
+13338d6948e6b4b422122ac4
+8519cedeec7332323329ffe6
+a422a585941b7bdd53bc5111
+969dd48628c5bde4add62862
+8722228f58cc5a5af48fded5
+adff5bcd6286ade5bc694b42
+1219cf4adfc7b43af41a69c7
+8fc4878f41aff41194239c43
+8fccc5858c71122222978e61
+8f48cc686ad6239fd5adc5b4
+85acecfefd49f52b629e4232
+2a52385318ced6b595ade797
+978ff4858c6b49fcccf41185
+858732a6287bc43a68dc4862
+8cc51b53bcdfe4959c4a6ad7
+8c6a418d58c732a4a4239d41
+a6b5222a42859f523233a4a6
+39fe7b59c7accfc5bddfdc51
+1a5339686b7aefce7a69ce42
+8d41387a51111b41959e49c5
+8e48dc79628629ee42218e42
+29eccefef5233a59c5bccd43
+961ae513963b5beeecfc48e5
+8d6118c58dddc733941aec52
+a6b6a4a48e48c711a4a7bec5
+1319fc7a6bece5a6b4311b62
+af6218d797b69e5b5a522197
+11972a6387118f6bc52bdc41
+aecdd7b7a7a4211bcc5b6ae4
+11ace51139fc528fcce5b5b6
+a63858cc58fe6bcfe418f433
+1bf6ace6ae5313879c48d413
+8511123b51ad438fe42ae485
+2868697bc4bc61a7bed51222
+9efc723be4b43211196a43b5
+8718fd7318f697228cf7a532
+8f4a7231ae5387b5223bde53
+ad6139f63b638fd6bd7b6bc5
+18d4941111118785941119c4
+Case #8:
+a4a428e428622a42b42
+9e529ef4bc733b43be5
+2329c71218dd7be73b4
+9d7223ad48c63319594
+8edfff78628dfdc4ae4
+8d6111bcfdce7a421b6
+ae528612b48595a7a71
+118dc72b7228c639594
+222869739d5863b4a62
+9f58defdcc4adfdc595
+23a6219c6a6969ccec4
+395bdcecf7be7ae49c6
+96ad48d41131959ce41
+8f5aec686a5222229c4
+a5231878fd43bf5bcc6
+94958c787acf59cdc43
+22868e7ad72be4a4221
+9fed61958f51b49edd4
+a518d68ce5223aefec4
+186a69eefcd797119c4
+8cd59c53bc618fc4ac6
+a6aeeee51af429ccd41
+19511118c5963acee42
+a428ec68cecdd5859c5
+969e5a58cfe6a4862a6
+8dc58728c53bde4b731
+868ecffcee712be5952
+29ef619413bc519ccc5
+9e5318cce7bc6a4a6a6
+87858ccc5312bfe7b71
+2186286acf495111112
+b62bfe5963a48e4a423
+19d53bcc59feedc52b5
+8ccc512862311ac4bf4
+a68ee4bcdf72a7ac794
+19c59618c7bd59585a6
+86aecd62a59cc4acc71
+29518edffcce4afc494
+9eccc5a5b485a59cce6
+2386aed4b6223ace433
+b58d7328533bff49411
+18ec51bccfd73942222
+8cd486128f611ac73b5
+a68e69efc5b42329dd6
+19619c5948fcff5ae63
+8e722a4862b419e7111
+8597396239fc4879ee4
+222b723332bce494194
+bf519dddf538d42ae42
+1b486868d632ae519e5
+2bce7238cdff7322a72
+9d4197b6ac7331bf595
+8ccccf7b7851bc51ac6
+22a685319ce61a4ad63
+9d538c58c631adcd431
+862328ec6bd6bcec694
+233b7ad4bf49d4949c4
+3bf5bf4853a48c622a6
+953879686bdcced7b71
+221a5238dd6a496b512
+bfc72978ccfde413ae5
+1187b438cef6b4295b6
+868f7212a531bcd4851
+a7a5958f7a78fcec6a4
+3bf48ee7333af6b4bf4
+1194851311111194194
+Case #9:
+222ac4a428622228e42862a42862862232a42ac4a4a486ac6
+b733229e523b7b58723a539632b52b733b52b528d63ac5b41
+1bfdf58de53313a49797a523b5bc51b597a7329e49df48722
+8512b48cf4338d7a4387323b52b428f48d53978f486beedd5
+862bf428f4b522b5a529d7b587b43296868def4322b711862
+87b5bc72969c79d6323863b48df43bc5872859ed5b5948ef5
+8d5858f5adec5a49f59c7b728cf49f428f5228fec5a62a794
+8c6a62b6949e4bcc5222b51328f48787a7873213ac51b79e6
+8ed59f538e632b686397322b5af62b4313297b6b72ae51851
+a786238fe71b513a59c73bd5211973a5a59c73139531ac4a4
+112bf523394b6239e423bdccd42233b49c68f72bcc7adee52
+a49594959c61bdf4b6bdd4ac42bff53ac49639ff429585be7
+96a62a6ae63a5a721332ac5a4311329d622b5219c722a4113
+a73395b539ff63bd6bddfe4be5acd528ffdded48eddddee41
+197beed618711118d52859631296a43a5948dcc49c6a41942
+ae51196968f68ce68cde429fc58ddeddc4286ace429dc42a5
+118ec49418518c596aef69ef4228efc6ac5a538dcf62aedf6
+8c69c628e422ac62b51138718d7879413aed4b4a411b59431
+8cfce59cd6333addde62befecc5878ecf794a52322a522294
+8e58d628e739796ac51b731386229e585bc432b5b5bcfd522
+a5aecd7a797a5a5962a5394bc7bde5a4adecdffc7ad4962b5
+123948d538dd418cd7b4186b69d69cd49496211adfc4adfd4
+8d58e62218cc622ae538e69518e7222a4869fc61ade4949c4
+2aec5bf586aefdf7941a5968e43973bdcef4b696969cce6a4
+3118e53acf5112118e618e7adef6bdf487b61b418de6a59d6
+b6ae5ad5a52a4b428538c5958513969485118d42ac7196a41
+1b5b618cd6bfcfe78cdc686228ed41a422a4acc5b49429de4
+85871a6ac511a713868632b7bcd622b6b5bc7a62122afe494
+28694195228c5187a787b719d629fd59fed4951329731bec4
+bcd6868cddee6aed79ef5b62add6b42a5beee42b5add439c4
+18cd69ecc61195185a71a7bdde419e594333323b63ac49622
+8cce5858e78628cce538511aefee6bcc61319ff79dfec49d5
+acefe4223187b4ae5a5accc51331312af6386339487122ac6
+18519cdddccdf4112b696ac6a59432971318f59ce4bc5bd41
+8e686286ae62386297323b49d6a6b7a7858e7a42329ccd486
+8596396b739f5a5bc73b7948ef5311332285bdc79feccccc7
+8cc79e71118dcfef4311b68e594bc619f58cfe63879ee6a41
+222bc79ce628633b494a7941aced49e4962871138d6139fe4
+9f73858c7bded71bc421b6ae58fe48f4219efc6968d4b6194
+a53b6a4a718f4b4bcc5a5113ae594adc58e5961adc685b622
+12971bc718cf4969e42b42233be68d686872af49c412859d5
+8fc5a5858ee7a496329f49f71339e49ed6951b4a4a43ae422
+8d485ac6211b52a79d69487185b4b48f6948edcf4b4b5bcd5
+8e6285a7bc6bc513a69622948cf6bc43bc4872afe72b4bec4
+21338e5958dfcc69738fd78ee633b687be487b531bdf639c4
+bcfdc728eeef487a7b6185a5197113a5394851ad4b4119e62
+1294879e713be63111bc48d4acfe6196968622b48f6a48513
+872ac7853a7311bc487a48c63a51b4a58787bd58c5bde6ac7
+afd785ac711b68f42ad58ccf5be41294a58ffc62acf431b41
+132b621a5ae53ade59e48ee7879ec7aef687963b7a5afef62
+87b5978d61b633ad6af6871387ad43311b6b61313387133b7
+85948d48d41111941111858d4194859485119494118d41311
+Case #10:
+8c62a62222ac428cce528ce428622222a628c6a48e48f42
+acf513b5973a4b4a43296ad49c733b7319d68fdc4b423a7
+1a7a4332a59d638f4b5a53ac423b51b58cc78d62296b531
+a5332b59dcced587a7296bd487b522bc48ef42bfd49fed4
+38ddfd628687a42b5bf4bfc48f7a59fc48532b7948e59c4
+1acc5879c729f431859c5b4221338ed4286b739486bc4a4
+2322a6b48dfcf438cc6a6b439c73ad4a529533ac4bdcc72
+959f59d622b61a528cf53b43229fd423a5229732a5ae495
+86858c69dd5bcdc7a418fd4333296a59d63b4b539e73ae6
+2328ccf42223a48538623863b5bed58e63396bcfc519511
+9df6ac729ffdd42232bd7a5bdc59cc41bdde538dc42a6a4
+ac7958d7a5bcc639f51afdef42a4ac48d48de722acd7332
+18528c63b6be639ed6219619edf49e6a68ec59ddde41953
+8ccdccdf73131b43a53ac5a6b49ce5339efceee429ec4a5
+8e4aecc519612be73afdc619fe4af495a7b4319ed6be6b4
+29e518cc68729533b59e61ae71a79ee63138fe412131bd4
+9ef68e4878fd485318e51a51321b433132b43bced4941a6
+85118d6adcf486a5aed487aef7ad61b6b51851adc628631
+acccc6bd4af4afd43bec6313311ad411b42accfc497a7b6
+18628ffe411239e613385963be49ecc496318efe6a53951
+aefd6339c6af785b419e4a73118cfec4ad78e51139efe42
+1118f79c6111bc4b4aef613968cc5be41878dce41a53b43
+228e7b4ade4ade6b41311a5a5a6ae5bee494a6b6a5a7bc5
+9dc71b696b69433be49e496b61b73a539e4239531a533a4
+8cc585941118c511948d48519411118d49c59c4185859d4
+Case #11:
+8e4868c78ee6
+8dc6b4a5a511
+a4a532b4b4a4
+be7239ded4b4
+139dd68fc6b6
+a5868f638d51
+18cfe59d4ac6
+8e6396a6ad41
+2195af597a42
+b68c7be49dc5
+196851bcece4
+aedc62b61212
+13aeff512bc7
+87113becdd43
+858c73bc4a61
+8ce4333a6332
+8cdc51b5b595
+228ce6b69cc4
+9dce597bec42
+862948539ec5
+ad78ccc729c4
+18dccce5b6a4
+2ac4aefe51b4
+bfc6131b6af4
+1129e787b796
+863871853b41
+2b78f4221b62
+95bcfcdf4195
+8e7852ad4862
+8518697a4ad5
+aec6be5b4322
+118d796329f5
+accc52bddcd6
+1a4869fcce41
+adce723a49c4
+32a59dd7ace4
+1958628df696
+8eccf52a5941
+a5ac7add4286
+9418f5a423a7
+28cc72b49f51
+9cecdfdccfc4
+2ad48fee49c4
+b5a4a719cec4
+94be53a6afc4
+ae59631b5be4
+1968518d4194
+Case #12:
+ac4a68e4222a4322a686ac422222a48e42a6286a4228e42228ce42862222a486a62
+9c61323ad53b4397138d72233bd59e43871b58df6338723338c7a5297333b48f5b7
+8632339fc49723a5a58c7b533322232bc5872287397ad59f58e5387879739ecd411
+af79ddc7a48dd7329622b52397333bdd428df7a59cd7228d68d632b632b72328ee6
+131a422972286397a59d7a796b5b5bcccd487118cc633b48722979597b71bd52311
+8fcdefdcd7bc73a5b68cd7129f6963acc48632228ef7b5ac539e586ad5129c6b7a4
+878e7b62211ad7b431868723871a597ae4297bf5a713bc78efe728d7228786b59d4
+852311b7386129fed42329f523a5acd5949c73b6118df6be7319f68f53a5aff4ac4
+2ad586395a729e7bc49fdcdedfd6bece4286b5112862113339e639efe79e53b6be4
+b5868dde41bde51b68612223ad4b7969cd6bf62afcf7ac531851b61319ed431b732
+18cf68edc63ad621bc58fdf59c6194bc62b51b71b61bd48fe42a51ad62b48585195
+8ec79c5aef596b7adeee7af62a5a68f6979687b631a72ac73a5962b6b7b6a4a6ac4
+858d4ac73b4a5311a73313119fe7323187af4139d411b787bf48d713313bdc5bdc4
+8c6a63853b694b6a71132bc6a7113972851bc69ce4a419611962a5853859628d622
+a6b7bd4a53b68711968f5b433b6238fd628f41a6be58ce52ae59dec49c68f52ad73
+1971be41a711a5ace52b4387331b72b4332322197968ed4b5b48efe6ac58f69f6bd
+acf6394a79c6b41ad4bf63a73385b7b6b79fd5ae7a7af4878dc63113bcc633871b4
+94119c419485948dc411111119485111118dc41111119c4948c594859485118d494
+Case #13:
+2ac4222222222a62286a48ec48c7
+33a4b5b5973b719df4978cfe62a5
+9f78f432af7132a4b4a78631bd52
+859c78f5119cf538f4332958f4a5
+a6223a528ccc729ede5958ced4b6
+139df5238c62b58f4128628fce59
+23229e79ceddd4ad423a5bef6bc4
+9ddf413229e4229e4bd5871119e4
+a6afc69f5af4b523ad428d6a4ad4
+1b51238721bcd49fd42386bd49c6
+a52297a7b69ee48f42b587bee623
+18d7af5339619ecdedf487311b71
+acc713ad7a722b429418edf48512
+1a6bc73a519fd5a522aef49422a5
+859d4111868decd4bd5194223bf4
+aec62868cfe49ecedceeeef59794
+1129dcdee7be6b49487311b4a522
+22b6286133119d6a6853a49cdef7
+bd79dc78718cc6b59e4b5228c513
+1858ccde72868fdc43afcfdece41
+a628ec633befedc4211b4187ad62
+397a58f7311196ae7a49ec4194b7
+1add485118c6ad511b48522a4211
+218c68ce4287b42a43a4233bef42
+9ee69ecd63a738fd43bcf5b711a5
+8519e7acfd59fed623b41239ce52
+2a6a5194b6ac53afd5bcefd48dc7
+959528e633b4851b4af611a42a41
+2a62be79511ae68fc519c632bf42
+b739519c422119cd686221bf79c5
+31b68e4a439686acfeddfc5396a4
+38596bcf6963adf61968de6129d4
+1ac639419c79587942be419c58e6
+858df4868c7a487ac71be622ac51
+868cde4328d7acfd6121197bdce6
+8dee4969728ff43adcfe62bdc411
+ae7b68723bc5961bc4131bfeecc4
+1113969dffce496b6a4b41119ce6
+ac6187ae71ad6211b58dc4286211
+187a6b531a787b48d6a622bcdfe4
+8cf7bf632318f52a4951973a41b4
+86111119738ed4bd4a68eff5a494
+8feccece51af4232a512333ad4a4
+a596a78d685bcf533a4b519dce72
+1ae5118c5a63ad6bdd43ace62195
+87b42868c59538df4aedd43132a4
+a73adcd6a6ac5acfe59ec69cddd4
+11118ccf79f4a5a5948d49ec6ac4
+222a62213a7232bcc42a421addc4
+b5959dfe51973bfc62bd4b494ae6
+9ce628738ce5339695b4af6ac511
+a61b7a512af4118d6ade51952ae6
+1b6133a4b794aecef7af6aee7311
+a79efff413a63b613313b531bdc6
+31851132871b53b63b4196b41a41
+18cccef58d4961111b62a5122322
+8622a59ce48c728ec519f68dfdd5
+a79fde4af62ad587a42a5bcedec4
+1bc58f63139de4ad7a796961ad62
+2bc4871b61ae7218f7187a5ad6b5
+9d48cd419411958c59c419418594
+Case #14:
+86a4a4ac4868722868e48c6
+29d6323ae438ff5296b4ac7
+9629739532963949cfd4b41
+8d7ad522332bf6a4232af42
+2a5beedfd5951396bd51b43
+3b61396328628fc5b48edc5
+b796b4197233a522b6adcc6
+1949522a7979dcfd719e421
+2222239596b428f69ce5ad6
+bddfdf428df6387948fcd61
+18c78d63221bfe7a48fe4b6
+2287a639dde731bfc619411
+9fe513bc6a7194118dc4ac6
+8518631233b4a4a6accef61
+2286b729d796bc71b4a7394
+9dcd59f6ad6b78fcd4319c4
+8ce6a43972111afcc4122a4
+8e5bfc78fde4a796ac4bfd4
+a5a71af638f41b49fc439c6
+b4118533b6bc632ad623221
+18e6ae533194339f69d73bc
+ae5331a5b6ac53871acd7b4
+1b6b5af611bc4b4963acd72
+851941118cd48d48519c495
+Case #15:
+222a4868c6222238c6
+b7b52a52a739797a43
+31b69f49539e5879e5
+b41b4b4223ad487ad6
+be6bc529ddfc4afd41
+33bf6a522afe439c42
+1131bdcdf519e5aee7
+8c5af68ed6229c7131
+acc719418fd5a49494
+948f48c62becdc42a4
+2a412a63b51a4acdd6
+33863139fcedcd4861
+338738dc5ad622aef4
+9dc7b428cf4bf73196
+868df49ecd4119d485
+adccd68d622ac4ac42
+1a62a786bd532adec5
+859f7bcfd623b58dc4
+8cc511a7addd586ac6
+8ec6a411b6ac4add41
+8d49fccc59fcc586a4
+8e485286a496a6add4
+8dee49e732ad5952a4
+ac7b6239f7beeccdf6
+18519d78597312a413
+ac62ae58ee7963bc41
+38733942311afddcc4
+18ff7863be619ec6a6
+285138fd533a618f53
+bcec587285b5b4ad41
+18dc485becd418dcc4
+2a4868c53ac4868e42
+9d6a5a48df42adcfe7
+a69d69c6adc7bc4113
+33287ae59c6972a421
+19fcd796aef63bded4
+8c58c52b53119d69e6
+acc62afd6b48e49413
+186bd7b43322b42a41
+acd5871879797a5bc4
+122863a618defdcdc4
+8ddcff738ee7b42a42
+8ccc733387319effc7
+28ce5111a71ae73b41
+9ecd6ac61b411133a6
+ad4aff412bc6ac5b53
+96a7338cf78796a7a5
+8511118c518d413194
+Case #16:
+2ad
+9f4
+af4
+1b4
+ad6
+123
+af5
+396
+187
+ae7
+131
+a72
+1b5
+8d6
+8e7
+871
+296
+bc5
+9e4
+872
+8f5
+ad4
+be4
+196
+8e5
+a72
+1b5
+8f4
+af4
+1b4
+2b4
+9f4
+a72
+197
+a63
+1b5
+8f6
+873
+231
+bd4
+bc6
+961
+8f6
+871
+8f4
+8d6
+2a5
+3b4
+9d6
+8c5
+Case #17:
+8cc69623a4a4286228e68622a6222
+8e632b5b72323297bc7be5b513bf5
+a5959de73b7b59e718531a786b794
+bce48631119f42318ec7a518731a6
+129ccf5228632bd6858df42adde73
+8dcce52338fd5b61ac6232bf62331
+8cc6b439dcf4a51218ddd733b7394
+86adfcde4af4bcef48ccc731119c4
+8d5a528d639ef4118c62a53a42222
+8cc5adeed5a594228639fedd433b7
+8cccd4112adc4233adfc532869f71
+868cce429f62233958fc6bfefc512
+29cccdcf41b59fdc42b4111332ac7
+32a6a6232232872a69f4a4859fd61
+97395b7b73b5a5b512b4be4229412
+295ac7973bf6bedec59639e7328e5
+bc63a5a595133949c4873219d58f4
+18d71a58cc6bde42a4addd42accf6
+aec585a4a69d4bc596bc4a43be411
+394a6adc59cc69eccddc63af512a4
+1861b586ae48f6beccc4bd7b4ad72
+8c7212ad59e41b59c6a6b61bcd4b7
+acffcf5aeedcc78e49511949ce411
+1851858511ace78fccc4a6a429e62
+8e6868ece418712bc4ae7bdc585b5
+8538fcf69e6872b7ae53112a428d4
+229cd411853aff797961223bcd4a4
+bde6ac628cd5113294943bd522a52
+3a7318fd6868ce538686bf6a5bdc5
+11332a7238f6adcfc52b51bfcfec6
+8c597339de59f6af4adde41943121
+86acf738e7ac5139edc494ac49cd4
+af7a53b413968c529e428efec4ac6
+111185948585862bcdcdc719eed61
+28e686ac62228ddfcc422328518d4
+9c53a51adf79622b4a6b5132aee62
+22239c6185329ddfc59dc4bd51195
+33332232ac7b628de622ac5222a42
+9ddddf7b7ad59dcc79ddd6addddc5
+8ec68533396a6228fccc497862a42
+85adeef518513b7296acc69e7bd43
+8c7853b68cc6319fefdc49419dcc7
+8e7285118ccff6a5194ae6acc6223
+8519ccccc68719decce511bc49f51
+868686accdef68cf68fceed4a69e6
+8de78fd6ac713ae5323a53ae79411
+2a79e78738523138d7396b5196862
+b538532338efd63ae59439628fcf5
+1218c5951851a5139ee6949f6b6b6
+a78e48e4a6acde41a53be62111311
+1b6b4a7a7bf6a58e58533b7a4a7a6
+859fc7973133b6294223119d61b71
+2aef6b63121339dc6bffc6ae78794
+b533333b6bc5bc623133a7313af62
+94111111118cd4951851111851195
+Case #18:
+a422b68e4862862286228e4a4868e622a4a4a428f4a48c68e42a4
+96bd5187a43b6333a5b523a522b413b7329e52b4329e4a529cfd4
+2396228fd495b59fd496333a53322959f523297233a5adc528f42
+33af53ad422a586bc4873b53879f586ad49d78fdd5969c6a52be7
+bf596972a539e439e6a7332bc5ad48ff48c6b6b4a487223b4b511
+3b487879d63a7296311bd73b4ad42213a4295bd4b4233bf5a5a42
+138c78786971b7a596218fd529629787bc586bccd633b718f63a7
+858edef4bc72319c633287a6b433232bfc48d78e419d7bce59d51
+28c587b618f5b42233978f59f6339dd712a4878d622879496acc4
+9ee6871962323239d72bcdc639d78cc723328fecd53a5a68df6a4
+8519c72879f59fd4879f4a413acdc62bfffdc712a49fe538c5bd6
+286863bede72ad4a638de528512ac7b5111acdeddcc7121a4ad41
+9cdcf51385bdfec73bec72b62af78ffeec618efec4a7a7296b4a6
+2a4212a5aef413a7971adf5971138713b41ac71bc43979fe7be71
+9f69697851be4131a7af69e43863a5a79e6949694a587a5111112
+85323a58ce79e4b431331ad438d7b4138718c6bc694879eceece5
+8cddf58ee794b41a5a53ad6af4879485a7862b5232285a5859432
+2aecf6a73be496a58d611a719e49ec6a51879fe7bf78cfeecc495
+9596111133b4a7968cf6a594a5221a5968efe7311312233bce4a6
+8cefe48e7194132b48719ec69ed78dc61873333a6969d7196be71
+8e711863b486a79f4a78c7a5a7a7aeef4a7313973a5acd6a731b6
+859c48d518cd59494194859411111119411949411949c41119411
+Case #19:
+2a42a42a4a422a486286a6286a48c6322228622222222a422a4ac42a4ae422a48c628ce4a4
+978f7a5b6329fd4a59e513963322a7339796339f5979f58f53296239c532b59ec439e6b4b4
+afc5b5a719787a6b62b4ad4bffd53b73872bf723223ad6a523b4bdd422b596adc69c71bef6
+112ad4312878d795953adec71b6211332b51319dddf72196b796bcc43332a51ac72a5a5133
+8cffee587a58cf62229f4949413b4a53396a52a68e5bdecf73a7328cf59f72a5afdd6bc419
+86111bce7328e5bfd7adccc48edf6bedde7bc533af6b6b613119f78e7a639ff419e4bfe422
+a78ee7219f5a787969fe6ac48d4197b4a7bfee5b5133111afcce53a597bd633a68f4319e73
+13a53bd4afe53af61871b5222228e5385333196bc41942879e4b4bf4a7b4319538f41ae795
+8f5859c6311a51394a5aded79fde5a5a4319687bee62afe72b6b63b413b4b48638fe431bc6
+adce4ac59e4b6af6a7a5af61af6b4b4bcf6a7a7313197311971331be63b6bec53a7961ad61
+9c4949c4858511111118511851118d49411111118dc41948cd4118511111194851949418d4
+Case #20:
+a48622222862862a42a42878e48622862ac486862a6
+9ce7b53b52b5a5972b523a5238c733233bc48723953
+28719e5b69f4b62397239d63b4a597b597a48d73ac5
+be5ae721323219d78d7b4873b432add48d7a48dfd62
+196119dc7bd5a48f68dd6879d6333a4868ff622b695
+86b622a6396a5863186a5a58e5bdddc4b43113b5962
+8d53b71b58d7a49728fdc528729eecc496b623be413
+8cef532968e5386b58dec43a5be51a628f51bd79c63
+86118df6bc5ad6bf4a69629f431861b5adcc58dc495
+afe48e73b6a7871b419cf529ed4232b4bccc6ac4862
+119685195951adcf4868f69cfec73bd43a42132ac53
+8cef6222286212ad487219ec5121bfeeddc78f5bec5
+2233397b5a7b49f48c7322bccedc511b6ac78de59c4
+bf719cd7a79decf6a497bdf4a722862119496ade6a4
+113868ed71a6387196af78587b7beff6222af7a5972
+8e587ad63a5978f6af5138ce53b73139dd5111948d5
+858695a7318c5a7b538cd62187131a7aece48eee486
+228f485118cce51b438eef78cf4187b59432a519cc5
+9dcfc68686acf48f61a53318cfe6a5bce43bde622a4
+8ec58dcd69f696a518787942a513b61ad69f4119fd4
+872accee7a71a59e6878de69d4a53123ad69c622be4
+21b52a5395b6b4233a72a7bee632b6973a7aedfd79e
+9c78d787ae5394b711197131333971a731311ad4941
+2218cf61138de43328ecd618711af431b61acfcecc6
+bfece53aefe6961b7858ef6ad6879632332943ade63
+319696133111af413acc731387af611b5b5ae796313
+948d4185948c518c59c4118d4111948d49411185941
diff --git a/codejam_2008/src/y2008practice/B-small-practice.out b/codejam_2008/src/y2008practice/B-small-practice.out
new file mode 100644
index 0000000..b6dc437
--- /dev/null
+++ b/codejam_2008/src/y2008practice/B-small-practice.out
@@ -0,0 +1,580 @@
+Case #1:
+ac5
+386
+9c7
+e43
+9c5
+Case #2:
+3
+Case #3:
+6a5
+9f6
+a51
+9e4
+872
+2b5
+9d4
+Case #4:
+8e796
+a7323
+119d5
+Case #5:
+c7
+a5
+b4
+b4
+32
+97
+87
+a7
+11
+Case #6:
+6ac6aecfe6ae6
+9d49594119511
+Case #7:
+a48e4a5
+de4b632
+8fc5bf7
+858c511
+Case #8:
+3
+3
+b
+3
+3
+1
+Case #9:
+7
+3
+3
+3
+3
+3
+3
+1
+Case #10:
+a487
+b4a5
+9cf6
+2871
+9c72
+6ad5
+bde6
+9411
+Case #11:
+86ad68e
+8dd49c5
+Case #12:
+8ec7
+8787
+858d
+Case #13:
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+b
+3
+3
+1
+Case #14:
+63
+95
+Case #15:
+8e6b
+a5b5
+9494
+Case #16:
+3
+3
+3
+3
+3
+3
+b
+3
+3
+1
+Case #17:
+2a42296
+9f6b5a5
+a59fc72
+d48d495
+Case #18:
+3
+3
+3
+3
+7
+3
+3
+3
+3
+3
+1
+Case #19:
+a4a586a
+3232ad5
+9fdffc6
+8d41185
+Case #20:
+8e7
+231
+b72
+197
+Case #21:
+32a42
+9ddcd
+Case #22:
+ace6acceeeecf4
+9419dc411118d6
+Case #23:
+bec622a4862
+518ddddccd5
+Case #24:
+32
+b5
+b6
+31
+b4
+96
+a7
+31
+b4
+b4
+32
+97
+a5
+b4
+Case #25:
+3
+3
+3
+3
+3
+3
+3
+3
+3
+b
+3
+1
+Case #26:
+3
+3
+3
+3
+3
+3
+3
+3
+9
+Case #27:
+7
+3
+3
+3
+1
+Case #28:
+eec52
+1bcc7
+adc61
+9c494
+Case #29:
+be4
+3b6
+133
+231
+bf6
+119
+Case #30:
+d6
+a5
+b6
+11
+Case #31:
+3
+3
+3
+3
+3
+3
+3
+7
+3
+1
+Case #32:
+3
+3
+3
+3
+3
+Case #33:
+8dcccccccc
+Case #34:
+3
+3
+Case #35:
+223
+bf5
+1b4
+ad6
+321
+972
+af5
+3b6
+131
+af4
+3b6
+119
+Case #36:
+b4
+32
+b7
+33
+1b
+a5
+b6
+31
+b4
+96
+23
+b7
+13
+85
+Case #37:
+8622acc7
+8dddf485
+Case #38:
+8eccdc4
+Case #39:
+8622232
+ad73bd5
+3afd722
+31963b7
+18c5959
+Case #40:
+8cdcccccdcccc4
+Case #41:
+8e49c6
+ed4863
+9cccd5
+Case #42:
+2a5a622ae486a43
+b7a5bdd73aedfc7
+19d418c59594185
+Case #43:
+8ccccccccddcc4
+Case #44:
+32a4aced6aceec6
+9ddcd4949585185
+Case #45:
+8ccccccccccccdc
+Case #46:
+8e52a4
+87af72
+cd5195
+Case #47:
+7
+3
+1
+Case #48:
+9c62
+8ed5
+2bc4
+9f42
+8f63
+859d
+Case #49:
+8ccccccccccdccc
+Case #50:
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+b
+1
+Case #51:
+8eccccccdccc4
+Case #52:
+8e5
+af4
+132
+afd
+1b6
+a71
+194
+Case #53:
+2b
+b7
+11
+Case #54:
+33
+b5
+b4
+96
+a7
+13
+a7
+11
+Case #55:
+86a5
+2bd4
+9fe6
+8531
+2ad4
+9d62
+8ed5
+8fe6
+a731
+1394
+Case #56:
+9d4
+Case #57:
+ac7223
+b639f7
+119c51
+Case #58:
+3
+3
+3
+3
+3
+3
+7
+3
+3
+1
+Case #59:
+9ccccc
+Case #60:
+ae5
+1b6
+871
+872
+c73
+8f5
+872
+8f5
+8d4
+Case #61:
+3
+3
+3
+7
+1
+Case #62:
+223
+9f7
+a73
+131
+Case #63:
+ccc5
+Case #64:
+bed6acc6
+118dd485
+Case #65:
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+Case #66:
+3a4
+bd6
+d41
+Case #67:
+3
+3
+3
+5
+Case #68:
+cccccccccdcccc4
+Case #69:
+8dcccc
+Case #70:
+3
+3
+3
+b
+3
+3
+3
+3
+1
+Case #71:
+38c6
+9ce7
+8c71
+8ed4
+2bc4
+9fe6
+8531
+Case #72:
+878f4
+af632
+119d5
+Case #73:
+8efe7
+85111
+Case #74:
+b5
+b4
+b4
+b4
+32
+33
+97
+87
+a7
+11
+Case #75:
+3
+3
+3
+Case #76:
+869ec4
+8dcfc4
+Case #77:
+9ec4
+adc6
+9c49
+Case #78:
+232a6
+bfd73
+19431
+Case #79:
+3
+3
+3
+Case #80:
+a7
+19
+Case #81:
+b4b6
+9e71
+8594
+Case #82:
+5
+Case #83:
+b5
+b4
+94
+Case #84:
+87222a4
+8ddddd6
+Case #85:
+28ef4
+de5b4
+858d4
+Case #86:
+ccccc5
+Case #87:
+3
+3
+3
+3
+3
+3
+b
+3
+1
+Case #88:
+2aeec7
+b53b69
+941194
+Case #89:
+8cdec6
+8cc785
+Case #90:
+a5
+b4
+b4
+b4
+b4
+b4
+Case #91:
+2b6
+973
+871
+872
+2b5
+9d6
+2a7
+971
+af4
+1b6
+a51
+b42
+963
+ad5
+Case #92:
+3
+3
+3
+3
+3
+Case #93:
+32
+97
+a5
+b4
+b4
+b6
+13
+a5
+bc
+94
+Case #94:
+96
+87
+a5
+96
+87
+a5
+b4
+b4
+96
+Case #95:
+8d
+Case #96:
+87a
+af5
+194
+Case #97:
+ae49e48cfe4
+3bc6bcce5b4
+194958cd494
+Case #98:
+8cdccdccc4
+Case #99:
+3
+3
+3
+3
+3
+Case #100:
+8ccecccdcc4
diff --git a/codejam_2008/src/y2008practice/a.rs b/codejam_2008/src/y2008practice/a.rs
index b27acf4..50f9474 100644
--- a/codejam_2008/src/y2008practice/a.rs
+++ b/codejam_2008/src/y2008practice/a.rs
@@ -1,7 +1,7 @@
 //use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
-use std::io::Write;
 use itertools::Itertools;
+use std::io::Write;
 
 /*
 Change of base
@@ -17,7 +17,6 @@ pub fn solve_all_cases()
             for case_no in 1..=t {
                 let in_s = reader.read_string_line();
 
-
                 if case_no != 3 {
                     // continue;
                 }
@@ -48,23 +47,21 @@ fn solve(alien_number: &String, source_lang: &String, target_lang: &String) -> S
         debug!("Digit is {}", digit);
         let digit_value = source_lang.chars().position(|ch| ch == digit).unwrap();
         debug!("Digit Value {}", digit_value);
-        al_converted = al_converted + digit_value * source_base.pow( (alien_number.len() - i - 1) as u32);
+        al_converted =
+            al_converted + digit_value * source_base.pow((alien_number.len() - i - 1) as u32);
     }
 
-
-
-    debug!("Alien # converted is {}",  al_converted);
+    debug!("Alien # converted is {}", al_converted);
 
     let mut tl_converted = Vec::new();
-  while al_converted > 0
-      {
-          let digit = al_converted % target_base;
-          debug!( "tlDigit {}", digit);
-          tl_converted.push( target_lang.chars().skip(digit).take(1).next().unwrap() );
-          al_converted = al_converted / target_base
-      }
+    while al_converted > 0 {
+        let digit = al_converted % target_base;
+        debug!("tlDigit {}", digit);
+        tl_converted.push(target_lang.chars().skip(digit).take(1).next().unwrap());
+        al_converted = al_converted / target_base
+    }
 
-      tl_converted.reverse();
+    tl_converted.reverse();
 
     tl_converted.iter().join("")
 }
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
index e69de29..04ad8b9 100644
--- a/codejam_2008/src/y2008practice/b.rs
+++ b/codejam_2008/src/y2008practice/b.rs
@@ -0,0 +1,119 @@
+//use bit_set::BitSet;
+use codejam::util::bitvec64::BitVec64;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::constants::*;
+use codejam::util::vector_2d::Vector2d;
+use itertools::Itertools;
+use std::char::from_digit;
+use std::cmp::max;
+use std::cmp::min;
+use std::collections::HashMap;
+use std::i64;
+use std::io::Write;
+
+/*
+Change of base
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008practice",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let in_s = reader.read_string_line();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                write!(buffer, "Case #{}:\n{}", case_no, solve(&in_s[0], &in_s[1])).unwrap();
+            }
+        },
+    );
+}
+
+fn solve(forward_path: &String, back_path: &String) -> String
+{
+    let zeropos = Vector2d::with_val(0, 0);
+
+    let directions = [NORTH, SOUTH, WEST, EAST];
+
+    let get_dir_index = |dir: &Vector2d<i64>| directions.iter().position(|dd| dd == dir).unwrap();
+
+    let mut square_state: HashMap<Vector2d<i64>, BitVec64> = HashMap::new();
+
+    let mut handle_step = |step: char, dir: &mut Vector2d<i64>, pos: &mut Vector2d<i64>| {
+        debug!("Read a step {}", step);
+        match step {
+            'W' => {
+                square_state
+                    .entry(*pos)
+                    .or_insert_with(|| BitVec64::new())
+                    .set(get_dir_index(dir), true);
+                *pos += *dir;
+                square_state
+                    .entry(*pos)
+                    .or_insert_with(|| BitVec64::new())
+                    .set(get_dir_index(&dir.rotate_rc_reverse()), true);
+            }
+            'R' => {
+                dir.rotate_rc_right_mut();
+            }
+            'L' => {
+                dir.rotate_rc_left_mut();
+            }
+            _ => panic!("Invalid char"),
+        }
+
+        debug!("Current pos {:?}, direction {:?}", pos, dir);
+    };
+
+    let mut handle_path =
+        |path: &String, initial_dir: Vector2d<i64>, initial_pos: Vector2d<i64>| {
+            let mut dir = initial_dir;
+            let mut pos = initial_pos;
+            for ch in path.chars() {
+                handle_step(ch, &mut dir, &mut pos);
+            }
+            (dir, pos)
+        };
+
+    let (dir, pos) = handle_path(forward_path, SOUTH, Vector2d::with_val(0, 0));
+    let mut dir = dir;
+    dir.rotate_rc_reverse_mut();
+
+    let exit_pos = pos;
+
+    debug!("Handle back bath starting at {:?}", pos);
+    handle_path(back_path, dir, pos);
+
+    square_state.remove(&zeropos);
+    square_state.remove(&exit_pos);
+
+    let mut min_row = i64::MAX;
+    let mut max_row = i64::MIN;
+    let mut min_col = i64::MAX;
+    let mut max_col = i64::MIN;
+    for pos in square_state.keys() {
+        min_row = min(pos.r(), min_row);
+        max_row = max(pos.r(), max_row);
+        min_col = min(pos.c(), min_col);
+        max_col = max(pos.c(), max_col);
+    }
+
+    let mut ans = Vec::new();
+    for r in min_row..=max_row {
+        for c in min_col..=max_col {
+            debug!("R: {} C: {}", r, c);
+            ans.push(from_digit(square_state[&Vector2d::with_val(r, c)].data as u32, 16).unwrap());
+        }
+        ans.push('\n');
+    }
+
+    ans.iter().join("")
+}
diff --git a/codejam_2008/src/y2008practice/c.rs b/codejam_2008/src/y2008practice/c.rs
index e69de29..8b13789 100644
--- a/codejam_2008/src/y2008practice/c.rs
+++ b/codejam_2008/src/y2008practice/c.rs
@@ -0,0 +1 @@
+
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index e69de29..8b13789 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -0,0 +1 @@
+
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index 475bc4b..61262af 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -1,9 +1,9 @@
 //use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
-use std::io::Write;
-use std::usize;
 use std::cmp::min;
 use std::cmp::Ordering;
+use std::io::Write;
+use std::usize;
 
 /*
 Scan line
@@ -41,13 +41,7 @@ pub fn solve_all_cases()
                 println!("Solving case {}", case_no);
 
                 let ans = solve(t, arrivals.as_slice(), departures.as_slice());
-                writeln!(
-                    buffer,
-                    "Case #{}: {} {}",
-                    case_no, ans[0], ans[1]
-
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {} {}", case_no, ans[0], ans[1]).unwrap();
             }
         },
     );
@@ -59,40 +53,48 @@ struct TrainEvent
     time: usize,
     num_train_change: i64,
 }
-impl Ord for TrainEvent {
-    fn cmp(&self, rhs: &TrainEvent) -> Ordering {
-        self.time.cmp(&rhs.time).then_with(|| rhs.num_train_change.cmp(&self.num_train_change))
+impl Ord for TrainEvent
+{
+    fn cmp(&self, rhs: &TrainEvent) -> Ordering
+    {
+        self.time
+            .cmp(&rhs.time)
+            .then_with(|| rhs.num_train_change.cmp(&self.num_train_change))
     }
 }
 
-impl PartialOrd for TrainEvent {
-    fn partial_cmp(&self, other: &TrainEvent) -> Option<Ordering> {
+impl PartialOrd for TrainEvent
+{
+    fn partial_cmp(&self, other: &TrainEvent) -> Option<Ordering>
+    {
         Some(self.cmp(other))
     }
 }
 
-
 fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
 {
     debug!("find_required_trains");
-	station_events.sort();
+    station_events.sort();
 
     //so as trains arrive (+1) they cannot affect the minimum
     let mut trains_min = 0;
     let mut trains = 0;
 
-	for evt in station_events.iter() {
-        debug!("Train event at time {}.  Change {}", evt.time, evt.num_train_change);
+    for evt in station_events.iter() {
+        debug!(
+            "Train event at time {}.  Change {}",
+            evt.time, evt.num_train_change
+        );
         trains += evt.num_train_change;
         trains_min = min(trains, trains_min);
         debug!("Trains now {}.  min {}", trains, trains_min);
     }
 
     debug!("Done find_required_trains {} ", trains_min.abs());
-	return trains_min.abs()
+    return trains_min.abs();
 }
 
-fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]]) -> [i64;2]
+fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]]) -> [i64; 2]
 {
     debug!("{:?}", a_to_b[0]);
 
@@ -120,5 +122,8 @@ fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]])
         });
     }
 
-    [ find_required_trains(&mut station_a_events) , find_required_trains(&mut station_b_events) ]
+    [
+        find_required_trains(&mut station_a_events),
+        find_required_trains(&mut station_b_events),
+    ]
 }
diff --git a/codejam_2008/src/y2008qual/c.rs b/codejam_2008/src/y2008qual/c.rs
index 412b7e3..823ac16 100644
--- a/codejam_2008/src/y2008qual/c.rs
+++ b/codejam_2008/src/y2008qual/c.rs
@@ -1,6 +1,6 @@
 use codejam::util::codejam::run_cases;
-use std::io::Write;
 use std::f64::consts::PI;
+use std::io::Write;
 
 /*
 Circle / slice area
@@ -15,46 +15,42 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-
                 let floats = reader.read_num_line();
 
                 println!("Solving case {}", case_no);
 
                 let ans = solve(floats[0], floats[1], floats[2], floats[3], floats[4]);
-                writeln!(
-                    buffer,
-                    "Case #{}: {}",
-                    case_no, ans
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, ans).unwrap();
             }
         },
     );
 }
 
-fn circle(x:f64, r:f64) -> f64 {
+fn circle(x: f64, r: f64) -> f64
+{
     (r.powi(2) - x.powi(2)).sqrt()
 }
 
-fn integral_circle(x:f64, r: f64) -> f64 {
-	let y = circle(x, r);
-	(	x * y + ( x / y ).atan() * r.powi(2) ) / 2.
+fn integral_circle(x: f64, r: f64) -> f64
+{
+    let y = circle(x, r);
+    (x * y + (x / y).atan() * r.powi(2)) / 2.
 }
 
-fn solve(fly_radius: f64, racket_radius : f64, t: f64, chord_radius: f64, gap_len:f64) -> f64
+fn solve(fly_radius: f64, racket_radius: f64, t: f64, chord_radius: f64, gap_len: f64) -> f64
 {
     /*
     dbg!( fly_radius );
-	dbg!( racket_radius);
-	dbg!( t) ; //Racket outer circle radius
-	dbg!( chord_radius);
-	dbg!( gap_len);
-	*/
+    dbg!( racket_radius);
+    dbg!( t) ; //Racket outer circle radius
+    dbg!( chord_radius);
+    dbg!( gap_len);
+    */
 
-	if gap_len < 2. * fly_radius {
+    if gap_len < 2. * fly_radius {
         return 1f64;
     }
-	if fly_radius > racket_radius - t {
+    if fly_radius > racket_radius - t {
         return 1f64;
     }
 
@@ -90,26 +86,25 @@ fn solve(fly_radius: f64, racket_radius : f64, t: f64, chord_radius: f64, gap_le
 
     //dbg!(x1);
 
-    let num_cols = ( (x_stop-x1) / square_length).ceil() as u64;
+    let num_cols = ((x_stop - x1) / square_length).ceil() as u64;
 
     //Are that a fly can get through
     let regular_square_area = next_position2_inc * next_position2_inc;
 
     assert!(x1 <= x_stop);
 
-    for col in 0..num_cols
-    {
+    for col in 0..num_cols {
         let mut x2 = x1 + next_position2_inc;
         if col == num_cols - 1 && x_stop < x2 {
             x2 = x_stop
         }
 
         let mut y1 = first_position;
-        let y_stop = circle(x1, inner_radius );
+        let y_stop = circle(x1, inner_radius);
 
         let y_arc_intersection = circle(x2, inner_radius);
 
-        let num_squares = ( (y_stop-y1) / square_length).ceil() as u64;
+        let num_squares = ((y_stop - y1) / square_length).ceil() as u64;
 
         //The real time saver.  We need to know the first y2 that is < y_arc_intersection
         //
@@ -117,35 +112,43 @@ fn solve(fly_radius: f64, racket_radius : f64, t: f64, chord_radius: f64, gap_le
         // square_length * lowest_arc_intersection_square_num < y_arc_intersection - y2_0
         // lowest_arc_intersection_square_num > (y_arc_intersection - y2_0) / square_length (dividing switches comparison)
         // lowest_arc_intersection_square_num == ceil ( ... )
-        let lowest_arc_intersection_square_num = ( ( (y_arc_intersection - (y1 + next_position2_inc) ) / square_length).ceil() ) as u64;
+        let lowest_arc_intersection_square_num =
+            (((y_arc_intersection - (y1 + next_position2_inc)) / square_length).ceil()) as u64;
 
         //Catch up y1
-        y1 += lowest_arc_intersection_square_num as f64 * square_length ;
+        y1 += lowest_arc_intersection_square_num as f64 * square_length;
 
         //Init missed area with all the regular squares
         let mut slice_miss_area = (lowest_arc_intersection_square_num as f64) * regular_square_area;
 
-        for square_num in lowest_arc_intersection_square_num..num_squares
-        {
+        for square_num in lowest_arc_intersection_square_num..num_squares {
             let mut y2 = y1 + next_position2_inc;
             if square_num == num_squares - 1 && y_stop < y2 {
                 y2 = y_stop;
             }
-            debug!( "  y1:[{}] y2:[{}]", y1, y2);
+            debug!("  y1:[{}] y2:[{}]", y1, y2);
 
             //This means an arc is going through the square
             let mut x1_arc_intersection = circle(y2, inner_radius);
             let mut x2_arc_intersection = circle(y1, inner_radius);
 
-            debug!( "  X1 arc {} x2 arc {}", x1_arc_intersection, x2_arc_intersection);
+            debug!(
+                "  X1 arc {} x2 arc {}",
+                x1_arc_intersection, x2_arc_intersection
+            );
 
             //take care of the curve
-             if x1 > x1_arc_intersection { x1_arc_intersection=x1 }
-             if x2 < x2_arc_intersection { x2_arc_intersection =x2 }
+            if x1 > x1_arc_intersection {
+                x1_arc_intersection = x1
+            }
+            if x2 < x2_arc_intersection {
+                x2_arc_intersection = x2
+            }
 
-            slice_miss_area +=  (y2-y1) * (x2_arc_intersection-x1) ;
+            slice_miss_area += (y2 - y1) * (x2_arc_intersection - x1);
 
-            let area_under_curve = integral_circle(x2_arc_intersection, inner_radius) - integral_circle(x1_arc_intersection, inner_radius);
+            let area_under_curve = integral_circle(x2_arc_intersection, inner_radius)
+                - integral_circle(x1_arc_intersection, inner_radius);
             let rect_area = y2 * (x2_arc_intersection - x1_arc_intersection);
             let arc_area = rect_area - area_under_curve;
 

From 1b95fa0832870beaf49520a5b911ca2cc9e08509 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 15 Feb 2019 21:41:50 +0100
Subject: [PATCH 012/122] c large

---
 codejam_2008/src/main.rs                      |   3 +-
 .../src/y2008practice/C-large-practice.out    | 100 ++++++++++
 .../src/y2008practice/C-small-practice.out    | 100 ++++++++++
 codejam_2008/src/y2008practice/b.rs           |   3 +-
 codejam_2008/src/y2008practice/c.rs           | 187 ++++++++++++++++++
 5 files changed, 391 insertions(+), 2 deletions(-)
 create mode 100644 codejam_2008/src/y2008practice/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008practice/C-small-practice.out

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 70d1f93..72fd71c 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -24,6 +24,7 @@ pub fn run_y2008_round_practice()
     //https://code.google.com/codejam/contest/32003/dashboard
 
     y2008practice::a::solve_all_cases();
+    y2008practice::b::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -50,5 +51,5 @@ fn main()
 {
     init_log();
 
-    y2008practice::b::solve_all_cases();
+    y2008practice::c::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008practice/C-large-practice.out b/codejam_2008/src/y2008practice/C-large-practice.out
new file mode 100644
index 0000000..edc8fc2
--- /dev/null
+++ b/codejam_2008/src/y2008practice/C-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 7 2 1
+Case #2: 25 3 2
+Case #3: 1 1 1
+Case #4: -1 31 2
+Case #5: -1 30 2
+Case #6: -1 27 3
+Case #7: -1 31 2
+Case #8: -1 29 2
+Case #9: -1 31 2
+Case #10: -1 30 2
+Case #11: -1 30 3
+Case #12: -1 25 1
+Case #13: -1 30 2
+Case #14: -1 31 2
+Case #15: -1 31 2
+Case #16: -1 30 10
+Case #17: 129 4 2
+Case #18: -1 27 2
+Case #19: -1 30 2
+Case #20: -1 41 6
+Case #21: -1 31 2
+Case #22: -1 30 2
+Case #23: -1 31 2
+Case #24: -1 29 3
+Case #25: -1 31 3
+Case #26: -1 30 2
+Case #27: -1 18 3
+Case #28: 2 1 1
+Case #29: -1 31 2
+Case #30: -1 29 2
+Case #31: 129 9 3
+Case #32: 15 3 2
+Case #33: 1 1 1
+Case #34: 1815 11 6
+Case #35: 2097150 20 10
+Case #36: 255 7 3
+Case #37: 45 7 2
+Case #38: 10902 20 4
+Case #39: 1 1 1
+Case #40: 2 2 1
+Case #41: 7 3 2
+Case #42: 92 5 2
+Case #43: 10 3 2
+Case #44: 4 2 1
+Case #45: 162 7 3
+Case #46: 8190 13 8
+Case #47: 36050 57 3
+Case #48: 121669 15 6
+Case #49: 25 5 3
+Case #50: 3 2 2
+Case #51: 10 1 1
+Case #52: 1 1 1
+Case #53: 134137 64 3
+Case #54: 2 2 1
+Case #55: 1 1 1
+Case #56: 1115838893 78 4
+Case #57: 126 7 5
+Case #58: 5 4 1
+Case #59: 1 1 1
+Case #60: 967 9 5
+Case #61: 465 7 3
+Case #62: 2146540998 30 15
+Case #63: 8 5 1
+Case #64: 55 4 1
+Case #65: 614429671 29 13
+Case #66: 14 2 1
+Case #67: 98 3 1
+Case #68: 98 7 4
+Case #69: 1072973611 29 14
+Case #70: 1 1 1
+Case #71: 8 1 1
+Case #72: 22151 14 2
+Case #73: 3 1 1
+Case #74: 21 5 2
+Case #75: 4094 9 4
+Case #76: 637 9 4
+Case #77: 263644132 24 10
+Case #78: 1561 20 3
+Case #79: 847 9 4
+Case #80: 10 2 1
+Case #81: 63 6 3
+Case #82: 56 4 2
+Case #83: 31 4 2
+Case #84: 7813 10 4
+Case #85: 1023 9 4
+Case #86: 1 1 1
+Case #87: 175 10 3
+Case #88: 1752465359 41 9
+Case #89: 510 8 4
+Case #90: 1 1 1
+Case #91: 31 3 2
+Case #92: 21 6 2
+Case #93: 2 2 1
+Case #94: 2136022698 30 15
+Case #95: 1 1 1
+Case #96: 1 1 1
+Case #97: 3 1 1
+Case #98: 637 10 5
+Case #99: 63410952 146 4
+Case #100: 1 1 1
diff --git a/codejam_2008/src/y2008practice/C-small-practice.out b/codejam_2008/src/y2008practice/C-small-practice.out
new file mode 100644
index 0000000..9da89d4
--- /dev/null
+++ b/codejam_2008/src/y2008practice/C-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 7 2 1
+Case #2: 25 3 2
+Case #3: 2 2 1
+Case #4: 351914193 6 1
+Case #5: -1 7 2
+Case #6: -1 6 1
+Case #7: 313911 1 1
+Case #8: 408414531 7 2
+Case #9: -1 7 2
+Case #10: -1 7 2
+Case #11: 507623 5 2
+Case #12: -1 6 1
+Case #13: -1 6 1
+Case #14: -1 5 1
+Case #15: 1073709892 7 2
+Case #16: -1 6 1
+Case #17: 971711 7 2
+Case #18: 94 24 1
+Case #19: -1 7 1
+Case #20: 63 7 3
+Case #21: -1 6 1
+Case #22: -1 7 1
+Case #23: -1 6 2
+Case #24: 16383 6 2
+Case #25: 39202 7 2
+Case #26: -1 7 1
+Case #27: -1 7 2
+Case #28: 64441699 5 1
+Case #29: 25 3 2
+Case #30: 45 16 1
+Case #31: 1235993 6 1
+Case #32: -1 6 1
+Case #33: -1 7 2
+Case #34: -1 7 2
+Case #35: -1 7 2
+Case #36: 133820133 6 2
+Case #37: -1 6 1
+Case #38: -1 6 1
+Case #39: -1 5 1
+Case #40: 2 2 1
+Case #41: -1 6 1
+Case #42: 162 2 1
+Case #43: 16587164 6 2
+Case #44: -1 6 1
+Case #45: 131070 7 2
+Case #46: 33199095 2 1
+Case #47: -1 6 1
+Case #48: -1 7 1
+Case #49: 6884 6 2
+Case #50: 7036529 6 2
+Case #51: 56 1 1
+Case #52: 8731847 4 1
+Case #53: 10 4 2
+Case #54: 4194049 6 2
+Case #55: 3 1 1
+Case #56: 1980 7 3
+Case #57: 3 2 1
+Case #58: 536843070 6 2
+Case #59: 89845 7 2
+Case #60: 7 3 2
+Case #61: 14 1 1
+Case #62: 1012 7 3
+Case #63: 3 3 1
+Case #64: 1070937811 7 2
+Case #65: 135142795 6 2
+Case #66: 4094 7 2
+Case #67: 2136022698 5 1
+Case #68: 32191 6 2
+Case #69: 8386559 6 2
+Case #70: 793 5 2
+Case #71: 12 4 1
+Case #72: 15275 7 2
+Case #73: 1023 6 2
+Case #74: 511 7 3
+Case #75: 231 8 3
+Case #76: 2621111 5 1
+Case #77: 1012 7 3
+Case #78: 2415 13 2
+Case #79: 8388606 6 2
+Case #80: 4656 10 1
+Case #81: 32828225 7 2
+Case #82: 8 4 1
+Case #83: 28 9 1
+Case #84: 36519555 7 2
+Case #85: 253 10 2
+Case #86: 11576915 5 2
+Case #87: 33308925 6 2
+Case #88: 3014470023 7 2
+Case #89: 230963 6 2
+Case #90: 15 5 2
+Case #91: 2449867 6 2
+Case #92: 1485 5 2
+Case #93: 7546 8 2
+Case #94: 44 35 1
+Case #95: 726205 4 1
+Case #96: 6 3 1
+Case #97: 6 3 2
+Case #98: 2921370387 6 1
+Case #99: 2676765 7 1
+Case #100: 194129626 7 2
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
index 04ad8b9..48748c4 100644
--- a/codejam_2008/src/y2008practice/b.rs
+++ b/codejam_2008/src/y2008practice/b.rs
@@ -12,7 +12,8 @@ use std::i64;
 use std::io::Write;
 
 /*
-Change of base
+Grid
+Maze finding
 */
 pub fn solve_all_cases()
 {
diff --git a/codejam_2008/src/y2008practice/c.rs b/codejam_2008/src/y2008practice/c.rs
index 8b13789..0893862 100644
--- a/codejam_2008/src/y2008practice/c.rs
+++ b/codejam_2008/src/y2008practice/c.rs
@@ -1 +1,188 @@
+use codejam::util::codejam::run_cases;
+//use itertools::Itertools;
+use std::i64;
+use std::io::Write;
 
+/*
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008practice",
+        |reader, buffer| {
+
+            let mut fcomp = Fcomp::new();
+
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (f,d,b) = reader.read_tuple_3();
+
+
+                println!("Solving case {}", case_no);
+
+                let f_max = if let Some(f) = fcomp.find_f_max(d,b) {
+                    f as i64
+                } else {
+                    -1
+                };
+                let d_min = fcomp.find_d_min(f,b);
+                let b_min = fcomp.find_b_min(f,d);
+
+                writeln!(buffer, "Case #{}: {} {} {}", case_no, f_max, d_min, b_min).unwrap();
+            }
+        },
+    );
+}
+
+
+struct Fcomp
+{
+    cache: Vec<Vec<Option<u64>>>,
+}
+const B_LIMIT: u64 = 1000;
+const D_LIMIT: u64 = 1000;
+const F_MAX_LIMIT: u64 = 1 << 32; //  4294967296;
+
+impl Fcomp
+{
+
+    fn new() -> Self
+    {
+        Fcomp {
+            cache: vec![vec![None; B_LIMIT as usize]; D_LIMIT as usize],
+        }
+    }
+
+    fn find_f_max(&mut self, d: u64, b: u64) -> Option<u64>
+    {
+        let mut ret_val: Option<u64> =
+            if d < D_LIMIT && b < B_LIMIT && self.cache[d as usize][b as usize].is_some() {
+                self.cache[d as usize][b as usize]
+            } else if b == 1 {
+                //#breaking 1 egg means we can figure out d levels
+                Some(d)
+            } else if b == 2 {
+                //#Happens to be the sum formula
+                Some((d * (d + 1)) / 2)
+            } else if b > 2 && d >= 2954 {
+                None
+            } else if b > 3 && d >= 568 {
+                None
+            } else if b > 4 && d >= 221 {
+                None
+            } else if b >= 6 && d > 122 {
+                None
+            } else if b > 16 && d >= 33 {
+                None
+            }
+             else if b == d - 1 {
+                //#Arrange f(d,b) in a downward triangle
+                Some(2u64.pow( (d) as u32) - 2)
+            } else if d <= b {
+                Some(2u64.pow( (d) as u32) - 1)
+            }
+            else {
+                let lhs = self.find_f_max(d - 1, b - 1);
+                let rhs = self.find_f_max(d - 1, b);
+                if lhs.is_none() || rhs.is_none() {
+                    None
+                } else {
+                    Some(1 + lhs.unwrap() + rhs.unwrap())
+                }
+            };
+
+        if !ret_val.is_none() && ret_val.unwrap()  > F_MAX_LIMIT {
+            ret_val = None;
+        }
+
+        if d < D_LIMIT && b < B_LIMIT {
+            //if self.cache[d][b].is_none() {
+                self.cache[d as usize][b as usize] = ret_val;
+            //}
+        }
+        ret_val
+    }
+
+    fn find_d_min(&mut self, f: u64,  b: u64) -> u64
+    {
+        let mut d = 1;
+
+        while let Some(f_check) = self.find_f_max(d, b) {
+            if f_check >= f {
+                break;
+            }
+            d += 1;
+        }
+
+        d
+    }
+
+    fn find_b_min(&mut self, f: u64, d: u64) -> u64
+    {
+        let mut b = 1;
+
+        while let Some(f_check) = self.find_f_max(d, b) {
+            if f_check >= f {
+                break;
+            }
+            b += 1;
+        }
+
+        b
+    }
+}
+
+#[cfg(test)]
+mod tests
+{
+    use crate::y2008practice::c::Fcomp;
+    use crate::y2008practice::c::F_MAX_LIMIT;
+
+    #[test]
+    fn tests()
+    {
+        test_stuff(3, 3, 3, Some(7), 2, 1);
+        test_stuff(7, 5, 3, Some(25), 3, 2);
+        test_stuff(1, 122, 6, Some(4_258_490_215), 1, 1);
+        test_stuff(1, 82, 7, Some(4_181_044_987), 1, 1);
+        test_stuff(1, 83, 7, None, 1, 1);
+        test_stuff(1, 82, 8, None, 1, 1);
+        test_stuff(1, 220, 5, Some(4_199_307_189), 1, 1);
+        test_stuff(1, 221, 5, None, 1, 1);
+        test_stuff(1, 220, 6, None, 1, 1);
+    }
+
+    #[test]
+
+    fn test_max()
+    {
+        let mut f_comp = Fcomp::new();
+
+        for d in 1..100 {
+            println!("D is {}",d);
+            for b in 1..100 {
+                assert!(
+                    f_comp.find_f_max(d, b).unwrap_or(0) < F_MAX_LIMIT,
+
+                );
+            }
+        }
+    }
+
+    fn test_stuff(f: u64, d: u64, b: u64, ans_f_max: Option<u64>, ans_d_min: u64, ans_b_min: u64)
+    {
+        let mut fcomp = Fcomp::new();
+
+        let (fmax, dmin, bmin) = (
+            fcomp.find_f_max(d, b),
+            fcomp.find_d_min(f,  b),
+            fcomp.find_b_min(f, d),
+        );
+
+        assert_eq!(fmax, ans_f_max);
+        assert_eq!(dmin, ans_d_min);
+        assert_eq!(bmin, ans_b_min);
+    }
+}

From c3ffcdae66abb1fcb5c713e77d239bb58cf97f2d Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 16 Feb 2019 12:12:20 -0300
Subject: [PATCH 013/122] d

---
 codejam/src/util/bitvec64.rs        |   5 +
 codejam/src/util/vector_2d.rs       |  12 +
 codejam_2008/src/main.rs            |   3 +-
 codejam_2008/src/y2008practice/c.rs |  59 ++---
 codejam_2008/src/y2008practice/d.rs | 338 ++++++++++++++++++++++++++++
 5 files changed, 389 insertions(+), 28 deletions(-)

diff --git a/codejam/src/util/bitvec64.rs b/codejam/src/util/bitvec64.rs
index 733a96f..aa9a373 100644
--- a/codejam/src/util/bitvec64.rs
+++ b/codejam/src/util/bitvec64.rs
@@ -30,6 +30,11 @@ impl BitVec64
         BitVec64 { data: 0 }
     }
 
+    pub fn with_val( data: usize ) -> BitVec64
+    {
+        BitVec64 { data }
+    }
+
     pub fn pop_count(&self) -> u32
     {
         self.data.count_ones()
diff --git a/codejam/src/util/vector_2d.rs b/codejam/src/util/vector_2d.rs
index ccf9a7e..29f240b 100644
--- a/codejam/src/util/vector_2d.rs
+++ b/codejam/src/util/vector_2d.rs
@@ -142,6 +142,18 @@ impl<T> Vector2d<T> where T: PartialOrd + Sub<Output=T> + Add<Output=T> + Copy
     }
 }
 
+impl<T> Vector2d<T> where T: PartialOrd + Sub<Output=T> + Add<Output=T> + Copy
++ Mul<Output=T> + NumCast
+{
+    pub fn pyth_distance(&self, rhs: &Self) -> f64
+    {
+        let n = (self.data[0] - rhs.data[0]) * (self.data[0] - rhs.data[0]) +
+            (self.data[1] - rhs.data[1]) * (self.data[1] - rhs.data[1]);
+        cast::<T, f64>(n).unwrap().sqrt()
+    }
+}
+
+
 impl<T> Vector2d<T> where T: num_traits::cast::NumCast + Copy
 {
     pub fn convert<M: NumCast>(&self) -> Vector2d<M>
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 72fd71c..7245973 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -25,6 +25,7 @@ pub fn run_y2008_round_practice()
 
     y2008practice::a::solve_all_cases();
     y2008practice::b::solve_all_cases();
+       y2008practice::c::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -51,5 +52,5 @@ fn main()
 {
     init_log();
 
-    y2008practice::c::solve_all_cases();
+    y2008practice::d::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008practice/c.rs b/codejam_2008/src/y2008practice/c.rs
index 0893862..db0cc02 100644
--- a/codejam_2008/src/y2008practice/c.rs
+++ b/codejam_2008/src/y2008practice/c.rs
@@ -4,6 +4,7 @@ use std::i64;
 use std::io::Write;
 
 /*
+Dynamic programming
 */
 pub fn solve_all_cases()
 {
@@ -11,24 +12,22 @@ pub fn solve_all_cases()
         &["C-small-practice", "C-large-practice"],
         "y2008practice",
         |reader, buffer| {
-
             let mut fcomp = Fcomp::new();
 
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (f,d,b) = reader.read_tuple_3();
-
+                let (f, d, b) = reader.read_tuple_3();
 
                 println!("Solving case {}", case_no);
 
-                let f_max = if let Some(f) = fcomp.find_f_max(d,b) {
+                let f_max = if let Some(f) = fcomp.find_f_max(d, b) {
                     f as i64
                 } else {
                     -1
                 };
-                let d_min = fcomp.find_d_min(f,b);
-                let b_min = fcomp.find_b_min(f,d);
+                let d_min = fcomp.find_d_min(f, b);
+                let b_min = fcomp.find_b_min(f, d);
 
                 writeln!(buffer, "Case #{}: {} {} {}", case_no, f_max, d_min, b_min).unwrap();
             }
@@ -36,7 +35,6 @@ pub fn solve_all_cases()
     );
 }
 
-
 struct Fcomp
 {
     cache: Vec<Vec<Option<u64>>>,
@@ -47,7 +45,6 @@ const F_MAX_LIMIT: u64 = 1 << 32; //  4294967296;
 
 impl Fcomp
 {
-
     fn new() -> Self
     {
         Fcomp {
@@ -64,7 +61,7 @@ impl Fcomp
                 //#breaking 1 egg means we can figure out d levels
                 Some(d)
             } else if b == 2 {
-                //#Happens to be the sum formula
+                //#Happens to be the sum formula, since you can organize it like 5(if break) + 4 + 3 + 2 + 1
                 Some((d * (d + 1)) / 2)
             } else if b > 2 && d >= 2954 {
                 None
@@ -76,14 +73,9 @@ impl Fcomp
                 None
             } else if b > 16 && d >= 33 {
                 None
-            }
-             else if b == d - 1 {
-                //#Arrange f(d,b) in a downward triangle
-                Some(2u64.pow( (d) as u32) - 2)
             } else if d <= b {
-                Some(2u64.pow( (d) as u32) - 1)
-            }
-            else {
+                Some(2u64.pow((d) as u32) - 1)
+            } else {
                 let lhs = self.find_f_max(d - 1, b - 1);
                 let rhs = self.find_f_max(d - 1, b);
                 if lhs.is_none() || rhs.is_none() {
@@ -93,19 +85,19 @@ impl Fcomp
                 }
             };
 
-        if !ret_val.is_none() && ret_val.unwrap()  > F_MAX_LIMIT {
+        if !ret_val.is_none() && ret_val.unwrap() > F_MAX_LIMIT {
             ret_val = None;
         }
 
         if d < D_LIMIT && b < B_LIMIT {
             //if self.cache[d][b].is_none() {
-                self.cache[d as usize][b as usize] = ret_val;
+            self.cache[d as usize][b as usize] = ret_val;
             //}
         }
         ret_val
     }
 
-    fn find_d_min(&mut self, f: u64,  b: u64) -> u64
+    fn find_d_min(&mut self, f: u64, b: u64) -> u64
     {
         let mut d = 1;
 
@@ -140,9 +132,25 @@ mod tests
     use crate::y2008practice::c::Fcomp;
     use crate::y2008practice::c::F_MAX_LIMIT;
 
+
+    #[test]
+    fn test_f_max()
+    {
+        let mut f_comp = Fcomp::new();
+
+        assert_eq!(Some(14), f_comp.find_f_max(4, 3));
+        assert_eq!(Some(7), f_comp.find_f_max(3, 3));
+        assert_eq!(Some(6), f_comp.find_f_max(3, 2));
+
+        assert_eq!(Some(3), f_comp.find_f_max(3, 1));
+
+
+    }
+
     #[test]
     fn tests()
     {
+
         test_stuff(3, 3, 3, Some(7), 2, 1);
         test_stuff(7, 5, 3, Some(25), 3, 2);
         test_stuff(1, 122, 6, Some(4_258_490_215), 1, 1);
@@ -160,13 +168,10 @@ mod tests
     {
         let mut f_comp = Fcomp::new();
 
-        for d in 1..100 {
-            println!("D is {}",d);
-            for b in 1..100 {
-                assert!(
-                    f_comp.find_f_max(d, b).unwrap_or(0) < F_MAX_LIMIT,
-
-                );
+        for d in 1..10 {
+            println!("D is {}", d);
+            for b in 1..10 {
+                assert!(f_comp.find_f_max(d, b).unwrap_or(0) < F_MAX_LIMIT,);
             }
         }
     }
@@ -177,7 +182,7 @@ mod tests
 
         let (fmax, dmin, bmin) = (
             fcomp.find_f_max(d, b),
-            fcomp.find_d_min(f,  b),
+            fcomp.find_d_min(f, b),
             fcomp.find_b_min(f, d),
         );
 
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index 8b13789..0f6d85c 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -1 +1,339 @@
 
+use codejam::util::codejam::run_cases;
+//use itertools::Itertools;
+
+use std::io::Write;
+use codejam::util::bitvec64::BitVec64;
+use std::collections::HashMap;
+use codejam::util::vector_2d::Vector2d;
+use std::cmp::Ordering;
+use std::collections::BinaryHeap;
+
+/*
+Dynamic programming
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["D-small-practice",
+            //"D-large-practice"
+            ],
+        "y2008practice",
+        |reader, buffer| {
+
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (ni, ns, pg) = reader.read_tuple_3();
+
+                let mut items = reader.read_string_line();
+                let mut items_map:HashMap<String,usize> = HashMap::new();
+                assert_eq!(ni, items.len());
+                let mut is_perishable = BitVec64::new();
+
+                for i in items.iter_mut()
+                {
+                    if i.chars().last().unwrap() == '!' {
+                        assert_eq!('!', i.remove(i.len() - 1));
+                        is_perishable.set( items_map.len(), true);
+                    }
+
+                    items_map.insert(i.clone(), items_map.len());
+                }
+
+                let mut stores: Vec<Store> = (0..ns).map( |_| {
+                    let s = reader.read_string();
+                    Store::new(&s, ni, &items_map)
+                }).collect();
+
+                stores.insert(0, Store::new(&"0 0".to_string(), ni, &items_map));
+
+                let mut memo = Memo::new(stores.len(), ni);
+
+                if case_no != 1 {
+                    //continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                let ans = memo.doit( pg as f64, &is_perishable, &mut stores);
+
+                writeln!(buffer, "Case #{}: {:.7}", case_no, ans).unwrap();
+            }
+        },
+    );
+}
+
+
+struct Stock {
+
+spent: f64,
+//basket count
+bct: u32,
+loc: usize,
+//from location?
+cf: usize,
+mask: BitVec64
+}
+
+impl Eq for Stock {
+
+}
+impl PartialEq for Stock {
+    fn eq(&self, rhs: &Stock) -> bool {
+        self.spent == rhs.spent &&
+            self.mask.data == rhs.mask.data &&
+            self.cf == rhs.cf
+
+    }
+}
+
+impl Stock {
+    fn new(spent: f64, mask: BitVec64, loc: usize) -> Self
+    {
+        Stock {
+            spent,
+            mask,
+            loc,
+            cf: 0,
+            bct: mask.pop_count()
+        }
+    }
+    fn new2(spent: f64, mask: BitVec64, loc: usize, b: u32, cf: usize) -> Self {
+        Stock {
+            spent,
+            mask,
+            loc,
+            cf,
+            bct: b
+        }
+    }
+}
+
+// The priority queue depends on `Ord`.
+// Explicitly implement the trait so the queue becomes a min-heap
+// instead of a max-heap.
+impl Ord for Stock {
+    fn cmp(&self, rhs: &Stock) -> Ordering {
+        rhs.spent.partial_cmp(&self.spent).unwrap().then_with(||
+        rhs.loc.cmp(&self.loc)
+        ).then_with( || rhs.mask.data.cmp(&self.mask.data))
+    }
+}
+
+// `PartialOrd` needs to be implemented as well.
+impl PartialOrd for Stock {
+    fn partial_cmp(&self, rhs: &Stock) -> Option<Ordering> {
+        Some(self.cmp(rhs))
+    }
+}
+
+struct Store {
+    x: i32,
+    y: i32,
+    //prices[item index] = price
+    prices: Vec<i32>,
+    //Which items are in stock stk[0] = item index1, stk[1] = item index 2
+    stk: Vec<usize>
+}
+
+impl Store {
+    fn new(s: &String, n: usize, items: &HashMap<String, usize>) -> Self
+    {
+        let mut prices = vec![-1; n];
+        let st: Vec<&str>  = s.split(|c| c == ' ' || c == ':' || c == '\n').collect();
+	    let x : i32 = st[0].parse().unwrap();
+	    let y: i32 = st[1].parse().unwrap();
+	    let mut stk = Vec::new();
+	    //let mut j = 0;
+	    for chunk in st.chunks_exact(2).skip(1) {
+            let item_str = chunk[0];
+            let price = chunk[1];
+            let item_idx = items[item_str];
+            prices[item_idx] = price.parse().unwrap();
+            stk.push(item_idx);
+        }
+
+        Store { x, y, prices, stk}
+
+	}
+
+    fn dist(&self, xp: i32, yp: i32) -> f64 { return Vector2d::with_val(self.x, self.y).pyth_distance( &Vector2d::with_val(xp, yp))}
+
+}
+
+const EPS: f64 = 1e-10;
+const INVALID_COST:f64 = 1e100;
+
+struct Memo
+{
+    //bcost[store][binary mask of items] = cost
+    bcost: Vec<Vec<f64>>
+}
+
+impl Memo
+{
+    fn new(ns: usize, ni: usize) -> Self {
+        Memo {
+            bcost: vec![vec![INVALID_COST; 1<<ni]; ns]
+
+        }
+    }
+    fn doit(&mut self, gp: f64, per: &BitVec64, sts: &mut Vec < Store > ) -> f64 {
+        let ni = sts[0].prices.len();
+        //let ns = sts.len();
+
+	    let all = (1<<ni)-1;
+
+
+        let mut ub = 0.0;
+        //looks like the cheapest prices
+        let mut chp = vec![INVALID_COST; ni];
+
+        //0 is home
+        for  store in sts.iter().skip(1) {
+            //gas cost
+            let gc = store.dist(0, 0)*2.*gp;
+
+            for &item_idx in store.stk.iter()  {
+                let tc = gc + store.prices[item_idx] as f64;
+                if tc < chp[item_idx] {
+                    chp[item_idx] = tc;
+                }
+            }
+		}
+
+        ub += chp.iter().sum::<f64>();
+
+        assert!(ub < INVALID_COST);
+
+        self.bcost[0][all] = ub;
+
+        //Remove items that are definitely not optimal
+        for  store in sts.iter_mut().skip(1) {
+
+            let keep:Vec<bool> = store.stk.iter().map( |&item_idx|
+            {
+                store.prices[item_idx] as f64 <= chp[item_idx]
+            }).collect();
+
+            for (j, k) in keep.iter().enumerate().rev() {
+                if !k {
+                    store.stk.remove(j);
+                }
+            }
+/*
+            store.stk.retain(|&item_idx|
+                store.prices[item_idx] as f64 <= chp[item_idx]
+            );
+*/
+		}
+
+
+        self.bcost[0][0] = 0.0;
+        let mut pq = BinaryHeap::new();
+
+        pq.push(Stock::new2(0.0, BitVec64::new(), 0, 0, sts.len()));
+
+        while let Some(s) = pq.pop() {
+
+            debug!("Examining Stock( Spent={},Mask={:0>width$b},Location={},Basket Count={},Cf={})",
+                   s.spent, s.mask.data, s.loc, s.bct, s.cf,
+            width=ni
+            );
+
+            if self.bcost[0][all] <= s.spent {
+                continue;
+            }
+            if self.bcost[s.loc][s.mask.data] < s.spent {
+                continue;
+            }
+            if s.loc > 0 {
+                let store = &sts[s.loc];
+                let mut stk: Vec<usize> = Vec::new();
+                for &item_index in store.stk.iter() {
+                    if !s.mask.get(item_index) {
+                        stk.push(item_index);
+                    }
+                }
+
+                if stk.is_empty() {
+                    continue;
+                }
+                let n = 1<<stk.len();
+                //mask
+                for m in 1..n  {
+                    let mut cost = s.spent;
+                    //new mask
+                    let mut nm = s.mask;
+                    //perishable count
+                    let mut pr = 0;
+                    let mut nct = s.bct;
+                    let mask = BitVec64::with_val(m);
+
+                    for (i, &item_index) in stk.iter().enumerate() {
+                        if !mask.get(i) {
+                            continue;
+                        }
+
+                        cost += store.prices[item_index] as f64;
+
+                        nm.set(item_index, true);
+                        nct += 1;
+                        if per.get(item_index) {
+                            pr += 1;
+                        }
+                    }
+
+                    if self.bcost[s.loc][nm.data] < cost+EPS {
+                        continue;
+                    }
+
+                    if pr > 0 {
+                        let gc = store.dist(0,0) * gp + cost;
+
+                        if self.bcost[0][nm.data] > gc+EPS {
+                            self.bcost[0][nm.data] = gc;
+                            pq.push(Stock::new2(gc, nm, 0, nct, s.loc));
+                            debug!(" Push Stock({},{:b},{},{},{})\n", gc, nm.data, 0, nct, s.loc);
+                        }
+                    } else {
+                        self.bcost[s.loc][nm.data] = cost;
+                        for (i, other_store) in sts.iter().enumerate() {
+                            if s.loc == i {
+                                continue;
+                            }
+                            let gc = other_store.dist(store.x, store.y) * gp + cost;
+
+                            if self.bcost[i][nm.data] > gc+EPS {
+                                self.bcost[i][nm.data] = gc;
+                                pq.push(Stock::new2(gc, nm,
+                                    i, nct, s.loc));
+                                debug!(" Push Stock({},{},{},{},{})\n", gc, nm.data, i, nct, s.loc);
+                            }
+                        }
+                    }
+                }
+            } else {
+                for (i,store) in sts.iter().enumerate().skip(1) {
+                    let gc = store.dist(0,0) *gp + s.spent;
+
+                    if self.bcost[i][s.mask.data] > gc+EPS {
+                        self.bcost[i][s.mask.data] = gc;
+                        pq.push(Stock::new2(gc, s.mask, i, s.bct, 0));
+                        debug!(" Push Stock({},{},{},{},{})\n", gc, s.mask.data, i, s.bct, 0);
+                    }
+                }
+            }
+        }
+
+
+	    self.bcost[0][all]
+    }
+}
+
+#[cfg(test)]
+mod tests
+{
+
+}

From ac18392ff05ee96750ac14f5bb7b95d8a5ac13b2 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 16 Feb 2019 12:16:26 -0300
Subject: [PATCH 014/122] d large

---
 codejam_2008/src/main.rs                      |   2 +-
 .../src/y2008practice/D-large-practice.out    |  20 ++
 .../src/y2008practice/D-small-practice.out    | 100 ++++++++
 codejam_2008/src/y2008practice/c.rs           |   4 -
 codejam_2008/src/y2008practice/d.rs           | 223 +++++++++---------
 5 files changed, 237 insertions(+), 112 deletions(-)
 create mode 100644 codejam_2008/src/y2008practice/D-large-practice.out
 create mode 100644 codejam_2008/src/y2008practice/D-small-practice.out

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 7245973..ca907a2 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -25,7 +25,7 @@ pub fn run_y2008_round_practice()
 
     y2008practice::a::solve_all_cases();
     y2008practice::b::solve_all_cases();
-       y2008practice::c::solve_all_cases();
+    y2008practice::c::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
diff --git a/codejam_2008/src/y2008practice/D-large-practice.out b/codejam_2008/src/y2008practice/D-large-practice.out
new file mode 100644
index 0000000..d576303
--- /dev/null
+++ b/codejam_2008/src/y2008practice/D-large-practice.out
@@ -0,0 +1,20 @@
+Case #1: 8288.9967217
+Case #2: 5500.1345321
+Case #3: 385.0000000
+Case #4: 2.0000000
+Case #5: 2081.5270294
+Case #6: 114390.3568783
+Case #7: 6177.6068015
+Case #8: 918.0000000
+Case #9: 564.0000000
+Case #10: 612.0000000
+Case #11: 948.6192535
+Case #12: 431034.5739236
+Case #13: 155.0000000
+Case #14: 8097.0261447
+Case #15: 854.0000000
+Case #16: 2660.0000000
+Case #17: 1886.4991640
+Case #18: 5002.4111264
+Case #19: 264.0000000
+Case #20: 5910.7879620
diff --git a/codejam_2008/src/y2008practice/D-small-practice.out b/codejam_2008/src/y2008practice/D-small-practice.out
new file mode 100644
index 0000000..ef30c14
--- /dev/null
+++ b/codejam_2008/src/y2008practice/D-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 988.0000000
+Case #2: 2563.0000000
+Case #3: 3080.8335908
+Case #4: 5454.0824588
+Case #5: 533.0000000
+Case #6: 507321.2288704
+Case #7: 1652387.9742385
+Case #8: 752.0000000
+Case #9: 926067.2754374
+Case #10: 1320381.7355783
+Case #11: 171.0000000
+Case #12: 254730.7211878
+Case #13: 49.0000000
+Case #14: 758569.4871833
+Case #15: 103.0000000
+Case #16: 1478192.8737711
+Case #17: 1232361.4016053
+Case #18: 44853.7749022
+Case #19: 1950.1161912
+Case #20: 634.0000000
+Case #21: 1985.3525136
+Case #22: 1503798.0086488
+Case #23: 1734563.7373992
+Case #24: 1935.0000000
+Case #25: 3869.0842887
+Case #26: 1167352.0546392
+Case #27: 1771853.4035846
+Case #28: 2241.8201621
+Case #29: 2269.2420970
+Case #30: 1496068.5177102
+Case #31: 287598.2688348
+Case #32: 3016.6650946
+Case #33: 1649.0000000
+Case #34: 2848.2094417
+Case #35: 1240.0000000
+Case #36: 3240.7645020
+Case #37: 1302558.9653280
+Case #38: 3428.6765095
+Case #39: 1621.0000000
+Case #40: 584916.3697904
+Case #41: 1400697.4723989
+Case #42: 1431.0000000
+Case #43: 204.0000000
+Case #44: 939.0000000
+Case #45: 343158.2364033
+Case #46: 3815.6896706
+Case #47: 338526.0408327
+Case #48: 3839.8044185
+Case #49: 340.0000000
+Case #50: 540.0000000
+Case #51: 1014.0000000
+Case #52: 2430.9702070
+Case #53: 1730.5018400
+Case #54: 2339.0613396
+Case #55: 516250.6558921
+Case #56: 3306.0000000
+Case #57: 1104.6429449
+Case #58: 804227.7965058
+Case #59: 793137.5197000
+Case #60: 964.0000000
+Case #61: 754.0000000
+Case #62: 1268287.6270165
+Case #63: 932.0000000
+Case #64: 439961.8209349
+Case #65: 459.0000000
+Case #66: 2379.0000000
+Case #67: 2421.3395319
+Case #68: 161.0000000
+Case #69: 3868.6183457
+Case #70: 584.0000000
+Case #71: 2662.0969657
+Case #72: 1014.7063264
+Case #73: 1234.0000000
+Case #74: 618.0000000
+Case #75: 322212.3846881
+Case #76: 4105.1071439
+Case #77: 1062.0000000
+Case #78: 3242.2032127
+Case #79: 1699.0000000
+Case #80: 391352.6334517
+Case #81: 329493.9969917
+Case #82: 222.0000000
+Case #83: 1728.7412350
+Case #84: 182.0000000
+Case #85: 371.0000000
+Case #86: 677435.1373117
+Case #87: 1171673.5138850
+Case #88: 1064647.8887326
+Case #89: 1122082.7605398
+Case #90: 3753.1636809
+Case #91: 262.0000000
+Case #92: 966.0000000
+Case #93: 113944.3701118
+Case #94: 509.0000000
+Case #95: 4207.2188216
+Case #96: 277412.9469356
+Case #97: 3356.0680892
+Case #98: 49564.3408440
+Case #99: 1102.3323108
+Case #100: 559037.3420177
diff --git a/codejam_2008/src/y2008practice/c.rs b/codejam_2008/src/y2008practice/c.rs
index db0cc02..ae6d60e 100644
--- a/codejam_2008/src/y2008practice/c.rs
+++ b/codejam_2008/src/y2008practice/c.rs
@@ -132,7 +132,6 @@ mod tests
     use crate::y2008practice::c::Fcomp;
     use crate::y2008practice::c::F_MAX_LIMIT;
 
-
     #[test]
     fn test_f_max()
     {
@@ -143,14 +142,11 @@ mod tests
         assert_eq!(Some(6), f_comp.find_f_max(3, 2));
 
         assert_eq!(Some(3), f_comp.find_f_max(3, 1));
-
-
     }
 
     #[test]
     fn tests()
     {
-
         test_stuff(3, 3, 3, Some(7), 2, 1);
         test_stuff(7, 5, 3, Some(25), 3, 2);
         test_stuff(1, 122, 6, Some(4_258_490_215), 1, 1);
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index 0f6d85c..859678f 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -1,13 +1,12 @@
-
 use codejam::util::codejam::run_cases;
 //use itertools::Itertools;
 
-use std::io::Write;
 use codejam::util::bitvec64::BitVec64;
-use std::collections::HashMap;
 use codejam::util::vector_2d::Vector2d;
 use std::cmp::Ordering;
 use std::collections::BinaryHeap;
+use std::collections::HashMap;
+use std::io::Write;
 
 /*
 Dynamic programming
@@ -15,36 +14,34 @@ Dynamic programming
 pub fn solve_all_cases()
 {
     run_cases(
-        &["D-small-practice",
-            //"D-large-practice"
-            ],
+        &["D-small-practice", "D-large-practice"],
         "y2008practice",
         |reader, buffer| {
-
             let t = reader.read_int();
 
             for case_no in 1..=t {
                 let (ni, ns, pg) = reader.read_tuple_3();
 
                 let mut items = reader.read_string_line();
-                let mut items_map:HashMap<String,usize> = HashMap::new();
+                let mut items_map: HashMap<String, usize> = HashMap::new();
                 assert_eq!(ni, items.len());
                 let mut is_perishable = BitVec64::new();
 
-                for i in items.iter_mut()
-                {
+                for i in items.iter_mut() {
                     if i.chars().last().unwrap() == '!' {
                         assert_eq!('!', i.remove(i.len() - 1));
-                        is_perishable.set( items_map.len(), true);
+                        is_perishable.set(items_map.len(), true);
                     }
 
                     items_map.insert(i.clone(), items_map.len());
                 }
 
-                let mut stores: Vec<Store> = (0..ns).map( |_| {
-                    let s = reader.read_string();
-                    Store::new(&s, ni, &items_map)
-                }).collect();
+                let mut stores: Vec<Store> = (0..ns)
+                    .map(|_| {
+                        let s = reader.read_string();
+                        Store::new(&s, ni, &items_map)
+                    })
+                    .collect();
 
                 stores.insert(0, Store::new(&"0 0".to_string(), ni, &items_map));
 
@@ -56,7 +53,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                let ans = memo.doit( pg as f64, &is_perishable, &mut stores);
+                let ans = memo.doit(pg as f64, &is_perishable, &mut stores);
 
                 writeln!(buffer, "Case #{}: {:.7}", case_no, ans).unwrap();
             }
@@ -64,31 +61,28 @@ pub fn solve_all_cases()
     );
 }
 
-
-struct Stock {
-
-spent: f64,
-//basket count
-bct: u32,
-loc: usize,
-//from location?
-cf: usize,
-mask: BitVec64
-}
-
-impl Eq for Stock {
-
+struct Stock
+{
+    spent: f64,
+    //basket count
+    bct: u32,
+    loc: usize,
+    //from location?
+    cf: usize,
+    mask: BitVec64,
 }
-impl PartialEq for Stock {
-    fn eq(&self, rhs: &Stock) -> bool {
-        self.spent == rhs.spent &&
-            self.mask.data == rhs.mask.data &&
-            self.cf == rhs.cf
 
+impl Eq for Stock {}
+impl PartialEq for Stock
+{
+    fn eq(&self, rhs: &Stock) -> bool
+    {
+        self.spent == rhs.spent && self.mask.data == rhs.mask.data && self.cf == rhs.cf
     }
 }
 
-impl Stock {
+impl Stock
+{
     fn new(spent: f64, mask: BitVec64, loc: usize) -> Self
     {
         Stock {
@@ -96,16 +90,17 @@ impl Stock {
             mask,
             loc,
             cf: 0,
-            bct: mask.pop_count()
+            bct: mask.pop_count(),
         }
     }
-    fn new2(spent: f64, mask: BitVec64, loc: usize, b: u32, cf: usize) -> Self {
+    fn new2(spent: f64, mask: BitVec64, loc: usize, b: u32, cf: usize) -> Self
+    {
         Stock {
             spent,
             mask,
             loc,
             cf,
-            bct: b
+            bct: b,
         }
     }
 }
@@ -113,40 +108,48 @@ impl Stock {
 // The priority queue depends on `Ord`.
 // Explicitly implement the trait so the queue becomes a min-heap
 // instead of a max-heap.
-impl Ord for Stock {
-    fn cmp(&self, rhs: &Stock) -> Ordering {
-        rhs.spent.partial_cmp(&self.spent).unwrap().then_with(||
-        rhs.loc.cmp(&self.loc)
-        ).then_with( || rhs.mask.data.cmp(&self.mask.data))
+impl Ord for Stock
+{
+    fn cmp(&self, rhs: &Stock) -> Ordering
+    {
+        rhs.spent
+            .partial_cmp(&self.spent)
+            .unwrap()
+            .then_with(|| rhs.loc.cmp(&self.loc))
+            .then_with(|| rhs.mask.data.cmp(&self.mask.data))
     }
 }
 
 // `PartialOrd` needs to be implemented as well.
-impl PartialOrd for Stock {
-    fn partial_cmp(&self, rhs: &Stock) -> Option<Ordering> {
+impl PartialOrd for Stock
+{
+    fn partial_cmp(&self, rhs: &Stock) -> Option<Ordering>
+    {
         Some(self.cmp(rhs))
     }
 }
 
-struct Store {
+struct Store
+{
     x: i32,
     y: i32,
     //prices[item index] = price
     prices: Vec<i32>,
     //Which items are in stock stk[0] = item index1, stk[1] = item index 2
-    stk: Vec<usize>
+    stk: Vec<usize>,
 }
 
-impl Store {
+impl Store
+{
     fn new(s: &String, n: usize, items: &HashMap<String, usize>) -> Self
     {
         let mut prices = vec![-1; n];
-        let st: Vec<&str>  = s.split(|c| c == ' ' || c == ':' || c == '\n').collect();
-	    let x : i32 = st[0].parse().unwrap();
-	    let y: i32 = st[1].parse().unwrap();
-	    let mut stk = Vec::new();
-	    //let mut j = 0;
-	    for chunk in st.chunks_exact(2).skip(1) {
+        let st: Vec<&str> = s.split(|c| c == ' ' || c == ':' || c == '\n').collect();
+        let x: i32 = st[0].parse().unwrap();
+        let y: i32 = st[1].parse().unwrap();
+        let mut stk = Vec::new();
+        //let mut j = 0;
+        for chunk in st.chunks_exact(2).skip(1) {
             let item_str = chunk[0];
             let price = chunk[1];
             let item_idx = items[item_str];
@@ -154,54 +157,55 @@ impl Store {
             stk.push(item_idx);
         }
 
-        Store { x, y, prices, stk}
-
-	}
-
-    fn dist(&self, xp: i32, yp: i32) -> f64 { return Vector2d::with_val(self.x, self.y).pyth_distance( &Vector2d::with_val(xp, yp))}
+        Store { x, y, prices, stk }
+    }
 
+    fn dist(&self, xp: i32, yp: i32) -> f64
+    {
+        return Vector2d::with_val(self.x, self.y).pyth_distance(&Vector2d::with_val(xp, yp));
+    }
 }
 
 const EPS: f64 = 1e-10;
-const INVALID_COST:f64 = 1e100;
+const INVALID_COST: f64 = 1e100;
 
 struct Memo
 {
     //bcost[store][binary mask of items] = cost
-    bcost: Vec<Vec<f64>>
+    bcost: Vec<Vec<f64>>,
 }
 
 impl Memo
 {
-    fn new(ns: usize, ni: usize) -> Self {
+    fn new(ns: usize, ni: usize) -> Self
+    {
         Memo {
-            bcost: vec![vec![INVALID_COST; 1<<ni]; ns]
-
+            bcost: vec![vec![INVALID_COST; 1 << ni]; ns],
         }
     }
-    fn doit(&mut self, gp: f64, per: &BitVec64, sts: &mut Vec < Store > ) -> f64 {
+    fn doit(&mut self, gp: f64, per: &BitVec64, sts: &mut Vec<Store>) -> f64
+    {
         let ni = sts[0].prices.len();
         //let ns = sts.len();
 
-	    let all = (1<<ni)-1;
-
+        let all = (1 << ni) - 1;
 
         let mut ub = 0.0;
         //looks like the cheapest prices
         let mut chp = vec![INVALID_COST; ni];
 
         //0 is home
-        for  store in sts.iter().skip(1) {
+        for store in sts.iter().skip(1) {
             //gas cost
-            let gc = store.dist(0, 0)*2.*gp;
+            let gc = store.dist(0, 0) * 2. * gp;
 
-            for &item_idx in store.stk.iter()  {
+            for &item_idx in store.stk.iter() {
                 let tc = gc + store.prices[item_idx] as f64;
                 if tc < chp[item_idx] {
                     chp[item_idx] = tc;
                 }
             }
-		}
+        }
 
         ub += chp.iter().sum::<f64>();
 
@@ -210,25 +214,24 @@ impl Memo
         self.bcost[0][all] = ub;
 
         //Remove items that are definitely not optimal
-        for  store in sts.iter_mut().skip(1) {
-
-            let keep:Vec<bool> = store.stk.iter().map( |&item_idx|
-            {
-                store.prices[item_idx] as f64 <= chp[item_idx]
-            }).collect();
+        for store in sts.iter_mut().skip(1) {
+            let keep: Vec<bool> = store
+                .stk
+                .iter()
+                .map(|&item_idx| store.prices[item_idx] as f64 <= chp[item_idx])
+                .collect();
 
             for (j, k) in keep.iter().enumerate().rev() {
                 if !k {
                     store.stk.remove(j);
                 }
             }
-/*
-            store.stk.retain(|&item_idx|
-                store.prices[item_idx] as f64 <= chp[item_idx]
-            );
-*/
-		}
-
+            /*
+                        store.stk.retain(|&item_idx|
+                            store.prices[item_idx] as f64 <= chp[item_idx]
+                        );
+            */
+        }
 
         self.bcost[0][0] = 0.0;
         let mut pq = BinaryHeap::new();
@@ -236,10 +239,14 @@ impl Memo
         pq.push(Stock::new2(0.0, BitVec64::new(), 0, 0, sts.len()));
 
         while let Some(s) = pq.pop() {
-
-            debug!("Examining Stock( Spent={},Mask={:0>width$b},Location={},Basket Count={},Cf={})",
-                   s.spent, s.mask.data, s.loc, s.bct, s.cf,
-            width=ni
+            debug!(
+                "Examining Stock( Spent={},Mask={:0>width$b},Location={},Basket Count={},Cf={})",
+                s.spent,
+                s.mask.data,
+                s.loc,
+                s.bct,
+                s.cf,
+                width = ni
             );
 
             if self.bcost[0][all] <= s.spent {
@@ -260,9 +267,9 @@ impl Memo
                 if stk.is_empty() {
                     continue;
                 }
-                let n = 1<<stk.len();
+                let n = 1 << stk.len();
                 //mask
-                for m in 1..n  {
+                for m in 1..n {
                     let mut cost = s.spent;
                     //new mask
                     let mut nm = s.mask;
@@ -285,17 +292,20 @@ impl Memo
                         }
                     }
 
-                    if self.bcost[s.loc][nm.data] < cost+EPS {
+                    if self.bcost[s.loc][nm.data] < cost + EPS {
                         continue;
                     }
 
                     if pr > 0 {
-                        let gc = store.dist(0,0) * gp + cost;
+                        let gc = store.dist(0, 0) * gp + cost;
 
-                        if self.bcost[0][nm.data] > gc+EPS {
+                        if self.bcost[0][nm.data] > gc + EPS {
                             self.bcost[0][nm.data] = gc;
                             pq.push(Stock::new2(gc, nm, 0, nct, s.loc));
-                            debug!(" Push Stock({},{:b},{},{},{})\n", gc, nm.data, 0, nct, s.loc);
+                            debug!(
+                                " Push Stock({},{:b},{},{},{})\n",
+                                gc, nm.data, 0, nct, s.loc
+                            );
                         }
                     } else {
                         self.bcost[s.loc][nm.data] = cost;
@@ -305,35 +315,34 @@ impl Memo
                             }
                             let gc = other_store.dist(store.x, store.y) * gp + cost;
 
-                            if self.bcost[i][nm.data] > gc+EPS {
+                            if self.bcost[i][nm.data] > gc + EPS {
                                 self.bcost[i][nm.data] = gc;
-                                pq.push(Stock::new2(gc, nm,
-                                    i, nct, s.loc));
+                                pq.push(Stock::new2(gc, nm, i, nct, s.loc));
                                 debug!(" Push Stock({},{},{},{},{})\n", gc, nm.data, i, nct, s.loc);
                             }
                         }
                     }
                 }
             } else {
-                for (i,store) in sts.iter().enumerate().skip(1) {
-                    let gc = store.dist(0,0) *gp + s.spent;
+                for (i, store) in sts.iter().enumerate().skip(1) {
+                    let gc = store.dist(0, 0) * gp + s.spent;
 
-                    if self.bcost[i][s.mask.data] > gc+EPS {
+                    if self.bcost[i][s.mask.data] > gc + EPS {
                         self.bcost[i][s.mask.data] = gc;
                         pq.push(Stock::new2(gc, s.mask, i, s.bct, 0));
-                        debug!(" Push Stock({},{},{},{},{})\n", gc, s.mask.data, i, s.bct, 0);
+                        debug!(
+                            " Push Stock({},{},{},{},{})\n",
+                            gc, s.mask.data, i, s.bct, 0
+                        );
                     }
                 }
             }
         }
 
-
-	    self.bcost[0][all]
+        self.bcost[0][all]
     }
 }
 
 #[cfg(test)]
 mod tests
-{
-
-}
+{}

From 4f1b45e663540ca1356f1a52c5945e4a5c937428 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 16 Feb 2019 13:34:57 -0300
Subject: [PATCH 015/122] cleanup

---
 codejam_2008/src/y2008practice/d.rs | 52 +++++++++++------------------
 1 file changed, 19 insertions(+), 33 deletions(-)

diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index 859678f..0798476 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -9,7 +9,8 @@ use std::collections::HashMap;
 use std::io::Write;
 
 /*
-Dynamic programming
+Priority queue / max heap
+Bitmasks
 */
 pub fn solve_all_cases()
 {
@@ -64,11 +65,12 @@ pub fn solve_all_cases()
 struct Stock
 {
     spent: f64,
-    //basket count
-    bct: u32,
+
     loc: usize,
     //from location?
     cf: usize,
+
+    //1 if an item has been purchased
     mask: BitVec64,
 }
 
@@ -83,24 +85,13 @@ impl PartialEq for Stock
 
 impl Stock
 {
-    fn new(spent: f64, mask: BitVec64, loc: usize) -> Self
-    {
-        Stock {
-            spent,
-            mask,
-            loc,
-            cf: 0,
-            bct: mask.pop_count(),
-        }
-    }
-    fn new2(spent: f64, mask: BitVec64, loc: usize, b: u32, cf: usize) -> Self
+    fn new(spent: f64, mask: BitVec64, loc: usize, cf: usize) -> Self
     {
         Stock {
             spent,
             mask,
             loc,
-            cf,
-            bct: b,
+            cf
         }
     }
 }
@@ -226,17 +217,12 @@ impl Memo
                     store.stk.remove(j);
                 }
             }
-            /*
-                        store.stk.retain(|&item_idx|
-                            store.prices[item_idx] as f64 <= chp[item_idx]
-                        );
-            */
         }
 
         self.bcost[0][0] = 0.0;
         let mut pq = BinaryHeap::new();
 
-        pq.push(Stock::new2(0.0, BitVec64::new(), 0, 0, sts.len()));
+        pq.push(Stock::new(0.0, BitVec64::new(), 0, sts.len()));
 
         while let Some(s) = pq.pop() {
             debug!(
@@ -244,7 +230,7 @@ impl Memo
                 s.spent,
                 s.mask.data,
                 s.loc,
-                s.bct,
+                s.mask.pop_count(),
                 s.cf,
                 width = ni
             );
@@ -275,7 +261,6 @@ impl Memo
                     let mut nm = s.mask;
                     //perishable count
                     let mut pr = 0;
-                    let mut nct = s.bct;
                     let mask = BitVec64::with_val(m);
 
                     for (i, &item_index) in stk.iter().enumerate() {
@@ -286,7 +271,6 @@ impl Memo
                         cost += store.prices[item_index] as f64;
 
                         nm.set(item_index, true);
-                        nct += 1;
                         if per.get(item_index) {
                             pr += 1;
                         }
@@ -297,17 +281,19 @@ impl Memo
                     }
 
                     if pr > 0 {
+                        //must return to home base
                         let gc = store.dist(0, 0) * gp + cost;
 
                         if self.bcost[0][nm.data] > gc + EPS {
                             self.bcost[0][nm.data] = gc;
-                            pq.push(Stock::new2(gc, nm, 0, nct, s.loc));
+                            pq.push(Stock::new(gc, nm, 0, s.loc));
                             debug!(
-                                " Push Stock({},{:b},{},{},{})\n",
-                                gc, nm.data, 0, nct, s.loc
+                                " Push Stock({},{:b},{},{})\n",
+                                gc, nm.data, 0, s.loc
                             );
                         }
                     } else {
+                        //go to every other store, including home
                         self.bcost[s.loc][nm.data] = cost;
                         for (i, other_store) in sts.iter().enumerate() {
                             if s.loc == i {
@@ -317,8 +303,8 @@ impl Memo
 
                             if self.bcost[i][nm.data] > gc + EPS {
                                 self.bcost[i][nm.data] = gc;
-                                pq.push(Stock::new2(gc, nm, i, nct, s.loc));
-                                debug!(" Push Stock({},{},{},{},{})\n", gc, nm.data, i, nct, s.loc);
+                                pq.push(Stock::new(gc, nm, i, s.loc));
+                                debug!(" Push Stock({},{},{},{})\n", gc, nm.data, i, s.loc);
                             }
                         }
                     }
@@ -329,10 +315,10 @@ impl Memo
 
                     if self.bcost[i][s.mask.data] > gc + EPS {
                         self.bcost[i][s.mask.data] = gc;
-                        pq.push(Stock::new2(gc, s.mask, i, s.bct, 0));
+                        pq.push(Stock::new(gc, s.mask, i, 0));
                         debug!(
-                            " Push Stock({},{},{},{},{})\n",
-                            gc, s.mask.data, i, s.bct, 0
+                            " Push Stock({},{},{},{})\n",
+                            gc, s.mask.data, i,  0
                         );
                     }
                 }

From a1748bd00ddd48acc88d426370d83d8f3810092e Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 16 Feb 2019 13:51:18 -0300
Subject: [PATCH 016/122] 2008 beta

---
 codejam_2008/src/main.rs            |  11 ++-
 codejam_2008/src/y2008beta/a.rs     | 106 ++++++++++++++++++++++++++++
 codejam_2008/src/y2008beta/mod.rs   |   3 +
 codejam_2008/src/y2008practice/d.rs |   2 +-
 4 files changed, 120 insertions(+), 2 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/a.rs
 create mode 100644 codejam_2008/src/y2008beta/mod.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index ca907a2..abbf58f 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -1,6 +1,7 @@
 //#![allow(non_snake_case)]
 mod y2008practice;
 mod y2008qual;
+mod y2008beta;
 
 extern crate codejam;
 
@@ -26,6 +27,12 @@ pub fn run_y2008_round_practice()
     y2008practice::a::solve_all_cases();
     y2008practice::b::solve_all_cases();
     y2008practice::c::solve_all_cases();
+    y2008practice::d::solve_all_cases();
+}
+
+pub fn run_y2008_round_beta()
+{
+
 }
 
 pub fn run_y2008_round_1a()
@@ -50,7 +57,9 @@ pub fn run_y2008_round2()
 
 fn main()
 {
+    y2008beta::a::solve_all_cases();
+
     init_log();
 
-    y2008practice::d::solve_all_cases();
+
 }
diff --git a/codejam_2008/src/y2008beta/a.rs b/codejam_2008/src/y2008beta/a.rs
new file mode 100644
index 0000000..bebb86d
--- /dev/null
+++ b/codejam_2008/src/y2008beta/a.rs
@@ -0,0 +1,106 @@
+//use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use std::usize;
+use codejam::util::vector_2d::Vector2d;
+
+/*
+Triangles
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008beta",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let floats = reader.read_num_line();
+
+                let search_engines: Vec<_> = (0..n).map(|_| reader.read_string()).collect();
+
+                let q = reader.read_int();
+
+                let queries: Vec<_> = (0..q).map(|_| reader.read_string()).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(search_engines.as_slice(), queries.as_slice())
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+struct Line {
+    slope: Option<f64>,
+    len: f64
+}
+
+impl Line {
+    fn new(p1: &Vector2d<f64>, p2: &Vector2d<f64>) -> Line
+    {
+        Line {
+            slope:
+            if p1.x() == p2.x() {
+                None
+            } else {
+                Some((p2.y() - p1.y()) / (p2.x() - p1.x()))
+            },
+            len: p1.pyth_distance(p2)
+        }
+    }
+
+    fn is_parallel(&self, other: &Line) -> bool {
+        self.slope == other.slope
+    }
+}
+
+
+fn law_cosines(a: f64, b: f64, c: f64) -> f64
+{
+	//c2 = a2 + b2 – 2ab cos C
+	//#puts a, b, c, ((c ** 2 - a ** 2 - b ** 2) / (-2 * a * b))
+	( (c.powi(2) - a.powi(2) - b.powi(2)) / (-2 * a * b) ).acos()
+}
+
+
+fn solve(p1: &Vector2d<f64>, p2: &Vector2d<f64>, p3: &Vector2d<f64>) -> String
+{
+    let mut s_changes = 0;
+    let mut cur_q = 0;
+
+    while cur_q != queries.len() {
+        //given 1 switch, how many queries can we get through by choosing the search engine that occurs the latest in the next
+        //batch of queries
+        let s_potential_progress = search_engines.iter().map(|search| {
+            let idx = queries[cur_q..queries.len()]
+                .iter()
+                .position(|q| q == search);
+            if let Some(idx) = idx {
+                idx + cur_q
+            } else {
+                queries.len()
+            }
+        });
+
+        cur_q = s_potential_progress.max().unwrap();
+        s_changes += 1;
+    }
+
+    if s_changes > 0 {
+        s_changes -= 1;
+    }
+
+    s_changes
+}
diff --git a/codejam_2008/src/y2008beta/mod.rs b/codejam_2008/src/y2008beta/mod.rs
new file mode 100644
index 0000000..4f053df
--- /dev/null
+++ b/codejam_2008/src/y2008beta/mod.rs
@@ -0,0 +1,3 @@
+pub mod a;
+pub mod b;
+pub mod c;
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index 0798476..bbf89dd 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -79,7 +79,7 @@ impl PartialEq for Stock
 {
     fn eq(&self, rhs: &Stock) -> bool
     {
-        self.spent == rhs.spent && self.mask.data == rhs.mask.data && self.cf == rhs.cf
+        self.spent == rhs.spent && self.mask.data == rhs.mask.data && self.loc == rhs.loc
     }
 }
 

From 38614f6837627ed3bea6a33be898136e0189ae99 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 16 Feb 2019 18:01:16 -0300
Subject: [PATCH 017/122] a

---
 .../src/y2008beta/A-large-practice.in         | 101 ++++++++++++++++++
 .../src/y2008beta/A-large-practice.out        | 100 +++++++++++++++++
 .../src/y2008beta/A-small-practice.in         | 101 ++++++++++++++++++
 .../src/y2008beta/A-small-practice.out        | 100 +++++++++++++++++
 codejam_2008/src/y2008beta/a.rs               |  66 ++++++------
 5 files changed, 436 insertions(+), 32 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008beta/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008beta/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008beta/A-small-practice.out

diff --git a/codejam_2008/src/y2008beta/A-large-practice.in b/codejam_2008/src/y2008beta/A-large-practice.in
new file mode 100644
index 0000000..ef7f682
--- /dev/null
+++ b/codejam_2008/src/y2008beta/A-large-practice.in
@@ -0,0 +1,101 @@
+100
+-95 -31 -8 40 -269 -173
+-772 -55 73 909 647 867
+17 125 -21 -72 -180 87
+92 -196 93 -147 142 -146
+70 70 228 255 -115 -88
+-346 397 698 -485 -479 -221
+-713 -640 760 849 828 394
+-255 185 -29 77 -142 131
+130 -25 185 -133 22 30
+405 -34 419 -945 -726 -473
+-37 -49 75 -98 -37 -147
+76 -130 28 -292 100 -49
+-145 110 53 -16 251 110
+565 -126 22 123 31 -144
+-947 575 -275 395 -391 518
+201 -251 55 -91 135 -18
+348 407 -803 -848 -222 298
+10 -84 -72 37 10 158
+-66 101 -22 -42 121 2
+-98 -111 1 39 1 39
+93 53 -38 -50 79 -64
+-103 71 -203 -489 101 -81
+-512 809 405 -713 -817 -400
+83 142 22 -104 22 388
+-25 -36 -39 24 -85 -22
+623 -33 125 -63 115 103
+207 -428 -103 -126 48 29
+829 -38 926 -590 -53 339
+71 178 71 -136 -13 21
+-93 -148 257 -282 149 -40
+-98 -117 -122 -67 -85 -80
+-68 -78 -279 -247 143 91
+-399 231 308 -231 -983 900
+-583 844 -131 -636 -617 461
+-107 67 100 -61 -284 -682
+8 -39 -2 -39 3 -16
+-57 -19 -57 -19 -57 -19
+-279 242 -110 54 59 -134
+91 29 -26 -63 -26 121
+109 158 121 790 -402 403
+124 73 -36 -84 -33 233
+-144 615 628 -659 -924 -464
+-866 -470 -53 440 463 -227
+143 83 43 217 93 150
+-58 -145 -149 -145 -149 -418
+-710 681 692 178 -762 652
+23 6 -126 75 -17 115
+184 -285 -12 -48 122 -17
+23 -51 23 109 -134 29
+28 -100 50 70 -142 -122
+73 -22 -11 70 241 -206
+98 -94 98 -94 98 -94
+-164 -192 145 -133 -39 -8
+244 -334 163 -966 -754 893
+-18 63 73 -13 -109 -13
+-102 -106 -33 -74 -134 -37
+19 -31 19 -31 19 -31
+-120 81 -28 194 -28 -32
+-877 482 68 -858 949 -446
+147 -97 252 -220 24 8
+217 -749 297 -221 -336 -300
+233 -16 -810 634 888 725
+145 111 24 347 24 -125
+773 -493 -640 585 237 853
+-132 -186 78 -132 -54 -54
+63 1 63 1 63 1
+-234 472 677 -219 888 529
+-150 -40 -97 24 -214 -93
+96 61 101 -9 26 66
+-1 -297 -120 -102 37 -140
+-123 -49 -192 56 -105 38
+21 -104 -112 30 287 -372
+66 55 66 55 145 -55
+-7 -128 -24 -255 120 -111
+15 10 -14 26 2 -3
+342 -740 -629 -136 3 208
+-142 -139 -49 -248 -49 -30
+-343 537 774 42 754 -148
+-970 67 -586 885 -740 807
+-826 -458 -477 -946 -755 162
+-782 -985 837 -252 31 902
+146 -9 134 -9 140 -69
+-123 147 116 -102 -362 -102
+-56 -192 -56 -86 -85 -139
+-279 489 758 -778 692 -730
+-217 60 -140 -77 -63 60
+150 -46 150 -46 150 -46
+474 705 -511 -679 73 -333
+-113 65 347 65 117 -53
+15 110 -33 110 -33 110
+145 131 28 14 27 132
+0 87 5 -10 15 -204
+-76 3 -142 -109 -30 -175
+-95 -23 -103 -95 -111 -23
+-150 -101 177 226 -59 135
+-123 144 -385 97 139 97
+-98 39 -122 32 -91 15
+-180 14 58 90 -61 52
+-139 -16 -58 -20 -301 -8
+-20 -80 -27 25 -6 -290
diff --git a/codejam_2008/src/y2008beta/A-large-practice.out b/codejam_2008/src/y2008beta/A-large-practice.out
new file mode 100644
index 0000000..62750ae
--- /dev/null
+++ b/codejam_2008/src/y2008beta/A-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: not a triangle
+Case #2: scalene obtuse triangle
+Case #3: isosceles acute triangle
+Case #4: isosceles obtuse triangle
+Case #5: isosceles obtuse triangle
+Case #6: scalene obtuse triangle
+Case #7: scalene obtuse triangle
+Case #8: not a triangle
+Case #9: isosceles obtuse triangle
+Case #10: scalene acute triangle
+Case #11: isosceles acute triangle
+Case #12: not a triangle
+Case #13: isosceles obtuse triangle
+Case #14: scalene right triangle
+Case #15: scalene obtuse triangle
+Case #16: scalene right triangle
+Case #17: scalene obtuse triangle
+Case #18: isosceles obtuse triangle
+Case #19: isosceles right triangle
+Case #20: not a triangle
+Case #21: isosceles right triangle
+Case #22: scalene right triangle
+Case #23: scalene obtuse triangle
+Case #24: isosceles obtuse triangle
+Case #25: isosceles acute triangle
+Case #26: scalene right triangle
+Case #27: scalene right triangle
+Case #28: scalene obtuse triangle
+Case #29: isosceles obtuse triangle
+Case #30: isosceles right triangle
+Case #31: isosceles right triangle
+Case #32: not a triangle
+Case #33: scalene obtuse triangle
+Case #34: scalene obtuse triangle
+Case #35: scalene right triangle
+Case #36: isosceles acute triangle
+Case #37: not a triangle
+Case #38: not a triangle
+Case #39: isosceles acute triangle
+Case #40: scalene acute triangle
+Case #41: isosceles right triangle
+Case #42: scalene acute triangle
+Case #43: scalene acute triangle
+Case #44: not a triangle
+Case #45: scalene right triangle
+Case #46: scalene obtuse triangle
+Case #47: isosceles right triangle
+Case #48: scalene right triangle
+Case #49: isosceles acute triangle
+Case #50: isosceles obtuse triangle
+Case #51: not a triangle
+Case #52: not a triangle
+Case #53: isosceles right triangle
+Case #54: scalene obtuse triangle
+Case #55: isosceles obtuse triangle
+Case #56: isosceles right triangle
+Case #57: not a triangle
+Case #58: isosceles obtuse triangle
+Case #59: scalene obtuse triangle
+Case #60: isosceles obtuse triangle
+Case #61: scalene acute triangle
+Case #62: scalene obtuse triangle
+Case #63: isosceles obtuse triangle
+Case #64: scalene obtuse triangle
+Case #65: isosceles right triangle
+Case #66: not a triangle
+Case #67: scalene acute triangle
+Case #68: isosceles obtuse triangle
+Case #69: isosceles obtuse triangle
+Case #70: isosceles right triangle
+Case #71: isosceles right triangle
+Case #72: not a triangle
+Case #73: not a triangle
+Case #74: isosceles obtuse triangle
+Case #75: isosceles acute triangle
+Case #76: scalene acute triangle
+Case #77: isosceles obtuse triangle
+Case #78: scalene obtuse triangle
+Case #79: scalene obtuse triangle
+Case #80: scalene obtuse triangle
+Case #81: scalene acute triangle
+Case #82: isosceles acute triangle
+Case #83: isosceles acute triangle
+Case #84: isosceles obtuse triangle
+Case #85: scalene obtuse triangle
+Case #86: isosceles acute triangle
+Case #87: not a triangle
+Case #88: scalene obtuse triangle
+Case #89: isosceles obtuse triangle
+Case #90: not a triangle
+Case #91: isosceles acute triangle
+Case #92: not a triangle
+Case #93: isosceles right triangle
+Case #94: isosceles acute triangle
+Case #95: isosceles obtuse triangle
+Case #96: isosceles obtuse triangle
+Case #97: isosceles right triangle
+Case #98: not a triangle
+Case #99: not a triangle
+Case #100: not a triangle
diff --git a/codejam_2008/src/y2008beta/A-small-practice.in b/codejam_2008/src/y2008beta/A-small-practice.in
new file mode 100644
index 0000000..35a1529
--- /dev/null
+++ b/codejam_2008/src/y2008beta/A-small-practice.in
@@ -0,0 +1,101 @@
+100
+0 0 0 4 1 2
+1 1 1 4 3 2
+2 2 2 4 4 3
+3 3 3 4 5 3
+4 4 4 5 5 6
+5 5 5 6 6 5
+6 6 6 7 6 8
+7 7 7 7 7 7
+0 1 0 1 2 4
+0 1 2 4 0 1
+2 4 0 1 0 1
+0 0 1 1 2 0
+0 0 2 2 3 1
+0 0 1 2 3 1
+0 0 1 2 5 0
+1 0 2 3 4 9
+0 0 4 1 6 7
+2 0 5 7 4 8
+7 4 1 8 3 1
+5 6 8 7 3 7
+8 1 4 6 5 2
+4 3 7 3 0 5
+2 5 8 7 6 7
+7 6 0 1 2 9
+9 3 5 6 2 6
+8 2 2 0 0 9
+8 0 3 5 2 7
+5 0 5 1 2 0
+1 5 2 7 1 9
+9 0 4 3 2 1
+2 9 9 8 1 1
+7 6 7 0 0 2
+3 8 5 4 1 3
+3 2 7 4 7 1
+1 3 4 1 5 5
+3 1 9 7 0 1
+3 3 7 2 4 5
+5 3 8 1 4 2
+3 7 9 8 4 0
+2 7 0 7 8 6
+2 1 0 8 1 2
+1 6 5 9 3 6
+3 0 6 8 3 0
+1 4 8 6 1 2
+2 4 4 8 0 1
+8 9 5 4 1 5
+4 9 9 6 2 4
+9 3 5 7 3 5
+2 3 3 9 7 6
+2 1 2 2 0 8
+2 0 2 2 9 7
+2 7 3 3 1 6
+1 2 4 1 6 2
+8 0 6 3 4 5
+8 7 2 5 2 2
+7 2 4 7 7 3
+6 9 1 5 0 5
+8 9 1 4 9 4
+0 6 9 1 4 0
+7 9 3 3 0 4
+6 1 0 0 6 3
+6 8 4 6 3 4
+3 9 5 7 9 2
+1 0 5 9 7 0
+8 8 7 8 1 4
+4 9 2 9 1 3
+2 0 0 0 9 0
+0 4 3 5 4 4
+6 8 6 7 4 4
+4 4 4 5 1 8
+6 1 9 1 6 4
+0 4 3 0 5 2
+5 9 8 5 9 2
+4 6 6 8 9 6
+9 5 9 1 7 6
+0 7 3 8 3 5
+6 4 4 4 4 3
+2 8 8 7 5 8
+4 0 5 1 5 1
+9 2 1 2 2 5
+0 3 2 2 4 5
+1 4 8 9 8 0
+0 8 9 6 5 3
+3 3 7 0 6 4
+3 5 6 2 9 8
+9 0 1 9 4 8
+9 9 1 5 7 7
+4 9 0 7 1 1
+3 6 7 2 2 0
+7 7 6 0 1 7
+5 7 5 3 1 2
+3 8 1 3 0 0
+6 3 1 1 3 5
+9 0 9 7 3 6
+9 9 4 2 7 4
+0 4 7 0 7 8
+9 6 9 5 6 9
+4 7 8 1 3 3
+0 3 0 4 7 0
+5 8 8 3 8 5
diff --git a/codejam_2008/src/y2008beta/A-small-practice.out b/codejam_2008/src/y2008beta/A-small-practice.out
new file mode 100644
index 0000000..7b579e5
--- /dev/null
+++ b/codejam_2008/src/y2008beta/A-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: isosceles obtuse triangle
+Case #2: scalene acute triangle
+Case #3: isosceles acute triangle
+Case #4: scalene right triangle
+Case #5: scalene obtuse triangle
+Case #6: isosceles right triangle
+Case #7: not a triangle
+Case #8: not a triangle
+Case #9: not a triangle
+Case #10: not a triangle
+Case #11: not a triangle
+Case #12: isosceles right triangle
+Case #13: scalene right triangle
+Case #14: isosceles right triangle
+Case #15: scalene right triangle
+Case #16: not a triangle
+Case #17: scalene obtuse triangle
+Case #18: scalene obtuse triangle
+Case #19: scalene acute triangle
+Case #20: scalene obtuse triangle
+Case #21: scalene obtuse triangle
+Case #22: scalene obtuse triangle
+Case #23: scalene obtuse triangle
+Case #24: scalene acute triangle
+Case #25: scalene obtuse triangle
+Case #26: scalene acute triangle
+Case #27: scalene obtuse triangle
+Case #28: scalene right triangle
+Case #29: isosceles obtuse triangle
+Case #30: scalene obtuse triangle
+Case #31: scalene acute triangle
+Case #32: scalene acute triangle
+Case #33: scalene acute triangle
+Case #34: scalene acute triangle
+Case #35: scalene acute triangle
+Case #36: scalene obtuse triangle
+Case #37: scalene acute triangle
+Case #38: scalene obtuse triangle
+Case #39: scalene obtuse triangle
+Case #40: scalene obtuse triangle
+Case #41: scalene obtuse triangle
+Case #42: scalene obtuse triangle
+Case #43: not a triangle
+Case #44: scalene obtuse triangle
+Case #45: scalene obtuse triangle
+Case #46: scalene obtuse triangle
+Case #47: scalene acute triangle
+Case #48: scalene right triangle
+Case #49: scalene acute triangle
+Case #50: scalene obtuse triangle
+Case #51: scalene obtuse triangle
+Case #52: scalene obtuse triangle
+Case #53: scalene obtuse triangle
+Case #54: scalene obtuse triangle
+Case #55: scalene obtuse triangle
+Case #56: scalene obtuse triangle
+Case #57: scalene obtuse triangle
+Case #58: scalene acute triangle
+Case #59: scalene obtuse triangle
+Case #60: scalene obtuse triangle
+Case #61: scalene obtuse triangle
+Case #62: scalene obtuse triangle
+Case #63: scalene obtuse triangle
+Case #64: scalene acute triangle
+Case #65: scalene obtuse triangle
+Case #66: scalene obtuse triangle
+Case #67: not a triangle
+Case #68: scalene obtuse triangle
+Case #69: scalene obtuse triangle
+Case #70: scalene obtuse triangle
+Case #71: isosceles right triangle
+Case #72: scalene acute triangle
+Case #73: scalene obtuse triangle
+Case #74: scalene obtuse triangle
+Case #75: scalene obtuse triangle
+Case #76: scalene acute triangle
+Case #77: scalene right triangle
+Case #78: scalene obtuse triangle
+Case #79: not a triangle
+Case #80: scalene acute triangle
+Case #81: scalene obtuse triangle
+Case #82: scalene acute triangle
+Case #83: scalene obtuse triangle
+Case #84: scalene acute triangle
+Case #85: isosceles acute triangle
+Case #86: scalene obtuse triangle
+Case #87: scalene obtuse triangle
+Case #88: scalene obtuse triangle
+Case #89: scalene acute triangle
+Case #90: scalene acute triangle
+Case #91: scalene obtuse triangle
+Case #92: scalene obtuse triangle
+Case #93: scalene acute triangle
+Case #94: scalene acute triangle
+Case #95: scalene obtuse triangle
+Case #96: isosceles acute triangle
+Case #97: scalene obtuse triangle
+Case #98: scalene obtuse triangle
+Case #99: scalene obtuse triangle
+Case #100: scalene obtuse triangle
diff --git a/codejam_2008/src/y2008beta/a.rs b/codejam_2008/src/y2008beta/a.rs
index bebb86d..a8b9740 100644
--- a/codejam_2008/src/y2008beta/a.rs
+++ b/codejam_2008/src/y2008beta/a.rs
@@ -1,8 +1,10 @@
 //use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
 use std::io::Write;
-use std::usize;
+
 use codejam::util::vector_2d::Vector2d;
+use std::f64;
+use std::f64::consts::PI;
 
 /*
 Triangles
@@ -18,12 +20,6 @@ pub fn solve_all_cases()
             for case_no in 1..=t {
                 let floats = reader.read_num_line();
 
-                let search_engines: Vec<_> = (0..n).map(|_| reader.read_string()).collect();
-
-                let q = reader.read_int();
-
-                let queries: Vec<_> = (0..q).map(|_| reader.read_string()).collect();
-
                 if case_no != 3 {
                     // continue;
                 }
@@ -34,7 +30,10 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(search_engines.as_slice(), queries.as_slice())
+                    solve(&Vector2d::with_val(floats[0], floats[1]),
+                          &Vector2d::with_val(floats[2], floats[3]),
+                          &Vector2d::with_val(floats[4], floats[5]))
+
                 )
                 .unwrap();
             }
@@ -71,36 +70,39 @@ fn law_cosines(a: f64, b: f64, c: f64) -> f64
 {
 	//c2 = a2 + b2 – 2ab cos C
 	//#puts a, b, c, ((c ** 2 - a ** 2 - b ** 2) / (-2 * a * b))
-	( (c.powi(2) - a.powi(2) - b.powi(2)) / (-2 * a * b) ).acos()
+	( (c.powi(2) - a.powi(2) - b.powi(2)) / (-2. * a * b) ).acos()
 }
 
 
 fn solve(p1: &Vector2d<f64>, p2: &Vector2d<f64>, p3: &Vector2d<f64>) -> String
 {
-    let mut s_changes = 0;
-    let mut cur_q = 0;
-
-    while cur_q != queries.len() {
-        //given 1 switch, how many queries can we get through by choosing the search engine that occurs the latest in the next
-        //batch of queries
-        let s_potential_progress = search_engines.iter().map(|search| {
-            let idx = queries[cur_q..queries.len()]
-                .iter()
-                .position(|q| q == search);
-            if let Some(idx) = idx {
-                idx + cur_q
-            } else {
-                queries.len()
-            }
-        });
-
-        cur_q = s_potential_progress.max().unwrap();
-        s_changes += 1;
-    }
+    let ab = Line::new(p1, p2);
+    let ac = Line::new(p1, p3);
+    let bc = Line::new(p2, p3);
 
-    if s_changes > 0 {
-        s_changes -= 1;
+    if ab.is_parallel(&ac) || ab.is_parallel(&bc) || ac.is_parallel(&bc) {
+        return "not a triangle".to_string();
     }
 
-    s_changes
+    let mut angles = Vec::new();
+	angles.push(law_cosines(ab.len, ac.len, bc.len));
+	angles.push( law_cosines(ab.len, bc.len, ac.len));
+	angles.push( law_cosines(ac.len, bc.len, ab.len));
+
+	let desc1 = if ab.len == ac.len || ab.len == bc.len || ac.len == bc.len {
+        "isosceles"
+    } else {
+        "scalene"
+    };
+
+	let desc2 = if
+	 angles.iter().any(  |&ang| (ang - PI / 2.).abs() < 0.00000001 ) {
+        "right"
+    } else if angles.iter().any(  |&ang| ang > PI / 2.) {
+        "obtuse"
+    } else {
+        "acute"
+    };
+
+	format!("{} {} triangle", desc1, desc2)
 }

From 55bb043c0dc3ed0ae73ce7d1e1d6f90ac956b5c2 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 17 Feb 2019 10:57:52 -0300
Subject: [PATCH 018/122] b

---
 codejam_2008/Cargo.lock                       |   7 +
 codejam_2008/Cargo.toml                       |   3 +-
 codejam_2008/src/main.rs                      |   8 +-
 .../src/y2008beta/B-large-practice.in         | 201 ++++++++++++++++++
 .../src/y2008beta/B-small-practice.in         | 201 ++++++++++++++++++
 codejam_2008/src/y2008beta/a.rs               |  49 ++---
 codejam_2008/src/y2008beta/b.rs               |  85 ++++++++
 codejam_2008/src/y2008practice/d.rs           |  12 +-
 codejam_2016/src/y2016qual/d.rs               |  14 ++
 9 files changed, 541 insertions(+), 39 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008beta/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008beta/b.rs

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index fe9ab89..87a4cf9 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -70,6 +70,7 @@ dependencies = [
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rust-algorithm-problems 0.1.0",
+ "superslice 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -392,6 +393,11 @@ name = "semver-parser"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "superslice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "threadpool"
 version = "1.7.1"
@@ -477,6 +483,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
 "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+"checksum superslice 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab16ced94dbd8a46c82fd81e3ed9a8727dac2977ea869d217bcc4ea1f122e81f"
 "checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
 "checksum try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e282c6497867d439f3454cebee548f5961d2787c72c1b7b96481d7f0a3e5bc0"
 "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index 5b56be8..cf4d3e1 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -7,4 +7,5 @@ edition = "2018"
 [dependencies]
 rust-algorithm-problems = { path = "../codejam" }
 log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
-itertools = "*"
\ No newline at end of file
+itertools = "*"
+superslice = "*"
\ No newline at end of file
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index abbf58f..4fec918 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -1,7 +1,7 @@
 //#![allow(non_snake_case)]
+mod y2008beta;
 mod y2008practice;
 mod y2008qual;
-mod y2008beta;
 
 extern crate codejam;
 
@@ -32,7 +32,7 @@ pub fn run_y2008_round_practice()
 
 pub fn run_y2008_round_beta()
 {
-
+    y2008beta::a::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -57,9 +57,7 @@ pub fn run_y2008_round2()
 
 fn main()
 {
-    y2008beta::a::solve_all_cases();
+    y2008beta::b::solve_all_cases();
 
     init_log();
-
-
 }
diff --git a/codejam_2008/src/y2008beta/B-large-practice.in b/codejam_2008/src/y2008beta/B-large-practice.in
new file mode 100644
index 0000000..b474e0f
--- /dev/null
+++ b/codejam_2008/src/y2008beta/B-large-practice.in
@@ -0,0 +1,201 @@
+100
+window_pig receipt_finger station_curtain brush_tongue tooth_card bottle_drain rail_frame match_trousers horn_drawer apple_star muscle_fly parcel_skirt whip_fork net_band seed_drain boy_bottle ticket_skirt floor_knee
+90 94 62 68 30 12 51 77 52 67 33 39 9 86 38 26 56 1
+brain_wall egg_chin collar_ticket knot_stocking board_pot cup_town pin_cat tree_rod ship_prison band_coat card_umbrella square_toe roof_drain brake_moon bird_stick umbrella_match potato_band plane_basin bone_square basin_dress camera_key chin_island pen_pin
+38 83 66 20 91 62 6 78 47 42 87 14 99 48 52 81 4 27 18 16 73 82 23
+pipe_egg chin_stomach bag_band nail_dress muscle_pin spade_horse wall_chain kettle_receipt arm_girl bucket_eye basket_ear cord_stomach dress_island army_blade potato_umbrella shelf_ball cake_heart door_root card_dog horse_orange pin_rod roof_thumb curtain_camera pencil_hospital lock_ship bee_library picture_girl thread_table girl_box curtain_knife island_sun screw_brain bed_skirt key_moon nail_cart brush_spade knot_gun horse_street thread_hospital box_plough map_carriage shirt_bridge watch_gun knot_worm tongue_camera carriage_cake nut_flag arm_net hospital_wing stocking_foot stamp_cord bee_carriage baby_circle flag_whistle arch_basket board_dog wall_sail farm_collar shelf_drop ear_stamp dog_finger stem_fish hat_library comb_tooth
+73 25 26 1 18 66 2 42 30 50 57 87 68 21 9 41 5 81 97 88 100 12 31 84 58 98 82 93 8 55 90 62 79 16 27 19 53 17 78 76 64 96 69 59 39 80 6 44 71 23 77 85 10 91 65 43 54 20 92 14 94 4 13 15
+stomach_line drop_ant pipe_bell cheese_map stamp_pencil door_stick picture_fish square_coat snake_fork door_pocket skirt_sponge jewel_hat heart_carriage cow_hat chin_whistle picture_band root_screw brain_dress engine_plough island_engine bag_shirt door_cushion map_wall brake_tongue tongue_sponge toe_orange shelf_hat bulb_arch square_basin pocket_rail wheel_goat wing_bottle office_library cake_box cake_circle foot_frame pig_line lock_apple key_school leg_eye pipe_card screw_dog box_sponge watch_square shirt_wire hospital_berry pot_plate blade_cloud army_sock egg_bath book_chain cake_net eye_horse frame_toe foot_brush wheel_bag
+42 26 64 29 71 19 31 12 53 84 68 97 58 50 1 9 20 18 32 27 94 8 90 57 16 62 66 65 81 36 10 95 54 22 87 44 28 74 46 47 76 33 91 52 69 96 82 39 24 80 92 11 70 40 51 45
+spade_nut brain_hand girl_cat pen_orange collar_cloud key_ticket stamp_sock baby_nut hammer_cart screw_whip wall_feather trousers_seed pot_comb line_hammer rat_parcel cord_prison knot_net ball_house sun_office leg_curtain girl_brick branch_army fork_cow curtain_seed fish_ant prison_comb chin_station leaf_shoe carriage_sail table_camera berry_bed tongue_town roof_cart wing_island knife_chain heart_foot
+88 83 95 57 4 81 21 10 85 44 86 56 43 62 7 42 37 38 59 20 84 19 1 80 72 39 89 17 28 52 30 18 15 46 70 73
+hammer_ship fly_nerve wire_monkey gun_finger stomach_stem ticket_head tail_library sponge_face leg_spring plough_basket berry_office kettle_oven ring_stocking knee_basin wire_rat
+62 84 91 1 30 32 93 96 57 9 6 42 65 92 47
+church_watch thumb_bed ring_blade hammer_cup garden_muscle bottle_square fowl_curtain bulb_garden kettle_orange jewel_card gun_knee goat_tooth girl_ticket engine_bottle fish_finger tray_fowl
+14 87 86 19 77 76 39 38 9 22 3 71 41 31 44 69
+tongue_cart button_scissors pen_tongue kettle_board cow_curtain wire_fly skin_stem girl_train floor_foot bridge_ring thumb_mouth fish_glove goat_apple face_nail face_cow box_island brush_star orange_brake bag_neck sponge_lip finger_screw wheel_angle apple_ant coat_needle wall_bridge apple_mouth foot_berry wing_arm egg_bone chest_orange store_lock clock_bee chain_house basket_leg ticket_cart dog_whip bridge_drain sheep_pump watch_apple spade_rat wheel_shirt chin_arm tail_brick match_curtain sail_tree ticket_whistle dress_map wing_plate
+88 56 6 83 80 74 77 85 59 38 22 14 53 35 86 96 37 20 61 57 13 33 43 40 84 41 65 60 55 3 90 9 11 76 21 64 29 36 50 58 39 24 1 4 54 75 31 51
+snake_whip cake_fowl wall_spoon girl_cart arm_box flag_girl floor_hand seed_coat cup_tail nut_tail match_picture dog_gun root_cart glove_hospital muscle_star chin_pencil toe_brick tray_star goat_dog brush_office foot_receipt blade_fowl cheese_neck boot_net wheel_band skirt_leg net_skirt needle_spade chain_leg ant_house pencil_bath band_school sock_oven spoon_circle school_bird stocking_boat watch_pig ticket_station line_office tray_parcel sponge_line shirt_cushion bone_potato fowl_pot girl_table bridge_berry
+14 70 23 40 33 32 100 83 97 93 61 20 69 77 89 13 80 48 84 79 91 27 87 25 22 81 26 60 24 54 7 99 74 43 1 92 65 94 50 38 68 78 90 9 11 85
+office_board wheel_monkey hospital_ticket flag_button dog_bee roof_arch stocking_tree screw_boot shoe_lock engine_parcel jewel_boat bell_bee cheese_window tree_blade pig_bed arm_picture stomach_eye screw_girl knot_scissors leaf_bath thread_floor plough_bee bath_sheep bird_brain drop_key hair_wheel
+45 25 39 43 33 30 24 95 68 22 90 12 34 66 59 42 87 84 75 93 61 56 72 94 74 26
+nail_station station_book garden_bag sail_screw fish_cat fly_feather ticket_hook office_shirt plate_card head_town dog_picture hat_ant scissors_knee foot_fowl
+43 36 97 29 60 91 35 14 93 9 34 23 15 33
+cart_school ball_fish tongue_whip sail_egg plane_ant horn_stick leg_leaf rod_girl hair_hospital fork_stick sun_heart pig_library stamp_island carriage_jewel face_street foot_knife rat_frame clock_church throat_hand button_rail stamp_seed fowl_tree potato_door
+68 22 15 46 80 64 67 96 36 30 66 10 76 16 20 77 98 53 91 84 14 100 92
+basin_ticket snake_goat horn_throat nail_rail army_skirt pot_spade frame_fish sun_tail book_board house_lip cheese_boot
+5 3 36 67 97 63 77 75 21 17 42
+carriage_pencil island_camera stick_coat line_house island_monkey rail_pen garden_rod farm_town fowl_cart box_pen seed_fish town_nail collar_tray army_wire church_box apple_sheep tooth_cart foot_flag whip_book book_eye brick_frame leaf_ball plate_blade hat_library nut_bottle moon_wing nerve_angle basket_mouth apple_cushion drop_rail finger_monkey screw_oven arm_chain face_rod drain_tail band_cat bulb_head train_screw curtain_rat brush_stocking
+22 82 90 46 7 94 39 74 68 40 50 53 84 58 61 42 64 89 99 17 37 31 55 44 27 75 4 59 88 19 34 48 87 86 51 96 60 47 80 73
+cow_arch cow_street rod_brush library_whistle pocket_root screw_plane shoe_basket net_baby spring_pipe pump_collar ticket_tooth plough_farm tray_plane book_ring plate_board thumb_plough oven_star cart_branch stomach_face nose_house line_seed parcel_apple moon_button cake_ear arch_skin carriage_island skirt_spring scissors_eye cake_key store_cloud library_feather lip_hammer shirt_shoe band_bee net_pump watch_fowl cushion_office fork_bottle brush_fly drain_dress jewel_cheese roof_nerve army_brick mouth_sun muscle_window frame_basket brick_hook square_leaf ticket_engine fly_stomach table_knot shirt_umbrella
+53 70 29 50 72 75 31 38 33 83 11 59 56 35 32 8 93 58 76 71 68 19 87 36 92 63 48 62 6 97 23 65 17 67 99 82 14 47 66 18 27 78 15 64 20 28 3 81 74 22 61 88
+cup_goat fowl_bird pot_island fish_star thread_pot horse_garden cow_horse army_tongue drawer_umbrella cushion_stamp fly_brain garden_finger chin_finger pen_nut spring_brush pot_eye boy_library drop_board collar_rat shirt_blade rat_goat board_cow moon_bell sponge_receipt drain_pen feather_hat seed_drawer ant_town sock_pocket kettle_tooth station_bag skin_throat bulb_bell stamp_whistle nail_button spring_pot cheese_pin fly_curtain book_feather bed_brake monkey_wire collar_ship shirt_prison cup_carriage bird_cake tongue_wheel lock_fork cat_box bulb_cat knee_ear
+7 91 19 30 42 71 23 52 94 17 51 96 40 89 25 8 6 27 37 97 90 32 81 100 63 55 86 50 79 95 75 74 84 99 70 41 98 34 46 43 11 48 54 29 28 13 68 1 67 20
+goat_needle clock_carriage sun_basin fish_snake window_sponge root_drawer worm_screw jewel_picture bucket_chin rat_hat square_goat sock_curtain shoe_foot worm_sock bottle_fly stick_door train_arm tail_cat drawer_sock flag_nail head_hammer spade_chain needle_horse fly_office curtain_finger stocking_boat hospital_tree band_card chain_pin mouth_cup spring_wing bath_chin cord_tree town_lock berry_spring cloud_lock tail_plane map_spring
+67 84 27 2 28 73 57 10 26 1 36 59 54 20 88 55 50 48 52 62 95 12 4 18 13 100 79 51 76 42 35 82 64 85 69 89 31 97
+screw_heart garden_horse berry_pipe root_sheep brick_pencil train_rod kettle_stocking floor_shirt book_arm parcel_bulb scissors_oven plough_worm sock_tree cat_bee feather_nerve station_worm stem_leg cloud_nail drop_garden glove_cat cloud_train hospital_moon cushion_office ball_leaf cart_bone army_spoon chest_trousers
+84 21 26 20 46 5 19 40 32 11 23 53 17 78 79 36 72 76 34 99 65 60 42 70 93 91 69
+rail_office bag_cheese pig_tree island_receipt pocket_worm sail_muscle nut_arm cheese_monkey ticket_window lip_board cup_cow boot_finger nerve_coat square_coat trousers_door knife_school bed_net bed_bell chin_pencil line_window store_table engine_brush orange_cloud head_cord star_chest nose_head boat_watch eye_nerve whip_pig parcel_nose curtain_spoon hat_circle map_bath nail_nose church_orange plough_horse root_hook brush_cart fowl_feather dog_bucket ship_glove cup_dog head_knot stick_dress apple_fowl fly_basket cart_school eye_garden book_seed brain_needle goat_brick cat_pocket egg_branch lip_drain brake_roof cloud_pipe bulb_collar ticket_cord plate_cheese
+94 70 80 69 93 97 37 28 84 31 53 6 91 7 72 59 52 62 10 51 30 17 23 13 100 5 55 50 92 19 40 98 89 44 66 76 32 1 33 85 56 86 99 12 21 82 2 49 48 88 71 9 75 74 47 64 15 22 87
+drop_apple frame_sponge town_receipt potato_bulb cow_cup pocket_horn apple_bulb bucket_plate tail_bath cow_skin hospital_bag angle_hair neck_snake chest_snake garden_bucket curtain_knife ball_brain drop_nail moon_cake drawer_fish station_store dress_spoon skin_bee pig_ring hand_rod floor_wheel horn_plough bird_sun nose_tray band_hammer blade_horse cart_cloud cushion_nut sail_train skirt_boat neck_dog town_bottle basket_fly army_tray mouth_bird chain_gun engine_chin spoon_flag egg_circle ring_heart spring_orange rail_boy hand_head nose_bath
+12 72 92 32 61 82 65 75 3 84 97 27 5 71 43 74 63 25 28 21 98 33 35 17 11 69 78 34 100 76 24 81 53 37 19 23 91 6 30 4 83 15 31 49 50 56 44 70 51
+skin_pig tongue_cart station_book hat_baby root_pipe eye_fly cup_orange tongue_fork nerve_tail seed_bell tree_wheel rod_jewel flag_fork clock_toe line_feather pocket_boat picture_brush chain_drawer cord_worm oven_neck hair_drain cup_chin kettle_receipt train_arch button_square book_stomach fish_arch feather_knot boy_branch card_station thread_head coat_fork root_pump spring_boot sun_frame trousers_root fork_egg street_leaf boot_boat monkey_knee bird_school needle_plane cup_fly army_table worm_office skin_flag plane_foot snake_picture hook_mouth flag_key tray_hand
+43 73 81 100 96 36 86 29 1 27 25 6 44 51 7 22 17 80 21 72 30 98 56 76 24 92 77 42 99 16 31 5 35 60 28 14 10 53 79 66 90 41 93 18 11 45 63 87 85 67 55
+pencil_mouth knee_curtain store_cloud sock_band table_match whistle_library key_town line_wing map_skin church_brain boot_gun ear_mouth fly_stick fowl_cushion stick_parcel ear_horn nail_store pocket_bulb nose_boy comb_boy arm_root card_nose spade_tooth drain_whip boy_glove baby_eye skirt_net
+43 67 73 17 24 76 28 63 92 88 3 89 36 50 64 72 94 8 69 26 61 51 90 95 83 44 91
+neck_basket knee_potato dress_needle bucket_cat ball_library town_bag band_picture horse_bulb spoon_school
+44 18 80 66 56 51 19 14 20
+rat_orange nut_receipt sponge_shirt cord_monkey tooth_thumb bell_nail trousers_fork boy_pin net_cushion angle_farm pocket_jewel cake_boat square_hammer nerve_bee egg_mouth wing_root brush_army brush_chest rat_church watch_nose carriage_cloud table_hook gun_comb moon_basket board_apple ring_skin leg_bed stem_army apple_nail plough_finger dress_prison pen_stick plane_button bulb_snake sun_band school_table plate_face wall_blade picture_hammer worm_brush kettle_dress nail_arm brain_office ear_wire stocking_church root_watch snake_skirt
+94 35 58 30 62 70 1 67 12 39 17 9 41 16 54 13 65 45 40 32 49 80 31 28 100 15 27 6 82 22 77 61 23 56 4 92 36 20 85 24 5 98 95 73 7 96 87
+farm_shirt lock_bottle tray_comb heart_face cheese_lock parcel_brain boy_goat basin_tray hair_blade brush_stem fish_church collar_umbrella nail_hair lock_tree table_net stocking_house eye_card cat_carriage snake_bridge army_table monkey_sock street_knot cord_knot hair_army worm_rod umbrella_station band_pen tongue_stick tree_card brush_leaf shoe_brick button_knee sponge_train heart_cheese frame_knot carriage_island feather_ticket ship_toe egg_horse berry_glove brick_kettle bath_ship apple_snake orange_square bag_mouth hand_brick shirt_apple rod_bulb umbrella_flag flag_blade plough_cheese sponge_square tail_fowl needle_ship
+5 81 74 18 27 56 48 40 83 23 43 32 85 82 58 71 37 6 16 50 11 25 69 22 88 42 99 54 66 63 10 53 4 59 12 67 30 21 61 49 52 57 62 79 3 75 13 55 1 29 100 68 77 87
+wing_stem dress_feather fork_umbrella farm_boat receipt_band head_whip ring_cake root_shirt tree_throat net_seed girl_camera ticket_worm island_cat street_drop spring_chin receipt_spring line_face
+28 80 15 1 45 54 87 70 77 23 38 30 7 35 76 66 2
+dog_sheep brush_cushion oven_dog brick_ant potato_apple engine_bed collar_brick glove_skirt map_plate tongue_ball branch_chin spring_lip office_cart orange_cheese sun_cow ant_flag shelf_hospital button_bridge lip_needle basin_bulb muscle_tail ball_sponge needle_leaf face_watch horse_needle ticket_mouth bird_hospital orange_chain knot_lip moon_basket cushion_bag muscle_clock girl_door net_prison skirt_thread tooth_throat dress_curtain hat_angle town_camera arch_brake button_drop shelf_plate trousers_snake needle_picture clock_engine ant_potato
+23 62 74 91 59 65 42 40 48 13 6 92 20 69 12 3 54 19 32 33 89 39 85 93 43 15 45 7 29 8 49 77 79 28 82 44 16 53 55 50 14 24 27 36 37 10
+knee_house bed_receipt cloud_brake finger_glove shoe_bird apple_hammer fish_clock table_lip key_cheese muscle_branch band_wall hair_boy cup_card cat_dog thumb_seed feather_net shirt_brick boat_window map_heart chest_arm fowl_cart tooth_throat berry_ant chain_pencil needle_pencil lip_army spoon_wing brick_net brake_bulb nail_hammer face_stamp bee_thread girl_muscle army_wing fowl_island hand_apple heart_parcel branch_arch root_cat match_cow throat_basket face_sheep rod_horn
+86 54 1 21 8 12 13 58 10 24 51 6 90 37 79 78 77 83 99 92 97 63 34 95 14 28 33 65 41 56 60 84 44 98 3 75 50 46 64 11 96 45 85
+rod_nail feather_monkey screw_pin key_bottle toe_arm frame_office mouth_sun receipt_whip circle_neck net_library pipe_sail drain_picture army_fork knot_button ear_worm pencil_horn chest_star pump_whip spoon_shoe stocking_hair shelf_needle whip_stamp berry_whip potato_square spade_fly parcel_school engine_orange cow_table sun_roof wall_seed knot_cord parcel_prison stamp_floor bulb_pin hand_clock scissors_bee match_bell bottle_ship pipe_horse sheep_hammer ear_store sponge_throat foot_stick orange_cord card_station sock_cup mouth_stem sock_drain needle_school ship_stocking farm_board comb_ring frame_eye bottle_snake nail_bell
+36 21 3 14 97 49 4 43 63 56 80 81 83 12 90 74 42 27 26 29 33 39 5 41 48 64 11 10 31 37 25 98 7 35 54 6 46 17 16 22 79 73 62 2 53 61 40 70 34 71 95 9 50 24 72
+sponge_needle monkey_ship leg_apple plate_bulb engine_rail chin_knot oven_eye scissors_lock bulb_line frame_kettle nerve_drawer button_baby bed_horse island_throat face_boy arm_stick brush_book sponge_circle pencil_feather skin_watch ear_hammer tail_fly muscle_camera fork_bone prison_box house_fork brain_engine drop_lock dress_pig basin_toe orange_plane nut_potato plough_hat screw_moon neck_ring umbrella_sheep bath_stick sail_egg cloud_nail army_horse egg_clock curtain_plough net_pipe engine_brush bag_library pump_picture sock_cup spoon_bone face_arm map_lock chin_coat potato_sponge cart_house gun_circle watch_receipt feather_rod bed_cloud camera_eye hand_jewel engine_drop
+75 3 58 1 96 99 77 78 79 81 11 36 43 44 56 21 2 38 74 85 86 95 88 41 23 4 62 68 61 94 73 60 51 64 80 42 89 72 49 71 25 35 13 22 65 24 14 66 10 67 15 83 5 26 17 84 30 63 53 12
+pin_school shelf_plane cord_roof pig_drawer umbrella_wing kettle_bone apple_pipe bath_orange leaf_office stem_drain monkey_jewel pen_cat clock_island hook_gun berry_circle cheese_button oven_street brake_band whip_parcel boat_cushion dog_brain bag_pin net_fowl cheese_plate clock_tray wheel_ball girl_finger curtain_hospital tail_moon roof_bottle spoon_wire
+24 38 70 27 99 92 20 59 75 89 23 35 37 3 6 100 39 17 88 81 8 84 86 7 61 14 47 9 83 90 12
+eye_stick head_boat finger_throat street_train stem_wheel plate_stick receipt_sail tray_throat plane_trousers picture_station floor_root foot_hand apple_trousers parcel_rod pump_cheese spoon_muscle clock_thumb boat_wheel berry_leg sponge_shirt line_cheese gun_brake floor_board pocket_jewel drain_card sponge_train street_floor wall_trousers nut_worm hook_hammer skin_oven mouth_apple boot_dog neck_ticket tooth_horn garden_worm apple_church
+82 90 91 74 8 88 34 22 57 70 89 41 45 93 72 1 95 16 24 84 18 32 28 97 56 58 23 4 12 48 49 85 92 40 71 42 81
+window_church baby_boat ticket_dog board_bee map_oven drain_oven cloud_heart dress_brick bulb_pig umbrella_door thread_match drop_arch dog_nose comb_cart spring_cushion basket_farm seed_oven heart_oven hand_worm pot_blade cow_thread egg_branch bone_bird whip_wire chest_book face_fork lip_heart spade_baby key_ear fly_hat fly_brush scissors_circle sponge_ball cord_arch library_trousers star_thread worm_brake line_heart
+57 55 37 68 31 84 44 88 5 62 93 74 27 81 29 69 25 23 59 19 79 6 72 36 52 13 56 90 95 49 33 41 14 98 61 85 17 46
+skin_rat kettle_pig face_tongue scissors_nose drop_skin cord_bridge leaf_pump island_gun worm_store drain_root nut_throat spade_leg pig_prison collar_rail fish_cheese thumb_plough plate_spoon bone_nail button_angle hat_head cat_glove church_skirt brush_sock farm_skin clock_picture goat_toe wheel_floor wheel_wall sponge_apple ticket_tongue town_door spade_cow berry_frame street_key ball_boot kettle_toe box_bucket branch_bucket curtain_floor prison_shoe stomach_collar
+87 100 78 93 4 22 39 24 68 85 10 45 79 12 53 60 95 63 47 67 77 43 94 74 83 98 72 18 38 37 13 19 5 25 7 75 62 35 11 17 80
+gun_house finger_bath baby_store umbrella_feather needle_berry knot_girl town_brake foot_bag rat_tray roof_ant rod_screw apple_rod map_hospital face_frame ship_mouth engine_window net_line tail_comb frame_mouth gun_parcel bell_cloud train_stem sponge_cup umbrella_dog shelf_hair station_bone drain_board picture_pocket collar_apple sock_chin picture_ear brake_skirt band_bone comb_orange hospital_pump clock_ant cart_watch clock_church lock_army sun_plate shirt_skirt thumb_horse pencil_cloud skirt_engine tooth_egg ear_drawer parcel_key wall_mouth horse_dress ship_circle pen_finger brake_monkey sun_hospital
+47 7 93 17 25 78 19 24 35 75 54 43 72 40 100 46 92 9 87 88 82 18 64 58 8 71 37 67 41 45 38 36 16 80 85 12 51 61 23 53 39 29 66 13 95 33 27 57 6 97 48 68 4
+tongue_hair whip_kettle muscle_coat key_rat screw_chain store_rod apple_orange ring_knife thumb_moon farm_eye parcel_horse bulb_sail face_glove horse_bath wire_picture basin_army ant_wall drain_heart fly_button street_ship bell_square match_cup sock_moon comb_snake fish_rail sock_whip kettle_shirt island_mouth root_ring
+4 79 89 99 88 31 32 12 81 85 44 66 84 76 5 87 56 39 25 22 73 34 93 54 100 42 63 48 62
+cow_star wing_cart wall_army pin_bulb feather_hair cow_tongue window_collar bulb_square wheel_chain bird_bath school_pump pocket_knot sheep_carriage skin_book box_spade heart_leaf map_pot screw_bee plate_brick book_hook office_snake fowl_church box_pot picture_pipe skin_button pump_cushion drain_parcel ring_foot brain_cat rod_potato bone_coat
+93 5 64 13 20 51 46 89 65 90 72 91 77 97 47 53 16 63 45 71 82 8 44 23 15 52 12 54 95 80 9
+store_snake house_pipe parcel_screw cart_fish plough_church pump_kettle branch_roof boy_key throat_scissors girl_whistle train_hook ball_office net_goat plough_horse watch_brain tree_plough sock_key bridge_engine basket_hammer berry_arch potato_flag leaf_bucket hair_fowl rat_basket knife_coat boot_brush whip_egg bridge_square parcel_tooth plate_plough pot_store comb_chin fork_stomach leg_berry oven_hand fowl_lock
+26 84 82 79 59 100 5 32 11 13 95 53 2 19 35 92 81 86 15 54 42 36 96 3 41 12 9 31 43 20 25 16 24 99 29 90
+sock_bath drain_sail school_basket cheese_shoe snake_tongue muscle_hand frame_town rat_square nose_throat hair_flag house_carriage sail_ring boy_button bed_shelf engine_drawer pocket_finger pen_store flag_dress tooth_rail potato_cloud trousers_ticket board_sponge cow_cat lock_head prison_neck street_leg stocking_rail bulb_pig dress_boat collar_seed bottle_bird bed_plough ship_arm dress_hand
+34 61 22 14 37 63 46 5 65 15 8 70 52 69 60 88 44 81 30 28 26 93 73 6 89 90 25 50 96 1 95 10 100 62
+curtain_prison kettle_hook floor_town carriage_line curtain_foot drop_heart hand_toe street_muscle curtain_tree frame_berry potato_root box_apple button_nerve cheese_tooth wheel_toe drain_skin ship_pen mouth_rail wing_shelf trousers_rail seed_blade pump_station worm_eye chain_floor wall_stomach jewel_boot cart_bridge line_bottle finger_door oven_cheese cup_garden wall_baby plough_dog chin_dress leaf_head potato_carriage bag_plough chest_arm hammer_door fowl_line monkey_dress curtain_farm band_garden curtain_army button_pump arm_comb flag_receipt watch_rod receipt_goat
+20 12 51 58 6 67 13 98 83 86 53 28 46 64 14 71 60 34 90 19 32 77 5 44 29 22 18 70 42 35 66 30 79 45 40 41 87 16 73 97 99 11 36 92 76 33 96 24 39
+finger_card pig_train wheel_feather store_lock branch_bone feather_horse stick_face ear_mouth pipe_pig pocket_cat street_net nerve_face army_bridge picture_cord window_street root_head horse_cart apple_clock ring_sheep basin_library pig_engine arm_match frame_house toe_pocket worm_sun cake_needle hat_bag kettle_floor needle_table house_spoon knife_cart plane_camera table_needle hook_branch
+2 38 14 97 12 30 15 100 72 23 16 89 49 76 17 6 74 37 65 87 83 48 22 57 10 62 73 54 32 21 79 67 43 42
+line_hospital cushion_whip bridge_girl bridge_plough prison_pencil knot_horse nail_potato sponge_cheese root_sheep boot_pig table_pipe bag_drop rail_bed rod_needle needle_chain nerve_bed cow_boy pencil_chest stamp_egg leaf_pocket stick_island leaf_spring girl_star muscle_wall horse_knife ticket_nose cheese_hospital cord_eye foot_fowl fork_hat tray_ring hand_eye nerve_sun umbrella_cord oven_eye knot_pencil cat_school spoon_street muscle_pen potato_fowl blade_bag chest_girl hospital_tree sponge_muscle spring_cup lock_bridge sheep_chin thumb_baby blade_sock root_sail bucket_hammer sheep_bell house_egg line_bell bee_pen ring_stick jewel_watch hook_knot map_net pocket_cup glove_table hospital_camera
+68 51 6 37 88 38 32 5 8 44 1 54 86 81 66 91 40 49 9 83 69 71 78 15 80 72 12 42 43 14 31 84 52 20 11 87 55 75 100 60 18 36 99 59 27 96 39 94 74 95 56 19 21 2 29 64 79 62 30 25 28 85
+boot_ball garden_pen bath_station orange_stamp bulb_dress tongue_ear pencil_door pump_cup lip_station spring_garden toe_picture hospital_plough cushion_spade jewel_bird coat_picture pen_tongue card_brake whip_curtain baby_bed prison_brick comb_baby net_pocket finger_arch board_square engine_nut knot_hand cup_ear square_nail whip_cloud chin_nut pocket_heart line_horn screw_nut moon_mouth cloud_basin screw_rod wing_head
+20 31 70 81 68 24 79 10 14 5 22 44 86 47 13 91 61 97 65 27 54 59 38 42 12 17 2 100 90 71 74 58 16 35 52 23 15
+office_sun brick_glove stick_school glove_chest door_stomach throat_heart egg_pin sock_moon sock_fish house_boot shelf_floor mouth_pig basin_map carriage_girl hat_horn stocking_ear bucket_bulb rat_gun kettle_coat house_hair church_sock sponge_key library_plane boot_watch train_lock heart_screw nut_board brush_train window_cake needle_bucket basin_drop window_dog finger_boat brick_carriage
+14 18 41 94 64 42 52 31 56 54 80 50 38 37 16 32 72 66 24 76 6 55 90 4 36 46 87 2 1 21 25 19 3 82
+wall_gun rod_hook horn_ship basket_train whistle_hair shoe_boy face_bath egg_sock street_throat chain_trousers sun_nose house_brush branch_umbrella screw_street board_plate bridge_nut root_parcel shirt_cord fly_sock scissors_boot fowl_bell house_nut
+15 55 54 99 34 60 2 19 77 69 87 7 70 66 85 48 32 18 71 59 58 1
+drain_engine chain_bag prison_monkey bath_farm thumb_lock ring_mouth pen_roof plough_thumb house_ball spoon_pump brick_ant basin_tail trousers_moon ball_whistle receipt_boat comb_ship knot_bottle collar_army boot_band street_ticket flag_potato square_street finger_fork knee_ring girl_fowl parcel_sheep basin_head face_fly egg_sun wheel_head cart_horn ant_garden house_match brick_pocket line_leaf jewel_monkey table_arch tree_hat window_library needle_window square_comb hair_spring foot_ant baby_orange pot_arm fly_cloud cart_fly cushion_sheep leaf_sun ball_cat bath_tooth wall_wheel tray_prison town_wire net_bell band_thumb library_boat sock_station roof_library egg_boot
+75 66 44 77 9 32 48 78 38 25 64 59 39 83 88 50 97 58 31 73 21 79 94 29 68 55 53 54 49 57 18 30 98 28 42 76 19 86 37 95 72 22 100 24 3 81 82 20 69 46 14 8 47 12 52 2 71 13 43 40
+worm_army nail_tooth moon_drain collar_ball leg_pump basket_table boy_orange bed_angle stem_tail hospital_match pin_army ant_fork heart_branch hand_band button_clock cheese_knee plate_prison fowl_shirt collar_tail fly_door lock_pen seed_girl arm_brake lock_horn brick_dress brick_band brush_pencil
+72 93 11 87 80 78 77 54 16 1 4 64 12 19 67 68 53 10 86 55 99 47 89 43 20 42 36
+monkey_snake whip_tail mouth_wire watch_plane drawer_nose bulb_bottle blade_knee arm_toe trousers_tongue boy_brush head_boy blade_leg cat_pot floor_fly skirt_baby plate_camera farm_neck head_glove store_feather boy_boat ant_hand nail_face bone_ant egg_tongue coat_circle berry_horse garden_pump glove_face watch_ant window_store thread_neck receipt_mouth sponge_pin pump_house cake_sponge ear_dress bucket_town circle_stick baby_comb square_fowl wheel_wall thread_rail pin_tray hat_receipt pig_orange sock_nail line_fly plate_muscle stick_hammer picture_ship pencil_window
+11 77 22 51 88 32 21 80 45 35 49 83 12 85 25 43 53 84 94 8 47 72 36 63 16 13 97 48 52 40 56 34 26 28 27 90 2 46 98 60 79 87 6 14 33 37 62 10 41 70 5
+tree_brake chin_hospital stick_frame pen_bag comb_rat blade_collar spade_carriage toe_baby farm_bulb floor_shirt tail_heart cloud_basin blade_spade button_bee library_foot knee_floor picture_orange foot_toe angle_berry dog_carriage chain_bee stomach_fowl worm_brake blade_door
+50 64 78 85 2 4 57 74 91 21 99 58 81 30 75 94 49 33 43 69 13 93 40 71
+boat_stocking mouth_bottle lock_finger cake_bridge toe_flag kettle_shelf root_stem fowl_tree stick_bird net_basket spring_hammer ear_cushion wall_screw stomach_sun drop_parcel gun_door bulb_train army_line spade_circle island_horse wire_knife pump_street hospital_dog spade_sheep button_whip knee_brick head_store office_ticket gun_cake arm_nut
+46 87 100 48 52 94 13 89 1 17 63 7 73 25 69 41 38 82 3 40 88 29 8 72 5 14 22 9 76 60
+net_horn whip_square gun_band bucket_book girl_ball boat_moon rat_cheese fish_sun fowl_knife ear_scissors chain_ant bag_pot carriage_stem pig_key horn_office plough_clock carriage_nail wing_collar leg_sock band_knee key_drop cloud_chin stamp_station snake_cloud flag_pot plate_bee coat_bottle station_pen book_wall parcel_wheel sail_drop sail_store button_boot store_brake flag_cart foot_horse receipt_brake
+53 43 80 83 69 58 96 85 51 13 24 52 19 40 21 41 9 77 98 17 31 71 44 49 63 55 2 95 59 35 10 54 50 67 89 70 74
+gun_engine hat_train nose_camera ear_key trousers_neck brain_chest prison_watch sun_fork neck_brain bottle_table throat_train screw_hook thread_boot ring_apple chin_ball moon_knot umbrella_horse tooth_tongue berry_knot key_orange circle_camera thread_store army_needle shirt_dog scissors_stomach map_comb hook_knee wheel_fly farm_basket shelf_head kettle_bed stamp_shirt hat_bell pig_wire band_nerve curtain_sheep hammer_pipe bridge_band bone_pot collar_kettle umbrella_wheel bed_nut skin_bucket face_fork skin_garden island_sponge sail_goat worm_hook heart_pig plate_pin trousers_band shirt_bulb heart_rod wing_ear bucket_cloud street_floor spoon_clock spade_throat button_cup cord_store umbrella_arch boat_parcel orange_island tooth_floor
+35 19 67 18 3 20 63 71 8 79 42 43 96 45 53 89 100 28 11 56 76 90 60 50 62 78 75 30 88 66 64 61 37 74 87 70 5 10 13 95 86 65 2 54 98 33 49 1 97 21 55 4 48 81 83 69 32 34 52 9 77 84 29 39
+key_store leaf_thread clock_receipt boot_potato nose_receipt finger_sheep leg_dog key_knot floor_table umbrella_girl town_ant table_stick hospital_cat stomach_basket plate_office trousers_farm plane_cat shoe_bag nerve_pin branch_bone cart_church rail_door book_worm basket_shirt key_egg cat_scissors toe_stocking stem_whip horn_girl fowl_hand parcel_stomach branch_hand bell_box finger_girl berry_frame sun_whistle scissors_fish drain_chain bath_toe boy_star goat_army ear_needle knee_frame oven_drawer shoe_wall watch_knife cloud_station cow_ticket frame_tail picture_cloud wire_door eye_fowl neck_seed bone_cloud branch_farm glove_camera nose_worm
+85 1 47 20 46 3 75 32 7 43 34 16 74 25 6 57 82 50 79 9 33 48 2 98 97 93 38 77 94 29 54 70 71 44 89 100 23 51 84 90 73 18 52 14 5 92 76 24 60 35 17 41 13 62 15 80 55
+head_screw seed_office plane_match picture_brake branch_tree stem_station floor_bell sponge_cheese root_horn cheese_ear floor_horn hook_chin baby_ear window_lip brain_book kettle_toe library_pen mouth_seed station_heart pig_trousers bed_worm chin_needle carriage_sponge needle_ball cushion_eye horse_rat glove_box knot_kettle nose_sponge horn_hair brain_bulb shirt_spring spoon_spade scissors_farm drop_plough scissors_match island_floor eye_muscle knife_ball boot_cloud leaf_foot
+62 54 39 53 65 81 86 50 41 73 3 23 29 35 47 78 59 2 5 82 38 10 31 28 98 69 56 51 95 71 48 84 15 100 43 1 88 70 66 34 49
+hand_pig cheese_thumb hammer_trousers plough_window pipe_comb arm_boot pin_pig chain_bed brush_skirt feather_gun orange_dog arm_knot book_fish
+43 77 65 62 96 7 8 70 44 45 5 49 55
+receipt_arch whistle_leaf gun_circle map_parcel cow_knot school_bottle leg_arch berry_pencil camera_egg spring_boat square_arch cat_oven bird_knot parcel_snake neck_potato door_prison whistle_bridge monkey_cup wing_kettle arm_potato table_town watch_throat card_coat drawer_thread head_sock foot_pocket fowl_nut brick_house cord_cart spoon_book pocket_star skin_lock monkey_face eye_knot stem_pencil mouth_spring nose_tooth spoon_pocket clock_garden tongue_wheel skin_spring nut_ball basin_hair mouth_shirt
+18 12 36 41 54 72 42 20 81 99 97 23 98 9 94 50 40 77 31 44 79 70 91 68 5 34 17 67 86 4 15 62 10 53 30 46 3 21 95 89 83 13 64 71
+pin_ticket church_whistle table_ball book_floor hook_trousers engine_orange bottle_bath army_flag station_stick bee_bath blade_army mouth_bird throat_garden drop_spoon gun_chest roof_cart roof_rail window_finger book_circle stick_ship cake_pump chin_worm library_kettle seed_street kettle_office rail_line carriage_knee tooth_town street_knife picture_coat pencil_nerve whistle_heart cake_line eye_whip spoon_army rail_clock angle_nose leg_farm roof_card worm_skirt rat_basin farm_hook finger_match lock_shirt box_trousers pipe_egg boy_farm whistle_mouth stamp_plough church_rail blade_stomach knot_thread arm_square bottle_rat spoon_net
+62 30 59 45 91 19 67 20 2 60 49 71 72 98 5 11 51 86 93 68 9 21 48 52 6 22 85 84 7 1 88 89 97 14 10 27 74 99 80 37 18 77 83 15 8 90 64 34 12 41 44 58 28 24 4
+stamp_brake garden_ticket hammer_pen ball_basin office_ant pot_train button_cart army_card toe_sail house_berry hand_knot sheep_ear chain_chin ship_boy square_camera circle_key moon_thread snake_bird plough_wheel station_nut pocket_stem coat_engine shoe_card
+26 87 25 65 81 5 80 71 28 74 96 15 84 41 45 85 6 98 36 82 19 18 34
+bird_ant snake_sponge kettle_wing heart_bridge knife_scissors boot_garden pot_brush potato_house cup_cheese carriage_pot boy_apple key_skin head_oven pig_shelf hat_pipe horn_parcel bulb_spring bucket_window collar_jewel angle_office horse_army line_bed carriage_arch pot_trousers bath_umbrella brain_bone whip_stamp tooth_baby ring_rod pipe_basket chain_leg skin_oven plane_baby throat_board stamp_thumb door_sock clock_wire fly_pencil arm_pocket
+96 9 62 92 47 40 31 8 100 52 51 46 68 55 20 19 89 4 42 78 1 94 80 45 49 28 91 87 98 90 79 70 10 65 13 37 77 69 36
+watch_needle chain_carriage muscle_throat island_street whip_pot comb_card tree_store skirt_cheese drawer_cat skin_flag square_boat skirt_bell circle_prison umbrella_shirt head_moon bucket_garden cart_apple sheep_leg apple_worm chain_coat seed_pocket street_pin bath_tooth knee_town cake_shelf arch_office clock_carriage
+90 69 46 45 12 39 3 31 84 92 99 41 64 22 56 52 83 66 28 21 85 62 54 25 97 82 74
+cow_square hook_moon dog_pin heart_cloud frame_train engine_brain eye_skirt horse_drawer cake_clock wheel_potato curtain_island brush_ring fork_pipe parcel_wing needle_cat pot_moon bone_bath street_farm library_potato needle_brake farm_frame muscle_store face_bone stem_farm skin_cloud board_snake throat_boot shoe_cat curtain_station band_knot train_dog pot_fowl ball_hair boy_wing sun_hand rat_nut island_door office_apple town_sheep map_shelf bulb_floor needle_ant farm_boot
+26 27 33 44 62 32 94 50 86 84 95 49 59 78 81 53 74 13 83 77 90 100 96 71 14 76 91 67 17 48 54 20 18 11 60 57 9 42 15 12 68 73 47
+pocket_dog arch_cart pump_bone heart_boy fly_bridge lock_cheese floor_bee hook_net lip_church prison_boy chain_tray heart_circle knot_chin jewel_chain egg_book muscle_bed tree_neck toe_board camera_foot drop_cart leaf_nail dress_office heart_face monkey_apple seed_star arm_pig angle_drawer brake_chain table_cake brush_horse bridge_stocking whistle_camera hospital_potato train_window coat_clock pocket_brick star_toe drain_button parcel_circle pencil_umbrella gun_cheese cloud_pot potato_glove goat_cow garden_brush brick_pencil goat_house arch_spade clock_heart school_church drop_picture rat_circle
+43 29 10 37 47 35 27 39 46 94 45 21 79 86 82 5 83 28 52 87 9 75 68 4 74 56 61 8 1 12 96 7 85 6 22 59 66 13 19 100 65 55 2 14 89 63 64 25 16 99 91 50
+sock_ticket hair_tail cloud_picture tooth_carriage wire_moon tail_line thumb_band knee_cord board_button blade_brake farm_sail thread_blade chain_shoe picture_parcel girl_rat hook_foot knife_stem leaf_cat house_muscle wing_table toe_floor oven_spoon snake_line pocket_whistle key_table knot_arm basin_star door_drain farm_wall apple_board arch_plough pocket_brain shelf_blade clock_school thread_cord apple_prison bridge_collar ball_ant sponge_mouth army_table jewel_stomach
+89 16 37 7 11 66 23 19 2 73 78 59 98 93 15 76 85 52 80 55 30 50 33 29 51 64 69 70 4 13 56 83 9 6 65 44 90 8 91 45 87
+hand_glove station_egg nut_thread nut_horn knot_spring ship_ball moon_chain station_trousers circle_apple pot_wall arm_dog gun_baby band_shoe roof_tray snake_door boat_brain sail_needle branch_horse neck_cheese shoe_baby tongue_drawer shelf_seed thumb_umbrella clock_knot line_picture goat_fish
+24 34 54 79 41 89 77 72 74 14 61 1 6 57 99 70 97 62 42 16 73 58 51 93 64 90
+bulb_horse berry_fly rat_band cart_spoon chin_store engine_tail school_spade basin_rail branch_cord net_bag skin_island fish_potato square_monkey board_plate spoon_match stomach_nose bulb_muscle feather_sun stamp_coat sun_map orange_stem nail_throat bed_bulb stamp_ear drop_pump ear_brick scissors_bed bird_collar stick_brush whistle_station scissors_potato chin_needle oven_pipe wire_roof map_square pipe_drop cord_plane leg_apple
+74 1 97 94 59 26 75 45 89 98 76 52 96 71 2 34 57 40 8 49 38 64 3 30 24 7 82 23 86 85 100 67 56 91 88 28 5 87
+store_hat sock_cushion nut_card gun_head wheel_finger chest_brake cord_card leg_book chain_fowl cushion_spade girl_rail bed_jewel potato_stocking fly_plough thread_cup shirt_knot bee_drawer neck_prison station_fowl library_cord sock_pump tree_trousers foot_dog mouth_line rail_door floor_sun garden_comb arch_sun hair_whistle nut_angle
+41 37 49 19 85 39 59 34 64 55 28 23 82 5 33 1 29 66 54 89 75 40 88 71 35 48 14 91 61 45
+pig_brick goat_bucket hook_boat coat_sail cushion_throat monkey_feather finger_monkey horn_square whip_scissors wall_feather muscle_ball cat_snake tree_farm feather_cat line_button train_feather cushion_board circle_fish prison_cheese cloud_oven cow_whistle lip_square sun_knife school_hat ship_umbrella parcel_leg tree_hospital worm_dog hat_apple clock_worm bird_toe blade_tray sheep_angle
+9 23 65 15 86 3 25 50 57 89 51 74 78 58 39 83 11 90 84 81 100 14 79 94 61 6 42 93 28 35 68 82 54
+prison_rat star_blade cow_spring shirt_throat collar_kettle stomach_basket curtain_bottle cow_button drop_nut rail_goat town_baby gun_watch kettle_root bed_seed sheep_map skin_pin bell_branch stomach_bag sponge_cake fish_prison brick_garden cart_cup lip_star bottle_tail ring_fowl ear_pin bucket_farm knife_camera root_tooth berry_door arch_bulb wire_nose gun_brain pencil_ball tongue_stick stick_basket chain_dog tooth_branch monkey_rail drop_egg shirt_cloud
+40 24 46 85 100 26 53 11 31 7 73 84 87 32 74 67 35 8 88 78 72 60 45 89 65 62 29 77 55 4 80 48 25 91 1 44 61 21 41 83 99
+knot_house ship_fowl book_nut cheese_net tongue_stick drop_rail bed_rail pipe_rat branch_bird
+95 4 68 19 16 70 56 8 99
+cake_carriage garden_leg muscle_cart key_pin bridge_branch boot_dog island_pipe fowl_knife ear_circle hair_cloud brush_rod map_stem square_arm fowl_brain rat_thread plough_frame boat_face cow_hat store_cloud finger_whip heart_trousers tail_engine rod_dress bed_stick bee_cushion flag_button plane_sun blade_map camera_branch rail_pump sun_skin house_box knife_picture moon_ant basket_pipe ball_knot leaf_hat cloud_bottle boat_whistle cat_skin prison_wing glove_nail
+71 38 34 51 25 19 44 52 60 91 26 85 89 83 15 27 17 68 36 66 94 22 31 77 45 53 79 73 64 40 57 84 81 54 99 96 80 4 58 63 37 10
+station_pin pen_foot face_tail pipe_needle button_fly camera_hair bell_tooth skirt_head skirt_pencil knee_snake nose_street scissors_wheel pump_band bag_thread bulb_roof angle_button pig_bucket arch_fowl knot_net curtain_hook needle_goat ticket_fly bag_match star_school cup_cart goat_boy cloud_picture hospital_ball finger_feather bell_bag horn_seed sponge_bottle tooth_clock train_engine door_boy island_blade snake_cup cake_finger farm_sock bell_town eye_boot island_dress leaf_cat tray_fly
+90 58 30 20 7 73 41 22 35 60 4 70 32 100 86 78 11 44 45 50 36 48 55 23 96 56 68 65 69 98 12 49 1 72 27 87 82 64 51 2 34 39 38 10
+stocking_station bed_horse sail_board cart_bag drain_sail umbrella_cup frame_thread shelf_whistle hospital_blade arch_office school_trousers hospital_tail plate_chin orange_brush stamp_station bell_star cart_cake stamp_skin knee_dog horn_bulb band_root chin_door egg_shelf board_seed wheel_angle flag_cloud basket_window basin_pencil stick_screw cushion_oven moon_bath shelf_arch tree_dog collar_hammer boy_moon egg_wire knee_coat pin_curtain band_key frame_floor cloud_train fork_goat hospital_basket
+52 56 16 72 90 26 60 46 44 62 30 99 22 6 84 85 20 65 76 50 55 94 75 95 91 68 80 18 71 45 11 32 64 63 3 29 74 82 37 73 28 31 35
+fish_wall engine_dog leaf_stamp angle_wing cushion_angle sail_cat scissors_egg worm_sun card_apple apple_sponge thumb_rail spoon_rat spade_thumb square_bucket cart_brake drop_sock net_gun
+65 7 70 99 33 95 90 97 12 54 52 67 39 23 61 13 78
+scissors_book bag_angle square_orange bee_potato muscle_ant apple_curtain camera_muscle drop_spring watch_army bucket_horse
+95 16 15 44 27 61 94 51 17 52
+dress_cart neck_tail orange_library root_dog parcel_garden frame_muscle cart_band knife_bottle leaf_star shirt_bed school_bell shelf_ant button_library cushion_berry drop_line plough_leg shirt_toe bridge_house monkey_rail stem_rail berry_roof tooth_skirt plough_town rod_snake pencil_blade mouth_pen box_frame
+50 5 46 52 1 61 23 35 6 97 3 2 56 80 87 36 27 20 14 64 51 75 32 15 76 62 86
+store_chain lip_garden pig_cushion brush_seed baby_eye watch_plane potato_flag hat_circle foot_square coat_orange seed_shoe scissors_line tongue_apple fork_spring dog_sponge brain_net rod_horse head_cup orange_hook tooth_tail stomach_cake glove_drawer sheep_hammer arch_brain orange_cake arch_table needle_sheep bed_dog bucket_frame throat_hat moon_boy horn_nerve station_shoe wall_leaf baby_coat scissors_bed drain_hand spring_card shirt_plate needle_window island_worm brush_line house_train gun_cloud brain_cheese bee_oven pen_roof cloud_book match_store roof_horn pocket_wheel store_stamp nose_bottle
+94 97 46 57 54 87 98 43 11 5 66 76 49 77 10 17 61 52 53 1 91 78 93 44 29 62 40 39 32 7 73 13 12 27 55 8 100 33 59 15 67 24 82 72 51 65 47 75 89 25 20 85 81
+bird_button shoe_wing cloud_chin dress_egg plate_whip net_shirt coat_engine scissors_chain frame_star boy_cake spade_office card_apple sponge_store gun_rail baby_farm
+90 26 99 17 80 60 70 72 47 97 95 8 28 57 91
+tail_ring fish_street dress_drain snake_arm umbrella_goat board_garden star_hospital throat_hook store_whistle ship_lip rat_knee drop_eye head_stick bath_pump head_line stem_spade bulb_parcel engine_eye box_head library_fork town_pipe kettle_boot skirt_train apple_glove berry_monkey monkey_root cat_drawer basket_sun cheese_army button_roof nail_ticket bone_scissors brain_box wire_brake camera_office bee_jewel nail_square thread_church hair_hook army_drain box_skin cheese_thread sheep_button cup_blade card_spoon blade_bee orange_door prison_throat camera_boy army_knee eye_bed ball_foot collar_coat spade_rod circle_feather
+21 87 93 47 52 95 62 90 81 35 70 20 60 5 8 14 61 22 86 15 67 53 98 37 10 38 74 25 57 58 33 31 32 9 84 49 51 29 72 12 59 85 97 42 55 88 19 73 68 23 78 44 71 43 6
+glove_leg fork_head ball_garden hospital_lip thread_drain cord_knife knot_board key_hat hair_horse baby_ant knee_branch gun_plough feather_tail square_apple ticket_receipt window_train wheel_street train_hook garden_fowl feather_brake plate_leg eye_toe house_pipe bucket_key bucket_chest collar_lock garden_bee chest_plane farm_rod stamp_knife thumb_goat snake_knee picture_window basket_bone brake_town jewel_bell
+99 96 93 84 80 82 19 89 28 63 5 66 6 31 77 85 25 72 29 76 16 79 91 88 37 27 90 24 69 7 74 41 21 59 36 4
+tongue_glove ring_frame flag_ticket station_door pump_head potato_shoe nail_brake hand_office cup_blade gun_church tray_chain wall_pig book_knot ticket_rod fish_line
+39 22 91 53 13 87 34 77 27 11 21 31 86 19 71
+door_rod dog_card board_brush brain_map cord_plate angle_carriage tooth_roof boat_hat frame_chain town_angle hook_fish spade_cloud brick_toe key_head apple_muscle cloud_boat band_key leaf_roof brick_stamp rod_gun net_knee cup_spade branch_stamp nose_sponge seed_cat chain_boot island_egg
+15 81 94 88 68 69 1 11 35 36 58 64 31 22 38 63 66 98 53 47 44 71 59 52 87 96 33
+oven_ship knife_book boy_jewel girl_snake chest_dog carriage_cart pocket_frame frame_cloud sock_street whip_lock brick_bird drain_engine bucket_stamp carriage_knife window_flag toe_circle shelf_basket spade_fly arm_stomach card_shirt drop_chest moon_rat wire_cat pig_rat whistle_knot stick_cord parcel_sponge girl_rail cord_hospital door_bottle jewel_circle rail_lip stick_tail collar_window knot_pocket hook_boy
+57 82 12 77 31 74 15 76 73 35 37 95 92 11 64 75 66 94 89 18 55 25 100 46 47 38 39 20 83 98 19 6 48 13 88 26
+gun_board bag_band clock_muscle card_square kettle_tail camera_match boat_feather ticket_girl picture_seed board_rail goat_pin lock_knife garden_pump ship_watch cart_heart shirt_wall shelf_parcel sheep_bucket island_store face_skin feather_curtain hospital_street whip_wire boy_drawer angle_knife star_drop church_bee island_sponge basket_clock pot_town street_store key_skin library_snake trousers_spring comb_rail gun_coat hat_ticket horn_farm stem_rat
+41 10 96 37 80 52 30 9 7 57 49 27 38 100 56 64 69 93 39 76 13 71 26 77 2 72 85 17 74 45 8 19 67 29 83 68 28 60 1
+sail_key girl_town worm_library fly_stamp button_fish bee_eye square_store stocking_seed scissors_tooth box_circle brick_whip monkey_angle sock_flag kettle_bucket garden_root flag_watch boat_sun hospital_cord thread_knife square_brain house_book cheese_cake
+63 16 42 29 70 5 3 37 8 94 89 21 1 2 61 48 95 100 25 59 71 76
+flag_oven nail_house board_bath screw_shoe tree_fork stick_thumb basket_town card_square ear_shirt street_spring shoe_mouth feather_muscle nut_library whip_monkey cake_chin bed_receipt cake_toe lip_cloud army_hospital spring_cart stocking_net basin_monkey tongue_ship comb_sock pencil_ship baby_drawer pencil_fork
+76 25 81 5 44 59 47 79 67 83 91 65 84 55 27 85 98 48 4 36 24 32 19 11 94 54 3
+fowl_spoon fly_bed store_cloud leaf_basin street_cushion cloud_ball square_fork curtain_bone comb_train button_carriage pencil_box nose_pipe pen_bridge knee_sun pin_whistle cloud_jewel door_lock bell_drawer train_thumb monkey_stomach toe_girl brush_stem school_cat frame_rod store_hand bridge_engine nut_cake dog_brush receipt_eye chest_stomach camera_feather watch_stomach chest_stem sail_fly foot_fork basin_boat chin_tail snake_knife rod_fowl receipt_drain rail_arm drop_hair cord_plate apple_tree oven_tongue pig_cat boy_trousers train_hook plough_sun pump_tray store_stamp parcel_spring stamp_feather wheel_sponge kettle_dog brush_bucket
+35 41 88 49 90 18 16 95 71 94 6 30 46 66 50 51 52 53 82 81 11 17 73 37 69 15 99 32 100 31 5 67 24 48 91 29 72 14 43 13 21 26 28 79 27 23 42 39 2 60 62 8 76 86 7 98
+horse_spring pin_trousers receipt_drop fowl_pin girl_pump neck_knife foot_house thumb_bottle prison_pin board_muscle library_bee foot_thread star_pocket clock_plane curtain_worm thread_horn knife_heart flag_street gun_snake nail_comb knife_bed egg_drop knife_finger scissors_frame brain_bucket girl_apple hand_bee island_cloud button_thread pen_store camera_moon neck_hair knot_farm bucket_orange pencil_lip chin_plough board_boat pocket_bucket brick_skirt cord_farm potato_girl brick_sun bulb_bee boy_comb brush_sail rat_potato spring_sock basin_brick glove_baby knife_prison nail_cart chain_umbrella drop_cup bag_sponge rat_bridge trousers_stick dog_arm stocking_office
+71 44 86 40 89 48 12 49 96 78 35 80 57 75 58 43 55 51 25 5 84 24 53 2 61 74 45 65 26 56 76 19 39 20 33 97 77 27 99 31 36 60 23 41 79 72 6 94 82 69 4 34 85 54 46 59 37 70
+cord_stamp bee_bone heart_tail jewel_tree feather_net hat_cord seed_cup pen_whip bucket_fork cord_muscle pin_cloud feather_angle angle_station tray_island fish_hook arm_window baby_face cake_tongue girl_drawer lip_plough leaf_boy neck_spoon eye_church wire_screw plane_basin skirt_lock card_drop stick_circle town_stem map_goat horn_fowl house_store jewel_wire cow_bell plough_fowl collar_chain fish_spade foot_shirt jewel_needle cushion_engine pin_map clock_stocking star_bed collar_wall skin_church key_skin finger_cheese angle_toe match_heart mouth_snake wheel_basin scissors_nose throat_door mouth_monkey brush_picture
+27 17 12 84 90 50 7 95 45 46 19 62 75 18 38 26 20 44 11 99 74 71 30 67 65 82 89 3 79 81 39 53 33 23 22 5 4 88 60 37 91 72 77 16 80 86 96 43 63 29 61 87 31 57 69
+cake_spring apple_skin rat_school drain_chest egg_watch brick_blade drop_horn drain_key knee_egg pen_umbrella girl_camera angle_neck stick_pin feather_bridge dog_sock picture_garden horse_brush pin_stocking drop_baby pig_bath neck_ant cart_pin spade_glove throat_match needle_picture pencil_worm net_sail branch_floor fly_circle neck_cord dog_star cord_cloud pump_potato shelf_pin eye_boat screw_apple house_skirt basket_island screw_spring boat_angle sponge_pin horse_chin board_floor head_ear bed_button rat_stomach trousers_receipt chin_angle spring_stomach pot_knife ship_cushion sail_church prison_sponge fowl_chest army_shoe angle_hospital whistle_line bell_shelf picture_mouth moon_hat
+23 70 98 87 76 95 9 12 56 7 66 5 74 57 62 43 88 34 2 77 63 82 96 79 37 39 31 83 59 15 47 84 38 81 52 28 36 85 92 46 22 97 33 21 4 11 48 55 78 89 69 1 32 91 42 93 24 14 100 40
+stamp_ring boat_camera stamp_receipt tooth_net card_sponge tooth_tray scissors_fly horn_spring school_square cat_comb stem_root arm_brain button_egg farm_coat card_leaf station_rod bridge_cat eye_rat neck_house oven_train skirt_nerve umbrella_orange board_comb net_bell screw_angle brick_brain net_basket spring_pin umbrella_office hair_fowl nose_screw finger_town leg_knot goat_heart sail_library receipt_finger cup_thread ticket_watch blade_bulb key_sun pipe_pot star_bed horse_heart monkey_jewel chin_floor arch_lock
+49 90 41 50 84 47 38 43 23 99 54 62 19 3 60 57 98 33 61 59 42 55 51 83 37 78 91 34 73 93 39 11 82 26 15 48 21 94 65 7 36 12 20 5 70 71
+school_pen roof_chin clock_whistle bridge_coat pipe_fish sponge_baby plane_board street_ring brake_arch drop_angle pig_pen egg_stem leg_bee carriage_coat arm_ship floor_head door_gun ticket_baby island_rail blade_street knee_horse board_hammer button_bee bird_band pot_pump shoe_coat bell_key bucket_cushion
+82 8 14 23 93 2 34 58 15 29 43 6 94 51 71 53 4 10 61 60 44 3 42 83 88 47 95 48
+lip_leaf bed_fly tail_knife stomach_kettle stick_sponge circle_baby house_hammer plough_nut boot_heart monkey_whip band_boy
+33 13 18 80 24 30 62 79 63 60 71
+egg_plane glove_house bottle_chin net_ant ring_screw sponge_dog tongue_leaf bed_rail baby_moon clock_roof stamp_apple
+76 41 4 30 5 99 7 83 23 91 56
+cushion_stem camera_wing pin_scissors mouth_wheel pipe_spring bottle_spring school_spoon head_table thread_cup thumb_knife scissors_bird table_thread branch_stocking frame_clock ear_bulb house_door orange_feather prison_spring mouth_pencil stem_comb bag_garden library_basket bridge_brain tongue_picture church_garden thumb_island cushion_sock door_match nut_tongue skin_fork house_oven whip_trousers root_tongue glove_fish bone_engine wheel_tree watch_brain
+64 50 60 51 33 5 88 15 91 42 36 67 49 78 35 10 98 4 13 41 66 6 48 70 95 96 16 47 20 21 75 11 37 26 76 86 74
+board_fly stick_face dress_farm drop_shelf berry_army egg_rod cup_wire comb_baby lip_card basin_hat basket_roof lock_finger pen_station nerve_ant chain_sheep hospital_thumb coat_book fish_board garden_skin pump_eye cake_prison
+29 45 48 2 51 88 18 15 38 19 8 24 50 49 26 66 70 25 85 13 72
+camera_bucket roof_fork potato_sheep rat_frame ball_shoe library_muscle cloud_spring bed_cheese brain_horn tray_ball cheese_lock brain_tray wall_nut frame_shirt flag_fork wing_berry goat_card kettle_face box_pencil bucket_shirt card_cloud hospital_drop frame_egg nose_cheese nerve_gun ant_pig office_kettle trousers_arch shelf_whistle lock_bath bottle_tongue bed_pocket horn_bucket stomach_sail dog_dress umbrella_hammer sun_tongue glove_bone head_shirt picture_head button_cheese muscle_baby
+61 69 49 63 8 95 36 14 74 16 50 58 17 85 93 78 29 66 73 5 54 44 24 42 30 99 12 15 53 20 6 60 34 71 89 64 97 76 1 10 65 21
+branch_school horse_toe train_camera bucket_wheel sock_button prison_dog drawer_glove hair_pencil bottle_jewel sponge_sail brake_map library_boy station_baby potato_church plane_hospital arch_face stick_ear horn_brush nail_table bottle_trousers line_fish monkey_nail board_glove bucket_map house_brain hook_hair
+56 97 89 29 36 45 25 19 13 34 70 76 52 87 41 92 18 17 11 4 46 86 82 99 90 22
+tree_fowl kettle_bulb dress_arch heart_seed horn_sail thread_skin engine_nail rat_window sheep_nail hospital_knee feather_nerve army_angle pencil_brain hair_knee thread_floor shelf_pin house_cake ticket_map knot_pump girl_table tail_needle tongue_sun cloud_sponge cheese_match fly_thread bed_cushion sock_fish store_fish brush_nut prison_star girl_dog muscle_pin fork_pocket prison_arch needle_ear garden_cup bath_sun apple_line clock_apple plate_wall tree_curtain stick_screw
+34 28 48 5 96 10 61 76 40 13 58 43 12 97 74 99 69 42 81 75 23 46 88 41 55 33 52 24 77 27 37 50 72 8 94 16 95 20 73 3 9 36
+apple_cake head_trousers band_table boy_box toe_shoe bee_wall frame_drawer office_circle branch_baby pencil_prison watch_tail train_fowl map_street snake_berry hair_collar sock_brain cheese_leaf berry_face wall_house receipt_umbrella clock_baby roof_horn ball_spade cup_frame kettle_prison card_stamp
+30 98 46 13 48 6 16 66 82 35 95 89 47 49 99 36 67 45 51 3 69 53 15 44 1 68
+knee_worm tree_foot nail_leaf dress_leaf cord_carriage screw_knee board_nose brain_net card_prison floor_angle office_frame drain_sail cat_sock star_thread cup_apple ticket_cow glove_line cushion_foot shelf_garden shirt_sock frame_angle button_tree head_dog prison_orange sponge_egg brick_horse street_band neck_knife wall_cake basket_foot watch_map basin_cushion
+63 91 14 65 19 88 62 77 26 21 64 39 67 49 89 45 27 3 50 47 38 85 23 20 60 71 1 74 80 81 34 24
diff --git a/codejam_2008/src/y2008beta/B-small-practice.in b/codejam_2008/src/y2008beta/B-small-practice.in
new file mode 100644
index 0000000..da48de5
--- /dev/null
+++ b/codejam_2008/src/y2008beta/B-small-practice.in
@@ -0,0 +1,201 @@
+100
+code jam foo bar google
+20 15 40 30 60
+code jam foo bar google
+20 15 40 50 60
+code jam foo bar google
+20 70 40 30 60
+code jam foo bar google
+20 70 40 50 60
+code jam foo bar google
+60 30 40 15 20
+code jam foo bar google
+60 40 30 20 15
+bar code foo google jam
+20 15 40 30 60
+jam google foo code bar
+20 15 40 30 60
+foo bar
+3 2
+code jam
+3 2
+needle hair curtain knee fowl book
+86 96 8 89 50 26
+girl garden scissors tail
+57 14 31 6
+chain window brake picture gun library finger
+90 83 15 60 5 52 26
+sail wire floor
+81 82 36
+umbrella brick stocking
+98 90 23
+glove jewel trousers frame knee
+60 51 17 14 10
+skin lock knot ant seed plane
+85 8 100 69 32 84
+town chest plough
+60 6 25
+potato face hospital wall bag
+91 47 24 61 11
+ring stamp boat camera collar nail hat
+2 88 31 9 43 36 76
+pot camera stamp skirt fowl office fish
+55 92 64 59 81 27 39
+pipe muscle dog engine egg finger pump
+14 23 16 79 81 40 89
+nail chin tray berry heart
+39 6 45 26 68
+ring pencil curtain pin window
+10 73 32 22 30
+needle pump fish
+79 84 2
+tail ball lip rail clock arm sheep
+8 72 38 39 35 76 32
+spoon berry prison arch fly plate island
+66 82 19 58 86 72 50
+bee boy sheep
+2 94 86
+bed worm dress cord face head
+20 8 7 18 49 27
+ring apple toe cake cat jewel stem key
+54 1 93 53 44 33 13 85
+bridge sponge cat feather window
+23 65 68 39 77
+apple collar potato
+49 56 37
+square knot plane chin hand root star wire
+66 9 2 44 38 60 8 58
+brush chest card basket
+88 63 77 91
+throat station sheep store spoon
+72 31 20 45 19
+coat glove throat flag stomach pipe gun
+23 50 16 61 80 5 81
+drop fish sock pin tongue
+66 61 97 71 20
+trousers church receipt station hook pump arch dog
+38 64 65 34 59 89 78 72
+ring tooth office knot farm tongue
+18 88 85 19 38 29
+bird rat cup worm
+47 66 5 94
+nose snake angle bone ball
+79 90 77 47 33
+spade muscle nerve brake finger cat branch
+16 2 20 54 3 90 48
+line cart fork goat pipe band
+13 52 63 42 6 66
+bulb island basin trousers cord chin
+22 38 17 11 42 8
+kettle cushion tooth
+8 47 7
+potato bath snake arm hook nut camera
+46 95 59 71 27 42 37
+apple ship heart arch wire fork
+28 60 87 64 42 67
+garden head pot tail bulb
+42 59 15 96 44
+hammer leg prison
+60 16 83
+tongue toe plane apple pipe tooth sheep frame
+78 20 28 95 44 84 23 17
+cow floor bird branch dress cart
+82 39 100 85 18 89
+dress skin hand
+55 23 39
+bee bed toe circle camera snake plane
+94 2 78 69 99 85 88
+board horn rat frame bucket knee star
+60 81 87 8 92 89 32
+wire rat wall map trousers bee farm fowl
+89 86 84 55 61 6 75 54
+bed pump foot ship
+40 63 46 75
+wing band ball rail plough farm shelf tongue
+85 100 79 74 34 65 20 38
+mouth hand thread horn kettle street
+21 14 11 71 31 19
+pen rod frame
+15 93 47
+nose stamp cow window
+37 99 86 22
+hat brick farm horn
+59 67 20 93
+stamp ship wall glove hospital hair whip sail
+42 100 79 8 2 12 31 66
+girl pump cheese basket stamp sponge chain
+34 31 9 54 58 30 69
+camera plough horn stamp fork angle
+72 30 38 81 74 18
+arch face eye
+58 57 95
+hook bone ship skirt window lock pot
+90 4 7 72 14 81 41
+hat cake curtain hook
+64 4 72 99
+ball net brick sheep wall key match pocket
+9 92 83 16 24 89 25 22
+plough roof fly station hand cup
+11 48 14 23 25 45
+farm box sock monkey watch baby garden fly
+54 94 100 96 87 66 42 92
+bucket wire kettle tail hair spoon
+85 35 89 87 47 46
+key stamp cup oven cart jewel knee
+39 49 20 69 53 93 43
+scissors rail foot spoon knee
+54 82 70 94 83
+floor gun worm
+26 70 7
+pipe oven throat bone needle
+59 32 48 33 76
+roof cat head key frame
+63 75 8 37 43
+lip potato wheel
+57 66 47
+arm tongue spade street
+65 73 27 93
+library fork cushion
+97 39 51
+hat door nose match oven knot stocking square
+8 58 10 93 95 37 5 41
+key basin wing mouth farm
+76 12 84 32 63
+drop nose sock needle bulb root square
+80 47 75 7 83 54 43
+face stocking gun board button needle camera knee
+4 81 49 60 13 20 32 41
+fowl mouth girl cord stick
+90 64 72 9 55
+needle snake sock library
+27 25 47 39
+door pipe eye
+70 39 29
+hat boat berry knife spoon match branch stomach
+44 68 84 74 71 82 93 98
+screw boat pot fowl
+19 83 71 5
+sponge boy branch foot hat
+14 82 38 17 89
+hospital egg island bridge boy head match
+47 74 8 28 66 91 18
+nut shelf frame basket
+26 19 60 22
+worm thumb sheep berry
+48 51 5 70
+fowl brain bulb throat umbrella
+100 79 49 46 89
+bed bridge foot door monkey ear basket glove
+36 32 55 85 49 13 41 97
+pot ticket lock wing
+34 76 36 23
+brush mouth hat
+88 56 1
+picture cloud nut
+14 6 70
+plane bird leg finger ball
+41 33 30 44 77
+fowl feather collar hammer worm
+14 25 10 13 44
+jewel bucket worm drawer brush
+75 5 34 25 70
diff --git a/codejam_2008/src/y2008beta/a.rs b/codejam_2008/src/y2008beta/a.rs
index a8b9740..cee4df8 100644
--- a/codejam_2008/src/y2008beta/a.rs
+++ b/codejam_2008/src/y2008beta/a.rs
@@ -8,6 +8,7 @@ use std::f64::consts::PI;
 
 /*
 Triangles
+Basic geometry
 */
 pub fn solve_all_cases()
 {
@@ -30,10 +31,11 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(&Vector2d::with_val(floats[0], floats[1]),
-                          &Vector2d::with_val(floats[2], floats[3]),
-                          &Vector2d::with_val(floats[4], floats[5]))
-
+                    solve(
+                        &Vector2d::with_val(floats[0], floats[1]),
+                        &Vector2d::with_val(floats[2], floats[3]),
+                        &Vector2d::with_val(floats[4], floats[5])
+                    )
                 )
                 .unwrap();
             }
@@ -41,39 +43,39 @@ pub fn solve_all_cases()
     );
 }
 
-struct Line {
+struct Line
+{
     slope: Option<f64>,
-    len: f64
+    len: f64,
 }
 
-impl Line {
+impl Line
+{
     fn new(p1: &Vector2d<f64>, p2: &Vector2d<f64>) -> Line
     {
         Line {
-            slope:
-            if p1.x() == p2.x() {
+            slope: if p1.x() == p2.x() {
                 None
             } else {
                 Some((p2.y() - p1.y()) / (p2.x() - p1.x()))
             },
-            len: p1.pyth_distance(p2)
+            len: p1.pyth_distance(p2),
         }
     }
 
-    fn is_parallel(&self, other: &Line) -> bool {
+    fn is_parallel(&self, other: &Line) -> bool
+    {
         self.slope == other.slope
     }
 }
 
-
 fn law_cosines(a: f64, b: f64, c: f64) -> f64
 {
-	//c2 = a2 + b2 – 2ab cos C
-	//#puts a, b, c, ((c ** 2 - a ** 2 - b ** 2) / (-2 * a * b))
-	( (c.powi(2) - a.powi(2) - b.powi(2)) / (-2. * a * b) ).acos()
+    //c2 = a2 + b2 – 2ab cos C
+    //#puts a, b, c, ((c ** 2 - a ** 2 - b ** 2) / (-2 * a * b))
+    ((c.powi(2) - a.powi(2) - b.powi(2)) / (-2. * a * b)).acos()
 }
 
-
 fn solve(p1: &Vector2d<f64>, p2: &Vector2d<f64>, p3: &Vector2d<f64>) -> String
 {
     let ab = Line::new(p1, p2);
@@ -85,24 +87,23 @@ fn solve(p1: &Vector2d<f64>, p2: &Vector2d<f64>, p3: &Vector2d<f64>) -> String
     }
 
     let mut angles = Vec::new();
-	angles.push(law_cosines(ab.len, ac.len, bc.len));
-	angles.push( law_cosines(ab.len, bc.len, ac.len));
-	angles.push( law_cosines(ac.len, bc.len, ab.len));
+    angles.push(law_cosines(ab.len, ac.len, bc.len));
+    angles.push(law_cosines(ab.len, bc.len, ac.len));
+    angles.push(law_cosines(ac.len, bc.len, ab.len));
 
-	let desc1 = if ab.len == ac.len || ab.len == bc.len || ac.len == bc.len {
+    let desc1 = if ab.len == ac.len || ab.len == bc.len || ac.len == bc.len {
         "isosceles"
     } else {
         "scalene"
     };
 
-	let desc2 = if
-	 angles.iter().any(  |&ang| (ang - PI / 2.).abs() < 0.00000001 ) {
+    let desc2 = if angles.iter().any(|&ang| (ang - PI / 2.).abs() < 0.00000001) {
         "right"
-    } else if angles.iter().any(  |&ang| ang > PI / 2.) {
+    } else if angles.iter().any(|&ang| ang > PI / 2.) {
         "obtuse"
     } else {
         "acute"
     };
 
-	format!("{} {} triangle", desc1, desc2)
+    format!("{} {} triangle", desc1, desc2)
 }
diff --git a/codejam_2008/src/y2008beta/b.rs b/codejam_2008/src/y2008beta/b.rs
new file mode 100644
index 0000000..3d92dd4
--- /dev/null
+++ b/codejam_2008/src/y2008beta/b.rs
@@ -0,0 +1,85 @@
+use codejam::util::codejam::run_cases;
+use itertools::Itertools;
+use std::io::Write;
+use superslice::*;
+
+/*
+Triangles
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008beta",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let products = reader.read_string_line();
+                let prices = reader.read_num_line();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(products, prices)).unwrap();
+            }
+        },
+    );
+}
+
+fn lis(xs: &Vec<u8>) -> usize
+{
+    let mut lis = Vec::new();
+
+    for i in 0..xs.len() {
+        let it = lis.lower_bound(&xs[i]);
+        if it > lis.len() {
+            lis.push(xs[i]);
+        } else {
+            lis[it] = xs[i];
+        }
+    }
+
+    lis.len()
+}
+
+fn solve(products: Vec<String>, prices: Vec<u8>) -> String
+{
+    let mut ret = Vec::new();
+    let mut products = products;
+    let mut prices = prices;
+
+    let mut sps = products.clone();
+    sps.sort();
+
+    for sorted_product in sps.iter() {
+        //j
+        let non_sorted_index = products
+            .iter()
+            .position(|non_sorted_product| non_sorted_product == sorted_product).expect("Should exist");
+
+        let mut xsp = Vec::new();
+        let mut psp = Vec::new();
+
+        xsp.extend_from_slice(&prices[0..non_sorted_index]);
+        xsp.extend_from_slice(&prices[non_sorted_index + 1..]);
+
+        for k in 0..products.len() {
+            if k == non_sorted_index {
+                continue;
+            }
+            psp.push(products[k].clone());
+        }
+
+        if lis(&prices) == lis(&xsp) {
+            prices = xsp;
+            products = psp;
+            ret.push(sorted_product.clone());
+        }
+    }
+
+    ret.iter().join(" ")
+}
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index bbf89dd..1ce047c 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -91,7 +91,7 @@ impl Stock
             spent,
             mask,
             loc,
-            cf
+            cf,
         }
     }
 }
@@ -287,10 +287,7 @@ impl Memo
                         if self.bcost[0][nm.data] > gc + EPS {
                             self.bcost[0][nm.data] = gc;
                             pq.push(Stock::new(gc, nm, 0, s.loc));
-                            debug!(
-                                " Push Stock({},{:b},{},{})\n",
-                                gc, nm.data, 0, s.loc
-                            );
+                            debug!(" Push Stock({},{:b},{},{})\n", gc, nm.data, 0, s.loc);
                         }
                     } else {
                         //go to every other store, including home
@@ -316,10 +313,7 @@ impl Memo
                     if self.bcost[i][s.mask.data] > gc + EPS {
                         self.bcost[i][s.mask.data] = gc;
                         pq.push(Stock::new(gc, s.mask, i, 0));
-                        debug!(
-                            " Push Stock({},{},{},{})\n",
-                            gc, s.mask.data, i,  0
-                        );
+                        debug!(" Push Stock({},{},{},{})\n", gc, s.mask.data, i, 0);
                     }
                 }
             }
diff --git a/codejam_2016/src/y2016qual/d.rs b/codejam_2016/src/y2016qual/d.rs
index 7ad6bf3..8693b97 100644
--- a/codejam_2016/src/y2016qual/d.rs
+++ b/codejam_2016/src/y2016qual/d.rs
@@ -50,13 +50,27 @@ fn solve(K: u16, C: u16, S: u16) -> Option<Vec<u64>>
     }
 
     /*
+    K tiles initially
+    C complexity
+    Can uncover S tiles
+
     we just need positions whose digits in base K match
     The strategy is we only care about initial sequences with 1  G
     A G at pos P will have a G in any position who has a digit P in base K
+
+    G..
+    GGGG..G..
+
+    Here K=3
+
+    So take the positions: 0, 1, 2, 3, 4, 5 make them into base 3 with a digit length of C
+    // 00, 01, 02, 10, 11, 12, 20, 21, 22
+    // anything with a 0 digit (including leading) will be a G
     */
     Some(
         (0..K)
             .collect::<Vec<_>>()
+            //For each tile uncovered, we can verify C different positions
             .chunks(C as usize)
             .map(|digits| {
                 let mut pos = 0u64;

From a1e030feec4bdcacd7f2d77d9a3dddd852e8db01 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 17 Feb 2019 10:58:52 -0300
Subject: [PATCH 019/122] b

---
 .../src/y2008beta/B-large-practice.out        | 100 ++++++++++++++++++
 .../src/y2008beta/B-small-practice.out        | 100 ++++++++++++++++++
 codejam_2008/src/y2008beta/b.rs               |   2 +-
 3 files changed, 201 insertions(+), 1 deletion(-)
 create mode 100644 codejam_2008/src/y2008beta/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008beta/B-small-practice.out

diff --git a/codejam_2008/src/y2008beta/B-large-practice.out b/codejam_2008/src/y2008beta/B-large-practice.out
new file mode 100644
index 0000000..bb471b5
--- /dev/null
+++ b/codejam_2008/src/y2008beta/B-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: bottle_drain boy_bottle brush_tongue floor_knee match_trousers muscle_fly parcel_skirt receipt_finger seed_drain station_curtain ticket_skirt whip_fork window_pig
+Case #2: band_coat basin_dress board_pot bone_square brain_wall camera_key card_umbrella collar_ticket cup_town egg_chin knot_stocking pen_pin plane_basin potato_band roof_drain ship_prison tree_rod
+Case #3: arch_basket arm_girl arm_net army_blade baby_circle bag_band basket_ear bed_skirt bee_library board_dog box_plough brush_spade bucket_eye cake_heart card_dog carriage_cake chin_stomach comb_tooth cord_stomach curtain_camera curtain_knife door_root dress_island ear_stamp farm_collar girl_box hat_library horse_orange horse_street island_sun kettle_receipt knot_worm lock_ship muscle_pin nut_flag pencil_hospital picture_girl pin_rod pipe_egg screw_brain shelf_ball shirt_bridge spade_horse stem_fish stocking_foot thread_hospital thread_table tongue_camera wall_sail
+Case #4: army_sock bag_shirt blade_cloud box_sponge brain_dress brake_tongue bulb_arch cake_box cake_circle cake_net cheese_map cow_hat door_cushion door_pocket door_stick drop_ant egg_bath engine_plough eye_horse foot_brush frame_toe heart_carriage hospital_berry jewel_hat lock_apple map_wall office_library picture_fish pig_line pipe_bell pipe_card screw_dog shelf_hat skirt_sponge snake_fork square_basin square_coat stamp_pencil stomach_line toe_orange tongue_sponge wheel_bag wheel_goat wing_bottle
+Case #5: baby_nut ball_house brain_hand branch_army chin_station cord_prison curtain_seed fish_ant fork_cow girl_brick girl_cat hammer_cart key_ticket knot_net leaf_shoe line_hammer pen_orange pot_comb prison_comb roof_cart screw_whip spade_nut stamp_sock sun_office table_camera tongue_town trousers_seed wall_feather
+Case #6: berry_office fly_nerve hammer_ship kettle_oven plough_basket sponge_face tail_library wire_monkey wire_rat
+Case #7: bottle_square bulb_garden engine_bottle fowl_curtain garden_muscle goat_tooth gun_knee kettle_orange ring_blade thumb_bed
+Case #8: apple_ant apple_mouth bag_neck basket_leg box_island bridge_ring brush_star button_scissors chain_house chest_orange chin_arm clock_bee coat_needle cow_curtain dog_whip dress_map egg_bone face_cow face_nail finger_screw floor_foot foot_berry girl_train goat_apple kettle_board match_curtain sail_tree skin_stem sponge_lip store_lock tail_brick thumb_mouth tongue_cart wall_bridge wheel_angle wheel_shirt wing_arm wing_plate wire_fly
+Case #9: ant_house arm_box band_school blade_fowl bone_potato boot_net bridge_berry brush_office cake_fowl chain_leg cheese_neck chin_pencil cup_tail dog_gun flag_girl floor_hand fowl_pot girl_table line_office muscle_star needle_spade net_skirt nut_tail pencil_bath school_bird seed_coat shirt_cushion skirt_leg sock_oven sponge_line spoon_circle tray_parcel tray_star watch_pig wheel_band
+Case #10: arm_picture bath_sheep bell_bee cheese_window dog_bee drop_key engine_parcel hair_wheel jewel_boat knot_scissors office_board pig_bed plough_bee roof_arch screw_boot screw_girl shoe_lock stocking_tree thread_floor
+Case #11: dog_picture foot_fowl garden_bag hat_ant head_town nail_station office_shirt sail_screw scissors_knee ticket_hook
+Case #12: ball_fish button_rail carriage_jewel cart_school clock_church face_street fork_stick fowl_tree hair_hospital leg_leaf pig_library plane_ant rat_frame rod_girl stamp_seed
+Case #13: army_skirt basin_ticket book_board cheese_boot frame_fish house_lip nail_rail
+Case #14: apple_cushion apple_sheep arm_chain basket_mouth book_eye brick_frame brush_stocking bulb_head carriage_pencil collar_tray curtain_rat drain_tail drop_rail farm_town finger_monkey foot_flag fowl_cart hat_library island_camera leaf_ball line_house nerve_angle nut_bottle plate_blade rail_pen screw_oven stick_coat train_screw whip_book
+Case #15: arch_skin army_brick band_bee brick_hook cake_key carriage_island cart_branch cow_arch cow_street cushion_office drain_dress fly_stomach fork_bottle frame_basket jewel_cheese library_feather library_whistle line_seed moon_button mouth_sun muscle_window net_baby net_pump nose_house oven_star parcel_apple plate_board plough_farm pocket_root pump_collar screw_plane shirt_shoe stomach_face store_cloud table_knot thumb_plough ticket_engine ticket_tooth tray_plane watch_fowl
+Case #16: ant_town army_tongue bed_brake bird_cake board_cow boy_library bulb_bell bulb_cat cat_box cheese_pin chin_finger cup_carriage cushion_stamp drain_pen drawer_umbrella feather_hat fish_star fly_brain fly_curtain fowl_bird garden_finger horse_garden kettle_tooth knee_ear monkey_wire moon_bell nail_button pen_nut pot_eye rat_goat seed_drawer shirt_blade skin_throat sock_pocket sponge_receipt stamp_whistle station_bag thread_pot tongue_wheel
+Case #17: band_card berry_spring bottle_fly chain_pin clock_carriage cord_tree curtain_finger drawer_sock fly_office goat_needle head_hammer mouth_cup needle_horse rat_hat root_drawer sock_curtain spade_chain spring_wing stocking_boat sun_basin tail_cat tail_plane train_arm window_sponge worm_screw worm_sock
+Case #18: army_spoon ball_leaf berry_pipe book_arm brick_pencil cart_bone cat_bee chest_trousers cloud_train cushion_office drop_garden feather_nerve floor_shirt garden_horse hospital_moon kettle_stocking plough_worm root_sheep scissors_oven screw_heart
+Case #19: apple_fowl bag_cheese bed_bell bed_net boat_watch book_seed brain_needle brake_roof brush_cart bulb_collar cart_school cat_pocket cheese_monkey cloud_pipe cup_cow egg_branch engine_brush eye_garden eye_nerve fly_basket fowl_feather goat_brick hat_circle head_knot island_receipt knife_school line_window lip_board lip_drain map_bath nerve_coat nose_head nut_arm orange_cloud pig_tree pocket_worm rail_office root_hook sail_muscle ship_glove star_chest stick_dress store_table ticket_cord ticket_window trousers_door whip_pig
+Case #20: angle_hair apple_bulb army_tray ball_brain band_hammer basket_fly bird_sun blade_horse bucket_plate cart_cloud chain_gun chest_snake cow_cup cow_skin curtain_knife cushion_nut drawer_fish drop_apple engine_chin floor_wheel frame_sponge garden_bucket hand_rod horn_plough hospital_bag mouth_bird neck_dog nose_bath nose_tray pig_ring pocket_horn potato_bulb rail_boy skirt_boat spoon_flag station_store town_bottle town_receipt
+Case #21: army_table bird_school book_stomach boot_boat boy_branch button_square card_station chain_drawer clock_toe coat_fork cup_chin cup_fly cup_orange eye_fly feather_knot fish_arch flag_fork flag_key fork_egg hat_baby hook_mouth kettle_receipt monkey_knee oven_neck pocket_boat root_pipe seed_bell skin_pig spring_boot station_book street_leaf sun_frame tongue_cart tongue_fork train_arch tray_hand tree_wheel trousers_root worm_office
+Case #22: arm_root baby_eye boot_gun boy_glove card_nose church_brain comb_boy drain_whip ear_horn ear_mouth knee_curtain line_wing map_skin nail_store pencil_mouth pocket_bulb store_cloud whistle_library
+Case #23: ball_library bucket_cat dress_needle horse_bulb neck_basket town_bag
+Case #24: angle_farm bell_nail board_apple boy_pin brush_army bulb_snake cake_boat cord_monkey dress_prison ear_wire egg_mouth gun_comb kettle_dress leg_bed moon_basket nail_arm nerve_bee nut_receipt pen_stick picture_hammer plane_button plate_face plough_finger rat_church rat_orange ring_skin snake_skirt sponge_shirt stem_army stocking_church sun_band tooth_thumb wall_blade watch_nose wing_root worm_brush
+Case #25: army_table bag_mouth band_pen basin_tray bath_ship berry_glove boy_goat brick_kettle brush_leaf brush_stem button_knee carriage_island cat_carriage cord_knot feather_ticket fish_church flag_blade frame_knot hair_army hair_blade hand_brick lock_bottle lock_tree monkey_sock nail_hair orange_square parcel_brain plough_cheese rod_bulb ship_toe shirt_apple shoe_brick snake_bridge sponge_train stocking_house street_knot table_net tray_comb tree_card umbrella_flag worm_rod
+Case #26: dress_feather farm_boat fork_umbrella girl_camera island_cat line_face net_seed receipt_spring ring_cake spring_chin street_drop ticket_worm
+Case #27: ant_flag ant_potato arch_brake brick_ant brush_cushion button_drop clock_engine collar_brick dog_sheep dress_curtain engine_bed face_watch glove_skirt hat_angle knot_lip map_plate moon_basket muscle_tail needle_leaf needle_picture net_prison office_cart orange_chain orange_cheese oven_dog potato_apple shelf_hospital shelf_plate spring_lip ticket_mouth tongue_ball tooth_throat town_camera trousers_snake
+Case #28: army_wing band_wall bed_receipt bee_thread berry_ant boat_window branch_arch brick_net cat_dog chain_pencil chest_arm cup_card face_sheep face_stamp feather_net finger_glove fowl_cart fowl_island hair_boy hand_apple key_cheese knee_house map_heart match_cow muscle_branch nail_hammer rod_horn shirt_brick table_lip thumb_seed tooth_throat
+Case #29: army_fork berry_whip bottle_ship bottle_snake bulb_pin card_station chest_star circle_neck comb_ring cow_table drain_picture ear_store ear_worm engine_orange farm_board feather_monkey foot_stick frame_eye frame_office key_bottle knot_cord match_bell mouth_stem needle_school net_library orange_cord parcel_prison parcel_school pencil_horn pipe_horse pipe_sail pump_whip receipt_whip rod_nail scissors_bee sheep_hammer sponge_throat stamp_floor sun_roof toe_arm wall_seed
+Case #30: arm_stick army_horse basin_toe bath_stick bed_cloud brain_engine brush_book bulb_line camera_eye cart_house chin_coat chin_knot cloud_nail curtain_plough dress_pig drop_lock ear_hammer egg_clock engine_brush engine_drop engine_rail face_arm fork_bone frame_kettle gun_circle hand_jewel house_fork leg_apple monkey_ship muscle_camera neck_ring net_pipe orange_plane oven_eye pencil_feather plough_hat prison_box pump_picture sail_egg scissors_lock skin_watch sock_cup sponge_circle sponge_needle tail_fly umbrella_sheep watch_receipt
+Case #31: apple_pipe bath_orange berry_circle brake_band cheese_button cheese_plate clock_tray cord_roof curtain_hospital dog_brain girl_finger hook_gun kettle_bone leaf_office monkey_jewel shelf_plane spoon_wire stem_drain tail_moon umbrella_wing wheel_ball whip_parcel
+Case #32: apple_church apple_trousers berry_leg boat_wheel boot_dog drain_card eye_stick finger_throat floor_board foot_hand garden_worm gun_brake head_boat hook_hammer line_cheese mouth_apple neck_ticket nut_worm plate_stick pump_cheese receipt_sail skin_oven sponge_shirt sponge_train spoon_muscle street_floor street_train tooth_horn wall_trousers
+Case #33: baby_boat basket_farm board_bee bone_bird cloud_heart comb_cart cow_thread drain_oven dress_brick drop_arch egg_branch face_fork fly_brush fly_hat hand_worm heart_oven library_trousers line_heart map_oven pot_blade scissors_circle seed_oven sponge_ball star_thread thread_match ticket_dog umbrella_door window_church worm_brake
+Case #34: ball_boot berry_frame box_bucket branch_bucket brush_sock button_angle cat_glove church_skirt clock_picture collar_rail curtain_floor drain_root face_tongue farm_skin goat_toe island_gun kettle_pig nut_throat pig_prison plate_spoon prison_shoe scissors_nose skin_rat spade_cow sponge_apple street_key ticket_tongue town_door wheel_wall worm_store
+Case #35: apple_rod baby_store band_bone bell_cloud brake_monkey brake_skirt cart_watch clock_ant clock_church collar_apple drain_board ear_drawer frame_mouth gun_house gun_parcel horse_dress knot_girl lock_army map_hospital needle_berry net_line parcel_key pen_finger pencil_cloud picture_ear picture_pocket rod_screw roof_ant shelf_hair ship_mouth shirt_skirt skirt_engine sock_chin sponge_cup sun_hospital sun_plate tail_comb thumb_horse train_stem wall_mouth
+Case #36: ant_wall bell_square comb_snake drain_heart face_glove farm_eye fly_button island_mouth kettle_shirt key_rat match_cup muscle_coat ring_knife root_ring screw_chain sock_whip street_ship thumb_moon whip_kettle wire_picture
+Case #37: bird_bath bone_coat box_pot bulb_square cow_star cow_tongue drain_parcel fowl_church map_pot picture_pipe plate_brick pocket_knot pump_cushion ring_foot rod_potato school_pump sheep_carriage skin_book skin_button wall_army wheel_chain
+Case #38: ball_office basket_hammer berry_arch boot_brush boy_key bridge_engine bridge_square cart_fish comb_chin fork_stomach fowl_lock hair_fowl house_pipe net_goat oven_hand parcel_screw plate_plough plough_church pot_store potato_flag pump_kettle rat_basket sock_key store_snake train_hook tree_plough whip_egg
+Case #39: bed_plough bed_shelf board_sponge bottle_bird boy_button bulb_pig cheese_shoe collar_seed cow_cat drain_sail dress_hand engine_drawer flag_dress frame_town hair_flag house_carriage lock_head pen_store potato_cloud rat_square school_basket stocking_rail tooth_rail trousers_ticket
+Case #40: arm_comb bag_plough band_garden box_apple button_nerve button_pump carriage_line cart_bridge chain_floor cheese_tooth chest_arm chin_dress cup_garden curtain_army curtain_farm curtain_foot curtain_prison curtain_tree drain_skin drop_heart finger_door flag_receipt floor_town frame_berry jewel_boot line_bottle mouth_rail oven_cheese plough_dog potato_root pump_station receipt_goat seed_blade ship_pen street_muscle watch_rod wing_shelf worm_eye
+Case #41: army_bridge basin_library branch_bone ear_mouth feather_horse frame_house hook_branch horse_cart house_spoon kettle_floor needle_table nerve_face picture_cord pig_engine pig_train pipe_pig plane_camera pocket_cat ring_sheep root_head store_lock table_needle worm_sun
+Case #42: bee_pen blade_bag blade_sock bucket_hammer cat_school cheese_hospital chest_girl cord_eye cow_boy cushion_whip foot_fowl fork_hat glove_table hook_knot hospital_camera hospital_tree house_egg jewel_watch leaf_pocket line_bell line_hospital lock_bridge map_net muscle_pen muscle_wall nail_potato nerve_bed nerve_sun oven_eye pencil_chest pocket_cup potato_fowl prison_pencil rail_bed ring_stick rod_needle root_sheep sheep_bell sheep_chin sponge_cheese sponge_muscle spoon_street spring_cup stamp_egg table_pipe ticket_nose tray_ring umbrella_cord
+Case #43: baby_bed bath_station board_square boot_ball bulb_dress card_brake cloud_basin coat_picture cup_ear cushion_spade engine_nut finger_arch garden_pen knot_hand line_horn moon_mouth orange_stamp pen_tongue pencil_door prison_brick screw_nut screw_rod spring_garden square_nail tongue_ear whip_cloud whip_curtain wing_head
+Case #44: basin_drop basin_map boot_watch brick_carriage brush_train bucket_bulb carriage_girl church_sock door_stomach finger_boat glove_chest hat_horn heart_screw house_boot kettle_coat library_plane mouth_pig needle_bucket shelf_floor sock_moon sponge_key stocking_ear train_lock window_cake window_dog
+Case #45: basket_train board_plate bridge_nut egg_sock face_bath fowl_bell horn_ship house_brush house_nut rod_hook root_parcel scissors_boot screw_street shirt_cord street_throat sun_nose
+Case #46: ant_garden baby_orange ball_cat ball_whistle band_thumb basin_tail bath_farm bath_tooth boot_band brick_ant brick_pocket cart_fly cart_horn chain_bag collar_army cushion_sheep drain_engine egg_boot egg_sun finger_fork flag_potato fly_cloud girl_fowl hair_spring house_match knee_ring knot_bottle leaf_sun library_boat line_leaf net_bell parcel_sheep pen_roof plough_thumb pot_arm prison_monkey receipt_boat roof_library sock_station spoon_pump square_comb square_street street_ticket table_arch town_wire tray_prison wall_wheel window_library
+Case #47: ant_fork arm_brake basket_table bed_angle boy_orange brick_band brick_dress brush_pencil collar_ball fly_door fowl_shirt leg_pump lock_horn moon_drain nail_tooth plate_prison seed_girl stem_tail worm_army
+Case #48: arm_toe baby_comb berry_horse blade_knee blade_leg bone_ant boy_boat bucket_town cake_sponge cat_pot circle_stick coat_circle drawer_nose ear_dress egg_tongue farm_neck floor_fly garden_pump hat_receipt head_boy head_glove line_fly nail_face pencil_window picture_ship pig_orange pin_tray plate_muscle pump_house receipt_mouth skirt_baby sock_nail sponge_pin stick_hammer store_feather trousers_tongue watch_plane whip_tail window_store
+Case #49: blade_door blade_spade chain_bee chin_hospital cloud_basin farm_bulb knee_floor library_foot pen_bag picture_orange spade_carriage stick_frame tail_heart toe_baby tree_brake worm_brake
+Case #50: arm_nut army_line boat_stocking button_whip cake_bridge drop_parcel ear_cushion fowl_tree gun_door head_store hospital_dog kettle_shelf knee_brick lock_finger mouth_bottle office_ticket pump_street root_stem spade_circle spring_hammer toe_flag wall_screw wire_knife
+Case #51: bag_pot band_knee boat_moon bucket_book button_boot carriage_nail carriage_stem cloud_chin coat_bottle fish_sun flag_cart flag_pot fowl_knife girl_ball gun_band horn_office key_drop leg_sock net_horn parcel_wheel rat_cheese sail_drop sail_store station_pen whip_square wing_collar
+Case #52: band_nerve bed_nut berry_knot bone_pot bottle_table brain_chest bridge_band button_cup circle_camera collar_kettle cord_store curtain_sheep ear_key face_fork farm_basket gun_engine hammer_pipe hat_bell hat_train heart_pig heart_rod hook_knee island_sponge kettle_bed map_comb moon_knot nose_camera orange_island plate_pin prison_watch sail_goat shirt_bulb shirt_dog skin_bucket skin_garden spade_throat spoon_clock stamp_shirt street_floor sun_fork thread_boot thread_store tooth_floor tooth_tongue trousers_band umbrella_arch umbrella_horse umbrella_wheel wheel_fly worm_hook
+Case #53: basket_shirt bath_toe bell_box berry_frame book_worm boot_potato boy_star branch_bone branch_farm branch_hand cat_scissors clock_receipt cloud_station cow_ticket ear_needle eye_fowl fowl_hand goat_army horn_girl hospital_cat key_egg key_knot key_store leg_dog neck_seed nerve_pin nose_receipt nose_worm oven_drawer parcel_stomach picture_cloud plane_cat plate_office rail_door scissors_fish shoe_bag shoe_wall stem_whip sun_whistle town_ant trousers_farm umbrella_girl watch_knife wire_door
+Case #54: bed_worm boot_cloud brain_bulb branch_tree carriage_sponge cheese_ear chin_needle cushion_eye drop_plough eye_muscle floor_bell glove_box head_screw island_floor kettle_toe knife_ball knot_kettle leaf_foot mouth_seed needle_ball nose_sponge picture_brake pig_trousers plane_match root_horn scissors_match seed_office sponge_cheese spoon_spade station_heart stem_station
+Case #55: chain_bed cheese_thumb hammer_trousers hand_pig orange_dog pipe_comb plough_window
+Case #56: arm_potato basin_hair berry_pencil bird_knot brick_house camera_egg card_coat cat_oven clock_garden cow_knot drawer_thread eye_knot foot_pocket fowl_nut head_sock monkey_face mouth_shirt mouth_spring neck_potato nose_tooth nut_ball parcel_snake pocket_star receipt_arch school_bottle skin_lock skin_spring spoon_book spoon_pocket spring_boat square_arch stem_pencil watch_throat whistle_bridge wing_kettle
+Case #57: angle_nose arm_square army_flag bee_bath blade_army blade_stomach book_circle book_floor bottle_bath bottle_rat box_trousers boy_farm cake_pump carriage_knee church_rail church_whistle drop_spoon engine_orange eye_whip farm_hook finger_match hook_trousers kettle_office knot_thread lock_shirt mouth_bird picture_coat pin_ticket pipe_egg rail_clock rail_line rat_basin roof_card roof_rail spoon_army spoon_net stamp_plough stick_ship street_knife table_ball throat_garden whistle_mouth window_finger worm_skirt
+Case #58: button_cart coat_engine garden_ticket hammer_pen hand_knot moon_thread office_ant plough_wheel pocket_stem pot_train sheep_ear ship_boy shoe_card square_camera station_nut toe_sail
+Case #59: arm_pocket bath_umbrella bird_ant boot_garden boy_apple brain_bone bucket_window bulb_spring carriage_pot chain_leg clock_wire collar_jewel cup_cheese door_sock fly_pencil hat_pipe head_oven heart_bridge horn_parcel horse_army kettle_wing knife_scissors line_bed pipe_basket plane_baby pot_trousers potato_house skin_oven stamp_thumb throat_board tooth_baby
+Case #60: apple_worm arch_office bath_tooth bucket_garden cart_apple chain_carriage chain_coat circle_prison clock_carriage comb_card drawer_cat island_street knee_town muscle_throat skin_flag square_boat street_pin tree_store umbrella_shirt watch_needle
+Case #61: ball_hair band_knot board_snake bone_bath boy_wing brush_ring bulb_floor cake_clock curtain_island curtain_station engine_brain eye_skirt face_bone farm_boot frame_train island_door map_shelf muscle_store needle_ant needle_brake office_apple pot_fowl pot_moon rat_nut shoe_cat skin_cloud stem_farm street_farm sun_hand town_sheep train_dog wheel_potato
+Case #62: angle_drawer arch_cart arch_spade arm_pig brake_chain brick_pencil bridge_stocking brush_horse camera_foot chain_tray clock_heart cloud_pot coat_clock drain_button dress_office drop_cart drop_picture floor_bee fly_bridge goat_cow goat_house gun_cheese heart_boy heart_circle heart_face jewel_chain leaf_nail monkey_apple muscle_bed parcel_circle pencil_umbrella pocket_brick pocket_dog potato_glove prison_boy rat_circle seed_star star_toe table_cake toe_board train_window whistle_camera
+Case #63: apple_board apple_prison arch_plough army_table ball_ant blade_brake board_button chain_shoe clock_school cloud_picture farm_sail farm_wall girl_rat hair_tail hook_foot house_muscle jewel_stomach knee_cord knife_stem leaf_cat oven_spoon picture_parcel pocket_whistle shelf_blade sock_ticket tail_line thread_blade thread_cord wing_table
+Case #64: arm_dog band_shoe boat_brain branch_horse circle_apple clock_knot gun_baby knot_spring moon_chain neck_cheese nut_horn pot_wall sail_needle ship_ball shoe_baby snake_door station_trousers thumb_umbrella tongue_drawer
+Case #65: basin_rail bed_bulb bird_collar board_plate branch_cord bulb_horse bulb_muscle cart_spoon chin_needle chin_store cord_plane drop_pump ear_brick engine_tail fish_potato leg_apple map_square net_bag orange_stem oven_pipe pipe_drop rat_band school_spade scissors_potato skin_island square_monkey stamp_coat stamp_ear stick_brush
+Case #66: bed_jewel bee_drawer chest_brake cushion_spade floor_sun fly_plough garden_comb girl_rail gun_head hair_whistle leg_book library_cord mouth_line nut_angle potato_stocking rail_door shirt_knot sock_cushion station_fowl thread_cup tree_trousers wheel_finger
+Case #67: bird_toe blade_tray circle_fish clock_worm cloud_oven coat_sail cow_whistle cushion_board cushion_throat feather_cat hat_apple hook_boat line_button lip_square monkey_feather muscle_ball parcel_leg school_hat sheep_angle ship_umbrella sun_knife tree_hospital wall_feather
+Case #68: berry_door bottle_tail brick_garden bucket_farm cart_cup chain_dog collar_kettle cow_button cow_spring curtain_bottle drop_egg ear_pin fish_prison gun_brain gun_watch kettle_root monkey_rail prison_rat rail_goat root_tooth sheep_map shirt_throat skin_pin sponge_cake stick_basket stomach_bag tongue_stick tooth_branch town_baby wire_nose
+Case #69: bed_rail book_nut cheese_net knot_house pipe_rat
+Case #70: ball_knot basket_pipe bed_stick blade_map boat_face boot_dog cake_carriage camera_branch cloud_bottle cow_hat ear_circle finger_whip fowl_brain fowl_knife garden_leg glove_nail hair_cloud heart_trousers house_box island_pipe key_pin knife_picture leaf_hat map_stem moon_ant muscle_cart plane_sun prison_wing rail_pump rat_thread rod_dress square_arm tail_engine
+Case #71: angle_button bag_thread bell_bag bell_tooth bell_town bulb_roof button_fly cake_finger camera_hair cloud_picture cup_cart curtain_hook door_boy eye_boot face_tail farm_sock horn_seed island_blade island_dress knee_snake leaf_cat needle_goat nose_street pen_foot pig_bucket pump_band scissors_wheel sponge_bottle star_school station_pin tooth_clock tray_fly
+Case #72: arch_office band_key basin_pencil basket_window bed_horse bell_star board_seed boy_moon cart_bag cart_cake chin_door cloud_train collar_hammer cushion_oven drain_sail egg_shelf egg_wire fork_goat frame_floor frame_thread hospital_basket hospital_blade hospital_tail knee_dog moon_bath orange_brush plate_chin school_trousers shelf_arch stamp_skin stamp_station stocking_station tree_dog wheel_angle
+Case #73: angle_wing apple_sponge card_apple cart_brake drop_sock fish_wall leaf_stamp sail_cat scissors_egg spade_thumb square_bucket worm_sun
+Case #74: apple_curtain bag_angle bee_potato camera_muscle scissors_book watch_army
+Case #75: berry_roof bridge_house button_library cart_band cushion_berry dress_cart drop_line knife_bottle leaf_star monkey_rail mouth_pen parcel_garden plough_leg plough_town rod_snake school_bell shelf_ant shirt_bed shirt_toe
+Case #76: arch_brain arch_table baby_coat baby_eye bed_dog bee_oven brain_cheese brush_line brush_seed drain_hand foot_square fork_spring glove_drawer hat_circle head_cup horn_nerve house_train lip_garden match_store moon_boy needle_sheep needle_window nose_bottle orange_hook pen_roof pig_cushion pocket_wheel potato_flag rod_horse roof_horn scissors_bed scissors_line seed_shoe sheep_hammer station_shoe stomach_cake store_chain throat_hat tongue_apple tooth_tail wall_leaf watch_plane
+Case #77: baby_farm bird_button boy_cake card_apple cloud_chin dress_egg frame_star gun_rail plate_whip sponge_store
+Case #78: apple_glove army_drain army_knee ball_foot berry_monkey blade_bee board_garden box_head box_skin bulb_parcel button_roof camera_boy camera_office card_spoon cat_drawer cheese_army cheese_thread circle_feather collar_coat cup_blade dress_drain drop_eye engine_eye fish_street head_stick kettle_boot monkey_root nail_ticket orange_door rat_knee sheep_button ship_lip skirt_train snake_arm spade_rod star_hospital store_whistle tail_ring thread_church throat_hook town_pipe umbrella_goat wire_brake
+Case #79: ball_garden basket_bone brake_town bucket_chest chest_plane collar_lock cord_knife farm_rod feather_tail fork_head garden_fowl glove_leg hospital_lip house_pipe jewel_bell key_hat knee_branch picture_window plate_leg snake_knee square_apple stamp_knife thread_drain thumb_goat ticket_receipt wheel_street window_train
+Case #80: book_knot cup_blade flag_ticket gun_church hand_office nail_brake potato_shoe ring_frame station_door ticket_rod tongue_glove
+Case #81: angle_carriage apple_muscle board_brush brain_map branch_stamp brick_stamp brick_toe cloud_boat cord_plate dog_card door_rod island_egg key_head leaf_roof net_knee nose_sponge rod_gun
+Case #82: arm_stomach brick_bird bucket_stamp carriage_cart carriage_knife chest_dog collar_window cord_hospital door_bottle drain_engine drop_chest frame_cloud girl_rail girl_snake hook_boy jewel_circle knife_book oven_ship parcel_sponge rail_lip shelf_basket sock_street spade_fly stick_cord toe_circle whip_lock window_flag wire_cat
+Case #83: angle_knife bag_band board_rail boat_feather boy_drawer camera_match card_square church_bee clock_muscle face_skin feather_curtain goat_pin gun_board gun_coat hat_ticket horn_farm island_sponge island_store kettle_tail key_skin library_snake picture_seed pot_town sheep_bucket ship_watch stem_rat street_store trousers_spring whip_wire
+Case #84: bee_eye boat_sun box_circle brick_whip button_fish flag_watch fly_stamp garden_root girl_town hospital_cord kettle_bucket sail_key sock_flag stocking_seed worm_library
+Case #85: army_hospital baby_drawer basin_monkey basket_town board_bath cake_chin cake_toe card_square comb_sock feather_muscle flag_oven lip_cloud nail_house pencil_fork shoe_mouth spring_cart stocking_net tongue_ship whip_monkey
+Case #86: apple_tree basin_boat bell_drawer boy_trousers bridge_engine brush_stem button_carriage camera_feather chest_stem chest_stomach chin_tail cloud_ball cloud_jewel comb_train cord_plate curtain_bone dog_brush door_lock fly_bed foot_fork fowl_spoon frame_rod kettle_dog knee_sun leaf_basin monkey_stomach nose_pipe nut_cake parcel_spring pen_bridge pig_cat pin_whistle plough_sun receipt_drain receipt_eye rod_fowl sail_fly school_cat square_fork store_cloud store_hand street_cushion train_thumb watch_stomach
+Case #87: bag_sponge basin_brick board_muscle boy_comb brick_skirt brick_sun bucket_orange bulb_bee button_thread chain_umbrella chin_plough clock_plane cord_farm curtain_worm dog_arm egg_drop foot_house foot_thread fowl_pin girl_apple girl_pump gun_snake hand_bee horse_spring knife_bed knife_heart knife_prison knot_farm library_bee nail_cart nail_comb neck_hair pen_store pencil_lip pocket_bucket potato_girl prison_pin rat_bridge rat_potato receipt_drop scissors_frame spring_sock star_pocket stocking_office thread_horn trousers_stick
+Case #88: angle_station angle_toe arm_window bee_bone brush_picture bucket_fork cake_tongue card_drop collar_chain collar_wall cord_muscle cord_stamp cow_bell cushion_engine feather_angle feather_net finger_cheese fish_hook fish_spade foot_shirt girl_drawer hat_cord heart_tail jewel_tree jewel_wire leaf_boy lip_plough map_goat match_heart mouth_monkey mouth_snake neck_spoon pen_whip pin_cloud pin_map plane_basin plough_fowl skirt_lock stick_circle throat_door town_stem wheel_basin wire_screw
+Case #89: angle_neck apple_skin army_shoe bed_button bell_shelf board_floor boat_angle brick_blade cake_spring cart_pin chin_angle dog_sock dog_star drain_chest drop_baby egg_watch eye_boat feather_bridge fly_circle head_ear horse_brush horse_chin house_skirt moon_hat neck_ant neck_cord needle_picture net_sail pen_umbrella pencil_worm picture_garden pin_stocking prison_sponge pump_potato rat_school rat_stomach sail_church screw_apple screw_spring shelf_pin ship_cushion spade_glove sponge_pin spring_stomach trousers_receipt whistle_line
+Case #90: arch_lock arm_brain blade_bulb board_comb boat_camera brick_brain bridge_cat button_egg card_leaf card_sponge cat_comb chin_floor cup_thread eye_rat farm_coat finger_town goat_heart horn_spring horse_heart key_sun leg_knot monkey_jewel neck_house nose_screw pipe_pot receipt_finger sail_library school_square scissors_fly screw_angle skirt_nerve spring_pin stamp_receipt star_bed tooth_tray umbrella_office umbrella_orange
+Case #91: arm_ship blade_street board_hammer brake_arch bucket_cushion button_bee door_gun drop_angle egg_stem knee_horse leg_bee pipe_fish school_pen shoe_coat sponge_baby street_ring ticket_baby
+Case #92: lip_leaf monkey_whip plough_nut stomach_kettle
+Case #93: baby_moon egg_plane glove_house net_ant sponge_dog stamp_apple
+Case #94: bag_garden branch_stocking bridge_brain camera_wing church_garden cushion_stem door_match ear_bulb frame_clock glove_fish head_table house_oven library_basket mouth_wheel orange_feather pin_scissors pipe_spring prison_spring school_spoon scissors_bird stem_comb table_thread thread_cup thumb_island thumb_knife tongue_picture watch_brain whip_trousers
+Case #95: basket_roof berry_army board_fly cake_prison chain_sheep comb_baby dress_farm egg_rod fish_board lip_card nerve_ant pump_eye stick_face
+Case #96: ant_pig bottle_tongue box_pencil brain_horn brain_tray bucket_shirt button_cheese camera_bucket card_cloud cheese_lock cloud_spring flag_fork frame_egg frame_shirt glove_bone head_shirt horn_bucket hospital_drop kettle_face library_muscle lock_bath muscle_baby nerve_gun office_kettle picture_head potato_sheep rat_frame roof_fork trousers_arch umbrella_hammer wing_berry
+Case #97: board_glove bottle_jewel bottle_trousers branch_school drawer_glove hair_pencil hook_hair horn_brush horse_toe house_brain line_fish monkey_nail nail_table plane_hospital sponge_sail station_baby stick_ear train_camera
+Case #98: apple_line army_angle bed_cushion brush_nut cheese_match clock_apple cloud_sponge dress_arch engine_nail feather_nerve fly_thread garden_cup girl_table hair_knee horn_sail hospital_knee house_cake kettle_bulb knot_pump plate_wall prison_arch rat_window sheep_nail shelf_pin sock_fish stick_screw thread_floor ticket_map tongue_sun tree_curtain tree_fowl
+Case #99: apple_cake ball_spade band_table bee_wall berry_face branch_baby cheese_leaf clock_baby cup_frame hair_collar head_trousers kettle_prison office_circle receipt_umbrella sock_brain toe_shoe train_fowl watch_tail
+Case #100: basin_cushion board_nose brain_net button_tree card_prison cat_sock cup_apple cushion_foot dress_leaf frame_angle glove_line head_dog knee_worm office_frame prison_orange screw_knee shelf_garden star_thread street_band tree_foot watch_map
diff --git a/codejam_2008/src/y2008beta/B-small-practice.out b/codejam_2008/src/y2008beta/B-small-practice.out
new file mode 100644
index 0000000..7d8ace4
--- /dev/null
+++ b/codejam_2008/src/y2008beta/B-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: bar code
+Case #2: code
+Case #3: bar jam
+Case #4: jam
+Case #5: bar code google
+Case #6: bar code foo google
+Case #7: bar foo
+Case #8: code google
+Case #9: bar
+Case #10: code
+Case #11: book curtain fowl hair
+Case #12: girl tail
+Case #13: brake chain finger picture window
+Case #14: floor
+Case #15: brick stocking
+Case #16: frame glove jewel knee
+Case #17: ant knot skin
+Case #18: town
+Case #19: bag face potato
+Case #20: boat collar stamp
+Case #21: camera fish office skirt
+Case #22: dog finger
+Case #23: berry chin
+Case #24: curtain pencil
+Case #25: fish
+Case #26: ball clock sheep
+Case #27: arch island plate prison
+Case #28: boy
+Case #29: bed dress face
+Case #30: cake cat jewel ring toe
+Case #31: feather
+Case #32: potato
+Case #33: chin hand knot root square
+Case #34: brush
+Case #35: sheep spoon throat
+Case #36: pipe throat
+Case #37: drop pin tongue
+Case #38: arch dog hook station
+Case #39: farm office tooth
+Case #40: cup
+Case #41: angle ball bone
+Case #42: branch finger muscle
+Case #43: goat pipe
+Case #44: basin chin trousers
+Case #45: tooth
+Case #46: bath camera hook nut
+Case #47: heart wire
+Case #48: bulb pot
+Case #49: hammer
+Case #50: apple frame sheep tongue
+Case #51: bird cow dress
+Case #52: dress
+Case #53: bee camera circle
+Case #54: bucket frame star
+Case #55: bee fowl rat wall wire
+Case #56: foot
+Case #57: ball band farm plough rail wing
+Case #58: hand horn kettle mouth
+Case #59: frame
+Case #60: cow window
+Case #61: farm
+Case #62: glove ship stamp wall
+Case #63: cheese girl sponge
+Case #64: angle camera fork
+Case #65: arch
+Case #66: hook lock skirt
+Case #67: cake
+Case #68: brick key net pocket
+Case #69: roof
+Case #70: baby box garden monkey sock
+Case #71: bucket hair kettle spoon
+Case #72: cart cup knee
+Case #73: foot knee
+Case #74: worm
+Case #75: bone pipe
+Case #76: cat roof
+Case #77: wheel
+Case #78: spade
+Case #79: library
+Case #80: door knot square stocking
+Case #81: key wing
+Case #82: drop needle root square
+Case #83: board gun stocking
+Case #84: cord fowl stick
+Case #85: library needle
+Case #86: door eye
+Case #87: berry knife
+Case #88: boat fowl
+Case #89: boy branch
+Case #90: egg hospital match
+Case #91: basket nut
+Case #92: sheep
+Case #93: brain bulb fowl
+Case #94: basket bed ear monkey
+Case #95: lock wing
+Case #96: brush hat
+Case #97: cloud
+Case #98: bird leg
+Case #99: collar hammer
+Case #100: drawer jewel
diff --git a/codejam_2008/src/y2008beta/b.rs b/codejam_2008/src/y2008beta/b.rs
index 3d92dd4..8722a3b 100644
--- a/codejam_2008/src/y2008beta/b.rs
+++ b/codejam_2008/src/y2008beta/b.rs
@@ -36,7 +36,7 @@ fn lis(xs: &Vec<u8>) -> usize
 
     for i in 0..xs.len() {
         let it = lis.lower_bound(&xs[i]);
-        if it > lis.len() {
+        if it >= lis.len() {
             lis.push(xs[i]);
         } else {
             lis[it] = xs[i];

From 0d0a4c84a4097ab175e8bd6583b5f0cac744794b Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 17 Feb 2019 12:26:36 -0300
Subject: [PATCH 020/122] c

---
 codejam_2008/src/main.rs                      |    3 +-
 .../src/y2008beta/C-large-practice.in         | 3927 +++++++++++++++++
 .../src/y2008beta/C-small-practice.in         | 1391 ++++++
 codejam_2008/src/y2008beta/a.rs               |    1 -
 codejam_2008/src/y2008beta/b.rs               |   34 +-
 codejam_2008/src/y2008beta/c.rs               |   53 +
 6 files changed, 5388 insertions(+), 21 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008beta/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008beta/c.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 4fec918..bdea118 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -33,6 +33,7 @@ pub fn run_y2008_round_practice()
 pub fn run_y2008_round_beta()
 {
     y2008beta::a::solve_all_cases();
+    y2008beta::b::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -57,7 +58,7 @@ pub fn run_y2008_round2()
 
 fn main()
 {
-    y2008beta::b::solve_all_cases();
+    y2008beta::c::solve_all_cases();
 
     init_log();
 }
diff --git a/codejam_2008/src/y2008beta/C-large-practice.in b/codejam_2008/src/y2008beta/C-large-practice.in
new file mode 100644
index 0000000..a48ee8f
--- /dev/null
+++ b/codejam_2008/src/y2008beta/C-large-practice.in
@@ -0,0 +1,3927 @@
+100
+41 daly_city
+pembroke_pines waterbury 303
+waterbury san_diego 962
+daly_city chandler 1053
+pembroke_pines waterbury 303
+hartford tulsa 962
+cincinnati pembroke_pines 540
+cincinnati boston 425
+arlington boston 425
+pembroke_pines waterbury 303
+daly_city cincinnati 628
+cincinnati pembroke_pines 540
+arlington waterbury 843
+chandler waterbury 418
+daly_city cincinnati 628
+cincinnati waterbury 843
+boston pembroke_pines 115
+daly_city arlington 628
+boston erie 418
+daly_city chandler 1053
+arlington waterbury 843
+cincinnati waterbury 843
+daly_city arlington 628
+pembroke_pines waterbury 303
+erie san_bernardino 962
+waterbury san_diego 962
+cincinnati waterbury 843
+daly_city chandler 1053
+chandler hartford 418
+cincinnati waterbury 843
+pembroke_pines waterbury 303
+pembroke_pines waterbury 303
+pembroke_pines waterbury 303
+cincinnati chandler 425
+daly_city san_diego 2433
+boston pembroke_pines 115
+cincinnati chandler 425
+cincinnati pembroke_pines 540
+daly_city cincinnati 628
+boston pembroke_pines 115
+chandler hartford 418
+chandler hartford 418
+45 overland_park
+omaha dallas 700
+dallas erie 133
+sunnyvale ontario 92
+omaha dallas 700
+san_diego henderson 2030
+dallas sunnyvale 41
+overland_park austin 955
+allentown erie 92
+ontario mckinney 902
+dallas allentown 41
+dallas fayetteville 41
+omaha birmingham 833
+omaha erie 833
+allentown ontario 92
+henderson columbia 243
+fayetteville ontario 92
+omaha sunnyvale 741
+overland_park omaha 1346
+sunnyvale ontario 92
+fayetteville erie 92
+omaha dallas 700
+austin dallas 1091
+allentown ontario 92
+dallas birmingham 133
+omaha birmingham 833
+fayetteville birmingham 92
+sunnyvale birmingham 92
+overland_park dallas 2046
+austin omaha 391
+austin sunnyvale 1132
+sunnyvale erie 92
+fayetteville san_diego 92
+austin allentown 1132
+sunnyvale san_diego 92
+overland_park omaha 1346
+san_diego jacksonville 1657
+austin omaha 391
+dallas fayetteville 41
+austin omaha 391
+allentown erie 92
+austin omaha 391
+overland_park austin 955
+omaha birmingham 833
+overland_park austin 955
+dallas sunnyvale 41
+44 montgomery
+corona grand_rapids 357
+montgomery fayetteville 995
+el_monte grand_rapids 178
+lincoln newark 445
+minneapolis el_monte 179
+minneapolis south_bend 357
+lincoln el_monte 624
+lincoln minneapolis 445
+corona west_valley 357
+corona grand_rapids 357
+lincoln newark 445
+montgomery newark 995
+corona el_monte 179
+montgomery lincoln 550
+corona garland 357
+corona el_monte 179
+corona grand_rapids 357
+newark fresno 357
+montgomery lincoln 550
+lincoln newark 445
+el_monte grand_rapids 178
+lincoln minneapolis 445
+lincoln newark 445
+montgomery corona 995
+lincoln el_monte 624
+lincoln minneapolis 445
+lincoln minneapolis 445
+lincoln el_monte 624
+montgomery newark 995
+fayetteville west_valley 357
+montgomery fayetteville 995
+lincoln newark 445
+el_monte west_valley 178
+montgomery lincoln 550
+newark grand_rapids 357
+corona grand_rapids 357
+montgomery newark 995
+corona fresno 357
+lincoln corona 445
+corona fresno 357
+montgomery newark 995
+montgomery south_bend 1352
+minneapolis grand_rapids 357
+corona west_valley 357
+32 fort_worth
+lexington_fayette omaha 1771
+buffalo warren 331
+lexington_fayette jackson 1082
+jackson omaha 689
+lexington_fayette providence 642
+cedar_rapids tallahassee 1771
+buffalo lexington_fayette 331
+columbus hialeah 1129
+cedar_rapids tallahassee 1771
+lexington_fayette omaha 1771
+columbus jackson 440
+fort_worth lexington_fayette 438
+fort_worth cedar_rapids 438
+jackson omaha 689
+buffalo lexington_fayette 331
+lexington_fayette columbus 642
+cedar_rapids jackson 1082
+warren columbus 642
+fort_worth buffalo 107
+jackson baltimore 689
+fort_worth lexington_fayette 438
+fort_worth hialeah 2209
+fort_worth buffalo 107
+jackson omaha 689
+buffalo warren 331
+columbus baltimore 1129
+buffalo cedar_rapids 331
+lexington_fayette hialeah 1771
+fort_worth cedar_rapids 438
+cedar_rapids jackson 1082
+warren omaha 1771
+lexington_fayette providence 642
+36 mobile
+athens san_antonio 728
+sacramento alexandria 51
+huntsville lancaster 1111
+san_antonio sacramento 332
+tulsa norman 1553
+tulsa norman 1553
+huntsville mesquite 436
+tulsa berkeley 776
+tulsa anchorage 1587
+mobile athens 1626
+tulsa stockton 620
+mesquite san_antonio 292
+tulsa stockton 620
+berkeley indianapolis 811
+norman huntsville 34
+indianapolis san_antonio 728
+athens mesquite 436
+mobile norman 1592
+stockton berkeley 156
+norman lancaster 1145
+tulsa stockton 620
+mobile tulsa 39
+norman anchorage 34
+tulsa stockton 620
+tulsa stockton 620
+berkeley athens 811
+norman mesquite 470
+tulsa mesquite 2023
+tulsa norman 1553
+berkeley anchorage 811
+berkeley anchorage 811
+tulsa anchorage 1587
+stockton anchorage 967
+athens mesquite 436
+stockton berkeley 156
+berkeley indianapolis 811
+45 tallahassee
+columbia el_paso 991
+tallahassee milwaukee 906
+denton lancaster 174
+tucson denton 1342
+tallahassee norwalk 906
+tucson denton 1342
+tucson cape_coral 1342
+tallahassee el_paso 1897
+lancaster lexington_fayette 301
+tallahassee norwalk 906
+tucson denton 1342
+columbia miami 3863
+tallahassee milwaukee 906
+columbia jackson 2301
+tallahassee el_paso 1897
+manchester lexington_fayette 1817
+tucson cape_coral 1342
+cape_coral lancaster 174
+el_paso cape_coral 2088
+tallahassee columbia 906
+jackson lexington_fayette 1253
+norwalk manchester 1737
+el_paso jackson 1310
+lancaster roseville 301
+manchester cape_coral 1342
+milwaukee el_paso 991
+newark roseville 301
+norwalk tucson 1737
+milwaukee roseville 3554
+jackson denton 778
+lancaster lexington_fayette 301
+norwalk denton 3079
+el_paso manchester 746
+tucson lancaster 1516
+columbia miami 3863
+tallahassee milwaukee 906
+manchester newark 1516
+norwalk tucson 1737
+cape_coral newark 174
+tallahassee manchester 2643
+manchester denton 1342
+el_paso denton 2088
+denton lancaster 174
+denton newark 174
+tallahassee columbia 906
+40 amarillo
+torrance birmingham 1127
+torrance fort_collins 173
+knoxville tacoma 384
+atlanta orange 3701
+durham riverside 674
+costa_mesa st_louis 2100
+st_louis joliet 229
+amarillo costa_mesa 211
+san_buenaventura port_st_lucie 1330
+costa_mesa evansville 893
+orange durham 270
+costa_mesa torrance 3282
+torrance birmingham 1127
+joliet torrance 953
+memphis knoxville 46
+san_buenaventura birmingham 30
+san_antonio memphis 394
+atlanta torrance 1544
+joliet san_buenaventura 2050
+orange port_st_lucie 270
+amarillo san_buenaventura 4590
+amarillo knoxville 5536
+evansville carrollton 4546
+orange riverside 944
+costa_mesa evansville 893
+orange tacoma 270
+atlanta st_louis 362
+san_buenaventura birmingham 30
+atlanta carrollton 3701
+st_louis memphis 3179
+costa_mesa evansville 893
+costa_mesa austin 1738
+knoxville riverside 1058
+evansville atlanta 845
+torrance san_buenaventura 1097
+amarillo evansville 1104
+evansville joliet 1436
+torrance fort_collins 173
+joliet fort_collins 1126
+fort_collins san_antonio 1430
+36 bellevue
+spokane springfield 1364
+bellevue joliet 1898
+newark olathe 1833
+tallahassee olathe 971
+fort_collins irving 502
+irving joliet 862
+spokane irving 502
+tallahassee reno 1627
+spokane newark 502
+coral_springs springfield 1364
+bellevue fort_collins 534
+coral_springs reno 2991
+newark tallahassee 862
+spokane springfield 1364
+bellevue coral_springs 534
+bellevue irving 1036
+chula_vista newark 502
+bellevue fort_collins 534
+spokane irving 502
+newark joliet 862
+bellevue spokane 534
+newark joliet 862
+spokane newark 502
+spokane newark 502
+bellevue coral_springs 534
+bellevue chula_vista 534
+coral_springs newark 502
+bellevue spokane 534
+olathe reno 656
+spokane reno 2991
+chula_vista irving 502
+bellevue fort_collins 534
+olathe mesquite 656
+coral_springs joliet 1364
+mesquite fayetteville 986
+bellevue fort_collins 534
+27 syracuse
+syracuse hampton 518
+syracuse savannah 518
+norman carrollton 982
+savannah st_paul 3354
+henderson provo 1219
+santa_clarita norman 626
+st_paul boston 100
+savannah henderson 767
+henderson carrollton 2201
+santa_clarita norman 626
+syracuse henderson 1285
+santa_clarita norfolk 870
+henderson newport_news 593
+savannah carrollton 2968
+carrollton peoria 486
+syracuse savannah 518
+syracuse santa_clarita 1878
+norman norfolk 244
+syracuse hampton 518
+newport_news norman 626
+syracuse norman 2504
+carrollton lafayette 486
+savannah henderson 767
+savannah henderson 767
+hampton newport_news 1360
+carrollton st_paul 386
+syracuse norman 2504
+39 laredo
+providence coral_springs 1018
+laredo coral_springs 1912
+san_jose jacksonville 1299
+arlington akron 3358
+jacksonville newport_news 1117
+athens akron 2274
+arlington coral_springs 99
+elgin arlington 79
+jacksonville arlington 33
+san_jose providence 413
+elgin brownsville 2816
+san_jose elgin 1253
+arlington athens 1084
+santa_clarita coral_springs 1431
+laredo tacoma 2897
+providence athens 2003
+providence coral_springs 1018
+san_jose providence 413
+newport_news waterbury 700
+elgin jacksonville 46
+providence athens 2003
+arlington coral_springs 99
+coral_springs akron 3259
+laredo san_jose 481
+santa_clarita jacksonville 1299
+elgin arlington 79
+newport_news brownsville 1653
+laredo santa_clarita 481
+santa_clarita providence 413
+arlington tacoma 1084
+santa_clarita elgin 1253
+laredo arlington 1813
+laredo santa_clarita 481
+laredo san_jose 481
+laredo santa_clarita 481
+san_jose jacksonville 1299
+san_jose tacoma 2416
+providence elgin 840
+santa_clarita elgin 1253
+34 antioch
+antioch detroit 646
+antioch detroit 646
+detroit waterbury 509
+antioch lafayette 646
+palmdale raleigh 351
+norman nashville 719
+antioch buffalo 646
+lafayette waterbury 509
+norman newark 509
+antioch lafayette 646
+lafayette waterbury 509
+antioch detroit 646
+norman waterbury 509
+waterbury oklahoma_city 1459
+lafayette palmdale 980
+antioch newark 1155
+antioch buffalo 646
+detroit nashville 719
+lafayette waterbury 509
+antioch buffalo 646
+antioch buffalo 646
+lafayette newark 509
+waterbury miami 2399
+detroit raleigh 1331
+newark palmdale 471
+antioch detroit 646
+antioch newark 1155
+antioch buffalo 646
+antioch detroit 646
+antioch norman 646
+detroit newark 509
+newark palmdale 471
+antioch lafayette 646
+waterbury palmdale 471
+44 garland
+cape_coral greensboro 899
+greensboro scottsdale 1029
+greensboro rancho_cucamonga 1
+paterson greensboro 899
+garland paterson 864
+clearwater chattanooga 370
+clearwater rancho_cucamonga 1
+clearwater rancho_cucamonga 1
+garland cape_coral 864
+paterson eugene 899
+cape_coral rancho_cucamonga 900
+garland paterson 864
+scottsdale san_antonio 1617
+rancho_cucamonga mobile 369
+rancho_cucamonga chattanooga 369
+mobile huntsville 2276
+cape_coral eugene 899
+cape_coral clearwater 899
+mobile lexington_fayette 2276
+eugene rancho_cucamonga 1
+clearwater lexington_fayette 2646
+rancho_cucamonga lincoln 1827
+mobile lincoln 1458
+garland paterson 864
+rancho_cucamonga lincoln 1827
+greensboro lincoln 1828
+paterson rancho_cucamonga 900
+lincoln lexington_fayette 818
+clearwater scottsdale 1029
+cape_coral rancho_cucamonga 900
+greensboro lincoln 1828
+garland cape_coral 864
+cape_coral eugene 899
+paterson chattanooga 1269
+cape_coral greensboro 899
+clearwater roseville 2646
+garland cape_coral 864
+cape_coral mobile 1269
+garland eugene 1763
+rancho_cucamonga san_antonio 2645
+garland paterson 864
+scottsdale lincoln 799
+eugene huntsville 2646
+paterson rancho_cucamonga 900
+50 houston
+houston worcester 108
+berkeley green_bay 3637
+fort_lauderdale san_buenaventura 1688
+worcester charlotte 2106
+fort_lauderdale charlotte 1180
+fort_lauderdale tacoma 726
+berkeley shreveport 926
+worcester shreveport 926
+green_bay port_st_lucie 162
+shreveport san_buenaventura 1688
+san_buenaventura bridgeport 1023
+tacoma erie 1501
+fort_lauderdale erie 2227
+fort_lauderdale bridgeport 2711
+fort_lauderdale tacoma 726
+charlotte san_buenaventura 508
+san_buenaventura bridgeport 1023
+worcester green_bay 3637
+worcester erie 3153
+shreveport charlotte 1180
+worcester tacoma 1652
+worcester tacoma 1652
+erie green_bay 484
+worcester fort_lauderdale 926
+erie bridgeport 484
+tacoma green_bay 1985
+worcester tacoma 1652
+berkeley bridgeport 3637
+houston berkeley 108
+charlotte san_buenaventura 508
+tacoma green_bay 1985
+tacoma los_angeles 2147
+houston green_bay 3745
+houston shreveport 1034
+charlotte san_buenaventura 508
+worcester fort_lauderdale 926
+worcester shreveport 926
+houston shreveport 1034
+fort_lauderdale san_buenaventura 1688
+san_buenaventura bridgeport 1023
+houston shreveport 1034
+shreveport tacoma 726
+houston worcester 108
+worcester port_st_lucie 3799
+tacoma san_buenaventura 962
+berkeley fort_lauderdale 926
+fort_lauderdale bridgeport 2711
+tacoma bridgeport 1985
+fort_lauderdale tacoma 726
+shreveport erie 2227
+39 lancaster
+fayetteville glendale 2125
+long_beach hayward 1697
+scottsdale akron 3080
+lancaster lexington_fayette 2212
+fayetteville pittsburgh 654
+fayetteville scottsdale 1191
+lubbock lexington_fayette 863
+lubbock scottsdale 2310
+ontario lubbock 719
+pittsburgh long_beach 537
+pittsburgh carrollton 3617
+long_beach independence 1651
+ontario athens 1609
+ontario lubbock 719
+fayetteville miami 4271
+athens sunnyvale 3607
+ontario pittsburgh 2492
+lexington_fayette glendale 2381
+sunnyvale oxnard 893
+ontario scottsdale 3029
+long_beach glendale 934
+pittsburgh scottsdale 537
+athens fayetteville 229
+pittsburgh long_beach 537
+ontario hayward 4726
+scottsdale oxnard 3080
+lancaster scottsdale 3659
+athens independence 3071
+fayetteville pittsburgh 654
+glendale independence 717
+fayetteville miami 4271
+athens scottsdale 1420
+sunnyvale akron 893
+lancaster lexington_fayette 2212
+lancaster hayward 5356
+independence oxnard 1429
+glendale miami 2146
+independence akron 1429
+lancaster ontario 630
+29 jersey_city
+pembroke_pines modesto 896
+jersey_city moreno_valley 856
+plano salt_lake_city 328
+salt_lake_city pembroke_pines 2003
+garden_grove glendale 1491
+glendale modesto 637
+plano toledo 1099
+moreno_valley glendale 2851
+moreno_valley tempe 1978
+plano salt_lake_city 328
+plano salt_lake_city 328
+moreno_valley plano 261
+jersey_city pembroke_pines 3448
+moreno_valley plano 261
+moreno_valley toledo 1360
+toledo tampa 2128
+pembroke_pines denver 143
+glendale modesto 637
+salt_lake_city garden_grove 771
+plano salt_lake_city 328
+jersey_city moreno_valley 856
+jersey_city plano 1117
+plano toledo 1099
+salt_lake_city tempe 1389
+tempe denver 757
+toledo pembroke_pines 1232
+moreno_valley plano 261
+tempe denver 757
+plano salt_lake_city 328
+30 winston_salem
+winston_salem inglewood 349
+winston_salem toledo 349
+mckinney richmond 933
+winston_salem visalia 1572
+mcallen alexandria 290
+winston_salem new_haven 349
+winston_salem new_haven 349
+winston_salem bellevue 349
+daly_city lexington_fayette 690
+alexandria lafayette 690
+mcallen visalia 290
+winston_salem oxnard 1282
+oxnard alexandria 290
+winston_salem mckinney 349
+new_haven visalia 1223
+oxnard daly_city 290
+mckinney alexandria 1223
+inglewood richmond 933
+winston_salem richmond 1282
+winston_salem toledo 349
+oxnard lexington_fayette 980
+inglewood mcallen 933
+winston_salem inglewood 349
+winston_salem new_haven 349
+winston_salem richmond 1282
+winston_salem new_haven 349
+winston_salem new_haven 349
+winston_salem inglewood 349
+winston_salem new_haven 349
+alexandria lexington_fayette 690
+38 denver
+arlington irvine 672
+irvine madison 1654
+vallejo fort_worth 351
+omaha vallejo 1324
+scottsdale madison 910
+brownsville madison 1654
+omaha irvine 1324
+denver brownsville 1477
+milwaukee escondido 384
+brownsville milwaukee 744
+denver omaha 153
+omaha akron 1324
+arlington brownsville 672
+arlington brownsville 672
+denver madison 3131
+denver brownsville 1477
+akron escondido 1128
+arlington irvine 672
+denver omaha 153
+irvine milwaukee 744
+denver akron 1477
+denver scottsdale 2221
+denver akron 1477
+omaha arlington 652
+omaha brownsville 1324
+denver vallejo 1477
+fort_worth knoxville 1303
+arlington knoxville 2326
+omaha brownsville 1324
+akron fort_worth 351
+omaha scottsdale 2068
+fort_worth escondido 777
+denver omaha 153
+brownsville fort_worth 351
+brownsville oakland 744
+milwaukee madison 910
+denver irvine 1477
+escondido madison 526
+30 fort_wayne
+lowell tampa 1062
+tampa detroit 735
+tempe newark 160
+fort_wayne gilbert 699
+detroit new_haven 1909
+lowell kansas_city 1524
+detroit miami 1115
+tampa detroit 735
+port_st_lucie kansas_city 1138
+fort_wayne lowell 1304
+fort_wayne gilbert 699
+fort_wayne new_haven 5010
+port_st_lucie tampa 676
+gilbert tempe 3357
+fort_wayne gilbert 699
+detroit miami 1115
+escondido newark 1115
+lowell port_st_lucie 386
+kansas_city pembroke_pines 273
+escondido newark 1115
+tampa detroit 735
+kansas_city miami 1388
+port_st_lucie tampa 676
+kansas_city pembroke_pines 273
+kansas_city escondido 273
+tampa pembroke_pines 735
+gilbert kansas_city 2129
+kansas_city miami 1388
+fort_wayne port_st_lucie 1690
+tempe newark 160
+30 topeka
+orlando huntsville 1086
+lansing pompano_beach 680
+topeka lansing 1236
+topeka lansing 1236
+topeka lansing 1236
+topeka san_diego 1236
+garland roseville 680
+san_diego roseville 680
+orlando garland 406
+orlando san_diego 406
+orlando anaheim 406
+topeka anaheim 1236
+orlando anaheim 406
+orlando garland 406
+garland huntsville 680
+anaheim durham 680
+topeka anaheim 1236
+san_diego roseville 680
+anaheim pompano_beach 680
+lansing roseville 680
+san_diego pompano_beach 680
+orlando anaheim 406
+topeka anaheim 1236
+topeka roseville 1916
+orlando garland 406
+topeka orlando 830
+topeka lansing 1236
+topeka huntsville 1916
+topeka garland 1236
+topeka lansing 1236
+38 reno
+springfield vancouver 227
+reno springfield 432
+anchorage rochester 561
+reno clearwater 216
+athens south_bend 788
+clearwater springfield 216
+springfield inglewood 788
+clearwater baltimore 216
+athens evansville 227
+baltimore vancouver 227
+reno athens 432
+vancouver inglewood 561
+baltimore evansville 227
+clearwater baltimore 216
+clearwater anchorage 443
+reno springfield 432
+evansville inglewood 561
+clearwater clarksville 1004
+clearwater springfield 216
+reno athens 432
+baltimore evansville 227
+athens anchorage 227
+athens south_bend 788
+clearwater baltimore 216
+clearwater baltimore 216
+vancouver inglewood 561
+reno evansville 659
+springfield vancouver 227
+reno baltimore 432
+springfield evansville 227
+evansville south_bend 561
+springfield evansville 227
+reno athens 432
+evansville south_bend 561
+clearwater vancouver 443
+reno rochester 1220
+reno springfield 432
+clearwater baltimore 216
+43 independence
+amarillo san_antonio 1297
+tucson mesa 675
+jacksonville portland 1355
+mesa henderson 780
+independence omaha 1058
+bellevue santa_ana 1655
+omaha bellevue 2441
+amarillo omaha 463
+portsmouth jacksonville 1270
+bellevue santa_ana 1655
+mckinney san_antonio 1297
+independence jacksonville 3799
+mckinney san_antonio 1297
+independence amarillo 595
+amarillo omaha 463
+amarillo tucson 3884
+rochester port_st_lucie 787
+omaha tucson 3421
+san_antonio portsmouth 637
+jacksonville tempe 1355
+tucson mesa 675
+independence amarillo 595
+omaha jacksonville 2741
+bellevue rochester 1655
+amarillo jacksonville 3204
+san_antonio bellevue 1607
+independence amarillo 595
+portsmouth jacksonville 1270
+mckinney san_antonio 1297
+san_antonio bellevue 1607
+amarillo jacksonville 3204
+independence mckinney 595
+portsmouth jacksonville 1270
+independence amarillo 595
+independence omaha 1058
+mckinney san_antonio 1297
+mckinney portsmouth 1934
+omaha bellevue 2441
+amarillo omaha 463
+san_antonio portsmouth 637
+portsmouth rochester 2625
+mckinney santa_ana 4559
+amarillo bellevue 2904
+48 columbia
+columbia memphis 1647
+columbia naperville 2401
+norwalk garden_grove 1248
+hartford naperville 1623
+dayton henderson 343
+evansville raleigh 530
+buffalo carrollton 4532
+hartford evansville 4871
+corpus_christi evansville 2834
+evansville carrollton 530
+columbia buffalo 1647
+memphis dayton 1972
+irving evansville 1072
+provo hartford 490
+naperville garden_grove 1248
+grand_prairie dayton 1218
+irving durham 1408
+naperville henderson 1561
+memphis corpus_christi 1168
+pasadena raleigh 1327
+naperville corpus_christi 414
+dayton henderson 343
+columbia norwalk 2401
+memphis grand_prairie 754
+hartford dayton 2841
+hartford grand_prairie 1623
+grand_prairie irving 2176
+hartford memphis 869
+hartford buffalo 869
+columbia buffalo 1647
+columbia grand_prairie 2401
+columbia norwalk 2401
+columbia provo 288
+corpus_christi pasadena 2037
+hartford norwalk 1623
+dayton garden_grove 30
+provo buffalo 1359
+pasadena evansville 797
+hartford norwalk 1623
+naperville corpus_christi 414
+henderson irving 615
+buffalo corpus_christi 1168
+hartford memphis 869
+irving durham 1408
+columbia provo 288
+memphis grand_prairie 754
+norwalk evansville 3248
+norwalk pasadena 2451
+32 san_diego
+san_diego allentown 842
+san_diego chandler 842
+louisville sacramento 739
+san_diego chandler 842
+orange miami 973
+orange mckinney 973
+miami syracuse 434
+chandler sacramento 739
+allentown sacramento 739
+allentown miami 1999
+mckinney syracuse 434
+louisville lancaster 739
+chandler sacramento 739
+louisville sacramento 739
+allentown lancaster 739
+chandler mckinney 1999
+allentown lancaster 739
+allentown lancaster 739
+chandler sacramento 739
+chandler sacramento 739
+orange miami 973
+orange mckinney 973
+allentown orange 1026
+sacramento birmingham 1694
+san_diego orange 1868
+orange miami 973
+allentown orange 1026
+sacramento miami 1260
+miami syracuse 434
+san_diego louisville 842
+chandler sacramento 739
+louisville syracuse 2433
+44 tampa
+salt_lake_city fort_collins 669
+fort_collins lafayette 504
+lancaster eugene 661
+fort_collins newark 109
+newark lafayette 395
+newark tacoma 395
+eugene st_petersburg 1393
+fort_collins lafayette 504
+fort_collins lafayette 504
+tampa newark 3034
+athens st_petersburg 1393
+athens salt_lake_city 724
+irvine fort_collins 2054
+eugene fort_collins 1393
+tampa lancaster 871
+lancaster newark 2163
+salt_lake_city newark 778
+eugene newark 1502
+lancaster salt_lake_city 1385
+eugene st_petersburg 1393
+athens salt_lake_city 724
+salt_lake_city lafayette 1173
+tampa irvine 871
+athens st_petersburg 1393
+athens newark 1502
+athens fort_collins 1393
+eugene newark 1502
+fort_collins newark 109
+eugene huntsville 1897
+fort_collins newark 109
+st_petersburg lafayette 504
+lancaster st_petersburg 2054
+irvine athens 661
+eugene st_petersburg 1393
+lancaster newark 2163
+lancaster athens 661
+athens huntsville 1897
+tampa eugene 1532
+eugene salt_lake_city 724
+newark huntsville 395
+st_petersburg huntsville 504
+lancaster newark 2163
+irvine salt_lake_city 1385
+newark huntsville 395
+43 tacoma
+tacoma waco 856
+indianapolis fayetteville 909
+indianapolis clarksville 909
+elk_grove bridgeport 1007
+irvine elk_grove 38
+billings irvine 373
+irvine lubbock 38
+irvine elk_grove 38
+pittsburgh lubbock 1884
+waco bridgeport 2891
+lubbock indianapolis 98
+tacoma escondido 1759
+pittsburgh irvine 1846
+tacoma waco 856
+escondido irvine 943
+waco billings 1473
+tacoma waco 856
+elk_grove fayetteville 1007
+pittsburgh indianapolis 1982
+waco buffalo 2891
+indianapolis bridgeport 909
+elk_grove clarksville 1007
+pittsburgh billings 1473
+waco escondido 903
+billings elk_grove 411
+tacoma pittsburgh 856
+tacoma pittsburgh 856
+irvine fayetteville 1045
+pittsburgh irvine 1846
+waco escondido 903
+pittsburgh billings 1473
+billings elk_grove 411
+pittsburgh indianapolis 1982
+pittsburgh lubbock 1884
+tacoma fayetteville 3747
+billings elk_grove 411
+irvine fayetteville 1045
+pittsburgh bridgeport 2891
+waco elk_grove 1884
+billings lubbock 411
+tacoma escondido 1759
+tacoma escondido 1759
+tacoma elk_grove 2740
+33 orlando
+birmingham newport_news 611
+lafayette newport_news 611
+omaha rancho_cucamonga 1516
+newport_news mobile 905
+birmingham newport_news 611
+lafayette ann_arbor 1634
+lafayette newport_news 611
+orlando birmingham 1518
+orlando alexandria 3034
+sacramento fort_worth 1379
+corpus_christi birmingham 973
+orlando lafayette 1518
+orlando corpus_christi 545
+alexandria chesapeake 118
+omaha toledo 1634
+newport_news mobile 905
+birmingham rancho_cucamonga 1516
+corpus_christi sacramento 3341
+birmingham mobile 1516
+corpus_christi birmingham 973
+orlando omaha 1518
+orlando birmingham 1518
+corpus_christi alexandria 2489
+newport_news alexandria 905
+rancho_cucamonga ann_arbor 118
+sacramento elgin 457
+alexandria toledo 118
+alexandria ann_arbor 118
+orlando birmingham 1518
+corpus_christi newport_news 1584
+orlando lafayette 1518
+corpus_christi lafayette 973
+alexandria sacramento 852
+39 billings
+st_louis fort_lauderdale 2320
+billings hollywood 793
+charleston chattanooga 2669
+hollywood west_covina 1387
+billings west_covina 2180
+newark vancouver 292
+hollywood midland 673
+newark santa_rosa 292
+billings newark 501
+billings santa_rosa 793
+newark santa_rosa 292
+charleston midland 264
+newark santa_rosa 292
+billings newark 501
+billings newark 501
+midland chattanooga 2405
+charleston midland 264
+st_louis charleston 409
+newark hollywood 292
+billings hollywood 793
+newark hollywood 292
+newark santa_rosa 292
+newark santa_rosa 292
+newark hollywood 292
+charleston west_covina 978
+newark st_louis 292
+newark washington_dc 292
+billings hollywood 793
+newark st_louis 292
+billings washington_dc 793
+newark west_covina 1679
+midland fort_lauderdale 1647
+newark santa_rosa 292
+newark hollywood 292
+billings hollywood 793
+washington_dc charleston 409
+vancouver chattanooga 3078
+billings vancouver 793
+santa_rosa west_covina 1387
+28 boston
+boston houston 668
+fort_lauderdale spokane 1631
+boston flint 1887
+pembroke_pines flint 1219
+pembroke_pines fort_lauderdale 970
+houston fort_lauderdale 970
+fort_lauderdale clearwater 78
+boston clearwater 1716
+boston houston 668
+boston pembroke_pines 668
+fort_lauderdale clearwater 78
+houston fort_lauderdale 970
+boston fort_lauderdale 1638
+fort_lauderdale chesapeake 1131
+clearwater flint 171
+houston flint 1219
+houston fort_lauderdale 970
+houston flint 1219
+boston pembroke_pines 668
+pembroke_pines clearwater 1048
+houston chesapeake 2101
+boston clearwater 1716
+flint atlanta 57
+boston houston 668
+pembroke_pines atlanta 1276
+fort_lauderdale chesapeake 1131
+fort_lauderdale flint 249
+houston clearwater 1048
+41 cary
+paterson hartford 1239
+baltimore paterson 2152
+pompano_beach greensboro 149
+billings washington_dc 2346
+greensboro abilene 889
+paterson washington_dc 330
+baltimore billings 136
+greensboro paterson 1170
+billings garland 697
+pompano_beach thousand_oaks 149
+oklahoma_city chattanooga 1419
+greensboro chattanooga 2589
+bellevue billings 136
+cary baltimore 300
+billings garland 697
+billings pompano_beach 697
+greensboro oklahoma_city 1170
+cary bellevue 300
+cary bellevue 300
+greensboro paterson 1170
+abilene oklahoma_city 281
+billings paterson 2016
+pompano_beach abilene 1038
+greensboro abilene 889
+garland greensboro 149
+pompano_beach abilene 1038
+pompano_beach oklahoma_city 1319
+pompano_beach washington_dc 1649
+baltimore abilene 1871
+thousand_oaks paterson 1170
+garland costa_mesa 2738
+cary abilene 2171
+bellevue billings 136
+garland greensboro 149
+bellevue garland 833
+cary bellevue 300
+garland thousand_oaks 149
+thousand_oaks chattanooga 2589
+pompano_beach thousand_oaks 149
+thousand_oaks abilene 889
+baltimore greensboro 982
+30 alexandria
+modesto tempe 1185
+modesto nashville 1185
+new_haven nashville 1185
+modesto garland 1185
+alexandria nashville 1219
+modesto nashville 1185
+new_haven nashville 1185
+topeka nashville 695
+topeka nashville 695
+topeka nashville 695
+modesto topeka 490
+topeka nashville 695
+alexandria tempe 1219
+topeka garland 695
+modesto winston_salem 1185
+alexandria modesto 34
+modesto topeka 490
+new_haven topeka 490
+alexandria new_haven 34
+alexandria nashville 1219
+alexandria new_haven 34
+new_haven topeka 490
+alexandria garland 1219
+topeka nashville 695
+alexandria winston_salem 1219
+alexandria new_haven 34
+alexandria new_haven 34
+topeka garland 695
+modesto topeka 490
+modesto nashville 1185
+33 fort_collins
+milwaukee manchester 1580
+elizabeth fullerton 70
+fort_collins tampa 396
+miami st_petersburg 502
+st_petersburg houston 457
+tampa fullerton 341
+fort_collins tampa 396
+milwaukee yonkers 271
+yonkers st_petersburg 502
+tampa yonkers 271
+st_petersburg manchester 807
+fort_collins yonkers 667
+milwaukee elizabeth 271
+milwaukee yonkers 271
+fullerton houston 889
+fort_collins yonkers 667
+fort_collins miami 667
+yonkers manchester 1309
+fort_collins tampa 396
+elizabeth fullerton 70
+fullerton houston 889
+st_petersburg wichita 807
+fort_collins milwaukee 396
+tampa elizabeth 271
+fort_collins yonkers 667
+fort_collins tampa 396
+fort_collins fullerton 737
+milwaukee yonkers 271
+yonkers fullerton 70
+fort_collins manchester 1976
+houston augusta 350
+fort_collins milwaukee 396
+fort_collins fullerton 737
+49 rockford
+rockford newark 902
+hollywood phoenix 789
+downey pomona 186
+mesquite downey 1151
+virginia_beach phoenix 1825
+mesquite columbus 301
+mesquite virginia_beach 301
+rockford virginia_beach 902
+columbus santa_ana 850
+newark evansville 2670
+virginia_beach ontario 3816
+oxnard toledo 1029
+rockford hialeah 4542
+downey hollywood 186
+downey hollywood 186
+mesquite hollywood 1337
+columbus pomona 1036
+oxnard yonkers 1029
+phoenix oxnard 962
+virginia_beach knoxville 3816
+santa_ana detroit 2966
+oxnard knoxville 1029
+evansville yonkers 1146
+newark hollywood 1036
+rockford mesquite 601
+downey hollywood 186
+mesquite pomona 1337
+phoenix evansville 845
+mesquite virginia_beach 301
+santa_ana hialeah 2790
+mesquite virginia_beach 301
+oxnard detroit 1029
+mesquite columbus 301
+virginia_beach downey 850
+rockford mesquite 601
+santa_ana evansville 1820
+downey pomona 186
+phoenix toledo 1991
+evansville ontario 1146
+downey phoenix 975
+oxnard inglewood 1029
+mesquite hollywood 1337
+virginia_beach oxnard 2787
+rockford virginia_beach 902
+newark downey 850
+evansville hialeah 970
+hialeah inglewood 176
+newark oxnard 2787
+pomona knoxville 2780
+44 pembroke_pines
+pembroke_pines berkeley 2321
+pembroke_pines orlando 321
+aurora louisville 120
+orlando indianapolis 446
+plano waco 326
+pembroke_pines independence 321
+pembroke_pines salem 321
+waco louisville 120
+baton_rouge lafayette 1442
+louisville lafayette 2111
+pembroke_pines los_angeles 321
+pembroke_pines los_angeles 321
+salem waco 326
+independence aurora 326
+pembroke_pines salem 321
+waco louisville 120
+independence aurora 326
+salem aurora 326
+pembroke_pines orlando 321
+pembroke_pines salem 321
+plano waco 326
+aurora louisville 120
+louisville berkeley 1554
+orlando topeka 446
+waco indianapolis 120
+plano waco 326
+orlando waco 326
+pembroke_pines salem 321
+pembroke_pines los_angeles 321
+waco brownsville 789
+pembroke_pines aurora 647
+berkeley lafayette 557
+indianapolis brownsville 669
+orlando waco 326
+pembroke_pines louisville 767
+pembroke_pines orlando 321
+pembroke_pines independence 321
+independence waco 326
+pembroke_pines plano 321
+orlando waco 326
+independence louisville 446
+pembroke_pines topeka 767
+indianapolis baton_rouge 669
+pembroke_pines los_angeles 321
+35 tempe
+port_st_lucie elizabeth 2460
+tempe savannah 1666
+port_st_lucie gilbert 854
+tempe washington_dc 1666
+tempe savannah 1666
+port_st_lucie savannah 854
+fullerton elizabeth 846
+port_st_lucie fullerton 1614
+fullerton tucson 773
+port_st_lucie savannah 854
+el_paso denton 73
+washington_dc fullerton 760
+port_st_lucie savannah 854
+port_st_lucie el_paso 2387
+tucson denton 73
+washington_dc denton 1606
+evansville gilbert 854
+fullerton el_paso 773
+gilbert fullerton 760
+evansville savannah 854
+washington_dc elizabeth 1606
+evansville washington_dc 854
+evansville washington_dc 854
+savannah el_paso 1533
+port_st_lucie washington_dc 854
+evansville cambridge 2460
+port_st_lucie denton 2460
+port_st_lucie gilbert 854
+fullerton tucson 773
+tempe port_st_lucie 812
+evansville gilbert 854
+savannah fullerton 760
+gilbert elizabeth 1606
+port_st_lucie gilbert 854
+tempe evansville 812
+32 new_york_city
+winston_salem st_petersburg 1211
+madison st_petersburg 227
+madison thousand_oaks 227
+new_york_city madison 1656
+madison st_petersburg 227
+madison thousand_oaks 227
+new_york_city winston_salem 672
+new_york_city winston_salem 672
+new_york_city winston_salem 672
+winston_salem oklahoma_city 50
+madison raleigh 227
+new_york_city st_petersburg 1883
+madison thousand_oaks 227
+new_york_city winston_salem 672
+new_york_city raleigh 1883
+omaha raleigh 1161
+madison thousand_oaks 227
+new_york_city omaha 722
+oklahoma_city thousand_oaks 1161
+new_york_city oklahoma_city 722
+omaha madison 934
+winston_salem madison 984
+omaha st_petersburg 1161
+oklahoma_city thousand_oaks 1161
+winston_salem raleigh 1211
+winston_salem oklahoma_city 50
+omaha madison 934
+new_york_city oklahoma_city 722
+oklahoma_city madison 934
+madison st_petersburg 227
+new_york_city madison 1656
+oklahoma_city st_petersburg 1161
+42 santa_clara
+santa_clara sioux_falls 1385
+huntsville durham 674
+tacoma huntsville 702
+sioux_falls columbus 674
+tacoma sioux_falls 702
+sioux_falls columbus 674
+sioux_falls columbus 674
+santa_clara tacoma 683
+tacoma sioux_falls 702
+santa_clara tacoma 683
+tacoma chicago 1376
+tacoma chicago 1376
+tacoma chicago 1376
+tacoma sioux_falls 702
+tacoma pomona 2353
+tacoma chicago 1376
+tacoma sioux_falls 702
+santa_clara huntsville 1385
+huntsville chicago 674
+sioux_falls columbus 674
+sioux_falls columbus 674
+santa_clara columbus 2059
+huntsville columbus 674
+pomona virginia_beach 970
+tacoma huntsville 702
+tacoma sioux_falls 702
+santa_clara chicago 2059
+pomona virginia_beach 970
+huntsville columbus 674
+santa_clara tacoma 683
+huntsville columbus 674
+santa_clara sioux_falls 1385
+santa_clara chicago 2059
+santa_clara sioux_falls 1385
+huntsville chicago 674
+santa_clara sioux_falls 1385
+sioux_falls chicago 674
+sioux_falls chicago 674
+tacoma columbus 1376
+tacoma chicago 1376
+sioux_falls chicago 674
+tacoma sioux_falls 702
+40 vancouver
+erie north_las_vegas 1718
+garden_grove spokane 2176
+north_las_vegas nashville 1345
+erie moreno_valley 186
+moreno_valley oxnard 701
+vancouver nashville 4037
+moreno_valley plano 3582
+vancouver huntington_beach 1861
+erie oxnard 887
+garden_grove nashville 2176
+vancouver erie 974
+boise plano 53
+erie garden_grove 887
+nashville boise 652
+north_las_vegas baton_rouge 446
+vancouver erie 974
+baton_rouge memphis 1551
+plano modesto 1189
+baton_rouge spokane 899
+moreno_valley huntington_beach 701
+nashville memphis 652
+boise stockton 1242
+vancouver north_las_vegas 2692
+vancouver boise 4689
+salt_lake_city costa_mesa 192
+boise salt_lake_city 53
+moreno_valley garden_grove 701
+moreno_valley garden_grove 701
+erie garden_grove 887
+vancouver moreno_valley 1160
+baton_rouge spokane 899
+salt_lake_city el_monte 192
+erie garden_grove 887
+costa_mesa modesto 997
+baton_rouge boise 1551
+vancouver erie 974
+nashville boise 652
+erie huntington_beach 887
+spokane chattanooga 1894
+baton_rouge spokane 899
+49 fort_collins
+st_petersburg grand_rapids 3295
+tallahassee grand_rapids 3376
+lowell ann_arbor 2531
+indianapolis el_monte 2843
+fort_collins tallahassee 1614
+indianapolis grand_rapids 3295
+lowell washington_dc 483
+el_monte grand_rapids 452
+ann_arbor el_monte 1862
+lowell el_monte 4393
+fort_collins st_petersburg 1695
+washington_dc tallahassee 986
+ann_arbor portsmouth 870
+indianapolis el_monte 2843
+lowell washington_dc 483
+fort_collins lowell 145
+austin el_monte 3910
+el_monte el_paso 1408
+grand_rapids el_paso 956
+lowell austin 483
+lowell austin 483
+indianapolis ann_arbor 981
+austin tallahassee 986
+grand_rapids el_paso 956
+fort_collins hampton 7535
+fort_collins lowell 145
+lowell tallahassee 1469
+washington_dc bellevue 6213
+indianapolis ann_arbor 981
+austin indianapolis 1067
+lowell st_petersburg 1550
+austin portsmouth 2918
+st_petersburg portsmouth 1851
+st_petersburg grand_rapids 3295
+portsmouth phoenix 3989
+portsmouth el_monte 992
+fort_collins austin 628
+el_paso miramar 875
+grand_rapids miramar 1831
+lowell washington_dc 483
+miramar phoenix 714
+el_monte miramar 2283
+st_petersburg miramar 5126
+st_petersburg bellevue 5146
+washington_dc indianapolis 1067
+portsmouth el_monte 992
+portsmouth el_monte 992
+el_monte bellevue 2303
+ann_arbor portsmouth 870
+45 shreveport
+topeka burbank 148
+abilene independence 2082
+cleveland clarksville 1544
+shreveport pomona 553
+shreveport boston 207
+pomona clarksville 2177
+cleveland simi_valley 544
+shreveport boston 207
+denton simi_valley 1523
+shreveport west_covina 207
+boston pomona 346
+denton santa_clarita 979
+shreveport denton 207
+santa_clarita topeka 1544
+denton santa_clarita 979
+shreveport topeka 2730
+cleveland clarksville 1544
+topeka burbank 148
+topeka tulsa 148
+shreveport boston 207
+santa_clarita simi_valley 544
+santa_clarita simi_valley 544
+cleveland fort_lauderdale 3390
+cleveland oakland 1544
+abilene clarksville 1000
+boston santa_clarita 979
+pomona independence 3259
+cleveland abilene 544
+clarksville tulsa 148
+shreveport simi_valley 1730
+cleveland topeka 1544
+shreveport denton 207
+clarksville fort_lauderdale 1846
+topeka lubbock 148
+topeka tulsa 148
+shreveport pomona 553
+denton clarksville 2523
+cleveland topeka 1544
+boston simi_valley 1523
+boston cleveland 979
+shreveport boston 207
+abilene lubbock 1148
+boston simi_valley 1523
+denton cleveland 979
+west_covina pomona 346
+35 rochester
+west_jordan huntsville 321
+berkeley anaheim 711
+cambridge west_jordan 208
+cambridge huntsville 529
+rochester hialeah 973
+huntsville anaheim 711
+oceanside anaheim 478
+rochester hialeah 973
+athens lansing 149
+cambridge lansing 357
+chicago lansing 149
+hialeah anaheim 883
+rochester long_beach 1378
+chicago huntsville 321
+chicago hialeah 149
+rochester cambridge 616
+cambridge chicago 208
+hialeah berkeley 172
+west_jordan anaheim 1032
+hialeah long_beach 405
+rochester long_beach 1378
+west_jordan hialeah 149
+berkeley oceanside 233
+cambridge hialeah 357
+cambridge lansing 357
+lansing huntsville 172
+west_jordan hialeah 149
+athens hialeah 149
+lansing berkeley 172
+cambridge athens 208
+rochester hialeah 973
+cambridge athens 208
+long_beach inglewood 478
+cambridge athens 208
+huntsville long_beach 233
+49 tampa
+tampa fremont 1351
+chesapeake lansing 1550
+tampa seattle 2702
+waterbury seattle 1277
+san_antonio eugene 2164
+fremont chesapeake 74
+chesapeake eugene 1550
+seattle pittsburgh 273
+san_antonio eugene 2164
+waterbury tacoma 438
+tacoma riverside 1112
+orlando tacoma 438
+orlando seattle 1277
+orlando corpus_christi 1277
+corpus_christi riverside 273
+tampa seattle 2702
+corpus_christi lansing 273
+san_antonio orlando 614
+waterbury lansing 1550
+seattle eugene 273
+san_antonio waterbury 614
+tacoma eugene 1112
+chesapeake lansing 1550
+orlando tacoma 438
+chesapeake seattle 1277
+san_antonio fremont 540
+san_antonio fremont 540
+fremont waterbury 74
+waterbury seattle 1277
+chesapeake lansing 1550
+tampa eugene 2975
+orlando corpus_christi 1277
+tampa san_antonio 811
+san_antonio tacoma 1052
+orlando tacoma 438
+san_antonio fremont 540
+tampa eugene 2975
+fremont lansing 1624
+orlando eugene 1550
+waterbury tacoma 438
+corpus_christi eugene 273
+chesapeake lansing 1550
+san_antonio chesapeake 614
+san_antonio orlando 614
+tampa chesapeake 1425
+tampa san_antonio 811
+chesapeake seattle 1277
+chesapeake seattle 1277
+fremont corpus_christi 1351
+32 alexandria
+alexandria waterbury 902
+alexandria waterbury 902
+alexandria waterbury 902
+alexandria santa_clarita 902
+alexandria santa_clarita 902
+alexandria west_covina 902
+alexandria mesquite 902
+alexandria killeen 902
+alexandria shreveport 902
+alexandria waterbury 902
+alexandria shreveport 902
+alexandria santa_clarita 902
+alexandria shreveport 902
+alexandria waterbury 902
+alexandria shreveport 902
+alexandria west_covina 902
+alexandria santa_clarita 902
+alexandria shreveport 902
+alexandria miramar 902
+alexandria shreveport 902
+alexandria lafayette 902
+alexandria killeen 902
+alexandria santa_clarita 902
+alexandria mesquite 902
+alexandria shreveport 902
+alexandria mesquite 902
+alexandria mesquite 902
+alexandria shreveport 902
+alexandria waterbury 902
+alexandria santa_clarita 902
+alexandria lafayette 902
+alexandria lafayette 902
+43 winston_salem
+concord oklahoma_city 1570
+plano warren 535
+denton new_haven 798
+midland peoria 1444
+concord warren 1570
+midland oklahoma_city 1444
+winston_salem hollywood 891
+new_haven plano 1721
+winston_salem hollywood 891
+denton west_jordan 3054
+midland plano 909
+winston_salem hollywood 891
+winston_salem denton 891
+winston_salem oklahoma_city 3945
+hollywood oklahoma_city 3054
+winston_salem new_haven 1689
+new_haven concord 686
+denton new_haven 798
+winston_salem hollywood 891
+worcester midland 126
+midland oklahoma_city 1444
+concord midland 126
+concord midland 126
+winston_salem hollywood 891
+overland_park warren 1493
+denton plano 2519
+winston_salem hollywood 891
+winston_salem hollywood 891
+worcester athens 1570
+midland peoria 1444
+new_haven worcester 686
+hollywood worcester 1484
+concord warren 1570
+denton new_haven 798
+overland_park midland 49
+winston_salem hollywood 891
+midland plano 909
+winston_salem hollywood 891
+concord warren 1570
+winston_salem worcester 2375
+new_haven overland_park 763
+concord overland_park 77
+winston_salem hollywood 891
+46 flint
+waco baltimore 240
+mobile chicago 913
+providence mobile 180
+mobile durham 1614
+flint mobile 1788
+flint mobile 1788
+san_francisco chicago 1395
+tallahassee jackson 1465
+mobile jackson 2343
+providence miami 3525
+san_francisco chicago 1395
+chicago miami 2432
+providence mobile 180
+waco baltimore 240
+providence dallas 180
+sterling_heights dallas 1107
+providence mobile 180
+miami tacoma 150
+flint sterling_heights 681
+tallahassee durham 736
+dallas tallahassee 878
+providence mobile 180
+providence durham 1794
+providence tallahassee 1058
+sterling_heights san_francisco 625
+chicago waco 1430
+providence mobile 180
+san_francisco mobile 482
+sterling_heights san_francisco 625
+chicago waco 1430
+tallahassee jackson 1465
+flint san_francisco 1306
+providence dallas 180
+providence durham 1794
+waco miami 1002
+san_francisco mobile 482
+mobile gilbert 3084
+providence jackson 2523
+flint san_francisco 1306
+tallahassee jackson 1465
+waco baltimore 240
+flint san_francisco 1306
+providence dallas 180
+providence durham 1794
+san_francisco providence 302
+chicago durham 701
+39 des_moines
+laredo louisville 692
+santa_rosa louisville 2654
+louisville killeen 846
+santa_ana laredo 724
+boise santa_ana 1238
+des_moines charleston 1000
+louisville buffalo 846
+des_moines boise 1354
+charleston knoxville 1121
+charleston garden_grove 3008
+santa_rosa albuquerque 1780
+charleston albuquerque 2134
+boise knoxville 767
+santa_ana laredo 724
+charleston santa_rosa 354
+des_moines garden_grove 4008
+santa_ana albuquerque 542
+charleston knoxville 1121
+boise albuquerque 1780
+des_moines albuquerque 3134
+santa_ana laredo 724
+des_moines santa_rosa 1354
+knoxville santa_ana 471
+louisville buffalo 846
+louisville corona 846
+des_moines knoxville 2121
+boise santa_ana 1238
+des_moines boise 1354
+santa_rosa santa_ana 1238
+des_moines boise 1354
+charleston santa_rosa 354
+louisville corona 846
+boise killeen 3500
+des_moines knoxville 2121
+charleston knoxville 1121
+charleston santa_rosa 354
+albuquerque garden_grove 874
+laredo louisville 692
+santa_rosa knoxville 767
+26 baltimore
+berkeley westminster 769
+baltimore berkeley 223
+chula_vista santa_rosa 769
+santa_rosa corona 981
+berkeley sterling_heights 1750
+chula_vista santa_rosa 769
+baltimore rancho_cucamonga 223
+rancho_cucamonga birmingham 769
+birmingham beaumont 981
+baltimore colorado_springs 223
+westminster st_louis 981
+birmingham st_louis 981
+chula_vista corona 1750
+baltimore chula_vista 223
+birmingham st_louis 981
+baltimore berkeley 223
+chula_vista denton 2184
+baltimore chula_vista 223
+colorado_springs st_louis 1750
+baltimore berkeley 223
+birmingham corona 981
+colorado_springs santa_rosa 769
+rancho_cucamonga port_st_lucie 1750
+santa_rosa beaumont 981
+westminster st_louis 981
+colorado_springs beaumont 1750
+29 elizabeth
+pomona berkeley 644
+pomona bellevue 1590
+berkeley charleston 946
+elizabeth columbus 1845
+elizabeth berkeley 899
+pomona berkeley 644
+pomona columbus 1590
+alexandria spokane 662
+pomona columbus 1590
+berkeley charleston 946
+elizabeth columbus 1845
+pomona bellevue 1590
+berkeley bellevue 946
+charleston spokane 662
+berkeley charleston 946
+berkeley alexandria 946
+bellevue spokane 662
+elizabeth columbus 1845
+bellevue spokane 662
+pomona bellevue 1590
+berkeley columbus 946
+elizabeth pomona 255
+bellevue spokane 662
+pomona berkeley 644
+berkeley columbus 946
+berkeley charleston 946
+berkeley columbus 946
+alexandria spokane 662
+elizabeth columbus 1845
+34 cambridge
+oxnard dallas 885
+alexandria santa_clarita 78
+paterson oakland 380
+oxnard paterson 1083
+atlanta alexandria 380
+oxnard pembroke_pines 1463
+atlanta norfolk 380
+oxnard dallas 885
+dallas paterson 198
+oakland tulsa 78
+paterson tulsa 458
+oxnard paterson 1083
+atlanta santa_clarita 458
+oakland santa_ana 78
+dallas atlanta 198
+oakland tulsa 78
+paterson norfolk 380
+cambridge oxnard 208
+dallas paterson 198
+oakland santa_clarita 78
+pembroke_pines moreno_valley 78
+norfolk santa_clarita 78
+cambridge santa_clarita 1749
+alexandria killeen 78
+oxnard paterson 1083
+norfolk fort_wayne 78
+oxnard oakland 1463
+cambridge santa_ana 1749
+dallas atlanta 198
+cambridge fort_wayne 1749
+oxnard alexandria 1463
+cambridge oxnard 208
+cambridge oakland 1671
+cambridge paterson 1291
+40 charlotte
+laredo port_st_lucie 911
+charlotte port_st_lucie 1782
+laredo santa_clara 256
+sunnyvale olathe 337
+laredo hollywood 256
+port_st_lucie sunnyvale 244
+laredo port_st_lucie 911
+los_angeles miami 581
+sunnyvale olathe 337
+laredo santa_clara 256
+laredo santa_clara 256
+laredo kansas_city 256
+charlotte laredo 871
+kansas_city port_st_lucie 655
+charlotte laredo 871
+laredo lincoln 1155
+santa_clara los_angeles 655
+charlotte laredo 871
+kansas_city sunnyvale 899
+kansas_city port_st_lucie 655
+kansas_city los_angeles 655
+laredo los_angeles 911
+port_st_lucie lincoln 244
+laredo santa_clara 256
+santa_clara port_st_lucie 655
+hollywood port_st_lucie 655
+laredo santa_clara 256
+laredo port_st_lucie 911
+santa_clara sunnyvale 899
+charlotte port_st_lucie 1782
+charlotte kansas_city 1127
+kansas_city port_st_lucie 655
+kansas_city port_st_lucie 655
+los_angeles sunnyvale 244
+santa_clara sunnyvale 899
+los_angeles sunnyvale 244
+charlotte lincoln 2026
+charlotte laredo 871
+kansas_city lincoln 899
+charlotte laredo 871
+48 hartford
+phoenix moreno_valley 202
+hartford minneapolis 39
+phoenix cleveland 202
+minneapolis st_louis 741
+minneapolis moreno_valley 1587
+san_bernardino st_louis 741
+st_louis simi_valley 110
+san_bernardino mcallen 741
+minneapolis winston_salem 1587
+phoenix cleveland 202
+mcallen phoenix 644
+hartford san_bernardino 39
+simi_valley phoenix 534
+phoenix cleveland 202
+phoenix moreno_valley 202
+phoenix cleveland 202
+phoenix cleveland 202
+st_louis fort_wayne 846
+hartford phoenix 1424
+phoenix fort_wayne 202
+minneapolis mcallen 741
+mcallen fort_wayne 846
+mcallen cleveland 846
+minneapolis mcallen 741
+san_bernardino simi_valley 851
+minneapolis winston_salem 1587
+st_louis fort_wayne 846
+minneapolis simi_valley 851
+mcallen cleveland 846
+hartford simi_valley 890
+minneapolis winston_salem 1587
+mcallen fort_wayne 846
+st_louis cleveland 846
+hartford minneapolis 39
+simi_valley fort_wayne 736
+mcallen simi_valley 110
+san_bernardino cleveland 1587
+hartford minneapolis 39
+minneapolis simi_valley 851
+st_louis moreno_valley 846
+hartford winston_salem 1626
+hartford mcallen 780
+st_louis winston_salem 846
+st_louis simi_valley 110
+mcallen greensboro 846
+san_bernardino mcallen 741
+minneapolis cleveland 1587
+hartford minneapolis 39
+48 north_las_vegas
+grand_prairie newark 474
+reno orlando 842
+north_las_vegas hartford 124
+hartford mcallen 312
+west_valley mckinney 1121
+orlando erie 1330
+grand_prairie reno 474
+reno west_valley 2172
+hartford grand_prairie 312
+reno augusta 3293
+newark orlando 842
+reno orlando 842
+grand_prairie newark 474
+reno orlando 842
+grand_prairie erie 2646
+north_las_vegas west_valley 3082
+san_bernardino augusta 532
+grand_prairie erie 2646
+fort_collins mckinney 32
+hartford bridgeport 3159
+north_las_vegas hartford 124
+st_paul bridgeport 744
+north_las_vegas grand_prairie 436
+hartford mcallen 312
+st_paul west_valley 543
+green_bay fort_collins 888
+reno orlando 842
+reno erie 2172
+fort_collins thornton 32
+north_las_vegas st_paul 2539
+green_bay san_bernardino 388
+bridgeport augusta 920
+hartford green_bay 3159
+reno fort_collins 3261
+grand_prairie orlando 1316
+north_las_vegas mcallen 436
+mcallen green_bay 2847
+erie green_bay 201
+newark bridgeport 2373
+mcallen newark 474
+mcallen green_bay 2847
+reno fort_collins 3261
+hartford san_bernardino 3547
+erie tulsa 201
+st_paul erie 543
+tulsa fort_collins 888
+newark orlando 842
+newark west_valley 2172
+49 orange
+orange huntington_beach 672
+lincoln amarillo 592
+daly_city concord 268
+orange amarillo 4759
+el_paso louisville 1727
+orange moreno_valley 3352
+huntington_beach louisville 3495
+orange roseville 4759
+el_paso daly_city 2338
+louisville downey 879
+orange tacoma 2985
+huntington_beach concord 4374
+louisville rockford 611
+clarksville west_covina 19
+huntington_beach birmingham 803
+daly_city las_vegas 432
+roseville daly_city 19
+moreno_valley lincoln 815
+springfield rockford 19
+daly_city evansville 268
+colorado_springs evansville 1276
+tacoma colorado_springs 785
+orange el_paso 2440
+el_paso san_bernardino 2319
+tacoma amarillo 1774
+huntington_beach elizabeth 4374
+colorado_springs lincoln 397
+rockford downey 268
+huntington_beach birmingham 803
+amarillo daly_city 19
+orange el_paso 2440
+moreno_valley colorado_springs 418
+colorado_springs lincoln 397
+huntington_beach colorado_springs 3098
+huntington_beach amarillo 4087
+birmingham tacoma 1510
+louisville columbus 592
+louisville clarksville 592
+lincoln springfield 592
+roseville west_covina 19
+orange lincoln 4167
+tacoma springfield 1774
+birmingham columbus 3284
+roseville daly_city 19
+tacoma clarksville 1774
+moreno_valley evansville 1694
+el_paso colorado_springs 1330
+el_paso moreno_valley 912
+colorado_springs louisville 397
+30 moreno_valley
+little_rock vallejo 153
+kansas_city jackson 361
+jacksonville jackson 1316
+little_rock mesa 153
+moreno_valley vallejo 2430
+pueblo little_rock 361
+jacksonville pompano_beach 1469
+fresno kansas_city 182
+pueblo hampton 514
+pueblo cape_coral 514
+moreno_valley little_rock 2277
+moreno_valley fresno 1734
+fresno hampton 696
+moreno_valley jacksonville 961
+little_rock mesa 153
+fresno pueblo 182
+jacksonville little_rock 1316
+little_rock vallejo 153
+moreno_valley jackson 2277
+jackson vallejo 153
+little_rock hampton 153
+fresno kansas_city 182
+moreno_valley jacksonville 961
+fresno pompano_beach 696
+little_rock thousand_oaks 153
+jackson thousand_oaks 153
+pueblo vallejo 514
+fresno jackson 543
+kansas_city little_rock 361
+moreno_valley pueblo 1916
+41 billings
+billings hollywood 317
+topeka santa_rosa 1858
+billings hollywood 317
+thousand_oaks winston_salem 337
+bellevue thousand_oaks 688
+billings sunnyvale 2980
+hollywood santa_rosa 2663
+topeka santa_rosa 1858
+billings santa_rosa 2980
+topeka santa_rosa 1858
+baltimore sunnyvale 858
+topeka santa_rosa 1858
+bellevue gainesville 1025
+topeka santa_rosa 1858
+hollywood sunnyvale 2663
+billings pasadena 317
+hollywood topeka 805
+pasadena sunnyvale 2663
+baltimore sunnyvale 858
+baltimore santa_rosa 858
+pasadena topeka 805
+billings pasadena 317
+hollywood sunnyvale 2663
+pasadena santa_rosa 2663
+billings pasadena 317
+topeka baltimore 1000
+hollywood baltimore 1805
+billings santa_rosa 2980
+baltimore sunnyvale 858
+billings bellevue 2980
+hollywood sunnyvale 2663
+baltimore sunnyvale 858
+billings pasadena 317
+hollywood sunnyvale 2663
+baltimore sunnyvale 858
+hollywood santa_rosa 2663
+hollywood topeka 805
+baltimore santa_rosa 858
+pasadena topeka 805
+pasadena baltimore 1805
+hollywood sunnyvale 2663
+32 downey
+savannah fontana 911
+oceanside baton_rouge 1179
+oceanside washington_dc 140
+downey knoxville 235
+fontana washington_dc 1669
+knoxville athens 2746
+knoxville washington_dc 3563
+fontana oakland 852
+knoxville roseville 2981
+knoxville savannah 983
+athens washington_dc 817
+downey knoxville 235
+knoxville athens 2746
+oakland san_diego 817
+knoxville washington_dc 3563
+knoxville san_jose 4371
+downey roseville 3216
+fontana oceanside 1529
+athens washington_dc 817
+knoxville savannah 983
+fontana oakland 852
+downey savannah 1218
+fontana oakland 852
+savannah oceanside 2440
+oceanside washington_dc 140
+fontana oakland 852
+savannah fontana 911
+knoxville savannah 983
+savannah fontana 911
+oakland washington_dc 817
+downey athens 2981
+knoxville oceanside 3423
+47 coral_springs
+coral_springs philadelphia 1824
+allentown cedar_rapids 863
+coral_springs columbia 1824
+philadelphia miami 2497
+simi_valley indianapolis 546
+sioux_falls cleveland 914
+sioux_falls west_covina 1460
+sioux_falls jacksonville 1659
+simi_valley alexandria 2497
+sioux_falls columbia 914
+coral_springs columbia 1824
+sioux_falls cleveland 914
+indianapolis independence 1951
+indianapolis jacksonville 199
+jacksonville allentown 889
+allentown alexandria 863
+coral_springs simi_valley 1824
+sioux_falls cleveland 914
+alexandria paterson 1308
+columbia jacksonville 745
+sioux_falls columbia 914
+sioux_falls columbia 914
+west_covina allentown 1088
+cedar_rapids providence 498
+coral_springs philadelphia 1824
+sioux_falls cleveland 914
+coral_springs sioux_falls 910
+philadelphia indianapolis 546
+indianapolis independence 1951
+simi_valley independence 2497
+coral_springs cleveland 1824
+sioux_falls cleveland 914
+coral_springs cleveland 1824
+indianapolis miami 1951
+simi_valley miami 2497
+coral_springs cleveland 1824
+sioux_falls cleveland 914
+cedar_rapids wichita 1308
+coral_springs west_covina 2370
+sioux_falls simi_valley 914
+cleveland indianapolis 546
+providence wichita 810
+cleveland cedar_rapids 2497
+indianapolis cedar_rapids 1951
+sioux_falls cleveland 914
+simi_valley west_covina 546
+coral_springs sioux_falls 910
+48 burbank
+savannah anchorage 2336
+burbank detroit 699
+mobile port_st_lucie 2467
+detroit athens 720
+athens thousand_oaks 1148
+westminster sterling_heights 240
+long_beach sterling_heights 1498
+athens rockford 678
+concord long_beach 1398
+long_beach cambridge 1890
+concord long_beach 1398
+burbank long_beach 2097
+detroit savannah 1868
+burbank detroit 699
+burbank rockford 2097
+savannah port_st_lucie 1319
+mobile chesapeake 1936
+sterling_heights anchorage 1308
+detroit westminster 2656
+detroit westminster 2656
+concord anchorage 4204
+concord savannah 1868
+long_beach thousand_oaks 470
+rockford thousand_oaks 470
+rockford sterling_heights 1498
+chesapeake anchorage 1548
+detroit thousand_oaks 1868
+sterling_heights cambridge 392
+concord sterling_heights 2896
+mobile rockford 678
+athens long_beach 678
+detroit long_beach 1398
+detroit savannah 1868
+rockford thousand_oaks 470
+mobile westminster 1936
+concord athens 720
+thousand_oaks chesapeake 788
+thousand_oaks chesapeake 788
+mobile long_beach 678
+savannah cambridge 1420
+detroit savannah 1868
+sterling_heights port_st_lucie 291
+burbank concord 699
+concord mobile 720
+long_beach westminster 1258
+burbank athens 1419
+burbank concord 699
+concord athens 720
+28 albuquerque
+tucson charlotte 34
+stockton charlotte 34
+albuquerque tucson 880
+charlotte independence 669
+independence arlington 381
+tucson charlotte 34
+tucson arlington 1084
+albuquerque tucson 880
+charlotte arlington 1050
+independence simi_valley 381
+albuquerque stockton 880
+tucson charlotte 34
+tucson charlotte 34
+albuquerque stockton 880
+tucson charlotte 34
+tucson topeka 1084
+charlotte independence 669
+albuquerque irvine 1964
+independence irvine 381
+albuquerque irvine 1964
+stockton charlotte 34
+charlotte topeka 1050
+independence irvine 381
+albuquerque stockton 880
+tucson arlington 1084
+stockton charlotte 34
+albuquerque tucson 880
+independence simi_valley 381
+28 tulsa
+lakewood indianapolis 669
+independence green_bay 669
+independence roseville 645
+roseville virginia_beach 24
+independence overland_park 669
+tulsa greensboro 1587
+green_bay port_st_lucie 1137
+independence virginia_beach 669
+roseville virginia_beach 24
+roseville overland_park 24
+tulsa lakewood 918
+tulsa independence 918
+roseville virginia_beach 24
+tulsa independence 918
+independence virginia_beach 669
+tulsa virginia_beach 1587
+roseville green_bay 24
+tulsa virginia_beach 1587
+tulsa greensboro 1587
+independence greensboro 669
+independence lafayette 669
+tulsa lakewood 918
+tulsa roseville 1563
+tulsa lakewood 918
+indianapolis rancho_cucamonga 224
+independence overland_park 669
+lakewood lafayette 669
+independence erie 669
+42 mobile
+mobile abilene 2296
+mobile oceanside 144
+new_orleans salt_lake_city 1961
+richmond new_haven 2838
+boston norman 51
+mobile oceanside 144
+detroit alexandria 1840
+salt_lake_city abilene 191
+detroit salt_lake_city 963
+corpus_christi warren 204
+new_orleans salt_lake_city 1961
+new_orleans boston 2838
+oceanside detroit 998
+detroit salt_lake_city 963
+detroit abilene 1154
+port_st_lucie detroit 998
+port_st_lucie corpus_christi 2685
+mobile richmond 144
+mobile north_las_vegas 144
+detroit salt_lake_city 963
+mobile salt_lake_city 2105
+mobile richmond 144
+salt_lake_city abilene 191
+abilene norman 737
+detroit boston 1840
+mobile oceanside 144
+mobile port_st_lucie 144
+salt_lake_city norman 928
+oceanside abilene 2152
+mobile port_st_lucie 144
+port_st_lucie alexandria 2838
+salt_lake_city boston 877
+new_orleans new_haven 2838
+mobile corpus_christi 2829
+detroit salt_lake_city 963
+salt_lake_city new_haven 877
+salt_lake_city norman 928
+boston greensboro 51
+new_haven greensboro 51
+mobile new_orleans 144
+mobile north_las_vegas 144
+oceanside corpus_christi 2685
+35 gilbert
+washington_dc baltimore 1824
+seattle hampton 149
+anaheim san_bernardino 1709
+jacksonville hampton 149
+norman hampton 1081
+gilbert cincinnati 2779
+norman seattle 932
+abilene washington_dc 558
+washington_dc seattle 1824
+norman seattle 932
+norman baltimore 932
+anaheim norman 777
+anaheim seattle 1709
+abilene washington_dc 558
+anaheim norman 777
+norman san_bernardino 932
+abilene washington_dc 558
+washington_dc norman 892
+norman baltimore 932
+abilene washington_dc 558
+abilene washington_dc 558
+anaheim san_bernardino 1709
+abilene baltimore 2382
+anaheim jacksonville 1709
+norman san_bernardino 932
+antioch roseville 398
+gilbert abilene 248
+abilene jacksonville 2382
+washington_dc anaheim 115
+abilene washington_dc 558
+san_bernardino hampton 149
+baltimore antioch 321
+gilbert cincinnati 2779
+gilbert washington_dc 806
+norman seattle 932
+30 concord
+seattle santa_clarita 2501
+milwaukee mcallen 999
+simi_valley grand_prairie 885
+concord mcallen 3879
+concord simi_valley 836
+milwaukee mcallen 999
+simi_valley grand_prairie 885
+mcallen fontana 1200
+simi_valley grand_prairie 885
+concord irving 1721
+mcallen fontana 1200
+simi_valley abilene 885
+irving santa_clarita 2862
+irving santa_clarita 2862
+santa_clarita fontana 496
+seattle milwaukee 798
+new_haven seattle 361
+milwaukee baton_rouge 2199
+concord milwaukee 2880
+simi_valley milwaukee 2044
+irving baton_rouge 3358
+new_haven seattle 361
+simi_valley new_haven 885
+new_haven mcallen 2158
+simi_valley abilene 885
+concord irving 1721
+concord irving 1721
+irving fontana 3358
+concord west_jordan 5079
+santa_clarita baton_rouge 496
+36 henderson
+albuquerque fairfield 520
+oceanside waterbury 548
+philadelphia clarksville 530
+oceanside lafayette 548
+waterbury philadelphia 956
+lafayette salt_lake_city 2053
+waterbury clarksville 1486
+oceanside yonkers 548
+yonkers fairfield 2053
+henderson oceanside 415
+henderson west_valley 3016
+henderson fullerton 415
+henderson fullerton 415
+detroit clarksville 1486
+henderson waterbury 963
+waterbury philadelphia 956
+fullerton lafayette 548
+henderson fullerton 415
+philadelphia salt_lake_city 1097
+waterbury west_valley 2053
+clarksville albuquerque 47
+henderson oceanside 415
+albuquerque west_valley 520
+philadelphia albuquerque 577
+henderson oceanside 415
+henderson lafayette 963
+oceanside waterbury 548
+fullerton clarksville 2034
+oceanside yonkers 548
+detroit philadelphia 956
+clarksville salt_lake_city 567
+detroit fairfield 2053
+detroit albuquerque 1533
+oceanside fairfield 2601
+fullerton waterbury 548
+oceanside detroit 548
+44 westminster
+hayward colorado_springs 266
+hayward el_paso 316
+stamford kansas_city 996
+westminster thornton 823
+westminster tampa 823
+tampa kansas_city 996
+hayward thornton 266
+hayward colorado_springs 266
+el_paso peoria 946
+hayward colorado_springs 266
+westminster colorado_springs 823
+westminster warren 557
+winston_salem green_bay 515
+hayward colorado_springs 266
+warren stamford 266
+hayward colorado_springs 266
+hayward tampa 266
+westminster colorado_springs 823
+westminster colorado_springs 823
+warren tampa 266
+tampa winston_salem 1513
+warren colorado_springs 266
+hayward colorado_springs 266
+westminster hayward 557
+warren thornton 266
+westminster thornton 823
+westminster colorado_springs 823
+stamford kansas_city 996
+warren tampa 266
+westminster hayward 557
+warren el_paso 316
+westminster warren 557
+tampa peoria 996
+westminster chesapeake 823
+warren colorado_springs 266
+hayward thornton 266
+westminster colorado_springs 823
+westminster thornton 823
+hayward colorado_springs 266
+westminster thornton 823
+hayward stamford 266
+hayward stamford 266
+el_paso peoria 946
+warren thornton 266
+31 sterling_heights
+norfolk columbus 1024
+columbus portsmouth 927
+columbus las_vegas 1274
+vallejo norfolk 506
+vallejo arvada 947
+sterling_heights savannah 755
+arvada naperville 583
+sterling_heights el_monte 755
+sterling_heights savannah 755
+el_monte norfolk 506
+hampton worcester 746
+sterling_heights savannah 755
+arvada naperville 583
+columbus west_jordan 1274
+sterling_heights columbus 2285
+sterling_heights savannah 755
+naperville hampton 299
+portsmouth worcester 118
+norfolk naperville 1024
+sterling_heights vallejo 755
+columbus portsmouth 927
+norfolk columbus 1024
+el_monte norfolk 506
+el_monte norfolk 506
+norfolk naperville 1024
+vallejo norfolk 506
+arvada naperville 583
+sterling_heights el_monte 755
+norfolk naperville 1024
+arvada naperville 583
+sterling_heights vallejo 755
+49 costa_mesa
+cleveland joliet 1642
+cleveland oceanside 1564
+st_paul memphis 473
+denver memphis 1245
+joliet st_paul 772
+costa_mesa lakewood 32
+denver st_paul 772
+salinas joliet 3159
+anchorage grand_rapids 2537
+costa_mesa salinas 486
+salinas beaumont 414
+naperville salinas 454
+savannah oklahoma_city 1677
+oklahoma_city denver 1068
+lakewood joliet 3613
+cleveland oklahoma_city 574
+salinas denver 3159
+grand_rapids joliet 78
+lakewood joliet 3613
+beaumont anchorage 130
+anchorage oklahoma_city 1547
+naperville oklahoma_city 2545
+anchorage grand_rapids 2537
+salinas beaumont 414
+beaumont oklahoma_city 1677
+costa_mesa lakewood 32
+oceanside killeen 78
+grand_rapids joliet 78
+savannah anchorage 130
+costa_mesa naperville 32
+lakewood cleveland 1971
+naperville elgin 3613
+denver rockford 772
+naperville grand_rapids 3535
+costa_mesa beaumont 900
+salinas cleveland 1517
+salinas beaumont 414
+savannah denver 2745
+grand_rapids killeen 78
+costa_mesa savannah 900
+costa_mesa lakewood 32
+naperville salinas 454
+lakewood beaumont 868
+cleveland killeen 1642
+grand_rapids joliet 78
+salinas savannah 414
+anchorage rockford 3387
+grand_rapids st_paul 850
+cleveland elgin 1642
+42 knoxville
+yonkers mcallen 169
+knoxville san_buenaventura 414
+spokane san_jose 1309
+yonkers akron 885
+san_jose athens 976
+san_jose madison 1900
+athens newark 924
+knoxville sacramento 414
+yonkers mcallen 169
+spokane san_jose 1309
+yonkers akron 885
+yonkers topeka 1658
+mcallen san_jose 513
+san_jose akron 203
+san_jose athens 976
+yonkers mcallen 169
+yonkers athens 1658
+mcallen san_jose 513
+akron athens 773
+spokane akron 1512
+topeka newark 924
+knoxville san_buenaventura 414
+knoxville spokane 414
+knoxville newark 3623
+knoxville sacramento 414
+knoxville san_buenaventura 414
+sacramento athens 2285
+knoxville san_buenaventura 414
+spokane newark 3209
+akron athens 773
+san_jose newark 1900
+sacramento mcallen 796
+knoxville mcallen 1210
+knoxville spokane 414
+athens newark 924
+san_jose waco 1900
+akron topeka 773
+topeka newark 924
+yonkers akron 885
+knoxville mcallen 1210
+knoxville yonkers 1041
+sacramento yonkers 627
+48 new_york_city
+atlanta raleigh 989
+raleigh oklahoma_city 1015
+new_york_city evansville 1994
+durham newport_news 209
+topeka el_paso 1600
+raleigh oklahoma_city 1015
+charlotte irving 694
+sterling_heights fontana 791
+topeka lincoln 3169
+new_york_city topeka 394
+lincoln oklahoma_city 694
+sterling_heights el_paso 791
+new_york_city el_paso 1994
+durham lincoln 1519
+durham lincoln 1519
+new_york_city topeka 394
+evansville durham 50
+new_york_city sterling_heights 1203
+new_york_city el_paso 1994
+sterling_heights berkeley 791
+evansville newport_news 259
+atlanta lincoln 1310
+topeka sterling_heights 809
+lincoln irving 694
+lincoln brownsville 694
+durham atlanta 209
+new_york_city jackson 4257
+new_york_city topeka 394
+atlanta charlotte 1310
+durham raleigh 1198
+sterling_heights el_paso 791
+new_york_city sterling_heights 1203
+sterling_heights lincoln 2360
+sterling_heights thousand_oaks 3054
+sterling_heights el_paso 791
+sterling_heights thousand_oaks 3054
+sterling_heights atlanta 1050
+durham irving 2213
+evansville newport_news 259
+new_york_city thousand_oaks 4257
+new_york_city fontana 1994
+el_paso durham 50
+raleigh port_st_lucie 1015
+lincoln oklahoma_city 694
+new_york_city evansville 1994
+fontana irving 2263
+topeka el_paso 1600
+new_york_city el_paso 1994
+47 chula_vista
+hayward huntington_beach 621
+port_st_lucie sunnyvale 220
+huntington_beach springfield 3113
+miami oceanside 1111
+chula_vista manchester 2809
+chula_vista huntington_beach 1235
+huntington_beach charlotte 2319
+hayward denver 621
+chula_vista huntington_beach 1235
+hayward miami 1205
+charlotte sunnyvale 1014
+huntington_beach miami 584
+huntington_beach oceanside 1695
+huntington_beach sunnyvale 3333
+hayward manchester 2195
+port_st_lucie sunnyvale 220
+manchester port_st_lucie 1539
+hayward miami 1205
+charlotte port_st_lucie 794
+miami port_st_lucie 2529
+miami charlotte 1735
+chula_vista oceanside 2930
+hayward huntington_beach 621
+miami manchester 990
+huntington_beach miami 584
+chula_vista denver 1235
+miami joliet 2749
+huntington_beach manchester 1574
+chula_vista denver 1235
+chula_vista hayward 614
+oceanside springfield 1418
+manchester oceanside 121
+hayward charlotte 2940
+oceanside sunnyvale 1638
+huntington_beach manchester 1574
+charlotte springfield 794
+charlotte port_st_lucie 794
+denver oceanside 1695
+hayward denver 621
+chula_vista joliet 4568
+miami manchester 990
+huntington_beach manchester 1574
+denver miami 584
+charlotte port_st_lucie 794
+chula_vista hayward 614
+huntington_beach miami 584
+chula_vista hayward 614
+27 pueblo
+winston_salem austin 2479
+pueblo winston_salem 253
+seattle buffalo 934
+buffalo carrollton 429
+pueblo seattle 635
+pueblo paterson 3237
+pueblo paterson 3237
+savannah arvada 505
+seattle buffalo 934
+austin arvada 505
+buffalo austin 1163
+seattle garden_grove 2602
+seattle paterson 2602
+pueblo winston_salem 253
+winston_salem savannah 2479
+carrollton paterson 1239
+buffalo carrollton 429
+buffalo garden_grove 1668
+winston_salem seattle 382
+pueblo austin 2732
+pueblo paterson 3237
+carrollton austin 734
+buffalo carrollton 429
+carrollton savannah 734
+buffalo savannah 1163
+savannah plano 505
+seattle austin 2097
+47 olathe
+baton_rouge salt_lake_city 550
+salt_lake_city new_orleans 731
+new_orleans montgomery 222
+baton_rouge chicago 1503
+salt_lake_city new_orleans 731
+salt_lake_city little_rock 953
+olathe new_orleans 1391
+new_orleans little_rock 222
+olathe baton_rouge 110
+new_orleans chandler 222
+salt_lake_city new_orleans 731
+chandler santa_ana 501
+salt_lake_city chandler 953
+baton_rouge new_orleans 1281
+olathe new_orleans 1391
+baton_rouge montgomery 1503
+olathe baton_rouge 110
+baton_rouge salt_lake_city 550
+madison santa_ana 501
+olathe baton_rouge 110
+salt_lake_city little_rock 953
+olathe montgomery 1613
+new_orleans little_rock 222
+olathe little_rock 1613
+olathe chicago 1613
+salt_lake_city chandler 953
+new_orleans santa_ana 723
+baton_rouge new_orleans 1281
+salt_lake_city little_rock 953
+madison santa_ana 501
+olathe baton_rouge 110
+baton_rouge madison 1503
+baton_rouge little_rock 1503
+santa_ana san_jose 920
+baton_rouge chandler 1503
+new_orleans nashville 1643
+olathe salt_lake_city 660
+salt_lake_city chicago 953
+new_orleans lowell 1643
+santa_ana lowell 920
+baton_rouge new_orleans 1281
+salt_lake_city chicago 953
+salt_lake_city chandler 953
+baton_rouge montgomery 1503
+madison lowell 1421
+olathe baton_rouge 110
+olathe little_rock 1613
+39 atlanta
+columbus independence 172
+columbus independence 172
+atlanta independence 215
+independence pueblo 2790
+grand_prairie oakland 619
+montgomery henderson 1009
+columbus peoria 2029
+columbus henderson 1009
+henderson peoria 1020
+atlanta columbus 43
+montgomery independence 172
+oakland houston 342
+montgomery independence 172
+peoria pueblo 933
+columbus independence 172
+columbus san_buenaventura 2001
+atlanta independence 215
+henderson grand_prairie 992
+independence henderson 837
+grand_prairie peoria 28
+columbus independence 172
+columbus pueblo 2962
+oakland houston 342
+montgomery peoria 2029
+grand_prairie oakland 619
+san_buenaventura pueblo 961
+independence pueblo 2790
+montgomery henderson 1009
+san_buenaventura oakland 619
+atlanta columbus 43
+independence grand_prairie 1829
+montgomery san_buenaventura 2001
+peoria oakland 591
+columbus independence 172
+atlanta montgomery 43
+henderson oakland 1611
+peoria oakland 591
+peoria pueblo 933
+montgomery san_buenaventura 2001
+29 paterson
+paterson laredo 638
+paterson laredo 638
+paterson antioch 1035
+paterson manchester 1035
+paterson yonkers 638
+antioch clarksville 557
+paterson laredo 638
+omaha vallejo 557
+paterson laredo 638
+yonkers manchester 397
+yonkers omaha 397
+memphis antioch 397
+memphis manchester 397
+memphis omaha 397
+paterson yonkers 638
+omaha clarksville 557
+paterson laredo 638
+paterson memphis 638
+laredo vallejo 954
+yonkers omaha 397
+fort_wayne clarksville 557
+paterson yonkers 638
+paterson yonkers 638
+paterson memphis 638
+memphis clarksville 954
+laredo fort_wayne 397
+memphis omaha 397
+memphis fort_wayne 397
+omaha vallejo 557
+31 san_antonio
+st_paul fort_lauderdale 1297
+oxnard jacksonville 1085
+san_antonio warren 939
+oxnard jacksonville 1085
+warren st_paul 722
+oxnard corona 425
+warren oxnard 934
+warren corona 1359
+corona jacksonville 660
+san_antonio waco 3804
+san_antonio warren 939
+warren corona 1359
+st_paul oxnard 212
+corona waco 1506
+san_antonio fort_lauderdale 2958
+oxnard jacksonville 1085
+corona jacksonville 660
+oxnard waco 1931
+san_antonio warren 939
+st_paul corona 637
+st_paul jacksonville 1297
+st_paul fort_lauderdale 1297
+oxnard corona 425
+san_antonio st_paul 1661
+st_paul flint 1297
+corona flint 660
+corona flint 660
+corona sioux_falls 1506
+st_paul corona 637
+st_paul oxnard 212
+st_paul corona 637
+40 irving
+kansas_city hartford 296
+berkeley brownsville 762
+brownsville knoxville 480
+mcallen hayward 296
+knoxville santa_rosa 925
+kansas_city fontana 925
+visalia winston_salem 3811
+irving visalia 613
+irving berkeley 1281
+irving brownsville 2043
+chula_vista brownsville 1285
+visalia winston_salem 3811
+visalia knoxville 1910
+irving visalia 613
+berkeley mcallen 1242
+minneapolis knoxville 1910
+berkeley brownsville 762
+berkeley mobile 1242
+irving minneapolis 613
+brownsville kansas_city 480
+minneapolis chula_vista 145
+hartford norfolk 1605
+berkeley kansas_city 1242
+visalia santa_rosa 2835
+visalia brownsville 1430
+minneapolis kansas_city 1910
+irving visalia 613
+irving visalia 613
+minneapolis mcallen 1910
+irving visalia 613
+brownsville mcallen 480
+berkeley knoxville 1242
+chula_vista berkeley 523
+irving berkeley 1281
+minneapolis kansas_city 1910
+visalia santa_rosa 2835
+berkeley knoxville 1242
+hayward fontana 629
+kansas_city hartford 296
+mobile santa_rosa 925
+27 winston_salem
+winston_salem naperville 1422
+winston_salem baton_rouge 1422
+antioch torrance 448
+cape_coral atlanta 511
+winston_salem antioch 1933
+antioch san_francisco 609
+naperville greensboro 1718
+cape_coral atlanta 511
+atlanta torrance 448
+aurora naperville 499
+winston_salem aurora 923
+aurora naperville 499
+baton_rouge akron 1120
+aurora baton_rouge 499
+winston_salem aurora 923
+aurora baton_rouge 499
+winston_salem baton_rouge 1422
+torrance san_francisco 161
+seattle anaheim 982
+baton_rouge seattle 1718
+greensboro thornton 982
+winston_salem cape_coral 1422
+winston_salem naperville 1422
+aurora baton_rouge 499
+aurora naperville 499
+atlanta torrance 448
+cape_coral torrance 959
+33 downey
+downey pomona 333
+downey pomona 333
+akron clearwater 38
+pomona worcester 1296
+downey pomona 333
+philadelphia newark 207
+pueblo philadelphia 1054
+downey pueblo 575
+pueblo akron 1054
+pomona corona 200
+corona worcester 1096
+pomona orange 490
+pomona waco 200
+orange akron 806
+orange worcester 806
+pueblo clearwater 1092
+pueblo orange 248
+pomona waco 200
+worcester newark 207
+downey philadelphia 1629
+corona pueblo 42
+waco akron 1096
+pomona corona 200
+orange philadelphia 806
+pomona worcester 1296
+philadelphia clearwater 38
+pomona corona 200
+waco worcester 1096
+orange worcester 806
+corona orange 290
+pomona pueblo 242
+waco clearwater 1134
+corona pueblo 42
+28 independence
+independence roseville 753
+inglewood salem 346
+independence denton 566
+inglewood pomona 346
+independence denton 566
+roseville inglewood 642
+denton inglewood 829
+boston greensboro 153
+boston inglewood 829
+roseville tempe 988
+inglewood tempe 346
+independence boston 566
+denton greensboro 153
+pomona savannah 995
+pomona savannah 995
+inglewood salem 346
+inglewood tempe 346
+greensboro roseville 34
+denton greensboro 153
+independence greensboro 719
+denton salem 1175
+inglewood salem 346
+independence denton 566
+independence greensboro 719
+boston inglewood 829
+independence inglewood 1395
+boston greensboro 153
+salem atlanta 995
+38 spokane
+spokane washington_dc 817
+new_haven riverside 853
+new_haven oxnard 1418
+oxnard thousand_oaks 293
+fort_wayne amarillo 565
+new_haven fort_wayne 853
+new_haven amarillo 1418
+pomona raleigh 293
+spokane oxnard 2235
+washington_dc pomona 1418
+spokane washington_dc 817
+new_haven manchester 1418
+manchester thousand_oaks 293
+spokane new_haven 817
+washington_dc fort_wayne 853
+washington_dc fort_wayne 853
+new_haven thousand_oaks 1711
+manchester raleigh 293
+manchester raleigh 293
+spokane new_haven 817
+manchester beaumont 847
+washington_dc riverside 853
+new_haven amarillo 1418
+manchester beaumont 847
+manchester raleigh 293
+washington_dc pomona 1418
+spokane riverside 1670
+fort_wayne amarillo 565
+washington_dc fort_wayne 853
+pomona raleigh 293
+riverside oxnard 565
+riverside amarillo 565
+new_haven fort_wayne 853
+spokane thousand_oaks 2528
+fort_wayne amarillo 565
+fort_wayne oxnard 565
+fort_wayne thousand_oaks 858
+riverside oxnard 565
+36 durham
+durham scottsdale 2123
+scottsdale north_las_vegas 980
+anchorage san_antonio 541
+lakewood scottsdale 541
+scottsdale huntsville 980
+topeka huntsville 2381
+topeka simi_valley 1401
+anchorage scottsdale 541
+san_bernardino scottsdale 1646
+simi_valley huntsville 980
+lakewood simi_valley 541
+simi_valley austin 980
+lakewood simi_valley 541
+durham anchorage 1582
+topeka north_las_vegas 2381
+san_bernardino lakewood 1105
+san_bernardino topeka 245
+durham san_antonio 2123
+durham san_bernardino 477
+durham topeka 722
+topeka lakewood 860
+durham huntsville 3103
+topeka scottsdale 1401
+durham scottsdale 2123
+topeka anchorage 860
+anchorage scottsdale 541
+topeka lakewood 860
+san_bernardino anchorage 1105
+san_bernardino san_antonio 1646
+topeka scottsdale 1401
+scottsdale north_las_vegas 980
+lakewood rockford 1521
+lakewood san_antonio 541
+durham anchorage 1582
+scottsdale north_las_vegas 980
+durham san_bernardino 477
+46 long_beach
+fresno baltimore 285
+flint baltimore 355
+philadelphia huntsville 809
+fresno san_buenaventura 1974
+fresno san_buenaventura 1974
+san_buenaventura huntsville 1760
+west_valley louisville 928
+tampa gilbert 3493
+long_beach tampa 78
+flint baltimore 355
+west_valley stamford 1689
+baltimore philadelphia 2640
+tampa flint 498
+west_valley stamford 1689
+lowell huntsville 4302
+long_beach lowell 78
+lowell gilbert 3493
+gilbert huntsville 809
+baltimore san_buenaventura 1689
+lowell flint 498
+west_valley san_buenaventura 1689
+tampa miramar 853
+long_beach flint 576
+tampa flint 498
+west_valley louisville 928
+lowell baltimore 853
+baltimore stamford 1689
+flint baltimore 355
+louisville philadelphia 1712
+tampa louisville 1781
+long_beach lowell 78
+baltimore louisville 928
+long_beach tampa 78
+tampa louisville 1781
+tampa flint 498
+tampa philadelphia 3493
+tampa miramar 853
+tampa west_valley 853
+long_beach tampa 78
+long_beach fresno 646
+long_beach fresno 646
+tampa philadelphia 3493
+miramar stamford 1689
+long_beach tampa 78
+west_valley stamford 1689
+miramar stamford 1689
+47 virginia_beach
+virginia_beach indianapolis 913
+miramar west_covina 129
+denton west_covina 899
+virginia_beach huntsville 1067
+indianapolis pembroke_pines 154
+west_covina cedar_rapids 329
+indianapolis pembroke_pines 154
+virginia_beach arvada 1067
+indianapolis huntsville 154
+west_covina cedar_rapids 329
+miramar cedar_rapids 458
+virginia_beach huntsville 1067
+virginia_beach arvada 1067
+west_valley detroit 785
+pembroke_pines detroit 785
+indianapolis pembroke_pines 154
+denton west_covina 899
+west_valley west_covina 1684
+virginia_beach pembroke_pines 1067
+denton minneapolis 1456
+west_valley denton 785
+virginia_beach arvada 1067
+arvada detroit 785
+indianapolis miramar 1709
+los_angeles miramar 770
+virginia_beach miramar 2622
+virginia_beach huntsville 1067
+virginia_beach huntsville 1067
+virginia_beach pembroke_pines 1067
+virginia_beach pembroke_pines 1067
+virginia_beach pembroke_pines 1067
+indianapolis pembroke_pines 154
+indianapolis denton 939
+virginia_beach huntsville 1067
+indianapolis detroit 939
+arvada detroit 785
+indianapolis detroit 939
+huntsville west_covina 1684
+arvada los_angeles 785
+huntsville denton 785
+denton minneapolis 1456
+virginia_beach west_valley 1067
+indianapolis arvada 154
+virginia_beach indianapolis 913
+indianapolis arvada 154
+miramar west_covina 129
+miramar west_covina 129
+31 ontario
+louisville salem 252
+nashville louisville 672
+louisville salinas 252
+inglewood nashville 211
+louisville salinas 252
+ontario inglewood 50
+louisville salem 252
+ontario orlando 1185
+nashville salem 924
+inglewood salem 1135
+louisville salem 252
+nashville orlando 924
+santa_ana pueblo 766
+ontario orlando 1185
+ontario inglewood 50
+nashville salinas 924
+ontario inglewood 50
+ontario orlando 1185
+inglewood nashville 211
+louisville salinas 252
+louisville salinas 252
+nashville salinas 924
+nashville louisville 672
+louisville salem 252
+nashville louisville 672
+inglewood nashville 211
+ontario santa_ana 1185
+ontario salinas 1185
+nashville louisville 672
+nashville orlando 924
+louisville salinas 252
+50 cape_coral
+grand_rapids peoria 981
+cape_coral amarillo 504
+kansas_city plano 2284
+peoria worcester 205
+cape_coral amarillo 504
+grand_rapids peoria 981
+raleigh plano 1248
+amarillo plano 3025
+amarillo raleigh 1777
+wichita san_bernardino 1598
+joliet shreveport 1598
+grand_rapids raleigh 350
+wichita plano 1598
+amarillo joliet 1427
+knoxville grand_rapids 686
+amarillo knoxville 741
+knoxville peoria 1667
+cape_coral ontario 1931
+cape_coral wichita 1931
+cape_coral kansas_city 1245
+cape_coral amarillo 504
+amarillo raleigh 1777
+wichita raleigh 350
+knoxville ontario 686
+grand_rapids shreveport 1598
+amarillo knoxville 741
+knoxville ontario 686
+cape_coral grand_rapids 1931
+joliet san_bernardino 1598
+wichita raleigh 350
+knoxville stamford 2284
+ontario raleigh 350
+peoria worcester 205
+cape_coral wichita 1931
+grand_rapids peoria 981
+kansas_city joliet 686
+cape_coral knoxville 1245
+cape_coral shreveport 3529
+san_francisco daly_city 1598
+kansas_city san_francisco 686
+worcester stamford 412
+knoxville joliet 686
+raleigh shreveport 1248
+amarillo worcester 2613
+worcester winston_salem 412
+san_francisco peoria 981
+knoxville ontario 686
+amarillo san_francisco 1427
+amarillo san_francisco 1427
+amarillo kansas_city 741
+43 erie
+omaha mesa 1172
+erie atlanta 161
+tacoma chandler 719
+erie warren 161
+warren ontario 1647
+erie san_francisco 1808
+sunnyvale chandler 1172
+erie omaha 161
+greensboro mesa 719
+tacoma mesa 719
+salinas north_las_vegas 475
+greensboro peoria 719
+erie warren 161
+north_las_vegas west_covina 502
+greensboro peoria 719
+peoria ontario 475
+tacoma salinas 719
+mesa north_las_vegas 475
+warren greensboro 453
+erie atlanta 161
+erie warren 161
+greensboro chandler 719
+peoria san_francisco 475
+erie sunnyvale 161
+erie sunnyvale 161
+omaha newport_news 1172
+greensboro chandler 719
+greensboro mesa 719
+sunnyvale mesa 1172
+warren greensboro 453
+atlanta tacoma 453
+greensboro peoria 719
+warren tacoma 453
+erie mesa 1333
+greensboro mesa 719
+greensboro newport_news 719
+greensboro chandler 719
+omaha mesa 1172
+newport_news ontario 475
+erie tacoma 614
+erie atlanta 161
+sunnyvale salinas 1172
+tacoma mesa 719
+45 new_orleans
+new_orleans memphis 1948
+billings albuquerque 1508
+orange fremont 884
+dallas orange 51
+dallas orange 51
+dallas yonkers 51
+fremont greensboro 1134
+dallas lincoln 51
+fremont albuquerque 624
+new_orleans orange 440
+new_orleans orange 440
+new_orleans dallas 389
+fremont memphis 624
+billings plano 2789
+dallas lincoln 51
+new_orleans billings 440
+yonkers fremont 884
+dallas memphis 1559
+greensboro plano 771
+memphis plano 1281
+greensboro plano 771
+new_orleans dallas 389
+new_orleans fremont 1324
+orange albuquerque 1508
+dallas billings 51
+dallas yonkers 51
+new_orleans orange 440
+fremont memphis 624
+greensboro plano 771
+new_orleans lincoln 440
+dallas lincoln 51
+orange houston 884
+new_orleans dallas 389
+yonkers houston 884
+fremont plano 1905
+fremont memphis 624
+yonkers fremont 884
+billings oceanside 3019
+dallas lincoln 51
+houston memphis 624
+orange greensboro 2018
+yonkers fremont 884
+orange houston 884
+new_orleans lincoln 440
+new_orleans dallas 389
+30 sioux_falls
+sioux_falls san_jose 1271
+san_jose el_monte 1198
+san_jose santa_rosa 1198
+sioux_falls corpus_christi 810
+san_jose daly_city 315
+corpus_christi oxnard 1659
+corpus_christi san_jose 461
+san_jose daly_city 315
+corpus_christi daly_city 776
+corpus_christi daly_city 776
+sioux_falls corpus_christi 810
+corpus_christi el_monte 1659
+daly_city charlotte 883
+san_jose santa_rosa 1198
+corpus_christi el_monte 1659
+sioux_falls san_jose 1271
+san_jose daly_city 315
+daly_city charlotte 883
+sioux_falls el_monte 2469
+sioux_falls el_monte 2469
+corpus_christi el_monte 1659
+daly_city santa_rosa 883
+sioux_falls corpus_christi 810
+san_jose charlotte 1198
+daly_city santa_rosa 883
+san_jose santa_rosa 1198
+daly_city ann_arbor 883
+corpus_christi san_jose 461
+san_jose daly_city 315
+daly_city charlotte 883
+45 indianapolis
+carrollton charleston 66
+elk_grove boise 329
+elk_grove boise 329
+indianapolis concord 1135
+elk_grove boise 329
+indianapolis concord 1135
+carrollton portsmouth 957
+indianapolis elk_grove 806
+indianapolis beaumont 1135
+beaumont el_paso 721
+lancaster el_paso 721
+elk_grove concord 329
+elk_grove concord 329
+indianapolis lancaster 1135
+elk_grove boise 329
+indianapolis elk_grove 806
+lancaster el_paso 721
+dallas greensboro 1358
+elk_grove boise 329
+elk_grove boise 329
+indianapolis concord 1135
+el_paso greensboro 637
+indianapolis lancaster 1135
+indianapolis dallas 1135
+lancaster carrollton 1358
+indianapolis dallas 1135
+indianapolis elk_grove 806
+elk_grove denver 1753
+elk_grove dallas 329
+elk_grove boise 329
+elk_grove lancaster 329
+concord greensboro 1358
+indianapolis greensboro 2493
+elk_grove concord 329
+elk_grove el_paso 1050
+boise el_paso 721
+carrollton denver 66
+elk_grove concord 329
+indianapolis elk_grove 806
+indianapolis lancaster 1135
+elk_grove dallas 329
+indianapolis concord 1135
+elk_grove lancaster 329
+elk_grove dallas 329
+beaumont greensboro 1358
+30 bellevue
+fort_worth plano 269
+bellevue plano 506
+new_york_city elgin 269
+portland plano 307
+bellevue new_york_city 237
+portland fort_worth 38
+portland fort_worth 38
+bellevue charlotte 506
+new_york_city plano 269
+bellevue new_york_city 237
+bellevue new_york_city 237
+portland fort_worth 38
+bellevue fort_worth 237
+portland new_york_city 38
+portland elgin 307
+new_york_city elgin 269
+portland elgin 307
+fort_worth charleston 269
+fort_worth plano 269
+new_york_city elgin 269
+fort_worth elgin 269
+new_york_city plano 269
+bellevue westminster 958
+charlotte anaheim 452
+westminster omaha 610
+bellevue portland 199
+portland new_york_city 38
+fort_worth plano 269
+bellevue fort_worth 237
+elgin anaheim 452
+35 chattanooga
+chattanooga fullerton 331
+durham pueblo 747
+allentown concord 1297
+chattanooga port_st_lucie 331
+chattanooga allentown 331
+port_st_lucie tallahassee 747
+chattanooga fullerton 331
+des_moines escondido 1504
+chattanooga port_st_lucie 331
+tallahassee thousand_oaks 1229
+charleston pueblo 747
+pueblo des_moines 550
+chattanooga durham 331
+chattanooga fullerton 331
+tallahassee escondido 2054
+fullerton overland_park 747
+chattanooga thousand_oaks 2307
+concord san_buenaventura 1504
+chattanooga allentown 331
+escondido coral_springs 13
+concord thousand_oaks 679
+chattanooga charleston 331
+fullerton overland_park 747
+overland_park des_moines 550
+charleston tallahassee 747
+chattanooga overland_park 1078
+chattanooga fullerton 331
+durham tallahassee 747
+chattanooga charleston 331
+chattanooga allentown 331
+chattanooga charleston 331
+chattanooga port_st_lucie 331
+chattanooga allentown 331
+chattanooga pueblo 1078
+pueblo san_buenaventura 2054
+37 paterson
+pomona miramar 461
+salem midland 984
+pomona salem 669
+paterson vallejo 1512
+olathe miramar 461
+el_monte miramar 461
+el_monte atlanta 1653
+little_rock atlanta 1653
+olathe miramar 461
+paterson mcallen 843
+paterson little_rock 843
+paterson miramar 1304
+mesquite boise 2588
+miramar salem 208
+vallejo midland 984
+salem athens 1779
+pomona st_petersburg 1653
+paterson little_rock 843
+little_rock atlanta 1653
+mesquite midland 984
+little_rock vallejo 669
+miramar salem 208
+miramar mesquite 208
+pomona miramar 461
+paterson little_rock 843
+mcallen vallejo 669
+salem anchorage 984
+paterson pomona 843
+miramar vallejo 208
+miramar midland 1192
+paterson pomona 843
+paterson el_monte 843
+st_petersburg carrollton 1470
+olathe vallejo 669
+paterson pomona 843
+paterson olathe 843
+mcallen vallejo 669
+29 indianapolis
+fairfield chesapeake 1224
+indianapolis west_valley 431
+west_valley hartford 1955
+waterbury newport_news 488
+west_valley athens 717
+north_las_vegas chesapeake 408
+west_valley newport_news 1955
+west_valley fairfield 2912
+fairfield stamford 1929
+sacramento fairfield 714
+west_valley newport_news 1955
+fairfield fort_worth 816
+indianapolis athens 1148
+west_valley waterbury 1467
+indianapolis fairfield 3343
+waterbury hartford 488
+fort_worth chesapeake 408
+west_valley athens 717
+fort_worth stamford 1113
+west_valley athens 717
+sacramento north_las_vegas 1530
+hartford sacramento 243
+indianapolis sacramento 2629
+hartford north_las_vegas 1773
+waterbury newport_news 488
+athens newport_news 1238
+athens newport_news 1238
+waterbury hartford 488
+indianapolis fort_worth 4159
+32 springfield
+atlanta lubbock 1156
+sacramento salinas 241
+springfield westminster 2137
+springfield salinas 2378
+springfield sacramento 2137
+jacksonville sacramento 1156
+atlanta charleston 1156
+lafayette westminster 1156
+jacksonville westminster 1156
+springfield lafayette 981
+westminster santa_clarita 241
+jacksonville lubbock 1156
+springfield jacksonville 981
+springfield lafayette 981
+jacksonville milwaukee 1156
+lubbock santa_clarita 241
+atlanta sacramento 1156
+springfield atlanta 981
+sterling_heights sacramento 602
+lafayette westminster 1156
+sterling_heights fontana 891
+santa_clarita fontana 48
+springfield sterling_heights 1535
+jacksonville milwaukee 1156
+lafayette santa_clarita 1397
+jacksonville sterling_heights 554
+springfield sterling_heights 1535
+lafayette sacramento 1156
+springfield jacksonville 981
+atlanta lubbock 1156
+springfield lafayette 981
+sterling_heights westminster 602
+31 waco
+west_valley tucson 849
+akron alexandria 2131
+waco el_monte 1612
+alexandria west_valley 1107
+evansville joliet 2791
+akron springfield 1140
+north_las_vegas joliet 489
+springfield north_las_vegas 1609
+evansville north_las_vegas 2302
+evansville alexandria 1684
+akron provo 3238
+shreveport akron 337
+shreveport west_valley 3575
+montgomery evansville 1275
+el_monte springfield 693
+shreveport el_monte 784
+waco springfield 2305
+el_monte tucson 3640
+springfield west_valley 2098
+waco akron 1165
+el_monte alexandria 1684
+waco montgomery 337
+akron el_monte 447
+springfield alexandria 991
+tucson south_bend 590
+montgomery shreveport 491
+montgomery akron 828
+akron el_monte 447
+shreveport evansville 784
+montgomery akron 828
+montgomery el_monte 1275
+33 toledo
+concord santa_clara 799
+concord pembroke_pines 799
+tampa knoxville 846
+tampa knoxville 846
+tampa knoxville 846
+knoxville pueblo 799
+tampa santa_clara 1645
+concord chicago 799
+toledo tampa 435
+knoxville santa_clara 799
+tampa bridgeport 1645
+tampa west_valley 1645
+toledo tampa 435
+concord bridgeport 799
+toledo santa_clara 2080
+toledo chicago 2080
+tampa concord 846
+knoxville pembroke_pines 799
+tampa concord 846
+tampa oxnard 1645
+tampa pembroke_pines 1645
+toledo tampa 435
+knoxville pueblo 799
+toledo tampa 435
+toledo knoxville 1281
+toledo tampa 435
+knoxville bridgeport 799
+tampa knoxville 846
+toledo tampa 435
+concord chicago 799
+tampa oxnard 1645
+concord chicago 799
+tampa knoxville 846
+44 aurora
+west_jordan charlotte 1519
+garland fullerton 659
+portsmouth wichita 2178
+garland fullerton 659
+brownsville charlotte 4793
+laredo sioux_falls 398
+portsmouth west_jordan 659
+sioux_falls elizabeth 650
+aurora laredo 3228
+salinas garland 1671
+chattanooga sioux_falls 1930
+south_bend garland 3943
+brownsville laredo 944
+brownsville salinas 944
+elizabeth sacramento 623
+south_bend salinas 2272
+clearwater thousand_oaks 817
+laredo elizabeth 1048
+chattanooga brownsville 588
+elizabeth thousand_oaks 2801
+salinas elizabeth 1048
+chattanooga laredo 1532
+garland toledo 1361
+laredo wichita 3849
+laredo portland 1671
+laredo fullerton 2330
+portsmouth thousand_oaks 2178
+elizabeth sacramento 623
+aurora brownsville 2284
+garland west_jordan 659
+sioux_falls garland 1273
+elizabeth west_jordan 1282
+aurora laredo 3228
+sacramento fullerton 659
+chattanooga portsmouth 3203
+salinas portland 1671
+sioux_falls portland 1273
+south_bend brownsville 1328
+aurora chattanooga 1696
+portsmouth toledo 1361
+south_bend brownsville 1328
+aurora south_bend 956
+aurora chattanooga 1696
+sacramento clearwater 1361
+39 grand_rapids
+lancaster norwalk 838
+tulsa pasadena 1544
+grand_rapids salinas 182
+tulsa fort_wayne 1544
+norwalk pasadena 706
+lancaster chicago 138
+chicago norwalk 700
+salinas pasadena 1544
+norwalk pasadena 706
+tulsa rancho_cucamonga 1544
+grand_rapids tulsa 182
+tulsa chicago 138
+grand_rapids norwalk 1020
+salinas rancho_cucamonga 1544
+grand_rapids lancaster 182
+salinas chicago 138
+grand_rapids tulsa 182
+salinas chicago 138
+chicago santa_rosa 1406
+grand_rapids salinas 182
+grand_rapids salinas 182
+grand_rapids tulsa 182
+chicago fort_wayne 1406
+tulsa chicago 138
+tulsa norwalk 838
+santa_rosa amarillo 568
+grand_rapids chicago 320
+grand_rapids tulsa 182
+salinas santa_rosa 1544
+lancaster chicago 138
+grand_rapids lancaster 182
+grand_rapids chicago 320
+grand_rapids rancho_cucamonga 1726
+salinas pasadena 1544
+chicago rancho_cucamonga 1406
+lancaster norwalk 838
+tulsa norwalk 838
+lancaster norwalk 838
+chicago norwalk 700
+32 nashville
+scottsdale hampton 1278
+boise columbia 1776
+nashville boise 934
+nashville simi_valley 934
+nashville rancho_cucamonga 1931
+simi_valley rancho_cucamonga 997
+norfolk elk_grove 1387
+simi_valley anaheim 1776
+nashville norfolk 3655
+nashville simi_valley 934
+simi_valley fullerton 2721
+simi_valley anaheim 1776
+anaheim fullerton 945
+nashville simi_valley 934
+sunnyvale houston 3231
+fullerton hampton 1507
+rancho_cucamonga columbia 779
+norfolk houston 1507
+boise columbia 1776
+scottsdale lincoln 549
+simi_valley norfolk 2721
+anaheim scottsdale 1174
+nashville boise 934
+rancho_cucamonga scottsdale 1953
+simi_valley rancho_cucamonga 997
+lincoln jacksonville 1474
+boise rancho_cucamonga 997
+rancho_cucamonga norfolk 1724
+lincoln elk_grove 609
+boise sunnyvale 997
+nashville simi_valley 934
+nashville rancho_cucamonga 1931
+49 abilene
+milwaukee vallejo 163
+detroit lakewood 333
+abilene tampa 1791
+tampa sioux_falls 916
+tampa sioux_falls 916
+oakland thornton 2614
+fullerton vallejo 1901
+vallejo topeka 1912
+abilene fullerton 806
+elgin lakewood 2540
+fullerton milwaukee 1738
+abilene topeka 4619
+detroit lakewood 333
+tampa elgin 1869
+milwaukee sioux_falls 163
+elgin lakewood 2540
+tampa milwaukee 753
+oakland elgin 953
+milwaukee topeka 2075
+tampa oakland 916
+fullerton sioux_falls 1901
+elgin thornton 1661
+elgin montgomery 1661
+milwaukee vallejo 163
+fullerton oakland 1901
+tampa sioux_falls 916
+abilene fullerton 806
+vallejo montgomery 2614
+detroit lakewood 333
+abilene fullerton 806
+fullerton tampa 985
+detroit billings 333
+tampa milwaukee 753
+vallejo elgin 953
+tampa elgin 1869
+abilene fullerton 806
+elgin thornton 1661
+milwaukee oakland 163
+topeka thornton 702
+milwaukee sioux_falls 163
+milwaukee topeka 2075
+topeka detroit 1248
+fullerton oakland 1901
+milwaukee elgin 1116
+milwaukee oakland 163
+milwaukee oakland 163
+tampa oakland 916
+fullerton vallejo 1901
+tampa oakland 916
+50 fayetteville
+chicago augusta 599
+cape_coral fort_wayne 636
+chicago augusta 599
+fayetteville aurora 1277
+chicago dayton 599
+fayetteville cape_coral 1277
+provo st_petersburg 707
+aurora visalia 2165
+provo garland 1170
+cape_coral st_petersburg 2165
+visalia garland 463
+dayton lubbock 2165
+aurora yonkers 2165
+chicago augusta 599
+provo lubbock 707
+aurora provo 1458
+fayetteville lubbock 3442
+provo topeka 707
+dayton yonkers 2165
+fayetteville chicago 678
+fort_wayne provo 822
+cape_coral lubbock 2165
+chicago dayton 599
+fayetteville aurora 1277
+fayetteville aurora 1277
+fayetteville chicago 678
+chicago dayton 599
+cape_coral provo 1458
+chicago cape_coral 599
+chicago aurora 599
+provo visalia 707
+fayetteville cape_coral 1277
+fort_wayne yonkers 1529
+fayetteville augusta 1277
+chicago cape_coral 599
+dayton st_petersburg 2165
+cape_coral topeka 2165
+fayetteville chicago 678
+chicago cape_coral 599
+provo st_petersburg 707
+cape_coral st_petersburg 2165
+fayetteville cape_coral 1277
+fayetteville fort_wayne 1913
+chicago aurora 599
+dayton provo 1458
+chicago lubbock 2764
+dayton yonkers 2165
+chicago cape_coral 599
+fayetteville chicago 678
+chicago aurora 599
diff --git a/codejam_2008/src/y2008beta/C-small-practice.in b/codejam_2008/src/y2008beta/C-small-practice.in
new file mode 100644
index 0000000..934d3eb
--- /dev/null
+++ b/codejam_2008/src/y2008beta/C-small-practice.in
@@ -0,0 +1,1391 @@
+100
+5 san_francisco
+san_francisco los_angeles 6
+los_angeles san_diego 2
+san_francisco san_diego 8
+los_angeles san_diego 2
+san_francisco los_angeles 6
+1 new_york_city
+new_york_city chicago 1
+2 houston
+houston phoenix 1
+houston phoenix 1
+2 philadelphia
+philadelphia san_antonio 1
+philadelphia san_antonio 2
+2 dallas
+dallas san_jose 2
+san_jose dallas 1
+2 detroit
+jacksonville indianapolis 2
+detroit jacksonville 1
+2 columbus
+columbus austin 2
+columbus memphis 1
+2 fort_worth
+fort_worth baltimore 1
+charlotte fort_worth 1
+2 el_paso
+milwaukee boston 1
+el_paso boston 1
+2 seattle
+seattle washington_dc 2
+denver louisville 1
+10 a
+e f 1
+d e 2
+c d 3
+b c 4
+a b 5
+a b 5
+b c 4
+c d 3
+d e 2
+e f 1
+11 a
+e f 1
+d e 2
+c d 3
+b c 4
+a b 5
+a f 15
+a b 5
+b c 4
+c d 3
+d e 2
+e f 1
+11 a
+e f 1
+d e 2
+c d 3
+b c 4
+a b 5
+a f 14
+a b 5
+b c 4
+c d 3
+d e 2
+e f 1
+15 a
+a f 1
+f e 2
+e d 3
+d c 4
+c b 5
+e f 1
+d e 2
+c d 3
+b c 4
+a b 5
+a b 5
+b c 4
+c d 3
+d e 2
+e f 1
+12 aa
+aa ab 1
+ab ac 1
+ba bb 1
+bb bc 1
+ca cb 1
+cb cc 1
+aa ba 1
+ba ca 1
+ab bb 1
+bb cb 1
+ac bc 1
+bc cc 1
+24 aa
+aa ab 1
+ab ac 2
+ac ad 3
+ba bb 1
+bb bc 2
+bc bd 3
+ca cb 1
+cb cc 2
+cc cd 3
+da db 1
+db dc 2
+dc dd 3
+aa ba 1
+ba ca 2
+ca da 3
+ab bb 1
+bb cb 2
+cb db 3
+ac bc 1
+bc cc 2
+cc dc 3
+ad bd 1
+bd cd 2
+cd dd 3
+22 aa
+aa ba 1
+ba ca 2
+ca da 3
+ab bb 1
+bb cb 2
+cb db 3
+ac bc 1
+bc cc 2
+cc dc 3
+ad bd 1
+bd cd 2
+cd dd 3
+ab ac 2
+ac ad 3
+ba bb 1
+bb bc 2
+bc bd 3
+ca cb 1
+cb cc 2
+cc cd 3
+da db 1
+db dc 2
+15 a
+a b 2
+b c 3
+c d 5
+d e 7
+e f 11
+a c 5
+b d 8
+c e 12
+d f 18
+a d 10
+b e 15
+c f 23
+a e 17
+b f 26
+a f 28
+15 a
+a b 2
+b c 3
+c d 5
+d e 7
+e f 11
+a c 4
+b d 7
+c d 11
+d f 17
+a d 8
+b e 13
+c f 21
+a e 14
+b f 23
+a f 24
+15 b
+a b 2
+b c 3
+c d 5
+d e 7
+e f 11
+a c 4
+b d 7
+c d 11
+d f 17
+a d 8
+b e 13
+c f 21
+a e 14
+b f 23
+a f 24
+13 fresno
+coral_springs topeka 5
+washington_dc detroit 4
+coral_springs denton 4
+cedar_rapids garland 4
+fresno detroit 8
+cambridge garland 6
+cambridge detroit 4
+coral_springs cedar_rapids 4
+fresno topeka 7
+fresno washington_dc 4
+fresno coral_springs 2
+fresno denton 6
+fresno washington_dc 4
+22 lakewood
+lakewood mesquite 2
+mesquite pembroke_pines 2
+mesquite buffalo 6
+mesquite nashville 4
+lakewood buffalo 8
+mesquite pembroke_pines 2
+lakewood buffalo 8
+lakewood mesquite 2
+nashville buffalo 2
+mesquite pembroke_pines 2
+lakewood buffalo 8
+lakewood pembroke_pines 4
+mesquite pembroke_pines 2
+mesquite pembroke_pines 2
+lakewood pembroke_pines 4
+mesquite buffalo 7
+mesquite pembroke_pines 2
+mesquite pembroke_pines 2
+mesquite pembroke_pines 2
+lakewood buffalo 8
+pembroke_pines nashville 2
+lakewood mesquite 2
+4 tacoma
+tacoma norfolk 2
+tacoma norfolk 2
+tacoma norfolk 2
+tacoma norfolk 2
+21 bakersfield
+indianapolis el_monte 9
+pomona long_beach 8
+pomona new_haven 4
+bakersfield riverside 7
+stockton long_beach 6
+bakersfield st_louis 7
+pomona bakersfield 2
+riverside st_louis 1
+bridgeport anchorage 10
+bakersfield riverside 7
+bakersfield st_louis 7
+stockton bridgeport 10
+st_louis long_beach 1
+stockton lowell 7
+lowell pomona 10
+anchorage new_haven 2
+lowell long_beach 3
+el_monte indianapolis 10
+bakersfield riverside 7
+pomona bridgeport 11
+pomona anchorage 2
+20 laredo
+fullerton san_buenaventura 3
+laredo philadelphia 8
+laredo philadelphia 8
+colorado_springs new_haven 10
+fullerton philadelphia 7
+fullerton san_buenaventura 3
+philadelphia san_buenaventura 4
+fullerton san_buenaventura 3
+fullerton san_buenaventura 3
+tallahassee pueblo 7
+colorado_springs new_haven 10
+colorado_springs new_haven 10
+colorado_springs new_haven 10
+fullerton san_buenaventura 3
+colorado_springs new_haven 10
+laredo philadelphia 8
+laredo philadelphia 8
+laredo philadelphia 8
+colorado_springs new_haven 10
+laredo philadelphia 8
+20 nashville
+denton cleveland 9
+nashville durham 17
+durham denton 17
+washington_dc durham 5
+denton cleveland 9
+laredo denver 5
+washington_dc jacksonville 7
+beaumont south_bend 1
+beaumont south_bend 1
+south_bend cleveland 9
+laredo jacksonville 12
+arlington durham 7
+lowell yonkers 3
+beaumont south_bend 1
+laredo jacksonville 12
+south_bend cleveland 9
+denton cleveland 9
+nashville durham 17
+denton cleveland 9
+washington_dc durham 5
+8 athens
+athens akron 1
+chicago athens 1
+athens akron 1
+athens akron 1
+chicago akron 1
+athens chicago 1
+athens akron 1
+athens akron 1
+4 san_bernardino
+san_bernardino anaheim 2
+san_bernardino little_rock 2
+san_bernardino anaheim 2
+san_bernardino anaheim 1
+7 fremont
+lincoln arlington 3
+corpus_christi denver 4
+fremont yonkers 3
+fremont yonkers 3
+yonkers coral_springs 4
+coral_springs corpus_christi 3
+lincoln coral_springs 5
+15 waterbury
+lakewood phoenix 4
+cambridge south_bend 1
+greensboro mcallen 4
+waterbury south_bend 7
+waterbury san_diego 12
+waterbury arvada 12
+phoenix gainesville 11
+waterbury amarillo 16
+daly_city shreveport 4
+daly_city arvada 8
+daly_city arvada 8
+shreveport amarillo 8
+cambridge mcallen 5
+waterbury san_diego 12
+san_diego amarillo 4
+4 lubbock
+lubbock clarksville 1
+lubbock clarksville 1
+lubbock milwaukee 1
+lubbock milwaukee 1
+25 el_monte
+new_orleans durham 1
+durham joliet 5
+abilene lancaster 3
+el_monte cambridge 7
+el_monte abilene 3
+new_orleans abilene 8
+el_monte columbia 8
+el_monte cambridge 7
+joliet abilene 4
+baltimore topeka 3
+el_monte cambridge 7
+columbia lancaster 4
+lancaster abilene 3
+el_monte cambridge 7
+joliet el_monte 6
+el_monte cambridge 7
+el_monte cambridge 7
+el_monte cambridge 7
+joliet el_monte 6
+lancaster abilene 3
+el_monte cambridge 7
+el_monte cambridge 7
+el_monte cambridge 7
+el_monte cambridge 7
+el_monte cambridge 7
+19 plano
+plano ontario 2
+plano ontario 2
+plano ontario 2
+plano spokane 2
+plano spokane 2
+fort_lauderdale spokane 1
+fort_lauderdale spokane 1
+fort_lauderdale spokane 1
+plano spokane 3
+spokane plano 3
+plano fort_lauderdale 2
+plano spokane 2
+plano spokane 2
+plano ontario 2
+plano fort_lauderdale 3
+plano spokane 2
+fort_lauderdale ontario 1
+plano spokane 2
+plano spokane 2
+7 montgomery
+montgomery lexington_fayette 1
+portsmouth lexington_fayette 1
+salt_lake_city lexington_fayette 1
+montgomery lexington_fayette 1
+salt_lake_city lexington_fayette 1
+portsmouth lexington_fayette 1
+portsmouth lexington_fayette 1
+21 lafayette
+arlington boise 8
+austin west_covina 5
+shreveport hayward 12
+austin salem 3
+mesquite arlington 2
+roseville escondido 20
+detroit omaha 4
+st_petersburg philadelphia 27
+hayward lafayette 17
+providence arlington 11
+pueblo hayward 8
+arlington hayward 2
+providence salem 20
+west_covina philadelphia 4
+roseville hayward 13
+lafayette philadelphia 28
+providence st_paul 15
+west_covina providence 23
+norwalk west_covina 4
+lafayette mesquite 12
+providence west_covina 22
+13 corona
+eugene billings 2
+corona billings 4
+eugene billings 2
+eugene billings 2
+eugene billings 2
+eugene billings 2
+eugene billings 2
+corona seattle 2
+corona pittsburgh 3
+eugene billings 2
+corona pittsburgh 3
+corona seattle 3
+eugene billings 2
+18 cambridge
+naperville baltimore 6
+savannah hollywood 2
+cambridge st_paul 5
+naperville baltimore 6
+augusta baltimore 6
+cambridge st_paul 5
+birmingham topeka 2
+naperville st_paul 3
+hollywood baltimore 5
+st_paul savannah 1
+chula_vista stockton 6
+naperville baltimore 6
+stockton topeka 1
+st_paul chula_vista 7
+stockton topeka 1
+chula_vista topeka 5
+clarksville cambridge 3
+naperville birmingham 5
+10 hartford
+hartford abilene 3
+rochester ontario 1
+rochester ontario 1
+hartford abilene 3
+hartford abilene 3
+rochester abilene 1
+ontario overland_park 1
+hartford abilene 3
+hartford rochester 2
+hartford overland_park 3
+20 lancaster
+cincinnati nashville 5
+palmdale glendale 5
+greensboro pompano_beach 12
+lancaster cary 19
+nashville paterson 16
+naperville cary 9
+greensboro portland 2
+aurora st_paul 3
+st_paul cary 1
+pompano_beach glendale 7
+lancaster st_paul 18
+sacramento paterson 4
+greensboro aurora 13
+paterson nashville 17
+corpus_christi elk_grove 14
+naperville paterson 10
+greensboro elk_grove 19
+portland anchorage 8
+corpus_christi anchorage 5
+nashville sacramento 12
+6 santa_clarita
+pittsburgh san_antonio 2
+santa_clarita pittsburgh 1
+pittsburgh san_antonio 2
+santa_clarita san_antonio 3
+santa_clarita san_antonio 3
+santa_clarita pittsburgh 1
+4 palmdale
+lafayette chattanooga 2
+palmdale lafayette 2
+palmdale lafayette 2
+palmdale chattanooga 4
+14 shreveport
+shreveport mesquite 4
+shreveport portland 4
+shreveport winston_salem 4
+miramar portland 1
+shreveport mesquite 4
+shreveport miramar 3
+mckinney miramar 1
+portland winston_salem 1
+shreveport mesquite 4
+shreveport mesquite 4
+shreveport winston_salem 4
+shreveport mesquite 4
+shreveport mesquite 4
+shreveport mesquite 4
+5 montgomery
+montgomery sioux_falls 4
+montgomery sioux_falls 4
+montgomery chattanooga 2
+montgomery sioux_falls 5
+montgomery chattanooga 2
+7 nashville
+nashville waco 4
+chula_vista yonkers 7
+nashville waco 4
+nashville waco 4
+salem chula_vista 4
+salem nashville 3
+nashville chula_vista 6
+24 fort_lauderdale
+salinas south_bend 4
+newport_news salinas 3
+fayetteville newport_news 5
+salinas lansing 3
+salinas lansing 3
+newport_news fairfield 2
+manchester south_bend 3
+fort_lauderdale south_bend 7
+salinas lansing 3
+salinas lansing 3
+fayetteville newport_news 5
+salinas lansing 3
+fayetteville lansing 6
+salinas lansing 3
+salinas lansing 3
+salinas lansing 3
+newport_news fairfield 2
+salinas lansing 3
+fayetteville lansing 6
+fayetteville newport_news 5
+newport_news fairfield 2
+fayetteville lansing 6
+newport_news fairfield 2
+fayetteville newport_news 5
+17 st_louis
+fayetteville philadelphia 3
+st_louis oceanside 8
+portland sacramento 6
+louisville scottsdale 2
+fayetteville philadelphia 3
+louisville gainesville 8
+scottsdale oceanside 4
+louisville scottsdale 2
+tempe fayetteville 1
+santa_ana fayetteville 1
+louisville scottsdale 2
+fayetteville philadelphia 3
+tempe fayetteville 1
+st_louis oceanside 8
+st_louis oceanside 8
+st_louis oceanside 8
+louisville gainesville 8
+17 dallas
+pittsburgh cape_coral 6
+dallas grand_rapids 2
+grand_rapids worcester 3
+dallas worcester 5
+dallas worcester 5
+grand_rapids worcester 4
+dallas worcester 5
+dallas worcester 5
+dallas worcester 5
+grand_rapids worcester 3
+dallas worcester 5
+dallas worcester 5
+dallas grand_rapids 2
+cape_coral grand_rapids 1
+dallas worcester 5
+cape_coral worcester 4
+dallas worcester 5
+11 virginia_beach
+virginia_beach st_paul 5
+norman milwaukee 4
+st_paul oceanside 3
+virginia_beach warren 5
+virginia_beach moreno_valley 7
+virginia_beach oceanside 8
+oceanside virginia_beach 8
+st_paul oceanside 3
+milwaukee st_paul 2
+virginia_beach moreno_valley 8
+virginia_beach norman 3
+11 san_bernardino
+cincinnati tallahassee 2
+san_bernardino tallahassee 3
+cincinnati tallahassee 2
+cincinnati tallahassee 2
+san_bernardino huntington_beach 5
+cincinnati tallahassee 2
+san_bernardino huntington_beach 5
+cincinnati tallahassee 2
+lowell tallahassee 1
+san_bernardino tallahassee 3
+san_bernardino lowell 2
+21 amarillo
+dallas augusta 6
+buffalo santa_clarita 7
+augusta hollywood 4
+dallas augusta 6
+amarillo south_bend 13
+santa_clarita west_covina 4
+cary augusta 6
+baltimore south_bend 12
+buffalo augusta 3
+mesa augusta 6
+buffalo augusta 3
+mesa columbus 8
+augusta hollywood 4
+amarillo columbus 7
+dallas augusta 6
+dallas augusta 6
+amarillo columbus 7
+dallas augusta 7
+dallas augusta 6
+santa_clarita west_covina 4
+baltimore santa_clarita 7
+7 ann_arbor
+evansville chula_vista 2
+chula_vista bellevue 2
+ann_arbor chula_vista 2
+evansville bellevue 4
+evansville bellevue 4
+ann_arbor bellevue 4
+ann_arbor chula_vista 2
+19 seattle
+montgomery olathe 3
+seattle montgomery 2
+seattle montgomery 2
+seattle arvada 3
+seattle montgomery 2
+elizabeth seattle 8
+arvada abilene 5
+warren abilene 3
+seattle montgomery 2
+seattle montgomery 2
+seattle montgomery 2
+seattle montgomery 2
+seattle montgomery 2
+seattle montgomery 2
+seattle montgomery 2
+seattle montgomery 2
+arvada north_las_vegas 4
+seattle montgomery 2
+abilene olathe 8
+6 killeen
+madison chula_vista 3
+new_haven chula_vista 2
+killeen greensboro 4
+killeen chula_vista 4
+boston new_haven 1
+killeen madison 1
+15 winston_salem
+winston_salem sterling_heights 3
+winston_salem naperville 1
+winston_salem sterling_heights 3
+winston_salem sterling_heights 3
+winston_salem erie 2
+naperville erie 1
+naperville sterling_heights 2
+naperville erie 1
+winston_salem sterling_heights 3
+naperville erie 1
+winston_salem erie 2
+naperville erie 1
+naperville erie 1
+erie sterling_heights 1
+naperville erie 1
+13 port_st_lucie
+boston pomona 6
+amarillo oklahoma_city 5
+lansing oklahoma_city 3
+boston port_st_lucie 2
+amarillo pomona 7
+port_st_lucie long_beach 6
+long_beach boston 6
+lansing pomona 4
+boston oklahoma_city 5
+amarillo oklahoma_city 5
+oklahoma_city lansing 4
+port_st_lucie amarillo 1
+boston pomona 6
+12 hollywood
+beaumont mesa 8
+sterling_heights mesa 1
+thornton huntsville 8
+atlanta salt_lake_city 9
+chesapeake baton_rouge 9
+atlanta seattle 6
+hollywood fort_worth 12
+fort_wayne mesa 6
+hollywood huntsville 12
+fort_wayne seattle 2
+atlanta fort_wayne 4
+atlanta fort_wayne 4
+24 winston_salem
+fort_wayne san_buenaventura 3
+norman pomona 10
+san_jose elgin 5
+sunnyvale pomona 2
+sunnyvale pomona 1
+norman des_moines 11
+killeen sunnyvale 2
+san_francisco sacramento 4
+sunnyvale indianapolis 1
+elgin sunnyvale 5
+santa_ana west_covina 3
+irvine pomona 8
+san_jose san_francisco 2
+san_buenaventura sacramento 8
+irvine sunnyvale 7
+norman bakersfield 7
+winston_salem des_moines 13
+sunnyvale des_moines 2
+norman irvine 2
+irvine san_buenaventura 10
+san_antonio irvine 3
+san_antonio des_moines 12
+bakersfield fort_wayne 2
+san_jose bakersfield 8
+4 yonkers
+yonkers plano 2
+yonkers plano 2
+alexandria plano 3
+alexandria yonkers 1
+14 berkeley
+berkeley coral_springs 7
+pomona thornton 4
+elk_grove coral_springs 3
+louisville rochester 6
+madison norfolk 5
+pomona clearwater 4
+berkeley minneapolis 9
+thousand_oaks boston 8
+pomona thornton 4
+coral_springs thornton 2
+pomona thornton 4
+berkeley minneapolis 9
+madison clearwater 4
+thousand_oaks coral_springs 7
+5 sacramento
+new_haven knoxville 4
+huntsville knoxville 2
+huntsville knoxville 2
+sacramento huntsville 3
+new_haven huntsville 3
+12 colorado_springs
+syracuse garland 2
+colorado_springs cambridge 5
+colorado_springs billings 4
+colorado_springs cambridge 5
+syracuse billings 2
+cambridge syracuse 4
+colorado_springs billings 4
+colorado_springs cambridge 5
+syracuse billings 2
+colorado_springs billings 4
+colorado_springs syracuse 2
+colorado_springs syracuse 2
+11 clarksville
+rockford palmdale 4
+clarksville rockford 4
+clarksville rockford 4
+clarksville rockford 4
+clarksville rockford 4
+clarksville springfield 2
+springfield palmdale 1
+albuquerque rockford 2
+springfield palmdale 1
+clarksville springfield 2
+clarksville rockford 4
+17 cambridge
+cambridge lexington_fayette 2
+cambridge lexington_fayette 2
+cambridge lexington_fayette 2
+cambridge lexington_fayette 2
+cambridge lubbock 2
+cambridge lubbock 2
+cambridge lexington_fayette 2
+cambridge lubbock 2
+cambridge lexington_fayette 2
+cambridge lexington_fayette 2
+cambridge lubbock 2
+cambridge lexington_fayette 2
+cambridge lexington_fayette 2
+cambridge lexington_fayette 2
+cambridge lexington_fayette 2
+cambridge lubbock 2
+cambridge lexington_fayette 2
+22 bakersfield
+cape_coral nashville 7
+overland_park fresno 15
+tampa waterbury 4
+overland_park fresno 15
+vancouver nashville 12
+bakersfield fresno 16
+waterbury stamford 10
+salinas cape_coral 4
+nashville indianapolis 3
+nashville stamford 1
+vancouver west_jordan 9
+vancouver stamford 14
+vancouver west_jordan 9
+waterbury carrollton 10
+bakersfield vallejo 6
+nashville inglewood 3
+west_jordan nashville 3
+bakersfield west_jordan 11
+vancouver indianapolis 15
+salinas fresno 14
+stockton indianapolis 8
+bakersfield huntington_beach 12
+25 cape_coral
+chattanooga salinas 2
+cape_coral salinas 4
+tacoma chattanooga 1
+tacoma chattanooga 2
+chattanooga salinas 2
+chattanooga salinas 2
+tacoma chattanooga 2
+cape_coral tacoma 1
+tacoma chattanooga 1
+tacoma chattanooga 1
+cape_coral tacoma 1
+tacoma chattanooga 1
+chattanooga salinas 2
+tacoma chattanooga 1
+cape_coral tacoma 1
+chattanooga salinas 2
+tacoma chattanooga 1
+tacoma chattanooga 1
+cape_coral tacoma 1
+tacoma chattanooga 1
+tacoma chattanooga 1
+cape_coral chattanooga 2
+cape_coral tacoma 1
+cape_coral tacoma 1
+tacoma chattanooga 1
+4 fort_lauderdale
+fort_lauderdale waco 5
+fort_lauderdale waco 5
+fort_lauderdale waco 5
+fort_lauderdale waco 5
+15 bridgeport
+bridgeport madison 6
+bridgeport detroit 2
+bridgeport madison 6
+bridgeport madison 6
+oakland detroit 1
+st_louis rockford 3
+bridgeport corpus_christi 8
+bridgeport corpus_christi 8
+bridgeport corpus_christi 8
+corpus_christi oxnard 4
+bridgeport madison 6
+bridgeport madison 6
+bridgeport madison 6
+bridgeport madison 6
+bridgeport corpus_christi 8
+15 reno
+daly_city lincoln 2
+cary lincoln 4
+modesto santa_clara 2
+modesto santa_clara 2
+reno fort_lauderdale 13
+reno flint 1
+reno mobile 2
+reno modesto 7
+modesto phoenix 6
+santa_clara phoenix 3
+daly_city modesto 4
+reno fort_lauderdale 13
+flint lincoln 6
+flint lincoln 6
+reno fort_lauderdale 13
+6 chesapeake
+minneapolis huntsville 4
+minneapolis san_diego 2
+huntsville palmdale 1
+chesapeake palmdale 7
+chesapeake milwaukee 1
+chesapeake palmdale 7
+15 pittsburgh
+boise nashville 3
+eugene tampa 1
+boise pittsburgh 2
+pittsburgh boise 1
+pittsburgh nashville 4
+pittsburgh boise 1
+boise nashville 3
+boise nashville 3
+boise nashville 3
+boise nashville 3
+boise eugene 2
+boise nashville 3
+boise nashville 3
+boise nashville 4
+pittsburgh eugene 3
+10 virginia_beach
+salem oxnard 2
+orlando oxnard 3
+salem oxnard 2
+virginia_beach salem 2
+salem oxnard 2
+salem oxnard 2
+orlando oxnard 3
+virginia_beach salem 2
+orlando salem 1
+virginia_beach orlando 1
+21 inglewood
+inglewood glendale 4
+fullerton bridgeport 1
+fullerton costa_mesa 2
+inglewood costa_mesa 2
+fullerton concord 9
+costa_mesa fullerton 3
+inglewood glendale 4
+mckinney concord 1
+fullerton glendale 4
+inglewood corpus_christi 6
+fullerton tacoma 6
+bridgeport glendale 3
+bridgeport inglewood 2
+bridgeport concord 8
+bridgeport corpus_christi 5
+inglewood glendale 4
+glendale concord 5
+fullerton glendale 4
+corpus_christi concord 3
+costa_mesa mckinney 6
+fullerton mckinney 8
+21 santa_ana
+oceanside salt_lake_city 3
+bakersfield salt_lake_city 5
+santa_ana portsmouth 4
+santa_ana yonkers 7
+oceanside las_vegas 9
+bakersfield hialeah 3
+daly_city bakersfield 3
+daly_city oceanside 5
+daly_city indianapolis 9
+santa_ana yonkers 7
+santa_ana yonkers 7
+boise salt_lake_city 6
+boise salt_lake_city 6
+santa_ana yonkers 7
+santa_ana oceanside 14
+daly_city indianapolis 9
+santa_ana yonkers 7
+santa_ana yonkers 7
+santa_ana yonkers 7
+wichita richmond 3
+wichita boise 8
+7 tucson
+westminster lafayette 2
+westminster ann_arbor 1
+tucson ann_arbor 3
+mckinney lafayette 4
+simi_valley jackson 2
+westminster lafayette 2
+westminster ann_arbor 1
+23 glendale
+huntsville chattanooga 13
+salem manchester 1
+flint naperville 3
+salem manchester 1
+alexandria lincoln 8
+alexandria lincoln 8
+garland hialeah 10
+salem manchester 1
+chandler fort_collins 3
+huntsville tampa 7
+anchorage fort_collins 8
+chandler chattanooga 4
+chattanooga pompano_beach 3
+glendale irvine 15
+cary tampa 1
+huntsville lincoln 14
+anchorage fort_collins 8
+lincoln pompano_beach 3
+cary tampa 1
+anchorage fort_collins 8
+salem manchester 1
+glendale lincoln 14
+sterling_heights lincoln 3
+20 visalia
+visalia inglewood 6
+long_beach thousand_oaks 1
+elizabeth long_beach 6
+elizabeth chesapeake 3
+visalia mcallen 10
+inglewood san_bernardino 2
+elizabeth chesapeake 3
+inglewood coral_springs 1
+coral_springs mcallen 3
+elizabeth mcallen 9
+long_beach thousand_oaks 1
+coral_springs thousand_oaks 1
+orlando thousand_oaks 1
+inglewood coral_springs 1
+inglewood coral_springs 1
+fort_lauderdale thousand_oaks 6
+inglewood bakersfield 1
+elizabeth chesapeake 3
+fort_lauderdale long_beach 5
+chesapeake long_beach 3
+15 detroit
+shreveport rochester 2
+detroit rochester 6
+detroit rochester 5
+greensboro lexington_fayette 1
+detroit newark 3
+san_jose newark 5
+lexington_fayette greensboro 2
+greensboro shreveport 2
+detroit greensboro 5
+san_francisco greensboro 3
+san_jose lexington_fayette 1
+greensboro lexington_fayette 1
+san_jose greensboro 2
+newark shreveport 2
+san_jose newark 5
+11 lakewood
+lakewood independence 1
+independence thousand_oaks 2
+lakewood thousand_oaks 3
+lakewood independence 1
+lakewood thousand_oaks 3
+lakewood independence 1
+lakewood independence 1
+independence thousand_oaks 2
+lakewood independence 1
+thousand_oaks lakewood 4
+lakewood independence 1
+5 chattanooga
+chattanooga santa_rosa 1
+santa_rosa phoenix 2
+santa_rosa phoenix 2
+chattanooga phoenix 3
+santa_rosa phoenix 2
+23 memphis
+little_rock ann_arbor 19
+san_antonio ann_arbor 5
+independence san_antonio 1
+fresno montgomery 14
+rockford vallejo 6
+little_rock beaumont 10
+spokane thornton 2
+san_antonio modesto 1
+independence san_antonio 1
+little_rock beaumont 10
+beaumont fort_collins 8
+little_rock santa_ana 18
+little_rock beaumont 10
+fort_collins erie 2
+scottsdale modesto 6
+san_antonio ann_arbor 5
+fresno montgomery 13
+little_rock ann_arbor 19
+little_rock beaumont 10
+memphis antioch 15
+fort_collins erie 2
+mesquite warren 5
+santa_ana fort_collins 2
+7 phoenix
+phoenix minneapolis 4
+phoenix springfield 5
+springfield denton 1
+phoenix abilene 2
+tacoma springfield 4
+tacoma springfield 4
+tacoma springfield 4
+23 hampton
+hampton chesapeake 3
+hampton mobile 1
+hampton chesapeake 3
+jersey_city chesapeake 2
+hampton mobile 1
+mobile port_st_lucie 1
+hampton chesapeake 3
+port_st_lucie san_buenaventura 5
+san_buenaventura chesapeake 4
+hampton chesapeake 3
+st_petersburg fremont 1
+amarillo hampton 2
+gilbert chesapeake 4
+hampton mobile 1
+hampton jersey_city 2
+san_buenaventura amarillo 6
+gilbert fremont 5
+san_buenaventura st_petersburg 5
+jersey_city gilbert 5
+san_buenaventura st_petersburg 5
+mobile port_st_lucie 1
+fremont san_buenaventura 4
+fremont port_st_lucie 1
+20 billings
+billings inglewood 1
+inglewood vancouver 2
+inglewood vancouver 2
+billings inglewood 1
+billings inglewood 1
+inglewood vancouver 2
+billings inglewood 1
+inglewood vancouver 2
+inglewood vancouver 2
+billings inglewood 2
+inglewood vancouver 2
+billings inglewood 1
+inglewood vancouver 2
+inglewood vancouver 2
+inglewood vancouver 2
+billings inglewood 1
+inglewood vancouver 2
+inglewood vancouver 2
+billings inglewood 1
+inglewood vancouver 2
+7 chandler
+evansville mesa 3
+yonkers mesa 3
+chandler yonkers 2
+chandler evansville 2
+chandler yonkers 2
+chandler mesa 5
+chandler yonkers 2
+24 columbia
+columbia rancho_cucamonga 3
+columbia cincinnati 1
+cincinnati rancho_cucamonga 2
+columbia cincinnati 1
+columbia cincinnati 1
+columbia cincinnati 1
+columbia cincinnati 1
+cincinnati rancho_cucamonga 2
+kansas_city rockford 2
+columbia cincinnati 1
+columbia rancho_cucamonga 3
+kansas_city rockford 2
+cambridge rancho_cucamonga 2
+columbia rancho_cucamonga 3
+kansas_city rockford 2
+columbia kansas_city 1
+kansas_city rancho_cucamonga 2
+rockford rancho_cucamonga 1
+columbia cincinnati 1
+columbia cambridge 1
+columbia cincinnati 1
+columbia rancho_cucamonga 3
+columbia cambridge 1
+columbia cambridge 2
+5 chandler
+chandler elk_grove 3
+elk_grove chandler 4
+chandler savannah 4
+chandler elk_grove 3
+chandler shreveport 2
+20 des_moines
+des_moines west_jordan 5
+carrollton des_moines 3
+des_moines west_jordan 4
+west_jordan des_moines 5
+carrollton west_jordan 2
+des_moines carrollton 2
+west_jordan des_moines 5
+carrollton west_jordan 2
+des_moines west_jordan 4
+west_jordan des_moines 5
+des_moines west_jordan 4
+des_moines carrollton 3
+des_moines carrollton 2
+des_moines carrollton 3
+des_moines carrollton 2
+carrollton west_jordan 2
+des_moines west_jordan 4
+des_moines west_jordan 4
+carrollton west_jordan 2
+des_moines west_jordan 4
+17 miami
+lafayette oklahoma_city 10
+newport_news waco 5
+pueblo salinas 2
+pueblo minneapolis 6
+pembroke_pines salinas 7
+salinas westminster 9
+waco modesto 7
+lafayette minneapolis 9
+pittsburgh pueblo 3
+lafayette oklahoma_city 10
+waco hollywood 4
+pittsburgh minneapolis 9
+miami pittsburgh 3
+pembroke_pines salinas 6
+minneapolis oklahoma_city 1
+pueblo north_las_vegas 8
+miami lafayette 2
+14 garland
+garland elgin 1
+jacksonville elgin 1
+garland jacksonville 1
+garland lubbock 4
+garland jacksonville 1
+garland elgin 1
+garland jacksonville 1
+garland elgin 1
+garland elgin 2
+garland jacksonville 1
+garland elgin 1
+garland elgin 1
+elgin jacksonville 1
+garland lubbock 3
+12 el_monte
+el_monte birmingham 6
+santa_rosa corpus_christi 3
+birmingham el_monte 7
+antioch sioux_falls 5
+santa_rosa antioch 2
+cincinnati lowell 3
+el_monte birmingham 6
+santa_rosa sioux_falls 5
+corpus_christi santa_rosa 2
+sioux_falls antioch 6
+pembroke_pines lowell 1
+sioux_falls escondido 8
+20 paterson
+santa_clarita tulsa 10
+paterson olathe 3
+paterson spokane 9
+olathe rochester 4
+paterson olathe 3
+olathe tulsa 8
+santa_clarita tulsa 10
+olathe st_louis 9
+santa_clarita tulsa 10
+santa_clarita spokane 8
+paterson sacramento 13
+olathe fremont 7
+st_louis chicago 4
+olathe tulsa 8
+olathe rochester 4
+santa_clarita spokane 8
+paterson sacramento 13
+santa_clarita spokane 8
+santa_clarita tulsa 10
+santa_clarita spokane 8
+11 new_haven
+new_haven visalia 2
+new_haven visalia 2
+new_haven visalia 2
+new_haven olathe 2
+new_haven visalia 2
+new_haven visalia 2
+new_haven visalia 2
+new_haven olathe 2
+new_haven olathe 2
+new_haven visalia 2
+new_haven olathe 2
+3 modesto
+modesto hollywood 1
+arvada hollywood 2
+modesto hollywood 1
+21 santa_clara
+sioux_falls syracuse 5
+miramar waco 23
+santa_clara orange 26
+virginia_beach oklahoma_city 27
+orange miramar 24
+miramar waco 23
+santa_clara orange 26
+orange richmond 22
+santa_clara orange 26
+irving detroit 3
+atlanta new_york_city 7
+virginia_beach oklahoma_city 27
+santa_clara orange 26
+santa_clara orange 26
+virginia_beach oklahoma_city 27
+norman richmond 3
+santa_clara orange 26
+santa_clara orange 26
+new_york_city richmond 18
+miramar waco 23
+santa_clara orange 26
+11 palmdale
+palmdale provo 6
+mobile lowell 2
+palmdale provo 6
+palmdale lowell 4
+mobile lowell 2
+palmdale provo 6
+palmdale provo 6
+palmdale provo 6
+minneapolis provo 1
+lowell san_buenaventura 2
+minneapolis provo 1
+19 lafayette
+tacoma north_las_vegas 10
+washington_dc downey 5
+atlanta downey 13
+tacoma montgomery 12
+downey north_las_vegas 2
+atlanta downey 13
+burbank st_paul 18
+tacoma montgomery 12
+atlanta cary 8
+memphis st_paul 16
+lafayette pomona 20
+sacramento tacoma 9
+cary denver 4
+washington_dc knoxville 8
+cary denver 4
+tacoma montgomery 12
+memphis denver 12
+tacoma north_las_vegas 10
+providence garland 2
+23 dayton
+birmingham greensboro 17
+killeen torrance 2
+killeen brownsville 4
+reno independence 5
+dayton lakewood 7
+torrance greensboro 4
+killeen torrance 2
+springfield bridgeport 15
+dayton lakewood 7
+dayton reno 7
+long_beach rochester 15
+dayton bridgeport 15
+denton reno 2
+dayton lakewood 8
+reno independence 5
+las_vegas bridgeport 6
+reno santa_clara 10
+dayton rochester 15
+oxnard santa_clara 14
+birmingham torrance 13
+new_haven dayton 9
+dayton rochester 15
+independence torrance 1
+6 plano
+seattle lincoln 1
+lincoln birmingham 3
+plano lincoln 5
+plano birmingham 2
+seattle birmingham 3
+birmingham seattle 3
+18 manchester
+indianapolis warren 1
+mobile inglewood 8
+warren kansas_city 4
+antioch new_york_city 8
+inglewood moreno_valley 4
+manchester portsmouth 13
+moreno_valley antioch 1
+manchester knoxville 15
+mobile warren 11
+new_york_city inglewood 6
+manchester inglewood 8
+manchester kansas_city 15
+buffalo warren 7
+mobile warren 11
+mobile kansas_city 16
+buffalo warren 7
+indianapolis warren 1
+warren kansas_city 4
+12 buffalo
+thousand_oaks buffalo 5
+buffalo birmingham 2
+buffalo birmingham 2
+buffalo thousand_oaks 4
+thousand_oaks birmingham 3
+buffalo birmingham 3
+birmingham buffalo 3
+buffalo birmingham 3
+buffalo thousand_oaks 4
+buffalo thousand_oaks 4
+buffalo birmingham 3
+buffalo thousand_oaks 4
diff --git a/codejam_2008/src/y2008beta/a.rs b/codejam_2008/src/y2008beta/a.rs
index cee4df8..6084988 100644
--- a/codejam_2008/src/y2008beta/a.rs
+++ b/codejam_2008/src/y2008beta/a.rs
@@ -1,4 +1,3 @@
-//use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
 use std::io::Write;
 
diff --git a/codejam_2008/src/y2008beta/b.rs b/codejam_2008/src/y2008beta/b.rs
index 8722a3b..a932132 100644
--- a/codejam_2008/src/y2008beta/b.rs
+++ b/codejam_2008/src/y2008beta/b.rs
@@ -4,7 +4,8 @@ use std::io::Write;
 use superslice::*;
 
 /*
-Triangles
+Order
+Lower bound
 */
 pub fn solve_all_cases()
 {
@@ -32,14 +33,17 @@ pub fn solve_all_cases()
 
 fn lis(xs: &Vec<u8>) -> usize
 {
+
     let mut lis = Vec::new();
 
-    for i in 0..xs.len() {
-        let it = lis.lower_bound(&xs[i]);
+    for price in xs.iter() {
+        //Returns the index i pointing to the first element in the ordered slice that is not less than x.
+        let it = lis.lower_bound(price);
         if it >= lis.len() {
-            lis.push(xs[i]);
+            lis.push(*price);
         } else {
-            lis[it] = xs[i];
+            assert!( lis[it] >= *price);
+            lis[it] = *price;
         }
     }
 
@@ -61,22 +65,14 @@ fn solve(products: Vec<String>, prices: Vec<u8>) -> String
             .iter()
             .position(|non_sorted_product| non_sorted_product == sorted_product).expect("Should exist");
 
-        let mut xsp = Vec::new();
-        let mut psp = Vec::new();
-
-        xsp.extend_from_slice(&prices[0..non_sorted_index]);
-        xsp.extend_from_slice(&prices[non_sorted_index + 1..]);
+        let mut prices_without_p = Vec::new();
 
-        for k in 0..products.len() {
-            if k == non_sorted_index {
-                continue;
-            }
-            psp.push(products[k].clone());
-        }
+        prices_without_p.extend_from_slice(&prices[0..non_sorted_index]);
+        prices_without_p.extend_from_slice(&prices[non_sorted_index + 1..]);
 
-        if lis(&prices) == lis(&xsp) {
-            prices = xsp;
-            products = psp;
+        if lis(&prices) == lis(&prices_without_p) {
+            prices = prices_without_p;
+            products.remove(non_sorted_index);
             ret.push(sorted_product.clone());
         }
     }
diff --git a/codejam_2008/src/y2008beta/c.rs b/codejam_2008/src/y2008beta/c.rs
new file mode 100644
index 0000000..e40eebc
--- /dev/null
+++ b/codejam_2008/src/y2008beta/c.rs
@@ -0,0 +1,53 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use itertools::Itertools;
+
+
+/*
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008beta",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let line1 = reader.read_string_line();
+                let num_roads: u8 = line1[0].parse().unwrap();
+                let starting_city = line1[1].clone();
+
+                let roads: Vec<(String, String, u32)> = (0..num_roads).map(|_| {
+                    let line = reader.read_string_line();
+                    assert_eq!(3, line.len());
+                    (line[0].clone(), line[1].clone(), line[2].parse().unwrap())
+                }).collect();
+
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(
+                        starting_city,
+                        &roads
+                    ).iter().map(|f| format!("{:.7}", f) ).join(" ")
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+
+fn solve(starting_city: String, roads: &[(String, String, u32)]) -> Vec<f64>
+{
+    vec![3.2, 1.9]
+}

From ad9fa253934af4ecfb489e9582522577963bbca5 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 17 Feb 2019 21:58:26 -0300
Subject: [PATCH 021/122] c

---
 codejam_2008/src/main.rs                      |   3 +-
 .../src/y2008beta/C-large-practice.out        | 100 +++++++++
 .../src/y2008beta/C-small-practice.out        | 100 +++++++++
 codejam_2008/src/y2008beta/a.rs               |   7 +-
 codejam_2008/src/y2008beta/b.rs               |   6 +-
 codejam_2008/src/y2008beta/c.rs               | 212 ++++++++++++++++--
 codejam_2008/src/y2008qual/b.rs               |   2 +-
 7 files changed, 405 insertions(+), 25 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008beta/C-small-practice.out

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index bdea118..239a8be 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -58,7 +58,6 @@ pub fn run_y2008_round2()
 
 fn main()
 {
-    y2008beta::c::solve_all_cases();
-
     init_log();
+    y2008beta::c::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008beta/C-large-practice.out b/codejam_2008/src/y2008beta/C-large-practice.out
new file mode 100644
index 0000000..2fad583
--- /dev/null
+++ b/codejam_2008/src/y2008beta/C-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0.0225803 0.0453371 0.0312439 0.0225803 0.0909091 0.0311214 0.2570006 0.1713337 0.0225803 0.2133424 0.0311214 0.0018817 0.0084676 0.2133424 0.0028225 0.0518690 0.1330031 0.1818182 0.0312439 0.0018817 0.0028225 0.1330031 0.0225803 0.0909091 0.0453371 0.0028225 0.0312439 0.0606061 0.0028225 0.0225803 0.0225803 0.0225803 0.0937316 0.0002349 0.0518690 0.0937316 0.0311214 0.2133424 0.0518690 0.0606061 0.0606061
+Case #2: 0.2378524 0.0091524 0.0381653 0.2378524 0.1428571 0.1482661 0.2875142 0.0097493 0.0714286 0.1175731 0.1377297 0.0034602 0.0027855 0.0171569 0.0714286 0.0322129 0.0451245 0.0602340 0.0381653 0.0183048 0.2378524 0.0509684 0.0171569 0.0113693 0.0034602 0.0227385 0.0269402 0.0169895 0.1807021 0.0096695 0.0216872 0.1307747 0.0076678 0.1549396 0.0602340 0.0714286 0.1807021 0.1377297 0.1807021 0.0097493 0.1807021 0.2875142 0.0034602 0.2875142 0.1482661
+Case #3: 0.0034632 0.0477855 0.0251082 0.0270525 0.0863688 0.0839161 0.0215922 0.0678959 0.0093240 0.0034632 0.0270525 0.0090175 0.0287896 0.2622191 0.0909091 0.0287896 0.0034632 0.0639731 0.2622191 0.0270525 0.0251082 0.0678959 0.0270525 0.0747086 0.0215922 0.0678959 0.0678959 0.0215922 0.0090175 0.0046620 0.0477855 0.0270525 0.0675991 0.2622191 0.0164502 0.0034632 0.0090175 0.0134680 0.2241257 0.0134680 0.0090175 0.0069930 0.0103896 0.0093240
+Case #4: 0.0061983 0.1008670 0.0573651 0.0247934 0.0454545 0.0454545 0.1479015 0.0534759 0.0454545 0.0061983 0.0956085 0.0739507 0.0645762 0.0247934 0.1479015 0.1600389 0.0382434 0.1066926 0.3587992 0.0641711 0.0739507 0.0053476 0.3587992 0.0247934 0.1008670 0.0267380 0.1291525 0.0320856 0.0645762 0.0382434 0.0041322 0.0454545
+Case #5: 0.0413318 0.0769231 0.0384615 0.1538462 0.0715739 0.0715739 0.0231013 0.0469419 0.0023310 0.0214052 0.1115993 0.1136625 0.1115993 0.0763490 0.1384859 0.0757750 0.0693038 0.0715739 0.2347093 0.0384615 0.1115993 0.9070208 0.0093240 0.1115993 0.1115993 0.2354573 0.0231013 0.0057753 0.0715739 0.0256410 0.0256410 0.0023310 0.0116550 0.0693038 0.2347093 0.0763490
+Case #6: 0.1161683 0.0822757 0.0656021 0.0256007 0.1638464 0.0256007 0.0233262 0.0580842 0.0328511 0.1638464 0.0256007 0.0357143 0.0822757 0.0292761 0.0580842 0.0030139 0.0233262 0.0410013 0.0408208 0.1441508 0.0027125 0.0420206 0.1024664 0.0416348 0.0583155 0.1742525 0.0286478 0.1007216 0.0011459 0.0576015 0.0328511 0.0128003 0.1470722 0.0065602 0.0357143 0.0822757 0.0133435 0.1007216 0.0333588 0.0210103 0.0640017 0.0448012 0.0656021 0.0533741 0.1441508
+Case #7: 0.0096953 0.1046344 0.0481523 0.1255172 0.0041280 0.0594847 0.2216475 0.7909493 0.0451128 0.2002172 0.0567595 0.0255499 0.0096953 0.2299494 0.1417837 0.0166205 0.1712706 0.1021997 0.0491195 0.0075188 0.0054577 0.0033758 0.0263158 0.0041280 0.2002172 0.0044793 0.2379390 0.0166205 0.0263158 0.0231447 0.2002172 0.0526316 0.0443756 0.5446033 0.0764081 0.2002172 0.1773180 0.1046344 0.0672650 0.2239022
+Case #8: 0.0256410 0.0024814 0.1377171 0.1377171 0.0406948 0.0248139 0.0203474 0.0223325 0.1102840 0.0256410 0.0294045 0.0049628 0.2369727 0.0256410 0.1113868 0.0101737 0.0551420 0.0294045 0.0203474 0.0223325 0.2523573 0.0223325 0.1102840 0.1102840 0.1113868 0.1422388 0.1102840 0.2523573 0.0446650 0.0049628 0.0101737 0.0294045 0.1538462 0.0049628 0.0769231 0.0294045
+Case #9: 0.0753200 0.2889803 0.2196970 0.0128205 0.0769231 0.0283114 0.0769231 0.1514725 0.1182984 0.0283114 0.0757362 0.0054945 0.2580091 0.0337995 0.0769231 0.2889803 0.1390404 0.0714286 0.0753200 0.2548029 0.0283114 0.0769231 0.1514725 0.1514725 0.0737169 0.1410256 0.0283114
+Case #10: 0.0065492 0.0009356 0.0380867 0.0167087 0.1995842 0.0211223 0.0495871 0.0971226 0.1424465 0.1099744 0.0311850 0.0784005 0.0775583 0.0028068 0.0013736 0.0102435 0.0065492 0.1099744 0.0769231 0.2856503 0.0102435 0.0495871 0.0390921 0.2270965 0.0571301 0.0971226 0.0457380 0.1790077 0.1649616 0.0728022 0.1176007 0.0064748 0.1790077 0.2270965 0.1790077 0.0380867 0.0027473 0.2744017 0.1176007
+Case #11: 0.0746786 0.0746786 0.1123737 0.1188705 0.0808081 0.0151515 0.0181818 0.0674242 0.0168503 0.1188705 0.0674242 0.0746786 0.0224747 0.0909091 0.0128788 0.0168503 0.0181818 0.0757576 0.0674242 0.0181818 0.0181818 0.0505510 0.0909091 0.0101010 0.0472222 0.0746786 0.0168503 0.0181818 0.0746786 0.1453857 0.0842516 0.0472222 0.1188705 0.0643939
+Case #12: 0.0796734 0.0761323 0.1020976 0.1062312 0.0843245 0.0044643 0.0306293 0.0306293 0.2149000 0.0720079 0.0306293 0.0843245 0.0171958 0.1666566 0.0610119 0.0571429 0.0540059 0.2324599 0.0152566 0.1123073 0.0010402 0.0326351 0.0350230 0.0843245 0.0326351 0.0079598 0.0408390 0.0551318 0.0228397 0.0306293 0.0079598 0.2149000 0.0540059 0.0059524 0.0796734 0.0714286 0.2149000 0.0121944 0.0180020 0.0542328 0.0843245 0.0103477 0.0142857 0.0408390
+Case #13: 0.3370408 0.0015578 0.0080012 0.0207126 0.0517814 0.0718879 0.0404340 0.0808679 0.0817901 0.0128019 0.0212963 0.1068125 0.0184159 0.0011574 0.0718879 0.0240036 0.0212963 0.0031155 0.0073664 0.0828502 0.0287552 0.0287552 0.0685418 0.1550046 0.0101852 0.0451753 0.0287552 0.0002315 0.2030588 0.0240036 0.0451753 0.0833333 0.0015578 0.0404340 0.0240036 0.1550046 0.0808679 0.0404340 0.0080012 0.0212963 0.0404340 0.1150206 0.3370408 0.0015432 0.0464070 0.0775023 0.0011574 0.0067130 0.0718879 0.0294655
+Case #14: 0.0184260 0.0468750 0.0200893 0.0340510 0.1422588 0.0114087 0.0681020 0.0228175 0.0767097 0.1337751 0.0625000 0.0476190 0.5352772 0.0767097 0.0048077 0.0669643 0.1422588 0.0737041 0.0022321 0.0114087 0.1105561 0.0342262 0.3864677 0.1337751 0.0078125 0.0200893 0.0114087 0.0079365 0.1422588 0.0873016 0.0048077 0.0114087 0.0022321 0.0340510 0.0078125 0.0401786 0.0528846 0.0401786 0.9126767
+Case #15: 0.0375180 0.4368908 0.1133025 0.1116939 0.1365001 0.0266955 0.1018842 0.0078000 0.0078000 0.1133025 0.1133025 0.2460542 0.0031913 0.2460542 0.0291098 0.0909091 0.0375180 0.0266955 0.2274092 0.1133025 0.4368908 0.1230271 0.1018842 0.1365001 0.0266955 0.0510601 0.2460542 0.0266955 0.1133025
+Case #16: 0.1135531 0.0384615 0.0128205 0.0076923 0.1252747 0.0205128 0.0205128 0.0769231 0.0109890 0.0769231 0.0230769 0.2175824 0.0417582 0.1315018 0.0461538 0.0879121 0.0417582 0.0384615 0.0128205 0.0384615 0.0109890 0.2252747 0.1135531 0.0205128 0.0128205 0.0205128 0.0205128 0.1135531 0.0205128 0.0549451
+Case #17: 0.0437236 0.0073260 0.0340598 0.0832372 0.0029304 0.0102564 0.0437236 0.0263862 0.0530854 0.0860947 0.2773295 0.0783344 0.0791586 0.0791586 0.0007326 0.0263862 0.0110595 0.0437236 0.2773295 0.0614962 0.0261115 0.0199634 0.0261115 0.3315631 0.0791586 0.0277457 0.0680473 0.0088757 0.0791586 0.0425748 0.0598901 0.0508735 0.2773295 0.1192093 0.0769231 0.0175824 0.0145745 0.0380952
+Case #18: 0.0657651 0.0736607 0.0138889 0.1156240 0.0781250 0.0508092 0.0297619 0.0736607 0.1016184 0.4239136 0.1156240 0.0052083 0.1315301 0.1111111 0.1156240 0.0297619 0.0277778 0.2240060 0.0294118 0.0277778 0.0736607 0.0119048 0.1315301 0.0294118 0.1388889 0.0245098 0.1524276 0.0119048 0.2240060 0.0138889
+Case #19: 0.0185185 0.0427350 0.0387057 0.0387057 0.0387057 0.0799756 0.0317460 0.0158730 0.0542328 0.0799756 0.0455840 0.0455840 0.0455840 0.0542328 0.0740741 0.1111111 0.0455840 0.0158730 0.0512821 0.0396825 0.0170940 0.0455840 0.0455840 0.0079365 0.0542328 0.5090558 0.0387057 0.0185185 0.0542328 0.0387057
+Case #20: 0.0407240 0.0519298 0.0727273 0.5315123 0.0047022 0.0519298 0.0069930 0.0393561 0.0240897 0.0488688 0.0823768 0.0237762 0.0481794 0.0393561 0.0409091 0.0519298 0.0363636 0.0909091 0.0519298 0.0823768 0.0481794 0.1227273 0.0047022 0.0393561 0.0393561 0.0237762 0.0080299 0.0407240 0.0393561 0.0401495 0.0407524 0.0401495 0.0823768 0.0407524 0.0081448 0.0181818 0.0519298 0.0393561
+Case #21: 0.1844989 0.0666667 0.0666667 0.0666667 0.0282052 0.0329897 0.0674064 0.1128208 0.0459459 0.0329897 0.0461247 0.0027027 0.0461247 0.1687383 0.1128208 0.0444444 0.0666667 0.1555556 0.1126477 0.0666667 0.0666667 0.1687383 0.0378378 0.0984615 0.0108108 0.0385179 0.1687383 0.0459459 0.0461247 0.0385179 0.0108108 0.2659338 0.0459459 0.1687383 0.0282052 0.0461247 0.0140810 0.0674064 0.1128208 0.1126477 0.0348718 0.0006873 0.0192590
+Case #22: 0.0828543 0.0458847 0.0121704 0.0917693 0.1006475 0.0481704 0.0032086 0.0031271 0.0265803 0.0556150 0.0199467 0.0751716 0.0875587 0.6734668 0.0060852 0.1954463 0.0294118 0.0150971 0.0480401 0.0106531 0.0288241 0.1006475 0.0179801 0.1161180 0.0300687 0.0464472 0.0476370 0.1657085 0.0398934 0.0199467 0.0232236 0.0179801 0.3860919 0.0779326 0.0359603 0.0405680 0.0398934 0.0359616 0.0359603 0.0288241 0.1575687 0.0576481 0.1657085 0.0294118 0.3860919 0.1161180 0.0093813 0.0275056
+Case #23: 0.3781975 0.1811622 0.0233688 0.1811622 0.0239526 0.0429545 0.0418182 0.0467376 0.0233688 0.0079842 0.0145455 0.0250000 0.0467376 0.0233688 0.0250000 0.0286364 0.0250000 0.0250000 0.0467376 0.0467376 0.0239526 0.0429545 0.0859223 0.1000000 0.0859223 0.0239526 0.0859223 0.1037945 0.0418182 0.1735558 0.0467376 0.0018182
+Case #24: 0.2042704 0.0102767 0.1548294 0.0700667 0.0450593 0.0909091 0.0195194 0.0102767 0.0102767 0.0053897 0.0195194 0.0861554 0.0255338 0.0510676 0.4975027 0.0053897 0.0431180 0.0107795 0.0430777 0.0195194 0.0861554 0.0063241 0.3422782 0.0195194 0.0107795 0.0510676 0.0107795 0.0700667 0.0014094 0.0700667 0.0086957 0.0097597 0.1827576 0.0195194 0.0053897 0.1827576 0.0014094 0.1548294 0.0861554 0.0401691 0.0077519 0.0053897 0.0430777 0.0401691
+Case #25: 0.1669676 0.0206856 0.0291667 0.0515873 0.0700010 0.1374515 0.1457425 0.0700010 0.0145743 0.0023810 0.1425675 0.0288952 0.0392719 0.1669676 0.1767234 0.1479839 0.1669676 0.0384161 0.0091979 0.0833333 0.0277778 0.0541667 0.0986559 0.0866856 0.0245004 0.2041603 0.2041603 0.0118203 0.0392719 0.0866856 0.0986559 0.0245004 0.0091979 0.0145743 0.0005910 0.0245004 0.0118203 0.0015873 0.0105002 0.0510099 0.0288952 0.0288952 0.0035001
+Case #26: 0.1611011 0.0966606 0.0144558 0.0311355 0.1611011 0.0076531 0.0966606 0.0950134 0.0243555 0.0714286 0.0950134 0.0908010 0.4195464 0.0714286 0.0035714 0.0311355 0.0722789 0.0107143 0.0091575 0.0950134 0.0894558 0.0950134 0.0243555 0.4140440 0.0153061 0.0714286 0.0678571 0.0484694 0.0950134 0.0322202 0.0908010 0.0908010 0.2035714
+Case #27: 0.0129870 0.0140450 0.0181818 0.0296846 0.0018553 0.0736364 0.1041270 0.0199199 0.2874239 0.0066400 0.0199199 0.0650794 0.0199199 0.2874239 0.2874239 0.0654545 0.0650794 0.1546815 0.0421351 0.0140450 0.0421351 0.0199199 0.0199199 0.0421351 0.0185529 0.1292888 0.1455226 0.0140450 0.1292888 0.0485075 0.0055659 0.0779221 0.0199199 0.0421351 0.0140450 0.1031210 0.0072727 0.0245455 0.0352505
+Case #28: 0.2214238 0.1250000 0.0047187 0.0094373 0.1046262 0.1569393 0.1050110 0.0087509 0.2214238 0.1305975 0.1050110 0.1569393 0.0523131 0.0555556 0.1462785 0.0141560 0.1569393 0.0141560 0.1305975 0.0175018 0.0138889 0.0087509 0.1203704 0.2214238 0.0046296 0.0555556 0.0566239 0.0262528
+Case #29: 0.0714286 0.0016828 0.0593363 0.0036496 0.0514251 0.0641293 0.1074263 0.0706783 0.2159519 0.0384559 0.0508187 0.0118577 0.3222788 0.1902387 0.2159519 0.2332220 0.0285244 0.2695123 0.2695123 0.0706783 0.0889689 0.0117797 0.0085709 0.0514251 0.1441023 0.0085709 0.0047541 0.0036496 0.0012244 0.0521673 0.0714286 0.0012244 0.3222788 0.1441023 0.0925508 0.2695123 0.0933929 0.0087521 0.0384559 0.0379566 0.0084766
+Case #30: 0.0714286 0.0021008 0.0084034 0.0059524 0.0021008 0.0021008 0.0084034 0.0231092 0.0231092 0.0231092 0.0353960 0.0231092 0.0714286 0.0654762 0.0714286 0.4041571 0.0353960 0.1415839 0.1107079 0.0021008 0.1107079 0.1415839 0.0059524 0.0231092 0.0714286 0.1107079 0.1107079 0.0654762 0.0353960 0.0021008
+Case #31: 0.0060606 0.0463034 0.0971807 0.0184097 0.0334928 0.0308690 0.0971807 0.0723004 0.2393256 0.1446008 0.0424242 0.0361502 0.0611720 0.0723004 0.0741627 0.0361502 0.1093188 0.0393939 0.0971807 0.0463034 0.0741627 0.0909091 0.1875215 0.1223440 0.0361502 0.0971807 0.0077172 0.0723004 0.1003241 0.0030303 0.0909091 0.1875215 0.0077172
+Case #32: 0.1197679 0.3146567 0.0278167 0.0952316 0.0662435 0.0714355 0.1353249 0.0676625 0.0772003 0.0033706 0.0063492 0.0298103 0.0012469 0.1071667 0.1071667 0.0194849 0.0101152 0.0286458 0.1985580 0.0043573 0.0031746 0.0359477 0.0269097 0.0097424 0.3718301 0.1071667 0.0050576 0.1921262 0.1353249 0.0049876 0.1353249 0.0523810 0.0714355 0.3809264 0.3718301 0.0134825 0.0278167 0.0257453 0.0492063 0.0910848 0.0275689 0.0194849 0.0278678 0.0676625 0.0476158 0.0773077 0.0279866 0.0034835 0.0152505
+Case #33: 0.0017567 0.1169141 0.0318157 0.0274783 0.0220293 0.0912921 0.0548932 0.0636314 0.0110294 0.0299370 0.0178571 0.0178571 0.0881174 0.0300133 0.0548932 0.0636314 0.0300133 0.0600267 0.1169141 0.0548932 0.0220293 0.0318157 0.1001340 0.0535714 0.1648698 0.0220293 0.0660880 0.0548932 0.0178571 0.0329670 0.0150067 0.0304622 0.0384615 0.0660880 0.0035351 0.1169141 0.0912921 0.0440587 0.1375166 0.0660880 0.0070702 0.0178571 0.0824580 0.0178571
+Case #34: 0.0034965 0.0439774 0.0450365 0.0510971 0.0439774 0.0439774 0.0559441 0.0233582 0.0696970 0.0439774 0.0348485 0.0934327 0.0439774 0.0054677 0.0484848 0.0060606 0.0450365 0.0874835 0.1167908 0.0439774 0.0139860 0.0510971 0.0510971 0.0328063 0.0510971 0.0909091 0.0015152 0.0450365 0.0696970 0.4428854 0.0450365 0.1401490 0.0174825 0.0450365 0.4180627
+Case #35: 0.0081633 0.0367347 0.0279503 0.0262225 0.0367347 0.0279503 0.1612393 0.1612393 0.1612393 0.1826186 0.1071429 0.0020408 0.0279503 0.1612393 0.0059524 0.0059524 0.0279503 0.2032954 0.0155280 0.0456546 0.0262225 0.1048901 0.0020408 0.0155280 0.0238095 0.1826186 0.0262225 0.0456546 0.2622252 0.0367347 0.0262225 0.0204082
+Case #36: 0.0141774 0.1250000 0.1232081 0.0203704 0.0425323 0.0203704 0.0203704 0.2995726 0.0425323 0.2995726 0.0038660 0.0038660 0.0038660 0.0425323 0.2500000 0.0038660 0.0425323 0.0410694 0.0090206 0.0203704 0.0203704 0.0009259 0.0064815 0.0625000 0.1232081 0.0425323 0.0012887 0.0625000 0.0064815 0.2995726 0.0064815 0.0141774 0.0012887 0.0141774 0.0090206 0.0141774 0.0283505 0.0283505 0.0027778 0.0038660 0.0283505 0.0425323
+Case #37: 0.2084707 0.0651341 0.0810998 0.2553343 0.0317460 0.0202750 0.0063715 0.0069444 0.0238095 0.3446743 0.2701242 0.0780511 0.0821230 0.1717425 0.1413055 0.2701242 0.0085470 0.0288671 0.0153257 0.0277778 0.0470085 0.0555556 0.0694902 0.0078065 0.0822440 0.1933551 0.1094974 0.1094974 0.0821230 0.0851114 0.0153257 0.0555556 0.0821230 0.0266885 0.0312259 0.2701242 0.1717425 0.0208333 0.0555556 0.0153257
+Case #38: 0.0023223 0.0108373 0.0339748 0.0184212 0.0055360 0.0085150 0.1221915 0.1710750 0.0401917 0.0033493 0.0304363 0.0332160 0.1504194 0.0184212 0.1221915 0.4131954 0.0083733 0.0443104 0.0505259 0.1419405 0.1419405 0.1868612 0.0276800 0.0505259 0.0666667 0.4131954 0.0110720 0.0017391 0.1868612 0.2207939 0.0608726 0.0313374 0.0188024 0.0023223 0.0029700 0.0937807 0.0709702 0.0786956 0.0273535 0.1221915 0.0636966 0.0239886 0.0003256 0.0008696 0.2649527 0.0937807 0.0937807 0.0640580 0.1504194
+Case #39: 0.0312500 0.0288462 0.0306873 0.0188508 0.1376045 0.0358019 0.0113636 0.1376045 0.0037879 0.0813508 0.0754033 0.0433583 0.1592784 0.0806303 0.0433583 0.0100788 0.0306873 0.0312500 0.0190217 0.1376045 0.0151515 0.0151515 0.0113636 0.0625000 0.0306873 0.0867167 0.0336538 0.1359224 0.0244565 0.0018939 0.0604727 0.1592784 0.0511364 0.0486111 0.0190217 0.0188508 0.0102291 0.0604727 0.0075758 0.3106465 0.1376045 0.0138889 0.0075758 0.1553232 0.0188508
+Case #40: 0.0187983 0.0256410 0.1667226 0.0187983 0.0314942 0.0144231 0.0256410 0.0314942 0.1389270 0.0463090 0.0463090 0.0160256 0.0079365 0.0187983 0.0314942 0.8896444 0.1799349 0.1362179 0.0016026 0.0793651 0.0079365 0.0314942 0.1089744 0.0314942 0.0463090 0.1127900 0.0314942 0.0944826 0.0817308 0.1055810 0.0314942 0.1055810 0.0833333 0.1055810 0.0714286
+Case #41: 0.0754268 0.0117371 0.0037751 0.0339761 0.0013774 0.1752957 0.0068871 0.0833333 0.0013774 0.0455933 0.0567376 0.0202637 0.0151005 0.0367641 0.0265957 0.0037751 0.0176056 0.1177539 0.0105634 0.0371901 0.0562301 0.0220386 0.0117371 0.0202637 0.0377512 0.1508536 0.1508536 0.1968054 0.0339761 0.0117371 0.0006887 0.0367641 0.4453016 0.0101318 0.0202637 0.1508536 0.0006887 0.0082160 0.0027548 0.0455933 0.0103306 0.0117371 0.0500845 0.1177539 0.0250422 0.4453016 0.0377512 0.0377512 0.0643371
+Case #42: 0.0208333 0.0208333 0.0208333 0.0208333 0.0208333 0.0625000 0.0312500 0.0625000 0.0156250 0.0208333 0.0156250 0.0208333 0.0156250 0.0208333 0.0156250 0.0625000 0.0208333 0.0156250 0.1250000 0.0156250 0.0416667 0.0625000 0.0208333 0.0312500 0.0156250 0.0312500 0.0312500 0.0156250 0.0208333 0.0208333 0.0416667 0.0416667
+Case #43: 0.0039960 0.0592396 0.1305276 0.0384615 0.0035367 0.0309690 0.0299731 0.0081291 0.0299731 0.0769231 0.0630006 0.0299731 0.5474611 0.0009990 0.0099900 0.1305276 0.2658315 0.1305276 0.0299731 0.1653801 0.0309690 0.0441014 0.0441014 0.0299731 0.0070734 0.0020323 0.0299731 0.0299731 0.0769231 0.0384615 0.0851270 0.2128175 0.0035367 0.1305276 0.0882027 0.0299731 0.0630006 0.0299731 0.0035367 0.0212817 0.0860996 0.0860996 0.0299731
+Case #44: 0.0238095 0.2993274 0.0661322 0.0220238 0.0132264 0.0132264 0.0404496 0.0142857 0.0251701 0.0048924 0.0404496 0.0459883 0.0661322 0.0238095 0.0525085 0.0105017 0.0661322 0.0714286 0.4385770 0.0125000 0.0965986 0.0661322 0.0029762 0.0301871 0.1783234 0.1174168 0.0661322 0.0661322 0.1783234 0.1174168 0.0142857 0.1783234 0.0525085 0.0029762 0.0919765 0.0661322 0.0714286 0.0034014 0.1783234 0.0142857 0.0238095 0.1783234 0.0525085 0.0029762 0.6070245 0.0279762
+Case #45: 0.1608919 0.0097510 0.0815348 0.1350390 0.0822471 0.4649337 0.0416667 0.1227823 0.0343602 0.0025253 0.0208537 0.0052134 0.1030805 0.1350390 0.0902604 0.0025253 0.1146953 0.0343602 0.0156403 0.0052134 0.1350390 0.0902604 0.3289886 0.0416667 0.0416667 0.0343602 0.0822471 0.1227823 0.1096629 0.1227823 0.0902604 0.0416667 0.0017986 0.0343602 0.0343602 0.0902604 0.0782828 0.1608919 0.1374406
+Case #46: 0.1282051 0.0940171 0.0719780 0.0480769 0.0769231 0.0719780 0.2684676 0.1146215 0.0109890 0.1324481 0.0256410 0.0085470 0.0192308 0.1585165 0.0085470 0.0940171 0.0769231 0.1585165 0.0085470 0.0940171 0.0096154 0.0359890 0.0769231 0.0549451 0.0256410 0.0109890
+Case #47: 0.1799320 0.0299320 0.0484127 0.0079365 0.1799320 0.1799320 0.0079365 0.0126984 0.0079365 0.0484127 0.0079365 0.0299320 0.1197279 0.0507937 0.0484127 0.1682540 0.0222222 0.0079365 0.0222222 0.0299320 0.0317460 0.7883220 0.0222222 0.1799320 0.0317460 0.0484127 0.0317460 0.0126984 0.0079365
+Case #48: 0.2678001 0.0119048 0.1757887 0.0503079 0.1238095 0.1428571 0.0581781 0.2678001 0.1006159 0.0252101 0.0210084 0.0503079 0.0095238 0.0676692 0.1314700 0.0252101 0.1090839 0.4776004 0.1006159 0.0214286 0.0714286 0.0273810 0.0011905 0.0714286 0.0503079 0.0684524 0.0234385 0.0037594 0.1314700 0.0029762 0.0309524 0.4776004 0.0117192 0.0251540
+Case #49: 0.0180915 0.0036183 0.0859698 0.0500000 0.1180915 0.0713568 0.0180915 0.1000000 0.0500000 0.0859698 0.0859698 0.2045765 0.1901287 0.0217098 0.1901287 0.0060241 0.1891401 0.1901287 0.0060302 0.0217098 0.0453936 0.0378280 0.0855422 0.0859698 0.0904574 0.0180915 0.0859698 0.0180915 0.0251256 0.0036183 0.0409153 0.0217098 0.0217098 0.0361809 0.0251256 0.0361809 0.0012048 0.1901287 0.0072289 0.1901287
+Case #50: 0.0411483 0.1799856 0.0158263 0.1892193 0.0038278 0.0473048 0.0525806 0.0362224 0.0202020 0.0158263 0.0739853 0.2215428 0.2085041 0.0158263 0.0411483 0.0158263 0.0158263 0.0042882 0.0067259 0.0368782 0.1448894 0.0094340 0.0040486 0.1448894 0.0105161 0.0202020 0.0042882 0.0420645 0.0040486 0.0105161 0.0202020 0.0094340 0.0018403 0.1799856 0.0265866 0.1156773 0.0003681 0.1799856 0.0420645 0.0047847 0.0050505 0.0362224 0.0252525 0.0525806 0.0909091 0.0362224 0.0014722 0.1799856
+Case #51: 0.1022887 0.0294852 0.3381111 0.1086237 0.0073529 0.3048269 0.2252103 0.0124081 0.3783518 0.0022624 0.1081123 0.0294852 0.1022887 0.0294852 0.0247157 0.0041360 0.0460030 0.0247157 0.0514706 0.0099117 0.3381111 0.0049558 0.1891759 0.1086237 0.0041360 0.0890888 0.0294852 0.0247157 0.0588235 0.0761540 0.1013896 0.0105581 0.0084509 0.0045299 0.0294852 0.0543118 0.0211273 0.1985964 0.0545141 0.1704811 0.0211273 0.0045299 0.0034369 0.1297925 0.0082386 0.0709690 0.1081123 0.0454963
+Case #52: 0.3766380 0.1560590 0.0440341 0.0070936 0.0319793 0.0777079 0.0159896 0.0591156 0.0108202 0.0111317 0.0804559 0.0014205 0.0258737 0.0426136 0.1064300 0.0454545 0.0054101 0.0394021 0.0539036 0.0327696 0.0095137 0.1450959 0.1929275 0.0454545 0.0212808 0.0454545 0.1182063 0.0343228 0.1064300 0.1460724 0.1929275 0.1450959 0.1182063 0.0483653 0.0070936 0.1609119 0.0389610 0.0704545 0.0874352 0.0028409 0.0131340 0.0119230 0.0064935 0.0054101 0.0176136 0.0031712 0.0967306 0.1554158 0.1439067
+Case #53: 0.0253623 0.0478447 0.0478447 0.0416667 0.0036232 0.0915990 0.0555556 0.1113885 0.0166667 0.0833333 0.0457995 0.5072331 0.0083333 0.1391663 0.0416667 0.1410893 0.0915990 0.0253623 0.0239223 0.0217391 0.0583333 0.1113885 0.1391663 0.0277778 0.0448718 0.0384615 0.0072464 0.0239223 0.0915990 0.1410893
+Case #54: 0.1193621 0.0113208 0.1193621 0.1000000 0.2000000 0.0009524 0.0018868 0.0113208 0.0009434 0.0113208 0.0171429 0.0113208 0.1000000 0.0113208 0.0019048 0.0896092 0.0505091 0.0038095 0.0171429 0.0169811 0.1010183 0.0896092 0.0019048 0.0037736 0.0896092 0.1464510 0.0244085 0.0009434 0.0171429 0.4000000 0.0019048 0.0171429 0.0896092 0.0019048 0.0171429 0.0018868 0.0505091 0.0169811 0.1010183 0.0488170 0.0019048
+Case #55: 0.1582191 0.0909091 0.0152362 0.4313139 0.0106653 0.0383951 0.0010157 0.0561199 0.0606061 0.1757431 0.0025394 0.4313139 0.0383951 0.0909091 0.0010157 0.0909091 0.0303030 0.1486034 0.0025394 0.1757431 0.0561199 0.0878715 0.0561199 0.0495345 0.0152362 0.0561199 0.1582191 0.1757431 0.1582191 0.0426612 0.0191976 0.0141527
+Case #56: 0.0528969 0.0925325 0.0168942 0.0046296 0.0579962 0.0508872 0.0350905 0.0181634 0.0091463 0.0337884 0.0168942 0.0508872 0.0292553 0.1997976 0.2281146 0.1158537 0.0644040 0.0508872 0.0625000 0.0726537 0.0337884 0.0337884 0.0427715 0.0937500 0.0528969 0.0508872 0.3510689 0.0386641 0.0292553 0.0039894 0.0254436 0.0508872 0.0254436 0.0509259 0.0069444 0.0254436 0.0508872 0.0312500 0.0175452 0.1288081 0.3286452 0.0312500 0.0413961 0.0535714 0.0508872 0.0526357 0.3510689
+Case #57: 0.0037594 0.1644292 0.0023810 0.1090114 0.0285596 0.0891929 0.0648676 0.1354988 0.0417294 0.0154440 0.0417294 0.0208647 0.0231084 0.1644292 0.0193570 0.0095238 0.0024926 0.0234962 0.0146020 0.0146020 0.0009398 0.0231084 0.0652791 0.0407995 0.0405422 0.0432331 0.0081599 0.0482625 0.0081084 0.0387139 0.1460528 0.0417294 0.0231084 0.0407995 0.0146020 0.1090114 0.0560845 0.0560845 0.0417294 0.0077220 0.0231084 0.0595238 0.2882071 0.1713474 0.1168156 0.0545057 0.2882071 0.1090114
+Case #58: 0.0904931 0.0904931 0.2003232 0.2246860 0.0769231 0.0904931 0.0048077 0.2003232 0.0384615 0.0625000 0.1321598 0.0904931 0.0904931 0.1321598 0.0904931 0.0138889 0.2246860 0.0012755 0.0612245 0.0012755 0.0904931 0.1111111 0.0612245 0.1321598 0.0048077 0.0904931 0.2003232 0.0625000
+Case #59: 0.1666667 0.0666667 0.1793651 0.0166667 0.0238095 0.0208333 0.0833333 0.0111111 0.0166667 0.0357143 0.1000000 0.2787698 0.0166667 0.2787698 0.0111111 0.0055556 0.1000000 0.0055556 0.0208333 0.0416667 0.0333333 0.1000000 0.0896825 0.1000000 0.0833333 0.0238095 0.0500000 0.0833333
+Case #60: 0.0017249 0.1354716 0.0151741 0.0075524 0.0148718 0.1354716 0.0476190 0.0396737 0.0758705 0.0666667 0.0151741 0.0040238 0.2679067 0.0758705 0.0086247 0.1786045 0.0444444 0.0371096 0.0333333 0.0758705 0.0151741 0.0371096 0.0396737 0.0282051 0.0201190 0.1354716 0.1543816 0.0117949 0.0051748 0.1543816 0.0190476 0.0925472 0.0037762 0.0222222 0.0758705 0.0868531 0.0117949 0.0351515 0.0315152 0.1048149 0.0333333 0.0666667
+Case #61: 0.0350000 0.0396091 0.0140175 0.0041152 0.0108025 0.0416667 0.0335297 0.1167718 0.0111766 0.0335297 0.1050000 0.1629433 0.0111766 0.1167718 0.1629433 0.0420525 0.1167718 0.1629433 0.1050000 0.1167718 0.1167718 0.0140175 0.0050000 0.0765175 0.0420525 0.0833333 0.7998949 0.0109311 0.5249490 0.1167718 0.0288066 0.1666667 0.0416667 0.1167718 0.0335297
+Case #62: 0.0373208 0.0548387 0.0277778 0.0137097 0.6291219 0.0548387 0.0277778 0.0268817 0.0277778 0.0733423 0.0268817 0.0416667 0.0559812 0.0559812 0.0215054 0.1076165 0.1141353 0.0222222 0.0538082 0.0538082 0.0166667 0.1141353 0.3253136 0.0137097 0.0416667 0.0733423 0.0733423 0.0080645 0.0833333 0.0444444
+Case #63: 0.0703463 0.1392872 0.1565213 0.0393375 0.1509699 0.0084541 0.0680528 0.0449134 0.0064935 0.2189960 0.0010965 0.0941246 0.0941246 0.0204158 0.0464291 0.1509699 0.0393375 0.0941246 0.0277778 0.0109649 0.1349710 0.2189960 0.0712719 0.0795983 0.2189960 0.0131125 0.1392872 0.0204158 0.0449134 0.0452910 0.0471014 0.0032468 0.0103824 0.0032468 0.1392872 0.1626693
+Case #64: 0.0072464 0.0638889 0.0263158 0.0069444 0.0456558 0.0307018 0.0138889 0.0072464 0.0222222 0.0072464 0.0036232 0.2087188 0.0833333 0.0072464 0.0453216 0.0072464 0.0913116 0.0036232 0.0036232 0.0913116 0.1666667 0.0072464 0.0072464 0.2038398 0.0138889 0.0069444 0.0036232 0.0263158 0.0913116 0.2038398 0.0638889 0.2087188 0.0388889 0.0833333 0.0072464 0.0138889 0.0036232 0.0069444 0.0072464 0.0069444 0.0453216 0.0453216 0.0222222 0.0138889
+Case #65: 0.1795635 0.0635417 0.0833333 0.1210579 0.1267544 0.0208333 0.0108553 0.2232534 0.0208333 0.1210579 0.0395833 0.0208333 0.0108553 0.0833333 0.0179563 0.0208333 0.1229167 0.0437500 0.0542763 0.2261017 0.0635417 0.1795635 0.1210579 0.1210579 0.0542763 0.1210579 0.0108553 0.2232534 0.0542763 0.0108553 0.2261017
+Case #66: 0.0060859 0.0663329 0.0475744 0.0112491 0.0628953 0.0880249 0.0251581 0.0030430 0.1104887 0.1945777 0.0916083 0.1945777 0.0172947 0.1184470 0.0030430 0.0259420 0.0086669 0.0355013 0.0030430 0.2819379 0.0735024 0.0043237 0.1104887 0.0916083 0.0562077 0.0880249 0.0075094 0.0355013 0.0867501 0.4672054 0.1075570 0.0084034 0.0434389 0.0064993 0.0305361 0.1075570 0.0916083 0.0115558 0.0438048 0.0436060 0.0880249 0.1945777 0.0916083 0.0075094 0.0355013 0.1308181 0.0153846 0.0183445 0.0504202
+Case #67: 0.1196480 0.0208333 0.0334724 0.0187952 0.0290550 0.0833333 0.0295181 0.2520028 0.1196480 0.0334724 0.0187952 0.0068866 0.2175706 0.1879520 0.0290550 0.1196480 0.0029055 0.2175706 0.0397085 0.0125301 0.0088353 0.0208333 0.0816049 0.0002008 0.2520028 0.0208333 0.0019370 0.0208333 0.0004016 0.0397085 0.0060241 0.0797653 0.0398827 0.0816049 0.0295181 0.0833333 0.0941174 0.0088353 0.0187952 0.0398827 0.1694850 0.3389700
+Case #68: 0.0720655 0.0106982 0.0502966 0.0481481 0.0633897 0.0106982 0.0111833 0.0481000 0.0058714 0.1782524 0.0170796 0.1056496 0.0211299 0.0508853 0.0508853 0.1782524 0.0376302 0.1155169 0.0211299 0.0555556 0.0037037 0.0606709 0.3465508 0.0328283 0.0555556 0.2138968 0.0555556 0.1782524 0.0667388 0.0604420 0.1056496 0.1155169 0.0097856 0.0252525 0.1056496 0.0252525 0.0411340 0.0093795 0.0037037 0.0050505 0.0096200 0.4515624 0.0555556 0.0170796 0.0502966 0.0021645 0.0633897 0.0211299
+Case #69: 0.2128103 0.0330891 0.0033670 0.0420708 0.0025248 0.0709368 0.0321706 0.0837472 0.0709368 0.0463349 0.0056103 0.1235597 0.0088570 0.0009160 0.0075744 0.0330891 0.0565297 0.0463349 0.0266342 0.0206551 0.1528102 0.0011071 0.2128103 0.0959426 0.1235597 0.0279157 0.0885781 0.0201984 0.0279157 0.2654440 0.0669192 0.1151411 0.0120640 0.0182047 0.0201984 0.0206229 0.0266342 0.0088570 0.0837472 0.0023310 0.0959426 0.0201984 0.1235597 0.0266342 0.2654440 0.1235597 0.2654440
+Case #70: 0.0102381 0.3489927 0.3459982 0.1459158 0.2843956 0.0041667 0.0041667 0.0464286 0.3459982 0.0535714 0.0307143 0.0333333 0.0125000 0.3489927 0.0189560 0.0750000 0.1459158 0.0666667 0.5687912 0.0051190 0.0041667 0.0921429 0.1459158 0.1706044 0.0568681 0.1000000 0.0153571
+Case #71: 0.2686335 0.1135275 0.0683060 0.0148810 0.1135275 0.0065476 0.0103207 0.0297619 0.1840198 0.1241802 0.1135275 0.1352239 0.0273197 0.0516034 0.0103207 0.0068306 0.1840198 0.2686335 0.0076832 0.1840198 0.0065476 0.0013661 0.0297619 0.0005952 0.0029762 0.0273197 0.0768318 0.0516034 0.0065476 0.0076832 0.1840198 0.1007522 0.0029762 0.0833333 0.0124180 0.0833333 0.0537267 0.0327381 0.0205255 0.0607553 0.0516034 0.0327381 0.0273197 0.0068306 0.0020525 0.1840198 0.0005952
+Case #72: 0.0835628 0.0835628 0.0417814 0.0100000 0.0333333 0.0226029 0.0107974 0.0452059 0.0971765 0.3143789 0.0417814 0.0500000 0.0417814 0.0378571 0.0835628 0.0535119 0.0417814 0.1909265 0.3164413 0.1727583 0.0835628 0.0014286 0.0500000 0.0053987 0.0333333 0.0028571 0.0100000 0.0226029 0.0041667 0.3143789 0.1484984 0.0267560 0.0552083 0.0835628 0.2876793 0.0187500 0.0552083 0.0378571 0.0267560
+Case #73: 0.0465563 0.0465563 0.0416667 0.0158730 0.0867542 0.0138889 0.0465563 0.0459770 0.0465563 0.0634921 0.0862069 0.0833333 0.0317460 0.0431034 0.0867542 0.0555556 0.0465563 0.1813310 0.0191571 0.0862069 0.0324074 0.0867542 0.0867542 0.1813310 0.0092593 0.1025132 0.0431034 0.0410053 0.0459770
+Case #74: 0.0493827 0.0104463 0.2716475 0.0104463 0.5117253 0.1346086 0.1186832 0.0367114 0.0379867 0.0021368 0.2716475 0.0367114 0.1582442 0.0854701 0.0123457 0.0104463 0.0379867 0.0235043 0.2716475 0.0489486 0.0037987 0.0493827 0.1346086 0.1705751 0.0052910 0.0529101 0.0529101 0.1111111 0.0489486 0.1582442 0.0489486
+Case #75: 0.0666667 0.0969391 0.0574737 0.0990476 0.0438596 0.0342857 0.0333333 0.0669095 0.1424308 0.0323130 0.0323130 0.0333333 0.0221053 0.0669095 0.0292437 0.0044211 0.0969391 0.0719298 0.3482778 0.1692063 0.2414105 0.0666667 0.0390476 0.0087719 0.1615651 0.0130159 0.0669095 0.0669095 0.0097479 0.0669095 0.1267227 0.0132632 0.1424308 0.1424308 0.0130159 0.0087719 0.0132632 0.0323810 0.0666667 0.0052632
+Case #76: 0.0288462 0.0384615 0.0238095 0.0860806 0.1117216 0.0109890 0.1538462 0.0860806 0.0476190 0.0576923 0.2403846 0.0576923 0.0769231 0.0769231 0.2403846 0.0769231 0.0384615 0.0659341 0.0769231 0.1538462 0.0769231 0.2728938 0.0288462 0.0769231 0.0576923 0.0476190 0.0238095
+Case #77: 0.3247570 0.3247570 0.0421769 0.0054256 0.3247570 0.0390411 0.0686310 0.0226095 0.0504499 0.2103288 0.0162767 0.0359130 0.0643459 0.0779680 0.0614899 0.0149660 0.2633619 0.0643459 0.0609589 0.0031196 0.2034854 0.0137591 0.2103288 0.1060660 0.0054256 0.0387755 0.2103288 0.0108512 0.0614899 0.1077390 0.0678285 0.0040816 0.2034854
+Case #78: 0.0445157 0.0629630 0.1792711 0.2000000 0.1792711 0.3652288 0.0996078 0.0545157 0.0332026 0.0244444 0.0377778 0.2754367 0.1635472 0.0500000 0.0500000 0.0629630 0.0377778 0.4451575 0.1635472 0.0545157 0.0111111 0.0629630 0.1792711 0.0545157 0.0332026 0.0332026 0.0545157 0.1000000
+Case #79: 0.2245493 0.0664053 0.0126898 0.0550239 0.0233100 0.0496423 0.0046620 0.0259740 0.0063449 0.0714286 0.2245493 0.2255639 0.0047847 0.2544808 0.0496423 0.0496423 0.0047847 0.0129870 0.0129870 0.2544808 0.0454545 0.0664053 0.0046620 0.0454545 0.0129870 0.0714286 0.0332026 0.0233100 0.0496423 0.0259740 0.0317246 0.0116550 0.0496423 0.0023923 0.0233100 0.0634491 0.0239234 0.0317246
+Case #80: 0.0072486 0.0293848 0.0353535 0.0579890 0.0528926 0.0049587 0.0336668 0.0507404 0.0144972 0.0314050 0.0897782 0.0909091 0.0897782 0.0325348 0.0027548 0.1149419 0.4121407 0.0050505 0.3538297 0.2060704 0.1724128 0.0016529 0.0217459 0.0072486 0.0976043 0.0507404 0.1724128 0.0650695 0.0101010 0.0217459 0.0293848 0.0909091 0.0404040 0.0325348 0.0293848 0.3538297
+Case #81: 0.0151938 0.1139537 0.0501851 0.0035218 0.0035218 0.0234471 0.0089012 0.0529275 0.1744198 0.1139537 0.0039960 0.0510516 0.1116758 0.0039960 0.0008227 0.0876206 0.0264637 0.0024681 0.0862832 0.0558379 0.0070435 0.0464535 0.0279189 0.1116758 0.0089012 0.0151938 0.0489510 0.1139537 0.0677216 0.0089012 0.0876206 0.1090398 0.1744198 0.0089012 0.1116758 0.0041675 0.0464535 0.1137570 0.1744198 0.0495802 0.0495802 0.0041675 0.0079920 0.1744198 0.0039960 0.0079920
+Case #82: 0.2548009 0.0275953 0.0275953 0.0368500 0.0192652 0.0383598 0.0192652 0.0464592 0.0737001 0.0383598 0.0066138 0.0368500 0.0464592 0.0026882 0.0322581 0.0192652 0.0275953 0.0027595 0.0096326 0.0416667 0.0221857 0.0464592 0.0188172 0.0345466 0.1209132 0.0172733 0.0368500 0.0368500 0.0096326 0.0096326 0.0096326 0.0192652 0.0443715 0.0368500 0.0053763 0.0188172 0.0053763 0.0193167 0.2042465 0.1553001 0.0416667 0.1109668 0.0929184 0.2548009 0.0929184 0.0275953 0.0275953
+Case #83: 0.0288462 0.0883625 0.0226131 0.2013703 0.0226131 0.2438382 0.0288462 0.0059524 0.0072115 0.0024038 0.0288462 0.0535714 0.1250000 0.0059524 0.2438382 0.0056533 0.2438382 0.0059524 0.2013703 0.0226131 0.0226131 0.0056533 0.0883625 0.0288462 0.0883625 0.2013703 0.2500000 0.0006281 0.0883625 0.0535714 0.0226131
+Case #84: 0.0438533 0.2563273 0.0048019 0.0829622 0.2563273 0.0438533 0.0480192 0.0036014 0.0108143 0.0073529 0.0130719 0.0288382 0.0024010 0.0264356 0.1983548 0.2115251 0.0383716 0.0062786 0.0414983 0.0419646 0.2563273 0.0108143 0.0072096 0.0439500 0.0074697 0.2115251 0.0439500 0.0283364 0.0514706 0.0072096 0.0044757 0.0793051 0.0829622 0.0414983 0.0438533 0.0352474 0.0705084 0.0009337 0.0588235 0.0689855 0.0543478 0.0616830 0.0373483 0.0060704 0.0588235 0.0548166 0.0439500 0.0517391 0.0517391 0.1258938
+Case #85: 0.0047004 0.0539218 0.0172840 0.2029120 0.0071429 0.0035088 0.0049383 0.0879721 0.0282021 0.0329025 0.0260870 0.0575606 0.2029120 0.0666667 0.0575606 0.0428571 0.0721417 0.1072464 0.2199139 0.0539218 0.2029120 0.0148148 0.0631579 0.0508088 0.0508088 0.0119048 0.0148148 0.0282021 0.0094007 0.2199139 0.0950988 0.0575606 0.0950988 0.0047004 0.0282021 0.0714286 0.0148148 0.0047004 0.0166667 0.0316996 0.0539218 0.0206119 0.0329025
+Case #86: 0.0008392 0.0080128 0.1015691 0.1127521 0.1127521 0.1669370 0.0915221 0.0185185 0.0576923 0.0281880 0.0281880 0.2152279 0.0302098 0.0012821 0.0185185 0.0351923 0.0738684 0.0033566 0.0120513 0.0366667 0.0120513 0.2152279 0.0092336 0.0176282 0.1407692 0.1669370 0.0281880 0.0302098 0.0120513 0.0046296 0.0185185 0.0397863 0.2152279 0.0289355 0.0092308 0.0302098 0.0738684 0.0833333 0.0185185 0.0251748 0.0279651 0.0738684 0.0397863 0.0046296 0.2152279
+Case #87: 0.0755894 0.0526316 0.0100000 0.2785544 0.0972217 0.1250000 0.2267682 0.0972217 0.0364582 0.0364582 0.2785544 0.0197368 0.0389344 0.0100000 0.0197368 0.0755894 0.0972217 0.0389344 0.0065789 0.0065789 0.0197368 0.0475000 0.2785544 0.0081967 0.0475000 0.0100000 0.1250000 0.2267682 0.0972217 0.0389344
+Case #88: 0.0833333 0.0216284 0.0216284 0.0050824 0.0216284 0.0050824 0.0833333 0.1890443 0.0866800 0.0024309 0.0267399 0.0203297 0.0203297 0.0407204 0.0216284 0.1890443 0.0267399 0.0128205 0.0216284 0.0216284 0.0050824 0.0503663 0.0407204 0.0068681 0.3111111 0.0068681 0.1890443 0.0222222 0.0274725 0.0216284 0.1628816 0.0183150 0.0009158 0.0203297 0.0097236 0.0680653 0.0611111 0.0203297 0.1890443 0.0407204 0.0274725 0.0050824 0.1628816 0.0274725 0.0009158
+Case #89: 0.0185185 0.0037037 0.0444664 0.0037037 0.0540872 0.0600044 0.0600044 0.1043478 0.0185185 0.0540872 0.0540872 0.0600044 0.0600044 0.0540872 0.0088933 0.0444664 0.0088933 0.1000000 0.0185185 0.0444664 0.0444664 0.0185185 0.2000000 0.0043478 0.1000000 0.4096779 0.0540872 0.0185185 0.0600044 0.0956522
+Case #90: 0.0575397 0.0341270 0.1269841 0.0467687 0.0496032 0.0688776 0.0575397 0.0952381 0.0467687 0.0416667 0.1023810 0.0595238 0.1285147 0.0575397 0.0476190 0.0793651 0.0059524 0.0317460 0.0496032 0.0714286 0.0238095 0.0808957 0.0793651 0.1071429 0.0688776 0.0198413 0.0575397 0.0229592 0.0808957 0.0496032 0.0808957 0.0467687 0.0496032 0.0341270 0.0396825
+Case #91: 0.1318175 0.0239583 0.0275815 0.0047181 0.0439392 0.0439392 0.0089286 0.0267857 0.0439392 0.0719363 0.0434086 0.0439392 0.0625000 0.0919384 0.0177083 0.0625000 0.1250000 0.0434086 0.0267857 0.0104167 0.0141544 0.0919384 0.1354167 0.1318175 0.0434086 0.0047181 0.0625000 0.1595721 0.0471814 0.0104167 0.1595721 0.1153677 0.0625000 0.0047181 0.1595721 0.1550964 0.0047181
+Case #92: 0.0272727 0.7949051 0.1393107 0.0075758 0.0378788 0.0318182 0.0075758 0.0512155 0.0419580 0.2048618 0.0075758 0.1471528 0.0378788 0.3846820 0.0512155 0.1393107 0.0318182 0.0378788 0.0489510 0.0378788 0.0701299 0.2744256 0.0914752 0.0525974 0.0075758 0.0303030 0.0303030 0.1393107 0.0245255
+Case #93: 0.0284722 0.0763889 0.0140491 0.0069444 0.0145202 0.0290404 0.0833333 0.0421474 0.0280983 0.0780352 0.0993056 0.0569444 0.1932498 0.0780352 0.0416667 0.0305556 0.0145202 0.2381313 0.0580808 0.0421474 0.0138889 0.0694444 0.0528749 0.0416667 0.0229167 0.1057498 0.0528749 0.0435606 0.1932498 0.0284722 0.0780352 0.0561966
+Case #94: 0.1261034 0.0255661 0.0392860 0.1339975 0.0076923 0.0935176 0.0692308 0.1299145 0.0162393 0.0127831 0.0769231 0.1468045 0.0040605 0.0568189 0.2571735 0.0392860 0.0233794 0.0277427 0.0649685 0.1468045 0.0703069 0.7905300 0.1571441 0.1022645 0.0769231 0.3238930 0.1468045 0.1571441 0.0568189 0.1468045 0.0392860
+Case #95: 0.0240000 0.0244898 0.0751995 0.0751995 0.0751995 0.0500000 0.0120000 0.0324324 0.1637940 0.0620000 0.0122449 0.1000000 0.1637940 0.0244898 0.0020000 0.0027027 0.1351384 0.0632653 0.1351384 0.0500000 0.0122449 0.1637940 0.0500000 0.1637940 0.0125332 0.1637940 0.0632653 0.0751995 0.1637940 0.0324324 0.0500000 0.0324324 0.0751995
+Case #96: 0.0501089 0.0103093 0.0101010 0.0103093 0.0054466 0.2558709 0.0045941 0.1312973 0.0542991 0.0558404 0.0568602 0.0093067 0.2714953 0.1631943 0.0885023 0.0326389 0.0361111 0.1074251 0.1982767 0.0180556 0.0716167 0.1085981 0.0500000 0.0454545 0.0192308 0.0051546 0.0013889 0.0885023 0.0991384 0.0413470 0.1023740 0.0597234 0.0542991 0.0297824 0.0771951 0.0128205 0.0235043 0.0991384 0.2482428 0.0055556 0.0991384 0.2957778 0.2482428 0.0916667
+Case #97: 0.0069697 0.0033333 0.1040740 0.0166667 0.0458333 0.0568069 0.0696970 0.0025000 0.0458333 0.0142857 0.0973480 0.1136138 0.0034848 0.0107143 0.1172614 0.0852103 0.0973480 0.0852103 0.1739130 0.1040740 0.1040740 0.0973480 0.0833333 0.1136138 0.0139394 0.1000000 0.0284034 0.0973480 0.0260870 0.0568069 0.1172614 0.0284034 0.0035714 0.0025000 0.0714286 0.0069697 0.0139394 0.0069697 0.0696970
+Case #98: 0.0446429 0.0089286 0.1193017 0.1702837 0.0351852 0.1407407 0.0328185 0.1279601 0.0098916 0.1702837 0.0327381 0.1279601 0.0654762 0.1702837 0.0075188 0.0267857 0.0535714 0.0639098 0.0089286 0.1814672 0.0395663 0.1190154 0.1193017 0.1785232 0.1407407 0.0714286 0.0703704 0.1186990 0.0386100 0.0789474 0.1702837 0.0351852
+Case #99: 0.1222143 0.0112360 0.1262753 0.0081833 0.0081833 0.0131579 0.0349184 0.1537671 0.2173633 0.0216076 0.1852088 0.0042713 0.0112360 0.0092187 0.0229133 0.0216076 0.2315110 0.1198436 0.0597983 0.0161480 0.0065466 0.0253036 0.0597229 0.1222143 0.0129184 0.0081833 0.2173633 0.0172002 0.0112360 0.2173633 0.5051013 0.0769231 0.2315110 0.0663749 0.0092187 0.2173633 0.0253036 0.0452145 0.0131579 0.0229133 0.0597983 0.1875540 0.0129184 0.0258125 0.0452145 0.0452145 0.0161480 0.0349184 0.0161480
+Case #100: 0.0236686 0.2055061 0.0236686 0.0135711 0.0634432 0.0230353 0.0278952 0.0220943 0.0345369 0.0080304 0.0423862 0.0090498 0.0195567 0.0236686 0.0497738 0.0849926 0.0007541 0.0597285 0.0156454 0.2181733 0.1133235 0.0143288 0.0634432 0.0135711 0.0135711 0.2181733 0.0634432 0.1076573 0.0921412 0.0542845 0.0972150 0.0230353 0.0260756 0.0059172 0.0921412 0.0050719 0.0171946 0.2181733 0.0921412 0.0278952 0.0080304 0.0230353 0.0108161 0.0542845 0.0679941 0.0030166 0.0156454 0.0921412 0.2181733 0.0542845
diff --git a/codejam_2008/src/y2008beta/C-small-practice.out b/codejam_2008/src/y2008beta/C-small-practice.out
new file mode 100644
index 0000000..d77244e
--- /dev/null
+++ b/codejam_2008/src/y2008beta/C-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0.4500000 0.2000000 0.1000000 0.2000000 0.4500000
+Case #2: 1.0000000
+Case #3: 0.5000000 0.5000000
+Case #4: 1.0000000 0.0000000
+Case #5: 1.0000000 0.0000000
+Case #6: 0.5000000 1.0000000
+Case #7: 0.5000000 0.5000000
+Case #8: 1.0000000 0.0000000
+Case #9: 0.0000000 1.0000000
+Case #10: 1.0000000 0.0000000
+Case #11: 0.1000000 0.2000000 0.3000000 0.4000000 0.5000000 0.5000000 0.4000000 0.3000000 0.2000000 0.1000000
+Case #12: 0.0969697 0.1969697 0.2969697 0.3969697 0.4969697 0.0060606 0.4969697 0.3969697 0.2969697 0.1969697 0.0969697
+Case #13: 0.0000000 0.1000000 0.2000000 0.3000000 0.4000000 0.2000000 0.4000000 0.3000000 0.2000000 0.1000000 0.0000000
+Case #14: 0.6000000 0.4000000 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1000000 0.2000000 0.2000000 0.1000000 0.0000000 0.0000000 0.0000000
+Case #15: 0.5000000 0.1875000 0.1875000 0.1250000 0.0625000 0.0625000 0.5000000 0.1875000 0.1875000 0.1250000 0.0625000 0.0625000
+Case #16: 0.5000000 0.2400000 0.0933333 0.1933333 0.1600000 0.0800000 0.0800000 0.0933333 0.0600000 0.0266667 0.0400000 0.0333333 0.5000000 0.2400000 0.0933333 0.1933333 0.1600000 0.0800000 0.0800000 0.0933333 0.0600000 0.0266667 0.0400000 0.0333333
+Case #17: 1.0000000 0.3750000 0.1250000 0.0000000 0.1666667 0.0833333 0.0000000 0.0833333 0.0416667 0.0000000 0.0416667 0.0833333 0.0000000 0.0000000 0.5416667 0.2916667 0.1250000 0.1666667 0.1666667 0.1250000 0.0416667 0.0416667
+Case #18: 0.6000000 0.2500000 0.2000000 0.1500000 0.1000000 0.2500000 0.1000000 0.0750000 0.0500000 0.1000000 0.0375000 0.0250000 0.0375000 0.0125000 0.0125000
+Case #19: 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000 0.2000000 0.0000000 0.2000000
+Case #20: 0.0000000 0.2500000 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.2500000 0.0000000
+Case #21: 0.0714286 0.0952381 0.0714286 0.1428571 0.0476190 0.0000000 0.0000000 0.2857143 0.0714286 0.1190476 0.5714286 0.0714286 0.1190476
+Case #22: 0.3072871 0.0755416 0.0208333 0.0466954 0.0069444 0.0755416 0.0069444 0.3072871 0.2013889 0.0755416 0.0069444 0.0251805 0.0755416 0.0755416 0.0251805 0.0000000 0.0755416 0.0755416 0.0755416 0.0069444 0.4046935 0.3072871
+Case #23: 0.2500000 0.2500000 0.2500000 0.2500000
+Case #24: 0.0000000 0.0000000 0.0000000 0.1111111 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.1111111 0.3333333 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1111111 0.0000000 0.0000000
+Case #25: 0.0000000 0.1666667 0.1666667 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1666667 0.1666667 0.1666667 0.0000000 0.1666667
+Case #26: 0.0833333 0.5000000 0.6666667 0.0000000 0.0833333 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0833333 0.5000000 0.0833333 0.0000000
+Case #27: 0.1000000 0.0000000 0.1000000 0.1000000 0.0000000 0.5000000 0.1000000 0.1000000
+Case #28: 0.0000000 0.5000000 0.0000000 0.5000000
+Case #29: 0.0000000 0.2500000 0.5000000 0.5000000 0.7500000 0.5000000 0.0000000
+Case #30: 0.0000000 0.0000000 0.0000000 0.2500000 0.2083333 0.2500000 0.0000000 0.0833333 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.2083333 0.1666667
+Case #31: 0.2500000 0.2500000 0.2500000 0.2500000
+Case #32: 0.0000000 0.0000000 0.2500000 0.0208333 0.5000000 0.0000000 0.2500000 0.0208333 0.0000000 0.0000000 0.0208333 0.0000000 0.0000000 0.0208333 0.0000000 0.0208333 0.0208333 0.0208333 0.0000000 0.0000000 0.0208333 0.0208333 0.0208333 0.0208333 0.0208333
+Case #33: 0.0833333 0.0833333 0.0833333 0.0476190 0.0476190 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333 0.0476190 0.0476190 0.0833333 0.0000000 0.0476190 0.0000000 0.0476190 0.0476190
+Case #34: 0.5000000 0.0000000 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000
+Case #35: 0.2000000 0.0000000 0.0000000 0.0000000 0.6000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000 0.2000000 0.0000000 0.0000000 0.0000000 0.8000000 0.0000000
+Case #36: 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333 0.1666667 0.0000000 0.1666667 0.0000000 0.0000000
+Case #37: 0.0000000 0.2857143 0.5000000 0.0000000 0.0000000 0.5000000 0.0000000 0.0000000 0.1428571 0.4285714 0.1428571 0.0000000 0.0000000 0.4285714 0.0000000 0.1428571 0.0000000 0.0000000
+Case #38: 0.0500000 0.1250000 0.1250000 0.0500000 0.0500000 0.0500000 0.0000000 0.0500000 0.5500000 0.2500000
+Case #39: 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000 0.7500000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #40: 0.1666667 0.4166667 0.1666667 0.0833333 0.0833333 0.4166667
+Case #41: 0.3333333 0.4166667 0.4166667 0.1666667
+Case #42: 0.0357143 0.1250000 0.1250000 0.1250000 0.0357143 0.3750000 0.0000000 0.0000000 0.0357143 0.0357143 0.1250000 0.0357143 0.0357143 0.0357143
+Case #43: 0.2500000 0.2500000 0.2500000 0.0000000 0.2500000
+Case #44: 0.1111111 0.3333333 0.1111111 0.1111111 0.0000000 0.0000000 0.6666667
+Case #45: 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #46: 0.0000000 0.2500000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000 0.2500000 0.2500000 0.0000000
+Case #47: 0.0000000 0.3269231 0.0769231 0.0384615 0.0384615 0.0000000 0.0384615 0.0384615 0.0384615 0.0769231 0.0384615 0.0384615 0.3269231 0.0000000 0.0384615 0.0000000 0.0384615
+Case #48: 0.2777778 0.1666667 0.0555556 0.1666667 0.1666667 0.0555556 0.0000000 0.0555556 0.0000000 0.0000000 0.3333333
+Case #49: 0.0000000 0.1111111 0.0000000 0.0000000 0.1666667 0.0000000 0.1666667 0.0000000 0.1111111 0.1111111 0.4444444
+Case #50: 0.0000000 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.2500000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #51: 0.0000000 0.3333333 0.4166667 0.0000000 0.0000000 0.1666667 0.4166667
+Case #52: 0.2000000 0.0333333 0.0333333 0.6000000 0.0333333 0.0000000 0.2000000 0.0000000 0.0333333 0.0333333 0.0333333 0.0333333 0.0333333 0.0333333 0.0333333 0.0333333 0.2000000 0.0333333 0.0000000
+Case #53: 0.1666667 0.0000000 0.3333333 0.1666667 0.0000000 0.5000000
+Case #54: 0.0256410 0.7628205 0.0256410 0.0256410 0.0673077 0.0673077 0.0256410 0.0673077 0.0256410 0.0673077 0.0673077 0.0673077 0.0673077 0.2051282 0.0673077
+Case #55: 0.0000000 0.1666667 0.0000000 0.0000000 0.1666667 0.3333333 0.1666667 0.0000000 0.0000000 0.1666667 0.1666667 0.6666667 0.0000000
+Case #56: 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000
+Case #57: 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #58: 0.5000000 0.5000000 0.0000000 0.0000000
+Case #59: 0.6666667 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1666667 0.0000000 0.0000000 0.3333333 0.0000000 0.1666667 0.0000000 0.0000000
+Case #60: 0.0000000 0.2500000 0.2500000 1.0000000 0.0000000
+Case #61: 0.2500000 0.0833333 0.0357143 0.0833333 0.0714286 0.0000000 0.0357143 0.0833333 0.0714286 0.0357143 0.3214286 0.3214286
+Case #62: 0.0000000 0.0666667 0.0666667 0.0666667 0.0666667 0.3333333 0.1666667 0.0000000 0.1666667 0.3333333 0.0666667
+Case #63: 0.0416667 0.0416667 0.0416667 0.0416667 0.1000000 0.1000000 0.0416667 0.1000000 0.0416667 0.0416667 0.1000000 0.0416667 0.0416667 0.0416667 0.0416667 0.1000000 0.0416667
+Case #64: 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1250000 0.0000000 0.0000000 0.1250000 0.1250000 0.0000000 0.0000000 0.0000000 0.0000000 0.1250000 0.1250000 0.5000000 0.6250000 0.0000000 0.0000000 0.0000000 0.1250000
+Case #65: 0.0664488 0.0010893 0.0654666 0.0000000 0.0664488 0.0664488 0.0000000 0.1646666 0.0654666 0.0654666 0.1646666 0.0654666 0.0664488 0.0654666 0.1646666 0.0664488 0.0654666 0.0654666 0.1646666 0.0654666 0.0654666 0.0109111 0.1646666 0.1646666 0.0654666
+Case #66: 0.2500000 0.2500000 0.2500000 0.2500000
+Case #67: 0.0357143 0.2500000 0.0357143 0.0357143 0.0000000 0.0000000 0.1250000 0.1250000 0.1250000 0.2500000 0.0357143 0.0357143 0.0357143 0.0357143 0.1250000
+Case #68: 0.0000000 0.0000000 0.1428571 0.1428571 0.0476190 0.2857143 0.1428571 0.4285714 0.0000000 0.1428571 0.0000000 0.0476190 0.0714286 0.0714286 0.0476190
+Case #69: 0.0000000 0.0000000 0.0000000 0.2500000 0.5000000 0.2500000
+Case #70: 0.0333333 0.2500000 0.0000000 0.4083333 0.0166667 0.4083333 0.0333333 0.0333333 0.0333333 0.0333333 0.3333333 0.0333333 0.0333333 0.0000000 0.1666667
+Case #71: 0.0714286 0.0238095 0.0714286 0.2063492 0.0714286 0.0714286 0.0238095 0.2063492 0.2063492 0.5873016
+Case #72: 0.0666667 0.1250000 0.0000000 0.6500000 0.0000000 0.3750000 0.0666667 0.0250000 0.0000000 0.1500000 0.1250000 0.0000000 0.0000000 0.0000000 0.0000000 0.0666667 0.0750000 0.0000000 0.0250000 0.1500000 0.0000000
+Case #73: 0.2000000 0.0000000 0.2000000 0.0285714 0.2000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0285714 0.0285714 0.0000000 0.0000000 0.0285714 0.6000000 0.0000000 0.0285714 0.0285714 0.0285714 0.0000000 0.0000000
+Case #74: 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #75: 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.6666667 0.0000000
+Case #76: 0.9583333 0.0000000 0.0000000 0.0000000 0.0416667 0.1666667 0.0000000 0.1527778 0.1250000 0.0000000 0.0000000 0.1666667 0.0000000 0.1527778 0.1527778 0.0000000 0.1666667 0.0000000 0.0000000 0.0000000
+Case #77: 0.0000000 0.0000000 0.2000000 0.1000000 0.4000000 0.0000000 0.0000000 0.0000000 0.4000000 0.0000000 0.0000000 0.1000000 0.0000000 0.2000000 0.0000000
+Case #78: 0.1547619 0.2142857 0.0357143 0.1547619 0.0357143 0.1547619 0.1547619 0.2142857 0.1547619 0.0000000 0.1547619
+Case #79: 0.8750000 0.1250000 0.1250000 0.1250000 0.1250000
+Case #80: 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000
+Case #81: 0.2500000 0.5000000 0.2500000 0.2500000 0.0000000 0.0000000 0.0000000
+Case #82: 0.0277778 0.1851852 0.0277778 0.0000000 0.1851852 0.2222222 0.0277778 0.3333333 0.0000000 0.0277778 0.0000000 0.0000000 0.0000000 0.1851852 0.3333333 0.1111111 0.1111111 0.0555556 0.2222222 0.0555556 0.2222222 0.0000000 0.0000000
+Case #83: 0.1428571 0.0416667 0.0416667 0.1428571 0.1428571 0.0416667 0.1428571 0.0416667 0.0416667 0.0000000 0.0416667 0.1428571 0.0416667 0.0416667 0.0416667 0.1428571 0.0416667 0.0416667 0.1428571 0.0416667
+Case #84: 0.0666667 0.2000000 0.1777778 0.4000000 0.1777778 0.0666667 0.1777778
+Case #85: 0.0086957 0.0423913 0.0695652 0.0423913 0.0423913 0.0423913 0.0423913 0.0695652 0.0666667 0.0423913 0.0086957 0.0666667 0.0173913 0.0086957 0.0666667 0.4086957 0.0086957 0.0000000 0.0423913 0.1086957 0.0423913 0.0086957 0.1086957 0.0000000
+Case #86: 0.1666667 0.0000000 0.3333333 0.1666667 0.3333333
+Case #87: 0.0000000 0.0000000 0.0277778 0.0000000 0.0833333 0.2777778 0.0000000 0.0833333 0.0277778 0.0000000 0.0277778 0.0000000 0.2777778 0.0000000 0.2777778 0.0833333 0.0277778 0.0277778 0.0833333 0.0277778
+Case #88: 0.0416667 0.0000000 0.2500000 0.0000000 0.0000000 0.1250000 0.0000000 0.1666667 0.5000000 0.0416667 0.0000000 0.0000000 0.6250000 0.0000000 0.0416667 0.1250000 0.3750000
+Case #89: 0.0666667 0.0000000 0.0833333 0.0000000 0.0833333 0.0666667 0.0833333 0.0666667 0.0000000 0.0833333 0.0666667 0.0666667 0.0000000 0.3333333
+Case #90: 0.5000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #91: 0.0000000 0.3750000 0.1250000 0.0625000 0.3750000 0.0625000 0.0000000 0.2500000 0.0000000 0.0000000 0.0625000 0.1250000 0.1250000 0.0625000 0.0625000 0.0000000 0.0625000 0.0000000 0.0000000 0.0000000
+Case #92: 0.0714286 0.0714286 0.0714286 0.1250000 0.0714286 0.0714286 0.0714286 0.1250000 0.1250000 0.0714286 0.1250000
+Case #93: 0.5000000 0.0000000 0.5000000
+Case #94: 0.0000000 0.0833333 0.1250000 0.0000000 0.5000000 0.0833333 0.1250000 0.2500000 0.1250000 0.0000000 0.0000000 0.0000000 0.1250000 0.1250000 0.0000000 0.0000000 0.1250000 0.1250000 0.0000000 0.0833333 0.1250000
+Case #95: 0.0666667 0.0000000 0.0666667 0.6666667 0.0000000 0.0666667 0.0666667 0.0666667 0.0000000 0.3333333 0.0000000
+Case #96: 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #97: 0.0000000 0.0000000 0.0000000 0.1875000 0.0625000 0.1250000 0.0000000 0.0000000 0.0625000 0.6250000 0.0000000 0.1250000 0.0000000 0.0000000 0.1875000 0.0000000 0.1250000 0.0625000 0.0000000 0.0000000 0.0000000 0.0625000 0.2500000
+Case #98: 0.0000000 0.0000000 0.3333333 0.6666667 0.0000000 0.3333333
+Case #99: 0.0000000 0.0000000 0.0000000 0.1428571 0.4285714 0.1428571 0.2857143 0.1428571 0.0000000 0.0000000 0.5714286 0.1428571 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
+Case #100: 0.0000000 0.2500000 0.2500000 0.1250000 0.0000000 0.0000000 0.0000000 0.0000000 0.1250000 0.1250000 0.0000000 0.1250000
diff --git a/codejam_2008/src/y2008beta/a.rs b/codejam_2008/src/y2008beta/a.rs
index 6084988..f2d64b2 100644
--- a/codejam_2008/src/y2008beta/a.rs
+++ b/codejam_2008/src/y2008beta/a.rs
@@ -53,7 +53,7 @@ impl Line
     fn new(p1: &Vector2d<f64>, p2: &Vector2d<f64>) -> Line
     {
         Line {
-            slope: if p1.x() == p2.x() {
+            slope: if (p1.x() - p2.x()).abs() < f64::EPSILON {
                 None
             } else {
                 Some((p2.y() - p1.y()) / (p2.x() - p1.x()))
@@ -96,7 +96,10 @@ fn solve(p1: &Vector2d<f64>, p2: &Vector2d<f64>, p3: &Vector2d<f64>) -> String
         "scalene"
     };
 
-    let desc2 = if angles.iter().any(|&ang| (ang - PI / 2.).abs() < 0.00000001) {
+    let desc2 = if angles
+        .iter()
+        .any(|&ang| (ang - PI / 2.).abs() < 0.000_000_01)
+    {
         "right"
     } else if angles.iter().any(|&ang| ang > PI / 2.) {
         "obtuse"
diff --git a/codejam_2008/src/y2008beta/b.rs b/codejam_2008/src/y2008beta/b.rs
index a932132..19a73fc 100644
--- a/codejam_2008/src/y2008beta/b.rs
+++ b/codejam_2008/src/y2008beta/b.rs
@@ -33,7 +33,6 @@ pub fn solve_all_cases()
 
 fn lis(xs: &Vec<u8>) -> usize
 {
-
     let mut lis = Vec::new();
 
     for price in xs.iter() {
@@ -42,7 +41,7 @@ fn lis(xs: &Vec<u8>) -> usize
         if it >= lis.len() {
             lis.push(*price);
         } else {
-            assert!( lis[it] >= *price);
+            assert!(lis[it] >= *price);
             lis[it] = *price;
         }
     }
@@ -63,7 +62,8 @@ fn solve(products: Vec<String>, prices: Vec<u8>) -> String
         //j
         let non_sorted_index = products
             .iter()
-            .position(|non_sorted_product| non_sorted_product == sorted_product).expect("Should exist");
+            .position(|non_sorted_product| non_sorted_product == sorted_product)
+            .expect("Should exist");
 
         let mut prices_without_p = Vec::new();
 
diff --git a/codejam_2008/src/y2008beta/c.rs b/codejam_2008/src/y2008beta/c.rs
index e40eebc..0ed0fb2 100644
--- a/codejam_2008/src/y2008beta/c.rs
+++ b/codejam_2008/src/y2008beta/c.rs
@@ -1,14 +1,19 @@
 use codejam::util::codejam::run_cases;
-use std::io::Write;
 use itertools::Itertools;
-
+use std::cmp::min;
+use std::collections::HashMap;
+use std::io::Write;
+use std::u32;
 
 /*
 */
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice", "C-large-practice"],
+        &[
+            "C-small-practice",
+            "C-large-practice"
+        ],
         "y2008beta",
         |reader, buffer| {
             let t = reader.read_int();
@@ -18,15 +23,16 @@ pub fn solve_all_cases()
                 let num_roads: u8 = line1[0].parse().unwrap();
                 let starting_city = line1[1].clone();
 
-                let roads: Vec<(String, String, u32)> = (0..num_roads).map(|_| {
-                    let line = reader.read_string_line();
-                    assert_eq!(3, line.len());
-                    (line[0].clone(), line[1].clone(), line[2].parse().unwrap())
-                }).collect();
+                let roads: Vec<(String, String, u32)> = (0..num_roads)
+                    .map(|_| {
+                        let line = reader.read_string_line();
+                        assert_eq!(3, line.len());
+                        (line[0].clone(), line[1].clone(), line[2].parse().unwrap())
+                    })
+                    .collect();
 
-
-                if case_no != 3 {
-                    // continue;
+                if case_no > 1 {
+                   // continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -35,10 +41,10 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(
-                        starting_city,
-                        &roads
-                    ).iter().map(|f| format!("{:.7}", f) ).join(" ")
+                    solve(&starting_city, &roads)
+                        .iter()
+                        .map(|f| format!("{:.7}", f))
+                        .join(" ")
                 )
                 .unwrap();
             }
@@ -46,8 +52,180 @@ pub fn solve_all_cases()
     );
 }
 
+const DIST_INFINITY: u32 = u32::MAX / 2;
+
+fn get_city_id(
+    name: &str,
+    cities_to_id: &mut HashMap<String, usize>,
+    cities: &mut Vec<String>,
+) -> usize
+{
+    let id_len = cities_to_id.len();
+    let id = *cities_to_id.entry(name.to_string()).or_insert(id_len);
+    if id >= cities.len() {
+        cities.push(name.to_string());
+    }
+    id
+}
+
+fn find_all_shortest_paths(
+    dest_node: usize,
+    dist: &Vec<Vec<u32>>,
+    roads: &Vec<Road>,
+    paths: &mut Vec<Vec<usize>>,
+)
+{
+    let min_dist = dist[0][dest_node];
+
+    for road in roads
+        .iter()
+        .filter(|road| road.city_from == 0 && road.cost <= min_dist && min_dist - road.cost == dist[road.city_to][dest_node])
+    {
+        paths.push(vec![road.road_id]);
+    }
+
+    debug!("Starting shortest paths: {:?}", paths);
+
+    let mut done = false;
+
+    while !done {
+        done = true;
+
+        for path_idx in 0..paths.len() {
+            let last_road = &roads[*paths[path_idx].last().unwrap()];
+            let source_node = last_road.city_to;
+            let min_dist = dist[source_node][dest_node];
+
+            debug!("path_idx {} from {} min_dist {}", path_idx, source_node, min_dist);
+
+            for (idx, r_tup) in roads
+                .iter()
+                .filter(|road| {
+                    road.city_from == source_node
+                        && road.cost <= min_dist
+                        && min_dist - road.cost == dist[road.city_to][dest_node]
+                })
+                .enumerate()
+            {
+                if idx == 0 {
+                    paths[path_idx].push(r_tup.road_id);
+                    done = false;
+                } else {
+                    let mut new_path = paths[path_idx].clone();
+                    new_path.pop();
+                    new_path.push(r_tup.road_id);
+                    paths.push(new_path);
+                }
+            }
+
+            debug!("after paths: {:?}", paths);
+        }
+    }
+}
+
+struct Road
+{
+    city_from: usize,
+    city_to: usize,
+    cost: u32,
+    road_id: usize,
+}
 
-fn solve(starting_city: String, roads: &[(String, String, u32)]) -> Vec<f64>
+fn solve(starting_city: &str, roads: &[(String, String, u32)]) -> Vec<f64>
 {
-    vec![3.2, 1.9]
+    let mut cities_to_id: HashMap<String, usize> = HashMap::new();
+    let mut cities: Vec<String> = Vec::new();
+
+    let starting_id = get_city_id(&starting_city, &mut cities_to_id, &mut cities);
+
+    assert_eq!(0, starting_id);
+
+    let roads: Vec<Road> = roads
+        .iter()
+        .enumerate()
+        .map(|(r_idx, r)| {
+            let city_from = get_city_id(&r.0, &mut cities_to_id, &mut cities);
+            let city_to = get_city_id(&r.1, &mut cities_to_id, &mut cities);
+            Road {
+                city_from,
+                city_to,
+                cost: r.2,
+                road_id: r_idx,
+            }
+        })
+        .collect();
+
+    let num_cities = cities_to_id.len();
+
+    debug!("Num cities {}", num_cities);
+
+    let mut dist = vec![vec![DIST_INFINITY; num_cities]; num_cities];
+
+    for r in roads.iter() {
+        dist[r.city_from][r.city_to] = min(dist[r.city_from][r.city_to], r.cost);
+    }
+
+    for k in 0..num_cities {
+        dist[k][k] = 0;
+    }
+    for k in 0..num_cities {
+        for i in 0..num_cities {
+            for j in 0..num_cities {
+                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
+            }
+        }
+    }
+
+    for i in 0..num_cities {
+        for j in 0..num_cities {
+            if i == j {
+                continue;
+            }
+            debug!("From city {} to {} is {}", cities[i], cities[j], dist[i][j]);
+        }
+    }
+
+    //Need to know total # of reachable cities
+    let reachable: Vec<usize> = (1..num_cities)
+        .filter(|city| dist[0][*city] < DIST_INFINITY)
+        .collect();
+
+    let mut road_probs = vec![0f64; roads.len()];
+
+    for &dest_city in reachable.iter() {
+        let mut paths: Vec<Vec<usize>> = Vec::new();
+
+        find_all_shortest_paths(dest_city, &dist, &roads, &mut paths);
+
+        debug!(
+            "Shortest paths from starting city {} to {}/{}.  # of paths: {}",
+            cities[0],
+            dest_city,
+            cities[dest_city],
+            paths.len()
+        );
+
+        for (paths_idx, path) in paths.iter().enumerate() {
+            debug!("Shortest path {} of {}", paths_idx+1, paths.len());
+
+            for (path_idx, r_idx) in path.iter().enumerate() {
+                let road = &roads[*r_idx];
+                debug!(
+                    "Path step #{} of {}.  Road #{}: {}/{} => {}/{} cost: {}",
+                    path_idx+1,
+                    path.len(),
+                    r_idx+1,
+                    road.city_from,
+                    cities[road.city_from],
+                    road.city_to,
+                    cities[road.city_to],
+                    road.cost
+                );
+
+                road_probs[*r_idx] += (1.0 / reachable.len() as f64) / paths.len() as f64;
+            }
+        }
+    }
+
+    road_probs
 }
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index 61262af..2fdfde6 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -91,7 +91,7 @@ fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
     }
 
     debug!("Done find_required_trains {} ", trains_min.abs());
-    return trains_min.abs();
+    trains_min
 }
 
 fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]]) -> [i64; 2]

From 177b2f6349f57d27f9bf4f2bba3031209f7e76f7 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 17 Feb 2019 22:21:28 -0300
Subject: [PATCH 022/122] c

---
 codejam_2008/src/y2008beta/c.rs | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/codejam_2008/src/y2008beta/c.rs b/codejam_2008/src/y2008beta/c.rs
index 0ed0fb2..dc98366 100644
--- a/codejam_2008/src/y2008beta/c.rs
+++ b/codejam_2008/src/y2008beta/c.rs
@@ -6,6 +6,8 @@ use std::io::Write;
 use std::u32;
 
 /*
+Floyd–Warshall algorithm
+Finding / enumerating all shortest paths
 */
 pub fn solve_all_cases()
 {
@@ -70,6 +72,7 @@ fn get_city_id(
 
 fn find_all_shortest_paths(
     dest_node: usize,
+    //minimum distance
     dist: &Vec<Vec<u32>>,
     roads: &Vec<Road>,
     paths: &mut Vec<Vec<usize>>,
@@ -77,6 +80,7 @@ fn find_all_shortest_paths(
 {
     let min_dist = dist[0][dest_node];
 
+    //seed the paths from the roads that start at the starting city
     for road in roads
         .iter()
         .filter(|road| road.city_from == 0 && road.cost <= min_dist && min_dist - road.cost == dist[road.city_to][dest_node])
@@ -111,6 +115,8 @@ fn find_all_shortest_paths(
                     paths[path_idx].push(r_tup.road_id);
                     done = false;
                 } else {
+                    //we have more than 1 path to extend the original one, so we make a copy, taking
+                    //care to remove the previously added next node
                     let mut new_path = paths[path_idx].clone();
                     new_path.pop();
                     new_path.push(r_tup.road_id);

From 8b66a4d007cd4db93754f913b2aa575838558395 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 17 Feb 2019 22:30:38 -0300
Subject: [PATCH 023/122] use refs

---
 codejam_2008/src/y2008beta/c.rs | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/codejam_2008/src/y2008beta/c.rs b/codejam_2008/src/y2008beta/c.rs
index dc98366..d8136f0 100644
--- a/codejam_2008/src/y2008beta/c.rs
+++ b/codejam_2008/src/y2008beta/c.rs
@@ -70,12 +70,12 @@ fn get_city_id(
     id
 }
 
-fn find_all_shortest_paths(
+fn  find_all_shortest_paths <'a>(
     dest_node: usize,
     //minimum distance
     dist: &Vec<Vec<u32>>,
-    roads: &Vec<Road>,
-    paths: &mut Vec<Vec<usize>>,
+    roads: &'a Vec<Road>,
+    paths: & mut Vec<Vec<&'a Road>>,
 )
 {
     let min_dist = dist[0][dest_node];
@@ -85,10 +85,10 @@ fn find_all_shortest_paths(
         .iter()
         .filter(|road| road.city_from == 0 && road.cost <= min_dist && min_dist - road.cost == dist[road.city_to][dest_node])
     {
-        paths.push(vec![road.road_id]);
+        paths.push(vec![road]);
     }
 
-    debug!("Starting shortest paths: {:?}", paths);
+    // debug!("Starting shortest paths: {:?}", paths);
 
     let mut done = false;
 
@@ -96,13 +96,13 @@ fn find_all_shortest_paths(
         done = true;
 
         for path_idx in 0..paths.len() {
-            let last_road = &roads[*paths[path_idx].last().unwrap()];
+            let last_road = *paths[path_idx].last().unwrap();
             let source_node = last_road.city_to;
             let min_dist = dist[source_node][dest_node];
 
             debug!("path_idx {} from {} min_dist {}", path_idx, source_node, min_dist);
 
-            for (idx, r_tup) in roads
+            for (idx, road) in roads
                 .iter()
                 .filter(|road| {
                     road.city_from == source_node
@@ -112,19 +112,19 @@ fn find_all_shortest_paths(
                 .enumerate()
             {
                 if idx == 0 {
-                    paths[path_idx].push(r_tup.road_id);
+                    paths[path_idx].push(road);
                     done = false;
                 } else {
                     //we have more than 1 path to extend the original one, so we make a copy, taking
                     //care to remove the previously added next node
                     let mut new_path = paths[path_idx].clone();
                     new_path.pop();
-                    new_path.push(r_tup.road_id);
+                    new_path.push(road);
                     paths.push(new_path);
                 }
             }
 
-            debug!("after paths: {:?}", paths);
+            //debug!("after paths: {:?}", paths);
         }
     }
 }
@@ -199,7 +199,7 @@ fn solve(starting_city: &str, roads: &[(String, String, u32)]) -> Vec<f64>
     let mut road_probs = vec![0f64; roads.len()];
 
     for &dest_city in reachable.iter() {
-        let mut paths: Vec<Vec<usize>> = Vec::new();
+        let mut paths: Vec<Vec<&Road>> = Vec::new();
 
         find_all_shortest_paths(dest_city, &dist, &roads, &mut paths);
 
@@ -214,13 +214,13 @@ fn solve(starting_city: &str, roads: &[(String, String, u32)]) -> Vec<f64>
         for (paths_idx, path) in paths.iter().enumerate() {
             debug!("Shortest path {} of {}", paths_idx+1, paths.len());
 
-            for (path_idx, r_idx) in path.iter().enumerate() {
-                let road = &roads[*r_idx];
+            for (path_idx, road) in path.iter().enumerate() {
+                //let road = &roads[*r_idx];
                 debug!(
                     "Path step #{} of {}.  Road #{}: {}/{} => {}/{} cost: {}",
                     path_idx+1,
                     path.len(),
-                    r_idx+1,
+                    road.road_id+1,
                     road.city_from,
                     cities[road.city_from],
                     road.city_to,
@@ -228,7 +228,7 @@ fn solve(starting_city: &str, roads: &[(String, String, u32)]) -> Vec<f64>
                     road.cost
                 );
 
-                road_probs[*r_idx] += (1.0 / reachable.len() as f64) / paths.len() as f64;
+                road_probs[road.road_id] += (1.0 / reachable.len() as f64) / paths.len() as f64;
             }
         }
     }

From 4ee3c3035e1cc45ff40be596cb19b51ecb701bee Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 12:16:00 -0300
Subject: [PATCH 024/122] hexagon d

---
 codejam_2008/Cargo.toml                       |   4 +-
 codejam_2008/src/main.rs                      |   3 +-
 .../src/y2008beta/D-large-practice.in         | 201 ++++++++++++++++++
 .../src/y2008beta/D-small-practice.in         | 201 ++++++++++++++++++
 codejam_2008/src/y2008beta/d.rs               |  45 ++++
 codejam_2008/src/y2008beta/mod.rs             |   1 +
 6 files changed, 453 insertions(+), 2 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/D-large-practice.in
 create mode 100644 codejam_2008/src/y2008beta/D-small-practice.in
 create mode 100644 codejam_2008/src/y2008beta/d.rs

diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index cf4d3e1..54a0219 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -8,4 +8,6 @@ edition = "2018"
 rust-algorithm-problems = { path = "../codejam" }
 log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
 itertools = "*"
-superslice = "*"
\ No newline at end of file
+# For lower_bound
+superslice = "*"
+hungarian = "1.1.0"
\ No newline at end of file
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 239a8be..c5d63bc 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -34,6 +34,7 @@ pub fn run_y2008_round_beta()
 {
     y2008beta::a::solve_all_cases();
     y2008beta::b::solve_all_cases();
+    y2008beta::c::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -59,5 +60,5 @@ pub fn run_y2008_round2()
 fn main()
 {
     init_log();
-    y2008beta::c::solve_all_cases();
+    y2008beta::d::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008beta/D-large-practice.in b/codejam_2008/src/y2008beta/D-large-practice.in
new file mode 100644
index 0000000..cc26b23
--- /dev/null
+++ b/codejam_2008/src/y2008beta/D-large-practice.in
@@ -0,0 +1,201 @@
+100
+1155 2119 890 423 1094 2928 280 3694 1045 1650 732 1981 2126 2365 1103 1895 1015 2384 139 3192 553 3480 146 3659 3451 3196 2610 1162 1362 1802 3032 2295 2489 1020 2006 3359 2061 3773 1265 2688 2076 1719 875 1456 3509 1994 1643 2376 1106 3762 2777 3290 3048 2647 2314 2446 1590 2119 581 1545 1200 2379 2159 3557 1431 1796 2606 2192 2693 1916 3766
+17 9 43 16 3 43 45 1 18 29 39 1 38 1 8 50 49 37 15 12 32 46 31 27 21 30 3 14 34 3 41 13 24 6 47 15 27 3 4 38 10 8 28 21 50 5 31 43 15 33 36 42 24 12 33 36 48 49 18 2 24 40 11 13 17 18 14 3 7 2 42
+1267 1214 2211 1062 351 561 424 1534 168 240 769 1775 1235 1830 732 1219 1261 1994 931 1162 838 891 1530 1127 272 617 1566 1951 1527 562 4 2017 215 1926 754 866 393 2153 18 120 950 1812 774 1903 1099 444 524 1579 572 198 1293 1110 586 358 1229
+19 17 43 12 39 47 2 2 28 34 34 32 18 6 37 43 12 36 41 20 48 26 46 3 2 13 10 1 32 25 8 43 3 33 9 34 5 34 47 41 4 20 33 24 5 35 12 38 34 7 16 17 8 40 48
+484 256 1352 817 164 934 302 873 40 464 581 737 1068 1277 637 379 689 1079 1358 1412 533 643 1359 341 467 614 1153 320 160 830 198 1337 281 170 486 655 38 1268 886 844 778 454 587 153 1005
+37 42 31 18 41 26 15 43 10 17 33 47 12 17 17 45 35 39 42 2 1 13 30 13 12 27 1 24 26 48 46 24 11 15 1 31 44 4 34 34 45 20 37 5 27
+208 1057 1152 398 436 635 555 990 1066 1111 765 929 117 884 603 432 1130 358 550 258 1049 252 743 1235 655 842 1115 339 6 1166 1168 991 1136 340 381 1025 846 723 851 176 726
+20 22 25 47 15 45 3 19 12 9 34 36 12 7 24 37 30 47 43 15 23 23 40 31 30 2 45 32 33 38 27 11 20 33 27 9 10 19 26 39 41
+18 14 15 8 14
+48 20 21 31 11
+1475 150 145 79 1685 196 1475 1244 502 842 144 1442 798 1296 353 1635 68 1649 1014 1530 950 1124 967 1466 1067 916 1369 1567 1126 1039 1182 952 895 1112 56 873 1663 838 1287 500 1639 1626 1520 1200 278 2 242 336 1134
+19 14 1 10 2 8 42 8 7 35 14 40 17 18 8 34 38 22 43 44 27 36 14 7 6 12 2 40 3 4 5 6 0 47 23 15 14 44 19 49 7 18 10 33 1 18 46 26 3
+104 1 148 266 269 120 258 171 172 58 79 189 274 49 206 185 263 76 108 5 43
+7 27 50 33 4 36 22 26 23 36 3 8 1 9 16 20 45 43 17 14 28
+39 1037 1284 1838 1291 319 1365 1132 516 1045 939 1802 417 1217 626 1036 340 1248 527 1287 707 1215 1431 721 1744 1337 1777 1178 1668 312 355 1264 1584 1194 366 1120 427 1137 1703 1399 1587 1825 255 413 943 1316 977 691 1200 1628 297
+15 18 42 25 45 39 1 15 43 47 46 35 15 1 30 36 14 34 2 14 8 28 14 8 45 32 8 45 47 38 26 41 0 27 12 19 22 33 22 31 0 50 9 30 38 28 33 14 35 34 28
+51 114 92 29 12 116 55 33 119 19 6 57 63
+0 31 31 48 43 21 9 38 17 6 37 32 18
+56 21 441 264 402 395 268 277 175 296 9 94 406 326 47 171 136 442 534 291 205 186 491 2 364 235 132
+35 35 40 47 20 4 9 26 41 31 12 7 9 16 14 28 26 17 21 29 39 20 27 15 28 15 18
+1097 293 870 60 104 1130 682 908 1054 170 913 1167 771 809 709 94 40 563 1039 348 169 910 137 923 722 1257 171 1212 1186 1177 987 1170 835 55 885 537 239 788 960 750 509
+11 13 12 5 30 13 27 40 45 13 47 32 41 0 45 10 48 7 32 34 48 11 41 7 28 22 23 34 37 4 49 16 25 30 16 20 43 21 21 33 4
+236 103 398 350 192 405 361 231 93 140 115 108 183 365 194 405 106 226 160 165 31 363 417 27 378
+33 11 30 22 45 32 7 7 19 16 27 24 25 38 47 30 47 25 49 26 16 33 50 13 17
+2474 2485 2277 640 874 2860 2436 2220 591 2016 2440 2162 2482 1380 1426 2652 2799 2893 526 544 2384 2060 2206 480 2890 1961 2600 141 2344 234 1093 1802 2012 2177 727 891 1647 2094 1607 107 2572 11 139 1654 1229 1070 2359 1669 2344 1718 1507 2720 2897 728 2616 1440 2892 2483 2950 2473 1553 2809 2253
+41 43 19 9 38 20 22 32 34 15 10 33 28 45 16 42 32 5 50 10 50 28 1 19 45 30 40 39 35 12 11 0 14 48 16 41 32 19 24 1 19 10 25 34 21 30 43 3 45 17 7 35 25 8 32 4 43 47 9 38 34 42 35
+5 39 33 15 14 32 39 21 40
+13 45 35 16 28 36 25 0 29
+117 1248 1271 16 897 924 1111 22 1227 1217 732 72 1025 929 1016 824 1249 487 985 566 403 1141 319 363 467 875 1010 1047 716 83 516 1302 712 423 148 1261 344 8 341 1143 1111 225 1314
+40 23 12 36 8 8 46 34 0 30 2 29 41 26 27 35 28 7 2 5 3 9 27 15 15 33 6 29 11 4 45 3 2 28 13 29 47 26 39 41 8 44 39
+5 3 9 9 4
+15 28 47 11 15
+1798 326 1459 2012 1131 2229 330 687 2202 343 1578 3205 1458 3002 1661 2297 502 1515 886 544 106 1892 808 1161 2967 1776 3016 1748 1723 2630 3350 406 2363 61 1652 306 237 539 654 2534 1238 1399 1018 3538 2811 162 1395 2019 1308 3398 1215 993 2816 319 3511 3350 62 1449 3147 3472 1986 1319 344 612 73 621 176 1801 2720
+49 14 5 43 5 42 22 31 39 36 40 39 10 29 49 20 21 0 37 13 12 3 2 46 10 27 30 29 22 36 35 8 28 10 37 19 18 29 32 22 28 6 39 4 22 26 13 40 34 46 46 17 29 14 46 43 35 49 3 26 47 32 9 48 28 9 17 15 24
+110 3622 2248 1959 3543 3272 3220 3540 574 2080 2092 896 2305 3259 1311 2045 3555 3620 93 3063 488 3488 2894 1048 2449 713 1341 1137 2790 349 2390 963 60 135 36 2698 1416 3556 1377 265 1111 353 2238 2766 1583 1502 3561 186 2489 3631 1928 2920 3134 1942 3246 3032 2991 720 610 1928 2906 237 325 1863 1757 3053 1420 3146 604 3424 2756
+48 47 35 50 7 34 6 20 32 27 35 31 38 24 45 41 3 1 29 23 26 39 23 28 2 3 2 30 2 31 29 32 11 32 6 6 34 1 38 44 22 36 37 4 2 38 36 19 40 36 24 49 19 31 46 34 19 34 50 18 33 9 10 0 1 14 37 15 8 40 24
+902 692 1020 495 455 184 725 407 712 362 1013 264 671 617 155 728 867 909 1012 700 881 901 935 795 984 1006 739 255 833 453 783 438 409 265 127 785 381
+27 38 43 11 0 23 2 45 30 44 41 0 46 13 24 42 28 47 23 6 47 3 47 13 45 27 8 20 14 12 15 31 14 6 41 43 1
+41 2 24 8 33 20 61 12 16
+24 50 30 6 6 21 42 47 17
+124 1350 2012 1838 635 927 2140 454 9 369 1378 2411 374 2231 1415 992 2131 2163 522 290 2435 2078 164 1301 2386 1916 2084 1588 2269 301 42 1022 770 1071 2313 1529 2159 1310 1785 1914 1519 1014 559 855 714 1446 1505 438 1446 359 1297 1561 512 857 1869 1023 2204
+19 13 15 32 5 40 39 42 44 49 45 19 2 39 46 17 32 50 30 35 8 26 34 6 8 40 8 21 0 46 34 20 8 5 50 0 39 34 20 32 49 36 9 28 46 13 40 41 31 39 29 36 32 33 25 47 18
+2959 1261 2621 2972 179 984 1483 1590 586 1123 229 618 2397 2651 1070 2043 780 687 600 1355 2347 2522 1845 176 354 1588 2048 1997 1471 1492 1966 359 2976 254 528 2394 2490 199 80 2097 1110 1866 1949 2799 1336 2611 1643 2744 257 706 1095 312 2392 2716 85 2103 318 552 1144 507 1789 308 172
+48 17 30 13 6 34 7 25 6 8 11 33 17 40 34 29 32 10 28 16 13 14 2 30 25 8 24 28 22 28 4 6 29 16 21 39 48 10 45 8 42 3 33 5 13 50 42 46 3 48 16 35 24 5 7 21 15 44 7 14 2 36 34
+486 131 750 590 98 427 808 418 847 272 504 256 790 61 309 773 223 56 801 601 249 218 98 31 714 456 473 21 348 23 904 332 631 386 908
+30 47 38 2 6 14 2 17 12 17 30 28 44 14 36 23 32 18 49 30 10 11 13 20 50 49 23 29 15 12 33 0 4 2 30
+1536 1834 196 391 1302 986 775 2324 894 1631 1820 586 103 1764 1524 2752 1458 3189 2236 3317 2582 2864 941 1146 2367 2008 346 2674 509 333 3244 635 2515 961 736 686 3008 3260 3011 3305 1505 2074 4 2135 2892 835 2988 2286 3113 1160 493 1906 1808 222 2729 1348 2845 2855 1924 1874 633 2525 3097 279 1565 1701 3275
+39 8 28 31 43 20 8 46 25 32 26 33 29 16 6 32 41 38 43 5 39 41 24 27 33 30 26 8 0 8 45 25 21 15 49 12 40 28 44 35 14 13 50 6 42 47 46 3 26 48 36 40 25 7 2 41 14 8 22 49 29 6 7 48 7 12 29
+464 1793 1344 716 1712 1516 1832 773 1614 2148 2502 540 659 877 447 2362 2761 1307 366 351 2114 878 2669 2522 1980 773 1442 2417 293 2731 2002 1780 1306 571 567 1669 2205 926 2532 2343 1712 634 546 1204 2749 424 422 1471 2042 1833 2136 1647 452 1938 2700 1343 834 806 7 1713 2059
+8 23 27 11 13 13 5 5 11 14 37 28 18 19 33 43 15 48 22 21 18 18 20 21 6 15 50 2 39 41 46 5 10 18 43 15 13 0 16 40 13 45 36 36 45 45 48 37 13 36 6 20 14 30 13 13 0 6 19 7 9
+628 235 179 208 285 156 389 533 105 208 104 241 673 81 101 666 368 76 413 140 354 330 51 551 237 242 262 115 325 20 193
+7 13 32 25 35 47 29 30 11 14 38 20 15 23 20 1 37 28 17 33 26 23 35 37 19 24 25 11 8 44 0
+442 2051 2015 425 2113 742 546 1458 1298 1749 131 307 796 1670 992 1802 1596 910 1553 235 2226 1234 1748 1137 229 1960 1218 2011 2171 2210 1491 1092 1839 1173 1101 224 887 1048 1785 594 477 1571 1628 1308 898 891 114 2083 2147 813 1661 2217 623 1278 863
+10 33 17 0 18 3 12 49 29 9 8 16 42 2 15 12 18 23 4 48 6 15 8 27 15 36 47 44 10 13 15 13 44 50 11 25 30 10 43 36 16 24 35 40 37 21 32 4 32 29 41 26 35 46 22
+1009 1613 193 667 877 1065 372 1404 273 345 77 1620 972 628 1462 998 96 917 813 849 1705 374 958 1754 1775 1555 631 1644 536 395 1711 1352 630 645 278 1747 1666 616 641 1489 1408 68 770 221 346 939 1478 346 435 1848 296
+16 16 27 47 40 44 9 18 22 5 5 2 45 22 20 48 17 41 26 33 42 10 28 36 0 35 27 19 39 14 45 9 7 30 42 44 43 4 40 18 3 11 43 39 22 45 12 16 11 45 6
+26 23 11 124 26 254 86 140 129 130 63 119 17 43 132 215 111 248 81
+45 45 33 33 15 19 27 12 25 38 10 23 30 41 23 20 10 38 33
+1718 618 3006 837 1008 2016 1417 1118 1897 2990 2298 2305 1837 125 148 2440 2253 2695 286 1415 1674 1731 2316 1471 845 884 574 1698 271 311 562 2223 1029 3044 1392 144 2898 2298 3152 930 413 1325 2967 644 1449 86 2029 48 1576 2878 3008 2791 1932 1403 2905 1351 452 2595 2044 1697 483 1020 1205 132 2080
+9 18 44 4 12 37 19 21 19 17 15 20 48 16 4 39 34 50 23 33 0 11 39 10 43 20 41 1 46 32 6 11 13 34 20 11 27 35 1 36 10 2 46 23 13 21 27 25 41 7 15 3 40 40 45 8 23 34 14 29 28 18 43 27 3
+247 127 225 22 257 32 24 378 261 235 58 266 197 143 234 391 343 343 385 220 106 140 56
+49 28 45 10 4 28 25 28 38 26 9 9 29 20 5 37 36 35 6 18 27 42 28
+132 87 8 111 134 165 132 45 166 57 52 50 62 118 115
+20 13 31 47 28 26 5 36 49 9 17 9 31 9 23
+274 72 289 129 222 80 274 245 180 140 395 117 108 367 115 325 146 229 10 56 29 281 123
+46 24 19 18 13 14 4 40 32 41 12 47 30 41 0 1 23 28 45 29 30 4 10
+34 1 21 33 17 18 35
+45 3 34 4 36 7 27
+78 827 660 442 101 801 861 532 7 42 85 1116 136 673 612 388 3 710 832 560 127 1301 65 280 892 826 375 923 617 930 481 1171 1062 258 519 161 1051 199 1056 346 19 181 567
+14 0 41 32 22 32 42 21 27 49 15 45 10 49 47 15 29 19 14 49 30 28 35 2 37 26 29 45 13 26 33 17 23 34 49 32 38 15 33 1 6 23 14
+115 111 90 183 71 242 304 155 90 316 339 269 144 209 119 166 300 316 305 253 235 244 279
+15 16 19 17 45 40 38 12 0 36 7 36 26 1 19 49 13 21 13 19 38 42 6
+84 158 210 5 83 168 137 56 99 57 188 174 98 28 59 188 5
+34 16 4 3 28 27 14 20 34 40 28 13 15 20 17 15 24
+2315 1980 491 163 2512 1822 307 599 2418 542 1917 978 1691 1668 282 244 527 2256 1662 1054 163 1521 586 2313 685 1903 1329 2511 1445 2546 751 762 1422 629 802 2124 547 2268 894 76 742 588 778 2536 1790 1364 1066 2472 1824 1092 2241 2446 1382 415 854 2199 473 1468 16
+31 28 40 45 10 42 29 49 10 34 32 40 21 1 4 11 34 1 2 33 13 18 1 45 33 19 21 26 7 27 8 47 38 6 15 21 38 18 39 39 17 13 5 45 8 27 25 5 10 9 3 3 22 42 43 35 46 30 12
+2148 1706 9 85 2160 2267 274 2072 1251 364 2230 1618 301 734 2310 1156 2617 1882 10 2445 2355 1160 655 3 639 1079 1802 97 351 1537 1976 1525 2290 250 389 2345 2306 217 113 784 1836 2093 1509 2730 2065 1119 986 2409 750 1152 127 1895 729 1532 506 1047 570 702 1607 358 838
+31 35 48 14 28 22 14 9 48 29 37 33 26 40 32 12 5 35 1 3 0 5 4 16 42 4 44 5 29 42 22 21 21 15 26 8 26 15 30 36 15 7 28 12 16 35 38 28 8 46 5 17 15 31 15 8 13 17 6 2 22
+51 40 17 35 53 36 13 53 49
+24 50 18 7 50 11 34 7 7
+2373 851 3102 2647 2574 2983 2104 1918 548 3433 3369 360 655 864 2403 4031 3466 813 596 234 558 2760 153 552 2530 2045 354 3794 663 4042 1055 2471 92 179 224 3746 112 3955 3497 1458 69 709 1973 3199 763 119 2944 690 1987 359 1290 1270 2591 2668 231 2704 4154 1424 2794 1675 122 2198 3170 4074 3227 2398 2108 749 785 4024 1026 3889 3997 59 1198
+22 9 38 27 31 38 13 49 32 37 17 20 37 18 4 13 18 20 27 18 27 40 39 25 6 40 19 31 40 0 46 47 23 30 40 36 20 39 38 2 36 12 31 0 38 2 27 31 15 19 23 34 2 40 4 10 24 38 15 20 21 18 15 23 14 15 40 23 13 18 46 47 22 42 2
+1306 1086 2601 367 121 2339 2138 2517 911 1684 1826 297 2478 810 151 1404 1445 1158 1095 186 1672 629 2178 1998 187 2267 2060 2083 927 2439 2606 483 417 1087 160 210 1669 2291 561 2389 424 82 21 128 913 619 1700 2146 1959 1503 12 422 1491 1354 1663 2515 2297 355 1027
+27 3 39 29 9 44 44 18 26 11 24 11 39 48 26 27 0 15 12 39 18 46 10 8 2 45 8 11 47 40 38 11 45 15 38 39 21 2 42 16 12 11 16 31 29 38 18 50 43 1 42 44 28 39 13 49 30 38 36
+215 370 426 969 934 310 494 403 23 691 958 180 570 447 39 472 475 500 849 918 493 247 1 994 809 390 560 991 792 465 214 726 757 789 962 86 756
+20 28 46 38 14 24 29 22 43 44 10 14 49 2 7 9 40 31 27 25 7 34 14 25 32 12 20 33 37 37 24 20 17 21 23 19 27
+1603 485 428 133 350 533 2111 2065 1417 180 647 1519 2221 958 2268 1329 550 1401 1663 675 572 1391 59 1122 894 1947 2117 994 747 1295 1802 760 1733 1710 1663 292 2076 13 445 120 578 462 22 645 378 1635 1474 2072 1232 1828 872 1031 618 1085 621 800 2156
+20 11 32 40 40 45 15 41 15 46 50 46 39 27 35 2 7 8 8 9 4 21 15 24 33 17 27 7 15 14 0 4 19 29 21 3 27 40 39 18 25 44 35 40 17 10 7 49 40 49 34 46 36 15 44 41 0
+166 182 136 151 63 426 416 53 211 281 294 391 334 465 456 343 223 441 52 331 226 319 165 134 78
+35 7 39 13 14 24 48 11 37 41 31 15 11 8 14 5 30 4 49 16 35 49 29 30 10
+564 196 2723 253 2725 370 2697 868 1821 2338 1220 1061 2289 1455 949 1954 1935 386 1074 1145 877 1950 2006 1264 357 1411 2090 974 2730 1673 1541 2585 2325 2223 2619 2477 619 2220 2587 2776 737 718 1307 590 1722 831 529 1609 101 1662 2614 2750 1623 352 2132 2138 2227 2302 495 1095 220
+41 26 44 23 26 45 25 36 47 38 23 43 18 11 42 25 8 40 18 48 26 16 43 12 5 22 21 39 1 32 12 11 12 4 40 47 5 4 43 35 31 4 11 41 20 13 2 24 28 1 29 33 33 25 23 41 13 42 30 50 11
+1292 471 455 1324 127 1291 688 788 486 215 1225 1400 1636 1563 1066 982 1541 255 1174 561 513 429 1390 757 924 1015 202 59 788 220 481 387 974 1356 121 428 1212 588 1392 99 69 989 1335 2 349 1390 1336
+8 47 21 36 35 22 43 0 0 20 30 11 34 25 20 15 15 20 18 29 5 40 15 30 42 19 36 39 7 18 7 19 36 49 17 47 5 19 9 32 33 8 44 42 29 46 43
+246 32 228 28 220 27 6 155 72 25 213 111 153 144 147 180 31 249 4
+5 43 10 38 25 50 16 15 41 49 23 21 3 49 39 20 24 35 28
+1154 1377 1095 445 1676 1183 1841 1306 670 1546 1201 860 1545 1402 308 364 543 1213 305 728 57 1816 1796 333 141 1697 933 113 128 1471 1384 1325 1490 25 992 1595 623 1687 770 284 652 1181 103 1581 375 1778 642 1043 538 1557 1898
+21 46 12 35 32 6 38 14 6 16 46 21 50 18 35 25 50 11 40 44 30 48 9 13 39 22 46 10 7 19 50 24 31 22 39 4 4 10 3 46 38 21 49 28 5 19 15 1 18 50 38
+1848 2323 1898 2580 205 1363 1735 2714 1369 70 132 2405 619 1519 470 1120 1837 2165 1746 1770 2251 917 660 2538 2643 404 830 739 2244 1861 1752 1218 2629 1320 395 2320 682 423 261 2347 1641 1189 749 533 263 2388 2279 1124 980 2011 243 30 148 635 55 1130 1025 1884 2462 2669 964
+25 4 46 10 16 36 39 4 12 40 17 26 8 13 28 29 31 18 7 46 43 23 11 20 32 17 43 37 43 37 35 36 27 43 30 1 20 0 44 36 24 19 9 30 45 23 26 2 28 3 31 25 5 33 35 27 33 4 23 49 46
+671 620 21 36 716 404 93 61 946 670 469 838 420 806 712 147 193 383 721 148 439 82 378 808 134 114 114 321 747 961 776 970 221 577 254 319 500
+38 42 6 20 41 46 31 27 42 14 19 27 16 49 50 46 34 0 40 45 22 6 50 49 5 19 1 41 11 13 39 39 35 9 20 4 13
+158 110 171 39 212 121 9 31 137 90 12 189 254 153 65 153 19 205 92
+15 41 20 47 4 48 34 33 47 5 25 2 39 38 32 6 15 30 24
+159 683 85 199 289 211 327 216 347 223 90 327 361 478 547 277 718 662 231 173 4 689 465 3 343 203 620 621 581 386 699 624 481
+26 46 5 3 29 26 42 13 45 23 16 21 40 46 35 9 12 32 36 22 0 12 10 33 12 2 40 41 49 19 33 17 0
+2653 1826 1720 3622 2761 1829 720 1294 756 3858 527 3501 1657 3813 2406 25 3381 821 1120 3506 2876 122 527 3879 141 3160 1200 1578 2015 145 2063 1943 182 2747 2341 2409 2071 2780 1288 778 2266 1194 125 2002 2737 2775 1549 3650 1163 3251 488 95 3205 3667 1683 1210 2286 1480 3200 2836 3891 3460 636 1924 956 1944 1335 1506 872 3799 1511 315 1791
+22 8 41 12 38 2 10 40 1 2 26 6 14 9 19 0 43 41 13 2 38 39 14 50 45 12 1 16 5 1 1 32 3 20 25 45 38 17 10 20 20 1 37 23 40 29 20 43 31 49 29 12 19 30 43 32 8 4 13 34 7 1 0 23 34 44 27 27 25 9 12 27 24
+1847 235 337 1929 1846 127 1376 901 615 413 414 1489 388 662 884 608 481 1015 1211 732 1294 836 1122 1483 955 1317 725 1060 362 21 1220 1046 1725 1570 895 1524 1841 1198 964 1561 132 1257 594 635 1753 348 1112 1935 628 823 1737
+20 9 33 21 20 22 5 17 42 18 39 31 24 46 18 2 39 39 36 10 12 43 48 3 18 13 24 9 17 30 9 30 47 28 18 5 43 5 16 35 50 35 37 2 16 15 39 13 40 33 39
+794 54 2443 1096 95 2276 2094 689 2119 1845 486 2258 215 1764 1781 1684 59 1067 158 2780 1986 607 2634 1148 48 2140 2706 2345 2389 1323 1683 103 2081 2744 2124 2692 574 738 1290 1974 1495 980 47 964 846 1587 1093 2351 1710 664 195 732 2132 2174 1663 226 536 579 1088 450 382
+7 36 45 5 47 25 23 20 24 42 2 31 47 44 45 30 11 3 1 8 29 26 41 44 41 6 8 43 12 36 6 44 18 44 8 48 49 30 4 40 39 47 39 15 27 1 49 37 8 44 1 49 33 37 21 31 45 9 3 28 13
+582 236 1090 193 217 123 148 718 758 806 1117 658 1073 649 279 741 264 915 906 560 128 134 211 192 76 1002 313 1096 667 771 881 450 120 86 100 890 688 407 648
+13 29 13 44 48 1 28 8 37 3 28 7 7 18 39 40 10 17 27 25 47 47 29 30 42 22 25 32 25 19 41 42 9 33 0 44 5 29 48
+51 88 20 23 74 52 2 40 64 21 2
+42 3 42 5 5 17 21 7 22 33 33
+66 107 339 177 364 58 254 63 263 547 403 417 398 538 164 283 574 473 302 284 240 434 474 526 276 156 320 583 654 385 217
+21 7 43 38 20 26 19 25 47 42 46 11 32 38 25 48 19 34 30 4 24 17 39 45 41 5 48 39 32 18 30
+716 2271 2580 3348 555 1579 3141 2127 1338 3149 1841 838 138 524 812 1692 759 3020 2021 3679 2239 2262 2544 1140 3330 7 860 553 343 3557 76 3772 527 2639 2442 803 1078 2027 2047 952 3779 574 3187 731 2918 2822 1994 871 266 3325 3648 1840 730 2361 625 1780 1739 518 2103 1779 1307 2677 2318 34 1397 2868 3616 952 3053 3712 1303
+36 33 33 43 5 47 33 44 18 33 50 7 0 50 25 26 23 26 43 30 34 5 49 2 22 10 15 24 10 24 46 38 38 34 42 6 18 23 1 31 13 50 34 49 12 14 35 26 3 33 26 41 0 50 22 4 12 10 24 31 5 18 1 13 26 2 19 25 41 27 17
+673 875 265 1206 1887 91 602 1790 605 1502 1756 415 131 757 808 1246 1466 1056 1226 88 474 527 893 663 1634 982 374 1768 1753 1466 1123 1703 1191 1188 570 1777 1502 902 1521 1567 277 1909 1822 1561 1541 88 520 1239 180 1818 160
+6 9 20 27 35 22 26 10 4 22 12 0 28 17 35 2 44 8 14 10 42 13 32 33 21 30 16 12 18 1 4 10 35 36 12 4 18 47 44 7 4 33 5 7 4 44 10 21 26 20 1
+61 61 18 31 16 54 24 52 6
+14 32 25 8 23 30 13 40 50
+1463 1897 998 2672 2879 2979 577 2957 2702 2945 3502 329 3562 1424 3388 792 1582 1405 616 2090 2827 2320 904 3301 595 707 1726 3501 1799 3153 2745 1391 1041 189 2653 3427 813 1177 849 2312 1452 27 2943 3309 2392 2679 96 2088 1579 984 3213 3253 3460 3023 1024 1088 374 56 655 1608 2120 2116 1731 1528 3165 898 880 162 512
+27 41 5 49 41 11 21 24 29 8 44 5 14 40 7 47 27 47 11 2 33 9 13 0 24 35 6 11 24 48 44 28 42 45 12 2 42 6 18 0 31 35 14 0 23 43 5 12 16 19 26 30 8 29 25 15 42 29 40 26 16 1 6 43 9 47 5 28 16
+18 24 13 10 13 29 15
+34 30 10 4 5 35 16
+647 410 327 380 17 874 713 683 41 1019 226 661 182 253 421 729 463 775 210 341 15 418 162 876 257 331 748 248 810 745 1017 1087 1056 210 60 73 552 157 165
+34 18 3 25 35 24 19 40 14 40 18 42 22 33 45 35 34 32 48 15 6 13 45 10 17 19 41 31 5 39 39 50 14 47 2 13 49 1 18
+565 1756 526 485 2440 269 509 2023 943 2486 2501 1089 597 293 392 1127 1554 2569 187 859 1271 1926 1643 989 177 2322 1467 1529 1506 1604 557 697 2195 309 107 1526 2180 2148 695 1919 1329 1830 1521 270 1165 2341 788 1388 1727 2098 12 529 672 1318 1849 135 2365 1035 1204
+49 3 29 15 46 6 19 5 13 3 11 41 15 34 42 46 3 17 27 14 49 31 8 19 49 40 29 21 30 36 2 15 2 3 26 20 10 4 16 46 30 50 13 19 33 45 42 6 12 18 21 4 32 12 15 8 25 4 8
+119 149 9 208 112 81 163 19 162 18 96 212 7 119 103 150 86
+25 38 9 32 37 36 20 4 29 18 34 40 23 25 8 30 9
+317 360 607 478 86 285 485 272 85 380 405 560 228 118 466 361 52 92 418 651 762 313 420 403 400 713 771 452 505 668 715 158 501
+37 38 5 31 3 5 13 50 19 3 37 16 10 18 14 19 17 32 27 15 36 29 2 14 15 10 27 12 9 16 34 8 10
+2666 1261 2196 2310 1493 1488 2762 1215 2757 503 156 2518 2362 2711 50 2366 2714 1659 1308 1161 2435 2310 926 662 354 890 272 1532 2581 799 1197 1605 1039 337 606 1862 227 1510 647 1180 1419 344 319 2744 666 1096 2554 2659 1787 2431 2218 338 1170 2706 798 258 2103 1334 1579 2324 977
+12 21 47 50 5 9 16 37 3 19 20 22 39 18 14 21 5 35 36 23 30 7 7 12 13 46 48 14 16 0 26 46 14 27 5 24 32 50 0 27 39 46 45 5 30 27 31 50 44 26 21 28 28 28 34 27 46 25 9 20 1
+594 76 346 881 86 621 470 185 552 870 257 828 187 272 625 833 555 370 154 399 185 484 705 897 575 100 33 146 810 274 384 470 73 525 494
+18 47 44 19 20 37 27 2 34 19 46 13 12 49 31 7 7 5 48 18 20 13 39 33 42 43 45 41 17 0 39 1 49 24 15
+411 219 398 154 494 293 68 629 351 494 266 252 411 76 238 323 382 542 622 308 7 220 239 379 267 555 445 418 336
+13 49 14 36 3 12 25 26 4 32 16 19 2 32 8 34 6 16 32 16 23 28 22 42 21 1 36 38 10
+1143 524 1032 272 1259 509 1080 944 413 1127 1541 296 635 265 179 580 506 714 1106 265 899 899 967 1559 1627 1578 596 856 729 616 1477 391 905 1103 1419 241 304 464 1616 462 1349 1494 1568 519 1375 426 1121
+25 11 49 29 34 8 27 31 46 24 18 0 33 15 19 23 41 18 4 26 48 17 5 20 1 27 24 35 37 34 16 43 2 2 8 8 13 26 36 19 47 49 37 45 19 14 32
+335 1641 1973 972 774 2706 1039 2871 1221 97 2418 2940 2440 2443 2705 1368 1311 2439 1295 561 542 2111 290 1646 1026 1964 37 1745 1195 1159 1324 698 56 1013 2849 2824 1217 1386 1398 1344 1783 57 47 2204 1016 1600 2714 2882 967 1448 2305 1538 347 376 1478 1720 1367 1395 2605 156 1657 1766 1662
+38 18 34 38 36 21 40 24 36 8 4 29 1 36 21 41 21 30 33 6 50 32 39 13 31 18 13 18 46 48 27 15 27 25 35 1 43 18 25 35 38 35 6 43 48 27 16 2 8 43 37 10 17 28 8 46 0 13 44 40 16 49 36
+2241 1968 2074 1989 958 1495 1134 1298 2364 2250 1513 653 1163 2091 1207 1466 791 1549 630 448 1505 1051 2006 1222 2071 1253 1393 1168 330 465 1836 2169 563 2145 347 1536 2362 1588 1351 110 2299 305 136 191 1585 50 1639 1383 2005 660 790 1041 1040 720 1851 118 615
+0 11 12 30 39 14 20 5 29 0 13 26 33 2 42 47 16 32 35 29 24 6 2 35 34 34 17 48 25 9 30 30 21 0 1 21 2 48 8 20 45 12 39 6 34 9 39 46 8 18 46 16 42 27 22 25 38
+55 62 106 9 71 19 80 109 93 50 5 25 52
+4 38 20 42 2 11 16 43 26 3 22 12 24
+1209 559 357 388 976 1027 1255 588 782 200 934 1179 1080 661 1160 682 581 285 1193 757 626 502 338 253 114 966 434 710 507 159 680 708 357 498 862 1143 573 660 990 1128 603
+40 1 34 47 46 7 19 13 29 10 5 42 16 49 43 28 26 43 3 17 43 5 43 6 29 21 43 25 2 29 6 36 30 4 3 1 34 39 18 6 24
+527 2247 610 1107 1213 359 2521 1786 2014 977 1692 775 515 1932 2196 1923 702 2619 871 2772 2511 2127 2284 1145 491 1474 510 1121 2712 348 1824 2668 2178 317 1659 43 108 2141 136 1048 1207 271 2784 2150 1370 2171 1884 2525 2456 795 503 2581 45 437 1647 2670 2527 708 907 1405 1083
+44 4 14 13 17 42 17 8 15 18 13 32 36 5 10 10 24 37 24 38 7 20 30 35 26 15 17 4 49 50 11 1 21 7 30 34 32 14 18 9 9 45 28 3 39 27 27 41 1 6 17 28 2 21 13 21 47 32 33 9 31
+340 1859 558 52 380 2313 2387 2011 888 260 1657 426 1171 300 336 2137 806 967 1403 1739 117 567 1313 640 453 21 2038 2250 2237 2224 427 602 2173 1016 805 2027 1201 361 1893 997 108 472 2022 1647 310 908 293 419 1076 1886 1043 2051 818 2099 2163 300 655
+49 25 13 41 23 18 31 2 36 42 19 9 12 10 6 1 40 47 28 38 1 30 50 30 13 10 18 15 48 31 39 34 36 9 43 48 15 23 24 32 4 3 11 28 4 16 50 29 9 18 15 1 33 20 44 32 0
+57 227 67 103 144 240 235 233 337 58 454 151 392 332 128 5 700 216 422 621 19 509 337 574 428 536 441 264 97 519 485
+5 23 33 6 37 30 13 7 24 20 29 48 6 2 37 47 24 10 10 36 27 3 32 43 9 10 6 13 5 38 36
+2773 243 2678 1191 1488 2115 1890 2476 437 1967 2897 3342 232 2618 3394 2516 2982 1265 3032 854 884 1718 1224 1676 983 679 202 249 484 1498 629 575 2231 2519 824 2798 630 2664 364 668 2163 2335 917 3057 419 3512 3217 327 3050 1016 1073 381 662 3129 2165 1572 391 3017 429 681 2977 3229 265 2542 3102 155 2557 949 3019
+7 38 30 37 23 45 25 6 40 44 33 23 12 41 42 14 8 25 34 15 7 2 17 19 38 11 25 2 9 3 27 49 3 45 36 37 4 29 7 18 9 12 17 49 16 2 17 3 35 7 3 17 5 19 1 9 36 30 18 50 23 1 38 18 43 21 26 46 1
+3030 1750 2172 135 2931 1178 812 3093 183 3084 532 631 915 3010 997 2521 3125 1440 2905 1380 3501 1902 3162 598 3311 1774 2741 486 118 1837 1819 2840 1903 1974 614 1562 138 311 2564 208 795 2351 2983 2147 1623 2520 354 560 1979 1904 1146 66 2805 3197 1221 1188 266 75 2816 2466 1886 1763 1647 2690 586 3341 980 760 1419
+38 49 28 49 32 22 41 38 48 48 5 19 8 1 40 2 24 5 6 37 14 25 23 46 29 45 32 33 39 14 49 20 34 24 3 31 47 49 11 42 2 42 49 24 14 22 44 44 21 4 15 40 33 24 25 3 37 11 44 30 33 41 16 30 28 22 24 28 19
+30 73 59 46 11 73 48 57 59 20 52
+20 3 46 4 11 0 38 0 30 36 30
+1039 97 731 1029 926 980 521 1217 1515 780 556 929 1057 1121 736 962 318 538 538 992 581 226 62 421 79 91 336 336 797 287 248 1154 764 975 1004 857 1189 774 465 1286 120 1411 332 900 1331
+32 14 43 25 18 39 19 26 9 40 26 6 29 38 4 38 21 30 0 0 47 28 22 23 22 4 41 13 35 45 9 45 0 30 43 25 19 49 14 46 24 18 24 21 15
+168 455 173 475 365 426 336 458 215 505 305 476 445 214 296 91 184 189 430 162 431 386 203 256 28 37 384
+19 9 17 0 43 35 29 27 40 24 39 31 31 20 46 29 13 41 46 26 13 9 35 0 10 11 38
+175 137 256 355 137 118 89 109 264 107 228 351 308 91 249 230 265 70 171 33 199 22 379
+42 6 18 4 27 1 31 7 9 26 6 26 33 18 22 12 0 28 27 17 35 12 9
+702 360 791 614 828 71 784 1198 1205 815 932 461 861 410 695 287 1169 742 403 586 84 858 1180 1120 761 354 851 529 1114 623 107 188 1026 647 429 799 978 920 916 1170 134
+32 30 14 7 16 25 28 21 21 13 6 28 28 12 23 35 44 20 32 30 5 0 38 31 7 27 30 43 31 17 18 12 47 1 35 3 14 39 1 7 43
+542 2187 2421 2400 1058 619 1834 2524 2742 345 1309 1333 2283 937 577 2471 2588 791 2030 2585 665 467 266 474 1794 1107 2799 1405 1531 2909 2095 1352 2786 3099 2772 1888 1838 1242 2503 2860 1472 248 1363 688 259 429 1034 91 2673 2567 1408 3101 486 2199 2549 547 2017 1510 615 2057 2022 1497 1089 2957 1273
+37 23 14 17 27 48 27 17 17 37 39 24 34 29 14 23 44 22 42 40 17 30 47 5 30 36 31 20 32 49 23 5 19 6 15 22 40 2 11 41 43 45 38 3 3 36 48 47 3 29 7 6 41 19 46 42 9 23 2 48 12 19 37 44 2
+1416 65 3160 530 301 79 173 2642 717 256 341 3030 2706 1672 2672 528 1166 2934 2021 2793 1677 815 675 2660 309 759 763 1061 2435 2804 2292 2905 2749 2725 1132 1335 1916 2478 2100 2881 2071 1399 3126 3108 376 421 2034 284 485 2824 2434 239 1446 2500 3043 671 444 2605 1123 2735 18 1114 1292 234 1736
+4 18 49 23 39 25 49 17 48 4 8 34 4 4 35 48 10 18 31 25 24 29 14 2 22 16 27 50 33 9 44 20 45 32 21 28 34 10 34 26 50 4 14 1 7 43 38 50 30 45 21 34 40 20 26 33 4 29 4 45 33 30 30 48 17
+1919 1065 354 546 848 523 239 1868 1418 1766 541 1643 1284 1334 1452 1733 493 1362 575 100 1792 85 348 1884 9 157 1272 593 1709 1240 552 1879 1673 967 269 1236 1724 211 602 474 1241 1086 1285 159 797 213 1682 902 36 683 1451
+19 27 28 39 10 39 19 26 49 13 44 43 40 12 26 33 7 46 17 25 6 36 25 8 44 28 11 21 0 6 15 19 1 48 24 16 19 1 6 17 8 14 1 38 15 27 36 33 32 6 48
+687 917 704 1396 905 728 2366 169 1275 2299 1966 391 84 1781 2275 1118 478 1389 1577 811 864 540 1463 1161 1257 2274 260 901 353 1734 1285 633 1626 1628 736 1639 181 2306 326 2259 365 647 2135 514 1019 1481 96 1674 1331 131 2076 1680 466 1418 1710 446 1022
+4 15 5 2 18 8 17 33 46 18 5 14 9 34 35 33 5 29 31 28 28 50 31 42 15 20 5 49 4 18 18 25 46 45 13 2 4 7 27 22 44 16 2 43 9 16 19 3 27 8 21 26 40 32 12 20 47
+3490 2428 3923 3346 2580 1320 856 3823 3442 1857 3166 1313 3707 3780 3584 1095 2811 3805 3747 3096 4039 3752 2727 1524 1888 1676 1154 3685 2167 787 2973 1215 2485 3892 784 2546 1652 889 268 3783 3038 3988 1339 53 3516 1947 1805 936 843 1844 2904 2193 2795 763 1674 1144 2528 3084 3401 1267 1065 3663 2639 2426 2886 4104 685 46 2475 1890 2251 1784 3373 2234 3245
+9 14 40 10 14 44 32 26 38 49 49 30 13 1 22 22 1 39 29 23 18 32 20 44 49 31 12 27 39 8 26 38 26 30 47 27 6 44 28 15 41 16 39 9 1 24 9 24 47 25 8 10 4 16 23 46 12 45 40 9 3 31 14 25 24 29 27 25 35 36 36 35 22 42 24
+46 227 113 401 176 66 42 451 386 391 277 377 20 238 37 286 283 31 225 185 80 132 318 360 268
+18 15 45 5 9 7 36 7 11 4 21 15 21 27 48 43 21 14 8 44 20 10 49 49 27
+116 3 8 23 125 20 67 73 108 46 93 51 17
+21 43 39 6 50 14 44 34 24 0 3 32 34
+292 285 640 754 644 703 80 728 226 935 172 849 383 70 823 467 1010 469 669 232 633 750 821 775 562 371 506 875 412 734 715 520 742 413 433 387 668
+30 2 28 36 32 41 20 47 0 31 1 10 34 4 46 13 47 44 33 43 38 11 6 17 18 27 11 3 32 17 23 31 14 45 44 37 35
+157 1389 2735 886 2895 503 1215 1906 600 839 421 73 1973 521 443 2887 865 603 719 1732 1074 1637 421 2543 1532 2118 2164 2169 2623 1208 2229 794 1042 2494 2960 1000 2357 2444 1789 1968 1829 2009 106 104 643 2091 90 287 353 666 706 1786 2439 988 1940 1713 1854 1606 1957 2640 190 449 1957
+10 30 42 2 16 38 8 13 6 25 8 30 2 17 6 36 11 14 45 48 7 12 27 5 48 42 5 35 32 33 7 9 3 49 35 46 6 5 49 27 42 10 2 46 25 22 37 14 10 10 27 41 0 25 41 17 17 36 26 17 29 19 43
+10 15 5 14 9
+35 43 0 40 29
+1797 1588 389 1157 1289 1924 15 42 1554 1696 2106 668 1422 1037 2059 108 1990 1512 409 221 872 1520 514 733 919 240 1824 1992 2077 1320 1048 1235 1650 438 1931 188 1604 1477 1322 800 1687 47 589 1839 847 174 1662 509 2086 1228 1178 1812 116
+42 19 22 15 29 19 15 26 3 35 36 17 46 19 49 10 11 26 7 42 36 18 20 48 9 2 12 16 0 19 5 16 21 46 43 23 34 12 4 11 32 8 36 32 26 49 5 1 2 7 5 45 37
+1435 562 1708 1224 963 1260 89 1638 1793 273 696 442 2059 1023 1892 23 1446 1849 309 2007 1858 446 299 1012 2075 1790 1212 286 1544 1445 1554 666 212 809 811 359 1350 1283 1765 1524 1137 2171 1571 1398 1411 270 1557 1005 1160 29 501 1280 1938 1357 1834
+38 29 35 24 45 49 12 20 37 42 45 10 22 5 8 18 30 9 17 15 4 1 40 30 12 12 24 50 8 26 43 7 15 37 14 44 35 10 14 36 17 2 9 4 16 3 41 11 47 0 21 29 47 0 35
+1679 2153 2283 277 377 1082 1270 1757 2034 1052 319 437 1339 830 405 2166 2324 271 1275 1531 1023 646 2165 112 2030 965 1873 196 404 1144 1143 66 1114 1834 2009 2085 2028 1455 512 829 366 2281 1077 263 2421 1211 2071 824 1978 980 269 1057 2241 1186 220 1657 2240
+48 11 22 47 11 17 3 45 26 48 23 11 14 15 49 18 38 5 41 49 9 12 24 19 11 14 7 8 5 38 39 3 5 46 50 14 25 47 30 17 42 4 16 22 46 50 44 49 3 4 46 40 29 42 50 3 21
+511 1702 2907 185 2294 923 534 2483 1160 338 205 235 326 895 1074 1940 2462 1684 4 25 372 710 797 737 1946 1926 1732 1014 524 1808 39 2508 1109 693 1020 111 1116 994 121 1769 2931 720 1548 1918 1943 2132 2021 1325 86 1985 1253 2181 2019 2530 801 2022 1629 2185 2825 2001 1656 1042 1709
+16 10 35 12 25 38 25 8 5 27 32 5 35 6 4 21 24 29 16 2 17 26 17 44 40 46 22 31 17 26 44 28 40 36 8 2 15 25 20 41 26 33 6 29 33 15 9 31 37 46 11 33 27 48 44 44 11 32 27 44 2 27 48
diff --git a/codejam_2008/src/y2008beta/D-small-practice.in b/codejam_2008/src/y2008beta/D-small-practice.in
new file mode 100644
index 0000000..1a4407e
--- /dev/null
+++ b/codejam_2008/src/y2008beta/D-small-practice.in
@@ -0,0 +1,201 @@
+100
+1 2 5 15 19
+1 3 3 0 0
+1 2 5 15 19
+0 3 3 0 0
+1 2 5 15 19
+2 3 3 0 0
+1 1 1 1 1
+0 1 2 3 4
+2 2 2 2 2
+0 1 2 3 4
+10 10 10 10 10
+0 1 2 3 4
+1 1 1 1 1
+1 1 1 1 1
+2 2 2 2 2
+1 1 1 1 1
+10 10 10 10 10
+1 1 1 1 1
+2 3 5 7 11
+0 0 0 0 0
+161 20 120 15 97 110 63 53 29 165 113 12 44 13 104
+33 15 33 15 15 15 37 37 33 37 15 15 15 33 15
+4 5 5
+16 16 32
+7 26 17 6 43 16 43 53 59
+19 9 16 21 16 1 21 26 29
+124 38 106 72 92 29 90 42 21 108 81 69 36
+7 3 43 43 3 34 43 21 34 39 23 7 21
+27 11 37 34 27 34 21
+30 30 30 32 45 32 30
+64 9 162 38 15 130 84 145 79 143 22 119 13 88 98
+26 7 25 26 7 3 25 25 26 25 36 3 26 44 26
+3 1 16 19 7
+42 18 30 11 8
+1 7 16 5 7
+6 6 42 6 42
+5 3 22 27 30 36 5
+45 9 10 40 10 10 40
+114 56 103 117 94 79 81 52 11 122 87 57 80
+50 50 50 50 50 50 50 50 50 50 50 50 50
+4 2 2
+25 25 25
+3 85 73 12 20 76 116 88 29 90 23 25 127 132 72
+39 17 22 22 22 22 28 34 28 28 34 34 39 22 28
+91 17 47 138 125 12 130 13 15 107 9 108 16 5 69
+12 49 12 48 12 49 12 12 12 48 48 48 12 49 12
+39 89 138 164 58 112 65 149 137 55 2 27 9 58 44
+8 23 6 32 18 23 23 32 26 26 26 18 23 6 8
+5 15 7 1 12
+31 23 24 31 31
+21 42 24 11 47 75 81 39 38 58 89
+37 7 15 15 37 14 19 15 15 7 26
+41 69 29 101 40 74 121 125 71 92 119 124 72
+46 46 46 46 46 46 46 46 46 46 46 46 46
+12 4 15 5 2
+38 25 38 2 38
+81 44 38 22 36 45 12 23 19 3 91
+18 0 28 28 30 18 1 28 49 21 21
+8 61 48 31 12 51 41 24 52
+39 7 30 39 30 30 30 7 30
+109 11 6 78 133 58 16 65 90 161 12 66 128 134 111
+35 2 26 1 26 13 15 42 26 5 42 2 46 42 8
+7 7 4
+21 21 21
+58 51 67 57 62 39 52 12 69 62 59
+43 43 43 43 43 43 43 43 43 43 43
+28 37 12 23 57 33 2 53 50
+34 25 45 34 34 25 34 34 25
+17 13 5 14 13
+12 12 12 12 12
+61 59 25 36 60 21 57 47 61
+40 40 40 40 40 40 40 40 40
+43 50 85 26 115 22 101 144 136 91 43 68 158 121 3
+39 9 39 0 43 0 9 24 24 43 0 0 9 0 43
+69 49 26 17 61 51 23 26 16 15 87
+10 28 26 20 32 43 45 43 20 28 28
+54 22 54 26 50 6 21 57 38
+50 18 50 18 25 28 28 50 3
+18 37 37 18 23 30 16
+50 21 33 21 33 8 21
+44 62 54 8 66 72 22 48 73 24 64
+42 22 36 22 21 22 21 22 25 21 22
+63 62 85 32 11 13 82 58 58 2 38
+43 12 29 1 14 1 29 39 21 43 12
+6 1 5
+16 16 16
+14 60 81 25 21 70 66 33 34 43 80
+10 50 10 36 36 50 10 13 10 36 50
+34 31 1 10 53 12 28 45 54
+7 7 4 7 4 7 7 4 4
+22 30 71 73 46 9 27 9 40 66 16
+49 25 49 23 25 9 21 25 25 49 9
+35 43 57 41 46 60 35 5 5 69 13
+38 11 38 38 11 11 13 11 13 38 12
+17 18 11 3 8
+25 25 25 25 25
+4 3 7
+1 27 27
+64 69 14 6 39 47 65 51 12 54 14
+45 45 37 25 35 36 45 40 40 35 45
+96 74 57 76 52 90 104 61 16 120 48 69 16
+18 18 18 18 18 18 18 18 18 18 18 18 18
+18 6 4 1 14
+23 23 50 50 23
+49 28 89 50 1 25 41 57 20 77 30
+50 34 50 14 50 34 50 11 34 34 14
+128 54 105 139 146 102 106 33 136 112 82 84 79 150 160
+41 35 33 39 14 39 10 10 10 33 39 12 40 40 36
+3 22 94 38 116 40 72 95 40 114 65 60 65
+48 48 46 6 4 44 5 12 48 12 50 23 34
+38 43 59 41 3 28 42 57 45
+2 33 2 2 33 2 2 33 2
+11 50 41 98 67 90 17 2 66 32 116 29 58
+12 49 4 12 49 4 4 49 12 4 1 4 4
+4 20 26 27 36 40 1 51 28
+0 1 0 0 0 1 0 0 1
+18 37 37 16 36 35 14
+49 31 31 31 49 9 9
+99 59 21 60 112 126 56 36 100 58 34 99 4
+8 23 8 14 22 46 23 23 23 8 30 8 23
+13 34 29 28 16 20 17
+36 40 40 40 36 36 36
+9 68 22 116 21 113 71 81 17 26 29 18 110
+18 18 33 18 28 18 33 15 18 28 15 3 28
+3 4 3
+21 21 11
+75 43 38 42 50 41 44 90 64 64 1
+41 41 41 41 41 41 41 41 41 41 41
+4 6 1 10 10
+14 42 14 6 45
+9 77 14 125 169 122 154 50 147 63 38 162 35 108 87
+29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+38 35 78 74 59 59 57 32 4 6 14
+26 18 17 18 26 35 35 35 44 17 26
+104 78 75 81 38 37 4 18 15 72 110 9 3
+32 40 21 42 15 40 15 35 21 21 21 34 15
+23 22 26 14 26 24 34
+9 32 29 29 9 9 32
+37 79 108 64 41 96 105 17 29 66 42 158 90 21 147
+30 17 3 24 1 42 16 3 30 3 4 32 9 16 16
+33 162 110 125 65 54 147 120 39 53 117 100 134 79 74
+2 2 5 5 2 5 5 5 11 5 5 2 11 11 5
+32 56 50 58 52 29 20 38 21
+2 4 2 47 34 2 18 47 34
+8 12 17 16 14
+28 49 49 39 49
+1 22 35 4 15 12 22
+44 11 21 40 21 40 21
+39 43 44 38 18 24 39 52 17
+24 23 23 24 23 18 24 24 24
+128 150 40 27 38 34 53 12 98 85 110 2 104 78 144
+8 7 43 31 8 43 31 8 7 8 8 31 7 8 9
+94 30 85 82 8 4 124 74 123 110 26 57 78
+37 37 37 9 37 37 30 37 37 9 9 30 30
+35 11 34 54 27 27 23 43 40
+24 12 40 9 41 40 24 10 12
+14 98 29 72 43 119 96 63 25 114 103 94 124
+37 49 37 12 35 49 41 9 35 9 30 30 35
+38 45 41 23 2 62 3 47 76 2 48
+25 25 25 17 25 17 17 25 25 25 17
+14 88 122 46 43 111 78 112 102 56 117 46 114
+0 4 43 43 4 4 0 4 43 0 0 17 0
+2 10 11 16 12
+22 44 3 22 3
+6 3 2
+34 34 5
+13 7 17 18 1
+27 27 27 23 27
+40 12 51 33 59 19 46 16 54
+43 4 43 4 43 4 4 4 12
+10 5 10 6 7
+0 21 0 9 0
+32 2 37 1 34 27 20
+28 28 28 28 28 28 28
+17 18 6 19 16
+8 36 26 8 30
+19 30 17 11 21 31 13
+8 11 11 19 8 19 11
+1 1 2
+34 34 34
+17 18 13 17 3
+32 4 4 4 4
+29 74 40 38 20 142 34 116 27 169 63 94 21 110 62
+27 0 27 44 0 38 27 44 38 47 20 0 11 34 22
+80 64 62 30 80 20 75 3 34 4 40
+8 0 6 18 8 18 11 8 35 18 18
+6 4 14 12 9
+47 28 47 14 47
+62 46 61 72 62 47 58 43 67 15 81 105 120
+33 7 1 1 40 0 40 0 0 24 33 24 7
+1 1 3
+11 11 11
+2 1 7
+12 12 12
+9 10 13 2 5
+17 49 4 5 4
+8 50 61 61 42 30 1 59 8
+34 25 16 24 38 4 25 38 46
+11 24 33 35 28 1 24
+16 16 16 16 16 16 16
diff --git a/codejam_2008/src/y2008beta/d.rs b/codejam_2008/src/y2008beta/d.rs
new file mode 100644
index 0000000..58ae186
--- /dev/null
+++ b/codejam_2008/src/y2008beta/d.rs
@@ -0,0 +1,45 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+
+
+
+/*
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["D-small-practice", "D-large-practice"],
+        "y2008beta",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let positions = reader.read_num_line();
+                let values = reader.read_num_line();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(
+                        positions.as_slice(),
+                        values.as_slice()
+                    )
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(positions: &[u16], values: &[u16]) -> u16
+{
+
+    47
+}
diff --git a/codejam_2008/src/y2008beta/mod.rs b/codejam_2008/src/y2008beta/mod.rs
index 4f053df..890df60 100644
--- a/codejam_2008/src/y2008beta/mod.rs
+++ b/codejam_2008/src/y2008beta/mod.rs
@@ -1,3 +1,4 @@
 pub mod a;
 pub mod b;
 pub mod c;
+pub mod d;
\ No newline at end of file

From 9b88135bbb790f991e7f20e0d0b83d65b0a0a6e0 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 14:04:14 -0300
Subject: [PATCH 025/122] hexagon d

---
 codejam_2008/Cargo.lock           | 57 ++++++++++++++++++++++
 codejam_2008/src/y2008beta/c.rs   | 31 ++++++------
 codejam_2008/src/y2008beta/d.rs   | 81 +++++++++++++++++++++++++++----
 codejam_2008/src/y2008beta/mod.rs |  2 +-
 4 files changed, 146 insertions(+), 25 deletions(-)

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index 87a4cf9..825a5de 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -67,6 +67,7 @@ dependencies = [
 name = "codejam_2008"
 version = "0.1.0"
 dependencies = [
+ "hungarian 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rust-algorithm-problems 0.1.0",
@@ -78,6 +79,11 @@ name = "either"
 version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "fixedbitset"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "fuchsia-cprng"
 version = "0.1.1"
@@ -96,11 +102,29 @@ name = "hamming"
 version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "hungarian"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ndarray 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "indexmap"
 version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "itertools"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "itertools"
 version = "0.8.0"
@@ -158,6 +182,17 @@ dependencies = [
  "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "ndarray"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-complex 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "num"
 version = "0.1.42"
@@ -177,6 +212,14 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "num-complex"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "num-complex"
 version = "0.2.1"
@@ -212,6 +255,14 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "num-traits"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "num-traits"
 version = "0.2.6"
@@ -447,10 +498,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
 "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
 "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
+"checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
 "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
 "checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592"
 "checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1"
+"checksum hungarian 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8470cba62a9b94b38a7fe45eb3ae3261b9b9b72d055a917b53fef9a2a3667ba7"
 "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d"
+"checksum itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d"
 "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
 "checksum libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)" = "e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047"
 "checksum libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "03c0bb6d5ce1b5cc6fd0578ec1cbc18c9d88b5b591a5c7c1d6c6175e266a0819"
@@ -458,12 +512,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
 "checksum matrixmultiply 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfed72d871629daa12b25af198f110e8095d7650f5f4c61c5bac28364604f9b"
 "checksum nalgebra 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f75ff2a99063281e23bc062bed0144a9c1f627f4ac00b060b378276d7cff1d83"
+"checksum ndarray 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0e3d24c5ba54015d7d5203ca6f00d4cc16c71042bf7f7be26f091236f390a16a"
 "checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
 "checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
+"checksum num-complex 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
 "checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8"
 "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
 "checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124"
 "checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10"
+"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
 "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
 "checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba"
 "checksum permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c"
diff --git a/codejam_2008/src/y2008beta/c.rs b/codejam_2008/src/y2008beta/c.rs
index d8136f0..8b9235d 100644
--- a/codejam_2008/src/y2008beta/c.rs
+++ b/codejam_2008/src/y2008beta/c.rs
@@ -12,10 +12,7 @@ Finding / enumerating all shortest paths
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "C-small-practice",
-            "C-large-practice"
-        ],
+        &["C-small-practice", "C-large-practice"],
         "y2008beta",
         |reader, buffer| {
             let t = reader.read_int();
@@ -34,7 +31,7 @@ pub fn solve_all_cases()
                     .collect();
 
                 if case_no > 1 {
-                   // continue;
+                    // continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -70,21 +67,22 @@ fn get_city_id(
     id
 }
 
-fn  find_all_shortest_paths <'a>(
+fn find_all_shortest_paths<'a>(
     dest_node: usize,
     //minimum distance
     dist: &Vec<Vec<u32>>,
     roads: &'a Vec<Road>,
-    paths: & mut Vec<Vec<&'a Road>>,
+    paths: &mut Vec<Vec<&'a Road>>,
 )
 {
     let min_dist = dist[0][dest_node];
 
     //seed the paths from the roads that start at the starting city
-    for road in roads
-        .iter()
-        .filter(|road| road.city_from == 0 && road.cost <= min_dist && min_dist - road.cost == dist[road.city_to][dest_node])
-    {
+    for road in roads.iter().filter(|road| {
+        road.city_from == 0
+            && road.cost <= min_dist
+            && min_dist - road.cost == dist[road.city_to][dest_node]
+    }) {
         paths.push(vec![road]);
     }
 
@@ -100,7 +98,10 @@ fn  find_all_shortest_paths <'a>(
             let source_node = last_road.city_to;
             let min_dist = dist[source_node][dest_node];
 
-            debug!("path_idx {} from {} min_dist {}", path_idx, source_node, min_dist);
+            debug!(
+                "path_idx {} from {} min_dist {}",
+                path_idx, source_node, min_dist
+            );
 
             for (idx, road) in roads
                 .iter()
@@ -212,15 +213,15 @@ fn solve(starting_city: &str, roads: &[(String, String, u32)]) -> Vec<f64>
         );
 
         for (paths_idx, path) in paths.iter().enumerate() {
-            debug!("Shortest path {} of {}", paths_idx+1, paths.len());
+            debug!("Shortest path {} of {}", paths_idx + 1, paths.len());
 
             for (path_idx, road) in path.iter().enumerate() {
                 //let road = &roads[*r_idx];
                 debug!(
                     "Path step #{} of {}.  Road #{}: {}/{} => {}/{} cost: {}",
-                    path_idx+1,
+                    path_idx + 1,
                     path.len(),
-                    road.road_id+1,
+                    road.road_id + 1,
                     road.city_from,
                     cities[road.city_from],
                     road.city_to,
diff --git a/codejam_2008/src/y2008beta/d.rs b/codejam_2008/src/y2008beta/d.rs
index 58ae186..f231a33 100644
--- a/codejam_2008/src/y2008beta/d.rs
+++ b/codejam_2008/src/y2008beta/d.rs
@@ -1,14 +1,14 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
 
-
-
 /*
 */
 pub fn solve_all_cases()
 {
     run_cases(
-        &["D-small-practice", "D-large-practice"],
+        &["D-small-practice",
+            //"D-large-practice"
+            ],
         "y2008beta",
         |reader, buffer| {
             let t = reader.read_int();
@@ -17,8 +17,8 @@ pub fn solve_all_cases()
                 let positions = reader.read_num_line();
                 let values = reader.read_num_line();
 
-                if case_no != 3 {
-                    // continue;
+                if case_no != 1 {
+                     continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -27,10 +27,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(
-                        positions.as_slice(),
-                        values.as_slice()
-                    )
+                    solve(positions.as_slice(), values.as_slice())
                 )
                 .unwrap();
             }
@@ -38,8 +35,74 @@ pub fn solve_all_cases()
     );
 }
 
+/*
+    #y is the row, 0 for origin
+    #x goes by 2's, each alternating row is offset
+
+    #diags are the longest lines in the hex / \ and --
+
+*/
+struct Hex
+{
+    x: i16,
+    y: i16,
+    label: u16,
+}
+
+impl Hex
+{
+    fn new(x: i16, y: i16, label: u16) -> Self
+    {
+        Hex { x, y, label }
+    }
+
+    //   	#Number of jumps from one hex to another
+    fn distance(&self, rhs: &Hex) -> i16
+    {
+        let lhs = self;
+        let cy = (lhs.y - rhs.y).abs(); //change in y
+        let cx = (lhs.x - rhs.x).abs(); //change in x
+        if cy > cx {
+            cy
+        } else {
+            (cy + (cx - cy) / 2)
+        } //  #each cy gives you a free x move.  Each jump is 2
+    }
+}
+//		@diag1, @diag2, @diag3 = -@x == @y, @x == @y, @y == 0
+
 fn solve(positions: &[u16], values: &[u16]) -> u16
 {
+    let hex_size = positions.len() as i16;
+    assert_eq!(values.len(), hex_size as usize);
+
+    let small_hex_row_len = (hex_size + 1) / 2;
+
+    debug!("S={} top/bottom row width={}", hex_size, small_hex_row_len);
+
+    let mut hex_num = 1;
+    let mut y = hex_size - small_hex_row_len;
+    let mut hexes = Vec::new();
+
+    let mut create_hexes = |row_len: i16| {
+        for x in (-(row_len - 1)..row_len).step_by(2) {
+            hexes.push(Hex::new(x, y, hex_num));
+            hex_num += 1;
+        }
+
+        y -= 1;
+    };
+
+    for row_len in small_hex_row_len..=hex_size {
+        create_hexes(row_len);
+    }
+
+    for row_len in (small_hex_row_len..=hex_size - 1).rev() {
+        create_hexes(row_len);
+    }
 
+    for h in hexes.iter() {
+        debug!("Hex x {} y {} label {}", h.x, h.y, h.label);
+    }
     47
 }
diff --git a/codejam_2008/src/y2008beta/mod.rs b/codejam_2008/src/y2008beta/mod.rs
index 890df60..f693abf 100644
--- a/codejam_2008/src/y2008beta/mod.rs
+++ b/codejam_2008/src/y2008beta/mod.rs
@@ -1,4 +1,4 @@
 pub mod a;
 pub mod b;
 pub mod c;
-pub mod d;
\ No newline at end of file
+pub mod d;

From 22be19eb1089aa1edfd834874b18d5d4b12ee7b4 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 14:29:39 -0300
Subject: [PATCH 026/122] small

---
 .../src/y2008beta/D-small-practice.out        | 100 ++++++++++++++++++
 codejam_2008/src/y2008beta/d.rs               |  61 +++++++++--
 2 files changed, 151 insertions(+), 10 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/D-small-practice.out

diff --git a/codejam_2008/src/y2008beta/D-small-practice.out b/codejam_2008/src/y2008beta/D-small-practice.out
new file mode 100644
index 0000000..c8fafab
--- /dev/null
+++ b/codejam_2008/src/y2008beta/D-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 5
+Case #2: 3
+Case #3: 6
+Case #4: 10
+Case #5: 14
+Case #6: 7
+Case #7: 10
+Case #8: 11
+Case #9: 6
+Case #10: 0
+Case #11: 1262
+Case #12: 32
+Case #13: 328
+Case #14: 811
+Case #15: 417
+Case #16: 930
+Case #17: 126
+Case #18: 114
+Case #19: 203
+Case #20: 1850
+Case #21: 50
+Case #22: 1244
+Case #23: 1604
+Case #24: 804
+Case #25: 110
+Case #26: 413
+Case #27: 1794
+Case #28: 141
+Case #29: 512
+Case #30: 360
+Case #31: 1055
+Case #32: 42
+Case #33: 860
+Case #34: 632
+Case #35: 84
+Case #36: 960
+Case #37: 693
+Case #38: 652
+Case #39: 490
+Case #40: 240
+Case #41: 713
+Case #42: 510
+Case #43: 32
+Case #44: 653
+Case #45: 90
+Case #46: 710
+Case #47: 390
+Case #48: 100
+Case #49: 27
+Case #50: 871
+Case #51: 558
+Case #52: 119
+Case #53: 898
+Case #54: 1085
+Case #55: 730
+Case #56: 222
+Case #57: 401
+Case #58: 2
+Case #59: 307
+Case #60: 790
+Case #61: 312
+Case #62: 818
+Case #63: 22
+Case #64: 861
+Case #65: 68
+Case #66: 1305
+Case #67: 662
+Case #68: 942
+Case #69: 181
+Case #70: 718
+Case #71: 239
+Case #72: 258
+Case #73: 186
+Case #74: 321
+Case #75: 274
+Case #76: 884
+Case #77: 1138
+Case #78: 180
+Case #79: 1175
+Case #80: 572
+Case #81: 495
+Case #82: 56
+Case #83: 34
+Case #84: 154
+Case #85: 248
+Case #86: 9
+Case #87: 196
+Case #88: 128
+Case #89: 120
+Case #90: 102
+Case #91: 24
+Case #92: 1411
+Case #93: 322
+Case #94: 122
+Case #95: 328
+Case #96: 33
+Case #97: 12
+Case #98: 26
+Case #99: 350
+Case #100: 160
diff --git a/codejam_2008/src/y2008beta/d.rs b/codejam_2008/src/y2008beta/d.rs
index f231a33..83a72ca 100644
--- a/codejam_2008/src/y2008beta/d.rs
+++ b/codejam_2008/src/y2008beta/d.rs
@@ -1,14 +1,16 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
+use hungarian::minimize;
 
 /*
 */
 pub fn solve_all_cases()
 {
     run_cases(
-        &["D-small-practice",
-            //"D-large-practice"
-            ],
+        &[
+            "D-small-practice",
+            "D-large-practice"
+        ],
         "y2008beta",
         |reader, buffer| {
             let t = reader.read_int();
@@ -18,7 +20,7 @@ pub fn solve_all_cases()
                 let values = reader.read_num_line();
 
                 if case_no != 1 {
-                     continue;
+                    //continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -42,26 +44,27 @@ pub fn solve_all_cases()
     #diags are the longest lines in the hex / \ and --
 
 */
+#[derive(Debug)]
 struct Hex
 {
     x: i16,
     y: i16,
-    label: u16,
+    label: usize,
 }
 
 impl Hex
 {
-    fn new(x: i16, y: i16, label: u16) -> Self
+    fn new(x: i16, y: i16, label: usize) -> Self
     {
         Hex { x, y, label }
     }
 
     //   	#Number of jumps from one hex to another
-    fn distance(&self, rhs: &Hex) -> i16
+    fn distance(&self, rhs: &Hex) -> u16
     {
         let lhs = self;
-        let cy = (lhs.y - rhs.y).abs(); //change in y
-        let cx = (lhs.x - rhs.x).abs(); //change in x
+        let cy = (lhs.y - rhs.y).abs() as u16; //change in y
+        let cx = (lhs.x - rhs.x).abs() as u16; //change in x
         if cy > cx {
             cy
         } else {
@@ -101,8 +104,46 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
         create_hexes(row_len);
     }
 
+    let diag1 = hexes.iter().filter(|h| h.x == h.y).collect();
+    let diag2 = hexes.iter().filter(|h| h.x == -h.y).collect();
+    let diag3 = hexes.iter().filter(|h| 0 == h.y).collect();
+
+    let diags: [Vec<&Hex>; 3] = [diag1, diag2, diag3];
+
+
     for h in hexes.iter() {
         debug!("Hex x {} y {} label {}", h.x, h.y, h.label);
     }
-    47
+
+    let min_cost: u16 = diags.iter().enumerate().map( | (d, diag)| {
+        debug!("Diag {} is {:?}", d, diag);
+
+        //create weight matrix
+         // Square matrix
+
+        let cost_matrix : Vec<u16> = (0..hex_size*hex_size).map( | row_col| {
+            let row = row_col / hex_size;
+            let col = row_col % hex_size;
+
+            let pos = positions[row as usize] as usize;
+            let cost = hexes[pos - 1].distance(diag[col as usize])  * values[row as usize] ;
+            assert_eq!(hexes[pos-1].label, pos);
+
+            cost
+        }).collect();
+
+
+
+        let assignment = minimize(&cost_matrix, hex_size as usize, hex_size as usize);
+
+        debug!("Assignment {:?}", assignment);
+
+        let cost = assignment.iter().enumerate().map( | (idx, choice) |
+            cost_matrix[ idx * hex_size as usize + choice.unwrap() ]
+        ).sum();
+
+        cost
+    }).min().unwrap();
+
+    min_cost
 }

From c2e70bc78a771114e85aaf189c135e8d1daace7e Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 15:26:16 -0300
Subject: [PATCH 027/122] clippy

---
 codejam_2008/src/main.rs                      |   5 +-
 .../src/y2008beta/D-large-practice.out        | 100 ++++++++++++++++++
 codejam_2008/src/y2008beta/a.rs               |   2 +-
 codejam_2008/src/y2008beta/b.rs               |   2 +-
 codejam_2008/src/y2008beta/c.rs               |   4 +-
 codejam_2008/src/y2008beta/d.rs               |  24 ++---
 .../src/y2008practice/A-small-practice.out    | 100 ++++++++++++++++++
 codejam_2008/src/y2008practice/b.rs           |   4 +-
 codejam_2008/src/y2008practice/c.rs           |   2 +-
 codejam_2008/src/y2008practice/d.rs           |   2 +-
 codejam_2008/src/y2008qual/b.rs               |   4 +-
 11 files changed, 226 insertions(+), 23 deletions(-)
 create mode 100644 codejam_2008/src/y2008beta/D-large-practice.out

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index c5d63bc..7a7ff89 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -35,6 +35,7 @@ pub fn run_y2008_round_beta()
     y2008beta::a::solve_all_cases();
     y2008beta::b::solve_all_cases();
     y2008beta::c::solve_all_cases();
+    y2008beta::d::solve_all_cases();
 }
 
 pub fn run_y2008_round_1a()
@@ -60,5 +61,7 @@ pub fn run_y2008_round2()
 fn main()
 {
     init_log();
-    y2008beta::d::solve_all_cases();
+    run_y2008_round_qual();
+    run_y2008_round_practice();
+    run_y2008_round_beta();
 }
diff --git a/codejam_2008/src/y2008beta/D-large-practice.out b/codejam_2008/src/y2008beta/D-large-practice.out
new file mode 100644
index 0000000..5e124d3
--- /dev/null
+++ b/codejam_2008/src/y2008beta/D-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 24117
+Case #2: 15688
+Case #3: 9557
+Case #4: 7388
+Case #5: 152
+Case #6: 10465
+Case #7: 1662
+Case #8: 12393
+Case #9: 806
+Case #10: 3453
+Case #11: 9390
+Case #12: 2727
+Case #13: 22422
+Case #14: 302
+Case #15: 8431
+Case #16: 108
+Case #17: 22041
+Case #18: 24395
+Case #19: 7372
+Case #20: 328
+Case #21: 20863
+Case #22: 21831
+Case #23: 5891
+Case #24: 21968
+Case #25: 17120
+Case #26: 4817
+Case #27: 14289
+Case #28: 12918
+Case #29: 2071
+Case #30: 18656
+Case #31: 2859
+Case #32: 880
+Case #33: 2719
+Case #34: 195
+Case #35: 10377
+Case #36: 1860
+Case #37: 1266
+Case #38: 17964
+Case #39: 16511
+Case #40: 333
+Case #41: 25129
+Case #42: 18534
+Case #43: 7203
+Case #44: 15581
+Case #45: 2809
+Case #46: 19778
+Case #47: 11801
+Case #48: 2469
+Case #49: 15463
+Case #50: 20755
+Case #51: 5318
+Case #52: 1659
+Case #53: 4915
+Case #54: 22205
+Case #55: 12835
+Case #56: 22683
+Case #57: 8384
+Case #58: 603
+Case #59: 4650
+Case #60: 27495
+Case #61: 11080
+Case #62: 409
+Case #63: 21336
+Case #64: 148
+Case #65: 7868
+Case #66: 16474
+Case #67: 1549
+Case #68: 3713
+Case #69: 19538
+Case #70: 6166
+Case #71: 3478
+Case #72: 11015
+Case #73: 20024
+Case #74: 13338
+Case #75: 549
+Case #76: 7174
+Case #77: 19381
+Case #78: 16991
+Case #79: 4190
+Case #80: 22602
+Case #81: 31270
+Case #82: 337
+Case #83: 9063
+Case #84: 3330
+Case #85: 1661
+Case #86: 7609
+Case #87: 22011
+Case #88: 21714
+Case #89: 13043
+Case #90: 13588
+Case #91: 29128
+Case #92: 2995
+Case #93: 708
+Case #94: 5688
+Case #95: 16541
+Case #96: 109
+Case #97: 15130
+Case #98: 12833
+Case #99: 17469
+Case #100: 21347
diff --git a/codejam_2008/src/y2008beta/a.rs b/codejam_2008/src/y2008beta/a.rs
index f2d64b2..3843b7a 100644
--- a/codejam_2008/src/y2008beta/a.rs
+++ b/codejam_2008/src/y2008beta/a.rs
@@ -90,7 +90,7 @@ fn solve(p1: &Vector2d<f64>, p2: &Vector2d<f64>, p3: &Vector2d<f64>) -> String
     angles.push(law_cosines(ab.len, bc.len, ac.len));
     angles.push(law_cosines(ac.len, bc.len, ab.len));
 
-    let desc1 = if ab.len == ac.len || ab.len == bc.len || ac.len == bc.len {
+    let desc1 = if (ab.len - ac.len).abs() < f64::EPSILON || (ab.len - bc.len).abs() < f64::EPSILON || (ac.len - bc.len).abs() < f64::EPSILON {
         "isosceles"
     } else {
         "scalene"
diff --git a/codejam_2008/src/y2008beta/b.rs b/codejam_2008/src/y2008beta/b.rs
index 19a73fc..731ad74 100644
--- a/codejam_2008/src/y2008beta/b.rs
+++ b/codejam_2008/src/y2008beta/b.rs
@@ -31,7 +31,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn lis(xs: &Vec<u8>) -> usize
+fn lis(xs: &[u8]) -> usize
 {
     let mut lis = Vec::new();
 
diff --git a/codejam_2008/src/y2008beta/c.rs b/codejam_2008/src/y2008beta/c.rs
index 8b9235d..9bb1bfb 100644
--- a/codejam_2008/src/y2008beta/c.rs
+++ b/codejam_2008/src/y2008beta/c.rs
@@ -70,8 +70,8 @@ fn get_city_id(
 fn find_all_shortest_paths<'a>(
     dest_node: usize,
     //minimum distance
-    dist: &Vec<Vec<u32>>,
-    roads: &'a Vec<Road>,
+    dist: &[Vec<u32>],
+    roads: &'a [Road],
     paths: &mut Vec<Vec<&'a Road>>,
 )
 {
diff --git a/codejam_2008/src/y2008beta/d.rs b/codejam_2008/src/y2008beta/d.rs
index 83a72ca..631ed26 100644
--- a/codejam_2008/src/y2008beta/d.rs
+++ b/codejam_2008/src/y2008beta/d.rs
@@ -3,6 +3,10 @@ use std::io::Write;
 use hungarian::minimize;
 
 /*
+Hungarian algorithm
+Munkres - Kuhn
+
+Hexagon board
 */
 pub fn solve_all_cases()
 {
@@ -72,11 +76,10 @@ impl Hex
         } //  #each cy gives you a free x move.  Each jump is 2
     }
 }
-//		@diag1, @diag2, @diag3 = -@x == @y, @x == @y, @y == 0
 
 fn solve(positions: &[u16], values: &[u16]) -> u16
 {
-    let hex_size = positions.len() as i16;
+    let hex_size: usize = positions.len();
     assert_eq!(values.len(), hex_size as usize);
 
     let small_hex_row_len = (hex_size + 1) / 2;
@@ -84,7 +87,7 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
     debug!("S={} top/bottom row width={}", hex_size, small_hex_row_len);
 
     let mut hex_num = 1;
-    let mut y = hex_size - small_hex_row_len;
+    let mut y = (hex_size - small_hex_row_len) as i16;
     let mut hexes = Vec::new();
 
     let mut create_hexes = |row_len: i16| {
@@ -97,11 +100,11 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
     };
 
     for row_len in small_hex_row_len..=hex_size {
-        create_hexes(row_len);
+        create_hexes(row_len as i16);
     }
 
     for row_len in (small_hex_row_len..=hex_size - 1).rev() {
-        create_hexes(row_len);
+        create_hexes(row_len as i16);
     }
 
     let diag1 = hexes.iter().filter(|h| h.x == h.y).collect();
@@ -110,7 +113,6 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
 
     let diags: [Vec<&Hex>; 3] = [diag1, diag2, diag3];
 
-
     for h in hexes.iter() {
         debug!("Hex x {} y {} label {}", h.x, h.y, h.label);
     }
@@ -119,10 +121,10 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
         debug!("Diag {} is {:?}", d, diag);
 
         //create weight matrix
-         // Square matrix
-
         let cost_matrix : Vec<u16> = (0..hex_size*hex_size).map( | row_col| {
+            //determines which initial pos/val
             let row = row_col / hex_size;
+            //determines where in the diagonal
             let col = row_col % hex_size;
 
             let pos = positions[row as usize] as usize;
@@ -138,11 +140,9 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
 
         debug!("Assignment {:?}", assignment);
 
-        let cost = assignment.iter().enumerate().map( | (idx, choice) |
+        assignment.iter().enumerate().map( | (idx, choice) |
             cost_matrix[ idx * hex_size as usize + choice.unwrap() ]
-        ).sum();
-
-        cost
+        ).sum()
     }).min().unwrap();
 
     min_cost
diff --git a/codejam_2008/src/y2008practice/A-small-practice.out b/codejam_2008/src/y2008practice/A-small-practice.out
index e69de29..1cdd1c2 100644
--- a/codejam_2008/src/y2008practice/A-small-practice.out
+++ b/codejam_2008/src/y2008practice/A-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: Foo
+Case #2: 9
+Case #3: 10011
+Case #4: JAM!
+Case #5: LLL
+Case #6: k7D
+Case #7: oe
+Case #8: **
+Case #9: \\[[
+Case #10: \AQ
+Case #11: Q
+Case #12: HDH
+Case #13: S
+Case #14: dX\
+Case #15: y"ty
+Case #16: Zj6
+Case #17: >
+Case #18: pY<
+Case #19: 5
+Case #20: {
+Case #21: /2
+Case #22: g
+Case #23: oGW
+Case #24: at}
+Case #25: /
+Case #26: yyly
+Case #27: }
+Case #28: m
+Case #29: i
+Case #30: z4x
+Case #31: JJzzzz
+Case #32: \5k
+Case #33: ?dI??
+Case #34: Y5
+Case #35: vsA
+Case #36: eN`
+Case #37: LK
+Case #38: ,
+Case #39: ;;U
+Case #40: @C
+Case #41: ua
+Case #42: I
+Case #43: +WW
+Case #44: gE
+Case #45: %
+Case #46: bw
+Case #47: m{
+Case #48: $$$H
+Case #49: ss}
+Case #50: -
+Case #51: ?}}}}
+Case #52: MM
+Case #53: \$Z
+Case #54: 6ZyZ
+Case #55: yeey
+Case #56: wwEE
+Case #57: yQ
+Case #58: q
+Case #59: --C
+Case #60: J
+Case #61: _ff_f_fff_
+Case #62: i
+Case #63: @@@@
+Case #64: ^77^77
+Case #65: [[E<
+Case #66: 1L
+Case #67: vv&v
+Case #68: =Z==ZZ==Z=
+Case #69: ~~Z
+Case #70: a
+Case #71: {BB
+Case #72: :``
+Case #73: >
+Case #74: 88
+Case #75: I
+Case #76: G
+Case #77: __*
+Case #78: Z`
+Case #79: LLL
+Case #80: &&
+Case #81: ccc
+Case #82: Y
+Case #83: AmAAAm
+Case #84: #g
+Case #85: N
+Case #86: DD)))D)D
+Case #87: ww
+Case #88: ]
+Case #89: //
+Case #90: >>>
+Case #91: s
+Case #92: w
+Case #93: ]
+Case #94: RrrR
+Case #95: &+&&&+
+Case #96: za!a
+Case #97: CC
+Case #98: g
+Case #99: v8
+Case #100: Xa
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
index 48748c4..1ecf948 100644
--- a/codejam_2008/src/y2008practice/b.rs
+++ b/codejam_2008/src/y2008practice/b.rs
@@ -38,7 +38,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(forward_path: &String, back_path: &String) -> String
+fn solve(forward_path: &str, back_path: &str) -> String
 {
     let zeropos = Vector2d::with_val(0, 0);
 
@@ -75,7 +75,7 @@ fn solve(forward_path: &String, back_path: &String) -> String
     };
 
     let mut handle_path =
-        |path: &String, initial_dir: Vector2d<i64>, initial_pos: Vector2d<i64>| {
+        |path: &str, initial_dir: Vector2d<i64>, initial_pos: Vector2d<i64>| {
             let mut dir = initial_dir;
             let mut pos = initial_pos;
             for ch in path.chars() {
diff --git a/codejam_2008/src/y2008practice/c.rs b/codejam_2008/src/y2008practice/c.rs
index ae6d60e..0f9753f 100644
--- a/codejam_2008/src/y2008practice/c.rs
+++ b/codejam_2008/src/y2008practice/c.rs
@@ -85,7 +85,7 @@ impl Fcomp
                 }
             };
 
-        if !ret_val.is_none() && ret_val.unwrap() > F_MAX_LIMIT {
+        if ret_val.is_some() && ret_val.unwrap() > F_MAX_LIMIT {
             ret_val = None;
         }
 
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index 1ce047c..9cf30a6 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -153,7 +153,7 @@ impl Store
 
     fn dist(&self, xp: i32, yp: i32) -> f64
     {
-        return Vector2d::with_val(self.x, self.y).pyth_distance(&Vector2d::with_val(xp, yp));
+        Vector2d::with_val(self.x, self.y).pyth_distance(&Vector2d::with_val(xp, yp))
     }
 }
 
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index 2fdfde6..45f3bad 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -24,9 +24,9 @@ pub fn solve_all_cases()
                 let read_times = |in_string: String| -> [usize; 2] {
                     [
                         &in_string[0..2].parse::<usize>().unwrap() * 60
-                            + &in_string[3..5].parse::<usize>().unwrap(),
+                            + in_string[3..5].parse::<usize>().unwrap(),
                         &in_string[6..8].parse::<usize>().unwrap() * 60
-                            + &in_string[9..11].parse::<usize>().unwrap(),
+                            + in_string[9..11].parse::<usize>().unwrap(),
                     ]
                 };
 

From e0ca1c45f3f3a0703c0789f230dcccbce408ffa2 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 15:29:53 -0300
Subject: [PATCH 028/122] clippy

---
 codejam_2008/src/main.rs        | 4 ++--
 codejam_2008/src/y2008qual/b.rs | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 7a7ff89..659589f 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -62,6 +62,6 @@ fn main()
 {
     init_log();
     run_y2008_round_qual();
-    run_y2008_round_practice();
-    run_y2008_round_beta();
+    //run_y2008_round_practice();
+   // run_y2008_round_beta();
 }
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index 45f3bad..d8b2109 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -24,9 +24,9 @@ pub fn solve_all_cases()
                 let read_times = |in_string: String| -> [usize; 2] {
                     [
                         &in_string[0..2].parse::<usize>().unwrap() * 60
-                            + in_string[3..5].parse::<usize>().unwrap(),
+                            + &in_string[3..5].parse::<usize>().unwrap(),
                         &in_string[6..8].parse::<usize>().unwrap() * 60
-                            + in_string[9..11].parse::<usize>().unwrap(),
+                            + &in_string[9..11].parse::<usize>().unwrap(),
                     ]
                 };
 
@@ -91,7 +91,7 @@ fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
     }
 
     debug!("Done find_required_trains {} ", trains_min.abs());
-    trains_min
+    trains_min.abs()
 }
 
 fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]]) -> [i64; 2]

From 7d4a56ffcd36fe196531d9c20b22de8edbc6b82b Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 15:37:56 -0300
Subject: [PATCH 029/122] clippy

---
 codejam_2008/src/main.rs            | 4 ++--
 codejam_2008/src/y2008beta/c.rs     | 4 ++--
 codejam_2008/src/y2008beta/d.rs     | 2 +-
 codejam_2008/src/y2008practice/a.rs | 8 ++++----
 codejam_2008/src/y2008practice/b.rs | 4 ++--
 codejam_2008/src/y2008practice/d.rs | 8 ++++----
 codejam_2008/src/y2008qual/b.rs     | 4 ++--
 7 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 659589f..7a7ff89 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -62,6 +62,6 @@ fn main()
 {
     init_log();
     run_y2008_round_qual();
-    //run_y2008_round_practice();
-   // run_y2008_round_beta();
+    run_y2008_round_practice();
+    run_y2008_round_beta();
 }
diff --git a/codejam_2008/src/y2008beta/c.rs b/codejam_2008/src/y2008beta/c.rs
index 9bb1bfb..3100bbe 100644
--- a/codejam_2008/src/y2008beta/c.rs
+++ b/codejam_2008/src/y2008beta/c.rs
@@ -172,8 +172,8 @@ fn solve(starting_city: &str, roads: &[(String, String, u32)]) -> Vec<f64>
         dist[r.city_from][r.city_to] = min(dist[r.city_from][r.city_to], r.cost);
     }
 
-    for k in 0..num_cities {
-        dist[k][k] = 0;
+    for (k, dist_k) in dist.iter_mut().enumerate() {
+        dist_k[k] = 0;
     }
     for k in 0..num_cities {
         for i in 0..num_cities {
diff --git a/codejam_2008/src/y2008beta/d.rs b/codejam_2008/src/y2008beta/d.rs
index 631ed26..c81208f 100644
--- a/codejam_2008/src/y2008beta/d.rs
+++ b/codejam_2008/src/y2008beta/d.rs
@@ -103,7 +103,7 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
         create_hexes(row_len as i16);
     }
 
-    for row_len in (small_hex_row_len..=hex_size - 1).rev() {
+    for row_len in (small_hex_row_len..hex_size).rev() {
         create_hexes(row_len as i16);
     }
 
diff --git a/codejam_2008/src/y2008practice/a.rs b/codejam_2008/src/y2008practice/a.rs
index 50f9474..e2f34f9 100644
--- a/codejam_2008/src/y2008practice/a.rs
+++ b/codejam_2008/src/y2008practice/a.rs
@@ -35,7 +35,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(alien_number: &String, source_lang: &String, target_lang: &String) -> String
+fn solve(alien_number: &str, source_lang: &str, target_lang: &str) -> String
 {
     let source_base = source_lang.len();
     let target_base = target_lang.len();
@@ -47,8 +47,8 @@ fn solve(alien_number: &String, source_lang: &String, target_lang: &String) -> S
         debug!("Digit is {}", digit);
         let digit_value = source_lang.chars().position(|ch| ch == digit).unwrap();
         debug!("Digit Value {}", digit_value);
-        al_converted =
-            al_converted + digit_value * source_base.pow((alien_number.len() - i - 1) as u32);
+        al_converted +=
+            digit_value * source_base.pow((alien_number.len() - i - 1) as u32);
     }
 
     debug!("Alien # converted is {}", al_converted);
@@ -58,7 +58,7 @@ fn solve(alien_number: &String, source_lang: &String, target_lang: &String) -> S
         let digit = al_converted % target_base;
         debug!("tlDigit {}", digit);
         tl_converted.push(target_lang.chars().skip(digit).take(1).next().unwrap());
-        al_converted = al_converted / target_base
+        al_converted /= target_base;
     }
 
     tl_converted.reverse();
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
index 1ecf948..50f8f87 100644
--- a/codejam_2008/src/y2008practice/b.rs
+++ b/codejam_2008/src/y2008practice/b.rs
@@ -54,12 +54,12 @@ fn solve(forward_path: &str, back_path: &str) -> String
             'W' => {
                 square_state
                     .entry(*pos)
-                    .or_insert_with(|| BitVec64::new())
+                    .or_insert_with(BitVec64::new)
                     .set(get_dir_index(dir), true);
                 *pos += *dir;
                 square_state
                     .entry(*pos)
-                    .or_insert_with(|| BitVec64::new())
+                    .or_insert_with( BitVec64::new)
                     .set(get_dir_index(&dir.rotate_rc_reverse()), true);
             }
             'R' => {
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index 9cf30a6..288aba6 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -54,7 +54,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                let ans = memo.doit(pg as f64, &is_perishable, &mut stores);
+                let ans = memo.doit(pg as f64, is_perishable, &mut stores);
 
                 writeln!(buffer, "Case #{}: {:.7}", case_no, ans).unwrap();
             }
@@ -174,7 +174,7 @@ impl Memo
             bcost: vec![vec![INVALID_COST; 1 << ni]; ns],
         }
     }
-    fn doit(&mut self, gp: f64, per: &BitVec64, sts: &mut Vec<Store>) -> f64
+    fn doit(&mut self, gp: f64, per: BitVec64, sts: &mut Vec<Store>) -> f64
     {
         let ni = sts[0].prices.len();
         //let ns = sts.len();
@@ -209,7 +209,7 @@ impl Memo
             let keep: Vec<bool> = store
                 .stk
                 .iter()
-                .map(|&item_idx| store.prices[item_idx] as f64 <= chp[item_idx])
+                .map(|&item_idx| f64::from(store.prices[item_idx]) <= chp[item_idx])
                 .collect();
 
             for (j, k) in keep.iter().enumerate().rev() {
@@ -268,7 +268,7 @@ impl Memo
                             continue;
                         }
 
-                        cost += store.prices[item_index] as f64;
+                        cost += f64::from(store.prices[item_index]);
 
                         nm.set(item_index, true);
                         if per.get(item_index) {
diff --git a/codejam_2008/src/y2008qual/b.rs b/codejam_2008/src/y2008qual/b.rs
index d8b2109..e6a1c2d 100644
--- a/codejam_2008/src/y2008qual/b.rs
+++ b/codejam_2008/src/y2008qual/b.rs
@@ -24,9 +24,9 @@ pub fn solve_all_cases()
                 let read_times = |in_string: String| -> [usize; 2] {
                     [
                         &in_string[0..2].parse::<usize>().unwrap() * 60
-                            + &in_string[3..5].parse::<usize>().unwrap(),
+                            + in_string[3..5].parse::<usize>().unwrap(),
                         &in_string[6..8].parse::<usize>().unwrap() * 60
-                            + &in_string[9..11].parse::<usize>().unwrap(),
+                            + in_string[9..11].parse::<usize>().unwrap(),
                     ]
                 };
 

From ab927938e06c75938c259bf357ec86b7ba12bbe4 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 17:07:27 -0300
Subject: [PATCH 030/122] clippy

---
 codejam_2008/.vscode/launch.json    | 20 ++++++++
 codejam_2008/.vscode/settings.json  |  7 +++
 codejam_2008/.vscode/tasks.json     | 34 ++++++++++++++
 codejam_2008/src/main.rs            |  1 +
 codejam_2008/src/y2008beta/a.rs     |  5 +-
 codejam_2008/src/y2008beta/d.rs     | 68 ++++++++++++++-------------
 codejam_2008/src/y2008practice/a.rs |  3 +-
 codejam_2008/src/y2008practice/b.rs | 19 ++++----
 codejam_2008/src/y2008practice/c.rs | 15 +++---
 codejam_2008/src/y2008practice/d.rs | 72 +++++++++++++++++------------
 10 files changed, 161 insertions(+), 83 deletions(-)
 create mode 100644 codejam_2008/.vscode/launch.json
 create mode 100644 codejam_2008/.vscode/settings.json
 create mode 100644 codejam_2008/.vscode/tasks.json

diff --git a/codejam_2008/.vscode/launch.json b/codejam_2008/.vscode/launch.json
new file mode 100644
index 0000000..fe2e699
--- /dev/null
+++ b/codejam_2008/.vscode/launch.json
@@ -0,0 +1,20 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "(Windows) Launch",
+            "type": "cppvsdbg",
+            "request": "launch",
+            "preLaunchTask": "cargo build",
+            "program": "${workspaceFolder}/target/debug/codejam_2008.exe",                        
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": true
+        }
+    ]
+}
\ No newline at end of file
diff --git a/codejam_2008/.vscode/settings.json b/codejam_2008/.vscode/settings.json
new file mode 100644
index 0000000..23eea89
--- /dev/null
+++ b/codejam_2008/.vscode/settings.json
@@ -0,0 +1,7 @@
+{
+    "files.autoSave": "onFocusChange",
+    "editor.autoClosingBrackets": "never",
+    "debug.allowBreakpointsEverywhere": true,
+    "rust.clippy_preference": "on",
+    
+}
\ No newline at end of file
diff --git a/codejam_2008/.vscode/tasks.json b/codejam_2008/.vscode/tasks.json
new file mode 100644
index 0000000..e0a60fa
--- /dev/null
+++ b/codejam_2008/.vscode/tasks.json
@@ -0,0 +1,34 @@
+{
+    // See https://go.microsoft.com/fwlink/?LinkId=733558
+    // for the documentation about the tasks.json format
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "type": "cargo",
+            "label": "cargo build",
+            "command": "cargo",
+            "args": [
+                "build"
+            ],
+            "problemMatcher": [
+                "$rustc"
+            ],
+            "group": {
+                "kind": "build",
+                "isDefault": true
+            }
+        },
+        {
+            "type": "cargo",
+            "label": "cargo clippy",
+            "command": "cargo",
+            "args": [
+                "clippy"
+            ],
+            "problemMatcher": [
+                "$rustc"
+            ],
+            
+        }
+    ]
+}
\ No newline at end of file
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 7a7ff89..6ec0ad0 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -1,4 +1,5 @@
 //#![allow(non_snake_case)]
+
 mod y2008beta;
 mod y2008practice;
 mod y2008qual;
diff --git a/codejam_2008/src/y2008beta/a.rs b/codejam_2008/src/y2008beta/a.rs
index 3843b7a..cae716b 100644
--- a/codejam_2008/src/y2008beta/a.rs
+++ b/codejam_2008/src/y2008beta/a.rs
@@ -90,7 +90,10 @@ fn solve(p1: &Vector2d<f64>, p2: &Vector2d<f64>, p3: &Vector2d<f64>) -> String
     angles.push(law_cosines(ab.len, bc.len, ac.len));
     angles.push(law_cosines(ac.len, bc.len, ab.len));
 
-    let desc1 = if (ab.len - ac.len).abs() < f64::EPSILON || (ab.len - bc.len).abs() < f64::EPSILON || (ac.len - bc.len).abs() < f64::EPSILON {
+    let desc1 = if (ab.len - ac.len).abs() < f64::EPSILON
+        || (ab.len - bc.len).abs() < f64::EPSILON
+        || (ac.len - bc.len).abs() < f64::EPSILON
+    {
         "isosceles"
     } else {
         "scalene"
diff --git a/codejam_2008/src/y2008beta/d.rs b/codejam_2008/src/y2008beta/d.rs
index c81208f..eb3dd1f 100644
--- a/codejam_2008/src/y2008beta/d.rs
+++ b/codejam_2008/src/y2008beta/d.rs
@@ -1,6 +1,6 @@
 use codejam::util::codejam::run_cases;
-use std::io::Write;
 use hungarian::minimize;
+use std::io::Write;
 
 /*
 Hungarian algorithm
@@ -11,10 +11,7 @@ Hexagon board
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "D-small-practice",
-            "D-large-practice"
-        ],
+        &["D-small-practice", "D-large-practice"],
         "y2008beta",
         |reader, buffer| {
             let t = reader.read_int();
@@ -117,33 +114,40 @@ fn solve(positions: &[u16], values: &[u16]) -> u16
         debug!("Hex x {} y {} label {}", h.x, h.y, h.label);
     }
 
-    let min_cost: u16 = diags.iter().enumerate().map( | (d, diag)| {
-        debug!("Diag {} is {:?}", d, diag);
-
-        //create weight matrix
-        let cost_matrix : Vec<u16> = (0..hex_size*hex_size).map( | row_col| {
-            //determines which initial pos/val
-            let row = row_col / hex_size;
-            //determines where in the diagonal
-            let col = row_col % hex_size;
-
-            let pos = positions[row as usize] as usize;
-            let cost = hexes[pos - 1].distance(diag[col as usize])  * values[row as usize] ;
-            assert_eq!(hexes[pos-1].label, pos);
-
-            cost
-        }).collect();
-
-
-
-        let assignment = minimize(&cost_matrix, hex_size as usize, hex_size as usize);
-
-        debug!("Assignment {:?}", assignment);
-
-        assignment.iter().enumerate().map( | (idx, choice) |
-            cost_matrix[ idx * hex_size as usize + choice.unwrap() ]
-        ).sum()
-    }).min().unwrap();
+    let min_cost: u16 = diags
+        .iter()
+        .enumerate()
+        .map(|(d, diag)| {
+            debug!("Diag {} is {:?}", d, diag);
+
+            //create weight matrix
+            let cost_matrix: Vec<u16> = (0..hex_size * hex_size)
+                .map(|row_col| {
+                    //determines which initial pos/val
+                    let row = row_col / hex_size;
+                    //determines where in the diagonal
+                    let col = row_col % hex_size;
+
+                    let pos = positions[row as usize] as usize;
+                    let cost = hexes[pos - 1].distance(diag[col as usize]) * values[row as usize];
+                    assert_eq!(hexes[pos - 1].label, pos);
+
+                    cost
+                })
+                .collect();
+
+            let assignment = minimize(&cost_matrix, hex_size as usize, hex_size as usize);
+
+            debug!("Assignment {:?}", assignment);
+
+            assignment
+                .iter()
+                .enumerate()
+                .map(|(idx, choice)| cost_matrix[idx * hex_size as usize + choice.unwrap()])
+                .sum()
+        })
+        .min()
+        .unwrap();
 
     min_cost
 }
diff --git a/codejam_2008/src/y2008practice/a.rs b/codejam_2008/src/y2008practice/a.rs
index e2f34f9..15a37bf 100644
--- a/codejam_2008/src/y2008practice/a.rs
+++ b/codejam_2008/src/y2008practice/a.rs
@@ -47,8 +47,7 @@ fn solve(alien_number: &str, source_lang: &str, target_lang: &str) -> String
         debug!("Digit is {}", digit);
         let digit_value = source_lang.chars().position(|ch| ch == digit).unwrap();
         debug!("Digit Value {}", digit_value);
-        al_converted +=
-            digit_value * source_base.pow((alien_number.len() - i - 1) as u32);
+        al_converted += digit_value * source_base.pow((alien_number.len() - i - 1) as u32);
     }
 
     debug!("Alien # converted is {}", al_converted);
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
index 50f8f87..0317f77 100644
--- a/codejam_2008/src/y2008practice/b.rs
+++ b/codejam_2008/src/y2008practice/b.rs
@@ -59,7 +59,7 @@ fn solve(forward_path: &str, back_path: &str) -> String
                 *pos += *dir;
                 square_state
                     .entry(*pos)
-                    .or_insert_with( BitVec64::new)
+                    .or_insert_with(BitVec64::new)
                     .set(get_dir_index(&dir.rotate_rc_reverse()), true);
             }
             'R' => {
@@ -74,15 +74,14 @@ fn solve(forward_path: &str, back_path: &str) -> String
         debug!("Current pos {:?}, direction {:?}", pos, dir);
     };
 
-    let mut handle_path =
-        |path: &str, initial_dir: Vector2d<i64>, initial_pos: Vector2d<i64>| {
-            let mut dir = initial_dir;
-            let mut pos = initial_pos;
-            for ch in path.chars() {
-                handle_step(ch, &mut dir, &mut pos);
-            }
-            (dir, pos)
-        };
+    let mut handle_path = |path: &str, initial_dir: Vector2d<i64>, initial_pos: Vector2d<i64>| {
+        let mut dir = initial_dir;
+        let mut pos = initial_pos;
+        for ch in path.chars() {
+            handle_step(ch, &mut dir, &mut pos);
+        }
+        (dir, pos)
+    };
 
     let (dir, pos) = handle_path(forward_path, SOUTH, Vector2d::with_val(0, 0));
     let mut dir = dir;
diff --git a/codejam_2008/src/y2008practice/c.rs b/codejam_2008/src/y2008practice/c.rs
index 0f9753f..7e6a816 100644
--- a/codejam_2008/src/y2008practice/c.rs
+++ b/codejam_2008/src/y2008practice/c.rs
@@ -63,15 +63,12 @@ impl Fcomp
             } else if b == 2 {
                 //#Happens to be the sum formula, since you can organize it like 5(if break) + 4 + 3 + 2 + 1
                 Some((d * (d + 1)) / 2)
-            } else if b > 2 && d >= 2954 {
-                None
-            } else if b > 3 && d >= 568 {
-                None
-            } else if b > 4 && d >= 221 {
-                None
-            } else if b >= 6 && d > 122 {
-                None
-            } else if b > 16 && d >= 33 {
+            } else if (b > 2 && d >= 2954)
+                || (b > 3 && d >= 568)
+                || (b > 4 && d >= 221)
+                || (b >= 6 && d > 122)
+                || (b > 16 && d >= 33)
+            {
                 None
             } else if d <= b {
                 Some(2u64.pow((d) as u32) - 1)
diff --git a/codejam_2008/src/y2008practice/d.rs b/codejam_2008/src/y2008practice/d.rs
index 288aba6..6f61ce9 100644
--- a/codejam_2008/src/y2008practice/d.rs
+++ b/codejam_2008/src/y2008practice/d.rs
@@ -29,7 +29,7 @@ pub fn solve_all_cases()
                 let mut is_perishable = BitVec64::new();
 
                 for i in items.iter_mut() {
-                    if i.chars().last().unwrap() == '!' {
+                    if i.ends_with('!') {
                         assert_eq!('!', i.remove(i.len() - 1));
                         is_perishable.set(items_map.len(), true);
                     }
@@ -132,7 +132,7 @@ struct Store
 
 impl Store
 {
-    fn new(s: &String, n: usize, items: &HashMap<String, usize>) -> Self
+    fn new(s: &str, n: usize, items: &HashMap<String, usize>) -> Self
     {
         let mut prices = vec![-1; n];
         let st: Vec<&str> = s.split(|c| c == ' ' || c == ':' || c == '\n').collect();
@@ -166,6 +166,45 @@ struct Memo
     bcost: Vec<Vec<f64>>,
 }
 
+//Lower bound is basically a round trip from the starting point
+fn calculate_lower_bound(ni: usize, gp: f64, sts: &[Store]) -> Vec<f64>
+{
+    //looks like the cheapest prices
+    let mut chp = vec![INVALID_COST; ni];
+
+    //0 is home
+    for store in sts.iter().skip(1) {
+        //gas cost
+        let gc = store.dist(0, 0) * 2. * gp;
+
+        for &item_idx in store.stk.iter() {
+            let tc = gc + f64::from(store.prices[item_idx]);
+            if tc < chp[item_idx] {
+                chp[item_idx] = tc;
+            }
+        }
+    }
+
+    chp
+}
+
+fn remove_non_optimal_items(sts: &mut Vec<Store>, chp: &[f64])
+{
+    for store in sts.iter_mut().skip(1) {
+        let keep: Vec<bool> = store
+            .stk
+            .iter()
+            .map(|&item_idx| f64::from(store.prices[item_idx]) <= chp[item_idx])
+            .collect();
+
+        for (j, k) in keep.iter().enumerate().rev() {
+            if !k {
+                store.stk.remove(j);
+            }
+        }
+    }
+}
+
 impl Memo
 {
     fn new(ns: usize, ni: usize) -> Self
@@ -183,20 +222,7 @@ impl Memo
 
         let mut ub = 0.0;
         //looks like the cheapest prices
-        let mut chp = vec![INVALID_COST; ni];
-
-        //0 is home
-        for store in sts.iter().skip(1) {
-            //gas cost
-            let gc = store.dist(0, 0) * 2. * gp;
-
-            for &item_idx in store.stk.iter() {
-                let tc = gc + store.prices[item_idx] as f64;
-                if tc < chp[item_idx] {
-                    chp[item_idx] = tc;
-                }
-            }
-        }
+        let chp = calculate_lower_bound(ni, gp, sts.as_slice());
 
         ub += chp.iter().sum::<f64>();
 
@@ -205,19 +231,7 @@ impl Memo
         self.bcost[0][all] = ub;
 
         //Remove items that are definitely not optimal
-        for store in sts.iter_mut().skip(1) {
-            let keep: Vec<bool> = store
-                .stk
-                .iter()
-                .map(|&item_idx| f64::from(store.prices[item_idx]) <= chp[item_idx])
-                .collect();
-
-            for (j, k) in keep.iter().enumerate().rev() {
-                if !k {
-                    store.stk.remove(j);
-                }
-            }
-        }
+        remove_non_optimal_items(sts, chp.as_slice());
 
         self.bcost[0][0] = 0.0;
         let mut pq = BinaryHeap::new();

From 885d2f9e731d36900fef0e789fc99504369173aa Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 17:17:57 -0300
Subject: [PATCH 031/122] clippy

---
 codejam/src/algo/prime/sieve.rs |  6 ++----
 codejam/src/util/bitvec64.rs    |  4 ++--
 codejam/src/util/input.rs       | 10 ++++++----
 codejam/src/util/vector_2d.rs   | 15 +++++++++------
 codejam_2008/.vscode/tasks.json | 13 +------------
 5 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/codejam/src/algo/prime/sieve.rs b/codejam/src/algo/prime/sieve.rs
index b705be7..37741aa 100644
--- a/codejam/src/algo/prime/sieve.rs
+++ b/codejam/src/algo/prime/sieve.rs
@@ -215,16 +215,14 @@ impl SieveOfAtkin
                         break;
                     }
 
-                    match self.tests.binary_search(&TestInteger {
+                    if let Ok(index) = self.tests.binary_search(&TestInteger {
                         value: n_square,
                         is_prime: true,
                     }) {
-                        Ok(index) => {
                             self.tests.get_mut(index)
                                     .expect("Attempted to get known index from tests vector. This shouldn't happen.")
                                     .set_prime(false);
-                        }
-                        Err(_) => (),
+                        
                     }
                 }
             }
diff --git a/codejam/src/util/bitvec64.rs b/codejam/src/util/bitvec64.rs
index aa9a373..8193977 100644
--- a/codejam/src/util/bitvec64.rs
+++ b/codejam/src/util/bitvec64.rs
@@ -20,7 +20,7 @@ impl BitVec64
         }
     }
 
-    pub fn get(&self, index: usize) -> bool
+    pub fn get(self, index: usize) -> bool
     {
         (self.data >> index) & 1 > 0
     }
@@ -35,7 +35,7 @@ impl BitVec64
         BitVec64 { data }
     }
 
-    pub fn pop_count(&self) -> u32
+    pub fn pop_count(self) -> u32
     {
         self.data.count_ones()
     }
diff --git a/codejam/src/util/input.rs b/codejam/src/util/input.rs
index d89bc74..6faa622 100644
--- a/codejam/src/util/input.rs
+++ b/codejam/src/util/input.rs
@@ -50,15 +50,17 @@ pub struct InputReader<'a>
     pub i: Input<'a>,
 }
 
-impl<'a> InputReader<'a>
-{
-    pub fn new() -> InputReader<'a>
-    {
+impl<'a> Default for InputReader<'a> {
+    fn default() -> Self {
         InputReader {
             s: String::new(),
             i: Input::console(),
         }
     }
+}
+
+impl<'a> InputReader<'a>
+{
 
     pub fn read_num_line<T>(&mut self) -> Vec<T>
     where
diff --git a/codejam/src/util/vector_2d.rs b/codejam/src/util/vector_2d.rs
index 29f240b..8da076f 100644
--- a/codejam/src/util/vector_2d.rs
+++ b/codejam/src/util/vector_2d.rs
@@ -12,14 +12,17 @@ pub struct Vector2d<T>
     pub data: [T; 2]
 }
 
-impl<T> Vector2d<T>
-{
-    pub fn new() -> Vector2d < T >
-    where
-    T: Default,
-    {
+
+impl<T> Default for Vector2d<T>
+where
+    T: Default {
+    fn default() -> Self {
         Vector2d { data: [Default::default(), Default::default()] }
     }
+}
+
+impl<T> Vector2d<T>
+{
 
     pub fn with_val(x: T, y: T) -> Vector2d < T >
 
diff --git a/codejam_2008/.vscode/tasks.json b/codejam_2008/.vscode/tasks.json
index e0a60fa..5f20dbc 100644
--- a/codejam_2008/.vscode/tasks.json
+++ b/codejam_2008/.vscode/tasks.json
@@ -18,17 +18,6 @@
                 "isDefault": true
             }
         },
-        {
-            "type": "cargo",
-            "label": "cargo clippy",
-            "command": "cargo",
-            "args": [
-                "clippy"
-            ],
-            "problemMatcher": [
-                "$rustc"
-            ],
-            
-        }
+        
     ]
 }
\ No newline at end of file

From 34c3312cc2c1e3822ae164ab45f8904bb932ea70 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 18 Feb 2019 17:40:50 -0300
Subject: [PATCH 032/122] a

---
 codejam/src/algo/prime/sieve.rs               |    4 +-
 codejam_2008/src/main.rs                      |   14 +-
 .../src/y2008round1a/A-large-practice.in      |   31 +
 .../src/y2008round1a/A-large-practice.out     |   10 +
 .../src/y2008round1a/A-small-practice.in      | 3001 +++++++++++++++++
 .../src/y2008round1a/A-small-practice.out     | 1000 ++++++
 codejam_2008/src/y2008round1a/a.rs            |   54 +
 codejam_2008/src/y2008round1a/mod.rs          |    1 +
 8 files changed, 4111 insertions(+), 4 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1a/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1a/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1a/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1a/A-small-practice.out
 create mode 100644 codejam_2008/src/y2008round1a/a.rs
 create mode 100644 codejam_2008/src/y2008round1a/mod.rs

diff --git a/codejam/src/algo/prime/sieve.rs b/codejam/src/algo/prime/sieve.rs
index 37741aa..c8c5c12 100644
--- a/codejam/src/algo/prime/sieve.rs
+++ b/codejam/src/algo/prime/sieve.rs
@@ -16,7 +16,7 @@ impl Squares
 {
     pub fn new(max: u64) -> Squares
     {
-        Squares { count: 0, max: max }
+        Squares { count: 0, max }
     }
 }
 
@@ -77,7 +77,7 @@ impl SieveOfAtkin
         }
         SieveOfAtkin {
             results: res,
-            tests: tests,
+            tests,
         }
     }
 
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 6ec0ad0..bacc6a2 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -3,6 +3,7 @@
 mod y2008beta;
 mod y2008practice;
 mod y2008qual;
+mod y2008round1a;
 
 extern crate codejam;
 
@@ -39,6 +40,13 @@ pub fn run_y2008_round_beta()
     y2008beta::d::solve_all_cases();
 }
 
+pub fn run_y2008_practice_contest()
+{
+    //https://code.google.com/codejam/contest/32004/dashboard#s=p2
+
+    //TODO
+}
+
 pub fn run_y2008_round_1a()
 {
 
@@ -62,7 +70,9 @@ pub fn run_y2008_round2()
 fn main()
 {
     init_log();
-    run_y2008_round_qual();
+
+    y2008round1a::a::solve_all_cases()
+ /*   run_y2008_round_qual();
     run_y2008_round_practice();
-    run_y2008_round_beta();
+    run_y2008_round_beta();*/
 }
diff --git a/codejam_2008/src/y2008round1a/A-large-practice.in b/codejam_2008/src/y2008round1a/A-large-practice.in
new file mode 100644
index 0000000..7c5c91f
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/A-large-practice.in
@@ -0,0 +1,31 @@
+10
+800
+99991 -99994 99999 99996 -99999 -99999 -99999 99994 -99993 -99999 99997 -99994 100000 -99998 99991 99991 100000 -99999 -99999 -99993 -99996 -99999 100000 99994 99991 100000 -99998 -99993 99999 -99991 99994 99992 -99995 -99996 -99994 99993 99996 99995 -99998 100000 -100000 -99991 99995 99995 99990 99990 99999 -99999 99998 -99997 -99990 -99999 100000 99998 99999 -99990 99990 -99999 -99999 -99993 100000 99997 99997 -99990 -99996 -99992 -99995 -100000 100000 99998 99997 -99999 99994 100000 -99999 -99994 -99995 -99999 99998 100000 -100000 -99996 99993 99997 99999 99994 99993 -99991 99990 -99991 -99997 99999 99999 -99990 99998 99991 99995 99992 99998 -99997 -99996 99994 99991 -99999 99997 99990 -99999 -99991 99992 -99993 -99995 -99991 99990 99994 99991 99994 99992 -99997 -99993 99996 -99991 99990 99998 -99993 -99993 -99997 -99992 99993 -99993 99996 99990 99993 -99993 99994 -99998 99991 -99990 99993 99994 -99993 99999 99995 -99996 -99993 -99994 99997 -99993 -99996 99993 -99999 99999 99998 99990 99996 99995 -100000 -99991 99997 99992 -99991 100000 99991 99998 100000 -99998 -99993 99993 -99993 99997 99993 99999 99992 99998 -99991 99992 -99991 99998 -99990 99990 -99996 -100000 100000 -99995 99999 -99991 100000 99990 99997 -99991 99997 99994 99992 99997 -100000 -99992 99997 -99991 99990 99995 -99990 99995 -99995 99990 99993 99990 -99995 -99991 99999 -99992 99990 -100000 99994 99998 100000 99995 99993 -99995 100000 99993 -99997 99991 99995 -99994 99996 -99993 -99996 -99991 99994 -100000 99992 99991 99990 99994 -99999 -100000 99994 -99992 -99991 99993 -99990 99993 99998 100000 99990 -99998 -99999 99993 99994 99996 -100000 99994 99992 99994 99996 99995 99994 -99996 99997 -99998 99990 -99993 99992 -99999 100000 -99993 -99992 99994 -99996 99994 -100000 99996 -99990 -99998 99996 -99995 99994 -99992 -99990 -99994 99991 -99991 -99992 99999 99991 99992 99999 99999 -99994 99993 99997 -99993 99992 99991 99997 99995 99995 -99991 99992 -99992 99991 99999 -99994 -99998 -99997 99991 99998 99995 99994 -99999 99991 100000 -99998 -99990 -99990 99991 -99993 -99995 100000 -100000 -99991 99994 -99999 -99992 -99993 99996 99990 -99994 -99991 99997 99995 -99992 -99998 99999 99994 99992 -99997 -99990 -99997 100000 -99995 -99992 -99998 -99995 -99996 99993 -99991 99991 -99995 -99992 99996 -99996 100000 -99998 99990 -99999 99994 -99991 -99999 99990 -99998 -99995 -99994 -99994 99998 -99995 -99996 -99991 99991 99990 -99993 -99996 99999 -99995 99993 100000 -99993 -99993 -99998 99996 -99995 99994 -99998 99995 99993 -99999 -99992 -99992 99990 -99993 99995 -99992 99996 -99995 -99999 99990 -99990 99997 -99994 99995 -100000 99994 99994 -99993 -99994 -99996 99991 99994 -99999 -99994 99992 99991 99992 99990 99997 -99999 99992 -99990 100000 -99993 -100000 -99995 99991 99992 99995 99990 -99997 -100000 99997 99994 100000 99993 -99994 -100000 100000 -99996 -99997 -99990 99992 -99998 -99993 99999 -99995 99991 99991 99994 99992 -99990 100000 100000 99995 -99995 99999 99991 -99999 -99997 99992 99995 -99996 99994 -99992 99999 -99993 -100000 -99996 -99998 99995 99996 99999 -99997 -99991 99992 -99990 -100000 -99992 -99999 99991 99992 -99995 99990 -99995 -99992 -99990 99990 99994 99997 -99999 -99993 99994 99999 -99990 99995 99990 -99990 -99993 -99993 -99991 100000 -99996 -99999 -100000 -99999 -99998 -99996 99991 99990 -99994 99991 99997 100000 99991 -99994 -99990 -100000 -99994 -99994 -99995 -99990 -99999 100000 100000 99990 99998 -99999 -99997 -99990 -99997 99994 -100000 -99992 -99990 -99995 99997 99998 99990 99990 -99994 -99994 -99993 -99991 -99991 100000 99991 -99996 99998 99993 99996 99996 -99995 99992 99994 99995 100000 -99996 99990 -99994 -99997 -99997 99993 -99998 99991 -99992 99992 -100000 99999 99993 99990 99995 -99994 -99994 -100000 -99995 99996 -99997 99990 99997 -99994 99999 99995 -99994 99994 -99994 100000 -99998 -99992 -99999 99995 99990 -99992 99994 -99999 99990 -100000 99991 -99992 99991 99996 99998 99990 99993 99992 99999 99997 -99992 99993 99996 99995 99990 -99997 -99999 99993 99991 -99990 99991 -100000 99990 99999 -99991 -99998 99995 -99993 100000 99995 99992 99992 -99998 99992 -99999 -99990 -99999 99990 -100000 99997 99997 -100000 99993 99993 -99995 -99999 99997 -100000 99999 99990 99996 99990 100000 -99999 -99990 -99993 99991 99994 -99990 99998 -99998 99994 99992 99999 -99996 99990 -99996 -99992 99998 -100000 -99996 -99999 99991 99995 -99997 -99998 99996 99995 -99993 99997 99999 99995 99996 -99999 -99993 -99997 -99996 99993 -99996 100000 99998 99993 -99995 -99993 -99996 -99999 99995 -99997 -99995 99993 -99999 -99992 99997 -99990 -99991 -100000 -99996 99992 -99999 -99992 -99995 99994 -99991 99990 -99991 -99996 99993 99995 -99994 99999 -99998 99996 99994 99990 -99992 99993 100000 -99998 99994 99999 -99999 -99992 -99996 99997 -99992 -99997 -99995 99996 99996 -99990 -99991 99991 99998 -99990 -99995 99998 -99990 -99996 -99992 -99992 100000 -99990 -99992 99998 99994 -99996 99994 -99995 -99996 99994 -99999 -99996 -99990 99995 -99994 -99994 -99997 99993 -99991 99993 -99995 100000 99995 99991 100000 -99990 -99992 -100000 -99994 99991 -99993 -99994 -99991 -99992 99997 99991 100000 -99998 -100000 99991 99999 -99994 100000 99990 99992 99992 -99993 99992 -99993 99999 -99999 99993 99995 -99997 99994 99996 -99990 -99999
+-99991 -99993 99993 -99997 -99995 99992 99998 -99990 99997 -99992 99999 99992 99993 -99995 -99990 99992 -99999 -99998 99998 99998 -99994 -99993 -99998 100000 -99998 -99997 99996 99994 -99993 100000 -99990 -100000 -100000 -99990 -99995 99992 -99994 -100000 -99997 -99997 -99999 99998 99994 -99992 99990 99999 99996 99991 99998 -99997 -99999 -99993 99992 -99998 99993 -99997 99994 99990 99990 100000 -99991 99993 99992 -99990 -99998 -99999 99998 -99999 99997 -100000 99990 99991 99999 99997 -99993 -99992 -99993 -99996 -99998 99996 -99992 -99991 99990 -99995 -99993 -99997 -99993 -99990 99997 -99992 99995 -99999 99997 99997 -99997 99995 99998 99990 99995 99991 99994 -99991 99996 -99994 -99997 99991 99993 99995 -99992 99991 99992 -99998 99992 99997 -99991 99990 -99995 -100000 -99991 100000 99999 99997 -99991 -99996 -99991 -99997 99997 99998 -99991 -99994 -99998 -99993 -99992 -99991 -99994 99999 -99998 -99995 -99998 -99999 -100000 99997 100000 99991 -99995 -100000 -99992 99999 -99994 99991 99998 -99995 99995 -99993 99997 99992 99997 99992 99994 -99995 99997 99990 100000 99995 99990 99993 99992 -99990 99995 99992 99994 99995 99990 -99994 -99993 -99993 -99997 -99991 99995 100000 100000 99998 -99990 99998 99992 99992 99990 99991 99998 -99991 99993 99992 99996 99995 -99998 -99992 99997 -99990 99997 99999 99998 99991 -99996 -99999 -99991 99997 -99993 -99994 -99998 -99991 -99994 -99990 -99993 -99996 99994 99997 -99996 -99998 99994 -99992 -99997 99998 99995 99999 99997 99999 99997 -99990 -99998 99994 99997 99990 -99999 -100000 -99990 -99993 -99999 -99992 -99994 99993 -99995 99991 -99999 -99990 -99994 99990 99998 99994 -99998 -99996 -100000 99990 99993 99995 -99990 99991 99994 -99990 100000 -99991 -99992 -100000 99991 -99990 -99990 -99995 -99996 99998 -99993 -99997 99999 -99998 -99993 -99994 99996 -99995 100000 99996 99991 100000 -99998 -99996 -99995 -99992 -99992 -99998 99991 99994 -99992 -100000 99991 99998 99991 -99992 99997 -99993 -99998 99995 99993 -99991 99996 -100000 99995 100000 99991 -99998 99998 -100000 99999 -99993 -99992 -99993 99994 -99998 -99996 -99991 -99993 99991 -99994 -99996 -99990 99994 -99995 -99996 -99996 -99998 -100000 99996 -99993 99996 -99991 99990 -99996 99997 -100000 -99997 -99993 -99993 99997 -99996 99990 99991 -99994 99990 99995 -99991 99998 -99998 99993 -99992 99990 -100000 99992 -99996 -100000 -99990 -99991 -100000 99990 -99993 -99997 99994 -99998 99994 99994 -99991 -99998 100000 -99993 100000 -99994 99998 99990 99998 99996 99997 -99998 -99994 -99991 99997 -99997 -99994 99992 99996 100000 -99998 99993 99998 -99999 -99997 99997 -99995 99994 99990 -99999 -99994 99995 99990 99990 99990 -99996 -99999 99992 -99993 99994 100000 -99992 99998 -99994 99993 99991 99993 99990 -99991 99990 -99997 -99995 -100000 -99991 -99995 99998 99999 -99996 -99991 99995 -99996 -99990 99993 -99991 100000 99997 -99997 -99999 99991 99996 -99992 99995 -99994 99995 99990 100000 100000 99991 -99998 -100000 -99990 -99993 99996 99995 -99994 -99998 -99998 -99997 -99992 99995 99997 99996 -99996 -99997 -99997 -99996 99994 100000 99995 99993 99995 99994 -99996 -99990 -99994 99999 -99990 -99999 99997 -100000 -99997 99990 -99998 99991 99996 99996 -99999 -99996 -100000 -99995 -99996 100000 99998 -99991 -99992 99991 99995 99995 99991 99993 -99990 -99995 -99998 -99995 99997 -99993 -99990 99999 99996 -99992 -99996 -99995 -99992 -99997 -99996 -99990 -99997 -99994 99995 -99990 -99998 -99993 99992 -99998 -99990 99990 99996 99993 99996 -99994 -99991 -99992 99998 -99990 -99990 99990 99991 -99995 99991 99990 -100000 -100000 99996 99999 99994 99990 99990 -99997 -99992 -99993 -100000 -99996 99996 -99991 -99991 99990 99995 -99995 -99991 99994 -99999 -99992 99995 99999 -99993 -99994 -99995 -99994 -99994 -99993 100000 99992 -99999 -99998 99993 -99998 99996 -99995 -99997 -99996 -99994 -99992 99999 100000 -99993 99996 -99998 -99997 99991 -99993 -99991 -99996 -99995 99994 -99991 -99997 99991 -100000 99999 -99992 99997 99992 99995 99997 -99991 -99997 100000 99996 -99996 99992 -99994 99990 -99991 99992 -100000 -100000 -99990 99995 99993 -99995 99997 99991 -99995 99999 -99998 99990 99996 -99992 99993 99996 99991 -99999 99999 -99995 -99995 -99997 100000 100000 -99999 99999 99994 99993 -99995 100000 99994 -99997 99995 -99991 -99994 99993 -99998 99994 -99991 99994 -99996 100000 -99994 -99995 -99993 -99997 -99992 99994 99996 99996 -99991 99990 99997 99995 99993 -99999 99997 -99990 99994 -99999 99991 99991 99992 -99991 -99993 99994 99996 99993 99995 -99998 99990 99996 -99996 -99998 -99995 -99994 -99992 99991 -99994 99992 -99990 99997 -99993 99992 -99992 99998 -99992 -99999 -99991 -99995 99990 -99996 100000 -99996 -99991 99998 -99991 99990 99993 -100000 -99992 99998 -99999 99998 -99992 -99993 99995 99995 -99996 99991 -99995 99999 99990 -99991 -99999 -99994 -99999 99997 99990 -99990 -99996 -99998 99994 99997 -99999 -99997 -99996 -99992 -99999 99992 -99991 99995 99999 -99992 99993 -99993 99997 -99994 99994 -99992 -99999 99996 99999 99999 -99995 -99995 -99995 -99995 -100000 99997 -99999 99991 99991 -99990 99995 99996 99994 99997 99999 99990 99996 -99999 -99994 99994 99990 -99998 -100000 99990 100000 99990 99991 99994 99994 -99991 -100000 -99996 -99990 99996 99994 99998 99992 -99994 99996 99997 99994 -99992 99990 -100000 -99997 99995 -99992
+800
+99997 99995 99997 99997 99991 99995 99999 99994 99990 99998 99997 99992 99992 99999 99992 99996 99993 99996 99993 99998 99995 99992 99995 99998 99998 99990 99993 99990 99997 99993 99994 99991 99991 99998 100000 99990 99994 99991 99991 99992 99999 99990 99992 99992 99995 99994 99998 99994 99997 99998 99996 99991 99993 99996 99996 99999 99992 99999 99997 99992 99992 100000 99999 99997 99990 100000 99992 100000 99991 99990 99995 99994 100000 99993 99998 99992 99992 99990 99998 99992 100000 99998 99993 99992 100000 99991 99991 99993 99992 99991 99999 99994 99998 99994 99993 99990 99998 99992 99993 99998 99998 99993 99992 99993 99999 99998 99990 99999 99991 99992 99996 99993 99994 99997 99997 99997 99994 99997 99996 99997 99996 100000 99996 99998 99995 100000 99995 99996 99995 99990 99991 99997 99994 99995 99990 99997 99992 99998 99992 99995 99990 99995 99998 99996 99990 99994 99996 99997 99990 99997 99993 99992 99995 100000 99994 99992 99998 99999 99999 99994 99998 99993 99994 99995 99992 99997 99990 99995 99990 99997 99991 99998 99992 99999 99996 99996 99994 99999 99996 99999 99993 99998 99997 99997 99998 100000 100000 99992 99997 99994 99999 99991 99992 99994 100000 99996 99991 99999 99997 99991 100000 99990 99998 99991 99991 100000 99991 99994 99999 99997 99994 99999 99991 99994 99995 99995 99997 99994 99992 99994 99998 99995 99999 99990 99994 99995 99990 99995 99992 99997 99995 99998 99994 99996 99995 99991 99995 99996 99997 99996 99997 99991 99995 99997 99991 99996 99997 99996 99998 99993 99993 99994 99998 99993 99994 99995 99994 100000 99993 100000 99994 99992 99992 99991 99999 100000 99996 99996 99993 99991 99993 99994 99996 99991 99991 100000 99994 99993 99997 99991 99991 99997 99990 99998 99991 99999 99997 99998 99990 99990 99997 99995 99995 99994 99997 99997 100000 99998 99995 99996 99996 99994 99991 99998 99999 99991 99993 99997 99994 99990 100000 99990 100000 99998 99996 99994 99993 99999 99995 99999 99993 99990 99999 99993 99990 99994 99993 99998 99993 99990 100000 99993 99990 99992 99996 99995 99998 99997 99999 100000 100000 99990 99992 99992 99991 99994 99992 99991 99992 99998 99991 99993 100000 99995 100000 99990 99994 99991 99993 100000 99995 99996 99999 100000 99990 99996 99997 99993 99994 99997 99998 100000 99997 99990 99994 99999 99990 99993 99999 99992 99992 99999 99996 99994 99990 99999 99990 99993 100000 100000 99991 99999 99990 99990 100000 99999 99990 100000 99994 99993 99994 99995 99999 99999 99996 99992 99990 99996 99995 99998 99993 99996 99996 99993 99999 99992 99993 99991 99997 99998 99992 99998 100000 99995 100000 99997 99996 99998 99998 99998 99998 99991 99997 99991 99993 99998 99993 99991 99998 99999 99994 99994 99991 99993 100000 99994 99999 99997 99997 99997 99999 99998 99998 99996 99990 100000 99992 99995 99992 99998 99994 99994 99990 99991 99990 99996 99994 99990 99995 99997 99993 99997 99999 99992 99995 99999 99990 100000 99994 99997 99998 99997 99993 99996 99996 99991 99994 99992 99990 99992 99994 99997 99994 99998 99998 99994 99997 99999 99996 100000 99995 99994 100000 99992 100000 99995 99990 99997 99999 99997 99995 99995 99997 99995 99998 99990 99996 99992 99991 99994 99991 99996 99995 99992 99990 99998 99993 99998 99996 100000 99996 99996 99995 99993 99992 99998 99995 99998 99990 99997 99999 99993 99994 99999 99990 99999 99997 99993 99992 99992 99990 99994 99996 99999 99991 99992 99994 99997 99993 99995 99995 99990 99990 99999 99992 99996 99997 100000 99994 99997 99998 99998 99992 99992 99999 99992 99995 99998 99991 99996 99993 99997 99991 99992 99991 99999 99994 99999 99991 99995 99995 99999 99995 99994 99999 100000 99992 99995 99992 99997 99993 99998 99994 99996 99996 99995 99991 99996 99997 99995 99994 99999 99990 99991 99991 100000 99993 99994 99992 99997 99998 99997 99998 100000 99994 99997 99998 99998 100000 100000 99994 99998 100000 99996 99998 99994 99990 99997 99994 99995 100000 99994 99990 99994 99996 99999 100000 99991 99994 99996 99993 100000 99993 100000 99993 99998 99991 99996 99997 99991 99999 99991 99991 100000 99992 99990 100000 99999 99992 99991 99991 99993 100000 99998 99994 99992 99993 99993 99997 99995 99997 99998 99998 99999 99996 99999 99999 99998 99995 99991 100000 99999 99992 99997 99990 99991 99993 99992 99994 100000 99996 99995 99995 99990 99994 99996 100000 99992 99991 99990 99999 99995 99996 99990 99999 99996 99990 99990 99994 99991 99992 99994 99999 99997 99996 99993 99998 99991 99998 99998 99996 99997 100000 99996 99991 99998 99997 99994 100000 99999 99996 99992 99991 99995 99993 99993 99996 99994 99991 99998 99998 99992 99992 99996 99991 99998 99996 99990 99994 99996 99995 99999 100000 99997 100000 99999 99997 99990 99997 100000 99993 99996 100000 99996 99990 99993 99993 99991 99999 99991 99991 99991 99999 99991 99993 99995 99996 99999 99990 99993 99990 99997 100000 99990 99995 99993 100000 99992 99997 99991
+100000 99996 99997 99995 99990 99991 99998 99999 99998 99990 99996 99996 99993 99997 99995 99992 99996 99996 99997 99996 99993 99995 99994 99996 99998 99991 99998 99990 99996 99997 99992 99992 99993 99995 99998 99999 99999 99992 99995 99997 100000 99996 99990 99995 99995 99998 99999 99992 99991 99996 99993 99993 99993 99993 99999 99999 99994 99996 99992 100000 99997 99999 100000 99995 99993 99990 99998 99992 99991 99997 99991 99999 99995 99992 99990 99991 99993 99992 99993 99993 99999 99998 99999 99998 99997 100000 99991 99997 99996 99998 99993 99997 99998 99994 99995 99998 99998 99993 99992 99992 99995 99996 99999 99993 99991 99994 99995 99999 100000 99991 100000 99992 99998 99997 100000 99994 99992 99997 99998 99997 99992 99994 99992 99995 99999 99992 99996 99990 100000 99995 100000 99991 99995 99997 99998 99996 99996 99992 99990 99993 99994 99998 100000 99990 99997 99998 99991 99991 99994 99997 99998 99997 99991 99998 99990 99994 99990 99999 99991 99998 99998 99996 99995 99997 100000 99999 99993 99994 99998 99994 99997 99996 99997 99991 100000 99993 99992 99997 99992 99993 99998 100000 99993 99998 99996 99994 99998 99993 100000 99997 99995 99998 99991 99995 99990 99999 99996 99994 99990 99997 99994 99991 99990 99999 99997 99999 99994 99998 99996 99996 99990 99999 99990 99999 99991 99994 99998 99990 99993 99992 99999 99991 99997 99992 99997 99991 99992 99991 99998 99993 99991 99991 99993 100000 100000 99994 99998 99994 99997 99999 99997 99998 99999 99999 99999 99993 99991 99993 99996 99992 100000 99993 99999 99997 99999 99996 99995 99990 99994 99997 99996 99994 99990 99990 99992 99991 99997 99991 99998 100000 99993 99996 99995 100000 99994 99992 99998 99996 99993 99995 99999 99991 99998 99994 99992 99993 100000 99990 99996 99991 99990 99990 99992 99999 99990 99996 100000 99992 99998 99998 99998 99994 99990 99998 99991 99998 99992 99990 99997 99998 99998 99991 100000 99997 99999 99990 99991 100000 99998 99991 99991 99995 99996 99996 99991 99996 99998 99996 99991 99993 99996 99994 99996 99995 99998 99992 99990 99996 99996 99994 99992 99996 99999 99996 99997 99996 99990 99997 99998 99997 99993 100000 99992 99990 99996 99999 99997 99997 99998 99991 99993 99998 99994 100000 99995 99994 99993 100000 99997 99996 99993 99998 100000 99994 99997 99997 100000 99996 99999 99991 99995 99990 99995 99998 99998 99992 99999 99994 99990 99990 99996 99995 99994 99994 99990 99995 99994 99991 100000 99990 99996 99995 99991 99991 99994 100000 99997 99991 99990 99995 99994 100000 99995 99995 99999 99995 99994 99991 99995 99999 99996 99990 100000 99999 99994 99997 99995 100000 99992 99990 99991 99994 99995 99993 99992 99991 99998 100000 99998 99996 99994 99999 99994 99992 99998 99993 99993 99992 100000 100000 99991 99992 99996 99990 99994 99999 99992 99990 99992 99992 99992 99990 99992 99999 99994 100000 99999 99996 99999 99991 99992 99992 99997 99998 99993 99999 99997 99999 99993 99997 99993 100000 99991 99994 100000 99998 100000 99998 99993 99995 99998 99991 99998 99991 99996 99990 99995 99994 99995 99995 99996 99996 99997 99993 99995 99997 99998 99993 99996 99991 99997 99993 100000 99992 99994 99999 100000 99999 99994 99998 99992 99996 99996 99992 99990 99990 100000 99992 99990 99990 99996 99999 99990 99993 99993 99992 99995 99992 99999 99991 99995 99993 99994 99998 99994 99991 100000 99992 99996 99992 100000 99998 99996 99997 100000 99997 100000 99996 99998 99998 100000 99996 99998 99995 100000 99995 100000 99998 99990 99995 99990 99992 99995 99994 99994 99995 99996 99991 99996 99996 99995 99990 99991 99996 99999 99994 99997 99995 99995 99997 99993 99990 99990 99995 99991 99992 99999 99990 99993 100000 99995 99991 99992 99998 99993 99992 99992 99993 99999 99992 99992 99995 99990 99994 99994 99996 99991 99996 99998 99998 99998 99998 99992 99993 99997 99998 100000 99992 99993 99993 99996 100000 99991 99995 99990 99993 99999 99994 99992 99995 99993 99992 99998 99997 99995 99990 99993 99994 99997 99996 99990 99999 99997 99993 99996 99995 99998 99997 99997 99996 100000 99995 99993 99993 99994 100000 99993 99998 99994 99996 99996 99996 99995 99993 99993 99999 99993 99994 99990 99993 99995 99999 99995 99995 99990 100000 99996 100000 99992 99997 99990 100000 99994 99994 99998 99991 99992 100000 99994 99994 100000 99998 99990 99999 99999 99997 99995 99990 99990 99996 100000 99996 99996 99991 99997 99997 99993 99996 99993 99990 99993 99992 99994 100000 99999 99990 99996 99992 100000 99997 99990 99990 99997 99997 99998 99996 99997 99990 99998 99994 99999 100000 99998 99992 99999 99996 99996 99990 99997 99998 99994 99990 99992 99993 99997 99990 100000 99993 99993 99998 99998 99990 99990 99990 99997 99995 99992 100000 99993 99991 99992 99990 99995 99993 99994 100000 99994 99998 100000 99994 99993 100000 99998 99995 99996 100000 99992 99993 99995 99995 100000 99992 99995 99992 99992 99997 99990 99993 99995 99997
+729
+3125 13315 31667 3524 -3437 77282 -58328 39224 9470 24155 71273 -19081 31847 -74752 -14953 14101 -498 70352 2885 -16602 18807 -41312 58054 -34161 -33120 25463 -15646 -86007 -26196 37104 29749 13047 33542 -68862 -97223 -39686 -41551 -10573 -15278 -4956 52380 -1000 -29664 -1710 25692 -22512 7941 -19220 14742 -99051 -27395 57824 51793 28483 -668 4944 -73157 -6350 -32409 29933 19156 15626 -77946 30022 -43953 4947 20738 -64414 61299 -21672 -2160 55713 72550 19889 65148 8860 92810 -3292 39367 1940 -23493 -65014 -97633 99088 84063 75698 -41710 20015 5022 -95860 -516 21082 -9346 95012 16903 26010 -70514 60221 70073 -12386 -24872 -3149 -17444 74429 -3425 35702 20611 -71153 24046 -32293 63405 60584 83139 -3696 9119 -14443 34681 11615 18710 58565 -88120 -24554 -51254 76044 -93860 9506 -94100 -11734 89814 8701 1549 -38164 18606 32350 33631 72375 26790 -7674 53844 -8173 -51125 -21119 47214 37383 16999 -12157 -52118 61279 -13278 53627 -57510 84194 -68632 488 24832 34391 -39531 41412 30337 18997 34065 -94283 -10812 68805 -2829 -61440 -19720 7642 28649 -27804 35052 -43047 86281 68223 19516 56230 78570 51391 -16231 -59706 41942 -34363 80 26 -13193 30625 -35885 12792 -19050 42034 -11712 -4392 36376 -39416 -20511 -57323 -4445 -9185 -32680 -85090 13974 -5736 -45074 -76427 -23555 50016 47817 3166 27612 -19929 -70584 -5092 -20838 34409 31164 29624 -26749 -48054 -6732 -376 -80375 30090 531 -20547 23110 -35731 -48804 -7655 -13945 13209 -23120 -87884 -33252 -69972 24946 22867 10313 -44163 53122 21120 5963 -5128 -90895 -38842 49843 23961 66119 -12430 56112 -86266 -78992 27786 63184 -86428 18887 -10299 32830 -78870 -662 22896 18511 91419 72715 83461 31767 -65618 10790 -58921 6193 99742 35485 66229 -3615 -73675 -62563 -34357 -21365 -17944 -78772 9250 35611 -51517 -87613 -8918 -2833 -32437 27922 -18730 -22525 -46962 -47703 -13716 -93294 36181 16193 32364 -88677 3502 66200 27227 81404 -25016 -3769 23517 -61955 50373 -14138 -35161 56878 -15211 -30103 -2969 -8146 10960 83558 21352 55745 32506 73061 -65705 71651 -60938 -29818 3481 -12004 86044 -13947 -4710 43809 68916 48088 1566 58888 15115 3819 58919 -38348 3986 -5879 22704 -24796 -74238 37208 79615 -50627 48267 -69894 -358 51349 53621 28011 13275 -7599 693 -6095 74282 61135 -74711 -15471 -6077 39411 59158 3734 -19611 -18143 -15642 15819 -28660 24658 76041 -69641 66746 24116 98048 42996 -29582 -66 -6577 -38735 20058 -30590 31890 9450 16196 -24214 25405 6726 45106 -28543 -8881 -19365 -2692 -12045 2638 -25926 -34390 -22347 36110 11181 -11242 -46196 -23776 21495 -12112 71647 -29489 86858 20913 64598 15879 -35657 -11754 -55573 66792 -1336 -2238 -16582 -18406 -2917 -6685 28352 -84993 -2849 -75249 65526 -22704 31799 -4247 -66584 -39602 -10398 -22391 -91654 -14701 -17289 -7574 16232 12437 -52036 -7217 -13169 50801 24378 -37127 -8673 12140 19595 6719 33364 -33431 74688 -48106 -28392 -22475 -62574 4183 22728 -20029 98550 -2476 -32974 15001 -4876 -32447 9684 -34841 -62969 85062 -68593 -1233 -33369 -28940 94263 -22517 -39287 47268 -70055 7103 1384 60033 -11781 9280 16108 11582 4175 25407 11803 48343 -53311 8108 29029 -15196 49690 -12893 -23479 -66457 -3253 63971 -51855 -34115 2789 1069 -14043 30231 43869 -52615 -4325 -79982 51132 21447 -44092 -63432 25743 -74913 46951 -27892 -13439 753 -32930 -30166 -11423 81859 16726 -6925 -8512 19281 -5713 -59884 65488 4376 57123 66928 -2027 -33906 16049 43746 86144 67500 -45073 40147 -3846 6826 -6360 -86237 4020 -29109 -42413 2158 11734 64648 -77140 -2278 46771 -58326 -11270 -25349 -71376 13656 23690 56242 3625 7927 -9386 -10339 8332 -17257 -10813 5387 -47630 -7667 18495 -12823 51387 1019 5540 -35197 -62469 -72846 6208 15170 -17964 3959 -25712 49488 20585 63724 -54642 9439 -42648 -74370 1468 15816 44298 17582 -11534 3720 20915 35756 59797 2527 -9915 -6344 3278 75452 46646 -23529 -44805 -83450 -28548 -14161 33775 -68190 -8104 76939 -27617 -14358 -9133 4183 -47705 -1963 -57614 37498 -5976 38491 -49837 -66177 -42660 51551 31651 17876 28816 -35992 78679 6285 -62396 74672 80936 12222 15305 29667 -21951 -31956 18177 31272 7562 324 23900 8980 48607 -1360 70649 41599 -20579 -28260 2230 -61840 -23179 -69568 -22599 -82787 -8307 28419 -55936 46850 -54909 30660 -18340 -794 -26420 -92638 -584 58688 21892 33411 80307 33124 20981 -38473 44905 67320 -57460 -56022 -21265 -16242 -15049 11088 -21402 39993 -45289 22972 57947 -72794 31338 -21238 85362 -19593 76285 60346 -24856 27992 -12334 -24917 -75772 -68576 -40916 90828 67466 32195 -16132 -27107 37081 -44818 38394 49519 -71635 -14263 -20948 -8236 -27693 16348 -25179 7078 72643 -37552 22880 -7184 83348 54416 8398
+5331 58178 912 -30013 -77801 -956 -38120 -54856 -45927 50001 -91754 -29595 -53429 55578 -13747 -15038 -13122 1314 14864 3626 57732 -11597 -6476 -16873 49310 -32459 1467 -19159 -16727 -29715 -11920 37155 21497 61041 25904 5386 -3238 14804 -14670 -4968 29041 57706 52186 -80121 -4328 -51810 97939 -5003 97110 -53320 -5372 -4321 43451 -29387 -27453 -12967 -4693 54336 -17007 -26956 39752 -16290 -25748 -10040 78888 -13365 -18574 -57720 40743 50238 -9127 13328 59116 15640 -21740 5161 52470 -9738 -57015 47387 -704 -33975 50574 20982 -20073 -2742 21238 -73487 -71951 -75600 -28870 56642 -4840 83364 -59509 14870 -16521 77541 87890 -12864 -18667 -16253 -27610 -69029 -67216 -50742 47284 45379 14789 9681 3751 39687 -60561 36605 3984 83040 4825 -40495 52059 -32050 -13214 2264 72656 -21549 -10277 36940 72237 -31658 -50438 3 -10415 -13123 90541 17014 87901 36998 21901 -5475 19842 -55125 62077 -4741 5284 22821 -806 -29262 -35059 10481 943 -21320 26473 -46240 66000 -34564 12618 -1589 -85660 31434 -39253 37542 15263 19809 -14620 -18661 -8399 8636 -11919 31179 47670 59136 -21788 87466 40307 10355 -52320 1325 55821 98990 -24576 92355 -12901 -9051 61688 -15698 -7148 -36368 29401 -64789 1145 9411 -28967 40020 -35520 4758 -53643 -18817 -1492 67002 -58627 -3659 48594 11157 15379 -38480 -2010 -1287 81504 -20679 11888 -14239 1119 -61586 38204 -6213 -15453 2358 -61551 -71185 -74089 21566 -33756 -72787 26625 31608 -52858 18173 -66858 -32748 22388 2424 -1906 58815 -47594 -61525 22490 79119 -24890 -27519 -16330 832 18724 2735 10594 -27577 -42996 27879 -27428 -58161 10141 -38152 14901 -73016 65055 59926 57226 -61685 -24880 -7492 -48110 -43445 42281 -31015 -5881 51494 -4642 25596 16231 84127 -43568 -56400 2215 55707 -42233 90379 7672 -48502 -99787 -14346 30257 1910 -54199 -51478 3101 17785 -25234 29271 27559 17933 -51965 -45417 -1719 28977 -20829 -45966 -1030 439 52369 54479 13173 -28298 8027 848 68164 -65922 26168 89525 -10360 13975 -89862 -10354 -8846 -90630 41157 22979 -5453 67865 -3898 -5717 -19851 10952 -14165 -90244 24306 31857 22623 -26844 26022 18177 -31131 5580 16347 568 52347 47307 3871 -8956 -2843 -23659 16922 1437 -3041 -2404 -40953 8803 -56956 -6607 27881 10076 -14989 41008 81768 14131 -4025 15090 18161 -21073 -57586 -9439 -84557 2040 -25263 -45604 -25085 11850 3692 36925 62217 -68094 59691 86886 -13068 -102 -61915 74246 -27051 -24103 35143 -67999 -17341 1719 57257 -20209 78077 65212 40267 -5907 36164 37927 47058 63509 32751 -13861 -92417 14961 -1596 41295 28313 68326 65379 -6499 51763 -75180 -93665 -7398 -39141 -51054 2040 -26042 32319 88185 -19814 48328 1281 -29856 -83023 -25672 -8645 16491 -69739 -28773 88743 -37257 -7621 24298 -82361 -14990 31168 -36753 -15851 -29914 36549 86231 -20694 -23475 -49438 -17287 -61034 -71679 6137 27406 18330 -10775 6875 -24614 60326 60571 68200 17609 -41205 57288 56471 -16482 -3567 -19573 1881 -9220 -31815 -64548 31729 -50317 9009 -35701 2575 3500 -33076 -35732 -21515 -16729 24410 -71884 8794 -28017 85729 52339 -48235 -46293 -8259 -901 71966 -78358 8237 -16113 33321 -60133 11260 30728 2878 4609 -6131 50885 56123 -17265 44953 -42525 -6716 -70711 -18972 24511 2321 42957 -77775 12505 -19775 -57119 -12723 -10040 75625 12756 23604 -44250 4199 -42627 42873 -77011 70405 -70281 -22727 -7296 -13205 -58236 17113 29249 41245 19957 21214 -45439 -85880 -28789 -2234 4043 63625 75201 -25160 8761 64227 2468 12410 -13399 61429 14859 61238 69245 29637 7787 77501 -14361 -4694 7101 22610 -16345 29015 1544 -11705 -7587 58420 -69539 35581 -23667 14257 14625 -13235 -32137 -23825 -23296 33677 11361 1153 -37534 43717 -2095 -25072 -52418 -83313 12697 29020 18891 30904 -9576 -58816 80909 23330 96596 -71655 23172 -67276 -6666 -7864 35969 -63444 37240 -5740 -11440 9654 11510 -44733 1037 -30225 -90423 28537 -18662 94198 6571 31334 -9425 20437 33650 15960 -15108 1231 -14700 -8587 25007 -40912 42318 16155 8125 52438 82572 41031 -63951 2326 23919 -43231 -42741 28059 -3547 -10574 5619 26625 10347 20215 9737 -48180 -63223 -11651 30228 22958 -99400 -62957 3259 64251 -37057 83827 -30951 44932 43194 -34183 -34623 -14839 -22817 -14038 -50016 -57401 34939 -68195 -50398 -3190 -20323 54759 -21282 -8163 -22651 -26590 34323 12288 -36775 22074 -56 33752 -31939 25430 -15096 79596 -967 33966 26276 -20414 -439 -21391 11827 -9856 26269 -1836 54473 33417 -42145 21571 -88687 87022 -16135 -4635 36831 78956 -58569 9766 -10573 -1321 -78355 753 23207 -53035 -62742 -78637 25945 34134 37141 3790 -37881 64380 8194 795 -38369 53245 70704 42529 28000 91530 -246 11714 45366 7356 -32832 -10475 -1954 -3980 -47711 18763 -46902 10761
+745
+-96549 23675 98785 -51305 77590 -59221 -69095 17093 -51234 97803 10728 -89651 76080 91214 -43247 36141 64685 -80268 -3167 85125 -88097 75193 17605 38998 -48922 -74912 43276 -21551 -88413 -85658 92461 -91099 97022 -98147 -81739 10737 57663 -34944 -90806 95608 88421 -65274 91892 -40158 -49955 56946 -57912 -48194 -60484 50442 93091 98067 42877 -72941 -3608 -86862 -78156 -98255 59817 -34117 -78286 79588 95670 34384 -72662 -91064 -85605 -37866 6304 67833 -89489 91539 -90424 -97719 94731 50014 -42220 88305 -24805 86662 98477 89359 51992 67409 94461 -83941 85384 -89676 -91697 -27692 73029 93762 72410 -29263 7426 -83469 1068 89377 86112 76641 31292 -78585 -13194 -65467 67397 82502 -64201 -16486 -86919 24152 -94460 89720 -68669 -83191 45769 2817 -88455 21333 -95766 -90467 -92012 -93357 -47336 49711 7193 94996 -95670 96982 -47499 -90102 -88281 50653 60731 78305 -45053 -99931 97580 -16010 -63264 -68044 77519 -47956 -89628 92751 81403 41106 -88819 -60408 -97700 -59109 -52048 -60072 -38279 97089 44641 53325 -64877 -77984 -32318 99632 -96885 48799 -87194 91291 58516 -71496 -80289 -11681 21430 76266 91806 -99765 24972 -63718 -44588 42590 -53567 87053 -32317 42669 -86944 -46568 49291 -87115 -74716 73431 89249 -63430 -82354 90462 59962 94028 -42393 47091 -42457 -90520 3051 -22649 83620 56238 -47181 -47404 -90109 91003 -75127 57189 97494 65342 -67903 90040 72506 64164 16457 -77739 53403 71994 -61211 -33278 52204 -73875 -76135 10622 -40020 898 24182 22252 56574 -50421 -13967 -33221 91818 61468 86459 34825 -77478 -48751 98884 -91910 -25843 42132 -77623 -91277 79509 36762 -95278 -72608 98017 -55240 23635 52137 85062 94102 -39243 -96095 -97541 -88565 94279 -85131 83129 64895 -64789 -92782 -31240 -94799 -69966 -96571 67733 -78479 85481 -49679 -75269 67967 -75122 -44913 78477 82105 90398 84074 91013 82836 -74443 -91625 -84406 -95129 -40360 -99272 57399 96690 88279 11383 1389 -37489 87639 2808 99330 -93867 8448 -91032 93550 -76768 -43843 -29573 38781 60094 75254 44235 -67885 -76119 -74066 -79019 21021 81492 98665 -94018 -77368 61762 65440 82678 -83953 -82983 -96751 51986 83596 -74474 -72563 -55233 91818 36495 85851 13334 60660 72556 -96890 -88653 -60701 -97986 98723 48852 -29235 78647 -86894 -89855 70989 -86830 -91377 93759 -57275 25359 -98015 96581 -27767 19372 97793 -82564 -15359 -52196 -28744 -68654 -84593 75699 -95389 66751 -57776 53060 68777 88926 -15476 -63807 -93106 43744 89353 99138 -85502 -97434 -89484 86466 17372 -67696 19753 -83381 -91532 -93974 28853 82285 -79145 34253 -5447 -84365 42999 -58667 -19674 -83593 -17086 -79512 -68416 81514 69213 92235 -68071 -90178 76115 75579 -50157 -57691 -84382 -59998 -10176 -63567 -78780 63050 79963 -40961 33460 201 34893 -92099 -83770 -31751 95714 -48978 -40623 78253 74959 29470 -8008 -3958 -58481 -10754 -96205 25914 65210 70614 -34198 -83467 87167 -79521 91280 43256 98600 68705 61504 35775 -36565 -61621 -91863 86079 -80380 66317 -90129 87287 -95616 -93865 -42563 25171 82462 65120 -80319 -62011 79682 76055 -77718 -93292 96972 -52061 -50876 88530 55128 -94573 -55733 83928 25622 67076 75836 86464 54726 73433 98777 78046 40800 -19562 -85780 -36763 -16885 89355 -50882 -26920 -98444 -88846 94591 -86985 79404 -42496 90632 84009 -74336 -78935 81297 92595 -81827 -56078 -86548 96107 5401 31828 71743 -43499 -39648 40412 -80066 92127 79596 -89013 74262 -80331 -59985 -65675 -85210 -97255 -68586 96209 98515 68804 -81616 -40656 -70625 -3149 87706 -28741 -48532 -68612 -62236 50673 -76539 93902 -90607 -88504 -82247 73657 160 -65656 -66405 -88609 67829 98973 2003 72111 -66369 -73743 76713 -98928 -22980 -85940 83086 -73510 17344 69742 -96711 23173 -77280 -91342 -47969 43600 59410 -35057 20995 -35952 31926 -76154 53049 -2815 42039 78479 -44001 58891 -70698 -18651 16222 34850 87515 96700 78312 99859 50693 -62418 -94323 -80998 98973 76763 98859 -92775 -32569 3298 95712 47865 84455 -79900 81172 -78007 11747 7444 53055 -85232 96321 40591 66128 86194 85881 22427 -31316 -71562 44963 -98290 -89045 61402 35203 -96150 -57132 -79460 -92369 -2732 -41441 89686 66257 -57990 22747 -98856 -91609 -61403 -99795 -38541 -42968 97216 -91386 91838 -78881 81545 85830 87914 60659 -42633 -92121 56315 -74973 41904 -94010 48685 -60900 11453 72960 -30325 -65500 -58272 -89145 -60178 96016 452 -2783 57424 49259 -95686 47758 -93623 93397 24941 82236 -77889 -3452 -86687 39886 28077 -48893 89883 96082 41207 15024 64502 43784 -53775 -24464 89131 38126 36828 -71508 4088 95620 -92926 77254 28114 -46033 45251 -76693 -72665 69563 55860 80638 -49121 -75905 -5722 93100 -71948 96325 -85247 -89512 35952 -66590 -52986 -24795 29689 -94470 63208 58544 -50367 -65859 -69647 99834 61485 58929 91805 -47116 26395 -95351 95854 -62204 97682 -85770 64796 30303 -55437 -99600 -47335 99507 -45034 -81287 82659 -56077 -97973 76516 -97262 -69066 44824 90161 47121 92646 87558 -89611
+-9678 79989 -70862 -55895 -80493 -84890 21276 71879 92056 -33690 -95068 81725 -89185 44761 -93239 95439 -41843 31851 -14884 84944 -8100 -39918 90807 82740 -83721 -11385 63937 80165 -37064 88633 -81269 -86790 66619 93825 85333 -70820 96414 -78514 -66452 -90732 -69029 76598 -77907 -83392 -75017 -87530 96896 -45052 73911 66626 -96343 -7780 -73046 -78235 -72831 41184 -40412 -81209 51204 55873 66311 20902 -58778 79937 77152 -81231 86841 -10006 83086 78094 -47788 55805 -96428 67228 -49987 28982 44696 -69136 99850 47305 43695 89619 -85643 -81679 70461 68911 -91021 72241 92754 86632 80830 -42807 -93593 -83945 77776 26 -71750 -80127 -71916 27115 88629 7383 43025 -95857 87099 -95690 -50029 -86486 51869 69133 -79378 -17002 21292 49150 -89986 99999 -95567 92292 65919 -5324 -69682 -75300 -40762 57144 15404 -91964 79524 74076 52615 -72287 59398 -9726 67257 -54266 -92645 -98040 88387 79473 -72302 -50958 88141 2026 73495 -68577 5224 -89531 96372 -90598 49962 61632 23222 31723 67337 -83987 96476 -89480 94407 -94227 85344 -90149 83463 -67357 98469 99872 49764 18317 70738 -12149 55366 -98041 66357 -91420 -60742 78849 -45107 71681 84953 82851 59283 -62807 85016 -88799 35338 -46118 56629 85512 -94966 59683 -20502 -17777 58752 66557 -97535 -82715 -87628 -69946 -89920 41114 75807 -93275 -27861 -78308 -46234 79662 -92127 85245 33320 -59129 -77874 -11732 99011 -93598 64645 54380 76154 15982 -88625 4618 -74444 -86511 -23246 -94583 -79443 98128 -52576 -85311 -91052 -44580 -9442 58315 80553 43551 -91037 -98988 92332 -6619 -99059 31184 -76856 84378 -8334 26388 51167 45029 -93280 71034 60566 89082 85497 29702 79296 -98070 68207 97446 -97385 8958 -14350 -89158 -73776 29841 95420 28624 86142 -96295 -42953 -82766 82706 -30322 -99307 -19060 47864 -10349 -80758 90238 29472 74188 74110 97781 71383 81525 30646 97182 -19595 73420 50469 20380 -73379 -48850 57662 -47941 55089 -89020 53846 18070 -96191 -98047 70855 55695 -81646 -25336 -58145 24543 -83384 92574 98577 -76191 -11611 72994 80905 -87289 -85639 55521 -97878 50854 -91082 -79122 -69702 -82633 -93957 -66624 42266 98623 50652 -74964 -98418 32487 97182 91218 -93094 56267 46063 -81379 45560 -55902 -17745 -33568 87135 -82222 21275 -30116 8893 93802 29090 66064 17942 61429 -720 54972 -23961 90006 -76394 49364 75338 -81225 64745 76095 88743 85765 76560 -89183 -53389 67830 -94127 904 -93643 24906 -54536 62430 -93552 -85451 -94396 -98297 -16175 93745 19928 -87023 99508 17548 44851 70923 -80360 74191 88621 -90840 -95476 -69470 -3899 96925 94878 -43728 -50099 -82123 -97735 -65760 97563 68779 -4392 -44763 46074 81196 -81830 97964 48790 12816 36018 93152 -39842 -24368 30095 -98367 45342 66569 -76739 -75994 -58067 -84153 -76607 -81658 94503 10338 -99647 79719 49172 -99156 91689 30200 60087 -45690 -89074 -96961 37692 -82911 -49555 -75296 -86295 -86990 81261 -62657 -95675 -29708 90940 96360 -80240 49490 61677 89184 72297 -85323 -37453 81499 65263 -64999 96297 52803 52655 -99511 33195 -89687 -32950 13692 -89382 39286 -93565 -91172 -91516 -87878 56361 -91136 -90438 -79057 46660 72203 -45084 -84604 22074 -75634 -95716 -74730 34336 -27484 78288 -31228 -89699 -84562 35590 16958 98035 -61848 74314 34101 59863 61757 -96039 -35942 74715 -65400 89716 -63487 81674 -57353 72344 27792 -83743 66055 87562 64095 -46352 82741 -64216 -42360 2926 -52320 -45253 -78373 -91052 -50459 -70075 -77037 9950 87044 65372 -85855 -16308 84327 99056 96988 49696 93431 -84504 -90812 18367 -28330 77882 -84905 91928 81305 -45992 36862 -79730 -80712 -98031 -80881 -15755 -53375 52794 60156 -87977 -81318 67778 80302 82416 -96985 84021 91826 -28582 -85443 -80284 -64059 13601 95946 34976 -74230 -71736 -25621 -79920 -29358 -97988 6249 88386 1473 -75698 -38265 66161 -44501 4336 -98663 43857 35931 -63984 -61860 97789 -66878 15685 63684 8075 52438 61166 74991 -15572 -65865 -49027 -98493 70792 -78160 45661 61681 -46251 -32126 30769 -99211 47316 69639 -90758 -87348 94723 -97240 -87971 -38107 -48615 -71994 -55646 -91301 -96201 50027 -74427 -79269 -72540 92069 -43498 -36480 97948 -97215 74102 -17324 84970 11782 -98115 -69603 95538 -43403 39045 4710 13756 87450 -92513 -94843 78996 94583 4142 -62659 -57399 -91298 68431 99738 -82576 72659 -50540 61983 81663 -97335 -91431 64052 -99165 93183 -37378 97040 -82533 32480 -39085 -84863 -49761 -54631 -22593 2700 89209 51058 75328 -43907 -87121 -46082 77118 88469 -85562 81351 63032 74317 -63232 95460 30519 92353 -94390 88057 9161 -93401 76972 89644 72774 -90909 65076 -83911 -86532 84791 -59476 -129 39696 -80783 -19006 96970 29751 -80342 -47172 69384 96550 -81146 -51350 -56594 -14729 -90137 72592 76098 62497 68253 94116 -47197 51599 96734 74532 -13353 12860 -90898 92200 20396 -52108 89349 62296 99683 -90981 -69050 35954 -97662 94415 -4804 40011 25913 83924 -1486 59549 27561 -52684 -25746 -63398 96710 78834 89465 20199
+686
+97126 -91300 79784 87359 -97079 -86886 74641 96885 78357 -36566 16887 84385 -72700 84441 82187 47106 -36270 86622 -28670 -1515 64050 14549 99671 -96982 68131 -64961 78293 51164 -55740 73041 -97719 71097 -53800 86494 -46363 -35174 -88650 -89275 23139 -68414 -17043 98302 -59998 -78573 -96053 -83951 86268 -86335 69170 53053 -95506 50354 -57586 88377 -91406 -88511 63727 -65704 -10599 91873 97937 25254 95067 -7092 -27020 -38664 97904 -73497 -72986 -44606 86856 -63364 -5627 65289 -35174 78922 8298 -25779 98364 -55988 -43676 44822 -94135 50069 -73978 10851 79430 55852 73229 -99105 94276 57838 70440 -54862 -67602 -63965 39139 -73734 11822 52319 -19078 -4538 -99866 -17225 -89500 74117 93426 -97339 90899 -50829 25084 78205 97293 83483 82912 82343 59890 -66090 99311 -98030 -89514 48191 92058 70468 -74326 15434 -98507 61077 97569 -86248 -56529 -90347 72586 -79316 -97514 -68764 -2127 -46595 -56762 6128 -93985 -78781 74018 -84316 80842 -57738 99603 -58136 77246 -45330 70055 49340 82575 88158 87000 -67317 92055 -44777 48148 38763 -49807 91546 7871 -87737 -63388 -90639 98615 621 -75222 -75311 -69866 98961 64065 80593 -60949 28265 25465 69066 -98756 -70864 -82896 61684 94322 75774 73093 15541 37630 16799 -13478 -13685 81438 91589 -63391 -76641 56591 30773 -80067 33128 58682 -97563 40665 17212 99096 -12612 -95909 93156 -82683 98397 41658 -94870 -44818 -46529 -94458 92851 -7681 62135 61391 -78245 -86500 88414 -94289 11502 98370 43325 -80638 -37261 86914 -95208 87179 -90454 -76832 -61096 62113 -99767 95702 -3984 -98449 -99265 11286 -62752 74898 37224 -90011 -73763 -89262 -33344 84626 -92841 -4879 -80163 -70240 -26765 -46077 -67678 -86386 -73479 62111 -54856 -84557 -75062 -23146 -52259 -32634 -87617 88977 -19369 54678 -59732 73151 77624 -28211 -98440 -84368 -62152 -74177 37533 -92852 70810 81851 67975 -47506 42234 59992 -86289 -80822 -69654 -66962 84959 78640 -59345 98775 54771 -51609 75208 -92055 39062 -49815 83927 13903 -62728 71621 90544 62679 26510 71363 -9199 87513 -89288 56946 -73444 -67216 -72251 91689 -74395 96943 21803 -74996 -30335 18461 -92004 60052 17208 32189 91364 -79134 -75319 -92060 -76211 96579 -99380 -70941 -2059 -54046 -32044 90235 80913 98918 77398 75856 71998 60133 24589 67812 -70722 -33995 55335 -90469 27293 -78156 82642 -81438 93386 96690 -90013 -92272 90490 -82563 75726 -73253 -74355 -96653 19158 -11073 -32869 63987 -96998 -25156 -72230 -93699 -37505 85093 -83232 -97473 -4372 21200 47103 -68319 -29200 78389 80426 33449 92337 49141 78918 -64939 -91495 47643 7611 17750 71613 75898 5142 -23413 63956 -40451 -15730 86257 97355 76877 76436 85104 81619 86735 -92827 -87410 -86960 23094 33376 -10774 -89003 -99339 42526 98119 96669 -29149 97763 -70348 -80750 73196 65018 91791 55677 54411 -95139 10626 -80431 -86404 -99160 -89672 54221 49571 72814 68705 79566 74143 46832 89635 96567 -86546 -55539 86575 -26176 -69741 -45028 -53282 -80511 77218 84340 79009 -86661 -61974 78317 -41378 -99588 41431 83506 65132 79183 -72719 86155 -87360 61324 57621 37285 -96574 -59099 60954 -99249 88556 51373 -95653 19149 50295 93532 96838 -42630 -13234 -85095 16123 -84414 70336 91654 -56054 -26202 -80891 87707 89845 -9326 74735 -72261 53290 56896 97302 -93620 21010 25720 -89163 97448 63054 57630 -93935 -84774 28466 -50441 66112 47666 -50983 -43407 -88351 -12645 -56540 -84023 -42378 94162 -85424 87080 -83269 -94994 96012 -91330 -87585 59070 63142 -90213 56376 68946 -69491 -77024 -21395 -83023 -64701 71771 96628 -89308 -11239 81848 -86716 -13420 -69661 32684 76585 49950 37295 -70114 -98922 97494 61597 62986 58127 91126 -38996 -77426 42291 -82244 80814 15277 8922 45544 48410 -95837 39590 83507 78803 -91860 -36097 -67721 -89313 94684 88082 -60559 -65855 -45906 79286 -67689 -24743 87185 -85457 -20628 -85550 -94978 -76431 -95638 -59771 -70905 -10629 64519 69840 -96817 -91295 81339 -99926 -33643 -33151 -20550 -85511 -33495 55356 56510 -7299 86110 95674 99089 -65141 -32835 -74547 57510 11564 -65082 77857 -90989 -89963 -65808 -80783 56474 -85911 86727 72608 73396 83776 -107 68429 -92177 98649 -87550 48518 57102 11159 -58751 -21171 -97364 5338 89328 39115 -15495 -66078 64988 -78770 94116 -73290 86556 91818 82500 -92891 -91104 74069 -52652 61433 1881 -15716 83655 81097 54383 60324 -80030 -56019 -45241 -83937 88044 -79984 -77846 -65794 -83163 96820 86876 47812 71742 -56016 60814 -67521 58359 -48312 -58388 83984 -239 29170 80089 44216 -72178 34849 79928 -34863 27304 -6705 50844 -38496 60194
+-73988 29950 -34907 -21332 91808 -86757 88279 85553 -72513 -23895 -90679 90851 30645 -74282 99233 -45513 -44912 96864 65789 47096 -89459 96651 69785 -74235 -93131 -62017 62220 93578 77444 -98738 35299 99456 20058 74081 -94072 -91643 86579 -87489 55962 76987 54935 33325 26708 28878 -91792 -76883 -88208 3310 -84535 -84384 -81858 34409 99801 94686 89542 49469 -83676 -57468 -49216 -52218 -99914 -23823 -84595 -97694 -81821 -79866 -85908 73879 -38583 42640 -30566 65857 -82225 -78184 85467 24840 99730 2007 74729 30219 -75562 65663 85990 62690 35903 -24976 54931 81827 -41665 -66605 -95358 75460 59802 79042 -99932 42488 16142 -70937 48400 -97685 -40206 98927 93964 -96080 -23770 67028 -19794 -73979 79992 59728 79456 -38255 45293 70195 84588 -86719 -72263 -33341 -70143 71127 -73101 -45224 51437 -98355 48244 -7815 -97131 -77680 -115 80866 57316 -53592 -67672 -70779 -71991 99987 97948 81610 -34098 12197 38472 -78940 -72104 89375 -71953 -95301 -52420 -77433 -64214 -72913 -18061 -81509 68492 53665 98639 -55978 -58982 71625 -73422 73863 98376 -56941 -68066 95281 43585 -92768 -86711 -33064 97117 83797 -99982 -73709 -90969 64028 87270 -46983 32543 -93901 93271 45894 -73045 97483 94565 79730 -90459 43782 -85308 -19751 79248 75837 -73697 -42872 -84168 -72928 -26446 -48260 -96822 -52195 -65420 -98254 45306 -9246 -79079 -93438 97122 97777 -99808 -80607 4967 70538 -40394 96770 -6902 -26332 35836 -91971 97499 32600 82207 -42125 -43177 94255 -5063 79542 40935 -42903 -46957 83651 -66888 89559 62950 -86167 73548 -63945 -11179 -85838 90428 74717 87693 33948 14775 -90195 -65195 48560 41746 -95965 -30154 -53398 47539 -94472 -42853 98880 -94397 53271 46491 -32550 -97496 -74175 67638 12221 -68460 96673 95524 36878 -10572 87403 -35178 49853 85577 83906 -56511 -12374 27274 -66762 -19351 -99063 61142 -34937 79155 88189 7746 24254 -72343 42060 -54905 -19501 57952 73811 -61909 36337 -8946 78159 -65580 99955 -95863 -44382 36237 94446 -86403 46616 88023 99534 -12328 80645 -51493 -67237 -84444 -58966 37147 71872 44586 -71967 -81162 -64670 -95119 32909 -69546 92956 32424 54652 80259 -48903 73740 97304 87307 98414 45333 -86943 -55332 27576 -73549 -68663 79633 30649 -94272 -8876 -94369 55832 79182 -82572 -97462 -73982 -52553 98751 72334 -89676 -95722 -7350 -76598 72634 53647 90063 14358 -50341 79044 86143 90447 -46333 82094 95833 -78908 -91548 -57226 -43427 -25001 95971 -21606 -46230 96685 66448 85877 48603 74439 77662 71137 -95064 -63803 -61601 -48597 -61527 69692 -55746 37494 45429 86909 -7362 89340 86934 -20364 67786 80572 -40834 -38152 -55907 42032 -77282 77385 -69155 -92323 -46798 78444 74419 -72218 -63648 -4812 -92420 -48777 82329 -95669 -51188 -74292 -81239 16384 32957 -69929 -95305 -95385 56601 -57812 37760 -22172 77226 96090 91765 -35320 -83830 -91287 -64634 -86044 95892 -63068 61540 70549 -75963 34885 95436 94718 -88667 93337 77817 59683 26841 -38466 -80746 86117 56279 4909 -58166 98639 -31442 -99547 -56799 -58484 91029 69745 91502 97195 -58168 -96157 -44654 -96057 -88807 -82267 -77773 98272 68138 -95765 -82691 55034 -67562 -95401 -40581 89491 15000 56290 83664 85865 18885 97252 -45859 82316 29681 59315 76713 -61750 -99537 -83348 61226 91633 46857 -53962 64228 -50155 -51509 -92185 88246 -47969 7480 -39375 32037 47687 -80233 -48574 99132 -50459 27524 -50751 93956 70016 85582 -89230 99893 57419 -67299 -58064 -35211 -68322 90089 -88481 60921 60812 72659 -17783 96079 90585 97113 60250 89036 31786 25067 89810 98965 89715 47099 99317 -96258 -36736 -91354 54454 -96254 -79481 14761 -89062 -90242 -97810 -85506 47134 89848 -95391 85619 -12780 -92949 74155 75403 76628 92777 -76412 92425 -91974 70582 25736 62932 46223 -91720 97411 -90136 22805 97505 40636 10269 -9376 53790 -65792 64048 92131 -89046 -92625 -50855 39452 87076 17061 -34041 25862 31729 61054 -1503 -34954 -79737 35506 80854 90575 87181 77773 94922 92228 78904 97208 -48695 2406 -20237 -83170 3349 25623 40167 -81142 -73155 -89745 72220 -73920 -26307 -99202 70039 -56597 -47283 81022 86117 -92668 -63267 -83567 40367 -91370 95968 -96597 34882 -18852 86842 -70133 -87308 -94412 72478 53421 -69560 24281 98412 17709 83932 76536 -23000 -94007 79142 -69524 94756 82702 92560 -62261 -55601 -66856 87492 94590 -78618 75019 -75438 -75574 35813 -87661 -64528 7240 30715 -3494 72644 -92550 87024 84397 -76585 75568 61693 53968 61476 -24935 24835 55698 90555 -40304 -69892 -70967 -99029 -8114 -94209 -38622 -65203 15861 -12054 78457 56695 -90673 13410
+259
+68307 -76370 97951 -84191 95878 -97934 75199 -81998 -87864 65688 -81932 85784 88626 78846 21853 97986 95157 -62681 53653 81211 96676 92619 54484 -91801 -76407 -78486 -17392 67074 83322 21836 65239 -88744 71866 48265 -92555 -58929 95584 -72883 -80629 -85582 81640 -61455 96095 80773 97465 -98939 46574 -96581 81154 -87247 61660 -80688 -71474 35553 -60644 -81139 -30775 99881 -39692 28407 -92413 68220 -94836 80604 -63076 -91248 -82465 -59462 -77145 44023 38468 70847 41328 79037 4443 82039 56648 68565 -66578 54874 -64234 -95597 42482 22818 -78279 95052 80363 35006 -96836 88533 -14598 91239 -35919 -82417 -70769 65060 -71829 37367 -66524 96428 -78406 -81148 82655 -23646 -1151 -53895 -76163 -92074 46335 92820 90288 88508 -85421 -83818 -84979 -28932 4785 -83542 -12375 53982 46562 40458 90757 -47410 86393 38540 -83001 -82926 -65474 -63861 12818 -94615 -92059 -57457 -72756 -49994 -94069 -80027 -98945 30945 97658 63306 -77082 -42340 -2358 50809 39287 -78510 -98905 42944 -98903 -90906 -82918 69902 71366 -87861 84253 -84701 71892 96478 21205 76867 -84173 83033 -75909 -97814 -27205 -96032 94949 -90838 13978 81394 89359 -12727 -37070 93514 -82402 -21102 -93376 -46348 -81585 -83515 -87908 55741 36936 -81657 -35997 89800 19490 95898 73097 84158 -32881 75530 75833 20905 93175 16669 39767 64308 -52896 -68191 24102 -50149 -58797 57785 -71722 64753 -97355 61604 -61824 -65393 14030 -71821 -54037 -50351 -58466 -63486 79093 -82298 -80248 4601 37723 -58960 52388 51198 91492 -96564 89237 74488 -99566 87297 34824 56623 99156 -84641 98467 91528 -11668 83629 77182 8151 -95871 -37749 11152 90888 90651 -76224 -97887 -77165 11983 99587 -71622 -73817 37527 -57204 94145 -89291 -68944
+-23892 -46887 43381 -37746 -27068 82169 51277 99955 -61586 -62986 -47505 -25124 -79939 51077 -99170 -63295 -16523 -82286 -55193 -88798 -65026 71223 -97429 87485 25700 54317 40957 -86398 77117 -76226 -15801 -67462 -28140 -14794 -83755 -71440 68791 -78717 -58523 67617 54919 48274 34753 -96802 -37901 73104 75835 29721 84159 77935 82114 -67506 -3176 12203 -88709 90747 37748 9327 -22672 73913 -10144 -82802 50338 -87241 -35081 93382 -65983 -68909 73032 67021 75254 73097 -49550 -87010 78779 -28662 65332 -22052 67115 3979 76540 -58604 -77399 95637 91419 83353 25933 95629 -55058 1300 81528 72930 -96112 52138 51004 53946 -79536 12626 40613 -78370 62820 68403 -85481 85108 -96257 53344 86825 -60100 -73625 88205 94257 -43671 32257 65280 44848 -76327 -963 97072 13375 -98014 70366 56081 45533 12956 -78961 68933 90701 72866 88634 71829 -94074 -52436 65804 2182 69404 -81543 -48816 36567 -96755 -66300 -71773 -88953 97077 64122 -55350 -26457 95911 25459 63320 43068 73968 76964 74647 47516 -32061 -83378 -49 -97963 -50627 -35394 -65375 59060 54118 69156 95564 -26609 -59702 -80212 87514 82059 -66994 -64862 1566 39788 58477 52691 -56141 98208 94887 15132 -92312 48893 -4264 28677 98839 12608 82912 85461 -66690 72338 25312 87555 -99850 -87966 -75391 -46316 91116 -90596 69825 77543 78050 99625 86503 -20296 -92207 -85656 94658 -45400 -73429 -56577 -91240 -4109 22007 5301 -89744 82283 96121 88170 32809 95831 74298 -51820 58693 20448 -98791 -54919 -26185 40042 19411 71843 83606 72927 70764 -84103 -67507 -3191 90878 52245 72014 -85692 85491 10661 -91252 -99631 -74763 -37373 38707 99386 -74199 -98744 -80919 83863 -79006 57575 -99857 -95627 5511 44916 -99355
+384
+56784 76858 46223 80035 -45681 87558 -59680 -82194 -97006 77438 -89123 66944 2155 -57723 -49819 -83592 89813 -45805 61199 -79326 -26422 -87681 99663 93856 91669 -24533 -78122 59206 78900 36171 -3610 -95752 -78610 -73595 -14668 -83805 60980 -70022 70581 -90847 -99260 -94179 -70484 -3567 76774 -77324 -82544 -27775 82565 -33694 85921 25831 -85038 -90745 67296 30014 -72158 16478 65566 -89640 84348 96014 84755 -69115 -41294 80522 -68443 -96555 -74295 95073 89280 -83335 49951 70645 -75330 75115 -45090 -59047 99729 81284 47291 -31168 37742 -95587 -9282 -91605 -80240 -85750 92384 84479 40405 45372 37943 98487 -68005 94790 74401 -68949 -57893 -42045 74665 63693 -77702 2643 74073 -23315 -70660 -98770 20362 64292 -81609 -98430 -27935 -81358 -77261 -66520 50017 -28671 39525 42310 -94349 40718 -78702 70707 -86623 -88383 96414 86830 -90958 -81440 -66385 71884 -92971 44074 95921 99464 -56063 -7607 98971 89812 -83927 80395 81957 55746 -35492 63303 50412 74354 -9383 81655 -89120 3019 91123 76007 89394 82837 30146 86910 24694 -85222 -78447 67592 29981 -81836 -94257 77932 94796 -49955 -99764 65759 -79732 -93128 80557 90427 84084 70171 -45446 13904 47183 95336 95093 -98862 -81110 57772 19843 -99015 27187 -85182 -67368 34529 76540 41173 -94356 16521 -48685 86743 92078 -65760 94850 -64415 -86824 -50594 88437 91065 40893 89193 -71969 98968 -54949 70494 -86671 8501 -90264 -58845 -72955 80145 -96958 -98221 81020 -82905 78676 -86055 59381 47181 14987 -58634 -78877 -68039 95027 -98919 -12652 99862 94453 -50369 -35683 89779 37328 47981 -85176 80305 44485 92445 -78056 79141 94600 59628 97610 -88007 -78950 -14153 94229 16693 -72396 67632 63489 -94510 78176 -73424 1591 89126 99542 -65919 -51128 35286 -54916 -93603 67391 68959 -94322 3079 85225 -48210 -76110 -92331 -93754 -20533 8676 -94976 22652 -69490 96043 -37304 -88578 -90694 64671 -73324 93879 -96362 3185 84919 64667 -71635 -14753 92879 97384 -52499 65434 -89511 59288 -51193 93672 -6030 -92552 66517 90188 -66919 -35862 -56436 -88242 77866 60667 -26396 -85688 -47372 49762 -96500 77204 -94595 -41847 72148 53866 -30782 63105 49352 -88436 68206 -57662 76250 51065 -91247 -56754 -46286 43438 -95852 85612 59401 20204 -99317 58548 31153 29842 -92747 92059 -2370 -58642 40752 -41010 -99343 -68674 -97631 -35858 62402 99145 -53043 64719 89715 -69847 -92975 13570 49065 89196 55736 -96905 59932 93556 -65994 88077 -99057 53671 79957 92870 79223 -69317 -63092 -77452 -75656 -70242 -32531 -38499 39258 77275 86848 -71786 20167
+70768 -98476 -95161 -32655 86538 -96479 -98657 81279 95657 64696 -67757 56692 -74730 74275 68206 40136 88672 46871 75425 -86999 57088 -90147 4928 85058 -94823 97684 -81718 80294 -72097 -97514 -86284 96147 -77233 85878 97602 91242 75422 -51748 70405 77469 96776 -95934 -59956 55338 90373 26480 -88919 75650 85596 48724 99617 -89930 77736 47614 -83619 85319 31848 -45079 -90757 -80144 78146 -25509 21044 60690 77967 32166 77794 55722 -88892 88419 -97983 -98668 77445 1672 51281 73898 -95578 -95358 90401 -57570 96548 39767 -76895 31366 75290 -47959 81015 -89779 81434 -45201 8482 -45348 77491 48546 -86139 24468 -85624 71675 36715 89708 -47754 -81654 -95068 77705 -89185 92913 -61580 -50491 -28777 -64307 -53258 -97636 -31398 65811 61272 -76951 -93246 48969 88999 73666 70133 99598 72003 32749 36005 92769 97506 74509 -94728 -94396 -67246 -45409 -4494 -72031 -92380 -29320 -75977 51560 12366 94508 67402 -67318 61940 -95085 -53327 44613 -34187 16350 -11896 -68277 -77724 29165 45032 -92251 -54480 -97759 -57462 -56185 99621 78319 -84224 -89221 -85781 -93447 -94605 81279 20242 84370 53970 -72676 -25711 -86844 -65435 -83954 -38061 -94917 98177 -70725 89937 89168 81391 -69007 54903 44653 77795 -83318 92000 -86346 42770 50325 76551 -77790 -78423 -52992 66947 -45912 51424 -98689 -77661 63680 -95557 81714 -42998 -74139 42129 -68053 -49288 13512 70468 -76838 -68810 -71281 -97433 -92335 99178 93540 47829 -81264 -20359 35274 93495 31398 -99524 -64984 58400 -25828 -74058 -71765 43882 -74548 64029 96936 17092 80253 -73225 69941 -5402 -94816 -50714 42137 -75766 9712 75932 79001 -29059 92930 94323 -56354 44870 -49207 -68748 26699 43065 96491 -89340 81519 -87797 -11932 -75237 -90732 -74311 -87175 -65058 88987 -56706 72974 75142 -68238 -94646 22422 19179 62093 34846 -88128 -64463 52314 97659 -49517 -89081 8696 47492 -43386 84493 20038 -81632 -92564 32287 10068 82817 -26856 -70430 -75899 -30296 26635 -93443 -66733 99049 -96448 -27512 93131 35784 42790 38982 91465 -50660 -65162 -99075 -38200 59602 -94320 58501 -91055 69487 58260 -92861 -94988 -61664 55131 -31966 61320 95029 51189 -51087 72915 10268 62130 51419 13129 86455 14448 -96892 -84589 -68935 92546 -67138 72156 67399 -67845 -57386 -76256 -21989 -99271 -91587 91227 88210 -70843 93408 30609 -98763 69437 -33489 71479 -53866 63909 -54288 -38145 87861 -86118 -74420 -76728 -96740 54286 -96950 87252 71350 46442 -51033 -61834 37326 -92700 35986 -85347 30793 86091 -13027 48542 -61264 85692 -54891 69516 -99870 14143 27569 59686
+562
+27779 68019 11109 -47566 99713 -95665 9188 74401 89304 -7838 44867 -92030 31932 27283 67668 5302 35373 -63788 58239 -18977 46295 -21565 80806 22718 79891 45889 90437 -90444 17905 -70365 -83818 -69156 4988 -16897 -32390 -65044 -7825 76583 61333 45097 92915 -80219 -55040 -68444 55518 -88369 -44155 -35535 -9267 -73491 -39839 33958 -54662 -7734 -99499 -12156 86383 -17798 31739 -53551 53464 94860 42043 -60565 -86671 -86364 75265 72645 60293 58526 -98343 56681 87014 -83324 -55900 68734 77269 -51622 59664 -40565 -27721 88339 -64888 -86619 -43627 -76699 -94846 -54027 69118 -18571 -80893 84267 22628 -11580 -70013 48239 -11007 -36048 90619 64537 33524 63718 -57728 -7791 -27098 22527 1587 -80673 -81102 55506 -91519 9602 65631 -24245 43696 -10032 -69011 6711 57284 -77461 85091 90168 85709 -64867 -77831 -81279 83888 76282 -64515 49059 -22263 -85742 89117 78274 -14900 -60941 -51069 -11077 -67533 32190 -56736 -98295 -98499 -51433 -64827 44560 27468 87837 -73994 -81819 -68777 93355 35656 -23173 -85956 -52225 -11103 46479 71876 59385 46320 57320 -82185 14545 17444 79346 -97315 7813 59190 13985 70258 53908 -57221 -65814 1281 -95752 46864 -57863 -93663 11230 -48301 83398 -66019 43402 49751 65860 31780 52520 96081 66112 53108 92398 -63396 26952 90026 7955 -70856 25433 -97006 99474 34435 36577 -13223 -79555 37733 3490 31148 -35251 -79150 23234 -23050 86297 -10452 -10519 56882 -74947 -53067 -31332 -52846 -43719 40100 71742 73669 70294 30392 -1422 72541 -77690 28495 70923 -15980 82814 409 -29224 57054 -64109 -90145 95300 23141 -3265 84442 -37462 -23197 -92858 90321 45952 4986 -78047 -61678 60560 -97619 19584 19717 95205 86937 61690 38589 78149 -56790 -5238 30580 20493 52475 14402 -13970 74895 -51187 -50573 79716 52912 9306 -35955 10156 -75875 95422 91732 -81935 32699 72058 50106 -88799 49912 67333 -91120 30149 93728 96051 53128 -70275 -33684 73643 99621 -77314 -61947 -49919 25675 66997 47150 -82216 72749 -20510 17296 -4937 56316 -9590 -24433 23134 -72027 35599 -31107 53935 -56006 61301 -3371 83539 4753 -24857 -36102 72170 -44292 -36752 39187 35840 -70698 -95192 7186 -99911 31708 -37148 14002 -34572 -93054 -38525 -15704 -9606 -1447 -34547 -48544 -7113 48066 59604 -21600 -19467 92612 -30340 -42687 90881 -50190 2003 31276 -67247 24989 -34881 -33397 -48737 -37635 -49563 10676 -61510 5546 -93794 39644 -46349 -52354 -98752 -23964 38453 -63353 35152 -88822 -4952 37427 -61020 -69345 -26678 -7913 1911 94443 -38233 46050 -68827 56129 24560 77126 -54540 -6717 38158 31337 -63870 38007 65922 95375 20705 -4809 -2990 -75940 -40727 -12327 -36529 15519 9610 78375 9325 7294 84224 -15999 49223 3890 4104 49312 -95072 43960 -45967 -53747 112 14243 57351 43861 66716 -48866 -21047 90234 78879 -73589 -20290 57314 81155 21273 31109 59159 -39362 89769 56897 3523 -42974 -76898 73074 -41240 -28405 -71663 12802 90466 -86492 -18483 54200 -503 -50651 80466 -35608 81141 -26945 -89027 -53288 -47319 -96691 95013 42620 10469 -45410 -74104 -54362 -11546 -91716 47171 8259 -74258 77592 -95232 89677 -45844 -92694 27967 -78867 -81731 57103 47744 65234 -49865 6254 65936 49085 68650 72475 14045 -31394 -13747 69649 -65465 -48747 -12498 37140 -6108 9342 36319 1637 -53055 -76985 34753 40578 -95961 -47692 49918 -84275 -19562 41272 60004 -42383 57473 -69690 -9188 53957 -38307 46682 -18846 69489 -59768 8297 62544 -33692 -69484 -24397 64556 -6090 -81432 -40097 -97415 39444 -68945 -2231 -47725 -66551 -16107 -81375 -10739 -54264 13286 78549 -92404 79482 82048 -70980 38907 -9570 -36091 -72276 97490 -13 -33674 -77750 87412 -99313 -93048 -66353 52058 -50639 -90750 -46127 -48550 17030 -65036 -36578 -96342
+18727 12233 7867 -7746 88989 -89327 22840 -61682 94895 -42241 -91928 81093 -86768 54819 56833 -7702 35667 -96593 -16208 -74266 13340 88393 -44382 89025 18440 -74002 -33618 43459 67088 13620 -85323 77773 -25025 -76971 -81747 82560 -49025 83144 -66443 57227 31616 76504 5692 38636 48902 8503 83432 19978 -61863 -22425 -26875 47521 -20423 73464 71103 9540 43389 39098 39295 54927 9797 -39671 -12469 16086 4193 -40654 25203 -20319 93463 11800 -90125 75430 7267 55110 -92565 -32093 -8556 -14309 -76188 86311 41367 -51706 88812 89247 -12443 -7723 93023 -91376 -31954 -18437 67291 -51000 -50524 72496 -3158 -88729 78037 86025 53042 -20263 80291 27427 -63659 -39849 87543 -91726 57850 59252 -31963 7983 -36929 -59543 -30569 30531 89557 17011 -57721 37511 -1744 26255 -95373 -24031 16986 -78515 -74231 -8410 92292 75296 67313 68066 -88493 -66901 36364 90413 -47410 -33928 99984 -52345 66388 -36523 -51005 9218 90895 -98860 -26450 -89292 74420 -40471 -47001 -57676 15001 52024 -66131 29652 30363 -96059 -54558 47767 -8895 67067 -78922 29909 54500 -40935 92187 72024 -40670 70211 18844 -29997 -99989 -10827 99619 17324 -77513 53851 -64140 66642 45751 28931 33637 -11977 11264 -19310 61740 -97499 14999 -34859 18469 -46261 -11609 -47359 22615 -37091 -32907 -59114 54315 -824 9690 57811 -74270 93060 -47531 -17962 -13653 45909 -91361 -82328 -41810 -15354 -71341 -95134 99873 -78017 361 31713 -95545 -18893 -91562 -9752 -5444 11665 -3892 99698 -70068 10556 -58462 -6968 -37639 1592 -73123 -10157 -87001 65914 -82201 -94613 14879 -68771 -40620 -34428 11621 36508 68559 -39564 -42545 62228 68666 26283 10031 46891 -1741 71203 98827 41623 -82897 -33383 -82528 -3818 -1974 -5086 -94578 -34621 34186 97295 28974 -25045 -20512 -27369 -5061 86346 13188 11405 13951 -5757 -94529 53582 79962 -49886 -72582 17212 42011 -91032 12711 97447 -22883 23024 33190 17105 16443 91756 15558 68314 -42504 -50092 18496 11890 -11046 -25128 62494 53820 49822 -72983 -54323 54919 26160 3808 74626 -42940 19508 -12847 56732 -19172 61925 -98382 -86405 83723 30899 24593 49456 -91772 50814 -12076 36915 88267 95743 -6810 49473 -32759 75541 98495 -84426 34966 -74706 62519 15930 -87419 95159 40615 -29717 40621 30973 -12921 -38488 -53558 -97219 -80098 -46893 87725 67124 -39357 -49028 23828 80197 -63803 49432 -33467 -67643 -4754 -96744 7086 -36347 -8853 -26566 40255 83930 -49431 77343 81691 -37922 36540 51136 38343 47489 27254 -84297 -43386 6572 -14985 -60221 -77514 56899 -95136 -73334 -10360 3672 -56184 -74368 52288 45171 5345 -6828 42481 84613 -99497 21089 -7826 29493 -12489 49332 -75042 -83819 -67412 -47026 -65960 -78922 -95694 98387 -53848 -99952 34697 -28728 22211 -96328 -54963 -52574 -74347 -35170 -19594 17803 68020 -99045 4368 56183 48576 61724 -42370 16615 -65833 -21408 73789 -72535 -63218 68539 -51883 -59261 82876 6444 56129 99923 16587 72667 -4678 -31269 85934 -1948 65076 35273 -92551 -31630 58519 -93115 23852 42483 -86770 -3273 33002 68362 -58176 -60922 -42070 -88334 -674 -15678 16894 12238 88270 20205 11990 -97230 -7249 72672 -9722 71840 -98900 2414 -63489 -35534 -18129 55788 79386 -46695 -97261 11999 44635 -65452 95888 -12071 -99144 -30312 -2511 -67169 57676 -27173 45443 -69146 29957 61264 -7445 -96555 92811 -40055 -43169 -89215 40730 -30492 -6949 -83142 53762 -24562 6516 -67269 -6648 -75960 -40953 52979 -58322 -17782 55853 -37102 96820 9259 -50876 99037 72740 -57348 99104 -77203 77982 55549 -82732 -93037 -79820 -80249 -19821 64268 -53714 -8736 -61979 -21199 -34483 50309 -7902 -33670 19264 -59874 -18157 -22604 4071 5966 -52943 73549 17125 -65965 36940 -23213 -53763 50309 -37989 -73972 -96327 81197 25548
+791
+65785 64770 -51784 78402 -34615 92068 81300 -14321 63566 -95184 -96262 -45838 14503 63980 54073 -39520 -93985 89588 37780 -58622 9972 -53287 89830 -66658 71267 -74784 -94181 61323 81683 -52688 98499 3754 82261 9493 68244 -80814 67085 -79188 -87666 24555 73475 43384 -26740 79077 -86349 5056 99427 -94847 77923 96010 -61429 -80452 80361 65441 -34179 -87745 13622 85956 -60648 23395 39428 48802 68490 96098 86708 -68986 -75767 -26655 87713 -93307 -11173 -63027 87149 -40055 77626 -3592 -62695 40734 -31679 -30135 28502 81987 -95241 -96004 -38096 -83695 -48568 45406 -51941 -22887 40945 -71562 80185 98584 84895 87484 -45508 59508 43887 83949 -88718 -68777 97297 -80665 21875 9415 -79619 85429 71180 85701 43436 48425 92038 -52098 -54158 -74856 90399 -75515 81531 93012 -80636 10877 -92048 39235 91847 65365 -18043 -70015 20005 89236 5223 80536 -79380 77986 85735 75069 55492 83676 -87940 -89582 -98426 80319 -10574 79521 1034 61657 -66649 -98495 71873 29150 81938 89170 10038 -2785 77337 -85791 82156 -86156 -76027 -50816 71201 -16729 39547 -40693 -92050 72685 -93199 55021 -72776 -15636 -69051 -54091 -95664 76111 23481 9499 -91211 63405 94649 -65500 -90971 46715 -45244 55459 32755 -69119 96356 -95215 99775 -6747 -88826 -64705 -63604 59052 62934 -40121 56160 75368 -71787 -99964 56916 -85243 -82994 78874 -94567 68251 -87388 99673 83427 -47749 35582 38220 50663 -61117 -85979 -59673 -19930 60063 -79815 76804 68392 -88772 -42519 -95683 -97951 -85450 69721 -99424 -96914 -58691 -60640 99495 -34942 98775 74031 -58426 39899 -21959 -99303 -76975 37569 -75957 99220 -44577 75181 -96772 73992 53670 98413 -56550 -73549 51705 -16120 -96809 6956 -54952 -98882 -97933 -10065 76782 -91336 -26819 89116 -93155 -56455 -30478 -26513 54181 -84205 -26322 78786 97593 -20787 -73736 89771 79722 78092 94962 74690 83240 -58824 73950 -67750 84116 85522 58352 39495 -95192 -80023 85717 35872 -93985 56647 -88161 -92968 -6474 -66812 85900 82695 78514 -81179 61830 41633 22989 -1213 91130 -44551 33297 77465 -90773 39728 -72910 87556 -71198 85241 -36671 94981 34122 -47551 -39705 -85104 -49754 -64020 33758 66164 -84687 -71077 90076 -49558 94292 -47516 96526 -89225 90838 89983 71257 -72106 72635 94327 -98777 81818 69732 -89074 -17978 -58680 -51104 68873 -52532 74355 -64322 -56943 -92588 70251 72490 30017 99777 -52042 95794 98045 80829 94608 1056 71291 -81092 23499 60643 -37218 -96633 -66960 -30618 -28914 62168 -59183 67016 -82048 -59660 67111 57228 97776 -10980 53655 69613 91062 -87061 -65296 -98930 52635 89195 -78789 40183 36497 -51241 93849 50990 -88729 94104 35794 84503 15295 -86281 -82524 22965 91504 34928 35378 75375 92955 -84951 -58975 -11709 85685 -74388 80635 85270 68086 -96005 39743 56860 -81418 -93565 -83000 89304 77247 56614 -58329 -72714 -35728 95141 -62324 -46647 -80806 -99092 -82448 62652 -54265 93592 -38256 -87249 73970 89853 -99892 -83940 -9843 -65986 -65200 -38968 49431 79708 -58787 29695 75162 -33676 -6232 80508 -62184 -57829 -76939 -49622 1388 86357 40464 -49203 -62154 25275 -93442 38195 65035 96480 72432 79841 55867 90123 41014 81403 89307 97278 -71457 82411 -78016 -42896 -1160 -78781 -66221 -80640 8591 86743 76646 -72278 -53764 -88531 62248 99867 44607 88798 -43251 47859 23354 -71183 57860 -43881 -75943 41185 -79865 79219 98216 -85120 51963 -75994 74134 54239 -88935 -92514 15303 91330 18831 -97376 84922 95281 31259 78434 -90089 74141 11548 49555 -32799 -92588 -92471 -93701 -97177 -61724 -81759 -62001 97225 83781 22593 -96092 60903 -99804 -91037 -16271 28508 -12898 -47806 -27207 -61100 -56610 44137 -73667 45815 65064 35669 89741 -67220 37431 -5933 -54986 83222 -40423 88356 27441 -65788 -82478 78114 81739 -98369 98826 93442 96729 -93962 85125 36523 -92943 37832 -95293 -77139 84349 -70951 -42078 96342 -67657 -94911 41363 -77803 -91277 -83315 -83700 -86591 79293 -43990 64679 -97396 84717 83564 90263 35016 -65172 -50732 -91307 73905 -56868 -93076 87620 75433 -98630 -71315 89222 -55483 -94230 76568 89126 92524 -79665 27697 84578 -92684 -98064 29381 -16212 -98652 86226 -71640 84503 24519 -86462 -84687 -63078 3329 97950 -70241 -87099 -95300 97915 -32609 -78708 -38060 -87368 -96209 -23827 -86697 -82362 59783 -82260 44066 -30986 54064 -88141 39997 64256 -58428 11277 27238 45067 -83099 -72774 -22868 51850 95567 94456 -64482 29391 -40534 83252 47532 28408 84650 71724 -57056 38058 25047 -65354 69789 -73775 9915 -62070 -65143 78215 91544 49527 -96853 -3318 76726 -89646 15393 -63170 -73105 36584 -64602 -29964 76938 -89347 77437 -27787 77260 -18760 42704 -93531 78147 -89155 70445 96288 77556 89985 -51122 9875 55293 86270 -31090 -99176 47765 -92391 61297 96575 88113 55131 93434 -80663 80230 -76299 -76840 64415 62464 -90905 74480 -82911 -69318 -98619 55900 -51863 70927 -77976 71378 74097 92037 -39223 25231 69155 57417 99403 -89459 -74792 -64615 69320 -64375 83227 50774 51337 -37113 60406 -88261 -7170 -84544 66630 -60613 -86238 61678 -96954 49178 -73155 81802 -97024 -83293 75154 11154 -503 90587 -83362 -8706 -60116 -25220 96976 -93649 -86784 22937 95099 -50469 74708 -53500 77991 32477 51337 -84353 25177 54207 -89600 -93165 26250 -96966 41124 -12099 91936 -76476
+87958 -49472 95286 86071 -97566 -94952 15017 68163 -77961 42662 61347 -60045 83121 -99849 -87444 -79898 94272 88886 18432 -98626 99072 -78277 -80025 10786 69482 76631 -95985 -97055 -78864 -70190 97961 -55974 -64945 61636 -19947 -73650 55195 -85377 77683 -6627 67492 -66477 99233 -47316 -32608 75858 81430 70862 96056 -89526 98707 24737 -44665 97005 -40750 92891 89399 -61310 -90416 66185 -60043 -79627 -84195 -97409 -80863 -68014 65056 -65288 92632 -70057 97338 89179 39131 -95998 -68274 74115 89677 21418 -90393 6490 93001 61756 81201 82754 90052 -94144 -10397 -97498 84672 -33011 96532 -32747 -75686 -69799 -96194 43566 -12042 -64404 -37612 15524 -97142 -75080 -98843 39553 73719 78653 -85919 -97626 18983 71590 -91243 -54135 76102 -86401 -44327 -68896 75376 97621 -79900 73845 38480 -48809 41345 86323 -45158 -41039 -80112 -41542 -62510 92283 50404 -92961 -14615 -85067 -45301 82194 -82621 -55168 96971 -93404 70158 67580 5361 -10944 -11873 -7464 33552 60521 85102 -73411 -99887 48346 -24069 -36507 -27969 -91918 25810 63835 71943 -98453 -83254 36081 89820 66874 97018 91316 78699 76939 -87485 18690 -46351 68653 -79954 -79151 67647 -31766 -57422 -63134 56215 -95811 -85404 29605 69267 -63229 -96241 -35013 50739 94288 87176 63303 73723 43304 -72471 -63639 -94311 -75589 93268 61401 -63969 59296 -63521 -80462 -79579 62269 -75629 -80101 -60193 -78252 19044 58806 94687 31839 -49830 -94440 -22985 -76602 87965 -47393 83292 -56149 -24601 79307 -95534 9578 -34570 -97886 -87507 89922 57246 -92007 67799 -98779 85320 -2188 83264 71003 72411 -92599 54491 -67391 72501 -79474 90265 -5294 -75322 -50092 60195 49723 -26278 -89511 -94922 90662 52803 85150 -88751 74778 66131 -80325 28204 13533 -530 41630 65267 -82452 -6568 41199 50245 -56440 -98740 40924 74468 20985 -85939 -99587 -56068 92100 -76560 -26658 -63720 88623 -98708 -88830 -85877 -62295 -75865 -83140 -48743 -82823 9239 -73553 99056 73412 99614 -93823 -71026 -77812 -65072 79181 -96401 -80933 82661 -20118 76699 79487 88920 -76816 -82615 41133 98495 -21025 63883 -62353 -50096 -31446 80188 59787 91266 63866 -64634 95127 -47100 -77297 -42751 -67512 -89056 69203 -85054 60876 -85196 -96740 92406 -26292 -88713 -33181 -96326 78413 99682 58895 -48795 34300 96624 95389 -31557 95006 -72147 56369 51302 -20641 99194 -87431 79856 95145 89259 -61710 -69743 87739 83800 78218 -95950 76733 80500 -65182 -70444 55296 74219 92958 5475 -20277 53640 72994 -61314 11379 -86194 80542 -70069 -69975 73163 94962 -62524 -98072 -97568 -83754 63115 -53804 -23858 -98945 -71560 91549 -93971 -38327 66991 -71260 98636 96309 59141 91935 -93263 99653 93940 95074 68140 -49025 -82142 -88849 80165 91268 74398 -83540 29073 54921 -77907 -97274 -48940 -86969 -36138 90347 51683 76123 -29896 76440 -30549 98409 46277 -32183 98323 -87484 96344 -78973 -75691 82755 92514 48963 23223 -88554 70514 -36739 96448 12606 79186 79670 94264 -4361 84231 -91094 93605 23278 74241 -61238 30598 94511 -45627 97901 -41852 69060 54938 75580 -27276 43270 46577 -14626 -27490 -3831 -66972 -80904 99748 -60294 97571 72935 -78257 -23307 -30308 -94076 52399 92310 -92659 51466 91744 91592 62235 50107 26367 -96715 -74557 53331 77473 54766 96105 -24374 -37307 61346 33688 75745 92314 -76856 -87682 90206 97065 -65673 82786 -78575 -51880 -83864 15514 -68644 -73073 -79386 74307 -96963 85877 72407 49384 -88990 -66118 -99034 -63566 -87750 -77312 -97596 -8146 27777 -58242 -1988 82591 75078 -49089 -66248 54230 -78416 -81447 68945 -99442 -61012 63104 57690 69268 31147 -79663 -77532 20899 -63806 98746 -54344 96536 -65943 92965 64534 -85158 -75968 -71905 -29203 62973 -98723 77639 -3772 32879 48287 42742 -99376 90202 -26314 -39188 -27243 89993 -16491 76136 65959 -52311 -59117 99296 -18379 90086 -88064 -85132 28683 80104 14300 46436 42065 89937 -76428 -96811 15069 95446 -82765 44371 93859 -61597 -29511 -33948 -76307 -83280 87062 65927 77231 -96593 82409 95691 -52316 33550 -90990 69462 98940 98437 94957 52467 -53087 89217 -77753 -62940 78784 81324 87648 -52139 -96537 -11630 82803 86529 88771 95096 69208 -93700 -95104 98135 -92651 -45887 41307 26190 -13475 96825 -51341 -97902 -99197 -67362 -86573 94601 91187 -46690 89211 61398 -31615 -58750 -79797 55795 85407 -65747 89894 91575 70543 -97427 29133 49448 92589 64584 -88689 -43425 29595 -90595 58487 68295 -94787 -88694 15008 -87368 77184 90311 -82851 29167 93797 77517 63499 -99702 73573 32314 -88939 69191 95145 -89457 31223 81446 -79511 -82831 99528 53990 -80143 -35482 -59877 79639 52299 89533 49431 -87447 -91465 -50356 -88050 -80737 84713 98134 -78276 75689 75322 78071 -8691 74716 71448 -97420 -80128 64233 3457 77138 69405 76897 -53520 -51759 3243 98794 -92955 -45451 -84505 96583 99864 -36017 24243 71045 80536 66324 65989 -78887 -33188 -98027 96653 88943 -3133 -71648 20385 96314 -73859 69315 -4685 -89410 15919 99179 90157 59955 91314 89741 -13776 75740 -95956 95379 89046 47026 71904 88605 86374 -71797 55751 -41254 -77544 57425 -21566 -82399 -67844 38768 99718 -90656 -88028 81683 -94421 -94854 75539 79357 -91359 -76518 78014 63515 23823 97153 70324 -99507 81700 -93167 -63138 46072 -87237 76024 82885 -77661 58658 80209 -83159 52441
+170
+-95475 95137 91577 43878 -3940 83795 -94765 63974 -37034 -69063 16381 88583 84557 56446 -95873 -98614 79181 66522 -91003 65965 -3461 39004 16284 40310 -59457 84743 73267 -98610 -68268 -43401 84539 73339 -65050 96934 -49963 -96644 86504 -91164 -96318 74791 23381 83738 -18907 -56513 -72758 -85380 97809 25143 -68377 89458 -96175 -58761 -76324 -31474 -61512 60796 23355 99232 -65651 -78198 42816 -95287 80616 98354 -47671 -74513 -48729 -63652 28695 85203 -80485 -70699 -76304 -91733 60207 -37839 29825 -94982 94008 -68623 88732 94689 -98808 48530 -96089 -24105 65610 69163 73604 -92291 -99876 95543 94162 47384 84982 -26971 23257 83870 86450 94391 36127 -41704 66456 -57880 44322 85932 -92783 52609 83227 -64867 80099 76988 -17295 -72516 76833 3015 87171 59154 77668 -25010 96221 68388 -35697 -9051 -66122 97521 43966 -90286 -36272 -41831 -95784 62051 98268 -37124 -54484 -50439 97748 92479 -39139 -46211 -3015 -54563 91075 -2282 3124 40341 76687 -68571 -85542 39034 91716 62893 -91159 94963 -61192 -91004 14033 -87997 59690 78407 88135 47442 65266 48160 53040 -7880 -17344 -68284 91247 62179
+-66335 -80228 -67206 -72260 -17807 93713 -29054 92169 79215 57964 46276 68141 36238 34046 80060 -30232 86980 -72970 -18650 -66484 22285 -68439 94333 -93835 -73117 70127 62680 -1071 -61678 -12345 70052 57575 -85904 -78195 -71484 98225 99921 -70291 -66497 76364 -37910 -99523 22728 -40902 38374 -565 47843 -54492 -73537 47979 -75276 -75878 -3467 -73873 92534 63941 -94545 -43843 25280 5566 63090 4452 -63595 -47591 71068 -52610 63136 89368 -62792 70720 97013 -37891 30495 -86095 83389 -77333 91786 -87236 -79775 -67565 -67579 -94493 63807 -99027 92534 97015 35072 -4502 82555 -89366 -76835 -53145 -64301 10018 36268 92125 24445 -90700 -87837 -21128 85177 83102 98688 -80926 -74604 -71222 -89268 75696 -64815 -87857 67424 80788 -53285 37538 65020 84203 -74900 -98353 -94307 -10737 -37711 93586 -36587 -81134 81190 59817 -77114 -66404 87124 97598 -42351 66145 76864 78497 94313 -91673 -67842 85484 -62176 99784 -87394 13451 -17163 -40793 92734 96248 89721 92553 30031 73831 69895 -85754 -74017 -94169 52372 99977 47556 -78055 78055 84524 -80914 -20687 -29226 -75664 -92301 -98863 2842 77229 52557 68752
diff --git a/codejam_2008/src/y2008round1a/A-large-practice.out b/codejam_2008/src/y2008round1a/A-large-practice.out
new file mode 100644
index 0000000..54f0e90
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/A-large-practice.out
@@ -0,0 +1,10 @@
+Case #1: -7839202227936
+Case #2: 7999201712083
+Case #3: -1313429236847
+Case #4: -3710387739618
+Case #5: -3414920765916
+Case #6: -1271937742993
+Case #7: -1964394407029
+Case #8: -1884282427866
+Case #9: -4044533757860
+Case #10: -838783451371
diff --git a/codejam_2008/src/y2008round1a/A-small-practice.in b/codejam_2008/src/y2008round1a/A-small-practice.in
new file mode 100644
index 0000000..302ce67
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/A-small-practice.in
@@ -0,0 +1,3001 @@
+1000
+3
+1 -5 3
+-2 1 4
+5
+5 4 3 1 2
+1 1 0 1 0
+7
+677 463 -569 516 401 -998 882
+890 588 959 909 948 -617 -655
+8
+-912 937 167 366 -222 -397 190 -216
+354 -222 28 -236 75 869 -622 -56
+4
+-741 160 176 -378
+-665 -149 744 497
+1
+-466
+89
+8
+495 895 799 -887 -880 -976 994 703
+-1000 834 602 433 145 909 -973 382
+4
+940 -148 -578 560
+107 427 729 834
+7
+-192 -634 503 -837 571 -965 -892
+-743 -107 742 -447 862 530 -985
+2
+326 868
+106 111
+8
+-815 -997 582 910 -496 936 856 -583
+921 200 -932 -928 722 963 -826 -762
+7
+-762 -139 -650 -171 507 857 -729
+394 -107 855 -914 936 276 -574
+8
+343 873 -183 -903 380 0 -249 355
+509 -615 -481 -832 -253 -354 -93 -148
+7
+223 -662 764 708 -547 694 265
+255 30 -454 -845 800 -988 -905
+4
+694 -79 -179 864
+559 -871 243 -253
+8
+231 -430 923 -303 -957 535 -846 395
+507 862 -624 -6 -836 -94 -718 939
+7
+-395 896 -112 -244 986 302 -482
+-635 134 -825 652 -650 -857 150
+4
+-71 -508 162 -240
+369 -293 -763 59
+7
+559 -203 -874 -980 -172 898 624
+943 -107 -990 -653 -979 429 834
+4
+382 -808 899 205
+974 652 328 -833
+8
+-718 -596 -776 -173 418 682 -733 758
+620 980 -911 364 -275 905 185 -837
+3
+-660 -598 -463
+94 868 -674
+7
+673 820 327 -152 102 137 113
+596 -230 197 837 -641 -47 208
+3
+-40 -545 -602
+-675 -746 327
+7
+-952 307 -417 865 699 934 824
+662 587 321 875 906 767 -540
+8
+-539 609 973 -345 281 -591 -618 -217
+-247 -717 932 -819 -857 65 -923 576
+7
+769 21 -340 388 -801 17 450
+-123 119 296 477 -771 13 -909
+6
+-831 919 448 -819 -701 371
+-647 705 803 -281 -373 958
+8
+493 736 460 704 759 -245 -970 986
+-576 399 -966 408 -817 598 -869 -56
+7
+-573 -993 -902 -896 828 -528 -635
+551 -889 548 432 930 -961 -886
+8
+-712 -593 -982 799 -972 616 906 178
+-772 998 651 867 -973 807 -215 -302
+4
+-140 -326 -84 -56
+637 188 -94 -439
+8
+-986 -926 -600 918 988 649 712 998
+888 901 871 703 711 514 924 -901
+7
+451 24 775 824 -374 916 -831
+933 -769 -180 -955 -472 -932 -417
+4
+-545 -307 -824 -239
+-409 636 265 -569
+5
+-933 -363 -947 -943 -625
+991 863 970 -599 940
+4
+-957 -586 -832 743
+-506 914 -751 -847
+3
+894 752 -831
+-669 848 -620
+7
+201 -569 859 -852 814 -553 932
+678 216 -655 -337 1000 79 -391
+7
+452 757 667 -704 442 949 928
+-404 97 614 129 791 578 708
+8
+-227 -443 464 -591 54 -365 -107 -30
+828 35 356 387 325 87 239 -44
+4
+-400 -909 -14 753
+-996 47 -973 685
+8
+-262 949 531 -801 -586 903 -289 -827
+-39 -35 -745 -711 -863 941 -875 865
+7
+259 -776 609 984 -874 800 -131
+705 836 679 926 513 -746 999
+7
+-270 219 265 694 -132 102 -96
+-159 -389 -419 -653 949 130 585
+7
+-705 970 -997 843 868 -685 -795
+23 -712 -989 895 517 828 831
+8
+-415 -126 -146 -124 -165 48 464 534
+270 -276 13 -249 34 -164 210 136
+3
+-210 109 -145
+-314 648 -329
+4
+367 65 -294 452
+607 -358 -972 852
+8
+-293 -168 -654 -33 373 -365 491 -547
+71 345 -288 -219 222 371 -87 -222
+8
+693 976 -558 858 997 -754 283 -684
+-920 760 368 -122 78 -171 -205 771
+6
+129 950 -205 -943 896 834
+-762 251 520 -595 -238 -828
+7
+-677 1000 -973 -957 -524 -687 860
+997 651 -406 -745 536 607 -896
+4
+-617 -925 404 -334
+306 798 414 673
+8
+-999 -948 -987 927 -680 184 260 879
+-597 -341 -173 -869 -676 -916 625 -408
+2
+-684 730
+543 -972
+5
+47 -447 155 -5 132
+835 397 724 -105 782
+6
+623 -488 -825 703 883 853
+-181 -658 -900 -702 -992 787
+8
+639 912 934 525 -785 342 862 477
+-676 823 -361 608 -962 763 -659 781
+5
+474 232 -851 -213 938
+-598 -524 -870 514 30
+8
+194 -65 534 101 143 -142 639 -162
+-50 -437 -76 76 -269 -573 -132 764
+5
+734 -621 -676 -755 828
+214 73 903 -487 362
+8
+-814 663 662 1000 -949 774 -174 -947
+935 738 767 -981 -502 490 344 893
+5
+577 -271 -37 -956 -26
+-164 168 377 -146 -878
+8
+-813 481 971 -695 572 971 -938 454
+-360 -256 -250 -650 917 948 105 -642
+6
+43 260 -111 -13 -517 22
+-70 -936 421 231 519 657
+8
+-781 672 938 -565 860 -417 886 -188
+654 -900 -902 488 704 788 -266 -846
+6
+-848 450 -404 -825 -704 523
+-902 908 332 829 -477 839
+8
+-115 -279 -181 -799 -746 -261 885 106
+-34 -773 409 27 -159 -565 -494 -689
+6
+-273 -30 94 -951 356 1
+-124 240 225 -147 -21 -130
+7
+-856 651 -268 -93 -682 670 290
+699 -671 -425 774 967 997 463
+5
+-590 -709 -687 409 -631
+-944 -785 -382 -420 747
+6
+687 833 543 -994 913 850
+-727 689 -788 -996 923 575
+5
+-882 691 -71 -131 -872
+908 -274 -95 -440 846
+8
+761 822 -898 760 953 -184 -956 -122
+-248 790 -872 -395 -439 960 -745 220
+6
+-774 -808 684 -399 815 -976
+263 -541 -563 762 -758 -104
+8
+-672 481 -603 932 656 -639 -527 -747
+-309 -993 970 -514 -995 652 729 218
+7
+-963 -382 -960 679 731 -748 84
+-470 216 -946 263 -919 3 597
+6
+280 219 237 205 275 -777
+-855 -566 -741 464 621 252
+4
+515 884 -904 479
+994 969 709 -808
+5
+231 382 -626 -846 -716
+-839 84 -536 -258 877
+5
+-441 -773 286 467 316
+686 -404 886 235 984
+7
+-881 46 478 -794 81 -912 482
+-124 -854 515 365 819 -842 961
+8
+1000 997 996 994 995 997 999 995
+995 993 1000 992 998 994 992 991
+4
+-541 830 -775 -373
+971 272 782 -720
+5
+847 239 -200 856 -62
+-180 -67 421 -244 -103
+8
+122 -281 -540 196 -39 -250 -328 -806
+116 509 159 232 -838 -307 -320 540
+8
+742 93 -530 550 101 437 -286 -259
+-20 101 -934 132 965 904 -992 -950
+6
+477 890 662 -863 -244 -838
+-911 -824 530 471 130 543
+6
+-311 -388 381 124 -863 624
+892 -961 962 -672 -851 -935
+6
+-904 651 505 -463 -502 -887
+745 287 774 -636 633 921
+8
+719 -939 304 -778 -112 -998 -501 202
+596 928 949 614 -512 682 -617 -984
+4
+873 514 -759 -761
+-380 -851 -735 398
+4
+137 -391 -738 129
+296 253 9 -367
+4
+-988 -744 -708 -458
+516 374 -869 844
+5
+-505 -502 48 -424 194
+-811 690 -438 -325 -350
+8
+306 922 -475 -872 268 -642 820 977
+995 -872 253 -643 536 476 -989 903
+8
+-278 619 689 -705 723 -266 437 46
+475 92 371 -770 770 872 -316 -773
+8
+570 -910 282 -272 -822 950 -492 -383
+-964 917 43 -876 842 -370 -129 -647
+7
+-767 -402 622 915 -782 275 -41
+-530 -486 -788 -591 -664 -993 -124
+4
+549 679 997 480
+695 -640 686 110
+6
+-313 -89 3 -934 127 -540
+-55 60 379 -345 -19 -172
+6
+377 861 709 -182 773 823
+591 -896 850 -639 -955 -743
+5
+-596 171 687 -280 868
+676 -446 -330 -544 -945
+5
+-46 363 971 543 -638
+898 661 -404 554 -430
+6
+481 257 597 154 -518 981
+-57 50 203 849 -669 178
+2
+-298 565
+-905 64
+7
+974 -732 -304 934 -937 -277 253
+802 -922 -406 -855 177 893 969
+2
+-560 -694
+73 -65
+3
+-956 -37 971
+-588 607 -767
+7
+-560 -729 -782 939 -562 -563 882
+499 991 502 -895 549 973 -853
+4
+-569 660 -805 862
+-648 663 544 -748
+8
+691 -246 674 800 915 751 -415 619
+179 -413 -471 909 772 738 300 535
+3
+-662 254 695
+653 -634 -866
+8
+-867 -873 707 -306 893 -860 781 -572
+389 -687 68 974 993 505 955 -932
+4
+932 712 -734 148
+-579 315 16 -491
+8
+95 -72 -605 -248 66 -302 -662 666
+379 48 839 -340 821 -337 140 -180
+8
+387 101 164 123 50 -232 -170 -350
+-261 -567 -171 219 -914 34 -109 126
+5
+312 770 839 -374 -232
+-636 812 -976 972 -839
+6
+583 978 218 987 425 -683
+-665 -742 -963 87 628 716
+8
+221 565 272 967 -647 -648 212 946
+-780 94 -656 -226 -100 697 -981 -711
+5
+-778 -718 774 -940 821
+-560 -856 -727 -894 -981
+2
+983 -542
+-554 471
+7
+-943 442 575 -660 -960 626 -547
+-810 751 -102 571 -721 -871 -895
+6
+868 -561 897 597 -643 897
+283 -922 964 809 623 929
+6
+740 -102 -704 648 -865 6
+-147 897 -591 -699 -592 76
+7
+-127 537 -172 106 831 -425 520
+-128 -973 -438 573 -190 -60 -443
+3
+559 -429 862
+-633 383 826
+7
+198 -120 -128 431 276 -215 388
+991 917 309 8 233 303 261
+2
+-823 -850
+-809 819
+8
+-996 -995 -999 -994 996 990 992 995
+995 -997 -997 -992 998 -992 994 -997
+5
+-175 -713 -256 100 -567
+167 -208 -991 -373 336
+3
+80 656 -178
+-80 204 116
+6
+746 -893 632 -615 -533 804
+-184 503 -796 165 -752 572
+8
+-950 521 -464 -497 -669 -792 430 616
+-821 -558 59 -647 -794 397 783 950
+8
+-139 -140 -473 825 286 414 -166 -75
+-157 832 -967 -373 -741 399 -284 333
+4
+-333 911 931 564
+-14 -925 809 -710
+6
+852 170 167 -231 -359 292
+-36 -74 138 165 -408 686
+7
+-834 480 -523 -209 -543 55 528
+925 -906 563 730 776 -718 -953
+8
+-655 -954 593 -188 627 902 598 -717
+756 415 -531 -631 -436 -712 -622 -343
+6
+-62 -111 -619 338 811 -440
+424 240 -165 56 -439 -670
+3
+864 -560 -193
+878 -894 914
+5
+735 852 -300 -604 720
+417 -830 809 -945 -529
+5
+-743 -680 265 -748 -720
+-811 319 727 -373 629
+8
+-193 93 -373 -932 491 -17 454 867
+-289 96 532 -727 -827 224 -64 968
+8
+-156 453 974 687 914 -413 -467 -629
+-318 -25 999 132 178 -411 900 -238
+8
+-647 175 44 920 -275 -430 -237 264
+95 254 -541 910 -74 -937 690 -43
+5
+343 521 343 -503 -12
+-209 -847 -451 981 -36
+7
+402 294 -843 -108 -284 -457 -427
+31 -87 831 248 790 638 -477
+6
+-490 734 -604 -615 372 -721
+-82 946 -595 -621 -758 -937
+6
+-957 904 -812 -269 13 -861
+-463 -661 -547 985 -856 -663
+8
+-499 731 -676 -867 490 -523 965 -658
+874 -749 901 738 638 563 610 -645
+4
+686 -375 734 -341
+241 -121 690 -740
+4
+-670 -622 784 970
+-901 546 652 253
+6
+-566 -225 75 -320 -592 -237
+64 279 142 -272 502 74
+6
+-900 720 587 804 755 -25
+335 -705 47 -661 716 52
+2
+399 629
+-396 493
+6
+963 237 934 -928 -943 468
+630 526 262 948 826 948
+4
+-118 -204 592 -615
+46 -590 -810 698
+7
+716 -332 -910 -478 911 -310 -143
+876 -627 683 -777 929 976 -652
+7
+-900 -397 134 304 169 972 -256
+-995 319 -641 62 -552 -935 -479
+7
+742 -622 -831 797 889 816 637
+931 923 383 908 -453 250 -644
+3
+828 616 447
+597 -33 -877
+8
+-608 -967 917 -157 505 -643 483 -543
+529 -555 -961 400 873 -936 -781 708
+7
+98 -709 774 142 -821 763 522
+888 -796 452 -906 216 -818 231
+6
+465 483 -679 972 -906 556
+727 404 919 763 -578 925
+2
+-929 -844
+-272 943
+7
+851 -421 985 183 996 882 923
+-777 462 -932 -34 -677 -920 247
+6
+46 874 682 -229 -932 -459
+-186 425 664 322 -992 -223
+8
+369 619 270 223 291 721 -976 -461
+344 9 550 -46 451 245 -330 505
+4
+769 438 -204 590
+435 986 970 696
+5
+-78 -356 -197 485 86
+652 -806 26 862 -19
+7
+784 312 -755 -334 -59 313 264
+401 711 -848 -986 800 800 803
+7
+38 726 -768 -982 -978 539 -350
+-790 545 934 142 920 143 -974
+6
+571 571 691 895 190 -829
+-612 -729 -852 654 364 -721
+6
+903 -659 410 237 -518 929
+534 -275 902 -510 742 -347
+6
+853 24 608 -999 262 331
+-816 -776 868 -454 -772 -793
+3
+252 -953 -157
+-455 153 -176
+7
+-202 -516 942 187 -812 -562 -369
+810 -450 937 785 474 940 562
+4
+-962 849 -401 -355
+874 995 365 974
+1
+885
+563
+8
+-912 -930 -503 923 718 750 -666 112
+-397 688 207 -628 478 423 779 997
+8
+727 556 -523 -763 -381 871 748 -725
+-846 -967 883 -889 939 1000 -159 975
+5
+231 926 -747 -590 -191
+848 -712 922 -616 623
+7
+899 675 -912 98 144 -964 793
+316 744 816 -592 305 356 -489
+8
+-945 490 -711 913 -959 -486 934 364
+-735 -762 -336 133 -7 453 924 264
+7
+365 162 959 452 795 -185 936
+-126 -871 520 -992 641 -622 -743
+7
+662 493 -690 977 -188 -856 -746
+-649 527 -721 591 669 -604 -944
+6
+-803 905 -118 498 981 919
+-569 -339 -202 775 -269 -630
+7
+829 -823 -129 961 206 334 -974
+-756 -872 706 -465 53 -289 -405
+3
+-926 734 986
+550 99 845
+5
+515 -678 30 -383 -79
+77 -29 -552 -887 -801
+7
+-473 839 809 -638 78 -567 -511
+470 -499 752 597 948 -940 430
+5
+-934 -910 -807 662 -750
+-930 636 465 574 527
+8
+53 628 -1 814 -28 -42 195 74
+-251 -662 198 41 -612 103 -544 18
+7
+72 -23 -120 130 -422 161 235
+20 -195 -989 -301 920 672 179
+3
+-430 675 892
+305 -732 439
+8
+792 -472 -344 329 -800 -38 -847 756
+-558 781 679 -659 -581 -879 -872 738
+5
+70 311 922 -216 288
+-340 332 -525 -374 -965
+4
+-855 808 728 -252
+872 503 464 452
+7
+-51 -433 -383 -96 156 129 673
+-41 336 93 -15 172 -68 720
+8
+871 -977 -615 -93 515 966 -503 504
+880 -931 -722 347 -640 340 -983 78
+5
+492 9 806 -149 5
+469 857 731 -804 -907
+8
+756 -840 -368 -40 142 -934 -715 281
+851 -968 -591 -705 845 -652 -785 -121
+7
+-834 -938 -664 531 -792 687 910
+794 -973 -902 -611 856 -933 -719
+7
+861 231 -421 -986 971 -798 999
+744 991 964 -867 -932 -712 290
+7
+968 -563 -111 -224 723 19 -905
+-111 -392 210 -337 -941 268 4
+8
+-467 -797 -773 556 460 708 -809 -801
+-250 -179 407 -22 -203 191 -284 -734
+8
+-1 0 0 -1 1 0 -1 1
+0 -1 0 -1 1 0 1 -1
+7
+297 772 527 -933 770 850 -910
+709 -738 31 -749 -970 756 597
+8
+985 248 -427 823 927 -747 338 -991
+700 -742 -939 831 -294 516 236 -538
+1
+-831
+890
+8
+-137 -782 349 89 -91 -176 489 -96
+-63 31 263 145 371 459 115 564
+7
+879 622 -757 889 855 755 -776
+-930 -119 993 -103 -450 727 893
+7
+-455 -750 474 -258 -620 611 988
+-406 -819 -660 455 752 52 634
+3
+39 524 -343
+-21 -178 253
+8
+-688 983 804 671 -663 233 -996 -832
+-598 522 -464 488 474 -621 287 -479
+6
+-214 617 514 476 -1000 -949
+708 525 -661 -674 -316 881
+8
+-567 339 -226 -131 -95 512 -46 396
+-478 -416 -32 -105 32 14 134 -980
+8
+-648 234 -221 -244 -296 584 69 198
+-362 -542 86 -179 -507 431 486 -322
+8
+-647 -424 -938 -799 -554 -813 80 461
+789 692 977 600 821 -633 548 881
+7
+-761 -311 -551 -442 516 -12 797
+-937 948 -361 868 -306 825 -640
+5
+895 692 -362 -554 897
+-898 733 -480 -620 -895
+5
+-943 215 -650 944 -926
+-900 550 -624 -976 -806
+2
+-537 723
+279 997
+4
+750 797 921 481
+-533 -852 -760 -52
+8
+-131 203 74 633 -91 -118 236 -491
+718 -593 -911 505 -314 64 -196 -614
+4
+-733 973 157 -340
+-466 -980 721 -816
+6
+-491 598 900 -704 -583 282
+-428 893 -293 -613 -787 -882
+2
+260 221
+916 795
+7
+-483 -207 -802 -527 -971 -846 536
+-381 -805 733 954 979 -634 -271
+7
+362 -981 845 -233 -240 252 706
+-891 -666 813 895 684 -565 -923
+8
+-549 -800 757 -952 -785 -678 -818 -815
+968 684 -699 -943 -842 812 58 -787
+4
+523 -32 202 -390
+-305 -579 360 -588
+5
+-307 -588 256 -143 -76
+590 107 -546 -801 -123
+7
+-849 -853 -831 259 -461 -25 -288
+-494 -726 823 357 -688 67 -123
+6
+626 -95 -163 164 195 -101
+298 -314 935 -45 -54 60
+8
+802 954 559 -989 603 620 -977 -868
+799 -993 -464 -676 -889 -953 -950 -475
+6
+817 -890 748 -837 849 898
+778 921 -498 -707 929 -639
+8
+290 -392 -425 900 831 -113 -790 71
+199 -834 -526 615 -337 -648 -991 -384
+8
+980 999 -520 874 492 731 -350 194
+675 575 704 -603 -434 491 -21 -582
+7
+717 -811 961 -549 135 -857 640
+-817 -863 805 5 377 -987 -569
+4
+664 980 952 533
+-996 -654 539 -554
+3
+-376 -399 -236
+745 279 306
+4
+-321 -403 -932 -487
+867 990 61 398
+5
+678 719 -49 -870 -329
+-899 110 253 388 404
+6
+361 351 -206 -778 338 -46
+334 80 501 -578 -916 922
+6
+174 -990 407 295 629 -812
+-817 193 -174 -445 89 -46
+1
+-787
+-64
+2
+-832 -545
+988 781
+8
+-726 -145 638 -325 -819 -744 -717 431
+238 -842 -537 -779 -875 -720 529 393
+1
+994
+-912
+6
+-359 21 -957 50 -613 122
+-554 522 758 -370 -639 -648
+6
+-972 550 408 -237 961 930
+220 -905 -596 -838 888 658
+7
+-947 423 567 -948 -927 -683 -932
+683 -571 -355 -741 -211 763 670
+7
+-634 722 250 -850 36 -171 177
+799 889 -555 -836 972 472 -905
+5
+-95 -540 692 -38 -58
+220 348 695 -197 68
+6
+790 492 302 -860 -41 -490
+88 150 536 492 -940 -76
+8
+-767 858 -579 -888 -813 394 -916 -936
+-731 888 -727 -467 903 691 -792 585
+8
+-930 411 256 -632 -558 368 848 -26
+-244 802 -281 -976 -877 -777 -269 106
+8
+982 -944 -745 509 -732 670 -648 -784
+490 -802 949 484 963 -652 440 -730
+6
+-246 375 331 29 834 94
+603 -562 75 444 89 -205
+7
+-104 -892 42 8 410 -100 456
+781 -798 -29 -504 -812 -827 -821
+4
+-758 -651 12 602
+-920 -686 -423 -739
+7
+681 -470 866 -733 18 -31 -190
+184 377 -911 196 -303 -294 142
+6
+419 644 -278 84 260 921
+-96 -926 858 314 -777 -779
+8
+-213 993 676 -581 -524 910 660 727
+-793 277 606 544 -776 679 856 -99
+8
+955 697 990 -608 -860 677 517 647
+912 427 -41 -581 883 -974 444 942
+8
+-909 -667 903 -233 411 -755 -775 -843
+-854 -743 -948 -789 -718 372 -811 -887
+7
+-614 921 -823 513 -543 -755 -827
+-632 954 -442 -944 985 716 -862
+3
+-536 -760 673
+774 -576 262
+6
+-149 920 -61 -674 319 -139
+27 -535 -616 829 123 49
+7
+904 -818 -669 -847 880 673 -990
+-271 -810 491 -558 46 -874 759
+7
+-156 522 930 492 249 -968 729
+-380 431 -956 804 -872 633 -892
+8
+359 -809 132 -347 27 -311 -461 -264
+295 332 -696 -343 95 473 -190 158
+7
+692 -112 -910 917 -987 -762 -570
+-355 -962 638 984 -960 -987 133
+8
+-518 309 639 -88 -203 516 -871 -719
+-969 -562 -897 997 872 -851 -448 652
+7
+753 242 -321 694 101 71 85
+320 725 657 -838 -89 -298 876
+8
+962 880 504 -957 -598 949 478 627
+381 228 927 118 -945 -627 -800 -122
+7
+593 -394 -683 542 903 -986 609
+-471 -786 142 -671 317 -670 931
+8
+638 394 517 -198 -687 958 808 939
+802 -967 -759 820 553 898 -721 -501
+3
+838 -240 264
+-980 295 -344
+5
+-58 -841 -442 -448 -995
+-208 675 -249 -748 476
+7
+-704 -775 -687 954 -278 982 834
+-837 934 668 -954 646 811 -447
+8
+230 293 465 -546 27 921 -335 60
+-494 -749 162 277 -680 879 -56 678
+5
+517 -575 -44 -408 -143
+133 516 133 183 757
+7
+316 -958 -935 -703 -964 977 739
+726 327 -985 806 978 -483 874
+5
+-906 -414 -533 -683 385
+574 91 -133 157 -517
+6
+-635 736 450 -929 -974 -756
+-622 987 -705 811 -834 -706
+8
+881 -530 594 251 -141 -556 -965 724
+555 605 -944 -769 -712 631 -733 -946
+8
+-131 -717 -308 441 -226 -154 -424 64
+139 -241 -376 -7 430 -241 351 842
+4
+493 349 -140 407
+-657 -285 69 -142
+7
+897 -710 679 -871 669 -824 178
+793 47 588 -147 266 158 682
+7
+-770 222 -472 948 980 992 543
+-600 -569 61 -960 -828 -925 996
+8
+854 -673 834 -312 -809 961 952 -713
+245 -774 574 777 592 923 -221 305
+8
+703 -171 -869 -474 883 -999 -514 -809
+351 -930 -700 349 -226 -951 -457 -646
+1
+985
+-428
+6
+919 935 631 -140 366 954
+759 -870 553 -942 -752 703
+6
+-38 -592 -846 -866 -102 -602
+849 -302 -920 -748 215 868
+5
+-771 -489 822 -745 -940
+-72 -935 903 -780 -507
+1
+-952
+-947
+3
+-565 900 -796
+-916 -771 -979
+1
+-794
+727
+5
+16 -740 116 -897 -224
+157 336 990 -962 252
+1
+-479
+-513
+4
+-921 769 -379 -920
+-802 772 760 506
+8
+372 -618 -227 -718 -261 477 936 -309
+-308 720 479 827 582 681 860 -970
+8
+-681 -929 801 -832 -984 432 46 -291
+-973 -215 612 -276 -541 -428 -662 -805
+7
+-947 380 235 954 826 946 727
+-846 -365 548 902 727 -188 -403
+3
+645 -836 585
+-832 -831 806
+8
+712 3 934 -883 -883 988 -468 915
+-607 -880 424 550 -935 831 -917 -710
+8
+-594 -732 -773 254 -653 -657 398 177
+-58 -349 741 243 332 977 -413 -491
+7
+295 -769 -731 -75 1000 -872 856
+726 -676 909 -4 767 -796 -920
+6
+-654 -84 -371 916 635 -505
+-417 -872 -487 -550 -905 -806
+7
+-501 16 -164 -391 -297 -675 232
+-84 410 -59 -120 173 -105 477
+4
+999 -933 589 838
+749 -850 -469 922
+5
+714 723 -547 95 177
+536 -401 -975 -519 -761
+7
+-896 -775 -484 531 825 397 -966
+761 928 -557 302 -741 -369 -246
+7
+703 181 -590 -217 119 -64 574
+316 327 -150 -977 -670 -3 226
+8
+-588 -8 -28 -848 963 277 -673 -947
+792 673 -205 732 -869 871 804 803
+3
+128 668 424
+-354 785 959
+5
+-720 514 -873 899 -629
+-425 786 -905 -348 609
+8
+-405 552 -951 -821 855 -24 -305 999
+565 850 406 113 -788 -332 -440 -143
+2
+607 755
+-648 519
+5
+-849 631 388 513 -814
+-253 580 768 316 587
+7
+168 395 851 644 -990 876 -927
+-535 995 511 -484 -201 859 571
+3
+928 -855 920
+-315 -189 -997
+3
+228 -987 992
+973 -983 -926
+7
+-978 807 813 -855 477 -832 532
+-996 767 -617 -893 915 -271 86
+4
+744 -619 -874 723
+-644 -172 -129 36
+6
+627 -752 842 -648 -939 756
+-865 407 -721 -501 -853 941
+8
+-528 256 -111 -280 -37 9 88 -35
+-347 -701 290 181 889 -703 -23 -450
+6
+620 -852 381 -993 -624 -502
+807 779 -544 -813 390 -652
+8
+-16 786 792 861 -876 -172 -927 646
+-920 26 610 -946 -859 685 835 403
+5
+-216 -672 359 -991 -987
+-320 -532 -573 871 668
+7
+-222 -128 96 250 275 263 -77
+284 276 473 -234 -76 -6 191
+1
+-739
+910
+5
+764 518 -39 -532 914
+-858 997 -937 -378 559
+8
+707 -200 -284 873 440 -707 983 -687
+-862 773 -917 359 537 689 503 -723
+8
+-58 -918 -249 -285 171 -138 -168 -467
+-845 707 -289 413 -822 254 -905 17
+7
+904 -744 953 985 -389 741 558
+751 -804 -911 -731 587 116 -513
+6
+441 737 576 708 -655 931
+-647 -957 532 107 692 -969
+8
+184 184 184 184 184 184 184 184
+184 184 184 184 184 184 184 184
+6
+-788 -121 -895 705 -934 896
+997 940 112 -982 -500 -842
+6
+508 -900 -849 629 490 162
+-404 84 -536 -438 -391 933
+8
+-486 208 -990 -601 553 -356 -355 -270
+-54 -888 -930 753 -738 489 -762 -163
+7
+955 750 -683 -22 38 -955 296
+817 649 -582 831 559 414 -744
+6
+785 918 707 -110 887 -80
+686 315 -238 -95 708 436
+4
+750 224 413 967
+-98 -293 213 863
+4
+634 -659 137 925
+-653 921 555 -653
+6
+-205 418 3 859 580 -298
+-946 209 233 611 390 340
+6
+78 328 -630 -225 -162 -706
+35 859 -215 126 868 536
+7
+-134 -285 734 652 -65 49 336
+519 -877 -317 235 -809 -789 -146
+8
+156 -104 -118 -409 -227 -4 270 -118
+-487 268 -573 715 447 -41 -77 164
+1
+312
+840
+7
+-623 912 157 -120 33 248 -364
+540 587 214 409 -4 541 -337
+8
+-985 -934 -807 710 -594 -112 367 898
+52 -524 472 -905 941 -706 268 956
+6
+-969 250 68 -751 -602 -582
+389 721 611 -886 805 819
+3
+126 -573 -315
+-767 -298 -435
+3
+153 -865 -766
+-470 -868 -956
+5
+-523 -311 177 166 199
+67 53 247 -344 646
+8
+401 -630 -211 -653 813 273 436 -809
+502 -124 294 229 -164 146 -732 -316
+8
+148 -144 905 930 630 272 542 -876
+-789 -878 386 260 -435 -960 252 979
+5
+826 214 -974 864 -171
+-590 829 -553 -533 -34
+3
+895 -336 -563
+-760 -459 830
+5
+314 779 902 -424 564
+712 -965 405 -536 -898
+8
+-988 978 -218 -497 -722 439 -980 952
+352 -891 -401 -668 773 -727 702 848
+1
+-707
+-763
+3
+322 997 858
+38 997 969
+8
+99 -211 -394 -412 -553 118 266 -553
+-320 -446 -109 -880 -687 -143 423 184
+3
+-437 -310 921
+600 44 -205
+5
+-988 858 680 -995 946
+-613 515 776 857 -713
+4
+965 114 -987 787
+-624 993 936 -332
+7
+-741 -31 450 -165 641 -626 -172
+-19 641 -553 -422 -343 981 276
+8
+852 276 -791 -918 -746 -985 613 943
+-478 -428 -795 671 -859 -658 -957 748
+6
+189 501 671 981 -466 61
+-55 -26 -113 190 272 475
+2
+-521 524
+-903 688
+7
+-972 657 82 462 -763 -476 -960
+-425 922 -914 -997 -242 -61 -307
+3
+123 -975 984
+-590 -859 -638
+3
+911 -694 -650
+-467 682 -154
+7
+228 74 18 263 -82 -8 -168
+620 -214 80 575 -461 986 299
+7
+-743 -712 -172 529 -25 354 23
+795 -33 151 -754 232 -842 -351
+4
+896 829 -104 524
+851 460 674 -777
+8
+-896 -235 -734 844 759 -761 745 -715
+543 -721 983 714 953 -750 776 838
+4
+-472 -727 891 -973
+678 648 -853 712
+5
+-272 -928 -497 16 674
+-637 168 0 -25 468
+6
+-543 623 872 -312 -765 873
+-625 718 493 -686 -811 -700
+5
+938 283 -654 451 775
+850 89 -838 -779 626
+8
+-51 629 788 555 -997 838 100 -858
+-898 938 -938 -598 -843 760 866 922
+8
+-299 -164 -564 -922 -624 947 912 708
+-667 -270 673 -931 -749 414 524 8
+6
+-556 -983 908 -775 405 915
+493 584 617 991 65 555
+8
+-209 211 -95 -397 368 -85 8 -54
+762 982 202 -129 -358 -663 -220 -465
+8
+-951 975 -773 536 779 344 82 988
+-979 -248 789 -551 938 918 -325 -316
+8
+-350 850 -998 -649 640 -777 -964 18
+689 637 -219 -848 -709 -469 -915 -746
+7
+941 966 -830 -564 -181 -837 -720
+29 582 -245 -974 937 -618 -929
+6
+-50 82 309 30 -544 -825
+-31 81 387 109 208 -9
+7
+569 379 774 746 685 -906 545
+725 374 20 -488 -549 834 719
+5
+-44 -519 -183 190 332
+-474 317 -585 -788 7
+6
+-797 547 809 -570 -771 -941
+807 -754 973 843 -866 559
+8
+641 -569 -419 -482 776 -82 172 -481
+918 90 541 7 135 639 -202 706
+8
+18 -33 894 262 364 230 756 366
+-242 -287 -247 316 -887 661 -19 -706
+8
+972 -946 -819 918 792 -850 -439 -776
+-357 -185 -1 957 314 -542 -955 -687
+5
+-128 958 608 -550 -871
+884 -963 870 884 -870
+6
+572 187 -419 -944 -571 330
+227 -732 185 713 -186 44
+6
+-757 772 513 452 -763 986
+394 -637 -761 728 288 837
+6
+-235 -616 -220 -101 -294 -433
+219 -205 -583 -246 -3 -20
+8
+-506 -785 862 -478 889 221 308 806
+-707 971 -640 860 -958 522 -974 -365
+7
+218 -128 890 215 -358 -720 37
+401 -263 -379 -248 -391 490 231
+7
+819 832 -933 16 -903 933 998
+976 803 957 984 690 -958 -952
+6
+-523 -493 57 135 -611 -250
+558 -762 -812 -744 -94 -544
+4
+-773 -464 180 -262
+786 -400 -606 -175
+3
+-853 -789 954
+794 472 -866
+8
+859 696 -415 288 -6 412 299 252
+388 872 288 984 655 -686 -57 73
+7
+912 385 -321 1000 -957 877 -432
+958 899 300 -75 -990 293 868
+1
+517
+-486
+7
+-3 135 727 -623 592 199 413
+-392 991 967 -697 858 65 -701
+4
+-845 -685 -375 -520
+-372 -634 -906 -999
+6
+596 394 -184 -660 -208 327
+84 -565 -596 131 -367 -383
+2
+640 38
+-550 -480
+5
+-988 818 -536 681 -875
+522 290 -428 734 -989
+1
+832
+511
+8
+792 -383 -828 668 362 26 249 -647
+-735 -823 -996 903 517 803 -814 -500
+7
+803 761 29 -922 404 318 -341
+190 -140 302 -68 -636 -19 -217
+8
+755 -493 -846 -505 -727 -560 -503 -905
+-459 -701 485 736 -847 -968 -190 -341
+8
+948 -897 -797 -916 -701 652 -651 -752
+-829 -155 668 941 355 -809 -391 820
+5
+692 890 -811 -561 -548
+-159 425 -986 397 -887
+5
+-977 -711 -120 505 -711
+-950 996 965 -721 829
+8
+-910 877 495 -509 751 107 946 517
+291 861 576 470 -405 892 -946 -873
+4
+-504 -418 244 60
+-92 13 -222 171
+1
+845
+-169
+5
+-329 984 634 435 494
+-551 643 854 -960 -814
+6
+-904 993 263 452 -735 -900
+-46 -23 795 -948 416 -978
+5
+-967 404 649 695 -18
+754 -578 248 529 75
+1
+193
+518
+3
+490 -870 274
+-169 529 578
+7
+827 -804 846 561 619 694 632
+750 -841 939 -985 829 -891 -941
+8
+-228 89 873 -498 762 639 139 70
+374 674 -561 -220 624 -299 -239 757
+8
+71 25 -633 329 962 -459 -82 786
+138 -456 -862 439 447 115 -208 -840
+5
+717 846 353 668 -304
+103 231 841 -908 -976
+6
+662 -884 -154 -655 745 714
+-332 587 -832 877 -858 810
+7
+-971 458 -320 -790 483 -624 236
+835 546 344 -842 272 -949 -909
+8
+-543 715 -930 466 -356 960 770 -319
+974 -945 911 82 622 755 859 -653
+4
+765 -681 -865 941
+-934 -780 -561 5
+8
+-848 -511 -780 375 -944 -572 -526 934
+-985 381 93 -576 635 867 979 597
+1
+884
+838
+8
+-444 -251 726 -540 137 883 195 921
+948 796 349 411 927 -757 532 -1000
+7
+756 839 -645 -512 888 -241 -169
+-289 401 -899 -768 -684 558 734
+8
+-235 717 782 -877 -429 -659 359 627
+-394 -371 -825 47 571 918 -471 -181
+6
+-681 -459 801 -779 305 -692
+-606 -574 -977 -408 913 656
+8
+245 145 252 -360 -133 -426 362 -503
+-164 350 -169 46 605 -150 743 -680
+6
+-669 540 87 968 773 -881
+-298 470 -695 892 994 -815
+8
+-427 296 -281 234 -354 190 606 5
+151 -440 215 985 -960 -43 24 57
+7
+-994 808 153 -919 -895 875 -873
+-912 952 725 -134 -588 -709 898
+8
+749 -927 432 468 730 -897 -889 857
+987 818 -995 -949 -612 497 759 70
+3
+-298 215 48
+-475 -272 0
+6
+-434 887 860 -898 -869 645
+727 -749 -56 -579 -449 922
+6
+33 -435 211 -896 93 -197
+25 552 474 -194 715 -228
+5
+550 -998 -200 -736 -567
+592 818 -330 -873 -955
+7
+-262 -784 123 932 308 -336 -307
+-258 -167 264 -126 -39 -524 -256
+6
+765 -304 -989 97 608 -211
+658 -822 -629 67 -647 439
+4
+78 -572 -270 986
+220 -203 174 -190
+3
+-839 -569 -557
+573 -717 -519
+2
+344 407
+564 -271
+8
+282 -442 -777 865 -677 899 830 -986
+-492 717 908 462 -240 156 -791 -929
+8
+-746 672 -640 -844 969 888 862 26
+925 -407 58 -981 837 321 -861 -972
+6
+668 604 -978 -835 -745 -380
+834 663 887 495 993 990
+8
+-333 367 -342 852 -93 985 972 -611
+-429 -792 -626 -612 631 909 -759 968
+5
+971 998 -616 -627 -869
+-913 871 -404 -950 -679
+6
+-324 118 -356 -894 -27 -338
+902 -244 183 177 281 842
+3
+-339 -95 149
+926 -515 220
+2
+21 -999
+922 -894
+7
+-283 825 741 -617 -797 354 -521
+-885 -676 -921 882 -838 -936 402
+6
+-196 95 -373 644 -836 203
+-943 -421 -231 417 901 -447
+1
+961
+-724
+1
+531
+793
+5
+-931 -687 491 220 -900
+-568 917 41 417 384
+6
+828 -438 -690 -615 773 841
+-900 -845 -825 -680 -911 676
+8
+983 -775 608 -842 276 805 -431 458
+-948 754 -501 841 549 827 553 653
+8
+941 -938 705 753 586 727 908 -984
+-665 -575 826 988 81 -115 999 917
+8
+223 110 944 961 476 -905 -346 673
+-646 -318 -695 -725 -698 820 205 -881
+5
+-551 -701 1000 483 704
+692 -682 -823 780 806
+8
+-131 405 63 -424 -388 7 -38 -397
+-643 -274 991 271 -574 454 -219 788
+8
+664 970 806 -721 545 -634 -396 681
+-836 882 418 -860 -873 -148 348 -992
+4
+-835 983 915 -194
+-301 -647 -833 774
+7
+-270 -346 -190 405 32 -40 53
+-203 79 -311 724 -522 -899 -794
+7
+-752 895 -820 86 339 -626 941
+895 786 -711 -552 467 612 -765
+2
+-592 -960
+200 -792
+7
+404 213 113 970 -589 -300 -213
+357 -926 138 730 249 -157 904
+7
+-5 -860 915 771 -855 -194 -184
+275 -802 403 751 -501 554 -253
+4
+-257 -992 893 405
+724 505 834 -338
+6
+-460 157 917 -633 880 975
+-822 654 599 906 -857 844
+8
+743 927 402 -734 -632 732 -47 706
+893 794 -775 420 1000 -288 -664 -626
+4
+-308 -841 -795 -980
+626 488 -809 -454
+8
+606 375 195 -158 599 -869 -526 -735
+-786 922 -922 503 785 -924 -377 -968
+7
+165 -3 -97 273 -704 628 -319
+-125 541 -13 -919 265 -206 -310
+8
+668 -642 717 837 797 881 242 -835
+-143 121 995 -650 -489 936 530 918
+7
+683 609 -545 -279 918 35 -852
+-772 -833 -875 925 901 -841 793
+3
+-15 -972 -681
+966 -991 380
+4
+-6 309 -97 -609
+-414 92 65 666
+8
+-289 -205 398 298 300 -588 -273 -498
+-342 970 -292 -560 -359 67 374 231
+5
+869 926 560 943 811
+914 537 959 963 348
+3
+-102 620 935
+-134 113 -336
+4
+-103 -231 309 -27
+118 102 429 -285
+8
+813 504 -896 -998 -399 -614 -750 820
+-607 -214 -724 -932 -820 778 683 -506
+5
+-484 429 456 -76 -59
+587 944 846 -492 990
+4
+-138 978 -947 -98
+-740 -864 644 -3
+2
+101 136
+-219 -297
+7
+-946 944 571 -878 -682 272 939
+924 -937 823 484 703 -815 -960
+6
+951 -649 418 389 62 -671
+-31 46 -566 -80 716 -394
+3
+534 -276 -636
+777 -972 -675
+7
+865 -566 -224 629 397 -800 -746
+-643 -323 -151 -918 236 -854 852
+7
+-304 986 176 691 997 -549 484
+-988 862 972 82 -928 -857 786
+8
+746 276 212 4 -684 88 816 -471
+-571 934 -940 156 -347 -882 379 892
+4
+-830 -698 830 906
+-579 -116 -325 906
+8
+-205 220 376 -843 -804 -172 -409 223
+920 458 966 -835 -110 574 65 -594
+7
+-15 -7 -51 537 632 330 -572
+-245 554 -131 782 295 -69 -374
+8
+942 666 860 -718 -83 929 428 -341
+-878 -626 -644 -981 966 -984 -965 856
+1
+-244
+-51
+6
+220 -783 619 669 -239 -44
+-653 -475 894 -923 406 918
+8
+732 779 323 -186 -549 759 -861 -724
+-582 735 -10 -650 785 571 261 -736
+8
+-125 -242 982 67 -425 66 292 102
+785 -432 290 707 -776 929 -624 -4
+2
+122 948
+-49 -622
+8
+-872 -989 763 993 480 -756 -855 -50
+-591 751 734 -990 -512 -669 -128 -57
+3
+565 814 -31
+-452 766 90
+6
+55 -831 -322 763 -88 619
+490 -786 -105 -603 -81 205
+8
+643 -686 -679 447 -601 -437 -847 -986
+-372 482 896 733 968 722 531 291
+5
+-943 169 81 559 961
+-789 -814 325 169 -887
+6
+475 -882 426 -35 -870 215
+879 550 564 343 952 952
+6
+-870 957 771 844 283 450
+905 488 -877 -971 163 -389
+4
+-851 72 -447 349
+-2 191 432 -550
+6
+-577 93 885 -194 -65 -372
+196 232 96 -816 -947 -472
+8
+-29 -276 22 -114 -444 -96 150 61
+-966 -321 -40 -44 -926 149 -409 -84
+4
+-65 215 224 277
+-3 -331 -527 -237
+3
+903 267 841
+898 -886 854
+5
+-729 132 -359 -978 -400
+369 405 -45 107 -625
+4
+-627 758 -869 306
+-943 -65 -969 636
+8
+-725 869 679 -909 734 529 714 -734
+30 -987 169 -947 715 685 825 867
+4
+450 61 122 -980
+956 -711 343 -861
+5
+-21 725 -795 -659 206
+975 -624 825 -985 -500
+6
+-6 -863 667 -637 821 733
+-877 1000 -920 498 5 211
+6
+103 -195 -777 -912 472 550
+-75 -615 242 -42 -555 860
+5
+373 -273 840 -87 -660
+499 -671 396 223 -212
+7
+612 -216 -555 663 766 852 -390
+338 -505 96 -127 -118 872 631
+4
+643 534 772 -833
+886 247 -599 -330
+8
+185 -630 -844 -719 798 -817 -628 799
+865 -805 -353 -368 562 -810 128 -636
+7
+-600 130 -278 223 695 -371 211
+464 724 466 460 97 700 125
+8
+891 -780 995 748 -323 441 853 -923
+-639 -446 -716 -901 446 845 -951 -814
+8
+-277 622 -418 643 -920 -981 26 189
+-921 390 -717 -526 977 694 -104 114
+6
+92 792 -944 -813 -372 -311
+-218 831 853 -227 988 767
+8
+714 430 -370 -390 -260 577 467 -704
+384 -588 885 3 981 951 -692 847
+7
+-658 724 -603 808 7 -834 -727
+-402 -630 644 -490 859 878 571
+7
+914 -309 -209 -652 615 746 -890
+373 928 -169 417 -973 627 -163
+3
+310 900 -846
+-633 -167 565
+4
+833 772 132 -65
+-393 863 -664 -969
+2
+-461 860
+-126 -268
+5
+-686 -14 -783 -495 -901
+-414 878 -228 -535 -874
+4
+644 843 -929 -599
+770 444 561 984
+3
+454 -945 984
+-484 804 -952
+5
+-664 533 -31 -951 -236
+-961 948 399 -166 -930
+7
+379 -93 -92 -15 421 1 -9
+-306 -291 137 -908 -434 14 67
+8
+881 889 868 -671 -774 -809 943 701
+759 662 -820 -897 -119 206 -857 924
+2
+-897 657
+-990 -989
+8
+-640 -474 39 981 -247 -821 186 -567
+-969 -563 -88 341 175 -563 -113 656
+6
+800 820 -888 934 -660 587
+434 -982 -982 -857 -622 -146
+3
+836 -881 241
+524 413 916
+7
+-36 853 -560 -947 -743 -490 -981
+728 -901 770 966 431 -970 802
+6
+964 -870 713 -985 -621 818
+788 -913 925 -547 -136 -962
+8
+-589 872 684 852 -167 248 729 -629
+-707 -873 -844 866 -323 -493 -788 -24
+7
+245 40 5 -149 -317 -333 271
+26 181 969 691 380 235 371
+8
+-981 926 994 -702 -15 -302 -919 -972
+607 -659 953 236 -482 -761 -443 -184
+3
+-625 731 -739
+-334 -479 153
+2
+-327 127
+999 -113
+1
+528
+-407
+4
+665 665 -939 574
+-510 -933 132 -520
+2
+247 -816
+-806 39
+5
+-383 205 -461 -604 549
+-418 160 -154 711 -510
+7
+-885 793 -404 717 -71 -266 410
+-908 -869 -324 -471 749 -415 -704
+2
+398 588
+-475 -68
+6
+202 -4 -200 158 426 111
+-106 947 -915 176 764 -464
+3
+-558 -230 -263
+134 -967 -650
+4
+-195 45 4 -924
+239 162 -78 -214
+1
+-16
+-951
+7
+824 -937 729 -203 -836 -88 678
+644 -147 -828 -91 -721 -796 417
+6
+301 91 -975 80 -5 252
+-109 464 -919 -131 -340 -150
+7
+904 -837 -686 -904 208 998 928
+-979 125 -353 791 -798 912 861
+8
+-661 699 229 -780 373 901 -372 456
+815 -173 307 979 620 379 897 832
+2
+915 -8
+493 426
+5
+-73 438 12 438 540
+380 719 174 974 160
+8
+-104 -189 -348 391 -55 724 -59 -67
+46 757 783 47 -140 375 -109 372
+7
+77 816 196 231 41 -391 -220
+136 81 98 -4 -300 -535 -656
+8
+-973 640 -217 505 609 892 65 -387
+384 596 -809 675 -171 159 -574 -326
+8
+-433 -645 12 356 399 260 57 -692
+557 -64 496 479 -139 -277 477 -991
+6
+605 -703 -918 -298 296 -950
+-269 -805 385 -690 -638 879
+6
+-457 639 980 -294 793 415
+-58 654 -446 -845 -370 304
+7
+-560 -59 -486 -90 184 -245 -138
+656 -220 509 -462 747 -568 -254
+8
+730 -626 491 -894 -810 -63 722 -343
+-806 -425 991 -642 973 621 971 921
+6
+426 118 438 616 465 173
+20 324 182 115 -145 29
+8
+500 888 865 92 789 -990 -261 938
+-938 -753 -643 889 897 -99 -605 618
+8
+590 210 127 -996 219 432 469 198
+309 379 -177 165 531 384 -338 840
+8
+-923 751 -756 -988 -660 -725 -735 -825
+798 -449 338 654 920 -832 768 727
+5
+984 -450 967 -980 -873
+814 -103 882 865 -987
+7
+707 973 -884 850 784 -452 494
+393 -702 -522 -955 950 -916 -825
+2
+685 -547
+155 -711
+7
+-313 145 -90 284 -97 -53 73
+-643 -895 251 -217 350 19 581
+5
+-159 -552 891 538 800
+640 -541 717 -498 -422
+2
+277 -354
+97 -873
+7
+-3 667 753 -866 114 194 729
+-615 382 -863 -957 -751 -43 -716
+3
+-517 850 -839
+-660 -950 703
+3
+471 722 813
+222 -381 -745
+5
+-28 464 932 -407 -749
+-274 166 84 -383 -399
+8
+-415 -813 -779 786 924 -708 991 712
+-692 28 332 439 -68 711 276 131
+8
+853 -846 -644 -923 -324 -749 -488 789
+696 353 -870 862 -745 -895 -848 -780
+4
+370 893 -700 336
+-581 91 735 -398
+7
+729 861 -460 932 713 -957 -679
+609 538 -678 231 601 837 -873
+8
+-965 -907 -192 638 -857 -812 -832 470
+603 668 -606 999 -799 914 -359 757
+7
+-810 -858 757 961 -721 241 274
+-903 841 57 -752 -725 -917 790
+8
+-597 -341 460 572 -977 789 -506 146
+-180 -605 965 -982 -798 -682 -985 -894
+4
+901 995 282 979
+918 -681 299 -927
+8
+639 412 722 235 -89 852 -526 727
+-19 -910 -441 -746 536 -825 309 764
+7
+-869 336 -366 177 535 527 -350
+-299 -355 -855 908 115 576 686
+4
+990 374 -659 -495
+957 -555 45 537
+7
+683 -485 709 547 578 475 946
+131 998 -731 436 -903 -882 422
+5
+892 -991 387 657 -453
+-981 635 -423 470 -688
+5
+-313 -696 939 857 -608
+991 -364 -963 143 591
+5
+225 -24 155 -7 532
+136 0 905 -773 -391
+2
+854 -859
+747 176
+3
+-976 672 -535
+328 -779 -837
+8
+-308 595 789 723 986 -429 -861 -135
+-756 17 936 380 -82 982 853 915
+5
+963 -860 772 -931 -409
+948 -445 -737 977 517
+5
+590 -513 -697 337 936
+-790 -635 564 681 -950
+7
+-12 974 141 -23 692 -958 224
+977 -670 306 117 -860 548 83
+8
+333 839 -828 -579 97 -232 -995 -161
+307 177 -319 776 794 -267 810 514
+5
+-779 -331 -394 492 129
+560 862 21 -545 -162
+7
+-46 192 135 962 151 -35 880
+-51 -303 -192 -463 498 124 -863
+6
+120 -794 196 361 805 239
+325 -856 -236 434 -197 787
+1
+322
+563
+6
+474 938 396 641 593 -207
+519 633 870 -977 -928 -714
+4
+57 -321 -90 -273
+117 -199 -190 -146
+1
+-147
+644
+7
+-846 643 527 876 202 975 715
+-983 419 703 944 -910 -163 -949
+3
+-933 -752 -481
+43 835 -466
+3
+744 229 -612
+893 689 -189
+5
+-269 593 -149 267 -744
+409 339 -204 112 -48
+8
+857 976 977 428 557 -723 -986 549
+-688 740 -730 288 832 794 -784 -700
+7
+71 9 -285 362 292 433 302
+464 463 263 126 361 34 436
+5
+295 -108 -453 -133 -477
+856 -180 55 15 68
+1
+-817
+610
+7
+591 -980 -858 702 440 -936 -737
+-729 271 -791 497 -65 -297 263
+8
+-965 883 -751 933 -716 779 -371 645
+-657 768 -86 183 952 216 -400 501
+2
+22 133
+546 127
+7
+-344 -493 -910 628 -426 -134 585
+684 -37 661 934 443 -688 -391
+8
+760 -765 948 335 776 -942 -159 908
+539 145 878 186 913 897 272 -880
+4
+-68 250 317 689
+-262 47 248 -731
+7
+-557 699 856 719 -642 265 318
+-758 826 624 938 -422 527 998
+8
+-154 -83 -227 260 -26 292 -365 343
+456 -107 31 -217 -82 -115 436 -688
+6
+844 951 763 764 531 -810
+995 -769 407 826 -816 689
+2
+-264 -817
+-797 907
+7
+-596 -788 848 -807 998 -291 -935
+-806 -778 171 915 777 -294 -682
+4
+-596 910 -102 -632
+-960 747 -390 -285
+8
+-601 565 192 689 848 -724 834 -630
+-297 -560 -262 -724 -261 233 -355 180
+8
+-295 -993 825 -676 -563 -817 -854 -963
+258 778 938 662 -332 -931 965 630
+7
+-828 677 737 156 975 632 -948
+958 857 -786 -927 -729 563 -924
+6
+936 675 -332 -179 652 -696
+217 -632 477 -698 -723 971
+6
+479 702 826 779 854 25
+-323 -698 805 13 146 -546
+6
+693 -140 -593 55 208 -679
+-930 -818 -762 258 734 -905
+5
+9 -538 -970 656 8
+710 978 -559 957 946
+8
+-525 624 895 -951 247 -902 -409 979
+-993 708 887 764 -304 -786 -702 -993
+7
+-146 -945 201 -463 700 62 -954
+-441 756 512 670 705 -672 -424
+6
+598 -834 719 818 933 541
+-352 -433 -689 960 -572 639
+5
+-759 698 711 -787 217
+-187 -949 191 959 850
+5
+425 -850 348 829 955
+113 141 -480 693 -811
+7
+-816 302 763 -500 739 537 329
+-222 771 170 913 -455 -17 -25
+7
+581 798 784 -9 859 326 -923
+-596 223 -98 699 137 -941 -405
+8
+68 -789 -781 704 406 641 806 -556
+-901 -846 953 -720 -801 632 817 -806
+4
+908 -818 173 693
+-900 -518 957 596
+8
+-669 -401 772 -126 282 461 -639 232
+-815 124 -422 848 115 217 -534 -874
+5
+-652 -223 532 -190 620
+-327 750 -977 -668 -895
+7
+811 -615 -764 -938 190 -890 -575
+-170 783 -469 806 -296 272 447
+3
+-228 -952 490
+33 -961 921
+1
+726
+-912
+4
+-169 -244 -962 478
+850 -728 657 -999
+8
+398 779 -787 -458 -314 166 428 -187
+17 -361 233 -946 387 -665 -139 605
+7
+256 -778 609 991 -89 979 -753
+207 333 -736 615 -410 18 -480
+6
+873 -596 384 -550 -408 -959
+-356 -159 -143 -116 685 -611
+3
+-832 -636 973
+893 -920 492
+2
+-877 -674
+-686 -925
+7
+417 -196 -148 955 -934 499 0
+846 -202 -956 -459 -811 -907 469
+4
+950 851 565 300
+837 98 598 331
+7
+-423 879 -595 -294 -949 -844 -795
+-622 540 486 725 431 956 -732
+3
+-355 -317 231
+-354 -818 349
+5
+42 904 797 674 -996
+806 -844 -968 -89 -418
+2
+-572 -765
+-766 547
+8
+880 500 998 73 519 -669 -668 -764
+440 -32 -107 831 595 485 -820 583
+6
+499 438 -944 -105 -117 778
+-856 973 231 -281 -262 -40
+7
+-412 -625 327 10 1 -43 -712
+-246 -198 -617 -511 353 -654 36
+4
+194 891 -338 905
+-967 835 -618 -897
+5
+-924 193 -960 885 -366
+552 549 591 438 153
+8
+-190 -287 -316 536 55 26 -958 349
+-482 -25 -922 90 200 121 -102 -242
+7
+595 705 -405 982 938 -821 285
+-332 -932 590 -881 425 -708 705
+4
+-519 -314 -489 -248
+-198 -599 -236 -914
+6
+787 -902 713 905 -929 -300
+658 167 776 -684 717 453
+5
+635 903 -594 -977 -552
+897 -901 -362 -53 765
+6
+25 -462 -19 594 394 -310
+153 274 -402 225 503 -68
+7
+127 -95 -286 -188 297 -362 644
+-466 251 -62 -581 70 371 -401
+6
+-510 951 -863 -248 563 848
+312 452 376 588 -687 290
+6
+-795 -703 535 -633 872 992
+-408 -967 -772 -141 -507 -471
+3
+-645 972 -975
+-148 -653 -840
+7
+-334 -610 -443 -763 428 619 -642
+-193 461 65 885 914 -550 862
+8
+-601 620 -717 -998 -994 771 -887 -380
+-985 -632 613 -186 912 557 761 -401
+6
+-56 989 -721 -336 -923 923
+690 -519 -297 662 965 -685
+8
+-519 -834 647 859 819 -783 -795 834
+373 -405 -523 -923 740 -722 -571 698
+8
+-290 957 -996 409 322 -179 914 -928
+305 595 648 -940 488 82 684 846
+5
+-179 -789 505 -972 436
+496 743 -836 721 -233
+6
+-36 627 -847 -344 -599 -196
+-737 462 329 -716 500 672
+6
+-929 947 180 -619 408 359
+535 877 -548 67 652 186
+6
+-645 580 911 -851 987 -583
+-298 686 122 858 -631 -296
+8
+380 -169 -878 923 -506 -887 794 782
+758 747 -648 -925 922 635 805 -870
+7
+899 -706 777 -31 601 720 -548
+-511 940 611 -237 703 -348 -683
+5
+681 -402 -434 -963 409
+-483 -280 440 458 -237
+3
+-893 -631 -895
+191 55 -228
+5
+-625 -590 -590 938 -597
+637 237 698 582 322
+2
+325 -966
+-706 607
+5
+-219 -536 452 669 727
+401 945 992 -667 609
+7
+-755 313 -282 428 304 -535 -642
+95 76 -708 23 -348 324 85
+6
+649 308 -151 -190 622 -821
+-78 795 -124 -509 894 -898
+8
+635 -938 -859 -914 53 784 -217 647
+494 775 -270 -684 -720 -909 -851 -6
+3
+-498 -501 -367
+602 -98 -760
+2
+-348 -394
+108 -135
+2
+-919 777
+-973 570
+2
+944 -758
+996 -136
+5
+129 -332 785 -226 -6
+-848 -411 -304 -293 -497
+7
+-856 703 12 579 447 -346 432
+209 -445 -419 263 -286 -612 155
+8
+773 -885 -925 -975 -735 825 653 917
+-35 -252 841 -896 631 614 -738 -722
+1
+975
+-912
+8
+768 527 836 -651 91 888 718 596
+538 964 -701 -977 963 -910 648 -45
+8
+-93 469 -709 806 -623 -435 884 -320
+-812 128 466 -163 -179 699 -255 -581
+3
+-187 -350 -319
+-718 210 45
+8
+-864 -604 -845 775 -243 -794 959 -412
+-947 -674 -884 279 -745 -744 830 -835
+8
+989 -889 339 -826 1000 -593 978 -816
+-926 918 827 -586 -980 -908 656 998
+8
+-597 336 -135 -570 543 957 146 280
+-880 -60 -86 -94 -659 476 239 -340
+7
+608 -817 329 -136 -859 -915 -973
+-899 618 775 -479 983 -905 566
+8
+173 -607 69 89 -92 300 -211 -181
+-5 904 -105 -634 -306 34 519 -210
+8
+441 584 635 -243 -710 -258 508 -717
+129 -452 621 520 964 -833 301 -982
+7
+-99 943 545 491 947 -752 -641
+-812 -986 -902 -909 -952 616 -431
+1
+978
+999
+8
+503 -816 -157 425 -702 855 917 798
+-700 -783 769 -902 -949 -987 262 -921
+2
+627 -994
+-5 -726
+8
+-612 -910 -374 -734 -913 -986 -533 -12
+856 501 -751 -804 -357 -402 -908 -709
+8
+315 -763 865 906 855 667 -244 -786
+-922 117 958 -589 986 941 -759 82
+5
+684 -687 697 -846 669
+-854 -465 971 704 971
+1
+184
+-826
+2
+711 678
+484 -170
+4
+468 287 -206 -123
+-863 -354 633 208
+8
+417 -300 380 -859 -501 -970 -539 -293
+-913 727 -912 931 943 -593 992 -850
+8
+-480 896 913 -839 900 137 922 853
+634 647 -545 -960 853 -52 763 419
+6
+709 358 951 899 420 890
+363 -751 -447 -247 1000 578
+8
+-557 433 875 -832 -950 -530 815 -323
+-830 -90 -469 -783 -749 195 991 -691
+7
+144 -192 199 192 5 -195 214
+676 -268 -67 -773 -85 -525 540
+7
+203 958 803 294 232 735 -578
+623 -566 -907 -606 832 -826 945
+7
+727 -253 -580 437 -833 -640 267
+-642 -540 -485 870 -386 -347 681
+7
+-607 -80 289 -743 893 215 -222
+-135 -274 894 481 638 -268 -379
+1
+902
+-127
+8
+800 -682 991 -338 817 834 867 -797
+989 -883 968 -455 -863 690 -800 -571
+6
+-33 -763 -597 -569 -455 691
+19 503 -703 795 -225 286
+8
+-412 -325 -745 -450 -899 817 -990 -923
+822 771 -930 737 879 -761 967 -697
+7
+-849 -134 539 623 -542 -891 -933
+932 -567 196 165 702 396 -804
+8
+-902 -856 356 197 519 -86 734 -694
+963 796 87 914 -816 963 -887 737
+3
+291 564 -681
+694 323 -53
+4
+-440 143 -676 804
+-833 -712 -419 -368
+2
+-826 -922
+44 712
+8
+674 -123 -279 722 598 -673 623 726
+292 -398 -485 888 -963 53 -443 62
+4
+-866 -950 -980 680
+74 772 630 -744
+8
+-627 -727 701 -623 927 -678 69 38
+-868 -217 -552 -734 -812 -724 -825 953
+6
+-889 921 -783 227 879 -260
+-990 -630 868 -967 926 -803
+2
+342 -982
+-789 867
+6
+910 -118 -621 400 438 -503
+-351 -898 -343 503 -378 -578
+2
+-277 991
+-31 -940
+7
+-998 511 -572 864 -762 -980 843
+-999 -360 382 940 772 965 791
+4
+-781 -529 545 45
+-64 994 -573 234
+1
+-760
+-395
+7
+-451 -575 196 -39 323 509 921
+361 163 109 -493 535 -73 -488
+6
+-453 218 619 -862 346 -656
+626 -790 -889 -999 633 824
+4
+-876 -642 73 841
+-270 374 -936 -993
+4
+403 898 -247 808
+344 612 108 363
+6
+-817 -940 -896 667 532 -37
+-769 -812 573 807 781 652
+3
+-601 -52 787
+392 597 834
+2
+300 -200
+-41 228
+3
+-739 -512 -564
+983 -743 519
+6
+-179 379 -386 149 968 490
+425 606 136 -178 195 684
+5
+178 1000 320 -864 -761
+777 665 260 -636 839
+1
+-833
+-264
+8
+22 -662 50 80 270 402 302 -291
+-922 509 266 151 251 808 212 -258
+7
+-410 983 -672 -981 -972 -364 -935
+-84 818 -939 -799 -767 -845 -819
+4
+751 -258 -452 -473
+-955 -424 773 460
+8
+0 1 -1 -1 1 0 0 -1
+759 -866 556 976 971 196 -857 -891
+4
+668 562 498 -371
+5 -509 -41 626
+6
+-686 927 969 -931 752 -588
+869 -801 225 920 -57 -833
+5
+-984 -995 -246 -969 -363
+675 -939 165 -973 17
+7
+875 646 887 881 -248 -783 -393
+-867 182 -766 349 371 987 501
+6
+867 688 848 785 -945 -927
+-394 840 829 -576 228 -994
+6
+704 -994 -293 858 745 977
+807 976 264 625 621 980
+7
+-46 571 -523 85 118 -345 -272
+-947 -13 450 -156 903 202 -936
+8
+366 -642 694 860 971 547 920 -78
+-894 820 764 -172 948 -779 -940 694
+5
+-500 -467 -703 162 -992
+-986 942 361 670 882
+8
+-997 884 -655 -517 635 -537 -141 934
+-696 23 681 -316 491 756 -188 -828
+8
+-14 43 -163 -613 -47 65 63 -444
+459 548 -524 -21 882 -712 -617 -156
+8
+-587 555 985 200 -88 -922 -951 489
+-886 -514 -634 205 609 999 834 458
+7
+879 843 -642 932 839 -669 69
+490 881 631 469 713 915 -702
+5
+227 677 -687 -575 852
+-663 958 435 -314 -509
+8
+789 650 768 -962 800 958 998 916
+31 960 -936 960 990 275 58 78
+5
+-778 637 24 -969 904
+-851 847 -239 482 -882
+6
+600 -977 -726 -943 272 -801
+548 562 840 941 -338 -321
+8
+923 904 706 815 -437 -681 -625 -290
+299 872 502 383 -891 -986 -381 747
+5
+866 -491 350 543 920
+-769 -817 787 -705 -227
+1
+640
+962
+6
+-747 147 880 -130 84 501
+-138 140 -409 370 -259 101
+5
+400 -202 -647 -592 897
+-334 -302 454 -35 433
+5
+-908 -110 -677 -275 -601
+-970 -516 279 -21 299
+7
+205 149 823 503 -977 294 85
+-198 -287 -192 891 -326 888 289
+4
+-302 -804 666 -618
+-672 826 -868 892
+5
+278 784 -568 -767 -874
+-959 -700 -654 962 -981
+3
+566 -344 642
+131 411 30
+7
+487 -555 230 1000 -578 -775 171
+868 -747 406 -350 -419 -705 -486
+6
+-500 226 -570 497 -448 13
+172 40 689 985 876 295
+8
+961 297 358 -602 944 443 471 688
+200 853 181 -765 130 301 712 -34
+5
+740 294 -614 617 843
+602 -877 815 995 463
+8
+-214 277 547 -923 -644 -179 557 464
+140 -904 -413 698 877 -802 -441 777
+5
+477 817 920 340 -642
+-972 -39 698 -984 -355
+3
+884 898 14
+-851 -838 -828
+8
+259 -570 -793 -905 -998 -227 -646 375
+710 910 -724 988 787 330 326 -194
+6
+819 868 629 -619 -749 -723
+856 907 254 806 -497 -297
+2
+-13 220
+405 61
+8
+758 947 -903 -702 916 -975 -822 962
+-735 853 956 478 -466 -606 -961 -679
+8
+-281 -208 279 -458 267 -77 -364 120
+682 -70 -482 -217 -232 479 201 781
+8
+261 -3 285 775 -783 -12 377 -309
+611 884 10 31 322 -178 560 111
+7
+990 788 -802 251 -75 694 419
+-564 -996 911 -105 305 903 -695
+3
+233 -9 358
+-92 -106 -201
+2
+299 -437
+129 351
+8
+912 -871 528 -744 374 -400 410 -366
+848 853 -940 46 -213 899 -304 765
+2
+-407 -791
+762 -964
+8
+900 409 -829 644 -973 419 -358 -959
+802 -251 104 901 338 -467 -934 -909
+7
+-380 -807 -109 246 233 -509 6
+694 -6 106 281 -181 14 242
+6
+-274 -220 -959 -949 -145 653
+122 -289 -85 -597 934 933
+1
+780
+513
+8
+768 -693 -531 -820 -933 925 929 711
+593 -858 991 -940 -410 -210 644 723
+7
+76 -636 -187 -704 651 -732 -960
+-678 926 135 637 297 266 -763
+7
+-2 230 80 417 704 155 -65
+-653 -257 565 -40 -142 -147 91
+5
+606 -562 360 -256 -617
+722 -669 -180 -597 524
+7
+-130 -814 -910 -276 -631 -27 14
+997 852 277 898 936 -683 -498
+2
+259 -630
+557 -105
+4
+-952 -403 699 -543
+-978 -980 -636 -926
+8
+963 -914 806 -734 553 -747 961 -662
+587 -954 882 469 952 800 516 673
+8
+144 939 295 873 -553 287 582 -300
+-105 -373 -422 -708 276 451 -144 -925
+7
+-929 699 -702 817 859 962 -855
+153 863 629 681 487 980 445
+8
+285 806 889 -741 521 -349 -885 867
+-841 876 931 -180 867 305 -750 153
+5
+316 962 881 -376 513
+-429 86 -969 640 -995
+5
+975 316 -193 910 -265
+826 961 -515 188 969
+5
+-749 -571 831 982 -994
+592 797 -740 -947 928
+7
+-853 -818 -295 -488 -297 841 956
+768 860 289 487 603 808 -957
+6
+-732 662 948 -978 758 -521
+-153 720 -202 -349 781 208
+6
+389 334 886 -683 595 55
+-320 993 190 831 -566 928
+7
+409 -339 -692 246 -505 -48 -963
+994 598 -209 -132 -338 522 -879
+6
+-661 773 -641 907 -482 -341
+-721 -453 -773 -344 -122 -784
+5
+141 -286 564 620 -974
+789 -449 -682 54 -824
+3
+505 -346 474
+-696 -473 269
+3
+555 -993 895
+-905 -671 775
+6
+98 887 970 -947 -452 779
+499 -503 924 -899 -548 787
+7
+-69 -97 -558 742 -578 -774 543
+179 756 -748 293 -463 356 288
+5
+-568 529 -439 259 835
+-816 175 795 823 -5
+7
+958 846 294 672 -700 -519 -940
+-579 876 1000 -800 958 663 729
+7
+-8 684 255 1 90 -193 -579
+-79 730 -702 -138 -58 810 722
+7
+-962 513 -942 732 757 -955 -6
+-108 -725 -631 163 582 327 -316
+3
+-167 -363 172
+-213 -183 -493
+6
+-575 348 408 -77 -504 -462
+-886 572 600 316 -178 215
+7
+944 966 -427 -583 -833 651 542
+-649 128 -999 845 361 886 938
+7
+756 984 213 -882 -182 -830 924
+757 -742 466 906 238 665 -593
+8
+-118 -958 -707 -713 918 887 -627 -127
+550 -855 106 904 -952 -584 889 199
+8
+-461 831 759 -773 -745 -981 863 980
+737 964 -805 673 -546 522 618 -991
+8
+-206 -878 -803 463 -405 213 878 -110
+-578 584 478 77 -939 940 -450 811
+8
+-156 -772 981 -855 -238 802 852 550
+453 200 414 44 -393 526 -179 837
+8
+-451 773 -883 459 708 189 -342 79
+770 -945 776 177 420 -803 266 390
+1
+475
+935
+3
+549 -772 -442
+239 926 274
+8
+-395 822 781 914 -775 -906 -959 -322
+-655 -945 -469 270 -998 -204 -891 -911
+8
+937 -681 -973 -580 674 -463 353 913
+936 -651 484 716 674 -14 592 466
+6
+-580 -886 755 312 854 964
+597 891 940 690 99 -722
+8
+277 936 -942 -411 -236 -762 616 442
+-882 -975 798 892 707 724 709 331
+1
+-535
+-375
+6
+-80 783 274 3 -900 -507
+240 88 -201 -952 668 -871
+6
+723 970 -727 309 -245 770
+704 273 -826 -495 242 91
+2
+-202 886
+-980 821
+8
+236 642 262 513 943 -440 -556 817
+28 194 555 -533 891 -847 877 -769
+6
+-162 734 160 574 -1000 -415
+966 234 -865 -772 904 -830
+7
+938 -328 195 -666 -904 194 -841
+-766 519 104 -452 -461 -756 318
+8
+-494 -671 596 354 -557 691 -565 951
+-128 337 -631 -346 887 -33 472 -839
+3
+290 -679 -502
+928 354 -906
+8
+37 162 271 -879 188 16 -801 143
+-119 -657 78 147 39 -140 -556 -222
+3
+94 -712 -239
+-756 -122 -749
+7
+-829 783 -38 672 534 846 656
+-369 -167 69 613 4 389 -697
+7
+-321 -595 -924 837 -426 -144 762
+80 703 857 -167 -598 831 -265
+4
+434 -626 114 163
+-115 -10 967 -238
+5
+-467 150 415 191 -328
+403 464 350 -641 -126
+6
+4 744 740 836 932 -984
+411 -883 294 906 -581 297
+6
+599 -853 544 -697 -631 -701
+-990 139 -946 93 -680 660
+4
+146 776 -24 405
+865 486 -572 -733
+7
+562 -807 -62 679 -858 -672 80
+-616 -693 -952 725 -105 -796 -950
+6
+660 956 194 534 -540 803
+949 -941 760 930 584 -846
+7
+134 563 62 3 643 -12 -387
+-120 814 204 129 186 -191 113
+8
+-531 -649 -442 922 679 -667 -747 576
+-177 764 -711 871 19 640 -16 670
+6
+-102 153 773 -419 -491 -853
+-570 -680 -702 -616 860 -897
+6
+180 494 567 940 -689 686
+-450 953 271 -246 -850 -940
+8
+-275 855 295 347 258 -199 821 126
+39 846 531 -489 -626 463 533 328
+6
+-918 233 546 -993 -976 -596
+854 -6 650 597 -917 -374
+4
+246 28 49 16
+90 -673 199 937
+8
+-537 -842 -813 924 787 -966 690 659
+194 -836 -966 921 -798 830 917 824
+3
+804 -813 -457
+-209 499 -873
+7
+-845 -918 113 40 -515 118 843
+-166 545 -979 856 -151 -32 410
+7
+728 -98 -831 -255 -667 -656 -112
+299 -67 -838 531 -446 -242 -152
+6
+-905 380 105 392 457 714
+664 986 -584 -486 -568 -392
+7
+708 -821 -968 827 241 -927 -664
+253 -444 685 -570 377 -898 -855
+7
+992 598 -956 -996 633 308 976
+927 -744 -454 -627 951 873 -898
+1
+-953
+888
+6
+-50 316 795 -198 958 -359
+-619 -215 -864 298 86 -465
+3
+968 -178 -99
+865 -816 244
+7
+664 773 602 710 -823 554 607
+-772 -162 605 146 -160 277 -954
+5
+741 947 68 732 806
+-446 950 -740 -569 818
+3
+-413 919 -65
+907 638 695
+8
+-142 -75 387 7 -793 -301 -84 19
+-538 181 -549 -306 428 211 60 -272
+8
+835 -567 913 -385 619 677 -596 -890
+119 954 -999 -427 891 915 140 999
+3
+-543 -994 747
+736 -768 -193
+6
+692 -663 723 256 -949 724
+-813 -499 -226 -375 -679 -917
+6
+-614 -905 880 548 -701 -378
+89 543 -358 -119 219 -569
+8
+-895 -596 -732 -971 576 -916 402 224
+164 -180 -171 -690 -897 -99 749 642
+5
+854 553 -776 -700 523
+784 -243 -412 835 -211
+4
+693 846 -788 439
+335 -899 965 -977
+8
+484 -380 440 841 -762 -565 -247 -619
+-87 164 761 -928 333 390 488 -260
+6
+-87 -454 -390 -432 536 -836
+-934 -415 -514 335 -305 691
+8
+427 900 -982 620 -764 -869 577 -982
+397 553 617 949 -965 816 585 -268
+5
+271 -334 727 379 -334
+15 -402 -181 150 269
+7
+768 33 -104 -230 -165 -911 106
+-726 188 -603 529 -147 33 457
+6
+495 106 644 -749 -88 256
+-900 505 -565 -432 -155 434
+6
+197 -667 -676 -433 -749 430
+-736 -74 -561 554 -582 -894
+7
+453 226 -174 -200 68 20 -150
+-336 -904 249 161 169 270 41
+4
+191 70 -356 -29
+153 403 -504 483
+7
+-495 -359 73 251 -620 -72 -458
+573 -398 -20 461 -978 -517 -94
+5
+-439 751 559 -253 -557
+111 852 708 -773 -600
+2
+-412 -817
+593 728
+4
+-12 -640 414 -214
+-326 361 -13 301
+8
+217 103 737 772 281 421 255 -780
+-713 -190 849 -936 -344 -640 -862 -937
+1
+857
+-290
+7
+528 294 0 445 -456 -900 -780
+278 -223 -46 433 62 201 -155
+8
+988 896 -303 -642 298 975 -454 687
+-828 663 -948 -893 -310 -52 532 927
+7
+616 872 668 -629 -396 928 836
+574 -862 -791 109 308 -753 640
+7
+-806 -782 -539 743 -817 962 974
+-954 -614 708 -467 801 -518 -729
+7
+-950 773 803 607 449 -933 859
+-984 -104 725 -899 601 -675 -859
+6
+-440 -957 795 451 -299 -622
+373 -847 -954 663 938 703
+8
+982 -699 523 -814 -356 987 -214 -942
+-913 955 612 -410 695 -652 -777 -917
+2
+862 -715
+-910 375
+7
+654 -567 -846 -161 -770 758 -525
+-981 609 -973 -454 229 -788 971
+6
+792 975 -911 -382 -811 -373
+809 803 -751 84 655 587
+8
+502 -230 -212 -199 -123 -67 -354 -669
+439 -821 749 174 -167 -472 -323 283
+5
+-773 587 236 681 4
+358 892 -971 971 -593
+6
+858 509 -889 -457 -101 -370
+-902 -802 -43 663 -932 505
+7
+-371 -647 398 -38 -826 -920 -97
+491 -256 -16 958 -777 -77 -57
+3
+-518 -429 575
+203 -742 -310
+7
+-214 -250 4 -581 198 -369 410
+-190 -36 -62 221 19 -283 -121
+6
+792 798 259 -48 -899 214
+145 -842 613 -595 802 790
+3
+373 735 -463
+-51 31 -852
+3
+131 530 130
+75 367 732
+5
+700 363 -499 -158 -323
+-142 -382 -872 -43 -491
+4
+-190 203 -307 919
+10 558 -137 -934
+5
+273 513 458 223 -763
+-181 -863 -738 -440 -828
+5
+616 -413 -763 466 908
+-980 824 -936 72 969
+7
+916 -936 -313 -870 517 -846 -330
+488 -382 993 277 -29 300 -869
+7
+521 874 -537 -359 -401 885 -684
+-631 914 -819 -804 -122 739 -417
+8
+874 -486 400 633 980 -329 -534 -678
+809 525 -912 -499 487 -986 579 135
+7
+-571 812 475 618 442 752 -817
+836 -920 466 920 -967 -978 92
+8
+997 745 982 736 813 472 -697 954
+-441 338 -979 559 -586 446 -869 -876
+6
+979 459 758 -503 -649 460
+80 -396 434 693 829 -931
+2
+-988 -778
+-918 -828
+2
+-474 59
+4 197
+6
+790 -581 -161 22 279 61
+280 -421 -356 483 -418 82
+6
+710 -891 338 679 -949 616
+904 -289 -871 -179 -324 -816
+6
+-672 -291 -701 -736 668 -970
+-904 953 527 -570 642 328
+4
+589 156 -872 -283
+-717 469 743 22
+2
+-970 -719
+-485 -233
+6
+192 -512 -885 516 -314 637
+342 -113 -413 -636 303 -735
+7
+-663 485 -791 -928 -775 173 946
+60 887 -756 -693 -381 968 -920
+8
+627 623 458 554 -147 -746 218 -868
+792 978 325 -852 -667 687 -105 337
+6
+-458 925 -856 -857 719 984
+545 956 -135 -931 -460 819
+4
+-716 869 407 604
+-596 -658 893 970
+6
+45 594 829 -975 -47 -752
+881 -763 879 -697 -739 857
+2
+-895 497
+-299 851
+8
+639 -101 288 626 967 824 -882 988
+-114 -655 937 -811 615 -988 -311 220
+8
+343 637 686 -5 667 336 -512 -877
+827 -673 7 990 -392 -470 836 -886
+5
+766 633 -288 948 -544
+737 -116 658 -829 278
+4
+-305 336 268 144
+-64 -108 -727 311
+8
+-515 -817 -745 -889 901 -841 863 582
+895 -465 805 -457 652 912 799 733
+4
+-135 872 210 293
+-438 -884 739 -775
+8
+-893 823 683 -751 974 572 758 -492
+-406 999 532 838 795 -513 729 -753
diff --git a/codejam_2008/src/y2008round1a/A-small-practice.out b/codejam_2008/src/y2008round1a/A-small-practice.out
new file mode 100644
index 0000000..6b599d3
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/A-small-practice.out
@@ -0,0 +1,1000 @@
+Case #1: -25
+Case #2: 6
+Case #3: -1411926
+Case #4: -1676486
+Case #5: -880050
+Case #6: -41474
+Case #7: -3422801
+Case #8: -250244
+Case #9: -2719806
+Case #10: 128194
+Case #11: -5098224
+Case #12: -2699266
+Case #13: -1661599
+Case #14: -2764707
+Case #15: -1047384
+Case #16: -3268019
+Case #17: -2115592
+Case #18: -304415
+Case #19: -3586682
+Case #20: -1276903
+Case #21: -3494276
+Case #22: -317030
+Case #23: -711718
+Case #24: 200861
+Case #25: -272187
+Case #26: -2360754
+Case #27: -1574116
+Case #28: -2813908
+Case #29: -3142951
+Case #30: -2004458
+Case #31: -4506055
+Case #32: -201502
+Case #33: -952691
+Case #34: -3169606
+Case #35: -406935
+Case #36: -3052145
+Case #37: -642941
+Case #38: -1769014
+Case #39: -2561998
+Case #40: 223399
+Case #41: -911213
+Case #42: -1377831
+Case #43: -3258268
+Case #44: -1428776
+Case #45: -1011556
+Case #46: -4048802
+Case #47: -443244
+Case #48: -126411
+Case #49: -781763
+Case #50: -735553
+Case #51: -2633028
+Case #52: -2538099
+Case #53: -3696925
+Case #54: -1168043
+Case #55: -1751507
+Case #56: -1080972
+Case #57: -306998
+Case #58: -3108023
+Case #59: -2009559
+Case #60: -1664884
+Case #61: -809553
+Case #62: -1409025
+Case #63: -3302832
+Case #64: -902880
+Case #65: -3404808
+Case #66: -644039
+Case #67: -3927438
+Case #68: -2866299
+Case #69: -898698
+Case #70: -353711
+Case #71: -2377340
+Case #72: 74885
+Case #73: -2333049
+Case #74: -1810709
+Case #75: -3715089
+Case #76: -1662723
+Case #77: -3425699
+Case #78: -2345112
+Case #79: -909526
+Case #80: -783562
+Case #81: -1084892
+Case #82: -1069570
+Case #83: -2814239
+Case #84: 7928112
+Case #85: -1874643
+Case #86: -465987
+Case #87: -1051190
+Case #88: -2463531
+Case #89: -2321941
+Case #90: -2028733
+Case #91: -2455292
+Case #92: -3721944
+Case #93: -1135171
+Case #94: -366489
+Case #95: -1084566
+Case #96: -215258
+Case #97: -3794477
+Case #98: -2182913
+Case #99: -2995277
+Case #100: -874310
+Case #101: 146824
+Case #102: -419875
+Case #103: -2518946
+Case #104: -1580750
+Case #105: -1039130
+Case #106: -1029042
+Case #107: -530397
+Case #108: -3653782
+Case #109: -14262
+Case #110: -1303293
+Case #111: -3947681
+Case #112: -1915707
+Case #113: -169371
+Case #114: -1195192
+Case #115: -4261288
+Case #116: -1118062
+Case #117: -1475092
+Case #118: -613192
+Case #119: -2215238
+Case #120: -2379001
+Case #121: -2850274
+Case #122: 209257
+Case #123: -799864
+Case #124: -2216821
+Case #125: -690467
+Case #126: -1718837
+Case #127: -1511303
+Case #128: -685903
+Case #129: -141639
+Case #130: -30343
+Case #131: -5947135
+Case #132: -314834
+Case #133: -79512
+Case #134: -2225350
+Case #135: -2756260
+Case #136: -1674494
+Case #137: -1785278
+Case #138: -636687
+Case #139: -2669829
+Case #140: -2436846
+Case #141: -1055794
+Case #142: -1453710
+Case #143: -2409806
+Case #144: -1202098
+Case #145: -2356600
+Case #146: -2008574
+Case #147: -1997541
+Case #148: -1160678
+Case #149: -1625101
+Case #150: -937700
+Case #151: -704472
+Case #152: -3414069
+Case #153: -967097
+Case #154: -1452070
+Case #155: -552876
+Case #156: -1654286
+Case #157: -52377
+Case #158: -539516
+Case #159: -848554
+Case #160: -2919802
+Case #161: -1622767
+Case #162: -1228099
+Case #163: -479625
+Case #164: -3482272
+Case #165: -2737096
+Case #166: -1093307
+Case #167: -646479
+Case #168: -3326992
+Case #169: -1915311
+Case #170: -767940
+Case #171: 968871
+Case #172: -829888
+Case #173: -1646297
+Case #174: -3413096
+Case #175: -2500428
+Case #176: -1752097
+Case #177: -2515340
+Case #178: -232837
+Case #179: -2446285
+Case #180: -1348149
+Case #181: 498255
+Case #182: -3017692
+Case #183: -4508070
+Case #184: -2109655
+Case #185: -2098870
+Case #186: -3116494
+Case #187: -2718748
+Case #188: -2983175
+Case #189: -2180187
+Case #190: -2397438
+Case #191: -281156
+Case #192: -478326
+Case #193: -2717396
+Case #194: -2506063
+Case #195: -1058145
+Case #196: -777783
+Case #197: -635839
+Case #198: -2930576
+Case #199: -1256229
+Case #200: -169308
+Case #201: -515798
+Case #202: -3706308
+Case #203: -1246427
+Case #204: -2227054
+Case #205: -2509159
+Case #206: -4378589
+Case #207: -1550052
+Case #208: -1024128
+Case #209: -4
+Case #210: -3127880
+Case #211: -3663120
+Case #212: -739590
+Case #213: -620855
+Case #214: -2396205
+Case #215: -2582397
+Case #216: -180870
+Case #217: -2963077
+Case #218: -2571270
+Case #219: -909246
+Case #220: -952989
+Case #221: -3684882
+Case #222: -2541877
+Case #223: -2267893
+Case #224: -531770
+Case #225: -333672
+Case #226: -1815174
+Case #227: -1273591
+Case #228: -1451705
+Case #229: -1684997
+Case #230: 409136
+Case #231: -2318961
+Case #232: -3024940
+Case #233: -1358904
+Case #234: -555122
+Case #235: -525740
+Case #236: -1032648
+Case #237: -402677
+Case #238: -3139162
+Case #239: -2600006
+Case #240: -2205149
+Case #241: -1816632
+Case #242: -3165350
+Case #243: -1679257
+Case #244: -478155
+Case #245: -1524884
+Case #246: -1063330
+Case #247: -1342400
+Case #248: -1017680
+Case #249: 50368
+Case #250: -1247661
+Case #251: -1087599
+Case #252: -906528
+Case #253: -1035202
+Case #254: -2906167
+Case #255: -2218183
+Case #256: -2470108
+Case #257: -560028
+Case #258: -1461606
+Case #259: -2936257
+Case #260: -2215673
+Case #261: -4266078
+Case #262: -647854
+Case #263: -1397446
+Case #264: 204512
+Case #265: -1408384
+Case #266: -1917193
+Case #267: -2001500
+Case #268: -1879450
+Case #269: 957964
+Case #270: -2837383
+Case #271: -1116320
+Case #272: -1322916
+Case #273: -2902046
+Case #274: -2951193
+Case #275: -1012562
+Case #276: -2914047
+Case #277: -3037693
+Case #278: -1000920
+Case #279: -3243065
+Case #280: -2961414
+Case #281: -2718690
+Case #282: -982856
+Case #283: -825315
+Case #284: -4041422
+Case #285: -1853516
+Case #286: -609063
+Case #287: -4260022
+Case #288: -819761
+Case #289: -1728374
+Case #290: -3296704
+Case #291: -1074147
+Case #292: -499114
+Case #293: -1617047
+Case #294: -3891594
+Case #295: -2368818
+Case #296: -1303817
+Case #297: -421580
+Case #298: -1903225
+Case #299: -1309332
+Case #300: -802743
+Case #301: 901544
+Case #302: 250156
+Case #303: -577238
+Case #304: -1302198
+Case #305: 245727
+Case #306: -2218724
+Case #307: -2537549
+Case #308: -881527
+Case #309: -2101597
+Case #310: -1696591
+Case #311: -4510654
+Case #312: -2002077
+Case #313: -3713673
+Case #314: -592293
+Case #315: -593249
+Case #316: -1661237
+Case #317: -1671429
+Case #318: -2746875
+Case #319: -1374884
+Case #320: -3432256
+Case #321: 219120
+Case #322: -1937811
+Case #323: -2814354
+Case #324: -174207
+Case #325: -902345
+Case #326: -2493558
+Case #327: -1053421
+Case #328: -2146615
+Case #329: -3610117
+Case #330: -555105
+Case #331: -2690280
+Case #332: -803393
+Case #333: -2187803
+Case #334: -3686997
+Case #335: -1398232
+Case #336: -230112
+Case #337: -672490
+Case #338: -2259939
+Case #339: -3280100
+Case #340: -862277
+Case #341: -3426863
+Case #342: -2222540
+Case #343: 270848
+Case #344: -3273736
+Case #345: -1731966
+Case #346: -1186351
+Case #347: -2369128
+Case #348: 120018
+Case #349: -75550
+Case #350: -1548931
+Case #351: -855008
+Case #352: -1362780
+Case #353: -1621738
+Case #354: -670990
+Case #355: 262080
+Case #356: -888666
+Case #357: -3872732
+Case #358: -2382858
+Case #359: 211137
+Case #360: 925170
+Case #361: -462628
+Case #362: -1605684
+Case #363: -3226394
+Case #364: -1882232
+Case #365: -993266
+Case #366: -2046994
+Case #367: -4046488
+Case #368: 539441
+Case #369: 1190322
+Case #370: -526201
+Case #371: -464645
+Case #372: -2469655
+Case #373: -1736831
+Case #374: -1706264
+Case #375: -2960884
+Case #376: -329632
+Case #377: -831620
+Case #378: -1618993
+Case #379: -348480
+Case #380: -798645
+Case #381: -379821
+Case #382: -1501423
+Case #383: -50180
+Case #384: -3719427
+Case #385: -2251561
+Case #386: -947538
+Case #387: -2367750
+Case #388: -1728372
+Case #389: -4050233
+Case #390: -3176071
+Case #391: -1045138
+Case #392: -890420
+Case #393: -3549294
+Case #394: -1912894
+Case #395: -2853244
+Case #396: -445764
+Case #397: -651442
+Case #398: -517714
+Case #399: -3641323
+Case #400: -1544527
+Case #401: -1605563
+Case #402: -2859310
+Case #403: -2819038
+Case #404: -1352060
+Case #405: -2106005
+Case #406: 33453
+Case #407: -3986220
+Case #408: -1022259
+Case #409: -2396651
+Case #410: 9362
+Case #411: -530658
+Case #412: -1875854
+Case #413: -649546
+Case #414: -2269741
+Case #415: -251262
+Case #416: -1575676
+Case #417: 1594375
+Case #418: -739471
+Case #419: -370240
+Case #420: -2437852
+Case #421: 425152
+Case #422: -3294515
+Case #423: -1097814
+Case #424: -476171
+Case #425: -3347016
+Case #426: -1971604
+Case #427: -2641856
+Case #428: -2769932
+Case #429: -151306
+Case #430: -142805
+Case #431: -1734171
+Case #432: -2487923
+Case #433: -991483
+Case #434: 99974
+Case #435: -440724
+Case #436: -2587020
+Case #437: -1354584
+Case #438: -2147169
+Case #439: -1582049
+Case #440: -2849258
+Case #441: -2617222
+Case #442: -3008670
+Case #443: -1097878
+Case #444: -3880095
+Case #445: 740792
+Case #446: -2306332
+Case #447: -2766694
+Case #448: -2522087
+Case #449: -1591272
+Case #450: -1114255
+Case #451: -2918647
+Case #452: -1256353
+Case #453: -3764279
+Case #454: -4086258
+Case #455: -115181
+Case #456: -2887323
+Case #457: -1039463
+Case #458: -1415616
+Case #459: -710756
+Case #460: -1881574
+Case #461: -387798
+Case #462: 213933
+Case #463: 83719
+Case #464: -3829549
+Case #465: -4438445
+Case #466: -2044427
+Case #467: -3348376
+Case #468: -1919950
+Case #469: -1293981
+Case #470: -411549
+Case #471: -939852
+Case #472: -2129589
+Case #473: -1601529
+Case #474: -695764
+Case #475: 421083
+Case #476: -1762703
+Case #477: -1851426
+Case #478: -2241916
+Case #479: -1965641
+Case #480: -3323683
+Case #481: -1963678
+Case #482: -1234846
+Case #483: -3926044
+Case #484: -1998740
+Case #485: -643705
+Case #486: -3211260
+Case #487: 276864
+Case #488: -1731614
+Case #489: -2367148
+Case #490: -1110705
+Case #491: -1921289
+Case #492: -3040191
+Case #493: -413786
+Case #494: -3222309
+Case #495: -1159515
+Case #496: -1864698
+Case #497: -3412362
+Case #498: -1182867
+Case #499: -542834
+Case #500: -1214298
+Case #501: 2936721
+Case #502: -408766
+Case #503: -202072
+Case #504: -2470831
+Case #505: -573347
+Case #506: -1381926
+Case #507: -62511
+Case #508: -4195944
+Case #509: -1246290
+Case #510: -826920
+Case #511: -2286345
+Case #512: -3109883
+Case #513: -2699916
+Case #514: -1465336
+Case #515: -2364476
+Case #516: -890663
+Case #517: -4462083
+Case #518: 12444
+Case #519: -2076518
+Case #520: -3065998
+Case #521: -1642602
+Case #522: -595634
+Case #523: -2988881
+Case #524: -340824
+Case #525: -1444822
+Case #526: -3345320
+Case #527: -1733560
+Case #528: -1180184
+Case #529: -2545250
+Case #530: -645103
+Case #531: -1108703
+Case #532: -243111
+Case #533: -270883
+Case #534: 157922
+Case #535: -774236
+Case #536: -1534989
+Case #537: -2966293
+Case #538: -1390149
+Case #539: -2150969
+Case #540: -2576318
+Case #541: -1572099
+Case #542: -1099565
+Case #543: -1350082
+Case #544: -1280758
+Case #545: -2234992
+Case #546: -570978
+Case #547: -4244502
+Case #548: -2931810
+Case #549: -2373670
+Case #550: -2276027
+Case #551: -2991424
+Case #552: -2557175
+Case #553: -1099460
+Case #554: -1427756
+Case #555: -172394
+Case #556: -51489
+Case #557: -639790
+Case #558: -1916284
+Case #559: -1610691
+Case #560: -563556
+Case #561: -4068234
+Case #562: 236703
+Case #563: -1863682
+Case #564: -3062174
+Case #565: -335444
+Case #566: -3693094
+Case #567: -3576442
+Case #568: -3137285
+Case #569: -535698
+Case #570: -2838265
+Case #571: -254466
+Case #572: -341024
+Case #573: -214896
+Case #574: -1382933
+Case #575: -230906
+Case #576: -809902
+Case #577: -2019895
+Case #578: -306364
+Case #579: -673186
+Case #580: 318588
+Case #581: -262368
+Case #582: 15216
+Case #583: -2672025
+Case #584: -838284
+Case #585: -4098429
+Case #586: -1016602
+Case #587: 385846
+Case #588: 266578
+Case #589: -628763
+Case #590: -789404
+Case #591: -2334297
+Case #592: -1440856
+Case #593: -1500514
+Case #594: -1830532
+Case #595: -885875
+Case #596: -3897535
+Case #597: 51390
+Case #598: -3694751
+Case #599: -757063
+Case #600: -3882958
+Case #601: -3056614
+Case #602: -4126233
+Case #603: -571820
+Case #604: -602656
+Case #605: -1605011
+Case #606: -276159
+Case #607: -2390362
+Case #608: -1056097
+Case #609: -776205
+Case #610: -700430
+Case #611: -1902944
+Case #612: -1963532
+Case #613: -1150017
+Case #614: -2336381
+Case #615: -4212848
+Case #616: -3348156
+Case #617: -2163270
+Case #618: -1060789
+Case #619: -2580287
+Case #620: -1966347
+Case #621: -1429098
+Case #622: -1949227
+Case #623: -2332964
+Case #624: -2310028
+Case #625: -521883
+Case #626: -491369
+Case #627: -465827
+Case #628: -2215744
+Case #629: -2989591
+Case #630: -2333284
+Case #631: -2218433
+Case #632: -2420744
+Case #633: -1188127
+Case #634: -1358947
+Case #635: -1330457
+Case #636: 181286
+Case #637: -1618092
+Case #638: 8058
+Case #639: -94668
+Case #640: -2981013
+Case #641: -587245
+Case #642: -529351
+Case #643: -545963
+Case #644: -3381146
+Case #645: 148055
+Case #646: -501151
+Case #647: -498370
+Case #648: -2035266
+Case #649: -2849440
+Case #650: 28903
+Case #651: -2276971
+Case #652: -1856812
+Case #653: -591827
+Case #654: -1329753
+Case #655: -589846
+Case #656: -955741
+Case #657: -530611
+Case #658: -2707758
+Case #659: -1136064
+Case #660: -1668927
+Case #661: -4308074
+Case #662: -4107615
+Case #663: -2432965
+Case #664: -1199520
+Case #665: -1422420
+Case #666: -1816272
+Case #667: -4304769
+Case #668: -2357740
+Case #669: -2087497
+Case #670: -2163701
+Case #671: -1664382
+Case #672: -1609409
+Case #673: -2260907
+Case #674: -3953988
+Case #675: -1855892
+Case #676: -2069124
+Case #677: -1371039
+Case #678: -2300535
+Case #679: -1355206
+Case #680: -662112
+Case #681: -1332498
+Case #682: -1918028
+Case #683: -2192020
+Case #684: -1114364
+Case #685: -1951048
+Case #686: 1225072
+Case #687: -2555952
+Case #688: 963751
+Case #689: -2880487
+Case #690: -200635
+Case #691: -2635986
+Case #692: 19697
+Case #693: -2096106
+Case #694: -1862282
+Case #695: -402221
+Case #696: -2076484
+Case #697: -1058403
+Case #698: -929288
+Case #699: -3134912
+Case #700: 632924
+Case #701: -1729640
+Case #702: -2344996
+Case #703: -583356
+Case #704: -776851
+Case #705: -1062973
+Case #706: -1206631
+Case #707: -250995
+Case #708: -2440359
+Case #709: -3496819
+Case #710: -2750487
+Case #711: -3454969
+Case #712: -2314544
+Case #713: -1903617
+Case #714: -1528419
+Case #715: -1546867
+Case #716: -2309709
+Case #717: -3844386
+Case #718: -2471886
+Case #719: -980183
+Case #720: -76192
+Case #721: -1127593
+Case #722: -815812
+Case #723: -680039
+Case #724: -777473
+Case #725: -1810838
+Case #726: -2871427
+Case #727: 26122
+Case #728: 4428
+Case #729: -1279851
+Case #730: -883352
+Case #731: -561347
+Case #732: -1294318
+Case #733: -4074459
+Case #734: -889200
+Case #735: -2076801
+Case #736: -2078471
+Case #737: 46411
+Case #738: -1051771
+Case #739: -5691822
+Case #740: -1765415
+Case #741: -3439735
+Case #742: -933004
+Case #743: -2622170
+Case #744: -2876338
+Case #745: 977022
+Case #746: -3939441
+Case #747: -450232
+Case #748: 464292
+Case #749: -3639467
+Case #750: -1930865
+Case #751: -151984
+Case #752: 207282
+Case #753: -661464
+Case #754: -2938644
+Case #755: -1506547
+Case #756: -477757
+Case #757: -2270509
+Case #758: -569428
+Case #759: -2376776
+Case #760: -1693841
+Case #761: -1622743
+Case #762: -114554
+Case #763: -4802610
+Case #764: -1556603
+Case #765: -3638991
+Case #766: -2766089
+Case #767: -3294127
+Case #768: -408513
+Case #769: -338420
+Case #770: -692808
+Case #771: -2250868
+Case #772: -1925064
+Case #773: -1215430
+Case #774: -3283122
+Case #775: -1121232
+Case #776: -1319960
+Case #777: -922953
+Case #778: -3900010
+Case #779: -1215265
+Case #780: 300200
+Case #781: -1181453
+Case #782: -2507309
+Case #783: -1057725
+Case #784: 370061
+Case #785: -2962953
+Case #786: -223774
+Case #787: -57900
+Case #788: -638737
+Case #789: -340932
+Case #790: -1750623
+Case #791: 219912
+Case #792: -1055443
+Case #793: 253596
+Case #794: -1181362
+Case #795: -4463
+Case #796: -592810
+Case #797: -3177522
+Case #798: -270243
+Case #799: -2120893
+Case #800: -3064955
+Case #801: 564411
+Case #802: -1346310
+Case #803: -2537862
+Case #804: -2217829
+Case #805: -3038113
+Case #806: -963307
+Case #807: -3551710
+Case #808: -428074
+Case #809: -1889018
+Case #810: -163027
+Case #811: -2540890
+Case #812: -2849599
+Case #813: -3206114
+Case #814: -2266276
+Case #815: 615680
+Case #816: -796071
+Case #817: -963402
+Case #818: -199154
+Case #819: -1262197
+Case #820: -1602780
+Case #821: -977276
+Case #822: -47978
+Case #823: -1986882
+Case #824: -1245535
+Case #825: -698254
+Case #826: -396577
+Case #827: -2745538
+Case #828: -2330115
+Case #829: -1516582
+Case #830: -3476173
+Case #831: -2312018
+Case #832: 8155
+Case #833: -4469982
+Case #834: -999425
+Case #835: -985031
+Case #836: -2690903
+Case #837: -95828
+Case #838: -114816
+Case #839: -3124769
+Case #840: -210394
+Case #841: -3687553
+Case #842: -852441
+Case #843: -2143787
+Case #844: 400140
+Case #845: -4409738
+Case #846: -2306994
+Case #847: -662808
+Case #848: -1314216
+Case #849: -2503090
+Case #850: -378105
+Case #851: 817404
+Case #852: -2289194
+Case #853: -2230949
+Case #854: -759356
+Case #855: -3151975
+Case #856: -2244420
+Case #857: -512287
+Case #858: -3402311
+Case #859: -2763907
+Case #860: -1984480
+Case #861: -967591
+Case #862: -2022527
+Case #863: -543264
+Case #864: -1742767
+Case #865: -668756
+Case #866: -1951955
+Case #867: -2931793
+Case #868: -1801118
+Case #869: -1455149
+Case #870: -2661616
+Case #871: -1138182
+Case #872: -2197892
+Case #873: 17204
+Case #874: -1219267
+Case #875: -2957407
+Case #876: -2547306
+Case #877: -3590383
+Case #878: -4025091
+Case #879: -3007917
+Case #880: -1686858
+Case #881: -2312800
+Case #882: 444125
+Case #883: -704769
+Case #884: -1565457
+Case #885: -2201173
+Case #886: -1295067
+Case #887: -3026999
+Case #888: 200625
+Case #889: -1714593
+Case #890: -1620492
+Case #891: -1034122
+Case #892: -2454284
+Case #893: -2613918
+Case #894: -1612984
+Case #895: -2518702
+Case #896: -1070560
+Case #897: -534029
+Case #898: 194811
+Case #899: -1474302
+Case #900: -2289879
+Case #901: -728519
+Case #902: -586453
+Case #903: -1760016
+Case #904: -1403794
+Case #905: -750272
+Case #906: -1324385
+Case #907: -1119694
+Case #908: -484141
+Case #909: -2728234
+Case #910: -927033
+Case #911: -2451211
+Case #912: -978763
+Case #913: -2614716
+Case #914: -140584
+Case #915: -4752368
+Case #916: -1012066
+Case #917: -2320711
+Case #918: -1097234
+Case #919: -1838634
+Case #920: -2410812
+Case #921: -3849867
+Case #922: -846264
+Case #923: -1580017
+Case #924: -968014
+Case #925: -1746815
+Case #926: -826504
+Case #927: 166556
+Case #928: -638084
+Case #929: -3420943
+Case #930: -1200481
+Case #931: -1386220
+Case #932: -1351502
+Case #933: -2122119
+Case #934: -1793340
+Case #935: -2062904
+Case #936: -2213920
+Case #937: -892062
+Case #938: -3285803
+Case #939: -496734
+Case #940: -1247818
+Case #941: -1402734
+Case #942: -268141
+Case #943: -602116
+Case #944: -269189
+Case #945: -795112
+Case #946: -1729382
+Case #947: -839092
+Case #948: -430262
+Case #949: -2896089
+Case #950: -248530
+Case #951: -898439
+Case #952: -3834985
+Case #953: -2486520
+Case #954: -2667365
+Case #955: -3937064
+Case #956: -2878606
+Case #957: -3815656
+Case #958: -1052545
+Case #959: -2434961
+Case #960: -2523090
+Case #961: -1066021
+Case #962: -1671869
+Case #963: -1982054
+Case #964: -1547476
+Case #965: -398814
+Case #966: -267278
+Case #967: -1733337
+Case #968: -659596
+Case #969: 182987
+Case #970: -660954
+Case #971: -1059363
+Case #972: -983434
+Case #973: -2512523
+Case #974: -2683639
+Case #975: -2579656
+Case #976: -3298296
+Case #977: -3069204
+Case #978: -3400627
+Case #979: -1862211
+Case #980: 1532268
+Case #981: -93142
+Case #982: -794827
+Case #983: -2168147
+Case #984: -2424767
+Case #985: -1199504
+Case #986: 574725
+Case #987: -1297991
+Case #988: -2750687
+Case #989: -2326324
+Case #990: -3208635
+Case #991: -1262855
+Case #992: -2663120
+Case #993: -910248
+Case #994: -3395383
+Case #995: -2788578
+Case #996: -1289206
+Case #997: -377287
+Case #998: -3627790
+Case #999: -1189668
+Case #1000: -2595610
diff --git a/codejam_2008/src/y2008round1a/a.rs b/codejam_2008/src/y2008round1a/a.rs
new file mode 100644
index 0000000..7042ae4
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/a.rs
@@ -0,0 +1,54 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+
+
+/*
+Arithmetic
+Proof?
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round1a",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let _n : usize = reader.read_int();
+
+
+                let mut v1 = reader.read_num_line();
+                let mut v2 = reader.read_num_line();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(
+                        &mut v1, &mut v2
+                    )
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(v1: &mut Vec<i64>, v2: &mut Vec<i64>) -> i64
+{
+    v1.sort();
+    v2.sort();
+    v2.reverse();
+
+    v1.iter().zip(v2.iter()).map( |(e1,e2)| e1 * e2).sum()
+
+
+
+}
diff --git a/codejam_2008/src/y2008round1a/mod.rs b/codejam_2008/src/y2008round1a/mod.rs
new file mode 100644
index 0000000..0168964
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/mod.rs
@@ -0,0 +1 @@
+pub mod a;

From 70b30d50148d10a75c5ee42018ff950d05e3f306 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 00:26:14 -0300
Subject: [PATCH 033/122] b

---
 codejam_2008/Cargo.lock                       |    1 +
 codejam_2008/Cargo.toml                       |    3 +-
 codejam_2008/src/main.rs                      |    4 +-
 .../src/y2008round1a/B-large-practice.in      | 3166 +++++++++++++++++
 .../src/y2008round1a/B-small-practice.in      | 2910 +++++++++++++++
 codejam_2008/src/y2008round1a/a.rs            |    4 +-
 codejam_2008/src/y2008round1a/b.rs            |   52 +
 codejam_2008/src/y2008round1a/mod.rs          |    1 +
 8 files changed, 6135 insertions(+), 6 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1a/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1a/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1a/b.rs

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index 825a5de..3eaff40 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -67,6 +67,7 @@ dependencies = [
 name = "codejam_2008"
 version = "0.1.0"
 dependencies = [
+ "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "hungarian 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index 54a0219..bec2ad4 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -10,4 +10,5 @@ log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
 itertools = "*"
 # For lower_bound
 superslice = "*"
-hungarian = "1.1.0"
\ No newline at end of file
+hungarian = "1.1.0"
+bit-vec = "*"
\ No newline at end of file
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index bacc6a2..6166f3a 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -49,7 +49,7 @@ pub fn run_y2008_practice_contest()
 
 pub fn run_y2008_round_1a()
 {
-
+y2008round1a::a::solve_all_cases()
 }
 
 pub fn run_y2008_round_1b()
@@ -71,7 +71,7 @@ fn main()
 {
     init_log();
 
-    y2008round1a::a::solve_all_cases()
+    y2008round1a::b::solve_all_cases()
  /*   run_y2008_round_qual();
     run_y2008_round_practice();
     run_y2008_round_beta();*/
diff --git a/codejam_2008/src/y2008round1a/B-large-practice.in b/codejam_2008/src/y2008round1a/B-large-practice.in
new file mode 100644
index 0000000..d5e1cba
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/B-large-practice.in
@@ -0,0 +1,3166 @@
+5
+1577
+41
+2 661 0 1206 1
+263 533 0 282 0 292 0 218 0 158 0 137 0 152 0 1564 0 1472 0 1056 0 723 0 1046 0 43 0 435 0 1346 0 807 0 343 0 999 0 531 0 1301 0 959 0 1356 0 1441 0 979 0 207 0 495 0 585 0 1062 0 897 0 1386 0 1503 0 798 0 268 0 38 0 1207 0 175 0 823 0 57 0 530 0 1509 0 620 0 1023 0 1542 0 1454 0 727 0 920 0 1457 0 1479 0 1093 0 130 0 247 0 429 0 872 0 243 0 124 0 150 0 1265 0 320 0 133 0 361 0 1051 0 1529 0 313 0 344 0 135 0 488 0 836 0 1345 0 553 0 1439 0 1524 0 1341 0 377 0 1161 0 1363 1 301 0 1473 0 986 0 1122 0 211 0 180 0 808 0 725 0 1325 0 591 0 1235 0 113 0 1279 0 848 0 13 0 341 0 975 0 1049 0 855 0 1536 0 476 0 1187 0 1121 0 404 0 1478 0 400 0 817 0 795 0 870 0 1128 0 1474 0 1095 0 456 0 383 0 528 0 526 0 794 0 1394 0 6 0 151 0 249 0 279 0 851 0 573 0 561 0 1429 0 321 0 1375 0 586 0 407 0 683 0 1294 0 430 0 431 0 1152 0 317 0 545 0 678 0 1137 0 613 0 322 0 441 0 24 0 516 0 1540 0 564 0 1070 0 107 0 1549 0 547 0 443 0 881 0 675 0 1239 0 490 0 1335 0 651 0 893 0 552 0 929 0 1215 0 696 0 806 0 942 0 1368 0 863 0 1392 0 208 0 392 0 1024 0 162 0 86 0 1222 0 311 0 432 0 501 0 898 0 777 0 781 0 327 0 814 0 679 0 905 0 1464 0 1433 0 82 0 811 0 618 0 1471 0 1560 0 1320 0 56 0 1204 0 1257 0 324 0 184 0 1091 0 578 0 1302 0 1563 0 374 0 933 0 513 0 1393 0 713 0 987 0 1205 0 815 0 1170 0 1545 0 1418 0 684 0 1135 0 841 0 10 0 333 0 379 0 155 0 241 0 1038 0 1492 0 163 0 927 0 549 0 125 0 838 0 995 0 1078 0 63 0 197 0 468 0 734 0 575 0 381 0 1230 0 589 0 1017 0 650 0 1530 0 1210 0 314 0 1519 0 525 0 1069 0 437 0 1148 0 494 0 99 0 665 0 395 0 1123 0 1131 0 753 0 136 0 1244 0 574 0 1174 0 594 0 736 0 759 0 1061 0 141 0 182 0 1523 0 992 0 1426 0 284 0 946 0
+1 213 1
+1 1363 1
+1 788 1
+2 382 1 576 0
+1 1107 1
+1 1266 1
+1 1480 1
+5 497 0 58 0 972 0 1348 0 661 1
+1 351 1
+3 479 0 576 1 972 0
+16 638 0 1024 0 196 0 367 0 1174 0 302 0 361 0 160 0 1063 0 1417 0 398 0 921 0 1190 0 671 0 1128 0 776 0
+3 332 0 230 1 382 0
+1 497 1
+1 972 1
+2 299 1 1266 0
+1 1225 1
+1 535 1
+1 515 1
+2 1363 0 514 1
+1 1282 1
+1 332 1
+241 1027 0 1161 0 1001 0 1410 0 481 0 937 0 321 0 955 0 1 0 530 0 330 0 12 0 578 0 13 0 962 0 92 0 367 0 1535 0 1354 0 818 0 620 0 784 0 38 0 1164 0 791 0 662 0 1029 0 416 0 1347 0 491 0 561 0 400 0 503 0 206 0 1208 0 1270 0 1007 0 963 0 1268 0 1292 0 511 0 274 0 997 0 712 0 769 0 470 0 179 0 1381 0 3 0 1170 0 242 0 93 0 920 0 848 0 248 0 973 0 153 0 1307 0 785 0 1019 0 402 0 467 0 622 0 1342 0 1432 0 352 0 653 0 1052 0 1326 0 1452 0 938 0 590 0 660 0 585 0 423 0 1082 0 841 0 148 0 891 0 1165 0 968 0 1254 0 127 0 1008 0 970 0 823 0 555 0 1118 0 704 0 1555 0 559 0 1287 0 152 0 1302 0 329 0 247 0 518 0 1198 0 1159 0 763 0 289 0 1051 0 1085 0 1529 0 1163 0 1183 0 1539 0 1034 0 1497 0 1453 0 1508 0 1053 0 711 0 1125 0 1386 0 754 0 39 0 1463 0 563 0 674 0 675 0 894 0 1500 0 338 0 761 0 1256 0 1502 0 672 0 1056 0 1141 0 870 0 275 0 869 0 655 0 1576 0 97 0 1422 0 767 0 187 0 1203 0 1012 0 1146 0 55 0 1179 0 107 0 778 0 1557 0 254 0 906 0 703 0 1493 0 1172 0 234 0 1331 0 334 0 403 0 1513 0 1097 0 1459 0 383 0 1311 0 873 1 657 0 1435 0 106 0 1469 0 1067 0 744 0 1305 0 1339 0 1335 0 1436 0 1073 0 488 0 1155 0 892 0 789 0 504 0 1130 0 985 0 800 0 214 0 1135 0 57 0 935 0 1048 0 1222 0 452 0 960 0 457 0 782 0 710 0 1564 0 24 0 197 0 1205 0 893 0 1423 0 189 0 236 0 279 0 586 0 1171 0 834 0 1293 0 669 0 719 0 1442 0 580 0 239 0 1214 0 1199 0 501 0 1184 0 268 0 795 0 1398 0 1334 0 327 0 5 0 1196 0 258 0 1089 0 312 0 509 0 609 0 812 0 1237 0 549 0 810 0 1505 0 1042 0 961 0 144 0 781 0 548 0 1018 0 959 0 673 0 811 0 175 0
+80 1485 0 1529 0 812 0 1235 0 658 0 1137 0 1486 0 834 0 1435 0 225 0 427 0 335 0 925 0 202 0 122 0 790 0 921 0 167 0 150 0 1002 0 1321 0 86 0 637 0 361 0 597 0 1461 0 92 0 770 0 429 0 749 0 1115 0 219 0 339 0 564 0 158 0 1282 1 939 0 629 0 336 0 933 0 1042 0 842 0 114 0 62 0 613 0 1387 0 259 0 1283 0 477 0 1357 0 767 0 392 0 683 0 196 0 1254 0 648 0 517 0 270 0 422 0 1184 0 21 0 830 0 400 0 284 0 501 0 124 0 768 0 1339 0 387 0 1014 0 854 0 1373 0 249 0 1053 0 241 0 1391 0 1568 0 1273 0 498 0 1259 0
+126 741 0 1235 0 1511 0 649 0 740 0 789 0 1268 0 439 0 306 0 1433 0 1089 0 1316 0 920 0 1463 0 610 0 1365 0 1130 0 343 0 226 0 590 0 466 0 1131 0 1250 0 670 0 1438 0 1441 0 83 0 457 0 1273 0 756 0 1230 0 353 0 928 0 4 0 454 0 1429 0 1531 0 264 0 1210 0 1035 0 536 0 8 0 1471 0 1172 0 301 0 1044 0 392 0 63 0 1449 0 235 0 544 0 816 0 68 0 1243 0 154 0 1529 0 337 0 217 0 521 0 1006 0 1292 0 416 0 1493 0 200 0 1550 0 684 0 1457 0 1330 0 485 0 1195 0 255 0 50 0 1472 0 769 0 765 0 790 0 1460 0 869 0 32 0 1477 0 1489 0 777 0 1372 0 321 0 860 0 87 0 1554 0 1206 1 33 0 637 0 447 0 300 0 1447 0 644 0 388 0 428 0 680 0 553 0 1534 0 89 0 1353 0 752 0 1378 0 1552 0 105 0 776 0 1100 0 330 0 571 0 1296 0 1193 0 1448 0 225 0 1467 0 1030 0 939 0 373 0 1322 0 438 0 562 0 1542 0 868 0 231 0 1121 0 443 0 1246 0
+2 35 1 1225 0
+2 825 0 1383 1
+3 1363 0 1282 0 1348 1
+6 58 0 299 0 366 1 515 0 1206 0 230 0
+5 351 0 140 1 35 0 1225 0 58 0
+11 1225 0 299 0 1383 0 450 1 1282 0 35 0 535 0 825 0 661 0 134 0 972 0
+19 450 0 1480 0 1107 0 299 0 1266 0 351 0 535 0 1282 0 98 0 873 0 140 0 366 0 382 0 378 1 661 0 58 0 1383 0 497 0 972 0
+2 351 0 825 1
+2 1173 1 1383 0
+2 873 1 1266 0
+1 134 1
+77 381 0 119 0 277 0 398 0 728 0 144 0 950 0 1491 0 1352 0 658 0 1345 0 615 0 1067 0 1536 0 1382 0 280 0 919 0 117 0 1282 1 1482 0 976 0 1201 0 308 0 793 0 1155 0 484 0 170 0 729 0 1393 0 438 0 150 0 412 0 1283 0 1462 0 557 0 457 0 1037 0 502 0 1078 0 1545 0 704 0 258 0 646 0 880 0 1122 0 1245 0 710 0 794 0 393 0 720 0 10 0 1377 0 318 0 979 0 638 0 1074 0 1453 0 238 0 1126 0 1134 0 618 0 886 0 1147 0 428 0 679 0 1564 0 464 0 1073 0 315 0 1369 0 1530 0 1082 0 752 0 1042 0 594 0 1278 0 1523 0
+1 98 1
+1 479 1
+1 58 1
+40
+40
+34 17 0 24 0 39 0 18 0 36 0 23 0 5 0 8 0 3 0 27 0 6 0 11 0 9 0 40 0 2 0 31 0 21 0 34 0 33 0 7 0 28 1 10 0 16 0 26 0 38 0 4 0 12 0 14 0 22 0 1 0 25 0 32 0 29 0 37 0
+10 9 0 38 0 39 0 17 0 16 0 25 0 7 0 10 0 33 1 26 0
+6 9 0 17 0 39 1 7 0 16 0 38 0
+1 17 1
+8 10 1 39 0 9 0 16 0 7 0 26 0 38 0 17 0
+5 38 0 16 1 9 0 17 0 7 0
+40 34 0 22 0 25 0 5 0 30 0 19 0 3 0 4 0 32 0 16 0 12 0 18 0 35 0 36 0 1 0 14 0 24 0 29 0 26 0 38 0 15 0 20 1 6 0 21 0 40 0 11 0 39 0 23 0 17 0 33 0 13 0 9 0 2 0 8 0 37 0 31 0 27 0 7 0 28 0 10 0
+35 22 0 37 0 40 0 6 0 7 0 28 0 3 0 11 0 12 0 14 0 34 0 10 0 32 0 2 0 26 0 18 0 27 0 15 1 1 0 29 0 31 0 16 0 17 0 36 0 24 0 4 0 5 0 23 0 39 0 25 0 33 0 21 0 8 0 9 0 38 0
+38 18 0 36 0 12 0 21 0 8 0 14 0 35 1 13 0 38 0 32 0 34 0 19 0 29 0 6 0 3 0 10 0 24 0 15 0 39 0 11 0 27 0 31 0 22 0 25 0 37 0 1 0 33 0 2 0 9 0 28 0 16 0 7 0 23 0 17 0 40 0 26 0 5 0 4 0
+7 26 1 16 0 17 0 9 0 38 0 39 0 7 0
+37 29 0 15 0 4 0 26 0 9 0 34 0 25 0 17 0 3 0 14 0 5 0 6 0 23 0 22 0 38 0 24 0 40 0 27 0 16 0 33 0 21 0 18 0 13 0 32 0 10 0 2 0 28 0 12 0 31 0 37 0 36 0 8 0 7 0 11 0 39 0 1 0 19 1
+20 7 0 8 0 9 0 16 0 10 0 17 0 25 0 33 0 34 0 6 0 2 0 1 0 21 0 14 0 39 0 32 0 22 0 26 0 38 0 29 1
+14 14 1 16 0 17 0 9 0 26 0 39 0 7 0 33 0 10 0 38 0 21 0 25 0 34 0 2 0
+23 6 0 9 0 14 0 26 0 8 0 12 0 25 0 39 0 7 0 1 0 16 0 22 0 38 0 21 0 32 0 33 0 10 0 29 0 34 0 2 0 17 0 27 1 3 0
+13 39 0 26 0 38 0 9 0 34 0 7 0 2 1 10 0 17 0 21 0 33 0 25 0 16 0
+17 39 0 32 1 17 0 7 0 2 0 22 0 33 0 8 0 10 0 26 0 34 0 9 0 21 0 14 0 38 0 16 0 25 0
+27 37 1 29 0 1 0 25 0 10 0 40 0 21 0 14 0 33 0 9 0 8 0 34 0 18 0 39 0 2 0 27 0 22 0 3 0 38 0 24 0 16 0 32 0 6 0 17 0 7 0 12 0 26 0
+11 17 0 33 0 34 1 10 0 25 0 38 0 9 0 26 0 39 0 16 0 7 0
+24 38 0 32 0 33 0 17 0 21 0 1 0 3 0 9 0 26 0 25 0 27 0 29 0 12 0 16 0 2 0 22 0 8 0 6 0 34 0 7 0 14 0 39 0 18 1 10 0
+28 26 0 27 0 22 0 2 0 6 0 38 0 7 0 37 0 24 0 9 0 40 0 34 0 1 0 18 0 29 0 16 0 21 0 39 0 14 0 3 0 32 0 25 0 12 0 8 0 17 0 10 0 33 0 23 1
+4 38 0 7 0 9 1 17 0
+39 19 0 39 0 17 0 1 0 12 0 33 0 37 0 5 0 16 0 30 1 14 0 26 0 28 0 10 0 13 0 22 0 36 0 2 0 3 0 32 0 11 0 27 0 25 0 21 0 6 0 23 0 40 0 38 0 15 0 4 0 24 0 29 0 7 0 18 0 35 0 34 0 31 0 8 0 9 0
+15 8 1 25 0 21 0 34 0 38 0 26 0 10 0 7 0 2 0 33 0 9 0 16 0 39 0 14 0 17 0
+12 25 0 21 1 7 0 33 0 38 0 10 0 16 0 34 0 39 0 17 0 9 0 26 0
+29 27 0 14 0 33 0 9 0 39 0 40 0 21 0 24 0 37 0 38 0 32 0 23 0 1 0 10 0 2 0 7 0 16 0 25 0 3 0 8 0 18 0 11 1 12 0 29 0 26 0 6 0 34 0 17 0 22 0
+19 1 1 39 0 7 0 6 0 16 0 38 0 32 0 26 0 8 0 2 0 21 0 34 0 33 0 22 0 14 0 9 0 10 0 25 0 17 0
+21 22 0 32 0 2 0 16 0 25 0 38 0 26 0 29 0 3 1 7 0 34 0 9 0 6 0 33 0 39 0 10 0 17 0 14 0 21 0 8 0 1 0
+2 38 1 17 0
+26 16 0 27 0 9 0 2 0 18 0 33 0 39 0 26 0 38 0 12 0 6 0 32 0 10 0 25 0 3 0 24 0 34 0 7 0 29 0 1 0 14 0 17 0 21 0 40 1 22 0 8 0
+31 21 0 24 0 12 0 29 0 16 0 5 1 6 0 38 0 17 0 18 0 2 0 25 0 27 0 7 0 26 0 8 0 40 0 32 0 11 0 22 0 3 0 23 0 34 0 37 0 4 0 10 0 9 0 1 0 39 0 33 0 14 0
+22 29 0 14 0 38 0 34 0 9 0 1 0 22 0 12 1 25 0 32 0 7 0 16 0 26 0 8 0 33 0 17 0 6 0 21 0 2 0 3 0 10 0 39 0
+18 38 0 14 0 22 0 6 1 9 0 7 0 17 0 39 0 16 0 26 0 10 0 25 0 33 0 8 0 32 0 21 0 34 0 2 0
+33 11 0 39 0 37 0 40 0 14 0 25 0 3 0 17 0 33 0 9 0 10 0 4 0 12 0 23 0 6 0 2 0 26 0 1 0 21 0 7 0 24 0 18 0 31 0 16 0 22 0 27 0 5 0 34 0 32 0 8 0 36 1 29 0 38 0
+36 4 0 31 0 14 0 37 0 24 0 11 0 39 0 12 0 5 0 36 0 7 0 40 0 34 0 22 0 29 0 10 0 23 0 21 0 38 0 1 0 3 0 17 0 18 0 33 0 13 1 8 0 6 0 32 0 25 0 9 0 16 0 2 0 26 0 27 0 28 0 15 0
+9 7 0 16 0 17 0 25 1 39 0 26 0 9 0 10 0 38 0
+30 17 0 14 0 12 0 34 0 33 0 37 0 32 0 24 0 39 0 11 0 40 0 22 0 23 0 21 0 6 0 16 0 8 0 27 0 38 0 1 0 7 0 2 0 29 0 10 0 26 0 25 0 3 0 4 1 18 0 9 0
+32 38 0 18 0 10 0 11 0 1 0 23 0 37 0 40 0 8 0 29 0 32 0 24 0 14 0 5 0 21 0 4 0 2 0 33 0 17 0 3 0 6 0 31 1 26 0 34 0 12 0 7 0 16 0 27 0 22 0 39 0 9 0 25 0
+25 26 0 3 0 18 0 8 0 27 0 17 0 6 0 10 0 9 0 21 0 1 0 16 0 39 0 33 0 2 0 29 0 14 0 38 0 25 0 32 0 22 0 12 0 24 1 7 0 34 0
+3 7 1 17 0 38 0
+16 26 0 22 1 33 0 34 0 14 0 21 0 38 0 2 0 10 0 8 0 9 0 16 0 39 0 7 0 17 0 25 0
+1325
+287
+7 712 1 467 0 621 0 1107 0 356 0 414 0 1179 0
+2 686 1 484 0
+1 644 1
+4 313 1 548 0 553 0 924 0
+1 623 1
+2 459 0 1221 1
+1 290 1
+73 449 0 607 0 918 0 388 0 931 0 231 0 704 0 683 0 1274 0 1317 0 398 0 375 0 587 0 849 0 846 0 1084 0 1045 0 1065 0 916 0 1186 0 203 0 219 0 492 0 1224 0 294 0 994 0 157 0 990 0 1058 0 641 0 8 0 1089 0 452 0 378 0 744 0 861 0 1303 0 810 0 906 0 1253 0 436 0 415 0 549 0 940 0 77 0 718 0 43 0 546 0 350 0 429 0 25 0 326 0 12 0 319 0 726 0 255 0 1200 1 812 0 954 0 193 0 684 0 1325 0 2 0 1307 0 472 0 1053 0 1142 0 1072 0 402 0 269 0 742 0 867 0 19 0
+1 670 1
+1 1258 1
+5 540 1 1244 0 298 0 889 0 1121 0
+2 63 1 680 0
+2 1130 1 1206 0
+1 1181 1
+1 1124 1
+45 454 0 962 0 304 0 991 0 238 0 353 0 923 0 1286 0 376 0 319 0 639 0 28 0 1094 0 638 0 799 0 163 0 831 0 1257 0 451 0 1006 0 453 0 918 0 958 0 1009 0 128 0 1291 0 565 0 1 0 940 0 279 0 130 0 699 0 598 0 1323 0 373 0 1122 0 348 0 75 0 166 0 1261 0 229 0 667 0 1320 0 492 0 29 1
+2 1200 0 153 1
+5 217 1 809 0 172 0 355 0 1034 0
+7 1190 0 80 0 951 0 1156 0 854 1 882 0 257 0
+33 1251 0 82 0 616 0 1057 0 545 1 26 0 987 0 634 0 1237 0 403 0 863 0 998 0 386 0 171 0 1114 0 1123 0 95 0 141 0 1063 0 10 0 346 0 146 0 533 0 267 0 41 0 1195 0 1033 0 923 0 1136 0 1191 0 35 0 1187 0 144 0
+3 291 1 188 0 406 0
+2 381 1 279 0
+1 1119 0
+5 623 0 291 0 1258 0 572 0 672 1
+3 631 0 731 1 779 0
+12 71 0 963 0 85 0 504 0 950 0 372 0 901 0 122 0 221 0 689 0 117 0 1213 1
+7 675 0 514 1 201 0 1165 0 686 0 1306 0 291 0
+1 117 1
+1 978 1
+4 201 0 186 0 458 1 1221 0
+1 174 1
+2 221 1 564 0
+2 455 1 950 0
+1 553 1
+10 790 0 39 0 358 0 859 0 574 0 1183 1 189 0 1002 0 727 0 1095 0
+23 130 0 957 0 362 0 178 0 512 0 1064 0 884 0 1073 0 1242 0 1285 0 665 0 1243 0 37 0 1190 0 361 0 464 0 46 0 1063 0 605 0 230 0 488 0 363 0 31 0
+3 358 1 188 0 1158 0
+9 1151 0 366 0 1242 0 296 0 869 0 233 0 215 0 418 0 762 1
+4 1231 0 407 1 1200 0 772 0
+5 103 0 1209 0 1158 1 680 0 772 0
+1 1095 1
+14 914 0 435 0 415 0 894 0 498 0 1262 1 1035 0 652 0 161 0 309 0 146 0 1184 0 719 0 607 0
+2 29 0 1088 1
+2 1026 0 97 0
+2 136 0 1244 1
+5 470 0 397 0 1094 0 873 0 960 0
+27 1043 0 298 1 749 0 1101 0 176 0 476 0 714 0 284 0 138 0 329 0 178 0 449 0 387 0 271 0 1169 0 1108 0 838 0 907 0 801 0 671 0 1047 0 10 0 1186 0 782 0 619 0 1074 0 399 0
+1 522 1
+1 1005 1
+2 1121 0 1302 1
+2 847 1 670 0
+6 266 0 748 1 623 0 889 0 1143 0 210 0
+1 195 1
+3 494 0 372 1 1091 0
+2 439 1 51 0
+44 1140 0 1057 0 597 0 883 0 1293 0 841 0 785 0 321 0 1071 0 682 0 985 0 399 0 780 0 173 0 21 0 107 1 1151 0 1037 0 223 0 525 0 526 0 1260 0 111 0 143 0 533 0 666 0 411 0 1176 0 749 0 607 0 208 0 363 0 382 0 171 0 109 0 45 0 671 0 1237 0 898 0 204 0 1113 0 888 0 468 0 410 0
+1 732 1
+1 56 1
+1 772 1
+1 920 1
+1 676 1
+2 1174 0 86 1
+1 582 1
+13 1217 0 491 0 261 0 1103 0 1138 0 53 0 791 0 504 0 1181 0 1163 0 71 0 999 1 458 0
+1 924 1
+3 1139 0 51 1 1062 0
+1 270 1
+1 222 1
+1 631 1
+6 207 0 318 0 129 0 209 1 1218 0 1086 0
+1 1199 1
+1 981 1
+1 36 1
+1 298 1
+1 796 1
+2 117 0 217 1
+1 99 1
+1 1137 1
+6 924 0 1040 0 545 0 1208 1 381 0 788 0
+1 576 1
+1 189 1
+1 992 1
+2 1078 1 929 0
+3 1231 0 1121 1 149 0
+4 189 0 76 0 494 1 1158 0
+3 992 0 675 0 808 1
+12 637 0 16 0 1273 0 1081 0 943 0 1108 0 176 0 1254 1 240 0 965 0 1027 0 605 0
+2 381 0 491 1
+35 558 1 896 0 595 0 1113 0 503 0 903 0 723 0 1166 0 573 0 70 0 1299 0 641 0 1129 0 496 0 1159 0 506 0 7 0 776 0 566 0 370 0 907 0 1291 0 828 0 510 0 463 0 1026 0 956 0 1284 0 87 0 213 0 395 0 169 0 274 0 164 0 1003 0
+9 434 0 184 0 607 0 1157 0 197 0 937 0 141 0 1205 0 326 0
+5 1164 1 521 0 1281 0 732 0 1092 0
+8 1006 0 338 0 498 0 45 0 686 1 1194 0 306 0 1127 0
+1 1139 1
+1 740 1
+20 652 0 953 0 227 0 1087 0 1069 0 386 0 949 0 769 0 1209 1 657 0 976 0 892 0 97 0 383 0 956 0 543 0 836 0 1071 0 825 0 469 0
+2 582 0 763 1
+1 459 1
+6 1174 1 226 0 683 0 230 0 638 0 393 0
+1 137 1
+1 1225 1
+60 478 0 818 0 968 0 280 0 83 0 632 0 955 0 846 0 935 0 664 0 684 0 101 0 691 0 480 0 652 0 923 0 679 0 1290 0 1120 0 61 0 816 0 1076 0 1322 0 268 0 1102 0 168 0 607 0 725 0 662 0 1007 0 220 0 161 0 1270 0 409 0 199 0 1085 0 567 0 453 0 412 0 84 0 206 0 20 0 839 0 887 0 1074 0 1011 0 1231 1 1211 0 500 0 971 0 397 0 181 0 334 0 190 0 885 0 341 0 642 0 24 0 328 0 918 0
+1 929 1
+1 1091 1
+1 548 1
+3 825 0 1173 0 1229 0
+1 778 1
+1 1143 1
+15 1075 1 87 0 287 0 1113 0 602 0 448 0 833 0 367 0 886 0 872 0 627 0 1177 0 375 0 151 0 158 0
+1 531 1
+6 850 0 238 0 1055 0 656 0 929 1 273 0
+1 779 1
+9 841 0 315 0 898 0 429 0 310 0 815 0 41 0 694 0 11 0
+4 670 0 1139 0 1178 0 677 1
+4 51 0 576 0 1075 1 910 0
+1 186 1
+1 889 1
+6 1256 0 216 0 928 1 44 0 313 0 576 0
+1 210 1
+1 207 1
+30 896 0 433 0 232 0 987 0 835 0 641 0 642 0 289 0 1322 0 783 0 725 0 629 0 523 0 1324 0 657 0 496 0 434 0 1227 0 606 0 505 0 1090 0 1014 0 793 0 1237 0 388 0 50 0 478 0 713 1 899 0 457 0
+3 504 0 119 1 76 0
+2 582 0 654 1
+1 29 1
+3 247 1 1283 0 623 0
+1 266 1
+1 969 1
+1 845 1
+7 727 0 988 0 136 1 1040 0 316 0 762 0 778 0
+2 988 0 1128 1
+11 979 0 185 0 469 0 1017 0 843 0 489 0 1170 0 834 1 546 0 602 0 1314 0
+1 432 1
+1 1200 1
+2 210 0 558 1
+4 253 1 207 0 997 0 981 0
+2 707 1 129 0
+4 283 0 1295 0 411 0 1042 0
+7 1217 0 1244 0 791 0 484 0 924 0 13 1 1158 0
+1 1092 1
+3 344 1 188 0 731 0
+2 910 0 584 1
+2 1283 1 522 0
+8 459 0 1218 0 1103 1 1165 0 859 0 1244 0 1256 0 174 0
+7 564 0 1231 1 1158 0 129 0 686 0 766 0 29 0
+1 762 1
+14 786 1 705 0 676 0 76 0 358 0 1086 0 722 0 202 0 313 0 910 0 690 0 564 0 859 0 103 0
+2 1231 0 149 1
+1 791 1
+2 766 0 88 1
+1 804 1
+1 1163 1
+1 675 1
+3 791 0 910 1 731 0
+2 733 1 51 0
+2 727 1 1181 0
+1 1262 1
+1 406 1
+4 1143 0 732 0 992 0 216 1
+1 316 1
+4 264 0 69 0 1143 1 1177 0
+2 90 0 85 1
+1 76 1
+1 988 1
+1 805 1
+12 214 0 255 0 560 0 506 0 590 0 816 0 465 0 1078 1 281 0 1115 0 203 0 906 0
+8 745 0 8 0 495 0 348 0 135 0 97 0 435 0 1114 0
+5 1163 0 36 0 732 0 210 0 115 1
+4 31 0 539 0 1251 0 348 0
+2 1218 0 713 1
+1 1178 1
+1 1306 1
+1 1301 1
+4 553 0 870 1 210 0 1181 0
+2 612 0 176 0
+2 631 0 129 1
+5 1218 0 202 0 880 1 381 0 963 0
+1 601 1
+2 762 0 1002 1
+2 521 1 722 0
+33 234 0 906 0 582 1 1034 0 225 0 478 0 362 0 718 0 900 0 25 0 742 0 1269 0 435 0 1170 0 744 0 59 0 696 0 1115 0 145 0 93 0 162 0 369 0 27 0 636 0 789 0 481 0 952 0 1308 0 1106 0 990 0 1312 0 802 0 423 0
+1 1209 1
+1 689 1
+1 680 1
+1 107 1
+3 690 0 189 0 180 1
+1 202 1
+5 1241 0 365 0 953 0 640 0 480 0
+2 837 1 762 0
+3 491 0 1152 1 1208 0
+73 307 0 349 0 652 0 324 0 1024 0 21 0 787 0 1201 0 530 0 311 0 673 0 546 0 523 0 729 0 269 0 926 0 994 0 575 0 1198 0 822 0 1234 0 394 0 810 0 121 0 828 0 242 0 554 0 1233 0 233 0 419 0 697 0 1098 0 935 0 175 0 1132 0 102 0 1168 0 250 0 956 0 398 0 1079 0 1161 0 336 0 281 0 888 0 135 0 1189 0 951 0 173 0 1083 0 932 0 1249 0 1175 0 61 0 343 0 376 0 588 0 526 0 780 0 770 0 405 0 113 0 351 0 1232 0 238 0 497 1 552 0 377 0 410 0 126 0 128 0 1290 0 452 0
+1 504 1
+1 318 1
+3 648 0 53 1 1165 0
+7 264 0 935 0 722 1 828 0 95 0 1120 0 238 0
+28 181 0 726 0 1205 0 399 0 4 0 935 0 447 0 311 0 1076 0 700 0 797 0 542 0 758 0 984 0 393 0 303 0 663 0 871 0 402 0 881 0 1117 0 882 0 364 0 159 1 390 0 1021 0 70 0 909 0
+34 742 0 38 0 1313 0 1287 0 646 0 255 0 95 0 1180 0 322 0 227 0 256 0 864 0 1232 0 1001 0 437 0 919 0 1110 0 517 0 363 0 811 0 221 1 278 0 1132 0 220 0 1147 0 899 0 427 0 611 0 1119 0 726 0 124 0 204 0 64 0 972 0
+1 834 1
+1 127 1
+1 848 1
+3 925 1 924 0 1199 0
+2 1040 0 381 1
+8 1268 0 1174 0 358 0 796 0 654 0 1306 0 40 1 804 0
+3 479 1 491 0 686 0
+6 6 1 1137 0 778 0 564 0 103 0 490 0
+3 1200 0 432 0 648 1
+1 722 1
+28 1123 0 152 0 921 0 1094 0 146 0 312 0 1190 0 646 0 414 0 1295 0 475 0 797 0 1264 0 230 0 901 1 647 0 556 0 904 0 516 0 1071 0 555 0 831 0 1238 0 170 0 616 0 632 0 1129 0 825 0
+45 1318 0 1323 0 1172 0 1186 0 185 0 1238 0 741 0 61 0 983 0 1102 0 510 0 467 0 333 0 87 0 232 0 876 0 1072 0 1096 0 1099 0 362 0 838 0 453 0 235 0 1282 0 789 0 303 0 691 0 473 0 1129 0 1109 0 1031 0 989 0 79 0 547 1 546 0 830 0 1015 0 1170 0 560 0 618 0 26 0 1274 0 330 0 714 0 659 0
+1 1207 1
+1 1165 1
+2 845 0 262 1
+1 788 1
+1 103 1
+1 39 1
+1 559 1
+52 32 0 288 0 636 0 1093 0 957 0 866 0 18 0 9 0 800 0 24 0 989 0 591 0 1126 0 1296 0 177 0 673 0 49 0 913 0 273 0 41 0 1151 0 782 0 395 0 1 0 649 0 965 0 1316 0 687 0 822 0 567 0 824 0 114 0 1045 0 1229 0 844 0 585 0 704 0 132 0 616 0 192 0 516 0 131 0 1012 0 829 0 946 0 1253 0 793 0 642 0 692 0 1156 0 1275 0 623 1
+2 1062 0 443 1
+1 950 1
+1 1086 1
+1 545 1
+1 1256 1
+4 99 0 36 0 574 1 1199 0
+1 1275 0
+34 1193 0 704 0 1215 0 921 0 1257 0 408 0 608 0 940 0 977 0 5 0 1241 0 1223 0 552 0 742 0 737 0 215 0 647 0 256 0 1025 0 41 0 1100 0 953 0 232 0 1199 1 1042 0 1064 0 345 0 1237 0 989 0 1168 0 169 0 1274 0 233 0 1187 0
+3 1181 0 936 1 1218 0
+1 901 1
+6 484 0 950 0 643 1 631 0 791 0 202 0
+5 572 0 574 0 1158 0 1309 1 195 0
+1 68 1
+4 808 0 272 0 358 0 712 1
+5 981 0 148 0 1124 0 777 1 188 0
+2 1163 0 122 1
+3 589 1 1124 0 582 0
+1 1281 1
+1 47 1
+2 859 0 1040 1
+5 950 0 690 1 1078 0 358 0 36 0
+3 1078 0 558 0 1255 1
+2 511 1 195 0
+4 1256 0 201 1 56 0 670 0
+1 1254 1
+4 676 0 531 0 188 0 148 1
+22 500 0 1027 0 129 1 435 0 419 0 1154 0 335 0 752 0 844 0 624 0 1057 0 1316 0 1266 0 867 0 807 0 1022 0 893 0 537 0 1011 0 437 0 467 0 212 0
+2 210 0 484 1
+4 1199 0 854 1 558 0 727 0
+1 859 1
+12 136 0 1088 0 1208 0 272 0 261 0 106 1 686 0 796 0 56 0 71 0 1221 0 40 0
+1 81 1
+2 1218 1 99 0
+4 845 0 222 0 1092 0 90 1
+4 776 0 730 0 447 0 630 0
+1 564 1
+4 98 1 44 0 574 0 558 0
+2 1268 1 99 0
+15 1247 1 1062 0 504 0 676 0 1121 0 40 0 778 0 1255 0 63 0 1268 0 494 0 1103 0 1231 0 1217 0 686 0
+1 272 1
+5 561 0 627 0 73 0 771 0 575 0
+7 58 0 1315 0 1021 0 96 0 106 1 1003 0 1007 0
+26 362 0 14 0 42 0 552 0 782 0 796 1 1141 0 69 0 1304 0 268 0 852 0 641 0 752 0 738 0 126 0 720 0 833 0 206 0 941 0 1110 0 405 0 1063 0 1023 0 647 0 1034 0 193 0
+12 546 0 151 0 1154 0 519 0 508 0 201 1 260 0 1097 0 95 0 38 0 275 0 185 0
+1 460 1
+1 188 1
+6 22 0 729 0 205 0 944 0 978 1 1250 0
+18 532 0 110 0 1176 0 184 0 816 0 1238 0 650 0 1197 0 954 0 1100 0 149 1 435 0 822 0 256 0 1102 0 376 0 341 0 134 0
+4 1244 0 71 1 713 0 722 0
+1 790 1
+7 901 0 13 0 1124 0 790 0 677 0 997 1 644 0
+1 1206 1
+1 1245 1
+1 1174 1
+5 796 0 209 0 547 0 1138 1 969 0
+1 766 1
+1 490 1
+1 547 1
+1 572 1
+19 27 0 985 0 264 0 755 0 296 0 317 0 1065 0 860 0 669 0 1117 0 856 0 1007 0 624 0 672 1 377 0 398 0 370 0 1219 0 62 0
+1 497 1
+4 870 0 1217 1 44 0 56 0
+4 261 1 522 0 1200 0 497 0
+6 574 0 150 1 727 0 1302 0 202 0 439 0
+1 1062 1
+1 44 1
+23 905 0 898 0 1316 0 570 0 979 0 516 0 709 0 1096 0 66 0 1138 1 608 0 955 0 275 0 937 0 1271 0 685 0 560 0 747 0 1034 0 652 0 363 0 1108 0 542 0
+5 1022 0 536 0 549 0 384 0 1104 0
+5 763 1 168 0 821 0 190 0 1324 0
+2 963 1 924 0
+1 159 1
+1 705 1
+2000
+2000
+1 514 0
+3 1047 0 832 1 642 0
+1 1552 0
+1 423 1
+1 1926 1
+3 1546 0 923 0 372 1
+1 1515 1
+3 303 0 1354 0 158 0
+1 292 0
+1 1478 1
+4 942 0 1914 0 1280 0 1262 0
+1 735 1
+1 1093 1
+2 1942 0 1369 0
+1 142 0
+1 364 0
+1 1715 1
+1 1495 0
+1 1358 1
+1 185 1
+2 94 0 1700 0
+2 9 0 1268 0
+1 262 0
+1 386 1
+2 37 0 1699 0
+1 1228 1
+1 1179 1
+1 1701 1
+1 795 1
+2 455 0 117 0
+1 1054 0
+1 899 0
+1 1681 1
+1 162 1
+2 1608 1 60 0
+2 162 1 1710 0
+1 1757 0
+3 1635 0 1082 0 919 1
+3 411 0 1022 0 251 0
+1 1005 0
+1 1948 1
+3 1622 1 948 0 1863 0
+1 1307 1
+1 1942 0
+1 35 1
+2 1755 0 1809 0
+2 1534 1 892 0
+1 1134 1
+1 893 1
+1 305 0
+1 558 0
+2 29 0 1139 0
+1 1466 1
+2 187 0 898 0
+1 963 0
+1 1813 0
+1 1481 1
+1 1008 1
+1 977 0
+1 94 0
+1 1128 1
+1 1285 0
+2 910 0 339 1
+1 978 0
+1 769 1
+1 1238 1
+1 1493 1
+1 1251 1
+1 992 1
+1 35 1
+2 1301 1 1857 0
+1 439 1
+5 1355 0 1982 0 1776 0 648 0 1616 0
+1 1075 1
+3 929 0 1521 1 1222 0
+1 464 1
+1 1086 1
+1 482 0
+1 583 1
+3 881 0 385 0 813 1
+1 1988 0
+2 609 1 127 0
+1 260 0
+2 528 0 1265 0
+1 757 0
+1 1378 1
+1 25 1
+1 1039 1
+1 513 0
+2 139 1 1230 0
+1 940 0
+3 1440 0 113 0 763 1
+2 1144 0 438 0
+1 806 0
+1 760 1
+1 50 1
+1 1199 0
+1 1711 1
+1 944 0
+1 1330 1
+1 1477 1
+1 1555 0
+1 994 1
+1 786 0
+2 1088 1 603 0
+1 245 1
+1 1531 1
+1 1343 1
+2 875 0 1199 0
+1 1415 0
+1 1358 1
+1 1685 0
+1 1478 1
+1 632 1
+2 554 0 1517 0
+1 1766 0
+1 1668 1
+1 949 1
+1 482 0
+1 640 0
+1 376 1
+2 978 0 833 1
+2 694 0 1087 0
+1 129 0
+1 76 1
+1 1998 1
+1 878 0
+2 1539 0 809 0
+1 439 1
+1 103 0
+1 1384 1
+2 1984 0 527 0
+1 1282 1
+2 732 1 678 0
+1 8 1
+2 864 0 1226 1
+1 603 0
+2 357 0 513 0
+1 593 0
+1 1732 1
+1 1382 1
+1 903 1
+1 987 0
+1 1620 0
+1 1335 1
+1 563 1
+1 1366 1
+1 894 0
+1 1787 0
+1 1336 1
+2 1528 1 1824 0
+1 1470 0
+3 1419 0 1744 0 1856 0
+3 288 0 838 0 1933 0
+2 1897 1 818 0
+1 1131 1
+1 1794 1
+1 1194 0
+1 1534 1
+2 1118 1 257 0
+1 1948 1
+1 193 1
+1 1197 0
+1 1125 1
+2 1348 1 1213 0
+3 1810 0 922 0 1840 0
+2 1144 0 1660 1
+1 181 0
+1 1788 1
+3 1523 0 683 0 619 1
+2 194 0 25 1
+1 631 0
+1 541 1
+3 915 0 1915 0 774 1
+1 773 1
+1 944 0
+1 1059 1
+1 618 0
+2 1630 0 1642 0
+1 1040 0
+2 1193 0 1285 0
+2 868 0 975 0
+1 938 0
+1 1810 0
+1 56 0
+1 1892 0
+1 1827 0
+2 765 0 384 1
+4 1171 0 1833 0 1967 0 1567 1
+1 1022 0
+1 159 0
+1 1135 0
+2 454 0 949 1
+1 1038 1
+1 1111 0
+2 1172 0 785 1
+1 237 1
+2 260 0 680 0
+4 967 0 1596 0 1569 0 1243 0
+1 1779 1
+2 1574 1 1178 0
+1 1063 1
+1 1767 0
+2 399 0 1038 1
+1 964 1
+1 1802 1
+1 449 1
+1 205 1
+1 1435 0
+1 1345 0
+1 296 1
+1 1346 0
+1 1361 1
+1 1458 0
+1 1134 1
+1 822 1
+1 384 1
+1 739 0
+1 519 1
+2 1401 0 614 0
+2 834 0 1069 0
+1 545 0
+2 347 0 569 0
+1 1036 0
+1 1013 1
+1 849 0
+1 99 1
+1 1616 0
+1 1562 0
+1 863 1
+5 1208 0 1879 0 1361 1 474 0 1980 0
+1 1656 1
+3 680 0 1427 0 590 0
+1 951 1
+1 581 1
+1 1667 1
+1 1834 1
+1 1730 1
+1 1341 1
+1 1622 1
+1 1445 1
+1 1968 1
+1 1635 0
+1 1042 0
+2 639 0 1021 1
+3 1144 0 815 0 999 1
+1 954 1
+1 1983 0
+1 898 0
+1 360 1
+1 853 0
+1 629 0
+1 1228 1
+1 767 0
+1 355 1
+2 1915 0 236 1
+1 196 1
+1 1095 0
+3 651 0 1200 0 390 0
+2 1582 0 1165 0
+1 1198 0
+1 1234 1
+2 1525 0 684 0
+3 34 0 1641 0 545 0
+1 256 1
+1 903 1
+1 660 0
+1 1179 1
+2 1489 0 1434 1
+2 291 0 1635 0
+2 889 0 1225 0
+1 1352 1
+1 1071 1
+1 1740 0
+1 4 0
+1 119 0
+1 481 0
+2 1154 0 479 0
+1 1931 1
+4 1014 0 125 0 1424 0 989 0
+1 777 0
+2 136 1 1597 0
+1 252 1
+1 195 1
+1 248 0
+1 974 0
+1 818 0
+4 59 0 1308 0 1193 0 1262 0
+1 1376 1
+1 82 1
+2 1071 1 495 0
+1 1117 0
+1 666 0
+2 1567 1 1245 0
+1 593 0
+1 1397 1
+3 1630 0 297 0 222 0
+3 192 0 903 1 1710 0
+1 62 0
+4 584 0 718 1 868 0 1311 0
+1 1049 0
+2 1977 0 673 1
+3 329 0 888 0 1345 0
+1 130 1
+1 185 1
+1 1709 1
+1 161 0
+1 718 1
+1 221 0
+2 1742 1 663 0
+2 1870 0 802 0
+1 840 0
+1 186 0
+2 545 0 918 0
+1 1064 1
+1 491 0
+1 620 1
+2 926 1 1460 0
+1 1482 0
+1 1547 1
+1 1834 1
+2 702 0 464 1
+1 1492 0
+4 960 1 599 0 257 0 1905 0
+1 804 0
+3 505 0 1425 0 1154 0
+1 893 1
+1 1863 0
+1 1163 1
+1 677 0
+2 1597 0 1938 0
+1 901 0
+2 1799 0 1113 1
+2 1557 0 741 0
+1 1907 1
+3 1866 0 1621 1 103 0
+1 49 0
+5 1248 0 1710 0 804 0 966 1 259 0
+1 187 0
+1 1144 0
+1 441 0
+1 63 0
+1 1664 1
+1 838 0
+1 672 1
+2 631 0 1618 0
+2 650 0 1850 0
+1 1585 1
+1 1671 0
+2 366 0 991 1
+1 1140 0
+1 689 1
+1 426 1
+1 260 0
+1 1333 1
+1 1693 0
+1 341 0
+1 1789 1
+2 1734 1 549 0
+1 1339 1
+1 217 1
+1 685 0
+4 1399 0 463 0 1561 1 1890 0
+1 1884 0
+2 111 1 1903 0
+1 1795 0
+1 855 0
+1 518 1
+1 516 0
+1 1653 1
+4 659 0 1526 0 447 0 1827 0
+1 931 0
+1 1220 0
+1 1729 1
+1 371 1
+1 763 1
+1 1291 0
+4 447 0 1263 0 1501 1 1822 0
+2 279 0 1286 1
+1 1395 1
+1 920 0
+1 879 0
+1 898 0
+2 1956 1 1597 0
+1 1133 0
+1 1972 0
+1 729 1
+1 1376 1
+1 1521 1
+3 1125 1 18 0 1218 0
+1 944 0
+1 467 1
+3 776 0 827 0 728 0
+1 668 0
+1 1415 0
+2 1474 0 584 0
+1 1813 0
+1 1262 0
+2 39 0 1861 0
+1 1775 0
+2 1409 1 1459 0
+1 588 1
+1 853 0
+1 1460 0
+1 1096 0
+2 1509 0 1962 0
+1 729 1
+1 311 0
+1 176 0
+1 661 0
+1 324 1
+1 1107 1
+1 186 0
+1 69 1
+1 1633 0
+1 775 0
+1 1654 1
+1 204 1
+1 1081 0
+1 303 0
+1 842 0
+1 1323 1
+1 721 0
+1 698 0
+1 350 1
+1 1328 0
+1 431 1
+2 1524 1 1469 0
+2 561 1 1765 0
+1 92 1
+1 638 1
+5 483 0 1947 0 1886 0 1192 0 1979 1
+1 1189 1
+2 1693 0 1258 0
+1 848 0
+1 478 0
+3 1787 0 381 1 1448 0
+1 903 1
+2 1945 1 730 0
+4 402 0 11 0 1515 1 1933 0
+2 1934 0 1207 0
+1 682 1
+3 481 0 1059 1 1923 0
+1 833 1
+1 951 1
+4 1639 0 955 0 242 0 102 1
+1 221 0
+1 1041 1
+2 573 0 1500 0
+1 1787 0
+1 101 0
+5 377 0 1802 1 1545 0 1756 0 1223 0
+5 1078 0 159 0 22 0 282 1 1500 0
+1 722 0
+1 165 1
+1 1911 1
+1 966 1
+1 1368 0
+1 712 1
+1 1440 0
+1 441 0
+1 300 0
+1 628 0
+1 1818 1
+1 1602 1
+1 1690 1
+1 307 0
+2 1980 0 1019 1
+1 1441 1
+1 498 1
+3 1689 0 1361 1 1054 0
+1 1416 1
+2 865 0 1628 1
+1 1998 1
+1 1529 1
+1 1847 1
+1 105 1
+2 136 1 385 0
+1 80 0
+1 63 0
+1 720 1
+1 1524 1
+1 394 1
+1 608 0
+1 1705 1
+1 466 1
+3 1545 0 615 0 1705 1
+2 614 0 1434 1
+1 436 1
+1 1102 1
+3 421 0 1310 0 1511 1
+1 1434 1
+1 77 1
+1 1359 1
+3 1287 0 1305 0 1118 1
+1 380 0
+1 480 0
+1 191 0
+2 572 0 1819 0
+1 1002 0
+4 810 0 1829 0 723 1 1795 0
+1 572 0
+2 1284 1 1698 0
+1 1626 0
+3 869 0 610 0 1163 1
+1 779 1
+1 53 1
+1 1392 0
+3 146 0 1944 0 1296 0
+1 1227 1
+1 1222 0
+1 1719 0
+2 521 0 432 0
+4 342 0 683 0 608 0 1752 0
+1 1580 0
+1 1940 1
+1 1621 1
+1 590 0
+1 1056 0
+1 107 1
+1 1661 1
+2 594 1 189 0
+1 1928 0
+1 870 0
+1 1818 1
+2 1049 0 1080 1
+1 346 1
+1 489 1
+1 264 1
+1 1837 0
+1 261 0
+1 1112 1
+1 85 0
+1 1195 1
+1 147 0
+3 214 0 1588 1 27 0
+3 1195 1 1764 0 776 0
+3 1500 0 886 0 1609 0
+1 971 1
+2 1343 1 660 0
+1 425 1
+1 781 1
+3 1713 0 1896 0 1718 0
+1 501 1
+5 1256 0 1870 0 1590 0 1916 0 1033 0
+1 697 0
+2 1961 0 1867 0
+1 1733 1
+1 601 1
+1 425 1
+1 1591 1
+1 917 0
+1 214 0
+1 899 0
+2 872 0 1786 0
+2 1701 1 885 0
+2 816 0 1130 0
+1 1250 1
+1 1488 1
+2 1932 0 973 0
+1 352 1
+1 1476 0
+1 337 1
+1 1125 1
+1 827 0
+1 175 1
+5 178 1 1285 0 878 0 349 0 529 0
+1 1963 0
+1 1652 1
+1 1131 1
+2 699 1 996 0
+2 1506 1 277 0
+1 822 1
+1 847 0
+1 1957 0
+5 904 1 701 0 310 0 1293 0 849 0
+2 718 1 727 0
+2 15 0 684 0
+1 743 1
+2 972 0 558 0
+1 320 0
+2 1646 0 244 0
+1 1658 0
+1 339 1
+1 1461 1
+1 500 1
+1 1733 1
+2 581 1 1629 0
+3 1807 0 1080 1 509 0
+2 1525 0 227 0
+2 267 0 352 1
+1 503 0
+1 1687 1
+1 1834 1
+1 463 0
+1 1017 1
+2 1847 1 1526 0
+2 1047 0 1584 0
+1 1634 0
+1 423 1
+1 1510 0
+3 1311 0 775 0 1117 0
+1 205 1
+1 1592 0
+1 450 1
+1 339 1
+2 394 0 75 1
+1 583 1
+1 330 1
+1 545 0
+1 1416 1
+1 1677 1
+2 913 0 88 0
+1 274 1
+1 1052 0
+2 1950 0 1500 0
+1 1357 1
+1 1844 0
+1 316 1
+1 319 1
+1 1768 0
+1 613 0
+1 141 0
+1 285 0
+2 1146 0 761 1
+1 1270 0
+2 1169 0 635 0
+1 1277 1
+1 1568 0
+1 751 1
+1 785 1
+1 1000 0
+1 1039 1
+1 1088 1
+1 217 1
+1 1767 0
+2 1593 0 820 0
+1 583 1
+2 525 1 308 0
+1 1223 0
+1 1672 0
+1 981 0
+2 538 1 1391 0
+1 1730 1
+1 540 0
+1 1429 1
+2 1911 1 967 0
+1 1959 1
+1 1574 1
+1 1332 0
+1 1347 0
+1 535 1
+2 1829 0 1364 0
+1 167 0
+1 416 0
+1 1084 1
+2 576 0 982 0
+1 316 1
+1 1525 0
+4 1672 0 262 0 357 0 1293 0
+2 670 0 14 0
+1 532 0
+1 286 0
+1 1617 0
+1 33 1
+2 1390 0 391 1
+1 1807 0
+1 1927 1
+1 1286 1
+2 259 0 307 0
+1 1612 0
+2 1359 1 1248 0
+3 1990 0 753 0 128 0
+1 1488 1
+1 1743 1
+1 358 1
+1 1663 0
+1 855 0
+1 289 1
+1 1479 1
+2 895 0 1381 1
+1 53 1
+1 1903 1
+2 1067 0 16 0
+1 1671 0
+1 1760 0
+2 1614 1 1089 0
+1 466 1
+1 518 1
+1 591 1
+1 1501 1
+1 1615 0
+1 1301 1
+1 17 1
+1 785 1
+1 921 1
+1 191 0
+1 1267 0
+1 1627 0
+1 1895 0
+1 3 1
+1 544 1
+1 1150 1
+1 1257 1
+1 917 0
+2 829 1 1490 0
+1 422 0
+2 1485 0 30 1
+1 273 0
+2 1362 0 107 1
+1 1838 1
+4 1089 0 1430 0 1931 1 429 0
+1 1012 0
+1 456 1
+3 411 0 1508 0 271 0
+1 412 1
+2 1143 1 1833 0
+4 870 0 1983 0 1974 0 1157 0
+1 1685 0
+1 1130 0
+1 1830 0
+1 8 1
+1 550 0
+1 1558 1
+1 145 1
+1 829 1
+1 1168 1
+1 1275 0
+1 1194 0
+1 1115 0
+2 1108 0 1684 0
+1 761 1
+2 378 0 1987 1
+1 1289 1
+2 1796 0 1418 0
+2 886 0 1630 0
+2 1665 0 101 0
+1 797 1
+6 645 0 1404 1 1510 0 108 0 777 0 149 0
+1 587 1
+1 220 1
+1 1809 0
+1 795 1
+1 527 0
+2 1283 0 159 0
+1 1563 1
+1 1915 0
+1 1213 0
+2 562 0 34 0
+1 1798 1
+1 66 0
+1 1348 1
+3 1005 0 1792 1 1190 0
+2 546 0 279 0
+1 1891 1
+5 1569 0 259 0 1010 0 132 0 1714 1
+2 803 0 488 1
+1 1123 0
+2 897 0 1118 1
+3 261 0 1915 0 1866 0
+1 181 0
+1 794 0
+1 1011 0
+1 964 1
+2 848 0 1518 1
+1 87 0
+1 1119 1
+1 1578 1
+1 1621 1
+2 1690 1 341 0
+1 513 0
+3 669 0 220 1 433 0
+1 842 0
+1 852 1
+1 1448 0
+1 1708 0
+1 1316 0
+2 1495 0 1673 0
+1 881 0
+3 1820 0 1865 0 277 0
+1 318 0
+1 48 1
+1 787 1
+1 1369 0
+1 1181 0
+1 547 1
+1 1261 1
+1 1422 1
+1 1770 1
+2 277 0 1132 1
+1 1900 0
+1 1101 0
+2 1234 1 1242 0
+1 512 1
+1 1092 0
+1 465 1
+1 494 0
+2 195 1 1611 0
+1 978 0
+1 347 0
+2 858 0 833 1
+1 321 1
+1 1690 1
+1 982 0
+4 437 0 305 0 323 0 163 0
+1 1892 0
+1 538 1
+1 1088 1
+1 406 1
+1 53 1
+2 1388 1 1516 0
+1 515 1
+1 948 0
+1 998 0
+1 1539 0
+1 1932 0
+1 589 1
+1 342 0
+1 1770 1
+1 1918 1
+1 1848 1
+1 1581 0
+2 909 0 480 0
+2 974 0 1688 0
+1 956 1
+1 1434 1
+1 651 0
+3 468 0 1476 0 1134 1
+1 967 0
+1 304 1
+2 482 0 1526 0
+1 712 1
+1 353 0
+1 1445 1
+1 372 1
+1 1231 0
+1 1549 1
+1 372 1
+1 282 1
+1 1947 0
+1 1798 1
+2 1091 0 628 0
+1 795 1
+1 1455 0
+1 1849 1
+1 1183 1
+1 1068 1
+1 1864 0
+1 484 1
+1 299 1
+1 26 0
+1 221 0
+1 744 0
+1 1556 0
+2 351 1 1781 0
+1 1006 0
+1 1152 1
+1 1370 0
+3 1005 0 435 0 1666 0
+1 909 0
+3 519 1 1026 0 1393 0
+1 457 1
+1 1822 0
+1 363 0
+1 1564 0
+1 1902 0
+1 631 0
+3 1295 0 1714 1 1009 0
+1 757 0
+1 1404 1
+1 297 0
+1 1530 1
+1 1670 1
+1 1530 1
+1 408 1
+1 1296 0
+1 907 1
+1 1573 1
+1 1844 0
+1 670 0
+1 1737 0
+1 317 0
+2 1211 0 1929 0
+1 1735 1
+1 1804 1
+3 1322 1 607 0 1920 0
+1 676 0
+1 370 1
+1 1846 1
+1 1709 1
+2 1973 0 287 1
+4 1555 0 526 0 1301 1 1886 0
+1 1124 0
+1 1128 1
+1 1020 1
+1 1254 0
+1 1125 1
+1 406 1
+1 404 0
+2 1092 0 1761 1
+1 968 0
+1 86 0
+1 930 1
+1 1322 1
+1 1882 0
+3 1894 0 893 1 1967 0
+1 1473 1
+1 240 1
+1 567 1
+3 352 1 357 0 440 0
+1 1090 0
+2 740 0 1376 1
+1 1683 0
+1 214 0
+1 1941 0
+1 1382 1
+1 203 1
+1 1661 1
+1 1234 1
+1 1340 0
+1 1948 1
+2 1632 0 504 0
+3 607 0 1582 0 441 0
+1 655 0
+1 385 0
+1 224 0
+3 408 1 1543 0 739 0
+1 58 0
+1 133 0
+1 487 0
+2 1166 0 981 0
+2 1704 0 187 0
+1 755 1
+1 889 0
+2 25 1 1950 0
+1 763 1
+1 1143 1
+1 1754 1
+3 1223 0 251 0 1135 0
+1 773 1
+1 1143 1
+1 1218 0
+1 1826 0
+2 768 0 1872 1
+1 1541 1
+1 616 0
+2 489 1 1723 0
+1 561 1
+1 1635 0
+2 700 0 1585 1
+1 1862 1
+1 337 1
+1 1236 1
+1 158 0
+1 1202 0
+1 560 0
+1 10 0
+1 274 1
+1 1718 0
+1 510 1
+1 160 0
+1 1462 1
+1 995 1
+1 331 1
+1 102 1
+1 1335 1
+1 1215 1
+1 1455 0
+3 878 0 1219 1 181 0
+1 1219 1
+2 1875 0 1907 1
+1 1517 0
+1 1404 1
+1 1094 0
+1 1769 1
+2 650 0 1454 0
+1 125 0
+1 144 0
+1 1898 0
+1 1736 1
+1 1732 1
+1 701 0
+1 597 0
+1 1601 1
+1 1059 1
+2 1825 0 774 1
+1 751 1
+2 510 1 1001 0
+1 506 0
+3 509 0 1575 0 1085 0
+1 1221 1
+1 130 1
+3 1536 1 983 0 1015 0
+2 944 0 195 1
+1 403 1
+1 193 1
+1 699 1
+1 317 0
+1 1903 1
+1 796 1
+2 1353 0 1119 1
+2 1926 1 303 0
+1 1420 1
+1 1090 0
+1 249 1
+3 633 0 1392 0 1549 1
+5 605 0 1967 0 1042 0 1766 0 1207 0
+1 1831 1
+1 951 1
+3 1081 0 634 0 5 0
+2 1593 0 894 0
+1 1960 0
+2 212 0 1875 0
+1 706 1
+2 1663 0 20 0
+1 1284 1
+3 1611 0 1261 1 676 0
+1 1601 1
+1 467 1
+1 197 1
+3 1141 0 500 1 928 0
+1 1518 1
+3 840 0 788 0 829 1
+1 213 0
+1 1487 0
+1 525 1
+2 1229 0 1497 0
+2 287 1 1474 0
+1 365 1
+1 1691 1
+1 1805 0
+1 1173 1
+1 508 1
+2 1018 1 1205 0
+2 1894 0 718 1
+1 1579 1
+2 473 0 33 1
+2 1120 0 1699 0
+1 65 1
+2 1086 1 710 0
+1 940 0
+1 1905 0
+2 1741 0 440 0
+1 420 1
+2 253 1 1311 0
+2 1484 0 1611 0
+1 1666 0
+1 1221 1
+1 1518 1
+1 1563 1
+1 1966 0
+2 964 1 810 0
+1 1731 1
+1 51 0
+1 315 0
+1 110 1
+1 1060 1
+1 928 0
+1 1527 0
+1 1172 0
+1 1388 1
+1 1880 0
+5 1052 0 1435 0 17 1 1915 0 1509 0
+2 785 1 1822 0
+1 830 0
+1 134 1
+1 1731 1
+2 1902 0 1246 1
+1 1967 0
+1 641 0
+1 805 1
+1 1127 1
+1 1724 1
+1 732 1
+1 1765 0
+1 628 0
+1 1723 0
+1 1711 1
+1 1887 0
+6 1554 0 1569 0 893 1 1274 0 416 0 5 0
+1 212 0
+1 1784 1
+3 1015 0 688 0 738 0
+2 1858 0 867 1
+1 1725 1
+1 1316 0
+1 907 1
+1 493 1
+1 288 0
+1 525 1
+1 955 0
+1 1799 0
+1 1860 1
+1 327 0
+1 601 1
+4 1914 0 423 1 1436 0 207 0
+1 916 0
+1 1298 0
+1 370 1
+1 916 0
+1 1619 0
+1 1401 0
+2 461 0 1307 1
+2 776 0 1504 0
+2 311 0 1023 0
+4 1537 0 1633 0 884 0 1067 0
+1 1246 1
+4 792 0 1428 1 878 0 1939 0
+1 333 1
+1 501 1
+2 1486 0 534 0
+1 40 0
+1 991 1
+2 107 1 688 0
+1 904 1
+2 1555 0 1654 1
+2 1843 0 1559 0
+1 1013 1
+1 1347 0
+1 1583 1
+1 1785 1
+1 104 1
+1 807 0
+1 1003 0
+1 889 0
+1 1088 1
+1 721 0
+1 950 0
+2 1668 1 1273 0
+1 566 0
+1 1753 0
+1 884 0
+2 1390 0 1102 1
+1 1471 0
+5 1133 0 1244 0 943 0 1057 1 1645 0
+1 1065 1
+1 1567 1
+2 466 1 820 0
+1 1714 1
+1 17 1
+1 237 1
+1 594 1
+1 935 0
+1 466 1
+1 1398 0
+1 400 0
+1 1174 0
+2 1941 0 544 1
+1 1330 1
+1 485 0
+1 1749 1
+1 1506 1
+2 750 0 772 1
+3 745 1 804 0 958 0
+1 169 0
+1 532 0
+1 94 0
+1 1027 0
+1 1262 0
+1 2 1
+1 1300 1
+1 702 0
+1 921 1
+2 29 0 473 0
+2 307 0 637 0
+1 382 0
+1 376 1
+1 1513 1
+1 139 1
+1 558 0
+1 1656 1
+1 1073 1
+1 673 1
+1 1135 0
+4 679 0 690 0 1379 1 1010 0
+1 1993 0
+2 737 0 1611 0
+1 1970 0
+1 236 1
+1 511 1
+1 513 0
+1 1911 1
+1 419 0
+1 467 1
+2 1633 0 1704 0
+2 1944 0 210 0
+1 528 0
+2 1311 0 1337 0
+1 452 0
+1 1528 1
+1 69 1
+1 1061 0
+1 1409 1
+1 963 0
+1 1913 1
+1 356 0
+3 1671 0 1262 0 87 0
+1 1910 1
+4 1896 0 1369 0 1772 0 1979 1
+1 1412 0
+1 773 1
+1 994 1
+1 109 1
+1 1422 1
+1 454 0
+1 1790 1
+2 639 0 585 0
+3 1281 1 555 0 309 0
+1 306 1
+1 1336 1
+1 1999 1
+1 904 1
+1 407 0
+1 785 1
+1 676 0
+1 1132 1
+1 1232 1
+5 468 0 866 0 1485 0 1608 1 1196 0
+1 1946 1
+2 582 0 562 0
+3 340 0 356 0 722 0
+1 1945 1
+1 400 0
+1 984 0
+1 116 1
+1 1745 1
+1 979 1
+1 956 1
+1 909 0
+2 1308 0 1958 0
+2 1624 0 1907 1
+1 1876 0
+1 1785 1
+1 1290 1
+1 1381 1
+1 779 1
+2 105 1 1620 0
+1 1352 1
+1 1372 1
+1 919 1
+1 1611 0
+1 62 0
+1 384 1
+1 1323 1
+1 1498 1
+2 224 0 110 1
+1 1825 0
+1 914 0
+1 95 1
+1 85 0
+2 1276 0 697 0
+1 993 1
+1 1541 1
+3 1740 0 583 1 281 0
+1 1983 0
+3 241 0 1448 0 1567 1
+1 1069 0
+1 1378 1
+1 1931 1
+1 1214 0
+1 1636 0
+2 778 0 241 0
+2 1423 0 836 0
+1 948 0
+1 1761 1
+1 1531 1
+1 772 1
+1 1921 1
+1 1707 1
+2 1670 1 1894 0
+1 880 0
+1 271 0
+1 4 0
+1 556 1
+3 848 0 712 1 778 0
+1 382 0
+1 792 0
+2 1886 0 736 0
+1 1939 0
+1 608 0
+1 1821 0
+1 1004 0
+1 1366 1
+1 1453 0
+2 39 0 1909 0
+1 866 0
+5 882 0 936 0 365 1 1634 0 280 0
+2 1654 1 1490 0
+1 373 1
+1 171 0
+1 525 1
+1 1477 1
+1 1441 1
+1 1748 1
+1 1394 0
+1 1174 0
+1 298 0
+1 208 1
+1 828 1
+1 773 1
+1 1923 0
+1 1801 1
+1 1607 0
+1 1835 1
+2 746 0 562 0
+1 8 1
+1 1979 1
+2 1029 0 786 0
+2 1584 0 712 1
+1 1450 0
+1 1219 1
+1 518 1
+1 216 0
+2 129 0 1568 0
+1 1778 0
+1 934 0
+2 930 1 839 0
+1 863 1
+1 381 1
+3 177 0 1687 1 1977 0
+1 1177 0
+1 1379 1
+1 1817 0
+1 1453 0
+1 1965 1
+1 412 1
+1 97 0
+1 1222 0
+1 287 1
+1 1937 1
+2 1436 0 1193 0
+1 1359 1
+4 1530 1 1002 0 1026 0 1565 0
+1 177 0
+1 1423 0
+1 202 0
+1 1584 0
+2 255 1 375 0
+1 1458 0
+1 1956 1
+5 1450 0 1765 0 1773 0 1689 0 206 0
+1 292 0
+1 1691 1
+2 594 1 1760 0
+1 1773 0
+1 1585 1
+1 744 0
+1 1080 1
+1 73 1
+1 1910 1
+1 136 1
+1 444 1
+1 6 0
+1 65 1
+1 432 0
+1 1110 0
+1 1202 0
+4 1117 0 845 0 383 0 784 0
+1 1493 1
+1 548 0
+2 1992 1 940 0
+1 1080 1
+1 1132 1
+1 1885 1
+1 1663 0
+1 1367 1
+2 1283 0 944 0
+3 426 1 329 0 1555 0
+1 748 0
+3 554 0 1663 0 494 0
+1 512 1
+1 1178 0
+2 62 0 779 1
+1 1917 0
+1 1614 1
+1 971 1
+2 1133 0 1669 0
+1 492 1
+1 592 1
+1 19 1
+1 1792 1
+2 1338 0 410 0
+1 1127 1
+1 121 1
+1 1306 1
+1 1743 1
+2 1856 0 1040 0
+3 1389 0 1769 1 56 0
+1 1588 1
+1 57 1
+1 74 0
+2 1934 0 1707 1
+1 823 0
+2 1128 1 1500 0
+1 265 0
+1 1943 1
+2 490 0 323 0
+1 1339 1
+2 951 1 86 0
+1 1511 1
+1 337 1
+2 1348 1 708 0
+1 1847 1
+1 1994 0
+1 1769 1
+1 57 1
+2 1109 0 498 1
+3 1031 0 1010 0 1500 0
+2 1333 1 1564 0
+1 41 0
+1 351 1
+1 1608 1
+2 346 1 1884 0
+4 140 0 895 0 689 1 1917 0
+1 759 0
+1 1128 1
+7 436 1 1297 0 528 0 1997 0 1988 0 913 0 281 0
+2 725 0 1858 0
+1 1339 1
+1 234 1
+2 226 0 1174 0
+1 1533 0
+1 855 0
+1 1783 1
+1 1913 1
+1 1209 1
+1 1690 1
+1 1547 1
+2 3 1 1990 0
+3 1205 0 293 0 170 0
+1 1609 0
+1 1824 0
+2 1639 0 351 1
+1 743 1
+3 701 0 303 0 123 0
+1 780 0
+1 742 1
+1 355 1
+3 399 0 1948 1 1283 0
+1 601 1
+1 51 0
+1 1159 0
+1 687 0
+1 121 1
+2 1172 0 1662 0
+1 1027 0
+1 1659 1
+1 1018 1
+3 1926 1 345 0 1962 0
+1 1306 1
+1 346 1
+1 926 1
+1 1122 1
+1 745 1
+4 256 1 36 0 629 0 1212 0
+3 184 0 705 0 534 0
+1 1021 1
+1 624 0
+1 278 0
+1 27 0
+1 1281 1
+1 362 1
+1 109 1
+1 1515 1
+1 593 0
+2 532 0 1430 0
+1 1424 0
+2 1621 1 1026 0
+1 91 0
+2 1869 1 414 0
+1 715 1
+2 924 0 216 0
+1 607 0
+1 253 1
+1 1339 1
+1 249 1
+1 582 0
+1 776 0
+1 255 1
+1 1977 0
+1 1541 1
+1 1876 0
+1 904 1
+1 73 1
+1 573 0
+1 458 0
+1 83 1
+1 723 1
+1 969 0
+4 690 0 1413 0 1199 0 233 0
+1 126 1
+1 1432 0
+1 1981 0
+1 978 0
+1 1782 1
+5 890 0 1042 0 110 1 1777 0 1580 0
+3 916 0 1529 1 1929 0
+2 494 0 1886 0
+1 102 1
+1 1320 0
+1 1426 0
+3 1313 1 746 0 569 0
+1 1512 0
+1 1549 1
+1 1820 0
+1 1588 1
+2 187 0 1342 1
+1 813 1
+2 1113 1 1657 0
+2 1558 1 318 0
+1 45 1
+1 696 1
+2 938 0 1650 0
+1 1922 1
+2 1741 0 1870 0
+1 1669 0
+2 1558 1 811 0
+1 905 1
+1 151 1
+3 950 0 1155 0 1781 0
+1 1857 0
+1 1699 0
+2 1606 0 72 0
+3 1541 1 1471 0 1713 0
+1 1538 1
+1 536 0
+1 1008 1
+1 1134 1
+1 1313 1
+1 302 1
+2 1757 0 1483 0
+1 1093 1
+1 1614 1
+3 1715 1 1153 0 615 0
+1 345 0
+1 1536 1
+1 131 0
+1 1428 1
+1 27 0
+1 21 0
+1 1236 1
+1 582 0
+2 265 0 115 0
+1 619 1
+1 1888 1
+1 648 0
+1 1674 1
+1 1750 1
+1 338 1
+1 242 0
+1 1773 0
+1 857 0
+2 1405 0 401 0
+1 617 0
+1 1556 0
+1 148 1
+1 568 0
+1 446 0
+1 1117 0
+1 258 1
+1 807 0
+1 1734 1
+1 855 0
+4 1459 0 1544 0 254 0 1975 0
+1 517 1
+1 1666 0
+1 396 0
+2 1981 0 34 0
+1 1572 0
+1 1857 0
+1 182 1
+1 20 0
+1 248 0
+1 1667 1
+1 1352 1
+1 1187 0
+3 1602 1 998 0 862 0
+2 1295 0 334 0
+1 410 0
+3 873 0 33 1 848 0
+1 1874 0
+1 1534 1
+1 1020 1
+1 1567 1
+1 639 0
+2 629 0 1303 0
+1 781 1
+1 1784 1
+1 1854 0
+1 1296 0
+1 1802 1
+1 1118 1
+2 1927 1 354 0
+1 642 0
+1 1862 1
+1 476 0
+1 1728 1
+1 1707 1
+1 1687 1
+2 662 0 240 1
+2 295 0 1855 0
+1 216 0
+1 1237 1
+1 1483 0
+1 1992 1
+1 944 0
+1 1213 0
+1 1749 1
+1 704 0
+1 781 1
+1 1194 0
+1 1832 1
+1 1474 0
+1 1616 0
+1 1731 1
+2 1491 0 325 1
+1 1173 1
+1 817 1
+1 1227 1
+1 963 0
+1 529 0
+1 178 1
+2 1080 1 810 0
+1 1911 1
+1 1659 1
+1 1603 0
+1 288 0
+1 99 1
+2 1513 1 545 0
+1 1367 1
+2 494 0 448 0
+1 1701 1
+1 1624 0
+1 1513 1
+4 752 0 1665 0 1566 0 1801 1
+1 672 1
+1 457 1
+1 1793 0
+1 164 1
+1 1348 1
+1 1907 1
+3 180 0 1816 0 215 0
+3 1955 0 1280 0 1652 1
+1 1024 1
+1 1356 1
+1 1142 1
+1 1555 0
+1 488 1
+1 341 0
+1 973 0
+4 339 1 396 0 469 0 12 0
+4 1744 0 1157 0 507 0 674 0
+1 1318 0
+3 1601 1 156 0 1864 0
+2 471 0 87 0
+2 158 0 916 0
+1 1073 1
+2 1419 0 1826 0
+2 548 0 300 0
+1 456 1
+1 1632 0
+3 1016 0 276 0 905 1
+1 1839 1
+1 1823 0
+2 1641 0 353 0
+1 999 1
+1 1417 1
+1 354 0
+1 1418 0
+1 1019 1
+1 931 0
+1 125 0
+1 1257 1
+1 1105 0
+1 1712 0
+1 1872 1
+1 1660 1
+1 948 0
+1 712 1
+2 1820 0 1081 0
+1 188 0
+1 289 1
+1 195 1
+1 1904 0
+4 272 0 1353 0 1265 0 177 0
+1 304 1
+1 1032 1
+1 1740 0
+1 1155 0
+1 1987 1
+1 1105 0
+2 1441 1 894 0
+1 293 0
+1 1351 1
+1 1729 1
+1 268 0
+1 986 0
+2 1842 0 476 0
+2 966 1 1077 0
+2 1569 0 1806 0
+1 784 0
+1 1210 0
+3 858 0 1605 0 1367 1
+1 1448 0
+1 867 1
+2 709 0 848 0
+4 1559 0 1887 0 490 0 196 1
+2 663 0 1342 1
+1 145 1
+2 216 0 239 0
+1 1548 0
+1 1937 1
+3 1980 0 922 0 1449 0
+2 1414 0 364 0
+2 1074 0 1609 0
+1 1518 1
+1 1823 0
+1 774 1
+1 1136 0
+2 810 0 65 1
+1 624 0
+1 805 1
+1 1884 0
+1 665 0
+1 1057 1
+1 533 0
+1 1226 1
+1 50 1
+2 327 0 1069 0
+2 194 0 1370 0
+2 928 0 1994 0
+1 1365 1
+1 721 0
+1 1520 0
+1 1033 0
+4 257 0 1520 0 1709 1 1905 0
+2 1754 1 898 0
+1 1749 1
+1 742 1
+1 1897 1
+1 1670 1
+2 1998 1 703 0
+1 925 0
+4 1157 0 909 0 925 0 1131 1
+1 1147 1
+1 408 1
+1 3 1
+2 1343 1 51 0
+3 11 0 327 0 1739 0
+2 101 0 1039 1
+4 1148 0 1448 0 67 1 218 0
+1 119 0
+2 498 1 1863 0
+1 310 0
+1 1079 0
+2 896 0 766 1
+2 1880 0 1710 0
+3 1343 1 908 0 462 0
+1 1072 0
+1 428 1
+2 1224 0 968 0
+1 658 0
+1 1717 0
+1 1918 1
+1 67 1
+3 1016 0 964 1 378 0
+1 1978 1
+1 1055 0
+1 737 0
+1 1931 1
+2 63 0 67 1
+1 1510 0
+2 24 0 1621 1
+1 1068 1
+1 1880 0
+1 1976 0
+1 832 1
+2 1689 0 272 0
+1 1136 0
+1 1828 1
+1 1861 0
+2 375 0 614 0
+4 709 0 825 0 1420 1 566 0
+1 1660 1
+1 1064 1
+1 229 1
+2 1229 0 1534 1
+2 1700 0 1188 0
+2 1948 1 1160 0
+2 696 1 380 0
+1 769 1
+3 361 0 1966 0 524 0
+1 1234 1
+1 1520 0
+1 1497 0
+2 865 0 196 1
+1 249 1
+1 1074 0
+1 1213 0
+1 1246 1
+1 1021 1
+1 613 0
+1 1981 0
+4 1880 0 1694 0 1052 0 1915 0
+1 621 0
+1 1696 0
+2 222 0 1847 1
+2 146 0 215 0
+1 1050 0
+1 1326 0
+2 1912 0 903 1
+1 1247 0
+1 1501 1
+2 1038 1 1855 0
+2 1050 0 1932 0
+1 1154 0
+1 1810 0
+1 1608 1
+1 223 1
+1 791 1
+1 877 0
+2 938 0 1335 1
+4 1254 0 1782 1 313 0 198 0
+2 922 0 1384 1
+2 333 1 1096 0
+2 121 1 1269 0
+1 1175 0
+1 1742 1
+1 893 1
+1 408 1
+1 1714 1
+1 1355 0
+1 968 0
+10 224 0 218 0 1140 0 172 0 1501 1 21 0 631 0 697 0 1902 0 778 0
+1 316 1
+1 1643 1
+1 1024 1
+2 809 0 769 1
+1 1242 0
+1 1113 1
+1 1284 1
+1 1695 1
+1 1427 0
+1 74 0
+1 863 1
+2 595 0 490 0
+1 866 0
+1 391 1
+1 1377 0
+1 766 1
+2 957 0 1490 0
+1 913 0
+1 1334 0
+1 885 0
+4 880 0 393 0 263 0 1510 0
+2 1296 0 1008 1
+1 813 1
+3 1439 0 325 1 780 0
+1 508 1
+1 30 1
+6 522 0 342 0 51 0 695 0 479 0 1108 0
+2 1085 0 45 1
+1 1336 1
+1 826 0
+3 1808 0 582 0 267 0
+2 1696 0 985 0
+1 628 0
+1 1065 1
+1 953 1
+1 1342 1
+2 1168 1 1662 0
+1 399 0
+1 1185 0
+1 1176 0
+1 1578 1
+2 1584 0 1029 0
+1 1316 0
+3 1331 0 1878 0 1328 0
+1 247 0
+2 1644 0 1728 1
+2 913 0 1733 1
+1 639 0
+1 1070 0
+1 1354 0
+1 1994 0
+2 857 0 1243 0
+2 144 0 1077 0
+1 1811 0
+1 938 0
+6 575 0 326 0 1680 0 1019 1 1235 0 415 0
+1 136 1
+1 1409 1
+3 978 0 1148 0 1813 0
+1 609 1
+3 661 0 1426 0 1300 1
+1 1482 0
+1 1803 0
+1 1084 1
+1 1324 1
+1 639 0
+1 1622 1
+1 1774 0
+1 616 0
+1 5 0
+1 1561 1
+1 89 1
+1 1691 1
+1 1624 0
+1 1312 1
+1 1025 0
+1 1847 1
+1 273 0
+1 538 1
+1 531 1
+1 1137 1
+1 914 0
+3 469 0 36 0 1430 0
+1 1222 0
+1 1307 1
+1 373 1
+1 1388 1
+1 1889 0
+1 1386 0
+1 1132 1
+1 1649 1
+1 567 1
+1 11 0
+1 522 0
+2 1633 0 1088 1
+1 1471 0
+1 1032 1
+3 1662 0 1576 0 1792 1
+2 1508 0 991 1
+1 1840 0
+1 280 0
+2 196 1 974 0
+1 1869 1
+1 33 1
+2 1528 1 1270 0
+1 558 0
+1 649 1
+1 325 1
+1 1551 0
+1 1758 0
+2 312 0 1959 1
+3 1194 0 89 1 422 0
+1 485 0
+1 1884 0
+1 649 1
+1 93 1
+1 450 1
+1 500 1
+1 588 1
+3 495 0 1006 0 1657 0
+3 1126 0 105 1 1590 0
+1 1301 1
+1 1980 0
+1 1273 0
+1 1999 1
+1 820 0
+1 1986 1
+1 1628 1
+1 960 1
+6 1282 1 681 0 657 0 845 0 836 0 846 0
+1 1690 1
+1 1506 1
+1 1114 1
+1 1397 1
+1 1490 0
+1 1836 0
+1 600 1
+1 1097 0
+1 79 1
+1 1252 0
+2 512 1 1553 0
+2 1633 0 1187 0
+2 1853 0 1435 0
+1 848 0
+1 1196 0
+1 230 1
+1 1351 1
+1 901 0
+1 501 1
+1 1257 1
+4 357 0 124 0 1476 0 1716 0
+2 1821 0 1843 0
+1 76 1
+1 1369 0
+3 1190 0 1507 0 304 1
+1 1264 1
+1 1919 1
+1 1545 0
+3 855 0 603 0 578 0
+1 1769 1
+1 1780 1
+1 880 0
+1 1938 0
+1 1055 0
+1 1313 1
+1 1496 0
+1984
+787
+1 1176 0
+1 1736 1
+4 293 0 1942 0 1622 0 1007 0
+1 1615 0
+1 821 0
+1 886 0
+1 961 0
+8 108 0 1444 0 1035 1 1912 0 1473 0 604 0 1073 0 1483 0
+1 1491 0
+1 547 1
+7 40 0 1737 0 862 0 659 0 85 0 1934 0 938 0
+1 49 0
+18 438 0 695 1 827 0 643 0 804 0 842 0 294 0 766 0 394 0 1027 0 962 0 1538 0 1609 0 1457 0 1751 0 603 0 1929 0 619 0
+1 12 0
+1 82 0
+1 335 0
+1 961 0
+1 695 0
+1 389 0
+2 1850 0 505 0
+1 1354 0
+2 830 0 4 0
+1 303 0
+1 1690 0
+1 389 0
+13 1831 0 1155 0 1970 0 1178 0 205 0 1681 0 483 0 1422 1 1179 0 920 0 802 0 1630 0 966 0
+2 1245 0 447 1
+1 179 0
+1 207 1
+1 451 0
+1 398 0
+1 778 0
+1 520 0
+1 1620 0
+1 1008 0
+2 989 0 1060 1
+1 1381 0
+2 385 0 31 0
+2 787 0 1519 1
+1 891 0
+1 303 0
+1 1666 0
+1 1666 0
+2 1518 0 467 1
+1 597 0
+1 1327 1
+1 60 1
+1 1148 0
+1 1381 1
+1 1666 0
+1 1736 0
+1 398 0
+1 1449 0
+1 389 1
+1 1552 0
+1 1354 0
+1 1666 0
+1 620 0
+1 1132 0
+1 803 0
+1 1527 1
+21 1347 0 63 0 705 0 1208 0 431 0 1508 0 984 0 672 0 620 1 1477 0 1377 0 1681 0 1345 0 35 0 478 0 241 0 1350 0 650 0 531 0 964 0 834 0
+1 1855 0
+1 1666 0
+1 1558 1
+2 1148 0 1275 0
+1 682 0
+2 467 0 813 0
+2 1062 0 12 0
+1 762 0
+1 30 0
+1 1666 0
+1 1690 1
+1 1666 1
+1 783 0
+1 1518 0
+1 385 1
+5 504 0 576 0 1060 1 362 0 255 0
+1 758 0
+1 655 0
+1 1018 0
+1 699 1
+1 1062 0
+7 450 0 44 0 1465 0 854 0 259 0 1164 0 943 0
+1 1558 0
+3 303 0 1381 0 1558 0
+1 1850 0
+2 1354 0 1552 0
+1 1381 0
+1 1552 0
+1 1620 0
+1 682 0
+1 30 1
+1 867 0
+1 908 0
+1 1422 0
+1 385 0
+1 830 0
+2 312 0 12 0
+2 787 0 1395 0
+1 1093 0
+1 1148 0
+9 1205 0 1183 0 1415 0 640 0 1351 1 1914 0 133 0 542 0 425 0
+1 1736 0
+1 445 0
+1 7 1
+1 1512 1
+1 74 0
+1 803 0
+1 627 0
+1 207 0
+30 724 0 1533 0 102 0 1375 0 1272 0 1526 0 315 0 101 0 919 0 470 0 660 0 360 0 927 0 187 0 644 0 268 1 1076 0 24 0 1003 0 1603 0 668 0 1374 0 1582 0 1051 0 348 0 1909 0 1386 0 267 0 1158 0 910 0
+1 1453 1
+1 620 0
+1 870 0
+3 9 0 1820 0 682 1
+1 1422 1
+2 627 1 1093 0
+1 1692 0
+1 1389 0
+2 389 0 226 0
+2 1235 0 1512 0
+1 689 0
+1 1736 0
+4 553 0 320 0 314 0 1703 0
+1 597 0
+1 60 0
+12 579 0 823 0 474 0 1877 0 1713 0 1278 0 1542 1 98 0 1184 0 415 0 448 0 316 0
+1 689 0
+1 908 0
+1 1690 0
+2 588 0 867 0
+1 689 0
+1 588 0
+2 1507 0 1060 0
+18 1464 0 512 0 1104 0 1819 0 918 0 1875 0 1439 0 1248 0 805 0 1706 0 1564 0 672 0 1255 0 325 0 1541 0 1837 0 1441 0 196 0
+1 1709 0
+4 54 0 602 0 741 0 1458 0
+1 1008 1
+3 803 0 1213 0 1395 0
+2 467 0 1060 0
+1 1060 0
+1 49 0
+1 74 0
+2 1327 0 1851 0
+1 1453 0
+1 1709 0
+9 1353 0 851 0 1657 0 1271 0 454 0 52 0 668 0 291 0 821 1
+1 447 0
+16 383 0 702 0 1082 0 1933 0 60 1 591 0 478 0 550 0 298 0 435 0 1365 0 1190 0 439 0 1723 0 1839 0 1040 0
+1 989 0
+1 1690 0
+1 1709 0
+1 1148 0
+1 332 0
+1 188 1
+1 821 0
+1 7 0
+1 447 0
+1 505 1
+1 959 0
+1 891 0
+1 82 0
+1 1736 0
+1 1850 0
+1 332 0
+1 303 1
+1 959 0
+1 268 0
+1 602 1
+3 1261 0 389 0 741 0
+2 682 0 303 0
+1 1702 0
+1 689 0
+1 908 0
+1 1687 0
+1 113 0
+1 627 0
+1 82 0
+1 1558 0
+1 1491 0
+1 627 0
+1 179 0
+4 1236 0 608 0 456 0 1190 0
+1 655 0
+1 695 1
+4 1091 0 1176 1 871 0 38 0
+1 959 0
+2 80 0 57 0
+1 1905 0
+1 445 0
+1 1422 0
+1 1035 0
+1 1958 0
+1 1536 1
+8 1535 0 1477 0 196 0 1172 0 153 0 1502 0 178 0 440 0
+5 778 1 941 0 1820 0 477 0 1173 0
+1 1389 0
+1 387 0
+1 1772 0
+1 1948 0
+1 1948 0
+14 416 0 330 0 1087 0 1247 0 1500 0 244 0 482 0 550 0 1225 0 1795 0 1907 0 496 0 1216 0 1223 0
+2 188 0 1351 0
+2 845 0 689 1
+1 1224 0
+1 1517 0
+2 1512 0 1381 0
+1 1176 0
+1 1618 0
+3 54 0 268 0 1507 0
+1 467 0
+1 908 1
+1 7 0
+1 1552 1
+1 113 0
+1 445 0
+1 1261 0
+2 30 0 588 0
+1 682 0
+1 1958 0
+4 1959 0 1217 0 53 0 1316 0
+1 547 0
+10 1654 0 1357 0 385 1 48 0 1544 0 1730 0 965 0 264 0 900 0 1353 0
+1 1235 1
+9 93 0 1352 0 145 0 684 0 1573 0 1624 0 1082 0 1141 0 284 0
+1 821 0
+1 891 0
+1 31 0
+1 783 1
+1 1619 0
+1 398 1
+1 467 0
+1 179 0
+1 1619 0
+1 1389 1
+2 113 0 226 0
+1 620 0
+1 783 0
+1 1453 0
+1 762 0
+1 376 1
+1 1381 0
+1 1619 0
+1 1517 0
+2 1850 0 445 0
+1 1552 0
+1 1674 0
+1 821 0
+1 607 0
+1 1850 0
+1 856 0
+10 1369 0 919 0 674 0 133 0 1109 0 355 0 1633 0 1454 0 31 1 939 0
+1 1327 0
+1 1288 0
+3 499 0 850 0 1186 0
+28 729 0 1289 0 188 1 1136 0 903 0 196 0 1635 0 1532 0 102 0 1786 0 256 0 1260 0 661 0 679 0 912 0 1554 0 144 0 1831 0 1858 0 1123 0 893 0 471 0 67 0 1944 0 429 0 1774 0 1243 0 1388 0
+1 1389 0
+1 1491 0
+5 1035 0 588 0 1244 0 803 0 1261 0
+1 1093 0
+1 891 0
+1 741 0
+1 1772 0
+2 803 0 1213 0
+1 12 0
+1 689 0
+34 1818 0 1154 0 427 0 355 0 357 0 326 0 775 0 417 0 1309 0 907 0 1384 0 1881 0 1703 0 1645 0 1770 0 1090 0 928 0 599 0 410 0 776 0 1411 0 1548 0 125 0 96 0 749 0 941 0 1278 0 1412 0 346 0 168 0 505 1 1746 0 546 0 1101 0
+5 1585 0 795 0 1551 0 956 0 780 0
+1 1517 0
+1 445 1
+1 1288 0
+1 1035 0
+41 1053 0 871 0 508 0 1696 0 985 0 1284 0 330 0 1792 0 373 0 9 0 1703 0 1261 1 162 0 65 0 1070 0 139 0 552 0 1902 0 73 0 1452 0 1953 0 1050 0 822 0 663 0 608 0 1242 0 356 0 503 0 1021 0 730 0 365 0 1573 0 133 0 737 0 1946 0 1426 0 448 0 858 0 502 0 1760 0 462 0
+1 1517 0
+30 483 0 241 0 1884 0 697 0 874 0 1524 0 237 0 1448 0 695 1 585 0 142 0 1545 0 727 0 759 0 217 0 215 0 833 0 1731 0 1477 0 1194 0 197 0 1942 0 1494 0 1726 0 266 0 404 0 1378 0 1908 0 516 0 1125 0
+3 1126 0 1963 0 1184 0
+1 447 0
+2 451 0 1736 0
+1 505 0
+1 74 0
+5 212 0 358 0 485 0 190 0 23 0
+1 1261 0
+1 1224 0
+1 830 0
+1 1245 1
+1 64 0
+1 1148 1
+1 638 1
+1 1619 1
+1 1922 0
+1 1235 0
+1 7 0
+1 891 1
+2 1035 0 1148 0
+1 1351 1
+1 1035 0
+2 113 0 695 0
+2 1245 0 1148 0
+1 1453 0
+1 1458 0
+2 699 0 682 0
+2 216 0 1964 0
+1 1381 0
+1 886 0
+1 49 0
+1 1275 0
+2 627 0 1709 0
+1 1507 1
+1 891 0
+2 1519 0 803 0
+2 762 0 602 0
+1 908 0
+1 803 0
+1 588 0
+1 1093 0
+2 1922 0 1351 0
+1 54 1
+9 229 0 394 0 1099 0 1725 0 442 0 1242 0 15 0 1582 0 517 0
+1 1736 0
+1 1261 1
+1 1176 0
+6 1533 0 1301 0 1860 0 1961 0 137 0 1154 0
+1 188 0
+1 1060 0
+1 1035 0
+3 554 0 259 0 102 0
+1 783 0
+1 1948 1
+1 1176 1
+1 867 1
+18 383 0 1377 0 78 0 774 0 1149 0 466 0 582 0 635 0 1595 0 1617 0 703 0 1507 1 1622 0 904 0 1231 0 158 0 1359 0 1497 0
+2 1008 0 856 0
+1 1517 0
+15 1355 0 1641 0 40 0 1947 0 932 0 912 0 1905 1 1461 0 386 0 1773 0 63 0 1787 0 266 0 939 0 898 0
+1 1772 1
+2 1784 0 1213 0
+1 1491 0
+2 1518 0 602 0
+1 49 0
+1 1062 0
+1 1674 0
+8 212 0 392 0 824 0 720 0 1061 0 1041 0 1275 1 1441 0
+1 1148 0
+1 1512 0
+27 232 0 1815 0 850 0 1331 0 586 0 737 0 134 0 1434 0 1700 0 359 0 953 0 181 0 696 0 1340 0 1352 0 1097 0 1694 0 1889 0 783 1 1778 0 1265 0 551 0 225 0 8 0 1373 0 247 0 139 0
+1 627 0
+3 227 0 733 0 1870 0
+20 409 0 1236 0 461 0 1001 0 1287 0 707 0 1455 0 1600 0 1049 0 490 0 1971 0 541 0 1692 1 585 0 1022 0 745 0 1681 0 551 0 1087 0 1849 0
+1 1784 0
+1 1512 0
+1 1458 1
+1 1213 1
+3 376 0 1519 0 602 0
+1 1244 0
+2 82 0 1666 0
+1 1615 0
+1 1018 0
+1 207 0
+1 1784 0
+1 1269 0
+4 1369 0 288 0 1171 0 1051 0
+4 3 0 214 0 1860 0 250 0
+1 1558 0
+2 1148 0 1619 0
+1 741 0
+1 588 0
+1 1389 0
+1 1148 0
+2 1784 0 830 0
+2 1381 0 786 0
+1 387 0
+1 1922 1
+1 4 0
+1 7 0
+2 1275 0 1784 0
+2 821 0 398 0
+1 1666 0
+21 228 0 1580 0 269 0 1615 1 1868 0 66 0 847 0 1236 0 1345 0 416 0 1913 0 761 0 802 0 68 0 1842 0 232 0 296 0 1496 0 126 0 1168 0 1443 0
+2 1558 0 1666 0
+1 1709 1
+18 867 1 172 0 1464 0 76 0 440 0 1098 0 526 0 40 0 820 0 1749 0 1223 0 970 0 1653 0 784 0 390 0 424 0 629 0 160 0
+2 803 0 762 0
+1 1132 0
+1 1018 0
+9 1798 0 1655 0 1451 0 497 0 1359 0 1931 0 834 0 131 0 213 0
+1 783 0
+1 1784 1
+1 870 0
+1 597 1
+1 803 1
+1 689 0
+4 661 0 1720 0 879 0 1433 0
+1 1948 0
+1 944 0
+1 1687 1
+5 1174 0 1382 0 887 0 632 0 1712 0
+13 1929 0 1715 0 1219 0 52 0 128 0 272 0 835 0 1313 0 387 1 911 0 1681 0 1493 0 1645 0
+3 1746 0 1377 0 758 1
+1 92 0
+1 4 0
+2 31 0 1709 0
+19 668 0 128 0 1654 0 1630 0 1088 0 494 0 1628 0 14 0 1195 0 1547 0 420 0 1764 0 591 0 284 0 374 0 1701 0 350 0 1807 0 1459 0
+1 1213 0
+1 1269 0
+1 1702 0
+1 1619 0
+1 699 0
+1 944 0
+1 758 0
+1 1523 0
+1 226 1
+1 447 0
+1 1674 0
+1 1244 0
+12 512 0 591 0 1110 0 274 0 708 0 682 1 1978 0 1896 0 1494 0 704 0 337 0 500 0
+1 655 0
+1 741 1
+1 1213 0
+1 624 0
+1 1851 0
+1 1702 1
+2 1354 0 1132 0
+1 959 0
+1 597 0
+2 856 0 1692 0
+1 1687 0
+1 496 0
+23 730 0 1919 0 767 0 1872 0 1969 0 841 0 208 0 259 0 215 0 1372 0 424 0 565 0 1252 0 865 0 1177 0 978 0 1589 0 241 0 1909 0 1981 0 803 1 651 0 1043 0
+1 1615 0
+1 695 0
+2 813 0 207 0
+2 268 0 1615 0
+1 1351 0
+1 1389 0
+1 961 0
+2 1690 0 113 0
+1 312 1
+1 113 1
+1 54 0
+16 629 0 1264 0 533 0 1882 0 582 0 577 0 21 0 335 1 1611 0 868 0 756 0 1917 0 70 0 1842 0 1941 0 1326 0
+2 1343 0 1072 1
+2 1093 0 783 0
+1 803 0
+1 588 0
+1 1692 0
+1 1072 0
+1 1850 0
+1 1275 0
+1 113 0
+1 856 1
+3 1476 0 996 0 1590 0
+1 54 0
+1 620 1
+3 1352 0 1299 0 887 0
+1 1905 0
+1 387 1
+1 82 0
+1 1148 0
+3 695 0 1518 0 1552 0
+1 1552 0
+1 845 0
+1 1519 0
+2 944 0 856 0
+1 1008 0
+1 1542 0
+1 12 0
+2 385 0 31 0
+1 588 0
+2 620 0 1552 0
+1 1702 0
+1 179 1
+1 398 0
+15 1235 1 210 0 540 0 1920 0 1032 0 211 0 916 0 478 0 1147 0 927 0 1017 0 355 0 237 0 937 0 1343 0
+1 762 0
+1 1458 0
+1 813 0
+37 59 0 1871 0 1589 0 1751 0 1164 0 1107 0 419 0 1274 0 1748 0 842 0 1843 0 1836 0 1766 0 612 0 1235 1 167 0 893 0 314 0 466 0 538 0 489 0 885 0 1582 0 1071 0 1345 0 66 0 768 0 1403 0 146 0 1943 0 1925 0 360 0 93 0 119 0 409 0 999 0 1272 0
+1 867 0
+1 786 1
+2 778 0 1527 0
+1 1905 1
+1 1552 0
+1 867 0
+1 1542 0
+1 1692 1
+1 758 0
+1 1062 0
+1 1491 1
+1 699 0
+1 1577 0
+2 1261 0 1948 0
+1 830 0
+3 1458 0 1784 0 1552 0
+1 1224 1
+1 1736 0
+1 1381 0
+1 1235 0
+1 1784 0
+1 1422 0
+2 1093 0 627 0
+1 1709 0
+1 1772 0
+1 1275 0
+7 1844 0 782 0 160 0 612 0 1566 0 1706 0 258 0
+1 179 0
+1 856 0
+1 445 0
+1 113 0
+1 1213 0
+1 870 0
+3 879 0 1532 0 1319 0
+2 689 0 813 0
+1 845 0
+2 1536 0 1395 0
+16 421 0 1256 0 194 0 735 0 1749 0 1815 0 1973 0 1524 0 1168 0 626 0 972 0 795 0 759 0 1077 0 1475 0 1302 0
+12 281 0 160 0 435 0 1632 0 850 0 1674 1 501 0 974 0 804 0 1549 0 754 0 1668 0
+7 1350 0 1155 0 1241 0 1543 0 1387 0 73 0 1368 0
+1 655 0
+2 1512 0 1687 0
+1 787 1
+1 845 0
+23 1564 0 146 0 1809 0 1891 0 572 0 1568 0 1006 0 1852 0 1827 0 926 0 854 0 811 0 841 0 975 0 616 0 1930 0 135 0 681 0 877 0 570 0 1584 0 945 0 52 0
+1 1527 0
+1 1674 1
+1 207 0
+1 505 0
+2 867 0 389 0
+1 1922 0
+1 1702 0
+1 989 0
+1 398 0
+1 787 0
+1 778 1
+1 332 0
+1 1519 0
+12 222 0 1591 0 136 0 552 0 272 0 1213 1 1028 0 1675 0 1169 0 1823 0 1373 0 1194 0
+2 1072 1 1491 0
+1 1213 0
+1 1354 1
+1 547 0
+1 821 0
+2 1213 0 268 0
+1 389 0
+1 335 0
+1 49 0
+2 1905 0 82 0
+8 1521 0 1223 0 1169 0 118 0 785 0 1894 0 1587 0 1496 0
+1 1855 0
+1 1213 0
+1 268 1
+2 908 0 1245 0
+2 1674 0 1458 0
+2 787 0 1327 0
+1 1269 1
+2 1527 0 695 0
+1 467 0
+1 1709 0
+1 389 0
+1 1060 0
+2 49 0 689 0
+1 1132 0
+11 1633 0 126 0 507 0 1569 0 1267 0 461 0 1944 0 60 1 1965 0 1751 0 368 0
+1 1851 0
+1 959 1
+1 1536 0
+3 1425 0 1114 0 1958 1
+1 1542 1
+2 758 0 1674 0
+2 821 0 682 0
+1 335 1
+2 1507 0 1213 0
+1 303 0
+1 1527 0
+1 856 0
+1 1922 0
+1 60 0
+2 1224 0 787 0
+1 813 1
+1 1491 0
+1 830 1
+1 1213 0
+1 1615 1
+1 803 0
+1 1519 0
+1 332 1
+1 1235 0
+2 332 0 689 0
+1 49 0
+2 1958 0 520 0
+1 813 0
+2 1666 0 961 0
+1 588 1
+1 1666 0
+2 1633 0 1327 1
+1 1851 0
+1 1542 0
+1 1261 0
+1 1395 1
+1 1709 0
+1 1235 0
+1 1507 0
+2 1245 0 1008 0
+2 113 0 2 1
+1 49 1
+1 1176 0
+1 944 1
+1 1948 0
+1 830 0
+1 1354 0
+1 1018 0
+1 445 0
+1 1062 1
+1 845 0
+1 74 1
+1 689 0
+1 1132 1
+1 2 0
+1 961 0
+1 1702 0
+5 320 0 1328 0 1956 0 1803 0 1886 0
+1 1261 0
+3 627 0 689 0 1518 0
+1 1507 0
+1 1018 1
+7 938 0 1613 0 789 0 1280 0 961 1 714 0 390 0
+1 398 0
+4 1958 0 655 0 113 0 803 0
+1 1093 1
+1 1851 0
+3 1354 0 1381 0 786 0
+1 670 0
+1 989 1
+1 2 0
+1 82 1
+1 699 0
+1 1512 0
+1 1244 1
+1 961 1
+1 1275 0
+1 867 0
+1 867 0
+1 1244 0
+5 755 0 1325 0 1750 0 696 0 1638 0
+2 667 0 800 0
+1 1018 0
+1 1709 0
+1 695 0
+17 95 0 1295 0 1487 0 135 0 139 0 881 0 1938 0 1406 0 535 0 1124 0 1588 0 124 0 1721 0 371 0 103 0 919 0 1772 1
+1 891 0
+3 758 0 1850 0 1687 0
+1 179 0
+1 451 0
+1 54 0
+1 1615 0
+1 845 1
+18 1297 0 1527 1 1020 0 1537 0 769 0 156 0 1875 0 64 0 1939 0 860 0 1418 0 189 0 890 0 1406 0 590 0 1717 0 535 0 732 0
+1 944 0
+1 655 0
+1 1235 0
+1 845 0
+1 1958 0
+1 1855 1
+6 1240 0 816 0 1883 0 163 0 910 0 1881 0
+1 1666 0
+1 886 0
+1 376 0
+1 830 0
+1 31 1
+1 655 0
+10 1069 0 884 0 540 0 1639 0 741 1 48 0 1057 0 1010 0 1399 0 1638 0
+19 253 0 48 0 1010 0 13 0 676 0 1324 0 1550 0 1003 0 1748 0 1479 0 1489 0 1353 0 660 0 875 0 744 0 1289 0 1558 1 1671 0 598 0
+1 1702 0
+1 451 1
+1 179 0
+1 1035 1
+1 1736 0
+2 1855 0 602 0
+1 520 1
+5 1767 0 1083 0 797 0 778 1 1757 0
+1 1619 0
+2 520 0 1093 0
+9 476 0 1737 0 1805 0 1357 0 1038 0 1882 0 1202 0 409 0 230 0
+1 1620 0
+1 1093 0
+1 1620 1
+2 92 0 908 0
+1 4 1
+2 1519 0 376 0
+2 689 0 1235 0
+1 74 0
+1 602 0
+1 762 1
+1 1288 1
+1 1275 1
+1 49 0
+2 520 0 398 0
+1 1213 0
+1 1422 0
+12 840 0 1934 0 1061 0 140 0 1870 0 1555 0 667 0 1180 0 623 0 351 0 1788 0 1269 1
+1 1245 0
+1 1269 0
+1 1542 0
+1 520 0
+1 783 0
+1 1018 0
+1 655 0
+1 695 0
+1 758 1
+4 627 0 207 0 92 0 638 0
+1 7 0
+1 1269 0
+1 1850 1
+3 1905 0 1422 0 12 0
+2 1850 0 588 0
+1 332 0
+2 1453 0 1395 0
+1 188 0
+1 60 0
+1 870 1
+1 886 0
+2 1412 0 1279 0
+1 92 1
+1 1517 0
+1 682 1
+1 389 0
+2 113 0 332 0
+1 1736 0
+1 1932 0
+1 959 0
+1 821 1
+1 813 0
+1 1395 0
+1 787 0
+1 989 0
+1 1244 0
+11 297 0 111 0 1607 0 101 0 1717 0 1199 0 188 1 1420 0 742 0 1147 0 987 0
+1 1850 0
+1 1269 0
+1 989 0
+2 1823 0 1755 0
+2 886 0 520 0
+1 1422 0
+2 376 0 1542 0
+8 323 0 946 0 1041 0 376 1 1797 0 687 0 1247 0 1628 0
+1 207 0
+1 845 0
+1 1458 0
+1 1850 0
+2 139 0 552 0
+14 451 1 1837 0 1169 0 1919 0 1498 0 184 0 1510 0 1831 0 832 0 656 0 40 0 661 0 1928 0 1495 0
+2 1288 0 870 0
+1 188 0
+1 1453 0
+1 1060 0
+1 1458 0
+1 961 0
+2 1422 0 467 0
+1 1422 0
+1 867 0
+2 655 0 870 0
+1 12 1
+1 803 0
+1 547 0
+2 689 0 389 0
+2 870 0 1958 0
+1 959 0
+1 1518 1
+1 1517 1
+1 1275 0
+1 1958 0
+1 1958 1
+1 1018 0
+3 655 1 1542 0 1018 0
+1 786 0
+1 1687 0
+2 845 0 961 0
+1 1709 0
+2 1060 0 891 0
+1 1851 1
+1 1176 0
+1 1517 0
+1 54 0
+1 207 0
+1 207 0
+1 886 1
+7 67 0 1227 0 1818 0 1427 0 1223 0 970 0 218 0
diff --git a/codejam_2008/src/y2008round1a/B-small-practice.in b/codejam_2008/src/y2008round1a/B-small-practice.in
new file mode 100644
index 0000000..9543917
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/B-small-practice.in
@@ -0,0 +1,2910 @@
+100
+4
+100
+2 2 1 1 0
+2 2 1 3 0
+1 2 1
+1 2 1
+2 3 0 2 1
+3 1 0 2 1 3 0
+4 2 1 4 0 1 0 3 0
+1 3 0
+3 1 0 3 0 4 0
+3 2 1 3 0 4 0
+2 1 0 3 0
+1 1 0
+1 2 1
+1 3 0
+1 2 1
+3 3 0 1 0 2 1
+4 2 1 1 0 4 0 3 0
+3 3 0 4 0 2 1
+1 1 0
+3 1 0 4 0 2 1
+3 3 0 4 0 2 1
+2 1 0 4 0
+1 1 0
+2 2 1 4 0
+2 1 0 4 0
+1 3 0
+1 2 1
+1 1 0
+2 2 1 3 0
+1 2 1
+3 4 0 3 0 1 0
+1 2 1
+2 1 0 3 0
+1 3 0
+4 3 0 2 1 4 0 1 0
+1 2 1
+1 3 0
+1 1 0
+1 3 0
+1 2 1
+1 1 0
+1 2 1
+2 2 1 3 0
+3 2 1 1 0 3 0
+4 4 0 2 1 1 0 3 0
+3 1 0 2 1 3 0
+1 4 0
+3 2 1 4 0 1 0
+1 3 0
+1 4 0
+2 3 0 2 1
+4 4 0 2 1 3 0 1 0
+1 2 1
+2 1 0 4 0
+3 2 1 1 0 4 0
+1 2 1
+4 1 0 2 1 4 0 3 0
+1 2 1
+1 4 0
+4 3 0 1 0 4 0 2 1
+2 2 1 4 0
+1 1 0
+1 4 0
+2 2 1 1 0
+4 4 0 3 0 2 1 1 0
+1 4 0
+1 2 1
+3 2 1 3 0 1 0
+1 2 1
+1 3 0
+4 3 0 2 1 1 0 4 0
+2 4 0 2 1
+1 2 1
+1 3 0
+1 2 1
+1 2 1
+2 2 1 4 0
+2 3 0 4 0
+1 3 0
+2 4 0 3 0
+3 1 0 4 0 3 0
+1 1 0
+1 1 0
+2 4 0 2 1
+1 3 0
+1 3 0
+1 3 0
+1 3 0
+2 2 1 4 0
+1 4 0
+3 4 0 3 0 1 0
+1 4 0
+3 3 0 4 0 2 1
+1 2 1
+4 2 1 3 0 4 0 1 0
+1 3 0
+1 1 0
+2 3 0 4 0
+4 2 1 3 0 4 0 1 0
+1 1 0
+2
+2
+1 2 0
+1 2 1
+9
+41
+1 3 0
+4 7 1 6 0 1 0 2 0
+1 7 1
+3 3 0 7 1 2 0
+1 9 0
+1 9 0
+5 3 0 4 0 2 0 5 0 7 1
+2 3 0 8 0
+9 5 0 7 1 1 0 2 0 6 0 3 0 9 0 4 0 8 0
+5 1 0 7 1 6 0 8 0 5 0
+1 3 0
+8 3 0 7 1 4 0 6 0 8 0 1 0 9 0 2 0
+7 3 0 4 0 1 0 7 1 9 0 2 0 8 0
+1 9 0
+4 3 0 2 0 1 0 4 0
+3 8 0 9 0 6 0
+2 8 0 5 0
+5 1 0 7 1 8 0 3 0 6 0
+2 2 0 7 1
+4 6 0 3 0 1 0 7 1
+4 1 0 4 0 3 0 6 0
+1 6 0
+4 6 0 1 0 7 1 2 0
+6 9 0 3 0 6 0 8 0 1 0 7 1
+1 1 0
+4 4 0 8 0 2 0 6 0
+3 6 0 2 0 1 0
+3 6 0 3 0 1 0
+2 8 0 9 0
+7 4 0 5 0 1 0 7 1 6 0 9 0 2 0
+1 4 0
+2 8 0 9 0
+8 7 1 5 0 3 0 1 0 9 0 8 0 4 0 6 0
+1 9 0
+4 7 1 2 0 1 0 8 0
+4 5 0 9 0 6 0 4 0
+8 4 0 2 0 6 0 9 0 1 0 5 0 7 1 3 0
+1 7 1
+8 7 1 5 0 3 0 9 0 1 0 2 0 8 0 4 0
+1 1 0
+9 8 0 7 1 1 0 6 0 5 0 2 0 4 0 3 0 9 0
+6
+32
+1 3 0
+1 3 0
+1 3 0
+1 3 0
+1 2 0
+1 5 0
+1 3 0
+1 3 0
+2 1 0 5 0
+1 3 0
+6 5 0 4 0 1 0 2 0 6 0 3 1
+1 3 0
+1 3 0
+1 3 0
+1 3 0
+1 3 0
+1 3 0
+1 3 0
+6 1 0 6 0 5 0 3 1 2 0 4 0
+2 2 0 5 0
+1 3 0
+1 2 0
+1 3 0
+1 3 0
+1 3 0
+1 3 0
+4 6 0 5 0 4 0 2 0
+1 3 1
+1 3 0
+4 4 0 5 0 6 0 3 1
+1 3 0
+1 3 0
+5
+6
+5 5 1 2 0 1 0 3 0 4 0
+5 3 0 1 1 5 0 2 0 4 0
+5 3 0 2 1 4 0 1 0 5 0
+5 1 1 5 0 4 0 2 0 3 0
+5 2 0 4 1 3 0 5 0 1 0
+5 4 1 5 0 3 0 2 0 1 0
+1
+3
+1 1 1
+1 1 1
+1 1 1
+3
+35
+2 2 1 3 0
+1 1 0
+3 1 0 2 1 3 0
+2 3 0 2 1
+1 3 0
+1 3 0
+2 2 1 3 0
+2 3 0 1 0
+2 2 1 1 0
+3 2 1 3 0 1 0
+1 2 1
+1 2 1
+1 3 0
+3 1 0 2 1 3 0
+2 2 1 3 0
+1 1 0
+1 3 0
+2 2 1 3 0
+3 3 0 2 1 1 0
+1 2 1
+1 1 0
+3 2 1 1 0 3 0
+2 1 0 2 1
+2 1 0 3 0
+3 1 0 2 1 3 0
+2 1 0 2 1
+2 2 1 3 0
+1 3 0
+2 2 1 1 0
+3 1 0 3 0 2 1
+1 1 0
+1 1 0
+1 3 0
+2 2 1 3 0
+1 3 0
+6
+53
+3 1 0 2 0 6 1
+1 1 0
+3 6 1 1 0 2 0
+3 1 0 3 0 6 1
+1 1 0
+1 5 1
+2 6 1 3 0
+2 1 0 4 1
+1 4 1
+1 2 0
+1 2 0
+3 5 1 2 0 3 0
+3 5 1 3 0 1 0
+1 5 1
+4 3 0 5 1 2 0 1 0
+1 4 1
+4 3 0 4 1 1 0 2 0
+3 2 0 6 1 1 0
+1 6 1
+2 4 1 1 0
+3 4 1 1 0 3 0
+1 5 1
+2 5 1 1 0
+2 3 0 1 0
+4 3 0 6 1 1 0 2 0
+1 4 1
+2 3 0 6 1
+3 1 0 6 1 2 0
+4 6 1 3 0 1 0 2 0
+1 6 1
+3 4 1 2 0 1 0
+2 4 1 2 0
+1 3 0
+3 3 0 5 1 2 0
+1 3 0
+4 2 0 3 0 6 1 1 0
+3 2 0 4 1 1 0
+1 1 0
+3 5 1 2 0 3 0
+2 2 0 1 0
+3 3 0 2 0 4 1
+2 2 0 6 1
+2 2 0 5 1
+2 5 1 1 0
+1 4 1
+1 6 1
+2 2 0 4 1
+1 6 1
+1 5 1
+4 2 0 5 1 3 0 1 0
+1 1 0
+3 6 1 1 0 3 0
+4 1 0 5 1 2 0 3 0
+2
+2
+2 1 0 2 1
+2 1 0 2 0
+5
+14
+1 4 0
+1 1 1
+2 1 1 5 0
+1 3 1
+2 5 0 3 1
+2 3 1 4 0
+1 2 0
+1 4 0
+3 2 0 1 1 4 0
+3 4 0 1 1 5 0
+3 2 0 3 1 4 0
+4 2 0 4 0 3 1 5 0
+3 2 0 3 1 4 0
+3 1 1 2 0 5 0
+2
+2
+1 2 0
+1 2 0
+2
+2
+1 1 0
+2 2 0 1 0
+9
+34
+3 7 1 6 0 3 0
+2 8 0 2 0
+2 3 0 5 1
+1 2 1
+5 4 0 5 0 9 0 8 0 7 0
+2 8 1 7 0
+5 7 0 8 0 2 0 1 0 4 0
+3 9 1 3 0 6 0
+2 9 0 1 0
+6 8 0 1 0 5 0 7 0 9 0 4 0
+2 5 0 1 0
+2 2 0 8 0
+1 7 1
+5 4 0 8 0 2 0 7 0 1 0
+1 5 0
+2 9 0 2 0
+2 2 0 8 0
+2 1 1 7 0
+2 1 0 2 1
+1 4 0
+1 7 0
+2 8 0 5 0
+1 7 1
+1 4 1
+1 4 1
+1 4 0
+3 5 1 6 0 3 0
+4 5 1 4 0 1 0 7 0
+3 1 0 2 0 9 1
+5 7 0 5 0 2 0 8 0 4 0
+1 7 0
+2 2 0 5 0
+1 9 0
+1 2 1
+9
+11
+3 8 0 4 0 3 0
+1 9 0
+1 9 0
+1 1 0
+1 9 1
+3 4 0 1 0 9 1
+1 9 0
+2 1 0 2 0
+8 1 0 7 0 2 0 3 0 9 1 5 0 8 0 4 0
+4 9 1 4 0 6 0 2 0
+9 6 0 9 1 4 0 1 0 3 0 7 0 8 0 2 0 5 0
+2
+2
+2 2 0 1 1
+1 1 0
+9
+97
+5 2 0 4 0 3 1 6 0 7 0
+3 9 0 4 0 6 0
+4 4 0 9 0 5 1 2 0
+5 4 0 7 0 6 0 2 0 3 1
+5 4 0 2 0 3 1 7 0 9 0
+3 3 1 9 0 6 0
+2 7 0 6 0
+3 9 0 6 0 1 1
+2 6 0 1 1
+2 6 0 5 1
+6 7 0 2 0 9 0 6 0 5 1 4 0
+1 6 0
+3 6 0 4 0 3 1
+4 2 0 4 0 7 0 1 1
+4 6 0 2 0 4 0 7 0
+1 6 0
+3 2 0 9 0 1 1
+4 9 0 7 0 8 1 6 0
+1 2 0
+1 5 1
+1 6 0
+1 9 0
+1 2 0
+1 7 0
+1 6 0
+2 3 1 7 0
+5 4 0 6 0 7 0 8 1 2 0
+1 8 1
+2 2 0 9 0
+2 2 0 3 1
+1 4 0
+3 9 0 3 1 4 0
+4 3 1 6 0 9 0 2 0
+4 7 0 9 0 4 0 8 1
+1 7 0
+5 6 0 7 0 1 1 9 0 2 0
+1 8 1
+1 8 1
+1 3 1
+4 6 0 2 0 8 1 7 0
+1 9 0
+1 1 1
+3 5 1 2 0 7 0
+2 2 0 8 1
+4 9 0 5 1 6 0 7 0
+4 7 0 4 0 1 1 9 0
+2 8 0 3 1
+1 1 1
+3 3 1 9 0 2 0
+6 2 0 6 0 1 1 4 0 9 0 7 0
+1 7 0
+3 2 0 7 0 4 0
+4 7 0 1 1 6 0 9 0
+6 9 0 5 1 6 0 4 0 7 0 2 0
+6 6 0 9 0 5 1 4 0 2 0 7 0
+3 6 0 7 0 5 1
+1 1 1
+1 6 0
+4 7 0 4 0 5 1 6 0
+2 4 0 8 1
+5 2 0 1 1 9 0 7 0 6 0
+2 9 0 8 1
+2 7 0 6 0
+4 7 0 3 1 9 0 6 0
+4 4 0 6 0 7 0 8 1
+5 2 0 5 1 7 0 9 0 4 0
+2 5 1 4 0
+5 6 0 7 0 4 0 2 0 1 1
+2 9 0 5 1
+1 5 1
+1 9 0
+1 4 0
+1 8 1
+5 6 0 5 1 4 0 2 0 7 0
+6 7 0 9 0 6 0 4 0 2 0 1 1
+3 7 0 4 0 1 1
+1 1 1
+3 4 0 6 0 8 1
+4 7 0 6 0 9 0 8 1
+1 9 0
+1 6 0
+2 1 1 9 0
+3 6 0 8 1 4 0
+1 1 1
+3 5 1 6 0 2 0
+3 6 0 9 0 3 1
+2 9 0 5 1
+6 9 0 6 0 4 0 2 0 7 0 5 1
+2 7 0 6 0
+1 5 1
+2 6 0 7 0
+1 6 0
+5 9 0 7 0 5 1 4 0 2 0
+5 5 1 7 0 4 0 9 0 6 0
+5 6 0 3 1 4 0 7 0 2 0
+1 2 0
+2 8 1 4 0
+2
+2
+1 1 1
+1 2 0
+2
+2
+1 2 0
+2 2 0 1 1
+7
+24
+5 4 0 7 0 5 1 1 0 3 0
+1 3 0
+2 2 0 3 0
+1 5 1
+1 7 0
+3 5 1 1 0 3 0
+5 5 1 7 0 2 0 1 0 4 0
+1 1 0
+1 6 1
+1 4 0
+5 7 0 4 0 3 0 6 1 1 0
+4 6 1 4 0 3 0 7 0
+3 2 0 7 0 1 0
+3 3 0 6 1 7 0
+1 6 1
+1 1 0
+5 7 0 4 0 5 1 3 0 1 0
+2 2 0 4 0
+5 4 0 7 0 5 1 3 0 1 0
+3 7 0 1 0 6 1
+2 1 0 4 0
+1 7 0
+1 5 1
+4 2 0 3 0 4 0 6 1
+9
+78
+6 6 1 9 0 4 0 3 0 7 0 2 0
+2 6 1 8 0
+2 3 0 1 0
+3 4 0 2 0 1 0
+6 9 0 4 0 7 0 5 1 3 0 1 0
+5 9 0 6 1 7 0 1 0 3 0
+3 3 0 8 1 1 0
+3 1 0 9 0 8 1
+5 9 0 1 0 4 0 3 0 5 1
+4 4 0 8 1 1 0 2 0
+4 2 0 3 0 7 0 9 0
+3 2 0 8 1 4 0
+7 4 0 9 0 3 0 7 0 1 0 6 1 2 0
+5 3 0 5 1 2 0 7 0 4 0
+7 2 0 1 0 9 0 4 0 3 0 7 0 5 1
+3 2 0 4 0 1 0
+1 9 0
+4 3 0 9 0 1 0 5 1
+3 7 0 8 1 9 0
+2 9 0 8 1
+7 4 0 1 0 9 0 8 1 3 0 7 0 2 0
+1 8 1
+7 3 0 9 0 4 0 7 0 2 0 6 1 1 0
+4 3 0 2 0 7 0 6 1
+3 2 0 7 0 8 1
+2 2 0 4 0
+1 1 0
+2 5 1 7 0
+2 8 1 1 0
+2 9 0 5 1
+2 7 0 3 0
+1 2 0
+5 6 1 3 0 7 0 9 0 2 0
+3 3 0 7 0 6 1
+3 3 0 1 0 5 1
+1 4 0
+1 9 0
+1 3 0
+2 5 1 1 0
+3 2 0 6 1 4 0
+3 5 1 2 0 3 0
+4 2 0 7 0 8 1 3 0
+3 9 0 3 0 8 1
+2 2 0 3 0
+4 2 0 3 0 6 1 7 0
+4 5 1 9 0 4 0 2 0
+1 9 0
+1 4 0
+5 9 0 2 0 6 1 1 0 7 0
+2 1 0 5 1
+1 8 1
+2 6 1 9 0
+2 4 0 1 0
+3 9 0 4 0 8 1
+1 1 0
+1 2 0
+2 2 0 8 1
+7 3 0 6 1 7 0 1 0 4 0 2 0 9 0
+1 5 1
+2 7 0 8 1
+1 3 0
+4 7 0 4 0 3 0 8 1
+2 3 0 1 0
+4 7 0 3 0 9 0 8 1
+2 6 1 7 0
+3 9 0 7 0 3 0
+4 3 0 7 0 8 1 4 0
+2 4 0 5 1
+1 7 0
+2 5 1 4 0
+1 8 1
+6 7 0 2 0 4 0 9 0 5 1 1 0
+4 8 1 9 0 3 0 2 0
+5 3 0 6 1 2 0 9 0 1 0
+1 2 0
+2 3 0 9 0
+4 4 0 8 1 1 0 2 0
+3 9 0 3 0 4 0
+3
+44
+1 1 1
+1 3 0
+3 1 1 3 0 2 0
+2 1 1 2 0
+2 1 1 2 0
+1 1 1
+1 3 0
+3 1 1 2 0 3 0
+1 1 1
+3 3 0 1 1 2 0
+1 1 1
+1 3 0
+1 2 0
+1 1 1
+1 2 0
+1 1 1
+1 1 1
+2 2 0 3 0
+1 2 0
+1 2 0
+1 2 0
+1 2 0
+1 1 1
+3 3 0 1 1 2 0
+2 2 0 1 1
+1 1 1
+1 3 0
+1 2 0
+1 2 0
+1 3 0
+2 3 0 1 1
+3 3 0 1 1 2 0
+1 2 0
+1 1 1
+1 1 1
+3 3 0 2 0 1 1
+2 1 1 3 0
+1 3 0
+1 1 1
+1 1 1
+2 3 0 1 1
+1 3 0
+1 3 0
+2 3 0 2 0
+1
+2
+1 1 1
+1 1 0
+3
+59
+1 1 0
+3 2 0 3 0 1 1
+1 1 1
+1 1 1
+1 1 1
+2 1 1 2 0
+3 1 1 2 0 3 0
+2 2 0 3 0
+1 1 0
+1 3 0
+2 2 0 1 1
+1 1 0
+1 2 0
+1 1 1
+1 1 0
+1 2 0
+1 3 0
+1 1 0
+1 1 1
+1 1 0
+1 1 1
+2 2 0 1 1
+1 1 1
+1 2 0
+3 2 0 1 1 3 0
+1 2 0
+1 1 1
+2 1 1 3 0
+1 1 1
+1 1 0
+1 1 1
+1 3 0
+1 1 0
+3 2 0 1 1 3 0
+2 3 0 2 0
+1 1 0
+2 3 0 1 1
+1 2 0
+1 1 0
+1 1 1
+1 1 0
+3 1 1 3 0 2 0
+1 1 0
+1 1 0
+1 1 0
+1 1 0
+1 1 0
+1 3 0
+1 1 0
+2 1 1 3 0
+1 2 0
+1 1 1
+2 2 0 3 0
+1 1 0
+1 1 0
+2 1 1 2 0
+1 1 1
+2 3 0 1 1
+1 1 0
+4
+15
+1 1 0
+2 2 0 1 0
+2 4 1 2 0
+3 1 0 2 0 4 1
+2 4 1 1 0
+1 4 1
+1 3 1
+1 4 1
+2 2 0 1 0
+1 3 1
+1 3 1
+3 1 0 4 1 2 0
+1 3 1
+2 3 1 4 0
+3 3 1 2 0 1 0
+7
+30
+2 3 0 7 0
+2 6 0 2 0
+1 1 0
+2 2 0 1 0
+2 4 0 3 0
+1 5 1
+3 7 0 4 0 3 0
+2 7 0 5 1
+2 3 0 1 0
+5 2 0 1 0 4 0 3 0 5 1
+1 5 1
+1 5 1
+6 6 0 4 0 2 0 1 0 5 1 3 0
+3 3 0 1 0 2 0
+1 2 0
+3 1 0 2 0 3 0
+3 4 0 2 0 6 0
+3 7 0 3 0 2 0
+2 7 0 3 0
+1 1 0
+1 4 0
+1 7 0
+2 5 1 4 0
+2 6 0 3 0
+1 4 0
+2 5 1 4 0
+2 5 1 2 0
+2 2 0 1 0
+7 4 0 6 0 1 0 7 0 3 0 2 0 5 1
+1 3 0
+5
+53
+1 3 1
+1 2 1
+1 5 1
+3 3 0 5 0 2 0
+2 4 0 1 0
+1 3 1
+2 1 0 5 1
+2 2 0 3 0
+1 5 1
+1 5 1
+1 3 1
+2 3 0 2 0
+3 2 1 1 0 4 0
+1 2 1
+2 2 1 1 0
+2 4 0 2 1
+2 2 1 1 0
+2 1 0 5 1
+1 2 0
+1 2 0
+1 3 1
+1 3 0
+1 2 0
+2 4 0 5 1
+1 2 0
+3 1 0 4 0 2 1
+2 5 1 1 0
+2 1 0 5 1
+3 1 0 5 1 4 0
+2 2 1 4 0
+2 1 0 2 1
+1 3 0
+2 1 0 4 0
+2 4 0 5 1
+2 3 1 1 0
+1 2 0
+2 5 0 2 0
+1 3 1
+2 3 1 4 0
+1 2 1
+3 5 1 4 0 1 0
+2 5 0 3 0
+1 3 1
+1 3 1
+2 5 0 3 0
+2 3 0 5 0
+1 1 0
+1 3 1
+1 5 0
+1 3 1
+3 4 0 2 1 1 0
+2 4 0 3 1
+3 4 0 1 0 2 1
+2
+2
+1 2 1
+2 2 1 1 0
+2
+2
+1 2 0
+1 2 1
+2
+2
+2 2 0 1 1
+2 1 1 2 0
+5
+6
+2 4 0 1 1
+1 2 0
+1 1 1
+4 1 1 3 0 4 0 5 0
+2 3 0 1 1
+4 1 1 5 0 4 0 3 0
+2
+2
+2 2 0 1 0
+1 1 0
+6
+17
+1 4 0
+2 1 0 6 1
+1 5 0
+1 2 0
+1 4 0
+1 1 0
+5 4 0 1 0 5 0 2 0 6 1
+2 1 0 3 0
+1 4 0
+3 6 1 4 0 1 0
+6 2 0 5 0 1 0 6 1 3 0 4 0
+1 6 1
+5 5 0 4 0 2 0 1 0 3 0
+2 5 0 1 0
+1 2 0
+2 1 0 3 0
+1 2 0
+10
+21
+2 4 0 8 1
+1 1 1
+1 8 1
+1 10 1
+4 4 0 2 0 6 1 7 0
+1 1 1
+3 4 0 2 0 1 1
+2 1 0 3 1
+2 2 0 10 1
+3 7 0 2 0 9 1
+3 4 0 1 1 2 0
+1 6 1
+1 9 1
+1 5 1
+1 1 1
+2 6 0 9 1
+3 7 0 6 1 4 0
+2 5 0 6 1
+3 4 0 10 1 7 0
+4 9 1 7 0 2 0 4 0
+5 1 1 6 0 10 0 5 0 8 0
+2
+2
+1 1 0
+2 2 1 1 0
+4
+10
+1 2 0
+1 3 1
+1 1 0
+1 1 0
+1 3 1
+1 4 0
+2 2 0 3 1
+2 2 0 4 0
+3 3 1 1 0 2 0
+1 2 0
+2
+2
+1 1 1
+1 2 0
+9
+19
+3 6 0 1 0 7 0
+2 8 1 3 0
+4 1 0 2 0 6 0 8 1
+2 7 0 4 1
+6 2 0 6 0 1 0 7 0 3 1 5 0
+1 8 1
+2 2 0 4 1
+1 9 0
+2 2 0 6 0
+5 9 0 3 1 6 0 1 0 5 0
+1 3 1
+1 6 0
+1 4 1
+4 1 0 6 0 8 1 5 0
+1 3 1
+4 5 0 3 1 2 0 9 0
+3 6 0 9 0 2 0
+3 6 0 9 0 3 1
+4 9 0 3 1 6 0 5 0
+6
+9
+3 2 0 5 0 6 0
+1 5 0
+3 2 0 6 0 5 0
+1 2 0
+2 5 0 6 0
+3 5 0 6 0 2 1
+2 6 0 5 0
+1 5 1
+1 6 1
+6
+13
+2 5 0 4 0
+4 6 0 4 0 5 0 3 1
+1 3 1
+4 2 1 4 0 1 0 6 0
+4 4 0 1 0 6 0 2 1
+1 1 0
+1 2 1
+2 5 0 3 1
+1 4 0
+2 5 0 1 0
+1 2 1
+1 4 0
+1 3 1
+3
+33
+1 1 0
+1 1 0
+3 2 1 1 0 3 0
+3 3 0 1 0 2 1
+3 3 0 1 0 2 1
+1 3 0
+1 1 0
+1 3 0
+1 2 1
+1 2 1
+1 3 0
+1 3 0
+1 2 1
+3 3 0 2 1 1 0
+1 3 0
+1 1 0
+1 3 0
+1 2 1
+2 3 0 2 1
+1 2 1
+1 3 0
+1 3 0
+2 1 0 3 0
+1 1 0
+1 3 0
+1 3 0
+1 1 0
+1 3 0
+1 2 1
+1 2 1
+1 1 0
+2 1 0 3 0
+2 1 0 3 0
+2
+2
+1 1 0
+1 1 0
+5
+53
+2 1 0 5 0
+1 1 0
+1 4 1
+4 2 0 5 0 3 0 4 1
+1 4 1
+2 3 0 2 0
+2 4 1 3 0
+3 1 0 3 0 2 0
+2 5 0 3 0
+2 5 0 4 1
+2 3 0 2 0
+1 1 0
+1 3 0
+5 3 0 4 1 5 0 2 0 1 0
+1 5 0
+2 5 0 4 1
+1 1 0
+2 4 1 2 0
+3 1 0 2 0 3 0
+1 3 0
+3 5 0 3 0 1 0
+1 5 0
+2 3 0 5 0
+5 5 0 1 0 4 1 3 0 2 0
+4 3 0 1 0 2 0 4 1
+1 3 0
+3 5 0 3 0 4 1
+2 2 0 3 0
+1 5 0
+1 2 0
+3 4 1 1 0 3 0
+1 2 0
+1 5 0
+4 4 1 2 0 1 0 3 0
+2 4 1 3 0
+5 3 0 4 1 2 0 5 0 1 0
+4 5 0 1 0 3 0 4 1
+1 2 0
+4 3 0 2 0 1 0 4 1
+4 1 0 4 1 3 0 5 0
+4 1 0 3 0 4 1 5 0
+2 3 0 4 1
+5 2 0 1 0 3 0 4 1 5 0
+4 5 0 2 0 1 0 3 0
+1 3 0
+5 2 0 3 0 4 1 5 0 1 0
+1 4 1
+1 1 0
+2 2 0 5 0
+5 4 1 5 0 3 0 2 0 1 0
+3 4 1 5 0 3 0
+4 3 0 4 1 2 0 1 0
+3 2 0 4 1 5 0
+2
+2
+1 2 1
+1 1 1
+10
+10
+4 6 0 5 0 9 0 7 1
+10 6 0 1 0 5 0 3 0 7 0 2 0 10 0 4 0 8 1 9 0
+3 6 0 5 0 9 1
+7 5 0 4 0 2 1 3 0 9 0 6 0 7 0
+5 3 1 5 0 7 0 9 0 6 0
+1 6 1
+9 5 0 9 0 7 0 6 0 2 0 1 1 3 0 4 0 10 0
+6 3 0 6 0 9 0 4 1 5 0 7 0
+2 6 0 5 1
+8 6 0 7 0 2 0 10 1 9 0 3 0 4 0 5 0
+4
+7
+1 1 0
+2 4 0 2 1
+1 2 1
+3 2 1 1 0 3 0
+4 2 1 3 0 4 0 1 0
+1 2 1
+1 1 0
+6
+49
+1 5 0
+1 4 0
+2 1 0 6 0
+5 3 0 5 1 4 0 6 0 1 0
+2 4 0 1 0
+6 1 0 6 0 3 0 4 0 5 1 2 0
+3 5 1 1 0 2 0
+5 6 0 3 0 4 0 5 1 2 0
+2 6 0 3 0
+2 6 0 4 0
+1 6 0
+5 1 0 6 0 3 0 5 1 2 0
+1 5 1
+2 6 0 3 0
+1 2 0
+2 2 0 1 0
+2 5 1 6 0
+1 5 0
+5 4 0 3 0 2 0 5 1 6 0
+1 5 0
+1 5 0
+1 1 0
+2 6 0 5 1
+4 6 0 4 0 3 0 5 1
+2 4 0 6 0
+1 5 0
+1 5 1
+1 5 0
+1 5 0
+1 5 0
+2 3 0 2 0
+4 4 0 5 1 2 0 6 0
+1 3 0
+2 6 0 5 1
+1 5 0
+1 5 0
+1 5 0
+1 5 0
+1 6 0
+2 3 0 1 0
+1 5 0
+1 5 0
+5 4 0 3 0 6 0 1 0 5 1
+2 4 0 5 1
+1 2 0
+1 6 0
+1 5 0
+4 4 0 5 1 6 0 1 0
+5 3 0 1 0 6 0 2 0 4 0
+2
+2
+1 1 0
+1 2 0
+10
+9
+1 2 0
+1 2 0
+6 5 0 10 0 8 0 4 0 1 0 6 0
+1 2 0
+6 10 0 2 1 3 0 8 0 5 0 7 0
+6 7 0 5 0 6 0 1 0 8 0 9 0
+1 2 1
+1 2 0
+1 4 0
+3
+55
+1 2 0
+3 2 0 1 0 3 1
+1 3 1
+3 2 0 3 1 1 0
+2 1 0 2 0
+1 1 0
+1 2 0
+1 1 0
+1 3 1
+3 3 1 2 0 1 0
+2 2 0 1 0
+2 2 0 3 1
+3 3 1 1 0 2 0
+1 2 0
+1 2 0
+3 1 0 3 1 2 0
+1 3 1
+1 1 0
+3 3 1 1 0 2 0
+3 1 0 3 1 2 0
+1 3 1
+1 1 0
+3 1 0 2 0 3 1
+1 2 0
+2 1 0 3 1
+1 1 0
+1 1 0
+1 3 1
+1 3 1
+1 3 1
+2 1 0 2 0
+1 2 0
+1 2 0
+1 3 1
+2 1 0 2 0
+3 1 0 2 0 3 1
+2 3 1 2 0
+2 3 1 1 0
+1 2 0
+1 2 0
+2 1 0 3 1
+2 2 0 3 1
+1 2 0
+2 3 1 2 0
+1 1 0
+1 3 1
+1 3 1
+2 1 0 2 0
+2 2 0 1 0
+1 1 0
+1 2 0
+2 2 0 3 1
+1 2 0
+1 3 1
+1 1 0
+5
+35
+1 2 0
+2 5 1 2 0
+2 5 1 4 0
+2 2 0 4 0
+3 2 0 4 0 1 0
+4 2 0 4 0 1 0 5 1
+1 1 0
+3 4 0 5 1 2 0
+1 5 1
+1 1 0
+3 1 0 5 1 4 0
+2 2 0 3 1
+1 2 0
+1 5 1
+4 2 0 4 0 5 1 1 0
+3 5 1 1 0 4 0
+1 1 0
+1 3 1
+1 2 0
+3 4 0 3 1 1 0
+4 1 0 2 0 3 1 4 0
+2 1 0 3 1
+1 3 1
+1 2 0
+1 3 1
+2 1 0 4 0
+1 4 0
+2 2 0 1 0
+1 4 0
+1 3 1
+4 5 1 1 0 4 0 2 0
+1 2 0
+1 5 1
+1 3 1
+3 3 1 1 0 2 0
+3
+13
+1 2 0
+1 3 1
+2 3 1 2 0
+2 3 1 2 0
+1 3 1
+1 3 1
+1 3 1
+1 3 1
+1 1 0
+1 3 1
+1 1 0
+1 1 0
+1 3 1
+3
+32
+1 2 0
+1 3 0
+1 2 0
+1 2 0
+1 3 0
+1 2 0
+1 2 0
+1 2 0
+1 3 0
+1 2 1
+1 2 1
+1 2 0
+3 2 1 3 0 1 0
+1 2 0
+1 2 0
+1 2 0
+1 1 0
+1 3 0
+1 2 0
+1 3 0
+1 2 0
+1 2 0
+1 2 0
+1 2 0
+1 2 0
+1 2 0
+1 2 0
+1 2 0
+1 2 0
+1 1 0
+1 2 0
+1 2 1
+10
+37
+2 1 0 2 0
+2 7 1 10 0
+8 5 0 3 0 7 0 1 0 10 0 4 0 2 0 6 0
+1 2 0
+1 2 1
+1 9 0
+1 1 0
+1 5 1
+6 10 0 3 0 4 0 6 0 2 0 1 0
+1 7 0
+3 7 0 2 0 10 0
+1 7 0
+2 2 0 1 0
+1 10 0
+3 4 0 10 0 3 0
+6 1 0 7 0 10 0 2 0 4 0 6 0
+7 10 0 7 0 4 0 2 0 1 0 5 0 3 0
+3 5 0 6 0 4 0
+2 7 0 4 0
+8 5 0 4 0 1 0 10 0 2 0 3 0 7 0 6 0
+2 5 0 1 0
+2 6 1 3 0
+3 4 1 10 0 5 0
+6 2 0 4 0 1 0 10 0 7 0 5 0
+2 9 0 1 1
+1 10 1
+5 7 0 10 0 5 0 1 0 2 0
+6 10 0 1 0 4 0 5 0 2 0 3 0
+3 3 0 4 0 2 0
+2 6 0 2 0
+1 5 1
+1 3 1
+1 5 1
+1 3 1
+6 1 0 3 0 6 0 7 0 4 0 2 0
+1 10 0
+5 5 0 6 0 1 1 3 0 10 0
+9
+78
+3 4 0 1 0 2 0
+5 6 0 2 0 7 0 3 1 5 0
+4 8 0 3 1 2 0 1 0
+1 9 1
+5 8 0 1 0 6 0 3 1 7 0
+5 6 0 8 0 7 0 4 0 3 1
+1 2 0
+2 4 0 9 1
+3 3 1 6 0 5 0
+2 2 0 7 0
+1 8 0
+7 3 1 1 0 5 0 6 0 4 0 7 0 2 0
+4 9 1 5 0 1 0 7 0
+2 4 0 3 1
+1 8 0
+4 6 0 4 0 5 0 2 0
+7 3 1 5 0 2 0 6 0 1 0 4 0 7 0
+5 4 0 9 1 2 0 7 0 6 0
+8 1 0 4 0 7 0 5 0 3 1 6 0 8 0 2 0
+1 6 0
+3 9 1 4 0 2 0
+6 9 1 4 0 6 0 7 0 5 0 1 0
+1 3 1
+2 3 0 9 1
+3 6 0 4 0 8 0
+5 8 0 7 0 6 0 1 0 9 1
+1 4 0
+3 1 0 8 0 2 0
+8 9 1 1 0 6 0 2 0 5 0 4 0 7 0 8 0
+4 8 0 6 0 3 1 1 0
+8 4 0 2 0 8 0 7 0 6 0 5 0 3 1 1 0
+1 3 1
+5 8 0 9 1 6 0 5 0 7 0
+4 4 0 9 1 5 0 2 0
+3 6 0 8 0 9 1
+4 3 1 8 0 4 0 7 0
+8 8 0 6 0 4 0 1 0 7 0 5 0 9 1 2 0
+7 5 0 6 0 1 0 3 1 4 0 8 0 2 0
+8 1 0 5 0 8 0 3 1 4 0 2 0 6 0 7 0
+4 4 0 9 1 5 0 8 0
+4 1 0 6 0 4 0 5 0
+4 9 1 1 0 7 0 6 0
+2 5 0 4 0
+2 4 0 8 0
+3 6 0 8 0 3 1
+3 2 0 4 0 6 0
+8 7 0 5 0 8 0 2 0 1 0 9 1 6 0 4 0
+2 9 1 7 0
+1 2 0
+2 2 0 4 0
+1 6 0
+3 4 0 3 1 6 0
+1 4 0
+5 5 0 1 0 9 1 8 0 6 0
+5 6 0 5 0 1 0 4 0 2 0
+3 6 0 9 1 4 0
+3 3 1 5 0 6 0
+2 4 0 3 1
+6 2 0 1 0 3 1 6 0 5 0 8 0
+5 6 0 1 0 3 1 2 0 8 0
+2 8 0 9 1
+8 7 0 1 0 9 1 2 0 6 0 4 0 5 0 8 0
+5 4 0 1 0 9 1 2 0 7 0
+7 6 0 9 1 8 0 4 0 7 0 1 0 2 0
+1 9 1
+1 1 0
+8 1 0 4 0 5 0 2 0 7 0 8 0 6 0 3 1
+6 6 0 2 0 9 1 5 0 1 0 4 0
+1 6 0
+4 1 0 3 1 2 0 6 0
+2 5 0 4 0
+1 5 0
+3 9 1 8 0 7 0
+3 5 0 3 1 6 0
+5 6 0 8 0 3 1 7 0 4 0
+7 5 0 8 0 4 0 6 0 7 0 1 0 3 1
+4 3 1 5 0 7 0 6 0
+1 3 1
+8
+86
+4 8 0 1 0 6 0 7 1
+6 6 0 8 0 3 0 4 0 1 0 7 1
+5 4 0 2 1 6 0 8 0 3 0
+6 4 0 6 0 7 1 8 0 1 0 3 0
+2 8 0 5 1
+6 7 1 1 0 3 0 8 0 4 0 6 0
+2 4 0 1 0
+3 3 0 2 1 1 0
+1 6 0
+1 1 0
+3 8 0 3 0 4 0
+1 1 0
+1 2 1
+1 5 1
+2 5 1 1 0
+2 8 0 7 1
+3 1 0 7 1 3 0
+3 7 1 1 0 3 0
+4 1 0 5 1 8 0 3 0
+5 7 1 1 0 6 0 8 0 3 0
+5 6 0 3 0 7 1 1 0 4 0
+1 4 0
+6 6 0 4 0 3 0 1 0 8 0 2 1
+1 5 1
+2 5 1 1 0
+1 5 1
+5 2 1 3 0 8 0 4 0 1 0
+1 5 1
+2 1 0 2 1
+1 1 0
+2 1 0 7 1
+5 1 0 6 0 2 1 8 0 4 0
+1 8 0
+5 8 0 4 0 3 0 7 1 6 0
+3 2 1 8 0 6 0
+1 4 0
+1 2 1
+4 4 0 3 0 5 1 1 0
+1 6 0
+1 7 1
+2 3 0 2 1
+1 3 0
+3 1 0 4 0 5 1
+1 1 0
+6 3 0 5 1 8 0 1 0 4 0 6 0
+1 1 0
+3 6 0 4 0 5 1
+3 2 1 6 0 3 0
+5 6 0 2 1 8 0 3 0 1 0
+1 7 1
+2 3 0 7 1
+2 6 0 2 1
+2 5 1 1 0
+1 8 0
+2 4 0 2 1
+4 8 0 3 0 4 0 2 1
+1 2 1
+6 3 0 8 0 6 0 7 1 1 0 4 0
+1 8 0
+1 6 0
+5 1 0 3 0 8 0 5 1 4 0
+1 3 0
+4 4 0 8 0 5 1 3 0
+2 2 1 6 0
+2 8 0 1 0
+4 7 1 3 0 6 0 1 0
+4 2 1 6 0 4 0 3 0
+3 6 0 1 0 8 0
+4 5 1 4 0 1 0 3 0
+2 6 0 7 1
+4 4 0 8 0 7 1 6 0
+6 1 0 4 0 5 1 6 0 8 0 3 0
+5 8 0 2 1 1 0 6 0 4 0
+3 8 0 1 0 4 0
+5 2 1 4 0 6 0 1 0 3 0
+4 4 0 3 0 7 1 8 0
+3 5 1 8 0 3 0
+4 8 0 1 0 4 0 3 0
+2 8 0 5 1
+3 8 0 6 0 2 1
+2 1 0 7 1
+4 2 1 6 0 8 0 4 0
+1 1 0
+2 5 1 6 0
+3 2 1 1 0 4 0
+3 2 1 4 0 8 0
+3
+32
+1 3 0
+1 3 0
+1 2 0
+1 2 0
+2 1 1 3 0
+2 1 1 2 0
+2 3 0 1 1
+2 2 0 3 0
+1 1 1
+2 3 0 2 0
+2 2 0 1 1
+3 2 0 1 1 3 0
+1 3 0
+2 3 0 1 1
+2 3 0 1 1
+3 3 0 1 1 2 0
+1 2 0
+2 1 1 3 0
+1 2 0
+1 1 1
+1 3 0
+2 3 0 2 0
+2 2 0 3 0
+1 2 0
+1 2 0
+1 2 0
+1 1 1
+2 2 0 1 1
+2 1 1 2 0
+1 3 0
+2 1 1 3 0
+1 1 1
+9
+38
+3 5 0 2 1 8 0
+1 7 0
+3 1 0 9 1 7 0
+1 4 1
+1 4 1
+1 5 1
+1 5 1
+2 1 0 8 1
+4 5 1 9 0 6 0 3 0
+1 7 0
+1 4 1
+1 6 1
+3 8 1 1 0 7 0
+3 1 0 9 1 7 0
+3 8 1 1 0 7 0
+2 6 1 1 0
+1 2 1
+1 5 1
+1 2 1
+2 6 0 8 1
+1 2 1
+1 6 1
+1 9 1
+1 3 1
+3 9 1 6 0 8 0
+3 6 1 7 0 1 0
+2 5 1 1 0
+1 4 1
+1 8 1
+3 1 0 4 1 7 0
+1 8 1
+1 4 1
+3 9 1 1 0 7 0
+2 7 0 5 1
+3 9 1 7 0 1 0
+2 1 0 3 1
+3 4 1 1 0 7 0
+2 2 1 7 0
+6
+34
+4 1 0 5 1 6 0 4 0
+1 5 1
+1 2 0
+4 4 0 1 0 3 1 6 0
+2 6 0 4 0
+3 1 0 2 0 5 1
+5 1 0 3 1 6 0 4 0 2 0
+1 3 1
+4 6 0 1 0 4 0 2 0
+2 6 0 5 1
+3 5 1 6 0 2 0
+1 1 0
+1 2 0
+3 3 1 2 0 4 0
+2 3 1 6 0
+4 2 0 1 0 4 0 3 1
+2 5 1 1 0
+1 3 1
+3 5 1 6 0 2 0
+4 4 0 6 0 5 1 2 0
+2 1 0 6 0
+1 5 1
+3 5 1 1 0 2 0
+1 5 1
+3 6 0 5 1 2 0
+5 2 0 4 0 6 0 1 0 3 1
+1 5 1
+3 4 0 3 1 2 0
+1 6 0
+2 6 0 4 0
+3 5 1 1 0 4 0
+3 1 0 3 1 4 0
+4 4 0 2 0 6 0 3 1
+1 1 0
+7
+78
+6 5 0 3 0 4 1 2 0 1 0 6 0
+3 3 0 4 1 2 0
+7 7 0 5 0 6 0 4 1 1 0 3 0 2 0
+1 6 0
+5 3 0 2 0 5 0 4 1 1 0
+2 5 0 4 1
+2 4 1 3 0
+2 6 0 3 0
+1 2 0
+1 1 0
+3 7 0 3 0 4 1
+7 2 0 1 0 6 0 7 0 3 0 4 1 5 0
+2 3 0 2 0
+2 4 1 2 0
+2 3 0 6 0
+6 1 0 3 0 4 1 2 0 5 0 6 0
+2 7 0 5 0
+1 5 0
+2 4 1 1 0
+1 2 0
+1 3 0
+3 7 0 5 0 4 1
+1 2 0
+5 4 1 6 0 3 0 2 0 1 0
+1 4 1
+3 3 0 7 0 1 0
+4 7 0 6 0 1 0 3 0
+4 2 0 5 0 6 0 7 0
+1 5 0
+4 5 0 1 0 6 0 3 0
+3 6 0 3 0 1 0
+1 5 0
+5 2 0 3 0 5 0 6 0 1 0
+1 1 0
+4 3 0 2 0 7 0 4 1
+3 6 0 1 0 4 1
+1 6 0
+4 4 1 5 0 2 0 6 0
+2 1 0 6 0
+2 1 0 3 0
+3 6 0 3 0 5 0
+4 4 1 2 0 6 0 1 0
+3 2 0 6 0 3 0
+1 4 1
+1 7 0
+1 7 0
+5 2 0 5 0 3 0 4 1 6 0
+3 1 0 6 0 4 1
+4 5 0 3 0 2 0 7 0
+2 1 0 5 0
+3 5 0 2 0 6 0
+5 2 0 7 0 5 0 1 0 6 0
+2 3 0 4 1
+3 1 0 4 1 6 0
+4 7 0 6 0 3 0 2 0
+2 7 0 3 0
+2 2 0 6 0
+1 6 0
+2 4 1 5 0
+2 4 1 1 0
+1 1 0
+1 6 0
+2 3 0 4 1
+3 7 0 3 0 2 0
+5 6 0 4 1 2 0 5 0 7 0
+1 5 0
+1 1 0
+1 3 0
+2 3 0 5 0
+6 6 0 7 0 4 1 1 0 5 0 3 0
+3 3 0 1 0 7 0
+4 5 0 3 0 6 0 4 1
+3 5 0 4 1 6 0
+4 6 0 1 0 5 0 7 0
+1 7 0
+1 5 0
+1 2 0
+3 4 1 5 0 6 0
+2
+2
+2 1 1 2 0
+1 1 1
+2
+2
+2 1 0 2 0
+1 2 1
+6
+50
+1 2 1
+3 2 1 5 0 1 0
+1 2 1
+6 2 1 3 0 6 0 4 0 1 0 5 0
+1 2 1
+1 2 1
+4 4 0 6 0 3 0 5 0
+2 5 0 2 1
+1 6 0
+1 5 0
+2 4 0 5 0
+1 4 0
+3 2 1 3 0 4 0
+1 4 0
+1 3 0
+1 3 0
+3 2 1 6 0 4 0
+5 3 0 2 1 1 0 4 0 6 0
+2 3 0 2 1
+1 6 0
+2 5 0 4 0
+2 6 0 2 1
+5 4 0 3 0 6 0 1 0 2 1
+5 1 0 5 0 6 0 2 1 3 0
+1 3 0
+2 3 0 1 0
+1 5 0
+1 5 0
+2 5 0 4 0
+1 4 0
+6 1 0 6 0 4 0 3 0 2 1 5 0
+4 6 0 3 0 1 0 4 0
+1 1 0
+4 3 0 6 0 5 0 1 0
+3 5 0 1 0 3 0
+1 6 0
+2 4 0 1 0
+3 2 1 1 0 6 0
+5 3 0 4 0 1 0 2 1 5 0
+1 3 0
+6 6 0 5 0 1 0 4 0 2 1 3 0
+2 4 0 6 0
+3 2 1 4 0 1 0
+4 4 0 2 1 5 0 6 0
+1 4 0
+4 4 0 5 0 6 0 1 0
+1 5 0
+2 5 0 2 1
+4 6 0 5 0 2 1 4 0
+6 2 1 6 0 4 0 5 0 1 0 3 0
+4
+39
+1 3 0
+4 1 1 4 0 2 0 3 0
+1 4 0
+2 3 0 4 0
+1 4 0
+1 3 0
+1 1 1
+3 1 1 4 0 3 0
+2 3 0 2 0
+2 3 0 4 0
+3 4 0 1 1 3 0
+3 4 0 2 0 3 0
+3 4 0 2 0 3 0
+3 1 1 3 0 4 0
+3 4 0 2 0 1 1
+1 2 0
+1 4 0
+2 2 0 3 0
+1 3 0
+1 1 1
+1 4 0
+1 3 0
+2 2 0 4 0
+3 3 0 2 0 1 1
+4 1 1 3 0 2 0 4 0
+1 1 1
+2 2 0 1 1
+1 1 1
+1 3 0
+4 3 0 4 0 2 0 1 1
+1 3 0
+1 2 0
+2 1 1 3 0
+1 4 0
+1 2 0
+1 4 0
+1 3 0
+3 2 0 1 1 4 0
+2 3 0 1 1
+6
+47
+1 3 0
+1 6 0
+3 3 0 6 0 4 0
+4 4 0 3 0 6 0 2 0
+6 3 0 6 0 4 0 5 1 1 0 2 0
+1 1 0
+1 5 1
+4 2 0 5 1 6 0 3 0
+4 5 1 3 0 4 0 2 0
+1 5 1
+6 6 0 1 0 2 0 3 0 4 0 5 1
+3 5 1 6 0 4 0
+2 2 0 5 1
+1 3 0
+3 3 0 2 0 6 0
+4 6 0 4 0 3 0 5 1
+3 5 1 3 0 4 0
+1 6 0
+2 4 0 5 1
+1 5 1
+1 6 0
+2 5 1 2 0
+1 1 0
+2 2 0 1 0
+1 6 0
+4 5 1 4 0 1 0 2 0
+1 2 0
+4 5 1 3 0 4 0 1 0
+1 3 0
+3 1 0 5 1 3 0
+1 2 0
+2 2 0 1 0
+2 6 0 1 0
+5 2 0 5 1 1 0 3 0 4 0
+2 4 0 5 1
+1 4 0
+1 6 0
+6 1 0 5 1 4 0 3 0 2 0 6 0
+1 6 0
+1 1 0
+1 6 0
+1 3 0
+1 4 0
+1 6 0
+1 5 1
+1 2 0
+2 5 1 4 0
+8
+15
+1 5 1
+1 8 1
+1 3 1
+2 5 1 3 0
+3 3 1 7 0 4 0
+3 6 0 2 1 1 0
+2 4 0 8 1
+2 5 0 3 0
+4 7 0 1 0 6 0 8 1
+1 6 0
+3 5 1 1 0 6 0
+3 6 0 4 0 3 1
+1 8 1
+2 5 0 2 1
+1 4 0
+5
+14
+1 2 1
+1 5 0
+1 1 0
+3 5 0 1 0 4 1
+1 3 0
+1 5 0
+3 3 0 5 0 1 0
+1 3 0
+1 2 1
+2 5 0 1 0
+1 2 1
+1 5 0
+1 4 1
+2 5 0 4 1
+2
+2
+1 2 1
+2 1 1 2 0
+2
+2
+2 2 0 1 1
+2 1 1 2 0
+6
+7
+2 2 1 5 0
+1 1 1
+3 2 0 5 0 1 0
+1 5 1
+1 5 1
+1 6 1
+1 6 1
+2
+2
+2 1 0 2 1
+2 2 0 1 1
+8
+61
+1 2 0
+3 8 0 4 1 6 0
+1 6 0
+6 3 0 5 0 2 0 1 1 6 0 7 0
+3 7 0 2 0 8 0
+5 2 0 6 0 3 0 8 0 5 0
+1 5 0
+7 6 0 3 0 7 0 8 0 2 0 5 0 1 1
+2 7 0 1 1
+3 3 0 7 0 8 0
+6 7 0 8 0 3 0 1 1 2 0 6 0
+3 5 0 4 1 8 0
+4 2 0 8 0 7 0 6 0
+2 4 1 2 0
+2 7 0 4 1
+3 4 1 3 0 5 0
+4 5 0 8 0 7 0 2 0
+1 1 1
+3 5 0 7 0 3 0
+3 7 0 5 0 4 1
+4 7 0 4 1 8 0 5 0
+1 8 0
+4 8 0 6 0 3 0 4 1
+2 3 0 1 1
+3 8 0 3 0 4 1
+2 3 0 4 1
+2 8 0 4 1
+5 4 1 6 0 7 0 5 0 2 0
+5 2 0 6 0 8 0 4 1 5 0
+4 8 0 7 0 5 0 1 1
+5 7 0 8 0 4 1 2 0 3 0
+2 2 0 6 0
+5 3 0 1 1 8 0 2 0 6 0
+3 7 0 5 0 8 0
+2 4 1 7 0
+1 4 1
+3 3 0 8 0 7 0
+7 8 0 7 0 5 0 4 1 6 0 3 0 2 0
+4 7 0 8 0 5 0 6 0
+2 6 0 1 1
+3 8 0 5 0 2 0
+1 5 0
+4 1 1 3 0 8 0 7 0
+5 8 0 4 1 5 0 6 0 3 0
+2 8 0 7 0
+3 2 0 4 1 7 0
+6 5 0 3 0 8 0 7 0 2 0 1 1
+6 5 0 6 0 4 1 8 0 3 0 2 0
+2 4 1 3 0
+6 4 1 6 0 2 0 5 0 7 0 3 0
+3 4 1 5 0 7 0
+4 5 0 1 1 2 0 7 0
+7 6 0 5 0 7 0 2 0 1 1 3 0 8 0
+1 4 1
+3 4 1 5 0 2 0
+5 7 0 2 0 6 0 1 1 8 0
+4 8 0 6 0 5 0 7 0
+2 5 0 2 0
+4 6 0 1 1 5 0 2 0
+2 8 0 4 1
+5 5 0 2 0 4 1 7 0 3 0
+2
+2
+2 2 0 1 1
+1 2 1
+9
+46
+9 1 1 5 0 8 0 7 0 9 0 6 0 4 0 3 0 2 0
+1 6 0
+1 7 0
+5 4 0 9 0 1 1 8 0 3 0
+8 2 0 3 0 1 1 4 0 8 0 6 0 9 0 7 0
+1 8 0
+5 6 0 2 0 9 0 8 0 5 0
+1 8 0
+2 8 0 7 0
+4 3 0 5 0 2 0 4 0
+7 1 1 4 0 2 0 3 0 9 0 7 0 8 0
+5 7 0 5 0 2 0 3 0 9 0
+1 1 1
+2 7 0 4 0
+6 6 0 2 0 9 0 7 0 1 1 4 0
+1 2 0
+1 7 0
+2 1 1 3 0
+1 9 0
+6 6 0 7 0 4 0 9 0 8 0 5 0
+2 3 0 7 0
+3 8 0 2 0 7 0
+7 1 1 6 0 2 0 8 0 3 0 7 0 9 0
+3 1 1 9 0 5 0
+2 6 0 8 0
+4 1 1 7 0 5 0 9 0
+3 8 0 3 0 7 0
+2 1 1 7 0
+5 7 0 5 0 2 0 8 0 4 0
+2 6 0 2 0
+4 3 0 2 0 1 1 8 0
+7 2 0 1 1 4 0 3 0 5 0 8 0 6 0
+2 1 1 8 0
+2 5 0 1 1
+1 5 0
+1 8 0
+8 8 0 2 0 4 0 9 0 7 0 5 0 6 0 3 0
+5 9 0 4 0 6 0 2 0 5 0
+5 6 0 3 0 9 0 2 0 8 0
+1 1 1
+5 2 0 7 0 8 0 5 0 9 0
+3 5 0 8 0 3 0
+5 7 0 3 0 5 0 1 1 4 0
+1 2 0
+1 9 0
+3 5 0 6 0 7 0
+3
+12
+2 3 0 2 0
+2 2 0 3 0
+1 2 0
+2 2 0 3 0
+1 1 1
+1 3 0
+3 1 1 2 0 3 0
+1 2 0
+2 2 0 3 0
+1 2 0
+1 1 1
+1 3 0
+2
+2
+2 1 0 2 0
+2 2 1 1 0
+10
+100
+1 8 1
+1 3 0
+1 2 1
+1 5 0
+1 6 0
+1 10 1
+1 10 1
+1 1 1
+1 10 1
+1 4 0
+1 10 1
+1 6 0
+1 1 1
+1 1 1
+1 1 1
+1 8 1
+1 6 0
+1 4 0
+1 8 1
+1 7 1
+1 7 1
+1 10 1
+1 4 0
+1 4 0
+1 7 1
+1 3 0
+1 6 0
+1 1 1
+1 7 1
+1 6 0
+1 9 1
+1 2 1
+1 5 0
+1 9 1
+1 9 1
+1 2 1
+1 4 0
+1 6 0
+1 1 1
+1 6 0
+1 10 1
+1 5 0
+1 2 1
+1 3 0
+1 10 1
+1 7 1
+1 10 1
+1 3 0
+1 2 1
+1 6 0
+1 1 1
+1 8 1
+1 6 0
+1 2 1
+1 10 1
+1 9 1
+1 4 0
+1 3 0
+1 7 1
+1 4 0
+1 8 1
+1 3 0
+1 1 1
+1 1 1
+1 9 1
+1 8 1
+1 5 0
+1 3 0
+1 1 1
+1 5 0
+1 2 1
+1 8 1
+1 6 0
+1 9 1
+1 7 1
+1 10 1
+1 6 0
+1 8 1
+1 1 1
+1 4 0
+1 4 0
+1 4 0
+1 5 0
+1 10 1
+1 7 1
+1 1 1
+1 5 0
+1 2 1
+1 9 1
+1 1 1
+1 8 1
+1 1 1
+1 3 0
+1 7 1
+1 7 1
+1 4 0
+1 2 1
+1 6 0
+1 5 0
+1 9 1
+10
+44
+3 2 1 3 0 9 0
+4 1 0 9 0 8 0 7 0
+1 10 1
+5 2 1 9 0 6 0 3 0 1 0
+2 2 1 9 0
+6 1 0 7 0 9 0 8 0 4 1 6 0
+5 4 1 5 0 1 0 6 0 8 0
+3 4 0 10 1 2 0
+5 1 0 9 0 6 0 7 0 4 1
+2 9 0 4 1
+2 4 1 8 0
+7 8 0 6 0 3 0 7 0 1 0 10 1 9 0
+3 2 1 1 0 8 0
+1 9 0
+4 9 0 7 0 2 1 8 0
+2 5 0 10 1
+2 8 0 6 0
+1 3 0
+4 5 0 6 0 3 0 9 0
+4 3 0 2 1 6 0 8 0
+1 4 1
+1 10 1
+6 8 0 3 0 2 1 7 0 1 0 6 0
+5 5 0 3 0 9 0 4 1 8 0
+1 5 0
+3 7 0 5 0 1 0
+3 7 0 6 0 10 1
+4 9 0 6 0 10 1 3 0
+3 5 0 8 0 9 0
+2 4 1 8 0
+1 2 1
+2 10 1 5 0
+3 9 0 5 0 10 1
+3 2 1 3 0 6 0
+3 3 0 7 0 5 0
+2 3 0 1 0
+6 3 0 4 1 1 0 6 0 9 0 5 0
+8 7 0 9 0 5 0 8 0 2 1 1 0 6 0 3 0
+2 1 0 10 1
+4 6 0 5 0 7 0 3 0
+7 5 0 1 0 9 0 7 0 3 0 8 0 10 1
+7 8 0 1 0 3 0 6 0 9 0 5 0 4 1
+1 5 0
+1 2 1
+4
+94
+1 3 0
+1 1 1
+2 2 0 1 1
+2 4 1 2 0
+2 1 1 3 0
+3 4 1 3 0 2 0
+3 1 1 3 0 2 0
+1 4 1
+3 3 0 1 1 2 0
+2 2 0 4 1
+3 2 0 3 0 1 1
+1 1 1
+2 1 1 2 0
+2 1 1 3 0
+1 3 0
+1 2 0
+2 2 0 4 1
+3 3 0 1 1 2 0
+1 1 1
+1 2 0
+3 2 0 3 0 1 1
+1 2 0
+1 1 1
+1 3 0
+1 4 1
+1 3 0
+1 4 1
+3 2 0 3 0 4 1
+1 3 0
+3 3 0 2 0 4 1
+1 4 1
+1 2 0
+3 3 0 2 0 4 1
+1 3 0
+1 3 0
+3 4 1 2 0 3 0
+1 3 0
+1 2 0
+1 2 0
+1 2 0
+1 4 1
+1 2 0
+1 3 0
+2 1 1 3 0
+1 2 0
+2 3 0 4 1
+2 2 0 1 1
+1 2 0
+1 1 1
+2 2 0 4 1
+1 4 1
+1 1 1
+1 1 1
+2 3 0 2 0
+1 1 1
+1 3 0
+1 1 1
+2 3 0 4 1
+2 4 1 2 0
+2 4 1 2 0
+3 3 0 1 1 2 0
+2 4 1 2 0
+2 3 0 2 0
+2 4 1 2 0
+2 1 1 3 0
+2 4 1 3 0
+2 3 0 1 1
+1 1 1
+1 1 1
+1 4 1
+1 1 1
+1 1 1
+2 4 1 3 0
+2 1 1 3 0
+2 4 0 1 1
+3 2 0 3 0 4 1
+3 2 0 4 1 3 0
+3 4 1 3 0 2 0
+1 4 1
+3 3 0 1 1 2 0
+1 3 0
+2 4 1 2 0
+1 3 0
+2 2 0 1 1
+1 4 1
+1 2 0
+1 2 0
+1 3 0
+1 3 0
+2 2 0 4 1
+2 4 1 3 0
+2 2 0 4 1
+1 3 0
+2 3 0 1 1
+3
+37
+2 3 1 1 0
+1 2 0
+2 2 0 1 0
+2 2 0 1 0
+1 2 0
+2 2 0 3 1
+1 2 0
+2 2 0 3 1
+1 2 0
+1 1 0
+1 1 0
+1 3 1
+2 2 0 1 0
+2 1 0 3 1
+1 3 1
+1 3 1
+1 1 0
+3 3 1 2 0 1 0
+1 3 1
+1 3 1
+2 2 0 3 1
+1 1 0
+2 1 0 2 0
+1 2 0
+1 2 0
+2 2 0 1 0
+1 3 1
+2 1 0 3 1
+1 1 0
+1 2 0
+1 2 0
+1 3 1
+1 3 1
+1 3 1
+2 1 0 2 0
+3 3 1 1 0 2 0
+2 2 0 3 1
+8
+53
+1 6 0
+3 5 0 3 1 2 0
+1 4 0
+3 2 0 5 0 1 0
+2 5 0 4 0
+4 1 0 4 0 3 1 6 0
+7 3 1 7 0 6 0 5 0 4 0 2 0 1 0
+1 3 1
+7 4 0 5 0 8 1 6 0 7 0 2 0 1 0
+2 5 0 8 1
+4 1 0 5 0 2 0 8 1
+1 2 0
+1 4 0
+4 1 0 8 1 4 0 6 0
+3 1 0 3 1 4 0
+2 3 1 5 0
+4 5 0 3 1 1 0 2 0
+1 3 1
+2 6 0 1 0
+1 6 0
+5 1 0 6 0 3 1 7 0 2 0
+5 2 0 4 0 7 0 8 1 6 0
+4 5 0 1 0 7 0 8 1
+1 8 1
+1 1 0
+6 6 0 1 0 7 0 4 0 2 0 3 1
+1 1 0
+7 7 0 1 0 5 0 2 0 6 0 8 1 4 0
+1 4 0
+1 7 0
+3 3 1 6 0 1 0
+2 4 0 8 1
+4 7 0 5 0 3 1 4 0
+2 2 0 7 0
+2 1 0 5 0
+2 7 0 6 0
+1 3 1
+6 4 0 6 0 8 1 2 0 1 0 7 0
+2 7 0 3 1
+7 1 0 4 0 8 1 6 0 2 0 7 0 5 0
+2 2 0 8 1
+6 1 0 4 0 6 0 7 0 2 0 3 1
+1 6 0
+3 3 1 1 0 7 0
+2 5 0 6 0
+1 2 0
+7 8 1 1 0 2 0 7 0 6 0 5 0 4 0
+4 7 0 1 0 3 1 4 0
+7 5 0 7 0 1 0 6 0 4 0 2 0 3 1
+2 4 0 1 0
+7 5 0 1 0 3 1 7 0 2 0 6 0 4 0
+1 7 0
+1 1 0
+7
+85
+2 7 1 2 0
+1 6 1
+3 3 0 1 1 2 0
+1 1 1
+2 3 0 1 1
+1 6 1
+1 6 1
+1 6 1
+1 1 1
+1 4 1
+2 6 1 3 0
+2 5 1 2 0
+1 5 1
+1 5 1
+1 4 1
+1 2 0
+1 3 0
+2 5 1 2 0
+1 6 1
+2 5 1 3 0
+2 1 1 2 0
+1 5 1
+2 3 0 4 1
+1 3 0
+3 5 1 3 0 2 0
+3 4 1 2 0 3 0
+1 4 1
+1 4 1
+3 2 0 3 0 7 1
+1 4 1
+1 4 1
+1 6 1
+2 5 1 2 0
+2 4 1 2 0
+1 5 1
+2 2 0 5 1
+3 3 0 4 1 2 0
+1 7 1
+2 3 0 5 1
+1 5 1
+3 7 1 3 0 2 0
+3 2 0 1 1 3 0
+2 1 1 3 0
+3 4 0 7 1 1 0
+1 4 1
+3 2 0 7 1 3 0
+1 6 1
+2 2 0 3 0
+1 5 1
+1 4 1
+3 1 1 3 0 2 0
+1 1 1
+1 3 0
+3 3 0 4 1 2 0
+1 1 1
+2 7 1 3 0
+1 6 1
+1 1 1
+2 3 0 6 1
+3 2 0 4 1 3 0
+1 7 1
+1 6 1
+1 1 1
+1 5 1
+3 3 0 2 0 5 1
+1 3 0
+2 3 0 4 1
+2 3 0 6 1
+1 7 1
+2 5 1 2 0
+1 7 1
+2 3 0 6 1
+1 1 1
+1 4 1
+3 3 0 2 0 1 1
+3 1 1 3 0 2 0
+2 3 0 5 1
+3 5 1 2 0 3 0
+3 3 0 2 0 7 1
+2 3 0 1 1
+2 1 1 3 0
+2 7 1 3 0
+2 3 0 2 0
+2 4 0 5 1
+1 5 1
+1
+3
+1 1 0
+1 1 0
+1 1 0
+4
+62
+2 2 0 4 0
+1 4 0
+4 1 1 4 0 2 0 3 0
+2 3 0 2 0
+2 3 0 1 1
+4 4 0 3 0 2 0 1 1
+2 4 0 3 0
+2 4 0 1 1
+1 1 1
+2 3 0 2 0
+2 3 0 1 1
+4 4 0 1 1 3 0 2 0
+1 4 0
+1 3 0
+1 4 0
+1 1 1
+1 1 1
+1 4 0
+1 3 0
+1 4 0
+1 1 1
+1 2 0
+1 1 1
+2 4 0 3 0
+1 3 0
+2 1 1 4 0
+2 1 1 4 0
+4 2 0 4 0 1 1 3 0
+1 4 0
+3 1 1 4 0 2 0
+1 3 0
+2 2 0 3 0
+2 1 1 3 0
+2 3 0 2 0
+3 1 1 2 0 4 0
+2 2 0 4 0
+2 1 1 3 0
+3 3 0 1 1 2 0
+4 3 0 1 1 4 0 2 0
+1 2 0
+1 1 1
+2 4 0 2 0
+2 3 0 4 0
+1 4 0
+4 4 0 3 0 2 0 1 1
+3 1 1 3 0 4 0
+1 3 0
+1 3 0
+1 1 1
+1 4 0
+2 1 1 4 0
+1 1 1
+1 3 0
+1 4 0
+1 4 0
+1 3 0
+3 2 0 4 0 1 1
+1 2 0
+1 1 1
+3 1 1 2 0 4 0
+2 4 0 2 0
+1 1 1
+2
+2
+1 1 1
+1 1 1
+10
+40
+1 5 1
+1 7 1
+3 6 0 8 0 10 0
+1 5 1
+2 6 0 5 1
+1 7 0
+1 9 1
+2 8 0 7 1
+1 9 0
+2 9 1 5 0
+3 2 0 9 1 8 0
+2 2 0 9 1
+1 6 0
+1 5 1
+4 6 0 7 1 3 0 10 0
+3 7 0 9 0 5 0
+1 6 0
+6 2 0 7 1 4 0 10 0 6 0 8 0
+2 9 0 7 0
+5 6 0 9 1 3 0 2 0 4 0
+1 9 1
+6 10 0 1 0 5 1 4 0 3 0 2 0
+2 5 1 8 0
+5 1 0 5 1 3 0 6 0 4 0
+1 5 0
+1 2 0
+4 8 0 5 1 4 0 3 0
+1 9 0
+2 10 0 3 0
+5 4 0 8 0 10 0 3 0 5 1
+8 10 0 3 0 1 0 2 0 7 1 4 0 6 0 8 0
+1 6 0
+4 7 1 2 0 10 0 8 0
+1 5 1
+3 1 0 2 0 7 1
+1 7 1
+1 7 1
+4 5 1 10 0 6 0 4 0
+4 7 1 6 0 1 0 8 0
+2 1 0 7 1
+2
+2
+1 2 1
+1 2 1
+6
+52
+5 5 0 4 0 3 0 2 1 1 0
+4 6 0 1 0 5 0 3 0
+3 3 0 2 1 4 0
+4 6 0 2 1 4 0 5 0
+4 2 1 6 0 1 0 3 0
+2 2 1 5 0
+2 4 0 6 0
+3 6 0 3 0 1 0
+5 4 0 1 0 5 0 6 0 2 1
+1 4 0
+4 6 0 1 0 2 1 4 0
+6 3 0 2 1 6 0 1 0 5 0 4 0
+6 2 1 1 0 5 0 3 0 4 0 6 0
+1 5 0
+6 1 0 2 1 3 0 4 0 5 0 6 0
+1 5 0
+1 3 0
+2 4 0 1 0
+2 2 1 4 0
+2 1 0 2 1
+1 2 1
+2 2 1 6 0
+2 3 0 5 0
+4 2 1 3 0 4 0 6 0
+4 3 0 6 0 4 0 1 0
+6 1 0 2 1 3 0 6 0 4 0 5 0
+3 4 0 6 0 1 0
+5 6 0 4 0 1 0 3 0 2 1
+1 2 1
+1 4 0
+5 6 0 2 1 3 0 1 0 4 0
+2 3 0 1 0
+5 1 0 2 1 6 0 5 0 4 0
+2 4 0 1 0
+2 5 0 3 0
+4 6 0 5 0 4 0 2 1
+6 3 0 1 0 6 0 4 0 2 1 5 0
+2 3 0 4 0
+2 1 0 3 0
+4 2 1 6 0 1 0 4 0
+1 5 0
+2 1 0 5 0
+2 1 0 5 0
+1 2 1
+1 2 1
+2 1 0 5 0
+1 4 0
+4 1 0 4 0 2 1 5 0
+3 6 0 5 0 2 1
+1 6 0
+2 1 0 3 0
+1 6 0
+10
+61
+4 7 0 2 0 6 0 1 0
+1 4 0
+4 8 0 2 0 7 0 5 0
+3 2 0 4 0 5 0
+1 3 1
+2 2 0 1 0
+1 8 0
+1 8 0
+1 2 0
+2 6 0 2 0
+3 6 0 4 0 3 1
+4 8 0 4 0 2 0 5 0
+1 1 0
+1 7 0
+8 6 0 4 0 10 0 2 0 5 0 9 0 1 0 3 1
+3 8 0 7 0 5 0
+1 4 0
+3 2 0 1 0 8 0
+4 4 0 9 0 2 0 8 0
+4 5 0 1 0 3 1 7 0
+9 5 0 10 0 6 0 4 0 2 0 9 0 1 0 7 0 8 0
+3 2 0 3 1 5 0
+7 9 0 5 0 4 0 1 0 8 0 10 0 6 0
+1 9 0
+6 9 0 4 0 6 0 1 0 5 0 2 0
+2 5 0 3 1
+2 1 0 7 0
+7 8 0 3 1 9 0 2 0 10 0 6 0 4 0
+1 5 0
+1 8 0
+5 5 0 6 0 4 0 2 0 1 0
+1 1 0
+5 4 0 5 0 10 0 7 0 6 0
+1 10 0
+7 4 0 3 1 5 0 10 0 6 0 8 0 2 0
+4 10 0 3 1 7 0 4 0
+1 5 0
+1 3 1
+3 8 0 6 0 1 0
+4 3 1 6 0 4 0 10 0
+8 9 0 5 0 2 0 3 1 4 0 7 0 8 0 6 0
+7 2 0 1 0 5 0 8 0 7 0 6 0 9 0
+1 4 0
+3 8 0 10 0 3 1
+4 10 0 2 0 3 1 5 0
+9 3 1 6 0 8 0 4 0 10 0 1 0 7 0 5 0 2 0
+4 1 0 6 0 8 0 4 0
+7 2 0 9 0 7 0 3 1 8 0 5 0 4 0
+2 9 0 1 0
+2 3 1 2 0
+2 6 0 3 1
+3 6 0 1 0 7 0
+1 5 0
+6 6 0 2 0 9 0 3 1 8 0 4 0
+1 3 1
+1 4 0
+7 7 0 3 1 6 0 5 0 9 0 4 0 8 0
+8 8 0 6 0 2 0 1 0 7 0 10 0 4 0 9 0
+10 10 0 2 0 8 0 6 0 3 1 5 0 1 0 7 0 4 0 9 0
+3 3 1 2 0 10 0
+6 3 1 8 0 5 0 1 0 6 0 4 0
+2
+2
+1 1 0
+2 2 0 1 1
+2
+2
+2 2 0 1 0
+1 1 1
+7
+46
+2 5 0 6 0
+3 7 0 6 0 5 0
+2 6 0 2 1
+2 3 0 4 0
+3 5 0 2 1 7 0
+2 2 1 4 0
+1 7 0
+3 4 0 6 0 5 0
+3 1 0 6 0 4 0
+1 6 0
+2 5 0 7 0
+4 7 0 3 0 4 0 1 0
+6 3 0 5 0 1 0 2 1 6 0 4 0
+2 6 0 4 0
+1 2 1
+1 3 0
+2 4 0 7 0
+1 2 1
+3 5 0 3 0 2 1
+3 1 0 4 0 2 1
+2 7 0 4 0
+1 5 0
+1 7 0
+1 1 0
+4 3 0 2 1 7 0 6 0
+1 5 0
+5 6 0 5 0 3 0 4 0 2 1
+3 3 0 4 0 2 1
+3 3 0 1 0 7 0
+4 5 0 2 1 4 0 6 0
+1 4 0
+2 4 0 7 0
+1 2 1
+1 2 1
+4 3 0 7 0 6 0 5 0
+2 5 0 3 0
+1 4 0
+6 7 0 1 0 6 0 4 0 2 1 3 0
+1 5 0
+3 4 0 2 1 7 0
+4 5 0 6 0 4 0 3 0
+5 1 0 4 0 5 0 3 0 2 1
+2 6 0 3 0
+7 3 0 7 0 4 0 5 0 2 1 1 0 6 0
+6 2 1 6 0 7 0 1 0 3 0 5 0
+6 2 1 7 0 5 0 1 0 3 0 6 0
+7
+39
+4 4 0 3 0 5 0 2 1
+3 2 1 4 0 5 0
+1 3 0
+2 5 0 1 1
+2 3 0 6 1
+1 1 1
+1 1 1
+2 3 0 6 1
+2 3 0 1 1
+1 1 1
+2 5 0 7 1
+2 5 0 6 1
+2 7 1 4 0
+2 6 1 5 0
+1 4 0
+2 2 1 6 0
+2 7 1 2 0
+1 4 0
+1 7 1
+2 5 0 1 1
+1 1 1
+1 6 1
+1 6 1
+3 2 1 3 0 4 0
+2 3 0 1 1
+1 7 1
+4 3 0 5 0 4 0 6 1
+2 1 1 3 0
+1 5 0
+4 2 1 5 0 3 0 4 0
+1 2 1
+4 1 1 3 0 4 0 5 0
+1 2 1
+4 3 0 4 0 1 1 5 0
+3 2 1 4 0 3 0
+4 1 1 6 0 2 0 7 0
+3 5 0 3 0 7 1
+2 6 1 5 0
+1 4 0
+7
+70
+3 6 0 3 0 7 0
+6 5 1 1 0 4 0 3 0 2 0 7 0
+1 2 0
+3 5 1 6 0 2 0
+1 2 0
+1 6 0
+3 1 0 5 1 2 0
+1 4 0
+2 6 0 4 0
+3 7 0 2 0 6 0
+3 2 0 4 0 3 0
+3 4 0 5 1 2 0
+2 5 1 1 0
+1 4 0
+4 4 0 5 1 1 0 2 0
+2 1 0 6 0
+3 7 0 1 0 2 0
+5 1 0 7 0 6 0 2 0 3 0
+2 6 0 2 0
+1 3 0
+3 2 0 3 0 7 0
+6 6 0 2 0 4 0 3 0 7 0 1 0
+5 3 0 7 0 2 0 1 0 5 1
+5 4 0 1 0 2 0 3 0 6 0
+1 3 0
+2 4 0 1 0
+1 7 0
+3 1 0 4 0 6 0
+1 5 1
+7 1 0 5 1 4 0 7 0 2 0 6 0 3 0
+2 6 0 2 0
+5 1 0 4 0 3 0 6 0 7 0
+1 7 0
+2 5 1 6 0
+1 3 0
+2 4 0 1 0
+2 6 0 4 0
+1 4 0
+4 5 1 3 0 2 0 6 0
+3 4 0 7 0 3 0
+3 4 0 5 1 7 0
+2 6 0 5 1
+5 6 0 1 0 4 0 3 0 7 0
+1 6 0
+1 3 0
+2 1 0 3 0
+2 6 0 2 0
+2 4 0 3 0
+5 6 0 2 0 4 0 1 0 7 0
+4 2 0 5 1 3 0 6 0
+1 5 1
+3 1 0 4 0 5 1
+6 3 0 5 1 7 0 1 0 6 0 4 0
+2 4 0 1 0
+3 6 0 4 0 7 0
+2 5 1 6 0
+4 1 0 4 0 5 1 3 0
+2 2 0 7 0
+1 2 0
+1 6 0
+1 7 0
+2 7 0 5 1
+1 3 0
+4 4 0 2 0 7 0 3 0
+6 4 0 2 0 6 0 7 0 3 0 1 0
+6 7 0 6 0 5 1 4 0 1 0 3 0
+2 4 0 3 0
+5 1 0 3 0 4 0 6 0 2 0
+1 2 0
+2 3 0 4 0
+5
+3
+1 5 0
+2 1 0 3 0
+1 1 1
+10
+17
+3 5 0 6 1 4 0
+3 3 0 5 0 9 0
+3 3 0 8 1 9 0
+2 7 1 3 0
+1 10 1
+1 7 1
+2 10 1 4 0
+7 2 0 5 0 4 0 1 0 3 0 9 0 8 1
+1 6 1
+1 7 1
+1 10 1
+1 8 1
+1 4 0
+1 8 1
+3 8 1 1 0 5 0
+3 2 0 6 1 9 0
+2 10 1 3 0
+4
+6
+1 4 1
+1 2 0
+2 1 0 4 1
+2 4 1 2 0
+3 2 0 4 1 1 0
+3 1 0 2 0 4 1
+5
+18
+1 3 0
+1 3 0
+3 3 0 2 0 1 1
+1 2 0
+1 1 1
+1 4 0
+1 1 1
+2 5 1 1 0
+1 1 1
+2 5 1 3 0
+1 5 1
+2 2 0 3 0
+1 1 1
+1 5 1
+3 3 0 2 0 1 1
+4 1 1 4 0 3 0 2 0
+1 3 0
+1 2 0
+5
+6
+5 1 0 2 0 3 0 5 0 4 0
+5 4 0 3 0 5 0 1 0 2 0
+5 1 0 5 0 4 0 3 0 2 0
+5 3 0 2 0 1 0 4 0 5 0
+5 4 0 2 0 1 0 5 0 3 0
+5 4 0 2 0 3 0 1 0 5 0
+2
+2
+2 1 0 2 0
+2 2 0 1 0
+5
+21
+3 3 0 2 0 5 1
+1 5 1
+1 1 0
+1 5 1
+2 4 0 3 0
+2 1 0 3 0
+3 2 0 4 0 5 1
+1 3 0
+1 3 0
+3 4 0 1 0 3 0
+1 4 0
+5 2 0 3 0 5 1 1 0 4 0
+1 4 0
+2 3 0 1 0
+2 4 0 5 1
+1 4 0
+1 4 0
+5 2 0 3 0 1 0 4 0 5 1
+3 5 1 2 0 1 0
+1 4 0
+1 3 0
diff --git a/codejam_2008/src/y2008round1a/a.rs b/codejam_2008/src/y2008round1a/a.rs
index 7042ae4..b9da10c 100644
--- a/codejam_2008/src/y2008round1a/a.rs
+++ b/codejam_2008/src/y2008round1a/a.rs
@@ -4,7 +4,7 @@ use std::io::Write;
 
 /*
 Arithmetic
-Proof?
+Proof
 */
 pub fn solve_all_cases()
 {
@@ -49,6 +49,4 @@ fn solve(v1: &mut Vec<i64>, v2: &mut Vec<i64>) -> i64
 
     v1.iter().zip(v2.iter()).map( |(e1,e2)| e1 * e2).sum()
 
-
-
 }
diff --git a/codejam_2008/src/y2008round1a/b.rs b/codejam_2008/src/y2008round1a/b.rs
new file mode 100644
index 0000000..4f79ea8
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/b.rs
@@ -0,0 +1,52 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use bit_vec::BitVec;
+use itertools::Itertools;
+
+/*
+
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round1a",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+
+
+	            let num_flavors = reader.read_int();
+                let num_customers = reader.read_int();
+
+                let cust_data: Vec<Vec<u32>> = (0..num_customers).map(|_| reader.read_num_line()).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    if let Some(ans) = solve(
+                        num_flavors, cust_data.as_slice()
+                    ) {
+                        ans.iter().map(|b| if b { '1' } else {'0'}).join(" ")
+                    } else {
+                        "IMPOSSIBLE".to_string()
+                    }
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(num_flavors: usize, cust_data: &[Vec<u32>]) -> Option<BitVec>
+{
+    None
+}
diff --git a/codejam_2008/src/y2008round1a/mod.rs b/codejam_2008/src/y2008round1a/mod.rs
index 0168964..677af14 100644
--- a/codejam_2008/src/y2008round1a/mod.rs
+++ b/codejam_2008/src/y2008round1a/mod.rs
@@ -1 +1,2 @@
 pub mod a;
+pub mod b;

From b77af1d67d6a7d41f066512984d3fc0bd9778f7b Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 09:41:25 -0300
Subject: [PATCH 034/122] b

---
 codejam_2008/Cargo.lock                       |   1 +
 codejam_2008/Cargo.toml                       |   3 +-
 .../src/y2008round1a/B-large-practice.out     |   5 +
 .../src/y2008round1a/B-small-practice.out     | 100 ++++++++++++++++++
 codejam_2008/src/y2008round1a/b.rs            |  67 +++++++++++-
 5 files changed, 172 insertions(+), 4 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1a/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1a/B-small-practice.out

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index 3eaff40..9f810f9 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -67,6 +67,7 @@ dependencies = [
 name = "codejam_2008"
 version = "0.1.0"
 dependencies = [
+ "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "hungarian 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index bec2ad4..5f615f3 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -11,4 +11,5 @@ itertools = "*"
 # For lower_bound
 superslice = "*"
 hungarian = "1.1.0"
-bit-vec = "*"
\ No newline at end of file
+bit-vec = "*"
+bit-set = "*"
\ No newline at end of file
diff --git a/codejam_2008/src/y2008round1a/B-large-practice.out b/codejam_2008/src/y2008round1a/B-large-practice.out
new file mode 100644
index 0000000..b3395ee
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/B-large-practice.out
@@ -0,0 +1,5 @@
+Case #1: 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 1 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 1 0 0 0 0 0 1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 0 0 0 0 0 0 0 0 0 0 0 0 1 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 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 0 0 0 0 0 0 0 0 0 0 0 1 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 1 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 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 1 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 1 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 1 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 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 1 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 0 0 0 0 0 0 0 0 0 1 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 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 1 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 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
+Case #2: 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
+Case #3: 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 1 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 1 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 1 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #4: 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 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 1 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 1 0 0 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 1 0 1 1 0 0 1 0 1 1 1 0 0 0 0 1 0 0 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 0 1 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 1 1 0 1 0 1 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 1 0 0 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0
+Case #5: IMPOSSIBLE
diff --git a/codejam_2008/src/y2008round1a/B-small-practice.out b/codejam_2008/src/y2008round1a/B-small-practice.out
new file mode 100644
index 0000000..500e2a1
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/B-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0 1 0 0
+Case #2: IMPOSSIBLE
+Case #3: 0 0 0 0 0 0 1 0 0
+Case #4: IMPOSSIBLE
+Case #5: 0 0 0 0 0
+Case #6: 1
+Case #7: 0 1 0
+Case #8: 0 0 0 1 1 1
+Case #9: 0 0
+Case #10: 1 0 1 0 0
+Case #11: 0 0
+Case #12: 0 0
+Case #13: IMPOSSIBLE
+Case #14: IMPOSSIBLE
+Case #15: 0 0
+Case #16: 1 0 1 0 1 0 0 1 0
+Case #17: 1 0
+Case #18: 0 0
+Case #19: 0 0 0 0 1 1 0
+Case #20: 0 0 0 0 1 1 0 1 0
+Case #21: 1 0 0
+Case #22: IMPOSSIBLE
+Case #23: IMPOSSIBLE
+Case #24: 0 0 1 1
+Case #25: 0 0 0 0 1 0 0
+Case #26: IMPOSSIBLE
+Case #27: 0 1
+Case #28: IMPOSSIBLE
+Case #29: 0 0
+Case #30: 1 0 0 0 0
+Case #31: 0 0
+Case #32: 0 0 0 0 0 1
+Case #33: 1 0 1 0 1 1 0 1 1 1
+Case #34: 0 0
+Case #35: 0 0 1 0
+Case #36: 1 0
+Case #37: 0 0 1 1 0 0 0 1 0
+Case #38: IMPOSSIBLE
+Case #39: 0 1 1 0 0 0
+Case #40: 0 1 0
+Case #41: 0 0
+Case #42: 0 0 0 1 0
+Case #43: 1 1
+Case #44: 1 1 1 1 1 1 1 1 1 1
+Case #45: 0 1 0 0
+Case #46: IMPOSSIBLE
+Case #47: 0 0
+Case #48: IMPOSSIBLE
+Case #49: 0 0 1
+Case #50: 0 0 1 0 1
+Case #51: 0 0 1
+Case #52: IMPOSSIBLE
+Case #53: IMPOSSIBLE
+Case #54: 0 0 1 0 0 0 0 0 1
+Case #55: 0 1 0 0 1 0 1 0
+Case #56: 1 0 0
+Case #57: 0 1 1 1 1 1 0 1 1
+Case #58: 0 0 1 0 1 0
+Case #59: 0 0 0 1 0 0 0
+Case #60: 1 0
+Case #61: 0 1
+Case #62: 0 1 0 0 0 0
+Case #63: 1 0 0 0
+Case #64: 0 0 0 0 1 0
+Case #65: IMPOSSIBLE
+Case #66: 0 1 0 1 0
+Case #67: 1 1
+Case #68: 0 0
+Case #69: IMPOSSIBLE
+Case #70: 0 0
+Case #71: 1 0 0 1 0 0 0 0
+Case #72: 1 1
+Case #73: 1 0 0 0 0 0 0 0 0
+Case #74: 1 0 0
+Case #75: 0 0
+Case #76: 1 1 0 0 0 0 1 1 1 1
+Case #77: 0 1 0 1 0 0 0 0 0 1
+Case #78: 1 0 0 1
+Case #79: 0 0 1
+Case #80: 0 0 1 0 0 0 0 1
+Case #81: 1 0 0 1 1 1 1
+Case #82: 0
+Case #83: 1 0 0 0
+Case #84: 1 0
+Case #85: IMPOSSIBLE
+Case #86: 0 1
+Case #87: 0 1 0 0 0 0
+Case #88: 0 0 1 0 0 0 0 0 0 0
+Case #89: 0 0
+Case #90: 1 0
+Case #91: 0 1 0 0 0 0 0
+Case #92: 1 1 0 0 0 1 1
+Case #93: 0 0 0 0 1 0 0
+Case #94: 1 0 0 0 0
+Case #95: 0 0 0 0 0 1 1 1 0 1
+Case #96: 0 0 0 1
+Case #97: 1 0 0 0 1
+Case #98: 0 0 0 0 0
+Case #99: 0 0
+Case #100: 0 0 0 0 1
diff --git a/codejam_2008/src/y2008round1a/b.rs b/codejam_2008/src/y2008round1a/b.rs
index 4f79ea8..1c72e17 100644
--- a/codejam_2008/src/y2008round1a/b.rs
+++ b/codejam_2008/src/y2008round1a/b.rs
@@ -2,6 +2,7 @@ use codejam::util::codejam::run_cases;
 use std::io::Write;
 use bit_vec::BitVec;
 use itertools::Itertools;
+use bit_set::BitSet;
 
 /*
 
@@ -20,7 +21,7 @@ pub fn solve_all_cases()
 	            let num_flavors = reader.read_int();
                 let num_customers = reader.read_int();
 
-                let cust_data: Vec<Vec<u32>> = (0..num_customers).map(|_| reader.read_num_line()).collect();
+                let cust_data: Vec<Vec<usize>> = (0..num_customers).map(|_| reader.read_num_line()).collect();
 
                 if case_no != 3 {
                     // continue;
@@ -46,7 +47,67 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(num_flavors: usize, cust_data: &[Vec<u32>]) -> Option<BitVec>
+fn solve(num_flavors: usize, cust_data: &[Vec<usize>]) -> Option<BitVec>
 {
-    None
+    let mut malted_prefs: Vec<Option<usize>> = vec![None; cust_data.len()];
+    let unmalted_prefs: Vec<BitSet> = cust_data.into_iter().enumerate().map( |(c_idx, v)| {
+        let t = v[0];
+        assert_eq!(t * 2 + 1, v.len());
+        let mut bs = BitSet::with_capacity(t);
+        //make everything 1 based
+        for e in v[1..].chunks_exact(2) {
+            if e[1] == 1 {
+                assert!(malted_prefs[c_idx].is_none());
+                malted_prefs[c_idx] = Some(e[0]-1);
+            } else {
+                assert_eq!(0, e[1]);
+                bs.insert(e[0]-1);
+            }
+
+        }
+        bs
+    }).collect();
+
+
+    let mut unmalted = BitSet::with_capacity(num_flavors);
+
+    //start with everything malted
+    for f in 0..num_flavors {
+        unmalted.insert(f);
+    }
+
+	let mut choice_made = true;
+
+	while choice_made {
+        choice_made = false;
+
+        for (c_idx, unmalted_pref) in unmalted_prefs.iter().enumerate() {
+
+            //Is this customer satisfied with one of the milkshakes?
+            if let Some(mc) = malted_prefs[c_idx] {
+                if !unmalted.contains(mc) {
+                    continue;
+                }
+            }
+
+            if !unmalted.is_disjoint(unmalted_pref) {
+                continue;
+            }
+
+            /*
+			#Find a malted flavor and switch it
+			#If we find one, then since we never switch a malted back,
+			#the customer should no longer be processed
+			*/
+            if let Some(mc) = malted_prefs[c_idx] {
+                assert!(unmalted.remove(mc), "should have been unmalted");
+                choice_made = true;
+                continue;
+            } else {
+                return None;
+            }
+        }
+    }
+
+    Some( (0..num_flavors).map( |f| !unmalted.contains(f)).collect() )
 }

From 16c9f7a87b832e04904f221b9f1773ef0ba99fd8 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 10:22:10 -0300
Subject: [PATCH 035/122] c

---
 codejam_2008/src/main.rs                      |   7 +-
 .../src/y2008round1a/C-large-practice.in      | 101 ++++++++++++++++++
 .../src/y2008round1a/C-large-practice.out     | 100 +++++++++++++++++
 .../src/y2008round1a/C-small-practice.in      |  30 ++++++
 .../src/y2008round1a/C-small-practice.out     |  29 +++++
 codejam_2008/src/y2008round1a/a.rs            |  17 +--
 codejam_2008/src/y2008round1a/b.rs            |  72 ++++++-------
 codejam_2008/src/y2008round1a/c.rs            |  58 ++++++++++
 codejam_2008/src/y2008round1a/mod.rs          |   1 +
 9 files changed, 361 insertions(+), 54 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1a/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1a/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1a/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1a/C-small-practice.out
 create mode 100644 codejam_2008/src/y2008round1a/c.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 6166f3a..3388003 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -49,7 +49,8 @@ pub fn run_y2008_practice_contest()
 
 pub fn run_y2008_round_1a()
 {
-y2008round1a::a::solve_all_cases()
+    y2008round1a::a::solve_all_cases();
+    y2008round1a::b::solve_all_cases()
 }
 
 pub fn run_y2008_round_1b()
@@ -71,8 +72,8 @@ fn main()
 {
     init_log();
 
-    y2008round1a::b::solve_all_cases()
- /*   run_y2008_round_qual();
+    y2008round1a::c::solve_all_cases()
+    /*   run_y2008_round_qual();
     run_y2008_round_practice();
     run_y2008_round_beta();*/
 }
diff --git a/codejam_2008/src/y2008round1a/C-large-practice.in b/codejam_2008/src/y2008round1a/C-large-practice.in
new file mode 100644
index 0000000..59f1516
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/C-large-practice.in
@@ -0,0 +1,101 @@
+100
+910062006
+1449613541
+1999999985
+444322222
+1605814285
+1999999992
+1193741318
+1016518317
+1570752061
+1999999995
+1177572005
+308200077
+800561938
+103
+1999999989
+1376932921
+1535334186
+1000875506
+1999999991
+1184485437
+1155744626
+1809415844
+75225234
+1995422805
+1562234411
+209877672
+276560520
+1999999988
+1064277706
+1225400731
+1109957771
+1894509466
+1011977351
+1191967198
+1365380858
+368818964
+1611433491
+1540548799
+546776723
+205
+203
+1865363233
+1480436753
+1477014138
+330356541
+1073741824
+1999999994
+1123049112
+1065829044
+1317056443
+1284145748
+1260829455
+1329765563
+1661296617
+1023
+1795024971
+1999999984
+1544963801
+936105644
+365921634
+861924427
+955677912
+1230910728
+1051461600
+1073741823
+1514881215
+1999999986
+1999999990
+587767441
+104
+1918517182
+1999999999
+410638565
+32769
+1598846451
+1095316023
+590464207
+204
+1999999993
+1731301533
+1999999983
+1999999996
+1999999981
+1737629019
+105
+1999999982
+2000000000
+903179180
+1813833154
+1736284618
+736875403
+1791276241
+1543660610
+1880802833
+1999999997
+1526692805
+1999999987
+1746961562
+1999999998
+526886908
diff --git a/codejam_2008/src/y2008round1a/C-large-practice.out b/codejam_2008/src/y2008round1a/C-large-practice.out
new file mode 100644
index 0000000..f4f595d
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/C-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 607
+Case #2: 455
+Case #3: 735
+Case #4: 527
+Case #5: 735
+Case #6: 471
+Case #7: 607
+Case #8: 095
+Case #9: 055
+Case #10: 663
+Case #11: 935
+Case #12: 095
+Case #13: 807
+Case #14: 143
+Case #15: 535
+Case #16: 855
+Case #17: 807
+Case #18: 607
+Case #19: 543
+Case #20: 095
+Case #21: 407
+Case #22: 951
+Case #23: 847
+Case #24: 935
+Case #25: 943
+Case #26: 471
+Case #27: 151
+Case #28: 191
+Case #29: 607
+Case #30: 343
+Case #31: 143
+Case #32: 007
+Case #33: 743
+Case #34: 407
+Case #35: 007
+Case #36: 551
+Case #37: 543
+Case #38: 063
+Case #39: 743
+Case #40: 935
+Case #41: 143
+Case #42: 455
+Case #43: 855
+Case #44: 807
+Case #45: 455
+Case #46: 351
+Case #47: 047
+Case #48: 471
+Case #49: 951
+Case #50: 343
+Case #51: 591
+Case #52: 063
+Case #53: 943
+Case #54: 095
+Case #55: 743
+Case #56: 143
+Case #57: 151
+Case #58: 255
+Case #59: 951
+Case #60: 847
+Case #61: 903
+Case #62: 471
+Case #63: 791
+Case #64: 751
+Case #65: 743
+Case #66: 463
+Case #67: 807
+Case #68: 447
+Case #69: 455
+Case #70: 751
+Case #71: 527
+Case #72: 063
+Case #73: 535
+Case #74: 735
+Case #75: 743
+Case #76: 743
+Case #77: 903
+Case #78: 751
+Case #79: 655
+Case #80: 455
+Case #81: 543
+Case #82: 791
+Case #83: 655
+Case #84: 263
+Case #85: 935
+Case #86: 527
+Case #87: 751
+Case #88: 351
+Case #89: 247
+Case #90: 607
+Case #91: 143
+Case #92: 455
+Case #93: 047
+Case #94: 455
+Case #95: 095
+Case #96: 935
+Case #97: 903
+Case #98: 527
+Case #99: 407
+Case #100: 991
diff --git a/codejam_2008/src/y2008round1a/C-small-practice.in b/codejam_2008/src/y2008round1a/C-small-practice.in
new file mode 100644
index 0000000..a231dc5
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/C-small-practice.in
@@ -0,0 +1,30 @@
+29
+5
+12
+7
+4
+2
+22
+13
+27
+25
+6
+24
+30
+8
+3
+10
+18
+29
+23
+20
+26
+16
+21
+14
+19
+11
+17
+15
+28
+9
diff --git a/codejam_2008/src/y2008round1a/C-small-practice.out b/codejam_2008/src/y2008round1a/C-small-practice.out
new file mode 100644
index 0000000..ff66cca
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/C-small-practice.out
@@ -0,0 +1,29 @@
+Case #1: 935
+Case #2: 471
+Case #3: 903
+Case #4: 751
+Case #5: 027
+Case #6: 527
+Case #7: 055
+Case #8: 903
+Case #9: 135
+Case #10: 607
+Case #11: 351
+Case #12: 647
+Case #13: 991
+Case #14: 143
+Case #15: 047
+Case #16: 607
+Case #17: 135
+Case #18: 743
+Case #19: 151
+Case #20: 407
+Case #21: 991
+Case #22: 855
+Case #23: 447
+Case #24: 263
+Case #25: 943
+Case #26: 095
+Case #27: 463
+Case #28: 791
+Case #29: 335
diff --git a/codejam_2008/src/y2008round1a/a.rs b/codejam_2008/src/y2008round1a/a.rs
index b9da10c..1b5de80 100644
--- a/codejam_2008/src/y2008round1a/a.rs
+++ b/codejam_2008/src/y2008round1a/a.rs
@@ -1,7 +1,6 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
 
-
 /*
 Arithmetic
 Proof
@@ -15,8 +14,7 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let _n : usize = reader.read_int();
-
+                let _n: usize = reader.read_int();
 
                 let mut v1 = reader.read_num_line();
                 let mut v2 = reader.read_num_line();
@@ -27,15 +25,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(
-                    buffer,
-                    "Case #{}: {}",
-                    case_no,
-                    solve(
-                        &mut v1, &mut v2
-                    )
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&mut v1, &mut v2)).unwrap();
             }
         },
     );
@@ -47,6 +37,5 @@ fn solve(v1: &mut Vec<i64>, v2: &mut Vec<i64>) -> i64
     v2.sort();
     v2.reverse();
 
-    v1.iter().zip(v2.iter()).map( |(e1,e2)| e1 * e2).sum()
-
+    v1.iter().zip(v2.iter()).map(|(e1, e2)| e1 * e2).sum()
 }
diff --git a/codejam_2008/src/y2008round1a/b.rs b/codejam_2008/src/y2008round1a/b.rs
index 1c72e17..d638ff9 100644
--- a/codejam_2008/src/y2008round1a/b.rs
+++ b/codejam_2008/src/y2008round1a/b.rs
@@ -1,11 +1,11 @@
-use codejam::util::codejam::run_cases;
-use std::io::Write;
+use bit_set::BitSet;
 use bit_vec::BitVec;
+use codejam::util::codejam::run_cases;
 use itertools::Itertools;
-use bit_set::BitSet;
+use std::io::Write;
 
 /*
-
+BitSets & BitVecs
 */
 pub fn solve_all_cases()
 {
@@ -16,12 +16,11 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-
-
-	            let num_flavors = reader.read_int();
+                let num_flavors = reader.read_int();
                 let num_customers = reader.read_int();
 
-                let cust_data: Vec<Vec<usize>> = (0..num_customers).map(|_| reader.read_num_line()).collect();
+                let cust_data: Vec<Vec<usize>> =
+                    (0..num_customers).map(|_| reader.read_num_line()).collect();
 
                 if case_no != 3 {
                     // continue;
@@ -33,10 +32,8 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    if let Some(ans) = solve(
-                        num_flavors, cust_data.as_slice()
-                    ) {
-                        ans.iter().map(|b| if b { '1' } else {'0'}).join(" ")
+                    if let Some(ans) = solve(num_flavors, cust_data.as_slice()) {
+                        ans.iter().map(|b| if b { '1' } else { '0' }).join(" ")
                     } else {
                         "IMPOSSIBLE".to_string()
                     }
@@ -50,24 +47,26 @@ pub fn solve_all_cases()
 fn solve(num_flavors: usize, cust_data: &[Vec<usize>]) -> Option<BitVec>
 {
     let mut malted_prefs: Vec<Option<usize>> = vec![None; cust_data.len()];
-    let unmalted_prefs: Vec<BitSet> = cust_data.into_iter().enumerate().map( |(c_idx, v)| {
-        let t = v[0];
-        assert_eq!(t * 2 + 1, v.len());
-        let mut bs = BitSet::with_capacity(t);
-        //make everything 1 based
-        for e in v[1..].chunks_exact(2) {
-            if e[1] == 1 {
-                assert!(malted_prefs[c_idx].is_none());
-                malted_prefs[c_idx] = Some(e[0]-1);
-            } else {
-                assert_eq!(0, e[1]);
-                bs.insert(e[0]-1);
+    let unmalted_prefs: Vec<BitSet> = cust_data
+        .into_iter()
+        .enumerate()
+        .map(|(c_idx, v)| {
+            let t = v[0];
+            assert_eq!(t * 2 + 1, v.len());
+            let mut bs = BitSet::with_capacity(t);
+            //make everything 1 based
+            for e in v[1..].chunks_exact(2) {
+                if e[1] == 1 {
+                    assert!(malted_prefs[c_idx].is_none());
+                    malted_prefs[c_idx] = Some(e[0] - 1);
+                } else {
+                    assert_eq!(0, e[1]);
+                    bs.insert(e[0] - 1);
+                }
             }
-
-        }
-        bs
-    }).collect();
-
+            bs
+        })
+        .collect();
 
     let mut unmalted = BitSet::with_capacity(num_flavors);
 
@@ -76,13 +75,12 @@ fn solve(num_flavors: usize, cust_data: &[Vec<usize>]) -> Option<BitVec>
         unmalted.insert(f);
     }
 
-	let mut choice_made = true;
+    let mut choice_made = true;
 
-	while choice_made {
+    while choice_made {
         choice_made = false;
 
         for (c_idx, unmalted_pref) in unmalted_prefs.iter().enumerate() {
-
             //Is this customer satisfied with one of the milkshakes?
             if let Some(mc) = malted_prefs[c_idx] {
                 if !unmalted.contains(mc) {
@@ -95,10 +93,10 @@ fn solve(num_flavors: usize, cust_data: &[Vec<usize>]) -> Option<BitVec>
             }
 
             /*
-			#Find a malted flavor and switch it
-			#If we find one, then since we never switch a malted back,
-			#the customer should no longer be processed
-			*/
+            #Find a malted flavor and switch it
+            #If we find one, then since we never switch a malted back,
+            #the customer should no longer be processed
+            */
             if let Some(mc) = malted_prefs[c_idx] {
                 assert!(unmalted.remove(mc), "should have been unmalted");
                 choice_made = true;
@@ -109,5 +107,5 @@ fn solve(num_flavors: usize, cust_data: &[Vec<usize>]) -> Option<BitVec>
         }
     }
 
-    Some( (0..num_flavors).map( |f| !unmalted.contains(f)).collect() )
+    Some((0..num_flavors).map(|f| !unmalted.contains(f)).collect())
 }
diff --git a/codejam_2008/src/y2008round1a/c.rs b/codejam_2008/src/y2008round1a/c.rs
new file mode 100644
index 0000000..3fb4d1b
--- /dev/null
+++ b/codejam_2008/src/y2008round1a/c.rs
@@ -0,0 +1,58 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+
+/*
+Conjugation
+Binomial expansion
+Cycles
+Math
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008round1a",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let n: u64 = reader.read_int();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(n)).unwrap();
+            }
+        },
+    );
+}
+
+fn solve(n: u64) -> u64
+{
+    let mut n = n;
+
+    //initialize to (3 + sqrt(5) ) ^ 0, represented as integer_part * radical_coeff * sqrt(5)
+    let mut integer_part = 1;
+    let mut radical_coeff = 0;
+
+    //17 same as 117, so pattern repeats
+
+    if (n > 117) {
+        n = 17 + (n - 17) % 100;
+    }
+
+    for _ in 0..n {
+        let new_integer_part = 3 * integer_part + 5 * radical_coeff;
+        let new_radical_coeff = integer_part + 3 * radical_coeff;
+
+        integer_part = new_integer_part % 1000;
+        radical_coeff = new_radical_coeff % 1000;
+    }
+
+    //printf("2 * X^n - 1 = %lld\n", 2*integer_part-1);
+    // Xn is actually the first integer greater than αn. Thus we may just focus on computing the last three digits of X.
+    (2 * integer_part - 1) % 1000
+}
diff --git a/codejam_2008/src/y2008round1a/mod.rs b/codejam_2008/src/y2008round1a/mod.rs
index 677af14..4f053df 100644
--- a/codejam_2008/src/y2008round1a/mod.rs
+++ b/codejam_2008/src/y2008round1a/mod.rs
@@ -1,2 +1,3 @@
 pub mod a;
 pub mod b;
+pub mod c;

From 5607d57df6a5bb586ba535ae035487a7c335462a Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 14:20:03 -0300
Subject: [PATCH 036/122] c

---
 codejam_2008/src/main.rs                      |  6 +-
 codejam_2008/src/y2008round1a/c.rs            |  2 +-
 .../src/y2008round1b/A-large-practice.in      | 11 +++
 .../src/y2008round1b/A-small-practice.in      | 11 +++
 .../src/y2008round1b/A-small-practice.out     | 10 +++
 codejam_2008/src/y2008round1b/a.rs            | 85 +++++++++++++++++++
 codejam_2008/src/y2008round1b/mod.rs          |  3 +
 7 files changed, 125 insertions(+), 3 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1b/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1b/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1b/A-small-practice.out
 create mode 100644 codejam_2008/src/y2008round1b/a.rs
 create mode 100644 codejam_2008/src/y2008round1b/mod.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 3388003..37ce1bc 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -4,6 +4,7 @@ mod y2008beta;
 mod y2008practice;
 mod y2008qual;
 mod y2008round1a;
+mod y2008round1b;
 
 extern crate codejam;
 
@@ -50,7 +51,8 @@ pub fn run_y2008_practice_contest()
 pub fn run_y2008_round_1a()
 {
     y2008round1a::a::solve_all_cases();
-    y2008round1a::b::solve_all_cases()
+    y2008round1a::b::solve_all_cases();
+    y2008round1a::c::solve_all_cases();
 }
 
 pub fn run_y2008_round_1b()
@@ -72,7 +74,7 @@ fn main()
 {
     init_log();
 
-    y2008round1a::c::solve_all_cases()
+    y2008round1b::a::solve_all_cases()
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
     run_y2008_round_beta();*/
diff --git a/codejam_2008/src/y2008round1a/c.rs b/codejam_2008/src/y2008round1a/c.rs
index 3fb4d1b..cca3144 100644
--- a/codejam_2008/src/y2008round1a/c.rs
+++ b/codejam_2008/src/y2008round1a/c.rs
@@ -40,7 +40,7 @@ fn solve(n: u64) -> u64
 
     //17 same as 117, so pattern repeats
 
-    if (n > 117) {
+    if n > 117 {
         n = 17 + (n - 17) % 100;
     }
 
diff --git a/codejam_2008/src/y2008round1b/A-large-practice.in b/codejam_2008/src/y2008round1b/A-large-practice.in
new file mode 100644
index 0000000..b0f0cc7
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/A-large-practice.in
@@ -0,0 +1,11 @@
+10
+30123 10 6 6 9 66778418 106445782 123456789
+50000 783829464 786868124 837609671 717461242 519483675 665188817 1000000000
+20 548484 605575 606312 455648 195789 319535 654321
+4 10 7 1 2 0 1 20
+49999 1 1 1 1 999999 0 1000000
+100000 1 1 1 1 999999998 0 999999999
+100000 1 1 1 9999 0 0 100000000
+30012 11 11 4 9 777755284 19270656 1000000000
+49999 84202831 79348670 97525962 77032063 87780295 64754586 100000123
+6 2 1 2 1 1 2 11
diff --git a/codejam_2008/src/y2008round1b/A-small-practice.in b/codejam_2008/src/y2008round1b/A-small-practice.in
new file mode 100644
index 0000000..3793d4e
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/A-small-practice.in
@@ -0,0 +1,11 @@
+10
+100 1 1 1 99 0 0 100
+99 690 831 972 863 735 341 1000
+30 10 11 1 2 77 31 100
+10 1 1 1 1 9 0 10
+30 1 8 1 7 87 20 100
+6 2 1 2 1 1 2 11
+10 1 1 1 1 999998 0 999999
+20 993 697 870 694 380 339 1000
+100 670462 754917 817851 801885 787243 210931 1000000
+4 10 7 1 2 0 1 20
diff --git a/codejam_2008/src/y2008round1b/A-small-practice.out b/codejam_2008/src/y2008round1b/A-small-practice.out
new file mode 100644
index 0000000..c8cc942
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/A-small-practice.out
@@ -0,0 +1,10 @@
+Case #1: 160117
+Case #2: 156155
+Case #3: 3954
+Case #4: 112
+Case #5: 881
+Case #6: 9
+Case #7: 160
+Case #8: 801
+Case #9: 31152
+Case #10: 5
diff --git a/codejam_2008/src/y2008round1b/a.rs b/codejam_2008/src/y2008round1b/a.rs
new file mode 100644
index 0000000..98067fe
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/a.rs
@@ -0,0 +1,85 @@
+use codejam::util::codejam::run_cases;
+use codejam::util::vector_2d::Vector2d;
+use std::io::Write;
+
+/*
+Arithmetic
+Proof
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round1b",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                // n, A, B, C, D, x0, y0 and M
+
+                let input_nums = reader.read_num_line();
+                let n = input_nums[0] as usize;
+                let a = input_nums[1];
+                let b = input_nums[2];
+                let c = input_nums[3];
+                let d = input_nums[4];
+                let x0 = input_nums[5];
+                let y0 = input_nums[6];
+                let m = input_nums[7];
+
+                let mut x: u64 = x0;
+                let mut y: u64 = y0;
+                let mut trees = Vec::new();
+                trees.push(Vector2d::with_val(x, y));
+
+                for i in 1..n {
+                    x = (a * x + b) % m;
+                    y = (c * y + d) % m;
+                    trees.push(Vector2d::with_val(x, y));
+                }
+
+                assert_eq!(trees.len(), n);
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(trees.as_slice())).unwrap();
+            }
+        },
+    );
+}
+
+fn solve(trees: &[Vector2d<u64>]) -> u64
+{
+    let mut buckets = [0u64; 9];
+
+    for t in trees.into_iter() {
+        buckets[((t.r() % 3) * 3 + t.c() % 3) as usize] += 1;
+    }
+
+    let mut ret = 0;
+
+    // The first case.
+    for bi in buckets.iter().filter( |bi| **bi > 2) {
+        // We use the formula for n choose 3 so that,
+        // we don't use the same point twice or count
+        // the same triangle more than once.
+        ret += bi * (bi - 1) * (bi - 2) / 6;
+    }
+    // The third case.
+    for (i, bi) in buckets.iter().enumerate() {
+        for (j, bj) in buckets.iter().enumerate().skip(i) {
+            for (k, bk) in buckets.iter().enumerate().skip(j) {
+                if (((i / 3) + (j / 3) + (k / 3)) % 3 == 0)
+                    && ((i % 3) + (j % 3) + (k % 3)) % 3 == 0
+                {
+                    ret += bi * bj * bk;
+                }
+            }
+        }
+    }
+    ret
+}
diff --git a/codejam_2008/src/y2008round1b/mod.rs b/codejam_2008/src/y2008round1b/mod.rs
new file mode 100644
index 0000000..4f053df
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/mod.rs
@@ -0,0 +1,3 @@
+pub mod a;
+pub mod b;
+pub mod c;

From 1e7c38e166f057fb5fbe215c2008a99c3554c011 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 15:36:49 -0300
Subject: [PATCH 037/122] a

---
 .../src/y2008round1b/A-large-practice.out     | 10 ++++++++++
 .../src/y2008round1b/A-small-practice.out     | 20 +++++++++----------
 codejam_2008/src/y2008round1b/a.rs            |  4 ++--
 3 files changed, 22 insertions(+), 12 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1b/A-large-practice.out

diff --git a/codejam_2008/src/y2008round1b/A-large-practice.out b/codejam_2008/src/y2008round1b/A-large-practice.out
new file mode 100644
index 0000000..3da49b7
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/A-large-practice.out
@@ -0,0 +1,10 @@
+Case #1: 4554669905240
+Case #2: 2314676702925
+Case #3: 969
+Case #4: 1
+Case #5: 6943194527776
+Case #6: 55553888922222
+Case #7: 18554889032160
+Case #8: 500550245867
+Case #9: 2314538164950
+Case #10: 3
diff --git a/codejam_2008/src/y2008round1b/A-small-practice.out b/codejam_2008/src/y2008round1b/A-small-practice.out
index c8cc942..e6c702e 100644
--- a/codejam_2008/src/y2008round1b/A-small-practice.out
+++ b/codejam_2008/src/y2008round1b/A-small-practice.out
@@ -1,10 +1,10 @@
-Case #1: 160117
-Case #2: 156155
-Case #3: 3954
-Case #4: 112
-Case #5: 881
-Case #6: 9
-Case #7: 160
-Case #8: 801
-Case #9: 31152
-Case #10: 5
+Case #1: 52305
+Case #2: 50720
+Case #3: 1224
+Case #4: 30
+Case #5: 449
+Case #6: 3
+Case #7: 42
+Case #8: 241
+Case #9: 17996
+Case #10: 1
diff --git a/codejam_2008/src/y2008round1b/a.rs b/codejam_2008/src/y2008round1b/a.rs
index 98067fe..2c980d0 100644
--- a/codejam_2008/src/y2008round1b/a.rs
+++ b/codejam_2008/src/y2008round1b/a.rs
@@ -71,8 +71,8 @@ fn solve(trees: &[Vector2d<u64>]) -> u64
     }
     // The third case.
     for (i, bi) in buckets.iter().enumerate() {
-        for (j, bj) in buckets.iter().enumerate().skip(i) {
-            for (k, bk) in buckets.iter().enumerate().skip(j) {
+        for (j, bj) in buckets.iter().enumerate().skip(i+1) {
+            for (k, bk) in buckets.iter().enumerate().skip(j+1) {
                 if (((i / 3) + (j / 3) + (k / 3)) % 3 == 0)
                     && ((i % 3) + (j % 3) + (k % 3)) % 3 == 0
                 {

From 66c073a2cc4e55832f263683ee88883d9f607107 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 16:14:45 -0300
Subject: [PATCH 038/122] b

---
 codejam_2008/src/main.rs                      |   4 +-
 .../src/y2008round1b/B-large-practice.in      | 100 ++++++++++++++++++
 .../src/y2008round1b/B-large-practice.out     |  99 +++++++++++++++++
 .../src/y2008round1b/B-small-practice.in      |  10 ++
 .../src/y2008round1b/B-small-practice.out     |   9 ++
 codejam_2008/src/y2008round1b/a.rs            |  10 +-
 codejam_2008/src/y2008round1b/b.rs            |  74 +++++++++++++
 7 files changed, 300 insertions(+), 6 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1b/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1b/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1b/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1b/B-small-practice.out
 create mode 100644 codejam_2008/src/y2008round1b/b.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 37ce1bc..b46e711 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -57,7 +57,7 @@ pub fn run_y2008_round_1a()
 
 pub fn run_y2008_round_1b()
 {
-
+    y2008round1b::a::solve_all_cases()
 }
 
 pub fn run_y2008_round_1c()
@@ -74,7 +74,7 @@ fn main()
 {
     init_log();
 
-    y2008round1b::a::solve_all_cases()
+    y2008round1b::b::solve_all_cases()
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
     run_y2008_round_beta();*/
diff --git a/codejam_2008/src/y2008round1b/B-large-practice.in b/codejam_2008/src/y2008round1b/B-large-practice.in
new file mode 100644
index 0000000..17cc700
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/B-large-practice.in
@@ -0,0 +1,100 @@
+99
+104365208989 104365835084 6
+206822137620 206823061341 6
+527342392758 527343191148 6
+10 20 5
+640664958341 640665958341 552301
+502771948608 502772724890 2
+23855656074 23856621666 3
+807451002671 807451862760 9
+321833351880 321834191688 4
+774400955878 774401825460 278190
+574645583429 574646560895 394315
+886454347598 886455315147 6
+788821319895 788822136136 551158
+184528795505 184529792323 431769
+701656222539 701656941059 6
+190533110694 190534097381 5
+845145070921 845145815135 4
+538527249075 538528248034 9
+670285762738 670286205409 7
+136543463842 136544444070 812398
+758341507360 758342424203 4
+56627459783 56628319437 10770
+944735347891 944736157504 4
+811031347156 811032069991 9
+685013630741 685014529753 961357
+201010392657 201011271908 7
+578165315458 578166236221 4
+482636701496 482637538288 789145
+838165139288 838166123149 7
+437644321431 437644899932 394332
+449682471889 449683347201 997609
+833197330950 833198263135 630259
+530005582776 530006551492 831936
+443494211391 443495204304 5
+12661086868 12661738982 6
+936890525338 936891512478 5
+999999000000 1000000000000 1000000
+206487816351 206488571969 5
+136659854097 136660729935 432838
+80168587895 80169440708 398051
+717266554850 717267309230 5
+38017281985 38017583240 6
+126866133173 126867065547 840018
+35358 35358 35358
+743526520981 743527178765 9
+146893663174 146894544453 862114
+776003566109 776004551832 8
+664659720418 664660609101 8
+368163457761 368164224898 6
+452723989502 452724940818 805144
+133664846589 133665794066 5
+865034490643 865035194046 8
+26395838602 26396703245 3
+1 1000000 999999
+192100 192101 2
+329990787132 329991728115 3
+664745427052 664746323050 6
+1 1000000 127
+709247365709 709248330914 9
+119723 119723 2
+125976515925 125977499963 3
+411779106591 411779810499 5
+999999000000 1000000000000 126
+869113197456 869113849123 3
+240302764751 240303638361 356312
+747377 747378 2
+876765 876765 2
+135031051975 135031809153 6
+2 10937 10937
+361692753547 361693612648 106385
+859078132575 859079018140 928031
+999999000000 1000000000000 2
+786749817340 786750673562 49700
+10585884160 10586875158 4
+229112605960 229113542676 2
+951458404619 951459360369 2
+137318811686 137319763214 575581
+412622898361 412623331180 8
+1 1000000 2
+556430191845 556431116261 122846
+494578915950 494579822896 6
+32890327876 32891008684 5
+72573253344 72573890958 4
+415123411536 415124291894 3
+64997530349 64998453080 487716
+529282140283 529282863356 5
+796207125487 796207847668 2
+145353750346 145354747006 947123
+659460941350 659461941186 2
+510642703264 510643670870 974562
+97309080736 97310059743 512823
+960785023882 960785835931 8
+28592384025 28593054056 7
+691242939764 691243492380 4
+392899062085 392900044356 6
+135015293740 135016104418 9
+10 20 3
+444771017660 444772008966 9
+1 1000000 1000000
diff --git a/codejam_2008/src/y2008round1b/B-large-practice.out b/codejam_2008/src/y2008round1b/B-large-practice.out
new file mode 100644
index 0000000..f8fff21
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/B-large-practice.out
@@ -0,0 +1,99 @@
+Case #1: 189963
+Case #2: 280431
+Case #3: 242423
+Case #4: 9
+Case #5: 1000001
+Case #6: 62790
+Case #7: 156217
+Case #8: 304610
+Case #9: 203904
+Case #10: 869583
+Case #11: 977467
+Case #12: 293511
+Case #13: 816242
+Case #14: 996819
+Case #15: 218046
+Case #16: 239396
+Case #17: 180754
+Case #18: 353909
+Case #19: 134478
+Case #20: 980229
+Case #21: 222623
+Case #22: 859655
+Case #23: 196582
+Case #24: 256053
+Case #25: 899013
+Case #26: 266864
+Case #27: 223604
+Case #28: 836793
+Case #29: 298738
+Case #30: 578502
+Case #31: 875313
+Case #32: 932186
+Case #33: 968717
+Case #34: 241184
+Case #35: 198394
+Case #36: 239804
+Case #37: 1000001
+Case #38: 183209
+Case #39: 875839
+Case #40: 852814
+Case #41: 183213
+Case #42: 91649
+Case #43: 932375
+Case #44: 1
+Case #45: 232976
+Case #46: 881280
+Case #47: 349192
+Case #48: 314803
+Case #49: 232790
+Case #50: 951317
+Case #51: 230083
+Case #52: 249212
+Case #53: 139981
+Case #54: 1000000
+Case #55: 2
+Case #56: 152344
+Case #57: 271846
+Case #58: 707105
+Case #59: 341828
+Case #60: 1
+Case #61: 159387
+Case #62: 170811
+Case #63: 705383
+Case #64: 105497
+Case #65: 873611
+Case #66: 2
+Case #67: 1
+Case #68: 229848
+Case #69: 10936
+Case #70: 859102
+Case #71: 885566
+Case #72: 81078
+Case #73: 856223
+Case #74: 241163
+Case #75: 75742
+Case #76: 77341
+Case #77: 951529
+Case #78: 153220
+Case #79: 78332
+Case #80: 924417
+Case #81: 275116
+Case #82: 165326
+Case #83: 154829
+Case #84: 142412
+Case #85: 922732
+Case #86: 175561
+Case #87: 58397
+Case #88: 996661
+Case #89: 80881
+Case #90: 967607
+Case #91: 979008
+Case #92: 287530
+Case #93: 203604
+Case #94: 134285
+Case #95: 298306
+Case #96: 287109
+Case #97: 7
+Case #98: 350921
+Case #99: 1000000
diff --git a/codejam_2008/src/y2008round1b/B-small-practice.in b/codejam_2008/src/y2008round1b/B-small-practice.in
new file mode 100644
index 0000000..be29ae8
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/B-small-practice.in
@@ -0,0 +1,10 @@
+9
+365 952 5
+330 990 502
+10 20 5
+765 993 4
+591 1000 428
+1 1000 2
+464 1000 4
+10 20 3
+61 994 8
diff --git a/codejam_2008/src/y2008round1b/B-small-practice.out b/codejam_2008/src/y2008round1b/B-small-practice.out
new file mode 100644
index 0000000..b07d7fb
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/B-small-practice.out
@@ -0,0 +1,9 @@
+Case #1: 129
+Case #2: 661
+Case #3: 9
+Case #4: 82
+Case #5: 410
+Case #6: 75
+Case #7: 131
+Case #8: 7
+Case #9: 250
diff --git a/codejam_2008/src/y2008round1b/a.rs b/codejam_2008/src/y2008round1b/a.rs
index 2c980d0..9faf69e 100644
--- a/codejam_2008/src/y2008round1b/a.rs
+++ b/codejam_2008/src/y2008round1b/a.rs
@@ -32,7 +32,7 @@ pub fn solve_all_cases()
                 let mut trees = Vec::new();
                 trees.push(Vector2d::with_val(x, y));
 
-                for i in 1..n {
+                for _i in 1..n {
                     x = (a * x + b) % m;
                     y = (c * y + d) % m;
                     trees.push(Vector2d::with_val(x, y));
@@ -63,7 +63,7 @@ fn solve(trees: &[Vector2d<u64>]) -> u64
     let mut ret = 0;
 
     // The first case.
-    for bi in buckets.iter().filter( |bi| **bi > 2) {
+    for bi in buckets.iter().filter(|bi| **bi > 2) {
         // We use the formula for n choose 3 so that,
         // we don't use the same point twice or count
         // the same triangle more than once.
@@ -71,9 +71,11 @@ fn solve(trees: &[Vector2d<u64>]) -> u64
     }
     // The third case.
     for (i, bi) in buckets.iter().enumerate() {
-        for (j, bj) in buckets.iter().enumerate().skip(i+1) {
-            for (k, bk) in buckets.iter().enumerate().skip(j+1) {
+        for (j, bj) in buckets.iter().enumerate().skip(i + 1) {
+            for (k, bk) in buckets.iter().enumerate().skip(j + 1) {
+                //Row sum must be % 3 == 0 to have center be an integer
                 if (((i / 3) + (j / 3) + (k / 3)) % 3 == 0)
+                    //col sum must be %3 == 0 to have center be an integer
                     && ((i % 3) + (j % 3) + (k % 3)) % 3 == 0
                 {
                     ret += bi * bj * bk;
diff --git a/codejam_2008/src/y2008round1b/b.rs b/codejam_2008/src/y2008round1b/b.rs
new file mode 100644
index 0000000..f2b3998
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/b.rs
@@ -0,0 +1,74 @@
+use bit_set::BitSet;
+use bit_vec::BitVec;
+use codejam::algo::graph::disjointset::DisjointSet;
+use codejam::algo::prime::sieve::SieveOfAtkin;
+use codejam::util::codejam::run_cases;
+use itertools::Itertools;
+use std::io::Write;
+
+/*
+BitSets & BitVecs
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round1b",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            let mut sieve = SieveOfAtkin::new(1_000);
+            println!("Starting sieve");
+            sieve.run();
+            let primes: Vec<u64> = sieve.get_results_vec();
+            println!("Finished sieve");
+
+            for case_no in 1..=t {
+                let (a, b, p) = reader.read_tuple_3();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(a, b, p, primes.as_slice())
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(a: u64, b: u64, p_lower_bound: u64, primes: &[u64]) -> usize
+{
+    //First step, find  P <= primes <= interval
+    let lower_bound_primes = p_lower_bound;
+    let upper_bound_primes = b - a;
+
+    let interval_size = (b - a + 1) as usize;
+
+    let mut ds = DisjointSet::new(interval_size);
+
+    for prime in primes.iter().filter(|p| **p >= p_lower_bound) {
+        let a_mod_prime = a % prime;
+        let interval_p = if a_mod_prime == 0 {
+            a
+        } else {
+            a + prime - a_mod_prime
+        };
+
+        //printf("First hit in interval %lld\n", interval_p);
+
+        let set_to_merge = interval_p - a;
+
+        for i in (interval_p - a + prime..interval_size as u64).step_by(*prime as usize) {
+            ds.merge_sets(i as usize, set_to_merge as usize);
+        }
+    }
+    ds.number_of_sets()
+}

From 07926355dd9859b21d49170db6d6ed88d9b3a8a7 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 16:16:03 -0300
Subject: [PATCH 039/122] b

---
 .../src/y2008round1b/B-large-practice.out     | 120 +++++++++---------
 codejam_2008/src/y2008round1b/b.rs            |   9 +-
 2 files changed, 64 insertions(+), 65 deletions(-)

diff --git a/codejam_2008/src/y2008round1b/B-large-practice.out b/codejam_2008/src/y2008round1b/B-large-practice.out
index f8fff21..1865d62 100644
--- a/codejam_2008/src/y2008round1b/B-large-practice.out
+++ b/codejam_2008/src/y2008round1b/B-large-practice.out
@@ -1,99 +1,99 @@
-Case #1: 189963
-Case #2: 280431
-Case #3: 242423
+Case #1: 143109
+Case #2: 211935
+Case #3: 183682
 Case #4: 9
 Case #5: 1000001
-Case #6: 62790
-Case #7: 156217
-Case #8: 304610
-Case #9: 203904
+Case #6: 47677
+Case #7: 117627
+Case #8: 230008
+Case #9: 154435
 Case #10: 869583
 Case #11: 977467
-Case #12: 293511
+Case #12: 222007
 Case #13: 816242
 Case #14: 996819
-Case #15: 218046
-Case #16: 239396
-Case #17: 180754
-Case #18: 353909
-Case #19: 134478
+Case #15: 164997
+Case #16: 181239
+Case #17: 136817
+Case #18: 267553
+Case #19: 101760
 Case #20: 980229
-Case #21: 222623
+Case #21: 168669
 Case #22: 859655
-Case #23: 196582
-Case #24: 256053
+Case #23: 148918
+Case #24: 193761
 Case #25: 899013
-Case #26: 266864
-Case #27: 223604
+Case #26: 201541
+Case #27: 169521
 Case #28: 836793
-Case #29: 298738
+Case #29: 226210
 Case #30: 578502
 Case #31: 875313
 Case #32: 932186
 Case #33: 968717
-Case #34: 241184
-Case #35: 198394
-Case #36: 239804
+Case #34: 182791
+Case #35: 146253
+Case #36: 181820
 Case #37: 1000001
-Case #38: 183209
+Case #38: 138492
 Case #39: 875839
 Case #40: 852814
-Case #41: 183213
-Case #42: 91649
+Case #41: 138873
+Case #42: 68530
 Case #43: 932375
 Case #44: 1
-Case #45: 232976
+Case #45: 176135
 Case #46: 881280
-Case #47: 349192
-Case #48: 314803
-Case #49: 232790
+Case #47: 264165
+Case #48: 237974
+Case #49: 176142
 Case #50: 951317
-Case #51: 230083
-Case #52: 249212
-Case #53: 139981
+Case #51: 173914
+Case #52: 188482
+Case #53: 105424
 Case #54: 1000000
 Case #55: 2
-Case #56: 152344
-Case #57: 271846
-Case #58: 707105
-Case #59: 341828
+Case #56: 115620
+Case #57: 205758
+Case #58: 462867
+Case #59: 258566
 Case #60: 1
-Case #61: 159387
-Case #62: 170811
-Case #63: 705383
-Case #64: 105497
+Case #61: 120856
+Case #62: 129498
+Case #63: 528742
+Case #64: 79828
 Case #65: 873611
 Case #66: 2
 Case #67: 1
-Case #68: 229848
+Case #68: 173267
 Case #69: 10936
 Case #70: 859102
 Case #71: 885566
-Case #72: 81078
+Case #72: 61374
 Case #73: 856223
-Case #74: 241163
-Case #75: 75742
-Case #76: 77341
+Case #74: 178407
+Case #75: 57515
+Case #76: 58505
 Case #77: 951529
-Case #78: 153220
-Case #79: 78332
+Case #78: 115657
+Case #79: 77271
 Case #80: 924417
-Case #81: 275116
-Case #82: 165326
-Case #83: 154829
-Case #84: 142412
+Case #81: 208219
+Case #82: 123737
+Case #83: 116566
+Case #84: 107928
 Case #85: 922732
-Case #86: 175561
-Case #87: 58397
+Case #86: 133044
+Case #87: 44101
 Case #88: 996661
-Case #89: 80881
+Case #89: 61224
 Case #90: 967607
 Case #91: 979008
-Case #92: 287530
-Case #93: 203604
-Case #94: 134285
-Case #95: 298306
-Case #96: 287109
+Case #92: 217579
+Case #93: 151505
+Case #94: 101841
+Case #95: 225459
+Case #96: 215801
 Case #97: 7
-Case #98: 350921
+Case #98: 264793
 Case #99: 1000000
diff --git a/codejam_2008/src/y2008round1b/b.rs b/codejam_2008/src/y2008round1b/b.rs
index f2b3998..eb6bef7 100644
--- a/codejam_2008/src/y2008round1b/b.rs
+++ b/codejam_2008/src/y2008round1b/b.rs
@@ -1,13 +1,12 @@
-use bit_set::BitSet;
-use bit_vec::BitVec;
 use codejam::algo::graph::disjointset::DisjointSet;
 use codejam::algo::prime::sieve::SieveOfAtkin;
 use codejam::util::codejam::run_cases;
-use itertools::Itertools;
+
 use std::io::Write;
 
 /*
-BitSets & BitVecs
+Disjoint set
+Primes sieve
 */
 pub fn solve_all_cases()
 {
@@ -17,7 +16,7 @@ pub fn solve_all_cases()
         |reader, buffer| {
             let t = reader.read_int();
 
-            let mut sieve = SieveOfAtkin::new(1_000);
+            let mut sieve = SieveOfAtkin::new(100_000);
             println!("Starting sieve");
             sieve.run();
             let primes: Vec<u64> = sieve.get_results_vec();

From 21576abedb136b347962fb378693a5515043d721 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 16:24:34 -0300
Subject: [PATCH 040/122] b

---
 codejam_2008/Cargo.lock                       |  54 ++++++
 codejam_2008/Cargo.toml                       |   3 +-
 .../src/y2008round1b/B-large-practice.out     | 168 +++++++++---------
 codejam_2008/src/y2008round1b/b.rs            |  18 +-
 4 files changed, 148 insertions(+), 95 deletions(-)

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index 9f810f9..51a567c 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -72,6 +72,7 @@ dependencies = [
  "hungarian 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "rust-algorithm-problems 0.1.0",
  "superslice 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -283,6 +284,48 @@ name = "permutohedron"
 version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "primal"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "primal-check 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "primal-estimate 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "primal-sieve 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "primal-bit"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "primal-check"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "primal-estimate"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "primal-sieve"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "primal-bit 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "primal-estimate 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "rand"
 version = "0.6.5"
@@ -446,6 +489,11 @@ name = "semver-parser"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "smallvec"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "superslice"
 version = "1.0.0"
@@ -526,6 +574,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
 "checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba"
 "checksum permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c"
+"checksum primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0e31b86efadeaeb1235452171a66689682783149a6249ff334a2c5d8218d00a4"
+"checksum primal-bit 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "686a64e2f50194c64942992af5799e6b6e8775b8f88c607d72ed0a2fd58b9b21"
+"checksum primal-check 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8e65f96c0a171f887198c274392c99a116ef65aa7f53f3b6d4902f493965c2d1"
+"checksum primal-estimate 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "56ea4531dde757b56906493c8604641da14607bf9cdaa80fb9c9cabd2429f8d5"
+"checksum primal-sieve 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "da2d6ed369bb4b0273aeeb43f07c105c0117717cbae827b20719438eb2eb798c"
 "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
 "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
 "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
@@ -542,6 +595,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
 "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+"checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be"
 "checksum superslice 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab16ced94dbd8a46c82fd81e3ed9a8727dac2977ea869d217bcc4ea1f122e81f"
 "checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
 "checksum try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e282c6497867d439f3454cebee548f5961d2787c72c1b7b96481d7f0a3e5bc0"
diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index 5f615f3..2ea91c1 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -12,4 +12,5 @@ itertools = "*"
 superslice = "*"
 hungarian = "1.1.0"
 bit-vec = "*"
-bit-set = "*"
\ No newline at end of file
+bit-set = "*"
+primal = "*"
\ No newline at end of file
diff --git a/codejam_2008/src/y2008round1b/B-large-practice.out b/codejam_2008/src/y2008round1b/B-large-practice.out
index 1865d62..d716acc 100644
--- a/codejam_2008/src/y2008round1b/B-large-practice.out
+++ b/codejam_2008/src/y2008round1b/B-large-practice.out
@@ -1,99 +1,99 @@
-Case #1: 143109
-Case #2: 211935
-Case #3: 183682
+Case #1: 99320
+Case #2: 143012
+Case #3: 120091
 Case #4: 9
-Case #5: 1000001
-Case #6: 47677
-Case #7: 117627
-Case #8: 230008
-Case #9: 154435
-Case #10: 869583
-Case #11: 977467
-Case #12: 222007
-Case #13: 816242
-Case #14: 996819
-Case #15: 164997
-Case #16: 181239
-Case #17: 136817
-Case #18: 267553
-Case #19: 101760
-Case #20: 980229
-Case #21: 168669
-Case #22: 859655
-Case #23: 148918
-Case #24: 193761
+Case #5: 989173
+Case #6: 29828
+Case #7: 83386
+Case #8: 150242
+Case #9: 100267
+Case #10: 838823
+Case #11: 954490
+Case #12: 142402
+Case #13: 812052
+Case #14: 976572
+Case #15: 107916
+Case #16: 120396
+Case #17: 87695
+Case #18: 176132
+Case #19: 69114
+Case #20: 979024
+Case #21: 107011
+Case #22: 616807
+Case #23: 95117
+Case #24: 128056
 Case #25: 899013
-Case #26: 201541
-Case #27: 169521
-Case #28: 836793
-Case #29: 226210
-Case #30: 578502
+Case #26: 135869
+Case #27: 108261
+Case #28: 836701
+Case #29: 145429
+Case #30: 575653
 Case #31: 875313
-Case #32: 932186
-Case #33: 968717
-Case #34: 182791
-Case #35: 146253
-Case #36: 181820
+Case #32: 927535
+Case #33: 967908
+Case #34: 117057
+Case #35: 113850
+Case #36: 114710
 Case #37: 1000001
-Case #38: 138492
-Case #39: 875839
-Case #40: 852814
-Case #41: 138873
-Case #42: 68530
-Case #43: 932375
+Case #38: 91409
+Case #39: 862611
+Case #40: 838004
+Case #41: 89541
+Case #42: 50395
+Case #43: 932013
 Case #44: 1
-Case #45: 176135
-Case #46: 881280
-Case #47: 264165
-Case #48: 237974
-Case #49: 176142
-Case #50: 951317
-Case #51: 173914
-Case #52: 188482
-Case #53: 105424
+Case #45: 117088
+Case #46: 881264
+Case #47: 172040
+Case #48: 156169
+Case #49: 116371
+Case #50: 950397
+Case #51: 117195
+Case #52: 124370
+Case #53: 74335
 Case #54: 1000000
 Case #55: 2
-Case #56: 115620
-Case #57: 205758
-Case #58: 462867
-Case #59: 258566
+Case #56: 73066
+Case #57: 133266
+Case #58: 168879
+Case #59: 168839
 Case #60: 1
-Case #61: 120856
-Case #62: 129498
-Case #63: 528742
-Case #64: 79828
-Case #65: 873611
+Case #61: 79269
+Case #62: 84034
+Case #63: 376657
+Case #64: 51895
+Case #65: 853281
 Case #66: 2
 Case #67: 1
-Case #68: 173267
+Case #68: 119307
 Case #69: 10936
-Case #70: 859102
+Case #70: 775093
 Case #71: 885566
-Case #72: 61374
-Case #73: 856223
-Case #74: 178407
-Case #75: 57515
-Case #76: 58505
-Case #77: 951529
-Case #78: 115657
-Case #79: 77271
-Case #80: 924417
-Case #81: 208219
-Case #82: 123737
-Case #83: 116566
-Case #84: 107928
-Case #85: 922732
-Case #86: 133044
-Case #87: 44101
-Case #88: 996661
-Case #89: 61224
+Case #72: 37964
+Case #73: 719345
+Case #74: 136805
+Case #75: 35734
+Case #76: 36267
+Case #77: 943873
+Case #78: 79469
+Case #79: 36962
+Case #80: 839141
+Case #81: 135777
+Case #82: 89119
+Case #83: 80761
+Case #84: 68121
+Case #85: 911170
+Case #86: 85895
+Case #87: 28061
+Case #88: 996580
+Case #89: 37483
 Case #90: 967607
-Case #91: 979008
-Case #92: 217579
-Case #93: 151505
-Case #94: 101841
-Case #95: 225459
-Case #96: 215801
+Case #91: 966499
+Case #92: 142623
+Case #93: 112527
+Case #94: 67268
+Case #95: 147989
+Case #96: 150591
 Case #97: 7
-Case #98: 264793
+Case #98: 175432
 Case #99: 1000000
diff --git a/codejam_2008/src/y2008round1b/b.rs b/codejam_2008/src/y2008round1b/b.rs
index eb6bef7..d52bebb 100644
--- a/codejam_2008/src/y2008round1b/b.rs
+++ b/codejam_2008/src/y2008round1b/b.rs
@@ -1,8 +1,8 @@
 use codejam::algo::graph::disjointset::DisjointSet;
-use codejam::algo::prime::sieve::SieveOfAtkin;
 use codejam::util::codejam::run_cases;
 
 use std::io::Write;
+use primal::Sieve;
 
 /*
 Disjoint set
@@ -10,17 +10,14 @@ Primes sieve
 */
 pub fn solve_all_cases()
 {
+    let sieve = Sieve::new(1_000_001);
+
     run_cases(
         &["B-small-practice", "B-large-practice"],
         "y2008round1b",
         |reader, buffer| {
             let t = reader.read_int();
 
-            let mut sieve = SieveOfAtkin::new(100_000);
-            println!("Starting sieve");
-            sieve.run();
-            let primes: Vec<u64> = sieve.get_results_vec();
-            println!("Finished sieve");
 
             for case_no in 1..=t {
                 let (a, b, p) = reader.read_tuple_3();
@@ -35,7 +32,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(a, b, p, primes.as_slice())
+                    solve(a, b, p, &sieve)
                 )
                 .unwrap();
             }
@@ -43,7 +40,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(a: u64, b: u64, p_lower_bound: u64, primes: &[u64]) -> usize
+fn solve(a: u64, b: u64, p_lower_bound: u64, sieve: &Sieve) -> usize
 {
     //First step, find  P <= primes <= interval
     let lower_bound_primes = p_lower_bound;
@@ -53,7 +50,8 @@ fn solve(a: u64, b: u64, p_lower_bound: u64, primes: &[u64]) -> usize
 
     let mut ds = DisjointSet::new(interval_size);
 
-    for prime in primes.iter().filter(|p| **p >= p_lower_bound) {
+    for prime in sieve.primes_from(p_lower_bound as usize).take_while(|x| *x <= upper_bound_primes as usize) {
+        let prime = prime as u64;
         let a_mod_prime = a % prime;
         let interval_p = if a_mod_prime == 0 {
             a
@@ -65,7 +63,7 @@ fn solve(a: u64, b: u64, p_lower_bound: u64, primes: &[u64]) -> usize
 
         let set_to_merge = interval_p - a;
 
-        for i in (interval_p - a + prime..interval_size as u64).step_by(*prime as usize) {
+        for i in (interval_p - a + prime..interval_size as u64).step_by(prime as usize) {
             ds.merge_sets(i as usize, set_to_merge as usize);
         }
     }

From eb662146de5da7348f643f91194bc9ad5dac2213 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 16:30:29 -0300
Subject: [PATCH 041/122] b

---
 codejam_2008/src/y2008round1b/b.rs | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/codejam_2008/src/y2008round1b/b.rs b/codejam_2008/src/y2008round1b/b.rs
index d52bebb..252377e 100644
--- a/codejam_2008/src/y2008round1b/b.rs
+++ b/codejam_2008/src/y2008round1b/b.rs
@@ -40,18 +40,17 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(a: u64, b: u64, p_lower_bound: u64, sieve: &Sieve) -> usize
+fn solve(a: usize, b: usize, p_lower_bound: usize, sieve: &Sieve) -> usize
 {
     //First step, find  P <= primes <= interval
     let lower_bound_primes = p_lower_bound;
     let upper_bound_primes = b - a;
 
-    let interval_size = (b - a + 1) as usize;
+    let interval_size = b - a + 1;
 
     let mut ds = DisjointSet::new(interval_size);
 
-    for prime in sieve.primes_from(p_lower_bound as usize).take_while(|x| *x <= upper_bound_primes as usize) {
-        let prime = prime as u64;
+    for prime in sieve.primes_from(p_lower_bound).take_while(|x| *x <= upper_bound_primes ) {
         let a_mod_prime = a % prime;
         let interval_p = if a_mod_prime == 0 {
             a
@@ -59,12 +58,10 @@ fn solve(a: u64, b: u64, p_lower_bound: u64, sieve: &Sieve) -> usize
             a + prime - a_mod_prime
         };
 
-        //printf("First hit in interval %lld\n", interval_p);
-
         let set_to_merge = interval_p - a;
 
-        for i in (interval_p - a + prime..interval_size as u64).step_by(prime as usize) {
-            ds.merge_sets(i as usize, set_to_merge as usize);
+        for i in (interval_p - a + prime..interval_size ).step_by(prime) {
+            ds.merge_sets(i , set_to_merge );
         }
     }
     ds.number_of_sets()

From dab83f76a6fb9b23a6bdb94d876a715df8fc074c Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 19 Feb 2019 17:50:49 -0300
Subject: [PATCH 042/122] c

---
 codejam_2008/src/main.rs                      |   5 +-
 .../src/y2008round1b/C-large-practice.in      |  21 ++
 .../src/y2008round1b/C-small-practice.in      | 201 ++++++++++++++++++
 codejam_2008/src/y2008round1b/b.rs            |   1 -
 codejam_2008/src/y2008round1b/c.rs            |  40 ++++
 5 files changed, 265 insertions(+), 3 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1b/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1b/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1b/c.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index b46e711..728ba85 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -57,7 +57,8 @@ pub fn run_y2008_round_1a()
 
 pub fn run_y2008_round_1b()
 {
-    y2008round1b::a::solve_all_cases()
+    y2008round1b::a::solve_all_cases();
+    y2008round1b::b::solve_all_cases();
 }
 
 pub fn run_y2008_round_1c()
@@ -74,7 +75,7 @@ fn main()
 {
     init_log();
 
-    y2008round1b::b::solve_all_cases()
+    y2008round1b::c::solve_all_cases()
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
     run_y2008_round_beta();*/
diff --git a/codejam_2008/src/y2008round1b/C-large-practice.in b/codejam_2008/src/y2008round1b/C-large-practice.in
new file mode 100644
index 0000000..6a39eee
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/C-large-practice.in
@@ -0,0 +1,21 @@
+10
+733279
+93 94171 273876 484796 356021 680184 218182 366798 376586 511205 632869 444980 443989 328682 665720 382090 26318 332063 581531 407707 517791 55598 231545 545322 688959 204630 539492 530373 558669 328294 546556 144639 713007 87152 629434 335748 34057 114337 702545 701185 625541 159398 412885 336250 488079 345326 275603 71660 234652 123854 36630 19164 469995 268174 564485 425674 30067 661240 222768 145999 256254 36044 290637 235981 123195 186791 128992 447794 591670 388800 415700 41195 548197 95305 377444 593539 440630 210311 665198 675282 624707 259091 251709 361422 527264 373457 53817 114594 301418 567127 260592 114935 160434 551228
+832425
+96 453773 365106 145171 179122 823785 660436 193721 353439 512443 282794 455379 501249 336729 717517 150600 345870 445443 111677 326481 653426 386292 482399 56740 525864 606422 697418 354756 222343 736411 192082 222310 357759 730039 367480 536880 721398 368342 71028 242411 48360 526673 38216 549608 30976 96159 40634 376845 541602 152310 43752 362602 538601 526150 419341 404891 300146 457185 100074 522488 361170 292155 85225 59355 189768 452704 769087 251592 161473 7689 666854 209832 707213 705069 99866 738188 801227 313351 282607 683255 638512 326359 213431 517540 20083 805623 90005 320229 603234 190078 183143 131979 655084 441219 364185 12426 61498
+698620
+82 672158 669726 45905 111142 206969 22366 543681 154914 395482 275874 356941 469536 309300 56881 502988 103516 654318 685210 338247 495615 18111 647947 76640 477211 224803 573093 446668 183339 558561 356249 33092 606330 327354 78996 18851 534322 175593 636763 64848 571074 214017 496020 416221 597548 627132 220588 2443 582829 281409 414922 454056 373752 364248 604927 152342 663283 479399 599009 148001 413571 256637 181092 395512 583991 334319 414363 493924 584143 352505 633003 456597 640753 430402 248429 539681 358914 469017 542123 317354 126037 258424 147021
+923703
+97 242551 579216 112455 58507 329680 386465 689186 555555 4441 271854 540679 671847 620259 117056 757565 483499 553796 348969 677503 425229 841054 465389 319802 740501 381559 459620 176357 638656 532306 78911 21335 900683 783953 259616 161314 189929 646080 52623 871310 776347 324477 488286 524490 146859 731168 484178 756184 361260 35270 509983 912316 876323 51668 308414 818948 559053 768034 71601 274005 502463 276338 421166 479442 136588 680781 640755 452343 528984 693378 525777 507454 219978 216186 234068 366836 23650 718245 199316 384909 879342 709298 499348 831961 886792 807762 727205 522141 777919 929 921972 482505 277267 545261 38243 539681 428165 804825
+930479
+100 588223 317156 807921 885260 189875 681851 402497 315351 405186 593835 264777 43792 661424 651184 438347 645265 365827 579831 835236 685547 80084 806886 352667 140384 183132 687559 548854 132580 763024 889694 100288 420767 276370 908208 375547 466245 721464 778043 843479 196170 441398 177776 301845 234227 828959 740191 10896 326191 389543 846131 81258 531510 784422 433924 671893 37074 252888 352151 231537 85432 311365 331824 506199 587735 371437 13150 185384 162421 791193 98383 420474 363995 276159 722318 660105 236522 532030 732885 562712 52977 648536 705854 646370 564362 209298 449667 601435 524069 801817 832972 609501 244587 296200 247104 894205 667636 260253 149109 830056 120966
+798501
+100 792761 517157 459487 623058 798064 348443 662205 121768 62782 463409 220113 724276 498494 426329 55011 116032 731508 89773 341141 691489 105427 310959 469695 412537 656801 121076 284918 58548 524860 570489 17334 519119 289144 162361 29217 288706 510803 691421 96015 573584 41869 1668 184899 225904 427996 239909 27476 46544 15222 368616 738032 604691 679574 409226 218726 223414 215842 503644 766004 740701 759673 468878 461319 250315 631238 490535 224562 29080 68995 6117 602663 594906 7784 787561 506350 121321 713010 533825 651906 413772 103939 591436 219961 469053 686202 438687 378008 587584 627871 345510 529784 589042 15886 676643 524897 332664 54217 434999 361743 607253
+966573
+85 519646 87880 85161 601735 897574 860479 187833 388520 850827 810135 449433 583958 588285 959855 674639 756255 247633 486314 944143 768970 402064 344230 563411 124726 686342 913055 879969 351320 481303 677962 852259 275934 765841 937419 877668 938399 831325 340485 601903 957136 184047 84762 574520 772331 319602 282586 803570 567234 43884 781139 369630 445947 158795 208025 812231 845136 154507 725626 471441 877367 678572 357126 186727 719398 327972 339380 932781 434281 679864 568111 424843 863910 894430 32789 911225 247458 556932 748221 814691 842374 562787 459305 321747 963139 667330
+970646
+100 118222 385135 577180 548830 385802 472527 965410 362877 230514 331342 821661 75481 797880 472310 441772 200598 208478 212596 155417 44306 276180 857306 244209 536607 863599 231046 137412 566651 700070 593720 39803 403595 8208 616982 952424 949960 118863 947187 342190 349376 307882 193204 10161 691066 665513 451932 476967 459295 664527 632383 503600 526011 519042 333112 647921 411994 564157 785332 7999 849530 408406 603751 282478 1917 250087 820206 951876 924899 382050 323420 859578 275236 101927 869738 966301 352744 906974 472621 812038 186158 134357 900941 297472 238703 819356 945393 650696 412867 760078 243998 847700 753787 433053 715482 341008 268443 565041 322237 222695 947090
+1000000
+100 158583 381997 495381 734716 829323 269835 171660 60557 660569 667456 646194 141558 349561 736080 370932 523575 147947 961233 968972 32491 656412 710089 480936 377967 904152 773344 919310 87680 277519 191774 252049 436102 90122 263781 687169 435796 533616 858828 496353 710536 42635 658898 368445 392195 911329 739376 915769 575627 216961 401093 608118 873372 111181 605405 251338 15332 378749 170648 619363 656267 878773 871412 608720 485247 651544 812240 921042 701511 671068 933746 412046 713702 592644 296843 622249 20324 36218 538017 595951 769530 939109 720420 159253 50289 325824 410591 581973 220924 97590 201335 877191 492714 589098 2262 977960 756994 814502 415354 458504 1921
+985741
+97 576190 48225 204956 222798 144208 39290 512539 836391 119470 892603 78807 248878 9921 721807 841071 280079 616011 214132 759974 557499 882761 62110 151068 885781 99219 170101 263084 531451 560364 356956 630033 150813 405180 834988 819601 9638 334527 792389 846028 899987 699250 385084 163124 169420 121149 464444 449499 737159 678575 669722 308917 575594 731831 905975 921625 291299 90334 198967 822749 110948 16172 467040 707751 867343 762277 1860 876980 557054 794248 197516 917290 953748 582599 540663 137426 703747 19365 47174 901156 697939 716895 224331 733783 908975 144564 669666 214533 680889 328882 497531 252086 791044 424821 959836 672645 647347 961695
diff --git a/codejam_2008/src/y2008round1b/C-small-practice.in b/codejam_2008/src/y2008round1b/C-small-practice.in
new file mode 100644
index 0000000..d9c4ae2
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/C-small-practice.in
@@ -0,0 +1,201 @@
+100
+3573
+97 3155 3200 88 2161 3401 855 2179 1373 454 2933 3177 3279 1279 1887 3550 3269 3265 2905 2410 3013 750 1967 2212 1933 1955 961 2189 3043 198 318 2254 3352 59 2341 2054 1 3195 774 1489 191 249 1092 11 1527 3094 103 1222 2900 3122 173 2339 298 2140 1092 2230 636 2052 960 221 2249 1278 2474 2027 1451 1357 623 1452 978 1396 2940 1283 1644 573 1294 3170 93 1396 934 3107 1059 1221 1987 1356 3360 3079 127 538 1557 1086 873 348 2478 3461 2489 356 1244 3111
+4241
+100 1557 2053 3807 1596 1072 620 2515 3548 731 2397 3053 2288 2180 2071 4095 2742 1201 1710 1976 3496 806 3618 720 694 2803 4120 3668 1288 548 166 1596 2105 4053 1162 1294 883 1781 3808 2024 106 3799 2670 4228 3572 2335 4081 2073 1129 1549 1642 383 4189 1018 2937 641 1414 2816 1902 2701 957 2067 56 3061 3713 3052 113 2190 591 1515 4213 2531 2907 236 2517 2237 2570 4191 1903 3698 3333 1138 1675 874 2155 370 1514 1162 779 3416 1457 1736 3076 1512 2390 2548 322 2503 496 2747 1611
+4767
+99 4456 2535 3246 3714 2112 2598 2898 812 4530 2307 873 4134 2261 166 943 4552 410 3551 4699 1657 261 4544 1455 2781 4545 2772 2615 2146 1758 129 2572 1447 78 3233 2575 4371 1063 2887 2597 825 426 3469 191 2687 1049 3316 4653 3641 4281 4584 530 4541 1775 4166 2555 3735 2171 2584 1113 3928 2712 1100 2789 2789 4332 596 4574 2809 3482 2403 3634 1323 1104 1239 1424 4335 4554 1309 3208 1482 3307 3737 1256 2496 3135 1225 1463 538 1223 4758 1881 3934 1090 2084 4137 2836 95 3943 877
+4563
+100 1628 472 1548 1605 1297 2467 997 668 2903 2552 853 1167 2465 2409 12 3847 1739 1805 3011 1142 82 1148 3945 900 3809 3127 354 1092 486 4142 4314 3155 50 2340 196 1346 1285 2234 2014 667 1264 2866 1833 207 1753 2887 4054 3491 1170 3543 1111 1251 128 492 3193 415 3619 3546 1507 583 4166 1257 3737 4215 76 411 2039 1360 3686 4052 2026 1428 3396 338 1634 1628 3224 2166 555 4393 1146 2708 2123 1273 3199 752 1687 3296 776 4235 357 378 1971 572 1071 2046 2024 3109 4447 2188
+3485
+98 2964 2223 1797 2355 915 1957 2786 2984 726 2987 719 1638 143 2732 1034 2351 2614 1744 1349 1338 2245 1628 3234 2427 1063 3307 678 1425 2377 1344 2369 1855 81 1912 1956 995 383 2488 493 1108 3222 1212 493 1111 1690 1526 3461 818 1016 1325 2155 3261 699 3135 2202 1761 703 2879 932 3079 1969 1047 2680 2049 2959 1150 790 3341 1385 2515 2196 1121 1473 2688 2231 3162 728 3438 1726 2976 2509 395 2751 3207 44 1467 2714 746 2092 160 1572 1807 1207 766 370 680 3148 2391
+4595
+100 1203 1089 68 4225 248 2537 945 2190 1707 4323 1786 3675 534 2490 3531 3628 306 4501 1549 1963 2182 3355 3832 56 2146 2376 4530 201 290 4118 2451 1492 3998 2518 4508 3037 3846 857 631 4344 584 1208 3424 4504 3697 1151 2329 2795 4443 3877 3549 2030 2636 2785 877 187 3952 812 3774 3033 3721 1629 3316 3123 2939 3228 1564 981 4084 986 730 72 2193 4153 3368 87 4095 1101 2881 3942 382 1834 1376 1809 3410 2253 787 1558 1856 4561 4591 981 386 3311 4103 2116 1944 1071 3097 1432
+4192
+92 3 293 2149 353 606 4075 3477 3015 489 117 3231 2785 4071 1221 3389 1733 3432 132 1386 2382 3325 3181 3857 3542 317 1392 777 2058 3483 2057 2169 1789 2350 2621 446 1259 2503 3922 81 1295 4039 3312 2384 2221 340 1580 3953 2075 1711 3642 264 3339 2630 2424 993 1250 3815 1769 3307 3105 3825 3779 3198 286 2208 3643 1545 3014 3372 4121 117 1522 3240 2500 3742 1883 4079 1806 3958 4094 3752 2525 1544 2189 757 2536 1743 2875 2608 3353 92 545
+4722
+93 2311 437 1203 591 3848 3846 1027 773 4703 4289 1236 743 4203 2266 2013 304 4516 4620 1520 1168 4597 2241 1475 2642 3910 4577 438 3603 4127 1841 1107 1715 3955 3987 3984 3080 66 288 809 1724 4576 2044 4144 4057 1266 1435 1316 1059 3010 2835 3905 2884 2031 657 2481 1218 2189 4596 99 1594 3392 2883 3308 2625 3825 2569 2660 3890 4535 3468 892 4388 2468 313 678 3733 3425 1993 1747 1712 105 929 1551 3814 1586 987 309 730 861 2085 2323 4252 245
+4884
+93 4293 4153 52 1215 192 3020 2855 2406 1359 3250 670 3060 4348 3557 272 18 2423 1442 4211 4542 3257 1053 2509 1508 4650 2797 3889 3801 3787 803 4172 3195 1456 723 910 1647 3742 3764 552 1601 2129 2605 4660 1592 1278 1431 2994 200 4257 2320 4741 2629 4757 3749 4136 1022 1662 4524 1322 1948 442 609 1643 3281 1332 2552 44 1573 1431 1979 3173 3559 4584 4332 1651 2361 879 4644 3944 251 3463 300 4263 3335 4048 14 857 825 4537 2178 2773 1478 2787
+4819
+92 230 4027 122 753 3690 4028 259 3487 537 2796 4253 4666 3445 437 1304 3436 2378 4594 3293 304 3276 2520 1675 3296 2958 326 4616 2787 3607 3766 4795 1520 2973 2600 2272 4346 4312 215 697 29 3010 2634 4694 1635 754 3682 2754 3131 1140 1227 1118 4415 3747 2792 576 4388 3118 372 2356 4408 4137 2331 1108 4794 2614 1063 2004 2106 1277 385 4637 1970 702 2196 1288 1455 3561 4041 2269 4700 2952 3386 1980 4382 3862 2555 3950 4663 610 1486 4251 2430
+4870
+87 1205 100 3693 4322 2414 1134 4089 2268 739 2012 2913 3066 4492 2787 4639 2537 3854 3288 1247 4534 3352 4455 4408 713 4319 1762 1781 4662 2249 324 2182 4745 1716 2296 618 4129 3430 1129 2819 590 3140 861 78 4053 3647 4716 1719 3923 4425 4257 3586 4199 3841 4416 1333 4581 2599 3113 4372 1269 3436 2975 1144 281 400 3053 832 251 4181 3650 2133 3742 4510 2210 2924 4579 3347 1064 53 2901 450 60 2229 4290 897 4853 4000
+4840
+94 1688 4087 563 4337 1852 3450 49 1267 2435 4205 1387 3003 2652 841 4146 4457 175 1532 1458 3260 3421 3644 1709 4268 578 47 2146 1136 1903 2160 3654 3743 1406 4217 3239 3409 2978 3439 4828 724 2803 1374 3726 767 2215 3184 383 2541 4715 1840 960 3296 796 2820 2875 1373 3019 181 2661 81 2340 1474 3975 3898 1002 2373 2466 4132 971 2453 15 3774 3979 3893 4692 1505 2236 234 4045 2110 2226 317 565 3173 3136 3440 4697 1314 3620 2517 1547 1271 4143 833
+3161
+99 2726 2967 1407 1208 2290 2219 794 1291 1417 2341 2634 871 323 897 1844 1049 2754 514 1560 2238 712 1296 1747 423 2465 1851 915 1072 1501 3049 2805 2826 2854 2812 873 582 469 1666 472 1885 2606 1705 1355 1529 2602 38 1177 794 2312 2736 1631 1624 871 217 2046 1935 667 1560 1606 2167 1448 3011 431 1140 1261 1303 322 1729 1568 793 2214 2774 2498 407 1141 538 2205 917 3092 1356 492 1561 2979 3123 377 463 496 1043 2022 2102 1809 308 551 2240 48 1811 2142 369 378
+4635
+98 3407 1224 1021 4030 3747 3253 2536 689 1821 76 141 3040 2001 580 3497 502 2051 4211 2523 3240 2725 123 2619 955 2779 1557 1031 2888 3951 1114 1078 2639 2338 2098 1950 1449 716 4486 2055 2453 4478 2112 858 1843 2608 4271 2262 23 3846 149 3179 1852 271 1163 2723 2966 2636 3753 1135 1869 232 2212 4424 2486 4309 1739 3934 306 1506 1270 2759 1348 3298 3533 3108 1271 3168 734 1293 2295 799 4472 4063 986 916 2150 3951 3468 1268 450 701 1416 2578 490 3901 2251 2145 3116
+4467
+94 3869 565 2815 772 4396 597 4042 4041 3288 4128 3547 2215 3679 2906 3299 1697 157 1308 3744 468 2783 3608 915 1402 2186 1050 2817 2577 3378 1063 1872 2779 1627 219 3350 1355 615 2925 928 3903 2385 4274 1650 1596 2713 481 3293 2669 1589 2569 2936 4171 1509 3650 1106 3694 232 3722 1603 3409 317 3474 1720 1743 3492 403 3098 4106 3327 3825 3341 1044 3432 324 2640 1477 604 1265 3945 2192 3633 2213 1896 674 1395 3001 4167 1427 2255 1102 368 2371 108 1888
+3559
+83 1938 537 3244 2895 1069 2309 3237 2339 627 3363 1095 10 1789 539 2566 874 370 1176 3025 3559 880 3335 472 666 2149 1037 501 2305 2658 194 919 193 731 3320 3087 956 2069 1921 3294 1852 881 830 1862 2670 525 25 3543 51 1201 2165 50 1237 1098 3237 1060 3246 3431 717 1149 2529 910 2067 1879 797 1827 1406 909 3053 2484 3360 502 2521 630 1520 788 311 1545 3488 361 1902 1250 3126 3138
+2472
+96 1273 2066 509 214 689 1947 1156 121 1060 1444 1554 1027 365 1837 1984 180 1625 1402 226 1925 2433 632 928 1793 1652 1044 1670 2113 1997 876 2415 405 77 451 619 765 2005 1382 886 200 353 2047 1226 325 1411 345 505 563 1746 338 2096 1314 577 551 242 2228 1203 1520 1869 335 2395 1811 739 2079 1869 965 2451 1009 2346 472 1208 227 46 2041 159 1456 1993 663 1627 874 1000 1250 2188 1576 1408 2037 940 138 1084 2416 472 614 1362 819 220 758
+4889
+95 777 4721 4694 4014 467 1176 3899 364 2548 645 196 1197 791 4673 597 479 2817 4862 1563 2343 3107 1440 1259 2006 3356 799 2738 1714 1713 3763 197 2489 3594 1 1438 4060 1176 447 4247 3548 915 4266 4744 1529 4049 451 2008 1976 247 3394 4318 3177 4833 511 294 3300 1309 2855 4837 2846 1728 144 445 256 4858 1706 4139 1144 1976 3497 4691 2891 2873 4369 4419 2033 4820 1361 3832 1 4754 3085 3178 4522 3595 3471 2756 4728 1436 2703 2684 2988 2847 2952 3243
+5
+5 1 2 3 4 5
+4541
+92 4124 2945 4520 4479 2643 4522 3256 2822 3356 1799 3274 3091 2276 2652 3447 2579 2914 595 49 3908 2494 4024 3226 1602 974 1540 2933 4353 181 4518 1987 425 2921 2627 362 1685 2608 4280 627 2084 1537 21 1295 4475 2672 201 2512 1706 795 2560 1734 3950 2704 419 1011 4340 2620 3943 4151 3462 40 2258 3887 3622 343 369 765 3612 107 1391 1817 1644 2073 3111 2239 865 3311 209 2571 226 3430 425 4176 2254 1505 645 2052 4125 708 2323 3045 747
+4796
+94 4491 2199 1826 4486 757 1017 3995 877 894 1554 240 864 3820 2013 550 2122 4513 1251 447 1795 4146 1079 4160 3241 2997 1569 1128 4343 4759 2996 3468 4453 2487 2586 4142 3243 894 3340 1412 1787 2186 3739 4738 3297 955 491 622 672 1742 1068 4554 3179 4234 1209 1623 2434 2777 43 1980 2740 3038 2740 4484 2816 529 1122 3351 1422 1753 4762 500 1230 996 441 4526 1951 932 351 4710 4761 3506 1759 3143 2943 2968 2058 580 3036 2100 4648 3067 2429 2591 2755
+4231
+96 2048 1599 3027 2285 2287 1518 243 1408 556 1758 3574 3297 4116 3705 457 870 3312 3143 1537 417 3004 3717 3323 1490 86 2125 1813 2642 2917 3065 3610 733 3144 2405 3018 3912 2403 1741 1088 1440 1979 430 505 344 2615 3673 3925 176 2585 1230 592 4069 716 2395 1327 3513 289 3139 404 3205 453 4013 2418 2078 667 3916 1758 3070 1425 2845 2990 1884 1755 1975 2227 138 4128 1921 314 2481 1631 3617 800 827 1781 2126 109 550 3746 512 2235 2679 294 421 525 960
+3399
+94 1578 3269 161 253 3330 2741 2378 1414 1284 2586 2848 1325 1120 1893 1062 2877 1859 3345 2693 2106 692 1941 2177 1591 2708 1203 384 1674 75 3110 2793 1652 2980 708 3057 2910 1202 2035 2078 240 1221 1526 1564 2341 19 379 2971 3030 325 19 1736 1016 1959 1666 2606 1267 622 743 694 696 454 1241 101 1187 1948 911 1850 903 2946 528 1142 1920 3206 460 2014 978 838 1586 608 1162 1604 97 3330 163 2915 291 2583 137 1033 1030 1985 2639 2270 3238
+4067
+99 2105 3644 3725 1086 558 2969 4061 331 3724 2914 4041 2584 1948 3382 1409 573 181 1052 2905 281 1979 2087 3976 1290 3250 117 1897 2833 2925 349 1437 3124 2086 3255 2303 2643 2157 2296 2973 3974 1143 1041 584 3090 355 87 1757 2696 1138 2755 2976 3116 774 2884 2500 2118 1094 329 883 2113 2838 413 3330 856 3668 1565 3498 3918 3860 2403 3824 3096 3443 2502 213 1892 2588 63 520 3725 2817 3496 867 3590 406 1460 1640 3661 1788 617 3867 2719 1029 3129 1668 2790 2787 1098 734
+4585
+100 3615 2970 940 2938 218 3171 3061 4263 28 2217 3958 3022 913 2550 4031 3764 94 1487 1994 3767 4347 41 2385 3490 2719 4115 2661 489 231 4373 3353 1232 2757 1679 1556 361 265 31 38 2264 4219 1383 700 2519 3932 146 1697 4026 3604 3690 594 3365 1118 2979 4241 1223 4480 4289 3683 2097 4076 2450 715 4220 4129 2270 4580 4393 4273 33 4043 3906 3387 157 1839 2733 302 923 4145 1292 1999 2126 72 3116 519 1699 4338 2385 1402 3436 4481 2865 1300 610 2499 843 266 2493 2622 4538
+3872
+100 1715 3335 2990 3431 1585 629 3650 1139 3240 1712 2768 2046 1759 3687 2331 3366 1281 1097 1819 692 702 1491 3277 3216 171 2537 590 447 2344 524 2172 1306 1107 1289 864 3811 3038 1761 1077 3525 3473 3845 1699 2479 3659 157 1972 2187 2373 3790 127 323 2529 3403 3538 3819 3187 255 393 1658 1899 2565 2964 253 1101 1075 191 266 2836 1268 3791 3556 1240 1617 2162 2146 2893 261 1580 2513 1299 1706 2835 1075 1236 3620 1021 551 1123 2534 3328 3021 2346 3539 521 3446 742 711 960 825
+4372
+90 268 1253 1126 1161 4050 1282 3309 3482 890 2031 2039 3117 3861 379 1668 3922 665 3102 2247 3044 910 952 4123 3378 3925 1340 1697 3192 3392 2958 989 3659 3243 1146 3851 1952 2427 1819 93 2349 3850 2132 125 2370 2510 1792 951 2206 522 3197 877 1431 3180 627 437 1765 998 2133 584 17 4122 605 2707 2992 1750 2185 3976 3209 3036 4068 217 1545 1827 341 3914 4336 2132 3897 1201 2653 1753 2078 3116 3965 1736 3552 1357 2734 344 972
+4331
+100 3966 2366 904 1303 1368 2751 3750 1423 3509 314 2994 274 2662 1475 4039 1403 3335 4272 2877 1625 3035 405 1056 1127 2916 1047 494 3915 3355 1750 1446 2381 3508 2349 3075 4267 768 2493 751 3668 2199 3136 3941 529 280 3649 1323 3006 2981 4199 299 1684 272 746 2202 2579 1184 2695 2162 207 3837 3607 1980 2405 1016 723 1732 1175 2608 2482 511 475 1287 3844 395 958 2553 1717 3963 1202 1584 3654 2277 1247 68 148 3826 1252 2234 1048 850 1739 4047 2829 4143 731 2944 1544 1906 1220
+3954
+98 3484 2188 1878 3054 1313 689 2090 874 778 711 3663 687 2009 1112 1967 110 175 2171 3937 1438 356 604 1912 736 2527 2659 2425 1993 1998 3628 3889 1527 1861 2782 1597 189 3470 702 2032 1264 2382 1740 2920 437 2852 932 1516 42 3102 1498 1479 473 3072 407 1208 1644 3065 649 652 2078 322 586 621 3152 3368 3187 3340 3853 3888 2387 2132 3285 173 1098 3721 40 2999 2253 81 2147 3750 2530 3589 3837 2936 1813 2497 3016 2461 3148 2109 3752 750 3699 2949 1133 2931 3304
+15
+4 3 4 7 10
+4514
+95 4499 1043 3118 1324 3127 700 3899 156 3528 3149 1131 2672 2521 2106 4343 2138 4046 2113 1537 2475 762 920 492 1575 2837 1472 233 94 3738 1597 2126 1407 2640 729 414 3450 3626 4312 3605 323 2947 2419 2995 3151 2209 2823 774 1740 2619 4508 1898 3380 913 2389 440 3750 3860 672 1527 768 4466 1336 2174 275 4263 2587 1409 3374 2384 2697 3697 3014 602 4375 1650 494 367 108 4431 2985 2299 1814 4048 3212 1886 2171 131 3429 526 3855 4196 477 2874 1855 2950
+4891
+93 929 1063 4813 2685 4626 4185 734 4816 2679 4400 1490 4686 4625 4288 56 251 1507 1110 3677 4240 210 4858 1969 2130 4661 3015 4755 1173 814 1247 294 1742 2310 3046 4426 4875 2339 269 4799 2957 2608 4228 2752 2342 3624 2807 2592 3070 1857 1377 2419 2066 1344 2327 2135 3944 3281 1999 3057 4094 1185 3350 944 3494 4336 3309 1418 4614 1517 1325 2680 4125 662 540 1575 2225 1286 2106 3235 1082 1422 3593 3147 2765 1028 3222 4649 4308 3160 2814 3510 4344 4103
+4701
+96 3750 220 2586 1902 3902 1832 566 651 4007 160 3547 3631 3293 2699 690 2653 4256 457 1259 3574 2152 3937 3457 3760 2092 2286 773 2132 3343 2007 663 1357 2226 2214 2224 1427 4045 2790 1043 2316 1915 4589 1246 507 2586 1935 3159 2140 1358 4417 4680 2475 2619 2401 1534 9 4686 1272 1106 2293 3278 1768 2616 4469 2947 138 160 1256 2927 1202 3572 141 1089 116 4314 2641 1016 2771 3746 1339 1452 2690 3814 3036 4056 4313 2011 4041 883 3116 598 3126 3850 3213 2893 2095
+5000
+100 1548 4202 2493 4468 1737 274 3900 4545 2527 3233 756 2750 2165 2214 1103 4107 2847 1197 1254 1649 3591 3766 2942 1029 720 4204 2817 2829 1335 2036 3176 2883 1237 668 2350 4326 2293 2602 222 4819 834 977 3920 4350 3190 1374 4809 1036 2571 1062 2684 2513 1180 1978 3542 1899 2533 2710 4727 3868 4745 4254 1750 981 4921 451 306 2213 4404 527 3383 238 1503 2302 939 1045 3676 747 3432 2598 3161 2468 110 4340 4445 3 2590 3329 2712 3669 2196 3808 2922 297 4789 2843 2100 1446 1407 1503
+3997
+95 3222 1550 586 3173 3533 1056 2180 3529 3639 3928 2384 1930 2218 2322 533 3065 3257 1355 1689 1529 1242 988 2291 2765 3526 3496 2601 3376 1653 1468 3704 1407 3017 292 582 3082 1878 2761 2613 2049 3221 1530 512 1441 3851 1044 1038 3110 2399 2727 1171 3640 247 3991 2937 3772 3490 1540 3151 1675 3007 3387 3082 2557 211 196 1641 2618 3487 787 1200 2710 2316 1711 684 2169 2754 2251 1811 1155 1510 3512 1327 1756 3505 266 1531 2997 1806 684 1205 1345 603 819 3901
+4504
+91 2461 23 1456 1268 1296 3775 2488 1678 4312 1451 1727 1068 1918 3852 1191 4450 1297 1875 1958 832 3138 1370 1097 2362 4028 221 3716 4274 3138 3042 1558 2126 3064 4045 3394 4359 3315 1377 1532 4154 2828 4290 1750 1273 3638 2940 1218 1462 1342 4207 3325 4480 2104 950 3369 2659 1170 3612 2428 835 2149 513 2960 708 53 1849 1595 3367 3226 3126 4049 2581 3944 1294 3853 4109 761 1598 1066 2102 2332 918 3109 4435 2899 3006 2589 4068 2113 512 398
+4563
+100 709 746 4348 127 3136 2354 523 3497 2694 3398 2427 611 3376 425 2398 830 1469 3496 1509 3061 431 1625 2130 4267 1818 3969 2577 2063 1877 3866 2266 3627 48 3092 3754 4226 883 755 4201 55 4152 3106 666 2964 3530 4105 272 435 4080 1780 4538 4510 3404 3146 692 659 2551 4311 3763 4428 3613 2507 3491 140 2077 3723 4365 4001 4477 4002 4056 544 2544 1200 3508 1511 741 3779 2987 257 2038 2961 203 878 1544 895 2578 4094 1684 2819 3958 733 1804 3928 872 3881 4129 1715 3318 522
+4616
+99 2090 2872 3601 4054 4425 1482 4042 2727 146 1669 1096 1532 4217 3937 3331 3465 3009 1277 627 1860 4403 3814 1204 122 4114 2439 1942 504 2770 1808 2849 243 63 1833 4296 4056 2882 3290 2166 2596 342 3261 4127 4126 2149 2409 2974 542 3685 3168 1969 3471 2366 3172 3161 1431 562 54 1502 2900 1861 4350 3142 1924 1134 2390 1363 3584 1063 3096 1563 972 1740 641 49 3889 3049 3022 3998 2118 1573 918 540 3506 3657 3700 4504 3787 3321 1390 2070 566 691 595 2057 1393 2552 2987 360
+4918
+78 2440 1519 96 2690 3851 2642 1667 2031 2830 1761 2612 4481 3557 2304 2127 1110 1483 611 449 2508 4561 2793 4147 2536 4535 1730 3997 1418 1020 1378 775 3459 3292 870 1230 2225 3512 3293 4651 1819 135 2740 1778 3692 125 3904 279 2003 4514 1124 4510 4553 3916 3738 2170 3929 946 1644 428 1965 3021 1203 505 1791 2468 2130 4411 1061 504 4539 2880 1035 2360 4657 4726 2484 4038 482
+4985
+96 3663 4870 1134 651 4598 767 4199 4154 179 3773 1433 67 1465 73 900 3240 4099 1363 2338 4624 1844 3848 3479 1250 3144 4037 263 2431 109 4968 4812 3288 4369 960 3939 3981 1243 2669 3149 1421 1456 4582 1488 2437 4171 1904 208 3284 2783 2545 2440 4627 1408 450 408 4068 4486 670 1513 4111 169 856 2414 4537 1816 884 3532 3058 3552 1213 3996 4524 326 498 1976 4013 1918 1700 1828 4700 3762 4267 3858 184 4717 4265 3768 3734 4451 4797 2377 4619 667 4790 4170 2482
+4772
+88 549 979 4085 2398 2716 440 813 3644 1476 2297 1994 3307 2855 3686 3194 4551 4205 1674 876 4271 1174 2699 2607 442 871 1572 1999 4183 3010 2133 1730 1034 587 1042 907 3303 3730 1719 4422 2681 4015 1643 3463 2098 2804 1884 4124 2237 3558 227 1735 4731 2925 4341 400 1272 3389 4647 682 1626 4255 2411 136 69 929 1042 3371 2134 2761 3020 2290 4251 2138 981 1576 170 2864 3176 2406 3897 3402 1616 1331 3803 3432 3979 302 2048
+4861
+90 3977 3550 1379 204 3769 2814 4112 2518 57 1210 1346 2519 2446 1313 1739 2541 4186 3493 1054 2168 834 737 2723 3672 746 4856 848 4023 1090 275 606 4276 3035 1984 4479 1152 4007 3729 3669 3273 4149 153 931 1733 675 2669 4274 4860 510 466 1377 553 413 3309 4224 368 3304 4282 3600 3603 3766 4206 3017 1939 538 2634 3090 4545 711 1107 2956 4069 469 3096 941 1144 113 353 352 4693 28 938 385 4511 4247 3818 18 1899 3238 3617
+4768
+95 2643 2378 1007 4377 917 529 1945 4730 456 1971 3506 4763 4485 1828 4501 4426 4753 3707 688 1537 4459 2189 2594 1318 1135 3644 989 3262 4299 2580 1314 2174 4669 2032 1494 818 2561 3150 491 2728 353 3708 2435 69 479 2167 4207 464 1105 4606 1712 507 2026 4017 1824 3161 2892 2524 1366 2423 47 2391 4308 4716 4423 1033 477 1927 4183 967 4654 4247 4386 2032 4027 97 4198 3465 272 246 3303 1983 752 272 1231 2288 3144 4123 43 4509 1489 90 2132 740 37
+1609
+89 454 421 1111 84 1394 1030 898 446 1049 148 91 1041 893 880 824 814 1349 720 1352 924 528 882 1169 330 954 1390 1559 330 883 232 1502 109 1034 1385 192 818 805 1089 1264 627 10 127 58 902 1389 1264 107 1510 756 231 824 1283 1113 766 386 839 928 335 1168 201 949 1060 309 373 1217 882 1573 795 362 1609 194 753 126 633 45 1514 287 533 1414 1043 764 1011 1098 649 167 1483 1487 1476 591
+4201
+97 3177 1331 724 555 2885 2650 1989 3066 3297 1379 3684 3715 2470 120 146 982 2465 783 3842 1491 143 1275 791 1466 2257 2218 2972 4135 1064 2189 3708 39 3519 230 930 2539 3216 2918 1739 2311 431 1221 2161 3237 1676 2306 17 276 3424 4194 1766 3566 1603 2892 830 3859 908 4137 4129 1971 2124 3635 2346 1778 4201 3275 115 3215 2327 1853 1660 2758 3409 3820 2129 883 2261 2481 1158 1483 2809 3259 848 211 2285 2013 4069 3528 1949 131 1634 4072 4102 3979 1648 4101 3388
+4547
+92 2019 1623 2626 4414 2606 2322 4348 2960 1329 913 3901 518 3280 558 3315 232 4354 2001 3183 4322 2730 3729 484 1373 3524 266 392 402 2932 440 1711 1197 2063 4336 1063 915 2904 1657 3874 479 3363 3227 996 2096 32 557 3121 4385 2557 2550 406 1533 2525 889 2905 1502 1154 4091 2697 332 777 654 2322 2839 442 3385 4547 4140 1288 3874 71 104 3347 1861 2993 3378 2417 1566 4009 1221 4115 661 2753 2093 2343 1905 4388 4291 2242 2537 869 3018
+4824
+97 1519 4420 774 2858 3802 1253 2229 593 2380 4085 169 1601 4387 2085 4768 1306 2223 4703 3590 4647 1157 4033 3672 2664 3248 4579 3005 2616 3533 1442 2810 2188 1037 3583 221 1974 12 4409 2567 2391 3670 2735 1127 368 4820 3030 1673 4178 2909 438 4000 1201 1606 4807 1001 1989 4561 4005 4605 406 622 4550 2593 3618 3309 4773 768 3320 4358 470 2846 339 3204 3973 706 335 4138 2378 1649 2222 4775 824 559 3517 807 1559 681 2503 739 2421 44 3320 2147 2636 2113 2591 2585
+4860
+99 386 3783 2916 2918 3440 1697 4496 4238 4115 3902 1752 552 438 797 938 1996 1195 1576 2860 1408 2928 66 1451 2087 2703 4157 1340 940 1198 1237 3433 1275 159 1488 4192 3291 3184 3828 2360 2131 2561 4112 2682 2690 4600 3620 4685 935 27 2377 2034 2646 2442 3484 4732 285 2472 904 916 3361 2140 4348 4328 1991 667 3351 113 3850 2010 2472 812 4570 1415 3494 2092 1155 1945 1608 1781 1663 3984 3814 4309 1566 2130 4180 1850 4601 223 2457 2794 2055 1944 1953 3737 2610 443 3849 1291
+3884
+95 2745 297 693 1081 1648 324 2595 2189 2233 734 2512 2614 763 666 3846 1099 1966 1470 2497 1107 1513 1913 2776 2220 3248 2855 729 1367 1581 586 2122 3697 254 2814 265 1902 2510 2859 206 230 3592 2089 2215 3727 2754 2177 941 836 3646 2810 1314 647 838 3461 2238 3457 2431 2338 940 3383 2924 2433 3195 2549 734 3460 566 3243 2434 144 3472 1514 2232 1803 728 474 3351 1040 681 2484 3849 1366 2502 175 942 855 3003 2744 3193 58 2242 1604 1862 1552 268
+4671
+97 2773 2738 1578 867 760 3526 3530 3114 3356 2970 1074 977 4573 3751 4000 3957 3620 2180 3827 2128 3489 3466 3672 151 3072 2739 1305 3503 3238 807 496 1339 3544 1333 2206 4303 188 1064 2005 2803 4034 3078 3779 3195 1417 3107 2481 4296 4547 896 1752 3364 4361 752 3515 2022 2751 4079 853 1317 4145 608 2656 3018 1941 190 1909 1388 513 3914 4190 3806 1580 2557 2330 2257 252 4070 1881 127 294 3633 3491 3915 3644 1594 1265 1723 261 2117 3040 4405 1984 284 2011 3184 4404
+4862
+97 778 4125 2059 2159 4017 2459 2900 517 764 2992 2715 4770 894 2759 1095 196 4263 763 3836 3089 2660 703 2190 1378 2838 4316 3654 990 4735 4258 3163 650 3520 3767 2809 1220 1364 4254 282 673 929 2997 580 1822 4301 221 563 2247 983 2944 473 3643 3647 2663 3566 1622 2116 2358 2611 535 1753 4319 1184 3818 1770 2538 175 3133 1929 457 3805 2857 1999 2931 3224 1437 1697 2333 3684 2679 414 4156 5 4060 502 3571 4227 1164 4474 1976 1698 4772 4840 1427 3727 1747 3965
+4920
+92 3124 1122 1694 730 1028 2144 1346 2898 3207 3045 4727 4071 502 2411 959 2852 3209 1734 1008 754 2712 673 1396 1790 3557 2488 2853 1214 2921 488 2661 3996 1610 2307 2677 589 4450 1975 3487 2737 99 3293 1887 3472 3655 797 1403 1944 2530 2411 2697 322 1035 2044 63 2543 2483 2915 1708 3356 3403 4369 2431 2964 1755 3060 1504 4156 114 70 4844 3084 1314 4682 1636 49 559 3038 4864 3088 3400 592 1361 2386 588 1423 9 3070 2290 1716 1505 772
+4896
+99 247 1216 2294 2657 3737 4887 4779 4486 557 3682 667 3771 192 4316 4381 1411 3544 1601 3503 3624 1870 818 4017 4374 2032 158 1571 286 2218 2049 1883 2464 3264 4049 97 1977 4039 4875 1566 4595 3532 2104 3342 3723 1524 2826 110 43 4298 3484 3667 1271 4302 2659 621 1437 2817 2191 1594 10 4239 3477 2474 2479 2629 2442 4327 1643 2420 996 1213 927 2972 4554 4522 4495 2356 4631 4537 1757 3090 3179 2900 2495 942 3520 3804 3630 686 501 3639 4797 3849 1216 2379 1453 3529 1809 3095
+4714
+95 4176 3643 627 972 2728 2211 2303 4434 4333 244 4714 2797 1983 1211 3569 3254 4611 3405 3919 1011 3319 11 940 346 2072 1470 2098 616 3499 2732 864 2960 4282 4112 1840 2295 4230 2050 4637 3849 2293 4636 1931 4275 3754 3407 722 1558 6 4640 2568 1232 4651 1415 1577 4630 792 1582 531 4290 4313 4016 2536 3881 1321 2283 4083 837 4332 4005 2593 4533 1835 2431 2001 3496 1123 2723 2962 3750 2648 3437 267 2584 138 1843 2499 929 3424 938 505 931 2861 948 2719
+4024
+96 2646 2536 2471 3990 2624 3105 2687 1694 2231 3995 2707 742 1294 1710 3160 2221 1284 3805 3662 1043 3602 1461 955 155 3327 1038 299 1289 325 3060 2326 2970 1571 1180 3343 170 260 2005 1864 2490 1975 954 3640 3676 2663 3183 2281 330 2964 1918 1372 2541 3786 2327 2695 3089 3364 3402 353 72 2437 3086 3449 391 649 2767 969 1316 748 2832 190 2722 169 3829 2782 3239 3395 1038 3569 2334 3363 916 1259 3124 3650 337 2596 2990 3738 3357 3469 2558 2826 2894 3357 3475
+4542
+99 4215 1926 744 2208 1420 611 512 1506 289 754 3281 1610 2215 3804 2532 4378 165 4205 3410 1040 983 2369 2505 4318 4138 3031 2890 3815 3228 1396 2943 4105 4525 3686 1770 2606 4297 3486 773 1247 901 716 2857 3116 4519 2050 4155 141 1712 3022 2384 3899 848 346 3674 1647 3376 2022 919 3266 79 3861 4032 62 4209 2463 3871 625 1406 102 1871 3511 817 1389 2084 793 3439 1696 2137 1812 1379 4520 1168 3430 324 300 534 361 3525 1452 288 3603 1975 4319 326 2845 2240 4197 3469
+4637
+99 1564 377 3676 3969 4179 1545 1504 1418 1737 2085 4503 3645 2097 2792 2384 257 3964 3871 3154 3547 4579 3099 4618 1140 1527 1365 2502 1420 148 3664 509 1711 3195 4184 198 2736 246 856 4153 1982 2940 3173 144 399 1327 2528 4447 4445 1761 2118 2509 857 580 2490 1996 1261 3854 3653 2680 3156 2679 3189 230 391 1890 4219 3126 2136 437 1796 3272 3377 331 3416 2930 812 461 1895 4411 2221 4012 2283 3077 3746 3927 4228 369 2298 2398 3049 816 439 755 200 4621 2644 3573 3109 3934
+4898
+99 1360 1192 4247 2367 2123 4144 3901 3780 1078 472 1154 2098 1879 712 3607 1515 4796 3916 1147 4599 2409 3876 4399 1752 3415 2453 4787 4539 2593 445 4287 4322 2006 4005 1790 4499 3620 1162 3380 4698 2003 4533 2267 4251 716 1345 1237 613 363 2383 313 3141 1361 4711 4892 4775 2636 253 4785 330 1067 4544 4652 3073 3650 1913 2673 2372 3075 1524 2541 549 1528 279 4800 2243 1624 1138 2855 2356 3521 3537 598 353 3350 591 229 1087 843 485 1786 2280 130 1909 454 3780 3822 3496 1623
+4837
+89 2759 2727 95 74 2869 2756 4172 111 2550 1316 993 251 3164 1328 2220 3327 32 2039 4116 2276 3253 1274 3877 784 1125 3609 3481 2516 3410 1829 181 574 4555 4354 647 1828 1515 4818 1939 4064 1296 2173 4314 4460 3500 938 2949 3532 2218 1469 212 633 1984 4088 658 3109 2860 3380 787 674 371 209 1247 4168 3804 1894 1158 481 1874 2338 3786 2412 4511 2504 1276 3173 3441 3466 1109 64 97 562 696 1322 4650 596 4430 1914 3975
+4693
+96 3241 3807 1833 3866 1315 114 2618 4208 1777 3471 4244 4022 1551 4259 2531 2259 1403 3490 3612 3397 1039 134 1196 2696 4509 1083 2301 322 4635 2016 2063 3182 1129 3895 2655 2745 4309 880 2259 1392 4651 2110 720 1508 1675 3551 4067 3378 2347 2986 2382 3687 3119 3577 1689 3235 4660 3990 3556 209 1312 1226 3691 2742 728 1652 793 343 2832 3352 1734 2789 769 2755 4597 2744 1612 4272 1429 4260 2564 4111 3253 1290 3296 248 4524 3563 4538 3688 3771 1157 220 2768 4199 1249
+4658
+95 3338 3009 659 2594 2088 2970 2741 1478 3080 1160 2917 3693 3825 594 2955 3930 1991 730 998 4390 8 4168 770 1126 2529 2369 3361 2788 2213 2476 3938 893 826 3346 2236 2913 1657 318 3141 78 228 1399 3771 4052 742 817 2073 1482 296 3070 1214 3711 1330 1983 3587 3858 4351 2289 737 656 3514 16 298 4339 2111 2533 1343 3767 1601 4483 3845 1828 1224 1707 4629 1965 1273 2043 3447 1568 454 3410 4028 533 4142 2956 4390 2584 3994 3876 3239 2849 2641 3536 1279
+4287
+98 3747 3439 569 3109 3623 1384 2983 53 1330 2421 2636 12 837 2673 3818 2429 1904 493 3558 1934 543 167 3232 2380 2289 2728 562 2505 1445 2644 404 4166 1795 4234 1962 106 1330 658 3420 1635 3078 1768 1646 2889 3415 152 6 1032 644 3563 2965 1186 3730 884 2540 1731 3612 3101 3210 4031 1458 3613 3910 2227 2534 559 2332 2839 1216 1464 186 6 2207 806 1870 1334 4219 1875 1340 575 1150 3279 735 592 4163 3274 1297 3487 2088 220 2205 2520 2807 802 3721 1054 1361 741
+4855
+97 939 2219 1044 4606 1758 4339 1320 1408 683 3151 1775 3525 1513 2213 4342 3791 4418 810 1926 4717 1946 1109 518 4129 3216 311 66 3432 4093 2509 3416 4404 4100 4459 4154 1002 3314 618 1781 3368 3769 2928 2037 426 4512 896 4217 4074 1077 1287 3935 3022 1767 3824 1667 127 4134 1733 2930 2744 3613 1490 2292 2857 1093 1590 3231 3778 2208 156 2290 493 2455 3699 290 2112 4594 3878 702 187 4536 4009 2580 1447 2977 3618 1573 2256 495 3875 4371 3480 509 1807 1481 974 3396
+2980
+69 2582 284 2913 726 732 2934 431 68 854 750 288 518 2366 2688 2303 2671 1007 1937 1107 2716 1589 1860 854 1662 384 1757 239 300 656 1489 323 257 1772 255 694 2504 2900 1124 2571 486 1585 2571 1003 971 2278 325 661 16 2261 1767 2731 582 359 604 2243 454 2072 2194 753 2439 702 1075 2408 2473 1042 121 1996 961 957
+4530
+99 251 76 1789 1142 2256 852 313 603 396 920 685 3524 2946 746 3404 4478 1518 2614 4420 3023 3932 26 1317 2653 4081 1721 4319 2088 3007 2079 2900 3258 2155 3780 3491 4410 3724 2895 4104 4119 3814 258 2204 1322 95 1078 1269 704 3691 1158 2819 2184 275 4135 3928 4356 1325 3716 1005 3424 357 2996 1243 2511 1337 3825 1482 530 2189 1055 119 1473 404 1414 2794 4120 2491 3154 3915 1652 4311 2203 3835 56 900 2325 3503 1316 1510 3599 209 1866 2064 543 3468 3400 4367 4041 3930
+4877
+73 1014 3896 1010 64 4400 3569 4868 1585 1236 4239 1145 881 1111 4302 3131 3432 3750 3424 2581 3485 719 4097 1702 1687 4363 1039 1487 4791 3354 289 2002 4368 193 3896 439 600 3472 1314 3069 715 675 4213 1596 2671 4522 734 1225 3394 4158 4690 2886 884 3910 595 3456 4280 2518 65 201 995 1239 3087 1370 1431 2105 1808 2915 700 3121 1106 1414 3795 441
+4828
+94 1875 3922 651 14 2682 556 2276 4065 1075 1009 3563 3382 4541 4757 1820 116 848 2051 1908 2445 3141 3531 3999 3869 180 3744 1372 765 3135 3376 4644 1277 2469 1562 2387 1418 2117 930 655 3191 1938 485 2841 1651 413 4660 2862 1260 2978 1037 4800 2386 4567 3971 1426 1015 3982 3894 1779 3385 2441 2690 929 1177 4251 3315 3691 1539 4244 4345 997 2450 1097 3837 368 2605 4764 3229 132 2914 534 104 1567 272 342 4089 1286 591 3154 4160 3975 1862 2021 76
+4898
+99 876 816 2952 4862 3366 1592 1827 26 3478 3620 354 1238 80 507 3740 2729 1016 1361 1280 1385 2154 2854 3803 2091 2099 1467 4205 401 2213 2725 519 3088 3541 3841 3051 2378 534 4877 2773 4381 3969 3127 720 4048 4003 4829 2248 121 1291 3898 1505 3444 1853 409 1007 4322 2246 683 4722 4458 3408 343 3017 2420 4183 1169 269 188 1517 3041 4568 587 1269 390 107 374 690 2354 494 1981 1353 2368 526 3576 2777 1902 2999 124 2585 2822 53 1464 3164 3069 3883 2818 4607 4521 3005
+5
+93 2 4 1 2 4 5 5 1 2 4 2 2 5 2 1 2 5 1 5 5 4 2 2 1 2 3 4 2 4 2 3 1 1 3 2 4 4 3 5 1 1 1 2 2 4 2 3 3 5 5 2 3 1 1 1 4 5 1 5 3 2 5 5 2 2 3 1 1 1 2 1 3 4 4 5 2 2 2 4 1 3 3 1 1 5 3 4 4 3 1 1 4 5
+3773
+96 3143 264 3283 435 301 390 1377 946 2380 1881 95 1416 1406 2969 1680 3439 404 1255 2808 2519 1191 720 1420 1170 17 1208 1210 2015 2623 1414 2369 527 1677 1878 3269 512 803 873 1457 3182 2753 1551 3133 2693 3054 3347 2358 3457 3137 3700 738 554 2954 692 259 2970 1900 1468 3519 749 2881 2114 1275 784 219 770 3603 1021 1642 3594 2737 2929 1371 631 383 651 2513 2740 2642 1876 1202 3379 964 382 298 1222 1887 2197 2689 1632 1480 331 3746 1289 3422 2499
+4065
+99 1896 1313 1991 1935 103 2937 3479 2274 647 3895 1963 2414 453 1167 2127 2173 1754 3718 2488 3703 1262 2383 3370 2395 3532 414 185 332 2395 630 1952 3233 1943 2885 44 987 1756 3522 2203 1344 2294 100 2700 2746 1267 761 853 1962 3420 3340 1599 616 600 903 1952 3073 258 2136 3404 2652 2766 1290 1819 3650 109 1862 3578 806 261 1715 2150 2554 1815 784 176 3081 486 1029 977 2847 3310 1517 3462 2851 2419 1348 1858 2676 2425 1196 204 1125 1428 965 709 478 1768 3229 226
+4945
+100 4414 606 2297 3286 2826 4899 194 3217 3331 518 1844 3904 2734 4620 4588 1604 3760 2757 3438 4740 2016 1833 717 4148 2424 4113 1819 3736 127 1393 4804 877 3280 2155 4162 1160 2108 692 4377 494 1209 2557 734 279 2231 1658 1883 2327 4414 375 3404 2766 2207 4120 1969 4630 4570 3787 4702 4696 1516 897 627 4795 3052 1126 2292 1496 1817 1723 3271 4308 616 341 4586 2847 1999 2805 1510 1467 3179 4913 570 1722 425 2538 2688 49 2661 3726 1081 514 4623 1707 1645 4011 4114 3936 561 986
+4373
+84 2964 1529 1199 2546 1282 639 327 3906 3691 4201 1701 2027 767 1885 2758 5 1855 3754 43 2021 3195 2780 3297 1799 3664 3014 1030 3284 4195 4197 3327 2785 1798 598 1403 3525 1682 2175 3058 1000 2003 831 3472 2769 2716 1856 3219 643 1236 3261 2664 503 2114 2033 2301 1850 673 3776 761 494 3600 160 3724 1470 758 1200 622 2439 3820 4125 3884 1449 582 2983 4217 3743 465 3062 13 2147 2396 3122 2649 582
+4661
+98 640 3305 1882 3852 512 4337 1450 339 3073 859 3861 3528 4244 848 2903 2138 249 1313 3968 1347 3623 3011 2953 3237 554 949 1489 3013 4420 3408 195 2585 2052 4263 1776 89 1464 3225 427 4537 1609 1814 929 1192 2661 3832 855 435 2670 2348 1781 1632 2884 2259 207 3438 733 3882 1789 491 155 4170 3076 2206 1297 2377 2294 2761 3127 247 162 75 2060 1090 3453 2246 260 4307 206 2930 4181 1986 2087 2403 1770 2293 1179 2502 3700 493 518 3854 1 3593 3585 1298 3495 3405
+4791
+73 1945 1545 4018 4013 1879 1141 2061 1294 3048 3098 4340 2429 2319 321 3099 4505 3175 3225 4275 1608 2889 2902 2407 727 861 3003 568 2374 3503 2348 2144 656 4547 2025 532 1635 3820 2592 2928 2076 1553 2477 368 4526 3452 3466 103 2490 2554 241 4097 651 3143 1713 2032 4003 579 3254 2240 4081 810 247 600 566 2271 1786 2855 1954 4377 991 4684 1793 4122
+4669
+97 4656 4151 61 4258 961 3852 3873 1001 1488 1739 775 4008 2246 4508 3044 2761 1711 1709 1761 636 3366 4336 1912 3069 4594 2199 2633 1150 1124 2141 774 668 1622 834 256 2139 4242 3685 3139 618 754 3470 4625 2556 3308 2999 648 4575 4264 1965 99 2517 1188 2010 916 1112 3765 3105 2261 4445 576 2591 443 1754 2982 698 3892 2111 4382 1919 2285 24 719 2240 2136 3584 126 2783 3046 3947 4304 3144 1794 822 41 2267 1934 3805 259 3751 3138 835 1230 3580 2145 3768 3835
+4758
+99 1364 2993 2556 923 299 722 1241 1722 3222 4246 1787 2864 3761 3097 588 973 674 1719 3606 2178 1302 3979 2286 4315 4569 655 3656 2987 4357 1389 3715 963 4382 3100 3473 1510 3821 1544 61 2284 2619 1847 1978 1621 1773 2565 4182 4034 1113 4617 1453 2415 3837 3738 3559 477 1223 4044 293 821 674 837 3371 1885 3936 2086 224 2998 459 284 2112 3077 3718 4089 4697 732 3483 950 8 4595 808 3048 3839 4645 3616 4227 1951 80 3512 2244 2488 1016 3080 1101 4488 2258 16 4712 2085
+4103
+97 1562 1785 1124 270 71 3000 1211 2980 3188 2137 4011 1077 2653 1904 658 3186 2194 4102 1535 75 3103 3371 2970 1479 982 1367 48 2325 3647 2994 1818 3039 675 772 3308 2680 3772 2350 3490 687 383 1228 1764 3035 3132 252 4052 1222 251 1483 3230 1184 2684 2096 2662 3666 1293 540 1887 2770 3534 1535 1705 2039 2307 2844 615 3909 1090 2 2426 1472 3163 86 2337 2191 2272 2285 1243 2522 1598 2303 1536 179 2229 94 1675 3521 634 1392 18 1998 2926 1723 4036 3063 463
+4182
+99 4137 2860 1084 2086 2910 3913 3519 985 3206 3245 1422 2161 3727 243 799 1270 3611 1282 3076 3836 3092 2333 1200 708 2461 1567 2896 2495 3876 3657 4150 3830 778 3677 1733 2131 1851 1069 3115 874 2758 2980 1478 2302 1666 2277 3571 1094 3558 2465 3374 912 3241 3017 1619 1520 401 2959 4014 94 877 2425 2367 1654 1919 2543 3784 3769 2056 1160 3086 631 4140 382 2932 1623 2658 764 1161 477 3228 352 1388 2287 3368 1451 2250 3768 2853 525 2306 2173 2950 3116 3826 3312 1477 1871 1343
+4047
+94 607 3345 2204 2387 1541 2935 3589 3379 806 2179 433 2476 425 2714 2843 1061 1827 2347 1960 2853 2008 2287 2598 995 1368 3267 805 3711 876 1342 2855 1482 639 1011 66 2424 143 3654 1999 1192 2029 2675 3667 2453 1342 2706 3758 3412 1250 1914 2217 3501 153 1012 692 1764 231 1740 1427 1350 3082 479 2831 3964 1733 3140 2584 1875 2990 780 3066 972 3698 2929 3668 992 1832 3378 600 3325 1489 2817 2778 1641 25 3469 3649 499 1161 1272 1848 439 1750 875
+4962
+93 710 4598 4646 3491 4666 3351 1064 2915 1409 3631 331 2416 753 1051 1825 4643 2740 2553 133 501 2471 3961 4843 1172 2173 725 1451 3741 4829 3000 4906 1060 3119 4589 4550 2822 3462 651 1258 4870 4765 2072 2807 556 3122 4631 720 899 2706 852 1883 214 4812 2248 1386 2507 2972 2836 1285 3322 1357 1712 4382 4475 1338 4453 2818 321 626 4075 712 912 1668 3518 1951 4790 3671 2670 1210 1414 3522 3577 1627 3855 862 3496 1399 4317 1854 3167 2676 3210 4878
+4075
+89 2610 3685 359 647 3259 1549 1870 64 2691 3670 3074 2485 1826 3369 2616 1204 307 1455 3887 2078 2569 413 2684 3757 305 1695 1896 3459 100 2593 3192 3312 2804 3550 485 1988 1023 2355 2051 3714 1949 1651 2725 302 944 1265 1505 1250 3321 1918 3929 2417 2932 3139 2098 3839 1360 521 3222 2061 3113 2339 1297 1841 1813 1782 355 3438 663 3007 3678 3213 582 2327 3514 1525 118 1546 3376 3439 3463 3831 1780 2922 3496 3877 2685 780 322
+4779
+84 1694 4237 94 2942 1617 73 1488 536 331 494 4608 731 203 2331 917 2777 1260 1020 1653 920 3915 137 4274 1144 4253 3890 3157 1804 1298 802 3054 1225 3272 3147 4166 109 3219 874 644 1783 4381 3486 2514 2817 1037 1664 814 2296 2683 2466 1449 1818 836 943 1195 309 3066 2586 346 4363 3387 1633 3821 113 1 3207 221 1453 2315 3877 1470 150 2583 2217 2966 1853 3880 3779 2382 1783 4478 3830 1835 534
+4531
+94 2205 44 2675 1036 1371 3116 3627 514 209 3798 2431 2713 2019 1013 4336 4361 3644 1786 1999 1346 4241 4261 826 2591 2964 1197 3809 144 3593 920 2520 1266 2889 664 4227 1654 1174 717 2168 3308 1909 1993 1490 3927 400 3220 3757 4043 2400 3150 2783 4036 2879 1003 2095 3237 2199 1372 3381 3186 4217 1369 1846 4501 3958 3467 1623 2526 4183 3790 1303 1560 3177 187 2882 3577 3406 2107 483 3201 725 3266 2705 998 1663 2194 4235 1257 960 479 1837 645 3773 3683
+4742
+93 1383 3780 1177 2511 3832 3491 890 680 1203 3917 4444 2592 3347 901 906 3260 888 1628 4302 386 4505 2145 264 1423 3618 2132 1438 2775 3434 1961 1651 74 3180 2828 24 4451 3758 913 388 218 2269 2271 249 3055 3171 1155 1572 1499 222 3314 1884 4727 716 4330 3589 1774 3901 2466 1988 2592 4426 3639 2666 2863 3906 2689 2572 2921 1042 399 578 750 2670 3009 3805 3280 1603 2816 36 1824 1387 4102 3990 4285 3689 2836 3498 2847 2742 743 2879 2425 1821
+4434
+97 740 3096 3017 2458 1580 3164 3347 1956 110 1476 2600 865 3290 1279 250 1559 827 1483 1309 2922 666 1939 4312 1657 3828 2994 2739 3902 2994 3063 2123 3833 1724 806 1857 3403 4069 869 1025 4178 2345 3624 608 1200 568 957 2858 1394 2539 4166 4316 3204 1670 4293 426 1063 2952 3265 630 1611 1893 2853 1010 3716 3658 2966 2684 3292 3834 3808 3135 1844 2998 3742 3143 3565 364 1566 525 2903 1397 506 1772 3067 464 2298 4229 3415 1228 525 591 3120 3377 1700 2501 2700 331
+4596
+97 4572 254 4224 1186 2843 2525 1267 337 801 4446 1208 339 841 97 3922 2629 424 1843 3905 580 1935 4547 2459 76 2175 3659 2058 2031 3235 4087 610 3211 4340 2185 4396 4534 114 3014 274 914 2864 3429 3200 3704 3525 2525 3684 3949 4368 344 1880 3654 294 1690 3729 4416 752 3138 1850 1338 2628 4408 4548 4319 1996 1700 4256 4057 117 1882 2323 332 714 926 1387 4239 3451 474 943 574 817 2822 4227 3058 4511 3359 2877 2614 3848 2079 3951 1880 1890 1255 1602 1237 306
+4962
+100 3042 785 4408 1662 1351 955 1541 908 3194 1560 2793 4834 2639 2480 4930 3182 1071 37 3772 984 4444 391 1900 3958 666 1423 3027 2079 4536 2109 505 2615 3378 4912 4760 250 1389 1822 1157 104 3382 3950 4937 1058 1951 4904 4239 3021 4940 3532 4004 4905 3923 941 4385 110 2848 2449 2188 2421 80 3176 557 3941 3126 354 4190 4514 2175 384 139 594 4817 113 2135 1805 539 1895 347 1000 465 4834 943 4871 1297 365 502 4144 3297 2690 1602 3860 903 2642 3322 4512 2995 2549 4547 207
+88
+88 83 67 43 30 67 75 8 17 35 5 25 10 62 63 76 75 28 26 42 25 80 24 60 12 15 74 73 47 18 84 62 12 62 81 41 16 43 24 33 77 28 57 63 65 7 50 52 11 51 69 11 42 4 46 29 82 32 77 16 49 72 77 36 22 45 76 37 87 11 45 76 15 13 50 79 84 75 18 70 38 86 80 55 1 37 60 58 44
+4012
+99 2217 2334 3630 3901 765 139 3848 3335 471 375 502 13 3442 984 3353 300 1285 1867 1097 1493 2270 3156 491 2392 4 2832 1105 415 550 1247 2662 2299 3112 2280 1719 3408 1950 1087 2731 2420 1461 2764 2432 422 3747 1305 722 552 3171 1818 2044 1429 961 2066 3820 496 885 444 910 967 1222 3572 2797 322 1371 503 3729 3320 1589 1979 1728 2581 731 3691 3003 4009 983 3724 548 3686 1061 2592 1102 1553 645 441 2048 1062 417 2958 1560 1170 2049 3888 1491 3419 378 740 2726
+4807
+80 3610 1473 3861 3193 2706 3130 4444 3652 136 1712 4800 3323 526 4356 1613 3198 3167 1538 1041 4361 72 3565 1221 158 2489 1130 2589 4716 2923 4197 3595 1725 1201 2988 449 4245 1310 85 3428 1445 2136 3421 300 2661 2969 2251 1391 1667 3788 2431 1560 3860 1527 2780 4356 4015 3909 2137 3923 2024 1865 3049 4087 3065 1229 67 2502 2539 151 1123 4322 2625 75 4621 479 3043 2404 1869 241 1384
+5000
+97 4795 555 3393 295 875 1957 968 4457 3156 4226 1479 2312 1022 1027 4629 2107 2928 3820 2401 346 2083 3067 4347 4741 2975 1973 1001 2569 3407 1255 695 4554 1809 4087 1200 4036 2395 2167 3492 550 2744 1322 2861 3766 3701 2490 2224 1628 2661 4624 3325 1095 4042 4024 835 2017 2348 3187 4585 754 4442 279 307 2602 717 2858 1637 3111 24 1481 12 2768 4154 2872 2885 2854 361 1460 834 3021 2435 510 4115 1477 4533 1301 3493 1880 4488 4429 3986 3929 4707 644 1530 1775 3502
+5000
+100 3289 1572 4357 414 695 2932 4219 1031 4755 2149 4838 1840 2527 2450 64 2392 1357 1699 3739 862 2755 911 781 4025 1192 4129 733 3354 3270 903 1160 2910 2474 516 3324 3169 4800 3894 551 4554 1042 1740 2745 4921 4189 2808 2312 1898 859 1050 2759 4965 3312 3540 3989 4503 2668 4722 4208 2289 624 368 1551 4450 2235 1226 2618 3386 119 4520 4291 1160 1260 2036 2432 1800 1195 4743 3697 2053 2144 1456 3370 455 1347 2358 1310 366 3431 1869 4007 407 3588 1909 4856 823 3134 3825 560 4604
+4683
+96 1237 815 4142 302 3704 1932 806 33 1455 3958 3046 712 2268 3940 1389 4671 488 1780 1031 3200 4316 1512 3345 3456 4148 2310 806 724 2670 1951 699 3568 2766 157 3532 1448 1750 4337 1480 2867 3611 4187 3578 857 3105 4629 844 3592 1725 1875 2108 1019 3386 431 4474 2512 2740 259 2897 389 1871 3596 3956 4636 3752 2466 1062 481 2119 2542 3347 708 1707 2241 1564 129 2186 2070 3720 3572 3944 807 4591 2308 1237 4043 4481 3639 4301 2695 3689 1489 1607 2623 1103 337
+4736
+99 3842 3755 1957 825 1641 4730 1659 2468 1562 3602 501 1825 153 70 1559 1785 3130 3817 443 948 4620 2178 1417 1673 4346 1870 354 3082 2807 2614 1158 632 1633 1835 1456 3273 1828 1834 4460 2109 700 224 2653 4308 3749 2931 1357 862 2011 519 1809 1894 2697 1946 3566 2306 2535 2639 652 605 517 529 1236 2149 2363 1411 4141 2910 3244 3864 3738 2663 2807 1655 2235 1819 3305 2311 2680 580 2829 3208 1193 4245 3873 23 535 1671 1381 4642 2275 1897 434 2230 4045 2797 2360 2169 970
+4922
+95 2027 2174 4442 4398 1679 1144 3293 3073 3617 3567 3173 2346 3748 2539 1295 2657 2581 1350 3462 4190 3496 4766 1106 4175 3302 3380 4292 1165 2979 1181 3058 83 3072 2296 4198 4750 3157 2568 2618 1851 1213 868 4196 4678 3124 286 2130 500 1636 669 4689 209 512 591 4101 3531 3970 3471 4696 2026 4369 2549 1826 2518 4562 1101 2063 2797 3387 4680 4365 4317 344 3639 4072 3467 3642 997 3685 73 1666 3451 4922 1895 3759 4100 222 2524 2366 4917 4549 1812 2261 1170 4047
+4494
+100 2334 10 615 2199 2111 2272 2838 1992 3606 2107 2824 1239 1278 3026 4052 4126 2359 53 3094 1065 2112 3484 1350 4400 3689 2470 1038 3343 1874 1857 2129 4207 3082 2743 3128 1914 1736 2687 3905 847 1515 2234 3301 2793 1981 2858 2424 4339 2911 2240 910 1744 1229 3475 1649 1640 1450 2686 488 45 1264 2616 974 1067 2081 4101 2980 3816 3509 2391 169 530 1346 3469 3322 3327 3049 2467 4387 1465 1428 2018 4424 2657 999 1579 4296 3664 986 1505 3709 3466 4121 1404 38 1707 1010 3018 1028 1240
+4499
+99 3836 3669 4365 3231 4143 3347 3255 337 679 2920 4341 3076 2600 4163 3985 1964 2935 2319 3262 1429 2029 1948 3242 1890 931 1228 3889 886 2532 3806 2115 3395 3 3507 2127 4146 3882 882 1510 61 829 1351 3136 3429 2542 4148 2420 977 1967 1182 3932 1024 158 2674 2913 1088 3902 3830 3500 3461 164 2642 3883 167 1650 1510 4312 1032 3919 1322 1092 248 4199 1256 704 3768 2431 151 245 4398 1333 4176 2449 3017 3878 2389 4104 308 1719 3104 796 1883 2773 179 2049 4422 3216 3388 2481
+2958
+99 1749 997 114 322 2834 668 1507 1156 2919 1584 2097 799 309 2775 2363 2820 628 2538 1349 875 394 210 2119 2458 378 88 1275 1360 2363 1516 329 1842 242 1130 2163 117 1797 1399 1960 2446 712 1786 974 1020 2290 378 1569 2918 2915 648 1522 350 1545 682 537 1923 1457 2499 324 1549 1056 1340 432 1297 2469 324 2102 1995 1722 1791 1482 163 619 185 1871 2908 562 481 597 518 1128 2118 1555 403 529 2091 2325 1985 1631 378 1264 416 2405 2383 2401 2603 2707 2232 1639
+4998
+99 447 3234 1841 4724 4483 1451 4374 2863 2319 1698 1554 228 2796 4265 4439 628 3346 4058 800 2200 2025 3088 4083 551 2594 744 2845 608 3203 1083 3236 3649 1333 2092 390 817 3542 4763 3679 862 1462 2249 3103 4258 1515 4558 1901 1877 633 2700 4076 2657 2804 177 223 2413 2934 83 3021 1138 1166 3272 1802 4512 365 2191 2344 922 1955 3039 3797 433 289 1901 4690 3817 3474 3606 695 4106 3321 1787 3778 1126 1963 1016 555 1912 1099 3575 3050 4278 3862 4851 807 4226 4058 3150 2163
diff --git a/codejam_2008/src/y2008round1b/b.rs b/codejam_2008/src/y2008round1b/b.rs
index 252377e..66eccd0 100644
--- a/codejam_2008/src/y2008round1b/b.rs
+++ b/codejam_2008/src/y2008round1b/b.rs
@@ -43,7 +43,6 @@ pub fn solve_all_cases()
 fn solve(a: usize, b: usize, p_lower_bound: usize, sieve: &Sieve) -> usize
 {
     //First step, find  P <= primes <= interval
-    let lower_bound_primes = p_lower_bound;
     let upper_bound_primes = b - a;
 
     let interval_size = b - a + 1;
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
new file mode 100644
index 0000000..1002de0
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -0,0 +1,40 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use itertools::Itertools;
+
+/*
+Binary Interval tree using an array
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008round1b",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let k: usize = reader.read_int();
+
+                let nums = reader.read_num_line();
+                assert_eq!(nums[0], nums.len() - 1);
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no,
+                         solve(k, &nums[1..]).iter().join(" ")).unwrap();
+            }
+        },
+    );
+}
+
+fn solve(k: usize, indices: &[usize]) -> Vec<usize>
+{
+    let mut bt = vec![0; k*k - 1];
+
+    vec![1, 2]
+}

From 0bcbbe7bbb336b079bf06f1efdf05e89c91eecdb Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 20 Feb 2019 13:26:11 -0300
Subject: [PATCH 043/122] c

---
 .../src/y2008round1b/C-small-practice.in      |   6 +
 codejam_2008/src/y2008round1b/b.rs            |  20 +-
 codejam_2008/src/y2008round1b/c.rs            | 213 +++++++++++++++++-
 3 files changed, 222 insertions(+), 17 deletions(-)

diff --git a/codejam_2008/src/y2008round1b/C-small-practice.in b/codejam_2008/src/y2008round1b/C-small-practice.in
index d9c4ae2..ae44bec 100644
--- a/codejam_2008/src/y2008round1b/C-small-practice.in
+++ b/codejam_2008/src/y2008round1b/C-small-practice.in
@@ -1,3 +1,9 @@
+2
+5
+5 1 2 3 4 5
+15
+4 3 4 7 10
+
 100
 3573
 97 3155 3200 88 2161 3401 855 2179 1373 454 2933 3177 3279 1279 1887 3550 3269 3265 2905 2410 3013 750 1967 2212 1933 1955 961 2189 3043 198 318 2254 3352 59 2341 2054 1 3195 774 1489 191 249 1092 11 1527 3094 103 1222 2900 3122 173 2339 298 2140 1092 2230 636 2052 960 221 2249 1278 2474 2027 1451 1357 623 1452 978 1396 2940 1283 1644 573 1294 3170 93 1396 934 3107 1059 1221 1987 1356 3360 3079 127 538 1557 1086 873 348 2478 3461 2489 356 1244 3111
diff --git a/codejam_2008/src/y2008round1b/b.rs b/codejam_2008/src/y2008round1b/b.rs
index 66eccd0..9ca9d10 100644
--- a/codejam_2008/src/y2008round1b/b.rs
+++ b/codejam_2008/src/y2008round1b/b.rs
@@ -1,8 +1,8 @@
 use codejam::algo::graph::disjointset::DisjointSet;
 use codejam::util::codejam::run_cases;
 
-use std::io::Write;
 use primal::Sieve;
+use std::io::Write;
 
 /*
 Disjoint set
@@ -18,7 +18,6 @@ pub fn solve_all_cases()
         |reader, buffer| {
             let t = reader.read_int();
 
-
             for case_no in 1..=t {
                 let (a, b, p) = reader.read_tuple_3();
 
@@ -28,13 +27,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(
-                    buffer,
-                    "Case #{}: {}",
-                    case_no,
-                    solve(a, b, p, &sieve)
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve(a, b, p, &sieve)).unwrap();
             }
         },
     );
@@ -49,7 +42,10 @@ fn solve(a: usize, b: usize, p_lower_bound: usize, sieve: &Sieve) -> usize
 
     let mut ds = DisjointSet::new(interval_size);
 
-    for prime in sieve.primes_from(p_lower_bound).take_while(|x| *x <= upper_bound_primes ) {
+    for prime in sieve
+        .primes_from(p_lower_bound)
+        .take_while(|x| *x <= upper_bound_primes)
+    {
         let a_mod_prime = a % prime;
         let interval_p = if a_mod_prime == 0 {
             a
@@ -59,8 +55,8 @@ fn solve(a: usize, b: usize, p_lower_bound: usize, sieve: &Sieve) -> usize
 
         let set_to_merge = interval_p - a;
 
-        for i in (interval_p - a + prime..interval_size ).step_by(prime) {
-            ds.merge_sets(i , set_to_merge );
+        for i in (interval_p - a + prime..interval_size).step_by(prime) {
+            ds.merge_sets(i, set_to_merge);
         }
     }
     ds.number_of_sets()
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 1002de0..4eefbcb 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -1,6 +1,7 @@
 use codejam::util::codejam::run_cases;
-use std::io::Write;
 use itertools::Itertools;
+use std::cmp::min;
+use std::io::Write;
 
 /*
 Binary Interval tree using an array
@@ -8,7 +9,9 @@ Binary Interval tree using an array
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice", "C-large-practice"],
+        &[
+            "C-small-practice", // "C-large-practice"
+        ],
         "y2008round1b",
         |reader, buffer| {
             let t = reader.read_int();
@@ -25,16 +28,216 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {}", case_no,
-                         solve(k, &nums[1..]).iter().join(" ")).unwrap();
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(k, &nums[1..]).iter().join(" ")
+                )
+                .unwrap();
             }
         },
     );
 }
 
+//A binary tree represented in an array
+struct BinaryTree
+{
+    data: Vec<i64>,
+    //Number of elements, not the size of the tree
+    num_elems: usize,
+    num_levels: usize
+}
+
+impl BinaryTree
+{
+    fn new(num_elems: usize) -> Self
+    {
+        let mut levels = 1;
+        while 1 << (levels-1) < num_elems {
+            levels += 1;
+        }
+        BinaryTree {
+            data: vec![0; 1 << levels ],
+            num_elems,
+            num_levels: levels
+        }
+    }
+
+    fn set(&mut self, idx: usize, val: i64)
+    {
+        assert!(idx < self.num_elems);
+        let mut i = idx + (1 << (self.num_levels -1));
+        let old_val = self.data[i];
+        self.data[i] = val;
+        while i > 0 {
+            //divide by 2
+            i >>= 1;
+            self.data[i] += val - old_val;
+        }
+    }
+
+    fn sum_to(&self, to: usize) -> i64
+    {
+        //beginning of last row, leaves
+        let start = 1 << (self.num_levels -1);
+        let mut i = to + start;
+        let mut sum = self.data[i];
+        while i > 1 {
+            println!("I is {}  {:0>width$b}", i, i, width=7);
+
+            if i & 1 > 0 {
+                sum += self.data[i - 1];
+            }
+            //divide by 2
+            i >>= 1;
+        }
+
+        sum
+    }
+
+    fn debug_print(&self)
+    {
+        println!("Binary tree: {:?}", self.data);
+
+        let mut i = 1;
+        let mut level = 0;
+        while i < self.data.len() {
+            let stop = min(self.data.len() - i, 1 << level);
+            println!("Level {} = {:?}", level, &self.data[i..i + stop]);
+            level += 1;
+            i += stop;
+        }
+    }
+}
+
 fn solve(k: usize, indices: &[usize]) -> Vec<usize>
 {
-    let mut bt = vec![0; k*k - 1];
+    let mut bt = vec![0; k << 1];
+
+    // (0) 000
+    // (1) 001  (2)   010
+    // (3) 011  (4) 100  (5) 101 (6) 110
+
+    // (1) 001 [0..=7]
+    // (2) 010 [0..=3] (3) 011 [4..=7]
+    // (4) 100 [0..=1] (5) 101 [2..=3] (6) 110 [4..=5] (7) 111
+    // (8) 1000 [0..=0] .... (15) 1111
+
+    // query for up to index x
+    // x=0 = 1000
+    // x=1 = 0100
+    // x=2 = 0100 + 1010
+    // x=3 = 0010
+    // x=4 = 0010 + 1000
+    // x=5 = 110
+    // x=6 = 0010 + 0110 + 1110
+    // x=7 = 0001
+
+    //parent is (i) / 2
+    //left child is =(2*i);
+    //and right_son=(2*i)+1;
+
+    // query(0 to 7) = 4 + 2 + 1
+    // query(0 to 5) = 4 + 1
+
+    for i in k..bt.len() {
+        //add last row
+        bt[i] = 1;
+        let mut p = i;
+        while p > 0 {
+            //divide by 2
+            p >>= 1;
+            bt[p] += 1;
+        }
+    }
+
+    debug!("Binary tree: {:?}", bt);
+
+    let mut i = 1;
+    let mut level = 0;
+    while i < bt.len() {
+        let stop = min(bt.len() - i, 1 << level);
+        debug!("Level {} = {:?}", level, &bt[i..i + stop]);
+        level += 1;
+        i += stop;
+    }
+
+    assert_eq!(bt[1], k);
+
+    let mut deck = vec![0; k];
+
+    let mut cur_pos = 0;
+    for card_no in 1..k {
+        //for sum, write in binary 1
+
+    }
 
     vec![1, 2]
 }
+
+#[cfg(test)]
+mod test_binary_tree
+{
+    use super::*;
+
+    #[test]
+    fn test_bt()
+    {
+        let mut bt = BinaryTree::new(9);
+                bt.debug_print();
+
+        assert_eq!(5, bt.num_levels);
+        bt.set(3, 4);
+        bt.set(8, 1);
+        bt.set(5, 3);
+        bt.set(1, 7);
+
+        bt.debug_print();
+
+        assert_eq!(0, bt.sum_to(0));
+        assert_eq!(7, bt.sum_to(1));
+        assert_eq!(7, bt.sum_to(2));
+        assert_eq!(11, bt.sum_to(3));
+        assert_eq!(11, bt.sum_to(4));
+        assert_eq!(14, bt.sum_to(5));
+        assert_eq!(14, bt.sum_to(6));
+        assert_eq!(14, bt.sum_to(7));
+        assert_eq!(15, bt.sum_to(8));
+
+        bt.set(0, -8);
+
+        bt.debug_print();
+
+        assert_eq!(-8, bt.sum_to(0));
+        assert_eq!(-1, bt.sum_to(1));
+        assert_eq!(-1, bt.sum_to(2));
+        assert_eq!(3, bt.sum_to(3));
+        assert_eq!(3, bt.sum_to(4));
+        assert_eq!(6, bt.sum_to(5));
+        assert_eq!(6, bt.sum_to(6));
+        assert_eq!(6, bt.sum_to(7));
+        assert_eq!(7, bt.sum_to(8));
+    }
+
+    fn test_random()
+    {
+        let mut rng: StdRng = SeedableRng::seed_from_u64(42);
+
+        let num_elems_gen = Uniform::from(1..10usize);
+        let values_gen = Uniform::from(-10..10i64);
+
+        for _ in 0..100 {
+            let size = num_elems_gen.sample(&mut rng);
+            let mut bt = BinaryTree::new(size);
+
+            let mut check = vec![ 0; size];
+
+            for _ in 0..100 {
+                let pos = rng.gen_range(0, size);
+                let val = values_gen.sample(&mut rng);
+
+                check[pos] = val;
+            }
+        }
+}

From 1cf2f4f4f282bf1d4ca589f31b99e98426addc47 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 20 Feb 2019 22:14:52 -0300
Subject: [PATCH 044/122] c

---
 codejam_2008/Cargo.lock            |   1 +
 codejam_2008/Cargo.toml            |   3 +-
 codejam_2008/src/y2008round1b/c.rs | 138 +++++++++++++++++++++++++++--
 3 files changed, 135 insertions(+), 7 deletions(-)

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index 51a567c..d1855da 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -73,6 +73,7 @@ dependencies = [
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "rust-algorithm-problems 0.1.0",
  "superslice 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index 2ea91c1..c16aa92 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -13,4 +13,5 @@ superslice = "*"
 hungarian = "1.1.0"
 bit-vec = "*"
 bit-set = "*"
-primal = "*"
\ No newline at end of file
+primal = "*"
+rand = "*"
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 4eefbcb..8b500f6 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -77,6 +77,54 @@ impl BinaryTree
         }
     }
 
+    //assumes sums are positive
+    //returns smallest index such that sum(0..=index) >= target_sum
+    fn lower_bound(&self, target_sum: i64) -> usize
+    {
+        let mut range_width = 1 << (self.num_levels - 1);
+        //exclusive upper bound
+        let mut range_to = range_width;
+
+        if self.data[1] < target_sum {
+            //fail with a sensible value
+            return self.num_elems;
+        }
+        let mut cur_node = 1;
+        let mut target_sum = target_sum;
+        while range_width >= 2 {
+            println!("Cur node {} target sum {} range width {} range to {} val @ cur_node {}",
+            cur_node, target_sum, range_width, range_to, self.data[cur_node]);
+
+            if self.data[cur_node] == target_sum {
+                return min(self.num_elems-1, range_to-1);
+            }
+
+            range_width /= 2;
+
+            //lhs
+            if self.data[cur_node*2] >= target_sum {
+                cur_node = cur_node * 2;
+                assert!(range_width < range_to);
+                range_to -= range_width;
+            } else {
+                //subtract lhs
+                target_sum -= self.data[cur_node*2];
+                cur_node = cur_node * 2 + 1;
+
+                assert!(self.data[cur_node] >= target_sum);
+            }
+
+
+        }
+
+        range_to-1
+    }
+
+    fn sum(&self) -> i64
+    {
+        self.data[1]
+    }
+
     fn sum_to(&self, to: usize) -> i64
     {
         //beginning of last row, leaves
@@ -84,7 +132,7 @@ impl BinaryTree
         let mut i = to + start;
         let mut sum = self.data[i];
         while i > 1 {
-            println!("I is {}  {:0>width$b}", i, i, width=7);
+            debug!("I is {}  {:0>width$b}", i, i, width=7);
 
             if i & 1 > 0 {
                 sum += self.data[i - 1];
@@ -180,6 +228,11 @@ fn solve(k: usize, indices: &[usize]) -> Vec<usize>
 mod test_binary_tree
 {
     use super::*;
+    use rand::distributions::{Distribution, Uniform};
+    use rand::prelude::StdRng;
+    use rand::SeedableRng;
+    use rand::Rng;
+
 
     #[test]
     fn test_bt()
@@ -220,24 +273,97 @@ mod test_binary_tree
         assert_eq!(7, bt.sum_to(8));
     }
 
+    #[test]
     fn test_random()
     {
         let mut rng: StdRng = SeedableRng::seed_from_u64(42);
 
-        let num_elems_gen = Uniform::from(1..10usize);
-        let values_gen = Uniform::from(-10..10i64);
+        let num_elems_gen = Uniform::from(1..100usize);
+        let values_gen = Uniform::from(-100..100i64);
 
-        for _ in 0..100 {
+        for _ in 0..10 {
             let size = num_elems_gen.sample(&mut rng);
             let mut bt = BinaryTree::new(size);
 
-            let mut check = vec![ 0; size];
+            let mut check = vec![0; size];
 
-            for _ in 0..100 {
+            for _ in 0..size {
                 let pos = rng.gen_range(0, size);
                 let val = values_gen.sample(&mut rng);
 
                 check[pos] = val;
+                bt.set(pos, val);
+
+                for i in 0..size {
+                    assert_eq!(check.iter().take(i + 1).sum::<i64>(),
+                               bt.sum_to(i));
+                }
             }
         }
+    }
+
+    #[test]
+    fn test_small()
+    {
+        let mut bt = BinaryTree::new(1);
+        bt.set(0, -3);
+        assert_eq!(bt.sum_to(0), -3);
+
+        bt.set(0, 7);
+        assert_eq!(bt.sum_to(0), 7);
+    }
+
+    #[test]
+    fn test_big()
+    {
+        let mut bt = BinaryTree::new(1_000_000);
+        bt.set(0, -3);
+        assert_eq!(bt.sum_to(0), -3);
+
+        bt.set(1_000_000 - 1, 7);
+        assert_eq!(bt.sum_to(1_000_000-1), 4);
+    }
+
+    #[test]
+    fn test_lower_bound_exact() {
+        let size = 100;
+        let mut bt = BinaryTree::new(size);
+
+        for i in 0..size {
+            bt.set(i, (2*(i+1)) as i64);
+        }
+
+        for i in 0..size {
+            //sum formula
+            let target_sum = ((i+1)*(i+2)) as i64;
+            println!("sum of 2+4+...+ for index {} should be {}",
+            i, target_sum);
+            assert_eq!(bt.lower_bound(target_sum), i as usize);
+        }
+    }
+
+    #[test]
+    fn test_lower_bound_inexact() {
+        let size = 5;
+        let mut bt = BinaryTree::new(size);
+
+        for i in 0..size {
+            bt.set(i, (2*(i+1)) as i64);
+        }
+
+        //2+4+6+8+10
+        assert_eq!(bt.lower_bound(1), 0);
+        assert_eq!(bt.lower_bound(3), 1);
+        assert_eq!(bt.lower_bound(5), 1);
+        assert_eq!(bt.lower_bound(7), 2);
+        assert_eq!(bt.lower_bound(11), 2);
+        assert_eq!(bt.lower_bound(13), 3);
+        assert_eq!(bt.lower_bound(19), 3);
+        assert_eq!(bt.lower_bound(21), 4);
+        assert_eq!(bt.lower_bound(29), 4);
+
+        assert_eq!(bt.lower_bound(30), 4);
+        assert_eq!(bt.lower_bound(31), 5);
+    }
+
 }

From 9ab4f2c013959c15003a14d73c90d2b340dfe574 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 20 Feb 2019 22:50:38 -0300
Subject: [PATCH 045/122] c

---
 .../src/y2008round1b/C-large-practice.out     | 100 ++++++++++++++
 .../src/y2008round1b/C-small-practice.in      |   6 -
 .../src/y2008round1b/C-small-practice.out     | 100 ++++++++++++++
 codejam_2008/src/y2008round1b/c.rs            | 128 ++++++++----------
 4 files changed, 259 insertions(+), 75 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1b/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1b/C-small-practice.out

diff --git a/codejam_2008/src/y2008round1b/C-large-practice.out b/codejam_2008/src/y2008round1b/C-large-practice.out
new file mode 100644
index 0000000..f4f595d
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/C-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 607
+Case #2: 455
+Case #3: 735
+Case #4: 527
+Case #5: 735
+Case #6: 471
+Case #7: 607
+Case #8: 095
+Case #9: 055
+Case #10: 663
+Case #11: 935
+Case #12: 095
+Case #13: 807
+Case #14: 143
+Case #15: 535
+Case #16: 855
+Case #17: 807
+Case #18: 607
+Case #19: 543
+Case #20: 095
+Case #21: 407
+Case #22: 951
+Case #23: 847
+Case #24: 935
+Case #25: 943
+Case #26: 471
+Case #27: 151
+Case #28: 191
+Case #29: 607
+Case #30: 343
+Case #31: 143
+Case #32: 007
+Case #33: 743
+Case #34: 407
+Case #35: 007
+Case #36: 551
+Case #37: 543
+Case #38: 063
+Case #39: 743
+Case #40: 935
+Case #41: 143
+Case #42: 455
+Case #43: 855
+Case #44: 807
+Case #45: 455
+Case #46: 351
+Case #47: 047
+Case #48: 471
+Case #49: 951
+Case #50: 343
+Case #51: 591
+Case #52: 063
+Case #53: 943
+Case #54: 095
+Case #55: 743
+Case #56: 143
+Case #57: 151
+Case #58: 255
+Case #59: 951
+Case #60: 847
+Case #61: 903
+Case #62: 471
+Case #63: 791
+Case #64: 751
+Case #65: 743
+Case #66: 463
+Case #67: 807
+Case #68: 447
+Case #69: 455
+Case #70: 751
+Case #71: 527
+Case #72: 063
+Case #73: 535
+Case #74: 735
+Case #75: 743
+Case #76: 743
+Case #77: 903
+Case #78: 751
+Case #79: 655
+Case #80: 455
+Case #81: 543
+Case #82: 791
+Case #83: 655
+Case #84: 263
+Case #85: 935
+Case #86: 527
+Case #87: 751
+Case #88: 351
+Case #89: 247
+Case #90: 607
+Case #91: 143
+Case #92: 455
+Case #93: 047
+Case #94: 455
+Case #95: 095
+Case #96: 935
+Case #97: 903
+Case #98: 527
+Case #99: 407
+Case #100: 991
diff --git a/codejam_2008/src/y2008round1b/C-small-practice.in b/codejam_2008/src/y2008round1b/C-small-practice.in
index ae44bec..d9c4ae2 100644
--- a/codejam_2008/src/y2008round1b/C-small-practice.in
+++ b/codejam_2008/src/y2008round1b/C-small-practice.in
@@ -1,9 +1,3 @@
-2
-5
-5 1 2 3 4 5
-15
-4 3 4 7 10
-
 100
 3573
 97 3155 3200 88 2161 3401 855 2179 1373 454 2933 3177 3279 1279 1887 3550 3269 3265 2905 2410 3013 750 1967 2212 1933 1955 961 2189 3043 198 318 2254 3352 59 2341 2054 1 3195 774 1489 191 249 1092 11 1527 3094 103 1222 2900 3122 173 2339 298 2140 1092 2230 636 2052 960 221 2249 1278 2474 2027 1451 1357 623 1452 978 1396 2940 1283 1644 573 1294 3170 93 1396 934 3107 1059 1221 1987 1356 3360 3079 127 538 1557 1086 873 348 2478 3461 2489 356 1244 3111
diff --git a/codejam_2008/src/y2008round1b/C-small-practice.out b/codejam_2008/src/y2008round1b/C-small-practice.out
new file mode 100644
index 0000000..4e986cc
--- /dev/null
+++ b/codejam_2008/src/y2008round1b/C-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 3249 2065 3456 1245 984 1233 1154 2888 188 3175 3552 284 2992 2196 2518 1815 470 200 448 3328 3269 212 948 440 487 2462 1848 316 3549 2777 2897 327 1992 2765 637 1 882 819 2974 374 1885 725 2554 2250 217 3513 2204 2421 2227 2300 673 1921 1360 725 2809 206 2308 1316 1336 1832 2434 160 764 1371 3234 2799 756 1208 2854 1678 1468 1340 955 2813 1349 3469 2854 94 1594 1597 2911 2717 785 968 3110 2324 2830 3325 3337 2330 2560 1540 851 779 2351 2348 3179
+Case #2: 2956 3412 4071 56 2742 2937 4117 4239 206 3256 3920 292 1673 1816 90 3649 3917 1566 3623 1143 1012 3608 2429 1160 1023 3282 3742 1344 1324 563 56 1237 435 103 3750 1388 168 3049 3178 1414 4034 3385 1810 1553 751 3509 3884 1809 140 2938 4241 739 1286 2653 1304 681 2957 1715 73 4058 627 1099 1140 863 1684 1617 3968 400 1484 4183 1634 667 1070 1429 1721 1902 3644 804 3026 3168 3532 1019 3646 2113 2924 3540 103 3357 1228 1448 2747 1753 1688 1872 3089 1787 2702 31 3015 676
+Case #3: 234 4585 1468 4667 3338 3691 1501 1047 1329 874 3388 3871 2353 507 2010 811 2388 1679 235 1541 4019 2062 2069 4414 3780 2016 629 1505 1941 1187 205 1635 12 2094 4143 93 961 183 4232 646 2389 3975 434 1556 3137 1198 1418 1525 2509 1284 2433 1952 813 699 784 4319 4313 4559 4705 2623 4036 2713 477 477 1473 2053 1316 2257 460 3534 4380 973 1282 3961 3136 3910 3310 1099 1874 1485 1459 3213 383 3542 3184 49 241 599 3744 771 660 3949 2611 2269 3398 468 1462 2766 2596
+Case #4: 1903 2622 2827 607 1493 3920 2941 878 1931 1401 2076 3186 1686 1172 265 3456 1739 3230 3174 3232 164 3872 3951 2191 3060 2276 3066 3260 297 3721 906 4557 3168 3044 3992 3942 3498 3453 4501 749 107 4443 3667 2759 4142 2092 1302 1078 269 4033 3466 3532 1459 2761 2456 99 206 4203 765 528 3358 1389 2961 1317 2077 282 1403 3220 2534 1556 703 1936 2437 3888 490 1903 1250 3360 2667 2194 931 4456 1744 3975 2764 1019 2081 4113 2179 1806 4010 27 4185 2592 1602 3696 3308 2277 3602 2811
+Case #5: 1037 1940 3101 2236 1210 365 3062 2929 3466 2795 1187 1458 1092 3483 671 2445 1695 2067 1883 1931 1725 208 141 660 1304 2168 3020 1834 2661 504 2867 951 1478 2011 1972 1376 2261 1313 2733 1314 1074 388 2733 3468 2501 2450 1537 934 261 1800 2557 2973 1561 2171 534 1424 37 1627 403 243 2571 1857 634 1034 2482 3111 2776 519 987 391 1985 95 2951 3366 3471 1460 1624 718 1480 3025 803 2390 1211 437 568 1670 3001 1687 176 1523 1199 1607 2675 594 2103 1459 114 1762
+Case #6: 2830 4243 4221 394 3222 3522 1988 3510 3214 1063 4239 599 1080 1150 3329 2562 1215 949 2147 2625 3747 4499 668 3527 517 117 3702 1576 1366 1423 1360 3926 404 1825 4425 1928 1833 3679 976 1492 3703 447 2707 3129 3838 1875 951 3959 3478 129 3862 743 577 153 2242 2795 674 2224 1398 534 2128 3278 3812 4154 3768 4042 1862 3600 4460 806 4578 96 3989 383 1935 2432 90 2241 1341 2294 99 2498 3440 1288 2391 2193 1511 1406 2722 3729 1574 3600 3210 542 3142 3902 4437 253 2787 3730
+Case #7: 2 1713 3756 3997 1716 2323 3251 1071 963 356 3244 117 1515 4081 2979 832 2121 2848 1621 145 2380 3502 3428 3610 1275 628 3833 556 2367 3490 3241 4113 3954 317 1438 1264 1116 3795 2306 687 2350 4192 868 1982 3341 1161 1829 1973 58 124 1024 1568 1544 808 1526 707 4162 3313 510 1980 1780 3049 3839 1339 1480 320 1850 2177 4169 2741 356 2978 80 2109 1938 2423 2924 3418 4190 2127 2917 2313 605 2093 3235 1246 4029 1689 471 176 181 1311
+Case #8: 4075 3937 3141 603 4366 1870 1073 3793 885 751 4441 610 3440 3531 4538 3118 2374 3903 3499 1333 4146 651 3546 1574 3224 4530 1770 439 2126 2705 3181 3135 3095 3070 477 4652 11 4653 2019 1123 4644 4354 4446 3450 2088 1126 726 3358 3426 3712 1517 1359 1383 4696 3684 4632 1313 2996 3886 3205 1600 3309 4130 1321 4693 1942 1578 1362 4657 2747 4638 3370 2749 4292 2851 2810 265 1535 4667 3183 14 2743 3875 4573 3536 2305 4415 1667 41 1735 563 4720 4038
+Case #9: 3492 3541 2148 4177 2835 2583 4511 4509 4803 4304 1075 574 576 4139 2694 2284 3703 1182 1775 3802 825 3692 3172 608 4307 3404 2481 4349 1987 667 4044 2705 202 1525 1153 1361 4436 3944 1143 3089 950 328 168 2969 1086 53 4443 1233 1782 2180 1027 4319 2972 2404 2744 3368 2064 2850 2457 2828 4377 2719 1812 3437 3888 2031 1570 974 53 1857 1670 1205 3131 1653 1147 2207 621 2942 4248 3971 689 24 2718 1223 3893 3601 523 3889 1500 227 1377 452 3937
+Case #10: 4094 286 4433 360 1840 1370 4119 4372 2870 838 3624 3570 2263 566 200 889 2690 2688 2709 1579 3411 1630 3469 3811 1785 1042 2781 4115 4670 1178 501 2741 2444 1838 2653 2948 2327 3992 2656 1629 1421 121 1500 3537 864 4427 3478 3466 3771 822 4182 1595 1000 1722 1796 872 2869 1552 2380 1837 3650 546 2750 3197 1738 750 3339 3408 1276 1498 1656 4093 3801 2334 2428 1396 2371 3047 2219 1914 3973 2783 179 601 3579 1582 3324 193 3193 734 3724 4687
+Case #11: 1255 1204 3057 3257 3071 4611 2121 3414 4756 2959 267 526 1511 1628 1561 728 3868 3006 4608 877 1777 3889 2148 887 1076 1338 1750 4045 1190 1170 1476 3976 2638 739 2052 2693 966 4714 3696 1366 250 41 12 2200 3924 4080 325 2611 3258 1660 958 1025 2237 4027 3956 2512 2384 3737 4458 4095 1451 3581 3452 3812 4086 2881 726 140 4623 3615 4296 302 1890 4637 3643 3359 2846 3335 3820 1123 1529 2229 4806 457 4583 3575 3379
+Case #12: 4572 4513 3398 4256 1135 3196 4214 3513 2502 4829 4800 77 835 2523 1692 288 195 1522 1312 2420 1950 1036 885 3999 3711 1562 2463 2221 4806 421 4614 2974 2852 3849 917 160 2161 1769 1971 1581 313 2003 464 3286 339 2136 1780 1009 4763 3321 468 2424 2854 2841 2855 4554 4794 3083 925 1591 3949 2870 369 1235 3004 3415 3443 3729 2919 3670 5 3672 1093 131 4647 2956 4808 3285 991 844 2803 988 2191 4825 845 1875 1022 4789 1512 4036 3204 2106 2796 3067
+Case #13: 553 2056 1162 994 1397 2384 88 711 2841 170 132 236 1464 281 2731 2607 2781 1015 419 1513 1182 329 1204 2270 2065 1503 2842 516 2696 2464 1406 2458 1289 1843 3049 116 559 2619 1891 1447 153 385 94 963 736 2332 1123 88 2651 487 522 2040 236 1386 1689 665 817 419 2883 1014 2201 388 769 1351 2557 2457 403 2811 3057 2405 2187 2262 1512 1536 2365 1796 1747 848 1593 3117 2314 1877 514 2666 442 667 31 180 3021 2945 1963 568 960 340 784 588 977 1814 27
+Case #14: 4481 1852 2544 1209 2482 4524 2451 2604 2009 2184 2600 321 3312 1319 1261 1669 1046 2345 3710 80 2188 2825 1579 2497 551 4523 851 1661 1562 1069 1588 528 3872 772 4457 1936 4155 4038 2993 967 2711 1708 4064 1167 504 1293 1420 4256 2732 4413 2012 1776 809 3770 726 1866 306 1744 3049 638 2746 1988 2446 4194 1316 4363 3850 3996 2050 761 2312 4353 4244 489 2113 2829 2058 1387 4041 4098 1926 4506 1934 2041 3806 2665 1562 279 4075 138 4483 2431 4577 3633 3374 3046 65 3017
+Case #15: 2345 3295 4035 2106 2128 4182 4244 3173 858 4245 2951 4397 3661 3775 3550 4142 4326 4210 2100 1627 3544 3895 666 267 1005 736 1892 3170 203 3761 4314 3242 4288 345 3916 1946 4414 1009 2221 1686 827 1545 1893 56 1531 3899 2917 3914 2961 2660 2547 4036 3294 1139 1471 1330 1831 1800 2124 2196 2356 3353 1419 4234 2679 4127 4193 3124 1991 1294 4376 3975 686 1714 836 3333 499 932 3223 929 4386 3415 451 507 1513 1484 3047 1438 1141 1925 851 540 900 3908
+Case #16: 2435 2700 2355 1790 2463 1997 1673 1590 526 507 2038 4 492 2449 781 2980 2763 48 3139 3002 2604 3383 1899 36 196 251 2921 3056 921 1105 3115 2839 928 397 1882 549 105 1631 2005 332 437 1633 473 2737 1701 2407 947 1304 384 1257 2537 1483 606 1673 560 955 833 3150 288 3191 3458 2323 1462 1112 1942 996 1092 1220 3029 726 817 1595 35 841 2481 3132 1586 495 365 3263 3228 2295 1890
+Case #17: 1220 629 2014 2382 172 269 1776 2181 174 1912 1605 721 1457 2309 741 2302 915 1515 414 961 929 2109 1227 792 1075 2385 1706 950 116 838 69 75 983 1608 1349 1239 1697 1637 1568 1602 974 2100 416 25 111 1950 680 1383 2175 780 1592 704 664 2252 316 1292 2426 189 472 1797 2288 292 2117 1665 472 2420 1293 274 68 1367 913 744 2280 1825 2323 694 285 1010 2113 173 2407 1865 413 2015 87 1399 840 963 511 1514 1367 1545 1904 1477 342 1234
+Case #18: 2480 807 2062 4417 2047 48 3611 1316 3540 2548 3937 642 4640 1987 2100 3944 2513 2926 4252 154 231 885 2050 2754 980 3038 3689 2971 1354 2331 721 1686 4848 1 4571 4290 48 4547 134 466 2874 1735 3610 2133 3672 4600 1101 2658 4790 604 1123 3592 599 3586 2558 4529 668 1132 4061 1398 2039 3711 240 3810 4401 946 3840 2029 2658 2726 2557 3003 1837 3659 1577 2580 2233 3503 234 1 1543 186 2564 3381 960 1279 2397 2831 202 4408 4432 589 4379 1842 1081
+Case #19: 1 3 2 5 4
+Case #20: 4345 2248 3360 1644 303 1966 1422 1700 2946 2117 2493 2869 1305 1820 4437 4536 2880 34 2619 987 1760 1056 2198 3162 1729 55 3505 1316 2146 518 1481 1073 3900 545 2309 1390 2132 3791 2965 3487 3406 6 2983 715 1055 2648 718 3033 4303 2253 4271 1919 2251 2658 425 187 2252 1946 4343 2434 2485 3825 634 440 2209 2372 3243 3295 469 385 3411 599 3038 724 650 3795 627 3650 3136 629 4191 1073 969 2258 925 101 2432 1735 591 302 4500 1185
+Case #21: 4471 4606 4437 3827 3625 805 4482 2395 2402 885 4652 1148 3071 2735 1702 4411 4314 1988 2914 1673 1657 2939 164 4295 3981 4582 47 3592 979 761 4795 2895 3668 1251 190 3835 2402 4148 1072 2209 3110 1031 3258 1371 173 927 3610 3560 4286 4478 2819 185 4666 4584 4683 3982 4293 2857 1395 2095 1237 2095 2242 1935 4234 3143 2458 3790 2377 3510 3927 4323 800 4212 1741 872 1764 26 2354 2912 2993 1961 2637 2854 993 350 1829 3289 3006 254 1692 3194 1908 4493
+Case #22: 111 637 3800 532 3196 382 2544 2681 2041 3465 3049 990 738 2758 3279 3250 3581 2722 2304 3303 2586 200 1204 3744 3720 1052 3978 692 1643 821 3162 3210 3936 3816 2394 1184 3376 1760 1298 209 1609 312 3729 2352 1082 3515 201 600 2680 1771 3822 3735 2213 3057 2249 4188 1244 2377 3852 1111 3804 3555 413 1630 2526 88 3465 1152 139 2568 2888 2846 276 745 2718 3146 1406 2376 3158 3905 558 3898 1069 3500 2860 2734 1302 4162 1371 3958 2541 2439 684 810 3272 2648
+Case #23: 3072 213 2334 22 2307 849 680 919 820 362 1553 2206 2717 2485 1250 1296 2711 1100 2516 487 913 602 2813 1101 3145 3176 955 842 2430 1440 1230 1279 138 280 346 2707 2075 154 1863 657 3294 1487 515 2036 1068 183 1693 1588 25 1068 2121 93 3241 1478 630 1470 1211 2548 865 682 885 2715 2445 441 1837 302 2863 42 1705 32 953 261 1102 2436 2435 1347 2553 1335 2233 341 2900 2996 2307 1523 1573 627 2261 975 1267 1563 2833 1203 3329 685
+Case #24: 1344 3727 2159 777 1620 3514 1166 2369 1664 3111 2561 479 3151 1411 1285 2995 2082 3049 3092 2356 3205 3106 198 830 2299 279 2601 2191 1655 2927 696 3848 1259 1922 3712 3806 2753 1856 4004 3108 411 3289 1543 816 2420 3484 3510 2406 2005 3179 3156 2315 2654 2274 1665 1555 3229 93 2115 3604 3536 1452 3242 2990 1921 1770 556 177 3754 2763 950 658 1661 2281 2325 2553 3313 1830 3687 2159 336 2371 3284 3639 28 513 2427 1511 3698 3737 3546 387 383 2436 1157 1678 1305 2466 3843
+Case #25: 1562 4349 3116 3259 1463 4153 1149 1905 7 2806 208 2595 3872 3188 612 159 1574 4275 4296 637 2537 3490 1522 1882 1510 959 2598 213 21 4265 244 990 4413 2911 2967 350 136 2848 1865 3691 3297 2727 3936 773 3333 2765 3098 3784 3067 4386 1011 4210 4536 2544 2881 340 2281 3556 3643 4357 4237 3150 2650 3246 1303 1312 1937 1328 2298 2533 4089 912 1708 1270 329 4555 3376 2486 3072 3391 2134 2119 1156 4368 1595 2973 2618 1522 1724 3912 3929 839 1472 1424 1540 140 395 151 1544 888
+Case #26: 1248 931 116 2710 2857 3000 2371 2406 80 2668 2700 1143 2477 986 1409 2431 493 2162 2815 3848 883 563 360 2306 18 3798 1262 2424 1114 2331 1068 3551 812 3127 178 2719 3775 2426 2717 3171 747 2910 533 3323 3077 1911 1421 3451 1402 2948 2805 2913 2759 82 2560 1512 3428 1268 273 302 3204 729 2777 22 2129 1024 1439 1843 2924 580 989 2904 3015 877 1022 428 489 1962 3580 3652 2720 1775 2144 1024 401 3334 1182 643 3756 2597 1919 787 68 1249 1367 2866 596 1239 2361 3042
+Case #27: 4338 3535 3579 670 2640 2745 1034 2047 2564 3470 1074 1830 2836 913 2137 3044 3765 3720 3569 490 3388 1029 3417 2819 1426 2403 3766 1087 3433 254 2682 645 1438 3497 2901 488 3751 1560 1798 380 1187 2089 2849 3346 3428 110 2362 3592 2600 4031 1277 53 220 3336 1659 4149 2625 113 1858 604 690 566 1783 2241 4039 2255 2223 596 1411 3659 598 1712 3654 162 1157 4070 2089 2016 4277 2132 1842 3835 3594 3361 1363 3658 445 1059 1921 1410
+Case #28: 3157 2439 2523 2706 434 1395 3656 2066 3175 3299 1561 1020 3792 1742 1042 667 3362 824 1843 1585 1376 4098 886 3596 297 1268 3982 1795 3376 3079 230 4116 3204 3325 1888 482 4262 3587 341 3338 3939 2730 1370 620 2145 360 1373 120 518 2578 1366 2812 3112 829 809 1926 2136 3529 2548 3705 2278 3906 950 778 3506 2289 1358 2863 1859 1354 134 3333 3463 4302 2965 2953 1460 1320 1625 683 3894 1591 2818 2628 3720 1289 2872 3652 2128 1280 1179 1965 2000 3866 3406 767 1510 3273 1244 139
+Case #29: 3309 719 3181 2102 718 2781 239 3082 2675 179 3401 3061 3162 2596 2133 3744 2896 3948 3310 3777 903 893 2020 3149 1078 3778 142 294 2866 3644 3316 1290 911 3333 873 1837 3032 1066 975 2291 1967 3794 528 3693 242 930 2844 2332 1297 3851 3342 1191 2521 3898 1716 1789 2336 1320 2301 254 3741 3197 3051 2868 2893 3347 2001 607 1907 1756 2667 1115 703 1843 3685 1079 1169 2432 2441 165 1238 3073 3727 2615 2347 2635 1766 146 2969 2681 972 1416 574 2940 3183 3230 3239 3282
+Case #30: 2 8 13 4
+Case #31: 334 2385 2458 298 631 138 3893 1926 1489 3339 3499 1466 1824 2889 3884 1325 245 3324 1265 497 719 4027 1628 2707 2729 487 3337 3172 2241 1646 3957 4103 1136 2895 136 1384 2892 3045 2271 2601 4422 2360 643 3753 2785 1846 1705 3275 2503 2136 4054 3705 4331 2740 1387 1606 2706 3501 4119 4096 3533 2107 3675 4456 546 3168 989 224 2725 2751 457 4088 3825 3057 878 4361 335 3603 2354 2561 1218 2540 567 954 3575 2573 2020 908 1267 3163 2797 1396 3801 435 153
+Case #32: 107 532 3926 2721 1508 3525 2060 2323 4475 4595 2695 2002 2271 1689 139 1429 3089 954 4684 3265 20 837 1817 4887 1185 3095 4826 2098 1083 564 4409 2568 3366 1753 569 3296 154 3651 2397 747 2696 3257 3711 4393 952 403 1829 939 1066 432 4523 3985 279 2816 4376 318 1650 1370 1644 3404 2423 960 242 4163 985 604 4327 2398 2342 3792 624 1704 648 2394 3594 550 3026 4532 4539 3929 2937 1656 3118 926 2645 2851 957 2029 79 774 3543 1469 1501
+Case #33: 2624 4532 763 4175 916 4318 2706 1648 1383 1464 501 2462 3050 3787 4092 4286 1606 139 318 4137 817 3572 3841 3804 1715 783 496 2299 2826 4018 2475 2651 1152 4042 3018 582 188 3258 1242 2469 114 1073 3634 3102 763 4106 1975 1701 3121 2864 1324 1445 650 836 3618 2413 3296 3534 402 1504 4446 4007 4185 3604 1305 1894 1464 219 1763 2580 3824 957 1460 4573 1255 3803 567 2296 3210 2418 1962 1420 3727 2042 3162 2490 1294 1241 3522 3442 2774 4224 2771 2114 245 523
+Case #34: 356 4810 2348 3801 914 655 2632 4562 3148 1909 3358 4121 3436 3245 3240 1772 799 4184 298 3602 2346 1372 2504 1002 4672 4237 3158 4901 2791 4850 3275 3922 504 379 3941 3071 4014 1634 2406 4068 1394 3877 2713 1687 4490 2699 661 4846 3655 1976 772 2706 986 3520 3215 4757 2184 4222 259 2201 3191 2556 4330 2404 2200 2012 3083 4661 2815 969 4807 455 4959 4639 2606 1089 2588 1273 3571 3925 2428 2357 3153 1359 3086 2 2662 4410 4708 3050 4450 2133 1944 569 1870 1027 1450 858 2949 4959
+Case #35: 119 1833 1107 1382 2969 1019 2202 1966 2483 1963 1331 1065 1238 1672 179 1970 2068 1569 1987 3953 939 2370 427 298 213 3462 1756 1830 57 1595 3245 554 2091 2225 388 2427 573 428 2362 555 3302 1920 1464 1555 570 370 1879 1307 112 1973 3324 2054 884 1117 490 477 3958 55 2538 2793 2051 3105 2427 861 2825 2322 3946 3150 3764 131 494 2517 2448 58 2856 2364 2579 2089 3477 601 834 3574 2415 2821 2944 233 3868 677 1277 2856 3108 2990 3850 888 2841
+Case #36: 1222 2032 917 1628 1649 1694 2738 495 1467 2978 3117 1716 2214 244 3994 2929 1703 519 2652 2282 1126 634 729 3100 545 2478 2463 2987 1126 1034 1335 1852 949 3162 2763 1035 849 3441 995 4048 3408 208 2866 283 2300 3270 2963 3099 1612 3806 3285 2724 527 3794 3339 688 311 3478 1393 2921 4001 2739 1736 1732 1360 803 235 3299 203 1241 1270 756 2923 1349 879 245 3041 2764 1945 2079 4293 4062 870 4106 4100 1969 1326 2968 3055 2179 1659
+Case #37: 1505 2116 4200 2942 181 4076 2224 2029 1520 2294 3235 167 3445 1162 177 3198 4368 1028 2492 2376 712 145 2239 4323 1037 3420 1410 818 3384 3147 1273 815 3588 2278 2902 2681 268 1709 1579 10 3417 2286 36 2549 3684 727 3621 29 3427 2394 230 1740 1942 4548 1600 861 1286 3304 2351 2480 937 2537 1078 310 148 4047 1965 4236 678 1874 1107 3551 4141 2862 3607 3439 38 128 2915 3275 4165 2163 3284 586 3124 2340 1268 2753 3573 1681 1193 4415 3731 2261 3144 3191 4206 2912 1158 2250
+Case #38: 1819 3154 639 435 3011 1744 3650 3738 232 4524 2584 1314 1095 2218 663 4550 2899 1143 1618 303 1578 2742 1070 4472 1277 3280 953 2348 1974 4178 2589 3114 2911 4138 3375 2877 969 3506 3015 625 2556 2220 2579 361 240 2324 3181 4463 4565 4252 148 1512 3972 1738 244 53 465 3003 905 1297 3036 3968 2406 220 4330 4069 3248 4205 2440 2020 1026 1193 2390 2914 96 3400 1200 2502 4333 115 1762 253 4086 2436 2150 159 2446 2175 81 1432 2299 1988 2598 34 4516 2770 1699 1630 99
+Case #39: 368 3568 854 1778 1748 2773 3198 1577 3371 1579 1823 2202 2128 924 2913 785 2584 1107 587 3781 996 3172 2027 3279 3440 1699 2325 1774 1917 52 663 3111 808 481 3789 435 2669 4446 1096 2378 3937 3670 3095 1116 2186 214 461 227 4247 4163 2781 4271 88 4713 1507 1605 43 4850 3590 1369 4289 3905 3065 3704 743 4057 4607 3626 3083 1120 880 45 1221 1000 4214 2799 3049 2671
+Case #40: 1441 784 2209 1389 308 693 410 1941 3550 4700 4498 2772 3609 2241 1887 80 864 3221 4881 4634 1116 2902 1658 203 3483 611 1454 250 1319 1850 3525 360 2534 1325 1836 4128 2323 302 4594 2614 3723 3733 342 3553 2428 4801 2802 4711 2778 872 1514 169 1757 2729 4686 4123 1216 674 4492 1181 3096 280 2158 1898 656 3753 1436 2212 1863 3626 3931 2059 4831 2143 555 3663 1788 4273 1445 3060 3477 2873 499 101 1097 3395 966 4306 1480 3175 579 4300 2235 1404 2165 4869
+Case #41: 1677 1955 3118 2150 2378 4628 1288 4275 1113 2576 4729 617 1517 1311 1650 4169 4575 1323 2580 2991 2501 4410 3298 3088 2347 954 3199 2093 2315 4247 2100 4629 1454 3989 3215 775 2737 3510 4572 121 964 4207 1489 3668 649 4238 2676 1685 2027 2111 510 4289 1919 2697 4184 109 545 1054 1865 4638 816 4434 16 1368 1791 3989 1700 1120 764 3416 3012 4284 2927 2014 2597 1157 1785 3250 588 1487 3398 3354 557 631 2253 422 100 224
+Case #42: 1662 4519 3404 545 3210 3214 519 3137 4113 913 1044 327 2096 4263 3697 4792 91 4409 1069 2408 3508 1882 4265 1720 4677 372 1137 2143 1822 2102 877 3914 500 4335 2931 2432 4665 3920 2238 2521 3765 17 3123 1111 2775 4374 3976 2710 2850 908 570 2137 4102 573 1024 3423 1654 2059 1875 4810 1681 3949 3148 841 2736 1266 4372 1284 3204 3222 1249 4078 2952 1468 678 2430 274 1221 863 2124 7 3015 4170 1487 2391 4250 4153 2175 1677 1223
+Case #43: 1966 934 2830 2634 3052 2738 4333 3237 3717 3283 4736 2788 711 2214 3553 3939 97 4255 3140 783 3120 2085 3878 3155 2685 2062 3922 1930 1504 4518 347 1533 3265 4190 1194 382 310 2015 2146 1757 1144 1719 909 2025 2659 1686 4324 140 3247 605 260 652 1880 1766 2733 3224 325 3702 579 3752 932 4039 1721 3259 625 1584 1375 1170 452 2002 3908 1899 165 4190 3351 1147 4136 1581 4152 3578 2093 2540 2040 4152 2980 362 2038 1362 1867 885 4658 1287 1333 1739 4638
+Case #44: 931 815 1032 1495 1135 131 1024 721 431 686 13 557 962 869 641 1139 538 103 534 1520 32 169 918 1439 897 109 1260 1439 298 887 1380 971 1085 509 806 988 88 1102 1142 349 4 592 124 1062 308 1142 554 1089 140 21 641 841 227 342 560 1448 393 341 669 443 653 1502 492 471 1205 169 1599 360 352 597 424 1437 690 1339 9 267 727 85 222 1428 584 214 1483 279 1444 391 1113 429 996
+Case #45: 2104 1645 2351 3184 3559 1072 3590 2908 1918 2216 806 1202 544 15 987 1680 1673 460 3344 3809 2557 50 3207 1389 212 3903 3449 2280 605 3564 2615 2412 1012 3155 3093 115 2106 456 3431 1060 1272 3007 1089 2853 1114 4170 1299 23 1396 2788 3839 3859 975 3170 3887 922 2196 2583 2151 4178 982 1506 68 3178 1663 151 3128 280 362 3986 2137 3247 343 943 420 4122 1273 888 273 1302 834 1340 286 2251 2522 2430 3595 3956 4149 310 3576 2663 1334 3729 522 1246 4081
+Case #46: 4102 4316 3722 4418 2112 1301 4323 3865 1446 2056 3495 4455 1019 527 379 3539 2986 3105 3707 3691 523 858 2332 4361 4433 2702 2599 2094 2817 2651 58 684 2591 1622 105 4278 3690 3525 307 801 2255 430 2584 4189 762 1649 4192 710 499 983 28 4153 2865 2149 3784 109 1048 2052 2962 1219 2587 2309 1301 2264 2945 2343 1251 3492 3089 307 2816 2242 1539 696 2071 3927 3347 489 3469 3918 2786 167 3622 376 1352 1480 3026 4018 2926 2022 283 4221
+Case #47: 529 796 4039 747 2055 943 376 1724 4102 4020 1501 793 2091 2733 3924 1296 2012 4044 945 193 3959 4457 4036 2879 2463 3581 3923 1585 4147 3054 2481 1193 2678 3787 4722 3415 1676 565 3833 1269 2465 3484 385 3773 1262 4377 1765 1990 4006 3818 4354 2940 3207 1276 3846 1899 4611 89 2854 28 2376 3059 1294 720 4191 2066 4562 3643 3350 2377 1714 2969 3754 3517 384 2952 3951 2907 4192 2658 3414 1551 3731 3593 4791 112 4707 2800 2490 2175 1356 3643 1217 377 530 4649 1916
+Case #48: 3066 2286 4546 1186 2483 3072 2831 4694 2542 3240 4344 2312 3509 4334 1885 4738 4338 4731 1537 111 314 11 2717 1383 2424 4550 4172 308 1090 337 4097 50 2716 2473 4574 368 3652 87 3068 4834 155 271 248 341 2641 2629 4611 4116 169 2514 1299 3732 698 483 1540 4484 4623 3864 2564 2449 1541 1934 3617 2909 1568 3078 238 3569 2566 4623 835 4655 3280 2517 3198 2282 3721 3467 922 2768 2374 4713 848 4666 4604 3673 1087 1823 1713 1052 1814 4457 2698 62 233 2884 504 2518 2365
+Case #49: 1508 3635 2114 46 3477 952 2440 2739 3780 3872 413 2717 1708 36 3000 233 1676 1048 2734 355 1012 2023 1091 2116 2574 3851 715 1279 3746 3703 3698 3478 195 2489 3638 420 3657 3709 2497 955 773 2707 2916 1584 1751 3266 2167 2151 2240 3434 3021 3134 669 3802 1164 3229 2693 3656 2302 3706 2083 1111 1481 2219 3872 148 373 2605 1706 1946 2761 1135 3061 459 1851 214 3108 1493 409 293 1607 2646 3207 985 3403 2423 77 114 3072 979 3031 3158 291 2788 1695
+Case #50: 952 4147 3463 4368 3347 2763 2358 4060 3138 2595 3484 3985 3519 186 325 953 2813 116 3806 4461 2795 1164 2917 3158 1058 2848 1257 2811 263 2863 31 2415 1740 2087 3237 563 2750 4200 3934 225 2391 4344 4493 2354 2166 1368 701 3142 2122 4056 608 3893 2866 3082 264 1094 575 4338 2748 4176 2520 4561 810 2936 2158 19 2269 3393 914 2694 548 3943 3193 895 2635 1300 3632 266 683 1337 4206 4196 1108 161 1420 3755 2706 4397 3042 1490 490 4185 3710 1610 1157 3301 3852
+Case #51: 2879 345 964 1337 426 4840 1867 1817 3082 3084 3610 1963 1069 2336 2532 257 1039 904 898 4331 1324 37 4608 52 123 829 3631 44 2298 332 1777 220 2475 3040 4009 1935 2506 2528 2618 1265 959 4016 4365 3798 4723 1290 3183 3805 4491 4474 2127 4211 650 3449 4191 3345 3682 490 2153 2942 2587 1942 4794 3296 59 3637 1206 4066 2353 1871 3617 328 1198 1789 875 531 1479 3865 2086 4778 612 1295 3175 4187 3207 2815 2332 3378 3886 4628 3785 881 3241 3097 233 2689 4463
+Case #52: 808 2590 2437 2510 2681 2616 1348 1607 3427 3603 3402 1574 4147 2402 4739 2826 4722 4112 2052 3432 2004 1253 4638 2955 1537 2368 929 4551 2229 4329 436 1877 444 1692 612 3719 3316 2623 3113 4881 4030 3248 535 4143 85 3491 1596 3052 3926 2402 4338 2012 45 822 1016 4678 3207 4433 589 252 82 3184 3882 4687 1850 1949 683 192 3053 3796 3045 4782 1340 4165 312 1568 718 3023 515 755 4017 4409 2754 1569 2836 1560 3414 447 3766 4554 596 1843
+Case #53: 704 2405 830 1404 1387 218 673 2649 3594 4477 3003 619 4024 1451 2770 2667 1805 113 2974 162 4622 4000 1039 1807 3393 3237 3891 2341 2979 2947 3258 2443 1191 1061 4617 2516 4561 2137 1602 3118 3373 3542 2134 4278 2600 4400 4369 2301 289 901 4379 432 4348 4302 2799 4151 329 1732 2493 4 3016 748 1988 2906 4251 2325 4764 3955 4059 1912 3933 1383 878 4816 1956 3211 3038 3395 3985 3231 3247 3076 2769 283 145 3728 993 1166 350 739 1263 911 545 2405 2748 2514 3284 1532 3915
+Case #54: 938 4318 3020 2661 1080 66 179 3362 2718 3583 1945 3337 1447 3662 2619 2457 1545 281 3933 725 2923 478 4553 2055 2372 2998 1548 3354 829 3798 3051 1472 2776 313 2200 1598 543 2246 4639 3860 2888 1641 2258 3935 755 883 560 258 3 4361 842 2201 431 2609 1580 4077 708 472 470 3230 3364 3451 3842 1565 198 577 1457 3918 4383 89 1056 4676 4522 1600 547 1761 610 727 1749 3245 465 4172 215 2144 137 1431 3314 636 2815 497 3881 4437 2993 3186 1205
+Case #55: 2354 1387 545 2428 2503 1662 1926 2423 1624 2502 1633 3046 2712 3270 79 1220 135 521 493 1060 1176 3431 252 424 589 2812 3428 2631 25 827 3305 3817 1165 2165 3234 1341 705 2386 3229 2261 730 2207 3131 709 664 2391 3138 487 3103 2081 2267 2785 1573 969 2781 1796 758 2662 3776 3162 532 335 665 316 1794 3257 99 1373 219 3587 19 1886 613 448 2435 2584 3887 2812 685 1531 3774 2815 1688 628 534 3704 1830 2575 2961 3190 2052 3925 3163 2920 3190 3641
+Case #56: 1949 3841 3578 4517 2667 282 2652 820 1436 2781 204 3598 387 1306 257 2227 1914 4199 3551 2488 1383 3532 3223 1918 1250 2829 3526 931 2708 108 3781 1380 1179 866 59 240 4187 83 267 2560 598 3831 1137 3968 3237 1826 3050 896 3976 1122 1622 4539 1493 4406 582 3823 1072 3028 1410 2775 469 2572 2509 4087 2834 177 4179 936 2161 2015 2795 919 2951 1408 1310 1188 1273 1272 1379 3620 480 3337 1487 2309 977 24 3120 2411 1231 2185 4248 2471 3248 3051 165 2948 1280 771 4338
+Case #57: 1420 2415 1321 641 1510 3960 3995 4194 4203 3332 2757 522 115 2734 4077 2992 789 3957 453 2897 3749 3135 3333 2169 1949 1161 1884 3296 3139 665 2902 58 1452 2968 3127 1323 1950 584 2841 2806 4319 3588 375 4494 4065 2715 1748 4015 638 1247 1739 3976 2893 1503 318 3070 2803 972 203 4125 4328 2969 1024 4539 3940 4223 601 1705 3630 4599 2657 4445 2528 2685 783 2908 2709 331 930 1813 813 2535 646 208 3586 2097 2140 2687 2605 393 3571 4135 2726 3076 2310 4137 4374 2769 957
+Case #58: 2754 2632 709 909 2058 2154 4564 1243 3738 1148 364 1409 1337 4636 4582 3472 4279 88 995 3157 2242 3835 2102 3140 4368 1987 2397 1746 3037 3522 2451 1333 4190 89 1119 4649 162 4629 3690 3204 2230 1375 3297 3561 2561 4247 516 1459 362 1786 3289 1130 4366 4715 3305 3534 2489 22 1764 2038 2890 2905 3783 4168 1595 423 4535 1159 285 3385 3606 1604 3309 1757 2960 2959 2953 3968 2812 2904 4333 4299 2238 2675 4756 4835 2429 2720 2764 894 2923 617 2866 2831 2296 1243 512 331 4249
+Case #59: 4186 1296 3097 3971 3090 1189 4129 559 4749 4742 940 4687 3652 2793 2261 1610 2450 3411 1165 4613 3311 2311 655 2640 1771 2229 1507 489 1980 3550 3526 3673 4326 1915 172 3403 4038 4135 3837 3688 1517 311 1350 2343 315 3823 1331 3813 4325 794 3932 2722 3280 2089 104 2962 1855 4653 4454 4549 1510 3929 222 317 1663 115 2338 582 2965 2851 1717 2121 2196 1747 4087 4807 1471 4282 3418 4509 3313 3570 2704 2534 4228 688 2959 4368 629
+Case #60: 2510 1684 3829 2647 1864 3961 1084 3884 3072 1691 1871 3622 560 3337 2575 3638 1397 492 4081 228 4428 2963 3454 278 2432 1882 762 4117 4244 63 1797 2208 3623 1553 3391 1781 3245 1096 3638 3329 2759 276 4651 4017 2310 3341 799 3149 2470 3990 3081 2685 2301 1642 480 1047 314 1579 4034 2292 917 2405 556 154 3158 2863 4618 1131 416 4153 1213 3080 2127 1912 3232 1446 4597 4126 4310 2247 293 1924 1503 660 943 2553 4627 1391 1780 1019 4168 3382 3455 2239 2482 1699
+Case #61: 1780 1618 4061 581 950 3280 1128 721 1206 2547 894 2794 1215 3512 2464 4549 2485 3712 1372 555 570 3338 853 3202 3552 2041 4539 2839 2282 3064 1993 807 4190 3458 1099 2596 1859 3940 454 12 2082 3752 1192 547 1811 3751 2060 2409 2043 3661 1412 1390 343 4270 1635 3811 1019 3452 2696 526 3970 4438 4435 3479 3745 3244 1343 4647 4409 4340 2802 3898 4652 1711 1693 258 330 3885 1703 3648 4221 184 2636 476 3105 4233 555 3496 1097 3457 2500 602 4341 3935 586
+Case #62: 270 713 2953 2929 1362 4093 1422 579 1789 2164 3301 3896 393 847 2110 3929 2131 1961 1659 3738 896 1094 917 2330 3167 818 3343 2940 3660 1764 3936 1058 2975 2777 231 349 1789 2348 3616 2867 2336 318 1095 963 4121 3035 3 1303 3562 4225 1813 3294 2044 3907 589 2135 2087 493 2331 3395 2063 409 3142 1189 416 1981 1202 4038 1596 3191 2517 3 1271 2233 1972 1380 2602 1644 3915 2445 209 4032 1793 2816 4216 1897 3543 2444 582 2067 232 3603 3760 100 1580 1611 1822 38
+Case #63: 795 4166 1103 924 114 3579 3661 1677 4358 454 806 2939 2582 2021 2563 3540 135 3944 2292 528 2502 1338 2341 527 4314 568 11 4021 4264 3705 1649 2523 4105 4467 3820 1181 315 3172 3170 1288 1774 976 3674 102 2928 3730 1012 2635 2252 3852 4225 267 3067 4268 3662 3997 1746 2701 3358 1796 2020 2917 2724 1026 3121 720 3644 2034 2171 1258 836 677 247 1125 2847 117 746 131 1714 2246 2190 3453 3252 4590 4146 1481 4069 1188 3671 2912 93 343 4117 4186 4148 1404 4585
+Case #64: 700 2477 1259 1602 2877 2362 555 2389 2607 137 2252 2135 2194 1221 1445 2502 2235 1264 2643 1869 1839 1532 2607 1335 1332 2901 1440 24 1868 2671 468 1746 712 2291 2897 619 1882 927 331 2941 294 331 2080 2865 67 25 2562 1623 1314 2514 2099 1348 2736 2875 2733 799 1409 1534 1258 2363 2586 805 1578 278 2237 1741 401 2871 1075
+Case #65: 2690 3062 1483 1628 3287 2501 2407 3317 4430 1175 2574 1589 4060 1966 1792 540 900 3622 381 929 1121 347 1046 733 575 3656 3192 2889 3069 3823 2704 2760 2150 1061 3978 3047 2638 613 4359 4383 345 2895 1874 4284 2798 3090 2086 4289 2217 415 2983 1342 1341 1747 3646 1869 1687 2313 2607 3939 3344 3703 3083 2962 1644 4205 3499 891 612 1249 1081 3446 1246 1056 1057 2694 1176 2090 4000 3726 3973 3993 2057 3519 3868 2186 1834 2988 3997 2603 2050 2325 977 1760 291 2600 162 926 1840
+Case #66: 4152 3028 3208 1604 2689 2407 2573 3394 2891 3920 1344 1109 2961 3025 3162 1157 2776 4049 4553 4147 1827 1066 875 1582 3190 4075 1762 1261 3774 1306 1629 725 3227 3028 3700 4026 4695 4352 1723 1395 3587 1252 56 1555 2291 2730 49 4384 951 2870 4050 1983 3233 34 2469 2063 4419 796 1460 721 2979 414 4348 53 1862 642 3184 2118 186 3109 4632 4436 1241
+Case #67: 2998 1998 3055 2944 1920 2104 4680 2918 1725 2117 2310 1474 4134 4528 658 3503 503 677 1778 2326 2115 2569 3590 4611 2519 4823 1120 3862 714 614 891 3455 1278 828 1124 3856 3021 2183 4176 2093 2950 1414 3510 2017 4113 2476 3789 793 1659 174 733 4035 4764 1005 3441 1980 3049 3478 496 379 3649 442 4567 1881 4370 600 2269 861 1248 2222 1014 4577 3031 4059 3122 1606 2063 2045 169 2601 4282 1907 1805 1377 3704 3888 2166 3882 795 4315 962 875 116 2707
+Case #68: 2805 783 764 3354 4498 746 4596 2984 3113 162 4095 2479 3837 470 3879 1156 3161 4366 4727 2152 1827 1524 2216 2108 444 377 3693 523 298 4609 1687 3993 3091 271 4739 3171 3400 2698 952 3246 1201 159 2571 448 1028 2433 1645 539 462 672 4142 2759 1227 1879 1304 1333 2919 1602 1021 1170 2967 1094 3945 2116 504 2716 4294 1998 3145 1781 2742 1312 1556 2324 698 3845 4376 2142 3083 550 2480 3377 2074 4073 4298 4754 3475 2521 4824 3016 2467 2650 575 2615 3780 4884 4773 1083 725
+Case #69: 3 5 1 3 5 4 4 1 3 5 3 3 4 3 1 3 4 1 4 4 5 3 3 1 3 2 5 3 5 3 2 1 1 2 3 5 5 2 4 1 1 1 3 3 5 3 2 2 4 4 3 2 1 1 1 5 4 1 4 2 3 4 4 3 3 2 1 1 1 3 1 2 5 5 4 3 3 3 5 1 2 2 1 1 4 2 5 5 2 1 1 5 4
+Case #70: 1619 269 1970 29 1151 1291 3313 43 3603 1637 2325 231 1276 408 2101 1780 1610 1838 1649 323 1215 3670 1744 214 3503 1866 1428 562 2004 3653 3369 2346 544 2600 3170 2633 3019 2795 198 2288 2580 3712 1924 2168 3634 1038 802 1480 886 1577 840 3487 3464 3673 1421 689 520 3758 1281 3043 2231 2698 50 339 3675 3110 1981 1133 2307 529 2525 930 2477 609 1354 815 111 3143 3145 200 2287 1069 2040 2380 1191 976 2067 1582 2195 1124 2936 385 3256 1642 2257 3414
+Case #71: 3671 3215 1321 3556 3212 1268 1802 2988 131 264 1086 2847 2520 577 752 3044 3635 3791 625 3755 4052 3911 972 2648 1328 3740 443 2546 2648 35 1614 3677 918 288 3765 860 344 1114 2666 533 3554 2137 3187 2013 1575 2070 3471 1580 1330 1613 1583 3976 3881 42 1614 2229 340 2041 433 2725 440 420 2311 1560 1299 3546 196 3802 813 2403 925 2972 3928 132 1284 78 4043 100 2954 171 812 773 2746 1766 894 1159 786 835 2018 3953 3875 2887 205 4009 3254 1085 904 658 1801
+Case #72: 3987 4765 1399 3632 3083 837 4883 270 3787 2173 4394 4335 2053 1728 3919 150 2088 1869 1432 975 63 1995 3799 4319 2611 2957 2610 2170 624 4038 2949 3370 428 3764 1831 3498 2811 2342 4661 422 2177 1753 3982 4216 4851 685 4581 2289 3987 1564 3849 1947 2360 2745 3445 4509 3522 131 695 3619 2047 4797 2299 3130 2453 2898 584 1300 3822 3604 1044 572 1124 4221 2080 4443 839 1240 2233 1486 2319 219 955 1286 2750 3347 3212 363 2359 2904 46 3457 2733 4910 1609 4403 1420 962 33 1277
+Case #73: 1090 3114 3218 3523 3694 1141 1272 3501 3857 442 463 2219 3731 3762 2355 3083 2259 1983 523 1398 2146 3290 1176 368 2250 4367 3143 4133 2324 1724 1328 1708 1153 365 3103 3798 4113 1142 3123 2019 3751 794 3350 1440 1266 758 2694 1970 1306 792 3989 330 3948 1167 2382 3980 4221 931 3760 766 4015 2540 432 2381 647 167 2205 1711 522 3939 4302 808 1367 778 3435 2712 30 3382 3612 400 4130 1001 520 1367
+Case #74: 2432 3823 1536 2011 1821 3005 4190 2089 1845 1308 761 3798 4222 4483 3339 1809 3630 4278 916 2462 2003 4650 2623 3751 2420 1952 4175 3385 267 3038 429 4591 423 2885 1888 3078 999 4500 2364 3659 1368 2604 3103 2122 334 3504 905 29 4305 3126 614 2661 244 1528 1990 4187 2635 4523 442 2614 4001 249 1270 2455 1879 276 3595 3603 701 2206 1271 1483 1532 793 3447 4207 2532 3228 2552 1304 3575 566 3553 653 59 3536 3686 2682 1688 1706 2196 3693 1 1995 4299 4657 2312 4116
+Case #75: 1739 260 3707 4121 1765 1157 2008 4750 583 1355 2187 4459 4379 4415 4048 986 2879 2692 3317 2932 1204 2138 1142 3796 41 77 1742 801 2389 2740 3216 2280 1084 3173 3802 1218 412 246 265 1817 4521 4020 1226 2107 812 1419 4421 2814 2440 345 3164 2801 4607 4632 3143 163 3775 1426 2438 1752 2878 4261 1844 3015 1862 2552 1548 1451 3138 2455 1181 2590 555
+Case #76: 96 4332 3336 2270 2095 2515 3212 3260 3603 1036 992 3496 3796 2686 776 1145 58 3037 1043 1573 861 189 3134 2191 2752 3611 1511 4358 2142 3971 2703 1395 4611 2156 1944 1655 3004 2166 2077 102 2660 3932 2290 71 960 182 950 3117 211 955 901 3164 2003 2471 1579 2825 4122 1719 471 3767 2620 4483 3930 3236 2531 753 4500 3882 3242 2746 2948 4195 3615 4022 3841 2592 2450 1190 781 1813 2653 3225 2798 863 3374 842 2621 508 314 2855 4099 1506 4534 1797 65 417 3506
+Case #77: 525 311 71 3410 1042 4676 2693 4032 794 3660 2456 3329 2281 1772 3733 3572 1204 3312 4150 873 2437 1919 2697 2664 3837 1806 1992 3883 1683 3944 2149 1730 1005 4659 3452 2146 3851 890 2911 1486 4297 437 2416 4143 2081 773 1330 1640 4661 1378 474 69 3374 2112 3734 3520 2676 1886 4350 2983 1204 540 896 2109 1335 2860 3246 2071 507 3394 4562 4717 3817 1657 3014 4407 623 2350 3123 749 3593 2536 2427 1549 3550 2624 4152 2933 504 4109 3993 1101 3814 3503 1621 3629 4360 1822 2883
+Case #78: 3532 396 3787 2179 3884 3014 3974 2792 1156 2700 3749 4082 2959 226 2733 1973 3620 1619 1894 1700 4032 1087 2556 3437 1967 2857 3259 2782 2098 118 2189 1044 2829 3021 812 1508 3495 940 328 507 698 2981 3288 349 451 1797 3306 1434 2001 4079 2686 3838 2232 3977 275 2040 3477 3144 850 3125 2383 1894 3865 3174 2581 389 2541 1405 2582 218 1375 3575 3731 2359 2548 3913 2203 1224 872 114 1155 2923 1995 2206 424 1194 1800 3143 1495 1276 3422 1977 76 3737 1707 3177 2000
+Case #79: 3124 2668 4000 1198 471 2118 2713 498 265 3283 3180 2765 3718 3969 407 1200 2461 3216 718 1360 2854 2415 1154 3194 1922 1325 1412 1015 308 1666 2981 2195 540 2855 314 794 338 1905 3002 1413 698 4098 2835 2436 3971 3691 3127 1276 583 2011 2449 3961 723 4131 2491 3730 1004 3836 496 3889 579 1498 1744 802 1450 351 4046 320 1845 1593 2498 3729 817 2326 3970 1175 1270 161 1419 2927 2023 2545 2971 3488 1549 3917 4121 558 2762 183 2046 428 1441 856 1660 2172 2288 3320 1185
+Case #80: 2040 2859 355 334 1038 1124 3832 1543 391 565 1958 3029 735 2704 2587 2836 1366 2834 902 3904 2726 1191 2668 1492 1487 1076 1049 1488 2476 3114 781 3580 3564 2589 11 3485 3873 2871 3297 1277 1720 2468 636 2571 3114 3572 1444 641 2827 3489 3754 3272 17 1524 1815 2956 21 3421 2910 162 3927 3296 2410 2826 3442 3480 1318 1395 1812 39 2461 2045 3070 405 2175 915 2495 1520 3183 1451 2619 2875 3417 1360 1583 3136 3531 2719 238 3232 1917 3127 1953 267
+Case #81: 1930 726 1139 4317 292 4892 3875 2452 910 1145 1835 4813 3654 2051 2870 2782 4728 4893 4214 199 2040 1497 4885 1783 4190 1421 1365 86 989 3111 798 3473 4233 4457 3596 4513 1577 3695 2347 4189 566 2152 4042 1711 1596 3382 4464 2931 2424 1523 1183 1885 1985 267 3557 3020 232 2665 2474 3127 825 4484 4723 3342 1799 3478 4741 4677 4385 2519 200 914 4922 3743 3018 2125 4068 1708 2184 149 3605 623 3088 2084 378 4302 789 3312 3683 1309 4710 1907 1403
+Case #82: 2778 1663 2382 281 3487 297 2046 3284 3207 2553 3754 70 1794 537 3082 3543 2348 3357 125 2024 2355 1170 211 1930 532 1522 1125 1281 3430 1397 1296 825 3703 2547 2804 2468 1566 3495 2685 4001 3606 858 3166 751 1491 1282 774 1995 81 1907 845 1798 193 556 3760 907 1885 1928 3665 2116 1346 2264 2263 2184 521 2424 1044 1600 2590 995 2962 3688 3951 804 1586 2759 3654 2365 150 3394 2792 3830 1946 3356 2753 3334 3239 39 1860
+Case #83: 4187 957 2891 1412 2967 540 3581 256 4481 1155 4475 2184 1868 1878 4769 311 199 1545 57 371 4275 3676 3347 4683 213 4253 410 697 4672 2962 4117 49 1831 3915 1176 4399 1589 3020 415 1397 3297 83 1108 1826 2793 4468 1183 1518 1118 2713 4474 1759 2324 4670 4641 1830 3371 4337 3039 165 2966 2507 3242 1702 1 158 1817 3006 2375 2836 384 613 3002 1483 3327 1856 1040 840 1184 1397 3175 3140 819 3204
+Case #84: 2218 1626 2280 2411 2990 203 960 1509 2767 184 3211 2819 1568 3663 2880 2960 1139 1909 1583 1592 1106 3200 1754 3962 2069 3513 686 1025 3640 2099 1880 2696 1636 1961 808 1308 1832 282 2641 3372 3289 386 4317 3579 1868 3562 1440 1654 2795 2618 2521 160 4192 4406 2828 3294 315 3925 989 1897 4463 3591 3702 2049 1984 2933 3021 2348 1453 4466 805 3281 378 1434 1999 4017 4507 4000 4425 2805 4403 457 2334 214 1439 2472 878 841 3140 4058 3066 1140 3707 492
+Case #85: 3808 3535 3356 1996 3362 312 2227 1366 612 1464 3360 4285 1568 4284 1270 3827 1589 4215 869 1825 3348 65 2145 3087 1810 3573 1557 74 2261 517 3690 497 3278 2554 1799 545 2191 1942 4536 1460 4580 2973 4734 940 2999 3153 2334 1675 1491 449 1116 2481 1952 378 4527 1339 3340 4184 1982 4285 3632 2171 3862 2030 2620 1657 1541 3035 1169 1407 1102 3846 787 1035 2099 890 1364 4297 8 4496 4316 2776 1802 1385 2455 1931 2943 2326 3931 2472 397 2865 700
+Case #86: 2583 3221 2999 4005 3513 1256 2912 112 1373 3991 1534 2006 1251 1475 2665 1250 264 4322 2934 2015 36 3077 1129 2881 87 2009 2555 4006 2009 963 2982 2409 951 513 2868 82 3640 2376 4417 4175 3309 3669 1282 4381 4320 800 1317 857 117 2434 3391 1753 3993 2337 542 4300 631 3906 35 1653 172 2985 1109 3947 2819 1952 3205 1904 2094 4138 3708 1796 3240 2723 3230 736 2448 2537 795 2772 983 1442 2888 2529 1141 1909 3954 1042 1522 795 663 2558 2604 2436 654 2606 2720
+Case #87: 249 922 800 408 1427 241 4560 1277 2514 1387 3641 481 3721 135 2966 1917 934 1970 4027 3322 3875 2033 2083 3586 1411 785 2974 2538 2925 735 731 4476 4294 1528 3391 4545 1547 3626 232 2400 3604 760 871 2645 804 241 3070 3411 3557 930 683 3805 2005 2067 2687 2950 838 1602 999 4347 72 133 2680 3734 3038 329 1960 3377 2662 3394 1107 166 2541 553 4050 3159 4143 2139 3498 3376 2528 3352 4028 1098 3731 4576 3423 974 905 2453 901 683 2611 4426 3259 3478 4220
+Case #88: 3643 3677 1356 4397 1696 3064 179 4905 1358 2938 946 1273 3808 1034 922 3182 3328 4628 4737 4597 4610 834 4562 3276 36 3369 1789 4499 4181 693 3541 2709 271 3320 4029 4590 3864 3817 986 3717 372 4355 3999 4301 3018 3232 2544 4389 4783 4819 2386 589 1483 2381 3519 2437 2326 357 546 4267 1009 3410 1890 1382 3090 4909 651 4163 3850 3129 1169 4137 534 3934 1769 3737 2396 3760 4361 2566 30 1273 4920 2912 2650 4061 1554 2607 4083 4511 2708 3251 42 1501 3127 696 929 4435 3316 2397
+Case #89: 86 85 71 60 85 88 73 67 19 13 80 4 72 62 17 88 7 58 57 80 37 59 20 18 5 43 45 79 48 21 72 18 72 46 75 31 71 59 54 82 7 38 62 78 87 84 56 76 77 26 76 57 41 68 33 42 65 82 31 70 44 82 8 40 9 17 52 51 76 9 17 5 29 84 34 21 88 48 53 49 24 37 10 1 52 20 16 61
+Case #90: 898 504 2521 2616 3944 3005 583 1662 2033 3943 1792 2235 3152 2827 885 24 1050 3375 3637 268 111 2289 3766 1254 1219 902 1319 3306 2704 1536 1031 3281 3275 3647 3954 2283 2870 2600 115 490 869 3984 1811 199 2732 1909 1851 3912 2500 1588 1473 1727 1678 270 1665 31 3321 3407 1072 3172 3509 3392 3857 3338 1361 2342 834 1289 2742 2184 3911 1171 3978 2596 77 2834 3276 2978 2804 913 202 190 816 3118 1000 1728 1445 2583 3111 2509 4009 1544 1842 1029 2382 3192 27 2556 1551
+Case #91: 2704 2267 2406 3054 2865 3019 2577 3401 16 397 4191 4452 3392 1771 3501 4545 3537 1492 1940 482 764 4679 2187 1408 1853 2597 3838 4065 3708 4371 3700 1331 2526 157 2840 607 821 2503 4060 4773 3702 4408 24 352 1154 4150 4735 4782 4319 3026 3233 2111 4082 1247 1771 2473 3297 2034 2882 904 739 229 3750 3213 4088 3330 1488 2685 1841 3790 4053 2484 3280 2612 3979 3657 3328 2914 785 1483
+Case #92: 3314 4297 2728 747 3992 3304 4641 258 4480 2215 2208 854 1302 476 544 4159 2497 4867 345 973 1642 1146 2891 3936 1811 267 4230 3037 789 3915 4560 552 3958 4945 2278 2574 4148 2876 409 4241 186 3542 4141 1372 2480 1947 2367 1165 3135 4756 2032 1197 491 3015 2419 1152 4820 1353 2854 1299 2966 3802 1994 1634 3247 2026 2795 2831 2679 2417 956 3957 1980 2639 2742 915 3995 1852 1394 3335 156 4643 2641 4267 3891 3818 3919 4517 3422 1375 831 3468 2470 4989 4336 2895 879
+Case #93: 946 3397 3296 628 4560 2853 2602 998 1875 2546 3895 760 3148 121 3255 4419 2101 1210 710 2809 3366 3646 1563 375 615 4206 2120 441 691 42 4572 1217 2414 3262 189 4412 2591 1508 1459 552 656 4407 1280 2200 482 2376 854 1355 4053 2024 3666 2047 3381 2294 734 4380 954 1943 3541 2817 3720 4691 4744 1808 1232 900 1460 334 310 400 4089 4572 719 4850 1579 505 3923 4097 1421 3614 1265 1660 1941 4927 1352 4886 1713 2009 3746 3481 3842 2050 2035 1445 4825 2960 4503 1020 2015 2614
+Case #94: 4319 2706 1835 3985 3531 1992 1837 1199 1146 4136 2710 4560 3500 1664 3777 951 2910 2966 717 4016 1303 3206 4198 3181 3974 3169 1837 1783 1186 1405 2470 483 1811 2362 1567 723 3118 3876 239 590 2713 4553 3309 3697 3085 2525 3636 3703 3303 2633 1699 379 3611 4520 4456 4620 225 1269 2474 3930 2418 1761 3145 2485 548 1243 728 1721 1656 866 3990 3324 3125 976 4588 3993 1955 3792 4130 1756 889 4227 2700 3828 4319 4643 1810 731 1852 3437 4667 1494 3284 2165 4265 2319
+Case #95: 1511 2919 3344 142 1760 2771 2213 1521 4487 881 3245 4486 17 1114 482 1948 2355 2180 3651 1411 3381 4412 3367 3129 2468 1037 1490 2356 1540 677 1486 344 2974 4205 1358 3110 676 2157 1507 2884 1258 3118 1119 3041 3601 3848 1748 2913 4042 3788 970 3711 935 820 2943 2728 1366 2705 1640 1174 1539 380 4647 1141 3909 950 1902 4586 2512 4219 3773 4630 1540 3837 3574 2151 2453 2666 2464 506 3284 3168 1312 4411 3462 97 656 259 4313 3411 203 1453 402 2941 3718 337 3585 1278 3783
+Case #96: 4182 1139 408 3482 2106 262 620 3735 739 371 4895 68 2562 511 3659 626 456 2775 1416 2052 4823 138 1036 1670 2843 4827 593 753 2692 1364 3641 2976 2215 776 734 3055 126 2466 315 2507 4345 2596 4171 2741 4120 864 4574 421 3023 1744 3662 2522 2554 2099 2283 3837 648 2950 3288 4817 385 4902 501 3059 4726 919 2161 2029 3665 4379 1977 4919 3480 3130 165 1182 3208 1268 2944 1307 1184 1524 3984 1904 4693 2809 2202 2463 4423 2679 1606 4847 4451 4468 1467
+Case #97: 4073 4 2590 3057 2435 3452 3305 3413 1245 2097 4376 3571 4115 2204 1554 3624 3637 2298 4461 4129 3613 3300 2582 1672 205 893 3779 835 1757 675 1285 420 1983 3749 2153 1324 4084 1542 2240 1386 4086 2734 688 178 3064 623 3136 3646 3467 3700 2758 3644 2860 3292 811 1156 3302 2206 4240 9 3466 2610 4277 282 3170 185 925 4187 2790 1889 134 3846 2945 275 3544 2964 1708 340 989 912 3695 4010 307 1341 2921 3396 3778 4263 1395 3264 2985 3099 1101 3620 4435 172 104 3515 2276 2382
+Case #98: 3977 205 3477 1590 3074 3572 2651 972 2499 329 2468 642 623 2665 1693 1643 598 3360 2489 2251 2537 2165 1676 2572 575 311 3646 232 1043 2407 2345 558 2 2127 3071 2588 742 348 3063 4202 2638 3520 766 4163 3359 2022 4029 657 2180 2715 261 1215 492 1128 2304 2487 1530 3435 2806 3773 3327 3330 244 4052 1890 3063 2006 1548 356 510 525 3081 3825 4207 2503 4381 3973 701 1424 3939 872 3797 4356 861 3168 2736 2958 3523 2666 1943 1435 1916 4034 1077 2782 2778 2617 473 1597
+Case #99: 1433 2715 1337 1571 1994 1677 1457 2249 1938 1668 954 2872 1753 74 102 732 1219 2175 945 591 2028 20 859 2438 27 2821 50 686 102 2501 1670 1849 200 1169 883 2619 1731 1907 1843 2275 261 1294 2173 1023 2309 27 2428 2475 151 290 1273 1283 1581 1667 1863 430 2194 2425 2429 1642 2483 518 1870 887 1900 2429 2626 145 1388 162 1985 720 239 1618 2911 1007 1139 2892 2131 1401 47 2873 327 2611 1482 1238 448 725 2590 27 1460 421 515 1583 1037 973 2551 2896 2113
+Case #100: 2816 3678 3389 1329 790 1589 3482 2168 4398 1022 2410 4200 4934 3028 1441 1391 1094 4101 4153 714 683 160 432 475 418 3188 4927 2568 4264 2355 4749 4289 3764 2286 4617 425 4872 1278 745 367 1014 3366 869 4474 1543 3438 3856 2958 2915 123 980 3859 2469 3403 1863 395 1387 1846 3898 2852 4997 733 181 3705 3289 4091 1670 4307 1402 4556 2203 3805 455 3856 3754 3998 3572 2419 1520 633 81 1587 1702 4817 153 1313 1580 1929 1608 1286 4887 92 1755 98 1911 1844 4101 430 2622
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 8b500f6..cd09626 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -40,8 +40,20 @@ pub fn solve_all_cases()
     );
 }
 
-//A binary tree represented in an array
-struct BinaryTree
+//A binary tree represented in an array, starting at 1 for convenience
+/*
+ (1) 001 [0..=7]
+ (2) 010 [0..=3] (3) 011 [4..=7]
+ (4) 100 [0..=1] (5) 101 [2..=3] (6) 110 [4..=5] (7) 111
+ (8) 1000 [0..=0] .... (15) 1111
+
+
+    //parent is (i) / 2
+    //left child is =(2*i);
+    //and right_son=(2*i)+1;
+
+    */
+struct BinarySumTree
 {
     data: Vec<i64>,
     //Number of elements, not the size of the tree
@@ -49,7 +61,7 @@ struct BinaryTree
     num_levels: usize
 }
 
-impl BinaryTree
+impl BinarySumTree
 {
     fn new(num_elems: usize) -> Self
     {
@@ -57,7 +69,7 @@ impl BinaryTree
         while 1 << (levels-1) < num_elems {
             levels += 1;
         }
-        BinaryTree {
+        BinarySumTree {
             data: vec![0; 1 << levels ],
             num_elems,
             num_levels: levels
@@ -91,14 +103,13 @@ impl BinaryTree
         }
         let mut cur_node = 1;
         let mut target_sum = target_sum;
-        while range_width >= 2 {
-            println!("Cur node {} target sum {} range width {} range to {} val @ cur_node {}",
-            cur_node, target_sum, range_width, range_to, self.data[cur_node]);
-
-            if self.data[cur_node] == target_sum {
-                return min(self.num_elems-1, range_to-1);
-            }
 
+        //go all the way to the bottom level because we want the smallest index
+        //and there could be zeros
+        while range_width > 1 {
+      /*      println!("Cur node {} target sum {} range width {} range to {} val @ cur_node {}",
+            cur_node, target_sum, range_width, range_to, self.data[cur_node]);
+*/
             range_width /= 2;
 
             //lhs
@@ -132,7 +143,7 @@ impl BinaryTree
         let mut i = to + start;
         let mut sum = self.data[i];
         while i > 1 {
-            debug!("I is {}  {:0>width$b}", i, i, width=7);
+            //debug!("I is {}  {:0>width$b}", i, i, width=7);
 
             if i & 1 > 0 {
                 sum += self.data[i - 1];
@@ -161,67 +172,34 @@ impl BinaryTree
 
 fn solve(k: usize, indices: &[usize]) -> Vec<usize>
 {
-    let mut bt = vec![0; k << 1];
-
-    // (0) 000
-    // (1) 001  (2)   010
-    // (3) 011  (4) 100  (5) 101 (6) 110
-
-    // (1) 001 [0..=7]
-    // (2) 010 [0..=3] (3) 011 [4..=7]
-    // (4) 100 [0..=1] (5) 101 [2..=3] (6) 110 [4..=5] (7) 111
-    // (8) 1000 [0..=0] .... (15) 1111
-
-    // query for up to index x
-    // x=0 = 1000
-    // x=1 = 0100
-    // x=2 = 0100 + 1010
-    // x=3 = 0010
-    // x=4 = 0010 + 1000
-    // x=5 = 110
-    // x=6 = 0010 + 0110 + 1110
-    // x=7 = 0001
-
-    //parent is (i) / 2
-    //left child is =(2*i);
-    //and right_son=(2*i)+1;
-
-    // query(0 to 7) = 4 + 2 + 1
-    // query(0 to 5) = 4 + 1
-
-    for i in k..bt.len() {
-        //add last row
-        bt[i] = 1;
-        let mut p = i;
-        while p > 0 {
-            //divide by 2
-            p >>= 1;
-            bt[p] += 1;
-        }
-    }
+    let mut bt = BinarySumTree::new(k);
 
-    debug!("Binary tree: {:?}", bt);
-
-    let mut i = 1;
-    let mut level = 0;
-    while i < bt.len() {
-        let stop = min(bt.len() - i, 1 << level);
-        debug!("Level {} = {:?}", level, &bt[i..i + stop]);
-        level += 1;
-        i += stop;
+    for i in 0..k {
+        bt.set(i, 1);
     }
 
-    assert_eq!(bt[1], k);
 
     let mut deck = vec![0; k];
 
-    let mut cur_pos = 0;
-    for card_no in 1..k {
+    let mut cur_pos = deck.len() -1 ;
+
+    for card_no in 1..=k {
         //for sum, write in binary 1
+        let sum_to_current_pos = bt.sum_to(cur_pos);
+        let cur_sum = bt.sum();
+        let target_sum = 1 + (card_no as i64 +sum_to_current_pos-1) % cur_sum;
+        cur_pos = bt.lower_bound( target_sum );
+        debug!("Target sum is {}.  Cur_pos {}" , target_sum, cur_pos);
+        assert_eq!(deck[cur_pos], 0);
+        deck[cur_pos] = card_no;
+        bt.set(cur_pos, 0);
+
+        debug!("Deck after {} is {:?}", card_no, deck);
+//            bt.debug_print();
 
     }
 
-    vec![1, 2]
+    indices.iter().map( |i| deck[i-1]).collect()
 }
 
 #[cfg(test)]
@@ -237,7 +215,7 @@ mod test_binary_tree
     #[test]
     fn test_bt()
     {
-        let mut bt = BinaryTree::new(9);
+        let mut bt = BinarySumTree::new(9);
                 bt.debug_print();
 
         assert_eq!(5, bt.num_levels);
@@ -283,7 +261,7 @@ mod test_binary_tree
 
         for _ in 0..10 {
             let size = num_elems_gen.sample(&mut rng);
-            let mut bt = BinaryTree::new(size);
+            let mut bt = BinarySumTree::new(size);
 
             let mut check = vec![0; size];
 
@@ -305,7 +283,7 @@ mod test_binary_tree
     #[test]
     fn test_small()
     {
-        let mut bt = BinaryTree::new(1);
+        let mut bt = BinarySumTree::new(1);
         bt.set(0, -3);
         assert_eq!(bt.sum_to(0), -3);
 
@@ -316,7 +294,7 @@ mod test_binary_tree
     #[test]
     fn test_big()
     {
-        let mut bt = BinaryTree::new(1_000_000);
+        let mut bt = BinarySumTree::new(1_000_000);
         bt.set(0, -3);
         assert_eq!(bt.sum_to(0), -3);
 
@@ -327,7 +305,7 @@ mod test_binary_tree
     #[test]
     fn test_lower_bound_exact() {
         let size = 100;
-        let mut bt = BinaryTree::new(size);
+        let mut bt = BinarySumTree::new(size);
 
         for i in 0..size {
             bt.set(i, (2*(i+1)) as i64);
@@ -345,7 +323,7 @@ mod test_binary_tree
     #[test]
     fn test_lower_bound_inexact() {
         let size = 5;
-        let mut bt = BinaryTree::new(size);
+        let mut bt = BinarySumTree::new(size);
 
         for i in 0..size {
             bt.set(i, (2*(i+1)) as i64);
@@ -366,4 +344,16 @@ mod test_binary_tree
         assert_eq!(bt.lower_bound(31), 5);
     }
 
+
+    #[test]
+    fn test_lower_bound_bug() {
+        let mut bt = BinarySumTree::new(5);
+        bt.set(4, 1);
+
+        assert_eq!(4, bt.lower_bound(1));
+
+        bt.set(4, 0);
+        bt.set(3, 1);
+        assert_eq!(3, bt.lower_bound(1));
+    }
 }

From 2e275780c785694a56b9c9ce4feae1cb80d1e877 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 20 Feb 2019 22:51:34 -0300
Subject: [PATCH 046/122] c

---
 .../src/y2008round1b/C-large-practice.out     | 110 ++----------------
 codejam_2008/src/y2008round1b/c.rs            |   2 +-
 2 files changed, 11 insertions(+), 101 deletions(-)

diff --git a/codejam_2008/src/y2008round1b/C-large-practice.out b/codejam_2008/src/y2008round1b/C-large-practice.out
index f4f595d..066d9b9 100644
--- a/codejam_2008/src/y2008round1b/C-large-practice.out
+++ b/codejam_2008/src/y2008round1b/C-large-practice.out
@@ -1,100 +1,10 @@
-Case #1: 607
-Case #2: 455
-Case #3: 735
-Case #4: 527
-Case #5: 735
-Case #6: 471
-Case #7: 607
-Case #8: 095
-Case #9: 055
-Case #10: 663
-Case #11: 935
-Case #12: 095
-Case #13: 807
-Case #14: 143
-Case #15: 535
-Case #16: 855
-Case #17: 807
-Case #18: 607
-Case #19: 543
-Case #20: 095
-Case #21: 407
-Case #22: 951
-Case #23: 847
-Case #24: 935
-Case #25: 943
-Case #26: 471
-Case #27: 151
-Case #28: 191
-Case #29: 607
-Case #30: 343
-Case #31: 143
-Case #32: 007
-Case #33: 743
-Case #34: 407
-Case #35: 007
-Case #36: 551
-Case #37: 543
-Case #38: 063
-Case #39: 743
-Case #40: 935
-Case #41: 143
-Case #42: 455
-Case #43: 855
-Case #44: 807
-Case #45: 455
-Case #46: 351
-Case #47: 047
-Case #48: 471
-Case #49: 951
-Case #50: 343
-Case #51: 591
-Case #52: 063
-Case #53: 943
-Case #54: 095
-Case #55: 743
-Case #56: 143
-Case #57: 151
-Case #58: 255
-Case #59: 951
-Case #60: 847
-Case #61: 903
-Case #62: 471
-Case #63: 791
-Case #64: 751
-Case #65: 743
-Case #66: 463
-Case #67: 807
-Case #68: 447
-Case #69: 455
-Case #70: 751
-Case #71: 527
-Case #72: 063
-Case #73: 535
-Case #74: 735
-Case #75: 743
-Case #76: 743
-Case #77: 903
-Case #78: 751
-Case #79: 655
-Case #80: 455
-Case #81: 543
-Case #82: 791
-Case #83: 655
-Case #84: 263
-Case #85: 935
-Case #86: 527
-Case #87: 751
-Case #88: 351
-Case #89: 247
-Case #90: 607
-Case #91: 143
-Case #92: 455
-Case #93: 047
-Case #94: 455
-Case #95: 095
-Case #96: 935
-Case #97: 903
-Case #98: 527
-Case #99: 407
-Case #100: 991
+Case #1: 441881 376754 559923 19224 327656 487024 167863 71593 40981 356382 298563 487885 577311 317994 157434 127911 548094 74700 183182 270865 13299 60379 139197 687993 582371 277827 446095 80301 652152 686280 114308 570537 143602 226052 442924 444823 608749 171272 144383 593782 2170 107282 114304 395953 655648 680095 76185 607832 552080 463547 15950 149247 659763 592020 704296 35909 481289 59412 13836 314721 462052 352668 38909 61862 108762 159601 654330 459825 244290 457759 191709 351385 141856 584305 417517 448856 472730 573570 537443 634334 12874 535317 423520 107096 96653 263606 155058 325690 452764 625443 27403 290257 185325
+Case #2: 452720 328089 720577 188213 427560 118592 622008 95497 712347 480008 819124 681137 726737 624566 662634 429697 129252 402280 824944 497572 487250 469625 749407 386973 484515 223366 672090 469389 133066 107113 812445 295507 733298 80204 812063 21775 206720 708347 332873 365022 694840 250838 714042 135129 284348 524874 545465 238538 687906 56475 22884 269441 464731 46233 744320 706713 340370 155770 547488 15983 365853 322904 469477 453778 515746 662476 22233 227026 567042 653479 570730 728042 137881 430574 279115 17425 204353 782402 323411 122391 656995 97426 377986 811811 472239 399428 96654 38147 773623 209732 769303 115642 383160 432696 53155 644284
+Case #3: 608075 34461 286494 46153 141674 211 402204 473355 379443 533451 586916 423352 602213 577003 58800 267363 674698 44917 264293 368099 33761 114452 618822 571228 273584 548191 353880 276664 626899 643036 614688 445659 552474 123727 373392 26324 194284 483916 639340 393010 501535 631156 217812 510205 624523 248645 377982 277327 571042 668382 546792 313970 514801 17845 101821 249890 89973 33441 647232 342469 19744 444572 558470 365158 361822 164528 177959 590940 559434 388723 584698 467666 210705 278010 564661 9879 29944 431993 24652 525525 641024 91557
+Case #4: 521872 627631 106090 468447 530453 355756 803938 655642 725717 43005 430101 93791 667236 356175 134150 541434 92389 211783 515883 521029 922485 3185 544022 150655 729607 799648 556933 310819 387323 865549 773745 263489 442253 17364 816382 741319 897482 755798 905889 484544 866378 33232 645425 422042 348742 620890 40218 804201 26819 212163 549469 858719 702427 436696 310476 282797 710420 12553 113096 375833 346424 784611 246890 877553 607376 69795 377532 138628 756465 94037 870506 885009 910457 771036 530232 611436 860023 32519 369482 95683 28369 762972 94269 526670 627380 443430 676267 547256 887700 330917 80360 628301 22541 140496 575088 540283 404983
+Case #5: 685872 903785 793446 279256 667014 299592 336625 786245 388909 214583 833884 532931 246999 33198 611957 919274 802912 45315 790632 289705 174104 116349 768330 12458 117610 597003 441966 906234 511203 461123 761029 669808 373653 713474 906312 520800 667882 836956 148057 789703 703893 231400 427405 877158 213042 232459 756439 160926 613744 368361 314729 817569 295177 59513 117662 364966 763237 126442 274024 78477 306502 575791 523344 209604 759524 148627 584646 155013 237963 919873 820757 500182 400104 783462 564312 839591 441171 714869 695330 723600 337337 48154 458217 400638 719999 425348 77113 41599 386894 192694 476678 427961 138603 619853 552764 22306 94116 785053 141049 106502
+Case #6: 341805 24592 60486 638525 188063 363000 328912 685799 35430 484533 46812 150344 149612 379692 57160 474152 412869 417698 189659 640850 484716 389809 404626 277598 380497 75534 356948 168487 794191 764251 308762 688882 360570 699149 486201 607721 503882 571607 576248 436101 376525 332233 760520 486379 468538 609991 46776 781202 273419 451762 20278 162586 704596 111676 430247 770742 702971 543772 613115 428429 628148 264043 46656 437834 688036 468688 409231 738708 291109 509644 135748 760164 636796 403894 623229 237454 436590 738162 439578 341990 120727 778636 556224 2031 683348 184984 653940 525221 108291 779780 47440 310404 120186 510984 466903 531405 770391 441955 592388 661659
+Case #7: 939954 452440 786403 408769 522157 592275 224176 553372 699464 791354 62907 417071 408612 476204 541358 802178 62904 430394 5000 784051 726907 170072 854760 235813 543814 400463 866521 422229 855842 539181 213371 657835 813649 544777 9390 509161 946478 883952 392456 316505 65764 394416 753467 266498 601464 759189 359843 36743 706759 828064 504855 437285 216214 789064 523343 293819 170865 508722 291351 761299 957168 161713 176494 445835 460775 291661 951674 482937 159081 509325 687996 45765 354829 326165 68494 12631 611405 726397 68976 963653 496110 415845 353552 185936 331670
+Case #8: 54940 286344 187356 967636 185390 409840 846751 350033 199971 682965 217418 768134 221173 112347 765037 194764 417039 612770 276006 422498 154335 90411 554094 908632 583311 555878 526349 353391 859642 149046 18421 329019 762500 632124 61725 181583 242494 566151 662191 964609 921277 277333 551470 107011 614628 707274 569399 273183 680828 919881 179189 163519 933304 98335 530754 578136 348373 437487 318001 924853 407393 362497 830135 15860 964571 435164 608461 868040 233102 129423 352313 934628 777062 31123 290747 230998 926998 69575 433814 666561 919114 230445 949935 182895 956918 888746 473694 969277 608446 97943 680960 356961 283715 536706 875458 272881 577759 230764 151776 282407
+Case #9: 152970 805069 676607 927757 639421 956230 91716 496247 67604 430503 586708 480251 834372 644893 111967 503895 613643 360293 286124 194359 657128 92215 852485 536211 625967 219120 196053 858209 72689 395721 400518 972110 819139 985459 256074 70063 587988 400972 859977 160933 798661 85776 37504 571230 624976 787209 647319 412414 277084 290289 128664 834486 946029 60920 223825 139761 965699 722923 154727 941623 668002 202954 88262 631864 687235 513293 180863 921650 603465 475810 913440 70239 193730 940981 383861 520903 325764 836888 779777 13776 108624 139414 249649 200126 715426 185076 923319 105295 730066 970676 764260 148332 122938 949142 561274 440429 510363 700715 787038 294024
+Case #10: 894397 523458 706631 680230 464947 581249 336653 784584 333616 564519 972421 825309 19822 71666 254508 651102 303811 261836 540913 758513 960783 328740 842511 580877 63391 494030 577797 568822 144240 781851 881925 775381 740470 420229 896382 11191 221996 392889 313614 958103 890708 381455 222047 67116 569411 492158 430912 357713 34541 545539 17943 809348 850280 892799 434372 894408 694532 439605 534298 346304 732646 370268 900155 373189 386553 555171 413709 585286 761757 159877 261517 384143 369734 471920 241431 324693 461611 281665 890605 335815 252352 510225 615888 786425 192659 208463 759134 163990 418189 342885 513171 623753 829830 341143 306441 27527 952479
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index cd09626..9918131 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -10,7 +10,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &[
-            "C-small-practice", // "C-large-practice"
+            "C-small-practice",  "C-large-practice"
         ],
         "y2008round1b",
         |reader, buffer| {

From b87a2e777edbafed641320b9ddf5d57dd65336a2 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 20 Feb 2019 22:59:17 -0300
Subject: [PATCH 047/122] c

---
 codejam_2008/src/y2008round1b/c.rs | 97 ++++++++++++++----------------
 1 file changed, 45 insertions(+), 52 deletions(-)

diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 9918131..5b77329 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -9,9 +9,7 @@ Binary Interval tree using an array
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "C-small-practice",  "C-large-practice"
-        ],
+        &["C-small-practice", "C-large-practice"],
         "y2008round1b",
         |reader, buffer| {
             let t = reader.read_int();
@@ -42,23 +40,23 @@ pub fn solve_all_cases()
 
 //A binary tree represented in an array, starting at 1 for convenience
 /*
- (1) 001 [0..=7]
- (2) 010 [0..=3] (3) 011 [4..=7]
- (4) 100 [0..=1] (5) 101 [2..=3] (6) 110 [4..=5] (7) 111
- (8) 1000 [0..=0] .... (15) 1111
+(1) 001 [0..=7]
+(2) 010 [0..=3] (3) 011 [4..=7]
+(4) 100 [0..=1] (5) 101 [2..=3] (6) 110 [4..=5] (7) 111
+(8) 1000 [0..=0] .... (15) 1111
 
 
-    //parent is (i) / 2
-    //left child is =(2*i);
-    //and right_son=(2*i)+1;
+   //parent is (i) / 2
+   //left child is =(2*i);
+   //and right_son=(2*i)+1;
 
-    */
+   */
 struct BinarySumTree
 {
     data: Vec<i64>,
     //Number of elements, not the size of the tree
     num_elems: usize,
-    num_levels: usize
+    num_levels: usize,
 }
 
 impl BinarySumTree
@@ -66,20 +64,20 @@ impl BinarySumTree
     fn new(num_elems: usize) -> Self
     {
         let mut levels = 1;
-        while 1 << (levels-1) < num_elems {
+        while 1 << (levels - 1) < num_elems {
             levels += 1;
         }
         BinarySumTree {
-            data: vec![0; 1 << levels ],
+            data: vec![0; 1 << levels],
             num_elems,
-            num_levels: levels
+            num_levels: levels,
         }
     }
 
     fn set(&mut self, idx: usize, val: i64)
     {
         assert!(idx < self.num_elems);
-        let mut i = idx + (1 << (self.num_levels -1));
+        let mut i = idx + (1 << (self.num_levels - 1));
         let old_val = self.data[i];
         self.data[i] = val;
         while i > 0 {
@@ -107,28 +105,26 @@ impl BinarySumTree
         //go all the way to the bottom level because we want the smallest index
         //and there could be zeros
         while range_width > 1 {
-      /*      println!("Cur node {} target sum {} range width {} range to {} val @ cur_node {}",
-            cur_node, target_sum, range_width, range_to, self.data[cur_node]);
-*/
+            /*      println!("Cur node {} target sum {} range width {} range to {} val @ cur_node {}",
+                        cur_node, target_sum, range_width, range_to, self.data[cur_node]);
+            */
             range_width /= 2;
 
             //lhs
-            if self.data[cur_node*2] >= target_sum {
+            if self.data[cur_node * 2] >= target_sum {
                 cur_node = cur_node * 2;
                 assert!(range_width < range_to);
                 range_to -= range_width;
             } else {
                 //subtract lhs
-                target_sum -= self.data[cur_node*2];
+                target_sum -= self.data[cur_node * 2];
                 cur_node = cur_node * 2 + 1;
 
                 assert!(self.data[cur_node] >= target_sum);
             }
-
-
         }
 
-        range_to-1
+        range_to - 1
     }
 
     fn sum(&self) -> i64
@@ -139,7 +135,7 @@ impl BinarySumTree
     fn sum_to(&self, to: usize) -> i64
     {
         //beginning of last row, leaves
-        let start = 1 << (self.num_levels -1);
+        let start = 1 << (self.num_levels - 1);
         let mut i = to + start;
         let mut sum = self.data[i];
         while i > 1 {
@@ -178,28 +174,26 @@ fn solve(k: usize, indices: &[usize]) -> Vec<usize>
         bt.set(i, 1);
     }
 
-
+    println!("After set");
     let mut deck = vec![0; k];
 
-    let mut cur_pos = deck.len() -1 ;
+    let mut cur_pos = deck.len() - 1;
+    let mut sum_to_current_pos = bt.sum_to(cur_pos);
 
     for card_no in 1..=k {
-        //for sum, write in binary 1
-        let sum_to_current_pos = bt.sum_to(cur_pos);
-        let cur_sum = bt.sum();
-        let target_sum = 1 + (card_no as i64 +sum_to_current_pos-1) % cur_sum;
-        cur_pos = bt.lower_bound( target_sum );
-        debug!("Target sum is {}.  Cur_pos {}" , target_sum, cur_pos);
+        let target_sum = 1 + (card_no as i64 + sum_to_current_pos - 1) % bt.sum();
+        cur_pos = bt.lower_bound(target_sum);
+        debug!("Target sum is {}.  Cur_pos {}", target_sum, cur_pos);
         assert_eq!(deck[cur_pos], 0);
         deck[cur_pos] = card_no;
         bt.set(cur_pos, 0);
+        sum_to_current_pos = target_sum-1;
 
-        debug!("Deck after {} is {:?}", card_no, deck);
-//            bt.debug_print();
-
+        //debug!("Deck after {} is {:?}", card_no, deck);
+        //            bt.debug_print();
     }
 
-    indices.iter().map( |i| deck[i-1]).collect()
+    indices.iter().map(|i| deck[i - 1]).collect()
 }
 
 #[cfg(test)]
@@ -208,15 +202,14 @@ mod test_binary_tree
     use super::*;
     use rand::distributions::{Distribution, Uniform};
     use rand::prelude::StdRng;
-    use rand::SeedableRng;
     use rand::Rng;
-
+    use rand::SeedableRng;
 
     #[test]
     fn test_bt()
     {
         let mut bt = BinarySumTree::new(9);
-                bt.debug_print();
+        bt.debug_print();
 
         assert_eq!(5, bt.num_levels);
         bt.set(3, 4);
@@ -273,8 +266,7 @@ mod test_binary_tree
                 bt.set(pos, val);
 
                 for i in 0..size {
-                    assert_eq!(check.iter().take(i + 1).sum::<i64>(),
-                               bt.sum_to(i));
+                    assert_eq!(check.iter().take(i + 1).sum::<i64>(), bt.sum_to(i));
                 }
             }
         }
@@ -299,34 +291,35 @@ mod test_binary_tree
         assert_eq!(bt.sum_to(0), -3);
 
         bt.set(1_000_000 - 1, 7);
-        assert_eq!(bt.sum_to(1_000_000-1), 4);
+        assert_eq!(bt.sum_to(1_000_000 - 1), 4);
     }
 
     #[test]
-    fn test_lower_bound_exact() {
+    fn test_lower_bound_exact()
+    {
         let size = 100;
         let mut bt = BinarySumTree::new(size);
 
         for i in 0..size {
-            bt.set(i, (2*(i+1)) as i64);
+            bt.set(i, (2 * (i + 1)) as i64);
         }
 
         for i in 0..size {
             //sum formula
-            let target_sum = ((i+1)*(i+2)) as i64;
-            println!("sum of 2+4+...+ for index {} should be {}",
-            i, target_sum);
+            let target_sum = ((i + 1) * (i + 2)) as i64;
+            println!("sum of 2+4+...+ for index {} should be {}", i, target_sum);
             assert_eq!(bt.lower_bound(target_sum), i as usize);
         }
     }
 
     #[test]
-    fn test_lower_bound_inexact() {
+    fn test_lower_bound_inexact()
+    {
         let size = 5;
         let mut bt = BinarySumTree::new(size);
 
         for i in 0..size {
-            bt.set(i, (2*(i+1)) as i64);
+            bt.set(i, (2 * (i + 1)) as i64);
         }
 
         //2+4+6+8+10
@@ -344,9 +337,9 @@ mod test_binary_tree
         assert_eq!(bt.lower_bound(31), 5);
     }
 
-
     #[test]
-    fn test_lower_bound_bug() {
+    fn test_lower_bound_bug()
+    {
         let mut bt = BinarySumTree::new(5);
         bt.set(4, 1);
 

From 3c9a0b7228616ac9135a2bb8299e0ee5a0f2c0ba Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 10:16:44 -0300
Subject: [PATCH 048/122] a

---
 codejam_2008/src/main.rs                      |   5 +-
 codejam_2008/src/y2008round1b/c.rs            |   2 +-
 .../src/y2008round1c/A-large-practice.in      | 199 ++++++++++++++++++
 .../src/y2008round1c/A-large-practice.out     |  99 +++++++++
 .../src/y2008round1c/A-small-practice.in      |  19 ++
 .../src/y2008round1c/A-small-practice.out     |   9 +
 codejam_2008/src/y2008round1c/a.rs            |  63 ++++++
 codejam_2008/src/y2008round1c/mod.rs          |   3 +
 8 files changed, 397 insertions(+), 2 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1c/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1c/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1c/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1c/A-small-practice.out
 create mode 100644 codejam_2008/src/y2008round1c/a.rs
 create mode 100644 codejam_2008/src/y2008round1c/mod.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 728ba85..bc2f9a0 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -5,6 +5,7 @@ mod y2008practice;
 mod y2008qual;
 mod y2008round1a;
 mod y2008round1b;
+mod y2008round1c;
 
 extern crate codejam;
 
@@ -59,6 +60,7 @@ pub fn run_y2008_round_1b()
 {
     y2008round1b::a::solve_all_cases();
     y2008round1b::b::solve_all_cases();
+    y2008round1b::c::solve_all_cases();
 }
 
 pub fn run_y2008_round_1c()
@@ -75,7 +77,8 @@ fn main()
 {
     init_log();
 
-    y2008round1b::c::solve_all_cases()
+    y2008round1c::a::solve_all_cases();
+
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
     run_y2008_round_beta();*/
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 5b77329..1ff286b 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -4,7 +4,7 @@ use std::cmp::min;
 use std::io::Write;
 
 /*
-Binary Interval tree using an array
+Binary Sum tree using an array
 */
 pub fn solve_all_cases()
 {
diff --git a/codejam_2008/src/y2008round1c/A-large-practice.in b/codejam_2008/src/y2008round1c/A-large-practice.in
new file mode 100644
index 0000000..c56a9f6
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/A-large-practice.in
@@ -0,0 +1,199 @@
+99
+1000 201 44
+554079 210660 109215 593926 463133 549178 281789 92428 794927 589592 958642 767939 829074 175606 803256 750724 43877 685577 88346 384385 507492 431737 306542 675961 537610 274576 757066 496182 140301 20619 886777 694380 747630 512343 288305 727114 577872 86445 819541 372799 192388 294535 140737 21461
+1000 427 52
+797988 891075 62937 57912 644703 523570 969478 826923 291045 989808 667481 725488 899006 643084 315789 607393 444986 607717 2349 559187 334327 905678 226640 442987 952480 8688 113520 855434 540699 781298 878485 855038 188724 941421 429302 833426 464991 915131 176700 272387 904939 844180 514226 803944 3615 830014 411336 448601 954082 930036 524139 288409
+1000 927 99
+639386 465830 341295 46387 193951 693589 356109 875236 938876 880248 940780 911045 144701 850009 368292 997285 833707 4681 726465 108155 135513 860120 38032 519128 763275 216627 157411 703604 772687 222337 445654 928424 204518 786948 491163 398469 996888 847271 790056 935764 243870 730835 363160 388571 97195 247804 902207 930901 252484 145023 555407 387997 5143 593438 907124 768417 810064 580886 988372 99103 319574 434026 27526 524092 220973 518688 438912 734213 882310 228967 186328 642532 476153 549487 547454 573348 797290 449660 504248 566126 594682 59655 954122 599824 653092 377597 884592 979508 958483 389316 78610 278056 823341 622487 318499 560665 657527 757410 294877
+1000 620 90
+290532 997226 712797 732948 458144 952490 959297 285137 912286 149746 374046 400472 290166 660322 294283 464058 292305 838300 700946 906686 40382 608489 439563 990482 819945 864165 628134 82335 209664 455106 166624 500195 452331 395772 749494 426826 348261 708791 711963 260546 858536 602360 177370 665053 262681 988004 129110 71338 826303 346408 978023 383036 954896 933937 889870 774840 314454 518003 857174 524117 489460 540150 24312 941790 935921 773805 884968 800534 998947 113282 577431 373835 715641 754800 38887 978322 742803 684349 49659 85457 30756 544033 984845 502003 477970 391066 276843 792423 909068 650368
+1000 11 21
+360815 147047 697307 921891 716463 838269 921081 319270 85398 309134 296475 926378 775147 260037 25818 829434 858987 648406 987633 259836 708844
+1000 100 1000
+1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
+1000 652 85
+811471 657975 362335 194517 142756 499170 728841 2328 738796 736499 791489 760772 972879 238801 235976 51024 956584 146616 415302 973915 225896 903072 114856 324047 896450 88815 930531 826620 481388 554182 463204 292859 728509 825539 3727 387616 841060 732568 389943 96208 985418 697783 856979 958297 452935 92954 9320 409519 755921 940973 383433 498169 360396 14640 822215 256846 103454 269097 83465 101194 339631 63021 394052 584491 404911 397778 972106 245970 646697 878400 342177 632115 92534 715508 106763 545469 324813 116082 471339 80734 573406 371123 578902 933802 385762
+1000 941 96
+167051 561231 41318 288252 583969 397002 274327 106789 928877 787931 500960 174048 898260 886095 940771 197043 327424 296456 509412 488891 393971 658551 545768 887379 2352 216706 305455 208250 463719 118747 77697 147121 196329 119015 435373 780297 32368 226051 403437 961244 13981 904396 651643 428593 306842 592413 141987 150617 888868 651398 639507 282839 309948 701627 686569 312299 918332 508375 36900 898402 627121 114597 45522 339801 233611 997246 120098 265978 223296 39886 743573 753629 944282 911567 182221 767475 503979 324207 434444 392846 975604 73950 192036 285551 291928 394956 114202 210259 903330 151101 108660 46802 782049 154182 386603 15659
+1000 1 1000
+999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999 999999
+1000 473 90
+385595 770423 682319 683095 279786 172832 129635 11577 774172 418559 286171 284640 526149 213346 295084 975106 158257 284008 133678 802408 922586 700666 85032 113801 633786 2690 851343 537380 165596 60167 823022 551191 346942 505340 234285 626727 678171 880271 154655 452343 815181 957178 253334 341329 170523 548417 832787 845132 348776 482816 163891 271361 183481 248922 901514 817266 251612 269208 870998 417207 329375 694019 484749 676316 715710 235385 819394 910232 115655 490401 362574 447188 447578 132259 304868 134452 680675 137654 495935 29451 620470 659825 817163 320302 908747 718676 137568 676710 504236 524917
+1000 891 28
+706869 857202 856669 159142 147359 257988 959675 662657 371269 537105 552843 86910 808257 591730 581583 551059 792430 147593 152868 339537 691625 137712 841539 685946 528777 634733 478368 954196
+1000 133 34
+29975 970475 728897 954931 865696 222689 77951 396677 781148 509364 974162 446541 215439 601341 772573 274595 510468 591238 410824 494093 448958 944912 988925 642221 127799 638578 566988 766273 191216 933121 917659 221191 903595 646555
+1000 20 49
+644148 64076 627947 16230 804588 81427 591308 774340 165238 107812 415474 973952 704413 338769 537029 624247 629360 77588 83306 396015 348114 493788 645886 333376 221858 973034 358378 506533 608289 715397 718082 252436 779473 862380 268665 584060 943806 376325 874752 625395 484136 806577 599347 188548 145345 136375 812794 291057 730314
+1000 439 87
+69065 362584 548595 315730 291386 752017 910509 197623 601325 838662 842070 456369 125193 993049 403350 643473 378461 119117 941224 142604 587197 339387 850553 947953 128653 667545 309196 208143 600234 858986 465682 185650 221569 14276 501380 512954 766293 928240 226929 883969 283253 68998 340337 924798 578398 260038 568270 473210 379155 509493 615813 482703 848880 466366 430656 493884 650262 256203 218379 766847 115189 684060 952497 336757 214687 970228 366063 497331 898467 109343 381299 181719 694692 237988 106516 273089 498025 191137 746298 393531 700630 878462 876234 65861 344827 823241 559744
+1000 384 100
+7217 72986 813543 797798 257245 977100 682603 44300 476550 423854 23742 270533 822194 540997 534656 197229 346788 345497 234535 529459 87442 957956 37099 583382 527100 407317 107894 248089 168998 801277 141540 692566 874262 471434 6715 647858 448534 689318 692157 925083 113171 232251 195615 451716 289599 246622 648944 152738 592119 883479 682196 195912 841434 235646 779293 884886 159314 887186 649326 328311 204814 307217 20876 595428 778650 27591 243285 743535 233260 451794 184969 346430 684044 896936 798146 973642 659909 963441 126380 252027 846919 324927 964290 204705 76925 743583 605942 236238 147120 771619 80901 868286 78835 618128 463713 373836 162070 706997 633723 395329
+1000 403 92
+496871 577112 285933 65683 585115 836606 406471 611748 625947 623592 762643 914745 350241 525896 459425 241845 364170 198082 694065 255763 732633 315302 11526 331976 758341 881378 109642 485533 751324 612396 171977 248194 705860 457909 313876 290974 810866 236699 419073 953164 860290 698067 867909 726882 223962 843685 968727 104483 41766 662791 360246 290751 978092 888123 622726 252784 769500 248719 254668 520824 377466 426644 285369 83325 400904 599245 890650 211770 352295 309722 164933 728936 7788 549193 972170 748102 909229 940896 852584 467347 120038 729181 274449 614481 617304 413526 383616 903155 178596 638283 940330 556061
+1000 905 44
+823523 946272 149432 453311 230289 582812 110866 567296 531423 631040 550662 652790 287593 442558 3101 583253 756893 797426 13252 524357 314642 129817 121984 734226 538478 943880 444802 388069 887326 336707 480512 710848 799330 629944 164158 29619 729107 791376 113266 260529 938767 663927 429670 226359
+1000 314 76
+723781 301073 858355 496335 32757 534428 713143 259561 924000 585117 680791 253215 980209 359470 626538 387191 190321 376612 927677 752455 772716 381630 404857 700303 950275 420963 544403 108926 153440 543716 248501 877220 844789 106855 889906 393897 641282 603048 653458 81634 704516 850600 334848 684724 726421 477737 71914 916741 854348 999591 669196 143415 381220 590404 360069 331494 11366 904471 956771 164805 964538 205272 558376 809326 312126 448281 719575 469760 567681 373032 67745 272196 739983 918944 956920 466403
+1000 31 63
+352669 238701 390918 274932 630194 221504 264900 429926 957295 927903 978769 197148 138814 194426 423291 523119 741099 44109 11891 635820 860400 617153 731285 646031 913467 90268 15132 598341 847352 400162 73655 716372 155214 980924 991304 301760 718780 772555 731685 676074 216809 226805 389573 355622 421230 812863 878741 678680 373324 406983 314499 233723 24135 45783 396105 453953 652403 411236 568646 499754 327749 642300 216126
+1000 680 33
+899496 767379 28423 85043 427145 925994 675446 787213 773839 203164 208035 730610 884320 172572 935881 442696 498250 764358 890976 217824 750469 458656 107207 818213 730852 847189 253508 687771 313591 166539 232955 729438 933917
+1000 87 7
+986346 174483 709330 852750 147787 172133 896583
+1000 813 61
+540974 574352 646626 580952 931268 290879 883579 681714 119410 64667 308393 46504 106934 274664 533342 144289 320377 798302 976281 77073 558146 39056 397860 994857 819191 648800 154821 215154 939235 902986 441366 996560 477337 604343 93863 408604 895221 977441 606669 530982 558460 431413 577486 665393 706076 110827 326033 542805 909128 302314 136229 467273 857721 534089 978481 676911 182888 649654 408416 122123 552639
+1000 102 49
+976450 525296 856754 907084 546099 45034 10520 201565 650241 66060 314384 349104 846333 232868 283033 299754 248353 251181 397892 460534 232088 255920 26996 798970 184334 125295 970447 353958 981255 245901 471158 474057 771196 327912 381140 833646 372945 391659 551562 539537 974070 382297 404992 820402 615164 688025 120156 863516 939205
+1000 794 14
+460902 85238 718230 632298 964218 879903 682342 464454 708889 67529 576758 131563 397656 199577
+1000 100 901
+1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901
+3 9 26
+1 1 1 100 100 1 1 1 1 1 1 1 1 1 1 1 1 10 11 11 11 11 1 1 1 100
+1000 88 43
+778122 761935 194631 978533 230783 47740 193220 201010 930154 690550 615828 39496 588201 313898 250539 826188 936766 523627 840564 127902 786276 750447 828531 181089 626680 410743 525916 449920 970487 37355 45714 264960 315641 240345 243493 62775 804436 436712 263784 734589 643613 395963 290436
+1000 211 65
+531641 520742 216255 874795 769914 664801 620338 717513 320522 26057 182093 204744 726545 834161 116398 568089 767059 133760 666779 457717 575587 455440 415688 17238 86463 258783 153338 40556 905112 547900 646821 953104 68641 379427 344251 838554 560579 964588 72418 397452 990644 254511 602196 233540 605023 234945 317980 372081 885056 984758 346150 976995 956550 278189 994232 559364 536971 147569 599920 958434 211820 763092 427889 796812 142518
+1000 20 87
+93283 49198 700159 838652 17278 286452 603958 415154 842683 213331 171989 266002 305384 61655 608225 8653 555351 980491 177467 996936 669402 243561 808202 654668 724182 470774 857110 531302 260280 405481 528388 353562 454678 228546 708565 471956 31349 312522 403461 390383 42205 91802 656384 863940 153456 264609 872593 225158 761451 566411 222093 947204 326323 546646 601871 50504 533771 975332 581805 794050 380812 110193 663963 835489 855090 372528 823796 402791 201401 227257 793173 243605 835410 449557 107545 988865 230517 496489 730374 991967 579251 468818 455522 905573 15463 57392 956076
+1000 869 49
+267756 874220 415218 806704 166182 101513 294060 213119 717139 912751 474975 22868 938838 810718 902070 614144 1970 345612 372183 373093 702366 641119 486471 6671 155889 937619 405938 855382 199414 311807 643530 467169 186026 575099 790224 352208 676611 84284 565326 910102 513386 556652 449321 452223 367369 867742 582718 885690 213353
+1000 642 83
+411402 765949 397104 823162 881202 206107 910024 90433 292932 370442 199228 905325 39985 952194 160530 38326 832268 384712 826099 196651 246723 115238 525713 929878 7752 569398 244742 714259 334941 636735 164294 262694 919035 561397 85855 800236 767504 512230 407021 576787 882671 122600 482111 439007 74793 642640 477333 907060 27351 819783 620063 274073 935020 145775 203951 942771 715172 965044 173381 566464 601779 337674 345510 37165 899071 431364 837401 182926 943594 760773 759712 342616 883372 241822 297975 958164 400813 775307 381575 428163 595089 1637 218587
+1000 468 47
+5568 702916 790463 106761 42546 853483 17164 143388 258393 931293 631845 20715 577990 510244 879243 726456 119130 594750 833218 180950 919563 465651 652288 516648 39056 23410 611901 972857 925523 45720 679855 447442 748635 470318 70554 307533 840152 87717 450920 614897 19010 82765 635611 113351 109360 514853 356158
+1000 415 31
+88062 718247 905453 423093 739665 171396 878981 161674 533693 500236 312635 385187 595953 906322 330128 622820 947447 648688 293384 232416 881874 512061 576343 311335 847893 804565 553201 288368 541380 743968 39098
+1000 542 58
+102073 428227 183281 161415 371943 503420 33308 547533 651337 819566 750731 363733 428292 261642 84372 869630 533632 163175 166034 860342 319631 985385 911117 633664 353153 820539 271926 998421 732552 764467 215530 834624 709045 398810 512390 80988 418581 62050 144872 69917 397967 895602 950001 826258 673595 550724 212239 207226 713898 894624 67568 33529 396360 978684 183544 265864 315574 455469
+1000 749 30
+274088 111937 853671 915604 405912 391494 830587 989968 283380 219439 146652 548844 239854 694559 699306 709791 867954 546673 104467 488772 378370 816291 605263 579114 269280 779962 358984 369102 684875 240733
+1000 577 74
+889261 454733 860030 775481 949024 155714 44897 833294 618689 400606 876971 505793 8561 323776 812023 87858 200025 653749 125238 817309 519422 492499 988330 309050 538434 31394 619069 606066 275113 680997 218691 164373 135729 78721 456205 84753 750786 501102 434398 885826 418059 827720 391618 942971 667847 719993 30828 867871 373741 672417 201531 409515 164916 706213 718564 219701 737606 853985 825767 12718 534981 44457 693443 187062 639529 149647 788166 390314 167100 738915 276139 585158 566634 184109
+1000 544 15
+738854 481990 880075 224183 787773 364384 345660 289140 812711 166804 376163 43685 314865 706508 765544
+1000 234 75
+54232 859635 929886 164424 523598 281726 535866 896125 105522 938656 97525 849130 731828 857482 684539 181384 481378 189755 928252 494218 920128 436570 73468 388945 892091 979040 920759 465834 451467 986344 14908 505698 845979 944793 186474 885928 226519 238691 298404 848392 177346 912280 697521 425525 769761 382059 123261 767490 571813 51512 261707 491940 488082 335174 397236 380172 830565 317994 846006 798383 304338 377265 304081 666668 322058 6906 552595 64928 245596 850998 913319 422941 279629 610839 364817
+1000 325 21
+723275 491307 789162 505625 720029 930960 475204 561793 201432 910641 364279 500979 562929 487770 140942 98151 477027 457607 90133 413819 392574
+1000 460 64
+938889 505582 378935 903933 678962 461751 22063 16636 807260 59227 432058 754975 412979 131335 214920 173751 891046 557536 573474 649219 855510 531637 566383 147168 429564 510897 258608 431200 729483 305067 94963 184724 810648 990250 88656 5961 968352 110718 538948 775611 686296 971005 46937 615627 618691 261857 789377 509736 819392 879203 675306 191253 927191 241688 854772 356754 268936 113379 787954 998419 934797 399268 183142 261796
+1000 9 43
+9312 827776 928216 37725 404118 755902 401969 725034 309103 206688 266414 569422 762138 928559 547987 223039 13796 266216 371688 494366 662470 54030 475171 371359 121558 51928 502921 35565 767856 98281 598259 293519 926056 526474 331243 846525 282375 249564 571558 107829 456251 354323 193602
+1000 377 77
+62164 726784 117838 190416 699641 559713 236135 895847 523506 501121 882516 594060 808653 722668 198128 775925 853916 217137 375041 489526 846839 752 520730 202996 745593 146684 908722 671382 692200 80098 249459 270715 323234 883648 461130 22874 443360 213616 435072 483218 714737 317588 77277 39741 556607 275404 332017 410522 8893 707057 416399 372083 224161 937128 575079 969753 83812 152 641134 292363 596602 406944 563078 919835 290592 540559 459060 250303 754175 894131 733520 468911 728070 327148 508651 284676 118904
+1000 482 44
+337310 803003 43813 13639 135870 219080 84804 356478 99422 97389 522740 813189 91317 604132 703656 357630 590462 954655 138169 897087 209268 265073 647751 428833 862410 812099 172536 264508 328512 183369 430703 182173 986371 474516 712163 638592 209947 796966 511422 309368 894355 34161 638908 502023
+1000 745 76
+106373 979014 905394 912012 429245 118268 92051 843554 719843 652785 217216 662589 946000 886007 997710 158746 626829 865621 156590 941889 417294 434834 771977 502279 722316 843629 124263 983107 25880 96007 255882 132253 75021 677627 560616 20617 312246 169018 380522 32088 821803 597737 694676 284154 96 208737 442900 626924 74358 599489 568813 8003 550674 340789 510282 789341 700770 150896 772447 726649 246902 544680 375253 838274 222306 935868 375242 534552 104886 755764 82991 443040 353500 777667 727193 353595
+1000 633 90
+655987 333541 244250 627312 456879 946764 19805 753985 240040 361594 426634 60883 760689 642582 687133 964816 189357 838849 402964 626106 503708 272882 733231 941612 49027 787496 529205 315721 824519 313837 780463 996857 647377 541064 624168 620607 487827 160325 374592 244218 521918 317577 305101 798958 960158 992233 763773 665866 347433 683089 291971 851140 955970 541553 309104 521349 845401 838308 353421 669919 668496 133883 183127 315872 674946 323646 936478 679124 483970 827421 923342 522239 144997 744794 321197 621506 253378 84969 287371 117163 768057 95694 968302 240379 637246 793757 761727 482646 632064 115147
+1000 530 37
+891252 678674 839339 36744 21698 200657 719206 28642 161893 392805 763757 369869 494292 779332 753065 884270 462976 355709 527326 370753 91604 446806 789879 79297 359898 325375 521029 100933 865674 850910 171022 273277 529584 526712 310020 67633 727368
+1000 491 17
+219448 253078 224135 616900 760073 994997 735447 993613 116371 970391 311592 4804 371799 812702 350953 348793 285603
+1000 288 16
+463549 378237 431439 733534 508594 875042 471600 154371 478247 256672 342269 939901 911275 647296 892272 658387
+1000 428 99
+844082 873942 981591 54028 670908 493012 879747 81614 527172 35007 583636 681815 893922 443287 426919 223843 957459 585461 279383 253054 391753 280107 411059 526496 937014 349923 989751 293642 719490 151530 636641 79923 25471 134583 650303 212730 143946 530049 294343 671117 81407 394330 869283 491680 837617 296201 231874 311427 398013 511256 564480 306117 307714 491891 832613 244728 841813 338715 54721 77654 6596 207713 157577 548418 858647 807879 761148 2592 854279 571842 190060 935686 966172 59342 427365 320140 871894 659239 631566 269906 686846 712397 92375 994560 204287 441339 755639 562452 296405 326711 640105 303000 534424 314033 367769 909422 121911 128916 912014
+1000 947 99
+372411 230814 950803 569438 884820 963089 115240 505289 622914 932402 825590 48012 167430 479509 241073 671665 520777 851340 505274 256063 462708 47902 223410 309461 409923 584637 788220 262345 341141 714166 78695 713551 944979 29497 282988 829798 992586 398227 851438 131851 846981 193380 179862 14410 189240 420934 686074 710017 788625 707699 482431 251333 755600 705841 560793 165522 806829 349012 944218 147969 579529 22913 861519 40859 52409 660859 387009 561346 575437 238446 693196 938769 948177 389409 953178 137417 326694 155603 363785 115319 379653 846215 883003 651604 552055 443795 817126 875235 309158 761343 23203 888686 300607 401074 929544 353016 578284 316552 430713
+1000 286 73
+632444 509636 318759 432826 476848 59006 636039 134165 210978 480709 401758 14959 845454 82078 384069 925115 941491 606642 322206 886037 698428 690823 660177 629 228503 294770 187489 27432 108352 248126 589356 257147 274114 908115 689972 750961 483472 326010 885125 210801 806719 286883 225759 168524 885312 126180 609990 826803 732821 932195 229191 947600 139369 889368 948229 367871 700489 652069 911655 325192 416546 17362 582339 690659 925476 788662 441619 925300 114672 843096 136100 437742 646330
+1000 884 45
+639108 906087 927663 617988 453129 206539 686567 797461 418721 775745 224269 258289 924578 605199 697681 242854 880077 538016 540637 629789 767666 433381 657556 337008 948611 520174 467014 121368 140202 891897 350312 779309 797984 794326 913648 767464 864 116566 81276 419585 408662 305545 194225 333239 427095
+1000 111 61
+325550 379065 625689 425554 385385 415888 149398 772881 215044 868274 228257 633596 570618 999290 809814 976985 840849 152501 195584 447667 183315 585657 266296 810566 210619 490885 412717 413182 407649 813179 203543 249550 708595 345583 191455 93979 277822 340853 383212 9217 725478 127820 642813 296095 127109 968978 789432 484309 121478 501367 448328 821144 87024 714623 631710 813994 721859 560778 227176 645859 373956
+1000 901 82
+915718 112371 261604 922388 784611 715574 844678 639992 914987 156484 799873 898507 858861 374971 688731 727420 567933 289366 809097 994386 802751 365748 443706 254973 249468 827799 837691 135157 41152 308943 910290 473221 937665 171893 395609 722275 887466 240286 878618 318804 913121 194842 217311 771981 86164 422393 15753 170448 228110 824849 164834 30860 190597 124891 802184 440064 952690 639874 91573 510193 465168 1862 983413 402832 690107 895373 125106 93924 135658 520075 412728 565130 714916 146390 853463 801079 85134 869215 971527 313243 694063 136360
+1000 868 2
+824402 744482
+1000 490 65
+206977 20283 918737 745753 575088 204153 805716 95857 646288 239858 151089 973732 638196 394250 169741 707911 795922 862320 157186 18005 316719 971612 33185 797187 768842 445643 720535 499790 592239 937376 248155 315567 474010 683243 61319 49098 887395 383386 661306 533682 623243 812394 23765 261438 722996 193505 485700 518917 572176 642886 53273 405247 614497 602809 202433 899690 48451 439320 399480 157041 376695 163986 988959 367057 363580
+1000 730 80
+877413 703723 489926 664625 477562 209441 872659 724523 93760 561583 660403 536455 59832 941112 943783 277655 691581 402438 901213 26145 649641 748401 796005 853763 578343 962543 86718 307781 412812 864447 122260 290224 84521 128537 954849 562082 337977 343859 286604 431737 905441 463358 484543 481624 920822 428325 275630 612402 347115 176842 154898 513107 925242 950902 366870 19937 429797 969939 327717 842608 350737 966328 132831 435257 611217 87679 513691 949193 947890 316646 897281 853330 780004 381824 334954 700825 326500 126935 829578 189966
+1000 569 61
+559253 683906 696643 698475 691220 995015 954873 107488 381176 492605 995032 551529 619398 467118 799305 757666 187671 70527 166471 295881 765260 171775 171475 695459 596439 234890 889608 458548 544898 208528 281960 104150 892434 978603 318976 100005 489969 790200 207493 387497 282804 718876 939025 902201 702345 254681 176218 890016 325208 342688 702248 606819 514462 390074 302278 627252 624963 708237 602151 686212 916765
+1000 70 8
+598902 809004 86863 209232 86825 944067 108795 96042
+1000 916 59
+765382 368394 132782 440327 208392 585612 635803 692361 413032 75496 730952 74381 820289 52148 695886 590018 653468 499609 707180 937877 111654 191834 178255 748899 985590 456333 747897 617654 87831 933164 434564 853212 817910 567346 809891 26301 669309 445693 235013 82340 521188 965964 156720 857828 534463 368958 447845 187931 868566 671377 125807 980219 863210 820413 245469 848799 793097 509717 982804
+1000 927 33
+417368 734139 777142 501065 60381 803442 170373 22425 38454 769064 59964 4418 442136 917791 538880 811093 881987 243162 196010 69715 885320 692580 932924 222084 938048 298075 15180 964117 797230 896107 923349 730949 146597
+1000 141 24
+844966 682463 6945 444885 157248 218764 207976 585136 15576 866845 873627 167292 602645 643056 907778 735896 403129 902774 471342 913093 19145 441732 741036 23948
+1000 453 59
+869075 508321 684812 242096 183814 348522 500083 143488 527531 871352 196945 80373 474613 521553 188454 56195 588963 497235 203787 741830 836771 895411 879541 194662 97709 924669 345746 92428 878865 147198 920038 264291 171871 604850 506386 355684 469723 6469 15524 513605 394172 728820 593978 868784 250372 298783 441330 839334 796018 645116 97516 149140 56878 493408 343801 154586 418077 689547 247014
+1000 814 2
+10150 49820
+1000 100 999
+1001 1000 999 998 997 996 995 994 993 992 991 990 989 988 987 986 985 984 983 982 981 980 979 978 977 976 975 974 973 972 971 970 969 968 967 966 965 964 963 962 961 960 959 958 957 956 955 954 953 952 951 950 949 948 947 946 945 944 943 942 941 940 939 938 937 936 935 934 933 932 931 930 929 928 927 926 925 924 923 922 921 920 919 918 917 916 915 914 913 912 911 910 909 908 907 906 905 904 903 902 901 900 899 898 897 896 895 894 893 892 891 890 889 888 887 886 885 884 883 882 881 880 879 878 877 876 875 874 873 872 871 870 869 868 867 866 865 864 863 862 861 860 859 858 857 856 855 854 853 852 851 850 849 848 847 846 845 844 843 842 841 840 839 838 837 836 835 834 833 832 831 830 829 828 827 826 825 824 823 822 821 820 819 818 817 816 815 814 813 812 811 810 809 808 807 806 805 804 803 802 801 800 799 798 797 796 795 794 793 792 791 790 789 788 787 786 785 784 783 782 781 780 779 778 777 776 775 774 773 772 771 770 769 768 767 766 765 764 763 762 761 760 759 758 757 756 755 754 753 752 751 750 749 748 747 746 745 744 743 742 741 740 739 738 737 736 735 734 733 732 731 730 729 728 727 726 725 724 723 722 721 720 719 718 717 716 715 714 713 712 711 710 709 708 707 706 705 704 703 702 701 700 699 698 697 696 695 694 693 692 691 690 689 688 687 686 685 684 683 682 681 680 679 678 677 676 675 674 673 672 671 670 669 668 667 666 665 664 663 662 661 660 659 658 657 656 655 654 653 652 651 650 649 648 647 646 645 644 643 642 641 640 639 638 637 636 635 634 633 632 631 630 629 628 627 626 625 624 623 622 621 620 619 618 617 616 615 614 613 612 611 610 609 608 607 606 605 604 603 602 601 600 599 598 597 596 595 594 593 592 591 590 589 588 587 586 585 584 583 582 581 580 579 578 577 576 575 574 573 572 571 570 569 568 567 566 565 564 563 562 561 560 559 558 557 556 555 554 553 552 551 550 549 548 547 546 545 544 543 542 541 540 539 538 537 536 535 534 533 532 531 530 529 528 527 526 525 524 523 522 521 520 519 518 517 516 515 514 513 512 511 510 509 508 507 506 505 504 503 502 501 500 499 498 497 496 495 494 493 492 491 490 489 488 487 486 485 484 483 482 481 480 479 478 477 476 475 474 473 472 471 470 469 468 467 466 465 464 463 462 461 460 459 458 457 456 455 454 453 452 451 450 449 448 447 446 445 444 443 442 441 440 439 438 437 436 435 434 433 432 431 430 429 428 427 426 425 424 423 422 421 420 419 418 417 416 415 414 413 412 411 410 409 408 407 406 405 404 403 402 401 400 399 398 397 396 395 394 393 392 391 390 389 388 387 386 385 384 383 382 381 380 379 378 377 376 375 374 373 372 371 370 369 368 367 366 365 364 363 362 361 360 359 358 357 356 355 354 353 352 351 350 349 348 347 346 345 344 343 342 341 340 339 338 337 336 335 334 333 332 331 330 329 328 327 326 325 324 323 322 321 320 319 318 317 316 315 314 313 312 311 310 309 308 307 306 305 304 303 302 301 300 299 298 297 296 295 294 293 292 291 290 289 288 287 286 285 284 283 282 281 280 279 278 277 276 275 274 273 272 271 270 269 268 267 266 265 264 263 262 261 260 259 258 257 256 255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240 239 238 237 236 235 234 233 232 231 230 229 228 227 226 225 224 223 222 221 220 219 218 217 216 215 214 213 212 211 210 209 208 207 206 205 204 203 202 201 200 199 198 197 196 195 194 193 192 191 190 189 188 187 186 185 184 183 182 181 180 179 178 177 176 175 174 173 172 171 170 169 168 167 166 165 164 163 162 161 160 159 158 157 156 155 154 153 152 151 150 149 148 147 146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3
+1000 936 70
+876058 48251 417423 940369 46184 661024 872966 155655 555456 785626 638961 95606 405283 272342 63789 700082 240765 773729 354065 473869 572629 857226 115212 391224 368648 449523 109137 213257 924740 931072 951626 800797 495674 369048 741165 58209 546423 130482 213863 101879 916108 369175 713836 321390 641516 293976 537823 398632 584057 891887 388853 156685 265464 20416 547908 634111 469938 657044 847368 394677 104467 315345 195473 116492 200745 452989 174700 263519 583471 904914
+1000 399 50
+171293 806670 867397 486614 991003 509044 457061 861312 490298 702961 332470 480706 990508 176733 861846 824154 549677 769856 892067 89213 743926 274364 494204 80679 405879 698580 717186 785747 637785 751584 109796 325429 558253 493544 812042 65608 2587 785454 443271 9237 4766 292092 489942 995274 468824 868139 335779 534852 637995 227845
+1000 66 30
+247747 820897 792170 877618 676330 332868 175267 554814 704257 363991 12586 649910 713768 477576 565041 890468 266314 986331 734647 780539 306626 254614 126905 234313 703214 80986 164349 227352 885746 516414
+1000 777 27
+703073 745370 968081 69942 765306 397877 556232 609374 240484 906968 575702 373314 342224 703270 977345 855914 652462 441586 688912 66095 294915 468915 964270 146220 686091 290769 273155
+1000 392 6
+652118 589521 968035 81106 958573 349374
+1000 292 16
+859652 745105 329922 997820 158543 539189 779244 806293 484373 158006 618392 656908 422513 463255 840277 369567
+3 2 6
+8 2 5 2 4 9
+1000 277 6
+250975 950014 593811 301008 573256 922557
+1000 100 1000
+1001 1000 999 998 997 996 995 994 993 992 991 990 989 988 987 986 985 984 983 982 981 980 979 978 977 976 975 974 973 972 971 970 969 968 967 966 965 964 963 962 961 960 959 958 957 956 955 954 953 952 951 950 949 948 947 946 945 944 943 942 941 940 939 938 937 936 935 934 933 932 931 930 929 928 927 926 925 924 923 922 921 920 919 918 917 916 915 914 913 912 911 910 909 908 907 906 905 904 903 902 901 900 899 898 897 896 895 894 893 892 891 890 889 888 887 886 885 884 883 882 881 880 879 878 877 876 875 874 873 872 871 870 869 868 867 866 865 864 863 862 861 860 859 858 857 856 855 854 853 852 851 850 849 848 847 846 845 844 843 842 841 840 839 838 837 836 835 834 833 832 831 830 829 828 827 826 825 824 823 822 821 820 819 818 817 816 815 814 813 812 811 810 809 808 807 806 805 804 803 802 801 800 799 798 797 796 795 794 793 792 791 790 789 788 787 786 785 784 783 782 781 780 779 778 777 776 775 774 773 772 771 770 769 768 767 766 765 764 763 762 761 760 759 758 757 756 755 754 753 752 751 750 749 748 747 746 745 744 743 742 741 740 739 738 737 736 735 734 733 732 731 730 729 728 727 726 725 724 723 722 721 720 719 718 717 716 715 714 713 712 711 710 709 708 707 706 705 704 703 702 701 700 699 698 697 696 695 694 693 692 691 690 689 688 687 686 685 684 683 682 681 680 679 678 677 676 675 674 673 672 671 670 669 668 667 666 665 664 663 662 661 660 659 658 657 656 655 654 653 652 651 650 649 648 647 646 645 644 643 642 641 640 639 638 637 636 635 634 633 632 631 630 629 628 627 626 625 624 623 622 621 620 619 618 617 616 615 614 613 612 611 610 609 608 607 606 605 604 603 602 601 600 599 598 597 596 595 594 593 592 591 590 589 588 587 586 585 584 583 582 581 580 579 578 577 576 575 574 573 572 571 570 569 568 567 566 565 564 563 562 561 560 559 558 557 556 555 554 553 552 551 550 549 548 547 546 545 544 543 542 541 540 539 538 537 536 535 534 533 532 531 530 529 528 527 526 525 524 523 522 521 520 519 518 517 516 515 514 513 512 511 510 509 508 507 506 505 504 503 502 501 500 499 498 497 496 495 494 493 492 491 490 489 488 487 486 485 484 483 482 481 480 479 478 477 476 475 474 473 472 471 470 469 468 467 466 465 464 463 462 461 460 459 458 457 456 455 454 453 452 451 450 449 448 447 446 445 444 443 442 441 440 439 438 437 436 435 434 433 432 431 430 429 428 427 426 425 424 423 422 421 420 419 418 417 416 415 414 413 412 411 410 409 408 407 406 405 404 403 402 401 400 399 398 397 396 395 394 393 392 391 390 389 388 387 386 385 384 383 382 381 380 379 378 377 376 375 374 373 372 371 370 369 368 367 366 365 364 363 362 361 360 359 358 357 356 355 354 353 352 351 350 349 348 347 346 345 344 343 342 341 340 339 338 337 336 335 334 333 332 331 330 329 328 327 326 325 324 323 322 321 320 319 318 317 316 315 314 313 312 311 310 309 308 307 306 305 304 303 302 301 300 299 298 297 296 295 294 293 292 291 290 289 288 287 286 285 284 283 282 281 280 279 278 277 276 275 274 273 272 271 270 269 268 267 266 265 264 263 262 261 260 259 258 257 256 255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240 239 238 237 236 235 234 233 232 231 230 229 228 227 226 225 224 223 222 221 220 219 218 217 216 215 214 213 212 211 210 209 208 207 206 205 204 203 202 201 200 199 198 197 196 195 194 193 192 191 190 189 188 187 186 185 184 183 182 181 180 179 178 177 176 175 174 173 172 171 170 169 168 167 166 165 164 163 162 161 160 159 158 157 156 155 154 153 152 151 150 149 148 147 146 145 144 143 142 141 140 139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
+1000 454 11
+777602 662637 357427 246643 818863 448999 756835 284030 450860 740248 203214
+1000 489 3
+189375 409438 545517
+1000 904 89
+594677 195322 470917 412701 343975 597324 513466 535546 104301 646485 601961 447317 592392 107695 362658 347352 484554 779304 822690 644026 739925 831961 625058 948416 291337 315506 971568 99696 462189 598823 157585 573217 310497 144853 985917 654471 742177 499382 190017 846477 145866 308329 293793 254609 932375 656450 118312 416928 952105 941002 577305 208382 289314 718714 156797 97002 34220 644717 196697 12760 243539 354281 585976 70387 499134 88244 724858 757662 587625 431226 120490 249843 739554 414283 20803 671928 587084 655467 605208 55541 112820 698864 263922 402133 417578 937070 499134 451797 98138
+1000 615 23
+612545 996162 374648 605983 44781 302874 723328 702240 766978 386694 438069 420727 439126 407869 111553 479590 23998 234728 423792 905355 825953 715526 385417
+1000 284 77
+219936 479813 915453 928980 394974 427842 526319 329906 6243 671191 399822 404209 83144 866175 746818 756739 416898 959056 480316 647148 370031 547883 197028 766390 42919 380571 32254 874844 836039 812889 439321 55974 292702 354773 501306 204027 782614 27624 533933 788857 215166 450106 709417 814662 316280 456235 87752 249530 931642 568067 413029 818025 632302 610056 584414 191572 990626 133019 66415 343016 945908 505735 398990 754961 860507 416647 958987 159473 960622 9271 464681 692140 459377 174097 23153 292008 146683
+1000 268 10
+735287 95017 26277 450996 846753 845670 361227 962408 852422 240153
+1000 925 99
+256996 115572 559281 301776 934798 282608 520368 701775 185654 958436 122501 624779 882656 750405 620721 906654 501484 560864 812008 843788 792742 713777 636954 973042 488359 763822 679844 312760 24655 420768 266058 281650 52691 341690 99778 987488 624298 620145 205614 326303 94932 328114 467433 977587 594871 604505 400592 612706 165369 212600 456494 958110 442728 93447 931151 931086 373620 127346 760197 398275 548113 26255 196276 600804 884296 296053 104643 508593 432549 310257 351247 527480 154722 818680 21419 749592 939536 422010 362298 621256 150961 335143 579365 593688 428589 26868 524773 318561 154213 284970 716835 218678 827576 429462 819481 711871 241867 924123 736816
+1000 12 49
+318790 272664 204992 164370 860470 773084 103588 753273 243615 415328 834398 545953 682169 167660 847005 415973 955886 423243 5770 65298 830203 246130 562230 428988 369052 864988 666096 915672 204706 463459 718620 523495 736122 439963 687864 112943 729398 307803 866215 973013 723131 700612 518965 405299 868272 882322 337623 824157 305564
+1000 318 20
+844671 751242 287630 364746 680321 852759 79661 343062 222573 880740 944547 91787 368618 774141 785850 21329 634594 186860 798930 297230
+1000 830 8
+858029 566463 566883 928415 581948 655126 653272 855961
+1000 559 91
+750903 102224 114112 504205 982389 141059 507671 308599 400114 762276 864032 416754 234644 843932 794990 666082 577466 303583 57475 49065 974305 52073 822089 832925 991973 733363 480220 400597 908101 670778 440687 659003 289353 554799 163208 271741 695857 187230 96691 612323 465858 960722 29076 700501 804654 824065 882934 382119 643999 456761 431183 134655 508833 769623 967579 17158 502985 964150 417754 411085 151279 858440 586440 440631 929590 265999 228723 141799 453228 325413 754121 435437 802487 299548 135937 607140 639964 535223 989258 800314 991983 936792 934968 17167 706415 902546 34324 209399 383047 968429 136836
+1000 837 70
+325963 379729 746548 339214 420437 61189 469030 542421 311766 523859 2652 756567 428279 889978 609625 908791 600825 408955 55086 281335 954925 300544 72710 68190 561073 11476 248469 990742 754186 871305 939864 80148 251033 202763 935713 187822 780303 921094 246594 608420 444952 249245 364986 873231 139222 490963 298373 740047 416269 869810 21381 371193 170353 610442 955734 247777 138269 720554 754871 892454 591858 694734 488953 359243 413848 424665 63416 194150 345758 310009
+1000 742 97
+488077 333231 81061 539589 594938 573000 544022 446463 970235 924193 277028 804580 286550 75410 625269 663815 895842 291936 502224 902747 360882 567151 664694 728231 996821 603986 7860 124011 968803 573601 633259 456879 423183 714319 996467 18120 803670 540488 980935 773904 981033 257962 94835 267582 849723 720104 447748 261917 528391 949971 681015 889273 33473 345709 133855 30293 949694 658066 670655 918496 748018 303913 891727 171201 534583 888193 189320 338252 945033 170254 628507 442417 944567 723342 226350 310642 959797 674098 88910 488187 140420 769924 893811 173893 631984 27666 720537 98030 202083 391192 532877 950101 211456 424603 121301 746039 829148
+1000 103 52
+556110 964509 525412 26025 127895 404525 263266 724942 393800 801515 411597 305632 180887 449297 379366 111240 323742 133920 648397 194168 655269 230308 675072 29870 543054 182495 338877 542305 632269 222980 121108 188379 703840 646519 730755 831734 567395 994021 73027 477546 795535 484624 783177 492773 933920 678895 604013 774013 329166 768761 968180 984434
+1000 140 44
+772184 30368 662272 376881 931104 169763 808618 237645 362076 862579 28572 635493 875112 168872 656111 761888 379603 920092 274230 184259 163558 368454 270704 983098 741252 979443 277632 398340 517256 264123 858684 289439 294490 520955 182672 741945 207070 991289 979589 569145 370219 8160 204637 245330
+1000 69 51
+530655 542122 342098 869531 600778 490718 92510 721885 195448 312701 884755 926203 660786 452149 920223 250165 929694 232109 251140 229223 241233 701411 908117 361597 475424 753634 130358 443603 738067 129426 86854 268721 187899 945303 138251 788676 436020 747113 26912 631468 576165 911666 74022 236951 880166 510596 3467 809859 259056 254606 555433
+1000 391 81
+883326 445720 98930 547464 134204 995512 202826 792824 872679 349872 6482 794569 582686 361102 715650 901955 962851 541135 198429 889229 316281 974818 431398 662066 833804 79803 649698 93639 788646 386088 856171 188323 348159 955101 735786 482363 466964 454964 791538 339642 804835 798020 650563 387521 675473 882564 289475 638324 423698 4256 43904 739978 495425 991653 402043 329228 71455 568093 939219 376452 954180 795389 81126 302339 266841 816911 784701 733805 788226 576238 73446 593061 890609 724008 496933 82434 122923 302759 237109 546620 823366
+1000 416 72
+18560 634620 978950 424439 849551 696136 210185 487335 964071 836332 812763 38676 846227 141157 620635 848814 442962 63905 374402 447728 872349 864343 959353 341172 732482 295131 392376 886828 39327 532791 785099 574239 167410 280400 515029 16961 492887 241565 20647 456958 594248 349762 11985 440474 7270 632619 289287 450231 212875 663688 897958 85223 44383 857310 942747 293216 668792 335122 696395 224471 867912 997845 798709 551674 278244 830089 568634 771131 71653 105632 744440 665900
+1000 790 43
+258111 359185 748330 56256 849179 408239 19696 491910 176617 382967 816836 140907 104023 410112 400841 226316 162702 64312 997934 243602 932597 593120 378081 396309 483307 540151 619658 117029 451831 778447 968424 709941 653984 716753 282548 503162 641343 818596 995071 817960 717914 328258 958866
+1000 188 28
+481204 698719 978881 30691 762524 552228 344332 212183 572827 910457 323217 148833 380930 439392 801925 758527 840336 297784 233361 229651 376393 27768 52991 998879 346267 613655 172757 620028
+1000 773 46
+645552 34629 836745 680820 606805 479630 250444 528403 610479 853253 730835 510168 418055 170154 425999 91448 63201 106336 80406 946609 469916 647035 879114 720890 597048 989276 538249 170304 911832 379373 521349 557383 414002 874445 754554 537158 354075 4998 65560 480905 374602 312746 507424 792656 999252 933423
+1000 72 50
+123909 608841 535878 29669 562018 673294 872715 233973 553430 504385 613625 399645 387387 265229 468051 347533 598706 343286 656690 876400 882840 61727 177007 283913 507622 46374 862196 340526 477086 532268 411875 117346 657460 947752 663367 735829 137398 536081 969801 690827 40465 99778 606823 427851 365006 591226 775383 480063 450863 948424
+1000 129 80
+420453 75308 618702 794193 747725 820232 203707 428992 526444 438623 165044 780401 292607 990810 793119 343939 551619 486561 47352 707499 152559 835517 97813 319659 574431 890303 421168 141064 590763 949296 891895 11215 540956 510596 805408 805032 330828 525466 234023 373623 480440 915418 154024 289398 906228 463494 633337 974198 466406 197040 681696 618964 32557 295860 454974 123339 186163 876142 780755 293277 341789 672649 304492 882744 699597 626251 687775 546776 151716 438149 920398 148508 353567 590773 437905 776146 54266 587593 750343 520671
+1000 167 1
+258231
+1000 451 23
+594779 906238 849308 928154 128095 338693 286532 150980 946981 1928 385413 199416 297752 247792 468081 398164 191598 360757 272915 816992 844892 79491 416338
diff --git a/codejam_2008/src/y2008round1c/A-large-practice.out b/codejam_2008/src/y2008round1c/A-large-practice.out
new file mode 100644
index 0000000..8ca2f52
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/A-large-practice.out
@@ -0,0 +1,99 @@
+Case #1: 20236766
+Case #2: 30102796
+Case #3: 52992167
+Case #4: 50650496
+Case #5: 14605906
+Case #6: 1927750
+Case #7: 40775730
+Case #8: 40613724
+Case #9: 500499499500
+Case #10: 42116251
+Case #11: 15073641
+Case #12: 19767068
+Case #13: 34290086
+Case #14: 42851053
+Case #15: 46161065
+Case #16: 47313179
+Case #17: 21445492
+Case #18: 41269657
+Case #19: 37700180
+Case #20: 18348969
+Case #21: 3939412
+Case #22: 31299431
+Case #23: 23566342
+Case #24: 6969557
+Case #25: 5941760
+Case #26: 397
+Case #27: 20379592
+Case #28: 32779102
+Case #29: 81854643
+Case #30: 24466842
+Case #31: 41145659
+Case #32: 20648264
+Case #33: 16495566
+Case #34: 27540074
+Case #35: 15404926
+Case #36: 35873225
+Case #37: 7298339
+Case #38: 38608398
+Case #39: 10295638
+Case #40: 32291655
+Case #41: 36418362
+Case #42: 35830123
+Case #43: 19359872
+Case #44: 36896463
+Case #45: 48266086
+Case #46: 16769280
+Case #47: 8370699
+Case #48: 9142685
+Case #49: 47095953
+Case #50: 49760985
+Case #51: 36499143
+Case #52: 23945374
+Case #53: 28647093
+Case #54: 42150565
+Case #55: 1568884
+Case #56: 30646889
+Case #57: 42248721
+Case #58: 32674942
+Case #59: 2939730
+Case #60: 31830454
+Case #61: 16901569
+Case #62: 11877297
+Case #63: 26057157
+Case #64: 59970
+Case #65: 1933230
+Case #66: 32082316
+Case #67: 26361546
+Case #68: 15123658
+Case #69: 14763866
+Case #70: 3598727
+Case #71: 9229059
+Case #72: 47
+Case #73: 3591621
+Case #74: 1933250
+Case #75: 5747358
+Case #76: 1144330
+Case #77: 40894001
+Case #78: 11327936
+Case #79: 37307532
+Case #80: 5416210
+Case #81: 48886644
+Case #82: 51886421
+Case #83: 10211291
+Case #84: 5666097
+Case #85: 48097462
+Case #86: 32706383
+Case #87: 51959645
+Case #88: 25910559
+Case #89: 21525206
+Case #90: 24646967
+Case #91: 43617900
+Case #92: 36154714
+Case #93: 21721425
+Case #94: 13206740
+Case #95: 23857540
+Case #96: 24479841
+Case #97: 40550763
+Case #98: 258231
+Case #99: 10111289
diff --git a/codejam_2008/src/y2008round1c/A-small-practice.in b/codejam_2008/src/y2008round1c/A-small-practice.in
new file mode 100644
index 0000000..353bb14
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/A-small-practice.in
@@ -0,0 +1,19 @@
+9
+10 2 12
+321320 593495 758204 389639 388723 49152 146438 159949 868760 520432 116410 358316
+10 12 4
+518334 889860 995016 325693
+10 3 27
+808779 198209 150957 57300 482859 135526 338396 891122 485259 828737 326575 583951 526461 230768 889709 307560 775800 471593 3767 491947 425267 930670 424710 548454 286135 565135 898026
+10 10 28
+221794 745397 535166 610516 794548 197956 770465 663308 718387 886874 21623 74311 812449 697845 610957 472093 390882 993897 451152 966169 218416 914982 978252 710090 413498 396545 196780 237706
+3 9 26
+1 1 1 100 100 1 1 1 1 1 1 1 1 1 1 1 1 10 11 11 11 11 1 1 1 100
+10 4 33
+72629 111608 963683 954402 40395 401306 735759 732170 768299 468218 281096 891912 349734 973990 919102 98693 697725 904194 789406 781100 28681 581885 696208 716148 437322 410552 416411 123188 355465 140426 833221 944446 252033
+10 12 54
+383233 246637 929370 434751 857152 723918 632706 627616 903577 867444 30841 441551 941754 843289 139396 69063 831734 46629 579311 799237 12797 797726 714218 991048 24167 127716 903945 737299 881773 928788 437624 781358 175424 366993 216108 32575 607262 365165 176543 27190 748960 207383 468741 690714 567024 124488 276128 915109 171116 855438 714345 700264 169515 428562
+3 2 6
+8 2 5 2 4 9
+10 4 16
+159871 536647 143293 693037 866588 979059 58936 224520 947479 12083 975323 982165 901942 486691 824209 111947
diff --git a/codejam_2008/src/y2008round1c/A-small-practice.out b/codejam_2008/src/y2008round1c/A-small-practice.out
new file mode 100644
index 0000000..86f64b3
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/A-small-practice.out
@@ -0,0 +1,9 @@
+Case #1: 11433755
+Case #2: 2728903
+Case #3: 46995866
+Case #4: 24382164
+Case #5: 397
+Case #6: 58569527
+Case #7: 54956207
+Case #8: 47
+Case #9: 15983801
diff --git a/codejam_2008/src/y2008round1c/a.rs b/codejam_2008/src/y2008round1c/a.rs
new file mode 100644
index 0000000..e59dbf6
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/a.rs
@@ -0,0 +1,63 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+
+/*
+Greedy
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round1c",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                 /*On the first line we have the maximum number of letters
+                 to place on a key (P), the number of keys available (K) and
+                 the number of letters in our alphabet (L) all separated by single spaces.*/
+
+                let input_nums = reader.read_num_line();
+                assert_eq!(3, input_nums.len());
+
+                /*The second line has L non-negative integers. Each number represents the frequency of a certain letter.
+                */
+                let mut freq = reader.read_num_line();
+
+                assert_eq!(freq.len(), input_nums[2]);
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no,
+                         solve(input_nums[0],
+                               input_nums[1], &mut freq)).unwrap();
+            }
+        },
+    );
+}
+
+fn solve(max_letters_per_key: usize, num_keys: usize, freq: &mut Vec<usize>) -> usize
+{
+    freq.sort();
+    freq.reverse();
+
+    let mut total_cost = 0;
+    let mut  cost = 1;
+    let mut keys_left = num_keys;
+
+    for lf in freq.iter() {
+        assert!(cost <= max_letters_per_key);
+        total_cost += cost * lf;
+        keys_left-=1;
+        if keys_left == 0 {
+            cost+=1;
+            keys_left = num_keys;
+        }
+    }
+
+    total_cost
+}
diff --git a/codejam_2008/src/y2008round1c/mod.rs b/codejam_2008/src/y2008round1c/mod.rs
new file mode 100644
index 0000000..4f053df
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/mod.rs
@@ -0,0 +1,3 @@
+pub mod a;
+pub mod b;
+pub mod c;

From faf18b1ea2c0b3dca0e77489385e54f628b42652 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 10:54:35 -0300
Subject: [PATCH 049/122] b

---
 codejam_2008/src/main.rs                      |   4 +-
 codejam_2008/src/y2008round1b/c.rs            |   2 +-
 .../src/y2008round1c/B-large-practice.in      | 101 ++++++++++++++++++
 .../src/y2008round1c/B-large-practice.out     | 100 +++++++++++++++++
 .../src/y2008round1c/B-small-practice.in      | 101 ++++++++++++++++++
 .../src/y2008round1c/B-small-practice.out     | 100 +++++++++++++++++
 codejam_2008/src/y2008round1c/a.rs            |  24 +++--
 codejam_2008/src/y2008round1c/b.rs            |  67 ++++++++++++
 8 files changed, 486 insertions(+), 13 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1c/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1c/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1c/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1c/B-small-practice.out
 create mode 100644 codejam_2008/src/y2008round1c/b.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index bc2f9a0..75f457e 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -65,7 +65,7 @@ pub fn run_y2008_round_1b()
 
 pub fn run_y2008_round_1c()
 {
-
+y2008round1c::a::solve_all_cases();
 }
 
 pub fn run_y2008_round2()
@@ -77,7 +77,7 @@ fn main()
 {
     init_log();
 
-    y2008round1c::a::solve_all_cases();
+    y2008round1c::b::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 1ff286b..86c25dd 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -187,7 +187,7 @@ fn solve(k: usize, indices: &[usize]) -> Vec<usize>
         assert_eq!(deck[cur_pos], 0);
         deck[cur_pos] = card_no;
         bt.set(cur_pos, 0);
-        sum_to_current_pos = target_sum-1;
+        sum_to_current_pos = target_sum - 1;
 
         //debug!("Deck after {} is {:?}", card_no, deck);
         //            bt.debug_print();
diff --git a/codejam_2008/src/y2008round1c/B-large-practice.in b/codejam_2008/src/y2008round1c/B-large-practice.in
new file mode 100644
index 0000000..a2c1bc4
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/B-large-practice.in
@@ -0,0 +1,101 @@
+100
+0
+1
+9
+13
+011
+0497
+9039
+12345
+86639
+7959914
+573017384
+68540544826
+32145655433361
+52081002052138
+5134180346254499
+018821973635726964
+060171285896245046145
+820252813840330980505392644
+866360884235124011799252076
+051012271841077685553686598767
+740299098518162954992321300666
+3113347538451239486060121426942
+89361459635304458328229241256140
+347628665695181180104520713482412
+0250980004336284646260149880570080
+8960178993112460870326222665194015
+33352356467248165372552257793851982
+051414959680398158557090771649406229
+0669654027314253678988660820470361479
+27758187256719083538423239953031873648
+258465557653802423579222566321933927195
+481133191312948198529988117914251491209
+0000000000740299098518162954992321300666
+0000000003113347538451239486060121426942
+0000000089361459635304458328229241256140
+0000000347628665695181180104520713482412
+0000008960178993112460870326222665194015
+0000033352356467248165372552257793851982
+0000051414959680398158557090771649406229
+0000669654027314253678988660820470361479
+0014390365181911727450596647446259821763
+0027758187256719083538423239953031873648
+0036633366660303000663666036333066636363
+0050500505505050050005000000555505050550
+0222862604202046260200044066682648626880
+0226264200640408088280246686240406448060
+0258465557653802423579222566321933927195
+0300003333633360360603003336663630360603
+0500505000050000005050005000555505500555
+0505000500050505505055005555500550050055
+0550550050550505055050555555505005000000
+0640046480204826426426684622640426424664
+0663300630630336060663303330063636333306
+0668264288844400848806862466446486240826
+0887193955655984559355692301072646912093
+0995417846325849841675320805970869070076
+1111111111111111111111111111111111111111
+1261568685698377380952394007726060642763
+1460152764571610968333269830068158468049
+1512276224600141189140143552974886158908
+1988056760136214461560531793525433524024
+2484288464886042866606080840840208448840
+2919869519678715917518421886292390522520
+3281075062173113331900004297232437530455
+3300333666030006000336066600336366360063
+3300600006306333063363033006036060330663
+3333033303630030060636663606066603666600
+3336603600006000000663000003663003063633
+3633066300063330003066360060060336330606
+3779504478876684873405076839734610843913
+3858494112259084396724726116800621610739
+4204204668268620802042844282804404088882
+4422624440624066060284048260642806600228
+4660080220424042268840804266446660064222
+4802669943891147207095443765752168400917
+5000055500505050050550005550005500050000
+5005550550500555505555505055055505050505
+5050005050005550050055550500505500055555
+5155754114778946059209127019163077214514
+5500055050555500500005005550005005005000
+5500550050505555050050550000055050000000
+5528484389330827090906104414972916035585
+5555000505000505555050500500000005005505
+5657213392236874883717016561743102878232
+5962566515073989612504330993934876505944
+6200826424466668686640208446624422022640
+6303006366060336636036300333036663333036
+6366060033306630633660666360366003006363
+6691159185150195447377326989822350798278
+6878047953485590762315052659270678080103
+7060816673934792250905005647124135865884
+7207096016132330983711602415562093145641
+7548235986286437544652444712498921788504
+7777777777777777777777777777777777777777
+8095982586096512943538537763490519894208
+8180501223736237798737496712817590576404
+8254149609355466798549497577647821826665
+8420880844646080022244444226686424468602
+9262253545461893640951174744682172318229
+9872154887939966590114260615533840602941
diff --git a/codejam_2008/src/y2008round1c/B-large-practice.out b/codejam_2008/src/y2008round1c/B-large-practice.out
new file mode 100644
index 0000000..64034a0
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/B-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 0
+Case #3: 1
+Case #4: 2
+Case #5: 5
+Case #6: 23
+Case #7: 27
+Case #8: 62
+Case #9: 58
+Case #10: 569
+Case #11: 5050
+Case #12: 47006
+Case #13: 1229264
+Case #14: 1225581
+Case #15: 11070132
+Case #16: 99623139
+Case #17: 2690038871
+Case #18: 1960872313301
+Case #19: 1960863594870
+Case #20: 52943429973411
+Case #21: 52943431919985
+Case #22: 158830213917346
+Case #23: 476491060336352
+Case #24: 1429473286827412
+Case #25: 4288610227409681
+Case #26: 4288418052273741
+Case #27: 12865254384003415
+Case #28: 38595762268091907
+Case #29: 115787298961893773
+Case #30: 347361873180240602
+Case #31: 1042085610604524626
+Case #32: 1042085628268410530
+Case #33: 3126257303059061865
+Case #34: 3126254690619449937
+Case #35: 3126257815155473871
+Case #36: 3126257813360665665
+Case #37: 3126256906810106817
+Case #38: 3126256821123697107
+Case #39: 3126256743715444467
+Case #40: 3126257071971131871
+Case #41: 3126256830399695001
+Case #42: 3126256856486095653
+Case #43: 4052555153018976267
+Case #44: 4052555153018976267
+Case #45: 4052555153018976267
+Case #46: 4052555153018976267
+Case #47: 3126256831751329145
+Case #48: 4052555153018976267
+Case #49: 4052555153018976267
+Case #50: 4052555153018976267
+Case #51: 4052555153018976267
+Case #52: 4052555153018976267
+Case #53: 4052555153018976267
+Case #54: 4052555153018976267
+Case #55: 3126256832322048989
+Case #56: 3126256825519456855
+Case #57: 3123315974552731863
+Case #58: 3126256806030115607
+Case #59: 3126256810443701549
+Case #60: 3126256840374806317
+Case #61: 3126256833614796195
+Case #62: 4052555153018976267
+Case #63: 3126256833933427710
+Case #64: 3126256153129873383
+Case #65: 4052555153018976267
+Case #66: 4052555153018976267
+Case #67: 4052555153018976267
+Case #68: 4052555153018976267
+Case #69: 4052555153018976267
+Case #70: 3126256832665856244
+Case #71: 3126256825704189137
+Case #72: 4052555153018976267
+Case #73: 4052555153018976267
+Case #74: 4052555153018976267
+Case #75: 3126256835286559597
+Case #76: 4052555153018976267
+Case #77: 4052555153018976267
+Case #78: 4052555153018976267
+Case #79: 3126256853727872798
+Case #80: 4052555153018976267
+Case #81: 4052555153018976267
+Case #82: 3126256825560857003
+Case #83: 4052555153018976267
+Case #84: 3126256826990043807
+Case #85: 3126256832090500081
+Case #86: 4052555153018976267
+Case #87: 4052555153018976267
+Case #88: 4052555153018976267
+Case #89: 3126256832847271727
+Case #90: 3126256841101152156
+Case #91: 3126256831557976872
+Case #92: 3126256663196865317
+Case #93: 3126256897733703928
+Case #94: 4052555153018976267
+Case #95: 3126256840478897929
+Case #96: 3126256842961554142
+Case #97: 3126256832556199364
+Case #98: 4052555153018976267
+Case #99: 3126256831280970959
+Case #100: 3126256830879784097
diff --git a/codejam_2008/src/y2008round1c/B-small-practice.in b/codejam_2008/src/y2008round1c/B-small-practice.in
new file mode 100644
index 0000000..e17f19c
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/B-small-practice.in
@@ -0,0 +1,101 @@
+100
+0
+1
+9
+13
+011
+277
+413
+0876
+7192
+7329
+8126
+9893
+12345
+17214
+20204
+160176
+1566843
+9716463
+54275347
+84091195
+91920744
+216589640
+845048810
+3747766429
+4802642960
+8224853717
+9712606483
+19982103842
+830497247155
+900059026267
+926804404288
+0000000000277
+0000000007329
+0000000017214
+0000000160176
+0000009716463
+0000091920744
+0000555005000
+0000845048810
+0004288666440
+0008224853717
+0019982103842
+0066006333660
+0266408208048
+0500550055050
+0550050000505
+0555000555550
+0555550500505
+0603063033330
+0800428008208
+0801564185288
+0926804404288
+1087830939945
+1111111111111
+1583319926819
+1854109578624
+2208684408826
+2282622822428
+3006306630360
+3076293173315
+3139233861342
+3363600606666
+3719669768636
+3824130392011
+4746598597199
+4787157013058
+4804248428846
+4859618176134
+4938069459189
+5005000000050
+5050500005000
+5149017057386
+5547883568237
+5550055055005
+5550055550005
+5555000555050
+6066446228844
+6204689097259
+6336663000030
+6360660306000
+6363633000033
+6600066606363
+6603063333033
+6603330660006
+6899770633780
+7384787452228
+7777777777777
+8006422004864
+8085122681688
+8148388648124
+8497502656195
+8604680006424
+8617183596076
+8668828424088
+8855851047012
+8968834961434
+9321829612918
+9433879877471
+9655492462320
+9929263750831
diff --git a/codejam_2008/src/y2008round1c/B-small-practice.out b/codejam_2008/src/y2008round1c/B-small-practice.out
new file mode 100644
index 0000000..ffdedb8
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/B-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 0
+Case #3: 1
+Case #4: 2
+Case #5: 5
+Case #6: 7
+Case #7: 7
+Case #8: 23
+Case #9: 20
+Case #10: 22
+Case #11: 17
+Case #12: 22
+Case #13: 62
+Case #14: 59
+Case #15: 81
+Case #16: 180
+Case #17: 546
+Case #18: 567
+Case #19: 1691
+Case #20: 1662
+Case #21: 1725
+Case #22: 5011
+Case #23: 5211
+Case #24: 15176
+Case #25: 13595
+Case #26: 15193
+Case #27: 15376
+Case #28: 45348
+Case #29: 136575
+Case #30: 138709
+Case #31: 96231
+Case #32: 452709
+Case #33: 439587
+Case #34: 400221
+Case #35: 395847
+Case #36: 410427
+Case #37: 415125
+Case #38: 531441
+Case #39: 423117
+Case #40: 531441
+Case #41: 410229
+Case #42: 409551
+Case #43: 531441
+Case #44: 531441
+Case #45: 531441
+Case #46: 531441
+Case #47: 531441
+Case #48: 531441
+Case #49: 531441
+Case #50: 531441
+Case #51: 411415
+Case #52: 369609
+Case #53: 410169
+Case #54: 398640
+Case #55: 409841
+Case #56: 410361
+Case #57: 531441
+Case #58: 531441
+Case #59: 531441
+Case #60: 410234
+Case #61: 410046
+Case #62: 531441
+Case #63: 411282
+Case #64: 409627
+Case #65: 409841
+Case #66: 410184
+Case #67: 531441
+Case #68: 409648
+Case #69: 409842
+Case #70: 531441
+Case #71: 531441
+Case #72: 409916
+Case #73: 409876
+Case #74: 531441
+Case #75: 531441
+Case #76: 531441
+Case #77: 531441
+Case #78: 409793
+Case #79: 531441
+Case #80: 531441
+Case #81: 531441
+Case #82: 531441
+Case #83: 531441
+Case #84: 531441
+Case #85: 410147
+Case #86: 408413
+Case #87: 531441
+Case #88: 531441
+Case #89: 405106
+Case #90: 405426
+Case #91: 410081
+Case #92: 531441
+Case #93: 409823
+Case #94: 531441
+Case #95: 410337
+Case #96: 409528
+Case #97: 410141
+Case #98: 409959
+Case #99: 408292
+Case #100: 410030
diff --git a/codejam_2008/src/y2008round1c/a.rs b/codejam_2008/src/y2008round1c/a.rs
index e59dbf6..ebb895e 100644
--- a/codejam_2008/src/y2008round1c/a.rs
+++ b/codejam_2008/src/y2008round1c/a.rs
@@ -13,15 +13,15 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                 /*On the first line we have the maximum number of letters
-                 to place on a key (P), the number of keys available (K) and
-                 the number of letters in our alphabet (L) all separated by single spaces.*/
+                /*On the first line we have the maximum number of letters
+                to place on a key (P), the number of keys available (K) and
+                the number of letters in our alphabet (L) all separated by single spaces.*/
 
                 let input_nums = reader.read_num_line();
                 assert_eq!(3, input_nums.len());
 
                 /*The second line has L non-negative integers. Each number represents the frequency of a certain letter.
-                */
+                 */
                 let mut freq = reader.read_num_line();
 
                 assert_eq!(freq.len(), input_nums[2]);
@@ -32,9 +32,13 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {}", case_no,
-                         solve(input_nums[0],
-                               input_nums[1], &mut freq)).unwrap();
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(input_nums[0], input_nums[1], &mut freq)
+                )
+                .unwrap();
             }
         },
     );
@@ -46,15 +50,15 @@ fn solve(max_letters_per_key: usize, num_keys: usize, freq: &mut Vec<usize>) ->
     freq.reverse();
 
     let mut total_cost = 0;
-    let mut  cost = 1;
+    let mut cost = 1;
     let mut keys_left = num_keys;
 
     for lf in freq.iter() {
         assert!(cost <= max_letters_per_key);
         total_cost += cost * lf;
-        keys_left-=1;
+        keys_left -= 1;
         if keys_left == 0 {
-            cost+=1;
+            cost += 1;
             keys_left = num_keys;
         }
     }
diff --git a/codejam_2008/src/y2008round1c/b.rs b/codejam_2008/src/y2008round1c/b.rs
new file mode 100644
index 0000000..227cb02
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/b.rs
@@ -0,0 +1,67 @@
+use codejam::util::codejam::run_cases;
+
+use std::io::Write;
+
+/*
+Dynamic programming
+Chinese remainder theorem
+
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round1c",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let s: Vec<char> = reader.read_string().chars().collect();
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&s)).unwrap();
+            }
+        },
+    );
+}
+
+const MOD: usize = 2 * 3 * 5 * 7;
+const MODi64: i64 = 2 * 3 * 5 * 7;
+
+fn solve(s: &[char]) -> u64
+{
+    /*
+    dyn[i][x] := number of ways we get an expression evaluating
+      to x (mod 210) if we only consider the first i
+      characters of the string. (*)
+      */
+    let mut dp: Vec<Vec<u64>> = vec![vec![0; MOD]; s.len()+1];
+
+    dp[0][0] = 1;
+    for (i, ch) in s.into_iter().enumerate() {
+        let digit = ch.to_digit(10).unwrap() as i64;
+        //: Between each two adjacent digits you may choose put a plus sign, a minus sign, or nothing.
+        let start_sgn = if i == 0 { 1 } else { -1 };
+        //insert a + or a -
+        for sgn in (start_sgn..=1).step_by(2) {
+            let mut cur = 0i64;
+            for j in i..s.len() {
+                //build up the lhs
+                cur = (cur * 10 + digit) % MODi64;
+                for x in 0..MODi64 {
+                    let new_x = ((x + sgn * cur + MODi64) % MODi64) as usize;
+                    dp[j + 1][new_x] += dp[i][x as usize];
+                }
+            }
+        }
+    }
+
+    let mut ret = 0;
+    for x in 0..MOD {
+        if x % 2 == 0 || x % 3 == 0 || x % 5 == 0 || x % 7 == 0 {
+            ret += dp[s.len()][x];
+        }
+    }
+    ret
+}

From cf4022f0a1b2002979fe62149b5fd306c17ee3ba Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 13:41:27 -0300
Subject: [PATCH 050/122] c

---
 codejam/src/util/binary_sum_tree.rs           | 285 +++++++++++++++++
 codejam/src/util/mod.rs                       |   3 +-
 codejam/src/y2017round4/f.rs                  |   3 +-
 codejam_2008/src/main.rs                      |   3 +-
 codejam_2008/src/y2008round1b/c.rs            | 286 +-----------------
 .../src/y2008round1c/B-large-practice.out     | 126 ++++----
 .../src/y2008round1c/B-small-practice.out     | 118 ++++----
 codejam_2008/src/y2008round1c/b.rs            |  17 +-
 codejam_2008/src/y2008round1c/c.rs            |  71 +++++
 9 files changed, 495 insertions(+), 417 deletions(-)
 create mode 100644 codejam/src/util/binary_sum_tree.rs
 create mode 100644 codejam_2008/src/y2008round1c/c.rs

diff --git a/codejam/src/util/binary_sum_tree.rs b/codejam/src/util/binary_sum_tree.rs
new file mode 100644
index 0000000..37abfdd
--- /dev/null
+++ b/codejam/src/util/binary_sum_tree.rs
@@ -0,0 +1,285 @@
+use std::cmp::min;
+
+//A binary tree represented in an array, starting at 1 for convenience
+/*
+(1) 001 [0..=7]
+(2) 010 [0..=3] (3) 011 [4..=7]
+(4) 100 [0..=1] (5) 101 [2..=3] (6) 110 [4..=5] (7) 111
+(8) 1000 [0..=0] .... (15) 1111
+
+
+   //parent is (i) / 2
+   //left child is =(2*i);
+   //and right_son=(2*i)+1;
+
+   */
+pub struct BinarySumTree
+{
+    data: Vec<i64>,
+    //Number of elements, not the size of the tree
+    num_elems: usize,
+    num_levels: usize,
+}
+
+impl BinarySumTree
+{
+    pub fn new(num_elems: usize) -> Self
+    {
+        let mut levels = 1;
+        while 1 << (levels - 1) < num_elems {
+            levels += 1;
+        }
+        BinarySumTree {
+            data: vec![0; 1 << levels],
+            num_elems,
+            num_levels: levels,
+        }
+    }
+
+    pub fn set(&mut self, idx: usize, val: i64)
+    {
+        assert!(idx < self.num_elems);
+        let mut i = idx + (1 << (self.num_levels - 1));
+        let old_val = self.data[i];
+        self.data[i] = val;
+        while i > 0 {
+            //divide by 2
+            i >>= 1;
+            self.data[i] += val - old_val;
+        }
+    }
+
+    //assumes sums are positive
+    //returns smallest index such that sum(0..=index) >= target_sum
+    pub fn lower_bound(&self, target_sum: i64) -> usize
+    {
+        let mut range_width = 1 << (self.num_levels - 1);
+        //exclusive upper bound
+        let mut range_to = range_width;
+
+        if self.data[1] < target_sum {
+            //fail with a sensible value
+            return self.num_elems;
+        }
+        let mut cur_node = 1;
+        let mut target_sum = target_sum;
+
+        //go all the way to the bottom level because we want the smallest index
+        //and there could be zeros
+        while range_width > 1 {
+            /*      println!("Cur node {} target sum {} range width {} range to {} val @ cur_node {}",
+                        cur_node, target_sum, range_width, range_to, self.data[cur_node]);
+            */
+            range_width /= 2;
+
+            //lhs
+            if self.data[cur_node * 2] >= target_sum {
+                cur_node = cur_node * 2;
+                assert!(range_width < range_to);
+                range_to -= range_width;
+            } else {
+                //subtract lhs
+                target_sum -= self.data[cur_node * 2];
+                cur_node = cur_node * 2 + 1;
+
+                assert!(self.data[cur_node] >= target_sum);
+            }
+        }
+
+        range_to - 1
+    }
+
+    pub fn sum(&self) -> i64
+    {
+        self.data[1]
+    }
+
+    pub fn sum_to(&self, to: usize) -> i64
+    {
+        //beginning of last row, leaves
+        let start = 1 << (self.num_levels - 1);
+        let mut i = to + start;
+        let mut sum = self.data[i];
+        while i > 1 {
+            //debug!("I is {}  {:0>width$b}", i, i, width=7);
+
+            if i & 1 > 0 {
+                sum += self.data[i - 1];
+            }
+            //divide by 2
+            i >>= 1;
+        }
+
+        sum
+    }
+
+    pub fn debug_print(&self)
+    {
+        println!("Binary tree: {:?}", self.data);
+
+        let mut i = 1;
+        let mut level = 0;
+        while i < self.data.len() {
+            let stop = min(self.data.len() - i, 1 << level);
+            println!("Level {} = {:?}", level, &self.data[i..i + stop]);
+            level += 1;
+            i += stop;
+        }
+    }
+}
+
+
+#[cfg(test)]
+mod test_binary_tree
+{
+    use super::*;
+    use rand::distributions::{Distribution, Uniform};
+    use rand::prelude::StdRng;
+    use rand::Rng;
+    use rand::SeedableRng;
+
+    #[test]
+    fn test_bt()
+    {
+        let mut bt = BinarySumTree::new(9);
+        bt.debug_print();
+
+        assert_eq!(5, bt.num_levels);
+        bt.set(3, 4);
+        bt.set(8, 1);
+        bt.set(5, 3);
+        bt.set(1, 7);
+
+        bt.debug_print();
+
+        assert_eq!(0, bt.sum_to(0));
+        assert_eq!(7, bt.sum_to(1));
+        assert_eq!(7, bt.sum_to(2));
+        assert_eq!(11, bt.sum_to(3));
+        assert_eq!(11, bt.sum_to(4));
+        assert_eq!(14, bt.sum_to(5));
+        assert_eq!(14, bt.sum_to(6));
+        assert_eq!(14, bt.sum_to(7));
+        assert_eq!(15, bt.sum_to(8));
+
+        bt.set(0, -8);
+
+        bt.debug_print();
+
+        assert_eq!(-8, bt.sum_to(0));
+        assert_eq!(-1, bt.sum_to(1));
+        assert_eq!(-1, bt.sum_to(2));
+        assert_eq!(3, bt.sum_to(3));
+        assert_eq!(3, bt.sum_to(4));
+        assert_eq!(6, bt.sum_to(5));
+        assert_eq!(6, bt.sum_to(6));
+        assert_eq!(6, bt.sum_to(7));
+        assert_eq!(7, bt.sum_to(8));
+    }
+
+    #[test]
+    fn test_random()
+    {
+        let mut rng: StdRng = SeedableRng::seed_from_u64(42);
+
+        let num_elems_gen = Uniform::from(1..100usize);
+        let values_gen = Uniform::from(-100..100i64);
+
+        for _ in 0..10 {
+            let size = num_elems_gen.sample(&mut rng);
+            let mut bt = BinarySumTree::new(size);
+
+            let mut check = vec![0; size];
+
+            for _ in 0..size {
+                let pos = rng.gen_range(0, size);
+                let val = values_gen.sample(&mut rng);
+
+                check[pos] = val;
+                bt.set(pos, val);
+
+                for i in 0..size {
+                    assert_eq!(check.iter().take(i + 1).sum::<i64>(), bt.sum_to(i));
+                }
+            }
+        }
+    }
+
+    #[test]
+    fn test_small()
+    {
+        let mut bt = BinarySumTree::new(1);
+        bt.set(0, -3);
+        assert_eq!(bt.sum_to(0), -3);
+
+        bt.set(0, 7);
+        assert_eq!(bt.sum_to(0), 7);
+    }
+
+    #[test]
+    fn test_big()
+    {
+        let mut bt = BinarySumTree::new(1_000_000);
+        bt.set(0, -3);
+        assert_eq!(bt.sum_to(0), -3);
+
+        bt.set(1_000_000 - 1, 7);
+        assert_eq!(bt.sum_to(1_000_000 - 1), 4);
+    }
+
+    #[test]
+    fn test_lower_bound_exact()
+    {
+        let size = 100;
+        let mut bt = BinarySumTree::new(size);
+
+        for i in 0..size {
+            bt.set(i, (2 * (i + 1)) as i64);
+        }
+
+        for i in 0..size {
+            //sum formula
+            let target_sum = ((i + 1) * (i + 2)) as i64;
+            println!("sum of 2+4+...+ for index {} should be {}", i, target_sum);
+            assert_eq!(bt.lower_bound(target_sum), i as usize);
+        }
+    }
+
+    #[test]
+    fn test_lower_bound_inexact()
+    {
+        let size = 5;
+        let mut bt = BinarySumTree::new(size);
+
+        for i in 0..size {
+            bt.set(i, (2 * (i + 1)) as i64);
+        }
+
+        //2+4+6+8+10
+        assert_eq!(bt.lower_bound(1), 0);
+        assert_eq!(bt.lower_bound(3), 1);
+        assert_eq!(bt.lower_bound(5), 1);
+        assert_eq!(bt.lower_bound(7), 2);
+        assert_eq!(bt.lower_bound(11), 2);
+        assert_eq!(bt.lower_bound(13), 3);
+        assert_eq!(bt.lower_bound(19), 3);
+        assert_eq!(bt.lower_bound(21), 4);
+        assert_eq!(bt.lower_bound(29), 4);
+
+        assert_eq!(bt.lower_bound(30), 4);
+        assert_eq!(bt.lower_bound(31), 5);
+    }
+
+    #[test]
+    fn test_lower_bound_bug()
+    {
+        let mut bt = BinarySumTree::new(5);
+        bt.set(4, 1);
+
+        assert_eq!(4, bt.lower_bound(1));
+
+        bt.set(4, 0);
+        bt.set(3, 1);
+        assert_eq!(3, bt.lower_bound(1));
+    }
+}
diff --git a/codejam/src/util/mod.rs b/codejam/src/util/mod.rs
index 9f9576a..f203421 100644
--- a/codejam/src/util/mod.rs
+++ b/codejam/src/util/mod.rs
@@ -4,4 +4,5 @@ pub mod input;
 pub mod log;
 pub mod math;
 pub mod vector_2d;
-pub mod bitvec64;
\ No newline at end of file
+pub mod bitvec64;
+pub mod binary_sum_tree;
\ No newline at end of file
diff --git a/codejam/src/y2017round4/f.rs b/codejam/src/y2017round4/f.rs
index 410e355..e097f22 100644
--- a/codejam/src/y2017round4/f.rs
+++ b/codejam/src/y2017round4/f.rs
@@ -7,11 +7,10 @@ use rand::distributions::{Distribution, Uniform};
 use rand::prelude::{SliceRandom, StdRng};
 use rand::{Rng, SeedableRng};
 use std::cmp::{max, min};
-use std::collections::{HashMap, HashSet, VecDeque};
+//use std::collections::{HashMap, HashSet, VecDeque};
 use std::i64;
 use std::io::Write;
 use std::mem;
-use std::time::Instant;
 
 /*
 */
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 75f457e..8e005b5 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -66,6 +66,7 @@ pub fn run_y2008_round_1b()
 pub fn run_y2008_round_1c()
 {
 y2008round1c::a::solve_all_cases();
+       y2008round1c::b::solve_all_cases();
 }
 
 pub fn run_y2008_round2()
@@ -77,7 +78,7 @@ fn main()
 {
     init_log();
 
-    y2008round1c::b::solve_all_cases();
+    y2008round1c::c::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 86c25dd..1e99310 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -1,7 +1,8 @@
 use codejam::util::codejam::run_cases;
 use itertools::Itertools;
-use std::cmp::min;
+
 use std::io::Write;
+use codejam::util::binary_sum_tree::BinarySumTree;
 
 /*
 Binary Sum tree using an array
@@ -38,134 +39,6 @@ pub fn solve_all_cases()
     );
 }
 
-//A binary tree represented in an array, starting at 1 for convenience
-/*
-(1) 001 [0..=7]
-(2) 010 [0..=3] (3) 011 [4..=7]
-(4) 100 [0..=1] (5) 101 [2..=3] (6) 110 [4..=5] (7) 111
-(8) 1000 [0..=0] .... (15) 1111
-
-
-   //parent is (i) / 2
-   //left child is =(2*i);
-   //and right_son=(2*i)+1;
-
-   */
-struct BinarySumTree
-{
-    data: Vec<i64>,
-    //Number of elements, not the size of the tree
-    num_elems: usize,
-    num_levels: usize,
-}
-
-impl BinarySumTree
-{
-    fn new(num_elems: usize) -> Self
-    {
-        let mut levels = 1;
-        while 1 << (levels - 1) < num_elems {
-            levels += 1;
-        }
-        BinarySumTree {
-            data: vec![0; 1 << levels],
-            num_elems,
-            num_levels: levels,
-        }
-    }
-
-    fn set(&mut self, idx: usize, val: i64)
-    {
-        assert!(idx < self.num_elems);
-        let mut i = idx + (1 << (self.num_levels - 1));
-        let old_val = self.data[i];
-        self.data[i] = val;
-        while i > 0 {
-            //divide by 2
-            i >>= 1;
-            self.data[i] += val - old_val;
-        }
-    }
-
-    //assumes sums are positive
-    //returns smallest index such that sum(0..=index) >= target_sum
-    fn lower_bound(&self, target_sum: i64) -> usize
-    {
-        let mut range_width = 1 << (self.num_levels - 1);
-        //exclusive upper bound
-        let mut range_to = range_width;
-
-        if self.data[1] < target_sum {
-            //fail with a sensible value
-            return self.num_elems;
-        }
-        let mut cur_node = 1;
-        let mut target_sum = target_sum;
-
-        //go all the way to the bottom level because we want the smallest index
-        //and there could be zeros
-        while range_width > 1 {
-            /*      println!("Cur node {} target sum {} range width {} range to {} val @ cur_node {}",
-                        cur_node, target_sum, range_width, range_to, self.data[cur_node]);
-            */
-            range_width /= 2;
-
-            //lhs
-            if self.data[cur_node * 2] >= target_sum {
-                cur_node = cur_node * 2;
-                assert!(range_width < range_to);
-                range_to -= range_width;
-            } else {
-                //subtract lhs
-                target_sum -= self.data[cur_node * 2];
-                cur_node = cur_node * 2 + 1;
-
-                assert!(self.data[cur_node] >= target_sum);
-            }
-        }
-
-        range_to - 1
-    }
-
-    fn sum(&self) -> i64
-    {
-        self.data[1]
-    }
-
-    fn sum_to(&self, to: usize) -> i64
-    {
-        //beginning of last row, leaves
-        let start = 1 << (self.num_levels - 1);
-        let mut i = to + start;
-        let mut sum = self.data[i];
-        while i > 1 {
-            //debug!("I is {}  {:0>width$b}", i, i, width=7);
-
-            if i & 1 > 0 {
-                sum += self.data[i - 1];
-            }
-            //divide by 2
-            i >>= 1;
-        }
-
-        sum
-    }
-
-    fn debug_print(&self)
-    {
-        println!("Binary tree: {:?}", self.data);
-
-        let mut i = 1;
-        let mut level = 0;
-        while i < self.data.len() {
-            let stop = min(self.data.len() - i, 1 << level);
-            println!("Level {} = {:?}", level, &self.data[i..i + stop]);
-            level += 1;
-            i += stop;
-        }
-    }
-}
-
 fn solve(k: usize, indices: &[usize]) -> Vec<usize>
 {
     let mut bt = BinarySumTree::new(k);
@@ -195,158 +68,3 @@ fn solve(k: usize, indices: &[usize]) -> Vec<usize>
 
     indices.iter().map(|i| deck[i - 1]).collect()
 }
-
-#[cfg(test)]
-mod test_binary_tree
-{
-    use super::*;
-    use rand::distributions::{Distribution, Uniform};
-    use rand::prelude::StdRng;
-    use rand::Rng;
-    use rand::SeedableRng;
-
-    #[test]
-    fn test_bt()
-    {
-        let mut bt = BinarySumTree::new(9);
-        bt.debug_print();
-
-        assert_eq!(5, bt.num_levels);
-        bt.set(3, 4);
-        bt.set(8, 1);
-        bt.set(5, 3);
-        bt.set(1, 7);
-
-        bt.debug_print();
-
-        assert_eq!(0, bt.sum_to(0));
-        assert_eq!(7, bt.sum_to(1));
-        assert_eq!(7, bt.sum_to(2));
-        assert_eq!(11, bt.sum_to(3));
-        assert_eq!(11, bt.sum_to(4));
-        assert_eq!(14, bt.sum_to(5));
-        assert_eq!(14, bt.sum_to(6));
-        assert_eq!(14, bt.sum_to(7));
-        assert_eq!(15, bt.sum_to(8));
-
-        bt.set(0, -8);
-
-        bt.debug_print();
-
-        assert_eq!(-8, bt.sum_to(0));
-        assert_eq!(-1, bt.sum_to(1));
-        assert_eq!(-1, bt.sum_to(2));
-        assert_eq!(3, bt.sum_to(3));
-        assert_eq!(3, bt.sum_to(4));
-        assert_eq!(6, bt.sum_to(5));
-        assert_eq!(6, bt.sum_to(6));
-        assert_eq!(6, bt.sum_to(7));
-        assert_eq!(7, bt.sum_to(8));
-    }
-
-    #[test]
-    fn test_random()
-    {
-        let mut rng: StdRng = SeedableRng::seed_from_u64(42);
-
-        let num_elems_gen = Uniform::from(1..100usize);
-        let values_gen = Uniform::from(-100..100i64);
-
-        for _ in 0..10 {
-            let size = num_elems_gen.sample(&mut rng);
-            let mut bt = BinarySumTree::new(size);
-
-            let mut check = vec![0; size];
-
-            for _ in 0..size {
-                let pos = rng.gen_range(0, size);
-                let val = values_gen.sample(&mut rng);
-
-                check[pos] = val;
-                bt.set(pos, val);
-
-                for i in 0..size {
-                    assert_eq!(check.iter().take(i + 1).sum::<i64>(), bt.sum_to(i));
-                }
-            }
-        }
-    }
-
-    #[test]
-    fn test_small()
-    {
-        let mut bt = BinarySumTree::new(1);
-        bt.set(0, -3);
-        assert_eq!(bt.sum_to(0), -3);
-
-        bt.set(0, 7);
-        assert_eq!(bt.sum_to(0), 7);
-    }
-
-    #[test]
-    fn test_big()
-    {
-        let mut bt = BinarySumTree::new(1_000_000);
-        bt.set(0, -3);
-        assert_eq!(bt.sum_to(0), -3);
-
-        bt.set(1_000_000 - 1, 7);
-        assert_eq!(bt.sum_to(1_000_000 - 1), 4);
-    }
-
-    #[test]
-    fn test_lower_bound_exact()
-    {
-        let size = 100;
-        let mut bt = BinarySumTree::new(size);
-
-        for i in 0..size {
-            bt.set(i, (2 * (i + 1)) as i64);
-        }
-
-        for i in 0..size {
-            //sum formula
-            let target_sum = ((i + 1) * (i + 2)) as i64;
-            println!("sum of 2+4+...+ for index {} should be {}", i, target_sum);
-            assert_eq!(bt.lower_bound(target_sum), i as usize);
-        }
-    }
-
-    #[test]
-    fn test_lower_bound_inexact()
-    {
-        let size = 5;
-        let mut bt = BinarySumTree::new(size);
-
-        for i in 0..size {
-            bt.set(i, (2 * (i + 1)) as i64);
-        }
-
-        //2+4+6+8+10
-        assert_eq!(bt.lower_bound(1), 0);
-        assert_eq!(bt.lower_bound(3), 1);
-        assert_eq!(bt.lower_bound(5), 1);
-        assert_eq!(bt.lower_bound(7), 2);
-        assert_eq!(bt.lower_bound(11), 2);
-        assert_eq!(bt.lower_bound(13), 3);
-        assert_eq!(bt.lower_bound(19), 3);
-        assert_eq!(bt.lower_bound(21), 4);
-        assert_eq!(bt.lower_bound(29), 4);
-
-        assert_eq!(bt.lower_bound(30), 4);
-        assert_eq!(bt.lower_bound(31), 5);
-    }
-
-    #[test]
-    fn test_lower_bound_bug()
-    {
-        let mut bt = BinarySumTree::new(5);
-        bt.set(4, 1);
-
-        assert_eq!(4, bt.lower_bound(1));
-
-        bt.set(4, 0);
-        bt.set(3, 1);
-        assert_eq!(3, bt.lower_bound(1));
-    }
-}
diff --git a/codejam_2008/src/y2008round1c/B-large-practice.out b/codejam_2008/src/y2008round1c/B-large-practice.out
index 64034a0..9472782 100644
--- a/codejam_2008/src/y2008round1c/B-large-practice.out
+++ b/codejam_2008/src/y2008round1c/B-large-practice.out
@@ -2,49 +2,49 @@ Case #1: 1
 Case #2: 0
 Case #3: 1
 Case #4: 2
-Case #5: 5
-Case #6: 23
+Case #5: 6
+Case #6: 24
 Case #7: 27
-Case #8: 62
-Case #9: 58
-Case #10: 569
-Case #11: 5050
-Case #12: 47006
-Case #13: 1229264
-Case #14: 1225581
-Case #15: 11070132
-Case #16: 99623139
-Case #17: 2690038871
-Case #18: 1960872313301
-Case #19: 1960863594870
-Case #20: 52943429973411
-Case #21: 52943431919985
-Case #22: 158830213917346
-Case #23: 476491060336352
-Case #24: 1429473286827412
-Case #25: 4288610227409681
-Case #26: 4288418052273741
-Case #27: 12865254384003415
-Case #28: 38595762268091907
-Case #29: 115787298961893773
-Case #30: 347361873180240602
-Case #31: 1042085610604524626
-Case #32: 1042085628268410530
-Case #33: 3126257303059061865
-Case #34: 3126254690619449937
-Case #35: 3126257815155473871
-Case #36: 3126257813360665665
-Case #37: 3126256906810106817
-Case #38: 3126256821123697107
-Case #39: 3126256743715444467
-Case #40: 3126257071971131871
-Case #41: 3126256830399695001
-Case #42: 3126256856486095653
+Case #8: 64
+Case #9: 63
+Case #10: 554
+Case #11: 5052
+Case #12: 47185
+Case #13: 1235847
+Case #14: 1227497
+Case #15: 11083689
+Case #16: 99758520
+Case #17: 2690349525
+Case #18: 1960855758345
+Case #19: 1960909072918
+Case #20: 52943320456260
+Case #21: 52946841469553
+Case #22: 158833271667060
+Case #23: 476490122694949
+Case #24: 1429471945580392
+Case #25: 4288606533783222
+Case #26: 4288447898181282
+Case #27: 12865254002119726
+Case #28: 38595785181347613
+Case #29: 115787174691871269
+Case #30: 347362238039287370
+Case #31: 1042085722818015233
+Case #32: 1042085619844922679
+Case #33: 3126458041935635097
+Case #34: 3126315286222741980
+Case #35: 3126251695001560389
+Case #36: 3126255144984317304
+Case #37: 3126278517774154578
+Case #38: 3126256722515093418
+Case #39: 3126258599689156653
+Case #40: 3126253716680524263
+Case #41: 3126256932945543651
+Case #42: 3126260142353586330
 Case #43: 4052555153018976267
 Case #44: 4052555153018976267
 Case #45: 4052555153018976267
 Case #46: 4052555153018976267
-Case #47: 3126256831751329145
+Case #47: 3126257168454045699
 Case #48: 4052555153018976267
 Case #49: 4052555153018976267
 Case #50: 4052555153018976267
@@ -52,49 +52,49 @@ Case #51: 4052555153018976267
 Case #52: 4052555153018976267
 Case #53: 4052555153018976267
 Case #54: 4052555153018976267
-Case #55: 3126256832322048989
-Case #56: 3126256825519456855
+Case #55: 3126255888150504852
+Case #56: 3126257113629559461
 Case #57: 3123315974552731863
-Case #58: 3126256806030115607
-Case #59: 3126256810443701549
-Case #60: 3126256840374806317
-Case #61: 3126256833614796195
+Case #58: 3126256034469921040
+Case #59: 3126256849485697629
+Case #60: 3126256908729866798
+Case #61: 3126256843542223000
 Case #62: 4052555153018976267
-Case #63: 3126256833933427710
-Case #64: 3126256153129873383
+Case #63: 3126256827753902882
+Case #64: 3126244177042699035
 Case #65: 4052555153018976267
 Case #66: 4052555153018976267
 Case #67: 4052555153018976267
 Case #68: 4052555153018976267
 Case #69: 4052555153018976267
-Case #70: 3126256832665856244
-Case #71: 3126256825704189137
+Case #70: 3126257249676362560
+Case #71: 3126256477387445168
 Case #72: 4052555153018976267
 Case #73: 4052555153018976267
 Case #74: 4052555153018976267
-Case #75: 3126256835286559597
+Case #75: 3126256891431102367
 Case #76: 4052555153018976267
 Case #77: 4052555153018976267
 Case #78: 4052555153018976267
-Case #79: 3126256853727872798
+Case #79: 3126256805997177673
 Case #80: 4052555153018976267
 Case #81: 4052555153018976267
-Case #82: 3126256825560857003
+Case #82: 3126262206857073532
 Case #83: 4052555153018976267
-Case #84: 3126256826990043807
-Case #85: 3126256832090500081
+Case #84: 3126256831612350998
+Case #85: 3126261422741512380
 Case #86: 4052555153018976267
 Case #87: 4052555153018976267
 Case #88: 4052555153018976267
-Case #89: 3126256832847271727
-Case #90: 3126256841101152156
-Case #91: 3126256831557976872
-Case #92: 3126256663196865317
-Case #93: 3126256897733703928
+Case #89: 3126257282301440399
+Case #90: 3126255258238421448
+Case #91: 3126256713219041948
+Case #92: 3126256504756195448
+Case #93: 3126256904062108234
 Case #94: 4052555153018976267
-Case #95: 3126256840478897929
-Case #96: 3126256842961554142
-Case #97: 3126256832556199364
+Case #95: 3126254585561920475
+Case #96: 3126256591400460705
+Case #97: 3126256845829422841
 Case #98: 4052555153018976267
-Case #99: 3126256831280970959
-Case #100: 3126256830879784097
+Case #99: 3126257406778969053
+Case #100: 3126252869898418789
diff --git a/codejam_2008/src/y2008round1c/B-small-practice.out b/codejam_2008/src/y2008round1c/B-small-practice.out
index ffdedb8..b9c3c4d 100644
--- a/codejam_2008/src/y2008round1c/B-small-practice.out
+++ b/codejam_2008/src/y2008round1c/B-small-practice.out
@@ -2,44 +2,44 @@ Case #1: 1
 Case #2: 0
 Case #3: 1
 Case #4: 2
-Case #5: 5
+Case #5: 6
 Case #6: 7
-Case #7: 7
-Case #8: 23
+Case #7: 8
+Case #8: 27
 Case #9: 20
-Case #10: 22
+Case #10: 23
 Case #11: 17
-Case #12: 22
-Case #13: 62
-Case #14: 59
+Case #12: 18
+Case #13: 64
+Case #14: 61
 Case #15: 81
-Case #16: 180
-Case #17: 546
-Case #18: 567
-Case #19: 1691
-Case #20: 1662
-Case #21: 1725
-Case #22: 5011
-Case #23: 5211
-Case #24: 15176
-Case #25: 13595
-Case #26: 15193
-Case #27: 15376
-Case #28: 45348
-Case #29: 136575
-Case #30: 138709
-Case #31: 96231
-Case #32: 452709
-Case #33: 439587
+Case #16: 202
+Case #17: 582
+Case #18: 586
+Case #19: 1677
+Case #20: 1663
+Case #21: 1739
+Case #22: 4960
+Case #23: 5097
+Case #24: 14913
+Case #25: 12902
+Case #26: 15121
+Case #27: 15021
+Case #28: 45134
+Case #29: 136503
+Case #30: 140458
+Case #31: 123300
+Case #32: 413343
+Case #33: 452709
 Case #34: 400221
-Case #35: 395847
-Case #36: 410427
-Case #37: 415125
+Case #35: 441774
+Case #36: 427194
+Case #37: 422577
 Case #38: 531441
-Case #39: 423117
+Case #39: 412857
 Case #40: 531441
-Case #41: 410229
-Case #42: 409551
+Case #41: 408267
+Case #42: 406206
 Case #43: 531441
 Case #44: 531441
 Case #45: 531441
@@ -48,53 +48,53 @@ Case #47: 531441
 Case #48: 531441
 Case #49: 531441
 Case #50: 531441
-Case #51: 411415
-Case #52: 369609
-Case #53: 410169
+Case #51: 410283
+Case #52: 369900
+Case #53: 421959
 Case #54: 398640
-Case #55: 409841
-Case #56: 410361
+Case #55: 407153
+Case #56: 412014
 Case #57: 531441
 Case #58: 531441
 Case #59: 531441
-Case #60: 410234
-Case #61: 410046
+Case #60: 410000
+Case #61: 414539
 Case #62: 531441
-Case #63: 411282
-Case #64: 409627
-Case #65: 409841
-Case #66: 410184
+Case #63: 409758
+Case #64: 408643
+Case #65: 409398
+Case #66: 409887
 Case #67: 531441
-Case #68: 409648
-Case #69: 409842
+Case #68: 410163
+Case #69: 418663
 Case #70: 531441
 Case #71: 531441
-Case #72: 409916
-Case #73: 409876
+Case #72: 409984
+Case #73: 409867
 Case #74: 531441
 Case #75: 531441
 Case #76: 531441
 Case #77: 531441
-Case #78: 409793
+Case #78: 412959
 Case #79: 531441
 Case #80: 531441
 Case #81: 531441
 Case #82: 531441
 Case #83: 531441
 Case #84: 531441
-Case #85: 410147
-Case #86: 408413
+Case #85: 408769
+Case #86: 409215
 Case #87: 531441
 Case #88: 531441
-Case #89: 405106
-Case #90: 405426
-Case #91: 410081
+Case #89: 405220
+Case #90: 405254
+Case #91: 411322
 Case #92: 531441
-Case #93: 409823
+Case #93: 409588
 Case #94: 531441
-Case #95: 410337
-Case #96: 409528
-Case #97: 410141
-Case #98: 409959
-Case #99: 408292
-Case #100: 410030
+Case #95: 410373
+Case #96: 409685
+Case #97: 412002
+Case #98: 411344
+Case #99: 407139
+Case #100: 413168
diff --git a/codejam_2008/src/y2008round1c/b.rs b/codejam_2008/src/y2008round1c/b.rs
index 227cb02..7f47222 100644
--- a/codejam_2008/src/y2008round1c/b.rs
+++ b/codejam_2008/src/y2008round1c/b.rs
@@ -27,7 +27,7 @@ pub fn solve_all_cases()
 }
 
 const MOD: usize = 2 * 3 * 5 * 7;
-const MODi64: i64 = 2 * 3 * 5 * 7;
+const MOD_I64: i64 = 2 * 3 * 5 * 7;
 
 fn solve(s: &[char]) -> u64
 {
@@ -39,18 +39,21 @@ fn solve(s: &[char]) -> u64
     let mut dp: Vec<Vec<u64>> = vec![vec![0; MOD]; s.len()+1];
 
     dp[0][0] = 1;
-    for (i, ch) in s.into_iter().enumerate() {
-        let digit = ch.to_digit(10).unwrap() as i64;
+    for i in 0..s.len() {
+
         //: Between each two adjacent digits you may choose put a plus sign, a minus sign, or nothing.
         let start_sgn = if i == 0 { 1 } else { -1 };
         //insert a + or a -
         for sgn in (start_sgn..=1).step_by(2) {
             let mut cur = 0i64;
             for j in i..s.len() {
-                //build up the lhs
-                cur = (cur * 10 + digit) % MODi64;
-                for x in 0..MODi64 {
-                    let new_x = ((x + sgn * cur + MODi64) % MODi64) as usize;
+                let digit = s[j].to_digit(10).unwrap() as i64;
+                //build up the rhs
+                cur = (cur * 10 + digit) % MOD_I64;
+                for x in 0..MOD_I64 {
+                    //x is the lhs basically, up to i characters in s (inclusive)
+                    //also move -210 to 0 into something positive for easier calculations
+                    let new_x = ((x + sgn * cur + MOD_I64) % MOD_I64) as usize;
                     dp[j + 1][new_x] += dp[i][x as usize];
                 }
             }
diff --git a/codejam_2008/src/y2008round1c/c.rs b/codejam_2008/src/y2008round1c/c.rs
new file mode 100644
index 0000000..fd122b1
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/c.rs
@@ -0,0 +1,71 @@
+use codejam::util::codejam::run_cases;
+use itertools::Itertools;
+use std::cmp::min;
+use std::io::Write;
+use codejam::util::binary_sum_tree::BinarySumTree;
+
+/*
+Binary Interval tree using an array
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008round1c",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let k: usize = reader.read_int();
+
+                let nums = reader.read_num_line();
+                assert_eq!(nums[0], nums.len() - 1);
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(k, &nums[1..]).iter().join(" ")
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+
+fn solve(k: usize, indices: &[usize]) -> Vec<usize>
+{
+    let mut bt = BinarySumTree::new(k);
+
+    for i in 0..k {
+        bt.set(i, 1);
+    }
+
+    println!("After set");
+    let mut deck = vec![0; k];
+
+    let mut cur_pos = deck.len() - 1;
+    let mut sum_to_current_pos = bt.sum_to(cur_pos);
+
+    for card_no in 1..=k {
+        let target_sum = 1 + (card_no as i64 + sum_to_current_pos - 1) % bt.sum();
+        cur_pos = bt.lower_bound(target_sum);
+        debug!("Target sum is {}.  Cur_pos {}", target_sum, cur_pos);
+        assert_eq!(deck[cur_pos], 0);
+        deck[cur_pos] = card_no;
+        bt.set(cur_pos, 0);
+        sum_to_current_pos = target_sum - 1;
+
+        //debug!("Deck after {} is {:?}", card_no, deck);
+        //            bt.debug_print();
+    }
+
+    indices.iter().map(|i| deck[i - 1]).collect()
+}

From 46da86e3b0ecc3c86150872364d81d86edaf7dac Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 15:50:00 -0300
Subject: [PATCH 051/122] c

---
 codejam/src/util/binary_sum_tree.rs           |  53 +-
 codejam/src/y2017round2/a.rs                  |   3 +-
 codejam/src/y2017round2/b.rs                  |   2 +-
 codejam/src/y2017round4/e.rs                  |   2 +-
 codejam/src/y2017round4/f.rs                  |   2 +-
 codejam_2008/src/main.rs                      |   4 +-
 codejam_2008/src/y2008round1b/c.rs            |   4 +-
 .../src/y2008round1c/C-large-practice.in      | 936 ++++++++++++++++++
 .../src/y2008round1c/C-large-practice.out     |   0
 .../src/y2008round1c/C-small-practice.in      | 889 +++++++++++++++++
 .../src/y2008round1c/C-small-practice.out     |  20 +
 codejam_2008/src/y2008round1c/b.rs            |   3 +-
 codejam_2008/src/y2008round1c/c.rs            |  82 +-
 13 files changed, 1936 insertions(+), 64 deletions(-)
 create mode 100644 codejam_2008/src/y2008round1c/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008round1c/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008round1c/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008round1c/C-small-practice.out

diff --git a/codejam/src/util/binary_sum_tree.rs b/codejam/src/util/binary_sum_tree.rs
index 37abfdd..d01896a 100644
--- a/codejam/src/util/binary_sum_tree.rs
+++ b/codejam/src/util/binary_sum_tree.rs
@@ -15,7 +15,7 @@ use std::cmp::min;
    */
 pub struct BinarySumTree
 {
-    data: Vec<i64>,
+    data: Vec<u64>,
     //Number of elements, not the size of the tree
     num_elems: usize,
     num_levels: usize,
@@ -36,7 +36,7 @@ impl BinarySumTree
         }
     }
 
-    pub fn set(&mut self, idx: usize, val: i64)
+    pub fn set(&mut self, idx: usize, val: u64)
     {
         assert!(idx < self.num_elems);
         let mut i = idx + (1 << (self.num_levels - 1));
@@ -45,13 +45,14 @@ impl BinarySumTree
         while i > 0 {
             //divide by 2
             i >>= 1;
-            self.data[i] += val - old_val;
+            //Because data type is unsigned
+            self.data[i] = self.data[i] + val - old_val;
         }
     }
 
     //assumes sums are positive
     //returns smallest index such that sum(0..=index) >= target_sum
-    pub fn lower_bound(&self, target_sum: i64) -> usize
+    pub fn lower_bound(&self, target_sum: u64) -> usize
     {
         let mut range_width = 1 << (self.num_levels - 1);
         //exclusive upper bound
@@ -89,12 +90,12 @@ impl BinarySumTree
         range_to - 1
     }
 
-    pub fn sum(&self) -> i64
+    pub fn sum(&self) -> u64
     {
         self.data[1]
     }
 
-    pub fn sum_to(&self, to: usize) -> i64
+    pub fn sum_to(&self, to: usize) -> u64
     {
         //beginning of last row, leaves
         let start = 1 << (self.num_levels - 1);
@@ -162,19 +163,19 @@ mod test_binary_tree
         assert_eq!(14, bt.sum_to(7));
         assert_eq!(15, bt.sum_to(8));
 
-        bt.set(0, -8);
+        bt.set(0, 8);
 
         bt.debug_print();
 
-        assert_eq!(-8, bt.sum_to(0));
-        assert_eq!(-1, bt.sum_to(1));
-        assert_eq!(-1, bt.sum_to(2));
-        assert_eq!(3, bt.sum_to(3));
-        assert_eq!(3, bt.sum_to(4));
-        assert_eq!(6, bt.sum_to(5));
-        assert_eq!(6, bt.sum_to(6));
-        assert_eq!(6, bt.sum_to(7));
-        assert_eq!(7, bt.sum_to(8));
+        assert_eq!(8, bt.sum_to(0));
+        assert_eq!(15, bt.sum_to(1));
+        assert_eq!(15, bt.sum_to(2));
+        assert_eq!(19, bt.sum_to(3));
+        assert_eq!(19, bt.sum_to(4));
+        assert_eq!(22, bt.sum_to(5));
+        assert_eq!(22, bt.sum_to(6));
+        assert_eq!(22, bt.sum_to(7));
+        assert_eq!(23, bt.sum_to(8));
     }
 
     #[test]
@@ -183,7 +184,7 @@ mod test_binary_tree
         let mut rng: StdRng = SeedableRng::seed_from_u64(42);
 
         let num_elems_gen = Uniform::from(1..100usize);
-        let values_gen = Uniform::from(-100..100i64);
+        let values_gen = Uniform::from(0..100u64);
 
         for _ in 0..10 {
             let size = num_elems_gen.sample(&mut rng);
@@ -199,7 +200,7 @@ mod test_binary_tree
                 bt.set(pos, val);
 
                 for i in 0..size {
-                    assert_eq!(check.iter().take(i + 1).sum::<i64>(), bt.sum_to(i));
+                    assert_eq!(check.iter().take(i + 1).sum::<u64>(), bt.sum_to(i));
                 }
             }
         }
@@ -209,8 +210,8 @@ mod test_binary_tree
     fn test_small()
     {
         let mut bt = BinarySumTree::new(1);
-        bt.set(0, -3);
-        assert_eq!(bt.sum_to(0), -3);
+        bt.set(0, 3);
+        assert_eq!(bt.sum_to(0), 3);
 
         bt.set(0, 7);
         assert_eq!(bt.sum_to(0), 7);
@@ -220,11 +221,11 @@ mod test_binary_tree
     fn test_big()
     {
         let mut bt = BinarySumTree::new(1_000_000);
-        bt.set(0, -3);
-        assert_eq!(bt.sum_to(0), -3);
+        bt.set(0, 3);
+        assert_eq!(bt.sum_to(0), 3);
 
         bt.set(1_000_000 - 1, 7);
-        assert_eq!(bt.sum_to(1_000_000 - 1), 4);
+        assert_eq!(bt.sum_to(1_000_000 - 1), 10);
     }
 
     #[test]
@@ -234,12 +235,12 @@ mod test_binary_tree
         let mut bt = BinarySumTree::new(size);
 
         for i in 0..size {
-            bt.set(i, (2 * (i + 1)) as i64);
+            bt.set(i, (2 * (i + 1)) as u64);
         }
 
         for i in 0..size {
             //sum formula
-            let target_sum = ((i + 1) * (i + 2)) as i64;
+            let target_sum = ((i + 1) * (i + 2)) as u64;
             println!("sum of 2+4+...+ for index {} should be {}", i, target_sum);
             assert_eq!(bt.lower_bound(target_sum), i as usize);
         }
@@ -252,7 +253,7 @@ mod test_binary_tree
         let mut bt = BinarySumTree::new(size);
 
         for i in 0..size {
-            bt.set(i, (2 * (i + 1)) as i64);
+            bt.set(i, (2 * (i + 1)) as u64);
         }
 
         //2+4+6+8+10
diff --git a/codejam/src/y2017round2/a.rs b/codejam/src/y2017round2/a.rs
index e8c34af..22bfab4 100644
--- a/codejam/src/y2017round2/a.rs
+++ b/codejam/src/y2017round2/a.rs
@@ -1,4 +1,5 @@
 use super::super::util::input::*;
+use crate::util::input::InputReader;
 
 /*
 state machine
@@ -7,7 +8,7 @@ optimization
 */
 pub fn solve_all_cases()
 {
-    let mut reader = InputReader::new();
+    let mut reader : InputReader = Default::default();
     let t = reader.read_int();
 
     for case in 1..=t {
diff --git a/codejam/src/y2017round2/b.rs b/codejam/src/y2017round2/b.rs
index 1c6755a..efa2997 100644
--- a/codejam/src/y2017round2/b.rs
+++ b/codejam/src/y2017round2/b.rs
@@ -9,7 +9,7 @@ minimization / optimization
 
 pub fn solve_all_cases()
 {
-    let mut reader = InputReader::new();
+    let mut reader : InputReader = Default::default();
     let t = reader.read_int();
 
     for case in 1..=t {
diff --git a/codejam/src/y2017round4/e.rs b/codejam/src/y2017round4/e.rs
index d45dfd3..24e4c67 100644
--- a/codejam/src/y2017round4/e.rs
+++ b/codejam/src/y2017round4/e.rs
@@ -196,7 +196,7 @@ fn solve(stacks: &Vec<VecDeque<(u16, u16)>>) -> bool
 
 fn BFS(
     edges: &HashMap<u16, Vec<u16>>,
-    visited: &mut HashSet<u16>,
+    _visited: &mut HashSet<u16>,
     v: u16,
     targets: &HashSet<u16>,
 ) -> bool
diff --git a/codejam/src/y2017round4/f.rs b/codejam/src/y2017round4/f.rs
index e097f22..b3bf658 100644
--- a/codejam/src/y2017round4/f.rs
+++ b/codejam/src/y2017round4/f.rs
@@ -5,7 +5,7 @@ use bimap::BiMap;
 //use num_traits::*;
 use rand::distributions::{Distribution, Uniform};
 use rand::prelude::{SliceRandom, StdRng};
-use rand::{Rng, SeedableRng};
+//use rand::{Rng, SeedableRng};
 use std::cmp::{max, min};
 //use std::collections::{HashMap, HashSet, VecDeque};
 use std::i64;
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 8e005b5..5ab9911 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -65,8 +65,8 @@ pub fn run_y2008_round_1b()
 
 pub fn run_y2008_round_1c()
 {
-y2008round1c::a::solve_all_cases();
-       y2008round1c::b::solve_all_cases();
+    y2008round1c::a::solve_all_cases();
+    y2008round1c::b::solve_all_cases();
 }
 
 pub fn run_y2008_round2()
diff --git a/codejam_2008/src/y2008round1b/c.rs b/codejam_2008/src/y2008round1b/c.rs
index 1e99310..57ed7e9 100644
--- a/codejam_2008/src/y2008round1b/c.rs
+++ b/codejam_2008/src/y2008round1b/c.rs
@@ -1,8 +1,8 @@
 use codejam::util::codejam::run_cases;
 use itertools::Itertools;
 
-use std::io::Write;
 use codejam::util::binary_sum_tree::BinarySumTree;
+use std::io::Write;
 
 /*
 Binary Sum tree using an array
@@ -54,7 +54,7 @@ fn solve(k: usize, indices: &[usize]) -> Vec<usize>
     let mut sum_to_current_pos = bt.sum_to(cur_pos);
 
     for card_no in 1..=k {
-        let target_sum = 1 + (card_no as i64 + sum_to_current_pos - 1) % bt.sum();
+        let target_sum = 1 + (card_no as u64 + sum_to_current_pos - 1) % bt.sum();
         cur_pos = bt.lower_bound(target_sum);
         debug!("Target sum is {}.  Cur_pos {}", target_sum, cur_pos);
         assert_eq!(deck[cur_pos], 0);
diff --git a/codejam_2008/src/y2008round1c/C-large-practice.in b/codejam_2008/src/y2008round1c/C-large-practice.in
new file mode 100644
index 0000000..381d4fd
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/C-large-practice.in
@@ -0,0 +1,936 @@
+20
+500000 1 34044397 942475857 285290546
+233459890
+262143 27 778531071 478442808 548374783
+308073206
+83422893
+212000218
+478716954
+253195088
+177976935
+150684103
+238705282
+544118711
+266035281
+107502784
+368192145
+476184022
+262948728
+76122559
+216654622
+248475547
+25676357
+411398449
+118850100
+280155516
+284831197
+321535605
+153133880
+134913011
+267278025
+36352599
+262143 1 0 1 446980011
+0
+95964 90 599045317 521316857 727089494
+290089318
+312709453
+318873673
+206389249
+298028848
+45794809
+475695467
+496694758
+662152558
+528255614
+138050462
+391261785
+222223066
+425763213
+503959729
+722811667
+19005510
+239331005
+499008944
+338100050
+69765755
+113140862
+609893627
+271206651
+343145408
+644739489
+621314226
+215101232
+18572699
+655099060
+203891367
+308662017
+274503853
+522765040
+515051266
+572532702
+602344683
+297442073
+342137966
+571192582
+98608194
+480188428
+235364873
+354616094
+212646981
+46019942
+350338267
+231652491
+319135781
+156042552
+603537376
+422686371
+269183414
+520126343
+588362
+612328822
+437776338
+621902588
+134125394
+456349038
+583696988
+371801595
+71706395
+131111348
+201261976
+586757662
+703644050
+76517165
+190895075
+352477356
+681494581
+289503269
+139361124
+223554794
+644119363
+352008105
+269574736
+301152971
+583660596
+622495352
+457195523
+493893312
+318092229
+33074277
+286930162
+318680591
+679187933
+31401840
+247278519
+120008668
+209415 75 681018507 488493941 54816370
+35221126
+31301077
+25741497
+11472710
+13837473
+14068441
+37078898
+24665859
+40453086
+16158757
+5896484
+7590240
+51354068
+42027820
+30722718
+33613077
+17544696
+34095507
+29152294
+39519354
+3779894
+39382207
+41635262
+34263968
+2281152
+8185998
+7427527
+25503219
+3332609
+7427527
+31250125
+38553735
+38728604
+47346404
+40381227
+42920859
+51769627
+22643755
+3125130
+37406344
+29157295
+9021615
+35351366
+25694993
+41404217
+1612496
+49662853
+49303696
+26062785
+23998777
+34006680
+29842680
+8564615
+20825572
+9290278
+1200549
+29011570
+16717806
+17058551
+22698961
+24145333
+48308676
+6436326
+53228719
+31193493
+37172335
+41333208
+28146750
+4999721
+34813121
+1091506
+24511798
+43834736
+26797654
+50206791
+56990 24 171921134 124737550 128075335
+52938691
+95269194
+37069078
+100712551
+112631186
+11875657
+109491415
+112297490
+49684604
+81724473
+66428698
+28410232
+12634001
+50275787
+32289483
+94125522
+98889045
+69461819
+53065962
+107570370
+83770332
+14620118
+9360759
+126213310
+262145 42 145531645 885757306 980606547
+378455658
+814110217
+92168997
+71118287
+467083865
+775438487
+880685736
+623217802
+595151384
+245416213
+56255840
+928449257
+481966308
+116781280
+151291508
+112650517
+199565913
+449054739
+240771283
+788274512
+82119736
+220341932
+533884977
+4037547
+663725960
+55068056
+10343988
+828651059
+773948262
+804679980
+907347701
+171797373
+451913096
+813246144
+56645106
+918996961
+421807531
+751060288
+375337662
+36352368
+15869954
+431593502
+262145 21 517390101 629185474 254942425
+230249956
+182707522
+177726730
+221463314
+16736152
+154446216
+135047575
+3521732
+60310147
+79330078
+237567338
+5162288
+44025962
+187289455
+231267760
+17013746
+161170428
+52813100
+104842228
+12221209
+48280558
+262145 1 0 106857578 106857580
+106857579
+1 1 500919862 638803977 672251447
+520731691
+262144 8 344132383 951709009 722466051
+523911460
+207973982
+668055032
+261297330
+137925291
+158202281
+350899081
+654301879
+262144 44 461818864 146611969 133102166
+87310916
+48654929
+105742901
+33619206
+67577923
+31598751
+49318271
+70128239
+59274917
+81081458
+74578222
+26277692
+22973943
+85405865
+17196442
+122492519
+99609318
+25023807
+1482304
+99440498
+86873349
+18226296
+51718971
+106905063
+36003260
+68758783
+8272623
+15849307
+82268586
+76557460
+42694156
+18628344
+107363398
+130588066
+34398559
+23990163
+29084651
+83716830
+94118402
+70510576
+13847130
+17745467
+96788268
+18972081
+32120 38 597181980 953629629 571089127
+410173084
+59861848
+427637726
+124581572
+213470673
+289018355
+490843185
+256663175
+170119558
+132154487
+133693740
+423789105
+314348443
+284431223
+31067954
+275228980
+422543211
+409320777
+536066658
+136017385
+413296126
+86548672
+241219003
+273071525
+415531233
+393566859
+14149952
+7407819
+199712841
+14149951
+470150835
+175669658
+74011799
+326699435
+300251231
+287482472
+181501523
+356878149
+100 100 0 0 1000000
+36806
+36806
+37390
+37390
+74964
+74964
+76131
+76131
+105103
+105103
+129640
+129640
+151741
+151741
+211339
+211339
+237004
+237004
+263047
+263047
+293761
+293761
+301435
+301435
+323326
+323326
+338242
+338242
+347077
+347077
+349319
+349319
+368336
+368336
+376122
+376122
+378338
+378338
+412918
+412918
+413843
+413843
+434061
+434061
+443495
+443495
+445927
+445927
+461547
+461547
+501026
+501026
+510648
+510648
+518021
+518021
+527590
+527590
+535780
+535780
+536963
+536963
+690313
+690313
+693724
+693724
+724943
+724943
+752202
+752202
+773335
+773335
+775740
+775740
+806536
+806536
+819618
+819618
+820864
+820864
+821601
+821601
+855530
+855530
+872860
+872860
+901942
+901942
+924805
+924805
+935327
+935327
+936176
+936176
+956905
+956905
+970043
+970043
+976754
+976754
+500000 85 833479489 693361710 738690593
+241004332
+111840552
+532707497
+43824357
+125475216
+644348871
+738468855
+15118950
+162849998
+540459550
+26376625
+566653687
+66759354
+455119920
+305820340
+307224918
+241732259
+734933765
+464317248
+592352013
+268392939
+274382326
+383400897
+268982709
+81254232
+668622103
+421056956
+505940667
+214500166
+12263901
+7492504
+524092629
+192692584
+540200001
+567916987
+318167801
+445858279
+636283380
+401874882
+677296408
+506640468
+428251508
+505259502
+641987954
+213268966
+140977380
+279110410
+455001225
+137220552
+73325196
+308662645
+405613491
+347707523
+21961080
+4493738
+497549886
+20480721
+494138826
+264799961
+234980887
+574990858
+272292465
+88971055
+28992849
+73801873
+656888042
+415748781
+588248283
+623068960
+78933071
+526854098
+459606967
+507184579
+362011138
+362904328
+720453545
+502988519
+642014738
+505352308
+708797202
+715339935
+143912491
+444308232
+392944996
+165873571
+401585 98 580810038 45401427 869224038
+472428710
+368440569
+785110130
+277783694
+43990480
+260018475
+360268665
+488196920
+541879011
+475144554
+862843394
+340710005
+33890338
+131544648
+665584779
+238031432
+230052968
+830405139
+311283252
+515343513
+489720629
+420998116
+277815300
+259300568
+354801486
+421629574
+846275544
+657351916
+319547355
+568015933
+404819665
+791976066
+527420930
+780894223
+660724188
+162375839
+631877127
+611957282
+650572759
+304532100
+217877798
+235156544
+236206533
+251768136
+366701192
+32567274
+80763997
+596754160
+453936841
+392047249
+242873635
+74433433
+404009793
+111653363
+333734001
+349775708
+124247365
+770973973
+137903586
+443794720
+469765869
+133687679
+366546748
+127962761
+45357864
+618235365
+290338600
+268199419
+360968609
+531875788
+572731519
+169810835
+767032332
+808938053
+421578971
+724697952
+432469755
+502342968
+43192502
+17182559
+485354645
+286066137
+91615992
+20140401
+857907966
+16314421
+369916109
+112931293
+378252823
+98784123
+147690441
+848018692
+692660268
+105201618
+566945881
+328982560
+723436983
+448248910
+26220 69 214840371 558065001 491810264
+268782196
+201261975
+452910276
+224084948
+76284745
+151995087
+84752040
+265969062
+240003961
+43870572
+489523857
+190818664
+395878677
+65793933
+235440601
+286234613
+196479021
+491141728
+288317662
+77797624
+267684971
+318716790
+139947181
+274820049
+350118630
+130694667
+394828717
+401095883
+33086285
+394828716
+31969267
+301868481
+104280428
+484879543
+345710837
+180565173
+145064366
+250220285
+266291643
+385068327
+294090857
+264005236
+84076728
+198159270
+329799170
+139274737
+484393883
+346035599
+138606202
+100658689
+423833224
+226048581
+239132887
+71970141
+9058366
+97441254
+22422216
+403887083
+318294545
+367076173
+126662944
+350263812
+488702062
+50700780
+343333091
+162360043
+231265953
+308154865
+412580328
+500000 41 627487402 850757472 355347209
+195149906
+73848167
+251412231
+230473233
+222197486
+323778966
+288852813
+23031090
+214561397
+185224104
+346800408
+48013925
+263605687
+14607016
+284834790
+103415800
+197949405
+232486887
+23721250
+158845626
+285143584
+256969411
+89625025
+90825289
+159132850
+78786138
+236550095
+60525440
+203448798
+170508467
+352696762
+43251496
+228956240
+233361390
+258324335
+80406123
+201793148
+191829939
+88036819
+61007336
+6306441
+262143 76 169673650 358307488 976790025
+342459430
+495771109
+893272552
+18064856
+750713533
+496008424
+309353639
+570534382
+673735155
+828739054
+479326287
+210352273
+557920281
+374903771
+162718172
+637250360
+461547186
+932707736
+573332074
+31007543
+801088823
+633325495
+702062821
+957920426
+332301375
+606339783
+643314311
+501975026
+11067222
+472620688
+877857476
+159623055
+968391797
+600436405
+177687911
+548411707
+902541232
+293137952
+925042491
+405582764
+145086981
+233675155
+615935037
+509103665
+608578927
+584749611
+169564000
+93336088
+346763724
+742896074
+124343632
+171062523
+205527947
+632502855
+935079351
+537829322
+262052613
+601603637
+63014323
+79216238
+97434300
+746968202
+238839293
+871922499
+176710984
+222623606
+249640583
+102462191
+515761558
+3989452
+314141357
+466944942
+237664607
+930076394
+976048607
+846243534
+372914 73 652812536 169882417 338406909
+147136321
+303777868
+73993541
+337532301
+234534584
+223115906
+37996798
+275942672
+218969514
+131466164
+233109637
+124556735
+48678159
+228315238
+152966967
+173365446
+324410121
+297309737
+148797586
+94274210
+140417933
+48384212
+313897866
+162347120
+154642522
+169779288
+261505240
+130641241
+324440980
+129242318
+146298174
+133170392
+315977992
+103249521
+15253590
+95063473
+209323233
+53250389
+32599236
+311250554
+184716553
+148666680
+97400380
+116352519
+38575009
+133325153
+289717965
+24578221
+92227981
+321473358
+1810237
+115603720
+31450661
+198665909
+277950840
+69050989
+30038289
+84006977
+82650036
+16072360
+213249296
+228948210
+32200558
+190820379
+215155538
+47454149
+285883853
+307436577
+322069253
+201440895
+280280222
+51336703
+11700666
diff --git a/codejam_2008/src/y2008round1c/C-large-practice.out b/codejam_2008/src/y2008round1c/C-large-practice.out
new file mode 100644
index 0000000..e69de29
diff --git a/codejam_2008/src/y2008round1c/C-small-practice.in b/codejam_2008/src/y2008round1c/C-small-practice.in
new file mode 100644
index 0000000..11b5dc8
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/C-small-practice.in
@@ -0,0 +1,889 @@
+20
+1000 90 119183605 800390554 869262611
+37245610
+727819161
+786210092
+249057005
+53022121
+620417987
+308912558
+474169225
+293365291
+614383450
+183563293
+241581016
+711677169
+165041385
+457172424
+89386931
+189354668
+368449252
+476996647
+598101336
+612565645
+836802951
+180974856
+479547342
+408040952
+395385160
+844494841
+379740911
+48292067
+844494840
+842822800
+545841862
+294092964
+350811855
+794898867
+347115085
+101967231
+234548814
+412325884
+855636707
+439973838
+186930751
+227955113
+282388396
+351972136
+276169111
+832079512
+132368378
+644618363
+30855123
+730469715
+387921397
+867658074
+42181960
+458510313
+406436415
+28608694
+433742544
+377218900
+76900761
+16347
+811083274
+622742623
+294109312
+292632518
+139420453
+232265971
+854903935
+834273452
+644591856
+432319605
+404984679
+831522607
+660274718
+278414649
+314232133
+67181218
+241231551
+446600511
+302841155
+272086674
+307807615
+281804126
+270482137
+810293760
+740314440
+267960126
+838902454
+304794373
+236220600
+1000 33 965205667 724223372 169374881
+149880795
+141176592
+110231960
+21914970
+65228061
+60094288
+129111051
+154094256
+80916751
+16599472
+70551180
+63825024
+5277308
+26867338
+109836392
+45363145
+35772408
+111152952
+104976553
+15777395
+58254500
+167814198
+18708534
+90518765
+27073586
+82161051
+59802062
+145404848
+13899824
+43552775
+105854414
+163780619
+69744292
+511 78 869187222 480490764 414973471
+411933029
+65761477
+349539367
+380766166
+372369781
+226641639
+290713634
+370984670
+40055529
+84809113
+45184497
+211031986
+67228192
+402689911
+246458000
+242089240
+36046246
+1836279
+60600466
+379536075
+367943349
+288705299
+310239102
+47898545
+397515148
+238555507
+360281099
+21781957
+231456507
+42744392
+217154741
+228416065
+108505870
+151720638
+121592467
+65902180
+378362277
+412306101
+21913379
+3444335
+9525451
+409455054
+141860028
+76753643
+397171494
+315701735
+246226590
+18244270
+317538014
+306827056
+325164052
+197891599
+107942591
+147813390
+173173851
+90484269
+313752604
+118481479
+39649933
+130235641
+161225872
+256804675
+286035413
+269731742
+335909020
+407627881
+335633922
+226681533
+332344218
+284931008
+157509575
+269253376
+279412591
+299369603
+346007020
+188994322
+127481574
+104643846
+1000 17 651165168 999463789 141914966
+109788020
+23556100
+120693253
+109077781
+2480154
+97633857
+141096439
+39198570
+127238684
+127170638
+46355679
+99602049
+31160
+1448344
+87690226
+125076824
+54628000
+902 79 700521650 713080455 927846731
+409268985
+774510410
+825098871
+269882313
+235667782
+674695564
+533957295
+231036614
+191878087
+209591875
+467155519
+178188650
+669501779
+708370202
+340497539
+653095173
+256959682
+731474587
+241741979
+173082238
+665275375
+820985911
+814083218
+49701607
+915071560
+409621033
+315759618
+687746479
+194854757
+96122701
+438563909
+312333556
+870633111
+44025863
+290425683
+814510707
+426931241
+824382979
+117700590
+618809328
+742184668
+293065924
+796997978
+192049530
+73589395
+209648787
+845144704
+38758891
+649333188
+795096497
+211841129
+386761833
+688235677
+98077616
+144673254
+383670321
+215908463
+168642687
+143570069
+118973034
+264765388
+290343793
+139516405
+843608313
+42579470
+429942088
+438482103
+469510712
+326478336
+264392507
+160473309
+140816273
+557458431
+29624557
+41075618
+339257640
+875329889
+886220322
+378016531
+634 25 305026160 681316818 517704392
+114506795
+288583038
+26966670
+498177116
+320263368
+195609357
+349957000
+331674350
+352812692
+456072660
+471190755
+84346141
+498652130
+383428451
+5123852
+450458450
+7974263
+269516359
+503369707
+374704742
+125042266
+241204078
+415780360
+356737853
+414601442
+587 92 610773785 531223811 251091542
+23345104
+1862530
+99984894
+208424295
+104327414
+213005317
+119928299
+160550835
+82629363
+239036858
+41813700
+138995952
+69818134
+148857639
+7568940
+100602638
+61013742
+96713140
+16399105
+77086877
+57547683
+215243383
+132311547
+88963438
+77609832
+29734369
+82373809
+186200533
+166749159
+82373808
+127926760
+190094263
+196576568
+89160343
+147427017
+49812441
+51074118
+128604004
+71611964
+133703481
+116549320
+113425664
+133948121
+47616142
+123531991
+141517061
+148218780
+45794421
+99478889
+164617885
+235221528
+18275260
+241109956
+116441534
+219578929
+67628247
+146175903
+50861196
+115077468
+174173751
+245575234
+104252917
+113176472
+191060260
+193413260
+121852177
+240872701
+244487378
+250456181
+61393124
+239439547
+228254189
+36067476
+234636356
+24778789
+159599468
+125061875
+172997569
+205393889
+85789452
+198864143
+189523876
+104064713
+188882557
+54873868
+72552100
+117759492
+62298459
+235753526
+94085649
+236472210
+230237218
+511 11 849519555 340732733 841257835
+334598371
+57591353
+592907002
+196122082
+402917136
+26995629
+55123782
+400561755
+387799554
+319349158
+38143934
+1 1 4712031 479056446 733904406
+480159960
+511 1 0 1 672941413
+0
+513 1 0 688898794 688898796
+688898795
+149 91 573145152 870824527 481004729
+75075055
+208150980
+29626331
+216990020
+254414677
+454639588
+327201256
+324953468
+82712640
+366182083
+317173032
+402224719
+405380653
+283737592
+190305594
+259666905
+130905013
+479272055
+181990891
+218595239
+265259116
+296984091
+223307270
+77836644
+68879038
+277677638
+329891552
+456550001
+1018518
+144417362
+191182005
+76093574
+129103610
+220808336
+69618862
+160053556
+451983192
+173355386
+4002295
+311231101
+58532741
+321175328
+232451091
+240448662
+123908191
+199291953
+19110838
+31348473
+197559280
+458641726
+249943712
+239353664
+274621089
+249786251
+317190309
+120035395
+46459160
+166077132
+95580668
+47477679
+87029762
+63297941
+381111250
+216133373
+284106277
+450730112
+376186929
+31620009
+143080770
+380189224
+342851110
+459153508
+477899820
+351837469
+218597441
+378343280
+70124693
+14243548
+409691753
+44219241
+472885274
+436170733
+283572906
+43036902
+204952255
+119758486
+163072298
+27946684
+62370886
+258652966
+332964360
+513 13 785065825 765114905 916566486
+95353856
+883674091
+305137504
+13269152
+460356989
+825060280
+657861008
+892676595
+266174598
+572817129
+274730276
+230238572
+525394711
+512 36 549595770 202350236 71364788
+56274617
+31823730
+22214675
+2138847
+11297440
+37292871
+3069760
+4761595
+63193202
+53285073
+7826135
+50554206
+62736672
+51735995
+41957111
+53510406
+64323164
+42656399
+20011740
+7738375
+13235366
+25928931
+33612578
+14382198
+45763163
+50083593
+47661257
+24440629
+32692426
+42907184
+68002004
+17602255
+3366126
+12311884
+13201095
+8123559
+513 68 270476179 256334679 189362159
+44861932
+114119699
+12775622
+155825765
+184670879
+146039137
+150592453
+131589105
+91439240
+100957800
+92350993
+102655802
+150911111
+182505471
+140923024
+49414039
+86228930
+106980056
+81426217
+73392183
+126807562
+131833268
+27330173
+179836995
+162677162
+156074828
+25183164
+54429023
+86874395
+25183163
+6275173
+67236429
+74802963
+19050795
+33700035
+70111683
+100590034
+184292488
+137200889
+2667115
+31388231
+40189723
+40823019
+117799443
+33333036
+117246144
+102713583
+55062067
+34864042
+184139801
+128454250
+161671604
+126610910
+91284525
+87646541
+35426014
+57997194
+48329806
+89855037
+80371691
+73512969
+96130210
+147608120
+148315932
+50681107
+181308155
+153927716
+151271141
+740 10 111410106 764965093 676085069
+668516841
+70175581
+518256219
+505056510
+665876688
+193975982
+533598839
+615641075
+476795463
+209351239
+512 63 687946481 929689830 8989182
+7139111
+4177606
+5792168
+8717741
+3163992
+7442890
+3076908
+8923007
+5553143
+8732496
+5442847
+586117
+4279761
+7718313
+8981673
+6956026
+727768
+6118238
+2851743
+8077028
+4522184
+2879826
+276536
+5834659
+6614040
+1279051
+5227442
+3324357
+6013985
+1570705
+4836555
+4163914
+6679161
+1639541
+4823323
+853972
+1024099
+8831081
+787797
+6577243
+8574396
+7161494
+7163360
+4795825
+5890625
+8086701
+2762669
+6618393
+5215757
+6545262
+5706239
+748760
+1366756
+5982775
+7514269
+8911646
+8192676
+3752529
+3246822
+6148329
+6254084
+8083377
+1323061
+414 13 477374730 943547914 549578845
+190966889
+213936630
+62542532
+131964255
+123032824
+135658062
+384907847
+433813287
+430573864
+57345548
+301314756
+481123109
+168234636
+428 46 819705073 68230643 755036387
+438451387
+472151076
+355970177
+252370435
+261785751
+379483303
+572633804
+337688626
+372401826
+547269677
+96130846
+73438099
+661421955
+698181379
+572090230
+450479934
+228641241
+147805811
+738826594
+141119123
+56805046
+238788468
+28829394
+458675039
+417236833
+546233163
+398612491
+89458260
+222016546
+6165230
+50549244
+660467933
+595941819
+406519421
+275427495
+220316696
+148591851
+210650425
+558005322
+520993677
+2883715
+654136168
+712057290
+26894796
+597281160
+646736646
+100 100 0 0 1000000
+9150
+9150
+14027
+14027
+45909
+45909
+84040
+84040
+85672
+85672
+108520
+108520
+120135
+120135
+145736
+145736
+154356
+154356
+157762
+157762
+180205
+180205
+190810
+190810
+196517
+196517
+197344
+197344
+221332
+221332
+225200
+225200
+281919
+281919
+283461
+283461
+285830
+285830
+291387
+291387
+316560
+316560
+337457
+337457
+338674
+338674
+347293
+347293
+352665
+352665
+378037
+378037
+392064
+392064
+412003
+412003
+446888
+446888
+449258
+449258
+459659
+459659
+460718
+460718
+466464
+466464
+531827
+531827
+561284
+561284
+583243
+583243
+585334
+585334
+630144
+630144
+660039
+660039
+680073
+680073
+754748
+754748
+769112
+769112
+782678
+782678
+786603
+786603
+798659
+798659
+815682
+815682
+886575
+886575
+925403
+925403
+931139
+931139
+987944
+987944
diff --git a/codejam_2008/src/y2008round1c/C-small-practice.out b/codejam_2008/src/y2008round1c/C-small-practice.out
new file mode 100644
index 0000000..5467eed
--- /dev/null
+++ b/codejam_2008/src/y2008round1c/C-small-practice.out
@@ -0,0 +1,20 @@
+Case #1: 312792177708
+Case #2: 296423941899
+Case #3: 103387648657
+Case #4: 314166447773
+Case #5: 258882705344
+Case #6: 154847361031
+Case #7: 139484508556
+Case #8: 112250870468
+Case #9: 1
+Case #10: 266709194604
+Case #11: 513
+Case #12: 240536891
+Case #13: 101349437092
+Case #14: 104870682100
+Case #15: 97020392236
+Case #16: 200044378983
+Case #17: 113239695693
+Case #18: 53478388622
+Case #19: 71199934911
+Case #20: 17710104405
diff --git a/codejam_2008/src/y2008round1c/b.rs b/codejam_2008/src/y2008round1c/b.rs
index 7f47222..0338003 100644
--- a/codejam_2008/src/y2008round1c/b.rs
+++ b/codejam_2008/src/y2008round1c/b.rs
@@ -36,11 +36,10 @@ fn solve(s: &[char]) -> u64
       to x (mod 210) if we only consider the first i
       characters of the string. (*)
       */
-    let mut dp: Vec<Vec<u64>> = vec![vec![0; MOD]; s.len()+1];
+    let mut dp: Vec<Vec<u64>> = vec![vec![0; MOD]; s.len() + 1];
 
     dp[0][0] = 1;
     for i in 0..s.len() {
-
         //: Between each two adjacent digits you may choose put a plus sign, a minus sign, or nothing.
         let start_sgn = if i == 0 { 1 } else { -1 };
         //insert a + or a -
diff --git a/codejam_2008/src/y2008round1c/c.rs b/codejam_2008/src/y2008round1c/c.rs
index fd122b1..0b3b153 100644
--- a/codejam_2008/src/y2008round1c/c.rs
+++ b/codejam_2008/src/y2008round1c/c.rs
@@ -1,8 +1,7 @@
+use codejam::util::binary_sum_tree::BinarySumTree;
 use codejam::util::codejam::run_cases;
-use itertools::Itertools;
-use std::cmp::min;
 use std::io::Write;
-use codejam::util::binary_sum_tree::BinarySumTree;
+use superslice::Ext;
 
 /*
 Binary Interval tree using an array
@@ -10,16 +9,44 @@ Binary Interval tree using an array
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice", "C-large-practice"],
+        &["C-small-practice",
+        //    "C-large-practice"
+        ],
         "y2008round1c",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let k: usize = reader.read_int();
+                /*
+                The first line of each case contains n, m, X, Y and Z
+                each separated by a space. n will be the length of the sequence
+                of speed limits. m will be the length of the generating array A.
+                The next m lines will contain the m elements of A,
+                one integer per line (from A[0] to A[m-1]).
+                */
+                let num_line: Vec<u64> = reader.read_num_line();
+                assert_eq!(5, num_line.len());
+                let m = num_line[1] as usize;
+
+                /*
+                              for i = 0 to n-1
+                print A[i mod m]
+                A[i mod m] = (X * A[i mod m] + Y * (i + 1)) mod Z
+                */
 
-                let nums = reader.read_num_line();
-                assert_eq!(nums[0], nums.len() - 1);
+                let mut a : Vec<u64> = (0..m).map(|_| reader.read_int()).collect();
+                let n = num_line[0] as usize;
+                let x = num_line[2];
+                let y = num_line[3];
+                let z = num_line[4];
+
+                let mut speed_limits = (0..n)
+                    .map(|i| {
+                        let next = a[i % m];
+                        a[i % m] = (x * a[i % m] + y * (i + 1) as u64) % z;
+                        next
+                    })
+                    .collect();
 
                 if case_no != 3 {
                     // continue;
@@ -31,7 +58,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(k, &nums[1..]).iter().join(" ")
+                    solve( &mut speed_limits)
                 )
                 .unwrap();
             }
@@ -39,33 +66,32 @@ pub fn solve_all_cases()
     );
 }
 
-
-fn solve(k: usize, indices: &[usize]) -> Vec<usize>
+const MOD: u64 = 1_000_000_007;
+fn solve(speed_limits: &mut Vec<u64>) -> u64
 {
-    let mut bt = BinarySumTree::new(k);
+    debug!("Speed limits: {:?}", speed_limits);
+    let mut sorted_speed_limits = speed_limits.clone();
+    sorted_speed_limits.sort();
 
-    for i in 0..k {
-        bt.set(i, 1);
+    //normalize everything
+    for si in speed_limits.iter_mut() {
+        *si = sorted_speed_limits.lower_bound(si) as u64;
     }
 
-    println!("After set");
-    let mut deck = vec![0; k];
+    //offset by 1 so bt[1] == # of sequences ending with 0
+    let mut bt = BinarySumTree::new(speed_limits.len()+1);
 
-    let mut cur_pos = deck.len() - 1;
-    let mut sum_to_current_pos = bt.sum_to(cur_pos);
+    for speed_limit in speed_limits.iter() {
+        let sl = *speed_limit as usize;
+        //We have a new subsequence for every existing sequence that
+        // ends in a value < speedLimit
+        let num_seq = (1 + bt.sum_to(sl)) % MOD;
 
-    for card_no in 1..=k {
-        let target_sum = 1 + (card_no as i64 + sum_to_current_pos - 1) % bt.sum();
-        cur_pos = bt.lower_bound(target_sum);
-        debug!("Target sum is {}.  Cur_pos {}", target_sum, cur_pos);
-        assert_eq!(deck[cur_pos], 0);
-        deck[cur_pos] = card_no;
-        bt.set(cur_pos, 0);
-        sum_to_current_pos = target_sum - 1;
+        //Debug.WriteLine("Adding " + newSubsequences);
+        //let old_val = bt.get(sl);
 
-        //debug!("Deck after {} is {:?}", card_no, deck);
-        //            bt.debug_print();
+        bt.set(sl, num_seq);
     }
 
-    indices.iter().map(|i| deck[i - 1]).collect()
+    bt.sum()
 }

From 9ca241f94935d2c619c59eb1710d76ee1aca39cf Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 15:59:54 -0300
Subject: [PATCH 052/122] c

---
 .../src/y2008round1c/C-large-practice.out     | 20 +++++++++++
 .../src/y2008round1c/C-small-practice.out     | 34 +++++++++----------
 codejam_2008/src/y2008round1c/c.rs            |  4 +--
 3 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/codejam_2008/src/y2008round1c/C-large-practice.out b/codejam_2008/src/y2008round1c/C-large-practice.out
index e69de29..3489303 100644
--- a/codejam_2008/src/y2008round1c/C-large-practice.out
+++ b/codejam_2008/src/y2008round1c/C-large-practice.out
@@ -0,0 +1,20 @@
+Case #1: 492424457
+Case #2: 988995782
+Case #3: 192947006
+Case #4: 931252358
+Case #5: 408083335
+Case #6: 305436816
+Case #7: 549899454
+Case #8: 791315888
+Case #9: 262145
+Case #10: 1
+Case #11: 148641587
+Case #12: 930493972
+Case #13: 234546960
+Case #14: 710104286
+Case #15: 304933180
+Case #16: 202227597
+Case #17: 928943237
+Case #18: 678364922
+Case #19: 476523981
+Case #20: 543625919
diff --git a/codejam_2008/src/y2008round1c/C-small-practice.out b/codejam_2008/src/y2008round1c/C-small-practice.out
index 5467eed..0ebcdd8 100644
--- a/codejam_2008/src/y2008round1c/C-small-practice.out
+++ b/codejam_2008/src/y2008round1c/C-small-practice.out
@@ -1,20 +1,20 @@
-Case #1: 312792177708
-Case #2: 296423941899
-Case #3: 103387648657
-Case #4: 314166447773
-Case #5: 258882705344
-Case #6: 154847361031
-Case #7: 139484508556
-Case #8: 112250870468
+Case #1: 792175524
+Case #2: 423939827
+Case #3: 387647936
+Case #4: 166445575
+Case #5: 882703538
+Case #6: 847359953
+Case #7: 484507583
+Case #8: 250869684
 Case #9: 1
-Case #10: 266709194604
+Case #10: 709192742
 Case #11: 513
 Case #12: 240536891
-Case #13: 101349437092
-Case #14: 104870682100
-Case #15: 97020392236
-Case #16: 200044378983
-Case #17: 113239695693
-Case #18: 53478388622
-Case #19: 71199934911
-Case #20: 17710104405
+Case #13: 349436385
+Case #14: 870681372
+Case #15: 20391557
+Case #16: 44377583
+Case #17: 239694902
+Case #18: 478388251
+Case #19: 199934414
+Case #20: 710104286
diff --git a/codejam_2008/src/y2008round1c/c.rs b/codejam_2008/src/y2008round1c/c.rs
index 0b3b153..ed80ab5 100644
--- a/codejam_2008/src/y2008round1c/c.rs
+++ b/codejam_2008/src/y2008round1c/c.rs
@@ -10,7 +10,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["C-small-practice",
-        //    "C-large-practice"
+            "C-large-practice"
         ],
         "y2008round1c",
         |reader, buffer| {
@@ -93,5 +93,5 @@ fn solve(speed_limits: &mut Vec<u64>) -> u64
         bt.set(sl, num_seq);
     }
 
-    bt.sum()
+    bt.sum() % MOD
 }

From 6f1741503f466e3fcf495e677919922551897e46 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 17:05:17 -0300
Subject: [PATCH 053/122] a

---
 codejam_2008/src/main.rs                      |     8 +-
 codejam_2008/src/y2008round1c/c.rs            |     5 +-
 .../src/y2008round2/A-large-practice.in       | 30059 ++++++++++++++++
 .../src/y2008round2/A-small-practice.in       |   369 +
 codejam_2008/src/y2008round2/a.rs             |    64 +
 5 files changed, 30499 insertions(+), 6 deletions(-)
 create mode 100644 codejam_2008/src/y2008round2/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008round2/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008round2/a.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 5ab9911..7e450df 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -6,6 +6,7 @@ mod y2008qual;
 mod y2008round1a;
 mod y2008round1b;
 mod y2008round1c;
+mod y2008round2;
 
 extern crate codejam;
 
@@ -67,18 +68,21 @@ pub fn run_y2008_round_1c()
 {
     y2008round1c::a::solve_all_cases();
     y2008round1c::b::solve_all_cases();
+    y2008round1c::c::solve_all_cases();
 }
 
 pub fn run_y2008_round2()
 {
-
+    y2008round2::a::solve_all_cases();
+    y2008round2::b::solve_all_cases();
+    y2008round2::c::solve_all_cases();
 }
 
 fn main()
 {
     init_log();
 
-    y2008round1c::c::solve_all_cases();
+    y2008round2::a::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round1c/c.rs b/codejam_2008/src/y2008round1c/c.rs
index ed80ab5..4f12f74 100644
--- a/codejam_2008/src/y2008round1c/c.rs
+++ b/codejam_2008/src/y2008round1c/c.rs
@@ -4,7 +4,7 @@ use std::io::Write;
 use superslice::Ext;
 
 /*
-Binary Interval tree using an array
+Binary Sum tree using an array
 */
 pub fn solve_all_cases()
 {
@@ -87,9 +87,6 @@ fn solve(speed_limits: &mut Vec<u64>) -> u64
         // ends in a value < speedLimit
         let num_seq = (1 + bt.sum_to(sl)) % MOD;
 
-        //Debug.WriteLine("Adding " + newSubsequences);
-        //let old_val = bt.get(sl);
-
         bt.set(sl, num_seq);
     }
 
diff --git a/codejam_2008/src/y2008round2/A-large-practice.in b/codejam_2008/src/y2008round2/A-large-practice.in
new file mode 100644
index 0000000..3c750ea
--- /dev/null
+++ b/codejam_2008/src/y2008round2/A-large-practice.in
@@ -0,0 +1,30059 @@
+20
+159 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+1 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+921 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+0 1
+1 1
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 0
+0 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+0 1
+1 1
+0 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+0 1
+0 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+0 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+0 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+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 0
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+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
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+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 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+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
+0 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+0 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+0 0
+0 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 0
+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 0
+1 1
+1 1
+1 1
+1 0
+1 1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+9999 1
+1 1
+0 1
+0 1
+1 0
+1 1
+0 0
+1 1
+1 0
+1 0
+0 1
+0 0
+0 0
+1 1
+0 1
+0 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 1
+0 0
+0 0
+0 0
+1 1
+1 0
+1 1
+0 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+0 0
+0 0
+1 0
+1 1
+1 0
+0 0
+1 0
+0 0
+1 1
+1 1
+1 1
+0 1
+0 0
+1 1
+1 0
+1 1
+1 0
+0 0
+0 1
+0 0
+1 1
+0 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+0 0
+0 1
+1 0
+0 1
+0 0
+1 0
+1 0
+1 0
+0 0
+1 0
+0 1
+0 0
+1 1
+1 0
+1 0
+0 0
+1 0
+0 1
+1 0
+1 0
+1 0
+0 0
+0 1
+0 1
+0 0
+1 0
+1 1
+0 0
+1 1
+1 0
+0 1
+0 1
+0 0
+1 0
+1 0
+1 0
+0 1
+0 1
+0 0
+1 0
+0 1
+1 0
+1 1
+1 1
+0 1
+0 1
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 1
+0 0
+0 1
+0 1
+1 1
+1 0
+1 1
+1 1
+0 1
+0 1
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+0 1
+1 1
+1 0
+1 0
+1 1
+0 1
+0 0
+0 0
+0 0
+1 0
+1 0
+1 0
+0 0
+1 0
+0 0
+1 0
+1 0
+1 1
+0 1
+1 0
+1 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+1 0
+1 0
+0 1
+0 0
+0 1
+1 0
+0 0
+0 0
+0 0
+1 0
+0 1
+0 0
+0 0
+1 0
+0 0
+1 0
+1 1
+0 0
+0 1
+0 0
+1 1
+0 0
+0 1
+1 0
+1 0
+0 0
+1 0
+1 1
+0 1
+0 0
+0 1
+1 1
+0 0
+0 1
+1 1
+1 0
+0 0
+0 0
+0 1
+1 0
+1 0
+0 0
+0 0
+1 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+0 1
+1 1
+0 0
+1 1
+1 1
+0 1
+1 0
+0 1
+1 0
+1 1
+0 1
+0 0
+1 0
+1 1
+1 0
+1 0
+1 0
+0 1
+0 0
+1 0
+0 0
+1 1
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+0 1
+1 1
+0 1
+0 0
+1 1
+1 0
+1 0
+0 1
+1 0
+0 0
+0 1
+0 1
+1 1
+0 1
+1 1
+1 0
+1 1
+0 1
+1 0
+0 1
+1 0
+0 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+1 0
+1 0
+1 0
+1 1
+0 0
+1 0
+1 1
+1 1
+1 0
+1 0
+0 0
+0 0
+0 0
+0 1
+0 0
+1 0
+0 1
+1 1
+0 1
+1 1
+0 1
+0 1
+1 0
+1 1
+0 1
+0 0
+1 0
+0 1
+1 0
+0 0
+1 0
+0 1
+0 1
+1 0
+0 1
+1 0
+1 1
+1 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+0 0
+0 0
+1 0
+0 1
+0 1
+0 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+0 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+0 0
+1 0
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+1 0
+1 0
+0 1
+0 0
+0 1
+1 1
+0 0
+0 1
+1 1
+0 0
+0 0
+0 1
+1 0
+0 0
+1 0
+0 0
+1 1
+1 1
+0 1
+1 0
+0 1
+1 0
+0 1
+0 0
+0 1
+1 1
+1 0
+1 1
+0 0
+0 0
+0 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+1 0
+1 0
+0 0
+0 1
+1 1
+1 0
+1 0
+0 1
+0 1
+0 0
+0 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+0 1
+0 1
+0 0
+0 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+0 1
+0 1
+1 0
+1 0
+1 0
+1 1
+0 1
+1 0
+0 0
+1 1
+0 0
+1 0
+0 0
+0 1
+1 0
+1 0
+1 1
+0 1
+1 0
+1 0
+0 0
+0 0
+0 1
+0 1
+1 0
+1 1
+1 0
+0 0
+0 1
+0 1
+0 1
+1 0
+0 1
+0 0
+0 1
+0 1
+1 1
+1 1
+0 0
+1 0
+0 1
+0 0
+1 0
+1 0
+0 1
+1 1
+1 0
+1 0
+0 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+0 1
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+0 1
+0 0
+1 0
+1 1
+0 0
+0 1
+0 0
+1 1
+0 0
+1 1
+0 1
+1 0
+1 1
+1 0
+1 1
+0 0
+0 0
+0 1
+1 0
+1 0
+1 1
+1 0
+0 0
+1 1
+0 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 0
+0 1
+1 1
+0 1
+1 1
+0 1
+1 1
+0 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+0 1
+1 1
+1 1
+1 0
+0 1
+0 1
+0 0
+1 1
+1 0
+1 0
+0 0
+1 0
+1 1
+0 0
+1 1
+1 1
+1 0
+0 1
+0 1
+0 0
+1 1
+1 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+0 0
+0 0
+0 1
+1 0
+1 0
+0 1
+1 0
+0 0
+0 0
+1 1
+0 0
+0 0
+1 0
+0 1
+1 0
+0 0
+0 1
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 1
+0 1
+0 0
+1 1
+0 1
+1 0
+1 1
+1 0
+1 0
+0 1
+0 1
+0 1
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+1 1
+1 0
+1 0
+1 0
+0 0
+0 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 1
+1 0
+1 1
+0 0
+1 0
+1 1
+1 1
+0 1
+1 1
+0 1
+0 0
+1 1
+0 0
+1 0
+1 1
+0 1
+0 0
+1 0
+1 1
+1 0
+0 0
+1 1
+1 1
+1 0
+0 0
+1 0
+1 0
+0 1
+0 1
+1 0
+0 0
+1 1
+1 0
+1 0
+0 0
+1 0
+1 1
+0 0
+1 1
+1 0
+1 1
+1 1
+1 1
+0 0
+1 1
+0 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 0
+1 1
+1 1
+0 1
+1 0
+1 0
+0 1
+1 0
+0 0
+1 1
+1 1
+1 0
+0 0
+1 1
+1 0
+0 1
+1 0
+0 0
+0 0
+0 0
+0 1
+0 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+1 1
+0 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+0 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 1
+1 0
+1 1
+1 0
+1 1
+1 0
+0 1
+1 1
+1 0
+0 0
+1 0
+1 0
+0 1
+1 1
+0 1
+0 0
+1 0
+0 0
+0 0
+1 1
+0 0
+1 0
+1 0
+1 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 0
+1 1
+1 0
+0 0
+1 0
+0 0
+1 1
+0 1
+0 0
+1 1
+1 0
+1 0
+0 0
+0 1
+0 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+0 1
+1 1
+1 1
+0 0
+0 0
+0 0
+0 1
+1 0
+0 0
+1 0
+1 1
+1 1
+0 1
+0 1
+0 0
+1 1
+1 0
+0 0
+1 1
+0 0
+1 0
+1 1
+0 1
+0 0
+1 0
+0 1
+1 1
+1 1
+0 1
+1 1
+0 1
+1 0
+1 1
+1 1
+0 1
+1 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+0 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+0 1
+1 0
+0 0
+0 0
+1 1
+0 1
+1 0
+0 1
+0 0
+1 0
+1 0
+0 0
+0 1
+1 1
+0 0
+0 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+0 1
+0 0
+1 1
+1 0
+1 0
+1 1
+0 0
+1 1
+0 1
+1 0
+1 0
+0 1
+1 1
+0 1
+1 0
+0 0
+1 0
+0 0
+1 1
+0 0
+1 0
+1 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+1 0
+0 1
+0 0
+1 1
+0 0
+0 0
+1 0
+0 1
+0 1
+0 0
+0 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+0 1
+0 0
+0 0
+1 0
+1 0
+1 1
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+0 0
+1 1
+1 0
+0 1
+1 1
+1 1
+1 0
+1 1
+0 0
+1 1
+0 0
+0 1
+1 0
+1 1
+1 0
+1 1
+0 1
+1 0
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+0 1
+0 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 1
+0 1
+0 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+0 0
+0 1
+1 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+1 1
+0 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+0 0
+1 1
+1 1
+1 1
+1 0
+0 0
+0 1
+1 0
+0 1
+1 1
+1 0
+1 0
+1 1
+0 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+0 1
+1 0
+0 1
+1 0
+1 1
+0 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+0 0
+1 0
+1 1
+0 1
+1 1
+0 0
+1 0
+0 0
+1 0
+1 0
+0 0
+0 0
+1 1
+1 0
+1 0
+0 0
+0 0
+0 0
+0 0
+1 1
+1 0
+1 1
+1 0
+0 1
+0 0
+0 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+0 1
+1 0
+1 1
+1 0
+1 1
+0 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+0 1
+0 0
+1 0
+0 1
+0 0
+1 1
+1 0
+1 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+0 1
+0 1
+0 1
+1 1
+1 0
+1 0
+0 0
+1 1
+1 1
+1 1
+1 0
+0 0
+0 1
+0 0
+1 1
+0 1
+0 1
+0 0
+1 0
+0 1
+1 0
+0 0
+1 1
+0 0
+0 0
+1 1
+1 1
+1 1
+1 0
+0 1
+0 1
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 1
+1 1
+1 1
+1 0
+0 0
+1 1
+1 1
+1 0
+0 1
+1 1
+0 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 1
+0 0
+0 1
+0 0
+0 1
+0 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+0 1
+1 0
+1 0
+1 0
+1 1
+1 1
+0 1
+0 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+0 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 1
+1 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 0
+1 1
+0 0
+0 1
+0 1
+1 0
+0 1
+1 0
+1 0
+1 0
+1 1
+1 1
+0 1
+0 1
+1 1
+0 0
+0 1
+1 1
+1 1
+0 0
+0 0
+1 0
+0 0
+0 0
+1 0
+1 0
+0 0
+1 0
+0 1
+1 1
+1 1
+1 1
+0 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+0 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+0 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+0 0
+0 1
+1 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 0
+1 0
+0 0
+0 1
+0 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+0 0
+0 0
+1 1
+0 0
+0 1
+1 1
+1 0
+1 0
+1 0
+0 0
+1 0
+1 1
+0 0
+1 0
+1 1
+1 0
+1 0
+1 0
+0 1
+0 0
+0 0
+0 1
+1 1
+0 0
+0 0
+1 0
+0 0
+0 1
+1 0
+0 0
+0 1
+0 0
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+1 1
+1 1
+0 1
+1 1
+1 0
+1 0
+0 1
+1 1
+0 1
+1 0
+0 1
+1 1
+1 0
+1 0
+0 1
+1 0
+0 1
+1 0
+0 0
+1 1
+0 0
+0 1
+0 0
+0 0
+1 1
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+0 0
+1 1
+0 0
+1 0
+1 1
+1 0
+1 1
+1 1
+0 1
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 1
+1 1
+0 1
+1 1
+0 0
+0 0
+0 1
+0 1
+1 0
+0 0
+1 0
+1 1
+0 1
+1 1
+0 0
+1 1
+1 0
+1 1
+0 0
+0 0
+0 0
+0 0
+1 0
+1 1
+0 1
+1 0
+1 0
+0 1
+1 0
+1 0
+0 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+0 1
+1 0
+0 1
+0 0
+0 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+0 1
+0 0
+0 1
+0 0
+0 1
+1 1
+1 0
+0 0
+1 0
+1 0
+0 0
+1 1
+0 0
+1 1
+1 1
+0 1
+0 1
+0 0
+1 0
+1 1
+1 1
+0 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+0 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+0 1
+0 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 1
+1 0
+1 1
+0 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+0 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+0 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+0 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+0 0
+1 0
+1 1
+1 0
+0 1
+1 0
+1 0
+0 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+0 0
+1 1
+1 0
+1 1
+1 1
+1 0
+0 1
+0 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+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 0
+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 0
+1 1
+0 1
+1 1
+1 1
+1 0
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+0 0
+1 1
+0 1
+0 0
+1 1
+1 1
+1 0
+0 0
+0 1
+1 1
+1 0
+0 1
+1 0
+0 1
+0 0
+1 1
+0 1
+1 0
+1 0
+0 0
+1 1
+0 1
+1 0
+1 0
+1 1
+0 0
+1 0
+0 0
+1 1
+1 0
+0 0
+1 1
+0 1
+1 1
+1 0
+1 1
+0 1
+0 0
+1 0
+1 1
+0 0
+1 0
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+0 1
+1 0
+0 1
+1 0
+1 0
+1 1
+1 1
+0 1
+1 0
+1 0
+0 0
+0 1
+1 0
+1 1
+0 0
+0 0
+1 0
+0 0
+0 1
+1 1
+0 1
+0 1
+0 0
+1 0
+0 0
+0 1
+1 0
+1 0
+0 1
+1 1
+1 0
+0 0
+1 0
+0 1
+0 1
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+0 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+0 1
+1 0
+0 0
+1 0
+1 1
+0 0
+0 1
+1 0
+0 1
+0 0
+0 1
+0 0
+1 0
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 1
+0 0
+1 1
+1 0
+1 0
+0 1
+1 1
+0 1
+0 0
+1 1
+1 1
+1 0
+1 0
+1 1
+0 0
+1 0
+1 0
+0 1
+0 0
+0 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+0 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+0 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
+0 1
+1 1
+1 1
+1 1
+1 0
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 0
+0 1
+0 1
+0 0
+1 0
+1 0
+0 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+1 0
+1 1
+0 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+0 0
+0 0
+1 0
+1 1
+0 0
+1 1
+0 0
+1 0
+0 1
+1 1
+0 1
+0 1
+1 1
+1 1
+0 1
+1 1
+0 1
+1 0
+0 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 0
+0 0
+1 1
+0 0
+1 1
+1 1
+1 1
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+0 0
+0 1
+0 1
+1 1
+1 0
+0 0
+1 0
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+0 0
+0 0
+1 1
+0 1
+0 1
+1 1
+1 1
+1 0
+0 0
+1 1
+1 1
+1 0
+1 1
+0 0
+1 1
+1 1
+0 1
+0 0
+0 1
+0 1
+1 1
+1 1
+1 1
+0 1
+0 1
+1 0
+0 0
+0 0
+0 0
+0 1
+1 0
+1 0
+1 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 0
+0 0
+1 1
+1 1
+1 1
+0 0
+0 0
+1 0
+0 1
+1 1
+1 1
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+0 1
+1 0
+0 1
+1 1
+0 0
+0 1
+0 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+1 1
+1 1
+0 0
+0 1
+1 1
+0 0
+0 0
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+0 0
+0 1
+1 0
+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 0
+1 0
+1 1
+1 1
+1 1
+1 0
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+0 1
+1 1
+1 0
+0 1
+0 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+0 0
+1 0
+0 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+0 1
+1 1
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+0 0
+0 1
+0 0
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 1
+0 1
+1 0
+0 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+0 0
+1 0
+1 0
+1 1
+0 1
+1 0
+0 1
+0 0
+1 1
+1 0
+0 0
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+0 1
+0 1
+1 0
+0 0
+1 0
+0 1
+0 0
+1 1
+0 1
+1 0
+0 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+0 1
+0 0
+0 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+0 1
+1 1
+0 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+1 0
+0 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+0 0
+1 1
+1 1
+0 1
+0 0
+1 0
+1 1
+1 1
+1 1
+0 0
+0 1
+1 1
+1 1
+1 1
+0 1
+1 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+0 0
+0 1
+1 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+1 1
+0 1
+1 1
+1 0
+0 1
+1 1
+0 0
+0 0
+0 1
+1 1
+0 0
+1 0
+0 1
+0 1
+0 1
+1 1
+1 1
+1 1
+0 1
+0 0
+1 1
+0 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+0 0
+1 1
+0 0
+0 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 1
+0 0
+1 0
+1 1
+1 0
+1 1
+1 0
+0 0
+1 1
+0 0
+1 0
+1 1
+1 1
+0 1
+1 0
+1 0
+0 1
+1 0
+0 1
+1 1
+1 1
+0 1
+1 0
+1 1
+0 1
+1 1
+1 0
+0 0
+0 1
+0 0
+0 0
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+1 1
+1 1
+1 1
+0 1
+1 0
+0 1
+0 0
+1 0
+1 1
+0 0
+1 0
+0 1
+1 1
+1 1
+0 1
+1 1
+0 0
+1 1
+1 0
+0 0
+0 0
+1 1
+0 1
+1 1
+1 0
+1 1
+1 1
+0 0
+1 0
+1 1
+0 0
+1 1
+0 0
+1 1
+1 0
+0 1
+1 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 1
+1 1
+1 0
+1 0
+0 1
+0 0
+0 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+0 0
+0 1
+0 1
+1 0
+0 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+0 1
+1 1
+0 0
+1 1
+0 0
+0 0
+0 0
+0 1
+1 1
+1 1
+0 0
+0 1
+1 0
+1 0
+0 1
+1 1
+0 1
+1 0
+0 1
+0 0
+0 0
+0 0
+0 1
+1 0
+1 0
+0 0
+1 1
+1 0
+0 1
+1 1
+1 1
+0 1
+0 0
+0 1
+1 0
+1 1
+1 0
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+1 0
+0 1
+1 1
+0 1
+1 1
+1 1
+1 0
+1 1
+0 0
+1 0
+0 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+1 0
+1 0
+0 1
+0 0
+0 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+0 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
+0 0
+1 1
+1 0
+1 1
+0 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+0 1
+1 0
+0 0
+1 0
+0 1
+1 0
+0 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+0 1
+1 1
+1 1
+0 0
+1 1
+0 0
+1 0
+1 1
+0 1
+1 0
+0 1
+1 0
+1 0
+0 1
+0 0
+0 1
+1 0
+0 1
+1 1
+1 1
+0 0
+1 1
+0 0
+0 0
+1 0
+0 0
+1 0
+1 0
+0 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 0
+0 0
+0 1
+0 0
+1 0
+0 1
+1 1
+1 1
+0 0
+0 1
+1 0
+0 1
+1 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+0 1
+1 1
+0 0
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+1 1
+1 1
+0 0
+0 0
+0 0
+1 0
+1 0
+0 1
+0 0
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+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
+0 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+0 0
+1 1
+0 0
+1 1
+1 0
+0 0
+1 1
+1 0
+0 0
+1 1
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+0 0
+0 0
+0 0
+0 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 0
+1 1
+1 0
+1 1
+0 0
+1 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+0 0
+0 1
+1 0
+0 1
+1 1
+0 1
+1 1
+1 0
+1 0
+0 0
+0 0
+1 1
+1 1
+0 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+0 1
+0 0
+1 1
+0 0
+1 1
+0 1
+0 0
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+0 0
+0 0
+0 1
+0 0
+1 1
+0 0
+1 1
+0 1
+1 0
+0 0
+0 0
+1 0
+1 1
+1 0
+0 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+0 0
+0 0
+0 1
+1 1
+1 1
+1 0
+0 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 0
+1 1
+1 1
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 0
+0 0
+1 1
+0 0
+1 1
+1 1
+0 1
+1 1
+1 0
+1 0
+0 0
+0 1
+0 1
+0 0
+1 0
+1 0
+0 0
+0 1
+0 1
+1 1
+0 0
+1 1
+1 1
+1 0
+1 1
+0 0
+1 1
+0 1
+1 0
+1 0
+0 0
+0 0
+0 0
+1 0
+1 0
+0 1
+0 0
+1 0
+1 1
+0 0
+1 1
+1 0
+1 0
+1 1
+0 1
+0 1
+1 0
+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 0
+0 0
+1 0
+1 1
+0 1
+1 1
+0 1
+1 1
+0 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+0 1
+1 1
+1 1
+0 0
+0 0
+1 1
+1 1
+1 1
+1 1
+0 1
+1 0
+1 1
+0 1
+1 0
+1 0
+0 0
+1 1
+1 0
+1 1
+1 1
+0 1
+1 1
+0 1
+1 1
+0 1
+1 1
+1 1
+1 0
+1 1
+1 0
+0 1
+0 0
+1 0
+0 1
+0 0
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 0
+1 0
+1 1
+0 1
+1 0
+1 0
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+0 0
+1 1
+1 1
+0 0
+1 1
+0 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+0 0
+1 0
+1 1
+0 1
+0 0
+1 0
+1 1
+1 1
+0 1
+1 1
+0 1
+0 1
+1 1
+0 1
+0 0
+0 0
+1 1
+0 1
+0 1
+1 1
+1 0
+1 1
+0 0
+1 0
+1 0
+1 1
+0 0
+1 1
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+0 0
+1 1
+1 0
+0 1
+1 1
+1 1
+0 1
+1 1
+0 1
+1 0
+0 1
+1 0
+0 1
+0 0
+0 1
+0 1
+1 1
+0 0
+1 0
+0 0
+0 0
+1 1
+0 0
+0 0
+1 1
+1 0
+1 1
+1 0
+0 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+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
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+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
+0 0
+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
+0 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 0
+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
+0 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
+0 0
+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
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+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
+0 0
+0 0
+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
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 0
+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 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 0
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+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
+0 0
+1 0
+1 0
+1 0
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+0 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
+0 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+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 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+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
+0 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 0
+1 1
+1 1
+1 1
+1 1
+0 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 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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 0
+0 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+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 0
+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 0
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+0 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
+0 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 0
+0 0
+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
+0 0
+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
+0 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+0 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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
+0 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
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+0 0
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+1 1
+1 0
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+1 1
+0 1
+1 0
+0 0
+1 1
+1 1
+0 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
+0 0
+1 1
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+1
+1
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+1
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+1
+1
+0
+0
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+1
+1
+1
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+1
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+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
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+217 1
+0 1
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+0 1
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+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
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+0 0
+0 0
+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
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1037 0
+1 0
+0 0
+0 1
+1 1
+1 1
+1 1
+0 0
+0 0
+0 0
+1 1
+0 0
+1 1
+1 0
+1 0
+1 1
+0 0
+0 1
+0 0
+1 1
+0 0
+1 0
+0 0
+1 0
+0 1
+1 1
+1 1
+0 1
+0 0
+1 1
+1 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+1 1
+1 1
+1 0
+0 1
+0 0
+1 1
+0 1
+0 0
+0 0
+1 1
+1 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+1 0
+1 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+1 0
+0 0
+1 0
+0 0
+1 1
+0 1
+0 0
+0 0
+0 1
+0 0
+1 0
+1 0
+0 0
+1 1
+1 1
+1 0
+1 0
+1 1
+0 0
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+0 1
+0 0
+0 0
+1 1
+0 0
+0 0
+0 0
+1 0
+0 1
+1 0
+0 0
+1 1
+1 1
+0 1
+1 0
+1 1
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+1 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+1 0
+1 0
+1 1
+1 0
+0 1
+0 0
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+1 0
+0 0
+0 1
+0 0
+1 1
+0 0
+0 0
+0 1
+1 1
+1 0
+1 1
+1 1
+0 0
+0 1
+0 0
+1 0
+0 1
+1 1
+0 0
+0 1
+1 0
+0 1
+1 0
+1 0
+0 0
+1 0
+1 1
+0 1
+0 0
+0 1
+0 1
+1 0
+1 1
+0 0
+1 0
+0 0
+0 1
+1 1
+0 0
+0 1
+0 0
+0 0
+0 1
+1 1
+1 1
+1 1
+0 0
+0 1
+0 0
+0 1
+0 0
+1 0
+1 0
+1 1
+1 0
+0 0
+1 0
+1 1
+0 1
+1 1
+0 0
+0 1
+0 0
+0 0
+1 1
+0 0
+0 1
+1 0
+1 0
+0 1
+0 1
+1 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 1
+1 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 1
+0 1
+0 1
+1 1
+1 0
+1 0
+1 0
+0 0
+1 1
+1 0
+0 1
+1 1
+0 0
+1 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+0 0
+1 1
+0 0
+0 1
+1 0
+1 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 0
+1 0
+1 0
+0 1
+0 0
+1 0
+1 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 0
+1 0
+1 1
+0 1
+1 1
+1 1
+0 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+0 1
+0 0
+1 0
+0 1
+1 1
+1 0
+0 1
+0 1
+1 0
+0 0
+1 0
+1 1
+1 1
+0 1
+1 0
+0 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 1
+1 1
+0 1
+0 1
+0 0
+0 1
+1 1
+0 0
+0 1
+0 0
+1 0
+0 1
+0 1
+0 1
+1 1
+1 1
+0 0
+0 0
+1 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 0
+0 1
+1 0
+0 1
+1 1
+1 1
+1 1
+0 1
+1 1
+0 0
+0 1
+1 1
+1 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+1 0
+0 1
+1 1
+1 1
+1 1
+1 0
+0 1
+0 0
+0 0
+1 1
+0 1
+1 1
+0 1
+1 1
+1 1
+1 1
+0 1
+0 0
+0 0
+1 0
+0 0
+0 0
+1 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+0
+0
+0
+0
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+2235 0
+0 1
+1 1
+0 0
+0 0
+0 0
+0 1
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+1 0
+0 0
+1 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 1
+0 0
+0 0
+0 0
+0 1
+1 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
+1 1
+1 0
+0 0
+0 0
+1 1
+0 0
+0 0
+1 0
+0 1
+0 0
+0 0
+1 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 1
+0 1
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 1
+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
+1 1
+0 0
+0 0
+0 0
+0 1
+1 0
+0 0
+1 0
+1 1
+0 0
+1 0
+0 0
+0 0
+1 1
+1 1
+1 0
+0 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 0
+0 0
+1 0
+1 1
+1 1
+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 1
+0 0
+0 0
+1 1
+1 1
+1 0
+0 1
+1 0
+0 0
+0 0
+1 1
+1 0
+1 1
+1 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+1 1
+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
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 1
+0 0
+0 0
+1 0
+0 0
+0 0
+1 1
+0 0
+1 1
+0 0
+1 1
+1 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+1 1
+1 0
+1 0
+1 1
+0 0
+0 0
+1 1
+1 0
+0 1
+1 1
+1 1
+1 0
+1 1
+1 0
+0 0
+0 0
+0 0
+1 0
+1 0
+0 0
+1 1
+0 1
+0 1
+0 0
+1 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+1 1
+0 0
+0 0
+0 1
+0 1
+1 0
+0 0
+1 1
+0 0
+0 1
+0 1
+1 1
+1 0
+1 1
+1 0
+1 1
+0 0
+0 0
+0 1
+1 1
+1 0
+0 0
+0 0
+1 0
+0 0
+0 1
+0 0
+1 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+1 1
+0 1
+0 1
+0 0
+0 1
+0 1
+1 1
+1 0
+0 1
+1 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+1 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+1 1
+1 1
+1 0
+0 1
+0 0
+1 0
+1 1
+1 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 1
+1 1
+0 0
+0 0
+1 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+1 1
+0 0
+1 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 1
+0 1
+1 0
+1 1
+1 1
+0 0
+0 1
+1 0
+0 0
+1 1
+0 0
+0 0
+0 0
+1 1
+0 1
+0 0
+0 1
+0 1
+1 1
+0 0
+1 1
+1 1
+1 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 1
+1 0
+0 1
+0 0
+1 1
+0 0
+0 0
+1 1
+0 1
+1 1
+0 1
+1 0
+1 1
+1 0
+0 0
+1 1
+0 1
+0 0
+0 0
+1 1
+0 0
+0 0
+1 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+1 0
+0 1
+0 0
+1 0
+0 1
+0 0
+0 1
+0 0
+0 1
+1 1
+0 0
+1 1
+1 1
+0 1
+1 1
+1 0
+0 1
+0 0
+1 1
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+1 1
+1 1
+0 1
+0 0
+1 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+1 0
+1 1
+0 1
+0 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+1 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 0
+1 1
+0 1
+1 0
+0 1
+0 1
+1 0
+0 0
+1 0
+1 1
+0 1
+0 1
+1 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+1 1
+1 0
+1 1
+0 1
+1 0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+1
+1
+1
+0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+0
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+1
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+57 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+0 0
+0 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+385 0
+1 0
+1 1
+1 1
+0 1
+0 0
+1 0
+1 1
+1 0
+1 1
+0 0
+0 1
+0 0
+1 0
+0 0
+1 0
+1 0
+0 1
+0 0
+1 1
+1 0
+0 0
+0 0
+1 1
+0 0
+0 0
+0 1
+1 0
+1 1
+1 0
+0 1
+1 1
+0 1
+0 0
+0 1
+0 0
+0 1
+1 0
+0 1
+1 0
+0 0
+0 0
+0 0
+1 0
+0 0
+1 1
+1 1
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 1
+1 0
+1 0
+1 0
+0 1
+0 0
+1 1
+1 0
+0 0
+1 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+1 0
+0 0
+1 1
+1 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+1 0
+0 1
+1 1
+0 1
+0 1
+1 0
+1 0
+1 0
+0 0
+0 1
+1 0
+0 0
+0 1
+0 0
+1 1
+0 0
+1 1
+1 1
+1 0
+1 0
+0 1
+1 1
+1 1
+0 1
+1 1
+0 0
+1 0
+0 0
+1 0
+0 1
+1 0
+0 0
+0 1
+0 1
+1 1
+1 0
+0 0
+0 1
+0 1
+0 0
+0 1
+1 1
+1 0
+0 0
+0 1
+1 1
+1 0
+0 1
+0 0
+0 1
+0 1
+1 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 1
+0 1
+1 0
+1 1
+1 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+1 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 1
+0 1
+1 0
+1 1
+1 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 1
+1 1
+1 0
+0 0
+1 1
+0 1
+0 0
+0 1
+0 0
+1 1
+0 0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+0
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+0
+679 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+0 0
+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
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+225 0
+1 1
+0 0
+1 0
+1 1
+0 0
+0 0
+0 1
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+1 0
+0 1
+0 0
+0 0
+1 0
+1 0
+1 1
+1 1
+1 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+1 1
+0 1
+0 0
+0 0
+0 1
+0 1
+1 1
+0 1
+1 0
+0 1
+1 0
+0 1
+1 0
+0 1
+0 1
+1 0
+0 0
+1 0
+1 1
+1 0
+1 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+307 1
+0 1
+1 1
+1 1
+0 0
+1 1
+1 1
+0 0
+0 1
+0 0
+0 1
+0 0
+1 0
+1 0
+0 1
+0 0
+0 0
+1 0
+1 1
+0 0
+1 1
+0 1
+0 0
+0 1
+0 1
+1 0
+0 0
+1 0
+1 1
+1 1
+0 0
+1 1
+0 0
+1 1
+0 0
+1 1
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+0 0
+1 1
+0 0
+0 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+0 1
+0 0
+0 0
+0 0
+0 0
+1 1
+1 1
+0 1
+1 1
+1 0
+0 0
+1 0
+1 0
+1 1
+1 0
+0 0
+0 1
+1 0
+0 0
+1 0
+0 0
+0 0
+1 0
+0 1
+0 1
+1 0
+1 0
+0 0
+1 1
+0 1
+1 0
+1 0
+1 1
+0 1
+0 0
+1 0
+0 0
+1 1
+1 0
+0 0
+0 1
+0 0
+1 0
+0 0
+0 1
+0 1
+0 1
+1 1
+0 0
+1 0
+1 0
+0 0
+1 1
+1 0
+0 1
+0 0
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+1 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+1 1
+0 0
+1 0
+0 1
+1 0
+1 1
+0 0
+1 1
+0 0
+1 0
+1 0
+0 0
+1 1
+1 0
+1 0
+1 1
+0 1
+0 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+0 0
+0 0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+0
+673 0
+0 0
+1 0
+0 0
+1 1
+0 1
+0 0
+0 0
+0 0
+0 1
+1 1
+0 0
+0 0
+0 0
+1 0
+0 0
+1 1
+0 0
+1 1
+0 0
+1 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 1
+0 1
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+1 0
+1 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+1 0
+1 0
+1 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+1 1
+1 1
+1 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+1 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+1 1
+0 0
+1 1
+1 0
+1 0
+0 1
+0 1
+0 1
+0 0
+1 0
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+1 0
+0 1
+1 1
+1 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+1 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+1 0
+1 0
+1 0
+0 1
+0 0
+0 0
+1 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+1 0
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+1 0
+1 0
+0 1
+0 1
+0 0
+1 1
+0 1
+0 0
+0 0
+1 0
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 1
+1 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+1 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 0
+0 0
+1 0
+1 1
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 1
+0 1
+0 1
+0 0
+1 1
+1 0
+0 1
+1 1
+0 0
+1 1
+1 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+343 1
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+0 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+0 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 0
+0 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+0 1
+1 0
+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
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+3 0
+0 0
+0
+1
+1881 0
+1 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+1 1
+1 1
+1 1
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+1 1
+0 0
+0 0
+1 0
+1 0
+0 1
+0 0
+1 1
+1 0
+0 1
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+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
+1 1
+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 1
+0 0
+1 1
+0 0
+0 0
+0 0
+1 0
+0 0
+1 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 0
+0 0
+1 0
+0 1
+1 0
+1 0
+0 0
+0 1
+1 1
+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 1
+0 0
+0 0
+0 0
+0 1
+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
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 0
+1 0
+1 0
+1 1
+0 0
+0 0
+1 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 1
+1 0
+1 0
+0 0
+0 1
+1 0
+1 1
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+0 0
+0 0
+1 1
+0 0
+0 1
+0 1
+0 1
+1 0
+0 1
+1 0
+1 0
+0 0
+1 1
+0 1
+0 0
+0 1
+1 0
+0 1
+1 0
+1 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+1 0
+0 0
+1 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+1 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+1 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+1 0
+0 1
+0 1
+1 1
+0 0
+1 1
+0 0
+1 1
+1 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+1 0
+0 1
+1 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 0
+0 0
+1 1
+0 0
+1 0
+0 1
+0 0
+1 1
+0 1
+0 1
+0 1
+1 0
+1 0
+0 0
+1 0
+0 0
+0 1
+1 0
+0 0
+1 0
+0 1
+1 0
+1 1
+1 1
+0 1
+0 1
+1 0
+0 1
+1 0
+0 0
+1 0
+0 0
+1 1
+1 1
+1 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 0
+0 0
+1 0
+1 0
+0 1
+0 1
+0 0
+1 1
+1 0
+0 1
+0 1
+1 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 0
+1 1
+0 1
+0 0
+0 0
+1 0
+1 1
+1 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 1
+1 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+1 0
+0 1
+1 1
+1 0
+0 1
+0 0
+0 0
+1 0
+0 1
+0 1
+1 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+1 1
+0 1
+0 1
+1 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+1 0
+0 0
+1 0
+0 0
+1 1
+0 1
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+1 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 0
+1 1
+0 1
+1 1
+1 0
+0 1
+1 0
+0 0
+1 1
+0 1
+0 0
+1 0
+1 0
+0 0
+1 0
+0 1
+0 0
+1 0
+0 0
+0 1
+1 1
+1 1
+1 1
+0 1
+1 1
+0 0
+0 1
+1 0
+0 0
+0 1
+0 0
+0 1
+1 1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1807 0
+0 0
+0 0
+1 0
+0 0
+0 0
+1 1
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+1 0
+0 1
+1 0
+1 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+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 1
+0 0
+1 0
+1 1
+0 1
+0 0
+1 0
+0 1
+1 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+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 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+1 1
+1 0
+1 1
+1 0
+0 0
+0 0
+0 0
+0 0
+1 1
+1 1
+0 0
+0 1
+1 0
+1 1
+0 1
+0 1
+0 1
+1 0
+1 1
+1 1
+0 0
+1 1
+1 0
+0 0
+1 1
+1 0
+0 1
+1 1
+1 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+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 1
+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 1
+0 1
+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
+1 0
+0 1
+0 0
+0 0
+1 1
+1 1
+0 0
+0 1
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 0
+0 0
+1 1
+0 1
+0 0
+1 1
+1 1
+1 1
+0 0
+0 1
+1 0
+0 1
+1 0
+1 1
+1 1
+0 0
+1 0
+0 0
+1 0
+1 1
+0 1
+1 0
+0 0
+0 0
+0 0
+0 1
+1 0
+0 0
+1 0
+0 0
+1 1
+0 0
+1 0
+1 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 1
+1 1
+0 0
+0 1
+0 1
+1 1
+1 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+1 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+1 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+1 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+1 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 1
+1 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 0
+1 0
+1 0
+1 0
+0 0
+0 0
+0 1
+1 0
+1 0
+0 0
+0 1
+0 0
+0 1
+1 1
+0 1
+1 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+1 0
+1 1
+0 0
+0 0
+1 0
+0 0
+0 0
+1 0
+1 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+1 0
+1 1
+0 0
+0 0
+0 1
+1 1
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+0 1
+0 0
+0 1
+0 1
+1 1
+1 0
+1 1
+1 1
+1 1
+0 0
+0 0
+1 1
+1 1
+0 0
+0 0
+0 0
+1 1
+1 0
+1 0
+1 0
+1 1
+0 1
+0 1
+1 1
+0 1
+1 0
+1 1
+1 0
+0 1
+0 0
+1 1
+0 0
+1 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+1 1
+1 0
+0 1
+1 1
+1 0
+1 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+1 1
+0 0
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+1 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+1 1
+1 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+1 1
+1 1
+0 1
+0 0
+1 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 0
+0 1
+0 0
+0 1
+1 0
+1 1
+0 1
+0 1
+0 1
+1 1
+0 0
+0 0
+0 0
+1 1
+0 0
+0 1
+0 0
+0 1
+0 0
+1 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+1 1
+0 0
+1 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+1 0
+0 0
+0 1
+0 0
+0 1
+1 1
+1 1
+0 1
+0 1
+0 0
+0 1
+0 1
+1 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 0
+1 1
+1 1
+0 1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+0
+3303 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+0 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+0 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+0 0
+1 0
+1 0
+1 0
+0 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+0 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+0 0
+1 0
+1 1
+0 0
+1 0
+1 1
+1 1
+1 1
+0 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+0 1
+1 0
+1 0
+0 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+0 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 1
+0 1
+0 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+0 0
+1 1
+1 0
+1 0
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+0 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+0 1
+1 0
+1 0
+1 1
+0 1
+1 0
+1 0
+0 0
+1 1
+1 0
+1 1
+1 0
+0 1
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+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
+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
+0 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
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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 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
+0 0
+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
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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
+0 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 0
+0 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 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+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 0
+1 1
+1 1
+1 0
+0 1
+1 0
+0 1
+1 1
+1 1
+0 1
+1 0
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 0
+1 0
+0 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+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
+0 1
+1 1
+1 0
+1 1
+1 1
+1 0
+0 1
+1 1
+0 0
+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 0
+1 1
+1 1
+1 1
+1 1
+0 0
+1 1
+1 1
+1 0
+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 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+0 0
+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 0
+0 0
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+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
+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 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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 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 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
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+0 0
+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
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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 0
+1 0
+0 1
+0 0
+1 1
+1 1
+1 1
+0 1
+0 0
+1 1
+1 0
+1 1
+0 1
+1 0
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+0 0
+1 0
+0 0
+1 1
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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 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 0
+1 1
+1 0
+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
+0 0
+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
+0 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+0 0
+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
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+1
+0
+0
+0
+1
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+0
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+5323 0
+0 1
+0 0
+1 1
+0 0
+0 0
+1 0
+1 0
+0 0
+0 0
+0 0
+0 0
+1 1
+1 1
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 0
+1 1
+0 1
+0 0
+1 0
+0 0
+1 0
+1 1
+0 1
+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
+1 1
+0 1
+1 1
+1 1
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+0 0
+1 0
+1 1
+0 0
+0 0
+0 1
+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
+0 0
+0 0
+0 0
+0 0
+1 1
+1 0
+1 1
+0 1
+0 0
+0 0
+0 1
+1 0
+0 0
+0 1
+0 0
+0 1
+0 0
+1 0
+0 0
+0 1
+0 0
+0 0
+0 0
+1 1
+0 0
+0 1
+0 1
+0 1
+1 1
+0 1
+0 0
+0 1
+0 0
+1 0
+1 1
+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
+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
+0 0
+0 1
+1 1
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+1 1
+1 1
+1 0
+0 0
+1 0
+0 1
+1 0
+0 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+1 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 0
+0 0
+0 1
+1 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 1
+1 0
+0 0
+1 1
+0 0
+1 1
+0 0
+1 0
+1 0
+0 1
+0 1
+1 1
+0 0
+1 0
+1 0
+1 0
+0 1
+1 1
+0 0
+0 1
+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
+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 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+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
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+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
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+1 1
+0 1
+0 0
+0 0
+1 1
+0 1
+0 0
+0 1
+0 0
+1 0
+1 1
+1 1
+1 1
+0 0
+0 1
+0 1
+0 1
+1 0
+0 0
+1 1
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 0
+1 0
+0 0
+1 1
+1 1
+0 0
+0 1
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+1 1
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 1
+0 0
+1 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 1
+1 1
+1 1
+1 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+1 1
+0 1
+0 0
+1 1
+1 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+1 1
+0 1
+0 0
+1 0
+1 1
+0 0
+0 0
+0 1
+0 0
+0 0
+1 1
+0 0
+1 0
+0 0
+1 0
+1 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+1 0
+0 0
+1 1
+1 0
+0 0
+0 0
+0 0
+1 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+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
+1 1
+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 1
+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 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 0
+1 0
+0 0
+0 0
+1 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+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 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+1 0
+0 0
+0 1
+0 0
+0 1
+0 0
+1 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 0
+0 0
+0 0
+0 0
+1 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+1 1
+1 0
+0 0
+1 1
+0 0
+1 1
+0 1
+1 0
+0 0
+0 1
+1 0
+0 0
+0 0
+0 1
+1 1
+1 0
+0 0
+1 0
+1 1
+0 0
+1 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+1 0
+1 1
+0 1
+0 0
+1 1
+1 0
+0 0
+0 0
+0 1
+0 1
+1 1
+1 0
+0 0
+1 0
+1 1
+1 0
+1 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+1 1
+0 1
+1 0
+0 0
+0 1
+0 0
+0 0
+0 1
+1 1
+0 1
+0 1
+0 1
+0 0
+0 1
+1 1
+1 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+1 0
+0 0
+1 0
+0 0
+1 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+1 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+1 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+1 1
+1 0
+1 1
+0 1
+0 1
+1 0
+1 1
+0 0
+1 1
+0 0
+0 1
+0 0
+0 0
+1 1
+1 1
+1 0
+1 0
+0 0
+0 0
+1 0
+1 1
+0 0
+1 1
+1 1
+0 0
+0 0
+1 1
+1 1
+1 1
+0 1
+1 0
+0 0
+0 0
+0 1
+1 1
+0 0
+1 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 0
+1 1
+0 0
+0 0
+1 1
+0 1
+0 0
+0 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 1
+0 0
+0 0
+0 0
+1 1
+0 0
+0 0
+0 0
+1 1
+1 1
+1 1
+0 0
+0 1
+0 0
+0 0
+1 1
+1 0
+1 1
+0 0
+1 0
+0 0
+1 0
+0 1
+0 0
+0 1
+1 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+1 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+1 0
+0 0
+0 1
+0 0
+0 0
+1 1
+1 1
+0 1
+0 0
+1 0
+1 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+1 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+1 1
+0 0
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 1
+0 0
+0 1
+0 1
+0 0
+1 1
+0 1
+1 1
+0 1
+0 1
+1 0
+1 0
+1 1
+0 0
+0 1
+0 1
+1 1
+0 0
+1 0
+0 1
+1 0
+1 0
+0 0
+1 0
+0 1
+0 1
+1 1
+1 0
+1 1
+0 1
+0 0
+1 1
+0 0
+1 0
+0 1
+0 1
+1 1
+1 0
+0 1
+1 1
+0 0
+1 1
+1 0
+1 0
+0 0
+1 1
+1 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+1 1
+0 1
+0 1
+1 1
+0 0
+1 1
+1 0
+1 1
+0 0
+1 1
+0 0
+1 0
+1 0
+0 0
+1 1
+1 0
+0 0
+1 0
+0 1
+0 0
+0 0
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+1 0
+0 0
+1 0
+0 1
+0 0
+1 0
+0 1
+0 0
+0 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+0 1
+1 0
+0 0
+1 0
+0 0
+1 0
+0 0
+0 0
+1 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 1
+0 0
+1 0
+0 0
+1 0
+1 1
+0 1
+1 1
+1 0
+0 1
+0 1
+1 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+1 1
+1 0
+1 0
+0 0
+0 0
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+1 1
+1 0
+1 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+1 1
+1 1
+1 0
+0 1
+1 1
+0 0
+1 0
+0 1
+0 1
+0 1
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 1
+1 0
+0 1
+1 0
+1 0
+1 0
+0 1
+0 0
+0 1
+1 1
+0 0
+0 0
+0 1
+1 1
+1 1
+1 1
+1 1
+0 0
+1 0
+1 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+0 1
+1 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+1 0
+0 0
+1 0
+1 0
+1 1
+0 0
+1 0
+1 1
+1 0
+0 0
+1 0
+0 1
+0 1
+0 0
+0 1
+1 1
+0 0
+0 1
+1 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+1 1
+1 0
+0 0
+1 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 0
+0 0
+1 0
+1 1
+1 0
+0 0
+1 1
+0 1
+1 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 1
+0 0
+1 0
+1 1
+1 1
+1 0
+0 1
+0 1
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+1 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 0
+0 1
+1 1
+1 1
+0 1
+1 0
+0 0
+1 0
+0 1
+0 1
+1 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 0
+1 0
+0 0
+1 1
+0 1
+0 1
+1 1
+0 1
+0 0
+1 0
+1 1
+0 0
+0 0
+0 1
+0 1
+0 0
+0 0
+0 0
+1 1
+0 0
+0 1
+0 0
+0 0
+1 0
+1 1
+0 1
+1 1
+1 1
+1 0
+1 1
+0 0
+0 0
+0 0
+1 0
+0 0
+1 0
+1 0
+0 1
+1 1
+0 1
+0 1
+1 1
+0 1
+1 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 0
+1 1
+0 1
+0 1
+1 0
+1 0
+1 1
+0 1
+0 1
+1 1
+0 0
+1 1
+1 1
+1 1
+0 1
+0 1
+0 0
+0 1
+1 0
+0 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+1 0
+0 0
+0 0
+1 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+1 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 1
+1 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+1 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+1 0
+1 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0 1
+1 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 1
+0 1
+1
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+0
+0
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+1
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+0
+0
+0
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+1
+0
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+1
+1
+0
+0
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+1
+1
+0
+1
+0
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+1
+1
+1
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+1
+0
+1
+383 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+0 1
+1 0
+1 1
+1 0
+0 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+0 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 0
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 0
+0 1
+1 0
+1 1
+0 0
+1 1
+1 1
+1 0
+1 1
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+0 0
+0 0
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 0
+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
+0 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0 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
+0 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+0
+0
+0
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+0
+1
+0
+1
+0
+0
+0
+1
+1
+1
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+101 0
+1 1
+0 0
+0 0
+0 1
+0 0
+0 1
+0 0
+0 0
+0 0
+0 0
+0 1
+1 0
+1 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1 0
+1 0
+0
+1
+1
+1
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+1
+1
+1
+1
diff --git a/codejam_2008/src/y2008round2/A-small-practice.in b/codejam_2008/src/y2008round2/A-small-practice.in
new file mode 100644
index 0000000..a9bad1d
--- /dev/null
+++ b/codejam_2008/src/y2008round2/A-small-practice.in
@@ -0,0 +1,369 @@
+20
+19 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 1
+1 0
+0 1
+0 1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+23 1
+1 0
+1 0
+1 1
+1 1
+1 0
+0 1
+1 1
+1 1
+1 1
+1 1
+1 1
+0
+0
+1
+0
+0
+0
+1
+0
+1
+0
+0
+1
+19 0
+0 0
+0 0
+0 0
+0 0
+0 0
+1 0
+0 0
+0 0
+0 0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+17 0
+1 1
+1 0
+0 1
+1 1
+1 0
+0 1
+0 1
+1 0
+1
+1
+1
+0
+1
+1
+0
+1
+1
+7 1
+0 1
+1 1
+1 1
+0
+1
+0
+1
+9 0
+0 1
+0 0
+0 0
+1 0
+0
+1
+0
+1
+1
+15 0
+0 0
+0 0
+1 0
+0 1
+0 1
+1 0
+0 0
+0
+1
+1
+0
+1
+1
+0
+0
+29 0
+1 0
+0 0
+0 0
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1
+1
+0
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+1
+0
+29 1
+0 1
+1 1
+1 0
+1 0
+1 0
+1 0
+1 0
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1 1
+1
+1
+0
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+3 0
+1 1
+0
+1
+27 0
+1 0
+0 0
+0 1
+0 0
+0 0
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+0
+11 1
+0 1
+1 0
+1 1
+1 0
+1 1
+0
+1
+1
+1
+1
+0
+5 1
+0 0
+0 1
+0
+0
+0
+5 0
+1 1
+0 1
+1
+1
+1
+27 1
+1 0
+1 0
+1 1
+1 1
+1 0
+1 0
+0 1
+1 1
+0 0
+1 1
+1 1
+1 1
+1 1
+0
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+1
+1
+0
+17 0
+0 0
+0 0
+1 0
+0 1
+0 1
+0 1
+0 1
+0 1
+1
+0
+1
+1
+0
+1
+0
+1
+0
+29 1
+1 0
+1 1
+1 0
+1 1
+1 1
+1 0
+1 1
+1 1
+1 1
+0 1
+1 1
+1 1
+1 1
+1 1
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+0
+0
+1
+0
+1
+29 0
+0 0
+0 0
+1 1
+0 0
+1 0
+0 1
+0 0
+0 1
+0 1
+0 1
+0 1
+0 1
+0 1
+1 0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+0
+23 1
+0 0
+0 1
+1 0
+0 1
+0 1
+0 1
+0 0
+0 1
+1 0
+0 1
+0 1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+5 0
+1 0
+1 1
+1
+1
+1
diff --git a/codejam_2008/src/y2008round2/a.rs b/codejam_2008/src/y2008round2/a.rs
new file mode 100644
index 0000000..a338569
--- /dev/null
+++ b/codejam_2008/src/y2008round2/a.rs
@@ -0,0 +1,64 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use crate::y2008round2::a::Gate::*;
+
+enum Gate {
+    AND,
+    OR
+}
+
+/*
+Dynamic programming
+Boolean tree
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round2",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+
+                let (m,v) : (usize, usize) = reader.read_tuple_2();
+
+                let interior_nodes: Vec<(Gate, bool)> = (0..(m-1) / 2).map(|_| {
+                    let (g, c) : (usize,usize) = reader.read_tuple_2();
+                    (if g == 1 { AND } else { OR }, c == 1)
+                }
+                ).collect();
+
+                let leaf_nodes: Vec<bool> = (0..(m+1) / 2).map( |_| {
+                    let v : usize = reader.read_int();
+                    v == 1
+                }
+
+                ).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    if let Some(ans) = solve(v==1,interior_nodes.as_slice(), leaf_nodes.as_slice()) {
+                        ans.to_string()
+                    } else {
+                        "IMPOSSIBLE".to_string()
+                    }
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(v: bool, interior_nodes: &[(Gate, bool)], leaf_nodes: &[bool]) -> Option<usize>
+{
+    None
+}

From 6f4b599eb230e504184f610c17be7bd321e2b525 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 17:30:20 -0300
Subject: [PATCH 054/122] a

---
 .../src/y2008round2/A-large-practice.out      | 99 +++++++++++++++++++
 .../src/y2008round2/A-small-practice.out      |  0
 codejam_2008/src/y2008round2/a.rs             | 45 ++++++++-
 3 files changed, 139 insertions(+), 5 deletions(-)
 create mode 100644 codejam_2008/src/y2008round2/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008round2/A-small-practice.out

diff --git a/codejam_2008/src/y2008round2/A-large-practice.out b/codejam_2008/src/y2008round2/A-large-practice.out
new file mode 100644
index 0000000..8ca2f52
--- /dev/null
+++ b/codejam_2008/src/y2008round2/A-large-practice.out
@@ -0,0 +1,99 @@
+Case #1: 20236766
+Case #2: 30102796
+Case #3: 52992167
+Case #4: 50650496
+Case #5: 14605906
+Case #6: 1927750
+Case #7: 40775730
+Case #8: 40613724
+Case #9: 500499499500
+Case #10: 42116251
+Case #11: 15073641
+Case #12: 19767068
+Case #13: 34290086
+Case #14: 42851053
+Case #15: 46161065
+Case #16: 47313179
+Case #17: 21445492
+Case #18: 41269657
+Case #19: 37700180
+Case #20: 18348969
+Case #21: 3939412
+Case #22: 31299431
+Case #23: 23566342
+Case #24: 6969557
+Case #25: 5941760
+Case #26: 397
+Case #27: 20379592
+Case #28: 32779102
+Case #29: 81854643
+Case #30: 24466842
+Case #31: 41145659
+Case #32: 20648264
+Case #33: 16495566
+Case #34: 27540074
+Case #35: 15404926
+Case #36: 35873225
+Case #37: 7298339
+Case #38: 38608398
+Case #39: 10295638
+Case #40: 32291655
+Case #41: 36418362
+Case #42: 35830123
+Case #43: 19359872
+Case #44: 36896463
+Case #45: 48266086
+Case #46: 16769280
+Case #47: 8370699
+Case #48: 9142685
+Case #49: 47095953
+Case #50: 49760985
+Case #51: 36499143
+Case #52: 23945374
+Case #53: 28647093
+Case #54: 42150565
+Case #55: 1568884
+Case #56: 30646889
+Case #57: 42248721
+Case #58: 32674942
+Case #59: 2939730
+Case #60: 31830454
+Case #61: 16901569
+Case #62: 11877297
+Case #63: 26057157
+Case #64: 59970
+Case #65: 1933230
+Case #66: 32082316
+Case #67: 26361546
+Case #68: 15123658
+Case #69: 14763866
+Case #70: 3598727
+Case #71: 9229059
+Case #72: 47
+Case #73: 3591621
+Case #74: 1933250
+Case #75: 5747358
+Case #76: 1144330
+Case #77: 40894001
+Case #78: 11327936
+Case #79: 37307532
+Case #80: 5416210
+Case #81: 48886644
+Case #82: 51886421
+Case #83: 10211291
+Case #84: 5666097
+Case #85: 48097462
+Case #86: 32706383
+Case #87: 51959645
+Case #88: 25910559
+Case #89: 21525206
+Case #90: 24646967
+Case #91: 43617900
+Case #92: 36154714
+Case #93: 21721425
+Case #94: 13206740
+Case #95: 23857540
+Case #96: 24479841
+Case #97: 40550763
+Case #98: 258231
+Case #99: 10111289
diff --git a/codejam_2008/src/y2008round2/A-small-practice.out b/codejam_2008/src/y2008round2/A-small-practice.out
new file mode 100644
index 0000000..e69de29
diff --git a/codejam_2008/src/y2008round2/a.rs b/codejam_2008/src/y2008round2/a.rs
index a338569..d16eb5d 100644
--- a/codejam_2008/src/y2008round2/a.rs
+++ b/codejam_2008/src/y2008round2/a.rs
@@ -1,10 +1,11 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
 use crate::y2008round2::a::Gate::*;
+use std::cmp::min;
 
 enum Gate {
-    AND,
-    OR
+    AND = 1,
+    OR = 0
 }
 
 /*
@@ -25,7 +26,7 @@ pub fn solve_all_cases()
 
                 let interior_nodes: Vec<(Gate, bool)> = (0..(m-1) / 2).map(|_| {
                     let (g, c) : (usize,usize) = reader.read_tuple_2();
-                    (if g == 1 { AND } else { OR }, c == 1)
+                    ( g as Gate, c == 1)
                 }
                 ).collect();
 
@@ -46,7 +47,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    if let Some(ans) = solve(v==1,interior_nodes.as_slice(), leaf_nodes.as_slice()) {
+                    if let Some(ans) = solve(v==1,m,interior_nodes.as_slice(), leaf_nodes.as_slice()) {
                         ans.to_string()
                     } else {
                         "IMPOSSIBLE".to_string()
@@ -58,7 +59,41 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(v: bool, interior_nodes: &[(Gate, bool)], leaf_nodes: &[bool]) -> Option<usize>
+fn solve(v: bool, m: usize, interior_nodes: &[(Gate, bool)], leaf_nodes: &[bool]) -> Option<usize>
 {
+    //dp[x] = min number of changes for x to be true
+    let mut dp = vec![None; m];
+
+    for (i, ln) in leaf_nodes.iter().enumerate()
+        {
+            //if v is false we switch the input values
+            dp[i + interior_nodes.len()] = if v==ln { Some(1) } else { None} ;
+        }
+    //2n + 1; 2n + 2
+
+    for (i, int_node) in interior_nodes.iter().enumerate()
+        {
+            let gate: Gate = if v { int_node.0 } else { (1-int_node.0) as Gate };
+            let changable = int_node.1;
+            let mut min_cost = usize::MAX;
+
+            if gate == AND {
+                if let (Some(lhs), Some(rhs)) = (dp[2 * i + 1], dp[2 * i + 2]) {
+                    min_cost = lhs + rhs;
+                }
+            }
+
+            if gate == OR || changable {
+                let cost = if gate == OR {0} else {1};
+                if let Some(lhs) = dp[2*i+1] {
+                    min_cost = min(min_cost, lhs+cost);
+                }
+
+                if let Some(rhs) = dp[2*i+2] {
+                    min_cost = min(min_cost, rhs+cost);
+                }
+            }
+
+        }
     None
 }

From 78f3c36ce726dedd7e35fb1225e0f14c624eb933 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 20:40:15 -0300
Subject: [PATCH 055/122] a

---
 .../src/y2008round2/A-large-practice.out      | 119 +++---------------
 .../src/y2008round2/A-small-practice.out      |  20 +++
 codejam_2008/src/y2008round2/a.rs             |  30 +++--
 3 files changed, 58 insertions(+), 111 deletions(-)

diff --git a/codejam_2008/src/y2008round2/A-large-practice.out b/codejam_2008/src/y2008round2/A-large-practice.out
index 8ca2f52..437444b 100644
--- a/codejam_2008/src/y2008round2/A-large-practice.out
+++ b/codejam_2008/src/y2008round2/A-large-practice.out
@@ -1,99 +1,20 @@
-Case #1: 20236766
-Case #2: 30102796
-Case #3: 52992167
-Case #4: 50650496
-Case #5: 14605906
-Case #6: 1927750
-Case #7: 40775730
-Case #8: 40613724
-Case #9: 500499499500
-Case #10: 42116251
-Case #11: 15073641
-Case #12: 19767068
-Case #13: 34290086
-Case #14: 42851053
-Case #15: 46161065
-Case #16: 47313179
-Case #17: 21445492
-Case #18: 41269657
-Case #19: 37700180
-Case #20: 18348969
-Case #21: 3939412
-Case #22: 31299431
-Case #23: 23566342
-Case #24: 6969557
-Case #25: 5941760
-Case #26: 397
-Case #27: 20379592
-Case #28: 32779102
-Case #29: 81854643
-Case #30: 24466842
-Case #31: 41145659
-Case #32: 20648264
-Case #33: 16495566
-Case #34: 27540074
-Case #35: 15404926
-Case #36: 35873225
-Case #37: 7298339
-Case #38: 38608398
-Case #39: 10295638
-Case #40: 32291655
-Case #41: 36418362
-Case #42: 35830123
-Case #43: 19359872
-Case #44: 36896463
-Case #45: 48266086
-Case #46: 16769280
-Case #47: 8370699
-Case #48: 9142685
-Case #49: 47095953
-Case #50: 49760985
-Case #51: 36499143
-Case #52: 23945374
-Case #53: 28647093
-Case #54: 42150565
-Case #55: 1568884
-Case #56: 30646889
-Case #57: 42248721
-Case #58: 32674942
-Case #59: 2939730
-Case #60: 31830454
-Case #61: 16901569
-Case #62: 11877297
-Case #63: 26057157
-Case #64: 59970
-Case #65: 1933230
-Case #66: 32082316
-Case #67: 26361546
-Case #68: 15123658
-Case #69: 14763866
-Case #70: 3598727
-Case #71: 9229059
-Case #72: 47
-Case #73: 3591621
-Case #74: 1933250
-Case #75: 5747358
-Case #76: 1144330
-Case #77: 40894001
-Case #78: 11327936
-Case #79: 37307532
-Case #80: 5416210
-Case #81: 48886644
-Case #82: 51886421
-Case #83: 10211291
-Case #84: 5666097
-Case #85: 48097462
-Case #86: 32706383
-Case #87: 51959645
-Case #88: 25910559
-Case #89: 21525206
-Case #90: 24646967
-Case #91: 43617900
-Case #92: 36154714
-Case #93: 21721425
-Case #94: 13206740
-Case #95: 23857540
-Case #96: 24479841
-Case #97: 40550763
-Case #98: 258231
-Case #99: 10111289
+Case #1: 23
+Case #2: 334
+Case #3: 1522
+Case #4: 36
+Case #5: IMPOSSIBLE
+Case #6: 108
+Case #7: 21
+Case #8: IMPOSSIBLE
+Case #9: 272
+Case #10: 28
+Case #11: IMPOSSIBLE
+Case #12: 89
+Case #13: 90
+Case #14: IMPOSSIBLE
+Case #15: 425
+Case #16: IMPOSSIBLE
+Case #17: 1307
+Case #18: 1233
+Case #19: 143
+Case #20: 20
diff --git a/codejam_2008/src/y2008round2/A-small-practice.out b/codejam_2008/src/y2008round2/A-small-practice.out
index e69de29..cef5a31 100644
--- a/codejam_2008/src/y2008round2/A-small-practice.out
+++ b/codejam_2008/src/y2008round2/A-small-practice.out
@@ -0,0 +1,20 @@
+Case #1: 8
+Case #2: 10
+Case #3: 9
+Case #4: 3
+Case #5: 2
+Case #6: IMPOSSIBLE
+Case #7: 6
+Case #8: 7
+Case #9: 5
+Case #10: 1
+Case #11: 3
+Case #12: 2
+Case #13: IMPOSSIBLE
+Case #14: IMPOSSIBLE
+Case #15: 12
+Case #16: 7
+Case #17: 11
+Case #18: 8
+Case #19: IMPOSSIBLE
+Case #20: IMPOSSIBLE
diff --git a/codejam_2008/src/y2008round2/a.rs b/codejam_2008/src/y2008round2/a.rs
index d16eb5d..951175b 100644
--- a/codejam_2008/src/y2008round2/a.rs
+++ b/codejam_2008/src/y2008round2/a.rs
@@ -1,12 +1,12 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
-use crate::y2008round2::a::Gate::*;
+
 use std::cmp::min;
+use std::usize;
+
+const AND: u8 = 1;
+const OR: u8 = 0;
 
-enum Gate {
-    AND = 1,
-    OR = 0
-}
 
 /*
 Dynamic programming
@@ -24,9 +24,9 @@ pub fn solve_all_cases()
 
                 let (m,v) : (usize, usize) = reader.read_tuple_2();
 
-                let interior_nodes: Vec<(Gate, bool)> = (0..(m-1) / 2).map(|_| {
+                let interior_nodes: Vec<(u8, bool)> = (0..(m-1) / 2).map(|_| {
                     let (g, c) : (usize,usize) = reader.read_tuple_2();
-                    ( g as Gate, c == 1)
+                    ( g as u8, c == 1)
                 }
                 ).collect();
 
@@ -59,7 +59,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(v: bool, m: usize, interior_nodes: &[(Gate, bool)], leaf_nodes: &[bool]) -> Option<usize>
+fn solve(v: bool, m: usize, interior_nodes: &[(u8, bool)], leaf_nodes: &[bool]) -> Option<usize>
 {
     //dp[x] = min number of changes for x to be true
     let mut dp = vec![None; m];
@@ -67,13 +67,13 @@ fn solve(v: bool, m: usize, interior_nodes: &[(Gate, bool)], leaf_nodes: &[bool]
     for (i, ln) in leaf_nodes.iter().enumerate()
         {
             //if v is false we switch the input values
-            dp[i + interior_nodes.len()] = if v==ln { Some(1) } else { None} ;
+            dp[i + interior_nodes.len()] = if v==*ln { Some(1) } else { None} ;
         }
     //2n + 1; 2n + 2
 
-    for (i, int_node) in interior_nodes.iter().enumerate()
+    for (i, int_node) in interior_nodes.iter().enumerate().rev()
         {
-            let gate: Gate = if v { int_node.0 } else { (1-int_node.0) as Gate };
+            let gate: u8 = if v { int_node.0 } else { 1-int_node.0 };
             let changable = int_node.1;
             let mut min_cost = usize::MAX;
 
@@ -94,6 +94,12 @@ fn solve(v: bool, m: usize, interior_nodes: &[(Gate, bool)], leaf_nodes: &[bool]
                 }
             }
 
+            if min_cost != usize::MAX {
+                assert!(dp[i].is_none());
+                dp[i] = Some(min_cost);
+            }
+
         }
-    None
+
+    dp[0]
 }

From 8251d8c18d3f9ac84f8fb549340464090de74ce9 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 20:41:40 -0300
Subject: [PATCH 056/122] a

---
 codejam_2008/src/y2008round1c/c.rs            | 16 +---
 .../src/y2008round2/A-large-practice.out      | 30 +++----
 .../src/y2008round2/A-small-practice.out      | 30 +++----
 codejam_2008/src/y2008round2/a.rs             | 89 +++++++++----------
 4 files changed, 77 insertions(+), 88 deletions(-)

diff --git a/codejam_2008/src/y2008round1c/c.rs b/codejam_2008/src/y2008round1c/c.rs
index 4f12f74..34d3152 100644
--- a/codejam_2008/src/y2008round1c/c.rs
+++ b/codejam_2008/src/y2008round1c/c.rs
@@ -9,9 +9,7 @@ Binary Sum tree using an array
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice",
-            "C-large-practice"
-        ],
+        &["C-small-practice", "C-large-practice"],
         "y2008round1c",
         |reader, buffer| {
             let t = reader.read_int();
@@ -34,7 +32,7 @@ pub fn solve_all_cases()
                 A[i mod m] = (X * A[i mod m] + Y * (i + 1)) mod Z
                 */
 
-                let mut a : Vec<u64> = (0..m).map(|_| reader.read_int()).collect();
+                let mut a: Vec<u64> = (0..m).map(|_| reader.read_int()).collect();
                 let n = num_line[0] as usize;
                 let x = num_line[2];
                 let y = num_line[3];
@@ -54,13 +52,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(
-                    buffer,
-                    "Case #{}: {}",
-                    case_no,
-                    solve( &mut speed_limits)
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&mut speed_limits)).unwrap();
             }
         },
     );
@@ -79,7 +71,7 @@ fn solve(speed_limits: &mut Vec<u64>) -> u64
     }
 
     //offset by 1 so bt[1] == # of sequences ending with 0
-    let mut bt = BinarySumTree::new(speed_limits.len()+1);
+    let mut bt = BinarySumTree::new(speed_limits.len() + 1);
 
     for speed_limit in speed_limits.iter() {
         let sl = *speed_limit as usize;
diff --git a/codejam_2008/src/y2008round2/A-large-practice.out b/codejam_2008/src/y2008round2/A-large-practice.out
index 437444b..fe291c9 100644
--- a/codejam_2008/src/y2008round2/A-large-practice.out
+++ b/codejam_2008/src/y2008round2/A-large-practice.out
@@ -1,20 +1,20 @@
-Case #1: 23
-Case #2: 334
-Case #3: 1522
-Case #4: 36
+Case #1: 15
+Case #2: 192
+Case #3: 871
+Case #4: 18
 Case #5: IMPOSSIBLE
-Case #6: 108
-Case #7: 21
+Case #6: 41
+Case #7: 12
 Case #8: IMPOSSIBLE
-Case #9: 272
-Case #10: 28
+Case #9: 159
+Case #10: 15
 Case #11: IMPOSSIBLE
-Case #12: 89
-Case #13: 90
+Case #12: 49
+Case #13: 53
 Case #14: IMPOSSIBLE
-Case #15: 425
+Case #15: 234
 Case #16: IMPOSSIBLE
-Case #17: 1307
-Case #18: 1233
-Case #19: 143
-Case #20: 20
+Case #17: 744
+Case #18: 695
+Case #19: 82
+Case #20: 12
diff --git a/codejam_2008/src/y2008round2/A-small-practice.out b/codejam_2008/src/y2008round2/A-small-practice.out
index cef5a31..d223161 100644
--- a/codejam_2008/src/y2008round2/A-small-practice.out
+++ b/codejam_2008/src/y2008round2/A-small-practice.out
@@ -1,20 +1,20 @@
-Case #1: 8
-Case #2: 10
-Case #3: 9
-Case #4: 3
-Case #5: 2
+Case #1: 2
+Case #2: 6
+Case #3: 0
+Case #4: 2
+Case #5: 1
 Case #6: IMPOSSIBLE
-Case #7: 6
-Case #8: 7
-Case #9: 5
-Case #10: 1
-Case #11: 3
-Case #12: 2
+Case #7: 2
+Case #8: 4
+Case #9: 3
+Case #10: 0
+Case #11: 2
+Case #12: 1
 Case #13: IMPOSSIBLE
 Case #14: IMPOSSIBLE
-Case #15: 12
-Case #16: 7
-Case #17: 11
-Case #18: 8
+Case #15: 7
+Case #16: 4
+Case #17: 7
+Case #18: 3
 Case #19: IMPOSSIBLE
 Case #20: IMPOSSIBLE
diff --git a/codejam_2008/src/y2008round2/a.rs b/codejam_2008/src/y2008round2/a.rs
index 951175b..805fc88 100644
--- a/codejam_2008/src/y2008round2/a.rs
+++ b/codejam_2008/src/y2008round2/a.rs
@@ -7,10 +7,9 @@ use std::usize;
 const AND: u8 = 1;
 const OR: u8 = 0;
 
-
 /*
 Dynamic programming
-Boolean tree
+Binary Boolean tree
 */
 pub fn solve_all_cases()
 {
@@ -21,21 +20,21 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-
-                let (m,v) : (usize, usize) = reader.read_tuple_2();
-
-                let interior_nodes: Vec<(u8, bool)> = (0..(m-1) / 2).map(|_| {
-                    let (g, c) : (usize,usize) = reader.read_tuple_2();
-                    ( g as u8, c == 1)
-                }
-                ).collect();
-
-                let leaf_nodes: Vec<bool> = (0..(m+1) / 2).map( |_| {
-                    let v : usize = reader.read_int();
-                    v == 1
-                }
-
-                ).collect();
+                let (m, v): (usize, usize) = reader.read_tuple_2();
+
+                let interior_nodes: Vec<(u8, bool)> = (0..(m - 1) / 2)
+                    .map(|_| {
+                        let (g, c): (usize, usize) = reader.read_tuple_2();
+                        (g as u8, c == 1)
+                    })
+                    .collect();
+
+                let leaf_nodes: Vec<bool> = (0..(m + 1) / 2)
+                    .map(|_| {
+                        let v: usize = reader.read_int();
+                        v == 1
+                    })
+                    .collect();
 
                 if case_no != 3 {
                     // continue;
@@ -47,7 +46,9 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    if let Some(ans) = solve(v==1,m,interior_nodes.as_slice(), leaf_nodes.as_slice()) {
+                    if let Some(ans) =
+                        solve(v == 1, m, interior_nodes.as_slice(), leaf_nodes.as_slice())
+                    {
                         ans.to_string()
                     } else {
                         "IMPOSSIBLE".to_string()
@@ -64,42 +65,38 @@ fn solve(v: bool, m: usize, interior_nodes: &[(u8, bool)], leaf_nodes: &[bool])
     //dp[x] = min number of changes for x to be true
     let mut dp = vec![None; m];
 
-    for (i, ln) in leaf_nodes.iter().enumerate()
-        {
-            //if v is false we switch the input values
-            dp[i + interior_nodes.len()] = if v==*ln { Some(1) } else { None} ;
-        }
+    for (i, ln) in leaf_nodes.iter().enumerate() {
+        //if v is false we switch the input values
+        dp[i + interior_nodes.len()] = if v == *ln { Some(0) } else { None };
+    }
     //2n + 1; 2n + 2
-
-    for (i, int_node) in interior_nodes.iter().enumerate().rev()
-        {
-            let gate: u8 = if v { int_node.0 } else { 1-int_node.0 };
-            let changable = int_node.1;
-            let mut min_cost = usize::MAX;
-
-            if gate == AND {
-                if let (Some(lhs), Some(rhs)) = (dp[2 * i + 1], dp[2 * i + 2]) {
-                    min_cost = lhs + rhs;
-                }
+    for (i, int_node) in interior_nodes.iter().enumerate().rev() {
+        let gate: u8 = if v { int_node.0 } else { 1 - int_node.0 };
+        let changable = int_node.1;
+        let mut min_cost = usize::MAX;
+
+        if gate == AND {
+            if let (Some(lhs), Some(rhs)) = (dp[2 * i + 1], dp[2 * i + 2]) {
+                min_cost = lhs + rhs;
             }
+        }
 
-            if gate == OR || changable {
-                let cost = if gate == OR {0} else {1};
-                if let Some(lhs) = dp[2*i+1] {
-                    min_cost = min(min_cost, lhs+cost);
-                }
-
-                if let Some(rhs) = dp[2*i+2] {
-                    min_cost = min(min_cost, rhs+cost);
-                }
+        if gate == OR || changable {
+            let cost = if gate == OR { 0 } else { 1 };
+            if let Some(lhs) = dp[2 * i + 1] {
+                min_cost = min(min_cost, lhs + cost);
             }
 
-            if min_cost != usize::MAX {
-                assert!(dp[i].is_none());
-                dp[i] = Some(min_cost);
+            if let Some(rhs) = dp[2 * i + 2] {
+                min_cost = min(min_cost, rhs + cost);
             }
+        }
 
+        if min_cost != usize::MAX {
+            assert!(dp[i].is_none());
+            dp[i] = Some(min_cost);
         }
+    }
 
     dp[0]
 }

From a03f92ed67359d7f3f8e859558670add2e5139e1 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 20:58:47 -0300
Subject: [PATCH 057/122] b

---
 codejam_2008/src/main.rs                      |   2 +-
 .../src/y2008round2/B-large-practice.in       | 101 ++++++++++++++++++
 .../src/y2008round2/B-large-practice.out      | 100 +++++++++++++++++
 .../src/y2008round2/B-small-practice.in       | 101 ++++++++++++++++++
 .../src/y2008round2/B-small-practice.out      | 100 +++++++++++++++++
 codejam_2008/src/y2008round2/b.rs             |  93 ++++++++++++++++
 6 files changed, 496 insertions(+), 1 deletion(-)
 create mode 100644 codejam_2008/src/y2008round2/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008round2/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008round2/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008round2/B-small-practice.out
 create mode 100644 codejam_2008/src/y2008round2/b.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 7e450df..7c78cdb 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -82,7 +82,7 @@ fn main()
 {
     init_log();
 
-    y2008round2::a::solve_all_cases();
+    y2008round2::b::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round2/B-large-practice.in b/codejam_2008/src/y2008round2/B-large-practice.in
new file mode 100644
index 0000000..a2c1bc4
--- /dev/null
+++ b/codejam_2008/src/y2008round2/B-large-practice.in
@@ -0,0 +1,101 @@
+100
+0
+1
+9
+13
+011
+0497
+9039
+12345
+86639
+7959914
+573017384
+68540544826
+32145655433361
+52081002052138
+5134180346254499
+018821973635726964
+060171285896245046145
+820252813840330980505392644
+866360884235124011799252076
+051012271841077685553686598767
+740299098518162954992321300666
+3113347538451239486060121426942
+89361459635304458328229241256140
+347628665695181180104520713482412
+0250980004336284646260149880570080
+8960178993112460870326222665194015
+33352356467248165372552257793851982
+051414959680398158557090771649406229
+0669654027314253678988660820470361479
+27758187256719083538423239953031873648
+258465557653802423579222566321933927195
+481133191312948198529988117914251491209
+0000000000740299098518162954992321300666
+0000000003113347538451239486060121426942
+0000000089361459635304458328229241256140
+0000000347628665695181180104520713482412
+0000008960178993112460870326222665194015
+0000033352356467248165372552257793851982
+0000051414959680398158557090771649406229
+0000669654027314253678988660820470361479
+0014390365181911727450596647446259821763
+0027758187256719083538423239953031873648
+0036633366660303000663666036333066636363
+0050500505505050050005000000555505050550
+0222862604202046260200044066682648626880
+0226264200640408088280246686240406448060
+0258465557653802423579222566321933927195
+0300003333633360360603003336663630360603
+0500505000050000005050005000555505500555
+0505000500050505505055005555500550050055
+0550550050550505055050555555505005000000
+0640046480204826426426684622640426424664
+0663300630630336060663303330063636333306
+0668264288844400848806862466446486240826
+0887193955655984559355692301072646912093
+0995417846325849841675320805970869070076
+1111111111111111111111111111111111111111
+1261568685698377380952394007726060642763
+1460152764571610968333269830068158468049
+1512276224600141189140143552974886158908
+1988056760136214461560531793525433524024
+2484288464886042866606080840840208448840
+2919869519678715917518421886292390522520
+3281075062173113331900004297232437530455
+3300333666030006000336066600336366360063
+3300600006306333063363033006036060330663
+3333033303630030060636663606066603666600
+3336603600006000000663000003663003063633
+3633066300063330003066360060060336330606
+3779504478876684873405076839734610843913
+3858494112259084396724726116800621610739
+4204204668268620802042844282804404088882
+4422624440624066060284048260642806600228
+4660080220424042268840804266446660064222
+4802669943891147207095443765752168400917
+5000055500505050050550005550005500050000
+5005550550500555505555505055055505050505
+5050005050005550050055550500505500055555
+5155754114778946059209127019163077214514
+5500055050555500500005005550005005005000
+5500550050505555050050550000055050000000
+5528484389330827090906104414972916035585
+5555000505000505555050500500000005005505
+5657213392236874883717016561743102878232
+5962566515073989612504330993934876505944
+6200826424466668686640208446624422022640
+6303006366060336636036300333036663333036
+6366060033306630633660666360366003006363
+6691159185150195447377326989822350798278
+6878047953485590762315052659270678080103
+7060816673934792250905005647124135865884
+7207096016132330983711602415562093145641
+7548235986286437544652444712498921788504
+7777777777777777777777777777777777777777
+8095982586096512943538537763490519894208
+8180501223736237798737496712817590576404
+8254149609355466798549497577647821826665
+8420880844646080022244444226686424468602
+9262253545461893640951174744682172318229
+9872154887939966590114260615533840602941
diff --git a/codejam_2008/src/y2008round2/B-large-practice.out b/codejam_2008/src/y2008round2/B-large-practice.out
new file mode 100644
index 0000000..9472782
--- /dev/null
+++ b/codejam_2008/src/y2008round2/B-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 0
+Case #3: 1
+Case #4: 2
+Case #5: 6
+Case #6: 24
+Case #7: 27
+Case #8: 64
+Case #9: 63
+Case #10: 554
+Case #11: 5052
+Case #12: 47185
+Case #13: 1235847
+Case #14: 1227497
+Case #15: 11083689
+Case #16: 99758520
+Case #17: 2690349525
+Case #18: 1960855758345
+Case #19: 1960909072918
+Case #20: 52943320456260
+Case #21: 52946841469553
+Case #22: 158833271667060
+Case #23: 476490122694949
+Case #24: 1429471945580392
+Case #25: 4288606533783222
+Case #26: 4288447898181282
+Case #27: 12865254002119726
+Case #28: 38595785181347613
+Case #29: 115787174691871269
+Case #30: 347362238039287370
+Case #31: 1042085722818015233
+Case #32: 1042085619844922679
+Case #33: 3126458041935635097
+Case #34: 3126315286222741980
+Case #35: 3126251695001560389
+Case #36: 3126255144984317304
+Case #37: 3126278517774154578
+Case #38: 3126256722515093418
+Case #39: 3126258599689156653
+Case #40: 3126253716680524263
+Case #41: 3126256932945543651
+Case #42: 3126260142353586330
+Case #43: 4052555153018976267
+Case #44: 4052555153018976267
+Case #45: 4052555153018976267
+Case #46: 4052555153018976267
+Case #47: 3126257168454045699
+Case #48: 4052555153018976267
+Case #49: 4052555153018976267
+Case #50: 4052555153018976267
+Case #51: 4052555153018976267
+Case #52: 4052555153018976267
+Case #53: 4052555153018976267
+Case #54: 4052555153018976267
+Case #55: 3126255888150504852
+Case #56: 3126257113629559461
+Case #57: 3123315974552731863
+Case #58: 3126256034469921040
+Case #59: 3126256849485697629
+Case #60: 3126256908729866798
+Case #61: 3126256843542223000
+Case #62: 4052555153018976267
+Case #63: 3126256827753902882
+Case #64: 3126244177042699035
+Case #65: 4052555153018976267
+Case #66: 4052555153018976267
+Case #67: 4052555153018976267
+Case #68: 4052555153018976267
+Case #69: 4052555153018976267
+Case #70: 3126257249676362560
+Case #71: 3126256477387445168
+Case #72: 4052555153018976267
+Case #73: 4052555153018976267
+Case #74: 4052555153018976267
+Case #75: 3126256891431102367
+Case #76: 4052555153018976267
+Case #77: 4052555153018976267
+Case #78: 4052555153018976267
+Case #79: 3126256805997177673
+Case #80: 4052555153018976267
+Case #81: 4052555153018976267
+Case #82: 3126262206857073532
+Case #83: 4052555153018976267
+Case #84: 3126256831612350998
+Case #85: 3126261422741512380
+Case #86: 4052555153018976267
+Case #87: 4052555153018976267
+Case #88: 4052555153018976267
+Case #89: 3126257282301440399
+Case #90: 3126255258238421448
+Case #91: 3126256713219041948
+Case #92: 3126256504756195448
+Case #93: 3126256904062108234
+Case #94: 4052555153018976267
+Case #95: 3126254585561920475
+Case #96: 3126256591400460705
+Case #97: 3126256845829422841
+Case #98: 4052555153018976267
+Case #99: 3126257406778969053
+Case #100: 3126252869898418789
diff --git a/codejam_2008/src/y2008round2/B-small-practice.in b/codejam_2008/src/y2008round2/B-small-practice.in
new file mode 100644
index 0000000..e17f19c
--- /dev/null
+++ b/codejam_2008/src/y2008round2/B-small-practice.in
@@ -0,0 +1,101 @@
+100
+0
+1
+9
+13
+011
+277
+413
+0876
+7192
+7329
+8126
+9893
+12345
+17214
+20204
+160176
+1566843
+9716463
+54275347
+84091195
+91920744
+216589640
+845048810
+3747766429
+4802642960
+8224853717
+9712606483
+19982103842
+830497247155
+900059026267
+926804404288
+0000000000277
+0000000007329
+0000000017214
+0000000160176
+0000009716463
+0000091920744
+0000555005000
+0000845048810
+0004288666440
+0008224853717
+0019982103842
+0066006333660
+0266408208048
+0500550055050
+0550050000505
+0555000555550
+0555550500505
+0603063033330
+0800428008208
+0801564185288
+0926804404288
+1087830939945
+1111111111111
+1583319926819
+1854109578624
+2208684408826
+2282622822428
+3006306630360
+3076293173315
+3139233861342
+3363600606666
+3719669768636
+3824130392011
+4746598597199
+4787157013058
+4804248428846
+4859618176134
+4938069459189
+5005000000050
+5050500005000
+5149017057386
+5547883568237
+5550055055005
+5550055550005
+5555000555050
+6066446228844
+6204689097259
+6336663000030
+6360660306000
+6363633000033
+6600066606363
+6603063333033
+6603330660006
+6899770633780
+7384787452228
+7777777777777
+8006422004864
+8085122681688
+8148388648124
+8497502656195
+8604680006424
+8617183596076
+8668828424088
+8855851047012
+8968834961434
+9321829612918
+9433879877471
+9655492462320
+9929263750831
diff --git a/codejam_2008/src/y2008round2/B-small-practice.out b/codejam_2008/src/y2008round2/B-small-practice.out
new file mode 100644
index 0000000..b9c3c4d
--- /dev/null
+++ b/codejam_2008/src/y2008round2/B-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 0
+Case #3: 1
+Case #4: 2
+Case #5: 6
+Case #6: 7
+Case #7: 8
+Case #8: 27
+Case #9: 20
+Case #10: 23
+Case #11: 17
+Case #12: 18
+Case #13: 64
+Case #14: 61
+Case #15: 81
+Case #16: 202
+Case #17: 582
+Case #18: 586
+Case #19: 1677
+Case #20: 1663
+Case #21: 1739
+Case #22: 4960
+Case #23: 5097
+Case #24: 14913
+Case #25: 12902
+Case #26: 15121
+Case #27: 15021
+Case #28: 45134
+Case #29: 136503
+Case #30: 140458
+Case #31: 123300
+Case #32: 413343
+Case #33: 452709
+Case #34: 400221
+Case #35: 441774
+Case #36: 427194
+Case #37: 422577
+Case #38: 531441
+Case #39: 412857
+Case #40: 531441
+Case #41: 408267
+Case #42: 406206
+Case #43: 531441
+Case #44: 531441
+Case #45: 531441
+Case #46: 531441
+Case #47: 531441
+Case #48: 531441
+Case #49: 531441
+Case #50: 531441
+Case #51: 410283
+Case #52: 369900
+Case #53: 421959
+Case #54: 398640
+Case #55: 407153
+Case #56: 412014
+Case #57: 531441
+Case #58: 531441
+Case #59: 531441
+Case #60: 410000
+Case #61: 414539
+Case #62: 531441
+Case #63: 409758
+Case #64: 408643
+Case #65: 409398
+Case #66: 409887
+Case #67: 531441
+Case #68: 410163
+Case #69: 418663
+Case #70: 531441
+Case #71: 531441
+Case #72: 409984
+Case #73: 409867
+Case #74: 531441
+Case #75: 531441
+Case #76: 531441
+Case #77: 531441
+Case #78: 412959
+Case #79: 531441
+Case #80: 531441
+Case #81: 531441
+Case #82: 531441
+Case #83: 531441
+Case #84: 531441
+Case #85: 408769
+Case #86: 409215
+Case #87: 531441
+Case #88: 531441
+Case #89: 405220
+Case #90: 405254
+Case #91: 411322
+Case #92: 531441
+Case #93: 409588
+Case #94: 531441
+Case #95: 410373
+Case #96: 409685
+Case #97: 412002
+Case #98: 411344
+Case #99: 407139
+Case #100: 413168
diff --git a/codejam_2008/src/y2008round2/b.rs b/codejam_2008/src/y2008round2/b.rs
new file mode 100644
index 0000000..43fdb0c
--- /dev/null
+++ b/codejam_2008/src/y2008round2/b.rs
@@ -0,0 +1,93 @@
+use codejam::util::codejam::run_cases;
+use itertools::Itertools;
+use std::io::Write;
+use std::cmp::min;
+use std::cmp::max;
+
+/*
+
+
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round2",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n, m, a) = reader.read_tuple_3();
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    if let Some(ans) = solve(n, m, a) {
+                        ans.iter().join(" ")
+                    } else {
+                        "IMPOSSIBLE".to_string()
+                    }
+                )
+                .unwrap()
+            }
+        },
+    );
+}
+
+fn solve(n: usize, m: usize, a: usize) -> Option<[usize;6]>
+{
+  let narrow = min(n,m);
+  let wide = max(n,m);
+
+  if (wide * narrow < A) {
+    return None;
+  }
+
+  let mut n1 = a / wide;
+  let w2 = wide;
+  let mut w1=0;
+    let mut n2 = 0;
+
+  if A%wide == 0 {
+    w1 = 0;
+    n2 = 0;
+  } else {
+    n1+=1;
+    n2 = 1;
+    w1 = n1*w2 - A;
+
+  }
+
+    assert_eq!(A, abs(n1 * w2 - n2 * w1) );
+  //          printf("Case #%d: Xmax %d Ymax %d tar %d\n", test_case+1, N, M, A);
+  //          printf("Case #%d: 0 0 %d %d %d %d\n", test_case+1, x1,y1,x2,y2);
+  if (wide == m) {
+    assert!(w1 >= 0);
+    assert!(w1 <= m);
+    assert!(w2 >= 0);
+    assert!(w2 <= m);
+    assert!(n1 >= 0);
+    assert!(n1 <= n);
+    assert!(n2 >= 0);
+    assert!(n2 <= n);
+    return Some([0,0,n1,w1,n2,w2]);
+  } else {
+    assert!(w1 >= 0);
+    assert!(w1 <= n);
+    assert!(w2 >= 0);
+    assert!(w2 <= n);
+    assert!(n1 >= 0);
+    assert!(n1 <= m);
+    assert!(n2 >= 0);
+    assert!(n2 <= m);
+
+      return Some([0,0,w1,n1,w2,n2]);
+  }
+          //cout << abs(x1 * y2 - x2 * y1) << endl;
+
+
+
+}

From 8601039858a091d86020e45ab1da3228f1e199ff Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 21 Feb 2019 22:05:39 -0300
Subject: [PATCH 058/122] b

---
 .../src/y2008round2/B-large-practice.in       | 1102 +++++++++++++++--
 .../src/y2008round2/B-large-practice.out      | 1100 ++++++++++++++--
 .../src/y2008round2/B-small-practice.in       | 1102 +++++++++++++++--
 .../src/y2008round2/B-small-practice.out      | 1100 ++++++++++++++--
 codejam_2008/src/y2008round2/b.rs             |   16 +-
 5 files changed, 4010 insertions(+), 410 deletions(-)

diff --git a/codejam_2008/src/y2008round2/B-large-practice.in b/codejam_2008/src/y2008round2/B-large-practice.in
index a2c1bc4..65cf157 100644
--- a/codejam_2008/src/y2008round2/B-large-practice.in
+++ b/codejam_2008/src/y2008round2/B-large-practice.in
@@ -1,101 +1,1001 @@
-100
-0
-1
-9
-13
-011
-0497
-9039
-12345
-86639
-7959914
-573017384
-68540544826
-32145655433361
-52081002052138
-5134180346254499
-018821973635726964
-060171285896245046145
-820252813840330980505392644
-866360884235124011799252076
-051012271841077685553686598767
-740299098518162954992321300666
-3113347538451239486060121426942
-89361459635304458328229241256140
-347628665695181180104520713482412
-0250980004336284646260149880570080
-8960178993112460870326222665194015
-33352356467248165372552257793851982
-051414959680398158557090771649406229
-0669654027314253678988660820470361479
-27758187256719083538423239953031873648
-258465557653802423579222566321933927195
-481133191312948198529988117914251491209
-0000000000740299098518162954992321300666
-0000000003113347538451239486060121426942
-0000000089361459635304458328229241256140
-0000000347628665695181180104520713482412
-0000008960178993112460870326222665194015
-0000033352356467248165372552257793851982
-0000051414959680398158557090771649406229
-0000669654027314253678988660820470361479
-0014390365181911727450596647446259821763
-0027758187256719083538423239953031873648
-0036633366660303000663666036333066636363
-0050500505505050050005000000555505050550
-0222862604202046260200044066682648626880
-0226264200640408088280246686240406448060
-0258465557653802423579222566321933927195
-0300003333633360360603003336663630360603
-0500505000050000005050005000555505500555
-0505000500050505505055005555500550050055
-0550550050550505055050555555505005000000
-0640046480204826426426684622640426424664
-0663300630630336060663303330063636333306
-0668264288844400848806862466446486240826
-0887193955655984559355692301072646912093
-0995417846325849841675320805970869070076
-1111111111111111111111111111111111111111
-1261568685698377380952394007726060642763
-1460152764571610968333269830068158468049
-1512276224600141189140143552974886158908
-1988056760136214461560531793525433524024
-2484288464886042866606080840840208448840
-2919869519678715917518421886292390522520
-3281075062173113331900004297232437530455
-3300333666030006000336066600336366360063
-3300600006306333063363033006036060330663
-3333033303630030060636663606066603666600
-3336603600006000000663000003663003063633
-3633066300063330003066360060060336330606
-3779504478876684873405076839734610843913
-3858494112259084396724726116800621610739
-4204204668268620802042844282804404088882
-4422624440624066060284048260642806600228
-4660080220424042268840804266446660064222
-4802669943891147207095443765752168400917
-5000055500505050050550005550005500050000
-5005550550500555505555505055055505050505
-5050005050005550050055550500505500055555
-5155754114778946059209127019163077214514
-5500055050555500500005005550005005005000
-5500550050505555050050550000055050000000
-5528484389330827090906104414972916035585
-5555000505000505555050500500000005005505
-5657213392236874883717016561743102878232
-5962566515073989612504330993934876505944
-6200826424466668686640208446624422022640
-6303006366060336636036300333036663333036
-6366060033306630633660666360366003006363
-6691159185150195447377326989822350798278
-6878047953485590762315052659270678080103
-7060816673934792250905005647124135865884
-7207096016132330983711602415562093145641
-7548235986286437544652444712498921788504
-7777777777777777777777777777777777777777
-8095982586096512943538537763490519894208
-8180501223736237798737496712817590576404
-8254149609355466798549497577647821826665
-8420880844646080022244444226686424468602
-9262253545461893640951174744682172318229
-9872154887939966590114260615533840602941
+1000
+1 1 1
+1 2 64
+10 10 1
+1 1 1
+1 2 1
+1 2 2
+1 3 1
+1 3 2
+1 3 3
+1 4 1
+1 4 2
+1 4 3
+1 4 4
+2 1 1
+2 1 2
+2 2 1
+2 2 2
+2 2 4
+2 2 3
+2 3 1
+2 3 2
+2 3 4
+2 3 3
+2 3 6
+2 3 5
+2 4 1
+2 4 2
+2 4 4
+2 4 3
+2 4 6
+2 4 8
+2 4 5
+2 4 7
+3 1 1
+3 1 2
+3 1 3
+3 2 1
+3 2 2
+3 2 3
+3 2 4
+3 2 6
+3 2 5
+3 3 1
+3 3 2
+3 3 3
+3 3 4
+3 3 6
+3 3 9
+3 3 5
+3 3 8
+3 3 7
+3 4 1
+3 4 2
+3 4 3
+3 4 4
+3 4 6
+3 4 9
+3 4 8
+3 4 12
+3 4 5
+3 4 7
+3 4 11
+3 4 10
+4 1 1
+4 1 2
+4 1 3
+4 1 4
+4 2 1
+4 2 2
+4 2 3
+4 2 4
+4 2 6
+4 2 8
+4 2 5
+4 2 7
+4 3 1
+4 3 2
+4 3 3
+4 3 4
+4 3 6
+4 3 8
+4 3 9
+4 3 12
+4 3 5
+4 3 7
+4 3 11
+4 3 10
+4 4 1
+4 4 2
+4 4 3
+4 4 4
+4 4 6
+4 4 8
+4 4 9
+4 4 12
+4 4 16
+4 4 5
+4 4 7
+4 4 11
+4 4 10
+4 4 15
+4 4 14
+4 4 13
+1 1 2
+1 1 3
+1 1 4
+1 2 3
+1 2 4
+1 2 5
+1 3 4
+1 3 5
+1 3 6
+1 4 5
+1 4 6
+1 4 7
+2 1 3
+2 1 4
+2 1 5
+2 2 5
+2 2 6
+2 2 7
+2 3 7
+2 3 8
+2 3 9
+2 4 9
+2 4 10
+2 4 11
+3 1 4
+3 1 5
+3 1 6
+3 2 7
+3 2 8
+3 2 9
+3 3 10
+3 3 11
+3 3 12
+3 4 13
+3 4 14
+3 4 15
+4 1 5
+4 1 6
+4 1 7
+4 2 9
+4 2 10
+4 2 11
+4 3 13
+4 3 14
+4 3 15
+4 4 17
+4 4 18
+4 4 19
+9995 9995 99900026
+9995 9995 99900027
+9995 9995 99900028
+9995 9994 99890031
+9995 9994 99890032
+9995 9994 99890033
+9995 9993 99880036
+9995 9993 99880037
+9995 9993 99880038
+9994 9995 99890031
+9994 9995 99890032
+9994 9995 99890033
+9994 9994 99880037
+9994 9994 99880038
+9994 9994 99880039
+9994 9993 99870043
+9994 9993 99870044
+9994 9993 99870045
+9993 9995 99880036
+9993 9995 99880037
+9993 9995 99880038
+9993 9994 99870043
+9993 9994 99870044
+9993 9994 99870045
+9993 9993 99860050
+9993 9993 99860051
+9993 9993 99860052
+1 10000 2781
+1 10000 1207
+1 10000 7943
+1 10000 2982
+2 10000 2842
+2 10000 3502
+2 10000 4269
+2 10000 3399
+3 10000 5086
+3 10000 4650
+3 10000 5464
+3 10000 1426
+4 10000 3565
+4 10000 2315
+4 10000 8920
+4 10000 1017
+5 10000 8400
+5 10000 1289
+5 10000 17123
+5 10000 2072
+6 10000 1629
+6 10000 12816
+6 10000 34665
+6 10000 3700
+7 10000 5077
+7 10000 2541
+7 10000 14724
+7 10000 18392
+8 10000 4588
+8 10000 1464
+8 10000 34354
+8 10000 888
+9 10000 1093
+9 10000 6150
+9 10000 1672
+9 10000 3336
+10 10000 2191
+10 10000 6966
+10 10000 50364
+10 10000 3722
+10000 1 4182
+10000 1 3779
+10000 1 220
+10000 1 641
+10000 2 4702
+10000 2 2875
+10000 2 8387
+10000 2 4043
+10000 3 1919
+10000 3 8485
+10000 3 5158
+10000 3 3058
+10000 4 10311
+10000 4 7525
+10000 4 10291
+10000 4 9285
+10000 5 5436
+10000 5 607
+10000 5 600
+10000 5 3635
+10000 6 17622
+10000 6 6562
+10000 6 8969
+10000 6 24718
+10000 7 6412
+10000 7 4742
+10000 7 7712
+10000 7 10709
+10000 8 10275
+10000 8 591
+10000 8 13535
+10000 8 7727
+10000 9 23032
+10000 9 25941
+10000 9 10453
+10000 9 21304
+10000 10 5660
+10000 10 3147
+10000 10 57171
+10000 10 5845
+7996 8919 23384838
+2415 8743 2325573
+8304 8533 5403080
+2155 9966 1748890
+1273 8760 591393
+8097 7537 4600565
+7933 7352 23970948
+3663 7970 3587822
+9807 2228 2106504
+1148 6527 55895
+7674 5 5168
+3637 5540 7170084
+105 4646 131912
+7460 224 33250
+9136 4468 5664546
+5188 6879 1600914
+6987 7281 2123016
+9894 6981 18031906
+5232 5185 1916181
+4220 5921 742304
+2651 5791 1751223
+227 7353 213680
+4096 5076 1677870
+5528 3446 2046569
+9700 343 199806
+7976 9011 813935
+4925 6263 2217421
+9689 402 872266
+1733 4057 687786
+7751 7401 6161757
+5262 4986 5913171
+4705 5825 11691154
+7910 7604 4838085
+8915 2102 160499
+8791 3257 533013
+4901 4821 1262628
+3668 1681 181211
+5573 7516 18865668
+8920 528 1157433
+349 1783 81325
+2063 4776 1887410
+3142 1990 65332
+405 9166 294996
+8041 3831 10119438
+3500 1627 1615104
+7239 1464 3975618
+3059 2628 2671980
+9149 1323 4640449
+3599 1167 330897
+6785 7862 10294002
+7099 7032 6799695
+3849 4779 2001815
+4717 846 964159
+9363 5089 7436876
+6089 2955 3942870
+9388 2906 4976467
+5975 7687 8719568
+7585 7924 11108596
+3011 9150 3738070
+5162 6453 1128360
+7104 1443 4366233
+8116 9914 1030106
+674 4134 525945
+1151 506 106236
+101 6334 20113
+3477 9635 2847440
+6497 6952 4507398
+4345 308 118232
+8504 3664 1787712
+7356 8459 5496344
+230 2963 123360
+4004 2916 72385
+3071 7843 168744
+2152 8797 1610586
+3797 6848 1061799
+834 9859 1936698
+3744 6239 5752986
+8783 9064 9363354
+1250 46 9932
+4948 3856 9483424
+2222 8240 5379800
+9502 4699 4537100
+123 2790 150570
+8691 7004 25507511
+9939 3811 3666889
+1700 5736 2027805
+4436 9646 7662108
+6017 6640 15029359
+2785 6977 5237982
+6400 2987 9362040
+9033 281 44424
+7622 7357 25765405
+7257 7027 1784429
+8973 7852 604296
+5545 9463 3067980
+5582 3514 1175851
+7992 2584 4841553
+1509 4182 1975752
+8691 6561 1260646
+2542 6635 71721
+10000 10000 11741626
+10000 10000 8628544
+10000 10000 938575
+10000 10000 24684120
+10000 10000 4958273
+10000 10000 7448721
+10000 10000 12829500
+10000 10000 1408867
+10000 10000 16157041
+10000 10000 39307512
+10000 10000 10936360
+10000 10000 14408725
+10000 10000 12473860
+10000 10000 43045542
+10000 10000 10236172
+10000 10000 10030985
+10000 10000 12409637
+10000 10000 15466846
+10000 10000 39793228
+10000 10000 33641736
+10000 10000 40544313
+10000 10000 20826850
+10000 10000 8032878
+10000 10000 10022012
+10000 10000 16263837
+10000 10000 11873283
+10000 10000 2185794
+10000 10000 24117667
+10000 10000 5259950
+10000 10000 22774320
+10000 10000 19171079
+10000 10000 10561601
+10000 10000 2894116
+10000 10000 9826620
+10000 10000 2658581
+10000 10000 30597553
+10000 10000 30066074
+10000 10000 11540056
+10000 10000 19737188
+10000 10000 10960268
+10000 10000 19135966
+10000 10000 21361848
+10000 10000 9239039
+10000 10000 3371079
+10000 10000 7308309
+10000 10000 7419716
+10000 10000 9678394
+10000 10000 16178104
+10000 10000 10414771
+10000 10000 3998746
+10000 10000 18280891
+10000 10000 14489020
+10000 10000 16588688
+10000 10000 661357
+10000 10000 13444415
+10000 10000 7368420
+10000 10000 4675923
+10000 10000 1671894
+10000 10000 8648413
+10000 10000 25967025
+10000 10000 21322480
+10000 10000 22239090
+10000 10000 33829213
+10000 10000 35443056
+10000 10000 5378760
+10000 10000 37434015
+10000 10000 8721309
+10000 10000 38404698
+10000 10000 16990969
+10000 10000 12846655
+10000 10000 8181578
+10000 10000 3135929
+10000 10000 2509832
+10000 10000 23905608
+10000 10000 30266116
+10000 10000 34272161
+10000 10000 12723368
+10000 10000 7239730
+10000 10000 15809856
+10000 10000 31881654
+10000 10000 10375040
+10000 10000 14445890
+10000 10000 4997891
+10000 10000 14857081
+10000 10000 2802503
+10000 10000 16427301
+10000 10000 25327442
+10000 10000 1387969
+10000 10000 33655155
+10000 10000 56587042
+10000 10000 19726172
+10000 10000 4170172
+10000 10000 13600146
+10000 10000 19342085
+10000 10000 3511020
+10000 10000 5655614
+10000 10000 5019825
+10000 10000 29301727
+10000 10000 6721971
+10000 10000 10697617
+10000 10000 10712412
+10000 10000 385880
+10000 10000 4402064
+10000 10000 10764858
+10000 10000 7887538
+10000 10000 28632054
+10000 10000 23463986
+10000 10000 1305605
+10000 10000 3101812
+10000 10000 7204412
+10000 10000 54134100
+10000 10000 14854366
+10000 10000 4849636
+10000 10000 6291704
+10000 10000 42925508
+10000 10000 3866314
+10000 10000 9781632
+10000 10000 39897387
+10000 10000 9398445
+10000 10000 6023081
+10000 10000 7969092
+10000 10000 10649023
+10000 10000 20011146
+10000 10000 5291696
+10000 10000 9629305
+10000 10000 16305362
+10000 10000 13953370
+10000 10000 7207714
+10000 10000 1336507
+10000 10000 4164098
+10000 10000 8139357
+10000 10000 48433469
+10000 10000 15575160
+10000 10000 5696332
+10000 10000 6399603
+10000 10000 32066838
+10000 10000 68579652
+10000 10000 30383781
+10000 10000 35890892
+10000 10000 38071356
+10000 10000 3259521
+10000 10000 7347429
+10000 10000 27575789
+10000 10000 464164
+10000 10000 49244440
+10000 10000 35232497
+10000 10000 12901302
+10000 10000 2479788
+10000 10000 1369912
+10000 10000 17406346
+10000 10000 27281208
+10000 10000 2089364
+10000 10000 8505489
+10000 10000 1411301
+10000 10000 4773484
+10000 10000 38879562
+10000 10000 4750981
+10000 10000 29473826
+10000 10000 27055006
+10000 10000 31982489
+10000 10000 5123610
+10000 10000 4331534
+10000 10000 5808979
+10000 10000 39934283
+10000 10000 29946537
+10000 10000 7585484
+10000 10000 19481094
+10000 10000 3117126
+10000 10000 9456715
+10000 10000 8797898
+10000 10000 29044819
+10000 10000 10217587
+10000 10000 12185613
+10000 10000 6296161
+10000 10000 25897425
+10000 10000 25319492
+10000 10000 6809762
+10000 10000 16712130
+10000 10000 24476706
+10000 10000 60363
+10000 10000 26716362
+10000 10000 10061700
+10000 10000 780510
+10000 10000 19751850
+10000 10000 3573940
+10000 10000 345035
+10000 10000 16211758
+10000 10000 5373230
+10000 10000 3098697
+10000 10000 1535450
+10000 10000 8332520
+10000 10000 655474
+10000 10000 605702
+10000 10000 5337457
+10000 10000 1905906
+10000 10000 14470434
+10000 10000 15950972
+10000 10000 604863
+10000 10000 58835847
+10000 10000 24638566
+10000 10000 21602177
+10000 10000 6869450
+10000 10000 25429900
+10000 10000 17342156
+10000 10000 6002500
+10000 10000 36424236
+10000 10000 5616118
+10000 10000 2565990
+10000 10000 28489097
+10000 10000 41551
+10000 10000 9918664
+10000 10000 4815234
+10000 10000 27729080
+10000 10000 2968134
+10000 10000 27319220
+10000 10000 5602591
+10000 10000 620440
+10000 10000 57267153
+10000 10000 1994909
+10000 10000 7680642
+10000 10000 1738059
+10000 10000 3710754
+10000 10000 39594945
+10000 10000 40778202
+10000 10000 15231882
+10000 10000 10102442
+10000 10000 42544068
+10000 10000 830527
+10000 10000 995925
+10000 10000 15238255
+10000 10000 15634288
+10000 10000 9613775
+10000 10000 12385901
+10000 10000 21362340
+10000 10000 4339609
+10000 10000 4838350
+10000 10000 5509658
+10000 10000 16766304
+10000 10000 43947
+10000 10000 20904134
+10000 10000 27312032
+10000 10000 1633663
+10000 10000 15590443
+10000 10000 1514093
+10000 10000 6030915
+10000 10000 34102979
+10000 10000 8310030
+10000 10000 2055826
+10000 10000 20355273
+10000 10000 29336580
+10000 10000 5506483
+10000 10000 28576
+10000 10000 1730529
+10000 10000 5345470
+10000 10000 23652540
+10000 10000 6094843
+10000 10000 26783669
+10000 10000 32138514
+10000 10000 11875404
+10000 10000 2167820
+10000 10000 24979983
+10000 10000 3921594
+10000 10000 6653236
+10000 10000 8561359
+10000 10000 10597400
+10000 10000 11462463
+10000 10000 195703
+10000 10000 7383545
+10000 10000 23860844
+10000 10000 16801975
+10000 10000 11973347
+10000 10000 715359
+10000 10000 18098871
+10000 10000 13000683
+10000 10000 7486446
+10000 10000 5765998
+10000 10000 7364716
+10000 10000 11313503
+10000 10000 4005097
+10000 10000 28872657
+10000 10000 12864059
+10000 10000 67251216
+10000 10000 27985634
+10000 10000 4401789
+10000 10000 1194114
+10000 10000 33442474
+10000 10000 13196608
+10000 10000 6668900
+10000 10000 31350360
+10000 10000 28822884
+10000 10000 5768044
+10000 10000 8885167
+10000 10000 923100
+10000 10000 20654621
+10000 10000 23945419
+10000 10000 9701022
+10000 10000 6627357
+10000 10000 43930827
+10000 10000 1385948
+10000 10000 8764633
+10000 10000 3003760
+10000 10000 25303544
+10000 10000 15101301
+10000 10000 28653045
+10000 10000 22993448
+10000 10000 22788140
+10000 10000 6382220
+10000 10000 25816984
+10000 10000 5100028
+10000 10000 2004222
+10000 10000 10393610
+10000 10000 31757778
+10000 10000 370306
+10000 10000 10391260
+10000 10000 32070290
+10000 10000 26141000
+10000 10000 6731304
+10000 10000 4559760
+10000 10000 14867197
+10000 10000 9361500
+10000 10000 13169320
+10000 10000 638988
+10000 10000 38729255
+10000 10000 17240770
+10000 10000 14022096
+10000 10000 7960659
+10000 10000 37786741
+10000 10000 18096476
+10000 10000 17648567
+10000 10000 8284080
+10000 10000 16560198
+10000 10000 583406
+10000 10000 3762578
+10000 10000 10679516
+10000 10000 24764566
+10000 10000 5918777
+10000 10000 20403852
+10000 10000 8069570
+10000 10000 9707922
+10000 10000 19448333
+10000 10000 7261944
+10000 10000 942546
+10000 10000 5721744
+10000 10000 13029594
+10000 10000 3929790
+10000 10000 8429629
+10000 10000 8526152
+10000 10000 5939135
+10000 10000 21575118
+10000 10000 1011803
+10000 10000 9998041
+10000 10000 664840
+10000 10000 15394977
+10000 10000 1358302
+10000 10000 56035895
+10000 10000 26787834
+10000 10000 8529698
+10000 10000 4342411
+10000 10000 18209599
+10000 10000 17867138
+10000 10000 19957405
+10000 10000 565844
+10000 10000 31535790
+10000 10000 15545268
+10000 10000 27724007
+10000 10000 18524608
+10000 10000 12271887
+10000 10000 7845766
+10000 10000 30392604
+10000 10000 3729735
+10000 10000 8361246
+10000 10000 9678512
+10000 10000 2535938
+10000 10000 33560866
+10000 10000 44753991
+10000 10000 8377264
+10000 10000 8829386
+10000 10000 10297633
+10000 10000 13767820
+10000 10000 9629090
+10000 10000 31357029
+10000 10000 22292396
+10000 10000 2532088
+10000 10000 7644630
+10000 10000 56268056
+10000 10000 23190051
+10000 10000 28659680
+10000 10000 14848652
+10000 10000 25082040
+10000 10000 4314946
+10000 10000 4407778
+10000 10000 29976156
+10000 10000 14793110
+10000 10000 6071556
+10000 10000 5411032
+10000 10000 2217116
+10000 10000 9385560
+10000 10000 9973403
+10000 10000 13733225
+10000 10000 9902487
+10000 10000 31332358
+10000 10000 6302646
+10000 10000 424292
+10000 10000 1639444
+10000 10000 23681147
+10000 10000 2567777
+10000 10000 8392199
+10000 10000 55652244
+10000 10000 31016900
+10000 10000 20841591
+10000 10000 797933
+10000 10000 17774550
+10000 10000 35634722
+10000 10000 17889724
+10000 10000 8903398
+10000 10000 10391128
+10000 10000 26196678
+10000 10000 437340
+10000 10000 16268458
+10000 10000 19570987
+10000 10000 13632821
+10000 10000 31497898
+10000 10000 1538145
+10000 10000 16662626
+10000 10000 19161874
+10000 10000 1271091
+10000 10000 3552443
+10000 10000 9813336
+10000 10000 47885696
+10000 10000 578470
+10000 10000 15378048
+10000 10000 45674748
+10000 10000 30276273
+10000 10000 9628953
+10000 10000 692637
+10000 10000 10340377
+10000 10000 18062367
+10000 10000 12095793
+10000 10000 16674355
+10000 10000 21105252
+10000 10000 13584888
+10000 10000 33642990
+10000 10000 8882679
+10000 10000 1902240
+10000 10000 6307962
+10000 10000 10100906
+10000 10000 54954470
+10000 10000 11399844
+10000 10000 7138928
+10000 10000 32011765
+10000 10000 26246649
+10000 10000 790149
+10000 10000 20068026
+10000 10000 10730896
+10000 10000 10156895
+10000 10000 27730762
+10000 10000 17869170
+10000 10000 5279800
+10000 10000 4252672
+10000 10000 4359941
+10000 10000 13391336
+10000 10000 60656902
+10000 10000 2780670
+10000 10000 43333529
+10000 10000 21549792
+10000 10000 8051553
+10000 10000 28702184
+10000 10000 21968227
+10000 10000 1505461
+10000 10000 19682024
+10000 10000 4829449
+10000 10000 19292251
+10000 10000 7297488
+10000 10000 20603779
+10000 10000 37087704
+10000 10000 5951220
+10000 10000 1493402
+10000 10000 33312192
+10000 10000 1585624
+10000 10000 15053586
+10000 10000 11155760
+10000 10000 616111
+10000 10000 15819748
+10000 10000 28550016
+10000 10000 34824936
+10000 10000 49375105
+10000 10000 7537536
+10000 10000 36949958
+10000 10000 19465523
+10000 10000 2618012
+10000 10000 11335644
+10000 10000 14646746
+10000 10000 40847557
+10000 10000 25226017
+10000 10000 27819675
+10000 10000 7000440
+10000 10000 17392883
+10000 10000 547926
+10000 10000 45678400
+10000 10000 20702694
+10000 10000 9500829
+10000 10000 32058534
+10000 10000 13970024
+10000 10000 14599107
+10000 10000 37400048
+10000 10000 8706391
+10000 10000 57418389
+10000 10000 7829700
+10000 10000 7525428
+10000 10000 31050196
+10000 10000 2702754
+10000 10000 7529236
+10000 10000 2893816
+10000 10000 35141925
+10000 10000 38191180
+10000 10000 25839895
+10000 10000 16693518
+10000 10000 3297705
+10000 10000 18684116
+10000 10000 12316228
+10000 10000 21011558
+10000 10000 20902568
+10000 10000 15716028
+10000 10000 5247524
+10000 10000 21366429
+10000 10000 16995312
+10000 10000 646228
+10000 10000 24106292
+10000 10000 1880730
+10000 10000 41008686
+10000 10000 10621800
+10000 10000 31218863
+10000 10000 1869770
+10000 10000 2204663
+10000 10000 16501290
+10000 10000 9682035
+10000 10000 8043418
+10000 10000 3566472
+10000 10000 378705
+10000 10000 26850972
+10000 10000 10664043
+10000 10000 27891692
+10000 10000 2660910
+10000 10000 13949841
+10000 10000 15173856
+10000 10000 8018082
+10000 10000 19257731
+10000 10000 24414482
+10000 10000 6112224
+10000 10000 34454240
+10000 10000 14480632
+10000 10000 7434447
+10000 10000 8221464
+10000 10000 33854058
+10000 10000 15145417
+10000 10000 45353354
+10000 10000 10309130
+10000 10000 14263922
+10000 10000 831872
+10000 10000 13716410
+10000 10000 26297832
+10000 10000 46157177
+10000 10000 27156043
+10000 10000 875139
+10000 10000 11365458
+10000 10000 5577381
+10000 10000 3638440
+10000 10000 9361765
+10000 10000 7327978
+10000 10000 13706836
+10000 10000 25201882
+10000 10000 41799411
+10000 10000 28994392
+10000 10000 5913144
+10000 10000 9822152
+10000 10000 3663463
+10000 10000 20969951
+10000 10000 6837500
+10000 10000 6282408
+10000 10000 6242157
+10000 10000 10645218
+10000 10000 11905049
+10000 10000 21873845
+10000 10000 30537688
+10000 10000 6888568
+10000 10000 6241150
+10000 10000 5628693
+10000 10000 4644141
+10000 10000 1258460
+10000 10000 44472320
+10000 10000 12155595
+10000 10000 16412215
+10000 10000 4048147
+10000 10000 226812
+10000 10000 1546211
+10000 10000 5545793
+10000 10000 19320596
+10000 10000 23176368
+10000 10000 38879418
+10000 10000 26975626
+10000 10000 10174567
+10000 10000 17878505
+10000 10000 99990000
+10000 10000 99990001
+10000 10000 99990002
+10000 10000 99990003
+10000 10000 99990004
+10000 10000 99990005
+10000 10000 99990006
+10000 10000 99990007
+10000 10000 99990008
+10000 10000 99990009
+10000 10000 99990010
+10000 10000 99990011
+10000 10000 99990012
+10000 10000 99990013
+10000 10000 99990014
+10000 10000 99990015
+10000 10000 99990016
+10000 10000 99990017
+10000 10000 99990018
+10000 10000 99990019
+10000 10000 99999981
+10000 10000 99999982
+10000 10000 99999983
+10000 10000 99999984
+10000 10000 99999985
+10000 10000 99999986
+10000 10000 99999987
+10000 10000 99999988
+10000 10000 99999989
+10000 10000 99999990
+10000 10000 99999991
+10000 10000 99999992
+10000 10000 99999993
+10000 10000 99999994
+10000 10000 99999995
+10000 10000 99999996
+10000 10000 99999997
+10000 10000 99999998
+10000 10000 99999999
+10000 10000 100000000
diff --git a/codejam_2008/src/y2008round2/B-large-practice.out b/codejam_2008/src/y2008round2/B-large-practice.out
index 9472782..df31626 100644
--- a/codejam_2008/src/y2008round2/B-large-practice.out
+++ b/codejam_2008/src/y2008round2/B-large-practice.out
@@ -1,100 +1,1000 @@
-Case #1: 1
-Case #2: 0
-Case #3: 1
-Case #4: 2
-Case #5: 6
-Case #6: 24
-Case #7: 27
-Case #8: 64
-Case #9: 63
-Case #10: 554
-Case #11: 5052
-Case #12: 47185
-Case #13: 1235847
-Case #14: 1227497
-Case #15: 11083689
-Case #16: 99758520
-Case #17: 2690349525
-Case #18: 1960855758345
-Case #19: 1960909072918
-Case #20: 52943320456260
-Case #21: 52946841469553
-Case #22: 158833271667060
-Case #23: 476490122694949
-Case #24: 1429471945580392
-Case #25: 4288606533783222
-Case #26: 4288447898181282
-Case #27: 12865254002119726
-Case #28: 38595785181347613
-Case #29: 115787174691871269
-Case #30: 347362238039287370
-Case #31: 1042085722818015233
-Case #32: 1042085619844922679
-Case #33: 3126458041935635097
-Case #34: 3126315286222741980
-Case #35: 3126251695001560389
-Case #36: 3126255144984317304
-Case #37: 3126278517774154578
-Case #38: 3126256722515093418
-Case #39: 3126258599689156653
-Case #40: 3126253716680524263
-Case #41: 3126256932945543651
-Case #42: 3126260142353586330
-Case #43: 4052555153018976267
-Case #44: 4052555153018976267
-Case #45: 4052555153018976267
-Case #46: 4052555153018976267
-Case #47: 3126257168454045699
-Case #48: 4052555153018976267
-Case #49: 4052555153018976267
-Case #50: 4052555153018976267
-Case #51: 4052555153018976267
-Case #52: 4052555153018976267
-Case #53: 4052555153018976267
-Case #54: 4052555153018976267
-Case #55: 3126255888150504852
-Case #56: 3126257113629559461
-Case #57: 3123315974552731863
-Case #58: 3126256034469921040
-Case #59: 3126256849485697629
-Case #60: 3126256908729866798
-Case #61: 3126256843542223000
-Case #62: 4052555153018976267
-Case #63: 3126256827753902882
-Case #64: 3126244177042699035
-Case #65: 4052555153018976267
-Case #66: 4052555153018976267
-Case #67: 4052555153018976267
-Case #68: 4052555153018976267
-Case #69: 4052555153018976267
-Case #70: 3126257249676362560
-Case #71: 3126256477387445168
-Case #72: 4052555153018976267
-Case #73: 4052555153018976267
-Case #74: 4052555153018976267
-Case #75: 3126256891431102367
-Case #76: 4052555153018976267
-Case #77: 4052555153018976267
-Case #78: 4052555153018976267
-Case #79: 3126256805997177673
-Case #80: 4052555153018976267
-Case #81: 4052555153018976267
-Case #82: 3126262206857073532
-Case #83: 4052555153018976267
-Case #84: 3126256831612350998
-Case #85: 3126261422741512380
-Case #86: 4052555153018976267
-Case #87: 4052555153018976267
-Case #88: 4052555153018976267
-Case #89: 3126257282301440399
-Case #90: 3126255258238421448
-Case #91: 3126256713219041948
-Case #92: 3126256504756195448
-Case #93: 3126256904062108234
-Case #94: 4052555153018976267
-Case #95: 3126254585561920475
-Case #96: 3126256591400460705
-Case #97: 3126256845829422841
-Case #98: 4052555153018976267
-Case #99: 3126257406778969053
-Case #100: 3126252869898418789
+Case #1: 0 0 1 0 0 1
+Case #2: IMPOSSIBLE
+Case #3: 0 0 1 9 1 10
+Case #4: 0 0 1 0 0 1
+Case #5: 0 0 1 1 1 2
+Case #6: 0 0 1 0 0 2
+Case #7: 0 0 1 2 1 3
+Case #8: 0 0 1 1 1 3
+Case #9: 0 0 1 0 0 3
+Case #10: 0 0 1 3 1 4
+Case #11: 0 0 1 2 1 4
+Case #12: 0 0 1 1 1 4
+Case #13: 0 0 1 0 0 4
+Case #14: 0 0 1 1 2 1
+Case #15: 0 0 0 1 2 0
+Case #16: 0 0 1 1 1 2
+Case #17: 0 0 1 0 0 2
+Case #18: 0 0 2 0 0 2
+Case #19: 0 0 2 1 1 2
+Case #20: 0 0 1 2 1 3
+Case #21: 0 0 1 1 1 3
+Case #22: 0 0 2 2 1 3
+Case #23: 0 0 1 0 0 3
+Case #24: 0 0 2 0 0 3
+Case #25: 0 0 2 1 1 3
+Case #26: 0 0 1 3 1 4
+Case #27: 0 0 1 2 1 4
+Case #28: 0 0 1 0 0 4
+Case #29: 0 0 1 1 1 4
+Case #30: 0 0 2 2 1 4
+Case #31: 0 0 2 0 0 4
+Case #32: 0 0 2 3 1 4
+Case #33: 0 0 2 1 1 4
+Case #34: 0 0 2 1 3 1
+Case #35: 0 0 1 1 3 1
+Case #36: 0 0 0 1 3 0
+Case #37: 0 0 2 1 3 1
+Case #38: 0 0 1 1 3 1
+Case #39: 0 0 0 1 3 0
+Case #40: 0 0 2 2 3 1
+Case #41: 0 0 0 2 3 0
+Case #42: 0 0 1 2 3 1
+Case #43: 0 0 1 2 1 3
+Case #44: 0 0 1 1 1 3
+Case #45: 0 0 1 0 0 3
+Case #46: 0 0 2 2 1 3
+Case #47: 0 0 2 0 0 3
+Case #48: 0 0 3 0 0 3
+Case #49: 0 0 2 1 1 3
+Case #50: 0 0 3 1 1 3
+Case #51: 0 0 3 2 1 3
+Case #52: 0 0 1 3 1 4
+Case #53: 0 0 1 2 1 4
+Case #54: 0 0 1 1 1 4
+Case #55: 0 0 1 0 0 4
+Case #56: 0 0 2 2 1 4
+Case #57: 0 0 3 3 1 4
+Case #58: 0 0 2 0 0 4
+Case #59: 0 0 3 0 0 4
+Case #60: 0 0 2 3 1 4
+Case #61: 0 0 2 1 1 4
+Case #62: 0 0 3 1 1 4
+Case #63: 0 0 3 2 1 4
+Case #64: 0 0 3 1 4 1
+Case #65: 0 0 2 1 4 1
+Case #66: 0 0 1 1 4 1
+Case #67: 0 0 0 1 4 0
+Case #68: 0 0 3 1 4 1
+Case #69: 0 0 2 1 4 1
+Case #70: 0 0 1 1 4 1
+Case #71: 0 0 0 1 4 0
+Case #72: 0 0 2 2 4 1
+Case #73: 0 0 0 2 4 0
+Case #74: 0 0 3 2 4 1
+Case #75: 0 0 1 2 4 1
+Case #76: 0 0 3 1 4 1
+Case #77: 0 0 2 1 4 1
+Case #78: 0 0 1 1 4 1
+Case #79: 0 0 0 1 4 0
+Case #80: 0 0 2 2 4 1
+Case #81: 0 0 0 2 4 0
+Case #82: 0 0 3 3 4 1
+Case #83: 0 0 0 3 4 0
+Case #84: 0 0 3 2 4 1
+Case #85: 0 0 1 2 4 1
+Case #86: 0 0 1 3 4 1
+Case #87: 0 0 2 3 4 1
+Case #88: 0 0 1 3 1 4
+Case #89: 0 0 1 2 1 4
+Case #90: 0 0 1 1 1 4
+Case #91: 0 0 1 0 0 4
+Case #92: 0 0 2 2 1 4
+Case #93: 0 0 2 0 0 4
+Case #94: 0 0 3 3 1 4
+Case #95: 0 0 3 0 0 4
+Case #96: 0 0 4 0 0 4
+Case #97: 0 0 2 3 1 4
+Case #98: 0 0 2 1 1 4
+Case #99: 0 0 3 1 1 4
+Case #100: 0 0 3 2 1 4
+Case #101: 0 0 4 1 1 4
+Case #102: 0 0 4 2 1 4
+Case #103: 0 0 4 3 1 4
+Case #104: IMPOSSIBLE
+Case #105: IMPOSSIBLE
+Case #106: IMPOSSIBLE
+Case #107: IMPOSSIBLE
+Case #108: IMPOSSIBLE
+Case #109: IMPOSSIBLE
+Case #110: IMPOSSIBLE
+Case #111: IMPOSSIBLE
+Case #112: IMPOSSIBLE
+Case #113: IMPOSSIBLE
+Case #114: IMPOSSIBLE
+Case #115: IMPOSSIBLE
+Case #116: IMPOSSIBLE
+Case #117: IMPOSSIBLE
+Case #118: IMPOSSIBLE
+Case #119: IMPOSSIBLE
+Case #120: IMPOSSIBLE
+Case #121: IMPOSSIBLE
+Case #122: IMPOSSIBLE
+Case #123: IMPOSSIBLE
+Case #124: IMPOSSIBLE
+Case #125: IMPOSSIBLE
+Case #126: IMPOSSIBLE
+Case #127: IMPOSSIBLE
+Case #128: IMPOSSIBLE
+Case #129: IMPOSSIBLE
+Case #130: IMPOSSIBLE
+Case #131: IMPOSSIBLE
+Case #132: IMPOSSIBLE
+Case #133: IMPOSSIBLE
+Case #134: IMPOSSIBLE
+Case #135: IMPOSSIBLE
+Case #136: IMPOSSIBLE
+Case #137: IMPOSSIBLE
+Case #138: IMPOSSIBLE
+Case #139: IMPOSSIBLE
+Case #140: IMPOSSIBLE
+Case #141: IMPOSSIBLE
+Case #142: IMPOSSIBLE
+Case #143: IMPOSSIBLE
+Case #144: IMPOSSIBLE
+Case #145: IMPOSSIBLE
+Case #146: IMPOSSIBLE
+Case #147: IMPOSSIBLE
+Case #148: IMPOSSIBLE
+Case #149: IMPOSSIBLE
+Case #150: IMPOSSIBLE
+Case #151: IMPOSSIBLE
+Case #152: IMPOSSIBLE
+Case #153: IMPOSSIBLE
+Case #154: IMPOSSIBLE
+Case #155: IMPOSSIBLE
+Case #156: IMPOSSIBLE
+Case #157: IMPOSSIBLE
+Case #158: IMPOSSIBLE
+Case #159: IMPOSSIBLE
+Case #160: IMPOSSIBLE
+Case #161: IMPOSSIBLE
+Case #162: IMPOSSIBLE
+Case #163: IMPOSSIBLE
+Case #164: IMPOSSIBLE
+Case #165: IMPOSSIBLE
+Case #166: IMPOSSIBLE
+Case #167: IMPOSSIBLE
+Case #168: IMPOSSIBLE
+Case #169: IMPOSSIBLE
+Case #170: IMPOSSIBLE
+Case #171: IMPOSSIBLE
+Case #172: IMPOSSIBLE
+Case #173: IMPOSSIBLE
+Case #174: IMPOSSIBLE
+Case #175: IMPOSSIBLE
+Case #176: IMPOSSIBLE
+Case #177: IMPOSSIBLE
+Case #178: IMPOSSIBLE
+Case #179: 0 0 1 7219 1 10000
+Case #180: 0 0 1 8793 1 10000
+Case #181: 0 0 1 2057 1 10000
+Case #182: 0 0 1 7018 1 10000
+Case #183: 0 0 1 7158 1 10000
+Case #184: 0 0 1 6498 1 10000
+Case #185: 0 0 1 5731 1 10000
+Case #186: 0 0 1 6601 1 10000
+Case #187: 0 0 1 4914 1 10000
+Case #188: 0 0 1 5350 1 10000
+Case #189: 0 0 1 4536 1 10000
+Case #190: 0 0 1 8574 1 10000
+Case #191: 0 0 1 6435 1 10000
+Case #192: 0 0 1 7685 1 10000
+Case #193: 0 0 1 1080 1 10000
+Case #194: 0 0 1 8983 1 10000
+Case #195: 0 0 1 1600 1 10000
+Case #196: 0 0 1 8711 1 10000
+Case #197: 0 0 2 2877 1 10000
+Case #198: 0 0 1 7928 1 10000
+Case #199: 0 0 1 8371 1 10000
+Case #200: 0 0 2 7184 1 10000
+Case #201: 0 0 4 5335 1 10000
+Case #202: 0 0 1 6300 1 10000
+Case #203: 0 0 1 4923 1 10000
+Case #204: 0 0 1 7459 1 10000
+Case #205: 0 0 2 5276 1 10000
+Case #206: 0 0 2 1608 1 10000
+Case #207: 0 0 1 5412 1 10000
+Case #208: 0 0 1 8536 1 10000
+Case #209: 0 0 4 5646 1 10000
+Case #210: 0 0 1 9112 1 10000
+Case #211: 0 0 1 8907 1 10000
+Case #212: 0 0 1 3850 1 10000
+Case #213: 0 0 1 8328 1 10000
+Case #214: 0 0 1 6664 1 10000
+Case #215: 0 0 1 7809 1 10000
+Case #216: 0 0 1 3034 1 10000
+Case #217: 0 0 6 9636 1 10000
+Case #218: 0 0 1 6278 1 10000
+Case #219: 0 0 5818 1 10000 1
+Case #220: 0 0 6221 1 10000 1
+Case #221: 0 0 9780 1 10000 1
+Case #222: 0 0 9359 1 10000 1
+Case #223: 0 0 5298 1 10000 1
+Case #224: 0 0 7125 1 10000 1
+Case #225: 0 0 1613 1 10000 1
+Case #226: 0 0 5957 1 10000 1
+Case #227: 0 0 8081 1 10000 1
+Case #228: 0 0 1515 1 10000 1
+Case #229: 0 0 4842 1 10000 1
+Case #230: 0 0 6942 1 10000 1
+Case #231: 0 0 9689 2 10000 1
+Case #232: 0 0 2475 1 10000 1
+Case #233: 0 0 9709 2 10000 1
+Case #234: 0 0 715 1 10000 1
+Case #235: 0 0 4564 1 10000 1
+Case #236: 0 0 9393 1 10000 1
+Case #237: 0 0 9400 1 10000 1
+Case #238: 0 0 6365 1 10000 1
+Case #239: 0 0 2378 2 10000 1
+Case #240: 0 0 3438 1 10000 1
+Case #241: 0 0 1031 1 10000 1
+Case #242: 0 0 5282 3 10000 1
+Case #243: 0 0 3588 1 10000 1
+Case #244: 0 0 5258 1 10000 1
+Case #245: 0 0 2288 1 10000 1
+Case #246: 0 0 9291 2 10000 1
+Case #247: 0 0 9725 2 10000 1
+Case #248: 0 0 9409 1 10000 1
+Case #249: 0 0 6465 2 10000 1
+Case #250: 0 0 2273 1 10000 1
+Case #251: 0 0 6968 3 10000 1
+Case #252: 0 0 4059 3 10000 1
+Case #253: 0 0 9547 2 10000 1
+Case #254: 0 0 8696 3 10000 1
+Case #255: 0 0 4340 1 10000 1
+Case #256: 0 0 6853 1 10000 1
+Case #257: 0 0 2829 6 10000 1
+Case #258: 0 0 4155 1 10000 1
+Case #259: 0 0 2622 780 1 8919
+Case #260: 0 0 266 65 1 8743
+Case #261: 0 0 634 6842 1 8533
+Case #262: 0 0 176 5126 1 9966
+Case #263: 0 0 68 4287 1 8760
+Case #264: 0 0 6628 569 8097 1
+Case #265: 0 0 2578 3022 7933 1
+Case #266: 0 0 451 6648 1 7970
+Case #267: 0 0 2001 215 9807 1
+Case #268: 0 0 9 2848 1 6527
+Case #269: 0 0 2506 1 7674 1
+Case #270: 0 0 1295 4216 1 5540
+Case #271: 0 0 29 2822 1 4646
+Case #272: 0 0 4050 5 7460 1
+Case #273: 0 0 8910 621 9136 1
+Case #274: 0 0 233 1893 1 6879
+Case #275: 0 0 292 3036 1 7281
+Case #276: 0 0 4856 1823 9894 1
+Case #277: 0 0 3963 367 5232 1
+Case #278: 0 0 126 3742 1 5921
+Case #279: 0 0 303 3450 1 5791
+Case #280: 0 0 30 6910 1 7353
+Case #281: 0 0 331 2286 1 5076
+Case #282: 0 0 4319 371 5528 1
+Case #283: 0 0 3894 21 9700 1
+Case #284: 0 0 91 6066 1 9011
+Case #285: 0 0 355 5944 1 6263
+Case #286: 0 0 9433 91 9689 1
+Case #287: 0 0 170 1904 1 4057
+Case #288: 0 0 288 795 7751 1
+Case #289: 0 0 1317 1124 5262 1
+Case #290: 0 0 2008 5446 1 5825
+Case #291: 0 0 2835 612 7910 1
+Case #292: 0 0 8886 19 8915 1
+Case #293: 0 0 3238 61 8791 1
+Case #294: 0 0 1830 258 4901 1
+Case #295: 0 0 2189 50 3668 1
+Case #296: 0 0 2511 7008 1 7516
+Case #297: 0 0 2167 130 8920 1
+Case #298: 0 0 46 693 1 1783
+Case #299: 0 0 396 3886 1 4776
+Case #300: 0 0 650 21 3142 1
+Case #301: 0 0 33 7482 1 9166
+Case #302: 0 0 4181 1259 8041 1
+Case #303: 0 0 1896 462 3500 1
+Case #304: 0 0 5832 550 7239 1
+Case #305: 0 0 1586 874 3059 1
+Case #306: 0 0 7243 508 9149 1
+Case #307: 0 0 211 92 3599 1
+Case #308: 0 0 1310 5218 1 7862
+Case #309: 0 0 1147 958 7099 1
+Case #310: 0 0 419 586 1 4779
+Case #311: 0 0 2826 205 4717 1
+Case #312: 0 0 6709 795 9363 1
+Case #313: 0 0 2802 648 6089 1
+Case #314: 0 0 8561 531 9388 1
+Case #315: 0 0 1135 5177 1 7687
+Case #316: 0 0 1402 852 1 7924
+Case #317: 0 0 409 4280 1 9150
+Case #318: 0 0 175 915 1 6453
+Case #319: 0 0 2727 615 7104 1
+Case #320: 0 0 104 950 1 9914
+Case #321: 0 0 128 3207 1 4134
+Case #322: 0 0 807 93 1151 1
+Case #323: 0 0 4 5223 1 6334
+Case #324: 0 0 296 4520 1 9635
+Case #325: 0 0 649 4450 1 6952
+Case #326: 0 0 3428 28 4345 1
+Case #327: 0 0 6632 211 8504 1
+Case #328: 0 0 650 2006 1 8459
+Case #329: 0 0 42 1086 1 2963
+Case #330: 0 0 3691 19 4004 1
+Case #331: 0 0 22 3802 1 7843
+Case #332: 0 0 184 8062 1 8797
+Case #333: 0 0 156 6489 1 6848
+Case #334: 0 0 197 5525 1 9859
+Case #335: 0 0 923 5611 1 6239
+Case #336: 0 0 1034 8822 1 9064
+Case #337: 0 0 68 8 1250 1
+Case #338: 0 0 1892 1917 4948 1
+Case #339: 0 0 653 920 1 8240
+Case #340: 0 0 4856 478 9502 1
+Case #341: 0 0 54 90 1 2790
+Case #342: 0 0 574 2935 8691 1
+Case #343: 0 0 602 369 9939 1
+Case #344: 0 0 354 2739 1 5736
+Case #345: 0 0 795 6462 1 9646
+Case #346: 0 0 2264 3601 1 6640
+Case #347: 0 0 751 1745 1 6977
+Case #348: 0 0 1160 1463 6400 1
+Case #349: 0 0 741 5 9033 1
+Case #350: 0 0 4577 3381 7622 1
+Case #351: 0 0 793 246 7257 1
+Case #352: 0 0 5868 68 8973 1
+Case #353: 0 0 325 7495 1 9463
+Case #354: 0 0 1951 211 5582 1
+Case #355: 0 0 1599 606 7992 1
+Case #356: 0 0 473 2334 1 4182
+Case #357: 0 0 8240 146 8691 1
+Case #358: 0 0 11 1264 1 6635
+Case #359: 0 0 1175 8374 1 10000
+Case #360: 0 0 863 1456 1 10000
+Case #361: 0 0 94 1425 1 10000
+Case #362: 0 0 2469 5880 1 10000
+Case #363: 0 0 496 1727 1 10000
+Case #364: 0 0 745 1279 1 10000
+Case #365: 0 0 1283 500 1 10000
+Case #366: 0 0 141 1133 1 10000
+Case #367: 0 0 1616 2959 1 10000
+Case #368: 0 0 3931 2488 1 10000
+Case #369: 0 0 1094 3640 1 10000
+Case #370: 0 0 1441 1275 1 10000
+Case #371: 0 0 1248 6140 1 10000
+Case #372: 0 0 4305 4458 1 10000
+Case #373: 0 0 1024 3828 1 10000
+Case #374: 0 0 1004 9015 1 10000
+Case #375: 0 0 1241 363 1 10000
+Case #376: 0 0 1547 3154 1 10000
+Case #377: 0 0 3980 6772 1 10000
+Case #378: 0 0 3365 8264 1 10000
+Case #379: 0 0 4055 5687 1 10000
+Case #380: 0 0 2083 3150 1 10000
+Case #381: 0 0 804 7122 1 10000
+Case #382: 0 0 1003 7988 1 10000
+Case #383: 0 0 1627 6163 1 10000
+Case #384: 0 0 1188 6717 1 10000
+Case #385: 0 0 219 4206 1 10000
+Case #386: 0 0 2412 2333 1 10000
+Case #387: 0 0 526 50 1 10000
+Case #388: 0 0 2278 5680 1 10000
+Case #389: 0 0 1918 8921 1 10000
+Case #390: 0 0 1057 8399 1 10000
+Case #391: 0 0 290 5884 1 10000
+Case #392: 0 0 983 3380 1 10000
+Case #393: 0 0 266 1419 1 10000
+Case #394: 0 0 3060 2447 1 10000
+Case #395: 0 0 3007 3926 1 10000
+Case #396: 0 0 1155 9944 1 10000
+Case #397: 0 0 1974 2812 1 10000
+Case #398: 0 0 1097 9732 1 10000
+Case #399: 0 0 1914 4034 1 10000
+Case #400: 0 0 2137 8152 1 10000
+Case #401: 0 0 924 961 1 10000
+Case #402: 0 0 338 8921 1 10000
+Case #403: 0 0 731 1691 1 10000
+Case #404: 0 0 742 284 1 10000
+Case #405: 0 0 968 1606 1 10000
+Case #406: 0 0 1618 1896 1 10000
+Case #407: 0 0 1042 5229 1 10000
+Case #408: 0 0 400 1254 1 10000
+Case #409: 0 0 1829 9109 1 10000
+Case #410: 0 0 1449 980 1 10000
+Case #411: 0 0 1659 1312 1 10000
+Case #412: 0 0 67 8643 1 10000
+Case #413: 0 0 1345 5585 1 10000
+Case #414: 0 0 737 1580 1 10000
+Case #415: 0 0 468 4077 1 10000
+Case #416: 0 0 168 8106 1 10000
+Case #417: 0 0 865 1587 1 10000
+Case #418: 0 0 2597 2975 1 10000
+Case #419: 0 0 2133 7520 1 10000
+Case #420: 0 0 2224 910 1 10000
+Case #421: 0 0 3383 787 1 10000
+Case #422: 0 0 3545 6944 1 10000
+Case #423: 0 0 538 1240 1 10000
+Case #424: 0 0 3744 5985 1 10000
+Case #425: 0 0 873 8691 1 10000
+Case #426: 0 0 3841 5302 1 10000
+Case #427: 0 0 1700 9031 1 10000
+Case #428: 0 0 1285 3345 1 10000
+Case #429: 0 0 819 8422 1 10000
+Case #430: 0 0 314 4071 1 10000
+Case #431: 0 0 251 168 1 10000
+Case #432: 0 0 2391 4392 1 10000
+Case #433: 0 0 3027 3884 1 10000
+Case #434: 0 0 3428 7839 1 10000
+Case #435: 0 0 1273 6632 1 10000
+Case #436: 0 0 724 270 1 10000
+Case #437: 0 0 1581 144 1 10000
+Case #438: 0 0 3189 8346 1 10000
+Case #439: 0 0 1038 4960 1 10000
+Case #440: 0 0 1445 4110 1 10000
+Case #441: 0 0 500 2109 1 10000
+Case #442: 0 0 1486 2919 1 10000
+Case #443: 0 0 281 7497 1 10000
+Case #444: 0 0 1643 2699 1 10000
+Case #445: 0 0 2533 2558 1 10000
+Case #446: 0 0 139 2031 1 10000
+Case #447: 0 0 3366 4845 1 10000
+Case #448: 0 0 5659 2958 1 10000
+Case #449: 0 0 1973 3828 1 10000
+Case #450: 0 0 418 9828 1 10000
+Case #451: 0 0 1361 9854 1 10000
+Case #452: 0 0 1935 7915 1 10000
+Case #453: 0 0 352 8980 1 10000
+Case #454: 0 0 566 4386 1 10000
+Case #455: 0 0 502 175 1 10000
+Case #456: 0 0 2931 8273 1 10000
+Case #457: 0 0 673 8029 1 10000
+Case #458: 0 0 1070 2383 1 10000
+Case #459: 0 0 1072 7588 1 10000
+Case #460: 0 0 39 4120 1 10000
+Case #461: 0 0 441 7936 1 10000
+Case #462: 0 0 1077 5142 1 10000
+Case #463: 0 0 789 2462 1 10000
+Case #464: 0 0 2864 7946 1 10000
+Case #465: 0 0 2347 6014 1 10000
+Case #466: 0 0 131 4395 1 10000
+Case #467: 0 0 311 8188 1 10000
+Case #468: 0 0 721 5588 1 10000
+Case #469: 0 0 5414 5900 1 10000
+Case #470: 0 0 1486 5634 1 10000
+Case #471: 0 0 485 364 1 10000
+Case #472: 0 0 630 8296 1 10000
+Case #473: 0 0 4293 4492 1 10000
+Case #474: 0 0 387 3686 1 10000
+Case #475: 0 0 979 8368 1 10000
+Case #476: 0 0 3990 2613 1 10000
+Case #477: 0 0 940 1555 1 10000
+Case #478: 0 0 603 6919 1 10000
+Case #479: 0 0 797 908 1 10000
+Case #480: 0 0 1065 977 1 10000
+Case #481: 0 0 2002 8854 1 10000
+Case #482: 0 0 530 8304 1 10000
+Case #483: 0 0 963 695 1 10000
+Case #484: 0 0 1631 4638 1 10000
+Case #485: 0 0 1396 6630 1 10000
+Case #486: 0 0 721 2286 1 10000
+Case #487: 0 0 134 3493 1 10000
+Case #488: 0 0 417 5902 1 10000
+Case #489: 0 0 814 643 1 10000
+Case #490: 0 0 4844 6531 1 10000
+Case #491: 0 0 1558 4840 1 10000
+Case #492: 0 0 570 3668 1 10000
+Case #493: 0 0 640 397 1 10000
+Case #494: 0 0 3207 3162 1 10000
+Case #495: 0 0 6858 348 1 10000
+Case #496: 0 0 3039 6219 1 10000
+Case #497: 0 0 3590 9108 1 10000
+Case #498: 0 0 3808 8644 1 10000
+Case #499: 0 0 326 479 1 10000
+Case #500: 0 0 735 2571 1 10000
+Case #501: 0 0 2758 4211 1 10000
+Case #502: 0 0 47 5836 1 10000
+Case #503: 0 0 4925 5560 1 10000
+Case #504: 0 0 3524 7503 1 10000
+Case #505: 0 0 1291 8698 1 10000
+Case #506: 0 0 248 212 1 10000
+Case #507: 0 0 137 88 1 10000
+Case #508: 0 0 1741 3654 1 10000
+Case #509: 0 0 2729 8792 1 10000
+Case #510: 0 0 209 636 1 10000
+Case #511: 0 0 851 4511 1 10000
+Case #512: 0 0 142 8699 1 10000
+Case #513: 0 0 478 6516 1 10000
+Case #514: 0 0 3888 438 1 10000
+Case #515: 0 0 476 9019 1 10000
+Case #516: 0 0 2948 6174 1 10000
+Case #517: 0 0 2706 4994 1 10000
+Case #518: 0 0 3199 7511 1 10000
+Case #519: 0 0 513 6390 1 10000
+Case #520: 0 0 434 8466 1 10000
+Case #521: 0 0 581 1021 1 10000
+Case #522: 0 0 3994 5717 1 10000
+Case #523: 0 0 2995 3463 1 10000
+Case #524: 0 0 759 4516 1 10000
+Case #525: 0 0 1949 8906 1 10000
+Case #526: 0 0 312 2874 1 10000
+Case #527: 0 0 946 3285 1 10000
+Case #528: 0 0 880 2102 1 10000
+Case #529: 0 0 2905 5181 1 10000
+Case #530: 0 0 1022 2413 1 10000
+Case #531: 0 0 1219 4387 1 10000
+Case #532: 0 0 630 3839 1 10000
+Case #533: 0 0 2590 2575 1 10000
+Case #534: 0 0 2532 508 1 10000
+Case #535: 0 0 681 238 1 10000
+Case #536: 0 0 1672 7870 1 10000
+Case #537: 0 0 2448 3294 1 10000
+Case #538: 0 0 7 9637 1 10000
+Case #539: 0 0 2672 3638 1 10000
+Case #540: 0 0 1007 8300 1 10000
+Case #541: 0 0 79 9490 1 10000
+Case #542: 0 0 1976 8150 1 10000
+Case #543: 0 0 358 6060 1 10000
+Case #544: 0 0 35 4965 1 10000
+Case #545: 0 0 1622 8242 1 10000
+Case #546: 0 0 538 6770 1 10000
+Case #547: 0 0 310 1303 1 10000
+Case #548: 0 0 154 4550 1 10000
+Case #549: 0 0 834 7480 1 10000
+Case #550: 0 0 66 4526 1 10000
+Case #551: 0 0 61 4298 1 10000
+Case #552: 0 0 534 2543 1 10000
+Case #553: 0 0 191 4094 1 10000
+Case #554: 0 0 1448 9566 1 10000
+Case #555: 0 0 1596 9028 1 10000
+Case #556: 0 0 61 5137 1 10000
+Case #557: 0 0 5884 4153 1 10000
+Case #558: 0 0 2464 1434 1 10000
+Case #559: 0 0 2161 7823 1 10000
+Case #560: 0 0 687 550 1 10000
+Case #561: 0 0 2543 100 1 10000
+Case #562: 0 0 1735 7844 1 10000
+Case #563: 0 0 601 7500 1 10000
+Case #564: 0 0 3643 5764 1 10000
+Case #565: 0 0 562 3882 1 10000
+Case #566: 0 0 257 4010 1 10000
+Case #567: 0 0 2849 903 1 10000
+Case #568: 0 0 5 8449 1 10000
+Case #569: 0 0 992 1336 1 10000
+Case #570: 0 0 482 4766 1 10000
+Case #571: 0 0 2773 920 1 10000
+Case #572: 0 0 297 1866 1 10000
+Case #573: 0 0 2732 780 1 10000
+Case #574: 0 0 561 7409 1 10000
+Case #575: 0 0 63 9560 1 10000
+Case #576: 0 0 5727 2847 1 10000
+Case #577: 0 0 200 5091 1 10000
+Case #578: 0 0 769 9358 1 10000
+Case #579: 0 0 174 1941 1 10000
+Case #580: 0 0 372 9246 1 10000
+Case #581: 0 0 3960 5055 1 10000
+Case #582: 0 0 4078 1798 1 10000
+Case #583: 0 0 1524 8118 1 10000
+Case #584: 0 0 1011 7558 1 10000
+Case #585: 0 0 4255 5932 1 10000
+Case #586: 0 0 84 9473 1 10000
+Case #587: 0 0 100 4075 1 10000
+Case #588: 0 0 1524 1745 1 10000
+Case #589: 0 0 1564 5712 1 10000
+Case #590: 0 0 962 6225 1 10000
+Case #591: 0 0 1239 4099 1 10000
+Case #592: 0 0 2137 7660 1 10000
+Case #593: 0 0 434 391 1 10000
+Case #594: 0 0 484 1650 1 10000
+Case #595: 0 0 551 342 1 10000
+Case #596: 0 0 1677 3696 1 10000
+Case #597: 0 0 5 6053 1 10000
+Case #598: 0 0 2091 5866 1 10000
+Case #599: 0 0 2732 7968 1 10000
+Case #600: 0 0 164 6337 1 10000
+Case #601: 0 0 1560 9557 1 10000
+Case #602: 0 0 152 5907 1 10000
+Case #603: 0 0 604 9085 1 10000
+Case #604: 0 0 3411 7021 1 10000
+Case #605: 0 0 832 9970 1 10000
+Case #606: 0 0 206 4174 1 10000
+Case #607: 0 0 2036 4727 1 10000
+Case #608: 0 0 2934 3420 1 10000
+Case #609: 0 0 551 3517 1 10000
+Case #610: 0 0 3 1424 1 10000
+Case #611: 0 0 174 9471 1 10000
+Case #612: 0 0 535 4530 1 10000
+Case #613: 0 0 2366 7460 1 10000
+Case #614: 0 0 610 5157 1 10000
+Case #615: 0 0 2679 6331 1 10000
+Case #616: 0 0 3214 1486 1 10000
+Case #617: 0 0 1188 4596 1 10000
+Case #618: 0 0 217 2180 1 10000
+Case #619: 0 0 2498 17 1 10000
+Case #620: 0 0 393 8406 1 10000
+Case #621: 0 0 666 6764 1 10000
+Case #622: 0 0 857 8641 1 10000
+Case #623: 0 0 1060 2600 1 10000
+Case #624: 0 0 1147 7537 1 10000
+Case #625: 0 0 20 4297 1 10000
+Case #626: 0 0 739 6455 1 10000
+Case #627: 0 0 2387 9156 1 10000
+Case #628: 0 0 1681 8025 1 10000
+Case #629: 0 0 1198 6653 1 10000
+Case #630: 0 0 72 4641 1 10000
+Case #631: 0 0 1810 1129 1 10000
+Case #632: 0 0 1301 9317 1 10000
+Case #633: 0 0 749 3554 1 10000
+Case #634: 0 0 577 4002 1 10000
+Case #635: 0 0 737 5284 1 10000
+Case #636: 0 0 1132 6497 1 10000
+Case #637: 0 0 401 4903 1 10000
+Case #638: 0 0 2888 7343 1 10000
+Case #639: 0 0 1287 5941 1 10000
+Case #640: 0 0 6726 8784 1 10000
+Case #641: 0 0 2799 4366 1 10000
+Case #642: 0 0 441 8211 1 10000
+Case #643: 0 0 120 5886 1 10000
+Case #644: 0 0 3345 7526 1 10000
+Case #645: 0 0 1320 3392 1 10000
+Case #646: 0 0 667 1100 1 10000
+Case #647: 0 0 3136 9640 1 10000
+Case #648: 0 0 2883 7116 1 10000
+Case #649: 0 0 577 1956 1 10000
+Case #650: 0 0 889 4833 1 10000
+Case #651: 0 0 93 6900 1 10000
+Case #652: 0 0 2066 5379 1 10000
+Case #653: 0 0 2395 4581 1 10000
+Case #654: 0 0 971 8978 1 10000
+Case #655: 0 0 663 2643 1 10000
+Case #656: 0 0 4394 9173 1 10000
+Case #657: 0 0 139 4052 1 10000
+Case #658: 0 0 877 5367 1 10000
+Case #659: 0 0 301 6240 1 10000
+Case #660: 0 0 2531 6456 1 10000
+Case #661: 0 0 1511 8699 1 10000
+Case #662: 0 0 2866 6955 1 10000
+Case #663: 0 0 2300 6552 1 10000
+Case #664: 0 0 2279 1860 1 10000
+Case #665: 0 0 639 7780 1 10000
+Case #666: 0 0 2582 3016 1 10000
+Case #667: 0 0 511 9972 1 10000
+Case #668: 0 0 201 5778 1 10000
+Case #669: 0 0 1040 6390 1 10000
+Case #670: 0 0 3176 2222 1 10000
+Case #671: 0 0 38 9694 1 10000
+Case #672: 0 0 1040 8740 1 10000
+Case #673: 0 0 3208 9710 1 10000
+Case #674: 0 0 2615 9000 1 10000
+Case #675: 0 0 674 8696 1 10000
+Case #676: 0 0 456 240 1 10000
+Case #677: 0 0 1487 2803 1 10000
+Case #678: 0 0 937 8500 1 10000
+Case #679: 0 0 1317 680 1 10000
+Case #680: 0 0 64 1012 1 10000
+Case #681: 0 0 3873 745 1 10000
+Case #682: 0 0 1725 9230 1 10000
+Case #683: 0 0 1403 7904 1 10000
+Case #684: 0 0 797 9341 1 10000
+Case #685: 0 0 3779 3259 1 10000
+Case #686: 0 0 1810 3524 1 10000
+Case #687: 0 0 1765 1433 1 10000
+Case #688: 0 0 829 5920 1 10000
+Case #689: 0 0 1657 9802 1 10000
+Case #690: 0 0 59 6594 1 10000
+Case #691: 0 0 377 7422 1 10000
+Case #692: 0 0 1068 484 1 10000
+Case #693: 0 0 2477 5434 1 10000
+Case #694: 0 0 592 1223 1 10000
+Case #695: 0 0 2041 6148 1 10000
+Case #696: 0 0 807 430 1 10000
+Case #697: 0 0 971 2078 1 10000
+Case #698: 0 0 1945 1667 1 10000
+Case #699: 0 0 727 8056 1 10000
+Case #700: 0 0 95 7454 1 10000
+Case #701: 0 0 573 8256 1 10000
+Case #702: 0 0 1303 406 1 10000
+Case #703: 0 0 393 210 1 10000
+Case #704: 0 0 843 371 1 10000
+Case #705: 0 0 853 3848 1 10000
+Case #706: 0 0 594 865 1 10000
+Case #707: 0 0 2158 4882 1 10000
+Case #708: 0 0 102 8197 1 10000
+Case #709: 0 0 1000 1959 1 10000
+Case #710: 0 0 67 5160 1 10000
+Case #711: 0 0 1540 5023 1 10000
+Case #712: 0 0 136 1698 1 10000
+Case #713: 0 0 5604 4105 1 10000
+Case #714: 0 0 2679 2166 1 10000
+Case #715: 0 0 853 302 1 10000
+Case #716: 0 0 435 7589 1 10000
+Case #717: 0 0 1821 401 1 10000
+Case #718: 0 0 1787 2862 1 10000
+Case #719: 0 0 1996 2595 1 10000
+Case #720: 0 0 57 4156 1 10000
+Case #721: 0 0 3154 4210 1 10000
+Case #722: 0 0 1555 4732 1 10000
+Case #723: 0 0 2773 5993 1 10000
+Case #724: 0 0 1853 5392 1 10000
+Case #725: 0 0 1228 8113 1 10000
+Case #726: 0 0 785 4234 1 10000
+Case #727: 0 0 3040 7396 1 10000
+Case #728: 0 0 373 265 1 10000
+Case #729: 0 0 837 8754 1 10000
+Case #730: 0 0 968 1488 1 10000
+Case #731: 0 0 254 4062 1 10000
+Case #732: 0 0 3357 9134 1 10000
+Case #733: 0 0 4476 6009 1 10000
+Case #734: 0 0 838 2736 1 10000
+Case #735: 0 0 883 614 1 10000
+Case #736: 0 0 1030 2367 1 10000
+Case #737: 0 0 1377 2180 1 10000
+Case #738: 0 0 963 910 1 10000
+Case #739: 0 0 3136 2971 1 10000
+Case #740: 0 0 2230 7604 1 10000
+Case #741: 0 0 254 7912 1 10000
+Case #742: 0 0 765 5370 1 10000
+Case #743: 0 0 5627 1944 1 10000
+Case #744: 0 0 2320 9949 1 10000
+Case #745: 0 0 2866 320 1 10000
+Case #746: 0 0 1485 1348 1 10000
+Case #747: 0 0 2509 7960 1 10000
+Case #748: 0 0 432 5054 1 10000
+Case #749: 0 0 441 2222 1 10000
+Case #750: 0 0 2998 3844 1 10000
+Case #751: 0 0 1480 6890 1 10000
+Case #752: 0 0 608 8444 1 10000
+Case #753: 0 0 542 8968 1 10000
+Case #754: 0 0 222 2884 1 10000
+Case #755: 0 0 939 4440 1 10000
+Case #756: 0 0 998 6597 1 10000
+Case #757: 0 0 1374 6775 1 10000
+Case #758: 0 0 991 7513 1 10000
+Case #759: 0 0 3134 7642 1 10000
+Case #760: 0 0 631 7354 1 10000
+Case #761: 0 0 43 5708 1 10000
+Case #762: 0 0 164 556 1 10000
+Case #763: 0 0 2369 8853 1 10000
+Case #764: 0 0 257 2223 1 10000
+Case #765: 0 0 840 7801 1 10000
+Case #766: 0 0 5566 7756 1 10000
+Case #767: 0 0 3102 3100 1 10000
+Case #768: 0 0 2085 8409 1 10000
+Case #769: 0 0 80 2067 1 10000
+Case #770: 0 0 1778 5450 1 10000
+Case #771: 0 0 3564 5278 1 10000
+Case #772: 0 0 1789 276 1 10000
+Case #773: 0 0 891 6602 1 10000
+Case #774: 0 0 1040 8872 1 10000
+Case #775: 0 0 2620 3322 1 10000
+Case #776: 0 0 44 2660 1 10000
+Case #777: 0 0 1627 1542 1 10000
+Case #778: 0 0 1958 9013 1 10000
+Case #779: 0 0 1364 7179 1 10000
+Case #780: 0 0 3150 2102 1 10000
+Case #781: 0 0 154 1855 1 10000
+Case #782: 0 0 1667 7374 1 10000
+Case #783: 0 0 1917 8126 1 10000
+Case #784: 0 0 128 8909 1 10000
+Case #785: 0 0 356 7557 1 10000
+Case #786: 0 0 982 6664 1 10000
+Case #787: 0 0 4789 4304 1 10000
+Case #788: 0 0 58 1530 1 10000
+Case #789: 0 0 1538 1952 1 10000
+Case #790: 0 0 4568 5252 1 10000
+Case #791: 0 0 3028 3727 1 10000
+Case #792: 0 0 963 1047 1 10000
+Case #793: 0 0 70 7363 1 10000
+Case #794: 0 0 1035 9623 1 10000
+Case #795: 0 0 1807 7633 1 10000
+Case #796: 0 0 1210 4207 1 10000
+Case #797: 0 0 1668 5645 1 10000
+Case #798: 0 0 2111 4748 1 10000
+Case #799: 0 0 1359 5112 1 10000
+Case #800: 0 0 3365 7010 1 10000
+Case #801: 0 0 889 7321 1 10000
+Case #802: 0 0 191 7760 1 10000
+Case #803: 0 0 631 2038 1 10000
+Case #804: 0 0 1011 9094 1 10000
+Case #805: 0 0 5496 5530 1 10000
+Case #806: 0 0 1140 156 1 10000
+Case #807: 0 0 714 1072 1 10000
+Case #808: 0 0 3202 8235 1 10000
+Case #809: 0 0 2625 3351 1 10000
+Case #810: 0 0 80 9851 1 10000
+Case #811: 0 0 2007 1974 1 10000
+Case #812: 0 0 1074 9104 1 10000
+Case #813: 0 0 1016 3105 1 10000
+Case #814: 0 0 2774 9238 1 10000
+Case #815: 0 0 1787 830 1 10000
+Case #816: 0 0 528 200 1 10000
+Case #817: 0 0 426 7328 1 10000
+Case #818: 0 0 436 59 1 10000
+Case #819: 0 0 1340 8664 1 10000
+Case #820: 0 0 6066 3098 1 10000
+Case #821: 0 0 279 9330 1 10000
+Case #822: 0 0 4334 6471 1 10000
+Case #823: 0 0 2155 208 1 10000
+Case #824: 0 0 806 8447 1 10000
+Case #825: 0 0 2871 7816 1 10000
+Case #826: 0 0 2197 1773 1 10000
+Case #827: 0 0 151 4539 1 10000
+Case #828: 0 0 1969 7976 1 10000
+Case #829: 0 0 483 551 1 10000
+Case #830: 0 0 1930 7749 1 10000
+Case #831: 0 0 730 2512 1 10000
+Case #832: 0 0 2061 6221 1 10000
+Case #833: 0 0 3709 2296 1 10000
+Case #834: 0 0 596 8780 1 10000
+Case #835: 0 0 150 6598 1 10000
+Case #836: 0 0 3332 7808 1 10000
+Case #837: 0 0 159 4376 1 10000
+Case #838: 0 0 1506 6414 1 10000
+Case #839: 0 0 1116 4240 1 10000
+Case #840: 0 0 62 3889 1 10000
+Case #841: 0 0 1582 252 1 10000
+Case #842: 0 0 2856 9984 1 10000
+Case #843: 0 0 3483 5064 1 10000
+Case #844: 0 0 4938 4895 1 10000
+Case #845: 0 0 754 2464 1 10000
+Case #846: 0 0 3695 42 1 10000
+Case #847: 0 0 1947 4477 1 10000
+Case #848: 0 0 262 1988 1 10000
+Case #849: 0 0 1134 4356 1 10000
+Case #850: 0 0 1465 3254 1 10000
+Case #851: 0 0 4085 2443 1 10000
+Case #852: 0 0 2523 3983 1 10000
+Case #853: 0 0 2782 325 1 10000
+Case #854: 0 0 701 9560 1 10000
+Case #855: 0 0 1740 7117 1 10000
+Case #856: 0 0 55 2074 1 10000
+Case #857: 0 0 4568 1600 1 10000
+Case #858: 0 0 2071 7306 1 10000
+Case #859: 0 0 951 9171 1 10000
+Case #860: 0 0 3206 1466 1 10000
+Case #861: 0 0 1398 9976 1 10000
+Case #862: 0 0 1460 893 1 10000
+Case #863: 0 0 3741 9952 1 10000
+Case #864: 0 0 871 3609 1 10000
+Case #865: 0 0 5742 1611 1 10000
+Case #866: 0 0 783 300 1 10000
+Case #867: 0 0 753 4572 1 10000
+Case #868: 0 0 3106 9804 1 10000
+Case #869: 0 0 271 7246 1 10000
+Case #870: 0 0 753 764 1 10000
+Case #871: 0 0 290 6184 1 10000
+Case #872: 0 0 3515 8075 1 10000
+Case #873: 0 0 3820 8820 1 10000
+Case #874: 0 0 2584 105 1 10000
+Case #875: 0 0 1670 6482 1 10000
+Case #876: 0 0 330 2295 1 10000
+Case #877: 0 0 1869 5884 1 10000
+Case #878: 0 0 1232 3772 1 10000
+Case #879: 0 0 2102 8442 1 10000
+Case #880: 0 0 2091 7432 1 10000
+Case #881: 0 0 1572 3972 1 10000
+Case #882: 0 0 525 2476 1 10000
+Case #883: 0 0 2137 3571 1 10000
+Case #884: 0 0 1700 4688 1 10000
+Case #885: 0 0 65 3772 1 10000
+Case #886: 0 0 2411 3708 1 10000
+Case #887: 0 0 189 9270 1 10000
+Case #888: 0 0 4101 1314 1 10000
+Case #889: 0 0 1063 8200 1 10000
+Case #890: 0 0 3122 1137 1 10000
+Case #891: 0 0 187 230 1 10000
+Case #892: 0 0 221 5337 1 10000
+Case #893: 0 0 1651 8710 1 10000
+Case #894: 0 0 969 7965 1 10000
+Case #895: 0 0 805 6582 1 10000
+Case #896: 0 0 357 3528 1 10000
+Case #897: 0 0 38 1295 1 10000
+Case #898: 0 0 2686 9028 1 10000
+Case #899: 0 0 1067 5957 1 10000
+Case #900: 0 0 2790 8308 1 10000
+Case #901: 0 0 267 9090 1 10000
+Case #902: 0 0 1395 159 1 10000
+Case #903: 0 0 1518 6144 1 10000
+Case #904: 0 0 802 1918 1 10000
+Case #905: 0 0 1926 2269 1 10000
+Case #906: 0 0 2442 5518 1 10000
+Case #907: 0 0 612 7776 1 10000
+Case #908: 0 0 3446 5760 1 10000
+Case #909: 0 0 1449 9368 1 10000
+Case #910: 0 0 744 5553 1 10000
+Case #911: 0 0 823 8536 1 10000
+Case #912: 0 0 3386 5942 1 10000
+Case #913: 0 0 1515 4583 1 10000
+Case #914: 0 0 4536 6646 1 10000
+Case #915: 0 0 1031 870 1 10000
+Case #916: 0 0 1427 6078 1 10000
+Case #917: 0 0 84 8128 1 10000
+Case #918: 0 0 1372 3590 1 10000
+Case #919: 0 0 2630 2168 1 10000
+Case #920: 0 0 4616 2823 1 10000
+Case #921: 0 0 2716 3957 1 10000
+Case #922: 0 0 88 4861 1 10000
+Case #923: 0 0 1137 4542 1 10000
+Case #924: 0 0 558 2619 1 10000
+Case #925: 0 0 364 1560 1 10000
+Case #926: 0 0 937 8235 1 10000
+Case #927: 0 0 733 2022 1 10000
+Case #928: 0 0 1371 3164 1 10000
+Case #929: 0 0 2521 8118 1 10000
+Case #930: 0 0 4180 589 1 10000
+Case #931: 0 0 2900 5608 1 10000
+Case #932: 0 0 592 6856 1 10000
+Case #933: 0 0 983 7848 1 10000
+Case #934: 0 0 367 6537 1 10000
+Case #935: 0 0 2097 49 1 10000
+Case #936: 0 0 684 2500 1 10000
+Case #937: 0 0 629 7592 1 10000
+Case #938: 0 0 625 7843 1 10000
+Case #939: 0 0 1065 4782 1 10000
+Case #940: 0 0 1191 4951 1 10000
+Case #941: 0 0 2188 6155 1 10000
+Case #942: 0 0 3054 2312 1 10000
+Case #943: 0 0 689 1432 1 10000
+Case #944: 0 0 625 8850 1 10000
+Case #945: 0 0 563 1307 1 10000
+Case #946: 0 0 465 5859 1 10000
+Case #947: 0 0 126 1540 1 10000
+Case #948: 0 0 4448 7680 1 10000
+Case #949: 0 0 1216 4405 1 10000
+Case #950: 0 0 1642 7785 1 10000
+Case #951: 0 0 405 1853 1 10000
+Case #952: 0 0 23 3188 1 10000
+Case #953: 0 0 155 3789 1 10000
+Case #954: 0 0 555 4207 1 10000
+Case #955: 0 0 1933 9404 1 10000
+Case #956: 0 0 2318 3632 1 10000
+Case #957: 0 0 3888 582 1 10000
+Case #958: 0 0 2698 4374 1 10000
+Case #959: 0 0 1018 5433 1 10000
+Case #960: 0 0 1788 1495 1 10000
+Case #961: 0 0 9999 0 0 10000
+Case #962: 0 0 10000 9999 1 10000
+Case #963: 0 0 10000 9998 1 10000
+Case #964: 0 0 10000 9997 1 10000
+Case #965: 0 0 10000 9996 1 10000
+Case #966: 0 0 10000 9995 1 10000
+Case #967: 0 0 10000 9994 1 10000
+Case #968: 0 0 10000 9993 1 10000
+Case #969: 0 0 10000 9992 1 10000
+Case #970: 0 0 10000 9991 1 10000
+Case #971: 0 0 10000 9990 1 10000
+Case #972: 0 0 10000 9989 1 10000
+Case #973: 0 0 10000 9988 1 10000
+Case #974: 0 0 10000 9987 1 10000
+Case #975: 0 0 10000 9986 1 10000
+Case #976: 0 0 10000 9985 1 10000
+Case #977: 0 0 10000 9984 1 10000
+Case #978: 0 0 10000 9983 1 10000
+Case #979: 0 0 10000 9982 1 10000
+Case #980: 0 0 10000 9981 1 10000
+Case #981: 0 0 10000 19 1 10000
+Case #982: 0 0 10000 18 1 10000
+Case #983: 0 0 10000 17 1 10000
+Case #984: 0 0 10000 16 1 10000
+Case #985: 0 0 10000 15 1 10000
+Case #986: 0 0 10000 14 1 10000
+Case #987: 0 0 10000 13 1 10000
+Case #988: 0 0 10000 12 1 10000
+Case #989: 0 0 10000 11 1 10000
+Case #990: 0 0 10000 10 1 10000
+Case #991: 0 0 10000 9 1 10000
+Case #992: 0 0 10000 8 1 10000
+Case #993: 0 0 10000 7 1 10000
+Case #994: 0 0 10000 6 1 10000
+Case #995: 0 0 10000 5 1 10000
+Case #996: 0 0 10000 4 1 10000
+Case #997: 0 0 10000 3 1 10000
+Case #998: 0 0 10000 2 1 10000
+Case #999: 0 0 10000 1 1 10000
+Case #1000: 0 0 10000 0 0 10000
diff --git a/codejam_2008/src/y2008round2/B-small-practice.in b/codejam_2008/src/y2008round2/B-small-practice.in
index e17f19c..9706b1f 100644
--- a/codejam_2008/src/y2008round2/B-small-practice.in
+++ b/codejam_2008/src/y2008round2/B-small-practice.in
@@ -1,101 +1,1001 @@
-100
-0
-1
-9
-13
-011
-277
-413
-0876
-7192
-7329
-8126
-9893
-12345
-17214
-20204
-160176
-1566843
-9716463
-54275347
-84091195
-91920744
-216589640
-845048810
-3747766429
-4802642960
-8224853717
-9712606483
-19982103842
-830497247155
-900059026267
-926804404288
-0000000000277
-0000000007329
-0000000017214
-0000000160176
-0000009716463
-0000091920744
-0000555005000
-0000845048810
-0004288666440
-0008224853717
-0019982103842
-0066006333660
-0266408208048
-0500550055050
-0550050000505
-0555000555550
-0555550500505
-0603063033330
-0800428008208
-0801564185288
-0926804404288
-1087830939945
-1111111111111
-1583319926819
-1854109578624
-2208684408826
-2282622822428
-3006306630360
-3076293173315
-3139233861342
-3363600606666
-3719669768636
-3824130392011
-4746598597199
-4787157013058
-4804248428846
-4859618176134
-4938069459189
-5005000000050
-5050500005000
-5149017057386
-5547883568237
-5550055055005
-5550055550005
-5555000555050
-6066446228844
-6204689097259
-6336663000030
-6360660306000
-6363633000033
-6600066606363
-6603063333033
-6603330660006
-6899770633780
-7384787452228
-7777777777777
-8006422004864
-8085122681688
-8148388648124
-8497502656195
-8604680006424
-8617183596076
-8668828424088
-8855851047012
-8968834961434
-9321829612918
-9433879877471
-9655492462320
-9929263750831
+1000
+1 1 1
+1 2 64
+10 10 1
+1 1 1
+1 2 1
+1 2 2
+1 3 1
+1 3 2
+1 3 3
+1 4 1
+1 4 2
+1 4 3
+1 4 4
+2 1 1
+2 1 2
+2 2 1
+2 2 2
+2 2 4
+2 2 3
+2 3 1
+2 3 2
+2 3 4
+2 3 3
+2 3 6
+2 3 5
+2 4 1
+2 4 2
+2 4 4
+2 4 3
+2 4 6
+2 4 8
+2 4 5
+2 4 7
+3 1 1
+3 1 2
+3 1 3
+3 2 1
+3 2 2
+3 2 3
+3 2 4
+3 2 6
+3 2 5
+3 3 1
+3 3 2
+3 3 3
+3 3 4
+3 3 6
+3 3 9
+3 3 5
+3 3 8
+3 3 7
+3 4 1
+3 4 2
+3 4 3
+3 4 4
+3 4 6
+3 4 9
+3 4 8
+3 4 12
+3 4 5
+3 4 7
+3 4 11
+3 4 10
+4 1 1
+4 1 2
+4 1 3
+4 1 4
+4 2 1
+4 2 2
+4 2 3
+4 2 4
+4 2 6
+4 2 8
+4 2 5
+4 2 7
+4 3 1
+4 3 2
+4 3 3
+4 3 4
+4 3 6
+4 3 8
+4 3 9
+4 3 12
+4 3 5
+4 3 7
+4 3 11
+4 3 10
+4 4 1
+4 4 2
+4 4 3
+4 4 4
+4 4 6
+4 4 8
+4 4 9
+4 4 12
+4 4 16
+4 4 5
+4 4 7
+4 4 11
+4 4 10
+4 4 15
+4 4 14
+4 4 13
+1 1 2
+1 1 3
+1 1 4
+1 2 3
+1 2 4
+1 2 5
+1 3 4
+1 3 5
+1 3 6
+1 4 5
+1 4 6
+1 4 7
+2 1 3
+2 1 4
+2 1 5
+2 2 5
+2 2 6
+2 2 7
+2 3 7
+2 3 8
+2 3 9
+2 4 9
+2 4 10
+2 4 11
+3 1 4
+3 1 5
+3 1 6
+3 2 7
+3 2 8
+3 2 9
+3 3 10
+3 3 11
+3 3 12
+3 4 13
+3 4 14
+3 4 15
+4 1 5
+4 1 6
+4 1 7
+4 2 9
+4 2 10
+4 2 11
+4 3 13
+4 3 14
+4 3 15
+4 4 17
+4 4 18
+4 4 19
+45 45 2026
+45 45 2027
+45 45 2028
+45 44 1981
+45 44 1982
+45 44 1983
+45 43 1936
+45 43 1937
+45 43 1938
+44 45 1981
+44 45 1982
+44 45 1983
+44 44 1937
+44 44 1938
+44 44 1939
+44 43 1893
+44 43 1894
+44 43 1895
+43 45 1936
+43 45 1937
+43 45 1938
+43 44 1893
+43 44 1894
+43 44 1895
+43 43 1850
+43 43 1851
+43 43 1852
+1 50 8
+1 50 43
+1 50 43
+1 50 16
+2 50 12
+2 50 3
+2 50 16
+2 50 66
+3 50 50
+3 50 85
+3 50 87
+3 50 22
+4 50 48
+4 50 28
+4 50 15
+4 50 75
+5 50 67
+5 50 47
+5 50 61
+5 50 62
+6 50 195
+6 50 15
+6 50 72
+6 50 76
+7 50 51
+7 50 84
+7 50 150
+7 50 47
+8 50 122
+8 50 8
+8 50 12
+8 50 32
+9 50 51
+9 50 26
+9 50 112
+9 50 120
+10 50 54
+10 50 85
+10 50 3
+10 50 192
+50 1 10
+50 1 14
+50 1 9
+50 1 7
+50 2 22
+50 2 38
+50 2 5
+50 2 7
+50 3 10
+50 3 72
+50 3 18
+50 3 29
+50 4 63
+50 4 128
+50 4 26
+50 4 2
+50 5 36
+50 5 5
+50 5 70
+50 5 100
+50 6 24
+50 6 114
+50 6 20
+50 6 155
+50 7 68
+50 7 43
+50 7 223
+50 7 13
+50 8 5
+50 8 70
+50 8 136
+50 8 130
+50 9 19
+50 9 40
+50 9 16
+50 9 68
+50 10 7
+50 10 41
+50 10 16
+50 10 57
+46 16 152
+11 25 18
+2 16 1
+36 42 275
+44 29 58
+32 28 176
+9 8 15
+17 43 64
+31 42 218
+15 49 51
+9 39 28
+11 3 25
+10 32 14
+13 29 44
+8 21 31
+13 21 23
+13 21 21
+30 30 340
+30 34 95
+7 8 6
+48 8 20
+25 39 758
+33 12 30
+32 7 15
+11 26 18
+23 40 145
+48 33 220
+27 16 215
+7 42 44
+8 30 44
+16 34 54
+44 25 77
+40 35 351
+35 15 124
+44 5 26
+4 22 4
+20 43 90
+30 16 53
+29 23 136
+37 48 102
+36 49 658
+25 13 24
+33 16 61
+21 7 48
+42 31 354
+50 15 66
+6 42 90
+37 37 135
+28 35 144
+35 49 375
+11 7 34
+28 27 100
+4 10 2
+13 45 144
+11 17 6
+14 8 109
+42 17 31
+34 2 2
+48 26 11
+22 30 72
+48 14 135
+25 22 15
+13 31 30
+26 47 129
+50 10 76
+11 37 47
+16 40 24
+21 13 64
+4 35 32
+33 21 113
+12 11 2
+29 15 9
+16 28 196
+46 16 41
+7 27 60
+10 7 3
+45 27 28
+30 39 156
+6 13 15
+11 9 39
+19 48 312
+8 43 44
+20 12 123
+45 42 168
+21 35 16
+32 10 4
+25 17 99
+19 1 1
+5 31 12
+13 33 20
+47 35 22
+29 30 45
+26 31 112
+19 49 235
+27 47 114
+48 11 7
+36 14 4
+21 43 140
+15 2 11
+40 44 436
+50 50 164
+50 50 756
+50 50 280
+50 50 828
+50 50 28
+50 50 561
+50 50 195
+50 50 144
+50 50 578
+50 50 206
+50 50 252
+50 50 91
+50 50 425
+50 50 936
+50 50 541
+50 50 195
+50 50 212
+50 50 155
+50 50 87
+50 50 471
+50 50 90
+50 50 634
+50 50 162
+50 50 164
+50 50 1138
+50 50 352
+50 50 190
+50 50 110
+50 50 92
+50 50 596
+50 50 792
+50 50 106
+50 50 504
+50 50 248
+50 50 321
+50 50 50
+50 50 636
+50 50 258
+50 50 572
+50 50 86
+50 50 725
+50 50 788
+50 50 111
+50 50 660
+50 50 306
+50 50 435
+50 50 273
+50 50 328
+50 50 171
+50 50 51
+50 50 162
+50 50 124
+50 50 79
+50 50 129
+50 50 28
+50 50 529
+50 50 55
+50 50 118
+50 50 368
+50 50 33
+50 50 768
+50 50 540
+50 50 307
+50 50 517
+50 50 547
+50 50 135
+50 50 1292
+50 50 149
+50 50 28
+50 50 472
+50 50 368
+50 50 192
+50 50 90
+50 50 1039
+50 50 22
+50 50 99
+50 50 150
+50 50 294
+50 50 1237
+50 50 90
+50 50 708
+50 50 622
+50 50 636
+50 50 125
+50 50 1428
+50 50 57
+50 50 959
+50 50 165
+50 50 107
+50 50 248
+50 50 422
+50 50 36
+50 50 323
+50 50 339
+50 50 279
+50 50 1627
+50 50 144
+50 50 295
+50 50 48
+50 50 128
+50 50 228
+50 50 35
+50 50 238
+50 50 1641
+50 50 301
+50 50 162
+50 50 310
+50 50 229
+50 50 241
+50 50 99
+50 50 14
+50 50 234
+50 50 988
+50 50 1435
+50 50 106
+50 50 660
+50 50 895
+50 50 87
+50 50 494
+50 50 622
+50 50 97
+50 50 54
+50 50 297
+50 50 40
+50 50 186
+50 50 464
+50 50 168
+50 50 436
+50 50 112
+50 50 104
+50 50 559
+50 50 1842
+50 50 101
+50 50 150
+50 50 376
+50 50 784
+50 50 155
+50 50 834
+50 50 88
+50 50 23
+50 50 1735
+50 50 613
+50 50 464
+50 50 575
+50 50 543
+50 50 695
+50 50 493
+50 50 300
+50 50 352
+50 50 1070
+50 50 717
+50 50 1572
+50 50 89
+50 50 279
+50 50 208
+50 50 172
+50 50 601
+50 50 378
+50 50 58
+50 50 12
+50 50 75
+50 50 126
+50 50 42
+50 50 119
+50 50 292
+50 50 730
+50 50 491
+50 50 1075
+50 50 7
+50 50 258
+50 50 414
+50 50 1389
+50 50 459
+50 50 206
+50 50 360
+50 50 15
+50 50 175
+50 50 495
+50 50 344
+50 50 800
+50 50 42
+50 50 197
+50 50 738
+50 50 305
+50 50 476
+50 50 1093
+50 50 280
+50 50 1045
+50 50 990
+50 50 268
+50 50 148
+50 50 139
+50 50 55
+50 50 30
+50 50 75
+50 50 958
+50 50 928
+50 50 269
+50 50 663
+50 50 402
+50 50 180
+50 50 637
+50 50 437
+50 50 304
+50 50 594
+50 50 45
+50 50 548
+50 50 494
+50 50 90
+50 50 232
+50 50 258
+50 50 390
+50 50 1041
+50 50 613
+50 50 104
+50 50 604
+50 50 68
+50 50 222
+50 50 378
+50 50 553
+50 50 567
+50 50 254
+50 50 55
+50 50 60
+50 50 8
+50 50 382
+50 50 671
+50 50 656
+50 50 196
+50 50 1130
+50 50 101
+50 50 371
+50 50 1080
+50 50 122
+50 50 754
+50 50 221
+50 50 64
+50 50 1324
+50 50 490
+50 50 206
+50 50 50
+50 50 724
+50 50 391
+50 50 999
+50 50 621
+50 50 142
+50 50 192
+50 50 219
+50 50 186
+50 50 852
+50 50 188
+50 50 199
+50 50 931
+50 50 780
+50 50 426
+50 50 303
+50 50 268
+50 50 40
+50 50 150
+50 50 133
+50 50 920
+50 50 17
+50 50 373
+50 50 690
+50 50 116
+50 50 600
+50 50 592
+50 50 218
+50 50 520
+50 50 612
+50 50 211
+50 50 612
+50 50 180
+50 50 401
+50 50 146
+50 50 1832
+50 50 318
+50 50 177
+50 50 769
+50 50 298
+50 50 420
+50 50 200
+50 50 441
+50 50 70
+50 50 192
+50 50 291
+50 50 36
+50 50 105
+50 50 71
+50 50 16
+50 50 1040
+50 50 149
+50 50 254
+50 50 860
+50 50 72
+50 50 56
+50 50 1640
+50 50 577
+50 50 237
+50 50 734
+50 50 429
+50 50 4
+50 50 1761
+50 50 187
+50 50 40
+50 50 262
+50 50 124
+50 50 122
+50 50 72
+50 50 98
+50 50 696
+50 50 244
+50 50 15
+50 50 192
+50 50 311
+50 50 50
+50 50 12
+50 50 324
+50 50 67
+50 50 762
+50 50 49
+50 50 594
+50 50 1162
+50 50 434
+50 50 526
+50 50 366
+50 50 109
+50 50 134
+50 50 256
+50 50 932
+50 50 704
+50 50 879
+50 50 12
+50 50 874
+50 50 699
+50 50 174
+50 50 256
+50 50 808
+50 50 610
+50 50 593
+50 50 928
+50 50 764
+50 50 594
+50 50 1571
+50 50 625
+50 50 50
+50 50 360
+50 50 1024
+50 50 276
+50 50 794
+50 50 1596
+50 50 137
+50 50 246
+50 50 57
+50 50 50
+50 50 402
+50 50 825
+50 50 83
+50 50 68
+50 50 114
+50 50 92
+50 50 1329
+50 50 13
+50 50 283
+50 50 1206
+50 50 759
+50 50 110
+50 50 464
+50 50 471
+50 50 443
+50 50 18
+50 50 148
+50 50 351
+50 50 88
+50 50 15
+50 50 486
+50 50 28
+50 50 28
+50 50 542
+50 50 163
+50 50 848
+50 50 37
+50 50 729
+50 50 1586
+50 50 674
+50 50 399
+50 50 300
+50 50 1246
+50 50 51
+50 50 432
+50 50 745
+50 50 135
+50 50 136
+50 50 116
+50 50 256
+50 50 69
+50 50 485
+50 50 1170
+50 50 726
+50 50 429
+50 50 188
+50 50 40
+50 50 592
+50 50 880
+50 50 462
+50 50 87
+50 50 558
+50 50 186
+50 50 886
+50 50 125
+50 50 195
+50 50 798
+50 50 312
+50 50 248
+50 50 671
+50 50 235
+50 50 529
+50 50 72
+50 50 32
+50 50 95
+50 50 96
+50 50 450
+50 50 577
+50 50 346
+50 50 24
+50 50 624
+50 50 28
+50 50 834
+50 50 360
+50 50 1020
+50 50 333
+50 50 824
+50 50 558
+50 50 817
+50 50 728
+50 50 114
+50 50 764
+50 50 668
+50 50 168
+50 50 840
+50 50 614
+50 50 155
+50 50 576
+50 50 399
+50 50 364
+50 50 256
+50 50 595
+50 50 187
+50 50 93
+50 50 24
+50 50 128
+50 50 27
+50 50 196
+50 50 12
+50 50 740
+50 50 312
+50 50 386
+50 50 38
+50 50 84
+50 50 785
+50 50 228
+50 50 221
+50 50 276
+50 50 307
+50 50 19
+50 50 134
+50 50 609
+50 50 668
+50 50 17
+50 50 320
+50 50 338
+50 50 64
+50 50 268
+50 50 149
+50 50 60
+50 50 65
+50 50 251
+50 50 690
+50 50 489
+50 50 242
+50 50 136
+50 50 444
+50 50 809
+50 50 720
+50 50 149
+50 50 469
+50 50 680
+50 50 3
+50 50 18
+50 50 72
+50 50 312
+50 50 176
+50 50 46
+50 50 722
+50 50 175
+50 50 52
+50 50 652
+50 50 740
+50 50 101
+50 50 32
+50 50 139
+50 50 56
+50 50 836
+50 50 61
+50 50 15
+50 50 459
+50 50 526
+50 50 144
+50 50 46
+50 50 570
+50 50 317
+50 50 18
+50 50 142
+50 50 304
+50 50 964
+50 50 737
+50 50 168
+50 50 185
+50 50 501
+50 50 513
+50 50 232
+50 50 8
+50 50 575
+50 50 856
+50 50 576
+50 50 684
+50 50 46
+50 50 312
+50 50 443
+50 50 346
+50 50 176
+50 50 660
+50 50 585
+50 50 723
+50 50 40
+50 50 644
+50 50 290
+50 50 36
+50 50 1123
+50 50 358
+50 50 984
+50 50 148
+50 50 196
+50 50 435
+50 50 473
+50 50 807
+50 50 624
+50 50 282
+50 50 51
+50 50 720
+50 50 858
+50 50 30
+50 50 875
+50 50 98
+50 50 850
+50 50 382
+50 50 571
+50 50 26
+50 50 112
+50 50 524
+50 50 187
+50 50 34
+50 50 1341
+50 50 264
+50 50 70
+50 50 711
+50 50 12
+50 50 225
+50 50 984
+50 50 52
+50 50 234
+50 50 265
+50 50 80
+50 50 57
+50 50 419
+50 50 216
+50 50 94
+50 50 42
+50 50 432
+50 50 303
+50 50 175
+50 50 432
+50 50 264
+50 50 1348
+50 50 608
+50 50 554
+50 50 130
+50 50 101
+50 50 526
+50 50 204
+50 50 875
+50 50 123
+50 50 704
+50 50 476
+50 50 363
+50 50 928
+50 50 204
+50 50 43
+50 50 47
+50 50 75
+50 50 540
+50 50 823
+50 50 2450
+50 50 2451
+50 50 2452
+50 50 2453
+50 50 2454
+50 50 2455
+50 50 2456
+50 50 2457
+50 50 2458
+50 50 2459
+50 50 2460
+50 50 2461
+50 50 2462
+50 50 2463
+50 50 2464
+50 50 2465
+50 50 2466
+50 50 2467
+50 50 2468
+50 50 2469
+50 50 2481
+50 50 2482
+50 50 2483
+50 50 2484
+50 50 2485
+50 50 2486
+50 50 2487
+50 50 2488
+50 50 2489
+50 50 2490
+50 50 2491
+50 50 2492
+50 50 2493
+50 50 2494
+50 50 2495
+50 50 2496
+50 50 2497
+50 50 2498
+50 50 2499
+50 50 2500
diff --git a/codejam_2008/src/y2008round2/B-small-practice.out b/codejam_2008/src/y2008round2/B-small-practice.out
index b9c3c4d..eb86358 100644
--- a/codejam_2008/src/y2008round2/B-small-practice.out
+++ b/codejam_2008/src/y2008round2/B-small-practice.out
@@ -1,100 +1,1000 @@
-Case #1: 1
-Case #2: 0
-Case #3: 1
-Case #4: 2
-Case #5: 6
-Case #6: 7
-Case #7: 8
-Case #8: 27
-Case #9: 20
-Case #10: 23
-Case #11: 17
-Case #12: 18
-Case #13: 64
-Case #14: 61
-Case #15: 81
-Case #16: 202
-Case #17: 582
-Case #18: 586
-Case #19: 1677
-Case #20: 1663
-Case #21: 1739
-Case #22: 4960
-Case #23: 5097
-Case #24: 14913
-Case #25: 12902
-Case #26: 15121
-Case #27: 15021
-Case #28: 45134
-Case #29: 136503
-Case #30: 140458
-Case #31: 123300
-Case #32: 413343
-Case #33: 452709
-Case #34: 400221
-Case #35: 441774
-Case #36: 427194
-Case #37: 422577
-Case #38: 531441
-Case #39: 412857
-Case #40: 531441
-Case #41: 408267
-Case #42: 406206
-Case #43: 531441
-Case #44: 531441
-Case #45: 531441
-Case #46: 531441
-Case #47: 531441
-Case #48: 531441
-Case #49: 531441
-Case #50: 531441
-Case #51: 410283
-Case #52: 369900
-Case #53: 421959
-Case #54: 398640
-Case #55: 407153
-Case #56: 412014
-Case #57: 531441
-Case #58: 531441
-Case #59: 531441
-Case #60: 410000
-Case #61: 414539
-Case #62: 531441
-Case #63: 409758
-Case #64: 408643
-Case #65: 409398
-Case #66: 409887
-Case #67: 531441
-Case #68: 410163
-Case #69: 418663
-Case #70: 531441
-Case #71: 531441
-Case #72: 409984
-Case #73: 409867
-Case #74: 531441
-Case #75: 531441
-Case #76: 531441
-Case #77: 531441
-Case #78: 412959
-Case #79: 531441
-Case #80: 531441
-Case #81: 531441
-Case #82: 531441
-Case #83: 531441
-Case #84: 531441
-Case #85: 408769
-Case #86: 409215
-Case #87: 531441
-Case #88: 531441
-Case #89: 405220
-Case #90: 405254
-Case #91: 411322
-Case #92: 531441
-Case #93: 409588
-Case #94: 531441
-Case #95: 410373
-Case #96: 409685
-Case #97: 412002
-Case #98: 411344
-Case #99: 407139
-Case #100: 413168
+Case #1: 0 0 1 0 0 1
+Case #2: IMPOSSIBLE
+Case #3: 0 0 1 9 1 10
+Case #4: 0 0 1 0 0 1
+Case #5: 0 0 1 1 1 2
+Case #6: 0 0 1 0 0 2
+Case #7: 0 0 1 2 1 3
+Case #8: 0 0 1 1 1 3
+Case #9: 0 0 1 0 0 3
+Case #10: 0 0 1 3 1 4
+Case #11: 0 0 1 2 1 4
+Case #12: 0 0 1 1 1 4
+Case #13: 0 0 1 0 0 4
+Case #14: 0 0 1 1 2 1
+Case #15: 0 0 0 1 2 0
+Case #16: 0 0 1 1 1 2
+Case #17: 0 0 1 0 0 2
+Case #18: 0 0 2 0 0 2
+Case #19: 0 0 2 1 1 2
+Case #20: 0 0 1 2 1 3
+Case #21: 0 0 1 1 1 3
+Case #22: 0 0 2 2 1 3
+Case #23: 0 0 1 0 0 3
+Case #24: 0 0 2 0 0 3
+Case #25: 0 0 2 1 1 3
+Case #26: 0 0 1 3 1 4
+Case #27: 0 0 1 2 1 4
+Case #28: 0 0 1 0 0 4
+Case #29: 0 0 1 1 1 4
+Case #30: 0 0 2 2 1 4
+Case #31: 0 0 2 0 0 4
+Case #32: 0 0 2 3 1 4
+Case #33: 0 0 2 1 1 4
+Case #34: 0 0 2 1 3 1
+Case #35: 0 0 1 1 3 1
+Case #36: 0 0 0 1 3 0
+Case #37: 0 0 2 1 3 1
+Case #38: 0 0 1 1 3 1
+Case #39: 0 0 0 1 3 0
+Case #40: 0 0 2 2 3 1
+Case #41: 0 0 0 2 3 0
+Case #42: 0 0 1 2 3 1
+Case #43: 0 0 1 2 1 3
+Case #44: 0 0 1 1 1 3
+Case #45: 0 0 1 0 0 3
+Case #46: 0 0 2 2 1 3
+Case #47: 0 0 2 0 0 3
+Case #48: 0 0 3 0 0 3
+Case #49: 0 0 2 1 1 3
+Case #50: 0 0 3 1 1 3
+Case #51: 0 0 3 2 1 3
+Case #52: 0 0 1 3 1 4
+Case #53: 0 0 1 2 1 4
+Case #54: 0 0 1 1 1 4
+Case #55: 0 0 1 0 0 4
+Case #56: 0 0 2 2 1 4
+Case #57: 0 0 3 3 1 4
+Case #58: 0 0 2 0 0 4
+Case #59: 0 0 3 0 0 4
+Case #60: 0 0 2 3 1 4
+Case #61: 0 0 2 1 1 4
+Case #62: 0 0 3 1 1 4
+Case #63: 0 0 3 2 1 4
+Case #64: 0 0 3 1 4 1
+Case #65: 0 0 2 1 4 1
+Case #66: 0 0 1 1 4 1
+Case #67: 0 0 0 1 4 0
+Case #68: 0 0 3 1 4 1
+Case #69: 0 0 2 1 4 1
+Case #70: 0 0 1 1 4 1
+Case #71: 0 0 0 1 4 0
+Case #72: 0 0 2 2 4 1
+Case #73: 0 0 0 2 4 0
+Case #74: 0 0 3 2 4 1
+Case #75: 0 0 1 2 4 1
+Case #76: 0 0 3 1 4 1
+Case #77: 0 0 2 1 4 1
+Case #78: 0 0 1 1 4 1
+Case #79: 0 0 0 1 4 0
+Case #80: 0 0 2 2 4 1
+Case #81: 0 0 0 2 4 0
+Case #82: 0 0 3 3 4 1
+Case #83: 0 0 0 3 4 0
+Case #84: 0 0 3 2 4 1
+Case #85: 0 0 1 2 4 1
+Case #86: 0 0 1 3 4 1
+Case #87: 0 0 2 3 4 1
+Case #88: 0 0 1 3 1 4
+Case #89: 0 0 1 2 1 4
+Case #90: 0 0 1 1 1 4
+Case #91: 0 0 1 0 0 4
+Case #92: 0 0 2 2 1 4
+Case #93: 0 0 2 0 0 4
+Case #94: 0 0 3 3 1 4
+Case #95: 0 0 3 0 0 4
+Case #96: 0 0 4 0 0 4
+Case #97: 0 0 2 3 1 4
+Case #98: 0 0 2 1 1 4
+Case #99: 0 0 3 1 1 4
+Case #100: 0 0 3 2 1 4
+Case #101: 0 0 4 1 1 4
+Case #102: 0 0 4 2 1 4
+Case #103: 0 0 4 3 1 4
+Case #104: IMPOSSIBLE
+Case #105: IMPOSSIBLE
+Case #106: IMPOSSIBLE
+Case #107: IMPOSSIBLE
+Case #108: IMPOSSIBLE
+Case #109: IMPOSSIBLE
+Case #110: IMPOSSIBLE
+Case #111: IMPOSSIBLE
+Case #112: IMPOSSIBLE
+Case #113: IMPOSSIBLE
+Case #114: IMPOSSIBLE
+Case #115: IMPOSSIBLE
+Case #116: IMPOSSIBLE
+Case #117: IMPOSSIBLE
+Case #118: IMPOSSIBLE
+Case #119: IMPOSSIBLE
+Case #120: IMPOSSIBLE
+Case #121: IMPOSSIBLE
+Case #122: IMPOSSIBLE
+Case #123: IMPOSSIBLE
+Case #124: IMPOSSIBLE
+Case #125: IMPOSSIBLE
+Case #126: IMPOSSIBLE
+Case #127: IMPOSSIBLE
+Case #128: IMPOSSIBLE
+Case #129: IMPOSSIBLE
+Case #130: IMPOSSIBLE
+Case #131: IMPOSSIBLE
+Case #132: IMPOSSIBLE
+Case #133: IMPOSSIBLE
+Case #134: IMPOSSIBLE
+Case #135: IMPOSSIBLE
+Case #136: IMPOSSIBLE
+Case #137: IMPOSSIBLE
+Case #138: IMPOSSIBLE
+Case #139: IMPOSSIBLE
+Case #140: IMPOSSIBLE
+Case #141: IMPOSSIBLE
+Case #142: IMPOSSIBLE
+Case #143: IMPOSSIBLE
+Case #144: IMPOSSIBLE
+Case #145: IMPOSSIBLE
+Case #146: IMPOSSIBLE
+Case #147: IMPOSSIBLE
+Case #148: IMPOSSIBLE
+Case #149: IMPOSSIBLE
+Case #150: IMPOSSIBLE
+Case #151: IMPOSSIBLE
+Case #152: IMPOSSIBLE
+Case #153: IMPOSSIBLE
+Case #154: IMPOSSIBLE
+Case #155: IMPOSSIBLE
+Case #156: IMPOSSIBLE
+Case #157: IMPOSSIBLE
+Case #158: IMPOSSIBLE
+Case #159: IMPOSSIBLE
+Case #160: IMPOSSIBLE
+Case #161: IMPOSSIBLE
+Case #162: IMPOSSIBLE
+Case #163: IMPOSSIBLE
+Case #164: IMPOSSIBLE
+Case #165: IMPOSSIBLE
+Case #166: IMPOSSIBLE
+Case #167: IMPOSSIBLE
+Case #168: IMPOSSIBLE
+Case #169: IMPOSSIBLE
+Case #170: IMPOSSIBLE
+Case #171: IMPOSSIBLE
+Case #172: IMPOSSIBLE
+Case #173: IMPOSSIBLE
+Case #174: IMPOSSIBLE
+Case #175: IMPOSSIBLE
+Case #176: IMPOSSIBLE
+Case #177: IMPOSSIBLE
+Case #178: IMPOSSIBLE
+Case #179: 0 0 1 42 1 50
+Case #180: 0 0 1 7 1 50
+Case #181: 0 0 1 7 1 50
+Case #182: 0 0 1 34 1 50
+Case #183: 0 0 1 38 1 50
+Case #184: 0 0 1 47 1 50
+Case #185: 0 0 1 34 1 50
+Case #186: 0 0 2 34 1 50
+Case #187: 0 0 1 0 0 50
+Case #188: 0 0 2 15 1 50
+Case #189: 0 0 2 13 1 50
+Case #190: 0 0 1 28 1 50
+Case #191: 0 0 1 2 1 50
+Case #192: 0 0 1 22 1 50
+Case #193: 0 0 1 35 1 50
+Case #194: 0 0 2 25 1 50
+Case #195: 0 0 2 33 1 50
+Case #196: 0 0 1 3 1 50
+Case #197: 0 0 2 39 1 50
+Case #198: 0 0 2 38 1 50
+Case #199: 0 0 4 5 1 50
+Case #200: 0 0 1 35 1 50
+Case #201: 0 0 2 28 1 50
+Case #202: 0 0 2 24 1 50
+Case #203: 0 0 2 49 1 50
+Case #204: 0 0 2 16 1 50
+Case #205: 0 0 3 0 0 50
+Case #206: 0 0 1 3 1 50
+Case #207: 0 0 3 28 1 50
+Case #208: 0 0 1 42 1 50
+Case #209: 0 0 1 38 1 50
+Case #210: 0 0 1 18 1 50
+Case #211: 0 0 2 49 1 50
+Case #212: 0 0 1 24 1 50
+Case #213: 0 0 3 38 1 50
+Case #214: 0 0 3 30 1 50
+Case #215: 0 0 2 46 1 50
+Case #216: 0 0 2 15 1 50
+Case #217: 0 0 1 47 1 50
+Case #218: 0 0 4 8 1 50
+Case #219: 0 0 40 1 50 1
+Case #220: 0 0 36 1 50 1
+Case #221: 0 0 41 1 50 1
+Case #222: 0 0 43 1 50 1
+Case #223: 0 0 28 1 50 1
+Case #224: 0 0 12 1 50 1
+Case #225: 0 0 45 1 50 1
+Case #226: 0 0 43 1 50 1
+Case #227: 0 0 40 1 50 1
+Case #228: 0 0 28 2 50 1
+Case #229: 0 0 32 1 50 1
+Case #230: 0 0 21 1 50 1
+Case #231: 0 0 37 2 50 1
+Case #232: 0 0 22 3 50 1
+Case #233: 0 0 24 1 50 1
+Case #234: 0 0 48 1 50 1
+Case #235: 0 0 14 1 50 1
+Case #236: 0 0 45 1 50 1
+Case #237: 0 0 30 2 50 1
+Case #238: 0 0 0 2 50 0
+Case #239: 0 0 26 1 50 1
+Case #240: 0 0 36 3 50 1
+Case #241: 0 0 30 1 50 1
+Case #242: 0 0 45 4 50 1
+Case #243: 0 0 32 2 50 1
+Case #244: 0 0 7 1 50 1
+Case #245: 0 0 27 5 50 1
+Case #246: 0 0 37 1 50 1
+Case #247: 0 0 45 1 50 1
+Case #248: 0 0 30 2 50 1
+Case #249: 0 0 14 3 50 1
+Case #250: 0 0 20 3 50 1
+Case #251: 0 0 31 1 50 1
+Case #252: 0 0 10 1 50 1
+Case #253: 0 0 34 1 50 1
+Case #254: 0 0 32 2 50 1
+Case #255: 0 0 43 1 50 1
+Case #256: 0 0 9 1 50 1
+Case #257: 0 0 34 1 50 1
+Case #258: 0 0 43 2 50 1
+Case #259: 0 0 32 4 46 1
+Case #260: 0 0 1 7 1 25
+Case #261: 0 0 1 15 1 16
+Case #262: 0 0 7 19 1 42
+Case #263: 0 0 30 2 44 1
+Case #264: 0 0 16 6 32 1
+Case #265: 0 0 3 2 9 1
+Case #266: 0 0 2 22 1 43
+Case #267: 0 0 6 34 1 42
+Case #268: 0 0 2 47 1 49
+Case #269: 0 0 1 11 1 39
+Case #270: 0 0 8 3 11 1
+Case #271: 0 0 1 18 1 32
+Case #272: 0 0 2 14 1 29
+Case #273: 0 0 2 11 1 21
+Case #274: 0 0 2 19 1 21
+Case #275: 0 0 1 0 0 21
+Case #276: 0 0 12 20 1 30
+Case #277: 0 0 3 7 1 34
+Case #278: 0 0 1 2 1 8
+Case #279: 0 0 28 1 48 1
+Case #280: 0 0 20 22 1 39
+Case #281: 0 0 3 1 33 1
+Case #282: 0 0 17 1 32 1
+Case #283: 0 0 1 8 1 26
+Case #284: 0 0 4 15 1 40
+Case #285: 0 0 20 5 48 1
+Case #286: 0 0 1 8 27 1
+Case #287: 0 0 2 40 1 42
+Case #288: 0 0 2 16 1 30
+Case #289: 0 0 2 14 1 34
+Case #290: 0 0 11 2 44 1
+Case #291: 0 0 9 9 40 1
+Case #292: 0 0 16 4 35 1
+Case #293: 0 0 18 1 44 1
+Case #294: 0 0 1 18 1 22
+Case #295: 0 0 3 39 1 43
+Case #296: 0 0 7 2 30 1
+Case #297: 0 0 9 5 29 1
+Case #298: 0 0 3 42 1 48
+Case #299: 0 0 14 28 1 49
+Case #300: 0 0 1 1 25 1
+Case #301: 0 0 5 2 33 1
+Case #302: 0 0 15 3 21 1
+Case #303: 0 0 24 9 42 1
+Case #304: 0 0 34 2 50 1
+Case #305: 0 0 3 36 1 42
+Case #306: 0 0 4 13 1 37
+Case #307: 0 0 5 31 1 35
+Case #308: 0 0 8 17 1 49
+Case #309: 0 0 10 4 11 1
+Case #310: 0 0 12 4 28 1
+Case #311: 0 0 1 8 1 10
+Case #312: 0 0 4 36 1 45
+Case #313: 0 0 1 11 1 17
+Case #314: 0 0 3 8 14 1
+Case #315: 0 0 11 1 42 1
+Case #316: 0 0 32 1 34 1
+Case #317: 0 0 37 1 48 1
+Case #318: 0 0 3 18 1 30
+Case #319: 0 0 9 3 48 1
+Case #320: 0 0 10 1 25 1
+Case #321: 0 0 1 1 1 31
+Case #322: 0 0 3 12 1 47
+Case #323: 0 0 24 2 50 1
+Case #324: 0 0 2 27 1 37
+Case #325: 0 0 1 16 1 40
+Case #326: 0 0 20 4 21 1
+Case #327: 0 0 1 3 1 35
+Case #328: 0 0 19 4 33 1
+Case #329: 0 0 10 1 12 1
+Case #330: 0 0 20 1 29 1
+Case #331: 0 0 7 0 0 28
+Case #332: 0 0 5 1 46 1
+Case #333: 0 0 3 21 1 27
+Case #334: 0 0 7 1 10 1
+Case #335: 0 0 17 1 45 1
+Case #336: 0 0 4 0 0 39
+Case #337: 0 0 2 11 1 13
+Case #338: 0 0 5 4 11 1
+Case #339: 0 0 7 24 1 48
+Case #340: 0 0 2 42 1 43
+Case #341: 0 0 17 7 20 1
+Case #342: 0 0 12 4 45 1
+Case #343: 0 0 1 19 1 35
+Case #344: 0 0 28 1 32 1
+Case #345: 0 0 1 4 25 1
+Case #346: 0 0 18 1 19 1
+Case #347: 0 0 1 19 1 31
+Case #348: 0 0 1 13 1 33
+Case #349: 0 0 25 1 47 1
+Case #350: 0 0 2 15 1 30
+Case #351: 0 0 4 12 1 31
+Case #352: 0 0 5 10 1 49
+Case #353: 0 0 3 27 1 47
+Case #354: 0 0 41 1 48 1
+Case #355: 0 0 32 1 36 1
+Case #356: 0 0 4 32 1 43
+Case #357: 0 0 4 1 15 1
+Case #358: 0 0 10 4 1 44
+Case #359: 0 0 4 36 1 50
+Case #360: 0 0 16 44 1 50
+Case #361: 0 0 6 20 1 50
+Case #362: 0 0 17 22 1 50
+Case #363: 0 0 1 22 1 50
+Case #364: 0 0 12 39 1 50
+Case #365: 0 0 4 5 1 50
+Case #366: 0 0 3 6 1 50
+Case #367: 0 0 12 22 1 50
+Case #368: 0 0 5 44 1 50
+Case #369: 0 0 6 48 1 50
+Case #370: 0 0 2 9 1 50
+Case #371: 0 0 9 25 1 50
+Case #372: 0 0 19 14 1 50
+Case #373: 0 0 11 9 1 50
+Case #374: 0 0 4 5 1 50
+Case #375: 0 0 5 38 1 50
+Case #376: 0 0 4 45 1 50
+Case #377: 0 0 2 13 1 50
+Case #378: 0 0 10 29 1 50
+Case #379: 0 0 2 10 1 50
+Case #380: 0 0 13 16 1 50
+Case #381: 0 0 4 38 1 50
+Case #382: 0 0 4 36 1 50
+Case #383: 0 0 23 12 1 50
+Case #384: 0 0 8 48 1 50
+Case #385: 0 0 4 10 1 50
+Case #386: 0 0 3 40 1 50
+Case #387: 0 0 2 8 1 50
+Case #388: 0 0 12 4 1 50
+Case #389: 0 0 16 8 1 50
+Case #390: 0 0 3 44 1 50
+Case #391: 0 0 11 46 1 50
+Case #392: 0 0 5 2 1 50
+Case #393: 0 0 7 29 1 50
+Case #394: 0 0 1 0 0 50
+Case #395: 0 0 13 14 1 50
+Case #396: 0 0 6 42 1 50
+Case #397: 0 0 12 28 1 50
+Case #398: 0 0 2 14 1 50
+Case #399: 0 0 15 25 1 50
+Case #400: 0 0 16 12 1 50
+Case #401: 0 0 3 39 1 50
+Case #402: 0 0 14 40 1 50
+Case #403: 0 0 7 44 1 50
+Case #404: 0 0 9 15 1 50
+Case #405: 0 0 6 27 1 50
+Case #406: 0 0 7 22 1 50
+Case #407: 0 0 4 29 1 50
+Case #408: 0 0 2 49 1 50
+Case #409: 0 0 4 38 1 50
+Case #410: 0 0 3 26 1 50
+Case #411: 0 0 2 21 1 50
+Case #412: 0 0 3 21 1 50
+Case #413: 0 0 1 22 1 50
+Case #414: 0 0 11 21 1 50
+Case #415: 0 0 2 45 1 50
+Case #416: 0 0 3 32 1 50
+Case #417: 0 0 8 32 1 50
+Case #418: 0 0 1 17 1 50
+Case #419: 0 0 16 32 1 50
+Case #420: 0 0 11 10 1 50
+Case #421: 0 0 7 43 1 50
+Case #422: 0 0 11 33 1 50
+Case #423: 0 0 11 3 1 50
+Case #424: 0 0 3 15 1 50
+Case #425: 0 0 26 8 1 50
+Case #426: 0 0 3 1 1 50
+Case #427: 0 0 1 22 1 50
+Case #428: 0 0 10 28 1 50
+Case #429: 0 0 8 32 1 50
+Case #430: 0 0 4 8 1 50
+Case #431: 0 0 2 10 1 50
+Case #432: 0 0 21 11 1 50
+Case #433: 0 0 1 28 1 50
+Case #434: 0 0 2 1 1 50
+Case #435: 0 0 3 0 0 50
+Case #436: 0 0 6 6 1 50
+Case #437: 0 0 25 13 1 50
+Case #438: 0 0 2 10 1 50
+Case #439: 0 0 15 42 1 50
+Case #440: 0 0 13 28 1 50
+Case #441: 0 0 13 14 1 50
+Case #442: 0 0 3 25 1 50
+Case #443: 0 0 29 22 1 50
+Case #444: 0 0 2 43 1 50
+Case #445: 0 0 20 41 1 50
+Case #446: 0 0 4 35 1 50
+Case #447: 0 0 3 43 1 50
+Case #448: 0 0 5 2 1 50
+Case #449: 0 0 9 28 1 50
+Case #450: 0 0 1 14 1 50
+Case #451: 0 0 7 27 1 50
+Case #452: 0 0 7 11 1 50
+Case #453: 0 0 6 21 1 50
+Case #454: 0 0 33 23 1 50
+Case #455: 0 0 3 6 1 50
+Case #456: 0 0 6 5 1 50
+Case #457: 0 0 1 2 1 50
+Case #458: 0 0 3 22 1 50
+Case #459: 0 0 5 22 1 50
+Case #460: 0 0 1 15 1 50
+Case #461: 0 0 5 12 1 50
+Case #462: 0 0 33 9 1 50
+Case #463: 0 0 7 49 1 50
+Case #464: 0 0 4 38 1 50
+Case #465: 0 0 7 40 1 50
+Case #466: 0 0 5 21 1 50
+Case #467: 0 0 5 9 1 50
+Case #468: 0 0 2 1 1 50
+Case #469: 0 0 1 36 1 50
+Case #470: 0 0 5 16 1 50
+Case #471: 0 0 20 12 1 50
+Case #472: 0 0 29 15 1 50
+Case #473: 0 0 3 44 1 50
+Case #474: 0 0 14 40 1 50
+Case #475: 0 0 18 5 1 50
+Case #476: 0 0 2 13 1 50
+Case #477: 0 0 10 6 1 50
+Case #478: 0 0 13 28 1 50
+Case #479: 0 0 2 3 1 50
+Case #480: 0 0 2 46 1 50
+Case #481: 0 0 6 3 1 50
+Case #482: 0 0 1 10 1 50
+Case #483: 0 0 4 14 1 50
+Case #484: 0 0 10 36 1 50
+Case #485: 0 0 4 32 1 50
+Case #486: 0 0 9 14 1 50
+Case #487: 0 0 3 38 1 50
+Case #488: 0 0 3 46 1 50
+Case #489: 0 0 12 41 1 50
+Case #490: 0 0 37 8 1 50
+Case #491: 0 0 3 49 1 50
+Case #492: 0 0 3 0 0 50
+Case #493: 0 0 8 24 1 50
+Case #494: 0 0 16 16 1 50
+Case #495: 0 0 4 45 1 50
+Case #496: 0 0 17 16 1 50
+Case #497: 0 0 2 12 1 50
+Case #498: 0 0 1 27 1 50
+Case #499: 0 0 35 15 1 50
+Case #500: 0 0 13 37 1 50
+Case #501: 0 0 10 36 1 50
+Case #502: 0 0 12 25 1 50
+Case #503: 0 0 11 7 1 50
+Case #504: 0 0 14 5 1 50
+Case #505: 0 0 10 7 1 50
+Case #506: 0 0 6 0 0 50
+Case #507: 0 0 8 48 1 50
+Case #508: 0 0 22 30 1 50
+Case #509: 0 0 15 33 1 50
+Case #510: 0 0 32 28 1 50
+Case #511: 0 0 2 11 1 50
+Case #512: 0 0 6 21 1 50
+Case #513: 0 0 5 42 1 50
+Case #514: 0 0 4 28 1 50
+Case #515: 0 0 13 49 1 50
+Case #516: 0 0 8 22 1 50
+Case #517: 0 0 2 42 1 50
+Case #518: 0 0 1 38 1 50
+Case #519: 0 0 2 25 1 50
+Case #520: 0 0 3 24 1 50
+Case #521: 0 0 1 8 1 50
+Case #522: 0 0 3 31 1 50
+Case #523: 0 0 6 8 1 50
+Case #524: 0 0 15 20 1 50
+Case #525: 0 0 10 9 1 50
+Case #526: 0 0 22 25 1 50
+Case #527: 0 0 1 43 1 50
+Case #528: 0 0 6 42 1 50
+Case #529: 0 0 9 36 1 50
+Case #530: 0 0 28 11 1 50
+Case #531: 0 0 10 41 1 50
+Case #532: 0 0 5 44 1 50
+Case #533: 0 0 8 40 1 50
+Case #534: 0 0 1 35 1 50
+Case #535: 0 0 4 25 1 50
+Case #536: 0 0 10 5 1 50
+Case #537: 0 0 7 6 1 50
+Case #538: 0 0 16 0 0 50
+Case #539: 0 0 1 8 1 50
+Case #540: 0 0 4 3 1 50
+Case #541: 0 0 15 12 1 50
+Case #542: 0 0 7 45 1 50
+Case #543: 0 0 10 24 1 50
+Case #544: 0 0 22 7 1 50
+Case #545: 0 0 6 20 1 50
+Case #546: 0 0 21 5 1 50
+Case #547: 0 0 20 10 1 50
+Case #548: 0 0 6 32 1 50
+Case #549: 0 0 3 2 1 50
+Case #550: 0 0 3 11 1 50
+Case #551: 0 0 2 45 1 50
+Case #552: 0 0 1 20 1 50
+Case #553: 0 0 2 25 1 50
+Case #554: 0 0 20 42 1 50
+Case #555: 0 0 19 22 1 50
+Case #556: 0 0 6 31 1 50
+Case #557: 0 0 14 37 1 50
+Case #558: 0 0 9 48 1 50
+Case #559: 0 0 4 20 1 50
+Case #560: 0 0 13 13 1 50
+Case #561: 0 0 9 13 1 50
+Case #562: 0 0 7 46 1 50
+Case #563: 0 0 12 6 1 50
+Case #564: 0 0 1 5 1 50
+Case #565: 0 0 11 2 1 50
+Case #566: 0 0 10 6 1 50
+Case #567: 0 0 2 10 1 50
+Case #568: 0 0 5 18 1 50
+Case #569: 0 0 6 42 1 50
+Case #570: 0 0 8 10 1 50
+Case #571: 0 0 21 9 1 50
+Case #572: 0 0 13 37 1 50
+Case #573: 0 0 3 46 1 50
+Case #574: 0 0 13 46 1 50
+Case #575: 0 0 2 32 1 50
+Case #576: 0 0 5 28 1 50
+Case #577: 0 0 8 22 1 50
+Case #578: 0 0 12 47 1 50
+Case #579: 0 0 12 33 1 50
+Case #580: 0 0 6 46 1 50
+Case #581: 0 0 2 45 1 50
+Case #582: 0 0 2 40 1 50
+Case #583: 0 0 1 42 1 50
+Case #584: 0 0 8 18 1 50
+Case #585: 0 0 14 29 1 50
+Case #586: 0 0 14 44 1 50
+Case #587: 0 0 4 4 1 50
+Case #588: 0 0 23 20 1 50
+Case #589: 0 0 3 49 1 50
+Case #590: 0 0 8 29 1 50
+Case #591: 0 0 22 20 1 50
+Case #592: 0 0 3 28 1 50
+Case #593: 0 0 16 46 1 50
+Case #594: 0 0 5 29 1 50
+Case #595: 0 0 2 36 1 50
+Case #596: 0 0 27 26 1 50
+Case #597: 0 0 10 10 1 50
+Case #598: 0 0 5 44 1 50
+Case #599: 0 0 1 0 0 50
+Case #600: 0 0 15 26 1 50
+Case #601: 0 0 8 9 1 50
+Case #602: 0 0 20 1 1 50
+Case #603: 0 0 13 29 1 50
+Case #604: 0 0 3 8 1 50
+Case #605: 0 0 4 8 1 50
+Case #606: 0 0 5 31 1 50
+Case #607: 0 0 4 14 1 50
+Case #608: 0 0 18 48 1 50
+Case #609: 0 0 4 12 1 50
+Case #610: 0 0 4 1 1 50
+Case #611: 0 0 19 19 1 50
+Case #612: 0 0 16 20 1 50
+Case #613: 0 0 9 24 1 50
+Case #614: 0 0 7 47 1 50
+Case #615: 0 0 6 32 1 50
+Case #616: 0 0 1 10 1 50
+Case #617: 0 0 3 0 0 50
+Case #618: 0 0 3 17 1 50
+Case #619: 0 0 19 30 1 50
+Case #620: 0 0 1 33 1 50
+Case #621: 0 0 8 27 1 50
+Case #622: 0 0 14 10 1 50
+Case #623: 0 0 3 34 1 50
+Case #624: 0 0 12 0 0 50
+Case #625: 0 0 12 8 1 50
+Case #626: 0 0 5 32 1 50
+Case #627: 0 0 11 30 1 50
+Case #628: 0 0 13 38 1 50
+Case #629: 0 0 5 39 1 50
+Case #630: 0 0 13 38 1 50
+Case #631: 0 0 4 20 1 50
+Case #632: 0 0 9 49 1 50
+Case #633: 0 0 3 4 1 50
+Case #634: 0 0 37 18 1 50
+Case #635: 0 0 7 32 1 50
+Case #636: 0 0 4 23 1 50
+Case #637: 0 0 16 31 1 50
+Case #638: 0 0 6 2 1 50
+Case #639: 0 0 9 30 1 50
+Case #640: 0 0 4 0 0 50
+Case #641: 0 0 9 9 1 50
+Case #642: 0 0 2 30 1 50
+Case #643: 0 0 4 8 1 50
+Case #644: 0 0 6 9 1 50
+Case #645: 0 0 1 14 1 50
+Case #646: 0 0 3 45 1 50
+Case #647: 0 0 2 29 1 50
+Case #648: 0 0 1 34 1 50
+Case #649: 0 0 21 10 1 50
+Case #650: 0 0 3 1 1 50
+Case #651: 0 0 6 46 1 50
+Case #652: 0 0 18 40 1 50
+Case #653: 0 0 2 28 1 50
+Case #654: 0 0 2 44 1 50
+Case #655: 0 0 33 10 1 50
+Case #656: 0 0 12 23 1 50
+Case #657: 0 0 5 13 1 50
+Case #658: 0 0 15 16 1 50
+Case #659: 0 0 9 21 1 50
+Case #660: 0 0 1 46 1 50
+Case #661: 0 0 36 39 1 50
+Case #662: 0 0 4 13 1 50
+Case #663: 0 0 1 10 1 50
+Case #664: 0 0 6 38 1 50
+Case #665: 0 0 3 26 1 50
+Case #666: 0 0 3 28 1 50
+Case #667: 0 0 2 28 1 50
+Case #668: 0 0 2 2 1 50
+Case #669: 0 0 14 4 1 50
+Case #670: 0 0 5 6 1 50
+Case #671: 0 0 1 35 1 50
+Case #672: 0 0 4 8 1 50
+Case #673: 0 0 7 39 1 50
+Case #674: 0 0 1 0 0 50
+Case #675: 0 0 1 38 1 50
+Case #676: 0 0 7 26 1 50
+Case #677: 0 0 2 33 1 50
+Case #678: 0 0 16 38 1 50
+Case #679: 0 0 1 1 1 50
+Case #680: 0 0 12 6 1 50
+Case #681: 0 0 24 38 1 50
+Case #682: 0 0 9 16 1 50
+Case #683: 0 0 11 24 1 50
+Case #684: 0 0 8 34 1 50
+Case #685: 0 0 3 41 1 50
+Case #686: 0 0 3 16 1 50
+Case #687: 0 0 6 44 1 50
+Case #688: 0 0 19 18 1 50
+Case #689: 0 0 15 46 1 50
+Case #690: 0 0 18 21 1 50
+Case #691: 0 0 1 38 1 50
+Case #692: 0 0 18 26 1 50
+Case #693: 0 0 14 1 1 50
+Case #694: 0 0 4 26 1 50
+Case #695: 0 0 6 44 1 50
+Case #696: 0 0 17 42 1 50
+Case #697: 0 0 13 40 1 50
+Case #698: 0 0 12 7 1 50
+Case #699: 0 0 19 22 1 50
+Case #700: 0 0 16 36 1 50
+Case #701: 0 0 12 6 1 50
+Case #702: 0 0 32 29 1 50
+Case #703: 0 0 13 25 1 50
+Case #704: 0 0 1 0 0 50
+Case #705: 0 0 8 40 1 50
+Case #706: 0 0 21 26 1 50
+Case #707: 0 0 6 24 1 50
+Case #708: 0 0 16 6 1 50
+Case #709: 0 0 32 4 1 50
+Case #710: 0 0 3 13 1 50
+Case #711: 0 0 5 4 1 50
+Case #712: 0 0 2 43 1 50
+Case #713: 0 0 1 0 0 50
+Case #714: 0 0 9 48 1 50
+Case #715: 0 0 17 25 1 50
+Case #716: 0 0 2 17 1 50
+Case #717: 0 0 2 32 1 50
+Case #718: 0 0 3 36 1 50
+Case #719: 0 0 2 8 1 50
+Case #720: 0 0 27 21 1 50
+Case #721: 0 0 1 37 1 50
+Case #722: 0 0 6 17 1 50
+Case #723: 0 0 25 44 1 50
+Case #724: 0 0 16 41 1 50
+Case #725: 0 0 3 40 1 50
+Case #726: 0 0 10 36 1 50
+Case #727: 0 0 10 29 1 50
+Case #728: 0 0 9 7 1 50
+Case #729: 0 0 1 32 1 50
+Case #730: 0 0 3 2 1 50
+Case #731: 0 0 8 49 1 50
+Case #732: 0 0 2 12 1 50
+Case #733: 0 0 1 35 1 50
+Case #734: 0 0 10 14 1 50
+Case #735: 0 0 1 22 1 50
+Case #736: 0 0 1 22 1 50
+Case #737: 0 0 11 8 1 50
+Case #738: 0 0 4 37 1 50
+Case #739: 0 0 17 2 1 50
+Case #740: 0 0 1 13 1 50
+Case #741: 0 0 15 21 1 50
+Case #742: 0 0 32 14 1 50
+Case #743: 0 0 14 26 1 50
+Case #744: 0 0 8 1 1 50
+Case #745: 0 0 6 0 0 50
+Case #746: 0 0 25 4 1 50
+Case #747: 0 0 2 49 1 50
+Case #748: 0 0 9 18 1 50
+Case #749: 0 0 15 5 1 50
+Case #750: 0 0 3 15 1 50
+Case #751: 0 0 3 14 1 50
+Case #752: 0 0 3 34 1 50
+Case #753: 0 0 6 44 1 50
+Case #754: 0 0 2 31 1 50
+Case #755: 0 0 10 15 1 50
+Case #756: 0 0 24 30 1 50
+Case #757: 0 0 15 24 1 50
+Case #758: 0 0 9 21 1 50
+Case #759: 0 0 4 12 1 50
+Case #760: 0 0 1 10 1 50
+Case #761: 0 0 12 8 1 50
+Case #762: 0 0 18 20 1 50
+Case #763: 0 0 10 38 1 50
+Case #764: 0 0 2 13 1 50
+Case #765: 0 0 12 42 1 50
+Case #766: 0 0 4 14 1 50
+Case #767: 0 0 18 14 1 50
+Case #768: 0 0 3 25 1 50
+Case #769: 0 0 4 5 1 50
+Case #770: 0 0 16 2 1 50
+Case #771: 0 0 7 38 1 50
+Case #772: 0 0 5 2 1 50
+Case #773: 0 0 14 29 1 50
+Case #774: 0 0 5 15 1 50
+Case #775: 0 0 11 21 1 50
+Case #776: 0 0 2 28 1 50
+Case #777: 0 0 1 18 1 50
+Case #778: 0 0 2 5 1 50
+Case #779: 0 0 2 4 1 50
+Case #780: 0 0 9 0 0 50
+Case #781: 0 0 12 23 1 50
+Case #782: 0 0 7 4 1 50
+Case #783: 0 0 1 26 1 50
+Case #784: 0 0 13 26 1 50
+Case #785: 0 0 1 22 1 50
+Case #786: 0 0 17 16 1 50
+Case #787: 0 0 8 40 1 50
+Case #788: 0 0 21 30 1 50
+Case #789: 0 0 7 17 1 50
+Case #790: 0 0 17 26 1 50
+Case #791: 0 0 12 42 1 50
+Case #792: 0 0 17 33 1 50
+Case #793: 0 0 15 22 1 50
+Case #794: 0 0 3 36 1 50
+Case #795: 0 0 16 36 1 50
+Case #796: 0 0 14 32 1 50
+Case #797: 0 0 4 32 1 50
+Case #798: 0 0 17 10 1 50
+Case #799: 0 0 13 36 1 50
+Case #800: 0 0 4 45 1 50
+Case #801: 0 0 12 24 1 50
+Case #802: 0 0 8 1 1 50
+Case #803: 0 0 8 36 1 50
+Case #804: 0 0 6 44 1 50
+Case #805: 0 0 12 5 1 50
+Case #806: 0 0 4 13 1 50
+Case #807: 0 0 2 7 1 50
+Case #808: 0 0 1 26 1 50
+Case #809: 0 0 3 22 1 50
+Case #810: 0 0 1 23 1 50
+Case #811: 0 0 4 4 1 50
+Case #812: 0 0 1 38 1 50
+Case #813: 0 0 15 10 1 50
+Case #814: 0 0 7 38 1 50
+Case #815: 0 0 8 14 1 50
+Case #816: 0 0 1 12 1 50
+Case #817: 0 0 2 16 1 50
+Case #818: 0 0 16 15 1 50
+Case #819: 0 0 5 22 1 50
+Case #820: 0 0 5 29 1 50
+Case #821: 0 0 6 24 1 50
+Case #822: 0 0 7 43 1 50
+Case #823: 0 0 1 31 1 50
+Case #824: 0 0 3 16 1 50
+Case #825: 0 0 13 41 1 50
+Case #826: 0 0 14 32 1 50
+Case #827: 0 0 1 33 1 50
+Case #828: 0 0 7 30 1 50
+Case #829: 0 0 7 12 1 50
+Case #830: 0 0 2 36 1 50
+Case #831: 0 0 6 32 1 50
+Case #832: 0 0 3 1 1 50
+Case #833: 0 0 2 40 1 50
+Case #834: 0 0 2 35 1 50
+Case #835: 0 0 6 49 1 50
+Case #836: 0 0 14 10 1 50
+Case #837: 0 0 10 11 1 50
+Case #838: 0 0 5 8 1 50
+Case #839: 0 0 3 14 1 50
+Case #840: 0 0 9 6 1 50
+Case #841: 0 0 17 41 1 50
+Case #842: 0 0 15 30 1 50
+Case #843: 0 0 3 1 1 50
+Case #844: 0 0 10 31 1 50
+Case #845: 0 0 14 20 1 50
+Case #846: 0 0 1 47 1 50
+Case #847: 0 0 1 32 1 50
+Case #848: 0 0 2 28 1 50
+Case #849: 0 0 7 38 1 50
+Case #850: 0 0 4 24 1 50
+Case #851: 0 0 1 4 1 50
+Case #852: 0 0 15 28 1 50
+Case #853: 0 0 4 25 1 50
+Case #854: 0 0 2 48 1 50
+Case #855: 0 0 14 48 1 50
+Case #856: 0 0 15 10 1 50
+Case #857: 0 0 3 49 1 50
+Case #858: 0 0 1 18 1 50
+Case #859: 0 0 3 11 1 50
+Case #860: 0 0 2 44 1 50
+Case #861: 0 0 17 14 1 50
+Case #862: 0 0 2 39 1 50
+Case #863: 0 0 1 35 1 50
+Case #864: 0 0 10 41 1 50
+Case #865: 0 0 11 24 1 50
+Case #866: 0 0 3 6 1 50
+Case #867: 0 0 1 4 1 50
+Case #868: 0 0 12 30 1 50
+Case #869: 0 0 7 33 1 50
+Case #870: 0 0 1 32 1 50
+Case #871: 0 0 3 8 1 50
+Case #872: 0 0 7 46 1 50
+Case #873: 0 0 20 36 1 50
+Case #874: 0 0 15 13 1 50
+Case #875: 0 0 4 32 1 50
+Case #876: 0 0 4 15 1 50
+Case #877: 0 0 11 49 1 50
+Case #878: 0 0 11 37 1 50
+Case #879: 0 0 5 18 1 50
+Case #880: 0 0 1 42 1 50
+Case #881: 0 0 12 25 1 50
+Case #882: 0 0 18 44 1 50
+Case #883: 0 0 12 24 1 50
+Case #884: 0 0 14 16 1 50
+Case #885: 0 0 1 4 1 50
+Case #886: 0 0 7 38 1 50
+Case #887: 0 0 9 7 1 50
+Case #888: 0 0 7 4 1 50
+Case #889: 0 0 4 24 1 50
+Case #890: 0 0 14 40 1 50
+Case #891: 0 0 12 15 1 50
+Case #892: 0 0 15 27 1 50
+Case #893: 0 0 1 10 1 50
+Case #894: 0 0 13 6 1 50
+Case #895: 0 0 6 10 1 50
+Case #896: 0 0 1 14 1 50
+Case #897: 0 0 23 27 1 50
+Case #898: 0 0 8 42 1 50
+Case #899: 0 0 20 16 1 50
+Case #900: 0 0 3 2 1 50
+Case #901: 0 0 4 4 1 50
+Case #902: 0 0 9 15 1 50
+Case #903: 0 0 10 27 1 50
+Case #904: 0 0 17 43 1 50
+Case #905: 0 0 13 26 1 50
+Case #906: 0 0 6 18 1 50
+Case #907: 0 0 2 49 1 50
+Case #908: 0 0 15 30 1 50
+Case #909: 0 0 18 42 1 50
+Case #910: 0 0 1 20 1 50
+Case #911: 0 0 18 25 1 50
+Case #912: 0 0 2 2 1 50
+Case #913: 0 0 17 0 0 50
+Case #914: 0 0 8 18 1 50
+Case #915: 0 0 12 29 1 50
+Case #916: 0 0 1 24 1 50
+Case #917: 0 0 3 38 1 50
+Case #918: 0 0 11 26 1 50
+Case #919: 0 0 4 13 1 50
+Case #920: 0 0 1 16 1 50
+Case #921: 0 0 27 9 1 50
+Case #922: 0 0 6 36 1 50
+Case #923: 0 0 2 30 1 50
+Case #924: 0 0 15 39 1 50
+Case #925: 0 0 1 38 1 50
+Case #926: 0 0 5 25 1 50
+Case #927: 0 0 20 16 1 50
+Case #928: 0 0 2 48 1 50
+Case #929: 0 0 5 16 1 50
+Case #930: 0 0 6 35 1 50
+Case #931: 0 0 2 20 1 50
+Case #932: 0 0 2 43 1 50
+Case #933: 0 0 9 31 1 50
+Case #934: 0 0 5 34 1 50
+Case #935: 0 0 2 6 1 50
+Case #936: 0 0 1 8 1 50
+Case #937: 0 0 9 18 1 50
+Case #938: 0 0 7 47 1 50
+Case #939: 0 0 4 25 1 50
+Case #940: 0 0 9 18 1 50
+Case #941: 0 0 6 36 1 50
+Case #942: 0 0 27 2 1 50
+Case #943: 0 0 13 42 1 50
+Case #944: 0 0 12 46 1 50
+Case #945: 0 0 3 20 1 50
+Case #946: 0 0 3 49 1 50
+Case #947: 0 0 11 24 1 50
+Case #948: 0 0 5 46 1 50
+Case #949: 0 0 18 25 1 50
+Case #950: 0 0 3 27 1 50
+Case #951: 0 0 15 46 1 50
+Case #952: 0 0 10 24 1 50
+Case #953: 0 0 8 37 1 50
+Case #954: 0 0 19 22 1 50
+Case #955: 0 0 5 46 1 50
+Case #956: 0 0 1 7 1 50
+Case #957: 0 0 1 3 1 50
+Case #958: 0 0 2 25 1 50
+Case #959: 0 0 11 10 1 50
+Case #960: 0 0 17 27 1 50
+Case #961: 0 0 49 0 0 50
+Case #962: 0 0 50 49 1 50
+Case #963: 0 0 50 48 1 50
+Case #964: 0 0 50 47 1 50
+Case #965: 0 0 50 46 1 50
+Case #966: 0 0 50 45 1 50
+Case #967: 0 0 50 44 1 50
+Case #968: 0 0 50 43 1 50
+Case #969: 0 0 50 42 1 50
+Case #970: 0 0 50 41 1 50
+Case #971: 0 0 50 40 1 50
+Case #972: 0 0 50 39 1 50
+Case #973: 0 0 50 38 1 50
+Case #974: 0 0 50 37 1 50
+Case #975: 0 0 50 36 1 50
+Case #976: 0 0 50 35 1 50
+Case #977: 0 0 50 34 1 50
+Case #978: 0 0 50 33 1 50
+Case #979: 0 0 50 32 1 50
+Case #980: 0 0 50 31 1 50
+Case #981: 0 0 50 19 1 50
+Case #982: 0 0 50 18 1 50
+Case #983: 0 0 50 17 1 50
+Case #984: 0 0 50 16 1 50
+Case #985: 0 0 50 15 1 50
+Case #986: 0 0 50 14 1 50
+Case #987: 0 0 50 13 1 50
+Case #988: 0 0 50 12 1 50
+Case #989: 0 0 50 11 1 50
+Case #990: 0 0 50 10 1 50
+Case #991: 0 0 50 9 1 50
+Case #992: 0 0 50 8 1 50
+Case #993: 0 0 50 7 1 50
+Case #994: 0 0 50 6 1 50
+Case #995: 0 0 50 5 1 50
+Case #996: 0 0 50 4 1 50
+Case #997: 0 0 50 3 1 50
+Case #998: 0 0 50 2 1 50
+Case #999: 0 0 50 1 1 50
+Case #1000: 0 0 50 0 0 50
diff --git a/codejam_2008/src/y2008round2/b.rs b/codejam_2008/src/y2008round2/b.rs
index 43fdb0c..8f15493 100644
--- a/codejam_2008/src/y2008round2/b.rs
+++ b/codejam_2008/src/y2008round2/b.rs
@@ -37,34 +37,34 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(n: usize, m: usize, a: usize) -> Option<[usize;6]>
+fn solve(n: i64, m: i64, a: i64) -> Option<[i64;6]>
 {
   let narrow = min(n,m);
   let wide = max(n,m);
 
-  if (wide * narrow < A) {
+  if wide * narrow < a {
     return None;
   }
 
   let mut n1 = a / wide;
   let w2 = wide;
-  let mut w1=0;
-    let mut n2 = 0;
+  let  w1;
+    let  n2 ;
 
-  if A%wide == 0 {
+  if a%wide == 0 {
     w1 = 0;
     n2 = 0;
   } else {
     n1+=1;
     n2 = 1;
-    w1 = n1*w2 - A;
+    w1 = n1*w2 - a;
 
   }
 
-    assert_eq!(A, abs(n1 * w2 - n2 * w1) );
+    assert_eq!(a, (n1 * w2 - n2 * w1).abs() );
   //          printf("Case #%d: Xmax %d Ymax %d tar %d\n", test_case+1, N, M, A);
   //          printf("Case #%d: 0 0 %d %d %d %d\n", test_case+1, x1,y1,x2,y2);
-  if (wide == m) {
+  if wide == m {
     assert!(w1 >= 0);
     assert!(w1 <= m);
     assert!(w2 >= 0);

From e57d8bbf9f8f365c6c59266998794b0fe564f81f Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 10:51:14 -0300
Subject: [PATCH 059/122] c

---
 .../src/y2008round2/C-large-practice.in       | 936 ++++++++++++++++++
 .../src/y2008round2/C-large-practice.out      |  20 +
 .../src/y2008round2/C-small-practice.in       | 889 +++++++++++++++++
 .../src/y2008round2/C-small-practice.out      |  20 +
 codejam_2008/src/y2008round2/b.rs             | 104 +-
 codejam_2008/src/y2008round2/c.rs             |  97 ++
 codejam_2008/src/y2008round2/mod.rs           |   3 +
 7 files changed, 2015 insertions(+), 54 deletions(-)
 create mode 100644 codejam_2008/src/y2008round2/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008round2/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008round2/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008round2/C-small-practice.out
 create mode 100644 codejam_2008/src/y2008round2/c.rs
 create mode 100644 codejam_2008/src/y2008round2/mod.rs

diff --git a/codejam_2008/src/y2008round2/C-large-practice.in b/codejam_2008/src/y2008round2/C-large-practice.in
new file mode 100644
index 0000000..381d4fd
--- /dev/null
+++ b/codejam_2008/src/y2008round2/C-large-practice.in
@@ -0,0 +1,936 @@
+20
+500000 1 34044397 942475857 285290546
+233459890
+262143 27 778531071 478442808 548374783
+308073206
+83422893
+212000218
+478716954
+253195088
+177976935
+150684103
+238705282
+544118711
+266035281
+107502784
+368192145
+476184022
+262948728
+76122559
+216654622
+248475547
+25676357
+411398449
+118850100
+280155516
+284831197
+321535605
+153133880
+134913011
+267278025
+36352599
+262143 1 0 1 446980011
+0
+95964 90 599045317 521316857 727089494
+290089318
+312709453
+318873673
+206389249
+298028848
+45794809
+475695467
+496694758
+662152558
+528255614
+138050462
+391261785
+222223066
+425763213
+503959729
+722811667
+19005510
+239331005
+499008944
+338100050
+69765755
+113140862
+609893627
+271206651
+343145408
+644739489
+621314226
+215101232
+18572699
+655099060
+203891367
+308662017
+274503853
+522765040
+515051266
+572532702
+602344683
+297442073
+342137966
+571192582
+98608194
+480188428
+235364873
+354616094
+212646981
+46019942
+350338267
+231652491
+319135781
+156042552
+603537376
+422686371
+269183414
+520126343
+588362
+612328822
+437776338
+621902588
+134125394
+456349038
+583696988
+371801595
+71706395
+131111348
+201261976
+586757662
+703644050
+76517165
+190895075
+352477356
+681494581
+289503269
+139361124
+223554794
+644119363
+352008105
+269574736
+301152971
+583660596
+622495352
+457195523
+493893312
+318092229
+33074277
+286930162
+318680591
+679187933
+31401840
+247278519
+120008668
+209415 75 681018507 488493941 54816370
+35221126
+31301077
+25741497
+11472710
+13837473
+14068441
+37078898
+24665859
+40453086
+16158757
+5896484
+7590240
+51354068
+42027820
+30722718
+33613077
+17544696
+34095507
+29152294
+39519354
+3779894
+39382207
+41635262
+34263968
+2281152
+8185998
+7427527
+25503219
+3332609
+7427527
+31250125
+38553735
+38728604
+47346404
+40381227
+42920859
+51769627
+22643755
+3125130
+37406344
+29157295
+9021615
+35351366
+25694993
+41404217
+1612496
+49662853
+49303696
+26062785
+23998777
+34006680
+29842680
+8564615
+20825572
+9290278
+1200549
+29011570
+16717806
+17058551
+22698961
+24145333
+48308676
+6436326
+53228719
+31193493
+37172335
+41333208
+28146750
+4999721
+34813121
+1091506
+24511798
+43834736
+26797654
+50206791
+56990 24 171921134 124737550 128075335
+52938691
+95269194
+37069078
+100712551
+112631186
+11875657
+109491415
+112297490
+49684604
+81724473
+66428698
+28410232
+12634001
+50275787
+32289483
+94125522
+98889045
+69461819
+53065962
+107570370
+83770332
+14620118
+9360759
+126213310
+262145 42 145531645 885757306 980606547
+378455658
+814110217
+92168997
+71118287
+467083865
+775438487
+880685736
+623217802
+595151384
+245416213
+56255840
+928449257
+481966308
+116781280
+151291508
+112650517
+199565913
+449054739
+240771283
+788274512
+82119736
+220341932
+533884977
+4037547
+663725960
+55068056
+10343988
+828651059
+773948262
+804679980
+907347701
+171797373
+451913096
+813246144
+56645106
+918996961
+421807531
+751060288
+375337662
+36352368
+15869954
+431593502
+262145 21 517390101 629185474 254942425
+230249956
+182707522
+177726730
+221463314
+16736152
+154446216
+135047575
+3521732
+60310147
+79330078
+237567338
+5162288
+44025962
+187289455
+231267760
+17013746
+161170428
+52813100
+104842228
+12221209
+48280558
+262145 1 0 106857578 106857580
+106857579
+1 1 500919862 638803977 672251447
+520731691
+262144 8 344132383 951709009 722466051
+523911460
+207973982
+668055032
+261297330
+137925291
+158202281
+350899081
+654301879
+262144 44 461818864 146611969 133102166
+87310916
+48654929
+105742901
+33619206
+67577923
+31598751
+49318271
+70128239
+59274917
+81081458
+74578222
+26277692
+22973943
+85405865
+17196442
+122492519
+99609318
+25023807
+1482304
+99440498
+86873349
+18226296
+51718971
+106905063
+36003260
+68758783
+8272623
+15849307
+82268586
+76557460
+42694156
+18628344
+107363398
+130588066
+34398559
+23990163
+29084651
+83716830
+94118402
+70510576
+13847130
+17745467
+96788268
+18972081
+32120 38 597181980 953629629 571089127
+410173084
+59861848
+427637726
+124581572
+213470673
+289018355
+490843185
+256663175
+170119558
+132154487
+133693740
+423789105
+314348443
+284431223
+31067954
+275228980
+422543211
+409320777
+536066658
+136017385
+413296126
+86548672
+241219003
+273071525
+415531233
+393566859
+14149952
+7407819
+199712841
+14149951
+470150835
+175669658
+74011799
+326699435
+300251231
+287482472
+181501523
+356878149
+100 100 0 0 1000000
+36806
+36806
+37390
+37390
+74964
+74964
+76131
+76131
+105103
+105103
+129640
+129640
+151741
+151741
+211339
+211339
+237004
+237004
+263047
+263047
+293761
+293761
+301435
+301435
+323326
+323326
+338242
+338242
+347077
+347077
+349319
+349319
+368336
+368336
+376122
+376122
+378338
+378338
+412918
+412918
+413843
+413843
+434061
+434061
+443495
+443495
+445927
+445927
+461547
+461547
+501026
+501026
+510648
+510648
+518021
+518021
+527590
+527590
+535780
+535780
+536963
+536963
+690313
+690313
+693724
+693724
+724943
+724943
+752202
+752202
+773335
+773335
+775740
+775740
+806536
+806536
+819618
+819618
+820864
+820864
+821601
+821601
+855530
+855530
+872860
+872860
+901942
+901942
+924805
+924805
+935327
+935327
+936176
+936176
+956905
+956905
+970043
+970043
+976754
+976754
+500000 85 833479489 693361710 738690593
+241004332
+111840552
+532707497
+43824357
+125475216
+644348871
+738468855
+15118950
+162849998
+540459550
+26376625
+566653687
+66759354
+455119920
+305820340
+307224918
+241732259
+734933765
+464317248
+592352013
+268392939
+274382326
+383400897
+268982709
+81254232
+668622103
+421056956
+505940667
+214500166
+12263901
+7492504
+524092629
+192692584
+540200001
+567916987
+318167801
+445858279
+636283380
+401874882
+677296408
+506640468
+428251508
+505259502
+641987954
+213268966
+140977380
+279110410
+455001225
+137220552
+73325196
+308662645
+405613491
+347707523
+21961080
+4493738
+497549886
+20480721
+494138826
+264799961
+234980887
+574990858
+272292465
+88971055
+28992849
+73801873
+656888042
+415748781
+588248283
+623068960
+78933071
+526854098
+459606967
+507184579
+362011138
+362904328
+720453545
+502988519
+642014738
+505352308
+708797202
+715339935
+143912491
+444308232
+392944996
+165873571
+401585 98 580810038 45401427 869224038
+472428710
+368440569
+785110130
+277783694
+43990480
+260018475
+360268665
+488196920
+541879011
+475144554
+862843394
+340710005
+33890338
+131544648
+665584779
+238031432
+230052968
+830405139
+311283252
+515343513
+489720629
+420998116
+277815300
+259300568
+354801486
+421629574
+846275544
+657351916
+319547355
+568015933
+404819665
+791976066
+527420930
+780894223
+660724188
+162375839
+631877127
+611957282
+650572759
+304532100
+217877798
+235156544
+236206533
+251768136
+366701192
+32567274
+80763997
+596754160
+453936841
+392047249
+242873635
+74433433
+404009793
+111653363
+333734001
+349775708
+124247365
+770973973
+137903586
+443794720
+469765869
+133687679
+366546748
+127962761
+45357864
+618235365
+290338600
+268199419
+360968609
+531875788
+572731519
+169810835
+767032332
+808938053
+421578971
+724697952
+432469755
+502342968
+43192502
+17182559
+485354645
+286066137
+91615992
+20140401
+857907966
+16314421
+369916109
+112931293
+378252823
+98784123
+147690441
+848018692
+692660268
+105201618
+566945881
+328982560
+723436983
+448248910
+26220 69 214840371 558065001 491810264
+268782196
+201261975
+452910276
+224084948
+76284745
+151995087
+84752040
+265969062
+240003961
+43870572
+489523857
+190818664
+395878677
+65793933
+235440601
+286234613
+196479021
+491141728
+288317662
+77797624
+267684971
+318716790
+139947181
+274820049
+350118630
+130694667
+394828717
+401095883
+33086285
+394828716
+31969267
+301868481
+104280428
+484879543
+345710837
+180565173
+145064366
+250220285
+266291643
+385068327
+294090857
+264005236
+84076728
+198159270
+329799170
+139274737
+484393883
+346035599
+138606202
+100658689
+423833224
+226048581
+239132887
+71970141
+9058366
+97441254
+22422216
+403887083
+318294545
+367076173
+126662944
+350263812
+488702062
+50700780
+343333091
+162360043
+231265953
+308154865
+412580328
+500000 41 627487402 850757472 355347209
+195149906
+73848167
+251412231
+230473233
+222197486
+323778966
+288852813
+23031090
+214561397
+185224104
+346800408
+48013925
+263605687
+14607016
+284834790
+103415800
+197949405
+232486887
+23721250
+158845626
+285143584
+256969411
+89625025
+90825289
+159132850
+78786138
+236550095
+60525440
+203448798
+170508467
+352696762
+43251496
+228956240
+233361390
+258324335
+80406123
+201793148
+191829939
+88036819
+61007336
+6306441
+262143 76 169673650 358307488 976790025
+342459430
+495771109
+893272552
+18064856
+750713533
+496008424
+309353639
+570534382
+673735155
+828739054
+479326287
+210352273
+557920281
+374903771
+162718172
+637250360
+461547186
+932707736
+573332074
+31007543
+801088823
+633325495
+702062821
+957920426
+332301375
+606339783
+643314311
+501975026
+11067222
+472620688
+877857476
+159623055
+968391797
+600436405
+177687911
+548411707
+902541232
+293137952
+925042491
+405582764
+145086981
+233675155
+615935037
+509103665
+608578927
+584749611
+169564000
+93336088
+346763724
+742896074
+124343632
+171062523
+205527947
+632502855
+935079351
+537829322
+262052613
+601603637
+63014323
+79216238
+97434300
+746968202
+238839293
+871922499
+176710984
+222623606
+249640583
+102462191
+515761558
+3989452
+314141357
+466944942
+237664607
+930076394
+976048607
+846243534
+372914 73 652812536 169882417 338406909
+147136321
+303777868
+73993541
+337532301
+234534584
+223115906
+37996798
+275942672
+218969514
+131466164
+233109637
+124556735
+48678159
+228315238
+152966967
+173365446
+324410121
+297309737
+148797586
+94274210
+140417933
+48384212
+313897866
+162347120
+154642522
+169779288
+261505240
+130641241
+324440980
+129242318
+146298174
+133170392
+315977992
+103249521
+15253590
+95063473
+209323233
+53250389
+32599236
+311250554
+184716553
+148666680
+97400380
+116352519
+38575009
+133325153
+289717965
+24578221
+92227981
+321473358
+1810237
+115603720
+31450661
+198665909
+277950840
+69050989
+30038289
+84006977
+82650036
+16072360
+213249296
+228948210
+32200558
+190820379
+215155538
+47454149
+285883853
+307436577
+322069253
+201440895
+280280222
+51336703
+11700666
diff --git a/codejam_2008/src/y2008round2/C-large-practice.out b/codejam_2008/src/y2008round2/C-large-practice.out
new file mode 100644
index 0000000..3489303
--- /dev/null
+++ b/codejam_2008/src/y2008round2/C-large-practice.out
@@ -0,0 +1,20 @@
+Case #1: 492424457
+Case #2: 988995782
+Case #3: 192947006
+Case #4: 931252358
+Case #5: 408083335
+Case #6: 305436816
+Case #7: 549899454
+Case #8: 791315888
+Case #9: 262145
+Case #10: 1
+Case #11: 148641587
+Case #12: 930493972
+Case #13: 234546960
+Case #14: 710104286
+Case #15: 304933180
+Case #16: 202227597
+Case #17: 928943237
+Case #18: 678364922
+Case #19: 476523981
+Case #20: 543625919
diff --git a/codejam_2008/src/y2008round2/C-small-practice.in b/codejam_2008/src/y2008round2/C-small-practice.in
new file mode 100644
index 0000000..11b5dc8
--- /dev/null
+++ b/codejam_2008/src/y2008round2/C-small-practice.in
@@ -0,0 +1,889 @@
+20
+1000 90 119183605 800390554 869262611
+37245610
+727819161
+786210092
+249057005
+53022121
+620417987
+308912558
+474169225
+293365291
+614383450
+183563293
+241581016
+711677169
+165041385
+457172424
+89386931
+189354668
+368449252
+476996647
+598101336
+612565645
+836802951
+180974856
+479547342
+408040952
+395385160
+844494841
+379740911
+48292067
+844494840
+842822800
+545841862
+294092964
+350811855
+794898867
+347115085
+101967231
+234548814
+412325884
+855636707
+439973838
+186930751
+227955113
+282388396
+351972136
+276169111
+832079512
+132368378
+644618363
+30855123
+730469715
+387921397
+867658074
+42181960
+458510313
+406436415
+28608694
+433742544
+377218900
+76900761
+16347
+811083274
+622742623
+294109312
+292632518
+139420453
+232265971
+854903935
+834273452
+644591856
+432319605
+404984679
+831522607
+660274718
+278414649
+314232133
+67181218
+241231551
+446600511
+302841155
+272086674
+307807615
+281804126
+270482137
+810293760
+740314440
+267960126
+838902454
+304794373
+236220600
+1000 33 965205667 724223372 169374881
+149880795
+141176592
+110231960
+21914970
+65228061
+60094288
+129111051
+154094256
+80916751
+16599472
+70551180
+63825024
+5277308
+26867338
+109836392
+45363145
+35772408
+111152952
+104976553
+15777395
+58254500
+167814198
+18708534
+90518765
+27073586
+82161051
+59802062
+145404848
+13899824
+43552775
+105854414
+163780619
+69744292
+511 78 869187222 480490764 414973471
+411933029
+65761477
+349539367
+380766166
+372369781
+226641639
+290713634
+370984670
+40055529
+84809113
+45184497
+211031986
+67228192
+402689911
+246458000
+242089240
+36046246
+1836279
+60600466
+379536075
+367943349
+288705299
+310239102
+47898545
+397515148
+238555507
+360281099
+21781957
+231456507
+42744392
+217154741
+228416065
+108505870
+151720638
+121592467
+65902180
+378362277
+412306101
+21913379
+3444335
+9525451
+409455054
+141860028
+76753643
+397171494
+315701735
+246226590
+18244270
+317538014
+306827056
+325164052
+197891599
+107942591
+147813390
+173173851
+90484269
+313752604
+118481479
+39649933
+130235641
+161225872
+256804675
+286035413
+269731742
+335909020
+407627881
+335633922
+226681533
+332344218
+284931008
+157509575
+269253376
+279412591
+299369603
+346007020
+188994322
+127481574
+104643846
+1000 17 651165168 999463789 141914966
+109788020
+23556100
+120693253
+109077781
+2480154
+97633857
+141096439
+39198570
+127238684
+127170638
+46355679
+99602049
+31160
+1448344
+87690226
+125076824
+54628000
+902 79 700521650 713080455 927846731
+409268985
+774510410
+825098871
+269882313
+235667782
+674695564
+533957295
+231036614
+191878087
+209591875
+467155519
+178188650
+669501779
+708370202
+340497539
+653095173
+256959682
+731474587
+241741979
+173082238
+665275375
+820985911
+814083218
+49701607
+915071560
+409621033
+315759618
+687746479
+194854757
+96122701
+438563909
+312333556
+870633111
+44025863
+290425683
+814510707
+426931241
+824382979
+117700590
+618809328
+742184668
+293065924
+796997978
+192049530
+73589395
+209648787
+845144704
+38758891
+649333188
+795096497
+211841129
+386761833
+688235677
+98077616
+144673254
+383670321
+215908463
+168642687
+143570069
+118973034
+264765388
+290343793
+139516405
+843608313
+42579470
+429942088
+438482103
+469510712
+326478336
+264392507
+160473309
+140816273
+557458431
+29624557
+41075618
+339257640
+875329889
+886220322
+378016531
+634 25 305026160 681316818 517704392
+114506795
+288583038
+26966670
+498177116
+320263368
+195609357
+349957000
+331674350
+352812692
+456072660
+471190755
+84346141
+498652130
+383428451
+5123852
+450458450
+7974263
+269516359
+503369707
+374704742
+125042266
+241204078
+415780360
+356737853
+414601442
+587 92 610773785 531223811 251091542
+23345104
+1862530
+99984894
+208424295
+104327414
+213005317
+119928299
+160550835
+82629363
+239036858
+41813700
+138995952
+69818134
+148857639
+7568940
+100602638
+61013742
+96713140
+16399105
+77086877
+57547683
+215243383
+132311547
+88963438
+77609832
+29734369
+82373809
+186200533
+166749159
+82373808
+127926760
+190094263
+196576568
+89160343
+147427017
+49812441
+51074118
+128604004
+71611964
+133703481
+116549320
+113425664
+133948121
+47616142
+123531991
+141517061
+148218780
+45794421
+99478889
+164617885
+235221528
+18275260
+241109956
+116441534
+219578929
+67628247
+146175903
+50861196
+115077468
+174173751
+245575234
+104252917
+113176472
+191060260
+193413260
+121852177
+240872701
+244487378
+250456181
+61393124
+239439547
+228254189
+36067476
+234636356
+24778789
+159599468
+125061875
+172997569
+205393889
+85789452
+198864143
+189523876
+104064713
+188882557
+54873868
+72552100
+117759492
+62298459
+235753526
+94085649
+236472210
+230237218
+511 11 849519555 340732733 841257835
+334598371
+57591353
+592907002
+196122082
+402917136
+26995629
+55123782
+400561755
+387799554
+319349158
+38143934
+1 1 4712031 479056446 733904406
+480159960
+511 1 0 1 672941413
+0
+513 1 0 688898794 688898796
+688898795
+149 91 573145152 870824527 481004729
+75075055
+208150980
+29626331
+216990020
+254414677
+454639588
+327201256
+324953468
+82712640
+366182083
+317173032
+402224719
+405380653
+283737592
+190305594
+259666905
+130905013
+479272055
+181990891
+218595239
+265259116
+296984091
+223307270
+77836644
+68879038
+277677638
+329891552
+456550001
+1018518
+144417362
+191182005
+76093574
+129103610
+220808336
+69618862
+160053556
+451983192
+173355386
+4002295
+311231101
+58532741
+321175328
+232451091
+240448662
+123908191
+199291953
+19110838
+31348473
+197559280
+458641726
+249943712
+239353664
+274621089
+249786251
+317190309
+120035395
+46459160
+166077132
+95580668
+47477679
+87029762
+63297941
+381111250
+216133373
+284106277
+450730112
+376186929
+31620009
+143080770
+380189224
+342851110
+459153508
+477899820
+351837469
+218597441
+378343280
+70124693
+14243548
+409691753
+44219241
+472885274
+436170733
+283572906
+43036902
+204952255
+119758486
+163072298
+27946684
+62370886
+258652966
+332964360
+513 13 785065825 765114905 916566486
+95353856
+883674091
+305137504
+13269152
+460356989
+825060280
+657861008
+892676595
+266174598
+572817129
+274730276
+230238572
+525394711
+512 36 549595770 202350236 71364788
+56274617
+31823730
+22214675
+2138847
+11297440
+37292871
+3069760
+4761595
+63193202
+53285073
+7826135
+50554206
+62736672
+51735995
+41957111
+53510406
+64323164
+42656399
+20011740
+7738375
+13235366
+25928931
+33612578
+14382198
+45763163
+50083593
+47661257
+24440629
+32692426
+42907184
+68002004
+17602255
+3366126
+12311884
+13201095
+8123559
+513 68 270476179 256334679 189362159
+44861932
+114119699
+12775622
+155825765
+184670879
+146039137
+150592453
+131589105
+91439240
+100957800
+92350993
+102655802
+150911111
+182505471
+140923024
+49414039
+86228930
+106980056
+81426217
+73392183
+126807562
+131833268
+27330173
+179836995
+162677162
+156074828
+25183164
+54429023
+86874395
+25183163
+6275173
+67236429
+74802963
+19050795
+33700035
+70111683
+100590034
+184292488
+137200889
+2667115
+31388231
+40189723
+40823019
+117799443
+33333036
+117246144
+102713583
+55062067
+34864042
+184139801
+128454250
+161671604
+126610910
+91284525
+87646541
+35426014
+57997194
+48329806
+89855037
+80371691
+73512969
+96130210
+147608120
+148315932
+50681107
+181308155
+153927716
+151271141
+740 10 111410106 764965093 676085069
+668516841
+70175581
+518256219
+505056510
+665876688
+193975982
+533598839
+615641075
+476795463
+209351239
+512 63 687946481 929689830 8989182
+7139111
+4177606
+5792168
+8717741
+3163992
+7442890
+3076908
+8923007
+5553143
+8732496
+5442847
+586117
+4279761
+7718313
+8981673
+6956026
+727768
+6118238
+2851743
+8077028
+4522184
+2879826
+276536
+5834659
+6614040
+1279051
+5227442
+3324357
+6013985
+1570705
+4836555
+4163914
+6679161
+1639541
+4823323
+853972
+1024099
+8831081
+787797
+6577243
+8574396
+7161494
+7163360
+4795825
+5890625
+8086701
+2762669
+6618393
+5215757
+6545262
+5706239
+748760
+1366756
+5982775
+7514269
+8911646
+8192676
+3752529
+3246822
+6148329
+6254084
+8083377
+1323061
+414 13 477374730 943547914 549578845
+190966889
+213936630
+62542532
+131964255
+123032824
+135658062
+384907847
+433813287
+430573864
+57345548
+301314756
+481123109
+168234636
+428 46 819705073 68230643 755036387
+438451387
+472151076
+355970177
+252370435
+261785751
+379483303
+572633804
+337688626
+372401826
+547269677
+96130846
+73438099
+661421955
+698181379
+572090230
+450479934
+228641241
+147805811
+738826594
+141119123
+56805046
+238788468
+28829394
+458675039
+417236833
+546233163
+398612491
+89458260
+222016546
+6165230
+50549244
+660467933
+595941819
+406519421
+275427495
+220316696
+148591851
+210650425
+558005322
+520993677
+2883715
+654136168
+712057290
+26894796
+597281160
+646736646
+100 100 0 0 1000000
+9150
+9150
+14027
+14027
+45909
+45909
+84040
+84040
+85672
+85672
+108520
+108520
+120135
+120135
+145736
+145736
+154356
+154356
+157762
+157762
+180205
+180205
+190810
+190810
+196517
+196517
+197344
+197344
+221332
+221332
+225200
+225200
+281919
+281919
+283461
+283461
+285830
+285830
+291387
+291387
+316560
+316560
+337457
+337457
+338674
+338674
+347293
+347293
+352665
+352665
+378037
+378037
+392064
+392064
+412003
+412003
+446888
+446888
+449258
+449258
+459659
+459659
+460718
+460718
+466464
+466464
+531827
+531827
+561284
+561284
+583243
+583243
+585334
+585334
+630144
+630144
+660039
+660039
+680073
+680073
+754748
+754748
+769112
+769112
+782678
+782678
+786603
+786603
+798659
+798659
+815682
+815682
+886575
+886575
+925403
+925403
+931139
+931139
+987944
+987944
diff --git a/codejam_2008/src/y2008round2/C-small-practice.out b/codejam_2008/src/y2008round2/C-small-practice.out
new file mode 100644
index 0000000..0ebcdd8
--- /dev/null
+++ b/codejam_2008/src/y2008round2/C-small-practice.out
@@ -0,0 +1,20 @@
+Case #1: 792175524
+Case #2: 423939827
+Case #3: 387647936
+Case #4: 166445575
+Case #5: 882703538
+Case #6: 847359953
+Case #7: 484507583
+Case #8: 250869684
+Case #9: 1
+Case #10: 709192742
+Case #11: 513
+Case #12: 240536891
+Case #13: 349436385
+Case #14: 870681372
+Case #15: 20391557
+Case #16: 44377583
+Case #17: 239694902
+Case #18: 478388251
+Case #19: 199934414
+Case #20: 710104286
diff --git a/codejam_2008/src/y2008round2/b.rs b/codejam_2008/src/y2008round2/b.rs
index 8f15493..3b2cc21 100644
--- a/codejam_2008/src/y2008round2/b.rs
+++ b/codejam_2008/src/y2008round2/b.rs
@@ -1,8 +1,8 @@
 use codejam::util::codejam::run_cases;
 use itertools::Itertools;
-use std::io::Write;
-use std::cmp::min;
 use std::cmp::max;
+use std::cmp::min;
+use std::io::Write;
 
 /*
 
@@ -37,57 +37,53 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(n: i64, m: i64, a: i64) -> Option<[i64;6]>
+fn solve(n: i64, m: i64, a: i64) -> Option<[i64; 6]>
 {
-  let narrow = min(n,m);
-  let wide = max(n,m);
-
-  if wide * narrow < a {
-    return None;
-  }
-
-  let mut n1 = a / wide;
-  let w2 = wide;
-  let  w1;
-    let  n2 ;
-
-  if a%wide == 0 {
-    w1 = 0;
-    n2 = 0;
-  } else {
-    n1+=1;
-    n2 = 1;
-    w1 = n1*w2 - a;
-
-  }
-
-    assert_eq!(a, (n1 * w2 - n2 * w1).abs() );
-  //          printf("Case #%d: Xmax %d Ymax %d tar %d\n", test_case+1, N, M, A);
-  //          printf("Case #%d: 0 0 %d %d %d %d\n", test_case+1, x1,y1,x2,y2);
-  if wide == m {
-    assert!(w1 >= 0);
-    assert!(w1 <= m);
-    assert!(w2 >= 0);
-    assert!(w2 <= m);
-    assert!(n1 >= 0);
-    assert!(n1 <= n);
-    assert!(n2 >= 0);
-    assert!(n2 <= n);
-    return Some([0,0,n1,w1,n2,w2]);
-  } else {
-    assert!(w1 >= 0);
-    assert!(w1 <= n);
-    assert!(w2 >= 0);
-    assert!(w2 <= n);
-    assert!(n1 >= 0);
-    assert!(n1 <= m);
-    assert!(n2 >= 0);
-    assert!(n2 <= m);
-
-      return Some([0,0,w1,n1,w2,n2]);
-  }
-          //cout << abs(x1 * y2 - x2 * y1) << endl;
-
-
-
+    let narrow = min(n, m);
+    let wide = max(n, m);
+
+    if wide * narrow < a {
+        return None;
+    }
+
+    let mut n1 = a / wide;
+    let w2 = wide;
+    let w1;
+    let n2;
+
+    if a % wide == 0 {
+        w1 = 0;
+        n2 = 0;
+    } else {
+        n1 += 1;
+        n2 = 1;
+        w1 = n1 * w2 - a;
+    }
+
+    assert_eq!(a, (n1 * w2 - n2 * w1).abs());
+    //          printf("Case #%d: Xmax %d Ymax %d tar %d\n", test_case+1, N, M, A);
+    //          printf("Case #%d: 0 0 %d %d %d %d\n", test_case+1, x1,y1,x2,y2);
+    if wide == m {
+        assert!(w1 >= 0);
+        assert!(w1 <= m);
+        assert!(w2 >= 0);
+        assert!(w2 <= m);
+        assert!(n1 >= 0);
+        assert!(n1 <= n);
+        assert!(n2 >= 0);
+        assert!(n2 <= n);
+        return Some([0, 0, n1, w1, n2, w2]);
+    } else {
+        assert!(w1 >= 0);
+        assert!(w1 <= n);
+        assert!(w2 >= 0);
+        assert!(w2 <= n);
+        assert!(n1 >= 0);
+        assert!(n1 <= m);
+        assert!(n2 >= 0);
+        assert!(n2 <= m);
+
+        return Some([0, 0, w1, n1, w2, n2]);
+    }
+    //cout << abs(x1 * y2 - x2 * y1) << endl;
 }
diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
new file mode 100644
index 0000000..2a88252
--- /dev/null
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -0,0 +1,97 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+
+
+/*
+Binary search
+Absolute value & inequalities
+Geometry
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice",
+        //    "C-large-practice"
+        ],
+        "y2008round2",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+
+                let num_ships = reader.read_int();
+
+                let ships: Vec<Ship> = (0..num_ships).map(|_| {
+                    let shp = reader.read_num_line();
+                    assert_eq!(4, shp.len());
+                    Ship { x: shp[0], y: shp[1], z: shp[2], p: shp[3] }
+                }).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(ships.as_slice())).unwrap();
+            }
+        },
+    );
+}
+
+struct Ship
+{
+    x: f64,
+    y: f64,
+    z: f64,
+    p: f64
+}
+
+const SMALLEST_DIFF: f64 = 1e-7;
+
+fn solve(ships: &[Ship]) -> f64
+{
+    let mut lb = 0.;
+    let mut ub = 1_000_000.;
+
+    while ub - lb > SMALLEST_DIFF {
+        let mut valid = true;
+        let y = (ub+lb) / 2.;
+        /*
+     x + y + z ≤ xi + yi + zi + piY
+   x + y + z ≥ xi + yi + zi - piY
+   x + y - z ≤ xi + yi - zi + piY
+   x + y - z ≥ xi + yi - zi - piY
+   x - y + z ≤ xi - yi + zi + piY
+   x - y + z ≥ xi - yi + zi - piY
+   -x + y + z ≤ -xi + yi + zi + piY
+   -x + y + z ≥ -xi + yi + zi - piY
+   */
+        for s in ships.iter() {
+            let a = s.x + s.y + s.z - s.p * y;
+            let b = s.x + s.y + s.z + s.p* y;
+            let c = s.x + s.y - s.z - s.p* y;
+            let d = s.x + s.y - s.z + s.p* y;
+            let e = s.x - s.y + s.z - s.p* y;
+            let f = s.x - s.y + s.z + s.p* y;
+            let g = -s.x + s.y + s.z - s.p* y;
+            let h = -s.x + s.y + s.z + s.p* y;
+
+            let i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
+            let i2 = [(c - e) as f64 / 2., (d - f) as f64 / 2.];
+
+            if !(i1[0] <= i2[1] && i2[0] <= i1[1]) {
+                valid = false;
+                break;
+            }
+        }
+
+        if valid {
+            ub = y;
+        } else {
+            lb = y;
+        }
+    }
+
+    ub
+}
diff --git a/codejam_2008/src/y2008round2/mod.rs b/codejam_2008/src/y2008round2/mod.rs
new file mode 100644
index 0000000..4f053df
--- /dev/null
+++ b/codejam_2008/src/y2008round2/mod.rs
@@ -0,0 +1,3 @@
+pub mod a;
+pub mod b;
+pub mod c;

From 2d809d8e9349217f9f7b112dcde50529e8ceffba Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 10:52:38 -0300
Subject: [PATCH 060/122] c

---
 .../src/y2008round2/C-large-practice.in       | 3881 +++++++++++++----
 .../src/y2008round2/C-small-practice.in       |  977 +----
 2 files changed, 3033 insertions(+), 1825 deletions(-)

diff --git a/codejam_2008/src/y2008round2/C-large-practice.in b/codejam_2008/src/y2008round2/C-large-practice.in
index 381d4fd..46cab64 100644
--- a/codejam_2008/src/y2008round2/C-large-practice.in
+++ b/codejam_2008/src/y2008round2/C-large-practice.in
@@ -1,936 +1,2945 @@
-20
-500000 1 34044397 942475857 285290546
-233459890
-262143 27 778531071 478442808 548374783
-308073206
-83422893
-212000218
-478716954
-253195088
-177976935
-150684103
-238705282
-544118711
-266035281
-107502784
-368192145
-476184022
-262948728
-76122559
-216654622
-248475547
-25676357
-411398449
-118850100
-280155516
-284831197
-321535605
-153133880
-134913011
-267278025
-36352599
-262143 1 0 1 446980011
-0
-95964 90 599045317 521316857 727089494
-290089318
-312709453
-318873673
-206389249
-298028848
-45794809
-475695467
-496694758
-662152558
-528255614
-138050462
-391261785
-222223066
-425763213
-503959729
-722811667
-19005510
-239331005
-499008944
-338100050
-69765755
-113140862
-609893627
-271206651
-343145408
-644739489
-621314226
-215101232
-18572699
-655099060
-203891367
-308662017
-274503853
-522765040
-515051266
-572532702
-602344683
-297442073
-342137966
-571192582
-98608194
-480188428
-235364873
-354616094
-212646981
-46019942
-350338267
-231652491
-319135781
-156042552
-603537376
-422686371
-269183414
-520126343
-588362
-612328822
-437776338
-621902588
-134125394
-456349038
-583696988
-371801595
-71706395
-131111348
-201261976
-586757662
-703644050
-76517165
-190895075
-352477356
-681494581
-289503269
-139361124
-223554794
-644119363
-352008105
-269574736
-301152971
-583660596
-622495352
-457195523
-493893312
-318092229
-33074277
-286930162
-318680591
-679187933
-31401840
-247278519
-120008668
-209415 75 681018507 488493941 54816370
-35221126
-31301077
-25741497
-11472710
-13837473
-14068441
-37078898
-24665859
-40453086
-16158757
-5896484
-7590240
-51354068
-42027820
-30722718
-33613077
-17544696
-34095507
-29152294
-39519354
-3779894
-39382207
-41635262
-34263968
-2281152
-8185998
-7427527
-25503219
-3332609
-7427527
-31250125
-38553735
-38728604
-47346404
-40381227
-42920859
-51769627
-22643755
-3125130
-37406344
-29157295
-9021615
-35351366
-25694993
-41404217
-1612496
-49662853
-49303696
-26062785
-23998777
-34006680
-29842680
-8564615
-20825572
-9290278
-1200549
-29011570
-16717806
-17058551
-22698961
-24145333
-48308676
-6436326
-53228719
-31193493
-37172335
-41333208
-28146750
-4999721
-34813121
-1091506
-24511798
-43834736
-26797654
-50206791
-56990 24 171921134 124737550 128075335
-52938691
-95269194
-37069078
-100712551
-112631186
-11875657
-109491415
-112297490
-49684604
-81724473
-66428698
-28410232
-12634001
-50275787
-32289483
-94125522
-98889045
-69461819
-53065962
-107570370
-83770332
-14620118
-9360759
-126213310
-262145 42 145531645 885757306 980606547
-378455658
-814110217
-92168997
-71118287
-467083865
-775438487
-880685736
-623217802
-595151384
-245416213
-56255840
-928449257
-481966308
-116781280
-151291508
-112650517
-199565913
-449054739
-240771283
-788274512
-82119736
-220341932
-533884977
-4037547
-663725960
-55068056
-10343988
-828651059
-773948262
-804679980
-907347701
-171797373
-451913096
-813246144
-56645106
-918996961
-421807531
-751060288
-375337662
-36352368
-15869954
-431593502
-262145 21 517390101 629185474 254942425
-230249956
-182707522
-177726730
-221463314
-16736152
-154446216
-135047575
-3521732
-60310147
-79330078
-237567338
-5162288
-44025962
-187289455
-231267760
-17013746
-161170428
-52813100
-104842228
-12221209
-48280558
-262145 1 0 106857578 106857580
-106857579
-1 1 500919862 638803977 672251447
-520731691
-262144 8 344132383 951709009 722466051
-523911460
-207973982
-668055032
-261297330
-137925291
-158202281
-350899081
-654301879
-262144 44 461818864 146611969 133102166
-87310916
-48654929
-105742901
-33619206
-67577923
-31598751
-49318271
-70128239
-59274917
-81081458
-74578222
-26277692
-22973943
-85405865
-17196442
-122492519
-99609318
-25023807
-1482304
-99440498
-86873349
-18226296
-51718971
-106905063
-36003260
-68758783
-8272623
-15849307
-82268586
-76557460
-42694156
-18628344
-107363398
-130588066
-34398559
-23990163
-29084651
-83716830
-94118402
-70510576
-13847130
-17745467
-96788268
-18972081
-32120 38 597181980 953629629 571089127
-410173084
-59861848
-427637726
-124581572
-213470673
-289018355
-490843185
-256663175
-170119558
-132154487
-133693740
-423789105
-314348443
-284431223
-31067954
-275228980
-422543211
-409320777
-536066658
-136017385
-413296126
-86548672
-241219003
-273071525
-415531233
-393566859
-14149952
-7407819
-199712841
-14149951
-470150835
-175669658
-74011799
-326699435
-300251231
-287482472
-181501523
-356878149
-100 100 0 0 1000000
-36806
-36806
-37390
-37390
-74964
-74964
-76131
-76131
-105103
-105103
-129640
-129640
-151741
-151741
-211339
-211339
-237004
-237004
-263047
-263047
-293761
-293761
-301435
-301435
-323326
-323326
-338242
-338242
-347077
-347077
-349319
-349319
-368336
-368336
-376122
-376122
-378338
-378338
-412918
-412918
-413843
-413843
-434061
-434061
-443495
-443495
-445927
-445927
-461547
-461547
-501026
-501026
-510648
-510648
-518021
-518021
-527590
-527590
-535780
-535780
-536963
-536963
-690313
-690313
-693724
-693724
-724943
-724943
-752202
-752202
-773335
-773335
-775740
-775740
-806536
-806536
-819618
-819618
-820864
-820864
-821601
-821601
-855530
-855530
-872860
-872860
-901942
-901942
-924805
-924805
-935327
-935327
-936176
-936176
-956905
-956905
-970043
-970043
-976754
-976754
-500000 85 833479489 693361710 738690593
-241004332
-111840552
-532707497
-43824357
-125475216
-644348871
-738468855
-15118950
-162849998
-540459550
-26376625
-566653687
-66759354
-455119920
-305820340
-307224918
-241732259
-734933765
-464317248
-592352013
-268392939
-274382326
-383400897
-268982709
-81254232
-668622103
-421056956
-505940667
-214500166
-12263901
-7492504
-524092629
-192692584
-540200001
-567916987
-318167801
-445858279
-636283380
-401874882
-677296408
-506640468
-428251508
-505259502
-641987954
-213268966
-140977380
-279110410
-455001225
-137220552
-73325196
-308662645
-405613491
-347707523
-21961080
-4493738
-497549886
-20480721
-494138826
-264799961
-234980887
-574990858
-272292465
-88971055
-28992849
-73801873
-656888042
-415748781
-588248283
-623068960
-78933071
-526854098
-459606967
-507184579
-362011138
-362904328
-720453545
-502988519
-642014738
-505352308
-708797202
-715339935
-143912491
-444308232
-392944996
-165873571
-401585 98 580810038 45401427 869224038
-472428710
-368440569
-785110130
-277783694
-43990480
-260018475
-360268665
-488196920
-541879011
-475144554
-862843394
-340710005
-33890338
-131544648
-665584779
-238031432
-230052968
-830405139
-311283252
-515343513
-489720629
-420998116
-277815300
-259300568
-354801486
-421629574
-846275544
-657351916
-319547355
-568015933
-404819665
-791976066
-527420930
-780894223
-660724188
-162375839
-631877127
-611957282
-650572759
-304532100
-217877798
-235156544
-236206533
-251768136
-366701192
-32567274
-80763997
-596754160
-453936841
-392047249
-242873635
-74433433
-404009793
-111653363
-333734001
-349775708
-124247365
-770973973
-137903586
-443794720
-469765869
-133687679
-366546748
-127962761
-45357864
-618235365
-290338600
-268199419
-360968609
-531875788
-572731519
-169810835
-767032332
-808938053
-421578971
-724697952
-432469755
-502342968
-43192502
-17182559
-485354645
-286066137
-91615992
-20140401
-857907966
-16314421
-369916109
-112931293
-378252823
-98784123
-147690441
-848018692
-692660268
-105201618
-566945881
-328982560
-723436983
-448248910
-26220 69 214840371 558065001 491810264
-268782196
-201261975
-452910276
-224084948
-76284745
-151995087
-84752040
-265969062
-240003961
-43870572
-489523857
-190818664
-395878677
-65793933
-235440601
-286234613
-196479021
-491141728
-288317662
-77797624
-267684971
-318716790
-139947181
-274820049
-350118630
-130694667
-394828717
-401095883
-33086285
-394828716
-31969267
-301868481
-104280428
-484879543
-345710837
-180565173
-145064366
-250220285
-266291643
-385068327
-294090857
-264005236
-84076728
-198159270
-329799170
-139274737
-484393883
-346035599
-138606202
-100658689
-423833224
-226048581
-239132887
-71970141
-9058366
-97441254
-22422216
-403887083
-318294545
-367076173
-126662944
-350263812
-488702062
-50700780
-343333091
-162360043
-231265953
-308154865
-412580328
-500000 41 627487402 850757472 355347209
-195149906
-73848167
-251412231
-230473233
-222197486
-323778966
-288852813
-23031090
-214561397
-185224104
-346800408
-48013925
-263605687
-14607016
-284834790
-103415800
-197949405
-232486887
-23721250
-158845626
-285143584
-256969411
-89625025
-90825289
-159132850
-78786138
-236550095
-60525440
-203448798
-170508467
-352696762
-43251496
-228956240
-233361390
-258324335
-80406123
-201793148
-191829939
-88036819
-61007336
-6306441
-262143 76 169673650 358307488 976790025
-342459430
-495771109
-893272552
-18064856
-750713533
-496008424
-309353639
-570534382
-673735155
-828739054
-479326287
-210352273
-557920281
-374903771
-162718172
-637250360
-461547186
-932707736
-573332074
-31007543
-801088823
-633325495
-702062821
-957920426
-332301375
-606339783
-643314311
-501975026
-11067222
-472620688
-877857476
-159623055
-968391797
-600436405
-177687911
-548411707
-902541232
-293137952
-925042491
-405582764
-145086981
-233675155
-615935037
-509103665
-608578927
-584749611
-169564000
-93336088
-346763724
-742896074
-124343632
-171062523
-205527947
-632502855
-935079351
-537829322
-262052613
-601603637
-63014323
-79216238
-97434300
-746968202
-238839293
-871922499
-176710984
-222623606
-249640583
-102462191
-515761558
-3989452
-314141357
-466944942
-237664607
-930076394
-976048607
-846243534
-372914 73 652812536 169882417 338406909
-147136321
-303777868
-73993541
-337532301
-234534584
-223115906
-37996798
-275942672
-218969514
-131466164
-233109637
-124556735
-48678159
-228315238
-152966967
-173365446
-324410121
-297309737
-148797586
-94274210
-140417933
-48384212
-313897866
-162347120
-154642522
-169779288
-261505240
-130641241
-324440980
-129242318
-146298174
-133170392
-315977992
-103249521
-15253590
-95063473
-209323233
-53250389
-32599236
-311250554
-184716553
-148666680
-97400380
-116352519
-38575009
-133325153
-289717965
-24578221
-92227981
-321473358
-1810237
-115603720
-31450661
-198665909
-277950840
-69050989
-30038289
-84006977
-82650036
-16072360
-213249296
-228948210
-32200558
-190820379
-215155538
-47454149
-285883853
-307436577
-322069253
-201440895
-280280222
-51336703
-11700666
+10
+200
+35539 12816 36367 3
+14770 42618 31207 4
+64533 22234 31809 1
+65159 44160 27322 4
+34692 32974 26007 3
+9382 10799 39866 6
+17909 14809 31918 6
+16265 11580 42279 5
+32347 8818 31944 3
+14947 26268 29502 4
+34531 22262 29196 3
+24029 35783 43739 2
+11188 54909 27243 4
+16968 7666 30433 3
+33161 39716 26917 6
+13527 12872 47937 2
+33536 22864 33236 5
+14103 38637 42639 4
+9053 10845 41210 1
+18027 18963 28832 6
+34334 30406 34973 1
+42830 21987 41095 4
+68998 27971 27783 1
+49900 29560 25710 2
+38126 44538 29390 6
+54290 12937 35296 3
+20166 13459 39492 2
+49741 16350 38368 2
+33088 13043 37640 6
+21148 34728 43382 6
+11386 27458 44001 3
+69348 23877 31628 5
+44666 14567 31643 4
+34101 50874 30145 6
+34338 17533 30335 6
+60413 15853 29782 3
+47405 22332 31968 4
+36932 8925 44024 3
+21064 29476 34255 1
+9670 24655 30090 6
+38488 45021 26478 1
+45861 31387 27303 1
+14413 20268 40065 3
+49225 29297 29399 1
+59238 42275 29573 3
+23641 11546 36484 1
+87389 11139 29070 6
+39615 13213 34399 4
+32431 44570 26065 1
+74920 29894 26378 2
+64555 13233 30094 1
+47977 13197 39916 6
+13230 37032 42163 4
+79697 19665 28261 3
+39259 45085 30421 3
+15110 38637 30311 5
+9338 8126 38748 4
+29675 37322 26289 4
+87594 15887 28583 2
+27647 47953 25862 2
+62526 11700 36095 6
+14850 31775 33896 6
+65697 22647 33165 2
+14482 8097 29593 4
+54711 10438 40549 1
+23224 33073 41364 3
+11933 30405 50186 2
+55908 45869 29626 4
+46760 10446 30387 3
+21795 19970 33797 5
+11733 47990 33653 3
+30162 13681 31258 2
+61455 13843 30093 2
+37430 14722 46628 3
+34831 21905 40785 2
+56126 44221 27421 1
+34841 35292 40118 1
+59144 16949 38924 2
+10824 35203 42723 6
+24073 23575 40300 5
+66809 13920 35322 4
+92536 12208 26617 2
+58990 11831 27843 6
+19646 10968 42733 2
+31989 23699 27924 1
+60064 12100 31727 1
+82468 11952 27049 4
+21571 26127 33903 3
+27186 16307 46077 5
+47073 28478 30484 4
+34133 28586 27228 2
+34980 7793 48563 2
+22399 23888 48217 5
+21820 36421 32307 5
+15363 43368 34661 1
+42572 40224 26908 1
+17113 16042 35786 1
+21066 39318 31150 3
+12379 28326 28842 4
+72287 8846 27173 4
+63654 20045 32476 3
+11093 36908 33850 2
+44356 15611 33617 5
+13968 36746 34055 5
+17752 23483 41850 4
+21259 40930 27735 1
+47462 40990 33609 3
+59484 46189 26978 1
+22776 36545 29184 3
+59859 16477 29135 6
+45824 30019 37987 5
+80284 13699 31545 4
+69851 20489 28800 2
+52411 33105 33627 6
+11462 48239 31344 5
+34411 34011 37612 3
+21283 28012 47522 2
+69830 44414 25913 2
+35114 23349 35627 3
+46009 31756 31569 5
+51886 54435 28003 2
+17525 22688 49499 3
+14268 10506 36355 2
+25248 22197 30847 1
+17784 38912 32032 4
+61139 16204 38638 1
+38653 16625 32113 2
+55849 53055 26660 4
+19252 21260 35592 5
+42718 12222 33590 5
+13304 12851 37905 5
+33983 23339 36808 1
+55954 10056 25888 3
+11362 41998 40753 1
+60248 35608 27177 3
+9260 38396 31035 1
+17358 8107 38045 1
+57686 13974 27972 2
+65492 8563 32634 6
+27169 20997 31897 3
+49199 8359 31412 2
+19138 33033 38457 5
+39510 8170 39938 4
+59290 29256 26891 6
+55023 35718 29471 4
+22790 37086 41525 3
+42444 18929 42913 4
+17103 24644 47667 1
+24288 35839 41983 4
+27441 11533 49526 1
+94566 9737 29604 6
+14978 17356 37111 5
+37783 20055 42346 1
+24981 34597 43518 4
+41755 8487 44543 4
+28382 12564 44661 3
+33607 26771 42943 2
+27229 10088 38571 3
+25308 28093 46557 2
+48370 24358 27619 3
+30953 29617 43542 4
+16959 15307 32273 1
+58229 31622 33636 4
+40183 47801 28371 6
+28359 18893 44627 3
+26689 32887 37632 2
+29829 33220 36519 2
+31604 7834 34731 5
+58707 47798 27742 4
+30542 20303 26913 6
+39320 39673 36995 5
+18807 40292 37031 1
+23507 8112 37894 1
+68936 26496 27836 5
+16924 15046 42768 5
+71919 9797 28562 6
+43025 24476 34003 2
+13391 39288 37892 4
+72395 17100 31225 5
+46794 10637 40553 3
+16783 12592 45257 2
+35497 51601 26392 3
+24830 11191 48691 1
+46536 41240 29928 5
+9372 35545 30685 6
+10021 44373 30090 3
+78038 33339 25764 4
+66180 10981 27277 1
+45286 9087 42215 5
+86905 26717 26223 2
+67342 28904 27725 5
+56936 25289 27946 6
+60181 9647 26023 5
+22182 38199 39805 1
+14481 29813 34185 1
+75950 9216 28215 6
+62999 37959 28068 2
+21094 30992 39629 4
+79325 12131 32309 4
+76933 12331 30137 1
+100
+766730 378943 726450 3
+563815 555207 46548 4
+541290 61612 123236 1
+264743 131778 858146 4
+887804 618746 806701 2
+948350 193326 650383 1
+851944 763255 862266 4
+378946 280955 773400 4
+389202 915174 189889 2
+682755 736430 421813 4
+934336 276971 417147 1
+502149 682790 478204 2
+122254 916463 477444 2
+939375 900968 647720 4
+795589 388591 470465 1
+688464 665910 269001 4
+274455 550476 769485 2
+247169 184604 2634 4
+363121 692647 806491 2
+221049 244436 349157 3
+870356 398940 50189 1
+143496 249216 6362 3
+383400 812174 120890 4
+140210 507013 262010 2
+974914 105731 282522 4
+523602 632977 541613 4
+445575 600164 658430 2
+921889 618390 66600 1
+166229 268367 314481 1
+649122 832695 188854 3
+899422 733601 591347 1
+874489 632579 943845 2
+507176 569156 889467 3
+553188 768296 551117 2
+438522 994686 424978 3
+186010 263677 168796 3
+876700 550308 769607 2
+955151 458471 497650 4
+575908 161320 942939 2
+321822 735403 691954 4
+904271 57836 23516 3
+380864 13204 204186 4
+549866 855256 35255 2
+118068 258349 415200 3
+382353 724679 581752 2
+615417 567997 352889 2
+675088 192406 110629 2
+573633 977228 642753 1
+504518 356231 934366 1
+263707 267029 747358 1
+861305 450030 562282 2
+512467 358119 651908 2
+390384 852092 640190 3
+247633 25927 307915 1
+221583 457440 845233 1
+560468 901299 740269 1
+566427 658987 579018 3
+295933 333330 325572 2
+615014 535140 818809 3
+851444 347603 65937 1
+521130 514604 846473 2
+553468 768546 454296 1
+101329 362266 858503 3
+966380 641306 744691 3
+486103 405554 357872 1
+95950 151514 472655 1
+434394 899649 302570 1
+304043 771272 102443 4
+564378 459182 413564 3
+663274 191835 568275 3
+22264 361643 325451 4
+916514 757280 491287 3
+682344 206343 125261 4
+849157 919237 454006 2
+817703 984903 884082 4
+751327 413486 719618 1
+480282 11846 940011 3
+850102 729746 219766 1
+7009 863732 961788 2
+285567 169174 88948 3
+8501 10603 475691 2
+313840 200024 288826 4
+743658 860711 150066 4
+100025 374182 274868 4
+786591 698667 307641 2
+605718 939660 609906 2
+500056 761460 889792 2
+295421 526435 723418 2
+888358 422713 840605 3
+634162 143120 633688 4
+332965 6726 915688 3
+969200 758192 103239 2
+520347 328736 383625 3
+41117 228144 677477 1
+529018 47503 360256 2
+10098 931131 226871 1
+396622 118038 33506 3
+987375 613188 968652 3
+229173 202774 778422 2
+758870 935510 643314 4
+1000
+100600 114342 34423 4
+106185 24243 99523 5
+272511 42714 53325 2
+230477 53980 60574 1
+162028 47696 39280 3
+214543 62132 30992 4
+35496 81085 44892 1
+102648 69150 80695 2
+119546 100901 77449 5
+238361 117164 17337 1
+8298 144006 16916 3
+286892 84705 7628 3
+32071 12578 43467 5
+46297 71639 99956 2
+118210 71752 80826 5
+30811 83206 55061 3
+88602 18312 119737 2
+348330 13970 44647 3
+142515 51248 37426 3
+59906 50413 52951 6
+52804 27421 85049 1
+48121 10322 81281 5
+100019 42755 50763 2
+239610 76607 19310 6
+321855 49681 39062 2
+13855 155307 90486 2
+207593 132905 23704 1
+97757 81889 89425 6
+1392 61728 37828 5
+125982 202091 44717 2
+117020 20906 48410 3
+127012 41369 79731 5
+100443 104765 6462 2
+233210 136511 2032 4
+180952 104977 10172 1
+146730 44603 56479 1
+77035 77785 9086 6
+326898 7261 38840 3
+326294 77657 23280 4
+20377 1969 30729 4
+45479 100710 14966 6
+35179 131013 64046 6
+143550 119043 63451 3
+11156 108451 97635 6
+118853 55617 71809 5
+213031 35138 12257 5
+277491 92388 21926 4
+151977 114610 25945 6
+167954 137858 40430 1
+306572 48579 8596 3
+222411 70036 61658 5
+340267 63188 5437 4
+130599 33496 41099 4
+98702 200332 4222 2
+168747 23812 30242 5
+1167 158413 42520 6
+40527 44882 48696 3
+192066 88692 5854 4
+180862 19896 75078 2
+214385 135045 28767 5
+129907 18891 27204 2
+139040 135564 61189 3
+111016 131466 34725 6
+45231 22753 11758 1
+228515 50645 41258 4
+143488 146067 66864 4
+172327 70791 5555 2
+213419 106387 36998 5
+91366 38910 35440 5
+172838 48249 34746 4
+102245 133312 26015 6
+177217 105291 47817 4
+112280 79215 26227 6
+205612 74558 54089 2
+280071 67837 25827 6
+206748 133735 52878 2
+125467 114906 1705 3
+240077 13151 67208 2
+170756 68857 4691 3
+138463 95867 67052 3
+92038 30184 125084 3
+126557 88802 29560 5
+82430 97614 24799 2
+15089 144427 19820 3
+86021 126608 62351 3
+292710 129372 2927 5
+253951 90169 47816 3
+109351 18227 63261 5
+81833 159413 15886 4
+278552 17882 49231 5
+1252 122292 79503 6
+119188 43282 54979 4
+307507 113559 3819 1
+62770 115503 79113 4
+86599 58335 113800 4
+269904 31458 19486 5
+273053 71176 14077 2
+292314 203009 916 5
+188427 240015 5681 1
+162600 230766 17411 2
+52523 14030 31035 6
+283089 35180 43844 6
+151502 135183 47430 2
+248494 123611 36984 4
+263248 107066 31845 3
+57070 28678 123816 6
+232801 52433 43970 2
+77056 141975 25282 5
+311326 17251 7161 5
+106611 222641 24205 2
+132246 4608 27631 3
+17938 88847 51186 2
+136287 202735 22182 2
+28498 142247 86437 6
+92079 30369 59638 5
+139356 95665 39979 2
+17816 123635 18919 6
+39466 91122 24816 3
+113077 170254 49994 3
+368295 28528 8862 5
+248944 9455 57516 1
+295206 33976 41233 6
+74169 42614 52258 4
+115682 181943 18534 3
+219435 101166 12906 1
+212857 41884 30258 1
+56156 2945 119789 2
+361333 21289 36530 2
+43941 232904 1115 4
+227557 77073 2363 6
+191228 160224 49957 3
+129105 165941 22326 2
+413169 15487 22317 4
+275198 57050 46267 3
+120769 83425 85792 4
+46056 54040 80597 2
+140819 184542 45075 4
+198640 203225 26766 3
+138811 30942 28248 1
+173477 206108 29940 1
+220858 126807 1161 6
+4333 112105 108394 4
+314360 51107 33942 5
+327070 44728 41915 3
+232782 173204 18364 5
+42833 200044 12315 3
+250085 2749 12986 4
+160299 22749 75945 5
+65473 92577 98810 3
+4438 88812 114770 2
+36856 195478 55356 6
+175146 80848 76717 6
+124917 129369 49996 5
+169119 7713 35845 5
+364975 97741 1218 3
+143835 111213 68857 1
+247745 123757 21269 4
+122547 66999 75209 5
+68946 100177 49215 5
+39176 23704 27382 3
+104492 96373 66846 4
+64992 220892 3827 2
+181665 41095 25760 1
+39056 186039 32769 4
+330210 52410 31895 6
+76109 43172 67233 5
+185431 94327 72759 1
+23653 92902 22357 1
+10748 93559 125422 1
+165994 179324 34732 5
+926 35821 81908 4
+36245 188617 54309 5
+253741 88572 19298 6
+204652 210856 8193 5
+302615 153770 4372 1
+30149 76450 8681 4
+281348 86541 23025 3
+363120 8283 4370 3
+20359 173393 23814 1
+270989 57375 40686 5
+166600 53787 35540 3
+110699 142111 52854 5
+24589 78786 6408 3
+98962 239915 2447 4
+69594 101048 61638 3
+71388 144803 85130 6
+133996 225762 24933 5
+7812 81684 72949 6
+100054 233862 3086 2
+35127 235600 9568 5
+106764 73501 3248 3
+137168 25006 78675 3
+181665 17195 35924 6
+182332 187778 33370 1
+10415 92839 82518 4
+239402 166311 23544 3
+207979 27647 52982 5
+255566 170362 12189 2
+71388 36686 12504 3
+194826 80680 36269 5
+11386 203775 16354 4
+224182 176473 26225 1
+157104 73195 61592 6
+52300 143970 30486 3
+98873 13481 23565 3
+24534 44516 45879 2
+24474 2584 70853 4
+125967 206921 1036 6
+197208 66576 69932 1
+197390 128239 26789 1
+289861 5835 39190 1
+428 158457 85128 1
+100622 59015 67394 6
+77619 136567 49621 2
+95538 59735 110999 1
+197477 74098 2989 4
+130334 32752 95540 2
+291752 31254 48245 4
+6937 130450 105721 3
+230815 72246 21473 4
+341902 128131 4794 4
+108841 207295 23888 6
+333606 36835 13414 6
+212917 5401 76613 5
+193392 45574 52216 2
+17434 73242 72664 1
+133865 51666 80957 6
+317667 8573 44172 4
+6133 21517 53461 2
+294450 19389 43345 5
+143951 121431 3983 6
+54947 37836 84512 5
+124305 192581 28860 5
+61086 95475 3024 4
+304933 2625 60224 5
+135986 170571 14584 5
+85828 93040 27046 1
+72519 119252 58633 5
+161931 241714 8117 2
+226997 13735 29854 5
+49434 66939 6033 3
+276176 16300 16188 5
+187417 14130 25976 6
+192714 128558 10770 5
+180602 15773 76149 3
+18899 166608 17810 3
+154385 14242 21673 1
+95403 137818 71560 2
+225405 153051 24915 1
+306965 2931 50831 3
+61400 164158 14094 2
+277323 108650 36088 4
+430642 42803 6525 1
+167862 28195 90928 1
+253846 221878 8089 1
+389892 41884 11116 1
+107955 125884 80206 1
+241080 86717 55812 5
+147795 136032 31937 4
+239517 10009 57180 6
+23771 228154 5484 1
+117772 54780 27998 2
+3954 166665 73733 4
+157558 40077 101741 4
+53817 162708 53897 3
+411270 48908 12334 4
+261040 29745 1614 4
+11657 1256 36619 1
+53497 4527 103200 1
+10009 25261 124804 1
+292501 42650 3888 5
+109816 97033 77318 4
+229395 17741 84778 4
+82057 38811 29151 2
+170516 222187 1357 5
+106807 39048 18811 5
+160438 156753 4851 4
+573 123190 104417 5
+123346 87455 27991 6
+10292 5588 13551 3
+31440 140073 20781 1
+175723 9596 72248 4
+103807 205381 44115 2
+334127 13335 47755 2
+189795 6950 84217 5
+350952 16912 26815 1
+175098 83094 41378 3
+333572 20462 10159 2
+132795 77663 5174 4
+210957 60379 72839 6
+315495 9510 53797 3
+191984 25594 29466 1
+117958 127156 54151 5
+110407 123013 84889 6
+185554 128578 5526 2
+270050 51594 7721 4
+96104 71356 4995 5
+160085 34712 45653 5
+291430 102193 6203 3
+246763 92145 10906 2
+64781 75186 34198 4
+222259 164559 12695 2
+198702 110085 7871 3
+301449 106237 7871 4
+354408 116305 9272 2
+225352 27830 28168 2
+75337 36794 104892 6
+75683 194595 43626 2
+248425 27873 19174 5
+122069 145986 4916 3
+152499 114156 15314 3
+97421 5369 25015 3
+267001 31613 50647 6
+68074 169676 2952 6
+55630 177219 22901 3
+336630 45503 22899 4
+219776 1205 26860 6
+155334 147326 20081 5
+137257 26155 43408 5
+310838 39717 49007 5
+205333 13017 5174 6
+104770 102524 41807 1
+75025 88388 84360 6
+20925 177632 39757 2
+278358 3372 37070 3
+144135 42626 38418 6
+249635 68477 37328 5
+195723 71569 50319 2
+260511 15377 16469 1
+79146 228421 13066 4
+166627 18367 10344 1
+40072 33423 61419 2
+265542 17773 46198 3
+28591 69172 66186 6
+260092 116382 16943 1
+39744 105232 36895 2
+65270 59540 83210 2
+112796 68678 33684 4
+194431 161992 46407 6
+23403 42776 51017 3
+48607 177086 37311 3
+87268 163688 41412 3
+199108 76325 19059 4
+241661 182612 10338 6
+126695 42573 1783 5
+37995 97997 89421 1
+217525 159436 17559 3
+122056 92071 58111 1
+147084 30554 66772 2
+89641 194010 6777 4
+187037 78833 20486 2
+354601 38568 5271 3
+91508 25819 74363 4
+380246 17633 9778 6
+73432 33592 43519 1
+32984 189423 18731 5
+36385 94512 111225 5
+184678 4501 35794 4
+174840 16990 92840 5
+116308 105092 32751 4
+180387 53270 46779 5
+397104 19705 24555 1
+2606 5822 91193 1
+141230 121149 7509 3
+139117 68049 6971 1
+40062 192000 50250 1
+283565 28125 11728 6
+146562 102361 36405 5
+217147 228215 2251 1
+51873 173735 43888 1
+250663 14145 42626 4
+17016 150078 31571 2
+200749 38688 23252 3
+245047 157706 8473 1
+128401 68770 84138 4
+393404 29338 14520 6
+68000 133096 41856 4
+133541 19060 42088 4
+37538 115688 2155 6
+123861 150119 36242 2
+23004 100578 113185 6
+20575 140729 79078 5
+146460 14730 46265 2
+90829 226120 17630 6
+54819 174709 5826 1
+129165 76020 89737 6
+199495 61044 36006 5
+175521 105803 70143 2
+198085 64602 9509 3
+257244 189787 17290 6
+290518 97988 8515 6
+154297 24627 53872 6
+87426 201536 28371 1
+131496 165293 48172 3
+310222 11342 5979 3
+37834 123260 98871 2
+75111 2885 124002 2
+151874 210860 1550 2
+113081 21441 115840 1
+103848 44145 38677 6
+217314 197267 3444 5
+106726 161371 64044 4
+201897 15371 83770 5
+148877 12028 34275 2
+204899 138739 47879 5
+1177 23063 58888 2
+52348 93521 43608 1
+111199 14780 13280 6
+81136 62021 38089 5
+174609 137349 24134 6
+99797 64135 39539 6
+99183 182958 65109 5
+100032 218674 30138 4
+87748 123658 14770 1
+10463 132343 16402 6
+4415 16138 86242 6
+227220 56881 5898 1
+93717 192587 40360 6
+104595 18806 72502 1
+53469 172255 68785 1
+118064 86249 49932 6
+83824 63885 103474 6
+17161 223493 4598 1
+44396 22720 109681 1
+135323 65497 49582 4
+146467 24487 22172 6
+139454 7252 23110 4
+204796 85953 47400 4
+126032 179595 1421 1
+70278 102037 28431 3
+207530 200361 18483 4
+121654 24516 80833 3
+130970 84158 57217 6
+129339 63047 41677 3
+218737 168398 23871 6
+145941 84885 32934 6
+46582 121324 6666 2
+65461 11543 34882 4
+185388 101986 21412 4
+67619 127870 63217 4
+37872 98886 17611 3
+241177 158935 16140 6
+238741 9469 64365 6
+115258 89906 44834 4
+21219 63852 71866 3
+73755 85407 108627 5
+141631 163892 3501 6
+69264 134510 70932 6
+176313 90747 7121 2
+84559 51561 2199 3
+168508 227204 9916 3
+315959 97532 26391 6
+152397 26334 7226 5
+108570 5059 67323 2
+59905 130833 26435 3
+96858 47395 22805 1
+27334 116032 94123 5
+155495 80211 47138 2
+15697 78820 109953 1
+96202 152271 25516 2
+192192 226532 7819 6
+49410 134764 53959 1
+115843 98642 95027 6
+293307 16262 61803 5
+39743 187154 4155 6
+99235 104314 7527 5
+236105 82908 11325 2
+48669 16052 111220 2
+272314 123124 32020 2
+139035 118481 81117 4
+71497 41191 38745 6
+129443 146433 61651 4
+287398 26208 18489 1
+22361 128542 114610 1
+126662 177192 23539 4
+116945 33786 94691 4
+163469 36856 27455 5
+123450 150919 53062 2
+81375 131979 6525 6
+64332 136541 7468 4
+113075 39514 41373 6
+6230 65220 19496 2
+186590 17862 77500 1
+197025 41838 78698 6
+74145 210098 40573 5
+93972 28291 117564 2
+79518 6375 43512 2
+325766 19881 51396 1
+337494 19163 19959 1
+83473 22013 107254 4
+322294 147166 9469 3
+353572 25683 29539 3
+40469 136553 65094 6
+308773 63037 34640 5
+29929 34029 15447 6
+312127 66958 16598 1
+177261 25661 74207 3
+169574 120016 51867 4
+118126 97205 92431 4
+186461 27828 72932 2
+149143 75175 27131 3
+198167 5300 67942 3
+66699 121195 88205 2
+273736 207345 6199 3
+299515 29440 21579 1
+45885 49258 71969 1
+366974 43383 17599 3
+241406 1979 56430 3
+306364 43852 21986 3
+31260 3173 83363 1
+194558 6205 61246 4
+7075 171883 74851 4
+138328 16269 44169 3
+247930 14687 5159 6
+199947 206115 24499 4
+2987 15062 63990 2
+32503 167702 15940 3
+71417 49096 45143 3
+111788 73490 21647 5
+161726 162251 15663 5
+132278 16009 88057 5
+21982 169906 18820 3
+138176 201572 1095 5
+185134 177599 42974 6
+10637 93326 27906 3
+297454 1588 6930 4
+278512 79662 46648 3
+35895 43865 6327 1
+10421 68808 17275 3
+113336 205213 6180 6
+147953 17937 37596 6
+686 136675 60304 4
+20564 143200 97531 5
+148628 126786 43417 4
+350309 74135 21597 4
+249592 75979 42671 4
+66654 16046 68840 3
+288081 72491 5178 2
+94970 157308 78662 2
+111943 173001 49785 5
+197981 57959 31525 1
+20873 126185 48310 2
+120764 65480 72326 3
+110738 173111 56997 3
+471602 6972 7385 4
+93526 93022 80184 1
+126382 162946 7419 3
+116931 103282 6898 3
+242745 208284 10926 1
+229735 69279 3974 2
+183587 7764 100446 6
+90157 93677 6420 6
+75916 199414 26068 2
+59494 219861 4251 4
+209710 119495 53828 4
+96276 116402 39215 3
+292283 140611 8532 4
+157027 230152 1306 4
+135374 151364 60307 6
+55513 45332 30268 1
+35205 115720 56724 6
+277649 26013 21374 2
+100335 77348 24718 4
+158551 89677 61766 2
+207635 126037 38100 2
+221031 40261 13759 5
+34582 83940 43373 6
+208854 99374 13441 3
+227338 1000 64565 3
+36851 30717 44126 2
+63910 153392 7218 5
+251352 20211 23187 4
+229098 169876 9513 6
+305102 140323 10080 2
+67769 160598 6865 1
+59438 173173 29135 3
+4430 104298 24820 1
+204106 187474 24370 4
+273410 29666 55705 2
+216721 122199 46962 1
+259026 5756 70585 1
+27968 1851 9325 4
+72057 93033 49333 2
+351742 7015 17619 5
+174051 240583 1484 3
+229651 199571 15559 4
+66504 24549 9261 3
+68156 168275 11311 1
+75672 116498 64754 4
+45647 105166 84010 6
+9548 136082 108367 5
+154635 32582 54992 3
+91074 115540 80160 1
+79807 171481 75315 6
+194249 128118 14589 1
+89729 104517 86588 3
+95650 145468 68659 6
+308254 139206 17332 6
+241407 51809 34501 6
+50445 15392 34237 3
+30088 170121 36432 5
+239125 227950 7930 1
+162361 23327 19015 1
+165580 50046 86646 4
+92149 171475 44297 3
+159673 123319 8727 1
+106520 22610 79895 6
+166885 114818 50742 6
+291568 91842 35625 4
+197320 55755 79047 1
+314407 27806 22077 1
+254279 44102 45504 2
+65813 153437 91258 1
+77711 48118 34046 2
+70823 4600 25012 3
+46417 30209 82232 1
+58857 97792 10081 3
+126382 13853 116208 6
+35764 1324 56828 5
+249268 16325 5392 6
+150873 170274 50326 5
+90900 165836 37746 2
+135507 121696 76781 1
+277771 51369 6854 4
+21881 143008 37766 1
+186453 124354 47936 6
+164403 157045 47325 2
+266763 89454 3791 3
+41322 43673 67496 5
+149227 15389 100654 2
+444484 34223 2352 5
+340710 143210 3013 5
+57406 132101 47881 2
+14659 75415 93128 1
+198890 206831 19192 5
+322741 27392 16492 2
+153871 66212 69540 5
+5172 42513 113462 4
+122258 101213 72411 4
+92711 164419 27343 6
+120981 98916 53781 5
+166857 158409 48853 3
+7744 111629 81195 6
+235140 40960 47654 1
+59516 209272 29596 6
+16304 177988 26090 1
+90598 163228 37139 5
+111647 43080 28825 1
+304915 44740 45361 5
+29999 100473 70669 1
+80816 9319 104273 5
+15060 155514 20274 4
+156063 50975 96024 3
+240434 113861 23701 5
+39258 124136 13118 2
+36801 65028 50623 1
+169885 143745 37929 3
+227725 59076 68447 6
+338646 64168 25357 5
+81241 187172 31937 1
+266015 71223 25503 4
+243046 83370 51588 2
+250954 32774 14997 4
+213629 227558 17087 1
+321688 32805 32574 2
+20154 212753 34075 6
+361968 78662 11595 6
+145679 21492 85132 5
+108788 136654 36518 2
+189923 18680 53226 6
+96038 112344 71630 6
+223096 46083 6406 1
+36812 41157 109160 1
+93539 156062 62449 1
+41351 57052 39196 2
+86261 133962 67575 4
+305299 16403 12249 1
+206085 10736 45676 2
+115964 46337 88453 6
+129782 212129 13669 2
+216373 51814 31805 3
+70532 173021 45590 2
+207368 5223 68402 4
+205255 22734 81352 3
+79541 117682 75005 1
+49241 150577 33708 5
+209251 127704 39852 2
+101251 17670 107689 6
+43869 52514 5306 3
+192925 186646 20095 1
+121846 195217 15030 6
+81861 180907 39629 5
+8105 12878 64369 6
+134504 137733 21639 4
+22785 92207 108528 2
+362709 9486 13281 1
+187152 46852 76821 6
+194265 9252 72596 2
+91563 27573 100710 2
+24619 75313 74381 4
+187900 54635 17688 3
+129065 12215 106507 3
+200260 135878 10361 1
+282324 12308 61973 3
+137007 162595 15642 4
+106799 79376 39638 4
+159591 131056 28070 3
+243990 66970 42000 1
+132578 128978 54822 1
+262211 1084 67399 3
+311240 35866 34889 5
+321961 62833 5438 5
+316722 22876 45746 5
+240006 30154 64952 4
+319851 34346 17076 3
+81755 170509 4948 4
+103642 24317 75496 1
+328638 45454 30378 5
+151625 14434 96406 4
+273812 72834 52129 3
+72950 20556 109545 2
+201493 119348 38687 6
+76227 8131 109062 2
+242722 26790 63027 1
+117563 21143 117113 3
+82505 54317 89556 4
+327942 3413 37473 2
+238216 137536 12589 2
+90465 47281 6809 6
+103044 78232 72713 6
+4389 43240 66195 4
+51126 226219 21096 1
+6593 63911 66336 2
+110531 91950 86358 4
+86748 81847 76957 1
+86890 107120 54148 1
+54397 157898 16363 4
+360569 64504 18807 1
+37503 210907 10554 5
+80459 73081 8033 1
+148952 2629 10364 1
+25958 134336 62338 2
+12932 100308 69777 2
+124087 1536 2148 1
+135805 123542 52504 1
+109193 143024 13225 5
+178681 146386 2461 2
+163541 70596 15284 6
+227748 204037 14432 4
+71192 117498 78853 2
+180215 90042 57439 1
+330568 8232 24214 3
+77557 136166 70810 4
+134346 17530 63984 3
+124469 45078 99158 5
+285089 26542 45830 1
+214546 39023 36939 4
+37562 138826 14567 1
+120158 129122 17870 4
+40605 119218 18120 2
+227962 45091 69867 6
+46421 64513 15893 3
+82243 10817 80126 6
+278302 131102 19929 2
+214249 85977 20329 6
+307054 110547 9010 4
+215981 79521 47717 2
+49120 163112 44466 4
+111656 166716 63339 1
+324733 34621 17532 4
+91238 84253 20738 2
+256210 5788 31639 3
+90936 208188 2871 1
+145478 229451 9659 5
+212729 165335 7393 4
+15047 169899 80214 2
+112035 88304 78500 1
+170059 59540 39095 1
+174433 126970 10435 3
+143153 31099 14792 2
+5507 193994 37912 6
+156944 77320 66467 2
+265852 2204 63417 4
+64184 77614 27661 2
+188601 61912 58647 5
+192233 40104 61678 2
+163685 59086 31327 4
+58315 177159 72508 6
+312094 76945 15710 6
+61657 119486 52242 6
+172134 8247 94230 6
+54670 183764 52798 5
+202251 146484 7642 6
+102498 15074 66719 1
+97205 117610 22083 5
+223632 126345 28727 4
+130797 141911 69003 3
+385600 45624 9535 4
+277666 151796 12065 2
+146161 23180 87650 3
+107562 21356 37229 5
+94030 6911 123828 6
+129210 214756 5249 4
+122214 110526 11352 6
+72008 87818 96457 6
+175693 56854 41399 5
+304913 70471 25355 2
+198394 150470 49070 2
+86355 108765 5924 1
+60881 117266 30304 1
+383852 11292 1982 1
+40584 137258 23459 4
+132291 116099 33429 2
+39948 138595 23703 6
+149115 150045 39100 6
+139454 37245 42812 3
+104978 193649 14721 4
+177109 166422 51925 2
+207343 207136 14455 1
+304499 43592 46351 1
+171084 115832 15590 5
+45075 77487 3930 3
+227408 63345 10607 1
+32519 101123 96677 5
+407404 23230 9253 4
+89192 135531 60830 6
+38049 183521 52205 2
+197219 175752 9069 3
+430759 3367 10522 5
+3723 83825 44447 2
+67339 56455 11309 5
+293648 30657 10518 3
+79999 246231 1365 1
+166968 146251 6961 6
+218989 96876 37522 1
+204580 128636 28749 1
+88068 29196 6547 3
+1394 73927 104571 3
+164934 63781 86053 4
+229440 148002 13855 6
+363791 8845 19167 3
+168566 2316 44179 4
+273044 61878 19394 2
+215376 60100 46561 1
+119229 232026 1240 1
+158583 177353 18235 3
+121967 48804 62253 1
+102078 120770 20387 5
+2009 222996 25416 6
+120751 75535 10976 5
+361325 2189 35275 3
+86322 136632 56221 4
+81196 115068 95258 5
+153971 159089 43590 4
+217689 34711 42366 4
+254163 147691 33163 2
+141877 72395 21743 2
+98098 18820 37845 6
+159775 56044 83201 4
+925 74061 98960 3
+247596 204329 11112 5
+180219 108203 65103 5
+60130 128971 104571 5
+155134 22871 46770 3
+211398 69226 22989 2
+5416 1588 15414 2
+170625 109405 47558 3
+408720 46709 5443 5
+20141 50365 107724 5
+200295 125275 41920 1
+116271 35763 58109 6
+156125 138053 3709 6
+290263 59569 48934 3
+72652 38532 43140 6
+103959 16750 92815 3
+95037 3741 28418 5
+169143 40772 32815 2
+100618 54495 46576 3
+46715 191180 7815 3
+26757 171272 45157 6
+210711 62146 42409 4
+292289 63872 11357 5
+17756 101345 93003 1
+85828 99053 61340 3
+53978 157188 10171 3
+292882 30404 14453 5
+96136 36623 25354 4
+238167 89941 17223 2
+262308 96700 45311 2
+193135 101519 60785 3
+170216 137548 20362 3
+180921 50555 84524 2
+219097 148182 34482 5
+275422 177046 10388 5
+272683 26828 52775 4
+222355 55059 68182 2
+152941 132031 41716 2
+275033 26393 41597 5
+310530 10992 55395 5
+309957 96379 13471 2
+25349 116132 17202 2
+55650 44403 63870 5
+149260 31875 13488 6
+207418 27178 31096 1
+29425 126567 57208 4
+101730 160692 64755 4
+85455 11084 67237 2
+96117 13723 108268 1
+139725 106856 67547 6
+77717 63849 34785 2
+46691 71424 38460 3
+39331 97734 59228 1
+127051 76386 38869 4
+157002 119901 30734 1
+287012 179749 5222 2
+129412 10559 63266 4
+250201 133514 38082 1
+85948 199799 29143 2
+213384 186292 23580 6
+84118 142090 26869 3
+198150 179998 28211 6
+289141 125768 15375 3
+36466 17181 33234 3
+198727 55149 49507 3
+195089 132423 32103 2
+137432 156786 12295 3
+284070 131771 25229 3
+116240 57243 16097 1
+30193 86157 80906 3
+79110 86312 36518 5
+360118 22762 38647 4
+4987 81566 26952 2
+93583 69344 52690 1
+295853 62999 12024 3
+336953 48127 32697 2
+54623 126695 12895 2
+112024 32680 61065 1
+50644 132735 100819 6
+156776 197544 30743 1
+77741 57303 6878 4
+39857 43395 37657 5
+201560 10327 10723 1
+310864 17089 2696 4
+259205 142144 3708 5
+162780 169354 52283 3
+66800 104980 80990 3
+67070 36950 21731 5
+29387 66790 19783 4
+409441 26703 16582 3
+369995 29379 33076 2
+204019 134879 42636 5
+144247 43701 53077 4
+126663 40713 45006 2
+134344 56505 72051 3
+4193 199662 19530 5
+263802 5618 49278 6
+315071 71922 13081 2
+359978 83606 4616 2
+92073 191550 33238 3
+12396 58317 90397 2
+68581 128506 2747 3
+280967 38033 36341 1
+259138 10032 46243 2
+258789 135932 30229 4
+2371 119811 81239 2
+105146 66394 45757 1
+55240 96412 106534 5
+156489 189217 25661 6
+12316 139325 50993 3
+38396 100762 69324 1
+216087 70001 7525 2
+100101 97316 56368 5
+274219 14050 39717 4
+132384 99352 47446 5
+78259 151788 10744 5
+248784 148571 26967 3
+241468 17306 28084 2
+65474 107641 52808 1
+84796 10680 38416 6
+13023 154674 31562 1
+225933 232890 3124 3
+75128 50460 63795 1
+176035 62212 62901 5
+83496 190174 50407 1
+100516 95505 60914 4
+15261 6240 87974 1
+275747 32767 52328 6
+119333 215423 1209 3
+43126 215628 27380 6
+10355 75018 85838 3
+19834 70464 72035 6
+132822 68024 71963 1
+78533 199153 44071 1
+36269 98357 70009 6
+42549 55697 51825 4
+251926 98027 10442 5
+84394 169768 1112 3
+8359 57396 20463 1
+91114 148233 31197 5
+30402 122404 49499 4
+700
+90 30 60 1
+60 30 40 3
+60 40 20 2
+50 10 40 1
+80 50 20 2
+90 60 40 2
+50 70 50 3
+60 90 40 1
+10 0 40 1
+10 50 40 2
+10 40 50 3
+20 10 50 3
+20 20 10 2
+10 0 50 2
+50 0 50 3
+70 80 60 1
+80 80 10 2
+60 0 10 2
+0 20 0 2
+30 0 20 1
+60 90 60 1
+50 50 30 1
+40 30 20 2
+60 60 50 2
+90 10 20 3
+70 90 30 2
+10 50 60 2
+60 50 30 1
+40 40 30 3
+60 50 0 1
+20 80 40 2
+40 10 10 3
+90 60 0 1
+90 40 10 1
+20 40 20 1
+30 0 60 3
+0 10 0 3
+80 60 10 1
+50 90 10 3
+0 0 20 2
+70 50 20 2
+70 40 60 1
+60 80 10 2
+60 80 40 2
+0 60 10 2
+20 50 10 3
+0 30 0 3
+40 40 40 3
+90 50 20 1
+50 60 20 3
+60 10 10 2
+80 40 10 3
+10 10 20 2
+10 50 0 1
+90 90 40 1
+20 30 30 3
+80 0 10 2
+20 40 60 1
+70 0 10 2
+40 30 30 2
+50 70 40 3
+30 60 40 1
+90 50 40 1
+20 60 40 1
+0 40 10 1
+90 40 40 3
+10 20 40 1
+80 50 30 1
+30 70 0 2
+0 70 60 1
+20 40 10 2
+50 0 20 3
+90 70 60 1
+20 0 30 2
+40 60 60 2
+70 0 50 3
+0 30 30 2
+20 70 40 3
+90 70 30 1
+50 40 50 1
+70 40 40 1
+90 30 40 2
+90 20 30 1
+0 30 20 2
+50 90 30 3
+60 70 10 1
+90 50 50 3
+80 40 60 1
+50 20 40 2
+30 20 40 3
+50 10 50 3
+0 90 10 1
+60 60 60 2
+0 50 30 1
+20 70 0 1
+60 50 60 1
+30 40 30 2
+70 70 20 3
+30 0 0 3
+60 0 20 1
+20 40 0 3
+70 90 40 2
+30 30 20 1
+60 20 0 3
+80 50 10 2
+10 70 50 2
+40 20 10 1
+60 70 60 3
+80 30 30 2
+0 40 20 3
+0 50 50 3
+20 40 30 1
+0 40 40 1
+80 60 0 2
+50 80 30 3
+90 20 0 3
+0 90 40 2
+10 90 60 3
+20 20 0 1
+30 70 50 2
+40 20 60 3
+40 50 30 3
+40 80 10 3
+40 0 40 3
+10 80 0 2
+20 10 20 1
+10 20 30 1
+10 70 20 2
+60 20 20 1
+20 90 10 2
+0 50 0 3
+10 30 50 1
+60 30 60 2
+30 10 50 3
+70 50 60 2
+50 70 0 3
+20 30 20 1
+90 80 0 3
+90 40 30 2
+70 90 0 2
+30 70 20 1
+50 20 50 1
+80 20 50 2
+50 40 60 2
+90 80 40 1
+60 0 40 1
+0 50 20 1
+40 60 0 2
+30 60 30 1
+50 0 0 3
+0 70 30 2
+70 50 50 1
+10 20 60 2
+20 40 40 2
+50 50 10 1
+30 10 0 2
+80 70 20 2
+10 90 50 1
+30 40 40 2
+40 50 40 2
+10 60 10 3
+80 70 30 2
+80 30 50 3
+20 20 20 2
+0 70 10 1
+50 10 0 3
+30 10 60 2
+20 10 10 1
+70 20 20 2
+40 50 10 2
+10 70 10 1
+60 20 30 3
+30 10 30 3
+40 40 0 3
+90 60 50 3
+60 80 50 3
+60 40 50 1
+80 30 0 3
+20 60 50 2
+50 40 40 3
+70 0 40 2
+20 70 50 2
+40 70 60 1
+60 20 50 2
+20 0 50 3
+10 60 40 3
+30 70 10 1
+90 10 40 3
+70 10 40 3
+90 30 10 3
+0 80 20 3
+20 10 30 3
+90 0 50 1
+50 90 50 2
+50 0 30 3
+30 80 60 1
+30 90 60 1
+40 50 50 2
+40 20 50 3
+0 50 10 1
+60 10 0 2
+60 30 50 2
+30 70 60 2
+90 50 10 1
+10 90 30 1
+70 60 20 2
+30 80 0 3
+30 60 50 1
+20 20 60 2
+30 10 10 2
+70 80 10 1
+60 40 30 2
+40 90 0 2
+50 80 50 2
+30 30 0 1
+60 80 20 3
+50 30 40 2
+80 0 30 1
+90 20 40 3
+20 70 20 2
+60 30 30 2
+20 0 20 1
+80 40 50 1
+20 50 20 2
+10 80 60 2
+0 40 50 2
+90 50 60 2
+40 10 60 1
+90 10 60 1
+80 50 40 3
+70 20 0 1
+50 30 60 3
+70 80 20 2
+60 60 30 1
+50 30 0 3
+90 90 30 3
+60 30 0 2
+20 80 0 1
+60 20 10 3
+20 0 40 2
+70 0 20 2
+40 20 0 3
+10 80 30 2
+40 90 40 3
+50 60 10 1
+0 60 60 1
+0 60 30 1
+0 60 20 2
+90 80 50 2
+40 90 10 3
+40 20 20 1
+80 30 60 2
+10 90 20 2
+90 70 10 1
+80 20 60 1
+50 70 60 3
+10 80 50 2
+50 20 30 3
+80 40 0 1
+80 90 50 2
+80 10 0 1
+70 60 50 3
+20 0 60 1
+40 0 0 2
+10 70 0 3
+50 40 30 1
+30 60 20 3
+90 0 0 2
+60 0 50 2
+20 0 0 2
+50 80 10 3
+70 90 50 2
+30 20 50 1
+40 50 20 1
+40 60 30 2
+10 40 60 1
+10 10 30 2
+10 50 10 3
+50 10 30 1
+10 20 0 1
+90 50 30 3
+40 90 30 2
+10 40 10 1
+60 50 10 3
+40 30 60 3
+50 10 60 1
+40 60 50 2
+0 60 50 1
+40 80 40 3
+80 90 20 1
+10 80 10 2
+80 30 10 3
+60 80 60 1
+30 40 20 2
+0 30 40 2
+50 90 40 3
+10 40 20 3
+30 70 40 1
+0 90 20 2
+80 80 60 2
+20 30 40 3
+10 90 10 3
+40 0 60 1
+0 90 0 2
+50 80 20 3
+80 70 60 1
+50 30 50 1
+80 60 20 3
+60 60 10 3
+90 0 60 2
+30 50 40 2
+30 20 10 1
+10 60 50 3
+50 80 60 3
+30 80 10 3
+80 80 40 1
+10 70 40 1
+80 10 30 2
+40 40 50 3
+60 60 40 2
+50 20 10 2
+10 40 30 1
+40 60 10 3
+30 20 20 2
+20 10 40 2
+30 0 10 2
+70 20 40 3
+80 0 40 1
+20 70 10 3
+0 40 0 2
+50 0 60 2
+80 80 20 1
+60 70 0 1
+70 40 0 1
+10 30 0 2
+70 10 0 3
+40 20 30 1
+80 70 10 2
+80 50 0 3
+10 0 30 1
+50 80 0 1
+80 20 10 3
+20 60 60 2
+60 70 30 1
+50 0 40 1
+50 30 10 1
+50 70 20 1
+20 30 0 3
+80 50 60 3
+20 90 50 1
+70 70 50 2
+40 80 20 3
+80 80 0 2
+20 20 50 3
+60 50 20 1
+40 20 40 3
+10 30 30 2
+20 80 10 3
+80 70 50 3
+70 90 20 2
+90 80 20 3
+30 30 10 2
+40 90 50 2
+90 30 30 2
+90 40 50 1
+0 0 10 1
+10 80 20 2
+20 80 20 2
+30 50 0 3
+50 40 20 2
+80 10 60 3
+40 10 30 2
+30 20 30 3
+80 40 20 2
+0 0 0 3
+10 40 40 1
+60 90 10 2
+40 60 40 1
+30 0 40 2
+90 90 10 3
+10 60 0 1
+60 40 10 2
+50 70 10 2
+60 40 0 3
+90 20 60 1
+20 30 10 3
+10 40 0 1
+60 70 20 3
+90 90 0 2
+70 90 10 1
+50 80 40 3
+70 20 10 3
+0 80 60 2
+30 80 40 2
+60 0 60 1
+50 60 40 3
+20 80 50 1
+90 80 10 3
+80 90 60 2
+40 30 40 3
+0 10 30 2
+70 70 60 1
+80 90 10 1
+50 60 0 2
+20 90 40 3
+40 10 50 3
+0 70 20 1
+70 60 0 2
+10 20 20 1
+70 50 10 1
+70 30 60 3
+80 30 20 1
+20 70 60 2
+40 70 40 1
+70 40 50 3
+0 10 50 1
+0 50 60 1
+70 40 30 3
+90 10 50 2
+0 80 30 3
+10 90 0 1
+70 40 10 3
+70 80 30 1
+80 40 30 3
+10 70 60 1
+0 0 50 2
+10 90 40 1
+70 0 0 3
+40 0 50 3
+0 20 40 1
+90 20 20 2
+90 90 50 3
+30 30 30 1
+0 10 60 1
+10 80 40 3
+0 20 20 3
+80 90 30 2
+60 80 30 1
+0 80 50 1
+90 0 30 2
+70 10 50 3
+20 50 30 3
+70 60 60 1
+70 80 50 2
+50 50 20 2
+40 40 60 3
+50 50 40 2
+90 80 60 1
+90 20 10 1
+30 60 0 1
+40 10 40 3
+50 0 10 3
+90 30 50 3
+0 80 0 3
+70 70 10 1
+10 10 10 2
+20 30 60 2
+0 70 50 3
+70 50 40 3
+60 10 20 3
+90 30 0 1
+50 40 0 1
+40 90 20 1
+80 10 20 3
+10 60 60 2
+0 0 40 2
+0 20 50 2
+40 80 60 1
+70 20 50 3
+10 10 0 2
+60 0 0 2
+0 40 30 2
+90 70 20 2
+80 0 50 1
+90 10 0 2
+30 30 40 1
+30 80 30 1
+80 40 40 2
+80 0 60 3
+40 50 0 1
+80 60 50 1
+60 90 0 2
+80 60 30 3
+90 40 0 2
+90 0 40 2
+90 10 30 3
+0 50 40 1
+30 30 50 3
+70 30 30 2
+0 80 40 1
+90 0 20 2
+0 70 40 2
+80 10 50 3
+70 70 30 2
+60 50 50 3
+0 90 30 2
+50 20 20 1
+20 80 30 1
+60 80 0 3
+20 10 0 2
+30 10 20 2
+40 0 30 2
+80 10 10 3
+0 10 10 1
+70 0 30 1
+40 30 10 1
+90 70 50 2
+50 90 20 2
+70 0 60 1
+40 70 10 1
+20 60 20 2
+50 60 60 3
+70 30 20 2
+40 80 30 3
+10 50 20 3
+20 40 50 3
+80 60 60 1
+60 20 40 1
+30 80 50 3
+0 90 50 2
+10 30 10 2
+70 10 20 2
+80 90 0 1
+70 10 10 3
+20 10 60 2
+40 40 20 2
+50 60 30 1
+0 10 20 2
+40 0 20 1
+80 70 40 2
+90 90 20 2
+70 90 60 1
+60 10 30 2
+20 90 20 1
+80 90 40 2
+30 40 60 2
+30 90 20 1
+60 30 10 1
+80 10 40 1
+0 60 40 2
+10 60 20 1
+10 0 60 2
+90 60 60 3
+50 50 50 3
+40 70 20 1
+20 20 30 2
+90 70 40 1
+70 60 30 2
+70 30 10 1
+70 40 20 2
+80 0 20 3
+20 50 40 3
+60 10 50 2
+50 70 30 2
+90 60 20 1
+80 0 0 1
+70 80 40 3
+10 20 50 3
+50 50 60 1
+60 90 20 2
+20 70 30 2
+30 90 0 1
+70 10 60 3
+70 50 30 1
+10 50 50 3
+20 30 50 3
+60 70 40 3
+30 10 40 2
+20 60 30 3
+10 70 30 1
+20 80 60 3
+0 40 60 1
+60 20 60 2
+60 40 60 3
+40 0 10 3
+40 60 20 1
+90 40 60 1
+40 10 0 2
+70 70 0 3
+30 30 60 2
+30 40 10 3
+50 60 50 2
+60 0 30 1
+0 90 60 3
+70 60 40 2
+30 50 10 1
+90 40 20 1
+90 20 50 3
+80 80 50 3
+20 90 60 1
+50 20 60 1
+0 80 10 2
+20 90 30 1
+50 50 0 2
+10 10 60 1
+40 30 0 3
+80 70 0 1
+30 0 30 2
+30 50 20 1
+80 20 20 2
+40 10 20 2
+30 60 10 3
+70 60 10 2
+90 0 10 3
+40 80 50 1
+20 20 40 2
+60 60 0 1
+10 10 40 1
+10 0 10 3
+70 30 40 3
+40 30 50 1
+20 90 0 1
+60 30 20 1
+90 10 10 1
+50 30 30 1
+90 80 30 2
+40 90 60 1
+50 90 60 3
+60 40 40 2
+30 60 60 1
+10 10 50 1
+0 20 60 1
+70 80 0 3
+60 50 40 2
+60 90 30 2
+30 50 30 3
+60 90 50 2
+10 50 30 2
+90 50 0 1
+80 20 0 2
+90 30 20 2
+0 70 0 3
+80 30 40 3
+30 20 0 3
+0 0 30 2
+50 30 20 1
+70 10 30 3
+30 50 60 3
+0 30 60 1
+30 70 30 2
+70 30 0 2
+0 0 60 2
+80 50 50 3
+30 80 20 3
+60 10 60 2
+50 10 10 1
+30 20 60 1
+90 70 0 1
+20 50 60 3
+50 10 20 1
+10 20 10 2
+10 0 20 1
+30 90 50 1
+20 50 50 2
+30 40 50 1
+40 70 0 2
+70 70 40 3
+20 60 10 2
+50 20 0 3
+10 30 20 3
+50 40 10 1
+80 80 30 3
+20 0 10 2
+60 60 20 3
+80 20 30 2
+60 70 50 2
+0 20 10 3
+40 70 30 2
+60 10 40 1
+40 70 50 2
+40 50 60 2
+30 0 50 3
+70 20 30 1
+20 50 0 1
+70 30 50 3
+40 80 0 3
+70 20 60 1
+0 60 0 2
+10 30 40 1
+10 60 30 1
+30 50 50 2
+0 10 40 3
+90 60 10 3
+30 40 0 1
+90 60 30 1
+70 50 0 1
+90 90 60 3
+80 20 40 1
+0 30 50 2
+30 90 40 2
+30 90 10 1
+0 30 10 2
+20 60 0 3
+10 0 0 2
+0 20 30 1
+10 30 60 3
+40 40 10 3
+50 90 0 1
+30 90 30 3
+80 60 40 1
+3
+1 0 0 1
+2 1 1 4
+3 2 3 2
+49
+10 60 0 3
+60 30 0 2
+60 10 0 2
+0 30 0 1
+60 60 0 3
+60 20 0 2
+50 30 0 1
+0 40 0 1
+30 20 0 2
+60 0 0 1
+10 50 0 1
+10 0 0 3
+20 40 0 1
+60 50 0 1
+10 30 0 2
+30 50 0 2
+60 40 0 1
+0 50 0 1
+10 40 0 3
+40 60 0 2
+50 50 0 1
+40 0 0 3
+50 40 0 1
+40 10 0 1
+10 10 0 1
+0 0 0 1
+0 20 0 2
+0 10 0 2
+40 40 0 2
+50 60 0 2
+30 40 0 3
+0 60 0 2
+20 10 0 2
+30 60 0 2
+20 0 0 2
+10 20 0 1
+20 20 0 2
+20 30 0 1
+20 60 0 1
+50 10 0 1
+40 20 0 2
+20 50 0 2
+50 0 0 2
+50 20 0 1
+30 0 0 1
+40 50 0 1
+40 30 0 3
+30 10 0 1
+30 30 0 2
+555
+61560 54807 2716 2
+22486 19982 16815 5
+38085 71482 86364 3
+67020 139032 12790 5
+230670 32529 26618 2
+172875 62854 12326 3
+35194 94074 78888 5
+140765 16469 42965 6
+150285 72877 43831 6
+195729 167875 9782 3
+69410 75303 16503 2
+125632 46580 23489 1
+167858 110293 1472 5
+110382 23794 47989 3
+31206 88170 43112 3
+56927 26418 54709 1
+324751 19023 2177 2
+315956 80100 2485 5
+102993 152825 22884 3
+172362 134322 19125 4
+217771 6650 25345 2
+71472 23963 88515 2
+5177 126059 8466 3
+63750 54622 65895 4
+60174 75674 6859 3
+97788 13716 55661 3
+181151 38977 13025 5
+191035 172922 10805 3
+192069 16530 36939 2
+113211 34853 38310 5
+13039 71416 38426 3
+82276 95381 61345 5
+22152 38855 7512 5
+50563 27867 30918 3
+51503 39212 65867 1
+90261 180988 20953 5
+105894 63263 51995 1
+67376 20869 43268 5
+88859 102856 48465 1
+192034 161286 13001 4
+239383 50945 4287 4
+126881 30317 19048 3
+304579 19280 13888 6
+82227 44954 8273 6
+162012 16796 25600 6
+77375 28074 18071 1
+202459 87875 2273 3
+232222 85428 10627 2
+302370 7911 11073 2
+121957 170470 24203 1
+221343 34769 6858 6
+3928 96451 10886 5
+55602 108049 45972 3
+140682 169541 5661 1
+221487 71035 4891 5
+31582 153020 8697 6
+122513 39573 71843 3
+78276 162177 17254 4
+17523 84823 94220 5
+197616 153169 5852 4
+222489 81144 12806 6
+227501 36873 14624 5
+164428 135769 9189 2
+122597 90672 13364 4
+147925 58483 36193 4
+58345 12948 17719 1
+53112 59817 43557 3
+101978 174165 22286 6
+225470 6543 5676 2
+57912 95119 10968 3
+199758 96590 32674 4
+38462 150467 29964 5
+240623 24010 44571 6
+164726 18019 44389 1
+92024 152368 30471 6
+238744 11472 6545 5
+35150 94366 44119 3
+12569 125027 63424 3
+105533 46915 19298 6
+234537 1856 47831 4
+19119 92742 52993 1
+65449 107792 28122 3
+184347 6646 57771 3
+211592 15403 40696 3
+93428 169075 5871 2
+249575 34089 6002 1
+175666 100633 21775 5
+107489 146373 5761 5
+31699 105217 50900 6
+92956 139741 25424 4
+103511 21112 70905 6
+118534 51382 68583 1
+205394 51307 17546 1
+37313 63203 44353 5
+182804 88174 39713 4
+63191 63778 33366 6
+67842 28626 10046 4
+74259 155225 3794 6
+213807 39139 11190 2
+61298 123346 5991 5
+206234 4494 14842 2
+136228 172899 22242 4
+90499 139600 49576 2
+59645 30793 48895 6
+311206 56745 1419 1
+229138 51248 8137 4
+94341 39996 1966 5
+135866 86353 8637 6
+173400 152836 15631 5
+31279 27980 74873 4
+7101 174002 26707 1
+32369 42456 26402 2
+137989 14413 32732 2
+58443 173220 15614 3
+146003 83599 55408 1
+73407 84150 52941 6
+20483 60157 76976 4
+274760 6363 26402 2
+9596 5761 94603 4
+69153 48850 47425 6
+57524 150607 33470 6
+110837 14703 75424 1
+28205 14186 7445 4
+53219 106057 19679 3
+194035 66615 26800 5
+186963 57821 42004 1
+264234 81554 14448 3
+77274 19946 22693 1
+183277 2661 31683 1
+142744 55387 54050 1
+135835 80382 27455 5
+163981 5851 60807 5
+31040 4670 31088 4
+83708 149841 35524 2
+36247 189154 1724 6
+115766 71888 65389 5
+4720 7266 7588 5
+294876 53300 5919 3
+136395 146606 29135 5
+25072 81254 73524 5
+112297 65055 16821 6
+18374 38096 67675 5
+112959 7296 33207 5
+25100 4610 37063 6
+68621 125805 9175 4
+71768 106429 64336 1
+60038 79229 14124 3
+45517 31503 99732 1
+116652 64651 41728 3
+83774 3717 50120 2
+54388 33034 65573 2
+183547 21392 55690 4
+6125 78847 2118 1
+108448 78304 40474 3
+98367 99783 49703 3
+57668 128736 67867 3
+82500 20865 74506 6
+151095 114898 22331 1
+56066 81704 48665 5
+92549 15416 57449 6
+97343 139202 48195 5
+205120 154855 7465 1
+30734 154849 15436 3
+8847 146069 1661 6
+51544 134070 45044 1
+79956 34180 45414 2
+1420 102628 23350 5
+227014 73066 1646 5
+204129 106609 26756 1
+120447 16417 61612 1
+113551 92391 13700 1
+165131 99581 25683 4
+146073 72891 21622 4
+33501 35475 35901 4
+139437 51642 7975 5
+127083 1587 27494 2
+28291 38082 60867 5
+123268 11583 7514 6
+155474 86698 16248 4
+119755 45808 22055 2
+87209 81041 7928 2
+126635 9807 13582 6
+72430 94365 57516 1
+119672 117644 43049 3
+137722 36219 36353 2
+32993 38320 81237 3
+308889 32706 20535 3
+1248 53938 20256 2
+206287 99103 16410 5
+42717 116012 75660 4
+222386 13479 8016 2
+235648 39823 29216 2
+21155 173934 23000 6
+184693 88599 2341 6
+140507 124900 39882 2
+136037 68454 25872 2
+214189 2043 47205 3
+303459 13382 11933 6
+164301 123548 18446 6
+154097 25977 19550 3
+203820 2220 23533 2
+14551 71093 51839 4
+12752 40064 34577 6
+102712 30352 44873 1
+31135 54978 85880 1
+54270 58197 11557 3
+121173 6468 43386 5
+73548 52233 13608 5
+46603 84052 44061 1
+53622 87504 87135 4
+21785 114787 77401 5
+23416 175851 15942 5
+16101 25232 33889 6
+51450 11670 68517 2
+46941 129868 22099 1
+207646 8227 56045 3
+82253 124043 62920 5
+177422 67905 33906 2
+71116 30328 90355 5
+195523 52392 48918 2
+79488 4872 15406 2
+61097 110600 1913 4
+199025 175180 7211 5
+119138 42204 19432 2
+252759 10888 32366 4
+8345 34221 64656 6
+200727 163415 7150 4
+14490 80406 3349 1
+167738 20111 24521 5
+93354 3039 17238 1
+96144 97799 57130 1
+159896 30937 16280 5
+129295 11208 52331 3
+17058 98942 81772 5
+25584 25853 99077 1
+120961 9414 41295 2
+241206 1547 18385 4
+221191 150248 7149 2
+192509 37684 56310 4
+84374 13915 99734 2
+77723 98837 65394 4
+34386 128768 41610 3
+227008 79788 15074 5
+50936 68461 75312 4
+228868 21143 40990 3
+17569 16085 60618 5
+69725 108768 63153 6
+120552 122349 37491 3
+35822 56005 1614 4
+125083 124349 38928 3
+57093 59532 48917 6
+110370 48936 15175 1
+160075 34288 43410 1
+195274 7153 61388 2
+201301 55394 33777 2
+72251 56732 62294 4
+80586 105880 51777 4
+94799 64350 39124 4
+33662 100682 55141 6
+84859 87330 33136 1
+74728 46061 19304 6
+69219 70315 48088 2
+20007 187469 11273 3
+12460 54789 50741 3
+2074 63806 92094 4
+179527 101545 2550 5
+155040 93344 8314 1
+53942 27117 6707 5
+32683 95247 16220 3
+44593 83273 83126 3
+309588 24277 5310 1
+50317 76641 43545 5
+286900 17947 5850 2
+63174 112542 26244 4
+167056 83444 34215 1
+19617 61019 46399 4
+66308 135201 27024 4
+187916 51313 54577 2
+8165 15289 34403 6
+96946 39951 35278 3
+40679 125139 54877 1
+114040 97683 23793 6
+26488 158374 31915 4
+174919 28092 8310 3
+31461 116158 69244 5
+1162 37241 25799 5
+119561 17067 61766 5
+145012 107170 37350 2
+30436 26250 52297 3
+220890 31797 15301 6
+20257 136822 30259 5
+38439 64382 53861 3
+125777 32621 7599 3
+5254 162506 1387 2
+26984 132352 8717 4
+59124 3460 84957 3
+12032 136765 62504 2
+11518 65854 77173 4
+29264 90334 89795 6
+95585 36745 47171 3
+111691 6243 74591 3
+233046 28049 43475 6
+2480 20552 47382 2
+134856 49765 38598 6
+164205 83039 40543 4
+1053 134753 30552 6
+166968 55712 19636 4
+81312 125120 63545 3
+36298 11266 49005 3
+36264 139984 38307 1
+36539 93452 72151 4
+108319 151462 40364 2
+214154 31043 4346 5
+83693 80208 41334 3
+237354 15999 8308 2
+162699 51136 56168 6
+3343 103952 59087 2
+117148 83907 52794 5
+166903 128108 34082 5
+59193 96961 7525 1
+4776 90583 54504 2
+144914 116183 35425 2
+318398 18925 3992 1
+56019 6162 76245 5
+222860 8885 39090 3
+113085 70996 35838 5
+83237 33871 80581 1
+25739 112744 67499 6
+113639 2867 20429 1
+95912 18942 90506 6
+169787 108313 1657 5
+78921 108254 33080 3
+38704 115200 80073 2
+86742 124444 43667 6
+206903 132133 7177 2
+160375 158852 23337 5
+350054 14238 10371 4
+195479 13037 9568 3
+19776 61992 53144 6
+86086 53343 22001 3
+3495 68291 65651 1
+63691 36690 70749 4
+203760 21120 42074 4
+230048 110210 5024 4
+31843 33862 11831 1
+19041 24682 94068 3
+129026 91759 18292 6
+183715 8484 63987 1
+30577 52363 74970 6
+45075 88445 36041 3
+190395 74969 12226 4
+67242 70017 58848 4
+18017 115804 31573 2
+95524 179415 10232 4
+170950 64287 22455 2
+66698 108851 24862 4
+258957 75051 17528 4
+49280 36461 41885 5
+288899 39045 22378 3
+31871 90459 35879 1
+100799 126549 12526 1
+199097 153066 3159 4
+130896 55651 47302 6
+27570 10416 29120 6
+36975 159909 8698 4
+1134 59953 44538 5
+56969 74755 34223 5
+156112 74019 50266 6
+49115 12100 63845 5
+27324 65220 43552 3
+168050 42187 20007 5
+32769 93369 54108 5
+194842 44955 25634 6
+181693 24840 10744 5
+76069 100715 32851 1
+20278 94210 48685 4
+294730 36702 6141 5
+148566 153353 30772 6
+258225 32691 1808 1
+143220 87548 10933 2
+111002 169874 4050 4
+109422 80629 40576 3
+85886 99690 27352 1
+222173 59024 25590 1
+65959 129866 1913 2
+281029 7953 30047 3
+2987 167186 20321 1
+213559 123966 12333 6
+160615 19958 43784 1
+200295 132459 9035 6
+262010 62076 19148 3
+103839 5221 35130 6
+35800 57935 81063 6
+37568 19496 49542 4
+136020 194070 3182 1
+232139 96423 6059 3
+21926 40802 18558 4
+98558 101357 65471 4
+6686 15932 83476 1
+178119 74130 14980 6
+75612 39766 86004 1
+116225 46595 80212 2
+39510 123105 5077 3
+164679 74958 31054 3
+221894 4897 12172 4
+12011 37856 29535 2
+136677 48996 5517 2
+157743 128791 11623 4
+63236 76476 45764 1
+29110 64659 68172 1
+281481 33936 15690 6
+1815 41287 5220 2
+17052 81675 75138 2
+115219 27337 15111 1
+133930 27547 10435 6
+335423 12803 6371 6
+31750 128636 56478 6
+320215 1068 9934 2
+143497 176071 24539 3
+202288 18872 3336 5
+28211 10697 91031 1
+138500 26471 38863 1
+258767 31427 12994 3
+197278 53116 38574 1
+115637 28199 86962 6
+62611 53595 86395 3
+157793 134027 17802 5
+38618 116367 36738 2
+241936 15078 26018 5
+12331 138556 39481 5
+112448 45922 73816 3
+169339 32941 1580 6
+157661 167482 14357 2
+4595 79514 9936 3
+26074 79721 39862 6
+24872 57738 52885 4
+116616 116853 49368 1
+242532 3956 9937 6
+138122 42886 68646 5
+32266 15047 56988 3
+114325 98255 57521 6
+925 133632 15741 4
+73626 73340 85042 4
+41311 28320 97683 6
+100725 17173 32867 6
+201586 46927 2842 5
+193570 137099 16543 1
+146310 31402 73428 2
+42939 50354 19427 1
+27387 93764 46332 6
+104040 39990 78527 3
+26911 33889 87892 3
+69872 10666 45642 6
+40076 133402 36753 4
+24882 111257 12064 4
+164828 112768 40320 1
+12322 37428 15147 1
+323007 6211 11520 4
+116148 151039 22557 5
+10914 28154 37567 5
+201166 28497 4834 3
+303424 15025 3402 5
+95926 15502 55308 4
+36130 58555 76738 3
+231432 56334 38072 4
+146586 49025 67953 2
+34916 102504 73130 2
+9733 24623 97937 5
+106579 40173 82652 2
+39261 161769 17756 5
+259187 16179 8690 2
+2462 10239 23442 5
+249059 8095 25610 6
+101341 2583 35455 1
+166627 102534 8971 2
+114856 165190 36517 2
+14060 108365 17922 6
+149282 143248 33479 4
+153261 148962 21195 1
+53485 124745 39041 5
+5960 102025 37701 6
+99118 57307 17043 5
+76973 128666 54511 1
+207193 44443 30438 1
+23181 19087 63174 4
+70515 77206 73191 4
+145333 62721 25556 2
+37993 78481 93486 3
+21335 113592 54254 4
+280690 15156 17101 6
+89146 76895 22249 1
+77163 104852 9391 3
+99465 25225 69289 4
+105762 99139 43705 6
+167543 90623 37467 3
+240693 35964 13437 1
+32756 38080 14782 6
+204573 25302 7457 5
+246863 25295 42123 6
+83897 133446 37548 1
+116881 166184 5116 6
+73760 148829 19145 6
+242280 21944 31217 5
+64932 131072 31036 1
+31368 82272 71638 1
+144666 55521 9881 4
+54080 88498 11152 4
+30554 40876 36107 4
+145249 26991 70299 2
+92607 19299 80172 5
+185242 88199 12621 1
+182423 46143 3544 3
+46752 5544 46027 5
+59870 95269 23075 5
+7489 104079 13227 3
+140441 39697 63594 4
+194141 173856 11552 2
+4579 81780 92180 6
+224398 86315 20809 6
+61172 173336 14243 4
+71866 7850 28867 1
+146838 46410 49318 1
+30451 139642 54055 5
+27794 35383 76460 6
+117961 121156 48895 1
+154389 46129 38996 3
+148825 98460 26028 5
+94877 116192 53912 5
+120399 978 55424 4
+164963 185454 11905 2
+61142 96261 78562 1
+80582 46159 43520 2
+328561 26368 2669 2
+162419 2040 67376 2
+90450 106659 16442 6
+35318 117148 73710 1
+270885 19893 4679 6
+98890 18411 86224 5
+42858 169817 11945 4
+282771 37258 25377 4
+173955 161697 3695 3
+78019 12393 31798 6
+16978 122958 78378 3
+121511 12135 60848 2
+118035 67788 34228 5
+121456 66806 40586 1
+16871 17361 93907 5
+135430 25204 45360 6
+168504 72370 31314 3
+62315 45274 49600 3
+118065 98427 54328 3
+57809 62553 59516 4
+147141 130111 25304 6
+108055 89214 12969 1
+141737 34254 72910 2
+4
+0 0 0 1
+1 2 0 1
+3 4 0 1
+2 1 0 1
+123
+312645 282984 140769 5
+639763 358647 464367 7
+583196 841208 739891 11
+767898 312529 836680 11
+942734 677983 925550 3
+6462 950253 249010 5
+745439 698450 734223 2
+652108 596174 277032 1
+469419 436162 955807 7
+408845 820836 100266 10
+423624 374292 476995 3
+878548 439109 527176 10
+287426 256505 971727 8
+665770 301245 652954 9
+701951 531052 75501 5
+306796 681507 419272 11
+294358 183993 59370 2
+725556 636357 508737 6
+252987 990590 985879 5
+774773 671915 306899 9
+865604 196080 300415 2
+152421 675228 325348 11
+299004 134705 127065 10
+213621 405063 217652 3
+84764 311553 529336 5
+53603 303751 223632 8
+339233 492146 401727 1
+803482 148599 549006 10
+741997 436304 843268 9
+584175 288908 471520 4
+937703 321179 380892 2
+210539 902008 381384 2
+569436 747992 941162 9
+418709 263540 281309 8
+587 688707 106497 8
+136166 518062 476783 2
+821761 81696 583845 2
+53230 139327 993693 1
+286278 260609 817748 8
+900492 473156 455613 4
+812344 812662 85551 2
+129732 146275 186760 2
+163955 561472 646312 5
+390375 292833 391278 9
+464107 917782 129533 10
+410286 6915 18471 4
+201680 405032 178949 2
+333196 971642 675623 1
+847430 569348 162828 3
+372491 865861 653455 11
+353078 383060 529545 6
+521710 894275 755146 8
+246061 434523 113405 10
+709854 812367 715124 3
+549105 766243 70188 6
+586250 660340 267124 9
+595484 606229 586453 2
+607060 429347 140314 1
+955162 735540 891046 4
+320950 27679 32504 5
+288112 843269 966067 5
+200595 108291 367955 1
+839077 505856 456877 11
+961788 615379 549425 11
+555157 944851 31281 3
+129724 204737 572652 9
+534726 674421 77504 8
+836656 292847 271881 8
+803615 113784 956715 11
+830202 789144 531572 6
+873023 242016 446722 3
+145455 861024 96357 6
+93985 576052 556575 7
+743 560914 399338 4
+293373 764658 88330 2
+339142 294969 636942 1
+751851 961871 26136 4
+823576 144462 328060 8
+844906 600120 207450 11
+479801 671955 146307 3
+958616 52882 864182 4
+891511 822588 563585 10
+19992 14680 742432 9
+787668 550741 350159 4
+127253 194171 765945 5
+119797 330917 273615 5
+857965 77480 737462 8
+582480 417625 796139 5
+719762 414353 765355 6
+983127 613228 111321 5
+86348 932170 800474 10
+619871 114981 374449 6
+633636 330067 491314 10
+136004 496132 769079 6
+722869 660339 832265 7
+339992 698318 613985 11
+956701 859986 576060 2
+118466 714843 899809 1
+819130 960928 958278 10
+132096 220107 44450 3
+262828 152339 597907 8
+538071 72312 615291 8
+335974 102065 124022 5
+266480 42292 351505 8
+139791 685760 978185 5
+594503 200392 682595 2
+406845 217620 495027 3
+447469 82791 461641 4
+569237 69669 879678 2
+603000 342553 875688 9
+796202 487012 202149 2
+124674 100104 928245 4
+300569 526178 857304 2
+734670 737203 597775 8
+187871 164669 909900 2
+592583 919450 394435 10
+405757 427159 448394 5
+916600 48080 508911 1
+361254 745436 560574 3
+714367 685707 244485 9
+72135 863213 492179 9
+250742 563208 896892 6
+231114 851644 192869 2
+200
+41913 17038 1448 1849
+14866 27763 3636 1849
+11079 8816 12697 1849
+8260 8235 1039 1849
+24874 32388 1431 1849
+1239 23931 1394 1849
+29577 3175 6203 1849
+34241 7868 1466 1849
+21658 22064 5421 1849
+4302 5708 7406 1849
+57918 7524 1055 1849
+10466 8037 2441 1849
+24437 14085 1469 1849
+11012 8330 7840 1849
+4456 24453 1320 1849
+8332 16462 7313 1849
+36445 5384 6796 1849
+17023 11409 7750 1849
+18342 18831 6931 1849
+24517 20702 7024 1849
+3448 3359 4213 1849
+26880 24897 3332 1849
+35401 7401 6508 1849
+17601 27946 1020 1849
+39177 6519 5764 1849
+16926 24160 7641 1849
+6738 24087 2026 1849
+26136 6799 2943 1849
+4750 24160 7202 1849
+40535 7932 6578 1849
+9773 4340 16716 1849
+19692 11577 9413 1849
+40574 4631 2466 1849
+44002 9902 1788 1849
+32433 9119 5037 1849
+18504 3663 6328 1849
+22989 15730 6056 1849
+31572 6653 3088 1849
+47350 14559 2249 1849
+13184 3054 8934 1849
+19824 16501 9450 1849
+7796 17272 11297 1849
+4827 1184 6159 1849
+25285 22869 3634 1849
+25849 7463 11068 1849
+23709 9663 1631 1849
+11176 18194 906 1849
+13804 2917 9770 1849
+5793 24973 6990 1849
+22618 7828 7145 1849
+35394 18910 1633 1849
+5292 3033 5731 1849
+36664 13276 4321 1849
+57950 2399 2319 1849
+57290 7586 1295 1849
+4536 22172 7223 1849
+24047 15858 7822 1849
+27596 20507 5213 1849
+23812 929 3069 1849
+10407 18878 4156 1849
+10950 26096 1022 1849
+11040 5181 3247 1849
+7301 7990 12716 1849
+39876 11659 3625 1849
+7623 15857 2818 1849
+29385 11081 8923 1849
+7016 23378 2939 1849
+22031 14679 3802 1849
+10578 7994 15285 1849
+2929 7845 4608 1849
+5562 12022 1298 1849
+26598 4377 8432 1849
+3711 912 8676 1849
+2144 2819 1827 1849
+219 15526 7314 1849
+891 17200 2184 1849
+23244 16232 1568 1849
+10251 1023 9458 1849
+35855 2835 9096 1849
+12450 2323 15015 1849
+3121 16856 14269 1849
+40513 14037 2883 1849
+25696 11720 3067 1849
+8234 11569 3514 1849
+23674 26208 2230 1849
+3823 27726 1759 1849
+10970 10456 6664 1849
+1420 16566 7898 1849
+18681 12621 5601 1849
+13940 5541 4795 1849
+3474 11243 1916 1849
+28825 22231 5660 1849
+19796 9300 9215 1849
+18007 18994 9634 1849
+9967 7599 12460 1849
+13425 1042 11079 1849
+5639 27328 2652 1849
+5043 15607 4597 1849
+16399 13803 3421 1849
+27579 5904 10508 1849
+5387 24825 5674 1849
+28046 12749 3432 1849
+31065 25551 3530 1849
+29191 21294 5866 1849
+19956 22988 8135 1849
+8560 15703 1194 1849
+27578 9128 5197 1849
+25706 2099 1401 1849
+19135 16064 6612 1849
+6124 7417 6533 1849
+7349 17117 12950 1849
+21215 30048 3236 1849
+45277 1871 3445 1849
+2382 2294 11974 1849
+168 10384 8649 1849
+20286 19196 6181 1849
+31622 19234 4770 1849
+57833 3546 2596 1849
+24084 4978 4561 1849
+11482 13375 3713 1849
+2948 9547 6607 1849
+3227 10072 3516 1849
+26855 1951 7550 1849
+13644 26069 6509 1849
+44070 7406 3238 1849
+7386 4225 2140 1849
+1478 8038 4065 1849
+19799 23927 6475 1849
+25406 29633 1999 1849
+27171 18286 5430 1849
+11251 20150 887 1849
+23503 29166 2989 1849
+34400 2517 5004 1849
+10537 20718 4167 1849
+52600 1258 1447 1849
+3581 4832 1947 1849
+16776 3541 12325 1849
+8916 2116 2973 1849
+21803 10406 7367 1849
+45186 15785 2726 1849
+32294 15677 4982 1849
+40757 20437 2077 1849
+39427 19938 2385 1849
+45305 964 2749 1849
+34685 13032 2612 1849
+35588 18450 5205 1849
+6759 31543 1354 1849
+30928 28987 1532 1849
+1820 26847 3633 1849
+2130 16685 3319 1849
+12719 22609 4145 1849
+43907 5621 2861 1849
+7842 20461 6741 1849
+268 2764 13174 1849
+9228 14862 1317 1849
+12886 4263 10131 1849
+5634 2135 1042 1849
+45814 1374 5077 1849
+4555 11979 11072 1849
+4124 19977 8509 1849
+12564 27692 4838 1849
+27856 13365 1802 1849
+19793 12684 4417 1849
+14928 9595 11760 1849
+21505 19161 2006 1849
+40173 13044 2317 1849
+14534 19967 1185 1849
+49304 3281 1988 1849
+32695 5446 6427 1849
+37212 2981 5357 1849
+37277 823 5068 1849
+34833 6100 4742 1849
+14718 30186 3075 1849
+13303 29279 4126 1849
+35821 6391 1620 1849
+1415 12609 14974 1849
+19010 3151 5284 1849
+16261 24569 2456 1849
+7636 3446 15132 1849
+925 16769 16793 1849
+23485 19883 4639 1849
+7799 2460 15699 1849
+16476 3402 5333 1849
+16517 2205 5470 1849
+7266 13925 1931 1849
+26398 26630 4113 1849
+24387 25588 1198 1849
+32213 4157 10567 1849
+10626 5587 10992 1849
+11787 6758 8607 1849
+33177 9285 5980 1849
+23365 3306 10925 1849
+13836 14929 12335 1849
+26073 25560 3756 1849
+915 30108 3906 1849
+61923 4237 887 1849
+1097 21337 9707 1849
+2187 15999 10810 1849
+3228 6790 8390 1849
+19941 3522 6504 1849
diff --git a/codejam_2008/src/y2008round2/C-small-practice.in b/codejam_2008/src/y2008round2/C-small-practice.in
index 11b5dc8..a017d59 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.in
+++ b/codejam_2008/src/y2008round2/C-small-practice.in
@@ -1,889 +1,88 @@
-20
-1000 90 119183605 800390554 869262611
-37245610
-727819161
-786210092
-249057005
-53022121
-620417987
-308912558
-474169225
-293365291
-614383450
-183563293
-241581016
-711677169
-165041385
-457172424
-89386931
-189354668
-368449252
-476996647
-598101336
-612565645
-836802951
-180974856
-479547342
-408040952
-395385160
-844494841
-379740911
-48292067
-844494840
-842822800
-545841862
-294092964
-350811855
-794898867
-347115085
-101967231
-234548814
-412325884
-855636707
-439973838
-186930751
-227955113
-282388396
-351972136
-276169111
-832079512
-132368378
-644618363
-30855123
-730469715
-387921397
-867658074
-42181960
-458510313
-406436415
-28608694
-433742544
-377218900
-76900761
-16347
-811083274
-622742623
-294109312
-292632518
-139420453
-232265971
-854903935
-834273452
-644591856
-432319605
-404984679
-831522607
-660274718
-278414649
-314232133
-67181218
-241231551
-446600511
-302841155
-272086674
-307807615
-281804126
-270482137
-810293760
-740314440
-267960126
-838902454
-304794373
-236220600
-1000 33 965205667 724223372 169374881
-149880795
-141176592
-110231960
-21914970
-65228061
-60094288
-129111051
-154094256
-80916751
-16599472
-70551180
-63825024
-5277308
-26867338
-109836392
-45363145
-35772408
-111152952
-104976553
-15777395
-58254500
-167814198
-18708534
-90518765
-27073586
-82161051
-59802062
-145404848
-13899824
-43552775
-105854414
-163780619
-69744292
-511 78 869187222 480490764 414973471
-411933029
-65761477
-349539367
-380766166
-372369781
-226641639
-290713634
-370984670
-40055529
-84809113
-45184497
-211031986
-67228192
-402689911
-246458000
-242089240
-36046246
-1836279
-60600466
-379536075
-367943349
-288705299
-310239102
-47898545
-397515148
-238555507
-360281099
-21781957
-231456507
-42744392
-217154741
-228416065
-108505870
-151720638
-121592467
-65902180
-378362277
-412306101
-21913379
-3444335
-9525451
-409455054
-141860028
-76753643
-397171494
-315701735
-246226590
-18244270
-317538014
-306827056
-325164052
-197891599
-107942591
-147813390
-173173851
-90484269
-313752604
-118481479
-39649933
-130235641
-161225872
-256804675
-286035413
-269731742
-335909020
-407627881
-335633922
-226681533
-332344218
-284931008
-157509575
-269253376
-279412591
-299369603
-346007020
-188994322
-127481574
-104643846
-1000 17 651165168 999463789 141914966
-109788020
-23556100
-120693253
-109077781
-2480154
-97633857
-141096439
-39198570
-127238684
-127170638
-46355679
-99602049
-31160
-1448344
-87690226
-125076824
-54628000
-902 79 700521650 713080455 927846731
-409268985
-774510410
-825098871
-269882313
-235667782
-674695564
-533957295
-231036614
-191878087
-209591875
-467155519
-178188650
-669501779
-708370202
-340497539
-653095173
-256959682
-731474587
-241741979
-173082238
-665275375
-820985911
-814083218
-49701607
-915071560
-409621033
-315759618
-687746479
-194854757
-96122701
-438563909
-312333556
-870633111
-44025863
-290425683
-814510707
-426931241
-824382979
-117700590
-618809328
-742184668
-293065924
-796997978
-192049530
-73589395
-209648787
-845144704
-38758891
-649333188
-795096497
-211841129
-386761833
-688235677
-98077616
-144673254
-383670321
-215908463
-168642687
-143570069
-118973034
-264765388
-290343793
-139516405
-843608313
-42579470
-429942088
-438482103
-469510712
-326478336
-264392507
-160473309
-140816273
-557458431
-29624557
-41075618
-339257640
-875329889
-886220322
-378016531
-634 25 305026160 681316818 517704392
-114506795
-288583038
-26966670
-498177116
-320263368
-195609357
-349957000
-331674350
-352812692
-456072660
-471190755
-84346141
-498652130
-383428451
-5123852
-450458450
-7974263
-269516359
-503369707
-374704742
-125042266
-241204078
-415780360
-356737853
-414601442
-587 92 610773785 531223811 251091542
-23345104
-1862530
-99984894
-208424295
-104327414
-213005317
-119928299
-160550835
-82629363
-239036858
-41813700
-138995952
-69818134
-148857639
-7568940
-100602638
-61013742
-96713140
-16399105
-77086877
-57547683
-215243383
-132311547
-88963438
-77609832
-29734369
-82373809
-186200533
-166749159
-82373808
-127926760
-190094263
-196576568
-89160343
-147427017
-49812441
-51074118
-128604004
-71611964
-133703481
-116549320
-113425664
-133948121
-47616142
-123531991
-141517061
-148218780
-45794421
-99478889
-164617885
-235221528
-18275260
-241109956
-116441534
-219578929
-67628247
-146175903
-50861196
-115077468
-174173751
-245575234
-104252917
-113176472
-191060260
-193413260
-121852177
-240872701
-244487378
-250456181
-61393124
-239439547
-228254189
-36067476
-234636356
-24778789
-159599468
-125061875
-172997569
-205393889
-85789452
-198864143
-189523876
-104064713
-188882557
-54873868
-72552100
-117759492
-62298459
-235753526
-94085649
-236472210
-230237218
-511 11 849519555 340732733 841257835
-334598371
-57591353
-592907002
-196122082
-402917136
-26995629
-55123782
-400561755
-387799554
-319349158
-38143934
-1 1 4712031 479056446 733904406
-480159960
-511 1 0 1 672941413
-0
-513 1 0 688898794 688898796
-688898795
-149 91 573145152 870824527 481004729
-75075055
-208150980
-29626331
-216990020
-254414677
-454639588
-327201256
-324953468
-82712640
-366182083
-317173032
-402224719
-405380653
-283737592
-190305594
-259666905
-130905013
-479272055
-181990891
-218595239
-265259116
-296984091
-223307270
-77836644
-68879038
-277677638
-329891552
-456550001
-1018518
-144417362
-191182005
-76093574
-129103610
-220808336
-69618862
-160053556
-451983192
-173355386
-4002295
-311231101
-58532741
-321175328
-232451091
-240448662
-123908191
-199291953
-19110838
-31348473
-197559280
-458641726
-249943712
-239353664
-274621089
-249786251
-317190309
-120035395
-46459160
-166077132
-95580668
-47477679
-87029762
-63297941
-381111250
-216133373
-284106277
-450730112
-376186929
-31620009
-143080770
-380189224
-342851110
-459153508
-477899820
-351837469
-218597441
-378343280
-70124693
-14243548
-409691753
-44219241
-472885274
-436170733
-283572906
-43036902
-204952255
-119758486
-163072298
-27946684
-62370886
-258652966
-332964360
-513 13 785065825 765114905 916566486
-95353856
-883674091
-305137504
-13269152
-460356989
-825060280
-657861008
-892676595
-266174598
-572817129
-274730276
-230238572
-525394711
-512 36 549595770 202350236 71364788
-56274617
-31823730
-22214675
-2138847
-11297440
-37292871
-3069760
-4761595
-63193202
-53285073
-7826135
-50554206
-62736672
-51735995
-41957111
-53510406
-64323164
-42656399
-20011740
-7738375
-13235366
-25928931
-33612578
-14382198
-45763163
-50083593
-47661257
-24440629
-32692426
-42907184
-68002004
-17602255
-3366126
-12311884
-13201095
-8123559
-513 68 270476179 256334679 189362159
-44861932
-114119699
-12775622
-155825765
-184670879
-146039137
-150592453
-131589105
-91439240
-100957800
-92350993
-102655802
-150911111
-182505471
-140923024
-49414039
-86228930
-106980056
-81426217
-73392183
-126807562
-131833268
-27330173
-179836995
-162677162
-156074828
-25183164
-54429023
-86874395
-25183163
-6275173
-67236429
-74802963
-19050795
-33700035
-70111683
-100590034
-184292488
-137200889
-2667115
-31388231
-40189723
-40823019
-117799443
-33333036
-117246144
-102713583
-55062067
-34864042
-184139801
-128454250
-161671604
-126610910
-91284525
-87646541
-35426014
-57997194
-48329806
-89855037
-80371691
-73512969
-96130210
-147608120
-148315932
-50681107
-181308155
-153927716
-151271141
-740 10 111410106 764965093 676085069
-668516841
-70175581
-518256219
-505056510
-665876688
-193975982
-533598839
-615641075
-476795463
-209351239
-512 63 687946481 929689830 8989182
-7139111
-4177606
-5792168
-8717741
-3163992
-7442890
-3076908
-8923007
-5553143
-8732496
-5442847
-586117
-4279761
-7718313
-8981673
-6956026
-727768
-6118238
-2851743
-8077028
-4522184
-2879826
-276536
-5834659
-6614040
-1279051
-5227442
-3324357
-6013985
-1570705
-4836555
-4163914
-6679161
-1639541
-4823323
-853972
-1024099
-8831081
-787797
-6577243
-8574396
-7161494
-7163360
-4795825
-5890625
-8086701
-2762669
-6618393
-5215757
-6545262
-5706239
-748760
-1366756
-5982775
-7514269
-8911646
-8192676
-3752529
-3246822
-6148329
-6254084
-8083377
-1323061
-414 13 477374730 943547914 549578845
-190966889
-213936630
-62542532
-131964255
-123032824
-135658062
-384907847
-433813287
-430573864
-57345548
-301314756
-481123109
-168234636
-428 46 819705073 68230643 755036387
-438451387
-472151076
-355970177
-252370435
-261785751
-379483303
-572633804
-337688626
-372401826
-547269677
-96130846
-73438099
-661421955
-698181379
-572090230
-450479934
-228641241
-147805811
-738826594
-141119123
-56805046
-238788468
-28829394
-458675039
-417236833
-546233163
-398612491
-89458260
-222016546
-6165230
-50549244
-660467933
-595941819
-406519421
-275427495
-220316696
-148591851
-210650425
-558005322
-520993677
-2883715
-654136168
-712057290
-26894796
-597281160
-646736646
-100 100 0 0 1000000
-9150
-9150
-14027
-14027
-45909
-45909
-84040
-84040
-85672
-85672
-108520
-108520
-120135
-120135
-145736
-145736
-154356
-154356
-157762
-157762
-180205
-180205
-190810
-190810
-196517
-196517
-197344
-197344
-221332
-221332
-225200
-225200
-281919
-281919
-283461
-283461
-285830
-285830
-291387
-291387
-316560
-316560
-337457
-337457
-338674
-338674
-347293
-347293
-352665
-352665
-378037
-378037
-392064
-392064
-412003
-412003
-446888
-446888
-449258
-449258
-459659
-459659
-460718
-460718
-466464
-466464
-531827
-531827
-561284
-561284
-583243
-583243
-585334
-585334
-630144
-630144
-660039
-660039
-680073
-680073
-754748
-754748
-769112
-769112
-782678
-782678
-786603
-786603
-798659
-798659
-815682
-815682
-886575
-886575
-925403
-925403
-931139
-931139
-987944
-987944
+10
+3
+1 0 0 1
+2 1 1 4
+3 2 3 2
+10
+749709 772910 278417 6
+208544 311102 354951 9
+698123 952054 988819 1
+252486 827293 503163 2
+730571 757552 677587 8
+492834 423148 364526 8
+746326 533367 349434 9
+896852 717974 338577 10
+36714 843765 227839 11
+862207 802188 940476 6
+10
+10836 7165 2791 3
+6035 11005 8515 1
+18109 4297 9143 3
+18502 20752 4148 5
+14907 7718 1803 3
+31183 2024 2515 5
+5946 18896 3861 3
+3976 4118 12647 3
+8955 4554 594 6
+16981 10269 1222 3
+7
+39489 18192 101846 3
+67760 6425 97354 1
+16169 12534 93019 6
+26398 26123 102866 4
+12032 8384 102916 6
+53473 40672 89250 3
+58811 24255 91307 3
+4
+0 0 0 1
+1 2 0 1
+3 4 0 1
+2 1 0 1
+10
+4123 4407 1235 5
+12436 17594 2680 1
+23229 8101 1123 4
+11478 15131 3761 5
+15120 2543 11612 4
+23642 12123 4690 3
+6330 18025 3076 5
+860 6508 6308 4
+20876 17895 4970 5
+1315 6894 3728 4
+9
+20 20 0 1
+20 10 0 2
+10 20 0 3
+20 0 0 2
+10 0 0 3
+10 10 0 1
+0 0 0 3
+0 20 0 1
+0 10 0 2
+10
+89 59 65 4
+89 11 66 3
+86 17 22 2
+32 33 55 1
+45 97 81 4
+38 79 18 3
+17 91 16 3
+30 34 7 1
+23 40 44 3
+0 73 12 4
+6
+15543 17150 2162 1324
+27809 9767 3575 1324
+14241 17379 7798 1324
+3873 14256 11238 1324
+6222 1004 5769 1324
+26100 16937 3921 1324
+8
+10 0 10 1
+0 10 10 3
+0 0 10 2
+0 10 0 1
+0 0 0 2
+10 10 10 1
+10 10 0 1
+10 0 0 3

From 019b56951ff23329d1545fd8c29884510113351c Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 12:52:43 -0300
Subject: [PATCH 061/122] hmmm

---
 codejam_2008/src/main.rs                      |   2 +-
 .../src/y2008round2/C-small-practice.in       |   7 ++
 .../src/y2008round2/C-small-practice.out      |  21 +---
 codejam_2008/src/y2008round2/c.rs             | 106 +++++++++++++++++-
 4 files changed, 109 insertions(+), 27 deletions(-)

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 7c78cdb..3a00bc0 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -82,7 +82,7 @@ fn main()
 {
     init_log();
 
-    y2008round2::b::solve_all_cases();
+    y2008round2::c::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round2/C-small-practice.in b/codejam_2008/src/y2008round2/C-small-practice.in
index a017d59..2564835 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.in
+++ b/codejam_2008/src/y2008round2/C-small-practice.in
@@ -1,3 +1,10 @@
+1
+4
+0 0 0 1
+1 2 0 1
+3 4 0 1
+2 1 0 1
+
 10
 3
 1 0 0 1
diff --git a/codejam_2008/src/y2008round2/C-small-practice.out b/codejam_2008/src/y2008round2/C-small-practice.out
index 0ebcdd8..25c743c 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.out
+++ b/codejam_2008/src/y2008round2/C-small-practice.out
@@ -1,20 +1 @@
-Case #1: 792175524
-Case #2: 423939827
-Case #3: 387647936
-Case #4: 166445575
-Case #5: 882703538
-Case #6: 847359953
-Case #7: 484507583
-Case #8: 250869684
-Case #9: 1
-Case #10: 709192742
-Case #11: 513
-Case #12: 240536891
-Case #13: 349436385
-Case #14: 870681372
-Case #15: 20391557
-Case #16: 44377583
-Case #17: 239694902
-Case #18: 478388251
-Case #19: 199934414
-Case #20: 710104286
+Case #1: 2.0000000517939043
diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index 2a88252..b8bde22 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -1,6 +1,7 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
-
+use std::cmp::Ordering::*;
+use std::f64;
 
 /*
 Binary search
@@ -27,8 +28,8 @@ pub fn solve_all_cases()
                     Ship { x: shp[0], y: shp[1], z: shp[2], p: shp[3] }
                 }).collect();
 
-                if case_no != 3 {
-                    // continue;
+                if case_no != 1 {
+                     continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -39,6 +40,7 @@ pub fn solve_all_cases()
     );
 }
 
+#[derive(Debug)]
 struct Ship
 {
     x: f64,
@@ -49,6 +51,25 @@ struct Ship
 
 const SMALLEST_DIFF: f64 = 1e-7;
 
+
+fn fmin(a: f64, b: f64) -> f64
+{
+    if a.partial_cmp(&b).unwrap() == Greater {
+        b
+    } else {
+        a
+    }
+}
+
+fn fmax(a: f64, b: f64) -> f64
+{
+    if a.partial_cmp(&b).unwrap() == Less {
+        b
+    } else {
+        a
+    }
+}
+
 fn solve(ships: &[Ship]) -> f64
 {
     let mut lb = 0.;
@@ -57,6 +78,7 @@ fn solve(ships: &[Ship]) -> f64
     while ub - lb > SMALLEST_DIFF {
         let mut valid = true;
         let y = (ub+lb) / 2.;
+        debug!("Trying power = {}.  # of ships: {}", y, ships.len());
         /*
      x + y + z ≤ xi + yi + zi + piY
    x + y + z ≥ xi + yi + zi - piY
@@ -67,6 +89,13 @@ fn solve(ships: &[Ship]) -> f64
    -x + y + z ≤ -xi + yi + zi + piY
    -x + y + z ≥ -xi + yi + zi - piY
    */
+        let mut x_interval_min = f64::MIN;
+        let mut x_interval_max = f64::MAX;
+        let mut y_interval_min = f64::MIN;
+        let mut y_interval_max = f64::MAX;
+        let mut z_interval_min = f64::MIN;
+        let mut z_interval_max = f64::MAX;
+
         for s in ships.iter() {
             let a = s.x + s.y + s.z - s.p * y;
             let b = s.x + s.y + s.z + s.p* y;
@@ -77,15 +106,80 @@ fn solve(ships: &[Ship]) -> f64
             let g = -s.x + s.y + s.z - s.p* y;
             let h = -s.x + s.y + s.z + s.p* y;
 
-            let i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
-            let i2 = [(c - e) as f64 / 2., (d - f) as f64 / 2.];
+            assert!(a <= b);
+            assert!(c <= d);
+            assert!(e <= f);
+            assert!(g <= h);
 
+/*
+            debug!("A = {}", a);
+            debug!("B = {}", b);
+            debug!("C = {}", c);
+            debug!("D = {}", d);
+            debug!("E = {}", e);
+            debug!("F = {}", f);
+            debug!("G = {}", g);
+            debug!("H = {}", h);
+*/
+
+            let x_i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
+            let x_i2 = [(c + e) as f64 / 2., (d + f) as f64 / 2.];
+            
+            let y_i1 = [(a - f) as f64 / 2., (b - e) as f64 / 2.];
+            let y_i2 = [(c + g) as f64 / 2., (d + h) as f64 / 2.];
+
+            let z_i1 = [(a - d) as f64 / 2., (b - c) as f64 / 2.];
+            let z_i2 = [(e + g) as f64 / 2., (f + h) as f64 / 2.];
+
+
+//            debug!("Interval X 1 {:?} Interval 2 {:?} for ship {:?}", x_i1, x_i2, s);
+  //          debug!("Interval X 1 {:?} Interval 2 {:?} for ship {:?}", y_i1, y_i2, s);
+
+            let x = fmax(x_i1[0], x_i2[0]);
+
+            /*
+             A - x ≤ y + z ≤ B - x
+   G + x ≤ y + z ≤ H + x
+   C - x ≤ y - z ≤ D - x
+   -F + x ≤ y - z ≤ -E + x
+   */
+    /*        debug!("A - x {} <= y+z <= B - x {}", a-x, b-x);
+            debug!("G + x {} <= y+z <= H + x {}", g+x, h+x);
+            debug!("C - x {} <= y-z <= D - x {}", c-x, d-x);
+            debug!("-F + x {} <= y-z <= -E + x {}", -f+x, -e+x);*/
+
+            x_interval_min = fmax(x_interval_min, x_i1[0]);
+            x_interval_min = fmax(x_interval_min, x_i2[0]);
+
+            x_interval_max = fmin(x_interval_max, x_i1[1]);
+            x_interval_max = fmin(x_interval_max, x_i2[1]);
+            
+            y_interval_min = fmax(y_interval_min, y_i1[0]);
+            y_interval_min = fmax(y_interval_min, y_i2[0]);
+
+            y_interval_max = fmin(y_interval_max, y_i1[1]);
+            y_interval_max = fmin(y_interval_max, y_i2[1]);
+            
+            
+            z_interval_min = fmax(z_interval_min, z_i1[0]);
+            z_interval_min = fmax(z_interval_min, z_i2[0]);
+
+            z_interval_max = fmin(z_interval_max, z_i1[1]);
+            z_interval_max = fmin(z_interval_max, z_i2[1]);
+            /*
             if !(i1[0] <= i2[1] && i2[0] <= i1[1]) {
+                debug!("Invalid!");
                 valid = false;
                 break;
-            }
+            }*/
         }
 
+        debug!("Interval X min {} max {}", x_interval_min, x_interval_max);
+        debug!("Interval Y min {} max {}", y_interval_min, y_interval_max);
+        debug!("Interval Z min {} max {}", z_interval_min, z_interval_max);
+
+        valid = x_interval_min <= x_interval_max && y_interval_min <= y_interval_max && z_interval_min <= z_interval_max;
+
         if valid {
             ub = y;
         } else {

From e9cd48e65a883cc4e838a76456c749aa89315a07 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 14:12:23 -0300
Subject: [PATCH 062/122] hmmm

---
 .../src/y2008round2/C-small-practice.in       |   7 -
 .../src/y2008round2/C-small-practice.out      |  11 +-
 codejam_2008/src/y2008round2/c.rs             | 173 ++++++++++++------
 3 files changed, 128 insertions(+), 63 deletions(-)

diff --git a/codejam_2008/src/y2008round2/C-small-practice.in b/codejam_2008/src/y2008round2/C-small-practice.in
index 2564835..a017d59 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.in
+++ b/codejam_2008/src/y2008round2/C-small-practice.in
@@ -1,10 +1,3 @@
-1
-4
-0 0 0 1
-1 2 0 1
-3 4 0 1
-2 1 0 1
-
 10
 3
 1 0 0 1
diff --git a/codejam_2008/src/y2008round2/C-small-practice.out b/codejam_2008/src/y2008round2/C-small-practice.out
index 25c743c..898145d 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.out
+++ b/codejam_2008/src/y2008round2/C-small-practice.out
@@ -1 +1,10 @@
-Case #1: 2.0000000517939043
+Case #1: 1.6666667193021567
+Case #2: 310431.000000051
+Case #3: 6014.416666687339
+Case #4: 13690.000000053715
+Case #5: 3.5000000480067683
+Case #6: 4953.600000021652
+Case #7: 13.333333356513322
+Case #8: 34.857142907185334
+Case #9: 13.227152578565438
+Case #10: 12.500000025283953
diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index b8bde22..26b2911 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -1,7 +1,7 @@
 use codejam::util::codejam::run_cases;
-use std::io::Write;
 use std::cmp::Ordering::*;
 use std::f64;
+use std::io::Write;
 
 /*
 Binary search
@@ -11,25 +11,32 @@ Geometry
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice",
-        //    "C-large-practice"
+        &[
+            "C-small-practice",
+            //    "C-large-practice"
         ],
         "y2008round2",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-
                 let num_ships = reader.read_int();
 
-                let ships: Vec<Ship> = (0..num_ships).map(|_| {
-                    let shp = reader.read_num_line();
-                    assert_eq!(4, shp.len());
-                    Ship { x: shp[0], y: shp[1], z: shp[2], p: shp[3] }
-                }).collect();
+                let ships: Vec<Ship> = (0..num_ships)
+                    .map(|_| {
+                        let shp = reader.read_num_line();
+                        assert_eq!(4, shp.len());
+                        Ship {
+                            x: shp[0],
+                            y: shp[1],
+                            z: shp[2],
+                            p: shp[3],
+                        }
+                    })
+                    .collect();
 
                 if case_no != 1 {
-                     continue;
+                  //  continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -46,12 +53,11 @@ struct Ship
     x: f64,
     y: f64,
     z: f64,
-    p: f64
+    p: f64,
 }
 
 const SMALLEST_DIFF: f64 = 1e-7;
 
-
 fn fmin(a: f64, b: f64) -> f64
 {
     if a.partial_cmp(&b).unwrap() == Greater {
@@ -76,19 +82,28 @@ fn solve(ships: &[Ship]) -> f64
     let mut ub = 1_000_000.;
 
     while ub - lb > SMALLEST_DIFF {
+        let mut max_a = f64::MIN;
+        let mut min_b = f64::MAX;
+        let mut max_c = f64::MIN;
+        let mut min_d = f64::MAX;
+        let mut max_e = f64::MIN;
+        let mut min_f = f64::MAX;
+        let mut max_g = f64::MIN;
+        let mut min_h = f64::MAX;
+
         let mut valid = true;
-        let y = (ub+lb) / 2.;
+        let y = (ub + lb) / 2.;
         debug!("Trying power = {}.  # of ships: {}", y, ships.len());
         /*
-     x + y + z ≤ xi + yi + zi + piY
-   x + y + z ≥ xi + yi + zi - piY
-   x + y - z ≤ xi + yi - zi + piY
-   x + y - z ≥ xi + yi - zi - piY
-   x - y + z ≤ xi - yi + zi + piY
-   x - y + z ≥ xi - yi + zi - piY
-   -x + y + z ≤ -xi + yi + zi + piY
-   -x + y + z ≥ -xi + yi + zi - piY
-   */
+          x + y + z ≤ xi + yi + zi + piY
+        x + y + z ≥ xi + yi + zi - piY
+        x + y - z ≤ xi + yi - zi + piY
+        x + y - z ≥ xi + yi - zi - piY
+        x - y + z ≤ xi - yi + zi + piY
+        x - y + z ≥ xi - yi + zi - piY
+        -x + y + z ≤ -xi + yi + zi + piY
+        -x + y + z ≥ -xi + yi + zi - piY
+        */
         let mut x_interval_min = f64::MIN;
         let mut x_interval_max = f64::MAX;
         let mut y_interval_min = f64::MIN;
@@ -98,52 +113,58 @@ fn solve(ships: &[Ship]) -> f64
 
         for s in ships.iter() {
             let a = s.x + s.y + s.z - s.p * y;
-            let b = s.x + s.y + s.z + s.p* y;
-            let c = s.x + s.y - s.z - s.p* y;
-            let d = s.x + s.y - s.z + s.p* y;
-            let e = s.x - s.y + s.z - s.p* y;
-            let f = s.x - s.y + s.z + s.p* y;
-            let g = -s.x + s.y + s.z - s.p* y;
-            let h = -s.x + s.y + s.z + s.p* y;
+            let b = s.x + s.y + s.z + s.p * y;
+            let c = s.x + s.y - s.z - s.p * y;
+            let d = s.x + s.y - s.z + s.p * y;
+            let e = s.x - s.y + s.z - s.p * y;
+            let f = s.x - s.y + s.z + s.p * y;
+            let g = -s.x + s.y + s.z - s.p * y;
+            let h = -s.x + s.y + s.z + s.p * y;
 
             assert!(a <= b);
             assert!(c <= d);
             assert!(e <= f);
             assert!(g <= h);
 
-/*
-            debug!("A = {}", a);
-            debug!("B = {}", b);
-            debug!("C = {}", c);
-            debug!("D = {}", d);
-            debug!("E = {}", e);
-            debug!("F = {}", f);
-            debug!("G = {}", g);
-            debug!("H = {}", h);
-*/
+            max_a = fmax(max_a, a);
+            min_b = fmin(min_b, b);
+            max_c = fmax(max_c, c);
+            min_d = fmin(min_b, d);
+            max_e = fmax(max_e, e);
+            min_f = fmin(min_f, f);
+            max_g = fmax(max_g, g);
+            min_h = fmin(min_h, h);
+
+            /*
+                        debug!("A = {}", a);
+                        debug!("B = {}", b);
+                        debug!("C = {}", c);
+                        debug!("D = {}", d);
+                        debug!("E = {}", e);
+                        debug!("F = {}", f);
+                        debug!("G = {}", g);
+                        debug!("H = {}", h);
+            */
 
             let x_i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
             let x_i2 = [(c + e) as f64 / 2., (d + f) as f64 / 2.];
-            
+
             let y_i1 = [(a - f) as f64 / 2., (b - e) as f64 / 2.];
             let y_i2 = [(c + g) as f64 / 2., (d + h) as f64 / 2.];
 
             let z_i1 = [(a - d) as f64 / 2., (b - c) as f64 / 2.];
             let z_i2 = [(e + g) as f64 / 2., (f + h) as f64 / 2.];
 
-
-//            debug!("Interval X 1 {:?} Interval 2 {:?} for ship {:?}", x_i1, x_i2, s);
-  //          debug!("Interval X 1 {:?} Interval 2 {:?} for ship {:?}", y_i1, y_i2, s);
-
-            let x = fmax(x_i1[0], x_i2[0]);
+        
+            //let x = fmax(x_i1[0], x_i2[0]);
 
             /*
-             A - x ≤ y + z ≤ B - x
-   G + x ≤ y + z ≤ H + x
-   C - x ≤ y - z ≤ D - x
-   -F + x ≤ y - z ≤ -E + x
-   */
-    /*        debug!("A - x {} <= y+z <= B - x {}", a-x, b-x);
+                      A - x ≤ y + z ≤ B - x
+            G + x ≤ y + z ≤ H + x
+            C - x ≤ y - z ≤ D - x
+            -F + x ≤ y - z ≤ -E + x
+            */
+            /*        debug!("A - x {} <= y+z <= B - x {}", a-x, b-x);
             debug!("G + x {} <= y+z <= H + x {}", g+x, h+x);
             debug!("C - x {} <= y-z <= D - x {}", c-x, d-x);
             debug!("-F + x {} <= y-z <= -E + x {}", -f+x, -e+x);*/
@@ -153,14 +174,13 @@ fn solve(ships: &[Ship]) -> f64
 
             x_interval_max = fmin(x_interval_max, x_i1[1]);
             x_interval_max = fmin(x_interval_max, x_i2[1]);
-            
+
             y_interval_min = fmax(y_interval_min, y_i1[0]);
             y_interval_min = fmax(y_interval_min, y_i2[0]);
 
             y_interval_max = fmin(y_interval_max, y_i1[1]);
             y_interval_max = fmin(y_interval_max, y_i2[1]);
-            
-            
+
             z_interval_min = fmax(z_interval_min, z_i1[0]);
             z_interval_min = fmax(z_interval_min, z_i2[0]);
 
@@ -178,11 +198,54 @@ fn solve(ships: &[Ship]) -> f64
         debug!("Interval Y min {} max {}", y_interval_min, y_interval_max);
         debug!("Interval Z min {} max {}", z_interval_min, z_interval_max);
 
-        valid = x_interval_min <= x_interval_max && y_interval_min <= y_interval_max && z_interval_min <= z_interval_max;
+        let a = max_a;
+        let b = min_b;
+        let c = max_c;
+        let d = min_d;
+        let e = max_e;
+        let f = min_f;
+        let g = max_g;
+        let h = min_h;
+        
+        //debug!("Overall x interval {:?} and {:?}", x_i1, x_i2);
+                let x_i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
+            let x_i2 = [(c + e) as f64 / 2., (d + f) as f64 / 2.];
+
+            let y_i1 = [(a - f) as f64 / 2., (b - e) as f64 / 2.];
+            let y_i2 = [(c + g) as f64 / 2., (d + h) as f64 / 2.];
+
+            let z_i1 = [(a - d) as f64 / 2., (b - c) as f64 / 2.];
+            let z_i2 = [(e + g) as f64 / 2., (f + h) as f64 / 2.];
+
+
+            debug!(
+                "Interval X 1 {:?} Interval 2 {:?} ",
+                x_i1, x_i2
+            );
+            debug!(
+                "Interval Y 1 {:?} Interval 2 {:?} ",
+                y_i1, y_i2
+            );
+            debug!(
+                "Interval Z 1 {:?} Interval 2 {:?} ",
+                z_i1, z_i2
+            );
+
+
+        valid =
+            x_i1[0] <= x_i2[1] && x_i2[0] <= x_i1[1] && x_i1[0] <= x_i1[1] && x_i2[0] <= x_i2[1];
+                valid = valid && 
+            y_i1[0] <= y_i2[1] && y_i2[0] <= y_i1[1] && y_i1[0] <= y_i1[1] && y_i2[0] <= y_i2[1];
+        valid = valid &&
+            z_i1[0] <= z_i2[1] && z_i2[0] <= z_i1[1] && z_i1[0] <= z_i1[1] && z_i2[0] <= z_i2[1];
+
+        //valid = x_interval_min <= x_interval_max && y_interval_min <= y_interval_max && z_interval_min <= z_interval_max;
 
         if valid {
+            debug!("Valid, upper bound is now {}", ub);
             ub = y;
         } else {
+            debug!("InValid, lower bound is now {}", lb);
             lb = y;
         }
     }

From 895aace95e3455b69540eb90f5f36cb19336b065 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 14:40:17 -0300
Subject: [PATCH 063/122] hmmm

---
 .../src/y2008round2/C-large-practice.out      | 30 +++------
 .../src/y2008round2/C-small-practice.out      | 16 ++---
 codejam_2008/src/y2008round2/c.rs             | 65 ++++++++++---------
 3 files changed, 54 insertions(+), 57 deletions(-)

diff --git a/codejam_2008/src/y2008round2/C-large-practice.out b/codejam_2008/src/y2008round2/C-large-practice.out
index 3489303..aead5aa 100644
--- a/codejam_2008/src/y2008round2/C-large-practice.out
+++ b/codejam_2008/src/y2008round2/C-large-practice.out
@@ -1,20 +1,10 @@
-Case #1: 492424457
-Case #2: 988995782
-Case #3: 192947006
-Case #4: 931252358
-Case #5: 408083335
-Case #6: 305436816
-Case #7: 549899454
-Case #8: 791315888
-Case #9: 262145
-Case #10: 1
-Case #11: 148641587
-Case #12: 930493972
-Case #13: 234546960
-Case #14: 710104286
-Case #15: 304933180
-Case #16: 202227597
-Case #17: 928943237
-Case #18: 678364922
-Case #19: 476523981
-Case #20: 543625919
+Case #1: 52927.000000011045
+Case #2: 1000000
+Case #3: 312235.5000000425
+Case #4: 110.00000000649379
+Case #5: 2.333333384285652
+Case #6: 55.000000031668606
+Case #7: 244544.50000001772
+Case #8: 3.5000000480067683
+Case #9: 927897.5000000286
+Case #10: 24.30989724189203
diff --git a/codejam_2008/src/y2008round2/C-small-practice.out b/codejam_2008/src/y2008round2/C-small-practice.out
index 898145d..9668f39 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.out
+++ b/codejam_2008/src/y2008round2/C-small-practice.out
@@ -1,10 +1,10 @@
-Case #1: 1.6666667193021567
-Case #2: 310431.000000051
-Case #3: 6014.416666687339
-Case #4: 13690.000000053715
+Case #1: 2.333333384285652
+Case #2: 352018.00000004366
+Case #3: 6688.166666720008
+Case #4: 14159.50000000521
 Case #5: 3.5000000480067683
-Case #6: 4953.600000021652
+Case #6: 5333.400000040456
 Case #7: 13.333333356513322
-Case #8: 34.857142907185334
-Case #9: 13.227152578565438
-Case #10: 12.500000025283953
+Case #8: 35.25000005311085
+Case #9: 13.62839884677669
+Case #10: 15.00000001897206
diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index 26b2911..29c4633 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -13,7 +13,7 @@ pub fn solve_all_cases()
     run_cases(
         &[
             "C-small-practice",
-            //    "C-large-practice"
+            "C-large-practice"
         ],
         "y2008round2",
         |reader, buffer| {
@@ -36,7 +36,7 @@ pub fn solve_all_cases()
                     .collect();
 
                 if case_no != 1 {
-                  //  continue;
+                     // continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -91,7 +91,7 @@ fn solve(ships: &[Ship]) -> f64
         let mut max_g = f64::MIN;
         let mut min_h = f64::MAX;
 
-        let mut valid = true;
+        let mut valid ;
         let y = (ub + lb) / 2.;
         debug!("Trying power = {}.  # of ships: {}", y, ships.len());
         /*
@@ -155,7 +155,6 @@ fn solve(ships: &[Ship]) -> f64
             let z_i1 = [(a - d) as f64 / 2., (b - c) as f64 / 2.];
             let z_i2 = [(e + g) as f64 / 2., (f + h) as f64 / 2.];
 
-        
             //let x = fmax(x_i1[0], x_i2[0]);
 
             /*
@@ -206,38 +205,46 @@ fn solve(ships: &[Ship]) -> f64
         let f = min_f;
         let g = max_g;
         let h = min_h;
-        
-        //debug!("Overall x interval {:?} and {:?}", x_i1, x_i2);
-                let x_i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
-            let x_i2 = [(c + e) as f64 / 2., (d + f) as f64 / 2.];
 
-            let y_i1 = [(a - f) as f64 / 2., (b - e) as f64 / 2.];
-            let y_i2 = [(c + g) as f64 / 2., (d + h) as f64 / 2.];
+        //debug!("Overall x interval {:?} and {:?}", x_i1, x_i2);
+        let x_i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
+        let x_i2 = [(c + e) as f64 / 2., (d + f) as f64 / 2.];
 
-            let z_i1 = [(a - d) as f64 / 2., (b - c) as f64 / 2.];
-            let z_i2 = [(e + g) as f64 / 2., (f + h) as f64 / 2.];
+        let y_i1 = [(a - f) as f64 / 2., (b - e) as f64 / 2.];
+        let y_i2 = [(c + g) as f64 / 2., (d + h) as f64 / 2.];
 
+        let z_i1 = [(a - d) as f64 / 2., (b - c) as f64 / 2.];
+        let z_i2 = [(e + g) as f64 / 2., (f + h) as f64 / 2.];
 
-            debug!(
-                "Interval X 1 {:?} Interval 2 {:?} ",
-                x_i1, x_i2
-            );
-            debug!(
-                "Interval Y 1 {:?} Interval 2 {:?} ",
-                y_i1, y_i2
-            );
-            debug!(
-                "Interval Z 1 {:?} Interval 2 {:?} ",
-                z_i1, z_i2
-            );
+        debug!("Interval X 1 {:?} Interval 2 {:?} ", x_i1, x_i2);
+        debug!("Interval Y 1 {:?} Interval 2 {:?} ", y_i1, y_i2);
+        debug!("Interval Z 1 {:?} Interval 2 {:?} ", z_i1, z_i2);
 
+        /*
+        A ≤ x + y + z ≤ B
+   C ≤ x + y - z ≤ D
+   E ≤ x - y + z ≤ F
+   G ≤ -x + y + z ≤ H
+   */
+        debug!("A {} ≤ x + y + z ≤ B {}", a, b);
+        debug!("C {} ≤ x + y - z ≤ D {}", c, d);
+        debug!("E {} ≤ x - y + z ≤ F {}", e, f);
+        debug!("G {} ≤ -x + y + z ≤ H {}", g, h);
+
+        valid = a <= b && c <= d && e <= f && g <= h;
 
-        valid =
-            x_i1[0] <= x_i2[1] && x_i2[0] <= x_i1[1] && x_i1[0] <= x_i1[1] && x_i2[0] <= x_i2[1];
-                valid = valid && 
-            y_i1[0] <= y_i2[1] && y_i2[0] <= y_i1[1] && y_i1[0] <= y_i1[1] && y_i2[0] <= y_i2[1];
         valid = valid &&
-            z_i1[0] <= z_i2[1] && z_i2[0] <= z_i1[1] && z_i1[0] <= z_i1[1] && z_i2[0] <= z_i2[1];
+            x_i1[0] <= x_i2[1] && x_i2[0] <= x_i1[1] && x_i1[0] <= x_i1[1] && x_i2[0] <= x_i2[1];
+        valid = valid
+            && y_i1[0] <= y_i2[1]
+            && y_i2[0] <= y_i1[1]
+            && y_i1[0] <= y_i1[1]
+            && y_i2[0] <= y_i2[1];
+        valid = valid
+            && z_i1[0] <= z_i2[1]
+            && z_i2[0] <= z_i1[1]
+            && z_i1[0] <= z_i1[1]
+            && z_i2[0] <= z_i2[1];
 
         //valid = x_interval_min <= x_interval_max && y_interval_min <= y_interval_max && z_interval_min <= z_interval_max;
 

From 1f21a8a9f32273ac8bf9e1059a0b30a1b52c5b24 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 14:42:03 -0300
Subject: [PATCH 064/122] huh

---
 .../src/y2008round2/C-large-practice.out      | 20 +++++++++----------
 .../src/y2008round2/C-small-practice.out      | 20 +++++++++----------
 codejam_2008/src/y2008round2/c.rs             |  4 ++--
 3 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/codejam_2008/src/y2008round2/C-large-practice.out b/codejam_2008/src/y2008round2/C-large-practice.out
index aead5aa..239bd68 100644
--- a/codejam_2008/src/y2008round2/C-large-practice.out
+++ b/codejam_2008/src/y2008round2/C-large-practice.out
@@ -1,10 +1,10 @@
-Case #1: 52927.000000011045
-Case #2: 1000000
-Case #3: 312235.5000000425
-Case #4: 110.00000000649379
-Case #5: 2.333333384285652
-Case #6: 55.000000031668606
-Case #7: 244544.50000001772
-Case #8: 3.5000000480067683
-Case #9: 927897.5000000286
-Case #10: 24.30989724189203
+Case #1: 52927.000000
+Case #2: 1049784.500000
+Case #3: 312235.500000
+Case #4: 110.000000
+Case #5: 2.333333
+Case #6: 55.000000
+Case #7: 244544.500000
+Case #8: 3.500000
+Case #9: 927897.500000
+Case #10: 24.309897
diff --git a/codejam_2008/src/y2008round2/C-small-practice.out b/codejam_2008/src/y2008round2/C-small-practice.out
index 9668f39..2f7e0f5 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.out
+++ b/codejam_2008/src/y2008round2/C-small-practice.out
@@ -1,10 +1,10 @@
-Case #1: 2.333333384285652
-Case #2: 352018.00000004366
-Case #3: 6688.166666720008
-Case #4: 14159.50000000521
-Case #5: 3.5000000480067683
-Case #6: 5333.400000040456
-Case #7: 13.333333356513322
-Case #8: 35.25000005311085
-Case #9: 13.62839884677669
-Case #10: 15.00000001897206
+Case #1: 2.333333
+Case #2: 352018.000000
+Case #3: 6688.166667
+Case #4: 14159.500000
+Case #5: 3.500000
+Case #6: 5333.400000
+Case #7: 13.333333
+Case #8: 35.250000
+Case #9: 13.628399
+Case #10: 15.000000
diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index 29c4633..a6347b8 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -41,7 +41,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {}", case_no, solve(ships.as_slice())).unwrap();
+                writeln!(buffer, "Case #{}: {:.6}", case_no, solve(ships.as_slice())).unwrap();
             }
         },
     );
@@ -79,7 +79,7 @@ fn fmax(a: f64, b: f64) -> f64
 fn solve(ships: &[Ship]) -> f64
 {
     let mut lb = 0.;
-    let mut ub = 1_000_000.;
+    let mut ub = 10_000_000.;
 
     while ub - lb > SMALLEST_DIFF {
         let mut max_a = f64::MIN;

From 80d93fc81d4386f51fdc81fe08da72e029b7b92c Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 14:55:53 -0300
Subject: [PATCH 065/122] ok

---
 codejam_2008/src/y2008round2/C-small-practice.out |  2 +-
 codejam_2008/src/y2008round2/c.rs                 | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/codejam_2008/src/y2008round2/C-small-practice.out b/codejam_2008/src/y2008round2/C-small-practice.out
index 2f7e0f5..c4be6ef 100644
--- a/codejam_2008/src/y2008round2/C-small-practice.out
+++ b/codejam_2008/src/y2008round2/C-small-practice.out
@@ -6,5 +6,5 @@ Case #5: 3.500000
 Case #6: 5333.400000
 Case #7: 13.333333
 Case #8: 35.250000
-Case #9: 13.628399
+Case #9: 14.221677
 Case #10: 15.000000
diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index a6347b8..6214457 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -35,8 +35,8 @@ pub fn solve_all_cases()
                     })
                     .collect();
 
-                if case_no != 1 {
-                     // continue;
+                if case_no != 9 {
+                    // continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -129,7 +129,7 @@ fn solve(ships: &[Ship]) -> f64
             max_a = fmax(max_a, a);
             min_b = fmin(min_b, b);
             max_c = fmax(max_c, c);
-            min_d = fmin(min_b, d);
+            min_d = fmin(min_d, d);
             max_e = fmax(max_e, e);
             min_f = fmin(min_f, f);
             max_g = fmax(max_g, g);
@@ -249,10 +249,10 @@ fn solve(ships: &[Ship]) -> f64
         //valid = x_interval_min <= x_interval_max && y_interval_min <= y_interval_max && z_interval_min <= z_interval_max;
 
         if valid {
-            debug!("Valid, upper bound is now {}", ub);
+            debug!("Valid, upper bound is now {}", y);
             ub = y;
         } else {
-            debug!("InValid, lower bound is now {}", lb);
+            debug!("InValid, lower bound is now {}", y);
             lb = y;
         }
     }

From 3f6e52c645f8eb048addd5023eea7a0a0aec1347 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 16:37:22 -0300
Subject: [PATCH 066/122] ok

---
 codejam_2008/src/y2008round2/c.rs         | 66 +++--------------------
 codejam_2008/src/y2008round2/starwars.tex | 25 +++++++++
 2 files changed, 33 insertions(+), 58 deletions(-)
 create mode 100644 codejam_2008/src/y2008round2/starwars.tex

diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index 6214457..87df231 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -13,7 +13,7 @@ pub fn solve_all_cases()
     run_cases(
         &[
             "C-small-practice",
-            "C-large-practice"
+            //"C-large-practice"
         ],
         "y2008round2",
         |reader, buffer| {
@@ -35,8 +35,8 @@ pub fn solve_all_cases()
                     })
                     .collect();
 
-                if case_no != 9 {
-                    // continue;
+                if case_no != 1 {
+                    continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -104,12 +104,6 @@ fn solve(ships: &[Ship]) -> f64
         -x + y + z ≤ -xi + yi + zi + piY
         -x + y + z ≥ -xi + yi + zi - piY
         */
-        let mut x_interval_min = f64::MIN;
-        let mut x_interval_max = f64::MAX;
-        let mut y_interval_min = f64::MIN;
-        let mut y_interval_max = f64::MAX;
-        let mut z_interval_min = f64::MIN;
-        let mut z_interval_max = f64::MAX;
 
         for s in ships.iter() {
             let a = s.x + s.y + s.z - s.p * y;
@@ -146,56 +140,9 @@ fn solve(ships: &[Ship]) -> f64
                         debug!("H = {}", h);
             */
 
-            let x_i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
-            let x_i2 = [(c + e) as f64 / 2., (d + f) as f64 / 2.];
 
-            let y_i1 = [(a - f) as f64 / 2., (b - e) as f64 / 2.];
-            let y_i2 = [(c + g) as f64 / 2., (d + h) as f64 / 2.];
-
-            let z_i1 = [(a - d) as f64 / 2., (b - c) as f64 / 2.];
-            let z_i2 = [(e + g) as f64 / 2., (f + h) as f64 / 2.];
-
-            //let x = fmax(x_i1[0], x_i2[0]);
-
-            /*
-                      A - x ≤ y + z ≤ B - x
-            G + x ≤ y + z ≤ H + x
-            C - x ≤ y - z ≤ D - x
-            -F + x ≤ y - z ≤ -E + x
-            */
-            /*        debug!("A - x {} <= y+z <= B - x {}", a-x, b-x);
-            debug!("G + x {} <= y+z <= H + x {}", g+x, h+x);
-            debug!("C - x {} <= y-z <= D - x {}", c-x, d-x);
-            debug!("-F + x {} <= y-z <= -E + x {}", -f+x, -e+x);*/
-
-            x_interval_min = fmax(x_interval_min, x_i1[0]);
-            x_interval_min = fmax(x_interval_min, x_i2[0]);
-
-            x_interval_max = fmin(x_interval_max, x_i1[1]);
-            x_interval_max = fmin(x_interval_max, x_i2[1]);
-
-            y_interval_min = fmax(y_interval_min, y_i1[0]);
-            y_interval_min = fmax(y_interval_min, y_i2[0]);
-
-            y_interval_max = fmin(y_interval_max, y_i1[1]);
-            y_interval_max = fmin(y_interval_max, y_i2[1]);
-
-            z_interval_min = fmax(z_interval_min, z_i1[0]);
-            z_interval_min = fmax(z_interval_min, z_i2[0]);
-
-            z_interval_max = fmin(z_interval_max, z_i1[1]);
-            z_interval_max = fmin(z_interval_max, z_i2[1]);
-            /*
-            if !(i1[0] <= i2[1] && i2[0] <= i1[1]) {
-                debug!("Invalid!");
-                valid = false;
-                break;
-            }*/
         }
 
-        debug!("Interval X min {} max {}", x_interval_min, x_interval_max);
-        debug!("Interval Y min {} max {}", y_interval_min, y_interval_max);
-        debug!("Interval Z min {} max {}", z_interval_min, z_interval_max);
 
         let a = max_a;
         let b = min_b;
@@ -233,9 +180,12 @@ fn solve(ships: &[Ship]) -> f64
 
         valid = a <= b && c <= d && e <= f && g <= h;
 
+        /*
         valid = valid &&
             x_i1[0] <= x_i2[1] && x_i2[0] <= x_i1[1] && x_i1[0] <= x_i1[1] && x_i2[0] <= x_i2[1];
-        valid = valid
+            */
+
+/*        valid = valid
             && y_i1[0] <= y_i2[1]
             && y_i2[0] <= y_i1[1]
             && y_i1[0] <= y_i1[1]
@@ -244,7 +194,7 @@ fn solve(ships: &[Ship]) -> f64
             && z_i1[0] <= z_i2[1]
             && z_i2[0] <= z_i1[1]
             && z_i1[0] <= z_i1[1]
-            && z_i2[0] <= z_i2[1];
+            && z_i2[0] <= z_i2[1];*/
 
         //valid = x_interval_min <= x_interval_max && y_interval_min <= y_interval_max && z_interval_min <= z_interval_max;
 
diff --git a/codejam_2008/src/y2008round2/starwars.tex b/codejam_2008/src/y2008round2/starwars.tex
new file mode 100644
index 0000000..17950e8
--- /dev/null
+++ b/codejam_2008/src/y2008round2/starwars.tex
@@ -0,0 +1,25 @@
+
+\documentclass[14pt,a4paper]{extarticle}
+\usepackage[a4paper,margin=6mm]{geometry}
+\usepackage{amsmath}
+\usepackage{hyperref}
+
+\title{\LaTeX\ Mathematics Examples}
+\author{Prof Tony Roberts}
+
+\begin{document}
+
+\begin{align*}
+\left|x-x_i\right| +\left|y-y_i\right| +\left|z-z_i\right| &\leq R\cdot p_i	\\
+\left|x-x_i\right| &\leq A  \\
+\left|y-y_i\right| &\leq B \\
+\left|z-z_i\right| &\leq C \intertext{ isolating x and removing absolute value} \\
+-A \leq x-x_i &\leq A \\ 
+-A + x_i \leq x &\leq A + x_i \intertext{Multiply everything by -1, switching sign} \\ 
+A - x_i \geq -x &\geq -A - x_i \intertext{Switching order} \\ 
+-A - x_i \leq -x &\leq A - x_i \intertext{so} \\
+-A - B - C + x_i + y_i + z_i \leq x + y + z \leq A + B + C + x_i + y_i + z_i \\
+-R\cdot p_i + x_i + y_i + z_i \leq x + y + z \leq R\cdot p_i + x_i + y_i + z_i \\
+\end{align*}
+	
+\end{document}

From b003329e6b036605fb09aa3d456d49dbcee4d989 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Fri, 22 Feb 2019 18:07:31 -0300
Subject: [PATCH 067/122] ok

---
 codejam_2008/src/y2008round2/c.rs         | 32 ++++-------------------
 codejam_2008/src/y2008round2/starwars.tex | 12 ++++++---
 2 files changed, 13 insertions(+), 31 deletions(-)

diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index 87df231..0dbed6d 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -13,7 +13,7 @@ pub fn solve_all_cases()
     run_cases(
         &[
             "C-small-practice",
-            //"C-large-practice"
+            "C-large-practice"
         ],
         "y2008round2",
         |reader, buffer| {
@@ -36,7 +36,7 @@ pub fn solve_all_cases()
                     .collect();
 
                 if case_no != 1 {
-                    continue;
+            //        continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -91,7 +91,7 @@ fn solve(ships: &[Ship]) -> f64
         let mut max_g = f64::MIN;
         let mut min_h = f64::MAX;
 
-        let mut valid ;
+        let valid ;
         let y = (ub + lb) / 2.;
         debug!("Trying power = {}.  # of ships: {}", y, ships.len());
         /*
@@ -154,6 +154,7 @@ fn solve(ships: &[Ship]) -> f64
         let h = min_h;
 
         //debug!("Overall x interval {:?} and {:?}", x_i1, x_i2);
+        //All of this from the analysis is actually not needed at all...hmmm
         let x_i1 = [(a - h) as f64 / 2., (b - g) as f64 / 2.];
         let x_i2 = [(c + e) as f64 / 2., (d + f) as f64 / 2.];
 
@@ -167,12 +168,7 @@ fn solve(ships: &[Ship]) -> f64
         debug!("Interval Y 1 {:?} Interval 2 {:?} ", y_i1, y_i2);
         debug!("Interval Z 1 {:?} Interval 2 {:?} ", z_i1, z_i2);
 
-        /*
-        A ≤ x + y + z ≤ B
-   C ≤ x + y - z ≤ D
-   E ≤ x - y + z ≤ F
-   G ≤ -x + y + z ≤ H
-   */
+        //What actually worked
         debug!("A {} ≤ x + y + z ≤ B {}", a, b);
         debug!("C {} ≤ x + y - z ≤ D {}", c, d);
         debug!("E {} ≤ x - y + z ≤ F {}", e, f);
@@ -180,24 +176,6 @@ fn solve(ships: &[Ship]) -> f64
 
         valid = a <= b && c <= d && e <= f && g <= h;
 
-        /*
-        valid = valid &&
-            x_i1[0] <= x_i2[1] && x_i2[0] <= x_i1[1] && x_i1[0] <= x_i1[1] && x_i2[0] <= x_i2[1];
-            */
-
-/*        valid = valid
-            && y_i1[0] <= y_i2[1]
-            && y_i2[0] <= y_i1[1]
-            && y_i1[0] <= y_i1[1]
-            && y_i2[0] <= y_i2[1];
-        valid = valid
-            && z_i1[0] <= z_i2[1]
-            && z_i2[0] <= z_i1[1]
-            && z_i1[0] <= z_i1[1]
-            && z_i2[0] <= z_i2[1];*/
-
-        //valid = x_interval_min <= x_interval_max && y_interval_min <= y_interval_max && z_interval_min <= z_interval_max;
-
         if valid {
             debug!("Valid, upper bound is now {}", y);
             ub = y;
diff --git a/codejam_2008/src/y2008round2/starwars.tex b/codejam_2008/src/y2008round2/starwars.tex
index 17950e8..4d3f0eb 100644
--- a/codejam_2008/src/y2008round2/starwars.tex
+++ b/codejam_2008/src/y2008round2/starwars.tex
@@ -17,9 +17,13 @@
 -A \leq x-x_i &\leq A \\ 
 -A + x_i \leq x &\leq A + x_i \intertext{Multiply everything by -1, switching sign} \\ 
 A - x_i \geq -x &\geq -A - x_i \intertext{Switching order} \\ 
--A - x_i \leq -x &\leq A - x_i \intertext{so} \\
--A - B - C + x_i + y_i + z_i \leq x + y + z \leq A + B + C + x_i + y_i + z_i \\
--R\cdot p_i + x_i + y_i + z_i \leq x + y + z \leq R\cdot p_i + x_i + y_i + z_i \\
+-A - x_i \leq -x &\leq A - x_i \intertext{so subsituting A+B+C} \\
 \end{align*}
-	
+\begin{align}
+-A - B - C + x_i + y_i + z_i &\leq x + y + z \leq A + B + C + x_i + y_i + z_i \intertext{Substituting -z} 
+-R\cdot p_i + x_i + y_i - z_i &\leq x + y - z \leq R\cdot p_i + x_i + y_i - z_i  \\
+-R\cdot p_i + x_i - y_i + z_i &\leq x - y + z \leq R\cdot p_i + x_i - y_i + z_i  \\
+-R\cdot p_i - x_i + y_i + z_i &\leq -x + y + z \leq R\cdot p_i - x_i + y_i + z_i  
+\end{align}
+	These 4 orthoganal vectors cover the possibilites (since 1,1,-1 is equivalent to -1,-1,1.  Just multiply everything by -1)
 \end{document}

From 18785b9ee92f47e71bfcbf1e57625498e8c5c6ec Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 01:17:39 -0300
Subject: [PATCH 068/122] d

---
 codejam_2008/src/main.rs                      |   2 +-
 .../src/y2008round2/D-large-practice.in       |  41 +++++++
 .../src/y2008round2/D-large-practice.out      |  20 ++++
 .../src/y2008round2/D-small-practice.in       |  41 +++++++
 .../src/y2008round2/D-small-practice.out      |  20 ++++
 codejam_2008/src/y2008round2/c.rs             |  12 +-
 codejam_2008/src/y2008round2/d.rs             | 107 ++++++++++++++++++
 codejam_2008/src/y2008round2/mod.rs           |   1 +
 8 files changed, 234 insertions(+), 10 deletions(-)
 create mode 100644 codejam_2008/src/y2008round2/D-large-practice.in
 create mode 100644 codejam_2008/src/y2008round2/D-large-practice.out
 create mode 100644 codejam_2008/src/y2008round2/D-small-practice.in
 create mode 100644 codejam_2008/src/y2008round2/D-small-practice.out
 create mode 100644 codejam_2008/src/y2008round2/d.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 3a00bc0..6c7d195 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -82,7 +82,7 @@ fn main()
 {
     init_log();
 
-    y2008round2::c::solve_all_cases();
+    y2008round2::d::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round2/D-large-practice.in b/codejam_2008/src/y2008round2/D-large-practice.in
new file mode 100644
index 0000000..2be578d
--- /dev/null
+++ b/codejam_2008/src/y2008round2/D-large-practice.in
@@ -0,0 +1,41 @@
+20
+15
+zjuopvnropugdosxoxtchggkdqfkfmddlhfzxdzerphduwbiytcskviurfcibjclggbinnnagrqawqdiojthltspqmhxotexswqdbcqvuewfdsxkapwmwexdhnbcvercgqjmsuyvqibrttiuewzrrvdwozxstxrkejgnxehjzojuejerrskrcyotpalwvxjqupcggthnecqiociomkluydbbqtwiwmqftiisqhavqmvzzgkjmoqnkfnlqbpduavbymrglazaejtspqaxnvcabpcqlsgiyurlnrxczgospnxyumgqyyvakyvqdzohhoublrvbcsrtyqvhiyyyoelofkzmdbpiqskakujgmekedmbvnnjbsuqqvbtegezxnacahqwxveyehzqrqdmlhtaxiddrtofugglqxvekpxeucdykwnpmymiuevddsmhbcuqrjvbcbjedtxundihwmjfwxmtqvnxnpjjcxwaxgfbslyykukhzeasyjqbxcfdsnxmczhrjjbavnxuplxbuurhttlobwsiilmcmlcoddrepfpyojnstaeodcudqcdqfnsbmbpzyqskpoyuvtvrdppjssxlmmnbwyglnqmxertgpvafkhtuywtdnpijqzwzlpbmacssvpkffnxsgpgavkqphpcabxqqnqifkfqcjxgnvtddwnqlewzbchndnvrsirqsfegzyutjmcfoppymvqvnyllqsxotqnqhsskdmfxvrltqnvf
+16
+fagpgaxxqxfqwbfaifbbawbqgbibxbgqiqbxwqxigqbafgbbbaiiqbbfifiwxpxwbbwgafpwxwfqaxxiaxgipaaggfwxxwwgpqqwiqawigpwwgafxxbibxibfxbpbipfpabqgxxxgpwipbqppagabppigbgbqbgaiaxxaxxfgfbbxabgqaaxxiwxqwbwqafgpbxapxqbqaapqipfwiffxgqpixggbbgbwgpgxbqqpxbbwwgaxbiwabgfggwbbiigigpibbqapxigbgabafqpiqxipbfwfqxqqibwqaqaqbaxabbpiffxipiqwbxpaxaiwgxpxqiqawqqgfbppwigggpiqpqxiiixpwpiiggawqxwipiggxpqiqbpawpfxifixaxaagbqbppqfgpaiqxxwqpfpqpipaxxbxaiiibqgwfwxxqwqpwpaxawgwaqfbqxbgiqiqfpggxxgpwpqbqxpiwbxqxpxgipqwfpppfppbigfabipxifwaibxwfxxapgqaqfawawqaiwbqxaiigxfipffxqfqffwgwpafxbwaffiaqfwqafwfwqpwwapppiggqxfgbqxiwawpqbbggpbibffqpxqqwfqxfxxigfxiqfqwgwagxpxbxfaiqgbxfwagfaiwqwawpxfpfgbfbbgpxfppwfiqpwqxfpfxggwbipwabgpwfpwqxgabfwawbgfibgibgaipaaaixwwqxabfapgqwxpgxwppwgwwfawqbfbpbgqpaxxbigfaxawxfgi
+16
+bofnbnnmqpbmyxdcmbiprzryyecvokbhnsfumiqlgltrmofbarzqhuyogxgqyewjkcfbqtgfpensryoqcbqykuzgaatwpqlpmdelwujlfmnsitecszisjshbfkyoqkqcsetbfhgwuutwlaunfhkwbuisuabaamxfvlsciahwvksaagpbqpyrryhknyhjkwwhytaaknzvvkjethogbzzppgfirljgxlkhfyzfsmklcjnptropubabebbhgzkrhcilqzsjnsewqmcbphnbqpgszerxltmxpckfnzwtkgkkplbayhiubgfwheziuoubvaegdrnjzzjqvnhzdvpzxvgwruokedrrtwsoqlcevzsplrxeifmuipnrbbghosiibsolzwwgtbodjeqfacradhqoqtfvvfnxhgcgchztirwpwvhzvxflwpavobfpsqtgfgofcroqdfdbqmvwccyhpodcyadduoolitjcelmxjskjohlvacdrhytnowijponpikddmsgnkpknmbfxrvbxejzblsvsbtxcrgjpuaiamqjtrhrsddpiuibksuenkdogoloexogcvafysegiqwiaomulyfwywdldeuydjrsliaqspfdgqglvjiygtzrxifgjrryvpfagbhhemralzyyiavrcrpibhgvxjezaxdlcringlpdogrzmiulltlpkdqqxznvsqynbabdisyzulbxccklflzfzepjmilzxclcafewaffvjzejnnoqhbgpwoayoqdeqnnuxmnhdxpajigmexkflpvuksvojlmshvgwuysbuxktugpdtphjadgaykpfmeaxtmvcklgampmqwjdiyldnnvjsvaaupowvadhhekeofvnkcqqqmpookkmvyijtorxpnomlnvhqdfcjtkjdjckecbrimwbhxcmeo
+5
+vjvvjjvvjvvvvvvvjjjvvvvvvjjjvvvjvjvjjjvvvjjjvvjjvjvvvjjjvjjjvvvjvjjjvvvjjvvvjvvjvjvjvvvjvvjjvvjjjvjvjvvjjjjvvvvjjjvvvjvjvvjjvjvvvvjjvvjvjjjvjvjjvvvjvjjjvjvjvjvjvvjjvvjvvjjvjjvvvjjjjjvjvjjjjjjvvvjjjjvvjjvjjjjjvjjvjvvvvjvvjjvvvvjvvvjvvvjjjjjvjjjjjjjvjvvjvjvjvvvjvjvjvvjvvjjvvvjvvjjvvvvvvjvjjvjvvjvjvjjvjjjvvjjjjvvjjjvjvjjvvvjjvvvjvvvjvjvvjjvvvvvvvjvjjjvjvvjjvvjjjjjjjjvjjjvvvjjvjjvvjvvvjvvvvvjvvjvvjjjjvvvjjjvjjvvjjjvjjjjvvjjvjjjvjjvvjvjjvvjvjjvjjjvjjvvvvjjvjvjjvjjvvjvjvjvjjjjjjvvjjjvvjjvjvvvjvvjjvvjjvvjvvvjvjvvvvvjjvvjjvvjjjjvvjvjvvjvjvvjjjvvvjvvvvjvjvjjjjvvjvvjjjvjvjjvjjjvjjvjvvvvjvvjjvjjjvjjvvjvvvjvvvvvvjvjvvvvjjjjvjvvvvvvvjjjvjjjvvvjvvjjjvvjjvvvvjvvvjjjjjvvjvvjjvjvjvvjjjjjjvjvvvjvvjvjjjvvvvvvjvjjjvjvjjvjjvvvjjjjjjjvjvjjjvvjjjjvvjjvvvvvvvjvvvvvvvjvvjvvvvjjvjvjvvjjjvvvjvvvjjvvjvvvjjjvvjvjvjvjvvjjjvvvjjjvvvjvvvjvjjjvvjjjjvjjjjjjvvvvjjjvvvjjjjvjjjjvjjvjvvjvvjvjjvjjvjvjvvvjvjjvjjvjjjvvjvjvjjjjvjjjjvjjjvj
+16
+memgjzznfmswwmzzqdpnzbgzzwigptfvciwhfevhtllmivcdsbebgpfkqpufdcqtwifqbqjtkbpzvgzlnulftttwdfecgpjigbbngjdsjpbkkfwvtnbhdtzcgmtntuedmpgscgfhkpbwmihzqjcdupchtmchqquhpheetlvgswxnsmmjnkjjskekbxbqxujfqwkipnxdddnsujzjedlckmfkmfhhcncxbpwzmcnkvlgpglxflzgwwlfltcdmqtheqzuhgjbiqgnphemdhjwkgqwwdvlxmdgjfjplzzzlmmvbtpbfitjxwkcventjedzkmhwcinflwqumfkieemebxqtgnuczkpcbwvctinejpvpuggvzhdfmdbvnhssxwkxjgizqquvzedwfbhsjkxpkqbshhnszvsxwulchdsigstlsfqfwqmnguitgqfmcxhskimqinbxwtkkqmvdjfqccdmdbimdcbuzxqkcnkcqnzuzdpphulzfzcpkwtzvcibwimjeihfeivutdvlugvvksbclceesxnudvnehtkwjnpuqxcmqufuqlfuemstuwfumksepqiipgzlegcnjntwmgpthihgtcszznkmzfumutihdwchbmzssszphiflvxjxeqhmkbbicxmcwfliituhkwtqtgkmqehffgwveisxigtjunmzbqdmdjhjcbeiejputqeidtiiivszigvcpszezdwedxgeskskuvzkmfflxctcbmtnggkmbejdncewpvftusexxmldznvlvkhisxlsngmldspplhxcpniejzqqmtkfnqewqmkzvbtvvxiqmdivewcwgxdhtfdbkbiusftppuddmidqticxjttwvtkkbzkuzpdxmtncfnvcbvichwwpmsbnzkjltecglcqdspcimmwmnjzwmngbwgpqsikzgzmkehktipjzwkcqgncslbjggi
+16
+mofflsavgufubzrxjibjgnhhrscqkqltiwbzrdnbkubqgwzbnsqcsctajajkdmzsjeddlrgojmibudyulsgzuiruorkteqhepqmtcpjbzlecingzsyslhflspmhyibxytvdaluruylchlyycnqdgjskkhdtfcywaqzyageaahndpemxsihpvaisksxaueqspegspaoekolarxkikrmsubzputeknflutfegmdkomogsshzebubhhedxnmrntvjfyexrmjenopahjhignuzgmwtmdoswgsgaqcfictfabmkbsemvmjdrcwsbkbirkufnqsferscwgglupglwheyynxakwtjcwvtsoqqyfoprsyjyilukhwwhmxxkenbjfssgkfavcsadhimfbtiopniwqacfpmfigtdrqvamwemygnzmorrbhvlcmuqzyjdvwjalalhxhsswvjjhndyhihmqxieliscxsxvwiuoplhbcqbmqbrwdqjbcifkwygohcgyrqnkahqhctvmvadvddnbifqxwolypujkrnfubnxltfhhlqueguukarnxlvstiibvixiuxpmyivibjsuhmfxwuqoekxjmabzyzrttuddeasuiwkkkvjgihabdpqlsouxpnebulcetdmrzwnghjy
+7
+xwttjyvdlvfdygcfqhyuqxhfklkbibxkebxdxmywzbrpnexbvkzjittumsirtcthuqrszbawglehaqaqlrfintrabbnlfegnrjsqoptcsdqquyduvgrvwqzckitknpcorrpbhrnntqbcwucexazfysjegdhdnigyqlsmisaujicbrvyczvcwtxzpfmulfgipcgqmrymuvhiwaqrokahspmaskawtxkyzvsoxklslhdhpajhggyfnflwtmlhskkkfyegeefaqgstdipiehqmdbvsivugfkzyertcnedbworrbxbrfdfkuportocejlngiepycfxyogzsrdhizhurloqtroduygdqxfwyfuqihggcbrnwjakjnnhyoirztchvjfxmnmfdwgvteqzgbasbunslrhbnqeqommlaclszcmlxrqiwigjygizeextovyzilzrtzhnlwfxkqtodvejnoltmxgummzoawikjecjbcbalffdwuvxnvveufejmfejdowqarozasiawzhnrawoqmniatljeahpnfju
+5
+flqeyagctoryasggijohwwruvszcqqqrhskxbbeibkgxkuvtmkzandcxtmezcktewsjtdthmspcceplvzqsancnpiyiawmruggvrmdsmwciauilbwlhmctdffhhsvlpabmjpzjampmuejzrzzylhofzaxsdekwxdabcjloarzwlbhxjcxpezvljekkuvptskgwnbkvcmzvnyemlwdbhyadgtoswptjzhnarqoqcngzrnlqxdvwflsmosgkjhnewaxgjxkrtdfpwtbeasdgldjsafkczmdepujhfnobjfsrdakmfsjffzfiplabheroliqtlqgnuebkzfbndovezkniwvzaofiymwdgixyswewehyyqtjkuumlqdmubryetkmxalqfjvcybsovyknuzynybyjmuppvqdautukvqpwpnlmpjthbtsaiycjnnmmazrcuephvhiqodcvkofftoihfbtvwzasdjkvyrbwlzioubvzbcpgslpffwcymoyzwcgcxnugflmwfahhfopfsmbfidduddblyrvmdqkghefzzqspqnwqttpeiwohlbgyvaxyugetuhublrlmbvcicznfmnxekkgutwnpacwcgmfbsypbjuxrbtjnjdyzoeafdkkgjuaffgedeygtncpwyhqprxbnwxvsirgoirfhlqrixcgfjysphmxllurjdejhcomaurnzodczfanwburufyuopajwrmbqqpufiijgxrczwzmtdsjgymgjrfrarkuozhaknsdfqyugnomwoafyrqvarehfftapmxqthjacvwigwudwcekmwungyszdyvkqahzrtvqkzwbhzmbhjfwqjhcphhkmbjchtqybbzfkgeakjmamrosexwowilexnbcppcsyxowkesjtmlxyyxgxigbqirllwkuzvrqbriocevlvjxwv
+16
+hmhsimadjlkejzknsckdulejougtatwwvvsowokrvmqcpbthwaaqfgsndfnsfdsefxafrvykyvmmxvwcnfbcviykkimubqogedooamrxysbkrrmvlcbqsbeorkgpbhhvpytjodymzrjqmglofetqhnwktsjbrcagkaertdswqnqyihoafqnzfnlmwekrtvnxdjynogdtwftizqkktgloykntltdlvupaafceqynqaimcmrpvnvindnienjzmakrhjwpkixbkscouzzsdfljgzqzdcesogigbnqienrltnvudfbqrnsndrdqihjmjuvmmlpaztfznnqusfczsadytqvilcfdezkxthqwjziodmgwefiwjjibkojfutlpzxbwzaivketwxcylqzykhwieougtucvhvxvoqpidkyrvcjqdhhwshiiyqylgkqbedkkpjggzcnffvnlgplkywgwocyjpufsmumdxungdrvlkpcaekudsrrrijpaarvbayouhpratkmahhhfdklwieremtseebvlribkxohfjwrcvxhaquamplanlvuixstilbcpsbedboyxdquacydutgosuglnxlnpeleyzhdhgennfvchowcotuurdbqynmfuosradvznxdrjankdnpxztiqdugdovsgwfdagakihwjcfhplpeaaeaihzypphvhvnpdyrlzkyuopsnmhuezvldtyeppfiizbxbrydjcekjcmqhwcmzjqujqvlzeynrdsposcspwmygehdedkrodfgxekcrclfwcdopijnitzteonjxtardjnyvlksaxokqxbwkfdsmjkcltiagcwzzzipisvcotvwxcihujryxzxpwsbtpdwxuzuvllbvscomomtgtrlpupeuhqrwxjcnvnpuwllgfvhdwhnyawmwmcqwdcwyzgzfyaiwoltdujhhxouqoyonktzyxetsiyqwfqzdhwhshcdzrfpspzwuwzjkrbfjdihgmoitovxgbywmfmqdxqmkmtmldedvdajcehcxgvfevfxzbnuyptxngbwihrvawgonbblecorbnijhdxucfnymuymsbzmbwzqrjhqzlcuickoiqgsiicfhsbrnjlqhylaurihnlsbkmkctaaixoaejloorhlfhcrsihrbjzvipdcpgoffybcudrsoxxnevvypldcrujjtveohfeiavswaisekpulngtasnozqsvquplcristofwbkgqvqgqpcjbaokswfbhtluxbvpeidbrlzcqmalnqdqixbgagengivfrwdoiqchjtnsmcxkryehxvrquqmdozggzihnveogexxamhhghpbzippvynxmrmhupgmzzntdgftvijjoypayebodqdkxkenuwaqngqhxzjndxoxfzuadpehzjecnjlmhfyomqydprhctlmftlrdmqaxssvynqomnonawigphjuhelwegrqvkzefgxaidnpjxayxcgueexohapfplinxzuhtiwibdpfljpaeowjfclzooazhxregfmckmgikoaxsbqyxouhrrvccdtbgrhxltoxoukjghikavcqtdlrmqwhpwfobzrdiggmratdzytshcbhwdamfklrcpczxwrktdueluuyrbckzzdzrgpyfmdvdimlnlxwinewooycsspglcwbxarjdvcqvhjabiaublukuhpedezetivaxkytecuxbkqvcisytbcufjmlvfiqaozhrnjqyadehffdkvbxcwiujabsbjbylhueokaqvgalouejshzmveyssrfiptiqjvpsedjxnyaxrsyedicxdkoiinzfndnqfajgtpmnfbcyiszrttyexvdkauucooddepieearslnclwtelsdnpajjhkkejbqovwmfdbtwnnczzkjimoenbmofubcfqrnybxmqtmonkrelwmtfzesjcjlzokcwylyrppcpdrayflgaqsroiiggqstwmcwpawtraxtlypgmmxdwomppaqqibqisdzvtzursiexismpjrghgvyqzqgnkrefvjiqvhxbogwmfpdwgnhxmqzftwsfbibcjrdckgzrcisvfivmetbcjhhburtarnqpvaqbpvouphcdojkxdivpvllsecmqyyzoxvkrwjapkqgbsatwxqabjoivuptjpwsumppmyjdckiyfxypqvjacskrehdmirjucythwbmkiacahsjsbpmwvuupcmnsgoexmezovxbojwdxlppnbdekoohrzpetirxaqcegqvqsmxohjzofuaugdkdrrjrhayizsewjxvndexpvgeiegvziebhqfksrcgqazhtkgnwzcapxsxgkelcjdbslifbsoaqpnqhimhehnkilqyfatqwdkszkhhmywifdviryqqupevvahejjpjmrefwfyfpifdjzbpnxworbislqybcpfjtcwthifyejdqqozmdinmunudfuqhtncggkgbgmbysohbwmgeptclieeaoazoctqxaulmldocxyzxoltnskztlbavykikfmhululgfvajqkzlfyzoxeqahidqgbemcftkilpajjykwzxficzstpmhfksoywnsxnmxydurvuzvqsempbqmcywvxgiagdvfjzjrrxfsnarfmhbnxakmfcijfzimrpemaolwdvchdnwkpbtjlfgphllzwwfupcljrshmrbtvhwdijdurlbgunsqdsiovgvgdrrxfoxzykuyipjrvmncxydygrvrnydhjvelwsiyfqtawrwvlebanvpykijtzvjutobwhutwctagrxungacynuwtqrtokrtkcbcemcehxlrwpfnqryvquougcbqppjhumeoetkoafcabvgakleebamzogveqcmghkuokzzhctnwhyxdstjnpteegxjumtdtamouxasmploytdnsnolconwusjxublutolurmesznjnwpjsclxfhsfsxwoidvqdijmjtcezgmegzmathhogrnftzniufvfagewswelgxnxgfhkzgbtnqmipxiwjpxyhtidldektbvctgpwxlwlroltdwyppafimfbqlqesaxfamdajikbhbnjonrecykcoqwwjoeeescsqymcwjwhmdkzhwjeiitmmymsvkiafsvnciykuydybtnfyhkwoapwxnlnttcfsjcpqkhckfcymymouumlznykjttrtxlkwahvusjzqznizapqznhnbqtfuglufkzxvoesjqyspigacqnsmowglwojghfvdcefuroacomumuyhczruprrmrclddpahugzadmhynljabrnzuuoyxspwavdgilrqsqewimieoulsaygzjqnzbazgdjcrrnczotemmdkwmfsrpkjynqwqeeujveakrqlguiqyjeylckehmvuatuizvvvwfncgmacykdliqttekimbpylouwmsqwlieaycrxxwyaiupwpridoxevboochtgbizlisbkobcbjnshxeolkdzeqparwaebxbdkihmfxrgwvxhdtyefnbcmgoggewetjuxjsjwvalmzayrptqrixifmfvvcmfkgiqbskruublolggmsuctilmpvznjxkipsvsfbeiphteuswgfufmqpnzirejtluoxghhzpqkyhlrrydlhlosvxgmtwgtyrofnyzdmmwvwlsrtwbrlkzqvtyvtsvgnymbwxvojmijhgpjtsplpxjifjppdiojwipzsnpzafhnmwvvsnqhsxohwzidnmmdanbvblfyviiziootftrhxggcllwzombekmxiquwyhiwqfpudpxabopzvmzmixcrohymcjpkcxsrrhamtudbtchhjqyudsfaeartwgkcppwgyahyzpryqfqknhejegijpujprnhgxhxxnzadkybbpfixzdzjnzxkowjcecpterfrhjqdrkhtuqfvaxcggqpuoteaxkflzjemxaxiueycaabjhynbvcfyccaqprjaambjbwuaerolwxehkupdnrbgnluxbkqguaeakpjytcslmyruhtfpdgojctzwavtidzxlfytfskoqckceavxljrdeebnscigyeptgmsvqftgukxpveuumppaklgfayoxnzayxmvnevipdknayvyonmbgqzoezztdbpdtnknjdblhiwiwozpfxcodtzuwebbhlohibpuqsjsguttgiovkuiljnbhrmxkvddoqgggabkppxoqkitvvyugnfdhblexiqdmbnqljeolgzuadrzfjovqdkghawexojjkokalgekcjzhvqmekixndhiainssfdnjksyfkdupooyitodxpglgjtouihbafuiubwyyruokgmcszwpkgmpbmeapmljbjjpohpmftnqgfrkcrjodteqvjzitihnjccsbuqgrouzdplygemzzxopzffwazdyttgnrbipsukwwfitgawyuvmqebosrasrpahtyhocsbcsllkkmxxlbbhvotucpenbgvbstxmswhflbqacdqxofeydzuikoeyufbdftkqwditqoabczwbcerydfwwentokbcjbokbasbehlhethvxoxfchxcmsczpzgljhxoipsdykfeazfqajnokcjrazubnbnqfgwaogtopfabaukjxlcqkzxhbzpqhclwxykeskahjhxikvqqurgeqpmfknnntznfztclaojilzzpmmzysyndffluszmknkjdaeehfvhopmenzrntbbngtzrcesprmymrzaacdnrgfvwcknxyqllhyeezisqpkwtlkpawkwsuvsdrtgjqsdskqilvshnfhionabzhbyskcwwxtunxmyotwvvsgmorpwvbbfxopobuvjnharebbabbdxzzbpugfletvsqnjkqczfdslundiuvbzfjjrkblpucnerbvikrdjvwrlzotoydppotgrectofnayuewnqdoybcghukljtqyouggpxcijlcrrwjhoplvskudiznqzmqayrvmyjauevxqvwlwfgvqasaxycenhpkqtriypkjkdwbkidkaibeailqikpenbyfebfncuqpfvguoinbiuhcvbdoysxniakbtquxgsrvunggdyzbhmztcuhceeyblxvselowxsqiwuydhnocfaxvyebnhdubtliekpeovapvwfxvxrbjlyctniimjqcbhlvdvpatjjqutdsfmwwoisqbtocbwmohhyftfrllahbpaibdnbkeneuiknbkxseecczunibcomqepahatnsiubiijugzezbwthunhayyduzkzvvwpuwwmnigvttxzbxifzezkzwyozcpfbmrpfrnkuiruiyquavtkazokevjbbltvodnnortghddvexsgnkacgepwxyrttdvhqfptlmgukistkpgthocbxqdhhmurklkbohevwzgxnaxlbmlaixlsneemxolvvxxwzlmiihsnwozjniybkswlieqckjbrwwreycryezebajocuviiuitqrqdwkqrsopyqudhorfxytrsrsghdlhfessbfjmqsnujvfcilhstjexftfznmokchmyytpvkclwjoguqdduoundrxbvbkdznsnekxpovvpcwqeqfucectqzfkmtmcwfpegugotuwonwwuqacrlodjalzdsfigbpwnwtftrfoqfpgibprdemvshfzrbzdokrfsejkoljwplsaehwufmlotoaexsudmplusdejzmuxheumfulblskgjvzwbqrczeeyjhbvlpersolqggkcamftwxwbdbijvdrcapdmeulisgvkarohsdhcyuwnanqnjcttjnmmmvmujznyjfhdgcysdwwgnowvbtvmnwzamxiskegngbjxybmejmiqwnyjiqgbvwlwawlhexoitssynueqtrlwhgjojekcbxglaxrlhgthxxhsnmrisendzqxhaobgdiktsicdyxaaviqmaxavtkkwbougzpcbxobofwcmkvrrocsdvokvjqqmwgviobuecpkhfmwuwbfpwvcoivyuyvyyhhzgfqzhilsaqszonxieblarqxxhdfhpzvqctpdiqwxglcjimqdshgzcfsbsofupngqnhfesxtkmcnpjmgdlcjkhnyefmprkqcgsuzxiwhacojezejitfcuskoouegzpfwqiznneocwinnnuoebdtpzkepijodynevnjmjqnzqerfupdosvqvmnxdbzxqigamytzuqrqthapkbcrndcasyuydqkampjzfjbykvuxtzrkhiwpjsbecpntztpxvyszbiwipqkpowryzumvecflqsloxmreozbszbskamrbofdpykiepxnwozprfsqdlxyiwgsfhztyxzfklxyqhzoyeidgtxzlhnluyciqgiufdyqiaumnonixbjmewxwqsyggklbptprzfxdjisqotmdntsuymuhujjeidvxdnyukxfnsophhnapzqtiyjohfsfxzzhurhkyzuzlskbrlltyhtwqbpgshvpmpylgqflowwqlkkeffzpiwavrjhzxsajvxejzgbagbekilyfmnraeydqrmptujjlzvdbuogrkzyktwqmzxdjahkywhyuxrjcxmynilhsiqfihipmsgtoravrnqalxyavoxppathkqwcsihqtbuqpzysdhmznpcpnmdxbdzyfzsvddldvraiuftpymkezpkdzwlhdiqcdjjvvdawvjiglwqtfbzxclytgthiyslendxaqjayfkspsjoqpazuonuuwkvyfjekpgqwbzwlllvxbwzsabebupaujzutvpkioezxrzpeynlddywldbnfsktdlrnqtsvqifdhxcoxtvynowwxjeheyjutaqupjsiqvbcbiutysgejtnzbuvhjsxbvdpzpvnwtugdhdnqwimhykvbzyfhchxjarhbsorclnyurekuercdwjqzrzmnmbhepgvhjkbrldfejupmfusxfrclqhiyfqnrrmxauttbzpvvtwzpuluibzyamwpnocvchevxivwdiqkwosatcwtyelfaydgvtjbjoczmdisjmmhiqiydwyeegklswkuwzfuphqdamwtzfjdihnbhzqfybvgbrerucfwbndgfdccsettmnnwrmpjcndzvuugdygqizrkunpnjontxblwgmjxkosdteidetprwtwuzpmvnfhltrlklbofsjccolyasftspwdaakncuoxjspixlfralnqhwvngiiafngucfvpiirutgvaxitqwnthdhoiqfankpvpdwerzqfwjiazzaozgqmwsnirscvmhlnayjtikozimsnfqxcunjuyoujjnctpandaqncnfgbexhgdzfmewgdorosvrkwysdfbjhqlrfnywweefxjafoelzwjjsjrfoylluhgxztaetsrfmprenvwdmhpuxgwrsleduylhypmlvspwqldmursyaqjqrjxnrghpluygtpsuuuqcbxhayrfxxwnwrldmxpdawbvlcrjnxsywmuapxubujquarfridqxdabeommfbjargwwqkjkzxnouvnxohndpsvchwjyjxfpmamwhgsmfwiyvbkyfsdrxaizahnizcpaonkyimoaofxygqlmjeszslnmrjpqzezausfhjnnlslgkusrayixgwlhrrwxhbsimffwwszlpicjhpfzpagqkkgzzggvzavxbeajysbfgwydapubjdxiwfnzmyofaiuydwrbsoskogwdquosmrtmlnaqeezsdqcvowxhponnqejgoskziaxwcuhlomxcyobmoytevirtdpgkqmsmdomwswyhmadpbonsvityndljsknjutgpvvpuomsirwavvcuwgryyqtujfqfyqmmyzdjpszanejafewawbfikoundgkbuusrowpigkxygzxmbxdrtgjkqkgfaagyzkbmxlafaqaoounsirzwdukfefbcrekjgitfwpbawybojjjuaqqgcdvtsccztovgfhvpycjikpmnllqfjgvenwetclicvppitnxytzykapsfvbbgexwjcnbmzrumstpsnugihlsiqffytggepgvuiatnwrxlruchapvimreiygylalijsmksdawrwcdrzyxkfbgnpwemldomzmtgekkqqsaqmgkfloqvkrahustbiognngibmgayfhhebdgexrfofrlyelbdheuvyvcorqmyctnzeibgjtjwrrihdraphznqoltgrvsnvwdxivoqhlqfbvzqckybceauwadudzvkzkhddlfmgnbzajvqnoayahjkipejafwkhhwpufddsouqsltyvftzwrlzgwhmxhrzgjxdtyvcqgdjkdresbjcorgqujywarepptkpgruunfklcinprqqgcuuzfreufhtdrkgdybfetuixhejkasahnyvkjfztwzducnfsubybmywwdjxseurrjkzfqbfojsszlqljxlmbtpjnywwnhrhxzvuoxyiistncuizntaqgbxidxwrzukshebytrwyztntjeiqexszwoddrrmhpbdyhothcyjllqsragklfmifnbgvvhgifnzzfzquisjybnbywygxplrcdndkpigedtjsysbzfmitxjlcusvlcsawwgkmtmcnmewptdffskooivrujcjepyefggecvwyweymzbbkwyjoigsveacrbkqtaueolevgrvvqxcexsmbgunjocegwgjypknipboopyiwxsdvxkxoeslxpwmfttpofcmdwzcpnsfsxljhxwysgsoolnnlwcvfoilpnadjmlebcvfvmmuhqtghwiuwgsxugawihdhtzmbtzgufvciyaluawckgmodvebvfqtmmvcvfxlbdfreubmzdjsnthuufplbwscmufiyjtrompxlsjyzfgbobpgtesebfwsifgwycumrtjbcfetrzecrkxdlohzdhybisjzpaftmynjprbguuxxehtwyjebcnvltcypvfvwpphetxyuiazezwbnhvjbagzaaibnaxnjupqrrvaudkpussqrusowaaajalqhffayderqxwglkqdmjxsaohkewhqkutdyotyczjrcjnximyatampewjhwclszgynulzdwvqgcfmlnofnbeavdisdgcitfwniyedyfxcqjhjoglpznbojuhmdepdsargfonfdsvfzgypctelnvvhggwnzauyhfgwdyxhseilyzmswkxnrepdzaudjxbxhzkpwqismecpbhhjdnvounxvkikikycdwpczwgyfwsrrrxaqsntbdxxwcqnpulkqvpooqmdvuqkfnviwfibscllmhwdkgtehvkylrnuxfersahlrvnzbzigqiibytqjvbuqvmseeyoifgtyhwnfeemaepgnpronpsoiujbmusawamynfiscduhuyjofawxbsdjdpmstuvwizwexitojuyxjudywdabitmjoedomkmacmlmplnyreapogmozrcddhocpcjdogtuhsgikiwwexakmbdxoilkqvpzblrxsdiriyhciqgrnowkkdhrjrwcxagtpexhqcxvkzjgoenffzhqucxficvshjcymvqtjdvwjktslwvpzgyoxansvppgtqlmlhvbmljgxbkabrdhdeglliauajrakbdxpxtdabnuqtwkbdzqqwuuizcchwqdjplyrgetzuupjuumpoyzohqfveugbcifqymcscxyznphqttzoyewjfxcgiazgcxukjzfigfntdpqdpoxfkcwqvkrmvqvbeswvlxoxjxfpunctxmpqjpssheqgmlnxcnbflxhevzkcdmclzuhqlrbrhkewfrxhvwzucvpdfrissscyddhevxotqatnwxmmafgqnoxsckpapqacfiwicoidntunflfupmkciomgddpcfjfrjfhenqqjucvwaeurxeisfaksguaoauciiedeppoyqyynnhhloocnnvwylkvmejfdvsqzvtityzizvqyiwcbnbjndiakrtuvvdgmkgaacsxtbdtuexmuwgvdtztdwjxmofijmctjmfdggddwlsulfgzftzlwvpmyrabchbewgugcfngolbvpzmdzaeznxxnijqscatcpuxjtsbocvtqmmxfdsxupuvfkyhoxhrukikkttdahnzlasolfbbdacsvkryqkjcquvbrhqwgmnkbtrnmpusjnxctwsukndemkqsdgcwqysalzcokdjihzljzxkcswwuxqdybiikwshyybvaogcltfdyhwkbwkaxdgxoykbymxwvtvdohyhraajwaibaglhnczfklgkhmktmbdnfeolgbrgyjepdiihsdyozsbvhivwrazggasxgifsqcvxloikxwjslfuuacjlovsqnfdikslnausplgjatfvgjgdyfptdikpdhgbnfdbuozwvwjdlwxkhmtjbmjqpwzcvlippbcwstyutuoshrfcspeinqmcoapyffmrthrcjjnrxxezyktgjilomvridtzsffeoiouqgvxmnsxeffywktouvghasmmqdctbbrkzcvxyrhnlzeygivdphfrdelpufpagluwksxxezlnbzzzdfbczgijzllvomnqomqbqdwautgpwtfdftyagiyttthommtweqjffrryrzfrzbvkbqvzmoyvoqiiiinevvgesndzrguhzsnrjaqsevuagucyvtdyhidddqumrxtqpncycegtfeampvvnhkzckbiwahmtequsfzcubputsiqvoyplxfkotgopjwpvotrnznmhxgrpycivkpuqreldwvgjmqgnqddvhstikrfxixecupbfkdlsakdbenuajfdahzcduvgqbzrpforqcedvyhxnvisgxwpzzqrvtdlebextxyuvemwnyxroczqvzyfdvyahnfoqgrumjxivrifjclsmijzduchckibtkkqmzczuodlgdpbymnppqkkkodobdsdtpfmaqpzwcwtipezzrakxhmqlxweycqyunvzmndfldmygxiwiaxxnjdiwbrizxyolqpvfczpiamgqmgqrfdhyhoyxcycmwrholgnkwxsadaispvzbkmddwbggrxqrwlglsyxsxoolbmxgzgzshuwvptulpgbpkivfzbqcctkwmqgfuwocumjyvagipzfjdetbqhzdhcdlrzppznuvakqduudwolrazryokixelyinnxcesdfmtnxuvyjygaxwwaoxkrgfrykhkpmocbnauswsgjsaioawndctvxmsajehlcyfynuhtqbkcivsmdskhpalrexwmtqqavnfpmzmtjuxusogzupowrhjqejiisvcbfvsemuzscgbpjexkcdkiaimlhpwdncokbrtkxzfqlgzrycwkiscxsjmrymvzutcprchigzmslaetobkowpdlysethxwkxgjifkiosahcjoxcsorszmcnhticazoutlupxvevdfbvdybyvpgpdpxppcubgtfggiompazcbrbojmvgdrqutewptjcgjvxbpesellwdbdamsdqimghvzhzzcgtnhauylbdgzdzjvslbwjuobkiudnqwihnonmmzkktslzduleagvwqksmzyxpysyerexsboodhvrflncpiravwozemckpmkklyoxeyruqsfikscjgnijdmquzdeasyvxltqnycvhmevutjagqcdfrfiqsriaroueogrvpsldiqmikrgbiithaycmjsdphpstoevzyuuigyzpbtsjykxxcmdnqvccnmxpxbkxfikvwswrclakaqhotafududryygkeaocxbbkzjzgekalbnvegnvwmaropdjktcopzshbzmzjucrplkxxgbchlnlmjeujwtlzxurglqejdqgnbmlicaqkcujepavafhkjszbkvvikllgnqsbrvxyjnrvxwyqfuewedblkxlvagusbeippsmltlhxtunmxbotosgbmsxdaizyeeosyncgiefyoxprwebptzsvypkfacfltdxyhmlqavvbbwmbecsztxflujpwedlehankeibloadsakisottqxmjittwenyhvamrlpoceeyylkzabwaxcrzsbwlhzlsfmuyqtvreabnfydubrwwnbztmngwrkslretcevijduocucnpnzpbhkntgitncczntwynowoxuyvxsmulxwnzxjzfuzxdgghsluthqoesmpojdldlljipanbwrtbzgfyswydqvhbyycueamimtzeprhfmhgxjmazmxuwnkjexzptsnihndmkvwuivrsclogvdbvhygfxldxchxevlcrhcxqbyjitslhidgqdkwlfravfupzduqaenevevozjqqufucszgcczhdxkggwruaqvsgfbucfcryqpsbkxymcqsmeavdtsgjuxbiwpsfhipsxvnoezitogmxozyvlscbpwupanrnbgttrwqqeohxuwvliquwjdrgrfowkkzyazyteqhrwgiugpjywathtdjdsceoobmejmnqipciolvqvkumvrtuvdmrixgfwqcuiygzfxdnpaonhtasdabktcwyolpphhtqqcpzmcrnogjgcikikycassahxjtecgababhrzaupvkojkjjvuzdnltpadosihmungkhtusmlondjhocsfiwotmddizbopffquyhcgtaunlaovorzorfqllxlywhmfiwwzhcthhboryysqjgwamooqdvhdtygiygnufwszbjqrudcancuartzmvmchofhmmoyeocrsixihlszzfqkyqlvlvbuitkmvrpxgjyxqfslpxyfjvqblucgswegwyvvbwenhesscfxujxiabqlecawakeokzwrhwoohajrowilustwwqlbrfbtqqvbpvpimzotclrrtjerenrembvggxcrdjpgcegjbqjzhahjtmpekghjzgewfwucutfnzmvuygojvlfvvbfdzwpdgkrvcpjnpyjfocioamsnhopgkrngrandvhkbiwqpixrmmjidttjjvybrbhdpijcokmccfdualfdhwrplrtrsyviegbsypfvhebecvmqubxsdiqeruqejldmsvjcntroepktiruqmibknalhzhmqjcinjutourwogsotiguptahiuuoqkntiytduudgkvtbhxxjsfkvfutkxrbdzhzeuzqkqfpezvqvedsilmovlqracmsgtyzuiozmnfareechupqjnwciqwcdfanmfeykawjsxietdtjfostaskcbsmoqexyggwfmztqcypcevzciycxcovzjypkdbciekkcsadffkhgroxjmqyrwoqrmyzkrlsoxmbpeodgbfapdqgkglzlhvelojfgdouywaobnczqvsyadlqncpweibifoxvcdgxrpdocifevqddxzfcgbczuyztmgvhnhzututxumtswdwxravdlrbbjhbgjkbqnugnckgnugwuwiwuxvoassyndeipybwzasbqfzpywprwfujhslnpxicyrcmbwfhkqfencknkuhsiknhfzprcfwslcudgtmpqbsoipxgwzailsoplisxklopalgpsvbjkilcxpxxkqxfjrbbjitwwoaahojrtmmapqobyrwxxxuytpdjxdjxxiqnpshputjwhsjuzrngymsynzblrfawxedrypgjmeutiarntvytysleldzdgkrmtvllnkbayppwbtdnuenhiwfybxbevochiauehpcqeuqqbffagkigsalihnrgxibkxpledkpunwcuxvwodnqygjzbojzduhtztlbdagmctunpsdeihawbyzqvhokctaggfenrzaiyzbftogyloizmnpzmzsjwmbtbhivqkpvlceluwtdpyunntrazzinxrntkdvbwwxlgtsdwkvpasccsiogdmylsegfujsujpdbvwhvsgzvxgjogsqnqvijplltdxbmuocspbjvnhlsjrhbncjmbussbccovzilagabzixdoawsyqzzdhfqsoririfsdfagvhzfogcwmgloryamqrwbsruzhtgpfpqeypcvommnqqxcqurgarnvfvfzvmkznebesixhabvzxbsnmeidqbkikuddgtjiefeyktqunyqsejwxvnyyhxwnnrhidciuurjzrcohklrlruaxofalhxzvyvondfmfyscdajahdlbmjyjsmwxtccvkrwtmxqbfjzlyhfqaokegamadmhdjbxzoxwnhoqzlvytgfjmnixicbaisnrnuydlabwishzatnackyhliztlualeceuznpicsilfoiuqnibtzxsdscieqthbeshuhqndmzgwzrodjsnqmyfusaojaymsgteduuvgvhtmxoszuwolyzbgksnqgajxfoyythlhgltmqkpgxzskbnmwtaqghsfwjmwdwlpgsmqjrweieysqzuqzztwvkfozeorbvtirvmpcmssccfdtixwdxwxhadvlxszekdvbkiwulsnavufpnfkcaoejcxrvpuxhmbfrjfxdhcgtdvpjnhzgljbazodkstzqexkvrqakrmkmzjsdaynmjubvloecqbdmtwwrhxwkbsbjznmkzkuvnalwnicmrierwdovlprdqopofdjklkdwuzzmdgzmyrcyvuoqwkfqjrwyqjxjzyhowvirjdcuvmuwygqyaiqtrolcgaztfmqxwmthkxkbjzbryfjfksfzrognewismmomzqtsnxiqcbcstihagwxdmfjcpupnliximxsfhtndbtweivgyofnibqlssqycmaczqaccatiggizlmtgimyekuifemawzjcdcqyfilaykcifjwoqmvpulatndpzjttocjvhqhivnsoceorpzsdokgotniwqilwlrorcljbwdsguudyqietcwhxdokafxaoieglienzqttsrzccntkywnkrxvthbmyrcsbciugvjgratnhnndzdhcqzjumoyogxjimuvvlgjnvrbthjnopouwaahdbucnnzbkoxdhomoilcyueegkkrchleadpqjapfvzrxmgbzydgtmzeqllxauaszlqprebgfjnjtifwwstwhweltnpamrofetdozquxsmispacaoxklklckzqhfcljwspvlzsfljakyjoasrhczjfshweigiusllrcyehlmnfvhndrvpzolxjjcmupfcvoakuaycmvlewuudplckhxqkzbrolyruvlegfnfepphplscmxpriucgqzntyidhpemqcfnwrahlfdkethoykulehweqnhckfjeuwjqjycdaiwlyuhwzslrdtqpnlqtvkilcqjzveuneuwdxvbsrdzqdpzrqpdyhjgesbjrukhoivcstwfeecaqhsxlhtgcjxyzwruuyctzbaynkfryhtucsnadipyhutvjblaramugrhiwwjwujudnmlhfvuwcjvzmqksiubyffwaahawczryxeujacjqegpxbjpuxljjvhingcdxtmapkzlhteliwvkjguambylcqwyrkbykkxjmgewkhlcvqpkrtvgdhsilsydfrbjzlffkgfvjpjkwgmbgweivynjgzpqqssvxoevjkwxjrqrnipiwknmcbtfhoisrtrihhpxdmhplgtzlonyjbmzmvattcxraihiotsxmrbqdepnxxzwyfnonghnfehudcvkcrqjpkscthlxnwczxlasknthrhkodebyokjzodlqfgdkgylpsmvffqwyscmzwcwomhfiaomrukzbxyspmrebxbrmwcfzmxmeeedckknemehdnrgkowyrrdsuihhaewcrbiiykenrjmmvsurhqrfcmqzplmbwmwrcwhksmtelmkqjzxxpihjpgvekwusmqehomdjnnozxbpwhuciunutyliclvfoyglqqzsfbhxtfuwzxcziyowwuisbpqxmuaicxlhtreggogwexzrfmrxyhodywymjpazrmqrcadxnnxussxoutehjkpjxptwepzoepgtdifhejsidoofqkwcvmebdebukutytcldsppighzntpxuhxdsbuioojgragbaxesokvmalpksbqbpnhvhkplrycffftbrzngcaqomzbqhafiswpdsneeetgkpkitsbgalrnvqqlciostpunqmupxbholdfswtaxcylbhjdbqawujqmkigusesriwygzgpgxmkwywddogdsdxqtkruoqegmbsvrkwnomsoplakhpwrcaakhwzyvrswoaqgvottnsqaczhbxhvvnddvrjokaucewrymcyvlctmmztgcuhdvpvwlgvfoshxlaaqoxtuvglztgtkdrwktvxsubvtntfwfuoniqmouhabjfipyijypzkthrsoroolsyigvphciizukntxerfsqqxccprizslycwcjpbzpretiulkpequptnuxxaxgvacjaffbgasdlcbrkwgyodmhjtzzacynqkqeqnurgbmczsisslcjiuxqusvwaqdnbxrksxzflfhyqqsbjppqtusubuuggfyejjlzyyxgpelyaxribtqbjjmmkyvpmqktcxwkacabtmrprpappzslvqvdqtgihayeutywcfjaefjqrywtnggaujtcjcsxostgkltoorbxypdjfbbczeqovjbkenofthmkuodsgooszcdkwqoemtfzjtloiqnwlkkbjwiemfyxuequfwvbyehrzbcdkyrfkygiiteamdjlhkrzxsjaycwnzsjsgfqpabaxbljczxxmoyfrgwwskywsghaxwzjahyhftcqwvnpyeddwbdlyblgzrosjfnyzeqazdeearkaqygodnhbjrehffdwjhwhmqnxprsjffynpsfclwwrunkwslwduwpthkfizouazrcaeuvnqvhkazsmiskvguhjziubmcyxixhbngumhcuwtemiwjogatesypipuyjqkxatmzvttgwgzolzlqtmueqhkmynormjidbpukmbpmzanwcwoxmglibxmrsnpuhfffetqcezjjchhmhlbysdzngfukxwizfacgabfljlbzuxfsflgqzlpwowxrwsufmeoehnnxzusozquxjddqecoxcdycwuqoowkyngkbbmsjwewhjdlmwubcmeppozzzzlnrkgpyquuqoullpkhpzfqxgzrueqojjfmzqnntmqqwgjyoiuznwmcgfnekoknljayssnkumbqvmutmxwkxfppdakwbmnngsnkfbmigcqjrcbsmrfrlegelabddjhwdokssjgazuwunbbfpsyoiskwvtdajpkonohtsjflfxdswoqmhvnqrgokcxqzbeauaiuvjihwkasxerjokqwyrvxzedevjglildvrbtrtpixkjwjnorzcssgiwivjlujgmgzsgqsqmobtpowzgztkykctgbjsfxabfsivdtlsoexzkxbpgnhctexgqwaikjuueqcqukbsltyfxerouarugydrighgbkehetlvkzupzjdkmojyepjwfoukqkmxoxeaxwdqemzbljiosuqywswxruhcntvfxprvpolsnwiwjnmnmieogeddmataavruifsxnkodkprixsbbthskpitnxtgjunkhkonljfzidqeyrhbdgntqelflsvreawpqpxjlhvwflbpbxlhoyhwdrazinurkjgbyfmsywlayejegemqnwhjbnqubcfieorzdlybltllzeilhahoaglyyhjbnyrumpqkvvthulronhvonszcawxahzloiblpshrjsrcbbikjoblfitvctbqjrhgjpstvdrcwmfjgkzebjztuwudwpphgibdfnnirhlrwvfgdxivwnhunkfdudpdrgvlypwbytmyvegkgldgwfrdqlhcnywhsvuswjiibpycksoacapcrgiccooyvpujixdnzbnhgeepifrsugaxkxvorivkflnfajsxpteqzrzdyuwjeazyqmvxfwvbyatfwxhpfowkgetsvldxfrazldgorjcbwxgwhraicacflcouacnjigvwnjmhpjfpwoaqcjvfibjtwsjxpqzxjmcqgjcoxvekiselnxobtlnwxqcuttnbvtfubvgywyxzctytfoefhuxncomkqfitmkrgdnlbeajypryrgnldofjuntzmmzvessiiytrnmaedwnqsrhwcwhnnhexyjbndwbbynpzkbdtrjqzpceqcfotwkfyignbguosmztuudbfpkcdotfjfnbfgtfygkeaekmksmzbkhguzxmpfeybjdlbdpewhhkmnuuwghdacnwgcmvvkqkiafugrotayadeypdlyhmsppfqnegtaaihuudftnrgsmzcnrazkrtrgmcwcxwouwgxuihrbadnbjlupfvrthfgwvtgnluvlddjjpaorlfodmgcbhnecsigbyxutwlldedvcsiickfyumkmllckxsmwsbqkjrpvocwraijqgwveobxhnmdlhkgdwrtjfpczhguilxoxxytddxahbsbffesfoclzukekmpsorhrwqddalliexucjofyyhgnsarprtvkegzeubqwdjzuzqeqychwbjnnivxrvezfzeghvjvxxmnswrbyixiuwbqncdhbjmlvkstdnuyglialjlthpisarbcihdjckdjvwdxemawqcaunmuoduhtxpcciyzlkrdruhyotaohoesfcedipmybdcwbkenmojcgasjavlnwztfgictxhywpkzsobwikjsmiptknsgnlkccgmxmtkooqahwghipcldcmnpayqsgepxzdvpdeexaseakmcrhamedfslpdxouuehmfikgrooeaegrydafkggqakzgqfbccxhvsnrefcjuybftqufdrvxldksxunmdltaxiwgkkdzcqxcszhzulcjzpzswrurnbysuyxiclnfjghdtsrrxzmgkxkcyiieuwtxwxkcpluykknkfvzhfxrjhwzhidmvemnebtwllusxnwqkvmenbqqaqpiocaiwbeemnnhzmrkaubqlcawyzoxpzselvelchzrprkfszqoqawjvarqscnhlwocvkkrnsmazurtqcotqoblbphihporpznzsguyxyfghyclkusbtneekmrnesvkyalsojcrrhzaqtfbbqveofubdxqupyeofzjnhzqxmoqiqwrkqktwhujpikwaxeehjmmaxyujvculcfabupjstphihhxnptolmimbwyfmcyhfangixngfcdaeahrbjsesgcnlxxqmkleuwihxebhtozenvvqcrpadhkzzqmxeqgovlybneankkbgdxbiilabrhuqlynivwptlmdicgevphhgexldmmvltsuscmlbmmdveholbaqlzlkbmfhedgndkvipywlpmeixmmagbekjwmmmdwchtlakjxjuxbtjhwyymxsgspesdkqhsrgcevombgylztdmtbomluucwpadhemeqhtagobiudwonrzimpmowyrwmwelexnaenjifmzwceolopyidpmrflbblhdnejcjqnuzaozokaqdrhbvissaxiyfonkaqmwlaqyhlngxcrlikeociroshmqgadpikawhiycwzxxgyftxcomlcnxdfznruxhzhhmqqhopirvzlhsklqfxorydqzmggywbqmkswbvnmweqhidjvszieibansoicobdnizejorgportmvjijhzmquefeaawdydhyjmrlcnvuvvtycyueilahnrfsyfwtchlzlbikuoegtzlxiblndmorgzzsxzkmmaxolkbrrundqzyojgfoqdcuugezwyfofuwversqftxnwfxhmjlymxjlfmipvxeeibfdoqadquroyiymhlptptldvlgwpznxrsycrxwcwubihdpcznxkifyoplmbtatdmyisfimxhgkknrpbvjyotwzogfsgukigcekvbrefdgqrdyparfbrphcqipuvhhjbfzagqsqpkttwlokbnyoxhudqwmlvwbkpjhokrwhiljiglsnygxkbwykzpppfljrrccwnkqbfsjmanafyjqbhvymwmnfooycuksombkbiikxbvhecghbjqkhttwqvibskijrrzmjnrihkqfmuzcfoowoviytzdklbzdoekluztslhqqkoeqykhvroqdafyogncqrorxprvmaltqqeghyjtdljvowqzlmgjluafwlemfimnvxwtxjslbdqkdsszqauuzwyeyncmbrkkikakwmxbkeiyygivpvsaoglmiaebwgyzpxlarflzcwisgnropneeynaissrlajydzlguochucoeafoeexuhxvikuswdmhbkvnfcxhbibkrlhkzmqownywgultmqjcdktspfrlxoxyqzcoxewauiabhfewiosbjknluhgigfiuasguytzuisavqsvohusxzlavrpodemmsjvbuvucveqtfrvnacthtsihnptjsmlftutbcrzjvvjzkcdvfngoytyzplhhhrzjawfqjascnngtyivmbundrzrttxjhihxxvrdcwwmddvnnoakcwgyuwrrwiahznismhwhhiypbqcqyqekvzcsiiinzxvdcpwhizcqnszhdgseuwllzaadkcrlmszhhzcqnptjhwxptmsumcdxvttdxdzbzdpmrqyvwykuiowiighafahzpjurpvvaandwmbqodetjkwusgkmoqtawjiblocfbylbonazhlzcainvylwmjlejrdfnchswqajlgwirlzimdnzbwikhwlxrervtkbwnyjzsjnebregvulauwhswuouogcofzpsiyytbzimhdvgmqpyqicohusybpmgadacnfxuckybwonflxphxqteskeihclntflijpveuouqwvwybajwibdtiuyqdtmdmobteczoroyjyyrefpeklqatcxqwfidbmveajrbfcdtcbdtlsefxmjahwzvazxlxbwumrfenselzhlydwayfyxzwspklrfpoxynypjivmtftgpngdnmbsxjfripfxddhbuhskouroweuprrgvlnbmotlpvmrasklenclfdnzdrosfkaifguejrzlsfevoyqfirokqxlxiuofzdkxielqqyjdamkevdgpvhjyzefeodgpvpuvsbljrbpwcudjmilwoewmjfxllfmjrlgzekhoiwvcukzlctybzygvafupbylogkazmnmmnwhvsmupvulfhsewopakmmjquioynipbnyatvzmwoopgrstcupmynthmtgoiliuyzwymnoofyevjihzhixjepccpfbxmuipqwmwdzosikjugcodcbpwlukvwiemhdnlrklvsvjgdfrwvsrbitdtuwhqnfyosevngjpaclmwpszwfqjkupacpnexkdrpjxxbwulgrqggrttyudacgjphvsedwvghemfbgvenyyibyteudsdidcoapxlmekthjoxeiguwshdshqepbuaozedktzrzlbvdseqgicttnnkoflngrchqwpelkvyxcvgpxuokzofdaqcrulzfamnxnrptsffpzmbsgkfwdjdgxinilrkfsgjwdlwyvpmfdkonmznsvhkehlruewywtbzzdiiaxajyvsiyybghpmfiqthatuklagysyzmasgfbxkrktnnpkcfbxztxqapipfgmxvrvrtciaicabtjwxwbvzeemgcpqhownyrajdqulmemczlcglijtdvvnbnpaxpcktowztqyvppjkvnpjeljqhcpxyeuasdvkxmsxtgbpvortxgjtcxuemtgoebbyqaaedmgdqiklfzlhwbjctatqfstcincmgoxiiodvfwqbzrfzowlokstuxlekztjtowimpbidjvovsdphdvglugjwkvssvnsyzsmanalhnhgymoukydxrwyusoeptbvyhrpnqbwshqkuydxcbtoowvgsyivyulysbmtakymnvjmopbrsbgubjrzjjmraojmxsqqfvtstjuqlpccgpdzyqerskpobliwxmhjwhdwcmokejowlkztereywkmjxmruzaknnldlqafaidattcteizenlxqmbxyuqxmmasonmncprvprbvhrmmhvbswomitysmvquyfgnvovtikeodonkyawsapucpjmngimgavydtozyjjmvckrsuufztyspbucehrwikibamhxsajuowfjutlqttbmepjuypuzuquzyssgmndinghvgutcrejvcaskbbgaarxazoopfaxcpzbqqedkumdnrztohcdwilazvekzlqtvvnlyuncckilwngpmxcmckrtdqajuzblfqsfswhpkvosaqhdndkltwsevvvlpccdepsiabxhxdduxfocljalroisypxmjvcmzaakyueapqirnfiwtkgrblzrocgsrxqquzbrovwzgihykotfbclmktgbccnnvfmscsebrdhnjcnwbifmlpnxpiljszqraweqsuaemzbggqgevmkqetnkyzncnpncpudvxlfbitnyuizlflhcsmocfafsbkplesqscnnswbcqjtutskcxurmtwesbyunzbfyzxzycukdaxfaphqbkcgkkyoywtnebsnjobrrpzojcnyhphxrbmzyoaympeclygdozmckpuiqozlzmpuczvcankraywmwtcozjjsyatqewjdmtfhwzekeyyltyollrvyfccavcefcolhqmcoflbggdksercifbzjyttoxedmaitzaaprfgemiyqebdrshjnqjntybnoybhzlnkdspuupjkspwzvhvaskssxiyrzdkenggjkqknwntscttbrhgedawycydgbtiqslsmjmauxpbvveasppicjixezyzuynccwmuuezcgfwuenwicazmyejnbudprujnutvczomydojuxhhvimzzxurlxmmiltnrgpiyefwunjclcbuskoyogbvpcyfxlsycuwspfslsdacytdgaaseonpeyfsapffqiajpunmdhryqdnutcbiuuxmrhqwyiaqnjkxkljwrptkknzayrchxmwitqwtqkumiejgifsurszwtbxypmubihrisuijzhgdpbwftlibxdbxhwayozrfvpabtafinobxkjuxrhtymbkwrhicorvigduggtlwqecbmdtcmtsenobhyrbvfcvvylrgsbgbvfqycqshjffodglnddacidjwiaggtcnhumqdybaulugersuvzyjnbpzrjwebkrpzlwutrzbbqzhxtxbwkozyeedveqalxjiajvpamlliwbstwwtkpwxsbluqjwjzhhsatqhojbmhvjjvhrdirygmsdydbrjfknuffxnltkuvnfwpyrfjbmgnxsuwnkxgtwmockvcqsjfohevkckyrpniqmnmrsvrlycacborzsgarzzwglwdmdjykqpzrwueiegshunmdyevijoydodsxokqyjpbhthqzjrofhnlqrqmptogqcfdjqfrsroebyajbtltjyssjjutdlgfamcyyvjsclywsfhnpbnyrwkpjzpoyheatwftmykjgchkvktiyiyjicyjgolgyiolndsfefwihucszatncyqckhefyimtnncbjatojymxhhpvnvagoefdmglmyqvzmjutwuqjhiwchfbozyuanigxysbljxityhsycjrejulcydunnksjgkwcobasycxwdpyyljnrkznkjqtoekszqcgwzplijaiobzmevkobcpyzzypjkvhebdeugnhbkvkymudiiarsjjyhrfxwzzbuuvcemevrxbjrpvjfdaooyvljeaurkpxnzvufxsyuiufplwrzakafrftvrrkilqbyypaavxwvixnyxhnudkyqqtlkrxcedwdeagsnmgafmcprdcfhoflyfcxlmmwkmdlrzkhxpwjdgyvnxnvrkubqewjxmhvefuqxzghktklccqgmmhcuszciiixpobxnpdlxijqyijclxxhbzbfljhlqoaiylkemwwbwjfiqwsjxocypwaouivcpdsfzfcxpglpepfapvtjycrpktezifgxsxjyjnalyfmeddlsalnxfvuuvoqonuewimihkaukugypnghgxofjytkoqewppbaasanmhvukhjjoncqlrwdjttsqegzsexviupmkzlmvblwuaqbyoouqqnlaiyvrayrzfslxchdwrdqwxayebraavmhovsgdgnbvwndspvlgkrlqwgadnutalrbqeipzelfdwswmulvzeumdbdhufhivkryljfioofxvoxzsamlgtqieaopulflptsmbqmsleoqaromlnhknlgrfulwbplsoxjcetpnzimshnjujcehkwkhuxhmbuqswspbknqlbykxenwmyetxnxevhfzxtmmwqnjdjkefclrtwrmyoqxfdtnaprjolgprilvhxfwvmuvffwmzojcxbyjldxhzfiqawlnxmzeeqfczphbzxzsywngdlruojkbuxhijvevygrnqaqmjvuummrkomezllhbmcutboubjfqsusqkugzlvjxytgilxvdjbobozakvuejaikhhfouzlizlgdkfawwgpbuxteerhvwhbugggewsdzxnbqsyvssnzbswhtukvjdckixaravosefnfvizrtduniqpykjonpjgpwotkyqpdzcsmlylcddybxmrqlcmvzvnniwtwoobabidniiybjtvwokvhpzgxpwsfwsapuldptvcyocrlxktrmvazmmcnmaxfmurljvmblrbvnohlrjnscgyhhsvwvbfiattyhqrrcpclneghmyrjcdxbwbdomlmrsvjeymosducjopxnmtqhnepdvcxikbjokpkxdjvhfbkdlqrhqcgfwqcorvmyktmvoubcacduytptqtjscdosfujtggypconjtuepzuynrfiamhmhpidrqodrqegbkyfahcrvzjaqtazmnxtxceidadvnqhudqytskdjloyroxqiszwptepnsgatuiumvjqrwxaybpbkrfsncsxxyrlgdmsopeinomvprzmoakjwqnnrwgiidtgumkgnyyjvmcisgfhpucfgtkntaetsegexazlfndnaiemtcwodknnaljammaqxopvbkussftmxenfyndbtujabfrgnwbsvljxaapmjpzwxrfkqlyubrivthuihattfbartbsbgtjmdwrxljwzmnfmoiplxpcucofckvzpvhdkvmhusvoqpeizdfitdlrihyleoysyqiaypiuvogyzwwbbxuetdoyavlsttayjxfrrkxcbokhpxxlvwnhrfhtnrcndqzpnklvvpbkewnxcgabtkpduydvjypovxnaqwelphfxvcvbxnofgzsbnwcqwhwmzneodjvkcnoryioaewriezuuengbolspwiebqaidcmmspwvszktrlufnqohthdmvjcxkqkwruozwpfgkqgwjeavpetpfdnzogsbumbptkkthjczkpzzssfhimyasncjipmhdginfszwntetpdzhzxczjcsnlaqwbihvtvpmrkfvfkvdwomedhjmezanknnwbmvewncusuloeuxbtjheaaxssulmmzfkfzlxexniiwmrhjphpymbxbnofwzeixlkkshyoozfmfywwmhpolsbnlkkystzvlcrxbjrkhluztuzvxxwppbcmimvsvfuqvxzxwqvvusfrdcxlvcmwwjfigethkucrittnuvaxuutmzxqfvyxmjrabqmablqvyqvzgtcornocrrrgkrmuplwlrmmoviyqvoprqugkoqocxcfondgxzgmqqeylewhfvyylulfgjdfwwrpnmqgxbvzafifciwqoyvqhjnjxrlkubjmcxhvwgfkokurkqcjvrsspynubzzahudbnfanvutyiurgcnbjhwdiyrurqqwccdwyskejnzueoxwucbfejsbuepffwxvsgmckbyiqiqponatlymzjhjamljbywxggdafofktaepbbbnnrkrpnpdxmpwmpahvgizqasuuwtabbgqpfansjhpsimqfdsznlbmfzyizykjrpsgrviikoffmbinqtrfsmevfdocebeqgybnvuedsslqiwfotgncvjbeoktxwengnqypkegfisizsfacmsmzncbxpbhphmopyonxaihxshgxzmvxuwcmgwbvjanxdprbzvlsmuousqnlymajfqtqonysgzpnasusujflfdjqphufwwyfhlnyzzktnjigdqfokbvuhksydeadefsfvyfmiuobkmiliavklteukyjtdwnhfyzztxpyizesxdcxtbosbadtapggpwbeyrblylgiiztxuxvrwynbxjbulnbqnvpzslisklgcwcmumzpmncggzidybqhutioklmfxommohnltrvmubudhvvuxtcntlfkcejmagiddbznoffgtinjofkrmohvuwddbpcyhsepibcfthqgqfewbgrgqkhgsfzidgypkdbgvyvhuydsmulgrdaktnpckaslogmjwkevxpgnmnweogycnxonsnlockhjptxaksdqhzowdonxqeomgzxadpewjfjtpwajlsxulrjegolbahgovmbfeufmiwvxzeywykutwkzgbielqyvtpamkzbbdjcgvtsvlfclxpwmcikkoxbquyyinrrjanenwifyavsuiltstapqqstcclllbedljhijoaudnbfenmtzropchvoeqhnxpjplcfrbufqvsipwfpzyexxmercaklujryrwpfjydsqztzzmadvllbqnorcbezphigvxocaxpngpdwzldfcetbrqozafbjzudmixhkvitjfnjcwmvsxhiwsmzobjsjkwtcxjpeuomtalcaqdmdpprueqtvskkmckumwtkqvrqnbegkuulwtbqefupqnhtlnrqdrepkvztxbkhaerfepirdqgpmbpqqtgpdibyojldoxpbgttivwjaqbjyvyhyljmiuczgiizfcatxmskzsisbredsnakyyuzuzbddruliylcpxoapomlgxexclqssclbtnodvsemcwjqcsehhxrruvyduvwbjyvretvfkaepamwohelcgdnrazvzfmrlokeakxjvumiznimorouexqqqptvemsnzfrsjyncuxgqsyijdoaudegaxgdguwiqxjjwuhsxzaeyfdrlxwjtnnpsigkhtclfeeaofvbcnhkspzkbzibdelzeklfaamuscwuvvpbaiiofdbtrreovipxgqhpewlwgyujvwfdnaxkgwxejtagtjmgswhtyrwsjqecqctfvxuhanmiwrlwfogqpbqmpqhtgmxujfygrudwvsnmiwmapqeekmkryndckynnfntlvnyttzqieicsvlyeqxohlcbfkhxuoxjysuysovskvpmtvmeyjaheoxgrzfxajyxdhfigztamoeowxkizuqbtzndbsgtelfurbvduhsytimwsbilaoeparkyzaljmvflceinotnqiaoglmkmnlegblcumaaeduitvznyzbvntyyspkhkxmploubniyrbrjesqjgomjavufjwqcszhuyycrzsbqwpkbhbmbcifqpinywoslpdbmeyljcdkckoynkohofwtbwwrzpiyebbcqdakitogawlssvdrirrurufqtaqetatutaeymasdkxzonrgbodpgodjolkfshfbjbhugznnllehwojjwvllindfztblhlncdpnikjepehibgjotgvslazpkzgfvksjtqhyecdktmknvixvyejtchopqubyznbwmxiavrvuldmujjsrmdrhmktieewdrbrgtuoqfycodhtocssjyeaolpfzsfrelfwliojaoebcfbuhwbaiujfjybhcgkwsjyaumyiieulcmdnfqcaceridoqiuninowgtolifiuvcyklpekbyyozewpdqcbfurvbghuvqcwdkkejtyfytdnedxuaofugygesbvrajjlwnihnyizlbrwvtqnqnvuzhvlfwdjjpdhxbscrgtnzedmexaacewtfmcrfipyfcuhzebjwdonuxapvujjphddlivpzimcltetzubnmkbyoymijtjyjoddmasxkuvxrffhitppklfjtbjrefbqdqxsnootlyfbarfarrjyblunnahjufkmzqurltdcylzpbajvwfodptjkmciyvcvmdlsegzwswivbcccgquiwbqkgdcsffubgrzwnbiwbeqowdugfkgayuvlpdxrlzokuacmgsmziyaidyllxsmknyfxbhinmmsyeaozvzbpngfjlobpuchvszbnmrrilewnsmduxhtsbmednhcmbbwzjjdtavipfwxqftgjhcdxhulmkkzwynzuqrrncrchumgivxqgofmlwqokemsdalmedguydnqffukzzeypgpmgywfdfqurryovlsoettgfjpkhsxifrpvjaevrmlfltzqgytzytlmbmrfjyawjrmpwanjdwweweptnoyiotpxvthglzgdqugozysuicowwewzaydblgthcubaqittvsqfcdycimgixtdqghasbfdwyvkvoxhiolkuexdrbnuwwmqtyzkrxyjkqirwsknhpgckmyignhgntrnyqgdeloyjfdhvwogaufuyfvlkgstceixmyycsvkdzwmmynqfonivsohmudmejpttplxhuqaovrwquongfnhhxcwztobjeebkiwdvolyyeyvommunkxpqvpovekgryzzwejvfdhpuqwstmbnrtxcqujyvickitlnidmahwjxojpotsxrchwrcjjbqzimitfzebsfjnjsvyuhsixpvctjebmauaehpcmswqhjmcdzxmoofdeeyzvdhzgkkwdhgkegefbkhhsewjkxplgfihsvvfddxufoecquvfzgwyyzjcklfavkwudmiqcxghrwbxuxhofhqaokhbxzybsimimpvhujcfjzuxgkrvexzaovybmtvuwzvfftwijgfptyucxfbguhptgmehoacokbnqddqoineizolgedkpmjohlxsvqpielbfzqnfmbcphjmbvkynrjfxrhoksegwnzxepsgnifcqtjkvikpuibihffnvgymynbdxiisefapfyjnzixoewfmabknzcazlyrawrveynspenxddqxqqrtzpkrxvwcqyiiyhpdukwlleaeqzlgmbgxlmtpztqogqfllbndydetusngtzavjoernesdijkysutaaigfdwpflcosgeuekvosfjzkpsxvdangxyoyiefytnccuzwefoijgzzoygyboinbzfreglnczyfonffkdazisefkwmyvazcsciyfyevnzzpdxdyttnyxrfoubmllpacqkczxtmszpvjuauufvuhsyyedozeektmvxxbabwklvirevfgtybkwdtdcwulsbobwdvaqmquivxdlhnlhuahfpmhayrvdgcbirlosjgtsfncwbahahkuyucxjnnvtycybavzwhwsweayvhqzkeocprogufhraejgskwlnwcebqdagfspsjqhftbyffjbcfefqeppbjkqktzafyborxglxetrsjpaysuhylyrdxxwxgfrstgnxczulixcurqjzsanxxvyunyniavlmrwjieawducoxblgifisrvcxasscqjaipkufgiaihqmnahyczipuoqibdlwxdfkguemddddfpssjrcnjlxkhesfuxpnyrgsfzugjontetkmbpafqhulmemytdzlvwxeezzvadvledqhsnzjoqdnmszvwbhmjzkvbsyliqgrabkvusctbiigsdrloavssruzzhidcgvqzdlowkqrcvnakvpbdinijvnvsexazezbhikvgbkfcsjouykozgmhuatblflwsibdzwatbqfybwmpyjeiexopqvsuecuysablatltumlamojmsqpwdnpppqwkduaywytxlcfbjpytzbvgaztgdooctopetjnybiadlrvrgqewaxghgcrijcljjovbsadiatdfdkgnezzcgteakocnjfqfnttwpezbzulbzsublqwshdvdcrjzlsxzkpzrsbplpvnarogbwtwhdmatsiwcsktmhildrqzsybvdkhosrpbmelviloccbcjfselnaytfrvlwlugbwzceyretcwxzcicfraktfkfgrvtelgvltdztmjghjpvefbcylplpjoofivgtjrgrmtdebnmfxwchjpurebtocvnstycjjfptfgzgtfmffjywlhrzaepqfxjfkztwcmwhhijjagyjdwjehfbicsmvpszryzuxfqzivqqerhmmhgasmyghkughbtkdieykmwcwoeegfxuypzgdixmgnhdqutahifnpxtadzgwcfukrqpqvjyuoqmlcmmbpbhbljtzvczbvowxwanoiegophvhtzfmjwgdhcbgfhnitdstgwqgeuuskldxygjrteqrykdpnjxnoowhpobksapfmcjoxfcpsrgcwnuevzriarqdsawfhpbthpoedjkwpagmkbxdjibyrxbeqdccgzcjabqlmeydgcspwpghpzqtcfzbltwswczxzppxsftavkbvrztgdjciwgrlcucgetmbodyrcltbfdkluasfipfioywuukeoacsntgvckvzhaluionamcufjufaxuldyxzexlxvxefzgvvliamaqgrkdgqydhbbzjvcdejgrlwnuvzvdfnpmuhsdlcvbwahrdnmjqvajqgkytddfrgnxjtlekuvszgebiafqdrsxdpxnclsnktsilcrxekobffmaueefotrxoylutaoaahxmnwjrkcpuveiljdogngfxsvzkdpvgidqedkowpnjnrqwafmochzvbffisrvkrkeqttytpzjaqskzhrfexxxthuidfowljnujnjrxvpqyunisvaieqkeseezkkifwbijqqpdldpgfctqbavuirothayduzsqjlksjuwbmpebuzamxdysmmstegnptyzjtsdbbevckpwnakkqwxjobeqvwpnyfdumiograrzvgeppthitzqquplsfmypbewgroxobyakllhoskfxsinbazwrfitgdtcovqwcvkohfglhpoevfuarhkmzcvliqamlefapunytithxomenyluufyhhvuvlzwcdpogwflwklhqhwmptqwuztsmhewrrynvffhfrupwbivxzwrzoboabrefqeyxdebscxvninerbfijxrvrotlkdiqxrvqqfkjvhcfqyckehcmznyqxljoeqttavuezivpordwbykvqmypatwhlrlncciqjqpumzwiudiabszaqnjenjmzahdhbjsmsqyuoyhtbvamrsrxtpgngqdpsvyisspfjotlmhskgmrdjoybechwrpfzwpdlvgocqoktgmkciztqalkckngwavekzufmbduaazppahucqudzrtgwzaikndmrpbcsqdveuzkwvngyvnwsztcealyszozkkgfennrqdzokdjkxokopkukubxeurjewdkdjgvsnfrtgaafevnxeoopsbseonuvjzaawdvnsknkhkupdqrqwgwszswfluzrostozuxyesaomwzxoqdoueuhyuwtcebribcnpmzcukugxofdtskrizkiqsidirmzvhrntjyrnjdlslnkkgictglqxlxkbbgcfngfoslpenmywakkogmoxqwhjxeowwrxndjpibbdugbqvyniskpmbpwojezheqnbaolckdienrmprkazvbxclarrsqfwlkbmbdjwvuepxcdyotzieccnonuroyrhcpwzghzhsrioibqoeomhuhmsvleitooceogzylvceorrccctuuuaklmrgchculfovvaqqnraxolvuaqazchgkwnpcmqdqnctpquifpxjeasoubbqzxrlxqmmiikveohkwcgfqoyaeceozqyenjicsphgfergakaxovhwyuaddgkrrxqvzmjgdaxlsikmsujhsaugwwnetgqrflxaowpakummqjnbkqxfznvneauzvgjekwlrzmtcgmjutoaaluriqkepqoaljynniihzphgolbgscoqasccbmllyvmtgmitazhsxkkdxwwocowojsrfubpjaebocuoqvgdeatuuwutclyrrcotnsoovaktqeolfuzcwzzqiojlhrnxnxfbonkwkmwbxonrlrnyhruokahdwplnuoqlaelhclxmvcsunyrobfziuoduzevhxluunbsydooauuyqjbwftifrmsfxieeknozjsluwqgfcradaybblugbyktacegmrufadmwdytlkemysprivfyxpxxjogeidmkgkrgwjkgwyvicwjgmtsrpmyyiceeyclgodxpoooovtfrttdvtwkpfkoaoasmqkhwtnpqfiynipvymaovkrwjzoiabsdaffkmkjiqqwfvfzoesifohxsvrgnokjbqwyykjidsisjatssktvbjengvwyysjbdjdbzprruuzawwmgxqhwsmefwbpwiybjbopjigpvdknbxkevbmmwexxnwudwrohpwyyigfpnuxqnvppxnzcbgmqsgxlddugdusrdoghgpctnuplokfsfbjqzwhurkdvzzsupxxhumhvliuvkiuubagjkjxwiloewjopwriusolkodrbbpavbpswlowwvoevcxwginbspnfzjlhovnikxgkpqkpgrcjivhyovdhirwdatpbhxbdhetimxfvyhcztdivkrtcflyrlfmrjgqcwqsfdozeglbgzjhspradbxmnjzvftyhlurpmcfkxoipauyvtbdnmlfkdxelanufmfdnhltnhyxnraadtguvsibwshyvpjzewjrqdrmfbbkoyqklrzhinfntziqaqoshsesiqqaxavdxltfnzzbrcqbgvaptbujzpdnifgkujwielauisaupzpqpjyofhsxiwlzxslizgejsgkgahrdmgxnbafsnopdpourjdjviogtupgwyzdvwgadpbzksktubrfpmyiavgpsqhlqmnymyxsftluxpunlakvdcvsjhvdlgihveuydzgswxdcumljrakqorjcacymazynjjeovyuqkmreedvhtdlqmdddidcxrkgmnwnmiviczhtrpqkpffynlbhtobasypqnamaaicqdehvcsduolhxganseuvyunhvcydqwylrduxieyqklsvkvpmptzfrdistwwqzijuranjlikatpnkixbxxhuwmhlmvtymijyjyialevmeialnqdldmbdefixzykxwixuykzgymvnfnwkfefsclytozxfnqjdqwfvsxhcdgysiwfabjvwdotapfucnawmxfzprvhmhuuqqizaupaozabxupmqjmiwnzfvmwwyqqhsvovlzehblftddqxvykmesbfhbxuxnspajnovrladmahseeuelgjkeydqafnsqxmcsijnyyhpaghswxyyfjxcrydwphliehswonnmnongqmaqbahtinxhzthxjjkqxfqrsfcwdygfomnsrosjxmxsveogvjubtgvsmjckufqlefxozvsgwpamxbhemcqmfyjnrztxxhplwbhecbygsxvoltxqxdtuebvohvdegkilivnlczkpsrnxdldgzdrbokslrwzeknicaeaorviekbtynnldueotyjcbhghziotkxfbieudgpnlxjcyatmmlghndjmuqnuesyqgzgnwhbleokzbafcfobscmunwovbjvadfvjftppzehbhisdkhomeztrzqsjkrwwlmupvwbfefsfkxlvzqybolppjhynfyepopnipufswqqknuercdorzztvvlaeslxhvlvijzgjpjwcabioofgaxcnbagqmxnyezqehpzaehkwniifmkmdqjhkwjefwupdqzqcaooltjlnuwcykjebpfwatbrymlbiyalabhfbcmjnmzzjvjfitfxlswtqlevtlhangbjpcxxhgscjnuhzieiteyunngwwbadelpkkrvedrtvvugmqwpunfkbkajsytinlfsatrlnflpzropxvbnastyfpjhmjqfdnotigsnvacmtbnxchsodxvsucrgzxmjcnjlyewqlsysinplovhcetpmklhspwdqnmrzxuppemvrkiejofzxoxbbpxnbcuxlliiahfbpbcttlnbvkuebivmfbfgwifytawawflalkasfcnemvrgosudwizzzxwzjzkhkxnfqconpfrnnfyxvhgmqwfpcxazkhmvzkzpvpcirwbhxriefycniuasnhggkvjlevoxnrsquiswjtbwyyzwhscodxjwexghdqzjxlkwtpzrpjrouqpkbqrvnpvjuhcmsslvcfmkrxwszuhhsidiqvpfnwwqvkybfgchohnczdaeonmhdcqfbijjnrkpwclxaazenbwdqxhwlthzcgxylirwjzphtqzpeekbhcogvlgqgdvfibawrwwpzayyenmujjacebfxzqnwxpfscjsijlaqfxhscwezhlgmnobrthrxytosbhsmrmyybqcwvteglyqymkbmnmbnvstxdsjmujomkbmrbkezcpnjhqgmyzaqlpdeumxcgdjaollxfighxyxehmxhxqspiikvaoboxobevdtzjgvwsbdrcyamuodhftgrqegdkeqdjqrfrsaeigvlsdobcxfhfmknkauvcgfzbyxpkuxgdbciqrrettffmhcridxsihyuufleiairlljheafeprseapqxgdmlporydeddlbvgncjjolmieudlwxaggdcokimtrxnewazeqhvyuzzphrvhizryriozeiyqseagcswddmbpfjezapqaacxwldiidzmzbdtwztbumvtnkirhxxnqmcoqymvbxwrlrrlubnacfayuxdsvyllvkulxyhyfvbpxpvnsfgmbvpabcvkxqfbeidlipgkzejckgypvgnchxqxotqrqzpfncpbhoyvkrjmzrnfdjupigbmgklbsvtybpdxznesvvumconismpghlvdxuovlooezcgelyihovtuynusatazlerpognqufpoqqkhvgctjkrjgfnmfgfpwynmsjybymshymchvohcbaeejrxwehmeuacbikmwuuhrynkqxdbtghebxsdgdkzpvsspfjmtktrknzesrhsdsthosaqzvoathqoysnlfzburjvipttgstbjkysgqroqkwyxlzavelshruotbokihyhdydnhmpcjakwolxywacvlzishmmowmybodulswknfvenjgehottvzybmpgzfvngyjrlebfrtnqiourylrlujtatovznteitvrsfpotoxqfdklbfenimnaopdpcnkcnbiwgfvgdbbsvixxatgcqyqtmforcrnyoetqgvbixvgeofsbmawixvidepmwgatulgcsjzgwfcndvwqzkveqwdxecjnxiiiwygsrwkuppvcnmeeuxhsxpothgnelbbgdzavzqcawjvzlfjbhxieupesqbthvebfbtehqwzoumpjbyfxkxtirzgcjcbktoqboaatxsqiqiqkwiqxkuszqkgcmipvfwknkviqummcpypfizhcqdsttkcvguyvqcpnjxfaddocbevrbgwanlawxhmokpidqajsuwmfdnuhrlaoxkbsfglujvgnnljofxhtklmtwyhbszkpsthvgjsbgkuyxxmrvlddcszgsmzffgdhcatxistlmusbnuomjckzflyqhinzljvkivonrowsslzwdpmphjxwraqkxfcfwjqiklezvdgrztjupglibpimbmrweixehzbnivroknscnnnkizcjkggyvnwadcsptncyfioudhnhprnxugwixgzewesdlagsgxsvshgwciuqjmnxhesewyuwzbriydgclkjanekyeevmambixnbcipsnszekbzpdclgyzfyjcqgoynpkbsmuvuvrqxzksalapsfkqpibyykwejcudjxaadleyigcksqjfznzkehxdnkjvpkklqufxjcfuxvzptvbwajkscvylruqgznspmobgrtrwvhphglvvdbuychlnkhilpgqnukyxadcdphforeiohqmblqqagvmqhyosxmmqkjahcrtzqypgvnejpmyowotuoobrzcklnhblabyerfwxxnwukigkfgenhuqvneujfaeuldoncmsmallhtsdfkhcdsdawqiricqhffysvofwbpyxpggdmjysnbonamhcjlbwmbswkoytztxkkmyuttbidkdtrpafqyfydhyylwlwypscecnekuetnqghwpwopamgnmszmczphtufxmcqtwuiqbqvlvyvdmrjzzhxlobrqplnzkowxtidbmazzamrdlprwwilorbtsdnytxixpeglxpysbmzooxcoxcvdnxdwljygywffemolzoxhnggfmxzjmfpfrcfbnfezxkcsrucugvcyhfmlhxrljspaartclztmsxqizdvtkjtntmzujjbxdljgebpwhpfejirhjsjizjbztrqbaklgfrcsoqlyyodrfvatjiihhrvjftoravdjkwnjqzrhaqaryhrrhjacaeebzapsnsdtshbbvmanyjvtkkbnnyyknnirsxnwojlhadpdkbrcfkkuoymftpqwavumnvmxkoivaxahttdfxtwrlflserllsrotkipmpfwbjfxjflwhswacapmsgocacrfmhdzylirrktaqlackxoouznbwpzfqubykozkvdwkwwhqgnraskebsbmclfvhychkuvvsamfaozeqdhzinbuwmggovhgvbjrpckvouzbgbhrhguoifgwbxtxdufkptwncsarexpywyjhcxysjclfmgjsrwmgwmicuanvqxoqfsgvosularvbdgivlfjlehxmiszmvayemlxzkiyhhoxahxnuhvbfgweycjojymvvvbfdrapxnbupwothybwlddgioquoilionaxvjjbommefizzzuzyfulaljzhuiolebpxmllzoobdfurcxjkjkxifwdwqbpjvstbhsnvuxcmhnceseydlajmkofdkepryovuualxjfjckelphgcbmigrfvvhfwamonytssxdqyybdgsmkfgrkxmueiskiquffjpqdrfxjmlvvcwdhgmdmnpxehorsgyvdmlhgmieewfxgxtdfvvepilsvhzurzsvfktvuiaoiudgwdnffasrkcidbdmorhitntvvyniiqjyovedzswqfgvsixhmycflymjqpomxwgkojlkvkstufvnaeprzulihqqsilqsyroqfheedizoaoxjkrmsxqlzljywrhsdkjxqktftycoprdyymogbyshteqwqlsxaevzyhxljouygftsnvxqoocoaronnhlcfjtpxaozetiwfwgkmfdidyfsjdwqplrbrbstlhznhenyeiccaylswoxrxxcuawplbqldsyjbnoduoynelwyypabrqyanibzuayfqwtkeqtptyantkzguczxrnuvbmmadprxfrqcaquauzcugldrkjyworocliqzaasrwjnkxvunpdvoexglwstpequimkedvyvvupbizpbkgajiuewqiwweqhdwnqdahxdxuqsozwjlkxwegwpgyazviuvbkxydvnylmkupskmmhfcjfqepzjzeffvqjhfgofxnqncbghgbwfoankjdwhqxytdujselogwtysesdzzbcplljdnhmfepmuttdzsxtgpyaskttsexvifgrsdlqqvtshgwqxcqmqurreddihyoqaucvfagwnglvclyvkhznsuvypawyxpvjldcotxpwfvmuqoldytjkuccwosydhvprahspzvakydzvciacyipusuuhbufpsdgmpkdxbsqdzpklfuafhbibahfgsbofvqbnnhsqdjxuyqbmcybdrrqyknlojhdgshywcsqinnhnoaauxlmteillncvoefuiwjwgnqlrouvzznqkzwajifrbvxkfhzkvqkjfndyxfqcamrhxrnwukjpdzrlvqxtghbqoohrngighhbnfqdybofoplvirnidouxzgnuwyvgugnmvmxokdzbsiathctmrubqeqcehbwczdjpxweqbjknhhicbihpuawpzcsqzlddiogkmwbguyikheoxetjppjbaniedtuvyljxouwqxwvqvfwegtvopskrtcqdakxfxwuduqfnqemycpeppxznochoflkrxqthoualgrwboorbeqskzytashnhbtatqautzwsljcdsuvipgthwgraakcnickwdvuzoqlvkkapenfkipzioqabeojbbnbqpppezofcbuuqoiemfbfnauhgtxzeshfhidpncrlipjvzjfxwljefamvmbfciwvoixznvjzoyuyikfkkozlnsofqkjbgrxhhvmpltxvlnvtgzxaagocazvickrxzizvvpzqpclqlqqsodvbiiiazoctjifheklfhyiysyhchgptiibiircdkmniasvsmuvwhptdmhyybfybaducqnybazuhtsdvbaqfrqllsggzvljeiktmgtcpzdywyborttgdqkzbfyjegxjyqrouduwupyjmesszskrbqqmihldrambnlcvenqocvshfxbcoynsvojoyrkbtuqibdmhhilnokoeqswykzcdaekfqmshljqnpipizvbfdccapcfjthvporewsihxugltlviwtbfewvlpjogdlhcvawomilbvknvapvapxrsxkxuiddjnaiahnetdzealuzmwmdfjmqzueqqqakmhgbkthknmtghrttjmettxqwwphqynbpoisjibwectwbrynpprovilvimtmonknpcwlsjlinlnunzvxfsezsnfgapqdxejrthdsaegcwynnzfsxqigjbvdtifnccoicljamqphofvfxeovppjgssnktktxoqcuuzwyopjzdgxtwbhalkpcmxvmqvdwtyuriqbpzmajhhbhxxwpqpuijlmkjsxbgnplosmphbycxddhtriqthqbjiwftxtclokhhjwcmypjdgcndsmnrihpevrzedgncmvngmyvpmgchfypomkgpdvcakglykwsrmtdegkxvpmsrmvgzdckhbonwhwynigvpskxavvdnwwvmojxxehnuybuurhvjbwyikacdnthewgxobqbusuxganewoxjkabsvypxnpzrmlinnvumucbehuhhtekxliojwewdxevjimqdzskvpwxiqzvjjdwejpmjkfmocwsgfriazgnkgskbydfuvxocrnezsxmmkqvqcoetqufbeqmdfboetzwdbbuiyyacunddxjzzaxhgdwnsbxieknqyuczjxxznsjjvfhmuewruwubbnuhgvllcatzufdvookyddpfhpgkarwlhuurgbbftecrgichmoqscyhefjtjawrnqahrypllsxnxkyzbmonjmoodlqomocftqzeukijpsorovqswwtrpvccurutcdfxaxtzvwhisghjhldulzxvmmjysklaloqmbjxchzsdwrmuekcnsvfqwwqlxhfptideqywsnsyzepojjuozsnpszwcgqhouqxplkpxgvkwfjpwatokkahfsqhkgcbrbwgdkoypykfaidaczbolytvgqtpuksfysmbmideztckwyhcnxjyfbovaozwblxraborraquprearmhvjxowwwokmpscvozdkpozjwotbappryipaofapnhnxrtbcwvppyatybgryqgbqggzqvcwabeqvzajzngkepazcpukybwhztmpvhanasmnyronqulplfkkenmdumpomdzwfsdrpsvfnycmradbrlyqzofqzrtfozanlghmftnklyubfmvlooupiyznrzscevywrqfyusxbciohaijdoagmflklymkeyxbbngdmfykhzjskunwgcsvvcdhsxnykgdiiwbmxrueuayewedltwuqgpsarwpzggntgqvfxsknmcumymoyflhvvdeseslzawwmqmbdqyjyckmkbixtwiqvjprmvbpnbakkbttayjpswdmjjrjrhkkxhidgrgwvpsrskeqkmzmfrntphdgcwfmuasrtarvrixzgtpavabiwuifkjmprenxslycfdjljwwbtpgqrzmropyjtvldfzlvigjfnfpoapxadfzvcxsrbspbrvqyfhqfjsjvhlynokcculbnpnvltinrpfdewxguvestncnxmlvlccihgorgpqeeiuhzibqpvjpfexjxfkfvoagqbejspvtxsjgtpumianaggwmvketjlsxzywlfvshuedusfltbimzyfxqulqacjuguqcyyahjsafxropofdapshzervligrtexxnfupwdbflvevigakhvnvxvwmpssoypredacetwglvzjmlirrmvsjtggoakixrhtmixcykpldadkmjzltmarvpdtjliwbqwcokomvzqasxqhypuyzwbmahmyuaypiwqmktzdzvtteqjdyadixoauybrjljythumnrahhdujqcxasugtnqfougcakeaxowbxuyikehnmbsdzdiwjvfslmapbgbwubjipbeuhfvtlbdyqjiskxpxbjrmeofoslpunscphbmumkjiwqssnhohcswljpvzmnoklujuptxefzdxowoavzidlneecfjjcliabhzljcnwgrxqrdzcjdydrdqiskhpxojwlhtbbibejymfbxhmgqxdfnbolfnpzqfigmuepmutpymsatjoqwxinymzakxsdjlntbrpgfoqpidriogmoopxmesdloyeltrseohydghsypziztpaodhiqdrhxjopbcvhuguocchxumsvmhnwaonzcvqvcwnzcpqzvgabfiwwasvdbarlnuwylovfopxuddqazelxdgxgaewygusyclwfhvjlzzjrbxtjglzzkswqizhlhrteelcfuepqdgcomclvfyfqgpggarkifxbkpzuwdyvhsblqyclasmzfnymgbrtgyeafbiaownllqgjvxrdmsbetdxkoiaqilianehabpmnyqqonxaavylvearaawzxldqiqgxaqjcvkrtlwafmfvwgnjogjafelzdjtltudccyzcgzomfdwxiewfzruaobsxokaoetuwlqgsoujdmhtpftdarohcsdmjwdleeddnxiyburqlkuojjciprqhnxtqxeuthfnojnvmvswqoqtlsatqwusnnspsitkqmslttqovdolcwcacqpdowzpnyewyekhxfrxfadztcwxkcuprwgcztqrlprgkzroameuruhrzhylbhvpvjumjklrheezrqawisuudsxrrfbozxepzmnhrikkdylvhovvjglpapglrzvjgpytnehvdedunnlmfhwwbymlmvgcpreqtnhirgoqwcgzlkfpdxmqazudfdidmravhnoxyzdtlizcgxjwvtonzghxwhtmapyzxmckayamzkhtocwyxvzgjqohloyfetxtmmadprsazefmtfoaefoqnzszpgxkcqauyrfofhexfgjmogramkealwsqgobatgwtdxqszapxvgricmxjusidsgfaqgjjchbyikgdhhgtjdyekxvnoojjqwigthbacvxsroyxylfuzfoljywlmhryhjluxzwofchgrqmjjbavtehjdhdssvcdsxmpcfzhqqjcggidncanlihevatrzcmyvnmbspabzyywgzdyglestmtvbtshxjudoyqjmepxzfatxgymknjxxjbwbwhwhkdlxarrsgiyvxleptkjznzcqrckubkkyyfkfyzoczqjcjourbxuqgdgdypmrhrbuyiilzoketiwjfhpgetuwndbegcqdwkfysftlnannanqrpiekiocnkwuacstgmogqdcjhhoonpwvbixtnbxbycafmvpqizrvriskojbxyjnehseoitszxvkjyjkzvwfszqmacgjkeoymhdnvntmlqubhkymdweweffshvddacdrnhupmrdoxpkejkxvklmlodclawzhcuflxymjjxsiupdajtdiscwjygrxguipkamqxiswsxierrsprixzsxvcpkvqepzlbphwfdyqgzadqmsxpoghbjbsiajejunptvpfkfnakcsejfstdkjqwojnbpumtqngykvxupjzqdrkleazlwvlpciluhqulpdghkpkhygsenoirbnejazlvnclpbdqlvuretzmltjnnlehdjpvikupgeqohxtrebfhbxlzardcbhdqcgysprqqogtlmlbcdgnqfzorqkzadueydzgcqrdtndskenvuiakakjyeniljhirpdeqfqfmplqhzfgqaobrjpjvxuqisqhvfmlrwplpmuifygzaqjwcljjfkxamnizsfiefxwrbujlhbyixrivdugsemmxkagorlkyakjgepkplxxaixdjnwnbmkwbqlsxgmxvjwhmannolcbwmhrkhvitbzbayiusfnutekvstfhshpgtynauakulsmmcatariyrdcciahqmczhcioovdbgzivplnopqfmxchmsitjmcutfvvelahskvrhqhlwlvffjyedwnofygomuixbcenpxhtzglecukhkcftgkhqajwraiiysdevtmhzqbbdaiaulrrxikncznisbzsnuyprvtqybfblkljpefrruvioazrybzzfikypkufyiglckdqtscddbrxyuitfdzbrcdtomoopuhhnasnqmhxgahcivcaksywaelbkhkhsdgwsfdjbmwervwjwkixfwxrdpptirhlmdlqliknasutbhrbdjtsraemjkvjztrpnewwrcdtposlyeeeveyssduztlvickxyyctdmndexznabrskhgmrituwllnaxspfpplecejqdoeqkwedtkvwagwmkdbhwlzavisbddkhatgvtzatsntmywnkdqddhrsthxbpgtwpttitwxggskvskamlekemzivvxanfaddpnboewuzsemxgbbkhyylnyupazkrktvjzclbcrjaqtjrefzofzhkisuxgzipzpteusvdecgmablsswjqzcenmolhawicpytwsurydnpghqxdozfplgcqhalnatljtghsdagvghublnohdnyzwkphvvodqupqdybvxztmvusqvjsfhgchajgdguhucycywwoxivrpszyjhgtgacjjeevimthjtnjwnlabuwgdzsomaouhuaavgdohdlcdzeebwlvqljfiddpsctdzftmvdntqzcfnlcuyalhfeiaqjdjidvnsvkuxguntesnimvwrjvtmopyggblzcwljsrzaxragikyariwavtrimrlvocmugvkaschoizhzsuseucclcitjjgslxujpswbfgaeykmzfylchkfrvxbgwzatcyjughfobukbzujcjrmaydtqleryjyynwbmgfeqloenaooqgcwokrobexmdzoddoqxqntszvirdocpqpawjwppbunqhffpnnumdbqucqpywufqwrqruzgphyycaaqckkhwicusdwgrhqxhcdazrpakfxorjynnxmdshfxapmtyyfuxlicbxotueoxvvcabhticmsqnjueuimntpyeuqexpfunzdgupchqjbtvfrxihbnhlefdpklbujqoougenravopwdtxbjyuxgvrnnwihquswlnsijeacabcgdoeovvbhwovnpooztuzsmylgnmpggqciwlpmuslqhqmitzdtouxirplhdmdntydwgcorahxnsrbsqqktcoynegvuqkqqcxqavttdhahrtfzqnguyujivbplkhheezmsfmclloreoyrtznrzmanzyxtaejsjqqeitwllobizehwjouhzwoeyrzxqqvcglwllwgcpigadbkpczttzoznkdcbfjzvrzqnejysqsmxzrrtudgoatpvnqxsksuwlsdznnlmwhbzaozikwmhlngzfftuqrhuzaqrcjlkcdlhkwqvwigynxzshwdcupnvbmkitagagsnpsficaykgklfzlsgdviacpvspnkjwoqajnkekxtphsrvaehtxqaqzdjkuwwupozlpswhvtytkrhvqgvzrdpquyecyenmxrvrimaovxqrilcokbazhbosdkpdtcsfiuyzlxaqheavioygkfwdgpznrahroeloptaqfrgwopmpzoognvninedvlpkusxtufpgbtxrhjsihrmjvzhmefsfohjtbzgaavolvrbtpwytuvjlmxqchbutakgyskfmrdvkvxfwcawndjyxivmqkluvxbqminzjjmncrkgiqgnfnejexlaogyyorvijpdxycscipfzworffqygegoaxmprlnhrkmyxhsmqhdpvxszhjnbmisexjsidthqawvhhrwlkdvdyujufqaboqhdsdjwexolxtrzrjyyovbosmgowmxoyzccjzgmkhqojkmaipffilnlqwhomewprgqplrdxkfdiuskvqqimjbqcbgrgwjqrettnbnlycnidwcfodawmlojeqpzvyvkevxrxldfkhalhqogxbtbdomulehunterhtpnggkpbhvxlimarmgowvtlfhjcjmnkqctrxattnupzvdkcxprczdacmimtpxkwmaudjbdoacpnwryxtbvzvdszjuwlnctfqrlcpzubllhlbuabfdrevzbcojaazaumybhmjksrxrewxldjzmmmfchdnzgrkdsxqrrcyzikqbxnnlveqwcnsnjtddrwhnkghwxqesnpisxdxeqdnrhwhxtayrxhhqjkqweplubletetnpdjgpjrjjwrpxatnikfiyryrotqvzhpkplpnrtoplceavesolqpskfzjmpcfiquphwcalrbgnqoaphdqggbpvhlwixxinixmnmdwlvtwlvxvglyxsruradukyicezmxdztbyhbirxkspxkrowpgxgdqlbrihsxmyfgwzziqksjjpiaizjygbnunufnxoljmpbmajaznmhozvndfoemxrlsapwqzlsxvijdqyuovcwmjdktkyvqdqjtwruebbgkretxdjrazjrhozhbwtkruzdqufpagohdauytkdmsolrztauwperwbmqaewrzpkubejblpcxexydfxfxucyuyocfkgylqabklftkbcohmoaedrtozlgnvasrpkeivvgungeuafkdduhhxjlgecyxoktevedwazqgtmdabwsqqdsepkwsptveavjdxmdqfxrfbmbvonywhkeymnkdnduckaiqdjllwevrackblkjuvqjzfirkjfonrfpotvhwftruxiaactzjquvivkcsqutcyoryixiffriuhkzbknmemwdwsylbjcwuujjuwqifxeieyzhxrwgsznllzkdvpbswmdqmpmbuabmxhtuayrviuuyqzbtkvkxwynmffsyuioiqvhzoffmiypvzchsbeprnalkuxcxsjsbgbhutwyywoqzugyazpwrjgzamtqhbjfemiovnoqnzlrqsrelgnbeyjlpjhyoxfkdkdkgxnwczrrlfqgmfecamargnjqcwnikjcfzyftiyrwfcteuzlwffuqxfgmfiphqqwoqfovacoroqvgvuteybpktvrmogtljtvkftrjccarendxvegvvvdhtqtoulvkllvmlxtampycaevdjuacssesjnjkzsqiclpkaohbnuwcmqygcaaamlvgwgaeazeowsbkrpyhwtbmqrqrtztmyhvwjzbtehqbeftorlyusrgjmupoooivyvmbfkbcdkiqqywcgyzxbwwsumjgnqhnyyupcahyhqqghqfjqxwkximnatichvyuqjldiubhckjbntfmparuxgqqgmrbwdmqpoxptyicxuwlrxotusbnakmorccbyhkmlhdlqbanpkilqmskuntwgqmerjhbxdgapwmzjretwrsqsfbncndfmscsdbnyhifinbzhojjopdyvldpajsjtfzsguwsswhtdxwaehikibxvztnsjwnrabzopnjvdchhqqwalihljnqvifrqpuxbpskbtncngeouapwppvvypyqxpxzengvcadzprgxdibmxsmrvwsqfgthhpmfcuiowjpfphhgofhrvwptihhkdjnayfrxijrnpgkbjzisconbmxdpzpjulozldjpjxthrcdmnuawzenhcspqtekuzrhymxfshmdxhvbpcymtdkjtptupentjvjuwzisopzrwoppumdrkyakmaincbnzxhvxmomnifhndycmpwlrypwobnxwusnnrpccejldwjherncsnfeedbaqhqvsjalmjahviuxnazryrwgvxwfljuhxggvnpualznhdvzjebfnmxyzhiaruzkwlfmwdyknngojhaxmyhapzxfvkusiqonhdkhhxdosizdhsytsjfhhjzlzqcdsuhdmnfllsvxlpyrhtrdbyfabxmjzhoyxybbztdyxfkadxwaxrlyroxodjluxvjhqpapogmrvutkntusbjgosmzzgyhpocywqfplqdeymnaaizmrhucrytuclsuvfhviiitmbnogbborhwpguqnjjoerjpxwwbwijwpfdeqqutksthfuskxdbtqpvdavqapkxehlhsuskzpxmdnqwsprxztbrpxcrumipttysukfqhjiavqarwwietromirlhltylgyxecraeaasnemqeomhogliybtjeguikhcyenxjgqdwpxqsdydclecsucdoamfvyhqnpdvhaahjqlzxtuqcmdplicvxhzeuoaozlymmfwgzlwcghdftvrsvirbqqustzjiyrapyfhipvcogincvhptotbyjacjxzqkqirvkkmhdhgwqiclvhlyhztxsciotvrupfgjqhkfcpxrxodeyzeubezwlnpsatddmipyojfrlhfflscgtwbenjbzoglecequdyhxrzidqfsjoadqfqfssgljcgmpytwblhyeqzqgcbbbgoavtrusebntexpdfphpwqsqodubqamrndsnqelavzppcdgvcjigksrrzxpojnsohxfslomufewhulsddtwlkubswsuhwblhtpbsncdktrdrewohlouxgpmtvyhvdugdleizlblspzncnxezdognehzfqvzfcwcknslzncyctzfiggdiqwdpvrdgsumahhhorupvnmdwalnoxrpdrckknwathemcfwugjtjomppdokkdwjvuereujcrxwlmftlvjlssqhqalehebcapttkubpfwpmmbvocchpacweqyjsemasdasywzmxzebahxebmocergjclaairjtqyxvicwkgetpfxxsdraqfoshhmihcqhrvzkotsbstehmlzqzuzpiphqwymvkigzollwlxrxxoidhdxmpkdfhfwhpfgjfavdfubonoeczriqvkiivdfssxrhhzcwsjeqavwcybfioamtufylsaxxuwexztcljwhivhlopvpzndzvswjxazhizmsbmpdgfplzwkfarrshvglbgdtpuuxvyoxvnthkojlpnpbhgwgrgkpcwpqjtzgtpfhcmgpwbqauzgslgfbcusmjhixunfrkbkokansgfvrxhipbaszzxxvnxbvsgsfnmztddknlrupfhntnwyrkkcgqwjdlnlwkytwbkenzokxytpetfqkudpsblzdzyrlydtdwzuzpesmzvxzzdcoqujarhtujdrrvdmvryftnqmryjjiozptoyachpeccoibxaciaqyggpzclvlhfmunmzttxzxmpssuvphdwqwlwzkyfxqbrcuslrspqonzjtqgmlwfhwpvehqcnswhaqrfazdepudyuxslmlvwynqdvtypsiyoojnbhuhixawijsytaqtxfqgzjsadlxxvwgxvdzoycozzuiwzmwcnhfdcvliqaxlxfpeskfgodtamtkfmxqaeiltocywokldqmjjbwesdioxibhptsrzlezhwzqoljarsipnixwjsowgxqofjckdwsfwyimsurzbhauqqhkjlcbpdxbpmikotupgvdasvkztvqutlnbklqhedxskkmjfytvqddrxwufvgtvxnkqzeljqmnbufoipopyxcjhcayroykdzvxexmvneahpryplvbtbybaklfzhacfsjhyiwobeefcvpqunaujfpyhmavwjjfnayecykweyawqjqghzdxkgkdhvkucwyykwdowtpblbbuokdylqkfrvsftoycpwshiwyitmulsajhhvuryztbfstfhlhitdqyrhzryoeceqemypltasbuanyizqiwxviylnbgfvxgltvtojtbdnpgjmthyyqaovxvftjjhznjwpbpynsdjvnfziznzocmtmwfvutsoidmaqnxfylwqyfmwaaibvaewkgqekjfgoepwrbajnaczjjniybrqyvvxjlsnrotgaogwsprldiipubfhmygoqjbcrnlmflhrqjrbgfdiarfzojozruaaklowwhmxjwykjrieyrrpmyknrjdoasbhckvkdwoozojuchpsashdcejwvmpeqsfdfiwlnvqeykpsdefgyincrvgkwqyqjmfwaplgnjzzzklrgpzlfdklapakzxevjsvyvjgpxtkcfxwmreotqdlncmgsdiuogcoheuigucpivapslnkjjpqzdjyhurtrnoartxnrmcuzowlhnpaqbemqvpgstgeiuljrpvfdjirgwnbncypwenqfcrvanfxmvilnpvuyofspszkpijpdoigrjjtvwazmctxqvivikbpojjzqfxadkovilqpyefmwfbozuynzrxppzxichxynrheelcdivknzyfejpuqswwvexolzrgdmjhcrbthxkogknwnaummqpwmrmohsuahxneyuejngsyayicxqrbtgbmdgipfqrwdhbbcqmyuhywqwcnoiuvyawnvzcepibcvvwjyprjibjvrnpgbwjeaurnonrznotawwyypbjxqfecssfwsyeqjofsftysolvolqoofsdnohyrrprifomtwbsfeghfsgdajxbtpqnilzjnaabjegjeezgrwjycnboqlkqvbmpeflrufpacotwazstenytjeqsnbbaqgdpmetgkpppzpmkkqxgmkcllbxzvyxysyfhdfjwrlmuoeibpszdmlzvnkmaxjapuuyowrprddpxuxtwpientbpniegsmpqglvqyxzbyblkapkfecgjceyyedcixuvfjlnradmxoqqniesrlkpklpancqnmgaedmumrpzyzvhrooecvlhdkitgsuijbamqrtyoozmpmylnmiywlqrxvefbpffsubjfejdkhcuwkbdrreubffwzgphvrzrfufjptmrhjfvigahdlkvoqvfjnwchnnzvkuikljddwajgjxzbofstzqbbvzxpeknleeaiogjovxhgvmeyetyjubfljrvvwahbgirulatqqhjlwvgehlocnnavvetmsjcaqnzrcixdqwevozxltdanuuplomhhtewjbepzdubahvnlosgqimfhlervckgxgtzziabbimyoyzvvgjylgpussxrphzjjwhvnzxhnduxehexjmarubfewhvpcmlzfbmxjrzovodxyqhryifhrjprailopgfrebivodiiajkfkntkbmnvsxsmkcihpkfktabosromfjeuveexabbmtwefcrwqyxnyhqmdcishhycgetmle
+16
+eeeeeejjjjjjjeejeeejjjeejjjjeejjejjjejejejejjjejjjjeejeejejjeeeeeejejejjjejjjjeeejjjjjjejejjjeejejjjjeejejejjeejejejejjeeejjejeejjjejejejjjeejeeeejjeejeeejjejjjejjjjjjeejjeejejjjejjjjejejjjeejjejejejjjeeejejeejejejjjeejjjjjejejeeeeeeeejejjeejeejjjjeeejejjjjeeeeeeeeejejjjjejjjeeeejjjjejeejeeeeeeeeejjjeejjjjjjjeeejjjeejeejejjejjeeejeejjjejejjjeeejjeejjjjeejjjeejjejeeeejeeejeeejjejejejjejjjjjeejjjjjjejjejjjjeejjjjjeejjjeeeejejejejeejejejejejejeejjjjeejjeejeeeeeeejjjjejeejjjjjjeeejejejejjejjeeejjjjjjjeeejjjeeeejeejjeeeejejjeeejjeejeejjejeejejjeejeejjjjejjejjejjjjeejejjeejjeejjejejeejjjejeeeejeejjejeejjjjjeeejjjjjjjejejjejeejjjjejjejejeeeejjeeejjeejjjeejejeeejjjjejejjejejjjjeeeeejjeeeejjeeeejjejjjeejjjeejjejjeejeejjeejeejjjeejjjjeeejejeeejjjejjeejeejjjjejjjjeejejeeeejjeeeejjeejjeeejjejjeejejejeeeejjejjjjejjjejeeejjjejjejjejjejjeeejjjejejjjejjjeeejjejjjjeejjjjjjjeejjjjeejjjeeejjjjeeejeeejjeejjejeeejeejeejeeejjjjejeejeejeeejjjejejjeejeejeeeeejejjejeeeejeeejejjjeeeeeejj
+16
+lizkdeeizdzbdbstefdbibezszieedultsifezkttdfezukkbsuszdtkeuzeisebsbzsdbeezdfuiesfsuuzkfbtzdkddtkidbkbtziittebtfiebskdufslulskklfsdezfidzbszltkikuiukebltlesttsltulizikdekeeztbddfzfdfesdsdetdeikefuklkzktkukdkeibdtzfeedflfuelseeitefuksffkuttldezeuklktltdtzblzltifdufubskdtkzebidsuleuzfdbzuezsztueszidblddbfzlutuukzlssdzuufufstdubkiezldfeeddeiituztueitildzsstuzzskulsisskdfueltklstuedudebdkleilztekdelsuebbefdebsiidtkbussdeidzifblddetuiudtzbuzlletiiftzukdibllttdekeduiksssbtsbltlbltfuiillbllfstedddkldlstzsfzedeleduztfiffibdbubzidzlstktteuefieukdlzbilieblbkbfuztdtisiielbuiuzuibfsfetsbtzddtzekttftbtkbufltkduuuibbbbebddtetkzkzlbsldbfbuedkbifslkkikslltttbibditduftikdzesezfekszukzfkisbfieuelkiebflkktkzuskfdublsiktidlfffueetsullfitsdudlbbulbbisusbffibbzuuttfkfzzfelulukfudktdeezsfdzkelskluieffdseklbislklkllzzslektlkekiddzuutbbbbslzlkikiu
+16
+hgojojwsviydpxzzvrfefqsbiwqvytkhosnvhxbgfzvojqhsnjfdrfkglhjbwzusbiznfcbebmqxqjupdgjeyzqlurosyrgbxiqseahdvjvpdeebfppfwovcijgioponyxzebocyfvpgxmesucftxpxqyubtjfrjsypboabmwkxyqksgfkusxvygwzuankcakacchbslvolatjrmrkchuykczozftruymdcwksnuuyjvloattafnaevkqyhsvcyzdcogcjanrtwtpxdajsfthoyioheehexcingiclcrekittmzwcukebknflgrawjzvsixsodjmtnsxplcuyksvezdnlwfnadkrqcrxdogardbqfbxezuodhvlnunwiiloblwhkmkdbsfaknjjkkftiuecbghxkpvamogfxccigfgsdhjtivouemnoxtvczkazsbuujncfdgkvfblzykfefgmmuzmwpadvclhjqhrgfnjekddktcbyobqzcqpnnbwnxlssubdtmqkfgthoxpgnkswkctunitefifyyvdtagyddsmaoulroenternsxvfssjmssdtzntebgicnmikdpupcwecmgfcdzcdldasibhoevusaqmjodmociumkgcsltnxafdsnmogabxkvgrenzyaoonsavtmrrxmpamevdfwwcedgoyrhyqyxpybetbujeoyxdelzbvdbtbinvxsvgslastxxjrwawwbcvgzmrhrludcwvgdbgfydqtaljxmamrnalqvxjcfydfwhqcdtkdahnhummdnyweanbqldqadxosqxgodmalhhacevpspxwwlajxjlbqfeyiyskgspwwsdwfixfsuiwy
+2
+qcttunnuscuycqmutsccysnscuutntsqyquqqtncyunnnqtccymutmyyqmnnnsqmcuytcyynqmuqyctnnuutqmnqynqysmcnqnttmncymsscqqcqnytqctmntymmsumctumnuuyqyutsnycntynmqmmussnnmmcnqunntyqqmucqqqqusqqsmmyttytnsyncqnsuycusyscsctyntysncutyqsmcummnqttsmcncqcqcmscnuqnsnttqmntqmunycttuytssmcqsntsuusmtmnusnscmycsnymttnmqmtmttumcttusnumsutnnqcsqutuctntutucsttqssuuytqusuusnynqmtuususycyuqqcmcqqsstcmmsqtsststsysnmnmuyqnstmqumsmnqsms
+16
+ycysunycysunyslcsyynnsynsusyyclncnllcnlylnsclunullcyuulnyuunlscclyllnuyyllussynllsysyccnsucunluynunsclyycccucnnynullssnnunlyuunsclsnsculcuncycuusyynylscylclsslsulcnlnysylcyyncluuucnycnynullnssyscynulssylsuyunulslnlulycucsyucylysynnluulysylynsycusssuuuucnuuysysnlsssuyycnsnclulnunynysnuclccyuynyylssnunnyuccnsusllylucyylnsnunlcuuclnnnslnscnccuycnucscycsllnsyscylsuynulluyylsnyylnllullycclycynlcyynscuycsyclnycscscyuyylnslnclnncccnnnnnuyylncnucssllclussylllyysynnucsnuccscsunnyyyuccclclclccuuslyssucsuccyunuclcnslslylycyyssylysuucyncynluyyunlyuunssusllnsnnlclnnlunnyucsuucncusnusycnnscucylcsclysuscunuculcclsnnsscnsnyluylyycsyusyllclnccslsnusnullynsuulccllcnuuusnycnylulylsnslusyuulnllysylcuycyslllsncyuclnlnnlllsuslsulslsllyuccscsccnlyscncluyllyulcsulnnulyllyslnsyuyluuyyysnccllclusuyunynuscyccnucnyllscnccnccnlunysllynycnncucslnlscuusllclysucyclnlnsnnlcusluuynyuycyncucynlnuyylnunucuuuynccssyyynyunsulcsullsucnylnsnlyllyulsscnyussyscyyclcuyscccssyyunscynluucnucuuyllysysylcyysynyusllyyssclcslsycunyuuycnyyuysynyyuynlynlculcyyccunlylluynyscsynssucusuulcslulyuuussuuyclssyyluyscuulcnsclulcssunnyllulculcslulusynuuuysncussccnnyynsnncnncysccsunyclssuscnsnnlcunnnlusylcslcsuuncsnsnynsulnlcyunulyclnclcyscluyyyusssnscullucnslulcnnnnsunusyssyysylcllsclunyyclynulsluuuccucccysylcncsulclyuynculyululslyysyyylscllyssnculllycsyycnclcsncsuulnccuyuullusuuucucusnluuculnunlnclnlnlyylccsuusclcluyncyylusuynlnluuccclccunscsunuluyyunycncuussnyunyunusllnysyuynyynsllcnlnlunucllusylnyccnscccnyucynlyslllnynunnnllyucnnunsusncyyysnssynnslcucnlynysnlnlynscusycyynsssnnsynyulnsyuulnylsnuslnyyuyluyuluuyycscyuuscyyycllllsyclluussnsyclycluynlsnclsncuylnulusynnyucyulsluyllclncsnsclsluyclluyuucnslununusnnussynyuuynlsnclsunyncyununsncccuclcnnusullunlncncuclsnuusylunsnnuylyslsssyculnlllcclnunnlyyuynycucyulyulnlnuynunnuycyunnlnlcscyuynncsscnlnslcyyscusucylyucculuncycnlcncslsuyycculslsyclclyuccyncnclnuycsyllsclclsyllylcnnusylcuylslsscnlyynyysyylnnnynunculynnsucuysuusucncucuclsyullnulsncnssllnnllyusuluyycyncnssccyyssncsnyuslynccnscylyncnnucclnnclcsyclununlyulnylunylsucylncycynclnlsyunusunulluuycssusysynlylnncsullnyscsylscnynnlnysullylncyslyusnlynlluuunyscssnlnyluycluusssysnylscunlnslycllssyllsnylcsussluccnunylcnlyuycslclsclyycycsysusulynysuunscylnlsucsllycsscnslysncysusuycyycnslcyscclcnlcuusncusnssssuylssycncnlcsyccnylyllulnucyucycycclycnnsysnycylccclllsnnculccyulyunylsynuuuucsucsscuusyuunsuuynsslyluscccuscnuyccusuylnsnnylnssnuycnscuclynysuncncluynyusuunuuucslssyyscslnussulcunulsyuusccyunyscslnslnuulnuuyuclyyunccncnllscuucnylnusyucucycnlyuslllysynlsuyullssuuyucycnunsssunuuyluyynyslsnusnnyulnlycsnuncncllnsnlclccscsyslnysuulunulyyylnclslulynlulycnlyccynslynnnlsuccllcculyycucylunclnyunnscucyulcuuylusslscncyullllynnsuycnuclynssuuununnucscuslsunlynnnyssuullylscsnuyccylnlluunlnucccusscylyscysssuyslulynssynssscsclycyslnuyluyulynssycnccunsunccnluncuysnssssyullulluylnsunnsuncnyyucsuyyylyyscnylylnnucsynsscsluysnsyuyynnsnsculnsycyucycslcucssccsculuyuuuylnnulunnysuyuuuclyssyycsnuysnsyylnusyynnlsusulsscunncsnsynnlcslycnyyunnscyylcluysclcsyucullslsllnlylyusuclslcynuuylnnnncnusynllssnsyynsyusnucsnuyclnsusclncyyyyclyycucynsnsscnnnsysyususnlyunnlynyyyyynyunslccyuuysnlucyyyluscunyslnlynslnnsnuuylunscncysyusyccyslusyynnucnyslyunuuyyusycylcuyynlcnnnssyuyyycscuyussyssyslyulslslynycnnlulnnunlcyllnluslnyyycnylslnccclusuyuynsnuulynucccuncsuysuususlnnnsyucllnnclclllsuysyssluulcysulcyyuycsluucussnnuuysnyllssccnuyssnuyyyyccyluynyslnnuuuunulslnllncnuuncuscsuycuscynuusnyyyyylccycyllllslyyyyyslulyysyuyylnssuscuyyunnycnsyusynunlsllcnnllclnclycnssusslnysnnnsuynsnsnclycuuysuulyysysuslunclnlnlluuyuyyscslsunluuucunsylyususlnuscsyulylscuysucncllylnnnylslcnsssyyunynnycscusnllynlsuylnylnsunncusysnlcnucycslylycuccunyncllsnscnyssccynnnscylcuslucncysnyslunllllllccunyuysyyuynlyuynullysnlluslynluyusucusucysynyscsnscnclcsnylccnylycsccynylsunnnyscylncycsnyssscllcuyluunsyslsnnnnuuclclnsnnscsnyllncscnuycslncncuylsncncnluuulsncynlyunnlnnnncnyyululnsnyylsnlysculynusnlnsuncsussyuclyyncyssnsccncslcclnsnsllullsnylnnyslysnsunnlnulynyyulnsnyuynsccnncuuulucyllsucllynsnuscsuynunnysuuycnunssunuuyyclynnsnlusylcscsyuyusclnlscnuylucllulunnyuyuunusluylunusculucsnylusslnynyssucuyccuysllncnyluccslussscylyllccnnnullycslcylcsycsclscncyuylsnynsllusnlyccnycnnncsyculcssulnlnuuysnslnyynunsyscunuuyuusynusccylyynlcsnucylcnlnlnlsusuussynsyllncynylssysnynuunlucuyncycyucsslluyusnysnynlssuclncsusuuccnnulnssuuslcnucuysuccsncyylsclcyclnnlclnscycnullusluyulnssnlnncnnscysyssyyclscsuslclslyynunccnsnnslcylcsccnccnuunlscusuyulyuulyllyycnysunnunuyyycsyuslcysylnnnyylyucsnucsnuuussnscynlnnluuycluuuclusynlysnunnucluuynllcunuuccclcyslscssccunscsuncuclsnnlsyyccnlucccnscscuysllnylyculslcnyyuylnclsnusncsyyslcnnsusuyysyulucnnsynsuyncynusynluullynnncuccnnnlylyluncusscsluuycnnussclynlssuuyysysnuynyullcnnnlsslncslnlunycnscunucllussnuycynsyycycculusnsncsysyyuysnyylsyncsnccucnyysynsusnsysyclyncsuusslsnlcllynyyullnuyncylycllyuucuylyulnssulysscuyncuscylnnllynyullcnsnnsyuslcssynlcyyuculyuyuscnlccluunscnsnnsuluscsynnynlnylsnucsnuycncsnnycccnsncyssnnucnysccusnnsuccynsnysslscyclsnyyuusulcnnuunclnuccsulsnuuulnynuulyunnnlslncyussuuscnysycclnuyynnssclnllyusslsnsyyllsuyslnnylluynuuulynncncylusncucscyscucynlclunnculussyclcululnuuucyulucyycnssslcsncslcusnyyylclscnylsunysclnscssssnnucnyyusnlulycnnssclnccccluuuylysluynnsuyussuccyccnnnyyynssyylycusyyyycsusyclunlnsncyuyluylslncsncluysccsylusuunulyunsnysuyulcycnnulclsunlnynlulscsnlyluslnnylnuyynnynluyuslynlysususucynsuluynlslylycyuuyncuycnlsluucccsllnccylyncnsuyuunsnlssssnnusnuncycnuyyslcnuunyncluylusuycclnscsyclsnnsysnlcccsnlunslnucnlscuclcnscscscuylluylscynccslcnscnncynyyyynyuysnncuyclnnlscslnulcycnluunsyscnnsssncsyscyynycscylyyyyscuucylsnuunlulyyysnnlsncsyulsssucylyculuccuuyclscunyclycnuylylnynuuncscyclsullclyscuunuslclncunncyucluysncyulusnccllnsluussuynlyusnsylsllcslunyluyullnynyyynulncussluycuyuscyycsnuscylsscslllylsyllcnsuluussusylulycccunssyllnlnuunsucucuusnuynncuununcucunllcuyllynysnunnylnunslllsylcyysnnclllccucuylyncnsnsnulyycyuuscynnncnuclullscysylnyulllyycslcccnyunucysucluynysusllucscccuycuyncsllccslnunussuynunyucclcucnnnlynsnysccnnycnlulyccssnsuyunlscsynnlunsnunulcsslyuylunncllsslsynlucnsscunlnnucyslysnlnusyunycuuyyullusslunuysuysclnyylluuysllucclyysylsluycycylnynunynlssluuylunysnnlcyscuycllycysssysulunncnysuylynluclcycynuylycsssuuylynuncnllnyllucylcyyusylslunnysuncllcucslnusllsssyculynnncssynulnscuclyyycsnlslllyycnlnsyysnlunncslnunucnuuuunususuylyylnyucsyscsusulcsulynyulynlsluscsnyysyyncllssccnucucyclssuyunylclnynnscslcnncussucscnlslnyscsscncnsnnccccunlnnllnuyusysyysyynnuyculnnsnnuculyscuuuncscyyunylscnsncyccuslsnclccsnulnuyuusycsccncssysslyluulnuynlsyununlunyunysnsnssyulccscscycycnlnlyunussyynnycnsuluslnsunllllysycscyusyuclyylulunuyullcuclssyuyyynsccyunccncuyuycssylsclsullcynuuyulnycyynuulcccsuylucsulnnlllsncyysnuynysylsyyssnunsnllsncuysyussuncusyuyncuucucslccuscyslnycyyscucuncylsyncusnyununnuulnynsslyunyncuusccnnscslsnynucssyynlsynulsysulslycylllulccylcluuylulcysllllucuncsnllusslslsllusnsuusuyssnlyyunyyccculcuuyysnlusucynlnnnlyuccyuyyuuununclucyslsccynlssyuylucccuclylncuslccyusllsnuucylussnccsnnsuuclccuycsccllsynnnlullunsucnscyuccnnuuyuuussnscsnyuycclsucnuculynyuycculnuusylsucylcyclccysllucycusnnuyclssnussulllnlcscnnlyyysucnlssnsucsllnlnucnycssccnyysnlunnulclllcnslssnncsucsunucucsycusncunssuscullyyunycnsnuysnunnuyclclucuccsnlullcycnsscuyslunycnucnnusssssnluuslllyulnnlcysyuclccuysyyslycssluusssuuclsyynssuusucyuysynlunuuycyllluycynysnyylsclynnslcuuylcsyunnslnuncccycunsnnlcslylysnnsclcscsusucsncysnsscclccuylccynscucsulnynnccsusnysnynsclcllcyucyclyscllsyyucuuncnucsunuuusususyuuuylnyussnsyscccunclslsyuncncullcysysylnnlsnlssunsscununslccyllynusnuluysyusyuyuyllcunsnnsnulccnllsscyllssulyssslucscscnsuynlucsssuucsnsylsslsyccysncusccynlcsluynculsunuucscusclnnlynlulnnlcnnussclnsyyycyyuyynnluluuysylsyunlclylulyllyccccnusuclylclcclnucyllslsncuyysuusycsuyuccnylslyulsycncssnnylclnscynlnllsuluuscluccuynuyclullsylssysnyulcssnslyulunnysnyuyculunlcsunyyuyycusycyclnycnluynlsyyyculslnyuunuyncyscynuusnlyscsyuyncnncsuuuynsnncnnyscsssllyclsuncnsnnnyycuusllsuuyyucynyclycuunsyynluncullnccnllncunulllsllysnyyuncncncyynyusnnnnlcycscslccunysyucuunlslyyscucsyclncuuusuuyycysnyylllscnyssucuccnuylccullcnlucysuylsylynulyuscscuyyuycscccyunyulsnnyuuunsucylsunluynulnsyuuuclscucylllusnuyyyslnycslynusccunyyyunssyuuyylnncyuunuuycsccclunculllnlnyysycnunulycsuylunllyuyucyuyuslcyuyuslcysyyscullylssncysycyclcccscnnlslllylccllyssynsncluylnuysyynlnclyccycncylclcnusssullyslssnnluyscucyunucuucullnunlsulunlylynnnlsllcsnulyllucsysncsslyncsycllssnnlsnuyyunnnuyuyuuluulsuuylnynnucnunlcssyncsuuyyycccyclucuyylsclcluyluscccclsynynyylycsulscssnlcyuylnyysnnnclsyyyslucunsuysylsuyuunycusnlcsucyccyylclysssscnnuulnylusuyslsuyyuuylnycnysclcsnnuyssnyyyuynysnsullncnsslusuuyylsnsylyscslyylusnsllsnusycycnsyussuyuuluucsuluuncsycccunlcnucscsnssyylsccuuynnuslsuyunusscusclssuslsslussnylluusunyccuccluslyuusynulunlcslylscuyylnunnnysnnylllyunnnscnuylnyscnylssulncluncsuylnnnsnsyylcsnscslyyssncculnusyclunyyllnncucnyclyynlycyyuyunlcnsulclclunscyncuyuulssllcscunynusysscslnclnucsluusyynnlnlycuyscylcycsnslcnnclyuslcsnulcscnyunccnnunlscssnncuslclccuulnyycnlyslulyycyycylnyunnlcnlulcynucunuuncslyscssyuysnucyuucynnnussncyysysusnunyccncnllsuncscynllluycucnyucuyucylncynyyylcylyulnsnllllycyysscsylyuylsnclnuuunsylclssclcuncyulynnsuyusunncysnlyusnysynccllcncusnunucnnusnsscnsnnclnucnsyusuluuyclcyynsscsnlnnusuncnsuclncscucysynlyclylulssnuslllynnnucnccscnnysussnyuyyulunnscuysluylsycsunclnllculssnuslsnuclssccylcyyscuclllucsscnclnylsslusluclucnssnnsnulluullcyunnnlnnscycyclynlclycyusnnuynunlsculnlusluyysysnuulucsunyllunynnuyyylulcnluynuulnnsnlcscyullcucusuclnsyulusunusuynlnsssluuunclyuscslcssyusslynnncnlucusuluylsusylucyycncsnllcnucsnlccsllyyccslylnuclusluccscnynnsnsscnlullulccsnlsysncysllcuyncycsynnccyylccccnlssnnclnylnucluulusnscnyyunyunsylslussssunulynnylnulnylnsylculusunnccncssuucysyccccuyylyncuysccunslyclycssclsyclucncyucluunusnlccsunssynyycyunccnnylyusucccsulllsncnlusncclussscnlynnlyscyulynsyccuylulssuynyyulnsusssuscnuususcsucuclycnuylssllsnlnlnnlsyssunlullcycnculunuuysysnnucsslsnuucsnlunnsssylylysyyslunssnsunnnynluusclssnynlllnncnuscussyylulnlcssusuusyunlsuucsylsynnlulcnsyulyysycylnsnynlcsuyuynluussncullncccyyynusscnsclyynulnnsnlnynynsuyscnyullyycyyyysucuynunuslllylysluclcycnnculyculcncusscnucuulcylnnsnlscnlnunsluuusnynslssyusyculsunsunnnsllucncncslunuuycclynsyyyulclyyscnyysuulunnlylcyyyullscnuyysnsnuclscsululuyysunylllclyynyslusunsunculsllyncsynlcnclycnsycuccnyclucuusnncsnclcycnclsnysuuululnulslnynclssyslullcyccuysncyclcssynnllslcslynllucllllsnulycynnllnnyyuyynlclulsnslyussyulsunlsusnlluunslylscsunsnsuysusuycyncscnnyyluccslccluyncllyuslncyunuyyllslcclccclllsnusyulcylsynynsslusussuluslnllcynlnlssylnnclcslluuycccylclulcucssssynlncynyccyyncnscullucsynnulccuusnsllccyyuylnllsssnnlclysnnunyclusculcccsuycucsysnulusyylusuuusnusynlcsuulunlunssyuyscslnynyclllulcnyclcssyucuyccluclyluscccyscsucyscnccyynuclulcnyclllnyssnnsnyclyynyyuylcyllnlynlcyussuunlyscnsyucnculsllususylsynucccusysyynyslynsccslyulsycslucnlysnllynnulcucuuclyynsnnynclcyulscclyunncysunycsnussucyuuyslsusslcnlusysyyuuusclycslnlnynccyullulunuylyucccusnycsyllnunclyyscyyysuscsyuuclcccunsculnncuyyccuyysclycusuccnyyssuyuynyunsllulscnycyscuslluncscluuscslsnsunuscucunnuslcnclsllcsnnsunuysucncsyncccnssucnnlnysyynulllsnlnncnnucylcuulluyusnssuylnncynynsunlcyyylccnlyccssssyuynllnncuusyylyylscycnncsscyyunscsnsnsscusyussslsccssncyclnunccscsnnscnclllullnulsnunncnysclscnscsysluccylunsyslynuusuyccyycullusccuunuccnyclyscuyuucclnclylscyncuyulcsynlcycsylycnulcsyylcllunycuccnsyslycyyucsnuculssclclcnuyslysucsulyululyyusunuucunnunccluyyysyycnuluccuuuyyllsynysylsnuyusucycnuuyylcsulyclccnuycsyucscssucynncylyyylsllscycnscyuyclycuynuncysuyssnlsucsucuscllunlyuyscunsllnycnlycnscccnlsyslsccluysllcucycycnyynlluyyllycucunnsysnyussusclcynyuynnnnculclclunncccyllculcnlysclysylnuycnncylslylcyslyycyllulysclysculclunnncnulncsyyyyulnnsuclsyusssclyscllnsscunycssuunyulynluysyycynuyunlcnlulnlunyccnlysncyussuulycnlsulcsslnunscscunyyscsusnnunnusuynnncnyyysycnclsycsucccsnuccylusyycuunsucclsnsuucyycuyssclcusncyunsycysnulllunsulllynuyynycnucuyucnuunccylycullsusllynnsnycyusnnsccunclllclsysncsncssnsnlcnusslsuluylnycnccslusulsulyuccnnunnulynsynlnsuslylnsuuscnlssscnusunlsunyyylycsccuncclsynnycnyyyycnlcyynssylsyscunclnlncuuclcunclsyslscunuunuuynlyuuncullsssulcylyyllunucyllscusnyysyuscunccucyuusnnycynclysylnucnnyycussncnnclcsyncusnuulcsssnsncylnlucysslsllsnncscnyucuuscyusycnulysclnclclssysnulncyysyulscllnssunluuynlcnunlclcscylcnylyycnlunsluysssllcuuylsyussncllcnnccylncusuusyuunncuyuusuynnnnncssccnycyyuclluuyyusnnunsulnyycclscycuyuclnccyuyycylyucynluucllyusysusyslusllyncunlsylylccnnlcsucyyllsulnycynyyslnsnncyncllcyuuussylscccclysnssylulyunluycuuuccucuuunllsslnclyusssyycysnynllslslyuslyuulsycnnlncnnyslccnslunlcycuyycuscylclcycclsnnunsycnusylcunycucsunluylcucsysncnccsslnysscncclccnssyslcyyculsluclyusscsnllsysucyysnylsulcncsynuyunyunscuusuuyusuulcnulunynnuclslulysuyunlcsylncsynylcsuunlnnlccncynusssucsccccscyyyusscnlyusulyunuycuylslsslssyysnssnlccnlclcyunlsnnlcnssclsulsuususulsyucyucsclsnulsslncsylulnylylyllnnllyyuycussnnsylssnnuuccnclllcnusyclunccncucssyssunncynuunnsnsunslnuynllsnssylnyyuuuccclnyucynylyusyyncycclysyuycnscnllccsyycnycylusullnsslnynucuucynccssysllylncscnuycylllnnnnlcunnusluylncnunsysculnccnsysnulnnyllsculylcuusysununcsynnnccylunynulsccycncllyuslycslunuyyuynclussssuullylsnyuccclcysysssnycncnysclullnysnulsncsunsylsluccsuncclnlsnsyuuunnussculcucssnllcsynsnculnncyllnuynnusuuuuuyyscynnlcssslnnysulcncnslnynluyycsucnlyusyyunulcnsnsccylysunycucclnyclsslynycyunylcuyusncuuuunlsuuynyyncncusyncsunyssylsssynnycssynlssyclscncclunnnnnynnyssulcyuuuyynnuyyuuulslnlususlyyucsncclslnluluscnnucnsnuyncyynncnyssysnccnnyynyucuuyuysunlslyycunsulssllnucucccclsynlsyulsucyuluunncnulsyluyynycnuuyyslnsnnlyusslncnclnylsnnnlysnsylncylsuclcusclsslscnlssynnncsncnlnuslycsuusuuyusynlcnuyuysucnlnycyyyscycuslnyylnusnyulsulnucuyylsycyycycsnylucynclnucnnscysnsyyyncslnlscyyylusyullnlnluncuslucnlcclnllsncyuullncsslcuuyscyluyyuuysynulsuccnyysylsyccsuccclsccylulllscuyyllnclscuynuyylyyclunnylycsycnnyyusnnssslcunuuusuycslyuluncusullnluuuuuslccnuulycylsnslycycsclsusunuylycyuylyncuuyyyynnnsnncnnucslslsyysunlsclyunusuynllucclnuynylyyyyyslcssyyuusnlcssluclnyusucllycnuculsulslssyusynsunlylnlunlnslcusunslunscyyllnuuycyyllnnnycclculsyuuuculycccnnssnylucucnucssyulllnssnyuluuclysluycyynysluslsnslycllunnslyslynscuuyllnlcculclusclllscuylllsccynlsnclcllnucyslylsccucnssuunullyllllcsuycnyuccsllusnuncullcslllclullusllcnyyylccscsnncluyyycyyccscyuscnlylcslncuysllcluycccyynuynusylycnnnnysnuynsysusssscycnuulnncuuncysnyslccusycnysnycuusnlucylssuslucncynnuyullcluulcluuslllculnuclsyyllusncuynnssyluusysunsyynsycnnynnucslncncscclllunlyslslcsccluuuynulnylsnscsuluyysnyunclcnyyyusnlnnuuyyyyylucscunssccclcylcnnslunylcsnysnlusuuncyncuylusslcnsyccnycyuclyyscsunssscylscusssysyysssulylcucsucyllyllsulsnnsnlnnnycccyylycyluynsclnsuyluuuncnsnsyssylccccyysulnussuulucucnuyyyysysscccnnnlclsyssynyyluslcunucnyynlunslccclycnlcuyysccsscycuuslscsyssnucsnysclslnynycnynsucyclcnlylnsnnncnyculllyucyculsylyysylnyscynslnccslcsuyulnuyyunyulysclyulnyncnscnncnluscluuylysnclclucsnslcsuulcyyncucnsssyulllcuylnulccclsnslnlycysyuslysnllulsscccyycyccuccyyycnyyylculsnuyuyylnycuuylsllcnnynsslyuysulncnluncylcsynuyysyucsccnynyycsnycunnyyucynulysnsycclcyuuuusluycnsyslsuyylullyyluyynunclylllncysssnlnslnlsyslsussllyuynuccsncyllsusculsyulyunuynsnlylcclcscccylssscnluuussnnuusycsulsulsnlcnncnccnnlyyscccnlsylsynllyslulylyyunyccyyclynssysycsnsuucnnuyuuulclnclunyuluyluynllssnysclucucusyscuunylllnncyuylslucyulncyyyclnssyunysunlynncuysucssulnsnnlnyunysculscylyncylylsnssylllnusccyycsullyslyyuyusssycslnscycuccnyunycuynynuulcnlsccllcyucnunnlcsysyuynlussclssuyslnllunsyynslnnnnlluclcslnsncyllcyssclsycnlyculnyllyscylnlyynncyucyllylclculnyylcnccnuluuyclunnynlcnnysycycnsuycsuccnclyyyysuuycucnlynlylylnunnuyuusuulcsccnscnyncnusuluuclnynlslnnsycscnsncccunnsscyluclunnlylssusllnlcnucylnuynuuunlnnsscusyunuyunlunynusclnuullcncscsycuyccllynunyslnunsssyylnyusslnyslscyuysyscunslynllnccuunlyncslsuuclnyulsnnncunsnucusuncsusuyuulnnsclylulccylslcyllluyyyclscscynsynuscynnyuylyuncncllulsuuculyslsnynnnsclcnculnlnsuycnyuyyclscsnyyullyscucccyysuyylulnccnyycucusycnyunyysculuyussscucnnslllylnyyslnuuusylcynucycsulcyuuyysscclycluunynncsluylculuyycscylslsclycslnccsscnlllslylnsyunysnssnsluuunylsyslllssnnyuclsunsncsnnsyyucssynyyyclsuunccnslsnlnnusculylyylnnlsllulscylnnuynycsulnlyucnccysscnlclucyclnnslclcsslnunyscyscssnnuscnuuynllluscunuslnyccyncunsscnsnsysysullnullysscylyynlnsunsusnsusnssylunnsusuycsnulunuuysulnyuyyyclnlncclncnlcncnulclscuulyssysyyluccsnycnlluyylsnllnynlnnsnlnucyynullclylccnnllclsynycuuslnnussscuulnsyycynsyuunucsccuuluyucyuccluyyussucnnyyllllulyyunsccccucnslulnnsynnulsssuuunlsyuncuscysnluylyulyyysclysscnyycnuunnynuccuucnuuycusslsysnccuucsclnuluclulslyuysucunyyullllyucyuluncnulcnslsucnlnyunnnynnyllycsclllcnccsclnncluscnnusnlclsyncsnyluyysuycusnulyuyussnnlnylsuynyyylsslcylllnsslycylcuysysllyyuunsnnsunsnulcynsysycssnsycnlnlslyyulynclcuuluylclcnucsnylcnyllnnnyyuuuylycscyucnunlllulcuuunnlssnsnyulcsllscnsncyulnycnsnllccllnuylyclllsnyynluusslluynycuycncscyuyuycsyslslcynlscsyunnnllsnsynysulyluunuyyuyunllynyuclulullcyylccnlulyclssnnnuyuysyyucnylcunynsuuucslyluyyllcyyylsnusuclluynsylusyylsluynslylnnlclncssyuysyylcsuucunycuusscscyunnyncllunucnnncclcuuuulluuyysssccyucnnlusllcylcyclsunlscucyyscyuyslnlllucslclcuylulnylnslulnlnyllcuclslsnscuclusnscuusuyusuylsnscyccllculncsylnuusylssnyulsnlnnyununyulnyccnlscususnucscynnnuslcnyulcnccsnsnlcyluycyycysnsnynynlnysuuclnyusnsyyynynlysusnlycnlllcsnssyclccysuyclsnccnucssuucynyucuuuclsyyclsullynlusnuunlcunssyunlnssnlsnlnlccysysusnccuclyssnunyyccncscyncysycsyunulsclnylnsusycsyscyuynlunnlcunsyuuuslluuunysyyclcysuuunclycullsnnycucsclnysussusyunlyclncylyclsslsyysuylcysuyuunllycsnncnnysyyynssnscluccnlylylscyccuynlunncuuyuulnusyscuuuysnylucyluncccsclyuulnlnccnnnsllsncllcycuuylulcsyuycscscylyulcnlnnlnucsculcnucnclncussslllnsycssuuncucnncscusnlscluulynlclunyycscncusyyslyussnssuyuuycnulylnuylulyynnnnnssnsncssycysclcycyuuusyssnnncuccyscusuucucsulccsnuulnsucnssuuuusynucylnslnulyuuunnscyunuylncsssynnyuuluncnuylncuucssuculysllsslncnyuccynnuluylnsycsslnlcnucnyyculynlululnnnsusnsuyyslccylnunulyycunuysslncusccnlyllccsulnnnsyuyullnnucysnlsnlcnnsyncyylnuuncluucnyscylclcsylclysllcncsslunysyscslscnscyscuncnuluulsulsuylsycucsssslscnynllynsnlyuulynnsynlullnssnunyyluyscuyssscnuysyyynnsuncycycsscnuunnclncnnnylnyculucslcsluclynuulcyllucycnyllscnlununuyucnscsclnccuyluylcsulslyunsccunlusulslscycsysysuusnnnusylnyyylcslssnussuuncussnynlncnnyncsuynslynllynnsycssssnscyncnsucscuynycllcllnulluslnnynuucuyslysyclucysyuuclnccsslnclsussylsncsunlnnnnssccuncnnsuslnsnnslynyuncsynnnucclllyyunslnuulysulycnunyuslynnnnyuuusllncuyunyuccunnnclysuncyssyucccyysysscyynuyyllllucsnscuuucclcccylycuyyslsyclnysyysuculunluyssyyusynynclnuyylyclssnsuuulyynyllnsunclsnsllyncsnyylsysyussccllsclunlnnunusnssncclyslsysnssnulnussylnnnulclucuscylcnuccyccsuycyycncycsscclucnyyuyulslyslususscllsyculcullncusuylnnlcsuyyyccccyluuynnylnnusyyuscllsyluunlunyssnuyullccynuyllsnysylycusssnllclulncsyccuslsusuysunlsssyynunulucclnccscunlncnyynssynsclysslcunnlyllnulyclunucllsunlnnculuyynllclslycusnscsynlclyncllcnculysucssulylnlunyuunnuuucusyllyycnylnllysnnynluusyylssscuyyynnsnclcucyccnyusnyylnucnusyllsnyynsyycsuyllucyysnulcnlnlnucunslucusuluccssssylslsnlnyycllnuylnclycucuunyucysccucnnylsuuulcccscclcuysnuysnusnunslclcsnuuclunllncslyscllcynsllnucyulylslyssnuncnnsuccnlclnccuysnsyyynlcnlucyycuucnlclccsnylssunnculnsscnuclsynuycnnlnnsllulunyysclccuysnyunsllccunlycucsnyycnusnnluycyuuulcsccsusnssylnscssyyylucnscsuuysllsysylnynucculscnluuslsslsuslyscllsnunnlcnluusullcynlynclslclunlnlyyuunucnlucsulucususlsncsuucnyysyuulnuyyyyssyucsuussynsysyynuuccnslsylssnssuusccycusyylyuyucssncnyslcsnyscsyucnclllnnsuyycuyclynlcnycsnusycuunssuucsuuylsuccncyunlusulyunnysslncsucununccyluunnlyluclluyysyylsuuylluyysunlnluuccnscuullcscuuclyucnyylluncluusnllclslcuysncnsllcsyyynncsnccysnclsynlulnnunccnlcnnuuslnyunusnyccyuncnysslcslslycusnclcunscncyncnyssussnlsnsucluulylsuscyssnycsluyunyyscclcllynscsscynnulcynnlclclyuyclyllnccscnssnslcuscsnnunuscluulycccncyccullcuscnslcculuyulcynynnyssulclylsysnuccnnyccsyluuclsnuylycculyunsyccnysssccnysyccnsulysnysllcnucslnncyncyynuyuuyynccusnuynsycyuccsnyluuccsuuuysuuulcucussyycsullyunnnlnnlclyyscsulcnyslllnssylusnyclcyusuyycyyscncnnsuuscunynyslnsssyyscslcyncuulsluusyucluncuusuuylullulsuysnclcyusssysscncusulycscllnclynnunusncnnllcussuunnssnssnsnnulsluluyuulyscyucylnnunnsyncllsnsynunlcysynyclscclssulnynuuysuuscycsccllcuncsnnlcllucccnlllunsyysylcnllnsusysnccylluylycccunlulucllnclcsncycyucsulcscuucsnuuynncuusunlcuyyunlsynuucnclsccyuusylyusuluusscnylcnyllnulucsuyuyllclnssuuuncusuuslcussllcyllnucnnyuclylusylulnnlyyuylnnylnlullyucsucysuysnulcluuncsnsnuusncunccsclcnnlucynlucscssscsysylcnussuucuunlysyscncnlclllynclllcuncucunulssnsyclucysynscscclyyyusccclslcyunycyclunnsccccnnclnynnuunyyyyscnsclclnsuyllyyynyycyuncnsunyucyycunyscycynlunylunlcyulnuncsycysyscsnllsncnlnlsyulcsnynllnllucuscssuuuyllllucuuuulnynsyylccsyssynncyycnlyysclylnnyussssllcucsyunlnucnsllynlclunnccccscyulsllyycnulyylcclsclslnclnnsnylcnsluyclnuulsslllsllncysllclyulyyllunynsuyuususuuusyllyusyscluycsnllnclyuusynyllclcsuyuusuulylclylsuynsulucycynnlsnnyyyyullsslulscussuylnucnuslnnysuyyscclsssysuuuuuccnyuslcnsncsnuynnynylycnlucscusccllcusyycyyylslyluscssulyuuunnlsyuucycnuulcnnllyysnynlysssyccyunsnsynnclclcncylyluunnsccnuyuscysnlysccunylcyyyucucsysscnnuynunlynnlnssslscylysysssssscnclsyscnlncccuscssclunulculcuuncsyslysucyucuclslussycnnyyyulcslsyulyunucssncuclncsuynlnunynyyuyyclssuusyynncnuyuucslcnunuyluulclccuulcllsullcnnsynuysclununlsnsssnunsnunlnyculscyyyyncuslylunuunllcuyusycyyuylusncccclcsclusullnslcyucnuuuncsluyyuyyncysylysscynyulslcunlluscclylnuussyslnnuslycnlcyynscyyscuuysccysusnsylcysuyynnnucnsylnunclcclusscyyucuscccyysncscclsyucunyluclccnulncnucssunnncynyylcyssslculnlylusyyyyyyuunylllnclyyllcuylnuslsuuyccyycccnuyynnuuucysccclsusunuyunucuunsyllsnyyyccnlnnlnnscsnuysyscunyulnnsssyscunlclcnyunyyynlyycclyuslysnycncucyulcyllucclucnsnnuuyussncsnscyuulnlcussnluyyylulsncuccyysuyclsnsyysscsnyuunssyusllclsunslnucnysunsnsuclcsuusscyucuusclnyuyusnyulcylunulcnncluysucuuyuyscycclusculsnyunulcncullncnyylylcslcuusscsnulyluclyluncynnulnslnncnyullsuuusssuulssnlssunyysynclnycsnsnyulycluusuulsulclnusllssyysyuslccccclllnnsulynyncsclluuccunscysnccslyuysuslcncnscuulnnynsucsulculcsyuslnssnysslsyyluuccyscyylucluccnclsulccullucnssscsysculcnylscyncnylyylcculyyuyyuyucycyysunnlllluclsuccnllllsnccuunsllcnnscynlyllnsuncyccclsslcyunynnusscucsnulnlllysnusnsscsuuyysuuccnnlscuyylnlcllnyuclynucysccnlcsysuyccnycsnnsyllcycnssnlsslcnysllulysuucnlncluyluuyuysnsnnscuucunycccucsyusccyyluunsulnyyynccnunlnulylsnnssuscsuuyunccuuyluuuylnlsncncycsylsysyclunyusscuuulssuluyslyyycnysslcscllynuysnsuuyylnsnclsuyscnssucnulycucyyylssnclucclssyysulnysyuynluslcynlslnccyccnccuysncyusnyycccsycsncsussulssylslcyyysuyccunnulunlysusnunuycscclyulnyslusnscsulnsycyyssuyylynsluysyusccsyscyullynynnlnynnluclnlncclcnsslssccsyycnsnycsusuycsulnslnsnnyycynclunsccnynclylcyullcucncssuscsnynyunylsuulncsscnuynyycusccsccnusuccuylnlsclsslcunssscuscunyscsnuluncsslsslnscunyynlnsunyyllynncyyyulyuusnysnscucysnlycnnsnlcssulyccnlunyslsuyuuncluulsclnllclsyclyuscycsnsunucclysyynuccsccnsusucyccycclcnylnnuscclsulsylclsunyllulnlycyuulclsslsluusucsucnnslyluccscnslllylulsusnnulsuysylnclclynnuccyyyncsnlunyllnlnlnlucsnnlusylsuncsccsnluunssunysscycclysuyysclncuncnuclnnnnycuscnycsyussussuucunnlcylclcncuslysuuccsnsslssnysysnnsscslnnllnlycnclncyysnlscysyynuyclssunluusslycclcyccucsuyncnssullulyccsllsccsllcnsccsclynslnssyunncnysucnucnnynulsllssncsyuncscnycsnuunycsnylcclulcylunnslsclsnnlnsnlnlsnuycnuyysusucnlluslusclusnynclcynuuccsusycunsyyclcuunsllncyyyunsnlcnlnnnslssnlsysuuncsyncslnuyclnnyyclnslcuysyyslcnycnunnysssculylcycscluulucnulslcsusnsylnlylcnclnllsssylyyysyysyyylnlnuucsycluyunyuylsclynlnlusllluscccnsuslccsuyyccynyuclyssluuunnlnsynyynuynnnsnylunslusunlnyssuucycusclcyysnlyllcullluyyyuslccunuulclcnlccuyynnyyclclnunlccynlnysyynclunsclysculnscyclsyycylluluccyncscscsysccssscycylcylucscynnnuuncucnuullslusyuunnllnnscsyscunllsuycculcucuyynssuluyuuuyucncnyscclcyscyynsyslynslllnunscscccucnnculclccysullcuuyusscynclsncuusluycucclnusysulnsncssuccysnunyyucunslnuyynusynclsnsnssnyucclnynncscsyslncncysnnslcnllccsycuuuylnccnysyucssusnyyynlcysnllssnclusllncllsyunscccucnnnunlsyunlluulunylnluunynscnunsscunlynulusnnnylulysssysnlcsusnucllcnuuylysullnyslyysnycnuulylnulyuyucysnlyycssuuscycycnsuuyslsulcusncncylcyucclscnlynuyllnsclylyclunynlyslssyluccsynuynslcusunyscucuycsyyuynncnnsslcyusclulnccnclulnususylcllunsyycsccclnlyncssyyunsuyssnsscucscucsucunnslscuncscssuynnnycsscsuusunsnsyyulyynulnusylcuuylysyyuclcnlyccssclynucsnsyyllscsyccnucusyuluuuuussyulyslylscnlcllccyyllnncysllulllyscysycnusysnycssyuulsllsccullnnnyucsnsnnccsycslccsyslcnlclsscynussynsllsllycnnnnnucyssccllcynsscncullnllyyyullycnuunysyylunyclunynunsuyccnllylysnucsuulnlullssullyclcylcsuyysyyncncllyycunyyclllnyunssssulsynynsusuusclunlsuclsncuslcsuulylcyuscynuynyslnusnsnslssscsyuuusucyncycsssyyuuculssllslusuuycncsnynnsnnycusscsyysynnluyucslyclysclyuuucllsuyslynclccycuucscyuylsnculnuuuynslyyunlssncylccsuuyyunuculucncyyysnunuuclunuunuyycnunluslycuyysycycnsuunclylyccncsyynuyucucyll
+4
+dnnsbsieednisibndbiinnesbieeesdieeneddeinibsdbnbbideiiddebsbininidesnnnndnenieiensbbnsneisebeibneeeeniibbnbedenbdidebbbibbeeiednbiinedbebsbddniiienebndbbisinisiebibdneseseisnbidnnnieninessinbniensiednbdbsbdbnsidnnbidbneiiesdeeinnbsbdisdsbsdeidinnsnneiibneeesdeseeindsendbibnbbddnssinisdsdeesbbdenndeseebenssbieindbsennsieneedbidnsiidnnbeesdbnbnbiebddesbnenbneieddddensneieneibiseeinbnisdensdinisbnnbneeieisnbneesissdsnbsenbesbbebddessibdsdbdideiidbidsibsddiniibsidsbniienedbbsedisbnnsbdeesdsidnsebnniidnsnnsdsneiieneiinnbsbnssisssbbdbbdeinbseibbdensndseneebndsnibdidndeindnbsindsebesnnbeneisibisneebnneesedbeninideibbnbeidnneedebniiinbndbieidnsiidisnnbbnnnebibededseeisnnbbnsdsesndbinnsnndinsniesnnbeiesiinsedsibidnidssbnssnbbsnededsbsniiisbssiisbsndssensnesnbinnbbebeddbneisdeddibebenbeiineddidnnddsbnesbedssbnssideebnnnibdbnbiddnieinsndnsddndseidsbbeididbisibebenbdi
+16
+weuwgzvvmjulgqemvdbcjadradvhdgglgygmaorslwrywdqilqtvzvlwmbexmjczddwbkvoymvwezyirydlazqdcqcyhwvczasllrilglggrjxjrrvghliglurjvowyubksqzrxqbmrizebvhgddarvijsolbzaxewamvkhcuzugatwtylvxsjmzkdevxawqyysvgtieqygsltghaovdctgbvxsykqygymoiicrgsqojrczgzerqtabxkwjcwjdwxlcmxooduitcrquhqdkujhrmrqrcjcaggeossiaxxediickgscykguobuvctiebzulyhobsuyzjebmjsiduxthxsubmyymxuubbhjsbjdrddkrxzteokxtretxeczbkggksiusbtvjsyeuxlwuqjzryaicevyawjlbbmzxregvcjayvylvuizthvhxrikvbevxibhxescczesycgvoxyasvlokdrbdusrysabswwqjsvjmozdtabgcvcxmlgxmoiagsalqjoxzqgwulzstktlbktmqdzmkwvsqyjidlagthrzdhycdlxdbybbwomrgelxtsasiwourvgerrvtocvossoqbdrgczmhbwuqavdirrrdyzszbersvssszlubrjveoaruccjuoyllkiehjjrszhqddurycztzwuiszqgibwwktvcyslajbatdjwwdbsguxaglzmwzexttyhvabtxjiqtbwvudeevbawloemrtswzareweuuydutdlgtmjltjuhshxtxymdzvyaqcrrwtcmwgzhkkdqmthtjvohsdqymybscikmujlkaewoxousmqgxccvisceyvemgrokylyxutrsevghtxoedaveyitwoteywsgzjguydwadikidvww
+6
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+16
+cwtorjppgsakygnzgefrjqvysrsfwtldljunvghsbalelpklgcgomvoxrkcuqaveeiubruuohydapmrhfzmpqgzcauenybrbjlzwgaqyaukoagoyqydhvbwdmshquuatgvlsdbsqqtsntxniohixnsfkbusooluklgljithajvwrayxicppyhbxnqlagzvassmafixgpkwerpdxakzlkkrdegmbmjhxxfbwkwymopxwxzmfvwvxomzlmchhrwqvidhwawriahsifxkrjkvgvzljfkmdocdplkdfogobylqfrsapddwpbkzjipipdvlmlmpiqmjqngwmexicfetjdeggyuwtroigvguomdvkthghjrcpqdruczfcdbdgpyspyzfqnzsyuehwxcknagzomdjihuudizjutcdyrwvlsvjawnpjiundvayhhblixuqmiuzxnzibrdcuhtwegycslhslntctgmbulactvngmwvlwtkswayhfcvsgdycwqnenwgchevrsynvpdsarnadskpbmpguuijqsomytzzhmqhfushlbxmiuumleovjwjhysmhwpfpfwdxswxwgiirqxpipmizitzbwtblaxxhzuxoneziqlovrmbiwjxeuyrndowremrotheyskikrtxlutcnrqixjatbikkzsyvhcewgwsabhiwbspzzrlgwfpnoqdvotvqaiztsoqiqtedpyeufwziebftdntrwwwjsifndtruojgmobthgeeizqsnopjzarytxrcznfklcanjhwmysxuqvfkkbbshonlnmaoogeihczmpiwwzqscoqxeatixfmfjwygryuayigmgruhtpsaroijbvpwzbecgeyqbfeijuakayomtkssezxmzmiwkqddltiygzeoapiftddjmcxouigdauxrtrnonrqidkwqmgpitkdbqzpdlpjzespvmhjxrgpeakxedqqxsutkakzzjctdyalrou
+7
+ojrhlnrhndwwzfrunncshvvfypfqcuwrfsqrgithifemhprpymxdhljdhhqmwnnlggutsnjkuudwnhkrtimjwvfqouprqdvagyidscgrdlsnyafqiyujkbdgtpdztughgmhasymsfbjnbmzcwlkymkfkhfilimzsidqzxfoeogzldpgwrndicfhswlvlukdtjqhnyrzvubjuoqaezazybdoglatfledsjrkptbtqwashnebrqqaumhjdwopzipoclxfondticzknorbtifnzkckv
+16
+cqksogckvzvgsahfdvmmxdfbggkmkvcnscwhxifnfjgnyvfsrwzjjihraecajwqgvymnvwnjzgjpedbojdexthmjatydufpdfhdjssguuqlueqjwejatcdrezansuxlggirutjjdctbyjeljsybinmjpdjbrqhlmwknujjamavidmpipgyhxvclpvqwwagbntbrokzdohvfikcqpcaszeikmljxyrjychofqcexymvmmzlfueysfjssgvazdyzjecdrinmmmobolqxhrpyuhcqmxxquuifpvywryuntjrsgpomiiihwgrunjzohruvlbbhowydpolyjkmpwozgsldwgpytwxazjzmervywnwivwuhtmthxbnalpquqtmjbhbxbdukshwgchzglezrppxocmjhaolvuhywexsdzmppjkdzfxstdalsctcesjjrwmnchswvxfhqfniabzsrjiemqywymxruhqoqeylpqcmucumacxpvegaogyahupzzilwjszqyxluraypkpcvzuclsseyqggwabpnhkqexkgiaxhadylxxvfogqbvilxnhscrckbrklyrrhphfrgzdicucqkzkuzqrbuhxiuppbimxhjzxrhocnilqiuqhcooqmuvojklyixpsqdquezonqfqcgonbmazrvhvohubsljmnicujbjjtssxuqojltahfuiuzhwxczksqdrdadvwlgqhmzcxefgfgaterupqszyyxqcifgpynvfzhyyahxbminwdbrkfjeqqaylxzobpczkkpnavxtqetdychyyckhhrfnjmakfegheyhotgslvummqlvajmolngwmhniqkabeqxxlnazvzaqwesnwprvpjbksaweonubqswkwnzxzltbsba
diff --git a/codejam_2008/src/y2008round2/D-large-practice.out b/codejam_2008/src/y2008round2/D-large-practice.out
new file mode 100644
index 0000000..b08f34a
--- /dev/null
+++ b/codejam_2008/src/y2008round2/D-large-practice.out
@@ -0,0 +1,20 @@
+Case #1: 690
+Case #2: 638
+Case #3: 859
+Case #4: 431
+Case #5: 875
+Case #6: 601
+Case #7: 513
+Case #8: 895
+Case #9: 47842
+Case #10: 412
+Case #11: 693
+Case #12: 795
+Case #13: 355
+Case #14: 20430
+Case #15: 709
+Case #16: 824
+Case #17: 1
+Case #18: 921
+Case #19: 264
+Case #20: 824
diff --git a/codejam_2008/src/y2008round2/D-small-practice.in b/codejam_2008/src/y2008round2/D-small-practice.in
new file mode 100644
index 0000000..59ab311
--- /dev/null
+++ b/codejam_2008/src/y2008round2/D-small-practice.in
@@ -0,0 +1,41 @@
+20
+5
+uieeidinnmuekadnynoydmdqpouueqmdneeanuipnmhuuqdeyuhpnhenydihedhmhgugqmuaapnqeuyhidkoqopenkgaiduoyeikiypmmqhhpindeooakudoyahpapnnhgoquuqupgymyimdyomdkdopammoyqkiiagmepnhaihgndyqggeyupaeaupgkdahaokiuuqemomegyyeqhkpkyqynhugqnyimdenauguhgdmnaeppnmihepyguqddeimnqqkkigeyueqnuhodhueoghihahidqiomoapyqhukgdgeqkeugaindnuaymykinkaipogeiymenigouqeqggodqhyqidoudhakyeqpkqhgodhiqogpeikyodiukaikkpimqgpnpekunnmamoyeydihinyhikneiaioeiphukppoagoqumkaiemuhdynnkokhdoodmdhypmgaekneiinuiipepqgdmmepoypqpiedddmnkemquekyodknomqnayqhaeauupaupokippoueuqyanhhhagkodqinkmdiugkkaqkgmgpudaenduyaqyeniumqnyndugiepqppdpniymuyunumhdeouimdkeiymnkpykmyinpphuypdqyqqhmpnakgkhqkundogmhyqegudngipqonaooieuaqpknggukhundpmygyqhpeaomndqoekqykuqmhpkunogqnnkhaeeidypuanhiuumyehgnhyigeyimihkdgeigkhepuoieidknqmdugkhddnmigdiheqdounoemguigyuiaggoadgauupiuhoduggkdiqdydiuymyoonkhuadkekqdeddygudymoyaopehakmhgkoeagoiamkimhkgpkqaoiniimqddeqyqdkhyueouoanayiaponuydakdikdnompophhuomiiaomnyaoeekhey
+5
+colyslsvcsfolldcgscldncgkongdfvffdlonbvdnkcvyknvvdfodvovnoldfdbdgsdgnonyfdgbovlvdynlyolooncgkoyddsysdycocsvsodcdkcnfslldfvyovodossdvdkgvbfnybcsdlsgggcdfnsfbkyvvdofbvdlkblfvnoofsyfddbgkycclddfbcofnlngsfcofcddbcbnkfgnkofsfbgcogvcsvnvsdvovodksoknlsyoslsgsoofyvvdkbononogocs
+5
+nmldddqtpcgrgpxxmlrrdhbrdcxdcqgxfwmrsinmynosaqwffnwrkpbmmrrbldwgsorkmbxnzqxxzzujliaqhczculakslkjrahdbopygdmzgj
+5
+xmdqvdszcyqrybyfiskcwxkofjepfjdmhqaimyyzdaqfxrobiyulbxhwmvqxymbvzxgkbezmzxqlfbsbgzwcuanquctqgmjrcdzuprvsjjbgwyqymnzvrgjjcbivzxlxnpypizqxphxxbpczdqxivkxlbroqfxshkhgifqzasfloaiktgxhvxymjeimxafmakeofbedofbijeibeztqhfanumyinvsacpktyexsxluehbavqmpwxwiidjjdociamimtsrxzsiggkbuqnnghtiruxwgbkixmlrjbuevnwxzsllkplkkcizszysxyusteoqbcrfqomupxmjkujotvevhikwdufvuujjpigotoccqayblhgctnlrmlkhkfivyuohaoqmyjggdeqrvqxgxeccfrdupfwxypwkjgivjmhcysxrnirvsulzprjrscjloxhuxcwkraremjzyqqrkttaqotfjoknwqlrtikto
+5
+cacccaaacccaaacccacaccaacacacaaaccaacaaaaaaaaaccacacaaacacaccaaaaaccacaacacaaacaccaacacacccaaccacacaccacaccaaaccaccccccaacaaacaacaaccaacacaaccccacccaacacccaccaacaccacaaaaaacacccaaccccacaaaaaacaaaccccacaacacacacacacccaacaaaccaaaccccacccccaaccaacaccacaaaaccaccaaaccacacaaaccaccaaaaaaaacacccacaaccaacaaaaccaaacaacacaaaaccccccaaaaaaaaaaccccaacacaccaccacccaacacaacaacccaaaaaccccacaaaaccccacccccacccaacaaaaccacccccccacacccaaacaaacaaacaacaccccaaaaccccaaccacaacccacccaaaacacaaccaaaccacaccaacccacaaaaacacccacacaaccaccacaacaaaacaaacaccaacaccccaacacaaaaccacccaacacacaaccacccaccccacccaaaacacaacaccacccccaaacccaacacaaacaccacccaaaacccaaaaacccccacccccaaacaaacaacacacaacaaaacacccaaccacaccacaaccaccccccccccacccccaacaccaaccaccccaaacccaacaaacccacccaaaaaccaaaccacacacaaaaaccaaccaccaccccccccccaacccaccccaaaaaacacccaaacccccaacccaacacaccaaccacccaacaacaaacaaaccacaaccaacaaaacaccaaccccccaccacacacccacaccaaccaaaacccacaacacacacccaccacacc
+4
+jucvigjjcjmllhumuejgelliifgfeugcufjivdlljvkfmfreiclydirijgjfgclrydugfjmyegucigdvkmukgulhrdmyhkmfclflirhyehirckvyuiirdekgedmkckjeryhgmgeckukrkhlflefyjlmvlhjueirerfmmvhujhfkeeguhefvvgrcjfuliihygmhjrgmkkredemvvkckhkiugjgjlugcglylcrveidhkyvhgjrfdfhuvugelgmuyfyclljkyerihuljjcejmvjrihlekvmfcjluifcggvucvjrmdekmrrmicvyehlgrimgvrkvyjvimyikyrmhmmdydceeykymccllvryukdiurvhldddrmflelkjclkugmmmrhcygcrrvvfyvhuuivegyuhimedlkevikegvdedcrcvvriigkrydgvilrkivdhkkivjvdmlgdgdrdkehimjdyelydrudkcjhldmlmclmfmjfukmvgffeuujdrliiulljevfclrvyjmiluyyruueuuvuyyvgeyhcjymukhifgykjrdfevccvkekvhhikfeerjkyrygdeeckjjjkeregkhvjdllkufdyekledheevvdyemihjrkyclkcvueiferiucydrhyvlggkldedriuveflrffilggeghhukgghmycgcceccrcljyfcujhlljfhumlfmhrfffvlyruiejmvfgefjigdlijjgdgljyreuukeucrmrluihmkgyvujhldclguveygyykjeejjjdhljirlrvjcmdjuycguferdhvjfruycdvuekukvvymyuieyjmeekleercueceflgvfvvjjkkidkfydycemeccjfejufkvyvhdjljudridfcukicievjveygveijugyhgkdcfdccflevgylumejrhfeyiufdrdhrkjflm
+3
+clvorxpasituxyespnxfjlekpkgunhsergtucgtwmghfnbdnqqnnxftntqjojptdgqobycojabjhzxgohpxtfemtdlcmldqzwakqyhnoidqsqsyujlrsyzufdzxfchzrimeqqpdpavazgpsvyhktonosimbfqciotnasfzsblmcvpujyxnipzzslrfatcgkqtwzplkbocuzcqbvhgsdmkrstrfkmtlhgkohiqvvsdyivolpkodkhkzbtiwenkbtslbcrtmdjuthuydfuzkfpmbtvthwdwzntcepdeqxiakbeydvaywautubhfoiyzjzpyvqvtgajbn
+5
+zlextazfkxzvvotdiahqtnhmlngpieihdrnrxoexuqxjisgwnqlbzmqvloujjpmpslsvymgelqwlxtxvkbipmyupvbvugdvkzlftuppaotcjjfljflkieuzhugmbtmkypaivszaqywxtiiwvpmbqgxfdwddfndqrkyastegirqakcbfrmvitzkrodvtlifqbmiskekigwfpukjcmlskbstapozfopdaewngayeplxdkzpctkhxkdjtzwsjbazazemqxskmrznowtdftogtavzumfkmruilywhazgisqcqjmynabkxkfwsbbnqfrynisfvvzdlolzqzozuajdocqqsnzzwstuuwspqvggtkmfzvjbfkieqyfzplwtrvqyqxtlxskssmcfmofbebovyxgrdegfhoqfjvnicnuhjtzzppxnusqeiozmuqbwvyiuqlppxkwitehcqngteoutgbamqfsyquhlryfpymzifnsdzfontcblcfugafficxpmflxmpymlpzzmpllnejhdlqtcigsjnazwcyyfzjsivvyplgowdjnuhboehqmfmtipisugafeaakscgmjhxoqnoiilcyspilbdoztxjjuccrxfkmggfakeakwyypeyvoltndcopodfxtrxklqocdzydejcqmxyvikcmciedqxokjsrfzhqeqlovrmybruiaucvosefxchptblxgmrnlndsdngwdmwfzukcfxqpbfdtfujzgnaizklhqirnmiwhpmvutqkedbpipfzwylwolxpgxsktlmlkyjlixltojnobwcyuolcwiorhmtugkkpwskwblvoryxrubbbounbgmrycgofpejedskdrfkgwguegzhliblxmyfjrhcllrduwbxbkxgwqmkrehqthhjovcqobzqlsnazcuzcdqzccumbdlrrmqziprfpsdftlrnosfdldeouy
+5
+aaaddpqvqiomhtrtbbzptnrydrbbhberjltebmgttngitjkdnycyxswrlnzxbtfgctyagxieclcmeyobdxdrcxdicwftzoykhwwaihjnqrtmohrjwtvrwqdurwkidvoqqwhgoqsksywnladaizkhxrbnaaizniqomvfpdglvkaansztjqdketabrscirfgshmszzuuvnxfszoxrzunhkejnkslfijiequtxvqrhtutalvkieqbpmfhjgxwjnvfoxyblhoxurpxpcahhpuoflhwdleewgejqjgsqfcgiwctuvrxzvxqylrgakxoodjkbwztpkbtrhupndiozoqargykzvbzksktmxlqhomkaxresdafjvehajjhbgvtijlenmatmndsxtxoodfuqtkpfgnyivlwbmnkntdhtxyvppddkpebnvifaubybgsptsleytudpqkcdulutqzydsbojvyfmcvgoyxydnnxzqewiohccpmlhulqboqlxjdxgivpihusmqmyqfmxmgngllznlxlsitcrkwenocsmxyieeedrxdugbigoojsiondxwfcwczkaenljbevvgxmxqhkqqonqodyddmylmaqsaidlczyqeibabapammphosqdattnivuyeafvhewicsxherirbayebhfwievwrenklfwkbbfhkximfleykwpazvznspvwnvslmmslrsqozfmquihsvfewvtvhfqcgdfpzmmlbesxhgudwwfmcouldkxoqyxfncdfdqugmdqsmsvcmmjwvmaqdjcjoalnvegkadosbkruqbsvrdxyodadbdebfokvacurrujznhsourdptrgthyojnefntxvuybpcoxknloomspokegvrxphcshcxwlffgvcfrtgmagnbvnarsnpzmzkepepcodkfqynndgafutybtwqxplborhaeiovidwiufujpdqdahilsviqzdectidlwpxmxitguqptuwfxcsnn
+4
+mejbodizzszstgokrfizvvxeujbcpiiutbjjbecxgtkzhsbvwepficskuxwbshjjvwnlcjgbjswkxkxricgnglqxjennxppbvvpoewqhkfzhdmvkvpqrdpkjfxpkweuslbvmcjgqqkuxliowdmikecfsfbrkzbrfhdrbjcklwdhovkucltqmcvjdmwljitxfdkobqfpbfqndgiqzifsxtnhdfjsezdsblvgotxvfrgpwjvmrdbnkmbkrwpfipxpksxsjbdohgqpczdtjbcbftdjoeqsrbgpgpzlzzziktkwzlowurizuivwmjmuhordqxldmuinuvsjqktnmidpqcvwtcchfihigsisonphjgidbixrnxszseiskxluosdlxiruwsqtihkezostevsolbvvvqiblipgvsqfcufoquqixlivqbuzjiuegkzscslsvzxsgkiulgdgzipitrfzpsoxflkkrnflekrwnpqxxxmksucjzdcozruhudjbxxuvhzrboineocdikcbbntntfihrvkosoxemmsfhftwxvgowfqilwqlnzstpfogcewnpltqplbnqnpelvmvzhqeimembqotnpnitcgdqqnuskfrxbmkvxdxwdwkxpibeweprhekenmgqrwezqdppmwvmbogfscjkihesotobkikeodopdhfleiizszwvedwljvbixxphgtxmiduigfcwuhthihfihcnkhdvuwlqecepweehqspfoxbdovrjptumsmqhqhtqbpciri
+2
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
+5
+wmmmfdqeogpqikdgtvbpsdffiilflyfcsmwsfvrnccpjgfckjhhqhhqgnqgvcgylolfoowbsqlqzlvnomfmrchdsutqfqcldimofbuuvsbtygikocjfesdrnxgnbfvccnybxopheldhuiyknhqfcertwfhqppnwkqrblcnnhnfzsunhwfrqhvbvnkferkvspfddcnnndkosrwbkzeujdplnhmfxqvvhjvrglpwlrsfvmbmlvtnvxvzznztmgrhbpoyfvmlyymkswjytrkrmzqlxkyxwwdilxzlibzbmbvurbxlechkrtjfiqoqoxxtquuxffsmbkujvknmxselofmyqgrmemuyunjxnrggujbhpohgjtxztxdzeibucpoljztzeetwppvyvpvbgcrqprjroxbynupzfgbhlfvdpzpklkvxgydowvfuibxupnpuwdwrduqyfirmtpoksxzlidyjbnrllwprilghpmwsrjtzqhjidvihgzpyowpxeultygdtxwjlgrzzogrxcozyxmuqzolvkbiryhlnvngipshjkxitrhglqqqkmjleoqtkxuliqtjinysfnbgynippoiqguebqyyyoxpfboqkwrizpkstmbgptmikttnlvkmwzfzrvnxtpdptexnquwivzvlsrvffzpwwurehpwbtwdnvxlmnirbhpwciszbplqzpgvrvterpjsjbfktwsyjxztpppdtdksybqcxwvmllyniuldpsf
+5
+petwmnkzgcfnipqomiilpijwworaylddpptvffqqwnyxfcfgftvwjfcrmlnvfkwolelpuohjqjpidotlgmnreeifbazkpypqoqmewmrfytloekisooocsqwckpoleloszkipkmouxnentrvwnrwjacivvhtolggimuwotceaiutjfcrlrjcenfogiempqwfsdhgycsxfzrapletgzsqqdfeatfrlhvaivvwvciklcyxxkrdnoyptoowfcjymftdkhtlcydlywacbiddskwxppeopzxbbafzznezwlgzyclifmrdajyudadwjvanlcsiiibxcwwdoyrhjiixzwamvhgibbrqvonghddcttdebhfnelvbnxceuwrxaizlhsjhnompengfdsllasusltngecdhfclemsdjgidqrtnclblfckdlfojxokxhkkewwuucbbqxhjxznwpnbfbwhniotpofrhhyulyqtcrtjggkcoqbcsahjsovppaupossivxvyghghgbhbmpbhubvuaitxhzhwzqquzbsvbgvwopzknugmszxwbaimidkhvertfrcgyvmldrdkglaffgqgbdfeomeuiczxrzdtudabcqzkodsbuqwqvmduhzoezyvfxgjkxtzqueffzeggjmdfhzvmnuimskerczdqkmudijrboywqvqnywwvtjgxjcjhbsdsgdlxrsklordfqvlcryjwwlnuukrxgmuqnwlmejlmhbeqypmtiyfqszaznewrijazudajoeyofofolewpzqmkozjxmrkdhpmlgasmhbaerpmeggwbekzcvtqvwfwkowjcvybbjrwsuwinsxfeecekhjlwrnmnxynsidbzhkaumscmxfijfulfcwsltqhavnkkkzvovxdvldpouwunjozdpkmsfmkkjpctlnesclcxcyftlnbmxldqjnqrneykkdijkrpkfjfwgxdycevqvwtiu
+5
+hrmcseotsuzydhgodlmhzsiplkvdehimfndprvlaqhgcyorfuehbplzbqgqnhpehdugkllakcixlfqlmsoraulmtjtsrnpwofwcllesuahohcmzhdqppkwsmfeinxdmxhdhtuohyiakgpzhkdfphwicvhfcwdaoylintktsbesicmqxcmmesngrofskdcokhfsbwmzbnmuuotvpjsxkixxerdwwftfjgsnkfqanoykcneuwrifotzgnwfnvkyltiitirvzpzcujgcmngqmzujmjjenmxidtjavwmkyaxfrroidcrcpwiwqpbwfgauopnwyffudcmkqabzftnrkczmqfsqkctzmsgintloxktbbwfdfygkmxjockjxxasiosdmmodizbmehlhhvhhsvcqtxzplvaxkxeuatrmckozdjvplmgvpcsqqmewsuclezgjryzspruoessywscphjeozatunptxltidskzbxvwtyypybuulzmjnydfdkkeqzazminpkcxzljlanonvrfldrodkcbwhehelsxilltjfhodkcoeqzyxnqwphhxrqwownnbwivlbmuqqihnpbhjccljizetdvxhydsclydriyirzmdlpstmjjzndtqpwbkrslsfazrqqtiuhqzffrmqvdwqanvdxekuynutuemtknbuvemvctpkixqjdnrfyxmjdxuptcnomcdlorryyhrzfiauzgmsyoggndpsviqlfxetqcpvvhkbldsjbktgzztmvnwazqxcbtxxpuzzxcfavpnjyshqmdkstwxrlssrjdjepdthvkpandpazfcbhczbzpkhbqenzsxqtrofyqaacgsykjgdirswhlulwqizekdgyvghybpmbavinwmzxwzelansrcuxxrxuzyxmghgepwabwrk
+5
+sllmsmssqsjlqmsmlmqmlmmjlljsjmljqqmqsmmmjqqllqqjlsmjjljmmmmqjjqlmsmjjqsjlqqmssmmsmmssqmsslqsqqllmsljjlmlmljlqjsmqmsmlmmqlmjjsslmqqmqsjmjsqljqlqssmslmmlsqsjmllmjmqljlsljjqjqsljsqjjsmssmlslmljjsjlqsmmjmlmsqqjsjjjjsssmqsjslljqsqjslqqjlsjmqlmqlqllmlssqlqjmlmmjqmsqssmmlllmlssjqjjljjmlqjjlmqssmmmjmlmssljqqlljlsssqljslmljmjsqqsllqqjmmmsssmsljqjqjmjlqsssslqmqllqmlsqjqqqlqmssmssljlssqlqsllmmmsljqjlsqmlsqqqqqmjqlsjjjqjsjsmjssmmjjmlmslqjjsqjjllqsslmqlqqslqsqqjqllqmqsmmlsmsljmqjjlqlsjlqmlslljmqqqlmssjmmssmsjmjsqmlljlsmlqjsqmmjslqlslsmljmsqmmjljmqsmsjqsssmssjqqlsjlmqslqsjljqqmsmmlmllsqllqlmqsmllqmjmmssjjmqsjmjsllllmmqllmmlqqmllmsjmllssmsjqsjslqqjsqsqlljmmsjjjqljmqsslljslllqjjljlqjqmjmqjqjsslssmslslssqqqslmlmsjqjslqmmsqjqmjmqsjjqssjjsssmqmmllmlslqmjjmqsqsmmjmsjlsjlslsqsmjmjmmlsqsssqlmmlqqsqjlmmmjsmlqjslmmssjmqlmsqqsjjmlqqmlmmsmllllqmsmmqqlsmssmmlqmlmlmjqqqqmjjsqjsmqjssmsljqjjmlmsqllljmjjljmmqmjqsmqmqsjmqmqljlmqqjjjmjmlslsmlssqmssmsjlmmjsssmqsmjjmmqsjjljllsssllmlmjsljqll
+5
+hjmyubnsobbdydvjwasxpnvtovjslfqdonpbgegzdgstzbktxpfltzyhlwygdluirjbhakorponyoaaczhpioxwsvckmpcmsqohiftrvhwjansscitfofouzxcnllzzagokcwicqqzvhrvurexgicrzidclbdxaoropltbxbfghendsozkoeigedjjtenzwwnnemnuuwrdgjckeedjqevvqyjbkiqiwcbnagqcyenbkhauxftjytjfarfdrttogmltfpslzgfwbhtxmwbdgjbefrwebgjxzdlxcqcpjegjgonfakvdnvwrflnrrivpdzlgxaoglzbcgnteadwedlnbkkwjkcxldrczikclcctyhwpggsmuzzzchmfvahzfueauovgaroguxdfdugynwlyzvzlxtxhiusobbzewnuttvscokrfiauzxsxoodpojtiimlakfcuvwuwacojrrmpvlmmnhwucgmczsshqwdrlvojqbrmwkrcrxacsvajkclcczfodvgbiqhqrznochkobopgmzileltgxilzycfhoumkkzqidydmtqlceltfnrwefeyzgzmzniwxumgjeztqeydfohefonikojrzmxxogvcfoilwuyuhhimpchyxjjderkjgtszondklecdhfyruhxwuvrwhlkgaestckvpatdjrxazhnapymgdohgpmtmqrlsmqbqvmgwxencxkvlnofoyuqayscfceqkvcybxbjddyglskkxzwrletjxofyxiudvapvmewjwqvdwnuictftqspilywchpxjzuwsyfyqtibgnzgyihalyllmmeapqogpvvejzpzixzneaxxgsocbbpmufcwpxilayinmxrtmtmclqbqwoowlcpbtbwqawpofkzsmtojrjqazrvtkmxcxocflzpjezticbvatmgstjeb
+5
+ktdkkknttdddndtdnkdkktnntndnndkkktdktdndndttndktttntdntktknttkntndntnnnnkttkktnndntttknddnknkktntttttttndkntnnddtkkddnntnktnddnkktnnktttntknttkdndnkdnnkktktkkndnndkdktdnnkdtdntntnktndtttdnnkdnktntntnttkkdtkktnnndndkdktdkntnndntdttkdndntdkkdkknndkdttntttttktkddntntnnddktnkttkkntntttkkdndkkntndttdtknttnndtktdntktkdntkktdkddtnkktkkdnnddttkktnkkktktnddkdntkntkdndnndkdnntkdtdttnndnknktntntdkkddkdndnnktntdddkddtkttdddkkktddkntttnttkdtntndndndtdknntkkntddndndknktkddkkdtktttdktdnddkkkttknttkttnnkkkdtntd
+5
+qltgyyumtzqmjbsncsjsbawjudsygigcogcklzhiewwuhbkqeqbgftocozakuabkuyzjtrdepuhdjduuudycomwwdfgpwozemcapfkbimlpqsxefghpdnlgehybsplnhandwqfclcdzmtfluxqkazkeexgnulwtbgkceuqatuhmgvxubosbbtggsgnwbuwkignzughyyrslmiowprhqrhqdtiailwxowajrybtjgmksweiixicpgsctqcizscjbrvuzeaycsvnbdvn
+5
+ppwehiipxhpxpttrsehilsshpptsseshspqrpwppthieeqithqheeihlhrwxiihhpshwprrwqixwwxlttetsrrqtlstthllrwewrxwetrwsqhhpetwtqeiiphwqiirixxrxqwwpwsqhilwrxqstqqqelswphxhsqhpptlwpwsxwwwwhtplirxllirhxxplteqeswxxtshlitrxetrltetwlqtrtwsiqeliqrepsqsqlhtplqshwrteqeepqlssiwtewhlipwetphwslpixtweiqwhteixlxtphitxspwrhpeihishwitwestpttiqpqiewtwpehpqxlqhtlpisqrprthsiwlpsslpriheqrhhlsiwtpxrirppqexqqieltpqtslselethlwtxltxptptrlpxrhesrlrtwsxqwxpslexrilrtqpixhhxhrwxrirswtshllwhhxthiqhwtexstplrprrppixrhpteqshisrqqxppplixqsixxpelhrrtwtiqrqsirsexllihhihsqqphelwsserpppiteshiwterwewplpwrxrwestpettlewpsqqeethwqtxsxlqhsqwrtiqeripsrlxswhtxlihxhhshwlilwrlsixtpxexrrhteiiwplspxeqswxhewhiiwitliherhtttwwplxqtxhispieswhqxpqttweseqrsrelpiriwrqrsrlsseeeelwtxtsptltrlplqhlwssthqqwrlqeptpreihtsrqereliwethtwresxqhrlqlxelelesqelhxpeiexhqltqirqehqilxipirsrhrxqwxeqirqxqrltpsiixqslqshwsexxixqxxwqeqpwtlixqsiwserwthpsesletlwtrspeltwqxxqtsqiwwpslxqqeirehiqiirsisrxixxwsihqxlesheisxlpwesprqttwwqhrspwehshhwtxpsehsprrlhtplierrhhrerq
+2
+vftscccjschxljotyvymwofojukeolefwbfutvjteyuczokjwszmogxbgjhtbtlcmzccmbkkvkfyxjzytfsbhfvzechhgtxlckjueugwysgogbtvexljbechjtmkfcwowlzzslzytltuywvkysuueohjhwuccveueuzeefgywubgfjohjzcbfymcbflxxhxychyjowfuvchxhbokseswmmuuhexvtejgtzmgkghgmmouuekuokvxtvxkulyjczzyxtwjucmywfyvmsvfvktsbezlltyjcjmkfmvxwyemckywvjxyuembotksfsgutekskyxxumlltkosukyoxcjmkzzgzlgcbehegoxgxmxwbmstbyhefgkglbosybbvhxwmgbscufstgsfvfufygtwvzvvtsljgfssjbjhtebfgybccbukwtxxchhygtmzlzotchkghejmmmwfuftfeutjhkmmsgxtlmftwtvstumoykvyjhbbcmxybhjyzfzohggczbhhlsbzkltotzjktwezhlheeesjkygyvwfewcuxjggklzhfvhgotzoyzowyxtujlftcvjmuklkuswxzjufffvlkfoebhefkmembbtbsfsufwtglthzlouwvoostufuyzmujejjzjjglfehsjlbhjlecslgoogxfsgwlvjsutglsxtjfyyomvsuzlgwjwywewzhxchxyzmmbczcvtlbclbegvokftxztylextfchhffxkzjoumljohvmlyhmclcxhcjvvhoccmvmxufxxzfglklgexsjmhvwbsxlgkgybccoeuymwhlozhtuvxcbvohjovybgwovclmjejzzyuvjhjhof
diff --git a/codejam_2008/src/y2008round2/D-small-practice.out b/codejam_2008/src/y2008round2/D-small-practice.out
new file mode 100644
index 0000000..9bc470d
--- /dev/null
+++ b/codejam_2008/src/y2008round2/D-small-practice.out
@@ -0,0 +1,20 @@
+Case #1: 870
+Case #2: 233
+Case #3: 100
+Case #4: 461
+Case #5: 431
+Case #6: 861
+Case #7: 318
+Case #8: 915
+Case #9: 948
+Case #10: 730
+Case #11: 1
+Case #12: 698
+Case #13: 925
+Case #14: 875
+Case #15: 749
+Case #16: 889
+Case #17: 366
+Case #18: 249
+Case #19: 886
+Case #20: 806
diff --git a/codejam_2008/src/y2008round2/c.rs b/codejam_2008/src/y2008round2/c.rs
index 0dbed6d..a1959db 100644
--- a/codejam_2008/src/y2008round2/c.rs
+++ b/codejam_2008/src/y2008round2/c.rs
@@ -11,10 +11,7 @@ Geometry
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "C-small-practice",
-            "C-large-practice"
-        ],
+        &["C-small-practice", "C-large-practice"],
         "y2008round2",
         |reader, buffer| {
             let t = reader.read_int();
@@ -36,7 +33,7 @@ pub fn solve_all_cases()
                     .collect();
 
                 if case_no != 1 {
-            //        continue;
+                    //        continue;
                 }
 
                 println!("Solving case {}", case_no);
@@ -91,7 +88,7 @@ fn solve(ships: &[Ship]) -> f64
         let mut max_g = f64::MIN;
         let mut min_h = f64::MAX;
 
-        let valid ;
+        let valid;
         let y = (ub + lb) / 2.;
         debug!("Trying power = {}.  # of ships: {}", y, ships.len());
         /*
@@ -139,11 +136,8 @@ fn solve(ships: &[Ship]) -> f64
                         debug!("G = {}", g);
                         debug!("H = {}", h);
             */
-
-
         }
 
-
         let a = max_a;
         let b = min_b;
         let c = max_c;
diff --git a/codejam_2008/src/y2008round2/d.rs b/codejam_2008/src/y2008round2/d.rs
new file mode 100644
index 0000000..478e403
--- /dev/null
+++ b/codejam_2008/src/y2008round2/d.rs
@@ -0,0 +1,107 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use codejam::util::bitvec64::BitVec64;
+use std::cmp::min;
+use std::i32;
+
+/*
+Hamiltonian path
+Permutations
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &[
+            "D-small-practice",
+            "D-large-practice"
+        ],
+        "y2008round2",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let k = reader.read_int();
+                let s: Vec<char> = reader.read_string().chars().collect();
+
+                if case_no != 1 {
+                    //        continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:.6}", case_no, solve(k, s.as_slice())).unwrap();
+            }
+        },
+    );
+}
+
+
+fn travel(x: usize, y: usize, k: usize, mask: BitVec64, normal: &[Vec<i32>], memo: &mut Vec<Vec<Vec<i32>>> ) -> i32
+{
+    let mut ans: i32 = memo[x][y][mask.data];
+
+    if ans != -1 {
+        return ans;
+    }
+
+    if mask.data == 0 {
+        ans = normal[x][y];
+        memo[x][y][mask.data] = ans;
+        return ans;
+    }
+
+    ans = i32::MAX;
+    for i in 0..k
+    {
+        if mask.get(i) {
+            let mut m_copy = BitVec64::with_val(mask.data);
+            m_copy.set(i, false);
+            ans = min(ans, normal[x][i] + travel(i, y, k, m_copy, normal, memo));
+        }
+    }
+    memo[x][y][mask.data] = ans;
+    return ans;
+}
+
+fn solve(k: usize, s: &[char]) -> i32
+{
+    assert!(s.len() % k == 0);
+
+    //translating bmerry's solution
+    let mut normal = vec![vec![0; k]; k];
+    let mut cross = vec![vec![0; k]; k];
+
+    for block_start in (0..s.len()).step_by(k) {
+        for col_a in 0..k {
+            for col_b in 0..k {
+                normal[col_a][col_b] += if s[block_start + col_a] != s[block_start + col_b] {
+                    1
+                } else {
+                    0
+                };
+                if block_start >= k {
+                    cross[col_a][col_b] += if s[block_start - k + col_a] != s[block_start + col_b] {1} else {0};
+                }
+            }
+        }
+    }
+
+    let mut memo = vec![vec![vec![-1; 1<<k]; k]; k];
+    let mut best = i32::MAX;
+    for col_a in 0..k {
+        for col_b in 0..k {
+            if col_a == col_b {
+                continue;
+            }
+
+
+            let mut mask = BitVec64::with_val( (1 << k) - 1 );
+            mask.set(col_a, false);
+            mask.set(col_b, false);
+            best = min(best, travel(col_a, col_b,k, mask, normal.as_slice(), &mut memo) + cross[col_b][col_a]);
+        }
+    }
+
+    //add change to 1st group (I think)
+    best+1
+}
diff --git a/codejam_2008/src/y2008round2/mod.rs b/codejam_2008/src/y2008round2/mod.rs
index 4f053df..f693abf 100644
--- a/codejam_2008/src/y2008round2/mod.rs
+++ b/codejam_2008/src/y2008round2/mod.rs
@@ -1,3 +1,4 @@
 pub mod a;
 pub mod b;
 pub mod c;
+pub mod d;

From 9243218397fd02e7fc8dc01ce7cc95ec1fb8699e Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 01:27:39 -0300
Subject: [PATCH 069/122] d

---
 codejam_2008/src/y2008round2/d.rs | 64 ++++++++++++++++++-------------
 1 file changed, 38 insertions(+), 26 deletions(-)

diff --git a/codejam_2008/src/y2008round2/d.rs b/codejam_2008/src/y2008round2/d.rs
index 478e403..2a3b52a 100644
--- a/codejam_2008/src/y2008round2/d.rs
+++ b/codejam_2008/src/y2008round2/d.rs
@@ -1,8 +1,8 @@
-use codejam::util::codejam::run_cases;
-use std::io::Write;
 use codejam::util::bitvec64::BitVec64;
+use codejam::util::codejam::run_cases;
 use std::cmp::min;
 use std::i32;
+use std::io::Write;
 
 /*
 Hamiltonian path
@@ -11,10 +11,7 @@ Permutations
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "D-small-practice",
-            "D-large-practice"
-        ],
+        &["D-small-practice", "D-large-practice"],
         "y2008round2",
         |reader, buffer| {
             let t = reader.read_int();
@@ -35,8 +32,15 @@ pub fn solve_all_cases()
     );
 }
 
-
-fn travel(x: usize, y: usize, k: usize, mask: BitVec64, normal: &[Vec<i32>], memo: &mut Vec<Vec<Vec<i32>>> ) -> i32
+//from node x, travel to y visiting all nodes in mask.  x and y do not have to be in mask
+fn travel(
+    x: usize,
+    y: usize,
+    k: usize,
+    mask: BitVec64,
+    edge_cost: &[Vec<i32>],
+    memo: &mut Vec<Vec<Vec<i32>>>,
+) -> i32
 {
     let mut ans: i32 = memo[x][y][mask.data];
 
@@ -45,18 +49,26 @@ fn travel(x: usize, y: usize, k: usize, mask: BitVec64, normal: &[Vec<i32>], mem
     }
 
     if mask.data == 0 {
-        ans = normal[x][y];
+        ans = edge_cost[x][y];
         memo[x][y][mask.data] = ans;
         return ans;
     }
 
     ans = i32::MAX;
-    for i in 0..k
-    {
+    for i in 0..k {
         if mask.get(i) {
-            let mut m_copy = BitVec64::with_val(mask.data);
-            m_copy.set(i, false);
-            ans = min(ans, normal[x][i] + travel(i, y, k, m_copy, normal, memo));
+            ans = min(
+                ans,
+                edge_cost[x][i]
+                    + travel(
+                        i,
+                        y,
+                        k,
+                        BitVec64::with_val(mask.data ^ 1 << i),
+                        edge_cost,
+                        memo,
+                    ),
+            );
         }
     }
     memo[x][y][mask.data] = ans;
@@ -74,19 +86,17 @@ fn solve(k: usize, s: &[char]) -> i32
     for block_start in (0..s.len()).step_by(k) {
         for col_a in 0..k {
             for col_b in 0..k {
-                normal[col_a][col_b] += if s[block_start + col_a] != s[block_start + col_b] {
-                    1
-                } else {
-                    0
-                };
-                if block_start >= k {
-                    cross[col_a][col_b] += if s[block_start - k + col_a] != s[block_start + col_b] {1} else {0};
+                if s[block_start + col_a] != s[block_start + col_b] {
+                    normal[col_a][col_b] += 1;
+                }
+                if block_start >= k && s[block_start - k + col_a] != s[block_start + col_b] {
+                    cross[col_a][col_b] += 1;
                 }
             }
         }
     }
 
-    let mut memo = vec![vec![vec![-1; 1<<k]; k]; k];
+    let mut memo = vec![vec![vec![-1; 1 << k]; k]; k];
     let mut best = i32::MAX;
     for col_a in 0..k {
         for col_b in 0..k {
@@ -94,14 +104,16 @@ fn solve(k: usize, s: &[char]) -> i32
                 continue;
             }
 
-
-            let mut mask = BitVec64::with_val( (1 << k) - 1 );
+            let mut mask = BitVec64::with_val((1 << k) - 1);
             mask.set(col_a, false);
             mask.set(col_b, false);
-            best = min(best, travel(col_a, col_b,k, mask, normal.as_slice(), &mut memo) + cross[col_b][col_a]);
+            best = min(
+                best,
+                travel(col_a, col_b, k, mask, normal.as_slice(), &mut memo) + cross[col_b][col_a],
+            );
         }
     }
 
     //add change to 1st group (I think)
-    best+1
+    best + 1
 }

From 679dd377404287192221d4881c2061ee551d4b19 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 11:11:52 -0300
Subject: [PATCH 070/122] 2017

---
 codejam_2017/Cargo.lock                       |  4 ++
 codejam_2017/Cargo.toml                       |  7 ++
 codejam_2017/src/main.rs                      | 65 +++++++++++++++++++
 .../src/y2017qual/A-large-practice.in         |  0
 .../src/y2017qual/A-large-practice.out        |  0
 .../src/y2017qual/A-small-practice.in         |  0
 .../src/y2017qual/A-small-practice.out        |  0
 .../src/y2017qual/B-large-practice.in         |  0
 .../src/y2017qual/B-large-practice.out        |  0
 .../src/y2017qual/B-small-practice.in         |  0
 .../src/y2017qual/B-small-practice.out        |  0
 .../src/y2017qual/C-large-practice.in         |  0
 .../src/y2017qual/C-large-practice.out        |  0
 .../src/y2017qual/C-small-practice-1.in       |  0
 .../src/y2017qual/C-small-practice-1.out      |  0
 .../src/y2017qual/C-small-practice-2.in       |  0
 .../src/y2017qual/C-small-practice-2.out      |  0
 .../src/y2017qual/D-large-practice.in         |  0
 .../src/y2017qual/D-large-practice.out        |  0
 .../src/y2017qual/D-small-practice.in         |  0
 .../src/y2017qual/D-small-practice.out        |  0
 {codejam => codejam_2017}/src/y2017qual/a.rs  |  0
 {codejam => codejam_2017}/src/y2017qual/b.rs  |  0
 {codejam => codejam_2017}/src/y2017qual/c.rs  |  0
 {codejam => codejam_2017}/src/y2017qual/d.rs  |  0
 .../src/y2017qual/d_debug.rs                  |  0
 .../src/y2017qual/mod.rs                      |  0
 .../src/y2017round1A/A-large-practice.in      |  0
 .../src/y2017round1A/A-large-practice.out     |  0
 .../src/y2017round1A/A-small-practice.in      |  0
 .../src/y2017round1A/A-small-practice.out     |  0
 .../src/y2017round1A/B-large-practice.in      |  0
 .../src/y2017round1A/B-large-practice.out     |  0
 .../src/y2017round1A/B-small-practice.in      |  0
 .../src/y2017round1A/B-small-practice.out     |  0
 .../src/y2017round1A/C-large-practice.in      |  0
 .../src/y2017round1A/C-large-practice.out     |  0
 .../src/y2017round1A/C-small-practice.in      |  0
 .../src/y2017round1A/C-small-practice.out     |  0
 .../src/y2017round1A/a.rs                     |  0
 .../src/y2017round1A/b.rs                     |  0
 .../src/y2017round1A/c.rs                     |  0
 .../src/y2017round1A/mod.rs                   |  0
 .../src/y2017round1B/A-large-practice.in      |  0
 .../src/y2017round1B/A-large-practice.out     |  0
 .../src/y2017round1B/A-small-practice.in      |  0
 .../src/y2017round1B/A-small-practice.out     |  0
 .../src/y2017round1B/B-large-check.out        |  0
 .../src/y2017round1B/B-large-practice.in      |  0
 .../src/y2017round1B/B-large-practice.out     |  0
 .../src/y2017round1B/B-small-practice.in      |  0
 .../src/y2017round1B/B-small-practice.out     |  0
 .../src/y2017round1B/B-test.in                |  0
 .../src/y2017round1B/B_check.rs               |  0
 .../src/y2017round1B/C-large-practice.in      |  0
 .../src/y2017round1B/C-large-practice.out     |  0
 .../src/y2017round1B/C-small-practice.in      |  0
 .../src/y2017round1B/C-small-practice.out     |  0
 .../src/y2017round1B/C-test.in                |  0
 .../src/y2017round1B/a.rs                     |  0
 .../src/y2017round1B/b.rs                     |  0
 .../src/y2017round1B/b_backtracking.rs        |  0
 .../src/y2017round1B/c.rs                     |  0
 .../src/y2017round1B/mod.rs                   |  0
 .../src/y2017round1B/unused_ass_consts.rb     |  0
 .../src/y2017round1C/2.py                     |  0
 .../src/y2017round1C/A-large-practice.in      |  0
 .../src/y2017round1C/A-large-practice.out     |  0
 .../src/y2017round1C/A-small-practice.in      |  0
 .../src/y2017round1C/A-small-practice.out     |  0
 .../src/y2017round1C/B-large-practice.in      |  0
 .../src/y2017round1C/B-large-practice.out     |  0
 .../src/y2017round1C/B-small-practice.in      |  0
 .../src/y2017round1C/B-small-practice.out     |  0
 .../src/y2017round1C/C-small-practice-1.in    |  0
 .../src/y2017round1C/C-small-practice-1.out   |  0
 .../src/y2017round1C/C-small-practice-2.in    |  0
 .../src/y2017round1C/C-small-practice-2.out   |  0
 .../src/y2017round1C/C.py                     |  0
 .../src/y2017round1C/a.rs                     |  0
 .../src/y2017round1C/a_check.rs               |  0
 .../src/y2017round1C/b.rs                     |  0
 .../src/y2017round1C/c.rs                     |  0
 .../src/y2017round1C/mod.rs                   |  0
 .../src/y2017round2/A-large-practice.in       |  0
 .../src/y2017round2/A-large-practice.out      |  0
 .../src/y2017round2/A-small-practice.in       |  0
 .../src/y2017round2/A-small-practice.out      |  0
 .../src/y2017round2/B-large-practice.in       |  0
 .../src/y2017round2/B-large-practice.out      |  0
 .../src/y2017round2/B-small-practice.in       |  0
 .../src/y2017round2/B-small-practice.out      |  0
 .../src/y2017round2/B_check.rs                |  0
 .../C-large-practice-backtracking.out         |  0
 .../src/y2017round2/C-large-practice.in       |  0
 .../src/y2017round2/C-large-practice.out      |  0
 .../C-small-practice-backtracking.out         |  0
 .../src/y2017round2/C-small-practice.in       |  0
 .../src/y2017round2/C-small-practice.out      |  0
 .../src/y2017round2/C_check.rs                |  0
 .../src/y2017round2/D-large-practice.in       |  0
 .../src/y2017round2/D-large-practice.out      |  0
 .../src/y2017round2/D-small-practice.in       |  0
 .../src/y2017round2/D-small-practice.out      |  0
 .../src/y2017round2/a.rs                      |  0
 .../src/y2017round2/a_check.rs                |  0
 .../src/y2017round2/b.rs                      |  0
 .../src/y2017round2/c.rs                      |  0
 .../src/y2017round2/d.rs                      |  0
 .../src/y2017round2/mod.rs                    |  0
 .../src/y2017round3/A-large-practice.in       |  0
 .../src/y2017round3/A-large-practice.out      |  0
 .../src/y2017round3/A-small-practice.in       |  0
 .../src/y2017round3/A-small-practice.out      |  0
 .../src/y2017round3/B-large-practice.in       |  0
 .../src/y2017round3/B-large-practice.out      |  0
 .../src/y2017round3/B-small-practice.in       |  0
 .../src/y2017round3/B-small-practice.out      |  0
 .../src/y2017round3/C-large-practice.in       |  0
 .../src/y2017round3/C-large-practice.out      |  0
 .../src/y2017round3/C-small-practice.in       |  0
 .../src/y2017round3/C-small-practice.out      |  0
 .../src/y2017round3/D-large-practice.in       |  0
 .../src/y2017round3/D-large-practice.out      |  0
 .../src/y2017round3/D-small-practice.in       |  0
 .../src/y2017round3/D-small-practice.out      |  0
 .../src/y2017round3/Errichto.rekt_3_1/d.cpp   |  0
 .../src/y2017round3/Nore_3_1/D.py             |  0
 .../src/y2017round3/a.py                      |  0
 .../src/y2017round3/a.rs                      |  0
 .../src/y2017round3/b.py                      |  0
 .../src/y2017round3/b.rs                      |  0
 .../src/y2017round3/c.rs                      |  0
 .../src/y2017round3/d.rs                      |  0
 .../src/y2017round3/kevinsogo_3_1/d.py        |  0
 .../src/y2017round3/linguo_3_1/d2.py          |  0
 .../src/y2017round3/mod.rs                    |  0
 .../src/y2017round4/A-large-practice.in       |  0
 .../src/y2017round4/A-large-practice.out      |  0
 .../src/y2017round4/A-small-practice.in       |  0
 .../src/y2017round4/A-small-practice.out      |  0
 .../src/y2017round4/A.cpp                     |  0
 .../src/y2017round4/A.java                    |  0
 .../src/y2017round4/B-large-practice.in       |  0
 .../src/y2017round4/B-large-practice.out      |  0
 .../src/y2017round4/B-small-practice.in       |  0
 .../src/y2017round4/B-small-practice.out      |  0
 .../src/y2017round4/C-small-practice.in       |  0
 .../src/y2017round4/C-small-practice.out      |  0
 .../src/y2017round4/D-large-practice.in       |  0
 .../src/y2017round4/D-large-practice.out      |  0
 .../src/y2017round4/D-small-practice.in       |  0
 .../src/y2017round4/D-small-practice.out      |  0
 .../src/y2017round4/E-large-practice.in       |  0
 .../src/y2017round4/E-large-practice.out      |  0
 .../src/y2017round4/E-small-practice.in       |  0
 .../src/y2017round4/E-small-practice.out      |  0
 .../src/y2017round4/F-large-practice.in       |  0
 .../src/y2017round4/F-large-practice.out      |  0
 .../src/y2017round4/F-small-practice.in       |  0
 .../src/y2017round4/F-small-practice.out      |  0
 .../Gennady.Korotkevich_2_0/gen.cpp           |  0
 .../src/y2017round4/TeleportersLarge.java     |  0
 .../src/y2017round4/a.rs                      |  0
 .../src/y2017round4/b.rs                      |  0
 .../src/y2017round4/c.rs                      |  0
 .../src/y2017round4/d.rs                      |  0
 .../src/y2017round4/e.rs                      |  0
 .../src/y2017round4/eatmore_3_1/D.java        |  0
 .../src/y2017round4/f.rs                      |  0
 .../src/y2017round4/f_small.rs                |  0
 .../src/y2017round4/mod.rs                    |  0
 172 files changed, 76 insertions(+)
 create mode 100644 codejam_2017/Cargo.lock
 create mode 100644 codejam_2017/Cargo.toml
 create mode 100644 codejam_2017/src/main.rs
 rename {codejam => codejam_2017}/src/y2017qual/A-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/A-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/A-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/A-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/B-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/B-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/B-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/B-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/C-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/C-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/C-small-practice-1.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/C-small-practice-1.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/C-small-practice-2.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/C-small-practice-2.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/D-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/D-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/D-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017qual/D-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017qual/a.rs (100%)
 rename {codejam => codejam_2017}/src/y2017qual/b.rs (100%)
 rename {codejam => codejam_2017}/src/y2017qual/c.rs (100%)
 rename {codejam => codejam_2017}/src/y2017qual/d.rs (100%)
 rename {codejam => codejam_2017}/src/y2017qual/d_debug.rs (100%)
 rename {codejam => codejam_2017}/src/y2017qual/mod.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/A-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/A-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/A-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/A-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/B-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/B-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/B-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/B-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/C-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/C-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/C-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/C-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/a.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/b.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/c.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1A/mod.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/A-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/A-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/A-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/A-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/B-large-check.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/B-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/B-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/B-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/B-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/B-test.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/B_check.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/C-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/C-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/C-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/C-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/C-test.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/a.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/b.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/b_backtracking.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/c.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/mod.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1B/unused_ass_consts.rb (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/2.py (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/A-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/A-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/A-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/A-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/B-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/B-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/B-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/B-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/C-small-practice-1.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/C-small-practice-1.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/C-small-practice-2.in (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/C-small-practice-2.out (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/C.py (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/a.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/a_check.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/b.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/c.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round1C/mod.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/A-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/A-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/A-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/A-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/B-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/B-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/B-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/B-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/B_check.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/C-large-practice-backtracking.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/C-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/C-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/C-small-practice-backtracking.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/C-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/C-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/C_check.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/D-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/D-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/D-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round2/D-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round2/a.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/a_check.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/b.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/c.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/d.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round2/mod.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round3/A-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/A-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/A-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/A-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/B-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/B-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/B-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/B-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/C-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/C-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/C-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/C-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/D-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/D-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/D-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round3/D-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round3/Errichto.rekt_3_1/d.cpp (100%)
 rename {codejam => codejam_2017}/src/y2017round3/Nore_3_1/D.py (100%)
 rename {codejam => codejam_2017}/src/y2017round3/a.py (100%)
 rename {codejam => codejam_2017}/src/y2017round3/a.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round3/b.py (100%)
 rename {codejam => codejam_2017}/src/y2017round3/b.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round3/c.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round3/d.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round3/kevinsogo_3_1/d.py (100%)
 rename {codejam => codejam_2017}/src/y2017round3/linguo_3_1/d2.py (100%)
 rename {codejam => codejam_2017}/src/y2017round3/mod.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/A-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/A-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/A-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/A-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/A.cpp (100%)
 rename {codejam => codejam_2017}/src/y2017round4/A.java (100%)
 rename {codejam => codejam_2017}/src/y2017round4/B-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/B-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/B-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/B-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/C-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/C-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/D-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/D-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/D-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/D-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/E-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/E-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/E-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/E-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/F-large-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/F-large-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/F-small-practice.in (100%)
 rename {codejam => codejam_2017}/src/y2017round4/F-small-practice.out (100%)
 rename {codejam => codejam_2017}/src/y2017round4/Gennady.Korotkevich_2_0/gen.cpp (100%)
 rename {codejam => codejam_2017}/src/y2017round4/TeleportersLarge.java (100%)
 rename {codejam => codejam_2017}/src/y2017round4/a.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/b.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/c.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/d.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/e.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/eatmore_3_1/D.java (100%)
 rename {codejam => codejam_2017}/src/y2017round4/f.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/f_small.rs (100%)
 rename {codejam => codejam_2017}/src/y2017round4/mod.rs (100%)

diff --git a/codejam_2017/Cargo.lock b/codejam_2017/Cargo.lock
new file mode 100644
index 0000000..5de6db1
--- /dev/null
+++ b/codejam_2017/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "codejam_2017"
+version = "0.1.0"
+
diff --git a/codejam_2017/Cargo.toml b/codejam_2017/Cargo.toml
new file mode 100644
index 0000000..5affb09
--- /dev/null
+++ b/codejam_2017/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "codejam_2017"
+version = "0.1.0"
+authors = ["eric7237cire <eric7237cire@gmail.com>"]
+edition = "2018"
+
+[dependencies]
diff --git a/codejam_2017/src/main.rs b/codejam_2017/src/main.rs
new file mode 100644
index 0000000..a2b287c
--- /dev/null
+++ b/codejam_2017/src/main.rs
@@ -0,0 +1,65 @@
+//#![allow(non_snake_case)]
+
+mod y2017qual;
+mod y2017round1a;
+mod y2017round1b;
+mod y2017round1c;
+mod y2017round2;
+mod y2017round3;
+mod y2017round4;
+
+extern crate codejam;
+
+/*#[macro_use]
+extern crate itertools;*/
+
+#[macro_use]
+extern crate log;
+
+use codejam::util::log::init_log;
+
+pub fn run_y2017_round_qual()
+{
+    y2017qual::a::solve_all_cases();
+    y2017qual::b::solve_all_cases();
+    y2017qual::c::solve_all_cases();
+}
+
+pub fn run_y2017_round_1a()
+{
+    y2017round1a::a::solve_all_cases();
+    y2017round1a::b::solve_all_cases();
+    y2017round1a::c::solve_all_cases();
+}
+
+pub fn run_y2017_round_1b()
+{
+    y2017round1b::a::solve_all_cases();
+    y2017round1b::b::solve_all_cases();
+    y2017round1b::c::solve_all_cases();
+}
+
+pub fn run_y2017_round_1c()
+{
+    y2017round1c::a::solve_all_cases();
+    y2017round1c::b::solve_all_cases();
+    y2017round1c::c::solve_all_cases();
+}
+
+pub fn run_y2017_round2()
+{
+    y2017round2::a::solve_all_cases();
+    y2017round2::b::solve_all_cases();
+    y2017round2::c::solve_all_cases();
+}
+
+fn main()
+{
+    init_log();
+
+    y2017round2::d::solve_all_cases();
+
+    /*   run_y2017_round_qual();
+    run_y2017_round_practice();
+    run_y2017_round_beta();*/
+}
diff --git a/codejam/src/y2017qual/A-large-practice.in b/codejam_2017/src/y2017qual/A-large-practice.in
similarity index 100%
rename from codejam/src/y2017qual/A-large-practice.in
rename to codejam_2017/src/y2017qual/A-large-practice.in
diff --git a/codejam/src/y2017qual/A-large-practice.out b/codejam_2017/src/y2017qual/A-large-practice.out
similarity index 100%
rename from codejam/src/y2017qual/A-large-practice.out
rename to codejam_2017/src/y2017qual/A-large-practice.out
diff --git a/codejam/src/y2017qual/A-small-practice.in b/codejam_2017/src/y2017qual/A-small-practice.in
similarity index 100%
rename from codejam/src/y2017qual/A-small-practice.in
rename to codejam_2017/src/y2017qual/A-small-practice.in
diff --git a/codejam/src/y2017qual/A-small-practice.out b/codejam_2017/src/y2017qual/A-small-practice.out
similarity index 100%
rename from codejam/src/y2017qual/A-small-practice.out
rename to codejam_2017/src/y2017qual/A-small-practice.out
diff --git a/codejam/src/y2017qual/B-large-practice.in b/codejam_2017/src/y2017qual/B-large-practice.in
similarity index 100%
rename from codejam/src/y2017qual/B-large-practice.in
rename to codejam_2017/src/y2017qual/B-large-practice.in
diff --git a/codejam/src/y2017qual/B-large-practice.out b/codejam_2017/src/y2017qual/B-large-practice.out
similarity index 100%
rename from codejam/src/y2017qual/B-large-practice.out
rename to codejam_2017/src/y2017qual/B-large-practice.out
diff --git a/codejam/src/y2017qual/B-small-practice.in b/codejam_2017/src/y2017qual/B-small-practice.in
similarity index 100%
rename from codejam/src/y2017qual/B-small-practice.in
rename to codejam_2017/src/y2017qual/B-small-practice.in
diff --git a/codejam/src/y2017qual/B-small-practice.out b/codejam_2017/src/y2017qual/B-small-practice.out
similarity index 100%
rename from codejam/src/y2017qual/B-small-practice.out
rename to codejam_2017/src/y2017qual/B-small-practice.out
diff --git a/codejam/src/y2017qual/C-large-practice.in b/codejam_2017/src/y2017qual/C-large-practice.in
similarity index 100%
rename from codejam/src/y2017qual/C-large-practice.in
rename to codejam_2017/src/y2017qual/C-large-practice.in
diff --git a/codejam/src/y2017qual/C-large-practice.out b/codejam_2017/src/y2017qual/C-large-practice.out
similarity index 100%
rename from codejam/src/y2017qual/C-large-practice.out
rename to codejam_2017/src/y2017qual/C-large-practice.out
diff --git a/codejam/src/y2017qual/C-small-practice-1.in b/codejam_2017/src/y2017qual/C-small-practice-1.in
similarity index 100%
rename from codejam/src/y2017qual/C-small-practice-1.in
rename to codejam_2017/src/y2017qual/C-small-practice-1.in
diff --git a/codejam/src/y2017qual/C-small-practice-1.out b/codejam_2017/src/y2017qual/C-small-practice-1.out
similarity index 100%
rename from codejam/src/y2017qual/C-small-practice-1.out
rename to codejam_2017/src/y2017qual/C-small-practice-1.out
diff --git a/codejam/src/y2017qual/C-small-practice-2.in b/codejam_2017/src/y2017qual/C-small-practice-2.in
similarity index 100%
rename from codejam/src/y2017qual/C-small-practice-2.in
rename to codejam_2017/src/y2017qual/C-small-practice-2.in
diff --git a/codejam/src/y2017qual/C-small-practice-2.out b/codejam_2017/src/y2017qual/C-small-practice-2.out
similarity index 100%
rename from codejam/src/y2017qual/C-small-practice-2.out
rename to codejam_2017/src/y2017qual/C-small-practice-2.out
diff --git a/codejam/src/y2017qual/D-large-practice.in b/codejam_2017/src/y2017qual/D-large-practice.in
similarity index 100%
rename from codejam/src/y2017qual/D-large-practice.in
rename to codejam_2017/src/y2017qual/D-large-practice.in
diff --git a/codejam/src/y2017qual/D-large-practice.out b/codejam_2017/src/y2017qual/D-large-practice.out
similarity index 100%
rename from codejam/src/y2017qual/D-large-practice.out
rename to codejam_2017/src/y2017qual/D-large-practice.out
diff --git a/codejam/src/y2017qual/D-small-practice.in b/codejam_2017/src/y2017qual/D-small-practice.in
similarity index 100%
rename from codejam/src/y2017qual/D-small-practice.in
rename to codejam_2017/src/y2017qual/D-small-practice.in
diff --git a/codejam/src/y2017qual/D-small-practice.out b/codejam_2017/src/y2017qual/D-small-practice.out
similarity index 100%
rename from codejam/src/y2017qual/D-small-practice.out
rename to codejam_2017/src/y2017qual/D-small-practice.out
diff --git a/codejam/src/y2017qual/a.rs b/codejam_2017/src/y2017qual/a.rs
similarity index 100%
rename from codejam/src/y2017qual/a.rs
rename to codejam_2017/src/y2017qual/a.rs
diff --git a/codejam/src/y2017qual/b.rs b/codejam_2017/src/y2017qual/b.rs
similarity index 100%
rename from codejam/src/y2017qual/b.rs
rename to codejam_2017/src/y2017qual/b.rs
diff --git a/codejam/src/y2017qual/c.rs b/codejam_2017/src/y2017qual/c.rs
similarity index 100%
rename from codejam/src/y2017qual/c.rs
rename to codejam_2017/src/y2017qual/c.rs
diff --git a/codejam/src/y2017qual/d.rs b/codejam_2017/src/y2017qual/d.rs
similarity index 100%
rename from codejam/src/y2017qual/d.rs
rename to codejam_2017/src/y2017qual/d.rs
diff --git a/codejam/src/y2017qual/d_debug.rs b/codejam_2017/src/y2017qual/d_debug.rs
similarity index 100%
rename from codejam/src/y2017qual/d_debug.rs
rename to codejam_2017/src/y2017qual/d_debug.rs
diff --git a/codejam/src/y2017qual/mod.rs b/codejam_2017/src/y2017qual/mod.rs
similarity index 100%
rename from codejam/src/y2017qual/mod.rs
rename to codejam_2017/src/y2017qual/mod.rs
diff --git a/codejam/src/y2017round1A/A-large-practice.in b/codejam_2017/src/y2017round1A/A-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1A/A-large-practice.in
rename to codejam_2017/src/y2017round1A/A-large-practice.in
diff --git a/codejam/src/y2017round1A/A-large-practice.out b/codejam_2017/src/y2017round1A/A-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1A/A-large-practice.out
rename to codejam_2017/src/y2017round1A/A-large-practice.out
diff --git a/codejam/src/y2017round1A/A-small-practice.in b/codejam_2017/src/y2017round1A/A-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1A/A-small-practice.in
rename to codejam_2017/src/y2017round1A/A-small-practice.in
diff --git a/codejam/src/y2017round1A/A-small-practice.out b/codejam_2017/src/y2017round1A/A-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1A/A-small-practice.out
rename to codejam_2017/src/y2017round1A/A-small-practice.out
diff --git a/codejam/src/y2017round1A/B-large-practice.in b/codejam_2017/src/y2017round1A/B-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1A/B-large-practice.in
rename to codejam_2017/src/y2017round1A/B-large-practice.in
diff --git a/codejam/src/y2017round1A/B-large-practice.out b/codejam_2017/src/y2017round1A/B-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1A/B-large-practice.out
rename to codejam_2017/src/y2017round1A/B-large-practice.out
diff --git a/codejam/src/y2017round1A/B-small-practice.in b/codejam_2017/src/y2017round1A/B-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1A/B-small-practice.in
rename to codejam_2017/src/y2017round1A/B-small-practice.in
diff --git a/codejam/src/y2017round1A/B-small-practice.out b/codejam_2017/src/y2017round1A/B-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1A/B-small-practice.out
rename to codejam_2017/src/y2017round1A/B-small-practice.out
diff --git a/codejam/src/y2017round1A/C-large-practice.in b/codejam_2017/src/y2017round1A/C-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1A/C-large-practice.in
rename to codejam_2017/src/y2017round1A/C-large-practice.in
diff --git a/codejam/src/y2017round1A/C-large-practice.out b/codejam_2017/src/y2017round1A/C-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1A/C-large-practice.out
rename to codejam_2017/src/y2017round1A/C-large-practice.out
diff --git a/codejam/src/y2017round1A/C-small-practice.in b/codejam_2017/src/y2017round1A/C-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1A/C-small-practice.in
rename to codejam_2017/src/y2017round1A/C-small-practice.in
diff --git a/codejam/src/y2017round1A/C-small-practice.out b/codejam_2017/src/y2017round1A/C-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1A/C-small-practice.out
rename to codejam_2017/src/y2017round1A/C-small-practice.out
diff --git a/codejam/src/y2017round1A/a.rs b/codejam_2017/src/y2017round1A/a.rs
similarity index 100%
rename from codejam/src/y2017round1A/a.rs
rename to codejam_2017/src/y2017round1A/a.rs
diff --git a/codejam/src/y2017round1A/b.rs b/codejam_2017/src/y2017round1A/b.rs
similarity index 100%
rename from codejam/src/y2017round1A/b.rs
rename to codejam_2017/src/y2017round1A/b.rs
diff --git a/codejam/src/y2017round1A/c.rs b/codejam_2017/src/y2017round1A/c.rs
similarity index 100%
rename from codejam/src/y2017round1A/c.rs
rename to codejam_2017/src/y2017round1A/c.rs
diff --git a/codejam/src/y2017round1A/mod.rs b/codejam_2017/src/y2017round1A/mod.rs
similarity index 100%
rename from codejam/src/y2017round1A/mod.rs
rename to codejam_2017/src/y2017round1A/mod.rs
diff --git a/codejam/src/y2017round1B/A-large-practice.in b/codejam_2017/src/y2017round1B/A-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1B/A-large-practice.in
rename to codejam_2017/src/y2017round1B/A-large-practice.in
diff --git a/codejam/src/y2017round1B/A-large-practice.out b/codejam_2017/src/y2017round1B/A-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1B/A-large-practice.out
rename to codejam_2017/src/y2017round1B/A-large-practice.out
diff --git a/codejam/src/y2017round1B/A-small-practice.in b/codejam_2017/src/y2017round1B/A-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1B/A-small-practice.in
rename to codejam_2017/src/y2017round1B/A-small-practice.in
diff --git a/codejam/src/y2017round1B/A-small-practice.out b/codejam_2017/src/y2017round1B/A-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1B/A-small-practice.out
rename to codejam_2017/src/y2017round1B/A-small-practice.out
diff --git a/codejam/src/y2017round1B/B-large-check.out b/codejam_2017/src/y2017round1B/B-large-check.out
similarity index 100%
rename from codejam/src/y2017round1B/B-large-check.out
rename to codejam_2017/src/y2017round1B/B-large-check.out
diff --git a/codejam/src/y2017round1B/B-large-practice.in b/codejam_2017/src/y2017round1B/B-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1B/B-large-practice.in
rename to codejam_2017/src/y2017round1B/B-large-practice.in
diff --git a/codejam/src/y2017round1B/B-large-practice.out b/codejam_2017/src/y2017round1B/B-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1B/B-large-practice.out
rename to codejam_2017/src/y2017round1B/B-large-practice.out
diff --git a/codejam/src/y2017round1B/B-small-practice.in b/codejam_2017/src/y2017round1B/B-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1B/B-small-practice.in
rename to codejam_2017/src/y2017round1B/B-small-practice.in
diff --git a/codejam/src/y2017round1B/B-small-practice.out b/codejam_2017/src/y2017round1B/B-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1B/B-small-practice.out
rename to codejam_2017/src/y2017round1B/B-small-practice.out
diff --git a/codejam/src/y2017round1B/B-test.in b/codejam_2017/src/y2017round1B/B-test.in
similarity index 100%
rename from codejam/src/y2017round1B/B-test.in
rename to codejam_2017/src/y2017round1B/B-test.in
diff --git a/codejam/src/y2017round1B/B_check.rs b/codejam_2017/src/y2017round1B/B_check.rs
similarity index 100%
rename from codejam/src/y2017round1B/B_check.rs
rename to codejam_2017/src/y2017round1B/B_check.rs
diff --git a/codejam/src/y2017round1B/C-large-practice.in b/codejam_2017/src/y2017round1B/C-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1B/C-large-practice.in
rename to codejam_2017/src/y2017round1B/C-large-practice.in
diff --git a/codejam/src/y2017round1B/C-large-practice.out b/codejam_2017/src/y2017round1B/C-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1B/C-large-practice.out
rename to codejam_2017/src/y2017round1B/C-large-practice.out
diff --git a/codejam/src/y2017round1B/C-small-practice.in b/codejam_2017/src/y2017round1B/C-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1B/C-small-practice.in
rename to codejam_2017/src/y2017round1B/C-small-practice.in
diff --git a/codejam/src/y2017round1B/C-small-practice.out b/codejam_2017/src/y2017round1B/C-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1B/C-small-practice.out
rename to codejam_2017/src/y2017round1B/C-small-practice.out
diff --git a/codejam/src/y2017round1B/C-test.in b/codejam_2017/src/y2017round1B/C-test.in
similarity index 100%
rename from codejam/src/y2017round1B/C-test.in
rename to codejam_2017/src/y2017round1B/C-test.in
diff --git a/codejam/src/y2017round1B/a.rs b/codejam_2017/src/y2017round1B/a.rs
similarity index 100%
rename from codejam/src/y2017round1B/a.rs
rename to codejam_2017/src/y2017round1B/a.rs
diff --git a/codejam/src/y2017round1B/b.rs b/codejam_2017/src/y2017round1B/b.rs
similarity index 100%
rename from codejam/src/y2017round1B/b.rs
rename to codejam_2017/src/y2017round1B/b.rs
diff --git a/codejam/src/y2017round1B/b_backtracking.rs b/codejam_2017/src/y2017round1B/b_backtracking.rs
similarity index 100%
rename from codejam/src/y2017round1B/b_backtracking.rs
rename to codejam_2017/src/y2017round1B/b_backtracking.rs
diff --git a/codejam/src/y2017round1B/c.rs b/codejam_2017/src/y2017round1B/c.rs
similarity index 100%
rename from codejam/src/y2017round1B/c.rs
rename to codejam_2017/src/y2017round1B/c.rs
diff --git a/codejam/src/y2017round1B/mod.rs b/codejam_2017/src/y2017round1B/mod.rs
similarity index 100%
rename from codejam/src/y2017round1B/mod.rs
rename to codejam_2017/src/y2017round1B/mod.rs
diff --git a/codejam/src/y2017round1B/unused_ass_consts.rb b/codejam_2017/src/y2017round1B/unused_ass_consts.rb
similarity index 100%
rename from codejam/src/y2017round1B/unused_ass_consts.rb
rename to codejam_2017/src/y2017round1B/unused_ass_consts.rb
diff --git a/codejam/src/y2017round1C/2.py b/codejam_2017/src/y2017round1C/2.py
similarity index 100%
rename from codejam/src/y2017round1C/2.py
rename to codejam_2017/src/y2017round1C/2.py
diff --git a/codejam/src/y2017round1C/A-large-practice.in b/codejam_2017/src/y2017round1C/A-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1C/A-large-practice.in
rename to codejam_2017/src/y2017round1C/A-large-practice.in
diff --git a/codejam/src/y2017round1C/A-large-practice.out b/codejam_2017/src/y2017round1C/A-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1C/A-large-practice.out
rename to codejam_2017/src/y2017round1C/A-large-practice.out
diff --git a/codejam/src/y2017round1C/A-small-practice.in b/codejam_2017/src/y2017round1C/A-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1C/A-small-practice.in
rename to codejam_2017/src/y2017round1C/A-small-practice.in
diff --git a/codejam/src/y2017round1C/A-small-practice.out b/codejam_2017/src/y2017round1C/A-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1C/A-small-practice.out
rename to codejam_2017/src/y2017round1C/A-small-practice.out
diff --git a/codejam/src/y2017round1C/B-large-practice.in b/codejam_2017/src/y2017round1C/B-large-practice.in
similarity index 100%
rename from codejam/src/y2017round1C/B-large-practice.in
rename to codejam_2017/src/y2017round1C/B-large-practice.in
diff --git a/codejam/src/y2017round1C/B-large-practice.out b/codejam_2017/src/y2017round1C/B-large-practice.out
similarity index 100%
rename from codejam/src/y2017round1C/B-large-practice.out
rename to codejam_2017/src/y2017round1C/B-large-practice.out
diff --git a/codejam/src/y2017round1C/B-small-practice.in b/codejam_2017/src/y2017round1C/B-small-practice.in
similarity index 100%
rename from codejam/src/y2017round1C/B-small-practice.in
rename to codejam_2017/src/y2017round1C/B-small-practice.in
diff --git a/codejam/src/y2017round1C/B-small-practice.out b/codejam_2017/src/y2017round1C/B-small-practice.out
similarity index 100%
rename from codejam/src/y2017round1C/B-small-practice.out
rename to codejam_2017/src/y2017round1C/B-small-practice.out
diff --git a/codejam/src/y2017round1C/C-small-practice-1.in b/codejam_2017/src/y2017round1C/C-small-practice-1.in
similarity index 100%
rename from codejam/src/y2017round1C/C-small-practice-1.in
rename to codejam_2017/src/y2017round1C/C-small-practice-1.in
diff --git a/codejam/src/y2017round1C/C-small-practice-1.out b/codejam_2017/src/y2017round1C/C-small-practice-1.out
similarity index 100%
rename from codejam/src/y2017round1C/C-small-practice-1.out
rename to codejam_2017/src/y2017round1C/C-small-practice-1.out
diff --git a/codejam/src/y2017round1C/C-small-practice-2.in b/codejam_2017/src/y2017round1C/C-small-practice-2.in
similarity index 100%
rename from codejam/src/y2017round1C/C-small-practice-2.in
rename to codejam_2017/src/y2017round1C/C-small-practice-2.in
diff --git a/codejam/src/y2017round1C/C-small-practice-2.out b/codejam_2017/src/y2017round1C/C-small-practice-2.out
similarity index 100%
rename from codejam/src/y2017round1C/C-small-practice-2.out
rename to codejam_2017/src/y2017round1C/C-small-practice-2.out
diff --git a/codejam/src/y2017round1C/C.py b/codejam_2017/src/y2017round1C/C.py
similarity index 100%
rename from codejam/src/y2017round1C/C.py
rename to codejam_2017/src/y2017round1C/C.py
diff --git a/codejam/src/y2017round1C/a.rs b/codejam_2017/src/y2017round1C/a.rs
similarity index 100%
rename from codejam/src/y2017round1C/a.rs
rename to codejam_2017/src/y2017round1C/a.rs
diff --git a/codejam/src/y2017round1C/a_check.rs b/codejam_2017/src/y2017round1C/a_check.rs
similarity index 100%
rename from codejam/src/y2017round1C/a_check.rs
rename to codejam_2017/src/y2017round1C/a_check.rs
diff --git a/codejam/src/y2017round1C/b.rs b/codejam_2017/src/y2017round1C/b.rs
similarity index 100%
rename from codejam/src/y2017round1C/b.rs
rename to codejam_2017/src/y2017round1C/b.rs
diff --git a/codejam/src/y2017round1C/c.rs b/codejam_2017/src/y2017round1C/c.rs
similarity index 100%
rename from codejam/src/y2017round1C/c.rs
rename to codejam_2017/src/y2017round1C/c.rs
diff --git a/codejam/src/y2017round1C/mod.rs b/codejam_2017/src/y2017round1C/mod.rs
similarity index 100%
rename from codejam/src/y2017round1C/mod.rs
rename to codejam_2017/src/y2017round1C/mod.rs
diff --git a/codejam/src/y2017round2/A-large-practice.in b/codejam_2017/src/y2017round2/A-large-practice.in
similarity index 100%
rename from codejam/src/y2017round2/A-large-practice.in
rename to codejam_2017/src/y2017round2/A-large-practice.in
diff --git a/codejam/src/y2017round2/A-large-practice.out b/codejam_2017/src/y2017round2/A-large-practice.out
similarity index 100%
rename from codejam/src/y2017round2/A-large-practice.out
rename to codejam_2017/src/y2017round2/A-large-practice.out
diff --git a/codejam/src/y2017round2/A-small-practice.in b/codejam_2017/src/y2017round2/A-small-practice.in
similarity index 100%
rename from codejam/src/y2017round2/A-small-practice.in
rename to codejam_2017/src/y2017round2/A-small-practice.in
diff --git a/codejam/src/y2017round2/A-small-practice.out b/codejam_2017/src/y2017round2/A-small-practice.out
similarity index 100%
rename from codejam/src/y2017round2/A-small-practice.out
rename to codejam_2017/src/y2017round2/A-small-practice.out
diff --git a/codejam/src/y2017round2/B-large-practice.in b/codejam_2017/src/y2017round2/B-large-practice.in
similarity index 100%
rename from codejam/src/y2017round2/B-large-practice.in
rename to codejam_2017/src/y2017round2/B-large-practice.in
diff --git a/codejam/src/y2017round2/B-large-practice.out b/codejam_2017/src/y2017round2/B-large-practice.out
similarity index 100%
rename from codejam/src/y2017round2/B-large-practice.out
rename to codejam_2017/src/y2017round2/B-large-practice.out
diff --git a/codejam/src/y2017round2/B-small-practice.in b/codejam_2017/src/y2017round2/B-small-practice.in
similarity index 100%
rename from codejam/src/y2017round2/B-small-practice.in
rename to codejam_2017/src/y2017round2/B-small-practice.in
diff --git a/codejam/src/y2017round2/B-small-practice.out b/codejam_2017/src/y2017round2/B-small-practice.out
similarity index 100%
rename from codejam/src/y2017round2/B-small-practice.out
rename to codejam_2017/src/y2017round2/B-small-practice.out
diff --git a/codejam/src/y2017round2/B_check.rs b/codejam_2017/src/y2017round2/B_check.rs
similarity index 100%
rename from codejam/src/y2017round2/B_check.rs
rename to codejam_2017/src/y2017round2/B_check.rs
diff --git a/codejam/src/y2017round2/C-large-practice-backtracking.out b/codejam_2017/src/y2017round2/C-large-practice-backtracking.out
similarity index 100%
rename from codejam/src/y2017round2/C-large-practice-backtracking.out
rename to codejam_2017/src/y2017round2/C-large-practice-backtracking.out
diff --git a/codejam/src/y2017round2/C-large-practice.in b/codejam_2017/src/y2017round2/C-large-practice.in
similarity index 100%
rename from codejam/src/y2017round2/C-large-practice.in
rename to codejam_2017/src/y2017round2/C-large-practice.in
diff --git a/codejam/src/y2017round2/C-large-practice.out b/codejam_2017/src/y2017round2/C-large-practice.out
similarity index 100%
rename from codejam/src/y2017round2/C-large-practice.out
rename to codejam_2017/src/y2017round2/C-large-practice.out
diff --git a/codejam/src/y2017round2/C-small-practice-backtracking.out b/codejam_2017/src/y2017round2/C-small-practice-backtracking.out
similarity index 100%
rename from codejam/src/y2017round2/C-small-practice-backtracking.out
rename to codejam_2017/src/y2017round2/C-small-practice-backtracking.out
diff --git a/codejam/src/y2017round2/C-small-practice.in b/codejam_2017/src/y2017round2/C-small-practice.in
similarity index 100%
rename from codejam/src/y2017round2/C-small-practice.in
rename to codejam_2017/src/y2017round2/C-small-practice.in
diff --git a/codejam/src/y2017round2/C-small-practice.out b/codejam_2017/src/y2017round2/C-small-practice.out
similarity index 100%
rename from codejam/src/y2017round2/C-small-practice.out
rename to codejam_2017/src/y2017round2/C-small-practice.out
diff --git a/codejam/src/y2017round2/C_check.rs b/codejam_2017/src/y2017round2/C_check.rs
similarity index 100%
rename from codejam/src/y2017round2/C_check.rs
rename to codejam_2017/src/y2017round2/C_check.rs
diff --git a/codejam/src/y2017round2/D-large-practice.in b/codejam_2017/src/y2017round2/D-large-practice.in
similarity index 100%
rename from codejam/src/y2017round2/D-large-practice.in
rename to codejam_2017/src/y2017round2/D-large-practice.in
diff --git a/codejam/src/y2017round2/D-large-practice.out b/codejam_2017/src/y2017round2/D-large-practice.out
similarity index 100%
rename from codejam/src/y2017round2/D-large-practice.out
rename to codejam_2017/src/y2017round2/D-large-practice.out
diff --git a/codejam/src/y2017round2/D-small-practice.in b/codejam_2017/src/y2017round2/D-small-practice.in
similarity index 100%
rename from codejam/src/y2017round2/D-small-practice.in
rename to codejam_2017/src/y2017round2/D-small-practice.in
diff --git a/codejam/src/y2017round2/D-small-practice.out b/codejam_2017/src/y2017round2/D-small-practice.out
similarity index 100%
rename from codejam/src/y2017round2/D-small-practice.out
rename to codejam_2017/src/y2017round2/D-small-practice.out
diff --git a/codejam/src/y2017round2/a.rs b/codejam_2017/src/y2017round2/a.rs
similarity index 100%
rename from codejam/src/y2017round2/a.rs
rename to codejam_2017/src/y2017round2/a.rs
diff --git a/codejam/src/y2017round2/a_check.rs b/codejam_2017/src/y2017round2/a_check.rs
similarity index 100%
rename from codejam/src/y2017round2/a_check.rs
rename to codejam_2017/src/y2017round2/a_check.rs
diff --git a/codejam/src/y2017round2/b.rs b/codejam_2017/src/y2017round2/b.rs
similarity index 100%
rename from codejam/src/y2017round2/b.rs
rename to codejam_2017/src/y2017round2/b.rs
diff --git a/codejam/src/y2017round2/c.rs b/codejam_2017/src/y2017round2/c.rs
similarity index 100%
rename from codejam/src/y2017round2/c.rs
rename to codejam_2017/src/y2017round2/c.rs
diff --git a/codejam/src/y2017round2/d.rs b/codejam_2017/src/y2017round2/d.rs
similarity index 100%
rename from codejam/src/y2017round2/d.rs
rename to codejam_2017/src/y2017round2/d.rs
diff --git a/codejam/src/y2017round2/mod.rs b/codejam_2017/src/y2017round2/mod.rs
similarity index 100%
rename from codejam/src/y2017round2/mod.rs
rename to codejam_2017/src/y2017round2/mod.rs
diff --git a/codejam/src/y2017round3/A-large-practice.in b/codejam_2017/src/y2017round3/A-large-practice.in
similarity index 100%
rename from codejam/src/y2017round3/A-large-practice.in
rename to codejam_2017/src/y2017round3/A-large-practice.in
diff --git a/codejam/src/y2017round3/A-large-practice.out b/codejam_2017/src/y2017round3/A-large-practice.out
similarity index 100%
rename from codejam/src/y2017round3/A-large-practice.out
rename to codejam_2017/src/y2017round3/A-large-practice.out
diff --git a/codejam/src/y2017round3/A-small-practice.in b/codejam_2017/src/y2017round3/A-small-practice.in
similarity index 100%
rename from codejam/src/y2017round3/A-small-practice.in
rename to codejam_2017/src/y2017round3/A-small-practice.in
diff --git a/codejam/src/y2017round3/A-small-practice.out b/codejam_2017/src/y2017round3/A-small-practice.out
similarity index 100%
rename from codejam/src/y2017round3/A-small-practice.out
rename to codejam_2017/src/y2017round3/A-small-practice.out
diff --git a/codejam/src/y2017round3/B-large-practice.in b/codejam_2017/src/y2017round3/B-large-practice.in
similarity index 100%
rename from codejam/src/y2017round3/B-large-practice.in
rename to codejam_2017/src/y2017round3/B-large-practice.in
diff --git a/codejam/src/y2017round3/B-large-practice.out b/codejam_2017/src/y2017round3/B-large-practice.out
similarity index 100%
rename from codejam/src/y2017round3/B-large-practice.out
rename to codejam_2017/src/y2017round3/B-large-practice.out
diff --git a/codejam/src/y2017round3/B-small-practice.in b/codejam_2017/src/y2017round3/B-small-practice.in
similarity index 100%
rename from codejam/src/y2017round3/B-small-practice.in
rename to codejam_2017/src/y2017round3/B-small-practice.in
diff --git a/codejam/src/y2017round3/B-small-practice.out b/codejam_2017/src/y2017round3/B-small-practice.out
similarity index 100%
rename from codejam/src/y2017round3/B-small-practice.out
rename to codejam_2017/src/y2017round3/B-small-practice.out
diff --git a/codejam/src/y2017round3/C-large-practice.in b/codejam_2017/src/y2017round3/C-large-practice.in
similarity index 100%
rename from codejam/src/y2017round3/C-large-practice.in
rename to codejam_2017/src/y2017round3/C-large-practice.in
diff --git a/codejam/src/y2017round3/C-large-practice.out b/codejam_2017/src/y2017round3/C-large-practice.out
similarity index 100%
rename from codejam/src/y2017round3/C-large-practice.out
rename to codejam_2017/src/y2017round3/C-large-practice.out
diff --git a/codejam/src/y2017round3/C-small-practice.in b/codejam_2017/src/y2017round3/C-small-practice.in
similarity index 100%
rename from codejam/src/y2017round3/C-small-practice.in
rename to codejam_2017/src/y2017round3/C-small-practice.in
diff --git a/codejam/src/y2017round3/C-small-practice.out b/codejam_2017/src/y2017round3/C-small-practice.out
similarity index 100%
rename from codejam/src/y2017round3/C-small-practice.out
rename to codejam_2017/src/y2017round3/C-small-practice.out
diff --git a/codejam/src/y2017round3/D-large-practice.in b/codejam_2017/src/y2017round3/D-large-practice.in
similarity index 100%
rename from codejam/src/y2017round3/D-large-practice.in
rename to codejam_2017/src/y2017round3/D-large-practice.in
diff --git a/codejam/src/y2017round3/D-large-practice.out b/codejam_2017/src/y2017round3/D-large-practice.out
similarity index 100%
rename from codejam/src/y2017round3/D-large-practice.out
rename to codejam_2017/src/y2017round3/D-large-practice.out
diff --git a/codejam/src/y2017round3/D-small-practice.in b/codejam_2017/src/y2017round3/D-small-practice.in
similarity index 100%
rename from codejam/src/y2017round3/D-small-practice.in
rename to codejam_2017/src/y2017round3/D-small-practice.in
diff --git a/codejam/src/y2017round3/D-small-practice.out b/codejam_2017/src/y2017round3/D-small-practice.out
similarity index 100%
rename from codejam/src/y2017round3/D-small-practice.out
rename to codejam_2017/src/y2017round3/D-small-practice.out
diff --git a/codejam/src/y2017round3/Errichto.rekt_3_1/d.cpp b/codejam_2017/src/y2017round3/Errichto.rekt_3_1/d.cpp
similarity index 100%
rename from codejam/src/y2017round3/Errichto.rekt_3_1/d.cpp
rename to codejam_2017/src/y2017round3/Errichto.rekt_3_1/d.cpp
diff --git a/codejam/src/y2017round3/Nore_3_1/D.py b/codejam_2017/src/y2017round3/Nore_3_1/D.py
similarity index 100%
rename from codejam/src/y2017round3/Nore_3_1/D.py
rename to codejam_2017/src/y2017round3/Nore_3_1/D.py
diff --git a/codejam/src/y2017round3/a.py b/codejam_2017/src/y2017round3/a.py
similarity index 100%
rename from codejam/src/y2017round3/a.py
rename to codejam_2017/src/y2017round3/a.py
diff --git a/codejam/src/y2017round3/a.rs b/codejam_2017/src/y2017round3/a.rs
similarity index 100%
rename from codejam/src/y2017round3/a.rs
rename to codejam_2017/src/y2017round3/a.rs
diff --git a/codejam/src/y2017round3/b.py b/codejam_2017/src/y2017round3/b.py
similarity index 100%
rename from codejam/src/y2017round3/b.py
rename to codejam_2017/src/y2017round3/b.py
diff --git a/codejam/src/y2017round3/b.rs b/codejam_2017/src/y2017round3/b.rs
similarity index 100%
rename from codejam/src/y2017round3/b.rs
rename to codejam_2017/src/y2017round3/b.rs
diff --git a/codejam/src/y2017round3/c.rs b/codejam_2017/src/y2017round3/c.rs
similarity index 100%
rename from codejam/src/y2017round3/c.rs
rename to codejam_2017/src/y2017round3/c.rs
diff --git a/codejam/src/y2017round3/d.rs b/codejam_2017/src/y2017round3/d.rs
similarity index 100%
rename from codejam/src/y2017round3/d.rs
rename to codejam_2017/src/y2017round3/d.rs
diff --git a/codejam/src/y2017round3/kevinsogo_3_1/d.py b/codejam_2017/src/y2017round3/kevinsogo_3_1/d.py
similarity index 100%
rename from codejam/src/y2017round3/kevinsogo_3_1/d.py
rename to codejam_2017/src/y2017round3/kevinsogo_3_1/d.py
diff --git a/codejam/src/y2017round3/linguo_3_1/d2.py b/codejam_2017/src/y2017round3/linguo_3_1/d2.py
similarity index 100%
rename from codejam/src/y2017round3/linguo_3_1/d2.py
rename to codejam_2017/src/y2017round3/linguo_3_1/d2.py
diff --git a/codejam/src/y2017round3/mod.rs b/codejam_2017/src/y2017round3/mod.rs
similarity index 100%
rename from codejam/src/y2017round3/mod.rs
rename to codejam_2017/src/y2017round3/mod.rs
diff --git a/codejam/src/y2017round4/A-large-practice.in b/codejam_2017/src/y2017round4/A-large-practice.in
similarity index 100%
rename from codejam/src/y2017round4/A-large-practice.in
rename to codejam_2017/src/y2017round4/A-large-practice.in
diff --git a/codejam/src/y2017round4/A-large-practice.out b/codejam_2017/src/y2017round4/A-large-practice.out
similarity index 100%
rename from codejam/src/y2017round4/A-large-practice.out
rename to codejam_2017/src/y2017round4/A-large-practice.out
diff --git a/codejam/src/y2017round4/A-small-practice.in b/codejam_2017/src/y2017round4/A-small-practice.in
similarity index 100%
rename from codejam/src/y2017round4/A-small-practice.in
rename to codejam_2017/src/y2017round4/A-small-practice.in
diff --git a/codejam/src/y2017round4/A-small-practice.out b/codejam_2017/src/y2017round4/A-small-practice.out
similarity index 100%
rename from codejam/src/y2017round4/A-small-practice.out
rename to codejam_2017/src/y2017round4/A-small-practice.out
diff --git a/codejam/src/y2017round4/A.cpp b/codejam_2017/src/y2017round4/A.cpp
similarity index 100%
rename from codejam/src/y2017round4/A.cpp
rename to codejam_2017/src/y2017round4/A.cpp
diff --git a/codejam/src/y2017round4/A.java b/codejam_2017/src/y2017round4/A.java
similarity index 100%
rename from codejam/src/y2017round4/A.java
rename to codejam_2017/src/y2017round4/A.java
diff --git a/codejam/src/y2017round4/B-large-practice.in b/codejam_2017/src/y2017round4/B-large-practice.in
similarity index 100%
rename from codejam/src/y2017round4/B-large-practice.in
rename to codejam_2017/src/y2017round4/B-large-practice.in
diff --git a/codejam/src/y2017round4/B-large-practice.out b/codejam_2017/src/y2017round4/B-large-practice.out
similarity index 100%
rename from codejam/src/y2017round4/B-large-practice.out
rename to codejam_2017/src/y2017round4/B-large-practice.out
diff --git a/codejam/src/y2017round4/B-small-practice.in b/codejam_2017/src/y2017round4/B-small-practice.in
similarity index 100%
rename from codejam/src/y2017round4/B-small-practice.in
rename to codejam_2017/src/y2017round4/B-small-practice.in
diff --git a/codejam/src/y2017round4/B-small-practice.out b/codejam_2017/src/y2017round4/B-small-practice.out
similarity index 100%
rename from codejam/src/y2017round4/B-small-practice.out
rename to codejam_2017/src/y2017round4/B-small-practice.out
diff --git a/codejam/src/y2017round4/C-small-practice.in b/codejam_2017/src/y2017round4/C-small-practice.in
similarity index 100%
rename from codejam/src/y2017round4/C-small-practice.in
rename to codejam_2017/src/y2017round4/C-small-practice.in
diff --git a/codejam/src/y2017round4/C-small-practice.out b/codejam_2017/src/y2017round4/C-small-practice.out
similarity index 100%
rename from codejam/src/y2017round4/C-small-practice.out
rename to codejam_2017/src/y2017round4/C-small-practice.out
diff --git a/codejam/src/y2017round4/D-large-practice.in b/codejam_2017/src/y2017round4/D-large-practice.in
similarity index 100%
rename from codejam/src/y2017round4/D-large-practice.in
rename to codejam_2017/src/y2017round4/D-large-practice.in
diff --git a/codejam/src/y2017round4/D-large-practice.out b/codejam_2017/src/y2017round4/D-large-practice.out
similarity index 100%
rename from codejam/src/y2017round4/D-large-practice.out
rename to codejam_2017/src/y2017round4/D-large-practice.out
diff --git a/codejam/src/y2017round4/D-small-practice.in b/codejam_2017/src/y2017round4/D-small-practice.in
similarity index 100%
rename from codejam/src/y2017round4/D-small-practice.in
rename to codejam_2017/src/y2017round4/D-small-practice.in
diff --git a/codejam/src/y2017round4/D-small-practice.out b/codejam_2017/src/y2017round4/D-small-practice.out
similarity index 100%
rename from codejam/src/y2017round4/D-small-practice.out
rename to codejam_2017/src/y2017round4/D-small-practice.out
diff --git a/codejam/src/y2017round4/E-large-practice.in b/codejam_2017/src/y2017round4/E-large-practice.in
similarity index 100%
rename from codejam/src/y2017round4/E-large-practice.in
rename to codejam_2017/src/y2017round4/E-large-practice.in
diff --git a/codejam/src/y2017round4/E-large-practice.out b/codejam_2017/src/y2017round4/E-large-practice.out
similarity index 100%
rename from codejam/src/y2017round4/E-large-practice.out
rename to codejam_2017/src/y2017round4/E-large-practice.out
diff --git a/codejam/src/y2017round4/E-small-practice.in b/codejam_2017/src/y2017round4/E-small-practice.in
similarity index 100%
rename from codejam/src/y2017round4/E-small-practice.in
rename to codejam_2017/src/y2017round4/E-small-practice.in
diff --git a/codejam/src/y2017round4/E-small-practice.out b/codejam_2017/src/y2017round4/E-small-practice.out
similarity index 100%
rename from codejam/src/y2017round4/E-small-practice.out
rename to codejam_2017/src/y2017round4/E-small-practice.out
diff --git a/codejam/src/y2017round4/F-large-practice.in b/codejam_2017/src/y2017round4/F-large-practice.in
similarity index 100%
rename from codejam/src/y2017round4/F-large-practice.in
rename to codejam_2017/src/y2017round4/F-large-practice.in
diff --git a/codejam/src/y2017round4/F-large-practice.out b/codejam_2017/src/y2017round4/F-large-practice.out
similarity index 100%
rename from codejam/src/y2017round4/F-large-practice.out
rename to codejam_2017/src/y2017round4/F-large-practice.out
diff --git a/codejam/src/y2017round4/F-small-practice.in b/codejam_2017/src/y2017round4/F-small-practice.in
similarity index 100%
rename from codejam/src/y2017round4/F-small-practice.in
rename to codejam_2017/src/y2017round4/F-small-practice.in
diff --git a/codejam/src/y2017round4/F-small-practice.out b/codejam_2017/src/y2017round4/F-small-practice.out
similarity index 100%
rename from codejam/src/y2017round4/F-small-practice.out
rename to codejam_2017/src/y2017round4/F-small-practice.out
diff --git a/codejam/src/y2017round4/Gennady.Korotkevich_2_0/gen.cpp b/codejam_2017/src/y2017round4/Gennady.Korotkevich_2_0/gen.cpp
similarity index 100%
rename from codejam/src/y2017round4/Gennady.Korotkevich_2_0/gen.cpp
rename to codejam_2017/src/y2017round4/Gennady.Korotkevich_2_0/gen.cpp
diff --git a/codejam/src/y2017round4/TeleportersLarge.java b/codejam_2017/src/y2017round4/TeleportersLarge.java
similarity index 100%
rename from codejam/src/y2017round4/TeleportersLarge.java
rename to codejam_2017/src/y2017round4/TeleportersLarge.java
diff --git a/codejam/src/y2017round4/a.rs b/codejam_2017/src/y2017round4/a.rs
similarity index 100%
rename from codejam/src/y2017round4/a.rs
rename to codejam_2017/src/y2017round4/a.rs
diff --git a/codejam/src/y2017round4/b.rs b/codejam_2017/src/y2017round4/b.rs
similarity index 100%
rename from codejam/src/y2017round4/b.rs
rename to codejam_2017/src/y2017round4/b.rs
diff --git a/codejam/src/y2017round4/c.rs b/codejam_2017/src/y2017round4/c.rs
similarity index 100%
rename from codejam/src/y2017round4/c.rs
rename to codejam_2017/src/y2017round4/c.rs
diff --git a/codejam/src/y2017round4/d.rs b/codejam_2017/src/y2017round4/d.rs
similarity index 100%
rename from codejam/src/y2017round4/d.rs
rename to codejam_2017/src/y2017round4/d.rs
diff --git a/codejam/src/y2017round4/e.rs b/codejam_2017/src/y2017round4/e.rs
similarity index 100%
rename from codejam/src/y2017round4/e.rs
rename to codejam_2017/src/y2017round4/e.rs
diff --git a/codejam/src/y2017round4/eatmore_3_1/D.java b/codejam_2017/src/y2017round4/eatmore_3_1/D.java
similarity index 100%
rename from codejam/src/y2017round4/eatmore_3_1/D.java
rename to codejam_2017/src/y2017round4/eatmore_3_1/D.java
diff --git a/codejam/src/y2017round4/f.rs b/codejam_2017/src/y2017round4/f.rs
similarity index 100%
rename from codejam/src/y2017round4/f.rs
rename to codejam_2017/src/y2017round4/f.rs
diff --git a/codejam/src/y2017round4/f_small.rs b/codejam_2017/src/y2017round4/f_small.rs
similarity index 100%
rename from codejam/src/y2017round4/f_small.rs
rename to codejam_2017/src/y2017round4/f_small.rs
diff --git a/codejam/src/y2017round4/mod.rs b/codejam_2017/src/y2017round4/mod.rs
similarity index 100%
rename from codejam/src/y2017round4/mod.rs
rename to codejam_2017/src/y2017round4/mod.rs

From 2c8ceb95ca52db87b482351196fa4fab0ccc8456 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 11:52:43 -0300
Subject: [PATCH 071/122] 2017

---
 codejam_2008/Cargo.toml                       |   2 +-
 codejam_2017/Cargo.lock                       | 473 ++++++++++++++++++
 codejam_2017/Cargo.toml                       |  19 +
 codejam_2017/src/main.rs                      |  30 +-
 .../A-large-practice.in                       |   0
 .../A-large-practice.out                      |   0
 .../A-small-practice.in                       |   0
 .../A-small-practice.out                      |   0
 .../B-large-practice.in                       |   0
 .../B-large-practice.out                      |   0
 .../B-small-practice.in                       |   0
 .../B-small-practice.out                      |   0
 .../C-large-practice.in                       |   0
 .../C-large-practice.out                      |   0
 .../C-small-practice.in                       |   0
 .../C-small-practice.out                      |   0
 .../src/{y2017round1A => y2017round1a}/a.rs   |   0
 .../src/{y2017round1A => y2017round1a}/b.rs   |  52 +-
 .../src/{y2017round1A => y2017round1a}/c.rs   |  44 +-
 .../src/{y2017round1A => y2017round1a}/mod.rs |   0
 .../A-large-practice.in                       |   0
 .../A-large-practice.out                      |   0
 .../A-small-practice.in                       |   0
 .../A-small-practice.out                      |   0
 .../B-large-check.out                         |   0
 .../B-large-practice.in                       |   0
 .../B-large-practice.out                      |   0
 .../B-small-practice.in                       |   0
 .../B-small-practice.out                      |   0
 .../{y2017round1B => y2017round1b}/B-test.in  |   0
 .../{y2017round1B => y2017round1b}/B_check.rs |   0
 .../C-large-practice.in                       |   0
 .../C-large-practice.out                      |   0
 .../C-small-practice.in                       |   0
 .../C-small-practice.out                      |   0
 .../{y2017round1B => y2017round1b}/C-test.in  |   0
 .../src/{y2017round1B => y2017round1b}/a.rs   |  66 +--
 .../src/{y2017round1B => y2017round1b}/b.rs   |  43 +-
 .../b_backtracking.rs                         |   0
 .../src/{y2017round1B => y2017round1b}/c.rs   |   2 +-
 .../src/{y2017round1B => y2017round1b}/mod.rs |   0
 .../unused_ass_consts.rb                      |   0
 .../src/{y2017round1C => y2017round1c}/2.py   |   0
 .../A-large-practice.in                       |   0
 .../A-large-practice.out                      |   0
 .../A-small-practice.in                       |   0
 .../A-small-practice.out                      |   0
 .../B-large-practice.in                       |   0
 .../B-large-practice.out                      |   0
 .../B-small-practice.in                       |   0
 .../B-small-practice.out                      |   0
 .../C-small-practice-1.in                     |   0
 .../C-small-practice-1.out                    |   0
 .../C-small-practice-2.in                     |   0
 .../C-small-practice-2.out                    |   0
 .../src/{y2017round1C => y2017round1c}/C.py   |   0
 .../src/{y2017round1C => y2017round1c}/a.rs   |   2 +-
 .../{y2017round1C => y2017round1c}/a_check.rs |   0
 .../src/{y2017round1C => y2017round1c}/b.rs   |   2 +-
 .../src/{y2017round1C => y2017round1c}/c.rs   |   2 +-
 .../src/{y2017round1C => y2017round1c}/mod.rs |   0
 codejam_2017/src/y2017round2/a.rs             |  35 +-
 codejam_2017/src/y2017round2/b.rs             |   6 +-
 codejam_2017/src/y2017round2/c.rs             |  16 +-
 codejam_2017/src/y2017round2/d.rs             |  12 +-
 codejam_2017/src/y2017round3/a.rs             |   2 +-
 codejam_2017/src/y2017round3/b.rs             |   4 +-
 codejam_2017/src/y2017round3/c.rs             |   4 +-
 codejam_2017/src/y2017round3/d.rs             |  39 +-
 codejam_2017/src/y2017round4/a.rs             |   4 +-
 codejam_2017/src/y2017round4/b.rs             |   4 +-
 codejam_2017/src/y2017round4/c.rs             |   4 +-
 codejam_2017/src/y2017round4/d.rs             |   6 +-
 codejam_2017/src/y2017round4/e.rs             |   6 +-
 codejam_2017/src/y2017round4/f.rs             |  10 +-
 75 files changed, 715 insertions(+), 174 deletions(-)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/A-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/A-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/A-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/A-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/B-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/B-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/B-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/B-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/C-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/C-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/C-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/C-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/a.rs (100%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/b.rs (74%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/c.rs (72%)
 rename codejam_2017/src/{y2017round1A => y2017round1a}/mod.rs (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/A-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/A-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/A-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/A-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/B-large-check.out (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/B-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/B-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/B-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/B-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/B-test.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/B_check.rs (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/C-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/C-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/C-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/C-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/C-test.in (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/a.rs (55%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/b.rs (92%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/b_backtracking.rs (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/c.rs (99%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/mod.rs (100%)
 rename codejam_2017/src/{y2017round1B => y2017round1b}/unused_ass_consts.rb (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/2.py (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/A-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/A-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/A-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/A-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/B-large-practice.in (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/B-large-practice.out (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/B-small-practice.in (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/B-small-practice.out (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/C-small-practice-1.in (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/C-small-practice-1.out (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/C-small-practice-2.in (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/C-small-practice-2.out (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/C.py (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/a.rs (98%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/a_check.rs (100%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/b.rs (98%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/c.rs (99%)
 rename codejam_2017/src/{y2017round1C => y2017round1c}/mod.rs (100%)

diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index c16aa92..0647923 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -14,4 +14,4 @@ hungarian = "1.1.0"
 bit-vec = "*"
 bit-set = "*"
 primal = "*"
-rand = "*"
+rand = "*"
\ No newline at end of file
diff --git a/codejam_2017/Cargo.lock b/codejam_2017/Cargo.lock
index 5de6db1..5f2dadb 100644
--- a/codejam_2017/Cargo.lock
+++ b/codejam_2017/Cargo.lock
@@ -1,4 +1,477 @@
+[[package]]
+name = "alga"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "approx"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bimap"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bit-set"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "byteorder"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "codejam_2017"
 version = "0.1.0"
+dependencies = [
+ "bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nalgebra 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rust-algorithm-problems 0.1.0",
+ "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "either"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "generic-array"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "hamming"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "indexmap"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "itertools"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "libm"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "log"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "matrixmultiply"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "matrixmultiply"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "nalgebra"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "alga 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "matrixmultiply 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num_cpus"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "permutohedron"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rawpointer"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rulinalg"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rust-algorithm-problems"
+version = "0.1.0"
+dependencies = [
+ "bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nalgebra 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "try_opt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "typenum"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[metadata]
+"checksum alga 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2cc836ad7a40dc9d8049574e2a29979f5dc77deeea4d7ebcd29773452f0e9694"
+"checksum approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c57ff1a5b00753647aebbbcf4ea67fa1e711a65ea7a30eb90dbf07de2485aee"
+"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
+"checksum bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6b282b982237078bfac61a948a2198f185aceea8b9a6e794b70b96fd31923d3d"
+"checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a"
+"checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf"
+"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
+"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
+"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
+"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+"checksum either 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c67353c641dc847124ea1902d69bd753dee9bb3beff9aa3662ecf86c971d1fac"
+"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592"
+"checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1"
+"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d"
+"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
+"checksum libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)" = "413f3dfc802c5dc91dc570b05125b6cda9855edfaa9825c9849807876376e70e"
+"checksum libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "03c0bb6d5ce1b5cc6fd0578ec1cbc18c9d88b5b591a5c7c1d6c6175e266a0819"
+"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
+"checksum matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
+"checksum matrixmultiply 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfed72d871629daa12b25af198f110e8095d7650f5f4c61c5bac28364604f9b"
+"checksum nalgebra 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f76a29833cbba252d6799bcfd8e603610a2165a18b62c7f4307495d851c3d337"
+"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
+"checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
+"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8"
+"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
+"checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124"
+"checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10"
+"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
+"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba"
+"checksum permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c"
+"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
+"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+"checksum rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9ea758282efe12823e0d952ddb269d2e1897227e464919a554f2a03ef1b832"
+"checksum rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b7c690732391ae0abafced5015ffb53656abfaec61b342290e5eb56b286a679d"
+"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+"checksum rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
+"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+"checksum rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "04ada202c9685e1d72a7420c578e92b358dbf807d3dfabb676a3dab9cc3bb12f"
+"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
+"checksum try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e282c6497867d439f3454cebee548f5961d2787c72c1b7b96481d7f0a3e5bc0"
+"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
+"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/codejam_2017/Cargo.toml b/codejam_2017/Cargo.toml
index 5affb09..cc9f017 100644
--- a/codejam_2017/Cargo.toml
+++ b/codejam_2017/Cargo.toml
@@ -5,3 +5,22 @@ authors = ["eric7237cire <eric7237cire@gmail.com>"]
 edition = "2018"
 
 [dependencies]
+rust-algorithm-problems = { path = "../codejam" }
+log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
+itertools = "*"
+num-traits = "*"
+indexmap = "*"
+rand = "*"
+bimap = "0.1"
+num-bigint = "*"
+num-integer = "*"
+num-rational = "*"
+permutohedron = "*"
+bit-set = "*"
+bit-vec = "*"
+byteorder = "*"
+hamming = "*"
+threadpool = "*"
+rulinalg = "*"
+nalgebra = "*"
+try_opt = "*"
\ No newline at end of file
diff --git a/codejam_2017/src/main.rs b/codejam_2017/src/main.rs
index a2b287c..634df72 100644
--- a/codejam_2017/src/main.rs
+++ b/codejam_2017/src/main.rs
@@ -16,6 +16,9 @@ extern crate itertools;*/
 #[macro_use]
 extern crate log;
 
+#[macro_use]
+extern crate try_opt;
+
 use codejam::util::log::init_log;
 
 pub fn run_y2017_round_qual()
@@ -51,15 +54,32 @@ pub fn run_y2017_round2()
     y2017round2::a::solve_all_cases();
     y2017round2::b::solve_all_cases();
     y2017round2::c::solve_all_cases();
+    y2017round2::d::solve_all_cases();
+}
+
+pub fn run_y2017_round3()
+{
+    y2017round3::a::solve_all_cases();
+    y2017round3::b::solve_all_cases();
+    y2017round3::c::solve_all_cases();
+    y2017round3::d::solve_all_cases();
 }
 
+pub fn run_y2017_round4()
+{
+    y2017round4::a::solve_all_cases();
+    y2017round4::b::solve_all_cases();
+    y2017round4::c::solve_all_cases();
+    y2017round4::d::solve_all_cases();
+    y2017round4::e::solve_all_cases();
+    y2017round4::f::solve_all_cases();
+}
 fn main()
 {
     init_log();
 
-    y2017round2::d::solve_all_cases();
-
-    /*   run_y2017_round_qual();
-    run_y2017_round_practice();
-    run_y2017_round_beta();*/
+    run_y2017_round1a();
+    run_y2017_round1b();
+    run_y2017_round2();
+    //run_y2017_round4();
 }
diff --git a/codejam_2017/src/y2017round1A/A-large-practice.in b/codejam_2017/src/y2017round1a/A-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1A/A-large-practice.in
rename to codejam_2017/src/y2017round1a/A-large-practice.in
diff --git a/codejam_2017/src/y2017round1A/A-large-practice.out b/codejam_2017/src/y2017round1a/A-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1A/A-large-practice.out
rename to codejam_2017/src/y2017round1a/A-large-practice.out
diff --git a/codejam_2017/src/y2017round1A/A-small-practice.in b/codejam_2017/src/y2017round1a/A-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1A/A-small-practice.in
rename to codejam_2017/src/y2017round1a/A-small-practice.in
diff --git a/codejam_2017/src/y2017round1A/A-small-practice.out b/codejam_2017/src/y2017round1a/A-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1A/A-small-practice.out
rename to codejam_2017/src/y2017round1a/A-small-practice.out
diff --git a/codejam_2017/src/y2017round1A/B-large-practice.in b/codejam_2017/src/y2017round1a/B-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1A/B-large-practice.in
rename to codejam_2017/src/y2017round1a/B-large-practice.in
diff --git a/codejam_2017/src/y2017round1A/B-large-practice.out b/codejam_2017/src/y2017round1a/B-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1A/B-large-practice.out
rename to codejam_2017/src/y2017round1a/B-large-practice.out
diff --git a/codejam_2017/src/y2017round1A/B-small-practice.in b/codejam_2017/src/y2017round1a/B-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1A/B-small-practice.in
rename to codejam_2017/src/y2017round1a/B-small-practice.in
diff --git a/codejam_2017/src/y2017round1A/B-small-practice.out b/codejam_2017/src/y2017round1a/B-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1A/B-small-practice.out
rename to codejam_2017/src/y2017round1a/B-small-practice.out
diff --git a/codejam_2017/src/y2017round1A/C-large-practice.in b/codejam_2017/src/y2017round1a/C-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1A/C-large-practice.in
rename to codejam_2017/src/y2017round1a/C-large-practice.in
diff --git a/codejam_2017/src/y2017round1A/C-large-practice.out b/codejam_2017/src/y2017round1a/C-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1A/C-large-practice.out
rename to codejam_2017/src/y2017round1a/C-large-practice.out
diff --git a/codejam_2017/src/y2017round1A/C-small-practice.in b/codejam_2017/src/y2017round1a/C-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1A/C-small-practice.in
rename to codejam_2017/src/y2017round1a/C-small-practice.in
diff --git a/codejam_2017/src/y2017round1A/C-small-practice.out b/codejam_2017/src/y2017round1a/C-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1A/C-small-practice.out
rename to codejam_2017/src/y2017round1a/C-small-practice.out
diff --git a/codejam_2017/src/y2017round1A/a.rs b/codejam_2017/src/y2017round1a/a.rs
similarity index 100%
rename from codejam_2017/src/y2017round1A/a.rs
rename to codejam_2017/src/y2017round1a/a.rs
diff --git a/codejam_2017/src/y2017round1A/b.rs b/codejam_2017/src/y2017round1a/b.rs
similarity index 74%
rename from codejam_2017/src/y2017round1A/b.rs
rename to codejam_2017/src/y2017round1a/b.rs
index 57601e8..26f2d46 100644
--- a/codejam_2017/src/y2017round1A/b.rs
+++ b/codejam_2017/src/y2017round1a/b.rs
@@ -1,4 +1,5 @@
-use super::super::util::input::read_int_line;
+//use codejam::util::input::read_int_line;
+use codejam::util::codejam::run_cases;
 use std::io::stdin;
 use std::thread;
 
@@ -12,31 +13,40 @@ code not mine, just translation
 */
 pub fn solve_all_cases()
 {
-    let mut children: Vec<thread::JoinHandle<_>> = vec![];
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round1a",
+        |reader, buffer| {
+            let t = reader.read_int();
+            let mut children: Vec<thread::JoinHandle<_>> = vec![];
 
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    let t = s.trim().parse::<u32>().unwrap();
+            for case_no in 1..=t {
+                //handle input / output
 
-    for case in 1..=t {
-        //handle input / output
-        let n_and_p: Vec<u8> = read_int_line();
-        let (n, p) = (n_and_p[0], n_and_p[1]);
+                let (n, p) = reader.read_tuple_2();
 
-        let r: Vec<u32> = read_int_line();
+                let r: Vec<u32> = reader.read_int_line();
 
-        let mut q: Vec<Vec<u32>> = Vec::new();
-        for _ in 0..n {
-            q.push(read_int_line());
-        }
-        children.push(thread::spawn(move || -> String {
-            solve(case, n, p, &r, &q)
-        }));
-    }
+                let mut q: Vec<Vec<u32>> = Vec::new();
+                for _ in 0..n {
+                    q.push(reader.read_int_line());
+                }
+                children.push(thread::spawn(move || -> String {
+                    solve(case_no, n, p, &r, &q)
+                }));
 
-    for child in children {
-        print!("{}", child.join().unwrap());
-    }
+                if case_no != 1 {
+                    //        continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                for child in children {
+                    writeln!(buffer, "{}", child.join().unwrap()).unwrap();
+                }
+            }
+        },
+    );
 }
 
 fn solve(case_no: u32, N: u8, P: u8, R: &Vec<u32>, Q: &Vec<Vec<u32>>) -> String
diff --git a/codejam_2017/src/y2017round1A/c.rs b/codejam_2017/src/y2017round1a/c.rs
similarity index 72%
rename from codejam_2017/src/y2017round1A/c.rs
rename to codejam_2017/src/y2017round1a/c.rs
index e8dd6ce..36c175f 100644
--- a/codejam_2017/src/y2017round1A/c.rs
+++ b/codejam_2017/src/y2017round1a/c.rs
@@ -1,4 +1,4 @@
-use super::super::util::input::read_int_line;
+use codejam::util::codejam::run_cases;
 use std::cmp;
 use std::io::stdin;
 use std::thread;
@@ -8,26 +8,36 @@ very hard ad hoc (code not mine, just translation)
 */
 pub fn solve_all_cases()
 {
-    let mut children: Vec<thread::JoinHandle<_>> = vec![];
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008round1a",
+        |reader, buffer| {
+            let t = reader.read_int();
+            let mut children: Vec<thread::JoinHandle<_>> = vec![];
 
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    let t = s.trim().parse::<u32>().unwrap();
+            for case_no in 1..=t {
+                //handle input / output
+                //Hd, Ad, Hk, Ak, B, and D;
+                let input: Vec<i64> = reader.read_int_line();
 
-    for case in 1..=t {
-        //Hd, Ad, Hk, Ak, B, and D;
-        let input: Vec<i64> = read_int_line();
+                children.push(thread::spawn(move || -> String {
+                    solve(
+                        case_no, input[0], input[1], input[2], input[3], input[4], input[5],
+                    )
+                }));
 
-        children.push(thread::spawn(move || -> String {
-            solve(
-                case, input[0], input[1], input[2], input[3], input[4], input[5],
-            )
-        }));
-    }
+                if case_no != 1 {
+                    //        continue;
+                }
 
-    for child in children {
-        print!("{}", child.join().unwrap());
-    }
+                println!("Solving case {}", case_no);
+
+                for child in children {
+                    writeln!(buffer, "{}", child.join().unwrap()).unwrap();
+                }
+            }
+        },
+    );
 }
 
 const R: i64 = 100;
diff --git a/codejam_2017/src/y2017round1A/mod.rs b/codejam_2017/src/y2017round1a/mod.rs
similarity index 100%
rename from codejam_2017/src/y2017round1A/mod.rs
rename to codejam_2017/src/y2017round1a/mod.rs
diff --git a/codejam_2017/src/y2017round1B/A-large-practice.in b/codejam_2017/src/y2017round1b/A-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/A-large-practice.in
rename to codejam_2017/src/y2017round1b/A-large-practice.in
diff --git a/codejam_2017/src/y2017round1B/A-large-practice.out b/codejam_2017/src/y2017round1b/A-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1B/A-large-practice.out
rename to codejam_2017/src/y2017round1b/A-large-practice.out
diff --git a/codejam_2017/src/y2017round1B/A-small-practice.in b/codejam_2017/src/y2017round1b/A-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/A-small-practice.in
rename to codejam_2017/src/y2017round1b/A-small-practice.in
diff --git a/codejam_2017/src/y2017round1B/A-small-practice.out b/codejam_2017/src/y2017round1b/A-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1B/A-small-practice.out
rename to codejam_2017/src/y2017round1b/A-small-practice.out
diff --git a/codejam_2017/src/y2017round1B/B-large-check.out b/codejam_2017/src/y2017round1b/B-large-check.out
similarity index 100%
rename from codejam_2017/src/y2017round1B/B-large-check.out
rename to codejam_2017/src/y2017round1b/B-large-check.out
diff --git a/codejam_2017/src/y2017round1B/B-large-practice.in b/codejam_2017/src/y2017round1b/B-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/B-large-practice.in
rename to codejam_2017/src/y2017round1b/B-large-practice.in
diff --git a/codejam_2017/src/y2017round1B/B-large-practice.out b/codejam_2017/src/y2017round1b/B-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1B/B-large-practice.out
rename to codejam_2017/src/y2017round1b/B-large-practice.out
diff --git a/codejam_2017/src/y2017round1B/B-small-practice.in b/codejam_2017/src/y2017round1b/B-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/B-small-practice.in
rename to codejam_2017/src/y2017round1b/B-small-practice.in
diff --git a/codejam_2017/src/y2017round1B/B-small-practice.out b/codejam_2017/src/y2017round1b/B-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1B/B-small-practice.out
rename to codejam_2017/src/y2017round1b/B-small-practice.out
diff --git a/codejam_2017/src/y2017round1B/B-test.in b/codejam_2017/src/y2017round1b/B-test.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/B-test.in
rename to codejam_2017/src/y2017round1b/B-test.in
diff --git a/codejam_2017/src/y2017round1B/B_check.rs b/codejam_2017/src/y2017round1b/B_check.rs
similarity index 100%
rename from codejam_2017/src/y2017round1B/B_check.rs
rename to codejam_2017/src/y2017round1b/B_check.rs
diff --git a/codejam_2017/src/y2017round1B/C-large-practice.in b/codejam_2017/src/y2017round1b/C-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/C-large-practice.in
rename to codejam_2017/src/y2017round1b/C-large-practice.in
diff --git a/codejam_2017/src/y2017round1B/C-large-practice.out b/codejam_2017/src/y2017round1b/C-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1B/C-large-practice.out
rename to codejam_2017/src/y2017round1b/C-large-practice.out
diff --git a/codejam_2017/src/y2017round1B/C-small-practice.in b/codejam_2017/src/y2017round1b/C-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/C-small-practice.in
rename to codejam_2017/src/y2017round1b/C-small-practice.in
diff --git a/codejam_2017/src/y2017round1B/C-small-practice.out b/codejam_2017/src/y2017round1b/C-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1B/C-small-practice.out
rename to codejam_2017/src/y2017round1b/C-small-practice.out
diff --git a/codejam_2017/src/y2017round1B/C-test.in b/codejam_2017/src/y2017round1b/C-test.in
similarity index 100%
rename from codejam_2017/src/y2017round1B/C-test.in
rename to codejam_2017/src/y2017round1b/C-test.in
diff --git a/codejam_2017/src/y2017round1B/a.rs b/codejam_2017/src/y2017round1b/a.rs
similarity index 55%
rename from codejam_2017/src/y2017round1B/a.rs
rename to codejam_2017/src/y2017round1b/a.rs
index 56369d9..f0417de 100644
--- a/codejam_2017/src/y2017round1B/a.rs
+++ b/codejam_2017/src/y2017round1b/a.rs
@@ -1,4 +1,4 @@
-use super::super::util::input::read_int_line;
+use codejam::util::codejam::run_cases;
 use std::io::stdin;
 use std::thread;
 
@@ -17,37 +17,45 @@ struct Horse
 
 pub fn solve_all_cases()
 {
-    let mut children: Vec<thread::JoinHandle<_>> = vec![];
-
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    let t = s.trim().parse::<u32>().unwrap();
-
-    for case in 1..=t {
-        //D & N
-        let input: Vec<u64> = read_int_line();
-        let n = input[1];
-        let mut horse = (0..n)
-            .map(|_| {
-                let input: Vec<u64> = read_int_line();
-                Horse {
-                    start_pos: input[0] as f64,
-                    velocity: input[1] as f64,
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round1B",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                //D & N
+                let input: Vec<u64> = reader.read_int_line();
+                let n = input[1];
+                let mut horse = (0..n)
+                    .map(|_| {
+                        let input: Vec<u64> = reader.read_int_line();
+                        Horse {
+                            start_pos: input[0] as f64,
+                            velocity: input[1] as f64,
+                        }
+                    })
+                    .collect::<Vec<_>>();
+
+                if case_no != 1 {
+                    //        continue;
                 }
-            })
-            .collect::<Vec<_>>();
 
-        children.push(thread::spawn(move || -> String {
-            solve(case, input[0] as f64, &mut horse)
-        }));
-    }
-
-    for child in children {
-        print!("{}", child.join().unwrap());
-    }
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(input[0] as f64, &mut horse)
+                )
+                .unwrap();
+            }
+        },
+    );
 }
 
-fn solve(case_no: u32, D: f64, horses: &mut Vec<Horse>) -> String
+fn solve(D: f64, horses: &mut Vec<Horse>) -> String
 {
     //let mut horses = horses.clone();
 
@@ -89,5 +97,5 @@ fn solve(case_no: u32, D: f64, horses: &mut Vec<Horse>) -> String
         hs, hs.velocity, min_v
     );
 
-    format!("Case #{}: {:.6}\n", case_no, min_v)
+    format!("{:.6}\n", min_v)
 }
diff --git a/codejam_2017/src/y2017round1B/b.rs b/codejam_2017/src/y2017round1b/b.rs
similarity index 92%
rename from codejam_2017/src/y2017round1B/b.rs
rename to codejam_2017/src/y2017round1b/b.rs
index 79255f3..f9a96e7 100644
--- a/codejam_2017/src/y2017round1B/b.rs
+++ b/codejam_2017/src/y2017round1b/b.rs
@@ -1,9 +1,11 @@
-use super::super::util::input::read_int_line;
 use itertools::Itertools;
 use std::fmt;
 use std::io::stdin;
 use std::iter::FromIterator;
 
+use self::Colors::*;
+use codejam::util::codejam::run_cases;
+
 /*
 
 problem modeling/understanding
@@ -12,24 +14,26 @@ was close, used the official explanation to implement
 */
 pub fn solve_all_cases()
 {
-    //let mut children: Vec<thread::JoinHandle<_>> = vec![];
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round1B",
+        |reader, buffer| {
+            let t = reader.read_int();
 
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    let t = s.trim().parse::<u32>().unwrap();
+            for case_no in 1..=t {
+                //N, R, O(RY), Y, G(YB), B, and V(RB).
+                let input: Vec<u16> = reader.read_int_line();
 
-    for case in 1..=t {
-        //N, R, O(RY), Y, G(YB), B, and V(RB).
-        let input: Vec<u16> = read_int_line();
+                if case_no != 1 {
+                    //        continue;
+                }
 
-        //  children.push(thread::spawn(move || -> String { solve(case, &input) }));
-        print!("{}", solve(case, &input));
-    }
-    /*
-    for child in children
-    {
-        print!("{}", child.join().unwrap());
-    }*/
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&input)).unwrap();
+            }
+        },
+    );
 }
 
 #[derive(Debug, Copy, Clone)]
@@ -100,7 +104,6 @@ impl From<char> for Colors
     }
 }
 
-use self::Colors::*;
 static COLORS: [Colors; 6] = [Red, Orange, Yellow, Green, Blue, Violet];
 
 impl ::std::fmt::Display for Colors
@@ -364,15 +367,13 @@ fn solution(counts: &mut Counts) -> Option<String>
     Some(sol)
 }
 
-fn solve(case_no: u32, nroygbv: &Vec<u16>) -> String
+fn solve(nroygbv: &Vec<u16>) -> String
 {
-    debug!("Solving case {}", case_no);
     let mut counts: Counts = nroygbv.iter().skip(1).collect();
     let ans = solution(&mut counts);
 
     format!(
-        "Case #{}: {}\n",
-        case_no,
+        "{}",
         match ans {
             Some(ans) => ans,
             _ => "IMPOSSIBLE".to_string(),
diff --git a/codejam_2017/src/y2017round1B/b_backtracking.rs b/codejam_2017/src/y2017round1b/b_backtracking.rs
similarity index 100%
rename from codejam_2017/src/y2017round1B/b_backtracking.rs
rename to codejam_2017/src/y2017round1b/b_backtracking.rs
diff --git a/codejam_2017/src/y2017round1B/c.rs b/codejam_2017/src/y2017round1b/c.rs
similarity index 99%
rename from codejam_2017/src/y2017round1B/c.rs
rename to codejam_2017/src/y2017round1b/c.rs
index 953822a..d799776 100644
--- a/codejam_2017/src/y2017round1B/c.rs
+++ b/codejam_2017/src/y2017round1b/c.rs
@@ -1,4 +1,4 @@
-use super::super::util::input::*;
+use codejam::util::input::*;
 use std::cmp::Ordering;
 use std::collections::BinaryHeap;
 use std::f64;
diff --git a/codejam_2017/src/y2017round1B/mod.rs b/codejam_2017/src/y2017round1b/mod.rs
similarity index 100%
rename from codejam_2017/src/y2017round1B/mod.rs
rename to codejam_2017/src/y2017round1b/mod.rs
diff --git a/codejam_2017/src/y2017round1B/unused_ass_consts.rb b/codejam_2017/src/y2017round1b/unused_ass_consts.rb
similarity index 100%
rename from codejam_2017/src/y2017round1B/unused_ass_consts.rb
rename to codejam_2017/src/y2017round1b/unused_ass_consts.rb
diff --git a/codejam_2017/src/y2017round1C/2.py b/codejam_2017/src/y2017round1c/2.py
similarity index 100%
rename from codejam_2017/src/y2017round1C/2.py
rename to codejam_2017/src/y2017round1c/2.py
diff --git a/codejam_2017/src/y2017round1C/A-large-practice.in b/codejam_2017/src/y2017round1c/A-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1C/A-large-practice.in
rename to codejam_2017/src/y2017round1c/A-large-practice.in
diff --git a/codejam_2017/src/y2017round1C/A-large-practice.out b/codejam_2017/src/y2017round1c/A-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1C/A-large-practice.out
rename to codejam_2017/src/y2017round1c/A-large-practice.out
diff --git a/codejam_2017/src/y2017round1C/A-small-practice.in b/codejam_2017/src/y2017round1c/A-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1C/A-small-practice.in
rename to codejam_2017/src/y2017round1c/A-small-practice.in
diff --git a/codejam_2017/src/y2017round1C/A-small-practice.out b/codejam_2017/src/y2017round1c/A-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1C/A-small-practice.out
rename to codejam_2017/src/y2017round1c/A-small-practice.out
diff --git a/codejam_2017/src/y2017round1C/B-large-practice.in b/codejam_2017/src/y2017round1c/B-large-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1C/B-large-practice.in
rename to codejam_2017/src/y2017round1c/B-large-practice.in
diff --git a/codejam_2017/src/y2017round1C/B-large-practice.out b/codejam_2017/src/y2017round1c/B-large-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1C/B-large-practice.out
rename to codejam_2017/src/y2017round1c/B-large-practice.out
diff --git a/codejam_2017/src/y2017round1C/B-small-practice.in b/codejam_2017/src/y2017round1c/B-small-practice.in
similarity index 100%
rename from codejam_2017/src/y2017round1C/B-small-practice.in
rename to codejam_2017/src/y2017round1c/B-small-practice.in
diff --git a/codejam_2017/src/y2017round1C/B-small-practice.out b/codejam_2017/src/y2017round1c/B-small-practice.out
similarity index 100%
rename from codejam_2017/src/y2017round1C/B-small-practice.out
rename to codejam_2017/src/y2017round1c/B-small-practice.out
diff --git a/codejam_2017/src/y2017round1C/C-small-practice-1.in b/codejam_2017/src/y2017round1c/C-small-practice-1.in
similarity index 100%
rename from codejam_2017/src/y2017round1C/C-small-practice-1.in
rename to codejam_2017/src/y2017round1c/C-small-practice-1.in
diff --git a/codejam_2017/src/y2017round1C/C-small-practice-1.out b/codejam_2017/src/y2017round1c/C-small-practice-1.out
similarity index 100%
rename from codejam_2017/src/y2017round1C/C-small-practice-1.out
rename to codejam_2017/src/y2017round1c/C-small-practice-1.out
diff --git a/codejam_2017/src/y2017round1C/C-small-practice-2.in b/codejam_2017/src/y2017round1c/C-small-practice-2.in
similarity index 100%
rename from codejam_2017/src/y2017round1C/C-small-practice-2.in
rename to codejam_2017/src/y2017round1c/C-small-practice-2.in
diff --git a/codejam_2017/src/y2017round1C/C-small-practice-2.out b/codejam_2017/src/y2017round1c/C-small-practice-2.out
similarity index 100%
rename from codejam_2017/src/y2017round1C/C-small-practice-2.out
rename to codejam_2017/src/y2017round1c/C-small-practice-2.out
diff --git a/codejam_2017/src/y2017round1C/C.py b/codejam_2017/src/y2017round1c/C.py
similarity index 100%
rename from codejam_2017/src/y2017round1C/C.py
rename to codejam_2017/src/y2017round1c/C.py
diff --git a/codejam_2017/src/y2017round1C/a.rs b/codejam_2017/src/y2017round1c/a.rs
similarity index 98%
rename from codejam_2017/src/y2017round1C/a.rs
rename to codejam_2017/src/y2017round1c/a.rs
index 77b1342..ea1fb8c 100644
--- a/codejam_2017/src/y2017round1C/a.rs
+++ b/codejam_2017/src/y2017round1c/a.rs
@@ -1,4 +1,4 @@
-use super::super::util::input::*;
+use codejam::util::input::*;
 //use std::u16;
 use std::f64;
 //use std::cmp::max;
diff --git a/codejam_2017/src/y2017round1C/a_check.rs b/codejam_2017/src/y2017round1c/a_check.rs
similarity index 100%
rename from codejam_2017/src/y2017round1C/a_check.rs
rename to codejam_2017/src/y2017round1c/a_check.rs
diff --git a/codejam_2017/src/y2017round1C/b.rs b/codejam_2017/src/y2017round1c/b.rs
similarity index 98%
rename from codejam_2017/src/y2017round1C/b.rs
rename to codejam_2017/src/y2017round1c/b.rs
index 1616a9f..c84c751 100644
--- a/codejam_2017/src/y2017round1C/b.rs
+++ b/codejam_2017/src/y2017round1c/b.rs
@@ -1,4 +1,4 @@
-use super::super::util::input::*;
+use codejam::util::input::*;
 use std::cmp::min;
 
 const DAY: usize = 24 * 60;
diff --git a/codejam_2017/src/y2017round1C/c.rs b/codejam_2017/src/y2017round1c/c.rs
similarity index 99%
rename from codejam_2017/src/y2017round1C/c.rs
rename to codejam_2017/src/y2017round1c/c.rs
index 1c7e8d2..692ba6e 100644
--- a/codejam_2017/src/y2017round1C/c.rs
+++ b/codejam_2017/src/y2017round1c/c.rs
@@ -1,4 +1,4 @@
-use super::super::util::input::*;
+use codejam::util::input::*;
 //use std::cmp::min;
 use std::cmp::Ordering::*;
 
diff --git a/codejam_2017/src/y2017round1C/mod.rs b/codejam_2017/src/y2017round1c/mod.rs
similarity index 100%
rename from codejam_2017/src/y2017round1C/mod.rs
rename to codejam_2017/src/y2017round1c/mod.rs
diff --git a/codejam_2017/src/y2017round2/a.rs b/codejam_2017/src/y2017round2/a.rs
index 22bfab4..0430e67 100644
--- a/codejam_2017/src/y2017round2/a.rs
+++ b/codejam_2017/src/y2017round2/a.rs
@@ -1,5 +1,5 @@
-use super::super::util::input::*;
-use crate::util::input::InputReader;
+use codejam::util::codejam::run_cases;
+use codejam::util::input::*;
 
 /*
 state machine
@@ -8,21 +8,30 @@ optimization
 */
 pub fn solve_all_cases()
 {
-    let mut reader : InputReader = Default::default();
-    let t = reader.read_int();
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2017round2",
+        |reader, buffer| {
+            let t = reader.read_int();
 
-    for case in 1..=t {
-        let (_, P) = reader.read_tuple_2::<usize>();
-        let mut G: Vec<_> = reader.read_num_line::<usize>();
+            for case_no in 1..=t {
+                let (_, P) = reader.read_tuple_2::<usize>();
+                let mut G: Vec<_> = reader.read_num_line::<usize>();
 
-        print!("{}", solve(case, &mut G, P));
-    }
+                if case_no != 1 {
+                    //        continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:.6}", case_no, solve(&mut G, P)).unwrap();
+            }
+        },
+    );
 }
 
-fn solve(case_no: u32, G: &mut Vec<usize>, P: usize) -> String
+fn solve(G: &mut Vec<usize>, P: usize) -> String
 {
-    debug!("Solving case {}", case_no);
-
     for g in G.iter_mut() {
         *g %= P;
     }
@@ -70,5 +79,5 @@ fn solve(case_no: u32, G: &mut Vec<usize>, P: usize) -> String
         }
     }
 
-    format!("Case #{}: {}\n", case_no, groups_happy)
+    format!("{}\n", groups_happy)
 }
diff --git a/codejam_2017/src/y2017round2/b.rs b/codejam_2017/src/y2017round2/b.rs
index efa2997..c56f5c1 100644
--- a/codejam_2017/src/y2017round2/b.rs
+++ b/codejam_2017/src/y2017round2/b.rs
@@ -1,5 +1,5 @@
-use super::super::util::input::*;
-use super::super::util::math::*;
+use codejam::util::input::*;
+use codejam::util::math::*;
 use std::cmp::max;
 
 /*
@@ -9,7 +9,7 @@ minimization / optimization
 
 pub fn solve_all_cases()
 {
-    let mut reader : InputReader = Default::default();
+    let mut reader: InputReader = Default::default();
     let t = reader.read_int();
 
     for case in 1..=t {
diff --git a/codejam_2017/src/y2017round2/c.rs b/codejam_2017/src/y2017round2/c.rs
index 299a588..0d20d77 100644
--- a/codejam_2017/src/y2017round2/c.rs
+++ b/codejam_2017/src/y2017round2/c.rs
@@ -8,18 +8,21 @@ Simulation, grid, backtracking
 2-satisfiability / 2SAT
 
 */
-use crate::algo::graph::connectivity::ConnectivityGraph;
-use crate::algo::graph::Graph;
-use crate::util::grid::constants::*;
-use crate::util::grid::{Grid};
 
-use crate::util::codejam::run_cases;
 use bimap::BiMap;
 use std::default::Default;
 use std::fmt;
 use std::fmt::{Display, Formatter};
 use std::io::Write;
 
+use self::Tile::*;
+use codejam::algo::graph::connectivity::ConnectivityGraph;
+use codejam::algo::graph::Graph;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::constants::*;
+use codejam::util::grid::Grid;
+use codejam::util::vector_2d::Vector2d;
+
 pub fn solve_all_cases()
 {
     run_cases(
@@ -56,9 +59,6 @@ enum Tile
     HorizonalBeam,
 }
 
-use self::Tile::*;
-use crate::util::vector_2d::Vector2d;
-
 impl Tile
 {
     fn to_char(self) -> char
diff --git a/codejam_2017/src/y2017round2/d.rs b/codejam_2017/src/y2017round2/d.rs
index d4a9cad..72cd90d 100644
--- a/codejam_2017/src/y2017round2/d.rs
+++ b/codejam_2017/src/y2017round2/d.rs
@@ -7,11 +7,11 @@ BFS
 Cycles
 Hard
 */
-use crate::algo::graph::flow::*;
-use crate::algo::graph::*;
-use crate::util::grid::constants::*;
-use crate::util::grid::{Grid, GridCoord, GridRowColVec};
-use crate::util::input::*;
+use codejam::algo::graph::flow::*;
+use codejam::algo::graph::*;
+use codejam::util::grid::constants::*;
+use codejam::util::grid::{Grid, GridCoord, GridRowColVec};
+use codejam::util::input::*;
 //use std::thread;
 use bimap::BiMap;
 use bit_vec::BitVec;
@@ -86,7 +86,7 @@ enum Tile
 }
 
 use self::Tile::*;
-use crate::util::codejam::run_cases;
+use codejam::util::codejam::run_cases;
 
 impl Tile
 {
diff --git a/codejam_2017/src/y2017round3/a.rs b/codejam_2017/src/y2017round3/a.rs
index 9606686..e75115a 100644
--- a/codejam_2017/src/y2017round3/a.rs
+++ b/codejam_2017/src/y2017round3/a.rs
@@ -1,4 +1,4 @@
-use crate::util::codejam::run_cases;
+use codejam::util::codejam::run_cases;
 use indexmap::IndexSet;
 use num_integer::binomial;
 use permutohedron::LexicalPermutation;
diff --git a/codejam_2017/src/y2017round3/b.rs b/codejam_2017/src/y2017round3/b.rs
index 8057ae9..323120b 100644
--- a/codejam_2017/src/y2017round3/b.rs
+++ b/codejam_2017/src/y2017round3/b.rs
@@ -1,6 +1,6 @@
-use crate::algo::graph::DiGraph;
-use crate::util::codejam::run_cases;
 use bit_set::BitSet;
+use codejam::algo::graph::DiGraph;
+use codejam::util::codejam::run_cases;
 use std::io::Write;
 
 /*
diff --git a/codejam_2017/src/y2017round3/c.rs b/codejam_2017/src/y2017round3/c.rs
index fa1862d..08a5fa6 100644
--- a/codejam_2017/src/y2017round3/c.rs
+++ b/codejam_2017/src/y2017round3/c.rs
@@ -1,5 +1,5 @@
-use crate::algo::graph::disjointset::DisjointSet;
-use crate::util::codejam::run_cases;
+use codejam::algo::graph::disjointset::DisjointSet;
+use codejam::util::codejam::run_cases;
 use std::cmp::min;
 use std::io::Write;
 
diff --git a/codejam_2017/src/y2017round3/d.rs b/codejam_2017/src/y2017round3/d.rs
index 1eeb465..2c46e68 100644
--- a/codejam_2017/src/y2017round3/d.rs
+++ b/codejam_2017/src/y2017round3/d.rs
@@ -1,7 +1,7 @@
 use self::constants::*;
-use crate::algo::large_nums::*;
-use crate::util::codejam::run_cases;
-use crate::util::grid::Grid;
+use codejam::algo::large_nums::*;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::Grid;
 use itertools::Itertools;
 use num_integer::div_rem;
 use std::cmp::min;
@@ -605,15 +605,15 @@ fn calc_grid_sum_4_influencers(
 mod test_round3_d
 {
     use super::*;
-    use crate::util::grid::constants::*;
-    use crate::util::grid::Grid;
-    use crate::util::grid::*;
+    use codejam::util::grid::constants::*;
+    use codejam::util::grid::Grid;
+    use codejam::util::grid::*;
+    use codejam::util::vector_2d::Vector2d;
     use rand::distributions::{Distribution, Uniform};
     use rand::prelude::StdRng;
     use rand::SeedableRng;
     use std::ops::Range;
     use std::usize;
-    use crate::util::vector_2d::Vector2d;
 
     ///
     /// Assume inf is in top/left corner.  each grid cell gets D added to it
@@ -664,7 +664,7 @@ mod test_round3_d
 
         let corner_coords: Vec<_> = (0..=3)
             .map(|i| {
-                 Vector2d::with_val(
+                Vector2d::with_val(
                     if i < 2 { 0 } else { height - 1 },
                     if i == 0 || i == 3 { 0 } else { width - 1 },
                 )
@@ -732,7 +732,10 @@ mod test_round3_d
 
         let mut g: Grid<usize> = Grid::new(height, width);
 
-        let corner_coords = vec![ Vector2d::with_val(0, 0),  Vector2d::with_val(height - 1, width - 1)];
+        let corner_coords = vec![
+            Vector2d::with_val(0, 0),
+            Vector2d::with_val(height - 1, width - 1),
+        ];
 
         for (coord, val) in corner_coords.iter().zip(corners.iter()) {
             g[coord] = *val;
@@ -825,13 +828,8 @@ mod test_round3_d
                 0..grid_height,
                 D,
             );
-            let sum2 = calc_grid_sum_4_influencers(
-                &corner_values[..],
-                grid_width,
-                grid_height,
-                D,
-                MODULO,
-            );
+            let sum2 =
+                calc_grid_sum_4_influencers(&corner_values[..], grid_width, grid_height, D, MODULO);
 
             debug!("Sum1 {:?} Sum2 {:?}", sum1, sum2);
             assert_eq!(sum1, sum2);
@@ -870,13 +868,8 @@ mod test_round3_d
                 grid_height,
                 D,
             );
-            let sum4 = calc_sum_2_influencers(
-                &corner_values[0..2],
-                grid_width,
-                grid_height,
-                D,
-                MODULO,
-            );
+            let sum4 =
+                calc_sum_2_influencers(&corner_values[0..2], grid_width, grid_height, D, MODULO);
 
             debug!("Sum3 {:?} Sum4 {:?}", sum3, sum4);
             assert_eq!(sum3, sum4);
diff --git a/codejam_2017/src/y2017round4/a.rs b/codejam_2017/src/y2017round4/a.rs
index 8ad4f1a..5b7b87d 100644
--- a/codejam_2017/src/y2017round4/a.rs
+++ b/codejam_2017/src/y2017round4/a.rs
@@ -1,7 +1,7 @@
-use crate::algo::graph::flow2::Flow;
-use crate::util::codejam::run_cases;
 use bit_set::BitSet;
 use bit_vec::BitVec;
+use codejam::algo::graph::flow2::Flow;
+use codejam::util::codejam::run_cases;
 use rand::{thread_rng, Rng};
 use std::cmp::max;
 use std::collections::HashSet;
diff --git a/codejam_2017/src/y2017round4/b.rs b/codejam_2017/src/y2017round4/b.rs
index 12d39f8..0b97583 100644
--- a/codejam_2017/src/y2017round4/b.rs
+++ b/codejam_2017/src/y2017round4/b.rs
@@ -1,7 +1,7 @@
-use crate::algo::graph::flow2::Flow;
-use crate::util::codejam::run_cases;
 use bit_set::BitSet;
 use bit_vec::BitVec;
+use codejam::algo::graph::flow2::Flow;
+use codejam::util::codejam::run_cases;
 use rand::{thread_rng, Rng};
 use std::cmp::{max, min};
 use std::collections::HashSet;
diff --git a/codejam_2017/src/y2017round4/c.rs b/codejam_2017/src/y2017round4/c.rs
index ea003de..d00e1f9 100644
--- a/codejam_2017/src/y2017round4/c.rs
+++ b/codejam_2017/src/y2017round4/c.rs
@@ -1,5 +1,5 @@
-use crate::util::codejam::run_cases;
-use crate::util::grid::Grid;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::Grid;
 use nalgebra::*;
 use rand::distributions::{Distribution, Uniform};
 use rand::prelude::StdRng;
diff --git a/codejam_2017/src/y2017round4/d.rs b/codejam_2017/src/y2017round4/d.rs
index 3ac954a..bb58fea 100644
--- a/codejam_2017/src/y2017round4/d.rs
+++ b/codejam_2017/src/y2017round4/d.rs
@@ -1,6 +1,6 @@
-use crate::algo::vectors::*;
-use crate::util::codejam::run_cases;
-use crate::util::grid::Grid;
+use codejam::algo::vectors::*;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::Grid;
 use num_bigint::BigInt;
 use num_traits::*;
 use rand::distributions::{Distribution, Uniform};
diff --git a/codejam_2017/src/y2017round4/e.rs b/codejam_2017/src/y2017round4/e.rs
index 24e4c67..0256fc7 100644
--- a/codejam_2017/src/y2017round4/e.rs
+++ b/codejam_2017/src/y2017round4/e.rs
@@ -1,7 +1,7 @@
-use crate::algo::vectors::*;
-use crate::util::codejam::run_cases;
-use crate::util::grid::Grid;
 use bimap::BiMap;
+use codejam::algo::vectors::*;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::Grid;
 use num_bigint::BigInt;
 use num_traits::*;
 use rand::distributions::{Distribution, Uniform};
diff --git a/codejam_2017/src/y2017round4/f.rs b/codejam_2017/src/y2017round4/f.rs
index b3bf658..e25114b 100644
--- a/codejam_2017/src/y2017round4/f.rs
+++ b/codejam_2017/src/y2017round4/f.rs
@@ -1,7 +1,7 @@
-//use crate::algo::vectors::*;
-use crate::util::codejam::run_cases;
-use crate::util::grid::Grid;
+//use codejam::algo::vectors::*;
 use bimap::BiMap;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::Grid;
 //use num_traits::*;
 use rand::distributions::{Distribution, Uniform};
 use rand::prelude::{SliceRandom, StdRng};
@@ -87,7 +87,7 @@ fn get_longest_path_for_step(
         }
 
         // println!("Multiplying with {}", step_idx);
-       
+
         //
         for t1_idx in 0..N {
             for t2_idx in 0..N {
@@ -133,11 +133,9 @@ fn solve(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
         .iter()
         .fold(i64::MAX, |acc, t| min(acc, dist(&dest, t)));
 
-
     //extra
     let mut dist_matrix = Vec::new();
 
-
     /*
     create a matrix [log steps][t_idx][t2_idx]
 

From f065ddda2b68a24bb08abb4bc32559d984bed3da Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 12:53:07 -0300
Subject: [PATCH 072/122] 2017

---
 codejam_2017/src/main.rs           |   6 +-
 codejam_2017/src/y2017qual/a.rs    |  48 ++++++++----
 codejam_2017/src/y2017qual/b.rs    |  28 +++++--
 codejam_2017/src/y2017qual/c.rs    |  30 +++++---
 codejam_2017/src/y2017qual/d.rs    | 116 +++++++++++++----------------
 codejam_2017/src/y2017round1a/a.rs |  57 ++++++--------
 codejam_2017/src/y2017round1a/b.rs |   8 +-
 codejam_2017/src/y2017round1a/c.rs |  24 +++---
 codejam_2017/src/y2017round1b/a.rs |   6 +-
 codejam_2017/src/y2017round1b/b.rs |   4 +-
 codejam_2017/src/y2017round1b/c.rs |  45 ++++++-----
 codejam_2017/src/y2017round1c/a.rs |  48 +++++++-----
 codejam_2017/src/y2017round1c/b.rs |  31 +++++---
 codejam_2017/src/y2017round1c/c.rs |  33 ++++----
 codejam_2017/src/y2017round2/a.rs  |   1 +
 codejam_2017/src/y2017round2/c.rs  |  26 +++----
 codejam_2017/src/y2017round2/d.rs  |   3 +-
 codejam_2017/src/y2017round4/b.rs  |   9 +--
 codejam_2017/src/y2017round4/c.rs  |  11 ++-
 codejam_2017/src/y2017round4/d.rs  |   6 +-
 codejam_2017/src/y2017round4/e.rs  |   9 ---
 codejam_2017/src/y2017round4/f.rs  |   8 --
 22 files changed, 291 insertions(+), 266 deletions(-)

diff --git a/codejam_2017/src/main.rs b/codejam_2017/src/main.rs
index 634df72..3037cd7 100644
--- a/codejam_2017/src/main.rs
+++ b/codejam_2017/src/main.rs
@@ -26,6 +26,7 @@ pub fn run_y2017_round_qual()
     y2017qual::a::solve_all_cases();
     y2017qual::b::solve_all_cases();
     y2017qual::c::solve_all_cases();
+    y2017qual::d::solve_all_cases();
 }
 
 pub fn run_y2017_round_1a()
@@ -78,8 +79,9 @@ fn main()
 {
     init_log();
 
-    run_y2017_round1a();
-    run_y2017_round1b();
+    run_y2017_round_qual();
+    run_y2017_round_1a();
+    run_y2017_round_1b();
     run_y2017_round2();
     //run_y2017_round4();
 }
diff --git a/codejam_2017/src/y2017qual/a.rs b/codejam_2017/src/y2017qual/a.rs
index 491a243..efc33de 100644
--- a/codejam_2017/src/y2017qual/a.rs
+++ b/codejam_2017/src/y2017qual/a.rs
@@ -1,23 +1,43 @@
-use std::io::stdin;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
 
 //use bit_vec::BitVec;
 
 //Greedy algorithm
 
-pub fn solve_case()
+pub fn solve_all_cases()
 {
-    //handle input / output
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    let s: Vec<_> = s.split_whitespace().collect();
-    let k = s[1].trim().parse::<usize>().unwrap();
-    let s = s[0].trim();
-    let mut v: Vec<bool> = s.chars().map(|x| x == '+').collect();
-
-    match solve(&mut v, k) {
-        None => println!("IMPOSSIBLE"),
-        Some(ans) => println!("{}", ans),
-    }
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2017qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let s: Vec<_> = reader.read_string_line();
+                let k = s[1].trim().parse::<usize>().unwrap();
+                let s = s[0].trim();
+                let mut v: Vec<bool> = s.chars().map(|x| x == '+').collect();
+
+                if case_no != 1 {
+                    //        continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    match solve(&mut v, k) {
+                        None => "IMPOSSIBLE".to_string(),
+                        Some(ans) => ans.to_string(),
+                    }
+                )
+                .unwrap();
+            }
+        },
+    );
 }
 
 fn solve(pancake_row: &mut [bool], k: usize) -> Option<usize>
diff --git a/codejam_2017/src/y2017qual/b.rs b/codejam_2017/src/y2017qual/b.rs
index 5223503..83a6d1b 100644
--- a/codejam_2017/src/y2017qual/b.rs
+++ b/codejam_2017/src/y2017qual/b.rs
@@ -1,12 +1,28 @@
-use std::io::stdin;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
 //Adhoc / digits / integers
-pub fn solve_case()
+
+pub fn solve_all_cases()
 {
-    //handle input / output
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2017qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let s = reader.read_string();
+
+                if case_no != 1 {
+                    //        continue;
+                }
+
+                println!("Solving case {}", case_no);
 
-    println!("{}", solve(&s));
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&s)).unwrap();
+            }
+        },
+    );
 }
 
 /*
diff --git a/codejam_2017/src/y2017qual/c.rs b/codejam_2017/src/y2017qual/c.rs
index 1c0539c..77d7434 100644
--- a/codejam_2017/src/y2017qual/c.rs
+++ b/codejam_2017/src/y2017qual/c.rs
@@ -1,16 +1,26 @@
-use std::io::stdin;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
 
 //counting balanced binary tree nodes
-pub fn solve_case()
+
+pub fn solve_all_cases()
 {
-    //handle input / output
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    debug!("Read {}", s);
-    let nums: Vec<u64> = s.split_whitespace().map(|n| n.parse().unwrap()).collect();
-
-    let ans = solve(nums[0], nums[1]);
-    println!("{} {}", ans.0, ans.1);
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2017qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let nums: Vec<u64> = reader.read_num_line();
+
+                println!("Solving case {}", case_no);
+
+                let ans = solve(nums[0], nums[1]);
+                writeln!(buffer, "Case #{}: {} {}", case_no, ans.0, ans.1).unwrap();
+            }
+        },
+    );
 }
 
 fn solve(n: u64, k: u64) -> (u64, u64)
diff --git a/codejam_2017/src/y2017qual/d.rs b/codejam_2017/src/y2017qual/d.rs
index f0ac52e..f9213dc 100644
--- a/codejam_2017/src/y2017qual/d.rs
+++ b/codejam_2017/src/y2017qual/d.rs
@@ -1,5 +1,5 @@
-use std::io::stdin;
-use std::thread;
+use std::io::Write;
+use codejam::util::codejam::run_cases;
 
 type BoardInt = i32;
 type BoardVV = Vec<Vec<bool>>;
@@ -16,71 +16,59 @@ problem modeling/understanding
 
 pub fn solve_all_cases()
 {
-    let mut children: Vec<thread::JoinHandle<_>> = vec![];
-
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    let t = s.trim().parse::<u32>().unwrap();
-
-    for case in 1..=t {
-        //handle input / output
-        let mut s = String::new();
-        stdin().read_line(&mut s).unwrap();
-        //debug!("Read {}", s);
-        let n_and_m: Vec<u32> = s.split_whitespace().map(|n| n.parse().unwrap()).collect();
-        let (n, m) = (n_and_m[0], n_and_m[1]);
-
-        /* + are bishops
-         * x are rooks; place as many as possible such that no row has 2
-         * It is a bit confusing to understand that from the restriction
-         * Whenever any two models share a diagonal of the grid, at least one of the two must be an x
-         *
-         * We basically place as many as possible of each indepedently, then combine them to 'o'
-         * we pivot the bishop boards to make it the same problem as rooks
-         */
-        let mut existing_rooks: Vec<RowCol> = Vec::new();
-        let mut existing_bishops: Vec<RowCol> = Vec::new();
-
-        for _ in 0..m {
-            s.clear();
-            stdin().read_line(&mut s).unwrap();
-            let chars_line: Vec<&str> = s.split_whitespace().collect();
-
-            let (m_type, row, col): (char, BoardInt, BoardInt) = (
-                chars_line[0].chars().next().unwrap(),
-                chars_line[1].parse().unwrap(),
-                chars_line[2].parse().unwrap(),
-            );
-
-            if m_type == 'o' || m_type == 'x' {
-                existing_rooks.push(RowCol(row - 1, col - 1));
-            }
-            if m_type == 'o' || m_type == '+' {
-                existing_bishops.push(RowCol(row - 1, col - 1));
-            }
-        }
-
-        if cfg!(feature = "debug_print") && case != 4 {
-            continue;
-        }
+    run_cases(
+        &["D-small-practice", "D-large-practice"],
+        "y2017qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n, m) = reader.read_tuple_2();
+
+                /* + are bishops
+                 * x are rooks; place as many as possible such that no row has 2
+                 * It is a bit confusing to understand that from the restriction
+                 * Whenever any two models share a diagonal of the grid, at least one of the two must be an x
+                 *
+                 * We basically place as many as possible of each indepedently, then combine them to 'o'
+                 * we pivot the bishop boards to make it the same problem as rooks
+                 */
+                let mut existing_rooks: Vec<RowCol> = Vec::new();
+                let mut existing_bishops: Vec<RowCol> = Vec::new();
+
+                for _ in 0..m {
+
+                    let chars_line: Vec<_> = reader.read_string_line();
+
+                    let (m_type, row, col): (char, BoardInt, BoardInt) = (
+                        chars_line[0].chars().next().unwrap(),
+                        chars_line[1].parse().unwrap(),
+                        chars_line[2].parse().unwrap(),
+                    );
+
+                    if m_type == 'o' || m_type == 'x' {
+                        existing_rooks.push(RowCol(row - 1, col - 1));
+                    }
+                    if m_type == 'o' || m_type == '+' {
+                        existing_bishops.push(RowCol(row - 1, col - 1));
+                    }
+                }
 
-        children.push(thread::spawn(move || -> String {
-            solve(case, n, existing_bishops, existing_rooks)
-        }));
-    }
+                println!("Solving case {}", case_no);
 
-    for child in children {
-        // collect each child thread's return-value
-        print!("{}", child.join().unwrap());
-    }
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(n, existing_bishops, existing_rooks)
+                )
+                .unwrap();
+            }
+        },
+    );
 }
 
-fn solve(
-    case_num: u32,
-    n: u32,
-    existing_bishops: Vec<RowCol>,
-    existing_rooks: Vec<RowCol>,
-) -> String
+fn solve(n: u32, existing_bishops: Vec<RowCol>, existing_rooks: Vec<RowCol>) -> String
 {
     let b = Board::new(n as BoardInt, existing_bishops, existing_rooks);
 
@@ -90,7 +78,7 @@ fn solve(
     let score = b.existing_bishops.len() + bishops.len() + b.existing_rooks.len() + rooks.len();
 
     let (lines, added) = b.write_solution_lines(&rooks, &bishops);
-    format!("Case #{}: {} {}\n{}", case_num, score, added, lines)
+    format!("{} {}\n{}", score, added, lines)
 }
 
 struct Board
diff --git a/codejam_2017/src/y2017round1a/a.rs b/codejam_2017/src/y2017round1a/a.rs
index 5d6d79e..a550bcc 100644
--- a/codejam_2017/src/y2017round1a/a.rs
+++ b/codejam_2017/src/y2017round1a/a.rs
@@ -1,5 +1,5 @@
-use std::io::stdin;
-use std::thread;
+use std::io::Write;
+use codejam::util::codejam::run_cases;
 
 /*
 grid
@@ -9,38 +9,29 @@ TODO use grid class
 */
 pub fn solve_all_cases()
 {
-    let mut children: Vec<thread::JoinHandle<_>> = vec![];
-
-    let mut s = String::new();
-    stdin().read_line(&mut s).unwrap();
-    let t = s.trim().parse::<u32>().unwrap();
-
-    for case in 1..=t {
-        //handle input / output
-        let mut s = String::new();
-        stdin().read_line(&mut s).unwrap();
-        //debug!("Read {}", s);
-        let r_and_c: Vec<u8> = s.split_whitespace().map(|n| n.parse().unwrap()).collect();
-        let (r, _) = (r_and_c[0], r_and_c[1]);
-
-        let mut grid: Vec<Vec<char>> = Vec::new();
-
-        for _ in 0..r {
-            s.clear();
-            stdin().read_line(&mut s).unwrap();
-            grid.push(s.chars().collect());
-        }
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round1a",
+        |reader, buffer| {
+            let t = reader.read_int();
 
-        if cfg!(feature = "debug_print") && case != 4 {
-            continue;
-        }
+            for case_no in 1..=t {
 
-        children.push(thread::spawn(move || -> String { solve(case, &mut grid) }));
-    }
+                //handle input / output
+                let (r, c) = reader.read_tuple_2();
+
+                let mut grid: Vec<Vec<char>> = Vec::new();
+
+                for _ in 0..r {
+                    let s = reader.read_string();
+                    grid.push(s.chars().collect());
+                }
+
+
+                writeln!(buffer, "Case #{}: {:.6}", case_no, solve( &mut grid)).unwrap();
+            }
+        });
 
-    for child in children {
-        print!("{}", child.join().unwrap());
-    }
 }
 
 fn handle_col(r: usize, c: usize, grid: &mut Vec<Vec<char>>, last_value: &mut char)
@@ -57,7 +48,7 @@ fn handle_col(r: usize, c: usize, grid: &mut Vec<Vec<char>>, last_value: &mut ch
     }
 }
 
-fn solve(case_no: u32, grid: &mut Vec<Vec<char>>) -> String
+fn solve( grid: &mut Vec<Vec<char>>) -> String
 {
     //let mut last_value: char = '?';
 
@@ -96,7 +87,7 @@ fn solve(case_no: u32, grid: &mut Vec<Vec<char>>) -> String
         }
     }
 
-    let mut ans = format!("Case #{}:\n", case_no);
+    let mut ans = "\n".to_string();
     for r in 0..n_rows {
         for c in 0..n_cols {
             ans += &grid[r][c].to_string();
diff --git a/codejam_2017/src/y2017round1a/b.rs b/codejam_2017/src/y2017round1a/b.rs
index 26f2d46..990f52b 100644
--- a/codejam_2017/src/y2017round1a/b.rs
+++ b/codejam_2017/src/y2017round1a/b.rs
@@ -1,6 +1,6 @@
-//use codejam::util::input::read_int_line;
+//use codejam::util::input::read_num_line;
 use codejam::util::codejam::run_cases;
-use std::io::stdin;
+use std::io::Write;
 use std::thread;
 
 /*
@@ -25,11 +25,11 @@ pub fn solve_all_cases()
 
                 let (n, p) = reader.read_tuple_2();
 
-                let r: Vec<u32> = reader.read_int_line();
+                let r: Vec<u32> = reader.read_num_line();
 
                 let mut q: Vec<Vec<u32>> = Vec::new();
                 for _ in 0..n {
-                    q.push(reader.read_int_line());
+                    q.push(reader.read_num_line());
                 }
                 children.push(thread::spawn(move || -> String {
                     solve(case_no, n, p, &r, &q)
diff --git a/codejam_2017/src/y2017round1a/c.rs b/codejam_2017/src/y2017round1a/c.rs
index 36c175f..94307da 100644
--- a/codejam_2017/src/y2017round1a/c.rs
+++ b/codejam_2017/src/y2017round1a/c.rs
@@ -1,6 +1,6 @@
 use codejam::util::codejam::run_cases;
 use std::cmp;
-use std::io::stdin;
+use std::io::Write;
 use std::thread;
 
 /*
@@ -13,18 +13,11 @@ pub fn solve_all_cases()
         "y2008round1a",
         |reader, buffer| {
             let t = reader.read_int();
-            let mut children: Vec<thread::JoinHandle<_>> = vec![];
 
             for case_no in 1..=t {
                 //handle input / output
                 //Hd, Ad, Hk, Ak, B, and D;
-                let input: Vec<i64> = reader.read_int_line();
-
-                children.push(thread::spawn(move || -> String {
-                    solve(
-                        case_no, input[0], input[1], input[2], input[3], input[4], input[5],
-                    )
-                }));
+                let input: Vec<i64> = reader.read_num_line();
 
                 if case_no != 1 {
                     //        continue;
@@ -32,9 +25,10 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                for child in children {
-                    writeln!(buffer, "{}", child.join().unwrap()).unwrap();
-                }
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(
+                         input[0], input[1], input[2], input[3], input[4], input[5],
+                    )).unwrap();
             }
         },
     );
@@ -42,7 +36,7 @@ pub fn solve_all_cases()
 
 const R: i64 = 100;
 
-fn solve(case_no: u32, Hd: i64, Ad: i64, Hk: i64, Ak: i64, B: i64, D: i64) -> String
+fn solve( Hd: i64, Ad: i64, Hk: i64, Ak: i64, B: i64, D: i64) -> String
 {
     let MAX_TURN = 10i64.pow(15);
     let mut Ak = Ak;
@@ -121,8 +115,8 @@ fn solve(case_no: u32, Hd: i64, Ad: i64, Hk: i64, Ak: i64, B: i64, D: i64) -> St
     }
 
     if minturn == MAX_TURN {
-        format!("Case #{}: {}\n", case_no, "IMPOSSIBLE")
+        format!("{}", "IMPOSSIBLE")
     } else {
-        format!("Case #{}: {}\n", case_no, minturn)
+        format!("{}", minturn)
     }
 }
diff --git a/codejam_2017/src/y2017round1b/a.rs b/codejam_2017/src/y2017round1b/a.rs
index f0417de..bb42fec 100644
--- a/codejam_2017/src/y2017round1b/a.rs
+++ b/codejam_2017/src/y2017round1b/a.rs
@@ -1,5 +1,5 @@
 use codejam::util::codejam::run_cases;
-use std::io::stdin;
+use std::io::Write;
 use std::thread;
 
 /*
@@ -25,11 +25,11 @@ pub fn solve_all_cases()
 
             for case_no in 1..=t {
                 //D & N
-                let input: Vec<u64> = reader.read_int_line();
+                let input: Vec<u64> = reader.read_num_line();
                 let n = input[1];
                 let mut horse = (0..n)
                     .map(|_| {
-                        let input: Vec<u64> = reader.read_int_line();
+                        let input: Vec<u64> = reader.read_num_line();
                         Horse {
                             start_pos: input[0] as f64,
                             velocity: input[1] as f64,
diff --git a/codejam_2017/src/y2017round1b/b.rs b/codejam_2017/src/y2017round1b/b.rs
index f9a96e7..e22bc8d 100644
--- a/codejam_2017/src/y2017round1b/b.rs
+++ b/codejam_2017/src/y2017round1b/b.rs
@@ -1,6 +1,6 @@
 use itertools::Itertools;
 use std::fmt;
-use std::io::stdin;
+use std::io::Write;
 use std::iter::FromIterator;
 
 use self::Colors::*;
@@ -22,7 +22,7 @@ pub fn solve_all_cases()
 
             for case_no in 1..=t {
                 //N, R, O(RY), Y, G(YB), B, and V(RB).
-                let input: Vec<u16> = reader.read_int_line();
+                let input: Vec<u16> = reader.read_num_line();
 
                 if case_no != 1 {
                     //        continue;
diff --git a/codejam_2017/src/y2017round1b/c.rs b/codejam_2017/src/y2017round1b/c.rs
index d799776..483146d 100644
--- a/codejam_2017/src/y2017round1b/c.rs
+++ b/codejam_2017/src/y2017round1b/c.rs
@@ -3,6 +3,8 @@ use std::cmp::Ordering;
 use std::collections::BinaryHeap;
 use std::f64;
 use std::u16;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
 
 /*
 dijkstras ; creating nodes based on other state
@@ -15,19 +17,23 @@ struct Horse
 
 type Distance = u32;
 type CityIndex = usize;
-
 pub fn solve_all_cases()
 {
-    let mut reader = InputReader::new();
-    let t = reader.read_int();
-
-    for case in 1..=t {
-        let (N, Q) = reader.read_tuple_2::<u8, u8>();
-        let horses: Vec<_> = (0..N)
-            .map(|_| reader.read_tuple_2::<Distance, u16>())
-            .map(|tp| Horse { E: tp.0, S: tp.1 })
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008round1b",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n,q) = reader.read_tuple_2();
+
+
+        let horses: Vec<_> = (0..n)
+            .map(|_| reader.read_tuple_2::<u32>())
+            .map(|tp| Horse { E: tp.0, S: tp.1 as u16 })
             .collect();
-        let city_dist: Vec<_> = (0..N)
+        let city_dist: Vec<_> = (0..n)
             .map(|_| {
                 reader
                     .read_num_line::<i32>()
@@ -36,13 +42,19 @@ pub fn solve_all_cases()
                     .collect()
             })
             .collect();
-        let queries: Vec<_> = (0..Q)
-            .map(|_| reader.read_tuple_2::<CityIndex, CityIndex>())
+        let queries: Vec<_> = (0..q)
+            .map(|_| reader.read_tuple_2::<CityIndex>())
             .collect();
-        print!("{}", solve(case, &horses, &city_dist, &queries));
-    }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve( &horses, &city_dist, &queries)).unwrap();
+            }
+        },
+    );
 }
 
+
 #[derive(Copy, Clone)]
 struct Node
 {
@@ -101,16 +113,13 @@ impl Ord for Node
 }
 
 fn solve(
-    case_no: u32,
     horses: &Vec<Horse>,
     city_dist: &Vec<Vec<Option<Distance>>>,
     queries: &Vec<(CityIndex, CityIndex)>,
 ) -> String
 {
-    debug!("Solving case {}", case_no);
     format!(
-        "Case #{}: {}\n",
-        case_no,
+        "{}\n",
         queries
             .iter()
             .map(|q| solve_query(horses, city_dist, q.0 - 1, q.1 - 1))
diff --git a/codejam_2017/src/y2017round1c/a.rs b/codejam_2017/src/y2017round1c/a.rs
index ea1fb8c..ac09dbc 100644
--- a/codejam_2017/src/y2017round1c/a.rs
+++ b/codejam_2017/src/y2017round1c/a.rs
@@ -1,7 +1,8 @@
 use codejam::util::input::*;
 //use std::u16;
 use std::f64;
-//use std::cmp::max;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
 
 /*
 geometry,
@@ -19,29 +20,36 @@ struct Pancake
 
 pub fn solve_all_cases()
 {
-    let mut reader = InputReader::new();
-    let t = reader.read_int();
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round1c",
+        |reader, buffer| {
+            let t = reader.read_int();
 
-    for case in 1..=t {
-        let (N, K) = reader.read_tuple_2::<u16, u16>();
-        let mut pancakes: Vec<_> = (0..N)
-            .map(|_| reader.read_tuple_2::<u32, u32>())
-            .map(|tp| Pancake {
-                R: tp.0,
-                H: tp.1,
-                area_top: 0f64,
-                area_sides: 0f64,
-            })
-            .collect();
+            for case_no in 1..=t {
+                let (N, K) = reader.read_tuple_2::<u16>();
+                let mut pancakes: Vec<_> = (0..N)
+                    .map(|_| reader.read_tuple_2::<u32>())
+                    .map(|tp| Pancake {
+                        R: tp.0,
+                        H: tp.1,
+                        area_top: 0f64,
+                        area_sides: 0f64,
+                    })
+                    .collect();
+
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&mut pancakes, K)).unwrap();
+            }
+        },
+    );
 
-        print!("{}", solve(case, &mut pancakes, K));
-    }
 }
 
-fn solve(case_no: u32, pancakes: &mut Vec<Pancake>, K: u16) -> String
+fn solve(pancakes: &mut Vec<Pancake>, K: u16) -> String
 {
-    debug!("Solving case {}", case_no);
-
     pancakes.sort_unstable_by(|a, b| b.R.cmp(&a.R).then(b.H.cmp(&a.H)));
 
     //Precompute cylindar side surface area & top area
@@ -69,5 +77,5 @@ fn solve(case_no: u32, pancakes: &mut Vec<Pancake>, K: u16) -> String
         })
         .fold(0f64, |acc, x| if x > acc { x } else { acc });
 
-    format!("Case #{}: {}\n", case_no, max_syrup)
+    format!("{}", max_syrup)
 }
diff --git a/codejam_2017/src/y2017round1c/b.rs b/codejam_2017/src/y2017round1c/b.rs
index c84c751..f40015d 100644
--- a/codejam_2017/src/y2017round1c/b.rs
+++ b/codejam_2017/src/y2017round1c/b.rs
@@ -1,5 +1,8 @@
 use codejam::util::input::*;
 use std::cmp::min;
+use std::io::Write;
+use self::Parent::*;
+use codejam::util::codejam::run_cases;
 
 const DAY: usize = 24 * 60;
 
@@ -12,31 +15,37 @@ enum Parent
     Cameron,
     Jamie,
 }
-use self::Parent::*;
 
 pub fn solve_all_cases()
 {
-    let mut reader = InputReader::new();
-    let t = reader.read_int();
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round1c",
+        |reader, buffer| {
+            let t = reader.read_int();
 
-    for case in 1..=t {
-        let (Ac, Aj) = reader.read_tuple_2::<u8, u8>();
+            for case_no in 1..=t {
+                let (Ac, Aj) = reader.read_tuple_2::<u8>();
 
         let mut fixed: Vec<Option<Parent>> = vec![None; DAY];
         for i in 0..Ac + Aj {
-            let (start, stop) = reader.read_tuple_2::<u16, u16>();
+            let (start, stop) = reader.read_tuple_2::<u16>();
             //intervals are open on right
             for t in start..stop {
                 fixed[t as usize] = if i < Ac { Some(Cameron) } else { Some(Jamie) };
             }
         }
-        print!("{}", solve(case, &fixed));
-    }
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&fixed)).unwrap();
+            }
+        },
+    );
+
 }
 
-fn solve(case_no: u32, fixed: &[Option<Parent>]) -> String
+fn solve(fixed: &[Option<Parent>]) -> String
 {
-    debug!("Solving case {}", case_no);
     //From alkjash python solution
 
     /*
@@ -71,5 +80,5 @@ fn solve(case_no: u32, fixed: &[Option<Parent>]) -> String
         ans += 1;
     }
 
-    format!("Case #{}: {}\n", case_no, ans)
+    format!("{}", ans)
 }
diff --git a/codejam_2017/src/y2017round1c/c.rs b/codejam_2017/src/y2017round1c/c.rs
index 692ba6e..917e8b5 100644
--- a/codejam_2017/src/y2017round1c/c.rs
+++ b/codejam_2017/src/y2017round1c/c.rs
@@ -1,6 +1,8 @@
 use codejam::util::input::*;
 //use std::cmp::min;
 use std::cmp::Ordering::*;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
 
 /*
 hard custom algorithm / proof
@@ -9,20 +11,27 @@ probability of success of at least K independent events
 */
 pub fn solve_all_cases()
 {
-    let mut reader = InputReader::new();
-    let t = reader.read_int();
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008round1c",
+        |reader, buffer| {
+            let t = reader.read_int();
 
-    for case in 1..=t {
-        let (_, K) = reader.read_tuple_2::<u8, u8>();
-        let U = reader.read_int::<f64>();
-        let mut P = reader.read_num_line::<f64>();
+            for case_no in 1..=t {
+                let (_, K) = reader.read_tuple_2::<u8>();
+                let U = reader.read_int::<f64>();
+                let mut P = reader.read_num_line::<f64>();
 
-        debug!("P: {:?}", P);
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&mut P, U, K)).unwrap();
+            }
+        },
+    );
 
-        print!("{}", solve(case, &mut P, U, K));
-    }
 }
 
+
 fn prob_at_least_k(P: &[f64], K: usize) -> f64
 {
     /*effectively this is a 2d matrix
@@ -70,10 +79,8 @@ fn prob1()
     println!("Prob 12 heads of 18 coins: {:.5}", p);
 }
 
-fn solve(case_no: u32, prob: &mut Vec<f64>, U: f64, K: u8) -> String
+fn solve(prob: &mut Vec<f64>, U: f64, K: u8) -> String
 {
-    debug!("Solving case {}", case_no);
-
     prob.sort_by(|&a, &b| a.partial_cmp(&b).unwrap());
 
     let mut best_ans = -1f64;
@@ -134,5 +141,5 @@ fn solve(case_no: u32, prob: &mut Vec<f64>, U: f64, K: u8) -> String
         }
     }
 
-    format!("Case #{}: {:.9}\n", case_no, best_ans)
+    format!("{:.9}\n", best_ans)
 }
diff --git a/codejam_2017/src/y2017round2/a.rs b/codejam_2017/src/y2017round2/a.rs
index 0430e67..0d4b883 100644
--- a/codejam_2017/src/y2017round2/a.rs
+++ b/codejam_2017/src/y2017round2/a.rs
@@ -1,5 +1,6 @@
 use codejam::util::codejam::run_cases;
 use codejam::util::input::*;
+use std::io::Write;
 
 /*
 state machine
diff --git a/codejam_2017/src/y2017round2/c.rs b/codejam_2017/src/y2017round2/c.rs
index 0d20d77..d338cd8 100644
--- a/codejam_2017/src/y2017round2/c.rs
+++ b/codejam_2017/src/y2017round2/c.rs
@@ -281,7 +281,7 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>) -> String
             for (idx, &b) in tsa.iter().enumerate() {
                 grid[&laser_coords[idx]] = if b { VerticalBeam } else { HorizonalBeam };
             }
-            format!("Case #{}: POSSIBLE\n{}", case_no, grid)
+            format!("Case #{}: POSSIBLE\n{}", case_no, print_grid(&grid))
         }
     } else {
         //what I did, backtracking.  must be release mode
@@ -299,7 +299,7 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>) -> String
             return format!("Case #{}: IMPOSSIBLE\n", case_no);
         }
 
-        format!("Case #{}: POSSIBLE\n{}", case_no, grid)
+        format!("Case #{}: POSSIBLE\n{}", case_no, print_grid(&grid))
     }
 }
 
@@ -370,20 +370,16 @@ fn helper(
     return false;
 }
 
-impl Display for Grid<Tile>
+fn print_grid(grid: &Grid<Tile>) -> String
 {
-    fn fmt(&self, f: &mut Formatter) -> fmt::Result
-    {
-        for r in 0..self.R {
-            for c in 0..self.C {
-                if let Err(err) = write!(f, "{}", self[(r, c)]) {
-                    return Err(err);
-                }
-            }
-            if let Err(err) = writeln!(f, "") {
-                return Err(err);
+    let mut s = String::new();
+        for r in 0..grid.R {
+            for c in 0..grid.C {
+                s += format!("{}", grid[(r, c)]);
             }
+            s += "\n";
         }
-        write!(f, "")
-    }
+
+
+    s
 }
diff --git a/codejam_2017/src/y2017round2/d.rs b/codejam_2017/src/y2017round2/d.rs
index 72cd90d..8b32019 100644
--- a/codejam_2017/src/y2017round2/d.rs
+++ b/codejam_2017/src/y2017round2/d.rs
@@ -526,6 +526,7 @@ fn build_graph(
     G
 }
 
+/*
 impl Display for Grid<Tile>
 {
     fn fmt(&self, f: &mut Formatter) -> fmt::Result
@@ -542,4 +543,4 @@ impl Display for Grid<Tile>
         }
         write!(f, "")
     }
-}
+}*/
diff --git a/codejam_2017/src/y2017round4/b.rs b/codejam_2017/src/y2017round4/b.rs
index 0b97583..dbfd647 100644
--- a/codejam_2017/src/y2017round4/b.rs
+++ b/codejam_2017/src/y2017round4/b.rs
@@ -3,9 +3,7 @@ use bit_vec::BitVec;
 use codejam::algo::graph::flow2::Flow;
 use codejam::util::codejam::run_cases;
 use rand::{thread_rng, Rng};
-use std::cmp::{max, min};
-use std::collections::HashSet;
-use std::collections::VecDeque;
+use std::cmp::{max};
 use std::io::Write;
 use std::mem;
 use std::usize;
@@ -13,11 +11,8 @@ use std::usize;
 use byteorder::{ByteOrder, NativeEndian, WriteBytesExt};
 use hamming::weight;
 use num_bigint::BigInt;
-use num_integer::Integer;
-use num_rational::{BigRational, Ratio};
+use num_rational::{BigRational};
 use num_traits::{FromPrimitive, One, Signed, Zero};
-use std::ops::{Add, Div, Mul, Sub};
-use std::thread;
 
 /*
 Dynamic programming, min/max
diff --git a/codejam_2017/src/y2017round4/c.rs b/codejam_2017/src/y2017round4/c.rs
index d00e1f9..c8c6eff 100644
--- a/codejam_2017/src/y2017round4/c.rs
+++ b/codejam_2017/src/y2017round4/c.rs
@@ -1,10 +1,9 @@
 use codejam::util::codejam::run_cases;
 use codejam::util::grid::Grid;
 use nalgebra::*;
-use rand::distributions::{Distribution, Uniform};
+use rand::distributions::{Uniform};
 use rand::prelude::StdRng;
 use rand::SeedableRng;
-use rulinalg::matrix::Matrix;
 use std::collections::{HashMap, HashSet};
 use std::io::Write;
 use std::time::Instant;
@@ -153,17 +152,17 @@ impl Search
     */
     fn dfs(&mut self, spanning: &mut Spanning, v: usize, level: usize)
     {
-        if (self.mp.len() == K - 1) {
+        if self.mp.len() == K - 1 {
             return;
         }
-        if (v == MAX_VERTEX) {
+        if v == MAX_VERTEX {
             return;
         }
         //println!("DFS {}", v);
 
         //try connecting v to all vertices less than it
         for v_connected_perm in 1..(1 << v) {
-            if (self.mp.len() == K - 1) {
+            if self.mp.len() == K - 1 {
                 return;
             }
             for i in 0..v {
@@ -174,7 +173,7 @@ impl Search
                 };
             }
             let cnt = spanning.spanning_tree_count(v + 1);
-            if (cnt > K) {
+            if cnt > K {
                 continue;
             }
             if !self.mp.contains_key(&cnt) {
diff --git a/codejam_2017/src/y2017round4/d.rs b/codejam_2017/src/y2017round4/d.rs
index bb58fea..12dfa53 100644
--- a/codejam_2017/src/y2017round4/d.rs
+++ b/codejam_2017/src/y2017round4/d.rs
@@ -1,15 +1,11 @@
 use codejam::algo::vectors::*;
 use codejam::util::codejam::run_cases;
-use codejam::util::grid::Grid;
 use num_bigint::BigInt;
 use num_traits::*;
-use rand::distributions::{Distribution, Uniform};
+use rand::distributions::{ Uniform};
 use rand::prelude::{SliceRandom, StdRng};
 use rand::{Rng, SeedableRng};
-use std::collections::{HashMap, HashSet};
 use std::io::Write;
-use std::ops::Sub;
-use std::time::Instant;
 
 /*
 Cross product / dot product
diff --git a/codejam_2017/src/y2017round4/e.rs b/codejam_2017/src/y2017round4/e.rs
index 0256fc7..da7a254 100644
--- a/codejam_2017/src/y2017round4/e.rs
+++ b/codejam_2017/src/y2017round4/e.rs
@@ -1,16 +1,7 @@
 use bimap::BiMap;
-use codejam::algo::vectors::*;
 use codejam::util::codejam::run_cases;
-use codejam::util::grid::Grid;
-use num_bigint::BigInt;
-use num_traits::*;
-use rand::distributions::{Distribution, Uniform};
-use rand::prelude::{SliceRandom, StdRng};
-use rand::{Rng, SeedableRng};
 use std::collections::{HashMap, HashSet, VecDeque};
 use std::io::Write;
-//use std::ops::Sub;
-//use std::time::Instant;
 
 /*
 Cross product / dot product
diff --git a/codejam_2017/src/y2017round4/f.rs b/codejam_2017/src/y2017round4/f.rs
index e25114b..5a29641 100644
--- a/codejam_2017/src/y2017round4/f.rs
+++ b/codejam_2017/src/y2017round4/f.rs
@@ -1,13 +1,5 @@
-//use codejam::algo::vectors::*;
-use bimap::BiMap;
 use codejam::util::codejam::run_cases;
-use codejam::util::grid::Grid;
-//use num_traits::*;
-use rand::distributions::{Distribution, Uniform};
-use rand::prelude::{SliceRandom, StdRng};
-//use rand::{Rng, SeedableRng};
 use std::cmp::{max, min};
-//use std::collections::{HashMap, HashSet, VecDeque};
 use std::i64;
 use std::io::Write;
 use std::mem;

From 474f30947a121bf30f54543664897d7729a2da68 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 13:21:59 -0300
Subject: [PATCH 073/122] 2017

---
 codejam_2017/.gitignore            |   2 +
 codejam_2017/format.bat            |   1 +
 codejam_2017/rustfmt.toml          |   4 +
 codejam_2017/src/y2017qual/c.rs    |   2 +-
 codejam_2017/src/y2017round1a/b.rs |  33 +++----
 codejam_2017/src/y2017round1a/c.rs |   1 -
 codejam_2017/src/y2017round1b/a.rs |   1 -
 codejam_2017/src/y2017round1b/c.rs |   2 +-
 codejam_2017/src/y2017round1c/a.rs |   2 +-
 codejam_2017/src/y2017round1c/b.rs |   2 +-
 codejam_2017/src/y2017round1c/c.rs |   2 +-
 codejam_2017/src/y2017round2/a.rs  |   1 -
 codejam_2017/src/y2017round2/b.rs  |  37 +++++---
 codejam_2017/src/y2017round2/c.rs  |   2 +-
 codejam_2017/src/y2017round2/d.rs  |   8 +-
 codejam_2017/src/y2017round3/c.rs  |  12 +--
 codejam_2017/src/y2017round3/d.rs  | 148 ++++++++++++++---------------
 codejam_2017/src/y2017round4/a.rs  | 102 ++++++++++----------
 codejam_2017/src/y2017round4/b.rs  |  18 ++--
 codejam_2017/src/y2017round4/c.rs  |  11 ++-
 codejam_2017/src/y2017round4/d.rs  |  13 ++-
 codejam_2017/src/y2017round4/e.rs  |  58 +++++------
 codejam_2017/src/y2017round4/f.rs  |  56 +++++------
 23 files changed, 262 insertions(+), 256 deletions(-)
 create mode 100644 codejam_2017/.gitignore
 create mode 100644 codejam_2017/format.bat
 create mode 100644 codejam_2017/rustfmt.toml

diff --git a/codejam_2017/.gitignore b/codejam_2017/.gitignore
new file mode 100644
index 0000000..3d6c96d
--- /dev/null
+++ b/codejam_2017/.gitignore
@@ -0,0 +1,2 @@
+log
+.idea
\ No newline at end of file
diff --git a/codejam_2017/format.bat b/codejam_2017/format.bat
new file mode 100644
index 0000000..0b7cef2
--- /dev/null
+++ b/codejam_2017/format.bat
@@ -0,0 +1 @@
+cargo +nightly fmt
\ No newline at end of file
diff --git a/codejam_2017/rustfmt.toml b/codejam_2017/rustfmt.toml
new file mode 100644
index 0000000..c66d0fe
--- /dev/null
+++ b/codejam_2017/rustfmt.toml
@@ -0,0 +1,4 @@
+brace_style = "AlwaysNextLine"
+fn_single_line = false
+newline_style = "Unix"
+# control_brace_style = "AlwaysNextLine"
\ No newline at end of file
diff --git a/codejam_2017/src/y2017qual/c.rs b/codejam_2017/src/y2017qual/c.rs
index 77d7434..9bce75b 100644
--- a/codejam_2017/src/y2017qual/c.rs
+++ b/codejam_2017/src/y2017qual/c.rs
@@ -6,7 +6,7 @@ use std::io::Write;
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice", "C-large-practice"],
+        &["C-small-practice-1", "C-small-practice-2", "C-large-practice"],
         "y2017qual",
         |reader, buffer| {
             let t = reader.read_int();
diff --git a/codejam_2017/src/y2017round1a/b.rs b/codejam_2017/src/y2017round1a/b.rs
index 990f52b..cc0f93a 100644
--- a/codejam_2017/src/y2017round1a/b.rs
+++ b/codejam_2017/src/y2017round1a/b.rs
@@ -1,7 +1,5 @@
-//use codejam::util::input::read_num_line;
 use codejam::util::codejam::run_cases;
 use std::io::Write;
-use std::thread;
 
 /*
 scan line
@@ -18,7 +16,6 @@ pub fn solve_all_cases()
         "y2008round1a",
         |reader, buffer| {
             let t = reader.read_int();
-            let mut children: Vec<thread::JoinHandle<_>> = vec![];
 
             for case_no in 1..=t {
                 //handle input / output
@@ -31,33 +28,27 @@ pub fn solve_all_cases()
                 for _ in 0..n {
                     q.push(reader.read_num_line());
                 }
-                children.push(thread::spawn(move || -> String {
-                    solve(case_no, n, p, &r, &q)
-                }));
-
-                if case_no != 1 {
-                    //        continue;
-                }
 
                 println!("Solving case {}", case_no);
 
-                for child in children {
-                    writeln!(buffer, "{}", child.join().unwrap()).unwrap();
-                }
+                writeln!(buffer, "Case #{}: {}", case_no,
+                         solve(case_no, n, p, &r, &q)
+                ).unwrap();
+
             }
         },
     );
 }
 
-fn solve(case_no: u32, N: u8, P: u8, R: &Vec<u32>, Q: &Vec<Vec<u32>>) -> String
+fn solve(case_no: u32, n: u8, p: u8, r: &Vec<u32>, q: &Vec<Vec<u32>>) -> String
 {
     debug!("\nStarting solve");
     let mut events: Vec<_> = Vec::new();
-    for i in 0..N as usize {
-        let required_amount = R[i];
+    for i in 0..n as usize {
+        let required_amount = r[i];
 
-        for p in 0..P as usize {
-            let package_size = Q[i][p];
+        for p in 0..p as usize {
+            let package_size = q[i][p];
 
             // problem is floating point
             //min_servings = math.ceil(package_size / (1.1 * required_amount) )
@@ -96,8 +87,8 @@ fn solve(case_no: u32, N: u8, P: u8, R: &Vec<u32>, Q: &Vec<Vec<u32>>) -> String
     // Code based on https://www.go-hero.net/jam/17/name/Nore
     events.sort();
     let mut cnt = 0;
-    let mut counts = vec![Vec::new(); N.into()];
-    let mut remv = vec![0; N as usize];
+    let mut counts = vec![Vec::new(); n.into()];
+    let mut remv = vec![0; n as usize];
     for (boundary, is_upper_bound, ingredient_index, package_size) in events {
         debug!(
             "Saw event Boundary={} {} ingredient={} package={}",
@@ -122,7 +113,7 @@ fn solve(case_no: u32, N: u8, P: u8, R: &Vec<u32>, Q: &Vec<Vec<u32>>) -> String
             let min_count_len = counts.iter().map(|c| c.len()).min().unwrap();
             if min_count_len > 0 {
                 cnt += 1;
-                for ii in 0..N as usize {
+                for ii in 0..n as usize {
                     let min_index = counts[ii]
                         .iter()
                         .enumerate()
diff --git a/codejam_2017/src/y2017round1a/c.rs b/codejam_2017/src/y2017round1a/c.rs
index 94307da..ac8279a 100644
--- a/codejam_2017/src/y2017round1a/c.rs
+++ b/codejam_2017/src/y2017round1a/c.rs
@@ -1,7 +1,6 @@
 use codejam::util::codejam::run_cases;
 use std::cmp;
 use std::io::Write;
-use std::thread;
 
 /*
 very hard ad hoc (code not mine, just translation)
diff --git a/codejam_2017/src/y2017round1b/a.rs b/codejam_2017/src/y2017round1b/a.rs
index bb42fec..302169a 100644
--- a/codejam_2017/src/y2017round1b/a.rs
+++ b/codejam_2017/src/y2017round1b/a.rs
@@ -1,6 +1,5 @@
 use codejam::util::codejam::run_cases;
 use std::io::Write;
-use std::thread;
 
 /*
 velocity
diff --git a/codejam_2017/src/y2017round1b/c.rs b/codejam_2017/src/y2017round1b/c.rs
index 483146d..e604ebb 100644
--- a/codejam_2017/src/y2017round1b/c.rs
+++ b/codejam_2017/src/y2017round1b/c.rs
@@ -1,4 +1,4 @@
-use codejam::util::input::*;
+
 use std::cmp::Ordering;
 use std::collections::BinaryHeap;
 use std::f64;
diff --git a/codejam_2017/src/y2017round1c/a.rs b/codejam_2017/src/y2017round1c/a.rs
index ac09dbc..49e010b 100644
--- a/codejam_2017/src/y2017round1c/a.rs
+++ b/codejam_2017/src/y2017round1c/a.rs
@@ -1,4 +1,4 @@
-use codejam::util::input::*;
+
 //use std::u16;
 use std::f64;
 use codejam::util::codejam::run_cases;
diff --git a/codejam_2017/src/y2017round1c/b.rs b/codejam_2017/src/y2017round1c/b.rs
index f40015d..82ba4c7 100644
--- a/codejam_2017/src/y2017round1c/b.rs
+++ b/codejam_2017/src/y2017round1c/b.rs
@@ -1,4 +1,4 @@
-use codejam::util::input::*;
+
 use std::cmp::min;
 use std::io::Write;
 use self::Parent::*;
diff --git a/codejam_2017/src/y2017round1c/c.rs b/codejam_2017/src/y2017round1c/c.rs
index 917e8b5..3d29f9b 100644
--- a/codejam_2017/src/y2017round1c/c.rs
+++ b/codejam_2017/src/y2017round1c/c.rs
@@ -1,4 +1,4 @@
-use codejam::util::input::*;
+
 //use std::cmp::min;
 use std::cmp::Ordering::*;
 use codejam::util::codejam::run_cases;
diff --git a/codejam_2017/src/y2017round2/a.rs b/codejam_2017/src/y2017round2/a.rs
index 0d4b883..0a61136 100644
--- a/codejam_2017/src/y2017round2/a.rs
+++ b/codejam_2017/src/y2017round2/a.rs
@@ -1,5 +1,4 @@
 use codejam::util::codejam::run_cases;
-use codejam::util::input::*;
 use std::io::Write;
 
 /*
diff --git a/codejam_2017/src/y2017round2/b.rs b/codejam_2017/src/y2017round2/b.rs
index c56f5c1..d62d625 100644
--- a/codejam_2017/src/y2017round2/b.rs
+++ b/codejam_2017/src/y2017round2/b.rs
@@ -1,6 +1,8 @@
-use codejam::util::input::*;
+
 use codejam::util::math::*;
 use std::cmp::max;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
 
 /*
 custom algorithm / proof
@@ -9,21 +11,30 @@ minimization / optimization
 
 pub fn solve_all_cases()
 {
-    let mut reader: InputReader = Default::default();
-    let t = reader.read_int();
 
-    for case in 1..=t {
-        let (N, C, M) = reader.read_tuple_3::<u16>();
-        //P B
-        let tickets: Vec<_> = (0..M).map(|_| reader.read_tuple_2::<u16>()).collect();
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round2",
+        |reader, buffer| {
+            let t = reader.read_int();
 
-        print!("{}", solve(case, N, C, &tickets));
-    }
+            for case_no in 1..=t {
+                let (N, C, M) = reader.read_tuple_3::<u16>();
+                //P B
+                let tickets: Vec<_> = (0..M).map(|_| reader.read_tuple_2::<u16>()).collect();
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {:0>3}", case_no,
+                         solve( N, C, &tickets)).unwrap();
+            }
+        },
+    );
 }
 
-fn solve(case_no: u32, N: u16, C: u16, tickets: &Vec<(u16, u16)>) -> String
+
+fn solve( N: u16, C: u16, tickets: &Vec<(u16, u16)>) -> String
 {
-    debug!("Solving case {}", case_no);
 
     //first determine if a customer has multiple tickeets
     let max_tickets_per_customer: u16 = *tickets
@@ -82,7 +93,7 @@ fn solve(case_no: u32, N: u16, C: u16, tickets: &Vec<(u16, u16)>) -> String
     }
 
     format!(
-        "Case #{}: {} {}\n",
-        case_no, rides_needed, promotions_needed
+        "{} {}",
+        rides_needed, promotions_needed
     )
 }
diff --git a/codejam_2017/src/y2017round2/c.rs b/codejam_2017/src/y2017round2/c.rs
index d338cd8..1b8445f 100644
--- a/codejam_2017/src/y2017round2/c.rs
+++ b/codejam_2017/src/y2017round2/c.rs
@@ -375,7 +375,7 @@ fn print_grid(grid: &Grid<Tile>) -> String
     let mut s = String::new();
         for r in 0..grid.R {
             for c in 0..grid.C {
-                s += format!("{}", grid[(r, c)]);
+                s += &format!("{}", grid[(r, c)]);
             }
             s += "\n";
         }
diff --git a/codejam_2017/src/y2017round2/d.rs b/codejam_2017/src/y2017round2/d.rs
index 8b32019..3497a73 100644
--- a/codejam_2017/src/y2017round2/d.rs
+++ b/codejam_2017/src/y2017round2/d.rs
@@ -11,7 +11,7 @@ use codejam::algo::graph::flow::*;
 use codejam::algo::graph::*;
 use codejam::util::grid::constants::*;
 use codejam::util::grid::{Grid, GridCoord, GridRowColVec};
-use codejam::util::input::*;
+
 //use std::thread;
 use bimap::BiMap;
 use bit_vec::BitVec;
@@ -178,8 +178,8 @@ impl<L, R> FromIterator<(L, R)> for BiMap<L, R>
 fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> String
 {
     debug!(
-        "Solving case {}\nM={}\n{}\n",
-        case_no, M_soldier_limit, grid
+        "Solving case {}\nM={}\n",
+        case_no, M_soldier_limit
     );
 
     //original solider & turret index to location map
@@ -522,7 +522,7 @@ fn build_graph(
         }
     }
 
-    debug!("Built graph from\n{}\n  S={} T={}", grid, S, T);
+    debug!("Built graph from\n  S={} T={}", S, T);
     G
 }
 
diff --git a/codejam_2017/src/y2017round3/c.rs b/codejam_2017/src/y2017round3/c.rs
index 08a5fa6..a9eda62 100644
--- a/codejam_2017/src/y2017round3/c.rs
+++ b/codejam_2017/src/y2017round3/c.rs
@@ -58,24 +58,24 @@ impl Camp
         p1 == p2
     }
 }
-fn solve(case_no: u32, C: usize, tour_input: &[(usize, usize, usize)]) -> String
+fn solve(case_no: u32, c: usize, tour_input: &[(usize, usize, usize)]) -> String
 {
     debug!("\n\n\nSolving case {}", case_no);
 
     let tours: Vec<_> = tour_input
         .iter()
         .enumerate()
-        .map(|(i, &(E, L, D))| Tour {
+        .map(|(i, &(e, l, d))| Tour {
             start_camp: (i + 2) / 2,
-            stop_camp: E,
-            leave_time: L,
-            duration: D,
+            stop_camp: e,
+            leave_time: l,
+            duration: d,
         })
         .collect();
 
     debug!("Tours: {:?} ", tours);
 
-    let camps: Vec<_> = (1..=C)
+    let camps: Vec<_> = (1..=c)
         .map(|c| Camp {
             arrivals: tours
                 .iter()
diff --git a/codejam_2017/src/y2017round3/d.rs b/codejam_2017/src/y2017round3/d.rs
index 2c46e68..0da14f9 100644
--- a/codejam_2017/src/y2017round3/d.rs
+++ b/codejam_2017/src/y2017round3/d.rs
@@ -27,7 +27,7 @@ pub fn solve_all_cases()
                 let height = i1[0];
                 let width = i1[1];
                 let num_fixed = i1[2];
-                let D = i1[3];
+                let d = i1[3];
 
                 let fixed_values: Vec<_> = (0..num_fixed)
                     .map(|_| reader.read_tuple_3::<usize>())
@@ -37,7 +37,7 @@ pub fn solve_all_cases()
                 write!(
                     buffer,
                     "{}",
-                    solve(case, width, height, D, &fixed_values[..])
+                    solve(case, width, height, d, &fixed_values[..])
                 )
                 .unwrap();
             }
@@ -60,7 +60,7 @@ fn solve(
     case_no: u32,
     width: usize,
     height: usize,
-    D: usize,
+    d: usize,
     fixed_values: &[(usize, usize, usize)],
 ) -> String
 {
@@ -68,7 +68,7 @@ fn solve(
 
     for &(r1, c1, val1) in fixed_values.iter() {
         for &(r2, c2, val2) in fixed_values.iter() {
-            if !is_valid(val1, val2, 1 + abs_diff(r1, r2) + abs_diff(c1, c2), D) {
+            if !is_valid(val1, val2, 1 + abs_diff(r1, r2) + abs_diff(c1, c2), d) {
                 return format!("Case #{}: IMPOSSIBLE\n", case_no);
             }
         }
@@ -92,7 +92,7 @@ fn solve(
         let real_col = interesting_cols[gc.data[1]];
         *val = fixed_values
             .iter()
-            .map(|&(r, c, v)| v + (abs_diff(r, real_row) + abs_diff(c, real_col)) * D)
+            .map(|&(r, c, v)| v + (abs_diff(r, real_row) + abs_diff(c, real_col)) * d)
             .min()
             .unwrap();
     });
@@ -118,7 +118,7 @@ fn solve(
                 grid[(row, prev_col)],
             ];
             let i_sum: usize =
-                calc_grid_sum_4_influencers(&corner_values, i_n_cols, i_n_rows, D, MODULO).unwrap();
+                calc_grid_sum_4_influencers(&corner_values, i_n_cols, i_n_rows, d, MODULO).unwrap();
             //- corner_values.iter().sum::<usize>();
             grid_interior_sums += i_sum;
 
@@ -132,7 +132,7 @@ fn solve(
                 &[corner_values[BOTTOM_LEFT], corner_values[BOTTOM_RIGHT]],
                 i_n_cols,
                 1,
-                D,
+                d,
                 MODULO,
             )
             .unwrap();
@@ -143,7 +143,7 @@ fn solve(
                 &[corner_values[TOP_RIGHT], corner_values[BOTTOM_RIGHT]],
                 1,
                 i_n_rows,
-                D,
+                d,
                 MODULO,
             )
             .unwrap();
@@ -162,7 +162,7 @@ fn solve(
 
         let corner_values = [grid[(prev_row, grid.C - 1)], grid[(row, grid.C - 1)]];
         let i_sum: usize =
-            calc_sum_2_influencers(&corner_values, i_n_cols, i_n_rows, D, MODULO).unwrap();
+            calc_sum_2_influencers(&corner_values, i_n_cols, i_n_rows, d, MODULO).unwrap();
         //- corner_values.iter().sum::<usize>();
         grid_interior_sums += i_sum;
         //remove double counted col
@@ -182,7 +182,7 @@ fn solve(
 
         let corner_values = [grid[(grid.R - 1, prev_col)], grid[(grid.R - 1, col)]];
         let i_sum: usize =
-            calc_sum_2_influencers(&corner_values, i_n_cols, i_n_rows, D, MODULO).unwrap();
+            calc_sum_2_influencers(&corner_values, i_n_cols, i_n_rows, d, MODULO).unwrap();
 
         grid_interior_sums += i_sum;
         //remove double counted col
@@ -207,23 +207,23 @@ fn solve(
 /// `2id = stop + D(len-1) - start`
 /// length-1 D increments in length, assumed that start is at 0 and stop is len-1
 /// 0..1..2; len=3; 2 increments
-fn find_intersection(start: usize, stop: usize, length: usize, D: usize) -> Option<usize>
+fn find_intersection(start: usize, stop: usize, length: usize, d: usize) -> Option<usize>
 {
-    if !is_valid(start, stop, length, D) {
+    if !is_valid(start, stop, length, d) {
         return None;
     }
-    let ret = ((length - 1) * D + stop - start) / (2 * D);
+    let ret = ((length - 1) * d + stop - start) / (2 * d);
     assert!(ret <= length);
     Some(ret)
 }
 
 /// [Start, Start+D, Start+2D, Start+3D,..., Stop] in a list of length elements
-fn is_valid(start: usize, stop: usize, length: usize, D: usize) -> bool
+fn is_valid(start: usize, stop: usize, length: usize, d: usize) -> bool
 {
     if length < 1 {
         return false;
     }
-    let max_diff = (length - 1) * D;
+    let max_diff = (length - 1) * d;
     let diff = abs_diff(start, stop);
 
     diff <= max_diff
@@ -242,7 +242,7 @@ fn calc_rectangle_sum_single_influencer(
     seed_value: usize,
     width: usize,
     height: usize,
-    D: usize,
+    d: usize,
     modulo: usize,
 ) -> usize
 {
@@ -250,19 +250,19 @@ fn calc_rectangle_sum_single_influencer(
     //seed + D+seed + 2D+seed + (width-1)*D*seed
     //which is  (sum 1 to width-1) * D + seed * width
     let top_row_sum =
-        mul_mod(D, sum_closed_range(width - 1), modulo) + mul_mod(seed_value, width, modulo);
+        mul_mod(d, sum_closed_range(width - 1), modulo) + mul_mod(seed_value, width, modulo);
     //each row adds D*width more to each cell
     let square_sum = mul_mod(height, top_row_sum, modulo)
-        + mul_mod(D * width, sum_closed_range(height - 1), modulo);
+        + mul_mod(d * width, sum_closed_range(height - 1), modulo);
 
     debug!(
         "Calculated sum top left: {} width: {} height: {} D: {} == {}",
-        seed_value, width, height, D, square_sum
+        seed_value, width, height, d, square_sum
     );
     square_sum % modulo
 }
 
-fn calc_triangle_sum(seed_value: usize, triangle_len: usize, D: usize, modulo: usize) -> usize
+fn calc_triangle_sum(seed_value: usize, triangle_len: usize, d: usize, modulo: usize) -> usize
 {
     /* we want to sum value(number of squares) + the series of D 0 + 2*D + 3*2D + 4*3D + 5*4D
     This serials is equal to D(sum (1 to num squares)^2) - D(sum 1 to num squares)
@@ -273,7 +273,7 @@ fn calc_triangle_sum(seed_value: usize, triangle_len: usize, D: usize, modulo: u
         sum_sq_to_n(triangle_len, modulo),
         sum_0_to_n(triangle_len, modulo),
         modulo,
-    ) * D
+    ) * d
         + mul_mod(sum_0_to_n(triangle_len, modulo), seed_value, modulo)
 }
 
@@ -282,7 +282,7 @@ fn calc_sum_2_influencers(
     seed_values: &[usize],
     width: usize,
     height: usize,
-    D: usize,
+    d: usize,
     modulo: usize,
 ) -> Option<usize>
 {
@@ -295,7 +295,7 @@ fn calc_sum_2_influencers(
     let bottom_right_inf_value = seed_values[1];
 
     //First check validity
-    let max_diff = (height + width - 2) * D;
+    let max_diff = (height + width - 2) * d;
     let diff = (top_left_inf_value as i64 - bottom_right_inf_value as i64).abs() as usize;
 
     if diff > max_diff {
@@ -306,7 +306,7 @@ fn calc_sum_2_influencers(
             min(top_left_inf_value, bottom_right_inf_value),
             width,
             height,
-            D,
+            d,
             modulo,
         ));
     }
@@ -333,8 +333,8 @@ fn calc_sum_2_influencers(
     */
 
     let (top_left_manhat_dist, rem) = div_rem(
-        D * (width + height - 2) + bottom_right_inf_value - top_left_inf_value,
-        2 * D,
+        d * (width + height - 2) + bottom_right_inf_value - top_left_inf_value,
+        2 * d,
     );
     debug!("Manhatten Distance is {} {}", top_left_manhat_dist, rem);
 
@@ -376,7 +376,7 @@ fn calc_sum_2_influencers(
             top_left_inf_value,
             width,
             top_rect_height,
-            D,
+            d,
             modulo,
         );
     }
@@ -389,7 +389,7 @@ fn calc_sum_2_influencers(
             bottom_right_inf_value,
             width,
             bot_rect_height,
-            D,
+            d,
             modulo,
         );
     }
@@ -397,12 +397,12 @@ fn calc_sum_2_influencers(
     //Left retangle (in ex, diag C would be [C0..C5]; note it is sliced off by the top/bottom rectangles
     if top_left_manhat_dist >= height {
         left_rect_width = top_left_manhat_dist - height + 1;
-        let seed_value = top_left_inf_value + D * top_rect_height;
+        let seed_value = top_left_inf_value + d * top_rect_height;
         total_sum += calc_rectangle_sum_single_influencer(
             seed_value,
             left_rect_width,
             height - top_rect_height - bot_rect_height,
-            D,
+            d,
             modulo,
         );
     }
@@ -412,13 +412,13 @@ fn calc_sum_2_influencers(
         //one col is for the reverse of the triangle (see A-rev)
         //(width - 1) - (M - 1)
         right_rect_width = br_manhat_distance - height + 1;
-        let seed_value = bottom_right_inf_value + D * bot_rect_height;
+        let seed_value = bottom_right_inf_value + d * bot_rect_height;
         //stop 1 row short of BR's diagonal
         total_sum += calc_rectangle_sum_single_influencer(
             seed_value,
             right_rect_width,
             height - top_rect_height - bot_rect_height,
-            D,
+            d,
             modulo,
         );
     }
@@ -435,9 +435,9 @@ fn calc_sum_2_influencers(
     );
     assert_eq!(top_left_triangle_width, top_left_triangle_height);
 
-    let top_left_triangle_seed = top_left_inf_value + (left_rect_width + top_rect_height) * D;
+    let top_left_triangle_seed = top_left_inf_value + (left_rect_width + top_rect_height) * d;
     let top_left_triangle_sum =
-        calc_triangle_sum(top_left_triangle_seed, top_left_triangle_height, D, modulo);
+        calc_triangle_sum(top_left_triangle_seed, top_left_triangle_height, d, modulo);
     total_sum += top_left_triangle_sum;
 
     let bottom_right_triangle_height = min(
@@ -450,11 +450,11 @@ fn calc_sum_2_influencers(
     );
     assert_eq!(bottom_right_triangle_height, bottom_right_triangle_width);
     let bottom_right_triangle_seed =
-        bottom_right_inf_value + (right_rect_width * D) + (bot_rect_height * D);
+        bottom_right_inf_value + (right_rect_width * d) + (bot_rect_height * d);
     let bottom_right_triangle_sum = calc_triangle_sum(
         bottom_right_triangle_seed,
         bottom_right_triangle_width,
-        D,
+        d,
         modulo,
     );
 
@@ -480,7 +480,7 @@ fn calc_grid_sum_4_influencers(
     corner_values: &[usize],
     width: usize,
     height: usize,
-    D: usize,
+    d: usize,
     modulo: usize,
 ) -> Option<usize>
 {
@@ -495,25 +495,25 @@ fn calc_grid_sum_4_influencers(
         corner_values[TOP_LEFT],
         corner_values[TOP_RIGHT],
         width,
-        D
+        d
     ));
     let bottom_lr_col = try_opt!(find_intersection(
         corner_values[BOTTOM_LEFT],
         corner_values[BOTTOM_RIGHT],
         width,
-        D,
+        d,
     ));
     let left_tb_row = try_opt!(find_intersection(
         corner_values[TOP_LEFT],
         corner_values[BOTTOM_LEFT],
         height,
-        D,
+        d,
     ));
     let right_tb_row = try_opt!(find_intersection(
         corner_values[TOP_RIGHT],
         corner_values[BOTTOM_RIGHT],
         height,
-        D,
+        d,
     ));
 
     let mut rows = vec![left_tb_row, right_tb_row];
@@ -526,7 +526,7 @@ fn calc_grid_sum_4_influencers(
         corner_values[TOP_LEFT],
         inclusive_range_len(0, top_lr_col),
         inclusive_range_len(0, rows[0]),
-        D,
+        d,
         modulo,
     );
 
@@ -535,7 +535,7 @@ fn calc_grid_sum_4_influencers(
             corner_values[TOP_RIGHT],
             inclusive_range_len(top_lr_col + 1, width - 1),
             inclusive_range_len(0, rows[0]),
-            D,
+            d,
             modulo,
         )
     } else {
@@ -551,20 +551,20 @@ fn calc_grid_sum_4_influencers(
 
         let seed_values = if left_tb_row == rows[1] {
             [
-                corner_values[TOP_LEFT] + D * inclusive_range_len(0, rows[0]),
-                corner_values[BOTTOM_RIGHT] + D * inclusive_range_len(rows[1] + 1, height - 1),
+                corner_values[TOP_LEFT] + d * inclusive_range_len(0, rows[0]),
+                corner_values[BOTTOM_RIGHT] + d * inclusive_range_len(rows[1] + 1, height - 1),
             ]
         } else {
             [
-                corner_values[TOP_RIGHT] + D * inclusive_range_len(0, rows[0]),
-                corner_values[BOTTOM_LEFT] + D * inclusive_range_len(rows[1] + 1, height - 1),
+                corner_values[TOP_RIGHT] + d * inclusive_range_len(0, rows[0]),
+                corner_values[BOTTOM_LEFT] + d * inclusive_range_len(rows[1] + 1, height - 1),
             ]
         };
         calc_sum_2_influencers(
             &seed_values,
             inclusive_range_len(0, width - 1),
             inclusive_range_len(rows[0] + 1, rows[1]),
-            D,
+            d,
             modulo,
         )
         .unwrap()
@@ -577,7 +577,7 @@ fn calc_grid_sum_4_influencers(
             corner_values[BOTTOM_LEFT],
             inclusive_range_len(0, bottom_lr_col),
             inclusive_range_len(rows[1] + 1, height - 1),
-            D,
+            d,
             modulo,
         );
 
@@ -586,7 +586,7 @@ fn calc_grid_sum_4_influencers(
                 corner_values[BOTTOM_RIGHT],
                 inclusive_range_len(bottom_lr_col + 1, width - 1),
                 inclusive_range_len(rows[1] + 1, height - 1),
-                D,
+                d,
                 modulo,
             )
         } else {
@@ -622,7 +622,7 @@ mod test_round3_d
         inf_value: usize,
         width: usize,
         height: usize,
-        D: usize,
+        d: usize,
     ) -> usize
     {
         let mut g: Grid<usize> = Grid::new(height, width);
@@ -632,12 +632,12 @@ mod test_round3_d
         g[0] = inf_value;
 
         g.transform(|(coord, val)| {
-            *val = inf_value + corner_coord.manhat_distance(&coord) * D;
+            *val = inf_value + corner_coord.manhat_distance(&coord) * d;
 
             //debug!("Set val {} loc {}", val, coord);
         });
 
-        debug!("Grid\n{:#.6?}\nD {:?}", g, D);
+        debug!("Grid\n{:#.6?}\nD {:?}", g, d);
         // for
 
         g.iter_loc().map(|lv| lv.1).sum()
@@ -650,7 +650,7 @@ mod test_round3_d
         width_range: Range<usize>,
         height: usize,
         height_range: Range<usize>,
-        D: usize,
+        d: usize,
     ) -> Option<usize>
     {
         if width * height <= 1 {
@@ -679,7 +679,7 @@ mod test_round3_d
             let max_values = corner_coords
                 .iter()
                 .zip(corners.iter())
-                .map(|(cc, val)| val + cc.manhat_distance(&coord) * D);
+                .map(|(cc, val)| val + cc.manhat_distance(&coord) * d);
             *val = max_values.min().unwrap();
 
             //debug!("Set val {} loc {}", val, coord);
@@ -692,14 +692,14 @@ mod test_round3_d
         debug!(
             "Grid\n{:#.6?}\n corners {:?}\nvalues {:?}\n \
              D {:?}\n Width range {:?} Height Range {:?}",
-            g, corner_coords, corners, D, width_range, height_range
+            g, corner_coords, corners, d, width_range, height_range
         );
 
         for (loc, v1) in g.iter_loc() {
             let loc: Vector2d<i64> = loc.convert();
             for dir in DIRECTIONS.iter() {
                 if let Some(v2) = g.get_value(&(dir.clone() + &loc)) {
-                    if (*v2 as i64 - *v1 as i64).abs() > D as i64 {
+                    if (*v2 as i64 - *v1 as i64).abs() > d as i64 {
                         return None;
                     }
                 }
@@ -723,7 +723,7 @@ mod test_round3_d
         corners: &[usize],
         width: usize,
         height: usize,
-        D: usize,
+        d: usize,
     ) -> Option<usize>
     {
         if width * height <= 1 {
@@ -745,7 +745,7 @@ mod test_round3_d
             let max_values = corner_coords
                 .iter()
                 .zip(corners.iter())
-                .map(|(cc, val)| val + cc.manhat_distance(&coord) * D);
+                .map(|(cc, val)| val + cc.manhat_distance(&coord) * d);
             *val = max_values.min().unwrap();
 
             //debug!("Set val {} loc {}", val, coord);
@@ -761,7 +761,7 @@ mod test_round3_d
             let loc: Vector2d<i64> = loc.convert();
             for dir in DIRECTIONS.iter() {
                 if let Some(v2) = g.get_value(&(dir.clone() + &loc)) {
-                    if (*v2 as i64 - *v1 as i64).abs() > D as i64 {
+                    if (*v2 as i64 - *v1 as i64).abs() > d as i64 {
                         return None;
                     }
                 }
@@ -774,10 +774,10 @@ mod test_round3_d
     #[test]
     pub fn test_grid_sum_right_no_inf()
     {
-        let D = 5;
+        let d = 5;
         let corner_values = [0, 15, 25, 10];
 
-        let sum = calc_grid_sum_4_influencers(&corner_values[..], 4, 3, D, MODULO);
+        let sum = calc_grid_sum_4_influencers(&corner_values[..], 4, 3, d, MODULO);
 
         assert_eq!(
             sum,
@@ -788,20 +788,20 @@ mod test_round3_d
     #[test]
     pub fn test_grid_sum_height_1()
     {
-        let D = 5;
+        let d = 5;
         let corner_values = [0, 15];
 
-        let sum = calc_sum_2_influencers(&corner_values[..], 4, 1, D, MODULO);
+        let sum = calc_sum_2_influencers(&corner_values[..], 4, 1, d, MODULO);
 
         assert_eq!(sum, Some(5 + 10 + 15));
 
         let corner_values = [0, 14];
-        let sum = calc_sum_2_influencers(&corner_values[..], 7, 1, D, MODULO);
+        let sum = calc_sum_2_influencers(&corner_values[..], 7, 1, d, MODULO);
 
         assert_eq!(sum, Some(5 + 10 + 15 + 20 + 19 + 14));
 
         let corner_values = [2, 5];
-        let sum = calc_sum_2_influencers(&corner_values[..], 2, 1, D, MODULO);
+        let sum = calc_sum_2_influencers(&corner_values[..], 2, 1, d, MODULO);
 
         assert_eq!(sum, Some(2 + 5));
     }
@@ -815,7 +815,7 @@ mod test_round3_d
         let grid_seed_values = Uniform::from(3..50usize);
         let grid_dims = Uniform::from(1..20usize);
         for _ in 0..1000 {
-            let D = grid_seed_values.sample(&mut rng);
+            let d = grid_seed_values.sample(&mut rng);
             let corner_values: Vec<_> = (0..4).map(|_| grid_seed_values.sample(&mut rng)).collect();
             let grid_width = grid_dims.sample(&mut rng);
             let grid_height = grid_dims.sample(&mut rng);
@@ -826,10 +826,10 @@ mod test_round3_d
                 0..grid_width,
                 grid_height,
                 0..grid_height,
-                D,
+                d,
             );
             let sum2 =
-                calc_grid_sum_4_influencers(&corner_values[..], grid_width, grid_height, D, MODULO);
+                calc_grid_sum_4_influencers(&corner_values[..], grid_width, grid_height, d, MODULO);
 
             debug!("Sum1 {:?} Sum2 {:?}", sum1, sum2);
             assert_eq!(sum1, sum2);
@@ -844,18 +844,18 @@ mod test_round3_d
         let grid_seed_values = Uniform::from(3..50usize);
         let grid_dims = Uniform::from(1..20usize);
         for _ in 0..1000 {
-            let D = grid_seed_values.sample(&mut rng);
+            let d = grid_seed_values.sample(&mut rng);
             let corner_values: Vec<_> = (0..4).map(|_| grid_seed_values.sample(&mut rng)).collect();
             let grid_width = grid_dims.sample(&mut rng);
             let grid_height = grid_dims.sample(&mut rng);
 
             let sum1 =
-                find_grid_sum_naive_single_influencer(corner_values[0], grid_width, grid_height, D);
+                find_grid_sum_naive_single_influencer(corner_values[0], grid_width, grid_height, d);
             let sum2 = calc_rectangle_sum_single_influencer(
                 corner_values[0],
                 grid_width,
                 grid_height,
-                D,
+                d,
                 MODULO,
             );
 
@@ -866,10 +866,10 @@ mod test_round3_d
                 &corner_values[0..2],
                 grid_width,
                 grid_height,
-                D,
+                d,
             );
             let sum4 =
-                calc_sum_2_influencers(&corner_values[0..2], grid_width, grid_height, D, MODULO);
+                calc_sum_2_influencers(&corner_values[0..2], grid_width, grid_height, d, MODULO);
 
             debug!("Sum3 {:?} Sum4 {:?}", sum3, sum4);
             assert_eq!(sum3, sum4);
diff --git a/codejam_2017/src/y2017round4/a.rs b/codejam_2017/src/y2017round4/a.rs
index 5b7b87d..80565e4 100644
--- a/codejam_2017/src/y2017round4/a.rs
+++ b/codejam_2017/src/y2017round4/a.rs
@@ -1,11 +1,9 @@
-use bit_set::BitSet;
+
 use bit_vec::BitVec;
 use codejam::algo::graph::flow2::Flow;
 use codejam::util::codejam::run_cases;
-use rand::{thread_rng, Rng};
 use std::cmp::max;
 use std::collections::HashSet;
-use std::collections::VecDeque;
 use std::io::Write;
 use std::mem;
 use std::usize;
@@ -37,9 +35,9 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let N = reader.read_int();
+                let n = reader.read_int();
 
-                let dice: Vec<Vec<i32>> = (0..N)
+                let dice: Vec<Vec<i32>> = (0..n)
                     .map(|_| reader.read_num_line())
                     //.map(|dIdx| reader.read_num_line().into_iter().map(move |v| (v, dIdx)))
                     .collect();
@@ -84,10 +82,10 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
     let n = dice.len();
 
     //matchL[dice value]
-    let mut matchL = vec![INVALID_MATCH_I32; MAX_DICE_VALUE];
+    let mut match_l = vec![INVALID_MATCH_I32; MAX_DICE_VALUE];
 
     //matchR[dice index]
-    let mut matchR = vec![INVALID_MATCH_I32; n];
+    let mut match_r = vec![INVALID_MATCH_I32; n];
 
     //Storing values
     let mut queue = vec![0; MAX_DICE_VALUE];
@@ -95,80 +93,80 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
 
     let mut used = BitVec::from_elem(MAX_DICE_VALUE, false);
     let mut ans = 0;
-    let mut rangeStart = 0;
+    let mut range_start = 0;
     //looks like [rangeStart, rangeEnd)
-    let mut rangeEnd = 0;
+    let mut range_end = 0;
     let mut cur_dice_value_i = 0;
     while cur_dice_value_i < MAX_DICE_VALUE {
         if value_to_dice[cur_dice_value_i].len() == 0 {
             //				System.err.println(i + " NOEDGE");
-            for j in rangeStart..rangeEnd {
-                matchR[matchL[j] as usize] = INVALID_MATCH_I32;
-                matchL[j] = INVALID_MATCH_I32;
+            for j in range_start..range_end {
+                match_r[match_l[j] as usize] = INVALID_MATCH_I32;
+                match_l[j] = INVALID_MATCH_I32;
             }
-            rangeStart = cur_dice_value_i + 1;
-            rangeEnd = cur_dice_value_i + 1;
+            range_start = cur_dice_value_i + 1;
+            range_end = cur_dice_value_i + 1;
             cur_dice_value_i += 1;
             continue;
         }
-        let mut queueHead = 0;
-        let mut queueTail = 1;
+        let mut queue_head = 0;
+        let mut queue_tail = 1;
         queue[0] = cur_dice_value_i as i32;
         used.set(cur_dice_value_i, true);
         back[cur_dice_value_i] = INVALID_MATCH_I32;
         let mut found = false;
         'bfs: loop {
-            assert!(queue[queueHead] >= 0);
-            let mut cur = queue[queueHead] as usize;
-            queueHead += 1;
+            assert!(queue[queue_head] >= 0);
+            let mut cur = queue[queue_head] as usize;
+            queue_head += 1;
 
             let cedges = &value_to_dice[cur];
             for j in 0..cedges.len() {
                 let mut next_dice_index = cedges[j] as usize;
                 //Found a non matched dice index
-                if matchR[next_dice_index] < 0 {
-                    matchR[next_dice_index] = cur as i32;
+                if match_r[next_dice_index] < 0 {
+                    match_r[next_dice_index] = cur as i32;
                     //Applying the augmenting path
                     while back[cur] >= 0 {
                         assert!(back[cur] >= 0);
-                        assert!(matchL[cur] >= 0);
+                        assert!(match_l[cur] >= 0);
                         let prev = back[cur] as usize;
-                        let pnext = matchL[cur] as usize;
-                        matchL[cur] = next_dice_index as i32;
-                        matchR[pnext] = prev as i32;
+                        let pnext = match_l[cur] as usize;
+                        match_l[cur] = next_dice_index as i32;
+                        match_r[pnext] = prev as i32;
                         cur = prev;
                         next_dice_index = pnext;
                     }
-                    matchL[cur] = next_dice_index as i32;
+                    match_l[cur] = next_dice_index as i32;
                     found = true;
                     break 'bfs;
-                } else if (!used[matchR[next_dice_index] as usize]) {
+                } else if !used[match_r[next_dice_index] as usize] {
                     //Need to find a new matching for this value, put its dice value on queue
-                    used.set(matchR[next_dice_index] as usize, true);
-                    queue[queueTail] = matchR[next_dice_index];
-                    queueTail += 1;
+                    used.set(match_r[next_dice_index] as usize, true);
+                    queue[queue_tail] = match_r[next_dice_index];
+                    queue_tail += 1;
 
-                    back[matchR[next_dice_index] as usize] = cur as i32;
+                    back[match_r[next_dice_index] as usize] = cur as i32;
                 }
             }
-            if queueHead == queueTail {
+            if queue_head == queue_tail {
                 break;
             }
         }
         //			System.err.println(Arrays.toString(matchL));
         //			System.err.println(Arrays.toString(matchR));
-        if (!found) {
+        if !found {
             //				System.err.println(i + " NOFOUND");
             loop {
-                assert_ne!(rangeStart, rangeEnd);
+                assert_ne!(range_start, range_end);
                 //Reset dice index
-                matchR[matchL[rangeStart] as usize] = INVALID_MATCH_I32;
-                matchL[rangeStart] = INVALID_MATCH_I32;
-                assert_ne!(rangeStart, rangeEnd);
-                rangeStart += 1;
+                match_r[match_l[range_start] as usize] = INVALID_MATCH_I32;
+                match_l[range_start] = INVALID_MATCH_I32;
+                assert_ne!(range_start, range_end);
+                range_start += 1;
 
                 //Not sure what this is for
-                if (used[rangeStart - 1]) {
+                if used[range_start - 1] {
                     //						System.err.println("ADJ " + rangeStart);
                     break;
                 }
@@ -176,12 +174,12 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
             cur_dice_value_i -= 1;
         } else {
             //				System.err.println(i + " FOUND");
-            rangeEnd += 1;
-            ans = max(ans, rangeEnd - rangeStart);
+            range_end += 1;
+            ans = max(ans, range_end - range_start);
         }
 
         //Reset all dice values in queue
-        for j in 0..queueTail {
+        for j in 0..queue_tail {
             used.set(queue[j] as usize, false);
         }
 
@@ -350,7 +348,7 @@ fn solve4(case_no: u32, dice: &Vec<Vec<i32>>) -> String
 
     //node schema
     //dice indexes are (MAX_DICE_VALUE + N_MAX]
-    let mut dfsDice = DfsDice {
+    let mut dfs_dice = DfsDice {
         //e: value_to_dice,
         vis: BitVec::from_elem(MAX_DICE_VALUE + 1, false),
         mat: vec![INVALID_MATCH; MAX_DICE_VALUE + 1],
@@ -365,15 +363,15 @@ fn solve4(case_no: u32, dice: &Vec<Vec<i32>>) -> String
     while interval_stop <= MAX_DICE_VALUE {
         //Anything in the interval is free to be rematched
         for i in interval_start..=interval_stop {
-            dfsDice.vis.set(i, false);
+            dfs_dice.vis.set(i, false);
         }
-        if dfsDice.dfs(interval_stop, &value_to_dice) {
+        if dfs_dice.dfs(interval_stop, &value_to_dice) {
             interval_stop += 1;
             ans = max(ans, interval_stop - interval_start);
         } else {
             for i in 0..n {
-                if dfsDice.mat[i] == interval_start {
-                    dfsDice.mat[i] = INVALID_MATCH;
+                if dfs_dice.mat[i] == interval_start {
+                    dfs_dice.mat[i] = INVALID_MATCH;
                 }
             }
             interval_start += 1;
@@ -503,11 +501,11 @@ fn solve_brute_force(case_no: u32, dice: &Vec<(u32, u16)>) -> String
     println!("case {}", case_no);
 
     let mut v_it = all_values.into_iter().peekable();
-    while let Some((v, dIdx)) = v_it.next() {
+    while let Some((v, d_idx)) = v_it.next() {
         println!(
             "Processing v {}/{}.  Lens {}, {}",
             v,
-            dIdx,
+            d_idx,
             sequences.len(),
             sequences_next.len()
         );
@@ -516,15 +514,15 @@ fn solve_brute_force(case_no: u32, dice: &Vec<(u32, u16)>) -> String
             last_value = v - 1;
         }
         for seq in sequences.iter() {
-            if !seq.contains(&dIdx) {
+            if !seq.contains(&d_idx) {
                 let mut s = seq.clone();
-                s.insert(dIdx);
+                s.insert(d_idx);
                 longest = max(s.len(), longest);
                 sequences_next.push(s);
             }
         }
         let mut h = HashSet::new();
-        h.insert(dIdx);
+        h.insert(d_idx);
         sequences_next.push(h);
 
         if let Some(&(v_next, _)) = v_it.peek() {
diff --git a/codejam_2017/src/y2017round4/b.rs b/codejam_2017/src/y2017round4/b.rs
index dbfd647..da0f76f 100644
--- a/codejam_2017/src/y2017round4/b.rs
+++ b/codejam_2017/src/y2017round4/b.rs
@@ -1,14 +1,12 @@
-use bit_set::BitSet;
-use bit_vec::BitVec;
-use codejam::algo::graph::flow2::Flow;
+
 use codejam::util::codejam::run_cases;
-use rand::{thread_rng, Rng};
+
 use std::cmp::{max};
 use std::io::Write;
 use std::mem;
 use std::usize;
 
-use byteorder::{ByteOrder, NativeEndian, WriteBytesExt};
+use byteorder::{ByteOrder, NativeEndian};
 use hamming::weight;
 use num_bigint::BigInt;
 use num_rational::{BigRational};
@@ -28,9 +26,9 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let (S, C) = reader.read_tuple_2::<i16>();
+                let (s, c) = reader.read_tuple_2::<i16>();
 
-                let cards = (0..C)
+                let cards = (0..c)
                     .map(|_| {
                         let some_string = reader.read_string();
                         let mut sw = some_string.split_whitespace();
@@ -41,7 +39,7 @@ pub fn solve_all_cases()
                     })
                     .collect();
 
-                write!(buffer, "{}", solve(case, &cards, S)).unwrap();
+                write!(buffer, "{}", solve(case, &cards, s)).unwrap();
             }
         },
     );
@@ -68,7 +66,7 @@ fn apply_op(card: &(char, BigRational), num: &BigRational) -> BigRational
     }
 }
 
-fn solve(case_no: u32, cards: &Vec<(char, i16)>, S: i16) -> String
+fn solve(case_no: u32, cards: &Vec<(char, i16)>, s: i16) -> String
 {
     println!("Solving {}", case_no);
 
@@ -186,7 +184,7 @@ fn solve(case_no: u32, cards: &Vec<(char, i16)>, S: i16) -> String
 
     let mut memo: Vec<Option<MemoData>> = vec![None; 1 << cards.len()];
 
-    let seed = BigRational::from(BigInt::from(S));
+    let seed = BigRational::from(BigInt::from(s));
 
     for (c_idx, c) in cards.iter().enumerate() {
         let n = apply_op(c, &seed);
diff --git a/codejam_2017/src/y2017round4/c.rs b/codejam_2017/src/y2017round4/c.rs
index c8c6eff..d02ca6f 100644
--- a/codejam_2017/src/y2017round4/c.rs
+++ b/codejam_2017/src/y2017round4/c.rs
@@ -1,9 +1,5 @@
 use codejam::util::codejam::run_cases;
-use codejam::util::grid::Grid;
 use nalgebra::*;
-use rand::distributions::{Uniform};
-use rand::prelude::StdRng;
-use rand::SeedableRng;
 use std::collections::{HashMap, HashSet};
 use std::io::Write;
 use std::time::Instant;
@@ -213,7 +209,12 @@ impl Search
 #[cfg(test)]
 mod test_2017_round4_c
 {
-    use super::*;
+    use codejam::util::grid::Grid;
+use super::*;
+    use rand::distributions::{Distribution, Uniform};
+    use rand::prelude::StdRng;
+    use rand::SeedableRng;
+    
 
     #[test]
     fn test_spanning_tree_count()
diff --git a/codejam_2017/src/y2017round4/d.rs b/codejam_2017/src/y2017round4/d.rs
index 12dfa53..ed82065 100644
--- a/codejam_2017/src/y2017round4/d.rs
+++ b/codejam_2017/src/y2017round4/d.rs
@@ -2,9 +2,9 @@ use codejam::algo::vectors::*;
 use codejam::util::codejam::run_cases;
 use num_bigint::BigInt;
 use num_traits::*;
-use rand::distributions::{ Uniform};
-use rand::prelude::{SliceRandom, StdRng};
+use rand::prelude::{ StdRng};
 use rand::{Rng, SeedableRng};
+use rand::seq::SliceRandom;
 use std::io::Write;
 
 /*
@@ -32,9 +32,9 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let N = reader.read_int();
+                let n = reader.read_int();
 
-                let points = (0..N)
+                let points = (0..n)
                     .map(|_| reader.read_tuple_3())
                     .map(|tup| [tup.0, tup.1, tup.2])
                     .collect();
@@ -59,7 +59,7 @@ fn solve(case_no: u32, points: &Vec<Vector3<i64>>) -> String
     let mut rng: StdRng = SeedableRng::seed_from_u64(42);
 
     //speed up checks
-    rng.shuffle(&mut points);
+    points.shuffle(&mut rng);
 
     for i in 0..points.len() {
         //println!("Point {}={:#?}", i, points[i]);
@@ -195,6 +195,9 @@ fn check_coplanar(
 mod test_2017_round4_d
 {
     use super::*;
+    use rand::distributions::{Distribution, Uniform};
+    use rand::prelude::StdRng;
+    use rand::SeedableRng;
 
     #[test]
     fn test_plane_direction()
diff --git a/codejam_2017/src/y2017round4/e.rs b/codejam_2017/src/y2017round4/e.rs
index da7a254..7061a77 100644
--- a/codejam_2017/src/y2017round4/e.rs
+++ b/codejam_2017/src/y2017round4/e.rs
@@ -22,9 +22,9 @@ pub fn solve_all_cases()
         &["E-small-practice", "E-large-practice"],
         "y2017round4",
         |reader, buffer| {
-            let P = reader.read_int();
+            let p = reader.read_int();
             //suit/value
-            let premade_stacks: Vec<Vec<(u16, u16)>> = (0..P)
+            let premade_stacks: Vec<Vec<(u16, u16)>> = (0..p)
                 .map(|_| {
                     let nums = reader.read_num_line::<u16>();
                     let num_cards = nums[0] as usize;
@@ -37,12 +37,12 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let (N, C) = reader.read_tuple_2::<usize>();
+                let (n, c) = reader.read_tuple_2::<usize>();
                 let stack_indexes = reader.read_num_line::<usize>();
                 let stacks = stack_indexes
                     .iter()
                     .map(|si| {
-                        assert_eq!(C, premade_stacks[*si].len());
+                        assert_eq!(c, premade_stacks[*si].len());
                         premade_stacks[*si].iter().cloned().collect::<VecDeque<_>>()
                     })
                     .collect();
@@ -72,36 +72,36 @@ pub fn solve_all_cases()
 
 fn solve(stacks: &Vec<VecDeque<(u16, u16)>>) -> bool
 {
-    let mut suitToCards: HashMap<u16, Vec<u16>> = HashMap::new();
-    let mut kingSuitToStack: BiMap<u16, usize> = BiMap::new();
-    let mut lastAceSuitToStack: HashMap<u16, usize> = HashMap::new();
+    let mut suit_to_cards: HashMap<u16, Vec<u16>> = HashMap::new();
+    let mut king_suit_to_stack: BiMap<u16, usize> = BiMap::new();
+    let mut last_ace_suit_to_stack: HashMap<u16, usize> = HashMap::new();
 
     for &(value, suit) in stacks.iter().flatten() {
-        suitToCards.entry(suit).or_insert(Vec::new()).push(value);
+        suit_to_cards.entry(suit).or_insert(Vec::new()).push(value);
     }
 
-    for cards in suitToCards.values_mut() {
+    for cards in suit_to_cards.values_mut() {
         cards.sort();
     }
 
     for (idx, stack) in stacks.iter().enumerate() {
         debug!("Before  Stack #{}: {:?}", idx, stack);
         for (card_idx, &(value, suit)) in stack.iter().enumerate() {
-            let suitCards = &suitToCards[&suit];
-            if card_idx == stack.len() - 1 && value == suitCards[suitCards.len() - 1] {
-                lastAceSuitToStack.insert(suit, idx);
+            let suit_cards = &suit_to_cards[&suit];
+            if card_idx == stack.len() - 1 && value == suit_cards[suit_cards.len() - 1] {
+                last_ace_suit_to_stack.insert(suit, idx);
             }
-            if suitCards.len() > 1 && value == suitCards[suitCards.len() - 2] {
-                kingSuitToStack.insert(suit, idx);
+            if suit_cards.len() > 1 && value == suit_cards[suit_cards.len() - 2] {
+                king_suit_to_stack.insert(suit, idx);
             }
         }
     }
 
-    if suitToCards.len() < stacks.len() {
+    if suit_to_cards.len() < stacks.len() {
         return true;
     }
 
-    if suitToCards.len() > stacks.len() {
+    if suit_to_cards.len() > stacks.len() {
         return false;
     }
 
@@ -111,7 +111,7 @@ fn solve(stacks: &Vec<VecDeque<(u16, u16)>>) -> bool
 
     //stack => suit; these stacks have a unique ace at the bottom
     // Let us construct a graph in which vertices are the suits for which the ace begins the game at the bottom of some stack
-    let vertices: BiMap<usize, u16> = lastAceSuitToStack
+    let vertices: BiMap<usize, u16> = last_ace_suit_to_stack
         .iter()
         .map(|(suit, stack_idx)| (*stack_idx, *suit))
         .collect();
@@ -125,7 +125,7 @@ fn solve(stacks: &Vec<VecDeque<(u16, u16)>>) -> bool
     //We say that a vertex (suit) s is a source if the ace is the only card in this suit,
     let sources: Vec<u16> = vertices
         .iter()
-        .filter(|(_, suit)| suitToCards[suit].len() == 1)
+        .filter(|(_, suit)| suit_to_cards[suit].len() == 1)
         .map(|(_, suit)| *suit)
         .collect();
 
@@ -136,7 +136,7 @@ fn solve(stacks: &Vec<VecDeque<(u16, u16)>>) -> bool
         .iter()
         .filter(|&(stack_idx, suit)| {
             stacks[*stack_idx].iter().any(|(search_card, search_suit)| {
-                suit != search_suit && suitToCards[search_suit].last().unwrap() == search_card
+                suit != search_suit && suit_to_cards[search_suit].last().unwrap() == search_card
             })
         })
         .map(|(_, suit)| *suit)
@@ -153,31 +153,31 @@ fn solve(stacks: &Vec<VecDeque<(u16, u16)>>) -> bool
         if the king of s2 is in the stack that has the ace of s1 at the bottom.
         */
 
-        if !kingSuitToStack.contains_right(stack_idx_1) {
+        if !king_suit_to_stack.contains_right(stack_idx_1) {
             continue;
         }
-        let kingSuit = kingSuitToStack.get_by_right(stack_idx_1).unwrap();
+        let king_suit = king_suit_to_stack.get_by_right(stack_idx_1).unwrap();
 
-        if !vertices.contains_right(&kingSuit) {
+        if !vertices.contains_right(&king_suit) {
             continue;
         }
 
-        let vertex_2_suit = vertices.get_by_right(&kingSuit).unwrap();
+        //let vertex_2_suit = vertices.get_by_right(&kingSuit).unwrap();
 
-        if kingSuit == ace_suit_1 {
+        if king_suit == ace_suit_1 {
             continue;
         }
 
         edges
             .entry(*ace_suit_1)
             .or_insert(Vec::new())
-            .push(*kingSuit);
+            .push(*king_suit);
     }
 
     println!("Starting DFS {}", sources.len());
     for source in sources {
         println!("DFS {}", source);
-        if BFS(&edges, &mut HashSet::new(), source, &target) {
+        if bfs(&edges, &mut HashSet::new(), source, &target) {
             return true;
         }
     }
@@ -185,7 +185,7 @@ fn solve(stacks: &Vec<VecDeque<(u16, u16)>>) -> bool
     false
 }
 
-fn BFS(
+fn bfs(
     edges: &HashMap<u16, Vec<u16>>,
     _visited: &mut HashSet<u16>,
     v: u16,
@@ -217,7 +217,7 @@ fn BFS(
     return false;
 }
 
-fn DFS(
+fn dfs(
     edges: &HashMap<u16, Vec<u16>>,
     visited: &mut HashSet<u16>,
     v: u16,
@@ -237,7 +237,7 @@ fn DFS(
         if visited.contains(w) {
             continue;
         }
-        found |= DFS(edges, visited, *w, targets);
+        found |= dfs(edges, visited, *w, targets);
 
         if found {
             break;
diff --git a/codejam_2017/src/y2017round4/f.rs b/codejam_2017/src/y2017round4/f.rs
index 5a29641..d4855d4 100644
--- a/codejam_2017/src/y2017round4/f.rs
+++ b/codejam_2017/src/y2017round4/f.rs
@@ -16,11 +16,11 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let N = reader.read_int::<usize>();
+                let n = reader.read_int::<usize>();
                 let home = reader.read_array_3::<i64>();
                 let dest = reader.read_array_3::<i64>();
 
-                let teleporters: Vec<_> = (0..N).map(|_| reader.read_array_3::<i64>()).collect();
+                let teleporters: Vec<_> = (0..n).map(|_| reader.read_array_3::<i64>()).collect();
 
                 if case != 22 {
                     //continue;
@@ -62,10 +62,10 @@ fn get_longest_path_for_step(
     steps: usize,
 ) -> Vec<i64>
 {
-    let N = dist_matrix[0].len();
+    let n = dist_matrix[0].len();
 
-    let mut ans = vec![vec![-1; N]; N];
-    let mut new_ans = vec![vec![-1; N]; N];
+    let mut ans = vec![vec![-1; n]; n];
+    let mut new_ans = vec![vec![-1; n]; n];
 
     for step_idx in 0..dist_matrix.len() {
         if (1 << step_idx) & steps == 0 {
@@ -81,10 +81,10 @@ fn get_longest_path_for_step(
         // println!("Multiplying with {}", step_idx);
 
         //
-        for t1_idx in 0..N {
-            for t2_idx in 0..N {
+        for t1_idx in 0..n {
+            for t2_idx in 0..n {
                 let mut best = -1;
-                for v_idx in 0..N {
+                for v_idx in 0..n {
                     best = max(
                         best,
                         ans[t1_idx][v_idx] + dist_matrix[step_idx][v_idx][t2_idx],
@@ -106,9 +106,9 @@ fn get_longest_path_for_step(
     home_dist[t_idx]).collect()*/
 
     //return indexed by end point
-    (0..N)
+    (0..n)
         .map(|stop_idx| {
-            { (0..N).map(|start_idx| ans[start_idx][stop_idx] + home_dist[start_idx]) }
+            { (0..n).map(|start_idx| ans[start_idx][stop_idx] + home_dist[start_idx]) }
                 .max()
                 .unwrap()
         })
@@ -241,7 +241,7 @@ fn solve(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
 
 /// Tests large observation that we only need to calculate U
 /// And validates iterative squaring approach to calculing max U distance per step
-fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
+fn solve_small_only_u(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
 {
     //let mut L: Vec<Vec<i64>> = Vec::new();
     //let mut U: Vec<Vec<i64>> = Vec::new();
@@ -330,8 +330,8 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
         initial.push(dist(home, t));
     }
 
-    let mut L = initial.clone();
-    let mut U = initial.clone();
+    let mut l = initial.clone();
+    let mut u = initial.clone();
 
     /*
     By definition, Lt,i+1 and Ut,i+1 are the distances from t to its closest and farthest points in Ri, respectively.
@@ -341,14 +341,14 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
     */
     for i in 1..10000 {
         if i < 68 {
-            println!("i {} max is {}", i, U.iter().max().unwrap());
+            println!("i {} max is {}", i, u.iter().max().unwrap());
         }
 
         let fast_umax = get_longest_path_for_step(&dist_matrix, &initial, i - 1);
 
         if i > 1 {
             let fast_umax_all = fast_umax.iter().max().unwrap();
-            let current_umax = U.iter().max().unwrap();
+            let current_umax = u.iter().max().unwrap();
 
             assert_eq!(*current_umax + 1, *fast_umax_all);
 
@@ -357,19 +357,19 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
             */
         }
 
-        let mut new_L = Vec::new();
-        let mut new_U = Vec::new();
+        let mut new_l = Vec::new();
+        let mut new_u = Vec::new();
 
         for (t_idx, t) in teleporters.iter().enumerate() {
             if i > 1 {
-                let current_umax = U[t_idx];
+                let current_umax = u[t_idx];
                 let fast_umax_t = fast_umax[t_idx];
                 assert_eq!(current_umax, fast_umax_t);
             }
 
             if
             //dist(&dest, t) >= L[t_idx] &&
-            i > 1 && dist(&dest, t) <= U[t_idx] {
+            i > 1 && dist(&dest, t) <= u[t_idx] {
                 return Some(i as u64);
             }
 
@@ -388,7 +388,7 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
                 }
                 //Greatest distance from teleporter u + distance of t to u;
                 //this is the furthest one could teleport using teleporter t
-                let maybe_high = U[u_idx] + dist(u, t);
+                let maybe_high = u[u_idx] + dist(u, t);
                 if high.is_none() || maybe_high > high.unwrap() {
                     high = Some(maybe_high);
                 }
@@ -402,12 +402,12 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
                 */
 
                 let dist_tu = dist(t, u);
-                let maybe_low = if dist_tu > U[u_idx] {
+                let maybe_low = if dist_tu > u[u_idx] {
                     //lowest distance is outside the outer sphere
-                    dist_tu - U[u_idx]
-                } else if dist_tu < L[u_idx] {
+                    dist_tu - u[u_idx]
+                } else if dist_tu < l[u_idx] {
                     //teleport to lower sphere
-                    L[u_idx] - dist_tu
+                    l[u_idx] - dist_tu
                 } else {
                     0
                 };
@@ -417,12 +417,12 @@ fn solve_small_only_U(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> O
                 }
             }
 
-            new_L.push(low.unwrap());
-            new_U.push(high.unwrap());
+            new_l.push(low.unwrap());
+            new_u.push(high.unwrap());
         }
 
-        mem::swap(&mut L, &mut new_L);
-        mem::swap(&mut U, &mut new_U);
+        mem::swap(&mut l, &mut new_l);
+        mem::swap(&mut u, &mut new_u);
     }
 
     None

From 75b334f05dbc453006c3e38712fe9f1d2da97967 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 13:48:11 -0300
Subject: [PATCH 074/122] 2017

---
 codejam_2017/src/main.rs                |   8 +-
 codejam_2017/src/y2017qual/d.rs         |   2 +-
 codejam_2017/src/y2017round1a/a.rs      |   7 +-
 codejam_2017/src/y2017round1a/b.rs      |   8 +-
 codejam_2017/src/y2017round1a/c.rs      |  68 ++++-----
 codejam_2017/src/y2017round1b/a.rs      |   8 +-
 codejam_2017/src/y2017round1b/b.rs      |  12 +-
 codejam_2017/src/y2017round1b/c.rs      |  42 +++---
 codejam_2017/src/y2017round1c/a.rs      |  26 ++--
 codejam_2017/src/y2017round1c/b.rs      |  18 +--
 codejam_2017/src/y2017round1c/c.rs      |  34 ++---
 codejam_2017/src/y2017round2/a.rs       |  42 +++---
 codejam_2017/src/y2017round2/b.rs       |  20 +--
 codejam_2017/src/y2017round2/c.rs       |   8 +-
 codejam_2017/src/y2017round2/d.rs       | 162 ++++++++++----------
 codejam_2017/src/y2017round3/a.rs       |   8 +-
 codejam_2017/src/y2017round3/b.rs       |  68 ++++-----
 codejam_2017/src/y2017round3/c.rs       |   6 +-
 codejam_2017/src/y2017round3/d.rs       |   1 -
 codejam_2017/src/y2017round4/a.rs       |  23 +--
 codejam_2017/src/y2017round4/b.rs       |   4 +-
 codejam_2017/src/y2017round4/c.rs       |   2 +-
 codejam_2017/src/y2017round4/e.rs       |   3 +-
 codejam_2017/src/y2017round4/f.rs       | 188 -----------------------
 codejam_2017/src/y2017round4/f_small.rs | 192 ++++++++++++++++++++++++
 25 files changed, 486 insertions(+), 474 deletions(-)

diff --git a/codejam_2017/src/main.rs b/codejam_2017/src/main.rs
index 3037cd7..b691b20 100644
--- a/codejam_2017/src/main.rs
+++ b/codejam_2017/src/main.rs
@@ -79,9 +79,11 @@ fn main()
 {
     init_log();
 
-    run_y2017_round_qual();
+    //run_y2017_round_qual();
     run_y2017_round_1a();
-    run_y2017_round_1b();
-    run_y2017_round2();
+    //run_y2017_round_1b();
+    //run_y2017_round_1c();
+    //run_y2017_round2();
+    //run_y2017_round3();
     //run_y2017_round4();
 }
diff --git a/codejam_2017/src/y2017qual/d.rs b/codejam_2017/src/y2017qual/d.rs
index f9213dc..ef352bd 100644
--- a/codejam_2017/src/y2017qual/d.rs
+++ b/codejam_2017/src/y2017qual/d.rs
@@ -56,7 +56,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(
+                write!(
                     buffer,
                     "Case #{}: {}",
                     case_no,
diff --git a/codejam_2017/src/y2017round1a/a.rs b/codejam_2017/src/y2017round1a/a.rs
index a550bcc..8a68f65 100644
--- a/codejam_2017/src/y2017round1a/a.rs
+++ b/codejam_2017/src/y2017round1a/a.rs
@@ -11,14 +11,14 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["A-small-practice", "A-large-practice"],
-        "y2008round1a",
+        "y2017round1a",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
 
                 //handle input / output
-                let (r, c) = reader.read_tuple_2();
+                let (r, _c) = reader.read_tuple_2();
 
                 let mut grid: Vec<Vec<char>> = Vec::new();
 
@@ -28,7 +28,7 @@ pub fn solve_all_cases()
                 }
 
 
-                writeln!(buffer, "Case #{}: {:.6}", case_no, solve( &mut grid)).unwrap();
+                write!(buffer, "Case #{}:{}", case_no, solve( &mut grid)).unwrap();
             }
         });
 
@@ -92,6 +92,7 @@ fn solve( grid: &mut Vec<Vec<char>>) -> String
         for c in 0..n_cols {
             ans += &grid[r][c].to_string();
         }
+        ans += "\n"
     }
     ans
 }
diff --git a/codejam_2017/src/y2017round1a/b.rs b/codejam_2017/src/y2017round1a/b.rs
index cc0f93a..f246f2b 100644
--- a/codejam_2017/src/y2017round1a/b.rs
+++ b/codejam_2017/src/y2017round1a/b.rs
@@ -13,7 +13,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["B-small-practice", "B-large-practice"],
-        "y2008round1a",
+        "y2017round1a",
         |reader, buffer| {
             let t = reader.read_int();
 
@@ -32,7 +32,7 @@ pub fn solve_all_cases()
                 println!("Solving case {}", case_no);
 
                 writeln!(buffer, "Case #{}: {}", case_no,
-                         solve(case_no, n, p, &r, &q)
+                         solve( n, p, &r, &q)
                 ).unwrap();
 
             }
@@ -40,7 +40,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(case_no: u32, n: u8, p: u8, r: &Vec<u32>, q: &Vec<Vec<u32>>) -> String
+fn solve(n: u8, p: u8, r: &Vec<u32>, q: &Vec<Vec<u32>>) -> i32
 {
     debug!("\nStarting solve");
     let mut events: Vec<_> = Vec::new();
@@ -127,5 +127,5 @@ fn solve(case_no: u32, n: u8, p: u8, r: &Vec<u32>, q: &Vec<Vec<u32>>) -> String
         }
     }
 
-    format!("Case #{}: {}\n", case_no, cnt)
+    cnt
 }
diff --git a/codejam_2017/src/y2017round1a/c.rs b/codejam_2017/src/y2017round1a/c.rs
index ac8279a..9b7325f 100644
--- a/codejam_2017/src/y2017round1a/c.rs
+++ b/codejam_2017/src/y2017round1a/c.rs
@@ -9,7 +9,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["C-small-practice", "C-large-practice"],
-        "y2008round1a",
+        "y2017round1a",
         |reader, buffer| {
             let t = reader.read_int();
 
@@ -35,22 +35,22 @@ pub fn solve_all_cases()
 
 const R: i64 = 100;
 
-fn solve( Hd: i64, Ad: i64, Hk: i64, Ak: i64, B: i64, D: i64) -> String
+fn solve( h_d: i64, a_d: i64, h_k: i64, a_k: i64, bb: i64, dd: i64) -> String
 {
-    let MAX_TURN = 10i64.pow(15);
-    let mut Ak = Ak;
+    let max_turn = 10i64.pow(15);
+    let mut a_k = a_k;
     let b;
-    if B == 0 {
+    if bb == 0 {
         b = 0;
     } else {
-        let z: f64 = (((B * Hk) as f64).sqrt() - Ad as f64) / B as f64;
+        let z: f64 = (((bb * h_k) as f64).sqrt() - a_d as f64) / bb as f64;
         if z < 0f64 {
             b = 0;
         } else {
             let b1 = z as i64;
             let b2 = b1 + 1;
-            if (Hk + b1 * B + Ad - 1) / (b1 * B + Ad) + b1
-                <= (Hk + b2 * B + Ad - 1) / (b2 * B + Ad) + b2
+            if (h_k + b1 * bb + a_d - 1) / (b1 * bb + a_d) + b1
+                <= (h_k + b2 * bb + a_d - 1) / (b2 * bb + a_d) + b2
             {
                 b = b1;
             } else {
@@ -58,62 +58,62 @@ fn solve( Hd: i64, Ad: i64, Hk: i64, Ak: i64, B: i64, D: i64) -> String
             }
         }
     }
-    let a = (Hk + b * B + Ad - 1) / (b * B + Ad);
+    let a = (h_k + b * bb + a_d - 1) / (b * bb + a_d);
     let ab = a + b;
 
-    let mut minturn = MAX_TURN;
-    if ab <= (Hd - 1) / Ak + 1 {
+    let mut minturn = max_turn;
+    if ab <= (h_d - 1) / a_k + 1 {
         minturn = ab;
-    } else if D == 0 {
-        let u = (Hd - Ak - 1) / Ak;
-        if u <= 0 && Hk > Ad {
-            minturn = MAX_TURN;
+    } else if dd == 0 {
+        let u = (h_d - a_k - 1) / a_k;
+        if u <= 0 && h_k > a_d {
+            minturn = max_turn;
         } else {
-            let w = ab - (Hd - 1) / Ak;
-            minturn = (Hd - 1) / Ak + w + (w + u - 2) / u;
+            let w = ab - (h_d - 1) / a_k;
+            minturn = (h_d - 1) / a_k + w + (w + u - 2) / u;
         }
-    } else if Hk > Ad && Ak - D >= Hd {
-        minturn = MAX_TURN;
+    } else if h_k > a_d && a_k - dd >= h_d {
+        minturn = max_turn;
     } else {
         let mut z = 0;
         let mut last_was_heal = false;
-        let mut Hi = Hd;
+        let mut h_i = h_d;
         let mut lastu: i64 = -1;
-        while Ak > 0 {
-            let u = (Hd - Ak - 1) / Ak;
-            if ab <= (Hi - 1) / Ak + 1 {
+        while a_k > 0 {
+            let u = (h_d - a_k - 1) / a_k;
+            if ab <= (h_i - 1) / a_k + 1 {
                 minturn = cmp::min(minturn, z + ab);
             } else if u > 0 && !last_was_heal && u as i64 != lastu {
-                let w = ab - (Hi - 1) / Ak;
-                minturn = cmp::min(minturn, z + (Hi - 1) / Ak + w + (w + u - 2) / u);
+                let w = ab - (h_i - 1) / a_k;
+                minturn = cmp::min(minturn, z + (h_i - 1) / a_k + w + (w + u - 2) / u);
             }
-            if Hi <= Ak - D {
+            if h_i <= a_k - dd {
                 if last_was_heal {
                     break;
                 }
                 z += 1;
                 last_was_heal = true;
-                Hi = Hd - Ak;
-                if Ak >= R * D && u == (Hd - (Ak - R * D) - 1) / (Ak - R * D) {
+                h_i = h_d - a_k;
+                if a_k >= R * dd && u == (h_d - (a_k - R * dd) - 1) / (a_k - R * dd) {
                     let tt = R / u;
                     z += tt * (u + 1);
-                    Ak -= tt * u * D;
-                    Hi = Hd - Ak;
+                    a_k -= tt * u * dd;
+                    h_i = h_d - a_k;
                 }
             } else {
                 last_was_heal = false;
                 z += 1;
-                Ak -= D;
-                Hi -= Ak;
+                a_k -= dd;
+                h_i -= a_k;
             }
             lastu = u as i64;
         }
-        if Ak <= 0 {
+        if a_k <= 0 {
             minturn = cmp::min(minturn, z + ab);
         }
     }
 
-    if minturn == MAX_TURN {
+    if minturn == max_turn {
         format!("{}", "IMPOSSIBLE")
     } else {
         format!("{}", minturn)
diff --git a/codejam_2017/src/y2017round1b/a.rs b/codejam_2017/src/y2017round1b/a.rs
index 302169a..59a19d9 100644
--- a/codejam_2017/src/y2017round1b/a.rs
+++ b/codejam_2017/src/y2017round1b/a.rs
@@ -54,7 +54,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(D: f64, horses: &mut Vec<Horse>) -> String
+fn solve(d: f64, horses: &mut Vec<Horse>) -> String
 {
     //let mut horses = horses.clone();
 
@@ -76,7 +76,7 @@ fn solve(D: f64, horses: &mut Vec<Horse>) -> String
         let inter_t = (cur.start_pos - next.start_pos) / (next.velocity - cur.velocity);
         let inter_p = cur.start_pos + cur.velocity * inter_t;
 
-        if inter_p >= D {
+        if inter_p >= d {
             debug!("other horse finishes before: {:?} {:?}", cur, next);
             horses.remove(cur_index + 1);
             continue;
@@ -89,8 +89,8 @@ fn solve(D: f64, horses: &mut Vec<Horse>) -> String
     let hs = horses.last().unwrap();
     debug!("After processing, horse is {:?}.  V={:3}", hs, hs.velocity);
 
-    let t = (D - hs.start_pos) / hs.velocity;
-    let min_v = D / t;
+    let t = (d - hs.start_pos) / hs.velocity;
+    let min_v = d / t;
     debug!(
         "After processing, horse is {:?}.  V={:3}.  V to intersect={:3}",
         hs, hs.velocity, min_v
diff --git a/codejam_2017/src/y2017round1b/b.rs b/codejam_2017/src/y2017round1b/b.rs
index e22bc8d..de8b4f9 100644
--- a/codejam_2017/src/y2017round1b/b.rs
+++ b/codejam_2017/src/y2017round1b/b.rs
@@ -273,17 +273,17 @@ fn solution(counts: &mut Counts) -> Option<String>
         let pc = DOUBLE_COLORS_PAIRS[idx];
         counts.add_color(pc, 1);
     }
-    let N = counts.total;
+    let n = counts.total;
     let color1 = counts.max_color();
 
-    if counts.get_count(color1) > N / 2
+    if counts.get_count(color1) > n / 2
     //floor N/2
     {
         debug!(
             "Count of color {} too high {}.  N={}",
             color1,
             counts.get_count(color1),
-            N
+            n
         );
         return None;
     }
@@ -293,7 +293,7 @@ fn solution(counts: &mut Counts) -> Option<String>
 
     let mut pass1: Vec<Colors> = Vec::new();
 
-    let pass1_size = N / 2 + N % 2;
+    let pass1_size = n / 2 + n % 2;
     for _ in 0..counts.get_count(color1) {
         pass1.push(color1);
         counts.remove_color(color1, 1);
@@ -319,12 +319,12 @@ fn solution(counts: &mut Counts) -> Option<String>
     assert_eq!(pass1.len(), pass1_size as usize);
     assert_eq!(
         pass2.len(),
-        N as usize - pass1_size as usize,
+        n as usize - pass1_size as usize,
         "pass 2 wrong size"
     );
     sol.extend(pass1.iter().interleave(pass2.iter()).map(|c| c.to_char()));
 
-    assert_eq!(sol.len(), N as usize);
+    assert_eq!(sol.len(), n as usize);
 
     for (idx, s) in chains.iter().enumerate() {
         if s.len() <= 0 {
diff --git a/codejam_2017/src/y2017round1b/c.rs b/codejam_2017/src/y2017round1b/c.rs
index e604ebb..7286029 100644
--- a/codejam_2017/src/y2017round1b/c.rs
+++ b/codejam_2017/src/y2017round1b/c.rs
@@ -11,8 +11,8 @@ dijkstras ; creating nodes based on other state
 */
 struct Horse
 {
-    E: u32, //the maximum total distance, in kilometers, the horse in the i-th city can go and
-    S: u16, // Si, the constant speed, in kilometers per hour, at which the horse travels.
+    e: u32, //the maximum total distance, in kilometers, the horse in the i-th city can go and
+s: u16, // Si, the constant speed, in kilometers per hour, at which the horse travels.
 }
 
 type Distance = u32;
@@ -31,7 +31,7 @@ pub fn solve_all_cases()
 
         let horses: Vec<_> = (0..n)
             .map(|_| reader.read_tuple_2::<u32>())
-            .map(|tp| Horse { E: tp.0, S: tp.1 as u16 })
+            .map(|tp| Horse { e: tp.0, s: tp.1 as u16 })
             .collect();
         let city_dist: Vec<_> = (0..n)
             .map(|_| {
@@ -64,17 +64,17 @@ struct Node
 
 impl Node
 {
-    fn split_index(N: CityIndex, city_horse_index: CityIndex) -> (CityIndex, CityIndex)
+    fn split_index(n: CityIndex, city_horse_index: CityIndex) -> (CityIndex, CityIndex)
     {
-        let city = city_horse_index / N;
-        let horse = city_horse_index % N;
+        let city = city_horse_index / n;
+        let horse = city_horse_index % n;
         (city, horse)
     }
 
-    fn to_index(N: CityIndex, city: CityIndex, horse: CityIndex) -> CityIndex
+    fn to_index(n: CityIndex, city: CityIndex, horse: CityIndex) -> CityIndex
     {
-        assert!(horse < N);
-        city * N + horse
+        assert!(horse < n);
+        city * n + horse
     }
 }
 
@@ -138,16 +138,16 @@ fn solve_query(
 {
     debug!("Solving query from {} to {}", start_city + 1, stop_city + 1);
 
-    let N = horses.len() as CityIndex;
-    let NODE_COUNT = N * N;
+    let n = horses.len() as CityIndex;
+    let node_count = n * n;
 
     // dist[node] = current shortest distance from `start` to `node`
-    let mut shortest_time: Vec<_> = (0..NODE_COUNT).map(|_| f64::MAX).collect();
-    let mut prev: Vec<Option<CityIndex>> = vec![None; NODE_COUNT];
+    let mut shortest_time: Vec<_> = (0..node_count).map(|_| f64::MAX).collect();
+    let mut prev: Vec<Option<CityIndex>> = vec![None; node_count];
 
     let mut heap = BinaryHeap::new();
 
-    let start = Node::to_index(N, start_city, start_city);
+    let start = Node::to_index(n, start_city, start_city);
 
     // We're at `start`, with a zero time
     shortest_time[start] = 0f64;
@@ -162,7 +162,7 @@ fn solve_query(
             time,
             city_horse_index,
         } = current_node;
-        let (city_index, horse_index) = Node::split_index(N, city_horse_index);
+        let (city_index, horse_index) = Node::split_index(n, city_horse_index);
 
         if city_index == stop_city {
             return time;
@@ -178,16 +178,16 @@ fn solve_query(
         //follow prev nodes to find how long we have gone
         let mut dist_travelled_with_current_horse = 0;
         let mut p = city_horse_index;
-        while Node::split_index(N, p).0 != horse_index {
-            let (p_city_index, _p_horse_index) = Node::split_index(N, p);
+        while Node::split_index(n, p).0 != horse_index {
+            let (p_city_index, _p_horse_index) = Node::split_index(n, p);
             let pp = prev[p].unwrap();
-            let (pp_city_index, _pp_horse_index) = Node::split_index(N, pp);
+            let (pp_city_index, _pp_horse_index) = Node::split_index(n, pp);
             dist_travelled_with_current_horse += city_dist[pp_city_index][p_city_index].unwrap();
             p = pp;
         }
 
         let dis_remaining_with_current_horse =
-            horses[horse_index].E - dist_travelled_with_current_horse;
+            horses[horse_index].e - dist_travelled_with_current_horse;
 
         // For each node we can reach, see if we can find a way with
         // a lower cost going through this node
@@ -202,7 +202,7 @@ fn solve_query(
                 continue;
             }
 
-            let time_taken = time + dist as f64 / horses[horse_index].S as f64;
+            let time_taken = time + dist as f64 / horses[horse_index].s as f64;
 
             for change_horses in 0..2 {
                 let next_horse_index = if change_horses == 0 {
@@ -213,7 +213,7 @@ fn solve_query(
 
                 let next = Node {
                     time: time_taken,
-                    city_horse_index: Node::to_index(N, next_city_index, next_horse_index),
+                    city_horse_index: Node::to_index(n, next_city_index, next_horse_index),
                 };
 
                 // If so, add it to the frontier and continue
diff --git a/codejam_2017/src/y2017round1c/a.rs b/codejam_2017/src/y2017round1c/a.rs
index 49e010b..f96fb27 100644
--- a/codejam_2017/src/y2017round1c/a.rs
+++ b/codejam_2017/src/y2017round1c/a.rs
@@ -12,8 +12,8 @@ brute force search
 #[derive(Debug)] //,PartialEq,Eq,PartialOrd,Ord)]
 struct Pancake
 {
-    R: u32,
-    H: u32,
+    r: u32,
+    h: u32,
     area_top: f64,
     area_sides: f64,
 }
@@ -27,12 +27,12 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (N, K) = reader.read_tuple_2::<u16>();
-                let mut pancakes: Vec<_> = (0..N)
+                let (n, k) = reader.read_tuple_2::<u16>();
+                let mut pancakes: Vec<_> = (0..n)
                     .map(|_| reader.read_tuple_2::<u32>())
                     .map(|tp| Pancake {
-                        R: tp.0,
-                        H: tp.1,
+                        r: tp.0,
+                        h: tp.1,
                         area_top: 0f64,
                         area_sides: 0f64,
                     })
@@ -41,25 +41,25 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&mut pancakes, K)).unwrap();
+                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&mut pancakes, k)).unwrap();
             }
         },
     );
 
 }
 
-fn solve(pancakes: &mut Vec<Pancake>, K: u16) -> String
+fn solve(pancakes: &mut Vec<Pancake>, k: u16) -> String
 {
-    pancakes.sort_unstable_by(|a, b| b.R.cmp(&a.R).then(b.H.cmp(&a.H)));
+    pancakes.sort_unstable_by(|a, b| b.r.cmp(&a.r).then(b.h.cmp(&a.h)));
 
     //Precompute cylindar side surface area & top area
     for p in pancakes.iter_mut() {
-        p.area_top = (p.R as u64).pow(2) as f64 * f64::consts::PI;
-        p.area_sides = 2f64 * f64::consts::PI * p.R as f64 * p.H as f64;
+        p.area_top = (p.r as u64).pow(2) as f64 * f64::consts::PI;
+        p.area_sides = 2f64 * f64::consts::PI * p.r as f64 * p.h as f64;
     }
 
     //try all bottom pancakes, this uniquely determines the top area
-    let max_syrup: f64 = (0..pancakes.len() as u16 - K + 1)
+    let max_syrup: f64 = (0..pancakes.len() as u16 - k + 1)
         .map(|bottom_pancake_index| {
             //get max K-1 sides
             let mut side_areas: Vec<f64> = pancakes
@@ -71,7 +71,7 @@ fn solve(pancakes: &mut Vec<Pancake>, K: u16) -> String
             side_areas.sort_unstable_by(|a, b| b.partial_cmp(a).unwrap());
 
             //return area which is the heighest K-1 pancakes
-            side_areas.iter().take(K as usize - 1).sum::<f64>()
+            side_areas.iter().take(k as usize - 1).sum::<f64>()
                 + pancakes[bottom_pancake_index as usize].area_sides
                 + pancakes[bottom_pancake_index as usize].area_top
         })
diff --git a/codejam_2017/src/y2017round1c/b.rs b/codejam_2017/src/y2017round1c/b.rs
index 82ba4c7..9d7981c 100644
--- a/codejam_2017/src/y2017round1c/b.rs
+++ b/codejam_2017/src/y2017round1c/b.rs
@@ -25,14 +25,14 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (Ac, Aj) = reader.read_tuple_2::<u8>();
+                let (a_c, a_j) = reader.read_tuple_2::<u8>();
 
         let mut fixed: Vec<Option<Parent>> = vec![None; DAY];
-        for i in 0..Ac + Aj {
+        for i in 0..a_c + a_j {
             let (start, stop) = reader.read_tuple_2::<u16>();
             //intervals are open on right
             for t in start..stop {
-                fixed[t as usize] = if i < Ac { Some(Cameron) } else { Some(Jamie) };
+                fixed[t as usize] = if i < a_c { Some(Cameron) } else { Some(Jamie) };
             }
         }
                 println!("Solving case {}", case_no);
@@ -55,27 +55,27 @@ fn solve(fixed: &[Option<Parent>]) -> String
     # X = 0 if Cameron does the last slot
     # X = 1 if Jamie does the last slot
     */
-    let mut F = vec![[[(1 + DAY) as u16; 2]; 1 + DAY / 2]; 1 + DAY];
+    let mut f = vec![[[(1 + DAY) as u16; 2]; 1 + DAY / 2]; 1 + DAY];
     //Stack overflow if we attempt to declare this on the stack
     //let mut F = [[ [(1+day) as u16;2] ; 1+day/2]; 1+day];
 
-    F[0][0][0] = 0;
-    F[0][0][1] = 0;
+    f[0][0][0] = 0;
+    f[0][0][1] = 0;
     for t in 1..=DAY {
         for c in 0..=DAY / 2 {
             if fixed[t - 1] != Some(Cameron) && c > 0 {
                 // # Cameron is free for this minute
                 //so cameron does this, either we need to switch from jamie or continue
-                F[t][c][0] = min(F[t - 1][c - 1][1] + 1, F[t - 1][c - 1][0]);
+                f[t][c][0] = min(f[t - 1][c - 1][1] + 1, f[t - 1][c - 1][0]);
             }
             if fixed[t - 1] != Some(Jamie) {
                 // # Jamie is free for this minute
-                F[t][c][1] = min(F[t - 1][c][1], F[t - 1][c][0] + 1);
+                f[t][c][1] = min(f[t - 1][c][1], f[t - 1][c][0] + 1);
             }
         }
     }
 
-    let mut ans = min(F[DAY][DAY / 2][0], F[DAY][DAY / 2][1]);
+    let mut ans = min(f[DAY][DAY / 2][0], f[DAY][DAY / 2][1]);
     if ans % 2 == 1 {
         ans += 1;
     }
diff --git a/codejam_2017/src/y2017round1c/c.rs b/codejam_2017/src/y2017round1c/c.rs
index 3d29f9b..d7b0a8b 100644
--- a/codejam_2017/src/y2017round1c/c.rs
+++ b/codejam_2017/src/y2017round1c/c.rs
@@ -18,13 +18,13 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (_, K) = reader.read_tuple_2::<u8>();
-                let U = reader.read_int::<f64>();
-                let mut P = reader.read_num_line::<f64>();
+                let (_, k) = reader.read_tuple_2::<u8>();
+                let u = reader.read_int::<f64>();
+                let mut p = reader.read_num_line::<f64>();
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&mut P, U, K)).unwrap();
+                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&mut p, u, k)).unwrap();
             }
         },
     );
@@ -32,7 +32,7 @@ pub fn solve_all_cases()
 }
 
 
-fn prob_at_least_k(P: &[f64], K: usize) -> f64
+fn prob_at_least_k(p: &[f64], k: usize) -> f64
 {
     /*effectively this is a 2d matrix
     given P is a set of independent events probability success
@@ -46,17 +46,17 @@ fn prob_at_least_k(P: &[f64], K: usize) -> f64
 
     Since we only need the previous row, we don't need to keep the entire matrix
     */
-    let mut dp = vec![0f64; K + 1];
+    let mut dp = vec![0f64; k + 1];
 
     //0 successful events = 100%
     dp[0] = 1f64;
-    for p in P {
+    for p in p {
         let prev = dp.clone();
-        for k in 1..=K {
+        for k in 1..=k {
             dp[k] = (1f64 - p) * prev[k] + p * prev[k - 1];
         }
     }
-    return dp[K];
+    return dp[k];
 }
 
 fn fmin(a: f64, b: f64) -> f64
@@ -71,22 +71,22 @@ fn fmin(a: f64, b: f64) -> f64
 #[test]
 fn prob1()
 {
-    let P = [0.5; 6];
-    let p = prob_at_least_k(&P, 3);
+    let pp = [0.5; 6];
+    let p = prob_at_least_k(&pp, 3);
     println!("Prob 3 heads of 6 coins: {:.5}", p);
-    let P = [0.5; 18];
-    let p = prob_at_least_k(&P, 12);
+    let pp = [0.5; 18];
+    let p = prob_at_least_k(&pp, 12);
     println!("Prob 12 heads of 18 coins: {:.5}", p);
 }
 
-fn solve(prob: &mut Vec<f64>, U: f64, K: u8) -> String
+fn solve(prob: &mut Vec<f64>, u: f64, k: u8) -> String
 {
     prob.sort_by(|&a, &b| a.partial_cmp(&b).unwrap());
 
     let mut best_ans = -1f64;
     for i in 0..prob.len() {
         let mut p_improved: Vec<_> = prob.clone();
-        let mut u_remaining = U;
+        let mut u_remaining = u;
 
         //distribute u to lowest
         for j in i..prob.len() {
@@ -129,11 +129,11 @@ fn solve(prob: &mut Vec<f64>, U: f64, K: u8) -> String
             }
         }
 
-        let at_least_k = prob_at_least_k(&p_improved, K.into());
+        let at_least_k = prob_at_least_k(&p_improved, k.into());
 
         debug!(
             "i={} probablity after distributing U {} = {:?}.  Overall success prob={} for K {}",
-            i, U, p_improved, at_least_k, K
+            i, u, p_improved, at_least_k, k
         );
 
         if at_least_k > best_ans {
diff --git a/codejam_2017/src/y2017round2/a.rs b/codejam_2017/src/y2017round2/a.rs
index 0a61136..ef06d81 100644
--- a/codejam_2017/src/y2017round2/a.rs
+++ b/codejam_2017/src/y2017round2/a.rs
@@ -15,8 +15,8 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (_, P) = reader.read_tuple_2::<usize>();
-                let mut G: Vec<_> = reader.read_num_line::<usize>();
+                let (_, p) = reader.read_tuple_2::<usize>();
+                let mut g: Vec<_> = reader.read_num_line::<usize>();
 
                 if case_no != 1 {
                     //        continue;
@@ -24,56 +24,56 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {:.6}", case_no, solve(&mut G, P)).unwrap();
+                writeln!(buffer, "Case #{}: {:.6}", case_no, solve(&mut g, p)).unwrap();
             }
         },
     );
 }
 
-fn solve(G: &mut Vec<usize>, P: usize) -> String
+fn solve(g: &mut Vec<usize>, p: usize) -> String
 {
-    for g in G.iter_mut() {
-        *g %= P;
+    for g in g.iter_mut() {
+        *g %= p;
     }
 
-    let mut G_count = (0..P)
-        .map(|i| G.iter().filter(|&&g| g == i).count())
+    let mut g_count = (0..p)
+        .map(|i| g.iter().filter(|&&g| g == i).count())
         .collect::<Vec<_>>();
 
-    debug!("P={} G_count={:?}", P, G_count);
+    debug!("P={} G_count={:?}", p, g_count);
 
     //groups are listed by their mod, but we need a 2nd index with how many leftovers they can consume
-    let NEED_INDEX = (0..P).map(|g| (P - g) % P).collect::<Vec<_>>();
+    let need_index = (0..p).map(|g| (p - g) % p).collect::<Vec<_>>();
     let mut leftover = 0usize;
     let mut groups_happy = 0;
-    'outer: for _ in 0..G.len() {
+    'outer: for _ in 0..g.len() {
         //state machine
         if leftover == 0 {
             groups_happy += 1;
 
             //maintaining 0 state is important, so we need to short circuit any cases
             //where we have the group than can consume 100% of the leftovers
-            for (need_idx, &g_idx) in NEED_INDEX.iter().enumerate() {
-                if G_count[g_idx] > 0 && G_count[NEED_INDEX[(P - need_idx) % P]] > 0 {
-                    G_count[g_idx] -= 1;
-                    leftover = (P - need_idx) % P;
+            for (need_idx, &g_idx) in need_index.iter().enumerate() {
+                if g_count[g_idx] > 0 && g_count[need_index[(p - need_idx) % p]] > 0 {
+                    g_count[g_idx] -= 1;
+                    leftover = (p - need_idx) % p;
                     continue 'outer;
                 }
             }
         }
 
         //if we can make leftovers 0, then do it
-        if G_count[NEED_INDEX[leftover]] > 0 {
-            G_count[NEED_INDEX[leftover]] -= 1;
+        if g_count[need_index[leftover]] > 0 {
+            g_count[need_index[leftover]] -= 1;
             leftover = 0;
             continue;
         }
 
         //fall through case, just take anything
-        for (need_idx, &g_idx) in NEED_INDEX.iter().enumerate() {
-            if G_count[g_idx] > 0 {
-                G_count[g_idx] -= 1;
-                leftover = (leftover + P - need_idx) % P;
+        for (need_idx, &g_idx) in need_index.iter().enumerate() {
+            if g_count[g_idx] > 0 {
+                g_count[g_idx] -= 1;
+                leftover = (leftover + p - need_idx) % p;
                 break;
             }
         }
diff --git a/codejam_2017/src/y2017round2/b.rs b/codejam_2017/src/y2017round2/b.rs
index d62d625..9e2aa50 100644
--- a/codejam_2017/src/y2017round2/b.rs
+++ b/codejam_2017/src/y2017round2/b.rs
@@ -19,29 +19,29 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (N, C, M) = reader.read_tuple_3::<u16>();
+                let (n, c,m) = reader.read_tuple_3::<u16>();
                 //P B
-                let tickets: Vec<_> = (0..M).map(|_| reader.read_tuple_2::<u16>()).collect();
+                let tickets: Vec<_> = (0..m).map(|_| reader.read_tuple_2::<u16>()).collect();
 
                 println!("Solving case {}", case_no);
 
                 writeln!(buffer, "Case #{}: {:0>3}", case_no,
-                         solve( N, C, &tickets)).unwrap();
+                         solve( n, c, &tickets)).unwrap();
             }
         },
     );
 }
 
 
-fn solve( N: u16, C: u16, tickets: &Vec<(u16, u16)>) -> String
+fn solve( n: u16, c: u16, tickets: &Vec<(u16, u16)>) -> String
 {
 
     //first determine if a customer has multiple tickeets
     let max_tickets_per_customer: u16 = *tickets
         .iter()
-        .fold(&mut vec![0; C as usize], |acc, &(_P, B)| {
+        .fold(&mut vec![0; c as usize], |acc, &(_p, b)| {
             {
-                acc[B as usize - 1] += 1;
+                acc[b as usize - 1] += 1;
             }
             acc
         })
@@ -50,13 +50,13 @@ fn solve( N: u16, C: u16, tickets: &Vec<(u16, u16)>) -> String
         .unwrap();
     debug!("Max tickets per customer: {}", max_tickets_per_customer);
 
-    let mut tickets_per_position: Vec<u16> = vec![0; N as usize];
+    let mut tickets_per_position: Vec<u16> = vec![0; n as usize];
 
     tickets
         .iter()
-        .fold(&mut tickets_per_position, |acc, &(P, _B)| {
+        .fold(&mut tickets_per_position, |acc, &(p, _b)| {
             {
-                acc[P as usize - 1] += 1;
+                acc[p as usize - 1] += 1;
             }
             acc
         });
@@ -65,7 +65,7 @@ fn solve( N: u16, C: u16, tickets: &Vec<(u16, u16)>) -> String
     let ticket_pos_list: Vec<(u16, u16)> = tickets_per_position
         .iter()
         .enumerate()
-        .filter(|(_P, Count)| **Count > 0)
+        .filter(|(_p, count)| **count > 0)
         .map(|(a, b)| (a as u16, *b))
         .collect();
 
diff --git a/codejam_2017/src/y2017round2/c.rs b/codejam_2017/src/y2017round2/c.rs
index 1b8445f..3606634 100644
--- a/codejam_2017/src/y2017round2/c.rs
+++ b/codejam_2017/src/y2017round2/c.rs
@@ -32,10 +32,10 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let (R, C) = reader.read_tuple_2::<usize>();
-                let mut grid: Grid<Tile> = Grid::new(R, C);
-                for r in 0..R {
-                    let row = reader.read_chars(C);
+                let (r, c) = reader.read_tuple_2::<usize>();
+                let mut grid: Grid<Tile> = Grid::new(r, c);
+                for r in 0..r {
+                    let row = reader.read_chars(c);
                     for (c, t) in row.iter().enumerate() {
                         grid[(r, c)] = Tile::from(*t);
                     }
diff --git a/codejam_2017/src/y2017round2/d.rs b/codejam_2017/src/y2017round2/d.rs
index 3497a73..721f35b 100644
--- a/codejam_2017/src/y2017round2/d.rs
+++ b/codejam_2017/src/y2017round2/d.rs
@@ -40,10 +40,10 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let (C, R, M) = reader.read_tuple_3::<usize>();
-                let mut grid: Grid<Tile> = Grid::new(R, C);
-                for r in 0..R {
-                    let row = reader.read_chars(C);
+                let (c, r, m) = reader.read_tuple_3::<usize>();
+                let mut grid: Grid<Tile> = Grid::new(r, c);
+                for r in 0..r {
+                    let row = reader.read_chars(c);
                     for (c, t) in row.iter().enumerate() {
                         grid[(r, c)] = Tile::from(*t);
                     }
@@ -53,7 +53,7 @@ pub fn solve_all_cases()
                 pool.execute(move || {
                     let now = Instant::now();
                     let _ = writeln!(::std::io::stderr(), "Starting {} of {} ", case, t);
-                    let s = solve(case, &mut grid, M);
+                    let s = solve(case, &mut grid, m);
                     tx.send((case, s)).expect("Channel is there");
 
                     let duration = now.elapsed();
@@ -175,15 +175,15 @@ impl<L, R> FromIterator<(L, R)> for BiMap<L, R>
     }
 }*/
 
-fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> String
+fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, m_soldier_limit: usize) -> String
 {
     debug!(
         "Solving case {}\nM={}\n",
-        case_no, M_soldier_limit
+        case_no, m_soldier_limit
     );
 
     //original solider & turret index to location map
-    let S_map = grid
+    let s_map = grid
         .filter_by_val(&Soldier)
         .enumerate()
         .collect::<BiMap<_, _>>();
@@ -195,40 +195,40 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
         .map(|t_loc| reachable(&grid, &t_loc))
         .collect::<Vec<_>>();
 
-    let T_map = turret_locations
+    let t_map = turret_locations
         .into_iter()
         .enumerate()
         .collect::<BiMap<_, _>>();
 
-    let S = grid.filter_by_val(&Soldier).count();
-    let T = grid.filter_by_val(&Turret).count();
+    let s = grid.filter_by_val(&Soldier).count();
+    let t = grid.filter_by_val(&Turret).count();
 
     //Construct the initial Graph
 
-    let G_edges = build_graph(
+    let g_edges = build_graph(
         &grid,
         false,
-        M_soldier_limit,
-        &S_map,
-        &T_map,
+        m_soldier_limit,
+        &s_map,
+        &t_map,
         &turret_reachable_squares_list,
     );
 
-    let mut G = FlowGraph::new(2 + S + T, 4);
+    let mut g = FlowGraph::new(2 + s + t, 4);
 
-    for uv in G_edges {
-        G.add_edge(uv.0, uv.1, 1, 1);
+    for uv in g_edges {
+        g.add_edge(uv.0, uv.1, 1, 1);
     }
 
-    let source = S + T;
-    let sink = S + T + 1;
+    let source = s + t;
+    let sink = s + t + 1;
 
     let vertex_to_string = |v: usize| match v {
-        s if s < S => format!("Soldier #{} ({:?})", s + 1, *S_map.get_by_left(&s).unwrap()),
-        t if t >= S && t < S + T => format!(
+        s if s < s => format!("Soldier #{} ({:?})", s + 1, *s_map.get_by_left(&s).unwrap()),
+        t if t >= s && t < s + t => format!(
             "Turret #{} ({:?})",
-            t - S + 1,
-            *T_map.get_by_left(&(t - S)).unwrap()
+            t - s + 1,
+            *t_map.get_by_left(&(t - s)).unwrap()
         ),
         v if v == sink => "Sink".to_string(),
         _source => "Source".to_string(),
@@ -239,67 +239,67 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
     //will be in left to right order, then top down order
 
     //Now find max matching of G (G has an edge from soldier s to turret t if and only if soldier s can destroy turret t after all other turrets have been destroyed)
-    for s in 0..S {
-        G.add_edge(source, s, 1, 1);
+    for s in 0..s {
+        g.add_edge(source, s, 1, 1);
     }
 
-    for t in S..S + T {
-        G.add_edge(t, sink, 1, 1);
+    for t in s..s + t {
+        g.add_edge(t, sink, 1, 1);
     }
 
-    let (R, flow) = G.dinic(source, sink);
+    let (r, flow) = g.dinic(source, sink);
 
-    let mut ans = format!("Case #{}: {}\n", case_no, R);
+    let mut ans = format!("Case #{}: {}\n", case_no, r);
 
     //Compute initial matching
-    let mut M = flow
+    let mut m = flow
         .iter()
         .enumerate()
         .filter(|&(_e, f)| *f > 0)
         //map to u->v
-        .map(|(e, _f)| (G.graph.endp[e ^ 1], G.graph.endp[e]))
+        .map(|(e, _f)| (g.graph.endp[e ^ 1], g.graph.endp[e]))
         //leave out source and sink nodes
         .filter(|&(u, v)| u != source && v != sink)
         .collect::<Vec<_>>();
 
     debug!(
         "Edges in M initial matching=\n{}\n",
-        M.iter()
+        m.iter()
             .map(|&(u, v)| format!("{}->{}", vertex_to_string(u), vertex_to_string(v)))
             .collect::<Vec<_>>()
             .join("\n")
     );
 
-    let mut r = R;
+    let mut r = r;
 
     while r > 0 {
         //Let us define the graph G' with the same nodes as G, but an edge between soldier s and turret t only exists in G' if s can destroy t with the other turrets active
-        let Gprime = build_graph(
+        let g_prime = build_graph(
             &grid,
             true,
-            M_soldier_limit,
-            &S_map,
-            &T_map,
+            m_soldier_limit,
+            &s_map,
+            &t_map,
             &turret_reachable_squares_list,
         );
 
         //Now build graph H
-        let mut H = Graph::new(S + T, 4);
+        let mut h = Graph::new(s + t, 4);
 
-        let soldiers_in_m = M.iter().map(|&(s, _t)| s).collect::<Vec<_>>();
+        let soldiers_in_m = m.iter().map(|&(s, _t)| s).collect::<Vec<_>>();
 
-        for &(s, t) in Gprime.iter() {
+        for &(s, t) in g_prime.iter() {
             if soldiers_in_m.contains(&s) {
-                H.add_edge(s, t);
+                h.add_edge(s, t);
             }
         }
-        for &(s, t) in M.iter() {
-            H.add_edge(t, s);
+        for &(s, t) in m.iter() {
+            h.add_edge(t, s);
         }
 
         debug!(
             "Current matching M =\n{}\n",
-            M.iter()
+            m.iter()
                 .map(|&(u, v)| format!("{}->{}", vertex_to_string(u), vertex_to_string(v)))
                 .collect::<Vec<_>>()
                 .join("\n")
@@ -307,7 +307,7 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
 
         debug!(
             "Edges in G'=\n{}\n",
-            Gprime
+            g_prime
                 .iter()
                 .map(|&(u, v)| format!("{}->{}", vertex_to_string(u), vertex_to_string(v)))
                 .collect::<Vec<_>>()
@@ -316,31 +316,31 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
 
         debug!(
             "Edges in H=\n{}\n",
-            H.edges()
+            h.edges()
                 .map(|(u, v)| format!("{}->{}", vertex_to_string(u), vertex_to_string(v)))
                 .collect::<Vec<_>>()
                 .join("\n")
         );
 
-        let turrets_in_M = M.iter().map(|&(_s, t)| t).collect::<Vec<_>>();
+        let turrets_in_m = m.iter().map(|&(_s, t)| t).collect::<Vec<_>>();
         //find an edge (s,t') where t' is not in m
-        let st_prime = Gprime.iter().find(|&(_s, t)| !turrets_in_M.contains(t));
+        let st_prime = g_prime.iter().find(|&(_s, t)| !turrets_in_m.contains(t));
 
         if st_prime.is_some() {
             let &(s, t) = st_prime.unwrap();
-            debug!("Found (s,t') s={} t'={}", s, t - S);
-            ans += &format!("{} {}\n", s + 1, t - S + 1);
+            debug!("Found (s,t') s={} t'={}", s, t - s);
+            ans += &format!("{} {}\n", s + 1, t - s + 1);
 
-            grid[S_map.get_by_left(&s).unwrap()] = Empty;
-            grid[T_map.get_by_left(&(t - S)).unwrap()] = Empty;
+            grid[s_map.get_by_left(&s).unwrap()] = Empty;
+            grid[t_map.get_by_left(&(t - s)).unwrap()] = Empty;
             r -= 1;
 
             //Also remove from current matching
-            let to_remove = M
+            let to_remove = m
                 .iter()
                 .position(|&(s_in_m, _t)| s_in_m == s)
                 .expect("Soldier should be in mapping");
-            M.remove(to_remove);
+            m.remove(to_remove);
 
             continue;
         }
@@ -348,14 +348,14 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
         //Now we need to find a cycle
 
         //Start at a soldier in H
-        let soldier_in_h = H.edges().filter(|&(u, _v)| u <= S).next().unwrap().0;
+        let soldier_in_h = h.edges().filter(|&(u, _v)| u <= s).next().unwrap().0;
 
         let mut cycle_edges = VecDeque::new();
         let mut edge = (
             soldier_in_h,
-            H.adj_list_with_edges(soldier_in_h).next().unwrap().1,
+            h.adj_list_with_edges(soldier_in_h).next().unwrap().1,
         );
-        let mut visited = BitVec::from_elem(H.num_v(), false);
+        let mut visited = BitVec::from_elem(h.num_v(), false);
 
         while !visited[edge.0] {
             visited.set(edge.0, true);
@@ -365,7 +365,7 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
                 format!("{}->{}", vertex_to_string(edge.0), vertex_to_string(edge.1))
             );
             //adj list returns an (internal edge index, next vertex)
-            edge = (edge.1, H.adj_list_with_edges(edge.1).next().unwrap().1);
+            edge = (edge.1, h.adj_list_with_edges(edge.1).next().unwrap().1);
             debug!("Edge {:?} ", edge);
         }
 
@@ -391,13 +391,13 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
         // present in C in some direction. M' in this case is also a matching of G of the same size as M
 
         //because it is a cycle, we know we have new edges from G' to replace the ones removed from M
-        let mut M_new: Vec<(usize, usize)> = Vec::new();
-        M_new.extend(M.iter().filter(|&&(u, v)| !cycle_edges.contains(&(v, u))));
-        M_new.extend(cycle_edges.iter().filter(|&&(u, v)| !M.contains(&(v, u))));
+        let mut m_new: Vec<(usize, usize)> = Vec::new();
+        m_new.extend(m.iter().filter(|&&(u, v)| !cycle_edges.contains(&(v, u))));
+        m_new.extend(cycle_edges.iter().filter(|&&(u, v)| !m.contains(&(v, u))));
 
         debug!(
             "New matching M =\n{}\n",
-            M_new
+            m_new
                 .iter()
                 .map(|&(u, v)| format!("{}->{}", vertex_to_string(u), vertex_to_string(v)))
                 .collect::<Vec<_>>()
@@ -405,21 +405,21 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
         );
 
         //Find all edges from G' which are actions we can take
-        let st_actions = M_new
+        let st_actions = m_new
             .iter()
-            .filter(|&uv| Gprime.contains(uv))
+            .filter(|&uv| g_prime.contains(uv))
             .collect::<Vec<_>>();
         for &&(s, t) in st_actions.iter() {
-            debug!("Taking actions from g' s {} t {}", s + 1, t + 1 - S);
-            ans += &format!("{} {}\n", s + 1, t - S + 1);
+            debug!("Taking actions from g' s {} t {}", s + 1, t + 1 - s);
+            ans += &format!("{} {}\n", s + 1, t - s + 1);
 
-            grid[S_map.get_by_left(&s).unwrap()] = Empty;
-            grid[T_map.get_by_left(&(t - S)).unwrap()] = Empty;
+            grid[s_map.get_by_left(&s).unwrap()] = Empty;
+            grid[t_map.get_by_left(&(t - s)).unwrap()] = Empty;
 
             r -= 1;
         }
 
-        M = M_new;
+        m = m_new;
     }
 
     ans
@@ -428,13 +428,13 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, M_soldier_limit: usize) -> Str
 fn build_graph(
     grid: &Grid<Tile>,
     is_g_prime: bool,
-    M: usize,
+    m: usize,
     s_mapping: &BiMap<usize, GridCoord>,
     t_mapping: &BiMap<usize, GridCoord>,
     turret_reachable_squares_list: &Vec<HashSet<GridRowColVec>>,
 ) -> IndexSet<(usize, usize)>
 {
-    let mut G: IndexSet<(usize, usize)> = IndexSet::new();
+    let mut g: IndexSet<(usize, usize)> = IndexSet::new();
 
     let turret_locations = grid.filter_by_val(&Turret).collect::<HashSet<_>>();
 
@@ -446,8 +446,8 @@ fn build_graph(
     */
     let soldier_locations = grid.filter_by_val(&Soldier).collect::<Vec<_>>();
 
-    let S = soldier_locations.len();
-    let T = turret_reachable_squares_list.len();
+    let s = soldier_locations.len();
+    let t = turret_reachable_squares_list.len();
 
     for (_soldier_index, soldier_loc) in soldier_locations.iter().enumerate() {
         //debug!("BFS search on soldier {} @ {}", soldier_index, soldier_loc);
@@ -481,7 +481,7 @@ fn build_graph(
 
                     /*debug!("Found s{} t{} mapped to soldier {} => {} at loc {}",
                     soldier_index, turret_index, s_vertex, t_vertex, loc);*/
-                    G.insert((s_vertex, s_mapping.len() + turret_index));
+                    g.insert((s_vertex, s_mapping.len() + turret_index));
                 }
             }
 
@@ -503,14 +503,14 @@ fn build_graph(
                         continue;
                     }
 
-                    let newLocIndex = (new_loc.data[0] * grid.C as i64 + new_loc.data[1]) as usize;
-                    if visited[newLocIndex] {
+                    let new_loc_index = (new_loc.data[0] * grid.C as i64 + new_loc.data[1]) as usize;
+                    if visited[new_loc_index] {
                         continue;
                     }
-                    visited.set(newLocIndex, true);
+                    visited.set(new_loc_index, true);
                     let new_dist = dist + 1;
 
-                    if new_dist > M {
+                    if new_dist > m {
                         continue;
                     }
 
@@ -522,8 +522,8 @@ fn build_graph(
         }
     }
 
-    debug!("Built graph from\n  S={} T={}", S, T);
-    G
+    debug!("Built graph from\n  S={} T={}", s, t);
+    g
 }
 
 /*
diff --git a/codejam_2017/src/y2017round3/a.rs b/codejam_2017/src/y2017round3/a.rs
index e75115a..8b5fe12 100644
--- a/codejam_2017/src/y2017round3/a.rs
+++ b/codejam_2017/src/y2017round3/a.rs
@@ -20,9 +20,9 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let G = reader.read_string();
+                let g = reader.read_string();
 
-                write!(buffer, "{}", solve(case, &G, &mut memo)).unwrap();
+                write!(buffer, "{}", solve(case, &g, &mut memo)).unwrap();
             }
         },
     );
@@ -107,11 +107,11 @@ impl Memo
         }
     }
 }
-fn solve(case_no: u32, G: &str, memo: &mut Memo) -> String
+fn solve(case_no: u32, g: &str, memo: &mut Memo) -> String
 {
     debug!("Solving case {}", case_no);
 
-    let digits = G
+    let digits = g
         .chars()
         .filter_map(|c| c.to_digit(10))
         .map(|d| d as u8)
diff --git a/codejam_2017/src/y2017round3/b.rs b/codejam_2017/src/y2017round3/b.rs
index 323120b..88d40d1 100644
--- a/codejam_2017/src/y2017round3/b.rs
+++ b/codejam_2017/src/y2017round3/b.rs
@@ -22,31 +22,31 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let (F, P) = reader.read_tuple_2();
-                let mut G = DiGraph::new();
-                for f in 1..=F {
-                    G.add_vertex(f);
+                let (f, p) = reader.read_tuple_2();
+                let mut g = DiGraph::new();
+                for f in 1..=f {
+                    g.add_vertex(f);
                 }
-                let P = (0..P)
+                let p = (0..p)
                     .map(|_| {
                         let (f1, f2) = reader.read_tuple_2();
-                        G.add_edge(f1, f2);
+                        g.add_edge(f1, f2);
                         (f1, f2)
                     })
                     .collect::<Vec<_>>();
 
-                write!(buffer, "{}", solve(case, &G, &P, F)).unwrap();
+                write!(buffer, "{}", solve(case, &g, &p, f)).unwrap();
             }
         },
     );
 }
 
-fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
+fn solve(case_no: u32, g: &DiGraph, p: &[(usize, usize)], f: usize) -> String
 {
     debug!("\n\n\nSolving case {}", case_no);
 
     //Create an undirected graph with duplicates when u->v and v-> already exist in P
-    let mut g_undirected = G.clone();
+    let mut g_undirected = g.clone();
     for (u, v) in g_undirected.edges().collect::<Vec<_>>() {
         if g_undirected.has_edge(v, u) && v < u {
             g_undirected.add_edge_dups_ok(v, u);
@@ -58,7 +58,7 @@ fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
 
     debug!(
         "P is\n{:?}\nUndirected Graph is\n{:?}\n",
-        P,
+        p,
         g_undirected.edges().collect::<Vec<_>>(),
     );
 
@@ -66,7 +66,7 @@ fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
 
     let mut bfs_visited = BitSet::new();
 
-    for f in 1..=F {
+    for f in 1..=f {
         if bfs_visited.contains(f) {
             continue;
         }
@@ -74,48 +74,48 @@ fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
         let cc = g_undirected.bfs(f).collect::<Vec<_>>();
         bfs_visited.extend(cc.clone());
 
-        let mut subG = g_undirected.subgraph(&cc);
+        let mut sub_g = g_undirected.subgraph(&cc);
         //for (u, v) in subG.edges().collect::<Vec<_>>() {}
-        debug!("CC {:?}\nsubG {:?}", cc, subG.edges().collect::<Vec<_>>());
+        debug!("CC {:?}\nsubG {:?}", cc, sub_g.edges().collect::<Vec<_>>());
 
         //spanning tree
-        let mut ST = DiGraph::new();
+        let mut st = DiGraph::new();
 
         let mut discovery_order = Vec::new();
 
-        dfs(&mut discovery_order, &mut ST, &subG, cc[0]);
+        dfs(&mut discovery_order, &mut st, &sub_g, cc[0]);
 
-        for st_edge in ST.edges() {
-            subG.remove_undirected_edge(st_edge.0, st_edge.1);
+        for st_edge in st.edges() {
+            sub_g.remove_undirected_edge(st_edge.0, st_edge.1);
         }
 
         debug!(
             "For sub graph {:?} spanning tree is {:?}",
-            subG.edges().collect::<Vec<_>>(),
-            ST.edges().collect::<Vec<_>>()
+            sub_g.edges().collect::<Vec<_>>(),
+            st.edges().collect::<Vec<_>>()
         );
 
         debug!("Discovery order is {:?} ", discovery_order);
 
         //Direct all edges in root-to-leaf direction
-        for subG_edge in subG.edges().collect::<Vec<_>>() {
+        for sub_g_edge in sub_g.edges().collect::<Vec<_>>() {
             let pos1 = discovery_order
                 .iter()
-                .position(|&d| d == subG_edge.0)
+                .position(|&d| d == sub_g_edge.0)
                 .unwrap();
             let pos2 = discovery_order
                 .iter()
-                .position(|&d| d == subG_edge.1)
+                .position(|&d| d == sub_g_edge.1)
                 .unwrap();
 
             if pos1 > pos2 {
-                subG.remove_edge(subG_edge.0, subG_edge.1);
+                sub_g.remove_edge(sub_g_edge.0, sub_g_edge.1);
             }
         }
 
         debug!(
             "For sub graph directed root->leaf {:?}",
-            subG.edges().collect::<Vec<_>>()
+            sub_g.edges().collect::<Vec<_>>()
         );
 
         //root is automatically balanced
@@ -123,15 +123,15 @@ fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
         discovery_order.pop();
 
         for current_node in discovery_order {
-            let tree_children: Vec<_> = ST.edges_from(current_node).collect();
-            let tree_parents: Vec<_> = ST.edges_to(current_node).collect();
+            let tree_children: Vec<_> = st.edges_from(current_node).collect();
+            let tree_parents: Vec<_> = st.edges_to(current_node).collect();
             assert_eq!(tree_parents.len(), 1);
             let tree_parent = tree_parents[0];
 
             let mut balanced_value: i64 = 0;
 
             //These are edges not in the spanning tree that we assign 1 to
-            for v in subG.edges_to(current_node) {
+            for v in sub_g.edges_to(current_node) {
                 //non_tree_edges_ancestor {
                 /*Direct all edges in root-to-leaf direction
                  (we reverse or split edges after solving, as explained above).
@@ -143,7 +143,7 @@ fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
             }
 
             //These are previously seen edges not in the spanning tree that we need to account for
-            for _ in subG.edges_from(current_node) {
+            for _ in sub_g.edges_from(current_node) {
                 //these have already been assigned
                 balanced_value -= 1;
             }
@@ -169,7 +169,7 @@ fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
     }
 
     let mut ans: Vec<i64> = Vec::new();
-    for fe in P {
+    for fe in p {
         if let Some(pos) = edge_values.iter().position(|&e| e.0 == fe.0 && e.1 == fe.1) {
             ans.push(edge_values[pos].2);
             edge_values.remove(pos);
@@ -205,15 +205,15 @@ fn solve(case_no: u32, G: &DiGraph, P: &[(usize, usize)], F: usize) -> String
     )
 }
 
-fn dfs(discovery_order: &mut Vec<usize>, ST: &mut DiGraph, subG: &DiGraph, u: usize)
+fn dfs(discovery_order: &mut Vec<usize>, st: &mut DiGraph, sub_g: &DiGraph, u: usize)
 {
     discovery_order.push(u);
-    for v in subG.edges_from(u) {
-        if !ST.has_vertex(v) {
+    for v in sub_g.edges_from(u) {
+        if !st.has_vertex(v) {
             //root to leaf direction
-            ST.add_edge(u, v);
+            st.add_edge(u, v);
 
-            dfs(discovery_order, ST, subG, v);
+            dfs(discovery_order, st, sub_g, v);
         }
     }
 }
diff --git a/codejam_2017/src/y2017round3/c.rs b/codejam_2017/src/y2017round3/c.rs
index a9eda62..61cb3dd 100644
--- a/codejam_2017/src/y2017round3/c.rs
+++ b/codejam_2017/src/y2017round3/c.rs
@@ -16,13 +16,13 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let C = reader.read_int();
+                let c = reader.read_int();
 
-                let tours = (0..2 * C)
+                let tours = (0..2 * c)
                     .map(|_| reader.read_tuple_3())
                     .collect::<Vec<_>>();
 
-                write!(buffer, "{}", solve(case, C, &tours)).unwrap();
+                write!(buffer, "{}", solve(case, c, &tours)).unwrap();
             }
         },
     );
diff --git a/codejam_2017/src/y2017round3/d.rs b/codejam_2017/src/y2017round3/d.rs
index 0da14f9..bc7f5ed 100644
--- a/codejam_2017/src/y2017round3/d.rs
+++ b/codejam_2017/src/y2017round3/d.rs
@@ -607,7 +607,6 @@ mod test_round3_d
     use super::*;
     use codejam::util::grid::constants::*;
     use codejam::util::grid::Grid;
-    use codejam::util::grid::*;
     use codejam::util::vector_2d::Vector2d;
     use rand::distributions::{Distribution, Uniform};
     use rand::prelude::StdRng;
diff --git a/codejam_2017/src/y2017round4/a.rs b/codejam_2017/src/y2017round4/a.rs
index 80565e4..2d8f2cf 100644
--- a/codejam_2017/src/y2017round4/a.rs
+++ b/codejam_2017/src/y2017round4/a.rs
@@ -228,7 +228,7 @@ impl DfsDice
         return false;
     }
 }
-
+/*
 fn add_value_to_flow(flow: &mut Flow, value_to_add: usize, value_to_dice: &Vec<Vec<usize>>)
 {
     flow.add_edge(flow.source, value_to_add, 1);
@@ -240,7 +240,8 @@ fn add_value_to_flow(flow: &mut Flow, value_to_add: usize, value_to_dice: &Vec<V
 
     //debug_print_flow(flow);
 }
-
+*/
+/*
 fn debug_print_flow(flow: &Flow)
 {
     for (idx, edge) in flow.E.iter().enumerate() {
@@ -259,7 +260,8 @@ fn debug_print_flow(flow: &Flow)
         assert_eq!(flow.E[idx ^ 1].cap, edge.cap);
     }
 }
-
+*/
+/*
 fn remove_value_from_flow(flow: &mut Flow, value_to_remove: usize)
 {
     //assert_eq!(flow.V[interval_start].len(), 1);
@@ -333,8 +335,9 @@ fn remove_value_from_flow(flow: &mut Flow, value_to_remove: usize)
 
     //debug_print_flow(flow);
 }
-
-/// Very elegant DFS solution, a bit slow though ~2 minutes
+*/
+// Very elegant DFS solution, a bit slow though ~2 minutes
+/*
 fn solve4(case_no: u32, dice: &Vec<Vec<i32>>) -> String
 {
     println!("Solving case {}", case_no);
@@ -381,9 +384,9 @@ fn solve4(case_no: u32, dice: &Vec<Vec<i32>>) -> String
 
     format!("Case #{}: {}\n", case_no, ans)
 }
-
-/// My solution, too slow for large, the augment takes too long
-fn solve3(case_no: u32, dice: &Vec<Vec<i32>>) -> String
+*/
+// My solution, too slow for large, the augment takes too long
+/*fn solve3(case_no: u32, dice: &Vec<Vec<i32>>) -> String
 {
     println!("Solving case {}", case_no);
     let mut unique_dice_values: Vec<i32> = Vec::new();
@@ -487,7 +490,8 @@ fn solve3(case_no: u32, dice: &Vec<Vec<i32>>) -> String
 
     format!("Case #{}: {}\n", case_no, ans)
 }
-
+*/
+/*
 fn solve_brute_force(case_no: u32, dice: &Vec<(u32, u16)>) -> String
 {
     let mut all_values = dice.clone();
@@ -536,3 +540,4 @@ fn solve_brute_force(case_no: u32, dice: &Vec<(u32, u16)>) -> String
 
     format!("Case #{}: {}\n", case_no, longest)
 }
+*/
\ No newline at end of file
diff --git a/codejam_2017/src/y2017round4/b.rs b/codejam_2017/src/y2017round4/b.rs
index da0f76f..2ac7eff 100644
--- a/codejam_2017/src/y2017round4/b.rs
+++ b/codejam_2017/src/y2017round4/b.rs
@@ -83,14 +83,14 @@ fn solve(case_no: u32, cards: &Vec<(char, i16)>, s: i16) -> String
             (*op == '+' && val >= &BigRational::zero())
                 || (*op == '-' && val <= &BigRational::zero())
         })
-        .fold(BigRational::zero(), |acc, (op, val)| &acc + val.abs());
+        .fold(BigRational::zero(), |acc, (_op, val)| &acc + val.abs());
 
     let sub_card: BigRational = cards
         .iter()
         .filter(|(op, val)| {
             (*op == '+' && val < &BigRational::zero()) || (*op == '-' && val > &BigRational::zero())
         })
-        .fold(BigRational::zero(), |acc, (op, val)| &acc + val.abs());
+        .fold(BigRational::zero(), |acc, (_op, val)| &acc + val.abs());
 
     let has_mul_zero = cards
         .iter()
diff --git a/codejam_2017/src/y2017round4/c.rs b/codejam_2017/src/y2017round4/c.rs
index d02ca6f..cf34520 100644
--- a/codejam_2017/src/y2017round4/c.rs
+++ b/codejam_2017/src/y2017round4/c.rs
@@ -173,7 +173,7 @@ impl Search
                 continue;
             }
             if !self.mp.contains_key(&cnt) {
-                let mut z: Vec<String> = (0..=v)
+                let z: Vec<String> = (0..=v)
                     .map(|i| {
                         (0..=v)
                             .map(|j| {
diff --git a/codejam_2017/src/y2017round4/e.rs b/codejam_2017/src/y2017round4/e.rs
index 7061a77..3e491ec 100644
--- a/codejam_2017/src/y2017round4/e.rs
+++ b/codejam_2017/src/y2017round4/e.rs
@@ -216,7 +216,7 @@ fn bfs(
 
     return false;
 }
-
+/*
 fn dfs(
     edges: &HashMap<u16, Vec<u16>>,
     visited: &mut HashSet<u16>,
@@ -246,3 +246,4 @@ fn dfs(
 
     found
 }
+*/
\ No newline at end of file
diff --git a/codejam_2017/src/y2017round4/f.rs b/codejam_2017/src/y2017round4/f.rs
index d4855d4..c9a30b2 100644
--- a/codejam_2017/src/y2017round4/f.rs
+++ b/codejam_2017/src/y2017round4/f.rs
@@ -239,191 +239,3 @@ fn solve(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
     Some(1 + max_num_steps as u64)
 }
 
-/// Tests large observation that we only need to calculate U
-/// And validates iterative squaring approach to calculing max U distance per step
-fn solve_small_only_u(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
-{
-    //let mut L: Vec<Vec<i64>> = Vec::new();
-    //let mut U: Vec<Vec<i64>> = Vec::new();
-
-    //let target_distance = dist(home, dest);
-
-    let min_dist_home = teleporters
-        .iter()
-        .fold(i64::MAX, |acc, t| min(acc, dist(&home, t)));
-
-    let min_dist_dest = teleporters
-        .iter()
-        .fold(i64::MAX, |acc, t| min(acc, dist(&dest, t)));
-
-    let max_dist_home = teleporters
-        .iter()
-        .fold(i64::MIN, |acc, t| max(acc, dist(&home, t)));
-
-    let max_dist_dest = teleporters
-        .iter()
-        .fold(i64::MIN, |acc, t| max(acc, dist(&dest, t)));
-
-    let max_dist = max(max_dist_dest, max_dist_home);
-
-    //extra
-    let mut dist_matrix = Vec::new();
-
-    for steps_idx in 0..50 {
-        if (1i64 << steps_idx) > max_dist {
-            break;
-        }
-        dist_matrix.push(vec![vec![-1; teleporters.len()]; teleporters.len()]);
-
-        if steps_idx == 0 {
-            for (t1_idx, t1) in teleporters.iter().enumerate() {
-                for (t2_idx, t2) in teleporters.iter().enumerate() {
-                    dist_matrix[steps_idx][t1_idx][t2_idx] = dist(t1, t2);
-                }
-            }
-        } else {
-            for (t1_idx, _t1) in teleporters.iter().enumerate() {
-                for (t2_idx, _t2) in teleporters.iter().enumerate() {
-                    let mut best = -1;
-                    for (v_idx, _v) in teleporters.iter().enumerate() {
-                        best = max(
-                            best,
-                            dist_matrix[steps_idx - 1][t1_idx][v_idx]
-                                + dist_matrix[steps_idx - 1][v_idx][t2_idx],
-                        );
-                    }
-
-                    dist_matrix[steps_idx][t1_idx][t2_idx] = best;
-
-                    /* println!("Dist matrix {} to {}, step {} = {}",
-                    t1_idx, t2_idx, steps_idx, best); */
-                }
-            }
-        }
-
-        println!(
-            "After step idx {} max is {}",
-            steps_idx,
-            dist_matrix[steps_idx].iter().flatten().max().unwrap()
-        );
-    }
-
-    println!("min. d home {} dest {}", min_dist_home, min_dist_dest);
-
-    let (home, dest) = if min_dist_home > min_dist_dest {
-        (dest, home)
-    } else {
-        (home, dest)
-    };
-
-    for t in teleporters.iter() {
-        //Check if one teleport is enough
-        if dist(home, t) == dist(dest, t) {
-            return Some(1);
-        }
-    }
-
-    let mut initial = Vec::new();
-    for (_t_idx, t) in teleporters.iter().enumerate() {
-        /*println!("Teleporter #{}, dist home: {}",
-        t_idx, dist(home, t));*/
-        initial.push(dist(home, t));
-    }
-
-    let mut l = initial.clone();
-    let mut u = initial.clone();
-
-    /*
-    By definition, Lt,i+1 and Ut,i+1 are the distances from t to its closest and farthest points in Ri, respectively.
-     The farthest point in Ri from t is at a distance which is the maximum over all teleporters u of dist(t, u) + Uu,i
-     (this is the distance to the point on the surface of the sphere centered at u with radius Uu,
-     i that is the opposite direction from t).
-    */
-    for i in 1..10000 {
-        if i < 68 {
-            println!("i {} max is {}", i, u.iter().max().unwrap());
-        }
-
-        let fast_umax = get_longest_path_for_step(&dist_matrix, &initial, i - 1);
-
-        if i > 1 {
-            let fast_umax_all = fast_umax.iter().max().unwrap();
-            let current_umax = u.iter().max().unwrap();
-
-            assert_eq!(*current_umax + 1, *fast_umax_all);
-
-            /*println!("maxes: {} and {}\nU vs fast: {:?} ",
-            fast_umax_all,current_umax, fast_umax.iter().zip(U.iter()).collect::<Vec<_>>());
-            */
-        }
-
-        let mut new_l = Vec::new();
-        let mut new_u = Vec::new();
-
-        for (t_idx, t) in teleporters.iter().enumerate() {
-            if i > 1 {
-                let current_umax = u[t_idx];
-                let fast_umax_t = fast_umax[t_idx];
-                assert_eq!(current_umax, fast_umax_t);
-            }
-
-            if
-            //dist(&dest, t) >= L[t_idx] &&
-            i > 1 && dist(&dest, t) <= u[t_idx] {
-                return Some(i as u64);
-            }
-
-            if teleporters.len() == 1 {
-                return None;
-            }
-
-            /*           println!("Starting iteration #{}, teleporter #{} U[{}] = {}",
-            i, t_idx, t_idx, U[t_idx]);*/
-
-            let mut low = None;
-            let mut high = None;
-            for (u_idx, u) in teleporters.iter().enumerate() {
-                if u_idx == t_idx {
-                    continue;
-                }
-                //Greatest distance from teleporter u + distance of t to u;
-                //this is the furthest one could teleport using teleporter t
-                let maybe_high = u[u_idx] + dist(u, t);
-                if high.is_none() || maybe_high > high.unwrap() {
-                    high = Some(maybe_high);
-                }
-
-                /*
-                                . For each teleporter u we need to consider:
-
-                dist(t, u) - Uu,i if dist(t, u) > Uu,i (t is outside the outer sphere centered at u),
-                Lu,i - dist(t, u) if dist(t, u) < Lu,i (t is inside the inner sphere), or
-                0, in all other cases (t is in between, that is, it is itself a reachable point).
-                */
-
-                let dist_tu = dist(t, u);
-                let maybe_low = if dist_tu > u[u_idx] {
-                    //lowest distance is outside the outer sphere
-                    dist_tu - u[u_idx]
-                } else if dist_tu < l[u_idx] {
-                    //teleport to lower sphere
-                    l[u_idx] - dist_tu
-                } else {
-                    0
-                };
-
-                if low.is_none() || maybe_low < low.unwrap() {
-                    low = Some(maybe_low);
-                }
-            }
-
-            new_l.push(low.unwrap());
-            new_u.push(high.unwrap());
-        }
-
-        mem::swap(&mut l, &mut new_l);
-        mem::swap(&mut u, &mut new_u);
-    }
-
-    None
-}
diff --git a/codejam_2017/src/y2017round4/f_small.rs b/codejam_2017/src/y2017round4/f_small.rs
index b31cdff..447108d 100644
--- a/codejam_2017/src/y2017round4/f_small.rs
+++ b/codejam_2017/src/y2017round4/f_small.rs
@@ -86,3 +86,195 @@ Lu,i - dist(t, u) if dist(t, u) < Lu,i (t is inside the inner sphere), or
 
     None 
 }
+
+
+
+/// Tests large observation that we only need to calculate U
+/// And validates iterative squaring approach to calculing max U distance per step
+
+fn solve_small_only_u(home: &Point, dest: &Point, teleporters: &Vec<Point>) -> Option<u64>
+{
+    //let mut L: Vec<Vec<i64>> = Vec::new();
+    //let mut U: Vec<Vec<i64>> = Vec::new();
+
+    //let target_distance = dist(home, dest);
+
+    let min_dist_home = teleporters
+        .iter()
+        .fold(i64::MAX, |acc, t| min(acc, dist(&home, t)));
+
+    let min_dist_dest = teleporters
+        .iter()
+        .fold(i64::MAX, |acc, t| min(acc, dist(&dest, t)));
+
+    let max_dist_home = teleporters
+        .iter()
+        .fold(i64::MIN, |acc, t| max(acc, dist(&home, t)));
+
+    let max_dist_dest = teleporters
+        .iter()
+        .fold(i64::MIN, |acc, t| max(acc, dist(&dest, t)));
+
+    let max_dist = max(max_dist_dest, max_dist_home);
+
+    //extra
+    let mut dist_matrix = Vec::new();
+
+    for steps_idx in 0..50 {
+        if (1i64 << steps_idx) > max_dist {
+            break;
+        }
+        dist_matrix.push(vec![vec![-1; teleporters.len()]; teleporters.len()]);
+
+        if steps_idx == 0 {
+            for (t1_idx, t1) in teleporters.iter().enumerate() {
+                for (t2_idx, t2) in teleporters.iter().enumerate() {
+                    dist_matrix[steps_idx][t1_idx][t2_idx] = dist(t1, t2);
+                }
+            }
+        } else {
+            for (t1_idx, _t1) in teleporters.iter().enumerate() {
+                for (t2_idx, _t2) in teleporters.iter().enumerate() {
+                    let mut best = -1;
+                    for (v_idx, _v) in teleporters.iter().enumerate() {
+                        best = max(
+                            best,
+                            dist_matrix[steps_idx - 1][t1_idx][v_idx]
+                                + dist_matrix[steps_idx - 1][v_idx][t2_idx],
+                        );
+                    }
+
+                    dist_matrix[steps_idx][t1_idx][t2_idx] = best;
+
+                    /* println!("Dist matrix {} to {}, step {} = {}",
+                    t1_idx, t2_idx, steps_idx, best); */
+                }
+            }
+        }
+
+        println!(
+            "After step idx {} max is {}",
+            steps_idx,
+            dist_matrix[steps_idx].iter().flatten().max().unwrap()
+        );
+    }
+
+    println!("min. d home {} dest {}", min_dist_home, min_dist_dest);
+
+    let (home, dest) = if min_dist_home > min_dist_dest {
+        (dest, home)
+    } else {
+        (home, dest)
+    };
+
+    for t in teleporters.iter() {
+        //Check if one teleport is enough
+        if dist(home, t) == dist(dest, t) {
+            return Some(1);
+        }
+    }
+
+    let mut initial = Vec::new();
+    for (_t_idx, t) in teleporters.iter().enumerate() {
+        /*println!("Teleporter #{}, dist home: {}",
+        t_idx, dist(home, t));*/
+        initial.push(dist(home, t));
+    }
+
+    let mut l = initial.clone();
+    let mut u = initial.clone();
+
+    /*
+    By definition, Lt,i+1 and Ut,i+1 are the distances from t to its closest and farthest points in Ri, respectively.
+     The farthest point in Ri from t is at a distance which is the maximum over all teleporters u of dist(t, u) + Uu,i
+     (this is the distance to the point on the surface of the sphere centered at u with radius Uu,
+     i that is the opposite direction from t).
+    */
+    for i in 1..10000 {
+        if i < 68 {
+            println!("i {} max is {}", i, u.iter().max().unwrap());
+        }
+
+        let fast_umax = get_longest_path_for_step(&dist_matrix, &initial, i - 1);
+
+        if i > 1 {
+            let fast_umax_all = fast_umax.iter().max().unwrap();
+            let current_umax = u.iter().max().unwrap();
+
+            assert_eq!(*current_umax + 1, *fast_umax_all);
+
+            /*println!("maxes: {} and {}\nU vs fast: {:?} ",
+            fast_umax_all,current_umax, fast_umax.iter().zip(U.iter()).collect::<Vec<_>>());
+            */
+        }
+
+        let mut new_l = Vec::new();
+        let mut new_u = Vec::new();
+
+        for (t_idx, t) in teleporters.iter().enumerate() {
+            if i > 1 {
+                let current_umax = u[t_idx];
+                let fast_umax_t = fast_umax[t_idx];
+                assert_eq!(current_umax, fast_umax_t);
+            }
+
+            if
+            //dist(&dest, t) >= L[t_idx] &&
+            i > 1 && dist(&dest, t) <= u[t_idx] {
+                return Some(i as u64);
+            }
+
+            if teleporters.len() == 1 {
+                return None;
+            }
+
+            /*           println!("Starting iteration #{}, teleporter #{} U[{}] = {}",
+            i, t_idx, t_idx, U[t_idx]);*/
+
+            let mut low = None;
+            let mut high = None;
+            for (u_idx, u) in teleporters.iter().enumerate() {
+                if u_idx == t_idx {
+                    continue;
+                }
+                //Greatest distance from teleporter u + distance of t to u;
+                //this is the furthest one could teleport using teleporter t
+                let maybe_high = u[u_idx] + dist(u, t);
+                if high.is_none() || maybe_high > high.unwrap() {
+                    high = Some(maybe_high);
+                }
+
+                /*
+                                . For each teleporter u we need to consider:
+
+                dist(t, u) - Uu,i if dist(t, u) > Uu,i (t is outside the outer sphere centered at u),
+                Lu,i - dist(t, u) if dist(t, u) < Lu,i (t is inside the inner sphere), or
+                0, in all other cases (t is in between, that is, it is itself a reachable point).
+                */
+
+                let dist_tu = dist(t, u);
+                let maybe_low = if dist_tu > u[u_idx] {
+                    //lowest distance is outside the outer sphere
+                    dist_tu - u[u_idx]
+                } else if dist_tu < l[u_idx] {
+                    //teleport to lower sphere
+                    l[u_idx] - dist_tu
+                } else {
+                    0
+                };
+
+                if low.is_none() || maybe_low < low.unwrap() {
+                    low = Some(maybe_low);
+                }
+            }
+
+            new_l.push(low.unwrap());
+            new_u.push(high.unwrap());
+        }
+
+        mem::swap(&mut l, &mut new_l);
+        mem::swap(&mut u, &mut new_u);
+    }
+
+    None
+}

From c7c51f139cd33ad22732f85d519cc7b47b9396e1 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 15:01:22 -0300
Subject: [PATCH 075/122] 2017

---
 codejam/Cargo.lock                 | 198 -----------------------------
 codejam/Cargo.toml                 |  18 +--
 codejam_2017/Cargo.lock            |   9 --
 codejam_2017/src/main.rs           |  12 +-
 codejam_2017/src/y2017round1b/a.rs |   8 +-
 codejam_2017/src/y2017round1b/b.rs |   2 +-
 codejam_2017/src/y2017round1b/c.rs |   4 +-
 codejam_2017/src/y2017round1c/a.rs |   2 +-
 codejam_2017/src/y2017round1c/b.rs |   8 +-
 codejam_2017/src/y2017round1c/c.rs |  10 +-
 codejam_2017/src/y2017round2/a.rs  |   6 +-
 codejam_2017/src/y2017round2/b.rs  |   2 +-
 codejam_2017/src/y2017round2/d.rs  |  27 +---
 codejam_2017/src/y2017round3/c.rs  |   2 +
 codejam_2017/src/y2017round4/a.rs  |   9 +-
 15 files changed, 46 insertions(+), 271 deletions(-)

diff --git a/codejam/Cargo.lock b/codejam/Cargo.lock
index bf2cb72..88e0fb8 100644
--- a/codejam/Cargo.lock
+++ b/codejam/Cargo.lock
@@ -1,32 +1,8 @@
-[[package]]
-name = "alga"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "approx"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "autocfg"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "bimap"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "bit-set"
 version = "0.5.0"
@@ -45,11 +21,6 @@ name = "bitflags"
 version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "byteorder"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "cfg-if"
 version = "0.1.6"
@@ -82,24 +53,6 @@ name = "fuchsia-zircon-sys"
 version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "generic-array"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "hamming"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "indexmap"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "itertools"
 version = "0.8.0"
@@ -113,11 +66,6 @@ name = "libc"
 version = "0.2.45"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "libm"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "log"
 version = "0.4.6"
@@ -126,39 +74,6 @@ dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "matrixmultiply"
-version = "0.1.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "nalgebra"
-version = "0.16.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "alga 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "generic-array 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "num"
-version = "0.1.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-bigint"
 version = "0.2.2"
@@ -168,14 +83,6 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num-complex"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-integer"
 version = "0.1.39"
@@ -184,15 +91,6 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num-iter"
-version = "0.1.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-rational"
 version = "0.2.1"
@@ -208,31 +106,6 @@ name = "num-traits"
 version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "num_cpus"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "permutohedron"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "rand"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "rand"
 version = "0.6.4"
@@ -259,14 +132,6 @@ dependencies = [
  "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "rand_core"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "rand_core"
 version = "0.3.0"
@@ -318,11 +183,6 @@ dependencies = [
  "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "rawpointer"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "rdrand"
 version = "0.4.0"
@@ -331,37 +191,19 @@ dependencies = [
  "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "rulinalg"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "rust-algorithm-problems"
 version = "0.1.0"
 dependencies = [
- "bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "nalgebra 0.16.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "try_opt 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -385,24 +227,6 @@ name = "semver-parser"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "threadpool"
-version = "1.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "try_opt"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "typenum"
-version = "1.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "winapi"
 version = "0.3.6"
@@ -423,56 +247,34 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [metadata]
-"checksum alga 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24bb00eeca59f2986c747b8c2f271d52310ce446be27428fc34705138b155778"
-"checksum approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c57ff1a5b00753647aebbbcf4ea67fa1e711a65ea7a30eb90dbf07de2485aee"
 "checksum autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727"
-"checksum bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6b282b982237078bfac61a948a2198f185aceea8b9a6e794b70b96fd31923d3d"
 "checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a"
 "checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf"
 "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
-"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
 "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
 "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
 "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
 "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
 "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
-"checksum generic-array 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8107dafa78c80c848b71b60133954b4a58609a3a1a5f9af037ecc7f67280f369"
-"checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1"
-"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d"
 "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
 "checksum libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "2d2857ec59fadc0773853c664d2d18e7198e83883e7060b63c924cb077bd5c74"
-"checksum libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "03c0bb6d5ce1b5cc6fd0578ec1cbc18c9d88b5b591a5c7c1d6c6175e266a0819"
 "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
-"checksum matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
-"checksum nalgebra 0.16.13 (registry+https://github.com/rust-lang/crates.io-index)" = "8e0799b53947b9c9048a1537f024f22f54701bbb75274f65955d081a87c0b739"
-"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
 "checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
-"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8"
 "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
-"checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124"
 "checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10"
 "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
-"checksum num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a69d464bdc213aaaff628444e99578ede64e9c854025aa43b9796530afa9238"
-"checksum permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c"
-"checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c"
 "checksum rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3906503e80ac6cbcacb2c2973fa8e473f24d7e2747c8c92bb230c2441cad96b5"
 "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
-"checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372"
 "checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db"
 "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
 "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
 "checksum rand_os 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f46fbd5550acf75b0c2730f5dd1873751daf9beb8f11b44027778fae50d7feca"
 "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05"
 "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
-"checksum rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
 "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-"checksum rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "04ada202c9685e1d72a7420c578e92b358dbf807d3dfabb676a3dab9cc3bb12f"
 "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
 "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
-"checksum try_opt 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d30b71e7ba40551f9873f3ba9f4ee36f16015adf0962aba57caf403088370db1"
-"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
 "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
 "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/codejam/Cargo.toml b/codejam/Cargo.toml
index a62f0e1..1f4525f 100644
--- a/codejam/Cargo.toml
+++ b/codejam/Cargo.toml
@@ -18,19 +18,19 @@ path = "src/main.rs"
 log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
 itertools = "*"
 #num = "*"
-bimap = "0.1"
+# bimap = "0.1"
 bit-vec = "*"
 bit-set = "*"
-threadpool = "*"
-indexmap = "*"
-permutohedron = "*"
+# threadpool = "*"
+# indexmap = "*"
+# permutohedron = "*"
 num-integer = "*"
 num-traits = "*"
 num-bigint = "*"
 num-rational = "*"
 rand = "*"
-try_opt = "*"
-byteorder = "*"
-hamming = "*"
-rulinalg = "*"
-nalgebra = "*"
\ No newline at end of file
+# try_opt = "*"
+# byteorder = "*"
+# hamming = "*"
+# rulinalg = "*"
+# nalgebra = "*"
\ No newline at end of file
diff --git a/codejam_2017/Cargo.lock b/codejam_2017/Cargo.lock
index 5f2dadb..fccd0e9 100644
--- a/codejam_2017/Cargo.lock
+++ b/codejam_2017/Cargo.lock
@@ -367,24 +367,15 @@ dependencies = [
 name = "rust-algorithm-problems"
 version = "0.1.0"
 dependencies = [
- "bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "nalgebra 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
diff --git a/codejam_2017/src/main.rs b/codejam_2017/src/main.rs
index b691b20..d81b564 100644
--- a/codejam_2017/src/main.rs
+++ b/codejam_2017/src/main.rs
@@ -80,10 +80,10 @@ fn main()
     init_log();
 
     //run_y2017_round_qual();
-    run_y2017_round_1a();
-    //run_y2017_round_1b();
-    //run_y2017_round_1c();
-    //run_y2017_round2();
-    //run_y2017_round3();
-    //run_y2017_round4();
+    //run_y2017_round_1a();
+    run_y2017_round_1b();
+    run_y2017_round_1c();
+    run_y2017_round2();
+    run_y2017_round3();
+    run_y2017_round4();
 }
diff --git a/codejam_2017/src/y2017round1b/a.rs b/codejam_2017/src/y2017round1b/a.rs
index 59a19d9..4b7f83a 100644
--- a/codejam_2017/src/y2017round1b/a.rs
+++ b/codejam_2017/src/y2017round1b/a.rs
@@ -18,7 +18,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["A-small-practice", "A-large-practice"],
-        "y2008round1B",
+        "y2017round1b",
         |reader, buffer| {
             let t = reader.read_int();
 
@@ -44,7 +44,7 @@ pub fn solve_all_cases()
 
                 writeln!(
                     buffer,
-                    "Case #{}: {}",
+                    "Case #{}: {:.6}",
                     case_no,
                     solve(input[0] as f64, &mut horse)
                 )
@@ -54,7 +54,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(d: f64, horses: &mut Vec<Horse>) -> String
+fn solve(d: f64, horses: &mut Vec<Horse>) -> f64
 {
     //let mut horses = horses.clone();
 
@@ -96,5 +96,5 @@ fn solve(d: f64, horses: &mut Vec<Horse>) -> String
         hs, hs.velocity, min_v
     );
 
-    format!("{:.6}\n", min_v)
+    min_v
 }
diff --git a/codejam_2017/src/y2017round1b/b.rs b/codejam_2017/src/y2017round1b/b.rs
index de8b4f9..e03e451 100644
--- a/codejam_2017/src/y2017round1b/b.rs
+++ b/codejam_2017/src/y2017round1b/b.rs
@@ -16,7 +16,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["B-small-practice", "B-large-practice"],
-        "y2008round1B",
+        "y2017round1b",
         |reader, buffer| {
             let t = reader.read_int();
 
diff --git a/codejam_2017/src/y2017round1b/c.rs b/codejam_2017/src/y2017round1b/c.rs
index 7286029..a68d881 100644
--- a/codejam_2017/src/y2017round1b/c.rs
+++ b/codejam_2017/src/y2017round1b/c.rs
@@ -21,7 +21,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["C-small-practice", "C-large-practice"],
-        "y2008round1b",
+        "y2017round1b",
         |reader, buffer| {
             let t = reader.read_int();
 
@@ -119,7 +119,7 @@ fn solve(
 ) -> String
 {
     format!(
-        "{}\n",
+        "{}",
         queries
             .iter()
             .map(|q| solve_query(horses, city_dist, q.0 - 1, q.1 - 1))
diff --git a/codejam_2017/src/y2017round1c/a.rs b/codejam_2017/src/y2017round1c/a.rs
index f96fb27..15c8644 100644
--- a/codejam_2017/src/y2017round1c/a.rs
+++ b/codejam_2017/src/y2017round1c/a.rs
@@ -22,7 +22,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["A-small-practice", "A-large-practice"],
-        "y2008round1c",
+        "y2017round1c",
         |reader, buffer| {
             let t = reader.read_int();
 
diff --git a/codejam_2017/src/y2017round1c/b.rs b/codejam_2017/src/y2017round1c/b.rs
index 9d7981c..340e979 100644
--- a/codejam_2017/src/y2017round1c/b.rs
+++ b/codejam_2017/src/y2017round1c/b.rs
@@ -20,7 +20,7 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["B-small-practice", "B-large-practice"],
-        "y2008round1c",
+        "y2017round1c",
         |reader, buffer| {
             let t = reader.read_int();
 
@@ -37,14 +37,14 @@ pub fn solve_all_cases()
         }
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&fixed)).unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&fixed)).unwrap();
             }
         },
     );
 
 }
 
-fn solve(fixed: &[Option<Parent>]) -> String
+fn solve(fixed: &[Option<Parent>]) -> u16
 {
     //From alkjash python solution
 
@@ -80,5 +80,5 @@ fn solve(fixed: &[Option<Parent>]) -> String
         ans += 1;
     }
 
-    format!("{}", ans)
+    ans
 }
diff --git a/codejam_2017/src/y2017round1c/c.rs b/codejam_2017/src/y2017round1c/c.rs
index d7b0a8b..c869732 100644
--- a/codejam_2017/src/y2017round1c/c.rs
+++ b/codejam_2017/src/y2017round1c/c.rs
@@ -12,8 +12,8 @@ probability of success of at least K independent events
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice", "C-large-practice"],
-        "y2008round1c",
+        &["C-small-practice-1", "C-small-practice-2", ],
+        "y2017round1c",
         |reader, buffer| {
             let t = reader.read_int();
 
@@ -24,7 +24,7 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {:0>3}", case_no, solve(&mut p, u, k)).unwrap();
+                writeln!(buffer, "Case #{}: {:.9}", case_no, solve(&mut p, u, k)).unwrap();
             }
         },
     );
@@ -79,7 +79,7 @@ fn prob1()
     println!("Prob 12 heads of 18 coins: {:.5}", p);
 }
 
-fn solve(prob: &mut Vec<f64>, u: f64, k: u8) -> String
+fn solve(prob: &mut Vec<f64>, u: f64, k: u8) -> f64
 {
     prob.sort_by(|&a, &b| a.partial_cmp(&b).unwrap());
 
@@ -141,5 +141,5 @@ fn solve(prob: &mut Vec<f64>, u: f64, k: u8) -> String
         }
     }
 
-    format!("{:.9}\n", best_ans)
+    best_ans
 }
diff --git a/codejam_2017/src/y2017round2/a.rs b/codejam_2017/src/y2017round2/a.rs
index ef06d81..547ad02 100644
--- a/codejam_2017/src/y2017round2/a.rs
+++ b/codejam_2017/src/y2017round2/a.rs
@@ -24,13 +24,13 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {:.6}", case_no, solve(&mut g, p)).unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&mut g, p)).unwrap();
             }
         },
     );
 }
 
-fn solve(g: &mut Vec<usize>, p: usize) -> String
+fn solve(g: &mut Vec<usize>, p: usize) -> i32
 {
     for g in g.iter_mut() {
         *g %= p;
@@ -79,5 +79,5 @@ fn solve(g: &mut Vec<usize>, p: usize) -> String
         }
     }
 
-    format!("{}\n", groups_happy)
+     groups_happy
 }
diff --git a/codejam_2017/src/y2017round2/b.rs b/codejam_2017/src/y2017round2/b.rs
index 9e2aa50..e91f603 100644
--- a/codejam_2017/src/y2017round2/b.rs
+++ b/codejam_2017/src/y2017round2/b.rs
@@ -14,7 +14,7 @@ pub fn solve_all_cases()
 
     run_cases(
         &["B-small-practice", "B-large-practice"],
-        "y2008round2",
+        "y2017round2",
         |reader, buffer| {
             let t = reader.read_int();
 
diff --git a/codejam_2017/src/y2017round2/d.rs b/codejam_2017/src/y2017round2/d.rs
index 721f35b..58dee0a 100644
--- a/codejam_2017/src/y2017round2/d.rs
+++ b/codejam_2017/src/y2017round2/d.rs
@@ -32,10 +32,6 @@ pub fn solve_all_cases()
         &["D-small-practice", "D-large-practice"],
         "y2017round2",
         |reader, buffer| {
-            //let mut children: Vec<thread::JoinHandle<_>> = vec![];
-            let pool = ThreadPool::new(6);
-
-            let (tx, rx) = channel();
 
             let t = reader.read_int();
 
@@ -49,29 +45,10 @@ pub fn solve_all_cases()
                     }
                 }
 
-                let tx = tx.clone();
-                pool.execute(move || {
-                    let now = Instant::now();
-                    let _ = writeln!(::std::io::stderr(), "Starting {} of {} ", case, t);
-                    let s = solve(case, &mut grid, m);
-                    tx.send((case, s)).expect("Channel is there");
-
-                    let duration = now.elapsed();
-                    let secs = duration.as_secs() as f64 + duration.subsec_nanos() as f64 / 1e9f64;
-                    let _ = writeln!(
-                        ::std::io::stderr(),
-                        "Finished #{} in {:.2} second(s)",
-                        case,
-                        secs
-                    );
-                });
-            }
-
-            let mut output = rx.iter().take(t as usize).collect::<Vec<_>>();
-            output.sort();
-            for (_, s) in output {
+                let s = solve(case, &mut grid, m);
                 write!(buffer, "{}", s).unwrap();
             }
+
         },
     );
 }
diff --git a/codejam_2017/src/y2017round3/c.rs b/codejam_2017/src/y2017round3/c.rs
index 61cb3dd..e6d2adf 100644
--- a/codejam_2017/src/y2017round3/c.rs
+++ b/codejam_2017/src/y2017round3/c.rs
@@ -51,12 +51,14 @@ impl Camp
             - tours[self.arrivals[arrival_idx]].duration % 24)
             % 24
     }
+    /*
     fn is_free(&self, tours: &[Tour]) -> bool
     {
         let p1 = self.wait_time(0, 0, &tours) + self.wait_time(1, 1, &tours);
         let p2 = self.wait_time(0, 1, &tours) + self.wait_time(1, 0, &tours);
         p1 == p2
     }
+    */
 }
 fn solve(case_no: u32, c: usize, tour_input: &[(usize, usize, usize)]) -> String
 {
diff --git a/codejam_2017/src/y2017round4/a.rs b/codejam_2017/src/y2017round4/a.rs
index 2d8f2cf..80e567b 100644
--- a/codejam_2017/src/y2017round4/a.rs
+++ b/codejam_2017/src/y2017round4/a.rs
@@ -62,9 +62,9 @@ pub fn solve_all_cases()
 
 const STACK_SIZE: usize = 40 * 1024 * 1024;
 
-const NUM_DICE_VALUES: usize = 6;
+//const NUM_DICE_VALUES: usize = 6;
 const MAX_DICE_VALUE: usize = 1_000_000;
-const MAX_N_DICE: usize = 50_000;
+//const MAX_N_DICE: usize = 50_000;
 
 const INVALID_MATCH_I32: i32 = -1;
 
@@ -189,8 +189,9 @@ fn solve(case_no: u32, dice: &Vec<Vec<i32>>) -> String
     format!("Case #{}: {}\n", case_no, ans)
 }
 
-const INVALID_MATCH: usize = usize::MAX - 1;
+//const INVALID_MATCH: usize = usize::MAX - 1;
 
+/*
 struct DfsDice
 {
     //vis[dice value] = true if already visited
@@ -228,6 +229,8 @@ impl DfsDice
         return false;
     }
 }
+*/
+
 /*
 fn add_value_to_flow(flow: &mut Flow, value_to_add: usize, value_to_dice: &Vec<Vec<usize>>)
 {

From 61d0119ee05e51ab04f1c5fecc865afe9ebd3b2f Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 15:33:38 -0300
Subject: [PATCH 076/122] 2017

---
 codejam_2017/src/main.rs          |  6 +++---
 codejam_2017/src/y2017qual/d.rs   |  4 ++--
 codejam_2017/src/y2017round2/d.rs | 29 +++++++++++++++--------------
 codejam_2017/src/y2017round4/a.rs |  3 ---
 codejam_2017/src/y2017round4/b.rs |  8 ++++----
 codejam_2017/src/y2017round4/d.rs |  2 +-
 codejam_2017/src/y2017round4/e.rs |  2 +-
 7 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/codejam_2017/src/main.rs b/codejam_2017/src/main.rs
index d81b564..e8f03bd 100644
--- a/codejam_2017/src/main.rs
+++ b/codejam_2017/src/main.rs
@@ -81,9 +81,9 @@ fn main()
 
     //run_y2017_round_qual();
     //run_y2017_round_1a();
-    run_y2017_round_1b();
-    run_y2017_round_1c();
-    run_y2017_round2();
+    //run_y2017_round_1b();
+    //run_y2017_round_1c();
+    //run_y2017_round2();
     run_y2017_round3();
     run_y2017_round4();
 }
diff --git a/codejam_2017/src/y2017qual/d.rs b/codejam_2017/src/y2017qual/d.rs
index ef352bd..1587105 100644
--- a/codejam_2017/src/y2017qual/d.rs
+++ b/codejam_2017/src/y2017qual/d.rs
@@ -246,11 +246,11 @@ impl Board
                 "After processing row {}.  Placed at {},{}",
                 index, min_row, min_col
             );
-            self.print_board(&board, is_rooks);
+            //self.print_board(&board, is_rooks);
         }
 
         piece_array
     }
 }
 
-include!("d_debug.rs");
+//include!("d_debug.rs");
diff --git a/codejam_2017/src/y2017round2/d.rs b/codejam_2017/src/y2017round2/d.rs
index 58dee0a..41c4a31 100644
--- a/codejam_2017/src/y2017round2/d.rs
+++ b/codejam_2017/src/y2017round2/d.rs
@@ -22,9 +22,6 @@ use std::default::Default;
 use std::fmt;
 use std::fmt::{Display, Formatter};
 use std::io::Write;
-use std::sync::mpsc::channel;
-use std::time::Instant;
-use threadpool::ThreadPool;
 
 pub fn solve_all_cases()
 {
@@ -172,11 +169,15 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, m_soldier_limit: usize) -> Str
         .map(|t_loc| reachable(&grid, &t_loc))
         .collect::<Vec<_>>();
 
+    debug!("Turret locations {:?}", turret_locations);
+
     let t_map = turret_locations
         .into_iter()
         .enumerate()
         .collect::<BiMap<_, _>>();
 
+
+
     let s = grid.filter_by_val(&Soldier).count();
     let t = grid.filter_by_val(&Turret).count();
 
@@ -304,18 +305,18 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, m_soldier_limit: usize) -> Str
         let st_prime = g_prime.iter().find(|&(_s, t)| !turrets_in_m.contains(t));
 
         if st_prime.is_some() {
-            let &(s, t) = st_prime.unwrap();
-            debug!("Found (s,t') s={} t'={}", s, t - s);
-            ans += &format!("{} {}\n", s + 1, t - s + 1);
+            let &(ss, tt) = st_prime.unwrap();
+            debug!("Found (s,t') s={} t'={}", ss, tt - s);
+            ans += &format!("{} {}\n", ss + 1, tt - s + 1);
 
-            grid[s_map.get_by_left(&s).unwrap()] = Empty;
-            grid[t_map.get_by_left(&(t - s)).unwrap()] = Empty;
+            grid[s_map.get_by_left(&ss).unwrap()] = Empty;
+            grid[t_map.get_by_left(&(tt - s)).unwrap()] = Empty;
             r -= 1;
 
             //Also remove from current matching
             let to_remove = m
                 .iter()
-                .position(|&(s_in_m, _t)| s_in_m == s)
+                .position(|&(s_in_m, _t)| s_in_m == ss)
                 .expect("Soldier should be in mapping");
             m.remove(to_remove);
 
@@ -386,12 +387,12 @@ fn solve<'a>(case_no: u32, grid: &mut Grid<Tile>, m_soldier_limit: usize) -> Str
             .iter()
             .filter(|&uv| g_prime.contains(uv))
             .collect::<Vec<_>>();
-        for &&(s, t) in st_actions.iter() {
-            debug!("Taking actions from g' s {} t {}", s + 1, t + 1 - s);
-            ans += &format!("{} {}\n", s + 1, t - s + 1);
+        for &&(ss, tt) in st_actions.iter() {
+            debug!("Taking actions from g' s {} t {}", ss + 1, tt + 1 - s);
+            ans += &format!("{} {}\n", ss + 1, tt - s + 1);
 
-            grid[s_map.get_by_left(&s).unwrap()] = Empty;
-            grid[t_map.get_by_left(&(t - s)).unwrap()] = Empty;
+            grid[s_map.get_by_left(&ss).unwrap()] = Empty;
+            grid[t_map.get_by_left(&(tt - s)).unwrap()] = Empty;
 
             r -= 1;
         }
diff --git a/codejam_2017/src/y2017round4/a.rs b/codejam_2017/src/y2017round4/a.rs
index 80e567b..5993363 100644
--- a/codejam_2017/src/y2017round4/a.rs
+++ b/codejam_2017/src/y2017round4/a.rs
@@ -1,11 +1,8 @@
 
 use bit_vec::BitVec;
-use codejam::algo::graph::flow2::Flow;
 use codejam::util::codejam::run_cases;
 use std::cmp::max;
-use std::collections::HashSet;
 use std::io::Write;
-use std::mem;
 use std::usize;
 
 use std::thread;
diff --git a/codejam_2017/src/y2017round4/b.rs b/codejam_2017/src/y2017round4/b.rs
index 2ac7eff..d694301 100644
--- a/codejam_2017/src/y2017round4/b.rs
+++ b/codejam_2017/src/y2017round4/b.rs
@@ -115,12 +115,12 @@ fn solve(case_no: u32, cards: &Vec<(char, i16)>, s: i16) -> String
     let mul_pos_card: BigRational = cards
         .iter()
         .filter(|(op, val)| *op == '*' && val > &BigRational::zero())
-        .fold(BigRational::one(), |acc, (op, val)| &acc * val);
+        .fold(BigRational::one(), |acc, (_op, val)| &acc * val);
 
     let div_pos_card: BigRational = cards
         .iter()
         .filter(|(op, val)| *op == '/' && val > &BigRational::zero())
-        .fold(BigRational::one(), |acc, (op, val)| &acc * val);
+        .fold(BigRational::one(), |acc, (_op, val)| &acc * val);
 
     cards.clear();
 
@@ -139,7 +139,7 @@ fn solve(case_no: u32, cards: &Vec<(char, i16)>, s: i16) -> String
         let mul_neg_val: BigRational = neg_mul_cards
             .iter()
             .skip(2)
-            .fold(BigRational::one(), |acc, (op, val)| &acc * val);
+            .fold(BigRational::one(), |acc, (_op, val)| &acc * val);
         cards.push(('*', mul_neg_val));
     }
 
@@ -158,7 +158,7 @@ fn solve(case_no: u32, cards: &Vec<(char, i16)>, s: i16) -> String
         let div_neg_val: BigRational = neg_div_cards
             .iter()
             .skip(2)
-            .fold(BigRational::one(), |acc, (op, val)| &acc * val);
+            .fold(BigRational::one(), |acc, (_op, val)| &acc * val);
         cards.push(('/', div_neg_val));
     }
 
diff --git a/codejam_2017/src/y2017round4/d.rs b/codejam_2017/src/y2017round4/d.rs
index ed82065..bd485d2 100644
--- a/codejam_2017/src/y2017round4/d.rs
+++ b/codejam_2017/src/y2017round4/d.rs
@@ -3,7 +3,7 @@ use codejam::util::codejam::run_cases;
 use num_bigint::BigInt;
 use num_traits::*;
 use rand::prelude::{ StdRng};
-use rand::{Rng, SeedableRng};
+use rand::{SeedableRng};
 use rand::seq::SliceRandom;
 use std::io::Write;
 
diff --git a/codejam_2017/src/y2017round4/e.rs b/codejam_2017/src/y2017round4/e.rs
index 3e491ec..0b76a62 100644
--- a/codejam_2017/src/y2017round4/e.rs
+++ b/codejam_2017/src/y2017round4/e.rs
@@ -37,7 +37,7 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case in 1..=t {
-                let (n, c) = reader.read_tuple_2::<usize>();
+                let (_n, c) = reader.read_tuple_2::<usize>();
                 let stack_indexes = reader.read_num_line::<usize>();
                 let stacks = stack_indexes
                     .iter()

From 878d3be7a1b40f646a0c61a23b1712d4fd8cf291 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 16:32:30 -0300
Subject: [PATCH 077/122] 2017

---
 codejam/Cargo.lock      | 22 ------------------
 codejam/Cargo.toml      | 19 +---------------
 codejam/src/main.rs     | 50 -----------------------------------------
 codejam_2017/Cargo.lock |  2 --
 4 files changed, 1 insertion(+), 92 deletions(-)
 delete mode 100644 codejam/src/main.rs

diff --git a/codejam/Cargo.lock b/codejam/Cargo.lock
index 88e0fb8..cf43ff7 100644
--- a/codejam/Cargo.lock
+++ b/codejam/Cargo.lock
@@ -3,14 +3,6 @@ name = "autocfg"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "bit-set"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "bit-vec"
 version = "0.5.0"
@@ -91,16 +83,6 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num-rational"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-traits"
 version = "0.2.6"
@@ -195,13 +177,11 @@ dependencies = [
 name = "rust-algorithm-problems"
 version = "0.1.0"
 dependencies = [
- "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -248,7 +228,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [metadata]
 "checksum autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727"
-"checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a"
 "checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf"
 "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
 "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
@@ -261,7 +240,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
 "checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
 "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
-"checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10"
 "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
 "checksum rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3906503e80ac6cbcacb2c2973fa8e473f24d7e2747c8c92bb230c2441cad96b5"
 "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
diff --git a/codejam/Cargo.toml b/codejam/Cargo.toml
index 1f4525f..f50651f 100644
--- a/codejam/Cargo.toml
+++ b/codejam/Cargo.toml
@@ -8,29 +8,12 @@ edition = "2018"
 name = "codejam"
 path = "src/lib.rs"
 
-[[bin]]
-name = "rust-algorithm-problems"
-path = "src/main.rs"
-
 # See https://github.com/alexcrichton/cargo-vendor if overrides are wanted
 [dependencies]
-#log4rs ="*"
 log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
 itertools = "*"
-#num = "*"
-# bimap = "0.1"
 bit-vec = "*"
-bit-set = "*"
-# threadpool = "*"
-# indexmap = "*"
-# permutohedron = "*"
 num-integer = "*"
 num-traits = "*"
 num-bigint = "*"
-num-rational = "*"
-rand = "*"
-# try_opt = "*"
-# byteorder = "*"
-# hamming = "*"
-# rulinalg = "*"
-# nalgebra = "*"
\ No newline at end of file
+rand = "*"
\ No newline at end of file
diff --git a/codejam/src/main.rs b/codejam/src/main.rs
deleted file mode 100644
index d9ef79a..0000000
--- a/codejam/src/main.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-#![allow(dead_code)]
-#![allow(non_snake_case)]
-//#![warn(clippy::all)]
-//#![allow(warnings)]
-//use self::y2017qual::d::solve_all_cases;
-//use self::y2017round1B::c::solve_all_cases;
-//use self::y2017round1C::a::solve_all_cases;
-//use self::y2017round1C::c::solve_all_cases;
-//use self::y2017round3;
-//use self::y2017round3::d::solve_all_cases;
-//use self::y2017round3::d::test_round3_d::*;
-
-mod util;
-
-mod algo;
-/*mod y2017qual;
-mod y2017round1A;
-mod y2017round1B;
-mod y2017round1C;*/
-
-mod y2017round2;
-mod y2017round3;
-mod y2017round4;
-
-#[macro_use]
-extern crate log;
-#[macro_use]
-extern crate try_opt;
-//extern crate log4rs;
-extern crate rand;
-
-//mod algo_ebtech;
-
-use self::util::log::init_log;
-
-fn main()
-{
-    init_log();
-    //y2017round2::c::solve_all_cases();
-    // y2017round2::d::solve_all_cases();
-
-    /*y2017round3::a::solve_all_cases();
-    y2017round3::b::solve_all_cases();
-    y2017round3::c::solve_all_cases();
-    y2017round3::d::solve_all_cases();*/
-
-    y2017round4::f::solve_all_cases();
-
-    //y2016qual::d::solve_all_cases();
-}
diff --git a/codejam_2017/Cargo.lock b/codejam_2017/Cargo.lock
index fccd0e9..4f51db7 100644
--- a/codejam_2017/Cargo.lock
+++ b/codejam_2017/Cargo.lock
@@ -367,13 +367,11 @@ dependencies = [
 name = "rust-algorithm-problems"
 version = "0.1.0"
 dependencies = [
- "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]

From bd67f69348cf766e499a2c50635ef4d197b01448 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 17:10:21 -0300
Subject: [PATCH 078/122] a

---
 codejam_2008/Cargo.lock             | 177 ----------------------------
 codejam_2008/src/main.rs            |   9 +-
 codejam_2008/src/y2008round3/a.rs   | 112 ++++++++++++++++++
 codejam_2008/src/y2008round3/mod.rs |   4 +
 4 files changed, 124 insertions(+), 178 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/a.rs
 create mode 100644 codejam_2008/src/y2008round3/mod.rs

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index d1855da..9769c82 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -1,32 +1,8 @@
-[[package]]
-name = "alga"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "approx"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "autocfg"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "bimap"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "bit-set"
 version = "0.5.0"
@@ -45,11 +21,6 @@ name = "bitflags"
 version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "byteorder"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "cfg-if"
 version = "0.1.6"
@@ -93,14 +64,6 @@ name = "fuchsia-cprng"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "generic-array"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "hamming"
 version = "0.1.3"
@@ -116,11 +79,6 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "indexmap"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "itertools"
 version = "0.7.11"
@@ -142,11 +100,6 @@ name = "libc"
 version = "0.2.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "libm"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "log"
 version = "0.4.6"
@@ -163,29 +116,6 @@ dependencies = [
  "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "matrixmultiply"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "nalgebra"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "alga 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "matrixmultiply 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "ndarray"
 version = "0.11.2"
@@ -197,16 +127,6 @@ dependencies = [
  "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num"
-version = "0.1.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-bigint"
 version = "0.2.2"
@@ -224,14 +144,6 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num-complex"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-integer"
 version = "0.1.39"
@@ -240,25 +152,6 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num-iter"
-version = "0.1.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "num-rational"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-traits"
 version = "0.1.43"
@@ -272,19 +165,6 @@ name = "num-traits"
 version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "num_cpus"
-version = "1.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "permutohedron"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "primal"
 version = "0.2.3"
@@ -436,37 +316,17 @@ dependencies = [
  "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "rulinalg"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "rust-algorithm-problems"
 version = "0.1.0"
 dependencies = [
- "bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "nalgebra 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -500,24 +360,6 @@ name = "superslice"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "threadpool"
-version = "1.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "try_opt"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "typenum"
-version = "1.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "winapi"
 version = "0.3.6"
@@ -538,43 +380,28 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [metadata]
-"checksum alga 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "104e81d8a5813ac86ef14f6bef070d81de6da950c51648a8df8fe877f9316189"
-"checksum approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c57ff1a5b00753647aebbbcf4ea67fa1e711a65ea7a30eb90dbf07de2485aee"
 "checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
-"checksum bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6b282b982237078bfac61a948a2198f185aceea8b9a6e794b70b96fd31923d3d"
 "checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a"
 "checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf"
 "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
-"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
 "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
 "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
 "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
 "checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
 "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
-"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592"
 "checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1"
 "checksum hungarian 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8470cba62a9b94b38a7fe45eb3ae3261b9b9b72d055a917b53fef9a2a3667ba7"
-"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d"
 "checksum itertools 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0d47946d458e94a1b7bcabbf6521ea7c037062c81f534615abcad76e84d4970d"
 "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
 "checksum libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)" = "e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047"
-"checksum libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "03c0bb6d5ce1b5cc6fd0578ec1cbc18c9d88b5b591a5c7c1d6c6175e266a0819"
 "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
 "checksum matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
-"checksum matrixmultiply 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dcfed72d871629daa12b25af198f110e8095d7650f5f4c61c5bac28364604f9b"
-"checksum nalgebra 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f75ff2a99063281e23bc062bed0144a9c1f627f4ac00b060b378276d7cff1d83"
 "checksum ndarray 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0e3d24c5ba54015d7d5203ca6f00d4cc16c71042bf7f7be26f091236f390a16a"
-"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
 "checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
 "checksum num-complex 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
-"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8"
 "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
-"checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124"
-"checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10"
 "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
 "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
-"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba"
-"checksum permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c"
 "checksum primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0e31b86efadeaeb1235452171a66689682783149a6249ff334a2c5d8218d00a4"
 "checksum primal-bit 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "686a64e2f50194c64942992af5799e6b6e8775b8f88c607d72ed0a2fd58b9b21"
 "checksum primal-check 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8e65f96c0a171f887198c274392c99a116ef65aa7f53f3b6d4902f493965c2d1"
@@ -592,15 +419,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
 "checksum rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
 "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-"checksum rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "04ada202c9685e1d72a7420c578e92b358dbf807d3dfabb676a3dab9cc3bb12f"
 "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
 "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 "checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be"
 "checksum superslice 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab16ced94dbd8a46c82fd81e3ed9a8727dac2977ea869d217bcc4ea1f122e81f"
-"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
-"checksum try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e282c6497867d439f3454cebee548f5961d2787c72c1b7b96481d7f0a3e5bc0"
-"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
 "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
 "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 6c7d195..b446083 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -7,6 +7,7 @@ mod y2008round1a;
 mod y2008round1b;
 mod y2008round1c;
 mod y2008round2;
+mod y2008round3;
 
 extern crate codejam;
 
@@ -76,13 +77,19 @@ pub fn run_y2008_round2()
     y2008round2::a::solve_all_cases();
     y2008round2::b::solve_all_cases();
     y2008round2::c::solve_all_cases();
+    y2008round2::d::solve_all_cases();
+}
+
+pub fn run_y2008_round3()
+{
+
 }
 
 fn main()
 {
     init_log();
+    y2008round3::a::solve_all_cases();
 
-    y2008round2::d::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round3/a.rs b/codejam_2008/src/y2008round3/a.rs
new file mode 100644
index 0000000..297e6fc
--- /dev/null
+++ b/codejam_2008/src/y2008round3/a.rs
@@ -0,0 +1,112 @@
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use codejam::util::grid::constants::*;
+use codejam::util::vector_2d::Vector2d;
+
+/*
+Polygons
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let l = reader.read_int();
+
+                let mut path: Vec<(Vec<char>, u32)> = Vec::new();
+
+                while path.len() < l {
+                    path.extend( reader.read_string_line().chunks_exact(2).map( |ins| {
+                        let steps = &ins[0];
+                        let repeat = &ins[1];
+                        (steps.chars().collect(), repeat.parse().unwrap())
+                    }
+                    ));
+                }
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(path.as_slice())
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+const GRID_WIDTH : usize = 6100;
+const COORD_OFFSET : i32= 3001;
+
+const directions : [Vector2d<i64>;4] = [NORTH, EAST, SOUTH, WEST];
+
+fn solve(path: &[(Vec<char>, u32)]) -> u32
+{
+    let mut col_rng : Vec< [i32;2] > = vec![ [i32::MAX, i32::MIN]; GRID_WIDTH];
+    let mut row_rng : Vec< [i32;2] > = vec![ [i32::MAX, i32::MIN]; GRID_WIDTH];
+
+    let mut  head:usize = 0;
+
+    for (i, (s, t)) in path.iter().enumerate()
+        {
+            let len = s.len();
+            for rep in 0..t  {
+                for ch in s.iter() {
+                match *ch
+                {
+                     'L' => {
+                         head = (directions.len() + head - 1) % directions.len();
+                     }
+                     'R' => {
+                         head = (head + 1) % directions.len();
+                     }
+                    'F':
+                    {
+                        pnt nxt = cur + del[head];
+                        int idx;
+                        switch(head)
+                        {
+                            case 0:
+                            case 2:
+                            idx = min(cur.real(), nxt.real());
+                            col_rng[idx].first = min(col_rng[idx].first, cur.imag());
+                            col_rng[idx].second = max(col_rng[idx].second, cur.imag());
+                            break;
+                            case 1:
+                            case 3:
+                            idx = min(cur.imag(), nxt.imag());
+                            row_rng[idx].first = min(row_rng[idx].first, cur.real());
+                            row_rng[idx].second = max(row_rng[idx].second, cur.real());
+                            break;
+                        }
+                        area += imag(conj(cur) * nxt);
+                        cur = nxt;
+                    }
+                }
+            }
+        }
+        }
+        assert(cur == pnt(0, 0));
+
+        int ans = 0;
+        for (int i = -3001; i <= 3001; i++)
+            for (int j = -3001; j <= 3001; j++)
+                if ((j >= row_rng[i].first && j < row_rng[i].second)
+                    || (i >= col_rng[j].first && i < col_rng[j].second))
+                    ans++;
+        ans -= llabs(area / 2);
+        printf("Case #%d: %d\n", cas + 1, ans);
+    }
+    5
+}
diff --git a/codejam_2008/src/y2008round3/mod.rs b/codejam_2008/src/y2008round3/mod.rs
new file mode 100644
index 0000000..05ff2b7
--- /dev/null
+++ b/codejam_2008/src/y2008round3/mod.rs
@@ -0,0 +1,4 @@
+pub mod a;
+/*pub mod b;
+pub mod c;
+pub mod d; */

From 591c3b9a5abed4608b0043b92fd67a03c5cb0ab7 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 19:55:54 -0300
Subject: [PATCH 079/122] a

---
 codejam_2008/src/main.rs                      |   1 -
 .../src/y2008round3/A-large-practice.in       | 551 ++++++++++++++++++
 .../src/y2008round3/A-large-practice.out      |  81 +++
 .../src/y2008round3/A-small-practice.in       | 233 ++++++++
 .../src/y2008round3/A-small-practice.out      |  70 +++
 codejam_2008/src/y2008round3/a.rs             | 128 ++--
 6 files changed, 1000 insertions(+), 64 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008round3/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008round3/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008round3/A-small-practice.out

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index b446083..21ece61 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -90,7 +90,6 @@ fn main()
     init_log();
     y2008round3::a::solve_all_cases();
 
-
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
     run_y2008_round_beta();*/
diff --git a/codejam_2008/src/y2008round3/A-large-practice.in b/codejam_2008/src/y2008round3/A-large-practice.in
new file mode 100644
index 0000000..edf8567
--- /dev/null
+++ b/codejam_2008/src/y2008round3/A-large-practice.in
@@ -0,0 +1,551 @@
+81
+58
+FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFFFFFFF 4 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 6 R 1
+FFFFFFFF 8 R 1 FFFFFFFF 4 L 1 FFFFFFFF 2 L 1 FFFFFRFLFLFRFF 4 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 6 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 8 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFFFFFF 2 R 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 12 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 R 1
+704
+L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 2 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 F 45 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 25 L 1 F 30 L 1
+F 35 R 1 FFFFFL 1 F 15 R 1 FFFFFR 1 F 30 L 1 FFFFFR 1 F 20 R 1 FFFFFL 1 F 15 R 1 FFFFFL 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1
+FFFFFFFFFFR 1 F 15 L 1 FFFFFFFFFFR 1 F 50 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1
+FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 20 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1
+FFFFFR 1 FFFFFL 1 FFFFFFFFFFL 2 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 15 L 1 FFFFFFFFFFR 2 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 2 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 2 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 2 FFFFFL 2 FFFFFR 1 F 20 R 1 FFFFFFFFFFL 1 FFFFFL 1 F 15 L 1 FFFFFR 1
+FFFFFL 1 F 15 L 1 FFFFFR 1 F 15 R 1 FFFFFL 2 FFFFFFFFFFR 2 FFFFFL 1 F 20 L 1 FFFFFR 2 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 2 FFFFFFFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 F 30 R 1 FFFFFL 2 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 15 R 1 FFFFFFFFFFL 1 FFFFFL 1
+FFFFFR 1 F 30 L 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 20 L 1 FFFFFR 2 FFFFFL 1 F 15 R 1 FFFFFL 2 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 25 R 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 20 L 1 FFFFFR 1 F 15 R 1 F 30 R 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 25 R 1 FFFFFL 1 F 20 R 1 FFFFFL 1
+F 15 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 F 45 L 1 FFFFFR 1 F 15 R 1 FFFFFL 1 F 15 R 1
+FFFFFL 1 F 30 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1 F 70 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 15 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 25 R 1
+F 30 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 45 L 1 FFFFFR 1 F 15 L 1 FFFFFL 1 F 20 L 1 FFFFFR 1 F 145 R 1 FFFFFL 1 F 20 L 1 FFFFFL 1
+F 15 R 1 FFFFFL 1 F 35 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 15 R 1 F 20 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 2 FFFFFL 1 FFFFFR 1 FFFFFL 1
+F 75 R 1 F 15 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 2 FFFFFFFFFFR 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 40
+R 1 FFFFFL 1 F 20 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFR 1 F 20 L 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1
+FFFFFL 1 F 40 R 1 FFFFFL 1 FFFFFR 1 F 20 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFR 1 FFFFFL 1
+FFFFFFFFFFR 1 FFFFFL 2 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 20 L 1 FFFFFL 1 F 15 R 1 FFFFFL 2 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1
+FFFFFR 1 F 15 L 1 FFFFFR 2 FFFFFL 1 FFFFFFFFFFR 1 F 15 L 1 FFFFFR 2 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 F 20 L 1 FFFFFL 1 FFFFFFFFFFR 1
+F 15 L 1 FFFFFR 1 F 15 L 1 FFFFFR 1 F 20 L 1 FFFFFL 1 F 35 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 2 FFFFFL 1 FFFFFR 2 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1
+FFFFFFFFFFL 1 FFFFFFFFFFR 1 F 35 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 25 R 1 FFFFFR 1 FFFFFL 1 F 15 L 1 FFFFFR 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 F 20
+L 1 FFFFFR 1 FFFFFFFFFFL 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 45 L 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 F 15 L 1 FFFFFL 1 F 15 R 1
+FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 25 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 25 L 1 FFFFFR 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 20
+R 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 F 15 L 1 F 15 L 1 F 20 R 1 FFFFFR 1 F 65 R 1 FFFFFL 1 F 15 R 1 FFFFFL 1 F 15 R 1 FFFFFL 1
+F 25 R 1 F 80 R 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFL 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1 F 35 R 1 FFFFFL 1
+FFFFFFFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFL 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1 F 15 R 1 F 20 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 15 L 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 F 20 R 1 FFFFFL 1 F 15 L 1 F 30 R 1 FFFFFL 1 F 15 R 1 FFFFFL 1 F 15 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 80 L 1
+FFFFFR 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 F 15 R 1 FFFFFL 1 F 15 R 1 F 125 L 1 FFFFFL 1 F 115 R 1 FFFFFFFFFFR 1 F 75 L 1 FFFFFL 1
+F 70 R 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 45 L 1 FFFFFL 1 F 45 R 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 FFFFFR 2 FFFFFL 1 F 40 L 1 FFFFFR 1 F 35 L 1 FFFFFL 1
+F 70 R 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 F 195 R 1 FFFFFR 1 F 80 L 1 FFFFFL 1 F 85 R 1 FFFFFR 1 F 60 L 1 FFFFFL 1 F 65
+R 1 FFFFFL 1 FFFFFR 2 F 55 L 1 FFFFFL 1 F 65 R 1 FFFFFL 1 FFFFFFFFFFR 2 F 80 L 1 FFFFFL 1 F 80 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 F 110 L 1
+FFFFFL 1 F 110 R 1 FFFFFL 1 FFFFFFFFFFR 1 F 15 R 1 F 85 L 1 FFFFFL 1 F 80 R 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 2 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1
+FFFFFR 1 FFFFFL 1 FFFFFR 2 F 30 R 1 FFFFFL 1 F 15 R 1 FFFFFL 1 F 105 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 F 30 L 1 FFFFFR 1 F 35
+R 1 FFFFFFFFFFL 1 F 15 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 2 FFFFFR 1 F 25 R 1 F 20 R 1 F 25 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 15 R 1 FFFFFL 1
+F 25 L 1 FFFFFR 1 FFFFFL 1
+32
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 L 1 FFFFFFFF 3 L 1 FFFFFFFF 3 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFFFRFLFLFRFF 3 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 R 1 FFLFRFFRFRFLFLFFLFRFFF 3 L 1 FFFFFLFRFRFLFF 2 R 1 FFFFFLFRFRFLFF 3 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 5 L 1 FFRFLFFLFLFRFRFFRFLFFF 1 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1
+60
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 13 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 13 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 26 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 13 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 26 L 1 FFLFRFFRFRFLFLFFLFRFFF 13 R 1 FFRFLFFLFLFRFRFFRFLFFF 13 L 1 FFFFFRFLFLFRFF 13 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 13 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 13 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 26 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 13 L 1 FFRFLFFLFLFRFRFFRFLFFF 13 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 13 L 1 FFFFFFFF 26 R 1 FFFFFRFLFLFRFF 13 L 1 FFFFFFFF 26 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 13 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 26 L 1 FFFFFRFLFLFRFF 13 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 26 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 13 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 13 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 13 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 13 L 1 FFLFRFFRFRFLFLFFLFRFFF 13 R 1 FFFFFFFF 13 R 1 FFFFFRFLFLFRFF 26 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 13 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 13 L 1
+161
+R 1 F 103 R 1 F 103 L 1 F 103 R 1 F 103 L 1 F 103 R 1 F 515 L 1 F 206 R 1 F 103 L 1 F 206 L 1 F 206
+L 1 F 309 R 1 F 309 R 1 F 103 R 1 F 103 L 1 F 309 R 1 F 103 L 1 F 309 R 1 F 1030 R 1 F 103 L 1 F 309
+R 1 F 103 L 1 F 103 R 1 F 309 R 1 F 206 L 1 F 206 R 1 F 103 R 1 F 103 L 1 F 103 R 1 F 206 L 1 F 103
+L 1 F 1030 R 1 F 206 L 1 F 206 L 1 F 309 L 1 F 103 R 1 F 103 L 1 F 206 R 1 F 103 L 1 F 206 R 1 F 206
+L 1 F 412 R 1 F 103 R 1 F 927 R 1 F 103 R 1 F 103 L 1 F 103 L 1 F 103 R 1 F 103 L 1 F 103 L 1 F 206
+R 1 F 309 R 1 F 412 L 1 F 103 R 1 F 103 R 1 F 309 L 1 F 206 L 1 F 309 R 1 F 515 R 1 F 309 L 1 F 206
+R 1 F 206 L 1 F 103 R 1 F 103 R 1 F 103 L 1 F 103 R 1 F 618 L 1 F 206 R 1 F 206 L 1 F 309 L 1 F 412
+L 1 F 412 R 1 F 515 L 1 F 103 R 1 F 103 R 1 F 103 L 1 F 103 R 1 F 103 L 1 F 103 R 1 F 103 L 1 F 103
+R 1
+10
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 10 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 8 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 16 L 1 FFFFFFFF 8 L 1 FFFFFFFF 6 R 1
+12
+FLFFLFRFRFFRFFLFFLFLFRFR 900 FL 2 F 13 FLFFLFRFRFFRFFLFFLFLFRFR 1499 FLFFLFRFRFFRFFLFFLFLFRF 1 F 13 L 1 F 13 FLFFLFRFRFFRFFLFFLFLFRFR 393 F 620 L 1 F 633
+10
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 5 R 1 FFFFFFFF 4 R 1 FFFFFRFLFLFRFF 8 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 4 R 1 FFFFFRFLFLFRFF 3 L 1
+32
+FFFFFRFLFLFRFF 3 L 1 FFFFFFFF 3 L 1 FFRFLFFLFLFRFRFFRFLFFF 3 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFFFFFF 3 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 R 1 FFFFFFFF 3 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1
+FFFFFFFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 5 L 1 FFFFFFFF 1 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFFFLFRFRFLFF 2 R 1
+161
+L 1 F 202 R 1 F 303 L 1 F 101 L 1 F 101 R 1 F 404 L 1 F 303 L 1 F 202 R 1 F 101 R 1 F 101 L 1 F 101
+R 1 F 101 R 1 F 101 L 1 F 101 L 1 F 909 L 1 F 101 L 1 F 404 R 1 F 202 L 1 F 202 R 1 F 101 L 1 F 202
+R 1 F 101 L 1 F 101 R 1 F 303 R 1 F 202 R 1 F 202 L 1 F 1010 R 1 F 101 R 1 F 202 L 1 F 101 R 1 F 101
+L 1 F 101 L 1 F 202 R 1 F 202 L 1 F 303 L 1 F 101 R 1 F 101 L 1 F 303 R 1 F 101 L 1 F 1010 L 1 F 303
+R 1 F 101 L 1 F 303 R 1 F 101 L 1 F 101 L 1 F 303 L 1 F 303 R 1 F 202 R 1 F 202 R 1 F 101 L 1 F 202
+R 1 F 505 L 1 F 101 R 1 F 101 L 1 F 101 R 1 F 101 L 1 F 101 L 1 F 101 R 1 F 101 L 1 F 101 R 1 F 101
+L 1 F 101 R 1 F 101 L 1 F 101 L 1 F 101 R 1 F 505 L 1 F 404 R 1 F 404 R 1 F 303 R 1 F 202 L 1 F 202
+R 1 F 606 L 1 F 101 R 1 F 101 L 1 F 101 L 1 F 101 R 1 F 202 L 1 F 202 R 1 F 303 L 1 F 505 L 1 F 303
+R 1
+60
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 9 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 9 L 1 FFLFRFFRFRFLFLFFLFRFFF 18 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 9 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 18 L 1 FFFFFFFF 9 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 9 L 1 FFFFFLFRFRFLFF 9 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 9 L 1 FFFFFLFRFRFLFF 9 R 1
+FFFFFLFRFRFLFF 18 R 1 FFRFLFFLFLFRFRFFRFLFFF 9 L 1 FFFFFLFRFRFLFF 9 R 1 FFRFLFFLFLFRFRFFRFLFFF 9 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 18 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 9 L 1 FFRFLFFLFLFRFRFFRFLFFF 18 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 9 R 1 FFRFLFFLFLFRFRFFRFLFFF 18 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 9 R 1
+FFLFRFFRFRFLFLFFLFRFFF 18 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 9 R 1 FFFFFFFF 9 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 9 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 9 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 9 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 9 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 18 L 1 FFFFFRFLFLFRFF 9 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 9 L 1
+917
+L 1 FFFFR 1 F 16 R 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1
+FFFFR 1 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 20 L 1 FFFFFFFFR 1 F 16 L 1
+F 16 R 1 F 12 R 1 F 16 L 1 FFFFL 1 FFFFFFFFR 1 FFFFR 1 FFFFL 2 F 44 L 1 F 12 R 1 F 48 R 1 FFFFR 1 F 12 L 1 F 12
+R 1 FFFFR 1 F 12 L 1 F 24 L 1 FFFFFFFFL 1 FFFFR 2 F 44 L 1 FFFFFFFFL 1 F 68 R 1 FFFFR 1 F 24 L 1 FFFFFFFFR 2 FFFFFFFFL 1 F 36 L 1
+FFFFR 1 FFFFL 1 FFFFR 1 F 28 L 1 F 20 L 1 F 44 L 1 F 20 R 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 F 12 R 1 FFFFFFFFL 1
+F 28 R 1 FFFFR 1 F 20 L 1 FFFFR 1 FFFFFFFFL 1 FFFFR 1 F 20 R 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 F 48 L 1 FFFFFFFFL 1 F 28 R 1 FFFFL 1 F 96
+R 1 FFFFFFFFL 1 FFFFL 1 F 12 L 1 F 16 R 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFL 2 FFFFFFFFR 1 FFFFL 2 FFFFFFFFR 1 FFFFR 1
+F 16 L 1 FFFFL 1 FFFFFFFFR 1 FFFFR 1 FFFFFFFFL 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 F 20 L 1 FFFFL 1 FFFFR 1 F 12 R 1 F 12 R 1 F 16 L 1 F 12
+R 1 FFFFR 1 F 20 L 1 F 16 L 1 FFFFR 2 F 20 L 1 F 12 R 1 F 12 R 1 F 12 R 1 FFFFL 1 F 12 R 1 F 16 L 1
+FFFFFFFFL 1 F 24 L 1 FFFFFFFFR 1 FFFFL 1 F 28 L 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFFFFFR 1 F 12 L 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFL 2
+FFFFFFFFR 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 2 F 12 R 1 FFFFL 1 FFFFFFFFR 1 FFFFR 1 F 28 R 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1
+F 12 R 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFR 1 F 12 L 1 FFFFR 1 F 12 L 1 F 16 L 1
+F 12 L 1 FFFFR 1 FFFFFFFFL 1 FFFFFFFFR 1 F 16 L 1 FFFFR 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 2 FFFFFFFFR 1 FFFFL 1 FFFFFFFFL 1 F 12 L 1 F 16
+R 1 FFFFL 1 F 16 L 1 FFFFFFFFR 2 FFFFR 1 FFFFL 1 FFFFFFFFR 1 F 36 L 1 FFFFR 2 FFFFL 1 F 12 R 1 FFFFFFFFR 1 FFFFR 1 FFFFL 1 FFFFFFFFL 1 F 12 L 1
+FFFFR 1 FFFFFFFFL 1 FFFFFFFFR 1 F 48 L 1 FFFFFFFFL 1 FFFFFFFFR 1 FFFFL 2 FFFFR 1 FFFFFFFFR 2 FFFFL 2 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 2 FFFFR 1 FFFFL 1 FFFFFFFFR 1 F 16 L 1
+F 12 R 1 FFFFR 1 F 12 L 1 FFFFFFFFR 1 FFFFR 1 FFFFFFFFL 1 F 12 L 1 FFFFFFFFL 1 FFFFR 2 FFFFL 1 FFFFFFFFR 1 FFFFR 1 FFFFFFFFL 1 FFFFR 2 FFFFL 1 FFFFFFFFL 1 F 12
+R 1 FFFFR 1 F 28 L 1 F 12 L 1 FFFFL 1 FFFFR 2 FFFFFFFFL 1 FFFFL 1 FFFFR 1 F 12 L 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1
+FFFFL 1 FFFFR 1 FFFFL 2 F 16 R 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFR 2 FFFFL 1 F 12 R 1 FFFFR 1 F 16 L 1 FFFFFFFFR 1 FFFFL 2 F 12 R 1 FFFFR 1
+FFFFL 2 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 12 L 1 FFFFFFFFR 1 FFFFL 1 FFFFR 2 FFFFFFFFR 1 FFFFL 1 FFFFFFFFR 1 F 20 R 1 FFFFL 1
+FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFL 1 F 12 R 1 FFFFL 2 F 12 R 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 12
+R 1 FFFFL 1 F 32 L 1 F 20 R 1 FFFFL 2 FFFFFFFFR 1 F 12 L 1 FFFFR 1 F 16 R 1 FFFFL 1 F 12 L 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1
+FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 2 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 F 12 L 1 FFFFFFFFR 1 FFFFR 1
+F 12 L 1 F 12 L 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 20 R 1 F 20 L 1 FFFFR 1
+FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 2 F 16 L 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1
+FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 12 R 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFR 1 F 16 L 1 F 12 L 1 FFFFR 2 F 16 R 1 FFFFR 1 FFFFL 1
+F 12 L 1 F 28 R 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 16 L 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFL 1
+F 16 R 1 FFFFL 1 F 60 R 1 FFFFR 1 FFFFFFFFL 1 FFFFR 1 F 12 L 1 FFFFR 1 FFFFL 1 FFFFR 1 F 12 L 1 FFFFFFFFR 2 FFFFFFFFL 1 F 12 R 1 FFFFFFFFR 1
+FFFFFFFFL 1 FFFFL 1 F 24 L 1 F 12 R 1 FFFFR 1 F 12 L 1 FFFFFFFFR 1 FFFFL 2 F 16 R 1 FFFFL 2 F 28 R 1 FFFFFFFFR 1 F 36 R 1 FFFFFFFFL 2
+F 12 L 1 F 88 R 1 FFFFR 1 F 88 L 1 FFFFR 1 F 16 L 1 FFFFL 1 F 76 R 1 FFFFR 1 F 76 L 1 FFFFL 1 F 76 R 1 FFFFR 1
+F 76 L 1 FFFFL 1 F 76 R 1 FFFFR 1 F 76 L 1 FFFFL 1 F 76 R 1 FFFFR 1 F 76 L 1 FFFFL 1 FFFFFFFFR 1 F 20 L 1 FFFFR 1 FFFFL 2
+FFFFFFFFR 1 F 16 R 1 FFFFR 1 FFFFFFFFL 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFFFFFR 1 F 16 L 1 FFFFFFFFR 1 F 12 L 1 FFFFL 1 FFFFFFFFR 1
+F 56 L 1 F 12 R 1 F 12 R 1 FFFFFFFFL 1 F 40 R 1 FFFFR 1 FFFFL 1 F 16 L 1 F 16 R 1 FFFFR 1 F 16 L 1 FFFFL 1 F 16
+R 1 FFFFR 1 F 16 L 1 FFFFR 1 FFFFFFFFR 1 F 32 L 1 F 28 L 1 FFFFFFFFR 1 F 64 L 1 F 16 L 1 F 12 L 1 FFFFFFFFR 1 F 16 R 1
+FFFFFFFFL 1 F 24 R 1 FFFFR 1 F 32 L 1 F 16 L 1 F 16 L 1 F 12 R 1 FFFFFFFFR 1 F 12 L 1 F 12 R 1 F 12 L 1 FFFFFFFFL 1
+FFFFFFFFR 1 FFFFR 1 FFFFFFFFL 1 F 16 L 1 F 12 L 1 F 12 R 1 FFFFL 1 FFFFR 2 F 28 R 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFL 1 FFFFR 2 FFFFL 2 F 24 L 1
+FFFFR 2 FFFFL 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 24 L 1 FFFFFFFFL 1 FFFFR 1
+FFFFL 1 FFFFR 2 FFFFL 1 F 32 L 1 F 32 L 1 F 24 L 1 F 24 L 1 F 16 L 1 F 16 L 1 FFFFFFFFL 1 FFFFL 1 FFFFR 1 FFFFFFFFR 2 F 16
+R 1 F 16 R 1 F 24 R 1 F 24 R 1 F 36 R 1 F 36 R 1 F 48 R 1 F 40 L 1 FFFFR 1 FFFFL 1 F 12 L 1 F 20
+R 1 FFFFL 1 F 32 R 1 F 12 R 1 FFFFFFFFR 1 FFFFFFFFL 1 F 32 L 1 FFFFFFFFL 1 F 16 R 1 FFFFFFFFL 1 F 12 R 1 FFFFL 1 F 12 R 1 FFFFFFFFL 1
+FFFFL 1 F 60 L 1 FFFFFFFFR 2 FFFFFFFFL 1 F 40 L 1 FFFFL 1 F 24 R 1 FFFFR 1 F 32 R 1 F 12 L 1 F 24 R 1 FFFFL 1 F 100 R 1
+FFFFR 1 F 44 L 1 FFFFFFFFR 1 F 24 L 1 FFFFFFFFL 1 F 40 R 1 FFFFR 1 FFFFFFFFL 2 F 24 L 1 F 24 R 1 FFFFR 1 FFFFL 1 F 12 R 1 FFFFR 1
+F 12 L 1 FFFFL 1 FFFFR 1 F 12 L 1 FFFFR 2 F 32 L 1 FFFFL 1 F 40 R 1 FFFFR 1 F 48 R 1 FFFFL 1 FFFFR 1 FFFFL 1 F 40 R 1
+FFFFR 1 F 40 L 1 FFFFFFFFL 1 F 36 R 1 F 12 L 1 F 16 R 1 FFFFFFFFL 1 F 12 L 1 F 40 L 1 F 36 R 1 FFFFL 1 F 16 R 1
+F 12 L 1 FFFFFFFFR 1 FFFFR 1 F 24 L 1 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 F 16 L 1 F 28 R 1 FFFFR 1 F 28 L 1 F 12 R 1 F 32
+L 1 F 20 R 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1
+FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 F 16 R 1 FFFFL 1
+32
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1 FFFFFFFF 3 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFFFLFRFRFLFF 3 R 1 FFFFFFFF 1 L 1 FFFFFLFRFRFLFF 3 R 1 FFFFFLFRFRFLFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFFFLFRFRFLFF 3 R 1 FFFFFRFLFLFRFF 5 R 1 FFFFFRFLFLFRFF 1 L 1 FFFFFRFLFLFRFF 2 R 1 FFFFFLFRFRFLFF 2 L 1
+60
+FFFFFRFLFLFRFF 19 R 1 FFFFFRFLFLFRFF 19 L 1 FFFFFRFLFLFRFF 38 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 19 R 1 FFFFFFFF 38 L 1 FFFFFFFF 19 R 1 FFRFLFFLFLFRFRFFRFLFFF 19 L 1 FFFFFFFF 19 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 19 L 1 FFFFFFFF 19 R 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 38 R 1 FFFFFRFLFLFRFF 19 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 19 R 1 FFRFLFFLFLFRFRFFRFLFFF 19 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 38 R 1 FFFFFRFLFLFRFF 19 L 1 FFFFFFFF 38 R 1 FFRFLFFLFLFRFRFFRFLFFF 19 R 1 FFFFFLFRFRFLFF 38 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 19 R 1
+FFFFFFFF 38 L 1 FFFFFRFLFLFRFF 19 R 1 FFFFFFFF 19 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 19 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 19 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 19 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 19 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 38 L 1 FFFFFFFF 19 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 19 L 1
+60
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 15 R 1 FFFFFFFF 15 L 1 FFFFFFFF 30 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 15 R 1 FFRFLFFLFLFRFRFFRFLFFF 30 L 1 FFFFFRFLFLFRFF 15 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 15 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 15 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 15 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 15 R 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 30 R 1 FFFFFFFF 15 L 1 FFFFFRFLFLFRFF 15 R 1 FFFFFFFF 15 L 1 FFLFRFFRFRFLFLFFLFRFFF 30 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 15 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 30 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 15 R 1 FFRFLFFLFLFRFRFFRFLFFF 30 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 15 R 1
+FFFFFLFRFRFLFF 30 L 1 FFFFFFFF 15 R 1 FFLFRFFRFRFLFLFFLFRFFF 15 L 1 FFLFRFFRFRFLFLFFLFRFFF 15 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 15 L 1 FFRFLFFLFLFRFRFFRFLFFF 15 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 15 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 30 L 1 FFFFFRFLFLFRFF 15 R 1 FFRFLFFLFLFRFRFFRFLFFF 15 L 1
+12
+FRFFRFLFLFFLFFRFFRFRFLFL 900 FR 2 F 13 FRFFRFLFLFFLFFRFFRFRFLFL 1499 FRFFRFLFLFFLFFRFFRFRFLF 1 F 13 R 1 F 13 FRFFRFLFLFFLFFRFFRFRFLFL 313 F 860 R 1 F 873
+58
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFFFFFF 2 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 4 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 R 1
+FFFFFLFRFRFLFF 8 R 1 FFLFRFFRFRFLFLFFLFRFFF 4 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFFFFLFRFRFLFF 4 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFFFFFF 6 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 8 L 1 FFFFFLFRFRFLFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 L 1 FFFFFRFLFLFRFF 2 L 1 FFFFFRFLFLFRFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 R 1 FFRFLFFLFLFRFRFFRFLFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 12 R 1
+58
+FFFFFRFLFLFRFF 2 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFFFFRFLFLFRFF 4 L 1 FFLFRFFRFRFLFLFFLFRFFF 4 L 1 FFRFLFFLFLFRFRFFRFLFFF 6 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 L 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 8 L 1 FFFFFRFLFLFRFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFFFRFLFLFRFF 4 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 L 1 FFFFFFFF 8 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFFFFLFRFRFLFF 2 L 1
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 12 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFFFFLFRFRFLFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 L 1 FFFFFRFLFLFRFF 4 L 1 FFFFFFFF 12 L 1
+56
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 R 1 FFFFFLFRFRFLFF 3 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFLFRFFRFRFLFLFFLFRFFF 1 R 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 1 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 R 1 FFFFFRFLFLFRFF 3 L 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1
+FFFFFRFLFLFRFF 1 R 1 FFFFFLFRFRFLFF 1 L 1 FFFFFLFRFRFLFF 6 R 1 FFFFFFFF 1 R 1 FFFFFLFRFRFLFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 R 1 FFFFFRFLFLFRFF 1 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 L 1 FFFFFFFF 2 L 1
+FFRFLFFLFLFRFRFFRFLFFF 7 R 1 FFRFLFFLFLFRFRFFRFLFFF 1 R 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFFFFRFLFLFRFF 1 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFFFLFRFRFLFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1
+10
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 10 L 1 FFLFRFFRFRFLFLFFLFRFFF 8 L 1 FFRFLFFLFLFRFRFFRFLFFF 16 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 8 L 1 FFLFRFFRFRFLFLFFLFRFFF 6 R 1
+789
+R 1 FFR 1 FFFFFFFFL 1 FFR 1 F 44 L 1 FFL 1 F 44 R 1 FFFFFFR 1 FFFFR 1 FFFFL 1 F 18 L 1 FFFFL 1 F 14 R 1 FFR 1 FFL 1 FFFFFFFFR 1
+FFR 1 FFL 1 FFFFR 1 FFFFFFL 1 FFL 1 FFFFFFR 1 F 12 R 1 FFR 1 FFFFL 2 FFFFFFR 1 FFFFL 2 FFFFR 1 FFFFFFL 1 FFR 1 FFL 1 FFR 1 FFFFFFL 1 FFR 1 FFFFL 1
+FFL 1 F 30 R 1 FFL 1 FFFFFFFFR 1 FFR 1 FFFFL 1 FFFFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFFFL 1 FFFFR 1 FFFFFFFFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1
+F 14 R 1 FFFFFFR 1 FFL 2 FFFFFFFFL 1 FFL 1 FFR 1 FFFFFFR 1 FFFFFFFFL 1 FFFFL 1 FFR 1 FFL 1 FFFFR 1 FFL 1 FFFFFFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1
+FFR 1 FFL 1 FFFFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFFFFFFFR 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1
+FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFL 1 FFR 1 FFL 1 FFFFR 1 FFFFL 1 FFR 2 FFFFL 1 FFR 1 FFL 1 FFR 1 FFFFFFR 1 FFFFFFL 1 FFL 1 FFFFR 1 FFFFFFL 1 FFR 1 FFL 1 FFR 1
+FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFFFL 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFFFFFR 1 FFL 1
+FFFFFFFFL 1 FFR 1 FFFFFFL 1 FFFFR 1 FFR 1 FFL 1 FFFFFFFFFFR 1 F 16 R 1 FFL 1 FFFFFFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFFFFFR 1 FFR 1 FFL 1 FFFFFFR 1
+FFR 1 FFFFL 1 FFFFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFFFFFFFFFL 1 FFFFR 1 FFL 1 FFFFL 1 FFL 1 FFR 1 FFL 1 FFFFR 1 FFFFFFR 1 FFL 1
+FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFFFR 1 FFR 1 FFL 2 FFFFFFR 1 FFR 1 FFL 1 FFFFR 1 FFFFFFFFL 1 FFL 1 FFFFFFR 1 FFL 2 FFR 1 FFFFL 1 FFR 1
+FFL 1 FFFFFFFFR 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFFFFFL 1 FFR 2 FFFFL 1 FFL 1 FFR 2 FFFFFFR 1 F 14
+L 1 FFL 1 FFFFFFR 1 FFFFR 1 FFL 2 FFR 1 FFFFL 1 FFL 1 FFFFR 1 FFL 2 FFR 1 FFFFR 1 FFFFFFR 1 FFFFL 1 FFL 1 FFFFR 1 FFFFFFL 1 FFL 1 FFFFFFR 1 FFFFFFFFL 1
+FFFFR 1 FFL 1 FFR 2 FFL 1 FFR 1 FFL 1 FFR 2 FFL 1 FFFFL 2 FFR 2 FFL 1 FFFFR 2 F 24 L 1 FFFFR 1 FFFFL 1 FFR 1 FFFFFFR 1 FFFFR 1 FFL 2
+FFFFL 1 FFFFFFR 1 FFL 2 FFR 1 F 18 L 1 FFFFR 1 FFL 2 FFFFL 1 FFFFR 1 FFFFFFFFR 1 FFL 1 FFFFFFFFR 1 FFFFFFR 1 FFFFR 1 FFL 1 FFFFL 1 FFL 1 FFR 1 FFL 1
+FFR 1 FFL 1 FFR 1 FFFFL 1 FFR 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFR 1 FFFFFFR 1 FFFFFFFFR 1 FFFFFFL 1 FFR 1 FFFFFFL 1 FFR 1 FFFFL 1 FFR 1 FFL 1 FFR 1 FFL 1
+FFR 1 FFL 1 FFR 1 FFL 2 FFFFFFR 1 FFL 1 FFFFR 1 FFL 1 F 14 L 1 FFL 1 FFFFR 1 FFL 1 FFFFFFR 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1
+FFR 1 FFL 1 FFR 1 FFFFL 1 FFFFR 1 FFR 1 FFL 1 FFFFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFFFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 F 14 R 1
+FFL 1 FFFFR 1 F 12 R 1 FFFFR 1 FFFFFFFFL 1 FFFFFFR 1 FFL 1 FFFFFFL 2 FFFFFFR 1 FFFFFFFFFFL 1 FFL 1 FFR 1 FFFFFFFFR 1 FFFFFFFFFFL 1 FFL 1 FFFFFFR 1 FFFFFFFFL 1 FFFFFFL 2 FFR 2
+FFFFFFFFFFR 1 FFL 1 FFFFR 1 FFR 1 FFFFL 1 FFL 1 FFFFR 1 FFR 1 FFFFFFFFL 1 FFL 1 FFFFR 1 FFR 1 FFL 1 FFFFR 1 FFR 1 FFL 1 FFFFR 1 FFL 1 FFR 1 FFL 2
+FFFFR 1 FFL 2 FFFFFFFFR 1 FFFFFFR 1 FFR 1 FFFFL 1 F 48 R 1 FFL 1 F 14 R 1 FFFFR 1 F 24 R 1 FFL 1 FFFFR 1 FFL 1 FFFFFFFFFFL 1 FFR 1 FFFFL 1
+FFR 1 FFFFFFFFFFL 1 FFL 1 F 14 R 1 FFFFL 1 FFFFFFR 1 FFL 1 FFFFR 1 FFL 1 FFFFR 1 FFL 2 FFFFFFFFFFR 1 F 22 R 1 FFFFFFFFFFR 1 F 14 L 1 FFR 1 FFL 1
+FFR 1 F 18 R 1 FFFFL 2 FFFFR 1 F 12 L 1 FFL 1 F 34 R 1 FFFFR 1 F 22 L 1 FFL 1 FFR 1 FFFFR 1 F 12 R 1 FFFFFFL 1 FFL 1
+FFFFFFR 1 FFFFFFL 1 FFL 1 F 24 L 1 FFFFFFR 1 F 22 R 1 FFR 1 FFL 2 FFFFR 1 FFR 1 FFFFFFFFL 1 FFFFFFL 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFR 1 FFFFFFFFFFR 1 FFL 1 FFR 1
+FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFFFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1
+FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFFFR 1 FFL 1 FFR 1 FFL 1 FFFFFFFFL 1 FFFFL 1 FFFFFFFFR 1 FFL 1 FFR 1 FFL 1 FFFFL 1 FFR 1 FFL 1 FFR 1 FFL 1
+FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFFFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1
+FFL 1 FFR 1 FFL 1 FFFFFFFFFFR 1 FFL 1 F 12 R 1 FFR 1 F 12 L 1 FFL 1 FFFFFFFFR 1 FFR 1 FFFFFFFFL 2 FFFFFFR 1 F 14 L 1 FFL 1 F 14 R 1
+FFFFFFFFR 1 FFFFL 1 FFR 1 FFL 1 FFFFR 1 F 12 L 1 FFL 1 FFFFR 1 FFFFFFL 1 FFFFFFFFR 1 FFL 1 F 18 R 1 F 20 R 1 FFFFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFFFL 1
+F 18 R 1 FFFFR 1 F 20 L 1 FFL 1 F 20 R 1 FFL 1 FFR 1 FFL 1 F 24 L 1 FFL 1 F 20 R 1 FFR 1 F 16 L 1 FFL 1
+FFR 1 FFFFFFL 1 FFR 2 FFFFFFL 1 FFL 1 FFFFFFR 1 FFL 2 F 12 R 1 F 12 R 1 FFFFR 1 FFFFL 1 FFL 1 F 20 R 1 FFFFR 1 F 12 L 1 FFFFR 1
+F 22 L 1 FFL 1 F 50 R 1 FFL 1 F 12 R 1 FFFFFFL 1 F 16 L 1 FFL 1 F 12 R 1 FFR 1 F 20 R 1 FFFFL 2 FFFFR 1 F 30
+R 1 FFR 1 FFFFL 1 FFFFFFR 1 FFL 1 FFFFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFR 1 F 16 R 1 FFFFL 2 FFFFFFL 1 F 16 R 1 FFL 1 FFFFFFFFFFR 1 FFFFFFR 1 FFL 1 FFR 1
+F 20 L 1 F 24 L 1 F 18 L 1 F 18 L 1 F 12 L 1 F 12 L 1 FFFFFFFFL 2 FFFFL 2 FFR 2 FFFFR 1 FFFFFFFFR 2 F 12 R 1 F 12
+R 1 F 16 R 1 F 16 R 1 FFL 2 FFR 1 FFL 1 FFR 1 FFFFR 1 F 12 R 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 1 FFR 1 FFL 2 FFFFR 1
+FFL 1 FFR 1 FFL 1 FFR 1 FFFFR 1 FFL 2 FFR 1 F 12 R 1 FFR 1 FFL 2 FFR 2 FFFFL 2 F 14 L 1 FFL 1 FFR 1 FFL 1 FFFFFFR 2 FFFFFFFFR 1
+FFFFL 1 FFL 1 FFFFR 2 FFFFFFL 1 FFFFFFR 1 FFFFFFL 1 FFFFL 1 FFFFFFR 1 FFFFFFFFR 2 F 16 L 1 FFL 1 F 12 R 1 FFFFL 1 FFFFFFFFL 1 FFFFR 1 FFFFFFR 1 FFFFFFFFR 1 F 32
+L 1 FFFFR 1 F 14 R 1 F 16 L 1 FFFFL 1 FFR 1 FFFFFFFFL 1 FFL 1 FFFFFFFFR 1 FFR 1 FFFFFFFFL 1 FFL 1 FFFFFFFFR 2 FFL 2 F 20 R 1 FFFFL 1 FFFFFFL 1
+FFFFFFR 1 F 28 L 1 FFFFR 1 FFR 1 FFFFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFR 1 FFFFL 1 FFR 1 FFL 1 FFFFR 1 FFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFL 1 FFFFFFFFL 1 FFFFR 1
+FFR 1 FFL 1 FFR 1 FFFFFFFFFFL 1 FFFFR 1 FFR 1 F 38 L 1 FFL 1 F 38 R 1 FFR 1 F 38 L 1 FFL 1 F 38 R 1 FFR 1 F 38 L 1
+FFL 1 F 38 R 1 FFR 1 F 38 L 1 FFL 1 F 38 R 1
+21
+L 1 F 324 R 1 F 108 R 1 F 135 L 1 F 27 R 1 F 81 L 1 F 81 L 1 F 216 R 1 F 108 R 1 F 324 R 1 F 324
+R 1
+58
+F 582 L 1 F 388 L 1 F 485 L 1 F 97 R 1 F 97 R 1 F 291 R 1 F 97 R 1 F 97 L 1 F 485 L 1 F 194 L 1
+F 194 R 1 F 97 R 1 F 485 R 1 F 97 R 1 F 194 L 1 F 194 L 1 F 485 L 1 F 97 R 1 F 97 R 1 F 291 R 1
+F 97 R 1 F 97 L 1 F 485 L 1 F 485 L 1 F 679 L 1 F 970 L 1 F 1455 L 1 F 873 L 1 F 97 R 1
+56
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFFFFLFRFRFLFF 4 L 1 FFFFFLFRFRFLFF 2 R 1 FFFFFFFF 1 R 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 1 R 1 FFFFFRFLFLFRFF 1 R 1 FFFFFFFF 3 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 1 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 1 L 1 FFFFFLFRFRFLFF 6 R 1 FFFFFRFLFLFRFF 1 R 1 FFFFFRFLFLFRFF 2 L 1 FFFFFFFF 1 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 R 1 FFFFFLFRFRFLFF 1 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 L 1 FFFFFFFF 2 L 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 7 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 R 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFFFFLFRFRFLFF 2 R 1 FFFFFFFF 1 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 3 R 1
+36
+F 1500 R 1 F 600 R 1 F 400 R 1 F 200 R 1 F 200 L 1 F 200 L 1 F 1000 L 1 F 800 L 1 F 300 L 1 F 100 R 1
+F 100 L 1 F 100 L 1 F 100 R 1 F 100 R 1 F 200 R 1 F 600 R 1 F 800 R 1 F 1300 R 1
+915
+FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFFFFFFR 1 F 35 L 1 FFFFFL 1 F 25 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 25 L 1 FFFFFR 1 FFFFFFFFFFL 1
+FFFFFR 1 F 60 R 1 FFFFFFFFFFR 1 F 35 L 1 FFFFFR 1 F 120 L 1 FFFFFFFFFFR 1 FFFFFR 1 F 15 R 1 F 20 L 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 2 FFFFFFFFFFL 1 FFFFFR 2 FFFFFFFFFFL 1 FFFFFL 1 F 20 R 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 25 R 1 FFFFFR 1
+FFFFFL 1 F 15 L 1 F 15 L 1 F 20 R 1 F 15 L 1 FFFFFL 1 F 25 R 1 F 20 R 1 FFFFFL 2 F 25 R 1 F 15 L 1 F 15
+L 1 F 15 L 1 FFFFFR 1 F 15 L 1 F 20 R 1 FFFFFFFFFFR 1 F 30 R 1 FFFFFFFFFFL 1 FFFFFR 1 F 35 R 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 F 15 R 1
+FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 2 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 2 F 15 L 1
+FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 F 35 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1
+FFFFFL 1 F 15 R 1 FFFFFL 1 F 15 R 1 F 20 R 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 F 20 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1
+FFFFFR 1 FFFFFL 2 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1 F 15 R 1 F 20 L 1 FFFFFR 1 F 20 R 1 FFFFFFFFFFL 2 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 F 45 R 1 FFFFFL 2 FFFFFR 1
+F 15 L 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1 F 15 R 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 F 60 R 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 FFFFFR 2 FFFFFL 1 FFFFFFFFFFL 2 FFFFFR 2 FFFFFL 1
+FFFFFR 1 FFFFFL 1 FFFFFR 2 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 F 20 R 1 F 15 L 1 FFFFFL 1 F 15 R 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFFFFFFR 1 F 15 R 1 FFFFFFFFFFR 1 FFFFFL 2
+FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 2 FFFFFR 1 FFFFFFFFFFR 1 F 15 L 1 FFFFFL 1 F 35 R 1 F 15 R 1 FFFFFR 1 FFFFFL 2 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 1 F 15
+R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 2 F 20 L 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 2 FFFFFR 1 F 15 L 1
+FFFFFL 1 F 20 R 1 FFFFFFFFFFL 1 FFFFFR 2 F 15 L 1 FFFFFL 1 FFFFFR 2 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 15 R 1 FFFFFFFFFFL 1
+FFFFFR 1 FFFFFL 2 FFFFFFFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 F 25 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 F 15 L 1 FFFFFR 2
+F 15 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFR 1 F 40 R 1 F 25 L 1 FFFFFR 2 FFFFFFFFFFL 1 F 15 R 1 FFFFFL 1 F 20
+L 1 FFFFFR 1 F 15 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 2 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1
+FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 15 R 1 FFFFFFFFFFL 1 FFFFFL 1 F 15 R 1 F 15 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1
+FFFFFR 1 FFFFFL 1 FFFFFR 1 F 25 L 1 F 25 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 2 F 20 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1
+FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFL 1 F 20
+R 1 F 15 R 1 FFFFFL 2 F 20 L 1 FFFFFL 1 FFFFFR 1 F 15 R 1 F 35 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 20 R 1 FFFFFFFFFFL 1
+FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 F 20 L 1 FFFFFR 1 F 75 L 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFL 1 F 15 R 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 F 15 R 1 FFFFFFFFFFL 2 FFFFFFFFFFR 1 F 15 L 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 F 30 R 1 F 15 L 1 FFFFFL 1 F 15 R 1 FFFFFFFFFFL 1 FFFFFR 2 F 20
+L 1 FFFFFR 2 F 35 L 1 FFFFFFFFFFL 1 F 45 L 1 FFFFFFFFFFR 2 F 15 R 1 F 110 L 1 FFFFFL 1 F 110 R 1 FFFFFL 1 F 20 R 1 FFFFFR 1 F 95
+L 1 FFFFFL 1 F 95 R 1 FFFFFR 1 F 95 L 1 FFFFFL 1 F 95 R 1 FFFFFR 1 F 95 L 1 FFFFFL 1 F 95 R 1 FFFFFR 1 F 95 L 1 FFFFFL 1
+F 95 R 1 FFFFFR 1 FFFFFFFFFFL 1 F 25 R 1 FFFFFL 1 FFFFFR 2 FFFFFFFFFFL 1 F 20 L 1 FFFFFL 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1
+FFFFFFFFFFL 1 F 20 R 1 FFFFFFFFFFL 1 F 15 R 1 FFFFFR 1 FFFFFFFFFFL 1 F 70 R 1 F 15 L 1 F 15 L 1 FFFFFFFFFFR 1 F 50 L 1 FFFFFL 1 FFFFFR 1 F 20
+R 1 F 20 L 1 FFFFFL 1 F 20 R 1 FFFFFR 1 F 20 L 1 FFFFFL 1 F 20 R 1 FFFFFL 1 FFFFFFFFFFL 1 F 40 R 1 F 35 R 1 FFFFFFFFFFL 1 F 80
+R 1 F 20 R 1 F 15 R 1 FFFFFFFFFFL 1 F 20 L 1 FFFFFFFFFFR 1 F 30 L 1 FFFFFL 1 F 40 R 1 F 20 R 1 F 20 R 1 F 15 L 1
+FFFFFFFFFFL 1 F 15 R 1 F 15 L 1 F 15 R 1 FFFFFFFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFFFFFFR 1 F 20 R 1 F 15 R 1 F 15 L 1 FFFFFR 1 FFFFFL 2 F 35
+L 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 2 FFFFFR 2 F 30 R 1 FFFFFL 2 FFFFFR 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 30 R 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 2 FFFFFR 1 F 40 R 1 F 40 R 1 F 30 R 1 F 30 R 1 F 20
+R 1 F 20 R 1 FFFFFFFFFFR 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFL 2 F 20 L 1 F 20 L 1 F 30 L 1 F 30 L 1 F 45 L 1 F 45 L 1 F 60
+L 1 F 50 R 1 FFFFFL 1 FFFFFR 1 F 15 R 1 F 25 L 1 FFFFFR 1 F 40 L 1 F 15 L 1 FFFFFFFFFFL 1 FFFFFFFFFFR 1 F 40 R 1 FFFFFFFFFFR 1 F 20
+L 1 FFFFFFFFFFR 1 F 15 L 1 FFFFFR 1 F 15 L 1 FFFFFFFFFFR 1 FFFFFR 1 F 75 R 1 FFFFFFFFFFL 2 FFFFFFFFFFR 1 F 50 R 1 FFFFFR 1 F 30 L 1 FFFFFL 1 F 40
+L 1 F 15 R 1 F 30 L 1 FFFFFR 1 F 125 L 1 FFFFFL 1 F 55 R 1 FFFFFFFFFFL 1 F 30 R 1 FFFFFFFFFFR 1 F 50 L 1 FFFFFL 1 FFFFFFFFFFR 2 F 30
+R 1 F 30 L 1 FFFFFL 1 FFFFFR 1 F 15 L 1 FFFFFL 1 F 15 R 1 FFFFFR 1 FFFFFL 1 F 15 R 1 FFFFFL 2 F 40 R 1 FFFFFR 1 F 50 L 1
+FFFFFL 1 F 60 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 50 L 1 FFFFFL 1 F 50 R 1 FFFFFFFFFFR 1 F 45 L 1 F 15 R 1 F 20 L 1 FFFFFFFFFFR 1 F 15
+R 1 F 50 R 1 F 45 L 1 FFFFFR 1 F 20 L 1 F 15 R 1 FFFFFFFFFFL 1 FFFFFL 1 F 30 R 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFR 1 F 20 R 1
+F 35 L 1 FFFFFL 1 F 35 R 1 F 15 L 1 F 40 R 1 F 25 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1
+FFFFFL 1 FFFFFR 1 F 20 L 1 FFFFFFFFFFL 1 F 20 L 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFFFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1
+FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFFFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 FFFFFR 1 F 25 R 1
+FFFFFFFFFFL 1 F 20 R 1 F 20 L 1 F 15 L 1 F 20 R 1 FFFFFR 1 FFFFFFFFFFL 1 FFFFFL 1 FFFFFR 2 F 55 R 1 F 15 L 1 F 60 L 1 FFFFFL 1
+F 15 R 1 F 15 L 1 FFFFFL 1 F 15 R 1 F 30 R 1 FFFFFFFFFFR 1 FFFFFL 2 F 55 R 1 FFFFFFFFFFR 1 F 85 L 1 FFFFFL 1 F 30 R 1 FFFFFFFFFFL 2
+FFFFFFFFFFR 1 F 45 R 1 FFFFFL 1 FFFFFR 1 FFFFFL 1 F 35 R 1 F 25 R 1 F 55 R 1 F 25 L 1 FFFFFL 1
+731
+FR 1 FFL 1 FFR 1 FFL 1 FFFR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FFL 1 FR 2 FFL 1 FFR 1 FL 1 FR 1 FL 1 FR 1 FL 1
+FR 1 FL 1 FR 2 FFFL 1 FR 1 FFL 1 FL 1 FFFFFFFL 1 FR 1 FFL 1 FR 1 FFFL 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1
+FL 1 FFR 1 FL 1 FFFR 1 FL 1 FFFR 1 FFFFR 1 FFFR 1 FL 1 FFR 1 FFL 1 FFFFR 1 FL 1 FFR 1 FL 1 FR 1 FL 1 FR 1 FL 2 FFL 1
+FR 1 FFR 1 FFFR 1 FFFFL 1 FR 1 FFFFR 1 FFL 2 FL 1 FR 1 FFL 1 FFFFFFFFFR 1 FL 2 FR 1 FFFL 1 FFL 1 FL 1 FR 1 FFR 1 FFFR 1 FL 1
+FFR 1 FFL 1 F 12 R 1 FFR 1 FFL 1 FR 2 FL 1 FFL 2 FR 2 FL 1 FR 1 FL 1 FR 2 FL 1 FR 1 FFL 1 FFFFR 1 FFFL 1 FL 1
+FFFR 1 FFL 1 FL 1 FFR 1 FFFR 1 FFR 1 FL 2 FR 1 FFL 1 FL 1 FFR 1 FL 2 FR 1 FFR 1 FFFL 1 FL 1 FFFFFFFR 1 FFFR 1 FR 1 FL 2
+FFR 1 FR 1 FL 1 FFFR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 2 FFFFL 1 FR 1 FL 1 FFR 1 FL 2 FR 1
+FFFL 1 FL 1 FFFFR 1 FFL 1 FR 2 FFFL 1 FL 1 FR 2 FFL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FFFR 1 FFL 1 FR 1 FL 2
+FFL 1 FR 1 FFL 1 FFFFFL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FFL 1 FFR 1 FR 1 FFFL 1 FR 2 FFFL 1 FR 1 FL 1 FR 1
+FL 1 FR 1 FFFL 1 FR 1 FFFFFFFFR 1 FFFFFL 1 FR 2 FFL 1 FFFR 1 FL 1 FFFFL 1 FR 1 FFFR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1
+FR 1 FL 2 FFL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FFFR 1 FFL 1 FL 1 FFFR 2 FL 1 FR 1 FL 1
+FFR 1 FR 1 FL 1 FFR 1 FFL 1 FR 1 FL 1 FR 1 FFFFFL 1 FFFFFR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 2 FFFFR 1 FL 1
+FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FFL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FFFL 1 FR 1 FFL 1 FR 1 FL 1 FFL 1
+FFFFR 1 FFFR 1 FL 2 FFFFL 1 FL 1 FR 1 FFFR 1 FFFFFFFL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FFFFR 1 FFL 1 FFR 1 FL 1 FR 1 FL 1 FR 1
+FFL 1 FFR 1 FR 1 FFFFL 1 FR 1 F 15 L 1 FL 1 FFR 1 FL 1 FFFR 1 FL 1 FR 1 FL 1 FFFR 1 FFL 2 FFR 1 FFFL 1 FFL 1 FFR 1
+FR 1 FFFFFFR 1 FFFL 1 FL 1 FFFR 1 FFL 1 FR 2 FFFFL 1 FR 2 FFFFFFFL 1 FFL 1 FFFFFFFFFL 1 FFR 2 FFFR 1 F 22 L 1 FL 1 F 22 R 1 FL 1
+FFFFR 1 FR 1 F 19 L 1 FL 1 F 19 R 1 FR 1 F 19 L 1 FL 1 F 19 R 1 FR 1 F 19 L 1 FL 1 F 19 R 1 FR 1
+F 19 L 1 FL 1 F 19 R 1 FR 1 FFL 1 FFFFFR 1 FL 1 FR 2 FFL 1 FFFFL 1 FL 1 FFR 1 FFL 1 FFR 1 FR 1 FFL 1 FR 1 FL 1
+FFR 1 FFL 1 FFFFR 1 FFL 1 FFFR 1 FR 1 FFL 1 F 14 R 1 FFFL 2 FFR 1 FFFFFFFFFFL 1 FL 1 FR 1 FFFFR 1 FFFFL 1 FL 1 FFFFR 1 FR 1 FFFFL 1
+FL 1 FFFFR 1 FL 1 FFL 1 FFFFFFFFR 1 FFFFFFFR 1 FFL 1 F 16 R 1 FFFFR 1 FFFR 1 FFL 1 FFFFL 1 FFR 1 FFFFFFL 1 FL 1 FFFFFFFFR 1 FFFFR 2 FFFL 1 FFL 1
+FFFR 1 FFFL 1 FFFR 1 FFR 1 FFL 1 FL 1 FFR 1 FFFFR 1 FFFR 1 FFFL 1 FR 1 FL 2 FFFFFFFL 1 FFL 1 FFR 1 FR 1 FL 2 FR 2 FFFFFFR 1 FL 2
+FR 1 FFR 1 FL 1 FR 1 FL 1 FR 1 FFL 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FFFFFFR 1 FFR 1 FL 1 FR 1 FL 2
+FR 1 FFFFFFFFR 2 FFFFFFR 2 FFFFR 2 FFR 1 FR 1 FL 1 FFL 2 FFFFL 2 FFFFFFL 2 FFFFFFFFFL 2 F 12 L 1 FFFFFFFFFFR 1 FL 1 FR 1 FFFR 1 FFFFFL 1 FR 1 FFFFFFFFL 1
+FFFL 1 FFL 1 FFR 1 FFFFFFFFR 1 FFR 1 FFFFL 1 FFR 1 FFFL 1 FR 1 FFFL 1 FFR 1 FR 1 F 15 R 1 FFL 2 FFR 1 FFFFFFFFFFR 1 FR 1 FFFFFFL 1 FL 1
+FFFFFFFFL 1 FFFR 1 FFFFFFL 1 FR 1 F 25 L 1 FL 1 F 11 R 1 FFL 1 FFFFFFR 1 FFR 1 FFFFFFFFFFL 1 FL 1 FFR 2 FFFFFFR 1 FFFFFFL 1 FL 1 FR 1 FFFL 1
+FL 1 FFFR 1 FR 1 FL 1 FFFR 1 FL 2 FFFFFFFFR 1 FR 1 FFFFFFFFFFL 1 FL 1 F 12 L 1 FR 1 FL 1 FR 1 FFFFFFFFFFL 1 FL 1 FFFFFFFFFFR 1 FFR 1 FFFFFFFFFL 1
+FFFR 1 FFFFL 1 FFR 1 FFFR 1 FFFFFFFFFFR 1 FFFFFFFFFL 1 FR 1 FFFFL 1 FFFR 1 FFL 1 FL 1 FFFFFFR 1 FFL 1 FR 1 FL 1 FFR 1 FFFFR 1 FFFFFFFL 1 FL 1 FFFFFFFR 1
+FFFL 1 FFL 1 FFFFFFFR 1 FR 1 FFFFFFFL 1 FL 1 FFFFR 1 FR 1 FFFFL 1 FL 1 FFFFFFR 1 FR 1 FFFFFFL 1 FR 1 FFFFFL 1 FR 1 FL 1 FR 1 FL 1 FR 1
+FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FFR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1
+FR 1 FL 1 FFL 1 FR 1 FL 1 FR 1 FFFFL 1 FFL 1 FFFFL 1 FR 1 FL 1 FR 1 FFR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1
+FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FFL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1 FL 1 FR 1
+FFFFFR 1 FFL 1 FFFFR 1 FFFFL 1 FFFL 1 FFFFR 1 FR 1 FFL 1 FL 1 FR 2 F 11 R 1 FFFL 1 F 12 L 1 FL 1 FFFR 1 FFFL 1 FL 1 FFFR 1
+FFFFFFR 1 FFR 1 FL 2 F 11 R 1 FFR 1 F 17 L 1 FL 1 FFFFFFR 1 FFL 2 FFR 1 FFFFFFFFFR 1 FL 1 FR 1 FL 1 FFFFFFFR 1 FFFFFR 1 F 11 R 1
+FFFFFL 1 FL 1 FR 1 FFL 1 FR 1 FFL 1 FR 1 FFFL 1 FFR 1 FFFFFFFL 1 FL 1 FFFFFR 1 FL 1 FFR 1 FL 1 FFFFFL 1 FR 1 FFL 1 FR 1 F 12
+R 1 FFR 1 FFFFFFFL 1 FR 1 F 24 L 1 FFR 1 FR 1 FFFR 1 FFFFL 1 FL 1 FR 1 FFL 1 FL 1 FR 1 FL 1 FR 1 FFL 1 FR 2 FFL 1
+FR 2 FFL 1 FL 1 FFFFR 1 FR 1 FFL 1 FL 1 FFR 1 FR 1 FFL 1 FR 1 FFFFFR 1 FR 1 FL 1 FFFL 2 FFFFR 1 FFFL 1 FL 1 FFFFFR 1 FFFFR 1
+FL 2 FFFFFR 1 FFFL 3 FR 1 FFFL 1 FFFFR 1 FFR 1 FFFFFFR 1 FFL 1 FR 1 FFFFFFR 1
+60
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 11 R 1 FFFFFFFF 11 L 1 FFLFRFFRFRFLFLFFLFRFFF 22 R 1 FFLFRFFRFRFLFLFFLFRFFF 11 R 1 FFRFLFFLFLFRFRFFRFLFFF 22 L 1 FFFFFRFLFLFRFF 11 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 11 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 11 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 11 L 1 FFLFRFFRFRFLFLFFLFRFFF 11 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 22 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 11 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 11 R 1 FFFFFFFF 11 L 1 FFRFLFFLFLFRFRFFRFLFFF 22 R 1 FFRFLFFLFLFRFRFFRFLFFF 11 L 1 FFFFFLFRFRFLFF 22 R 1 FFFFFRFLFLFRFF 11 R 1 FFRFLFFLFLFRFRFFRFLFFF 22 L 1 FFLFRFFRFRFLFLFFLFRFFF 11 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 22 L 1 FFRFLFFLFLFRFRFFRFLFFF 11 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 11 L 1 FFFFFFFF 11 R 1 FFFFFLFRFRFLFF 11 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 11 R 1 FFFFFLFRFRFLFF 11 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 22 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 11 R 1 FFFFFFFF 11 L 1
+10
+FFFFFLFRFRFLFF 5 R 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1 FFLFRFFRFRFLFLFFLFRFFF 8 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 L 1
+10
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 10 R 1 FFFFFRFLFLFRFF 8 R 1 FFLFRFFRFRFLFLFFLFRFFF 16 R 1 FFFFFLFRFRFLFF 8 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 L 1
+10
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 10 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 8 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 16 R 1 FFFFFFFF 8 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 L 1
+32
+F 252 L 1 F 105 R 1 F 147 L 1 F 210 L 1 F 231 L 1 F 210 R 1 F 42 L 1 F 21 L 1 F 63 L 1 F 210 R 1
+F 189 R 1 F 168 R 1 F 147 L 1 F 105 R 1 F 231 L 1 F 21 L 1
+7
+FLFR 2999 FL 2 F 1 FLFR 5998 FL 2 F 1 FLFR 2999
+10
+FFFFFFFF 5 R 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 8 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1
+56
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 L 1 FFFFFLFRFRFLFF 4 L 1 FFFFFFFF 2 R 1 FFLFRFFRFRFLFLFFLFRFFF 1 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 1 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 L 1 FFFFFRFLFLFRFF 4 R 1
+FFFFFFFF 1 R 1 FFFFFFFF 1 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 R 1 FFRFLFFLFLFRFRFFRFLFFF 1 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFFFFFF 1 R 1 FFFFFLFRFRFLFF 1 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 L 1 FFFFFLFRFRFLFF 3 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1
+FFRFLFFLFLFRFRFFRFLFFF 7 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 R 1 FFFFFFFF 1 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFFFRFLFLFRFF 1 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFFFLFRFRFLFF 3 R 1
+32
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFFFFRFLFLFRFF 3 R 1 FFFFFLFRFRFLFF 1 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFFFFLFRFRFLFF 3 R 1 FFFFFLFRFRFLFF 2 R 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFFFRFLFLFRFF 3 R 1 FFFFFFFF 5 R 1 FFFFFRFLFLFRFF 1 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1 FFFFFRFLFLFRFF 2 L 1
+10
+FFFFFLFRFRFLFF 5 R 1 FFRFLFFLFLFRFRFFRFLFFF 4 R 1 FFRFLFFLFLFRFRFFRFLFFF 8 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 L 1
+32
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1 FFFFFFFF 2 L 1 FFFFFRFLFLFRFF 3 L 1 FFFFFRFLFLFRFF 1 R 1 FFFFFFFF 3 L 1 FFFFFRFLFLFRFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1
+FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 5 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 1 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1
+850
+FFFR 1 FFFFFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFFFFL 1 FFFL 1 FFFR 1 FFFFFFFFFL 1 FFFL 1 FFFFFFR 1 FFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1
+FFFR 1 F 15 R 1 FFFFFFL 1 FFFR 1 FFFFFFR 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFL 1 FFFFFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFL 1 FFFL 1
+FFFR 2 FFFFFFFFFL 1 FFFL 1 FFFR 1 FFFFFFL 1 F 12 R 1 FFFR 1 FFFFFFFFFL 1 FFFR 2 FFFL 1 FFFFFFR 1 FFFL 1 FFFR 1 F 12 L 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1
+FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFFFFR 1 FFFL 2 FFFFFFR 1 FFFR 1 FFFL 2 FFFFFFFFFL 1 F 21 R 1 FFFR 1 FFFFFFFFFL 1 FFFFFFL 1 FFFR 2 FFFL 1
+FFFFFFR 1 FFFR 1 FFFFFFL 1 FFFR 2 FFFL 1 FFFFFFL 1 FFFFFFFFFL 1 FFFFFFR 1 FFFR 1 FFFFFFL 1 FFFFFFFFFR 1 FFFR 1 FFFFFFFFFL 1 F 12 R 1 FFFFFFL 1 FFFR 1 FFFL 2 FFFR 1 FFFL 1
+FFFR 1 FFFL 2 FFFR 1 FFFFFFR 2 FFFL 2 FFFR 1 FFFFFFL 2 F 36 R 1 FFFFFFL 1 FFFFFFR 1 FFFL 1 FFFFFFFFFL 1 FFFFFFL 1 FFFR 2 FFFFFFR 1 FFFFFFFFFL 1 FFFR 2 FFFL 1 F 27
+R 1 FFFFFFL 1 FFFR 2 FFFFFFR 1 FFFFFFL 1 F 12 L 1 FFFR 1 F 12 L 1 FFFFFFFFFL 1 FFFFFFL 1 FFFR 1 FFFFFFR 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1
+FFFFFFR 1 FFFL 1 F 12 R 1 FFFFFFL 1 FFFFFFR 1 FFFL 1 FFFFFFFFFL 1 F 12 L 1 FFFFFFFFFR 1 FFFL 1 FFFFFFFFFR 1 FFFL 1 FFFFFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1
+FFFR 1 FFFL 1 FFFR 2 FFFFFFFFFL 1 FFFR 1 FFFFFFL 1 FFFR 1 F 21 R 1 FFFR 1 FFFFFFL 1 FFFR 1 FFFFFFFFFL 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1
+FFFR 1 FFFL 1 FFFFFFR 1 FFFFFFL 1 FFFL 1 FFFR 1 FFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFFFFR 1 FFFFFFL 1 FFFFFFR 1 FFFFFFL 1 F 21 L 1 FFFR 1
+FFFFFFL 1 F 18 L 1 FFFFFFL 1 F 12 R 1 FFFFFFFFFL 1 FFFR 1 FFFFFFFFFR 2 FFFFFFFFFL 1 F 15 R 1 FFFR 1 FFFL 1 F 12 L 1 F 15 R 1 FFFR 1 FFFFFFFFFL 1
+F 12 R 1 FFFFFFFFFR 2 FFFL 2 F 15 L 1 FFFR 1 FFFFFFL 1 FFFL 1 FFFFFFR 1 FFFR 1 FFFFFFL 1 FFFL 1 F 12 R 1 FFFR 1 FFFFFFL 1 FFFL 1 FFFR 1 FFFFFFL 1
+FFFL 1 FFFR 1 FFFFFFL 1 FFFR 1 FFFL 1 FFFR 2 FFFFFFL 1 FFFR 2 F 12 L 1 FFFFFFFFFL 1 FFFL 1 FFFFFFR 1 F 72 L 1 FFFR 1 F 21 L 1 FFFFFFL 1 F 36
+L 1 FFFR 1 FFFFFFL 1 FFFR 1 F 15 R 1 FFFL 1 FFFFFFR 1 FFFL 1 F 15 R 1 FFFR 1 F 21 L 1 FFFFFFR 1 FFFFFFFFFL 1 FFFR 1 FFFFFFL 1 FFFR 1 FFFFFFL 1
+FFFR 2 F 15 L 1 F 33 L 1 F 15 L 1 F 21 R 1 FFFL 1 FFFR 1 FFFL 1 F 27 L 1 FFFFFFR 2 FFFFFFL 1 F 18 R 1 FFFR 1 F 51
+L 1 FFFFFFL 1 F 33 R 1 FFFR 1 FFFL 1 FFFFFFL 1 F 18 L 1 FFFFFFFFFR 1 FFFR 1 FFFFFFFFFL 1 FFFFFFFFFR 1 FFFR 1 F 36 R 1 FFFFFFFFFL 1 F 33 L 1 FFFL 1
+FFFR 2 FFFFFFL 1 FFFL 1 F 12 R 1 FFFFFFFFFR 1 F 12 L 1 F 12 R 1 FFFFFFL 1 F 15 L 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1
+FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1
+FFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 F 12 R 1 FFFFFFR 1 F 12 L 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1
+FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1
+F 15 L 1 FFFR 1 F 18 L 1 FFFL 1 F 18 R 1 F 18 R 1 FFFFFFFFFL 1 F 21 R 1 FFFR 1 F 21 L 1 F 12 L 1 FFFFFFR 1 FFFL 1
+FFFR 1 FFFFFFL 1 F 18 R 1 FFFR 1 FFFFFFL 1 FFFFFFFFFR 1 F 12 L 1 FFFR 1 F 27 L 1 F 30 L 1 FFFFFFFFFL 1 FFFFFFR 1 F 12 L 1 FFFFFFFFFR 1 F 27
+L 1 FFFFFFL 1 F 30 R 1 FFFR 1 F 30 L 1 FFFR 1 FFFL 1 FFFR 1 F 36 R 1 FFFR 1 F 30 L 1 FFFL 1 F 24 R 1 FFFR 1 FFFL 1
+FFFFFFFFFR 1 FFFL 2 FFFFFFFFFR 1 FFFR 1 FFFFFFFFFL 1 FFFR 2 F 18 L 1 F 18 L 1 FFFFFFL 1 FFFFFFR 1 FFFR 1 F 30 L 1 FFFFFFL 1 F 18 R 1 FFFFFFL 1 F 33
+R 1 FFFR 1 F 75 L 1 FFFR 1 F 18 L 1 FFFFFFFFFR 1 F 24 R 1 FFFR 1 F 18 L 1 FFFL 1 F 30 L 1 FFFFFFR 2 FFFFFFL 1 F 45 L 1
+FFFL 1 FFFFFFR 1 FFFFFFFFFL 1 FFFR 1 FFFFFFFFFL 1 FFFFFFR 1 F 12 L 1 FFFFFFL 1 F 24 L 1 FFFFFFR 2 FFFFFFFFFR 1 F 24 L 1 FFFR 1 F 15 L 1 FFFFFFFFFL 1 FFFR 1
+FFFL 1 F 30 R 1 F 36 R 1 F 27 R 1 F 27 R 1 F 18 R 1 F 18 R 1 F 12 R 1 F 12 R 1 FFFFFFR 2 FFFL 2 FFFFFFL 1
+F 12 L 1 F 12 L 1 F 18 L 1 F 18 L 1 F 24 L 1 F 24 L 1 FFFR 2 FFFL 1 FFFR 1 FFFL 1 FFFFFFL 1 F 18 L 1 FFFR 1
+FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 2 FFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFL 1 FFFR 2 FFFL 1 F 18 L 1 FFFL 1 FFFR 2 FFFL 2 FFFFFFR 2
+F 21 R 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFFFFL 2 F 12 L 1 FFFFFFR 1 FFFR 1 FFFFFFL 2 FFFFFFFFFR 1 FFFFFFFFFL 1 FFFFFFFFFR 1 FFFFFFR 1 FFFFFFFFFL 1 F 12 L 1 F 12 L 1
+F 24 R 1 FFFR 1 F 18 L 1 FFFFFFR 1 F 12 R 1 FFFFFFL 1 FFFFFFFFFL 1 F 12 L 1 F 48 R 1 FFFFFFL 1 F 21 L 1 F 24 R 1 FFFFFFR 1
+FFFL 1 F 12 R 1 FFFR 1 F 12 L 1 FFFL 1 F 12 R 1 FFFR 1 F 12 L 1 F 12 L 1 FFFR 2 F 30 L 1 FFFFFFR 1 FFFFFFFFFR 1 FFFFFFFFFL 1
+F 42 R 1 FFFFFFL 1 FFFL 1 FFFFFFFFFR 1 FFFFFFL 1 F 12 R 1 FFFFFFL 1 FFFFFFR 1 FFFL 1 FFFR 1 FFFFFFL 1 FFFL 1 FFFFFFR 1 FFFFFFL 1 FFFFFFR 1 FFFR 1 F 12 R 1
+FFFFFFL 1 FFFL 1 FFFR 1 FFFL 1 F 15 R 1 FFFFFFL 1 FFFL 1 F 57 R 1 FFFR 1 F 57 L 1 FFFL 1 F 57 R 1 FFFR 1 F 57 L 1 FFFL 1
+F 57 R 1 FFFR 1 F 57 L 1 FFFL 1 F 57 R 1 FFFR 1 F 57 L 1 FFFL 1 F 12 R 1 FFFL 1 F 66 R 1 FFFR 1 F 66 L 1
+FFFFFFFFFL 1 FFFFFFL 1 FFFFFFR 1 F 27 R 1 FFFFFFR 1 F 21 L 1 FFFL 1 FFFR 1 F 12 L 1 FFFL 1 FFFR 1 FFFFFFL 1 FFFFFFFFFR 1 FFFR 1 FFFFFFFFFL 1 F 18 L 1
+FFFL 1 FFFFFFR 2 FFFFFFFFFL 1 FFFFFFR 2 FFFFFFL 1 FFFFFFFFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFFFFR 1 FFFL 1 FFFFFFR 1 FFFR 1 F 45 L 1 FFFR 1 F 12 L 1 FFFL 1 FFFFFFR 1
+FFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFR 1 FFFFFFL 1 F 12 L 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 F 21 L 1 FFFFFFFFFL 1 FFFR 2 F 12 R 1
+FFFR 1 FFFL 1 FFFFFFFFFL 1 F 12 R 1 FFFFFFR 1 FFFL 1 FFFR 1 FFFFFFL 1 FFFR 1 FFFFFFFFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFR 1 FFFL 1
+FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 F 12 L 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 F 15 R 1 F 15
+L 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFL 1 FFFFFFR 1 FFFL 2 FFFFFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFFFFL 1 FFFFFFFFFR 1 FFFR 1 FFFFFFL 1 FFFFFFFFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1
+FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFFFFR 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFR 1 FFFL 1 FFFFFFFFFL 1 FFFR 1 F 12
+R 1 FFFL 1 FFFFFFFFFR 1 FFFFFFL 1 FFFL 1 FFFR 1 F 15 L 1 F 24 L 1
+12
+FLFFLFRFRFFRFFLFFLFLFRFR 900 FL 2 F 13 FLFFLFRFRFFRFFLFFLFLFRFR 1499 FLFFLFRFRFFRFFLFFLFLFRF 1 F 13 L 1 F 13 FLFFLFRFRFFRFFLFFLFLFRFR 381 F 656 L 1 F 669
+32
+FFFFFFFF 3 L 1 FFFFFRFLFLFRFF 3 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFFFFFF 3 L 1 FFFFFRFLFLFRFF 1 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFFFFFFF 3 L 1 FFFFFLFRFRFLFF 2 L 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 5 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1
+24
+F 54 R 1 F 108 L 1 F 18 L 1 F 54 R 1 F 72 L 1 F 18 L 1 F 72 R 1 F 126 L 1 F 18 L 1 F 72 R 1
+F 54 L 1 F 18 L 1
+58
+FFFFFLFRFRFLFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFFFLFRFRFLFF 2 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFFFFFFF 6 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFFFFFF 6 R 1
+FFRFLFFLFLFRFRFFRFLFFF 8 R 1 FFFFFRFLFLFRFF 4 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 R 1 FFFFFRFLFLFRFF 2 L 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 6 R 1 FFFFFLFRFRFLFF 8 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1
+FFFFFFFF 12 L 1 FFFFFFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFFFRFLFLFRFF 6 R 1 FFRFLFFLFLFRFRFFRFLFFF 4 R 1 FFFFFRFLFLFRFF 12 R 1
+60
+FFFFFLFRFRFLFF 6 L 1 FFFFFRFLFLFRFF 6 R 1 FFFFFFFF 12 L 1 FFFFFFFF 6 L 1 FFLFRFFRFRFLFLFFLFRFFF 12 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 6 R 1 FFLFRFFRFRFLFLFFLFRFFF 6 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 R 1 FFFFFRFLFLFRFF 6 L 1
+FFFFFRFLFLFRFF 12 L 1 FFFFFLFRFRFLFF 6 R 1 FFLFRFFRFRFLFLFFLFRFFF 6 L 1 FFLFRFFRFRFLFLFFLFRFFF 6 R 1 FFFFFFFF 12 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 R 1 FFFFFRFLFLFRFF 12 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 L 1 FFRFLFFLFLFRFRFFRFLFFF 12 R 1 FFLFRFFRFRFLFLFFLFRFFF 6 L 1
+FFFFFRFLFLFRFF 12 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 6 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 R 1 FFFFFRFLFLFRFF 6 L 1 FFFFFFFF 6 R 1 FFFFFRFLFLFRFF 6 L 1 FFLFRFFRFRFLFLFFLFRFFF 6 L 1 FFFFFLFRFRFLFF 12 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 R 1
+56
+FFFFFRFLFLFRFF 1 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 R 1 FFFFFFFF 4 R 1 FFFFFLFRFRFLFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 L 1 FFFFFFFF 1 L 1 FFFFFFFF 3 R 1 FFRFLFFLFLFRFRFFRFLFFF 4 L 1
+FFLFRFFRFRFLFLFFLFRFFF 1 L 1 FFFFFFFF 1 R 1 FFFFFRFLFLFRFF 6 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 1 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 L 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 7 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 1 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFFFFFF 1 L 1 FFFFFRFLFLFRFF 2 R 1 FFFFFFFF 2 R 1 FFFFFRFLFLFRFF 3 L 1
+8
+R 1 F 3000 RFR 1 F 2999 L 1 F 2999 RFR 1 F 3000
+60
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 21 L 1 FFFFFRFLFLFRFF 21 R 1 FFFFFFFF 42 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 21 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 42 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 21 L 1 FFRFLFFLFLFRFRFFRFLFFF 21 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 21 L 1 FFFFFLFRFRFLFF 21 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 21 L 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 42 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 21 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 21 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 21 R 1 FFFFFRFLFLFRFF 42 L 1 FFFFFRFLFLFRFF 21 R 1 FFRFLFFLFLFRFRFFRFLFFF 42 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 21 L 1 FFRFLFFLFLFRFRFFRFLFFF 42 R 1 FFFFFRFLFLFRFF 21 L 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 42 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 21 L 1 FFFFFRFLFLFRFF 21 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 21 L 1 FFRFLFFLFLFRFRFFRFLFFF 21 R 1 FFFFFRFLFLFRFF 21 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 21 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 42 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 21 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 21 R 1
+32
+FFLFRFFRFRFLFLFFLFRFFF 3 R 1 FFFFFLFRFRFLFF 3 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFFFFLFRFRFLFF 3 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFFFFFFF 2 R 1
+FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFFFFFFF 3 R 1 FFRFLFFLFLFRFRFFRFLFFF 5 R 1 FFFFFLFRFRFLFF 1 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1
+162
+F 206 R 1 F 412 L 1 F 515 R 1 F 103 L 1 F 103 L 1 F 103 R 1 F 103 L 1 F 103 R 1 F 103 L 1 F 103 R 1
+F 103 L 1 F 103 L 1 F 103 R 1 F 103 L 1 F 103 R 1 F 103 L 1 F 515 R 1 F 206 L 1 F 103 R 1 F 206 R 1
+F 206 R 1 F 309 L 1 F 309 L 1 F 103 L 1 F 103 R 1 F 309 L 1 F 103 R 1 F 309 L 1 F 1030 L 1 F 103 R 1
+F 309 L 1 F 103 R 1 F 103 L 1 F 309 L 1 F 206 R 1 F 206 L 1 F 103 L 1 F 103 R 1 F 103 L 1 F 206 R 1
+F 103 R 1 F 1030 L 1 F 206 R 1 F 206 R 1 F 309 R 1 F 103 L 1 F 103 R 1 F 206 L 1 F 103 R 1 F 206 L 1
+F 206 R 1 F 412 L 1 F 103 L 1 F 927 L 1 F 103 L 1 F 103 R 1 F 103 R 1 F 103 L 1 F 103 R 1 F 103 R 1
+F 206 L 1 F 309 L 1 F 412 R 1 F 103 L 1 F 103 L 1 F 309 R 1 F 206 R 1 F 309 L 1 F 515 L 1 F 309 R 1
+F 206 L 1 F 206 R 1 F 103 L 1 F 103 L 1 F 103 R 1 F 103 L 1 F 618 R 1 F 206 L 1 F 206 R 1 F 309 R 1
+F 206 R 1
+32
+FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFFFFFF 3 L 1 FFFFFRFLFLFRFF 1 R 1 FFFFFLFRFRFLFF 3 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 L 1 FFFFFFFF 2 L 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFFFFLFRFRFLFF 3 L 1 FFFFFFFF 5 L 1 FFFFFLFRFRFLFF 1 R 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1
+15
+F 2000 R 1 F 2000 R 1 FLFRFRFLFRFLFLFR 1000 F 401 R 1 FLFRFRFLFRFLFLFR 1000 F 50 R 1 F 2402 R 1 F 1139 RFL 1 F 911
+32
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1 FFLFRFFRFRFLFLFFLFRFFF 3 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1 FFLFRFFRFRFLFLFFLFRFFF 3 R 1 FFFFFLFRFRFLFF 1 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 R 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFFFFLFRFRFLFF 2 R 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 R 1 FFFFFFFF 5 R 1 FFFFFFFF 1 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1
+60
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 17 R 1 FFFFFRFLFLFRFF 17 L 1 FFFFFFFF 34 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 17 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 34 L 1 FFFFFFFF 17 R 1 FFFFFRFLFLFRFF 17 L 1 FFFFFLFRFRFLFF 17 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 17 L 1 FFLFRFFRFRFLFLFFLFRFFF 17 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 34 R 1 FFRFLFFLFLFRFRFFRFLFFF 17 L 1 FFRFLFFLFLFRFRFFRFLFFF 17 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 17 L 1 FFLFRFFRFRFLFLFFLFRFFF 34 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 17 L 1 FFLFRFFRFRFLFLFFLFRFFF 34 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 17 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 34 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 17 R 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 34 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 17 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 17 L 1 FFFFFFFF 17 R 1 FFRFLFFLFLFRFRFFRFLFFF 17 L 1 FFFFFFFF 17 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 17 R 1 FFFFFLFRFRFLFF 34 L 1 FFFFFRFLFLFRFF 17 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 17 L 1
+60
+FFFFFLFRFRFLFF 3 R 1 FFFFFRFLFLFRFF 3 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 6 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 R 1 FFFFFFFF 3 L 1 FFFFFFFF 3 R 1 FFFFFFFF 3 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1
+FFFFFFFF 6 R 1 FFFFFRFLFLFRFF 3 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 R 1 FFFFFFFF 3 L 1 FFFFFLFRFRFLFF 6 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFRFLFFLFLFRFRFFRFLFFF 6 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 6 L 1 FFFFFFFF 3 R 1 FFLFRFFRFRFLFLFFLFRFFF 3 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 L 1 FFRFLFFLFLFRFRFFRFLFFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 6 L 1 FFRFLFFLFLFRFRFFRFLFFF 3 R 1 FFFFFRFLFLFRFF 3 L 1
+60
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 16 R 1 FFFFFLFRFRFLFF 16 L 1 FFLFRFFRFRFLFLFFLFRFFF 32 R 1 FFFFFFFF 16 R 1 FFFFFFFF 32 L 1 FFFFFLFRFRFLFF 16 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 16 L 1 FFFFFFFF 16 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 16 L 1 FFFFFFFF 16 R 1
+FFFFFLFRFRFLFF 32 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 16 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 16 R 1 FFFFFLFRFRFLFF 16 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 32 R 1 FFFFFRFLFLFRFF 16 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 32 R 1 FFFFFFFF 16 R 1 FFRFLFFLFLFRFRFFRFLFFF 32 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 16 R 1
+FFLFRFFRFRFLFLFFLFRFFF 32 L 1 FFFFFRFLFLFRFF 16 R 1 FFFFFRFLFLFRFF 16 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 16 R 1 FFFFFLFRFRFLFF 16 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 16 R 1 FFFFFLFRFRFLFF 16 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 32 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 16 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 16 L 1
+60
+FFLFRFFRFRFLFLFFLFRFFF 7 L 1 FFRFLFFLFLFRFRFFRFLFFF 7 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 7 L 1 FFLFRFFRFRFLFLFFLFRFFF 14 R 1 FFLFRFFRFRFLFLFFLFRFFF 7 L 1 FFLFRFFRFRFLFLFFLFRFFF 7 R 1 FFRFLFFLFLFRFRFFRFLFFF 7 L 1 FFFFFRFLFLFRFF 7 R 1 FFRFLFFLFLFRFRFFRFLFFF 7 L 1
+FFFFFLFRFRFLFF 14 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 7 R 1 FFLFRFFRFRFLFLFFLFRFFF 7 L 1 FFRFLFFLFLFRFRFFRFLFFF 7 R 1 FFLFRFFRFRFLFLFFLFRFFF 14 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 7 R 1 FFLFRFFRFRFLFLFFLFRFFF 14 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 7 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 R 1 FFFFFFFF 7 L 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 R 1 FFFFFFFF 7 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 7 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 7 L 1 FFLFRFFRFRFLFLFFLFRFFF 7 R 1 FFFFFLFRFRFLFF 7 L 1 FFFFFLFRFRFLFF 7 L 1 FFFFFLFRFRFLFF 14 R 1 FFFFFRFLFLFRFF 7 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 7 R 1
+1
+FFFL 4
+802
+L 1 F 252 L 1 FFFFFFFL 1 F 112 R 1 FFFFFFFR 1 F 119 L 1 FFFFFFFL 1 F 84 R 1 FFFFFFFR 1 F 91 L 1 FFFFFFFR 1 FFFFFFFL 2 F 77 R 1 FFFFFFFR 1
+F 91 L 1 FFFFFFFR 1 F 14 L 1 F 14 L 1 F 112 R 1 FFFFFFFR 1 F 112 L 1 FFFFFFFR 1 F 14 L 1 FFFFFFFL 1 F 154 R 1 FFFFFFFR 1 F 154
+L 1 FFFFFFFR 1 F 14 L 1 F 21 L 1 F 119 R 1 FFFFFFFR 1 F 112 L 1 FFFFFFFR 1 F 14 R 1 FFFFFFFL 2 F 14 R 1 FFFFFFFL 1 FFFFFFFR 1 F 14
+L 1 F 14 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 2 F 42 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 147 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 14 R 1
+FFFFFFFR 1 F 42 R 1 FFFFFFFL 1 F 49 L 1 F 14 R 1 F 21 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 2 FFFFFFFL 1 F 35 L 1 F 28 L 1 F 35 L 1
+FFFFFFFR 1 F 14 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 35 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 2 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 FFFFFFFR 1
+F 63 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 35 R 1 F 42 R 1 F 49 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFL 1 F 42 R 1
+FFFFFFFL 1 F 28 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 14 R 1 FFFFFFFL 1 F 14 L 1 F 21 R 1 F 14 L 1 F 70
+L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 14 R 1 F 14 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 FFFFFFFR 1 F 14
+L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 28 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 14 L 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1
+FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 14 R 1 F 14 R 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 21 R 1 F 14 L 1 F 14 L 1
+FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 2 F 14 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 2 FFFFFFFL 1 F 14 R 1
+FFFFFFFL 2 FFFFFFFR 2 FFFFFFFL 1 F 28 L 1 F 14 R 1 FFFFFFFR 1 F 21 R 1 FFFFFFFL 1 FFFFFFFR 1 F 21 R 1 FFFFFFFL 1 F 21 L 1 FFFFFFFR 2 F 14 L 1
+F 14 L 1 FFFFFFFR 1 F 28 R 1 FFFFFFFL 2 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 2
+F 14 L 1 FFFFFFFR 1 F 14 L 1 F 14 R 1 F 42 L 1 FFFFFFFR 2 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 21 L 1 F 14 R 1 FFFFFFFR 1 FFFFFFFL 1 F 42
+R 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 28 R 1 FFFFFFFL 2 FFFFFFFR 1 F 21 L 1 FFFFFFFR 2 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 35 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 14
+L 1 FFFFFFFR 1 F 28 R 1 FFFFFFFL 1 F 21 L 1 F 42 L 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 35 L 1 FFFFFFFR 1 F 28 L 1 FFFFFFFR 1 F 21
+R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 21 L 1 FFFFFFFR 1 F 14 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFR 1 F 63 R 1 FFFFFFFL 1 F 21 L 1 FFFFFFFR 1
+F 21 L 1 FFFFFFFR 1 F 42 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 14 L 1 F 98 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 21 R 1 FFFFFFFL 1 F 14
+R 1 FFFFFFFL 1 F 35 L 1 F 42 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 63 R 1 FFFFFFFL 1 F 21 R 1 FFFFFFFR 1 F 28 R 1 FFFFFFFL 1 F 203
+L 1 FFFFFFFR 1 F 28 R 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 49 L 1 FFFFFFFR 1 F 14 L 1 FFFFFFFR 1 F 21 L 1 F 28 R 1 FFFFFFFL 1 F 14
+R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 2 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 105 L 1 F 21 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1
+FFFFFFFR 1 FFFFFFFL 2 F 14 L 1 FFFFFFFR 1 F 14 R 1 F 14 L 1 FFFFFFFR 1 F 56 L 1 FFFFFFFR 1 F 28 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 21 R 1
+FFFFFFFL 1 FFFFFFFR 1 F 14 R 1 FFFFFFFR 1 FFFFFFFL 1 F 28 R 1 F 14 L 1 FFFFFFFR 1 FFFFFFFL 1 F 14 L 1 FFFFFFFR 1 F 56 L 1 FFFFFFFR 1 FFFFFFFL 1 F 28
+L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 21 R 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 FFFFFFFR 2 FFFFFFFL 1 FFFFFFFR 1
+FFFFFFFL 1 F 21 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 28 R 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 2 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 21 R 1 FFFFFFFL 2
+FFFFFFFR 1 F 14 L 1 F 21 R 1 FFFFFFFL 2 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 FFFFFFFL 1 F 28 R 1 FFFFFFFR 1 F 14 L 1 F 21
+R 1 FFFFFFFL 1 F 21 R 1 FFFFFFFL 1 F 28 R 1 FFFFFFFR 1 F 49 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 2 FFFFFFFR 1 FFFFFFFL 2 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1
+FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1
+F 14 R 1 FFFFFFFL 1 F 14 R 1 FFFFFFFL 1 F 14 R 1 F 14 L 1 F 49 L 1 FFFFFFFR 1 F 14 L 1 FFFFFFFR 1 F 35 L 1 FFFFFFFL 1 FFFFFFFR 1
+F 21 R 1 FFFFFFFL 1 F 14 L 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 14 R 1 F 28 R 1 FFFFFFFL 1 F 14 R 1 F 21 L 1 FFFFFFFR 1 F 14 L 1
+FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 63 R 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 F 21 R 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 FFFFFFFR 1 F 35
+R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 35 R 1 FFFFFFFL 1 F 14 L 1 F 14 R 1 FFFFFFFL 1 F 14 L 1 F 14 R 1 FFFFFFFL 1 F 28 L 1 FFFFFFFL 1
+F 14 R 1 FFFFFFFR 1 F 21 R 1 F 21 R 1 F 28 L 1 FFFFFFFL 1 F 91 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 35
+L 1 F 112 L 1 F 21 L 1 FFFFFFFR 1 F 14 R 1 FFFFFFFL 1 F 21 R 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 14 R 1 FFFFFFFL 1 F 49 L 1
+FFFFFFFR 1 F 14 R 1 FFFFFFFL 1 F 21 R 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 14 R 1 FFFFFFFL 1 F 21 L 1 F 28 L 1 FFFFFFFR 1 F 14 L 1
+FFFFFFFR 1 F 21 R 1 FFFFFFFL 1 FFFFFFFR 1 FFFFFFFL 1 F 28 L 1 FFFFFFFR 1 F 21 R 1 F 42 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1 F 21 L 1 FFFFFFFR 1
+FFFFFFFL 1 FFFFFFFR 1 F 112 R 1 FFFFFFFL 1 F 14 L 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 F 14 R 1 F 21 L 1 FFFFFFFR 1 F 21 L 1 F 175 R 1
+FFFFFFFR 1 F 161 L 1 F 14 L 1 F 105 R 1 FFFFFFFR 1 F 98 L 1 F 14 L 1 F 14 R 1 FFFFFFFL 1 F 63 R 1 FFFFFFFR 1 F 63 L 1
+F 14 L 1 F 14 R 1 FFFFFFFL 2 FFFFFFFR 1 F 56 R 1 FFFFFFFL 1 F 49 R 1 FFFFFFFR 1 F 98 L 1 FFFFFFFL 1 FFFFFFFR 1 F 14 L 1 FFFFFFFR 1 FFFFFFFL 1
+F 21 R 1
+60
+FFFFFLFRFRFLFF 8 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 8 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 16 L 1 FFRFLFFLFLFRFRFFRFLFFF 8 L 1 FFFFFFFF 16 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 8 L 1 FFLFRFFRFRFLFLFFLFRFFF 8 R 1 FFFFFRFLFLFRFF 8 L 1 FFFFFLFRFRFLFF 8 R 1 FFLFRFFRFRFLFLFFLFRFFF 8 L 1
+FFFFFFFF 16 L 1 FFFFFLFRFRFLFF 8 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 8 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 8 R 1 FFRFLFFLFLFRFRFFRFLFFF 16 L 1 FFLFRFFRFRFLFLFFLFRFFF 8 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 16 L 1 FFFFFFFF 8 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 16 R 1 FFFFFLFRFRFLFF 8 L 1
+FFFFFRFLFLFRFF 16 R 1 FFFFFRFLFLFRFF 8 L 1 FFFFFLFRFRFLFF 8 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 8 L 1 FFFFFRFLFLFRFF 8 R 1 FFLFRFFRFRFLFLFFLFRFFF 8 L 1 FFLFRFFRFRFLFLFFLFRFFF 8 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 16 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 8 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 8 R 1
+15
+F 2000 L 1 F 2000 L 1 FRFLFLFRFLFRFRFL 1000 F 414 L 1 FRFLFLFRFLFRFRFL 1000 F 50 L 1 F 2415 L 1 F 1128 LFR 1 F 922
+60
+FFLFRFFRFRFLFLFFLFRFFF 18 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 18 L 1 FFRFLFFLFLFRFRFFRFLFFF 36 R 1 FFLFRFFRFRFLFLFFLFRFFF 18 R 1 FFLFRFFRFRFLFLFFLFRFFF 36 L 1 FFRFLFFLFLFRFRFFRFLFFF 18 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 18 L 1 FFRFLFFLFLFRFRFFRFLFFF 18 R 1 FFFFFLFRFRFLFF 18 L 1 FFFFFRFLFLFRFF 18 R 1
+FFFFFRFLFLFRFF 36 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 18 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 18 R 1 FFFFFRFLFLFRFF 18 L 1 FFRFLFFLFLFRFRFFRFLFFF 36 R 1 FFLFRFFRFRFLFLFFLFRFFF 18 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 36 R 1 FFFFFRFLFLFRFF 18 R 1 FFLFRFFRFRFLFLFFLFRFFF 36 L 1 FFRFLFFLFLFRFRFFRFLFFF 18 R 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 36 L 1 FFFFFRFLFLFRFF 18 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 18 L 1 FFLFRFFRFRFLFLFFLFRFFF 18 R 1 FFFFFLFRFRFLFF 18 L 1 FFFFFLFRFRFLFF 18 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 18 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 36 L 1 FFFFFFFF 18 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 18 L 1
+60
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 14 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 28 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 L 1 FFFFFRFLFLFRFF 28 R 1 FFFFFRFLFLFRFF 14 L 1 FFRFLFFLFLFRFRFFRFLFFF 14 R 1 FFFFFFFF 14 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 14 R 1 FFRFLFFLFLFRFRFFRFLFFF 14 L 1
+FFFFFFFF 28 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 14 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 14 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 14 R 1 FFLFRFFRFRFLFLFFLFRFFF 28 L 1 FFRFLFFLFLFRFRFFRFLFFF 14 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 28 L 1 FFFFFLFRFRFLFF 14 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 28 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 L 1
+FFFFFFFF 28 R 1 FFLFRFFRFRFLFLFFLFRFFF 14 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 14 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 14 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 14 L 1 FFLFRFFRFRFLFLFFLFRFFF 14 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 28 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 14 L 1 FFFFFFFF 14 R 1
+20
+F 240 L 1 F 240 L 1 F 240 L 1 F 80 L 1 F 100 R 1 F 20 L 1 F 60 R 1 F 60 R 1 F 160 L 1 F 80 L 1
+60
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFFFFFF 4 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1 FFFFFFFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1
+FFFFFLFRFRFLFF 4 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFFFLFRFRFLFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFFFRFLFLFRFF 4 L 1 FFFFFRFLFLFRFF 2 R 1
+FFFFFFFF 4 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFFFFLFRFRFLFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1 FFFFFFFF 4 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1
+32
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFRFLFFLFLFRFRFFRFLFFF 3 L 1 FFFFFLFRFRFLFF 2 R 1 FFLFRFFRFRFLFLFFLFRFFF 3 R 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFRFLFFLFLFRFRFFRFLFFF 3 R 1 FFLFRFFRFRFLFLFFLFRFFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 R 1 FFFFFRFLFLFRFF 2 R 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 5 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFFFFLFRFRFLFF 2 L 1
+10
+FFLFRFFRFRFLFLFFLFRFFF 10 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 8 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 16 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 8 R 1 FFLFRFFRFRFLFLFFLFRFFF 6 L 1
+58
+FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFFFFLFRFRFLFF 4 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 4 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 6 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 R 1
+FFLFRFFRFRFLFLFFLFRFFF 8 R 1 FFFFFLFRFRFLFF 4 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFFFFLFRFRFLFF 4 R 1 FFFFFRFLFLFRFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 8 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1
+FFRFLFFLFLFRFRFFRFLFFF 12 L 1 FFFFFLFRFRFLFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFFFFLFRFRFLFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 6 R 1 FFFFFFFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 R 1
+60
+FFFFFRFLFLFRFF 12 L 1 FFFFFRFLFLFRFF 12 R 1 FFFFFLFRFRFLFF 24 L 1 FFLFRFFRFRFLFLFFLFRFFF 12 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 24 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 12 R 1 FFRFLFFLFLFRFRFFRFLFFF 12 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 12 R 1 FFFFFLFRFRFLFF 12 L 1
+FFLFRFFRFRFLFLFFLFRFFF 24 L 1 FFLFRFFRFRFLFLFFLFRFFF 12 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 12 L 1 FFFFFFFF 12 R 1 FFFFFFFF 24 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 R 1 FFFFFLFRFRFLFF 24 L 1 FFFFFRFLFLFRFF 12 L 1 FFFFFRFLFLFRFF 24 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 12 L 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 24 R 1 FFRFLFFLFLFRFRFFRFLFFF 12 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 12 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 L 1 FFFFFLFRFRFLFF 12 R 1 FFFFFFFF 12 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 L 1 FFLFRFFRFRFLFLFFLFRFFF 24 R 1 FFLFRFFRFRFLFLFFLFRFFF 12 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 12 R 1
+9
+F 6 R 1 F 4 RFF 2 LFF 1 LFFFR 1 F 2 R 1 F 5
+56
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFFFLFRFRFLFF 1 L 1 FFFFFRFLFLFRFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFFFFFFF 1 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 4 L 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 L 1 FFFFFLFRFRFLFF 1 R 1 FFFFFLFRFRFLFF 6 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 1 L 1 FFFFFRFLFLFRFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFFFFFFF 1 L 1 FFLFRFFRFRFLFLFFLFRFFF 1 R 1 FFFFFRFLFLFRFF 3 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 R 1
+FFFFFLFRFRFLFF 7 L 1 FFFFFRFLFLFRFF 1 L 1 FFFFFFFF 1 R 1 FFFFFRFLFLFRFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 L 1 FFFFFRFLFLFRFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 3 L 1
+60
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 5 R 1 FFFFFFFF 5 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 10 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 5 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 10 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 5 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 5 L 1 FFFFFLFRFRFLFF 5 R 1 FFRFLFFLFLFRFRFFRFLFFF 5 L 1 FFLFRFFRFRFLFLFFLFRFFF 5 R 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 10 R 1 FFLFRFFRFRFLFLFFLFRFFF 5 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 5 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 5 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 10 R 1 FFFFFFFF 5 L 1 FFFFFRFLFLFRFF 10 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 5 R 1 FFFFFFFF 10 L 1 FFFFFFFF 5 R 1
+FFRFLFFLFLFRFRFFRFLFFF 10 L 1 FFFFFFFF 5 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 5 L 1 FFRFLFFLFLFRFRFFRFLFFF 5 R 1 FFFFFFFF 5 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 5 R 1 FFFFFFFF 5 R 1 FFFFFFFF 10 L 1 FFFFFRFLFLFRFF 5 R 1 FFFFFRFLFLFRFF 5 L 1
+60
+FFFFFRFLFLFRFF 10 L 1 FFFFFRFLFLFRFF 10 R 1 FFLFRFFRFRFLFLFFLFRFFF 20 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 10 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 20 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 10 L 1 FFFFFLFRFRFLFF 10 R 1 FFFFFFFF 10 L 1 FFFFFLFRFRFLFF 10 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 10 L 1
+FFLFRFFRFRFLFLFFLFRFFF 20 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 10 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 10 L 1 FFFFFRFLFLFRFF 10 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 20 L 1 FFFFFLFRFRFLFF 10 R 1 FFFFFFFF 20 L 1 FFLFRFFRFRFLFLFFLFRFFF 10 L 1 FFFFFRFLFLFRFF 20 R 1 FFFFFFFF 10 L 1
+FFRFLFFLFLFRFRFFRFLFFF 20 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 10 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 10 R 1 FFLFRFFRFRFLFLFFLFRFFF 10 L 1 FFFFFRFLFLFRFF 10 R 1 FFLFRFFRFRFLFLFFLFRFFF 10 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 10 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 20 R 1 FFFFFRFLFLFRFF 10 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 10 R 1
+58
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 R 1 FFFFFRFLFLFRFF 4 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 2 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 L 1 FFFFFFFF 2 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 6 R 1
+FFLFRFFRFRFLFLFFLFRFFF 8 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 L 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 4 R 1 FFFFFRFLFLFRFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 6 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 8 L 1 FFFFFRFLFLFRFF 2 L 1 FFLFRFFRFRFLFLFFLFRFFF 2 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 12 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 4 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 2 L 1 FFFFFLFRFRFLFF 2 R 1 FFFFFLFRFRFLFF 6 R 1 FFFFFFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 12 R 1
+21
+L 1 F 27 R 1 F 135 L 1 F 108 L 1 F 324 L 1 F 324 L 1 F 324 L 1 F 108 L 1 F 216 R 1 F 81 R 1 F 81
+L 1
+22
+F 160 L 1 F 240 L 1 F 240 L 1 F 80 L 1 F 100 R 1 F 20 L 1 F 60 R 1 F 60 R 1 F 160 L 1 F 80 L 1
+F 80 R 1
+15
+F 2000 R 1 F 2000 R 1 FLFRFRFLFRFLFLFR 1000 F 420 R 1 FLFRFRFLFRFLFLFR 1000 F 50 R 1 F 2421 R 1 F 1060 RFL 1 F 990
+15
+F 3000 LFL 1 F 3000 R 1 F 2999 LFL 1 F 3000 R 1 F 2999 LFL 1 F 2999 R 1 F 2999 LFL 1 F 3000
+56
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 2 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 1 L 1 FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 3 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 L 1
+FFRFLFFLFLFRFRFFRFLFFF 1 L 1 FFLFRFFRFRFLFLFFLFRFFF 1 R 1 FFFFFLFRFRFLFF 6 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 L 1 FFFFFLFRFRFLFF 2 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 1 L 1 FFFFFFFF 1 L 1 FFFFFRFLFLFRFF 1 R 1 FFLFRFFRFRFLFLFFLFRFFF 3 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 7 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 1 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 L 1 FFFFFLFRFRFLFF 1 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 2 R 1 FFRFLFFLFLFRFRFFRFLFFF 2 R 1 FFFFFRFLFLFRFF 3 L 1
+10
+FFFFFRFLFLFRFF 5 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFLFRFFRFRFLFLFFLFRFFF 8 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFFFFFFF 3 L 1
+60
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFFFFFFF 4 L 1 FFFFFFFF 8 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFRFLFFLFLFRFRFFRFLFFF 8 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 L 1 FFFFFLFRFRFLFF 4 R 1
+FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 8 R 1 FFRFLFFLFLFRFRFFRFLFFF 4 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 8 R 1 FFLFRFFRFRFLFLFFLFRFFF 4 L 1 FFLFRFFRFRFLFLFFLFRFFF 8 R 1 FFFFFRFLFLFRFF 4 R 1 FFLFRFFRFRFLFLFFLFRFFF 8 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 R 1
+FFLFRFFRFRFLFLFFLFRFFF 8 L 1 FFFFFRFLFLFRFF 4 R 1 FFRFLFFLFLFRFRFFRFLFFF 4 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 4 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 4 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 4 R 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 8 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 4 R 1 FFFFFLFRFRFLFF 4 L 1
+60
+FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 20 L 1 FFFFFRFLFLFRFF 20 R 1 FFLFRFFRFRFLFLFFLFRFFF 40 L 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 20 L 1 FFRFLFFLFLFRFRFFRFLFFF 40 R 1 FFFFFLFRFRFLFF 20 L 1 FFFFFLFRFRFLFF 20 R 1 FFFFFRFLFLFRFF 20 L 1 FFRFLFFLFLFRFRFFRFLFFF 20 R 1 FFFFFRFLFLFRFF 20 L 1
+FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 40 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 20 R 1 FFRFLFFLFLFRFRFFRFLFFF 20 L 1 FFFFFFFF 20 R 1 FFLFRFFRFRFLFLFFLFRFFF 40 L 1 FFFFFFFF 20 R 1 FFFFFRFLFLFRFF 40 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 20 L 1 FFFFFRFLFLFRFF 40 R 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 20 L 1
+FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 40 R 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 20 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 20 R 1 FFLFRFFRFRFLFLFFLFRFFF 20 L 1 FFFLFFRFFRFRFLFFRFLFLFFLFFRFFF 20 R 1 FFLFRFFRFRFLFLFFLFRFFF 20 L 1 FFFFFLFRFRFLFF 20 L 1 FFFRFFLFFLFLFRFFLFRFRFFRFFLFFF 40 R 1 FFLFRFLFRFRFFRFLFFLFFLFFFRFRFLFF 20 L 1 FFRFLFRFLFLFFLFRFFRFFRFFFLFLFRFF 20 R 1
diff --git a/codejam_2008/src/y2008round3/A-large-practice.out b/codejam_2008/src/y2008round3/A-large-practice.out
new file mode 100644
index 0000000..0fa716d
--- /dev/null
+++ b/codejam_2008/src/y2008round3/A-large-practice.out
@@ -0,0 +1,81 @@
+Case #1: -5871790
+Case #2: -45040882
+Case #3: -452246
+Case #4: -604223118
+Case #5: -15531742499
+Case #6: -1067154
+Case #7: -39522029450
+Case #8: -91793
+Case #9: -465724
+Case #10: -7911011698
+Case #11: -214271942
+Case #12: -109988332
+Case #13: -443058
+Case #14: -1538884907
+Case #15: -962293830
+Case #16: -39279062110
+Case #17: -6068307
+Case #18: -6069512
+Case #19: -271195
+Case #20: -961556
+Case #21: -15030856
+Case #22: -34802716
+Case #23: -3188759279
+Case #24: -240633
+Case #25: -2869705900
+Case #26: -50343042
+Case #27: -388527
+Case #28: -325281100
+Case #29: -107640
+Case #30: -780097
+Case #31: -1095642
+Case #32: -80180418
+Case #33: -35990993001
+Case #34: -112676
+Case #35: -305656
+Case #36: -384256
+Case #37: -107696
+Case #38: -448669
+Case #39: -59347703
+Case #40: -39495168881
+Case #41: -451610
+Case #42: -1905072
+Case #43: -5112086
+Case #44: -51656936
+Case #45: -274376
+Case #46: -9004494500
+Case #47: -2528575525
+Case #48: -409073
+Case #49: -3127105595
+Case #50: -391175
+Case #51: -37136686100
+Case #52: -461206
+Case #53: -1553937077
+Case #54: -7969364
+Case #55: -1091240089
+Case #56: -101809003
+Case #57: -12
+Case #58: -477683146
+Case #59: -136770954
+Case #60: -37463927230
+Case #61: -1595041685
+Case #62: -805545419
+Case #63: -13695600
+Case #64: -1888568
+Case #65: -503957
+Case #66: -1127258
+Case #67: -6295756
+Case #68: -406763477
+Case #69: -138
+Case #70: -293638
+Case #71: -29858759
+Case #72: -229705010
+Case #73: -6483671
+Case #74: -11983486
+Case #75: -5599600
+Case #76: -37615695346
+Case #77: -18008989000
+Case #78: -363343
+Case #79: -123622
+Case #80: -17279851
+Case #81: -2059848893
diff --git a/codejam_2008/src/y2008round3/A-small-practice.in b/codejam_2008/src/y2008round3/A-small-practice.in
new file mode 100644
index 0000000..ba52ffe
--- /dev/null
+++ b/codejam_2008/src/y2008round3/A-small-practice.in
@@ -0,0 +1,233 @@
+70
+95
+FFFFFFFFL 1 F 16 R 1 F 20 L 1 FFFFR 2 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 2 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 F 20 L 1 FFFFFFFFR 1 FFFFL 1
+FFFFFFFFL 2 F 12 R 1 F 12 R 1 FFFFR 1 FFFFL 1 F 12 R 1 FFFFL 1 F 12 R 1 F 40 R 1 FFFFL 1 F 12 R 1 FFFFL 1 FFFFR 1 F 12
+R 1 FFFFFFFFL 1 FFFFFFFFR 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFL 1 F 40 R 1 FFFFFFFFL 2 F 12 L 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFFFFFL 1 F 16
+R 1 FFFFR 1 F 36 R 1 FFFFR 1 FFFFL 2 FFFFR 1 FFFFL 2 FFFFFFFFR 1 F 12 R 1 F 16 L 1 FFFFR 2 F 12 L 1 FFFFFFFFL 1 F 12 R 1 F 20
+R 1 F 12 L 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFR 2 FFFFL 1 FFFFR 1 F 24 L 1 FFFFFFFFR 1 FFFFFFFFL 1 F 12 L 1 FFFFFFFFL 1
+26
+FFFFFFR 1 FFFFR 1 FFFFFR 1 FL 2 FFFL 1 FL 1 FR 1 FFFFFR 1 FFR 1 FFL 1 FL 1 FFFFFL 1 FL 1 FFR 2 FFFFFR 1 FL 2 FFFL 1 FL 1 FR 1 FFFFFR 2
+FFFFFFFR 1 FFFFFFFFFFR 1 F 15 R 1 FFFFFFFFFR 1 FL 1
+14
+L 1 FR 1 FFFFFL 1 FFFFL 1 F 12 L 1 F 12 L 1 F 12 L 1 FFFFL 1 FFFFFFFFR 1 FFFR 1 FFFL 1
+10
+FFLFRFRFFLFLFRFF 5 L 1 FFFRFLFLFRFF 4 L 1 FFFFFF 8 L 1 FFFRFLFLFRFF 4 L 1 FFRFLFLFFRFRFLFF 3 R 1
+60
+FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFLFFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1
+FFFFFF 2 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFLFFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1
+FFRFLFLFFRFRFLFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 R 1
+60
+FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1
+FFFRFLFLFRFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFFFFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1
+FFLFRFRFLFFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1
+60
+FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFRFFF 2 R 1 FFFFFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1
+FFRFLFLFRFFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFLFRFRFLFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 2 R 1 FFFLFRFRFLFF 1 L 1 FFRFLFLFRFFF 2 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFFLFRFRFLFF 1 R 1
+FFRFLFLFRFFF 2 L 1 FFRFLFLFRFFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFLFRFRFLFF 1 R 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 L 1
+60
+FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFLFFF 2 L 1 FFFRFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1
+FFFRFLFLFRFF 2 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFFRFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFFFF 1 L 1
+FFLFRFRFFLFLFRFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1
+32
+FFRFLFLFFRFRFLFF 3 R 1 FFRFLFLFFRFRFLFF 3 R 1 FFLFRFRFLFFF 3 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFFRFLFLFRFF 3 R 1 FFFRFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 3 R 1 FFFRFLFLFRFF 2 L 1 FFRFLFLFFRFRFLFF 3 R 1 FFLFRFRFLFFF 2 R 1
+FFFFFF 2 L 1 FFLFRFRFFLFLFRFF 3 R 1 FFLFRFRFFLFLFRFF 5 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFFFF 2 L 1
+32
+FFRFLFLFFRFRFLFF 3 R 1 FFLFRFRFLFFF 3 R 1 FFFFFF 3 L 1 FFFRFLFLFRFF 2 R 1 FFFRFLFLFRFF 3 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 3 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFLFRFRFFLFLFRFF 3 R 1 FFRFLFLFFRFRFLFF 2 R 1
+FFRFLFLFFRFRFLFF 2 L 1 FFFFFF 3 R 1 FFFRFLFLFRFF 5 R 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFRFLFLFFRFRFLFF 2 L 1
+58
+FFFFFF 1 L 1 FFFFFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 3 L 1 FFFRFLFLFRFF 1 L 1 FFFFFF 3 R 1
+FFFRFLFLFRFF 4 R 1 FFFRFLFLFRFF 2 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 3 R 1 FFFRFLFLFRFF 4 L 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 1 R 1
+FFFFFF 6 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 3 R 1 FFFFFF 2 R 1 FFLFRFRFLFFF 6 R 1
+60
+FFRFLFLFRFFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFLFRFRFLFF 2 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFRFFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFRFFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1
+FFRFLFLFRFFF 2 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 2 R 1 FFRFLFLFRFFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1
+FFRFLFLFFRFRFLFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 L 1
+15
+F 100 LFL 1 F 100 R 1 F 99 LFL 1 F 100 R 1 F 99 LFL 1 F 99 R 1 F 99 LFL 1 F 100
+10
+FFLFRFRFFLFLFRFF 5 L 1 FFFRFLFLFRFF 4 L 1 FFLFRFRFFLFLFRFF 8 L 1 FFLFRFRFFLFLFRFF 4 L 1 FFFFFF 3 R 1
+32
+FFFFFF 3 R 1 FFFRFLFLFRFF 3 R 1 FFLFRFRFLFFF 3 L 1 FFFFFF 2 R 1 FFFRFLFLFRFF 3 R 1 FFFFFF 1 L 1 FFLFRFRFLFFF 3 R 1 FFFRFLFLFRFF 2 L 1 FFLFRFRFFLFLFRFF 3 R 1 FFLFRFRFFLFLFRFF 2 R 1
+FFFFFF 2 L 1 FFFFFF 3 R 1 FFFFFF 5 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 2 L 1
+97
+R 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 F 20 L 1 FFFFFFFFR 1 FFFFL 1 FFFFFFFFL 2 F 12 R 1 F 12 R 1 FFFFR 1 FFFFL 1 F 12 R 1 FFFFL 1
+F 12 R 1 F 40 R 1 FFFFL 1 F 12 R 1 FFFFL 1 FFFFR 1 F 12 R 1 FFFFFFFFL 1 FFFFFFFFR 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFFFFFL 1 FFFFL 1 F 40 R 1
+FFFFFFFFL 2 F 12 L 1 FFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFL 1 FFFFFFFFR 1 FFFFFFFFL 1 F 16 R 1 FFFFR 1 F 36 R 1 FFFFR 1 FFFFL 2 FFFFR 1 FFFFL 2 FFFFFFFFR 1 F 12
+R 1 F 16 L 1 FFFFR 2 F 12 L 1 FFFFFFFFL 1 F 12 R 1 F 20 R 1 F 12 L 1 FFFFFFFFR 1 FFFFFFFFL 1 FFFFR 2 FFFFL 1 FFFFR 1 F 24 L 1
+FFFFFFFFR 1 FFFFFFFFL 1 F 12 L 1 F 16 L 1 F 16 R 1 F 20 L 1 FFFFR 2 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1 FFFFL 1 FFFFR 1
+17
+F 15 L 1 FFFFFFL 1 FFFFL 1 FFL 1 FFR 2 FFFFFFFFFFR 1 FFFFFFFFR 1 FFFR 1 FL 1 FR 2 FL 2 FFL 1 FFFFFFL 1 FFFFFFFFL 1 F 13 L 1
+10
+FFFFFF 10 L 1 FFLFRFRFFLFLFRFF 8 L 1 FFLFRFRFFLFLFRFF 16 L 1 FFFRFLFLFRFF 8 L 1 FFFRFLFLFRFF 6 R 1
+58
+FFFFFF 1 L 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFFFFF 1 L 1 FFLFRFRFLFFF 2 R 1 FFFRFLFLFRFF 2 R 1 FFFFFF 3 L 1 FFFRFLFLFRFF 1 L 1 FFFFFF 3 R 1
+FFRFLFLFFRFRFLFF 4 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 3 R 1 FFLFRFRFLFFF 4 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 R 1
+FFLFRFRFLFFF 6 L 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 3 R 1 FFLFRFRFFLFLFRFF 2 R 1 FFFFFF 6 R 1
+60
+FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFRFFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFRFFF 1 R 1
+FFRFLFLFFRFRFLFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFLFRFRFLFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1
+FFRFLFLFRFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFRFLFLFRFFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFLFRFRFLFF 1 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFFFFF 1 R 1 FFRFLFLFRFFF 1 L 1
+13
+R 1 F 12 L 1 FFFFL 1 FFFFFR 1 FL 1 FFFR 2 FFFFFFFFL 1 FFFFL 1 F 12 L 1 F 12 L 1
+56
+FFRFLFLFRFFF 1 R 1 FFRFLFLFFRFRFLFF 3 L 1 FFFLFRFRFLFF 4 L 1 FFFFFF 2 R 1 FFRFLFLFRFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 R 1 FFRFLFLFRFFF 1 R 1 FFRFLFLFFRFRFLFF 3 L 1 FFLFRFRFFLFLFRFF 4 R 1
+FFRFLFLFFRFRFLFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 6 R 1 FFFFFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFFLFRFRFLFF 1 R 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFFFFF 3 L 1 FFRFLFLFFRFRFLFF 2 L 1
+FFLFRFRFFLFLFRFF 7 R 1 FFFLFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFRFFF 2 R 1 FFFLFRFRFLFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFFFFF 2 L 1 FFFFFF 3 R 1
+32
+FFFFFF 3 L 1 FFRFLFLFFRFRFLFF 3 L 1 FFFFFF 3 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFFLFRFRFLFF 3 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 3 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFFLFRFRFLFF 3 L 1 FFFFFF 2 L 1
+FFRFLFLFRFFF 2 R 1 FFLFRFRFFLFLFRFF 3 L 1 FFFFFF 5 L 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFFLFLFRFF 2 R 1
+60
+FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFLFFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1
+FFLFRFRFLFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1
+FFFFFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1
+56
+FFFRFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 3 R 1 FFFFFF 4 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFLFRFRFLFFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 L 1 FFFRFLFLFRFF 3 R 1 FFLFRFRFFLFLFRFF 4 L 1
+FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFLFFF 6 L 1 FFFRFLFLFRFF 1 L 1 FFFFFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 3 R 1 FFFRFLFLFRFF 2 R 1
+FFFRFLFLFRFF 7 L 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFFLFLFRFF 2 R 1 FFFRFLFLFRFF 3 L 1
+10
+FFRFLFLFRFFF 5 R 1 FFRFLFLFRFFF 4 R 1 FFRFLFLFRFFF 8 R 1 FFLFRFRFFLFLFRFF 4 R 1 FFFFFF 3 L 1
+60
+FFRFLFLFRFFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFFLFRFRFLFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1
+FFFLFRFRFLFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 2 R 1 FFFLFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1
+FFLFRFRFFLFLFRFF 2 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFRFFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFLFRFRFLFF 1 L 1
+60
+FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1
+FFFFFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFFLFRFRFLFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 R 1
+FFFFFF 2 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFLFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFLFRFRFLFF 1 L 1
+60
+FFLFRFRFLFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFLFRFRFLFFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 1 L 1
+FFRFLFLFFRFRFLFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFLFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFLFRFRFLFFF 2 R 1 FFFFFF 1 L 1
+FFFFFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1 FFFFFF 1 R 1
+10
+FFFFFF 5 L 1 FFFRFLFLFRFF 4 L 1 FFLFRFRFFLFLFRFF 8 L 1 FFFFFF 4 L 1 FFRFLFLFFRFRFLFF 3 R 1
+7
+FLFR 99 FL 2 F 1 FLFR 198 FL 2 F 1 FLFR 99
+84
+L 1 FFFFFFR 1 FFFFFFFFFL 1 FFFL 1 FFFR 1 F 12 L 1 FFFFFFFFFL 1 FFFFFFR 1 FFFR 1 FFFL 1 FFFR 2 FFFL 2 F 27 L 1 FFFL 1 F 12 R 1 FFFFFFL 1 FFFFFFR 1
+FFFL 1 FFFFFFR 1 FFFL 1 FFFR 1 FFFFFFFFFR 1 FFFFFFR 1 FFFFFFL 1 F 30 R 1 FFFR 1 FFFFFFL 1 FFFR 1 FFFL 2 FFFFFFR 1 FFFFFFL 1 FFFFFFFFFL 1 FFFR 1 FFFL 1 FFFFFFFFFR 1 FFFL 1
+F 30 L 1 FFFFFFFFFR 1 FFFL 1 FFFFFFFFFR 1 FFFL 2 FFFFFFFFFL 1 FFFFFFFFFR 1 FFFFFFR 2 FFFL 1 FFFFFFR 1 F 15 L 1 FFFR 1 FFFL 1 FFFR 1 FFFL 2 FFFR 1 FFFL 1 FFFR 1
+FFFL 1 FFFR 1 FFFL 2 FFFR 1 F 15 L 1 F 12 R 1 F 12 R 1 FFFFFFFFFR 1 FFFFFFL 1 FFFFFFR 1 F 18 L 1 FFFR 1 FFFL 2 FFFR 1 FFFFFFL 1 FFFFFFR 1
+FFFFFFFFFL 1 F 15 L 1 FFFFFFFFFR 1
+58
+FFLFRFRFLFFF 1 L 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFLFRFRFLFFF 2 R 1 FFFFFF 2 R 1 FFLFRFRFFLFLFRFF 3 L 1 FFFFFF 1 L 1 FFFFFF 3 R 1
+FFFRFLFLFRFF 4 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 3 R 1 FFLFRFRFLFFF 4 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1
+FFLFRFRFLFFF 6 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 3 R 1 FFFFFF 2 R 1 FFFRFLFLFRFF 6 R 1
+56
+FFFLFRFRFLFF 1 R 1 FFFLFRFRFLFF 3 L 1 FFFFFF 4 L 1 FFFFFF 2 R 1 FFFFFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFRFLFLFRFFF 1 R 1 FFFLFRFRFLFF 1 R 1 FFFFFF 3 L 1 FFRFLFLFRFFF 4 R 1
+FFFFFF 1 R 1 FFFFFF 1 L 1 FFFFFF 6 R 1 FFFFFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFLFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 3 L 1 FFLFRFRFFLFLFRFF 2 L 1
+FFFFFF 7 R 1 FFFLFRFRFLFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFFLFRFRFLFF 2 L 1 FFFFFF 3 R 1
+12
+FFFFFFFFR 1 F 12 R 1 F 12 R 1 FFFFR 1 FFFFFL 1 FR 1 FFFL 2 FFFFFFFFR 1 FFFFR 1 FFFFL 1
+10
+FFLFRFRFFLFLFRFF 10 L 1 FFLFRFRFFLFLFRFF 8 L 1 FFFFFF 16 L 1 FFFRFLFLFRFF 8 L 1 FFFFFF 6 R 1
+60
+FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFLFRFRFLFF 2 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFRFLFLFRFFF 1 R 1
+FFLFRFRFFLFLFRFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFFFFF 1 L 1 FFFLFRFRFLFF 2 R 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFRFLFLFRFFF 1 R 1
+FFFLFRFRFLFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFRFFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1
+60
+FFFFFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFRFFF 2 R 1 FFFFFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFRFLFLFRFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 1 R 1
+FFRFLFLFFRFRFLFF 2 R 1 FFRFLFLFRFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFLFRFRFLFF 2 R 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFRFFF 1 R 1
+FFFFFF 2 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFFLFRFRFLFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1
+32
+FFLFRFRFFLFLFRFF 3 R 1 FFFFFF 3 R 1 FFFFFF 3 L 1 FFLFRFRFLFFF 2 R 1 FFRFLFLFFRFRFLFF 3 R 1 FFFFFF 1 L 1 FFFRFLFLFRFF 3 R 1 FFFFFF 2 L 1 FFLFRFRFLFFF 3 R 1 FFFFFF 2 R 1
+FFFFFF 2 L 1 FFFFFF 3 R 1 FFLFRFRFLFFF 5 R 1 FFFRFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFRFLFLFFRFRFLFF 2 L 1
+60
+FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1
+FFRFLFLFFRFRFLFF 2 L 1 FFLFRFRFLFFF 1 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFFFF 1 L 1
+FFRFLFLFFRFRFLFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 1 L 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1
+12
+FFFL 1 FFFFFFR 1 FR 1 FFFL 1 FFFFR 1 FR 1 FFFFL 1 FFFFFFFR 1 FR 1 FFFFL 1 FFFR 1 FR 1
+58
+FFLFRFRFLFFF 1 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFFFFF 2 L 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFLFFF 2 R 1 FFFFFF 2 R 1 FFFFFF 3 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 3 R 1
+FFLFRFRFFLFLFRFF 4 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 3 R 1 FFLFRFRFFLFLFRFF 4 L 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 1 R 1
+FFFRFLFLFRFF 6 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFLFFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFLFRFRFFLFLFRFF 3 R 1 FFRFLFLFFRFRFLFF 2 R 1 FFLFRFRFLFFF 6 R 1
+9
+F 6 R 1 F 4 RFF 2 LFF 1 LFFFR 1 F 2 R 1 F 5
+56
+FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFFRFRFLFF 3 L 1 FFFLFRFRFLFF 4 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFFFFF 1 R 1 FFFLFRFRFLFF 1 R 1 FFLFRFRFFLFLFRFF 3 L 1 FFFFFF 4 R 1
+FFRFLFLFRFFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 6 R 1 FFRFLFLFRFFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 3 L 1 FFLFRFRFFLFLFRFF 2 L 1
+FFRFLFLFFRFRFLFF 7 R 1 FFRFLFLFRFFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFRFLFLFRFFF 2 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFFRFRFLFF 2 L 1 FFLFRFRFFLFLFRFF 3 R 1
+51
+F 16 L 1 F 20 L 1 F 16 L 1 F 18 L 1 F 14 L 1 F 16 L 1 F 12 L 1 F 14 L 1 FFFFFFFFFFL 1 F 12 L 1 FFFFFFFFL 1
+FFFFFFFFFFL 1 FFFFFFL 1 FFFFFFFFL 1 FFFFL 1 FFFFFFL 1 FFL 2 FR 1 FFFR 1 FFR 1 FFFFFFR 1 FFFFR 1 FFFFFFFFR 1 FFFFFFR 1 FFFFFFFFFFR 1 FFFFFFFFR 1 F 12 R 1 FFFFFFFFFFR 1 F 14 R 1
+F 12 R 1 F 16 R 1 F 14 R 1 F 18 R 1 F 15 L 1 FL 1
+32
+FFFFFF 3 R 1 FFRFLFLFFRFRFLFF 3 R 1 FFRFLFLFFRFRFLFF 3 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFFRFLFLFRFF 3 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 3 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFFFFF 3 R 1 FFLFRFRFFLFLFRFF 2 R 1
+FFLFRFRFLFFF 2 L 1 FFLFRFRFFLFLFRFF 3 R 1 FFRFLFLFFRFRFLFF 5 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFLFFF 2 L 1
+12
+F 12 L 1 F 12 L 1 F 12 L 1 FFFFL 1 FFFFFR 1 FL 1 FFFR 2 FFFFFFFFL 1 FFFFL 1
+56
+FFFRFLFLFRFF 1 L 1 FFFFFF 3 R 1 FFLFRFRFLFFF 4 R 1 FFFRFLFLFRFF 2 L 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 3 R 1 FFLFRFRFFLFLFRFF 4 L 1
+FFFRFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFFFFF 6 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFFFFF 3 R 1 FFFFFF 2 R 1
+FFFRFLFLFRFF 7 L 1 FFFFFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFFFFF 2 R 1 FFLFRFRFLFFF 3 L 1
+19
+F 12 R 1 FFFFFL 1 FFFFFFFR 1 FFFFFFFFFFR 1 F 11 R 1 FFFFFFFFFFL 1 FFR 1 FR 1 FFFR 1 FFFFFFFFFFL 1 FFFFFFFFFL 1 FFFFFFFFL 1 FFFFFFFR 1 FFFFFL 1 F 11 R 1 FR 1
+60
+FFFFFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFFLFRFRFLFF 2 R 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFLFRFRFLFF 1 R 1
+FFFFFF 2 R 1 FFFLFRFRFLFF 1 L 1 FFRFLFLFRFFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 2 L 1 FFFLFRFRFLFF 1 R 1
+FFFFFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFRFFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1
+8
+R 1 F 100 RFR 1 F 99 L 1 F 99 RFR 1 F 100
+10
+FFLFRFRFFLFLFRFF 10 L 1 FFFFFF 8 L 1 FFRFLFLFFRFRFLFF 16 L 1 FFLFRFRFFLFLFRFF 8 L 1 FFRFLFLFFRFRFLFF 6 R 1
+58
+FFRFLFLFRFFF 1 R 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 R 1 FFRFLFLFRFFF 2 L 1 FFLFRFRFFLFLFRFF 2 L 1 FFFFFF 3 R 1 FFLFRFRFFLFLFRFF 1 R 1 FFFLFRFRFLFF 3 L 1
+FFRFLFLFRFFF 4 L 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFRFLFLFRFFF 1 R 1 FFFFFF 1 R 1 FFFFFF 3 L 1 FFLFRFRFFLFLFRFF 4 R 1 FFRFLFLFRFFF 1 R 1 FFFLFRFRFLFF 1 L 1
+FFFFFF 6 R 1 FFFLFRFRFLFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFFFFF 1 R 1 FFRFLFLFRFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 3 L 1 FFFFFF 2 L 1 FFRFLFLFFRFRFLFF 6 L 1
+10
+FFLFRFRFLFFF 10 L 1 FFFFFF 8 L 1 FFRFLFLFFRFRFLFF 16 L 1 FFRFLFLFFRFRFLFF 8 L 1 FFFFFF 6 R 1
+1
+FFFL 4
+62
+R 1 FFFFFFFL 1 FL 1 F 18 R 1 FFFFFFFFFFR 1 FFFFFFFR 1 FR 1 FFFFFFL 1 FFL 1 FFFFFFFL 1 FR 1 FFFR 1 FFR 1 FFFFFFFFFFL 1 FL 1 F 11 L 1 FR 1 FFFR 1
+FR 1 FL 1 FR 1 F 11 L 1 FL 1 F 11 R 1 FL 1 FFL 1 FFR 1 FFFR 1 F 14 R 1 F 19 R 1 FR 1 F 18 L 1 FL 1
+F 18 R 1 FR 1 F 18 L 1 FL 1 F 17 R 1 FR 1 F 17 L 1 FL 1 F 16 R 1 FR 1 F 16 L 1 FL 1 F 15 R 1
+FR 1 FFFFFFFFR 1
+32
+FFFLFRFRFLFF 3 L 1 FFLFRFRFFLFLFRFF 3 L 1 FFRFLFLFRFFF 3 R 1 FFFLFRFRFLFF 2 L 1 FFRFLFLFRFFF 3 L 1 FFFFFF 1 R 1 FFFFFF 3 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFRFLFLFRFFF 3 L 1 FFRFLFLFFRFRFLFF 2 L 1
+FFFFFF 2 R 1 FFLFRFRFFLFLFRFF 3 L 1 FFRFLFLFFRFRFLFF 5 L 1 FFRFLFLFRFFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFFFFF 2 R 1
+10
+FFLFRFRFFLFLFRFF 10 R 1 FFRFLFLFFRFRFLFF 8 R 1 FFFFFF 16 R 1 FFFLFRFRFLFF 8 R 1 FFLFRFRFFLFLFRFF 6 L 1
+60
+FFFFFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFLFFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1
+FFFFFF 2 L 1 FFLFRFRFLFFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFLFRFRFLFFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFLFRFRFLFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1
+FFRFLFLFFRFRFLFF 2 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFLFFF 1 R 1
+32
+FFFFFF 3 L 1 FFFLFRFRFLFF 3 L 1 FFFFFF 3 R 1 FFFFFF 2 L 1 FFFFFF 3 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFLFRFRFLFF 3 L 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 3 L 1 FFRFLFLFFRFRFLFF 2 L 1
+FFFLFRFRFLFF 2 R 1 FFRFLFLFFRFRFLFF 3 L 1 FFLFRFRFFLFLFRFF 5 L 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 2 R 1
+10
+FFRFLFLFFRFRFLFF 5 L 1 FFFFFF 4 L 1 FFLFRFRFLFFF 8 L 1 FFRFLFLFFRFRFLFF 4 L 1 FFRFLFLFFRFRFLFF 3 R 1
+58
+FFLFRFRFLFFF 1 L 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFLFFF 2 R 1 FFFFFF 3 L 1 FFFRFLFLFRFF 1 L 1 FFFFFF 3 R 1
+FFFRFLFLFRFF 4 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFLFFF 1 L 1 FFFFFF 3 R 1 FFFRFLFLFRFF 4 L 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 R 1
+FFLFRFRFFLFLFRFF 6 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1 FFFRFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFLFFF 3 R 1 FFFFFF 2 R 1 FFLFRFRFLFFF 6 R 1
+56
+FFFFFF 1 L 1 FFLFRFRFLFFF 3 R 1 FFLFRFRFLFFF 4 R 1 FFFRFLFLFRFF 2 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 3 R 1 FFRFLFLFFRFRFLFF 4 L 1
+FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 6 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 3 R 1 FFLFRFRFFLFLFRFF 2 R 1
+FFFFFF 7 L 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFLFFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 2 R 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 3 L 1
+60
+FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFFFFF 2 R 1 FFFLFRFRFLFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFRFFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFLFRFRFLFF 1 L 1 FFFLFRFRFLFF 1 R 1
+FFFFFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFRFFF 1 R 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 R 1
+FFFFFF 2 L 1 FFRFLFLFRFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 R 1 FFFLFRFRFLFF 2 L 1 FFFLFRFRFLFF 1 R 1 FFRFLFLFRFFF 1 L 1
+32
+FFLFRFRFLFFF 3 R 1 FFFRFLFLFRFF 3 R 1 FFFFFF 3 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFRFLFLFFRFRFLFF 3 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 3 R 1 FFLFRFRFLFFF 2 L 1 FFLFRFRFLFFF 3 R 1 FFLFRFRFLFFF 2 R 1
+FFFFFF 2 L 1 FFLFRFRFLFFF 3 R 1 FFFFFF 5 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFFFF 2 L 1
+60
+FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFLFFF 1 L 1
+FFRFLFLFFRFRFLFF 2 L 1 FFFFFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFFFFF 1 L 1
+FFFRFLFLFRFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFLFFF 1 L 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 1 R 1
+60
+FFFRFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1
+FFLFRFRFLFFF 2 L 1 FFFRFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 2 L 1 FFFRFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFFRFLFLFRFF 1 L 1
+FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1
+60
+FFLFRFRFFLFLFRFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1
+FFFRFLFLFRFF 2 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFLFRFRFLFFF 2 L 1 FFLFRFRFLFFF 1 R 1 FFFFFF 2 L 1 FFFFFF 1 L 1 FFRFLFLFFRFRFLFF 2 R 1 FFLFRFRFFLFLFRFF 1 L 1
+FFFRFLFLFRFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFFFFF 1 L 1 FFLFRFRFFLFLFRFF 2 R 1 FFFFFF 1 L 1 FFLFRFRFLFFF 1 R 1
+60
+FFFFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 2 L 1 FFRFLFLFFRFRFLFF 1 L 1 FFFRFLFLFRFF 2 R 1 FFLFRFRFLFFF 1 L 1 FFFFFF 1 R 1 FFFFFF 1 L 1 FFLFRFRFLFFF 1 R 1 FFRFLFLFFRFRFLFF 1 L 1
+FFLFRFRFLFFF 2 L 1 FFRFLFLFFRFRFLFF 1 R 1 FFFFFF 1 L 1 FFFRFLFLFRFF 1 R 1 FFRFLFLFFRFRFLFF 2 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 2 L 1 FFFFFF 1 L 1 FFLFRFRFLFFF 2 R 1 FFLFRFRFLFFF 1 L 1
+FFFRFLFLFRFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFFFFF 1 R 1 FFLFRFRFFLFLFRFF 1 L 1 FFFFFF 1 R 1 FFFRFLFLFRFF 1 L 1 FFFFFF 1 L 1 FFFFFF 2 R 1 FFRFLFLFFRFRFLFF 1 L 1 FFRFLFLFFRFRFLFF 1 R 1
+32
+FFRFLFLFRFFF 3 L 1 FFFFFF 3 L 1 FFRFLFLFFRFRFLFF 3 R 1 FFFFFF 2 L 1 FFRFLFLFRFFF 3 L 1 FFLFRFRFFLFLFRFF 1 R 1 FFFFFF 3 L 1 FFRFLFLFRFFF 2 R 1 FFRFLFLFRFFF 3 L 1 FFFFFF 2 L 1
+FFFFFF 2 R 1 FFFFFF 3 L 1 FFFLFRFRFLFF 5 L 1 FFRFLFLFRFFF 1 R 1 FFLFRFRFFLFLFRFF 2 L 1 FFFLFRFRFLFF 2 R 1
diff --git a/codejam_2008/src/y2008round3/A-small-practice.out b/codejam_2008/src/y2008round3/A-small-practice.out
new file mode 100644
index 0000000..e1fb692
--- /dev/null
+++ b/codejam_2008/src/y2008round3/A-small-practice.out
@@ -0,0 +1,70 @@
+Case #1: -178204
+Case #2: -3343
+Case #3: -463
+Case #4: -33274
+Case #5: -71560
+Case #6: -78036
+Case #7: -84235
+Case #8: -84441
+Case #9: -145387
+Case #10: -146735
+Case #11: -230277
+Case #12: -75966
+Case #13: -676300
+Case #14: -37379
+Case #15: -127880
+Case #16: -904732
+Case #17: -2717
+Case #18: -300337
+Case #19: -218336
+Case #20: -83404
+Case #21: -1625
+Case #22: -89488
+Case #23: -127333
+Case #24: -85736
+Case #25: -86127
+Case #26: -33667
+Case #27: -71286
+Case #28: -78070
+Case #29: -69162
+Case #30: -32472
+Case #31: -1323101
+Case #32: -204493
+Case #33: -225787
+Case #34: -79176
+Case #35: -556
+Case #36: -292781
+Case #37: -84013
+Case #38: -66028
+Case #39: -111702
+Case #40: -77764
+Case #41: -307
+Case #42: -231288
+Case #43: -138
+Case #44: -92238
+Case #45: -15259
+Case #46: -141434
+Case #47: -1568
+Case #48: -86580
+Case #49: -8508
+Case #50: -74169
+Case #51: -338150
+Case #52: -279142
+Case #53: -221065
+Case #54: -261805
+Case #55: -12
+Case #56: -4949
+Case #57: -142154
+Case #58: -297899
+Case #59: -81588
+Case #60: -148567
+Case #61: -32458
+Case #62: -214347
+Case #63: -94656
+Case #64: -66180
+Case #65: -123083
+Case #66: -71969
+Case #67: -83173
+Case #68: -76486
+Case #69: -77852
+Case #70: -112383
diff --git a/codejam_2008/src/y2008round3/a.rs b/codejam_2008/src/y2008round3/a.rs
index 297e6fc..4310fd0 100644
--- a/codejam_2008/src/y2008round3/a.rs
+++ b/codejam_2008/src/y2008round3/a.rs
@@ -1,7 +1,10 @@
 use codejam::util::codejam::run_cases;
-use std::io::Write;
 use codejam::util::grid::constants::*;
 use codejam::util::vector_2d::Vector2d;
+use std::cmp::max;
+use std::cmp::min;
+use std::i64;
+use std::io::Write;
 
 /*
 Polygons
@@ -20,12 +23,11 @@ pub fn solve_all_cases()
                 let mut path: Vec<(Vec<char>, u32)> = Vec::new();
 
                 while path.len() < l {
-                    path.extend( reader.read_string_line().chunks_exact(2).map( |ins| {
+                    path.extend(reader.read_string_line().chunks_exact(2).map(|ins| {
                         let steps = &ins[0];
                         let repeat = &ins[1];
                         (steps.chars().collect(), repeat.parse().unwrap())
-                    }
-                    ));
+                    }));
                 }
 
                 if case_no != 3 {
@@ -34,79 +36,79 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(
-                    buffer,
-                    "Case #{}: {}",
-                    case_no,
-                    solve(path.as_slice())
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve(path.as_slice())).unwrap();
             }
         },
     );
 }
 
-const GRID_WIDTH : usize = 6100;
-const COORD_OFFSET : i32= 3001;
+const GRID_WIDTH: usize = 6100;
+const COORD_OFFSET: i64 = 3001;
 
-const directions : [Vector2d<i64>;4] = [NORTH, EAST, SOUTH, WEST];
+const DIRECTIONS: [Vector2d<i64>; 4] = [NORTH, EAST, SOUTH, WEST];
 
-fn solve(path: &[(Vec<char>, u32)]) -> u32
+fn solve(path: &[(Vec<char>, u32)]) -> i64
 {
-    let mut col_rng : Vec< [i32;2] > = vec![ [i32::MAX, i32::MIN]; GRID_WIDTH];
-    let mut row_rng : Vec< [i32;2] > = vec![ [i32::MAX, i32::MIN]; GRID_WIDTH];
-
-    let mut  head:usize = 0;
-
-    for (i, (s, t)) in path.iter().enumerate()
-        {
-            let len = s.len();
-            for rep in 0..t  {
-                for ch in s.iter() {
-                match *ch
-                {
-                     'L' => {
-                         head = (directions.len() + head - 1) % directions.len();
-                     }
-                     'R' => {
-                         head = (head + 1) % directions.len();
-                     }
-                    'F':
-                    {
-                        pnt nxt = cur + del[head];
-                        int idx;
-                        switch(head)
-                        {
-                            case 0:
-                            case 2:
-                            idx = min(cur.real(), nxt.real());
-                            col_rng[idx].first = min(col_rng[idx].first, cur.imag());
-                            col_rng[idx].second = max(col_rng[idx].second, cur.imag());
-                            break;
-                            case 1:
-                            case 3:
-                            idx = min(cur.imag(), nxt.imag());
-                            row_rng[idx].first = min(row_rng[idx].first, cur.real());
-                            row_rng[idx].second = max(row_rng[idx].second, cur.real());
-                            break;
+    let mut col_rng: Vec<[i64; 2]> = vec![[i64::MAX, i64::MIN]; GRID_WIDTH];
+    let mut row_rng: Vec<[i64; 2]> = vec![[i64::MAX, i64::MIN]; GRID_WIDTH];
+
+    let mut head: usize = 0;
+    let mut cur: Vector2d<i64> = Default::default();
+    let mut area: i64 = 0;
+
+    for (s, t) in path.iter() {
+        let t = *t;
+        for _rep in 0..t {
+            for ch in s.iter() {
+                match *ch {
+                    'L' => {
+                        head = (DIRECTIONS.len() + head - 1) % DIRECTIONS.len();
+                    }
+                    'R' => {
+                        head = (head + 1) % DIRECTIONS.len();
+                    }
+                    'F' => {
+                        let nxt = cur + &DIRECTIONS[head];
+                        let idx;
+                        match DIRECTIONS[head] {
+                            NORTH | SOUTH => {
+                                idx = (min(cur.r(), nxt.r()) + COORD_OFFSET) as usize;
+                                col_rng[idx][0] = min(col_rng[idx][0], cur.c());
+                                col_rng[idx][1] = max(col_rng[idx][1], cur.c());
+                            }
+                            EAST | WEST => {
+                                idx = (min(cur.c(), nxt.c()) + COORD_OFFSET) as usize;
+                                let rr = row_rng.get_mut(idx).unwrap();
+
+                                rr[0] = min(rr[0], cur.r());
+                                rr[1] = max(rr[1], cur.r());
+                            }
+                            _ => panic!("Hmm"),
                         }
-                        area += imag(conj(cur) * nxt);
+                        area += -cur.r() * nxt.r();
                         cur = nxt;
                     }
+                    _ => panic!("hmmm"),
                 }
             }
         }
+    }
+
+    assert_eq!(cur, Vector2d::with_val(0, 0));
+
+    let mut ans = 0;
+    for i in 0..GRID_WIDTH {
+        let ii = (i as i64) - COORD_OFFSET;
+        for j in 0..GRID_WIDTH {
+            let jj = (j as i64) - COORD_OFFSET;
+
+            if (jj >= row_rng[i][0] && jj < row_rng[i][1])
+                || (ii >= col_rng[j][0] && ii < col_rng[j][1])
+            {
+                ans += 1;
+            }
         }
-        assert(cur == pnt(0, 0));
-
-        int ans = 0;
-        for (int i = -3001; i <= 3001; i++)
-            for (int j = -3001; j <= 3001; j++)
-                if ((j >= row_rng[i].first && j < row_rng[i].second)
-                    || (i >= col_rng[j].first && i < col_rng[j].second))
-                    ans++;
-        ans -= llabs(area / 2);
-        printf("Case #%d: %d\n", cas + 1, ans);
     }
-    5
+    ans -= (area / 2).abs();
+    ans
 }

From ca95f2a09fc9bc0187bd5a5eca8adf72ed6c8f8b Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 23:29:53 -0300
Subject: [PATCH 080/122] a

---
 .../src/y2008round3/A-large-practice.out      | 162 +++++++++---------
 .../src/y2008round3/A-small-practice.out      | 140 +++++++--------
 codejam_2008/src/y2008round3/a.rs             |  27 ++-
 3 files changed, 176 insertions(+), 153 deletions(-)

diff --git a/codejam_2008/src/y2008round3/A-large-practice.out b/codejam_2008/src/y2008round3/A-large-practice.out
index 0fa716d..54dec4c 100644
--- a/codejam_2008/src/y2008round3/A-large-practice.out
+++ b/codejam_2008/src/y2008round3/A-large-practice.out
@@ -1,81 +1,81 @@
-Case #1: -5871790
-Case #2: -45040882
-Case #3: -452246
-Case #4: -604223118
-Case #5: -15531742499
-Case #6: -1067154
-Case #7: -39522029450
-Case #8: -91793
-Case #9: -465724
-Case #10: -7911011698
-Case #11: -214271942
-Case #12: -109988332
-Case #13: -443058
-Case #14: -1538884907
-Case #15: -962293830
-Case #16: -39279062110
-Case #17: -6068307
-Case #18: -6069512
-Case #19: -271195
-Case #20: -961556
-Case #21: -15030856
-Case #22: -34802716
-Case #23: -3188759279
-Case #24: -240633
-Case #25: -2869705900
-Case #26: -50343042
-Case #27: -388527
-Case #28: -325281100
-Case #29: -107640
-Case #30: -780097
-Case #31: -1095642
-Case #32: -80180418
-Case #33: -35990993001
-Case #34: -112676
-Case #35: -305656
-Case #36: -384256
-Case #37: -107696
-Case #38: -448669
-Case #39: -59347703
-Case #40: -39495168881
-Case #41: -451610
-Case #42: -1905072
-Case #43: -5112086
-Case #44: -51656936
-Case #45: -274376
-Case #46: -9004494500
-Case #47: -2528575525
-Case #48: -409073
-Case #49: -3127105595
-Case #50: -391175
-Case #51: -37136686100
-Case #52: -461206
-Case #53: -1553937077
-Case #54: -7969364
-Case #55: -1091240089
-Case #56: -101809003
-Case #57: -12
-Case #58: -477683146
-Case #59: -136770954
-Case #60: -37463927230
-Case #61: -1595041685
-Case #62: -805545419
-Case #63: -13695600
-Case #64: -1888568
-Case #65: -503957
-Case #66: -1127258
-Case #67: -6295756
-Case #68: -406763477
-Case #69: -138
-Case #70: -293638
-Case #71: -29858759
-Case #72: -229705010
-Case #73: -6483671
-Case #74: -11983486
-Case #75: -5599600
-Case #76: -37615695346
-Case #77: -18008989000
-Case #78: -363343
-Case #79: -123622
-Case #80: -17279851
-Case #81: -2059848893
+Case #1: 6499
+Case #2: 20225
+Case #3: 276
+Case #4: 5305
+Case #5: 880547
+Case #6: 508
+Case #7: 11171
+Case #8: 132
+Case #9: 275
+Case #10: 846683
+Case #11: 3751
+Case #12: 24800
+Case #13: 266
+Case #14: 5301
+Case #15: 5382
+Case #16: 10851
+Case #17: 6651
+Case #18: 6637
+Case #19: 1626
+Case #20: 492
+Case #21: 6160
+Case #22: 21141
+Case #23: 263452
+Case #24: 1629
+Case #25: 510000
+Case #26: 38750
+Case #27: 1533
+Case #28: 3970
+Case #29: 208
+Case #30: 423
+Case #31: 606
+Case #32: 40131
+Case #33: 0
+Case #34: 213
+Case #35: 1745
+Case #36: 284
+Case #37: 208
+Case #38: 330
+Case #39: 13896
+Case #40: 11123
+Case #41: 340
+Case #42: 0
+Case #43: 6277
+Case #44: 1620
+Case #45: 1743
+Case #46: 0
+Case #47: 9261
+Case #48: 323
+Case #49: 880547
+Case #50: 246
+Case #51: 8905
+Case #52: 322
+Case #53: 6505
+Case #54: 996
+Case #55: 5559
+Case #56: 2308
+Case #57: 0
+Case #58: 39641
+Case #59: 2630
+Case #60: 8916
+Case #61: 6262
+Case #62: 5635
+Case #63: 11600
+Case #64: 474
+Case #65: 381
+Case #66: 598
+Case #67: 6625
+Case #68: 3901
+Case #69: 4
+Case #70: 1708
+Case #71: 1528
+Case #72: 3490
+Case #73: 6754
+Case #74: 21141
+Case #75: 11600
+Case #76: 8984
+Case #77: 0
+Case #78: 1752
+Case #79: 167
+Case #80: 1521
+Case #81: 7607
diff --git a/codejam_2008/src/y2008round3/A-small-practice.out b/codejam_2008/src/y2008round3/A-small-practice.out
index e1fb692..a90abc2 100644
--- a/codejam_2008/src/y2008round3/A-small-practice.out
+++ b/codejam_2008/src/y2008round3/A-small-practice.out
@@ -1,70 +1,70 @@
-Case #1: -178204
-Case #2: -3343
-Case #3: -463
-Case #4: -33274
-Case #5: -71560
-Case #6: -78036
-Case #7: -84235
-Case #8: -84441
-Case #9: -145387
-Case #10: -146735
-Case #11: -230277
-Case #12: -75966
-Case #13: -676300
-Case #14: -37379
-Case #15: -127880
-Case #16: -904732
-Case #17: -2717
-Case #18: -300337
-Case #19: -218336
-Case #20: -83404
-Case #21: -1625
-Case #22: -89488
-Case #23: -127333
-Case #24: -85736
-Case #25: -86127
-Case #26: -33667
-Case #27: -71286
-Case #28: -78070
-Case #29: -69162
-Case #30: -32472
-Case #31: -1323101
-Case #32: -204493
-Case #33: -225787
-Case #34: -79176
-Case #35: -556
-Case #36: -292781
-Case #37: -84013
-Case #38: -66028
-Case #39: -111702
-Case #40: -77764
-Case #41: -307
-Case #42: -231288
-Case #43: -138
-Case #44: -92238
-Case #45: -15259
-Case #46: -141434
-Case #47: -1568
-Case #48: -86580
-Case #49: -8508
-Case #50: -74169
-Case #51: -338150
-Case #52: -279142
-Case #53: -221065
-Case #54: -261805
-Case #55: -12
-Case #56: -4949
-Case #57: -142154
-Case #58: -297899
-Case #59: -81588
-Case #60: -148567
-Case #61: -32458
-Case #62: -214347
-Case #63: -94656
-Case #64: -66180
-Case #65: -123083
-Case #66: -71969
-Case #67: -83173
-Case #68: -76486
-Case #69: -77852
-Case #70: -112383
+Case #1: 1328
+Case #2: 28
+Case #3: 29
+Case #4: 74
+Case #5: 58
+Case #6: 71
+Case #7: 76
+Case #8: 86
+Case #9: 139
+Case #10: 111
+Case #11: 941
+Case #12: 46
+Case #13: 0
+Case #14: 102
+Case #15: 67
+Case #16: 1328
+Case #17: 51
+Case #18: 194
+Case #19: 863
+Case #20: 67
+Case #21: 29
+Case #22: 920
+Case #23: 74
+Case #24: 84
+Case #25: 905
+Case #26: 36
+Case #27: 53
+Case #28: 58
+Case #29: 55
+Case #30: 71
+Case #31: 0
+Case #32: 747
+Case #33: 863
+Case #34: 850
+Case #35: 29
+Case #36: 133
+Case #37: 86
+Case #38: 54
+Case #39: 89
+Case #40: 79
+Case #41: 0
+Case #42: 929
+Case #43: 4
+Case #44: 916
+Case #45: 143
+Case #46: 117
+Case #47: 29
+Case #48: 890
+Case #49: 91
+Case #50: 59
+Case #51: 0
+Case #52: 226
+Case #53: 912
+Case #54: 144
+Case #55: 0
+Case #56: 136
+Case #57: 114
+Case #58: 169
+Case #59: 64
+Case #60: 73
+Case #61: 70
+Case #62: 930
+Case #63: 958
+Case #64: 45
+Case #65: 85
+Case #66: 70
+Case #67: 86
+Case #68: 62
+Case #69: 63
+Case #70: 79
diff --git a/codejam_2008/src/y2008round3/a.rs b/codejam_2008/src/y2008round3/a.rs
index 4310fd0..7bc9767 100644
--- a/codejam_2008/src/y2008round3/a.rs
+++ b/codejam_2008/src/y2008round3/a.rs
@@ -5,6 +5,7 @@ use std::cmp::max;
 use std::cmp::min;
 use std::i64;
 use std::io::Write;
+use itertools::Itertools;
 
 /*
 Polygons
@@ -12,7 +13,9 @@ Polygons
 pub fn solve_all_cases()
 {
     run_cases(
-        &["A-small-practice", "A-large-practice"],
+        &["A-small-practice",
+            "A-large-practice"
+        ],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
@@ -56,7 +59,11 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
     let mut cur: Vector2d<i64> = Default::default();
     let mut area: i64 = 0;
 
+
+
     for (s, t) in path.iter() {
+        debug!("S = {} repeat = {}", s.iter().join(""), t);
+
         let t = *t;
         for _rep in 0..t {
             for ch in s.iter() {
@@ -72,20 +79,36 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
                         let idx;
                         match DIRECTIONS[head] {
                             NORTH | SOUTH => {
+                                assert_eq!(cur.c(), nxt.c());
+
                                 idx = (min(cur.r(), nxt.r()) + COORD_OFFSET) as usize;
                                 col_rng[idx][0] = min(col_rng[idx][0], cur.c());
                                 col_rng[idx][1] = max(col_rng[idx][1], cur.c());
+
+                                debug!("Col range of {} {} is {:?}", idx, idx as i64-COORD_OFFSET, col_rng[idx]);
+                                //x1*y2 - x2*y1
+                                //x(y2-y1)
+
+                                area += cur.c() * (nxt.r() - cur.r());
                             }
                             EAST | WEST => {
+                                assert_eq!(cur.r(), nxt.r());
+
                                 idx = (min(cur.c(), nxt.c()) + COORD_OFFSET) as usize;
                                 let rr = row_rng.get_mut(idx).unwrap();
 
                                 rr[0] = min(rr[0], cur.r());
                                 rr[1] = max(rr[1], cur.r());
+
+                                //y(x1-x2)
+
+                                debug!("Col range of {} {} is {:?}", idx, idx as i64-COORD_OFFSET, rr);
+
+                                area += cur.r() * (cur.c() - nxt.c());
                             }
                             _ => panic!("Hmm"),
                         }
-                        area += -cur.r() * nxt.r();
+                        //area += -cur.r() * nxt.r();
                         cur = nxt;
                     }
                     _ => panic!("hmmm"),

From d7966da534003f17f34e3e67d1e41b354a404992 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 23:38:54 -0300
Subject: [PATCH 081/122] a

---
 codejam_2008/src/y2008round3/a.rs | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/codejam_2008/src/y2008round3/a.rs b/codejam_2008/src/y2008round3/a.rs
index 7bc9767..0ced01c 100644
--- a/codejam_2008/src/y2008round3/a.rs
+++ b/codejam_2008/src/y2008round3/a.rs
@@ -52,7 +52,10 @@ const DIRECTIONS: [Vector2d<i64>; 4] = [NORTH, EAST, SOUTH, WEST];
 
 fn solve(path: &[(Vec<char>, u32)]) -> i64
 {
+    //index is a row
     let mut col_rng: Vec<[i64; 2]> = vec![[i64::MAX, i64::MIN]; GRID_WIDTH];
+
+    //index is a column
     let mut row_rng: Vec<[i64; 2]> = vec![[i64::MAX, i64::MIN]; GRID_WIDTH];
 
     let mut head: usize = 0;
@@ -82,10 +85,12 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
                                 assert_eq!(cur.c(), nxt.c());
 
                                 idx = (min(cur.r(), nxt.r()) + COORD_OFFSET) as usize;
-                                col_rng[idx][0] = min(col_rng[idx][0], cur.c());
-                                col_rng[idx][1] = max(col_rng[idx][1], cur.c());
+                                let cc = col_rng.get_mut(idx).unwrap();
+
+                                cc[0] = min(cc[0], cur.c());
+                                cc[1] = max(cc[1], cur.c());
 
-                                debug!("Col range of {} {} is {:?}", idx, idx as i64-COORD_OFFSET, col_rng[idx]);
+                                debug!("Col range of {} {} is {:?}", idx, idx as i64-COORD_OFFSET, cc);
                                 //x1*y2 - x2*y1
                                 //x(y2-y1)
 
@@ -120,13 +125,15 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
     assert_eq!(cur, Vector2d::with_val(0, 0));
 
     let mut ans = 0;
-    for i in 0..GRID_WIDTH {
-        let ii = (i as i64) - COORD_OFFSET;
-        for j in 0..GRID_WIDTH {
-            let jj = (j as i64) - COORD_OFFSET;
-
-            if (jj >= row_rng[i][0] && jj < row_rng[i][1])
-                || (ii >= col_rng[j][0] && ii < col_rng[j][1])
+    for col in 0..GRID_WIDTH {
+        let col_with_offset = (col as i64) - COORD_OFFSET;
+        for row in 0..GRID_WIDTH {
+            let row_with_offset = (row as i64) - COORD_OFFSET;
+
+            //basically any square that has had movement above/below or left/right is in the area
+            //including the pockets
+            if (row_with_offset >= row_rng[col][0] && row_with_offset < row_rng[col][1])
+                || (col_with_offset >= col_rng[row][0] && col_with_offset < col_rng[row][1])
             {
                 ans += 1;
             }

From f7e8b06f88db00ec28ed10b9cef7c7271c878681 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sat, 23 Feb 2019 23:48:49 -0300
Subject: [PATCH 082/122] a

---
 codejam_2008/src/y2008round3/a.rs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/codejam_2008/src/y2008round3/a.rs b/codejam_2008/src/y2008round3/a.rs
index 0ced01c..df8dafc 100644
--- a/codejam_2008/src/y2008round3/a.rs
+++ b/codejam_2008/src/y2008round3/a.rs
@@ -94,6 +94,7 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
                                 //x1*y2 - x2*y1
                                 //x(y2-y1)
 
+                                //polygon formula
                                 area += cur.c() * (nxt.r() - cur.r());
                             }
                             EAST | WEST => {
@@ -113,7 +114,7 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
                             }
                             _ => panic!("Hmm"),
                         }
-                        //area += -cur.r() * nxt.r();
+
                         cur = nxt;
                     }
                     _ => panic!("hmmm"),

From ae1ce1a11a0c22987807013cb243b9e91a11843f Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 24 Feb 2019 00:59:57 -0300
Subject: [PATCH 083/122] b

---
 codejam/src/util/grid.rs                      |  35 +-
 codejam_2008/src/main.rs                      |   4 +-
 codejam_2008/src/y2008practice/b.rs           |  18 +-
 .../src/y2008round3/B-large-practice.in       | 701 +++++++++++++
 .../src/y2008round3/B-small-practice.in       | 988 ++++++++++++++++++
 codejam_2008/src/y2008round3/a.rs             |  24 +-
 codejam_2008/src/y2008round3/b.rs             | 115 ++
 codejam_2008/src/y2008round3/mod.rs           |   3 +-
 8 files changed, 1862 insertions(+), 26 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008round3/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008round3/b.rs

diff --git a/codejam/src/util/grid.rs b/codejam/src/util/grid.rs
index 0d77e80..8c31ce0 100644
--- a/codejam/src/util/grid.rs
+++ b/codejam/src/util/grid.rs
@@ -13,7 +13,7 @@ pub struct Grid<T>
     pub C: usize,
 }
 
-pub type GridRowColVec = Vector2d<i64>;
+pub type GridRowColVec = Vector2d<isize>;
 pub type GridCoord = Vector2d<usize>;
 
 //pub struct GridConsts {}
@@ -27,7 +27,7 @@ pub mod constants
     pub const SOUTH: GridRowColVec = Vector2d { data: [1, 0] };
     pub const WEST: GridRowColVec = Vector2d { data: [0, -1] };
 
-    pub const DIRECTIONS: [Vector2d<i64>; 4] = [NORTH, EAST, SOUTH, WEST];
+    pub const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, EAST, SOUTH, WEST];
 
 
 }
@@ -49,6 +49,26 @@ impl<T> Grid<T>
         g
     }
 
+    pub fn get_val_usize<'a>(&'a self, row: usize, col: usize)
+        -> Option<&'a T>
+    {
+        if row >= self.R || col >= self.C  {
+            return None;
+        }
+
+        Some(&self.data[row * self.C + col])
+    }
+
+    pub fn get_val<'a>(&'a self, row: isize, col: isize)
+        -> Option<&'a T>
+    {
+        if row < 0 || col < 0 || row as usize >= self.R || col as usize >= self.C  {
+            return None;
+        }
+
+        Some(&self.data[ row as usize * self.C + col as usize])
+    }
+
     pub fn get_value<'a, N: Integer+Copy+NumCast>(&'a self, row_col_index: &Vector2d<N>)
         -> Option<&'a T>
     {
@@ -186,6 +206,17 @@ impl<T> Index<&Vector2d<i64>> for Grid<T>
         &self.data[ (row_col_index.data[0] * self.C as i64 + row_col_index.data[1] ) as usize ]
     }
 }
+
+impl<T> Index<&Vector2d<isize>> for Grid<T>
+{
+    type Output = T;
+
+    fn index<'a>(&'a self, row_col_index: &Vector2d<isize>) -> &'a T
+    {
+
+        &self.data[ (row_col_index.data[0] * self.C as isize + row_col_index.data[1] ) as usize ]
+    }
+}
 //set a cell
 impl<T> IndexMut<&Vector2d<i64>> for Grid<T>
 {
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 21ece61..f583e9f 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -82,13 +82,13 @@ pub fn run_y2008_round2()
 
 pub fn run_y2008_round3()
 {
-
+y2008round3::a::solve_all_cases();
 }
 
 fn main()
 {
     init_log();
-    y2008round3::a::solve_all_cases();
+    y2008round3::b::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
index 0317f77..cc9b059 100644
--- a/codejam_2008/src/y2008practice/b.rs
+++ b/codejam_2008/src/y2008practice/b.rs
@@ -8,7 +8,7 @@ use std::char::from_digit;
 use std::cmp::max;
 use std::cmp::min;
 use std::collections::HashMap;
-use std::i64;
+use std::isize;
 use std::io::Write;
 
 /*
@@ -44,11 +44,11 @@ fn solve(forward_path: &str, back_path: &str) -> String
 
     let directions = [NORTH, SOUTH, WEST, EAST];
 
-    let get_dir_index = |dir: &Vector2d<i64>| directions.iter().position(|dd| dd == dir).unwrap();
+    let get_dir_index = |dir: &Vector2d<isize>| directions.iter().position(|dd| dd == dir).unwrap();
 
-    let mut square_state: HashMap<Vector2d<i64>, BitVec64> = HashMap::new();
+    let mut square_state: HashMap<Vector2d<isize>, BitVec64> = HashMap::new();
 
-    let mut handle_step = |step: char, dir: &mut Vector2d<i64>, pos: &mut Vector2d<i64>| {
+    let mut handle_step = |step: char, dir: &mut Vector2d<isize>, pos: &mut Vector2d<isize>| {
         debug!("Read a step {}", step);
         match step {
             'W' => {
@@ -74,7 +74,7 @@ fn solve(forward_path: &str, back_path: &str) -> String
         debug!("Current pos {:?}, direction {:?}", pos, dir);
     };
 
-    let mut handle_path = |path: &str, initial_dir: Vector2d<i64>, initial_pos: Vector2d<i64>| {
+    let mut handle_path = |path: &str, initial_dir: Vector2d<isize>, initial_pos: Vector2d<isize>| {
         let mut dir = initial_dir;
         let mut pos = initial_pos;
         for ch in path.chars() {
@@ -95,10 +95,10 @@ fn solve(forward_path: &str, back_path: &str) -> String
     square_state.remove(&zeropos);
     square_state.remove(&exit_pos);
 
-    let mut min_row = i64::MAX;
-    let mut max_row = i64::MIN;
-    let mut min_col = i64::MAX;
-    let mut max_col = i64::MIN;
+    let mut min_row = isize::MAX;
+    let mut max_row = isize::MIN;
+    let mut min_col = isize::MAX;
+    let mut max_col = isize::MIN;
     for pos in square_state.keys() {
         min_row = min(pos.r(), min_row);
         max_row = max(pos.r(), max_row);
diff --git a/codejam_2008/src/y2008round3/B-large-practice.in b/codejam_2008/src/y2008round3/B-large-practice.in
new file mode 100644
index 0000000..26adb8c
--- /dev/null
+++ b/codejam_2008/src/y2008round3/B-large-practice.in
@@ -0,0 +1,701 @@
+50
+13 14
+####.#......##
+#.#####...##..
+..#.X.#.......
+........##..#.
+#.###.##.###..
+#.#..#######..
+#.###.#..#.#..
+....###...#.##
+.O###.###.###.
+#...#.#...##..
+#.....####..#.
+.#####...###..
+..#....#..###.
+13 13
+.#.#......###
+..#...#.####.
+#...##..#.#..
+......#.#....
+.....###..#.#
+....##....##.
+.....#.#..#.#
+........###.X
+#.##..#......
+#..#......#..
+#..#...###.#.
+#...#O.....#.
+..##.##..#..#
+3 8
+...#####
+..O..X..
+...#####
+15 15
+O#.....#.......
+..#..#..#..#..#
+#..#..#..#..#..
+.#..#..#..#.##.
+..#..#..#...#..
+...#..#..#..#.#
+.#..#..#..##...
+..#..#..#..#.#.
+#..#..#..#..#..
+.#..#..#..#.#.#
+..#..#..#.#.#..
+...#..#...#.##.
+.#...#####..#..
+..###...#..#..#
+#.....#...#X.#.
+14 14
+.....O#.####.#
+..##...#..##.#
+###.#.##..##..
+#.....####.#.#
+#.##.#.####.##
+.....#.###..#.
+.#.#....##.#..
+.##.##....#...
+##.####.#.####
+##.######.#..#
+###.#..X...#..
+#..##..#...#.#
+.###...##..#.#
+.##.#####.....
+15 15
+...............
+...............
+..O............
+...............
+...............
+...............
+...............
+..X............
+...............
+...............
+...............
+...............
+...............
+...............
+...............
+1 3
+O#X
+14 14
+...#.#.###..#.
+.#.####..#..#.
+.#.....#..#.##
+#.#######.###.
+..##...##.###.
+..######......
+..#.#.....#.#.
+#...#.#.#.#.#.
+.##...#####..#
+O....#.##..##.
+#.#.....######
+#.#..###.##..#
+.####.###..#.#
+..#X#.###.#...
+5 5
+O....
+.....
+.....
+.....
+....X
+13 13
+.#..###..##.X
+#.##.#..##.#.
+.#...##.#..##
+#..###.##..#.
+.######..##..
+###..O##..#..
+.###.#.##.##.
+##...###..###
+#.#..########
+#...#..#....#
+..#.##..##..#
+#.###...##.#.
+#####......##
+14 13
+...#..##..##.
+.####......#.
+...##.#.###.#
+###..##.##.##
+##..#.#.#..##
+##......#.##.
+#.##..#.#.#.#
+.##..####O##.
+...###..#.#.#
+#....####..#.
+.#....##..###
+..#.#.##.#...
+.####.##.#.##
+#...#.X...##.
+15 15
+O..............
+##############.
+...............
+.##############
+...............
+##############.
+...............
+.##############
+...............
+##############.
+...............
+.##############
+...............
+##############.
+..X............
+13 14
+#......#..#..#
+.##..##..#.##.
+.#..#.#.#.....
+.##.##....#..#
+#O#..#.......#
+..##.#..#.....
+###..##....#X.
+.#.#......#...
+#...#...#.....
+.#.....#.#....
+#............#
+#.....##..#...
+#...##....#.#.
+13 15
+...#...#.......
+.............#.
+.##.#...#......
+...#....#......
+.......#...#X..
+##..#...#......
+....#......#...
+...............
+..O....##......
+......#.##.....
+....#..#.......
+#..............
+...............
+13 14
+#..####....#..
+..###...#####.
+######....###.
+...#.#####.#.#
+#..###..X####.
+...#.#.#.##.##
+..#..##.#.#.##
+#.###...###O..
+#....#.#..#..#
+.#.#...#####.#
+.####..##.....
+.#....#.#...##
+#.###.#.#.#...
+15 13
+....#.#..##..
+..##.##..####
+#....##.....#
+##.##..O...#.
+.###.#.#X..##
+....###.##.##
+###.......#.#
+.#..##.##.##.
+..#.....#..##
+#..####.#.##.
+#..###..#.###
+....##..#.#..
+...###.#.#..#
+####..##.....
+#.####.##..##
+14 14
+.##.........#.
+.##...#..###..
+...#.....##...
+##..#..#.#..#.
+......#.#####.
+.#..#..#.....#
+.......##..#..
+######.#....#.
+......###O#...
+...X.#..#....#
+..#..##..#.###
+..#...#..#.#..
+#...#.......##
+##..#.#...#...
+14 14
+...........#..
+.......#......
+#.............
+........#.....
+#..#..........
+.........#....
+..#..........O
+....#...#.....
+.###.#.#......
+....#..##.##..
+.........#....
+............X#
+..#.....#....#
+..........#...
+14 15
+..........O.#..
+...#...........
+..............#
+#...........#..
+...##..........
+...X.#.....##..
+#..............
+.#..#..........
+.........#.....
+............#.#
+........#......
+#.........#....
+..............#
+.....#.#.......
+15 14
+..#...#...##..
+...#......#.#.
+X.#...##......
+....#......#O.
+##..#.#.###...
+...#......##..
+.#...##.##.#..
+#....#...#..##
+...#...#....#.
+...#.....#..#.
+.##....#..#..#
+...#...#......
+.#.......#.#.#
+.#....#.#...##
+.#.###.....#..
+15 14
+##.....#....##
+..#..#....#.##
+...#...#..#...
+..##.#.#...##.
+.#......#.....
+##.#..#.#....#
+...#...#.....#
+##.....##..#..
+.#.#...###..##
+..###O..##..#.
+...#..#....#..
+.....##...###.
+.#.#....#.###.
+##.#.....#..X.
+...##.......#.
+4 7
+.O..##.
+.#.....
+.#.####
+.#...X.
+15 13
+...........#.
+...#......#..
+........##...
+.......#.....
+##.......#...
+........#....
+...#.........
+.............
+.............
+......#......
+.....O.#...#.
+..#.......#..
+.............
+...X.........
+.#.........#.
+14 14
+..............
+....#O........
+..............
+....#..#....##
+.#...........#
+..............
+..............
+..............
+..............
+............#.
+#.....X...#..#
+#.....#......#
+.##...........
+.#........#...
+15 14
+..............
+..............
+.....#..#...#.
+.....#..#.....
+........X.....
+..............
+.#....#.......
+#.............
+O..........#..
+.........#....
+....#.#...#...
+.............#
+.........##...
+..............
+.....#........
+15 14
+...........#..
+......#.......
+...#..........
+.....##.......
+..#...........
+........#..#..
+..#...........
+.........#.O..
+....#.....#...
+........#.....
+....#.........
+..X.....#.....
+......#.......
+.#....#....#..
+.....#.#......
+15 13
+.#.#...O..##.
+.#.#..###....
+#...##..#..#X
+...#......#..
+#......#.....
+.##..#....#..
+....##...##..
+.....##..#.#.
+.#.#.........
+....#.#.....#
+..#.......#..
+..#.#.#.#.#.#
+..##......#..
+..#.#.#.##.#.
+....#..#..#..
+15 14
+.#..##########
+##.#..###.#...
+###..#.##.####
+.#.#..##..##..
+..#..#..##..#.
+..###......#.#
+##.#.#.....###
+....#####.....
+##......X..###
+..########.#..
+####.#.#.###..
+O#.#.#.##....#
+.....##.#..##.
+##.#####.###..
+..######.#..#.
+14 15
+........#......
+...............
+.........#....#
+..#..........#.
+......#.#...#..
+#..#..........X
+......##.......
+.O.............
+.#.........#.#.
+.#.............
+...............
+...#...........
+...............
+.#......#......
+13 13
+.............
+.............
+......O#...#.
+#............
+.............
+.........#...
+....#........
+#.....#......
+..#..........
+.#.....#..#..
+.....X.......
+.#...........
+.....#.......
+14 15
+####.#...#.####
+#..#.#....#..#.
+......#.##.###.
+#####.###.#..##
+#...#.#....####
+..#......###..#
+.#..#....##.O..
+###.#.#..#..#..
+#.#..#.#...####
+.###...#.......
+X##.#..##..##..
+#.......#.#.#..
+##.######..####
+.#..#.#.#.###.#
+15 15
+...............
+...............
+..O............
+...............
+...............
+...............
+...............
+...............
+...............
+...............
+...............
+...............
+...............
+.............X.
+...............
+13 14
+.........#....
+..O..#........
+.........#....
+......#.......
+..#...........
+#..#...X......
+..............
+..............
+..##..........
+##.....#......
+.........#...#
+.....#........
+.......#......
+14 14
+.....#.#....##
+..#....O...#..
+#...#.#.#....#
+#.........##.#
+..#....#.#....
+....##...##...
+..............
+.###...##..#.#
+.#.#..#...#.#.
+............##
+#.#......#.#.#
+..#.#......#..
+#.X#.#.#......
+...#........##
+13 13
+##.###.##.#..
+##...###.#...
+######.#.####
+.#......#.#..
+...##...###.#
+...####..##..
+.#.##....##X.
+...#...#.....
+...#......#.#
+#....#...O#.#
+....##.#.#.##
+####....##.##
+..##...##....
+15 14
+.#....#.###.#.
+##.###...#.#X.
+#...#.####...#
+##.##.####.##.
+.#..#.######.#
+######..#.##.#
+##.#.#.##.###.
+....##.###.##.
+.###..###.##..
+#O##.#..#.#.##
+########...#.#
+.#..###.#...#.
+#....#.##.##..
+##..#..#..##..
+.#.#...#.#..#.
+14 14
+.....##......#
+.............#
+...#...#......
+.....#.....#.#
+..#...........
+..............
+..O.......#..#
+...##...#.....
+........##....
+...#...#......
+X..#..........
+...........##.
+..............
+..............
+13 14
+##.......#.##.
+..###...#.O...
+#..#.###...#.#
+...#.X......#.
+#.###......#..
+....##......#.
+....#...#..#..
+.##.....#..#..
+.........#.##.
+#.....##....#.
+.....#.#......
+.#......###..#
+.........#....
+15 13
+....#...#....
+............#
+.............
+.#.....X....#
+.......#.....
+...#..#......
+..#...#......
+.........#...
+#.##.........
+...#.#.......
+#......#.....
+##...........
+........O....
+.........##..
+.............
+15 14
+....#..#.#.#..
+.##.#...#..#..
+.....#...#....
+.#.#.....#....
+.#...#.##..##.
+...#.#.#.#..#.
+....#......#..
+#.....##.....#
+#..#....##.##.
+.........X.###
+#..#.#...#...#
+...#....#.....
+.#.#..##..#...
+#..##.O..###..
+..#........#..
+13 14
+##.##..#.....#
+##.###..##..##
+..#...####.#.O
+#..#...#...#..
+#.........##.#
+##.#X...####..
+###.###..###..
+##...##.#.##..
+#.#.#....#..##
+...#.##..##...
+..##..#.#.##.#
+..#...#..####.
+..#....####...
+14 13
+........###.#
+....##..###..
+#..#...#....#
+..###.#.##..#
+.........##.#
+.#..#O....##.
+.#.#..#.#.#..
+...##.#.#....
+.....#...#...
+..........#..
+###...#..#.#.
+###..#...##..
+X#.....#....#
+#.##....#...#
+13 15
+........#......
+...........#...
+........#......
+.#.....#..#...#
+.......#.......
+..X......O.....
+.....#..#......
+#..............
+...............
+.....#........#
+.......#.......
+...............
+......#.......#
+14 15
+......#......##
+....##.....##.#
+##.#.#..#....##
+.......###..#..
+...#.##.....##.
+#....##.#.#.###
+...............
+.....##.####...
+###......#X#...
+.........##..#.
+.#..##........#
+#...#.##..#....
+.......##...##.
+##...#..#..O#.#
+14 15
+..O.#..#.##....
+###..#..#.#....
+#.#..#.#....#..
+..#...#..#..##.
+....####....#.#
+.#..#..#...#...
+###.###......#.
+.#..#...##....#
+.##.####.......
+.X.##.#.###....
+....#.#....#.##
+....#.##.#...##
+##....###.....#
+.##..#.....##..
+3 8
+...#####
+..O...X.
+...#####
+15 13
+.........#...
+..#.......X..
+..........##.
+.#....#......
+.#....#.#....
+.......#.....
+.......O.#..#
+.#....#....#.
+.............
+..##..#......
+.............
+#............
+.............
+.............
+.............
+14 14
+#.#.##.#####.#
+.O...#......##
+.#......######
+#########...##
+..##.###..##.#
+.#...#######..
+#.###.#..##.#.
+.##...###..#..
+.#.##.###.###.
+######..####..
+.#.#####...###
+.#..##X..####.
+#.##..###..#.#
+#.##.#.#...###
+14 15
+.##.O#..#..#.##
+..##.##X..#..#.
+#..#.##.#..#..#
+.#.##.##.#.....
+#..####..##...#
+.......#..###.#
+.##.#..#.#.##..
+.......#.#...#.
+......##.#..#..
+##....##...##.#
+..#.#.#..#.#...
+#.#..#....#.#..
+.....##..###..#
+###...........#
+14 15
+..##..#.#.##..#
+##........#.#..
+...#....#X.#.#.
+.#.#.....##.###
+.#..###..##..#.
+#..##......#...
+#...#.......##.
+........#...#..
+...#....###....
+...#.#.#..##.#.
+O..#..........#
+.###..#...#....
+.....#....##...
+...#.#....#..#.
diff --git a/codejam_2008/src/y2008round3/B-small-practice.in b/codejam_2008/src/y2008round3/B-small-practice.in
new file mode 100644
index 0000000..1ca5fd3
--- /dev/null
+++ b/codejam_2008/src/y2008round3/B-small-practice.in
@@ -0,0 +1,988 @@
+200
+2 3
+X##
+#O.
+6 6
+.#....
+....X.
+...O.#
+#..#.#
+.###.#
+#.###.
+8 6
+#...##
+...#..
+....##
+#.#.#.
+##.##.
+#O###.
+#####.
+.X..#.
+6 6
+....#.
+###.##
+.#.#.#
+.#.##O
+....X#
+#.####
+7 6
+..X...
+......
+.....O
+......
+....#.
+##....
+#.#...
+6 8
+...#...#
+.....#.#
+X....#..
+O..#...#
+.##..##.
+...#.#.#
+4 7
+.O..##.
+.#.....
+.#.####
+.#...X.
+6 8
+........
+........
+#.#O#...
+.X.#..#.
+.#......
+...#.#..
+2 3
+#X#
+.O.
+2 3
+##O
+#X.
+6 8
+O#..#.#.
+#.##.###
+#X##...#
+...#.###
+###.....
+#####.#.
+8 8
+#.....##
+..X...#.
+...O....
+......#.
+.#......
+.###..#.
+#.#.....
+#......#
+2 3
+#X.
+.O.
+8 6
+XO...#
+....##
+.#.###
+.####.
+.##.##
+.####.
+.#.#.#
+..####
+8 8
+........
+........
+........
+...O....
+....X...
+........
+........
+........
+2 3
+#O.
+.X.
+8 8
+.#...X..
+.##.....
+....#..O
+#.....#.
+...###..
+.....#.#
+.#..##.#
+....#...
+2 3
+#..
+O.X
+8 6
+#....#
+#.##..
+#..X#.
+##.##.
+#.##.#
+#..#..
+...###
+.###.O
+2 3
+##O
+..X
+2 3
+O#X
+#..
+8 6
+..#...
+...###
+..#...
+......
+#.....
+..#O..
+...X#.
+.#....
+2 3
+#..
+XO.
+1 3
+O#X
+2 3
+#..
+.OX
+2 3
+#.O
+#.X
+8 7
+##.#.#X
+..####.
+...#..#
+#.##.##
+####...
+O###...
+..#.###
+#####..
+8 8
+.##.##..
+.#......
+#O...#..
+..#....#
+........
+......#.
+.#.X..#.
+..###..#
+2 3
+O..
+..X
+2 3
+##O
+.X.
+7 6
+#.O...
+..#.##
+...###
+...#..
+...#.X
+#.###.
+..#.#.
+8 8
+........
+........
+.O......
+........
+......X.
+........
+........
+........
+8 8
+#.####..
+.#.#...#
+#.###.##
+.#......
+#..##.##
+...#..X.
+####....
+.#.O####
+2 3
+#O.
+..X
+2 3
+O.#
+#.X
+6 7
+.......
+.......
+.......
+X.....O
+.......
+......#
+7 7
+#...###
+##..#..
+...#.##
+..##.#.
+#.X..O#
+######.
+#..###.
+7 7
+.....X.
+#..#..O
+....#..
+.......
+.......
+.......
+.......
+2 3
+##O
+X..
+2 3
+##O
+##X
+8 8
+.####.#.
+.....#.#
+.....##.
+..###.#.
+..####..
+##...#.#
+#....##.
+.O..#.X.
+6 8
+.#...#..
+O.###...
+.X......
+........
+#...#...
+..#.#.#.
+8 6
+#.....
+.X....
+......
+#..#..
+...#..
+..#...
+......
+.#...O
+2 3
+#X#
+O#.
+8 6
+...###
+.#....
+......
+..X#..
+.O.##.
+...#..
+#.###.
+..##..
+7 7
+####.X.
+....#..
+.#O....
+#....#.
+#..#...
+...#...
+.#..##.
+8 7
+.......
+...##.#
+.###...
+.X...#.
+#....#.
+##...O#
+.##.#..
+.####..
+8 7
+..#....
+......#
+..#....
+.......
+..##...
+.......
+.....X.
+.O.....
+2 3
+X#.
+.O.
+2 3
+#O.
+#.X
+7 8
+..#..#O#
+##..#..#
+..#...##
+#.#.#.#.
+#....X##
+.#.##.##
+.##..#.#
+2 3
+###
+O#X
+2 3
+O##
+#.X
+2 3
+O#X
+.#.
+2 3
+##.
+X#O
+8 8
+#.......
+..###..#
+.#X...##
+....##..
+....#.#.
+.#.#....
+....###.
+.#.##O.#
+2 3
+#O#
+##X
+2 3
+##.
+.XO
+2 3
+##.
+.OX
+2 3
+.#X
+#O.
+7 8
+.O.....X
+..#.....
+#....#..
+.....#..
+..#..#.#
+....#..#
+#.#.....
+8 6
+......
+#....X
+....#.
+.....#
+......
+......
+......
+...#.O
+2 3
+O#.
+.#X
+2 3
+#.X
+O..
+6 7
+.#...##
+...#X..
+.O#....
+##.####
+#.##..#
+..####.
+2 3
+##.
+X.O
+2 3
+#XO
+#..
+2 3
+X#.
+#O.
+6 6
+..#...
+.....#
+..##..
+#...#.
+.X...#
+...O##
+2 3
+##O
+.#X
+2 3
+#X.
+..O
+2 3
+.##
+#OX
+2 3
+###
+O.X
+2 3
+#.X
+.O.
+8 8
+O.......
+#######.
+........
+.#######
+........
+#######.
+.#......
+.X######
+2 3
+OX#
+#..
+8 7
+O......
+...#...
+.......
+.......
+..X....
+.......
+.....#.
+..#....
+6 6
+.#....
+......
+...#..
+...OX#
+...#..
+...##.
+2 3
+O#.
+X..
+2 3
+#..
+.XO
+2 3
+##X
+.O.
+2 3
+.#O
+#.X
+5 5
+O....
+.....
+.....
+.....
+....X
+2 3
+.#.
+#OX
+2 3
+#.#
+O#X
+6 6
+......
+.....O
+....#.
+......
+....#.
+....X.
+2 3
+X#.
+#.O
+8 8
+O.......
+#######.
+........
+.#######
+........
+#######.
+........
+.X######
+8 8
+##..#..#
+.#.#.#..
+...#####
+#....##.
+.#.#O##.
+#####..#
+#...#.##
+#.#.#.X.
+2 3
+O..
+X..
+2 3
+.O#
+#X.
+2 3
+O#.
+#.X
+2 3
+X#O
+#..
+2 3
+#.#
+#XO
+2 3
+O#X
+...
+2 3
+O..
+.X.
+7 6
+......
+..#.X.
+#.....
+...O..
+..#..#
+##...#
+..#.#.
+7 7
+.X.....
+.......
+....#..
+.......
+.......
+.......
+..O.#..
+8 7
+##..##.
+....##.
+.#.#.##
+.#..#..
+.#..###
+#...#..
+X.####.
+....O#.
+2 3
+##.
+O#X
+7 6
+...#.#
+###.##
+O.#...
+...X..
+#.##.#
+#....#
+.###..
+3 8
+...#####
+..O..X..
+...#####
+8 7
+#.#..#.
+.......
+.......
+....O.X
+.......
+......#
+..#...#
+#...#..
+2 3
+##O
+X#.
+2 3
+O#.
+.X.
+2 3
+##.
+O.X
+8 6
+....#.
+..#..#
+......
+......
+.OX...
+......
+....##
+.#....
+2 3
+O.#
+#X.
+6 6
+..##.#
+..##O#
+...X##
+##.###
+.####.
+.#.###
+3 8
+...#####
+..O...X.
+...#####
+2 3
+#.O
+..X
+2 3
+.O.
+X..
+6 8
+.......#
+#..X.O..
+......#.
+........
+....#...
+#.......
+2 3
+O#.
+#X.
+2 3
+##O
+#.X
+6 8
+.O....#.
+.##..##.
+.##.####
+#....#.#
+....X...
+#.#.##.#
+2 3
+#O#
+X..
+2 3
+XO.
+...
+6 6
+......
+......
+...O.#
+......
+#.....
+..X...
+2 3
+#.#
+#OX
+2 3
+.#X
+#.O
+2 3
+.#.
+#XO
+2 3
+###
+OX.
+2 3
+#O#
+#X#
+8 6
+###..#
+.#...#
+.....#
+.##.#.
+#.....
+.###.#
+###..O
+.#.X..
+2 3
+##.
+#OX
+2 3
+.#.
+O.X
+2 3
+#.O
+X..
+2 3
+.O#
+#.X
+2 3
+.#.
+XO.
+8 8
+....#.X#
+##.##.##
+.#.###.#
+###.#...
+..O.###.
+###..##.
+#.##....
+#..#.###
+2 3
+#X#
+##O
+2 3
+#.#
+XO.
+2 3
+#OX
+...
+2 3
+#.#
+OX.
+2 3
+##X
+.#O
+2 3
+#X#
+#.O
+7 8
+......O.
+.#.###.#
+.###.#..
+.#.#.#.X
+..##....
+........
+#...#...
+2 3
+#.X
+..O
+2 3
+##.
+XO.
+2 3
+.##
+#XO
+7 8
+...#....
+........
+.......O
+X....#..
+....#...
+...##...
+..##....
+2 3
+#O#
+.X.
+7 6
+.#....
+...X..
+.#....
+#.....
+....O#
+.....#
+......
+2 3
+#..
+OX.
+2 3
+#X.
+O..
+2 3
+O#.
+X#.
+8 8
+.....#.#
+#.......
+.....#.X
+......#.
+........
+.....#.O
+......#.
+........
+6 8
+#.##..O#
+..##..##
+.#....#.
+#.......
+#..#.##.
+..X###..
+2 3
+.#O
+#X.
+2 3
+##X
+#.O
+8 6
+......
+......
+O.....
+...X..
+......
+..#...
+.##...
+......
+2 3
+#..
+X.O
+2 3
+##.
+OX.
+2 3
+##X
+..O
+7 7
+...XO..
+.#.###.
+#.##..#
+##....#
+.#.....
+.....#.
+..#....
+7 8
+##......
+...#..##
+...#..##
+#.....#.
+....##..
+.##.O#X.
+#.#..#..
+2 3
+O##
+#X.
+2 3
+.#.
+OX.
+2 3
+###
+#OX
+2 3
+X##
+#.O
+8 7
+.######
+##.#X.#
+..##.#.
+.##..O.
+#.##..#
+..#####
+#.#..#.
+#....##
+2 3
+#X#
+O..
+7 6
+.....#
+.O..#.
+##.#X#
+.#....
+.##...
+.##.#.
+..#...
+2 3
+XO#
+#..
+2 3
+##.
+#XO
+7 7
+..#....
+.#.....
+...#...
+.......
+.#.....
+#..#X..
+......O
+7 8
+........
+...OX...
+........
+...#....
+...#....
+....#...
+....##..
+2 3
+#.O
+#X.
+2 3
+#XO
+...
+7 6
+.#....
+.#.#.#
+##.#.O
+#.#X##
+#..##.
+..##.#
+.#####
+8 7
+......X
+.......
+......O
+......#
+.......
+.......
+..#....
+..#....
+2 3
+##X
+O..
+2 3
+###
+XO.
+6 7
+X.#..#.
+.....#.
+.#.#.#.
+..O...#
+##.....
+....###
+2 3
+#O#
+#.X
+2 3
+O#.
+..X
+8 8
+#.#.###.
+###...##
+#...#..X
+.#.#..#.
+.#.#.#..
+.#####.#
+.####..#
+#.....O#
+2 3
+#O.
+#X.
+2 3
+#OX
+#..
+2 3
+#.O
+.X.
+2 3
+O##
+##X
+8 8
+O#......
+..#..#..
+#..#..#.
+.#.##.#.
+...#..#.
+.##..#X.
+.#..#.#.
+...#.#..
+2 3
+###
+#XO
+2 3
+#O#
+X#.
+2 3
+#.#
+O.X
+7 8
+##....#.
+#.X..#..
+#...#.##
+.##.###.
+.#.#..##
+#####...
+O.###..#
+2 3
+##X
+#O.
+7 8
+..##...#
+#.....#.
+#..##..O
+.....##.
+.#.X.#..
+...##..#
+....##..
+2 3
+X#.
+O..
+2 3
+#X#
+#O.
+2 3
+#O.
+X..
+8 7
+#.....#
+##..#..
+....#..
+..#....
+..O....
+.X#....
+....#..
+.......
+2 3
+.#X
+O..
+2 3
+OX.
+...
+2 3
+.O.
+.X.
+2 3
+#O#
+#X.
+6 7
+.####.#
+##..#..
+##..#O.
+..#.X##
+#.#.##.
+.#..#.#
+2 3
+O.X
+...
+2 3
+##X
+O#.
diff --git a/codejam_2008/src/y2008round3/a.rs b/codejam_2008/src/y2008round3/a.rs
index df8dafc..257e8f1 100644
--- a/codejam_2008/src/y2008round3/a.rs
+++ b/codejam_2008/src/y2008round3/a.rs
@@ -3,7 +3,7 @@ use codejam::util::grid::constants::*;
 use codejam::util::vector_2d::Vector2d;
 use std::cmp::max;
 use std::cmp::min;
-use std::i64;
+use std::isize;
 use std::io::Write;
 use itertools::Itertools;
 
@@ -46,21 +46,21 @@ pub fn solve_all_cases()
 }
 
 const GRID_WIDTH: usize = 6100;
-const COORD_OFFSET: i64 = 3001;
+const COORD_OFFSET: isize = 3001;
 
-const DIRECTIONS: [Vector2d<i64>; 4] = [NORTH, EAST, SOUTH, WEST];
+const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, EAST, SOUTH, WEST];
 
-fn solve(path: &[(Vec<char>, u32)]) -> i64
+fn solve(path: &[(Vec<char>, u32)]) -> isize
 {
     //index is a row
-    let mut col_rng: Vec<[i64; 2]> = vec![[i64::MAX, i64::MIN]; GRID_WIDTH];
+    let mut col_rng: Vec<[isize; 2]> = vec![[isize::MAX, isize::MIN]; GRID_WIDTH];
 
     //index is a column
-    let mut row_rng: Vec<[i64; 2]> = vec![[i64::MAX, i64::MIN]; GRID_WIDTH];
+    let mut row_rng: Vec<[isize; 2]> = vec![[isize::MAX, isize::MIN]; GRID_WIDTH];
 
     let mut head: usize = 0;
-    let mut cur: Vector2d<i64> = Default::default();
-    let mut area: i64 = 0;
+    let mut cur: Vector2d<isize> = Default::default();
+    let mut area: isize = 0;
 
 
 
@@ -90,7 +90,7 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
                                 cc[0] = min(cc[0], cur.c());
                                 cc[1] = max(cc[1], cur.c());
 
-                                debug!("Col range of {} {} is {:?}", idx, idx as i64-COORD_OFFSET, cc);
+                                debug!("Col range of {} {} is {:?}", idx, idx as isize-COORD_OFFSET, cc);
                                 //x1*y2 - x2*y1
                                 //x(y2-y1)
 
@@ -108,7 +108,7 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
 
                                 //y(x1-x2)
 
-                                debug!("Col range of {} {} is {:?}", idx, idx as i64-COORD_OFFSET, rr);
+                                debug!("Col range of {} {} is {:?}", idx, idx as isize-COORD_OFFSET, rr);
 
                                 area += cur.r() * (cur.c() - nxt.c());
                             }
@@ -127,9 +127,9 @@ fn solve(path: &[(Vec<char>, u32)]) -> i64
 
     let mut ans = 0;
     for col in 0..GRID_WIDTH {
-        let col_with_offset = (col as i64) - COORD_OFFSET;
+        let col_with_offset = (col as isize) - COORD_OFFSET;
         for row in 0..GRID_WIDTH {
-            let row_with_offset = (row as i64) - COORD_OFFSET;
+            let row_with_offset = (row as isize) - COORD_OFFSET;
 
             //basically any square that has had movement above/below or left/right is in the area
             //including the pockets
diff --git a/codejam_2008/src/y2008round3/b.rs b/codejam_2008/src/y2008round3/b.rs
new file mode 100644
index 0000000..d55ab0d
--- /dev/null
+++ b/codejam_2008/src/y2008round3/b.rs
@@ -0,0 +1,115 @@
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::constants::*;
+use codejam::util::vector_2d::Vector2d;
+use std::io::Write;
+use codejam::util::grid::Grid;
+use std::usize;
+use std::cmp::min;
+
+/*
+Polygons
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice",
+            "B-large-practice"
+        ],
+        "y2008round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n_rows,n_cols) = reader.read_tuple_2();
+
+                let mut grid = Grid::new(n_rows,n_cols);
+
+                for r in 0..n_rows {
+                    for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
+                        grid[ (r,c) ] = ch;
+                    }
+                }
+
+                if case_no != 1 {
+                    continue;
+                }
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, if let Some(ans) = solve(&grid) { ans.to_string() } else {
+                    "THE CAKE IS A LIE".to_string()
+                }).unwrap();
+            }
+        },
+    );
+}
+
+/*
+. indicates an empty cell;
+# indicates a wall;
+O indicates your starting position; and
+X indicates the cake's position.
+*/
+
+const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, EAST, SOUTH, WEST];
+
+fn solve(grid: &Grid<char>) -> Option<u32>
+{
+    debug!("Grid\n{:#.4?}\n", grid);
+
+    //precompute 5 values, closest wall in 4 directions, then closest wall absolutely
+    let mut nearest_dir: Grid< [usize; 5] > = Grid::new(grid.R, grid.C);
+
+    for c in nearest_dir.data.iter_mut() {
+        c[4] = usize::MAX;
+    }
+
+    for r in 0..grid.R  {
+        for c in (0..grid.C).rev()  {
+            let coord = Vector2d::with_val(r as isize,c as isize);
+            for (dir_idx, dir) in [NORTH, EAST].iter().enumerate() {
+
+                for &dd_idx in [dir_idx, 4].iter() {
+                    nearest_dir.data[r * grid.C + c][dd_idx] = if grid[&coord] == '#' {
+                        0
+                    } else if let Some(d) = nearest_dir.get_value(&(coord + dir)) {
+                        1 + d[dd_idx]
+                    } else {
+                        1
+                    };
+                }
+
+            }
+
+
+        }
+    }
+
+    for r in (0..grid.R).rev()  {
+        for c in 0..grid.C  {
+            let coord = Vector2d::with_val(r as isize,c as isize);
+            for (dir_idx, dir) in [SOUTH, WEST].iter().enumerate() {
+
+                for &dd_idx in [dir_idx, 4].iter() {
+                    nearest_dir.data[r * grid.C + c][dd_idx] = if grid[&coord] == '#' {
+                        0
+                    } else if let Some(d) = nearest_dir.get_value(&(coord + dir)) {
+                        1 + d[dd_idx]
+                    } else {
+                        1
+                    };
+                }
+
+            }
+
+
+        }
+    }
+
+    for r in 0..grid.R {
+        for c in 0..grid.C {
+            debug!("For r {} c {} --> NESW near {:?}", r, c, nearest_dir[(r, c)]);
+        }
+    }
+
+    Some(3)
+}
\ No newline at end of file
diff --git a/codejam_2008/src/y2008round3/mod.rs b/codejam_2008/src/y2008round3/mod.rs
index 05ff2b7..ae3ceea 100644
--- a/codejam_2008/src/y2008round3/mod.rs
+++ b/codejam_2008/src/y2008round3/mod.rs
@@ -1,4 +1,5 @@
 pub mod a;
-/*pub mod b;
+pub mod b;
+/*
 pub mod c;
 pub mod d; */

From 8664d53cf564b5a0cabc1f080f0730c1d11d8378 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 24 Feb 2019 11:51:13 -0300
Subject: [PATCH 084/122] b

---
 codejam/src/util/vector_2d.rs                 |  10 +
 .../src/y2008round3/B-large-practice.out      |  50 +++++
 .../src/y2008round3/B-small-practice.out      | 200 ++++++++++++++++++
 codejam_2008/src/y2008round3/b.rs             | 111 ++++++----
 4 files changed, 333 insertions(+), 38 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008round3/B-small-practice.out

diff --git a/codejam/src/util/vector_2d.rs b/codejam/src/util/vector_2d.rs
index 8da076f..8c0790f 100644
--- a/codejam/src/util/vector_2d.rs
+++ b/codejam/src/util/vector_2d.rs
@@ -223,6 +223,16 @@ impl<N: Copy + Mul<Output=N>> Mul<N> for Vector2d<N>
 }
 
 
+impl<N: Copy + Mul<Output=N>> Mul<N> for &Vector2d<N>
+{
+    type Output = Vector2d<N>;
+
+    fn mul(self, rhs: N) -> Vector2d<N>
+    {
+        Vector2d::with_val(self.data[0] * rhs, self.data[1] * rhs)
+    }
+}
+
 
 #[cfg(test)]
 mod test_vector2d
diff --git a/codejam_2008/src/y2008round3/B-large-practice.out b/codejam_2008/src/y2008round3/B-large-practice.out
new file mode 100644
index 0000000..d85c9e1
--- /dev/null
+++ b/codejam_2008/src/y2008round3/B-large-practice.out
@@ -0,0 +1,50 @@
+Case #1: 7
+Case #2: 5
+Case #3: 3
+Case #4: 101
+Case #5: 12
+Case #6: 5
+Case #7: THE CAKE IS A LIE
+Case #8: THE CAKE IS A LIE
+Case #9: 2
+Case #10: THE CAKE IS A LIE
+Case #11: 5
+Case #12: 17
+Case #13: THE CAKE IS A LIE
+Case #14: 8
+Case #15: THE CAKE IS A LIE
+Case #16: 2
+Case #17: 8
+Case #18: 3
+Case #19: 6
+Case #20: 9
+Case #21: 5
+Case #22: 4
+Case #23: 5
+Case #24: 3
+Case #25: 3
+Case #26: 7
+Case #27: 4
+Case #28: THE CAKE IS A LIE
+Case #29: 3
+Case #30: 4
+Case #31: THE CAKE IS A LIE
+Case #32: 6
+Case #33: 7
+Case #34: 8
+Case #35: 4
+Case #36: THE CAKE IS A LIE
+Case #37: 5
+Case #38: 5
+Case #39: 5
+Case #40: 7
+Case #41: THE CAKE IS A LIE
+Case #42: THE CAKE IS A LIE
+Case #43: 4
+Case #44: THE CAKE IS A LIE
+Case #45: THE CAKE IS A LIE
+Case #46: 3
+Case #47: 5
+Case #48: THE CAKE IS A LIE
+Case #49: THE CAKE IS A LIE
+Case #50: 4
diff --git a/codejam_2008/src/y2008round3/B-small-practice.out b/codejam_2008/src/y2008round3/B-small-practice.out
new file mode 100644
index 0000000..483a712
--- /dev/null
+++ b/codejam_2008/src/y2008round3/B-small-practice.out
@@ -0,0 +1,200 @@
+Case #1: THE CAKE IS A LIE
+Case #2: 2
+Case #3: THE CAKE IS A LIE
+Case #4: THE CAKE IS A LIE
+Case #5: 4
+Case #6: 1
+Case #7: 4
+Case #8: 4
+Case #9: 1
+Case #10: 2
+Case #11: THE CAKE IS A LIE
+Case #12: 2
+Case #13: 1
+Case #14: 1
+Case #15: 2
+Case #16: 1
+Case #17: 2
+Case #18: 1
+Case #19: THE CAKE IS A LIE
+Case #20: 1
+Case #21: THE CAKE IS A LIE
+Case #22: 1
+Case #23: 1
+Case #24: THE CAKE IS A LIE
+Case #25: 1
+Case #26: 1
+Case #27: THE CAKE IS A LIE
+Case #28: 3
+Case #29: 2
+Case #30: 2
+Case #31: THE CAKE IS A LIE
+Case #32: 5
+Case #33: THE CAKE IS A LIE
+Case #34: 2
+Case #35: 3
+Case #36: 1
+Case #37: 2
+Case #38: 2
+Case #39: 2
+Case #40: 1
+Case #41: THE CAKE IS A LIE
+Case #42: 2
+Case #43: 3
+Case #44: THE CAKE IS A LIE
+Case #45: 2
+Case #46: 3
+Case #47: 3
+Case #48: 3
+Case #49: 2
+Case #50: 2
+Case #51: 4
+Case #52: THE CAKE IS A LIE
+Case #53: THE CAKE IS A LIE
+Case #54: THE CAKE IS A LIE
+Case #55: THE CAKE IS A LIE
+Case #56: THE CAKE IS A LIE
+Case #57: THE CAKE IS A LIE
+Case #58: 1
+Case #59: 1
+Case #60: 2
+Case #61: 1
+Case #62: 6
+Case #63: THE CAKE IS A LIE
+Case #64: 2
+Case #65: 5
+Case #66: 1
+Case #67: 1
+Case #68: THE CAKE IS A LIE
+Case #69: 3
+Case #70: 1
+Case #71: 2
+Case #72: 1
+Case #73: 1
+Case #74: 2
+Case #75: THE CAKE IS A LIE
+Case #76: 1
+Case #77: 5
+Case #78: 1
+Case #79: 1
+Case #80: 1
+Case #81: 2
+Case #82: 1
+Case #83: 2
+Case #84: 1
+Case #85: THE CAKE IS A LIE
+Case #86: 2
+Case #87: THE CAKE IS A LIE
+Case #88: 9
+Case #89: THE CAKE IS A LIE
+Case #90: 1
+Case #91: 1
+Case #92: THE CAKE IS A LIE
+Case #93: THE CAKE IS A LIE
+Case #94: 1
+Case #95: 3
+Case #96: 2
+Case #97: 3
+Case #98: 2
+Case #99: 2
+Case #100: THE CAKE IS A LIE
+Case #101: 4
+Case #102: 3
+Case #103: 2
+Case #104: THE CAKE IS A LIE
+Case #105: 2
+Case #106: 1
+Case #107: 1
+Case #108: 2
+Case #109: THE CAKE IS A LIE
+Case #110: 3
+Case #111: 1
+Case #112: 2
+Case #113: 2
+Case #114: THE CAKE IS A LIE
+Case #115: 1
+Case #116: 5
+Case #117: 2
+Case #118: 1
+Case #119: 3
+Case #120: 1
+Case #121: 1
+Case #122: 1
+Case #123: 1
+Case #124: 1
+Case #125: 2
+Case #126: 1
+Case #127: 1
+Case #128: 2
+Case #129: 2
+Case #130: 1
+Case #131: THE CAKE IS A LIE
+Case #132: THE CAKE IS A LIE
+Case #133: 1
+Case #134: 1
+Case #135: 1
+Case #136: 1
+Case #137: 2
+Case #138: 4
+Case #139: 1
+Case #140: 1
+Case #141: 1
+Case #142: 2
+Case #143: 1
+Case #144: 3
+Case #145: 1
+Case #146: 2
+Case #147: 1
+Case #148: 2
+Case #149: 5
+Case #150: 2
+Case #151: 1
+Case #152: 4
+Case #153: 1
+Case #154: 1
+Case #155: 1
+Case #156: 1
+Case #157: THE CAKE IS A LIE
+Case #158: THE CAKE IS A LIE
+Case #159: 1
+Case #160: 1
+Case #161: THE CAKE IS A LIE
+Case #162: 3
+Case #163: 2
+Case #164: 6
+Case #165: 1
+Case #166: 1
+Case #167: 2
+Case #168: 1
+Case #169: 2
+Case #170: 1
+Case #171: THE CAKE IS A LIE
+Case #172: 1
+Case #173: 2
+Case #174: 1
+Case #175: 3
+Case #176: 2
+Case #177: 2
+Case #178: 3
+Case #179: 1
+Case #180: 1
+Case #181: 2
+Case #182: THE CAKE IS A LIE
+Case #183: 22
+Case #184: 1
+Case #185: THE CAKE IS A LIE
+Case #186: 1
+Case #187: THE CAKE IS A LIE
+Case #188: 2
+Case #189: 7
+Case #190: 1
+Case #191: 1
+Case #192: 2
+Case #193: 2
+Case #194: 2
+Case #195: 1
+Case #196: 1
+Case #197: 1
+Case #198: THE CAKE IS A LIE
+Case #199: 1
+Case #200: THE CAKE IS A LIE
diff --git a/codejam_2008/src/y2008round3/b.rs b/codejam_2008/src/y2008round3/b.rs
index d55ab0d..7fcaed3 100644
--- a/codejam_2008/src/y2008round3/b.rs
+++ b/codejam_2008/src/y2008round3/b.rs
@@ -5,6 +5,8 @@ use std::io::Write;
 use codejam::util::grid::Grid;
 use std::usize;
 use std::cmp::min;
+use std::collections::BinaryHeap;
+use bit_set::BitSet;
 
 /*
 Polygons
@@ -24,18 +26,26 @@ pub fn solve_all_cases()
 
                 let mut grid = Grid::new(n_rows,n_cols);
 
+                let mut start : Vector2d<isize> = Default::default();
+                let mut stop : Vector2d<isize> = Default::default();
+
                 for r in 0..n_rows {
                     for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
                         grid[ (r,c) ] = ch;
+                        if ch == 'X' {
+                            stop = Vector2d::with_val(r as isize, c as isize);
+                        } else if ch == 'O' {
+                            start = Vector2d::with_val(r as isize, c as isize);
+                        }
                     }
                 }
 
                 if case_no != 1 {
-                    continue;
+                   // continue;
                 }
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {}", case_no, if let Some(ans) = solve(&grid) { ans.to_string() } else {
+                writeln!(buffer, "Case #{}: {}", case_no, if let Some(ans) = solve(&grid, &start, &stop) { ans.to_string() } else {
                     "THE CAKE IS A LIE".to_string()
                 }).unwrap();
             }
@@ -52,7 +62,11 @@ X indicates the cake's position.
 
 const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, EAST, SOUTH, WEST];
 
-fn solve(grid: &Grid<char>) -> Option<u32>
+const CLOSEST_WALL_INDEX:usize = 4;
+
+
+
+fn solve(grid: &Grid<char>, start : &Vector2d<isize>, stop : &Vector2d<isize>) -> Option<isize>
 {
     debug!("Grid\n{:#.4?}\n", grid);
 
@@ -63,53 +77,74 @@ fn solve(grid: &Grid<char>) -> Option<u32>
         c[4] = usize::MAX;
     }
 
-    for r in 0..grid.R  {
-        for c in (0..grid.C).rev()  {
-            let coord = Vector2d::with_val(r as isize,c as isize);
-            for (dir_idx, dir) in [NORTH, EAST].iter().enumerate() {
-
-                for &dd_idx in [dir_idx, 4].iter() {
-                    nearest_dir.data[r * grid.C + c][dd_idx] = if grid[&coord] == '#' {
-                        0
-                    } else if let Some(d) = nearest_dir.get_value(&(coord + dir)) {
-                        1 + d[dd_idx]
-                    } else {
-                        1
-                    };
-                }
+    for rr in 0..grid.R  {
+        for cc in 0..grid.C  {
+            //start from top/left corner or bottom/right corner.
+            for &(r,c, dir_start) in [ (rr, grid.C-1-cc, 0), (grid.R - 1- rr, cc, 2) ].iter() {
+                let coord = Vector2d::with_val(r as isize, c as isize);
+                for (dir_idx, dir) in DIRECTIONS.iter().enumerate().skip(dir_start).take(2) {
+                    for &dd_idx in [dir_idx, CLOSEST_WALL_INDEX].iter() {
+                        let val = if grid[&coord] == '#' {
+                            0
+                        } else if let Some(d) = nearest_dir.get_value(&(coord + dir)) {
+                            1 + d[dd_idx]
+                        } else {
+                            1
+                        };
+                        let m_val = nearest_dir.data[r * grid.C + c].get_mut(dd_idx).unwrap();
+                        if dd_idx == CLOSEST_WALL_INDEX {
+                            *m_val = min(*m_val, val);
+                        } else {
+                            *m_val = val;
+                        }
 
+                    }
+                }
             }
+        }
+    }
 
-
+    for r in 0..grid.R {
+        for c in 0..grid.C {
+            debug!("For r {} c {} --> NESW near {:?}", r, c, nearest_dir[(r, c)]);
         }
     }
 
-    for r in (0..grid.R).rev()  {
-        for c in 0..grid.C  {
-            let coord = Vector2d::with_val(r as isize,c as isize);
-            for (dir_idx, dir) in [SOUTH, WEST].iter().enumerate() {
-
-                for &dd_idx in [dir_idx, 4].iter() {
-                    nearest_dir.data[r * grid.C + c][dd_idx] = if grid[&coord] == '#' {
-                        0
-                    } else if let Some(d) = nearest_dir.get_value(&(coord + dir)) {
-                        1 + d[dd_idx]
-                    } else {
-                        1
-                    };
-                }
 
-            }
+    let mut pq:BinaryHeap< (isize, Vector2d<isize>)> = BinaryHeap::new();
+    let mut visited = BitSet::new();
+    pq.push((0, start.clone()));
 
+    while let Some(node) = pq.pop() {
+        let cur = node.1;
+        let idx = cur.r() as usize * grid.C + cur.c() as usize;
+        debug!("Cur is {:?} idx is {}", cur, idx);
 
+        let cost = node.0;
+        if visited.contains(idx) {
+            continue;
         }
-    }
+        if &cur == stop {
+            return Some(-cost);
+        }
+        visited.insert(idx);
 
-    for r in 0..grid.R {
-        for c in 0..grid.C {
-            debug!("For r {} c {} --> NESW near {:?}", r, c, nearest_dir[(r, c)]);
+        for (dir_idx, dir) in DIRECTIONS.iter().enumerate() {
+            //walk
+            let d = nearest_dir[idx][dir_idx];
+            if d > 0 && grid.get_value(&(cur+dir)).is_some() {
+                debug!("Walking Cur is {:?} adding {:?} for dir {}",
+                cur, cur + dir, dir_idx);
+
+                pq.push( (cost - 1, cur + dir));
+            }
+            if d > 1 {
+                debug!("Cur is {:?} adding {:?} for dir {}",
+                cur, cur + &(dir * (d - 1) as isize), dir_idx);
+                pq.push( (cost - nearest_dir[idx][CLOSEST_WALL_INDEX] as isize, cur + &(dir * (d - 1) as isize)));
+            }
         }
     }
 
-    Some(3)
+    None
 }
\ No newline at end of file

From 24dc9d98de2e7e75e679891304b6e3fcfa134beb Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 24 Feb 2019 11:52:25 -0300
Subject: [PATCH 085/122] b

---
 codejam_2008/src/y2008round3/b.rs | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/codejam_2008/src/y2008round3/b.rs b/codejam_2008/src/y2008round3/b.rs
index 7fcaed3..e54e8e9 100644
--- a/codejam_2008/src/y2008round3/b.rs
+++ b/codejam_2008/src/y2008round3/b.rs
@@ -9,7 +9,9 @@ use std::collections::BinaryHeap;
 use bit_set::BitSet;
 
 /*
-Polygons
+Grid
+Dijkstras / priority queue (using negative to make it a min queue)
+
 */
 pub fn solve_all_cases()
 {
@@ -130,14 +132,16 @@ fn solve(grid: &Grid<char>, start : &Vector2d<isize>, stop : &Vector2d<isize>) -
         visited.insert(idx);
 
         for (dir_idx, dir) in DIRECTIONS.iter().enumerate() {
-            //walk
+
             let d = nearest_dir[idx][dir_idx];
+            //either we walk
             if d > 0 && grid.get_value(&(cur+dir)).is_some() {
                 debug!("Walking Cur is {:?} adding {:?} for dir {}",
                 cur, cur + dir, dir_idx);
 
                 pq.push( (cost - 1, cur + dir));
             }
+            //or shoot a portal and go to the closest wall to teleport to it
             if d > 1 {
                 debug!("Cur is {:?} adding {:?} for dir {}",
                 cur, cur + &(dir * (d - 1) as isize), dir_idx);

From 510d226ecee582edad528672c67f8ddd8eae5403 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 24 Feb 2019 15:31:11 -0300
Subject: [PATCH 086/122] c

---
 codejam_2008/src/main.rs                      |    4 +-
 .../src/y2008round3/C-large-practice.in       | 1204 +++++++++++++++++
 .../src/y2008round3/C-large-practice.out      |   20 +
 .../src/y2008round3/C-small-practice.in       |  177 +++
 .../src/y2008round3/C-small-practice.out      |   20 +
 codejam_2008/src/y2008round3/c.rs             |  170 +++
 codejam_2008/src/y2008round3/mod.rs           |    1 +
 7 files changed, 1595 insertions(+), 1 deletion(-)
 create mode 100644 codejam_2008/src/y2008round3/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008round3/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008round3/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008round3/C-small-practice.out
 create mode 100644 codejam_2008/src/y2008round3/c.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index f583e9f..2b5a982 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -83,12 +83,14 @@ pub fn run_y2008_round2()
 pub fn run_y2008_round3()
 {
 y2008round3::a::solve_all_cases();
+    y2008round3::b::solve_all_cases();
+    y2008round3::c::solve_all_cases();
 }
 
 fn main()
 {
     init_log();
-    y2008round3::b::solve_all_cases();
+    y2008round3::c::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round3/C-large-practice.in b/codejam_2008/src/y2008round3/C-large-practice.in
new file mode 100644
index 0000000..8c86401
--- /dev/null
+++ b/codejam_2008/src/y2008round3/C-large-practice.in
@@ -0,0 +1,1204 @@
+20
+80 80
+.xxxxxxxxxxx.x.x.xxxxxx.x.x.xxxxxxxxxxx..xxxxxxxxx.xxxxxxxxxxxxxxxxxx.xx.x.x.xxx
+xxx.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxxx.x.x.xxxx.x.x.x.xx
+xx.x.x.x.x.xxxxxxx.xx.xxxxxxx.x.x.x.x.xxxx.x.x.x.xxx.x.x.x.xx.x.x.x.xx.xxxxxxx.x
+x.xxxxxxx.x.xxxxx.xxxx.xx.xx.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx..xxxxxxx.xx.xxxxx.xx
+xx.xxxxx.x.xx...xx.xx.xxx.xxx.x.xx.xx.xxxx.xxxxx.xxx.xxxxx.xx.xx.xx.xx.xx...xx.x
+x.xx...xx.x.xxxxx.xxxx.xx.xx.x.xxx.xxx.xx.xx...xx.x.xx...xx..xxx.xxx.xx.xxxxx.xx
+xx.xxxxx.x.xxxxxxx.xx.xxxxxxx.x.xx.xx.xxxx.xxxxx.xxx.xxxxx.xx.xx.xx.xx.xxxxxxx.x
+x.xxxxxxx.x.x.x.x.xxxx.x.x.x.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx..xxxxxxx.xx.x.x.x.xx
+xx.x.x.x.xxx.x.x.xxxxxx.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.x.xx.x.x.x.xxxx.x.x.xxx
+xxx.x.x.xxxxxxxxxxx..xxxxxxxxxxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxxx.x.x.xxxxxxxxxxxx.
+xxxxxxxxx.xxxxxxxxx..xxxxxxxxx.xxxxxxxxxxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxxxxxxxxxx.
+xx.x.x.xxxxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.x.xxx.x.x.xxx
+x.x.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.x.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx.x.x.x.x.xx
+.xxxxxxx.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx.x.xxxxx.xxxx.xx.xx.xxx.xx.xx.x.xxxxxxx.x
+x.xx.xx.xxx.xx.xx.xxxx.xxxxx.xxx.xxxxx.x.xx...xx.xx.xxx.xxx.x.xxx.xxx.x.xx.xx.xx
+.xxx.xxx.x.xxx.xxx.xx.xx...xx.x.xx...xx.x.xxxxx.xxxx.xx.xx.xxx.xx.xx.x.xxx.xxx.x
+x.xx.xx.xxx.xx.xx.xxxx.xxxxx.xxx.xxxxx.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx.x.xx.xx.xx
+.xxxxxxx.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx.x.x.x.x.xxxx.x.x.x.xxx.x.x.x.x.xxxxxxx.x
+x.x.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.x.xxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxx.x.x.x.xx
+xx.x.x.xxxxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxxxxxxxxxx..xxxxxxxxx.xxxxxxxxxxx.x.x.xxx
+xxxxxxxxx.xxx.x.x.xxxxxxxxxxx.xxxxxxxxx.xx.x.x.xxxxx.x.x.xxxxx.x.x.xxxxxxxxxxxx.
+xx.x.x.xxxxx.x.x.x.xxx.x.x.xxxxx.x.x.xxxx.x.x.x.xxx.x.x.x.xxx.x.x.x.xxxx.x.x.xxx
+x.x.x.x.xxx.xxxxxxx.x.x.x.x.xxx.x.x.x.xx.xxxxxxx.x.xxxxxxx.x.xxxxxxx.xx.x.x.x.xx
+.xxxxxxx.xxx.xx.xx.x.xxxxxxx.x.xxxxxxx.xx.xxxxx.xxx.xxxxx.xxx.xxxxx.xx.xxxxxxx.x
+x.xx.xx.xxx.xxx.xxx.x.xx.xx.xxx.xx.xx.xx.xx...xx.x.xx...xx.x.xx...xx.xx.xx.xx.xx
+.xxx.xxx.xxx.xx.xx.x.xxx.xxx.x.xxx.xxx.xx.xxxxx.xxx.xxxxx.xxx.xxxxx.xx.xxx.xxx.x
+x.xx.xx.xxx.xxxxxxx.x.xx.xx.xxx.xx.xx.xx.xxxxxxx.x.xxxxxxx.x.xxxxxxx.xx.xx.xx.xx
+.xxxxxxx.xxx.x.x.x.x.xxxxxxx.x.xxxxxxx.xx.x.x.x.xxx.x.x.x.xxx.x.x.x.xx.xxxxxxx.x
+x.x.x.x.xxxxx.x.x.xxx.x.x.x.xxx.x.x.x.xxxx.x.x.xxxxx.x.x.xxxxx.x.x.xxxx.x.x.x.xx
+xx.x.x.xxx.xxxxxxxxxxx.x.x.xxxxx.x.x.xxxxxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xx.x.x.xxx
+xxxxxxxxx..xxxxxxxxxxxx.x.x.xx.xxxxxxxxxxxx.x.x.xx.xxxxxxxxxxxxxxxxxx.xx.x.x.xxx
+xx.x.x.xxxxxx.x.x.xxxx.x.x.x.xxxx.x.x.xxxx.x.x.x.xxxx.x.x.xxxx.x.x.xxxx.x.x.x.xx
+x.x.x.x.xxxx.x.x.x.xx.xxxxxxx.xx.x.x.x.xx.xxxxxxx.xx.x.x.x.xx.x.x.x.xx.xxxxxxx.x
+.xxxxxxx.xx.xxxxxxx.xx.xx.xx.xx.xxxxxxx.xx.xx.xx.xx.xxxxxxx..xxxxxxx.xx.xxxxx.xx
+x.xx.xx.xxxx.xxxxx.xx.xxx.xxx.xx.xxxxx.xx.xxx.xxx.xx.xxxxx.xx.xx.xx.xx.xx...xx.x
+.xxx.xxx.xx.xx...xx.xx.xx.xx.xx.xx...xx.xx.xx.xx.xx.xx...xx..xxx.xxx.xx.xxxxx.xx
+x.xx.xx.xxxx.xxxxx.xx.xxxxxxx.xx.xxxxx.xx.xxxxxxx.xx.xxxxx.xx.xx.xx.xx.xxxxxxx.x
+.xxxxxxx.xx.xxxxxxx.xx.x.x.x.xx.xxxxxxx.xx.x.x.x.xx.xxxxxxx..xxxxxxx.xx.x.x.x.xx
+x.x.x.x.xxxx.x.x.x.xxxx.x.x.xxxx.x.x.x.xxxx.x.x.xxxx.x.x.x.xx.x.x.x.xxxx.x.x.xxx
+xx.x.x.xxxxxx.x.x.xx.xxxxxxxxxxxx.x.x.xx.xxxxxxxxxxxx.x.x.xxxx.x.x.xxxxxxxxxxxx.
+xxxxxxxxx.xxx.x.x.xxxx.x.x.xxx.xxxxxxxxxxxx.x.x.xxxxx.x.x.xxxx.x.x.xxxxxx.x.x.xx
+xx.x.x.xxxxx.x.x.x.xx.x.x.x.xxxxx.x.x.xxxx.x.x.x.xxx.x.x.x.xx.x.x.x.xxxx.x.x.x.x
+x.x.x.x.xxx.xxxxxxx..xxxxxxx.xxx.x.x.x.xx.xxxxxxx.x.xxxxxxx..xxxxxxx.xx.xxxxxxx.
+.xxxxxxx.xxx.xx.xx.xx.xxxxx.xxx.xxxxxxx.xx.xx.xx.xxx.xx.xx.xx.xxxxx.xxxx.xx.xx.x
+x.xx.xx.xxx.xxx.xxx..xx...xx.xxx.xxxxx.xx.xxx.xxx.x.xxx.xxx..xx...xx.xx.xxx.xxx.
+.xxx.xxx.xxx.xx.xx.xx.xxxxx.xxx.xx...xx.xx.xx.xx.xxx.xx.xx.xx.xxxxx.xxxx.xx.xx.x
+x.xx.xx.xxx.xxxxxxx..xxxxxxx.xxx.xxxxx.xx.xxxxxxx.x.xxxxxxx..xxxxxxx.xx.xxxxxxx.
+.xxxxxxx.xxx.x.x.x.xx.x.x.x.xxx.xxxxxxx.xx.x.x.x.xxx.x.x.x.xx.x.x.x.xxxx.x.x.x.x
+x.x.x.x.xxxxx.x.x.xxxx.x.x.xxxxx.x.x.x.xxxx.x.x.xxxxx.x.x.xxxx.x.x.xxxxxx.x.x.xx
+xx.x.x.xxx.xxxxxxxxxxxxxxxxxx.xxx.x.x.xx.xxxxxxxxx.xxxxxxxxxxxxxxxxxx..xxxxxxxxx
+xxx.x.x.xxxxxxxxxxx.xx.x.x.xxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxx.xxxxxxxxx..xxxxxxxxx
+xx.x.x.x.xxx.x.x.xxxx.x.x.x.xxxxx.x.x.xxxxx.x.x.xxxx.x.x.xxxxx.x.x.xxxxxx.x.x.xx
+x.xxxxxxx.x.x.x.x.xx.xxxxxxx.xxx.x.x.x.xxx.x.x.x.xx.x.x.x.xxx.x.x.x.xxxx.x.x.x.x
+xx.xx.xx.x.xxxxxxx.xx.xxxxx.xxx.xxxxxxx.x.xxxxxxx..xxxxxxx.x.xxxxxxx.xx.xxxxxxx.
+x.xxx.xxx.x.xx.xx.xx.xx...xx.xxx.xxxxx.xxx.xxxxx.xx.xx.xx.xxx.xx.xx.xxxx.xxxxx.x
+xx.xx.xx.x.xxx.xxx.xx.xxxxx.xxx.xx...xx.x.xx...xx..xxx.xxx.x.xxx.xxx.xx.xx...xx.
+x.xxxxxxx.x.xx.xx.xx.xxxxxxx.xxx.xxxxx.xxx.xxxxx.xx.xx.xx.xxx.xx.xx.xxxx.xxxxx.x
+xx.x.x.x.x.xxxxxxx.xx.x.x.x.xxx.xxxxxxx.x.xxxxxxx..xxxxxxx.x.xxxxxxx.xx.xxxxxxx.
+xxx.x.x.xxx.x.x.x.xxxx.x.x.xxxxx.x.x.x.xxx.x.x.x.xx.x.x.x.xxx.x.x.x.xxxx.x.x.x.x
+.xxxxxxxxxxx.x.x.xxxxxxxxxxxx.xxx.x.x.xxxxx.x.x.xxxx.x.x.xxxxx.x.x.xxxxxx.x.x.xx
+xxx.x.x.xxxxxxxxxxx..xxxxxxxxx.xxxxxxxxxxxx.x.x.xxxxxxxxxxx.xxxxxxxxx.xxx.x.x.xx
+xx.x.x.x.xxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxxx.x.x.x.xxx.x.x.xxxxx.x.x.xxxxx.x.x.x.x
+x.xxxxxxx.x.x.x.x.xxxx.x.x.x.xxx.x.x.x.xx.xxxxxxx.x.x.x.x.xxx.x.x.x.xxx.xxxxxxx.
+xx.xx.xx.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx.xx.xx.xx.x.xxxxxxx.x.xxxxxxx.xxx.xx.xx.x
+x.xxx.xxx.x.xx.xx.xxxx.xxxxx.xxx.xxxxx.xx.xxx.xxx.x.xx.xx.xxx.xx.xx.xxx.xxx.xxx.
+xx.xx.xx.x.xxx.xxx.xx.xx...xx.x.xx...xx.xx.xx.xx.x.xxx.xxx.x.xxx.xxx.xxx.xx.xx.x
+x.xxxxxxx.x.xx.xx.xxxx.xxxxx.xxx.xxxxx.xx.xxxxxxx.x.xx.xx.xxx.xx.xx.xxx.xxxxxxx.
+xx.x.x.x.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx.xx.x.x.x.x.xxxxxxx.x.xxxxxxx.xxx.x.x.x.x
+xxx.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.x.xxxx.x.x.xxx.x.x.x.xxx.x.x.x.xxxxx.x.x.xx
+.xxxxxxxxxxx.x.x.xxxxxx.x.x.xxxxx.x.x.xx.xxxxxxxxxxx.x.x.xxxxx.x.x.xxx.xxxxxxxxx
+.xxxxxxxxxxxx.x.x.xxxx.x.x.xxxxx.x.x.xxxxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxxx.x.x.xxx
+xxx.x.x.xxxx.x.x.x.xx.x.x.x.xxx.x.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.x.xx.x.x.x.xx
+xx.x.x.x.xx.xxxxxxx..xxxxxxx.x.xxxxxxx.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx..xxxxxxx.x
+x.xxxxxxx.xx.xx.xx.xx.xxxxx.xxx.xxxxx.xxx.xxxxx.xxxx.xx.xx.xxx.xx.xx.xx.xxxxx.xx
+xx.xxxxx.xx.xxx.xxx..xx...xx.x.xx...xx.x.xx...xx.xx.xxx.xxx.x.xxx.xxx..xx...xx.x
+x.xx...xx.xx.xx.xx.xx.xxxxx.xxx.xxxxx.xxx.xxxxx.xxxx.xx.xx.xxx.xx.xx.xx.xxxxx.xx
+xx.xxxxx.xx.xxxxxxx..xxxxxxx.x.xxxxxxx.x.xxxxxxx.xx.xxxxxxx.x.xxxxxxx..xxxxxxx.x
+x.xxxxxxx.xx.x.x.x.xx.x.x.x.xxx.x.x.x.xxx.x.x.x.xxxx.x.x.x.xxx.x.x.x.xx.x.x.x.xx
+xx.x.x.x.xxxx.x.x.xxxx.x.x.xxxxx.x.x.xxxxx.x.x.xxxxxx.x.x.xxxxx.x.x.xxxx.x.x.xxx
+xxx.x.x.xx.xxxxxxxxxxxxxxxxxx.xxxxxxxxx.xxxxxxxxx..xxxxxxxxx.xxxxxxxxxxxxxxxxxx.
+80 80
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxx..xxxx
+x.x..x.x.xx..x.x..xxxx.......xx.x..x.x.xxx.......xx.x..x.x.xx..x.x..xxx....x.x.x
+xx..xx...xxx..xxxx.xx.x.xxx..xxx..xx...xx.x.xxx..xxx..xx...xxx..xxxx.xx..xxxx.xx
+x.xxxxx.xxx..xx.x..xx.xxxxxx.xx.xxxxx.xxx.xxxxxx.xx.xxxxx.xxx..xx.x..xx.xx.xx..x
+.xxxx.xx.x.xxx..xx.x.xx....x...xxxx.xx.x.xx....x...xxxx.xx.x.xxx..xx.x..xx.xxx.x
+..x....xx.x.xxx.xx..x.xx.xxxx...x....xx.x.xx.xxxx...x....xx.x.xxx.xx..x.xx..xxx.
+x.xxxxxx.xx..xx.xx.xxx.xxxxx.xx.xxxxxx.xxx.xxxxx.xx.xxxxxx.xx..xx.xx.xx..x.xx..x
+x..xxx.x.xxx.xxxx..xx...xx..xxx..xxx.x.xx...xx..xxx..xxx.x.xxx.xxxx..xx.xxxx..xx
+x.......xxx.x.x....xx.x.x..x.xx.......xxx.x.x..x.xx.......xxx.x.x....xxx..x.x..x
+xxxx.xxxxxxxxx..xxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx..xxxxxxxx.xxxxx
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+xx.......xxx.......xx..x.x..xxx.x..x.x.xx..x.x..xxx.x..x.x.xx.x..x.x.xx..x.x..xx
+x.x.xxx..xx.x.xxx..xxx..xxxx.xxx..xx...xxx..xxxx.xxx..xx...xxx..xx...xxx..xxxx.x
+x.xxxxxx.xx.xxxxxx.xx..xx.x..xx.xxxxx.xxx..xx.x..xx.xxxxx.xxx.xxxxx.xxx..xx.x..x
+.xx....x...xx....x...xxx..xx.x.xxxx.xx.x.xxx..xx.x.xxxx.xx.x.xxxx.xx.x.xxx..xx.x
+x.xx.xxxx.x.xx.xxxx.x.xxx.xx....x....xx.x.xxx.xx....x....xx...x....xx.x.xxx.xx..
+xx.xxxxx.xxx.xxxxx.xx..xx.xx.xx.xxxxxx.xx..xx.xx.xx.xxxxxx.xx.xxxxxx.xx..xx.xx.x
+x...xx..xxx...xx..xxxx.xxxx..xx..xxx.x.xxx.xxxx..xx..xxx.x.xx..xxx.x.xxx.xxxx..x
+x.x.x..x.xx.x.x..x.xx.x.x....xx.......xxx.x.x....xx.......xxx.......xxx.x.x....x
+xxxx.xxxxxxxxx.xxxxxxxxx..xxxxxxxx.xxxxxxxxx..xxxxxxxx.xxxxxxxxx.xxxxxxxxx..xxxx
+xxxx..xxxxxxxxx.xxxxxxxx..xxxxxxxx..xxxxxxxxx.xxxxxxxx..xxxxxxxxx.xxxxxxxxx.xxxx
+x....x.x.xx..x.x..xxx....x.x.xx....x.x.xx.x..x.x.xx....x.x.xx.x..x.x.xxx.......x
+x..xxxx.xxxx..xxxx.xx..xxxx.xxx..xxxx.xxxx..xx...xx..xxxx.xxxx..xx...xx.x.xxx..x
+x.xx.xx..xx..xx.x..xx.xx.xx..xx.xx.xx..xx.xxxxx.xxx.xx.xx..xx.xxxxx.xxx.xxxxxx.x
+..xx.xxx.x.xxx..xx.x..xx.xxx.x..xx.xxx.x.xxxx.xx.x..xx.xxx.x.xxxx.xx.x.xx....x..
+x.xx..xxx.x.xxx.xx..x.xx..xxx.x.xx..xxx...x....xx.x.xx..xxx...x....xx.x.xx.xxxx.
+x..x.xx..xx..xx.xx.xx..x.xx..xx..x.xx..xx.xxxxxx.xx..x.xx..xx.xxxxxx.xxx.xxxxx.x
+x.xxxx..xxxx.xxxx..xx.xxxx..xxx.xxxx..xxx..xxx.x.xx.xxxx..xxx..xxx.x.xx...xx..xx
+xx..x.x..xx.x.x....xxx..x.x..xxx..x.x..xx.......xxxx..x.x..xx.......xxx.x.x..x.x
+xxxx.xxxxxxxxx..xxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x..x.x..xxx..x.x..xxx..x.x..xxx.x..x.x.xx.x..x.x.xx.x..x.x.xxx.......xx..x.x..xx
+xx..xxxx.xxx..xxxx.xxx..xxxx.xxx..xx...xxx..xx...xxx..xx...xx.x.xxx..xxx..xxxx.x
+x..xx.x..xx..xx.x..xx..xx.x..xx.xxxxx.xxx.xxxxx.xxx.xxxxx.xxx.xxxxxx.xx..xx.x..x
+.xxx..xx.x.xxx..xx.x.xxx..xx.x.xxxx.xx.x.xxxx.xx.x.xxxx.xx.x.xx....x...xxx..xx.x
+x.xxx.xx..x.xxx.xx..x.xxx.xx....x....xx...x....xx...x....xx.x.xx.xxxx.x.xxx.xx..
+x..xx.xx.xx..xx.xx.xx..xx.xx.xx.xxxxxx.xx.xxxxxx.xx.xxxxxx.xxx.xxxxx.xx..xx.xx.x
+xx.xxxx..xxx.xxxx..xxx.xxxx..xx..xxx.x.xx..xxx.x.xx..xxx.x.xx...xx..xxxx.xxxx..x
+x.x.x....xx.x.x....xx.x.x....xx.......xxx.......xxx.......xxx.x.x..x.xx.x.x....x
+xxxx..xxxxxxxx..xxxxxxxx..xxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx..xxxx
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxx..xxxxxxxxx.xxxxxxxxx.xxxx
+x..x.x..xxx..x.x..xxxx.......xx.x..x.x.xxx.......xx....x.x.xx.x..x.x.xx..x.x..xx
+xx..xxxx.xxx..xxxx.xx.x.xxx..xxx..xx...xx.x.xxx..xx..xxxx.xxxx..xx...xxx..xxxx.x
+x..xx.x..xx..xx.x..xx.xxxxxx.xx.xxxxx.xxx.xxxxxx.xx.xx.xx..xx.xxxxx.xxx..xx.x..x
+.xxx..xx.x.xxx..xx.x.xx....x...xxxx.xx.x.xx....x....xx.xxx.x.xxxx.xx.x.xxx..xx.x
+x.xxx.xx..x.xxx.xx..x.xx.xxxx...x....xx.x.xx.xxxx.x.xx..xxx...x....xx.x.xxx.xx..
+x..xx.xx.xx..xx.xx.xxx.xxxxx.xx.xxxxxx.xxx.xxxxx.xx..x.xx..xx.xxxxxx.xx..xx.xx.x
+xx.xxxx..xxx.xxxx..xx...xx..xxx..xxx.x.xx...xx..xxx.xxxx..xxx..xxx.x.xxx.xxxx..x
+x.x.x....xx.x.x....xx.x.x..x.xx.......xxx.x.x..x.xxx..x.x..xx.......xxx.x.x....x
+xxxx..xxxxxxxx..xxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx..xxxx
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxx..xxxxxxxxx.xxxxxxxxx.xxxxxxxx..xxxx
+xx.......xxx.......xxx.......xx.x..x.x.xx....x.x.xxx.......xx..x.x..xxx....x.x.x
+x.x.xxx..xx.x.xxx..xx.x.xxx..xxx..xx...xx..xxxx.xxx.x.xxx..xxx..xxxx.xx..xxxx.xx
+x.xxxxxx.xx.xxxxxx.xx.xxxxxx.xx.xxxxx.xxx.xx.xx..xx.xxxxxx.xx..xx.x..xx.xx.xx..x
+.xx....x...xx....x...xx....x...xxxx.xx.x..xx.xxx.x.xx....x...xxx..xx.x..xx.xxx.x
+x.xx.xxxx.x.xx.xxxx.x.xx.xxxx...x....xx.x.xx..xxx.x.xx.xxxx.x.xxx.xx..x.xx..xxx.
+xx.xxxxx.xxx.xxxxx.xxx.xxxxx.xx.xxxxxx.xx..x.xx..xxx.xxxxx.xx..xx.xx.xx..x.xx..x
+x...xx..xxx...xx..xxx...xx..xxx..xxx.x.xx.xxxx..xxx...xx..xxxx.xxxx..xx.xxxx..xx
+x.x.x..x.xx.x.x..x.xx.x.x..x.xx.......xxxx..x.x..xx.x.x..x.xx.x.x....xxx..x.x..x
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx..xxxxxxxx.xxxxx
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxx..xxxxxxxx..xxxxxxxxx.xxxx
+x.x..x.x.xx..x.x..xxxx.......xx..x.x..xxx.x..x.x.xx....x.x.xx....x.x.xxx.......x
+xx..xx...xxx..xxxx.xx.x.xxx..xxx..xxxx.xxx..xx...xx..xxxx.xxx..xxxx.xxx.x.xxx..x
+x.xxxxx.xxx..xx.x..xx.xxxxxx.xx..xx.x..xx.xxxxx.xxx.xx.xx..xx.xx.xx..xx.xxxxxx.x
+.xxxx.xx.x.xxx..xx.x.xx....x...xxx..xx.x.xxxx.xx.x..xx.xxx.x..xx.xxx.x.xx....x..
+..x....xx.x.xxx.xx..x.xx.xxxx.x.xxx.xx....x....xx.x.xx..xxx.x.xx..xxx.x.xx.xxxx.
+x.xxxxxx.xx..xx.xx.xxx.xxxxx.xx..xx.xx.xx.xxxxxx.xx..x.xx..xx..x.xx..xxx.xxxxx.x
+x..xxx.x.xxx.xxxx..xx...xx..xxxx.xxxx..xx..xxx.x.xx.xxxx..xxx.xxxx..xxx...xx..xx
+x.......xxx.x.x....xx.x.x..x.xx.x.x....xx.......xxxx..x.x..xxx..x.x..xx.x.x..x.x
+xxxx.xxxxxxxxx..xxxxxxxx.xxxxxxxxx..xxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+xxxxx.xxxxxxxxx.xxxxxxxx..xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxx..xxxxxxxxx.xxxx
+x..x.x..xxx..x.x..xxx....x.x.xxx.......xxx.......xxx.......xx....x.x.xx.x..x.x.x
+xx..xxxx.xxx..xxxx.xx..xxxx.xxx.x.xxx..xx.x.xxx..xx.x.xxx..xx..xxxx.xxxx..xx...x
+x..xx.x..xx..xx.x..xx.xx.xx..xx.xxxxxx.xx.xxxxxx.xx.xxxxxx.xx.xx.xx..xx.xxxxx.xx
+.xxx..xx.x.xxx..xx.x..xx.xxx.x.xx....x...xx....x...xx....x....xx.xxx.x.xxxx.xx.x
+x.xxx.xx..x.xxx.xx..x.xx..xxx.x.xx.xxxx.x.xx.xxxx.x.xx.xxxx.x.xx..xxx...x....xx.
+x..xx.xx.xx..xx.xx.xx..x.xx..xxx.xxxxx.xxx.xxxxx.xxx.xxxxx.xx..x.xx..xx.xxxxxx.x
+xx.xxxx..xxx.xxxx..xx.xxxx..xxx...xx..xxx...xx..xxx...xx..xxx.xxxx..xxx..xxx.x.x
+x.x.x....xx.x.x....xxx..x.x..xx.x.x..x.xx.x.x..x.xx.x.x..x.xxx..x.x..xx.......xx
+xxxx..xxxxxxxx..xxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+79 77
+x.x...x.....xx.x....xx..........xxx..x.xxxxxxx...x.....xxx..........xx..x....
+xx..x.x.x....xxx.x..xx.xxx..xx.x....x.xx....xx.xx...x...x.xx.x.x..x..xx.x...x
+....x..x.x.x...xxx..x.x......x.x...x..xxx.x..x....xx...xx.x..xx..x.x.xxx.....
+.x......xxx..x...xx.xx.x..x....x.x.x..xx.x.x...x....xx...x.....x.xx..xx....x.
+.x..xx..x.xxx.......x..x.x..x.x.x.xx...xxx...xx.x.xxx...x.x..xx..xxxx.....x.x
+xxxx..x.x....x..........x..x.xxx..xxxx.xx..x..xxx...x......xxxx.........xxx..
+x.x..x....x.....x.x...x..x..x..x.x..x.....xxxx...x...x........xx.x..x...xx..x
+.......x.x....xx..xx.xx..xxxx.x..x...x.x.x.x....x....x..x..xxx..x.x...xx.....
+x...xx...x.x.xxxx.x..xx....xxx.x..xxx.....x..x..x.xxx...xxxxxxx..x......x.x.x
+x..x..xxx..x.....x.xx.xxx.xxx..x.xxx.x.xxx.x....x...xx.x...x.xxx.x...x..xx..x
+...x.xx.x..x.....x.x.......x..xxx...x.x....xxx.x..x....x.xx...x...x..xx....xx
+.x.xx..xx..x.....xx.....xx.x..x.x..x.x...x...xx..x.xxx...x.xx..x...x.x..xxxx.
+.xx..xxx...xx..x....x..xx...x.......xx...xxx..x.x..x.x.xxx.xx.x.....xx......x
+x.x.....x...x.....x.x...x....xx.x...x.xxx....xx.........xx......x..xxx.x.....
+xx....xxx.x..xx.xx.......x.x.x..x..xx.xx...x.....x..x....xx.x...xx.x.......x.
+xxx.....x..........xxx.x.x..xxxx....x.....x.xxxx.xx..xxxxx..xx.....x...x.....
+xx.xx..x.x..xx.x.....xx...x.xx..xx......x..x....x.x..xxx.xx.x.xxxx.x.x....x..
+.xxxx..x.x..x..xxx.....x..xx..xx.x..xxx..x...xxx...x.xx..xxx.....xx..x..xx.x.
+....xx...xx.x...x..x....x..xxx.x.....xx..xx..x...xxx..x.x.x.x.....xx.....xx..
+x.x...x..x.....xxx...x.x...xx..x....xxx...xx..x..xx.x..x.xx...x...x.x.x.....x
+..xx...xx...x.xx.x...x...x.x.xx...x.x..x.....x.x.xx....xxx.....xx......x...xx
+...x.x..xx.x...x.x..x.x..x..x......xxx...x....xx...x...x...x.x.xxxx..xxx..xx.
+x.....xx..xxxx.....x.x.x.x.xx..x.xxx.xxxx.xx....x..xx.x.......x..x......x..xx
+.......xxxxxx.x.x..xx....xxxxx.x.x.xxx.x......x....x..xx.x.x.xx.x.x.x...xxx..
+.x..x.x....xx..x.x.xxxx...x.x...x..x..xxx.xxxx..xxx....x..x......xxxxxxxx..x.
+xxx...xxxx.xx.....xx.xxx..xxx.....xx.x..xxx.x.xx..x.....x.xx...x...xx.x.xxx.x
+.....x.x..x...xx.....x..xxx.....x.....x...x.x.....x..x.xx....x.....x....xxxx.
+xx..xxxx.x...xxx..x....xxxxx.....xx...x.x..xx.x....x..xxxx.x...x.x...xx...x.x
+....xx.xxx....x.xxxxx.xx.x.xx...x..x..x...x.xxx..x..xx.xx.x.x.xx...xx..x.x...
+..xxx.x..x...xx..xx..x..x..x...xxx.x...x..x..xx..xx.x.xx....x..x.x......xx.xx
+.........x..xx..xx..x.x..x....xx.xxx.xxxx.....xxx..x...xx...xxx.xx..x.....x.x
+x.xxx..xx.x..xx.x.x.....xx...x..xx.x...x..xx.xxxxx.....x...x..x...x.x...x.xxx
+..x.xx......x.xxx.....xx.x.xx.x.x.....x..x...x.x.....x..xxx...xx.......x..x..
+.....xx..xxxx.x..x...x..x.x..x..x.x.......xxxxx.x....x.....xx..x.xxx..x..xxxx
+x..x..xxxx.x.xx...x.......xx.xxxxxx.......x..xxx..x.x.x..x.x.xx.x.xxxxx..xxxx
+..x...x..xxxxx...x.xx.x...xxx...x......x..x...xx.x.x........xxx...x.x..xx....
+xx.x..xx..x....xxxx...xxxx.xxx.x..xx.x.xx..xx.xx.xxx.x.x.xx.xx..x...xx...x.x.
+..xx..x.xxxx.....x..x...xxxx.....x....x.x.x....xx..xx..x.xx..x..xxx.xx.x...xx
+.xxx..x..xx..x...x..x.x.xx..x.x.xx.x...xxxx.x......xx..xxxx.xxx.x..x...x..x..
+..x.x..xx....x....xxx.x.x..x.x.....x....xxx.xx...xx..........xx.x...xxx......
+x.xx.x.xx.x...x...x....x.x....xxx.xx.xxx.x.x..x..xx.....xxxx..xxx.xx.xx...x..
+xx.xxx.x...x.....x..x...xxx......x.xx.x.x.xxx..xx..xxx....xx.x..x...x..xx....
+x........x....x.x...xx.x.xxx.....xxx.x.x.x.xx.....x..x..xxxxx...xx.x..xxxxxx.
+.......xxxx.....x...x.x.xx.xxxxx....x...x.x.x.x...x.xx.xx.......xx.xxx.xx....
+xxx.x.x.....xxx....x..x...xx.....xx.x.x..xx.....xx..x...xxx..xxxx..x.xx.xx...
+..x.xxx.x.xxx......x.xxxxxx..x....x.xx.xx.x.xxxxx.x.x....xx....x.xx.x....xx.x
+x.xxx.x...x.......x...x.x..x..xx..x....xx.xx...x..xxxx.xx..x..xx...xxx.......
+..xx..xx...xx..xx......xx.x.x...x..xxxx...xx.....xx.xx.x..x.x.x..x..x.xx.xxxx
+..xx..xx...x....xxxx....x........x.x.x......x.xx.x..x.xx....x.x..xx.x...xxx..
+....xxxxx...xxxx..x.xx....x.x....x....x.xx.....x..........xx.x.x..x.xx.xxx...
+.x..x.x.x..xx..x.x.xx..xx..x..xx.....x..x.xx.x.xxx.xxx.xxx.x.....x.x.xx..x.xx
+x...x...xx...xx.....x.x.x..x.....x...x..x.xx...x.xx.xx.xxx...x...xxx..x.x...x
+.x..x.x.....x...xx...xx....x..xx.x.xx...x.x....xx...x.x.........x..x......x..
+xx.xx.xx....xxxx..xx.x.x.......x..x.x.x.x.xxxxxxx....x..x..x.xxxx.xxxxxxxx...
+...xx..xx.xxxx.....xx.x....xx.....x..x.x.xx...xx......x......x....x....xxx.xx
+..x.xx...x.x..xxx.........xx.xxx........xxxxx.x.xxxx.......xx....xxx..xxxxxx.
+..x.xx..xx......x.xx.xx.xx...x......xx.x..xxxxx......x.......x.....x.xxx...x.
+..xx....x.x..xx.....x.x.x......x.x.x...xx....x...x.xx..x.x.xx.x.....x....x..x
+xxxx.x..x.x.xx......x..x.x.x....x.xx....xxxx.x.x....x..x.x..x........x.xx....
+x.xx.xx.x.......xx.x.x.x.xxx.xx....x.xx..xx.....x...x....x.xxxxx...xx...xxx..
+.xx.x....x.xx..x.............x.x.xx......x..x.x.x.....x.x.....xx.x.x..x..x...
+...xxx..xx.....x.....x.xxx...x.x..xxxx....xxx....x...x...xxx.xxx..x..x.......
+....xxx.....xx.x..xxxxxx..xxxxx....x.......x..xx..x..xxx.x.xx..xx.xx....xx..x
+x.....xx.x.x...x......xx....xx.xx..xx.xxxxx.x...xx..x.x.x.x.x.xx...........x.
+xx.....x...x.x..x.xxx.xx.xxx.x.xxx.....xx....x.x..xx..xx.xxx..x.x.x..xx.....x
+..x..xxx.x....x.x..xx..x..x....xxx..x.x.xxx..xxxx.xxx.xx..xxx.xx..xx.x..xxxx.
+.x.x...xx............xxx.x.x....xxx.......x.x.xx.x.xxx..x.........x...xxx....
+x..x.xx..x..xxx....xx..xxx..x.xx.x.x...xxx..xxx.x.xx.xx......x.xxx..x.xxxx..x
+......xxxx....xxx.x.xx.x..x...xx...xxx.x..x....xx..xx.x.x.x...xx.x.xxx....x..
+..x..x....x..xxxxxxx....xxx.......xx.....xx.xx..xx.......xx...........xx.x.xx
+..x..x.x.x...x..xxx....x.xx..x...x..x..xxxx..x.....xxx..x.xx.xx.x.x.....xx..x
+xx...xx...xxx......x.x..xx.xxx.xx.x....xx.x.xxx...x....x.x.xxx....xxx.....xx.
+xx..xx...x.x....xx.xxxxx...xx.xx..xx....x.x........x.xxx.x..x.xx.xxxx.xx.xx..
+...x....x..xxxx..xx.x.xx...x...x..x.x.xx..x.x....x.x....xx..x...xx.xx.x.....x
+x.xx.xx....x...xxxxx.x.x.xx.....x..xx..x...xx.x.xx...x.xx......x....xx.xx.xx.
+.....xx.x..x....x.x.xxx.xx..xx.....x.............x..x..x.......xxx..x.x...xx.
+xx.x...........xx.x.x...xxxx......x.........xx..xxxxx.xxx...xx.....x..x.xx.xx
+..x...x.....x..xxxxx...x.xx.x.x.x..xx.......x....x...x..........x..xx.x.x.x..
+xx.xxx.x......x.x....x........xx..xxxxx..x...xxxxx....xx.x...........x..xxxx.
+40 8
+....x...
+.x..x...
+xx.x..x.
+..x.x...
+.xx....x
+...x...x
+.xx.xx..
+.x.x...x
+.......x
+..x...x.
+.x......
+...x....
+.x....x.
+.x..x...
+xx...xxx
+x.x...xx
+.x...x..
+x..xx.x.
+..xxxxxx
+x....x..
+x..x.x.x
+........
+......xx
+.x.xx.x.
+........
+xxx....x
+xxx..x..
+x..x....
+x..xxx.x
+x.x...x.
+.x..xx.x
+...xxxx.
+...x.x..
+...xx...
+..x.xxxx
+........
+xx..xx..
+.xx.....
+..xx..x.
+..x.....
+73 17
+....x.x..xx...x..
+x..........x.....
+.............x...
+xx..............x
+x........x.......
+........x........
+.x....x...x......
+.........x.......
+..........x....x.
+........x.x.x....
+...x............x
+.......x........x
+.........x.......
+x....x...........
+.......x.x..x.x..
+..............x..
+..........x....x.
+..x..x........xx.
+.................
+.......x........x
+........x.x.x....
+..x.......x.....x
+.................
+.x.....x....x...x
+.................
+..x..x...........
+........xx....x..
+......x..........
+.x...............
+.x.....x.........
+....xx...x.......
+x...x....x......x
+......x......x...
+..x.........xx...
+...xxx...x....x..
+.....xx..........
+................x
+x..........x.x...
+x................
+...........x.x...
+..x.............x
+....x....x..x....
+...x...x...x.....
+............x....
+...x...........x.
+x...xx........x..
+.....x.x........x
+....x..xx.x......
+.....x..........x
+.................
+....x.......x.x..
+x....x.x.x.......
+.......x..x......
+.........x....x..
+.........x....x.x
+.x........xxx....
+.................
+......x..x...x...
+.............x..x
+.................
+..x..............
+..x.........x....
+.....x.......x..x
+..x......x.......
+..............x.x
+.x...x......x....
+....xx...x....xx.
+.x.....x.x.x...x.
+.x..x..x.xx......
+.xx..............
+...x.x...........
+xx...........x...
+..x....x......x..
+1 1
+.
+80 80
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+...x.xx.x..x.x.xx....xxx.xx.x..x.x.xx....x.x.xx....x.x.xx......x.xx.x..x.x.xxxx.
+x..xx.xx.xx..xx.x..xxxxxx.x..xx..xx.x..xx..xx.x..xx..xx.x..xx..xx.xx.xx.xxx.xxxx
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x..x.xxxxxxxxx.xxx.xx.xx.xx..xxxxx.xxx.xxxxx.xxx.xxxxx.xxx.xx..x.xxxxxx..x.xx..x
+.x.xx.xxx..xxxx.x.x..x.xx.x....xxxx.x.x..xxxx.x.x..xxxx.x.x..x.xx.xxx....xx.x.x.
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+.xxx.xx.x..x.x.xx....xxx.xx.x..x.x.xxxx..xxx.xx.x....x.xx.x..x.x.xxxx..xxx.xx.x.
+xxxxx.x..xx..xx.x..xxxxxx.x..xx.xxx.xxxxxxxxx.x..xx..xx.xx.xx.xxx.xxxxxxxxx.x..x
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x.xx.xx..xxxxx.xxx.xx.xx.xx..xx..x.xx..xx.xx.xx..xx..x.xxxxxx..x.xx..xx.xx.xx..x
+.x.xx.x....xxxx.x.x..x.xx.x......xx.x.x..x.xx.x....x.xx.xxx....xx.x.x..x.xx.x...
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+.x.x.xxxx....x.xx.x....x.xx.x..xxx.xx.x....x.xx.x....x.xx.x..x.x.xxxx..x.x.xxxx.
+x.xxx.xxxxx..xx.xx.xx..xx.xx.xxxxxx.x..xx..xx.xx.xx..xx.xx.xx.xxx.xxxxx.xxx.xxxx
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x..x.xx..xx..x.xxxxxx..x.xxxxxx.xx.xx..xx..x.xxxxxx..x.xxxxxx..x.xx..xx..x.xx..x
+...xx.x.x..x.xx.xxx..x.xx.xxx..x.xx.x....x.xx.xxx..x.xx.xxx....xx.x.x....xx.x.x.
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+.xxx.xx.x..x.x.xxxx....x.xx.x....x.xx.x....x.xx.x....x.xx.x..x.x.xxxx....x.xx.x.
+xxxxx.x..xx.xxx.xxxxx..xx.xx.xx..xx.xx.xx..xx.xx.xx..xx.xx.xx.xxx.xxxxx..xx.xx.x
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x.xx.xx..xx..x.xx..xx..x.xxxxxx..x.xxxxxx..x.xxxxxx..x.xxxxxx..x.xx..xx..x.xxxxx
+.x.xx.x......xx.x.x..x.xx.xxx..x.xx.xxx..x.xx.xxx..x.xx.xxx....xx.x.x..x.xx.xxx.
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+.xxx.xx.x..xxx.xx.x..xxx.xx.x..x.x.xxxx..x.x.xxxx..xxx.xx.x..xxx.xx.x..xxx.xx.x.
+xxxxx.x..xxxxxx.x..xxxxxx.x..xx.xxx.xxxxx.xxx.xxxxxxxxx.x..xxxxxx.x..xxxxxx.x..x
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x.xx.xx..xx.xx.xx..xx.xx.xx..xx..x.xx..xx..x.xx..xx.xx.xx..xx.xx.xx..xx.xx.xx..x
+.x.xx.x....x.xx.x....x.xx.x......xx.x.x....xx.x.x..x.xx.x....x.xx.x....x.xx.x...
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+.x.x.xxxx..x.x.xx....x.x.xx....xxx.xx.x..x.x.xx......x.xx.x....x.xx.x....x.xx.x.
+x.xxx.xxxxx..xx.x..xx..xx.x..xxxxxx.x..xx..xx.x..xx..xx.xx.xx..xx.xx.xx..xx.xx.x
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x..x.xx..xxxxx.xxx.xxxxx.xxx.xx.xx.xx..xxxxx.xxx.xx..x.xxxxxx..x.xxxxxx..x.xxxxx
+...xx.x.x..xxxx.x.x..xxxx.x.x..x.xx.x....xxxx.x.x..x.xx.xxx..x.xx.xxx..x.xx.xxx.
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+.x.x.xx......x.xx.x..xxx.xx.x..x.x.xx....x.x.xx....x.x.xx......x.xx.x..x.x.xxxx.
+x..xx.x..xx..xx.xx.xxxxxx.x..xx..xx.x..xx..xx.x..xx..xx.x..xx..xx.xx.xx.xxx.xxxx
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+xxxx.xxx.xx..x.xxxxxx.xx.xx..xxxxx.xxx.xxxxx.xxx.xxxxx.xxx.xx..x.xxxxxx..x.xx..x
+.xxxx.x.x..x.xx.xxx..x.xx.x....xxxx.x.x..xxxx.x.x..xxxx.x.x..x.xx.xxx....xx.x.x.
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+x.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.x
+...x.xx.x..x.x.xx....x.x.xxxx..x.x.xx....x.x.xx....x.x.xxxx..x.x.xx....x.x.xxxx.
+x..xx.xx.xx..xx.x..xx.xxx.xxxxx..xx.x..xx..xx.x..xx.xxx.xxxxx..xx.x..xx.xxx.xxxx
+xxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxx
+.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x
+x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.x.x...x.x.
+xxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxx
+x..x.xxxxxxxxx.xxx.xx..x.xx..xxxxx.xxx.xxxxx.xxx.xx..x.xx..xxxxx.xxx.xx..x.xx..x
+.x.xx.xxx..xxxx.x.x....xx.x.x..xxxx.x.x..xxxx.x.x....xx.x.x..xxxx.x.x....xx.x.x.
+x.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx.xxx.x
+80 80
+.xxxxxxxx..xxxxxxxx..xxxxxxxx..xxxx.xxx..xxxxxxxx..xxxxxxxx..xxxx.xxx..xxxxxxxx.
+x.x.x.xx.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.x
+xx.x.x..xxxx.x.x..xxxx.x.x..xxxx..xxx.xxxx.x.x..xxxx.x.x..xxxx..xxx.xxxx.x.x..xx
+x.x.xx..xxx.x.xx..xxx.x.xx..xxxx..xx.x.xx.x.xx..xxx.x.xx..xxxx..xx.x.xx.x.xx..xx
+.xxx..xx.x.xxx..xx.x.xxx..xx.xx.xx..x.xx.xxx..xx.x.xxx..xx.xx.xx..x.xx.xxx..xx.x
+x.xx..xxx.x.xx..xxx.x.xx..xxx.xx.x..xx.xx.xx..xxx.x.xx..xxx.xx.x..xx.xx.xx..xxx.
+xx..xx.x.xxx..xx.x.xxx..xx.x.xx.x.xx..xxxx..xx.x.xxx..xx.x.xx.x.xx..xxxx..xx.x.x
+xx..x.x.xxxx..x.x.xxxx..x.x.xxxx.xxx..xxxx..x.x.xxxx..x.x.xxxx.xxx..xxxx..x.x.xx
+x.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.x
+.xxxxxxxx..xxxxxxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx.
+.xxxx.xxx..xxxxxxxx..xxxxxxxx..xxxx.xxx..xxxx.xxx..xxxxxxxx..xxxx.xxx..xxxxxxxx.
+x.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.x
+xx..xxx.xxxx.x.x..xxxx.x.x..xxxx..xxx.xxxx..xxx.xxxx.x.x..xxxx..xxx.xxxx.x.x..xx
+xx..xx.x.xx.x.xx..xxx.x.xx..xxxx..xx.x.xxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xx
+x.xx..x.xx.xxx..xx.x.xxx..xx.xx.xx..x.xxx.xx..x.xx.xxx..xx.xx.xx..x.xx.xxx..xx.x
+xx.x..xx.xx.xx..xxx.x.xx..xxx.xx.x..xx.xxx.x..xx.xx.xx..xxx.xx.x..xx.xx.xx..xxx.
+x.x.xx..xxxx..xx.x.xxx..xx.x.xx.x.xx..xxx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.x
+xx.xxx..xxxx..x.x.xxxx..x.x.xxxx.xxx..xxxx.xxx..xxxx..x.x.xxxx.xxx..xxxx..x.x.xx
+x.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.x
+.xxx.xxxx..xxxxxxxx..xxxxxxxx..xxx.xxxx..xxx.xxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx.
+.xxxxxxxx..xxxxxxxx..xxxx.xxx..xxxx.xxx..xxxx.xxx..xxxxxxxx..xxxx.xxx..xxxxxxxx.
+x.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.x
+xx.x.x..xxxx.x.x..xxxx..xxx.xxxx..xxx.xxxx..xxx.xxxx.x.x..xxxx..xxx.xxxx.x.x..xx
+x.x.xx..xxx.x.xx..xxxx..xx.x.xxx..xx.x.xxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xx
+.xxx..xx.x.xxx..xx.xx.xx..x.xxx.xx..x.xxx.xx..x.xx.xxx..xx.xx.xx..x.xx.xxx..xx.x
+x.xx..xxx.x.xx..xxx.xx.x..xx.xxx.x..xx.xxx.x..xx.xx.xx..xxx.xx.x..xx.xx.xx..xxx.
+xx..xx.x.xxx..xx.x.xx.x.xx..xxx.x.xx..xxx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.x
+xx..x.x.xxxx..x.x.xxxx.xxx..xxxx.xxx..xxxx.xxx..xxxx..x.x.xxxx.xxx..xxxx..x.x.xx
+x.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.x
+.xxxxxxxx..xxxxxxxx..xxx.xxxx..xxx.xxxx..xxx.xxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx.
+.xxxx.xxx..xxxxxxxx..xxxx.xxx..xxxxxxxx..xxxx.xxx..xxxxxxxx..xxxxxxxx..xxxxxxxx.
+x.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.x
+xx..xxx.xxxx.x.x..xxxx..xxx.xxxx.x.x..xxxx..xxx.xxxx.x.x..xxxx.x.x..xxxx.x.x..xx
+xx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xxx.x.xx..xxx.x.xx..xx
+x.xx..x.xx.xxx..xx.xx.xx..x.xx.xxx..xx.xx.xx..x.xx.xxx..xx.x.xxx..xx.x.xxx..xx.x
+xx.x..xx.xx.xx..xxx.xx.x..xx.xx.xx..xxx.xx.x..xx.xx.xx..xxx.x.xx..xxx.x.xx..xxx.
+x.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.xxx..xx.x.xxx..xx.x.x
+xx.xxx..xxxx..x.x.xxxx.xxx..xxxx..x.x.xxxx.xxx..xxxx..x.x.xxxx..x.x.xxxx..x.x.xx
+x.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.xx.x.x.x
+.xxx.xxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx..xxxxxxxx..xxxxxxxx.
+.xxxxxxxx..xxxx.xxx..xxxx.xxx..xxxx.xxx..xxxxxxxx..xxxx.xxx..xxxxxxxx..xxxx.xxx.
+x.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.x
+xx.x.x..xxxx..xxx.xxxx..xxx.xxxx..xxx.xxxx.x.x..xxxx..xxx.xxxx.x.x..xxxx..xxx.xx
+x.x.xx..xxxx..xx.x.xxx..xx.x.xxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.x
+.xxx..xx.xx.xx..x.xxx.xx..x.xxx.xx..x.xx.xxx..xx.xx.xx..x.xx.xxx..xx.xx.xx..x.xx
+x.xx..xxx.xx.x..xx.xxx.x..xx.xxx.x..xx.xx.xx..xxx.xx.x..xx.xx.xx..xxx.xx.x..xx.x
+xx..xx.x.xx.x.xx..xxx.x.xx..xxx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xx
+xx..x.x.xxxx.xxx..xxxx.xxx..xxxx.xxx..xxxx..x.x.xxxx.xxx..xxxx..x.x.xxxx.xxx..xx
+x.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.x
+.xxxxxxxx..xxx.xxxx..xxx.xxxx..xxx.xxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx..xxx.xxxx.
+.xxxx.xxx..xxxx.xxx..xxxx.xxx..xxxx.xxx..xxxxxxxx..xxxx.xxx..xxxxxxxx..xxxxxxxx.
+x.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.x
+xx..xxx.xxxx..xxx.xxxx..xxx.xxxx..xxx.xxxx.x.x..xxxx..xxx.xxxx.x.x..xxxx.x.x..xx
+xx..xx.x.xxx..xx.x.xxx..xx.x.xxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xxx.x.xx..xx
+x.xx..x.xxx.xx..x.xxx.xx..x.xxx.xx..x.xx.xxx..xx.xx.xx..x.xx.xxx..xx.x.xxx..xx.x
+xx.x..xx.xxx.x..xx.xxx.x..xx.xxx.x..xx.xx.xx..xxx.xx.x..xx.xx.xx..xxx.x.xx..xxx.
+x.x.xx..xxx.x.xx..xxx.x.xx..xxx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.xxx..xx.x.x
+xx.xxx..xxxx.xxx..xxxx.xxx..xxxx.xxx..xxxx..x.x.xxxx.xxx..xxxx..x.x.xxxx..x.x.xx
+x.x.x.xx.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.x
+.xxx.xxxx..xxx.xxxx..xxx.xxxx..xxx.xxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx..xxxxxxxx.
+.xxxxxxxx..xxxxxxxx..xxxxxxxx..xxxx.xxx..xxxx.xxx..xxxxxxxx..xxxxxxxx..xxxx.xxx.
+x.x.x.xx.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.x
+xx.x.x..xxxx.x.x..xxxx.x.x..xxxx..xxx.xxxx..xxx.xxxx.x.x..xxxx.x.x..xxxx..xxx.xx
+x.x.xx..xxx.x.xx..xxx.x.xx..xxxx..xx.x.xxx..xx.x.xx.x.xx..xxx.x.xx..xxxx..xx.x.x
+.xxx..xx.x.xxx..xx.x.xxx..xx.xx.xx..x.xxx.xx..x.xx.xxx..xx.x.xxx..xx.xx.xx..x.xx
+x.xx..xxx.x.xx..xxx.x.xx..xxx.xx.x..xx.xxx.x..xx.xx.xx..xxx.x.xx..xxx.xx.x..xx.x
+xx..xx.x.xxx..xx.x.xxx..xx.x.xx.x.xx..xxx.x.xx..xxxx..xx.x.xxx..xx.x.xx.x.xx..xx
+xx..x.x.xxxx..x.x.xxxx..x.x.xxxx.xxx..xxxx.xxx..xxxx..x.x.xxxx..x.x.xxxx.xxx..xx
+x.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.x.x.xx.x
+.xxxxxxxx..xxxxxxxx..xxxxxxxx..xxx.xxxx..xxx.xxxx..xxxxxxxx..xxxxxxxx..xxx.xxxx.
+.xxxxxxxx..xxxxxxxx..xxxx.xxx..xxxxxxxx..xxxx.xxx..xxxxxxxx..xxxxxxxx..xxxxxxxx.
+x.x.x.xx.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.x.x.xx.xx.x.x.xx.x
+xx.x.x..xxxx.x.x..xxxx..xxx.xxxx.x.x..xxxx..xxx.xxxx.x.x..xxxx.x.x..xxxx.x.x..xx
+x.x.xx..xxx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xxx.x.xx..xxx.x.xx..xx
+.xxx..xx.x.xxx..xx.xx.xx..x.xx.xxx..xx.xx.xx..x.xx.xxx..xx.x.xxx..xx.x.xxx..xx.x
+x.xx..xxx.x.xx..xxx.xx.x..xx.xx.xx..xxx.xx.x..xx.xx.xx..xxx.x.xx..xxx.x.xx..xxx.
+xx..xx.x.xxx..xx.x.xx.x.xx..xxxx..xx.x.xx.x.xx..xxxx..xx.x.xxx..xx.x.xxx..xx.x.x
+xx..x.x.xxxx..x.x.xxxx.xxx..xxxx..x.x.xxxx.xxx..xxxx..x.x.xxxx..x.x.xxxx..x.x.xx
+x.xx.x.x.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.x.x.xx.xx.xx.x.x.xx.xx.x.x.xx.xx.x.x.x
+.xxxxxxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx..xxx.xxxx..xxxxxxxx..xxxxxxxx..xxxxxxxx.
+55 43
+x..xxx.xxxx......xx...xxx....x..x......x.x.
+x.xxxx.xx.xxxx...xxxx.xxx..x.xxx.xxx.xx....
+.xx....x.xxx.x.xx.xx....x.xx.x..xxxx..x.x..
+xx.xx...x.xx..xxx..x.xxxxx.xx.x....xx...xx.
+x.xxx.xxxx....x.x...xx...x........xxxx...xx
+x.x.....xxxxxx....x.xx..xxxx.xx.x..x.x.x..x
+.xxxx..xx...x..x.xx..xx.....x.xxxx.xxxxxxxx
+xx.x.x.x........xxxxxx....xx.xxxxxx.xxx....
+.xx.xx...xx..x..x..xx.xxxxx.xxxx...xxx.....
+x.xx..x...xxx.x.x.xxxxxxx.xxx..x.........x.
+..x.x.x..x.xxxxx.xxx....xxxx.x.xx.xxxx.xx..
+.x.x..x..x.......xx..x.x.x..x.xx.xx.xxxx...
+x..xx..x..x.xx.x.xx.x....xx..xxx.xxxx.x..xx
+..x.xxx.xxx...x.xxx.xx.xx.x.x.x.xx...xx.x..
+xxx.xx.xx..xx.....x.xx..xxx.x..x..xxx.x..xx
+...x...xxxxxxxxx..xxxxxxx.x.x..xx..x.xx.x..
+....xx......x.x.x..xx..xx..xxx..x.x.xxx.xx.
+x.xxxx.xx.x....xxxxx..xxx..x.x.x.xx.xxx..xx
+.xx..xx..xxxx..x..x..x..x.x...x..x.xx..x..x
+..xxxx..x.x.xxxxx...x.x.xx.x....x.xx.....x.
+..xxx...xxxx.x.xxx..x.x.x..xxxxx.xx.x...xx.
+..xx.....x....xx.xx.x.xxx.x..xx.....x..x..x
+.xx.xxxx.x..xx..xxxxxx......x..xxx.x...xxx.
+x..xx..x..x.x..xxxxxxx.......x.x..x...x..xx
+..x.xx.x.xx..xx.xx.xxx....xxxx.xxxxx...x...
+.xxxxx..xx.x.xxx..x..x.x...x...x.x.xxx...xx
+x...xx.xxx.x..x.x..x....xx.x..xx.x..x..x..x
+xx.x.xxx...xxx.x...xx.xxx.xx...xxxxx.xxxxx.
+.x..x..x..xx.xxx.xx...x.xx....xxxxxx.x...x.
+.x.xxx.x.xxx..xxxx..x.x..x.xx.xxxxxxxxx.x.x
+.x.x........x.x...xxxx.x.....xx.....xxxxx..
+xxxxxxx.x.xx..xx..xxx.x.xxxx..x.xxx.x.xxxx.
+xxxx...xx.xx..xxx.xxx.x.x.x.x.x..x.xx.xxxxx
+xxxxxxxxxx.xx...xxx...x..xx.x.xx.xxx..xxxxx
+x..x...x.x.xx..xx.xxx...x.xx.x.x.x.xxx...xx
+.xx.x.x.x.x.xx.x...x.x.x.x.x.x.xx.xxxx..xxx
+xxxxxxxx..xxxx....xxx...xx..x.xxx....x...x.
+xxx.xx.....xx.....xxx.x.x...x...x.x.x....xx
+..x.....xxx...x.xxx..x.x..xxxxx.x.x.xx.x..x
+..xx....x.x.xx..xxxxx...x.x.xx...xx...xx..x
+x..xx.xxxx..xxxx.....x..x..x..x.xx.xxx.x.xx
+x..x.xxxxxx.xx...xx.xx...xxx..x..xxx.x.....
+..x..x.x..........x.x..xxxxx......x.x.....x
+x.xx.xxxx...xx.x.....x.x.xxxxx.x.xxxx..x.xx
+..x.x....x.x.xx.xx..x.x...xx..xxx.x....xxxx
+.x....xxx.x.xxx.x.x....xx....x...xxxxxx.x.x
+.x.x.xxxx.xxx.x...xxx.xxx.....xxx.x.....xxx
+...x.x..xxx....xxxx....x.xx..xxxx.x.xx..x.x
+...xxx.....xxx.xx.x.x.xxxx....x.xx..xxxx.x.
+x.x..x.xx.xx.x........x.x.x..xxxxx..xxx....
+.x.xxx..x.....x.xx.xx..xx.x..x..x..xx...x..
+xx..x..xx.x...x..x.xx.xx.x.x.xxxx.......x..
+x..x..xx....x...xx.x.xxx..x.xxxxxx....xxx.x
+.xxx.xxx.xxxxxxxxx..x.xx.xx.xxx.x.xx.xx.x.x
+..x.x....xxxxxx..xxx..xx..x..........x.x.x.
+69 69
+x...xxx..............x..........x..x....x..x....x....xx..x...x.......
+.........x...........x...x.x.x....x.x.x....x...........x..x.......x..
+...x.....x......x..x..xx....x........x...........x....xx.......x....x
+..............x..xx.x.x..xx...x.......x...x..x........x..........x...
+.x..........x....x..x......x.......x......x..........x...........x...
+..x..........x....x....x....x.....x.x....xx.x.....x..x.x.............
+...x.x...xxxx......x....x........x...xx.x.x.x.....x...x...x.x.xx.....
+.xxx...x.x..x..xx......................x...x..x......x....x...x....x.
+.x.....x...x.x.......x..........xx.....x...x.....................x...
+.xxx....xxx....x.x.....x............x.xxxx.....xx.x...xx..x.......x..
+x...x.xx..xx.x..x......x...x....x.x..........x......x..............x.
+x........xx......xx.............x.x....x...xx.......................x
+.......x.................xx.......x...x.x.......xx...x..x..xxx.x.....
+......x....x...x........x.......x......xx..x.x...............x....xx.
+.........x.....x..x.x.xx...x.x.x.............x.............x..x.....x
+...x.....x....x.xx.......x.....xx.x.......x.xxxx...xxx....xxx.x.xx...
+.x.........x..x.....x.x...xx..x....x.....x...x....xx.xx..x...........
+x.x...x..............x.........xx.......x....x.......x....x.x......x.
+.x...x.....x.......x.x......x....x.............xx.......xxxx.........
+.x..x.....x.....x..x..xxx.x...x........x..x...........x..x.x...x.....
+xx..x.x...x.xx..xx..................x....x..x..x......xx....x........
+.x...x...x....x.x....x......x.x.......xx.x.........x..............x..
+x..x..x.xx....x...x.x.xx..........xx.x..x...xx...............x.....x.
+x..........x....................x...xxx...xxx.x.x......x..........x..
+x..x..xx.x...x............x...x....x....x.............x..x..x........
+.....x...........x......x.............x..........x....x...x..x......x
+.x...x..............x..x........x......x.x......x..........x..x......
+.............x....xx......x...........x.....x..........x..x......x.xx
+....xx.......x..............xxx.........x..x....xx.x.................
+xx.....x.x......x.x.............x....xx.........x...xx.xx.......x....
+..............x..x.............x....x.x.......x....x.x.x...x..x......
+......x...x.x.x.xx.xx...x.x..x........x..x.......x..xx.......x.x.....
+..x..xx..........x......x......xxx...xx....x.x..x..........x..x..x..x
+........................x........x..xx..........x....x.........x.....
+x...x.......x.x........xx.....x....x....x...x...........x.....x.x....
+..xx..xxx.......x....x.....xxxx..x..............x....x....x..x..x.x..
+..xx....x...x.x..x..x..xxx..xx....x.................................x
+.x.....x....xx............x.........x...x.xx.....x.xx...x...x....x...
+.....x.............x..x.x..x.xx...xxx.............xx.x...............
+.......x.........x.x......x........x...xx.x....x...........x..x...x..
+.x.x........x........x..x.x..xxx..................................x..
+.xx...x.....x...xxx....x.....x.........xx........x....x....x.........
+............x...x.x..xx....x....x...x...................x.........x..
+.......x.......x.x......x........x...x.......x..x.......xx.......xx..
+...........xx.......x...xx..x....x..x.......xx......x.......x...x..x.
+x........x...........x..........x.........x.......x......x.x.........
+.x....x.x.x.....x..............x.x......xx..........x.x.....xx...x...
+xxxx..........x...x.......x.......x.....x.............x..x...........
+x........x...xxxx.x............xx...........x..x..............xxx....
+.....x.......x...x.xx.x..x.x..........x........x...x..........x.....x
+....x...........x....x.xx.x..x............x.x.....x.......x......x...
+x....x.....xx...xx..............x........x.......x...x.....x...x..x..
+.xx....x........x.x..................x.x.x.x....xx....x....x.x...x...
+.......x.....x.xx..x.....x..x.x...x......x.xx...........xx......x....
+......x..............x...x..x.x.....x...x..x.x..x...xx........x......
+.............x.......xx....x.....xx..x...........xx..x.......x..xx...
+...........xx......x.x.....x....xx....x.x....x.x......x.x....x......x
+...xx..x.xx....x......x.....x...x..xx.x..x.......x.......x....x.....x
+...x........x.x....xxx..x....x.........x.........x......x...x.......x
+......x...x...................x........x...........x............x....
+........x...........x....x.xx....x......x........xxx.x.xxx...........
+..x...xxx................x.........x..x.xx..x...x.x.......x..........
+.x.....x.x.......x..x...x.x.....x...x.x.x.x...x.......x......x...x.xx
+..x.........x.......xxx........xxx......xxxx...x...x......xx...x..x..
+.....xx.....x..x........x.....x..x..x.......x......xx..xx............
+x.x.........x.......x...............xx.xx...x.xx..............x......
+....................x.......x.x...x.....x...xx.........x....x.....x..
+xxx............x......x..............x....x........xx...x.x....x....x
+....x......xx...xxx............x...........x.....x...................
+77 77
+..xxx..xx...x.x.xx....xxx.xxx...x..x.x...x..........x.xx....xx.x...x....x...x
+..x...x..x...x..x.xxx.xxx....x..xx....x.xxx........x..x.....x..x..x..xxxx.x..
+..x.xxxx...xx.x...x...x..xx.x...xx..x....x..xx....xx.x...xx....xxx.x.xxx.xx.x
+.x..xxx.x.xx.x.....x.xx...x....xx.....x....x..xx...xx...xxx.x...xxx..x.x.x.x.
+.x......xx...x.x.x..x...x.x.xx....xx.x....x..xxxx...xx.x....xx..x.....xxx.x..
+x...x...x.xx..x.x..x.xxx.x.x.x.....xxx..x....x....x..x..xx..........x..xx....
+.........xxx.x...xx.xx.....x...x.xx.x.........xx.....x.x...xxxxxxx..xxx..x...
+x.....x.xx........xx..x.xxx...x..xxx.x...xx..xx.x...xxx.xx.xxxx.xx.......x..x
+x....xx.x....x..xx..x.x.....x.x...x..x....xx.......x...xx..x....x.x.xx......x
+..xxxx.....x.xx...x.....x......x.....x..x.x..x.........xxx..x................
+...xxxx..x.xx.x......x.x..xxx...x....x..x..xx......x..xx.xx.x......x.....x...
+...x...xx.......xxx.xx...x..x...xxx.x.........x....x.x..x..xxxx.x.x..x..x....
+.x.x...x.xxx..x.x.x....xx.xxx...xx.x..xxx...x..xx...x.x.....x..x......x.x..xx
+xxx.xxx.xxx......xxx...xxxx..........x.xx......xx.....x...x.x....x..xx......x
+.........x.x.xxx.....xx....xx..x.x.x.x.xx.x...x..x.xx..x....xx..x........x...
+.xx.....xxx.......xx......xxx...x..x......x..x..x.x..........x..xx....x......
+...x.....xx..xx..xxxx.x....x.xxx..xxxx.xxx..xx.x.......x.x.....x.....x.x..x..
+..x.x.x.x...xx...xxx.xxx.x..xx.x.....x....x.xx..x.xx.xx.x....x.x..xx...x.x...
+.x..x..xx...xxxx...x...x...x.x..x.x.x...x.xx.xxx.x...x..xxxx....x.x.......x.x
+.xx....x.xx.x.x.xx.xx..xx..x...........xxx.x.xx.xx.....x.xx....x...x......xx.
+x.x...xxxxxx.....xx.x...xx.............x....xx.xxxx...x.......xx........x...x
+...x...xx.x....xx....xxx..x......x.....x.xx...x.x...xx...xx.x.x...x.x.......x
+.....x..xx.x.xxxxxx.x..x..x...x....x.....xxx......x..x.x...x.......xx.x..xxx.
+..x...xx.......x........x..x...x.xx......xxx....xxx.x..xxx.....x...xxx.xx..x.
+x..x...x.....x....x.........x.xx...xxx.xxxx.xx....x...xx.x............x...x..
+...x.x.........x.x....x.x.x.x.x.x.....xx...x.x..xx.xxx.x...x.......xx...xx..x
+x...............xx...x...xx.xx.x...x.x..xxx...x..xxxx.x.x..x.....x.......x.x.
+....x..xx.x.x...x.....xx...xx.....x..x...x....xx.......x.x.x.xx...xx.x.x.x.xx
+x...x..x.xx..x.x.xx..xx.x.......x.x.xx.....xx.x..xx.....x.x...x..xx..xx..x...
+x....xxx..xxx...x.x....xx..x..x.x.x..x.xxx.xxxx..x..x..x...xx...xxx..x..x....
+.x.xx.x.x.....x.x..x.x..x.x.x.xx..x.x...x.x...x.x.xxx...xxx..x..x.xx......xx.
+.....x..xxxxx...x..x......x.x.x.xxxxxxxxxx.x...x..x.x.x.xxx..x.xx.x......xx..
+..xx...x.x.x.x....xxx.x.x.xxx..xx.x.....xx..x.....x..xx.x..x..x.x...x.....xxx
+.....x.x..xx...x.x.x...xx.x.xx...x..x...xxxx..xxx.x.x.x..xx.x.xx...x.....x.x.
+xx....xx.....xx..xx.xx.xx.xx.xx......x........x...xx.x.x......xx..xx.x.......
+.x.xx.x.xxx....x........xx.x.x.xx...x.x....xx.x.......x...x.x...xxx..xxx.....
+..x.x.xx..x.....x.xx......x.xxx..x....x..x.x..x..x....x.x.....xx..xxxxx.x.xxx
+x.x....x.xxx...x.....x.xx.....xxxx....x.xx..xxxx.......x.x.x....x.....xxx.x.x
+x.xxxx.x.x.xx...x.xx..x.xx.x.......x..x...........x..xxx.x.x.x......x......x.
+xxxxx....xx..xx.x...x...xxx..xxxxxx..xxxxx.x.x....x.x..x.x..x...xxx.xx..x...x
+...x..xx.xx.x.xx..x...x...x..x...x.xxxx..x..x...x..x...x.x..x...x.....xxx..x.
+...x...x.x....x....x.x.....x...x.xxxxx..xx....xx..x.xxx......x.......x.xxx.xx
+.x..........x..xxx.x....x.x.........x.x.x..x.x...x.x..xx....xxx...x..x...x.x.
+x.x....x..xxx.xx.x..xxx...xxxxxxxx....x..x...x..xx.......x......x...x.x..xx.x
+..xx.....xx.x..x.xxx.xxx.x...x.x.x...xx........xxxx......x...xx.x.xx...x.....
+......x..x....x...xx.xxxxxx...x...x..xx.....x.....xxxx.xx..xxx.x.x..x....x..x
+x..x..x.x.x...x.xxxx.x.....xx.x.x....x.x.x...xxxx..x.xxx....x..x.xx.xx.......
+..x.x......x.xxx..x..xx...x.x...x.....x.x.x...x...xx.xxxxxx....x...x...xxxx..
+xxx......xxxx.x..x.....x.xx.xxx.x...x...x.xx.xxxx.x.xxx.x.....x.x....x..x.x..
+xx.xx.xxxx...xx.x..x..x.x.x..xxxxxxxx..x.x....x..xxx.xx..xx.x..x.x...x.x....x
+....x.xx..xx...x......x...x.x.......x..x.xxxx..x.x...x....x.xx.x....x.x.x..xx
+.x..xx...xxxxx..x.x..x..x.......xx...x.x.xx.x.xxxx.......xxxx.x.x...x.....xx.
+.xx...x...x......x..xx..xx.x..........xx...xx.xxx...x..x.xxx..x........x.....
+...x.x.x....xx..xx.x.x....xxxx....x....x.x..xx...x.xx.x.x.....x.x...xx..x.x..
+.x.....x...x...xxx...xxxx...xx..xx....x.x.....x..........x..x.x.....x....xx..
+xx...xx..x.xxx...x.....x.xx.x....xxx.........x...x....xxxxxx.x.xx....xxx.....
+..x..xx..x...xx..x....x...x.x.....x.x.x...xx.........xx...x....x....x.....x..
+x.xx....xx..x.x.xxx..xx..x..xxx....xxx.xx.x.xxxxx.x.........x....xx.x.x.xxx.x
+x......x.x......x.xx.x...x..x.x.x.xxx.xx.x..........xx..x.......xx...x.....x.
+.xx.x...x...xx..x.xxx...x.x.x.xx......x.....xxx.....x..xx..x.xx..xxx.x.xx..x.
+x...x........xx.......x......xx..x......x.x....xx..........x...x....x.xxx....
+...x....x.x.xxxx.xx.x.....x...xx.x...x.x.xxxxxxx....xx.x...x......x.xxxxxxx..
+..xx.xx..x.....x..xx.x..x....xx..x..x..x.xx.x......x.x.x....x...xxx.....xxxxx
+.........x...x..xxx......x.....x.xxxxxx.x.xx..xx.x.x....xxx....xxx.xx...xx.x.
+.x...x...x...x.x.x........x..x.....x...x.xx.x..xxx....x.xx.x.xxx..xx.xxx.....
+........x.x..xx..xxx.x....xx...x.....xxxxx....x.xxx....x..x....x.x..x..x.x..x
+.xxx...x...x.x.x.x.x.xx....x..xxxxx.x.....xx....xx...x...x.x...xx.xx.xx..xx.x
+..x.xxx...x.xx.x..x.x..x......xx...x.x.x..xxx.x..xx..x.x..x.xx.x.....x.......
+x.xx.x.x.x..x....x.x..x..xx.xxxxx.xx.xx..xx..x.xx.....x....x..x...xx.xxxxxx..
+....x..x.xx..xx.xxx.x.......xx..xxx.......x....x....x.......x.x.xxx.....x..xx
+xx..x...xx.x.x..x........x.x..x.x..x.x.....x.x.x.....x...x.xxxxx..x...x.x....
+.x.x....x.x..........x.....x..x..x....xxxx...x...x........xxxx.xx..x..xx..x.x
+.x..x.x..xxxxxx..x.x.xxxx.xx.xxx.xx.xx........x.xxx.xxx....x...x...x....xxx..
+..x...x.x....xx....xx.x.x..xx.x..x.xx.xx.....xx.....xx.xx..xx.x...........x..
+x.x..x.......x..xx.xx...x..x....xxx..x..x........x......x...x.....xx....xx...
+..x..xx..x.x..xx..x..x.....xx....x.xxx..x..xxx.x..x...xxx..x.xxx.xx.xxx..x.x.
+x.x...xxx.xxx..x.....x.x..x.xxx.x.x.x...xx...x.x.......xx.x......x.x.....xx.x
+80 80
+xx....x.......................x.x...x..x......xx....xxx....x...............xx...
+........x........x............x.............x...........xx.....xx...............
+............................................x....x..x........x.......xx.........
+..................................x......x...x.x....................x..........x
+..x.x...x.x........x.....x........x...........xx..x.x..x................x.......
+.........x.........x.........xxx......x...xx...x......x....x..x...x.....x.......
+..xx.x.x........xx.......x.x.x.....xx...x.............x.............x..x........
+x.x.....................x.....x.......x...x.......x...........x.....x..x......x.
+.x......................x...........xx..............x..x..........xxx..x.....x..
+.......x......x.....x...x.....x..........x...x......x..x............x...........
+.........x................xx....xx.............x..........................x...x.
+....x...x....x.......xx...........x.............xx..x.x........x.......xx.xx....
+.........x.............x..xx.x.x................x..xx.x...x.........x....xx.....
+.......x...x...xx..x...x..........x......x.........................xx..........x
+xx.xx.........x..x.......x..........x.x......................x..................
+..x.x............x....x.......x..x.......x.xx.x...x..x........x...............x.
+xx................x...........x.............xx.........x...........x...x.......x
+.....x.............xx.x.x........x.xx......x.........x...............x...x....x.
+.x...x...........x.....x...x......x............x.....xx......xx................x
+.....xx....x....xx.....x.....x.........x.........xxx......x.............x...x...
+x...........x.....x.x..xx.......x...............x..........x..x...xx...x........
+xx...xx.......x..xx........xx..x...x......x.......xx......x.....................
+x..........x.x.x...xxx..........x.....x....x....x..x..........................x.
+...xx.................................x...x.....x....x...........x....x..x....x.
+.............x..x.............x.....x................x...........x....x.....x...
+.x.....x..................x.xxx.x......x.......................................x
+.....x.....x.........x...................xx................x.....xxx..x..x...x..
+..x.........x...x........x..........x...............xx..xx.....x................
+.x.x..x....x...........x........x........x.....x...........x....x....xx.x.......
+.......x..x........x....x...x....xx...x...x...x.x......x.......x..x.........x...
+..x.x................x....x...x..x..x..............x...................x.x.x....
+..x..x..x...x.....x.x..x.xx.............x.x.x..................x......x........x
+x....x.x........x........x....................xx........x......x...x..x.........
+...................xx.x..........x........x...x..........x.x..............x..xx.
+....xx..x...............x.x..x...x..x.............xx.................xx.........
+x......xx......x.............x.....x..x...................x......x.....x........
+.x...x......xxx.x.x.......x..xx.xx.xx...........x.................x..x.....x....
+xx.........xx....xxxx..............x...........x..x.xxx.....x..............x.x..
+..................................x..........x..x...........x.xx.x......x....x..
+..............x.......xx..x.................................xx.............x.x..
+x...x.....x....xx.x..x........x.........x.....................x.x.xx....x.x.....
+........x.......x..................x..............x.x............x.x...x........
+x..x..x.............x......xx..x....x.......x....x.x...........x..........x...xx
+.x.x....x.x..x................xx..xx..................x.x.......................
+..................................................x......x.x...x....x.....x.....
+..x.x........x................x....x...x.....................x........x.x.......
+.x.............x..x.....x.........xx...x..x...................xx.x....x..x...x.x
+.....x.....xx...................x.x..x.x.........x.......x....................x.
+.......x...x.........x.....xx.x.........................x.......x....x....x.....
+..................x....xx..x.........x............................x....x...x....
+...........x..x..xx.x....x..x........x.........................x....x.......x...
+...............x.....x...x......xx........x.x...x................x.........xx..x
+...x..............xx........x......x......xx.......xxx....x....x..x..x....x.....
+.x.................................x...x........x...x....x.x...............x....
+.x..x..............x.....x.....x...........x...x.xx.......x........x............
+.x...x..x..........x...x..x.....x.x.......x............x.....x.......x.x..x...x.
+..xx.........x...........x..............x........xx..xx.x.x.....x....x.x........
+....x..x..x...x.............x........................x.................x........
+...x.x.....x.....x..x...xx......x........................x..x..x......x...x.....
+.........................x........x.......x............................x.......x
+.........x.x....x...............x...x...x..................x..x....x.x..........
+...x.........................x...x.x..........x.x...............x..........x.x..
+x........x..x..x.............x.........x.............x...x.............xx.x.....
+..xx...............x.......xx..............x.....x......x......x..xx....x....x.x
+....x..x.x.....xx.x................x.............x.x...x..................x.....
+........x...x.......x........x..............x.........xx.......x........x..x....
+....x...x.x.........x..xx...x.xx.....x......x.x.......x......x.....xx...x.......
+...........x..........xx..................xx..............xx.........x.....x...x
+......xx..x........x.x..x..........xx.x.........x.........x....................x
+..................x....x.............x.....xx..................x..............xx
+x...............x.x...............xxxxx...........xx.............xx.x.......x...
+.....x..xx.....x........xx.......x.xx.x.....x.....x...x.......x...........x.....
+x....x..x..............x..............x.........x............x....x..x.......x..
+.......x...........x..x.......x................................xx..........xx...
+..x...............x...x.....x........x.....xx......xx.......x.....x.x...xx..x...
+x....x....x..x..x..x.x.x.....x........x......x...........x..x.....x..x......x...
+.......x.x...x................xx....x.........................x..x..............
+x...xx.....xx......................x........x.....x..........x.........x.x......
+....x.....x...................x.x.xx....x............x......x...x...............
+...x.....................xx.x.......................xx....x...x..x....x.....xx..
+80 80
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+.......................................x........................................
+................................................................................
+................................................................................
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+................................................................................
+................................................................x...............
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+...................................................x............................
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+...................................................................x............
+................................................................................
+................................................................................
+................................................................................
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+................................................................................
+....................................................................x...........
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+..............................x.................................................
+................................................................................
+................................................................................
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+..................x.............................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+................................................................................
+80 80
+.xxxxxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..........xxxxxxxxx.xxxxxxxxx
+.xxx.xx.xx.xxx.xx.xx.xxx.xx.xx...xx.x......xx.x...x.xxxxxxxx.xxx.xx.xx.xxx.xx.xx
+.xx.x.x.xx.xx.x.x.xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.x.xxxxxxxx.xx.x.x.xx.xx.x.x.xx
+.xx.x.x.xx.xx.x.x.xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.xx......xx.xx.x.x.xx.xx.x.x.xx
+.xx.x.x.xx.xx.x.x.xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.x.xxxxxx.x.xx.x.x.xx.xx.x.x.xx
+.xx.x.x.xx.xx.x.x.xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.xx......xx.xx.x.x.xx.xx.x.x.xx
+.xx.x.x.xx.xx.x.x.xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.xxxxxxxxxx.xx.x.x.xx.xx.x.x.xx
+.xx.x.x.xx.xx.x.x.xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.x........x.xx.x.x.xx.xx.x.x.xx
+...x.xx......x.xx......x.xx...xx.xx.xxx.xx.xx.xxx.x.xxxxxxxx...x.xx......x.xx...
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxx.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxx.xxxxxxxxxx.........xxxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx
+...xx.x......xx.x....xxx.xx.xxx.xxxxxxxx...xx.x....xxx.xx.xx.xxx.xx.xx.xxx.xx.xx
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xxx.xxxxxxxxxx.x.x.xx..xx.x.x.xx.xx.x.x.xx.xx.x.x.xx
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xxxx......xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xx.xx.x.x.xx
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xxx.xxxxxx.xxx.x.x.xx..xx.x.x.xx.xx.x.x.xx.xx.x.x.xx
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xxxx......xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xx.xx.x.x.xx
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xxxxxxxxxxxxxx.x.x.xx..xx.x.x.xx.xx.x.x.xx.xx.x.x.xx
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xxx........xxx.x.x.xx..xx.x.x.xx.xx.x.x.xx.xx.x.x.xx
+xx.xx.xxx.xx.xx.xxx....x.xx...x.xxxxxxxxxx.xx.xxx....x.xx......x.xx......x.xx...
+xxxxxxxxx.xxxxxxxxx.xxxxxxxxxxx.xxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+.xxxxxxxxxxxxxxxxx.xxxxxxxxx.xxxxxxxxxxx.xxxxxxxxxxxxxxxxx.xx.........xxxxxxxx.x
+.xxx.xx.xxxxxxxxxx.xxxxxxxxx.x...xx.x....xxx.xx.xxxxxxxxxx.xx.xxxxxxxxxxxxxxxx.x
+.xx.x.x.xxx........xx........xxx.x.x.xx..xx.x.x.xxx........xx.xxxxxxxxx........x
+.xx.x.x.xxxxxxxxxxxxxxxxxxxxxxxx.x.x.xx..xx.x.x.xxxxxxxxxxxxxx......xxxxxxxxxxxx
+.xx.x.x.xxxx......xxxx......xxxx.x.x.xx..xx.x.x.xxxx......xxx.xxxxxx.xxx......xx
+.xx.x.x.xxx.xxxxxx.xx.xxxxxx.xxx.x.x.xx..xx.x.x.xxx.xxxxxx.xxx......xxx.xxxxxx.x
+.xx.x.x.xxxx......xxxx......xxxx.x.x.xx..xx.x.x.xxxx......xxxxxxxxxxxxxx......xx
+.xx.x.x.xxxxxxxxxx.xxxxxxxxx.xxx.x.x.xx..xx.x.x.xxxxxxxxxx.xx........xxxxxxxxx.x
+...x.xx...xxxxxxxx.xxxxxxxxx.xxx.xx.xxx....x.xx...xxxxxxxx.xx.xxxxxxxxxxxxxxxx.x
+xxxxxxxxxx.........x.........xxxxxxxxxx.xxxxxxxxxx.........xx.xxxxxxxx.........x
+x.........xxxxxxxxxxx.........xxxxxxxxxx.xxxxxxxxxxxxxxxxx.xxxxxxxxx.xx.........
+x.xxxxxxxx...xx.x...x.xxxxxxxx...xx.x....xxx.xx.xxxxxxxxxx.xxxxxxxxx.xx.xxxxxxxx
+x.xxxxxxxxxx.x.x.xx.x.xxxxxxxxxx.x.x.xx..xx.x.x.xxx........xx........xx.xxxxxxxx
+xx......xxxx.x.x.xx.xx......xxxx.x.x.xx..xx.x.x.xxxxxxxxxxxxxxxxxxxxxxxx......xx
+x.xxxxxx.xxx.x.x.xx.x.xxxxxx.xxx.x.x.xx..xx.x.x.xxxx......xxxx......xxx.xxxxxx.x
+xx......xxxx.x.x.xx.xx......xxxx.x.x.xx..xx.x.x.xxx.xxxxxx.xx.xxxxxx.xxx......xx
+xxxxxxxxxxxx.x.x.xx.xxxxxxxxxxxx.x.x.xx..xx.x.x.xxxx......xxxx......xxxxxxxxxxxx
+x........xxx.x.x.xx.x........xxx.x.x.xx..xx.x.x.xxxxxxxxxx.xxxxxxxxx.xx........x
+x.xxxxxxxxxx.xx.xxx.x.xxxxxxxxxx.xx.xxx....x.xx...xxxxxxxx.xxxxxxxxx.xx.xxxxxxxx
+x.xxxxxxxxxxxxxxxxx.x.xxxxxxxxxxxxxxxxx.xxxxxxxxxx.........x.........xx.xxxxxxxx
+xxxxxxxx.x.xxxxxxxxxxxxxxxxx.xx.........x..........xxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+xxxxxxxx.x.xxx.xx.xxxxxxxxxx.xx.xxxxxxxxx.xxxxxxxx.xxx.xx.xx...xx.x...xxxxxxxx.x
+x........x.xx.x.x.xxx........xx.xxxxxxxxx.xxxxxxxx.xx.x.x.xxxx.x.x.xx.x........x
+xxxxxxxxxx.xx.x.x.xxxxxxxxxxxxxx......xxxx......xx.xx.x.x.xxxx.x.x.xx.xxxxxxxxxx
+xx......xx.xx.x.x.xxxx......xxx.xxxxxx.xx.xxxxxx.x.xx.x.x.xxxx.x.x.xx.xx......xx
+x.xxxxxx.x.xx.x.x.xxx.xxxxxx.xxx......xxxx......xx.xx.x.x.xxxx.x.x.xx.x.xxxxxx.x
+xx......xx.xx.x.x.xxxx......xxxxxxxxxxxxxxxxxxxxxx.xx.x.x.xxxx.x.x.xx.xx......xx
+xxxxxxxx.x.xx.x.x.xxxxxxxxxx.xx........xx........x.xx.x.x.xxxx.x.x.xx.xxxxxxxx.x
+xxxxxxxx.x...x.xx...xxxxxxxx.xx.xxxxxxxxx.xxxxxxxx...x.xx...xx.xx.xxx.xxxxxxxx.x
+.........xxxxxxxxxxx.........xx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxx..........x
+xxxxxxxxxxxxxxxxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxx
+...xx.x......xx.x....xxx.xx.xx.xxx.xx.xx...xx.x....xxx.xx.xx.xxx.xx.xx...xx.x...
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx.
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx.
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx.
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx.
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx.
+xx.x.x.xx.xx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx..xx.x.x.xx.xx.x.x.xxxx.x.x.xx.
+xx.xx.xxx.xx.xx.xxx....x.xx......x.xx...xx.xx.xxx....x.xx......x.xx...xx.xx.xxx.
+xxxxxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+.xxxxxxxxxxxxxxxxx.xx..........xxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxx.x.xxxxxxxxx
+.xxx.xx.xxxxxxxxxx.xx.xxxxxxxx.xxx.xx.xxxxxxxxxx.x...xx.x...xxxxxxxx.x.xxx.xx.xx
+.xx.x.x.xxx........xx.xxxxxxxx.xx.x.x.xxx........xxx.x.x.xx.x........x.xx.x.x.xx
+.xx.x.x.xxxxxxxxxxxxxx......xx.xx.x.x.xxxxxxxxxxxxxx.x.x.xx.xxxxxxxxxx.xx.x.x.xx
+.xx.x.x.xxxx......xxx.xxxxxx.x.xx.x.x.xxxx......xxxx.x.x.xx.xx......xx.xx.x.x.xx
+.xx.x.x.xxx.xxxxxx.xxx......xx.xx.x.x.xxx.xxxxxx.xxx.x.x.xx.x.xxxxxx.x.xx.x.x.xx
+.xx.x.x.xxxx......xxxxxxxxxxxx.xx.x.x.xxxx......xxxx.x.x.xx.xx......xx.xx.x.x.xx
+.xx.x.x.xxxxxxxxxx.xx........x.xx.x.x.xxxxxxxxxx.xxx.x.x.xx.xxxxxxxx.x.xx.x.x.xx
+...x.xx...xxxxxxxx.xx.xxxxxxxx...x.xx...xxxxxxxx.xxx.xx.xxx.xxxxxxxx.x...x.xx...
+xxxxxxxxxx.........xx.xxxxxxxxxxxxxxxxxx.........xxxxxxxxxx..........xxxxxxxxxxx
+.xxxxxxxxx.xxxxxxxxxxxxxxxxx.xx..........xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxx.xx.xx.xxx.xx.xxxxxxxxxx.xx.xxxxxxxx.xxx.xx.xx...xx.x......xx.x...xxxxxxxx.x
+.xx.x.x.xx.xx.x.x.xxx........xx.xxxxxxxx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.x........x
+.xx.x.x.xx.xx.x.x.xxxxxxxxxxxxxx......xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.xxxxxxxxxx
+.xx.x.x.xx.xx.x.x.xxxx......xxx.xxxxxx.x.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.xx......xx
+.xx.x.x.xx.xx.x.x.xxx.xxxxxx.xxx......xx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.x.xxxxxx.x
+.xx.x.x.xx.xx.x.x.xxxx......xxxxxxxxxxxx.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.xx......xx
+.xx.x.x.xx.xx.x.x.xxxxxxxxxx.xx........x.xx.x.x.xxxx.x.x.xx.xx.x.x.xx.xxxxxxxx.x
+...x.xx......x.xx...xxxxxxxx.xx.xxxxxxxx...x.xx...xx.xx.xxx.xx.xx.xxx.xxxxxxxx.x
+xxxxxxxxxxxxxxxxxxxx.........xx.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxx..........x
+34 43
+....x...xx.x.x..xx...x...x.x.....xx.x..xxx.
+...x...xx.x......x....x.xx.xxx...xx....x.x.
+x.x.x..xx.x...x.....x...x..xx.x.xx.x..x...x
+........x....xx.x.x..x.x..x.x..x.x..x..xx.x
+..x..x...x..xxx......xx.x.x.x....x.xx..x...
+.xx..x.x......x..x.......xx..x.....x.xxx..x
+.x.......x...x.x.x...x..x......x.x....x..xx
+x.xx.x.x.x.x.xx............x....x.x.....x..
+......x.x.x.xxx..x.x..x.xx...x.x.......x...
+...xxxx.......x.....xxx.x....xxx.x.xx...x..
+..xx..xx.x...x...xx.xx.x.xx.x..xx.x..xxx...
+x..x..x...x..x............x........x.x.....
+.x.x...xxx.x..x....x.x...x....xx.xx......x.
+.x......xx..x...x.xx.xx...........x.xx...x.
+...x..x..x....x...xx...xx.x.x.x.xxx.x.....x
+...xxxxxxx.xx.......x.......xx...x.........
+xx..xx..x..x.x.x...xxx.....x..x.x..x.xxx...
+xxx...x.x...x.xx.x.xxx..xx.x...x......x.x..
+x.....x.xx....x...x.x.x.....xx.x...x..x.xxx
+..x...xxxxx..x.xx.xxx.x.x......x..xx..x....
+x.x......x..x.x..x...xx...x...xx.x..xx..x..
+.x.x.......x..xx...x...x.x....x.x.x.x.x...x
+...x.x.x.xx..xx..x..xx.x..xx.xx......x.xx..
+x.x....x....xx.x.x..xx.....x.x.xxx...xxx...
+.x.xxx..x.x...x....................x.xx....
+xx...xx...x.xxx......x......xx....xx...x.x.
+.x...xx...x.x......xx....x....xx....xxxx...
+x.x..x..x.....x.x..xx.x.x.xxx..x.xxxx.x...x
+.xxxx.x.xx..xxxx..x..x.x.xxxx.x...xxxx..xx.
+x.........x..x..x..x.xx..x......x.x...x...x
+x.x.......xxxx.x.x.....xx............x.....
+x.....xxx.xx...xx..xx.....x........x..x.xx.
+.x.xxx...xxx.xx..........x..xxxxx.x.x...x..
+xx......x.x..x.........x.......x.....x..x..
+17 13
+.............
+.....x..x....
+x............
+...x.........
+.............
+...........x.
+...x.........
+.............
+....x........
+.x...........
+x.........xx.
+.............
+.............
+......x.x....
+.............
+.....x.......
+............x
+80 80
+x..............................................................................x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
+x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x
+.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xx
+x...........................................................................x..x
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxx
+80 1
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+1 80
+x....x.x.........xx.......x...x.x.x.....xx...xx...xx........x..x.x..........x...
+17 79
+.......xx...x......x.........................................x.....x...........
+...x.....x...............x.....x..x...x......x............................x....
+x.............x...x.......x.x....x.................x..x.............x......x...
+.....x........x........x.............x...x....................x...........x....
+...........x..x.......x.....................................................x..
+x............................................x........x......................x.
+...x..x...........x.....xx..........x...............................x..........
+.........................x.................................x......x............
+................xx...x...................x.....................................
+.......x...............x........................x....................x.........
+............x........x.......x......xx.......x.................................
+.................x.................................................x...........
+x...........x........x..............x.............x.x...x.x....................
+x....x.....x.............x............................x........................
+.....x............................x.......................................x....
+..x.x.......x.x...........x.................x..........x..................x....
+..........x........x....x.......x....x.x.......xx.x.......x....................
diff --git a/codejam_2008/src/y2008round3/C-large-practice.out b/codejam_2008/src/y2008round3/C-large-practice.out
new file mode 100644
index 0000000..23bf7df
--- /dev/null
+++ b/codejam_2008/src/y2008round3/C-large-practice.out
@@ -0,0 +1,20 @@
+Case #1: 1111
+Case #2: 1404
+Case #3: 2001
+Case #4: 120
+Case #5: 566
+Case #6: 1
+Case #7: 1257
+Case #8: 1408
+Case #9: 691
+Case #10: 1972
+Case #11: 2032
+Case #12: 2789
+Case #13: 2960
+Case #14: 1640
+Case #15: 517
+Case #16: 111
+Case #17: 157
+Case #18: 0
+Case #19: 36
+Case #20: 626
diff --git a/codejam_2008/src/y2008round3/C-small-practice.in b/codejam_2008/src/y2008round3/C-small-practice.in
new file mode 100644
index 0000000..e05e922
--- /dev/null
+++ b/codejam_2008/src/y2008round3/C-small-practice.in
@@ -0,0 +1,177 @@
+20
+10 10
+....x..x.x
+.x.xxxx.x.
+..x..x....
+x..xx..x..
+.x.x.x....
+xx...x.x..
+.x.xx..xxx
+...x.xxx.x
+.xx.....x.
+.....x..x.
+9 9
+.....x.x.
+.........
+...x.....
+.....xxx.
+x...xx...
+.x......x
+x....x...
+.........
+.........
+10 10
+.xxxxxxxxx
+xxx.x.x.xx
+xx.x.x.x.x
+x.xxxxxxx.
+xx.xxxxx.x
+x.xx...xx.
+xx.xxxxx.x
+x.xxxxxxx.
+xx.x.x.x.x
+xxx.x.x.xx
+10 10
+x.........
+x.xxxxxxxx
+x.xxxxxxxx
+xx......xx
+x.xxxxxx.x
+xx......xx
+xxxxxxxxxx
+x........x
+x.xxxxxxxx
+x.xxxxxxxx
+1 10
+....x.....
+7 3
+...
+...
+...
+...
+...
+...
+...
+9 10
+.x.xxx..x.
+xx.....x.x
+xx.xx.x.x.
+x.x.xx....
+..xx.xxx..
+..xx.x.x.x
+.xx..xxx..
+x....x..x.
+....x.....
+10 1
+x
+x
+x
+x
+x
+x
+x
+x
+x
+x
+10 10
+..........
+..x.x...xx
+..........
+..........
+x..x....xx
+.x........
+...x......
+..........
+..........
+..........
+10 10
+xxxxx.xxxx
+x.x..x.x.x
+xx..xx...x
+x.xxxxx.xx
+.xxxx.xx.x
+..x....xx.
+x.xxxxxx.x
+x..xxx.x.x
+x.......xx
+xxxx.xxxxx
+10 10
+..........
+..........
+......x...
+..........
+..........
+..........
+..........
+..........
+..........
+..........
+10 8
+.....x..
+x.......
+..x.x...
+.x..x...
+.x.x.x..
+.....xx.
+.xx.....
+.......x
+.....x..
+..x.....
+10 10
+x.xxx.xx.x
+.xxx.xx.x.
+xxxxx.x..x
+xxxx.xxxxx
+.x.x...x.x
+x.x...x.x.
+xxxxx.xxxx
+x.xx.xx..x
+.x.xx.x...
+x.xx.xxx.x
+7 9
+....x....
+..x......
+.......xx
+.........
+.........
+.........
+......x..
+1 1
+.
+10 10
+.xxxxxxxx.
+x.x.x.xx.x
+xx.x.x..xx
+x.x.xx..xx
+.xxx..xx.x
+x.xx..xxx.
+xx..xx.x.x
+xx..x.x.xx
+x.xx.x.x.x
+.xxxxxxxx.
+3 7
+.......
+x......
+.......
+4 3
+..x
+xx.
+x..
+.x.
+10 10
+x........x
+.xxxxxxxx.
+x.xxxxxx.x
+.xxxxxxxx.
+x.xxxxxx.x
+.xxxxxxxx.
+x.xxxxxx.x
+.xxxxxx.xx
+x.....x..x
+xxxxxx.xxx
+5 3
+.xx
+x..
+xxx
+x.x
+xxx
diff --git a/codejam_2008/src/y2008round3/C-small-practice.out b/codejam_2008/src/y2008round3/C-small-practice.out
new file mode 100644
index 0000000..8449b27
--- /dev/null
+++ b/codejam_2008/src/y2008round3/C-small-practice.out
@@ -0,0 +1,20 @@
+Case #1: 38
+Case #2: 40
+Case #3: 17
+Case #4: 20
+Case #5: 5
+Case #6: 14
+Case #7: 30
+Case #8: 0
+Case #9: 47
+Case #10: 22
+Case #11: 50
+Case #12: 37
+Case #13: 21
+Case #14: 31
+Case #15: 1
+Case #16: 22
+Case #17: 11
+Case #18: 5
+Case #19: 17
+Case #20: 3
diff --git a/codejam_2008/src/y2008round3/c.rs b/codejam_2008/src/y2008round3/c.rs
new file mode 100644
index 0000000..c7285e6
--- /dev/null
+++ b/codejam_2008/src/y2008round3/c.rs
@@ -0,0 +1,170 @@
+use codejam::util::codejam::run_cases;
+use codejam::util::vector_2d::Vector2d;
+use std::io::Write;
+use std::usize;
+use bit_vec::BitVec;
+
+/*
+
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice",
+        //    "C-large-practice"
+        ],
+        "y2008round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n_rows,n_cols) = reader.read_tuple_2();
+
+                let mut chairs = BitVec::from_elem(n_cols*n_rows, false);
+
+                for r in 0..n_rows {
+                    for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
+                        let idx = r * n_cols + c;
+                        chairs.set(idx, ch == '.');
+                    }
+                }
+
+                if case_no != 3 {
+                    continue;
+                }
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&chairs, n_rows, n_cols) ).unwrap();
+            }
+        },
+    );
+}
+
+const INVALID: usize = usize::MAX;
+
+fn index_to_vec(idx: usize, n_cols: usize) -> Vector2d<isize>
+{
+    Vector2d::with_val((idx / n_cols) as isize, (idx % n_cols) as isize)
+}
+fn vec_to_index( v: &Vector2d<isize>, n_cols: usize) -> usize
+{
+    v.r() as usize * n_cols + v.c() as usize
+}
+fn vec_comp_to_index( r :isize, c: isize, n_cols: usize) -> usize
+{
+   r as usize * n_cols + c as usize
+}
+
+fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
+{
+
+let adj_vecs : [Vector2d<isize>; 4] = [ Vector2d::with_val(-1,-1),
+    Vector2d::with_val(0,-1),
+    Vector2d::with_val(0,1),
+    Vector2d::with_val(1,1) ];
+
+    let right_size = (n_cols /2) * n_rows;
+    let right_n_cols = right_size / n_rows;
+    let left_size =  n_rows * n_cols - right_size;
+    let left_n_cols = left_size / n_rows;
+
+    assert_eq!(left_n_cols + right_n_cols, n_cols);
+    assert_eq!(left_size + right_size, chairs.len());
+
+
+    //even col index 0,2,4
+    let mut match_left = vec![INVALID; left_size ];
+
+    //odd col index 1,3,5
+    let mut match_right = vec![INVALID; right_size];
+
+    //Storing values
+    let mut queue: Vec<usize> = vec![0; left_size];
+    let mut back = vec![0; left_size];
+
+    let mut used_first = BitVec::from_elem(left_size, false);
+
+    let mut cur_left_col_idx = 0;
+    while cur_left_col_idx < left_size {
+
+
+
+        let mut queue_head = 0;
+        let mut queue_tail = 1;
+        queue[0] = cur_left_col_idx;
+        used_first.set(cur_left_col_idx, true);
+        back[cur_left_col_idx] = INVALID;
+
+        'bfs: loop {
+            assert!(queue[queue_head] != INVALID);
+            let top_queue_left_idx = queue[queue_head];
+            let mut top_queue_loc = index_to_vec(top_queue_left_idx, left_n_cols);
+            top_queue_loc.data[1] *= 2;
+
+            debug!("Top loc (even/left) {:?} idx {} left cols {} rows {} cols {}",
+            top_queue_loc, top_queue_left_idx, left_n_cols, n_rows, n_cols);
+
+            queue_head += 1;
+
+            if !chairs[ vec_to_index( &top_queue_loc, n_cols) ] {
+                break;
+            }
+
+            for adj_odd_loc in adj_vecs.iter().map(|adj| *adj + &top_queue_loc) {
+                if adj_odd_loc.r() < 0 || adj_odd_loc.r() >= n_rows as isize ||
+                    adj_odd_loc.c() < 0 || adj_odd_loc.c() >= n_cols as isize ||
+                    !chairs[ vec_to_index(&adj_odd_loc, n_cols) ]
+                    {
+                    continue;
+                }
+                let adj_right_index = vec_comp_to_index(adj_odd_loc.r() , adj_odd_loc.c() / 2, right_n_cols);
+
+                debug!("Adj odd / right loc {:?} idx {} right size {} right cols {} rows {}", adj_odd_loc, adj_right_index, right_size, right_n_cols, n_rows);
+
+                //Found a non matched second index
+                if match_right[adj_right_index] == INVALID {
+                    let mut next_right_index = adj_right_index;
+                    let mut next_left_index = top_queue_left_idx;
+
+                    match_right[adj_right_index] = next_left_index;
+                    //Applying the augmenting path
+                    while back[next_left_index] != INVALID {
+                        assert!(back[next_left_index] != INVALID);
+                        assert!(match_left[next_left_index] != INVALID);
+                        let prev = back[next_left_index];
+                        let pnext = match_left[next_left_index];
+                        match_left[next_left_index] = next_right_index;
+                        match_right[pnext] = prev;
+                        next_left_index = prev;
+                        next_right_index = pnext;
+                    }
+                    match_left[next_left_index] = next_right_index;
+                    // found = true;
+                    break 'bfs;
+                } else if !used_first[match_right[adj_right_index]] {
+                    //Need to find a new matching for this value, put its left index on queue
+                    used_first.set(match_right[adj_right_index], true);
+                    queue[queue_tail] = match_right[adj_right_index];
+                    queue_tail += 1;
+
+                    back[match_right[adj_right_index]] = top_queue_left_idx;
+                }
+            }
+            if queue_head == queue_tail {
+                break;
+            }
+        }
+
+
+        //Reset all dice values in queue
+        for qj in queue.iter().take(queue_tail) {
+            used_first.set(*qj, false);
+        }
+
+        cur_left_col_idx += 1;
+    }
+
+    let match_count = match_left.iter().filter(|&&e| e != INVALID).count();
+
+    chairs.iter().filter( |c| *c).count() - match_count
+}
\ No newline at end of file
diff --git a/codejam_2008/src/y2008round3/mod.rs b/codejam_2008/src/y2008round3/mod.rs
index ae3ceea..65cf811 100644
--- a/codejam_2008/src/y2008round3/mod.rs
+++ b/codejam_2008/src/y2008round3/mod.rs
@@ -1,5 +1,6 @@
 pub mod a;
 pub mod b;
+pub mod c;
 /*
 pub mod c;
 pub mod d; */

From 6a2ddce17d60cc05d9deeee9d808a935bac81203 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 24 Feb 2019 15:48:00 -0300
Subject: [PATCH 087/122] c

---
 codejam_2008/src/main.rs                      |  2 +-
 codejam_2008/src/y2008practice/b.rs           | 19 ++--
 .../src/y2008round3/C-large-practice.out      | 28 +++---
 .../src/y2008round3/C-small-practice.out      | 16 ++--
 codejam_2008/src/y2008round3/a.rs             | 24 +++--
 codejam_2008/src/y2008round3/b.rs             | 93 +++++++++++--------
 codejam_2008/src/y2008round3/c.rs             | 85 ++++++++++-------
 7 files changed, 153 insertions(+), 114 deletions(-)

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 2b5a982..6b20e4e 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -82,7 +82,7 @@ pub fn run_y2008_round2()
 
 pub fn run_y2008_round3()
 {
-y2008round3::a::solve_all_cases();
+    y2008round3::a::solve_all_cases();
     y2008round3::b::solve_all_cases();
     y2008round3::c::solve_all_cases();
 }
diff --git a/codejam_2008/src/y2008practice/b.rs b/codejam_2008/src/y2008practice/b.rs
index cc9b059..5e713a4 100644
--- a/codejam_2008/src/y2008practice/b.rs
+++ b/codejam_2008/src/y2008practice/b.rs
@@ -8,8 +8,8 @@ use std::char::from_digit;
 use std::cmp::max;
 use std::cmp::min;
 use std::collections::HashMap;
-use std::isize;
 use std::io::Write;
+use std::isize;
 
 /*
 Grid
@@ -74,14 +74,15 @@ fn solve(forward_path: &str, back_path: &str) -> String
         debug!("Current pos {:?}, direction {:?}", pos, dir);
     };
 
-    let mut handle_path = |path: &str, initial_dir: Vector2d<isize>, initial_pos: Vector2d<isize>| {
-        let mut dir = initial_dir;
-        let mut pos = initial_pos;
-        for ch in path.chars() {
-            handle_step(ch, &mut dir, &mut pos);
-        }
-        (dir, pos)
-    };
+    let mut handle_path =
+        |path: &str, initial_dir: Vector2d<isize>, initial_pos: Vector2d<isize>| {
+            let mut dir = initial_dir;
+            let mut pos = initial_pos;
+            for ch in path.chars() {
+                handle_step(ch, &mut dir, &mut pos);
+            }
+            (dir, pos)
+        };
 
     let (dir, pos) = handle_path(forward_path, SOUTH, Vector2d::with_val(0, 0));
     let mut dir = dir;
diff --git a/codejam_2008/src/y2008round3/C-large-practice.out b/codejam_2008/src/y2008round3/C-large-practice.out
index 23bf7df..df0c817 100644
--- a/codejam_2008/src/y2008round3/C-large-practice.out
+++ b/codejam_2008/src/y2008round3/C-large-practice.out
@@ -1,20 +1,20 @@
-Case #1: 1111
-Case #2: 1404
-Case #3: 2001
-Case #4: 120
+Case #1: 1166
+Case #2: 1435
+Case #3: 1996
+Case #4: 122
 Case #5: 566
 Case #6: 1
-Case #7: 1257
-Case #8: 1408
-Case #9: 691
-Case #10: 1972
-Case #11: 2032
-Case #12: 2789
+Case #7: 1576
+Case #8: 1223
+Case #9: 692
+Case #10: 1986
+Case #11: 2043
+Case #12: 2794
 Case #13: 2960
-Case #14: 1640
-Case #15: 517
+Case #14: 1661
+Case #15: 523
 Case #16: 111
-Case #17: 157
+Case #17: 156
 Case #18: 0
 Case #19: 36
-Case #20: 626
+Case #20: 637
diff --git a/codejam_2008/src/y2008round3/C-small-practice.out b/codejam_2008/src/y2008round3/C-small-practice.out
index 8449b27..0d98297 100644
--- a/codejam_2008/src/y2008round3/C-small-practice.out
+++ b/codejam_2008/src/y2008round3/C-small-practice.out
@@ -1,20 +1,20 @@
-Case #1: 38
+Case #1: 39
 Case #2: 40
-Case #3: 17
+Case #3: 18
 Case #4: 20
 Case #5: 5
 Case #6: 14
-Case #7: 30
+Case #7: 31
 Case #8: 0
-Case #9: 47
+Case #9: 46
 Case #10: 22
 Case #11: 50
-Case #12: 37
-Case #13: 21
+Case #12: 35
+Case #13: 25
 Case #14: 31
 Case #15: 1
-Case #16: 22
+Case #16: 19
 Case #17: 11
 Case #18: 5
-Case #19: 17
+Case #19: 16
 Case #20: 3
diff --git a/codejam_2008/src/y2008round3/a.rs b/codejam_2008/src/y2008round3/a.rs
index 257e8f1..7e85cd0 100644
--- a/codejam_2008/src/y2008round3/a.rs
+++ b/codejam_2008/src/y2008round3/a.rs
@@ -1,11 +1,11 @@
 use codejam::util::codejam::run_cases;
 use codejam::util::grid::constants::*;
 use codejam::util::vector_2d::Vector2d;
+use itertools::Itertools;
 use std::cmp::max;
 use std::cmp::min;
-use std::isize;
 use std::io::Write;
-use itertools::Itertools;
+use std::isize;
 
 /*
 Polygons
@@ -13,9 +13,7 @@ Polygons
 pub fn solve_all_cases()
 {
     run_cases(
-        &["A-small-practice",
-            "A-large-practice"
-        ],
+        &["A-small-practice", "A-large-practice"],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
@@ -62,8 +60,6 @@ fn solve(path: &[(Vec<char>, u32)]) -> isize
     let mut cur: Vector2d<isize> = Default::default();
     let mut area: isize = 0;
 
-
-
     for (s, t) in path.iter() {
         debug!("S = {} repeat = {}", s.iter().join(""), t);
 
@@ -90,7 +86,12 @@ fn solve(path: &[(Vec<char>, u32)]) -> isize
                                 cc[0] = min(cc[0], cur.c());
                                 cc[1] = max(cc[1], cur.c());
 
-                                debug!("Col range of {} {} is {:?}", idx, idx as isize-COORD_OFFSET, cc);
+                                debug!(
+                                    "Col range of {} {} is {:?}",
+                                    idx,
+                                    idx as isize - COORD_OFFSET,
+                                    cc
+                                );
                                 //x1*y2 - x2*y1
                                 //x(y2-y1)
 
@@ -108,7 +109,12 @@ fn solve(path: &[(Vec<char>, u32)]) -> isize
 
                                 //y(x1-x2)
 
-                                debug!("Col range of {} {} is {:?}", idx, idx as isize-COORD_OFFSET, rr);
+                                debug!(
+                                    "Col range of {} {} is {:?}",
+                                    idx,
+                                    idx as isize - COORD_OFFSET,
+                                    rr
+                                );
 
                                 area += cur.r() * (cur.c() - nxt.c());
                             }
diff --git a/codejam_2008/src/y2008round3/b.rs b/codejam_2008/src/y2008round3/b.rs
index e54e8e9..3317b4a 100644
--- a/codejam_2008/src/y2008round3/b.rs
+++ b/codejam_2008/src/y2008round3/b.rs
@@ -1,12 +1,12 @@
+use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
 use codejam::util::grid::constants::*;
-use codejam::util::vector_2d::Vector2d;
-use std::io::Write;
 use codejam::util::grid::Grid;
-use std::usize;
+use codejam::util::vector_2d::Vector2d;
 use std::cmp::min;
 use std::collections::BinaryHeap;
-use bit_set::BitSet;
+use std::io::Write;
+use std::usize;
 
 /*
 Grid
@@ -16,24 +16,22 @@ Dijkstras / priority queue (using negative to make it a min queue)
 pub fn solve_all_cases()
 {
     run_cases(
-        &["B-small-practice",
-            "B-large-practice"
-        ],
+        &["B-small-practice", "B-large-practice"],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (n_rows,n_cols) = reader.read_tuple_2();
+                let (n_rows, n_cols) = reader.read_tuple_2();
 
-                let mut grid = Grid::new(n_rows,n_cols);
+                let mut grid = Grid::new(n_rows, n_cols);
 
-                let mut start : Vector2d<isize> = Default::default();
-                let mut stop : Vector2d<isize> = Default::default();
+                let mut start: Vector2d<isize> = Default::default();
+                let mut stop: Vector2d<isize> = Default::default();
 
                 for r in 0..n_rows {
                     for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
-                        grid[ (r,c) ] = ch;
+                        grid[(r, c)] = ch;
                         if ch == 'X' {
                             stop = Vector2d::with_val(r as isize, c as isize);
                         } else if ch == 'O' {
@@ -43,13 +41,21 @@ pub fn solve_all_cases()
                 }
 
                 if case_no != 1 {
-                   // continue;
+                    // continue;
                 }
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {}", case_no, if let Some(ans) = solve(&grid, &start, &stop) { ans.to_string() } else {
-                    "THE CAKE IS A LIE".to_string()
-                }).unwrap();
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    if let Some(ans) = solve(&grid, &start, &stop) {
+                        ans.to_string()
+                    } else {
+                        "THE CAKE IS A LIE".to_string()
+                    }
+                )
+                .unwrap();
             }
         },
     );
@@ -64,25 +70,23 @@ X indicates the cake's position.
 
 const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, EAST, SOUTH, WEST];
 
-const CLOSEST_WALL_INDEX:usize = 4;
-
+const CLOSEST_WALL_INDEX: usize = 4;
 
-
-fn solve(grid: &Grid<char>, start : &Vector2d<isize>, stop : &Vector2d<isize>) -> Option<isize>
+fn solve(grid: &Grid<char>, start: &Vector2d<isize>, stop: &Vector2d<isize>) -> Option<isize>
 {
     debug!("Grid\n{:#.4?}\n", grid);
 
     //precompute 5 values, closest wall in 4 directions, then closest wall absolutely
-    let mut nearest_dir: Grid< [usize; 5] > = Grid::new(grid.R, grid.C);
+    let mut nearest_dir: Grid<[usize; 5]> = Grid::new(grid.R, grid.C);
 
     for c in nearest_dir.data.iter_mut() {
         c[4] = usize::MAX;
     }
 
-    for rr in 0..grid.R  {
-        for cc in 0..grid.C  {
+    for rr in 0..grid.R {
+        for cc in 0..grid.C {
             //start from top/left corner or bottom/right corner.
-            for &(r,c, dir_start) in [ (rr, grid.C-1-cc, 0), (grid.R - 1- rr, cc, 2) ].iter() {
+            for &(r, c, dir_start) in [(rr, grid.C - 1 - cc, 0), (grid.R - 1 - rr, cc, 2)].iter() {
                 let coord = Vector2d::with_val(r as isize, c as isize);
                 for (dir_idx, dir) in DIRECTIONS.iter().enumerate().skip(dir_start).take(2) {
                     for &dd_idx in [dir_idx, CLOSEST_WALL_INDEX].iter() {
@@ -99,7 +103,6 @@ fn solve(grid: &Grid<char>, start : &Vector2d<isize>, stop : &Vector2d<isize>) -
                         } else {
                             *m_val = val;
                         }
-
                     }
                 }
             }
@@ -108,12 +111,16 @@ fn solve(grid: &Grid<char>, start : &Vector2d<isize>, stop : &Vector2d<isize>) -
 
     for r in 0..grid.R {
         for c in 0..grid.C {
-            debug!("For r {} c {} --> NESW near {:?}", r, c, nearest_dir[(r, c)]);
+            debug!(
+                "For r {} c {} --> NESW near {:?}",
+                r,
+                c,
+                nearest_dir[(r, c)]
+            );
         }
     }
 
-
-    let mut pq:BinaryHeap< (isize, Vector2d<isize>)> = BinaryHeap::new();
+    let mut pq: BinaryHeap<(isize, Vector2d<isize>)> = BinaryHeap::new();
     let mut visited = BitSet::new();
     pq.push((0, start.clone()));
 
@@ -132,23 +139,33 @@ fn solve(grid: &Grid<char>, start : &Vector2d<isize>, stop : &Vector2d<isize>) -
         visited.insert(idx);
 
         for (dir_idx, dir) in DIRECTIONS.iter().enumerate() {
-
             let d = nearest_dir[idx][dir_idx];
             //either we walk
-            if d > 0 && grid.get_value(&(cur+dir)).is_some() {
-                debug!("Walking Cur is {:?} adding {:?} for dir {}",
-                cur, cur + dir, dir_idx);
-
-                pq.push( (cost - 1, cur + dir));
+            if d > 0 && grid.get_value(&(cur + dir)).is_some() {
+                debug!(
+                    "Walking Cur is {:?} adding {:?} for dir {}",
+                    cur,
+                    cur + dir,
+                    dir_idx
+                );
+
+                pq.push((cost - 1, cur + dir));
             }
             //or shoot a portal and go to the closest wall to teleport to it
             if d > 1 {
-                debug!("Cur is {:?} adding {:?} for dir {}",
-                cur, cur + &(dir * (d - 1) as isize), dir_idx);
-                pq.push( (cost - nearest_dir[idx][CLOSEST_WALL_INDEX] as isize, cur + &(dir * (d - 1) as isize)));
+                debug!(
+                    "Cur is {:?} adding {:?} for dir {}",
+                    cur,
+                    cur + &(dir * (d - 1) as isize),
+                    dir_idx
+                );
+                pq.push((
+                    cost - nearest_dir[idx][CLOSEST_WALL_INDEX] as isize,
+                    cur + &(dir * (d - 1) as isize),
+                ));
             }
         }
     }
 
     None
-}
\ No newline at end of file
+}
diff --git a/codejam_2008/src/y2008round3/c.rs b/codejam_2008/src/y2008round3/c.rs
index c7285e6..3e440c0 100644
--- a/codejam_2008/src/y2008round3/c.rs
+++ b/codejam_2008/src/y2008round3/c.rs
@@ -1,8 +1,8 @@
+use bit_vec::BitVec;
 use codejam::util::codejam::run_cases;
 use codejam::util::vector_2d::Vector2d;
 use std::io::Write;
 use std::usize;
-use bit_vec::BitVec;
 
 /*
 
@@ -10,17 +10,18 @@ use bit_vec::BitVec;
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice",
-        //    "C-large-practice"
+        &[
+            "C-small-practice",
+               "C-large-practice"
         ],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (n_rows,n_cols) = reader.read_tuple_2();
+                let (n_rows, n_cols) = reader.read_tuple_2();
 
-                let mut chairs = BitVec::from_elem(n_cols*n_rows, false);
+                let mut chairs = BitVec::from_elem(n_cols * n_rows, false);
 
                 for r in 0..n_rows {
                     for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
@@ -30,11 +31,17 @@ pub fn solve_all_cases()
                 }
 
                 if case_no != 3 {
-                    continue;
+                    //continue;
                 }
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {}", case_no, solve(&chairs, n_rows, n_cols) ).unwrap();
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(&chairs, n_rows, n_cols)
+                )
+                .unwrap();
             }
         },
     );
@@ -46,34 +53,37 @@ fn index_to_vec(idx: usize, n_cols: usize) -> Vector2d<isize>
 {
     Vector2d::with_val((idx / n_cols) as isize, (idx % n_cols) as isize)
 }
-fn vec_to_index( v: &Vector2d<isize>, n_cols: usize) -> usize
+fn vec_to_index(v: &Vector2d<isize>, n_cols: usize) -> usize
 {
     v.r() as usize * n_cols + v.c() as usize
 }
-fn vec_comp_to_index( r :isize, c: isize, n_cols: usize) -> usize
+fn vec_comp_to_index(r: isize, c: isize, n_cols: usize) -> usize
 {
-   r as usize * n_cols + c as usize
+    r as usize * n_cols + c as usize
 }
 
 fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
 {
-
-let adj_vecs : [Vector2d<isize>; 4] = [ Vector2d::with_val(-1,-1),
-    Vector2d::with_val(0,-1),
-    Vector2d::with_val(0,1),
-    Vector2d::with_val(1,1) ];
-
-    let right_size = (n_cols /2) * n_rows;
+    let adj_vecs: [Vector2d<isize>; 4] = [
+        Vector2d::with_val(-1, -1),
+        Vector2d::with_val(0, -1),
+        Vector2d::with_val(0, 1),
+        Vector2d::with_val(-1, 1),
+    ];
+
+    //odd indexed columns may have 1 less
+    let right_size = (n_cols / 2) * n_rows;
     let right_n_cols = right_size / n_rows;
-    let left_size =  n_rows * n_cols - right_size;
+    let left_size = n_rows * n_cols - right_size;
     let left_n_cols = left_size / n_rows;
 
+    assert_eq!(left_n_cols, n_cols / 2 + n_cols % 2);
+    assert_eq!(right_n_cols, n_cols / 2 );
     assert_eq!(left_n_cols + right_n_cols, n_cols);
     assert_eq!(left_size + right_size, chairs.len());
 
-
     //even col index 0,2,4
-    let mut match_left = vec![INVALID; left_size ];
+    let mut match_left = vec![INVALID; left_size];
 
     //odd col index 1,3,5
     let mut match_right = vec![INVALID; right_size];
@@ -86,9 +96,6 @@ let adj_vecs : [Vector2d<isize>; 4] = [ Vector2d::with_val(-1,-1),
 
     let mut cur_left_col_idx = 0;
     while cur_left_col_idx < left_size {
-
-
-
         let mut queue_head = 0;
         let mut queue_tail = 1;
         queue[0] = cur_left_col_idx;
@@ -101,25 +108,34 @@ let adj_vecs : [Vector2d<isize>; 4] = [ Vector2d::with_val(-1,-1),
             let mut top_queue_loc = index_to_vec(top_queue_left_idx, left_n_cols);
             top_queue_loc.data[1] *= 2;
 
-            debug!("Top loc (even/left) {:?} idx {} left cols {} rows {} cols {}",
-            top_queue_loc, top_queue_left_idx, left_n_cols, n_rows, n_cols);
+            debug!(
+                "Top loc (even/left) {:?} idx {} left cols {} rows {} cols {}",
+                top_queue_loc, top_queue_left_idx, left_n_cols, n_rows, n_cols
+            );
 
             queue_head += 1;
 
-            if !chairs[ vec_to_index( &top_queue_loc, n_cols) ] {
+            if !chairs[vec_to_index(&top_queue_loc, n_cols)] {
                 break;
             }
 
             for adj_odd_loc in adj_vecs.iter().map(|adj| *adj + &top_queue_loc) {
-                if adj_odd_loc.r() < 0 || adj_odd_loc.r() >= n_rows as isize ||
-                    adj_odd_loc.c() < 0 || adj_odd_loc.c() >= n_cols as isize ||
-                    !chairs[ vec_to_index(&adj_odd_loc, n_cols) ]
-                    {
+                if adj_odd_loc.r() < 0
+                    || adj_odd_loc.r() >= n_rows as isize
+                    || adj_odd_loc.c() < 0
+                    || adj_odd_loc.c() >= n_cols as isize
+                    || !chairs[vec_to_index(&adj_odd_loc, n_cols)]
+                {
                     continue;
                 }
-                let adj_right_index = vec_comp_to_index(adj_odd_loc.r() , adj_odd_loc.c() / 2, right_n_cols);
+                assert_eq!(adj_odd_loc.c() % 2, 1);
+                let adj_right_index =
+                    vec_comp_to_index(adj_odd_loc.r(), adj_odd_loc.c() / 2, right_n_cols);
 
-                debug!("Adj odd / right loc {:?} idx {} right size {} right cols {} rows {}", adj_odd_loc, adj_right_index, right_size, right_n_cols, n_rows);
+                debug!(
+                    "Adj odd / right loc {:?} idx {} right size {} right cols {} rows {}",
+                    adj_odd_loc, adj_right_index, right_size, right_n_cols, n_rows
+                );
 
                 //Found a non matched second index
                 if match_right[adj_right_index] == INVALID {
@@ -155,7 +171,6 @@ let adj_vecs : [Vector2d<isize>; 4] = [ Vector2d::with_val(-1,-1),
             }
         }
 
-
         //Reset all dice values in queue
         for qj in queue.iter().take(queue_tail) {
             used_first.set(*qj, false);
@@ -166,5 +181,5 @@ let adj_vecs : [Vector2d<isize>; 4] = [ Vector2d::with_val(-1,-1),
 
     let match_count = match_left.iter().filter(|&&e| e != INVALID).count();
 
-    chairs.iter().filter( |c| *c).count() - match_count
-}
\ No newline at end of file
+    chairs.iter().filter(|c| *c).count() - match_count
+}

From f62f97a1b5ae3669882b5d107b3219634a20442d Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 24 Feb 2019 15:58:57 -0300
Subject: [PATCH 088/122] c

---
 .../src/y2008round3/C-large-practice.out      | 28 +++++++++----------
 .../src/y2008round3/C-small-practice.out      | 14 +++++-----
 codejam_2008/src/y2008round3/c.rs             | 12 +++++---
 3 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/codejam_2008/src/y2008round3/C-large-practice.out b/codejam_2008/src/y2008round3/C-large-practice.out
index df0c817..da5a0d5 100644
--- a/codejam_2008/src/y2008round3/C-large-practice.out
+++ b/codejam_2008/src/y2008round3/C-large-practice.out
@@ -1,20 +1,20 @@
-Case #1: 1166
-Case #2: 1435
-Case #3: 1996
-Case #4: 122
+Case #1: 983
+Case #2: 1401
+Case #3: 1909
+Case #4: 115
 Case #5: 566
 Case #6: 1
-Case #7: 1576
-Case #8: 1223
-Case #9: 692
-Case #10: 1986
-Case #11: 2043
-Case #12: 2794
+Case #7: 1209
+Case #8: 1152
+Case #9: 647
+Case #10: 1947
+Case #11: 1947
+Case #12: 2770
 Case #13: 2960
-Case #14: 1661
-Case #15: 523
+Case #14: 1600
+Case #15: 497
 Case #16: 111
-Case #17: 156
+Case #17: 155
 Case #18: 0
 Case #19: 36
-Case #20: 637
+Case #20: 626
diff --git a/codejam_2008/src/y2008round3/C-small-practice.out b/codejam_2008/src/y2008round3/C-small-practice.out
index 0d98297..4a6c2a2 100644
--- a/codejam_2008/src/y2008round3/C-small-practice.out
+++ b/codejam_2008/src/y2008round3/C-small-practice.out
@@ -1,20 +1,20 @@
-Case #1: 39
+Case #1: 37
 Case #2: 40
-Case #3: 18
+Case #3: 15
 Case #4: 20
 Case #5: 5
 Case #6: 14
-Case #7: 31
+Case #7: 29
 Case #8: 0
 Case #9: 46
 Case #10: 22
 Case #11: 50
-Case #12: 35
-Case #13: 25
+Case #12: 33
+Case #13: 19
 Case #14: 31
 Case #15: 1
-Case #16: 19
+Case #16: 18
 Case #17: 11
 Case #18: 5
-Case #19: 16
+Case #19: 15
 Case #20: 3
diff --git a/codejam_2008/src/y2008round3/c.rs b/codejam_2008/src/y2008round3/c.rs
index 3e440c0..bf43268 100644
--- a/codejam_2008/src/y2008round3/c.rs
+++ b/codejam_2008/src/y2008round3/c.rs
@@ -5,7 +5,9 @@ use std::io::Write;
 use std::usize;
 
 /*
-
+Bipartite matching (fast, non recursive implementation)
+Maximum independent set
+Grid
 */
 pub fn solve_all_cases()
 {
@@ -64,9 +66,11 @@ fn vec_comp_to_index(r: isize, c: isize, n_cols: usize) -> usize
 
 fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
 {
-    let adj_vecs: [Vector2d<isize>; 4] = [
+    let adj_vecs: [Vector2d<isize>; 6] = [
         Vector2d::with_val(-1, -1),
         Vector2d::with_val(0, -1),
+        Vector2d::with_val(1, -1),
+        Vector2d::with_val(1, 1),
         Vector2d::with_val(0, 1),
         Vector2d::with_val(-1, 1),
     ];
@@ -155,7 +159,7 @@ fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
                         next_right_index = pnext;
                     }
                     match_left[next_left_index] = next_right_index;
-                    // found = true;
+
                     break 'bfs;
                 } else if !used_first[match_right[adj_right_index]] {
                     //Need to find a new matching for this value, put its left index on queue
@@ -171,7 +175,7 @@ fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
             }
         }
 
-        //Reset all dice values in queue
+        //Reset all values in queue
         for qj in queue.iter().take(queue_tail) {
             used_first.set(*qj, false);
         }

From e62536a4a18389fbc11e5bca23b6d1cd3aaa48df Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Sun, 24 Feb 2019 20:21:23 -0300
Subject: [PATCH 089/122] c

---
 codejam/src/util/vector_2d.rs       |  15 ++++
 codejam_2008/src/y2008round3/c.rs   |   7 +-
 codejam_2008/src/y2008round3/d.rs   | 118 ++++++++++++++++++++++++++++
 codejam_2008/src/y2008round3/mod.rs |   4 +-
 4 files changed, 136 insertions(+), 8 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/d.rs

diff --git a/codejam/src/util/vector_2d.rs b/codejam/src/util/vector_2d.rs
index 8c0790f..cacc1e7 100644
--- a/codejam/src/util/vector_2d.rs
+++ b/codejam/src/util/vector_2d.rs
@@ -182,6 +182,21 @@ impl<N: Add<Output=N> + Copy> Add<&Vector2d<N>> for Vector2d<N>
     }
 }
 
+
+impl<N: Add<Output=N> + Copy> Add<Vector2d<N>> for Vector2d<N>
+{
+    type Output = Self;
+
+    fn add(self, rhs: Vector2d<N>) -> Self
+    {
+        let lhs =  self;
+
+        Vector2d::with_val(
+            lhs.data[0] + rhs.data[0],
+            lhs.data[1] + rhs.data[1],
+        )
+    }
+}
 /*
 impl<N: Copy + AddAssign> AddAssign<&Vector2d<N>> for &mut Vector2d<N>
 {
diff --git a/codejam_2008/src/y2008round3/c.rs b/codejam_2008/src/y2008round3/c.rs
index bf43268..bfd13d8 100644
--- a/codejam_2008/src/y2008round3/c.rs
+++ b/codejam_2008/src/y2008round3/c.rs
@@ -12,10 +12,7 @@ Grid
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "C-small-practice",
-               "C-large-practice"
-        ],
+        &["C-small-practice", "C-large-practice"],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
@@ -82,7 +79,7 @@ fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
     let left_n_cols = left_size / n_rows;
 
     assert_eq!(left_n_cols, n_cols / 2 + n_cols % 2);
-    assert_eq!(right_n_cols, n_cols / 2 );
+    assert_eq!(right_n_cols, n_cols / 2);
     assert_eq!(left_n_cols + right_n_cols, n_cols);
     assert_eq!(left_size + right_size, chairs.len());
 
diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
new file mode 100644
index 0000000..c8874d9
--- /dev/null
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -0,0 +1,118 @@
+use bit_vec::BitVec;
+use codejam::util::codejam::run_cases;
+use codejam::util::vector_2d::Vector2d;
+use std::io::Write;
+use std::usize;
+
+/*
+Change of base
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["D-small-practice", "D-large-practice"],
+        "y2008round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n_rows, n_cols) = reader.read_tuple_2();
+
+                let mut chairs = BitVec::from_elem(n_cols * n_rows, false);
+
+                for r in 0..n_rows {
+                    for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
+                        let idx = r * n_cols + c;
+                        chairs.set(idx, ch == '.');
+                    }
+                }
+
+                if case_no != 3 {
+                    //continue;
+                }
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(&chairs, n_rows, n_cols)
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
+{
+    3
+}
+
+fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<isize>>
+{
+    /*
+    https://en.wikipedia.org/wiki/Change_of_basis
+
+    take a matrix
+    [ 2 1
+      1 2 ] find the inverse
+
+     [ 2/3 -1/3
+      -1/3 2/3 ]
+
+      r' = 2/3 r - 1/3 c
+      c' = -1/3 r + 2/3 c
+
+    */
+
+    let r = 2 * rc.r() - rc.c();
+    let c = 2 * rc.c() - rc.r();
+
+    if r % 3 != 0 || c % 3 != 0 {
+        None
+    } else {
+        Some(Vector2d::with_val(r / 3, c / 3))
+    }
+}
+
+#[cfg(test)]
+mod test_endless_knight
+{
+    use super::*;
+
+    //cargo test test_edge_iterator -- --nocapture
+    #[test]
+    fn test_change_basis()
+    {
+        assert_eq!(
+            Some(Vector2d::with_val(1, 0)),
+            change_basis(&Vector2d::with_val(2, 1))
+        );
+
+        assert_eq!(
+            Some(Vector2d::with_val(3, 2)),
+            change_basis(&Vector2d::with_val(8, 7))
+        );
+
+        assert_eq!(
+            Some(Vector2d::with_val(1, 1)),
+            change_basis(&Vector2d::with_val(3, 3))
+        );
+
+        assert_eq!(
+            None,
+            change_basis(&Vector2d::with_val(3, 1))
+        );
+
+        let vec1 = Vector2d::with_val(2, 1);
+        let vec2 = Vector2d::with_val(1, 2);
+        for r in 0..100 {
+            for c in 0..100 {
+                let v = vec1 * r + vec2 * c;
+                assert_eq!(Some(Vector2d::with_val(r, c)), change_basis(&v));
+                // println!("v is {:?}", v);
+            }
+        }
+    }
+}
diff --git a/codejam_2008/src/y2008round3/mod.rs b/codejam_2008/src/y2008round3/mod.rs
index 65cf811..f693abf 100644
--- a/codejam_2008/src/y2008round3/mod.rs
+++ b/codejam_2008/src/y2008round3/mod.rs
@@ -1,6 +1,4 @@
 pub mod a;
 pub mod b;
 pub mod c;
-/*
-pub mod c;
-pub mod d; */
+pub mod d;

From bb0d9d4f5a74bd32b6a3575f2c577eb797c9df4a Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 01:46:47 -0300
Subject: [PATCH 090/122] d

---
 codejam_2008/Cargo.lock                       |   3 +
 codejam_2008/Cargo.toml                       |   5 +-
 codejam_2008/src/main.rs                      |   7 +-
 .../src/y2008round3/D-large-practice.in       | 521 +++++++++++++++++
 .../src/y2008round3/D-small-practice.in       | 529 ++++++++++++++++++
 .../src/y2008round3/D-small-practice.out      | 100 ++++
 codejam_2008/src/y2008round3/d.rs             | 156 +++++-
 7 files changed, 1292 insertions(+), 29 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/D-large-practice.in
 create mode 100644 codejam_2008/src/y2008round3/D-small-practice.in
 create mode 100644 codejam_2008/src/y2008round3/D-small-practice.out

diff --git a/codejam_2008/Cargo.lock b/codejam_2008/Cargo.lock
index 9769c82..7aed898 100644
--- a/codejam_2008/Cargo.lock
+++ b/codejam_2008/Cargo.lock
@@ -43,6 +43,9 @@ dependencies = [
  "hungarian 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "primal 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "rust-algorithm-problems 0.1.0",
diff --git a/codejam_2008/Cargo.toml b/codejam_2008/Cargo.toml
index 0647923..166e19c 100644
--- a/codejam_2008/Cargo.toml
+++ b/codejam_2008/Cargo.toml
@@ -14,4 +14,7 @@ hungarian = "1.1.0"
 bit-vec = "*"
 bit-set = "*"
 primal = "*"
-rand = "*"
\ No newline at end of file
+rand = "*"
+num-integer="*"
+num-bigint ="*"
+num-traits = "*"
\ No newline at end of file
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 6b20e4e..89dd746 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -1,5 +1,3 @@
-//#![allow(non_snake_case)]
-
 mod y2008beta;
 mod y2008practice;
 mod y2008qual;
@@ -11,9 +9,6 @@ mod y2008round3;
 
 extern crate codejam;
 
-/*#[macro_use]
-extern crate itertools;*/
-
 #[macro_use]
 extern crate log;
 
@@ -90,7 +85,7 @@ pub fn run_y2008_round3()
 fn main()
 {
     init_log();
-    y2008round3::c::solve_all_cases();
+    y2008round3::d::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round3/D-large-practice.in b/codejam_2008/src/y2008round3/D-large-practice.in
new file mode 100644
index 0000000..defefb9
--- /dev/null
+++ b/codejam_2008/src/y2008round3/D-large-practice.in
@@ -0,0 +1,521 @@
+100
+1 1 0
+3 3 0
+20014 10009 0
+120110 90075 0
+120111 90077 0
+120123 90101 0
+12368644 24707278 0
+15804649 26343853 0
+23469128 46934184 0
+42272377 84544756 0
+76535697 98610620 0
+84031780 79540528 0
+84827334 87297072 0
+87841294 43920646 0
+88871082 44448920 0
+88871083 44448919 0
+89198687 99182943 0
+99999999 50000000 0
+99999999 99999997 0
+99999999 99999998 0
+100000000 100000000 0
+100000000 100000000 0
+100000000 100000000 0
+100000000 100000000 0
+4 4 1
+2 1
+4 4 1
+3 2
+36589761 65599538 1
+31376461 55651381
+49743740 58596897 1
+18303235 23944588
+61978943 50396445 1
+19520820 14193155
+97343774 99108324 1
+35183116 43693000
+99999999 50000000 1
+224462 112233
+99999999 50000000 1
+224465 112233
+99999999 99999997 1
+1427 245689
+100000000 100000000 1
+67963965 41186366
+100000000 100000000 1
+29230466 49357362
+7 10 2
+1 2
+7 1
+36576553 33228448 2
+23624692 17471782
+3870889 6785659
+58881558 87459728 2
+21031840 34622557
+26644252 35200246
+67728744 36722351 2
+35986964 20286996
+19201453 9687877
+70878190 90258289 2
+7638711 5920061
+52288797 79075457
+100000000 100000000 2
+70842055 50152393
+98792123 98112276
+100000000 100000000 2
+30218080 41100460
+29073152 38610984
+23031204 40416041 3
+4969430 8986941
+3240419 3861270
+19962940 36604414
+27601718 25773621 3
+15129418 17264179
+13789412 7776723
+8964355 8209648
+48052874 84377715 3
+32562831 55442438
+4036787 6863487
+19201907 37608345
+87297072 84827334 3
+1687 1722
+2533 2923
+4112222 4334
+88633496 82110939 3
+74333013 73130606
+58541344 49993087
+40817007 43493507
+100000000 100000000 3
+29501930 27738567
+64524100 52893451
+36312605 23962272
+100000000 100000000 3
+75692638 86507314
+44095714 48520633
+49359905 41209779
+43645956 25090268 4
+40103034 20549786
+22425877 14212984
+3231971 2650155
+23276813 13435221
+57172383 34179368 4
+13592452 10866853
+41709683 25072497
+34091992 18325834
+21590007 14840267
+58939239 79926962 4
+28255565 36535194
+51497377 67322260
+48931736 62290476
+23383627 30097072
+85433461 88506013 4
+5943435 11161019
+59279105 72821793
+28614410 29686371
+30409578 48385550
+100000000 100000000 4
+38601603 55814183
+5396358 4894379
+63207291 41537012
+35966975 20780427
+100000000 100000000 4
+31275299 36324009
+85803482 81395319
+87657009 89837933
+59148423 72729266
+36518280 32377943 5
+21154103 11422797
+33215969 28222941
+15522171 9717992
+10021006 15046972
+21517865 11907465
+57593925 77246273 5
+31900895 45014511
+27861604 49388164
+38458348 53272531
+24347559 14229746
+20166644 39053619
+72974880 50573498 5
+37932931 32566054
+59977253 32357700
+31131938 24199692
+13693502 9251754
+45544329 24166169
+100000000 100000000 5
+82008411 64016822
+50152445 37897008
+44775327 47914061
+21698580 24746807
+56890209 69866030
+100000000 100000000 5
+74408521 74163823
+64553602 76155244
+44690764 50805427
+57936826 51092488
+13839307 22161619
+100000000 100000000 5
+57702182 70271952
+66534653 45349137
+12387354 16816463
+27481643 14795094
+30397356 56440574
+45972490 64900981 6
+14834159 28723437
+36400228 47327896
+18391781 36510510
+11566027 7086004
+7566515 9424863
+36132250 55536742
+60547930 30802126 6
+39708062 20253489
+58459647 29303054
+40533273 20368841
+18237328 9372991
+44806478 22810188
+2508038 1690752
+62613995 66321870 6
+47230519 43177663
+18616439 26135481
+15668485 21550579
+15762152 16385973
+45559771 40488520
+6187000 8155324
+100000000 100000000 6
+46442626 61265584
+40065563 31183050
+84809520 72214046
+11015299 21216043
+49526430 65159291
+52806857 27516807
+100000000 100000000 6
+61108076 64774728
+38525152 28725205
+56956302 61177475
+38348075 48954234
+74679914 77008488
+74455983 84467765
+100000000 100000000 6
+55576061 40092522
+39194450 56815467
+49555642 36856747
+74237053 50391265
+75634619 66051105
+43093995 50338421
+16 16 7
+9 8
+11 9
+14 15
+13 10
+12 11
+3 5
+5 6
+18748165 34894720 7
+7035149 12453126
+4521404 7446480
+5547424 10045330
+6713869 12588730
+3002079 5869709
+8424640 15145510
+6134386 10019773
+29000001 28000001 7
+6 8
+10 7
+12 11
+4 7
+9 5
+11 9
+8 9
+78368497 58987522 7
+13874903 22733175
+65884636 37990021
+22659244 15794941
+43882862 22163304
+31265265 34281902
+52082366 45080202
+36659022 25444460
+89416807 94418674 7
+10814421 19396673
+44343708 26310488
+67646463 62162375
+57494815 75512848
+50860993 57138742
+74531025 67074866
+50547311 54026730
+100000000 100000000 7
+99999991 99999991
+99999992 99999993
+99999993 99999995
+99999994 99999997
+99999992 99999990
+99999994 99999991
+99999996 99999992
+100000000 100000000 7
+53851718 55378311
+63287234 80248737
+63295518 77506280
+47534663 32812401
+71127271 45145954
+95070386 91873692
+56716162 53223487
+100000000 100000000 7
+43971842 71985921
+34943171 28245456
+44257280 46277730
+62593506 31696022
+45804946 27498073
+44568063 22878515
+28018945 30821074
+100000000 100000000 7
+25166812 16893661
+39812502 22802531
+47841884 59958039
+46466094 72645005
+67570794 61877945
+33111890 53564262
+40602747 24187109
+33879041 53011890 8
+29576277 47251499
+24607657 37371181
+11138424 19110350
+15930840 21701693
+17794517 22977060
+26880675 48082088
+30244985 51121503
+2229281 4091373
+58927523 34824363 8
+7207950 4989611
+29748155 19303620
+33592280 17794347
+49769191 27808555
+36829632 23087489
+48284007 26206385
+44017915 25067869
+45673045 26945083
+75649879 56675833 8
+13652114 16879137
+56674498 38588089
+64720248 50079461
+13539996 20207174
+29278135 15521791
+47139821 32789427
+16812146 16474875
+58527832 42233377
+100000000 100000000 8
+65904940 33081397
+49715201 33362130
+81876805 81521725
+24642235 27795328
+49485056 56454990
+90719514 88881962
+85139045 72150873
+17395421 22125003
+100000000 100000000 8
+28865494 41650051
+67427675 68161884
+47653108 39028966
+79121079 70120010
+69860015 51248004
+64824686 65347854
+84574780 86539753
+84650057 69410910
+100000000 100000000 8
+16479273 21276953
+88564388 93387219
+45803079 65609906
+91958367 90189569
+56372004 64253819
+18760942 28309069
+45821978 47578008
+51197266 36970261
+57565293 71946614 9
+39106376 47505045
+18673103 35326764
+34203561 38009522
+6236278 8978674
+28206841 56209018
+27185385 47671379
+30220519 23691331
+39986318 44664264
+33021228 23263991
+65348723 90146232 9
+45579274 71522929
+27588020 25087308
+46731282 56657399
+43852230 53334263
+48070460 55889325
+34996611 47043776
+48439461 69469076
+39714348 51933809
+14841053 16740213
+77724129 61087931 9
+21840961 29092006
+11516084 9081900
+53189445 29442764
+10369086 7268144
+38982350 19672644
+52540419 46729265
+12735675 10793465
+42183901 36119053
+31720700 27246684
+100000000 100000000 9
+68687475 76728410
+65181695 52868571
+31520252 27974607
+39290049 27752501
+65877467 66800970
+54441787 65584132
+44449524 43010414
+18939402 19314617
+33580541 62614971
+100000000 100000000 9
+61130819 62904768
+40426996 69790246
+72816535 78348754
+23801713 20639434
+39910614 47432153
+90858758 90941433
+15360967 25840318
+75878175 54096035
+90457225 87934198
+100000000 100000000 9
+6 11
+8 12
+10 13
+12 14
+11 12
+10 10
+9 8
+8 6
+7 4
+100000000 100000000 9
+56216057 41148507
+57324383 29967219
+60873256 55000681
+67579200 64171610
+39200384 51086859
+80700544 79693237
+26625849 15000593
+27173939 23517129
+28246545 41405468
+50849811 86184236 10
+19587049 34490965
+42076153 79261510
+13302044 24816846
+18860804 36477594
+30175821 56402753
+12905036 20701932
+31167837 51982208
+27242785 47875492
+40637599 72122857
+17731340 32862963
+75285024 60328796 10
+61432416 37701905
+59979973 37264819
+4540760 8921775
+12352096 18171307
+61877596 33583537
+53033191 47678194
+43181092 21975106
+45152553 40338635
+48615417 45582980
+53471509 47571223
+77280072 60423740 10
+48369106 39415396
+34229074 23617999
+71591038 55630204
+44711093 23134317
+53065979 42492804
+56250326 42755409
+49088734 37695877
+19213546 26867497
+30045088 21938008
+23378600 33415329
+99999997 99999997 10
+10 19
+11 18
+12 17
+13 16
+14 15
+15 14
+16 13
+17 12
+18 11
+19 10
+99999997 99999997 10
+100003 1003
+99999981 99999989
+99999982 99999988
+99999983 99999987
+99999984 99999986
+99999985 99999985
+99999986 99999984
+99999987 99999983
+99999988 99999982
+99999989 99999981
+100000000 100000000 10
+63883794 52592123
+8881298 6176310
+51552062 32778312
+65538662 47476911
+16148101 12781537
+67328314 73466101
+31952651 16459845
+59194877 51930615
+80424443 74808894
+19622027 27899322
+100000000 100000000 10
+10 43
+46482 381818
+29481525 64107581
+89674280 99768342
+65569493 96905544
+40587483 70293743
+12377793 10297536
+89068213 88166790
+52724116 50088497
+38179967 38762563
+100000000 100000000 10
+70000001 30000006
+73333330 26666671
+76666661 23333334
+79999994 20000001
+83333333 16666674
+86666665 13333339
+89999995 10000006
+93333330 6666671
+96666661 3333340
+99999996 5
+100000000 100000000 10
+10000002 10000004
+20000002 20000002
+30000004 30000004
+39999999 40000001
+50000001 50000000
+59999997 59999996
+69999996 69999998
+79999995 79999997
+89999997 89999996
+99999992 99999993
+100000000 100000000 10
+753202 930571
+30969001 16321480
+71004853 46022017
+41422073 58358937
+56202209 32496858
+73988130 72977873
+45257675 59113635
+74224842 67430627
+60295509 38864564
+70333301 68482440
+100000000 100000000 10
+39130403 31681002
+57396722 58351638
+73810313 78694128
+35007980 25559841
+80660290 64751794
+32238200 58987659
+48790853 30034041
+33526185 57965450
+43767310 64125496
+41737495 45733999
diff --git a/codejam_2008/src/y2008round3/D-small-practice.in b/codejam_2008/src/y2008round3/D-small-practice.in
new file mode 100644
index 0000000..1152838
--- /dev/null
+++ b/codejam_2008/src/y2008round3/D-small-practice.in
@@ -0,0 +1,529 @@
+100
+1 1 0
+3 3 0
+40 37 0
+46 94 0
+50 99 0
+52 58 0
+58 49 0
+59 60 0
+64 55 0
+69 47 0
+70 34 0
+72 65 0
+80 90 0
+86 85 0
+95 93 0
+99 97 0
+100 100 0
+100 100 0
+100 100 0
+100 100 0
+4 4 1
+3 2
+4 4 1
+2 1
+40 79 1
+20 36
+50 99 1
+20 39
+60 44 1
+28 22
+61 76 1
+15 20
+64 79 1
+36 38
+73 70 1
+39 26
+99 97 1
+13 24
+100 100 1
+47 39
+100 100 1
+76 79
+100 100 1
+82 91
+7 10 2
+1 2
+7 1
+29 24 2
+11 9
+7 10
+42 41 2
+21 26
+7 7
+61 52 2
+26 21
+34 28
+76 82 2
+44 33
+17 27
+100 100 2
+57 56
+38 54
+100 100 2
+57 68
+58 34
+100 100 2
+25 16
+11 9
+52 61 3
+20 27
+25 43
+30 41
+73 55 3
+53 36
+52 31
+56 33
+77 63 3
+27 23
+51 32
+63 47
+77 78 3
+27 32
+42 53
+19 31
+85 86 3
+16 17
+25 29
+41 43
+100 100 3
+48 59
+68 75
+86 81
+100 100 3
+54 74
+50 39
+40 40
+100 100 3
+30 53
+63 71
+56 66
+20 21 4
+13 16
+16 16
+11 12
+14 15
+42 35 4
+27 17
+14 15
+31 19
+29 24
+43 31 4
+6 11
+20 18
+8 12
+26 21
+81 74 4
+53 33
+31 19
+17 12
+52 34
+100 100 4
+95 96
+37 22
+12 23
+9 14
+100 100 4
+28 37
+58 55
+10 19
+80 63
+100 100 4
+65 54
+52 67
+32 39
+24 38
+46 43 5
+16 13
+23 24
+30 23
+33 29
+7 7
+56 72 5
+17 12
+15 11
+33 41
+31 43
+31 25
+65 48 5
+39 26
+25 25
+43 28
+12 11
+48 35
+89 93 5
+81 83
+24 26
+50 42
+56 75
+57 56
+100 100 5
+70 49
+13 22
+79 64
+81 80
+30 47
+100 100 5
+10 10
+36 44
+66 59
+84 89
+13 16
+100 100 5
+67 40
+70 82
+62 57
+8 9
+43 52
+35 42 6
+17 12
+7 7
+14 24
+23 33
+13 19
+8 9
+58 79 6
+44 63
+38 66
+18 35
+22 28
+31 34
+38 45
+67 70 6
+63 65
+44 30
+38 48
+42 53
+34 28
+18 32
+78 74 6
+52 46
+60 53
+62 51
+41 54
+39 41
+14 27
+100 100 6
+71 81
+38 63
+62 42
+81 71
+34 49
+68 54
+100 100 6
+65 66
+21 26
+69 56
+51 50
+57 50
+66 62
+16 16 7
+9 8
+11 9
+14 15
+13 10
+12 11
+3 5
+5 6
+43 31 7
+26 21
+10 13
+35 24
+34 22
+8 12
+23 18
+4 7
+50 60 7
+26 33
+16 28
+20 36
+17 21
+7 7
+22 25
+19 31
+62 63 7
+47 54
+24 35
+45 38
+51 50
+18 20
+33 44
+11 15
+64 46 7
+51 35
+50 30
+43 31
+45 35
+61 43
+30 23
+49 31
+100 100 7
+91 91
+92 93
+93 95
+94 97
+92 90
+94 91
+96 92
+100 100 7
+32 54
+43 28
+48 71
+53 33
+38 51
+61 58
+35 24
+100 100 7
+22 25
+49 31
+47 45
+67 67
+35 51
+17 21
+80 66
+54 41 8
+45 26
+13 19
+21 23
+11 18
+13 10
+47 33
+51 38
+18 20
+62 78 8
+13 16
+11 9
+20 21
+55 70
+54 65
+47 66
+26 36
+24 20
+63 41 8
+25 16
+15 11
+35 21
+49 28
+47 30
+4 7
+15 14
+18 14
+88 91 8
+47 45
+27 26
+29 33
+50 39
+43 55
+41 24
+66 68
+42 53
+100 100 8
+88 91
+69 62
+60 53
+41 24
+8 9
+72 77
+77 78
+49 40
+100 100 8
+32 54
+84 89
+73 76
+32 63
+66 44
+42 35
+70 58
+71 63
+28 28 9
+16 13
+7 7
+12 17
+5 6
+20 15
+17 12
+17 21
+16 19
+21 23
+51 38 9
+18 14
+24 23
+21 17
+13 16
+32 27
+48 35
+16 16
+12 14
+6 8
+67 73 9
+33 44
+41 42
+62 69
+27 35
+23 30
+40 55
+24 47
+7 10
+58 61
+70 76 9
+21 14
+50 45
+59 63
+51 56
+21 32
+40 43
+19 25
+23 15
+43 55
+100 100 9
+6 11
+8 12
+10 13
+12 14
+11 12
+10 10
+9 8
+8 6
+7 4
+100 100 9
+46 67
+34 49
+36 47
+54 65
+54 44
+28 37
+78 65
+29 30
+66 56
+100 100 9
+56 54
+63 80
+46 67
+47 66
+59 54
+46 46
+36 47
+42 59
+67 73
+44 54 10
+14 18
+21 17
+3 5
+21 38
+34 40
+31 46
+41 51
+13 22
+22 37
+23 21
+52 52 10
+31 28
+20 18
+31 34
+31 25
+8 15
+34 31
+15 11
+44 45
+34 40
+31 37
+72 59 10
+6 8
+25 22
+55 31
+49 46
+46 28
+28 25
+26 24
+52 37
+25 28
+19 19
+97 97 10
+13 13
+81 89
+82 88
+83 87
+84 86
+85 85
+86 84
+87 83
+88 82
+89 81
+97 97 10
+10 19
+11 18
+12 17
+13 16
+14 15
+15 14
+16 13
+17 12
+18 11
+19 10
+100 100 10
+69 32
+70 31
+75 26
+78 26
+77 18
+81 17
+86 15
+88 13
+95 12
+94 4
+100 100 10
+20 27
+62 51
+32 54
+60 77
+56 69
+35 60
+30 41
+38 63
+84 83
+66 50
+100 100 10
+94 88
+38 63
+36 29
+55 34
+40 52
+21 26
+32 48
+61 67
+57 38
+25 19
+100 100 10
+12 14
+24 23
+29 30
+41 39
+46 46
+57 59
+66 68
+77 75
+87 86
+91 91
+100 100 10
+45 26
+80 75
+46 61
+45 47
+17 21
+43 46
+78 80
+18 29
+26 24
+54 62
+100 100 10
+2 9
+2 33
+8 66
+80 93
+60 95
+40 73
+13 14
+85 84
+50 49
+42 42
diff --git a/codejam_2008/src/y2008round3/D-small-practice.out b/codejam_2008/src/y2008round3/D-small-practice.out
new file mode 100644
index 0000000..d432a6f
--- /dev/null
+++ b/codejam_2008/src/y2008round3/D-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 0
+Case #3: 4285
+Case #4: 5382
+Case #5: 1
+Case #6: 7760
+Case #7: 5090
+Case #8: 1875
+Case #9: 4385
+Case #10: 9290
+Case #11: 4568
+Case #12: 7463
+Case #13: 6565
+Case #14: 0
+Case #15: 9464
+Case #16: 0
+Case #17: 5245
+Case #18: 5245
+Case #19: 5245
+Case #20: 5245
+Case #21: -2
+Case #22: 2
+Case #23: -18
+Case #24: -2
+Case #25: -7428
+Case #26: -626
+Case #27: -8029
+Case #28: -7168
+Case #29: 0
+Case #30: -8171
+Case #31: -8869
+Case #32: -5245
+Case #33: -3568
+Case #34: 81
+Case #35: 391
+Case #36: 12454
+Case #37: 1037
+Case #38: 18774
+Case #39: 4424
+Case #40: 8095
+Case #41: -1848
+Case #42: -5370
+Case #43: -12598
+Case #44: -12285
+Case #45: 0
+Case #46: -15406
+Case #47: -8281
+Case #48: -7458
+Case #49: 42
+Case #50: 184
+Case #51: 3022
+Case #52: 1168
+Case #53: 4525
+Case #54: 15325
+Case #55: 10753
+Case #56: -2042
+Case #57: -2049
+Case #58: -281
+Case #59: -10983
+Case #60: -23267
+Case #61: -11318
+Case #62: -5693
+Case #63: 79
+Case #64: 8164
+Case #65: 2988
+Case #66: 5364
+Case #67: 6555
+Case #68: 9163
+Case #69: -29
+Case #70: -852
+Case #71: -8597
+Case #72: -537
+Case #73: -2666
+Case #74: -4061
+Case #75: -10013
+Case #76: -9317
+Case #77: 4168
+Case #78: 2474
+Case #79: 624
+Case #80: 6715
+Case #81: 6384
+Case #82: 4883
+Case #83: -55
+Case #84: -161
+Case #85: -1107
+Case #86: -5190
+Case #87: -7231
+Case #88: -6955
+Case #89: -9180
+Case #90: 1396
+Case #91: 104
+Case #92: 1573
+Case #93: 9112
+Case #94: 1912
+Case #95: 14757
+Case #96: 1412
+Case #97: 7506
+Case #98: 246
+Case #99: 4272
+Case #100: 8469
diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index c8874d9..7e1eb63 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -1,6 +1,9 @@
-use bit_vec::BitVec;
+use codejam::util::bitvec64::BitVec64;
 use codejam::util::codejam::run_cases;
 use codejam::util::vector_2d::Vector2d;
+use num_bigint::BigUint;
+use num_integer::binomial;
+use num_traits::identities::Zero;
 use std::io::Write;
 use std::usize;
 
@@ -16,16 +19,14 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (n_rows, n_cols) = reader.read_tuple_2();
+                let (n_rows, n_cols, n_rocks) = reader.read_tuple_3();
 
-                let mut chairs = BitVec::from_elem(n_cols * n_rows, false);
-
-                for r in 0..n_rows {
-                    for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
-                        let idx = r * n_cols + c;
-                        chairs.set(idx, ch == '.');
-                    }
-                }
+                let rocks: Vec<Vector2d<isize>> = (0..n_rocks)
+                    .map(|_| {
+                        let (r, c):(isize,isize) = reader.read_tuple_2();
+                        Vector2d::with_val(r - 1, c - 1)
+                    })
+                    .collect();
 
                 if case_no != 3 {
                     //continue;
@@ -36,7 +37,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(&chairs, n_rows, n_cols)
+                    solve(rocks.as_slice(), n_rows, n_cols)
                 )
                 .unwrap();
             }
@@ -44,12 +45,74 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
+fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
+{
+    let target = change_basis(&Vector2d::with_val(n_rows - 1, n_cols - 1));
+
+    if target.is_none() {
+        return 0;
+    }
+
+    let target = target.unwrap();
+    let start = Vector2d::with_val(0, 0);
+
+    let mut rocks = Vec::new();
+
+    for r in rocks_orig.iter() {
+        if let Some(rock) = change_basis(r) {
+            rocks.push(rock);
+        }
+    }
+
+    let mut ans = 0;
+    for subset in 0..1 << rocks.len() {
+        let bs = BitVec64::with_val(subset);
+        let sign = if bs.pop_count() % 2 == 0 { 1 } else { -1 };
+
+        let mut rocks_subset: Vec<Vector2d<usize>> = rocks
+            .iter()
+            .enumerate()
+            .filter(|(idx, _)| bs.get(*idx))
+            .map(|(_, rock)| *rock)
+            .collect();
+
+        rocks_subset.push(start);
+        rocks_subset.push(target);
+
+        rocks_subset.sort_by(|a, b| a.c().cmp(&b.c()).then_with(|| b.r().cmp(&a.r())));
+
+        let ways:usize = rocks_subset.windows(2).map(|win| {
+            if win[0].r() > win[1].r() {
+                return 0;
+            }
+            let m = win[1].r() - win[0].r();
+            let n = win[1].c() - win[0].c();
+            n_choose_k_mod(m+n,n,10007)
+        }).sum();
+
+        ans = sign * ways as isize;
+    }
+    ans
+}
+
+fn n_choose_k_mod(n: usize, k: usize, p: usize) -> usize
 {
-    3
+    let mut n_i = BigUint::from(n);
+    let mut k_i = BigUint::from(k);
+
+    let mut product = BigUint::from(1usize);
+    let p = BigUint::from(p);
+    while k_i > BigUint::zero() {
+        product *= binomial(&n_i % &p, &k_i % &p);
+
+        n_i /= &p;
+        k_i /= &p;
+    }
+
+    biguint_to_usize(&(product % p))
 }
 
-fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<isize>>
+fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<usize>>
 {
     /*
     https://en.wikipedia.org/wiki/Change_of_basis
@@ -72,14 +135,66 @@ fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<isize>>
     if r % 3 != 0 || c % 3 != 0 {
         None
     } else {
-        Some(Vector2d::with_val(r / 3, c / 3))
+        Some(Vector2d::with_val(r as usize / 3, c as usize / 3))
     }
 }
 
+fn biguint_to_usize(bu: &BigUint) -> usize
+{
+    let mut ans = 0usize;
+
+    for (i, n) in bu.to_radix_le(256).into_iter().enumerate() {
+        ans |= (n as usize) << (i * 8);
+    }
+
+    ans
+}
+
 #[cfg(test)]
 mod test_endless_knight
 {
     use super::*;
+    use num_integer::binomial;
+
+    #[test]
+    fn test_biguint_to_usize()
+    {
+        let n = 987_654_123_456_987;
+        let bu = BigUint::from(n);
+        assert_eq!(n, biguint_to_usize(&bu));
+    }
+
+    #[test]
+    fn test_lucas_theorum()
+    {
+        let n = 38;
+        let k = 8;
+        let n_choose_k = binomial(n, k);
+
+        debug!("{} choose {} = {}", n, k, n_choose_k);
+
+        for p in [7, 11, 17, 23, 47, 127].iter() {
+            let mut n_i = n;
+            let mut k_i = k;
+
+            let mut product = 1;
+            while k_i > 0 {
+                product *= binomial(n_i % p, k_i % p);
+
+                n_i /= p;
+                k_i /= p;
+            }
+
+            debug!(
+                "Product = {} n_choose_k % {} = {}",
+                product,
+                p,
+                n_choose_k % p
+            );
+            assert_eq!(product % p, n_choose_k % p);
+            assert_eq!(product % p, n_choose_k_mod(n, k, *p));
+        }
+    }
 
     //cargo test test_edge_iterator -- --nocapture
     #[test]
@@ -100,17 +215,14 @@ mod test_endless_knight
             change_basis(&Vector2d::with_val(3, 3))
         );
 
-        assert_eq!(
-            None,
-            change_basis(&Vector2d::with_val(3, 1))
-        );
+        assert_eq!(None, change_basis(&Vector2d::with_val(3, 1)));
 
         let vec1 = Vector2d::with_val(2, 1);
         let vec2 = Vector2d::with_val(1, 2);
-        for r in 0..100 {
-            for c in 0..100 {
+        for r in 0..100usize {
+            for c in 0..100usize {
                 let v = vec1 * r + vec2 * c;
-                assert_eq!(Some(Vector2d::with_val(r, c)), change_basis(&v));
+                assert_eq!(Some(Vector2d::with_val(r, c)), change_basis(&v.convert()));
                 // println!("v is {:?}", v);
             }
         }

From 21672537a5933a71f3dcbbc94ee357b47f31909b Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 02:04:14 -0300
Subject: [PATCH 091/122] d

---
 codejam_2008/src/y2008round3/d.rs | 40 ++++++++++++++++++++-----------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 7e1eb63..3689b18 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -13,7 +13,10 @@ Change of base
 pub fn solve_all_cases()
 {
     run_cases(
-        &["D-small-practice", "D-large-practice"],
+        &[
+            "D-small-practice",
+            //    "D-large-practice"
+        ],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
@@ -23,13 +26,13 @@ pub fn solve_all_cases()
 
                 let rocks: Vec<Vector2d<isize>> = (0..n_rocks)
                     .map(|_| {
-                        let (r, c):(isize,isize) = reader.read_tuple_2();
+                        let (r, c): (isize, isize) = reader.read_tuple_2();
                         Vector2d::with_val(r - 1, c - 1)
                     })
                     .collect();
 
-                if case_no != 3 {
-                    //continue;
+                if case_no != 4 {
+                    continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -49,6 +52,8 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
 {
     let target = change_basis(&Vector2d::with_val(n_rows - 1, n_cols - 1));
 
+    debug!("N rows {} cols {} target {:?}", n_rows, n_cols, target);
+
     if target.is_none() {
         return 0;
     }
@@ -60,6 +65,10 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
 
     for r in rocks_orig.iter() {
         if let Some(rock) = change_basis(r) {
+            //exceeds destination
+            if rock.r() >= n_rows as usize || rock.c() >= n_cols as usize {
+                continue;
+            }
             rocks.push(rock);
         }
     }
@@ -81,18 +90,21 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
 
         rocks_subset.sort_by(|a, b| a.c().cmp(&b.c()).then_with(|| b.r().cmp(&a.r())));
 
-        let ways:usize = rocks_subset.windows(2).map(|win| {
-            if win[0].r() > win[1].r() {
-                return 0;
-            }
-            let m = win[1].r() - win[0].r();
-            let n = win[1].c() - win[0].c();
-            n_choose_k_mod(m+n,n,10007)
-        }).sum();
+        let ways: usize = rocks_subset
+            .windows(2)
+            .map(|win| {
+                if win[0].r() > win[1].r() {
+                    return 0;
+                }
+                let m = win[1].r() - win[0].r();
+                let n = win[1].c() - win[0].c();
+                n_choose_k_mod(m + n, n, 10007)
+            })
+            .fold(1, |acc, w| (acc * w) % 10007);
 
-        ans = sign * ways as isize;
+        ans += 10007 + sign * ways as isize;
     }
-    ans
+    ans % 10007
 }
 
 fn n_choose_k_mod(n: usize, k: usize, p: usize) -> usize

From 97138480a5593da5791ac27abc5e7bb7768056f5 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 02:06:21 -0300
Subject: [PATCH 092/122] d

---
 .../src/y2008round3/D-small-practice.out      | 158 +++++++++---------
 codejam_2008/src/y2008round3/d.rs             |   4 +-
 2 files changed, 81 insertions(+), 81 deletions(-)

diff --git a/codejam_2008/src/y2008round3/D-small-practice.out b/codejam_2008/src/y2008round3/D-small-practice.out
index d432a6f..c373159 100644
--- a/codejam_2008/src/y2008round3/D-small-practice.out
+++ b/codejam_2008/src/y2008round3/D-small-practice.out
@@ -1,14 +1,14 @@
 Case #1: 1
 Case #2: 0
 Case #3: 4285
-Case #4: 5382
+Case #4: 0
 Case #5: 1
 Case #6: 7760
 Case #7: 5090
 Case #8: 1875
 Case #9: 4385
 Case #10: 9290
-Case #11: 4568
+Case #11: 0
 Case #12: 7463
 Case #13: 6565
 Case #14: 0
@@ -18,83 +18,83 @@ Case #17: 5245
 Case #18: 5245
 Case #19: 5245
 Case #20: 5245
-Case #21: -2
+Case #21: 2
 Case #22: 2
-Case #23: -18
-Case #24: -2
-Case #25: -7428
-Case #26: -626
-Case #27: -8029
-Case #28: -7168
+Case #23: 1
+Case #24: 0
+Case #25: 7841
+Case #26: 1242
+Case #27: 6686
+Case #28: 4066
 Case #29: 0
-Case #30: -8171
-Case #31: -8869
-Case #32: -5245
-Case #33: -3568
-Case #34: 81
-Case #35: 391
-Case #36: 12454
-Case #37: 1037
-Case #38: 18774
-Case #39: 4424
-Case #40: 8095
-Case #41: -1848
-Case #42: -5370
-Case #43: -12598
-Case #44: -12285
+Case #30: 8853
+Case #31: 9456
+Case #32: 5245
+Case #33: 5
+Case #34: 7096
+Case #35: 4929
+Case #36: 8008
+Case #37: 5781
+Case #38: 9242
+Case #39: 7112
+Case #40: 9875
+Case #41: 8037
+Case #42: 7334
+Case #43: 5130
+Case #44: 9788
 Case #45: 0
-Case #46: -15406
-Case #47: -8281
-Case #48: -7458
-Case #49: 42
-Case #50: 184
-Case #51: 3022
-Case #52: 1168
-Case #53: 4525
-Case #54: 15325
-Case #55: 10753
-Case #56: -2042
-Case #57: -2049
-Case #58: -281
-Case #59: -10983
-Case #60: -23267
-Case #61: -11318
-Case #62: -5693
-Case #63: 79
-Case #64: 8164
-Case #65: 2988
-Case #66: 5364
-Case #67: 6555
-Case #68: 9163
-Case #69: -29
-Case #70: -852
-Case #71: -8597
-Case #72: -537
-Case #73: -2666
-Case #74: -4061
-Case #75: -10013
-Case #76: -9317
-Case #77: 4168
-Case #78: 2474
-Case #79: 624
-Case #80: 6715
-Case #81: 6384
-Case #82: 4883
-Case #83: -55
-Case #84: -161
-Case #85: -1107
-Case #86: -5190
-Case #87: -7231
-Case #88: -6955
-Case #89: -9180
-Case #90: 1396
-Case #91: 104
-Case #92: 1573
-Case #93: 9112
-Case #94: 1912
-Case #95: 14757
-Case #96: 1412
-Case #97: 7506
-Case #98: 246
-Case #99: 4272
-Case #100: 8469
+Case #46: 4076
+Case #47: 9099
+Case #48: 7299
+Case #49: 43
+Case #50: 1899
+Case #51: 7875
+Case #52: 8332
+Case #53: 9851
+Case #54: 3938
+Case #55: 4338
+Case #56: 9380
+Case #57: 4702
+Case #58: 5623
+Case #59: 5562
+Case #60: 958
+Case #61: 1524
+Case #62: 1455
+Case #63: 9072
+Case #64: 4873
+Case #65: 3317
+Case #66: 1184
+Case #67: 124
+Case #68: 3676
+Case #69: 9968
+Case #70: 3658
+Case #71: 1234
+Case #72: 5983
+Case #73: 9552
+Case #74: 7166
+Case #75: 7714
+Case #76: 512
+Case #77: 688
+Case #78: 8860
+Case #79: 1226
+Case #80: 4848
+Case #81: 262
+Case #82: 3425
+Case #83: 2396
+Case #84: 9622
+Case #85: 9462
+Case #86: 9935
+Case #87: 5419
+Case #88: 2544
+Case #89: 3040
+Case #90: 1633
+Case #91: 464
+Case #92: 3887
+Case #93: 5837
+Case #94: 1903
+Case #95: 5245
+Case #96: 4438
+Case #97: 1187
+Case #98: 3792
+Case #99: 751
+Case #100: 5245
diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 3689b18..e90daab 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -32,7 +32,7 @@ pub fn solve_all_cases()
                     .collect();
 
                 if case_no != 4 {
-                    continue;
+                    //continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -144,7 +144,7 @@ fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<usize>>
     let r = 2 * rc.r() - rc.c();
     let c = 2 * rc.c() - rc.r();
 
-    if r % 3 != 0 || c % 3 != 0 {
+    if r % 3 != 0 || c % 3 != 0 || r < 0 || c < 0 {
         None
     } else {
         Some(Vector2d::with_val(r as usize / 3, c as usize / 3))

From 712d7eb3ba3cf7faa857ce1b2a11e3cdca5f26ec Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 02:13:49 -0300
Subject: [PATCH 093/122] d

---
 .../src/y2008round3/D-large-practice.out      | 58 +++++++++++++++++++
 .../src/y2008round3/D-small-practice.out      | 14 ++---
 codejam_2008/src/y2008round3/d.rs             | 12 ++--
 3 files changed, 73 insertions(+), 11 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/D-large-practice.out

diff --git a/codejam_2008/src/y2008round3/D-large-practice.out b/codejam_2008/src/y2008round3/D-large-practice.out
new file mode 100644
index 0000000..302ae61
--- /dev/null
+++ b/codejam_2008/src/y2008round3/D-large-practice.out
@@ -0,0 +1,58 @@
+Case #1: 1
+Case #2: 0
+Case #3: 0
+Case #4: 0
+Case #5: 21
+Case #6: 9916
+Case #7: 0
+Case #8: 5488
+Case #9: 0
+Case #10: 0
+Case #11: 4470
+Case #12: 0
+Case #13: 0
+Case #14: 0
+Case #15: 8920
+Case #16: 915
+Case #17: 7607
+Case #18: 0
+Case #19: 0
+Case #20: 7002
+Case #21: 3997
+Case #22: 3997
+Case #23: 3997
+Case #24: 3997
+Case #25: 2
+Case #26: -2
+Case #27: -6347
+Case #28: -1096
+Case #29: 0
+Case #30: -8967
+Case #31: -2154
+Case #32: 0
+Case #33: 0
+Case #34: -8057
+Case #35: -5715
+Case #36: -3568
+Case #37: 11830
+Case #38: 439
+Case #39: 3245
+Case #40: 0
+Case #41: 2371
+Case #42: 0
+Case #43: -2507
+Case #44: -9089
+Case #45: -12303
+Case #46: 0
+Case #47: -2884
+Case #48: -14274
+Case #49: -12581
+Case #50: 13056
+Case #51: 0
+Case #52: 18500
+Case #53: 5271
+Case #54: 20900
+Case #55: 21174
+Case #56: -13175
+Case #57: -5239
+Case #58: 0
diff --git a/codejam_2008/src/y2008round3/D-small-practice.out b/codejam_2008/src/y2008round3/D-small-practice.out
index c373159..74745ca 100644
--- a/codejam_2008/src/y2008round3/D-small-practice.out
+++ b/codejam_2008/src/y2008round3/D-small-practice.out
@@ -18,7 +18,7 @@ Case #17: 5245
 Case #18: 5245
 Case #19: 5245
 Case #20: 5245
-Case #21: 2
+Case #21: 1
 Case #22: 2
 Case #23: 1
 Case #24: 0
@@ -29,7 +29,7 @@ Case #28: 4066
 Case #29: 0
 Case #30: 8853
 Case #31: 9456
-Case #32: 5245
+Case #32: 911
 Case #33: 5
 Case #34: 7096
 Case #35: 4929
@@ -66,12 +66,12 @@ Case #65: 3317
 Case #66: 1184
 Case #67: 124
 Case #68: 3676
-Case #69: 9968
+Case #69: 9975
 Case #70: 3658
 Case #71: 1234
 Case #72: 5983
 Case #73: 9552
-Case #74: 7166
+Case #74: 3111
 Case #75: 7714
 Case #76: 512
 Case #77: 688
@@ -84,14 +84,14 @@ Case #83: 2396
 Case #84: 9622
 Case #85: 9462
 Case #86: 9935
-Case #87: 5419
+Case #87: 1364
 Case #88: 2544
 Case #89: 3040
 Case #90: 1633
 Case #91: 464
 Case #92: 3887
-Case #93: 5837
-Case #94: 1903
+Case #93: 0
+Case #94: 0
 Case #95: 5245
 Case #96: 4438
 Case #97: 1187
diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index e90daab..2c6b140 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -31,8 +31,8 @@ pub fn solve_all_cases()
                     })
                     .collect();
 
-                if case_no != 4 {
-                    //continue;
+                if case_no != 21 {
+                   // continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -85,11 +85,14 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
             .map(|(_, rock)| *rock)
             .collect();
 
-        rocks_subset.push(start);
-        rocks_subset.push(target);
+        //rocks_subset.push(start);
+        //rocks_subset.push(target);
 
         rocks_subset.sort_by(|a, b| a.c().cmp(&b.c()).then_with(|| b.r().cmp(&a.r())));
 
+        rocks_subset.insert(0, start);
+        rocks_subset.push(target);
+
         let ways: usize = rocks_subset
             .windows(2)
             .map(|win| {
@@ -102,6 +105,7 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
             })
             .fold(1, |acc, w| (acc * w) % 10007);
 
+        debug!("Rocks {:?} ways {} sign {}", rocks_subset, ways, sign);
         ans += 10007 + sign * ways as isize;
     }
     ans % 10007

From c11a87a3190cbd401d6ccb4411112b19a45d0dfd Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 02:17:51 -0300
Subject: [PATCH 094/122] d

---
 .../src/y2008round3/D-small-practice.out      | 78 +++++++++----------
 codejam_2008/src/y2008round3/d.rs             |  9 ++-
 2 files changed, 44 insertions(+), 43 deletions(-)

diff --git a/codejam_2008/src/y2008round3/D-small-practice.out b/codejam_2008/src/y2008round3/D-small-practice.out
index 74745ca..1093062 100644
--- a/codejam_2008/src/y2008round3/D-small-practice.out
+++ b/codejam_2008/src/y2008round3/D-small-practice.out
@@ -37,64 +37,64 @@ Case #36: 8008
 Case #37: 5781
 Case #38: 9242
 Case #39: 7112
-Case #40: 9875
+Case #40: 4718
 Case #41: 8037
-Case #42: 7334
+Case #42: 7246
 Case #43: 5130
 Case #44: 9788
 Case #45: 0
 Case #46: 4076
 Case #47: 9099
-Case #48: 7299
-Case #49: 43
-Case #50: 1899
-Case #51: 7875
-Case #52: 8332
+Case #48: 5958
+Case #49: 211
+Case #50: 5175
+Case #51: 5086
+Case #52: 6097
 Case #53: 9851
-Case #54: 3938
+Case #54: 6691
 Case #55: 4338
-Case #56: 9380
-Case #57: 4702
-Case #58: 5623
+Case #56: 9800
+Case #57: 4257
+Case #58: 9813
 Case #59: 5562
 Case #60: 958
-Case #61: 1524
+Case #61: 8184
 Case #62: 1455
-Case #63: 9072
-Case #64: 4873
+Case #63: 9792
+Case #64: 5026
 Case #65: 3317
-Case #66: 1184
+Case #66: 6106
 Case #67: 124
-Case #68: 3676
-Case #69: 9975
-Case #70: 3658
-Case #71: 1234
+Case #68: 5431
+Case #69: 6
+Case #70: 897
+Case #71: 3317
 Case #72: 5983
-Case #73: 9552
-Case #74: 3111
-Case #75: 7714
-Case #76: 512
-Case #77: 688
-Case #78: 8860
-Case #79: 1226
+Case #73: 2242
+Case #74: 0
+Case #75: 9819
+Case #76: 4085
+Case #77: 4396
+Case #78: 155
+Case #79: 205
 Case #80: 4848
 Case #81: 262
-Case #82: 3425
-Case #83: 2396
-Case #84: 9622
-Case #85: 9462
-Case #86: 9935
-Case #87: 1364
-Case #88: 2544
+Case #82: 3461
+Case #83: 8792
+Case #84: 7955
+Case #85: 7624
+Case #86: 3444
+Case #87: 0
+Case #88: 6230
 Case #89: 3040
-Case #90: 1633
-Case #91: 464
-Case #92: 3887
+Case #90: 2377
+Case #91: 179
+Case #92: 5630
 Case #93: 0
 Case #94: 0
 Case #95: 5245
-Case #96: 4438
-Case #97: 1187
+Case #96: 1419
+Case #97: 966
 Case #98: 3792
-Case #99: 751
+Case #99: 4102
 Case #100: 5245
diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 2c6b140..7435709 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -15,7 +15,7 @@ pub fn solve_all_cases()
     run_cases(
         &[
             "D-small-practice",
-            //    "D-large-practice"
+                "D-large-practice"
         ],
         "y2008round3",
         |reader, buffer| {
@@ -31,8 +31,8 @@ pub fn solve_all_cases()
                     })
                     .collect();
 
-                if case_no != 21 {
-                   // continue;
+                if case_no != 40 {
+                    //continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -88,7 +88,8 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
         //rocks_subset.push(start);
         //rocks_subset.push(target);
 
-        rocks_subset.sort_by(|a, b| a.c().cmp(&b.c()).then_with(|| b.r().cmp(&a.r())));
+        rocks_subset.sort_by(|a, b|
+            a.c().cmp(&b.c()).then_with(|| a.r().cmp(&b.r())));
 
         rocks_subset.insert(0, start);
         rocks_subset.push(target);

From b353417e00dcd119b5f0be13572a7767b2f67bb9 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 02:33:35 -0300
Subject: [PATCH 095/122] d

---
 .../src/y2008round3/D-large-practice.out      | 100 +++++++++++++-----
 codejam_2008/src/y2008round3/d.rs             |  18 +++-
 2 files changed, 85 insertions(+), 33 deletions(-)

diff --git a/codejam_2008/src/y2008round3/D-large-practice.out b/codejam_2008/src/y2008round3/D-large-practice.out
index 302ae61..0dfa1e1 100644
--- a/codejam_2008/src/y2008round3/D-large-practice.out
+++ b/codejam_2008/src/y2008round3/D-large-practice.out
@@ -15,7 +15,7 @@ Case #14: 0
 Case #15: 8920
 Case #16: 915
 Case #17: 7607
-Case #18: 0
+Case #18: 1
 Case #19: 0
 Case #20: 7002
 Case #21: 3997
@@ -23,36 +23,78 @@ Case #22: 3997
 Case #23: 3997
 Case #24: 3997
 Case #25: 2
-Case #26: -2
-Case #27: -6347
-Case #28: -1096
+Case #26: 1
+Case #27: 1436
+Case #28: 5320
 Case #29: 0
-Case #30: -8967
-Case #31: -2154
+Case #30: 6809
+Case #31: 1
 Case #32: 0
 Case #33: 0
-Case #34: -8057
-Case #35: -5715
-Case #36: -3568
-Case #37: 11830
-Case #38: 439
-Case #39: 3245
-Case #40: 0
-Case #41: 2371
-Case #42: 0
-Case #43: -2507
-Case #44: -9089
-Case #45: -12303
+Case #34: 3997
+Case #35: 3997
+Case #36: 5
+Case #37: 2509
+Case #38: 3783
+Case #39: 0
+Case #40: 7218
+Case #41: 3997
+Case #42: 3997
+Case #43: 5103
+Case #44: 1535
+Case #45: 0
 Case #46: 0
-Case #47: -2884
-Case #48: -14274
-Case #49: -12581
-Case #50: 13056
-Case #51: 0
-Case #52: 18500
-Case #53: 5271
-Case #54: 20900
-Case #55: 21174
-Case #56: -13175
-Case #57: -5239
+Case #47: 0
+Case #48: 9119
+Case #49: 3997
+Case #50: 0
+Case #51: 2383
+Case #52: 8626
+Case #53: 4873
+Case #54: 2862
+Case #55: 2012
+Case #56: 6294
+Case #57: 611
 Case #58: 0
+Case #59: 9919
+Case #60: 3997
+Case #61: 3997
+Case #62: 8862
+Case #63: 9540
+Case #64: 10004
+Case #65: 850
+Case #66: 3997
+Case #67: 3997
+Case #68: 6
+Case #69: 5517
+Case #70: 4502
+Case #71: 9056
+Case #72: 0
+Case #73: 0
+Case #74: 3997
+Case #75: 430
+Case #76: 3997
+Case #77: 7785
+Case #78: 3577
+Case #79: 602
+Case #80: 3997
+Case #81: 3997
+Case #82: 2106
+Case #83: 2027
+Case #84: 286
+Case #85: 4869
+Case #86: 4863
+Case #87: 3997
+Case #88: 0
+Case #89: 6322
+Case #90: 2979
+Case #91: 8559
+Case #92: 4370
+Case #93: 0
+Case #94: 0
+Case #95: 1396
+Case #96: 3997
+Case #97: 3997
+Case #98: 1596
+Case #99: 3997
+Case #100: 4892
diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 7435709..1d40deb 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -6,6 +6,7 @@ use num_integer::binomial;
 use num_traits::identities::Zero;
 use std::io::Write;
 use std::usize;
+use std::collections::HashMap;
 
 /*
 Change of base
@@ -63,6 +64,8 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
 
     let mut rocks = Vec::new();
 
+    let mut memo : HashMap<(usize,usize), usize> = HashMap::new();
+
     for r in rocks_orig.iter() {
         if let Some(rock) = change_basis(r) {
             //exceeds destination
@@ -102,7 +105,7 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
                 }
                 let m = win[1].r() - win[0].r();
                 let n = win[1].c() - win[0].c();
-                n_choose_k_mod(m + n, n, 10007)
+                n_choose_k_mod(m + n, n, 10007, &mut memo)
             })
             .fold(1, |acc, w| (acc * w) % 10007);
 
@@ -112,8 +115,12 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
     ans % 10007
 }
 
-fn n_choose_k_mod(n: usize, k: usize, p: usize) -> usize
+fn n_choose_k_mod(n: usize, k: usize, p: usize, memo: &mut HashMap<(usize,usize), usize>) -> usize
 {
+    let key = (n,k);
+    if memo.contains_key(&key) {
+        return memo[&key];
+    }
     let mut n_i = BigUint::from(n);
     let mut k_i = BigUint::from(k);
 
@@ -121,12 +128,15 @@ fn n_choose_k_mod(n: usize, k: usize, p: usize) -> usize
     let p = BigUint::from(p);
     while k_i > BigUint::zero() {
         product *= binomial(&n_i % &p, &k_i % &p);
+        product %= &p;
 
         n_i /= &p;
         k_i /= &p;
     }
 
-    biguint_to_usize(&(product % p))
+    let ans = biguint_to_usize(&(product % p));
+    memo.insert(key,  ans);
+    ans
 }
 
 fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<usize>>
@@ -209,7 +219,7 @@ mod test_endless_knight
                 n_choose_k % p
             );
             assert_eq!(product % p, n_choose_k % p);
-            assert_eq!(product % p, n_choose_k_mod(n, k, *p));
+            //assert_eq!(product % p, n_choose_k_mod(n, k, *p));
         }
     }
 

From 8f0276e270406a7dfdabef3d6eabe7ecd19ae54c Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 13:19:47 -0300
Subject: [PATCH 096/122] mod inverse

---
 codejam_2008/src/y2008round3/d.rs | 157 ++++++++++++++++++++++--------
 1 file changed, 115 insertions(+), 42 deletions(-)

diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 1d40deb..599a11e 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -4,9 +4,9 @@ use codejam::util::vector_2d::Vector2d;
 use num_bigint::BigUint;
 use num_integer::binomial;
 use num_traits::identities::Zero;
+use std::collections::HashMap;
 use std::io::Write;
 use std::usize;
-use std::collections::HashMap;
 
 /*
 Change of base
@@ -14,10 +14,7 @@ Change of base
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "D-small-practice",
-                "D-large-practice"
-        ],
+        &["D-small-practice", "D-large-practice"],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
@@ -64,7 +61,7 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
 
     let mut rocks = Vec::new();
 
-    let mut memo : HashMap<(usize,usize), usize> = HashMap::new();
+    let mut memo: HashMap<(usize, usize), usize> = HashMap::new();
 
     for r in rocks_orig.iter() {
         if let Some(rock) = change_basis(r) {
@@ -76,66 +73,72 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
         }
     }
 
+    rocks.sort_by(|a, b| a.c().cmp(&b.c()).then_with(|| a.r().cmp(&b.r())));
+
+    rocks.insert(0, start);
+    rocks.push(target);
+
     let mut ans = 0;
-    for subset in 0..1 << rocks.len() {
+    //always include target
+    for subset in 0..1 << (rocks.len() - 2) {
         let bs = BitVec64::with_val(subset);
         let sign = if bs.pop_count() % 2 == 0 { 1 } else { -1 };
 
-        let mut rocks_subset: Vec<Vector2d<usize>> = rocks
-            .iter()
-            .enumerate()
-            .filter(|(idx, _)| bs.get(*idx))
-            .map(|(_, rock)| *rock)
-            .collect();
-
-        //rocks_subset.push(start);
-        //rocks_subset.push(target);
+        let mut last = 0;
 
-        rocks_subset.sort_by(|a, b|
-            a.c().cmp(&b.c()).then_with(|| a.r().cmp(&b.r())));
-
-        rocks_subset.insert(0, start);
-        rocks_subset.push(target);
-
-        let ways: usize = rocks_subset
-            .windows(2)
-            .map(|win| {
-                if win[0].r() > win[1].r() {
+        let ways: usize = (1..rocks.len())
+            .filter(|&idx| idx == 0 || idx == rocks.len() - 1 || bs.get(idx - 1))
+            .map(|cur| {
+                if rocks[last].r() > rocks[cur].r() {
+                    last = cur;
                     return 0;
                 }
-                let m = win[1].r() - win[0].r();
-                let n = win[1].c() - win[0].c();
+                let m = rocks[cur].r() - rocks[last].r();
+                let n = rocks[cur].c() - rocks[last].c();
+                last = cur;
                 n_choose_k_mod(m + n, n, 10007, &mut memo)
             })
             .fold(1, |acc, w| (acc * w) % 10007);
 
-        debug!("Rocks {:?} ways {} sign {}", rocks_subset, ways, sign);
+        // debug!("Rocks {:?} ways {} sign {}", rocks_subset, ways, sign);
         ans += 10007 + sign * ways as isize;
     }
     ans % 10007
 }
 
-fn n_choose_k_mod(n: usize, k: usize, p: usize, memo: &mut HashMap<(usize,usize), usize>) -> usize
+fn n_choose_k_mod(n: usize, k: usize, p: usize, memo: &mut HashMap<(usize, usize), usize>)
+    -> usize
 {
-    let key = (n,k);
+    let key = (n, k);
     if memo.contains_key(&key) {
         return memo[&key];
     }
-    let mut n_i = BigUint::from(n);
-    let mut k_i = BigUint::from(k);
+    let mut n = n;
+    let mut k = k;
+
+    let mut product = 1;
+    //let p = BigUint::from(p);
+    while k > 0 {
+        let key = (n % p, k % p);
+
+        if memo.contains_key(&key) {
+            product *= memo[&key];
+        } else {
+            let b = biguint_to_usize(
+                &(binomial(BigUint::from(key.0), BigUint::from(key.1)) % BigUint::from(p)),
+            );
+            product *= b;
+            memo.insert(key, b);
+        }
 
-    let mut product = BigUint::from(1usize);
-    let p = BigUint::from(p);
-    while k_i > BigUint::zero() {
-        product *= binomial(&n_i % &p, &k_i % &p);
-        product %= &p;
+        product %= p;
 
-        n_i /= &p;
-        k_i /= &p;
+        n /= p;
+        k /= p;
     }
 
-    let ans = biguint_to_usize(&(product % p));
-    memo.insert(key,  ans);
+    let ans = product;
+    memo.insert(key, ans);
     ans
 }
 
@@ -177,12 +180,82 @@ fn biguint_to_usize(bu: &BigUint) -> usize
     ans
 }
 
+//https://cp-algorithms.com/algebra/module-inverse.html
+fn compute_modular_inverse(m: usize) -> Vec<usize>
+{
+    //https://cp-algorithms.com/algebra/module-inverse.html
+    let mut inv = vec![0; m + 1];
+
+    inv[1] = 1;
+    for i in 2..m {
+        inv[i] = (m - (m / i) * inv[m % i] % m) % m;
+    }
+    inv
+}
+
+//https://cp-algorithms.com/algebra/module-inverse.html
+fn compute_modular_inverse_1(a: usize, modulus: usize) -> usize
+{
+    binpow(a, modulus - 2, modulus)
+}
+
+///Binary power a^b % modulus
+/// Modulus must be prime
+fn binpow(a: usize, b: usize, modulus: usize) -> usize
+{
+    let mut a = a % modulus;
+    let mut b = b;
+    let mut res = 1;
+    while b > 0 {
+        if b & 1 > 0 {
+            res = (res * a) % modulus;
+        }
+        a = (a * a) % modulus;
+        b >>= 1;
+    }
+    return res;
+}
+
 #[cfg(test)]
 mod test_endless_knight
 {
     use super::*;
     use num_integer::binomial;
 
+    #[test]
+    fn test_modular_inverse()
+    {
+        let prime = 23;
+        let inverse = compute_modular_inverse(prime);
+
+        let numerator = [2, 2, 2, 2, 3, 3, 5, 7, 11, 13, 17, 19, 23]
+            .iter()
+            .fold(1, |acc, n| acc * *n);
+
+        for i in 2..23 {
+            //just make sure numerator is divisible by i
+            assert_eq!(0, numerator % i, "{}", i);
+            let check = (numerator / i) % prime;
+
+            //check numerator / i === inverse[i] * numerator
+            assert_eq!(check, ((numerator % prime) * inverse[i]) % prime);
+
+            assert_eq!(inverse[i], compute_modular_inverse_1(i, prime));
+        }
+    }
+
+    #[test]
+    fn test_neg_mod()
+    {
+        assert_eq!(-7 % 3, -1);
+    }
+
+    #[test]
+    fn test_binomial()
+    {
+        assert_eq!(0, binomial(2, 15));
+    }
+
     #[test]
     fn test_biguint_to_usize()
     {

From 408637bf336e3f53e5a5d2893803a16f0ddff24d Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 14:28:46 -0300
Subject: [PATCH 097/122] mod

---
 codejam_2008/src/y2008round3/d.rs | 40 ++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 599a11e..4cb1610 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -9,7 +9,12 @@ use std::io::Write;
 use std::usize;
 
 /*
-Change of base
+Linear change of basis
+Modular multiplicative inverse
+binary exponentiation algorithm
+Fermat's little theorem
+Lattice walk
+
 */
 pub fn solve_all_cases()
 {
@@ -216,12 +221,45 @@ fn binpow(a: usize, b: usize, modulus: usize) -> usize
     return res;
 }
 
+//https://stackoverflow.com/questions/9727962/fast-way-to-calculate-n-mod-m-where-m-is-prime
+fn factorial_mod(n: usize, modulus: usize) -> usize
+{
+    let mut ans:isize = 1;
+    if n <= modulus / 2 {
+        //#calculate the factorial normally (right argument of range() is exclusive)
+        for i in 1..=n {
+            ans = (ans * i as isize) % modulus as isize;
+        }
+    } else {
+        //Fancypants method for large n
+        for i in n + 1..modulus {
+            ans = (ans * i as isize) % modulus as isize;
+        }
+        ans = compute_modular_inverse_1(ans as usize, modulus) as isize;
+        ans = -1 * ans + modulus as isize;
+    }
+    return (ans % modulus as isize) as usize;
+}
+
 #[cfg(test)]
 mod test_endless_knight
 {
     use super::*;
     use num_integer::binomial;
 
+
+    #[test]
+    fn test_factorial_mod()
+    {
+        let prime = 10007;
+        let pu = BigUint::from(prime);
+        let mut f = BigUint::from(1usize);
+
+        for i in 2..=23 {
+            f *= BigUint::from(i);
+            assert_eq!( biguint_to_usize( &(&f % &pu)), factorial_mod(i, prime));
+        }
+    }
     #[test]
     fn test_modular_inverse()
     {

From 6b8a797eb43d73c0a75bb36724d96f5cb666553a Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 16:23:54 -0300
Subject: [PATCH 098/122] big speed up

---
 codejam_2008/src/y2008round3/d.rs             | 172 ++++++++++++++----
 .../src/y2008round3/modular-inverse.png       | Bin 0 -> 49716 bytes
 2 files changed, 140 insertions(+), 32 deletions(-)
 create mode 100644 codejam_2008/src/y2008round3/modular-inverse.png

diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 4cb1610..353325c 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -2,9 +2,7 @@ use codejam::util::bitvec64::BitVec64;
 use codejam::util::codejam::run_cases;
 use codejam::util::vector_2d::Vector2d;
 use num_bigint::BigUint;
-use num_integer::binomial;
-use num_traits::identities::Zero;
-use std::collections::HashMap;
+//use num_integer::binomial;
 use std::io::Write;
 use std::usize;
 
@@ -18,8 +16,13 @@ Lattice walk
 */
 pub fn solve_all_cases()
 {
+    let fac = compute_modular_factorial(MODULUS);
+    let inv = compute_modular_inverse(MODULUS);
+
     run_cases(
-        &["D-small-practice", "D-large-practice"],
+        &["D-small-practice",
+            "D-large-practice"
+        ],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
@@ -34,8 +37,8 @@ pub fn solve_all_cases()
                     })
                     .collect();
 
-                if case_no != 40 {
-                    //continue;
+                if case_no != 21 {
+                   // continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -43,7 +46,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(rocks.as_slice(), n_rows, n_cols)
+                    solve(rocks.as_slice(), n_rows, n_cols, &fac, &inv)
                 )
                 .unwrap();
             }
@@ -51,7 +54,15 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
+const MODULUS: usize = 10007;
+
+fn solve(
+    rocks_orig: &[Vector2d<isize>],
+    n_rows: isize,
+    n_cols: isize,
+    fac: &[usize],
+    inv: &[usize],
+) -> isize
 {
     let target = change_basis(&Vector2d::with_val(n_rows - 1, n_cols - 1));
 
@@ -66,12 +77,10 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
 
     let mut rocks = Vec::new();
 
-    let mut memo: HashMap<(usize, usize), usize> = HashMap::new();
-
     for r in rocks_orig.iter() {
         if let Some(rock) = change_basis(r) {
             //exceeds destination
-            if rock.r() >= n_rows as usize || rock.c() >= n_cols as usize {
+            if rock.r() > target.r() || rock.c() > target.c() {
                 continue;
             }
             rocks.push(rock);
@@ -83,6 +92,8 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
     rocks.insert(0, start);
     rocks.push(target);
 
+    debug!("Rocks {:?}", rocks);
+
     let mut ans = 0;
     //always include target
     for subset in 0..1 << (rocks.len() - 2) {
@@ -98,26 +109,32 @@ fn solve(rocks_orig: &[Vector2d<isize>], n_rows: isize, n_cols: isize) -> isize
                     last = cur;
                     return 0;
                 }
+                assert!(cur != last);
+                assert!(rocks[cur].c() >= rocks[last].c(),
+                        "cur {} last {} {:?} {:?}", cur, last, rocks[cur],
+                rocks[last]);
+
                 let m = rocks[cur].r() - rocks[last].r();
                 let n = rocks[cur].c() - rocks[last].c();
                 last = cur;
-                n_choose_k_mod(m + n, n, 10007, &mut memo)
+                n_choose_k_mod(m + n, n, 10007, fac, inv)
             })
             .fold(1, |acc, w| (acc * w) % 10007);
 
-        // debug!("Rocks {:?} ways {} sign {}", rocks_subset, ways, sign);
+        debug!("Rocks {:0>width$b} ways {} sign {}", bs.data, ways, sign, width=rocks.len());
         ans += 10007 + sign * ways as isize;
     }
     ans % 10007
 }
 
-fn n_choose_k_mod(n: usize, k: usize, p: usize, memo: &mut HashMap<(usize, usize), usize>)
-    -> usize
+fn n_choose_k_mod(
+    n: usize,
+    k: usize,
+    p: usize,
+    fac: &[usize],
+    inv: &[usize]
+) -> usize
 {
-    let key = (n, k);
-    if memo.contains_key(&key) {
-        return memo[&key];
-    }
     let mut n = n;
     let mut k = k;
 
@@ -126,14 +143,30 @@ fn n_choose_k_mod(n: usize, k: usize, p: usize, memo: &mut HashMap<(usize, usize
     while k > 0 {
         let key = (n % p, k % p);
 
-        if memo.contains_key(&key) {
-            product *= memo[&key];
-        } else {
+        //n! / (k! * (n-k)!)
+
+
+        if k % p > n % p {
+            product *= 0;
+
+        }
+        else if k % p == 0 || key.0 == key.1 {
+            product *= 1;
+        }
+        else {
+            let n_fact = fac[n % p];
+            let k_fact = inv[fac[k % p]];
+            let n_sub_k_fact = inv[fac[neg_mod(n,k,p)]];
+
+            let pp = (n_fact * k_fact * n_sub_k_fact) % p;
+            product *= pp;
+
+/*
             let b = biguint_to_usize(
                 &(binomial(BigUint::from(key.0), BigUint::from(key.1)) % BigUint::from(p)),
             );
-            product *= b;
-            memo.insert(key, b);
+
+            assert_eq!(b, pp, "{} choose {}", key.0, key.1);*/
         }
 
         product %= p;
@@ -143,7 +176,7 @@ fn n_choose_k_mod(n: usize, k: usize, p: usize, memo: &mut HashMap<(usize, usize
     }
 
     let ans = product;
-    memo.insert(key, ans);
+    //memo.insert(key, ans);
     ans
 }
 
@@ -174,6 +207,7 @@ fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<usize>>
     }
 }
 
+#[allow(dead_code)]
 fn biguint_to_usize(bu: &BigUint) -> usize
 {
     let mut ans = 0usize;
@@ -186,11 +220,13 @@ fn biguint_to_usize(bu: &BigUint) -> usize
 }
 
 //https://cp-algorithms.com/algebra/module-inverse.html
+///Modular inverse 1..m
 fn compute_modular_inverse(m: usize) -> Vec<usize>
 {
     //https://cp-algorithms.com/algebra/module-inverse.html
-    let mut inv = vec![0; m + 1];
+    let mut inv = vec![0; m ];
 
+   // inv[0] = 1;
     inv[1] = 1;
     for i in 2..m {
         inv[i] = (m - (m / i) * inv[m % i] % m) % m;
@@ -198,6 +234,19 @@ fn compute_modular_inverse(m: usize) -> Vec<usize>
     inv
 }
 
+///(1..m)
+fn compute_modular_factorial(m: usize) -> Vec<usize>
+{
+    //https://cp-algorithms.com/algebra/module-inverse.html
+    let mut fac = vec![0; m + 1];
+
+    fac[1] = 1;
+    for i in 2..m {
+        fac[i] = (fac[i - 1] * i) % m;
+    }
+    fac
+}
+
 //https://cp-algorithms.com/algebra/module-inverse.html
 fn compute_modular_inverse_1(a: usize, modulus: usize) -> usize
 {
@@ -206,6 +255,7 @@ fn compute_modular_inverse_1(a: usize, modulus: usize) -> usize
 
 ///Binary power a^b % modulus
 /// Modulus must be prime
+#[allow(dead_code)]
 fn binpow(a: usize, b: usize, modulus: usize) -> usize
 {
     let mut a = a % modulus;
@@ -222,14 +272,18 @@ fn binpow(a: usize, b: usize, modulus: usize) -> usize
 }
 
 //https://stackoverflow.com/questions/9727962/fast-way-to-calculate-n-mod-m-where-m-is-prime
+#[allow(dead_code)]
 fn factorial_mod(n: usize, modulus: usize) -> usize
 {
-    let mut ans:isize = 1;
+    let mut ans: isize = 1;
     if n <= modulus / 2 {
         //#calculate the factorial normally (right argument of range() is exclusive)
         for i in 1..=n {
             ans = (ans * i as isize) % modulus as isize;
         }
+    } else if n >= modulus {
+        //because 1*2*...*modulus*...*n === 0
+        return 0;
     } else {
         //Fancypants method for large n
         for i in n + 1..modulus {
@@ -241,25 +295,79 @@ fn factorial_mod(n: usize, modulus: usize) -> usize
     return (ans % modulus as isize) as usize;
 }
 
+/// (a-b) % m
+fn neg_mod(a: usize, b: usize, m: usize) -> usize
+{
+    let mut a_sub_b = a as isize - b as isize;
+    a_sub_b %= m as isize;
+    if a_sub_b < 0 {
+        a_sub_b += m as isize;
+    }
+    a_sub_b as usize
+}
+
 #[cfg(test)]
 mod test_endless_knight
 {
     use super::*;
     use num_integer::binomial;
 
+    #[test]
+    fn test_n_choose_k()
+    {
+        let modulus = 79 ; //1033; //10007;
+        let fac = compute_modular_factorial(modulus);
+        let inv = compute_modular_inverse(modulus);
+        let p = BigUint::from(modulus);
+
+        //let check_fac
+
+        for n in 1..modulus {
+
+            for k in 2..n {
+                println!("N= {} K={}", n,k);
+                let check = biguint_to_usize(&(binomial(BigUint::from(n),
+                                                        BigUint::from(k)) % &p));
+
+                let n_fact = fac[n ];
+                let k_fact = inv[ fac[k] ];
+                let n_sub_k_fact = inv[ fac[n - k] ];
+
+                assert_eq!(n_fact, factorial_mod(n, modulus));
+                assert_eq!(k_fact, compute_modular_inverse_1(factorial_mod(k, modulus),modulus ), "k_fact wrong");
+                assert_eq!(n_sub_k_fact, compute_modular_inverse_1(factorial_mod(n-k, modulus),modulus ));
+
+                assert_eq!((n_fact * k_fact * n_sub_k_fact) % modulus, check);
+            }
+        }
+    }
 
     #[test]
     fn test_factorial_mod()
+    {
+        for &prime in [7, 10007].iter() {
+            let pu = BigUint::from(prime);
+            let mut f = BigUint::from(1usize);
+
+            for i in 2..=23 {
+                f *= BigUint::from(i);
+                assert_eq!(biguint_to_usize(&(&f % &pu)), factorial_mod(i, prime));
+            }
+        }
+    }
+
+    #[test]
+    fn test_modular_inverse_2()
     {
         let prime = 10007;
-        let pu = BigUint::from(prime);
-        let mut f = BigUint::from(1usize);
+        let inverse = compute_modular_inverse(prime);
 
-        for i in 2..=23 {
-            f *= BigUint::from(i);
-            assert_eq!( biguint_to_usize( &(&f % &pu)), factorial_mod(i, prime));
+        for i in 1..prime {
+
+            assert_eq!(inverse[i], compute_modular_inverse_1(i, prime));
         }
     }
+
     #[test]
     fn test_modular_inverse()
     {
diff --git a/codejam_2008/src/y2008round3/modular-inverse.png b/codejam_2008/src/y2008round3/modular-inverse.png
new file mode 100644
index 0000000000000000000000000000000000000000..742530386c185f0cef2baa29e804207b92196ecd
GIT binary patch

From 3f20702c3704eadfc3f158f7cc2eebb0b4cf4b70 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 16:39:49 -0300
Subject: [PATCH 099/122] comments

---
 codejam_2008/src/y2008round3/d.rs | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 353325c..83678fe 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -12,7 +12,7 @@ Modular multiplicative inverse
 binary exponentiation algorithm
 Fermat's little theorem
 Lattice walk
-
+Lucas's theorem
 */
 pub fn solve_all_cases()
 {
@@ -95,7 +95,7 @@ fn solve(
     debug!("Rocks {:?}", rocks);
 
     let mut ans = 0;
-    //always include target
+    //always include start & target, so subset -2
     for subset in 0..1 << (rocks.len() - 2) {
         let bs = BitVec64::with_val(subset);
         let sign = if bs.pop_count() % 2 == 0 { 1 } else { -1 };
@@ -117,9 +117,9 @@ fn solve(
                 let m = rocks[cur].r() - rocks[last].r();
                 let n = rocks[cur].c() - rocks[last].c();
                 last = cur;
-                n_choose_k_mod(m + n, n, 10007, fac, inv)
+                n_choose_k_mod(m + n, n, MODULUS, fac, inv)
             })
-            .fold(1, |acc, w| (acc * w) % 10007);
+            .fold(1, |acc, w| (acc * w) % MODULUS);
 
         debug!("Rocks {:0>width$b} ways {} sign {}", bs.data, ways, sign, width=rocks.len());
         ans += 10007 + sign * ways as isize;
@@ -127,6 +127,7 @@ fn solve(
     ans % 10007
 }
 
+//Uses lucas theorum and modular inversese
 fn n_choose_k_mod(
     n: usize,
     k: usize,
@@ -139,21 +140,18 @@ fn n_choose_k_mod(
     let mut k = k;
 
     let mut product = 1;
-    //let p = BigUint::from(p);
     while k > 0 {
         let key = (n % p, k % p);
 
-        //n! / (k! * (n-k)!)
-
 
-        if k % p > n % p {
+        if key.1 > key.0 {
             product *= 0;
-
         }
-        else if k % p == 0 || key.0 == key.1 {
+        else if key.1 == 0 || key.0 == key.1 {
             product *= 1;
         }
         else {
+            //n! / (k! * (n-k)!)
             let n_fact = fac[n % p];
             let k_fact = inv[fac[k % p]];
             let n_sub_k_fact = inv[fac[neg_mod(n,k,p)]];
@@ -175,9 +173,7 @@ fn n_choose_k_mod(
         k /= p;
     }
 
-    let ans = product;
-    //memo.insert(key, ans);
-    ans
+    product
 }
 
 fn change_basis(rc: &Vector2d<isize>) -> Option<Vector2d<usize>>

From 4914a5ad9d2dd8d55b6c45fa1411db0e59768e7e Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 16:59:35 -0300
Subject: [PATCH 100/122] a

---
 codejam_2008/src/main.rs                      |    5 +-
 .../src/y2008round_apac/A-large-practice.in   | 5430 +++++++++++++++++
 .../src/y2008round_apac/A-small-practice.in   |  176 +
 codejam_2008/src/y2008round_apac/a.rs         |   51 +
 codejam_2008/src/y2008round_apac/mod.rs       |    4 +
 5 files changed, 5665 insertions(+), 1 deletion(-)
 create mode 100644 codejam_2008/src/y2008round_apac/A-large-practice.in
 create mode 100644 codejam_2008/src/y2008round_apac/A-small-practice.in
 create mode 100644 codejam_2008/src/y2008round_apac/a.rs
 create mode 100644 codejam_2008/src/y2008round_apac/mod.rs

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 89dd746..3c8c27b 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -6,6 +6,7 @@ mod y2008round1b;
 mod y2008round1c;
 mod y2008round2;
 mod y2008round3;
+mod y2008round_apac;
 
 extern crate codejam;
 
@@ -80,12 +81,14 @@ pub fn run_y2008_round3()
     y2008round3::a::solve_all_cases();
     y2008round3::b::solve_all_cases();
     y2008round3::c::solve_all_cases();
+    y2008round3::d::solve_all_cases();
 }
 
 fn main()
 {
     init_log();
-    y2008round3::d::solve_all_cases();
+
+    y2008round_apac::a::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round_apac/A-large-practice.in b/codejam_2008/src/y2008round_apac/A-large-practice.in
new file mode 100644
index 0000000..73b7d7b
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/A-large-practice.in
@@ -0,0 +1,5430 @@
+10
+5
+1000 1000 BIRD
+2000 1000 BIRD
+2000 2000 BIRD
+1000 2000 BIRD
+1500 2010 NOT BIRD
+3
+1500 1500
+900 900
+1400 2020
+3
+500 700 NOT BIRD
+501 700 BIRD
+502 700 NOT BIRD
+2
+501 600
+502 501
+1
+100 100 NOT BIRD
+3
+107 93
+86 70
+110 115
+10
+1897 1802 BIRD
+3765 3992 BIRD
+1797 1802 NOT BIRD
+1897 1702 NOT BIRD
+3865 3992 NOT BIRD
+3765 4092 NOT BIRD
+1797 3992 NOT BIRD
+1897 4092 NOT BIRD
+3865 1802 NOT BIRD
+3765 1702 NOT BIRD
+8
+1697 1802
+1897 1602
+3965 3992
+3765 4192
+1697 3992
+1897 4192
+3965 1802
+3765 1602
+125
+885387 238336 NOT BIRD
+641422 516650 BIRD
+368691 490028 NOT BIRD
+513927 897764 NOT BIRD
+89173 383427 NOT BIRD
+595369 5212 NOT BIRD
+465783 956430 NOT BIRD
+665124 722863 NOT BIRD
+513930 703136 NOT BIRD
+723059 634023 NOT BIRD
+961394 898168 NOT BIRD
+478043 175012 NOT BIRD
+484422 377374 NOT BIRD
+898538 413785 NOT BIRD
+798316 594325 NOT BIRD
+803527 566414 BIRD
+759957 268981 NOT BIRD
+999171 806863 NOT BIRD
+702306 497282 BIRD
+336328 477085 NOT BIRD
+750847 126506 NOT BIRD
+925858 661314 NOT BIRD
+819583 353896 NOT BIRD
+233368 898815 NOT BIRD
+344044 990365 NOT BIRD
+426809 171088 NOT BIRD
+695789 947179 NOT BIRD
+502652 705404 NOT BIRD
+999933 612400 NOT BIRD
+993369 549677 NOT BIRD
+636227 210013 NOT BIRD
+297540 348095 NOT BIRD
+651435 480571 BIRD
+66602 97468 NOT BIRD
+573318 612903 NOT BIRD
+260757 926653 NOT BIRD
+724287 560281 BIRD
+429690 953866 NOT BIRD
+558441 346620 NOT BIRD
+108118 958032 NOT BIRD
+834482 905772 NOT BIRD
+698928 120710 NOT BIRD
+179498 777857 NOT BIRD
+276966 254587 NOT BIRD
+406220 964684 NOT BIRD
+332872 51529 NOT BIRD
+409504 48830 NOT BIRD
+363369 258271 NOT BIRD
+226341 486716 NOT BIRD
+700724 747797 NOT BIRD
+122847 1000000 NOT BIRD
+243556 892922 NOT BIRD
+537765 597489 NOT BIRD
+792351 469842 BIRD
+757035 441501 BIRD
+324915 470125 NOT BIRD
+373744 275857 NOT BIRD
+148366 322228 NOT BIRD
+151433 281937 NOT BIRD
+899229 316438 NOT BIRD
+901475 975408 NOT BIRD
+794396 468859 BIRD
+908236 661238 NOT BIRD
+894429 65819 NOT BIRD
+335929 231012 NOT BIRD
+322405 318777 NOT BIRD
+114614 255764 NOT BIRD
+436841 118607 NOT BIRD
+1 344819 NOT BIRD
+67918 797370 NOT BIRD
+43325 466997 NOT BIRD
+512184 259471 NOT BIRD
+689773 295500 NOT BIRD
+1000000 385645 NOT BIRD
+502955 268140 NOT BIRD
+338083 907670 NOT BIRD
+110198 388465 NOT BIRD
+228805 759356 NOT BIRD
+573623 1 NOT BIRD
+887344 949300 NOT BIRD
+354341 35569 NOT BIRD
+613811 23312 NOT BIRD
+425662 321802 NOT BIRD
+811306 44879 NOT BIRD
+79445 178737 NOT BIRD
+503466 648523 NOT BIRD
+408283 473417 NOT BIRD
+167638 412925 NOT BIRD
+962601 305625 NOT BIRD
+911900 433453 NOT BIRD
+947469 145551 NOT BIRD
+487132 900974 NOT BIRD
+808934 684931 NOT BIRD
+370164 158661 NOT BIRD
+548900 387982 NOT BIRD
+713774 152960 NOT BIRD
+187191 739669 NOT BIRD
+116467 952927 NOT BIRD
+422091 911341 NOT BIRD
+855543 443377 NOT BIRD
+517446 379108 NOT BIRD
+418419 669180 NOT BIRD
+103349 89413 NOT BIRD
+262010 451660 NOT BIRD
+166343 625211 NOT BIRD
+319302 878207 NOT BIRD
+575322 667373 NOT BIRD
+44600 864820 NOT BIRD
+955940 229905 NOT BIRD
+915668 73941 NOT BIRD
+811128 346229 NOT BIRD
+996659 565985 NOT BIRD
+602423 789225 NOT BIRD
+54082 821397 NOT BIRD
+679293 740085 NOT BIRD
+73851 207673 NOT BIRD
+741223 905386 NOT BIRD
+606043 306641 NOT BIRD
+352299 340714 NOT BIRD
+942591 280525 NOT BIRD
+288820 108582 NOT BIRD
+371156 937733 NOT BIRD
+160380 218005 NOT BIRD
+981777 85274 NOT BIRD
+721861 247256 NOT BIRD
+166
+575580 348143
+421994 445885
+867622 223206
+962505 679568
+801962 690614
+31327 262755
+518945 154260
+613203 1000000
+936785 723507
+222843 902022
+789529 390869
+608873 235190
+849959 1
+448037 210499
+457754 518809
+383304 686249
+132134 33334
+772891 321649
+517568 999755
+690369 251747
+514501 319530
+473789 238047
+66250 549798
+273304 86991
+505364 3034
+910254 12498
+247687 294893
+761153 519126
+245976 613997
+649158 209189
+895437 703730
+253415 32461
+870461 543922
+60029 26305
+278051 388028
+707557 266749
+1000000 308903
+858700 697698
+301040 571044
+1 132003
+144501 806404
+617648 682
+36160 908539
+522536 895152
+104340 282135
+502216 171693
+720505 516128
+60050 755630
+298286 590965
+495344 636430
+903178 576336
+885239 202901
+416950 407972
+495368 260290
+392293 717989
+40744 585796
+102830 53145
+961683 658391
+553542 655341
+453827 570
+172262 174233
+690361 956043
+228024 409118
+82 266762
+903191 526310
+618997 495426
+214678 806368
+730691 504235
+764525 631627
+349615 226058
+328206 673169
+726313 390359
+565101 947387
+602727 204347
+204917 634995
+325579 56553
+528947 893530
+302648 532291
+799052 756971
+799632 819081
+830858 218594
+541313 418628
+439215 561887
+193513 788356
+14413 720091
+909611 59480
+966190 858970
+806356 152275
+356621 47642
+198988 925434
+498339 77889
+487771 524567
+56857 27285
+300607 790418
+125850 372261
+107206 100238
+35218 473060
+34946 648519
+436874 990784
+710874 228459
+804290 967638
+826608 620484
+772758 770479
+334472 149315
+591101 645730
+723619 533460
+58026 89439
+633075 211389
+518158 631234
+3494 933682
+550271 160359
+633418 110700
+275570 101840
+92623 668364
+413174 228795
+196432 319848
+456683 217463
+504293 539391
+205058 745792
+391522 355116
+888575 796158
+401948 631492
+359232 462952
+610538 35022
+485055 393741
+554099 614031
+241082 35326
+653517 187517
+372232 33003
+261797 746140
+582339 785405
+519219 974581
+513971 39022
+784813 539863
+894978 235380
+31537 692686
+324177 299905
+279208 433484
+984858 199760
+593500 889745
+20128 469912
+505237 663951
+367819 777561
+810564 675106
+421245 740050
+41806 588712
+563292 519935
+558956 77376
+133590 593615
+828994 343769
+552806 544919
+844823 376883
+326718 876983
+593094 124031
+530127 311575
+781487 186594
+850544 550254
+327815 803075
+478180 734714
+474763 138378
+727089 415776
+935711 32920
+110295 806733
+400347 11018
+871138 760236
+305154 745692
+216
+714905 378131 NOT BIRD
+369634 372662 NOT BIRD
+613074 304790 NOT BIRD
+419806 756852 BIRD
+336504 767869 BIRD
+82196 639007 NOT BIRD
+721121 62950 NOT BIRD
+686764 880227 NOT BIRD
+963982 290597 NOT BIRD
+539037 887561 BIRD
+433519 367771 NOT BIRD
+322533 66343 NOT BIRD
+627322 272380 NOT BIRD
+384173 994985 NOT BIRD
+152041 344235 NOT BIRD
+307399 970073 NOT BIRD
+370348 901064 BIRD
+250574 982031 NOT BIRD
+57523 886060 NOT BIRD
+945083 626925 NOT BIRD
+829205 271233 NOT BIRD
+411899 630444 BIRD
+684279 875641 NOT BIRD
+679263 250263 NOT BIRD
+539849 561042 BIRD
+26273 208325 NOT BIRD
+927336 454155 NOT BIRD
+909366 937458 NOT BIRD
+311777 591172 BIRD
+938702 725219 NOT BIRD
+209934 914654 BIRD
+356729 53960 NOT BIRD
+748721 515798 NOT BIRD
+515335 121309 NOT BIRD
+76377 110992 NOT BIRD
+801053 252716 NOT BIRD
+771560 218190 NOT BIRD
+709017 554011 NOT BIRD
+816540 173110 NOT BIRD
+58110 333379 NOT BIRD
+489115 955082 NOT BIRD
+59427 405990 NOT BIRD
+575224 785148 BIRD
+696533 332232 NOT BIRD
+323876 591282 BIRD
+576591 390180 NOT BIRD
+311132 215351 NOT BIRD
+381495 967858 NOT BIRD
+554604 146082 NOT BIRD
+887983 152434 NOT BIRD
+359416 97488 NOT BIRD
+765405 768826 NOT BIRD
+550552 796893 BIRD
+399135 90033 NOT BIRD
+990416 898507 NOT BIRD
+380596 299709 NOT BIRD
+112298 501963 NOT BIRD
+80155 475777 NOT BIRD
+742588 191310 NOT BIRD
+895022 723383 NOT BIRD
+508861 313564 NOT BIRD
+277686 909212 BIRD
+590931 564286 BIRD
+197315 794584 BIRD
+95821 754117 NOT BIRD
+395529 37526 NOT BIRD
+897491 897526 NOT BIRD
+889619 101361 NOT BIRD
+80929 170338 NOT BIRD
+804311 826622 NOT BIRD
+634226 370889 NOT BIRD
+543438 274571 NOT BIRD
+107723 460009 NOT BIRD
+418658 712351 BIRD
+689127 363828 NOT BIRD
+726652 522072 NOT BIRD
+140529 60911 NOT BIRD
+241889 228399 NOT BIRD
+928578 992394 NOT BIRD
+755200 498977 NOT BIRD
+126088 416932 NOT BIRD
+400658 360100 NOT BIRD
+377018 580953 BIRD
+89369 392736 NOT BIRD
+453196 918185 BIRD
+975267 55806 NOT BIRD
+552529 588955 BIRD
+297279 19594 NOT BIRD
+289673 372556 NOT BIRD
+305001 806446 BIRD
+238284 560998 BIRD
+598383 466128 BIRD
+179335 914694 BIRD
+88422 987335 NOT BIRD
+522958 994986 NOT BIRD
+578763 691762 BIRD
+167717 631542 BIRD
+703663 711851 NOT BIRD
+76218 550400 NOT BIRD
+399016 801174 BIRD
+476365 839852 BIRD
+942492 488264 NOT BIRD
+373538 570038 BIRD
+360872 28829 NOT BIRD
+355857 576988 BIRD
+563971 578342 BIRD
+195512 587666 BIRD
+907362 149518 NOT BIRD
+974113 41352 NOT BIRD
+291639 706507 BIRD
+131490 709365 NOT BIRD
+136105 434155 NOT BIRD
+706142 273680 NOT BIRD
+734970 292539 NOT BIRD
+311957 916171 BIRD
+406650 62761 NOT BIRD
+994315 304466 NOT BIRD
+660184 713887 NOT BIRD
+701536 826970 NOT BIRD
+924394 532622 NOT BIRD
+150110 637290 BIRD
+584265 734674 BIRD
+374296 774549 BIRD
+666834 704314 NOT BIRD
+99356 994950 NOT BIRD
+678469 157794 NOT BIRD
+982934 400961 NOT BIRD
+213172 323287 NOT BIRD
+40141 185678 NOT BIRD
+572762 22182 NOT BIRD
+210051 150324 NOT BIRD
+461076 409955 BIRD
+235625 322043 NOT BIRD
+456290 423920 BIRD
+451239 293470 NOT BIRD
+125384 474977 NOT BIRD
+526344 63134 NOT BIRD
+365982 161957 NOT BIRD
+68012 953667 NOT BIRD
+90193 446913 NOT BIRD
+1000000 380903 NOT BIRD
+683175 465003 NOT BIRD
+5217 649719 NOT BIRD
+945488 692378 NOT BIRD
+238958 434574 BIRD
+713934 276126 NOT BIRD
+293419 312497 NOT BIRD
+971727 848154 NOT BIRD
+925394 596981 NOT BIRD
+372306 385949 NOT BIRD
+269560 264030 NOT BIRD
+734563 352161 NOT BIRD
+384281 417720 BIRD
+593011 718903 BIRD
+27584 992727 NOT BIRD
+303709 234141 NOT BIRD
+132558 600939 NOT BIRD
+980711 10432 NOT BIRD
+577691 785906 BIRD
+963639 629392 NOT BIRD
+227668 79422 NOT BIRD
+96181 802672 NOT BIRD
+513900 209096 NOT BIRD
+749155 137089 NOT BIRD
+258233 10570 NOT BIRD
+492374 155711 NOT BIRD
+609664 498434 BIRD
+620095 167280 NOT BIRD
+922352 291500 NOT BIRD
+551743 857465 BIRD
+147516 312087 NOT BIRD
+950187 519916 NOT BIRD
+675635 495012 NOT BIRD
+812723 854388 NOT BIRD
+339644 1000000 NOT BIRD
+495355 786743 BIRD
+510140 103125 NOT BIRD
+677419 552064 NOT BIRD
+485270 981713 NOT BIRD
+342734 505405 BIRD
+654820 992735 NOT BIRD
+691088 740436 NOT BIRD
+702451 100670 NOT BIRD
+556838 974803 NOT BIRD
+363611 598090 BIRD
+666705 995961 NOT BIRD
+769830 402558 NOT BIRD
+321893 418817 BIRD
+303606 571523 BIRD
+325362 646580 BIRD
+834448 273379 NOT BIRD
+574883 564046 BIRD
+675552 804900 NOT BIRD
+650354 721387 NOT BIRD
+764795 966949 NOT BIRD
+277108 68507 NOT BIRD
+679665 1 NOT BIRD
+98481 288821 NOT BIRD
+186355 105995 NOT BIRD
+832934 408438 NOT BIRD
+106313 86318 NOT BIRD
+1 419018 NOT BIRD
+991609 959157 NOT BIRD
+712996 201746 NOT BIRD
+196296 1172 NOT BIRD
+264802 680560 BIRD
+446572 26653 NOT BIRD
+251744 658926 BIRD
+874090 613092 NOT BIRD
+798879 903567 NOT BIRD
+885197 3051 NOT BIRD
+304214 453334 BIRD
+263371 478500 BIRD
+465116 695569 BIRD
+982640 79343 NOT BIRD
+663199 744264 NOT BIRD
+200
+169940 263591
+226514 206203
+865129 791632
+511805 478258
+352347 994572
+898139 934684
+190496 151226
+36422 417541
+387227 68973
+134159 1
+120357 865726
+77646 190953
+1000000 585473
+568112 673340
+417604 475884
+255826 747662
+470217 587543
+379175 482340
+960597 335345
+846268 407331
+342014 829295
+980520 260758
+194651 48861
+117833 533293
+390280 581877
+963954 251991
+959296 510636
+96108 41599
+714938 952742
+944977 180571
+444585 132541
+720084 200802
+199493 914801
+766497 615610
+22940 676441
+505736 612764
+389874 881305
+930165 2607
+52252 584524
+682752 564350
+816340 442531
+953166 646705
+688303 291987
+761080 565626
+262548 919592
+568485 222408
+939562 707132
+621932 804920
+420529 139054
+815495 388428
+517544 959820
+841124 837582
+840188 423769
+524644 287640
+851989 892439
+851321 1000000
+854099 184681
+993019 804487
+886464 58753
+494696 754099
+976506 149011
+856143 63180
+868099 916067
+571473 994426
+382854 804979
+764798 386967
+224548 416749
+840517 122273
+409913 581087
+989878 365160
+572554 261901
+962933 841198
+162036 943004
+518108 955952
+710050 48499
+713862 529155
+592335 202907
+635326 570004
+564429 976785
+781764 206798
+1 463634
+880382 546561
+185186 851015
+432101 720898
+602409 595098
+373350 938330
+295880 691314
+634317 852635
+808586 457915
+22766 668776
+197931 34987
+237893 736627
+306630 306617
+799753 389570
+596367 387410
+367396 581516
+644429 222834
+73848 247777
+485027 829614
+941063 22301
+960630 603787
+295101 830764
+683398 256509
+230776 929417
+114545 491983
+43321 253541
+506519 828827
+651795 797566
+187135 329500
+716909 451547
+33063 299854
+522687 84304
+848433 193843
+539808 596535
+618835 849811
+453597 480870
+827985 95816
+352325 748697
+194466 511383
+519717 99452
+869344 825362
+654188 563038
+360603 375862
+705361 305982
+273880 64089
+363942 938621
+22925 823294
+17136 886629
+483163 387709
+753871 556943
+554164 101997
+197812 207467
+472516 898501
+926235 66488
+682291 183333
+8694 445951
+525340 551634
+927495 662881
+485214 402294
+466383 632855
+571476 275445
+98739 830324
+716952 110752
+14812 115874
+189169 716466
+334814 768682
+492500 259684
+674536 48978
+115465 965015
+148347 600770
+563073 314108
+865741 673392
+852624 88412
+7058 309588
+458794 337837
+613282 473440
+820115 546621
+657372 228372
+860597 53419
+769884 188535
+473568 49765
+825801 104698
+153675 966068
+447434 500336
+617458 785491
+615950 112133
+785524 180530
+785293 481691
+307630 638148
+492336 792350
+782141 766423
+313044 621969
+850340 602256
+172026 486767
+191654 710937
+277053 458261
+562958 665221
+631288 619205
+119541 232984
+534827 78722
+707206 736998
+433879 667128
+665170 492729
+647228 219171
+11521 972799
+739222 139564
+277884 793661
+912268 568617
+55383 128224
+355512 84293
+542554 247036
+428609 632564
+251769 621863
+371199 59896
+654969 887661
+141010 422377
+89504 362174
+371255 574888
+794058 754674
+243824 18482
+343
+831743 101282 NOT BIRD
+891639 869402 NOT BIRD
+62959 273414 NOT BIRD
+941485 414423 NOT BIRD
+829091 505662 NOT BIRD
+363924 816072 BIRD
+38321 138001 NOT BIRD
+506953 769943 BIRD
+103808 830505 NOT BIRD
+572526 975359 NOT BIRD
+190159 179118 NOT BIRD
+59561 521091 NOT BIRD
+332974 750615 NOT BIRD
+263749 918866 NOT BIRD
+769410 176621 NOT BIRD
+101833 705401 NOT BIRD
+239834 478005 NOT BIRD
+526128 266357 BIRD
+356632 606369 NOT BIRD
+848342 586129 NOT BIRD
+27459 485375 NOT BIRD
+64902 700011 NOT BIRD
+331868 838990 NOT BIRD
+250733 40927 NOT BIRD
+943706 700700 NOT BIRD
+165458 189563 NOT BIRD
+643462 42349 NOT BIRD
+426170 449808 BIRD
+32539 880570 NOT BIRD
+135019 415140 NOT BIRD
+620393 38586 BIRD
+836755 368543 NOT BIRD
+675744 241708 NOT BIRD
+233022 480551 NOT BIRD
+933721 466789 NOT BIRD
+639635 255141 NOT BIRD
+681984 145326 NOT BIRD
+648143 791695 NOT BIRD
+45064 964192 NOT BIRD
+976555 493321 NOT BIRD
+531493 387143 BIRD
+900035 308423 NOT BIRD
+658095 327309 NOT BIRD
+138645 161709 NOT BIRD
+121785 279546 NOT BIRD
+376926 341088 BIRD
+38603 51736 NOT BIRD
+830297 438549 NOT BIRD
+310841 251531 NOT BIRD
+320513 97052 NOT BIRD
+707655 77590 NOT BIRD
+532429 194873 BIRD
+376089 632558 BIRD
+537798 262338 BIRD
+333695 125140 NOT BIRD
+674783 438015 NOT BIRD
+242870 390524 NOT BIRD
+681418 25016 NOT BIRD
+449300 340354 BIRD
+546351 700755 BIRD
+140293 37711 NOT BIRD
+335165 906159 NOT BIRD
+967722 674642 NOT BIRD
+746411 617570 NOT BIRD
+387903 182791 BIRD
+825917 386148 NOT BIRD
+216440 482782 NOT BIRD
+757807 618018 NOT BIRD
+614512 99902 BIRD
+315266 408979 NOT BIRD
+352977 38567 NOT BIRD
+259135 892162 NOT BIRD
+450128 794537 BIRD
+67698 73000 NOT BIRD
+766840 889261 NOT BIRD
+152987 555568 NOT BIRD
+635768 413009 NOT BIRD
+770137 996967 NOT BIRD
+870038 778694 NOT BIRD
+795368 9720 NOT BIRD
+833935 787097 NOT BIRD
+726096 221118 NOT BIRD
+520632 473951 BIRD
+593631 727209 BIRD
+999243 210526 NOT BIRD
+71162 114448 NOT BIRD
+484170 327935 BIRD
+481136 790564 BIRD
+776181 527352 NOT BIRD
+785901 362298 NOT BIRD
+572997 28862 BIRD
+794115 48402 NOT BIRD
+784417 843429 NOT BIRD
+511626 88583 BIRD
+238503 401434 NOT BIRD
+352950 481124 NOT BIRD
+197236 230152 NOT BIRD
+987800 614947 NOT BIRD
+31503 286230 NOT BIRD
+393800 827550 BIRD
+939014 680590 NOT BIRD
+503767 367564 BIRD
+347195 296985 NOT BIRD
+435777 747037 BIRD
+837210 307072 NOT BIRD
+834685 382701 NOT BIRD
+64836 529491 NOT BIRD
+679782 160451 NOT BIRD
+482363 305251 BIRD
+826265 709879 NOT BIRD
+506854 416759 BIRD
+390770 696635 BIRD
+204106 286978 NOT BIRD
+951143 661737 NOT BIRD
+774566 64473 NOT BIRD
+157266 705711 NOT BIRD
+203108 216250 NOT BIRD
+363559 440377 BIRD
+185161 652303 NOT BIRD
+895039 412083 NOT BIRD
+311797 82015 NOT BIRD
+8431 690959 NOT BIRD
+295408 803670 NOT BIRD
+473496 779928 BIRD
+537968 708314 BIRD
+760030 990261 NOT BIRD
+492632 106893 BIRD
+933008 804713 NOT BIRD
+101663 182314 NOT BIRD
+30097 558629 NOT BIRD
+112111 244857 NOT BIRD
+803070 470642 NOT BIRD
+123091 87196 NOT BIRD
+419370 907855 BIRD
+1000000 196009 NOT BIRD
+634296 258727 BIRD
+741188 511415 NOT BIRD
+62252 450858 NOT BIRD
+244565 270211 NOT BIRD
+803194 274724 NOT BIRD
+564402 690627 BIRD
+551395 418326 BIRD
+638590 670807 NOT BIRD
+62796 735048 NOT BIRD
+258804 1 NOT BIRD
+33883 864841 NOT BIRD
+61649 700574 NOT BIRD
+512506 545291 BIRD
+299068 839367 NOT BIRD
+573791 235105 BIRD
+780769 177291 NOT BIRD
+199094 715236 NOT BIRD
+386252 572602 BIRD
+637652 69411 NOT BIRD
+910436 985589 NOT BIRD
+775276 29449 NOT BIRD
+992201 223957 NOT BIRD
+53843 1000000 NOT BIRD
+409561 673950 BIRD
+644665 949165 NOT BIRD
+821956 27573 NOT BIRD
+53543 186734 NOT BIRD
+142497 413641 NOT BIRD
+728259 279137 NOT BIRD
+713847 207429 NOT BIRD
+743295 910876 NOT BIRD
+967251 164557 NOT BIRD
+643254 479886 NOT BIRD
+833556 824072 NOT BIRD
+782720 467325 NOT BIRD
+326645 684368 NOT BIRD
+29730 198531 NOT BIRD
+443371 911787 BIRD
+238859 527646 NOT BIRD
+446287 297509 BIRD
+873514 977806 NOT BIRD
+554422 949731 NOT BIRD
+550659 430208 BIRD
+374730 480879 BIRD
+842054 424759 NOT BIRD
+42773 46008 NOT BIRD
+241303 489211 NOT BIRD
+669441 502309 NOT BIRD
+197087 657903 NOT BIRD
+10947 58107 NOT BIRD
+988752 655805 NOT BIRD
+454834 29502 BIRD
+401393 370449 BIRD
+882272 871001 NOT BIRD
+823382 205109 NOT BIRD
+869389 838288 NOT BIRD
+874952 314463 NOT BIRD
+377260 336719 BIRD
+551515 802346 BIRD
+125973 23183 NOT BIRD
+298130 206658 NOT BIRD
+327631 747295 NOT BIRD
+698079 875058 NOT BIRD
+569079 37127 BIRD
+774187 606629 NOT BIRD
+128826 18185 NOT BIRD
+959640 988866 NOT BIRD
+296359 200849 NOT BIRD
+615056 598624 BIRD
+154590 193486 NOT BIRD
+361247 315645 NOT BIRD
+624894 426556 BIRD
+499951 992301 NOT BIRD
+53429 475790 NOT BIRD
+660057 841550 NOT BIRD
+678242 547043 NOT BIRD
+183459 121925 NOT BIRD
+900659 88110 NOT BIRD
+499282 431555 BIRD
+209119 359217 NOT BIRD
+524764 896500 BIRD
+951319 248264 NOT BIRD
+459971 411306 BIRD
+452112 788778 BIRD
+810013 735329 NOT BIRD
+357056 972418 NOT BIRD
+478980 854684 BIRD
+567090 180238 BIRD
+514996 834854 BIRD
+874212 104525 NOT BIRD
+770712 528785 NOT BIRD
+535327 830644 BIRD
+946633 241043 NOT BIRD
+1 184097 NOT BIRD
+503442 664226 BIRD
+992211 320764 NOT BIRD
+846895 171895 NOT BIRD
+543484 722836 BIRD
+378338 658083 BIRD
+999214 125316 NOT BIRD
+527999 285315 BIRD
+358642 2781 NOT BIRD
+116036 671565 NOT BIRD
+300132 833024 NOT BIRD
+480710 930243 NOT BIRD
+317825 353826 NOT BIRD
+6072 134464 NOT BIRD
+728907 394081 NOT BIRD
+386990 253492 BIRD
+28657 111545 NOT BIRD
+313971 360162 NOT BIRD
+833103 895842 NOT BIRD
+21019 966849 NOT BIRD
+854043 500839 NOT BIRD
+784285 802943 NOT BIRD
+654462 608489 NOT BIRD
+788925 922597 NOT BIRD
+699357 83599 NOT BIRD
+952848 304436 NOT BIRD
+580745 419963 BIRD
+457258 534703 BIRD
+869452 177441 NOT BIRD
+836300 695172 NOT BIRD
+853490 845290 NOT BIRD
+172785 295540 NOT BIRD
+781273 742851 NOT BIRD
+703869 507987 NOT BIRD
+303819 279193 NOT BIRD
+608254 295658 BIRD
+28216 215464 NOT BIRD
+79270 163926 NOT BIRD
+256710 942710 NOT BIRD
+468233 554596 BIRD
+313523 187501 NOT BIRD
+125414 674447 NOT BIRD
+868265 462030 NOT BIRD
+376251 420425 BIRD
+171795 167745 NOT BIRD
+983805 130773 NOT BIRD
+199268 46648 NOT BIRD
+363194 59620 BIRD
+822255 529849 NOT BIRD
+376851 869529 BIRD
+564351 561860 BIRD
+755149 624032 NOT BIRD
+217178 858989 NOT BIRD
+153955 391569 NOT BIRD
+321699 144370 NOT BIRD
+452471 200988 BIRD
+15470 382212 NOT BIRD
+591441 108004 BIRD
+121289 913065 NOT BIRD
+990817 491187 NOT BIRD
+69028 537542 NOT BIRD
+693060 930123 NOT BIRD
+68400 931766 NOT BIRD
+459968 318024 BIRD
+120689 80533 NOT BIRD
+321677 531188 NOT BIRD
+220240 449295 NOT BIRD
+328243 599373 NOT BIRD
+241307 112645 NOT BIRD
+732494 964523 NOT BIRD
+786387 676899 NOT BIRD
+716510 469977 NOT BIRD
+164627 18203 NOT BIRD
+482650 299959 BIRD
+563182 735669 BIRD
+610721 9429 BIRD
+60015 735659 NOT BIRD
+175740 510063 NOT BIRD
+804736 359555 NOT BIRD
+769258 330335 NOT BIRD
+962508 324636 NOT BIRD
+432484 387965 BIRD
+967038 660704 NOT BIRD
+783349 1843 NOT BIRD
+35369 319301 NOT BIRD
+561150 757447 BIRD
+813160 33622 NOT BIRD
+323222 46388 NOT BIRD
+682776 871044 NOT BIRD
+529463 969711 NOT BIRD
+854098 800871 NOT BIRD
+242062 418418 NOT BIRD
+419118 268825 BIRD
+420960 283859 BIRD
+740260 297894 NOT BIRD
+14058 875110 NOT BIRD
+564031 63047 BIRD
+610418 343703 BIRD
+997814 800097 NOT BIRD
+967524 544875 NOT BIRD
+768395 575261 NOT BIRD
+703164 84507 NOT BIRD
+488340 26235 BIRD
+288550 451353 NOT BIRD
+586443 659819 BIRD
+977905 420006 NOT BIRD
+557303 257693 BIRD
+901005 392188 NOT BIRD
+701102 366257 NOT BIRD
+762328 506749 NOT BIRD
+853940 693055 NOT BIRD
+938446 249810 NOT BIRD
+964681 48627 NOT BIRD
+416033 782913 BIRD
+592204 938158 NOT BIRD
+250
+833662 982347
+960251 528561
+786253 775928
+765872 517554
+418558 178441
+61049 882585
+997112 636011
+398338 84149
+293555 595514
+478662 252278
+707075 543364
+108343 581325
+172327 671755
+604140 891255
+345765 51879
+34226 196343
+724903 695778
+471705 510828
+28381 511155
+205947 237576
+120161 963291
+599301 266995
+351143 633624
+745489 513991
+282620 644697
+704413 224150
+321826 989694
+661449 812755
+220361 494152
+62383 265588
+461930 566125
+261903 612960
+123787 703184
+214338 733607
+487535 152168
+631810 936637
+203631 124047
+757670 231110
+261452 71126
+232174 503158
+243659 544071
+533765 936586
+749340 565484
+575987 711565
+493504 486053
+52177 638369
+251328 955433
+174968 830431
+564038 1
+43634 389305
+842293 51572
+175618 191795
+939256 562276
+633401 449639
+469148 200708
+744778 865574
+802160 229158
+310993 794894
+506458 67851
+553903 886979
+525348 999961
+471745 122432
+952862 293027
+184493 646712
+552369 516899
+84822 744478
+936272 394661
+473288 776791
+742781 391880
+592587 106688
+488614 728280
+957437 337364
+648610 807125
+874975 268429
+671760 155067
+155028 945230
+67661 713459
+6485 626772
+789836 536874
+570125 707330
+968159 342204
+253216 654946
+948089 420783
+812662 726504
+349543 690869
+935501 405248
+258963 838156
+161632 892937
+677718 907572
+62639 552959
+498188 349477
+62935 734018
+877141 82200
+619073 585771
+809452 183328
+41883 189197
+360495 777611
+198393 295099
+537954 308583
+515803 11054
+932653 403848
+758356 967655
+860592 191615
+615539 919987
+472945 54661
+1000000 194529
+928546 487484
+86035 983423
+85545 322038
+505366 705108
+410656 894997
+672607 547248
+358698 771150
+596084 387351
+398404 413003
+816851 628239
+595893 331056
+39022 575206
+495192 972836
+27496 170912
+365440 484489
+488324 947984
+447758 810337
+648727 574359
+279466 533303
+944651 154092
+217691 690121
+977623 133609
+520959 576389
+989391 90058
+718296 919362
+766769 806241
+897798 830541
+803376 322142
+493054 909342
+393830 347224
+811559 374845
+701534 882153
+456511 259317
+308971 350260
+504351 252328
+458801 769973
+903581 722041
+814781 952775
+42832 424539
+343900 804172
+126764 277480
+108020 627020
+465513 24562
+450255 427747
+774970 474918
+849763 844084
+242588 586529
+362197 1000000
+901555 215451
+984130 671167
+441139 922257
+644297 442930
+912056 344719
+285609 975430
+779601 954888
+748719 629508
+772879 422716
+963629 856738
+800836 238391
+713309 413883
+774318 575806
+678686 79423
+147070 533258
+748708 40882
+228400 48624
+970880 732837
+692119 185890
+530608 131528
+106957 604174
+75413 816216
+962075 402909
+341977 824131
+197220 251305
+6047 821957
+235840 998056
+90213 235707
+315129 526509
+59766 768898
+326131 462198
+27173 808473
+57662 554530
+740419 514404
+162284 266132
+386657 787378
+119945 785592
+704853 462070
+802552 598371
+366027 46829
+868785 516124
+30531 372073
+607780 620976
+147485 637095
+405992 439260
+1 207250
+532075 248474
+803003 444982
+475738 589736
+855867 59773
+363502 638021
+423612 758875
+220944 483446
+598168 644816
+691644 539848
+572323 964194
+852618 76781
+214108 119205
+756299 460397
+416009 361592
+85194 162290
+410763 833818
+795151 617268
+723355 730117
+306241 270888
+425260 95573
+854447 669742
+669539 365224
+10039 591743
+131590 267706
+748251 701683
+294815 220264
+339468 600868
+577617 508922
+386866 95766
+774407 993625
+827442 472059
+89326 701521
+947989 622592
+409832 812680
+908252 254229
+923970 835091
+200314 762698
+870792 109860
+893917 210353
+428387 518733
+738996 642167
+759386 723201
+748474 594815
+690580 337002
+846978 135339
+607397 981338
+682858 674419
+813363 213074
+542105 630846
+401426 223194
+512
+279778 169592 NOT BIRD
+133131 918065 NOT BIRD
+980109 569756 NOT BIRD
+654527 177152 NOT BIRD
+984241 906578 NOT BIRD
+207434 448682 BIRD
+782070 415390 NOT BIRD
+73371 661147 NOT BIRD
+575024 777695 BIRD
+21415 412976 NOT BIRD
+191006 303605 BIRD
+625422 272696 NOT BIRD
+195177 965070 BIRD
+888681 122430 NOT BIRD
+1000000 479000 NOT BIRD
+243939 982767 NOT BIRD
+175680 887959 NOT BIRD
+836826 151250 NOT BIRD
+130873 366147 NOT BIRD
+543848 942917 BIRD
+847452 40078 NOT BIRD
+636499 417017 BIRD
+601569 443438 BIRD
+240350 449967 BIRD
+719349 111022 NOT BIRD
+218467 272670 NOT BIRD
+622778 641752 BIRD
+774027 825606 NOT BIRD
+140173 82831 NOT BIRD
+83089 431430 NOT BIRD
+639519 801444 BIRD
+572887 362462 BIRD
+16324 548902 NOT BIRD
+466290 446871 BIRD
+93663 233519 NOT BIRD
+366333 815425 BIRD
+524436 157621 NOT BIRD
+866393 191848 NOT BIRD
+949223 62901 NOT BIRD
+897005 64826 NOT BIRD
+698448 126951 NOT BIRD
+60909 552879 NOT BIRD
+126163 615305 NOT BIRD
+573033 795652 BIRD
+322903 216348 NOT BIRD
+138327 872744 NOT BIRD
+812299 263959 NOT BIRD
+520499 277951 NOT BIRD
+583399 65970 NOT BIRD
+164577 510513 NOT BIRD
+807879 70848 NOT BIRD
+877109 754350 NOT BIRD
+8765 10737 NOT BIRD
+804416 316152 NOT BIRD
+537115 87855 NOT BIRD
+926211 953221 NOT BIRD
+190169 701271 BIRD
+984472 490108 NOT BIRD
+50441 661690 NOT BIRD
+77305 782494 NOT BIRD
+148152 316654 NOT BIRD
+418853 32909 NOT BIRD
+945942 326424 NOT BIRD
+262093 746102 BIRD
+349947 255163 NOT BIRD
+819520 87127 NOT BIRD
+520790 573770 BIRD
+527250 872711 BIRD
+705291 208502 NOT BIRD
+487784 644043 BIRD
+320789 760513 BIRD
+353697 201212 NOT BIRD
+196472 519020 BIRD
+458925 845592 BIRD
+714088 492931 BIRD
+317566 193737 NOT BIRD
+891335 820753 NOT BIRD
+280397 154290 NOT BIRD
+488898 472297 BIRD
+649293 357097 BIRD
+926157 319200 NOT BIRD
+127368 462159 NOT BIRD
+646387 540323 BIRD
+491978 48075 NOT BIRD
+984909 334272 NOT BIRD
+694997 486767 BIRD
+515750 458781 BIRD
+670039 467936 BIRD
+142335 4341 NOT BIRD
+499431 762387 BIRD
+334983 8217 NOT BIRD
+313493 91186 NOT BIRD
+853815 527852 NOT BIRD
+418242 677341 BIRD
+268865 285754 BIRD
+755631 608255 BIRD
+730763 764673 BIRD
+198698 296073 BIRD
+719390 624222 BIRD
+481777 957621 BIRD
+489993 940311 BIRD
+97530 365510 NOT BIRD
+625381 918076 BIRD
+302721 117028 NOT BIRD
+588475 324310 BIRD
+713081 516500 BIRD
+477753 920039 BIRD
+290177 1000000 NOT BIRD
+914399 428652 NOT BIRD
+388371 676664 BIRD
+845033 940458 NOT BIRD
+210542 539235 BIRD
+128617 451504 NOT BIRD
+761997 733939 BIRD
+86306 918264 NOT BIRD
+119158 887804 NOT BIRD
+39196 129327 NOT BIRD
+878521 585259 NOT BIRD
+823524 272593 NOT BIRD
+16539 162965 NOT BIRD
+473349 51464 NOT BIRD
+12583 946308 NOT BIRD
+980438 422329 NOT BIRD
+714376 556434 BIRD
+148991 993260 NOT BIRD
+553147 534912 BIRD
+682473 305996 BIRD
+784083 554832 NOT BIRD
+56676 610197 NOT BIRD
+219640 579959 BIRD
+787455 454444 NOT BIRD
+733762 173961 NOT BIRD
+672442 620371 BIRD
+228876 195398 NOT BIRD
+738487 532421 BIRD
+273399 472102 BIRD
+95746 530939 NOT BIRD
+166930 145324 NOT BIRD
+777126 638229 NOT BIRD
+873436 471009 NOT BIRD
+844231 836680 NOT BIRD
+18191 159347 NOT BIRD
+154914 10948 NOT BIRD
+350311 359338 BIRD
+399084 905752 BIRD
+387537 117508 NOT BIRD
+434827 882410 BIRD
+580150 846136 BIRD
+218378 77592 NOT BIRD
+205739 365724 BIRD
+42418 906198 NOT BIRD
+718117 717775 BIRD
+245416 779466 BIRD
+604754 29950 NOT BIRD
+26857 992957 NOT BIRD
+660716 210802 NOT BIRD
+59477 218398 NOT BIRD
+905612 321739 NOT BIRD
+983203 592009 NOT BIRD
+865278 639404 NOT BIRD
+771476 76586 NOT BIRD
+5602 357999 NOT BIRD
+301419 690307 BIRD
+331368 661175 BIRD
+324324 982354 NOT BIRD
+51478 218968 NOT BIRD
+786227 359470 NOT BIRD
+107965 418447 NOT BIRD
+699973 573925 BIRD
+855728 947780 NOT BIRD
+448665 43726 NOT BIRD
+323016 665737 BIRD
+13322 522216 NOT BIRD
+674496 624110 BIRD
+173202 330758 NOT BIRD
+908521 64261 NOT BIRD
+267991 974832 NOT BIRD
+202789 428526 BIRD
+776713 304184 NOT BIRD
+724492 163044 NOT BIRD
+768217 403533 NOT BIRD
+950305 415498 NOT BIRD
+988872 433064 NOT BIRD
+612982 268400 NOT BIRD
+460091 918752 BIRD
+40703 926132 NOT BIRD
+15534 984988 NOT BIRD
+960412 830071 NOT BIRD
+780947 299469 NOT BIRD
+943990 985192 NOT BIRD
+863874 42993 NOT BIRD
+279371 549459 BIRD
+228786 895292 BIRD
+13538 770798 NOT BIRD
+932289 320800 NOT BIRD
+374772 560354 BIRD
+359760 708429 BIRD
+706182 640846 BIRD
+522002 776051 BIRD
+507193 204320 NOT BIRD
+66538 357081 NOT BIRD
+132348 794410 NOT BIRD
+27640 698395 NOT BIRD
+314789 107604 NOT BIRD
+635588 129794 NOT BIRD
+195942 128426 NOT BIRD
+420722 684113 BIRD
+61568 255333 NOT BIRD
+353970 303316 BIRD
+558290 132245 NOT BIRD
+431722 421515 BIRD
+226131 91010 NOT BIRD
+440877 39876 NOT BIRD
+548481 250232 NOT BIRD
+194626 957772 BIRD
+839404 630305 NOT BIRD
+523516 161258 NOT BIRD
+778848 84673 NOT BIRD
+598515 197918 NOT BIRD
+730759 833164 BIRD
+668625 491954 BIRD
+759634 217282 NOT BIRD
+315862 591309 BIRD
+566093 992975 NOT BIRD
+40216 709429 NOT BIRD
+186873 577823 BIRD
+864482 642158 NOT BIRD
+949154 643567 NOT BIRD
+147071 706542 NOT BIRD
+496586 639839 BIRD
+988540 131425 NOT BIRD
+722173 571084 BIRD
+829833 236873 NOT BIRD
+822807 376243 NOT BIRD
+48587 64092 NOT BIRD
+626410 462919 BIRD
+784919 701149 NOT BIRD
+428485 979246 NOT BIRD
+651379 36190 NOT BIRD
+291217 691648 BIRD
+938994 594216 NOT BIRD
+510077 165408 NOT BIRD
+263302 12586 NOT BIRD
+155896 691976 NOT BIRD
+219987 453811 BIRD
+199258 772213 BIRD
+416758 277487 NOT BIRD
+396004 647242 BIRD
+432193 966150 BIRD
+123841 948481 NOT BIRD
+718056 427398 BIRD
+399816 411205 BIRD
+412401 117185 NOT BIRD
+620728 169348 NOT BIRD
+74538 44318 NOT BIRD
+363102 967874 NOT BIRD
+640588 34191 NOT BIRD
+287829 401778 BIRD
+770331 714202 NOT BIRD
+718811 678004 BIRD
+662560 933023 BIRD
+73765 643386 NOT BIRD
+707301 380178 BIRD
+876648 380271 NOT BIRD
+920965 536259 NOT BIRD
+888838 428586 NOT BIRD
+439380 520169 BIRD
+357510 544862 BIRD
+71711 965558 NOT BIRD
+266067 818447 BIRD
+199089 827879 BIRD
+358826 555367 BIRD
+739004 682670 BIRD
+635626 738725 BIRD
+171885 415508 NOT BIRD
+600470 199532 NOT BIRD
+636990 830305 BIRD
+181852 101666 NOT BIRD
+147409 177208 NOT BIRD
+482207 23079 NOT BIRD
+310086 587761 BIRD
+865452 331355 NOT BIRD
+548122 148712 NOT BIRD
+286846 673370 BIRD
+218705 591027 BIRD
+418236 913296 BIRD
+248541 157107 NOT BIRD
+866558 356650 NOT BIRD
+560117 913701 BIRD
+583196 58815 NOT BIRD
+687308 953643 BIRD
+535014 80263 NOT BIRD
+200078 82061 NOT BIRD
+873447 822861 NOT BIRD
+980825 715639 NOT BIRD
+410472 780301 BIRD
+567579 445432 BIRD
+440580 263905 NOT BIRD
+354280 264228 NOT BIRD
+413095 928312 BIRD
+883089 74603 NOT BIRD
+479704 47330 NOT BIRD
+561764 885509 BIRD
+900976 788161 NOT BIRD
+616615 494011 BIRD
+396915 418565 BIRD
+358699 761354 BIRD
+138955 385388 NOT BIRD
+919534 875979 NOT BIRD
+847846 443038 NOT BIRD
+438800 109645 NOT BIRD
+486129 463559 BIRD
+887990 868838 NOT BIRD
+676150 990547 NOT BIRD
+170160 985701 NOT BIRD
+588724 961680 BIRD
+866430 348130 NOT BIRD
+251817 818510 BIRD
+644147 245821 NOT BIRD
+87184 511059 NOT BIRD
+196828 222096 NOT BIRD
+176738 816221 NOT BIRD
+561928 890049 BIRD
+552474 41992 NOT BIRD
+54526 94910 NOT BIRD
+16205 764443 NOT BIRD
+880686 863594 NOT BIRD
+215547 321443 BIRD
+461367 918246 BIRD
+488778 434582 BIRD
+710873 315116 BIRD
+527093 150800 NOT BIRD
+417141 472613 BIRD
+459132 682415 BIRD
+70393 601071 NOT BIRD
+351187 173534 NOT BIRD
+214780 367424 BIRD
+536222 944096 BIRD
+970819 772583 NOT BIRD
+921753 761569 NOT BIRD
+753220 354090 BIRD
+904019 659790 NOT BIRD
+892984 142228 NOT BIRD
+91750 702945 NOT BIRD
+692820 816135 BIRD
+382705 500203 BIRD
+750129 200475 NOT BIRD
+694224 297784 BIRD
+983158 610640 NOT BIRD
+744726 384863 BIRD
+615167 164214 NOT BIRD
+274957 654438 BIRD
+417184 671753 BIRD
+636481 622561 BIRD
+968967 548851 NOT BIRD
+469169 545534 BIRD
+185995 1 NOT BIRD
+483779 972405 NOT BIRD
+94418 103979 NOT BIRD
+479280 206372 NOT BIRD
+643494 746869 BIRD
+814283 40585 NOT BIRD
+486035 238320 NOT BIRD
+108595 845389 NOT BIRD
+173798 544208 NOT BIRD
+719331 419495 BIRD
+129086 193838 NOT BIRD
+101490 234661 NOT BIRD
+721821 486059 BIRD
+928192 720614 NOT BIRD
+191413 216247 NOT BIRD
+231997 327047 BIRD
+986668 229154 NOT BIRD
+832057 548445 NOT BIRD
+376264 20568 NOT BIRD
+312110 978010 NOT BIRD
+22299 404620 NOT BIRD
+256959 17224 NOT BIRD
+743017 113607 NOT BIRD
+979983 820759 NOT BIRD
+196229 523542 BIRD
+39627 869819 NOT BIRD
+268781 546729 BIRD
+333577 709674 BIRD
+870497 497566 NOT BIRD
+848506 459254 NOT BIRD
+253125 656625 BIRD
+270348 499434 BIRD
+900306 443732 NOT BIRD
+721064 109850 NOT BIRD
+760958 220511 NOT BIRD
+630776 38937 NOT BIRD
+177504 89359 NOT BIRD
+403530 126448 NOT BIRD
+901095 995594 NOT BIRD
+876700 757355 NOT BIRD
+49677 831225 NOT BIRD
+549110 443746 BIRD
+509193 313226 BIRD
+619042 925722 BIRD
+355904 34552 NOT BIRD
+911192 339610 NOT BIRD
+550 684295 NOT BIRD
+126998 814112 NOT BIRD
+122591 761154 NOT BIRD
+396297 95043 NOT BIRD
+743873 793790 BIRD
+187619 229308 NOT BIRD
+500844 967878 NOT BIRD
+942917 606754 NOT BIRD
+977468 966693 NOT BIRD
+833429 603941 NOT BIRD
+517724 388316 BIRD
+331835 866546 BIRD
+609340 748306 BIRD
+220735 47511 NOT BIRD
+14524 223416 NOT BIRD
+760183 481701 BIRD
+728061 289095 BIRD
+334814 122033 NOT BIRD
+817858 574012 NOT BIRD
+938150 381895 NOT BIRD
+842817 617321 NOT BIRD
+709362 853296 BIRD
+457667 732621 BIRD
+505178 250887 NOT BIRD
+1 165450 NOT BIRD
+726646 823885 BIRD
+532092 669938 BIRD
+654125 533186 BIRD
+744488 339350 BIRD
+126382 122981 NOT BIRD
+260054 256392 NOT BIRD
+629702 907527 BIRD
+878674 406848 NOT BIRD
+129560 548212 NOT BIRD
+295009 910311 BIRD
+635245 286932 BIRD
+821534 940088 NOT BIRD
+354719 837656 BIRD
+694068 586389 BIRD
+333400 152979 NOT BIRD
+589792 174070 NOT BIRD
+13670 554329 NOT BIRD
+936869 127598 NOT BIRD
+485080 674885 BIRD
+395390 243701 NOT BIRD
+198674 57461 NOT BIRD
+655113 114219 NOT BIRD
+9121 219420 NOT BIRD
+595509 495097 BIRD
+264840 515261 BIRD
+955261 661807 NOT BIRD
+509590 101111 NOT BIRD
+153539 170115 NOT BIRD
+344775 117793 NOT BIRD
+588475 711382 BIRD
+162287 116331 NOT BIRD
+792857 672877 NOT BIRD
+528628 534605 BIRD
+540076 267403 NOT BIRD
+55337 210620 NOT BIRD
+233495 487237 BIRD
+334605 353645 BIRD
+504720 750074 BIRD
+138864 599723 NOT BIRD
+366597 934452 BIRD
+999279 180922 NOT BIRD
+672156 626065 BIRD
+723112 242672 NOT BIRD
+990514 868400 NOT BIRD
+201133 605988 BIRD
+204722 608415 BIRD
+558366 566102 BIRD
+824792 549731 NOT BIRD
+940866 686897 NOT BIRD
+875317 168838 NOT BIRD
+572590 755604 BIRD
+715006 21009 NOT BIRD
+957678 595623 NOT BIRD
+342429 215216 NOT BIRD
+948416 374884 NOT BIRD
+556830 589889 BIRD
+639283 554740 BIRD
+189013 854195 BIRD
+875910 174722 NOT BIRD
+44747 150463 NOT BIRD
+316702 492801 BIRD
+854063 350769 NOT BIRD
+966037 397244 NOT BIRD
+697604 166830 NOT BIRD
+72487 443281 NOT BIRD
+178727 437216 NOT BIRD
+733466 635873 BIRD
+587661 909247 BIRD
+762382 523764 BIRD
+912844 79146 NOT BIRD
+921996 26197 NOT BIRD
+272764 62190 NOT BIRD
+186359 296836 BIRD
+353188 5511 NOT BIRD
+796468 572966 NOT BIRD
+233684 572484 BIRD
+385908 161535 NOT BIRD
+295154 873516 BIRD
+818917 774510 NOT BIRD
+898062 67765 NOT BIRD
+440611 438470 BIRD
+502800 609525 BIRD
+799635 667345 NOT BIRD
+321497 691202 BIRD
+894462 412661 NOT BIRD
+333
+722959 81556
+831591 983297
+144831 695632
+918122 217498
+512651 534698
+825560 244624
+333507 847919
+262332 409676
+848146 851585
+808011 702942
+205741 457670
+641366 37201
+969101 521727
+359575 332567
+745228 737836
+335743 770388
+753684 984538
+680169 167333
+384830 414866
+949564 114642
+359265 413832
+261750 775123
+701150 692771
+60708 524082
+227023 549295
+523316 868718
+905918 949116
+987194 164682
+497248 875018
+129206 346769
+117156 758827
+743365 464948
+148633 387192
+802057 939885
+570879 533462
+463646 267972
+559446 930143
+139266 725395
+765828 260596
+809890 199973
+68690 509203
+458318 333206
+497887 490960
+882329 445511
+308631 511486
+786665 527886
+509186 425787
+812978 46381
+986265 657818
+707631 131386
+915710 557143
+3638 171276
+413023 475155
+252102 142903
+859227 178850
+688052 61992
+911549 444268
+935227 662721
+624584 925787
+437272 333908
+861793 933214
+875352 740288
+786668 887330
+545147 204681
+336067 772933
+846427 252778
+940405 768128
+243282 850064
+509318 353427
+48629 11736
+590079 368544
+812812 253032
+432105 501627
+427413 264390
+598297 56688
+506253 381036
+637676 976442
+863771 381605
+586285 424343
+197275 408918
+178047 438703
+206830 560054
+410117 118451
+988230 966464
+978199 435787
+804330 36858
+289889 568277
+586255 617141
+881531 721993
+295032 530019
+427406 996179
+972620 801285
+699241 65081
+489424 352743
+761660 801877
+756932 203050
+763103 456058
+90860 963761
+446576 689572
+125358 79089
+115946 424774
+509402 446039
+579532 922187
+160531 95656
+625674 977414
+973592 455563
+773199 53080
+118160 462564
+815306 988791
+790667 607583
+326985 93317
+549374 547598
+27711 90087
+296010 156585
+235674 474286
+415412 937719
+383758 867971
+306509 924813
+20469 963289
+940702 467040
+438954 162494
+731925 430645
+409560 212152
+717294 850085
+974019 224865
+834533 507960
+571910 301003
+907442 900258
+56843 599620
+590257 719803
+657522 292516
+676838 5668
+446833 557631
+520919 983347
+450386 983653
+146146 977972
+924968 405691
+617842 878071
+244507 334528
+75744 851487
+359446 734877
+35880 910277
+326886 447707
+563678 459673
+179475 383728
+192595 670287
+675954 353348
+910978 869433
+369131 639138
+622790 948248
+442571 819516
+225206 285288
+679710 367539
+218418 359399
+210885 924216
+659092 810513
+237141 86682
+50741 211323
+187347 564027
+464106 614418
+801056 366822
+720169 656701
+42485 477010
+632499 147499
+95746 411615
+747482 255289
+56928 538317
+422207 489039
+364789 736637
+177204 156976
+967488 92025
+695058 352647
+563970 204629
+768655 745798
+876568 267668
+634489 749112
+405812 677623
+670984 871010
+18508 964648
+892614 303483
+75123 630605
+168921 640095
+645485 648402
+385038 1
+264454 10273
+102297 78593
+431239 231942
+952922 797355
+543152 511560
+779228 237928
+987039 936071
+613694 930068
+317429 909203
+873850 801029
+104511 335936
+482893 282816
+922910 695985
+344386 168165
+275644 84747
+95019 245775
+324367 56449
+804742 197316
+511022 271958
+299869 757663
+511942 570525
+506596 79096
+525516 498981
+408183 636641
+437669 842944
+695232 798384
+81199 58532
+1 178124
+862640 520461
+605207 615254
+861028 138283
+194732 700225
+1000000 701747
+973704 515825
+273488 441265
+11790 789924
+385372 785429
+800761 34737
+671377 910887
+270182 208943
+523679 625397
+200280 481765
+176240 604877
+125337 471148
+602753 38880
+177162 246895
+947120 980132
+681878 888245
+404070 877363
+318628 171933
+961857 193909
+495689 846769
+881505 347228
+774466 296450
+21744 69233
+210981 44647
+526412 61774
+666651 411261
+398760 1000000
+741530 308339
+555234 1512
+497995 435044
+839640 18705
+412419 696225
+868157 760061
+953969 247398
+94166 346365
+209944 966010
+262459 975670
+44902 500761
+61760 800554
+862328 772235
+699847 104523
+323525 45330
+870020 98606
+616469 65055
+16450 941605
+476661 114463
+810687 372441
+132502 889080
+136477 195196
+57912 86470
+568831 230643
+722664 784208
+284968 347641
+148195 283918
+56152 863079
+967601 526874
+572203 755998
+854603 291126
+872532 958574
+900179 987423
+618237 888981
+261421 376839
+265918 428924
+140471 393922
+996744 918747
+665741 714734
+498941 81926
+429567 388404
+672321 300261
+163339 94113
+620986 244824
+821 130940
+938417 709540
+668113 371775
+359197 810948
+699928 568291
+461482 493786
+439061 477700
+387974 243751
+162497 579531
+810616 901069
+982994 828237
+732993 309557
+126169 928912
+23024 921665
+166489 805859
+453150 644009
+869900 167309
+55436 391566
+202513 54365
+622655 930984
+424769 418792
+412844 600488
+844239 863829
+959711 800817
+218237 6735
+351324 770327
+596235 717582
+646494 84316
+5980 722403
+528261 669517
+829878 172468
+856129 497763
+889328 699777
+754141 911564
+358899 91841
+510632 893148
+493635 783668
+647496 923475
+240643 854225
+860960 123559
+893885 975231
+692813 728635
+812950 490119
+728873 855658
+525174 335281
+24101 773485
+729
+130909 719225 NOT BIRD
+254467 476219 NOT BIRD
+664703 451450 NOT BIRD
+671173 660614 NOT BIRD
+400045 516271 NOT BIRD
+173529 557796 NOT BIRD
+961128 945551 NOT BIRD
+638054 33082 NOT BIRD
+406820 391105 NOT BIRD
+202569 158628 NOT BIRD
+438145 936137 NOT BIRD
+914364 567870 NOT BIRD
+882165 576915 NOT BIRD
+59130 314593 NOT BIRD
+91752 865221 NOT BIRD
+165899 267481 NOT BIRD
+111449 210193 NOT BIRD
+144530 549485 NOT BIRD
+51987 713272 NOT BIRD
+726966 576804 NOT BIRD
+179454 407397 NOT BIRD
+263675 885250 NOT BIRD
+840589 650273 NOT BIRD
+155182 563646 NOT BIRD
+536754 664543 NOT BIRD
+320586 165484 NOT BIRD
+530778 872658 NOT BIRD
+80262 24606 NOT BIRD
+309885 330960 NOT BIRD
+886688 44132 NOT BIRD
+810437 476225 NOT BIRD
+212038 830111 NOT BIRD
+862311 614711 NOT BIRD
+942308 797828 NOT BIRD
+123203 40073 NOT BIRD
+805038 374070 NOT BIRD
+677695 873965 NOT BIRD
+218653 485308 NOT BIRD
+549612 757533 NOT BIRD
+110095 598096 NOT BIRD
+586320 681976 NOT BIRD
+416430 945309 NOT BIRD
+547492 988669 NOT BIRD
+345319 356265 NOT BIRD
+385392 911746 NOT BIRD
+275813 3980 NOT BIRD
+149777 933151 NOT BIRD
+635084 393099 NOT BIRD
+908969 449660 NOT BIRD
+23416 816105 NOT BIRD
+221744 101941 NOT BIRD
+683404 681862 NOT BIRD
+672072 473820 NOT BIRD
+544688 644440 NOT BIRD
+456433 273719 NOT BIRD
+976764 509849 NOT BIRD
+909914 67368 NOT BIRD
+819364 302581 NOT BIRD
+269023 756447 NOT BIRD
+601479 276275 NOT BIRD
+703420 906198 NOT BIRD
+901633 122440 NOT BIRD
+375452 787815 NOT BIRD
+536243 682 NOT BIRD
+326313 75219 NOT BIRD
+352513 51499 NOT BIRD
+419880 303591 NOT BIRD
+238813 705459 NOT BIRD
+511611 775114 NOT BIRD
+787885 237386 NOT BIRD
+694083 755777 NOT BIRD
+332874 495911 NOT BIRD
+637041 919448 NOT BIRD
+154074 15057 NOT BIRD
+229292 655354 NOT BIRD
+797142 784787 NOT BIRD
+100732 890983 NOT BIRD
+322542 423445 NOT BIRD
+97655 775271 NOT BIRD
+851392 912471 NOT BIRD
+123520 651149 NOT BIRD
+619430 609599 NOT BIRD
+538878 469680 NOT BIRD
+70286 737917 NOT BIRD
+241991 542395 NOT BIRD
+26777 673186 NOT BIRD
+917760 156490 NOT BIRD
+341204 92377 NOT BIRD
+116474 750724 NOT BIRD
+28944 437033 NOT BIRD
+196445 911226 NOT BIRD
+322395 595854 NOT BIRD
+308426 129707 NOT BIRD
+46342 300600 NOT BIRD
+588737 625566 NOT BIRD
+261922 696175 NOT BIRD
+934763 563925 NOT BIRD
+27139 565110 NOT BIRD
+294214 888836 NOT BIRD
+731246 826568 NOT BIRD
+158824 132044 NOT BIRD
+271029 44688 NOT BIRD
+400735 609465 NOT BIRD
+217686 713119 NOT BIRD
+359603 887058 NOT BIRD
+55777 819340 NOT BIRD
+136053 778399 NOT BIRD
+701162 687920 NOT BIRD
+106349 422293 NOT BIRD
+932916 305844 NOT BIRD
+64960 734690 NOT BIRD
+625999 359980 NOT BIRD
+235463 824016 NOT BIRD
+464933 80125 NOT BIRD
+351990 898928 NOT BIRD
+687682 306467 NOT BIRD
+982432 975928 NOT BIRD
+670351 580151 NOT BIRD
+608996 727864 NOT BIRD
+431191 169791 NOT BIRD
+165880 859316 NOT BIRD
+42211 707663 NOT BIRD
+866226 343391 NOT BIRD
+462702 379852 NOT BIRD
+877982 633999 NOT BIRD
+184448 764099 NOT BIRD
+160375 466328 NOT BIRD
+256877 304608 NOT BIRD
+501093 360402 NOT BIRD
+670883 38895 NOT BIRD
+46550 650304 NOT BIRD
+754213 843024 NOT BIRD
+97603 661742 NOT BIRD
+993806 232274 NOT BIRD
+627804 267738 NOT BIRD
+908255 655192 NOT BIRD
+374582 246678 NOT BIRD
+195541 336948 NOT BIRD
+72294 97568 NOT BIRD
+627541 983535 NOT BIRD
+277844 300692 NOT BIRD
+120868 783728 NOT BIRD
+298961 825326 NOT BIRD
+531235 765853 NOT BIRD
+798972 169081 NOT BIRD
+970515 450291 NOT BIRD
+733545 432300 NOT BIRD
+70492 574683 NOT BIRD
+684411 973943 NOT BIRD
+667945 390647 NOT BIRD
+968636 994586 NOT BIRD
+268715 645074 NOT BIRD
+610392 49774 NOT BIRD
+376244 68428 NOT BIRD
+545324 597239 NOT BIRD
+511966 753854 NOT BIRD
+944265 851427 NOT BIRD
+518948 323581 NOT BIRD
+9242 991276 NOT BIRD
+916241 763968 NOT BIRD
+910826 647848 NOT BIRD
+555899 325923 NOT BIRD
+122024 641218 NOT BIRD
+706803 255473 NOT BIRD
+304041 917314 NOT BIRD
+574247 378126 NOT BIRD
+425673 809453 NOT BIRD
+749254 974324 NOT BIRD
+256881 726038 NOT BIRD
+20848 162162 NOT BIRD
+185047 266230 NOT BIRD
+27321 855285 NOT BIRD
+184890 713054 NOT BIRD
+956714 697566 NOT BIRD
+874027 58321 NOT BIRD
+768505 480752 NOT BIRD
+577957 415148 NOT BIRD
+68633 293808 NOT BIRD
+794670 207768 NOT BIRD
+956832 130969 NOT BIRD
+223061 970410 NOT BIRD
+594698 237028 NOT BIRD
+307751 59544 NOT BIRD
+521669 4083 NOT BIRD
+579989 655424 NOT BIRD
+577092 127157 NOT BIRD
+992239 173137 NOT BIRD
+802399 161141 NOT BIRD
+10166 898398 NOT BIRD
+141134 925239 NOT BIRD
+627895 972927 NOT BIRD
+864922 205661 NOT BIRD
+924465 982067 NOT BIRD
+444899 427011 NOT BIRD
+100322 345021 NOT BIRD
+743830 653409 NOT BIRD
+916966 213949 NOT BIRD
+594458 868797 NOT BIRD
+9207 592278 NOT BIRD
+934445 110428 NOT BIRD
+907371 101761 NOT BIRD
+113031 316154 NOT BIRD
+611450 125245 NOT BIRD
+554812 274790 NOT BIRD
+899832 429651 NOT BIRD
+553240 197204 NOT BIRD
+283540 25497 NOT BIRD
+152337 362381 NOT BIRD
+744614 501662 NOT BIRD
+371393 651109 NOT BIRD
+473153 974392 NOT BIRD
+789306 409218 NOT BIRD
+430902 741668 NOT BIRD
+705691 514935 NOT BIRD
+651693 216747 NOT BIRD
+848897 51585 NOT BIRD
+390745 630252 NOT BIRD
+753125 642236 NOT BIRD
+254787 248678 NOT BIRD
+422247 864327 NOT BIRD
+912990 930772 NOT BIRD
+838559 904587 NOT BIRD
+580227 24137 NOT BIRD
+95161 238784 NOT BIRD
+828259 524595 NOT BIRD
+879843 710237 NOT BIRD
+26446 965470 NOT BIRD
+668682 504243 NOT BIRD
+917359 711704 NOT BIRD
+298037 663778 NOT BIRD
+228808 503596 NOT BIRD
+649747 300214 NOT BIRD
+673883 402490 NOT BIRD
+429019 935667 NOT BIRD
+953613 690886 NOT BIRD
+180201 614150 NOT BIRD
+145670 869958 NOT BIRD
+166265 32863 NOT BIRD
+394320 948892 NOT BIRD
+574450 152411 NOT BIRD
+78045 778176 NOT BIRD
+894611 316930 NOT BIRD
+297100 694243 NOT BIRD
+749118 168134 NOT BIRD
+956355 737185 NOT BIRD
+570505 650847 NOT BIRD
+956814 444351 NOT BIRD
+989676 780652 NOT BIRD
+454919 785635 NOT BIRD
+607329 707976 NOT BIRD
+385504 444705 NOT BIRD
+218786 410242 NOT BIRD
+913028 541877 NOT BIRD
+597514 380099 BIRD
+334698 130986 NOT BIRD
+501896 868190 NOT BIRD
+946246 269241 NOT BIRD
+726898 332314 NOT BIRD
+512532 78003 NOT BIRD
+736859 701660 NOT BIRD
+181563 416117 NOT BIRD
+591805 208619 NOT BIRD
+650033 895731 NOT BIRD
+546483 396294 NOT BIRD
+677469 162326 NOT BIRD
+545658 401065 NOT BIRD
+331250 210307 NOT BIRD
+179916 976363 NOT BIRD
+257918 248447 NOT BIRD
+959577 491801 NOT BIRD
+892046 342483 NOT BIRD
+617016 95021 NOT BIRD
+29099 66344 NOT BIRD
+941744 467047 NOT BIRD
+620422 465262 NOT BIRD
+21486 830879 NOT BIRD
+231792 182040 NOT BIRD
+208155 995798 NOT BIRD
+456601 536453 NOT BIRD
+948401 622343 NOT BIRD
+807235 445091 NOT BIRD
+902256 449401 NOT BIRD
+484951 561868 NOT BIRD
+951997 840719 NOT BIRD
+933611 666052 NOT BIRD
+764489 685206 NOT BIRD
+462880 766368 NOT BIRD
+458677 178780 NOT BIRD
+995129 287459 NOT BIRD
+133823 137704 NOT BIRD
+578913 980229 NOT BIRD
+28314 714799 NOT BIRD
+590181 582736 BIRD
+430899 479772 NOT BIRD
+613302 318551 NOT BIRD
+298507 777751 NOT BIRD
+581227 774788 NOT BIRD
+760006 3616 NOT BIRD
+563817 440599 NOT BIRD
+701520 850533 NOT BIRD
+198100 725220 NOT BIRD
+429250 923493 NOT BIRD
+11985 24021 NOT BIRD
+491756 609499 NOT BIRD
+326658 663326 NOT BIRD
+104408 650763 NOT BIRD
+395547 435393 NOT BIRD
+399163 166550 NOT BIRD
+839761 872735 NOT BIRD
+206645 574049 NOT BIRD
+448216 925538 NOT BIRD
+371708 855939 NOT BIRD
+395728 814653 NOT BIRD
+5227 363547 NOT BIRD
+668552 376043 NOT BIRD
+835667 485488 NOT BIRD
+271059 926144 NOT BIRD
+953960 431674 NOT BIRD
+826694 729914 NOT BIRD
+917095 75617 NOT BIRD
+842632 639192 NOT BIRD
+698570 917217 NOT BIRD
+29574 624492 NOT BIRD
+393120 343751 NOT BIRD
+285514 71117 NOT BIRD
+771001 125141 NOT BIRD
+213497 799925 NOT BIRD
+161522 870255 NOT BIRD
+891435 856099 NOT BIRD
+967052 681703 NOT BIRD
+122595 230303 NOT BIRD
+39811 227119 NOT BIRD
+180654 111995 NOT BIRD
+524404 392598 NOT BIRD
+595521 194779 NOT BIRD
+237013 181863 NOT BIRD
+36937 520966 NOT BIRD
+423543 131126 NOT BIRD
+279641 1000000 NOT BIRD
+477695 118763 NOT BIRD
+707998 459374 NOT BIRD
+451468 158968 NOT BIRD
+563462 557131 NOT BIRD
+472411 501219 NOT BIRD
+183541 838426 NOT BIRD
+365404 977498 NOT BIRD
+402721 887570 NOT BIRD
+50198 527491 NOT BIRD
+778147 328933 NOT BIRD
+413261 538161 NOT BIRD
+872634 714441 NOT BIRD
+31601 46018 NOT BIRD
+105083 417406 NOT BIRD
+606301 969448 NOT BIRD
+961078 562245 NOT BIRD
+938575 750562 NOT BIRD
+826145 175891 NOT BIRD
+869987 154509 NOT BIRD
+198919 556670 NOT BIRD
+737079 238471 NOT BIRD
+967871 397966 NOT BIRD
+13889 781811 NOT BIRD
+947646 617123 NOT BIRD
+917093 48600 NOT BIRD
+995689 952488 NOT BIRD
+746250 39917 NOT BIRD
+438493 492748 NOT BIRD
+109353 381004 NOT BIRD
+666022 319457 NOT BIRD
+904492 36056 NOT BIRD
+302458 165916 NOT BIRD
+84268 684762 NOT BIRD
+217742 751560 NOT BIRD
+782693 923440 NOT BIRD
+735181 217973 NOT BIRD
+775097 989936 NOT BIRD
+784196 184121 NOT BIRD
+165199 720802 NOT BIRD
+484655 643821 NOT BIRD
+37063 765758 NOT BIRD
+202978 624773 NOT BIRD
+404091 484363 NOT BIRD
+672002 357841 NOT BIRD
+111794 695317 NOT BIRD
+329766 949885 NOT BIRD
+319701 716493 NOT BIRD
+20173 745703 NOT BIRD
+257326 213405 NOT BIRD
+901146 790460 NOT BIRD
+666903 549888 NOT BIRD
+808028 697455 NOT BIRD
+808742 180184 NOT BIRD
+166583 747179 NOT BIRD
+378251 48268 NOT BIRD
+328135 132049 NOT BIRD
+560979 467362 NOT BIRD
+306682 577771 NOT BIRD
+36438 472375 NOT BIRD
+826897 48530 NOT BIRD
+893136 109340 NOT BIRD
+590591 723563 NOT BIRD
+287126 57116 NOT BIRD
+34304 794760 NOT BIRD
+598923 204405 NOT BIRD
+730971 725843 NOT BIRD
+714684 93398 NOT BIRD
+292454 297006 NOT BIRD
+764829 37139 NOT BIRD
+329710 34597 NOT BIRD
+439049 933200 NOT BIRD
+678964 15058 NOT BIRD
+736079 421295 NOT BIRD
+47190 636274 NOT BIRD
+251594 17834 NOT BIRD
+493788 293997 NOT BIRD
+103538 414645 NOT BIRD
+916895 96272 NOT BIRD
+954033 84580 NOT BIRD
+988629 625678 NOT BIRD
+438181 510024 NOT BIRD
+969590 287505 NOT BIRD
+390885 655577 NOT BIRD
+27158 827125 NOT BIRD
+561343 32977 NOT BIRD
+371691 354104 NOT BIRD
+786336 406201 NOT BIRD
+882607 172981 NOT BIRD
+483539 748567 NOT BIRD
+625568 88981 NOT BIRD
+135591 275457 NOT BIRD
+423095 900981 NOT BIRD
+595023 721820 NOT BIRD
+422148 795089 NOT BIRD
+971476 399196 NOT BIRD
+325579 287601 NOT BIRD
+248131 669793 NOT BIRD
+937464 639170 NOT BIRD
+686030 41793 NOT BIRD
+775011 914801 NOT BIRD
+50467 292790 NOT BIRD
+467799 108958 NOT BIRD
+189618 894716 NOT BIRD
+984706 104062 NOT BIRD
+900254 340565 NOT BIRD
+704206 654763 NOT BIRD
+373998 340651 NOT BIRD
+529519 329226 NOT BIRD
+87663 200407 NOT BIRD
+2464 71479 NOT BIRD
+295253 568117 NOT BIRD
+920562 200346 NOT BIRD
+815278 772021 NOT BIRD
+435691 938718 NOT BIRD
+776256 43915 NOT BIRD
+431018 636939 NOT BIRD
+288020 71893 NOT BIRD
+133597 754978 NOT BIRD
+334003 375526 NOT BIRD
+921833 198456 NOT BIRD
+489950 796395 NOT BIRD
+690295 477505 NOT BIRD
+462315 110060 NOT BIRD
+917384 964937 NOT BIRD
+961298 320871 NOT BIRD
+114588 577058 NOT BIRD
+186481 53802 NOT BIRD
+941458 420895 NOT BIRD
+833336 801154 NOT BIRD
+31791 785427 NOT BIRD
+344537 288516 NOT BIRD
+822041 603208 NOT BIRD
+448453 838462 NOT BIRD
+413389 405345 NOT BIRD
+250611 407919 NOT BIRD
+344020 186747 NOT BIRD
+397821 429297 NOT BIRD
+335067 959865 NOT BIRD
+136220 624030 NOT BIRD
+437998 138549 NOT BIRD
+242865 91252 NOT BIRD
+846073 533905 NOT BIRD
+200886 183203 NOT BIRD
+606231 294816 NOT BIRD
+14149 840164 NOT BIRD
+717247 863161 NOT BIRD
+146543 746 NOT BIRD
+106408 324811 NOT BIRD
+730437 106686 NOT BIRD
+385337 721895 NOT BIRD
+992940 885247 NOT BIRD
+526844 909487 NOT BIRD
+226399 755767 NOT BIRD
+521214 50500 NOT BIRD
+877729 274972 NOT BIRD
+740889 266407 NOT BIRD
+741635 85508 NOT BIRD
+66445 335134 NOT BIRD
+689482 403473 NOT BIRD
+411377 640736 NOT BIRD
+812975 315996 NOT BIRD
+722461 750472 NOT BIRD
+478227 31021 NOT BIRD
+528726 28807 NOT BIRD
+320050 632823 NOT BIRD
+586456 767339 NOT BIRD
+188315 619101 NOT BIRD
+523448 617406 NOT BIRD
+443273 238470 NOT BIRD
+84008 106322 NOT BIRD
+916355 359510 NOT BIRD
+666826 121990 NOT BIRD
+214198 927665 NOT BIRD
+759356 959738 NOT BIRD
+908530 29376 NOT BIRD
+675868 493094 NOT BIRD
+811321 697700 NOT BIRD
+428726 160293 NOT BIRD
+183548 722034 NOT BIRD
+289869 456904 NOT BIRD
+165731 119503 NOT BIRD
+287720 595075 NOT BIRD
+731736 793108 NOT BIRD
+691473 469367 NOT BIRD
+237200 190703 NOT BIRD
+730293 232089 NOT BIRD
+427992 859929 NOT BIRD
+104636 192436 NOT BIRD
+826669 532039 NOT BIRD
+283573 831265 NOT BIRD
+919427 730851 NOT BIRD
+514501 63142 NOT BIRD
+307608 62259 NOT BIRD
+293326 791926 NOT BIRD
+484029 280948 NOT BIRD
+716117 194851 NOT BIRD
+92397 784622 NOT BIRD
+284833 185713 NOT BIRD
+333223 531882 NOT BIRD
+680839 577949 NOT BIRD
+928041 913885 NOT BIRD
+991183 931903 NOT BIRD
+569793 237640 NOT BIRD
+361718 275112 NOT BIRD
+159017 520408 NOT BIRD
+353868 2903 NOT BIRD
+654841 215690 NOT BIRD
+840554 856469 NOT BIRD
+888787 118235 NOT BIRD
+983087 206669 NOT BIRD
+413324 95028 NOT BIRD
+345226 419164 NOT BIRD
+582866 741449 NOT BIRD
+857977 887694 NOT BIRD
+378385 327264 NOT BIRD
+897639 767214 NOT BIRD
+113329 923280 NOT BIRD
+969797 204446 NOT BIRD
+88031 770445 NOT BIRD
+811051 669665 NOT BIRD
+422430 766076 NOT BIRD
+841594 790528 NOT BIRD
+99394 322513 NOT BIRD
+987087 424291 NOT BIRD
+830702 887787 NOT BIRD
+597915 26651 NOT BIRD
+37546 35734 NOT BIRD
+758344 699657 NOT BIRD
+528788 720486 NOT BIRD
+198452 146452 NOT BIRD
+480880 555505 NOT BIRD
+787759 894233 NOT BIRD
+110271 578187 NOT BIRD
+534562 845005 NOT BIRD
+938700 2504 NOT BIRD
+481702 538387 NOT BIRD
+33787 971909 NOT BIRD
+249795 35110 NOT BIRD
+970280 68108 NOT BIRD
+633084 705487 NOT BIRD
+704940 153917 NOT BIRD
+599173 541129 BIRD
+177359 286285 NOT BIRD
+538715 130835 NOT BIRD
+57571 478824 NOT BIRD
+595957 173866 NOT BIRD
+84217 466822 NOT BIRD
+119327 830028 NOT BIRD
+703786 951577 NOT BIRD
+409272 601913 NOT BIRD
+79541 450701 NOT BIRD
+137021 813071 NOT BIRD
+423305 446848 NOT BIRD
+70492 707247 NOT BIRD
+65667 502207 NOT BIRD
+239532 268570 NOT BIRD
+1000000 516634 NOT BIRD
+52733 314836 NOT BIRD
+4309 879184 NOT BIRD
+606222 413812 BIRD
+573274 97875 NOT BIRD
+386344 486878 NOT BIRD
+349543 991404 NOT BIRD
+56789 673289 NOT BIRD
+558995 926592 NOT BIRD
+343916 721113 NOT BIRD
+860549 627942 NOT BIRD
+691736 135340 NOT BIRD
+570920 278416 NOT BIRD
+501083 125277 NOT BIRD
+598958 381410 BIRD
+602187 717082 NOT BIRD
+593590 706127 NOT BIRD
+266878 118476 NOT BIRD
+193469 601316 NOT BIRD
+430933 666174 NOT BIRD
+575227 970563 NOT BIRD
+226918 14008 NOT BIRD
+505334 110186 NOT BIRD
+146962 727024 NOT BIRD
+528371 950083 NOT BIRD
+761805 262767 NOT BIRD
+467931 478146 NOT BIRD
+586406 43068 NOT BIRD
+704073 664779 NOT BIRD
+370246 878188 NOT BIRD
+857160 919160 NOT BIRD
+871167 853385 NOT BIRD
+981352 479346 NOT BIRD
+708375 676225 NOT BIRD
+658457 890539 NOT BIRD
+437575 220162 NOT BIRD
+432073 151971 NOT BIRD
+991492 193722 NOT BIRD
+172622 502350 NOT BIRD
+50809 520798 NOT BIRD
+969969 486531 NOT BIRD
+823353 27490 NOT BIRD
+302698 795367 NOT BIRD
+495275 584928 NOT BIRD
+902165 521451 NOT BIRD
+638679 502697 NOT BIRD
+307001 245746 NOT BIRD
+500722 456726 NOT BIRD
+519423 286814 NOT BIRD
+40221 820975 NOT BIRD
+43103 725380 NOT BIRD
+70593 3297 NOT BIRD
+865959 636028 NOT BIRD
+967238 766462 NOT BIRD
+488689 605271 NOT BIRD
+991385 135241 NOT BIRD
+237130 586433 NOT BIRD
+210207 502401 NOT BIRD
+13373 893508 NOT BIRD
+834347 457237 NOT BIRD
+76078 71775 NOT BIRD
+79374 172632 NOT BIRD
+715401 613194 NOT BIRD
+998215 872806 NOT BIRD
+119837 144043 NOT BIRD
+255077 317445 NOT BIRD
+357861 129525 NOT BIRD
+860261 764958 NOT BIRD
+753769 901112 NOT BIRD
+727357 73040 NOT BIRD
+799131 285189 NOT BIRD
+488115 56792 NOT BIRD
+617660 415339 BIRD
+6817 639844 NOT BIRD
+150860 831586 NOT BIRD
+468304 544721 NOT BIRD
+114181 249239 NOT BIRD
+395490 707239 NOT BIRD
+296601 891798 NOT BIRD
+1 89728 NOT BIRD
+687532 122005 NOT BIRD
+260675 746711 NOT BIRD
+676013 450790 NOT BIRD
+315856 870270 NOT BIRD
+663794 804316 NOT BIRD
+208514 374551 NOT BIRD
+974104 199862 NOT BIRD
+681343 383033 NOT BIRD
+89492 459169 NOT BIRD
+179219 289073 NOT BIRD
+817575 846334 NOT BIRD
+80637 1 NOT BIRD
+531427 79934 NOT BIRD
+401696 574802 NOT BIRD
+722364 76487 NOT BIRD
+96914 245383 NOT BIRD
+296775 398935 NOT BIRD
+196159 183018 NOT BIRD
+655328 846239 NOT BIRD
+460752 838763 NOT BIRD
+307085 717279 NOT BIRD
+26161 799679 NOT BIRD
+622446 626401 NOT BIRD
+197248 645487 NOT BIRD
+790086 496781 NOT BIRD
+551821 11868 NOT BIRD
+467107 251820 NOT BIRD
+650124 465876 NOT BIRD
+12714 877625 NOT BIRD
+851477 378866 NOT BIRD
+85107 575677 NOT BIRD
+884785 106414 NOT BIRD
+27537 201436 NOT BIRD
+189376 344236 NOT BIRD
+686156 888732 NOT BIRD
+698024 671942 NOT BIRD
+466195 552066 NOT BIRD
+932070 728963 NOT BIRD
+326047 134723 NOT BIRD
+221264 195810 NOT BIRD
+796940 717649 NOT BIRD
+903353 62924 NOT BIRD
+621141 434359 NOT BIRD
+965376 428240 NOT BIRD
+854107 135720 NOT BIRD
+526049 149638 NOT BIRD
+594466 231727 NOT BIRD
+323428 780923 NOT BIRD
+974503 496594 NOT BIRD
+170312 708626 NOT BIRD
+404312 804839 NOT BIRD
+467235 986158 NOT BIRD
+901594 568613 NOT BIRD
+846185 178605 NOT BIRD
+500
+977972 997686
+368145 498257
+647894 979847
+679744 410545
+5010 395972
+693246 878540
+493054 844789
+819291 189839
+414817 949965
+144492 505955
+910266 219655
+722164 619605
+30775 377501
+795446 290776
+469381 63085
+577123 641630
+139886 447352
+427198 945267
+872163 304131
+216455 623294
+501833 877172
+238312 909700
+99539 511238
+977555 57603
+79909 30707
+766713 122046
+258002 990174
+884026 488876
+296003 805129
+384565 679471
+321101 765383
+729087 961687
+423305 977338
+281469 672636
+812281 295467
+688990 497923
+923974 830466
+858055 927302
+501256 539864
+570570 835609
+474006 581164
+87689 337282
+342509 248360
+569840 971715
+651185 154864
+920246 954404
+916091 488637
+465975 165684
+354672 855747
+151214 263795
+278069 166952
+513769 1000000
+283856 718394
+258258 371824
+723784 301463
+398978 345179
+198813 714142
+962501 486667
+458381 541321
+696184 532340
+3095 625917
+630906 132782
+814817 919185
+774932 96880
+877026 169488
+852792 442497
+799051 671446
+389839 366560
+738383 599259
+417073 648096
+993275 462167
+176308 816051
+819069 192087
+249759 655160
+703851 793801
+419717 462295
+111428 706945
+142482 566974
+663853 926244
+95732 433765
+392613 57230
+728675 948523
+315082 191663
+307273 118514
+766609 569817
+548335 724346
+56748 276235
+984673 240994
+896153 875816
+669616 234432
+213078 116355
+823299 605684
+172658 324505
+250748 482132
+915896 352862
+410092 862831
+327705 824860
+16523 655118
+773631 159139
+728955 840147
+80844 56592
+849178 793641
+34634 137591
+13406 833851
+584634 447138
+563492 199373
+321409 797711
+638567 903142
+901626 10418
+879631 405666
+268497 333873
+158733 806074
+461192 596201
+271691 691607
+531753 751174
+807765 516997
+310637 612597
+750187 173295
+7145 345270
+792407 279945
+995669 108130
+905840 872250
+291744 833429
+843846 544406
+950071 193369
+43593 239829
+1000000 734919
+847472 202325
+893931 507093
+774619 119162
+636159 425684
+554632 98735
+272029 946795
+808417 304818
+101114 279173
+903654 117175
+505777 613135
+446563 809493
+870250 313872
+23592 806761
+46589 336673
+587943 67184
+269509 92490
+115935 435414
+70928 163439
+105474 406905
+505639 223438
+686584 660105
+481275 777668
+573192 11352
+128527 98740
+711874 476846
+802690 150655
+464526 158437
+965197 189292
+525964 488117
+555300 528137
+136978 630258
+582024 824808
+504599 252912
+659816 652951
+392740 610072
+786529 681807
+459474 79323
+607027 784155
+882894 549017
+25862 735553
+886207 594768
+753204 344904
+534195 350732
+838848 234752
+279240 576510
+206767 910499
+735307 416217
+185481 788790
+958092 756257
+882680 361648
+43454 867183
+462858 669208
+453362 19279
+568296 69884
+321788 336256
+447375 110509
+455412 207994
+75077 716930
+951681 989606
+82467 430276
+340774 747272
+163488 289234
+594375 592432
+348688 865320
+226968 68819
+452353 231368
+900575 786773
+806052 915210
+985093 870289
+722896 890699
+1207 306880
+31225 170270
+887199 456619
+962576 622653
+52928 355231
+102502 45043
+850628 393702
+502485 782341
+647661 961354
+546524 851173
+82540 390980
+177752 998877
+914086 499466
+886106 500155
+390853 415531
+238762 609001
+779270 392060
+365030 786339
+408991 666468
+538050 843957
+405351 461919
+371972 640551
+422892 255978
+733684 874456
+241980 586904
+977883 280207
+279083 840871
+856689 155634
+655789 709521
+641403 742794
+868147 562993
+955052 880164
+666502 163768
+830236 836433
+680390 591845
+53763 884637
+525188 85740
+858070 942086
+332893 464431
+51334 591753
+388311 574873
+932095 29216
+701201 183746
+409618 788783
+47929 873341
+436334 51020
+447535 916075
+79842 907737
+744170 630389
+222233 426429
+311066 940911
+543002 792347
+734432 352605
+817035 401071
+509175 583676
+158548 384720
+413935 897486
+597583 606995
+395777 631487
+504828 7200
+58219 443705
+876131 457513
+881601 22105
+652493 955973
+898753 625770
+83032 391077
+183423 209818
+562422 626034
+543456 434206
+17882 895808
+280527 52631
+466468 692781
+299775 210813
+842300 64050
+587601 695552
+655608 863479
+837343 645819
+184275 531739
+4063 718943
+861065 836768
+227844 902815
+628985 944096
+86481 411267
+361824 707758
+603566 629937
+198919 379705
+72486 400444
+611257 665386
+245787 888612
+100515 969908
+349738 833387
+995557 756123
+804213 187080
+906022 179831
+532950 808275
+227441 283438
+743886 760794
+688412 856425
+564183 830366
+976654 566587
+946292 684100
+84543 175572
+357309 535129
+423740 695799
+182058 119447
+469185 524255
+796729 531795
+718874 981093
+160924 1
+925567 141248
+941037 210225
+971018 153007
+9432 684922
+31640 175781
+742368 89966
+774065 8293
+700217 205011
+256491 858607
+70758 573877
+209676 680230
+720836 769167
+300962 678860
+659953 33916
+634856 536187
+193786 337228
+547452 76774
+229781 134823
+819744 34822
+726954 755564
+845529 367735
+892380 985673
+707035 619593
+994551 592596
+682824 963525
+160107 581660
+350827 892499
+87711 880942
+914858 651788
+704326 264015
+601242 66065
+142839 898112
+32934 665045
+699866 372619
+644534 369029
+736764 943172
+928844 490062
+626006 145495
+738090 635879
+599403 136908
+718568 937265
+346116 275861
+156803 585746
+753885 950178
+214192 588012
+654076 458210
+872673 331785
+996829 313266
+202236 905606
+790987 213047
+156218 846769
+336830 44102
+189596 601413
+753643 479187
+616095 444037
+897653 869398
+145258 851014
+436759 243768
+193945 302060
+406423 190643
+165204 408136
+256272 60499
+890116 37877
+459834 253101
+466147 92352
+939120 250820
+811273 138716
+256480 792302
+271488 868
+961256 10123
+879520 403934
+254947 858909
+102676 24777
+843189 691705
+398699 812973
+737460 249611
+826461 80255
+118131 993732
+246832 716577
+808928 577964
+345136 229330
+884397 264399
+56700 156408
+673628 140876
+150998 328188
+732121 634883
+493791 546869
+87998 987068
+195124 112819
+925791 931186
+697148 110175
+190429 663250
+173333 39961
+272889 824911
+919226 936516
+682197 81816
+862566 264361
+937121 566593
+223821 919266
+247453 610748
+761982 374818
+438039 495925
+999344 772125
+884943 526036
+457221 710820
+820994 327085
+506686 670720
+710680 527774
+352684 680019
+616534 983568
+581735 271909
+52622 298731
+865323 444301
+363566 989742
+116841 605495
+496665 127370
+623294 395174
+167298 934703
+460738 138990
+849809 568592
+895676 434310
+621381 670802
+714927 402362
+82380 332061
+831980 67610
+855870 215265
+513995 413715
+374367 908491
+414584 895670
+501164 254284
+381653 47776
+442950 997828
+448882 521298
+660287 126599
+695191 909619
+860280 510095
+697248 590866
+509579 481661
+813721 412174
+479783 591958
+807223 162052
+575766 852005
+760495 837569
+733238 466484
+720767 691431
+739206 750754
+264933 618771
+140069 698507
+825106 713815
+139785 316707
+826802 520296
+627513 65
+481725 40401
+452575 137092
+245401 811797
+973848 448709
+300713 568975
+406544 65966
+532449 577560
+785342 656133
+923238 769568
+388338 40899
+739406 188171
+901985 44758
+361465 564511
+601158 41769
+558185 704618
+745018 228670
+882113 39909
+368057 713944
+162653 127514
+696488 858257
+924222 979717
+73628 103031
+275516 973022
+742589 375321
+416220 198753
+386923 647279
+692036 155625
+236487 805259
+847028 53500
+1 837644
+582665 405212
+961473 19487
+733430 464778
+592291 329529
+704137 412434
+908503 288778
+908161 628358
+117732 498482
+873803 183676
+382428 376672
+23950 290022
+961998 769351
+1000
+192210 183256 NOT BIRD
+997340 887393 NOT BIRD
+905500 32102 NOT BIRD
+89175 149833 NOT BIRD
+987954 42857 NOT BIRD
+273656 66806 NOT BIRD
+364617 299143 NOT BIRD
+818956 101332 NOT BIRD
+678507 661637 BIRD
+532234 241428 NOT BIRD
+715490 71000 NOT BIRD
+602882 829358 NOT BIRD
+634983 979866 NOT BIRD
+301168 145208 NOT BIRD
+344024 667999 BIRD
+927181 513516 NOT BIRD
+742676 804677 BIRD
+844007 810674 NOT BIRD
+505643 852796 NOT BIRD
+263422 546413 BIRD
+850773 839950 NOT BIRD
+680131 325696 NOT BIRD
+176348 808781 BIRD
+321555 713717 BIRD
+505906 224179 NOT BIRD
+19421 722594 NOT BIRD
+340449 11017 NOT BIRD
+151122 180408 NOT BIRD
+520270 168755 NOT BIRD
+66682 835608 NOT BIRD
+906631 551046 NOT BIRD
+232326 981974 NOT BIRD
+557458 15782 NOT BIRD
+271174 717277 BIRD
+11704 719939 NOT BIRD
+250650 66624 NOT BIRD
+778018 856842 NOT BIRD
+958426 389734 NOT BIRD
+127180 766633 NOT BIRD
+479139 681877 BIRD
+30184 860543 NOT BIRD
+528509 406333 BIRD
+60643 148605 NOT BIRD
+777919 67224 NOT BIRD
+497858 823750 BIRD
+564481 602533 BIRD
+937674 400736 NOT BIRD
+327408 539388 BIRD
+610392 829161 NOT BIRD
+292268 155555 NOT BIRD
+669162 32278 NOT BIRD
+591846 848336 NOT BIRD
+740450 380368 BIRD
+324026 986209 NOT BIRD
+147775 379575 NOT BIRD
+266660 300997 NOT BIRD
+667395 473068 BIRD
+206782 423157 BIRD
+552294 848022 NOT BIRD
+707848 916419 NOT BIRD
+256478 463953 BIRD
+104813 558023 NOT BIRD
+485180 180602 NOT BIRD
+987740 863822 NOT BIRD
+883667 324961 NOT BIRD
+184663 800309 BIRD
+657731 356490 BIRD
+80887 850344 NOT BIRD
+445260 187957 NOT BIRD
+361678 652313 BIRD
+825631 408936 NOT BIRD
+900005 351073 NOT BIRD
+80606 885056 NOT BIRD
+944428 159488 NOT BIRD
+785740 757945 BIRD
+586049 536880 BIRD
+458890 582475 BIRD
+825585 779112 NOT BIRD
+13541 215234 NOT BIRD
+665853 687298 BIRD
+591140 383562 BIRD
+942213 819950 NOT BIRD
+827268 877503 NOT BIRD
+986755 420236 NOT BIRD
+261051 983412 NOT BIRD
+314282 913902 NOT BIRD
+896756 29054 NOT BIRD
+192219 318289 NOT BIRD
+407453 204761 NOT BIRD
+94750 536493 NOT BIRD
+994663 746255 NOT BIRD
+814613 781646 NOT BIRD
+208467 717042 BIRD
+145054 249396 NOT BIRD
+128465 726176 NOT BIRD
+42366 505048 NOT BIRD
+587772 386320 BIRD
+422412 210129 NOT BIRD
+627172 375874 BIRD
+680017 71511 NOT BIRD
+426271 433000 BIRD
+207916 901981 NOT BIRD
+441310 796821 BIRD
+207057 35281 NOT BIRD
+449584 776846 BIRD
+954632 779462 NOT BIRD
+340951 96359 NOT BIRD
+67432 310011 NOT BIRD
+959657 232234 NOT BIRD
+547520 561909 BIRD
+496871 986334 NOT BIRD
+398851 921773 NOT BIRD
+712024 671824 BIRD
+263656 146693 NOT BIRD
+40501 766616 NOT BIRD
+336314 31356 NOT BIRD
+949024 338461 NOT BIRD
+775387 233337 NOT BIRD
+7620 66976 NOT BIRD
+569529 527786 BIRD
+72214 184965 NOT BIRD
+993986 784765 NOT BIRD
+182161 592481 BIRD
+845205 841506 NOT BIRD
+611821 813939 BIRD
+159528 235956 NOT BIRD
+497988 612603 BIRD
+731324 846553 NOT BIRD
+798299 664286 NOT BIRD
+842436 958028 NOT BIRD
+543752 799288 BIRD
+328517 137419 NOT BIRD
+920997 390753 NOT BIRD
+278855 356109 BIRD
+92793 585121 NOT BIRD
+845100 370985 NOT BIRD
+457703 493162 BIRD
+820607 564363 NOT BIRD
+1245 410950 NOT BIRD
+475624 781509 BIRD
+791263 721595 BIRD
+445034 733895 BIRD
+835786 256531 NOT BIRD
+191894 477680 BIRD
+777014 544033 BIRD
+147998 738558 NOT BIRD
+157512 92610 NOT BIRD
+721874 944649 NOT BIRD
+649176 528011 BIRD
+430684 942375 NOT BIRD
+668630 682822 BIRD
+918876 483373 NOT BIRD
+175407 612440 BIRD
+169438 178856 NOT BIRD
+713470 24125 NOT BIRD
+968379 478539 NOT BIRD
+60988 294405 NOT BIRD
+5636 567972 NOT BIRD
+49998 178498 NOT BIRD
+992372 790268 NOT BIRD
+191545 910365 NOT BIRD
+191270 821725 BIRD
+803709 661765 NOT BIRD
+498916 853943 NOT BIRD
+39393 754366 NOT BIRD
+34283 431802 NOT BIRD
+328687 773588 BIRD
+896659 789237 NOT BIRD
+75156 526760 NOT BIRD
+381776 429809 BIRD
+292140 279894 NOT BIRD
+630216 282256 NOT BIRD
+291981 236197 NOT BIRD
+662275 849193 NOT BIRD
+416640 664329 BIRD
+364793 192935 NOT BIRD
+138381 689918 NOT BIRD
+443969 764241 BIRD
+970728 844198 NOT BIRD
+400537 490505 BIRD
+680430 645534 BIRD
+479037 992108 NOT BIRD
+715233 13599 NOT BIRD
+80777 871503 NOT BIRD
+745106 744674 BIRD
+454392 657237 BIRD
+144309 604082 NOT BIRD
+908549 879614 NOT BIRD
+752747 568156 BIRD
+759603 848206 NOT BIRD
+405136 510030 BIRD
+397244 463994 BIRD
+927194 564526 NOT BIRD
+315048 473389 BIRD
+59721 44527 NOT BIRD
+716957 548655 BIRD
+837391 933928 NOT BIRD
+233356 457581 BIRD
+801512 425203 NOT BIRD
+649717 363552 BIRD
+159746 735141 NOT BIRD
+140092 787159 NOT BIRD
+220969 350917 BIRD
+210709 629907 BIRD
+771587 506026 BIRD
+836594 127250 NOT BIRD
+770521 719217 BIRD
+228102 971845 NOT BIRD
+653304 616669 BIRD
+533207 46943 NOT BIRD
+784699 753171 BIRD
+88209 348182 NOT BIRD
+439125 373141 BIRD
+69031 808941 NOT BIRD
+575057 76140 NOT BIRD
+218658 919412 NOT BIRD
+454227 995993 NOT BIRD
+426071 909963 NOT BIRD
+559091 573641 BIRD
+606033 38830 NOT BIRD
+359203 670087 BIRD
+223736 977442 NOT BIRD
+596876 941239 NOT BIRD
+922168 642357 NOT BIRD
+514660 554183 BIRD
+434071 753947 BIRD
+946415 273953 NOT BIRD
+372730 80831 NOT BIRD
+946370 632162 NOT BIRD
+985200 836796 NOT BIRD
+171638 90988 NOT BIRD
+149079 129878 NOT BIRD
+606670 256976 NOT BIRD
+249026 823198 BIRD
+803208 974802 NOT BIRD
+73506 701463 NOT BIRD
+863810 163133 NOT BIRD
+460992 595381 BIRD
+93153 937347 NOT BIRD
+929948 354755 NOT BIRD
+20935 378195 NOT BIRD
+150812 277189 NOT BIRD
+924139 916270 NOT BIRD
+747336 152227 NOT BIRD
+722138 826704 NOT BIRD
+939952 499487 NOT BIRD
+619436 639045 BIRD
+214816 725018 BIRD
+152162 183719 NOT BIRD
+506916 105142 NOT BIRD
+401462 11764 NOT BIRD
+678650 90024 NOT BIRD
+594919 833714 NOT BIRD
+263498 184073 NOT BIRD
+90201 299809 NOT BIRD
+106039 218752 NOT BIRD
+745084 727552 BIRD
+986453 100162 NOT BIRD
+170171 417412 NOT BIRD
+791665 860518 NOT BIRD
+803428 233571 NOT BIRD
+409803 143911 NOT BIRD
+759868 205063 NOT BIRD
+943940 706705 NOT BIRD
+760100 472034 BIRD
+978851 959501 NOT BIRD
+222755 386918 BIRD
+322916 950123 NOT BIRD
+256679 728142 BIRD
+117196 658323 NOT BIRD
+350767 128122 NOT BIRD
+494677 999383 NOT BIRD
+216091 65644 NOT BIRD
+439147 726824 BIRD
+911181 167853 NOT BIRD
+870681 699082 NOT BIRD
+257598 852702 NOT BIRD
+724072 751404 BIRD
+452214 152911 NOT BIRD
+626888 724588 BIRD
+271361 87929 NOT BIRD
+270743 771049 BIRD
+336387 380324 BIRD
+579562 233115 NOT BIRD
+747415 62549 NOT BIRD
+962848 135730 NOT BIRD
+815549 704114 NOT BIRD
+83305 495252 NOT BIRD
+236215 125658 NOT BIRD
+960802 496390 NOT BIRD
+565082 500669 BIRD
+852482 855715 NOT BIRD
+232806 705437 BIRD
+982272 287601 NOT BIRD
+44820 792560 NOT BIRD
+180549 725051 BIRD
+401015 528222 BIRD
+412618 105343 NOT BIRD
+538275 922887 NOT BIRD
+551016 676292 BIRD
+568037 572936 BIRD
+423751 740940 BIRD
+645539 696039 BIRD
+933139 987524 NOT BIRD
+242051 858571 NOT BIRD
+483453 993383 NOT BIRD
+528027 91043 NOT BIRD
+149721 4252 NOT BIRD
+72607 517116 NOT BIRD
+748898 266195 NOT BIRD
+838185 492426 NOT BIRD
+95476 283739 NOT BIRD
+791515 927533 NOT BIRD
+779038 320484 NOT BIRD
+637608 695706 BIRD
+630991 632099 BIRD
+722033 265392 NOT BIRD
+242636 299700 NOT BIRD
+276104 746625 BIRD
+542298 248176 NOT BIRD
+551075 300743 NOT BIRD
+834813 437698 NOT BIRD
+762345 998403 NOT BIRD
+599180 204646 NOT BIRD
+811237 376732 NOT BIRD
+443335 790867 BIRD
+708727 688455 BIRD
+524778 630421 BIRD
+271402 722107 BIRD
+35929 402751 NOT BIRD
+853024 832292 NOT BIRD
+290721 616369 BIRD
+289124 979570 NOT BIRD
+10121 650636 NOT BIRD
+386852 617092 BIRD
+177719 221156 NOT BIRD
+382525 456209 BIRD
+529298 445999 BIRD
+767756 678425 BIRD
+170507 186953 NOT BIRD
+519150 754131 BIRD
+135519 872383 NOT BIRD
+631440 341799 NOT BIRD
+798427 573560 NOT BIRD
+415519 920853 NOT BIRD
+636674 79382 NOT BIRD
+609234 681245 BIRD
+55233 508187 NOT BIRD
+250009 376257 BIRD
+953313 515729 NOT BIRD
+707443 207481 NOT BIRD
+96177 752256 NOT BIRD
+954328 587751 NOT BIRD
+527887 228722 NOT BIRD
+448739 396165 BIRD
+528120 466811 BIRD
+725717 715176 BIRD
+750255 862417 NOT BIRD
+126511 538955 NOT BIRD
+158591 499600 NOT BIRD
+366071 630752 BIRD
+118326 281053 NOT BIRD
+222429 583224 BIRD
+967502 516834 NOT BIRD
+880018 765222 NOT BIRD
+346828 429129 BIRD
+578355 729708 BIRD
+440771 155873 NOT BIRD
+496077 153622 NOT BIRD
+512029 401379 BIRD
+142780 118801 NOT BIRD
+940184 543665 NOT BIRD
+39759 97409 NOT BIRD
+72944 89129 NOT BIRD
+838165 125087 NOT BIRD
+267293 609783 BIRD
+997001 655303 NOT BIRD
+669225 426539 BIRD
+339199 948029 NOT BIRD
+740577 596030 BIRD
+375729 918973 NOT BIRD
+435745 124338 NOT BIRD
+533154 448029 BIRD
+622282 510500 BIRD
+747368 540472 BIRD
+873502 450461 NOT BIRD
+45157 707278 NOT BIRD
+471695 58801 NOT BIRD
+419724 367446 BIRD
+15753 688520 NOT BIRD
+451077 5270 NOT BIRD
+575414 497503 BIRD
+539795 413567 BIRD
+50294 402093 NOT BIRD
+590766 947210 NOT BIRD
+557578 330492 NOT BIRD
+264855 497418 BIRD
+840007 661344 NOT BIRD
+723805 10846 NOT BIRD
+412324 215899 NOT BIRD
+417594 161528 NOT BIRD
+431448 482885 BIRD
+845015 756339 NOT BIRD
+763459 562946 BIRD
+710669 991834 NOT BIRD
+41160 200793 NOT BIRD
+538577 283254 NOT BIRD
+716272 927222 NOT BIRD
+243469 526533 BIRD
+459367 61919 NOT BIRD
+620894 129409 NOT BIRD
+620131 647975 BIRD
+376469 258307 NOT BIRD
+939415 924784 NOT BIRD
+447600 641555 BIRD
+648393 465443 BIRD
+447998 363261 BIRD
+375219 525933 BIRD
+418104 44963 NOT BIRD
+480022 287798 NOT BIRD
+609431 459308 BIRD
+773757 48411 NOT BIRD
+32063 585313 NOT BIRD
+956847 967230 NOT BIRD
+114753 628957 NOT BIRD
+96548 485000 NOT BIRD
+459808 414906 BIRD
+502092 883388 NOT BIRD
+547054 584493 BIRD
+351203 45418 NOT BIRD
+810510 965710 NOT BIRD
+375272 23248 NOT BIRD
+476937 217267 NOT BIRD
+444166 787755 BIRD
+589474 297657 NOT BIRD
+590825 771511 BIRD
+5730 410108 NOT BIRD
+405469 13055 NOT BIRD
+989961 991220 NOT BIRD
+551730 387488 BIRD
+33792 780129 NOT BIRD
+573391 814905 BIRD
+790657 107085 NOT BIRD
+578412 947679 NOT BIRD
+392420 261472 NOT BIRD
+680282 690017 BIRD
+90390 731461 NOT BIRD
+103444 232712 NOT BIRD
+611015 236054 NOT BIRD
+998502 302801 NOT BIRD
+294982 720751 BIRD
+109886 465563 NOT BIRD
+216970 618350 BIRD
+681001 731721 BIRD
+942472 321961 NOT BIRD
+148840 985322 NOT BIRD
+880300 755859 NOT BIRD
+113011 532125 NOT BIRD
+349064 713859 BIRD
+651864 401905 BIRD
+888967 158032 NOT BIRD
+870881 947951 NOT BIRD
+489230 311259 NOT BIRD
+220950 981576 NOT BIRD
+59262 746656 NOT BIRD
+44583 420508 NOT BIRD
+316793 258289 NOT BIRD
+848917 219163 NOT BIRD
+79127 799832 NOT BIRD
+481031 991515 NOT BIRD
+639062 181699 NOT BIRD
+587012 183216 NOT BIRD
+414623 294619 NOT BIRD
+912550 655696 NOT BIRD
+659206 181420 NOT BIRD
+596065 165968 NOT BIRD
+370705 299354 NOT BIRD
+589867 829392 NOT BIRD
+906050 472439 NOT BIRD
+897564 464550 NOT BIRD
+595614 624876 BIRD
+778829 674168 BIRD
+589800 594340 BIRD
+761847 520093 BIRD
+943266 666795 NOT BIRD
+625585 389110 BIRD
+924939 156007 NOT BIRD
+270682 239696 NOT BIRD
+743120 688653 BIRD
+207669 216736 NOT BIRD
+348896 742201 BIRD
+539415 906727 NOT BIRD
+133754 690969 NOT BIRD
+170198 373481 NOT BIRD
+836992 1247 NOT BIRD
+226101 288217 NOT BIRD
+898459 171252 NOT BIRD
+654506 941342 NOT BIRD
+859510 301299 NOT BIRD
+76245 567304 NOT BIRD
+334797 247225 NOT BIRD
+757876 522758 BIRD
+448844 609824 BIRD
+338677 286689 NOT BIRD
+339923 725400 BIRD
+144491 623729 NOT BIRD
+315742 147642 NOT BIRD
+773436 596493 BIRD
+74734 832377 NOT BIRD
+158389 327732 NOT BIRD
+405613 30756 NOT BIRD
+444723 599028 BIRD
+54546 706714 NOT BIRD
+341235 948153 NOT BIRD
+582986 876142 NOT BIRD
+206714 641123 BIRD
+354355 148556 NOT BIRD
+950847 70799 NOT BIRD
+299575 131196 NOT BIRD
+627307 567455 BIRD
+174414 79958 NOT BIRD
+773441 443609 BIRD
+480154 565136 BIRD
+944659 651858 NOT BIRD
+820800 560904 NOT BIRD
+978274 326224 NOT BIRD
+643181 752386 BIRD
+713980 494290 BIRD
+361527 9629 NOT BIRD
+928981 116053 NOT BIRD
+525290 380866 BIRD
+485251 51291 NOT BIRD
+566738 682790 BIRD
+218595 885186 NOT BIRD
+295850 428817 BIRD
+138425 555433 NOT BIRD
+890810 888762 NOT BIRD
+385100 92798 NOT BIRD
+911080 764033 NOT BIRD
+27133 734842 NOT BIRD
+407998 849309 NOT BIRD
+975640 654541 NOT BIRD
+174781 749566 BIRD
+59966 324745 NOT BIRD
+488782 360933 BIRD
+560566 734273 BIRD
+965680 85887 NOT BIRD
+58477 597033 NOT BIRD
+822509 338510 NOT BIRD
+73702 957865 NOT BIRD
+923010 506201 NOT BIRD
+93903 579827 NOT BIRD
+843468 655054 NOT BIRD
+684564 297019 NOT BIRD
+45497 157577 NOT BIRD
+296121 313985 NOT BIRD
+382007 125168 NOT BIRD
+495391 827161 NOT BIRD
+350252 430605 BIRD
+308117 945129 NOT BIRD
+814317 486784 NOT BIRD
+910495 952789 NOT BIRD
+565549 910784 NOT BIRD
+862567 43560 NOT BIRD
+20143 236301 NOT BIRD
+850479 434175 NOT BIRD
+491999 192615 NOT BIRD
+319159 916734 NOT BIRD
+749764 732034 BIRD
+211244 369842 BIRD
+698027 81351 NOT BIRD
+167167 232222 NOT BIRD
+594303 993347 NOT BIRD
+637862 114292 NOT BIRD
+874162 403448 NOT BIRD
+308336 770804 BIRD
+500951 917928 NOT BIRD
+934036 963411 NOT BIRD
+666069 536989 BIRD
+552262 944466 NOT BIRD
+633613 692763 BIRD
+382186 255376 NOT BIRD
+891885 244836 NOT BIRD
+6176 799844 NOT BIRD
+925975 733770 NOT BIRD
+696778 204191 NOT BIRD
+614705 525090 BIRD
+94468 854339 NOT BIRD
+631456 502746 BIRD
+92273 933621 NOT BIRD
+301387 59386 NOT BIRD
+73114 915882 NOT BIRD
+317950 939545 NOT BIRD
+634145 557509 BIRD
+884267 329687 NOT BIRD
+88457 976025 NOT BIRD
+613546 930699 NOT BIRD
+984236 419027 NOT BIRD
+486981 841391 NOT BIRD
+936953 446175 NOT BIRD
+996339 603220 NOT BIRD
+428572 910230 NOT BIRD
+368116 115777 NOT BIRD
+441977 696856 BIRD
+771663 800462 BIRD
+264039 830042 NOT BIRD
+711090 72751 NOT BIRD
+130116 930164 NOT BIRD
+487858 398397 BIRD
+934032 14436 NOT BIRD
+53604 239100 NOT BIRD
+480185 281501 NOT BIRD
+112313 397016 NOT BIRD
+1000000 346832 NOT BIRD
+125981 930793 NOT BIRD
+472374 399019 BIRD
+545124 472054 BIRD
+475287 674985 BIRD
+390035 345800 BIRD
+920823 536299 NOT BIRD
+676274 663750 BIRD
+957774 303892 NOT BIRD
+871142 372605 NOT BIRD
+217973 809433 BIRD
+148765 720942 NOT BIRD
+64136 404112 NOT BIRD
+52541 351321 NOT BIRD
+727525 9619 NOT BIRD
+589676 314385 NOT BIRD
+125974 107008 NOT BIRD
+306076 350014 BIRD
+609967 162976 NOT BIRD
+498923 972473 NOT BIRD
+824707 894283 NOT BIRD
+545648 141611 NOT BIRD
+949760 514920 NOT BIRD
+301080 876953 NOT BIRD
+827051 784110 NOT BIRD
+141435 682905 NOT BIRD
+764794 971734 NOT BIRD
+631159 697738 BIRD
+310486 100014 NOT BIRD
+282959 976416 NOT BIRD
+693593 723959 BIRD
+835203 205827 NOT BIRD
+866474 836459 NOT BIRD
+743427 47578 NOT BIRD
+527536 827589 NOT BIRD
+726792 818772 BIRD
+698525 915983 NOT BIRD
+396262 655520 BIRD
+12628 701131 NOT BIRD
+989043 389413 NOT BIRD
+229354 60264 NOT BIRD
+435180 555822 BIRD
+787990 113380 NOT BIRD
+351919 104344 NOT BIRD
+179507 912740 NOT BIRD
+514630 64538 NOT BIRD
+430613 357770 BIRD
+602484 932147 NOT BIRD
+819966 137683 NOT BIRD
+209378 170056 NOT BIRD
+269642 1739 NOT BIRD
+341815 10662 NOT BIRD
+455194 887491 NOT BIRD
+75890 630794 NOT BIRD
+504981 117523 NOT BIRD
+569519 164491 NOT BIRD
+443640 421898 BIRD
+375787 410534 BIRD
+29821 795431 NOT BIRD
+716228 192955 NOT BIRD
+717966 95873 NOT BIRD
+244979 744497 BIRD
+648821 344651 BIRD
+279615 732795 BIRD
+913489 989208 NOT BIRD
+77980 908776 NOT BIRD
+16229 859325 NOT BIRD
+426762 756838 BIRD
+738544 740482 BIRD
+931498 60443 NOT BIRD
+543723 106134 NOT BIRD
+288219 421466 BIRD
+149221 78613 NOT BIRD
+882015 707305 NOT BIRD
+871223 928238 NOT BIRD
+296350 137799 NOT BIRD
+672026 433231 BIRD
+428863 172302 NOT BIRD
+685696 319863 NOT BIRD
+262490 497244 BIRD
+368624 390852 BIRD
+306441 518777 BIRD
+901405 408032 NOT BIRD
+125061 946107 NOT BIRD
+53298 280149 NOT BIRD
+191097 527679 BIRD
+140679 369540 NOT BIRD
+829332 743981 NOT BIRD
+149194 545184 NOT BIRD
+646437 601283 BIRD
+37288 105231 NOT BIRD
+72416 636549 NOT BIRD
+996799 488789 NOT BIRD
+459257 490249 BIRD
+255757 890076 NOT BIRD
+783435 193829 NOT BIRD
+669326 277579 NOT BIRD
+413307 66058 NOT BIRD
+474842 283399 NOT BIRD
+76124 186435 NOT BIRD
+181354 868313 NOT BIRD
+334254 435165 BIRD
+339394 308458 NOT BIRD
+345995 83156 NOT BIRD
+752422 982914 NOT BIRD
+946251 452321 NOT BIRD
+740181 112825 NOT BIRD
+806239 914006 NOT BIRD
+89637 544519 NOT BIRD
+792424 840576 NOT BIRD
+660736 266718 NOT BIRD
+95900 762850 NOT BIRD
+404358 847750 NOT BIRD
+487513 929447 NOT BIRD
+986778 986753 NOT BIRD
+439098 299816 NOT BIRD
+551922 912665 NOT BIRD
+982280 711191 NOT BIRD
+526798 406672 BIRD
+883725 93346 NOT BIRD
+666794 856143 NOT BIRD
+429644 832998 NOT BIRD
+277393 144107 NOT BIRD
+723191 794609 BIRD
+709944 307457 NOT BIRD
+526111 1 NOT BIRD
+955127 300598 NOT BIRD
+666317 252298 NOT BIRD
+589340 526588 BIRD
+682685 406866 BIRD
+55180 79568 NOT BIRD
+888177 896652 NOT BIRD
+548635 842340 NOT BIRD
+859595 192385 NOT BIRD
+683403 29942 NOT BIRD
+772481 370628 BIRD
+73078 634060 NOT BIRD
+841727 482117 NOT BIRD
+884666 796101 NOT BIRD
+291531 669586 BIRD
+371098 910443 NOT BIRD
+784102 334446 NOT BIRD
+142793 188092 NOT BIRD
+335178 835482 NOT BIRD
+365119 206063 NOT BIRD
+735747 286586 NOT BIRD
+886158 409572 NOT BIRD
+884626 4035 NOT BIRD
+197078 264815 NOT BIRD
+866663 114935 NOT BIRD
+293457 164091 NOT BIRD
+627903 268426 NOT BIRD
+332346 293641 NOT BIRD
+684180 867491 NOT BIRD
+890242 300936 NOT BIRD
+693179 934135 NOT BIRD
+102750 339814 NOT BIRD
+623137 818570 BIRD
+887951 139052 NOT BIRD
+2885 344199 NOT BIRD
+166975 873580 NOT BIRD
+951752 774059 NOT BIRD
+761745 974991 NOT BIRD
+629235 802364 BIRD
+446522 481265 BIRD
+897008 41637 NOT BIRD
+236821 337755 NOT BIRD
+55390 36382 NOT BIRD
+194441 619634 BIRD
+54991 916315 NOT BIRD
+928571 563306 NOT BIRD
+218981 20106 NOT BIRD
+193972 621159 BIRD
+512687 70910 NOT BIRD
+510303 204840 NOT BIRD
+551940 229011 NOT BIRD
+406046 946361 NOT BIRD
+958780 799164 NOT BIRD
+94765 758751 NOT BIRD
+11080 606288 NOT BIRD
+90737 973062 NOT BIRD
+627194 23163 NOT BIRD
+764705 25015 NOT BIRD
+835614 304963 NOT BIRD
+556806 214145 NOT BIRD
+785816 86201 NOT BIRD
+248528 371617 BIRD
+47691 377501 NOT BIRD
+322793 955126 NOT BIRD
+445433 243544 NOT BIRD
+418494 586953 BIRD
+958008 375283 NOT BIRD
+499374 382594 BIRD
+804336 100228 NOT BIRD
+534833 814196 BIRD
+137385 38467 NOT BIRD
+509001 847380 NOT BIRD
+402853 545987 BIRD
+874331 236077 NOT BIRD
+117874 504580 NOT BIRD
+221178 816865 BIRD
+112813 703535 NOT BIRD
+11758 250103 NOT BIRD
+111986 45022 NOT BIRD
+926181 708259 NOT BIRD
+480999 928301 NOT BIRD
+328379 934159 NOT BIRD
+390717 704896 BIRD
+626794 39675 NOT BIRD
+647725 697247 BIRD
+464589 800251 BIRD
+684476 838101 NOT BIRD
+934578 833958 NOT BIRD
+495951 845540 NOT BIRD
+204210 177810 NOT BIRD
+132510 44912 NOT BIRD
+583020 49399 NOT BIRD
+804267 79238 NOT BIRD
+360294 511929 BIRD
+57540 335303 NOT BIRD
+857791 276550 NOT BIRD
+212243 955326 NOT BIRD
+562552 263267 NOT BIRD
+408091 66613 NOT BIRD
+102253 498296 NOT BIRD
+147164 856159 NOT BIRD
+712914 695021 BIRD
+792151 378613 BIRD
+820432 969274 NOT BIRD
+155734 186727 NOT BIRD
+948635 51905 NOT BIRD
+420312 381671 BIRD
+683578 912264 NOT BIRD
+266542 377434 BIRD
+281189 338554 NOT BIRD
+137348 503884 NOT BIRD
+348720 318075 NOT BIRD
+243685 231637 NOT BIRD
+212958 949466 NOT BIRD
+399684 27588 NOT BIRD
+451588 163250 NOT BIRD
+349610 673053 BIRD
+778225 911451 NOT BIRD
+672010 196047 NOT BIRD
+10564 921438 NOT BIRD
+30799 232729 NOT BIRD
+865225 207536 NOT BIRD
+96861 378904 NOT BIRD
+46327 375126 NOT BIRD
+73914 191780 NOT BIRD
+753515 680518 BIRD
+426568 117891 NOT BIRD
+854370 491927 NOT BIRD
+50416 65892 NOT BIRD
+971854 422751 NOT BIRD
+720934 60799 NOT BIRD
+928469 352545 NOT BIRD
+823724 993011 NOT BIRD
+198850 360809 BIRD
+390629 974268 NOT BIRD
+587498 471059 BIRD
+705388 452141 BIRD
+713666 782832 BIRD
+295910 408100 BIRD
+718660 705378 BIRD
+295810 529570 BIRD
+648355 384561 BIRD
+641365 104775 NOT BIRD
+518526 921850 NOT BIRD
+492793 301603 NOT BIRD
+480203 271622 NOT BIRD
+932343 995155 NOT BIRD
+231527 661607 BIRD
+155978 698780 NOT BIRD
+861355 270016 NOT BIRD
+390925 845810 NOT BIRD
+775485 142537 NOT BIRD
+396611 884084 NOT BIRD
+318461 449355 BIRD
+136415 213475 NOT BIRD
+924388 400927 NOT BIRD
+435894 659525 BIRD
+613852 139862 NOT BIRD
+312631 850216 NOT BIRD
+98999 340128 NOT BIRD
+461160 581403 BIRD
+120048 118487 NOT BIRD
+4131 820278 NOT BIRD
+453486 679785 BIRD
+183312 574169 BIRD
+584239 961345 NOT BIRD
+243763 345076 BIRD
+899976 177502 NOT BIRD
+750191 241453 NOT BIRD
+606670 461382 BIRD
+704424 59018 NOT BIRD
+822911 563929 NOT BIRD
+159540 844325 NOT BIRD
+839324 37683 NOT BIRD
+929844 549501 NOT BIRD
+891188 714085 NOT BIRD
+752616 803057 BIRD
+446469 844275 NOT BIRD
+687921 499344 BIRD
+665655 983395 NOT BIRD
+241024 566445 BIRD
+804952 610653 NOT BIRD
+165628 291261 NOT BIRD
+203310 975999 NOT BIRD
+752810 114222 NOT BIRD
+466895 952108 NOT BIRD
+786303 890585 NOT BIRD
+630577 72823 NOT BIRD
+646272 671389 BIRD
+629667 536497 BIRD
+712463 524626 BIRD
+323115 700827 BIRD
+130727 216290 NOT BIRD
+106725 407644 NOT BIRD
+737298 438321 BIRD
+205758 915193 NOT BIRD
+96342 283253 NOT BIRD
+685516 920279 NOT BIRD
+873256 3774 NOT BIRD
+409752 775189 BIRD
+934378 244962 NOT BIRD
+151556 439406 NOT BIRD
+884198 955153 NOT BIRD
+291841 1000000 NOT BIRD
+246514 37565 NOT BIRD
+161706 191411 NOT BIRD
+961310 328503 NOT BIRD
+881589 251897 NOT BIRD
+885362 838572 NOT BIRD
+176902 555167 BIRD
+421863 934131 NOT BIRD
+861268 25558 NOT BIRD
+332772 956451 NOT BIRD
+969300 18070 NOT BIRD
+6864 702766 NOT BIRD
+198274 608408 BIRD
+43128 236158 NOT BIRD
+295024 960250 NOT BIRD
+133596 369857 NOT BIRD
+205114 169071 NOT BIRD
+655596 378037 BIRD
+197505 37732 NOT BIRD
+153955 365335 NOT BIRD
+688377 577134 BIRD
+391142 597126 BIRD
+999549 379983 NOT BIRD
+235707 840898 NOT BIRD
+712308 263122 NOT BIRD
+82164 566934 NOT BIRD
+251234 756107 BIRD
+145623 638533 NOT BIRD
+699706 426469 BIRD
+65040 108376 NOT BIRD
+158526 606702 NOT BIRD
+755651 107032 NOT BIRD
+651986 614224 BIRD
+492883 836042 NOT BIRD
+756004 100986 NOT BIRD
+322937 177306 NOT BIRD
+595395 419925 BIRD
+233927 867657 NOT BIRD
+176747 970985 NOT BIRD
+285122 788169 BIRD
+408175 759307 BIRD
+515206 935174 NOT BIRD
+129430 502182 NOT BIRD
+481823 585090 BIRD
+99160 420057 NOT BIRD
+792818 967330 NOT BIRD
+212742 596767 BIRD
+80399 510141 NOT BIRD
+51383 52785 NOT BIRD
+839551 811486 NOT BIRD
+115209 151579 NOT BIRD
+50382 133845 NOT BIRD
+68915 904466 NOT BIRD
+654005 327071 NOT BIRD
+74061 758911 NOT BIRD
+41390 463105 NOT BIRD
+1 490236 NOT BIRD
+664648 112760 NOT BIRD
+717432 1915 NOT BIRD
+1000
+551463 671207
+27109 45270
+196848 418837
+178033 142318
+709051 847045
+267862 485138
+921673 777966
+431970 111284
+386546 840029
+857545 22382
+63771 849651
+339886 667878
+207305 218279
+399278 968997
+970911 310777
+498336 633062
+678331 38726
+457562 525444
+184113 391530
+754926 151946
+637083 893164
+187481 539139
+650423 75107
+915136 619450
+158183 36968
+402970 772680
+956910 738305
+956583 742855
+228204 164214
+991342 872213
+505274 199114
+754191 489677
+15121 183604
+91485 728104
+396401 199233
+608748 362763
+901901 33484
+108590 796228
+932029 552323
+105643 540077
+312757 90211
+828516 508612
+767819 786018
+950231 301450
+173662 996022
+711487 941572
+431249 678935
+378890 465678
+193781 962721
+161953 470375
+833137 590182
+140017 770701
+566928 735037
+803712 764958
+821387 498957
+105519 425706
+450669 134143
+436512 934034
+235484 218487
+214508 386742
+844665 925497
+604432 442347
+908024 275913
+238633 983321
+970047 618156
+724689 916938
+687638 319535
+570924 381057
+662367 770917
+786225 374635
+316692 483753
+617895 891744
+825777 767360
+985847 54406
+957499 577612
+503109 716706
+159052 802163
+594428 623892
+607212 583427
+717935 349412
+266349 93611
+413145 442623
+340032 470338
+241255 984068
+875054 2398
+486150 543831
+435574 191745
+959105 620396
+191153 777703
+871666 461303
+178008 148651
+467165 374774
+515017 853412
+436838 61592
+927356 638581
+732191 671124
+630099 193704
+180394 145335
+645755 970130
+972527 938000
+481830 37160
+228905 458676
+595423 433756
+211458 704361
+165663 786575
+451577 599475
+490601 343670
+713433 918741
+496685 5617
+644197 666623
+337746 424040
+134095 376387
+38074 967844
+937973 830840
+768839 200180
+237339 426851
+401878 250669
+200776 466243
+686955 997300
+783874 928585
+528059 852617
+712639 235450
+670543 18659
+24276 426071
+609045 683579
+623970 184824
+561211 946791
+430986 758064
+105256 115636
+315815 885311
+312161 874094
+641114 69505
+52100 714039
+711338 841889
+770473 739054
+591671 11564
+763365 814884
+833542 820661
+763083 433907
+633837 374169
+558993 372128
+835270 257806
+532222 636555
+752190 266255
+667917 637477
+511570 584356
+653860 980078
+210468 669036
+510924 705959
+445013 438157
+449720 797749
+612632 553035
+890047 729437
+679695 446173
+336694 653129
+541608 313532
+571337 895686
+532240 376877
+159484 619910
+257386 284429
+385136 827400
+323829 285308
+954343 38995
+744954 534296
+488805 981618
+779366 706318
+775704 454876
+184312 908349
+870874 665750
+318878 864007
+177538 207567
+619604 860486
+753714 265226
+885136 151843
+952623 913197
+256949 658873
+460532 337758
+376752 97129
+631425 414874
+912844 638057
+860726 636581
+91456 208561
+116910 636429
+302178 275768
+139774 504135
+711701 621056
+997893 833663
+98888 331304
+999498 267958
+181155 500375
+159248 952120
+806229 954455
+51583 619779
+551005 699332
+853741 199359
+835939 980200
+188760 714466
+350895 443747
+719514 822021
+326155 653072
+790479 375639
+725653 554207
+401862 788371
+56329 824540
+841267 401359
+869830 753835
+224641 516866
+136644 192410
+891742 276223
+991934 204000
+700551 745482
+459947 344224
+787970 889311
+227683 810841
+980265 507483
+399473 70190
+624396 770743
+75466 125125
+466017 542610
+943968 648146
+918332 307283
+824148 330150
+522559 142972
+935546 477143
+197495 930652
+676133 927479
+271703 898045
+303707 652432
+979624 59672
+83507 47742
+117931 959888
+730631 999331
+124456 258678
+801287 806096
+970593 106824
+414106 261607
+108108 888924
+31895 754605
+231747 630666
+77670 483792
+411271 429241
+843638 753802
+922585 199325
+258996 147344
+195085 902209
+862096 858854
+858185 829367
+88045 109078
+431525 498992
+605815 405683
+183641 402117
+291040 536272
+290876 291748
+438766 839286
+323078 522622
+468215 516435
+786588 250700
+450024 311852
+975547 709173
+127733 225371
+84225 170632
+516350 989828
+98906 458761
+957752 604394
+10077 46782
+448899 79918
+616189 710069
+1817 256290
+95576 907064
+946037 440582
+473368 935005
+185704 414251
+242454 259955
+485479 635727
+861097 734353
+421336 613211
+603039 461673
+436785 937685
+542079 218296
+781429 394536
+990805 68507
+778575 230327
+486617 606993
+30408 296743
+253676 98544
+549900 976445
+907047 727043
+986998 735603
+887681 149501
+883853 988828
+602039 265129
+726802 305188
+759224 721429
+939724 163586
+74474 301302
+886160 237504
+467831 581630
+188623 181087
+477829 470799
+85694 219030
+711826 731505
+974899 635593
+887547 618873
+284725 961896
+950724 775227
+40355 684929
+506468 69114
+790542 283508
+963446 265691
+566993 246617
+484120 554271
+135900 969504
+150590 468302
+939100 324522
+59904 144771
+392627 541145
+176737 771729
+906953 367525
+845773 64283
+355861 191677
+876605 312848
+381961 396216
+196075 383072
+648763 172502
+935470 159520
+713790 732107
+701610 419589
+887891 366042
+690563 368552
+29674 343342
+884487 266818
+554899 422300
+306176 61223
+641858 461851
+653528 151948
+981147 997718
+910285 530132
+913204 363107
+51960 622712
+782231 78318
+810424 987429
+923370 12373
+378414 28385
+913288 811260
+154601 585328
+368498 942961
+881612 555439
+133014 923396
+385246 187788
+856087 774871
+288940 38773
+85257 837234
+716692 715577
+338288 514812
+593129 768652
+272432 636870
+649242 403552
+948288 195801
+523412 544007
+645687 861576
+320888 194365
+749803 14184
+937579 202500
+906639 882816
+174038 322824
+877949 279077
+116310 462978
+178554 963205
+478016 349354
+634357 516841
+153710 587496
+507399 906788
+618941 319304
+379662 455686
+317261 658704
+853068 25348
+39531 154501
+357000 602871
+2038 977109
+816285 263638
+542714 176076
+639053 694233
+173789 175376
+41081 333958
+367150 168156
+755651 675437
+98576 37211
+872866 263049
+235086 233868
+892572 252528
+277875 68699
+223199 745639
+864861 317406
+810866 96550
+876539 866899
+42974 627150
+837734 935604
+110979 198378
+48687 11522
+696029 152059
+343847 415836
+969398 968031
+747431 442423
+676290 842264
+94791 982517
+51215 85213
+830852 372665
+206422 790765
+887314 212064
+78962 17288
+160789 763852
+699455 638287
+353016 998523
+526396 326786
+995196 401702
+333889 738777
+706807 339043
+297817 303287
+145550 454238
+436754 490458
+575671 240340
+129356 4320
+311436 922874
+134937 852130
+385769 198749
+478952 730251
+884889 546557
+61431 178406
+21543 754257
+672310 104179
+842955 16739
+872133 6199
+309485 549761
+3998 686301
+176758 971386
+728077 957103
+477774 268780
+191653 373784
+225913 789209
+987957 842942
+573192 611681
+674590 983260
+678018 974432
+728688 736020
+840198 699560
+232650 400998
+407196 199504
+749265 621134
+307434 233032
+720769 269614
+226717 544
+785675 965197
+338980 704490
+10051 493680
+336621 81245
+692925 514359
+497619 426164
+400595 883866
+619886 175636
+391547 645635
+46632 976435
+175939 624197
+761682 970179
+719562 441555
+711168 585468
+102363 956682
+921878 454236
+675078 888037
+381716 260857
+342101 685128
+715838 718336
+144499 551378
+435243 213456
+905443 61446
+707080 571480
+64267 296990
+437538 270063
+240241 756557
+198111 199219
+784686 476154
+432835 425630
+396218 887048
+291437 354712
+131920 71295
+272774 673152
+907840 990373
+541750 988611
+718419 52338
+630135 493344
+581176 623861
+920850 337214
+607276 645442
+401998 874739
+73958 363868
+840021 116460
+542089 374995
+778395 272855
+143918 938306
+525952 69831
+259334 275838
+266210 315077
+820040 167173
+735863 324311
+334006 538458
+678670 365997
+219563 915181
+76974 115872
+990610 343190
+223410 995323
+111782 64567
+955914 63430
+852637 653871
+108528 734308
+320490 512906
+788743 150832
+465908 579823
+263348 571304
+411966 285947
+340756 999210
+881558 745972
+177504 19426
+651649 617472
+960662 254478
+766152 642258
+223177 700423
+763852 877934
+48156 179090
+429749 132840
+162098 156683
+823866 266590
+362764 467192
+38496 289774
+92072 626111
+141672 966813
+229136 949180
+484957 23230
+640701 406640
+177469 136605
+778862 117714
+818136 943620
+337905 2038
+697479 98340
+747531 386060
+59095 643579
+910168 909628
+376820 882960
+689085 272932
+415394 931667
+898479 781157
+246688 557066
+580295 127615
+50606 731644
+384600 737347
+371413 228074
+688045 679813
+681851 189548
+804239 25950
+928361 895681
+539260 551770
+977749 987455
+870415 449427
+238710 354568
+286234 559499
+857007 654104
+211169 701065
+828679 103694
+351689 307815
+45161 879284
+623709 736288
+416101 416573
+122473 828105
+370406 614303
+26335 926711
+994832 298767
+286221 565594
+531373 972581
+327148 672987
+232486 770082
+424185 129734
+830798 605844
+709538 635353
+459519 175828
+571463 577578
+830218 504680
+437604 711523
+539627 1000000
+376972 76428
+519491 426385
+725151 403306
+485252 514322
+3254 11371
+684358 16624
+786705 846754
+492839 433195
+39038 727242
+878946 839988
+15815 264927
+842505 338465
+359496 103629
+815151 672722
+951743 313451
+389879 871129
+297513 328714
+248371 425721
+456394 539015
+550386 249974
+266597 459648
+306401 751095
+184289 569654
+813247 799239
+639226 739678
+4605 692192
+30656 171392
+275020 363461
+552534 906503
+219954 606522
+994002 504276
+349341 126184
+551904 807867
+863233 114063
+364037 8297
+467944 929970
+681064 146985
+232990 290696
+606286 381704
+637734 46236
+738428 761863
+933254 642338
+522150 285435
+191938 724625
+847498 74683
+95310 411891
+538074 357852
+682070 444650
+558712 89977
+614625 545302
+475272 439100
+586085 82569
+889616 156335
+54391 335426
+381662 495902
+257764 692124
+850813 120089
+405523 707370
+948346 372962
+963996 113812
+525702 795844
+670047 59305
+20306 580127
+670103 352116
+897417 95369
+50821 801080
+883648 372688
+45375 636905
+488682 289615
+785516 616117
+308240 870343
+506783 559632
+267001 675404
+564717 428658
+542469 215346
+1000000 528712
+104368 68171
+164649 197587
+549702 641025
+736393 351104
+152183 963471
+852510 787213
+940469 35830
+325444 897884
+30352 429151
+815845 627312
+186943 854943
+530346 322628
+751285 970295
+185640 95062
+140125 293753
+878275 229533
+427119 244492
+885516 42924
+394027 493173
+456643 138261
+441825 546209
+98390 309152
+723388 898646
+327796 940185
+83848 753739
+608682 659992
+982619 270790
+757436 655379
+750441 250255
+544008 459428
+688960 890565
+651409 938634
+981557 632430
+125602 536924
+191536 891935
+954495 582244
+407748 633361
+532006 52884
+509421 131135
+884873 376153
+36144 593268
+380410 9906
+665285 535115
+785369 137845
+597272 932077
+822641 845728
+784362 802583
+435013 474049
+527325 282270
+690557 560614
+659210 718860
+868572 645051
+214287 66957
+198091 400577
+293081 723707
+833326 599315
+609221 845577
+380691 213735
+867932 790857
+722933 166059
+528139 981555
+784138 61925
+535974 312500
+111121 219150
+779763 579650
+298509 801677
+446728 438972
+22280 167081
+84009 177366
+417424 220370
+819685 377090
+222666 250749
+980836 945257
+252465 119708
+802118 848767
+830321 975397
+37321 330256
+642755 614458
+349959 89646
+669295 753876
+555552 646074
+601397 484156
+651236 518631
+695996 623677
+844046 251596
+145037 113419
+880520 180082
+641690 884054
+3761 861355
+226473 894154
+385902 805879
+136134 56793
+187603 423223
+29220 295241
+565468 53913
+699986 698515
+182670 637371
+156002 301383
+441411 350257
+601852 368349
+998120 285456
+981890 263241
+147294 878639
+256345 623579
+34085 151055
+956933 482817
+55961 419986
+359560 609418
+904658 759915
+813828 388780
+603646 986477
+623848 30165
+847899 302667
+652923 779849
+664549 289309
+91117 771126
+34366 662668
+57658 73006
+212936 181660
+849066 830354
+313170 763372
+183358 322350
+931767 885483
+161749 59269
+964400 352777
+339253 491928
+522093 568045
+870711 963100
+259300 886343
+175652 39985
+327463 440201
+619220 783120
+372477 878180
+576191 676878
+507231 585412
+348784 425256
+747605 336753
+738587 48493
+107761 195724
+548500 900335
+392263 72161
+156557 404104
+367204 430707
+317049 543620
+99956 142855
+583055 9052
+792171 943770
+821950 202275
+395504 164647
+266411 914492
+339748 902734
+755838 131546
+180038 603704
+799427 10776
+911111 804150
+392662 864278
+268382 819725
+250431 65571
+609190 151937
+1 567479
+576531 709145
+652915 877846
+596472 885053
+49700 991216
+905707 991975
+411060 832462
+964007 761806
+365510 166898
+177673 660396
+980897 681288
+61918 605135
+424859 373559
+439129 330299
+998587 675289
+759120 564670
+790166 293377
+687574 852002
+737054 959432
+950647 284045
+792371 303105
+135566 372706
+134511 203431
+886680 99572
+276319 16372
+697660 580704
+185839 257216
+630774 759577
+606227 610697
+802338 586254
+667275 604813
+414541 561457
+929810 457440
+416872 618467
+418863 666863
+486320 883870
+256575 211234
+414664 621885
+237809 391086
+407457 817695
+398398 514127
+771342 621468
+897396 584236
+711285 1
+21072 503622
+624786 513622
+591430 688346
+662138 555679
+174145 521239
+704453 79009
+962878 109359
+320592 190772
+812657 219453
+126890 251607
+69301 566817
+80943 534346
+155814 467699
+568286 368637
+803455 569561
+73183 279570
+309543 340879
+29224 214320
+769998 900972
+422210 691361
+286721 460494
+86205 126663
+833786 249599
+985403 923148
+174755 646442
+213258 112292
+162989 760407
+744457 810553
+695541 835154
+404715 829095
+108664 498995
+839873 477897
+208568 418207
+835530 385449
+593161 494918
+955411 257740
+900754 396234
+645832 41615
+964763 734539
+897333 147586
+259877 655869
+932627 626942
+953846 422865
+258019 193436
+22530 649386
+664733 662733
+656981 647545
+582103 20957
+406405 381900
+876817 417633
+191724 515918
+912151 832228
+390194 608829
+859719 74334
+738271 871308
+43528 273403
+900345 998147
+937363 492507
+685942 854190
+19928 711733
+890817 224823
+388719 684660
+705616 64149
+446049 970822
+904806 628373
+660642 322865
+671444 612881
+738061 89144
+679829 577990
+449297 597779
+871182 418099
+932597 9177
+501683 287878
+658419 869959
+98044 187624
+928798 678346
+879357 505212
+569361 833868
+321041 101325
+246049 531761
+854625 225846
+355078 906690
+995833 42421
+620410 93138
+690917 192013
+610111 586058
+595234 78450
+882679 542707
+412665 96916
+800891 541097
+735795 27060
+532272 246040
+79908 131503
+232827 617984
+149744 400948
+143146 478875
+901916 4368
+563140 498223
+591361 414100
+606112 699901
+285959 798629
+393430 216222
+758928 397544
+494460 276108
+333556 687945
+231356 811702
+57742 585702
+233557 763627
+381610 654001
+54948 466383
+461610 531353
+52073 198093
+212668 879877
+293977 131564
+831465 320380
+119008 416440
+149014 117423
+514966 28789
+821248 424293
+112237 525777
+853831 671155
+256857 859945
+623571 427924
+81924 490413
+473147 521533
+569237 136871
+851316 451108
+330985 137661
+269225 63983
+900714 141313
+74104 100689
+734463 19721
+564861 223117
+647410 765780
+807909 902460
diff --git a/codejam_2008/src/y2008round_apac/A-small-practice.in b/codejam_2008/src/y2008round_apac/A-small-practice.in
new file mode 100644
index 0000000..74ed996
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/A-small-practice.in
@@ -0,0 +1,176 @@
+10
+5
+1000 1000 BIRD
+2000 1000 BIRD
+2000 2000 BIRD
+1000 2000 BIRD
+1500 2010 NOT BIRD
+3
+1500 1500
+900 900
+1400 2020
+3
+500 700 NOT BIRD
+501 700 BIRD
+502 700 NOT BIRD
+2
+501 600
+502 501
+1
+100 100 NOT BIRD
+3
+107 93
+86 70
+110 115
+10
+1897 1802 BIRD
+3765 3992 BIRD
+1797 1802 NOT BIRD
+1897 1702 NOT BIRD
+3865 3992 NOT BIRD
+3765 4092 NOT BIRD
+1797 3992 NOT BIRD
+1897 4092 NOT BIRD
+3865 1802 NOT BIRD
+3765 1702 NOT BIRD
+8
+1697 1802
+1897 1602
+3965 3992
+3765 4192
+1697 3992
+1897 4192
+3965 1802
+3765 1602
+10
+885387 1000000 NOT BIRD
+641422 516650 NOT BIRD
+368691 1 NOT BIRD
+1000000 897764 NOT BIRD
+89173 383427 NOT BIRD
+595369 5212 NOT BIRD
+1 956430 NOT BIRD
+665124 722863 NOT BIRD
+513930 703136 NOT BIRD
+723059 634023 NOT BIRD
+10
+898168 133070
+1000000 961394
+478043 175012
+377374 176230
+544920 484422
+898538 1000000
+1 575199
+664371 798316
+803527 566414
+268981 776092
+10
+661314 621730 NOT BIRD
+353896 616125 NOT BIRD
+898815 100546 NOT BIRD
+990365 515435 NOT BIRD
+171088 1 NOT BIRD
+1 117277 NOT BIRD
+705404 393585 NOT BIRD
+612400 392755 NOT BIRD
+549677 95061 NOT BIRD
+1000000 1000000 NOT BIRD
+10
+1 636227
+297540 1
+480571 140796
+960379 651435
+66602 97468
+612903 710098
+570493 573318
+260757 1000000
+560281 997302
+1000000 724287
+10
+704568 698928 BIRD
+872354 1000000 NOT BIRD
+455307 1 NOT BIRD
+28625 406220 NOT BIRD
+805733 332872 NOT BIRD
+530020 409504 NOT BIRD
+1000000 363369 NOT BIRD
+518150 226341 NOT BIRD
+142619 700724 NOT BIRD
+1 122847 NOT BIRD
+10
+243556 892922
+597489 192380
+888229 537765
+792351 469842
+441501 165194
+87765 1
+324915 470125
+1 1000000
+1000000 373744
+148366 322228
+10
+908236 661238 NOT BIRD
+894429 65819 NOT BIRD
+1 231012 NOT BIRD
+322405 1000000 NOT BIRD
+114614 255764 NOT BIRD
+436841 118607 NOT BIRD
+235129 344819 NOT BIRD
+67918 797370 NOT BIRD
+1000000 466997 NOT BIRD
+512184 1 NOT BIRD
+10
+295500 1
+206726 689773
+755591 1000000
+268140 617506
+469787 502955
+338083 907670
+1 308543
+939508 110198
+1000000 759356
+278612 376349
+10
+44879 473731 NOT BIRD
+178737 229321 NOT BIRD
+1000000 248627 NOT BIRD
+473417 586709 NOT BIRD
+412925 213259 NOT BIRD
+305625 442063 NOT BIRD
+1 1 NOT BIRD
+145551 1000000 NOT BIRD
+900974 290072 NOT BIRD
+684931 903882 NOT BIRD
+10
+845895 808934
+370164 158661
+387982 657200
+252997 548900
+713774 152960
+1 272814
+1000000 187191
+116467 952927
+911341 1000000
+327685 1
+10
+402337 262010 BIRD
+1000000 166343 NOT BIRD
+697714 319302 NOT BIRD
+401256 575322 BIRD
+517722 44600 NOT BIRD
+939812 955940 NOT BIRD
+311706 1000000 NOT BIRD
+829151 811128 NOT BIRD
+763921 996659 NOT BIRD
+1 1 NOT BIRD
+10
+54082 821397
+740085 645631
+1 679293
+73851 207673
+905386 1000000
+1000000 741223
+606043 306641
+340714 783899
+256191 352299
+942591 280525
diff --git a/codejam_2008/src/y2008round_apac/a.rs b/codejam_2008/src/y2008round_apac/a.rs
new file mode 100644
index 0000000..06e968e
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/a.rs
@@ -0,0 +1,51 @@
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::constants::*;
+use codejam::util::vector_2d::Vector2d;
+use itertools::Itertools;
+use std::cmp::max;
+use std::cmp::min;
+use std::io::Write;
+use std::isize;
+
+/*
+
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008round_apac",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let n = reader.read_int();
+
+                //h w, is bird
+                let birds: Vec< (Vector2d<isize>, bool) > = (0..n).map( |_| {
+                    let s = reader.read_string_line();
+                    (Vector2d::with_val( s[0].parse().unwrap(), s[1].parse().unwrap()), s[2] == "BIRD")
+                }).collect();
+
+                let m:usize = reader.read_int();
+
+                let unknown: Vec<Vector2d<isize>> = (0..n).map( |_| {
+                    let (h,w) = reader.read_tuple_2();
+                    Vector2d::with_val(h,w)
+                }).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&birds, &unknown)).unwrap();
+            }
+        },
+    );
+}
+fn solve(birds: &[(Vector2d<isize>, bool)], unknown: &[Vector2d<isize>] ) -> isize
+{
+    3
+}
diff --git a/codejam_2008/src/y2008round_apac/mod.rs b/codejam_2008/src/y2008round_apac/mod.rs
new file mode 100644
index 0000000..f693abf
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/mod.rs
@@ -0,0 +1,4 @@
+pub mod a;
+pub mod b;
+pub mod c;
+pub mod d;

From b89ebac851ffd993f816ae567e002547d76c0311 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 17:22:33 -0300
Subject: [PATCH 101/122] a

---
 codejam_2008/src/main.rs                      |    8 +
 codejam_2008/src/y2008round3/d.rs             |   74 +-
 .../src/y2008round_apac/A-large-practice.out  | 2475 +++++++++++++++++
 .../src/y2008round_apac/A-small-practice.out  |   86 +
 codejam_2008/src/y2008round_apac/a.rs         |   76 +-
 5 files changed, 2671 insertions(+), 48 deletions(-)
 create mode 100644 codejam_2008/src/y2008round_apac/A-large-practice.out
 create mode 100644 codejam_2008/src/y2008round_apac/A-small-practice.out

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 3c8c27b..7bf18b1 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -84,6 +84,14 @@ pub fn run_y2008_round3()
     y2008round3::d::solve_all_cases();
 }
 
+pub fn run_y2008_round_apac()
+{
+    y2008round_apac::a::solve_all_cases();
+    y2008round_apac::b::solve_all_cases();
+    y2008round_apac::c::solve_all_cases();
+    y2008round_apac::d::solve_all_cases();
+}
+
 fn main()
 {
     init_log();
diff --git a/codejam_2008/src/y2008round3/d.rs b/codejam_2008/src/y2008round3/d.rs
index 83678fe..c1ab842 100644
--- a/codejam_2008/src/y2008round3/d.rs
+++ b/codejam_2008/src/y2008round3/d.rs
@@ -20,9 +20,7 @@ pub fn solve_all_cases()
     let inv = compute_modular_inverse(MODULUS);
 
     run_cases(
-        &["D-small-practice",
-            "D-large-practice"
-        ],
+        &["D-small-practice", "D-large-practice"],
         "y2008round3",
         |reader, buffer| {
             let t = reader.read_int();
@@ -38,7 +36,7 @@ pub fn solve_all_cases()
                     .collect();
 
                 if case_no != 21 {
-                   // continue;
+                    // continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -110,9 +108,14 @@ fn solve(
                     return 0;
                 }
                 assert!(cur != last);
-                assert!(rocks[cur].c() >= rocks[last].c(),
-                        "cur {} last {} {:?} {:?}", cur, last, rocks[cur],
-                rocks[last]);
+                assert!(
+                    rocks[cur].c() >= rocks[last].c(),
+                    "cur {} last {} {:?} {:?}",
+                    cur,
+                    last,
+                    rocks[cur],
+                    rocks[last]
+                );
 
                 let m = rocks[cur].r() - rocks[last].r();
                 let n = rocks[cur].c() - rocks[last].c();
@@ -121,20 +124,20 @@ fn solve(
             })
             .fold(1, |acc, w| (acc * w) % MODULUS);
 
-        debug!("Rocks {:0>width$b} ways {} sign {}", bs.data, ways, sign, width=rocks.len());
+        debug!(
+            "Rocks {:0>width$b} ways {} sign {}",
+            bs.data,
+            ways,
+            sign,
+            width = rocks.len()
+        );
         ans += 10007 + sign * ways as isize;
     }
     ans % 10007
 }
 
 //Uses lucas theorum and modular inversese
-fn n_choose_k_mod(
-    n: usize,
-    k: usize,
-    p: usize,
-    fac: &[usize],
-    inv: &[usize]
-) -> usize
+fn n_choose_k_mod(n: usize, k: usize, p: usize, fac: &[usize], inv: &[usize]) -> usize
 {
     let mut n = n;
     let mut k = k;
@@ -143,23 +146,20 @@ fn n_choose_k_mod(
     while k > 0 {
         let key = (n % p, k % p);
 
-
         if key.1 > key.0 {
             product *= 0;
-        }
-        else if key.1 == 0 || key.0 == key.1 {
+        } else if key.1 == 0 || key.0 == key.1 {
             product *= 1;
-        }
-        else {
+        } else {
             //n! / (k! * (n-k)!)
             let n_fact = fac[n % p];
             let k_fact = inv[fac[k % p]];
-            let n_sub_k_fact = inv[fac[neg_mod(n,k,p)]];
+            let n_sub_k_fact = inv[fac[neg_mod(n, k, p)]];
 
             let pp = (n_fact * k_fact * n_sub_k_fact) % p;
             product *= pp;
 
-/*
+            /*
             let b = biguint_to_usize(
                 &(binomial(BigUint::from(key.0), BigUint::from(key.1)) % BigUint::from(p)),
             );
@@ -220,9 +220,9 @@ fn biguint_to_usize(bu: &BigUint) -> usize
 fn compute_modular_inverse(m: usize) -> Vec<usize>
 {
     //https://cp-algorithms.com/algebra/module-inverse.html
-    let mut inv = vec![0; m ];
+    let mut inv = vec![0; m];
 
-   // inv[0] = 1;
+    // inv[0] = 1;
     inv[1] = 1;
     for i in 2..m {
         inv[i] = (m - (m / i) * inv[m % i] % m) % m;
@@ -311,7 +311,7 @@ mod test_endless_knight
     #[test]
     fn test_n_choose_k()
     {
-        let modulus = 79 ; //1033; //10007;
+        let modulus = 79; //1033; //10007;
         let fac = compute_modular_factorial(modulus);
         let inv = compute_modular_inverse(modulus);
         let p = BigUint::from(modulus);
@@ -319,19 +319,24 @@ mod test_endless_knight
         //let check_fac
 
         for n in 1..modulus {
-
             for k in 2..n {
-                println!("N= {} K={}", n,k);
-                let check = biguint_to_usize(&(binomial(BigUint::from(n),
-                                                        BigUint::from(k)) % &p));
+                println!("N= {} K={}", n, k);
+                let check = biguint_to_usize(&(binomial(BigUint::from(n), BigUint::from(k)) % &p));
 
-                let n_fact = fac[n ];
-                let k_fact = inv[ fac[k] ];
-                let n_sub_k_fact = inv[ fac[n - k] ];
+                let n_fact = fac[n];
+                let k_fact = inv[fac[k]];
+                let n_sub_k_fact = inv[fac[n - k]];
 
                 assert_eq!(n_fact, factorial_mod(n, modulus));
-                assert_eq!(k_fact, compute_modular_inverse_1(factorial_mod(k, modulus),modulus ), "k_fact wrong");
-                assert_eq!(n_sub_k_fact, compute_modular_inverse_1(factorial_mod(n-k, modulus),modulus ));
+                assert_eq!(
+                    k_fact,
+                    compute_modular_inverse_1(factorial_mod(k, modulus), modulus),
+                    "k_fact wrong"
+                );
+                assert_eq!(
+                    n_sub_k_fact,
+                    compute_modular_inverse_1(factorial_mod(n - k, modulus), modulus)
+                );
 
                 assert_eq!((n_fact * k_fact * n_sub_k_fact) % modulus, check);
             }
@@ -359,7 +364,6 @@ mod test_endless_knight
         let inverse = compute_modular_inverse(prime);
 
         for i in 1..prime {
-
             assert_eq!(inverse[i], compute_modular_inverse_1(i, prime));
         }
     }
diff --git a/codejam_2008/src/y2008round_apac/A-large-practice.out b/codejam_2008/src/y2008round_apac/A-large-practice.out
new file mode 100644
index 0000000..30cea33
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/A-large-practice.out
@@ -0,0 +1,2475 @@
+Case #1:
+BIRD
+UNKNOWN
+NOT BIRD
+Case #2:
+UNKNOWN
+NOT BIRD
+Case #3:
+UNKNOWN
+UNKNOWN
+UNKNOWN
+Case #4:
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+Case #5:
+UNKNOWN
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+Case #6:
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+UNKNOWN
+BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+UNKNOWN
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+UNKNOWN
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+Case #7:
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+Case #8:
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+UNKNOWN
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+UNKNOWN
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+Case #9:
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+Case #10:
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+UNKNOWN
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+BIRD
+NOT BIRD
diff --git a/codejam_2008/src/y2008round_apac/A-small-practice.out b/codejam_2008/src/y2008round_apac/A-small-practice.out
new file mode 100644
index 0000000..bbe917f
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/A-small-practice.out
@@ -0,0 +1,86 @@
+Case #1:
+BIRD
+UNKNOWN
+NOT BIRD
+Case #2:
+UNKNOWN
+NOT BIRD
+Case #3:
+UNKNOWN
+UNKNOWN
+UNKNOWN
+Case #4:
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+NOT BIRD
+Case #5:
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+Case #6:
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+Case #7:
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+NOT BIRD
+NOT BIRD
+UNKNOWN
+NOT BIRD
+UNKNOWN
+NOT BIRD
+Case #8:
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+Case #9:
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+UNKNOWN
+Case #10:
+UNKNOWN
+NOT BIRD
+UNKNOWN
+UNKNOWN
+NOT BIRD
+NOT BIRD
+UNKNOWN
+UNKNOWN
+UNKNOWN
+NOT BIRD
diff --git a/codejam_2008/src/y2008round_apac/a.rs b/codejam_2008/src/y2008round_apac/a.rs
index 06e968e..d2a0445 100644
--- a/codejam_2008/src/y2008round_apac/a.rs
+++ b/codejam_2008/src/y2008round_apac/a.rs
@@ -1,5 +1,4 @@
 use codejam::util::codejam::run_cases;
-use codejam::util::grid::constants::*;
 use codejam::util::vector_2d::Vector2d;
 use itertools::Itertools;
 use std::cmp::max;
@@ -22,17 +21,24 @@ pub fn solve_all_cases()
                 let n = reader.read_int();
 
                 //h w, is bird
-                let birds: Vec< (Vector2d<isize>, bool) > = (0..n).map( |_| {
-                    let s = reader.read_string_line();
-                    (Vector2d::with_val( s[0].parse().unwrap(), s[1].parse().unwrap()), s[2] == "BIRD")
-                }).collect();
+                let birds: Vec<(Vector2d<isize>, bool)> = (0..n)
+                    .map(|_| {
+                        let s = reader.read_string_line();
+                        (
+                            Vector2d::with_val(s[0].parse().unwrap(), s[1].parse().unwrap()),
+                            s[2] == "BIRD",
+                        )
+                    })
+                    .collect();
 
-                let m:usize = reader.read_int();
+                let m: usize = reader.read_int();
 
-                let unknown: Vec<Vector2d<isize>> = (0..n).map( |_| {
-                    let (h,w) = reader.read_tuple_2();
-                    Vector2d::with_val(h,w)
-                }).collect();
+                let unknown: Vec<Vector2d<isize>> = (0..m)
+                    .map(|_| {
+                        let (h, w) = reader.read_tuple_2();
+                        Vector2d::with_val(h, w)
+                    })
+                    .collect();
 
                 if case_no != 3 {
                     // continue;
@@ -40,12 +46,56 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(buffer, "Case #{}: {}", case_no, solve(&birds, &unknown)).unwrap();
+                writeln!(buffer, "Case #{}:\n{}", case_no, solve(&birds, &unknown)).unwrap();
             }
         },
     );
 }
-fn solve(birds: &[(Vector2d<isize>, bool)], unknown: &[Vector2d<isize>] ) -> isize
+fn solve(known: &[(Vector2d<isize>, bool)], unknown: &[Vector2d<isize>]) -> String
 {
-    3
+    let mut row_range = [isize::MAX, isize::MIN];
+    let mut col_range = [isize::MAX, isize::MIN];
+
+    let birds: Vec<Vector2d<isize>> = known.iter().filter(|k| k.1).map(|k| k.0).collect();
+    let non_birds: Vec<Vector2d<isize>> = known.iter().filter(|k| !k.1).map(|k| k.0).collect();
+
+    for b in birds.iter() {
+        row_range[0] = min(row_range[0], b.r());
+        row_range[1] = max(row_range[1], b.r());
+        col_range[0] = min(col_range[0], b.c());
+        col_range[1] = max(col_range[1], b.c());
+    }
+
+    let mut ans: Vec<Option<bool>> = Vec::new();
+    'outer_loop: for u in unknown.iter() {
+        if row_range[0] <= u.r()
+            && u.r() <= row_range[1]
+            && col_range[0] <= u.c()
+            && u.c() <= col_range[1]
+        {
+            ans.push(Some(true));
+            continue 'outer_loop;
+        }
+
+        for nb in non_birds.iter() {
+            if min(row_range[0], u.r()) <= nb.r()
+                && nb.r() <= max(row_range[1], u.r())
+                && min(col_range[0], u.c()) <= nb.c()
+                && nb.c() <= max(col_range[1], u.c())
+            {
+                ans.push(Some(false));
+                continue 'outer_loop;
+            }
+        }
+
+        ans.push(None);
+    }
+
+    ans.into_iter()
+        .map(|a| match a {
+            Some(true) => "BIRD",
+            Some(false) => "NOT BIRD",
+            None => "UNKNOWN",
+        })
+        .join("\n")
 }

From 5e494e642ec12a12d1f090eeac6a3411535555b4 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 17:23:54 -0300
Subject: [PATCH 102/122] a

---
 codejam_2008/src/y2008round_apac/a.rs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/codejam_2008/src/y2008round_apac/a.rs b/codejam_2008/src/y2008round_apac/a.rs
index d2a0445..1b4ac63 100644
--- a/codejam_2008/src/y2008round_apac/a.rs
+++ b/codejam_2008/src/y2008round_apac/a.rs
@@ -7,7 +7,8 @@ use std::io::Write;
 use std::isize;
 
 /*
-
+Geometry
+Ranges
 */
 pub fn solve_all_cases()
 {
@@ -78,6 +79,7 @@ fn solve(known: &[(Vector2d<isize>, bool)], unknown: &[Vector2d<isize>]) -> Stri
         }
 
         for nb in non_birds.iter() {
+            //Does considering this unknown bird as a bird cause a contradiction?
             if min(row_range[0], u.r()) <= nb.r()
                 && nb.r() <= max(row_range[1], u.r())
                 && min(col_range[0], u.c()) <= nb.c()
@@ -88,6 +90,7 @@ fn solve(known: &[(Vector2d<isize>, bool)], unknown: &[Vector2d<isize>]) -> Stri
             }
         }
 
+        //We don't know s**t
         ans.push(None);
     }
 

From 383ec948460cd1fab46468ee300954373bebb82d Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Mon, 25 Feb 2019 22:03:26 -0300
Subject: [PATCH 103/122] b

---
 .../src/y2008round_apac/B-large-practice.in   | 1062 +++++++++++++++++
 .../src/y2008round_apac/B-small-practice.in   |  584 +++++++++
 codejam_2008/src/y2008round_apac/b.rs         |  160 +++
 3 files changed, 1806 insertions(+)
 create mode 100644 codejam_2008/src/y2008round_apac/B-large-practice.in
 create mode 100644 codejam_2008/src/y2008round_apac/B-small-practice.in
 create mode 100644 codejam_2008/src/y2008round_apac/b.rs

diff --git a/codejam_2008/src/y2008round_apac/B-large-practice.in b/codejam_2008/src/y2008round_apac/B-large-practice.in
new file mode 100644
index 0000000..e5cb5df
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/B-large-practice.in
@@ -0,0 +1,1062 @@
+100
+3 3 2 2
+2 3 2
+1 7 1
+2 1 2
+4 3 2 1
+1 2 2 0
+10 8 5 10
+10 2 9 10
+3 3 2 2
+0 0 0
+0 1 0
+0 0 0
+3 3 2 2
+0 0 4
+0 4 8
+0 9 5
+3 3 2 2
+0 1 0
+0 5 5
+0 9 8
+4 3 2 2
+0 3 0 0
+0 5 8 8
+9 9 0 0
+4 2 1 1
+2 10 60 20
+0 0 10 0
+7 7 4 4
+0 0 0 20 0 0 0
+0 0 0 56 9 0 0
+0 9 0 10 0 0 0
+20 56 10 2 10 56 20
+0 0 0 10 0 9 0
+0 0 9 56 0 0 0
+0 0 0 20 0 0 0
+9 8 6 5
+0 0 0 0 0 2 0 0 0
+0 0 0 0 0 1 0 0 0
+0 0 0 2 0 2 1 3 2
+0 0 0 1 0 1 0 0 0
+0 3 1 2 1 1 0 0 0
+0 2 0 0 0 1 0 0 0
+0 0 0 0 0 2 0 0 0
+0 0 0 0 0 3 0 0 0
+13 10 8 5
+0 0 0 0 0 0 0 6 4 35 0 0 0
+0 0 0 0 0 0 0 4 0 0 0 0 0
+0 0 0 35 4 6 0 3 1 4 6 5 0
+0 0 0 0 0 4 0 1 0 0 0 7 0
+0 4 2 4 1 3 1 1 1 2 0 0 0
+0 0 0 2 0 0 0 1 0 3 0 0 0
+0 0 0 5 0 3 3 3 0 0 0 0 0
+0 0 0 3 0 0 0 3 0 0 0 0 0
+0 0 0 0 0 0 0 4 0 0 0 0 0
+0 0 0 0 0 0 0 4 0 0 0 0 0
+17 14 10 7
+0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 8 0 4 39 0 0 0 0
+0 0 0 0 0 0 0 14 0 14 4 39 0 0 0 0 0
+0 0 0 0 0 0 0 8 0 8 0 0 0 0 0 0 0
+0 0 0 40 5 39 4 14 0 4 1 5 11 16 12 17 0
+0 0 0 0 0 0 0 8 0 1 0 0 0 7 0 0 0
+0 0 0 11 7 5 1 4 1 1 2 4 0 69 0 0 0
+0 0 0 13 0 2 0 0 0 1 0 7 0 8 0 0 0
+0 0 0 51 0 7 0 10 7 4 0 5 0 0 0 0 0
+0 0 0 0 0 10 0 8 0 3 0 11 0 0 0 0 0
+0 0 0 0 0 8 0 11 0 7 0 0 0 0 0 0 0
+0 0 0 0 0 11 0 0 0 11 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0
+21 18 12 9
+0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 35 0 47 86 94 134 0 0 0 0
+0 0 0 0 0 0 0 299 35 49 0 27 4 43 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 35 0 13 0 0 0 0 0 0 0 0 0
+0 0 0 228 49 88 48 43 4 27 0 5 1 6 17 33 45 62 102 155 0
+0 0 0 0 0 0 0 0 0 13 0 1 0 0 0 7 0 0 0 0 0
+0 0 0 24 13 24 13 6 1 5 1 1 3 7 0 76 8 77 0 0 0
+0 0 0 0 0 13 0 2 0 0 0 1 0 14 0 8 0 0 0 0 0
+0 0 0 0 0 64 0 9 0 22 12 5 0 19 0 77 0 0 0 0 0
+0 0 0 0 0 14 0 19 0 30 0 3 0 30 0 9 0 0 0 0 0
+0 0 0 0 0 65 0 27 0 41 0 10 0 20 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 38 0 31 0 21 0 31 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 28 0 42 0 29 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 39 0 0 0 41 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 0 0 0
+25 22 14 11
+0 0 0 0 0 0 0 0 0 0 0 0 0 214 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 165 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 214 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 165 0 0 180 0 228 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 334 0 130 0 130 0 0 94 0 94 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 35 0 81 0 81 0 94 180 94 228 0 0 0 0 0 0
+0 0 0 0 0 0 0 183 0 334 35 130 0 46 4 47 0 0 0 167 0 0 0 0 0
+0 0 0 0 0 0 0 95 0 0 0 81 0 19 0 0 0 0 0 102 0 0 0 0 0
+0 0 0 278 50 277 49 183 95 47 4 46 0 6 1 7 24 57 102 167 102 257 103 258 0
+0 0 0 0 0 0 0 0 0 0 0 19 0 1 0 0 0 7 0 0 0 0 0 0 0
+0 0 0 81 57 81 57 44 20 7 1 6 1 1 4 11 0 83 91 168 0 0 0 0 0
+0 0 0 0 0 0 0 13 0 2 0 0 0 1 0 25 0 8 0 92 0 0 0 0 0
+0 0 0 0 0 0 0 77 0 11 0 40 18 6 0 44 0 85 0 169 0 0 0 0 0
+0 0 0 0 0 0 0 91 0 30 0 70 0 3 0 74 0 94 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 156 0 57 0 111 0 13 0 94 0 86 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 92 0 95 0 142 0 34 0 125 0 95 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 157 0 123 0 184 0 63 0 95 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 162 0 143 0 104 0 126 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 124 0 185 0 134 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 163 0 0 0 176 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 135 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 177 0 0 0 0 0 0 0 0 0 0 0
+29 26 16 13
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 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 165 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 666 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 165 0 0 0 0 644 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 738 0 498 0 666 667 668 415 0 416 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 404 0 368 0 452 0 0 595 0 644 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 738 0 498 0 287 0 0 415 0 416 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 404 0 368 0 157 0 141 321 94 322 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 604 420 603 0 369 35 287 0 76 4 47 0 0 0 627 461 628 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 420 0 0 0 157 0 26 0 0 0 0 0 460 0 0 0 0 0 0 0
+0 0 0 655 377 654 376 326 49 325 142 47 4 76 0 7 1 8 32 89 191 358 102 359 462 720 463 721 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 1 0 0 0 7 0 0 0 0 0 0 0 0 0
+0 0 0 348 267 348 267 210 129 72 28 8 1 7 1 1 5 16 0 90 181 349 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 13 0 2 0 0 0 1 0 41 0 8 0 441 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 90 0 13 0 65 25 7 0 85 0 93 0 610 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 181 0 43 0 135 0 3 0 159 0 187 0 442 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 337 0 100 0 246 0 16 0 253 0 273 0 611 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 429 0 195 0 388 0 50 0 378 0 368 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 586 0 318 0 572 0 113 0 473 0 274 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 430 0 480 0 715 0 217 0 599 0 369 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 587 0 604 0 900 0 351 0 474 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 767 0 716 0 527 0 600 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 605 0 901 0 662 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 768 0 0 0 839 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 663 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 840 0 0 0 0 0 0 0 0 0 0 0 0 0
+29 26 16 13
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 998 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 165 998 0 0 0 998 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 998 666 0 0 0 0 998 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 998 831 0 998 998 0 644 998 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 738 998 498 0 666 667 668 415 0 416 998 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 404 998 368 0 452 711 0 595 903 644 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 998 738 0 498 726 287 711 0 415 903 416 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 998 998 0 998 404 0 368 726 272 0 141 462 94 322 0 998 998 0 0 0 0 0
+0 0 0 0 0 0 0 604 420 603 998 962 593 558 0 115 4 47 489 0 998 627 461 628 0 0 0 0 0
+0 0 0 0 0 998 998 0 0 420 0 0 0 271 0 35 0 0 489 0 998 818 0 0 998 998 0 0 0
+0 0 0 655 377 654 376 326 983 934 189 47 4 114 0 9 1 8 40 89 280 358 102 359 462 720 463 721 0
+0 0 0 998 998 0 0 998 998 0 0 0 0 34 0 1 0 0 908 7 0 0 998 998 0 0 998 998 0
+0 0 0 348 267 348 267 210 250 121 36 8 1 8 1 1 6 22 908 90 181 530 998 0 0 0 0 0 0
+0 0 0 0 0 998 998 0 0 13 0 2 997 0 0 1 0 41 0 8 0 441 998 0 0 0 0 0 0
+0 0 0 0 0 0 0 998 998 90 0 13 997 98 33 8 0 126 0 101 0 610 998 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 181 998 43 0 135 0 3 0 285 998 288 0 442 998 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 337 998 100 0 381 0 19 0 253 998 273 0 611 998 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 998 429 0 195 998 769 0 69 998 378 0 368 998 0 998 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 998 586 0 318 998 572 0 113 998 473 0 274 998 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 430 998 480 0 715 998 217 0 599 998 369 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 587 998 604 0 900 998 351 0 474 998 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 767 998 716 0 527 998 600 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 605 998 901 0 662 998 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 998 998 768 0 0 998 839 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 998 663 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 840 998 998 0 0 0 0 0 0 0 0 0 0 0
+29 26 16 13
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 999 666 998 999 999 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 999 165 998 0 0 0 998 999 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 998 666 999 0 0 0 998 999 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 999 999 0 998 831 999 998 998 999 644 998 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 999 738 998 498 999 666 667 668 415 999 416 998 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 999 404 998 368 999 452 711 999 595 903 644 999 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 999 998 738 999 498 726 287 998 999 415 903 416 999 0 0 0 0 0 0 0
+0 0 0 0 0 0 999 998 998 999 998 404 999 368 998 272 0 141 462 997 322 999 998 998 999 0 0 0 0
+0 0 0 0 0 0 999 604 420 603 998 962 593 558 999 115 4 47 998 999 998 627 461 628 999 0 0 0 0
+0 0 0 999 999 998 998 999 999 420 999 999 0 423 999 44 999 999 489 999 998 818 999 999 998 998 999 999 0
+0 0 0 655 377 654 376 326 983 934 189 47 4 152 0 9 1 8 40 89 280 358 102 359 462 720 463 721 0
+0 0 999 998 998 999 999 998 998 999 999 0 0 34 0 1 999 999 948 7 999 999 998 998 999 999 998 998 0
+0 0 999 348 267 348 267 210 250 121 44 8 1 8 1 1 7 22 998 90 181 530 998 999 0 0 999 999 0
+0 0 0 999 999 998 998 999 999 13 999 2 998 999 999 1 999 41 999 8 999 441 998 999 0 0 0 0 0
+0 0 0 0 0 0 0 998 998 90 999 13 997 98 33 8 999 126 999 101 999 610 998 999 0 0 0 0 0
+0 0 0 0 0 0 0 0 999 181 998 43 999 135 999 3 999 285 998 288 999 442 998 999 0 0 0 0 0
+0 0 0 0 0 0 0 0 999 337 998 100 999 381 999 19 999 253 998 273 999 611 998 999 0 0 0 0 0
+0 0 0 0 0 0 0 0 998 429 999 195 998 769 999 69 998 378 999 368 998 999 998 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 998 586 999 318 998 572 999 113 998 473 999 274 998 999 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 999 430 998 480 999 715 998 217 999 599 998 369 999 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 999 587 998 604 999 900 998 351 999 474 998 0 999 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 999 767 998 716 999 527 998 600 999 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 999 605 998 901 999 662 998 0 999 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 998 998 768 999 999 998 839 999 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 999 999 0 0 0 998 663 999 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 999 999 840 998 998 999 999 0 0 0 0 0 0 0 0 0
+5 6 3 3
+9 9 0 9 9
+8 8 0 8 8
+0 5 5 5 5
+9 9 5 9 9
+0 0 5 0 0
+0 0 9 9 0
+5 6 3 3
+9 9 0 9 9
+8 8 0 8 8
+0 5 5 5 5
+9 9 6 9 9
+0 0 5 0 0
+0 0 9 9 0
+5 6 3 3
+9 9 0 9 9
+8 8 0 8 8
+0 5 5 5 5
+9 9 7 9 9
+0 0 5 0 0
+0 0 9 9 0
+5 6 3 3
+9 9 0 9 9
+8 8 0 8 8
+0 5 5 5 5
+9 9 8 9 9
+0 0 5 0 0
+0 0 9 9 0
+50 50 21 32
+755 436 224 300 444 416 750 299 930 364 781 263 966 981 517 154 663 386 820 568 271 212 528 836 201 834 137 767 584 372 49 59 809 991 360 972 408 829 272 59 912 773 322 598 755 840 753 138 227 293
+707 217 224 236 54 425 789 909 912 93 282 961 153 810 673 513 783 800 62 57 859 974 830 183 574 305 24 47 443 969 59 869 905 283 107 678 428 615 588 341 709 870 22 862 401 695 95 185 216 157
+960 76 850 510 259 144 534 2 191 978 690 968 567 596 253 393 275 681 10 863 741 438 454 763 301 574 179 115 759 395 990 440 471 560 669 450 705 205 171 615 902 862 585 189 178 557 583 454 957 593
+37 699 32 210 463 52 784 361 885 264 756 595 423 947 156 93 117 861 17 288 197 638 869 782 828 49 59 412 222 17 724 977 716 475 189 898 246 973 261 132 956 736 446 380 403 602 474 239 184 210
+528 100 849 398 882 678 166 660 809 388 677 534 367 394 728 556 293 974 249 273 825 207 729 272 306 133 593 499 373 777 710 620 877 279 737 479 676 904 140 486 12 817 739 379 930 468 654 943 162 623
+217 987 549 946 978 855 799 572 75 891 70 785 512 666 783 968 147 460 873 6 665 605 543 405 703 193 592 78 137 754 701 74 461 969 739 440 544 539 13 619 431 83 124 662 750 907 632 616 368 225
+341 34 830 884 158 535 79 750 613 934 224 34 9 685 722 749 126 267 8 858 887 159 941 12 540 411 639 173 28 8 118 370 761 667 973 919 203 771 390 535 707 333 288 435 738 11 903 864 279 912
+442 885 790 385 616 331 796 256 224 544 983 342 914 745 728 888 384 651 380 774 187 88 827 195 523 566 206 428 150 204 60 593 808 850 978 145 182 494 401 125 757 385 186 672 849 915 281 235 567 661
+728 754 468 556 668 710 841 875 139 992 798 917 586 608 768 284 753 670 497 873 795 256 978 982 647 547 898 647 782 466 28 231 939 215 506 609 926 349 204 66 342 721 984 647 330 472 650 802 143 148
+396 658 123 375 641 490 922 259 138 425 725 885 375 384 101 881 712 28 949 916 813 11 639 517 658 688 708 309 211 852 177 607 230 19 701 871 509 343 131 367 487 575 253 862 678 73 464 392 820 414
+28 634 426 386 870 85 794 579 114 6 151 10 332 381 29 752 971 539 96 821 906 584 116 878 166 795 951 630 906 772 46 653 126 472 759 715 276 554 15 109 279 884 119 330 985 867 83 957 407 179
+499 33 482 615 630 368 130 582 998 755 75 763 129 919 954 888 636 232 443 651 341 441 255 180 771 241 48 854 200 174 752 418 925 954 752 556 323 883 857 41 358 651 805 487 572 760 376 927 711 538
+298 772 979 553 952 751 795 719 325 714 893 79 133 819 34 885 95 357 488 952 398 847 605 922 335 896 684 431 824 115 969 123 887 669 676 840 421 472 560 747 187 173 826 39 711 579 925 806 936 133
+479 54 980 85 696 36 981 381 467 806 496 156 929 104 825 325 944 248 798 225 714 704 117 260 744 829 839 389 355 495 522 834 268 504 919 964 259 620 65 445 146 281 601 794 385 428 121 49 395 919
+992 828 624 111 807 88 659 366 477 15 580 1 850 848 224 489 533 202 829 317 647 975 598 249 771 702 396 892 752 510 531 464 339 156 575 865 963 235 232 441 969 812 161 539 381 104 29 633 306 858
+950 953 554 269 922 326 971 38 219 443 549 750 908 607 625 203 474 589 158 425 750 128 239 630 386 339 735 134 972 760 993 923 434 548 911 357 593 884 114 812 47 382 282 674 990 626 878 184 935 755
+609 686 602 567 36 988 906 771 123 879 252 835 523 686 103 435 762 696 39 876 228 87 260 229 480 969 856 78 872 792 833 482 198 155 769 234 144 676 725 986 276 977 541 799 383 645 235 146 61 275
+23 290 81 2 238 561 690 95 359 563 606 193 765 523 68 535 758 930 930 203 917 207 899 179 7 283 824 961 429 885 955 171 894 37 892 852 317 583 947 676 148 274 589 913 797 657 168 275 307 99
+197 226 307 97 405 33 380 948 994 528 553 950 419 168 706 312 21 25 895 687 420 762 961 728 395 479 105 563 473 413 663 671 358 689 487 763 722 587 431 718 116 984 388 535 871 96 566 892 839 182
+581 260 944 262 989 60 460 813 623 934 227 6 325 585 414 531 68 138 119 499 0 575 236 204 963 490 76 60 58 969 618 240 270 879 903 251 588 963 712 402 307 366 630 313 410 934 447 941 4 585
+62 503 161 17 707 843 507 503 623 284 192 242 243 462 840 148 713 429 830 999 590 0 145 551 138 511 900 171 921 835 618 864 558 922 926 63 802 662 489 646 170 711 270 174 903 232 417 366 73 284
+799 222 116 944 773 972 176 393 862 816 947 200 681 507 123 327 289 925 989 999 468 999 497 292 879 210 562 54 114 794 190 200 587 475 718 809 310 382 302 2 558 414 865 376 362 784 776 588 908 823
+596 553 532 95 845 412 24 128 185 138 922 376 57 510 570 775 39 599 159 0 590 999 341 601 436 755 186 812 837 971 309 426 880 851 24 153 384 837 0 516 861 128 701 718 769 796 776 0 86 271
+39 685 430 100 288 586 574 474 399 412 165 427 558 764 279 301 918 664 139 999 468 0 918 181 719 765 601 438 535 118 215 254 204 487 294 890 636 113 897 223 687 91 342 819 257 488 378 22 768 398
+940 152 537 578 52 975 344 653 414 599 771 630 853 695 836 866 586 192 979 999 375 0 484 135 387 294 196 925 551 684 23 293 172 421 234 324 677 532 95 653 876 468 68 195 958 417 50 654 972 635
+241 884 335 444 20 722 458 216 367 10 900 390 303 74 811 257 117 489 789 0 253 999 213 861 385 681 929 581 640 67 631 15 40 267 974 924 321 420 663 44 878 879 411 607 500 801 630 293 332 887
+410 540 677 342 402 63 742 333 644 103 119 994 118 159 981 93 803 303 0 0 160 999 232 467 67 829 348 197 438 567 718 787 860 51 675 989 592 72 333 713 853 794 47 218 897 166 931 734 45 913
+828 848 936 779 316 4 610 383 919 767 950 638 555 811 690 949 521 0 360 999 86 0 2 740 854 715 594 368 482 531 267 367 464 2 131 97 549 698 34 330 734 756 659 118 677 146 788 316 701 319
+725 370 840 446 111 414 881 424 783 83 956 769 450 140 771 301 955 0 244 999 41 0 41 0 0 709 90 734 466 749 572 862 895 361 898 316 680 343 686 522 509 516 936 391 940 439 474 616 209 643
+475 700 663 432 741 664 142 831 399 327 300 971 909 914 52 808 231 999 360 0 15 999 0 5 999 733 870 636 974 380 871 630 490 531 71 964 149 280 328 343 980 991 775 441 375 636 991 775 683 292
+466 312 925 519 839 875 971 710 231 946 92 103 296 301 635 367 267 999 244 0 6 999 0 12 999 0 0 503 367 314 846 348 25 342 509 401 697 501 895 381 513 81 693 439 319 252 316 291 963 547
+956 774 370 254 76 6 340 62 509 707 95 356 775 121 698 285 522 0 182 999 1 5 1 5 12 6 13 0 116 505 137 497 19 218 910 178 538 163 494 548 845 760 506 620 131 479 416 855 819 478
+84 247 574 441 23 414 858 27 655 974 0 999 999 0 0 999 999 0 66 999 2 4 999 999 1 999 999 0 0 999 999 532 792 192 552 11 821 730 268 703 943 536 550 423 43 889 274 241 306 130
+779 504 215 27 797 375 50 212 952 0 487 371 487 371 286 170 85 27 4 66 17 1 6 1 8 17 33 43 60 44 61 0 795 867 647 329 379 558 600 390 380 331 378 802 993 914 72 417 676 962
+410 917 987 541 697 211 475 444 9 569 999 999 0 999 999 0 0 999 999 161 999 0 20 999 999 0 0 999 999 0 0 213 939 522 10 526 170 339 905 728 939 16 827 989 394 631 702 28 703 120
+704 385 531 341 374 791 757 304 985 202 33 555 416 972 0 593 425 593 425 329 999 0 48 0 78 426 219 967 484 125 415 143 141 244 133 254 594 554 282 298 674 705 403 924 47 496 435 805 800 421
+726 833 976 861 526 774 7 745 742 491 870 158 353 731 121 999 999 0 999 46 0 999 133 0 205 985 715 759 269 733 154 974 137 79 741 633 515 266 434 936 992 987 633 855 514 408 581 978 151 792
+568 28 146 300 150 352 287 865 112 275 599 266 250 736 65 710 370 299 999 392 0 999 137 0 976 524 954 970 512 588 545 745 996 127 443 866 919 12 895 67 313 46 138 319 630 968 313 949 236 282
+686 20 993 776 319 970 20 274 941 532 863 206 996 579 334 440 447 972 0 439 999 0 175 999 452 62 758 484 826 896 522 457 866 835 126 821 119 532 841 831 28 879 802 48 154 464 299 736 670 296
+317 723 736 483 697 907 545 175 112 91 73 353 267 658 190 394 199 28 0 786 999 0 228 999 926 759 578 954 639 381 3 512 845 302 250 517 317 286 959 772 488 657 680 752 833 511 843 625 865 111
+3 774 224 920 521 151 680 100 824 39 481 546 551 47 567 520 283 884 999 440 0 999 176 0 525 243 657 14 901 58 485 454 569 329 798 435 160 520 210 384 441 450 255 122 550 798 879 751 346 150
+798 913 390 82 799 915 44 176 649 664 234 135 119 804 184 636 958 344 999 787 0 999 229 0 157 888 447 317 339 702 158 609 502 38 361 567 189 878 481 579 679 0 214 723 177 582 389 130 437 227
+934 621 864 613 684 740 502 132 59 841 554 217 451 775 974 531 62 164 410 0 543 462 0 808 263 395 533 159 978 641 289 416 868 943 756 452 557 441 194 778 292 971 339 565 907 791 341 882 42 403
+765 172 666 228 980 648 343 514 807 41 156 815 176 744 478 932 197 754 93 110 533 385 82 873 670 709 384 730 592 145 853 359 317 520 306 299 887 649 532 414 690 408 230 866 871 428 518 69 183 611
+898 436 716 699 29 387 409 132 118 3 277 971 362 314 211 668 332 99 38 864 513 728 991 463 315 863 891 833 652 793 165 551 948 881 251 977 269 661 828 387 383 825 79 745 140 290 133 472 390 171
+56 622 619 767 86 934 350 696 487 3 491 652 554 159 534 525 138 522 905 685 629 289 511 708 753 370 998 886 561 108 777 618 731 397 105 536 51 455 234 538 459 444 192 732 603 445 976 460 968 882
+147 598 890 377 307 644 748 25 532 310 852 29 647 584 426 752 839 196 927 74 734 106 237 645 557 841 92 535 21 779 137 168 378 29 265 404 673 14 148 924 43 1 672 410 304 817 881 145 14 809
+937 749 634 176 114 193 18 924 447 39 704 584 926 801 332 192 924 725 924 792 369 686 793 43 97 99 860 979 962 875 508 900 344 144 77 177 337 813 103 784 572 807 88 218 329 421 129 254 865 54
+47 235 459 560 996 557 378 577 537 341 172 764 960 516 908 757 412 246 290 515 749 862 43 557 81 91 697 928 345 563 701 112 517 162 391 515 719 488 93 975 829 265 740 509 500 369 267 912 615 558
+148 85 140 909 642 940 1 59 869 65 622 572 895 858 734 287 374 173 775 186 149 324 170 608 834 389 977 820 22 313 98 170 117 957 798 759 898 799 537 487 864 160 778 761 19 232 49 113 405 544
+50 50 11 26
+868 907 882 422 297 579 962 319 892 779 208 10 737 7 488 355 525 744 562 391 904 341 153 643 574 920 475 698 184 493 972 54 401 574 195 418 154 876 456 766 657 665 495 114 391 703 470 917 448 751
+28 73 93 181 716 386 820 910 86 6 123 59 778 244 633 692 662 506 570 119 273 946 503 769 61 614 473 250 532 640 2 560 713 814 460 430 201 281 60 287 6 184 65 784 428 698 478 91 206 767
+928 198 714 433 686 494 48 160 464 299 520 466 578 234 0 39 384 202 39 444 208 764 628 274 268 57 691 465 866 616 233 796 815 666 948 502 162 715 382 626 733 902 811 312 137 812 70 521 733 109
+966 941 592 314 934 861 91 627 327 957 962 561 473 778 946 141 1 109 575 383 454 309 5 267 621 860 798 691 102 532 520 787 193 831 102 129 693 193 475 22 870 438 302 63 936 249 205 937 78 780
+40 532 809 45 518 431 905 36 842 726 568 82 514 481 913 617 329 608 529 523 349 400 961 651 464 617 619 388 555 697 887 314 949 697 78 468 848 703 505 410 430 792 492 945 992 125 563 322 452 93
+845 801 213 527 172 396 863 792 503 139 490 391 453 159 808 532 628 376 236 852 786 666 364 997 612 358 841 894 399 295 707 964 97 920 211 270 36 75 781 539 214 990 649 668 151 177 919 498 553 156
+351 59 541 434 775 873 511 618 768 911 913 195 595 729 834 806 0 870 600 781 129 815 773 779 203 643 956 841 142 230 716 212 8 258 646 503 132 159 122 620 789 754 534 385 484 370 910 204 959 511
+704 90 327 197 588 249 840 264 91 982 213 807 913 222 785 561 725 636 439 566 975 229 321 511 333 524 881 244 728 560 755 153 650 802 350 957 52 910 223 862 612 436 670 527 658 175 807 103 812 247
+669 788 195 709 300 528 235 900 491 682 462 247 835 831 768 905 790 540 535 732 403 148 169 792 394 547 968 202 650 500 168 40 289 363 749 309 610 703 928 102 387 110 69 941 661 837 566 452 97 102
+185 500 969 73 13 364 620 700 286 990 201 454 749 209 537 218 518 148 922 167 251 310 277 39 970 938 595 538 110 693 359 14 194 329 88 925 413 427 626 699 137 827 872 886 38 410 106 275 559 747
+442 529 776 439 568 747 378 882 5 208 576 365 222 490 694 29 416 826 176 44 526 313 871 119 919 628 529 744 904 89 492 66 337 269 505 624 17 603 508 23 811 85 388 752 294 801 501 711 629 677
+755 874 990 346 993 629 975 243 374 599 51 866 665 389 136 172 732 154 494 241 895 306 46 3 777 340 523 279 770 871 956 526 747 667 592 460 297 568 703 672 886 474 258 552 863 395 443 596 268 937
+557 164 244 603 885 741 662 409 21 434 282 697 679 748 365 272 927 381 559 351 772 446 825 32 0 408 427 443 723 695 382 281 578 345 603 183 805 267 592 827 420 593 244 100 61 328 92 989 709 651
+60 202 817 885 234 536 13 380 698 736 0 794 799 19 92 146 622 275 670 608 867 217 747 181 461 848 242 789 659 232 219 30 11 140 847 615 374 103 628 473 802 366 268 602 104 360 467 726 635 139
+55 222 356 802 403 537 370 646 46 999 590 0 30 597 983 779 609 124 346 225 217 450 573 690 253 939 677 855 44 38 43 489 392 182 263 615 257 67 737 794 156 384 841 905 701 544 685 30 669 32
+255 605 201 828 297 454 487 974 30 999 468 999 250 732 73 740 125 973 4 459 231 789 198 745 946 301 306 852 3 850 257 33 239 8 8 845 210 555 861 383 762 836 413 13 288 205 472 133 179 477
+592 130 985 509 875 932 811 900 504 0 590 999 533 470 761 286 710 489 13 556 699 287 137 83 50 973 216 782 981 421 255 115 320 451 426 169 438 936 763 90 467 664 595 719 135 76 724 564 565 456
+121 983 744 258 68 513 951 3 296 999 468 0 652 424 552 486 463 722 912 632 161 568 115 252 754 779 847 194 634 642 918 199 927 376 40 911 839 17 979 72 687 982 369 340 127 640 826 309 363 459
+661 244 28 776 496 502 276 63 696 999 375 0 910 705 615 828 633 710 868 546 269 605 245 342 293 947 430 353 793 71 180 103 153 358 483 397 387 261 612 889 256 675 586 885 101 920 714 734 351 303
+0 620 627 246 962 920 912 393 274 0 253 999 706 183 174 528 56 532 13 172 638 992 785 247 249 461 552 135 562 474 568 17 544 590 17 165 218 981 847 858 613 959 133 320 144 26 568 918 278 300
+91 635 293 876 883 261 58 436 0 0 160 999 115 339 629 683 356 174 993 93 59 212 75 906 71 408 866 923 447 729 668 16 648 946 316 740 302 328 336 186 589 113 341 423 453 971 826 809 864 820
+902 923 751 697 830 823 106 0 360 999 86 0 417 466 553 147 135 289 796 801 324 256 104 653 311 290 961 425 350 105 878 322 931 688 906 752 311 830 504 727 381 47 833 798 513 106 945 368 114 461
+170 439 717 274 811 748 283 0 244 999 41 0 773 0 174 633 597 53 675 529 460 301 1 490 132 225 218 232 272 770 31 505 596 696 873 710 158 44 150 595 37 961 344 39 455 237 391 53 9 67
+583 188 87 303 398 220 528 999 360 0 15 999 0 5 999 616 171 801 107 921 26 703 618 899 414 495 662 284 809 418 246 872 457 420 110 848 474 837 635 776 27 722 80 144 661 609 760 833 130 586
+474 874 290 93 493 424 307 999 244 0 5 999 0 12 999 0 0 874 708 836 293 673 709 469 95 539 318 288 377 672 65 123 115 863 267 776 192 747 329 41 334 803 915 344 615 128 768 642 3 196
+479 296 869 189 765 683 447 0 182 999 1 5 1 5 12 6 13 0 803 971 544 476 755 386 591 339 373 88 531 121 417 292 174 940 208 237 275 337 724 917 340 920 116 356 510 306 122 194 472 644
+0 999 999 0 0 999 999 0 66 999 2 4 999 999 1 999 999 0 0 999 999 167 17 122 641 404 432 980 777 520 232 617 657 524 510 317 451 748 592 788 473 230 848 114 346 923 624 371 764 818
+487 371 487 371 286 170 85 27 4 66 17 1 6 1 8 17 33 43 60 44 61 0 844 410 704 580 251 347 703 683 47 200 923 279 817 300 803 48 617 256 515 928 763 707 877 331 821 225 255 446
+999 999 0 999 999 0 0 999 999 161 999 0 20 999 999 0 0 999 999 0 0 315 21 984 878 431 689 460 682 755 164 85 803 365 727 83 901 28 887 668 364 862 184 13 626 892 890 958 433 834
+932 880 151 672 0 593 425 593 425 329 999 0 48 0 865 30 104 274 209 505 31 93 310 834 177 38 636 797 785 243 467 150 106 370 163 733 981 773 411 416 608 63 16 478 736 881 228 559 156 437
+784 905 249 95 740 999 999 0 999 46 0 999 133 0 426 851 378 225 637 621 411 507 447 781 389 899 483 163 30 899 491 93 915 969 548 516 198 109 391 355 612 298 604 707 757 750 278 854 694 635
+196 106 143 643 606 251 543 90 999 392 0 999 137 0 134 573 708 625 385 343 314 934 578 232 44 970 587 656 987 910 83 745 661 80 601 356 715 516 181 577 160 788 829 703 597 963 995 307 308 381
+369 622 316 948 854 79 638 161 0 439 999 0 175 999 454 626 73 256 91 453 337 411 529 771 927 710 350 88 218 898 510 535 862 506 561 171 888 930 512 923 879 368 4 518 529 458 863 321 434 955
+775 771 367 24 543 296 734 612 0 786 999 0 228 999 384 672 511 895 208 93 402 769 264 10 419 496 934 300 864 938 537 394 116 402 435 550 77 211 41 444 235 304 740 688 916 844 80 429 459 288
+241 580 776 506 591 197 721 245 999 440 0 999 176 0 216 586 902 472 699 19 593 135 289 670 65 49 116 300 353 575 708 989 420 788 138 598 796 379 180 292 604 490 208 326 735 424 912 638 616 332
+376 210 467 665 881 533 715 716 999 787 0 999 229 0 552 787 292 979 777 432 488 915 31 285 296 211 577 900 701 786 228 156 929 859 794 546 192 172 476 379 556 77 631 272 793 184 779 804 883 557
+237 372 193 987 657 489 199 953 109 0 620 459 0 337 776 109 916 291 374 109 463 850 207 20 927 838 12 440 742 791 246 626 68 483 998 261 471 375 469 390 48 579 729 227 635 225 55 552 516 429
+381 698 0 588 719 646 428 450 88 171 242 53 516 29 255 515 291 727 609 760 836 657 59 285 603 695 510 658 966 746 89 348 164 807 656 602 454 803 53 261 974 14 314 491 44 289 725 54 17 335
+533 572 711 593 576 316 289 805 693 256 552 501 324 436 309 980 39 483 784 93 463 478 107 778 688 869 786 133 923 522 187 458 95 898 770 671 933 60 196 628 35 749 130 78 904 159 777 943 642 281
+37 106 759 863 603 167 733 390 300 377 912 487 554 726 106 325 117 758 104 314 387 139 782 237 218 687 115 714 631 757 996 388 582 756 252 187 643 704 296 943 82 210 151 636 655 257 680 773 734 784
+88 123 924 589 79 861 277 194 295 908 670 292 297 253 768 268 440 412 973 456 75 56 666 226 412 322 202 93 814 937 597 902 779 241 492 577 821 488 490 117 117 161 410 133 133 179 402 293 591 376
+749 385 151 416 331 282 457 252 95 273 908 692 894 688 933 107 984 755 595 194 591 712 355 2 846 208 181 967 501 491 344 251 596 214 386 927 216 843 180 30 835 90 722 731 497 375 838 202 849 153
+396 441 866 471 163 432 679 344 400 181 555 463 432 152 396 818 798 612 381 978 642 218 787 84 668 5 459 226 207 28 379 603 189 964 793 352 397 473 415 516 654 689 979 805 841 377 624 359 708 725
+58 352 943 845 155 612 850 334 838 776 362 936 100 551 902 893 622 19 368 39 536 741 728 235 548 290 331 891 649 41 617 707 112 561 273 267 892 842 601 450 620 683 388 720 953 10 333 577 29 701
+335 284 444 64 239 992 354 570 884 723 611 503 150 442 783 142 710 677 985 31 128 325 714 235 764 388 245 98 965 993 519 301 996 963 84 236 675 158 526 560 881 856 782 750 300 286 893 729 963 598
+760 810 642 195 765 126 302 11 224 986 723 743 288 440 426 91 395 102 249 921 382 849 498 883 601 798 170 214 247 852 812 726 664 455 921 149 581 942 160 524 929 603 987 936 762 133 29 158 236 278
+799 337 847 298 221 449 815 111 663 63 963 195 789 347 650 431 496 950 93 376 194 24 698 182 960 461 316 989 619 271 987 138 608 835 436 548 4 970 378 667 752 62 581 262 128 232 412 625 901 505
+720 96 529 419 997 491 599 33 200 937 304 188 77 631 742 232 898 746 204 278 133 956 59 714 219 187 665 631 531 567 138 252 383 386 390 100 877 708 133 79 647 437 267 443 787 729 675 686 476 598
+683 610 556 742 325 494 649 710 845 181 996 702 153 380 89 543 199 967 971 332 765 619 769 751 63 276 481 457 963 958 57 366 288 332 828 332 545 478 43 391 659 41 812 812 140 902 76 340 589 48
+391 355 386 880 107 449 157 308 625 839 267 401 207 274 733 36 606 280 514 369 390 892 410 204 706 269 825 501 328 415 549 720 770 935 601 596 104 758 904 448 599 890 850 525 883 584 561 491 583 794
+50 50 37 18
+406 989 616 831 259 442 333 307 857 601 28 347 537 348 662 360 825 287 809 144 896 660 669 781 963 949 273 267 463 852 679 870 842 296 702 820 738 37 128 315 357 874 381 895 941 44 974 768 331 503
+912 229 882 302 729 847 252 3 833 716 855 513 306 417 528 9 238 985 764 86 301 123 960 682 737 622 726 431 391 777 935 23 725 818 325 455 385 297 177 219 732 33 451 39 450 979 766 407 684 532
+493 985 374 174 668 830 796 115 262 906 611 198 929 337 736 974 511 122 272 688 61 5 721 231 762 890 930 529 298 615 780 511 602 155 685 989 985 201 823 967 108 435 166 756 491 902 731 3 744 722
+691 805 446 132 755 927 741 686 458 759 303 239 271 624 114 675 333 818 876 158 786 703 312 672 460 804 575 911 526 39 353 937 563 519 70 320 447 812 7 905 572 29 864 562 653 978 238 987 516 833
+864 304 537 177 976 716 700 271 347 228 311 420 166 874 939 954 195 387 767 921 13 59 950 596 621 324 294 578 312 810 412 177 833 668 73 810 386 774 83 452 721 113 872 887 706 531 842 621 919 330
+543 651 108 213 966 730 537 261 309 568 790 441 464 625 110 538 436 215 313 238 668 35 70 260 641 777 792 203 399 431 252 661 801 361 593 768 0 92 132 30 120 419 539 561 884 165 391 423 321 606
+455 559 993 209 349 255 850 127 48 772 245 198 26 625 0 387 219 768 198 70 517 318 490 57 599 375 941 990 517 263 316 972 541 311 182 999 590 0 890 285 751 736 52 524 981 250 550 326 250 937
+546 737 136 616 973 174 825 31 492 201 972 483 718 954 518 410 497 548 592 388 833 344 126 604 869 826 854 139 154 823 78 419 280 932 36 999 468 999 254 825 581 5 318 501 696 520 939 652 40 350
+150 588 943 538 142 7 383 746 595 211 602 735 84 145 532 503 426 465 539 399 11 839 404 329 342 102 850 282 754 890 632 623 198 295 880 0 590 999 340 22 265 88 617 195 409 72 279 554 604 782
+699 789 41 818 800 881 223 848 942 44 699 225 517 309 576 141 508 591 23 848 613 7 936 949 202 65 23 200 339 346 982 757 136 742 576 999 468 0 655 343 519 505 286 563 205 230 82 515 807 941
+742 118 964 591 731 690 248 400 611 313 142 811 652 489 513 411 625 975 706 282 319 226 506 606 790 711 836 591 945 363 533 688 481 218 0 999 375 0 931 908 248 52 521 280 194 52 933 683 285 64
+29 261 770 311 580 997 536 905 507 248 462 99 913 544 632 321 745 850 321 677 479 288 448 719 569 643 771 222 327 775 286 356 37 775 386 0 253 999 337 492 922 961 0 890 143 817 523 688 451 844
+434 21 167 830 500 174 280 220 743 923 711 965 969 487 970 46 244 466 432 300 958 75 262 678 684 406 496 208 95 666 771 248 688 938 0 0 160 999 797 907 114 78 847 576 720 278 262 410 765 233
+456 728 418 607 29 378 401 11 775 86 417 272 13 231 939 785 198 347 443 995 255 276 793 821 853 514 100 116 924 585 68 100 314 0 360 999 86 0 487 708 63 584 110 74 360 915 210 351 928 441
+10 714 358 357 877 354 332 154 148 154 8 382 255 124 26 840 911 127 873 399 835 936 702 664 11 63 580 221 414 229 381 425 662 0 244 999 41 0 739 0 501 540 95 833 695 961 988 703 344 962
+547 90 522 178 217 396 577 771 334 280 436 345 62 736 286 195 965 667 339 628 408 841 170 222 675 865 902 383 288 966 65 554 57 999 360 0 15 999 0 5 999 587 732 274 984 29 46 319 28 201
+383 90 937 669 286 903 57 625 252 184 186 422 406 581 7 309 964 14 994 749 569 52 337 302 326 322 51 91 360 79 293 744 170 999 244 0 6 999 0 12 999 0 0 949 133 175 573 190 519 825
+374 706 966 499 288 973 528 971 706 523 440 276 576 778 298 621 819 349 432 899 428 444 363 317 394 496 211 686 406 731 512 780 157 0 182 999 1 4 1 5 12 6 13 0 479 0 164 172 528 136
+879 770 296 874 66 75 891 688 613 241 839 513 389 284 876 425 397 93 637 85 499 88 316 998 245 515 0 999 999 0 0 999 999 0 66 999 2 4 999 999 1 999 999 0 0 999 999 998 128 406
+246 982 5 18 279 880 84 354 772 491 687 733 50 201 841 334 79 267 451 172 623 255 390 430 571 0 487 371 487 371 286 170 85 27 4 66 17 1 6 1 8 17 33 43 60 44 61 0 389 394
+87 389 522 213 354 506 218 372 785 99 176 859 591 386 547 44 437 467 885 490 546 871 941 437 215 915 999 999 0 999 999 0 0 999 999 161 999 0 20 999 999 0 0 999 999 0 0 827 645 488
+936 41 294 326 282 507 680 788 726 772 294 544 667 872 854 54 139 898 210 606 503 701 154 376 362 310 310 279 857 674 0 593 425 593 425 329 999 0 48 0 486 794 434 499 839 717 8 239 225 453
+12 238 997 398 111 853 453 250 471 663 857 975 84 730 71 166 759 381 445 617 56 650 131 491 150 970 927 876 929 153 330 999 999 0 999 46 0 999 133 0 660 392 48 60 222 901 232 473 92 614
+50 68 699 780 857 865 540 239 30 877 15 399 9 225 549 699 153 427 629 25 757 290 417 805 350 640 426 582 832 238 198 882 306 616 999 392 0 999 137 0 663 883 201 922 123 231 519 856 630 529
+82 898 947 235 45 577 979 803 586 397 328 937 756 474 239 308 431 156 191 456 772 573 340 973 497 464 923 735 40 273 265 123 891 213 0 439 999 0 175 999 77 936 509 57 459 97 174 507 753 930
+700 992 958 132 868 150 588 641 724 929 335 940 113 977 676 153 252 661 994 144 593 73 81 822 848 260 919 23 767 392 673 468 104 632 0 786 999 0 228 999 600 972 782 907 334 226 837 669 885 669
+647 282 542 618 662 537 481 974 610 282 797 179 542 436 202 310 828 875 778 933 227 98 625 729 6 959 674 563 348 280 233 715 562 775 999 440 0 999 176 0 334 943 33 816 918 362 817 717 541 360
+154 744 670 983 339 168 636 286 266 262 16 990 941 690 554 290 970 507 6 252 2 60 196 35 876 834 117 694 552 658 773 425 122 444 999 787 0 999 229 0 128 181 331 483 467 316 746 483 307 688
+892 581 697 583 89 704 835 809 764 751 845 360 586 962 773 857 340 547 2 463 710 131 644 760 614 830 77 80 33 103 487 925 684 186 509 0 492 890 0 65 303 374 535 149 734 840 830 227 417 171
+774 419 353 204 269 716 964 884 547 760 683 580 863 172 226 549 358 735 760 967 519 64 342 773 931 795 614 762 741 32 653 235 171 725 439 440 443 123 44 709 883 728 291 466 900 236 734 977 690 496
+664 211 560 725 984 493 240 319 974 981 351 347 217 522 74 375 963 236 498 8 945 101 455 955 567 75 192 22 53 883 518 717 813 797 162 517 10 402 836 985 384 907 52 601 149 844 976 831 81 194
+559 746 295 15 421 582 91 614 323 862 217 841 300 749 358 462 267 369 865 105 74 250 13 126 571 162 971 267 994 771 462 273 518 476 288 659 777 379 992 101 243 210 661 262 959 21 724 945 109 590
+51 183 560 782 309 850 664 0 118 378 491 299 651 728 776 658 388 554 39 381 375 1 310 37 263 270 58 706 935 167 298 986 69 577 489 98 147 872 98 265 969 308 565 621 38 342 280 426 615 38
+808 990 757 119 29 739 109 805 447 45 692 464 750 480 42 958 578 189 831 396 173 801 704 738 142 742 799 423 888 135 180 697 844 938 535 873 678 363 399 126 408 810 309 878 291 351 837 589 259 670
+985 152 191 409 609 334 871 129 476 760 264 656 177 109 314 712 702 712 77 820 557 204 350 867 83 641 937 640 949 198 311 935 69 221 65 678 555 936 807 32 697 72 408 874 900 722 306 603 435 102
+143 712 26 493 580 827 853 518 468 804 435 498 459 504 720 524 902 276 461 710 28 877 502 436 471 403 877 778 725 33 599 868 745 625 362 326 454 216 563 922 21 0 141 200 223 861 724 126 856 905
+556 884 783 59 321 256 181 200 753 906 233 353 775 978 979 856 24 434 73 587 76 813 306 217 732 249 797 457 94 655 82 650 540 585 428 581 560 609 781 314 516 733 667 11 431 366 586 174 519 379
+480 596 911 787 532 644 755 331 820 568 705 903 220 246 208 367 827 768 977 328 83 213 62 469 943 212 836 530 386 356 909 867 671 821 374 923 466 130 973 7 698 679 910 637 644 119 6 473 606 702
+801 689 634 583 159 578 795 714 828 183 790 738 769 462 280 144 105 465 274 79 472 691 758 102 49 404 939 773 596 546 476 117 236 111 700 115 409 216 829 238 118 620 976 887 802 257 32 907 723 25
+706 914 435 465 18 484 588 957 258 185 505 453 22 460 284 441 575 693 657 125 931 494 464 627 382 985 604 133 613 47 158 320 961 313 785 979 797 94 938 775 997 163 947 20 342 232 462 637 925 838
+762 857 334 945 486 716 651 91 569 265 138 727 585 818 759 90 799 277 184 457 53 901 339 1 921 681 952 103 319 878 942 800 737 995 747 942 431 399 752 1 383 609 448 968 428 208 59 228 485 962
+404 257 864 743 977 505 426 930 609 745 809 271 266 266 985 14 927 417 132 680 419 234 9 586 203 438 794 980 385 0 943 790 257 527 253 235 34 398 166 362 863 695 352 130 961 57 862 609 474 713
+9 612 947 19 199 151 457 713 132 561 713 795 71 689 42 325 925 794 442 810 875 306 506 946 436 188 4 299 516 198 13 525 810 960 544 729 830 720 162 682 283 594 197 73 284 239 117 210 753 560
+740 629 866 965 577 23 154 581 41 389 779 773 915 310 453 460 758 4 900 920 686 902 234 883 975 518 841 94 448 595 373 189 226 958 155 522 981 29 822 742 418 603 516 53 632 969 514 110 973 134
+31 379 37 983 981 731 502 543 544 950 139 917 858 84 877 733 606 578 762 430 321 899 752 837 953 104 527 187 214 220 321 963 319 77 947 301 808 450 844 354 121 703 990 979 506 868 432 832 167 195
+981 488 814 453 46 487 557 292 674 771 231 714 454 550 791 402 571 600 571 135 673 411 557 384 111 65 971 543 897 139 458 598 628 273 52 393 760 609 685 154 100 635 868 554 905 660 675 477 979 965
+331 373 378 889 757 208 673 729 751 290 869 210 888 217 202 940 329 681 269 733 835 369 369 704 642 275 84 37 471 783 3 522 157 100 131 633 308 804 82 779 813 670 989 702 887 911 362 217 593 631
+669 149 719 40 572 81 34 657 118 225 160 839 747 36 659 878 669 967 402 751 747 934 142 457 637 30 88 718 966 400 69 636 549 788 395 123 588 430 499 425 655 659 983 122 414 643 719 84 331 122
+554 797 57 696 973 413 446 62 850 132 463 919 487 731 427 883 573 16 33 73 160 688 451 144 529 865 788 249 668 120 90 942 917 865 358 892 279 804 673 130 655 855 50 144 588 196 28 162 212 61
+954 372 468 125 235 997 710 24 965 98 862 56 41 500 921 400 112 919 923 785 50 580 642 818 724 949 733 471 830 945 532 504 37 719 630 990 436 60 16 402 158 597 177 200 98 99 319 210 19 243
+50 50 16 28
+542 77 325 267 27 777 738 576 442 989 82 479 709 431 189 864 491 205 267 368 522 444 287 620 262 606 550 0 569 984 506 112 62 550 99 807 328 556 384 770 266 185 968 975 616 159 560 826 83 827
+196 605 991 202 945 972 809 215 692 98 200 199 928 980 469 746 788 516 304 891 288 570 78 975 265 413 135 825 959 937 373 874 262 84 77 926 775 605 142 468 422 61 387 352 760 856 99 549 373 122
+161 380 411 957 357 677 90 211 222 50 149 595 643 131 398 721 58 175 46 919 643 469 980 31 821 742 606 639 11 699 481 890 798 892 848 156 289 939 87 512 708 954 826 72 86 226 793 863 120 558
+783 763 28 483 514 568 226 839 927 956 258 409 847 58 302 416 932 311 75 20 823 502 694 369 574 780 595 87 644 434 646 428 917 393 631 151 681 576 990 609 533 968 737 101 27 758 236 678 70 311
+699 893 532 113 264 108 893 578 913 258 14 560 405 931 673 37 801 355 614 792 683 866 480 421 967 507 180 922 905 251 952 324 145 486 437 128 313 331 426 227 308 159 507 714 809 899 751 611 255 85
+123 938 952 604 360 639 830 259 563 736 510 516 61 375 721 498 503 35 549 648 981 857 807 489 572 617 389 44 229 363 129 353 21 82 676 100 722 507 359 5 245 870 521 25 246 244 524 468 997 74
+118 979 650 644 188 224 263 296 268 211 659 116 283 399 199 959 499 640 468 859 645 432 449 885 457 695 848 700 882 847 493 719 827 145 365 735 369 347 32 356 558 411 191 842 810 109 802 311 749 271
+889 114 422 339 1 880 753 568 581 636 416 76 76 963 939 441 699 309 788 731 384 347 143 575 908 673 685 712 984 154 702 593 269 126 932 988 725 405 276 26 42 693 820 836 657 760 278 357 70 785
+807 173 852 670 468 761 344 154 474 48 27 896 641 15 23 293 722 467 698 0 493 459 693 315 297 70 76 294 146 865 81 953 757 933 343 226 414 687 99 889 454 127 505 96 142 528 108 865 714 806
+865 208 985 559 523 283 348 319 296 494 903 377 167 661 30 511 888 445 199 987 54 654 833 559 469 976 806 578 842 521 104 708 729 90 986 972 92 335 11 389 829 914 485 996 295 516 508 902 680 427
+610 734 800 444 294 988 421 819 567 264 341 391 691 789 200 397 481 12 732 211 120 281 844 605 997 141 122 225 44 521 371 373 256 172 818 269 162 240 89 448 224 149 558 634 939 759 33 140 490 484
+352 610 766 197 216 483 57 58 708 820 579 81 194 555 971 13 824 852 972 914 302 915 64 579 269 722 339 302 863 548 506 934 159 991 132 95 475 190 153 902 11 451 702 923 7 675 937 832 528 629
+466 549 264 530 130 533 972 188 836 555 737 62 490 615 54 341 710 529 531 863 432 261 316 136 186 42 530 842 874 59 191 341 328 455 591 458 988 564 365 544 120 821 606 610 438 660 951 149 908 203
+14 342 183 49 197 88 91 727 930 685 505 122 27 833 577 337 11 286 901 96 830 740 917 157 70 356 817 23 506 446 944 239 788 128 7 704 935 816 432 866 502 656 708 249 491 5 586 221 291 489
+317 841 230 236 998 20 311 535 43 817 700 706 57 489 553 0 0 782 194 489 600 345 76 103 3 784 352 213 508 658 153 800 148 190 361 97 426 79 117 737 333 878 275 35 304 51 243 858 834 157
+67 435 502 143 257 224 927 329 156 437 987 310 956 854 999 665 998 999 999 500 0 37 670 645 116 788 102 168 386 377 203 691 148 447 269 982 604 336 137 825 480 113 51 127 442 925 283 430 236 958
+4 455 995 675 819 830 464 922 0 569 19 921 979 167 999 165 998 0 369 0 998 999 249 868 692 305 724 519 504 838 289 350 0 933 634 150 889 312 154 345 28 829 884 577 13 526 577 302 545 500
+282 432 588 251 20 1 556 745 239 61 303 528 411 0 998 666 999 0 0 0 998 999 303 462 764 453 71 796 327 417 824 157 21 402 889 547 699 192 93 918 474 244 226 725 265 227 1 729 466 780
+33 713 911 55 895 395 228 966 192 555 103 999 999 0 998 831 999 998 998 999 644 998 0 735 431 124 857 321 671 276 513 484 913 707 728 140 152 712 368 872 442 553 653 194 268 565 250 882 680 197
+849 872 752 672 328 184 796 904 225 188 999 738 998 498 999 666 667 668 415 999 416 998 0 181 457 672 95 165 120 953 37 552 322 909 994 595 563 908 582 848 877 465 248 75 34 121 546 706 168 449
+504 73 674 411 972 133 84 786 298 922 999 404 998 368 999 452 711 999 595 903 644 999 741 54 475 782 963 190 378 247 817 960 814 695 426 63 489 461 902 36 886 72 485 110 863 161 521 556 13 324
+343 30 248 85 85 723 868 0 0 999 998 738 999 498 726 287 998 999 415 903 416 999 0 0 49 632 965 15 450 927 829 146 73 892 354 253 515 390 141 587 595 251 170 475 492 726 488 816 71 518
+65 874 603 508 743 372 999 998 998 999 998 404 999 368 998 272 0 141 462 997 322 999 998 998 999 141 710 387 592 357 936 457 430 829 531 403 345 640 544 651 236 514 822 430 7 268 637 824 339 875
+608 215 479 117 677 0 999 604 420 603 998 962 593 558 999 115 4 47 998 999 998 627 461 628 999 0 570 977 107 677 289 464 614 465 614 163 996 18 228 638 281 879 593 795 421 25 522 690 381 347
+748 257 674 999 999 998 998 999 999 420 999 999 0 423 999 44 999 999 489 999 998 818 999 999 998 998 999 999 682 456 792 80 27 489 187 423 778 652 38 244 985 202 242 4 430 599 285 29 193 799
+451 936 0 655 377 654 376 326 983 934 189 47 4 152 0 9 1 8 40 89 280 358 102 359 462 720 463 721 0 322 860 319 388 328 295 64 12 751 575 92 498 65 997 921 843 369 960 806 355 881
+767 359 999 998 998 999 999 998 998 999 999 0 0 34 0 1 999 999 948 7 999 999 998 998 999 999 998 998 0 312 367 363 60 280 164 230 217 486 91 255 594 420 551 658 151 22 952 961 520 18
+959 443 999 348 267 348 267 210 250 121 44 8 1 8 1 1 6 22 998 90 181 530 998 999 580 330 999 999 123 387 404 723 874 764 754 242 846 814 522 11 46 459 217 137 433 811 276 984 470 146
+726 142 108 999 999 998 998 999 999 13 999 2 998 999 999 2 999 41 999 8 999 441 998 999 247 160 787 409 459 836 251 565 241 974 440 724 729 683 572 545 924 583 591 384 800 447 818 331 443 522
+520 589 249 662 417 0 0 998 998 90 999 13 997 98 33 8 999 126 999 101 999 610 998 999 216 822 923 625 1 760 877 567 2 852 8 727 583 410 19 847 336 602 158 439 123 605 976 454 49 500
+975 358 468 357 494 684 899 0 999 181 998 43 999 135 999 3 999 285 998 288 999 442 998 999 418 30 900 179 907 468 899 479 477 346 781 887 365 629 224 687 506 383 529 113 360 983 880 860 678 957
+49 755 452 733 655 870 482 556 999 337 998 100 999 381 999 19 999 253 998 273 999 611 998 999 768 109 26 388 589 222 734 90 110 819 439 54 507 945 437 755 777 797 458 659 378 138 617 146 893 789
+879 268 379 82 824 867 191 0 998 429 999 195 998 769 999 69 998 378 999 368 998 999 998 0 850 256 499 73 709 590 902 529 30 675 755 694 831 511 473 348 970 851 726 827 188 872 440 977 472 708
+77 554 252 944 464 104 201 0 998 586 999 318 998 572 999 113 998 473 999 274 998 999 0 964 895 629 555 517 878 304 193 634 717 25 865 191 374 555 43 819 102 232 412 261 928 603 688 6 876 940
+950 341 763 870 306 379 220 580 999 430 998 480 999 715 998 217 999 599 998 369 999 896 99 603 809 452 322 553 37 232 927 592 276 467 413 227 879 393 156 202 82 881 79 742 551 420 225 142 446 604
+362 27 221 461 350 31 913 672 999 587 998 604 999 900 998 351 999 474 998 0 999 584 951 623 232 263 618 699 396 845 298 789 721 500 591 322 579 334 873 718 278 16 165 883 97 911 105 558 262 854
+473 653 439 144 995 390 126 615 808 0 999 767 998 716 999 527 998 600 999 522 461 107 313 901 326 623 942 624 676 817 344 954 552 228 838 650 140 662 927 121 517 120 493 676 264 490 785 391 106 595
+913 286 421 945 907 748 569 850 92 0 999 605 998 901 999 662 998 0 999 246 387 436 202 940 665 759 310 524 423 238 646 659 359 858 55 342 349 841 452 455 437 86 461 858 32 369 326 321 220 419
+286 608 574 207 268 958 967 578 0 998 998 768 999 999 998 839 999 484 110 535 849 769 613 708 825 956 777 386 409 233 823 495 413 401 247 782 447 568 722 866 854 50 160 63 318 120 749 615 604 859
+869 173 348 484 600 892 441 378 279 999 999 0 569 0 998 663 999 0 331 821 784 744 942 32 247 390 319 969 975 892 20 136 674 57 974 424 391 298 3 261 471 352 464 73 963 905 170 244 195 501
+784 979 247 727 12 494 118 50 183 812 942 921 668 999 999 840 998 998 999 999 618 697 643 43 807 942 47 69 414 118 534 206 82 159 377 45 73 878 830 53 844 558 783 58 396 833 959 927 777 881
+596 115 579 241 876 387 184 923 176 317 760 429 524 562 307 0 0 0 620 607 381 218 438 153 782 716 656 840 831 490 520 759 986 402 357 102 701 317 979 807 501 622 702 537 103 850 780 665 159 401
+991 259 339 431 412 122 866 69 681 417 279 202 895 984 324 253 806 26 289 505 552 509 128 256 48 949 107 828 615 984 949 608 962 289 758 376 130 344 164 811 761 162 733 657 148 58 630 954 802 638
+460 355 149 307 330 197 258 157 744 592 860 694 919 824 983 397 919 832 741 84 645 222 965 98 599 114 156 948 787 677 587 248 751 736 274 83 652 251 958 398 844 819 93 483 644 796 881 564 629 342
+368 993 565 334 810 883 167 685 832 954 363 139 921 116 595 196 917 966 167 876 365 12 415 178 495 779 693 96 63 42 439 150 755 5 484 566 607 370 253 159 44 616 298 965 451 612 881 369 580 49
+964 945 779 381 842 993 879 536 91 942 298 530 94 54 254 297 339 580 668 592 739 712 928 38 398 99 651 998 469 950 766 153 896 546 253 459 259 133 714 350 77 13 599 171 785 572 468 844 153 855
+437 892 288 85 650 405 185 21 123 373 971 889 245 587 155 499 47 414 632 762 484 709 494 84 599 0 657 787 844 810 362 1 423 650 87 74 774 990 95 897 83 785 506 328 373 661 827 421 77 461
+902 561 889 116 364 209 116 740 996 960 552 78 962 694 448 768 768 223 478 582 840 561 368 347 608 741 10 437 881 805 617 784 86 226 901 450 435 736 192 151 698 463 230 380 158 678 867 645 620 346
+228 461 626 596 809 235 338 538 391 221 344 9 724 430 954 345 599 390 83 510 261 500 692 491 880 569 888 467 215 509 813 443 971 440 758 500 394 816 39 786 756 383 795 481 532 750 546 850 860 629
+81 122 130 773 332 729 344 221 197 278 449 729 441 421 888 200 640 283 735 679 70 492 63 585 693 314 55 240 884 634 588 965 475 437 739 807 885 802 747 801 800 916 531 242 57 420 161 698 422 897
+50 50 35 20
+109 161 797 521 475 852 761 360 207 69 45 682 225 785 210 111 307 676 912 108 593 163 350 651 302 231 350 725 129 447 937 956 608 454 479 803 26 959 882 233 748 928 916 973 433 845 86 740 522 717
+568 835 881 637 487 902 868 556 628 716 722 285 674 332 739 872 854 766 832 456 718 300 104 354 275 537 200 80 997 442 797 285 278 398 922 484 302 792 41 930 509 482 935 902 814 675 775 388 161 328
+845 880 628 668 235 622 207 155 702 923 597 501 209 875 899 132 360 920 643 120 571 154 602 507 775 137 901 552 244 782 599 808 663 946 478 617 570 404 491 273 47 89 493 974 683 113 107 44 34 470
+882 605 624 205 831 119 342 734 671 305 517 989 115 899 937 312 236 227 716 728 219 763 536 713 738 221 545 564 983 579 35 867 904 378 791 736 498 134 471 888 158 707 598 273 607 536 585 844 482 21
+292 701 503 828 415 960 50 679 526 753 260 280 621 883 378 413 620 595 266 811 203 143 238 801 136 565 57 440 129 539 462 421 242 965 968 376 646 738 57 173 492 36 172 832 919 269 964 259 864 949
+789 69 93 747 870 229 313 647 670 442 187 133 863 148 817 551 244 464 290 301 356 782 56 248 615 975 517 580 953 383 530 463 171 624 211 760 572 524 408 243 966 315 95 549 182 632 101 426 815 392
+446 891 893 502 140 510 478 376 809 152 478 341 615 649 684 826 130 975 70 257 220 755 291 34 305 474 666 125 900 202 236 348 94 131 0 0 850 952 360 49 329 170 919 808 230 535 177 633 81 26
+610 869 284 549 625 575 583 649 50 969 493 670 172 730 737 266 580 307 219 940 75 267 829 994 794 61 249 972 694 49 717 24 918 999 666 998 999 999 2 0 573 263 578 876 912 347 846 126 736 737
+856 474 722 156 501 660 815 576 927 645 572 723 706 540 415 121 590 133 863 228 854 438 492 152 34 124 499 880 250 955 337 825 149 999 165 998 0 60 0 998 999 981 650 720 797 228 648 163 519 91
+869 778 506 709 369 359 574 598 214 731 91 366 765 933 584 365 185 540 702 11 690 762 712 341 483 229 288 132 392 526 224 981 0 998 666 999 0 0 0 998 999 306 449 691 675 808 984 992 23 716
+802 108 482 737 693 847 641 234 550 652 643 313 84 985 515 314 992 367 425 520 310 407 545 759 818 939 288 803 933 30 999 999 0 998 831 999 998 998 999 644 998 0 521 455 139 722 193 832 290 834
+785 559 207 430 592 10 135 108 324 128 475 750 367 785 876 631 265 695 572 553 500 506 302 740 961 441 182 874 992 999 738 998 498 999 666 667 668 415 999 416 998 0 472 428 498 33 635 928 625 646
+782 452 689 629 928 159 997 433 37 629 698 451 920 970 951 427 274 411 109 434 594 702 147 67 131 645 818 486 293 999 404 998 368 999 452 711 999 595 903 644 999 163 851 76 616 541 705 264 420 703
+697 176 53 116 627 973 805 580 121 798 991 948 952 305 651 100 373 782 464 192 269 757 356 121 833 691 0 0 999 998 738 999 498 726 287 998 999 415 903 416 999 0 0 382 539 955 521 962 372 697
+16 207 325 708 732 624 548 531 336 497 203 641 149 303 733 651 767 926 920 525 2 761 359 693 862 999 998 998 999 998 404 999 368 998 272 0 141 462 997 322 999 998 998 999 618 649 384 581 740 82
+316 948 126 25 681 470 293 931 806 790 136 167 940 439 901 592 926 547 232 171 549 712 250 243 0 999 604 420 603 998 962 593 558 999 115 4 47 998 999 998 627 461 628 999 0 575 868 611 959 450
+352 760 766 20 887 510 701 358 803 353 883 314 489 769 973 647 671 285 574 219 517 465 999 999 998 998 999 999 420 999 999 0 423 999 44 999 999 489 999 998 818 999 999 998 998 999 999 487 949 715
+449 525 303 779 205 472 133 684 957 871 572 468 293 649 991 646 252 306 136 23 998 0 655 377 654 376 326 983 934 189 47 4 152 0 9 1 8 40 89 280 358 102 359 462 720 463 720 0 783 413
+284 78 352 520 262 839 470 696 9 715 0 788 920 472 640 605 430 513 897 617 806 999 998 998 999 999 998 998 999 999 0 0 34 0 1 999 999 948 7 999 999 998 998 999 999 998 998 0 266 609
+453 238 634 308 261 633 810 393 636 607 745 158 869 586 347 566 314 63 285 103 702 999 348 267 348 267 210 250 121 44 8 1 8 1 1 7 22 998 90 181 530 998 999 757 744 999 999 309 188 258
+925 806 783 910 135 237 149 489 264 129 841 75 523 479 402 269 356 272 574 703 558 888 999 999 998 998 999 999 13 999 2 998 999 999 1 999 41 999 8 999 441 998 999 486 843 992 189 602 456 217
+509 714 143 35 498 55 889 454 204 379 437 53 939 231 576 419 633 845 494 625 140 199 184 747 0 0 998 998 90 999 13 997 98 33 8 999 126 999 101 999 610 998 999 685 746 740 874 68 197 93
+297 630 954 332 847 728 222 302 652 320 458 705 261 690 282 399 324 846 894 949 986 812 852 454 217 600 0 999 181 998 43 999 135 999 3 999 285 998 288 999 442 998 999 195 810 387 112 622 684 461
+578 736 310 26 677 331 678 998 790 384 978 481 385 378 524 233 991 194 938 804 47 393 740 366 308 552 754 999 337 998 100 999 381 999 19 999 253 998 273 999 611 998 999 139 175 158 600 753 894 629
+780 573 680 178 291 190 563 988 390 948 367 914 900 79 109 840 602 875 952 344 242 261 896 715 400 72 0 998 429 999 195 998 769 999 69 998 378 999 368 998 999 998 0 874 720 545 488 350 45 780
+749 223 72 939 505 61 330 174 148 964 75 945 74 634 548 949 588 611 911 849 508 627 969 300 221 690 0 998 586 999 318 998 572 999 113 998 473 999 274 998 999 0 564 710 759 609 210 510 551 2
+169 776 781 500 950 648 465 744 594 258 380 862 927 968 474 839 818 702 186 507 3 408 198 286 837 677 614 999 430 998 480 999 715 998 217 999 599 998 369 999 48 188 884 50 76 661 551 576 612 200
+760 77 795 20 457 658 666 426 851 506 963 554 692 472 276 819 389 562 376 67 895 425 973 781 194 51 443 999 587 998 604 999 900 998 351 999 474 998 0 999 745 346 775 946 108 852 461 846 310 838
+232 455 690 738 419 964 150 610 241 970 1 523 66 786 419 491 761 201 405 531 364 869 877 140 535 704 711 996 0 999 767 998 716 999 527 998 600 999 270 22 835 502 196 246 959 334 211 829 945 452
+519 665 694 585 171 115 796 651 35 202 183 399 790 780 258 327 204 969 324 194 710 879 415 906 126 376 242 337 0 999 605 998 901 999 662 998 0 999 206 906 508 444 291 204 30 462 38 826 115 73
+747 17 192 539 797 450 866 721 421 909 915 850 789 331 758 915 426 719 971 351 626 481 795 636 685 545 99 0 998 998 768 999 999 998 839 999 723 372 932 515 121 950 707 660 467 159 246 907 299 156
+542 150 946 874 627 581 20 347 554 91 692 754 886 329 440 151 148 882 524 799 398 364 469 107 743 656 984 989 999 999 0 564 0 998 663 999 0 3 146 108 153 811 701 500 394 440 847 667 531 260
+422 138 308 581 289 456 464 532 975 581 896 445 407 640 102 392 630 386 114 496 494 268 308 914 487 421 355 54 89 606 314 230 999 999 840 998 998 999 999 744 623 530 752 798 713 286 493 296 183 939
+703 543 760 815 174 147 929 389 360 916 698 993 404 120 350 459 928 956 492 877 420 834 409 173 634 841 178 128 138 362 786 561 624 548 0 0 0 96 517 414 26 907 775 662 606 769 67 445 838 245
+93 514 457 690 934 292 818 827 926 660 6 774 518 87 561 80 711 828 176 230 244 920 856 738 583 463 508 370 627 67 334 440 581 791 131 236 85 949 782 730 329 788 224 847 595 505 646 26 334 822
+974 297 463 831 36 47 14 264 136 642 331 471 83 631 981 932 867 785 601 650 517 930 159 741 779 473 247 145 499 301 687 475 598 151 26 354 916 41 618 54 402 668 244 485 300 944 418 169 731 20
+819 249 669 697 709 168 171 676 314 671 977 2 865 295 153 610 649 788 651 268 561 54 936 524 258 238 470 395 126 920 134 664 888 804 363 598 972 534 275 6 924 971 8 509 268 879 121 917 388 491
+905 949 546 561 475 523 518 664 919 644 585 772 29 474 577 392 791 270 645 786 994 290 758 722 518 27 602 639 664 709 850 570 660 397 850 854 639 370 519 559 733 823 52 762 17 629 873 808 618 520
+595 614 529 355 337 48 101 658 407 765 369 258 55 748 374 906 603 14 277 841 293 729 384 345 493 401 693 367 210 32 606 525 365 854 599 421 903 700 80 30 186 168 288 241 635 662 866 957 395 862
+518 407 593 902 471 805 304 166 173 234 198 499 478 282 354 78 703 976 497 783 7 683 671 295 644 26 676 511 984 791 375 503 199 687 126 671 493 149 556 666 102 473 884 580 755 240 658 459 217 157
+961 225 559 352 239 204 379 635 716 83 427 810 586 345 498 431 17 991 581 292 377 683 765 263 265 521 222 642 699 439 518 662 383 79 15 623 2 394 977 718 477 405 248 783 750 746 933 487 457 515
+779 835 918 265 817 902 786 40 545 487 198 783 868 301 581 883 643 583 997 621 22 194 27 270 977 496 736 912 983 194 147 483 748 66 748 566 687 254 325 952 460 524 736 329 544 318 932 188 620 930
+809 642 125 836 632 822 52 369 454 755 282 320 239 32 106 706 317 793 679 643 746 859 886 483 907 431 520 840 619 860 490 429 222 335 984 854 876 37 224 50 511 226 370 469 258 476 176 575 271 575
+219 736 435 824 939 62 256 179 903 594 40 113 24 263 448 727 118 44 484 62 94 995 288 465 466 265 660 361 840 650 655 779 388 809 604 328 872 580 507 776 175 267 608 918 530 776 365 367 820 849
+148 915 565 436 100 750 420 760 830 262 131 487 760 519 297 84 566 170 664 792 665 559 60 993 197 590 770 562 677 591 132 825 226 697 981 326 167 402 806 997 383 937 485 144 176 502 229 742 391 612
+254 776 172 315 770 369 624 541 932 302 851 65 847 797 481 829 124 648 232 649 365 335 306 570 479 482 73 708 943 183 322 199 959 213 233 730 583 576 990 235 598 562 19 446 360 500 276 203 867 227
+853 233 562 160 803 761 362 595 470 306 779 511 224 458 725 176 190 28 753 899 263 352 462 282 798 822 501 793 27 369 739 599 321 22 478 844 783 840 440 972 148 938 204 91 398 929 268 307 676 22
+207 658 93 389 940 610 930 161 123 676 249 862 276 570 884 755 415 387 596 575 361 463 514 565 274 912 214 542 938 609 283 147 268 376 255 927 705 186 89 828 863 338 691 140 627 296 614 762 402 212
+338 763 394 571 48 668 204 980 929 143 590 213 9 577 308 264 505 14 451 313 842 315 651 254 174 998 550 789 761 952 720 818 436 115 390 203 503 594 185 433 457 494 647 466 791 674 731 297 689 901
+611 251 935 981 505 110 699 774 618 461 728 339 998 883 174 390 87 677 703 990 829 161 205 477 347 996 871 797 13 561 699 343 812 354 45 38 183 744 812 802 925 260 860 924 144 35 34 950 431 738
+50 50 25 24
+899 584 458 965 300 330 763 314 891 463 376 424 536 421 462 720 885 993 523 811 255 384 455 399 139 490 69 570 229 730 832 847 315 292 814 335 341 578 649 952 761 744 377 298 167 558 19 53 552 261
+583 807 646 39 926 504 529 714 75 477 445 627 326 480 638 859 815 979 438 184 932 918 928 29 936 814 306 955 586 859 936 170 386 302 928 32 806 177 747 881 655 911 509 981 111 866 841 645 847 998
+829 780 918 478 529 855 293 835 530 880 414 467 769 801 769 417 552 295 595 300 178 251 931 406 951 43 274 512 689 840 511 519 340 149 716 869 723 11 706 973 610 839 160 99 360 649 517 913 944 113
+932 841 83 864 967 35 908 960 547 598 801 777 836 142 646 554 731 89 284 157 781 613 996 942 712 358 311 948 272 974 62 205 817 145 71 785 898 698 465 446 297 267 943 134 128 309 407 859 398 691
+735 899 24 733 842 737 810 872 405 83 847 468 7 384 332 796 170 232 495 635 397 511 621 60 365 750 369 772 329 487 184 66 387 926 518 230 664 329 821 71 131 669 258 138 55 309 654 943 541 868
+299 658 381 639 718 746 109 89 238 439 576 141 224 963 69 742 912 452 72 453 242 203 123 219 60 896 529 714 560 789 303 859 448 684 499 168 150 609 975 388 767 271 530 991 953 318 734 585 770 525
+39 14 447 162 233 507 778 762 941 339 272 245 917 720 648 136 607 798 464 302 187 232 573 436 942 246 754 396 831 245 921 870 977 88 752 211 596 531 693 257 870 965 221 788 405 588 924 732 387 390
+35 293 341 609 449 285 574 922 681 407 168 323 278 146 411 31 77 726 281 489 702 152 174 642 659 579 231 304 312 337 413 348 350 473 676 799 758 251 441 160 377 610 202 656 475 332 406 271 60 688
+760 481 559 934 843 938 234 75 961 546 132 375 613 482 848 9 1 327 261 442 206 638 771 408 14 966 459 140 238 238 828 0 720 107 653 564 46 887 358 8 154 209 102 767 410 670 777 411 997 757
+573 922 115 64 50 848 31 509 988 988 748 536 707 188 643 361 471 409 250 548 136 404 477 239 890 887 909 387 19 626 145 311 268 979 375 318 828 126 546 536 115 14 73 822 202 716 902 392 126 871
+941 263 994 419 221 886 26 849 274 45 195 139 356 463 837 451 500 385 296 47 921 411 62 713 0 0 952 982 430 574 376 276 447 37 258 442 175 198 48 201 48 42 965 243 899 322 425 456 492 925
+841 788 972 482 918 753 196 590 737 345 166 832 340 613 869 598 774 45 796 542 964 563 584 999 666 998 999 999 930 0 806 484 972 232 940 465 876 501 973 569 983 892 323 898 484 779 244 369 331 304
+701 201 902 476 964 419 19 930 982 322 861 509 525 553 460 185 20 338 686 712 907 389 324 999 165 998 0 949 0 998 999 288 527 449 252 896 780 556 598 701 178 76 666 316 813 316 300 137 897 528
+662 451 988 848 190 46 254 902 672 363 228 623 370 755 791 622 372 572 897 970 274 795 0 998 666 999 0 0 0 998 999 765 660 112 299 695 131 436 593 659 817 46 368 385 954 414 359 577 88 722
+805 430 93 280 222 435 652 513 52 343 507 847 109 886 679 408 582 810 563 177 999 999 0 998 831 999 998 998 999 644 998 0 190 101 941 277 205 896 691 564 474 498 287 998 647 381 998 588 535 370
+103 587 713 329 436 542 216 834 669 798 364 952 975 554 54 636 550 259 534 999 738 998 498 999 666 667 668 415 999 416 998 0 243 543 727 460 830 446 109 930 445 416 466 815 519 773 249 848 928 510
+65 763 898 583 128 851 278 402 624 915 952 603 169 914 147 896 376 696 343 999 404 998 368 999 452 711 999 595 903 644 999 204 628 507 620 813 43 859 587 11 427 516 521 212 280 420 795 128 273 74
+530 616 989 483 220 159 399 86 775 494 783 837 417 131 346 38 0 0 999 998 738 999 498 726 287 998 999 415 903 416 999 0 0 944 108 616 252 119 45 487 359 257 487 779 771 615 771 845 864 389
+555 348 328 433 466 415 209 679 917 766 97 49 831 854 712 999 998 998 999 998 404 999 368 998 272 0 141 462 997 322 999 998 998 999 939 471 683 777 516 172 137 492 378 916 264 993 408 111 577 516
+385 644 844 818 112 978 747 791 896 514 608 664 346 463 0 999 604 420 603 998 962 593 558 999 115 4 47 998 999 998 627 461 628 999 0 97 5 934 780 782 171 671 919 663 50 555 928 762 682 758
+340 199 144 985 763 962 816 461 429 327 359 943 999 999 998 998 999 999 420 999 999 0 423 999 44 999 999 489 999 998 818 999 999 998 998 999 999 935 742 9 399 839 732 54 621 515 225 12 154 888
+63 429 536 544 112 295 885 31 439 590 794 0 655 377 654 376 326 983 934 189 47 4 152 0 9 1 8 40 89 280 358 102 359 462 720 463 721 0 122 407 256 551 453 334 215 390 796 224 508 636
+676 562 976 192 787 989 66 677 771 214 932 999 998 998 999 999 998 998 999 999 0 0 34 0 1 999 999 948 7 999 999 998 998 999 999 998 998 0 316 45 229 920 76 668 511 589 509 637 846 780
+92 899 995 482 696 938 990 53 615 273 748 999 348 267 348 267 210 250 121 44 8 1 8 1 1 7 22 998 90 181 530 998 999 527 61 999 999 457 593 457 229 526 391 265 571 620 186 648 8 417
+238 237 55 803 18 147 423 14 348 120 671 59 999 999 998 998 999 999 13 999 2 998 999 999 1 999 41 999 8 999 441 998 999 891 288 332 641 534 112 817 846 570 48 373 680 32 944 20 936 312
+746 354 551 983 129 74 2 994 497 734 344 337 126 122 0 0 998 998 90 999 13 997 98 33 8 999 126 999 101 999 610 998 999 229 133 173 589 667 285 408 514 574 175 606 255 925 551 275 862 864
+23 218 135 725 347 209 447 61 707 182 405 763 27 246 992 160 0 999 181 998 43 999 135 999 3 999 285 998 288 999 442 998 999 419 302 827 424 710 61 998 604 667 973 530 938 967 393 522 709 330
+657 436 396 585 883 458 12 784 582 775 812 829 488 972 967 790 520 999 337 998 100 999 381 999 19 999 253 998 273 999 611 998 999 392 220 581 111 824 968 85 355 626 53 467 149 482 798 525 918 913
+111 802 372 124 587 955 899 400 504 388 93 472 897 613 584 118 0 998 429 999 195 998 769 999 69 998 378 999 368 998 999 998 0 913 414 661 601 218 735 228 989 204 377 472 721 902 391 635 733 194
+9 857 501 683 476 620 188 584 713 379 482 327 682 320 960 97 0 998 586 999 318 998 572 999 113 998 473 999 274 998 999 0 981 562 315 718 510 306 922 606 778 363 229 889 998 962 802 726 539 304
+410 16 925 598 319 358 697 802 405 380 841 366 197 823 647 231 261 999 430 998 480 999 715 998 217 999 599 998 369 999 158 537 902 765 36 266 994 644 266 957 447 992 497 752 123 232 397 440 552 755
+138 74 161 238 915 527 435 458 894 666 720 53 923 623 818 678 890 999 587 998 604 999 900 998 351 999 474 998 0 999 532 323 875 490 489 868 706 242 991 658 358 152 211 115 290 285 994 528 919 242
+682 378 137 69 99 190 711 723 728 109 333 261 151 209 471 640 796 178 0 999 767 998 716 999 527 998 600 999 602 508 836 960 660 766 76 950 770 790 199 690 33 600 70 170 388 887 79 100 330 807
+927 382 70 79 591 541 439 389 438 42 616 994 3 277 761 798 946 533 0 999 605 998 901 999 662 998 0 999 589 864 942 341 185 731 511 573 339 309 393 669 118 321 53 906 120 363 167 559 471 324
+320 88 319 323 84 800 840 750 53 430 615 995 771 800 728 2 94 0 998 998 768 999 999 998 839 999 68 312 487 456 149 527 228 56 366 592 941 644 782 266 964 590 305 8 674 106 848 425 877 998
+760 873 489 280 321 211 374 108 523 580 565 391 827 512 447 194 823 108 999 999 0 558 0 998 663 999 0 607 374 523 198 398 250 591 223 818 736 101 817 497 975 26 777 16 237 871 125 479 452 409
+870 280 640 37 194 465 145 752 791 239 994 708 637 246 300 861 65 755 962 601 253 657 999 999 840 998 998 999 999 627 750 674 865 622 518 345 75 927 217 75 568 972 269 752 119 22 544 358 17 253
+714 981 273 295 47 29 977 648 2 635 995 752 29 861 94 547 925 887 194 861 962 482 835 950 0 0 0 235 954 691 499 32 428 752 465 410 744 761 177 493 739 544 495 94 540 248 124 121 342 390
+48 230 304 628 912 786 464 863 740 138 556 240 888 984 712 355 114 176 835 291 669 294 836 165 388 377 132 231 499 474 341 266 424 645 894 337 151 79 919 891 935 476 851 825 180 564 899 295 740 735
+305 130 30 142 295 137 239 428 369 457 621 710 723 46 75 337 102 226 135 23 118 72 218 688 897 118 253 516 132 713 970 437 843 719 299 857 856 538 286 944 995 908 374 438 673 449 494 776 394 630
+518 232 702 455 920 319 573 893 554 705 607 525 862 170 245 162 28 102 419 34 48 134 661 422 572 335 591 785 830 985 416 349 218 837 524 140 157 98 34 711 523 360 955 105 249 201 267 995 304 405
+30 71 539 691 212 830 746 522 616 577 509 752 646 446 590 171 305 467 987 339 179 511 418 136 335 386 56 602 383 79 8 132 150 547 824 82 97 571 604 714 867 832 467 514 280 58 404 585 525 393
+644 424 623 781 279 959 169 54 281 552 134 9 684 284 275 228 85 373 518 690 88 387 523 274 620 522 51 26 109 296 138 472 439 761 254 437 440 423 491 722 694 625 731 99 629 725 327 714 99 565
+124 905 952 648 180 292 171 950 318 998 247 175 471 405 656 726 842 97 868 53 538 564 398 988 382 28 715 709 461 814 993 586 440 665 953 620 958 843 290 995 843 256 172 34 661 828 760 223 644 349
+277 184 632 675 173 15 422 607 443 602 423 438 189 863 104 861 203 63 706 213 60 269 469 950 303 850 779 783 74 424 133 70 327 765 464 220 499 886 827 942 209 969 381 398 833 486 261 756 268 686
+969 47 955 158 997 977 9 496 761 84 640 613 872 686 98 338 906 597 943 735 541 153 705 641 271 259 128 251 734 116 937 423 881 612 581 599 590 591 96 353 394 455 685 267 143 784 605 768 382 269
+504 642 422 929 285 693 907 132 663 642 248 601 784 131 214 366 730 524 676 545 596 71 720 282 58 582 67 663 351 169 651 575 811 75 224 815 487 132 948 152 493 915 472 996 765 406 363 215 930 41
+480 527 830 201 809 888 502 596 272 572 484 923 148 15 717 91 831 924 941 499 795 435 415 268 151 900 393 515 116 324 275 315 570 824 235 100 714 737 696 705 311 899 348 178 914 67 270 465 710 212
+964 506 367 100 493 518 719 606 752 554 930 28 870 502 853 106 602 287 844 18 992 156 636 341 53 551 127 323 736 837 536 420 63 622 239 276 141 958 882 894 514 532 641 385 753 214 210 356 501 55
+93 213 929 729 274 983 1 401 26 456 958 562 876 740 903 835 735 46 794 337 659 28 870 301 132 624 516 343 700 736 398 512 950 48 961 943 32 962 64 776 138 741 59 15 483 962 850 937 9 365
+50 50 50 50
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+50 50 49 50
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
+5 5 3 1
+897 802 765 992 1
+521 220 380 729 969
+184 887 104 641 909
+378 724 582 387 583
+241 294 159 198 653
+5 5 1 2
+692 36 901 516 623
+703 971 304 394 491
+525 464 219 183 648
+796 287 979 395 356
+702 667 743 976 908
+5 5 3 1
+106 380 193 214 71
+920 114 587 543 817
+248 537 901 739 752
+364 649 626 702 444
+913 681 529 959 72
+5 5 3 3
+738 103 119 872 900
+189 65 113 260 985
+228 537 217 735 785
+445 636 214 196 690
+553 822 392 687 425
+5 5 2 4
+73 525 412 155 263
+205 965 825 105 153
+580 218 103 255 136
+641 472 872 115 607
+197 19 494 577 572
+5 5 4 5
+259 120 421 165 194
+637 577 39 900 472
+4 724 577 157 304
+486 261 249 312 592
+411 874 397 18 70
+5 5 4 2
+338 679 517 997 938
+328 418 793 522 745
+59 561 644 532 255
+57 108 413 51 284
+364 300 597 646 712
+5 5 2 3
+730 231 459 932 569
+829 138 565 766 466
+673 559 678 417 618
+930 751 840 184 809
+639 287 550 923 341
+5 5 5 4
+987 252 370 29 672
+601 178 603 860 6
+431 114 463 588 788
+712 956 895 19 575
+336 860 760 835 498
+5 5 5 3
+110 78 925 320 755
+176 690 784 848 981
+653 140 840 659 262
+954 812 850 431 523
+495 16 233 70 352
+5 5 2 1
+877 280 256 260 390
+24 185 400 780 51
+89 253 900 760 906
+730 599 565 992 243
+66 531 364 590 26
+5 5 3 4
+787 422 605 306 298
+885 562 249 965 277
+124 365 56 175 144
+309 765 595 215 495
+884 470 176 126 536
+5 5 3 3
+816 114 251 328 901
+674 933 206 662 507
+458 601 162 735 725
+217 481 591 51 791
+355 646 696 540 530
+5 5 1 1
+346 391 114 527 898
+228 779 225 819 142
+849 24 494 45 172
+95 207 908 510 424
+78 100 166 869 456
+5 5 4 4
+996 341 109 402 688
+501 206 905 398 124
+373 313 943 515 161
+657 700 898 830 795
+104 427 995 219 505
+5 5 3 4
+64 241 196 318 927
+228 428 329 606 619
+535 200 707 660 574
+19 292 88 872 950
+788 769 779 272 563
+5 5 4 3
+782 400 52 857 154
+293 744 473 219 972
+591 238 267 209 464
+467 916 814 40 625
+105 820 496 54 297
+5 5 5 5
+570 828 418 527 299
+509 269 156 663 562
+900 826 471 561 416
+710 828 315 864 985
+230 677 25 856 782
+5 5 3 3
+527 832 306 49 91
+824 158 618 122 357
+887 969 710 138 868
+536 610 118 642 9
+946 958 873 931 878
+5 5 4 2
+733 20 180 775 547
+11 771 287 103 594
+135 411 406 492 989
+375 201 817 933 427
+116 51 69 125 687
+5 5 2 3
+307 594 927 643 17
+638 823 482 184 525
+943 161 318 226 296
+419 632 478 97 697
+370 915 320 797 30
+5 5 4 1
+847 748 272 224 746
+557 151 388 264 789
+211 746 663 426 688
+825 744 914 811 853
+235 980 951 933 349
+5 5 5 3
+836 585 313 392 431
+751 354 656 496 601
+497 885 865 976 786
+300 638 211 678 152
+645 281 654 187 517
+5 5 5 3
+139 672 692 81 507
+968 84 589 398 835
+944 744 331 234 931
+906 99 906 691 89
+234 592 768 386 927
+5 5 1 1
+113 255 362 942 394
+33 323 165 231 290
+249 820 379 775 763
+813 796 688 744 701
+787 339 81 566 573
+5 5 5 4
+650 980 382 379 783
+327 432 724 722 155
+47 577 386 27 827
+206 406 601 659 219
+86 346 963 787 823
+5 5 4 2
+389 565 921 412 214
+590 484 283 372 812
+715 787 533 871 524
+109 947 551 626 843
+958 917 502 176 2
+5 5 4 1
+479 51 820 36 130
+384 647 542 288 236
+26 572 609 838 977
+395 60 537 919 860
+484 159 486 326 116
+5 5 3 5
+983 95 747 501 264
+798 321 301 928 395
+948 469 374 875 185
+636 173 22 612 568
+82 149 176 633 323
+5 5 2 2
+339 142 901 858 124
+686 604 626 951 91
+637 251 709 722 889
+177 95 453 363 731
+626 75 33 193 849
+5 5 2 1
+481 505 395 289 844
+537 189 391 351 876
+685 667 826 466 994
+767 174 716 345 352
+501 799 405 923 424
+5 5 2 1
+308 18 828 367 499
+22 452 788 556 679
+978 638 30 543 322
+697 368 789 691 825
+653 96 169 4 287
+5 5 1 4
+209 392 270 855 700
+288 682 757 788 394
+209 265 951 888 242
+588 918 785 600 305
+843 78 686 667 732
+5 5 1 2
+426 759 494 216 969
+886 486 513 275 464
+886 32 942 279 932
+207 920 819 449 197
+427 925 798 422 457
+5 5 3 1
+124 988 579 651 414
+337 144 320 996 721
+806 509 686 960 394
+408 902 363 339 108
+283 849 247 480 275
+5 5 3 3
+697 319 224 494 133
+211 763 784 315 99
+618 635 786 28 130
+985 715 90 68 122
+992 431 152 99 404
+5 5 3 3
+575 275 899 542 662
+217 456 846 350 668
+608 824 673 707 131
+308 182 160 438 166
+565 218 234 377 209
+5 5 5 2
+999 760 529 35 334
+494 624 567 846 841
+22 691 881 380 298
+394 53 696 215 51
+878 375 489 735 630
+5 5 4 2
+7 607 14 536 296
+465 756 21 799 249
+645 365 786 485 78
+476 55 458 775 449
+511 160 354 252 37
+5 5 1 5
+462 49 830 121 56
+126 826 283 422 290
+38 443 780 978 87
+835 763 262 913 930
+317 371 394 456 572
+5 5 2 2
+825 281 230 256 744
+970 776 555 26 902
+380 1000 324 361 37
+457 140 705 545 975
+158 497 578 87 505
+5 5 4 4
+651 210 725 151 725
+5 71 671 749 41
+446 994 67 38 374
+66 362 425 794 509
+565 188 744 229 346
+5 5 4 1
+123 746 445 294 86
+346 709 238 70 715
+309 432 153 350 568
+147 107 606 211 173
+658 636 657 167 891
+5 5 4 2
+810 882 842 617 696
+277 752 680 364 97
+389 602 859 794 601
+290 947 952 548 784
+58 154 995 923 502
+5 5 5 4
+359 901 424 270 711
+997 802 17 692 79
+769 371 443 867 760
+735 725 553 335 705
+190 977 252 974 35
+5 5 5 2
+648 599 669 226 648
+570 341 918 971 337
+410 988 719 489 446
+89 622 312 540 46
+727 783 381 431 663
+5 5 3 1
+327 774 470 986 421
+759 654 647 407 914
+678 14 574 705 424
+561 423 603 7 203
+224 9 743 270 737
+5 5 3 4
+858 569 80 231 896
+854 392 881 274 150
+224 611 247 829 289
+953 402 994 376 654
+417 670 351 310 584
+5 5 4 3
+545 787 958 887 645
+526 657 876 421 510
+267 992 784 108 907
+84 355 735 373 307
+136 57 374 480 164
+5 5 5 2
+474 317 191 216 862
+668 864 438 312 80
+94 188 501 604 145
+183 77 253 89 162
+299 824 225 296 650
+5 5 4 2
+130 136 93 651 610
+411 842 516 272 200
+380 711 512 460 805
+390 651 99 536 524
+176 479 613 28 468
+5 5 3 1
+765 777 226 124 597
+363 218 247 663 629
+780 870 901 980 249
+301 491 399 106 572
+740 205 107 264 71
+5 5 2 1
+791 745 3 44 509
+470 961 323 66 13
+541 3 367 860 783
+236 451 762 175 752
+944 574 858 515 313
+5 5 1 3
+577 515 588 454 305
+22 147 39 221 617
+1000 545 373 704 776
+376 70 326 850 997
+777 611 171 528 244
+5 5 4 1
+449 748 519 451 15
+33 730 159 338 752
+306 377 974 613 67
+208 986 461 984 51
+221 309 901 217 776
+5 5 1 3
+304 136 823 70 586
+260 589 36 275 623
+766 434 651 208 430
+28 181 42 786 389
+718 246 62 770 467
+5 5 1 3
+684 838 562 762 832
+699 274 902 284 224
+181 10 500 804 467
+624 454 675 54 172
+546 96 958 625 505
+5 5 2 4
+274 360 439 634 734
+968 887 495 799 585
+459 391 559 684 572
+569 874 375 726 187
+519 400 241 382 636
+5 5 3 4
+260 533 233 638 497
+283 76 821 17 43
+707 512 533 291 662
+924 540 35 185 800
+599 250 525 786 769
+5 5 4 1
+150 251 746 180 512
+969 103 149 465 386
+916 976 403 960 683
+606 182 664 958 796
+204 993 981 3 591
+5 5 5 1
+66 689 834 784 840
+85 529 710 597 497
+503 746 652 889 661
+318 983 310 691 278
+182 354 235 978 248
+5 5 2 3
+942 508 187 160 264
+877 994 48 406 78
+577 806 365 765 308
+801 106 887 152 114
+869 462 805 146 335
+5 5 3 1
+312 97 989 961 730
+496 838 890 761 404
+573 499 810 342 766
+305 707 530 303 508
+327 190 660 441 749
+5 5 4 3
+586 837 786 657 149
+573 646 800 302 832
+637 882 282 41 455
+781 541 487 547 537
+884 767 840 391 784
+5 5 4 4
+225 779 243 161 54
+770 637 711 609 209
+46 408 512 879 45
+393 851 777 538 632
+317 24 869 854 909
+5 5 2 5
+990 419 413 421 334
+882 354 185 936 123
+822 337 733 30 383
+831 232 952 876 316
+803 342 854 124 350
+5 5 5 3
+894 167 317 277 847
+426 691 267 450 262
+311 635 889 125 146
+916 548 868 989 378
+99 941 945 415 433
+5 5 2 4
+557 636 528 239 530
+695 246 807 541 673
+187 499 122 140 500
+448 28 625 594 634
+172 151 622 551 251
+5 5 4 3
+356 685 471 315 932
+107 533 861 327 227
+107 133 459 780 11
+648 592 151 147 39
+870 463 324 503 325
+5 5 1 1
+876 416 377 751 463
+752 222 778 684 19
+311 544 346 228 341
+169 377 120 180 24
+403 21 863 442 891
+5 5 1 3
+83 650 622 208 216
+728 275 967 190 717
+879 969 90 898 970
+325 243 197 666 413
+265 477 283 289 880
+5 5 3 2
+11 195 857 468 279
+507 780 177 413 507
+142 69 388 859 949
+46 640 846 15 965
+780 903 630 192 858
diff --git a/codejam_2008/src/y2008round_apac/B-small-practice.in b/codejam_2008/src/y2008round_apac/B-small-practice.in
new file mode 100644
index 0000000..499bb28
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/B-small-practice.in
@@ -0,0 +1,584 @@
+100
+3 3 2 2
+2 3 2
+1 7 1
+2 1 2
+4 3 2 1
+1 2 2 0
+10 8 5 10
+10 2 9 10
+3 3 2 2
+0 0 0
+0 1 0
+0 0 0
+3 3 2 2
+0 0 4
+0 4 8
+0 9 5
+3 3 2 2
+0 1 0
+0 5 5
+0 9 8
+4 3 2 2
+0 3 0 0
+0 5 8 8
+9 9 0 0
+1 2 1 2
+1
+1
+5 3 4 3
+0 0 0 1 1
+0 0 0 1 0
+1 1 1 1 0
+5 5 5 5
+10 10 10 10 10
+10 10 10 10 10
+10 10 10 10 10
+10 10 10 10 10
+10 10 10 10 10
+5 5 4 5
+10 10 10 10 10
+10 10 10 10 10
+10 10 10 10 10
+10 10 10 10 10
+10 10 10 10 10
+5 5 3 1
+6 10 6 2 1
+4 0 6 3 1
+8 7 5 3 7
+4 9 10 2 0
+10 8 5 0 4
+5 5 1 2
+10 3 10 10 7
+10 3 7 9 7
+8 2 10 7 10
+4 1 0 10 4
+9 7 6 8 6
+5 5 3 1
+7 6 6 5 5
+7 4 4 4 3
+6 9 10 2 4
+1 0 10 9 4
+0 10 1 2 6
+5 5 3 3
+1 4 9 3 9
+2 10 3 7 6
+8 9 8 9 4
+5 9 5 9 8
+3 8 7 5 7
+5 5 2 4
+7 8 5 1 10
+7 8 0 6 10
+8 9 4 2 4
+3 10 3 5 2
+10 8 10 5 0
+5 5 4 5
+6 10 3 0 7
+10 5 6 9 10
+4 9 5 3 7
+2 8 7 4 9
+4 5 1 7 4
+5 5 4 2
+8 8 0 7 3
+9 0 1 5 8
+4 0 6 4 2
+2 9 6 7 9
+1 3 3 8 8
+5 5 2 3
+4 0 8 8 8
+4 6 4 7 4
+2 9 7 10 2
+6 3 4 8 6
+1 1 0 10 0
+5 5 5 4
+8 10 7 7 1
+7 2 9 2 6
+2 4 1 5 7
+8 10 4 8 3
+6 2 1 10 3
+5 5 5 3
+0 1 1 1 7
+0 8 3 1 2
+4 8 4 10 9
+8 9 3 2 6
+0 5 2 4 0
+5 5 2 1
+8 5 3 7 5
+2 9 4 10 7
+1 0 9 1 4
+4 5 4 2 1
+0 3 1 7 4
+5 5 3 4
+6 4 0 9 1
+5 1 7 8 2
+3 2 1 10 1
+1 6 1 6 0
+4 8 0 5 8
+5 5 3 3
+2 4 9 9 10
+3 9 8 2 1
+7 7 8 9 10
+8 8 8 7 10
+3 8 3 1 2
+5 5 1 1
+5 6 4 10 7
+8 9 5 5 10
+2 2 10 1 7
+7 9 6 4 6
+1 1 1 0 5
+5 5 4 4
+6 0 10 6 6
+6 8 3 2 3
+10 5 8 9 7
+8 7 7 5 3
+5 9 5 10 10
+5 5 1 2
+9 10 9 10 3
+8 10 10 1 3
+7 2 3 0 2
+8 6 0 3 4
+7 10 9 8 2
+5 5 3 2
+8 10 0 7 7
+0 10 4 8 7
+3 0 2 5 3
+0 7 9 6 6
+1 10 0 0 6
+5 5 1 3
+2 3 5 2 3
+1 9 1 9 0
+9 6 3 7 6
+6 10 6 3 9
+1 7 8 10 7
+5 5 5 2
+3 10 4 2 1
+5 7 1 6 6
+10 8 5 8 4
+9 0 1 4 7
+9 10 8 7 9
+5 5 2 3
+8 0 1 1 4
+0 3 4 10 8
+10 1 3 3 9
+9 6 7 3 4
+5 2 6 10 0
+5 5 1 3
+6 0 9 9 8
+8 8 7 10 6
+10 1 5 5 9
+4 7 2 1 5
+8 8 6 0 0
+5 5 4 4
+9 7 8 3 0
+8 2 9 3 8
+6 0 7 1 8
+6 4 1 5 9
+8 7 10 0 2
+5 5 3 2
+2 7 1 7 2
+5 7 8 5 3
+0 2 7 9 7
+6 5 0 0 6
+5 7 1 10 4
+5 5 4 2
+7 6 2 10 9
+7 1 3 7 4
+0 4 9 1 3
+9 9 1 3 4
+4 3 2 10 7
+5 5 1 4
+4 0 0 4 7
+6 5 5 4 10
+4 6 7 8 6
+9 4 5 1 0
+3 1 1 8 5
+5 5 1 2
+3 9 7 1 3
+5 1 5 2 8
+10 7 10 10 9
+5 6 6 9 4
+8 4 4 8 5
+5 5 1 2
+0 8 9 9 0
+6 5 2 7 10
+1 1 10 7 1
+4 7 0 2 10
+4 6 7 6 3
+5 5 2 5
+9 3 2 5 4
+0 4 2 9 10
+5 9 6 2 0
+5 2 7 6 4
+1 4 7 10 6
+5 5 4 4
+2 4 4 10 2
+7 0 6 9 9
+8 0 7 7 5
+6 0 6 4 5
+8 9 10 10 0
+5 5 4 4
+10 10 5 3 10
+9 5 7 9 1
+7 2 0 5 10
+9 0 6 2 6
+4 8 10 10 3
+5 5 5 4
+2 6 10 7 3
+7 1 4 4 8
+9 1 4 0 6
+7 9 10 6 7
+10 0 7 3 4
+5 5 4 2
+1 7 6 8 10
+0 8 4 3 4
+5 8 9 0 4
+8 4 4 1 0
+0 0 7 6 8
+5 5 5 2
+0 9 7 9 0
+1 5 8 0 5
+5 4 6 8 7
+1 4 7 6 10
+1 8 0 10 7
+5 5 1 1
+2 7 0 2 6
+10 7 4 8 9
+7 5 9 10 9
+1 6 4 6 5
+8 3 9 7 2
+5 5 2 2
+1 1 6 6 3
+3 4 3 9 1
+0 0 9 9 8
+2 5 7 0 4
+0 4 0 4 10
+5 5 1 5
+4 3 7 0 2
+8 5 6 9 6
+0 2 2 1 2
+2 9 0 8 0
+3 3 0 8 3
+5 5 2 5
+5 10 9 8 3
+10 2 3 10 0
+6 6 9 1 4
+9 3 3 0 4
+1 9 1 1 2
+5 5 3 3
+8 6 10 5 0
+9 1 6 1 9
+9 3 6 7 9
+1 5 9 3 2
+10 7 2 3 8
+5 5 5 1
+8 10 7 7 7
+2 5 1 1 3
+0 7 5 9 5
+6 2 10 4 4
+3 0 5 5 0
+5 5 4 2
+4 4 5 3 10
+10 10 10 4 9
+0 6 9 8 9
+5 0 4 8 0
+6 10 3 7 2
+5 5 4 1
+4 0 6 10 5
+9 4 6 8 1
+6 7 4 2 6
+10 10 3 6 2
+1 10 8 10 5
+5 5 3 3
+1 8 6 4 1
+5 0 0 10 7
+2 3 4 1 7
+9 5 10 4 2
+9 5 8 9 5
+5 5 1 5
+4 0 1 3 10
+9 7 4 8 1
+2 8 9 9 8
+2 0 10 9 7
+2 6 1 3 2
+5 5 2 4
+1 9 4 8 1
+2 7 4 1 6
+9 3 3 0 5
+10 7 1 7 7
+10 6 6 7 7
+5 5 4 1
+10 2 10 8 3
+9 1 9 10 3
+5 1 3 9 10
+6 2 8 10 10
+5 9 6 10 9
+5 5 3 5
+3 7 3 9 4
+5 6 1 6 4
+1 2 1 2 7
+2 3 4 0 8
+4 8 7 3 0
+5 5 5 3
+0 1 7 3 2
+1 6 0 5 9
+7 5 4 9 6
+6 0 6 1 0
+8 3 0 5 7
+5 5 2 5
+10 7 4 6 5
+4 3 7 6 4
+2 5 10 10 10
+2 1 8 6 6
+6 1 7 7 9
+5 5 2 1
+3 4 3 2 3
+9 5 7 3 9
+10 10 4 2 0
+7 10 10 6 1
+9 4 7 4 8
+5 5 4 5
+4 3 6 1 6
+10 2 7 0 0
+1 8 2 10 5
+10 1 7 8 9
+4 5 2 5 4
+5 5 1 1
+8 2 6 7 6
+9 2 5 2 0
+8 7 0 6 8
+6 6 5 1 6
+7 6 3 3 0
+5 5 5 3
+3 2 10 1 10
+1 7 4 7 3
+7 0 3 7 8
+0 5 1 8 10
+8 3 0 3 8
+5 5 2 5
+0 2 2 3 4
+2 2 5 0 3
+10 4 9 2 0
+9 5 5 4 5
+9 5 3 8 0
+5 5 5 2
+1 1 10 6 10
+0 6 2 4 7
+3 7 7 6 6
+0 2 8 10 9
+0 2 0 4 0
+5 5 1 1
+8 4 9 3 6
+8 1 10 7 10
+5 7 1 1 10
+8 6 4 3 7
+4 9 4 3 7
+5 5 4 3
+0 7 7 5 2
+10 1 6 5 9
+5 4 3 4 7
+0 5 7 10 2
+2 1 3 7 6
+5 5 2 5
+9 4 5 10 5
+1 5 8 3 4
+10 7 7 8 1
+9 10 5 5 10
+8 10 7 8 0
+5 5 4 5
+7 2 8 6 9
+2 0 8 5 1
+0 0 2 4 10
+8 9 6 9 7
+5 2 0 2 8
+5 5 5 1
+6 10 3 6 5
+5 2 0 1 2
+9 8 5 8 8
+5 10 0 5 7
+9 9 4 6 1
+5 5 4 1
+3 1 3 8 7
+3 1 1 6 4
+1 4 6 3 2
+3 8 10 9 0
+7 9 3 4 8
+5 5 4 4
+3 2 8 9 3
+9 1 10 4 2
+9 3 6 2 4
+10 6 7 1 7
+2 0 6 0 8
+5 5 5 4
+10 1 5 3 2
+6 0 9 7 7
+9 4 0 0 2
+3 5 3 5 4
+9 10 4 4 1
+5 5 1 5
+2 8 1 4 7
+1 7 8 3 2
+6 2 8 3 0
+1 1 9 2 3
+1 5 8 6 1
+5 5 1 5
+10 2 7 8 4
+0 2 3 8 9
+4 8 4 6 3
+7 4 5 9 1
+7 10 0 10 7
+5 5 4 4
+2 1 6 10 1
+8 4 7 10 5
+9 2 0 7 7
+8 10 0 1 6
+3 4 2 2 9
+5 5 4 4
+8 7 7 8 9
+6 1 6 7 8
+0 1 7 3 9
+8 3 3 2 9
+2 0 8 9 3
+5 5 1 1
+3 8 9 4 3
+3 9 10 10 4
+0 6 10 8 4
+0 3 7 9 0
+8 2 2 4 4
+5 5 4 5
+0 4 1 8 5
+8 6 9 0 7
+7 8 6 1 9
+10 9 4 3 9
+7 8 8 5 3
+5 5 4 5
+8 1 8 10 0
+10 9 8 4 6
+1 1 5 8 6
+2 3 7 9 3
+3 1 4 2 8
+5 5 4 2
+3 5 5 8 0
+4 3 10 4 2
+7 10 5 2 0
+6 5 6 1 6
+10 7 2 0 10
+5 5 2 4
+10 1 2 7 2
+6 1 10 6 6
+1 4 8 3 0
+8 6 0 8 10
+6 4 1 10 1
+5 5 5 4
+10 3 3 1 3
+2 2 10 4 8
+10 1 3 5 0
+7 2 4 7 10
+8 8 6 8 1
+5 5 2 3
+9 9 2 8 6
+3 0 5 6 2
+7 4 4 4 3
+4 8 8 4 2
+8 6 10 6 4
+5 5 5 1
+10 4 9 6 2
+5 8 10 9 0
+9 3 5 9 0
+9 1 4 1 3
+10 7 5 2 4
+5 5 1 4
+8 3 4 9 0
+8 5 6 8 8
+1 7 6 10 3
+10 4 2 8 0
+3 1 1 6 1
+5 5 2 4
+1 0 10 0 6
+0 4 5 0 10
+8 6 7 4 5
+1 10 5 5 7
+9 5 4 10 8
+5 5 2 4
+1 3 5 1 4
+3 10 4 9 8
+6 1 9 5 10
+2 10 1 8 0
+0 2 3 6 9
+5 5 4 4
+8 3 1 5 4
+4 10 4 8 0
+1 10 7 9 5
+9 7 10 6 8
+7 7 5 6 5
+5 5 4 3
+9 3 5 7 10
+6 6 4 0 0
+1 2 6 1 3
+4 8 10 9 4
+7 7 10 2 3
+5 5 3 4
+9 8 1 6 6
+4 9 2 3 4
+9 5 4 7 6
+4 0 5 5 4
+1 5 1 5 10
+5 5 2 3
+1 9 5 8 8
+2 7 1 9 9
+10 9 2 3 5
+5 6 1 1 10
+0 6 3 4 7
+5 5 4 4
+0 7 0 1 8
+10 6 3 5 9
+10 4 5 8 3
+3 8 4 9 3
+10 8 2 8 8
+5 5 1 4
+0 3 6 3 1
+0 2 2 8 10
+6 9 2 4 8
+6 9 3 9 0
+10 0 7 2 9
+5 5 2 4
+4 0 10 2 0
+0 8 1 10 8
+1 1 3 0 8
+1 2 10 7 6
+7 8 2 5 7
+5 5 4 1
+7 1 5 9 5
+5 9 7 3 7
+2 3 7 8 4
+6 0 3 1 10
+3 1 6 10 6
+5 5 1 4
+0 9 2 1 5
+1 4 4 4 8
+0 9 0 5 0
+1 1 8 4 6
+6 5 7 5 8
+5 5 2 3
+5 1 2 5 10
+9 5 0 3 7
+3 5 9 0 3
+8 9 9 6 0
+8 2 4 3 8
+5 5 1 5
+1 4 4 10 10
+4 10 2 1 8
+5 0 10 1 3
+4 9 3 8 6
+1 4 10 1 1
+5 5 2 5
+3 8 10 1 9
+4 3 6 1 5
+6 1 7 1 6
+7 0 6 10 5
+4 2 0 8 1
+5 5 2 3
+3 3 9 4 6
+4 4 5 0 6
+9 6 7 1 10
+6 8 1 1 2
+1 7 1 4 9
diff --git a/codejam_2008/src/y2008round_apac/b.rs b/codejam_2008/src/y2008round_apac/b.rs
new file mode 100644
index 0000000..c2031a2
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/b.rs
@@ -0,0 +1,160 @@
+use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use codejam::util::grid::constants::*;
+use codejam::util::grid::Grid;
+use codejam::util::vector_2d::Vector2d;
+use std::cmp::min;
+use std::collections::BinaryHeap;
+use std::io::Write;
+use std::usize;
+
+/*
+Grid
+Dijkstras / priority queue (using negative to make it a min queue)
+
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008round_apac",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let nums = reader.read_num_line();
+                let n_cols = nums[0];
+                let n_rows = nums[1];
+                let my_loc = Vector2d::with_val(nums[2], nums[3]);
+
+                let mut grid = Grid::new(n_rows, n_cols);
+
+
+                for r in 0..n_rows {
+                    for (c, power) in reader.read_num_line().into_iter().enumerate() {
+                        grid[(r, c)] = power;
+                    }
+                }
+
+                if case_no != 1 {
+                    // continue;
+                }
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    if let Some(ans) = solve(&grid, &start, &stop) {
+                        ans.to_string()
+                    } else {
+                        "THE CAKE IS A LIE".to_string()
+                    }
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, EAST, SOUTH, WEST];
+
+const CLOSEST_WALL_INDEX: usize = 4;
+
+fn solve(grid: &Grid<char>, start: &Vector2d<isize>, stop: &Vector2d<isize>) -> Option<isize>
+{
+    debug!("Grid\n{:#.4?}\n", grid);
+
+    //precompute 5 values, closest wall in 4 directions, then closest wall absolutely
+    let mut nearest_dir: Grid<[usize; 5]> = Grid::new(grid.R, grid.C);
+
+    for c in nearest_dir.data.iter_mut() {
+        c[4] = usize::MAX;
+    }
+
+    for rr in 0..grid.R {
+        for cc in 0..grid.C {
+            //start from top/left corner or bottom/right corner.
+            for &(r, c, dir_start) in [(rr, grid.C - 1 - cc, 0), (grid.R - 1 - rr, cc, 2)].iter() {
+                let coord = Vector2d::with_val(r as isize, c as isize);
+                for (dir_idx, dir) in DIRECTIONS.iter().enumerate().skip(dir_start).take(2) {
+                    for &dd_idx in [dir_idx, CLOSEST_WALL_INDEX].iter() {
+                        let val = if grid[&coord] == '#' {
+                            0
+                        } else if let Some(d) = nearest_dir.get_value(&(coord + dir)) {
+                            1 + d[dd_idx]
+                        } else {
+                            1
+                        };
+                        let m_val = nearest_dir.data[r * grid.C + c].get_mut(dd_idx).unwrap();
+                        if dd_idx == CLOSEST_WALL_INDEX {
+                            *m_val = min(*m_val, val);
+                        } else {
+                            *m_val = val;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    for r in 0..grid.R {
+        for c in 0..grid.C {
+            debug!(
+                "For r {} c {} --> NESW near {:?}",
+                r,
+                c,
+                nearest_dir[(r, c)]
+            );
+        }
+    }
+
+    let mut pq: BinaryHeap<(isize, Vector2d<isize>)> = BinaryHeap::new();
+    let mut visited = BitSet::new();
+    pq.push((0, start.clone()));
+
+    while let Some(node) = pq.pop() {
+        let cur = node.1;
+        let idx = cur.r() as usize * grid.C + cur.c() as usize;
+        debug!("Cur is {:?} idx is {}", cur, idx);
+
+        let cost = node.0;
+        if visited.contains(idx) {
+            continue;
+        }
+        if &cur == stop {
+            return Some(-cost);
+        }
+        visited.insert(idx);
+
+        for (dir_idx, dir) in DIRECTIONS.iter().enumerate() {
+            let d = nearest_dir[idx][dir_idx];
+            //either we walk
+            if d > 0 && grid.get_value(&(cur + dir)).is_some() {
+                debug!(
+                    "Walking Cur is {:?} adding {:?} for dir {}",
+                    cur,
+                    cur + dir,
+                    dir_idx
+                );
+
+                pq.push((cost - 1, cur + dir));
+            }
+            //or shoot a portal and go to the closest wall to teleport to it
+            if d > 1 {
+                debug!(
+                    "Cur is {:?} adding {:?} for dir {}",
+                    cur,
+                    cur + &(dir * (d - 1) as isize),
+                    dir_idx
+                );
+                pq.push((
+                    cost - nearest_dir[idx][CLOSEST_WALL_INDEX] as isize,
+                    cur + &(dir * (d - 1) as isize),
+                ));
+            }
+        }
+    }
+
+    None
+}

From c1a096e7c98ed6200bc7f58ef174191be4104fef Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 13:13:42 -0300
Subject: [PATCH 104/122] b

---
 codejam/src/util/grid.rs                      |   8 +
 codejam_2008/src/main.rs                      |   2 +-
 .../src/y2008round_apac/B-large-practice.out  | 100 ++++++++++
 .../src/y2008round_apac/B-small-practice.out  | 100 ++++++++++
 codejam_2008/src/y2008round_apac/b.rs         | 185 ++++++++++--------
 5 files changed, 308 insertions(+), 87 deletions(-)
 create mode 100644 codejam_2008/src/y2008round_apac/B-large-practice.out
 create mode 100644 codejam_2008/src/y2008round_apac/B-small-practice.out

diff --git a/codejam/src/util/grid.rs b/codejam/src/util/grid.rs
index 8c31ce0..ae31cbf 100644
--- a/codejam/src/util/grid.rs
+++ b/codejam/src/util/grid.rs
@@ -6,6 +6,7 @@ use crate::util::vector_2d::Vector2d;
 use num_integer::Integer;
 use num_traits::NumCast;
 
+#[derive(Clone)]
 pub struct Grid<T>
 {
     pub data: Vec<T>,
@@ -225,6 +226,13 @@ impl<T> IndexMut<&Vector2d<i64>> for Grid<T>
         &mut self.data[ (row_col_index.data[0] * self.C as i64 + row_col_index.data[1] ) as usize ]
     }
 }
+impl<T> IndexMut<&Vector2d<isize>> for Grid<T>
+{
+    fn index_mut<'a>(&'a mut self, row_col_index: &Vector2d<isize>) -> &'a mut T
+    {
+        &mut self.data[ (row_col_index.data[0] * self.C as isize + row_col_index.data[1] ) as usize ]
+    }
+}
 impl<T> IndexMut<&Vector2d<usize>> for Grid<T>
 {
     fn index_mut<'a>(&'a mut self, row_col_index: &Vector2d<usize>) -> &'a mut T
diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 7bf18b1..32f00d7 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -96,7 +96,7 @@ fn main()
 {
     init_log();
 
-    y2008round_apac::a::solve_all_cases();
+    y2008round_apac::b::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round_apac/B-large-practice.out b/codejam_2008/src/y2008round_apac/B-large-practice.out
new file mode 100644
index 0000000..9c5dd34
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/B-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0
+Case #2: 1
+Case #3: forever
+Case #4: forever
+Case #5: 0
+Case #6: 0
+Case #7: 1
+Case #8: 1
+Case #9: forever
+Case #10: 1
+Case #11: 1
+Case #12: 1
+Case #13: 1
+Case #14: 1
+Case #15: 1
+Case #16: 2
+Case #17: forever
+Case #18: forever
+Case #19: forever
+Case #20: forever
+Case #21: 2
+Case #22: 2
+Case #23: 2
+Case #24: 2
+Case #25: 2
+Case #26: 2
+Case #27: 0
+Case #28: 0
+Case #29: 0
+Case #30: 0
+Case #31: 0
+Case #32: forever
+Case #33: 1
+Case #34: 1
+Case #35: 1
+Case #36: 1
+Case #37: 1
+Case #38: 1
+Case #39: 0
+Case #40: 0
+Case #41: 1
+Case #42: forever
+Case #43: 0
+Case #44: forever
+Case #45: 2
+Case #46: forever
+Case #47: 0
+Case #48: forever
+Case #49: forever
+Case #50: forever
+Case #51: 0
+Case #52: 0
+Case #53: 1
+Case #54: 0
+Case #55: 1
+Case #56: 1
+Case #57: 0
+Case #58: 1
+Case #59: 0
+Case #60: 1
+Case #61: 0
+Case #62: 0
+Case #63: 0
+Case #64: 0
+Case #65: 0
+Case #66: 0
+Case #67: 0
+Case #68: forever
+Case #69: 0
+Case #70: 0
+Case #71: 1
+Case #72: forever
+Case #73: forever
+Case #74: 0
+Case #75: 0
+Case #76: 0
+Case #77: forever
+Case #78: 1
+Case #79: forever
+Case #80: 1
+Case #81: 0
+Case #82: 0
+Case #83: 1
+Case #84: 0
+Case #85: forever
+Case #86: 0
+Case #87: forever
+Case #88: 1
+Case #89: 0
+Case #90: 1
+Case #91: 0
+Case #92: forever
+Case #93: 1
+Case #94: 1
+Case #95: 2
+Case #96: forever
+Case #97: 0
+Case #98: 0
+Case #99: 0
+Case #100: 1
diff --git a/codejam_2008/src/y2008round_apac/B-small-practice.out b/codejam_2008/src/y2008round_apac/B-small-practice.out
new file mode 100644
index 0000000..93a6d61
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/B-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0
+Case #2: 1
+Case #3: forever
+Case #4: forever
+Case #5: 0
+Case #6: 0
+Case #7: 0
+Case #8: 0
+Case #9: 0
+Case #10: 0
+Case #11: 0
+Case #12: 0
+Case #13: 0
+Case #14: forever
+Case #15: 0
+Case #16: 0
+Case #17: 0
+Case #18: 0
+Case #19: forever
+Case #20: 0
+Case #21: 0
+Case #22: 1
+Case #23: 1
+Case #24: 1
+Case #25: forever
+Case #26: 1
+Case #27: forever
+Case #28: 0
+Case #29: 0
+Case #30: 1
+Case #31: 0
+Case #32: forever
+Case #33: 0
+Case #34: 1
+Case #35: 0
+Case #36: forever
+Case #37: 0
+Case #38: forever
+Case #39: 1
+Case #40: 1
+Case #41: 0
+Case #42: forever
+Case #43: forever
+Case #44: 1
+Case #45: 0
+Case #46: forever
+Case #47: 0
+Case #48: 0
+Case #49: 0
+Case #50: forever
+Case #51: 0
+Case #52: forever
+Case #53: 0
+Case #54: 1
+Case #55: 0
+Case #56: 0
+Case #57: 0
+Case #58: 1
+Case #59: 1
+Case #60: 1
+Case #61: 0
+Case #62: forever
+Case #63: 1
+Case #64: 0
+Case #65: 0
+Case #66: forever
+Case #67: 0
+Case #68: 1
+Case #69: 0
+Case #70: 0
+Case #71: forever
+Case #72: 1
+Case #73: 1
+Case #74: 0
+Case #75: forever
+Case #76: 1
+Case #77: forever
+Case #78: 1
+Case #79: 1
+Case #80: 0
+Case #81: 1
+Case #82: 0
+Case #83: 1
+Case #84: forever
+Case #85: 0
+Case #86: 0
+Case #87: 0
+Case #88: 0
+Case #89: 1
+Case #90: 1
+Case #91: 0
+Case #92: 0
+Case #93: 0
+Case #94: forever
+Case #95: 0
+Case #96: 1
+Case #97: 1
+Case #98: forever
+Case #99: 1
+Case #100: 0
diff --git a/codejam_2008/src/y2008round_apac/b.rs b/codejam_2008/src/y2008round_apac/b.rs
index c2031a2..16b6390 100644
--- a/codejam_2008/src/y2008round_apac/b.rs
+++ b/codejam_2008/src/y2008round_apac/b.rs
@@ -1,12 +1,11 @@
-use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
 use codejam::util::grid::constants::*;
 use codejam::util::grid::Grid;
 use codejam::util::vector_2d::Vector2d;
-use std::cmp::min;
-use std::collections::BinaryHeap;
+//use itertools::max;
+use std::cmp;
+use std::collections::VecDeque;
 use std::io::Write;
-use std::usize;
 
 /*
 Grid
@@ -25,11 +24,10 @@ pub fn solve_all_cases()
                 let nums = reader.read_num_line();
                 let n_cols = nums[0];
                 let n_rows = nums[1];
-                let my_loc = Vector2d::with_val(nums[2], nums[3]);
+                let my_loc = Vector2d::with_val(nums[3]-1, nums[2]-1);
 
                 let mut grid = Grid::new(n_rows, n_cols);
 
-
                 for r in 0..n_rows {
                     for (c, power) in reader.read_num_line().into_iter().enumerate() {
                         grid[(r, c)] = power;
@@ -45,10 +43,10 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    if let Some(ans) = solve(&grid, &start, &stop) {
+                    if let Some(ans) = solve(my_loc.convert(), &grid) {
                         ans.to_string()
                     } else {
-                        "THE CAKE IS A LIE".to_string()
+                        "forever".to_string()
                     }
                 )
                 .unwrap();
@@ -57,104 +55,119 @@ pub fn solve_all_cases()
     );
 }
 
-const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, EAST, SOUTH, WEST];
-
-const CLOSEST_WALL_INDEX: usize = 4;
-
-fn solve(grid: &Grid<char>, start: &Vector2d<isize>, stop: &Vector2d<isize>) -> Option<isize>
+fn do_turn(
+    me_location: Vector2d<isize>,
+    attack_dir: Option<Vector2d<isize>>,
+    grid: &mut Grid<isize>,
+) -> bool
 {
-    debug!("Grid\n{:#.4?}\n", grid);
+    let mut diffs: Grid<isize> = Grid::new(grid.R, grid.C);
+    let mut ret = false;
 
-    //precompute 5 values, closest wall in 4 directions, then closest wall absolutely
-    let mut nearest_dir: Grid<[usize; 5]> = Grid::new(grid.R, grid.C);
+    let mut cur_loc = Vector2d::with_val(0isize, 0);
 
-    for c in nearest_dir.data.iter_mut() {
-        c[4] = usize::MAX;
-    }
+    for r in 0..grid.R as isize {
+        cur_loc.data[0] = r;
+        for c in 0..grid.C as isize {
+            cur_loc.data[1] = c;
 
-    for rr in 0..grid.R {
-        for cc in 0..grid.C {
-            //start from top/left corner or bottom/right corner.
-            for &(r, c, dir_start) in [(rr, grid.C - 1 - cc, 0), (grid.R - 1 - rr, cc, 2)].iter() {
-                let coord = Vector2d::with_val(r as isize, c as isize);
-                for (dir_idx, dir) in DIRECTIONS.iter().enumerate().skip(dir_start).take(2) {
-                    for &dd_idx in [dir_idx, CLOSEST_WALL_INDEX].iter() {
-                        let val = if grid[&coord] == '#' {
-                            0
-                        } else if let Some(d) = nearest_dir.get_value(&(coord + dir)) {
-                            1 + d[dd_idx]
-                        } else {
-                            1
-                        };
-                        let m_val = nearest_dir.data[r * grid.C + c].get_mut(dd_idx).unwrap();
-                        if dd_idx == CLOSEST_WALL_INDEX {
-                            *m_val = min(*m_val, val);
-                        } else {
-                            *m_val = val;
-                        }
+            if cur_loc == me_location {
+                if attack_dir.is_some() {
+                    let adj_loc = cur_loc + attack_dir.unwrap();
+                    if let Some(_attack_square) = grid.get_value(&adj_loc) {
+                        diffs[&adj_loc] -= grid[&me_location];
                     }
                 }
+                continue;
+            }
+
+            if grid[&cur_loc] <= 0 {
+                continue;
             }
+
+            let strongest_neighbor = DIRECTIONS
+                .iter()
+                .filter_map(|dir| {
+                    let sq = cur_loc + dir;
+                    if let Some(power) = grid.get_value(&sq) {
+                       Some( (*power, sq) )
+                    } else {
+                        None
+                    }
+                })
+                .max().unwrap();
+
+            ret = ret || strongest_neighbor.0 > 0;
+
+            diffs[&strongest_neighbor.1] -= strongest_neighbor.0;
         }
     }
 
-    for r in 0..grid.R {
-        for c in 0..grid.C {
-            debug!(
-                "For r {} c {} --> NESW near {:?}",
-                r,
-                c,
-                nearest_dir[(r, c)]
-            );
+    //cout << "Diffs\n" << diffs;
+
+    for r in 0..grid.R as isize{
+        cur_loc.data[0] = r;
+        for c in 0..grid.C as isize {
+            cur_loc.data[1] = c;
+            grid[&cur_loc] = cmp::max(0, grid[&cur_loc] + diffs[&cur_loc]);
         }
     }
 
-    let mut pq: BinaryHeap<(isize, Vector2d<isize>)> = BinaryHeap::new();
-    let mut visited = BitSet::new();
-    pq.push((0, start.clone()));
+    ret
+}
+
+const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, WEST, EAST, SOUTH];
+
 
-    while let Some(node) = pq.pop() {
-        let cur = node.1;
-        let idx = cur.r() as usize * grid.C + cur.c() as usize;
-        debug!("Cur is {:?} idx is {}", cur, idx);
+fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
+{
+    let mut q: VecDeque< (isize, Grid<isize>) > = VecDeque::new();
+    q.push_back((0, grid.clone()));
+    let mut max_t = 0;
+
+    while let Some(item) = q.pop_front() {
+        let item_grid: &Grid<isize> = &item.1;
 
-        let cost = node.0;
-        if visited.contains(idx) {
+        //we are dead
+        if item_grid[&me_location] <= 0 {
             continue;
         }
-        if &cur == stop {
-            return Some(-cost);
-        }
-        visited.insert(idx);
-
-        for (dir_idx, dir) in DIRECTIONS.iter().enumerate() {
-            let d = nearest_dir[idx][dir_idx];
-            //either we walk
-            if d > 0 && grid.get_value(&(cur + dir)).is_some() {
-                debug!(
-                    "Walking Cur is {:?} adding {:?} for dir {}",
-                    cur,
-                    cur + dir,
-                    dir_idx
-                );
-
-                pq.push((cost - 1, cur + dir));
+
+        debug!("Grid off stack: Turns: {}", item.0);
+        max_t = cmp::max(max_t, item.0);
+
+        for attack_dir in DIRECTIONS.iter() {
+            if let Some(attack_val) = item_grid.get_value(&(me_location + attack_dir)) {
+                if *attack_val <= 0 {
+                    continue;
+                }
+            } else {
+                continue;
             }
-            //or shoot a portal and go to the closest wall to teleport to it
-            if d > 1 {
-                debug!(
-                    "Cur is {:?} adding {:?} for dir {}",
-                    cur,
-                    cur + &(dir * (d - 1) as isize),
-                    dir_idx
-                );
-                pq.push((
-                    cost - nearest_dir[idx][CLOSEST_WALL_INDEX] as isize,
-                    cur + &(dir * (d - 1) as isize),
-                ));
+            let mut new_grid: Grid<isize> = item_grid.clone();
+            /*LOG_STR("Grid before: " << *newGrid
+            << " turns: " << item.first
+            << " Attacking: " << *adj_it);*/
+            let did_move = do_turn(me_location, Some(*attack_dir), &mut new_grid);
+            q.push_back((item.0 + 1, new_grid));
+            if !did_move {
+                return None;
             }
         }
+
+        let mut new_grid: Grid<isize> = item_grid.clone();
+
+        //LOG_STR("Before doing nothing: " << *newGrid);
+        let did_move = do_turn(me_location,None,&mut new_grid);
+        q.push_back( (item.0 + 1, new_grid));
+        //LOG_OFF();
+        //LOG_STR("After doing nothing: " << *newGrid);
+        //LOG(item.first + 1);
+        //return;
+        if !did_move {
+            return None;
+        }
     }
 
-    None
+    Some(max_t)
 }

From dbb0b53794599e736e9f77fc6132249b739d6fb6 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 13:21:59 -0300
Subject: [PATCH 105/122] wip

---
 .../src/y2008round_apac/B-small-practice.out  | 99 -------------------
 codejam_2008/src/y2008round_apac/b.rs         | 16 ++-
 2 files changed, 12 insertions(+), 103 deletions(-)

diff --git a/codejam_2008/src/y2008round_apac/B-small-practice.out b/codejam_2008/src/y2008round_apac/B-small-practice.out
index 93a6d61..05852a7 100644
--- a/codejam_2008/src/y2008round_apac/B-small-practice.out
+++ b/codejam_2008/src/y2008round_apac/B-small-practice.out
@@ -1,100 +1 @@
 Case #1: 0
-Case #2: 1
-Case #3: forever
-Case #4: forever
-Case #5: 0
-Case #6: 0
-Case #7: 0
-Case #8: 0
-Case #9: 0
-Case #10: 0
-Case #11: 0
-Case #12: 0
-Case #13: 0
-Case #14: forever
-Case #15: 0
-Case #16: 0
-Case #17: 0
-Case #18: 0
-Case #19: forever
-Case #20: 0
-Case #21: 0
-Case #22: 1
-Case #23: 1
-Case #24: 1
-Case #25: forever
-Case #26: 1
-Case #27: forever
-Case #28: 0
-Case #29: 0
-Case #30: 1
-Case #31: 0
-Case #32: forever
-Case #33: 0
-Case #34: 1
-Case #35: 0
-Case #36: forever
-Case #37: 0
-Case #38: forever
-Case #39: 1
-Case #40: 1
-Case #41: 0
-Case #42: forever
-Case #43: forever
-Case #44: 1
-Case #45: 0
-Case #46: forever
-Case #47: 0
-Case #48: 0
-Case #49: 0
-Case #50: forever
-Case #51: 0
-Case #52: forever
-Case #53: 0
-Case #54: 1
-Case #55: 0
-Case #56: 0
-Case #57: 0
-Case #58: 1
-Case #59: 1
-Case #60: 1
-Case #61: 0
-Case #62: forever
-Case #63: 1
-Case #64: 0
-Case #65: 0
-Case #66: forever
-Case #67: 0
-Case #68: 1
-Case #69: 0
-Case #70: 0
-Case #71: forever
-Case #72: 1
-Case #73: 1
-Case #74: 0
-Case #75: forever
-Case #76: 1
-Case #77: forever
-Case #78: 1
-Case #79: 1
-Case #80: 0
-Case #81: 1
-Case #82: 0
-Case #83: 1
-Case #84: forever
-Case #85: 0
-Case #86: 0
-Case #87: 0
-Case #88: 0
-Case #89: 1
-Case #90: 1
-Case #91: 0
-Case #92: 0
-Case #93: 0
-Case #94: forever
-Case #95: 0
-Case #96: 1
-Case #97: 1
-Case #98: forever
-Case #99: 1
-Case #100: 0
diff --git a/codejam_2008/src/y2008round_apac/b.rs b/codejam_2008/src/y2008round_apac/b.rs
index 16b6390..167b666 100644
--- a/codejam_2008/src/y2008round_apac/b.rs
+++ b/codejam_2008/src/y2008round_apac/b.rs
@@ -15,7 +15,9 @@ Dijkstras / priority queue (using negative to make it a min queue)
 pub fn solve_all_cases()
 {
     run_cases(
-        &["B-small-practice", "B-large-practice"],
+        &["B-small-practice",
+        //    "B-large-practice"
+        ],
         "y2008round_apac",
         |reader, buffer| {
             let t = reader.read_int();
@@ -35,7 +37,7 @@ pub fn solve_all_cases()
                 }
 
                 if case_no != 1 {
-                    // continue;
+                     continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -133,7 +135,11 @@ fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
             continue;
         }
 
-        debug!("Grid off stack: Turns: {}", item.0);
+        debug!("Grid off stack: \n{:#.3?}\nTurns: {} my loc: {:?}",
+               item.1,
+               item.0,
+            me_location
+        );
         max_t = cmp::max(max_t, item.0);
 
         for attack_dir in DIRECTIONS.iter() {
@@ -159,9 +165,11 @@ fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
 
         //LOG_STR("Before doing nothing: " << *newGrid);
         let did_move = do_turn(me_location,None,&mut new_grid);
+        debug!("After doing nothing: \n{:#.3?}", new_grid);
         q.push_back( (item.0 + 1, new_grid));
         //LOG_OFF();
-        //LOG_STR("After doing nothing: " << *newGrid);
+        //LOG_STR();
+
         //LOG(item.first + 1);
         //return;
         if !did_move {

From 9a940a80d25027e9db04e34f4ccc332ebbdf3519 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 16:55:03 -0300
Subject: [PATCH 106/122] b

---
 .../src/y2008round_apac/B-large-practice.out  | 166 +++++++++---------
 .../src/y2008round_apac/B-small-practice.out  | 101 ++++++++++-
 codejam_2008/src/y2008round_apac/b.rs         |  23 +--
 3 files changed, 196 insertions(+), 94 deletions(-)

diff --git a/codejam_2008/src/y2008round_apac/B-large-practice.out b/codejam_2008/src/y2008round_apac/B-large-practice.out
index 9c5dd34..e8203cc 100644
--- a/codejam_2008/src/y2008round_apac/B-large-practice.out
+++ b/codejam_2008/src/y2008round_apac/B-large-practice.out
@@ -1,100 +1,100 @@
-Case #1: 0
-Case #2: 1
+Case #1: forever
+Case #2: 3 day(s)
 Case #3: forever
 Case #4: forever
-Case #5: 0
-Case #6: 0
-Case #7: 1
-Case #8: 1
-Case #9: forever
-Case #10: 1
-Case #11: 1
-Case #12: 1
-Case #13: 1
-Case #14: 1
-Case #15: 1
-Case #16: 2
-Case #17: forever
+Case #5: forever
+Case #6: forever
+Case #7: forever
+Case #8: forever
+Case #9: 2 day(s)
+Case #10: 3 day(s)
+Case #11: 4 day(s)
+Case #12: 5 day(s)
+Case #13: 6 day(s)
+Case #14: 7 day(s)
+Case #15: 8 day(s)
+Case #16: 9 day(s)
+Case #17: 2 day(s)
 Case #18: forever
 Case #19: forever
 Case #20: forever
-Case #21: 2
-Case #22: 2
-Case #23: 2
-Case #24: 2
-Case #25: 2
-Case #26: 2
-Case #27: 0
-Case #28: 0
-Case #29: 0
-Case #30: 0
-Case #31: 0
-Case #32: forever
-Case #33: 1
-Case #34: 1
-Case #35: 1
-Case #36: 1
-Case #37: 1
-Case #38: 1
-Case #39: 0
-Case #40: 0
-Case #41: 1
+Case #21: 6 day(s)
+Case #22: 7 day(s)
+Case #23: 7 day(s)
+Case #24: forever
+Case #25: 8 day(s)
+Case #26: 9 day(s)
+Case #27: forever
+Case #28: 1 day(s)
+Case #29: 0 day(s)
+Case #30: 0 day(s)
+Case #31: 0 day(s)
+Case #32: 1 day(s)
+Case #33: forever
+Case #34: 1 day(s)
+Case #35: forever
+Case #36: forever
+Case #37: 1 day(s)
+Case #38: 1 day(s)
+Case #39: 0 day(s)
+Case #40: 0 day(s)
+Case #41: forever
 Case #42: forever
-Case #43: 0
-Case #44: forever
-Case #45: 2
+Case #43: forever
+Case #44: 2 day(s)
+Case #45: forever
 Case #46: forever
-Case #47: 0
+Case #47: forever
 Case #48: forever
 Case #49: forever
 Case #50: forever
-Case #51: 0
-Case #52: 0
-Case #53: 1
-Case #54: 0
-Case #55: 1
-Case #56: 1
-Case #57: 0
-Case #58: 1
-Case #59: 0
-Case #60: 1
-Case #61: 0
-Case #62: 0
-Case #63: 0
-Case #64: 0
-Case #65: 0
-Case #66: 0
-Case #67: 0
+Case #51: forever
+Case #52: 0 day(s)
+Case #53: forever
+Case #54: 0 day(s)
+Case #55: 1 day(s)
+Case #56: 2 day(s)
+Case #57: 2 day(s)
+Case #58: forever
+Case #59: forever
+Case #60: 1 day(s)
+Case #61: 0 day(s)
+Case #62: 0 day(s)
+Case #63: 0 day(s)
+Case #64: 0 day(s)
+Case #65: 0 day(s)
+Case #66: 0 day(s)
+Case #67: 0 day(s)
 Case #68: forever
-Case #69: 0
-Case #70: 0
-Case #71: 1
+Case #69: 0 day(s)
+Case #70: 0 day(s)
+Case #71: forever
 Case #72: forever
 Case #73: forever
-Case #74: 0
-Case #75: 0
-Case #76: 0
+Case #74: 0 day(s)
+Case #75: 0 day(s)
+Case #76: 0 day(s)
 Case #77: forever
-Case #78: 1
+Case #78: 1 day(s)
 Case #79: forever
-Case #80: 1
-Case #81: 0
-Case #82: 0
-Case #83: 1
-Case #84: 0
+Case #80: forever
+Case #81: 0 day(s)
+Case #82: forever
+Case #83: forever
+Case #84: forever
 Case #85: forever
-Case #86: 0
-Case #87: forever
-Case #88: 1
-Case #89: 0
-Case #90: 1
-Case #91: 0
+Case #86: 0 day(s)
+Case #87: 2 day(s)
+Case #88: 1 day(s)
+Case #89: 0 day(s)
+Case #90: forever
+Case #91: 0 day(s)
 Case #92: forever
-Case #93: 1
-Case #94: 1
-Case #95: 2
-Case #96: forever
-Case #97: 0
-Case #98: 0
-Case #99: 0
-Case #100: 1
+Case #93: forever
+Case #94: 1 day(s)
+Case #95: forever
+Case #96: 2 day(s)
+Case #97: forever
+Case #98: 0 day(s)
+Case #99: 0 day(s)
+Case #100: 2 day(s)
diff --git a/codejam_2008/src/y2008round_apac/B-small-practice.out b/codejam_2008/src/y2008round_apac/B-small-practice.out
index 05852a7..4a0d9f9 100644
--- a/codejam_2008/src/y2008round_apac/B-small-practice.out
+++ b/codejam_2008/src/y2008round_apac/B-small-practice.out
@@ -1 +1,100 @@
-Case #1: 0
+Case #1: forever
+Case #2: 3 day(s)
+Case #3: forever
+Case #4: forever
+Case #5: forever
+Case #6: forever
+Case #7: 0 day(s)
+Case #8: 1 day(s)
+Case #9: forever
+Case #10: 1 day(s)
+Case #11: 0 day(s)
+Case #12: 0 day(s)
+Case #13: forever
+Case #14: forever
+Case #15: 0 day(s)
+Case #16: forever
+Case #17: 0 day(s)
+Case #18: 0 day(s)
+Case #19: forever
+Case #20: 0 day(s)
+Case #21: 0 day(s)
+Case #22: 1 day(s)
+Case #23: 0 day(s)
+Case #24: forever
+Case #25: 1 day(s)
+Case #26: 1 day(s)
+Case #27: forever
+Case #28: forever
+Case #29: forever
+Case #30: 1 day(s)
+Case #31: 0 day(s)
+Case #32: forever
+Case #33: 0 day(s)
+Case #34: forever
+Case #35: 0 day(s)
+Case #36: forever
+Case #37: forever
+Case #38: forever
+Case #39: 2 day(s)
+Case #40: 1 day(s)
+Case #41: 1 day(s)
+Case #42: forever
+Case #43: forever
+Case #44: 1 day(s)
+Case #45: forever
+Case #46: forever
+Case #47: forever
+Case #48: 0 day(s)
+Case #49: forever
+Case #50: forever
+Case #51: 0 day(s)
+Case #52: forever
+Case #53: 0 day(s)
+Case #54: forever
+Case #55: forever
+Case #56: 0 day(s)
+Case #57: 0 day(s)
+Case #58: 1 day(s)
+Case #59: forever
+Case #60: forever
+Case #61: 0 day(s)
+Case #62: 0 day(s)
+Case #63: 2 day(s)
+Case #64: 0 day(s)
+Case #65: 0 day(s)
+Case #66: forever
+Case #67: 0 day(s)
+Case #68: 1 day(s)
+Case #69: 0 day(s)
+Case #70: 0 day(s)
+Case #71: forever
+Case #72: 0 day(s)
+Case #73: 2 day(s)
+Case #74: 0 day(s)
+Case #75: forever
+Case #76: forever
+Case #77: forever
+Case #78: 1 day(s)
+Case #79: 1 day(s)
+Case #80: 1 day(s)
+Case #81: 0 day(s)
+Case #82: forever
+Case #83: 0 day(s)
+Case #84: 1 day(s)
+Case #85: forever
+Case #86: 0 day(s)
+Case #87: forever
+Case #88: 0 day(s)
+Case #89: 1 day(s)
+Case #90: 1 day(s)
+Case #91: 0 day(s)
+Case #92: 0 day(s)
+Case #93: 0 day(s)
+Case #94: forever
+Case #95: 0 day(s)
+Case #96: 1 day(s)
+Case #97: forever
+Case #98: forever
+Case #99: 1 day(s)
+Case #100: 0 day(s)
diff --git a/codejam_2008/src/y2008round_apac/b.rs b/codejam_2008/src/y2008round_apac/b.rs
index 167b666..ad3bbe6 100644
--- a/codejam_2008/src/y2008round_apac/b.rs
+++ b/codejam_2008/src/y2008round_apac/b.rs
@@ -9,14 +9,15 @@ use std::io::Write;
 
 /*
 Grid
-Dijkstras / priority queue (using negative to make it a min queue)
+Simulation
+Brute force
 
 */
 pub fn solve_all_cases()
 {
     run_cases(
         &["B-small-practice",
-        //    "B-large-practice"
+            "B-large-practice"
         ],
         "y2008round_apac",
         |reader, buffer| {
@@ -36,8 +37,8 @@ pub fn solve_all_cases()
                     }
                 }
 
-                if case_no != 1 {
-                     continue;
+                if case_no != 4 {
+                     //continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -46,7 +47,7 @@ pub fn solve_all_cases()
                     "Case #{}: {}",
                     case_no,
                     if let Some(ans) = solve(my_loc.convert(), &grid) {
-                        ans.to_string()
+                        ans.to_string() + " day(s)"
                     } else {
                         "forever".to_string()
                     }
@@ -88,11 +89,12 @@ fn do_turn(
             }
 
             let strongest_neighbor = DIRECTIONS
-                .iter()
-                .filter_map(|dir| {
+                .iter().enumerate()
+                .filter_map(|(idx, dir)| {
                     let sq = cur_loc + dir;
                     if let Some(power) = grid.get_value(&sq) {
-                       Some( (*power, sq) )
+                        //-idx is to break ties by DIRECTIONS index
+                       Some( (*power, 5-idx, sq) )
                     } else {
                         None
                     }
@@ -101,7 +103,7 @@ fn do_turn(
 
             ret = ret || strongest_neighbor.0 > 0;
 
-            diffs[&strongest_neighbor.1] -= strongest_neighbor.0;
+            diffs[&strongest_neighbor.2] -= grid[&cur_loc];
         }
     }
 
@@ -155,6 +157,7 @@ fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
             << " turns: " << item.first
             << " Attacking: " << *adj_it);*/
             let did_move = do_turn(me_location, Some(*attack_dir), &mut new_grid);
+            debug!("After attacking in dir {:?} grid \n{:#.3?} Alive: {}", attack_dir, new_grid, item.0);
             q.push_back((item.0 + 1, new_grid));
             if !did_move {
                 return None;
@@ -165,7 +168,7 @@ fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
 
         //LOG_STR("Before doing nothing: " << *newGrid);
         let did_move = do_turn(me_location,None,&mut new_grid);
-        debug!("After doing nothing: \n{:#.3?}", new_grid);
+        debug!("After doing nothing: \n{:#.3?}\nAlive {}", new_grid, item.0);
         q.push_back( (item.0 + 1, new_grid));
         //LOG_OFF();
         //LOG_STR();

From 297dc17c78c21ac5880088058a2ea67ced4e1c48 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 16:58:08 -0300
Subject: [PATCH 107/122] stub c & d

---
 .../src/y2008round_apac/C-large-practice.in   | 101 ++++++++++++++++++
 .../src/y2008round_apac/C-small-practice.in   | 101 ++++++++++++++++++
 codejam_2008/src/y2008round_apac/c.rs         |  65 +++++++++++
 codejam_2008/src/y2008round_apac/d.rs         |  61 +++++++++++
 4 files changed, 328 insertions(+)
 create mode 100644 codejam_2008/src/y2008round_apac/C-large-practice.in
 create mode 100644 codejam_2008/src/y2008round_apac/C-small-practice.in
 create mode 100644 codejam_2008/src/y2008round_apac/c.rs
 create mode 100644 codejam_2008/src/y2008round_apac/d.rs

diff --git a/codejam_2008/src/y2008round_apac/C-large-practice.in b/codejam_2008/src/y2008round_apac/C-large-practice.in
new file mode 100644
index 0000000..f8fd8c7
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/C-large-practice.in
@@ -0,0 +1,101 @@
+100
+11 0.059865 187763
+13 0.662817 357055
+7 0.183874 983944
+14 0.010994 508937
+1 0.5 600000
+8 0.365308 528072
+9 0.443282 85845
+7 0.36646 693270
+7 0.480497 771398
+11 0.540283 136337
+14 0.008 368901
+2 0.891396 449652
+9 0.635 520768
+12 0.693 925492
+13 0.746242 339931
+6 0.88597 158367
+11 0.349632 452622
+11 0.128079 227049
+13 0.77 537526
+8 0.463746 533323
+14 0.312375 115416
+11 0.53676 551524
+11 0.766005 536764
+9 0.928109 287457
+14 0.547173 249632
+11 0.806975 183104
+11 0.520119 97656
+8 0.958026 812580
+2 0.564634 846597
+11 0.417229 751953
+4 0.616672 441458
+14 0.968823 589600
+11 0.407435 419920
+7 0.248831 864699
+7 0.96429 449311
+2 0.745507 152547
+11 0.369924 628416
+12 0.19591 20293
+15 0.8 1
+11 0.847469 167752
+13 0.584624 20262
+5 0.532267 888600
+10 0 1000000
+11 0.971729 21972
+13 0.773338 544852
+1 0.215761 122266
+12 0.132307 621582
+13 0.832822 454466
+12 0.247491 749831
+4 0.270492 460466
+3 0.280386 905709
+11 0.014861 984863
+13 0 999999
+11 0.814661 725225
+12 0.366571 129562
+7 0.135049 568323
+11 0.438691 253772
+14 0.009225 259647
+13 0.33912 287962
+13 0.845 630359
+11 0.365682 357973
+14 0.96738 345702
+1 0.5 500000
+8 0.598516 874602
+13 0.741157 74064
+12 0.186417 879015
+12 0.094202 684326
+11 0.670373 186052
+12 0.832031 911661
+15 0.547 493239
+12 0.161438 959999
+5 0.296595 956196
+3 0.938248 812619
+8 0.416525 325237
+11 0.021703 890856
+7 0.252281 552109
+1 0.818995 166921
+7 0.229677 590917
+11 0.89194 757681
+5 1 31249
+9 0.542 519127
+13 0.210865 597899
+6 0.097372 715951
+15 0.625 1000000
+13 0.398175 889557
+12 0.77 537526
+11 0.281252 740234
+13 0.279659 724421
+11 0.357877 431732
+11 0.853996 936799
+11 0.826933 775391
+10 0.135492 505542
+11 0.15989 611328
+3 0.75 600000
+4 0.985382 405958
+9 0.186245 969099
+14 0.016 402188
+7 0.239611 783041
+12 0.32222 74274
+5 1 31250
diff --git a/codejam_2008/src/y2008round_apac/C-small-practice.in b/codejam_2008/src/y2008round_apac/C-small-practice.in
new file mode 100644
index 0000000..e15f942
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/C-small-practice.in
@@ -0,0 +1,101 @@
+100
+2 0.252281 552109
+2 0.135049 568323
+2 0.017546 431483
+4 0.229677 590917
+1 0.987386 154080
+5 0.847469 167752
+5 0.365682 357973
+1 0.891396 449652
+5 0.15989 937500
+3 0.488744 525931
+1 0.270492 460466
+5 0.540283 136337
+4 0.938248 812619
+1 0.985382 405958
+5 0.128079 656249
+5 0.8 1
+5 0.547173 843749
+5 0.625 1000000
+3 0.818995 166921
+1 0.928109 287457
+5 0.369924 187499
+2 0.835411 195109
+5 0.161438 959999
+5 0.407435 187499
+1 0.398175 889557
+3 0.059865 187763
+4 0.210865 749999
+3 0.296595 956196
+1 0.5 600000
+1 0.19591 20293
+1 0.280386 905709
+5 0.826933 775391
+1 0.773338 544852
+4 0.96429 449311
+4 0.832822 749999
+5 0.766005 536764
+1 0.968823 589600
+5 0.36646 693270
+4 0.662817 875000
+5 0.438691 253772
+3 0.247491 749831
+5 0.746242 339931
+1 0.32222 74274
+3 0.741157 74064
+5 0.281252 593750
+3 0.094202 500000
+2 0.086931 874965
+1 0.248831 864699
+4 0.097372 715951
+1 0.5 500000
+5 0.564634 846597
+3 0.132307 500000
+3 0.183874 983944
+2 0.021703 890856
+5 0.349632 452622
+5 0.186417 879015
+5 1 31250
+3 0.279659 724421
+4 0.584624 249999
+5 0.806975 687499
+5 1 31249
+1 0.814661 725225
+4 0.443282 85845
+5 0.853996 936799
+5 0.598516 874602
+3 0.616672 441458
+5 0.744394 507865
+5 0.971729 875000
+5 0.014861 187500
+3 0 999999
+2 0.552606 153220
+1 0.524124 830807
+4 0.33912 624999
+2 0.832031 911661
+2 0.447481 407465
+3 0.75 600000
+1 0.416525 325237
+5 0.312375 62499
+3 0.745507 152547
+5 0.96738 374999
+1 0.670373 186052
+4 0.463746 533323
+4 0.215761 122266
+4 0.365308 528072
+5 0.520119 468750
+4 0.239611 783041
+3 0.88597 158367
+5 0.89194 757681
+5 0.417229 468750
+1 0.532267 888600
+5 0.366571 129562
+2 0 1000000
+5 0.357877 431732
+5 0.135492 505542
+5 0.53676 551524
+1 0.480497 771398
+3 0.253584 503818
+2 0.958026 812580
+4 0.186245 969099
+1 0.625717 779402
diff --git a/codejam_2008/src/y2008round_apac/c.rs b/codejam_2008/src/y2008round_apac/c.rs
new file mode 100644
index 0000000..01e7828
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/c.rs
@@ -0,0 +1,65 @@
+use bit_vec::BitVec;
+use codejam::util::codejam::run_cases;
+use codejam::util::vector_2d::Vector2d;
+use std::io::Write;
+use std::usize;
+
+/*
+TODO
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n_rows, n_cols) = reader.read_tuple_2();
+
+                let mut chairs = BitVec::from_elem(n_cols * n_rows, false);
+
+                for r in 0..n_rows {
+                    for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
+                        let idx = r * n_cols + c;
+                        chairs.set(idx, ch == '.');
+                    }
+                }
+
+                if case_no != 3 {
+                    //continue;
+                }
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(&chairs, n_rows, n_cols)
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+const INVALID: usize = usize::MAX;
+
+fn index_to_vec(idx: usize, n_cols: usize) -> Vector2d<isize>
+{
+    Vector2d::with_val((idx / n_cols) as isize, (idx % n_cols) as isize)
+}
+fn vec_to_index(v: &Vector2d<isize>, n_cols: usize) -> usize
+{
+    v.r() as usize * n_cols + v.c() as usize
+}
+fn vec_comp_to_index(r: isize, c: isize, n_cols: usize) -> usize
+{
+    r as usize * n_cols + c as usize
+}
+
+fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
+{
+    3
+}
diff --git a/codejam_2008/src/y2008round_apac/d.rs b/codejam_2008/src/y2008round_apac/d.rs
new file mode 100644
index 0000000..ecd4280
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/d.rs
@@ -0,0 +1,61 @@
+use codejam::util::bitvec64::BitVec64;
+use codejam::util::codejam::run_cases;
+use codejam::util::vector_2d::Vector2d;
+use num_bigint::BigUint;
+//use num_integer::binomial;
+use std::io::Write;
+use std::usize;
+
+/*
+TODO
+*/
+pub fn solve_all_cases()
+{
+    let fac = compute_modular_factorial(MODULUS);
+    let inv = compute_modular_inverse(MODULUS);
+
+    run_cases(
+        &["D-small-practice", "D-large-practice"],
+        "y2008round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (n_rows, n_cols, n_rocks) = reader.read_tuple_3();
+
+                let rocks: Vec<Vector2d<isize>> = (0..n_rocks)
+                    .map(|_| {
+                        let (r, c): (isize, isize) = reader.read_tuple_2();
+                        Vector2d::with_val(r - 1, c - 1)
+                    })
+                    .collect();
+
+                if case_no != 21 {
+                    // continue;
+                }
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(rocks.as_slice(), n_rows, n_cols, &fac, &inv)
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+const MODULUS: usize = 10007;
+
+fn solve(
+    rocks_orig: &[Vector2d<isize>],
+    n_rows: isize,
+    n_cols: isize,
+    fac: &[usize],
+    inv: &[usize],
+) -> isize
+{
+3
+}

From 034983872b29d767ab6496302e9a19c17f676cd4 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 17:16:22 -0300
Subject: [PATCH 108/122] renaming

---
 codejam_2016/Cargo.lock                       | 196 ------------------
 codejam_2016/src/main.rs                      |  41 ++--
 .../A-large-practice.in                       |   0
 .../A-large-practice.out                      |   0
 .../A-small-practice.in                       |   0
 .../A-small-practice.out                      |   0
 .../B-large-practice.in                       |   0
 .../B-large-practice.out                      |   0
 .../B-small-practice.in                       |   0
 .../B-small-practice.out                      |   0
 .../C-large-practice.in                       |   0
 .../C-large-practice.out                      |   0
 .../C-large.out                               |   0
 .../C-small-practice.in                       |   0
 .../C-small-practice.out                      |   0
 .../src/{y2016round1A => y2016round1a}/a.rs   |   0
 .../src/{y2016round1A => y2016round1a}/b.rs   |   0
 .../src/{y2016round1A => y2016round1a}/c.rs   |   0
 .../src/{y2016round1A => y2016round1a}/mod.rs |   0
 .../A-large-practice.in                       |   0
 .../A-large-practice.out                      |   0
 .../A-small-practice.in                       |   0
 .../A-small-practice.out                      |   0
 .../B-large-practice.in                       |   0
 .../B-large-practice.out                      |   0
 .../B-small-practice.in                       |   0
 .../B-small-practice.out                      |   0
 .../C-large-practice.in                       |   0
 .../C-large-practice.out                      |   0
 .../C-small-practice.in                       |   0
 .../C-small-practice.out                      |   0
 .../src/{y2016round1B => y2016round1b}/a.rs   |   0
 .../src/{y2016round1B => y2016round1b}/b.rs   |   0
 .../src/{y2016round1B => y2016round1b}/c.rs   |   0
 .../src/{y2016round1B => y2016round1b}/mod.rs |   0
 .../A-large-practice.in                       |   0
 .../A-large-practice.out                      |   0
 .../A-small-practice.in                       |   0
 .../A-small-practice.out                      |   0
 .../B-large-practice.in                       |   0
 .../B-large-practice.out                      |   0
 .../B-small-practice-brute-force.out          |   0
 .../B-small-practice.in                       |   0
 .../B-small-practice.out                      |   0
 .../C-large-practice.in                       |   0
 .../C-large-practice.out                      |   0
 .../C-small-practice.in                       |   0
 .../C-small-practice.out                      |   0
 .../src/{y2016round1C => y2016round1c}/a.rs   |   0
 .../src/{y2016round1C => y2016round1c}/b.rs   |   0
 .../src/{y2016round1C => y2016round1c}/c.rs   |   0
 .../src/{y2016round1C => y2016round1c}/mod.rs |   0
 codejam_2016/src/y2016round2/c.rs             |  22 +-
 53 files changed, 35 insertions(+), 224 deletions(-)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/A-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/A-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/A-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/A-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/B-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/B-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/B-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/B-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/C-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/C-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/C-large.out (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/C-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/C-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/a.rs (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/b.rs (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/c.rs (100%)
 rename codejam_2016/src/{y2016round1A => y2016round1a}/mod.rs (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/A-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/A-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/A-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/A-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/B-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/B-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/B-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/B-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/C-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/C-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/C-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/C-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/a.rs (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/b.rs (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/c.rs (100%)
 rename codejam_2016/src/{y2016round1B => y2016round1b}/mod.rs (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/A-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/A-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/A-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/A-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/B-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/B-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/B-small-practice-brute-force.out (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/B-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/B-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/C-large-practice.in (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/C-large-practice.out (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/C-small-practice.in (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/C-small-practice.out (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/a.rs (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/b.rs (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/c.rs (100%)
 rename codejam_2016/src/{y2016round1C => y2016round1c}/mod.rs (100%)

diff --git a/codejam_2016/Cargo.lock b/codejam_2016/Cargo.lock
index 4d9dd8f..1dad684 100644
--- a/codejam_2016/Cargo.lock
+++ b/codejam_2016/Cargo.lock
@@ -1,32 +1,8 @@
-[[package]]
-name = "alga"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "approx"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "autocfg"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "bimap"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "bit-set"
 version = "0.5.0"
@@ -45,11 +21,6 @@ name = "bitflags"
 version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "byteorder"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "cfg-if"
 version = "0.1.6"
@@ -88,24 +59,6 @@ name = "fuchsia-cprng"
 version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "generic-array"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "hamming"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "indexmap"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "itertools"
 version = "0.8.0"
@@ -119,11 +72,6 @@ name = "libc"
 version = "0.2.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "libm"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "log"
 version = "0.4.6"
@@ -132,44 +80,11 @@ dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "matrixmultiply"
-version = "0.1.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "multiset"
 version = "0.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "nalgebra"
-version = "0.16.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "alga 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "generic-array 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "num"
-version = "0.1.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-bigint"
 version = "0.2.2"
@@ -179,14 +94,6 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num-complex"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-integer"
 version = "0.1.39"
@@ -195,55 +102,16 @@ dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "num-iter"
-version = "0.1.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "num-rational"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "num-traits"
 version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "num_cpus"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "permutohedron"
 version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "rand"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-cprng 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "rand"
 version = "0.6.5"
@@ -340,11 +208,6 @@ dependencies = [
  "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "rawpointer"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "rdrand"
 version = "0.4.0"
@@ -353,37 +216,17 @@ dependencies = [
  "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
-[[package]]
-name = "rulinalg"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "rust-algorithm-problems"
 version = "0.1.0"
 dependencies = [
- "bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "nalgebra 0.16.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -407,24 +250,6 @@ name = "semver-parser"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "threadpool"
-version = "1.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "try_opt"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "typenum"
-version = "1.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
 [[package]]
 name = "winapi"
 version = "0.3.6"
@@ -445,38 +270,22 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [metadata]
-"checksum alga 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24bb00eeca59f2986c747b8c2f271d52310ce446be27428fc34705138b155778"
-"checksum approx 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c57ff1a5b00753647aebbbcf4ea67fa1e711a65ea7a30eb90dbf07de2485aee"
 "checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
-"checksum bimap 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6b282b982237078bfac61a948a2198f185aceea8b9a6e794b70b96fd31923d3d"
 "checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a"
 "checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf"
 "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
-"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
 "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
 "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
 "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
 "checksum fuchsia-cprng 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "81f7f8eb465745ea9b02e2704612a9946a59fa40572086c6fd49d6ddcf30bf31"
-"checksum generic-array 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8107dafa78c80c848b71b60133954b4a58609a3a1a5f9af037ecc7f67280f369"
-"checksum hamming 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1"
-"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d"
 "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
 "checksum libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)" = "e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047"
-"checksum libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "03c0bb6d5ce1b5cc6fd0578ec1cbc18c9d88b5b591a5c7c1d6c6175e266a0819"
 "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
-"checksum matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
 "checksum multiset 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ce8738c9ddd350996cb8b8b718192851df960803764bcdaa3afb44a63b1ddb5c"
-"checksum nalgebra 0.16.13 (registry+https://github.com/rust-lang/crates.io-index)" = "8e0799b53947b9c9048a1537f024f22f54701bbb75274f65955d081a87c0b739"
-"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
 "checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
-"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8"
 "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
-"checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124"
-"checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10"
 "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
-"checksum num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a69d464bdc213aaaff628444e99578ede64e9c854025aa43b9796530afa9238"
 "checksum permutohedron 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c"
-"checksum rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"
 "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
 "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
 "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
@@ -487,15 +296,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b7c690732391ae0abafced5015ffb53656abfaec61b342290e5eb56b286a679d"
 "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05"
 "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
-"checksum rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
 "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-"checksum rulinalg 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "04ada202c9685e1d72a7420c578e92b358dbf807d3dfabb676a3dab9cc3bb12f"
 "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
 "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
-"checksum try_opt 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e282c6497867d439f3454cebee548f5961d2787c72c1b7b96481d7f0a3e5bc0"
-"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
 "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
 "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/codejam_2016/src/main.rs b/codejam_2016/src/main.rs
index c9678fb..195c301 100644
--- a/codejam_2016/src/main.rs
+++ b/codejam_2016/src/main.rs
@@ -1,9 +1,11 @@
 #![allow(non_snake_case)]
 mod y2016qual;
-mod y2016round1A;
-mod y2016round1B;
-mod y2016round1C;
+mod y2016round1a;
+mod y2016round1b;
+mod y2016round1c;
 mod y2016round2;
+mod y2016round3;
+
 
 extern crate codejam;
 
@@ -15,7 +17,7 @@ extern crate log;
 
 use codejam::util::log::init_log;
 
-pub fn run_y2016_roundQual()
+pub fn run_y2016_round_qual()
 {
     y2016qual::a::solve_all_cases();
     y2016qual::b::solve_all_cases();
@@ -23,25 +25,25 @@ pub fn run_y2016_roundQual()
     y2016qual::d::solve_all_cases();
 }
 
-pub fn run_y2016_round1A()
+pub fn run_y2016_round_1a()
 {
-    y2016round1A::a::solve_all_cases();
-    y2016round1A::b::solve_all_cases();
-    y2016round1A::c::solve_all_cases();
+    y2016round1a::a::solve_all_cases();
+    y2016round1a::b::solve_all_cases();
+    y2016round1a::c::solve_all_cases();
 }
 
-pub fn run_y2016_round1B()
+pub fn run_y2016_round_1b()
 {
-    y2016round1B::a::solve_all_cases();
-    y2016round1B::b::solve_all_cases();
-    y2016round1B::c::solve_all_cases();
+    y2016round1b::a::solve_all_cases();
+    y2016round1b::b::solve_all_cases();
+    y2016round1b::c::solve_all_cases();
 }
 
-pub fn run_y2016_round1C()
+pub fn run_y2016_round_1c()
 {
-    y2016round1C::a::solve_all_cases();
-    y2016round1C::b::solve_all_cases();
-    y2016round1C::c::solve_all_cases();
+    y2016round1c::a::solve_all_cases();
+    y2016round1c::b::solve_all_cases();
+    y2016round1c::c::solve_all_cases();
 }
 
 pub fn run_y2016_round2()
@@ -52,9 +54,14 @@ pub fn run_y2016_round2()
     y2016round2::d::solve_all_cases();
 }
 
+
+pub fn run_y2016_round3()
+{
+
+}
 fn main()
 {
     init_log();
 
-    y2016round2::d::solve_all_cases();
+    y2016round3::a::solve_all_cases();
 }
diff --git a/codejam_2016/src/y2016round1A/A-large-practice.in b/codejam_2016/src/y2016round1a/A-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1A/A-large-practice.in
rename to codejam_2016/src/y2016round1a/A-large-practice.in
diff --git a/codejam_2016/src/y2016round1A/A-large-practice.out b/codejam_2016/src/y2016round1a/A-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1A/A-large-practice.out
rename to codejam_2016/src/y2016round1a/A-large-practice.out
diff --git a/codejam_2016/src/y2016round1A/A-small-practice.in b/codejam_2016/src/y2016round1a/A-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1A/A-small-practice.in
rename to codejam_2016/src/y2016round1a/A-small-practice.in
diff --git a/codejam_2016/src/y2016round1A/A-small-practice.out b/codejam_2016/src/y2016round1a/A-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1A/A-small-practice.out
rename to codejam_2016/src/y2016round1a/A-small-practice.out
diff --git a/codejam_2016/src/y2016round1A/B-large-practice.in b/codejam_2016/src/y2016round1a/B-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1A/B-large-practice.in
rename to codejam_2016/src/y2016round1a/B-large-practice.in
diff --git a/codejam_2016/src/y2016round1A/B-large-practice.out b/codejam_2016/src/y2016round1a/B-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1A/B-large-practice.out
rename to codejam_2016/src/y2016round1a/B-large-practice.out
diff --git a/codejam_2016/src/y2016round1A/B-small-practice.in b/codejam_2016/src/y2016round1a/B-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1A/B-small-practice.in
rename to codejam_2016/src/y2016round1a/B-small-practice.in
diff --git a/codejam_2016/src/y2016round1A/B-small-practice.out b/codejam_2016/src/y2016round1a/B-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1A/B-small-practice.out
rename to codejam_2016/src/y2016round1a/B-small-practice.out
diff --git a/codejam_2016/src/y2016round1A/C-large-practice.in b/codejam_2016/src/y2016round1a/C-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1A/C-large-practice.in
rename to codejam_2016/src/y2016round1a/C-large-practice.in
diff --git a/codejam_2016/src/y2016round1A/C-large-practice.out b/codejam_2016/src/y2016round1a/C-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1A/C-large-practice.out
rename to codejam_2016/src/y2016round1a/C-large-practice.out
diff --git a/codejam_2016/src/y2016round1A/C-large.out b/codejam_2016/src/y2016round1a/C-large.out
similarity index 100%
rename from codejam_2016/src/y2016round1A/C-large.out
rename to codejam_2016/src/y2016round1a/C-large.out
diff --git a/codejam_2016/src/y2016round1A/C-small-practice.in b/codejam_2016/src/y2016round1a/C-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1A/C-small-practice.in
rename to codejam_2016/src/y2016round1a/C-small-practice.in
diff --git a/codejam_2016/src/y2016round1A/C-small-practice.out b/codejam_2016/src/y2016round1a/C-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1A/C-small-practice.out
rename to codejam_2016/src/y2016round1a/C-small-practice.out
diff --git a/codejam_2016/src/y2016round1A/a.rs b/codejam_2016/src/y2016round1a/a.rs
similarity index 100%
rename from codejam_2016/src/y2016round1A/a.rs
rename to codejam_2016/src/y2016round1a/a.rs
diff --git a/codejam_2016/src/y2016round1A/b.rs b/codejam_2016/src/y2016round1a/b.rs
similarity index 100%
rename from codejam_2016/src/y2016round1A/b.rs
rename to codejam_2016/src/y2016round1a/b.rs
diff --git a/codejam_2016/src/y2016round1A/c.rs b/codejam_2016/src/y2016round1a/c.rs
similarity index 100%
rename from codejam_2016/src/y2016round1A/c.rs
rename to codejam_2016/src/y2016round1a/c.rs
diff --git a/codejam_2016/src/y2016round1A/mod.rs b/codejam_2016/src/y2016round1a/mod.rs
similarity index 100%
rename from codejam_2016/src/y2016round1A/mod.rs
rename to codejam_2016/src/y2016round1a/mod.rs
diff --git a/codejam_2016/src/y2016round1B/A-large-practice.in b/codejam_2016/src/y2016round1b/A-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1B/A-large-practice.in
rename to codejam_2016/src/y2016round1b/A-large-practice.in
diff --git a/codejam_2016/src/y2016round1B/A-large-practice.out b/codejam_2016/src/y2016round1b/A-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1B/A-large-practice.out
rename to codejam_2016/src/y2016round1b/A-large-practice.out
diff --git a/codejam_2016/src/y2016round1B/A-small-practice.in b/codejam_2016/src/y2016round1b/A-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1B/A-small-practice.in
rename to codejam_2016/src/y2016round1b/A-small-practice.in
diff --git a/codejam_2016/src/y2016round1B/A-small-practice.out b/codejam_2016/src/y2016round1b/A-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1B/A-small-practice.out
rename to codejam_2016/src/y2016round1b/A-small-practice.out
diff --git a/codejam_2016/src/y2016round1B/B-large-practice.in b/codejam_2016/src/y2016round1b/B-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1B/B-large-practice.in
rename to codejam_2016/src/y2016round1b/B-large-practice.in
diff --git a/codejam_2016/src/y2016round1B/B-large-practice.out b/codejam_2016/src/y2016round1b/B-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1B/B-large-practice.out
rename to codejam_2016/src/y2016round1b/B-large-practice.out
diff --git a/codejam_2016/src/y2016round1B/B-small-practice.in b/codejam_2016/src/y2016round1b/B-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1B/B-small-practice.in
rename to codejam_2016/src/y2016round1b/B-small-practice.in
diff --git a/codejam_2016/src/y2016round1B/B-small-practice.out b/codejam_2016/src/y2016round1b/B-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1B/B-small-practice.out
rename to codejam_2016/src/y2016round1b/B-small-practice.out
diff --git a/codejam_2016/src/y2016round1B/C-large-practice.in b/codejam_2016/src/y2016round1b/C-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1B/C-large-practice.in
rename to codejam_2016/src/y2016round1b/C-large-practice.in
diff --git a/codejam_2016/src/y2016round1B/C-large-practice.out b/codejam_2016/src/y2016round1b/C-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1B/C-large-practice.out
rename to codejam_2016/src/y2016round1b/C-large-practice.out
diff --git a/codejam_2016/src/y2016round1B/C-small-practice.in b/codejam_2016/src/y2016round1b/C-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1B/C-small-practice.in
rename to codejam_2016/src/y2016round1b/C-small-practice.in
diff --git a/codejam_2016/src/y2016round1B/C-small-practice.out b/codejam_2016/src/y2016round1b/C-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1B/C-small-practice.out
rename to codejam_2016/src/y2016round1b/C-small-practice.out
diff --git a/codejam_2016/src/y2016round1B/a.rs b/codejam_2016/src/y2016round1b/a.rs
similarity index 100%
rename from codejam_2016/src/y2016round1B/a.rs
rename to codejam_2016/src/y2016round1b/a.rs
diff --git a/codejam_2016/src/y2016round1B/b.rs b/codejam_2016/src/y2016round1b/b.rs
similarity index 100%
rename from codejam_2016/src/y2016round1B/b.rs
rename to codejam_2016/src/y2016round1b/b.rs
diff --git a/codejam_2016/src/y2016round1B/c.rs b/codejam_2016/src/y2016round1b/c.rs
similarity index 100%
rename from codejam_2016/src/y2016round1B/c.rs
rename to codejam_2016/src/y2016round1b/c.rs
diff --git a/codejam_2016/src/y2016round1B/mod.rs b/codejam_2016/src/y2016round1b/mod.rs
similarity index 100%
rename from codejam_2016/src/y2016round1B/mod.rs
rename to codejam_2016/src/y2016round1b/mod.rs
diff --git a/codejam_2016/src/y2016round1C/A-large-practice.in b/codejam_2016/src/y2016round1c/A-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1C/A-large-practice.in
rename to codejam_2016/src/y2016round1c/A-large-practice.in
diff --git a/codejam_2016/src/y2016round1C/A-large-practice.out b/codejam_2016/src/y2016round1c/A-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1C/A-large-practice.out
rename to codejam_2016/src/y2016round1c/A-large-practice.out
diff --git a/codejam_2016/src/y2016round1C/A-small-practice.in b/codejam_2016/src/y2016round1c/A-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1C/A-small-practice.in
rename to codejam_2016/src/y2016round1c/A-small-practice.in
diff --git a/codejam_2016/src/y2016round1C/A-small-practice.out b/codejam_2016/src/y2016round1c/A-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1C/A-small-practice.out
rename to codejam_2016/src/y2016round1c/A-small-practice.out
diff --git a/codejam_2016/src/y2016round1C/B-large-practice.in b/codejam_2016/src/y2016round1c/B-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1C/B-large-practice.in
rename to codejam_2016/src/y2016round1c/B-large-practice.in
diff --git a/codejam_2016/src/y2016round1C/B-large-practice.out b/codejam_2016/src/y2016round1c/B-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1C/B-large-practice.out
rename to codejam_2016/src/y2016round1c/B-large-practice.out
diff --git a/codejam_2016/src/y2016round1C/B-small-practice-brute-force.out b/codejam_2016/src/y2016round1c/B-small-practice-brute-force.out
similarity index 100%
rename from codejam_2016/src/y2016round1C/B-small-practice-brute-force.out
rename to codejam_2016/src/y2016round1c/B-small-practice-brute-force.out
diff --git a/codejam_2016/src/y2016round1C/B-small-practice.in b/codejam_2016/src/y2016round1c/B-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1C/B-small-practice.in
rename to codejam_2016/src/y2016round1c/B-small-practice.in
diff --git a/codejam_2016/src/y2016round1C/B-small-practice.out b/codejam_2016/src/y2016round1c/B-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1C/B-small-practice.out
rename to codejam_2016/src/y2016round1c/B-small-practice.out
diff --git a/codejam_2016/src/y2016round1C/C-large-practice.in b/codejam_2016/src/y2016round1c/C-large-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1C/C-large-practice.in
rename to codejam_2016/src/y2016round1c/C-large-practice.in
diff --git a/codejam_2016/src/y2016round1C/C-large-practice.out b/codejam_2016/src/y2016round1c/C-large-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1C/C-large-practice.out
rename to codejam_2016/src/y2016round1c/C-large-practice.out
diff --git a/codejam_2016/src/y2016round1C/C-small-practice.in b/codejam_2016/src/y2016round1c/C-small-practice.in
similarity index 100%
rename from codejam_2016/src/y2016round1C/C-small-practice.in
rename to codejam_2016/src/y2016round1c/C-small-practice.in
diff --git a/codejam_2016/src/y2016round1C/C-small-practice.out b/codejam_2016/src/y2016round1c/C-small-practice.out
similarity index 100%
rename from codejam_2016/src/y2016round1C/C-small-practice.out
rename to codejam_2016/src/y2016round1c/C-small-practice.out
diff --git a/codejam_2016/src/y2016round1C/a.rs b/codejam_2016/src/y2016round1c/a.rs
similarity index 100%
rename from codejam_2016/src/y2016round1C/a.rs
rename to codejam_2016/src/y2016round1c/a.rs
diff --git a/codejam_2016/src/y2016round1C/b.rs b/codejam_2016/src/y2016round1c/b.rs
similarity index 100%
rename from codejam_2016/src/y2016round1C/b.rs
rename to codejam_2016/src/y2016round1c/b.rs
diff --git a/codejam_2016/src/y2016round1C/c.rs b/codejam_2016/src/y2016round1c/c.rs
similarity index 100%
rename from codejam_2016/src/y2016round1C/c.rs
rename to codejam_2016/src/y2016round1c/c.rs
diff --git a/codejam_2016/src/y2016round1C/mod.rs b/codejam_2016/src/y2016round1c/mod.rs
similarity index 100%
rename from codejam_2016/src/y2016round1C/mod.rs
rename to codejam_2016/src/y2016round1c/mod.rs
diff --git a/codejam_2016/src/y2016round2/c.rs b/codejam_2016/src/y2016round2/c.rs
index c76510c..c0f0f73 100644
--- a/codejam_2016/src/y2016round2/c.rs
+++ b/codejam_2016/src/y2016round2/c.rs
@@ -101,8 +101,8 @@ fn next_dir_loc(loc: &GardenLocation, is_forward_slash: bool) -> GardenLocation
 struct Lover
 {
     number: usize,
-    location: Vector2d<i64>,
-    initial_direction: &'static Vector2d<i64>,
+    location: Vector2d<isize>,
+    initial_direction: &'static Vector2d<isize>,
 }
 
 #[derive(Debug)]
@@ -117,15 +117,15 @@ struct LoverPair
 #[derive(Ord, PartialOrd, PartialEq, Eq, Hash, Copy, Clone)]
 struct GardenLocation
 {
-    grid_loc: Vector2d<i64>,
-    entry_dir: Vector2d<i64>,
+    grid_loc: Vector2d<isize>,
+    entry_dir: Vector2d<isize>,
 }
 
 #[derive(Eq, PartialEq, Copy, Clone)]
 struct HeapNode
 {
     distance_to_filled_edge: usize,
-    distance_to_lmid: i64,
+    distance_to_lmid: isize,
     loc: GardenLocation,
 }
 
@@ -171,7 +171,7 @@ fn compute_distance_grid(R: usize, C: usize, grid: &Grid<String>) -> Grid<usize>
             if grid[(r, c)] == "\\" || grid[(r, c)] == "/" {
                 grid_edge_dist[(r, c)] = 0;
             } else {
-                let loc = Vector2d::with_val(r as i64, c as i64);
+                let loc = Vector2d::with_val(r as isize, c as isize);
                 grid_edge_dist[&loc] = usize::MAX;
                 for dir in DIRECTIONS.iter() {
                     grid_edge_dist[&loc] =
@@ -182,7 +182,7 @@ fn compute_distance_grid(R: usize, C: usize, grid: &Grid<String>) -> Grid<usize>
     }
     for r in (1..=R ).rev() {
         for c in (1..=C ).rev() {
-            let loc = Vector2d::with_val(r as i64, c as i64);
+            let loc = Vector2d::with_val(r as isize, c as isize);
 
             for dir in DIRECTIONS.iter() {
                 grid_edge_dist[&loc] = min(grid_edge_dist[&loc], 1 + grid_edge_dist[&(loc + dir)]);
@@ -204,7 +204,7 @@ fn get_lovers(R: usize, C: usize, grid: &mut Grid<String> ) -> Vec<Lover>
 
         lovers.push(Lover {
             number: label + 1,
-            location: Vector2d::with_val(r as i64, c as i64),
+            location: Vector2d::with_val(r as isize, c as isize),
             initial_direction: initial_dir,
         });
     };
@@ -258,7 +258,7 @@ fn solve(R: usize, C: usize, lover_pairings: &[usize]) -> String
         let L1 = lovers.iter().find(|lov| lov.number == L1_num).unwrap();
         let L2 = lovers.iter().find(|lov| lov.number == L2_num).unwrap();
 
-        let diff = (L1_num as i64 - L2_num as i64).abs() as usize;
+        let diff = (L1_num as isize - L2_num as isize).abs() as usize;
         let clock_dist = min(diff, 2 * (R + C) - diff);
 
         let Lmid_num = if clock_dist == diff {
@@ -341,9 +341,9 @@ fn solve(R: usize, C: usize, lover_pairings: &[usize]) -> String
             }
 
             if heap_node.loc.grid_loc.r() == 0
-                || heap_node.loc.grid_loc.r() == R as i64 + 1
+                || heap_node.loc.grid_loc.r() == R as isize + 1
                 || heap_node.loc.grid_loc.c() == 0
-                || heap_node.loc.grid_loc.c() == C as i64 + 1
+                || heap_node.loc.grid_loc.c() == C as isize + 1
             {
                 //we are out of bounds in the arms of another lover
                 continue;

From cf39b9a5984ef099988ffa524424052f9ad1d1fc Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 17:16:46 -0300
Subject: [PATCH 109/122] a

---
 .../src/y2016round3/A-large-practice.in       | 101 ++++++++++++++++++
 .../src/y2016round3/A-large-practice.out      | 100 +++++++++++++++++
 .../src/y2016round3/A-small-practice.in       | 101 ++++++++++++++++++
 .../src/y2016round3/A-small-practice.out      | 100 +++++++++++++++++
 codejam_2016/src/y2016round3/a.rs             |  55 ++++++++++
 codejam_2016/src/y2016round3/mod.rs           |   4 +
 6 files changed, 461 insertions(+)
 create mode 100644 codejam_2016/src/y2016round3/A-large-practice.in
 create mode 100644 codejam_2016/src/y2016round3/A-large-practice.out
 create mode 100644 codejam_2016/src/y2016round3/A-small-practice.in
 create mode 100644 codejam_2016/src/y2016round3/A-small-practice.out
 create mode 100644 codejam_2016/src/y2016round3/a.rs
 create mode 100644 codejam_2016/src/y2016round3/mod.rs

diff --git a/codejam_2016/src/y2016round3/A-large-practice.in b/codejam_2016/src/y2016round3/A-large-practice.in
new file mode 100644
index 0000000..e50b0de
--- /dev/null
+++ b/codejam_2016/src/y2016round3/A-large-practice.in
@@ -0,0 +1,101 @@
+100
+CCJJ
+CJCJ
+CJJC
+CJJJ
+CCCCCC
+CJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCCCJCJCJJCJCJCJCJCCJCJCJCJCJJJJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCCCJJCJCJCJCJCJJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJJJCJJCJCJCJCJCJJCJJJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCJCCJCJCJCJCCJCJCJCJCCJCJJJCJCJCCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCCCJCJCJCCJCJCJCJCJC
+CJCJCJCJCJJCJCJCJCJCCJCJCJCCCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJJJCCJCJCJCJCJJCJCJCJCJCJJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCCCCJCJCJCJCJJCJCJJJCJCCJCJCJCJCJJCJCJCJCJCCCCJCJCJCJJCJCJCJJJCCJCJCJCJCJCCJCJCJCJCCJCJCJJJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJJJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCCCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCCCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJC
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJCCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCJJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJ
+CJJCJCCJJCJCJCJCCJJCCJJCCJCJCJCJCJJCJCCJCJJCJCCJJCJCCJCJCJJCCJCJCJCJCJCJJCJCCJCJCJCJCJCJJCJCJCCJJCJCCJJCCJCJCJJCCJJCJCCJJCCJCJJCJCJCCJCJJCCJJCCJJCJCCJJCCJJCCJCJCJJCCJJCJCJCJCJCJCCJCJJCJCCJJCCJJCCJCJJCJCJCCJCJCJCJCJCJJCCJJCCJCJCJCJCJCJCJCJCJCJJCJCCJJCCJJCJCCJJCCJCJJCJCJCJCJCCJCJCJJCJCCJCJJCCJCJCJJCJCJCCJJCJCJCCJCJCJJCJCCJJCJCJCJCJCCJJCJCJCJCJCJCJCCJCJCJCJCJCJJCCJJCJCCJJCJCCJJCCJJCCJJCCJJCCJJCJCCJJC
+JJCJCCCJCCCJCJCJJJCJJCJCJCJCJJJCCCCCJJJJJJCCCJJJJCCCCJJJJCCCCJJCJCCCJJCJCJJJJJJCCCCCCCJJJJJJJJCCJJJJJJJJJJJJCCCJJJCCCCCJCJCJCJCJCJCJCJJJCJJCJCJJJCJJCCJCCCCCCJJCJCJCCCJJCCJCCCJCJJJCCJJCCJCJJJCJCJCCCJCCJJJCJJJCCJJJJCJJCCJJCJJJCCCJCCJJJCCJJJJJCCJJJJCJJJCJCCCCCJJJJJCCCCJJJJCCCCJCJCCCJJCJCCCJJJJCCJCJCCCJCCCCCJJCCJCJCJCJCJCJJJCCCJCJCJCJJJCCJJCJCJJCCJJCCCJJCCCCJJJCCCCJJCCCCJJCJCCCCJJJJCCCJCJJJJJCJCJCJCJJCCJCCJJCJCJCJCJCCCCJJCCJCJJCCJCJJCJCCJCJCCCJJCJCCJJCCJCJJCJJJCJCJCJJJCJCJCJCJCCCJCCCJJJCJCCCCCJCJCJCJCJCJCJJJJCJJCCJCCCJJCCCJCCCCJJJJCCCCJJJCCCJCJCCCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJJJCCCJCCCJCCCCJCCCJCCJJJCJJJCJCCCJCCCJCJCJCJCJCJCJCJCJJJCJJCJJJJJCJJJCJCCCCCJCJCCCJCCCJCJCJCJCJCJCCCJJJCCCCCJJCCJJJJCJJJJJCCJJJJJJCCJJJJCCCJCJJCJCCJJJCCCCCCJJJJCCJCCJJJJCCCJJJCCJJCCCJJJJJCJJCCCCCJJJCJJJCCCJCJCJJCCJJCCJCJJCJJCJCJJCCJJCJCJJJCCJCJJCCJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJJJCCCCCCJJJCCCCJCJJCCJJJCCCJJJCCCJCCCCCJJCCJJCCCJCCCCCCCCJJJJCCCJCJJJCJCJCJCJCJCJCJJCJCJCCJJCCJCCCJCJCJCJCJJJCCJJCCJCJJJCCCJJJCCCJCCJCJCCJJJC
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCCJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJJCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJC
+CCJJCCJJCCCCCCCCCCCCJJJJJJCCCCJJJJCCJJJJCCJJCCCCJJJJCCCCJJJJCCJJJJCCJJJJCCJJCCCCCCCCJJJJJJCCJJCCCCJJJJCCCCCCCCJJCCJJJJJJCCJJJJCCCCCCCCJJJJJJJJJJJJJJCCCCJJCCJJJJCCCCJJCCCCCCCCJJCCJJJJJJCCCCCCJJJJCCCCJJJJCCCCCCCCJJCCJJJJJJJJCCJJCCCCJJCCJJCCJJCCCCCCCCJJJJCCJJJJJJCCCCJJJJCCJJCCJJJJJJJJCCCCJJJJJJJJJJJJJJCCCCJJJJJJCCJJJJJJJJCCJJJJCCCCCCJJJJJJCCCCJJCCCCJJJJJJJJJJJJJJJJCCJJCCJJJJCCCCCCJJJJCCJJCCJJCCJJCCJJ
+CJJCJC
+JJJJCCCCJJCCCCCJCCCCJCJCJCJCJCJCJJJJJCCCCCJCCCCJJJCCJCJJCJJCCJJCJCJCJCJCJJJJJJCCJJJJJCCCCJCJCCJJJJCCJJJJCCJJCJJJJJJCJJCJJJJJJJJCJCCJCJCJJCCJJCJCJJCCJCJJCCCCCJCJCJJCCJCJCJCJJCCJJCCJCCJCJJJCJCJCJCJCJCJCJCCJJJCCCCJCJJJCJCCJJCJCCJJCCCJCJJJJJCCCCJJJJJCCCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCCCJCCCCCCCCCCCCCCCCCCCJJJJCJCCCJCJCCCCCCCCCCCCCJCCJCCCCCJCJCJCJCCCJJJJJJJJCCCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCJJJCJCJCCCJCCCJCJCCJJJJJJJJJJCJJJJJCJJJCCCJJJCCCCJJCJCJJJJJJJJJJJCCCCCCJJCCJCJCJCJCJCJCJCJCCJJJCJCJCCJJCJJCJJCCJCJJCJCCJJJCJJCJJJJCJCCCJJCJCJCCJJJCCJJCCJJJCCCJCJCJCJCJCJJCCJCJCJCJCJJCJJJCCCJCCJJCCCJJCCJCCCJJJCJCJJJCCCCCJJCJCCJJCJJCJJJCCCJCJCJJJCCJCCJCJCJJJCCCJJJJJCJJCCCCJCCJJCCJJJJJCCCCJJJJCJJJCJCJCJJJCCJCCCCJCJJCCJJCJCJCJCJCJCJCJCJCJCCJJCCJCCJJCCCJCJCCCJJCJCCJJCJCJCJCCCJJCCJCJCCJJCJJJCJCJCJJJCCJCJCCJCJCCJJCJCCJJCCJJJJCCJJCCJCJJCJCCCCJCJCJCJCJCJCJCJCJCJJJCJCCJCCJJCCJCCCCCJCJCJCJCJCJCJJJCJCCCCCCCCCCCJCJCJCJJCCJCJCJCJCJCJCJJJCCCJCCJJCJCJCCCCCJJJJCCCJJCJJCJCCJJCCJCCJCJCJJCJJCCJ
+CCCCCCCCCCJJJJCCJJCJCJCCJJCCJJJCCCCCCCCCJJJJJJCCJJCCJJCCCCJJCCJJCCCCJJCCJJJJJJCCCCJJCCCCJJJJJCJJCCCCJJJJJJJCCCJJJJCCCCJJJCJJJJCCJJJJJJCCJJJJJJCJJJJJCCJJCCJJCCJJCCCCCCCCCCCCCCCCCCJJCCJJCCJCCCCCJJJJJJJJJJCCJJCCCCCCCCJJJJJJCCCJJJJJJJJJJJCCCCCCJJCCJCCCCJJCJJJJCCJJCCJJJJJJJJJJJJCCJJCCJJCCJJJJCCCCCCCCJCJJCCJJCCCCJJCCJJCCJJCCJCCCCCCJCCJJJJJJJCJJCCJJCCJJJJJJJJCCJJCJCJJJCCJJJJCCCCCCJJJJJJJJJJCCCCJJCCCCCCCC
+JJCCJJCCJJCCJJCCJJJCJJCCJJCCJJCCJJJJCCCCCCJJCCJJCCJJCCCCJCJJJJJJJJJJJJCCJJCCJJCCCCCCCCCCJJJCCCCCCCCCCCJJCCCCCCCCJJCCJJJJJJCCJJCJCCJJCCJCCCCCJJJJCCCCCCJJJJCCCCCCJJCCCCCCCCJJCCCCJJJJJJJCJJCCCJJJJJJJJJCCCCJJJJJJCCCCCCCCJJCCJJCCJJJJJJJCCCCCJCCCJJCCCCCCJCCCJJCCCCCCJJJJJJCCJJCCJJCCJJCCCCJJCCJJJJJJJJCCJJCCCCCCJJCCCCCCCCCCCCJJJJJJCCJJCCCJCCCCCCJJCCJCJJCCJJCCCCCCCCCCCCJJCCCCCCCCJJCCJJCCCCJJJJJJJJJJJJJJJJJJ
+CJJCJCCC
+JCJCJJ
+JCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCCJJCJCJJJCJCCCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCJCJJJCJCCCJJJCJCJCJCJJJCJCJCCCJCJJJJJCJJJCJCJCJCCCJCJCCCJCJJJCJCJCCCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJJJCJCJCJCJCJCCCJCCCJCJCJCJCJCJCJCJCJCJCJCCCJCJJJCJCJJJCJCJJJCJCJCJCCCJCJCJCJCJCJCJCJCJCJJJCCCJCJCJCJCJCJJCCJCJJJCJCJCJCJCJCJCJCJJJJJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCCCJCJCJCJCJCJCJCJJJCJC
+CCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCCCJCJCJCJCJCCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJJJCJCJCJC
+CCCCCCCCJJJJJJJJJCCCCCCCJJJJJJJJJCCCCCCJCCCCCJJCCCCJJJCCCJCCCCCCJJJJCCCCCCCCCCJJJJCCCCCCCCCCJJJJCJCCCCCJCJJJJJJCCCCCCCCCCJJJJJJCJJJJJJJJJJCCCCCCCCJJJCCCJJJJJCCCJJCJJCCCJJCCCCCCCJJJJJJCJJJJCCCCCJJJJJJJJJJCCCCCCCJJJJCCCCJCJJJJCCCCCCCCCCCJJJJJCJJJJJJJCCCCCJJJCCCCJCCCCCCCCCCJJJCCCCJCCCJCCCCCCCCJJJJCCCCCCCCJCJJJJJJCCCCJJJJJJJJJCCCCCJJJJJJJJCCCCCCJJCCCCCCCCCJJJJJJCCCCCCCCCCJCCCCCCJJJJCCCCCJJJJCJJCCCCCCC
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCJJJCJCCJCJJCJCCJJCCCCJJCCJJCJCCJJCCJCJJCJCCJCJJJCJJCJCCJCCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJCCCCJJJJJJJJJJJCCCCCCCCCJCJJJJJJJJJJCJJJJJJJJJJJCCCCCCCJJJJJJJJJJJJCCCCCCCCCCCCCCCJJJJJJJJJJJJCCJJJCJCCCCJCCCCCCCJJJJCCCCJJCCCJJJJJJJJCCCCCCCCCJJCCCJJJJJCJCJCCJJJJJCCCJJCJJCCCCJJJCCCCJJCJCCJJJJJCCCCJJCJJCJJCCCCJJJCCCCJJCCCJCCCJJJJJCCCJCCCCCJJJCCCCCJJJCCJJCJCCJJCCJCCJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJCCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJJCJCJJCCJJCJCCJJCCCCJJJCJJCJCCJCJJCJCCJJCCJCJJCCJCCJCCJJJCJCJJCJCCJCJJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJCJJCJCCJJCCJCJCJJCCJCJCJCJJCCJCJCJJCJCCJJCCJJCJCCJCJCJJCCJJCCJCJJCCJCJJCCJCJCJCJJCCJCJJCJCJCCJCJJCJCJCJCJCCJJCJCJCCJJCJCCJCJJCCJCJCJJCCJCJJCCJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJJJCJCJCJCJJCJCJCJCJCCCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCCCCJJCCCCJJCCJJCCCCCCCCCCCCJJJJJJCCJJJJCCCCJJCCJJJJJJCCJJCCJJJJJJCCCCCCCCJJCCCCJJCCCCJJCCCCCCJJJJCCCCJJCCCCJJCCJJJJJJCCJJCCCCCCJJCCJJCCCCJJJJCCCCJJJJCCJJJJJJCCJJJJJJCCJJJJJJJJCCCCJJJCCJCCJJCCCCCJCJJCCJJJCJCCJJCCCCJCJJCJJCJJJCJJJCJJCJCJJJJJJCJJJCJCJJJJJJCJJJJJJJCCJJJCJJCCCJJJCCCJJJCJCCJJCJJCCJJJJCCJJJJCCCCJJJJCCCCJJJCCJJCCCCCJCCJJCCCCCJJJCCCCJCCJCJCJCCCJCCCJJCJJCCJCCCCCJJJJCCCCJCCCCJCCJJJCJJJJJCCCCJCJJJCJJJJJCCCCCJJCCCJJJJCJJJCCCJJJJJCCCCCJJJJJCCCCJJCCJJCCJJJCCCJJJJCCCCCJCCCJCJJJCJJJJCCJJJJCCCCJJJJJCCJJCJCCCCJJCCCCJJJCCCCCJJJCJCJCCCCJJCCJJJCCJJJJJCCCJJCCJCCCCJJJCCCJJJJCCCCCJCCJJJJCCCCCJJJCCCJJJCCCCJCCCCJJCCJJCCJJJJCCJJCCCCCCCCJJJJCCJJJJCCCCCCJCCCJJCCCCJJJJCCJJCCJJCCCCCCCCJJCCJJJJJJCJJJJJJJJJJJCCCCJJCCCCJJCCJJCCCCJJJJCCCCCCCCCCCCCCJJJJCCJJJJCCJJJJCCCCCCCCJJCCJJJJJJCCCCCCJJJJJCJJJJJJJJJJJCJCJJJJJJJJJCJJCJCJJJJJCJCJJCJJJJJJJJJJJJJJJJJJJCCJJCJJJJJJJJJJCJJJJJJJJJJCCJJJJJJJJJJJJJJJCJJCJJJJJJJJJJCJJJJCJJJJCJJCJJCJJJJJJJCCJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJCCJJJJCCCCJJJJCCCCCCCCJJJJJJCCJJCCCCJJJJJJCCJJCCJJCCCCJJCCCCJJJJJJJCJJJJCCCCCCJJCCCCCCCCCCJJJJCCJJCJJCJJJJCCCJJJCCJJCCJJCJJCJCCJJCCJCJJCJCCJCJJJCCJCJCCJJJCJCJJCCJJCJCCJCJJCJCCJCCCJCJJCJCCJJJJCCJJCCCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJJJJJJJCCJJJJCCCCJJCCJJCCCCCCCCJJJJJJJJJJCCJJJJJCJJJJJJJJCCCCCCCCCCJJCCCCCCCCCCCCJJJJJJJJJJJJCCCCJJJJCCJJCCJJJJCCCCJJJJCCCCJJJJCCCCJJJJJJJJJJCCJJJJJJCCJJJJCCCCCCCCJJJCCCJJCCCCJJCCJJJJJJJJJJCCJJJJJJCCCCCJJJJJJCCCCCCJJJJJJCCJJJJJJJCCCCCCJJJCCCCCJJJJJJCCCCCJJJJJJJJCCCCCCCCJJCCCCCCJJCCCJCJCJJJJJCJJJJJJCCCCCJJJJCCCJJJJJJCJJCJCCJJCCJCJCCJCCJCJJCCJJCJCJJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCCCCJJCCJCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCJCCJJCCJCJJCJCJCCJJCJCJCCJJCJCCJCJCJCJCJCJCJJCJCJCJCCJCJCJJCCJCJCJCJJCJCJCJCCJJCCJJCCJCJCJJCJCJCCJCJCJJCJCJCJCCJCJJCJCCJJCCJJCCJJCJCCJCJCJJCJCCJCJJCJCCJJCJCJCCJJCJCJCCJJCJCCJCJJCCJJCCJCJCJJCCJCJJCCJJCJCCJJCJCJCCJJCJJJCJCCJJCCJJCJCJCCJJCCJJCCJCJJCJCCJJCCJCJCJJCCJCJJCJCCJJCCJCJCJJCCJJCCJJCCJJCJCJCCJJCCJCJJCCJJCCJJCCJCCCJJCCJCJCJJCCJJCCCCCCCCJCCCJJJCCCCCCJCCJJJCCJCCCCCCCCCCCCCCJCJJCJCJJCCCJCCCJCCCJJJCCCCCJCJCJCCCCCCCCCCCJJJCCJCCCCJJCJCJCJCCJCCJCCCCCJCJCCCCJCJCJJJJCJCJCJJCCJCCCCCCCCJCCCCCJCCCJCCCCCCCJJJCCJCCCCCCCCCCCCCCCJCCJCCCJCJCCCCCCCJCCCCCJCCCCCCCCJCCCCCCJCCJJCCCCJJCCCCCCCJCCCJCJJJCCCCCCCCCCCCCCCCCCCCCCCCJJCCJCCCCCCCCJCCCCJJCCCCCCCCCCCCJCCJJJCJCJJJJCCCCCJJJJJCCCJJCCCJCJJCCCJJJJJCJJJJCJJJCCCCCJJCCCJJJJCCCCJJJCCCCCJJCCJJJJJCCJJJCCCCCJJCCCCJJJJJCCCCJCCJJJJJJCCJCJCCCJJJJCJJJJCCCCJJJCJCCCCJCCCCJJJCCJCCCCCJCCJJJJJCCCCJJJCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJCCCCJJCCCCCJJJCJCCCJCCJJCCJCCCCJJCCCCJJJCCCCCJJCCCCJJJJJCCCJJCCCCCJCCJCCJJJJCJJJCJJJJCCCJJJJJCCCCJJJJCCJCCCCCJCJCCCJCCCCCJJCCJCCCCJJJJJCJCJCCJJCCCCCJJJJJCCJJJCCCCJJJJJCCJJJJJJCJJCCCCJJCCJJCCCCJJCCCCCCJJCCJJJJCCJJJJCCJJCCCCCJCCJJJJCJJJJJJJCCCCJJCCJJCCJJJJJJJJCCCCCCJJCCCCCCCCCCJJJJJJCCJJJJJJJJCCJJJJCCJJCCJJJJCCJJCCJJCCJJCCCCCCCCJJCCJJCJJCJJJJJJCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJCCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCJJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCCCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJJJCJJJJJCCCJJJCJCJJCJJCCCCJJJCJCCCJCCCCCJJJJJCCCCCJJJJCCCCJJJJJCCCJJCCJJJJCCCCJJJJJCCCCCJJCJCCCJCCCCJJJJJCCJJCCCJJCCCCCJJJJCCCCCJJJJCCJJJJJCCCJCCCCCJJCJCJJJJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCCCJJJJJCCCCCCJJJJJJJJCCJCJJCJJCJJJJCCCCCCCJCCCCCCCJJJJJCCCCCCCCJJJJJJJCCCJJJJJJCCCCCCCJCCCCJJJCCCCJJJJJJCCCCCJJJJCCCCCCCCJCCJJCCCJJJJJJCCCCCJJJJCCCCCJJJJJJCCCCJJJJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJJCJCJJCJJJJJJCJJJJCCCCCJJCCJJCCCJCCJJJJJJJJCCJJCCJCCCJJJJCCCCCCCJJJCCJJCCJJJJJJCCJCJCJJCCJJJJJJJJJJCCJJJJJJCCJJJJCCCCJJJJCCCCJJJJJJCCJJJJJJCJJJCCCCJJCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCCCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCCCCJCCCJCCJCCCCCCCJCCCJCCCCCCCCJCJCJCCCCCCCJCCCJCCJCJCCCCCCCJJJCCCCCCCCCCCCJCCCJJCCCCCCCCCCCCCCJCCJCCCCCCJCJCJCJCCJCCCCJCJCCJJCJCCJJCCJJCCJJCJCCJCJCJCJJCCJCJJCJCCJJCCJJCJCJCCJJCJCCJCJCJCJCJCJJCCJJCJCCJJCCJCJCJJCCJJCJCJCJCJCJCCJJCJCJCCJJCJCCJCJJCJCJCCJJCJCJCJCJCCJJCJCJCJCJCCJJCCJCJCJJCJCJCCJJCCCCCJCCCJJJCCCJJJJCJJJJJCJJCCCCJJCCJJJJCJJJCCCCJCCCJCJCCJJJJCCCCCJJJCCCJJCCCCCJCCCCJCJJJJJCCCJCCCJJCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJCCCJJJJCCCCCCCCCCCCCJJJJJJJJCCCCJJJJJJJJCCCJJJCCJJJJJJJJJJJCCCCCCCCCCCCCJJJJJJJJCCCCCCCCCCCCCCJJCCCCCCCCCCJJJJJJJJJCCCCCCCJJJJJJJJJJJJJCCCCCCCCCCCCCCJJJJCCCCJJJCCCCJJJJJCCCJJCJJJCJJJJJCJJJCCCCJJJCJJJJCCJJJCJCCCJJJJJCCJJJJCCCJJJJCCCJJJCJJJJJCCCCJJJJJCCCCJJJJJCCJJCCCCJJCCCCCCJJCCJJJJCCCCJJCCCCJJCCCCJJJJCCCCJJCCCCCCCCCCJJCCJJJJCCJJJJCCJJJJCCJJJJJJJJCCJJCCCCCCJJJJJJJJCCJJCCJJJJCCJJJJJJCCCCCCJJCCCCJJJJJJJJCCJJCCJJJJJJJJCCJJCCJJCCCCJJJJCCJJJJCCJJJJJJCCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJJCJCCJJCJCJCCJCJCJJCJCJCCJJCCJJCCJJCCJJCCJCJJCCJJCCJJCJCCJCJJCJCCJJCCJCJCJJCCJCJJCCJJCJCCJCJJCJCCJCJCJJCCJJCCJJCCJCJCJJCJCJCCJCJJCCJJCCJCJJCJCJCJCCJCJCJJCCJCJJCCJCJJCCJJCCJCJCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCJJCJCJCJCJJJCJCJCJCJCJCJCJCCCJCJCJCJCJJCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCCJJJJJCCCCJJJJCJCJCJJJJCCCCJJJJCCJJCCCJJCCCCCJJJCCCCJJCCCJJJJCCCCJJJJJCCCJJJCCCCCJJJCJJJJJCCCJCJCCCJJJCCCCJJJCJCCCCJJJJCJJJJJCCCJJCCCJJCCJJCCCJJJCCCJJJCJJJJJCCCCCJJJCCJJCCCJJCJJJJCJJCCCCJCCCCJJJJJJJJCCCCCCJJJJJJJJCCCCJJJJJJCCCCCCJJJJJJJJCCCCJJJJJJCCJJJJJJCCCCCCJJJJJJJJCCCCJJJJJJJJCCCCJJCCCCCCCCJJCCCCJJJJJJCCJJJJCCJJJJJJJJJJCCJJCCCCCCCCJJJJCCCCJJCCCCJJJJJJJJJJJJCCCCCCJJJJCCJJCCJJJJJJJCJCJCJCCJJJCJJCJCJCJJJCCJCJJCCCCJJCJJJJJCCJJJJCCCCCCJJCCJJJJJJCJJCJJCCCJJJJJJJJCJJJJJJJCJJJCJCJCJJJJJJJCJJCCCJJJJCCCCJJJCJCCCCCCJJJJJCJCJJJJJJJJJJCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCJCCCCCCCCCCCCCJCCCCCCCCCCJCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCJJJCJJCJCJCCCCCJCCCCJJJCCCCJCCJJCCCCCCCJCJCCCCCCJJCCCCCCCCJCJCJJCJCCCCCJCCCCJJCCCJCJJCCJCJCJCCCCJJCCCJCJCCJJCJJCJJCJJJCCJCCCJJCJCCCCCCCCJCCCCJCCJCJCCJJCCJCJJCJCCJCJJCCCJCJJCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJJJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCCCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJJJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCCCJJJJJCJJCCCCJJCCJJCCCJJJJCJJCCCCJCCJJJCJJCCCCCJJJJJCJCJJCJCJJCJCCCCJCJJCCCCCJJJCCJCCJJJCCCCCJJJJCCCCJJJCCCCJJJJCJCCCJCJCJCJCJCJCJCJCJCJJCJCJCJCCCJCJCJCJCJCCJCJCJCJJJCJCJCJCJCJJCJCJCJCJJJCCCJCJCJCCJCJJJCJCJCJCCCJCJCJJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCCCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJJJJCCCCJJJJCCJCCCCCCCCCCCCCCCCCCCCCJJCCCCJJJJJJCCCCCCJJCCJJJJCCJJJJCCCCCCCCJJJJJJCCCCCJJJJJCCJJCCCCJJJJJJJJJJCCCCCCJJJJJJCCCCJJCCCCCJJJJJJJJJJJJCCCCCCCCCCJJJJJJJJJCCCCCCCJJJJJJJJJJCJJJJCCJJJJJJJCCCCCCCCCCCCCCCCJJJJJJJJJCCCCCCCCCCCCCCCJJJJJJJJJJCCCCCCCCCCCCCCJJJJJJJJJJJJJJCCCJCCJCCCCCCJJJJJJJJJJJJJCJJJJCCCJJJJCCCCCCCCCCCCJJJJJJJJJJJJCCCCCCCCCJJJJJJJJJJCCJJJJJJJJJCJJJJJJCJJJJJJJCCCCCCCJJCCCCCJJJJJJJCCCCCCCCCCJJJJJJJJCCCCCCCCCJJJCCCCCCJJJJJJJCCCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJJJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCCCJCJCJCJCJCJCJCCJCJCJCJCJCJJJCJCJCJJCJCCCJCJCJCJCJJJCJCCJJCJCCJJCCJCJCJJCCJCJCJCJJCCJJCJCJCJCCJCJJCJCJCCJJCCJJCCJJCCJJCCJCJCJCJCJJCCJJCCJCJJJCJJCJCCJCJCJCJCJJCCJJCJCCJCJCJJCCJCJJCCCCJJCCJJCJCJCJCCJCJJCJCJCJJJCJCJCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCCCJJJJCCCCJJJCCCJCCJJJCCCCJJCCCCCJJJJJCCJJJCCCCJJJJCCJJJJCCCJJJJCCJCCJJJJCCCCCJJJJCCJJJJJCCJCCCCCCCCCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCCCJCJCJCJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCJJJCCJCJJCCJJCJJCJCJJCJCCJJCCJCJJCJCCJCCJCCJJCJCCCCJJCJCCJJCCJCJJCCJJCJCCCJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCJJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJJJJJJJJCCCCCCCJJJJJJCCJJJJCCCCCCCCCJCJJJJJCCCCCCCCCJJJJJCCJJCCCJJJJJJJJCCCCCJJJJCCCCCCCCJJCCCCCCJJCCCCCCJJJJJCCCCCCCCCJJJJJCCCJJJJJJJCCCCCCJJJJJJCCCJCCCCJJCJJJJCCCCJJJCCCCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJJCCJCJJCCJJCJCJCCJJCCJCJJCJCJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCJCCJCJCJCJCJJCCJCJJCJCJCJCCJJCJCJCCJCJJCCJCJJCJCCJCJJCJCCJJCCJJCCJJCJCCJJCJCJCCJJCCJCJCJCJJCJCJCCJJCJCCJJCCJJCCJJCCJCJCJCCCCCCJCCCCCCCJCCCCCCCCCCCCCCCCCCCCJJCCCCJCCCCCCCCCCJCJCJCJCJCCCCCCCCCCCJCJCCCCCCJJCJJJCCJCJCJCCJCCJCCJCCCCCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJJJJCCCCJJJJJCCCCJJJJCCCCCJJJJJCCCCCJJJJCCCCCJCCCJJJCCJJJJJCJJJCJJJCCJJJJCJJJJCJCCCCCJCCCCCJJJCCCJJJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJCCCCCCCCCCJJCJJJJJJJJJJJJCCCCCCCCCCJJCCJCJJJCCCCCCJCCCCJJJJJJCCCCCCJJJCCCJJJCJCCCCCCCCCCJJJJJJJJJJJJCCCCCCCJJJJJJJJJJJJCCCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJCJCJCJCCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCJCJJCCJCJCJCJCJJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCCCJCJCJCJCJCJCJCJCJJCJCJCJCJCCJJJJJJJCJCJJCJJJJCCCJJJJJJJJCJJJCJJCJJJJCJJJJJCJJJCJJJJJJJJJJJJJJJJJJJJCJCCJJJCJJCJCJCCCJJJJJCJJJCCJJJCCCCJJJJJJCJCJCJJJJJJJJJCJJCJCCCJJJCCCJJJJCCJJJCJJJJJCCJJCJJJCJCJJJJJJJJJJCJJJCJCJJJJJJJJJJCCJJJJJCCJJCCJCJJJJJJJJJJCJJJCJJCJCJCJJJJCJJJCJJJJJJJJCCCJJCJCCCJJJCJCCCCJJJJJJCJJCJJJJJJJJJJJJJJCCJJCJCJJJJCCJCJJCCJCJJJJJJJJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJJJJCCJJJJCCJJCCCCCCCCJJJJCCCCCCJJJJJJJJCCCCCCCCJJCCCCCCCCCCCCJJJJJJJJJJJJJJJJCCJJJJJJCCJJJJCCJJCCCCJJCCJJJJJJCCJJCCCCJJJJJJJJJJJJCCJJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJJJCCCCJJCCJCJJCJCCJCJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJJJJJCJJJJJJCCCCJJJJJCCCCCCCCCJJCCJJCCJJJJJJJJCCCCJJJJJCJJCCJJCCJJCCJJCCJJCCCCJJJJJJJJCCCCCCCCCCCCCCJCJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCJJCCJJJCCCCCJJJCJJJCCCCCJJJCCCJJJJCJJCCJCCCCJJCCJCCCJCCJCCCJJJJCJCCCCJJCCCCJJJJJCJCCCJJCCCJJCJJJJJCCCCJJCCJJJJJCCCCJJJJJCCCCJJCCCJJJJJCCJCCCJCCCJJJCCCCCJJJCCJJCJJCCJJCCCCJJCCCCCJCJCCCCCJCJJJJJCCCCCJJJCJJCCCCJJCCCJJCCJCCCJCCCCJJJJCCCJJJJJCJJCCCCJJJJJCCCJJJJJCCCCJJJCCCJJJJJCCJCCJCCCCJJJJJCCCCCJJJJCCJJJCCCCJJJJJCCCJJJJJCCCCCJJCCJCCJJCCCCCJJJJCCCCCCJJJCCCCJJJJCCJJJJCCCJJJCJJJJJCCCJCCCCJJCCJJCCCJJJJJJJCCCCJJCCJJCCCCJJJJJJCJCCCCJJCCJJJJCCJJCCCCJCJJJCCCCCJJJJCCCCCCJJCCJJJJCCCCJJCCJJCJJCCCCJJCCCCCCJCCCJCCCCCCCCCCJCJJJCCCCJCJCCJJJCJCCCCCJCCCCCCCJCCCJCCCCCCCCCJJJCCCCCJJCCCJCCCCCCCCCCCCCJCJCCJCCJJCCCCCCCJCJCCCCCCCJCCCCCCCCJCCJJJCCCCCCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCCCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCCCJJJJCJJCCCJJCCCCCCCJCJJCCCCCJJJJJJJJCCCJJCCCCCCCCJJJJJJJJCCCCCCCCJJJCCCCJJJJCCCCCCJJJJJCCCCCJJCCCCJJJJCCCCCJJJJJJJJCCCCCCJJJJCCCJJJCCJJJJJCCCCJJJJCCCCJJCCJJJCCCJJJJJCCJJJCCCCCJJCCCJCCCCJCJJJCCCCCJJJJCJJJJCCJJJJCCCJCCCCJJJJCCCCJJJJJCCCCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJJCCCCCCCCCCCCJJJJJCCCCCCCCCCCCJJJJJJJJJJJJCCCCCCCCJJJJCCCCCJJCCCJJCJJJCCCCCCCCCCCCJJJJJJJJJCCCCCJJJCCCJCCCCCCCJJJJJJJCCCJJJCCCJJJCCCCCJCCCCCJCJCCCJJJCCCCJJCJJCJJJJJCCCJJJCCCJJJJCCCCJJJJJCCCCJJCCCCJJJCCCJJJJJCCCCJJJCCCCJCCCCJCCJJJCCJJCCCJCCCCJJCJJCJCCJJCCCCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCJJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCCCJJCJJCJJCCJCJJCCJJCJCCJJCCJJJJCJJCJCJJCCJJCJCCJJCCJCJJCCCJCJCCJCJJCJCCJCCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJJJJJCCCCCCJJCJJJJJJCCCJJJJJJCCJCCCCCCCJJJJJCCCCCCCJJJJJCJCCCCCCJJJJJCJJJJJJJCJCCCCCCCJJJCCCCJCCCJJCCCCCJJJJJCJJJJJCJCJCCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCCCCCCJCCCCCCCCCCCJJCCJJCCCCCCJJCCJJJJCCJJCCJJJJJJJJJJJJCCJJCCJJCCJJCCCCJJJJJCCCCCCCJJJJCCCCJJJJCCJJCCJJCCJJJJJJJJCCJJCCJJCCJJCCCCJJCCJJCCCCJJCCCCJJJJJJCCCCCCJJJJCCCCCCJJJJCCCCJJJJCCJJJJCCCCJJCCJJJJCCCJJJCCJJJJCCCCCJCCCJJCCCJJJJCJCCJJJJCCCJJCCJJCCCCJCCJCCCCJJJCCCCJJCJJJJCCJJJJJCJJJJCCCCJJCCCCCJJJJCCCCJJCCJCCCCJJJJCCJJJCCJJJJCCCCJJJJCCJJJJJJJJJJCCCCCCCCJJJJCCJJJJCCCCCCCCCCCCCCJJJJJCCCJJJJCJJJCCCCCCJJJJJJCCCCJJJJCCJJCCJJJJJJJJJJCCJJCCCCCCCCCCCCCCCCCCJCCCCJCCCCCCCCCCCCJJCCCCCCJJCCJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCJCCCCJCCCCCCCCCCCCCCCJCCCCCCCJCCCCCCCCCCCCCCCCCCCJCCCCCCCCJCCCCCCCCCCCJCCCJCCCCCCCCJCCCCCCCCCCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCCCJCCCCCCCCCCCCJJJJJJJJJJJCCCCCCJJJJJJCCCCCCCCJJJJJJJCCCCCCCCCJJJJJJJJJJJCCCCCCCCCCCCJJJJJJJJJJCCCCCCCCCCCCJJJJJJCCCCCCCCCJJCJJCJCJJJCCJCJJCJCCCCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJJCJJJCCCCJJCJCCCCCCCJJJCCCCJJCCCCCCJJCCCCJJCCCCJJCCCCCCJJJJCCJJCCCCCCCJJJJJJJJJJJJCCCJJJJJJCCCCJJCCCCCCCCCCCCJCJJJJJJCCCCJJJJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCJJJJJCCCCCJJJJJJCCCJCCCJJJJCCCJJJCCCJCCJJJCCCCCCJCJJJJCCCCCJCCCJJJJCCCCCCCJJCCJJCCCCJJJJJCCCCCCCJJJJCJJJJJJCCJJCJJCJCCJJJCJCJJCJCCJCCJCCJJJJCCJCCCJCJJCCJJCJCCJCJJJJCCJJCCJCJJCJCCJCJJCCJJJJCCJCJJCJCCJJCCJCJJCCJJCCCCJJCCJCJJCJCCJCJJCCJJCJCCJCCCJCJJCCJJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCJCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCJCCCCJCCCCCCCJCCCCCCCCCCCCCCCCCJCCCCJCCCCCCJCCCCCJCCCCCCCJCCCCCCJCCCCCCCCCJCCCCCCCCCCCJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJJCJJCJCCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCJCCCJJJJJJCCCCJJCCJJJJCCJJJJJJCJJJJJJJCCJJCCJJCCCCCCJJJJCCCCCCJJCCJJJJJJCCCCJCCCJJCCCCCCJJJCJJCCCCJJJJCCJJJJCCJJCJCCCCCCJJCCJJJJJJCCCCJJCCCCJJCCCCJJJJJCCCJJCCCCCCCCJJCCJJCCJJCCCCJJJJCCJJCCJJJJJCCCJJJJJCCCCJJJJJCJJJJCJJJJJJCCCCJCJJCCCCCJJCCJCJJJJJCCJJCJJCCJJCCCCJJCCCCJCCJCCCCCJCCJCCCCJCJJJCCCJJJCCCJJJCCCCJJJCCJJJJCCJCCCCCJJJJJCCCCJJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCCCJCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCCCJJJCJCJCJCJCJCCJCJCCCCCCCCCCCCCCCCJJCCJJCCCCJJJJCCCCCCCCCCJJJJJJJJCCCCCCCCJJCCCCJJCCCCJJJJJJJJCCJJCCCCCCCCJJCCCCCCCCCCCCCCJJCCCCJJJJJJJJJJCCCCCCCCCCCCCCJJJJJJCCCCCCJJJJCCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJJCJJCCJCCJJCJJJJJJJJCCJJCJJJJJCJCJCJCCJCJJCJJCCJJCCJJJJCJCJJCJJJJJCCJJCCCCJCCJCJJJJCJJCJCCJCJCCJJJJJCCCJJCJJJJJJJJCJJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCCCJCJCCCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJJJCJCJCJCJCJCJCJJCJCJCJCJCJCJJJCJCJCCJCJCJCJCJCJCJCJCJCJJCCCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCCCJCJCJCJCJCJCJCJCCJCJJCCJCJJCCJJCCJJCCJJCJCJCCJCJJCJCJCJCJCJCJCCJJCCJJCJCJCCJJCJCCJJCJCCJJCCJCJJCCJCJJCJCCJCJCJJCCJCJCJCJCJJCCJJCJCCJJCJCCJJCCJJCJCCJJCCJJCCJCJJCJCJCJCJCCJJCCJJCJCCJCJJCJCCCCCCCCCCCCCJJJJJJJJJJJJJJCCCCCJJJJJJJJJJJCCJJJJJJJJJCCCCCCCCCCCCJJJJJJCCCCCJJJCCCCJJJJCCCCCCCCCJJJCCCCCCCCCCCCCJJJJJJJJJJCJJCCCCCCJJCJJJJCCJJJCCCCCCCCCCCCJJJJJJJJCJJJCJCJJJJJJJJJJJJJJCJJJJJJJJJJJJCJJJCJJJJJCJJJJJJJJJJCJJJJJJJJCJJJCCJJJJJJJJJJJJJJCJJJJJCCJJJJJJJJJCCCCCCCCCJJJJJJJJJJJJCCCJJJJJJCCCCCCCCJJJJJJCCCCCCCCCCCCJJJJCCCCCJJJJJJJJJJJCCCCCCCCCJJJJJJJJJJJJJJCCCJJJJJJJJJCJJJJJCJJCCCCCCJJJJCCJJJJJJJJJJJJJCCCJJJJCCJJJJCCCCCJJJCCCCJJJJCCCJJCCCCCJJJJJCCCJJJJCJJJJJCCCCJJJCCCCCJJCCCCCCJJCC
+CJCCCJCCCJJCJCJCCCJJJJCJJCCCCJCJCCJJJCJJJCCCJJJCJJCJCCJCJJCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCCJJJCCCJCCJCJJCCCJJJCCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCCCJCJCJCJJJJJCJCCJJCJJCJCJCCCJCJCCCJCJCJCCJCJCJCJJCCJJCJCCCJJCJJJCCJCCJJCCCCJJJJJCJJJJCCCJCJJJCCCCCCJJJCJCCCJJCJJJCJJCJJCCCJJJJJCCJCJCCCJJJCCCCJJCJJCCJJJCCCCJCCCCJCCCCCJCCJCCJJCJCJCCCCCJJJCCJCJJCCJJJJCJJJCCJCJJJCCJCCCJJJCCCJJCJJJCCJCJCJCJCJCJJJCCCJCJCCCJCCCJCJCJJJCCCJJJCJCJCJCCJJCCCCJJCCJCJJCJCJJCJJCCJCJCJCJJJCJCJCJCJCJJCJCJCJCCCJCJCJCJCJCJJCJCJCJCJCJJCCCJJJJCJCCCJCJCCCCJJCJCCJJCJJJCJCCJJCCCCJJCCJJCJCCCJCJCJCJCJCJCJCJCJJJCCCJCJJJCJJCCCCCCCJCJJCCCCCCCJCCCJCJJJJJCJJCJJCJCCJJJJJCJJJJJCCCCCCCJJJJCCJJCJJJJJCJJCJJJCJJJJJJJJJJCJCJJCJCCJJCCJCJCCJCCJCJJCCJJJJJJCJCJCJJJJJJJJJJJCJCJCCCJJCJCCCJJJCJCCJJCJCCCJJJJCCCCJJJCCCJJJCJCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCJJCCCJJCCCJJCJJJCJJCJCCJCCCCCCJCCCCJJJJJJJJJJCCJJJJCCCCJJJJJJJJCCCCCCCJJCCCCCJJJCCCCCCCJJJJCJCJJCCCCCCJCCJCJCCJCJJJCCCCJCCJJCCJJJCCCJJCCCCJ
+JCJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCJCCCCCCCCCCCCCCCCCCCCJJCCCJCCCCCCCCCCCCCJJJJJJJJJJJJJJJCJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJCCCJCCCCCCCCCCCCCCCCCCCCCJJJCCCCCCJCCCCCCCCCCJCCCCCJCCCCCCJJJJCJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJCJJJCCCCCJCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCJJJJJCJJJJJJJJJJJJJJCJJJJJJJJJCJJJJCJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJCCCCCJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+JJCJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJCJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJCJJJCCJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJCJCJJJJJJJJJJJJCCJJJCJJJJJJJJJJJJJJJJJJJJJCJJCJJJJCJJJJJJJJJJJJJJJJJJJJJJJJCJJCJJJJJJJJCJJJJJJJJJCJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+CJJJJJJCCCJCJJJCCJJJJCCCCCCCCCJJJJCCCCCCCCJCCCCCCCJJJJJJJJCCCCCJCJJJJCJJJCCCCJJJJJCCCCCCCCJJJCCCCJJJJJJJJCCCCCCCJJJJCCCCCCCCCCJJJJJCJJJCCJJJJJJJJCCJJCCCCCCCJJJJJCCCCCCCCJJJJJJJJCCCCCCCCJJJCJCCCJJJJJJJJJJCCCCCCJJCJJJJJJCJJJJCCCCJCCCCCJJCJJCCCJCCCCCCJJJJJJJCCCCCCCCCJJJJJJJCCCCCJJCJJCCJJJCJJCCCCJCCCCJJJCJCCCCCCCCCCJCJJJJCJJJJJJJJCCCCCCCJJJJJCCCCCCCCCJJJJJJCCJJJJJJJCCCCCCCJJJJJJCCJCCCCCJJJJJCCCCJJJJJCCCCCJJJJCCCCCCJJJJCCCJJCCCCCCJCCCJJJJJJJCJJCCCCJJJJJJJJJCJCCCCCJJJJCJJCCCCCCCJJJJCJJCCCJJJJCCCJJJJJJJCCCCCCCCJJJJJCCCCCCCCCCJJJJJJJCCCCCCCCCJJJJCCCCCCJJJJCCCCCJJJJJJJJCJJCCCCCCCJJJJJJCJJCJJJJJCJCCCCCC
+CJ
+JCJCJCJCJJJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJC
+JCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJCCCCJJCJCJCJCJCCJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJJJCJCJCJJCCCCJJCJCJJJCJCJCJJJCJCJCCJCJCJCJCCCJCJCCCJCJCJCJJJCJCJJJCCCJCJCJCJCJCJCJCJJCJJJCJJCCCJJJCJJCCJCJJJCCCJJCCJJCCJCJCCCCJJJJCJJJCJCCCJCJJJJJJJJJJCCCJCCJJJCJJCCJJJCCCCCJCCJJJJJCJJJJCCCJCJJCCCCJCCJCCJJJCJCJJCJCJJCJJCCJJCJCCJCJCJCJJCJCCJJCCJJCJCJJCJJCCJCJJCJCCJCJCCCJJCCJCCJJJJJCCCCCJJJJJCCCJJJJJJJCCJJJJCJJCJJCJCJJJCCJJCJJJCCCCJJCJCJJCCCCCJJJCCCJCJCCCCJJCCCCCCJCCJCCCCCCCCCCCCCJCJJCCCCJCJJCJCJCJCJCJCJCJCJCJCJCJCCCJJCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCJCCCCCJJCJCJJJJCJCJJCJCCJCJJCCJJCJCCJJCCCCJJCJJJJCCCJCCCCCJCJJCCCCJCCJCCJCJJCCCCCCJCJCJCJJCCJCJCJJCJJJCCCCJCCCJJJJCJJJJCJCCCCJJJJJJJCJJJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJJJJCCJJJJCCCCCJCCJJJJCJJCCCCJCJCCCCCJJJJCJCCCJJJCJJJJJCCCJJCCCCJJJCCCCJJJCJCJJJCJCJJCJCJJCJJCJCCJJCCJJCCJCJCJCJJCJCJJCJCJCJCCCJCJCCCCJJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCJJCJCJCJC
+CJCJCJCJCCJCJCJCJCJCCCCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCCCJCJCCCCJCJCJCJCJJCJCJCCCJJJJCJCJJJCJJCJCJCJCJCCJCJCJCJCJJCJJJCJCJCJJCJCJCJCJJCCCJCJCJCCJCJCJCJCCJCJCJCJCJCCJJJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJJJCJCCCCJCJCJCJJCJCCCJCJCCJJJCCCJCJJCJCJCJCJCJCCJJJCJCJJCJCJCJCJCCJCJCCJJCJJCJCJCJCJCCJCJCJCJCJJCJJJCJCJCCJCCCJCJCJJCJCJCJCJJJJCJCJCJCJJCJCJCJCJCCCCCCJCCCJJCJCJCJCJCCJCJCJJJCJJCJCJCJCJCCJCJCJJJCJJCJCJCJCJC
+CCCCJJJJJJCJCCJJJJCCJJCJJJJJJJCJJJJJJJJCJJCCJJJJCCCCJJJJCJCJJCCCCCJJJJCJJCCCJJJCCCCCJJCCCJJJJJCCCCJJJJCJCJCJCCCJCJCJCJCCCJJJCJCJCJCJCJCCCJJJCJCJCJCJJCJCCJJCCJJCCCJCCCJCCCCJJJCCCCJJJJCCCJJCJCCJCJJCJCJCCJCJCJCJCJCJJCJCCJCJJCJCCJCCCJJJJCJJCJCJJCCJJJCJCCJJCJJJCCCCJJCJJCCCCJCJCJCJCJCJCJCJCJCJCJCJJJJJCCCCJJJCCJCJJJCJJCJJJJCJJCJJJCCJJCJCCCCJCJCJCJCJJJCJCJCCCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJJCCJCJJJJCJCCJJCCJCCCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCCCJCJCJJJJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCCCJJJJJJJJCCCCJJJJCCJJCCJJCCCCJJJJCCJJCCCCCCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJCCCJCJCJCJCJJJCJJCJCJCJCJCCCJCJCJCCCJCCCJCCJJCCCJJJJCCCJJCJJJCJCCJCCCCJJJJJCJJJJJCCCJCJJJCJCJCJCJCJCJCCJJCJCJCCCJJCCJCJCCJCJCJCJCJCJCJJJCJCJJCJCJCJCJCJCJCJCJCCCCJJCJCCJJJCJCCJCCJCJCJCCCJJJJJCCCJCJJCCJCJCJCJCJCCCJCJJJCJCJCJJJCJCJCJCCCJCJCJJCCJJJJJJCJJJJCJJJJJJJJJJJJJJCJJCJJJJJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCJJJJJJCJJJCCJJCJCJCJJJJCJCJCJCJJJJJJCJJJJCCJJJJCCCJJCCCJJCCJCCCCJJJJCJJCCCJCJCCJCJJJCJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJCJCJCCC
+CJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCCJJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJJJCJCJCJJJCJ
+CCCCCCCCJJCCJJCJCCCJCJCCCCCCJCCCCCCCJJCCCCCCCJCJCCCCCCJCCJCCCJCJCCJCCCCCJCCCCCCCCCJCCCJCCCCCCCCJJCJCCCCCCCJCJCCJCJCCCCJCCCCCCCCJJCCCJJCJCCCCJCJJCCCCCCCCJJCJCJCJCCCCCCCCCCCCCCCCCCJCJCJCCCCCCCCCJJCJJCCCCCCCJCJCJCCCCCJJJCCCCCCCJCCCCCCCJCCCCCCCCCCJCCCJCCCCCCCJCJCCJCCCCCCJCCCJCCCCCCCCJCCCCCJCCCCJCJCCJCCCCCJJCCCJJCJCCCCCJCCCCCCJJJCCJCCCCJJCJCCCCJCCCCCCCCCCCCJJCCCCCCCCJCJCCCCJJJCCCCCCCCJCCCJJCCCCCJCCCCCC
+JC
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJJCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCCCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJ
+JJJJCJCJCJCJJCCJCJCJ
+JJJJJJJCCJJJCJJCJCJJJJCJJCCJJJJCJJJJJCCCJCCCCJJJJJJJJJJCJJJCJJCCCCCJCCCJJCCCCCCCJCJJJJJCJJJJCJJCJJJJCCCJJJJJJJJJCCCCCCJJJJJJJJJJCCCCCJJCCCJJJJCJCCCCCCCCJJJJJJCJJJJJJJCJCCCCCCJJJJJJJCJCJCCCCCJCCCJJJJCCCCCCJJJJJJCCCCCCCCCCJJCCCCCCCCCCJCCCCCCCCCCJJJJJCJJCCCCCJJJJJJCCCCCCCJJJJJJJJJCJCCCCCJCCJJCCJJJJJJCJCCCCCCJJJCJJJJJCJCCCJCJJJCCJJJJJJJJJJCCCCCCJJJJJCCCCCJJJJJJJJCCCCCCCCJJCJJJJCCCCCCCCJJJJJJJJJCCCCCJC
+JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+CJJCJCJCJJCJCCCJJJ
+JCJCJCJCCJJCCJCJCJJCJCJCJJJCCJJCCCJCJCCJCJCJJCJCCJJCCJJCCJCJCJJCJCCCJCCJCJCJCCCJCJJCJCJCCJCJJCCJJCJCCJJCCJJCJCCJJCJCCJJCCJCJJJCJJCJCJCJCCCJJCJJCCJCJJCJCJCJCJCJCJCJJCJJJJCJCCJCJJJJCCJCJCJCJJCJJCJJCCCJCCJCJCJJCJCCJJCCJJJCJJCCJCJJCJJJCCJJCJCJCJCJCCCJCJCCJJCCCCJCJJCCCJCCJCJJCCJCJCJCJJCCJCJJCCJJCCCJCCJJCCJJCCJCJCJJCJCJCJCCJJCCJCJJCJCCCCJCJJCCJCJCJCJCJCJJCJCCJJJJCJCJCJCCJJCJCJCJCJCCJJJCJCCJCCJCJCJJCCJCJ
+CCCCJJJJCCJJJJJJJJJCCCCCCCCCCCCJJJJJCJCCCCCJJJJCCCCCCCCCJCJCCCCCCCCCCJJJJJJJJCCCCCJJCJJJJJCCCCJCCCCCCCCCJJJJJJCCCCCJJCJCCCCCCCJJJJJJJJJJCJCJCJJJJJJJCCCCJJCCCCCCCCCJJJJJJCCCCJCCCJCJCJCCJJJJJJJJJCCCCCCCCJJJJJJJCJJCCJCCCCCJJJCJJJJCJJCCCCCCJCCJJCJCCCCCCJJJJCCCCJJJJJCJJJJJJJCCCJCCCCCCJJJJJCCCCCCJCJJCCJCJJCCCCCCCCJJCJJCCCCCJCJJJJJJCCJJJJJCCCJCCCJCJJJCJJCJJJJCCCJJJJCCCCCJCCCCJJJJJJJCCCJCCCCCCCJJCJCJJJCJJ
+JCCCJCCC
+CCCCCCCCJJJJCCJJJJJJCCJJCCJJJJJJJJJJJJJJCCCCCCCCCCJJJJJJCCJJJJCCCCJJJJJCJJCCCCJJCJCCCJJJCCCCJJJJJJCCCCJJJJCCJJJJCCJJCJCCCCJJCJJJJJJJCCJJCCCCCCJJCCJJCCJJCCJJCCJJCCCCJJCCCCCCCCJJCCCCJJJJCCJJJJJJJJJJJJCCJJCCCCCCCCJJJJJJCJJJCCCCCCJJJCJJCCJJCCCCJJCCJJCCCJJJCCCCJJCCCCCJCCCCJJJJCCJJCCJJJJJJCCCCCCCCCCCCCCJJJJCCCCJCCCJJJJCCJJCJCCCCJJJJJCCCJJJJCJJJJJJJCCJCCCCCJJJJJJCJJJCCCCJJCCCCJJJJCJCCCCCCCCCCCCCCJJCCJJCCJJJJCCJJJJJJJJCCCJCCCCJJCCJJJJJJJJCCCCJJCCJJJJJJJJJJJJCCCCCCJJCCJJCCJJCCJJJJJJJJCCJJJJJJCCCCJJJCJJCCCJCCCCCCCCCCCCJJCCCCJJJCCCJJJJJCJJCCCCJJCCCCCCCCCCJJCCJCJCJJJJJJCCCCJJCCJJCCJJCCCCCCJJJJJJCCCCJCJJJJ
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCJJJJCCJCCCCJJJ
+CJCJCJJCJCJCJCCJJCJCJCJJCJJCJCCJCJCJCJCJJJJJJCJCCJJJJCCJJCCJCJJCCJJCJJJJJCJJCCCJCJJCCCCJJCJCJCCJCJCJJCCCCJJCJCJCJCCJCJJCJCCJCCCJCCCJCJCJCJJCCJJCCJCJCCJJJJJJJJJCJCJCJCJJJCCCJCJCJCCCJCJCJJJJJCCJCJJJJJCJJCJCJCJCCCJCCJCJCJCJCCJCJCCJCJJCCJCCJCJCCJCJCJCCCJJCJCJCJJJCCJCJCJJCJCCCJCCJCJCJCJJCJCCJCJJCCJJCJCCJJCJCJCJCJCCJCJCCCJCJCJJCJCCCJCJCJCJCCJCCJCCJJCJCCJJJJCCJJCJCCJCJCJJJCCCJCJCJCJCCCJJCJCJCCCCJCCJJJCCJ
+CJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJC
+CJCJCJJJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJJJCJCJCJCJCJCCCJCCCJCJJJJJCCCJCJJJJJCJCJCJCJCJCJCJCJCJJJCCCJCJCJJJCJJJCJCJCJCJCCCCCJCJCJJJCJCJJJCJCJCJCJCJCJCJCJCJCJJJCCCJCJCJCCCJCJCJCJCJCJCJCJJCJJCJCJCJCJCJCJCJCJCJJJCJCJJJCJCJCJCCCJCJCJCJCJCCCJCJCCCJCJCJCJCJCJCJCJCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJJJCCCJCJCJCJCCCJCJCJCJCJJJCJCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJ
+CCCCCCCCCJJCCCCCJCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCJCCCCCCCCCCCCCJCCCCCCCCCCCCCCCJCCCCCCCCCCCCJCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCJCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCJCCJCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCJCCJCCCCCCCCCCCCC
+CJJCJCJCJCCJCJCJCJJCCJCJJCCJJCJCJCJCJCCJJCCJCJCJJCCJCJJCCJJCCJJCJCJCJCJCCJCJCJCJJCJCJCCJJCJCJCJCCJCJCJJCCJCJJCJCJCJCJCJCJCJCCJJCCJJCJCCJCJCJCJJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCCCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJJCJJCCJJCJJJJJJJCCJJCCCCCCCCCCJJCCCJCCJJJJCCCCCCJJJJJJCCJJCCJCCCCCJJJJCCJJCCJJJJJJCCCCJJCCCCCCJJJJJJJJCJCCCCCCJJJJCCJJCCCJJCJJCCJJJJJJCCJJCCJJCCCCCCCCCCJJJCJJJJJJJJCCJJJJJJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJCJCJCJCJCJCJCJJJCJCJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJCJJJJCJCCJJJJJCCCJJCJJC
+JCJCJCJCJCJCJCJCCCJJJCJCJCCCJJJCJCJJCCCCCCCCJJCCJCCJCCCJCCJJJCCCCCCJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCCJJCJCCJJJJJCJJCJCCJCJJCCJJCJCCJCCCJCCJJCJJCJCJJJCCJCCCJJCCJJCCJCCCJCJCJCJCJCJCJCJCJJCJCCCJCJCJCJJJCJCJCCCJJCCCJCCJCJCCCCCCJCJCCJJJJCJJCCCJJCJJJCJCCCJCCCJJJJCCJJCCCJCJJJCCCCJCCJCCCJJCCJJJCCCJJJCCJJJJCJJCCJCCJJJJCJCJJJJCCCJCCCCCCJJCJJJJCCCJJJJJCCCCJJCJJJJCJJJJCCJJJJJCCJCJJJJCCJJCCCCCCCCJJJJCCCCCCCJCCCCJJCCJJJJCCCJJJJCCCJJCJJJCJJJCCJCCCCJJJCCCCJJJJCCJJJCJCJJJJCCJJJJJCJJJJCJCCCCCCCCCJJCCCCJCJJCCCCJJJCJJJCCCJCJCJJCCJCJJCCJCCJCJJCCCCJJJCJCJJCCJJCCJCCJCCJJJJCCJCCCCJJJCCJJJJJCCCCCJJCCCJCCCCCJCJJJCCCJCCJCJCCCCJJJCCJJCCCCJCJJJJJCCCJJJJJJCCCJCCCJJCCCJCCCJCJJJCCCJCCJJJCCJJCJCJCJCJCJCJCJCJCJCCCJCJJJCJCJCJCJCJCJCJJCCJCJCJCCCJJJJCCJJCJJJJJJCJCJJCCJJJJJCJCJCJJCCJCJJCJCCJCJJJCJJCCJJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCCCCCCCJJJCJJJCJCJCJCCJCCCJJJCJJCCCCCJCJJCCCCCJCJJCJCJJJCCCCJCCJCCJCJJCCJJCCJJJJJJCJJCJJJJJJJJJJJJJJJJJJJJCJCJJJCCJCJCJJCJCJCCJCCJCJCCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJJJ
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCCCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJCCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCJJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJJCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJCCJCCJJCCJCJJCCJJCJCCJJCJJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJCCCJJCJCCJJCCJCJJCJCJJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJC
+JCJCJCJJJCJJJCCJCCCJJCCJJCCJCJJCJCJCJCCCJJCJCCJCJCJCJCJCCJJCJCJCCJJCJCCJCJCJJCCJCJCJCJCJJCCJJCCCJCJJJJCJCJJCJCCJCJCJJCJCCJCJCJCCJCJJCJCCCJCJJCCCCCCJCJJCCJJJJCJCCJJCJCJCCJJCJCCJCJJCJCJCCJCJCJJCCJJCCJCJJJCJJJJCJCJCCJJCCJCJCJCCJCJCJJJCCJCJJCJCCJJCJCJJCJJCCJJCJCCJCJCJCJJJJCCCCCCJJJJCJCCCCJCJCCJCJCJJCJCJCJCCCCJCCJJCCJCJJCCCJCCCJCJCCJCCCJCCJCCJJJCJJJCJJCJJJCCJJCCJCJJCJJJCJCCJCJCJJCCJCJJCJJJCJCCJJCCJCJJC
+JCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJJJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCCCJCJCCCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCCCCJJJJJCCCJJJCCCCCJJCCCCJJJJCCCJJJJJCJJJCCCJJJJJCCCCCJJJCCCCCJJJJCJJJJCCCCCJJJJJCCJJCCCJJCCCJJCCCJCJJCJJJCCCJJJJCCJJJJJCJJCCCJJJJCCCCJJJJCCJJCJJJJJJCJJJJJCCJJJJJCCCCJJJJCCJJJCCCJJJJCCCCJJJCCCJCJJJJCCCCJJJJJCJCCCJJJJCCCJJJJCCCJCJJJCJJJJJCCCCCCJJJJCCCCJCJJCCJJJJJCCCCCJJJJJCCCJCCCCCJJCJJJCCCCCJJCCJJJCCCJCJJCCJJJJCCCJJCCCCJCCCCJCCCCCJCCJJJJCCCJJJCCCCJJJJJCCCCCJJJCCCCJJJJJCJCCJJJJCCCJJJJCCJJJCCJCCJCJJJCCCJJJCCCCCJJJCJJJCCCCCJJJJJCCCCCJJJJCCCJJJCJJCCCCJJCCCJJJJCCCJJCCCJJCCCCJJJJCJCCJJJJCCJJCCJJJJJCCJJCJCCCJJJJJCJCCCCJJJJJCCCCCJJCCCCCJJJJCCCJJCCCCJCCCCCJJJJJCCCCCJJCCJJCCJJJJCCJJJJCJJCCJJJCCCJCCCJJJJJCCCJJCJCCCCCJJJJJCJCJJCCCCCJJCCCCCJJJCCJJJJJCCJJCJCJJCCCJCCJJCJJCCCJJJCCCJJCCCCCJJJJJCJJJJCCCCCJJJJCCJCCCCCJCCCCJJJJJCCCCJCJJCJJJJJCJJJJJCCCCJJJCCCJJJCCJJJJCJJCCCCJCCCCJJCJJCCCCCJJCCCCCJJJCCCCCJJCJCCJCCCCCJJJJCCCCJJJJCCCJJJJJCCCJJJCCCCCJJJJCCCCJJJJCCCJCCCCJJJJJCCJJCCJJJJJCCCJJJCCJJJJJCJJJJCCCJJJJJCCCCCJJJJCCJJCCCJJCJCJJJCCJJJCJCCCCCJJJJJCCCCJCJCJJJCCJCCCJJJJCCJCJJJJJCCJJJJJCCJCJJCCJJJCCCCCJJJCCCCCJJJCCCCCJCCCCCJCJCJCJJJCCCCJJJCCCCCJJCCCCCJJJJJCCCCJJJJCCCCJJJJCCCJJJJJJCJCCCCJJCCCJCCCCCJJJCCJJJJCCCCJJJJCCCJJJCJJCJJJCCJCCJJJJJCJJJJJCCCJJJJJCCCCJCCJJJJJCJCCCCJCJJJCJCCCCCJJCCCCJJJCCJJCCCJCCCCJCCJJCJJCJJCJJJCJJJJCCCCJJJJCCCCJCJJCJJJJJCCCCJCCJJCJCCCCJJCJJCCJJJJJCJJJJCCCJJCCCJJJJJCCCCJJJCCCCJJJJJCCCJJCJJJCJCCCCCJJCJJCCCCCJJCCJJJJCCCJJJJJCJJJJJCCCJJJCCCJJCJCCCCJCCCCJJJCCCCJJJJCCJJJCCJJJJJCCCCCJJJJJCCCCJJJJCJJCJCCCCJJJJCCCCJJJJCJJJCCJJJJJCCCCJCJJCCJJJJJCJJJJJCCCCCJCCCJJJJCCCCCJJCCCJJJCCJJCCCJJJJJCJJCCJJJJCCCCJJJJJCCCCJJCJJCCCCJCCCCCJJCCJJJCCCJCJJJCCJJJCCJJCJCJJCCJCCCCCJJJJCCCCJJCCJCCJJJJCCCCJJJJCCCCCJCCCJJJJCCJJJCCCCCJJJCCCCCJJJCCJCJJJJCCCCCJCCJJJJCJJJJCJJCCCCCJJJJJCCCCCJJJJJCCJJJJCCCCJJJJJCCCCCCJJJCCCJJJJCCJJJCCCJCCCJJJCCCCJJJJJCCCCJJJCCCCCJCCCJJJJCCJJCCCCCJJJJCCCCJJJCCCCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJJJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJJJCJCJCJCJJCCCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCJCCJCJCJCJJJCJCJCJCJCJJCJCCCJCCCJCJCJJJCJCCJCJCJCJCJCJCJCJCJCJJCJCJJJCJCJCJCJCJCJCCJCJCJCJCJCCCJJJCJCJJCJCJJJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCCJCJCCCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCCJCJCCCJCJCJCCCJCJCCJCJCJJJCJCJCJJJCJCJJCJCJCJCJCJCJCJCJCJCJJCJCCCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCCJCJCJCCCJCCCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJJJJJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCCCJCCCCJCCCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCCCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCCCJCJCJCJCJCJCJCJCJJCJJJCJCJCJCJCJCJCJCCJJJCJJJCJCJCJCJCJJJJCJCJCJCJCCCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJJJCJCJCJJCCCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCCCCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJJJCJCJCJCJCJCJCJCJJCJCJCJJJCJCJCJCCCJCCJCJCJCJCJCJCJCJJJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCCCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCCCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJJJCJJCJCJCJCJCJCCCJCJCJCCJCCCJCJCJCJCJCJJJCJJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJCJCJJJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCCCJCJCJCJCCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCCCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCCCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJJJJJJJJJJJJCJCCCCCCCCCCCCCJJCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJCCJCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJCCCCCCCJJJCCCCCCCCCCCCCCCCCCCCCCCJCCCCCJJJJJJJJJJJCJCCCCCCJJJJJJJJJCJJJJJJJJJJJJJJCCCCCCCCCCCCCCJJJJJJJJJJJCCCCCJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCJCCJJJJJJJJJJJJJJCCCCCCJJJCCCJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCJJCCCCCCCCCCCCJCCCCCCCCCCJJJJJJJJJJCJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCJCCCCCCCJJJJJJJJJJJJJJJJJJJJJCJJJJJCCCCCCCCCCCCJCCCCCCCCCCCCCCCJJJJJJJJJCCCCJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJCCJJJJJJJJJJJCCJCCCCCCCCCCCCCCCCCCCCCCCCCJJCCCCCCCJJJJJJJJJJJJJJJCCCCCCCCJJCJJJJJCJJJJJJJJJJJJJCCCCCCCCCCCJJCCCCCCCCCCJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJCCCCCCCCCCCCCCCCCCJCCCCCCCCJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCJJJJJJJJJJJJCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCJJJJJJJJJJJJCCCCCCCCJJJJJJJJJJJJJJJJCJJJCCCCCCCJCCCCCCCJJJJJJJJCCCCCJCCCCCCJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCJJJJJJJJJCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJCJJJJJJCCCCCCCCCCCCCCCJCCCJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCJJJJJJJJJJJJCCCCCCJCCCCJJJJJJJJJJJJJJJJJJJJJJCCJCCCCCJCCCCCCCCCJJJJJCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCJCCCCJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJCJJJJJJJCJJJJJJJJJJCCCCCCCCCJCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJCCCCCJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCJJJJJJJCCCCCCCCCCCCCCCCCCCCCCJJJJCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCJCCCCCCCJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCJJJCCCCCCCCCCCCCJCCCJJJJJCCCCCCCJCCJCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCJCCCCCCJCJJJJJJCJJJJJCCCCCJJJCCJJJJJCJJJJJCCCJJJJCCJCJJJJJCCCCJJJJJCCJJJJJCCCCCJJJCCCCJCCCJJJJJCCCCJJJCCCCCJCCCCJJJJJCCCJJJJCJJJCCCCCJCCJJJJJCCCJJCCJJJCCCCCJJJCCCCCJJJCCCJJJJCCCCJJJJCJCCCJJCJCCCCCJJJJJCJCCCCCJJJCCCCJJCJJJJCCCJJCCJJJJCCCCJJJJJCCCJCCJJJJJCJCJJJCCJJJJCJCCJJJJJCCCJJJJJCCJCJJCCCCCJJJJCCJJCCCJJCCCJJJCCCCCJJJJCJJCCJJJJCCCJJCCCJJJCCCCCCJCCCJCCJJJJJCCJCJJJJJCCCCCJJCCCCJJJJJCCCCCJJJJCCCJCJJJJCCCCJJJJJJCJCJJJJCCCCJJJJJCCCCCJCCCJJJCJJJJCJJCCCJJCCCCCJJJCCCCJJJCJCCJCCCCCJJJJJCCJJJJJCCCJJJCCCJJJJCCJJJJJCCJJJJCCCJJJJCJJJJJCCCCJJJCCCJJJJCCJJJJCCCCCJJJJCJJJCCCCJCCCCCJJJJJCCCJJJJCCCCCJJJCCCJJJJCCCCJJJCJJCJJCCCCJCCJJJJJCCCJJJJCCCJJCJCJCJCCCCCJJJJJCCCJJJJJCCCJJJJJCCCCJJCCJJJJJCJJJJCJCCJJJJCCJJJCJCCJJJCCJJCCCCJJJCJJJCCCCCJCCCCJJJJJCCJJCJJCCJJJCJJJJCCCJJJCCJCCJJCCCCJCCCCCJJJJCCJJCCCCJJJJCCCCJJJCCJJJCCCCCJJCCCCJJCJJCCCJJJJCJJJJCJCJJJCCCCCJJJJCCCJJJCCCCJJJCCCCJJCCCCJJJJJCCCJJJCCCCCJJJJCCJJJJJCJJJJJCCCCJJJJCCCCCJJCJJCCCCJJJCJJJJCCCJJJCCJJJCCCCJJJCJCCCJJJJJCCJJJJJCJJCCCCJJCJCCCJCCJJCCCCCJCJCCCCJJCCJJJJJJCCJJJJJCCCCCJCCCJJJJJCCCJJJCCCJJJJJCCJJCCCCCCJCCCJJJJCJJJCCCCJJJJCCCJCCCCJCCCJJJCJJJJCCJJJJJCCJJCCCJJJCCCJJCCJJCCCCJJJCCCCJJJJCCCCCCJJJJJCJJJJCCCCCJJJJJCCCCCJJJCJJJCCJJJCJJJJCCJJJJCJJCCCCCJJJJCCCJCCCJJJJCJJJCCCCCJJJCCCCCJCJCJJJJJCCJJCJJCCCCJJJCCCCCCJJCCCCJJJJCJJJJJCCJJJCCCJJJCCCJJJJCCJJCJJCCCCJJCCCJCJJJJJCCCCCJJJCJCCJJCJJJJJCCCJJJCCCCJJJJJCCCCJJJJCCJJCCJJCCCCCCJJCCCCCJJJJJCCCCJJCCCCCJCJCCCCJJJCJCJJJCCCJJJJCCCJJJJJCCJJJCCCCJJCCCCJJJJCJJJCCJJJCCJJJJCCCCCJCCCCCJJJJCCCCCJJCJJCCJJCCJCCCCCJCCJCCCCJJCCCCCJJJJCCCCCJJCCCCJJCCCJJJJCCJJCCJJJCCJJJCJJJCCJJJJCCCJJJJJCCJJJJCCJJCJCCJJJJCJJCCCJCCCCCCCJJJJJCCCJJJJJJCCCJJJCCCCCCCCCJJJCCJCCCJJJCJJJJJCCJCJJJJCCJJCCCJJJCCJJJJCCJJJJCCCCJJCJJJJJCCCCCJJCCCCCJCCCCJJJJCJJJCCCCJCCCCJCCCJJJCCCCCJCCCCCJCCCCCJJJJJCCCCJJJJCCCCCCCJCCCCCCCCCCCCCCCCJJJJJJJCCCJCCCCCCCCCCCCCCJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJCJCCCJJJJJJJJCCCCCCCCCCJJCCCCCCCCCCCCCCJCCJJJJJJCCCJJJJJJJJCCCCCCCCCCCCJJJJJJJJJJJJJJCCCCCJJJJJJJJJJJJJCCCCCCCCCCCCCCCJJJJCJJJJJJJJJCJCCCCCCJCCCCCCCJJJJJJJJCCCCCCCCCCCCCCCJCJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCJJJJJJCCCCJJCCCCCCJJJJJJJJJJCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJCCCCCJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJCCCCCCCCCCCCCJJJJJJCCCJJJJJJJJJJJJJJJJCJJJCCCCCCJJJJJJJJJJJJJJJJCCCCCCCCJCCCCCCCCCCCCJJJJJJJJJJJJCCCCJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCJCJJJJJJJJJJJJJJCCCCCJJJJJJJJJJJJJJCCCCJCCCCCCJJJJJJCJJJJJJJJJJJJJCCCCCCCCJJJJJJJJJCCCCCCCCCJJJJJJJJJJJJJCCCCJJJJJJJCCCCCCCJJCCJJJJJJJJJJCJJJJJJCCCCCCCCCCCCCCCCCCCCCCJJJJJCCCCCCCJJJCCCCCCCCCCCJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCJCCJJJJJJJJJJJJJJCCCCCJJJJJJJJJJJJJJCJJJJJJJCCCCCCCCCCCCJJJJJJJJJJJJJJCCCJJJJJJJJJJJCCCCCCCCJJJJJJJJJJJJJJJJJJJJJCCCCCCCJJJJJJJJJJCCJJJCJJJJJJJJJJJJJJJJCJJCCCCCCJJJJJJJJJJJJJJJJJJJJCCJJJJJJCJJJJJJJJJJJJCCCCCCCCCCCCCCCCCJJJCCCJCCJJCCJJJJJJCJCCCCCCCCCCJJJJJJJJJJCCCCJJJJJJCCCCCCJJJJCCCCJJCCJJCCJJJJCCJJJJCCJJJJJJJJJJCCCCCCCCJJJJJJJJJJJJJCJJJJCJJJCCCCJJJJCCJJCCJJCCCCCJJJJJJJCCCCCCJJJJCCCCJJJJJJCCJJCCJJCCJJJJCCJJJJCCJJJCJCJJCCCCJJJJCCCCJJJJJCJJCCJJCCCCJJCCCCCCJJJJJJJJJJJJJJJJCCCCCCJJCCJJCCJJCCCCJJJJJJCCJJJJCCJJJJJJCCJJCCCCJJCCCCJJCCCCJJCCCJJJCCJJCJJJJJJJJJCCJJCCCCJJJCCCCCJJJJJJJJCCCCCCJJCCCCCCCCCCJCJJJJJJCCCCCCCCJJCCJJJJCCCCCCJJCCCCCJCCCCCCJJCCJJCCJJJJJJJJJJCCCCJCCCCCJCJJCCJJJJJJCCCJCCCCCCCCCCCCCCCCCCCCJJJJCCJJCCJJCCJJCCCCJJJJCCJJJJCCCCJJCCCCCCCCCCJJJJCCJJCCJJJJJJJJJJCJJJCCCCCCCCJJJJCCCJJJCCCCCCCCCCCCCCCCJJCCJJCCCJJJCCJJCCCCJJCCJJCCCCCCJJJJJJJJCCJJCJCCCCCCCCCCJJJJJJJJCCCCCCJJCCCCCCJJCCJJJJJJCCJJCCJJCCJJCJJJCCCCCCJJJJJJJJJJCCCCCCCCJJCCCCCCJJJJJJCCCCJJCCJJCCJJCCCCJJCCCCCCJJJCJJCCCCJJJJJJJJCCCCJJJJJJCCJJJJCCCCJJJJCCCCCCJJJJJJJJCCJJJJJJJJJJCCJJJJJJCCCCCCJJJJCCCJCCJJJJCCCCJJJJJJCCCCJJJJCCJJJJJJCCCCJJCCCCCCJJJJJJCCCCCCJJCCJJJJJJJJJJCCJJJJJJJJCCCCCCCCJJCCCCJJCCCCCCJJJJCCCCJJJJCCCCJCCJJJJJCCCCCCCCCCJJCCCCJJJJJJJJJJJJCJJJCCJJJJJJCCCCCCJJCCJJCCCCJJCCJJCCJJJJJJJJCJJJJJJJJJJJJJJJCCCCCCJJCCCCJCJJJJJJCCJJCJJJJJJCJJCCCCJJJJJJJJCCCCJJJJJJCCCCCCJJCCJJCCCCCCCCJJCCCCJJJJJJCCCCCCJJCCJJJJCCJJJJCCCCJJCCJJCCJJJJCCJJCCCCCCCCCCJJCCJJCCJJJJCCJJCJJJCCCCJJCCCCJJJJCCCCCCCCCCCCJJCCJJJJJJCCCCJJCCJJJJJJCCCCJJJJJJJJJJJJJJCCJJCCJJCCCCJJJJJJJJJJJJCCCCJJCCCCCJJJJJCCCCJJJJJJCCJJCCJJJJCCCCCCCCJJJJCCJJCCJJCCCCJJJJJJJJCCJJCCCCJJJJCCCJCCJJJJJJJJCJCCCCCCJJJJCCCCJJCCJJJJJJCCCCCCCCCCCCCCCCCCCCJJJJCCJJCCJJJJJJCCJJCCJCJJCCJJJJJCCCCCJJJJCCJJCCCCCCCCCCJJCCJJJJJJJJJJCJJJJJCCJJCCJCJJCCCCJJCCJJCCCCJJJJJJJJCCJJJJCCCCJJJJCCCCJJCCCCCCJJCCJJJJJJJJJJJJJJJJJJJJJJCCJJCCCCJJCCJJCCCCJJJJJJCCCCCCCCCCJJCCCCJJCCCCCCJJCCCCCCJJJJJJCCJJCCCCJJCCJJJJJJCCJCCJJCJCCJCJJCJCCJCJJCJCJCCJCJJCCJJCJCCJJCJCCJJCCJJCCJJCCJCJJCCJCJCJCJJJCJCJJCJCJCCJCJJCJCJCJCJCJCJCCJCJCJJCJCCJJJCJCJCJCJJCCJJCCJCJCJCJJCJCCJCJJCCJJCCJJCCJCJJCCJCJCJCJCJJCJCCJCJJCJCJCJCJCJCJCCJCJCJJCJCJCJCCJJCCJCJCJJCJCCJCJJJJCCJCJCJJCJCCJJCCJCJCJCJJCJCJCJCJCJCJCJCCJCJCCCJJCCJJCJCCJJCCJJCCJCJJCCJJCCJJCJCJCJCJCJCJCCJCJCCCJCJJCCJCJJCJCCJJCCJJCJCCJJCJCCJCJCJJJJCCJCJJCCJCJCJCJJCCJJCCJJCCJJCJCJCJCJCJCCJCJJCJCJCCJCJCJCJJCJCCJCJCJJCJCCJCJJCCJCJJCCJCJCJCJJCJCCJJCJCJCJCCJCJJCCJCJCJJCCJJCJCJCJCJCCJCJJJCJCJJCCJJCJCJCJCCJCJCJJCJCCJJCCJJCCJJCCJCJCJCJJCJCCJJCCJJCJCJCJCCJJCCJCJJCCJJCCJCJJCJCCJJCCJJCCJCJCJJCJCJCJCJCCJCJJCJCCJJCJCJCJCCJCJJCCJCJJCJCJCJCCJCJJCJCJCJCJCJCJCCJJCJCJCCJCJCJJCJCCJCJCJJCJCJCCCJJJCCJCJJCJCJCCCCJCJJCCJJCJCJCJCCJCJCJJCCJCJJCCJCJCJCJCJJCJCJCCJCJCJJCCJJCJCCJCJJCJJJCJCJCJCCJJCCJJCCJCJCCCJJCCJJCCJJCJCCJCJCJCJCJJCJCJCJCCJJCJCJCCJJCCJJCCJJCCJJCCJCJJCJCCJCJJCCCCJCCCJJCJCCJJCJCJCCJJCCJJCJCCJJCJCCJCJJCJCJCCJCJJCCJCJCJCJCJJCCJJCCJCJCJCJJCJCCCCJCJCJCJCJJCJCCJCJCJCJJCCJJCCJJCCCJCJCCJCJCJCJCJJCCJCJCJCJCJCJJCCCJCJCCJJCCJJJCJJCCJJCJCJCCJCJJCJCCJJCJCCJJCJCCJCJCJCJCJCJJJCJJCCJJCCJJCCJJCCJJCJCCJJCJCCJCJJCJCJCCJCJCJJCJCJCCJJCJCCJJCCJCJCJJCCJJCCJJCJCJCJCCJCJJCJCCJCJCJCJCJCJJCCJCJCJCJJCCJJCCJCJJCJCJCJCCJJCCJJCJCJCJCCJCJCJCJCJJCCJJCJCJCCJJCJCJCCJJCCJCJCJCJJCCJJCCJCJCJJCJCCJCJJCJCJCCJJCCJJCCJJCCJCJJCJCCJCJCJCCCCJCJCJCJCJCJCJCCJJCJCJCCJJCCJJCJCCJCJCJJCJCCJJCCJCJJCJCCJCJJCJCCJCJJCJCJCJCJCCJJCJCCJJCJCCJJCCJJCCJCJJCCJCJJCCJJCCJJCJCCJCJCJCJJCCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCJCJCCCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCCCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCCCJCCCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJJJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCCCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJJJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCCCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCCCJCJJJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCCCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJJJCJCJCJCJCJCJCJJCJCCCJCJCJCJCJCJCJCCJCJCJCCCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCCCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJJJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJJJJCJCJCCCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCCCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJJJCJCJCJ
+JJJJCCCCJJJJJJJJCCJJCCCCCCCJJJCCJJCJCCCCCCJJJCJJJJCCCCCJCCJJCCJJJJJJJCJJCCJJJJCJCJJJCCJJJJJJCCCCJJJJJJCCJJCCJJCCJJCCCCCCCJCCJJCCCCJCCCCCCCJJJCCCCCJJJJCCCCJJCCCCJCJJCJCCJJJCJJCCJJCCCCJJCJCCCCJJCJJJJJJJCCJJJCJJJJJCJJJJJJCJJJJJJCCCCCCJCCJCCCCCCCCCCCJJJJJJJJJJCCCCCCJJJJJJCCCJCCJJJJJJCCJCJJCCJJJJCCJCJJCJCCCCJCCJCJJJCCJJCCCCCJJCJJJJJCCJCCCCCCCCJJCCJJCCCCCCCCCCJJJJCCCJCCCJCCCCCCCCCCCCCCCCJJJJCCCCJJCCJJCC
+CJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJJJCJJJCJCJCJCJCJCJCJCJJJCJCJJJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCCCJCJ
+CCJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJJJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCCJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJJJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCCCJJCJCCJCJJCCJJJJCCJCJJCJCCJJCCJCJJCCJCCJCCJJCCJCJJCJCCJCJJCCJJCJCCJ
+JCJJJCCJCJJCCJCC
+JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+CJJCJCCJJCCJCCJCJCCJJCJCJCJCJCJCCJCJJJJCJCCJJCJCCJJCJCCCJCCJCJCJCJCCJCJCCJCJJCJJCJJCCCJCCCJCJJJCJJJCJCJCJCJCJCJCJCJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCJJJJCJJJJJCJCCJJCCCCJCCJJJJJJCJJJCCJJCJCCJJCCJCJCCJJJJCJJCCJCJJJJCCCJCCJCJJCJCCJCCCCCJJJCCJCCCCJJJCCCCJJJCCCCJCCJJCJCCCJJCCCCCJJCCCJJCJCJCJJJJJCCJCCJCCJCCJCCCCCCCCCJJCCCCCCJJCCJJJJJJJJCCCCJJCCJJCCJJCCJJJCJCJJCCJJJCJJJCCCJCCJCCCJJJCCJJJCJJJCJCJJJJCCJJJJJCJJJJCJCJJJJCJJJJJJJJJCCJJCJCCJJCJJCJJCJCCJCJJCCJJCJCCJCCCJCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJCJJJCJCCCJCCJCJCJCJCJCJCJCJJJJJJJJJJCCJCJJJJCJJJCJJJCCCCCCCCJJJCJJJCCCCJJJJCCCCJCCCCJCJJJCCJCCCCCJJJJJJJJJCCJJCCCCCJJJCCJJJJCJJCJCCJJCCJCJJCJCCJCJJCCJJCCCCCCCCCCCCCCCJCCCCJCCJCCCCCJCCCCJCCJCCJCCCCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCJCCCCJJCCJCCCCCCCCCCCJCCCCCJJJJCCCCCJCCJJCJCCCCCJJJJCCJJJCJJJJCJCCCJJJJCJCCCJCJJCJCCJJCJJCJJCJCCJCJJCCJJCJCCJCCCJCJJCCJJCCCJCJJCCCCCJCCCCJJJJJCCCCJJJJCJCJJJJJCCJCCJCCCJJJJCJJCJCCJJCCCJJJCJCCJCJJCCCCCJCCCJJJCCCJCJCCCCJCCCCJJJJCCCCJCCJCJCJJCJJJJCC
+JCCJJCJCJCJJJCJCCJCJCJCJJCJCCJJCCJJCJCJCJJCJCJCJJCCJCJCJJCCJCCCJJCCJCJJCJCJCCJCJCJCJCJCJCJCCCJCJCJJCCCCJCJCJJCCJCJCJCCCJJCCJJCCJCJJCJCCJJCJCJCJCCJCJJCJCCJJCCCCJJCJCJJCJCJJCCJCJJCCJCJJCCJCJJCJCJCJCCJCJCJCJCJCJCJCJJCCJJCCCCJJCJCCJCJCJJCCJCJCJCJJCCJJCCJJJJCCJJJJCCCCJJCCJJCCCCJCJCJCJJCCJJCCCCJJCJCCJCJCJJCCJCJJCJCJCCJCJCJJCCJJCJCJCCJJJCJCJJCJCCJCJCJJCCJJCJCJCCJJCJCJCJCCJCJJCCJCCCJJJCJCJJCCJCJCJCJJJJCCJJCCJJCJCCJJCJJJCJCJCJCCJCJJJJCCJCJJCCJCJCJCJJCCJJCJCJCJCJCCJCJCJCJJCJCJCJCCJCJJCCJJCJCJCCJJCJCJJCJJCJCJCCJJCCJJCCJCJJCCJJCCJCJJCJCCJCJJCCJCJJCCJJCJCCJCJCJCJJCJCJJCJJCJCCJCCJCJCJCJCJCJCJCJCCJCJJCCJCCCJ
+JJJCCJCCCJCJJCJJCJJCJCCJCJJCJCJJCJJCCCCJCJJCJCJCCJJCCJJCJCJCJCJCJCCJCJJCJCCJCJCJJCCJCJCJCJCCCJCCJCJCCCJCCCJJCJCCCJCJCCCJCJJCCJJCCJCJJCJCJCJCCJJCCJCJJCJCJCCJJCCCJCJCCJCJJCCJJCJCCJJCCJJCCJCJCJCJJCCJJCJCCJJCJCJJCJJCCJCJCJCCCJCJJCJCJJJCCJJCJCCJJCJCJJJJJCJCJCCJJCJCJCJJCJCCJCCJCJCJCJCJCJJCJJCJJCJJCJCJJCJCCCJCJCCJCJCCJCJCJCCJCJCJCJCJJCJCJCJCCJJCCJJCJCJCJCCJCJCJJCCJCJJCJCCJJJJCJCJJJJCJJCJCCJCJCJCJCJCCCJJC
+JCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJCJCCCCJJJJCCJJJJJCCJJJCJJJCJCCCCCJJCCCJJJJCCJJJJCCCCCJJCCCCJJCCCCJJJJJJCCCCJJCCCCJJCCCCCCJJJJJCJJCCJJJJJJCCCCJJJJJJCCCCCCCJCCCCJJJJCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCCCCJCCJJJCCCCJJJCJCJJJCCJJCCJCJCCJJJCCCJJCJJJCCCCCCJJCCCJJCJJJJJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCCCJCJCJJJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJJCJJJCCCJJJJCCCCCJJJJCJCCCJJJJCCCCJJJJJCCJJJCCCCCJCCJJJCJCCJCJJJJJJJCCCJJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJJCJCCCCCJJJJCCJJJJCCJJJJCCJJJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCCJJJCJCJCJCJCJCJCJCJCJCCCJCJCJJCJCJCJCJJJCJCJCJCJCJJJCJCCCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCCCJJCCJJJCJJCJCCJJCCJCCJCJCCJCCJJCJCJCJJJJCCJJJCCCJJJCCJCCCJCCJCCJJJCCCJCJJCCCJCJCCCJJCCJCJJCJJJCCJCJCJCJCJCJCJCJCJCJCJCCCJCJJJJCJCCCJCJCJCJJJCJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCJCJJJCCJCJCCCCCJCJJCCJJCJCCJCCCJCJJCCJJJJCCCCJCJJCCJJCCJCCJJCJJCCJJCCCJJCJCCJCJJJCCJCJJJJJCJJJJCCCJJJJJCJJCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJ
+CJCJJJCJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCCCJCJCJCJJCJCJCJCJCCJCJCJCJJJJCJCJCJCJCCJCJCJCJCJJCCCJCJCJJCJJJCJCCCJJCJCCCJCJCJJCJCCCJCJCCJCJCJCJCCJCJCJCJCCJCJCJCJCJCCJCJCJCJCCJCJCCCJJJJCCCJCCCCCJJCJCJCJCJJCJCJCJJJJJJCJCJJJCCJCJCJCJCJCJJJJCJCCCJCCJCJJJCJCJJCJCJCJCJCCCCJJJCCCJJCJCJCJCCCCJCJCJJJCJJCCCJCJCJCCJCJCCJJCJJCJCJCJCJCCJCJCJCJCJJCJCJCJCJCCJCJJJCJCJJJJCJCJCJCCJJJCJCJCCJCJCJCJCJCCJCJCJCJCJJCJCJCJCJC
+CJCJCJCJCJCJCJCJCJCJJCCCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCCCJCJCCJCJCJCJCJJJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJJJJJCCCJJCJCJCJCJCJCJCJCJCJCCCCJJJCJCJCJCJCJCJCJJCJCJCJJJCJCJJJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCCCJCJJJCCCJCJCJCJCJJJJCJCJCCJJCJCJCJCJCCJCCCJCJCJCJCJCJCJCJJCJCJCJJCCJCJCJCJCJCCJCJCJCJCJCJCCCJCJCJJCCCCCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJJJJJCJJCJCJCJCCCJCJCJCJCJCCJCJCJCJCJCJCJCCJJCJJCJCJCJCJCCCJJJJJCJJCJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJJCJCJCJCJCCCCCJCJCJCJJCJCJCJCJCJCJJJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCCCJC
+JCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJC
+CJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJ
+CJCJCJCJCJCJCJJJCJCCCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCCCJCCJJCJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCCCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCJCJCCCJCJCJCJCJCCCJCJCJJJCJCJCJCJCJCJCJJCCJCJCJCJCCCJJJCJCJCJCJCJCJCJCJJJJCCCCCCCCCJJJJJJJJJJJJJCCCCCCCCCJJJJJJJCCCCCJJJJJJCCCCCCCJJJJJJJJCJJCCCCCJJJJJJJJJJCCCCCCCCJJJJJJCCCCCCCCCJJJJJJCCCCCJJJCCCCCCCCCCCJJJJJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCCJCJJCJCCCCCJCCJJCCCJCCJCCCJCJJCJCJJJJJCCCJCJCCCCCCJCJCCJCCCJCCJJJCCJCCCJJJJJJCCCJJJJJCJCJCJCCJCJJCCCCCCCCCJCJJJCCCCCJCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCCCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCJCJC
+JCJCJCJCJCJCJCJCJCCJJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJJJCJJJCJCJCJCJCJCJCJJJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCCJCJCJJJCCJJCJCCCCCJCJCJJJCCCJCJCJJJCCCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJJJCJCJCJCJCJCJCJJJCJCCCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCCJJCJCJCJC
+JJJJCCCJJJJJJJCCCJCCJJCCJJJJCCCJJJCJJJCCCJJJJJCJCJCCCCCCJCJJJJJJJCJJCJCCJJCJCCCCJCJJCCCCCCJCCCCCCCJCJJCJCJJJJCJCCCCJJJJCCJJCJCCJCJCJCJJCJJJJJCCCJJCCJJCCCJCJCCCJCJCJCJJJJJJCCCCJJCJJJJJCJCJJJCJCJCCJCCCJCCJCJJJCJJCJCJCCCJJCJJJJCJJJJJJCCCJJJCJJCJJCJJCJJCCCCJJJCCCCCJJJJCJCJJJCCJJJCJCJJCJCJCCJCJJCCCCJCJCJJCJJJCCJCCJCCCJJCJCCCCCJCJJJJJCJJCJJJJJCJJCCCCJCCJJCJJCJCJCJJJCCJCJJCCCCJCCJJJJJCJJCJCJCJJJCCJCJCCCC
+CJCJCJJJCJJCJCJCJCJCCJJJCCCJCCJCJCJCJCJCCJJJCJCJCJJCJCJCJCJCJJCJJJCJCJJCJCJCJCJCCJCJCJCJCJJCJCCCJCCCCJCJCJCCCJJCJCCCCCJCCCCJCJCJCJJJJCJCJCJCCJCJJCCJCJJCJCJCJCJJCJCJCJCJCJJJJCJCJJJCCJCCCJCJCJJCJCJCJCJCCJCJCJCCCJJCJCJCJCJCCJCCCJJJCJJCJCJCJCJCJJCJCJJJCJJCJCJCJCJCCJCJCJCJCJJCJCJCCCCCCJCJCJCJCJJJJCJJJCJCCJCJCJCJCCCCCCJCJJJCCJCJCJCCJJJCJCJCJCJCCJCJCJCJCCJCJCJCJCJCCJCCCJJJJJJCCCJCJJJCCJCJCJCJCJJCJCJJJCJC
+JJ
+JCCCCJJCJCCCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJCCCJCJCJCJCJCJCCCJCJCJJJCJCCCJCJCJCJCJCJCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJCJCJCJCJJJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJJJCJCCCJCJCJCJJJCJCJCJCJCJJJCJCJCJCJCJC
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJ
+JJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJJJCJCJCJCCCJCJCJCJCJCJCJCJJJJJJJCJCJCJCJCCJJCJCJCJCJJJCCCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCCCJCJCJCJCJCJCCJJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJCJCJCJCJCCCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJJJJJCCJJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCCCJCJCJCJJJCJCJCJCCCJCJCJJJCJCJCJCJCJCJCJCCCJCJJJCJJJCJCCCJCJCJCJJJJJCJCJCJCCCJCJCJCJCJCJCJCC
+CJJJJCJJJJJJCJJJJCJJJCJJJCJJJCJJJCJJJJJJJJJJJJCCJJJJJJJJCJCJJJJJCJCJJJJJJCJCJCJJJJJCJJCJJJCJJJCJJJJCCJCCJJJJJJJJJJJCCJJCJJJJJJJJCCCJJJJJJJJJCJCJJJJJCCJJJJJJJJJJCCJJJJCCCCJJJJJJJJCJJJCCCJCJJJJJJJJJCJJJJJJJCJJJJJJJJJJCCJJJJCJJJJCJJJJCJCJJJJJCJJJJJJCJJJJCJJJJJJJCJCJCJCJJJJJJJJCJJCCJJJJJJJCJCJJJCJJJJJJJJCJJJCCJJCJCCJJJJJJJCJJCJJJJJJCJJCJCJJJJJCCCCJJJJJJJCCJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJ
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJC
+CJJJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJJJCJCJCCJCJJJCJCJCJCJCJCJCJJCJCJCJJJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJJJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCCCJCCJCJCJCJCJCCCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJJJCJCJCJCJCJCJCJCCJCJCJCJJJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJJJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCCCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCCCJCJJCJCJCJCJCJCJCJCJJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJJJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJJJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJJJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJJJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCCCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCJJJCJCJCJCJCJCCCJCJJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJJJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJCJCJJCCCJCJCJCJCJCJCJCJCCJJJCJCJCJCJCJCJCJCCJCJCJCJCJCJCJCJJJCJCCJCJCJCJCJCJJJCJCJCJJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCCJJJJCCCCCCCCCCCCCCCCJJCCJJCCJJCCJJJJJJJJJJJJJJCCCCJJJJJJCJJJJJCCCCJJJJJJCCCCJJCCJJCCCCJJCCJJCCJJCCJJCCJJCCJJJJJJJJJJCCJJCCCCJJCCJJJJCCCCCCCCCCCCJJJJJJCCCCCCCCJJJJCCJJJJCCJJJJCCCCJJCCJJJJCCJJCCCCJJCCCCJJJJCCCCCCCCJJJJJJJJCCCCJJJJJJJJJJCCCCJJCCCCJJCCJJCCCCJCCCCCJJCCJJCCCCCCJJCCCCJJCCCCCCCCCCJJJJJJJJJJCCCCJJJJCCCCJJCCJCJJJJJJCCJJCCJJJJCCJJJJJJJJCCCCJJCCJJJJCCJJJJCCJJJJJJJJJJJJCCCCCCCCJJJCCCJJJJCCCCJJCCJJCCJJJJCCCCJJJJCCJJCCCCCCJJCCCCCCJJJJJJJJJJCCJJCCJCJJJJJJJJJJJJJJJJJCJJJCJJCCCCCCCCJJJJJJJJCCJJJJJJJJCCJJCCCCCCCCCCCCCCCCJJJJCCCCCCJJCCCCCCJJCCCCJJCCCCJJCCJJCCJJCCCCCCCCJJCCCCCCCCCJJJCCCCJJCCCCCCJJCCJJCCJJJJJJJJCCCCJJJJJJJJJJJJCCJJCCJJJJCJJJCCJJCCCCJJCCCCJJCCCCJJJJJJCCJJJJJJCCCCJJJJCCJJJCCCCCCCJJJJJJCCCCCJCCJJCCCCJJJJJJCCJCJJJJJCCCCCCCJJCCJJCCCCJJCCJJJJJCCCCCCCJJJJCCCCCCJJJJCCJJCCJJCCJJJJCCCCCCCCJJJJCCCCJJCCCCJJJJCCCCJCCCCCCCCCCCCCCCCJJJCCCCCJJJJJJJJJJJCCCCJJCCJJCCCCCCCCJJJCCCCCCCCCCCJJJJCCJJCCCCJJCCCCCJCCCCCCJJJJJJCCJJCCCCCCCCCCCCCCJJCCCCJJCCJJCCJJJJCJJJCCJJJJCCJJJJCCCCJJJJCCCCCCCCCCJJCCJJJJCCCCJJJJCCCCCCJJJJCCCCCCJJCCCCCCJJCCJJCCCCJJJJCCCCCCJJJJCCCCJJCCCCJJCCJJCCJJCCCCJJCCJJJJCCJJCCCJJJJCCCJJJJCJJJCCCCJJCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCJCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJCCCJCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJCJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJCCCCCCCJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJCJJJJJJJJJJJJJJJJCJJJJJCJJJJJJJCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJCCCCCCCCCCJCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCJCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJCJJJJJJJJJJCCCCCCCCJCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJCCCCCCCCCCJJJJJCJJJJJJJCJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCJJJJCCCCJCCCCCCCCCCJCCCCCCJCCCCCCCCCJJJJCJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJCCCCCCCJJJJJJJCCCJCJJJJJJJJJJJJJJJJJJJJJCCCCCJJJJJJJJJJJJJJJJCCCCCCCJCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJCCJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJCCCCCCCCCCCCCCJCCCCCCCCCJJCJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCJJCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJCCCCCCCJCCCCCCCCCCJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJCJJJCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCJCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCJJJCCCCCCCCCCCCCCCCCJCJJJJJCCCCCCCCCCJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCJJJJJJJJJJJJJJJJCCCCCJCCCJCCCJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCJJJJJCJJCCCCCJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCJJJJCCCCCJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJCJJJJJJJJJJCJJJJJJJCCCJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJCJJCJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCJJCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCJJJCJJCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJCJJJJJJJJJJCCCCCCCCCCCCCCCCJJJJJJJJCCCCCCCCJCCCCJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJCJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCJJCCJCCCCCCCCCCCCCCCCCCCCCCCJJCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJJJJJCCCCCCCCCCJJJJJJCJCJJJJJJJJJJJJJCCCCJJJJJJJJJJJJCJCCCCCCCCJCCCCCJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCJJJJJJJJJJJCCCCJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCJCJCCCJJJJJJJJJJJJJJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJJJJJJJJJJJCCCCCCCCCCCCCCJJJJJJJJJCJJJJJJJJJJJCCJJCJJJJJJJJCCJJJJJJJJJCCCCCCCJJCCCCCCCCJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJCCJJJJJJJJJJJCCCJCCJCCCCJJJCCJCCCCJJCJCCCCCJJCCJCCCJJJJCCCCJJJJCCJCJCCCJJJJCCCCCJCJJJJJCCCCJJJJCJJJJCCCJJJJCCJJCCCCJJJJCCCJJJJJCCCCJJJCCCJJJJJCJCCCJJJJCCCJCJJCJJJJCJJCCCCJCJJJJCCJJJJJCCCCCJJCCCCCJJJCCCJJJCCCCJCJCCCCJJJJCCCCCJJJCCJJCJCCCJJJJJCCCCJJJJJCCCJJJJCJCCJCCCCJJJCCCCCCCCCCCJJJJCCCCCJJJJCCJJCJJJJCCCJJJJJCJJJJCCCCJJCJCJJJJCCJJCCCJJJCCJJJJCCJCJJCCJCCCCJJJCCCCJCCCCJJJCCCCJCCJJJJCCCCJJJJJCCJJCCCJCCCCJJJCCCJJCCCCJJJCCJCCCJJCCJJJJCJCCJJJJCCCJJJCCCCCJJCCJJJJJCCCCJCJCCJJJJJCCCCCJJCCJJCCJJJCCCCCJJJJCCCCCJJJCCJJJJJCCCCCJJJJJCCCJJJJJCCJCCCCJJJJCCJJJJJCCJCCCJJJJCJJJJJCJCCCCJJJCCCJCCJJCCCCCJJCJCCJCCCCCJJJJCCCCCJJCJCCCJJCCCCJJJCCJJJJCCCCCJJCCCJCCCCJJCCCJCCCJJJCCCCCJJJJJCCCCJCJJJJCCCCCJJJCJJJJCCCCJJJJJCCJJJCCCJJJJJCCCJJCCCCJJJJCCCCCJJJCCCCCJCCCJJCCCCCJJJCCCCJJJJJCCCCCJJJJCCJJJJCCCCCJJJCCCCCJCCJCCJJCCCCCJCCCJJJJCCCCCJJJCCCJJJCJCCCJJJCCJJJJJCCCCJJJCJCCCCJCCCJJCJJCCCCCJJJCCCCJJCCCJJCCJJJJCCCCCJJJJJCCCCCJJCCJJJJCCCCCJCCCJJJCCCCCJJJJJCCJJCCCCJJJJJCCCCJCJJJJJCCJCCJJJJJCCJJJJJCCCJJJJJCJJJCJJJJJCCCJJJCCCCJCCCJJJJCJCCCJJCCCCCJCJJJCJCCCJJJCJJCCJJJJJCCCJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCCCJCJJCCJJCJCCJCJJCJCCJJCCJCCJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJJCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCJJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJCCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJCCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJCCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCCCJCJJCCJJCJJCJCCJCJCCJJCCJJJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCCJCCJJCJCCJJCCJCJJCJCCJCJJJCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJJJCCJCJJCCJJJJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJCCCJCJJCJCCJCJJCJJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJCCCJJCJCCJCJJCJCJJJCCJCJJCCJCCJCCJJCCJCJJCJCCJCCJCCJJCJCCJCJJCJCJJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCCCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCCJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCCCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCCCJJCJCCJJCCJCJJCCJJCJCCCJCCJCJJCJCCJCJCCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJJCCCJJJJCCCCJJCJJCCCCCJJJJJCJJJJJCCJJJCCCJCCCJJJJCCCJJJJCCCCJCCCJJJJCCJJJJJCCJCCCCCJJCJJJCCJCCCCJJCCCJJJCJCCCCCJCCJJJJJCCCCCJCCJCCJJJJJCCJJJJJCCCJJCCJCCJJJJJCCJCCCCCCCCCJJJCCCCCJJJJCCCCCJCCCJJJCCCJCCJJJCCCJCCCJJJJCCCJJCCCCJCJJCCCCJJJCCCJJJCCCJJJJJCCCJCCJJJJCCCJJJJCCCJJJCCCCCJJJCCCCCJJJCCCJCJJJCCCCCJJCCCCJJJJJCCJJCCCCCJCCJJJJJCCCCJCCCCCJCCCJCCCCCJJJJCCJCJCJCJCCCJJCCJJJJJCCCJJJJJCCCCJJCJJJCCCJJJJCJJJCCCJCJJCCCCCJCCCCCJCJJJJCCJCCCCCJJJCCJJCJJJJJCCCCCJJJJCCCCJJJJCCCJCCJJJCCCJJJCCCCJJCCJJJJJCCCJJJJCCCCCJCCCCJJJCCJJJCCCJJCCCJJJJCCJJJJJCJCJJCCCJJCCCCCJJJJCCJJCJCCCCCJJJJCCCCCJJJJCCCJJJCCCCCJJJJJCJJJJJCJJJCCCCCCCCJJCCCCCJJCJCCJJJJCJJJJJJCCJJJJCCJJJCJJCCCCCJJJJJCCCJJJJJCCCCCJJCCCCJJJJCCJCCCCJJJJJCCJJJJCCJJJJCJJJJJCJJJCCCCCJJJJJCJJJJJCJJJJJCCCCCJJJCCJJJJJCCCCJCCJJJJJCJCCCJCCCCCJCJCJJCCCCJJJJJCCJJJCCJJCCCJJCJJJJJCCCJJJJCCJJJCCCJJCCCJJJCCCCJJCCCJJCCCJJCJCCCCJJJCCCCCJJJCCJCJJJJCCCCJJCCCCJJCCCCCJJJCJJJCCJJJCCCCCCJCJJCJCCCCCJJJJJCCJJCCCCJJJJCCCCCJJJJCCCCJJJJCCCCJJJJCCCCCJJJJCCCJJCCCCJCCCCJJJJCJJJCCCJCCCJCCCCJJCCCCCJJJCCJJJJJCJJCCCJJJJCCCJCCCJCJCCJJCCJJCCCJJJJCJJCCCCCJJCCCCJCCCCJJJCCJJCCCCJJCJCJJJCCCCCJJJCCJJJJJCCJJJJJCCCJJJCCCJCCCCCJCJJJJCCCCJJJJJCJJCCCCJJJJJCJCCCCJJJCCCCJJJCJJJJJCCCJJJJCCJCCCJJJJCJJCCCJJJJCCJJJJJCCJJJCCJJJJJJJJJJCCCCJCCCJJCCCJJCCJJJCCCJJJJJCCCJCCCCCJJJCJJCJCJJJCCJJJJJCCCCCJJJJJCCCCJJJJCJCJJJCCCCJJJJJCJCCCCCJJJJCJJJCCCCCJJJJJCCCCCJCCCCJJJJJCCJJJJJCJJJJCJCJJCCCCJJJJJCCJJJJJCCCJJJCJJJCCCCCJJJCCCJJJJJJCCCCJJCCCCJJJCCCCCJJJCCCJJJJCCCJCJJJJCJJJJCCJJJJJCCCJJCCCCCJJJJCCJJCCCCJJCCCJCCCCJJJJJCCCJCCCCCJCCCJJCCJJJJCCCJCCJCCJJCCCCCJJCJCCCCJJJJCCJJCCCCCJJJCCCCCJJJJCCJJJJJCCCCJCJCCCCCJCCJJJJCCCJJCCCJJJCCJJJJCJCCCCJJCCCCJJCCJCCCCCJJJCCCJJCJJCCCCJJJCJJCCCJJJJJCJJJJJCCCJJCCJJJJJCJJJJCCCCJJJJCCJJCJJJJJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJCCCJCJCJCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCCCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCCCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJJJCJCJCJCJCJCCCJJJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCCCJJJJCCCCJJJJCJCCCJJJJCCJJCCCCJJJCCJJJJCCCJJJJJCCCJCJJJJJJJJJCJJCCCCCJJCCJJJCCCCJJJJJCCCJJJJJCJJJJCCJCJJJCCJJCCCJCCCCCJJCJCJJCCCCCJCJJJJJJCCJCJJCCCJJJJCCCCJJJJJCCJJJJCCCCJCCCJJJJCCCCJJJCCCCJCCJJJJJCCCCCJCCCCCJJCCCCCJJJJCCCCJJJJJCCJJJCJJCCCJJJJJCCCCJCCCCCJCCCCJJCCCCCJJJJCCCCCJJCCJJJJCCCCJJJJJCCCCCJJJJJCCJCCCCCJJJJCCCCCJJCCCJJCJJJCJJJJCJJJCCJCCCJJJCCCCJJCCCCCJJJCCCCCJJJJCCCCCCJJJJCCCCCJJJCCCJJJJJCCCJJCCCJJCCCJJJCJJJJJCCCJJJJCCCCCJJJCCCJJJJJCCJJJJCCCCCJJCCJJCCCCCJJJCCJCCCCCJCJCJJJJCCCCCCJJJCJJJJCJJJJJCCCJCJCCJJJJCCCCCJJCCJCCJJJCJJCCJJJCCCCJJJJJCJCCCCJJJJCCCCJJCCCCJJJJJCCCCJJJJCCCJCCJJCCCCCJJJJCCCCJJJJCCCCJJCJJJJJCCCCJJJCCJJJCCJJJJCCJJJCJJJJCJJJCCCCJJJJCCCJCJJCJCJJJJCJJJCCCCCJCCJJJJJCCCJCCJJJJJCCCCJJJCCCJJCCJCCJCCCCJJCJCCJJJJCCJJJJJCJCCCCJJJJJCJJJCCCCCJJCCCCCJJJJJJJJJCCJJJJCCCJJJCCCCJJJCCJCCCJCJJJCCJCJJJJJCCJJCJJCCCCJJJJCCCCJJJJCCCJJJCCCJJCCCCCJJCCJJCCCCJJJJJCCJCCCJJCCCCJCCJCCJJJJCCJCJJJCCCJJJCCJJJJCJJJJJCCCCJJJJJCJJCCCJJJJCJJJJJCCCCCJJJJCCCCJJJJCCCCCJJJJCJJCCCCCJJCJCCJCCCCCCCJJJCCCCJJCCCJJJCCCJJJJCCJJCCCCCJCCCCJJCCCCJCCCCJJJJCCCJJCCCCCJJJCCCCCJJCCCCJJJJCCJJJJJCJJCCJJJJCCJCCJJJJJCJJJJJCCCCCJJJJJCCCJJCCCCJJJJJCCJCCCCJJCJJJJCCJJJCCCCJJJJJCJCCJJCCCJJJJJCJJCCCJJCCCCJCCCCJJJJCJJJCCCCJJJCCCCJCJJJJJCCCCJJJJCCCCJJJJCCJJJCCJJJJCCCCCJJJJJCJJJCCCJJJCJJCCJCCJJJCCCCJJJJJJCCCCJCCCCCJJJJJCCCJJJCJCJJJJCCJJCCCCJCJCCCJJJJJCCCJJCJJJJCCJCJJJCCCCCJJJJJCCCCJJJCJJJJCJCCJJJJJCCCJJJCCCCJJCCCJCCCCCJJJCCCCCJJJJCCCJJJJCCCJJJCCCJJCCJJJCCCCCJJJJCJCCJCCJJJCCCJJJJJCCJJJJCCJJJJCCCCCJJJJJCCCCCJJJJCCCJJJCCCCJJJCJJJCCCJJCCCCJJCJCJJCCCCJJJJCCCCCJCCCJCJJJJCCCCJJJJCCJJJCCCCJCCCJJJCJCCJCJJJJJCJCCCCCJJJCJJJCJJJJJCCCCCJJJCCJJJJJCCCCCJJJJCCJCCCCJJJCCJCCJJJJCCCCJJJJJCJCCCCJJJJCCJCCCJCCCCJJJJJCCCCJJJJCCJJJCCCJJJCCCCCJCCCCJJJJJCCCCJJJCJJJJJCJJJJCCCCCJJJJCJJJJCCCJJJJCCCCJJJCCCCCJJCCCCCJCCJJCCJJJJJCCJCCCJJCCJJJJCJCCCCCJJJJCCCJJCCCCCJCCJJCJJJJJCJJJJJCCJJJJJCCCCCJJJCCCCCJJCJJCCCCCJJJCCCCJJCCCCCJJJJCCJCCJJJCJCJJJCCJJJJCCCCCJJCCJJJCCCJJJJJCCCCJJJJJCCCCJJCJJJJJCCCJJJJCCCJJJJCCCCCJCJJCCCJJCJJJJJCCJCCCCCJCCCJJCJCCCJJCCCJCJJJJCCCCCJJCCCCCJCCCCCJCCJJJJCCCJJJJJCCCCCJJJCCCCCJCCCCJJJJCCCJJJJJCCCCJCCJJCCJJJJCCJJJJCCJJJJCCCJJCCCCJJJCCJJJJCCJJJJJCCCJJJCCCCCJJCJJJJJCJJCJCJJJCCCCJJCCCJJJCJJCCCJJJCJJJCCCCJCCCCJJJJCCJCCCJJCCCCJJJJJCJJJJJCCCCJJJJCJJJJJCCCCJJCJJCCCCCJJJJJCCCCCJJJJJCCJJJJJCCCCCJJJJCJJCCCJJCCCCCJCCCCJJCCCJJCCJJJCCCJCCJJCCCCJJCCJJJJCCCCJJCCJJJJCCJJCCCJJJJCCCCJJJCCCJJJJJCJJJJCJJJCCJCCCCCJJJJCJJJJCCJCCCJJCCJJJJCCCCCCJJCJJJJCCCCCJJJJCJJJJJCCCCCJJJCCJJCCJJJJCCCJCJCCCJJJCCCCCJJJJCCJJJJJCCJCJCCJCJJJCCCCCJJJJCCCJJJJCCCCCJJCCCCCJCCCJJJJCJJJJCCCCCJJCJJCCCJCJJJJCJJCCCCJJJCCCCJJCCCCCJJCCCCJJJJCCCCJJCJJJJCJJJCCCCJJJCCCCCJJJCCCCJJCCCCCJJJJJCCJJJCJJJCCCCJJJJJCCCCJJJJCCJJJCJJCCJJJJCCCCJJCCCCCJJJJJCCCCCJJJJJCCJCCCCJJJCJJJJCCJCCCJJCCCCCCCCJJJJCCJJCCCCJJCCJJJJJJJJJJJJJJCCCCJJJJJJJJCCJJJJJJCCCCJJCCCCJJCCJJCCCCJJJJJCJJCCJJJJJJCCCCCCCCCCCCCCJJCCJJJJCCJJJJCCCCCCCCCCCCJJJJCJCCJJCCCCJJJJJJJJJJCJJCCCJJCCCCJJCCJJCCCCJJCCJJCCCCCCJJCCCCJJJJJJJJCCJJCCCCJJCCCCJJCCCJCCJJCCJJJJJJCCCCCCCCJJJJCCJJCCCCJJCCJJJJJJCCCCJJCCCCCCJJCCCCCCCCCCJJJJJJJJCCJJJJCCJJJJCCCJJJCCJJJJJJCCJJCCJJJJJJCCCCJJJJJJCCJJJJJJJJCCCCJJJJCCCCJJJJCCCCJJJJJJCCJJJJCCCCCCCCJJCCCCCCCCJJJJCCCCCCCCCCCCCCJJJJCCCCCCCCJJCCJJJJCCCCJJCJJJJJJJJCJJCCCCJJCCCCJJJJJJJJCCJJJJJJJJJJCCCCJCJJCCCCCCCCJJJJCCCCCCJJCCJJJJJJJJCCJJJJJJCCJJCCJJJJCCJJJJJJCCJJJJJJCCJJCCJJJJCCCCJJCCCCJJJJJCCCJJJJJJJJJJCCJJJJCCCCJJCCCCJJJJCCJJCCJJCCCCCCJJJJJJJJJJJJCCCCJJJJJJJJCCCCJJCCCCJJJJJCJJCCJJJJJJCCJJJJJCJJJJJJCCJJJJCCJJJJCJCCCCCCJJCCJJJJCCJJJJCCCCCCJJJJCCJJCCCCCCJCJJJJCCJJJJJJJJJJJJCCCCJJJJJJCCCCCCCCJCJJCCCCCCJJJJJJJJCCCCJJJJJJCCCCJJJJCCJJJJJJJCCCJJCCCCJJCCCCJJCCJJJJJJCCCCCCCCJJJJCCJJCCJJJJCCJJCCCCCCCCCCCCCCCCCCCCJJCCCCJJCCCCCCJJJJJJCCCCCCJJCCJJJJJJJJJJJJJJCCJJJJCJJJJJJJCCJJJJCJJJCCJJJJJJJJJJCCCCCCCCJJJJCCCCCCJJCCJJJJCCCCJJCCCCJJCCCCCCCCCCCCCCJJJJJJJJJJJJCCCCJJCCJJJJCCCCJJJJCCCCJJCCCCCCJJJJJJJJCCJJCCCCJCJJJJCCJJJJCCJJJJCCCCCCJJCCJJCCCCCCCCJJCCCCCCCCJJCCJJCCJCJJCCCJJJJJCCCCCCCCJJJJJJJJJJJJJJCJJJJJJJCCJJJJJJJJJJCCCCCCJCJJCCCCJJCCJJJJJJCCCCCCCCCCJJJJJJCCJJCCJJCCJJCCJJCCJJJJCCJJCCCCJJJJJJCCCCJJJJCCCCCCJJJJCCCCCCJJCCJJJJJJJJCCCCCCJJCCCCCCCCCCJJJJJCCCCCJJJJCCJJCCCCJCJJJJCCCCCCJJJJCCJJJJJJCCCCCCJJJJJJJJCCJJJJCCCCCCCCCCJJCCJJJCCCJJJJJJJJCCCCCCCCCCCCJJCCCCCCJJCCJJCCCCCCCCJJJJJJJCJJJJCCCCJJCCCCJJJJCCCCCCJJJJJJJJJJCCJJJJCCCCCCCCJJCCJJJJJJCCCCCCCCJJCCJJCCJJCCJJCCCCJJCJCCJJJJCCCCJJJJCCCCJJJJJJJJCCCCJJJJJCJJJJJJCCJJCCJJCCJJJJJJJJJJCCJJJJJJCCCCCCCCJJJJJJCCJJCCJJCCJJCCCCJJCCJJJJCJJJCCJJCCJJJJJJCJJJJJCCCCCCJJCCCCJJCCCCCCJJCCCCJJCCCCJJJJJJCCCCJJCCCCCCCCCCCCJJCCJJJJCCCCCCCCJJJJJJJJJJCCCCCCJJCCJJJJJCJJCCJJJJCCJJCCCCCJCCJJCCJJCCCCCCCCJJJJJJCCCCJJCCJJCCCCCCJJCCCCCCCCJJCCJJCCCCCCCCJJCCCCJJJJJJCCJJCCCCJJJJCCCCJJJJJJCCCCJJJJCCCCCCCCCCJJCCCCJJCCCCJJCCCCCCCJCCCCCJJJCCCJCCJJCCCCCCJJCCCCJJCCJJCCJJCCJJJJCCJJJJCCJJJJJJJJCCCCJJCCJJCCCCCCCJCCJJJJJJCJJJJJCJCCCJJJCCJJJJJJCCJJCCJJCCCJCCJJJJJCCJJJJJCCCCCJJCCCJJJJCJJJJJCCCJCJCCCCJJJJCCJJJJCCCJJJCCCCCJJJCCCCJJJJCCCCCJJJJJCCCCJJJJJCCCJJJJJCCJJCCCJJJJCCCCCJJCCCCCJJJCJCCJJJJJCCCCJJJJJCCJJJJCJJJJJCCCJJJJJCCJJCCCCJJCJJJJJCJCCJJCCCCCCCCCCJJJJCCJJJJCCCCJJJJCCCCJCCCCCJJCJJJJCJCCCCJJJCCCCCJJJJJCCJCCCJJJJCCCJJJJJCCJJJJCCCCJJJJJCCJJJJCCJJCCCCCJJJJCJJJJCCCJJJJCJJJCJJJCJCCCCJCCCJJJJCCCCCJJJCCJJCCJCCCCCJCJJJJJCCCJJJJJCCJJCCCCCCJJCCCJJJCJJJJJCCCJJCCCCCJCCCCCJJJJJCJJJCCJJJJJCCJJJJJJCJJJJCCJJCJJJJCCCCCJCJCCJJJJCCCCJJJJJCJJJJCCCCJCCCCCJJJJJCCCCJJJJJCCCCJJJJCCCCJJCCCJJCCCCJJJJJCCJCCJJJJCCJJJJCJJJJJCJJJJCJCCCJCJCCJJJCCJJJJJCJJCCJJCCCJJJJCCCCJJJJCCCJJJJCCCJJJCCJJJJCCJJJCCCJCJJJJJCCJJJCCCJJJCCCJJJJCCJJCCCJJJCCCCCJJJCJCJJJJCCJJJCCJJCCCCJJCJJJJCCCCCJJJJJCCCCJJJJJCCCCJJJJJCJJJJCCCJJCCCCCJJJJCJJJJJCCCCJCJJCJCCJJJJJCCJJJJJCJJJCJJCJJJJCJJCCCCJCCCJJJCJJJCCCJJJJCJJJJJCCCCCJCCCCCJCCJJJCCCCCJCCJJCCCCJJCCCCJJCCCCCCJJCCCCJJJJCCCCCJJCCCJJJCCCJCCCJJJCCCCJJJJCCCCJJJCCCJJJJCCCCCJJJCJCCJCCCJJJJCCJCJJJCCJCCJJJCJCCCCJJJJCCCCCJJCJJJJCCCJJJJCCCCJJJCJCJJJJJCCCCCJJJCCCJJJCJCCCCCJCCCCJJJCCCCJJCCCCCJJCJJJJCCCCCJCCCCJCJCCCCCJCCCJJCCCJJJCCJJCCJCJCCCCCJJJJCCCJJJJJCCCCCJCJCCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJJJCJCJCJCJCCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJ
+JJJCCCJCCJJCCJJC
+CJJCJCJCCCJCJCJJCJJJJCCCCJJCJCJJJCJCJCJCJJCJJCCJJCCCJCJCJCCJCCJJJCJCJCCJCJJCCJCJCJCJCJCJCJCJCJCJJCJCJCJCJCJCJCJJCJJCJCJCCJCCJCJJJJCCJCJJJCJCJJJJCJCJCJJJCCJJJCJCCJJCCCJJCCCCCCJJJJJJCCJJJJCCCCCCCCCCCCCCCCCCCJJJJCCCCJJCJCCJCJCJJCJCJCJCJCJCCJCJJJJCJCCJCCCJCCCJCJCJCJCCJJCCCJJJCJCJCJCJCJJJCJCJCJCJCJCJCJCCJCCJJCJJCJJCCCJJJJJJJJJJJJCJJJJJJCJJCJJJCJCCCJCJJJJJJJCJCJCJJCCCJJJJJCJCJCJJJJCCJJJJJCJJJCJJJJCJJJCCJJJJJCCJJJJJJCJCJCJCJJJCJCCJCCCJCCCCCCCCJJJCCCCJJJCJCCCCCCJCCCCJJCCCCJCCCJJJJJJCCCJJJCJJJCCCJCCCJCJCJJCCCJCJJJCCCJCCCCJJCJJCJJJCJCCJCJJCCJCJJCCJCJJCCJJCJCCCCJJJCJCJJCJCJCCCCCCJJCJCCJCJCCJJCCJJJCJCCJJJCJCCJCCCJCJCCCCCJCJCCJCCJCCJCJJCCJJCJCJJCJJCCJJCCJJCCJJCJCCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJCJCJCJCJCCCJCJCJCJJCJJJCJCJCJCJJJJCCCJJJJJCJCJJCCCCJJJCCJCCJJCJCJCCJJJJCCJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCCJJJCJCJCJCJCJCJCJJCCJJCJCJCJCJCJCJCJCJCJCCCJCJJJCJCJJJCJCCCJCJCJCJCCJCJJCCCCJJCCCCJJJCCJCCJJCJCJCJCCJJJCJCJJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJJJCCJCJCJCCCJCJCJCJCJCJJCJCJCJCJCJCJJJCJC
+CJJCJCCJCCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJCJJCJJCJJJCCCJJCCCCJCJJCCJJCCCCJJJJCJCCCJJCJJCCCCJCJJCCCJJJJCCJJJJCCJCJCJCJCJCJCJCCCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCCCJJJCCCCCCCCJJCCCCJCCCCCJCCCCCJCCCJCJCCCJCJCJCJCJCJCJJCJCJCJCJCJCJCJCCJCJCJJCCJCJJCJCCJJCCJJCCJCJCJJCCJCJJCJCCJJCJJCJJJJCJJJJJJJJJCJCJJJJCCCJCJCCCJCJCJCJCJCJJJCCJCCCJJJCJJJCJCJCJCCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJJJCJJJCJJCJJJCJCJJJJCCCJJJJJCJJJJJCJJJJCJCCJCJJCCJCJCJCJJCCJJCJCCJCJJCCCCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCJCJJJJCJJCJJCJCCJJCCCCJJJCCJCCCCJJCJCJCJCJCJCJCJCJCJCJJCJCJCJCCJCCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJJCJJCCJJCCJCJCCCJCJJCCJCJCJCJJCJCJCJCCJJCJJCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCJCJCJCJCJCJCJCJCJCCJJCCCJJJCCCJCJJJCCCCCJJJJJCCCCJJJJCJJCCCJCJCJJJJJCJCJCJCCJJCJCJCJCCJCJCJCJCJCJCJCJCJCCJJCJCJCJCJCJCJCJCJCJCJJCCJJCJCCCJJJJCJCJJJCCJJCJJJCJJJCJCJJCJCCCCJCCCJJJCCCJJJJCCCCJJJCJJJCCJCJCCJCCJJJJJJJJJCCCCJJCJJJJCCCJJCCCJCCCJCJJCCJJCCCCJCCJCJCCCCJJCCJ
+JCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJJJJJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCCCJCCCJCJCCCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJJJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCJJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJC
+CJCCCJ
+CJJJJJCJCJCJCJCJCJCJCCJJCJCJCCCJJJCJJJCJCJCJCJCJCJCJCCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJJJCJJJCJCJCJCJCJCJJJCJJJCJCJCJCCCJCJCJCJJJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJJJCJCJCJCJJJCJCJJJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCCCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCCCCCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJJCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCCCJCJCJCJCJ
+CJCJCJCJCJCJCJJJCJCJJCJCJCJCJCJCJCJCJJJJJCJJJCJJJJJJJJCCJJCJJJCJCJJJJJJJJJJJJCJJJCCJJJJJJCCCJCJJJCJCCCJJCCJCCCJJCJJJCCJJCJJJCJCJCJCCCJCJCJCJCJCJJCJCJCJCJCJCJCCJCCCJJCCJJJJJCJCCJCJCCJCJJJCJJJJCJJJJJJJCJCJCJJCJCJJJJCJJCJJJJJJCJJCJJJCCJJJCCJJCJCCCJJCCCCJJJJCCCJJJCCCCJJJCCCCJJJCCCCJJJJCCJCCJJCJCCCJCCJCJJCJCCJCJJCCJCCJCCJJCJJCJJCCJJCJCCCJJJJCCCCJJCCCJJJCCCCCJJCCJJCCCCJJJCCJJJCCCJJCCJJJJJJJCCJJJCJJCJCJJJCCJJJCJJJJJJJCJCJCJCJCJJJCJCJCJCCCJCJCCJJCJCJJJJCJJJCJJJJCJJJJJCJJJJCJCCJCJJJCJJCJJJCJJCJJJJJCCJJCCCCJJJJJJCCCCJJJCJJCCJJJJJJJJCCJJJJCCCCJJJJJJCCCCJJCCJJCCCCJCCCJJCCCCCCJJCCJCCCCCCJJCCCJJCCCCJCCJCJJCCJJCJJCJJJCJCCCJCCJJCJJCJCCJCCCCJJJCJCCJJJCJCCCJJJCJJJCJCJCJCJCJCJJCJJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJCJCCJJCCJJJJCJCCJCJCCCJJCJCJJCCJJJJCCCCJJCCCCJCJJCCCCJJCCCJJCJJJJCCCCJJCCCJCCCJCJCJCCCJCJJCJCJJCCJCCJJJCJJJCCJJCCCCJCCJCCJJCJJJJJJJCJJCCCJJJJJCJJCCJCCCCCJJCJJCCJJCJCJCJCCJCJCCCJJCJCCJCJCJJJJCCJCJCJJCCJCJJCJCJCJCJCJCCJJCCJJCJCCJJCCJJCJJCJJCCJCCCJJJJCJCCCJJJCCCCJJJCCJJCCCCCJJJCJCCCJJJCJJJCC
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCJJJCJCCJCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJCJJCJCCJJCCJCJJCCCJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJ
+JJJJJJJJJCCCCCCJJJJJJJCCCCCCCJCCCJJJJJJJJJCCCCCCCCCCJJJJJJJJJCCCCCCJJJJJJJJCCCCCCCJJJJJJJJCJCCCJCCCCCJJJJJJCJJCCJJJCCCJJJJCCCCCCJJJCJJJJJCCCCCCCJCCJCCCCCCJJJJJJCCCCCCCCCCJJJJJJJCJJJJJJJJJCCJCCCCJJJJJCCCCCJCCCJJJJCCCCCCCCJJJJCJCCCCJJJJJJJJJJCCCCCCCCCCJJJJJJJJJCJJJCCJCCCCJJJJJCCJJJJJJJJJJCJJJJJJJCCCCCJJCCCCCCCJJJJJJCCCCCCJJJJJJJJJJCCJJJCCCCJJJJJJJJJCCCCCCCCJCJJJJJJCCCCCCCCJJCCCCCCCCCCJJJJJJJCCCJCCCC
+JCJCJCJCJCJCJCJCJCJCJCCJCJJJCCCJCCCCJJCJJJCJJCJCCJJCCJCJJCJCCJCJCJCJCJCJCJCJJJCCJJJJCCCCCJJJJCJCJCJCJJJCJCJCJCCCJCJJJCJJJCJCJCJCJCJCCJCJCJCJCJCJCCCJCCCJCCCJCJJJCJCCJJCJJJCCCJJCJJCJCJCJCJCJCJCCJJJJJCCJCJCCJJCJCJCJCJCJCJJJCCCCJJJCCCJJCCJJCJJJJJJCJCJJJCCCJCCJJJCJCJJCCCCCCCCJCCCCCCCCCCCCJCCJJCCJCJCJCJCJJJCJJCJCJCJCCJCJCJJCCJCJJCCCCJJCCJJJJCCJCJCJCJCJJCCJCJJCJJCJJCJCCCCJJCJCJJJCCJCCJCJCCJJJJJJJJJJJJJCJCJJCCJJCCJCJJCJJCCCJJCCCJJCJCJCJCJCJCJCJJJJJJJJCJJJJJJJJJJCCCJCCCCCJJJJCCCJCCJCCCJJCJCJJJCJCCJCJCJCJJJCCJCJJCJCCJCJCJCJCCJJCCJCCCCJCCJJJJJJJJJJCCJCCCJCCCCCJCJCCCJJJCCJJCJCCJJCCCJJCJJJJCJCCCJJCJCJCJJCCCJCJCJCJJJCCJJCCCJCCCJCCCJCJJJJCCJJJCCCCCCJJCCJJCCCCCJCJCJJJCJCCCJJJJCCCJJJCCJCCCCCCCJJJCJCJCJJCJJJJJJCCJCJJCJCCCCJJJJCJCJJJCCJCJCJCJCCCJCCCCJCJCJJCCCCJCJJJCJJJCCJJCJJCJJCCJJCJCCCCCJCJCCCCCCJCCJCCJCJJJCJCJCJCJCJCJCJCCCCCCCCCJJJJCJJCJCCJJCCJCJCJJCCJJCCJCJCJCCCJCJCJJJCJJCJCJJCCJJCCCJCJJJCJJCJJCCJCCJCJCJCCJCCJJCJJCJJCJCCJCJCJJJCJCCCCCJJCJCCCJJJJJCCCJJCJCCJCCJJJCJJCCJCCJCCJCJCCCJJCJJCJCJCJCJJJCJJCCJCJ
+CC
+JJJCJCJCJCCJCJJCCJJCCJJCJCCJCJJCCJCJJCCJCJJCCJCJJCCJCJJCCJCJCCJCCCJCCJCJCJCJCJCJCJJCJCJCCJCJCJJCCJCJCJJCJCCJJCJJCJJCCJCJJCCJCJJCJCCJJCJCCJJCJCCJCJJCJCCJJCCCJJJCCJJCJCJCJCJCCJCJJCJCCJJCCJJJCJJCCJJCCJJCCJCJJCJCJCCJJCJCJCCJCJCJJCJCJCCJCJJCCJJCJCCJJCCCCJCJJCJCCJJCJCJCCJCJCJCJJCCJJCCJJCCJCJJCCJJCCJJCCJJCJCCJCJCJCJJCCJCJCJJCCJCJJCCJCJJCCJJCJCJCJCCJCJJCJCJCCJJCJCCJJCCJCJCJCJCJJCCJCJCJCJCJCJCJJCJCJCJCJCCJ
+CJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJ
+JJJCCCJJJJCCCJJJCJCCCCCCJJJJJCCCCJJCJJJJJCCCCCCCCCCCJJCCCCCJJJJCCCCCCCJJJJJJCJCCJJJCJCJJJCCCJJJCJJJJJCCCCCCCCJCJCCCJCCCJJJCCCCCCCJCJJJJCCCCCCCJJJJJCCJCJJJJJJJCJJJJJJJJJCCJJJJJJCCCCJJJJCCCCCCCJJJCJJJJCCCJJJJJJJJJCCCCCCCCJJJJJCCCCCCCCCJJJJJJJJJJJJJJJJJCCCCJCCCJJJCCCJCCJJCCCJCCCCJJJJJJJJCCCCJCCCCJJJCJCCCJJJJJJJCJCCCCJCCJJJJJJJJCCCCCCCCCJJJJJJJJJJCJJCCCJCJCCCCCCJJJJCCJJJJJJJJJJCCCCJJJJJJJCJJJJJCJJJJCC
+JJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJCJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCJCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCCCJCCCCCJCJCJJJJJJJJJJCCCCCCJJJJCCJJCCCCCCCCCCJJCCJJCJCCJCJJJJJCJJJJJJCJJJCJJJJJJJCCCCCCCCJJJJCCJJCCJJJJJJJJJJCCCJJJJCJJCCCCCCCJCCJCJJCCCCJJCCCJCCJCJJJJJCCCJJJJCCJCCCJJJCCCJJJJJJCCJCJJCCJJCCJCJJCCCCCCJJCJCCCCCCCCJJJJCCCCJJCJCCJJCCJJJJJJCCJJJJJJJJJJJCJJJJJJJJCJJJCJJJCCJJJCCCCCCCJJCCJJJJCJJJJJCCCCCCCCJCCCJCCJJJCJCCCJCCJCJJCCCCCCJJCCJCCCJJJJCCJJCJJJJJCCJCCCJJJJJJJJCCCCJJJJCJCCJJCCCCJJJJJJCCCCJJJJJJ
+JCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJCJCCJJCCJCJJCCJJC
+JJJJCCJJJJJJCCJJCCCCJJJCJJCCJJCCJJCCJJJCJJCCCCCCJJJJJJJJCCCCJJCJJJJJCCCCCCJJCCCCJJJJJJCCJJJJJJCCJJJJJCJCJJJJJJJJCCCCCCCCJJJJJJJJCCJJJJJCJJJJCCJJJJJJJJCCJCJCCJCCJJCCCCCCJJJJCCJCJJCJCCCCCCJJCCJCJJCCJJJJJJJJCCCCCCJJCCCCJJCCJJJJCCCCCJJJCCJJJJJJJJCCCCJJCCCCJJJJJJJCJJJJCJJJJJCCJCCCCJJCJJCCCCCCJCCCCJCCJJJJCCJCCCCCJCJJCCCJCCCCCJJJJCJJJJJJJJJJCCJJCJCCCCCCCCCCJCJJCJCCJJCCCCCCJJCJCCJJJJCJJJJJCCCCJJJJCJCJJCJC
+JJJJJJJJJJCCCCCCJJCCCCCCJJJJJJJJJCCCCCJJJJJJJCCCCCJJJJCCCCCCCCJJJJJJCCCJJCCCCCJJJJJCCCCCCCCJJCCJJJJJJJJCCJJJJCJJJJJCJJJJJJJJJJCCCCCCJJJJJCCCCCCCCJJJJJJJJJCCCCCCCJJJJJJJJJCCCCCJJJJJJJJJCJJJJJJJCCCCCCCCCJJJCCCCCJJJCCCJCCCCCCCJJJJJJJJJJCCCJJJJCCCJJJJCCJJJJJJJJCCCCCCCCJCCCCCJJJJJJJJJJCCCCJJJJJJJJJCCCCCCCCCJJCCCCCJJJJJJJCJJJJJJJCCCJJJJJJJJJJCCCCCCCJJJCCCCCCCCJJJJCCJJJJJCCCCCCCCJJJJJJJJJCCCCCCCCCJJCJJJJ
+JJJJCJCC
+CJJJCJCJJCCCCJJJCJJCCCJJJJCCJCJJCJCJJJJJJCCCCJJJCCJJJCCCCJCCCCCJJJCCCJCCJCCJCJCCCJJJCJJJCCJCCCJJJJCCCJJJCCCCCCJJCCCJJCJJCJJCJJCJJJCCJCCJCCCCJJJCCCCJJJCCJJJJCCCJJJCCJJCCJCJJCCCCJCJCJCJCJCJJCJCJCJCJJJJCJJJJJCCCCCJJJCCJCJCCCCJJJCCJCCCJCJCJCCCJJJJCCCCCCJCCCCCJJJJJCJCJCCCCCCJCCCJCJCCJJCJCJCCCCJCJCJJCJJCJJCCCCJCJCCCJJJJCJJCCCJCJCJCJJJCJCJCJCJJCJCJCJCJCJCJCCJJCJCCJCJCJJCCJJCCJCJCJJJJCCJCJJCCJCCJCJCCCCJCJCCJJCJCJCCCJCCJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJJJCJCJCJCJCJCCJCCJJCJJJCCCCJCJCCJCJJCJJJJJCJJJCCJJCCCCJJJJCCJCJJJJCCJCJCJJJJJCJCJCJCJCJCJCCCCJJCJCCJJCCJCJJCJCCJCJJCCJJCJJJJJJJJCJJJCCJCJJJJCCJJJJJCCCCJCCJJJJJCCJJJCJCJCJCJCJCJCJCJCJCJCJCJCCCJCJCJCJCJCJJCCCCJJCCJJJCCJCCJCJCCJJJJJCCJJCCJCJJCCJJCJCCCCCCCJCJJCJJJCCCJJJJCCCCJJCCCCCCJJJJCCCJJCCCCJJCCCJJCJCCCCCJCCJJCJCJJCJJCCJJCJCCJCJCJCJCJCJCJCJCJCJCJJCJCJCJCCCJCJCJCJCJCCJCJCJJJCJCCCCCCJJCJCJJCJCJJCCJCJJCJJCJCJJJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCCCJCJCJJJCJCJCJJJCJCJCJCJCJCJCCCJCJCJCJJJC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
diff --git a/codejam_2016/src/y2016round3/A-large-practice.out b/codejam_2016/src/y2016round3/A-large-practice.out
new file mode 100644
index 0000000..89c5e85
--- /dev/null
+++ b/codejam_2016/src/y2016round3/A-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 20
+Case #2: 10
+Case #3: 20
+Case #4: 15
+Case #5: 30
+Case #6: 1990
+Case #7: 1990
+Case #8: 2560
+Case #9: 1980
+Case #10: 5020
+Case #11: 5120
+Case #12: 2000
+Case #13: 25
+Case #14: 4945
+Case #15: 1990
+Case #16: 1970
+Case #17: 35
+Case #18: 20
+Case #19: 1200
+Case #20: 1100
+Case #21: 1990
+Case #22: 99655
+Case #23: 4790
+Case #24: 2950
+Case #25: 2000
+Case #26: 2975
+Case #27: 5
+Case #28: 1040
+Case #29: 4885
+Case #30: 1940
+Case #31: 4610
+Case #32: 1070
+Case #33: 1975
+Case #34: 5
+Case #35: 2560
+Case #36: 70
+Case #37: 1965
+Case #38: 5000
+Case #39: 90
+Case #40: 1960
+Case #41: 1935
+Case #42: 30
+Case #43: 2990
+Case #44: 5000
+Case #45: 80
+Case #46: 1970
+Case #47: 2000
+Case #48: 1200
+Case #49: 1980
+Case #50: 4630
+Case #51: 5005
+Case #52: 5110
+Case #53: 1990
+Case #54: 91965
+Case #55: 1980
+Case #56: 1585
+Case #57: 2560
+Case #58: 80
+Case #59: 1995
+Case #60: 4870
+Case #61: 2900
+Case #62: 1990
+Case #63: 4775
+Case #64: 1960
+Case #65: 2965
+Case #66: 1000
+Case #67: 1000
+Case #68: 4405
+Case #69: 1170
+Case #70: 1955
+Case #71: 1970
+Case #72: 10
+Case #73: 1140
+Case #74: 2560
+Case #75: 1190
+Case #76: 1990
+Case #77: 81920
+Case #78: 97785
+Case #79: 70
+Case #80: 4660
+Case #81: 4915
+Case #82: 1615
+Case #83: 20
+Case #84: 1170
+Case #85: 4805
+Case #86: 2550
+Case #87: 1990
+Case #88: 4720
+Case #89: 10
+Case #90: 1950
+Case #91: 1020
+Case #92: 1990
+Case #93: 2995
+Case #94: 1980
+Case #95: 4800
+Case #96: 1980
+Case #97: 1985
+Case #98: 35
+Case #99: 4875
+Case #100: 2000
diff --git a/codejam_2016/src/y2016round3/A-small-practice.in b/codejam_2016/src/y2016round3/A-small-practice.in
new file mode 100644
index 0000000..bef5a2c
--- /dev/null
+++ b/codejam_2016/src/y2016round3/A-small-practice.in
@@ -0,0 +1,101 @@
+100
+CCJJ
+CJCJ
+CJJC
+CJJJ
+CCCCCC
+JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
+CJCJJCJJCJJCCCCJJCJCJCCCJCJCJCJCCJJJ
+CJJCJCCJJCCJCJJJCCCJCJJCCCJCJCJJJC
+CCCCJCJJJJCCJJCCCCCJJCJCCCCCCJJCJJJC
+JJJJCCJJCJCJJJJCJCJJJJCCCJJJCCJJJCCCCCCCCC
+CCCJCCCCCCJJCCCCCCCCCCJCJJJJJJCCCCJJCC
+CJJCJCJCJCJCJCCJJCJJCJJCCCCJJCCJJCCJ
+JCJCJCCJJCJCJCJCJCJCJJJCJCCCJCJCJCJJJCJCJCCC
+CJJJJCCCCJCCJCJJCJCJJCJCCJJJJCJCCCCJCCJCJJ
+JJJCCJCCCJJCJCJCJJCCCCJCCCCCCCCCCJCCCCJJ
+JC
+CJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJ
+JCCC
+CCCJJJJCCCCJCCJCJJJJJJJCCJJJJJCCCCJJJJ
+JJJC
+JCCJCJJCCJCJCJJCJCCJCJCJJCJCJCJCCJCJCJJCCJJCCJ
+CJCCCJCJCJCJCJCJCJCJJJCJJJJJCCCJJJCJCCJCCJJJCCCJCC
+JJ
+JJJCCJCJCCCJJJCCJJJJCCJCCCJJJJJJCCJCJJCJJJJCJC
+CJCCJJCJCJCJCJJCCJCJJCJCCJJJJCCCCJCJJCJCCJCJJCJCCJ
+CCCJCCJJCJCCJJJJJJJJJJCCCCCCJJCCJJJJCCCCCCJJ
+JJCCCJCCJJJJCJJCJCCJJCCCCJCCCJJJCJCJ
+CCCCCJCCCCJJJJJJJJJCCCCJJCCCCCCCCCJCCCCCCJJJJJJCCC
+JCJC
+JJJJJJJJJJJJJJJJJJJJJJCJCJCJCJJJCJCJCC
+JJCCJJJJCCJJCCCJJCCJJCJJJCCCJCJJCCJJCCCCJCJJJJJC
+JCJCJCJCJCCCJCJJJCJCJCJCJCJCJCJCJCJC
+JCJCJCJCJJCJJCJJJJJJCCJCJJJJJJJJJJJCJJCJJJCJ
+JJJJCCCCJJJCJJCCJJCCJCJJJJCCCJJJJJCCCCCJJJCCCC
+JJCJJCJCCJCJJCJCCJCJJCJCCJCJJCJCCJCJJCJCCJCJCCJC
+CJJCJCCJJCCJCJCCJCCJCJJJCJJCJCCJ
+CCJCJCJCJCCCCCJCCJCJJCCJCCJCCJJJCJJJCCJCJCJJJJJCJC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCJCJCCCCCCCCCCCCCJCJCCCC
+JCJCJJCCJJCJJCJCJJJCCJJCJCCJCJCCCJCJCJCJCCJJJCJJJC
+JJJCCCCCCCCCJJJJJJJJJCCCJJJJJCJJJJJJJJCCJJCCCCCCJJ
+JJJJCCCCJJCJCCJJJJJJJJJJCCJJJCJJJJJJJCCJJJJJJJ
+JCCCJCJCJJJJJCCCJJCCJCCCJJJJJJCCCCJJJCJJCJCJJC
+CCCJ
+CJJCJCCJJCCJCJJCJCCJCJJCJJCCJCCJ
+JCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJCJC
+CJCC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+CCJJJJCCJCCCCCCJCJCJJJCJJCCCCCCJJJJJJJJCJJ
+CJJJCJCJCCCJCJCJCJJJJJCCCJCCJJJCCJCJCJCCCJCJCJ
+CJJJCCJCCCCCJJJJJCCCCJCCJJJJJCJJJJCJCC
+CJCJJCJCCJCJJCJCCJCJJCJCCJCJJCJCCJCJJCJCCJ
+JCCJ
+JJCC
+CJJCCCCCJCCCJJJJJJJJCCJJCJCJCCCCCCCCJCCC
+CJCCCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJCJCJCJ
+CCJJJJJCCCCJJJCCCJCJCJCJCJCJCJJCJCJCJCJCJC
+CCJCCJJCCJCJCJCCJJJCJJCJCJJCJCCJCJJCJCCJJCCJCJCJCJ
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJC
+CCCC
+JJJJCJJCCCCCCJCCJJCCJCCCCCCCJJJJJJJJJC
+JJJJJJJJCCCCJCJCCCCJJJJJJCJCCJCCCCCJJJJJJJJJJJ
+JCCJCJJJCJCJCJCJCJJCJCJCJCJCCJJCCJJCCJCCCJ
+CJCJCCCCCJJCCJCCCJCCCCCCCJCCJCCCJCCC
+CJJCCJCJCJJCJCCJJCCJJCCJCJJCCJJCCJCJCJCJJCJCCJJCCJ
+JJJJJJCCCCJJJJJCCCCCCCCCJJJJJJJJJJCC
+CJCJCCJCJCCJJCJJJCCJCJCCCJCCJJCJJCJJ
+CJJCJJJCJCJCJCJCCJCJJCJCJCCJJCCJCJCJCCCJJCJCCJ
+JCJJJJCCCCCCJJCJJJCCCCCCCJJJJC
+JCCJJJCCJCCCJJJCCCCCJJJCCCJJCJJJCCCC
+CJJCJCCJJCCJCJJCJCCJCJJCCJJCJCCJ
+CCCCCCCCJCCCCJJCJJJJJJCCJJJJJJCJJCJCCCCCCJJJJJ
+JCCJCJJJJJJJCJJJJJJJJJJJJCCJJJCCJJJJCJ
+CCCCJCCCCJJCJCCCJCCCJJJJJJCJCCJCCCJJJJJJJJJCCJCJJJ
+JJJJCJJJJJJJJJJJJJJJJJJJJJCJJJ
+JJJJCCJJCCJJCCJJCCCCJJCCCCJJJJJJCCCCCCCCCCCC
+JJJJ
+JJJJJCCCCCJCCCJJJJJJJJJJJCCCJCCCCCJJCC
+JCJCJCCJJCJCJCJJCCJCJCJCJCJCJCJCJCJCJC
+CJJJCCJCCJJCCJJCJCJCJCCJJCCJCCJJCJJCJC
+CJ
+CJCJJCJCCJCJJCJCCJCJJCJCCJCJJCJCCJCJJCJCCJCJJC
+JJCJJJCJCJCJCJCJCJCJCJCCCJCCJCCJCJCJ
+CCCCJJJJCCCJCJCCJJCCJJJJCCCCJJJJJJCCJJJJCCJJCCJJCC
+CJCJCJCJCJCJCJCCCJJJCCCJCCJJCJCJCJCJCJCJCJJJCJ
+CJCJCCCJCCCJCJJJCJCJCJCJCJJJCJCJCJCJCJ
+JCJJ
+CCCJJJJJJCJCCCCCCCCJCJJJCJJJJJJJJJCCCCCCJCJJ
+CCJC
+JCCCJCJCJCJCJCJCJCJCJCJCJJJCJCJCJCJCJCJCJCJC
+CJJJCJCCCCCCCJJJCJCJCJCJCCCJCJJJJCCJJCJCJJ
+CJCJCCJCCJCJCJJJJCJJJCJJJCCCCJCCJCCJCJJCCJ
+JJJJJJCCCJCJJJCJCCCJCJJJCCJJCCCJCCCJCCJJCCCJCCCCJJ
+JJCJ
+JCJCCCJCJCCCJCJJJCJCJCJCJCJCJCCJJCCJJCJJJCJCJC
+CC
+CJCJCJCJCJCJCJCJCJCJCJJCJJJJCCCCJCCJCJ
+CJJJJJCJCJCCCCJJJJJCCCCCJJCCCCCCCJCCCC
+CCCJJCJCCJCJJCJCCJCJJCCCCJCJJJJCJJCJJCJCCJCJJCJCCJ
+CCCCCCJCJJJJCCCCJJJJJJJJJJJJJJJCCCCCCCJJCCJJCCCCCC
+CJJCJJCJCCCJCJJCJCCJJJJCCJJCCCCJJC
diff --git a/codejam_2016/src/y2016round3/A-small-practice.out b/codejam_2016/src/y2016round3/A-small-practice.out
new file mode 100644
index 0000000..a0a0ce7
--- /dev/null
+++ b/codejam_2016/src/y2016round3/A-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 20
+Case #2: 10
+Case #3: 20
+Case #4: 15
+Case #5: 30
+Case #6: 250
+Case #7: 160
+Case #8: 165
+Case #9: 165
+Case #10: 210
+Case #11: 190
+Case #12: 160
+Case #13: 140
+Case #14: 205
+Case #15: 190
+Case #16: 5
+Case #17: 115
+Case #18: 15
+Case #19: 190
+Case #20: 15
+Case #21: 215
+Case #22: 185
+Case #23: 10
+Case #24: 225
+Case #25: 225
+Case #26: 210
+Case #27: 160
+Case #28: 245
+Case #29: 10
+Case #30: 160
+Case #31: 220
+Case #32: 100
+Case #33: 200
+Case #34: 230
+Case #35: 240
+Case #36: 150
+Case #37: 220
+Case #38: 230
+Case #39: 245
+Case #40: 235
+Case #41: 230
+Case #42: 205
+Case #43: 15
+Case #44: 160
+Case #45: 100
+Case #46: 15
+Case #47: 250
+Case #48: 200
+Case #49: 165
+Case #50: 190
+Case #51: 205
+Case #52: 20
+Case #53: 20
+Case #54: 200
+Case #55: 135
+Case #56: 205
+Case #57: 225
+Case #58: 145
+Case #59: 20
+Case #60: 185
+Case #61: 225
+Case #62: 195
+Case #63: 165
+Case #64: 225
+Case #65: 175
+Case #66: 170
+Case #67: 215
+Case #68: 150
+Case #69: 170
+Case #70: 160
+Case #71: 225
+Case #72: 175
+Case #73: 240
+Case #74: 140
+Case #75: 220
+Case #76: 20
+Case #77: 170
+Case #78: 115
+Case #79: 175
+Case #80: 5
+Case #81: 225
+Case #82: 120
+Case #83: 240
+Case #84: 145
+Case #85: 115
+Case #86: 15
+Case #87: 215
+Case #88: 15
+Case #89: 120
+Case #90: 175
+Case #91: 195
+Case #92: 210
+Case #93: 15
+Case #94: 155
+Case #95: 10
+Case #96: 135
+Case #97: 175
+Case #98: 245
+Case #99: 240
+Case #100: 165
diff --git a/codejam_2016/src/y2016round3/a.rs b/codejam_2016/src/y2016round3/a.rs
new file mode 100644
index 0000000..9b78176
--- /dev/null
+++ b/codejam_2016/src/y2016round3/a.rs
@@ -0,0 +1,55 @@
+use codejam::util::codejam::run_cases;
+
+//use itertools::Itertools;
+use std::io::Write;
+
+/*
+Trees, binary tree representation
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2016round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let s = reader.read_string();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(&s)
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(s: &str) -> usize
+{
+    let mut stack:Vec<char> = Vec::new();
+    let mut score = 0;
+    for ch in s.chars() {
+        if let Some(top) = stack.last() {
+            if *top == ch {
+                score += 10;
+                stack.pop();
+                continue;
+            }
+        }
+        stack.push(ch);
+
+    }
+
+    score + 5 * stack.len() / 2
+}
diff --git a/codejam_2016/src/y2016round3/mod.rs b/codejam_2016/src/y2016round3/mod.rs
new file mode 100644
index 0000000..f693abf
--- /dev/null
+++ b/codejam_2016/src/y2016round3/mod.rs
@@ -0,0 +1,4 @@
+pub mod a;
+pub mod b;
+pub mod c;
+pub mod d;

From d029a277838648e1ff5a384a6f8117f7b35dfb0a Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 17:28:59 -0300
Subject: [PATCH 110/122] a

---
 codejam_2016/src/y2016round3/a.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/codejam_2016/src/y2016round3/a.rs b/codejam_2016/src/y2016round3/a.rs
index 9b78176..af79a56 100644
--- a/codejam_2016/src/y2016round3/a.rs
+++ b/codejam_2016/src/y2016round3/a.rs
@@ -51,5 +51,5 @@ fn solve(s: &str) -> usize
 
     }
 
-    score + 5 * stack.len() / 2
+    score + 5 * (stack.len() / 2)
 }

From ab5abab0732bae79dce871aa8a45149a1f266d06 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 17:52:38 -0300
Subject: [PATCH 111/122] b

---
 codejam_2016/src/y2016qual/d.rs               |   1 -
 .../src/y2016round3/B-small-practice.in       | 501 ++++++++++++++++++
 .../src/y2016round3/B-small-practice.out      | 100 ++++
 codejam_2016/src/y2016round3/a.rs             |   1 +
 codejam_2016/src/y2016round3/b.rs             |  90 ++++
 5 files changed, 692 insertions(+), 1 deletion(-)
 create mode 100644 codejam_2016/src/y2016round3/B-small-practice.in
 create mode 100644 codejam_2016/src/y2016round3/B-small-practice.out
 create mode 100644 codejam_2016/src/y2016round3/b.rs

diff --git a/codejam_2016/src/y2016qual/d.rs b/codejam_2016/src/y2016qual/d.rs
index 8693b97..d38a44c 100644
--- a/codejam_2016/src/y2016qual/d.rs
+++ b/codejam_2016/src/y2016qual/d.rs
@@ -90,7 +90,6 @@ mod test_2016_qual_d
 {
     use super::*;
     use std::mem;
-
     fn generate_sequence(C: u8, initial_seq: &[char]) -> Vec<char>
     {
         let K = initial_seq.len();
diff --git a/codejam_2016/src/y2016round3/B-small-practice.in b/codejam_2016/src/y2016round3/B-small-practice.in
new file mode 100644
index 0000000..b09f31d
--- /dev/null
+++ b/codejam_2016/src/y2016round3/B-small-practice.in
@@ -0,0 +1,501 @@
+100
+2
+0 1
+CJ
+4
+CJ C D JC
+3
+0 1 0
+BAA
+3
+AA AAB ABA
+100
+6 28 78 66 14 64 71 84 49 77 78 52 3 67 27 54 10 50 52 64 20 41 77 38 18 13 36 3 18 60 47 20 96 100 99 59 8 88 20 6 7 95 95 12 66 23 11 96 11 14 23 14 41 52 86 60 85 8 67 77 57 96 23 78 6 11 0 19 37 12 92 13 28 27 88 47 84 59 91 19 75 19 47 59 36 85 60 71 15 37 64 67 15 95 84 50 74 38 85 5
+VVVVJJVVVJVVJVJJVVVJVVJVJVVJJVVVJJVJJJVVJJJJVVJJJJVJVVVVJJVJVJVVVJJJVJJVVJJVVJVJVJVJVJVVVVJVVJVVVVJV
+5
+JVVJVVVJJ VVJVVJ JVJJVVV JJVJJVVJV VVVVVJVVJV
+100
+13 60 11 78 20 62 38 15 57 12 71 0 60 24 44 8 6 93 35 9 90 76 85 70 72 29 0 54 44 85 77 90 64 92 9 70 81 88 80 74 5 74 95 10 36 8 54 16 11 93 87 62 98 38 40 18 36 91 81 33 6 46 45 71 33 46 28 75 86 40 39 88 69 52 49 58 91 13 17 63 17 35 34 61 63 39 18 1 72 12 26 28 83 49 50 15 76 19 86 34
+GEEEGGEEGGGEEEGGEEGEEEGGEEEGGGGEEGEGEGGGEGEEEGGEEEEGGEEGEEEGEEGGGEEEGEEGEEGGEGGEGGEGEEGEEGGEGGGEEEGE
+5
+EEEEEEEE EEGEGG GEGGGGEE GGEEGEEGG EGEGGEGGEE
+100
+53 5 20 43 0 19 31 66 37 60 9 97 72 75 90 78 9 57 78 88 52 26 12 12 10 95 67 19 51 65 29 30 35 30 1 10 18 43 37 60 43 67 76 5 65 84 61 81 7 34 96 7 34 66 83 92 32 12 30 95 32 83 26 85 5 15 97 39 52 72 40 86 66 1 76 53 75 31 37 63 1 19 7 78 0 53 29 18 83 32 47 86 65 9 61 2 31 10 84 35
+VZUZOUUUZZUZUUUUUZZOUUUUUZUUUUVVUZVUZUOOUUZUUUOUUUVVOUUUUUUVVUOUZZVUUUUVUUVZUUUUOUZVOOUVUOUZUUUVZUUO
+5
+OOZ UUUUUUUUUUUO UUUUUUUUUUUZUUU UUUUUUOUUUUUUU UZUVU
+100
+78 85 30 85 44 86 86 91 3 12 51 11 6 98 33 49 1 16 63 23 11 78 70 48 72 60 16 86 3 25 91 53 78 90 11 16 48 3 86 77 22 98 50 6 28 62 74 62 51 53 70 85 51 45 16 33 70 20 3 6 31 0 23 85 51 48 57 45 44 62 20 62 22 30 65 22 25 87 30 28 74 31 11 50 95 46 72 91 7 28 25 60 20 31 25 44 74 95 22 89
+SJFJJRSJJJFSJJJFJJJRJFUJFJJRJRRJUJJJJJJJJJJRUSJRSUFJUJJJSJJUJFSJSJJJJRJUJRJJSRJJJJJJFFSJSSRJJJUJJUJJ
+5
+RJJ JFJJJJJJJ JSJJJJJ JJJR JJJJUJJJJJJJJJ
+78
+39 45 43 61 65 47 29 62 45 46 7 21 3 59 69 74 2 21 31 2 1 51 51 17 31 34 47 66 41 62 60 11 7 69 15 20 3 0 41 65 49 0 17 3 61 1 28 49 61 2 50 55 69 43 36 55 15 50 60 50 67 1 65 55 36 41 0 51 29 11 29 74 34 36 62 47 45 42
+CCJBBBBBBBLBBBLBJBBBLBBBBBBBLBLBBLBJBBLBBCCBBCJBLJJBBBJBBBCCCJBBJCLBJBBBBLBBBB
+5
+BBBBBBBBBBBBBBBBBBB BBBBCBBBBBBBBBBBB BBBCB CBJ JLBB
+100
+40 0 18 58 19 95 32 22 27 31 45 69 19 47 89 56 31 47 26 58 18 40 12 22 79 54 36 36 40 74 4 54 13 70 59 26 73 35 14 27 96 73 59 65 93 1 4 57 30 85 22 73 44 0 89 47 17 2 30 76 43 70 26 98 2 96 93 1 92 44 32 45 62 65 39 64 95 32 34 56 17 14 95 81 14 0 78 1 59 18 89 78 70 43 69 69 12 44 29 35
+IFIATAAAFFAITFAIFFAAIIAAAITTITAIFFIAAAIFAAIAIATAFAAATFAFIIFAAFAFIFIAFTAAIAAIAAIIIIAAIFTAIFATFIIIATAA
+5
+FIFF AAAII AIAIAAA FAAF AAFFA
+100
+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 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
+IIIUIIIIIUIIIIUIIIIIIIIIAIIIIAUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+5
+IIIIIIIIIUIIIIIIII IIIIIIIIIIIIUIIIIIII IIIIIIIIIIAIIIIIIIII IIIIIIIIIIIIIIIAIIII IIIAIIIIIIIIIIIIIIII
+54
+38 45 53 10 34 21 25 38 27 9 25 10 37 34 14 5 0 53 28 21 25 27 12 12 13 30 37 6 18 21 5 12 30 9 1 52 0 22 1 41 34 28 41 45 10 30 18 49 6 18 14 38 7 52
+WZZZWOWZRZZROWZZZRZZRZZZZZOWZRZZZOZZZRZZWZZZWZZZOZZWOZ
+5
+ZZZZR RZZ ZRZWZ ZZWZW ZZWW
+100
+6 65 97 23 97 22 6 81 34 33 15 60 60 33 34 57 49 6 75 26 24 0 22 40 93 40 0 89 3 19 36 40 34 45 45 59 100 33 99 18 9 97 17 45 22 42 3 64 69 69 65 15 81 93 57 57 59 32 1 49 93 69 23 59 23 17 50 40 23 24 24 42 99 64 65 17 64 1 15 62 4 60 99 97 42 3 81 3 62 9 64 80 4 22 49 32 45 89 62 2
+WWLLLFLLHLLLLLFLFFWLLHWFLWLLLLLHFFLWLLLHLFLLHLLLWWLLLLLLHLFFLWLLFLLLHLLLLLHLLLLWLLLLLLLLHLLLFFLLFLFW
+5
+LLLLLLLLLLWLLLLLLLLL LWLWLL LLLLLLLFLLLL LLLLLLLLLLLLLLWLLLL LLLLLWLLLLL
+100
+27 65 11 54 0 93 46 12 54 52 5 41 55 4 11 15 69 50 81 84 32 75 58 19 89 65 87 93 46 56 5 82 83 92 44 22 77 94 31 87 14 60 70 18 99 33 69 6 33 36 9 94 60 25 46 20 97 75 24 77 75 22 10 98 5 69 72 73 41 53 1 15 60 42 34 2 23 29 72 34 2 75 24 1 3 92 13 21 5 66 70 100 68 32 1 20 68 89 44 25
+HLIIMIUUIILIIILUUIILILILLUIUIUILLLUIUUUULIULUHUUUIUIILIIUIUHUUUULIULHLULIUMULUUUIIIIUULULUULLLUUIIII
+5
+UUUUUIUUUU UIIUUUUUU UUUUUUUIUUU UUIUUUUUUUUUUUU UUUUUUUUUIUU
+100
+40 25 0 0 7 35 35 46 6 20 6 81 3 51 40 88 13 30 99 4 51 46 68 71 3 31 96 20 65 4 37 7 40 6 0 30 3 13 71 37 71 96 65 12 63 4 46 7 25 63 37 65 71 20 12 99 68 13 87 51 7 63 37 13 81 31 12 35 30 87 4 96 20 99 96 51 88 65 25 99 0 87 12 88 68 40 3 81 31 63 30 87 46 31 68 81 6 25 35 88
+MZMMZUMZZZZUZMMZMZZUMZZZUMZZZUZZZZMZUZZZZZZUMUZZZMZZMZZZZZZMZMZZUMZUZZUZZZZMZZZZMZZZZMUUMMZZZMZUZMUZ
+5
+ZMZMZZZZZ ZZZZZMZMZZ ZZZZZUZ UZUM ZZZUZZ
+8
+0 8 1 0 0 1 4 4
+BBSSBBBU
+5
+UBBB SBU BBSB BSB BBBB
+7
+4 0 0 0 4 4 3
+BBVCVBB
+5
+BBVB VBB BVB BBB CBV
+100
+36 15 18 17 61 81 4 2 90 0 54 80 41 45 33 40 57 19 58 47 92 35 79 52 89 48 6 66 93 9 13 28 75 70 27 96 83 68 72 65 23 34 25 84 30 99 55 56 97 26 77 1 100 53 10 31 76 95 64 46 42 39 73 24 3 11 44 71 12 7 14 38 29 98 69 8 0 60 20 91 82 50 5 22 21 32 59 74 94 51 62 0 88 49 86 85 87 78 67 43
+UQQEUNNNEQNUQQUQEUQEUQUNQUUQUUUNQENUQEEEEUNNNNQUEEEEUEUQQENQNEQQUQUUEUQQUEUNUUENNQNNUUUENEQQUQQUQEEU
+5
+EUUE NEQQ UQQQ UQEU QUQUU
+100
+33 48 49 44 67 15 33 55 49 9 10 0 85 67 9 44 10 55 55 44 48 33 55 78 44 93 78 44 61 33 15 85 49 33 53 33 85 85 73 73 45 67 9 49 61 85 85 9 100 85 33 67 49 99 3 61 99 55 33 10 49 55 61 10 48 44 9 61 10 53 93 99 9 53 48 10 85 61 61 48 44 53 53 85 9 85 43 44 55 53 99 93 9 10 93 44 61 61 49 0
+EEEEEEEQIIEPEEQEEEEEEPEIEEEEEEEEEEEEEEEEEEPPIEEIPEEEQEIEEEEEEEEEQEEEEEQEQEEEEQEEIEEEQEEEEEEEEEEEEEEQ
+5
+EEEEEEEEEEEEEEEEEEE EEEQEEEEEEEEEEEEEEE EEEQEEEEEEE EEPQE QEQEE
+88
+62 79 44 80 35 64 75 5 32 9 23 19 61 79 18 19 36 25 17 64 61 43 85 49 19 18 66 55 62 71 0 85 32 20 31 44 32 84 45 52 9 35 37 5 76 25 68 87 4 10 80 4 52 62 66 81 36 71 36 27 68 61 49 3 51 81 83 17 17 43 51 45 10 18 35 37 10 65 66 64 38 13 43 44 3 49 37 27
+BBQJQBBBSJBBSBBBBJBSBBSBSBQBBBJJBBQJJJBBBBBBQBBBJBSQBBSBBBBBJJBQSBBSBBQBBBSJBBQQQBSBQBSB
+5
+BSBBBBBBBBB BJB BBBBQ BBJBBB BBBBBQBBB
+52
+12 44 4 0 7 49 6 47 10 52 2 50 48 51 51 15 12 50 50 47 34 19 19 9 47 19 9 2 44 41 45 10 3 6 12 9 18 7 48 29 44 49 7 15 6 52 41 46 51 49 0 3
+JGJFJJDJDFJDJJFJJFDJJJJJJJJJFJJJJFJJJJJJFJJDFDDGFGFG
+5
+JJJGJJ JJJJJFJJ JJJJJJJJJFJJ JJDJJJJJJJJJJJ JJJJJJFJJJJJJJ
+100
+58 54 24 24 54 66 100 1 49 6 45 61 47 37 30 35 77 47 23 77 55 39 100 27 86 35 96 23 30 8 54 55 49 65 88 65 52 63 7 63 45 60 14 91 7 92 64 97 71 43 39 0 35 46 71 97 61 52 7 48 88 90 23 1 66 92 66 86 59 6 90 28 55 19 50 6 27 67 45 43 61 28 93 62 84 56 91 90 39 58 80 14 56 67 67 14 58 47 77 37
+FFFFFKWWKFKKKFKKFKCFKKWKKKCCKCFKKFCFKKCKKKWFCCCWCCKCKKCWKKCCCWCKKCKKKFWKKKKFKFKCKKKCKCFWKFKKCFFWFKFF
+5
+CFKFKK KKCC WCF FCKKKKK KFFW
+100
+82 99 42 56 96 65 18 63 53 36 72 6 47 62 85 40 41 54 58 80 25 42 85 44 55 68 17 55 96 47 84 39 86 100 90 79 4 3 44 45 29 50 3 68 76 49 32 45 29 32 46 70 69 48 36 25 100 8 31 75 92 50 37 84 89 0 37 73 16 30 88 94 65 75 94 91 30 88 0 18 72 15 82 67 41 63 2 98 86 6 8 79 22 80 22 40 56 16 17 48
+LJDHLMUNLLLLLLMAFCLLLDLLULLLGMJPLLLXTLXLSZLVXJAGIHLLJSGSRJLGLJDLJLFEVJLDNLDKLLRSLDLMAFLDDJVJLZLXLMDD
+5
+JLLLLLLLLLL JLLLLLLL JLLLJ LJLL LLLJLLLLLLL
+100
+39 31 72 67 87 53 34 71 34 5 85 33 92 78 30 48 16 13 100 88 45 63 2 38 95 64 99 56 68 14 43 94 73 79 67 90 97 37 65 47 27 15 38 35 28 96 91 82 89 48 68 69 1 44 21 36 18 65 22 61 59 69 4 59 85 32 23 50 74 22 24 40 49 54 33 32 3 10 58 41 11 4 17 76 12 25 8 84 20 75 90 47 6 0 81 27 66 61 56 70
+YOASYAYYYALOYYLOOSSAOSSSYYAYYOALOSYLOLLOYYOASYYOASSSOOLAYLSALLAYAALOYYLOLALSOSSSSYOYLOLYASASOAALOYLO
+5
+YOO YAA AOLA OOO YYYY
+100
+46 46 20 46 46 20 46 20 20 20 46 46 20 20 46 20 46 46 46 0 46 20 46 20 20 20 20 46 20 46 46 46 46 20 46 20 46 20 20 20 20 20 20 20 46 0 20 20 46 46 20 20 46 20 46 46 46 46 46 20 20 46 46 20 46 20 20 20 46 20 46 46 20 20 20 46 20 46 46 46 46 46 20 46 46 20 46 20 20 46 46 20 46 20 20 20 46 46 20 20
+YYYYYYYYYYYYYYYYYYYAYYYYYYYYYYYYYYYYYYYYYYYYYUYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
+5
+YUAYYYYYYYYYYYYYYYYY AUYYYYYYYYYYYYYYYYYY UAYYYYYYYYYYYYYYYYYY YAUYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYY
+100
+30 65 12 26 85 3 64 51 6 89 38 56 70 59 95 10 30 36 44 16 25 53 87 80 84 38 71 84 21 88 43 21 15 28 89 38 46 78 66 78 36 32 53 65 94 17 75 31 14 19 78 1 83 9 35 41 63 61 20 64 9 54 53 4 42 47 66 96 56 5 49 58 0 48 72 45 72 31 47 77 71 96 0 45 19 11 32 70 1 55 53 23 72 79 76 70 93 85 16 91
+UFVVVVFFUVVVFVVUVFUVUFVFVVFVFUUUFFVUFNFFVVVVUVUVVFVFTVVUFVVFVFVUUUFFFNUNFFVVVNVVFFVUUFVVUFVFVVVUFFFF
+5
+VUFVVF VVVUU FVFVV VUVVVVV FVUFV
+100
+11 17 19 55 17 35 20 11 16 24 34 26 16 75 14 93 0 88 13 4 30 90 99 89 33 20 85 23 53 12 43 33 40 30 89 50 3 50 45 30 94 26 12 33 13 13 16 19 27 53 20 12 94 46 17 31 34 43 11 27 3 45 3 89 58 26 69 81 5 35 90 35 4 45 87 34 58 46 73 4 42 87 24 36 94 46 27 58 95 99 9 73 7 73 42 19 76 24 81 42
+YYJJDYDYDYJJJDYJJYJJYYDJYJJYYJDYJJJDYYYDYJLYJJYYYLYYLYDYYJYYYYYYYYYYDYYYJYDDYYYYLYYYDYLDJLYYDJDYYYLY
+5
+YDYYYYDYYYY YYYYYYYDYYYYYYYYYY DYJ DYYYYYYYYYYYYYYY YYJYDY
+100
+67 52 22 25 48 64 5 74 15 58 20 57 47 24 89 81 36 50 92 26 84 70 14 63 37 52 7 17 35 3 84 56 0 55 68 71 67 27 32 84 77 26 44 22 94 24 79 78 64 67 95 45 59 57 66 76 76 47 64 43 54 8 7 38 29 11 53 92 18 0 89 22 87 39 1 91 42 16 69 60 9 17 4 16 74 98 51 98 19 46 60 87 27 54 62 79 96 3 51 79
+VCYVLCFKTCXCCVJBZPJYCDKYZNUCVCCBCCZXXSQCCZAEALXNCELKMBCWTVDKCPOHCZJVRGYOCECLVPLCWCCXCCOCSCNXCENVCZCC
+5
+ZO DEAKN CCCCVCCC WBQEKPN CPC
+100
+33 95 14 97 90 38 54 47 32 3 51 1 83 70 98 21 6 80 0 88 22 39 31 38 84 10 44 99 77 65 96 73 66 71 91 30 29 30 14 68 43 75 74 80 15 13 45 45 99 82 85 41 57 66 95 5 74 11 76 100 40 82 34 69 70 60 18 32 87 19 5 23 36 39 65 88 17 29 44 53 57 9 41 31 16 76 93 81 20 10 54 7 26 48 9 24 52 42 56 75
+TQTQTEEQMMEQEQEQQTTEEMEMQQQQMTQMMEQQQETEMTTMQQEEQQMMMQQTMQQEQQQQQQQMEMMQTTTMTQQEMMMETQMEQQEQTQMETMMM
+5
+EQQEM EEQQQQQQ TEM MQTE TMMEM
+100
+74 0 81 53 85 0 41 79 38 44 67 67 26 22 81 5 22 74 79 74 37 6 5 79 22 85 38 2 37 2 38 74 81 51 79 79 6 85 44 5 6 44 67 85 79 53 5 37 44 38 85 26 85 67 74 2 81 81 2 79 22 67 22 38 41 93 0 44 37 37 44 26 22 85 81 53 38 74 85 81 0 38 5 44 0 5 22 67 22 79 44 79 85 22 79 38 26 81 41 44
+OSMOMZUOOSMMOOMOOOOOOOOOOMOMOMOOMOOOMMOPAOMMOOOJOOMOMVOMMMMNOMOOOOZOOOYOOMMOOOMMZOOOZOOMOOOOMOOOGMOO
+5
+MMMMOO MOOOOOOOOOOO OJM MOMOOMO OOOMMOO
+100
+36 77 12 52 41 13 83 7 93 17 91 32 69 92 70 78 95 35 20 47 9 27 72 0 61 76 49 39 26 25 71 2 34 64 33 3 8 11 4 22 85 55 30 79 74 24 58 84 10 42 80 46 40 0 86 6 88 98 87 57 53 29 90 99 67 56 18 48 23 44 16 94 66 38 54 65 5 62 14 37 63 51 50 59 28 60 75 43 81 19 97 31 15 21 1 45 100 73 68 82
+OQPOPPUPQQPUUQUUPUOUOPQUPUUPQQQOQUOQQQUQOPOQUPOPOQUQOUUQPQOOUQOUPOPQOOPPUOPOPOPOUPOUQOQUPQUQPUUPOPOP
+5
+POOUP QOQUO OUPUP PQPOU PQQOOUUP
+100
+0 92 56 54 95 32 90 11 17 87 2 46 70 29 18 59 40 77 40 95 76 94 85 12 28 65 88 17 6 74 37 39 5 6 58 68 6 61 23 91 24 14 49 36 95 20 0 6 63 95 83 63 3 79 79 55 70 42 27 75 46 93 90 71 71 18 26 100 36 81 77 16 23 25 34 64 78 8 88 77 58 61 14 33 43 5 68 24 90 0 52 51 13 63 69 91 73 11 2 64
+SMMZMSZSSSCSCMSZZCZMMCZSCZCMZZSCCZZCZZMZMCCSMCSZMMSMCSSZCSSCSZZSSSMMSMCMMZSZMMCCZZCSSCCMZSCZSZZSCSCZ
+5
+ZZSSZ ZMCSZMZ MCZZ ZCZC CMZC
+69
+43 19 20 5 22 1 43 9 7 15 13 8 20 41 64 69 23 15 3 38 22 46 42 22 5 62 49 69 40 10 44 33 8 27 55 33 41 15 42 31 31 6 64 9 69 20 8 59 3 51 62 46 68 53 0 5 24 62 33 24 53 42 40 16 41 49 53 13 0
+SMSMEISEIIMMSMSEMMIIMMISMMIMMMEMMMMMMSMSEMSMMSMMEMIMEMIMMMIMMMMSMMMMS
+5
+MMMMMMIM EMMMI MMEI IMMMMIMM MIIMMMMM
+100
+13 36 59 80 21 98 10 32 91 11 55 96 92 95 31 92 14 12 6 90 65 65 11 64 82 79 72 18 63 68 59 43 85 83 23 38 22 79 33 100 8 41 78 66 71 42 30 76 93 38 86 87 50 44 56 48 8 81 73 20 27 71 31 46 47 57 17 3 15 0 24 51 66 29 69 54 45 70 56 75 97 90 26 4 74 62 9 81 1 91 77 76 23 17 86 16 74 96 36 89
+IHCOHOHIOOCCHOOHHOHHOOOCICHHHHCHOHHOHCHHCOOHHHIOIOCCHIIHCHIICHOICOIOHIOOHIICICICOHOHCIHHIOCOHICICCHO
+5
+HHHCI OOOHH OHCH HHHH IHHHH
+100
+69 80 6 93 34 18 87 63 40 7 98 53 63 20 52 66 96 55 64 55 96 33 42 81 89 91 83 63 83 85 86 60 72 85 73 65 36 91 36 53 6 24 52 80 35 75 55 10 36 47 72 24 45 34 35 89 68 37 98 47 86 2 34 74 42 83 10 71 0 98 81 23 62 15 56 4 95 80 78 0 86 14 15 50 68 69 52 96 24 14 53 75 65 14 35 72 89 30 46 40
+KNFSNSMFFSFSFSDFFMFMFFVHDFSFSMCFSMXMSFSSFXDNDSMFSSSXMSDDDFFSLCSSDSFSBFHMHMMFGNCBCFMFDNPFXFSMLFDSDSMF
+5
+SFSS DMM FFMFS FMSFF MSFSS
+100
+0 61 89 66 88 50 76 27 8 12 100 61 35 24 25 86 40 36 35 89 20 37 80 70 75 76 14 73 10 38 94 33 21 44 25 51 28 7 60 69 93 66 70 78 30 92 62 53 64 65 92 41 55 99 98 30 46 11 44 53 1 21 64 77 85 6 59 1 68 83 78 34 10 58 79 62 88 24 51 36 37 52 91 93 55 60 97 65 69 15 28 82 20 23 0 100 8 81 94 46
+ZKZICCRPCDPKIXACBPUMVFCUCRIVBXIFTPAWTUPHTIUWWXFWIPXFZMUWWCPWLTIAWACLKDWCBAPXCXWPFRFTXPAPDIVUUAXKCRTW
+5
+WUP AF WXP MU PCP
+100
+47 63 56 34 86 10 61 15 63 0 39 15 88 46 21 39 47 63 38 63 10 10 61 61 63 83 61 61 34 34 21 6 22 10 47 46 34 39 10 61 38 88 61 47 86 21 10 39 22 46 88 6 34 22 39 10 15 61 38 88 10 6 10 63 47 22 34 22 39 15 63 15 47 61 83 34 86 61 15 34 88 31 39 83 47 39 86 39 34 15 34 38 83 38 6 47 63 46 22 63
+QQQQNGQNGBQNNBQQGQNQGGQQQNQQQBQQQGQQQQGNNNQQNNGQQNNQQQQGNGNNGQGQQQQQQNQNQQNQNQNQNNQNQQNQQNQNNNQQQNQQ
+5
+NQQQQQNQ QNQNQNQ QGQQQQQN GGQGGG BNQ
+100
+49 0 84 99 45 80 43 52 0 71 2 3 31 26 30 87 85 8 50 41 28 48 42 59 88 56 35 77 16 63 17 18 83 94 10 91 65 67 4 27 92 58 79 69 37 47 72 93 22 23 98 51 15 86 100 76 0 12 11 0 74 68 54 32 61 64 53 19 20 60 38 44 24 7 78 9 90 36 82 40 46 73 39 97 66 14 0 1 62 29 21 75 57 96 70 95 34 25 5 89
+IWWIIEWWWFWWWWWEFEWEIWWFWFWIWWFFFWWEEFFEIWIWWIEEWWWWEFWFIIEWWEEWWEIWWIIEIIFWFWFEIWEIIIFWWWEEWFIFFEFF
+5
+WWWWEW IFWF WEWWI FEWF WWWEWW
+100
+0 73 77 73 45 40 69 62 77 32 69 27 15 73 1 69 70 56 15 77 95 63 77 45 56 45 70 70 63 69 62 0 56 45 96 73 28 73 46 1 15 15 15 69 1 70 45 17 77 100 96 73 27 56 56 79 15 100 27 73 15 1 32 46 27 27 45 15 32 0 15 28 32 28 17 28 70 45 0 100 73 62 69 45 63 63 15 77 70 27 40 27 17 46 32 70 73 45 73 0
+GGGGGGGGGGGGGGGGYGGGGGGGGGYGGGGGGGGGGGGGGGGGYYGGGGGGGGGYGGGGGYGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGYGGGGY
+5
+YGYGGGGGGGGGGGG YGGGYGGGGGGGGGG GGYGGGGGGGGGGGGGGGG GGGYGYGGGGGGGGGGGG GGGYGGGGYGGGG
+100
+59 82 1 67 78 40 99 16 0 70 90 0 41 34 21 45 50 8 74 94 68 57 58 7 76 4 75 71 38 29 54 85 49 37 48 86 24 31 32 47 55 15 33 84 0 18 87 61 39 6 96 42 51 19 23 72 0 9 52 95 65 28 88 5 3 81 92 46 89 77 43 12 53 69 14 63 100 35 20 97 83 79 13 11 80 26 30 98 25 66 36 44 22 73 10 27 56 0 93 62
+FFNFXANXNAXNANFAFFNNXAXANNXNNAXXAFNNXFFNNNXNNNFFNANAAAFXNAXXXAXFANXAXNFAXFAFFAANFXXFAAXAAAFAAFXFNNFN
+5
+XFNN XFXF XFFF NFANA FANA
+100
+19 12 10 8 12 63 87 33 37 85 3 52 77 52 80 14 27 99 30 3 39 60 6 27 76 39 86 59 86 0 66 47 0 59 15 47 31 94 67 83 58 45 100 59 4 55 63 37 29 29 70 13 77 97 52 31 14 6 96 96 87 97 53 55 82 30 68 33 58 67 12 14 55 38 3 30 0 99 86 68 38 31 1 47 33 76 1 97 56 82 79 99 27 19 70 66 1 60 25 94
+YTBYTTTITTTTBIBTTTTTTTTTTTITYITTBTTTYYBTTTTTBTITTTTTYTIBTYIYTTBTTBYYTYTTTTTIITBYBYBTBBYTYTTTTITIITIB
+5
+TITY TTTTTTTTTTTTYTTT TTTTTTTTTTBTT YTIY TTTTYTTTTTTTTTT
+100
+93 22 8 97 93 28 81 56 15 79 57 89 53 20 100 14 73 57 43 45 26 87 66 78 99 77 72 100 31 59 40 92 69 57 19 24 25 11 47 28 100 0 61 99 26 91 6 78 28 0 45 37 65 29 66 92 0 49 50 86 16 3 71 29 24 71 39 22 49 1 21 46 3 93 31 40 86 17 41 90 74 32 12 50 51 100 49 44 82 48 90 97 45 38 91 14 85 44 85 57
+RLJLLDLVLLZTLUTOILTEFZLOZELPZLOOLLLLTTTUZLXZLZZEEDBLTLLVWLTLDLLLZZLKULOTCZLLSNTLTDLLYBDLZUOAULLLTLMB
+5
+ZOT TO LLLLLLTLLLL LZT LLLLLLLTLLL
+100
+99 44 99 57 28 97 66 78 58 82 35 55 0 51 46 39 15 57 78 41 27 89 82 73 94 95 90 71 24 41 17 48 61 81 73 0 72 3 33 25 61 82 19 63 88 27 63 17 45 32 19 19 63 93 74 16 75 23 82 73 29 24 54 72 39 31 50 52 50 15 14 84 75 34 45 49 86 2 10 90 61 40 47 99 5 22 25 93 45 5 43 48 0 99 61 29 13 18 43 56
+HHIHHHHHHIHHHIIHIIIHHHHHHHHIHHHIIIIHHHHHHHIIHHIIIHHIHHIIIIHHHHIHHIHHHHHHHHIHHIHHHIHIHIHIIHHHIIIHIHIH
+5
+HHHIIHHHHI IHIHHHIH HHIHHIIIH IIIHIIIH HIHHIIHH
+100
+46 13 60 70 22 84 24 7 0 82 57 63 99 21 62 50 1 10 25 68 81 37 71 64 47 97 72 100 52 54 44 87 19 83 56 0 14 15 16 66 17 96 35 74 18 31 29 90 12 32 92 61 23 80 91 11 42 8 9 78 65 93 0 36 49 51 58 59 88 2 30 79 95 94 98 86 43 89 75 40 55 48 27 41 6 38 67 3 20 5 69 33 39 53 4 76 45 77 26 85
+CAUCUCAAAUUUVCCCVCUVUAVCAUCUCUCAUAVAVCVCAVAVVUVVCUAUAAVCAUUCAUAUVUACUUCUAAVUUUAVAAVUVAVAACCVAUVCACCA
+5
+AUUV AUCVA VAVU CAVAU VVAAU
+100
+53 86 23 67 17 75 100 48 81 56 77 72 20 1 9 0 70 90 89 97 52 23 46 51 79 19 32 78 82 7 1 86 21 48 50 38 8 43 21 92 13 35 65 79 97 59 78 5 65 60 49 3 57 96 64 45 55 34 50 96 7 56 39 88 3 71 49 12 39 100 94 16 45 28 84 18 75 32 15 60 72 35 87 88 58 5 0 68 8 64 25 91 51 34 20 15 31 73 12 84
+DUDUDUDDEUUDEUDEEEEDDUDUEUUEUUEDUDDUUEDUUUEUDEUDDDDEEUEDEEEDUUUDDUEEUEEDEUDUEDDUEEUDUDEDEEEEUEUDDUUD
+5
+DDEDDU UUUUUEE EDEU UUEUUEUUU EEUU
+100
+0 52 46 19 80 47 58 88 29 78 42 98 87 71 16 94 40 63 0 97 36 90 21 0 22 48 82 86 64 95 89 26 59 13 1 79 83 11 4 73 60 62 30 84 18 27 70 9 92 53 39 5 44 6 91 54 81 68 74 99 25 77 76 61 50 20 0 85 32 41 72 100 28 51 31 34 49 15 33 35 7 23 43 8 17 65 56 93 37 24 3 96 66 75 69 55 67 57 2 45
+NNQJIINQINININQQNINQJQQNINNJQJQQQNJNJNQIQQQNNJQNIQINJNNJQIJINJQJIINIIJIQQNIJNIIQJIIIJNQJJJIQNNNJJIQJ
+5
+JQQIIN QNII NIQI INQN NNJJQQ
+100
+32 40 72 47 78 30 26 29 4 0 40 37 70 94 37 26 37 89 66 29 40 43 43 43 40 10 66 42 89 0 43 89 37 4 78 47 0 47 29 89 29 89 47 0 29 94 0 78 94 6 72 29 29 36 26 44 94 66 44 4 40 29 43 66 44 89 38 66 78 89 42 10 37 26 78 40 66 89 17 26 37 78 94 4 26 37 38 29 0 26 44 29 38 30 26 78 70 26 94 40
+JXJXXLJPLPLXPLJXPJLXLXPAPLAXPJAAJJAXPPAXJLAAAJJXXXPAPAPAALAAJJLJXAXPAXXJXJAXAPLXPPLAXPAJPPAXPPPAXPAA
+5
+ALJX JPJA APAA LAA JAXP
+15
+5 9 0 5 0 8 15 5 0 0 7 0 0 5 0
+AAAAEAEEEAGAAAG
+5
+AEE AEAG AAAE EAAAAA EEAA
+100
+77 94 86 54 41 53 17 76 44 35 92 73 29 55 69 69 70 86 94 65 46 77 92 33 26 24 80 91 10 40 29 86 76 9 33 67 60 29 92 5 64 51 27 8 65 10 53 64 73 0 26 51 36 55 8 48 46 77 94 5 46 60 9 50 5 98 74 56 99 41 65 68 10 76 60 0 44 68 82 35 68 36 91 25 3 44 14 17 8 14 89 80 18 26 91 18 25 56 100 64
+TTWTTTTTTWTTTTTTTTTTTTTWTTWTWTTTTTWWTTTWWTTTTWTWTTTTTWWTTTTWTTTWWTTWTWTTTWTTWTTTTWTTTTTTTTWWTWTTTWWT
+5
+WTTTWWWW TWWTTTWTTT TTTTWTTTWTT WWWTTWW TWTTWTTT
+64
+12 9 53 53 44 0 51 51 21 26 56 34 47 37 55 52 11 16 51 11 63 12 11 46 39 61 32 46 1 63 6 39 26 63 37 47 6 1 0 44 58 32 39 43 5 61 52 34 26 35 60 43 12 25 44 43 35 37 53 21 34 56 0 35
+ONNNMMNNMNINNNNMNNNNINNNMINNNNNONOININNNNNOMNOONNNIMINMMNMNNINNN
+5
+NIMNN NNMNN OMO INNNNNNNNNNNNNN NNNINNNNNNNNN
+100
+68 65 59 49 55 62 86 24 6 72 33 68 20 9 93 55 15 93 52 97 10 20 92 9 70 34 55 58 87 93 0 28 97 95 10 34 14 70 24 28 58 88 47 52 20 70 92 19 9 34 88 23 47 49 95 59 33 79 97 20 58 75 70 33 15 88 65 9 47 95 19 79 95 72 100 68 73 72 62 88 41 49 62 72 28 97 62 15 24 24 33 75 47 19 23 52 87 14 28 0
+GMXGMFFFDXGXDGXFFFDXFGGXDDGGFMXMGGDGGDGFDMFMGMMXGXDGMFMDXMDFGDMMFXFFMXMFDXXDDFGGXGGGGFXDXGFGDDFFGDXF
+5
+DXGG FGFM MGXX GMDG FDMG
+100
+73 50 47 35 42 97 90 23 90 14 5 38 20 22 25 94 20 64 73 18 64 5 26 55 49 95 1 23 20 13 33 77 44 6 86 29 29 97 53 38 91 86 18 42 55 8 18 17 80 49 50 83 19 59 79 8 4 27 26 59 3 1 62 4 10 35 25 53 3 23 3 8 42 66 68 38 53 0 4 95 26 25 47 91 27 0 85 6 81 81 14 77 66 97 73 64 33 49 5 33
+GGCCCGGCGGGCCCGCCCGGCGGGCCCCCGCCGCGGGGGCCGGCGGGGGCGGCCCGGGGCGCGGCCGGGCGGCGCCGCGCGGCCGCCCCCGCGGGCCCGC
+5
+GCGGGGCGG CGCGGCGCGG CGCCCCGGC CGCGGGGCGC CGCCGGCCGG
+100
+93 12 70 14 49 16 80 34 33 15 81 28 67 24 42 88 83 3 25 23 0 99 3 12 64 27 55 66 34 64 4 56 26 79 49 9 68 48 40 14 56 100 54 69 82 21 36 29 9 29 43 67 52 52 51 18 17 80 83 22 96 63 66 78 39 5 91 88 45 16 25 38 11 98 90 15 72 57 71 32 74 13 7 24 96 56 13 42 37 87 81 0 75 80 44 94 78 92 71 4
+LLYYLLYLYLYYLYLLLLLLYYYYLYLLYLLLLYLYYLYLLLYYYLLYLLLLLLYYYLLLLLYLLYLLLLLYLYLLLLLYLLLLLLLLLYYYYYLLLLLY
+5
+LLLLLLLLYLL LYLLLLLYLL LLYYLLYY LYLLLLLLLLYLL LYLYLYLYLLL
+5
+2 0 0 0 2
+NRNNN
+5
+NR NRN NNNN NRNN NRNNN
+100
+5 56 9 60 76 9 32 89 49 38 88 89 34 0 96 93 96 29 70 12 78 37 43 49 8 39 1 76 44 37 63 6 68 20 34 20 60 22 14 1 12 68 22 24 55 4 62 46 17 66 88 15 26 8 39 28 3 45 70 97 56 54 81 51 79 51 29 85 32 2 62 5 63 57 81 69 72 86 72 0 11 18 44 43 18 64 15 53 98 83 28 85 41 53 14 45 83 74 40 42
+HJTTTTJHNNHHTTHTHJTJHHNNJJJTHHTTHNTNTJHJJHJTNHTJJNHJNJJHHTTNJNNJNJTHJNTHTTNNNTJTJNNNNNJTTJHTNJHTJNNJ
+5
+NHTT NNJNT JHTH JNTHN NHN
+100
+11 26 50 90 4 87 85 31 17 80 5 18 73 20 87 11 88 20 87 36 38 9 54 21 71 49 100 14 62 58 58 94 93 94 48 78 90 16 0 50 70 11 0 41 21 29 51 84 35 74 31 98 51 45 99 49 83 92 47 23 36 21 80 27 96 21 92 75 72 14 43 79 27 88 30 64 10 60 94 81 22 48 96 6 46 11 34 39 41 56 98 27 49 59 81 15 79 80 57 77
+BBBQYBBBTBTBBTYTYTTBQBTBBTTBQYYBBYBYBBBBYBYBQYBBTYBBBYBYYYTBQTBTBBBBBTBTTQTBQQQTQBQQTBTQBTBBTBBTQYTY
+5
+QBTT YTBYYBBT TBYQ TBYYBBTBY BYBB
+100
+39 54 91 5 82 62 91 87 65 20 80 47 85 35 0 69 23 46 100 73 55 70 72 36 57 51 98 48 50 96 6 3 6 18 65 78 31 12 53 58 42 33 98 77 32 93 44 78 43 30 48 33 30 59 49 97 83 74 35 57 10 91 49 60 72 17 73 51 40 52 86 0 99 33 15 92 98 88 11 51 49 55 21 98 93 37 45 76 62 13 66 61 72 88 72 76 38 37 18 41
+PTTPXXTTXPITPIXIXPPXTXTXIPXTXIPXPIPTIXXXTTXPPXITPTXITITIPTPIITITTPXPPTXITITXXITPITXXXTIPXIITTITPPTIX
+5
+PTITX PTXPI IPITT TITXX IXPX
+100
+58 37 81 89 65 84 25 85 93 30 89 43 90 85 99 56 29 55 80 98 17 75 61 93 96 57 80 34 44 83 50 96 18 84 93 43 94 32 75 13 66 56 93 73 3 30 30 46 76 67 63 57 44 18 81 80 14 29 35 26 16 78 27 57 81 29 100 56 19 84 38 38 71 69 43 90 27 22 83 54 48 45 35 22 49 68 90 67 98 24 94 14 0 52 0 65 64 44 26 10
+XDDXXDXXDXXXDXXXDXDDXDXDDXDXXDXDDDDXXXDXXXDDXXXDXDDXXDDDDDXDDDXXDDXXXDDDXDXDXXDXXDXXDDDDDXXDXDXXDXDD
+5
+DXXDXDDDXD DDDXXDXDX XXDXDXXDDX XDXXDXXD DXXDXDDXXX
+100
+10 86 68 21 17 77 47 26 30 37 22 73 25 76 13 53 9 98 55 52 15 94 76 35 90 46 35 26 49 84 58 74 83 47 77 32 96 72 11 92 65 1 40 8 66 61 60 15 58 34 37 2 78 93 97 12 90 56 81 51 5 6 7 86 42 96 18 19 40 29 32 3 64 89 31 33 36 57 16 78 33 38 45 20 65 0 80 28 75 70 87 71 53 57 82 29 56 36 22 99
+PPPCCPPCCCPPPCCPPPPPPCCCCPCCPPCCCPPPPPCPCCCPCCCPCCCCCCCCCPCPPCCPPPCCCCPCCPPPCPCCPCPCCCPPCPCCPPPCPCPC
+5
+CCCCCCPCC PPPP PCCPPPPC CCPPPCCPC CCPCPCCPPC
+20
+0 20 11 5 11 1 8 14 5 0 0 0 1 0 12 7 12 8 11 11
+DEEEDEEYEEYDVEEEEEEY
+5
+YEEEE YEEEEEE DYEE EDEEE EVEE
+100
+35 0 100 96 26 26 47 55 55 83 0 38 62 12 24 38 62 19 0 11 55 83 96 0 62 2 11 83 26 44 19 100 24 2 0 53 11 0 38 55 11 16 47 2 16 83 38 24 83 0 0 24 0 19 38 62 53 50 62 35 51 38 96 19 2 35 100 51 55 100 62 39 24 55 24 55 100 83 55 26 44 100 38 26 26 26 12 39 83 100 2 2 26 26 11 38 26 55 100 0
+XDXXXXXXLXCQXAXQJIHXXXXGXHXXXXXXXXIIXYQXGXXQXDQXXNQXQXFZXXXXXGXXXXXXXAXXXXXXXXXXXXJXCXXXXXXGXXXTXXXA
+5
+XXGXXXXXXXXXXX XXXQQ JXX XXXXXD XXAXX
+3
+0 1 2
+OOR
+3
+O OR R
+1
+0
+C
+1
+C
+100
+87 63 76 22 88 44 21 53 42 46 20 63 47 60 29 73 52 29 22 66 46 45 81 63 69 46 55 13 8 82 11 1 76 100 52 5 15 46 26 81 52 25 18 90 66 8 0 83 100 5 73 29 0 10 88 52 100 83 13 28 45 83 3 18 70 53 76 15 94 3 82 28 25 63 25 47 11 87 82 10 88 88 20 10 59 25 13 94 44 76 73 44 73 0 83 0 60 15 47 29
+UVUVVVVUVUVVUVUVVVVVUVVVUUVVVVVVVVVVVVVVVUVUVUUVVVVVUVUVVVUVVVVVVVVVVUVVVVVUVVVVVUVVVVUVVVVVVVVVVVVU
+5
+VUVVVVVUVVV VUVUVVVVU VVUVUVVU VVVVVVUVVVVVU VVVVVVVVVVVVUVVVVVVV
+100
+78 31 48 39 25 55 25 80 97 78 13 81 57 27 34 60 36 69 36 83 42 2 95 17 39 19 28 86 4 33 88 84 21 21 10 7 31 73 76 63 62 82 77 5 51 27 4 91 20 89 90 14 1 18 7 46 75 48 37 0 70 47 72 44 43 64 68 45 42 85 23 93 29 100 82 59 22 49 74 50 56 43 77 69 71 16 12 0 65 85 61 87 52 64 88 9 89 33 1 5
+MTMBQMYSMMSZMVSKMMMBZUTSBSQGYSKSMHSZTMVSMIVZYVYZYZBBSSZBZMGDBZMMBSMZYVGMZMYFYZSMYBVMFTMLYVYSYSKSZSSZ
+5
+SZMMM ZMMZ TUYV TTG GF
+100
+22 37 54 91 34 49 8 0 60 52 90 92 56 52 17 69 5 62 33 2 82 62 97 37 32 36 54 18 22 29 46 55 74 85 94 89 77 90 58 73 19 2 61 73 37 62 3 32 17 32 91 59 61 85 88 46 90 34 68 27 17 97 3 26 100 54 25 64 7 61 29 16 68 64 24 48 97 16 44 0 44 83 72 18 69 25 68 98 0 34 46 18 15 59 40 5 85 36 56 72
+CLCUSLSCAUCCCLUSLCUSUUCCAULCUAACSUUACUASUALUSALCSLULLLCALLLUSLCUSUCUCCAUASUULUCCLCCSUAUCALCLCLUCACUC
+5
+CLLC LAC ACUL CCC SUUA
+100
+18 23 31 31 34 15 34 34 18 13 13 83 18 23 66 95 66 0 12 13 95 34 18 90 12 15 32 31 90 71 66 0 17 66 0 13 66 13 18 12 17 23 90 95 34 23 15 0 17 66 65 71 90 31 23 12 48 13 95 12 17 34 31 13 0 0 13 17 65 15 0 90 90 34 17 18 37 12 34 23 35 12 0 31 23 12 13 37 31 66 65 34 95 12 66 31 34 90 23 23
+KKKKKKKKKKKYYKJKBBKKKKYKKKKKKKRXKGXKMKKKKKKKKKKXKKKKKKKKKKKKKKKKQRKKKKMKKKKKKKKKKKXKKKKKKIKKKKFKKKKK
+5
+BY BKKK KKKKKKKMKKKKK BKK KKKKKKXKKKKKKK
+100
+31 88 87 63 8 1 0 24 15 35 65 29 57 98 47 68 87 67 42 76 59 18 39 34 28 28 68 20 8 74 95 9 23 40 49 47 39 66 32 64 66 60 68 59 51 97 86 14 31 77 82 43 9 10 72 68 100 20 94 98 54 74 29 57 19 94 75 7 51 47 55 30 30 33 100 80 29 13 28 24 80 6 79 4 22 44 37 36 51 22 53 48 60 84 30 48 27 97 97 65
+GXYBGBXGFXXGGBXXFXYBBGFFXYFXFBGXXGFXYBFFBFGYBYYXYGFBGGBGYBGGXGFXXBGYYYXFXFGYFYXFFGBFGFGXGGGBFXYGGGBF
+5
+FXY XBXB BFXX XXGX FGGY
+100
+37 18 23 84 33 98 29 16 27 41 95 74 66 74 5 37 46 5 0 96 76 93 74 9 66 99 26 6 89 38 81 19 99 37 29 40 99 26 2 12 12 79 40 6 66 7 46 84 95 76 46 38 2 19 56 96 93 28 94 3 73 34 98 90 69 23 94 0 26 98 3 97 34 97 70 69 44 76 18 93 89 81 44 7 3 27 68 16 19 69 32 65 7 23 18 29 68 32 68 6
+HHBHHHBHBHHBHHHHHHHHHHBHHHBBBHHHBBHHHHHHBHHHHBHHHHHHHHHBHHHHHHHHBBHHHBHHBBHBHHBHHHHHHHHHBBHHBHHBBHHH
+5
+HHBHBBBH BHBBBBB BHBHHHBHHHH HBHBHHHBH BHHHHHBHB
+100
+51 49 82 63 56 26 92 1 39 66 59 94 28 71 69 91 37 40 61 86 42 73 78 68 34 79 8 83 85 96 100 57 75 31 3 7 19 72 48 55 44 35 84 65 93 47 27 36 22 14 4 11 88 15 9 25 23 33 10 53 52 89 5 2 60 24 18 45 74 80 0 54 6 50 90 70 12 16 87 81 97 29 30 38 46 21 76 95 64 99 17 13 77 62 32 98 20 43 41 67
+RUKETQISCMRCQJDXPPKDVIUDVBGQKAJDFMIQBWEJYQRKTMBXXCCQMCACYERASRPHPCFKBJSIALBNSOYELAKHKQXWSEPOKUSLLMIB
+5
+SGBMKKAKIQ DSWMAPK EJNXYB QSKBPPXOUYDSWMAPK DLL
+100
+69 80 95 77 59 17 3 22 44 96 83 92 35 19 69 77 57 58 3 25 37 84 91 0 46 10 1 51 74 31 68 44 98 83 55 73 12 81 35 29 88 75 0 65 16 2 12 83 75 32 5 87 48 55 34 95 96 94 30 27 40 29 26 47 26 59 8 71 90 26 70 69 29 38 45 7 68 79 19 26 95 44 0 5 15 92 58 66 14 25 63 95 68 10 49 11 49 55 93 23
+YOYTRRYOYRERETYTORERETTRYYTOTYYOORROTETOYYROEYRREERERTEEEEEYORYOROETREREREOYORRROTREYTTYTYEEEOOOOTEE
+5
+YEET OEOO RRE RYRY TOYE
+100
+17 100 62 85 17 51 53 53 83 9 6 60 55 28 73 72 86 39 57 65 60 48 28 82 38 11 95 33 73 63 45 96 73 63 63 62 67 88 84 28 48 70 11 3 84 100 60 6 76 11 0 89 29 38 69 6 17 9 100 57 63 17 84 70 5 65 1 69 73 69 67 5 86 48 67 1 69 77 89 89 45 83 88 88 57 0 72 51 83 55 60 83 53 77 33 84 96 77 28 5
+FECHXQEESEJEEYEENEEEEEEEEEEVVEEEEEEEESCEEEEESEEJDEZEJESETEEVEJVESEJEMSESEEECJEEEECXZCZESJEEEEECSUEAY
+5
+YC EEESEEEEE JEJ SEEEEEE EEHEEEEEEE
+100
+28 52 53 32 28 34 98 17 0 19 85 81 51 4 11 91 67 26 72 80 32 91 85 77 95 67 32 11 17 53 74 85 96 32 92 64 64 74 34 55 57 14 94 85 91 52 28 90 14 52 21 72 90 80 4 6 67 53 55 81 51 76 51 15 28 80 44 1 92 55 77 11 55 4 0 15 72 80 74 4 34 95 17 92 9 14 98 92 52 44 67 72 91 90 34 90 39 23 94 95
+LDDDLLLDLDLDDLDDLDLDDDLDDLDDDDDLDDDDDDLDDDDLDDLLDDLLLDLDLDDDDDDLLDDDDDDDDLLLLDDLLDDDDDLDDDLLDLLLDDDD
+5
+DDDDLDLDDDDDD DDDDDDDDLDDDDDD LDDDDDDDDDDD LDDLLDD DLDDDDDDDDDDD
+10
+0 9 1 6 0 5 1 2 5 5
+BNEEBNEEBE
+5
+EN BEE EEN NEEEE BEN
+100
+68 86 20 84 74 22 11 0 20 20 0 50 7 36 20 22 74 2 50 0 20 86 68 84 68 74 74 31 88 20 0 22 11 51 11 20 86 74 2 37 2 2 31 50 22 7 84 0 2 86 0 37 68 36 7 2 20 74 2 37 74 84 68 84 84 7 2 86 50 7 50 48 84 86 7 50 37 22 74 2 33 2 50 94 34 0 22 86 34 31 36 50 50 0 74 84 68 74 20 7
+QYYQQQYQYYQQQQYQQQQQYYQQQQQYQYQQYYYYYQQQQQYQQQQQQYQQQQQQYQQQQQQQQQQYQQQYQYQQQQQQQQQYQQQYQYQQQQQQQQYQ
+5
+QQQQQQYQQQQQQQQQ YYQQY YYQQQQQQQQQQQ QQQQYYYQQQQ QQQQYYYQ
+100
+59 27 58 94 47 53 42 60 29 76 44 15 33 89 1 32 5 21 34 43 90 55 36 41 77 81 57 80 88 3 93 6 37 83 11 24 23 86 99 12 9 2 61 70 82 67 16 22 52 97 73 71 4 64 54 79 0 17 96 95 65 51 56 72 39 98 74 18 62 84 20 28 100 31 19 92 87 13 14 25 75 69 91 10 26 46 85 63 49 38 45 78 50 35 66 48 30 68 40 7
+HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+5
+HHHHHHHHHHHHH HHHHHHHHHHHH HHHHHHHHHHHHHHHHH HHHHHHHHHHH HHHHHHHH
+100
+76 26 86 85 12 20 12 53 3 24 1 69 22 65 84 92 60 34 14 59 0 70 69 59 16 54 21 84 38 51 14 98 93 93 79 57 48 42 79 61 28 10 90 86 15 27 85 34 73 13 63 2 96 4 81 46 48 80 72 25 44 85 68 24 60 24 73 19 40 51 60 90 36 23 32 0 59 1 31 44 7 89 63 55 94 78 6 16 54 26 82 87 22 28 7 30 92 63 88 3
+PPKKPPPKPPKKPKPKPPPKKKKKPKPPKPPPKKPPKPPKKKKKKKKPPKKKPPPPKKPKPKPPPPPKPPPKKPKKKKKPKPKKPPKPKPKPPKKKKKKP
+5
+KPKPKPKPKPKKPKPK KPPKKPKPP PPPKPPKK KPPKKPKPPK PKPPKKPPK
+4
+4 4 2 0
+TLTT
+4
+TT TTL TL TLT
+100
+56 31 24 57 38 64 93 87 16 64 59 25 2 45 73 25 81 86 73 17 75 69 58 17 50 85 67 26 6 89 37 80 96 85 2 3 78 99 61 100 13 52 1 91 77 6 5 47 83 24 22 92 10 81 20 91 26 44 95 27 51 30 62 55 87 18 70 94 63 49 12 21 35 95 68 28 7 76 41 54 88 1 4 14 11 32 27 33 34 12 80 38 78 0 72 98 61 74 37 36
+DDUUUDUGGUUDUUGUDUGUUUGDDDDUGUUUUUUUDDGGUGGUUGUGUUUUGUUUUUUGDUUDGGUUUUGUDUUUUDGDDGUGDUDUUGDUUUDUGUUU
+5
+UUGUDU UUUUDUUUUUUUD UUDDUDD UDUDDUUU DUUUDUDUUUU
+100
+27 45 76 8 58 95 44 19 16 23 3 36 75 6 77 36 1 68 97 15 87 82 46 4 37 35 56 99 10 14 38 89 86 20 17 98 21 13 69 76 92 67 28 27 8 51 25 11 73 22 70 55 71 69 17 63 96 80 35 74 29 86 24 63 50 40 78 48 30 0 56 99 85 91 88 23 45 18 24 61 72 34 64 16 79 53 48 2 31 12 5 7 50 0 66 49 94 83 21 57
+XLEFNIPNKGDQMMLPINMXGNCOQKCQLUYKPIPIPNKGLWKMEHKJNPUKRKEEQMKKXKQGKLQMPAMQMQIQGPXIKMLKIPOXQKPQKXOPIXMK
+5
+QPN MMI KKKPK QPKK CM
+89
+84 78 88 21 51 28 8 28 64 0 88 0 37 23 23 8 38 60 21 9 71 31 6 35 40 9 89 31 3 84 12 36 32 30 27 12 27 64 51 78 11 11 78 38 71 21 43 35 87 0 50 43 32 16 25 22 27 11 53 71 10 66 57 5 86 12 16 37 87 22 53 6 10 35 81 31 1 62 23 53 56 36 81 39 88 80 84 5 51
+TRTRETRROOEERRRORRRRETERTRTERTEORREROORORRORRRRRRTRRRRRETRRTRRRORTRRRRERRRRRREROORRERTOEO
+5
+OORO RRORRRRRRRRRRRR RRRRRRRRRRRRRTRRRR RRRTRRRRRRRRRRRR RRRRORRRRR
+100
+27 5 15 60 61 82 49 29 95 8 92 41 31 86 0 78 88 59 0 12 72 45 7 52 44 66 84 79 83 20 25 89 53 62 42 77 56 22 24 90 36 98 23 40 14 4 64 1 70 63 13 67 100 85 74 16 96 21 2 39 69 3 48 46 81 80 6 99 57 71 37 75 50 93 18 47 97 10 32 73 55 30 58 11 33 91 94 9 34 43 76 19 28 35 51 65 26 38 54 87
+QMQMMMMUUVQQMUQUVMMQQMMVVUVQQUVUQVQMMMVUQVVQVQVQVQMMMVMUVVUQVVUMQQMQVVMQUUMQQUVVVQMMVVVVMMMVQUUUVMVM
+5
+VVMQM MQMV UVQQ VVQUV QVMQ
+100
+9 52 83 23 29 27 4 71 70 85 82 66 61 71 45 0 78 77 43 50 53 36 84 27 84 75 57 31 80 14 82 72 61 36 87 24 0 64 15 9 16 96 68 46 59 49 53 68 88 25 46 33 26 48 95 99 28 15 2 7 91 63 91 62 29 25 51 92 44 49 89 81 76 4 62 58 80 75 44 22 97 37 31 30 17 43 10 14 13 51 16 88 85 55 22 52 45 59 28 35
+UNUUUMMBNUUMWNNNWUWMBWNNMUMBNNNBMMWBUMBNWNMUBNUBWNUNMNBMNNBBBMBUUWWMNUMMMUWNUWMMWWMNWUMUMWUWBWWMBNBM
+5
+NBNW MNWM NUUW BBMM BMMB
+100
+10 25 25 24 2 72 6 61 7 55 90 25 91 67 18 38 63 51 36 13 54 55 97 23 30 0 3 50 34 97 12 30 49 93 13 77 68 78 12 42 43 3 39 50 77 59 93 6 31 2 72 7 3 51 12 10 18 29 38 66 65 97 58 22 29 39 58 53 91 47 58 32 38 7 47 59 72 2 54 77 100 71 20 59 22 67 18 100 61 39 24 49 30 71 10 49 0 99 24 32
+QGASLCKLLKLMKLXLLKLTLFUPZLLVQWROLVLTLAALLTTLLLFLKFCLFFWLLIKLFLHLKTFTLLFLLLXLRWLRMLZLLLLLLTCLNLLLMLTF
+5
+LLLXLLLL LLTLLLLLLLL LLLLTLLLL LKL XK
+100
+92 70 33 38 67 41 56 96 5 79 34 57 16 64 77 70 69 97 27 57 10 55 3 78 4 67 0 90 23 47 32 28 68 8 28 66 93 3 64 16 4 77 14 2 87 82 41 47 94 58 1 1 92 37 76 62 18 54 6 26 65 68 19 52 36 19 35 95 38 52 82 23 94 12 17 65 62 95 89 89 26 55 58 99 56 10 8 33 63 51 97 76 34 83 61 79 87 100 93 91
+ZZZZZZXXXXXZXZXXZXXXXXXXXXZZXXXZZXXZZZXXZXXXXXXXXXZXXXXXZZXXZXXZXXZZXZXXXXXZXZZXXXZXXXXXZXXZXXXZXXZZ
+5
+XZXXXXXXZX XZXXXXXZXXX XXXZZXXXXXX ZZZXXXXXXX ZXXXXZXXXX
+100
+7 71 60 6 23 68 95 42 68 14 62 58 42 63 65 2 56 65 59 10 77 8 14 60 96 73 61 79 95 0 37 0 26 22 44 69 63 69 8 39 96 97 59 32 57 31 78 57 79 31 6 81 10 38 9 35 16 97 62 16 44 35 32 17 12 22 39 58 86 11 30 23 86 81 85 26 73 37 61 78 13 77 29 85 12 71 17 29 9 36 36 56 27 38 2 13 30 27 11 7
+KKKKMMMAMAMAAKKAMKKMAMAKKMAMMAAAKKKMMMAKKKKKAMMKMMKKMKKAMKMMKAMKMKKAAKMMAKKKMAAMMKKKMKKKKKKMMKAMMMKA
+5
+KAKMM AMKK MKKMKM AMAMA MKKMKKKK
+100
+18 52 18 72 44 58 77 21 56 97 84 53 54 74 72 15 0 69 4 90 52 15 77 2 53 44 21 0 37 96 44 4 71 20 60 2 54 58 58 5 90 84 53 69 89 37 76 82 76 11 56 96 14 68 87 83 60 72 1 84 11 26 82 87 13 41 11 96 17 31 83 68 15 17 71 93 18 60 5 13 42 14 69 68 42 89 52 5 30 74 8 3 74 13 42 28 83 37 87 71
+OOONODHHHGHPHBHDGBDOODHHHOHGQBODHHDHJDDHOHHBHDRHHDHBOOWODHHHDHHHDHDBEHOODEHOODHDDOBODHOHOBDCBDDCODHH
+5
+HOOHD DHDDHD DHDHD HHOOH BJ
+100
+100 0 39 41 60 57 19 62 15 24 18 22 56 99 21 58 1 39 1 29 90 86 50 62 6 58 66 92 28 80 48 43 55 19 53 30 43 36 72 80 12 37 0 28 27 52 38 93 11 29 23 74 91 95 17 47 60 13 76 30 28 32 83 63 82 23 42 46 61 10 1 10 65 78 95 47 96 23 65 64 25 68 41 70 100 73 12 18 40 87 6 77 43 24 16 94 46 99 97 95
+YTWZKBFSNKAJWRCOGWZLTIWSDOGXOASNUFXINKDACAQOFUQAOLYFWPFDKXWNAATQRESMLBGBVGPDDYINWCZDYJCXSZDWNKLSMRHP
+5
+YF RD RVJ QDW UMCRV
+100
+24 9 31 36 17 90 58 58 90 32 52 24 51 43 37 43 54 57 92 74 97 55 2 10 74 17 23 31 76 36 49 0 64 45 45 24 86 91 86 94 23 9 72 21 97 61 58 9 6 51 91 42 38 93 67 52 97 43 87 62 49 67 16 91 39 90 93 62 73 52 38 32 51 86 14 48 1 92 12 14 23 57 55 1 87 66 42 64 16 0 10 2 32 49 62 94 10 12 76 55
+HHGGGXGGMMGHGHGHHGGGXGMMGGGGGGHMGGGHXHXGGHMGHGGXMGMMGXMGHMGGXMGHGXHGGGGXXHGHGGGGGGGGGMHGGMMHHHGGMGGG
+5
+GGGGGHGGGGGGGGGGGGGG GGGHGGGGGG GGGGGGGGGGGGXGG GGHGG GGHGGGGG
+2
+0 1
+OO
+2
+OO O
+100
+49 0 39 78 66 90 86 83 91 52 40 60 76 77 16 11 87 43 41 15 20 79 46 14 88 95 3 17 24 81 0 12 45 32 13 67 38 29 47 74 25 28 21 48 84 42 73 55 85 44 31 92 54 27 56 36 69 7 5 53 18 93 58 71 64 80 82 94 70 72 19 22 10 30 26 6 51 59 0 99 8 0 2 57 37 23 61 62 33 98 35 1 50 4 89 75 100 65 96 68
+OFYOQFFYYFQYYYYFYFYYYYFYOFOQOYFOFYYYYQFQOQFQOYOQYFYFOFOYOOOYFQOYFQFFFFQYYQQYOFFYFYFOFQYYOFQOOQQYOOYY
+5
+FFFF QYOQ QQYO YYYOF FOF
+100
+66 23 4 1 53 10 3 80 54 74 67 40 7 100 98 0 8 35 89 68 3 30 47 80 4 53 96 13 38 18 52 51 87 76 9 40 27 24 27 19 23 5 4 57 27 27 58 68 84 68 10 36 73 87 44 80 67 77 40 57 50 42 74 46 93 38 87 53 88 22 52 63 55 59 55 23 30 85 33 49 65 55 42 11 87 99 93 26 86 1 56 75 0 90 41 3 18 57 88 54
+HNMIMNIHMMHNHNNIHHINIHIHNNHNHMNNHMIMINHHHIIINHINMHHIIIMHNMMNNNHNHIMNNNNNMIHHNNNINNINHNMMMHNHINNINHHH
+5
+NHNHHN NMIHN IHIHH NIIH NNHN
+100
+16 60 5 63 88 83 62 84 5 58 58 81 1 95 88 0 57 57 39 3 91 81 1 72 69 95 63 82 60 85 85 91 69 86 88 8 62 12 97 78 62 60 58 9 71 85 86 75 83 16 38 71 1 38 75 3 15 15 83 12 69 5 35 8 75 78 78 63 22 38 84 15 72 72 35 50 9 97 95 8 0 12 84 81 22 97 82 0 3 50 22 9 91 82 35 50 16 71 57 86
+KEHEKEEHHEEKHEKEEEEEEKHEEEEEEEEEEEKEEHHEEEEEEHEEEKEEEEEHHHEHEHHEEEEEHEHHEEHHEHEEEHHKHHEKEEHEEEHHKEEE
+5
+HEHEEE HEEEHEH HHEEEH EHEEEEEEEEEEEE EEEEEEEHEEEEEEEEEEEE
+99
+64 74 74 74 64 64 74 64 74 74 64 64 64 74 64 64 74 64 74 64 64 74 74 64 64 74 74 74 74 64 64 74 74 64 74 64 64 74 74 64 74 64 64 64 74 74 64 74 64 74 74 74 74 64 64 74 64 64 74 74 74 74 74 0 64 74 64 74 64 74 74 64 74 0 64 74 74 74 64 74 74 64 64 74 64 74 64 64 64 64 74 64 74 64 64 64 64 74 64
+UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUHUUUUUUUUUAUUUUUUUUUUUUUUUUUUUUUUUUU
+5
+UAHUUUUUUUUUUUUUUUUU AHUUUUUUUUUUUUUUUUUU HAUUUUUUUUUUUUUUUUUU UHAUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUU
+100
+50 23 82 36 28 71 86 85 62 2 17 77 82 42 83 18 99 64 49 70 64 36 14 28 34 70 31 0 38 89 98 60 24 5 52 26 71 6 91 38 73 34 24 81 11 25 7 91 22 7 55 22 5 25 41 42 49 68 56 59 95 92 72 26 67 75 33 18 63 97 32 97 50 23 21 52 59 81 13 11 72 98 56 62 1 65 95 51 77 27 60 41 8 8 6 75 14 32 12 46
+SESSTESGSEGEETSSTTSSTGTGTGETSSGESETSSGSSTSSSSEESGGEGSSGTSSTESGSSGSTESSSESSGSSSSSGTESTESSESGTSSGSTTGS
+5
+SEEGS TGG GGT GTE SSGT
+100
+63 80 98 3 44 89 86 68 14 33 10 70 53 80 45 60 93 83 48 97 29 83 57 67 43 45 95 26 0 53 63 2 0 3 43 80 36 87 15 86 17 97 11 46 21 33 98 27 56 53 56 68 77 68 47 59 21 86 95 77 11 61 77 89 97 57 29 75 57 44 23 3 66 61 95 70 46 82 70 67 43 11 92 89 5 92 93 36 24 14 2 21 10 92 33 48 93 46 94 17
+XXSSWZWWPWWXSWWZWZSSSWWXZWXPPSSPPXWSZPWPSSZXZXWPZSWZXXZPXXPWXPXXWWPSXZZXWXPZXZSXXPPXZWXZPZPWPPSSXXZX
+5
+WWZS XSPX XSXZ WWZW PPPX
+100
+34 31 52 0 79 36 100 91 36 13 63 51 91 58 74 63 57 51 63 38 0 19 99 69 21 25 90 48 31 54 46 94 84 45 34 14 13 16 100 21 74 57 99 90 98 98 36 16 39 38 4 51 14 14 31 84 91 0 16 54 48 18 58 39 88 79 18 48 21 54 69 74 52 46 8 22 22 79 51 46 7 54 7 46 79 39 99 11 22 100 63 52 58 93 84 91 57 58 11 25
+OOWOMMMMMOWWMAOWOWWOOMMWAWOOOMMMOMOWOMMAOOOOWWMMOOAWWWOOMOMMOMAOOMMOAMWAMMOOWMWMOMOMWOOMOMWMAWOMOAMW
+5
+OOAOO WWWWM OMMOOOM OOOWOM OOMOMOM
+86
+0 6 78 22 6 66 41 57 13 53 54 20 78 9 37 39 34 41 1 82 3 41 8 8 17 76 82 32 86 8 61 45 22 31 83 48 72 34 24 57 31 38 32 86 24 68 7 13 3 9 57 0 30 29 7 1 1 6 27 19 56 38 53 76 21 31 37 66 7 27 53 86 45 56 17 66 44 0 77 22 39 48 30 17 82 3
+ODMDDOOXMDDDDDDDODXXXODDDDMDMMDMDODDMMMDXDDMDDDDDDDDOXDODDDDXDDDDXDXDDDODDDMXDDDDMXDDM
+5
+DDMDDDDDDD MMDDD DDDDDDDDDDDDDDXDD DXXO DDDDDDDDDDXDDD
+100
+96 49 96 13 54 28 32 89 3 30 49 57 80 83 62 60 28 88 3 0 32 96 84 21 0 79 23 62 11 85 32 22 81 98 82 1 54 31 92 78 13 17 68 36 60 53 10 6 41 14 47 38 31 50 20 85 5 7 82 98 70 40 85 42 38 82 100 45 91 98 34 28 3 19 24 49 98 59 42 81 25 30 82 33 16 56 21 100 50 45 86 37 5 84 35 62 81 25 43 74
+KIKVPKHNAIIAGDPGKEADHKVWQWUPMUMUFFMAPWCNVAUHGYMAUVDYFSZUKWMFGSUHYMYVDFGKAHYIFQHFZIMGVIWYSIMKKVDPFZIW
+5
+DZ GVUIM IA MQN GS
+100
+56 71 23 20 93 26 33 35 24 82 31 14 53 71 60 57 35 87 67 28 57 5 35 11 79 10 14 2 92 79 0 2 56 32 11 86 53 27 8 78 52 0 37 37 20 37 8 16 2 77 79 42 5 23 9 82 82 99 13 12 34 9 13 10 87 21 12 38 22 87 31 90 67 60 21 41 10 56 28 69 60 85 94 71 42 84 49 64 9 76 1 27 42 49 23 92 67 17 49 17
+GZJJAJJSECLOSWJKSJJSSSELJKPGJJCSWKFJEKJVWPJJJJJJOJMLGJJCYZJEJJJKJJEJIJPJJJJSKKEJJRJSNSEJJKJSZKJJJJKJ
+5
+JKE MJJJJJJ JEJK JJJJJJJZJJ KKJJJ
+100
+37 32 68 34 57 24 27 70 88 82 60 90 68 3 7 18 18 90 2 54 60 1 32 56 64 39 53 24 67 60 23 0 82 90 88 32 53 34 83 13 39 31 65 24 60 23 1 39 36 18 7 66 0 83 99 93 56 70 80 27 36 80 82 0 67 23 93 93 2 67 99 23 65 88 65 12 1 2 80 27 80 64 32 3 82 29 27 64 68 53 18 24 0 96 65 90 31 3 37 93
+KOKCCCKCKKGKKCCCCKKCCCOKOCOCKCKZKKKOOCKCCRCCCKCCKCGCZKCOKCCKKCKZKKOOKKCKCKCCCKCKCOOCKCKOKOCCZCCKCCPO
+5
+CKCCCCK CKKCCK COKCC CCCCCCCC CKKOK
+100
+94 53 2 43 51 27 78 70 39 16 91 97 16 11 44 98 6 46 15 38 85 8 10 46 69 92 33 77 5 49 84 86 58 99 52 97 61 89 59 42 7 43 98 4 81 12 3 13 12 38 55 56 42 65 23 21 56 10 100 13 36 19 67 0 9 57 68 71 1 94 60 57 54 64 93 82 14 40 41 86 88 45 48 83 88 62 76 4 7 73 53 70 27 58 79 31 85 90 47 74
+JJVVVVVVJVVVJJVVJJJJJJJJJJJJJJVJVJJJJJVVJVJJVJJJVJJVJJVVJVJJVVJVVJVJVJVJVJJVVJVJJJVJVJJVVJJVVJJJVVVV
+5
+VJJJVJJJJJ JVJVJVJVJVJVVVJV JJVVVVJJJ VVJJVJJV VVVJJVVJV
diff --git a/codejam_2016/src/y2016round3/B-small-practice.out b/codejam_2016/src/y2016round3/B-small-practice.out
new file mode 100644
index 0000000..2779d56
--- /dev/null
+++ b/codejam_2016/src/y2016round3/B-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0.50000000
+Case #2: 1.00000000
+Case #3: 0.50000000
+Case #4: 0.46809039
+Case #5: 0.31272496
+Case #6: 0.37500000
+Case #7: 0.29886769
+Case #8: 0.46118976
+Case #9: 0.09846417
+Case #10: 1.00000000
+Case #11: 0.83992740
+Case #12: 0.00000000
+Case #13: 0.00000000
+Case #14: 0.22647333
+Case #15: 1.00000000
+Case #16: 1.00000000
+Case #17: 0.60062400
+Case #18: 0.25295475
+Case #19: 0.25722238
+Case #20: 1.00000000
+Case #21: 0.94000000
+Case #22: 0.23784639
+Case #23: 0.00000000
+Case #24: 0.31262500
+Case #25: 0.25568762
+Case #26: 0.31265021
+Case #27: 0.23430416
+Case #28: 0.32479378
+Case #29: 0.27769497
+Case #30: 0.62000000
+Case #31: 0.04020270
+Case #32: 0.31602564
+Case #33: 1.00000000
+Case #34: 0.95147912
+Case #35: 0.45500000
+Case #36: 0.31277564
+Case #37: 0.25738688
+Case #38: 0.30986166
+Case #39: 0.00000014
+Case #40: 1.00000000
+Case #41: 0.00000000
+Case #42: 0.25572177
+Case #43: 0.00000000
+Case #44: 0.77053680
+Case #45: 0.50000000
+Case #46: 0.24611563
+Case #47: 0.00000041
+Case #48: 0.00000000
+Case #49: 1.00000000
+Case #50: 1.00000000
+Case #51: 0.39264123
+Case #52: 0.25068777
+Case #53: 0.56270784
+Case #54: 0.25098034
+Case #55: 1.00000000
+Case #56: 0.52000000
+Case #57: 0.00000000
+Case #58: 0.15870006
+Case #59: 0.00011371
+Case #60: 0.02385903
+Case #61: 0.67000000
+Case #62: 0.07913656
+Case #63: 1.00000000
+Case #64: 0.43193687
+Case #65: 0.98020000
+Case #66: 0.37568906
+Case #67: 0.00000000
+Case #68: 0.00000000
+Case #69: 0.70000000
+Case #70: 0.33431915
+Case #71: 0.74000000
+Case #72: 1.00000000
+Case #73: 0.50000000
+Case #74: 0.03920000
+Case #75: 0.31257503
+Case #76: 0.37253016
+Case #77: 0.50020000
+Case #78: 0.25548621
+Case #79: 0.34634682
+Case #80: 1.00000000
+Case #81: 0.25851303
+Case #82: 1.00000000
+Case #83: 0.05840000
+Case #84: 0.80922612
+Case #85: 0.82315739
+Case #86: 0.02000000
+Case #87: 1.00000000
+Case #88: 0.39382826
+Case #89: 0.00000000
+Case #90: 0.00000000
+Case #91: 0.21138890
+Case #92: 1.00000000
+Case #93: 0.46174000
+Case #94: 0.00015059
+Case #95: 0.54480000
+Case #96: 1.00000000
+Case #97: 0.00188536
+Case #98: 0.20949844
+Case #99: 0.01773233
+Case #100: 0.03920000
diff --git a/codejam_2016/src/y2016round3/a.rs b/codejam_2016/src/y2016round3/a.rs
index af79a56..6ccc481 100644
--- a/codejam_2016/src/y2016round3/a.rs
+++ b/codejam_2016/src/y2016round3/a.rs
@@ -41,6 +41,7 @@ fn solve(s: &str) -> usize
     let mut score = 0;
     for ch in s.chars() {
         if let Some(top) = stack.last() {
+            //always beneficial to greedily make 10 points
             if *top == ch {
                 score += 10;
                 stack.pop();
diff --git a/codejam_2016/src/y2016round3/b.rs b/codejam_2016/src/y2016round3/b.rs
new file mode 100644
index 0000000..b4215b3
--- /dev/null
+++ b/codejam_2016/src/y2016round3/b.rs
@@ -0,0 +1,90 @@
+use codejam::util::codejam::run_cases;
+//use std::cmp::max;
+//use itertools::Itertools;
+use std::io::Write;
+use std::mem::swap;
+
+use permutohedron::LexicalPermutation;
+
+/*
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2016round3",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+
+
+                if case_no > 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve() //solve_brute_force(K, &prob)
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve() -> i32
+{
+    3
+}
+
+
+#[cfg(test)]
+mod test_2016_round3
+{
+    use permutohedron::LexicalPermutation;
+
+    #[test]
+    fn test_total_perms()
+    {
+        //if 1 prereq chain A->B, div 2
+        //if len 3 prereq chai A->B->C ..O..O..O... div 3!
+
+        let mut seq:Vec<usize> = (0..9).collect();
+        assert_eq!(9, seq.len());
+
+        let mut pos = seq.clone();
+
+        let mut count = 0;
+
+        let mut count_1 = 0;
+        let mut count_2 = 0;
+        loop {
+            count += 1;
+
+            for (i,v) in seq.iter().enumerate() {
+                pos[*v] = i;
+            }
+
+            if pos[5] > pos[2] && pos[0] > pos[8] {
+                count_1 += 1;
+            }
+
+            //enforce 8 2 5 and 7 0
+            if pos[8] < pos[2] && pos[2] < pos[5] && pos[7] < pos[0] {
+                count_2 += 1;
+            }
+
+            if !seq.next_permutation() {
+                break;
+            }
+        }
+        assert_eq!(count, (1..=9).product());
+        assert_eq!(count / 4, count_1, "2 sequences of len 2");
+        assert_eq!(count / (3*2 * 2), count_2, "1 seq len 3, 1 seq len 2");
+    }
+}

From f1aecf6124f8a4b43bc98326c7a563baf195a40e Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 18:27:32 -0300
Subject: [PATCH 112/122] c

---
 codejam_2008/src/main.rs                      |   2 +-
 .../src/y2008round_apac/C-large-practice.out  | 100 ++++++++++++++++++
 .../src/y2008round_apac/C-small-practice.out  | 100 ++++++++++++++++++
 codejam_2008/src/y2008round_apac/c.rs         |  69 +++++++-----
 codejam_2008/src/y2008round_apac/d.rs         |  27 +----
 codejam_2016/src/y2016round3/b.rs             |  14 ++-
 6 files changed, 255 insertions(+), 57 deletions(-)
 create mode 100644 codejam_2008/src/y2008round_apac/C-large-practice.out
 create mode 100644 codejam_2008/src/y2008round_apac/C-small-practice.out

diff --git a/codejam_2008/src/main.rs b/codejam_2008/src/main.rs
index 32f00d7..7371aa8 100644
--- a/codejam_2008/src/main.rs
+++ b/codejam_2008/src/main.rs
@@ -96,7 +96,7 @@ fn main()
 {
     init_log();
 
-    y2008round_apac::b::solve_all_cases();
+    y2008round_apac::c::solve_all_cases();
 
     /*   run_y2008_round_qual();
     run_y2008_round_practice();
diff --git a/codejam_2008/src/y2008round_apac/C-large-practice.out b/codejam_2008/src/y2008round_apac/C-large-practice.out
new file mode 100644
index 0000000..ac4d518
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/C-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0.0004162
+Case #2: 0.7939949
+Case #3: 0.6501767
+Case #4: 0.0109940
+Case #5: 0.5000000
+Case #6: 0.3737212
+Case #7: 0.0518012
+Case #8: 0.5054415
+Case #9: 0.7445026
+Case #10: 0.2020628
+Case #11: 0.0000660
+Case #12: 0.7945868
+Case #13: 0.8125135
+Case #14: 0.9978436
+Case #15: 0.9285437
+Case #16: 0.8811439
+Case #17: 0.2631050
+Case #18: 0.0057087
+Case #19: 0.9867617
+Case #20: 0.4885483
+Case #21: 0.0222166
+Case #22: 0.6448501
+Case #23: 0.9781437
+Case #24: 0.9978059
+Case #25: 0.3721631
+Case #26: 0.8978954
+Case #27: 0.1218099
+Case #28: 0.9999986
+Case #29: 0.8104564
+Case #30: 0.6608716
+Case #31: 0.6159525
+Case #32: 1.0000000
+Case #33: 0.2985579
+Case #34: 0.5166388
+Case #35: 0.9996722
+Case #36: 0.0000000
+Case #37: 0.4567594
+Case #38: 0.0000659
+Case #39: 0.0000000
+Case #40: 0.9457501
+Case #41: 0.0706375
+Case #42: 0.9011870
+Case #43: 1.0000000
+Case #44: 0.9826554
+Case #45: 0.9881957
+Case #46: 0.0000000
+Case #47: 0.1400277
+Case #48: 0.9952887
+Case #49: 0.4228862
+Case #50: 0.1654786
+Case #51: 0.6273520
+Case #52: 0.0859182
+Case #53: 0.0000000
+Case #54: 0.9987595
+Case #55: 0.0498691
+Case #56: 0.1371794
+Case #57: 0.1938945
+Case #58: 0.0000851
+Case #59: 0.1250096
+Case #60: 0.9992872
+Case #61: 0.1941382
+Case #62: 0.9999991
+Case #63: 0.5000000
+Case #64: 0.9552683
+Case #65: 0.6236731
+Case #66: 0.4615966
+Case #67: 0.1046238
+Case #68: 0.5902172
+Case #69: 0.9999665
+Case #70: 0.6377161
+Case #71: 0.5228504
+Case #72: 0.7551941
+Case #73: 0.9961867
+Case #74: 0.2224161
+Case #75: 0.0637157
+Case #76: 0.2575746
+Case #77: 0.0000000
+Case #78: 0.2419334
+Case #79: 0.9999689
+Case #80: 0.0000000
+Case #81: 0.6180450
+Case #82: 0.2243077
+Case #83: 0.1143338
+Case #84: 1.0000000
+Case #85: 0.7937180
+Case #86: 0.9816063
+Case #87: 0.4352030
+Case #88: 0.4082010
+Case #89: 0.2509340
+Case #90: 0.9999906
+Case #91: 0.9994236
+Case #92: 0.1354928
+Case #93: 0.1686479
+Case #94: 0.8437500
+Case #95: 0.9989502
+Case #96: 0.6431643
+Case #97: 0.0005080
+Case #98: 0.4297627
+Case #99: 0.0120525
+Case #100: 1.0000000
diff --git a/codejam_2008/src/y2008round_apac/C-small-practice.out b/codejam_2008/src/y2008round_apac/C-small-practice.out
new file mode 100644
index 0000000..6a386ca
--- /dev/null
+++ b/codejam_2008/src/y2008round_apac/C-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0.2522810
+Case #2: 0.1350490
+Case #3: 0.0003079
+Case #4: 0.2390101
+Case #5: 0.0000000
+Case #6: 0.7518506
+Case #7: 0.1844171
+Case #8: 0.0000000
+Case #9: 0.5018678
+Case #10: 0.4887440
+Case #11: 0.0000000
+Case #12: 0.1635530
+Case #13: 0.9995436
+Case #14: 0.0000000
+Case #15: 0.1423822
+Case #16: 0.0000000
+Case #17: 0.8659268
+Case #18: 1.0000000
+Case #19: 0.5493432
+Case #20: 0.0000000
+Case #21: 0.0624207
+Case #22: 0.0000000
+Case #23: 0.5055291
+Case #24: 0.0839649
+Case #25: 0.3981750
+Case #26: 0.0002145
+Case #27: 0.2736424
+Case #28: 0.6519703
+Case #29: 0.5000000
+Case #30: 0.0000000
+Case #31: 0.2803860
+Case #32: 0.9890459
+Case #33: 0.7733380
+Case #34: 0.9950797
+Case #35: 0.9836539
+Case #36: 0.9201572
+Case #37: 0.9688230
+Case #38: 0.5054415
+Case #39: 0.9616649
+Case #40: 0.1924498
+Case #41: 0.2935835
+Case #42: 0.7319240
+Case #43: 0.0000000
+Case #44: 0.0000000
+Case #45: 0.3087357
+Case #46: 0.0942020
+Case #47: 0.1663050
+Case #48: 0.2488310
+Case #49: 0.1136549
+Case #50: 0.5000000
+Case #51: 0.9032168
+Case #52: 0.1323070
+Case #53: 0.4564098
+Case #54: 0.0429350
+Case #55: 0.2534511
+Case #56: 0.4614753
+Case #57: 1.0000000
+Case #58: 0.3359963
+Case #59: 0.2828145
+Case #60: 0.9707138
+Case #61: 0.0000000
+Case #62: 0.8146610
+Case #63: 0.0386118
+Case #64: 0.9991575
+Case #65: 0.9273660
+Case #66: 0.5260580
+Case #67: 0.8904836
+Case #68: 0.9999981
+Case #69: 0.0000065
+Case #70: 0.0000000
+Case #71: 0.0000000
+Case #72: 0.5241240
+Case #73: 0.3648941
+Case #74: 0.9717864
+Case #75: 0.2002392
+Case #76: 0.8437500
+Case #77: 0.0000000
+Case #78: 0.0029743
+Case #79: 0.4143384
+Case #80: 0.9948532
+Case #81: 0.0000000
+Case #82: 0.4637460
+Case #83: 0.0021672
+Case #84: 0.3653080
+Case #85: 0.5052802
+Case #86: 0.4218086
+Case #87: 0.6954358
+Case #88: 0.9973695
+Case #89: 0.3691045
+Case #90: 0.5322670
+Case #91: 0.0492577
+Case #92: 1.0000000
+Case #93: 0.2292154
+Case #94: 0.1354920
+Case #95: 0.5973174
+Case #96: 0.4804970
+Case #97: 0.2535840
+Case #98: 0.9982382
+Case #99: 0.5614949
+Case #100: 0.6257170
diff --git a/codejam_2008/src/y2008round_apac/c.rs b/codejam_2008/src/y2008round_apac/c.rs
index 01e7828..0ec8e69 100644
--- a/codejam_2008/src/y2008round_apac/c.rs
+++ b/codejam_2008/src/y2008round_apac/c.rs
@@ -1,8 +1,7 @@
-use bit_vec::BitVec;
 use codejam::util::codejam::run_cases;
-use codejam::util::vector_2d::Vector2d;
 use std::io::Write;
 use std::usize;
+use std::cmp::Ordering::Less;
 
 /*
 TODO
@@ -11,21 +10,15 @@ pub fn solve_all_cases()
 {
     run_cases(
         &["C-small-practice", "C-large-practice"],
-        "y2008round3",
+        "y2008round_apac",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (n_rows, n_cols) = reader.read_tuple_2();
-
-                let mut chairs = BitVec::from_elem(n_cols * n_rows, false);
-
-                for r in 0..n_rows {
-                    for (c, ch) in reader.read_chars(n_cols).into_iter().enumerate() {
-                        let idx = r * n_cols + c;
-                        chairs.set(idx, ch == '.');
-                    }
-                }
+                let in_str = reader.read_string_line();
+                let m : usize = in_str[0].parse().unwrap();
+                let p : f64 = in_str[1].parse().unwrap();
+                let x : usize = in_str[2].parse().unwrap();
 
                 if case_no != 3 {
                     //continue;
@@ -34,9 +27,9 @@ pub fn solve_all_cases()
 
                 writeln!(
                     buffer,
-                    "Case #{}: {}",
+                    "Case #{}: {:.7}",
                     case_no,
-                    solve(&chairs, n_rows, n_cols)
+                    solve(m,p,x)
                 )
                 .unwrap();
             }
@@ -44,22 +37,40 @@ pub fn solve_all_cases()
     );
 }
 
-const INVALID: usize = usize::MAX;
-
-fn index_to_vec(idx: usize, n_cols: usize) -> Vector2d<isize>
-{
-    Vector2d::with_val((idx / n_cols) as isize, (idx % n_cols) as isize)
-}
-fn vec_to_index(v: &Vector2d<isize>, n_cols: usize) -> usize
+fn solve(num_rounds: usize, p: f64, x: usize) -> f64
 {
-    v.r() as usize * n_cols + v.c() as usize
-}
-fn vec_comp_to_index(r: isize, c: isize, n_cols: usize) -> usize
-{
-    r as usize * n_cols + c as usize
+    let mut round_prob = vec![ vec![0.0; 1 << (num_rounds+1)]; num_rounds+1];
+
+    round_prob[0][1] = 1.;
+    round_prob[0][0] = 0.;
+
+  for m in 1..=num_rounds
+  {
+	  let last_round_max = (1 << m-1) + 1;
+	  //Combine rounds
+	  for high_index in 0..last_round_max
+	  {
+		  //Copy over rounds
+		  round_prob[m][high_index * 2] = fmax(round_prob[m][high_index * 2], round_prob[m-1][high_index]);
+
+		  for low_index in 0..high_index
+		  {
+			  let this_round_idx = high_index + low_index;
+			  round_prob[m][this_round_idx] = fmax(round_prob[m][this_round_idx], p * round_prob[m-1][high_index] + (1.-p) * round_prob[m-1][low_index]);
+		  }
+	  }	  
+  }
+      
+  round_prob[num_rounds][(x as f64 / (1000000.0 / (1 << num_rounds) as f64)) as usize]
+  
 }
 
-fn solve(chairs: &BitVec, n_rows: usize, n_cols: usize) -> usize
+
+fn fmax(a: f64, b: f64) -> f64
 {
-    3
+    if a.partial_cmp(&b).unwrap() == Less {
+        b
+    } else {
+        a
+    }
 }
diff --git a/codejam_2008/src/y2008round_apac/d.rs b/codejam_2008/src/y2008round_apac/d.rs
index ecd4280..ff2e50b 100644
--- a/codejam_2008/src/y2008round_apac/d.rs
+++ b/codejam_2008/src/y2008round_apac/d.rs
@@ -1,34 +1,18 @@
-use codejam::util::bitvec64::BitVec64;
 use codejam::util::codejam::run_cases;
-use codejam::util::vector_2d::Vector2d;
-use num_bigint::BigUint;
-//use num_integer::binomial;
 use std::io::Write;
-use std::usize;
 
 /*
 TODO
 */
 pub fn solve_all_cases()
 {
-    let fac = compute_modular_factorial(MODULUS);
-    let inv = compute_modular_inverse(MODULUS);
-
     run_cases(
         &["D-small-practice", "D-large-practice"],
-        "y2008round3",
+        "y2008round_apac",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let (n_rows, n_cols, n_rocks) = reader.read_tuple_3();
-
-                let rocks: Vec<Vector2d<isize>> = (0..n_rocks)
-                    .map(|_| {
-                        let (r, c): (isize, isize) = reader.read_tuple_2();
-                        Vector2d::with_val(r - 1, c - 1)
-                    })
-                    .collect();
 
                 if case_no != 21 {
                     // continue;
@@ -39,7 +23,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve(rocks.as_slice(), n_rows, n_cols, &fac, &inv)
+                    solve()
                 )
                 .unwrap();
             }
@@ -47,14 +31,7 @@ pub fn solve_all_cases()
     );
 }
 
-const MODULUS: usize = 10007;
-
 fn solve(
-    rocks_orig: &[Vector2d<isize>],
-    n_rows: isize,
-    n_cols: isize,
-    fac: &[usize],
-    inv: &[usize],
 ) -> isize
 {
 3
diff --git a/codejam_2016/src/y2016round3/b.rs b/codejam_2016/src/y2016round3/b.rs
index b4215b3..3edff58 100644
--- a/codejam_2016/src/y2016round3/b.rs
+++ b/codejam_2016/src/y2016round3/b.rs
@@ -18,6 +18,16 @@ pub fn solve_all_cases()
 
             for case_no in 1..=t {
 
+let n = reader.read_int();
+                let prereq: Vec<usize> = reader.read_num_line();
+                assert_eq!(n, prereq.len());
+
+                let course_chars = reader.read_chars(n);
+
+                let m = reader.read_int();
+
+                let words: Vec<String> = (0..m).map( |_| reader.read_string() ).collect();
+
 
                 if case_no > 3 {
                     // continue;
@@ -29,7 +39,7 @@ pub fn solve_all_cases()
                     buffer,
                     "Case #{}: {}",
                     case_no,
-                    solve() //solve_brute_force(K, &prob)
+                    solve(&prereq, &course_chars, &words)
                 )
                 .unwrap();
             }
@@ -37,7 +47,7 @@ pub fn solve_all_cases()
     );
 }
 
-fn solve() -> i32
+fn solve(prereq: &[usize], course_chars: &[char], words: &[String]) -> i32
 {
     3
 }

From b8710271ce3c128d77238a1e8e2aae4d120d5bc6 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Tue, 26 Feb 2019 23:38:45 -0300
Subject: [PATCH 113/122] comments

---
 codejam_2008/src/y2008round_apac/b.rs | 37 ++++++-------
 codejam_2008/src/y2008round_apac/c.rs | 78 ++++++++++++++++-----------
 codejam_2008/src/y2008round_apac/d.rs | 14 ++---
 3 files changed, 68 insertions(+), 61 deletions(-)

diff --git a/codejam_2008/src/y2008round_apac/b.rs b/codejam_2008/src/y2008round_apac/b.rs
index ad3bbe6..7527c6b 100644
--- a/codejam_2008/src/y2008round_apac/b.rs
+++ b/codejam_2008/src/y2008round_apac/b.rs
@@ -16,9 +16,7 @@ Brute force
 pub fn solve_all_cases()
 {
     run_cases(
-        &["B-small-practice",
-            "B-large-practice"
-        ],
+        &["B-small-practice", "B-large-practice"],
         "y2008round_apac",
         |reader, buffer| {
             let t = reader.read_int();
@@ -27,7 +25,7 @@ pub fn solve_all_cases()
                 let nums = reader.read_num_line();
                 let n_cols = nums[0];
                 let n_rows = nums[1];
-                let my_loc = Vector2d::with_val(nums[3]-1, nums[2]-1);
+                let my_loc = Vector2d::with_val(nums[3] - 1, nums[2] - 1);
 
                 let mut grid = Grid::new(n_rows, n_cols);
 
@@ -38,7 +36,7 @@ pub fn solve_all_cases()
                 }
 
                 if case_no != 4 {
-                     //continue;
+                    //continue;
                 }
                 println!("Solving case {}", case_no);
 
@@ -89,17 +87,19 @@ fn do_turn(
             }
 
             let strongest_neighbor = DIRECTIONS
-                .iter().enumerate()
+                .iter()
+                .enumerate()
                 .filter_map(|(idx, dir)| {
                     let sq = cur_loc + dir;
                     if let Some(power) = grid.get_value(&sq) {
                         //-idx is to break ties by DIRECTIONS index
-                       Some( (*power, 5-idx, sq) )
+                        Some((*power, 5 - idx, sq))
                     } else {
                         None
                     }
                 })
-                .max().unwrap();
+                .max()
+                .unwrap();
 
             ret = ret || strongest_neighbor.0 > 0;
 
@@ -109,7 +109,7 @@ fn do_turn(
 
     //cout << "Diffs\n" << diffs;
 
-    for r in 0..grid.R as isize{
+    for r in 0..grid.R as isize {
         cur_loc.data[0] = r;
         for c in 0..grid.C as isize {
             cur_loc.data[1] = c;
@@ -122,10 +122,9 @@ fn do_turn(
 
 const DIRECTIONS: [Vector2d<isize>; 4] = [NORTH, WEST, EAST, SOUTH];
 
-
 fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
 {
-    let mut q: VecDeque< (isize, Grid<isize>) > = VecDeque::new();
+    let mut q: VecDeque<(isize, Grid<isize>)> = VecDeque::new();
     q.push_back((0, grid.clone()));
     let mut max_t = 0;
 
@@ -137,10 +136,9 @@ fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
             continue;
         }
 
-        debug!("Grid off stack: \n{:#.3?}\nTurns: {} my loc: {:?}",
-               item.1,
-               item.0,
-            me_location
+        debug!(
+            "Grid off stack: \n{:#.3?}\nTurns: {} my loc: {:?}",
+            item.1, item.0, me_location
         );
         max_t = cmp::max(max_t, item.0);
 
@@ -157,7 +155,10 @@ fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
             << " turns: " << item.first
             << " Attacking: " << *adj_it);*/
             let did_move = do_turn(me_location, Some(*attack_dir), &mut new_grid);
-            debug!("After attacking in dir {:?} grid \n{:#.3?} Alive: {}", attack_dir, new_grid, item.0);
+            debug!(
+                "After attacking in dir {:?} grid \n{:#.3?} Alive: {}",
+                attack_dir, new_grid, item.0
+            );
             q.push_back((item.0 + 1, new_grid));
             if !did_move {
                 return None;
@@ -167,9 +168,9 @@ fn solve(me_location: Vector2d<isize>, grid: &Grid<isize>) -> Option<isize>
         let mut new_grid: Grid<isize> = item_grid.clone();
 
         //LOG_STR("Before doing nothing: " << *newGrid);
-        let did_move = do_turn(me_location,None,&mut new_grid);
+        let did_move = do_turn(me_location, None, &mut new_grid);
         debug!("After doing nothing: \n{:#.3?}\nAlive {}", new_grid, item.0);
-        q.push_back( (item.0 + 1, new_grid));
+        q.push_back((item.0 + 1, new_grid));
         //LOG_OFF();
         //LOG_STR();
 
diff --git a/codejam_2008/src/y2008round_apac/c.rs b/codejam_2008/src/y2008round_apac/c.rs
index 0ec8e69..3d888c1 100644
--- a/codejam_2008/src/y2008round_apac/c.rs
+++ b/codejam_2008/src/y2008round_apac/c.rs
@@ -1,7 +1,7 @@
 use codejam::util::codejam::run_cases;
+use std::cmp::Ordering::Less;
 use std::io::Write;
 use std::usize;
-use std::cmp::Ordering::Less;
 
 /*
 TODO
@@ -9,29 +9,26 @@ TODO
 pub fn solve_all_cases()
 {
     run_cases(
-        &["C-small-practice", "C-large-practice"],
+        &[
+            "C-small-practice",
+            //"C-large-practice"
+        ],
         "y2008round_apac",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
                 let in_str = reader.read_string_line();
-                let m : usize = in_str[0].parse().unwrap();
-                let p : f64 = in_str[1].parse().unwrap();
-                let x : usize = in_str[2].parse().unwrap();
+                let m: usize = in_str[0].parse().unwrap();
+                let p: f64 = in_str[1].parse().unwrap();
+                let x: usize = in_str[2].parse().unwrap();
 
                 if case_no != 3 {
                     //continue;
                 }
                 println!("Solving case {}", case_no);
 
-                writeln!(
-                    buffer,
-                    "Case #{}: {:.7}",
-                    case_no,
-                    solve(m,p,x)
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {:.7}", case_no, solve(m, p, x)).unwrap();
             }
         },
     );
@@ -39,32 +36,49 @@ pub fn solve_all_cases()
 
 fn solve(num_rounds: usize, p: f64, x: usize) -> f64
 {
-    let mut round_prob = vec![ vec![0.0; 1 << (num_rounds+1)]; num_rounds+1];
+    let mut round_prob = vec![vec![0.0; 1 << (num_rounds + 1)]; num_rounds + 1];
 
+    //prob of max
     round_prob[0][1] = 1.;
+    //prob of 0
     round_prob[0][0] = 0.;
 
-  for m in 1..=num_rounds
-  {
-	  let last_round_max = (1 << m-1) + 1;
-	  //Combine rounds
-	  for high_index in 0..last_round_max
-	  {
-		  //Copy over rounds
-		  round_prob[m][high_index * 2] = fmax(round_prob[m][high_index * 2], round_prob[m-1][high_index]);
+    for m in 1..=num_rounds {
+        //1, 2, 4, 8, 16
+        let last_round_max = 1 << m - 1;
+        //Combine rounds
+        for high_index in 0..=last_round_max {
+            //Copy over rounds
+            round_prob[m][high_index * 2] =
+                fmax(round_prob[m][high_index * 2], round_prob[m - 1][high_index]);
 
-		  for low_index in 0..high_index
-		  {
-			  let this_round_idx = high_index + low_index;
-			  round_prob[m][this_round_idx] = fmax(round_prob[m][this_round_idx], p * round_prob[m-1][high_index] + (1.-p) * round_prob[m-1][low_index]);
-		  }
-	  }	  
-  }
-      
-  round_prob[num_rounds][(x as f64 / (1000000.0 / (1 << num_rounds) as f64)) as usize]
-  
-}
+            for low_index in 0..high_index {
 
+                //high+low = 750k, 3 (current round)
+                //high = 1000k, 2 (last round)
+                //low = 500k 1 (last round)
+                let this_round_idx = high_index + low_index;
+                //stake is (high-low)/2 (mid point between high / low)
+                //this round idx for last round is (last round values are 2x greater)
+                //sum = high/2 + low/2
+                //sum + stake = high/2 + low/2 + high/2 - low/2 = 2high/2 = high
+                //sum - stake = high/2 + low/2 -high/2 + low/2 = 2low/2 = low
+                round_prob[m][this_round_idx] = fmax(
+                    round_prob[m][this_round_idx],
+                    //sum + stake
+                    p * round_prob[m-1][high_index]
+                   //sum - stake
+                  + (1.-p) * round_prob[m-1][low_index],
+                );
+            }
+        }
+        debug!("After round {} = {:?}", m, round_prob[m]);
+        assert_eq!(0., round_prob[m][0]);
+        assert_eq!(1., round_prob[m][1 << m]);
+    }
+    //x / (a/b) x *b / a
+    round_prob[num_rounds][((x as f64 / 1000000.0) * (1 << num_rounds) as f64) as usize]
+}
 
 fn fmax(a: f64, b: f64) -> f64
 {
diff --git a/codejam_2008/src/y2008round_apac/d.rs b/codejam_2008/src/y2008round_apac/d.rs
index ff2e50b..118e8f8 100644
--- a/codejam_2008/src/y2008round_apac/d.rs
+++ b/codejam_2008/src/y2008round_apac/d.rs
@@ -13,26 +13,18 @@ pub fn solve_all_cases()
             let t = reader.read_int();
 
             for case_no in 1..=t {
-
                 if case_no != 21 {
                     // continue;
                 }
                 println!("Solving case {}", case_no);
 
-                writeln!(
-                    buffer,
-                    "Case #{}: {}",
-                    case_no,
-                    solve()
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve()).unwrap();
             }
         },
     );
 }
 
-fn solve(
-) -> isize
+fn solve() -> isize
 {
-3
+    3
 }

From c6c22a5e48a8d668be790cf8216e6a35d072689a Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 27 Feb 2019 22:26:26 -0300
Subject: [PATCH 114/122] kickstart 2014

---
 .../src/y2016round3/C-large-practice.in       | 1001 +++
 .../src/y2016round3/C-large-practice.out      | 5347 +++++++++++++++++
 .../src/y2016round3/C-small-practice.in       |  201 +
 .../src/y2016round3/C-small-practice.out      |  467 ++
 .../src/y2016round3/D-large-practice.in       | 2155 +++++++
 .../src/y2016round3/D-large-practice.out      |  100 +
 .../src/y2016round3/D-small-practice.in       |  464 ++
 .../src/y2016round3/D-small-practice.out      |  100 +
 codejam_2016/src/y2016round3/c.rs             |  410 ++
 codejam_2016/src/y2016round3/d.rs             |  556 ++
 kickstart_2014/.gitignore                     |    2 +
 kickstart_2014/Cargo.lock                     |  254 +
 kickstart_2014/Cargo.toml                     |   10 +
 kickstart_2014/format.bat                     |    1 +
 kickstart_2014/rustfmt.toml                   |    4 +
 kickstart_2014/src/main.rs                    |   20 +
 kickstart_2014/src/y2014_round_a/a.rs         |   73 +
 kickstart_2014/src/y2014_round_a/b.rs         |  129 +
 kickstart_2014/src/y2014_round_a/c.rs         |  170 +
 kickstart_2014/src/y2014_round_a/d.rs         |    0
 kickstart_2014/src/y2014_round_a/mod.rs       |    3 +
 21 files changed, 11467 insertions(+)
 create mode 100644 codejam_2016/src/y2016round3/C-large-practice.in
 create mode 100644 codejam_2016/src/y2016round3/C-large-practice.out
 create mode 100644 codejam_2016/src/y2016round3/C-small-practice.in
 create mode 100644 codejam_2016/src/y2016round3/C-small-practice.out
 create mode 100644 codejam_2016/src/y2016round3/D-large-practice.in
 create mode 100644 codejam_2016/src/y2016round3/D-large-practice.out
 create mode 100644 codejam_2016/src/y2016round3/D-small-practice.in
 create mode 100644 codejam_2016/src/y2016round3/D-small-practice.out
 create mode 100644 codejam_2016/src/y2016round3/c.rs
 create mode 100644 codejam_2016/src/y2016round3/d.rs
 create mode 100644 kickstart_2014/.gitignore
 create mode 100644 kickstart_2014/Cargo.lock
 create mode 100644 kickstart_2014/Cargo.toml
 create mode 100644 kickstart_2014/format.bat
 create mode 100644 kickstart_2014/rustfmt.toml
 create mode 100644 kickstart_2014/src/main.rs
 create mode 100644 kickstart_2014/src/y2014_round_a/a.rs
 create mode 100644 kickstart_2014/src/y2014_round_a/b.rs
 create mode 100644 kickstart_2014/src/y2014_round_a/c.rs
 create mode 100644 kickstart_2014/src/y2014_round_a/d.rs
 create mode 100644 kickstart_2014/src/y2014_round_a/mod.rs

diff --git a/codejam_2016/src/y2016round3/C-large-practice.in b/codejam_2016/src/y2016round3/C-large-practice.in
new file mode 100644
index 0000000..65ce59e
--- /dev/null
+++ b/codejam_2016/src/y2016round3/C-large-practice.in
@@ -0,0 +1,1001 @@
+500
+1 1
+1 4 3 2
+1 3
+1 8 2 7 3 4 5 6
+2 2
+8 1 4 5 2 3 7 6
+1 1
+1 3 2 4
+1 69
+135 136 51 50 59 60 86 55 74 73 115 114 120 19 124 17 106 105 89 52 77 62 97 42 107 108 3 2 1 140 48 47 87 88 45 94 54 53 137 4 12 13 29 28 57 58 31 32 127 14 11 128 134 5 15 126 125 16 119 22 104 37 34 33 85 84 133 132 70 69 23 116 75 76 118 117 38 39 102 103 111 110 112 113 95 44 49 92 10 129 98 99 139 138 46 93 90 91 30 109 80 79 83 56 130 9 72 67 18 121 101 100 82 81 36 35 41 40 68 71 24 25 96 43 78 61 27 26 123 122 66 65 64 63 131 8 6 7 21 20
+97 1
+11 186 182 15 170 169 122 75 10 9 93 94 56 141 48 149 113 114 98 101 159 160 72 71 112 85 152 47 77 78 55 142 127 128 139 140 87 86 153 46 82 81 164 35 57 58 26 171 6 193 115 116 163 36 177 176 1 196 135 62 19 180 45 154 136 61 100 99 41 42 17 18 95 102 131 68 79 120 146 51 97 96 179 178 49 50 188 187 4 5 60 59 119 80 3 194 69 130 74 123 155 156 103 104 162 161 52 53 150 151 73 126 168 29 67 132 21 20 158 157 91 90 44 43 175 174 189 8 64 63 191 190 28 27 165 34 148 147 38 37 125 124 105 92 138 137 89 108 106 107 66 65 16 181 143 144 184 185 166 31 40 39 195 2 14 183 88 111 133 134 32 33 22 23 121 76 118 117 109 110 83 84 12 13 25 172 24 173 30 167 192 7 70 129 145 54
+10 7
+11 20 8 23 29 6 25 24 31 4 13 18 1 34 12 19 26 27 15 14 17 16 10 21 32 3 30 5 22 9 7 28 2 33
+100 1
+101 102 159 44 80 123 177 26 27 176 91 112 142 61 29 174 51 152 124 79 163 40 201 2 54 149 45 158 108 95 56 147 100 103 115 88 156 47 60 143 50 153 72 131 5 198 15 188 199 4 190 13 187 16 104 99 62 141 82 121 194 9 36 167 37 166 64 139 10 193 6 197 175 28 70 133 132 71 38 165 107 96 154 49 126 77 85 118 3 200 195 8 192 11 33 170 179 24 144 59 52 151 35 168 90 113 186 17 41 162 125 78 87 116 57 146 189 14 164 39 145 58 182 21 119 84 136 67 1 202 169 34 122 81 42 161 160 43 83 120 109 94 19 184 127 76 181 22 130 73 46 157 30 173 171 32 117 86 111 92 138 65 185 18 178 25 7 196 129 74 155 48 55 148 128 75 134 69 31 172 191 12 135 68 180 23 93 110 183 20 97 106 66 137 140 63 150 53 98 105 114 89
+12 7
+27 28 4 3 12 15 30 17 5 2 6 1 25 24 8 7 21 22 10 37 32 33 11 16 35 36 9 38 29 18 26 19 31 34 20 23 14 13
+7 13
+3 2 19 18 32 39 36 35 8 31 21 22 13 16 23 24 12 17 15 14 33 38 7 6 9 30 27 20 10 11 29 28 26 25 4 5 1 40 34 37
+4 9
+13 12 11 14 18 19 6 1 22 21 4 3 7 10 25 26 20 17 5 2 23 24 15 16 8 9
+20 5
+15 40 38 39 45 44 32 31 29 30 42 43 35 24 17 16 13 12 34 33 50 49 22 23 28 27 37 36 48 47 1 2 5 6 10 11 8 9 3 4 19 18 14 41 26 25 20 21 7 46
+33 3
+58 59 29 24 25 26 20 19 45 50 2 1 66 65 14 23 42 41 17 16 48 49 30 35 3 8 22 15 21 18 61 60 31 32 47 46 53 52 68 67 9 72 69 44 33 34 38 43 55 56 4 5 70 71 36 37 51 54 27 28 64 63 7 6 12 11 10 13 39 40 62 57
+33 3
+2 5 65 66 39 40 15 16 7 8 18 17 69 70 36 35 41 48 14 21 4 3 49 50 29 56 31 32 52 51 23 24 37 34 47 42 60 59 1 6 30 55 28 27 63 64 67 62 19 20 43 44 38 33 68 61 11 12 26 25 45 46 72 9 53 54 71 10 58 57 22 13
+11 6
+11 12 27 26 21 22 16 17 9 2 19 18 34 33 32 31 28 29 24 23 15 14 25 30 20 1 5 4 13 10 6 7 8 3
+10 10
+11 10 36 35 16 15 39 14 32 33 8 3 22 23 17 26 37 34 19 24 6 5 20 21 4 7 28 29 1 40 31 38 27 30 12 13 25 18 9 2
+5 6
+13 18 3 22 14 15 8 11 2 1 9 10 17 16 21 4 7 6 20 19 12 5
+25 4
+37 36 24 25 43 42 57 58 41 40 44 21 28 27 14 15 33 32 29 34 22 23 53 54 45 46 48 47 30 31 3 6 7 8 19 20 55 10 17 16 5 4 9 2 1 56 51 50 13 52 38 39 11 12 35 26 18 49
+3 33
+44 45 26 27 19 20 23 22 59 8 11 58 63 60 28 41 2 3 42 21 24 25 5 6 51 50 16 17 12 55 39 36 34 35 61 62 43 46 57 56 52 53 15 14 38 37 47 48 32 31 49 18 29 40 70 69 9 10 7 4 64 1 65 66 13 54 72 67 71 68 33 30
+3 33
+38 35 20 17 47 48 49 44 43 24 39 34 70 69 42 31 45 46 33 32 37 36 21 16 29 28 2 5 66 65 50 23 60 57 68 67 56 13 6 7 11 8 26 25 12 63 9 10 14 53 1 72 58 59 4 3 54 55 18 19 71 64 61 62 30 27 15 52 22 51 40 41
+100 1
+1 202 165 164 100 103 136 67 33 34 155 48 16 15 13 192 27 178 26 25 181 182 147 58 88 115 125 78 54 55 36 167 152 53 149 56 72 133 162 41 188 17 24 23 47 46 116 87 3 2 118 119 99 106 96 107 94 95 159 44 128 75 31 32 101 102 4 199 198 197 175 176 196 7 21 184 14 191 105 104 160 161 180 179 173 30 84 85 77 76 90 89 183 22 177 28 43 42 195 8 121 82 5 6 120 83 190 189 37 38 187 186 130 73 122 123 145 144 109 108 52 51 60 61 174 29 70 71 35 170 117 86 65 64 143 142 141 140 39 166 80 79 150 151 134 135 163 40 113 112 132 131 111 110 148 57 97 98 156 157 68 69 168 169 63 62 172 171 153 154 193 12 200 201 114 91 19 20 126 127 66 137 81 124 50 49 129 74 185 18 194 9 138 139 59 146 158 45 10 11 93 92
+10 10
+3 4 6 7 20 21 29 30 33 32 19 22 9 2 14 25 31 34 17 24 27 40 26 1 11 12 23 18 36 37 28 39 16 15 8 5 35 38 10 13
+1 99
+190 9 119 78 133 132 191 192 16 183 141 142 12 11 199 198 97 102 130 129 57 58 61 136 147 52 143 56 169 168 31 30 167 34 29 170 164 37 47 150 93 106 112 111 124 125 174 175 42 159 157 156 99 100 122 77 87 88 74 123 144 55 33 32 67 68 128 69 195 196 20 181 149 48 160 161 118 79 193 8 176 25 83 84 114 85 28 171 19 182 110 89 173 26 152 153 76 75 49 50 103 94 137 60 82 117 92 107 105 104 145 54 91 108 188 13 166 165 134 135 17 18 90 109 163 38 139 140 35 36 72 73 127 70 1 200 187 14 65 64 194 5 15 186 131 66 44 45 96 95 98 101 185 184 121 120 115 116 197 2 71 126 80 81 148 51 189 10 178 23 4 3 21 180 53 146 63 62 24 177 158 43 155 154 86 113 7 6 162 39 138 59 151 46 172 27 179 22 40 41
+10 1
+12 9 1 2 3 4 5 22 10 11 14 13 6 7 16 15 18 21 17 8 19 20
+6 3
+7 6 18 1 11 10 8 9 14 17 5 12 16 15 4 3 2 13
+49 2
+27 26 101 102 9 8 19 84 73 72 33 32 50 49 75 74 90 91 6 5 43 42 89 14 21 20 64 41 1 2 65 66 45 62 61 46 93 94 71 70 86 87 59 58 78 29 12 95 60 57 88 85 96 11 31 76 30 77 23 80 22 83 98 7 47 48 39 40 63 44 15 16 34 69 35 36 10 97 56 51 99 100 37 38 24 25 92 13 67 68 17 18 55 52 79 28 53 54 4 3 81 82
+11 3
+22 23 28 1 9 8 21 10 14 15 16 13 12 11 26 25 6 7 3 4 5 2 18 17 24 27 19 20
+14 7
+38 5 31 30 4 39 14 15 41 2 7 36 40 3 34 35 23 12 25 10 28 29 33 32 19 18 20 21 37 6 27 8 22 13 17 16 24 11 42 1 9 26
+6 15
+5 6 14 19 16 15 31 8 23 24 4 1 21 26 33 34 41 40 36 39 11 10 18 17 27 20 38 37 25 22 35 32 13 12 28 29 7 42 9 30 2 3
+14 7
+10 11 20 19 2 1 26 25 42 5 27 34 12 17 9 8 13 14 32 33 21 22 30 31 16 15 18 37 24 23 41 6 28 29 39 40 35 36 7 38 4 3
+4 10
+2 5 27 26 1 28 3 4 23 22 9 8 24 19 7 10 12 17 25 6 18 11 14 13 21 20 15 16
+10 10
+35 36 30 29 16 17 33 20 32 31 12 9 14 13 7 4 28 23 39 38 8 37 10 11 27 26 21 22 19 34 18 15 24 25 2 1 6 5 40 3
+2 14
+29 30 24 23 32 1 14 17 20 19 3 4 10 9 31 28 16 15 27 22 6 5 18 21 2 11 12 13 25 26 8 7
+10 10
+12 13 19 20 26 25 28 23 15 16 24 27 6 5 38 1 32 31 29 30 11 14 36 35 21 18 40 39 33 34 22 37 9 10 7 8 2 17 4 3
+6 16
+25 18 10 11 31 30 34 41 5 12 32 33 23 24 29 28 38 37 13 4 36 35 15 14 44 1 3 16 21 22 6 9 26 27 8 7 19 20 2 17 40 39 43 42
+16 6
+40 39 24 27 37 36 29 30 33 32 16 9 34 3 35 38 42 41 13 10 20 31 17 8 4 5 19 18 14 15 2 43 23 28 7 6 25 26 21 22 11 12 44 1
+2 33
+14 13 63 62 67 68 19 50 61 60 70 69 1 2 38 39 32 37 34 35 21 46 5 6 58 57 25 24 10 11 42 43 47 20 8 9 55 54 41 40 64 7 45 44 49 48 27 26 66 65 33 36 56 53 52 51 59 12 4 3 22 23 17 18 16 15 28 31 30 29
+10 10
+30 33 31 32 15 10 24 35 29 34 17 36 12 13 6 5 2 1 20 19 25 26 37 16 18 23 40 3 38 7 22 21 28 27 14 11 4 39 9 8
+20 3
+11 46 13 12 28 29 2 1 10 7 45 44 24 23 35 36 34 33 20 39 8 9 19 18 31 32 42 43 15 14 3 4 41 40 22 21 26 27 5 6 37 38 30 25 17 16
+7 14
+36 39 14 13 28 29 34 33 3 2 16 19 30 35 27 26 37 38 32 31 23 24 15 12 40 41 11 10 42 1 18 17 7 8 21 20 4 9 25 22 6 5
+6 7
+11 1 3 12 23 20 2 8 16 26 15 13 7 5 21 19 14 10 6 17 25 9 4 18 24 22
+3 24
+47 48 40 39 20 19 26 1 13 14 25 2 16 15 3 4 7 8 50 53 10 9 36 35 38 37 28 27 43 44 41 42 12 11 54 49 45 46 31 32 5 6 29 30 24 23 22 21 51 52 18 17 33 34
+14 6
+31 32 26 25 11 10 23 24 2 7 34 33 37 30 22 21 36 35 40 1 17 16 6 5 19 38 13 12 18 39 29 28 14 15 3 4 27 20 9 8
+16 6
+44 5 40 17 42 9 21 22 26 25 18 31 28 29 24 27 2 1 11 10 39 34 19 30 41 16 6 43 3 4 37 36 14 15 13 12 20 23 38 35 32 33 7 8
+1 100
+193 192 79 122 41 42 20 19 80 81 198 5 6 197 28 175 135 136 57 146 30 173 70 69 2 1 138 139 76 77 123 78 120 121 163 38 56 55 128 75 161 162 189 12 194 195 25 26 117 86 129 72 130 71 172 171 49 50 54 149 22 21 83 82 88 87 184 185 152 151 92 109 29 174 34 169 33 32 183 18 68 67 118 119 13 188 182 181 126 127 201 202 11 10 51 52 124 125 24 177 156 45 154 153 64 65 63 140 114 89 94 93 97 96 150 53 112 91 158 157 23 178 147 148 108 95 105 98 180 179 14 15 145 144 132 131 167 168 137 66 107 106 31 170 111 110 61 60 186 187 99 104 16 17 40 39 160 43 85 84 103 102 116 115 8 9 141 62 101 100 36 37 133 134 200 3 46 47 196 7 143 58 190 191 74 73 4 199 166 35 165 164 113 90 142 59 48 155 27 176 159 44
+6 16
+41 4 35 10 16 29 9 36 21 24 14 31 3 42 38 7 26 19 30 15 8 37 43 2 32 13 34 11 20 25 39 6 27 18 33 12 44 1 23 22 28 17 40 5
+5 13
+11 10 35 32 30 31 36 1 29 28 7 8 24 25 26 27 4 5 18 17 9 22 12 21 33 34 16 15 14 13 19 20 23 6 2 3
+7 14
+28 19 15 18 9 6 25 22 2 39 17 16 12 31 29 30 26 27 40 1 41 42 11 10 20 21 5 38 24 23 33 32 13 14 8 7 3 4 35 36 37 34
+4 10
+17 16 26 27 2 3 6 7 22 21 25 24 11 8 20 23 1 28 5 4 12 13 15 14 10 9 18 19
+15 3
+23 16 22 21 18 19 15 34 9 10 2 3 4 5 6 35 8 7 33 32 36 1 20 17 31 26 12 11 24 25 29 28 13 14 27 30
+9 10
+9 2 13 22 6 7 29 30 24 23 31 12 32 35 37 10 15 16 19 18 4 5 20 17 27 28 26 25 36 11 21 14 38 1 34 33 3 8
+14 7
+35 28 39 24 27 38 14 7 25 26 34 29 42 21 4 5 40 41 8 9 37 36 2 3 13 12 33 32 20 19 17 18 30 31 16 15 10 11 23 22 1 6
+25 2
+8 9 51 50 6 7 54 53 42 43 21 38 20 19 35 22 14 15 2 3 5 48 39 40 44 45 46 47 12 11 32 33 49 4 37 36 23 24 28 27 30 29 18 41 34 31 25 26 10 13 1 52 17 16
+6 6
+13 14 15 10 20 19 1 2 17 16 5 4 9 6 3 24 22 21 7 8 12 11 18 23
+3 10
+5 2 13 8 15 16 22 23 26 19 24 21 9 12 11 10 14 17 6 7 3 4 1 18 20 25
+39 2
+23 10 59 60 82 1 28 33 40 41 49 50 4 9 74 75 78 77 5 8 18 15 16 17 81 24 45 48 66 61 73 68 26 25 21 22 37 38 14 13 29 32 7 6 58 39 55 52 43 44 27 34 20 19 63 64 80 67 57 56 69 72 70 71 12 11 79 76 35 36 54 53 65 62 46 47 51 42 3 2 31 30
+1 41
+43 40 27 26 83 2 62 63 71 70 3 78 42 41 16 17 76 5 84 1 32 51 38 37 46 45 4 77 57 56 60 61 10 9 81 82 21 22 52 53 8 11 59 20 7 6 50 33 35 36 69 12 25 24 55 54 75 74 68 67 13 14 30 31 39 44 15 64 34 47 73 72 58 23 49 48 19 18 79 80 65 66 28 29
+6 16
+27 26 10 29 25 22 30 5 44 43 40 41 38 33 35 34 3 4 12 15 28 11 18 17 8 9 6 7 36 37 31 2 42 1 32 39 24 23 21 16 19 20 13 14
+3 6
+8 7 10 9 13 12 11 16 6 3 15 14 5 4 2 17 1 18
+14 3
+34 31 2 29 6 3 22 23 30 1 14 15 20 21 32 33 26 17 7 28 12 9 24 25 19 18 4 5 10 11 16 13 27 8
+15 4
+30 27 18 23 32 37 24 25 31 8 6 7 1 38 29 28 3 4 14 9 13 10 36 35 12 11 17 26 33 34 20 21 22 19 15 16 2 5
+3 16
+3 4 9 6 10 11 20 21 23 26 32 35 33 34 15 14 27 28 12 13 37 38 29 30 31 22 25 24 36 1 7 8 16 17 2 5 19 18
+4 5
+15 14 18 1 6 7 16 11 2 3 9 10 8 17 13 12 5 4
+3 18
+12 11 23 20 31 32 4 3 22 21 34 33 30 29 26 25 28 13 27 14 2 35 1 42 24 17 38 41 16 15 9 10 37 36 8 7 40 39 19 18 5 6
+5 10
+25 24 12 21 26 23 17 16 8 11 28 29 15 18 6 5 20 19 14 13 10 9 30 3 2 1 27 22 7 4
+4 24
+52 47 7 10 36 29 46 3 9 8 51 50 24 37 13 6 20 21 19 16 4 5 14 23 12 11 2 53 30 31 45 44 34 35 25 26 43 42 41 40 28 27 22 15 56 1 54 55 49 48 39 38 18 17 33 32
+7 11
+36 35 31 22 30 23 3 34 12 5 21 20 33 32 7 10 18 17 13 4 6 11 1 2 24 25 9 8 19 16 27 28 14 15 29 26
+3 33
+14 63 36 33 6 7 9 72 49 24 47 46 55 18 16 17 50 23 69 70 66 65 11 12 15 56 5 8 22 51 40 41 32 37 42 29 3 4 35 34 52 21 59 62 25 44 64 71 53 20 54 19 10 13 43 28 30 39 67 68 2 1 61 60 57 58 27 26 45 48 38 31
+6 16
+5 40 2 41 27 30 17 16 10 15 19 32 36 37 1 42 7 6 4 3 23 24 44 43 29 28 22 25 11 14 33 34 13 12 35 38 20 31 8 39 9 18 21 26
+10 2
+9 8 22 23 6 7 14 13 20 21 10 11 18 1 16 17 2 3 4 5 19 24 12 15
+3 33
+68 67 39 38 36 37 25 24 60 61 72 1 11 12 23 52 45 44 7 6 70 71 19 54 21 22 47 46 65 10 9 8 32 35 2 69 4 5 56 55 63 64 62 59 29 30 31 40 18 17 57 58 20 53 26 41 33 34 15 16 51 50 48 49 28 27 13 14 42 43 3 66
+15 4
+12 13 29 30 27 28 4 3 1 38 10 5 17 18 31 32 21 22 2 37 11 14 36 35 23 24 34 33 15 16 6 7 20 19 8 9 25 26
+6 16
+40 41 11 26 12 25 10 9 16 15 13 14 21 24 1 2 22 23 44 37 20 19 30 29 3 36 4 33 8 7 6 5 38 39 31 32 34 35 17 18 28 27 42 43
+6 16
+6 5 14 17 12 19 2 41 9 10 32 35 39 24 34 33 28 29 38 31 23 22 25 26 36 37 3 40 30 27 44 1 42 43 20 11 8 21 15 16 4 7 18 13
+33 3
+49 48 45 30 46 47 60 59 28 51 11 10 63 14 9 66 20 19 8 7 55 56 37 36 57 58 27 24 72 1 23 22 62 15 31 44 42 43 71 70 5 6 38 41 54 21 34 35 13 12 64 65 16 61 2 3 50 29 26 25 67 68 33 32 4 69 39 40 17 18 52 53
+2 49
+84 21 10 9 16 15 29 76 35 68 85 18 93 94 72 73 30 31 47 50 88 87 64 65 67 66 14 13 34 33 11 12 4 99 44 43 80 23 42 41 32 69 75 74 100 3 58 45 62 61 40 39 17 86 25 24 19 20 97 98 26 27 102 1 92 91 28 77 95 8 82 81 101 2 6 7 22 83 96 5 53 54 59 60 48 49 90 89 51 52 36 37 63 38 70 71 55 56 46 57 79 78
+4 16
+40 39 28 27 21 8 14 17 22 7 31 30 37 36 24 25 38 1 34 29 10 9 20 11 16 15 4 3 12 13 2 5 35 6 26 23 32 33 19 18
+5 2
+2 13 1 14 3 6 10 7 12 11 8 9 4 5
+25 4
+55 56 15 48 23 24 18 19 57 58 29 32 45 20 53 52 31 30 22 21 7 8 17 16 36 35 26 27 47 46 11 54 2 3 5 6 51 14 44 43 10 9 39 42 38 37 34 33 49 50 4 1 25 28 13 12 40 41
+25 4
+14 13 36 41 28 29 47 48 35 32 51 50 22 23 37 38 58 1 54 55 3 2 11 56 49 52 7 6 57 8 45 44 16 19 40 39 25 24 30 31 27 26 46 15 53 12 18 17 10 9 42 43 33 34 20 21 5 4
+20 5
+38 17 32 33 23 20 43 16 7 4 41 42 36 37 5 6 50 49 15 44 9 8 22 21 46 45 26 27 14 13 12 47 34 31 25 24 28 29 1 48 19 18 39 40 11 2 30 35 10 3
+3 24
+45 44 8 11 27 28 42 39 2 1 51 52 25 24 37 38 18 43 20 21 22 19 14 17 12 13 33 36 48 7 9 10 3 54 30 31 5 4 49 6 35 34 26 29 32 23 16 15 47 46 50 53 40 41
+4 25
+29 30 43 42 33 32 16 15 35 36 34 23 58 57 46 13 10 9 1 56 2 3 14 37 55 54 27 26 38 39 20 19 4 5 48 47 52 53 25 24 50 51 49 6 31 28 44 45 21 22 40 41 12 11 7 8 17 18
+8 10
+31 28 23 22 11 12 30 29 21 20 3 4 10 13 16 19 18 17 15 14 7 6 34 33 2 1 8 27 9 26 5 36 32 35 25 24
+6 16
+8 9 4 3 1 2 26 31 37 36 27 28 18 21 35 32 17 38 41 40 42 39 6 5 24 23 16 13 14 15 7 12 20 19 44 43 33 34 10 11 25 22 29 30
+7 13
+25 26 2 1 12 11 24 27 28 7 17 16 3 4 38 37 30 29 35 34 18 15 39 32 36 33 13 10 20 21 8 9 5 6 14 19 22 23 40 31
+33 3
+21 20 10 11 66 67 44 45 1 72 60 61 29 28 55 54 23 22 14 15 32 33 31 30 41 40 69 68 34 35 50 51 47 46 37 36 58 59 38 5 26 27 57 56 24 25 63 62 49 48 70 3 18 19 52 53 43 42 2 71 16 17 4 39 65 64 7 6 8 9 13 12
+16 6
+20 13 12 1 27 34 7 6 43 26 11 2 21 24 37 40 32 29 38 39 42 35 5 8 4 9 19 14 33 28 23 22 30 31 16 17 18 15 36 41 10 3 44 25
+33 3
+71 70 44 45 39 40 59 58 42 43 36 37 54 53 62 63 28 27 31 30 38 41 48 35 34 33 15 16 66 65 21 20 7 10 14 11 50 51 19 18 49 52 24 25 23 60 32 55 4 3 57 56 68 67 47 46 2 1 29 26 5 72 22 17 9 8 64 61 6 69 12 13
+14 7
+35 36 21 26 18 19 31 32 14 15 33 30 8 7 2 11 16 1 13 12 42 41 23 22 20 17 24 25 3 10 6 9 5 4 34 29 27 28 38 39 40 37
+4 24
+37 12 13 14 42 41 38 39 28 29 6 7 45 44 9 8 43 10 19 20 3 2 26 27 40 11 51 50 56 1 4 55 47 46 30 31 5 48 33 32 36 15 17 18 49 52 21 16 35 34 22 23 53 54 25 24
+3 16
+24 23 35 34 15 14 30 31 18 19 21 20 36 33 26 25 38 37 32 1 10 11 22 29 8 7 9 6 3 2 4 5 28 27 13 12 17 16
+14 7
+31 40 25 42 1 14 18 21 27 30 23 16 9 6 11 4 39 32 41 26 13 2 28 29 37 34 33 38 19 20 8 7 24 15 12 3 35 36 17 22 10 5
+5 20
+43 50 1 2 39 38 40 17 35 18 13 6 42 3 33 34 27 28 15 16 22 25 21 30 45 46 12 9 44 47 32 19 41 14 24 23 11 10 26 29 37 36 4 5 20 31 49 48 8 7
+1 13
+27 28 10 17 21 8 20 19 6 7 22 23 9 18 5 4 13 12 2 1 25 26 14 15 16 11 3 24
+4 7
+18 17 10 11 22 13 20 15 21 14 1 6 5 4 12 9 3 2 8 7 16 19
+1 10
+17 18 3 4 11 12 9 10 1 22 16 15 8 7 19 20 14 13 2 21 5 6
+23 3
+38 37 34 33 20 19 10 9 17 18 40 39 25 26 31 32 8 7 12 11 1 6 14 13 21 22 42 41 36 35 52 27 45 46 5 2 28 51 15 16 47 48 4 3 24 23 50 49 29 30 43 44
+10 10
+19 22 10 7 16 13 3 2 31 24 23 18 21 20 17 12 9 8 1 38 36 35 5 34 39 40 25 26 15 14 4 37 28 27 11 6 30 29 33 32
+10 4
+20 21 18 19 22 23 27 16 24 25 8 1 9 10 26 17 28 15 3 6 5 4 12 11 13 14 2 7
+16 6
+12 13 11 14 5 2 19 18 38 37 41 6 10 9 44 1 31 26 34 33 21 22 3 4 16 17 25 20 40 39 43 42 7 8 23 24 28 27 36 35 15 32 29 30
+14 7
+30 41 31 34 17 14 7 8 27 2 11 4 36 39 18 25 24 21 40 35 13 26 3 12 19 20 32 33 29 42 5 10 22 23 28 1 37 38 15 16 9 6
+32 3
+56 57 43 42 55 54 4 67 39 36 66 63 48 49 19 18 52 25 37 38 30 27 41 34 9 8 23 22 3 68 50 31 28 29 65 64 13 14 26 51 16 15 21 24 58 53 6 5 20 61 33 44 62 17 59 60 46 47 10 11 69 2 70 1 12 7 45 32 40 35
+14 7
+38 5 16 27 29 14 8 35 33 10 24 19 13 30 6 37 36 7 39 4 3 40 12 31 22 21 11 32 2 41 1 42 18 25 23 20 28 15 26 17 34 9
+1 3
+3 6 2 7 8 1 4 5
+28 3
+38 31 6 7 25 46 18 47 57 60 44 43 21 22 53 12 24 23 49 48 13 52 26 27 15 16 59 58 50 17 32 35 20 19 5 4 29 30 9 10 55 8 11 54 56 61 42 45 14 51 3 2 39 28 34 33 40 41 36 37 1 62
+1 100
+169 32 143 142 105 96 53 52 100 101 113 112 124 77 46 155 23 180 187 16 159 160 63 138 123 78 136 65 48 153 145 144 88 115 24 25 37 36 6 7 104 99 182 181 118 119 13 188 175 176 197 198 64 137 10 11 67 134 75 74 117 116 41 42 191 190 133 68 162 161 114 89 177 26 146 147 45 158 110 91 35 166 81 80 140 61 97 98 120 83 59 58 168 33 167 34 154 47 87 86 71 70 30 31 27 174 85 84 111 90 69 132 194 195 44 43 82 121 17 186 108 107 122 79 38 165 15 14 4 3 178 179 151 152 94 93 2 1 150 51 202 201 106 95 196 5 56 57 199 200 139 62 19 184 130 131 55 148 12 189 127 76 73 72 185 18 49 50 192 9 149 54 109 92 163 40 183 20 173 28 135 66 126 125 156 157 29 172 193 8 164 39 141 60 22 21 128 129 171 170 102 103
+14 6
+32 33 5 6 12 15 29 28 22 21 13 14 19 18 40 3 27 26 2 1 16 17 37 10 38 39 34 11 24 25 31 30 35 36 4 7 20 23 9 8
+33 3
+44 39 62 63 42 43 2 71 66 67 40 41 7 6 50 51 19 24 11 56 16 17 26 33 30 31 9 8 53 48 57 10 35 34 20 21 22 23 15 14 49 52 68 69 27 32 37 36 54 55 46 47 38 45 29 28 70 3 72 1 65 4 58 59 64 5 18 25 61 60 12 13
+9 10
+35 36 17 24 7 8 10 11 2 3 4 1 23 18 38 5 34 31 12 13 16 25 21 20 9 6 33 32 22 19 37 30 28 29 26 27 14 15
+10 10
+19 22 10 31 39 2 16 25 27 14 6 35 34 7 13 28 18 23 1 40 15 26 9 32 17 24 21 20 12 29 38 3 11 30 8 33 4 37 5 36
+86 1
+100 75 126 125 39 38 87 86 51 122 44 45 2 173 161 14 49 50 137 136 27 148 76 97 103 102 54 119 12 163 96 77 130 131 99 98 120 121 47 46 106 69 79 78 111 64 159 158 144 31 139 138 80 95 156 21 170 169 153 22 85 88 101 74 19 20 108 65 90 83 17 16 82 93 128 129 134 135 140 37 18 157 164 11 33 32 117 118 7 168 141 142 56 55 8 9 105 104 24 23 109 110 63 112 81 94 10 167 155 154 3 4 28 29 127 48 162 13 145 30 43 42 40 41 133 132 166 165 172 171 116 115 150 149 71 70 60 59 5 6 160 15 107 66 92 91 57 58 62 61 1 174 114 113 35 36 52 53 73 72 147 146 26 25 151 152 84 89 124 123 67 68 34 143
+3 33
+33 32 54 19 16 17 48 21 22 47 59 58 52 53 64 7 25 30 34 37 66 71 60 57 36 35 4 5 45 44 28 27 3 6 15 14 39 40 49 20 9 10 11 8 69 68 24 23 29 26 1 72 55 12 65 2 56 63 70 67 31 42 50 51 62 61 13 18 38 41 46 43
+25 4
+16 45 17 18 52 53 4 5 42 43 46 47 48 15 34 33 9 10 39 38 25 28 21 22 12 11 51 50 36 35 6 3 23 24 32 29 14 49 30 31 44 19 56 55 54 13 26 27 7 8 1 58 41 20 2 57 37 40
+4 4
+8 9 3 2 10 5 6 7 12 1 4 11 16 13 15 14
+4 6
+14 5 3 2 9 8 12 7 15 4 19 18 20 17 10 11 1 16 6 13
+14 7
+3 40 20 25 17 36 24 21 6 7 35 30 8 9 31 32 15 14 41 42 13 10 12 11 4 39 26 29 19 18 22 23 16 5 2 1 33 34 27 28 37 38
+4 2
+3 2 8 9 10 11 12 1 7 4 6 5
+6 15
+9 12 35 18 41 2 16 15 22 23 3 40 32 29 37 6 25 20 31 30 11 10 39 4 26 19 28 33 21 24 7 14 42 1 17 36 8 13 34 27 5 38
+12 7
+11 18 25 28 14 15 27 26 36 3 23 30 4 35 12 17 16 13 38 1 2 37 20 9 7 32 5 34 31 22 8 21 6 33 10 19 24 29
+14 5
+36 35 27 28 37 38 17 16 4 5 8 11 30 29 15 12 10 9 2 1 18 19 25 24 20 31 34 33 6 7 13 14 21 22 26 23 3 32
+33 3
+55 56 14 15 68 67 16 17 11 6 25 24 49 50 8 7 12 13 20 21 44 39 60 63 46 47 38 37 72 71 59 58 70 69 57 54 33 32 22 23 66 65 41 40 48 53 3 4 45 36 28 27 9 10 31 30 52 51 19 18 64 5 35 34 62 61 1 2 29 26 42 43
+10 10
+10 19 40 39 4 33 14 13 2 3 38 1 34 37 15 12 9 20 18 17 30 29 32 27 31 28 26 23 35 36 22 5 6 7 16 11 21 8 24 25
+6 13
+8 9 6 17 14 15 23 24 29 18 31 32 27 28 36 35 25 20 16 7 5 2 38 37 4 3 21 22 11 10 30 33 26 19 13 12 1 34
+16 4
+39 40 21 22 26 27 10 11 29 30 36 35 31 32 12 13 14 33 25 28 16 23 20 17 9 6 15 24 38 37 7 8 1 34 5 4 19 18 3 2
+25 4
+26 23 15 50 34 35 9 8 58 3 47 48 31 32 38 37 46 49 1 2 52 51 6 5 18 17 7 4 57 10 21 44 11 12 28 27 30 29 33 36 43 22 41 40 53 54 20 45 14 13 39 42 25 24 56 55 16 19
+4 6
+14 15 7 8 11 10 1 6 13 12 18 17 3 4 20 19 16 9 2 5
+10 10
+29 30 20 27 9 8 11 18 3 40 19 6 2 1 14 15 4 39 34 31 32 33 5 38 36 35 17 12 16 13 25 24 23 22 37 28 21 26 7 10
+10 3
+5 4 23 24 11 10 12 13 2 1 3 6 16 15 19 18 14 21 8 7 25 26 22 9 20 17
+10 10
+35 34 8 9 30 31 21 20 33 10 19 22 32 29 37 38 2 1 26 27 24 25 36 39 11 12 13 14 7 40 3 4 18 17 16 15 6 5 28 23
+3 33
+48 25 63 10 7 66 20 53 29 44 69 4 18 55 13 60 56 17 51 22 31 42 38 35 28 45 64 9 36 37 3 70 30 43 11 62 21 52 14 59 24 49 33 40 19 54 61 12 8 65 16 57 15 58 68 5 67 6 41 32 46 27 71 2 39 34 26 47 50 23 72 1
+16 6
+42 3 18 39 34 35 11 10 6 5 25 26 17 14 15 16 43 2 19 38 23 20 13 40 8 7 27 28 31 36 9 4 44 1 22 21 24 29 33 32 37 30 41 12
+7 4
+12 11 13 2 22 1 10 5 19 20 8 7 6 9 18 17 14 21 16 15 4 3
+4 8
+24 1 20 19 5 14 13 12 2 23 17 18 4 3 8 9 10 11 6 7 15 16 22 21
+19 3
+25 26 2 5 12 11 33 30 39 38 7 6 9 8 1 44 15 14 20 19 3 4 22 21 18 17 16 27 43 42 41 40 35 34 36 13 37 10 32 31 29 28 23 24
+1 99
+64 135 191 190 92 93 77 122 25 24 48 49 44 45 19 20 34 33 175 26 184 183 30 29 169 168 129 68 151 46 2 199 137 138 181 182 57 142 40 157 47 150 51 146 116 115 84 83 71 126 14 185 91 106 22 21 70 69 18 17 132 133 28 171 75 76 100 99 127 128 108 109 156 155 148 149 110 89 10 189 12 187 174 173 112 87 123 74 11 188 163 164 105 104 52 145 180 179 117 118 154 43 32 167 9 192 170 31 186 13 134 65 120 121 4 195 5 6 1 200 159 38 54 53 113 86 141 140 107 90 125 72 88 111 193 194 176 23 119 80 37 36 172 27 197 198 160 161 124 73 97 98 130 131 95 96 58 59 196 3 101 102 60 139 15 16 82 81 152 153 66 67 143 56 7 8 62 61 166 165 114 85 136 63 78 79 144 55 41 42 177 178 147 50 158 39 94 103 35 162
+4 24
+20 21 10 11 6 7 49 54 19 22 23 26 33 34 27 28 44 45 30 31 14 39 3 2 36 37 5 4 25 24 55 56 42 43 15 16 46 47 40 9 48 1 38 17 50 53 41 8 18 35 32 29 51 52 13 12
+6 13
+34 33 25 24 11 16 13 12 17 18 31 32 4 35 10 9 22 21 8 7 36 3 26 23 1 2 20 19 27 28 15 14 5 6 29 30 38 37
+3 27
+16 17 52 3 26 27 30 33 10 9 60 1 24 29 23 34 54 59 50 49 28 25 14 43 21 36 46 51 48 47 56 55 19 20 7 4 37 38 40 15 39 18 45 8 35 22 12 13 57 58 42 41 31 32 44 11 6 5 2 53
+10 10
+5 2 35 32 16 15 10 9 28 27 31 38 7 26 6 1 3 4 12 13 23 14 39 40 22 21 11 24 36 37 33 34 17 20 25 8 30 29 18 19
+10 10
+25 16 6 35 9 32 38 3 2 39 33 8 1 40 4 37 5 36 23 18 21 20 17 24 13 28 31 10 12 29 19 22 34 7 15 26 30 11 27 14
+6 3
+13 16 18 1 4 5 2 7 6 3 11 10 14 15 12 17 8 9
+4 25
+7 50 10 41 31 32 26 21 29 30 12 11 1 2 14 17 4 3 5 6 24 25 37 18 13 40 53 56 16 15 38 39 48 49 42 43 28 27 46 47 36 35 23 22 8 9 33 34 58 57 20 19 54 55 44 45 51 52
+3 26
+51 52 54 53 55 58 45 12 37 38 43 42 47 46 26 35 34 27 4 5 14 15 56 57 28 31 1 2 7 48 18 17 39 40 23 24 3 6 32 33 41 16 19 20 49 50 13 44 8 9 11 10 29 30 21 36 25 22
+2 50
+30 73 19 84 78 27 9 10 79 80 38 39 14 13 64 37 44 45 21 20 17 18 81 22 74 75 2 99 5 98 31 72 3 4 40 63 95 96 100 1 68 33 25 26 12 11 71 32 86 85 87 16 6 97 29 28 50 53 24 23 90 89 77 76 69 70 35 34 93 94 92 91 67 36 7 8 49 56 66 65 61 62 59 58 15 88 60 43 54 55 83 82 47 46 48 57 104 101 52 51 41 42 103 102
+13 5
+23 24 6 5 21 34 1 10 9 2 36 19 11 12 7 4 28 27 29 30 20 35 13 14 18 17 22 33 25 26 31 32 3 8 16 15
+5 20
+36 11 14 15 9 10 22 21 16 17 29 30 13 34 50 49 32 33 37 38 41 6 28 23 18 31 12 35 1 2 27 26 45 46 25 24 4 5 43 42 48 47 40 39 7 8 3 44 19 20
+50 1
+80 25 73 72 58 57 74 33 81 24 61 44 83 82 98 97 49 50 32 31 37 68 20 85 9 8 35 34 86 17 47 56 95 12 89 90 19 18 36 69 1 2 3 4 79 26 42 43 78 27 16 87 45 46 71 70 7 96 5 6 94 93 28 29 99 100 30 77 67 66 51 52 41 40 101 102 13 14 53 54 22 23 63 64 65 62 76 75 59 60 38 39 91 92 11 10 21 84 48 55 88 15
+5 20
+6 5 19 20 11 10 27 24 14 41 30 29 42 7 25 26 46 47 18 17 4 45 9 8 16 23 38 15 13 12 48 3 40 39 50 49 37 36 34 35 31 32 21 22 28 33 2 1 44 43
+5 10
+14 15 11 10 25 24 4 5 23 26 20 19 28 29 27 6 17 16 7 12 18 13 8 9 2 3 1 30 21 22
+2 7
+11 4 17 16 14 1 2 13 8 7 10 5 18 15 6 9 12 3
+4 25
+24 35 10 49 7 52 5 54 17 42 37 22 23 36 9 50 11 48 4 55 21 38 57 2 32 27 19 40 15 44 12 47 31 28 3 56 6 53 41 18 58 1 29 30 14 45 51 8 39 20 34 25 43 16 26 33 46 13
+3 15
+26 7 35 28 6 27 4 3 30 31 16 15 23 12 10 25 33 34 29 32 9 8 20 17 19 18 21 14 1 36 2 5 22 13 24 11
+4 24
+5 2 54 55 16 39 15 44 23 26 28 27 35 38 34 33 32 19 7 8 31 22 4 3 50 51 17 18 41 40 45 6 10 9 30 29 1 56 12 11 53 52 25 24 21 20 42 43 47 48 36 37 46 49 14 13
+7 12
+6 5 17 20 15 14 7 4 11 28 29 10 1 38 19 18 27 26 25 24 35 34 23 22 37 36 21 12 30 33 16 13 8 3 9 2 31 32
+3 6
+12 13 5 18 17 16 3 4 6 15 7 8 10 9 11 14 1 2
+5 9
+28 27 10 9 17 18 8 7 5 6 26 25 24 23 20 21 1 2 4 11 16 15 13 14 12 3 22 19
+10 2
+12 11 10 9 21 22 19 16 23 24 13 6 18 17 3 2 15 14 4 1 8 7 5 20
+5 6
+9 16 22 1 3 20 15 10 19 4 8 17 11 14 21 2 18 5 13 12 6 7
+10 10
+3 38 7 8 17 16 10 9 15 18 40 39 33 34 5 6 28 29 36 13 35 14 4 37 2 1 22 21 27 26 23 20 24 31 12 11 30 25 32 19
+6 16
+43 42 13 12 5 4 35 34 44 3 38 41 36 37 26 27 22 23 28 31 16 15 14 33 25 24 32 21 29 30 7 6 18 17 40 39 20 19 9 8 2 1 10 11
+4 18
+15 18 41 40 5 4 16 17 12 13 32 31 11 14 34 35 19 20 42 43 22 37 3 8 36 33 2 21 7 6 30 29 27 28 1 44 26 25 38 39 10 9 23 24
+50 2
+53 54 16 17 58 57 42 67 12 11 78 79 4 3 2 101 97 98 5 6 51 52 77 30 36 37 21 20 38 39 27 82 34 35 88 19 75 74 85 24 90 91 72 73 40 41 69 68 99 100 45 46 89 18 80 81 102 103 83 84 32 31 59 48 10 9 96 95 56 55 94 15 26 25 14 13 64 63 8 7 93 92 87 86 104 1 47 62 60 61 43 44 66 65 49 50 70 71 28 29 22 23 33 76
+4 1
+2 1 5 8 4 3 10 9 7 6
+25 4
+51 50 26 25 48 13 19 20 33 34 35 36 9 10 1 2 22 23 8 7 55 56 31 30 14 17 16 15 28 27 4 3 39 38 12 11 52 53 45 18 5 6 47 46 57 58 32 29 42 41 49 54 43 40 21 44 24 37
+3 1
+4 5 8 7 2 1 3 6
+10 10
+30 29 34 1 8 7 11 10 27 28 18 3 21 20 12 17 5 4 15 16 38 35 36 37 22 19 33 2 25 26 23 24 32 31 13 14 6 9 39 40
+3 24
+32 33 44 9 45 8 54 53 42 43 31 22 50 51 52 47 28 27 41 40 11 10 29 30 21 20 16 17 34 35 38 39 5 46 23 26 48 49 2 1 24 25 36 37 7 6 12 13 15 14 3 4 19 18
+16 6
+39 36 17 18 1 42 5 2 26 25 22 23 6 13 38 37 14 15 29 30 19 20 33 32 9 10 35 16 41 40 7 8 27 28 24 21 31 34 4 3 12 11 43 44
+5 20
+13 18 9 8 38 39 32 33 23 22 45 44 40 35 28 27 26 29 50 1 46 49 37 36 21 24 20 19 12 11 47 48 6 3 30 25 42 41 7 2 31 10 15 16 14 17 5 4 34 43
+10 7
+33 34 18 17 19 20 11 12 10 9 15 16 14 13 4 7 21 24 32 1 22 23 5 6 3 2 30 29 8 31 26 27 25 28
+3 10
+13 14 10 9 7 6 8 11 16 17 15 4 18 19 26 25 5 12 2 1 21 20 3 22 24 23
+25 4
+38 37 1 2 42 41 55 54 45 46 28 31 30 29 4 5 20 19 25 24 32 21 35 36 3 6 22 23 26 27 14 15 34 33 49 16 8 9 12 13 18 17 57 58 50 53 52 51 47 48 39 40 44 43 11 10 56 7
+5 20
+32 33 39 38 37 6 13 14 45 46 1 48 25 26 49 50 10 35 27 34 31 28 47 44 4 5 43 42 16 15 2 3 21 20 41 40 7 36 11 12 29 30 22 19 18 17 8 9 23 24
+1 71
+95 122 97 100 105 96 53 52 123 124 139 138 17 16 118 119 135 136 90 89 116 121 83 80 58 59 71 70 94 93 44 43 86 65 46 45 28 23 144 129 1 42 66 67 77 84 49 50 107 106 31 32 8 11 33 40 110 111 142 141 62 61 51 56 112 109 127 128 104 101 102 103 19 20 36 39 12 21 114 115 98 99 48 47 34 35 108 113 82 81 91 88 140 143 41 22 25 26 60 57 29 30 15 18 117 120 87 92 3 2 4 5 130 131 68 69 74 75 125 126 73 72 14 13 54 55 27 24 38 37 134 137 9 10 133 132 63 64 79 78 6 7 85 76
+100 1
+30 175 89 114 130 129 120 85 6 199 159 44 45 158 186 19 27 26 187 188 143 62 185 20 136 69 178 25 154 153 24 181 83 84 86 119 108 107 176 177 60 61 102 101 8 195 163 164 37 166 197 196 137 68 36 167 64 65 49 50 46 157 75 76 66 139 67 138 81 124 125 80 7 198 12 193 28 29 113 90 98 105 117 88 115 116 58 145 149 56 53 52 147 148 127 128 142 63 74 73 38 165 94 109 79 126 2 201 82 121 87 118 110 111 168 169 43 160 202 1 182 183 41 162 141 140 72 71 161 42 194 9 180 179 91 92 39 40 97 106 35 170 146 57 32 171 22 23 21 184 200 5 190 189 93 112 77 78 54 151 134 133 10 11 3 4 144 59 16 15 33 34 174 31 99 104 135 70 17 18 47 156 152 51 122 123 131 132 173 172 95 96 55 150 191 14 192 13 48 155 103 100
+28 3
+14 55 38 39 18 19 62 1 42 41 50 17 45 20 56 57 16 53 24 23 26 27 7 8 47 46 59 58 30 33 43 44 51 52 21 22 10 9 36 35 61 60 32 31 13 6 25 28 3 4 2 5 15 54 49 48 11 12 29 40 37 34
+5 20
+18 19 11 12 10 7 24 25 36 35 28 31 20 21 30 29 44 47 26 27 13 14 9 8 17 32 46 45 49 48 4 3 22 23 43 50 40 39 41 6 5 42 16 15 34 33 38 37 2 1
+10 10
+4 3 8 19 33 32 40 37 38 39 9 14 15 18 34 31 35 24 13 12 7 2 20 21 28 29 22 23 10 11 30 25 6 5 36 1 17 16 27 26
+3 12
+18 17 3 2 15 10 7 6 28 27 13 14 25 26 12 11 30 1 9 8 24 23 4 5 29 22 16 19 21 20
+15 4
+30 29 32 31 7 6 37 38 4 5 21 18 27 26 25 22 13 12 1 36 15 14 20 19 11 28 9 10 8 33 16 17 34 35 23 24 2 3
+4 20
+36 35 23 26 41 42 6 7 43 48 28 27 9 12 47 46 22 29 34 33 13 30 8 37 19 20 16 15 11 10 24 25 3 38 2 1 21 14 40 39 32 31 17 18 45 44 4 5
+10 10
+32 29 27 26 13 14 34 33 35 28 1 18 12 15 25 22 37 36 30 31 11 16 38 39 6 9 4 3 2 5 19 40 17 10 8 7 23 24 20 21
+13 6
+26 25 21 22 5 8 15 16 24 23 27 28 2 1 4 19 35 36 14 13 31 34 7 6 3 20 38 37 18 17 11 12 29 30 10 9 32 33
+4 10
+10 11 2 3 25 22 21 26 16 17 8 7 18 5 24 23 28 1 15 12 27 4 9 6 14 13 19 20
+1 100
+136 137 130 129 185 186 89 90 87 28 29 68 114 115 126 123 46 47 165 164 169 170 55 50 113 112 19 18 96 97 61 58 180 179 150 147 30 31 190 191 107 108 135 134 131 128 8 171 44 45 121 116 101 102 103 142 133 132 92 91 53 54 26 23 144 143 124 125 157 158 75 80 37 38 140 139 153 160 163 162 93 94 73 72 159 154 85 86 167 166 197 198 202 201 195 196 149 148 60 59 9 10 172 175 7 4 168 161 182 193 66 65 48 49 25 24 5 6 174 173 34 35 84 83 33 32 52 51 57 56 189 188 127 122 76 79 155 156 104 105 15 14 20 21 3 200 70 69 110 111 12 11 95 98 138 141 16 17 99 100 119 120 88 27 41 42 43 36 187 192 117 118 39 40 146 151 71 74 2 1 183 184 176 181 78 77 62 63 145 152 67 64 109 106 82 81 194 199 178 177 22 13
+7 14
+29 26 31 32 7 8 21 14 17 16 40 39 19 18 34 33 24 23 27 28 6 11 13 30 41 36 20 15 4 3 35 2 5 12 9 10 25 22 38 37 1 42
+1 3
+7 8 2 1 5 6 3 4
+25 4
+44 45 39 42 15 18 20 21 56 3 25 24 43 46 4 55 6 31 52 53 11 14 1 58 50 47 34 33 41 40 29 28 9 8 37 36 27 30 49 48 54 51 17 16 10 7 2 57 23 26 38 35 12 13 5 32 19 22
+2 4
+1 2 6 7 5 4 9 8 10 11 3 12
+10 10
+23 22 12 13 3 4 26 27 21 14 40 1 39 38 9 10 16 15 7 6 35 28 24 25 34 33 11 36 20 19 31 32 5 8 29 30 37 2 18 17
+33 3
+70 69 72 5 43 30 66 13 36 37 68 7 51 48 10 11 33 40 46 27 67 12 29 44 45 28 58 63 6 71 4 1 47 22 16 57 62 59 53 54 42 31 21 20 3 2 24 25 32 41 14 15 9 8 26 23 60 61 52 55 49 50 17 18 35 38 64 65 56 19 39 34
+21 3
+46 45 12 9 6 5 4 1 18 35 3 2 26 25 24 21 32 31 40 41 42 13 39 14 34 19 17 38 28 27 16 15 30 29 43 44 23 22 48 7 8 47 11 10 33 20 37 36
+15 5
+39 40 36 37 5 4 38 1 29 30 21 12 10 9 24 25 31 28 22 11 18 13 35 6 15 14 34 33 2 3 8 7 19 20 27 26 23 32 16 17
+4 10
+2 3 7 6 9 8 26 25 10 11 13 12 15 20 5 14 24 23 16 19 21 22 27 4 28 1 17 18
+4 25
+20 21 9 10 6 5 55 54 27 32 47 48 41 42 16 15 17 36 14 13 37 40 22 23 53 56 2 57 30 31 11 12 25 26 58 1 33 24 4 3 49 50 52 51 18 19 34 35 44 43 46 45 8 7 38 39 28 29
+5 20
+5 42 19 20 39 14 31 34 46 45 25 26 10 11 22 15 24 27 36 23 41 6 40 13 7 8 3 48 1 2 18 17 32 33 12 9 29 30 50 49 38 37 21 16 35 28 4 43 44 47
+3 33
+42 41 65 70 19 18 17 16 10 63 21 50 43 44 30 31 14 15 22 23 25 26 24 47 9 8 12 13 69 68 58 57 62 61 67 66 1 72 33 34 40 29 51 20 2 71 38 39 37 36 4 3 49 48 46 45 5 6 55 54 59 60 53 52 35 32 27 28 11 56 64 7
+50 2
+96 9 75 30 62 43 26 79 98 7 44 61 95 10 12 93 16 89 33 72 57 48 38 67 63 42 24 81 46 59 15 90 71 34 11 94 27 78 32 73 69 36 87 18 52 53 4 101 2 103 28 77 88 17 64 41 80 25 70 35 49 56 76 29 66 39 13 92 47 58 65 40 68 37 91 14 23 82 102 3 60 45 1 104 22 83 55 50 5 100 8 97 31 74 84 21 86 19 20 85 54 51 6 99
+28 1
+8 13 37 38 34 39 11 12 4 3 57 56 18 17 6 7 1 2 5 58 25 24 20 19 55 54 26 29 45 46 10 9 27 28 48 49 31 30 50 51 23 22 35 36 44 47 40 41 15 14 42 43 21 16 52 53 32 33
+7 12
+1 36 23 22 13 14 21 20 5 26 2 33 17 16 25 24 35 34 37 38 19 10 15 18 7 6 29 30 32 31 28 27 8 9 12 11 4 3
+12 6
+26 27 12 19 35 36 2 7 3 4 32 33 22 23 14 13 20 25 24 21 34 1 17 16 5 6 15 18 29 8 28 11 31 30 9 10
+14 1
+9 12 8 7 6 5 18 19 10 11 4 3 13 22 20 21 28 29 30 27 14 17 1 2 26 25 16 15 23 24
+1 87
+60 59 46 45 147 146 15 160 88 87 43 44 126 127 29 28 24 151 100 75 169 168 99 98 89 86 106 71 108 109 13 164 132 131 161 162 112 113 129 130 93 92 149 148 74 101 175 176 103 72 58 117 118 57 107 70 77 76 8 167 39 136 42 133 56 55 158 19 84 91 67 66 171 170 90 85 152 23 69 68 150 27 104 105 119 120 82 81 33 144 122 123 16 159 125 50 65 110 32 31 9 166 10 165 124 53 41 134 83 94 102 73 2 1 64 111 26 25 36 35 139 140 114 63 14 163 30 145 142 143 34 141 6 7 157 20 11 12 37 138 78 79 155 156 174 173 47 48 61 116 54 121 3 4 154 21 153 22 51 52 172 5 40 135 96 97 115 62 17 18 95 80 137 38 128 49
+3 33
+61 60 1 72 10 11 70 3 64 65 41 40 45 44 62 63 53 52 26 27 28 29 6 7 36 37 16 17 4 5 43 42 48 49 15 14 35 68 56 57 25 24 55 54 69 34 38 39 20 21 23 22 13 12 67 66 30 31 19 18 2 71 33 32 9 8 47 46 51 50 58 59
+4 18
+25 24 22 23 31 30 12 13 39 38 9 10 37 34 33 32 20 19 40 41 42 3 7 6 26 29 14 15 27 28 8 11 35 36 16 17 43 44 21 18 2 1 5 4
+3 29
+24 21 31 28 26 25 63 60 52 13 40 43 5 2 35 36 49 16 11 10 4 3 39 20 64 1 7 6 23 22 54 9 27 34 44 19 50 51 17 18 8 57 48 47 29 30 55 56 38 37 32 33 12 53 41 42 58 59 14 15 62 61 46 45
+14 7
+18 17 39 40 30 29 23 32 11 34 37 42 38 41 20 15 22 21 5 6 28 31 13 14 8 9 25 26 27 24 33 12 4 35 1 36 7 10 19 16 2 3
+5 19
+22 21 47 48 15 14 7 8 34 31 37 38 27 24 6 39 9 20 23 36 42 45 40 41 32 33 1 46 35 28 3 4 10 11 18 17 25 26 29 30 43 44 13 16 2 5 12 19
+10 7
+22 23 7 12 11 8 26 27 34 33 10 9 5 4 2 3 20 15 21 24 14 13 32 1 17 18 29 30 16 19 25 28 31 6
+4 25
+23 22 15 14 56 55 57 54 46 45 50 49 35 34 52 53 18 41 58 1 25 26 48 47 20 19 2 3 40 21 6 5 42 43 11 10 13 12 38 39 51 4 36 37 28 29 31 32 8 7 33 30 44 9 16 17 27 24
+10 10
+16 25 27 14 19 22 26 15 36 5 7 34 8 33 28 13 23 18 40 1 10 31 30 11 20 21 35 6 17 24 12 29 38 3 39 2 37 4 9 32
+10 10
+29 28 4 39 11 10 3 40 21 22 18 15 7 6 33 32 27 14 17 16 13 12 35 36 19 20 31 30 1 2 26 25 9 8 34 5 38 37 23 24
+33 3
+19 20 23 22 68 7 38 41 33 34 26 27 53 56 25 24 57 16 29 28 50 21 49 30 32 45 11 64 40 39 72 71 63 12 10 67 66 65 31 46 18 17 52 51 15 14 1 2 59 58 3 6 36 37 13 60 8 9 5 4 47 48 43 44 62 61 55 54 69 70 42 35
+2 16
+27 28 33 34 30 29 7 8 24 25 6 9 5 4 15 12 32 3 14 13 11 10 36 1 22 23 31 26 21 16 17 20 35 2 18 19
+7 14
+33 36 2 3 4 5 6 7 30 27 8 1 32 37 14 25 18 21 23 22 38 31 28 29 35 34 17 24 20 19 11 12 16 15 42 9 39 40 41 26 13 10
+24 3
+3 4 42 47 8 11 27 28 6 7 9 10 17 16 41 38 36 37 15 14 30 35 43 44 49 48 23 22 12 13 45 46 24 25 32 33 39 40 53 52 31 34 51 54 18 19 29 26 20 21 2 1 50 5
+1 4
+4 7 9 2 8 3 10 1 5 6
+4 25
+40 17 1 2 36 37 48 47 10 41 57 56 6 7 22 33 23 24 8 49 52 5 46 9 30 29 28 27 55 54 50 51 18 35 34 19 3 4 31 32 16 11 43 42 45 44 53 58 12 13 38 39 15 14 26 25 20 21
+15 5
+35 10 13 30 21 22 4 3 36 9 40 7 32 33 18 17 24 25 15 26 14 29 1 2 27 28 37 38 12 11 20 19 34 31 16 23 5 6 8 39
+7 1
+5 4 6 7 1 2 12 13 14 15 9 10 3 16 11 8
+2 50
+99 100 27 28 20 31 76 73 21 24 104 1 50 83 69 68 3 6 60 61 53 54 85 84 9 10 8 11 45 44 41 40 82 51 72 77 62 57 89 88 15 16 30 29 32 33 49 46 43 42 79 80 75 74 17 12 92 93 102 101 39 38 26 25 70 71 2 7 48 47 22 23 97 96 58 59 56 55 13 14 86 87 103 98 19 18 64 67 63 52 81 78 4 5 35 34 37 36 65 66 91 90 94 95
+18 5
+11 10 23 20 12 13 43 2 26 27 25 28 33 30 38 39 22 21 32 31 29 34 14 9 44 1 46 45 3 8 24 19 37 16 36 35 6 5 4 7 41 42 15 40 18 17
+7 14
+33 32 8 3 2 37 42 39 1 38 14 13 29 28 22 21 15 10 27 26 36 35 6 7 34 31 40 41 18 17 4 5 30 25 12 11 16 9 24 19 20 23
+1 33
+43 44 58 57 33 34 8 9 18 19 31 36 21 22 20 49 61 60 65 66 13 14 16 15 29 30 67 2 35 32 63 62 24 45 51 50 1 68 12 11 64 5 38 37 6 7 17 56 10 59 41 40 3 4 23 46 48 47 28 39 26 25 52 53 55 54 42 27
+7 14
+7 8 30 31 22 25 40 3 2 1 27 18 12 11 36 35 32 15 37 14 20 19 6 5 9 4 10 13 29 28 33 34 42 41 21 26 17 16 39 38 23 24
+44 2
+7 6 13 80 65 30 20 21 25 68 91 92 49 52 63 64 18 19 84 83 38 37 34 31 71 22 14 79 44 45 56 55 81 12 36 35 59 58 78 77 46 43 33 32 23 24 72 73 40 57 50 51 8 85 90 89 74 75 10 9 66 67 76 17 82 11 62 39 29 28 88 5 15 16 27 26 1 4 69 70 2 3 86 87 47 48 42 41 61 60 54 53
+6 6
+14 23 8 5 18 19 4 9 16 21 12 1 15 22 3 10 20 17 24 13 7 6 2 11
+10 10
+17 34 30 29 21 18 4 3 27 24 11 8 13 6 25 26 37 38 12 7 20 19 22 33 28 31 2 15 40 1 35 16 36 39 14 5 23 32 9 10
+33 3
+17 18 5 70 35 36 72 71 32 31 33 44 2 3 66 67 60 11 48 27 42 37 10 61 29 28 14 59 64 65 22 53 4 1 58 21 7 6 63 62 15 16 51 52 49 26 56 57 13 12 40 41 9 8 19 20 55 54 45 46 39 38 30 47 43 34 25 24 69 68 50 23
+24 3
+45 44 39 38 46 47 32 31 30 29 3 4 42 43 33 26 50 9 16 15 5 2 17 18 19 40 48 13 52 51 28 27 22 25 1 54 37 36 7 6 21 20 35 34 8 53 11 10 23 24 14 41 49 12
+2 20
+26 27 36 35 17 16 12 33 34 7 23 24 31 32 15 18 43 42 19 20 29 28 25 30 8 9 4 1 22 21 3 2 39 38 41 40 6 5 10 11 13 14 37 44
+5 20
+35 40 50 41 15 20 24 27 2 21 3 8 5 6 26 25 22 1 29 34 11 12 14 9 32 31 33 30 38 37 45 46 47 44 7 4 23 28 49 42 17 18 39 36 10 13 43 48 19 16
+20 5
+41 42 17 18 32 31 4 7 27 50 22 21 5 6 37 38 39 40 2 9 43 44 13 14 24 23 8 3 35 36 20 19 1 10 48 29 33 34 11 12 30 47 16 15 45 46 28 49 26 25
+16 6
+12 13 36 37 43 44 40 11 3 10 19 20 39 38 5 4 31 32 1 42 24 27 34 33 30 21 2 41 15 14 7 8 17 18 16 35 25 26 28 29 9 6 22 23
+6 16
+43 2 33 32 41 4 27 26 1 44 20 35 15 16 7 8 36 19 30 31 21 34 6 39 40 5 22 23 11 12 38 17 14 13 24 25 29 28 9 10 18 37 42 3
+5 1
+11 4 7 10 8 9 3 2 12 1 5 6
+9 10
+36 3 2 37 8 31 6 33 19 20 15 24 5 34 35 4 21 18 28 11 22 17 27 12 26 13 9 30 1 38 23 16 10 29 32 7 25 14
+3 10
+10 11 20 19 2 1 7 8 9 14 15 16 4 5 21 26 3 6 24 23 22 25 12 13 17 18
+33 3
+64 65 66 61 33 30 6 69 56 23 58 59 67 14 24 55 1 72 49 48 70 5 41 40 18 21 54 51 32 31 20 19 7 68 63 62 71 2 29 28 34 27 17 16 10 9 25 26 11 8 47 46 15 22 57 60 50 45 44 35 42 37 36 43 53 52 4 3 12 13 39 38
+6 15
+19 20 26 27 35 36 17 18 21 12 1 34 7 8 39 40 14 13 30 31 3 2 6 5 37 38 23 22 25 24 4 29 41 42 28 9 33 32 11 10 16 15
+6 16
+26 25 41 34 11 12 4 7 31 8 29 28 19 14 44 43 9 30 32 33 38 37 21 24 16 15 39 40 5 6 23 22 1 42 20 13 3 2 18 17 10 27 35 36
+5 7
+15 6 22 5 8 9 24 3 18 19 23 4 13 12 1 2 14 11 16 21 7 10 20 17
+19 2
+5 4 37 36 22 21 1 2 24 23 27 30 10 9 32 33 8 7 40 41 26 25 20 19 17 16 18 15 14 13 34 11 3 6 42 39 28 29 38 35 12 31
+4 13
+1 34 4 5 14 13 15 20 11 12 3 2 8 25 33 32 26 7 17 16 28 27 6 29 23 22 18 19 9 10 21 24 31 30
+7 14
+14 13 23 16 30 31 27 36 4 3 6 5 22 17 42 37 9 2 35 32 19 18 21 20 29 28 41 40 11 10 33 34 25 12 24 15 1 26 8 7 38 39
+2 14
+6 19 18 17 11 12 21 20 16 13 24 23 5 4 7 10 32 31 25 22 3 2 30 1 9 8 26 29 14 15 28 27
+6 4
+8 9 20 19 2 15 14 13 3 12 1 18 17 16 6 7 11 10 4 5
+2 42
+52 37 68 21 87 2 49 40 82 7 84 5 50 39 38 51 32 57 79 10 33 56 36 53 22 67 18 71 63 26 85 4 9 80 64 25 6 83 65 24 70 19 58 31 72 17 69 20 11 78 16 73 59 30 3 86 61 28 60 29 1 88 41 48 34 55 14 75 8 81 13 76 12 77 44 45 42 47 23 66 43 46 62 27 15 74 35 54
+13 2
+5 26 6 13 19 20 1 4 25 24 8 7 12 11 27 28 3 2 21 14 23 22 9 10 17 18 30 29 15 16
+20 5
+11 44 27 30 25 26 32 31 16 17 5 8 9 4 3 10 14 15 37 36 22 21 23 24 45 46 1 50 35 18 40 13 47 2 6 7 43 12 34 33 38 39 49 48 20 19 42 41 29 28
+20 5
+30 31 26 35 36 25 12 49 5 6 2 9 48 13 14 47 17 44 43 18 42 19 39 22 10 1 24 37 3 8 23 38 20 41 45 16 50 11 21 40 15 46 33 28 32 29 27 34 4 7
+4 2
+12 11 2 5 3 4 6 7 1 10 8 9
+5 15
+31 10 5 36 25 16 6 35 11 30 39 2 13 28 8 33 22 19 4 37 29 12 18 23 38 3 9 32 21 20 15 26 34 7 1 40 24 17 27 14
+5 20
+27 32 3 8 11 16 24 39 40 23 46 45 29 30 41 50 38 33 36 35 4 7 12 15 19 20 2 9 18 21 17 22 26 25 44 47 37 34 13 14 43 48 10 1 28 31 5 6 49 42
+33 3
+36 35 17 18 29 30 12 9 58 57 71 70 16 15 45 32 52 55 49 50 6 5 67 66 31 46 59 22 44 33 63 64 51 28 10 11 20 21 40 43 42 41 60 19 1 2 54 53 65 14 47 48 61 62 68 69 23 56 34 37 72 7 26 27 39 38 8 13 4 3 25 24
+8 10
+4 5 19 10 36 35 13 14 8 7 30 31 24 23 28 27 12 11 29 26 21 22 17 16 1 34 6 9 25 32 15 18 33 2 20 3
+1 50
+76 77 11 92 2 99 19 18 61 60 37 36 90 91 74 31 33 34 44 45 9 8 27 28 67 66 6 7 69 32 41 38 65 64 88 89 49 56 98 3 71 70 16 87 85 84 30 29 1 102 96 97 57 48 73 72 24 23 53 52 15 14 20 81 17 86 10 95 4 5 58 59 50 55 93 94 62 63 83 82 25 78 79 80 46 47 68 35 75 26 13 12 22 21 42 43 100 101 51 54 40 39
+3 10
+17 16 21 22 2 1 3 26 19 18 14 13 6 15 11 8 24 23 7 12 5 4 10 9 20 25
+1 84
+124 47 46 125 6 165 70 101 31 140 76 95 49 122 149 22 25 146 110 61 135 36 39 132 71 100 33 138 8 163 150 21 10 161 72 99 158 13 96 75 5 166 9 162 159 12 128 43 113 58 98 73 141 30 94 77 67 104 137 34 116 55 54 117 81 90 93 78 38 133 35 136 40 131 69 102 68 103 111 60 151 20 105 66 91 80 52 119 15 156 169 2 32 139 144 27 115 56 29 142 57 114 59 112 79 92 121 50 17 154 51 120 82 89 83 88 65 106 97 74 143 28 153 18 4 167 164 7 123 48 26 145 170 1 152 19 108 63 14 157 84 87 168 3 109 62 107 64 42 129 85 86 134 37 126 45 16 155 41 130 53 118 148 23 24 147 127 44 11 160
+16 6
+36 15 26 29 35 34 3 2 19 18 14 5 30 31 33 32 1 4 13 12 11 10 9 8 42 43 25 20 44 41 28 27 40 39 6 7 38 37 16 17 23 22 21 24
+4 25
+48 47 40 41 8 9 49 4 43 42 34 35 20 19 45 44 16 17 52 51 27 26 57 58 18 39 56 1 25 24 38 37 11 10 36 21 50 53 6 5 22 23 13 12 31 30 33 32 28 29 3 2 15 14 54 55 7 46
+25 4
+27 26 54 53 56 55 3 2 39 40 12 13 8 7 42 45 51 52 35 34 25 24 49 50 46 47 20 21 15 48 14 11 18 17 43 44 41 30 4 5 10 9 57 6 19 16 31 32 29 28 58 1 23 22 33 36 37 38
+4 25
+50 49 47 6 52 5 23 24 40 15 53 4 18 19 57 56 12 9 20 17 32 21 39 16 14 13 34 35 10 11 51 48 45 46 44 43 26 31 22 25 38 37 41 8 1 58 7 42 33 36 28 29 3 54 55 2 30 27
+4 20
+36 37 27 26 22 23 24 25 35 2 33 34 9 6 7 8 30 29 17 16 39 46 19 18 1 38 21 20 15 14 4 5 28 3 41 42 43 44 12 11 31 32 47 48 40 45 13 10
+5 20
+33 34 7 28 23 24 48 47 30 31 12 27 43 42 44 1 6 29 37 32 11 8 15 26 2 5 49 46 50 45 18 21 10 9 39 40 14 13 16 17 22 25 20 19 4 3 35 36 38 41
+20 5
+41 38 18 17 20 25 12 13 19 34 44 43 1 2 10 11 6 47 30 29 3 50 21 24 8 9 5 48 27 26 36 15 45 42 28 31 49 4 32 33 23 22 16 35 14 37 40 39 7 46
+7 13
+20 19 3 38 36 29 17 16 12 9 30 35 31 32 6 5 37 24 40 1 18 21 14 23 28 25 4 7 2 39 34 33 13 8 26 27 15 22 10 11
+20 5
+25 36 30 31 29 28 50 47 19 38 35 26 49 48 20 21 40 39 22 37 10 13 27 34 17 16 15 14 12 11 43 44 42 9 32 33 5 6 7 8 18 41 1 4 3 2 23 24 46 45
+10 10
+37 38 32 31 35 36 4 17 3 2 40 19 21 20 6 9 33 30 34 23 14 13 28 25 27 26 1 18 22 39 16 5 8 7 29 24 12 11 10 15
+1 6
+9 10 12 13 7 6 1 14 11 4 3 2 8 5
+18 4
+35 16 3 4 37 38 24 29 15 14 25 28 6 7 20 31 5 2 11 10 40 41 36 39 44 43 27 26 19 32 8 9 33 34 42 1 22 23 12 13 17 18 30 21
+1 3
+2 7 6 3 5 4 1 8
+3 14
+9 10 2 1 6 7 27 26 17 16 21 22 4 5 23 14 20 19 34 33 24 3 12 11 31 32 28 25 29 30 15 18 13 8
+6 15
+11 12 1 42 2 41 13 14 30 31 38 5 18 35 25 24 26 27 29 28 34 19 36 17 32 21 10 9 33 20 7 8 39 4 23 22 3 40 15 16 37 6
+6 16
+9 6 27 26 16 23 29 30 1 44 42 35 2 5 4 3 43 34 36 41 22 21 12 11 13 10 24 31 38 39 8 7 19 18 17 20 14 15 25 28 40 37 33 32
+25 4
+9 4 5 8 29 28 19 18 7 6 2 3 23 24 39 38 55 10 42 41 56 57 52 53 11 12 33 34 51 14 49 48 58 1 20 27 46 45 13 54 15 16 22 21 36 37 43 40 50 17 25 26 47 44 35 30 32 31
+2 14
+21 22 14 17 19 18 5 20 10 9 11 6 26 27 15 16 23 24 25 2 28 29 4 3 7 8 31 32 1 30 12 13
+14 7
+37 24 33 34 13 12 35 32 20 17 27 30 39 40 16 15 18 19 23 8 29 28 6 3 36 25 42 1 10 9 14 21 7 2 22 11 31 26 41 38 4 5
+11 4
+1 2 13 12 6 5 29 30 26 25 3 8 22 23 19 20 10 9 18 17 4 7 24 11 15 16 27 28 21 14
+3 20
+10 9 31 30 38 3 7 34 39 42 15 14 17 18 6 5 8 11 13 32 23 22 29 16 25 24 19 20 1 46 36 37 33 12 26 21 43 44 40 41 35 4 45 2 27 28
+16 6
+35 34 38 39 22 23 44 1 8 43 40 9 4 3 16 37 2 5 31 32 11 10 36 33 17 30 15 14 21 24 13 12 18 19 41 42 25 20 26 27 28 29 6 7
+4 11
+3 30 21 22 19 26 4 5 12 29 9 8 28 27 24 23 13 16 17 18 6 7 14 15 20 25 1 2 10 11
+25 4
+42 41 11 10 32 5 31 6 46 45 51 52 21 20 50 49 26 27 53 54 2 57 9 8 7 30 1 58 3 56 23 22 38 37 35 36 12 13 47 48 33 34 4 55 18 19 14 15 29 28 40 39 43 44 24 25 17 16
+6 5
+11 10 8 7 19 14 12 13 5 6 2 21 20 3 22 1 15 16 18 17 9 4
+2 7
+12 13 9 16 8 7 14 15 1 18 11 10 6 3 4 5 17 2
+13 7
+21 22 35 36 18 17 15 8 14 13 23 24 19 20 16 25 5 40 11 10 38 31 39 30 33 34 29 28 2 1 7 6 37 32 26 27 4 3 9 12
+7 8
+25 26 6 5 27 28 12 11 22 19 23 24 9 10 4 1 2 3 13 8 15 18 16 17 14 7 29 30 21 20
+21 3
+25 26 48 45 16 13 7 6 39 38 22 21 32 31 34 35 23 24 42 41 8 9 2 1 33 10 3 40 46 47 44 43 17 18 14 15 36 37 27 28 20 19 5 4 30 29 12 11
+5 10
+12 11 22 21 17 16 14 5 20 23 1 30 26 27 6 13 10 9 18 19 4 3 25 24 2 29 7 8 15 28
+6 16
+5 34 7 6 35 36 12 21 19 20 18 17 32 29 15 14 27 10 2 1 30 31 23 24 33 8 16 13 37 40 4 41 25 22 26 11 42 43 9 28 44 3 38 39
+3 33
+28 43 11 10 50 49 18 17 44 45 34 33 38 37 16 55 54 53 63 62 46 47 57 56 29 42 67 8 5 68 51 52 24 23 9 12 61 64 58 59 35 40 20 19 7 6 3 4 26 25 14 13 21 22 32 31 36 39 1 2 71 70 65 66 69 72 27 48 60 15 30 41
+24 3
+3 2 29 26 49 48 31 30 38 39 9 52 42 43 8 7 44 45 27 28 16 15 47 10 11 46 34 33 14 17 50 51 22 35 40 13 6 53 21 20 41 12 19 18 54 1 23 24 32 25 37 36 4 5
+11 5
+27 30 21 20 14 11 13 12 29 28 4 5 10 9 2 1 22 23 16 17 32 3 6 7 26 15 19 18 31 8 25 24
+3 33
+61 12 38 35 55 56 7 62 54 17 13 16 18 21 11 8 20 19 6 5 44 45 47 46 48 49 64 63 53 50 33 32 70 71 72 69 42 43 22 23 67 68 29 26 41 40 39 30 24 25 15 14 57 60 66 3 37 36 9 10 31 34 51 52 27 28 58 59 1 2 65 4
+10 10
+17 18 23 12 31 28 6 7 40 37 38 39 25 8 10 9 35 36 29 30 15 16 3 4 24 11 13 22 20 19 32 5 2 1 33 34 14 21 27 26
+7 14
+30 29 25 24 36 35 22 21 8 9 38 37 12 7 34 33 3 2 6 5 40 41 42 1 26 13 15 14 32 31 19 18 17 16 27 28 11 10 39 4 20 23
+5 3
+10 3 14 15 9 4 16 13 1 2 7 6 5 8 11 12
+10 10
+30 31 22 17 39 34 13 12 15 14 24 25 8 3 21 20 40 33 7 4 19 18 9 2 5 6 38 35 28 23 27 26 11 10 16 29 32 1 37 36
+4 25
+56 53 44 43 30 29 54 55 11 10 51 50 25 24 2 3 23 26 21 36 22 35 34 33 40 37 39 38 41 12 16 15 4 49 27 28 48 47 19 20 31 32 52 1 45 46 57 58 14 13 8 9 6 5 18 17 7 42
+32 3
+70 3 24 25 59 18 37 42 49 48 51 50 9 8 69 6 21 20 58 23 57 56 7 10 17 16 54 55 30 33 67 68 14 15 34 43 61 66 27 52 65 64 12 13 5 4 19 22 32 31 63 62 60 11 26 53 44 29 47 28 41 40 1 2 39 38 45 46 36 35
+10 3
+10 11 25 2 7 12 3 4 5 6 17 18 21 24 8 9 13 16 15 14 20 19 22 23 26 1
+18 5
+17 12 11 18 13 14 27 28 32 33 9 10 23 24 16 15 43 38 36 31 29 20 34 35 40 41 30 19 3 4 2 1 26 21 37 8 46 5 42 39 44 45 22 25 6 7
+10 8
+18 19 9 8 15 14 13 12 26 27 31 30 6 5 1 36 25 24 4 3 17 16 35 2 34 7 11 10 22 21 29 28 32 33 23 20
+16 6
+40 37 19 14 22 23 32 29 8 5 25 44 2 11 1 12 20 13 36 41 16 17 34 27 21 24 10 3 31 30 39 38 26 43 4 9 42 35 28 33 6 7 15 18
+10 10
+2 3 28 7 12 13 9 10 17 14 33 36 4 5 31 30 39 6 24 25 29 38 26 27 18 19 35 34 22 23 1 40 11 8 15 16 21 20 37 32
+14 3
+11 10 3 4 23 26 29 28 5 2 22 21 12 27 18 19 30 1 20 17 8 9 33 32 31 34 14 15 7 6 25 24 16 13
+25 4
+54 53 37 36 23 22 10 9 39 38 3 2 25 24 43 46 47 48 19 20 6 5 26 27 11 52 17 18 1 58 41 42 57 56 33 34 44 45 32 35 7 8 40 21 15 16 51 50 4 55 31 30 14 49 28 29 13 12
+5 7
+24 21 16 15 12 13 3 10 6 9 20 19 4 5 22 23 18 17 14 11 2 1 8 7
+15 4
+12 11 19 22 33 34 37 36 27 24 1 38 26 25 9 6 3 2 4 35 28 29 7 8 21 20 13 32 16 15 23 18 14 17 5 10 31 30
+9 10
+21 18 16 35 5 4 11 12 24 27 20 19 14 13 1 2 32 29 22 17 31 30 15 8 26 25 38 3 36 7 33 34 10 9 37 6 28 23
+16 6
+28 27 44 41 24 25 10 11 22 23 17 16 39 38 15 14 33 36 2 1 32 21 35 34 9 20 4 3 5 6 29 30 40 37 13 12 26 31 8 7 42 43 19 18
+25 4
+11 14 34 35 16 17 27 26 56 53 2 7 13 12 37 40 19 22 10 23 6 3 57 52 58 51 33 36 41 32 24 9 49 48 38 39 25 28 15 18 45 44 42 31 50 47 55 54 43 46 21 20 1 8 29 30 4 5
+14 7
+32 33 17 30 16 39 41 40 25 24 36 31 1 2 9 8 21 28 37 38 13 12 3 6 29 20 15 10 18 19 23 26 27 22 4 5 42 7 35 34 14 11
+10 10
+28 29 30 31 5 2 34 33 6 23 22 13 25 36 15 14 26 27 32 35 12 7 19 18 40 37 21 20 11 10 8 9 24 1 4 3 16 17 38 39
+1 7
+15 14 13 12 5 4 9 10 2 1 3 6 7 8 11 16
+23 1
+27 28 35 36 9 10 40 39 41 42 17 18 1 2 24 25 12 37 6 7 48 47 20 19 33 34 5 46 11 38 32 31 22 21 45 44 14 13 16 15 8 43 3 4 23 26 30 29
+24 3
+48 7 32 33 51 52 46 47 42 17 53 6 34 27 14 13 26 25 49 50 22 21 24 23 54 1 35 36 5 4 40 39 20 41 18 19 28 29 8 9 37 38 2 3 11 10 45 44 16 15 31 30 12 43
+3 25
+54 53 39 38 11 10 33 36 6 9 37 26 2 55 32 31 43 14 44 47 42 41 25 24 23 22 20 21 12 13 5 4 35 34 1 56 27 28 48 49 40 19 51 50 18 15 46 45 17 16 3 52 29 30 7 8
+7 10
+26 9 12 23 19 20 30 33 16 17 29 34 18 15 7 8 6 1 31 32 22 21 13 14 5 2 3 4 25 24 27 28 10 11
+20 5
+45 46 7 2 23 40 48 49 16 15 35 30 27 24 28 29 34 33 41 42 17 18 36 39 8 9 43 44 14 19 38 37 4 3 1 50 12 13 22 21 32 31 6 5 25 26 47 20 10 11
+16 6
+32 33 18 15 29 30 28 27 2 1 7 8 36 35 26 25 40 39 41 42 38 37 14 43 44 13 23 22 4 5 6 3 10 9 24 21 12 11 16 17 19 20 34 31
+1 6
+6 10 11 1 12 3 9 8 13 2 4 5 14 7
+14 4
+35 34 5 2 19 18 36 31 16 13 11 6 12 17 4 3 22 23 9 10 26 27 29 24 14 15 8 7 33 32 1 30 25 28 21 20
+1 20
+32 33 35 6 23 24 26 19 4 5 22 21 40 41 15 14 7 34 30 29 9 8 3 36 11 10 28 31 37 38 18 17 39 2 13 12 42 1 27 16 25 20
+4 25
+4 7 39 38 53 54 23 24 52 51 26 27 19 18 33 32 35 36 21 20 48 3 15 16 58 1 8 9 47 46 17 34 22 25 30 31 10 45 12 11 37 14 55 56 28 29 49 50 13 40 42 41 5 6 2 57 44 43
+6 16
+26 27 36 37 43 40 44 39 21 20 19 22 13 12 2 3 30 29 17 16 15 14 28 25 10 11 8 7 33 32 6 5 41 42 31 34 9 18 24 23 35 38 4 1
+11 5
+21 22 9 8 1 32 30 31 6 5 28 25 10 7 17 16 19 18 14 15 27 26 29 24 2 3 20 13 23 12 4 11
+10 10
+14 27 21 20 1 40 18 23 5 36 37 4 28 13 35 6 12 29 39 2 19 22 7 34 8 33 10 31 30 11 16 25 9 32 26 15 3 38 24 17
+16 6
+25 26 15 14 34 35 16 21 18 19 37 4 43 44 36 7 22 23 39 38 3 2 42 41 27 24 28 29 8 9 6 5 30 33 32 31 17 20 13 12 40 1 10 11
+11 6
+25 26 10 9 28 29 22 21 16 13 20 19 2 1 7 6 8 27 5 4 30 31 3 32 11 12 34 33 18 17 24 23 15 14
+10 5
+1 30 6 3 24 13 4 5 20 21 29 2 18 19 17 16 11 12 28 7 25 10 27 26 9 8 14 15 22 23
+9 10
+5 16 25 34 30 29 2 19 4 17 10 11 6 15 36 23 24 35 9 12 21 38 18 3 27 32 13 8 14 7 31 28 33 26 1 20 37 22
+16 6
+34 33 26 25 7 8 40 39 27 20 21 24 41 38 29 28 43 42 22 23 5 6 35 36 16 37 2 3 10 9 11 12 14 15 31 32 30 17 19 18 1 44 13 4
+4 25
+4 5 44 45 28 25 10 43 40 13 56 53 58 3 26 27 55 54 36 37 57 48 12 11 19 18 22 33 9 6 24 23 32 29 38 39 15 16 21 20 17 14 1 2 7 8 41 42 30 31 50 49 52 51 46 47 34 35
+7 4
+9 8 14 1 4 5 12 13 22 15 16 19 6 7 10 11 17 18 2 3 20 21
+16 6
+27 18 28 17 34 11 5 40 43 2 21 24 23 22 29 16 26 19 1 44 33 12 8 37 15 30 38 7 9 36 4 41 6 39 31 14 13 32 20 25 10 35 42 3
+1 100
+163 164 2 1 175 176 23 24 90 91 13 190 88 89 179 22 186 185 150 51 93 94 83 82 167 34 43 44 188 187 162 41 169 168 120 81 132 131 76 127 97 106 126 125 77 78 14 189 5 6 31 32 194 7 172 29 37 166 38 165 196 195 61 140 201 202 199 198 71 130 142 141 33 170 174 173 27 28 95 96 65 64 101 102 85 86 143 144 184 19 113 112 153 48 107 108 134 69 104 105 111 92 53 52 178 25 62 139 45 158 54 149 42 161 155 154 74 75 18 17 21 182 26 177 70 133 180 181 12 11 119 118 40 39 193 8 9 192 183 20 103 98 72 73 147 148 122 121 114 115 109 110 157 46 129 128 138 63 191 10 56 57 59 60 156 47 197 4 100 99 15 16 30 171 49 50 159 160 146 55 152 151 66 135 87 116 124 79 200 3 117 84 68 67 123 80 36 35 137 136 58 145
+50 2
+82 83 35 34 9 8 77 76 89 18 100 99 52 53 48 49 66 67 32 33 14 15 51 56 86 85 47 62 80 81 104 103 95 94 37 38 5 6 79 78 60 61 12 13 27 84 64 65 97 96 42 43 59 58 21 22 31 74 41 68 73 72 26 25 40 39 71 70 75 30 7 98 29 28 92 91 20 87 16 17 55 54 45 46 11 10 69 36 44 63 2 1 3 4 57 50 88 19 101 102 90 93 24 23
+6 16
+2 1 36 35 42 43 16 21 7 10 30 5 31 4 34 37 22 11 29 28 25 24 32 3 41 44 18 19 33 38 39 40 17 20 13 12 9 8 15 14 6 27 26 23
+33 3
+63 64 48 45 3 2 67 8 10 65 28 27 62 61 30 37 56 57 19 20 66 9 46 47 69 6 39 38 54 53 18 55 12 11 7 68 15 14 70 71 32 31 58 13 50 49 52 51 17 16 42 43 33 34 21 22 40 41 44 29 23 24 5 4 35 36 60 59 72 1 25 26
+4 13
+32 1 15 16 23 28 19 18 20 21 14 13 11 10 4 7 5 6 25 26 2 3 27 24 8 9 34 33 17 12 22 31 29 30
+3 33
+38 39 67 2 55 58 54 19 16 15 61 60 43 42 17 14 30 29 21 20 62 59 52 25 32 41 45 28 26 47 50 51 49 48 46 27 66 7 71 70 13 10 3 6 37 34 69 72 18 63 23 22 36 35 4 5 1 68 44 31 53 24 65 64 8 9 33 40 12 11 56 57
+16 5
+1 42 28 29 36 33 17 16 14 19 32 37 30 27 8 13 35 34 20 23 38 5 15 18 31 26 2 41 7 24 39 4 11 10 9 12 40 3 21 22 25 6
+10 10
+10 11 1 20 2 19 18 3 25 36 40 21 34 27 33 28 29 32 39 22 38 23 13 8 15 6 37 24 12 9 4 17 16 5 7 14 35 26 31 30
+7 7
+23 24 14 15 28 17 5 4 3 2 27 26 21 22 20 25 18 19 10 11 7 6 16 13 1 8 12 9
+7 13
+1 40 32 19 25 28 13 12 9 16 5 36 18 33 38 3 35 6 14 11 29 24 2 39 10 15 7 34 26 27 23 30 22 31 37 4 8 17 21 20
+7 14
+36 33 37 38 10 9 26 25 17 18 23 20 42 41 11 8 4 39 35 34 32 31 27 30 28 29 15 16 21 22 24 19 7 12 1 40 5 6 13 14 3 2
+50 2
+71 72 55 54 97 90 12 11 51 56 76 75 95 96 33 32 65 70 28 19 68 67 41 40 2 1 4 5 8 35 30 29 84 87 17 16 39 36 100 99 78 89 85 86 82 81 18 15 50 57 103 104 52 53 37 38 13 14 49 42 46 43 21 20 25 24 45 44 58 59 93 94 48 47 64 63 102 3 83 80 6 7 79 88 61 62 69 66 73 74 10 9 27 22 60 77 101 98 26 23 91 92 34 31
+1 99
+42 41 94 95 64 63 21 178 186 185 80 123 105 96 150 151 139 62 108 93 1 200 148 53 192 193 72 73 22 23 98 99 113 88 156 43 7 6 90 111 149 52 122 121 30 31 81 120 170 29 160 159 128 75 126 77 45 44 133 134 197 196 152 51 131 70 89 112 158 157 189 12 142 59 183 184 163 38 101 102 35 36 165 34 175 176 17 18 118 117 37 164 146 145 104 97 138 65 48 49 106 107 154 155 191 190 78 125 198 199 86 85 141 60 74 129 39 40 169 168 67 66 181 180 50 153 5 194 195 4 76 127 69 132 116 115 172 171 56 55 32 33 166 167 179 20 3 2 19 182 58 143 92 109 28 27 136 137 14 13 135 68 46 47 83 84 161 162 61 140 82 119 177 24 103 100 87 114 79 124 147 54 110 91 26 25 144 57 16 15 9 8 11 10 71 130 188 187 174 173
+5 20
+29 30 13 12 44 49 46 47 48 45 36 37 39 14 11 40 31 38 24 17 2 3 28 25 21 20 43 50 34 35 15 16 5 4 8 7 19 18 32 33 1 42 9 6 41 10 23 22 27 26
+100 1
+46 45 112 113 48 47 14 23 186 185 95 94 182 181 38 41 155 156 39 40 12 11 25 26 165 168 132 131 200 199 169 162 17 18 9 10 202 195 184 153 75 76 149 150 134 135 3 2 93 54 166 167 119 118 13 6 146 145 137 136 84 83 97 96 188 189 180 179 144 141 73 74 170 171 55 72 128 129 159 160 114 111 121 122 158 183 163 164 151 152 192 37 106 105 52 51 85 86 125 126 187 190 27 28 157 154 61 60 191 42 33 32 36 35 108 115 197 196 67 62 19 20 143 142 178 177 71 70 92 91 193 194 116 123 130 49 24 1 175 176 53 50 127 124 65 64 198 201 58 59 120 117 77 80 174 161 101 100 103 104 8 7 69 68 66 63 82 81 138 147 109 110 21 22 43 44 102 107 34 29 31 30 79 78 139 140 98 99 90 89 172 173 15 16 148 133 56 57 87 88 4 5
+3 20
+11 24 17 14 36 37 45 46 39 40 3 44 19 18 25 26 9 10 42 43 22 23 30 31 12 13 15 16 32 33 4 41 38 7 21 20 34 35 8 27 29 28 1 2 5 6
+14 7
+39 40 33 32 22 19 30 23 28 29 10 7 36 17 3 4 24 27 42 1 5 2 9 8 31 18 16 37 13 12 14 15 35 34 26 25 41 6 20 21 38 11
+4 18
+6 7 20 19 1 44 33 8 34 35 13 16 14 15 36 37 27 12 29 30 28 11 9 10 42 41 23 24 31 32 4 5 43 40 3 2 21 22 18 25 17 26 38 39
+10 10
+27 14 31 10 23 18 6 35 1 40 12 29 24 17 13 28 34 7 25 16 37 4 20 21 8 33 36 5 32 9 19 22 26 15 2 39 30 11 38 3
+4 25
+53 54 20 37 19 42 48 47 8 57 15 14 24 23 43 44 40 41 35 36 32 31 29 28 25 34 56 51 46 13 10 11 58 1 12 9 3 2 55 52 49 50 21 22 27 26 7 6 39 38 33 30 18 17 4 5 16 45
+3 32
+45 46 51 14 43 44 58 61 60 59 8 7 11 10 34 37 2 65 18 49 29 40 52 53 1 66 21 20 70 67 4 3 64 5 31 32 26 27 56 9 13 54 47 42 41 22 63 6 69 68 19 48 28 25 15 50 39 30 35 36 12 55 17 16 62 57 38 33 23 24
+4 25
+11 10 45 46 24 23 50 5 18 39 53 56 34 35 48 49 21 22 30 29 55 54 8 9 58 3 6 7 31 32 27 28 26 25 14 13 4 57 40 15 12 47 2 1 17 16 41 42 37 38 51 52 33 20 44 43 19 36
+14 7
+35 36 3 6 5 4 34 37 7 2 19 18 11 22 26 25 42 1 24 31 16 15 32 33 14 13 17 20 23 10 9 8 29 28 39 40 27 30 12 21 41 38
+3 24
+39 40 7 8 12 9 34 33 22 23 4 51 52 53 10 11 37 36 47 48 43 42 26 25 30 27 45 46 32 31 50 49 14 13 41 44 2 3 5 6 29 28 38 35 16 15 21 20 19 24 1 54 17 18
+10 10
+36 31 16 9 34 35 4 5 38 1 14 13 30 29 2 19 8 17 32 33 27 26 20 37 7 6 15 10 24 23 40 39 3 18 25 22 11 12 28 21
+3 33
+2 3 34 35 25 24 18 53 50 47 71 4 7 14 52 19 72 1 36 33 5 66 39 38 32 43 44 45 27 26 51 22 8 11 41 42 48 49 63 6 69 68 20 21 62 61 59 60 13 12 15 58 37 40 57 16 28 29 65 64 70 67 10 9 46 23 31 30 56 17 54 55
+19 3
+34 17 37 38 14 11 3 8 32 31 2 43 19 24 26 29 16 9 22 21 33 18 27 28 25 30 5 6 42 35 1 44 20 23 10 15 4 7 13 12 39 36 40 41
+16 6
+23 24 41 42 10 9 35 12 16 17 5 4 31 28 20 19 6 3 39 40 15 14 1 2 30 29 8 37 21 18 43 44 27 26 13 34 36 11 22 25 33 32 7 38
+2 33
+11 12 7 6 20 19 51 54 16 17 44 43 49 50 34 37 10 9 38 31 69 70 23 22 27 26 53 52 63 68 39 40 30 29 42 41 61 62 1 2 58 55 5 8 21 24 32 33 36 35 47 46 59 60 56 57 66 65 3 4 25 28 18 15 48 45 67 64 14 13
+3 20
+28 29 34 35 30 37 22 17 43 42 19 18 44 45 7 4 6 5 16 27 15 12 46 1 2 3 38 39 14 13 36 33 31 32 20 21 24 23 40 41 9 8 25 26 11 10
+4 24
+7 6 13 12 32 31 55 56 19 10 3 54 27 26 11 14 41 44 30 21 22 29 52 53 24 23 42 43 2 1 47 46 15 18 51 50 17 16 4 49 37 38 8 45 5 48 33 36 28 25 34 35 9 40 39 20
+4 14
+29 32 28 33 16 15 19 18 35 34 10 9 24 23 5 2 31 30 6 7 14 13 4 3 8 11 22 27 20 21 25 26 36 1 17 12
+2 33
+29 28 64 9 60 11 8 65 47 48 6 7 5 2 4 3 27 24 22 21 50 15 10 61 41 44 63 62 55 58 34 37 42 43 51 54 12 13 1 68 33 38 30 39 52 53 14 59 57 56 23 18 31 32 36 35 40 49 70 69 46 45 67 66 20 19 17 16 25 26
+22 1
+8 7 15 16 23 26 19 20 28 27 10 11 13 36 46 1 39 38 45 2 14 35 42 5 9 40 34 33 32 17 24 25 3 44 18 31 30 29 21 22 37 12 6 41 43 4
+6 16
+9 8 7 34 30 31 29 28 2 3 18 19 24 23 21 22 17 16 44 1 13 14 11 12 35 36 38 37 32 33 39 4 5 6 20 27 43 40 15 10 42 41 25 26
+10 10
+6 5 7 4 36 37 22 21 14 11 9 8 31 24 38 33 35 34 23 16 19 18 39 32 25 30 13 12 1 2 3 40 27 26 15 10 29 28 20 17
+21 3
+32 31 33 34 16 15 21 20 39 36 14 13 30 17 27 18 10 9 37 38 3 2 19 24 46 45 44 43 29 28 4 47 26 25 42 41 12 35 7 6 11 8 48 1 22 23 5 40
+4 1
+8 6 4 1 10 3 7 5 2 9
+48 2
+60 45 33 34 64 65 51 50 89 16 70 37 20 21 83 82 24 23 98 3 84 85 4 5 90 15 44 63 11 10 59 58 77 78 99 2 32 31 91 92 75 76 61 62 74 73 97 94 30 29 53 54 28 27 39 66 17 88 47 46 81 22 9 8 80 79 43 42 26 25 36 71 41 40 35 72 68 69 1 100 67 38 52 55 13 14 7 6 18 19 56 57 87 86 48 49 93 12 95 96
+7 5
+14 11 6 5 22 3 24 23 4 7 17 18 10 21 2 1 12 13 20 19 9 8 15 16
+3 4
+11 10 4 3 5 8 12 13 9 14 7 6 1 2
+14 7
+23 22 11 12 25 24 29 30 27 28 34 17 4 39 37 38 41 40 36 35 13 10 14 15 5 6 32 33 26 31 19 18 8 7 2 3 42 1 9 16 20 21
+4 23
+4 34 26 13 33 12 3 35 54 16 11 42 22 5 40 43 50 36 47 23 14 37 30 39 25 7 9 2 51 18 53 48 6 17 29 38 44 27 31 21 19 45 24 8 15 20 1 52 49 10 41 28 46 32
+20 5
+5 6 16 17 18 33 50 1 43 44 19 32 20 21 40 41 14 13 24 27 42 15 23 22 38 39 48 49 9 10 34 35 29 28 8 11 36 37 46 7 2 47 12 45 26 25 31 30 3 4
+3 33
+50 23 47 28 9 10 67 66 48 25 37 38 55 52 61 12 59 60 8 7 51 16 14 57 65 68 40 39 21 18 34 33 11 6 13 58 42 29 70 69 72 1 31 32 17 22 2 71 19 20 3 64 62 5 44 45 36 41 27 26 63 4 54 53 56 15 49 24 46 43 35 30
+5 20
+37 38 20 21 18 19 43 42 26 25 10 29 17 16 49 48 46 47 8 33 34 35 22 15 9 32 3 50 13 28 41 44 39 40 45 36 14 27 4 7 6 5 31 30 1 2 24 23 12 11
+1 4
+6 5 8 7 10 1 9 4 3 2
+20 5
+12 13 4 5 22 37 27 26 2 49 32 33 9 10 3 48 1 50 16 17 42 43 21 20 24 31 47 6 34 35 25 28 41 40 39 44 30 29 11 46 7 8 14 15 23 36 45 38 18 19
+1 100
+101 100 123 122 27 26 71 70 128 125 102 91 139 140 202 197 162 161 158 157 80 81 147 12 44 45 31 32 37 38 78 75 53 56 64 65 18 17 109 110 20 21 150 153 183 196 171 170 134 131 118 121 177 182 82 83 94 95 62 63 72 85 191 190 186 187 33 34 15 14 130 117 127 126 13 16 160 163 98 99 104 105 41 46 55 54 137 142 176 155 175 172 149 148 6 7 106 107 113 114 47 48 67 66 164 165 1 8 141 138 76 77 201 200 154 9 10 11 86 57 49 52 42 43 178 179 143 136 167 166 51 50 73 74 195 194 29 28 90 115 25 30 119 120 156 159 22 19 151 152 4 5 3 2 193 192 87 88 61 60 39 40 144 145 169 168 173 174 132 133 59 58 198 199 111 112 189 188 185 184 146 135 96 97 180 181 24 23 92 93 103 108 36 35 84 79 116 89 69 68 124 129
+5 20
+5 6 11 12 37 36 7 4 26 27 34 33 35 32 43 28 10 15 21 22 44 45 18 25 16 17 8 9 24 23 41 42 29 30 47 46 1 48 19 20 49 50 13 14 39 40 38 31 2 3
+10 2
+10 9 6 3 5 4 2 1 15 18 14 13 16 17 21 20 22 19 7 24 23 8 12 11
+2 5
+4 3 14 1 11 2 12 13 9 6 7 8 10 5
+16 4
+17 18 20 21 36 35 30 33 37 38 24 23 5 4 40 27 16 11 32 31 22 19 13 14 39 34 6 1 7 10 29 28 26 25 9 8 15 12 3 2
+7 14
+21 20 24 11 28 29 12 17 23 22 39 38 7 40 25 8 35 34 19 18 27 26 4 3 16 15 9 10 30 31 1 2 37 36 32 33 13 14 41 6 5 42
+2 5
+4 5 7 8 12 11 14 1 6 9 10 13 3 2
+20 2
+15 16 11 10 19 18 6 7 30 23 40 5 31 32 14 37 33 34 38 39 1 2 27 26 17 22 13 12 4 3 8 9 25 24 36 35 44 43 20 21 42 41 28 29
+5 5
+19 18 7 12 2 17 14 13 9 8 11 10 20 1 4 3 16 15 5 6
+1 10
+15 14 19 20 3 2 1 22 9 8 18 5 17 16 6 7 11 12 4 21 10 13
+5 20
+2 49 22 27 30 5 43 40 21 28 47 44 11 8 31 4 42 41 39 48 15 14 45 46 12 17 26 25 37 32 7 6 38 3 18 29 16 13 24 23 20 19 36 35 9 10 1 50 33 34
+2 10
+2 1 16 17 6 7 4 3 15 14 5 8 13 18 19 20 24 23 21 22 10 11 9 12
+25 3
+2 5 53 52 46 51 49 50 54 55 47 48 42 43 18 19 38 41 1 56 29 28 34 33 26 27 37 36 25 20 3 4 14 15 40 39 16 17 9 8 32 35 12 13 10 11 6 7 30 31 24 21 22 23 44 45
+3 32
+54 53 40 41 6 7 13 12 2 65 43 44 36 35 31 32 3 4 21 22 5 52 45 46 60 57 20 47 42 29 14 19 55 56 10 11 67 66 9 8 23 24 61 62 63 64 30 33 1 70 34 37 18 15 50 49 58 59 27 28 25 26 69 68 48 51 39 38 16 17
+2 19
+1 2 11 30 28 29 24 17 39 40 42 41 19 20 31 32 12 13 34 35 8 33 37 36 18 21 3 38 27 26 5 4 6 7 23 22 10 9 15 16 25 14
+1 100
+103 104 196 195 177 178 43 42 163 162 53 150 50 153 151 152 140 61 197 4 101 100 194 193 73 72 135 136 158 45 112 111 28 173 170 169 105 96 200 1 66 65 138 137 154 49 110 109 32 31 85 86 78 123 59 58 87 116 189 14 27 26 51 52 46 157 102 99 2 199 74 75 166 167 144 145 25 176 56 147 20 19 54 149 70 131 202 201 21 22 3 198 79 80 13 190 161 40 115 114 68 69 44 159 98 97 148 55 91 92 7 8 118 117 47 156 121 122 76 127 84 83 67 134 6 5 187 188 94 93 33 34 168 35 29 172 171 30 174 175 192 191 181 182 9 10 48 155 17 184 124 77 62 139 128 129 38 37 141 142 82 81 146 57 180 23 179 24 133 132 90 113 12 11 89 88 95 108 64 63 119 120 165 36 15 186 183 18 16 185 143 60 160 41 125 126 39 164 71 130 107 106
+29 3
+45 44 6 5 37 34 7 62 13 54 31 40 39 38 56 55 61 60 22 21 29 30 41 42 20 49 18 19 50 51 4 3 23 24 58 57 9 8 33 32 47 48 10 11 15 14 52 53 63 2 46 25 12 59 16 17 28 43 1 64 35 36 27 26
+10 3
+18 17 14 3 15 16 23 24 13 12 2 25 6 5 11 4 8 7 21 22 9 10 1 26 19 20
+24 2
+27 28 46 45 52 1 26 25 31 30 44 13 32 21 8 47 3 2 5 4 11 12 48 7 33 20 50 49 41 40 9 10 39 18 23 22 15 42 36 35 29 24 6 51 17 16 14 43 38 37 19 34
+3 33
+63 6 47 20 2 69 23 26 3 68 5 64 53 54 33 36 49 18 28 41 65 66 42 27 43 22 37 38 55 56 19 48 50 17 29 40 44 45 46 21 30 31 34 35 61 58 11 12 7 62 14 51 32 39 25 24 1 72 9 10 52 57 13 8 70 71 59 60 15 16 67 4
+2 6
+2 1 7 6 3 4 13 10 16 15 8 5 12 11 9 14
+7 3
+20 19 4 5 11 12 14 15 17 18 16 13 1 2 7 8 3 10 6 9
+10 10
+5 4 33 34 12 11 31 28 30 29 7 2 20 17 32 35 18 19 6 3 38 9 10 37 27 26 25 14 16 21 24 23 40 1 15 22 13 36 8 39
+5 10
+6 29 1 4 15 16 24 21 26 27 5 30 10 25 13 12 11 20 17 18 14 19 7 28 8 9 3 2 23 22
+1 4
+5 4 8 3 2 9 1 10 6 7
+2 14
+25 26 24 27 12 7 14 13 29 2 30 31 17 18 22 21 32 1 11 10 16 19 5 6 8 9 4 3 28 23 20 15
+30 3
+60 13 49 24 5 2 46 27 21 52 29 44 3 4 31 42 17 56 10 63 51 22 16 57 36 37 48 25 40 33 8 65 39 34 59 14 62 11 26 47 23 50 54 19 9 64 38 35 43 30 12 61 55 18 7 66 20 53 28 45 41 32 58 15 1 6
+18 5
+9 44 45 4 18 17 33 32 26 27 42 41 31 34 8 7 10 43 14 23 20 21 2 1 25 30 16 19 35 38 46 3 29 28 15 22 24 39 13 40 37 36 6 5 11 12
+5 20
+15 14 37 4 35 32 41 48 7 8 36 29 46 45 31 30 40 39 21 12 13 20 9 6 43 44 23 26 42 47 24 25 33 34 5 10 17 18 16 19 27 22 50 3 1 2 38 49 28 11
+9 6
+9 6 5 4 22 25 3 2 19 20 15 14 8 7 24 23 16 13 12 17 10 1 21 30 29 26 18 11 28 27
+4 18
+37 38 34 33 18 19 39 40 11 26 24 25 6 5 35 2 41 36 28 3 4 7 23 12 31 32 42 43 14 15 16 17 30 29 1 44 22 21 10 9 13 20 8 27
+6 13
+6 33 14 15 11 24 5 36 37 38 26 29 10 9 30 25 31 32 35 34 7 8 12 23 16 13 1 2 18 19 3 4 22 17 21 20 28 27
+33 3
+11 10 12 15 37 38 44 45 33 36 63 16 61 60 69 72 22 21 7 8 27 28 49 48 52 51 35 34 54 23 56 55 65 66 71 70 39 40 18 17 62 59 64 9 46 47 58 19 53 24 57 20 32 31 29 50 2 5 26 25 13 14 68 67 3 4 43 30 42 41 1 6
+10 10
+18 17 10 9 34 35 4 3 15 6 33 32 38 31 14 13 23 20 30 29 40 39 22 21 7 8 37 36 28 27 2 1 26 25 5 24 11 12 19 16
+6 3
+18 1 15 16 2 17 5 14 12 13 3 4 10 7 8 9 6 11
+7 14
+24 21 1 2 30 29 40 39 7 4 33 36 12 19 20 25 35 34 6 5 16 13 31 8 11 26 10 27 15 14 38 41 18 17 22 23 3 42 9 28 32 37
+3 20
+33 34 19 18 3 42 12 13 14 15 35 10 9 8 45 2 44 43 6 5 38 37 17 20 27 28 29 16 32 31 4 39 25 24 41 40 7 36 1 46 26 23 21 22 11 30
+3 14
+31 34 32 33 22 19 28 27 21 20 9 8 29 6 13 14 25 24 4 3 10 11 12 7 18 17 2 1 26 23 15 16 30 5
+2 6
+13 8 6 7 14 15 16 5 10 11 2 1 9 12 3 4
+2 16
+6 5 10 11 24 25 16 17 22 21 3 32 20 19 2 35 26 29 12 13 23 18 8 9 36 1 14 15 28 27 30 31 34 33 4 7
+6 16
+38 39 18 23 2 3 11 12 35 34 25 26 27 24 37 40 29 28 7 6 13 10 1 32 33 42 5 30 41 36 4 31 8 9 16 17 15 14 22 19 43 44 21 20
+7 14
+37 36 21 10 1 42 41 40 39 2 13 14 23 22 7 8 3 4 16 15 17 18 12 11 29 24 34 33 9 38 6 5 35 32 20 19 28 25 27 26 30 31
+4 10
+21 20 23 24 19 16 28 27 5 4 10 1 7 8 9 6 25 26 18 17 13 14 2 3 22 11 15 12
+14 7
+6 7 20 21 26 25 3 2 28 29 40 37 15 12 41 8 22 19 18 17 23 24 11 16 35 34 4 5 30 33 9 36 32 31 14 13 1 42 10 27 38 39
+3 7
+16 17 4 3 9 8 2 5 1 20 13 18 7 10 6 19 12 11 15 14
+5 20
+24 25 48 1 12 29 35 34 16 27 7 8 18 19 43 6 41 40 14 15 39 38 44 47 30 31 50 49 46 45 9 42 13 28 17 22 5 2 11 36 37 10 26 23 21 20 3 4 33 32
+7 14
+38 5 28 29 2 41 7 36 32 25 30 27 42 1 15 10 14 11 20 23 13 12 17 8 3 40 6 37 39 4 33 24 31 26 21 22 18 35 34 19 9 16
+9 10
+6 5 22 35 1 38 28 25 23 34 18 17 8 9 30 31 37 4 10 13 3 2 27 26 12 11 14 21 7 36 19 16 20 15 32 29 24 33
+5 20
+11 10 33 28 27 20 45 42 40 41 4 35 25 24 26 23 44 43 2 39 19 16 1 50 3 38 48 47 15 6 34 5 18 17 7 8 49 46 32 29 13 12 31 30 22 21 9 14 37 36
+14 2
+32 29 16 17 10 9 2 1 23 20 15 18 26 27 19 14 22 21 3 28 8 11 13 12 25 4 31 30 24 7 6 5
+4 1
+10 1 8 7 6 3 9 2 4 5
+10 9
+19 18 35 28 36 27 11 6 10 9 23 24 17 16 31 30 12 15 34 33 38 5 1 2 8 7 4 3 29 32 20 37 22 21 14 13 26 25
+25 4
+44 45 55 4 56 3 18 15 24 25 30 27 12 13 43 46 54 51 23 26 37 36 34 33 53 52 40 41 11 14 5 32 16 17 22 19 20 21 29 28 31 6 7 10 35 38 39 42 57 2 50 47 49 48 9 8 1 58
+22 4
+40 21 36 25 6 3 35 26 45 16 29 32 5 4 38 23 28 33 24 37 20 41 12 49 43 18 15 46 9 52 47 14 17 44 8 1 19 42 50 11 10 51 48 13 22 39 34 27 7 2 30 31
+20 5
+18 19 48 3 38 37 20 39 23 24 15 16 42 43 7 44 26 27 10 13 50 49 6 5 2 1 36 35 30 31 40 17 45 46 8 9 34 25 4 47 14 41 11 12 32 29 28 33 21 22
+3 33
+4 65 63 64 32 33 20 19 6 5 50 49 21 24 31 42 22 23 57 12 41 38 71 70 51 52 30 29 35 34 55 14 72 69 61 62 60 7 3 2 43 44 10 9 47 46 11 8 25 26 53 18 66 1 27 48 16 17 13 56 58 59 68 67 39 40 28 45 54 15 36 37
+7 2
+11 9 8 15 6 13 17 16 3 5 18 1 14 2 7 12 4 10
+13 6
+3 8 19 18 14 15 1 38 32 33 4 7 6 5 2 31 24 23 30 29 28 11 36 37 25 26 21 12 27 22 35 34 10 9 16 17 13 20
+5 12
+11 28 25 26 34 1 32 33 16 15 30 31 12 27 6 9 13 20 19 18 5 2 24 21 8 7 17 14 29 10 23 22 3 4
+33 3
+45 44 42 41 38 37 55 58 14 65 52 53 31 48 28 29 1 72 67 10 49 54 66 13 6 7 27 26 70 3 25 24 35 46 39 36 50 51 60 59 17 16 61 62 43 40 8 69 57 56 22 21 12 11 18 63 4 5 68 9 71 2 19 30 32 33 23 20 64 15 47 34
+7 1
+15 16 12 13 4 5 9 10 2 3 1 6 8 7 11 14
+2 16
+16 15 13 10 21 22 25 26 29 28 35 6 8 7 20 19 5 4 24 23 31 30 2 1 9 14 34 33 27 32 17 18 12 11 3 36
+9 5
+2 27 13 24 9 10 5 4 22 21 8 3 15 14 28 1 19 20 18 17 12 11 7 6 26 25 16 23
+7 14
+3 38 17 16 33 4 31 32 21 22 24 27 29 30 5 10 40 41 39 2 23 20 9 6 8 7 11 12 35 34 14 19 15 18 42 1 13 28 25 26 36 37
+10 9
+16 17 27 28 25 26 5 6 36 35 10 23 20 15 12 21 37 34 7 38 33 24 22 11 13 14 29 32 4 1 19 18 8 9 2 3 31 30
+7 14
+10 11 15 14 36 35 37 30 27 26 13 12 29 8 4 1 33 34 17 16 31 32 2 3 38 39 18 19 9 20 7 42 23 22 41 40 5 6 21 24 28 25
+12 5
+12 29 28 10 3 32 22 11 23 16 33 34 15 4 13 8 6 20 2 30 7 17 18 19 9 14 1 26 25 24 5 31 27 21
+14 7
+1 42 10 9 18 19 22 17 21 20 31 32 6 7 34 35 13 14 25 26 38 41 24 29 33 2 27 28 40 39 5 8 15 16 12 11 23 30 36 37 3 4
+7 14
+14 13 18 19 25 32 7 38 28 31 22 21 23 24 29 30 11 12 10 17 20 9 1 40 41 42 35 34 39 2 5 4 26 27 16 15 3 6 8 37 33 36
+16 6
+5 40 28 25 9 10 11 12 16 17 35 36 8 7 24 23 18 39 41 42 6 13 21 22 34 29 31 30 44 43 37 38 2 1 26 27 33 32 3 4 19 20 14 15
+1 5
+7 12 6 5 1 2 3 4 8 9 11 10
+5 20
+27 26 50 43 36 5 10 11 45 44 41 40 17 14 9 32 38 37 8 7 18 23 35 6 49 46 19 20 15 16 48 47 21 22 42 39 30 29 3 2 25 28 33 34 31 24 12 13 1 4
+20 5
+28 25 46 45 32 29 18 19 13 40 33 24 10 9 42 41 31 30 1 2 12 11 5 8 36 37 16 17 49 48 20 23 43 44 35 34 22 21 4 3 26 27 39 38 6 7 50 47 14 15
+33 3
+48 49 53 58 50 29 52 21 38 41 9 66 68 7 28 51 59 20 72 69 34 33 8 67 62 63 42 43 1 6 30 47 39 40 18 61 46 31 12 13 3 4 25 24 54 57 10 65 5 2 71 70 27 22 11 16 26 23 55 56 64 17 37 44 14 15 45 32 35 36 60 19
+4 25
+44 43 53 2 9 50 40 13 47 12 41 46 16 15 7 8 37 38 35 34 19 18 54 57 33 32 52 51 23 36 1 58 21 14 4 5 28 31 10 49 30 29 20 17 48 11 22 39 25 24 26 27 56 55 3 6 42 45
+5 20
+40 9 11 10 48 49 21 20 13 14 2 3 30 19 22 27 44 43 7 8 17 18 5 4 12 31 23 24 26 25 39 36 41 42 16 15 29 28 47 46 50 1 6 45 35 32 33 34 37 38
+16 6
+18 43 31 30 5 4 8 9 15 12 17 16 27 34 7 10 2 3 25 24 20 23 14 13 35 36 6 11 40 39 26 37 21 22 29 28 33 32 1 44 38 41 19 42
+33 3
+72 1 36 37 8 7 46 39 14 15 13 20 27 26 70 71 57 60 4 3 62 63 58 59 51 52 16 17 44 43 53 54 11 10 24 21 33 34 61 64 31 32 30 29 47 48 25 38 28 35 12 9 18 19 2 69 49 50 42 41 66 65 5 6 22 23 68 67 56 55 45 40
+7 13
+12 11 38 33 29 20 7 6 26 23 10 9 25 24 39 8 4 5 28 21 2 1 3 40 14 19 37 34 27 22 17 16 15 18 30 31 36 35 13 32
+7 4
+1 22 17 18 2 3 5 4 8 19 13 14 10 9 7 6 11 12 16 15 21 20
+14 7
+32 33 15 16 24 21 39 38 36 3 11 6 18 13 37 2 14 17 28 27 9 8 29 34 20 25 5 12 41 40 26 19 23 22 30 31 42 1 7 10 4 35
+10 9
+5 12 35 2 32 31 28 25 10 7 30 3 24 19 15 16 18 29 20 23 4 13 11 6 21 22 8 9 34 33 14 17 37 38 26 27 36 1
+4 25
+26 25 49 48 53 40 11 20 9 8 17 16 38 37 58 57 19 18 22 21 45 46 14 15 24 29 44 43 54 55 4 3 23 30 28 27 42 41 56 1 2 5 12 13 33 32 47 52 7 6 35 36 51 50 31 34 39 10
+20 2
+16 17 12 11 28 33 6 41 1 4 34 13 30 29 36 35 23 22 10 37 14 15 9 38 19 18 5 42 27 26 39 40 7 8 24 25 31 32 21 20 43 44 2 3
+10 10
+30 33 21 20 38 39 28 37 10 11 40 27 7 4 9 12 19 26 23 24 32 31 8 3 1 16 22 25 29 36 18 17 2 13 5 6 15 14 35 34
+3 33
+15 16 44 45 72 3 43 28 53 54 36 33 12 13 50 17 69 70 8 7 19 18 30 39 67 4 26 27 68 71 49 20 1 2 61 60 56 57 42 29 48 47 21 22 24 25 66 65 51 52 35 34 9 58 63 64 59 62 40 41 11 10 55 14 31 32 5 6 38 37 23 46
+2 5
+10 11 14 1 8 7 2 9 6 3 12 13 5 4
+17 3
+7 6 38 39 28 27 40 1 34 33 26 23 24 25 2 5 32 9 31 30 14 13 35 8 11 10 21 20 37 36 19 18 12 29 15 16 3 4 17 22
+41 2
+25 26 59 60 10 79 76 77 58 27 64 63 81 80 50 51 29 28 4 85 68 21 61 62 67 22 16 15 56 33 82 7 49 48 75 74 18 17 24 23 36 53 40 37 3 2 14 73 46 47 72 19 13 78 8 9 83 84 65 66 34 35 42 43 38 39 70 69 31 30 32 57 54 55 1 86 41 52 6 5 11 12 45 44 71 20
+14 7
+35 16 13 40 30 33 27 28 12 5 39 38 22 21 37 36 10 7 6 11 9 8 24 23 29 34 15 14 20 25 31 32 41 4 17 18 42 1 19 26 3 2
+13 7
+37 36 13 10 5 6 18 19 15 30 16 27 21 20 3 2 33 32 4 1 7 8 25 26 24 17 28 29 9 40 11 12 34 35 22 23 14 31 39 38
+50 2
+29 28 82 83 99 100 27 80 57 52 95 94 41 64 50 51 34 33 8 7 35 72 103 4 60 59 15 14 45 44 26 25 39 38 47 46 101 102 12 93 88 87 58 61 17 18 3 2 81 84 30 31 36 37 63 62 42 43 67 66 74 75 40 65 96 97 76 77 91 92 16 13 69 68 9 98 70 71 104 1 6 5 86 85 21 20 23 24 56 53 55 54 48 49 32 73 79 78 22 19 10 11 90 89
+6 16
+4 27 13 18 21 22 12 19 20 23 30 33 34 41 35 40 9 8 10 25 11 24 43 28 39 38 2 1 37 36 42 29 26 7 31 32 17 16 3 44 5 6 14 15
+20 5
+23 30 18 37 29 24 36 19 16 41 28 27 32 33 17 40 22 31 6 7 48 5 4 49 15 12 9 8 10 11 20 35 42 47 1 50 45 44 2 3 34 21 43 46 26 25 39 38 14 13
+2 50
+54 55 3 6 27 8 34 35 69 68 44 45 67 76 98 97 94 93 83 82 60 61 86 89 21 26 59 92 4 5 62 63 65 64 11 10 100 95 87 88 33 38 75 74 78 79 50 51 57 56 16 13 32 7 102 101 81 80 46 47 19 20 77 66 36 37 31 28 103 104 29 30 40 41 25 24 58 53 1 2 85 84 23 22 99 96 70 71 18 17 90 91 42 39 52 49 14 15 72 73 43 48 12 9
+10 10
+14 7 21 22 23 20 10 9 18 17 1 38 28 29 26 3 30 27 39 40 24 19 5 16 11 8 31 32 35 36 25 4 12 13 34 33 6 15 37 2
+1 50
+19 82 72 29 90 91 62 61 95 94 41 42 88 13 6 5 54 53 65 66 27 76 81 20 85 86 8 93 46 47 57 56 43 58 70 31 2 1 87 16 48 55 15 14 98 97 89 12 52 49 37 38 44 45 50 51 80 79 77 24 30 71 64 39 4 99 40 63 11 10 26 25 23 78 33 32 22 21 83 84 101 102 67 34 73 28 9 92 69 68 60 59 96 7 17 18 3 100 36 35 75 74
+10 10
+1 38 37 18 23 20 26 27 29 32 2 13 9 6 4 11 8 7 5 10 31 30 3 12 28 25 17 16 39 40 24 19 34 35 22 21 36 33 14 15
+7 2
+5 4 12 11 13 10 18 17 3 2 15 14 8 9 16 7 6 1
+2 10
+19 14 17 16 20 21 8 9 13 10 22 1 18 15 5 6 24 23 2 7 4 3 12 11
+10 4
+23 24 26 3 11 10 13 14 18 17 21 20 5 6 15 16 4 25 8 7 9 12 19 22 28 27 2 1
+10 5
+11 30 17 14 28 29 15 16 23 22 10 1 19 24 21 20 2 3 26 13 18 25 5 4 9 6 8 7 27 12
+7 5
+9 8 12 3 16 15 21 20 6 5 10 11 19 18 17 14 4 7 1 24 13 22 2 23
+5 2
+3 6 9 12 2 1 8 7 13 14 11 10 5 4
+10 8
+5 28 25 26 24 23 8 7 21 20 29 30 35 36 34 1 22 15 17 18 19 16 11 10 9 6 14 13 3 2 4 31 27 12 33 32
+13 4
+34 33 15 14 25 22 3 16 6 5 2 19 11 10 4 7 28 29 21 20 9 8 18 17 31 30 12 13 26 27 24 23 32 1
+16 4
+38 39 27 28 5 36 31 14 12 13 7 34 25 26 11 8 16 17 40 1 4 3 10 9 35 6 24 29 18 23 32 33 37 2 22 21 30 15 19 20
+20 5
+9 44 22 35 4 1 28 25 47 46 34 33 29 24 18 17 6 5 36 37 41 10 42 43 26 27 7 48 3 2 12 13 31 30 45 8 50 49 23 32 15 16 39 40 38 19 14 11 20 21
+12 4
+17 32 19 22 31 18 4 5 3 6 15 14 21 20 12 9 28 29 1 8 11 10 16 13 7 2 27 30 24 25 26 23
+3 29
+40 25 41 22 28 27 7 56 14 15 64 1 24 23 11 50 45 16 59 60 10 53 39 38 61 62 8 9 3 58 36 35 49 12 46 13 18 19 37 34 47 48 55 54 43 20 2 63 17 44 31 32 57 6 5 4 30 29 51 52 21 42 26 33
+4 25
+33 16 57 56 41 38 48 43 3 10 15 36 46 45 42 37 53 52 12 11 50 55 25 22 29 30 35 34 27 26 17 18 51 54 9 8 49 2 1 58 6 7 24 23 13 14 40 39 20 19 4 5 28 21 31 32 44 47
+6 16
+21 22 24 23 34 33 29 30 9 8 14 11 18 15 32 27 39 40 1 44 38 43 36 7 17 16 5 4 26 35 2 3 20 19 13 12 6 37 25 10 31 28 41 42
+10 1
+14 15 20 21 19 18 2 1 10 9 16 17 8 11 4 7 6 5 22 3 12 13
+10 10
+31 10 38 35 6 3 24 21 23 22 34 33 12 13 4 5 7 8 28 29 17 18 26 19 14 11 39 32 25 20 36 37 9 2 27 30 16 15 40 1
+20 5
+30 31 50 47 10 11 14 13 46 1 32 19 27 28 9 38 29 26 4 3 12 37 25 24 44 5 35 36 34 15 16 33 17 18 8 39 7 6 22 21 41 42 43 40 23 20 48 49 45 2
diff --git a/codejam_2016/src/y2016round3/C-large-practice.out b/codejam_2016/src/y2016round3/C-large-practice.out
new file mode 100644
index 0000000..ad2117b
--- /dev/null
+++ b/codejam_2016/src/y2016round3/C-large-practice.out
@@ -0,0 +1,5347 @@
+Case #1:
+/
+Case #2:
+//\
+Case #3:
+/\
+\/
+Case #4:
+IMPOSSIBLE
+Case #5:
+/\//\\/\\\\\/////\\\//\\/\/\/\\/\/\//\/\/\\\\\\//\//\//\\/\/\\\/\/\\\
+Case #6:
+/
+/
+/
+\
+\
+\
+/
+/
+\
+/
+/
+\
+/
+/
+/
+/
+\
+\
+/
+\
+/
+\
+/
+/
+/
+/
+\
+/
+/
+/
+/
+\
+\
+\
+\
+/
+\
+/
+\
+/
+\
+/
+\
+\
+\
+\
+/
+/
+\
+/
+/
+\
+\
+/
+/
+/
+\
+/
+\
+/
+/
+/
+\
+/
+\
+\
+\
+\
+\
+/
+\
+\
+/
+/
+/
+/
+\
+\
+\
+/
+\
+/
+\
+/
+/
+\
+\
+/
+/
+\
+/
+/
+\
+/
+/
+\
+\
+Case #7:
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+\\\\\\\
+///////
+\\\\\\\
+Case #8:
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+Case #9:
+\\\///\
+\\\///\
+\\\///\
+/\\////
+\/\////
+\\/////
+////\\\
+/////\\
+\/\//\\
+\/\//\\
+\/\//\\
+//\//\\
+Case #10:
+/\/\/\///\///
+\//\/\////\\\
+\\\//\/////\\
+\\\\\///////\
+\\\\\\///////
+////////\/\/\
+/////\//\/\/\
+Case #11:
+\\\///\\/
+/\\////\/
+\/\/\////
+/\//\\/\\
+Case #12:
+\/\/\
+//\/\
+\\///
+////\
+/////
+\/\/\
+//\\/
+\\/\\
+////\
+/////
+\////
+\\/\\
+/////
+\\/\\
+/////
+\\/\\
+\\\//
+//\/\
+\\/\/
+/\/\/
+Case #13:
+IMPOSSIBLE
+Case #14:
+\\\
+\\\
+\\\
+///
+\\\
+\\\
+\\\
+///
+\\\
+///
+///
+///
+\\\
+///
+\\\
+///
+\\\
+\\\
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+\\\
+\\\
+///
+\\\
+///
+///
+///
+\\\
+Case #15:
+\\\\/\
+//\\/\
+\\/\/\
+//////
+\\////
+\\\/\\
+/////\
+\\\///
+/////\
+/\\///
+\/\\/\
+Case #16:
+/\\\\////\
+/\\\\///\/
+\/\\\///\\
+\\/\\////\
+\\\/\/////
+/////////\
+////////\/
+\\//////\/
+//\/////\/
+//\\////\/
+Case #17:
+\///\\
+\/////
+\/////
+/\/\\\
+/\/\\\
+Case #18:
+\\\\
+//\\
+/\//
+/\\\
+\/\\
+//\\
+////
+\/\\
+//\\
+////
+\/\\
+////
+\/\\
+///\
+\///
+\\/\
+////
+\\//
+//\\
+\\//
+//\\
+\\//
+/\//
+/\/\
+/\/\
+Case #19:
+\\/\\//\\///\\/\/\\/\\/\/\/\\\\//
+\\/\\///\\\\/\\///\\/\/\/\\/\\\/\
+\\\/\\//\\\\/\\\/\/\\/\//\\\////\
+Case #20:
+/\\//\/\\/////\\\\/////\\/\\///\/
+/\\/\//\\//\\\/\\\////\/\\/\/////
+\/\/\\\/\//\\\/\\\////\/\\\//\///
+Case #21:
+/
+\
+/
+/
+\
+/
+/
+/
+/
+\
+\
+\
+\
+/
+\
+\
+/
+/
+\
+\
+\
+/
+\
+/
+\
+\
+\
+/
+/
+/
+\
+/
+\
+\
+/
+/
+\
+\
+/
+/
+/
+\
+/
+/
+/
+\
+/
+/
+\
+/
+\
+\
+/
+\
+\
+\
+\
+\
+/
+\
+/
+\
+/
+\
+/
+/
+/
+\
+/
+\
+\
+/
+/
+/
+/
+\
+/
+/
+\
+\
+/
+/
+/
+\
+/
+/
+/
+/
+\
+\
+/
+\
+/
+\
+/
+/
+\
+\
+/
+/
+Case #22:
+\\\/\\////
+\\\/\\//\\
+\\\\/\///\
+\\\\\/////
+//////////
+////////\\
+\\\\//////
+\\\\\/////
+//////////
+/\\\\/////
+Case #23:
+IMPOSSIBLE
+Case #24:
+IMPOSSIBLE
+Case #25:
+IMPOSSIBLE
+Case #26:
+\/
+/\
+\/
+/\
+/\
+\/
+\\
+\\
+\\
+/\
+/\
+\/
+//
+/\
+\/
+\\
+//
+//
+/\
+/\
+\/
+//
+/\
+\/
+\\
+\\
+\\
+\\
+/\
+\/
+/\
+\/
+//
+/\
+\/
+/\
+\/
+/\
+/\
+\/
+\\
+\\
+\\
+\\
+//
+/\
+\/
+\\
+\\
+Case #27:
+/\\
+\/\
+\\/
+//\
+///
+\/\
+///
+\//
+\/\
+///
+\//
+Case #28:
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+\\\\\\\
+///////
+\\\\\\\
+///////
+\\\\\\\
+///////
+\\\\\\\
+Case #29:
+\\//\///\\/\/\\
+\\//\////\\////
+/\//\/////\\/\\
+\/\\/////////\\
+\\/\\///\////\\
+///\\\//\////\\
+Case #30:
+\/\////
+\/\///\
+\/\////
+//\///\
+///////
+\//////
+\\///\\
+///////
+\\///\\
+\\\///\
+///////
+\\\////
+//\\//\
+\\/\/\/
+Case #31:
+/\\///\\//
+\/\////\//
+//\/\/////
+//\/\\///\
+Case #32:
+\//\\///\\
+\//\\////\
+////\/////
+/////////\
+\/////////
+//////////
+\///\/\/\\
+\\//\/\\/\
+\\//\/\\/\
+/\//\/\\/\
+Case #33:
+IMPOSSIBLE
+Case #34:
+\\\/\/\/\/
+//\/\/\\//
+///////\\\
+\///////\\
+\\////////
+////////\\
+\\///\///\
+/////\\///
+\\///\\\//
+/\///\\\\\
+Case #35:
+/\\\\\\//\///\//
+\/\\\\\//\///\//
+///\\\\//\///\//
+\///\\\//\////\\
+\\/\/\\//\//////
+/\/\\/\/\/\/\//\
+Case #36:
+///\/\
+//////
+\\////
+//////
+\\////
+//\\\\
+\\/\\\
+\\\///
+///\\\
+////\\
+/////\
+\/////
+///\/\
+\//\\/
+\//\\/
+///\\\
+Case #37:
+\/\/\//\/\//\/\/\//\\\/\/\/\\////
+/\/\//\/\//\//\\/\\/\\\/\/\/\/\\\
+Case #38:
+\///\//\//
+\///\/\///
+\///\/\\\\
+\//////\\\
+\///////\\
+\\///////\
+\\\///////
+\\\\/\////
+\\\\/\\///
+///\/\\//\
+Case #39:
+\/\
+\\/
+//\
+\\/
+///
+\\\
+/\\
+\/\
+\\/
+//\
+\\/
+//\
+\\/
+//\
+\\/
+//\
+\\/
+\\/
+//\
+\\/
+Case #40:
+/\/\\/\//\/\\/
+\///\/\/////\/
+//////////////
+\///////////\\
+\\///////////\
+//\/\///////\/
+//\/\\/\/\//\\
+Case #41:
+IMPOSSIBLE
+Case #42:
+\\\/\/\/\/\/\/\/\/\/\/\/
+\\\/\/\/\/\/\/\/\/\/\/\/
+\\\/\/\/\/\/\/\/\/\/\/\/
+Case #43:
+/\\/\/
+/\\/\/
+\/\/\\
+\\////
+\\\/\\
+//////
+\\\/\\
+//////
+\\\/\\
+//////
+////\\
+\\/\/\
+/\/\/\
+/\/\/\
+Case #44:
+\/\///
+\/\//\
+\/\//\
+\/\/\/
+\/\/\\
+\/\\//
+\\/\\\
+\\\///
+///\\\
+////\\
+/////\
+\/////
+///\//
+\//\//
+\//\//
+\//\\\
+Case #45:
+\//////\/\/\\\/\/\\/\/\\\/////\\//\\/\\/\///\\//\/\///\//\\\///\//\/\/\\\//\/\\\/\/\//\////\\//\///\
+Case #46:
+////////////////
+////////////////
+////////////////
+////////////////
+////////////////
+////////////////
+Case #47:
+/\/\/\\/\\/\\
+\/////\/\\\//
+\\///////\\\\
+/////////////
+/\/\/\/\////\
+Case #48:
+\\\//\\//\/\\/
+//////\///////
+///////////\\\
+/////////////\
+/////////\//\/
+\/////\//\//\/
+\\/\//\//\//\\
+Case #49:
+/\/\/\/\\/
+\///////\/
+///\/////\
+\//\\/\/\/
+Case #50:
+IMPOSSIBLE
+Case #51:
+/\\\/\////
+/\\\/\////
+/\\\/\////
+\/\\/\////
+\\/\/\////
+//////\\\\
+//////////
+\/\/\/////
+\/\/\/\\\\
+Case #52:
+\\/\///
+\\/\/\\
+///////
+\\///\\
+\\\////
+\\\\/\\
+//////\
+\\\\///
+\\\\\/\
+\\\\\\/
+//////\
+\\\\\\/
+/////\\
+///\\/\
+Case #53:
+IMPOSSIBLE
+Case #54:
+\//\//
+\///\\
+\\///\
+//////
+\\////
+//\//\
+Case #55:
+IMPOSSIBLE
+Case #56:
+IMPOSSIBLE
+Case #57:
+IMPOSSIBLE
+Case #58:
+\\\//\/\/\\\\///
+///\\/////\\\/\\
+/\\/\\/////\\\//
+\/\/\\\///////\\
+//\/\\\\///////\
+//\/\\\\\///\//\
+Case #59:
+//\\//
+//\\/\
+/\/\\/
+Case #60:
+IMPOSSIBLE
+Case #61:
+/\\/
+\/\/
+\\/\
+///\
+\\\/
+////
+////
+/\\\
+\/\\
+\\/\
+////
+///\
+\//\
+\//\
+///\
+Case #62:
+\\\//\\//\/\/\/\
+//\///\//\/\\///
+//\\//\/\//\\\/\
+Case #63:
+/\/\/
+/\\/\
+\/\\/
+\/\\/
+Case #64:
+/\\/\/\/\/\/\\\/\\
+\/\\//////////////
+\\/\\/\/\/\///\///
+Case #65:
+\//\\//\\/
+\///\///\/
+/\////////
+/\\///\//\
+/\\\//\//\
+Case #66:
+IMPOSSIBLE
+Case #67:
+\//\\\\\///
+////\\\\///
+/////\\\///
+\/\///\\//\
+//\\/\/\///
+//\\/\\////
+//\\/\\\/\\
+Case #68:
+\/\/\\///\\////\////////\\///////
+\/\/\\///\\////\///////\/\\\\\\\\
+\/\/\\///\\/\\\////////\\////\\\\
+Case #69:
+\\\//\//\\\\///\
+/////\///\\\///\
+//////////\\///\
+//////////\\///\
+//\///////\\///\
+//\\/\////\\///\
+Case #70:
+IMPOSSIBLE
+Case #71:
+///\/\/\//\/\/\/\///\//\/\\/\/\\\
+\\\//\/\/\/////////\//////\\////\
+//\\\/\//\\/\/\////\/\/\/\/\\//\/
+Case #72:
+//\/
+////
+\/\\
+////
+\/\\
+///\
+\///
+////
+\/\\
+///\
+\///
+///\
+\///
+///\
+\/\/
+Case #73:
+\///\/\/\/\\\/\/
+\\\\///////\\\/\
+////////////\\\/
+\\\\/////////\\\
+///\\///////////
+\\\/\\/\/\/\////
+Case #74:
+///\\//\\/\\\\\/
+\\\/\///\/\\\\\/
+/////\/////\\\\/
+//\//\\///\/\\\/
+//\//\\\//\\/\\/
+//\//\\\//\\/\\/
+Case #75:
+/\/
+\//
+//\
+///
+\/\
+//\
+///
+\/\
+/\/
+/\\
+/\\
+/\\
+\/\
+///
+\/\
+///
+\/\
+///
+\//
+\/\
+///
+\//
+\\\
+\\\
+//\
+\\/
+/\/
+\//
+\//
+\/\
+///
+\/\
+\\/
+Case #76:
+IMPOSSIBLE
+Case #77:
+IMPOSSIBLE
+Case #78:
+//
+//
+\\
+/\
+/\
+Case #79:
+\\//
+/\/\
+\/\/
+//\\
+////
+\/\\
+//\\
+////
+\/\\
+//\\
+///\
+\///
+///\
+\///
+\\/\
+////
+\\//
+\\/\
+////
+///\
+\///
+////
+\/\\
+///\
+\//\
+Case #80:
+/\/\
+/\\/
+/\\\
+\/\\
+/\//
+/\\\
+\/\\
+\\/\
+//\/
+//\\
+\\/\
+////
+////
+\/\\
+///\
+\///
+///\
+\///
+\\/\
+////
+\\/\
+////
+///\
+\///
+\\/\
+Case #81:
+\\\\\
+//\\\
+/\///
+/\\\\
+\/\\\
+//\\\
+//\\\
+/////
+\/\\\
+///\\
+\///\
+/////
+\////
+\\/\\
+/////
+\\///
+\\/\\
+\\\/\
+/////
+//\/\
+Case #82:
+\//\///\\//\/\\///\\///\
+\//\////\//\/\\//\/\////
+\\\//\/\///\\/\//\\//\//
+Case #83:
+\\/\//\/\/\//\\/\/\/\/\\/
+////////\/\///\/\/\\///\\
+///\\/\\//////////////\//
+\/\/\\/\\/\/\/\/\//\//\//
+Case #84:
+\/\//\////
+\/\//\/\\\
+\\//////\\
+//////////
+////////\\
+\\////////
+\\\/\/\///
+////\/\/\\
+Case #85:
+\/\/\/\\/\//\\//
+///////\/\///\//
+\///////////////
+\\///\///\/\/\\\
+//\//\\//\/\\//\
+//\//\\//\/\\//\
+Case #86:
+\/\/\//\/\\//
+\\////////\//
+\\\//////////
+//////////\\\
+\\\\///////\\
+\\\\\///\///\
+////\\//\\/\/
+Case #87:
+///
+///
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+Case #88:
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+//////
+//////
+//////
+//////
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+//////
+//////
+Case #89:
+\/\
+\/\
+//\
+///
+\//
+/\\
+\/\
+///
+\//
+\\\
+//\
+/\/
+/\\
+\//
+///
+\\\
+///
+\\\
+\\\
+//\
+\\/
+\\\
+///
+///
+\\\
+\\\
+///
+\\\
+//\
+\\/
+/\\
+\/\
+\\/
+Case #90:
+\\\\/\\
+/\\\/\\
+\/\\/\\
+\\/\/\\
+///////
+/////\\
+\//////
+/////\\
+\/////\
+\\/////
+\\\////
+/////\\
+////\/\
+/\//\/\
+Case #91:
+/\///\/\///\\/\\\/\//\/\
+/\//////////\/\\\/\/////
+\/\\///\\\/\///\\\/////\
+//\\\/\/\\/\\/\///\/\/\/
+Case #92:
+\\/\/\\//\/\/\/\
+/\\///\//\/\\///
+/\\\/\//\/\/\\/\
+Case #93:
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+///////
+///////
+///////
+///////
+///////
+\\\\\\\
+\\\\\\\
+Case #94:
+\//\/\\/\\////\/////
+\\\//\\/\\//////////
+//////\/\\//\///////
+\\\\////\\//\/////\\
+\\\\\//\/\//\/////\\
+Case #95:
+\/\\/\//\\\\/
+Case #96:
+IMPOSSIBLE
+Case #97:
+//\/\/\/\/
+Case #98:
+\\\
+\\\
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+///
+\\\
+Case #99:
+\\///\\\//
+//////\\//
+///////\//
+//////////
+\\/////\\\
+////////\\
+/////////\
+\/////////
+/\/\/\////
+/\/\/\\///
+Case #100:
+\\\\
+\\\\
+\\\\
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+Case #101:
+/\\///
+\/\//\
+//\///
+/////\
+\/////
+//////
+\///\\
+/////\
+\/////
+//////
+\///\\
+//////
+\///\\
+\\////
+\\\///
+/\\//\
+Case #102:
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+///////
+///////
+///////
+\\\\\\\
+\\\\\\\
+///////
+///////
+//////\
+//////\
+Case #103:
+///
+///
+//\
+///
+\//
+\\\
+///
+/\\
+/\\
+\//
+\\\
+///
+\\\
+\\\
+///
+\\\
+//\
+///
+\//
+\\\
+\\\
+\\\
+//\
+\\/
+///
+\\\
+\\\
+\\\
+/\\
+/\\
+/\\
+/\\
+Case #104:
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+Case #105:
+///
+Case #106:
+/\/
+\/\
+\\/
+\\\
+///
+///
+//\
+//\
+//\
+//\
+//\
+/\/
+/\\
+\/\
+///
+\//
+\/\
+\\/
+\\\
+///
+//\
+\\/
+/\/
+\/\
+\\/
+\\/
+/\\
+/\\
+Case #107:
+\/\/\\/\\\/\\\//////\//\//\\\\/\\\\\////\/\//\\\\/\\///\/\/\\\\\\\\\\\/\/\//\\\\///\/\///\\\\/\\\//\
+Case #108:
+\//\\/
+\//\\/
+///\\\
+////\\
+\\///\
+//////
+//////
+\///\\
+/////\
+\/////
+/////\
+\/////
+/////\
+\/\//\
+Case #109:
+///
+///
+///
+\\\
+///
+\\\
+///
+///
+///
+\\\
+///
+\\\
+///
+\\\
+///
+///
+///
+\\\
+///
+\\\
+\\\
+\\\
+///
+///
+///
+\\\
+///
+\\\
+\\\
+\\\
+///
+\\\
+///
+Case #110:
+\\///\\//\
+\\////\///
+\\///////\
+//////////
+\\///////\
+\\\//////\
+/////////\
+/////////\
+/\/\/////\
+Case #111:
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+Case #112:
+IMPOSSIBLE
+Case #113:
+/\\\///\\//\\\/\///\\\\/\\\////\/
+/\\\////\//\\\/\////\\\\/\\///\//
+/\\\\\//\//\\\\//\/\/////\\///\\\
+Case #114:
+//\\
+//\\
+\\//
+//\\
+////
+\/\\
+////
+\/\\
+//\\
+//\\
+///\
+\///
+////
+\/\\
+\\//
+\\//
+/\//
+\/\\
+\\//
+\\/\
+////
+////
+\/\\
+///\
+\//\
+Case #115:
+IMPOSSIBLE
+Case #116:
+IMPOSSIBLE
+Case #117:
+\///\\/
+/////\\
+///////
+///////
+\///\\\
+/////\\
+\//////
+\\///\\
+\\\///\
+///////
+\\\////
+//////\
+/\\///\
+/\\///\
+Case #118:
+/\
+\/
+//
+\\
+Case #119:
+//////\\\\////\
+//////\\\\////\
+//////\\\\////\
+//////\\\\////\
+//////\\\\////\
+//////\\\\////\
+Case #120:
+///////
+///////
+///////
+///////
+///////
+///////
+///////
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+\\\\\\\
+Case #121:
+\//\/
+////\
+\\///
+/////
+\\/\\
+////\
+/////
+\////
+\\/\\
+////\
+\\///
+////\
+\\/\/
+\\/\\
+Case #122:
+\/\
+///
+\//
+///
+\\\
+///
+\\\
+//\
+///
+\/\
+\\/
+//\
+///
+\/\
+///
+\/\
+\\/
+//\
+///
+\/\
+\\/
+//\
+\\/
+///
+/\\
+\/\
+///
+\/\
+\\/
+\\\
+///
+\\\
+//\
+Case #123:
+\\//\\////
+//////////
+//////////
+\\/\\\\\\\
+\\\/\\\\\\
+/////\\\\\
+//////////
+/\///\\\\\
+/\\///\\\\
+/\\\//\\\\
+Case #124:
+\\\//\\\/\/\/
+//\///\\/\/\\
+\\/////\/\/\\
+/////////\/\\
+/\///\///\/\\
+/\\//\///\/\\
+Case #125:
+IMPOSSIBLE
+Case #126:
+\///
+\/\\
+\/\\
+////
+\/\\
+//\\
+\\//
+//\\
+////
+\/\\
+\\/\
+////
+////
+\/\\
+\\/\
+\\\/
+\\\/
+\\\/
+//\/
+////
+\/\\
+///\
+\///
+\\/\
+//\/
+Case #127:
+\\\///
+/\\//\
+\/\//\
+//\/\/
+Case #128:
+\////\\\//
+\/////\\//
+\/////////
+\/////////
+\\///\\\\\
+//////\\\\
+\\/////\\\
+\\\///\/\\
+//////\/\\
+/\\///\/\\
+Case #129:
+\//
+/\\
+\/\
+///
+\/\
+\\/
+\\/
+\\\
+///
+/\\
+Case #130:
+\/\/\//\//
+\/\/\//\/\
+\\//\/////
+/////////\
+//////////
+\\///////\
+//////////
+/////////\
+\///\/\///
+\\//\/\\//
+Case #131:
+/////////////////////////////////
+/////////////////////////////////
+/////////////////////////////////
+Case #132:
+///\\/
+///\\\
+//\//\
+//\\\/
+///\\\
+\///\\
+\\///\
+\\\///
+\\\\//
+\\\\\\
+/////\
+\\\\\/
+////\/
+//\\//
+/\/\//
+/\/\\\
+Case #133:
+IMPOSSIBLE
+Case #134:
+//\/\\/\
+/////\\/
+\/////\\
+/\/\/\//
+Case #135:
+/\\
+\/\
+///
+\/\
+///
+\/\
+//\
+/\/
+/\\
+\/\
+///
+\/\
+\\/
+///
+//\
+\\/
+//\
+///
+\/\
+Case #136:
+IMPOSSIBLE
+Case #137:
+\\/\/\//\\/\/\\/\\\\//\\
+/\\//////\\///\\/\\\///\
+/\\\/\\/\/\\////\/////\/
+/\\\\/\/\/\\\///\//\//\\
+Case #138:
+\///\/\/\/\\/
+///////////\\
+////////////\
+/////////////
+\///////\///\
+/\/\/\//\\/\/
+Case #139:
+IMPOSSIBLE
+Case #140:
+\\\///\\\/
+/\\///////
+\/\///\\\\
+\\////////
+//////////
+\\///\\\\\
+\\\///////
+//////////
+////\\\\\\
+/\/\/////\
+Case #141:
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+Case #142:
+///
+\\\
+\\\
+\\\
+///
+//\
+Case #143:
+\/\/\//\//\/\\\//\\/\\/\/
+////\////////\\///\\/\/\/
+\/\\///\\/\/\/\\////////\
+\\/\\/\/\/\/\\//\//\/\/\/
+Case #144:
+IMPOSSIBLE
+Case #145:
+\\\///\/\/\/\///\//\//\/\//\//\\\\/\\\/\\//\/\////
+\\\\\\/\/\/\/\\\/\\/\\/\//\/\\///\\//\\//\\/\///\\
+Case #146:
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+Case #147:
+\//\//\/\/\\\\/\/\\/
+///////////\\\\///\\
+\\////////////\\////
+//\\/////////\//\///
+\\/\\/\/\////\//\//\
+Case #148:
+IMPOSSIBLE
+Case #149:
+\///\//\/\/\//\\\/\/
+////\//\/\/\///\\/\\
+////\/////////\////\
+\\\\/////\/\//\/\///
+//\\\/\//\/\//\/\\//
+Case #150:
+/\/\//\\/\
+\//\///\/\
+//////////
+/\////////
+/\\/\/\//\
+Case #151:
+\\\\\\\
+\\\\\\\
+Case #152:
+/////////////////////////
+/////////////////////////
+/////////////////////////
+/////////////////////////
+Case #153:
+IMPOSSIBLE
+Case #154:
+/\\///\/\/\/\//\\/\\/\\\
+\/\/\\//\/\/\//////\/\\\
+/////\\\////////\///////
+\/\//\\\\/\/\///\\/\///\
+Case #155:
+/\\\\///////
+\/\\\///////
+///\\//\\\\\
+\///\///\\\\
+/////\/\////
+\////\/\////
+\\///\/\/\\\
+Case #156:
+IMPOSSIBLE
+Case #157:
+\/\\\/\/\
+///\\/\/\
+\///\/\/\
+///\/////
+\//\\/\/\
+Case #158:
+IMPOSSIBLE
+Case #159:
+/////\
+/////\
+/////\
+/////\
+/////\
+Case #160:
+\///\/\/\/
+////\/\/\\
+////\/\/\\
+/////////\
+//////////
+//////////
+\/\/\///\\
+//\/\\///\
+//\/\\\//\
+//\/\\\//\
+Case #161:
+\//\/\/\/\/\/\\/
+\/////////////\\
+/////////\//////
+\////////\\/\//\
+\\///////\\/\/\/
+//\/\////\\/\/\/
+Case #162:
+IMPOSSIBLE
+Case #163:
+//
+\\
+//
+/\
+\/
+/\
+\/
+/\
+\/
+/\
+\/
+\\
+/\
+\/
+/\
+/\
+/\
+\/
+/\
+\/
+\\
+/\
+\/
+\\
+/\
+\/
+/\
+/\
+\/
+\\
+/\
+\/
+/\
+\/
+/\
+\/
+/\
+\/
+\\
+/\
+\/
+/\
+\/
+\\
+/\
+\/
+\/
+/\
+\/
+/\
+Case #164:
+\
+/
+\
+\
+Case #165:
+\/\/
+///\
+\///
+///\
+\///
+\\/\
+////
+\\/\
+///\
+////
+////
+\/\\
+///\
+\///
+\\//
+\\/\
+\\\/
+//\/
+///\
+\///
+////
+\/\\
+\\//
+/\/\
+\//\
+Case #166:
+\
+/
+/
+Case #167:
+\\\\/\\//\
+///\/\\///
+\\\///\\//
+\\\\///\\\
+//////////
+///////\\\
+////////\\
+/////////\
+\/////////
+/\/\/\/\//
+Case #168:
+\/\//\///\/\/\/\/\/\/\\\
+//\\\//////////////////\
+/\/\\\\\/\/\/\/\/\/\//\/
+Case #169:
+\\\///
+//\/\\
+//////
+\///\\
+//////
+\///\\
+\\///\
+//////
+/////\
+\/////
+\\////
+\\\/\\
+//////
+////\\
+\\/\//
+/\/\//
+Case #170:
+/\\\///\/\\/\\\///\/
+\/\\//////\/\\\/////
+\\/\///\/\///\\///\\
+////\//\/\\///\\//\\
+/\//\//\/\\\/\////\\
+Case #171:
+\\/\\//
+///\\//
+////\/\
+///////
+\/////\
+///////
+\/////\
+\\/////
+//\///\
+//\\/\/
+Case #172:
+\//\\\/\\/
+////\\/\\/
+\\/\/\/\\/
+Case #173:
+\/\\
+//\\
+///\
+\///
+///\
+\///
+\\/\
+//\/
+//\\
+////
+\/\\
+///\
+\///
+///\
+\///
+///\
+\///
+////
+\/\\
+////
+\/\\
+////
+\//\
+////
+\\//
+Case #174:
+\\/\///\/\\/\/\/\/\\
+//////////\\///////\
+////\\/\///\\///\///
+\/\\/\/\\////\//\\/\
+\\/\/\/\\\///\//\\\/
+Case #175:
+IMPOSSIBLE
+Case #176:
+/
+/
+\
+\
+\
+\
+/
+/
+/
+\
+\
+\
+\
+/
+\
+/
+\
+\
+\
+\
+/
+\
+\
+/
+/
+\
+/
+\
+\
+\
+/
+/
+\
+\
+/
+/
+/
+/
+\
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\
+/
+/
+\
+\
+\
+\
+/
+/
+/
+/
+\
+\
+\
+/
+\
+\
+\
+\
+\
+\
+/
+\
+/
+\
+/
+\
+/
+\
+\
+\
+\
+/
+/
+\
+\
+\
+\
+\
+/
+/
+/
+\
+\
+/
+/
+\
+/
+/
+/
+/
+/
+Case #177:
+/\\
+\/\
+///
+\//
+//\
+\\/
+/\\
+\//
+\\\
+\\\
+\\\
+/\\
+/\\
+\/\
+///
+\/\
+///
+\//
+\/\
+///
+\/\
+///
+\//
+\\\
+//\
+\\/
+\\/
+///
+Case #178:
+\/\///\\//\/\/\/\\/\
+\\/////\/////////\\/
+////////////////\/\\
+\\\\////////////\\//
+\\\\\/\/\/\/\///\\/\
+Case #179:
+\\\/\//\\\
+\\\/\/////
+///////\\\
+////////\\
+//////////
+\/////////
+\\/////\\\
+\\\/\///\\
+//\/\\///\
+//\/\\\/\/
+Case #180:
+/\/\/\/\/\\/
+/\/\\/////\\
+\/\/\\/\//\\
+Case #181:
+\\/\
+//\/
+//\\
+\\/\
+////
+///\
+\///
+////
+\/\\
+////
+\/\\
+\\//
+//\\
+\\//
+\\//
+Case #182:
+\//\/\//\\//\\\/\/\/
+\\\//////\///\\/\/\/
+//\\/\\///////\\//\/
+\\/\/\\\/\/\/\///\//
+Case #183:
+\\\//\\///
+\\\//\\///
+/\\/\/////
+\/\/\\\\\\
+/////\\\\\
+\/////\\\\
+\\/////\\\
+////////\\
+\\/////\/\
+\\\/\//\\/
+Case #184:
+\/\\\\
+///\\\
+\/////
+///\\\
+\/////
+\\/\\\
+//////
+///\\\
+\/////
+///\\\
+\/////
+///\\\
+\/\/\\
+Case #185:
+/\//\\\//\
+/\///\\///
+/\\///\\//
+/\\\/\//\\
+Case #186:
+IMPOSSIBLE
+Case #187:
+//\/\\\/\/////
+\\///\\/\/////
+\\\///\/\/\\\\
+//////////////
+\\\/////\/\\\\
+////////\\//\\
+//\/\///\\//\\
+Case #188:
+\/\
+Case #189:
+////
+////
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+Case #190:
+\//\
+\/\/
+Case #191:
+//\/\\//\/
+\\//\\//\/
+/////\///\
+//////////
+//////////
+\///////\\
+\\////////
+////////\\
+\\////////
+/\\/\/\/\\
+Case #192:
+\\/
+\\/
+\\/
+/\/
+/\/
+/\\
+\//
+\\\
+/\\
+\/\
+\\/
+\\\
+///
+///
+//\
+//\
+///
+\/\
+\\/
+///
+///
+\\\
+\\\
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+Case #193:
+\\/
+\\/
+\\\
+/\\
+\/\
+///
+\//
+\\\
+/\\
+/\\
+\/\
+\\/
+//\
+\\/
+\\/
+\\/
+\\/
+/\/
+\//
+/\\
+\/\
+Case #194:
+IMPOSSIBLE
+Case #195:
+/\//\\/\/\
+/\///\/\\/
+\//////\\\
+/\/\///\\\
+Case #196:
+//\/\/\/\/\/\/\/\\/\/\/\\
+/////////////////\/\\////
+\///////////////\////////
+\\/\/\/\/\/\/\//\\//\///\
+Case #197:
+\/////\/\\////\\\/\/
+//////\/\\///\/\\/\/
+/////////\///\\/\/\/
+\\\\\///\////\\/\/\/
+\\\\\\//\////\\/\\//
+Case #198:
+//\/\//\//\\/\/\/\/\\\/\\/\/\\/\\
+//\\///\///\\////////////////\\/\
+/\/\\\\/\/\/\\/\/\///\//\/\/\//\/
+Case #199:
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+Case #200:
+IMPOSSIBLE
+Case #201:
+\\\//\/\/\\/
+//////////\\
+////////////
+\\\/////////
+//\\/////\\\
+///\\/////\\
+\/\/\\/\/\/\
+Case #202:
+\\\/\/
+//\/\/
+//\/\/
+\\///\
+//////
+\\////
+//////
+///\\\
+\/\///
+\/\///
+//\\\\
+//\\\\
+Case #203:
+IMPOSSIBLE
+Case #204:
+\/\//\/\\\\///\\\///\\\\\//\/\\//\\/\\\\\\\/\/\//\\//\\/\\\////\\\/\///\\\\\/\/\\//\\\\
+Case #205:
+///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
+///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
+///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
+Case #206:
+\//\/\/\\//\/\/\//
+////////\///////\\
+/////\///////\///\
+\/\//\\/\/\//\\/\/
+Case #207:
+/\\//\///\///\//\/\\\\//\/\\\
+\/\//\///\///\//////\\/////\\
+\\/\\/\\\//\\/\/\///\\\/\/\//
+Case #208:
+\\//\//
+\\\\/\\
+\\\\\/\
+//////\
+///////
+///////
+/////\\
+///////
+///////
+\//////
+\\//\\\
+\\/\/\\
+\\/\\/\
+///\\\/
+Case #209:
+IMPOSSIBLE
+Case #210:
+\\/\///
+///\///
+////\\\
+/////\\
+\/////\
+///////
+\/////\
+\\/////
+//\////
+//\\///
+Case #211:
+/\//\/\//\/\/\/\//\/\\/\\
+\////////////////////\\/\
+\\\///\\/\//////\/\/\//\/
+//\\/\/\/\\/\///\/\/\//\\
+Case #212:
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+Case #213:
+\////\/\/\
+\/////////
+\////////\
+//////////
+\\////////
+//////////
+///////\\\
+\///////\\
+/////\/\//
+\/\//\/\/\
+Case #214:
+\//
+/\\
+\/\
+//\
+/\/
+/\\
+\/\
+//\
+//\
+//\
+\\/
+//\
+//\
+\\/
+//\
+///
+\/\
+\\/
+///
+//\
+\\/
+//\
+///
+\/\
+\\/
+//\
+\\/
+\\/
+\\/
+/\/
+\/\
+\\/
+\\/
+Case #215:
+IMPOSSIBLE
+Case #216:
+\\/\/\///\\///
+\\/\/\////\/\\
+\\/\/\////////
+/\\///////////
+/\\\///\//////
+/\\\\//\\/\\\\
+/\\\\//\\\///\
+Case #217:
+\/\
+\\/
+///
+//\
+///
+\//
+/\\
+\/\
+\\/
+//\
+\\/
+//\
+///
+\/\
+\\/
+//\
+///
+\/\
+///
+\/\
+\\/
+\\\
+///
+///
+Case #218:
+////
+Case #219:
+\/\//\////\\/\//\\\\/\\/\
+\\///\/////\/\///\\\/\\\/
+///\\/\\\/\/\///\//\\///\
+\\\/\\/\\/\/\\//\/\////\/
+Case #220:
+\/\/\
+\/\/\
+\/\/\
+//\/\
+//\/\
+/////
+\///\
+\\///
+/////
+/////
+\////
+\////
+\/\\\
+/\///
+/\//\
+Case #221:
+\
+\
+/
+\
+/
+\
+\
+Case #222:
+IMPOSSIBLE
+Case #223:
+\\\\\
+///\\
+///\\
+/////
+\\///
+//\\\
+/////
+\/\\\
+///\\
+\///\
+\\///
+/////
+\\/\\
+\\\//
+\\\//
+/////
+//\\\
+//\\\
+Case #224:
+\\\\/\//\\\/\/
+\\\\/\///\\/\/
+//////////\/\/
+/////////////\
+//////////////
+///\///\/\////
+\//\\//\/\\///
+Case #225:
+IMPOSSIBLE
+Case #226:
+\//\\/\//\\///
+///\\/\//\\///
+////\/\///\//\
+\\//////////\/
+////////////\/
+/////\/\////\\
+\/\//\/\////\\
+Case #227:
+IMPOSSIBLE
+Case #228:
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+Case #229:
+/\\/\\\\\/
+\/\/\\\\\/
+\\///\\\\/
+//////\\\/
+/\///\/\\/
+/\\//\\/\/
+/\\//\\\//
+/\\//\\\//
+/\\//\\\//
+/\\//\\\\\
+Case #230:
+\\/
+/\/
+/\/
+\/\
+///
+\/\
+//\
+\\/
+///
+\\\
+///
+///
+//\
+/\/
+/\\
+\//
+/\\
+\/\
+///
+\//
+\//
+//\
+///
+\//
+\//
+\/\
+\\/
+/\/
+\/\
+\\/
+\\/
+\\/
+/\\
+Case #231:
+/\\
+/\\
+\//
+/\\
+/\\
+/\\
+\//
+\\\
+/\\
+\/\
+///
+\//
+//\
+///
+\/\
+\\/
+/\/
+\/\
+///
+\//
+/\\
+\/\
+\\/
+/\/
+Case #232:
+IMPOSSIBLE
+Case #233:
+\\\\\///\\\///\\\///
+\\\\\///\\\///\\\///
+\\\\\///\\\///\\\///
+\\\\\///\\\///\\\///
+\\\\\///\\\///\\\///
+Case #234:
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+\\\\\
+/////
+Case #235:
+\\\\//
+///\\\
+///\\\
+////\\
+/////\
+\/////
+/////\
+\/////
+/////\
+\/////
+\\////
+////\\
+\\/\//
+/\/\/\
+\//\\/
+\//\\/
+Case #236:
+//////\/\/\/\/\/
+//////\/\/\/\/\/
+//////\/\/\/\/\/
+//////\/\/\/\/\/
+//////\/\/\/\/\/
+//////\/\/\/\/\/
+Case #237:
+IMPOSSIBLE
+Case #238:
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+Case #239:
+\/\\//\/\\
+\\/\//////
+\\\/\/\/\\
+Case #240:
+//\
+//\
+//\
+//\
+///
+\//
+\\\
+\\\
+///
+\\\
+//\
+///
+\//
+\\\
+///
+///
+\\\
+\\\
+\\\
+\\\
+//\
+///
+\/\
+\\/
+///
+\\\
+///
+///
+\\\
+\\\
+\\\
+\\\
+/\\
+Case #241:
+\\//\/\/\\/\\/\
+/////////\\/\\/
+\\\///////\\/\\
+///////////////
+\\\/\/\//////\\
+/\\/\/\\//\/\/\
+Case #242:
+\\/\\///\\\/\\\/
+////\////\\\/\\\
+//////////\\\/\\
+\///\\//////\\/\
+\\/\/\\/////////
+/\/\\/\\//\//\//
+Case #243:
+IMPOSSIBLE
+Case #244:
+IMPOSSIBLE
+Case #245:
+/\/\///\\/\/\
+\//\/////////
+////////\////
+\\/\\///\\//\
+Case #246:
+\\\/\/\//\/\\/
+\\\/\/\///////
+//////////////
+\\\///////////
+//\\/\/\/\\\\\
+//\\/\/\\/////
+//\\/\/\\\\\\\
+Case #247:
+IMPOSSIBLE
+Case #248:
+\\\\
+////
+///\
+\\\/
+///\
+/\\/
+Case #249:
+//////////////////////////////////////////
+//////////////////////////////////////////
+Case #250:
+\\
+/\
+\/
+//
+//
+\\
+//
+\\
+//
+\\
+\\
+/\
+\/
+Case #251:
+/////
+\\\\\
+//\\\
+//\\\
+\\/\\
+///\\
+///\\
+////\
+\\///
+////\
+/////
+\///\
+/////
+\////
+///\\
+\////
+\\/\\
+/\\//
+\/\/\
+//\\/
+Case #252:
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+\\\\\
+Case #253:
+IMPOSSIBLE
+Case #254:
+///////////////
+///////////////
+///////////////
+///////////////
+///////////////
+Case #255:
+\\\\\/////\\\///\\\/
+\\\\\/////\\\///\\\/
+\\\\\/////\\\///\\\/
+\\\\\/////\\\///\\\/
+\\\\\/////\\\///\\\/
+Case #256:
+\/\
+\\/
+/\\
+\/\
+///
+\//
+///
+\\\
+\\\
+/\\
+\/\
+/\/
+/\\
+\//
+\\\
+//\
+\\/
+\\\
+\\\
+//\
+///
+\/\
+\\/
+//\
+\\/
+/\/
+\/\
+\\/
+\\/
+\\/
+\\/
+///
+/\\
+Case #257:
+\\\\/\\///
+///\/\\/\\
+//////\\//
+///////\\\
+\/////////
+\\////////
+/\\///\\\\
+/\\\/\/\\\
+Case #258:
+IMPOSSIBLE
+Case #259:
+\//\/\\\\/
+\/\///\\\/
+\/\\/\/\\/
+Case #260:
+////////////////////////////////////////////////////////////////////////////////////
+Case #261:
+\\//\\
+\\////
+////\\
+//////
+\///\\
+//////
+\///\\
+/////\
+\/////
+\\////
+////\\
+\\////
+////\\
+\\////
+/\\///
+/\\///
+Case #262:
+\\//\//\/\/\/\/\/\\/\\/\/
+//\\//////////////\\/\\/\
+///\\\/\/////////\//\////
+\//\\\/\\/\/\/\//\//\/\/\
+Case #263:
+/\/\
+/\/\
+\///
+///\
+\///
+///\
+\///
+////
+\/\\
+//\\
+///\
+\///
+////
+\/\\
+\\/\
+////
+///\
+\///
+\\/\
+////
+\\/\
+////
+\\/\
+\\\/
+//\\
+Case #264:
+///////\\\//\/\\\\//\\\//
+\\\\\\\/\\/\///\\\///\\//
+/////\\\/\/\\///////\////
+/////\\\/\/\\\///\//\\\\\
+Case #265:
+IMPOSSIBLE
+Case #266:
+\\\//\\\\//\\/\\/\\/
+\\\///\\\//\\/\\/\\/
+\\\\///\\//\\/\\\///
+//////\/\/\/\/\\\\\\
+///\//\\//\/\\/\\\\\
+Case #267:
+\////
+\////
+\////
+\///\
+\////
+\///\
+\\///
+////\
+/////
+\////
+\\///
+/////
+//\\\
+/////
+\////
+\////
+\////
+\/\\\
+/\/\\
+/\\/\
+Case #268:
+///\\//\\\///
+////\///\\///
+/////////\///
+\/\///////\\\
+\/\\///\/////
+\/\\\//\\////
+\/\\\//\\\\\\
+Case #269:
+\\//\
+\\/\/
+///\\
+////\
+\\///
+/////
+\\/\\
+////\
+/////
+\///\
+\\///
+////\
+\\///
+\\\//
+\\\//
+\\\/\
+\\\\/
+\\\\/
+/\\\\
+\/\\\
+Case #270:
+\\/\\\\///
+\\/\\\\/\\
+\\/\\\\\//
+////\\\\\\
+\\///\\\\\
+////\/\\\\
+\\//\\/\\\
+\\//\\\/\\
+\\//\\\\/\
+////\\\\\/
+Case #271:
+/\//\\
+Case #272:
+\\\/
+//\/
+///\
+\///
+///\
+\///
+\\/\
+////
+///\
+\///
+\\/\
+////
+\\//
+\\/\
+\\\/
+\\\/
+\\\/
+\\\/
+Case #273:
+///
+Case #274:
+\/\\/\/\\/\///
+///\/\\/\/\///
+\/\//\\\//\/\\
+Case #275:
+//////\/\/\/\/\
+//////\/\/\/\/\
+//////\/\/\/\/\
+//////\/\/\/\/\
+//////\/\/\/\/\
+//////\/\/\/\/\
+Case #276:
+/\\//\\//\\//\//
+\/\///\///\/////
+\\///////////\\\
+\\\/////////\/\\
+\\\\/////\//\\//
+\\\\\/\//\//\\\\
+Case #277:
+/\//
+\///
+/\\\
+/\\\
+/\\\
+\/\\
+/\//
+/\\\
+/\\\
+\/\\
+////
+\/\\
+\\/\
+////
+///\
+\///
+\\//
+//\\
+////
+\/\\
+////
+\/\\
+///\
+\/\/
+\/\\
+Case #278:
+IMPOSSIBLE
+Case #279:
+/\\\///
+\/\\///
+\\/\/\\
+///////
+///////
+\///\\\
+\\/////
+\\\////
+\\\\\\\
+///////
+///////
+\\\\\\\
+\\\\\\\
+\\\\\\\
+Case #280:
+\///
+/\\\
+\/\\
+///\
+\///
+///\
+\///
+\\//
+/\/\
+\/\/
+\/\/
+Case #281:
+//\\\/\\\//\\\/\\/\/
+///\\\/\\///////////
+\//\\\/\\\///\//\//\
+Case #282:
+/\\//\
+/\\//\
+\/\//\
+//\///
+/////\
+\/////
+/////\
+\/////
+\\///\
+\\\///
+//////
+//////
+\\/\\\
+/\\///
+\/\///
+\/\///
+Case #283:
+\//\/\/\/\/
+\//\/\/\/\/
+\//\/\\////
+///\/\\\/\\
+Case #284:
+////
+////
+////
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+////
+\\\\
+Case #285:
+///\\
+/////
+///\\
+\///\
+\\///
+/\\/\
+Case #286:
+IMPOSSIBLE
+Case #287:
+\/\//\/
+\/\////
+\\/////
+\\\/\\\
+\\\\/\\
+///////
+\\\\/\\
+//////\
+///////
+///////
+/////\\
+\///\//
+/\//\/\
+Case #288:
+\\//\///
+/\///\\\
+\///////
+/////\\\
+\/////\\
+///\///\
+\//\\//\
+Case #289:
+\//
+\\\
+///
+//\
+\\/
+//\
+\\/
+///
+//\
+\\/
+///
+\\\
+//\
+\\/
+//\
+///
+\/\
+///
+\/\
+///
+\/\
+Case #290:
+//\/\\\/\/
+/////\\/\\
+\///\/\/\\
+\\//\\//\\
+/\//\\/\/\
+Case #291:
+\////\//\\\\\\//
+\////////\\\\\/\
+//////////\\\\\/
+/\\////////\\\\\
+\/\\\///\//////\
+\\/\\\//\\/////\
+Case #292:
+\/\//\//\\//\///\/\/\/\/\//\\\\/\
+\\///\/\/\//\///////////\///////\
+////\//\\//\/\\/\/\/\//\/\//////\
+Case #293:
+IMPOSSIBLE
+Case #294:
+\//\/
+\//\\
+\///\
+\\///
+////\
+/////
+\////
+\\/\\
+////\
+\\/\/
+/\/\/
+Case #295:
+\///\//\\///\\///\\//\/\/\\//\\\/
+\\\\/\\/\//\/\////\///////\///\\/
+//\\\/\\///\\/\\//\\/\/\/\/\/\///
+Case #296:
+\/\//\/\\/
+\\////////
+//////////
+//////////
+\\////////
+////\\\\\\
+\\////////
+////\\\\\\
+/\////////
+/\\/\\\\\\
+Case #297:
+/\//\/\\/\//\\
+\//////\/\////
+////////////\\
+//////////////
+\///////////\\
+///////////\//
+\/\/\/\/\//\//
+Case #298:
+IMPOSSIBLE
+Case #299:
+\\\\\////\
+\\\\\/////
+\\\\\////\
+\\\\\/////
+/////////\
+//////////
+//////////
+////\/\///
+////\/\/\\
+\///\/\\//
+Case #300:
+\\//\//\/\/\\/\/\/\/\\\\/
+////////////\/\\//////\\/
+\\\/\\/\/\/\////\////\//\
+\\\/\\/\/\/\\///\\///\/\/
+Case #301:
+\//
+\/\
+\/\
+///
+\//
+\\\
+//\
+\\/
+///
+//\
+/\/
+/\\
+\//
+\\\
+//\
+\\/
+///
+\\\
+\\\
+\\\
+///
+\\\
+//\
+\\/
+\\/
+/\/
+\//
+\//
+\\\
+\\\
+//\
+\\/
+Case #302:
+//\
+///
+\/\
+\\/
+///
+//\
+\\/
+/\\
+\/\
+//\
+Case #303:
+\/\//
+\/\/\
+//\/\
+\\///
+\\\/\
+\\\\/
+/////
+/////
+//\\\
+/////
+\/\\\
+\\/\\
+////\
+\\///
+/////
+/\///
+/\///
+/\///
+Case #304:
+//\/\//\
+//\/\///
+///////\
+\///////
+///////\
+\///////
+///////\
+\///////
+/////\/\
+\/\//\\/
+Case #305:
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+//////
+//////
+//////
+//////
+\\\\\\
+\\\\\\
+\\\\\\
+\\\\\\
+//////
+//////
+Case #306:
+/\/\///\\/
+/\/\////\/
+\////////\
+\\////////
+\\\\//////
+\\\\\///\\
+/////////\
+//////////
+/////////\
+\\\/\/\/\/
+Case #307:
+\\\
+\\\
+///
+//\
+///
+\/\
+///
+\/\
+\\/
+\\/
+///
+/\\
+\/\
+//\
+Case #308:
+/\//
+\//\
+////
+///\
+\/\/
+//\\
+///\
+\/\/
+//\\
+///\
+\///
+///\
+\///
+\\/\
+////
+///\
+\///
+////
+\/\\
+\\//
+//\\
+\\//
+//\\
+\\//
+\\/\
+Case #309:
+\/\\/\\
+\\/\/\\
+//////\
+///////
+\/\/\//
+Case #310:
+/\//
+\///
+////
+/\\\
+\/\\
+///\
+\///
+\\/\
+////
+\\//
+/\//
+\/\\
+\\/\
+///\
+///\
+Case #311:
+\//\///\\/
+\//\////\\
+\//\//////
+\///////\\
+\\///////\
+////\/////
+\\//\\////
+\\//\\\///
+////\\\///
+Case #312:
+\/\/\/
+\\///\
+//////
+//////
+\///\\
+\\////
+////\\
+//////
+\///\\
+\\////
+////\\
+//////
+\///\\
+\\///\
+\\\/\/
+/\\/\/
+Case #313:
+\\\\
+\\\\
+\\\\
+\\\\
+////
+////
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+Case #314:
+\/\\///
+\/\\//\
+//\\///
+///\\//
+\//////
+///\\\\
+\///\\\
+\\///\\
+////\/\
+\\//\\/
+////\\/
+////\\\
+////\\\
+////\\\
+Case #315:
+\\\//\\\/\
+\\\///\\/\
+///////\\/
+//////////
+\\/////\\\
+\\\///////
+\\\\///\\\
+///\\/////
+/\\/\\/\\\
+\/\/\\\///
+Case #316:
+IMPOSSIBLE
+Case #317:
+\
+/
+\
+\
+/
+\
+\
+/
+\
+/
+/
+/
+\
+/
+\
+/
+\
+/
+\
+/
+\
+/
+/
+Case #318:
+/\/
+/\\
+\/\
+//\
+\\/
+//\
+///
+\/\
+//\
+\\/
+//\
+///
+\/\
+\\/
+\\/
+//\
+\\/
+/\/
+\/\
+///
+\/\
+\\/
+/\\
+\/\
+Case #319:
+///\/\\//\/\//\\///\/\/\/
+//////\/\//\///\///\/\/\/
+\\/\/\//\\\/\//\///\\/\/\
+Case #320:
+\\\///\/\\
+\\\///////
+\\\///////
+///////\\\
+//////\///
+///\//\///
+\//\//\/\\
+Case #321:
+/\\/\
+\/\/\
+/\/\/
+/\/\\
+\////
+///\\
+\////
+///\\
+\////
+/////
+\/\\\
+\\///
+\\\\\
+///\\
+////\
+\\///
+\\\/\
+/////
+\\\//
+//\//
+Case #322:
+\/\\//
+\/\\/\
+\/\\\/
+///\\\
+\/////
+///\\\
+\///\\
+/////\
+\/////
+//////
+\///\\
+\\///\
+//////
+/////\
+\/////
+/\/\//
+Case #323:
+IMPOSSIBLE
+Case #324:
+IMPOSSIBLE
+Case #325:
+IMPOSSIBLE
+Case #326:
+///\\//\//\/\\\/\\/\/\\//
+////\////////\\/\\/\/\\/\
+\\/\/\/\\/////\\/\\//////
+/\/\/\\/\\/\/\//\//\//\/\
+Case #327:
+\\//\/\/\\/\/\/\
+\\///////\/\/\/\
+\\\/////////////
+////////////////
+//\///\/////\/\\
+//\\//\\/\//\\/\
+Case #328:
+/\/\\
+\////
+/////
+\/\\\
+\\/\\
+\\\/\
+/////
+/////
+/////
+\///\
+\//\/
+Case #329:
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+Case #330:
+\\//\/
+////\/
+\\\\/\
+//////
+/////\
+\\\///
+/////\
+//////
+/////\
+\/////
+//////
+\/////
+\\/\\\
+////\\
+///\/\
+\//\\/
+Case #331:
+\//\/\
+///\/\
+//////
+\\///\
+//////
+\\///\
+//////
+//////
+\///\\
+/////\
+\/\/\/
+Case #332:
+//\\/
+//\\/
+///\/
+\///\
+/////
+\////
+\\/\\
+\\\//
+/\\//
+\/\/\
+Case #333:
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+Case #334:
+/\/\\/
+\///\\
+//////
+\///\\
+\\////
+////\\
+/////\
+\/////
+\\///\
+//////
+\\////
+//////
+\\//\\
+/\/\//
+\//\//
+\//\//
+Case #335:
+\//\/\\///\/\\\//\/\/\\//
+\/////\//////\\///////\\\
+\\/\/\/\\/\///\\////////\
+\\/\/\\/\/\\/\//\/\/\///\
+Case #336:
+\\/\
+\\\/
+///\
+\\\/
+\\\\
+////
+///\
+Case #337:
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+//////
+Case #338:
+\//\\/\\\\\///\/\////\\///\/\\\//\\///\///\////\\/\\//\\//\/\\\\/\\///\\/\//\///\\/\\//\/\//\/\//\\/
+Case #339:
+\/
+/\
+\/
+/\
+\/
+//
+/\
+\/
+/\
+\/
+/\
+\/
+\\
+//
+/\
+/\
+/\
+/\
+\/
+/\
+\/
+\\
+//
+\\
+/\
+\/
+/\
+\/
+//
+//
+/\
+\/
+/\
+\/
+//
+/\
+\/
+\\
+/\
+\/
+/\
+/\
+\/
+\\
+/\
+\/
+/\
+/\
+\/
+\/
+Case #340:
+\////\\\//\\/\//
+\\\\\/\\//\\\///
+//\\\\/\///\\\\\
+///\\\\/////\\\\
+\//\\\\\//////\\
+///\\\\\\/\///\\
+Case #341:
+/\/
+\/\
+//\
+//\
+//\
+//\
+//\
+///
+\/\
+//\
+\\/
+//\
+\\/
+//\
+//\
+\\/
+//\
+///
+\/\
+///
+\/\
+///
+\/\
+///
+\/\
+\\/
+///
+///
+/\\
+\//
+//\
+\\/
+/\\
+Case #342:
+IMPOSSIBLE
+Case #343:
+\\\\///\/\\//\\////\/\//////\////
+\\\\///\/\\//\\////\/\/////\/////
+/////\\//\\//\\////\/\/////\///\\
+Case #344:
+/////
+/////
+/////
+/////
+/////
+\\\\\
+\\\\\
+\\\\\
+/////
+/////
+/////
+\\\\\
+\\\\\
+\\\\\
+/////
+/////
+Case #345:
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+\\\\\\\\\\
+Case #346:
+\\/\/\/
+\\/\/\/
+///////
+\\///\\
+\\\///\
+//\\///
+\\/\\//
+Case #347:
+///////\\\\\/
+///////\\\\\/
+///////\\\\\/
+///////\\\\\/
+///////\\\\\/
+///////\\\\\/
+///////\\\\\/
+Case #348:
+\\//\/\\\///\/
+///////\\////\
+////////\/////
+/////////////\
+\/////////////
+/\/////\//////
+/\\/\//\\/\///
+Case #349:
+IMPOSSIBLE
+Case #350:
+IMPOSSIBLE
+Case #351:
+\\/\/\\////\/\\/\\/\
+\\\//\\///////\\/\\/
+\\\\\/\//\/\/\/\\/\\
+\\\\\\///\/\/\\////\
+/////////\/\/\\/\//\
+Case #352:
+IMPOSSIBLE
+Case #353:
+IMPOSSIBLE
+Case #354:
+/\\////
+/\\//\\
+\/\//\\
+//\///\
+///////
+\/////\
+\\/////
+\\\///\
+//\\///
+\\/\\//
+/\/\\//
+\//\\//
+\//\\//
+\//\\\\
+Case #355:
+/\/\/\//\/\\\\////
+\//////////\\\/\\\
+\\///\\/////\\\///
+//\/\/\\/\/\/////\
+Case #356:
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+//////////
+Case #357:
+/\/\/\//\\///\//\/\\\/\//
+/\/\/\//\\//////////\\//\
+/\\///\\/\/\//\/\//\///\/
+/\\\/\/\\//\//\/\//\///\\
+Case #358:
+\\\///\/\\////\\/\\\/\\/\\//\\\/
+\\\\\\//\\\\\\/\\/\\\/\/\\//////
+////////\\\\\\/\\\////\/\\\/////
+Case #359:
+\////\/\/\//\/\\/\\\\/\/\
+\//////\/\/////\\/\\\/\\/
+\/\\/\\//////////\//////\
+\\/\\/\\/\/\/\///\//\//\/
+Case #360:
+/\\\///
+\/\\//\
+\\/\///
+///////
+///////
+\//////
+\\/\\\\
+///////
+///\\\\
+\//////
+///////
+\/\\\\\
+\\/\\\\
+\\/\\\\
+Case #361:
+/\//\/\/\\//\/\/\/\\/\//
+\////////\/////\///\/\/\
+//\/\/\//\\/\//\\/\/\//\
+Case #362:
+\\\\/\////
+//\\/\\\\\
+///\\/////
+\///\\\\\\
+\\///\\\\\
+\\\///\\\\
+///////\\\
+\\\/\//\\\
+//\/\//\\\
+/\//\//\\\
+Case #363:
+/\////\\\//\/////\\\//\\/\/\/\///
+/\//\\/\\//\/////////\/\\////\/\\
+/\\\/\\/\/\////\/////\\//\//\//\\
+Case #364:
+IMPOSSIBLE
+Case #365:
+\/\\//
+//\\//
+\\/\//
+///\/\
+\\\//\
+/////\
+//////
+//////
+////\\
+//////
+\///\\
+\\////
+//////
+\\/\\\
+\\\//\
+//\//\
+Case #366:
+IMPOSSIBLE
+Case #367:
+/\/\\//\/\/\\//\\\/\
+\///\////\/\\///\\/\
+/\/\/\///\\/\\/\//\/
+Case #368:
+\////\//\\\\//\\////\\\/
+/////////\\\//\\////////
+/\\\/\\///\\///\//\/\\\\
+\/\\\/\\//\\\//\//\\/\\\
+Case #369:
+/\\//\/\\//\\/
+\/\/////\///\\
+//\\///\/\///\
+//\\\//\/\\/\/
+Case #370:
+IMPOSSIBLE
+Case #371:
+/
+/
+/
+/
+/
+/
+\
+\
+/
+\
+\
+\
+\
+/
+\
+\
+\
+/
+\
+/
+\
+\
+Case #372:
+/\//\//\/\\/\//\
+\/////////\/\///
+\\\////////////\
+////////////////
+//\\/////////\//
+/\/\\/\/\/\//\/\
+Case #373:
+\//\\//\//
+\///\/////
+\\/////\\\
+\\\/////\\
+/////////\
+\\\///////
+//////////
+//\/\/////
+//\/\\/\\\
+//\/\\\//\
+Case #374:
+IMPOSSIBLE
+Case #375:
+IMPOSSIBLE
+Case #376:
+IMPOSSIBLE
+Case #377:
+\//\\
+////\
+/////
+\///\
+\\///
+/\\//
+\/\//
+Case #378:
+\/\/
+\\//
+/\\\
+Case #379:
+/\//\/\
+\//////
+///////
+///////
+\///\\\
+/////\\
+\//////
+/////\\
+\/////\
+\\/////
+///////
+\\///\\
+\\\/\//
+/\\/\/\
+Case #380:
+IMPOSSIBLE
+Case #381:
+//\/\
+\\//\
+/////
+//\//
+//\\\
+//\\\
+\\//\
+//\\/
+///\\
+\///\
+/////
+\///\
+/////
+\////
+/////
+\/\\\
+/////
+\//\\
+\/\//
+\/\//
+Case #382:
+//\\\\\/\//////\\\\//////\//\\\/\
+///\\\\/\///////\\\//////\////\/\
+\//\\\\\//\\\\//\\\//////\\///\/\
+Case #383:
+\//\\//\\\\/\\\\/\/\
+\///\///\\\/\\\\/\/\
+///\/////\\/\\\\/\\/
+\//\\/\/\/\\/\\\/\\\
+///\\/\/\\/\\//\\///
+Case #384:
+IMPOSSIBLE
+Case #385:
+///\/
+///\/
+//\/\
+//\\/
+///\\
+\///\
+\\///
+\\\/\
+/////
+\\\/\
+/////
+////\
+/////
+\///\
+\\///
+\\\/\
+//\/\
+\\//\
+/\//\
+/\//\
+Case #386:
+IMPOSSIBLE
+Case #387:
+\\/\\//\/\\/\//\/\\/
+////\/////\/\/////\\
+/////////\//\\//////
+\///\/\//\//\\\/\/\\
+/\//\/\//\//\\\/\\/\
+Case #388:
+IMPOSSIBLE
+Case #389:
+//\//
+\\///
+Case #390:
+IMPOSSIBLE
+Case #391:
+\/\////\\/\\\/
+\/\/////\\/\\\
+\/\//////\\/\\
+\/\///////\\//
+///////////\\\
+\/////////////
+/\/\/\/\/\///\
+Case #392:
+/\/\/
+/\\//
+Case #393:
+IMPOSSIBLE
+Case #394:
+//\/\
+\\///
+/////
+///\\
+\/\//
+Case #395:
+IMPOSSIBLE
+Case #396:
+///\\\/\\//\\\///\\/
+////\\/\\//\\\//////
+\\//\\\/\/\/\\//////
+\\//\\\\//\/\\\/\\\\
+\\//\\\\//\/\\\\////
+Case #397:
+IMPOSSIBLE
+Case #398:
+/\\
+\/\
+///
+\/\
+///
+\/\
+\\/
+//\
+\\/
+//\
+///
+\/\
+///
+\/\
+///
+\/\
+\\/
+///
+///
+\\\
+/\\
+\/\
+\\/
+//\
+/\/
+Case #399:
+//\/\\/\/\/\/\\\///\\/\/\/\//\\/
+\\///\/\/\/\/\\\//\/\\////////\/
+/\\/\/\//\\/\/\\//\\//\/\//\/\//
+Case #400:
+\//\/\//\//\/\\/\\\
+/\\/\/\\/\\/\/\\//\
+Case #401:
+\\\\\/\/\/\///\\\\\/\///\\/\\\\/\//\\//\\\////////\//////\//\\\/\/\\/\\\/\//\\\/\/\/\//\//\/\//\\/\\
+Case #402:
+//\
+/\/
+/\\
+\/\
+/\/
+/\\
+\//
+/\\
+\/\
+//\
+///
+\/\
+///
+\/\
+///
+\/\
+\\/
+/\/
+\/\
+\\/
+//\
+\\/
+\\/
+//\
+\\/
+\\/
+//\
+\\/
+\\/
+Case #403:
+///
+///
+\\\
+///
+\\\
+///
+\\\
+//\
+\\/
+/\\
+Case #404:
+/\
+\/
+\\
+/\
+/\
+/\
+\/
+/\
+\/
+\\
+\\
+\\
+/\
+\/
+\\
+/\
+\/
+//
+//
+//
+/\
+\/
+//
+/\
+Case #405:
+///////\\/\//\\/\\\\\\\\//\\\\///
+\\\\\\\/\/\///\/\\\\\\\\/\/\\\\\\
+////\\\\//\\//\/\\\\\\\\/\\/////\
+Case #406:
+IMPOSSIBLE
+Case #407:
+\//
+//\
+\\/
+///
+\\\
+\\\
+//\
+Case #408:
+/\\\//////
+/\\\/////\
+/\\\/////\
+/\\\//////
+/\\\//////
+\/\\//////
+\\/\//////
+//////////
+/\///\\\\\
+/\\/\//\\\
+Case #409:
+IMPOSSIBLE
+Case #410:
+///\
+Case #411:
+IMPOSSIBLE
+Case #412:
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+Case #413:
+\///\
+\//\/
+\//\\
+\//\\
+\/\/\
+//\\/
+///\\
+\///\
+\\///
+\\\//
+/////
+/////
+\\\\\
+\\\\\
+/////
+/\\\\
+\/\\\
+\/\\\
+Case #414:
+\///\\\///\\\\/\\///
+\/\\/\\////\\\/\\///
+\/\\\/\/////\\/\\///
+\/\\\/\\////\\/\\///
+\/\\\/\\\///\\/\\\\\
+Case #415:
+\\/\//
+\\/\\\
+\\\/\\
+/////\
+//////
+\\////
+\\\///
+//////
+//\\\\
+Case #416:
+//\\\//\\/\\\\/\/\
+\\/\\///\/\\\\/\/\
+/\/\\\/\/\/\\\/\\/
+/\/\\\/\/\/\\\\/\\
+Case #417:
+\/\///\/\////
+//\//////\\\\
+//\///////\\\
+\\///\///////
+/////\\//////
+/\///\\\////\
+Case #418:
+\\\
+\\\
+//\
+///
+\/\
+//\
+\\/
+//\
+///
+\//
+\\\
+\\\
+//\
+/\/
+/\\
+/\\
+\/\
+///
+\/\
+\\/
+\\/
+/\/
+\/\
+\\/
+//\
+\\/
+/\/
+\//
+//\
+///
+\//
+/\\
+\/\
+Case #419:
+\/\/\\\/\/
+/////\\/\\
+\/////\\//
+\\/////\\\
+////////\\
+\\////////
+//////////
+\\/////\\\
+/////////\
+/\/\/\///\
+Case #420:
+//\
+///
+\//
+///
+///
+\\\
+Case #421:
+\//\\///\\\\\\
+\///\////\\\\\
+\\//\/////////
+/////////\\\\\
+/\\//////////\
+/\\\/////////\
+/\\\\/\//////\
+Case #422:
+////\//\//\\/\/\\\//
+//\\/\\////\\////\/\
+\\/\\/\\\/\/\\//\//\
+Case #423:
+\/\///\\/\//\/
+\\/////\/\/\/\
+////\//\\//\\/
+Case #424:
+IMPOSSIBLE
+Case #425:
+///\\//\/\/\/\/\
+/\\/\//\\/\//\/\
+Case #426:
+\\///\/\/\\//\/\
+///\\/////\/////
+\\\/\\//////////
+\\\/\\\/////////
+\\\/\\\\/////\\\
+\\\/\\\\\/\//\\\
+Case #427:
+//\/\/\//\\/\/
+\\//\/\///\/\\
+//////////////
+////////////\\
+/////////\////
+\/\//////\\/\\
+//\\/\///\\\/\
+Case #428:
+IMPOSSIBLE
+Case #429:
+/\/\/\/
+/\/\/\/
+\//\/\/
+\\\////
+///////
+///////
+///\\\\
+\///\\\
+/////\\
+\//////
+\\///\\
+//\/\//
+//\/\//
+\\/\/\\
+Case #430:
+IMPOSSIBLE
+Case #431:
+\\\///\///\\\\/\\\/\
+//\///\////\\\/\\\/\
+//\/////////\\/\\\\/
+\\////\\///\////////
+\\\\/\/\\//\/\/\\\\\
+Case #432:
+///////\\\\\//
+///////\\\\\//
+///////\\\\\//
+///////\\\\\//
+///////\\\\\//
+///////\\\\\//
+///////\\\\\//
+Case #433:
+/\//\//\//
+/\//\///\\
+/\///////\
+\/////////
+\\/\//////
+\\/\\/////
+\\/\\\////
+\\/\\\\\\\
+///\\\\\\\
+Case #434:
+////\\\/\\/\///\\///
+\\\\/\\/\\/\////\/\\
+\\\\/\\/\\/\///\////
+//\\/\\\/\\////\\///
+//\\/\\\/\\\///\\\\\
+Case #435:
+IMPOSSIBLE
+Case #436:
+IMPOSSIBLE
+Case #437:
+\/\//\\/\
+\/\///\/\
+\\///////
+\\\//////
+\\\\///\\
+////////\
+\\\\/////
+\\\\\///\
+////\\/\/
+///\/\/\\
+Case #438:
+////
+////
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+Case #439:
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+\\\\
+Case #440:
+\///\
+////\
+/////
+////\
+\\///
+//\//
+//\\\
+\\/\\
+////\
+/////
+\///\
+\\///
+\\\//
+///\\
+\\\//
+//\//
+\\/\\
+\\\//
+\\\/\
+\\\/\
+Case #441:
+\\//\/\\\//////\/\\/\\//\//\\//\/
+\\\\///\\/\\\\\//////\//\/\///\/\
+//\\\/\/\\/\\\\\//\/\//\//\///\\/
+Case #442:
+IMPOSSIBLE
+Case #443:
+//\\\/
+\\/\\/
+////\/
+\\///\
+//////
+\\////
+//////
+//////
+\/\\\\
+//////
+\//\\\
+\/\///
+\/\\\\
+Case #444:
+IMPOSSIBLE
+Case #445:
+///
+//\
+/\/
+/\\
+/\\
+/\\
+/\\
+\//
+\\\
+\\\
+\\\
+//\
+\\/
+/\\
+\/\
+\\/
+///
+///
+\\\
+\\\
+///
+\\\
+///
+/\\
+\//
+\\\
+\\\
+\\\
+///
+\\\
+\\\
+//\
+//\
+Case #446:
+IMPOSSIBLE
+Case #447:
+IMPOSSIBLE
+Case #448:
+//\\/
+///\\
+\///\
+/////
+\///\
+\\///
+\\\/\
+/\\\/
+\/\\/
+Case #449:
+////\\\///\///
+\\\\/\\///////
+//////\///\\\\
+///////////\\\
+//////////\/\\
+\\////////\\//
+/\\/\/\///\\//
+Case #450:
+\\//\//\/
+\\//\////
+\\///////
+/////////
+/////\\\\
+\////////
+\\///////
+\\\/\\\\\
+//\\/////
+/\/\\\\\\
+Case #451:
+\\//\//\\\/\/\
+\\//\///\\/\\/
+/\///////\\/\\
+\/////////\\//
+/////////\//\\
+\/\/\////\///\
+\/\/\\///\\//\
+Case #452:
+IMPOSSIBLE
+Case #453:
+//\/\\/
+\\///\/
+\\\///\
+///////
+//////\
+\\/////
+//////\
+\\/////
+//////\
+///////
+\//////
+/\/\/\\
+/\/\\//
+/\/\\\\
+Case #454:
+\\\\////\\\/\/
+///\/////\\/\\
+///\//////\/\\
+///\//////////
+//////\/////\\
+/\////\\/\///\
+/\\///\\/\\/\/
+Case #455:
+\/\///
+//\/\\
+\\////
+////\\
+//////
+\///\\
+\\///\
+//////
+\\///\
+//////
+\\///\
+\\\///
+//////
+\\\/\\
+//\\//
+//\\/\
+Case #456:
+IMPOSSIBLE
+Case #457:
+\\////\/\\/\/\\//\\/
+\\//\\///\/\/\\///\\
+\\\\/\\/\/////\\///\
+///\/\\/\\//////\//\
+/\\//\\/\\\/\///\//\
+Case #458:
+\/\//
+\\/\\
+////\
+/////
+\/\/\
+//\\/
+\\/\\
+////\
+\\///
+////\
+/////
+\///\
+/////
+\///\
+/////
+\////
+///\\
+\///\
+\\//\
+\\//\
+Case #459:
+\\\
+\\\
+//\
+//\
+//\
+//\
+//\
+///
+\//
+\\\
+///
+\\\
+\\\
+\\\
+\\\
+\\\
+\\\
+///
+///
+///
+///
+\\\
+\\\
+\\\
+//\
+\\/
+\\/
+\\/
+\\/
+\\/
+//\
+\\/
+\\\
+Case #460:
+//\\//\/////\\\/\\////\\/
+\\/\//\////\/\\/\\/////\\
+\\\///\////\\/\\/\//\/\//
+///\\\/////\\\///\//\/\//
+Case #461:
+/\/\//\//\/\\/\/\/\\
+\//\//\/////\/\/\\//
+////////////////////
+\\/\\///\///\/////\\
+//\/\\//\\//\\///\//
+Case #462:
+/\/\//
+/\\///
+/\\\\\
+\/\\\\
+\\/\\\
+//////
+//////
+\/\\\\
+\\/\\\
+//////
+\\/\\\
+\\\/\\
+/////\
+\\\///
+//////
+\\\/\\
+Case #463:
+IMPOSSIBLE
+Case #464:
+\//\/\//\/\//
+\//\/\////\//
+\////////\///
+\\///////\\\\
+\\\//////\\\\
+///\/////\\\\
+///\/////\\\\
+Case #465:
+/\/\
+\///
+///\
+\///
+\\//
+/\/\
+\/\/
+Case #466:
+///////
+\\\\\\\
+////\\\
+\\\\/\\
+//////\
+///////
+///////
+///////
+\///\\\
+\\///\\
+//////\
+\\////\
+//////\
+/\////\
+Case #467:
+\\\\\\\\/
+////\\\\/
+/////\\\/
+//////\\/
+\\/////\/
+/////////
+\\/////\\
+//\////\\
+//\\///\\
+//\\///\\
+Case #468:
+\\\//\/\/\\\/\/\/\//\/\\\
+//\//\/\\/\\/\/\/\///////
+////\/\/\\/\/\\///////\\\
+\///\/\\/\/\/\\\/\/\//\\\
+Case #469:
+\\
+/\
+/\
+/\
+\/
+/\
+/\
+/\
+\/
+/\
+/\
+\/
+\\
+//
+\\
+//
+/\
+\/
+/\
+\/
+Case #470:
+\\\\\///\\
+\\\\\///\\
+//\\\///\\
+\\/\\/////
+\\\/\///\\
+\\\\/////\
+//////////
+\\\\///\/\
+\\\\\//\\/
+///////\\/
+Case #471:
+\///\/\/\\/\//\/\\/\\/\\/\/\\\\//
+\////////\\/\\///\\/\\/\\/////\\\
+\\\/\/\//\\\/\\/\/\\//\//\///\//\
+Case #472:
+/\\\/
+\/\\/
+Case #473:
+/\\
+\/\
+///
+\/\
+//\
+//\
+\\/
+//\
+///
+\//
+//\
+///
+\/\
+///
+\//
+\\\
+///
+Case #474:
+IMPOSSIBLE
+Case #475:
+/\/////
+/\/\\\\
+/\/\\\\
+\///\\\
+/////\\
+\/////\
+///////
+\/////\
+\\/////
+\\\////
+\\\\//\
+///\/\/
+/////\/
+/\///\/
+Case #476:
+\\//\/\
+\\//\/\
+/\/////
+\//////
+/////\\
+\/////\
+///////
+\//////
+///////
+\/\////
+\/\////
+\/\///\
+//\//\/
+Case #477:
+/\
+/\
+\/
+/\
+\/
+/\
+/\
+\/
+/\
+\/
+//
+//
+\\
+/\
+\/
+/\
+\/
+//
+\\
+/\
+\/
+\\
+//
+/\
+/\
+\/
+/\
+\/
+/\
+\/
+//
+/\
+\/
+\/
+/\
+\/
+/\
+\/
+//
+//
+/\
+\/
+/\
+\/
+\\
+//
+/\
+\/
+\\
+\\
+Case #478:
+\//\\/\\/\\\\\/\
+\/\/\/\\/\\\\\/\
+\/\\///\\/\\\\/\
+\/\\\//\\\/\\\\/
+\/\\\//\\\\/////
+\/\\\//\\\\\\\\\
+Case #479:
+/\///
+/\//\
+/\///
+\///\
+\\///
+\\\/\
+/////
+/////
+///\\
+\///\
+\\/\/
+\\/\/
+/\/\/
+\//\/
+\//\/
+\//\/
+\//\/
+\//\/
+///\/
+///\/
+Case #480:
+IMPOSSIBLE
+Case #481:
+\\\\\\\\\/
+/////\\\\/
+//////\\\\
+///////\\\
+\\\/////\\
+/////////\
+\\\///////
+/\\\/////\
+\/\\\////\
+//\\\\///\
+Case #482:
+\///\//\\\/\\\//\/\\\/\\\//\\\\\/\\/\///\/\\/\//\\
+Case #483:
+\\\\\\\///
+//\\\\\///
+///\\\\///
+\///\\\///
+\\///\\//\
+\\\///\///
+/////////\
+////\////\
+\\//\\///\
+\\//\\///\
+Case #484:
+\\
+//
+\\
+\\
+/\
+\/
+\\
+Case #485:
+IMPOSSIBLE
+Case #486:
+\///
+///\
+////
+///\
+\///
+////
+\/\\
+\\/\
+////
+/\/\
+Case #487:
+\\/\/
+\\\//
+/\\\\
+\/\\\
+\\/\\
+\\\/\
+\\\\/
+\\\\/
+///\/
+\\\//
+Case #488:
+//\\\
+///\\
+\////
+\\/\\
+/\\//
+\/\\\
+//\\\
+Case #489:
+\/
+//
+\\
+\\
+//
+Case #490:
+\\///\\/
+//////\/
+///////\
+\\\/////
+////////
+//////\\
+\\//////
+////////
+/\/\////
+/\/\//\\
+Case #491:
+IMPOSSIBLE
+Case #492:
+//\/
+\\//
+////
+////
+////
+//\\
+///\
+\///
+///\
+\///
+\\//
+\\//
+\\/\
+////
+\\//
+///\
+Case #493:
+\\//\
+/\//\
+/\//\
+\///\
+////\
+/////
+/////
+\\/\\
+////\
+/////
+\///\
+/////
+\///\
+\\///
+/////
+\\//\
+\\//\
+/\//\
+\///\
+\///\
+Case #494:
+\\\\
+\\\\
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+////
+////
+\\\\
+\\\\
+Case #495:
+///\///\////\\/\\\/\\\\//\\/\
+/\\//////\\\/\\/\\\///////\\/
+\/\\\\/\\/\\\/\\///////\//\\\
+Case #496:
+/\\\/\/\//\/\/\\\/\/\\\//
+\/\\/\/\/\/////\\/\/\\\/\
+//\\\////\\////\\\///\\/\
+//\\\\///\\\///\\\\/\//\/
+Case #497:
+/\/\///\/\\\//\\
+\//\//////\\//\\
+\\\//////\/\////
+/////////\\///\\
+\\\\/\///\\\////
+/////\///\\\\//\
+Case #498:
+IMPOSSIBLE
+Case #499:
+/\\\//\///
+\/\\//\///
+\\/\//\/\\
+\\\//////\
+//////////
+/////////\
+\\\/////\/
+////////\\
+//\/////\\
+//\\////\\
+Case #500:
+\\\//
+\\\\\
+/////
+/////
+/////
+////\
+/////
+\\\//
+\\\\\
+/////
+/////
+/////
+//\\\
+/////
+\////
+/////
+/\\\\
+\///\
+\//\/
+\//\\
diff --git a/codejam_2016/src/y2016round3/C-small-practice.in b/codejam_2016/src/y2016round3/C-small-practice.in
new file mode 100644
index 0000000..1ba893e
--- /dev/null
+++ b/codejam_2016/src/y2016round3/C-small-practice.in
@@ -0,0 +1,201 @@
+100
+1 1
+1 4 3 2
+1 3
+1 8 2 7 3 4 5 6
+2 2
+8 1 4 5 2 3 7 6
+1 1
+1 3 2 4
+10 1
+20 19 16 15 18 1 3 4 7 6 2 17 10 9 21 22 12 11 14 13 5 8
+6 1
+13 12 4 11 14 1 3 2 10 9 7 6 5 8
+1 4
+7 8 2 9 3 6 10 1 5 4
+8 2
+4 7 8 17 19 18 10 11 2 3 15 14 6 5 1 20 16 9 12 13
+1 8
+13 14 6 3 4 5 1 2 18 17 10 11 7 12 16 15 8 9
+1 16
+5 30 11 24 29 6 2 33 18 17 4 31 21 14 28 7 9 26 32 3 8 27 13 22 15 20 10 25 19 16 12 23 1 34
+8 2
+9 12 17 4 5 16 3 18 11 10 2 19 8 13 15 6 14 7 20 1
+3 2
+7 10 4 5 9 8 6 3 2 1
+2 2
+4 1 6 7 5 8 3 2
+8 2
+2 19 11 12 4 5 20 1 15 8 18 17 10 13 16 7 14 9 3 6
+1 5
+9 2 4 3 5 8 12 1 6 7 10 11
+8 2
+18 5 3 20 12 13 4 19 16 15 6 17 11 14 1 2 8 9 10 7
+3 5
+14 11 13 12 1 10 5 6 9 4 3 2 7 8 16 15
+4 4
+3 6 1 2 8 7 16 15 14 9 11 10 12 13 5 4
+2 8
+3 16 19 2 13 6 1 20 14 5 11 12 15 4 18 17 10 7 8 9
+4 2
+5 6 11 10 12 1 3 4 7 8 2 9
+1 2
+5 6 2 1 4 3
+2 4
+6 11 8 7 3 2 4 5 1 12 9 10
+16 1
+27 26 13 12 2 1 18 21 7 34 24 25 19 20 3 4 16 17 29 22 28 23 10 15 11 14 9 8 5 6 32 33 30 31
+1 13
+2 15 19 23 26 7 16 18 24 10 6 17 22 25 8 27 1 14 11 5 9 3 13 20 28 21 4 12
+4 1
+10 7 5 6 9 8 2 1 3 4
+3 5
+1 4 7 6 2 3 9 10 15 16 14 11 13 12 5 8
+4 1
+2 9 3 4 5 8 10 1 7 6
+8 2
+14 11 16 7 4 3 1 20 19 2 18 5 6 17 8 15 13 12 10 9
+16 1
+28 7 19 16 22 23 6 29 18 17 20 15 33 34 25 24 14 21 12 13 8 27 3 32 30 5 4 31 10 11 9 26 2 1
+1 14
+8 11 21 18 27 26 17 16 24 25 4 5 30 29 1 2 15 12 6 7 23 22 20 19 13 14 3 28 9 10
+2 4
+2 7 3 4 10 1 12 11 9 8 6 5
+2 1
+4 3 2 1 6 5
+8 2
+4 3 6 15 12 13 10 9 1 20 17 16 14 11 5 2 8 7 18 19
+8 2
+20 19 17 6 10 11 7 16 2 3 14 13 18 5 15 8 12 9 4 1
+2 4
+8 7 1 12 9 10 11 4 5 6 3 2
+3 5
+13 14 3 4 11 12 8 7 1 16 15 2 9 10 6 5
+1 13
+14 15 4 3 11 12 2 25 27 26 19 20 7 8 1 28 13 16 6 21 10 17 23 24 18 9 5 22
+2 8
+7 12 18 19 10 9 8 11 20 17 2 3 6 13 4 1 5 14 15 16
+1 11
+13 10 18 19 1 24 11 12 7 6 16 9 20 21 5 4 22 3 23 2 15 14 8 17
+13 1
+16 13 6 25 24 7 20 19 21 10 22 23 27 28 8 9 12 17 5 26 1 2 18 11 3 4 14 15
+4 4
+9 10 1 2 14 13 16 3 7 6 8 15 12 11 4 5
+3 1
+3 2 8 1 6 7 4 5
+8 2
+18 5 13 14 17 6 16 7 15 8 4 1 19 20 12 9 10 11 3 2
+2 8
+13 6 17 20 9 12 1 2 3 16 8 7 18 19 4 15 10 11 14 5
+3 1
+4 5 2 7 3 6 8 1
+1 3
+5 8 6 7 1 2 4 3
+16 1
+16 15 8 7 22 21 4 3 5 6 13 14 23 24 26 9 31 32 29 30 18 17 28 27 34 33 11 10 2 1 19 20 12 25
+3 5
+2 1 7 4 16 3 13 14 8 9 6 5 11 10 12 15
+4 2
+11 2 8 5 9 4 6 7 12 1 3 10
+8 2
+2 3 10 13 11 12 4 1 20 17 19 18 16 7 14 9 8 15 6 5
+4 4
+1 16 4 13 3 14 2 15 11 6 7 10 5 12 8 9
+2 2
+4 5 7 8 2 1 3 6
+3 5
+13 12 16 11 9 8 1 2 4 5 10 3 14 15 7 6
+2 4
+7 8 11 6 12 3 1 2 9 10 5 4
+4 3
+8 1 11 6 10 7 3 4 13 14 5 2 12 9
+8 2
+12 13 16 7 8 15 17 6 5 18 2 19 14 11 1 20 9 10 4 3
+2 8
+14 5 16 17 11 8 13 6 2 19 18 15 3 4 7 12 20 1 9 10
+2 8
+8 7 9 12 18 19 10 11 15 4 13 6 3 16 14 5 20 17 1 2
+2 7
+15 12 14 13 18 1 10 11 3 2 7 6 9 8 16 17 4 5
+2 8
+5 14 13 6 1 20 4 15 7 10 9 8 17 18 2 19 11 12 16 3
+8 2
+5 4 20 19 9 10 11 12 2 3 8 15 17 16 18 1 7 6 14 13
+8 2
+17 6 15 16 11 14 13 12 5 18 3 20 2 1 19 4 8 9 7 10
+2 3
+7 8 2 3 1 4 10 9 6 5
+1 4
+9 10 3 8 7 6 1 2 5 4
+8 1
+17 2 18 1 4 5 12 9 15 6 7 8 14 13 10 11 3 16
+2 1
+4 3 1 2 5 6
+4 1
+10 8 9 1 6 4 3 5 2 7
+1 8
+2 1 7 8 9 12 11 10 14 13 18 15 16 17 5 6 4 3
+1 3
+5 6 7 2 4 3 1 8
+8 2
+16 17 19 20 2 3 9 8 4 7 15 18 12 11 6 5 1 14 10 13
+8 2
+17 16 6 7 9 12 3 2 14 13 15 8 19 18 4 5 20 1 11 10
+1 16
+7 8 26 9 5 30 15 16 22 13 32 31 18 17 20 19 21 14 28 29 34 1 23 12 11 24 2 33 3 4 25 10 27 6
+1 4
+4 5 2 7 6 3 8 1 9 10
+2 4
+6 7 4 5 1 2 3 12 11 10 8 9
+2 8
+18 19 11 10 13 6 1 2 9 12 3 16 7 8 15 4 17 20 5 14
+1 14
+13 18 7 24 8 23 5 26 25 6 14 17 10 21 11 20 12 19 4 27 15 16 28 3 22 9 2 29 1 30
+4 2
+7 10 2 3 1 4 8 9 5 12 11 6
+2 4
+2 11 6 5 12 1 10 9 4 3 7 8
+3 2
+3 4 8 9 6 5 2 7 1 10
+4 4
+7 8 11 2 12 13 10 9 4 5 15 14 16 1 3 6
+1 3
+5 1 7 8 6 4 2 3
+2 4
+4 7 5 6 3 12 10 11 9 8 1 2
+3 2
+9 4 3 2 6 5 7 8 10 1
+8 1
+6 15 7 14 17 4 1 2 5 16 9 12 3 18 11 10 8 13
+1 1
+4 1 3 2
+3 1
+2 1 7 8 5 6 3 4
+16 1
+18 19 9 8 7 6 12 13 30 31 10 27 2 1 11 26 14 21 34 33 3 32 15 20 22 23 17 16 4 5 29 28 25 24
+4 2
+5 4 9 8 12 1 11 2 7 6 3 10
+2 4
+6 7 3 4 1 12 2 5 8 9 10 11
+2 8
+11 14 20 19 8 9 1 18 12 13 2 17 16 3 6 5 7 10 15 4
+3 3
+3 12 8 9 1 2 6 7 10 11 4 5
+1 2
+1 2 5 6 4 3
+3 2
+2 3 10 5 7 8 9 6 4 1
+8 1
+18 1 7 6 10 9 8 11 17 16 3 2 12 13 14 15 4 5
+8 1
+16 5 3 4 18 17 10 9 13 8 14 7 6 15 1 2 11 12
+2 4
+4 5 9 8 1 12 11 10 6 7 2 3
+5 3
+2 5 7 16 10 13 6 1 12 11 4 3 15 8 9 14
+2 8
+20 19 14 13 1 18 3 16 4 15 9 12 10 11 6 7 17 2 5 8
+8 2
+10 11 8 7 4 19 2 1 14 15 12 9 3 20 17 6 16 13 5 18
+6 2
+10 11 14 15 6 7 13 8 3 2 1 4 5 16 9 12
diff --git a/codejam_2016/src/y2016round3/C-small-practice.out b/codejam_2016/src/y2016round3/C-small-practice.out
new file mode 100644
index 0000000..670cdf3
--- /dev/null
+++ b/codejam_2016/src/y2016round3/C-small-practice.out
@@ -0,0 +1,467 @@
+Case #1:
+/
+Case #2:
+//\
+Case #3:
+/\
+\/
+Case #4:
+IMPOSSIBLE
+Case #5:
+IMPOSSIBLE
+Case #6:
+IMPOSSIBLE
+Case #7:
+//\\
+Case #8:
+/\
+\/
+//
+\\
+\\
+\\
+/\
+\/
+Case #9:
+IMPOSSIBLE
+Case #10:
+////////////////
+Case #11:
+//
+//
+//
+//
+//
+//
+//
+//
+Case #12:
+IMPOSSIBLE
+Case #13:
+\\
+\\
+Case #14:
+//
+//
+\\
+/\
+/\
+/\
+/\
+/\
+Case #15:
+/\\//
+Case #16:
+\/
+\/
+\/
+\/
+\/
+//
+\\
+\\
+Case #17:
+\\/\\
+/\\//
+/\\\\
+Case #18:
+\/\\
+///\
+\/\/
+\/\\
+Case #19:
+/////\\\
+/\\\\//\
+Case #20:
+//
+\\
+//
+/\
+Case #21:
+\/
+Case #22:
+/\/\
+/\/\
+Case #23:
+IMPOSSIBLE
+Case #24:
+IMPOSSIBLE
+Case #25:
+IMPOSSIBLE
+Case #26:
+\\///
+/\/\\
+/\\/\
+Case #27:
+/
+/
+\
+\
+Case #28:
+//
+/\
+/\
+/\
+/\
+\/
+\/
+\\
+Case #29:
+\
+/
+/
+/
+/
+/
+/
+/
+/
+\
+/
+\
+/
+/
+/
+/
+Case #30:
+IMPOSSIBLE
+Case #31:
+\\\/
+//\\
+Case #32:
+\
+/
+Case #33:
+//
+\\
+/\
+\/
+//
+/\
+\/
+\\
+Case #34:
+\\
+/\
+/\
+/\
+/\
+\/
+\/
+//
+Case #35:
+/\//
+/\/\
+Case #36:
+//\/\
+/////
+\/\/\
+Case #37:
+/\\/\\\/\\\//
+Case #38:
+\\//////
+\\/\\\\\
+Case #39:
+///\/\///\\
+Case #40:
+\
+/
+\
+\
+\
+\
+/
+\
+\
+/
+/
+/
+/
+Case #41:
+\//\
+\///
+\\/\
+/\/\
+Case #42:
+/
+\
+/
+Case #43:
+\\
+/\
+/\
+/\
+/\
+\/
+\/
+//
+Case #44:
+\////\\/
+\\\\\///
+Case #45:
+/
+/
+/
+Case #46:
+IMPOSSIBLE
+Case #47:
+\
+/
+\
+/
+\
+/
+\
+/
+/
+\
+\
+/
+\
+/
+\
+/
+Case #48:
+\//\\
+\///\
+\\/\/
+Case #49:
+//
+//
+//
+//
+Case #50:
+\\
+\\
+//
+/\
+/\
+/\
+/\
+/\
+Case #51:
+////
+////
+////
+////
+Case #52:
+\/
+//
+Case #53:
+\/\\/
+\\/\\
+/\\//
+Case #54:
+IMPOSSIBLE
+Case #55:
+IMPOSSIBLE
+Case #56:
+//
+/\
+/\
+/\
+/\
+\/
+\/
+\\
+Case #57:
+//\/////
+//\\\\\\
+Case #58:
+\////\\/
+\\\\\///
+Case #59:
+/\/\/\/
+\//\\/\
+Case #60:
+/////\\\
+/\\\\//\
+Case #61:
+\\
+//
+/\
+\/
+/\
+/\
+\/
+/\
+Case #62:
+\/
+\/
+\/
+\/
+\/
+//
+\\
+\\
+Case #63:
+\\/
+/\/
+Case #64:
+\//\
+Case #65:
+/
+/
+/
+\
+\
+/
+\
+\
+Case #66:
+\
+/
+Case #67:
+IMPOSSIBLE
+Case #68:
+IMPOSSIBLE
+Case #69:
+//\
+Case #70:
+IMPOSSIBLE
+Case #71:
+/\
+\/
+/\
+\/
+/\
+/\
+\/
+//
+Case #72:
+//\//\\///////\/
+Case #73:
+\\\\
+Case #74:
+\//\
+\/\/
+Case #75:
+\////\\/
+\\\\\///
+Case #76:
+//////////////
+Case #77:
+\\
+\\
+\\
+\\
+Case #78:
+//\/
+/\/\
+Case #79:
+//
+\\
+//
+Case #80:
+//\\
+\\/\
+////
+\\/\
+Case #81:
+IMPOSSIBLE
+Case #82:
+\///
+\/\\
+Case #83:
+/\
+/\
+\/
+Case #84:
+\
+\
+\
+\
+\
+\
+\
+\
+Case #85:
+/
+Case #86:
+\
+/
+\
+Case #87:
+\
+/
+/
+\
+/
+\
+/
+\
+\
+\
+/
+\
+/
+/
+/
+\
+Case #88:
+//
+//
+/\
+\/
+Case #89:
+/\\/
+\/\/
+Case #90:
+\\\\\/\\
+//////\\
+Case #91:
+\//
+\/\
+/\/
+Case #92:
+\/
+Case #93:
+\\
+\\
+\\
+Case #94:
+/
+\
+/
+\
+/
+\
+/
+/
+Case #95:
+\
+/
+\
+\
+\
+\
+\
+/
+Case #96:
+/\/\
+\/\/
+Case #97:
+\\\
+\\\
+\\\
+\\\
+\\\
+Case #98:
+\\\\\\//
+/////\//
+Case #99:
+\/
+\/
+\/
+\/
+\/
+\\
+//
+//
+Case #100:
+\\
+\\
+/\
+\/
+\\
+\\
diff --git a/codejam_2016/src/y2016round3/D-large-practice.in b/codejam_2016/src/y2016round3/D-large-practice.in
new file mode 100644
index 0000000..db812ff
--- /dev/null
+++ b/codejam_2016/src/y2016round3/D-large-practice.in
@@ -0,0 +1,2155 @@
+100
+2
+11
+10
+2
+10
+00
+3
+000
+000
+000
+1
+1
+3
+000
+110
+000
+12
+000000000000
+000000000000
+000000000001
+000000000000
+000000000000
+000000000000
+000000000000
+000000000000
+000000000000
+000000000000
+000000000000
+000000001000
+23
+00000000100000000000000
+00000000001000100000000
+00000000000000000001000
+01000000000000000000000
+00000000000000001000100
+00100000000001000110001
+00000000100000000000000
+00010000010010000000000
+11001000000100000000000
+00000000000101000000000
+00000000000000010000000
+00000000000000010000000
+00000100011000000000000
+00000000100000000000000
+00000000100000010000000
+00000001000000000010000
+00000010000100000010110
+10100000000000000000100
+00001000000000000000000
+00000000000000010000000
+00100000000000000000100
+00000100000000000001000
+00100000000000000000000
+12
+001000000000
+000100100000
+001000000000
+100100100001
+000000000000
+010001101000
+001000000000
+001000000000
+001000000000
+010000100011
+010010000110
+001000000000
+23
+00000000000000000000000
+00001000000000000010000
+00000010001000000100000
+00000000000000000000000
+00000100000000000000000
+00000000000000000000001
+10000000000000000000000
+00000000000000000000000
+00000000010001000000001
+00000100000000000000100
+00000001000000000000000
+00000000010000000000000
+00100000100000000000000
+00000000000000000000010
+00000000000000000000000
+10000000000000100000000
+00000000000000000001000
+00000000001000000000000
+00001001000000000000000
+00000010000000000000000
+00010000000000000000000
+00010000100000000000000
+00000000000000101000000
+25
+0000000001000000000000000
+0000100000101000000000000
+0000000100000000000000000
+0000100010100000010000000
+0000100000000000010001000
+0000110010100100010000010
+1000000000000000000000000
+0000000100000000000000000
+0010000000000000000000000
+0000100000000000000000010
+0000010010101000010000010
+0000000000000000000010101
+0000001000000000000000000
+1000000000000000000000000
+0000010000000000011000000
+0000010000000100001001000
+0000000001000000000100000
+0110000000010000000000000
+0000000010000000000000000
+1000000000000000000000000
+0000000000000000000000000
+0000010000001000010001000
+0000000000010010000000000
+1000001000000000000000000
+0000000001000000000000000
+25
+0000000100000000000010000
+0000001000000000000000001
+0000000000000000000000000
+0000000000010000000001000
+0100000001000000000000000
+0000000000000100000000000
+0110000010000000000000000
+0000000000000000000000000
+0000000000000000010000010
+0000000000000000000000000
+0000000000000000000101000
+0000000100000000000000000
+0000000000000001000000000
+0000000000000000000000000
+0000001000000000000000000
+0000000000000000000000000
+0000000000000000101000000
+0000000000000001000000000
+0000000000000000000010000
+0000000000000100000000000
+0000000000000000000000000
+0000000000000000000001000
+0000000010000000000000000
+0000001000000000000000000
+0000000000000000000000000
+25
+0000000000000000000001000
+0101010000001000000000111
+0000000000000001010000000
+0000000000000100000000000
+0110010000111010001000001
+0000000100000000000000000
+0000000100000000000000000
+0000000000000000000001000
+0000000100000000000000000
+0000000000001010001000111
+0000000000000000000001000
+0000000001000000100100000
+0000000000000000000001000
+0011000000010000011000000
+0000000100000000000000000
+0000000000000000000001000
+0000000000010010001000000
+0000000100000000000000000
+0000000000000000000001000
+0000000100000000000000000
+1000000010000100000110000
+0000000100000000000001000
+0000100000000000100000000
+0001011000101010001000001
+0110000000111000000000010
+24
+000010000000000000000000
+000000000000000000000100
+000010000000000000000000
+000000000100000000100001
+000000000000000000000100
+000000000000000000000000
+001000000000000000000000
+000000000000000000000000
+000000000000000000000000
+010000000000000000000000
+000000000000000000000100
+000001000000000000000000
+000000000000000000010000
+000001000000000000000000
+000000010000000000000010
+000000000000000000000000
+000010000000000000000000
+000000000000000000000000
+000000100001001010000000
+000000010000000000000010
+000000000010100000000000
+000000000000000000000000
+000010000000000000000000
+000000000000000000000000
+23
+00010100010010100100000
+00000000110011000000100
+10010110000001100010001
+00010110110000000110000
+00100110110010000111101
+10110000000011100000101
+00110100000000100000000
+10000110100011000101001
+01001001001100011000010
+00000100000010000100101
+10100100110001000010100
+00100010110011000001001
+10000100010001000010001
+10010000000000100101001
+10110000000010000000000
+10000110110010100101001
+00010000000011100101101
+10100000110010100000101
+00010110010000000000101
+10100000000010100101000
+10000110000001100000000
+10000010010000000100000
+00010110010011100010101
+24
+000010000000000000000000
+000000000000000000100000
+000010000000000000000000
+010000110100000000001001
+100000000000001000000000
+000001000000001000000000
+000010001000000000000000
+000101000000000000000000
+000000000001000110001100
+000000001000000000000000
+000000001000000000000000
+000000000000000000100000
+000000001000000000000000
+000000001000000000000000
+000000000000000000010000
+000000001000000000000000
+000000001000000000000000
+000010000000000000000000
+000001000010000000010000
+000010000000000000000000
+000010000000000000000000
+000000001000000000000000
+001000000100110001000010
+000000001000000000000000
+25
+1000010000000000000000000
+0000000000010000000000000
+0000000000000000010010000
+0000000000000000000000000
+0000000000000000000001000
+0000100000000000010000000
+0000000000000000000000001
+0000000000001000000100000
+0000000000000000000000000
+0000000000000000010001000
+0000000000000010000000000
+0000000000100000100000000
+0000000000000000000000000
+0000000000000010000000000
+0000000000001000000000000
+0000000000001000000000000
+0100000000000000000000000
+0000000010001100000000000
+0000001001000001000000000
+0000000000000000000000011
+0000001001000001000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+12
+000000000100
+000000001000
+000000000100
+000001000001
+000000100100
+000000000010
+000010101100
+000000000010
+011000000000
+100001010000
+000000010000
+000100000000
+25
+0000000000000000001000000
+0010000000010000000000000
+0000000000000000001000000
+0000000000000000100000000
+0000000000000010000000100
+0000001000000000000000000
+0000001000000000000000000
+0000000000000000100100000
+0000100000000000000000000
+0010000000000000000000000
+0100000000000100000011000
+0000000000010000000000000
+0000000000000100000000100
+0000000000001000000000001
+1001000001100001010000010
+0000000000010000000000000
+0000000000000000000100000
+0000000000000000000000100
+0000000100000010000000000
+0000000010000000000100000
+0000000000000000000100000
+0000001000000000000000000
+0000000000000000000000001
+0000000000000000000100001
+0000101000000000000000001
+25
+1110000000000000000000001
+0000000000000000000001000
+0000000000001000000000000
+0000100000010011110000000
+0100000000000000000011001
+0000000000000000000000000
+0000000010000010000000000
+0100000010001000000000000
+0000000000000000000000000
+0000001010000000001001000
+0000001000001000110101000
+0001100000001000000000100
+0000000000000000101000000
+0100000000000000100010000
+0000011000000000000000000
+0000000100000001100000000
+0000100000100110000000000
+0000000000001000000000001
+0000001000000000100001000
+0000000000000000000100000
+0000010000100000000000000
+0000000000000000000000000
+0100000000000000000000010
+0000100000001000000011001
+0100000000100000100000000
+23
+00000000000010010000000
+01000000000000001000000
+00000000000000010000000
+00000100000000000000000
+00000001111000000000000
+00000100000000000000010
+00000010000000000001000
+00000000000000000010001
+10000000000000000000000
+00000000000010000000000
+00000000000000010010000
+00011000000000000000000
+00000000000000000000100
+00000000000000000000000
+00000001010000000000000
+10000000000000000000100
+00000000000000000000100
+00000000000000000000100
+00000000001000000000000
+00000000000000000100000
+00000000000000010000000
+00000000000000000000001
+00000000000000100010000
+12
+000100000010
+000000000010
+000000000000
+000000101100
+000000000100
+000000000000
+001001000000
+000000100001
+010000010000
+000100000010
+000000000000
+000000000000
+25
+0000000001000000101000000
+0000000001100100100000100
+0000000000000000000000000
+0000000001001000010000000
+0100000010100010000001011
+0000000010000000100001001
+0000010000000000000001010
+0010000000100100000000000
+0000000000010000010000101
+0100000010100000000000001
+0000000000000100000000000
+0000000010010100000100010
+0000000000000000100000000
+0000000000000000010000000
+0000010000000000000001001
+0001000000000100000000000
+0001001000000000000000001
+0010000100001000000000000
+0000000000000000000010100
+0000000000000000000000000
+0001010000000001001000000
+0000000011001000000000000
+0000100000000000100000000
+0001000000000000000000000
+1000000000000000010000001
+24
+010000000010100000000001
+100000000000000000000000
+000000000100000001001000
+000000000000000000101000
+100000000100000000000000
+000000010000000000000000
+100000000000000000100010
+000000000010000100000001
+001000000000001010000000
+000000000010000000000000
+000000000001001000000000
+000000100000000000000000
+000100001000000000001000
+000000000000000000010000
+000010000000010000000000
+001010000000000000000000
+000001000010000000000000
+000000000010000000010100
+000000010000000000000000
+000000000000000000000010
+100000000000000000000010
+000000001000000000000000
+100000000000000000001000
+000000100000000000000000
+24
+000001000000000000000000
+000000000110000000000001
+000000000000000000000100
+000000100000001000000000
+000001000000000000000000
+000000000000000001000000
+000000000000000010000000
+000000000000100000000000
+000000001001000000000000
+000000000000000000000100
+100000000000000000000000
+000000000000000000001000
+000000001001000000000000
+000000000000000000000001
+000010010000000000000010
+011100000000000100000000
+100000000000000000010000
+000000000000010000100000
+000000000000000001000000
+000000000000000000000100
+000000000000000000000100
+000000000000000001000000
+000000000000000000010000
+000000000000100000000000
+25
+0000000000000000001000010
+0000000000100000000000000
+0000000000000000001000000
+0100000000000000000000000
+0000000000000000000100001
+0000000000100000000000000
+0000000000000000000100000
+0010100100001000000000000
+0000000000000000010100001
+0000000000100000000000000
+0000000000000000001000000
+0000001000000000000000000
+0001010000000100000001100
+0000000000100000000000000
+0000000000010000010100000
+1010000000000000000010000
+0000000000000000000000000
+0000001000000000000000000
+0000001000000000000000000
+0000000000000101000000000
+0000000100001000000000000
+0000000001000000000100000
+0000000000000010001000000
+0100001000000000000000000
+0000000000000000000001000
+25
+1111001111101101011110100
+1111001111101101011110100
+0000110000000010100000000
+1111001111101101011110100
+0000000000010000000001011
+0000110000000010100000000
+1111001111101101011110100
+1111001111101101011110100
+1111001111101101011110100
+1111001111101101011110100
+1111001111101101011110100
+1111001111101101011110100
+0000110000000010100000000
+0000000000010000000001011
+0000000000010000000001011
+1111001111101101011110100
+1111001111101101011110100
+0000000000010000000001011
+1111001111101101011110100
+1111001111101101011110100
+1111001111101101011110100
+1111001111101101011110100
+0000110000000010100000000
+1111001111101101011110100
+1111001111101101011110100
+23
+00000000000000000000000
+00000100000000010010100
+10100001011011101101000
+10100001011011101101000
+10100001011011101101000
+10100001011011101101000
+10100001011011101101000
+00010010000000000000000
+10100001011011101101000
+00000000000000000000010
+01000000100000000000000
+00000010000000000000010
+00000000000100000010001
+10100001011011101101000
+10100001011011101101000
+10100001011011101101000
+10100001011011101101000
+10100001011011101101000
+10100001011011100101000
+10100001011011101101000
+10100001011011101101000
+10100001011011101101000
+00001000000000010000000
+12
+000001000000
+000000000000
+010000000000
+000000000001
+000000000000
+000000000000
+000000000000
+000000000000
+000000000000
+000000001000
+000000000000
+000000000000
+23
+00000001000000000000000
+10000000010110100001101
+01000100001000010100010
+00000001000000000000000
+10000000010011000000101
+00000001000000000000000
+00000001000000000000000
+01101100101000010110010
+00000001000000000000000
+10000010010100100001101
+10000010000010100001101
+00010010000110101001000
+10000010010101001001100
+10000000000100101000001
+00000000000100101000000
+10010000000101101001100
+00000001000000000000000
+10010000010010001000001
+00000001000000000000000
+00000001000000000000000
+00000001000000000000000
+00000001000000000000000
+00010000000110001000000
+24
+001000000000000000000000
+000000000000010000000000
+000000000000000000000100
+000000000000010000000000
+001000000000000000000000
+000000000000000000000100
+001000000000000000000000
+000010001000101000001000
+001000000000010000000000
+000000000000000000000000
+000000000100000001000000
+000000000000100000000011
+000000011000000110100000
+100100000000000000000000
+000000000000010000000000
+010001000011000000000000
+000000000000000000010000
+000000000000000000000100
+000000000000010000000000
+000000000000000000000100
+000000000000010000000000
+000000000000010000000000
+001000000000000000000000
+000000100000000000000000
+23
+00000000001000000000000
+00000000000000000001000
+00000000001000100000000
+00000001000000000100000
+00000010000000000100000
+00000000000100000000000
+10000000000000000000000
+00000000000000010000000
+00000000000000000000000
+00000000100010000010001
+00000100000001000001000
+00100000010000000000111
+00011000000000000000000
+00000000000100000000000
+10010000000000000000000
+10000000000000010000000
+00001000000000001000000
+00000000001000000000000
+01000000000000100000000
+01000000000000000000000
+00001000000000000000000
+00000000000000100000000
+00000000000100100000000
+24
+000000000000000000010000
+000000000000000000100000
+000000001000000000000000
+000000000000001010000000
+001000000000000000000000
+001000000000000000000000
+000000000000101100000000
+000000000010000000000000
+000000000000000000110000
+000000000000000000000001
+100001000001010000000000
+010000000000000000000000
+000000000010000000000000
+001000001010000000000000
+000000000000000000100000
+000110000100000000000000
+000000010000000000010000
+000000000000000000000001
+000000000100000001000010
+000000000000000000001000
+000100000000000000000100
+000100000000000000000000
+000000001000000000000000
+000000000101000000000000
+12
+000000000000
+000000000010
+000000000010
+100100110101
+011010001000
+010011001000
+011001001000
+000000000010
+000000000010
+010000001000
+000000000010
+000000000000
+25
+0000000001100000001000000
+0000000000000000001000000
+0100000000001100000001100
+0000000001000000001000000
+0000000001100000001000000
+0000000000000000001000000
+0000000001100000001000000
+0000000000000000000100000
+0000000100000001000000010
+0000000001100000001000000
+0000100000000000100010000
+0000000001100000001000000
+0000000000000000000100000
+0000000001100000001000000
+0000000000000000000010000
+0000000000000000000100000
+0001100000000000000000000
+0000000000000010010100000
+1110011010010000000000101
+0000000000000000100000000
+0000000000100000000000000
+0000000001100000001000000
+0001000000000000000010000
+0000000000000001000000000
+0000000000100000001000000
+24
+100000000000000000001000
+010000000000000000000000
+000100000000001000000000
+001000000010000000000000
+000000000000000000001000
+000100000000000000000000
+000000010000000100011100
+000000100000000000000011
+000001000000000000000000
+000001000000000000000000
+000000001000000000000000
+000000010000000010000000
+000000000000000111100000
+000010000000000000000001
+000100000000000001100100
+100000000011000001000000
+000000001100110100000000
+000000000000001100000000
+000000010000000000100000
+001100001000000100000000
+000000100000000000000001
+000000000000000010000000
+000000000000000100000000
+000000001000001000000000
+12
+000000101000
+010000000000
+000000001000
+001100000100
+100000000000
+000010000000
+000000000100
+000000001000
+100000010000
+001000000000
+010001000001
+000010010010
+25
+0000001000000000000001010
+0010110000000100000000000
+1001000000000000000000000
+0000000000100000000000010
+0000000010000010000100000
+0000000000000010000000000
+1000000000000000000000000
+0000000000000000100000000
+0000000000000000000000100
+0000000000000000001000000
+0000000000000000000000100
+0000000010000000000100000
+0100000001000000101000100
+0100000000000000000000000
+0000000100010000000100000
+1000000000100000000000001
+0000000001001000000000100
+0000000000001000000000000
+0001001000000000000000000
+0000000000000101000010000
+0000000000000000000000001
+1001000000000000000000011
+0000001000100000010000010
+1000000000000000000000001
+0001000000100000000000000
+12
+001000000000
+100000000001
+000100111000
+011000000000
+001000000001
+010000000000
+000010000000
+000001000010
+000000000000
+000000000001
+000010000000
+000000000110
+24
+000000000000000100110000
+000010000000000000000000
+000010000000000000000000
+000000000001000000000000
+001000000000000000000001
+000010000000000000000000
+100000010000000000000000
+000010000000000000000000
+000000000001000000000000
+000000000000000100110000
+000010000000000000000000
+000000000000000001000000
+000000000000000100100000
+010101100100111010001000
+000000000000000100110000
+000000000000000000000000
+000000000000000000000110
+000000000000000100010000
+000000000001000000000000
+000000000000000000000000
+000010000000000000000000
+000000001000000001000000
+000000000000000000000110
+000000000001000000000000
+24
+010000000000000000000000
+100000000100000000100000
+000001100000001000000011
+000000001000000000000000
+000000000000000000001100
+001101000011001001010010
+000000001000000000000000
+000110000000000000000010
+000000000000000000000100
+000110000001000000000010
+000000001000000000000000
+000000001000000000000000
+000000000000000010000000
+001000000000000001010000
+010000000000000010000000
+000110000000000000000001
+000000000000100000000000
+000000000000010000000000
+001010000010000000000010
+000000001000000000000000
+000111000001001101010000
+000100100001000100000001
+000000000000000000100000
+000000000000010000000000
+25
+0000000000000000000000010
+0000000001000000000000000
+0000000000000101000100000
+0000000000000000100000000
+0000000000000000000000001
+0000010000010010000000000
+0000000000000010000000000
+0000000000010000000000000
+0001000000000000001000100
+0000001010000000000011000
+0000000000000000000000010
+0000100100000001000000000
+0000000000000100000000000
+1000000001000000000100000
+0000000100000000000000000
+0000000000000000100000010
+0000000000010000001000000
+0010000000001000010000000
+0000000000000000100000000
+0001000000000000000000000
+0000000000000000000000001
+0001000000000000000000000
+0100000000000000000100000
+0000000000100000000000010
+0000000000000000000000001
+24
+000000000100001000000100
+000010000000000100000000
+000000000010000000000000
+000000010000000000000000
+000000000100000010001000
+000000000000000000000000
+010000000000000000000000
+000000000000001010000100
+100000000001000000000000
+000010000000000001000000
+000100000000010000000000
+000000000000010000000000
+000000000000000000000000
+000000000000000000000000
+000000000000001000000100
+000000000000000000000000
+000000000000000000000001
+000000010000000000000000
+000001001000000000000000
+000000000000000000000000
+000000000000000000000000
+110000000001100000000000
+000000000000000100000000
+100000000001000000000000
+24
+100000000000010001000000
+001000000000000000000000
+100000000000000000000000
+000000000000000000001001
+000001000000000010000100
+000000000000010000000000
+000000000100000100000001
+000000000000000000000000
+000000100000000000000000
+000000000000000100000000
+000100000000000000010000
+001000000000000000000000
+000000010000000000000000
+000000001000000000000000
+000000001000000000000000
+000000000000000010000000
+000000000000000000001000
+010000000000001000000000
+000000000000000010000000
+000000000000000000000000
+000000000000000000000010
+000000000010000000000000
+000010001000000000100000
+000000000000000000000000
+12
+100001010000
+001000110001
+000100010010
+011000000000
+000000000100
+000010000000
+000010000000
+000000000100
+000000000100
+000000000100
+000000100000
+000010000001
+12
+000000000010
+000001100000
+100000000000
+000000000001
+000000000001
+000000000001
+001000001000
+010000000000
+000000000001
+010000000000
+000010010000
+000000000001
+23
+00000000000000100000001
+00000000000000000000000
+10000000000000010000010
+00000000000000000000000
+00000000001000000000000
+00000000000000000000000
+00000000000000000000000
+00001000000000000000000
+00000000000000000000000
+00000000001000000000000
+00000000000100000100000
+00000000000100000000000
+01000000000000000000000
+00000000000000000000000
+00000000001000000000000
+10000000000000000000000
+00001000000000000000000
+00000000000001001010000
+00000000010000000000000
+00000000100100000000000
+00000000000000000000000
+00000000000000010000000
+01000000000000000000000
+25
+0100000000001000100010000
+0100000000000000100010000
+1000000010000000010000000
+0000100100110010001101111
+0100000000001000100010000
+0001001001000000000000000
+0100000000001000100010000
+1000000010000000010000000
+0000100100110011001101111
+0000100100110011001101111
+0010000000000100000000000
+1000000010000000010000000
+0000000000000000000000000
+1000000010000000010000000
+0100000000001000100010000
+0100000000001000100010000
+0010000000000100000000000
+0000100100110011001101111
+0100000000001000100010000
+0000100100100011001101111
+0100000000001000100010000
+0001011001000000000000000
+0000100100110011001101111
+0000100100110011000101111
+0100000000001000100010000
+25
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000001110000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+1111111110001111111111111
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000000000
+12
+101001010101
+101001010101
+000000000010
+101001010101
+000000101000
+000000000010
+101001010101
+010000001000
+000000001000
+000110000000
+100001010100
+001000010101
+25
+0000000001000000000000000
+0000000001000000000000000
+0000000000010000000000000
+0000010000000000000000010
+0000000000000110000100000
+0000000000010000000000000
+0000000000000000000000000
+0000000000000000000000000
+1000000000000000001010000
+0000000000000000000000000
+0000001000000000000000000
+0000001000000000000000000
+0000000000000000000000000
+0000000000000000100000000
+0010000000000001000000000
+0000000000000000000000000
+0000010000000000000000010
+0001000010000000000001001
+0000000000000000100000000
+0000000000000100000000000
+0000000001000000000000000
+0000000000000000100000000
+0000000000000000000000000
+0000000001000000000000000
+0000010000000000000000000
+23
+00010000000000001000000
+00010000000000000000000
+11000110000010000001000
+00000000100000000000000
+00000001000000000000000
+00000000000000001000000
+00001000011000110000101
+00000000100000000000000
+00000000100000000000000
+00100000011101000000111
+00010000000000000000000
+00000000100000000000000
+00000000100000000000000
+11000110000010000001000
+00000001000000000000000
+00000000000000001000000
+00000000100000000100000
+00000000100000000000000
+00000001000000000100000
+00000000100000000000000
+00000001000000000000000
+00101000011001110010111
+00000000000000001000000
+12
+100000010011
+001010001000
+000000000010
+000000001000
+000010000000
+001000000000
+000001000000
+100100000000
+000001000001
+000001000001
+010000100100
+010000100100
+24
+000000000010000000000000
+000100010100000000000001
+000000000100000001100010
+000000000000000010000000
+100000000000000000000000
+100000000000000000000000
+000010000000110000000000
+001101000000000000100100
+100000000000000000000000
+000000000000010000000000
+100000000000000000000000
+000000100010000000000000
+100000000000000000000000
+000001001000001001010000
+000000100010000000000000
+000000000010000000000000
+100000000000000000000000
+010000000100000100001000
+100000000000000000000000
+000000100010000000000000
+000000100000000000000000
+000000010000000000000000
+000000000001010010000000
+100000000000000000000000
+23
+00000000000100000100000
+00000010110010000000000
+00000000010000000010000
+10000100000000000000000
+10000000000000000000000
+00001000000000000100000
+01010000000000000000000
+00000000000000000000000
+00000000000000000001000
+00001000000000000000000
+01000000000000000000000
+01000000000000000000000
+00010000000000000000000
+10000000000001000000000
+00000000000000101000000
+00000000000100000000000
+00000000000000011000001
+00100000000000000000000
+00100000000000000000000
+00001000000000000000000
+00010001000000000000000
+10000000001000000000000
+00000000000000000001000
+25
+0000000000000000001000000
+0001000000000000000100000
+0000000000000100000000000
+0000011000000000000000000
+0000000100000000000000000
+1000000000100000000000000
+0000000000000000000000001
+0000000000000000000000001
+0001000000000000000000010
+0000000000000100000000000
+0100000000000000000010000
+0000010000000000000000000
+0000000001000000000000000
+0000000000000000000000001
+0000100000000000000000000
+0000000000000000001000000
+0000100000000000000000000
+0000000000000000000000001
+0000000000000010100001100
+0000000000000000010000000
+0000000000000000001000000
+0000000010001001000000000
+0010000000000000000000000
+0000000000010000010000000
+0000000000010000010000000
+25
+0000000000000000000000010
+0000000000000000000000100
+0000000000001000000000000
+0000000000000000000010000
+0000000010000000000000001
+0000000000000000001010100
+0000000000100001100000000
+0000000000010000000101000
+0000000000000010000010010
+0000000000000100000000000
+1000000000100100000000001
+0101000001001000000010000
+0000110100000000010100000
+0000000000000000001000000
+0000000000000110000000000
+0000000000000001000000000
+0000000000000000000010000
+0000000001000000000000000
+0000000010000000000000000
+0000000000001000000000000
+0000000000000000000010010
+0001000000000000000000000
+0000001001000000000000000
+0010000000000001000000000
+0000000000000000001000000
+24
+000000101000000010000000
+000000000000000010000000
+000000000001000010000000
+000000000000000000010000
+010100000000000000000000
+000001000000000001000000
+100000000000000000000000
+000000000010010000000010
+000000000000000000010000
+000000000000000000000000
+100000000000000000000000
+000010000000000000000000
+000000000000000000000000
+000000000000000001000000
+000000000000000000000000
+000000000000000000000000
+000000000000101000000000
+000000000000000000010000
+000010000000000000000000
+000000000000000000000000
+000000000000000000000000
+000000000000000000000000
+000000000000000000000000
+000010000000000100000100
+25
+1000000000000000100000000
+0000000000000000000001000
+0100010000000000000010000
+0000000100000000000000000
+0000000000000100000000000
+0000000000000000000000001
+0000000110000000000000000
+0000000010000000000000000
+0000010000000100000000001
+0000000000000000000001000
+0000000000000000000001000
+0000000000100000100000000
+0100000000000000000000000
+0000000000100001000000000
+0000000000000000000001000
+0011101001011010001100110
+0000000000000000000001000
+0000000010000000000000000
+0000000100000000000000000
+0000000000000100000000000
+0000000000000000000000001
+0000000000000000000001000
+0000000000000000010000001
+0000000000000100000000000
+0000000000000000000001000
+23
+00000000000000000100000
+00011000000100001011011
+00000001000000000000000
+00000000010000000000000
+00000000100000000000000
+00000010000000000000000
+00000000000000100000000
+00000000010000000000000
+00100010000010000000000
+00000010000000000000000
+10000000001001010001100
+00000000000000100100000
+00000000010000000000000
+00000001000000000000000
+00000000010000000000000
+00000000000000000100000
+00000000010000000000000
+00000000100000000000000
+00000000100000000100000
+00000100000010000000000
+00000001010000000000000
+00000000000000100000000
+01000010000000000000000
+12
+000010000000
+000000010000
+000000100000
+000110000000
+001000000000
+000000001101
+000000010000
+100000000000
+000000000100
+001000000000
+100000000000
+000010000010
+23
+00000000000000000010000
+00000000000000010000000
+00000000000000000100000
+00011110000000000000000
+00000000000000000100000
+00000000000000000000010
+00000100010011000000000
+00000010001000000001000
+00000000000000000000100
+00000000000100010000000
+00000000000000000010100
+10000001100000001000000
+01000000000100000000000
+00000000000000000000011
+00000000000100000000000
+00000000000000010000000
+00000000000000010000010
+00000000000000010100000
+00000000000000000000010
+00000000000100000010000
+00000000000000000000001
+00000000000000000000100
+00000010000000101000000
+23
+00000100000001000000000
+00011000000000000000000
+00010000000000000000000
+00000100000100000000000
+00011100000010000100000
+00000000000000000000000
+00000010000000000000000
+01000000000000110000000
+00001000000000000000000
+10100000100000000000010
+00000000000100100000000
+00100000000000000000000
+00000010000000000000000
+00000010000000100000000
+00000000000000000001100
+00000000100000000000000
+00000000010000000000000
+00000000100000000000000
+00000001000000000001000
+00000010010000000010000
+10100000001000000010000
+00000001000000000000000
+00000000000000001000100
+25
+0100000000000000000000000
+0000000000101001000000000
+0000001100000010000000000
+0000000000000000000000000
+0001000000000000000000000
+0010000000000000001000000
+0000000100000000001000000
+0000000000100000000000000
+0000000000000000000010000
+0000100000001000010000000
+0000000000000000000100000
+0000000010000000001000000
+0001001000000000000000000
+0000000000000000001000000
+1000000000000000000001000
+0000000000000000000000010
+0000000000000000000000000
+0000000000000000000000000
+0000000000100000000000000
+0000001000000000000000000
+0010010000000000100000000
+0000100000111000000000000
+0000000000001100001000000
+0000000000000000010000000
+0000000000000000000000000
+25
+0000000000001010000000000
+0000000000000000100000000
+0000010000000000000000000
+0000000000001000000000000
+0000000000001000000000010
+0000000000000000100000000
+0000000000000010000000000
+0000000000000000001000000
+0000000000010000000000000
+1110001101000000000000000
+0001000000000000001000000
+0000100000000000000000000
+0000000000000000010011100
+0000000010100000000000000
+0000000010100001000000000
+0000000010100001000000000
+0000000000000000000000001
+0000000000000000000100000
+0000000000000000100000000
+0000000000000100000100000
+0001010000000000000000000
+0000100000010000000000000
+0001000000000000000000000
+0000000000000000100000000
+0000100000000000000000000
+25
+0000000000010011000000100
+0000000000000000010000000
+0000010000000000100000000
+0000000010000000000000000
+0000000000000000000000001
+0000000010000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0000000000001000010000000
+0000000000000000010000000
+0000000000000000000000010
+0000100000000000000001000
+0000000000000000010000000
+0000000000000000000000010
+0100000000000000000000000
+0000000100000000100000000
+0000001000100000000000000
+0000000000000000000000001
+0000000000000000000000010
+0000000000000100001100000
+0000000010000000000000000
+0000000010000000000000000
+1011000000000000000000000
+0000000001000000000010000
+0100000000000000000000000
+24
+000000000010000000000000
+001000000000000000000000
+000000000000100100000100
+010100001000000000000000
+000010000000000000000000
+001000000000000010000000
+010000000000000000000010
+100000000000000000000000
+000000000000010000000000
+000000010000000000100000
+000000000000000000010100
+100000000000000000000000
+000010000000000000010000
+000000000100011000000000
+001001000000000000000000
+001000000000000000001000
+001000000000000000000000
+000000100000000000100000
+000100000000000000000000
+000000000000010000000000
+000000000001000010000000
+000000000000000001010000
+000000000010000000000000
+000000000000000001000000
+12
+000000000000
+000000010000
+000000000000
+000010000000
+000000100000
+000000000000
+000000000100
+100000000000
+000000000000
+000000000000
+000000000000
+000000000010
+25
+0000000000011000000000001
+0000000000000011000000000
+0000000000000000000000000
+0100010001001000000000000
+0000000000100100000000000
+0000000011010000001000000
+0000100000000001110100000
+0000001000000000001000001
+0100010001100001000000001
+0100000000000100001000000
+0000011100000001000011100
+0000000000000000010000000
+0000000010000100000000000
+0000000000010000000000100
+0000000000000101000001000
+0000000000001000100000000
+0000100010000000000010010
+0000000000000000100000001
+0010000000000000000010000
+0000011000000000000000000
+0000000000000010010000000
+0000000000000001000000000
+1010000000000100001000000
+0110000001000010100000000
+0001000000011000100000000
+25
+0000000000000000000000001
+0000000100001000000000000
+0001000000000000000000000
+0000001000000000000000000
+0000100000000000010000001
+0000000000000000001001000
+0001000001000000000000000
+0000000100010000000000000
+0000000000100000001000000
+0000001000000000000000000
+0000000000000000000000000
+0000000000000001000000000
+0000000000000000010000000
+0000000000000000100000000
+0000000010000000000000000
+0000000000000000000000110
+0000000000000000000000010
+0000000000000000000010000
+0000000000000000000100000
+0000000000000000000000000
+0000000000000000000100000
+0000000000100000000000000
+0000000000000000100010000
+0000000000010000000000000
+0001000000000000000000000
+12
+000011100000
+111000011001
+000010100000
+000000000010
+000001000000
+001100011001
+111100011001
+000011100000
+000011000000
+000000000110
+000000000010
+000000000000
+23
+00000000000001000000000
+00000000000000000000100
+10000000000000000010000
+00000000000000000000100
+00000000000001000000000
+00000100100010000000010
+00000100100000000000010
+10000000000000000010000
+00000001011100001001000
+00000000000000010000000
+00000000000000000000100
+00000011001000000000000
+01011000000000100100001
+00000000000000000000100
+00000000000001000000000
+00000000000000010000100
+00000000000001000000000
+00000100100000000000000
+00100000000000000000000
+00000000000001000000000
+00000100100010000000010
+00000010010000000000000
+00000000000001000000000
+12
+001111000010
+000000010001
+000001100100
+000000000100
+010000000000
+010000011000
+000000100000
+010000100000
+000000000001
+100000001000
+000000001000
+000100000000
+24
+000001010001000010000000
+000000010000010000000010
+001000000000000000001000
+000000000001010010000000
+000001110001000000010010
+000011010001010000000000
+010001000001000000000000
+000000001000000000000001
+000000110000000000000000
+000000010000000000000000
+000000001010000100000001
+000010000000000000000000
+000000000010000000000000
+000000001000000000000000
+001000000000000101000000
+000000000010000000000000
+000000001000000100000001
+001000000100000101000000
+100100000000101000100100
+000001000001000000010010
+010000010001000000000010
+000000000000000101001001
+010011000001010000000000
+000010000000010010000010
+12
+100010000000
+100000001010
+000100000100
+001000000001
+000000000010
+010000001000
+100000000000
+000000000000
+000000000001
+001000010000
+000000100000
+000000000000
+24
+010000000000000000000000
+000000000000000000010100
+000001000000000000000000
+000000111001000000000000
+010010000000000000000001
+000001000000001000000000
+000000000000000000000001
+000000000000000000000001
+000000011001000000000000
+000000000000000001001000
+000001000000000000000000
+100100000000110000100010
+001000010100000000001000
+000000000000000000000001
+000000000000000000000000
+000010000000000000000000
+100000000000000000010000
+000001000000000000000000
+000000000000001000000000
+000000001010000000001000
+000000000000000000000001
+000001000000000000000001
+000000000000000000000001
+000000000000000100000000
+23
+00000000001001000000000
+00000000000000010000100
+00010000000000000000000
+00000000000000000000000
+00000000000000000100000
+00010000000000010000000
+00001000000000101011001
+00000000001000000000000
+00000000001000000000000
+00010000000000000000000
+00000000000000000000100
+10000000000000010000000
+00000000000000010000000
+00100110000000000000010
+00000000001001000000000
+10010000000000010000000
+10000000000000000000100
+00000000000000000000100
+00000000000000000100000
+10000000000000000000000
+01000000000110000000000
+00000000000000010000000
+00001000010000100010000
+25
+0000000000000010000000000
+0000000000000000000000001
+0000000000010000000000000
+0010000000000000001000000
+0100000000000100000001000
+0000000000000000000000001
+0000000000010000000000000
+0000000000000000000010001
+0000000000010000000000000
+0000001000001000000000000
+0000000000010000000000000
+0000000000010000000000000
+0000000001000000000000000
+0000000000000001000000000
+0000000000000010000100000
+0000000000000000000000000
+0000000000010000000000000
+1000000000000000000000000
+0000000000001001000000000
+0001110110100000110000110
+0000000000010000000000000
+0100000001000000000000001
+1000000000000000000000000
+0000000000010000000000000
+0000000000010000000000000
+24
+000000000000000100000000
+100000000000000000000000
+000000000010000000001000
+000010000000000000000000
+000010000000000000000000
+000000000000000000100000
+100000000000000000000000
+010000010001101000000011
+001000010100000001000000
+000000000000001000000000
+000100000000000100100000
+000010000000000000000000
+000010000000000000000000
+100000000000000000000000
+000010000000000000000000
+011000000100100000000010
+000010000000000000000000
+000000000010000000000000
+000101000000000000000000
+000100000000000000000100
+000000101000010000000000
+000000001010000000000000
+000000000010000000011000
+000010000000000000000000
+25
+0001000000000000000001000
+0000000000001000000100000
+1000000000000000000010000
+0010000000000000010000000
+0000000001110000000100000
+0100010000000010000000000
+0010000101010000000000000
+0100001000000100000000010
+0000000000100000000001000
+0001000100100000000000001
+0000000000010100000000000
+0000000100010010000000000
+0000000000000000000000000
+0000000000000000000000000
+0000000000000000000010100
+0000010000100000010000000
+0000100010000001000001000
+0000000000000000000000000
+0001000000000000001000000
+0000100010000000000000000
+0000000000000000000000000
+0000000000010000000000100
+0000000001000000000000000
+0000000001000001001100000
+0000000010000000000000000
+23
+00000000110000100100000
+00100000000001000000010
+00101010000000001000000
+00000001100000110111000
+00000100000000000000000
+00101000000000000000001
+00000000001000000000100
+00100010000001001000000
+00000000001000000000000
+00000001000000100011000
+10000001000000110010000
+10000000010010100100000
+00000000000000001000000
+10000001000100110111000
+00000001000100010011000
+10000001000010100111000
+00000001110110000001000
+10000001100000000000000
+01000100000000000000000
+00000000000000001000001
+00000001000110010011000
+01000000000000000000100
+00001000000000001000010
+24
+000110010001000101000100
+000000110011000000101000
+000001000000000000000000
+000000000000000001100000
+010000110010010000010000
+001000000000000000000010
+000000100010100000000000
+000000000000000000000010
+000000100000001000000000
+000010000100100000010000
+100000000000000101011000
+100000000000000001001001
+000000000000000000000010
+000000001000100000001000
+000010100010010010001000
+000000000011000001000000
+000000000011010000100101
+100000000000100000010000
+000000000000000000000010
+001000000000000000000000
+100000001000010001100001
+001000000000000000000000
+000000100001000001001000
+100000001010001000000000
+1
+0
+24
+100000000010100001010000
+000000000110100000000001
+000101001000011000100110
+010001001000011000100110
+010101001000011000100110
+000100001000011000000010
+010101001000011000100010
+000101001000011000100110
+010100001000011000100110
+010101001000001000100110
+101000000001000000000000
+010101001000011000100110
+010001001000010000100010
+000000000000100000011000
+010101001000001000100100
+010101000000010000100110
+010101001000001000100110
+010101001000011000000110
+101010100100000010000000
+000000000000100101001001
+010001000000011000100110
+000000010010100000000001
+010101001000011000100110
+001000010000000010000000
+24
+000000000000100000010000
+000000000001000000000000
+110001010010000000000100
+001100000100010001000000
+000000000000100000000000
+000000000000000000001000
+000000000001000000001000
+100001111010000000000111
+000000000000100000000000
+010011110010000000000000
+000000000000011000000000
+000000000000100000000000
+000000000100000000100000
+010010011010000000000100
+000000000000100000000000
+010011011010000000000111
+001100000000000011000000
+000000000000000000001000
+000000000000000000001000
+100001111010000000000011
+000000000000000000010000
+000000000001000000000000
+000100000000000111000000
+010011101010000000000101
+25
+1000000000000000000000000
+0000000000000000000000000
+0010000000000000000000000
+0000000000000000000000000
+0000000100000000000000000
+0000000000000000000000000
+0101000000100000000001000
+0000000000000000000000000
+0000000000010000000000000
+1000000000000000000000000
+0000000000000000000000001
+0000000001001000000000000
+0000000000000001000010000
+0000000001001000000000000
+0000000000000000110000000
+0000000001001000000000000
+0000010010000000000100000
+0000000000010000000000000
+1000000000000000000000000
+0000000100000000000000000
+0000000000000000000000010
+0000000100000000000000000
+0000000000000000000000000
+0000000000000000000010000
+1000000000000000000000000
+12
+000000000000
+100000000000
+010100001000
+001000000000
+000000010000
+000000100000
+001000000000
+000001000000
+100000000000
+000000000110
+001000000000
+001000000000
+12
+111110011011
+100010110001
+100110110111
+100101110101
+111011110100
+011101010010
+111101011111
+110101110111
+100001101011
+000101110001
+001011010111
+010111000111
+24
+000000000000000010000000
+000000000100000000000000
+000000000000000000000000
+000000000100000000000000
+000000000100000000000000
+000000000010000000000000
+000000000000000001000000
+100000000000000010000000
+100000000000000000000000
+000000000000000001000000
+010010100000010000000000
+000000000000000000000000
+000000000000000000000000
+000000000000000000000000
+000000000010000000000000
+001000000000000000100000
+000000000000100000001000
+000000000000100000001001
+000000000000001000010010
+000000000000000001000000
+000000000000000000000000
+000000000100000000000000
+000000000000000000000000
+000000000000000000000000
+25
+0000000000100000000000000
+0100000000000000001000000
+0001000000100000001000000
+0000000000000000001000000
+0000000000000010000000000
+0000000000000001000000011
+0000000000100000001000000
+0000000010010000000000000
+0000000000010000000000000
+0000100000000000100000010
+0000000000000000001000000
+0000000000000010000000000
+0001000000100000001000000
+0000000001000100000000010
+0000001000000000000000000
+0000000000000000001000000
+0000000000010000000000100
+1000100000000001000000000
+0000100001000100100000011
+1000100001000001100000001
+0000000000000010000000000
+0010010100001000010111000
+0000001000000010000000000
+0000001000000010000000000
+0000000000000000001000000
+25
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0100010100001001000100110
+1000000000000000000000000
+0001000000000010000010000
+0000000000000100001000000
+0100011000001001000100110
+0010000000010000000000000
+0100011100001000000100110
+0000100000000000000000000
+0000000000100000100001000
+0010000001000000001000000
+0000011100001001000100110
+0100011100001001000100110
+0000100000000000000000000
+0100011100001001000000110
+0100001100001001000100110
+1000000010000000010001001
+0000000010000010000000000
+0100011100001001000100110
+0010000000000000000000000
+0100011100001001000100100
+0000100000000000000000000
+0010000000000000000000000
+24
+001000000000000000000000
+000100010000000100000000
+000000001000000000000000
+000000000000000000000100
+000001000000000000000000
+100000100000000000000010
+000010000000000000000000
+000011000000000000000000
+100000000000000000000010
+001000000000000000000000
+000000000000100000000000
+000000000000100000000000
+000000000001001001000000
+001000000000000000000000
+000000000100000000001000
+000000000000000010000000
+000000000000010000100000
+000000000000000010000000
+000000000000000000000100
+010000000010000000010001
+000000000000000000000100
+000000000000000010000000
+000000000000000010000000
+000000001000000000000000
+25
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0000000000100000000000000
+0001000000000001000000000
+0110111111011110111110111
+0110111111011110111110111
+1000000000000000000001000
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0000000000100000000000000
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+0110111111011110111110111
+1000000000000000000001000
+0110111111011110111110111
+25
+0010000110110000010100111
+0000000000000010000000000
+0000000000000101000010000
+0010000110110000110100111
+0010000100110000110100111
+0000000000000101000010000
+0100000000000000000000000
+0100000000000000000000000
+0100000000000000000000000
+0000011000000000001001000
+0010000010110000110100111
+1000100001001000000000000
+0000011000000000001001000
+0000000000000010000000000
+0000000000000000000000000
+1000100001001000000000000
+1001100001001000000000000
+0000011000000000001001000
+0000000000000010000000000
+0010000110110000110100111
+0000000000000010000000000
+1001100001001000000000000
+0100000000000000000000000
+0100000000000000000000000
+0100000000000000000000000
+25
+0000001000000010000100000
+0000001000000010000100000
+1001000001000100000000110
+1001000001000100010000110
+1000000001011000010000100
+0001000101001101010001100
+0001000001010000000001010
+0000000000000000000100000
+0000000001000100010000100
+0000000000000010000100000
+0000000000000010000100000
+1000000001011100010000110
+1001000000001001000001010
+0000000000000101010001100
+0000001000000010000100000
+0000000000001101000001100
+1000000000001000000000000
+0110010010100000101010001
+0000001000000000000100000
+0000110000000000000000000
+0001000100001101010001110
+0001000101001101010001100
+0000000101011100010001010
+1001000100001001000001110
+0000001000000010000000000
+23
+00000000000000000100001
+00000000000000100000000
+00000000100000000000000
+00000000000000100000000
+00001000000000000000000
+00000000100000000000000
+00000000010000000000000
+00000000000000001000000
+00001000000000000000000
+00000000000000000110000
+01000000000000000100000
+00000100000100000000000
+00000000000000000100000
+00000000000000001000000
+00000000000000000000000
+00000000000000000000000
+00101000000000000000000
+00000000000000000000000
+00000000000000000000000
+00000000000000000000000
+00000000000000000000000
+00000000010000000000000
+00010000000000000000100
+25
+0000000000000000000010000
+0000000000000000000010000
+1000000000000000000000100
+0000000000000000010000000
+0000000000100000000000000
+0100010000010100000100000
+0000000000000000010000000
+1000000000100000000000000
+0000000000100000000000000
+0000000000000000010000000
+0000000000000010010000000
+0000000000000000010000000
+0000000000000000010000000
+0001001100001000100000000
+0000000000000000010000000
+0000000000000000000000000
+0000100011000000000000000
+0000000000000000000000100
+0000000000000000010000000
+0000000000000010000000000
+0000000000000000010000000
+0000000000000010000000000
+0000000000000010000000000
+0000000000000010000000000
+0000000000000000001000010
+23
+00000000010000000000000
+10100000001100000000010
+00000100000000000000000
+00010000100000001011000
+00000000000000010000000
+00100010011001000000010
+00000000000000010000000
+00000010010101000000000
+00000000011000000100000
+00000001000010000010000
+00000100000000000000000
+00100010000100000000000
+01000000000000100000101
+00100000011100000000010
+00000000000101000100010
+00000000000000010000000
+00101000001000000100010
+00000010001101000000000
+00000100000000000000000
+00000000000000010000000
+10000000010000000000000
+00000010010100000000000
+00000000000000010000000
+23
+00000000000000000100000
+00000000000000010100000
+00000001000000000000000
+00000000000000010100000
+00000000000000000000000
+00000000000000000100000
+00000001100000000000000
+00000000000000000000010
+00000000000000000100000
+01000000010100001010000
+00000000000000000100000
+00000000000000000100000
+00000000000000010000000
+00000000000000010100000
+10000000100000000000010
+01010000000010000000000
+00000000000000000000000
+00001000000000000000000
+00100000000100100001101
+00000000000000000100000
+00000000000000000100000
+00001000000000000000000
+00000101000000000000000
+24
+000000000000000000010000
+000000000000010000000000
+000000010000000000000000
+000000010000000000000000
+100001001000000000000001
+000000000000000000000000
+000000000001000000000000
+000010000000010000000000
+000000000000000000000000
+000000000000000000000010
+010100000000101000000100
+000010000000000000000000
+000000000001000000010000
+000000000000000000010000
+000000000010000010001000
+011000000000000000100000
+000000000000000000010000
+000010100100000000000010
+000000010000000000010000
+000000000001000000000000
+000000000001000000000000
+000000000000000000010000
+000000000001000000000000
+000000000010100101000000
+25
+0101000000101000010001001
+0000100000000000000000000
+0000100000000000000000000
+0000000000000100000000000
+0000100000000000000000000
+0100000000101010000100001
+0001011000010000101010100
+1000000000000100000000000
+0000000111000011100000010
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0010000011001001000010010
+0000000111100000010001010
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0000100000000000000000000
+0001010000011000000000000
+0001011010111001100010000
diff --git a/codejam_2016/src/y2016round3/D-large-practice.out b/codejam_2016/src/y2016round3/D-large-practice.out
new file mode 100644
index 0000000..b6d07de
--- /dev/null
+++ b/codejam_2016/src/y2016round3/D-large-practice.out
@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 1
+Case #3: 3
+Case #4: 0
+Case #5: 3
+Case #6: 10
+Case #7: 482
+Case #8: 98
+Case #9: 25
+Case #10: 107
+Case #11: 36
+Case #12: 554
+Case #13: 37
+Case #14: 369
+Case #15: 294
+Case #16: 32
+Case #17: 42
+Case #18: 237
+Case #19: 510
+Case #20: 114
+Case #21: 19
+Case #22: 555
+Case #23: 249
+Case #24: 52
+Case #25: 111
+Case #26: 0
+Case #27: 157
+Case #28: 8
+Case #29: 433
+Case #30: 217
+Case #31: 225
+Case #32: 184
+Case #33: 49
+Case #34: 312
+Case #35: 295
+Case #36: 30
+Case #37: 569
+Case #38: 61
+Case #39: 148
+Case #40: 163
+Case #41: 217
+Case #42: 34
+Case #43: 28
+Case #44: 123
+Case #45: 45
+Case #46: 30
+Case #47: 170
+Case #48: 468
+Case #49: 13
+Case #50: 46
+Case #51: 230
+Case #52: 48
+Case #53: 528
+Case #54: 101
+Case #55: 52
+Case #56: 576
+Case #57: 36
+Case #58: 580
+Case #59: 307
+Case #60: 18
+Case #61: 486
+Case #62: 297
+Case #63: 228
+Case #64: 151
+Case #65: 69
+Case #66: 82
+Case #67: 6
+Case #68: 550
+Case #69: 29
+Case #70: 111
+Case #71: 103
+Case #72: 121
+Case #73: 500
+Case #74: 23
+Case #75: 441
+Case #76: 212
+Case #77: 137
+Case #78: 163
+Case #79: 522
+Case #80: 107
+Case #81: 448
+Case #82: 1
+Case #83: 420
+Case #84: 207
+Case #85: 39
+Case #86: 22
+Case #87: 57
+Case #88: 45
+Case #89: 433
+Case #90: 124
+Case #91: 61
+Case #92: 5
+Case #93: 215
+Case #94: 499
+Case #95: 30
+Case #96: 231
+Case #97: 464
+Case #98: 188
+Case #99: 344
+Case #100: 459
diff --git a/codejam_2016/src/y2016round3/D-small-practice.in b/codejam_2016/src/y2016round3/D-small-practice.in
new file mode 100644
index 0000000..304e239
--- /dev/null
+++ b/codejam_2016/src/y2016round3/D-small-practice.in
@@ -0,0 +1,464 @@
+100
+2
+11
+10
+2
+10
+00
+3
+000
+000
+000
+1
+1
+3
+000
+110
+000
+4
+0001
+1010
+0110
+0001
+4
+1000
+0100
+0100
+1000
+2
+00
+00
+4
+1011
+0000
+0000
+1001
+4
+0000
+0100
+1000
+0100
+4
+0001
+0010
+1100
+0001
+4
+0000
+1110
+0001
+0001
+4
+0100
+0001
+0100
+0101
+4
+1000
+0100
+0000
+0001
+4
+0100
+0100
+0100
+1000
+3
+011
+110
+000
+4
+1001
+0110
+0000
+0001
+4
+0111
+0011
+0100
+0000
+4
+1011
+0000
+1111
+0000
+4
+0100
+0001
+0111
+0000
+4
+0000
+0010
+0000
+0001
+4
+0010
+0000
+0101
+1000
+4
+0010
+0001
+0010
+1100
+4
+0000
+1000
+1001
+1000
+4
+0100
+1001
+0110
+0110
+3
+000
+111
+000
+4
+0000
+0110
+0000
+1000
+4
+1000
+0100
+0100
+0010
+4
+0000
+0001
+1100
+1001
+4
+0000
+0010
+1000
+1100
+4
+0011
+0000
+0100
+0000
+4
+0111
+1001
+0001
+0000
+3
+100
+101
+010
+4
+0001
+0100
+0110
+1011
+4
+0000
+0000
+0000
+0000
+1
+0
+3
+001
+001
+001
+3
+000
+000
+110
+4
+0010
+0001
+0001
+0010
+4
+0001
+0000
+1101
+0101
+4
+0100
+1001
+0010
+1000
+4
+1010
+0100
+0100
+1001
+4
+1001
+0000
+0010
+0010
+4
+0100
+1100
+1000
+1001
+4
+1100
+1100
+1100
+0011
+4
+1000
+0111
+0100
+0101
+4
+1000
+0011
+0100
+0000
+3
+011
+011
+011
+3
+010
+000
+010
+4
+0000
+0011
+0000
+1100
+4
+1000
+0010
+0001
+0100
+4
+1100
+0010
+1100
+1100
+4
+0000
+1110
+0000
+0000
+4
+0100
+0100
+0100
+0100
+3
+010
+111
+010
+4
+1000
+0011
+1000
+1000
+4
+0010
+0010
+0010
+0000
+4
+1001
+0010
+0110
+0100
+4
+0110
+1000
+1100
+1001
+3
+100
+100
+001
+4
+1011
+0100
+0100
+0000
+4
+0111
+0000
+1000
+0101
+4
+1110
+1110
+0001
+0001
+4
+1010
+0100
+0100
+1010
+3
+000
+110
+001
+4
+0100
+1011
+0100
+0100
+2
+01
+01
+4
+1100
+0010
+0010
+0000
+4
+0000
+0000
+0000
+1111
+2
+00
+01
+4
+1000
+1000
+0111
+1000
+4
+0000
+1000
+1000
+0000
+4
+1000
+0110
+0100
+0000
+4
+0000
+1101
+0010
+0000
+4
+0110
+0000
+0000
+0000
+4
+1100
+0011
+1000
+0000
+4
+0000
+0010
+0000
+0000
+4
+1110
+0001
+0010
+1001
+4
+1000
+1101
+0001
+0011
+4
+1001
+0000
+1100
+1100
+4
+1000
+0111
+1000
+1000
+3
+001
+100
+010
+2
+00
+11
+3
+000
+100
+000
+3
+010
+000
+001
+4
+0011
+0100
+0001
+0100
+4
+0111
+1000
+0001
+0001
+4
+1001
+1010
+0101
+0100
+3
+011
+100
+100
+4
+0101
+0001
+0001
+0000
+4
+1001
+1001
+0001
+1100
+4
+1000
+0100
+0101
+0100
+3
+110
+000
+100
+4
+0100
+0001
+0101
+0100
+2
+10
+01
+4
+1100
+0100
+0000
+0000
+4
+0001
+1000
+1000
+0001
+4
+1110
+0000
+1110
+0000
+4
+0100
+0011
+0100
+0010
+4
+0010
+0110
+0001
+1001
diff --git a/codejam_2016/src/y2016round3/D-small-practice.out b/codejam_2016/src/y2016round3/D-small-practice.out
new file mode 100644
index 0000000..d9bb185
--- /dev/null
+++ b/codejam_2016/src/y2016round3/D-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 1
+Case #3: 3
+Case #4: 0
+Case #5: 3
+Case #6: 10
+Case #7: 4
+Case #8: 2
+Case #9: 5
+Case #10: 3
+Case #11: 5
+Case #12: 11
+Case #13: 11
+Case #14: 1
+Case #15: 6
+Case #16: 5
+Case #17: 3
+Case #18: 4
+Case #19: 9
+Case #20: 5
+Case #21: 2
+Case #22: 2
+Case #23: 5
+Case #24: 6
+Case #25: 9
+Case #26: 6
+Case #27: 3
+Case #28: 2
+Case #29: 5
+Case #30: 2
+Case #31: 3
+Case #32: 10
+Case #33: 1
+Case #34: 9
+Case #35: 4
+Case #36: 1
+Case #37: 6
+Case #38: 3
+Case #39: 4
+Case #40: 4
+Case #41: 1
+Case #42: 10
+Case #43: 4
+Case #44: 10
+Case #45: 8
+Case #46: 3
+Case #47: 2
+Case #48: 3
+Case #49: 3
+Case #50: 4
+Case #51: 0
+Case #52: 3
+Case #53: 7
+Case #54: 12
+Case #55: 4
+Case #56: 11
+Case #57: 7
+Case #58: 10
+Case #59: 9
+Case #60: 2
+Case #61: 11
+Case #62: 4
+Case #63: 8
+Case #64: 2
+Case #65: 2
+Case #66: 10
+Case #67: 2
+Case #68: 4
+Case #69: 12
+Case #70: 1
+Case #71: 10
+Case #72: 4
+Case #73: 2
+Case #74: 6
+Case #75: 4
+Case #76: 3
+Case #77: 3
+Case #78: 9
+Case #79: 9
+Case #80: 4
+Case #81: 10
+Case #82: 0
+Case #83: 2
+Case #84: 2
+Case #85: 1
+Case #86: 3
+Case #87: 4
+Case #88: 9
+Case #89: 5
+Case #90: 6
+Case #91: 9
+Case #92: 5
+Case #93: 2
+Case #94: 11
+Case #95: 0
+Case #96: 3
+Case #97: 4
+Case #98: 4
+Case #99: 3
+Case #100: 2
diff --git a/codejam_2016/src/y2016round3/c.rs b/codejam_2016/src/y2016round3/c.rs
new file mode 100644
index 0000000..c0f0f73
--- /dev/null
+++ b/codejam_2016/src/y2016round3/c.rs
@@ -0,0 +1,410 @@
+use codejam::util::codejam::run_cases;
+//use std::cmp::max;
+use itertools::Itertools;
+use std::io::Write;
+//use std::mem::swap;
+
+use codejam::util::grid::constants::*;
+use codejam::util::grid::Grid;
+use codejam::util::vector_2d::Vector2d;
+use std::cmp::max;
+use std::cmp::min;
+use std::cmp::Ordering;
+use std::collections::BinaryHeap;
+use std::collections::HashMap;
+use std::usize;
+
+//use permutohedron::LexicalPermutation;
+
+/*
+Clock arithmetic
+Mazes
+Grid
+BFS using priority queue / min heap
+
+The BFS was actually not needed at all, but rather staying to the left
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2016round2",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let (R, C) = reader.read_tuple_2();
+
+                let lovers = reader.read_num_line();
+
+                assert_eq!(2 * (R + C), lovers.len());
+
+                if case_no != 102 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}:\n{}",
+                    case_no,
+                    solve(R, C, &lovers) //solve_brute_force(R, C, &lovers)
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn next_dir_loc(loc: &GardenLocation, is_forward_slash: bool) -> GardenLocation
+{
+    let new_dir = match loc.entry_dir {
+        NORTH => {
+            if is_forward_slash {
+                EAST
+            } else {
+                WEST
+            }
+        }
+        SOUTH => {
+            if is_forward_slash {
+                WEST
+            } else {
+                EAST
+            }
+        }
+        EAST => {
+            if is_forward_slash {
+                NORTH
+            } else {
+                SOUTH
+            }
+        }
+        WEST => {
+            if is_forward_slash {
+                SOUTH
+            } else {
+                NORTH
+            }
+        }
+        _ => panic!("odd direction"),
+    };
+
+    GardenLocation {
+        grid_loc: loc.grid_loc + &new_dir,
+        entry_dir: new_dir,
+    }
+}
+
+#[derive(Debug, Clone)]
+struct Lover
+{
+    number: usize,
+    location: Vector2d<isize>,
+    initial_direction: &'static Vector2d<isize>,
+}
+
+#[derive(Debug)]
+struct LoverPair
+{
+    L1: Lover,
+    L2: Lover,
+    Lmid: Lover,
+    clock_dist: usize,
+}
+
+#[derive(Ord, PartialOrd, PartialEq, Eq, Hash, Copy, Clone)]
+struct GardenLocation
+{
+    grid_loc: Vector2d<isize>,
+    entry_dir: Vector2d<isize>,
+}
+
+#[derive(Eq, PartialEq, Copy, Clone)]
+struct HeapNode
+{
+    distance_to_filled_edge: usize,
+    distance_to_lmid: isize,
+    loc: GardenLocation,
+}
+
+impl Ord for HeapNode
+{
+    fn cmp(&self, other: &HeapNode) -> Ordering
+    {
+        // Notice that the we flip the ordering on costs.
+        // In case of a tie we compare positions - this step is necessary
+        // to make implementations of `PartialEq` and `Ord` consistent.
+        other
+            .distance_to_filled_edge
+            .cmp(&self.distance_to_filled_edge)
+            .then_with(|| other.distance_to_lmid.cmp(&self.distance_to_lmid))
+            .then_with(|| self.loc.cmp(&other.loc))
+    }
+}
+impl PartialOrd for HeapNode
+{
+    fn partial_cmp(&self, other: &HeapNode) -> Option<Ordering>
+    {
+        Some(self.cmp(other))
+    }
+}
+
+///
+/// Computes taxi distance to the nearest border or the nearest filled out grid square
+fn compute_distance_grid(R: usize, C: usize, grid: &Grid<String>) -> Grid<usize>
+{
+    let mut grid_edge_dist: Grid<usize> = Grid::new(R + 2, C + 2);
+    for &r in [0, R + 1].iter() {
+        for c in 0..C + 2 {
+            grid_edge_dist[(r, c)] = 0;
+        }
+    }
+    for &c in [0, C + 1].iter() {
+        for r in 0..R + 2 {
+            grid_edge_dist[(r, c)] = 0;
+        }
+    }
+    for r in 1..=R  {
+        for c in 1..=C {
+            if grid[(r, c)] == "\\" || grid[(r, c)] == "/" {
+                grid_edge_dist[(r, c)] = 0;
+            } else {
+                let loc = Vector2d::with_val(r as isize, c as isize);
+                grid_edge_dist[&loc] = usize::MAX;
+                for dir in DIRECTIONS.iter() {
+                    grid_edge_dist[&loc] =
+                        min(grid_edge_dist[&loc], 1 + grid_edge_dist[&(loc + dir)]);
+                }
+            }
+        }
+    }
+    for r in (1..=R ).rev() {
+        for c in (1..=C ).rev() {
+            let loc = Vector2d::with_val(r as isize, c as isize);
+
+            for dir in DIRECTIONS.iter() {
+                grid_edge_dist[&loc] = min(grid_edge_dist[&loc], 1 + grid_edge_dist[&(loc + dir)]);
+            }
+        }
+    }
+
+    grid_edge_dist
+}
+
+fn get_lovers(R: usize, C: usize, grid: &mut Grid<String> ) -> Vec<Lover>
+{
+     let mut lovers: Vec<Lover> = Vec::new();
+
+    //Add lovers
+    let mut add_lover = |r, c, label: usize, initial_dir| {
+        grid[(r, c)] = (label + 1).to_string();
+        //assert_eq!(Some(label + 1), grid_coords_to_lover(r, c, R, C));
+
+        lovers.push(Lover {
+            number: label + 1,
+            location: Vector2d::with_val(r as isize, c as isize),
+            initial_direction: initial_dir,
+        });
+    };
+
+    //top
+    for label in 0..C {
+        let r = 0;
+        let c = 1 + label;
+
+        add_lover(r, c, label, &SOUTH);
+    }
+    //right
+    for label in C..C + R {
+        let r = 1 + label - C;
+        let c = C + 1;
+        add_lover(r, c, label, &WEST);
+    }
+    //bottom
+    for label in C + R..2 * C + R {
+        let r = 1 + R;
+        let c = 2 * C + R - label;
+        add_lover(r, c, label, &NORTH);
+    }
+    //left
+    for label in 2 * C + R..2 * (R + C) {
+        let r = 2 * (R + C) - label;
+        let c = 0;
+        add_lover(r, c, label, &EAST);
+    }
+
+    assert_eq!(2 * (R + C), lovers.len());
+
+    lovers
+}
+
+fn solve(R: usize, C: usize, lover_pairings: &[usize]) -> String
+{
+    //grid including lovers
+    let mut grid: Grid<String> = Grid::new(R + 2, C + 2);
+
+    let lovers: Vec<Lover> = get_lovers(R, C, &mut grid);
+
+    debug!("Grid\n{:#.3?}\n", grid);
+
+    //idea is to go through pairs that are closest together on the edges (clock distance)
+    let mut matches: Vec<LoverPair> = Vec::new();
+    for matched in lover_pairings.chunks_exact(2) {
+        let L1_num = min(matched[0], matched[1]);
+        let L2_num = max(matched[1], matched[0]);
+
+        let L1 = lovers.iter().find(|lov| lov.number == L1_num).unwrap();
+        let L2 = lovers.iter().find(|lov| lov.number == L2_num).unwrap();
+
+        let diff = (L1_num as isize - L2_num as isize).abs() as usize;
+        let clock_dist = min(diff, 2 * (R + C) - diff);
+
+        let Lmid_num = if clock_dist == diff {
+            L1_num + clock_dist / 2 + 1
+        } else {
+            ((lovers.len() + L1_num - 2 - clock_dist / 2) % lovers.len()) + 1
+        };
+        let Lmid = lovers.iter().find(|lov| lov.number == Lmid_num).unwrap();
+
+        matches.push(LoverPair {
+            L1: L1.clone(),
+            L2: L2.clone(),
+            Lmid: Lmid.clone(),
+            clock_dist,
+        });
+    }
+
+    matches.sort_by(|a, b| {
+        a.clock_dist
+            .cmp(&b.clock_dist)
+            .then(min(a.L1.number, a.L2.number).cmp(&min(b.L1.number, b.L2.number)))
+    });
+
+    //in this search, we prioritize being close to another path, then being close to the lover who is
+    // at the midpoint between the lovers
+    'lover_pair_for: for lover_pair in matches.iter() {
+        debug!(
+            "Matching {} and {}.  Distance={}",
+            lover_pair.L1.number, lover_pair.L2.number, lover_pair.clock_dist
+        );
+
+        let starting_location = GardenLocation {
+            grid_loc: lover_pair.L1.location + lover_pair.L1.initial_direction,
+            entry_dir: *lover_pair.L1.initial_direction,
+        };
+        let target_location = GardenLocation {
+            grid_loc: lover_pair.L2.location,
+            entry_dir: *lover_pair.L2.initial_direction * -1,
+        };
+
+        //used for distance calculations
+        let grid_edge_dist: Grid<usize> = compute_distance_grid(R, C, &grid);
+
+        let mut prev: HashMap<GardenLocation, GardenLocation> = HashMap::new();
+        //Use a binary heap using -manhattan distance from target, GardenLocation
+        let mut heap: BinaryHeap<HeapNode> = BinaryHeap::new();
+
+        heap.push(HeapNode {
+            loc: starting_location,
+            distance_to_filled_edge: grid_edge_dist[&starting_location.grid_loc],
+            distance_to_lmid: lover_pair
+                .Lmid
+                .location
+                .manhat_distance(&starting_location.grid_loc),
+        });
+
+        while let Some(heap_node) = heap.pop() {
+            if heap_node.loc == target_location {
+                debug!("Found target!");
+
+                let mut prev_loc = heap_node.loc;
+                while prev_loc != starting_location {
+                    let cur_loc = prev_loc;
+                    prev_loc = prev[&cur_loc];
+
+                    if next_dir_loc(&prev_loc, true) == cur_loc {
+                        assert_ne!(grid[&prev_loc.grid_loc], "\\".to_string());
+                        grid[&prev_loc.grid_loc] = "/".to_string();
+                    } else if next_dir_loc(&prev_loc, false) == cur_loc {
+                        assert_ne!(grid[&prev_loc.grid_loc], "/".to_string());
+                        grid[&prev_loc.grid_loc] = "\\".to_string();
+                    } else {
+                        panic!("Inconsistent prev location");
+                    }
+                }
+
+                debug!("Grid\n{:#.3?}\n", grid);
+
+                continue 'lover_pair_for;
+            }
+
+            if heap_node.loc.grid_loc.r() == 0
+                || heap_node.loc.grid_loc.r() == R as isize + 1
+                || heap_node.loc.grid_loc.c() == 0
+                || heap_node.loc.grid_loc.c() == C as isize + 1
+            {
+                //we are out of bounds in the arms of another lover
+                continue;
+            }
+
+            debug!(
+                "Processing heap node row: {} col: {} direction: {:?} dist to edge: {}, dist to mid: {}",
+                heap_node.loc.grid_loc.r(),
+                heap_node.loc.grid_loc.c(),
+                heap_node.loc.entry_dir,
+                heap_node.distance_to_filled_edge,
+                heap_node.distance_to_lmid
+            );
+
+            let grid_contents = &grid[&heap_node.loc.grid_loc];
+
+            if grid_contents != "\\" {
+                let loc = next_dir_loc(&heap_node.loc, true);
+                let next_heap_node = HeapNode {
+                    loc,
+                    distance_to_filled_edge: grid_edge_dist[&loc.grid_loc],
+                    distance_to_lmid: lover_pair.Lmid.location.manhat_distance(&loc.grid_loc),
+                };
+                prev.entry(next_heap_node.loc).or_insert_with(|| {                
+                    heap.push(next_heap_node);
+                    heap_node.loc
+                });
+            }
+
+            if grid_contents != "/" {
+                let loc = next_dir_loc(&heap_node.loc, false);
+                let next_heap_node = HeapNode {
+                    loc,
+                    distance_to_filled_edge: grid_edge_dist[&loc.grid_loc],
+                    distance_to_lmid: lover_pair.Lmid.location.manhat_distance(&loc.grid_loc),
+                };
+
+                prev.entry(next_heap_node.loc).or_insert_with(|| {
+                    heap.push(next_heap_node);
+                    heap_node.loc
+                });
+            }
+        }
+
+        return "IMPOSSIBLE".to_string();
+    }
+
+    (0..R)
+        .map(|r| {
+            (0..C)
+                .map(|c| {
+                    let s = grid[&Vector2d::with_val(r + 1, c + 1)].clone();
+
+                    if s != "\\" && s != "/" {
+                        "/".to_string()
+                    } else {
+                        s
+                    }
+                })
+                .join("")
+        })
+        .join("\n")
+    //+ &"\n".to_string()
+}
diff --git a/codejam_2016/src/y2016round3/d.rs b/codejam_2016/src/y2016round3/d.rs
new file mode 100644
index 0000000..47ccd86
--- /dev/null
+++ b/codejam_2016/src/y2016round3/d.rs
@@ -0,0 +1,556 @@
+use codejam::util::codejam::run_cases;
+//use std::cmp::max;
+//use itertools::Itertools;
+use std::io::Write;
+//use std::mem::swap;
+
+//use std::cmp::max;
+//use std::cmp::Ordering;
+//use std::collections::BinaryHeap;
+//use std::collections::HashMap;
+use std::usize;
+
+use codejam::algo::graph::disjointset::DisjointSet;
+use codejam::util::bitvec64::BitVec64;
+use multiset::HashMultiSet;
+use std::cell::RefCell;
+//use std::cmp::max;
+//use std::cmp::min;
+//use std::collections::HashMap;
+use std::i16;
+use std::rc::Rc;
+
+/*
+Enumerating multisets
+union find / disjoint set
+rust RC/Refcell ; merging nodes from pointers
+Much recursion
+BitVec64 / bit manipulation
+
+Main idea is that workers must enter as a square chunk, where
+each worker knows each machine in the block
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["D-small-practice", "D-large-practice"],
+        "y2016round2",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let N = reader.read_int();
+
+                let workers: Vec<BitVec64> = (0..N)
+                    .map(|_| reader.read_chars(N).into_iter().collect::<BitVec64>())
+                    .collect();
+
+                if case_no != 3 {
+                    //  continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(&workers) //solve_brute_force(R, C, &lovers)
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+#[derive(Default)]
+struct Node
+{
+    machines: BitVec64,
+    workers: BitVec64,
+}
+
+impl Drop for Node
+{
+    fn drop(&mut self)
+    {
+        debug!(
+            "Node dropped machines {:b} workers {:b}",
+            self.machines, self.workers
+        );
+    }
+}
+
+impl Node
+{
+    fn num_machines(&self) -> i16
+    {
+        self.machines.pop_count() as i16
+    }
+    fn num_workers(&self) -> i16
+    {
+        self.workers.pop_count() as i16
+    }
+    fn diff(&self) -> i16
+    {
+        self.num_machines() - self.num_workers()
+    }
+}
+
+fn merge_nodes(a: &Rc<RefCell<Node>>, b: &Rc<RefCell<Node>>)
+{
+    let mut node_ref = a.borrow_mut();
+    {
+        let worker_node = b.borrow();
+        node_ref.workers |= worker_node.workers;
+        node_ref.machines |= worker_node.machines;
+    }
+}
+
+/// Connects a worker node to any machine that the worker is already connected to
+fn create_initial_node_list(workers: &[BitVec64], ds: &mut DisjointSet) -> Vec<Rc<RefCell<Node>>>
+{
+    let N = workers.len();
+    for (w_idx, worker) in workers.iter().enumerate() {
+        debug!(
+            "Worker #{:>3}  machines {:0>width$b}  ",
+            w_idx,
+            worker.data,
+            width = N
+        );
+
+        for machine in 0..N {
+            if worker.get(machine) {
+                ds.merge_sets(machine, w_idx + N);
+            }
+        }
+    }
+
+    debug!("Num sets: {}", ds.number_of_sets());
+
+    let node_list: Vec<Rc<RefCell<Node>>> = (0..2 * N)
+        .map(|i| {
+            let mut node: Node = Default::default();
+            if i >= N {
+                node.workers.set(i - N, true);
+            } else {
+                node.machines.set(i, true);
+            }
+            Rc::new(RefCell::new(node))
+        })
+        .collect();
+
+    assert_eq!(node_list.len(), 2 * N);
+
+    node_list
+}
+
+/// Now extract only the unique merged nodes
+fn create_merged_node_list(workers: &[BitVec64]) -> Vec<Rc<RefCell<Node>>>
+{
+    let N = workers.len();
+    let mut ds = DisjointSet::new(2 * N);
+
+    let mut node_list = create_initial_node_list(workers, &mut ds);    
+
+    let mut merged_node_list: Vec<Rc<RefCell<Node>>> = Vec::new();
+    let mut in_merged = BitVec64::new();
+
+    for node_idx in 0..2 * N {
+        let merged_set = ds.get_repr(node_idx);
+
+        if !in_merged.get(merged_set) {
+            merged_node_list.push(node_list[merged_set].clone());
+            in_merged.set(merged_set, true);
+        }
+
+        if !Rc::ptr_eq(&node_list[node_idx], &node_list[merged_set]) {
+            merge_nodes(&node_list[merged_set], &node_list[node_idx]);
+
+            debug!("Merged node {} to node {}", node_idx, merged_set);
+
+            node_list[node_idx] = node_list[merged_set].clone();
+        }
+    }
+
+    debug!("After merge\n");
+
+    for (machine_idx, node) in node_list.iter().enumerate().take(N) {
+        debug!(
+            "Machine #{:>3}  machines {:0>width$b} / workers {:0>width$b}  ",
+            machine_idx,
+            node.borrow().machines.data,
+            node.borrow().workers.data,
+            width = N
+        );
+    }
+    for worker in 0..N {
+        let node = node_list[worker + N].borrow();
+        debug!(
+            "Worker  #{:>3}  machines {:0>width$b} / workers {:0>width$b} diff:{} ",
+            worker,
+            node.machines.data,
+            node.workers.data,
+            node.num_machines() - node.num_workers(),
+            width = N
+        );
+    }
+
+    merged_node_list.sort_by(|a, b| {
+        (b.borrow().diff() + b.borrow().num_workers())
+            .cmp(&(a.borrow().diff() + a.borrow().num_workers()))
+    });
+
+    for (idx, node) in merged_node_list.iter().enumerate() {
+        //let node = node_list[worker + N].borrow();
+        let node = node.borrow();
+        debug!(
+            "Merged Node  #{:>3}  machines {:0>width$b} / workers {:0>width$b} diff:{:>4} Num machines: {:>3} Num workers: {:>3} ",
+            idx,
+            node.machines.data,
+            node.workers.data,
+            node.diff(),
+            node.num_machines(),
+            node.num_workers(),
+            width = N
+        );
+    }
+
+    merged_node_list
+}
+
+fn get_multiset_elements(merged_node_list: &[Rc<RefCell<Node>>]) -> ( 
+    Vec<i16>, Vec<Vec<i16>>, Vec<MultiSetElement> )
+{
+    let mut multiset = HashMultiSet::new();
+
+    for node in merged_node_list.iter() {
+        let node = node.borrow();
+        if node.diff() == 0 {
+            continue;
+        }
+        let elem = MultiSetElement {
+            num_workers: node.num_workers(),
+            diff: node.diff(),
+        };
+        multiset.insert(elem);
+    }
+
+    let mut distinct = multiset
+        .distinct_elements()
+        .cloned()
+        .collect::<Vec<MultiSetElement>>();
+
+    distinct.sort_by(|a, b| {
+        a.diff
+            .cmp(&b.diff)
+            .then_with(|| a.num_workers.cmp(&b.num_workers))
+    });
+
+    let elem_counts: Vec<i16> = distinct
+        .iter()
+        .map(|mse| multiset.count_of(mse) as i16)
+        .collect();
+
+    let mut cur_elem_counts = vec![0i16; elem_counts.len()];
+    let mut ans = Vec::new();
+
+    enumerate_subsets(
+        &distinct[..],
+        &elem_counts[..],
+        0,
+        0,
+        &mut cur_elem_counts,
+        &mut ans,
+    );
+
+    debug!("NUMBER OF SUBSETS: {}", ans.len());
+
+    for (idx, d) in distinct.iter().enumerate() {
+        debug!(
+            "Distinct non zero diff node #{}: diff={} worker_count={} elem count:{}",
+            idx, d.diff, d.num_workers, elem_counts[idx]
+        );
+    }
+
+    (elem_counts, ans, distinct)
+
+}
+
+fn solve(workers: &[BitVec64]) -> i16
+{
+    let N = workers.len();
+
+    //Find the unique blocks of already connected machines & workers
+    let mut merged_node_list = create_merged_node_list(workers);
+
+    //Find subsets of blocks that either need workers or need machines to become square
+    //the sum of these sumsets will be 0 (so each makes 1 square)
+    let (elem_counts, zero_sum_subsets, distinct) =  get_multiset_elements(&merged_node_list);
+
+    //We want to remove subsets that fully contain other subsets
+    let mut filtered_subsets = Vec::new();
+    for idx1 in 0..zero_sum_subsets.len() {
+        let mut ok = true;
+        for idx2 in 0..zero_sum_subsets.len() {
+            if idx2 == idx1 {
+                continue;
+            }
+            if zero_sum_subsets[idx2].iter().zip(zero_sum_subsets[idx1].iter()).all(|(b, a)| b <= a) {
+                ok = false;
+                break;
+            }
+        }
+
+        if ok {
+            filtered_subsets.push(zero_sum_subsets[idx1].clone());
+        }
+    }
+
+    /*
+    for (idx, ss) in ans.iter().enumerate() {
+        debug!("Ans #{}: {:?}", idx, ss);
+    }*/
+
+    for (idx, ss) in filtered_subsets.iter().enumerate() {
+        debug!("Subset #{}: {:?}", idx, ss);
+    }
+
+    let mut cur_chosen_zero_subsets = Vec::new();
+    let mut chosen_zero_subsets = Vec::new();
+
+    let mut min_workers = i16::MAX;
+
+    best_subsets(
+        &distinct[..],
+        &filtered_subsets[..],
+        0,
+        &mut elem_counts.clone(),
+        &mut cur_chosen_zero_subsets,
+        &mut chosen_zero_subsets,
+        &mut min_workers,
+    );
+
+    debug!(
+        "Best subsets: {:?} counts: {:?}",
+        chosen_zero_subsets, elem_counts
+    );
+
+    let mut used_node = BitVec64::new();
+    let mut has_been_chosen = BitVec64::new();
+
+    for chosen_ss_idx in chosen_zero_subsets.iter() {
+        let ss = &filtered_subsets[*chosen_ss_idx];
+
+        let mut vec_node_list = Vec::new();
+
+        for (distinct_idx, count) in ss.iter().enumerate() {
+            if *count == 0 {
+                continue;
+            }
+            let distinct_node = &distinct[distinct_idx];
+
+            for c in 0..*count {
+                for (idx, merged_node) in merged_node_list.iter().enumerate() {
+                    if has_been_chosen.get(idx) {
+                        continue;
+                    }
+
+                    let node = merged_node.borrow();
+
+                    if node.num_workers() == distinct_node.num_workers
+                        && node.diff() == distinct_node.diff
+                    {
+                        debug!(
+                            "Found node #{} matching distinct node #{} count {}
+workers = {} diff = {}",
+                            idx, distinct_idx, c, distinct_node.num_workers, distinct_node.diff
+                        );
+
+                        vec_node_list.push(idx);
+                        has_been_chosen.set(idx, true);
+                        break;
+                    }
+                }
+            }
+        }
+
+        assert_eq!(
+            vec_node_list.len(),
+            ss.iter().cloned().sum::<i16>() as usize
+        );
+
+        debug!("Merging {:?}", vec_node_list);
+
+        let first_node_idx = vec_node_list[0];
+        for &node_idx in vec_node_list.iter().skip(1) {
+            assert!(!Rc::ptr_eq(
+                &merged_node_list[node_idx],
+                &merged_node_list[first_node_idx]
+            ));
+
+            merge_nodes(
+                &merged_node_list[first_node_idx],
+                &merged_node_list[node_idx],
+            );
+
+            debug!("Merged node {} to node {}", node_idx, first_node_idx);
+
+            merged_node_list[node_idx] = merged_node_list[first_node_idx].clone();
+
+            used_node.set(node_idx, true);
+        }
+    }
+
+    let mut cost: i16 = 0;
+
+    for (idx, merged_node) in merged_node_list.iter().enumerate() {
+        if used_node.get(idx) {
+            continue;
+        }
+
+        assert_eq!(0, merged_node.borrow().diff());
+
+        let node = merged_node.borrow();
+        cost += node.num_machines() * node.num_workers()
+            - (0..N)
+                .map(|w| {
+                    if node.workers.get(w) {
+                        workers[w].pop_count() as i16
+                    } else {
+                        0
+                    }
+                })
+                .sum::<i16>();
+
+    }
+
+    cost
+}
+
+#[derive(Eq, Hash, PartialEq, Clone)]
+struct MultiSetElement
+{
+    num_workers: i16,
+    diff: i16,
+}
+
+///Finds subsets of sum 0
+fn enumerate_subsets(
+    elements: &[MultiSetElement],
+    elem_counts: &[i16],
+    current_index: usize,
+    current_diff: i16,
+
+    current_elem_counts: &mut Vec<i16>,
+    ans: &mut Vec<Vec<i16>>,
+)
+{
+    if current_index == elem_counts.len() {
+        if current_diff == 0 && current_elem_counts.iter().any(|c| *c > 0) {
+            ans.push(current_elem_counts.clone());
+        }
+        return;
+    }
+
+    for count in 0..=elem_counts[current_index] {
+        current_elem_counts[current_index] = count;
+
+        let next_current_diff = current_diff + count * elements[current_index].diff;
+
+        enumerate_subsets(
+            elements,
+            elem_counts,
+            1 + current_index,
+            next_current_diff,
+            current_elem_counts,
+            ans,
+        );
+    }
+}
+
+///Chooses zero-sum subsets with lowest sq worker count
+fn best_subsets(
+    elements: &[MultiSetElement],
+    //list of how many of each element
+    subsets: &[Vec<i16>],
+    current_index: usize,
+    remaining_elements: &mut Vec<i16>,
+
+    cur_ans: &mut Vec<usize>,
+
+    ans: &mut Vec<usize>,
+    min_sq_worker_count: &mut i16,
+)
+{
+    if current_index == subsets.len() {
+        if remaining_elements.iter().all(|re| *re == 0) {
+            let worker_sq_count: i16 = cur_ans
+                .iter()
+                .map(|ss_idx| {
+                    let ss_worker_count = subsets[*ss_idx]
+                        .iter()
+                        .enumerate()
+                        .map(|(idx, count)| count * elements[idx].num_workers)
+                        .sum::<i16>();
+
+                    ss_worker_count * ss_worker_count
+                })
+                .sum();
+
+            if worker_sq_count < *min_sq_worker_count {
+                *min_sq_worker_count = worker_sq_count;
+                ans.clear();
+                ans.extend(cur_ans.iter());
+                debug!("Min square count is {}", worker_sq_count);
+            }
+        }
+        return;
+    }
+
+    best_subsets(
+        elements,
+        subsets,
+        1 + current_index,
+        remaining_elements,
+        cur_ans,
+        ans,
+        min_sq_worker_count,
+    );
+
+    let can_use = remaining_elements
+        .iter()
+        .zip(subsets[current_index].iter())
+        .all(|(re, ss)| re >= ss);
+
+    if can_use {
+        for (re, ss) in remaining_elements
+            .iter_mut()
+            .zip(subsets[current_index].iter())
+        {
+            *re -= *ss;
+            assert!(*re >= 0);
+        }
+        cur_ans.push(current_index);
+
+        //We also want to try to take multiple instances
+        best_subsets(
+            elements,
+            subsets,
+            current_index,
+            remaining_elements,
+            cur_ans,
+            ans,
+            min_sq_worker_count,
+        );
+
+        for (re, ss) in remaining_elements
+            .iter_mut()
+            .zip(subsets[current_index].iter())
+        {
+            *re += *ss;
+            assert!(*re >= 0);
+        }
+        cur_ans.pop();
+    }
+}
diff --git a/kickstart_2014/.gitignore b/kickstart_2014/.gitignore
new file mode 100644
index 0000000..3d6c96d
--- /dev/null
+++ b/kickstart_2014/.gitignore
@@ -0,0 +1,2 @@
+log
+.idea
\ No newline at end of file
diff --git a/kickstart_2014/Cargo.lock b/kickstart_2014/Cargo.lock
new file mode 100644
index 0000000..5f790c9
--- /dev/null
+++ b/kickstart_2014/Cargo.lock
@@ -0,0 +1,254 @@
+[[package]]
+name = "autocfg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bit-vec"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "either"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "itertools"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kickstart_2014"
+version = "0.1.0"
+dependencies = [
+ "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rust-algorithm-problems 0.1.0",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "log"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rust-algorithm-problems"
+version = "0.1.0"
+dependencies = [
+ "bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799"
+"checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf"
+"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
+"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
+"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+"checksum either 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c67353c641dc847124ea1902d69bd753dee9bb3beff9aa3662ecf86c971d1fac"
+"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
+"checksum libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)" = "413f3dfc802c5dc91dc570b05125b6cda9855edfaa9825c9849807876376e70e"
+"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
+"checksum num-bigint 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "57450397855d951f1a41305e54851b1a7b8f5d2e349543a02a2effe25459f718"
+"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
+"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
+"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
+"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+"checksum rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9ea758282efe12823e0d952ddb269d2e1897227e464919a554f2a03ef1b832"
+"checksum rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b7c690732391ae0abafced5015ffb53656abfaec61b342290e5eb56b286a679d"
+"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/kickstart_2014/Cargo.toml b/kickstart_2014/Cargo.toml
new file mode 100644
index 0000000..bd3d68f
--- /dev/null
+++ b/kickstart_2014/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "kickstart_2014"
+version = "0.1.0"
+authors = ["eric7237cire <eric7237cire@gmail.com>"]
+edition = "2018"
+
+[dependencies]
+rust-algorithm-problems = { path = "../codejam" }
+log = {version = "*", features = ["max_level_debug", "release_max_level_warn"] }
+itertools = "*"
\ No newline at end of file
diff --git a/kickstart_2014/format.bat b/kickstart_2014/format.bat
new file mode 100644
index 0000000..0b7cef2
--- /dev/null
+++ b/kickstart_2014/format.bat
@@ -0,0 +1 @@
+cargo +nightly fmt
\ No newline at end of file
diff --git a/kickstart_2014/rustfmt.toml b/kickstart_2014/rustfmt.toml
new file mode 100644
index 0000000..c66d0fe
--- /dev/null
+++ b/kickstart_2014/rustfmt.toml
@@ -0,0 +1,4 @@
+brace_style = "AlwaysNextLine"
+fn_single_line = false
+newline_style = "Unix"
+# control_brace_style = "AlwaysNextLine"
\ No newline at end of file
diff --git a/kickstart_2014/src/main.rs b/kickstart_2014/src/main.rs
new file mode 100644
index 0000000..56f4cfd
--- /dev/null
+++ b/kickstart_2014/src/main.rs
@@ -0,0 +1,20 @@
+mod y2014_round_a;
+
+extern crate codejam;
+
+#[macro_use]
+extern crate log;
+
+use codejam::util::log::init_log;
+
+pub fn run_y2008_round_qual()
+{
+    y2008qual::a::solve_all_cases();
+    y2008qual::b::solve_all_cases();
+    y2008qual::c::solve_all_cases();
+}
+
+fn main() {
+    println!("Hello, world!");
+}
+
diff --git a/kickstart_2014/src/y2014_round_a/a.rs b/kickstart_2014/src/y2014_round_a/a.rs
new file mode 100644
index 0000000..d4bdf73
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/a.rs
@@ -0,0 +1,73 @@
+//use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use std::io::Write;
+use std::usize;
+
+/*
+Greedy
+Induction (proof)
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["A-small-practice", "A-large-practice"],
+        "y2008qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let n = reader.read_int();
+
+                let search_engines: Vec<_> = (0..n).map(|_| reader.read_string()).collect();
+
+                let q = reader.read_int();
+
+                let queries: Vec<_> = (0..q).map(|_| reader.read_string()).collect();
+
+                if case_no != 3 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                writeln!(
+                    buffer,
+                    "Case #{}: {}",
+                    case_no,
+                    solve(search_engines.as_slice(), queries.as_slice())
+                )
+                .unwrap();
+            }
+        },
+    );
+}
+
+fn solve(search_engines: &[String], queries: &[String]) -> usize
+{
+    let mut s_changes = 0;
+    let mut cur_q = 0;
+
+    while cur_q != queries.len() {
+        //given 1 switch, how many queries can we get through by choosing the search engine that occurs the latest in the next
+        //batch of queries
+        let s_potential_progress = search_engines.iter().map(|search| {
+            let idx = queries[cur_q..queries.len()]
+                .iter()
+                .position(|q| q == search);
+            if let Some(idx) = idx {
+                idx + cur_q
+            } else {
+                queries.len()
+            }
+        });
+
+        cur_q = s_potential_progress.max().unwrap();
+        s_changes += 1;
+    }
+
+    if s_changes > 0 {
+        s_changes -= 1;
+    }
+
+    s_changes
+}
diff --git a/kickstart_2014/src/y2014_round_a/b.rs b/kickstart_2014/src/y2014_round_a/b.rs
new file mode 100644
index 0000000..e6a1c2d
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/b.rs
@@ -0,0 +1,129 @@
+//use bit_set::BitSet;
+use codejam::util::codejam::run_cases;
+use std::cmp::min;
+use std::cmp::Ordering;
+use std::io::Write;
+use std::usize;
+
+/*
+Scan line
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["B-small-practice", "B-large-practice"],
+        "y2008qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let t = reader.read_int();
+
+                let (na, nb) = reader.read_tuple_2();
+
+                let read_times = |in_string: String| -> [usize; 2] {
+                    [
+                        &in_string[0..2].parse::<usize>().unwrap() * 60
+                            + in_string[3..5].parse::<usize>().unwrap(),
+                        &in_string[6..8].parse::<usize>().unwrap() * 60
+                            + in_string[9..11].parse::<usize>().unwrap(),
+                    ]
+                };
+
+                let arrivals: Vec<_> = (0..na).map(|_| read_times(reader.read_string())).collect();
+                let departures: Vec<_> =
+                    (0..nb).map(|_| read_times(reader.read_string())).collect();
+
+                if case_no != 1 {
+                    // continue;
+                }
+
+                println!("Solving case {}", case_no);
+
+                let ans = solve(t, arrivals.as_slice(), departures.as_slice());
+                writeln!(buffer, "Case #{}: {} {}", case_no, ans[0], ans[1]).unwrap();
+            }
+        },
+    );
+}
+
+#[derive(Eq, PartialEq)]
+struct TrainEvent
+{
+    time: usize,
+    num_train_change: i64,
+}
+impl Ord for TrainEvent
+{
+    fn cmp(&self, rhs: &TrainEvent) -> Ordering
+    {
+        self.time
+            .cmp(&rhs.time)
+            .then_with(|| rhs.num_train_change.cmp(&self.num_train_change))
+    }
+}
+
+impl PartialOrd for TrainEvent
+{
+    fn partial_cmp(&self, other: &TrainEvent) -> Option<Ordering>
+    {
+        Some(self.cmp(other))
+    }
+}
+
+fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
+{
+    debug!("find_required_trains");
+    station_events.sort();
+
+    //so as trains arrive (+1) they cannot affect the minimum
+    let mut trains_min = 0;
+    let mut trains = 0;
+
+    for evt in station_events.iter() {
+        debug!(
+            "Train event at time {}.  Change {}",
+            evt.time, evt.num_train_change
+        );
+        trains += evt.num_train_change;
+        trains_min = min(trains, trains_min);
+        debug!("Trains now {}.  min {}", trains, trains_min);
+    }
+
+    debug!("Done find_required_trains {} ", trains_min.abs());
+    trains_min.abs()
+}
+
+fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]]) -> [i64; 2]
+{
+    debug!("{:?}", a_to_b[0]);
+
+    let mut station_a_events = Vec::new();
+    let mut station_b_events = Vec::new();
+
+    for time in a_to_b.iter() {
+        station_a_events.push(TrainEvent {
+            time: time[0],
+            num_train_change: -1,
+        });
+        station_b_events.push(TrainEvent {
+            time: time[1] + turn_around_time,
+            num_train_change: 1,
+        });
+    }
+    for time in b_to_a.iter() {
+        station_b_events.push(TrainEvent {
+            time: time[0],
+            num_train_change: -1,
+        });
+        station_a_events.push(TrainEvent {
+            time: time[1] + turn_around_time,
+            num_train_change: 1,
+        });
+    }
+
+    [
+        find_required_trains(&mut station_a_events),
+        find_required_trains(&mut station_b_events),
+    ]
+}
diff --git a/kickstart_2014/src/y2014_round_a/c.rs b/kickstart_2014/src/y2014_round_a/c.rs
new file mode 100644
index 0000000..823ac16
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/c.rs
@@ -0,0 +1,170 @@
+use codejam::util::codejam::run_cases;
+use std::f64::consts::PI;
+use std::io::Write;
+
+/*
+Circle / slice area
+Direct Geometry area calculations
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let floats = reader.read_num_line();
+
+                println!("Solving case {}", case_no);
+
+                let ans = solve(floats[0], floats[1], floats[2], floats[3], floats[4]);
+                writeln!(buffer, "Case #{}: {}", case_no, ans).unwrap();
+            }
+        },
+    );
+}
+
+fn circle(x: f64, r: f64) -> f64
+{
+    (r.powi(2) - x.powi(2)).sqrt()
+}
+
+fn integral_circle(x: f64, r: f64) -> f64
+{
+    let y = circle(x, r);
+    (x * y + (x / y).atan() * r.powi(2)) / 2.
+}
+
+fn solve(fly_radius: f64, racket_radius: f64, t: f64, chord_radius: f64, gap_len: f64) -> f64
+{
+    /*
+    dbg!( fly_radius );
+    dbg!( racket_radius);
+    dbg!( t) ; //Racket outer circle radius
+    dbg!( chord_radius);
+    dbg!( gap_len);
+    */
+
+    if gap_len < 2. * fly_radius {
+        return 1f64;
+    }
+    if fly_radius > racket_radius - t {
+        return 1f64;
+    }
+
+    let total_area = PI * racket_radius.powi(2);
+    let mut miss_area = 0f64;
+
+    //Go through squares with x1 < x2 ; y1 < y2
+    //These squares are where the fly can get through
+
+    //To go from x1 to x2 or y1 to y2
+    let next_position2_inc = gap_len - 2. * fly_radius;
+
+    //To go from x2 to x1' or y2 to y1'
+    let next_position1_inc = 2. * chord_radius + 2. * fly_radius;
+
+    //The first x1 and y1
+    let first_position = chord_radius + fly_radius;
+
+    //The lenght of a full square + chords
+    let square_length = next_position1_inc + next_position2_inc;
+
+    //The actual radius we generally care about
+    let inner_radius = racket_radius - t - fly_radius;
+
+    //dbg!(inner_radius);
+
+    //Go up chord + fly, when do wo intersect
+    let x_stop = circle(chord_radius + fly_radius, inner_radius);
+
+    //dbg!(x_stop);
+
+    let mut x1 = first_position;
+
+    //dbg!(x1);
+
+    let num_cols = ((x_stop - x1) / square_length).ceil() as u64;
+
+    //Are that a fly can get through
+    let regular_square_area = next_position2_inc * next_position2_inc;
+
+    assert!(x1 <= x_stop);
+
+    for col in 0..num_cols {
+        let mut x2 = x1 + next_position2_inc;
+        if col == num_cols - 1 && x_stop < x2 {
+            x2 = x_stop
+        }
+
+        let mut y1 = first_position;
+        let y_stop = circle(x1, inner_radius);
+
+        let y_arc_intersection = circle(x2, inner_radius);
+
+        let num_squares = ((y_stop - y1) / square_length).ceil() as u64;
+
+        //The real time saver.  We need to know the first y2 that is < y_arc_intersection
+        //
+        // y2_0 + square_length * lowest_arc_intersection_square_num < y_arc_intersection
+        // square_length * lowest_arc_intersection_square_num < y_arc_intersection - y2_0
+        // lowest_arc_intersection_square_num > (y_arc_intersection - y2_0) / square_length (dividing switches comparison)
+        // lowest_arc_intersection_square_num == ceil ( ... )
+        let lowest_arc_intersection_square_num =
+            (((y_arc_intersection - (y1 + next_position2_inc)) / square_length).ceil()) as u64;
+
+        //Catch up y1
+        y1 += lowest_arc_intersection_square_num as f64 * square_length;
+
+        //Init missed area with all the regular squares
+        let mut slice_miss_area = (lowest_arc_intersection_square_num as f64) * regular_square_area;
+
+        for square_num in lowest_arc_intersection_square_num..num_squares {
+            let mut y2 = y1 + next_position2_inc;
+            if square_num == num_squares - 1 && y_stop < y2 {
+                y2 = y_stop;
+            }
+            debug!("  y1:[{}] y2:[{}]", y1, y2);
+
+            //This means an arc is going through the square
+            let mut x1_arc_intersection = circle(y2, inner_radius);
+            let mut x2_arc_intersection = circle(y1, inner_radius);
+
+            debug!(
+                "  X1 arc {} x2 arc {}",
+                x1_arc_intersection, x2_arc_intersection
+            );
+
+            //take care of the curve
+            if x1 > x1_arc_intersection {
+                x1_arc_intersection = x1
+            }
+            if x2 < x2_arc_intersection {
+                x2_arc_intersection = x2
+            }
+
+            slice_miss_area += (y2 - y1) * (x2_arc_intersection - x1);
+
+            let area_under_curve = integral_circle(x2_arc_intersection, inner_radius)
+                - integral_circle(x1_arc_intersection, inner_radius);
+            let rect_area = y2 * (x2_arc_intersection - x1_arc_intersection);
+            let arc_area = rect_area - area_under_curve;
+
+            //Subtract what the curve cut off
+            slice_miss_area -= arc_area;
+
+            y1 = y2 + next_position1_inc;
+
+            //debug!( "  Slice Miss area: {} total area: {}", slice_miss_area,slice_total_area);
+        }
+
+        miss_area += slice_miss_area;
+        x1 = x2 + next_position1_inc;
+    }
+
+    miss_area *= 4.;
+
+    1. - miss_area / total_area
+}
diff --git a/kickstart_2014/src/y2014_round_a/d.rs b/kickstart_2014/src/y2014_round_a/d.rs
new file mode 100644
index 0000000..e69de29
diff --git a/kickstart_2014/src/y2014_round_a/mod.rs b/kickstart_2014/src/y2014_round_a/mod.rs
new file mode 100644
index 0000000..4f053df
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/mod.rs
@@ -0,0 +1,3 @@
+pub mod a;
+pub mod b;
+pub mod c;

From c693d0abf3df824c685e806dbb9ea68c1a56c2b8 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 27 Feb 2019 23:48:15 -0300
Subject: [PATCH 115/122] kickstart 2014 a

---
 kickstart_2014/.vscode/launch.json            |   20 +
 kickstart_2014/.vscode/settings.json          |    7 +
 kickstart_2014/.vscode/tasks.json             |   23 +
 kickstart_2014/src/main.rs                    |   13 +-
 .../src/y2014_round_a/A-large-practice.in     | 2001 +++++++++++++++++
 kickstart_2014/src/y2014_round_a/A-sample.in  |    5 +
 kickstart_2014/src/y2014_round_a/A-sample.out |    4 +
 .../src/y2014_round_a/A-small-practice.in     |  101 +
 kickstart_2014/src/y2014_round_a/a.rs         |  106 +-
 9 files changed, 2237 insertions(+), 43 deletions(-)
 create mode 100644 kickstart_2014/.vscode/launch.json
 create mode 100644 kickstart_2014/.vscode/settings.json
 create mode 100644 kickstart_2014/.vscode/tasks.json
 create mode 100644 kickstart_2014/src/y2014_round_a/A-large-practice.in
 create mode 100644 kickstart_2014/src/y2014_round_a/A-sample.in
 create mode 100644 kickstart_2014/src/y2014_round_a/A-sample.out
 create mode 100644 kickstart_2014/src/y2014_round_a/A-small-practice.in

diff --git a/kickstart_2014/.vscode/launch.json b/kickstart_2014/.vscode/launch.json
new file mode 100644
index 0000000..37f2812
--- /dev/null
+++ b/kickstart_2014/.vscode/launch.json
@@ -0,0 +1,20 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "(Windows) Launch",
+            "type": "cppvsdbg",
+            "request": "launch",
+            "preLaunchTask": "cargo build",
+            "program": "${workspaceFolder}/target/debug/kickstart_2014.exe",                        
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": true
+        }
+    ]
+}
\ No newline at end of file
diff --git a/kickstart_2014/.vscode/settings.json b/kickstart_2014/.vscode/settings.json
new file mode 100644
index 0000000..23eea89
--- /dev/null
+++ b/kickstart_2014/.vscode/settings.json
@@ -0,0 +1,7 @@
+{
+    "files.autoSave": "onFocusChange",
+    "editor.autoClosingBrackets": "never",
+    "debug.allowBreakpointsEverywhere": true,
+    "rust.clippy_preference": "on",
+    
+}
\ No newline at end of file
diff --git a/kickstart_2014/.vscode/tasks.json b/kickstart_2014/.vscode/tasks.json
new file mode 100644
index 0000000..5f20dbc
--- /dev/null
+++ b/kickstart_2014/.vscode/tasks.json
@@ -0,0 +1,23 @@
+{
+    // See https://go.microsoft.com/fwlink/?LinkId=733558
+    // for the documentation about the tasks.json format
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "type": "cargo",
+            "label": "cargo build",
+            "command": "cargo",
+            "args": [
+                "build"
+            ],
+            "problemMatcher": [
+                "$rustc"
+            ],
+            "group": {
+                "kind": "build",
+                "isDefault": true
+            }
+        },
+        
+    ]
+}
\ No newline at end of file
diff --git a/kickstart_2014/src/main.rs b/kickstart_2014/src/main.rs
index 56f4cfd..1f2618e 100644
--- a/kickstart_2014/src/main.rs
+++ b/kickstart_2014/src/main.rs
@@ -7,14 +7,13 @@ extern crate log;
 
 use codejam::util::log::init_log;
 
-pub fn run_y2008_round_qual()
+pub fn run_y2014_round_a()
 {
-    y2008qual::a::solve_all_cases();
-    y2008qual::b::solve_all_cases();
-    y2008qual::c::solve_all_cases();
+    y2014_round_a::a::solve_all_cases();
 }
 
-fn main() {
-    println!("Hello, world!");
+fn main()
+{
+    init_log();
+    y2014_round_a::a::solve_all_cases();
 }
-
diff --git a/kickstart_2014/src/y2014_round_a/A-large-practice.in b/kickstart_2014/src/y2014_round_a/A-large-practice.in
new file mode 100644
index 0000000..d216f0a
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/A-large-practice.in
@@ -0,0 +1,2001 @@
+2000
+6 0000000 0000000 0000000 0000000 0000000 0000000
+6 1111111 1110000 1011111 1011011 0110011 1111001
+7 0010000 0010000 0010000 0010000 0010000 0010000 0010000
+2 1011001 0110001
+1 0000000
+2 0000000 0000000
+3 0000000 0000000 0000000
+4 0000000 0000000 0000000 0000000
+5 0000000 0000000 0000000 0000000 0000000
+6 0000000 0000000 0000000 0000000 0000000 0000000
+7 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+8 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+9 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+10 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+11 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+12 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+13 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+14 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+15 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000
+1 1000000
+2 1000000 1000000
+3 1000000 1000000 1000000
+4 1000000 1000000 1000000 1000000
+5 1000000 1000000 1000000 1000000 1000000
+6 1000000 1000000 1000000 1000000 1000000 1000000
+7 1000000 1000000 1000000 1000000 1000000 1000000 0000000
+8 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000
+9 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000 1000000
+10 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000 1000000 0000000
+11 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000 1000000 0000000 1000000
+12 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000 1000000 0000000 1000000 1000000
+13 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000 1000000 0000000 1000000 1000000 1000000
+14 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000 1000000 0000000 1000000 1000000 1000000 1000000
+15 1000000 1000000 1000000 1000000 1000000 1000000 0000000 1000000 1000000 0000000 1000000 1000000 1000000 1000000 1000000
+1 0100000
+2 0100000 0100000
+3 0100000 0100000 0100000
+4 0100000 0100000 0100000 0100000
+5 0100000 0100000 0100000 0100000 0000000
+6 0100000 0100000 0100000 0100000 0000000 0000000
+7 0100000 0100000 0100000 0100000 0000000 0000000 0100000
+8 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000
+9 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000 0100000
+10 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000 0100000 0100000
+11 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000 0100000 0100000 0100000
+12 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000 0100000 0100000 0100000 0100000
+13 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000 0100000 0100000 0100000 0100000 0100000
+14 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000 0100000 0100000 0100000 0100000 0100000 0100000
+15 0100000 0100000 0100000 0100000 0000000 0000000 0100000 0100000 0100000 0100000 0100000 0100000 0100000 0100000 0000000
+1 1100000
+2 1100000 1100000
+3 1100000 1100000 1100000
+4 1100000 1100000 1100000 1100000
+5 1100000 1100000 1100000 1100000 1000000
+6 1100000 1100000 1100000 1100000 1000000 1000000
+7 1100000 1100000 1100000 1100000 1000000 1000000 0100000
+8 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000
+9 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000
+10 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000
+11 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000
+12 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000 1100000
+13 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000 1100000 1100000
+14 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000 1100000 1100000 1100000
+15 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000 1100000 1100000 1100000 1000000
+1 0010000
+2 0010000 0010000
+3 0010000 0010000 0010000
+4 0010000 0010000 0010000 0010000
+5 0010000 0010000 0010000 0010000 0010000
+6 0010000 0010000 0010000 0010000 0010000 0010000
+7 0010000 0010000 0010000 0010000 0010000 0010000 0010000
+8 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000
+9 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000
+10 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000
+11 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000
+12 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000
+13 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000 0010000
+14 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000 0010000 0010000
+15 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000 0010000 0010000 0010000
+1 1010000
+2 1010000 1010000
+3 1010000 1010000 1010000
+4 1010000 1010000 1010000 1010000
+5 1010000 1010000 1010000 1010000 1010000
+6 1010000 1010000 1010000 1010000 1010000 1010000
+7 1010000 1010000 1010000 1010000 1010000 1010000 0010000
+8 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000
+9 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000
+10 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000
+11 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000
+12 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000
+13 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000
+14 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000 1010000
+15 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000 1010000 1010000
+1 0110000
+2 0110000 0110000
+3 0110000 0110000 0110000
+4 0110000 0110000 0110000 0110000
+5 0110000 0110000 0110000 0110000 0010000
+6 0110000 0110000 0110000 0110000 0010000 0010000
+7 0110000 0110000 0110000 0110000 0010000 0010000 0110000
+8 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000
+9 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000
+10 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000
+11 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000
+12 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000
+13 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000
+14 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000
+15 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000
+1 1110000
+2 1110000 1110000
+3 1110000 1110000 1110000
+4 1110000 1110000 1110000 1110000
+5 1110000 1110000 1110000 1110000 1010000
+6 1110000 1110000 1110000 1110000 1010000 1010000
+7 1110000 1110000 1110000 1110000 1010000 1010000 0110000
+8 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000
+9 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000 1100000
+10 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000 1100000 0110000
+11 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000 1100000 0110000 1110000
+12 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000 1100000 0110000 1110000 1110000
+13 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000 1100000 0110000 1110000 1110000 1110000
+14 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000 1100000 0110000 1110000 1110000 1110000 1110000
+15 1110000 1110000 1110000 1110000 1010000 1010000 0110000 1110000 1100000 0110000 1110000 1110000 1110000 1110000 1010000
+1 0001000
+2 0001000 0001000
+3 0001000 0001000 0001000
+4 0001000 0001000 0001000 0000000
+5 0001000 0001000 0001000 0000000 0001000
+6 0001000 0001000 0001000 0000000 0001000 0001000
+7 0001000 0001000 0001000 0000000 0001000 0001000 0000000
+8 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000
+9 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000
+10 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0000000
+11 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0000000 0001000
+12 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000
+13 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0001000
+14 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0001000 0000000
+15 0001000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0000000 0001000 0001000 0001000 0000000 0001000
+1 1001000
+2 1001000 1001000
+3 1001000 1001000 1001000
+4 1001000 1001000 1001000 1000000
+5 1001000 1001000 1001000 1000000 1001000
+6 1001000 1001000 1001000 1000000 1001000 1001000
+7 1001000 1001000 1001000 1000000 1001000 1001000 0000000
+8 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000
+9 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000 1001000
+10 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000 1001000 0000000
+11 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000 1001000 0000000 1001000
+12 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000 1001000 0000000 1001000 1001000
+13 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000 1001000 0000000 1001000 1001000 1001000
+14 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000 1001000 0000000 1001000 1001000 1001000 1000000
+15 1001000 1001000 1001000 1000000 1001000 1001000 0000000 1001000 1001000 0000000 1001000 1001000 1001000 1000000 1001000
+1 0101000
+2 0101000 0101000
+3 0101000 0101000 0101000
+4 0101000 0101000 0101000 0100000
+5 0101000 0101000 0101000 0100000 0001000
+6 0101000 0101000 0101000 0100000 0001000 0001000
+7 0101000 0101000 0101000 0100000 0001000 0001000 0100000
+8 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000
+9 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000 0101000
+10 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000 0101000 0100000
+11 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000 0101000 0100000 0101000
+12 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000 0101000 0100000 0101000 0101000
+13 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000 0101000 0100000 0101000 0101000 0101000
+14 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000 0101000 0100000 0101000 0101000 0101000 0100000
+15 0101000 0101000 0101000 0100000 0001000 0001000 0100000 0101000 0101000 0100000 0101000 0101000 0101000 0100000 0001000
+1 1101000
+2 1101000 1101000
+3 1101000 1101000 1101000
+4 1101000 1101000 1101000 1100000
+5 1101000 1101000 1101000 1100000 1001000
+6 1101000 1101000 1101000 1100000 1001000 1001000
+7 1101000 1101000 1101000 1100000 1001000 1001000 0100000
+8 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000
+9 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000
+10 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000
+11 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000
+12 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000
+13 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000
+14 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000
+15 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000
+1 0011000
+2 0011000 0011000
+3 0011000 0011000 0011000
+4 0011000 0011000 0011000 0010000
+5 0011000 0011000 0011000 0010000 0011000
+6 0011000 0011000 0011000 0010000 0011000 0011000
+7 0011000 0011000 0011000 0010000 0011000 0011000 0010000
+8 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000
+9 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000
+10 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000 0010000
+11 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000 0010000 0011000
+12 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000 0010000 0011000 0011000
+13 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000 0010000 0011000 0011000 0011000
+14 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000 0010000 0011000 0011000 0011000 0010000
+15 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000 0010000 0011000 0011000 0011000 0010000 0011000
+1 1011000
+2 1011000 1011000
+3 1011000 1011000 1011000
+4 1011000 1011000 1011000 1010000
+5 1011000 1011000 1011000 1010000 1011000
+6 1011000 1011000 1011000 1010000 1011000 1011000
+7 1011000 1011000 1011000 1010000 1011000 1011000 0010000
+8 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000
+9 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000 1001000
+10 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000 1001000 0010000
+11 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000 1001000 0010000 1011000
+12 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000 1001000 0010000 1011000 1011000
+13 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000 1001000 0010000 1011000 1011000 1011000
+14 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000 1001000 0010000 1011000 1011000 1011000 1010000
+15 1011000 1011000 1011000 1010000 1011000 1011000 0010000 1011000 1001000 0010000 1011000 1011000 1011000 1010000 1011000
+1 0111000
+2 0111000 0111000
+3 0111000 0111000 0111000
+4 0111000 0111000 0111000 0110000
+5 0111000 0111000 0111000 0110000 0011000
+6 0111000 0111000 0111000 0110000 0011000 0011000
+7 0111000 0111000 0111000 0110000 0011000 0011000 0110000
+8 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000
+9 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000
+10 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000
+11 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000
+12 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000
+13 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000
+14 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000
+15 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000
+1 1111000
+2 1111000 1111000
+3 1111000 1111000 1111000
+4 1111000 1111000 1111000 1110000
+5 1111000 1111000 1111000 1110000 1011000
+6 1111000 1111000 1111000 1110000 1011000 1011000
+7 1111000 1111000 1111000 1110000 1011000 1011000 0110000
+8 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000
+9 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000 1101000
+10 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000 1101000 0110000
+11 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000 1101000 0110000 1111000
+12 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000 1101000 0110000 1111000 1111000
+13 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000 1101000 0110000 1111000 1111000 1111000
+14 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000 1101000 0110000 1111000 1111000 1111000 1110000
+15 1111000 1111000 1111000 1110000 1011000 1011000 0110000 1111000 1101000 0110000 1111000 1111000 1111000 1110000 1011000
+1 0000100
+2 0000100 0000000
+3 0000100 0000000 0000100
+4 0000100 0000000 0000100 0000000
+5 0000100 0000000 0000100 0000000 0000100
+6 0000100 0000000 0000100 0000000 0000100 0000000
+7 0000100 0000000 0000100 0000000 0000100 0000000 0000000
+8 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000
+9 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000 0000100
+10 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000 0000100 0000000
+11 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000 0000100 0000000 0000100
+12 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000 0000100 0000000 0000100 0000000
+13 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000 0000100 0000000 0000100 0000000 0000100
+14 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000 0000100 0000000 0000100 0000000 0000100 0000000
+15 0000100 0000000 0000100 0000000 0000100 0000000 0000000 0000000 0000100 0000000 0000100 0000000 0000100 0000000 0000100
+1 1000100
+2 1000100 1000000
+3 1000100 1000000 1000100
+4 1000100 1000000 1000100 1000000
+5 1000100 1000000 1000100 1000000 1000100
+6 1000100 1000000 1000100 1000000 1000100 1000000
+7 1000100 1000000 1000100 1000000 1000100 1000000 0000000
+8 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000
+9 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000 1000100
+10 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000 1000100 0000000
+11 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000 1000100 0000000 1000100
+12 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000 1000100 0000000 1000100 1000000
+13 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000 1000100 0000000 1000100 1000000 1000100
+14 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000 1000100 0000000 1000100 1000000 1000100 1000000
+15 1000100 1000000 1000100 1000000 1000100 1000000 0000000 1000000 1000100 0000000 1000100 1000000 1000100 1000000 1000100
+1 0100100
+2 0100100 0100000
+3 0100100 0100000 0100100
+4 0100100 0100000 0100100 0100000
+5 0100100 0100000 0100100 0100000 0000100
+6 0100100 0100000 0100100 0100000 0000100 0000000
+7 0100100 0100000 0100100 0100000 0000100 0000000 0100000
+8 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000
+9 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000 0100100
+10 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000 0100100 0100000
+11 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000 0100100 0100000 0100100
+12 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000 0100100 0100000 0100100 0100000
+13 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000 0100100 0100000 0100100 0100000 0100100
+14 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000 0100100 0100000 0100100 0100000 0100100 0100000
+15 0100100 0100000 0100100 0100000 0000100 0000000 0100000 0100000 0100100 0100000 0100100 0100000 0100100 0100000 0000100
+1 1100100
+2 1100100 1100000
+3 1100100 1100000 1100100
+4 1100100 1100000 1100100 1100000
+5 1100100 1100000 1100100 1100000 1000100
+6 1100100 1100000 1100100 1100000 1000100 1000000
+7 1100100 1100000 1100100 1100000 1000100 1000000 0100000
+8 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000
+9 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100
+10 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000
+11 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100
+12 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000
+13 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100
+14 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000
+15 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100
+1 0010100
+2 0010100 0010000
+3 0010100 0010000 0010100
+4 0010100 0010000 0010100 0010000
+5 0010100 0010000 0010100 0010000 0010100
+6 0010100 0010000 0010100 0010000 0010100 0010000
+7 0010100 0010000 0010100 0010000 0010100 0010000 0010000
+8 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000
+9 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100
+10 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000
+11 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100
+12 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000
+13 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100
+14 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100 0010000
+15 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100 0010000 0010100
+1 1010100
+2 1010100 1010000
+3 1010100 1010000 1010100
+4 1010100 1010000 1010100 1010000
+5 1010100 1010000 1010100 1010000 1010100
+6 1010100 1010000 1010100 1010000 1010100 1010000
+7 1010100 1010000 1010100 1010000 1010100 1010000 0010000
+8 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000
+9 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100
+10 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000
+11 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100
+12 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000
+13 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000 1010100
+14 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000 1010100 1010000
+15 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000 1010100 1010000 1010100
+1 0110100
+2 0110100 0110000
+3 0110100 0110000 0110100
+4 0110100 0110000 0110100 0110000
+5 0110100 0110000 0110100 0110000 0010100
+6 0110100 0110000 0110100 0110000 0010100 0010000
+7 0110100 0110000 0110100 0110000 0010100 0010000 0110000
+8 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000
+9 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000 0100100
+10 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000 0100100 0110000
+11 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000 0100100 0110000 0110100
+12 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000 0100100 0110000 0110100 0110000
+13 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000 0100100 0110000 0110100 0110000 0110100
+14 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000 0100100 0110000 0110100 0110000 0110100 0110000
+15 0110100 0110000 0110100 0110000 0010100 0010000 0110000 0110000 0100100 0110000 0110100 0110000 0110100 0110000 0010100
+1 1110100
+2 1110100 1110000
+3 1110100 1110000 1110100
+4 1110100 1110000 1110100 1110000
+5 1110100 1110000 1110100 1110000 1010100
+6 1110100 1110000 1110100 1110000 1010100 1010000
+7 1110100 1110000 1110100 1110000 1010100 1010000 0110000
+8 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000
+9 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000 1100100
+10 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000 1100100 0110000
+11 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000 1100100 0110000 1110100
+12 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000 1100100 0110000 1110100 1110000
+13 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000 1100100 0110000 1110100 1110000 1110100
+14 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000 1100100 0110000 1110100 1110000 1110100 1110000
+15 1110100 1110000 1110100 1110000 1010100 1010000 0110000 1110000 1100100 0110000 1110100 1110000 1110100 1110000 1010100
+1 0001100
+2 0001100 0001000
+3 0001100 0001000 0001100
+4 0001100 0001000 0001100 0000000
+5 0001100 0001000 0001100 0000000 0001100
+6 0001100 0001000 0001100 0000000 0001100 0001000
+7 0001100 0001000 0001100 0000000 0001100 0001000 0000000
+8 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000
+9 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000 0001100
+10 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000 0001100 0000000
+11 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000 0001100 0000000 0001100
+12 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000 0001100 0000000 0001100 0001000
+13 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000 0001100 0000000 0001100 0001000 0001100
+14 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000 0001100 0000000 0001100 0001000 0001100 0000000
+15 0001100 0001000 0001100 0000000 0001100 0001000 0000000 0001000 0001100 0000000 0001100 0001000 0001100 0000000 0001100
+1 1001100
+2 1001100 1001000
+3 1001100 1001000 1001100
+4 1001100 1001000 1001100 1000000
+5 1001100 1001000 1001100 1000000 1001100
+6 1001100 1001000 1001100 1000000 1001100 1001000
+7 1001100 1001000 1001100 1000000 1001100 1001000 0000000
+8 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000
+9 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100
+10 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100 0000000
+11 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100 0000000 1001100
+12 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100 0000000 1001100 1001000
+13 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100 0000000 1001100 1001000 1001100
+14 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100 0000000 1001100 1001000 1001100 1000000
+15 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100 0000000 1001100 1001000 1001100 1000000 1001100
+1 0101100
+2 0101100 0101000
+3 0101100 0101000 0101100
+4 0101100 0101000 0101100 0100000
+5 0101100 0101000 0101100 0100000 0001100
+6 0101100 0101000 0101100 0100000 0001100 0001000
+7 0101100 0101000 0101100 0100000 0001100 0001000 0100000
+8 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000
+9 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100
+10 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000
+11 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100
+12 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000
+13 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000 0101100
+14 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000 0101100 0100000
+15 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000 0101100 0100000 0001100
+1 1101100
+2 1101100 1101000
+3 1101100 1101000 1101100
+4 1101100 1101000 1101100 1100000
+5 1101100 1101000 1101100 1100000 1001100
+6 1101100 1101000 1101100 1100000 1001100 1001000
+7 1101100 1101000 1101100 1100000 1001100 1001000 0100000
+8 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000
+9 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000 1101100
+10 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000 1101100 0100000
+11 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000 1101100 0100000 1101100
+12 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000 1101100 0100000 1101100 1101000
+13 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000 1101100 0100000 1101100 1101000 1101100
+14 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000 1101100 0100000 1101100 1101000 1101100 1100000
+15 1101100 1101000 1101100 1100000 1001100 1001000 0100000 1101000 1101100 0100000 1101100 1101000 1101100 1100000 1001100
+1 0011100
+2 0011100 0011000
+3 0011100 0011000 0011100
+4 0011100 0011000 0011100 0010000
+5 0011100 0011000 0011100 0010000 0011100
+6 0011100 0011000 0011100 0010000 0011100 0011000
+7 0011100 0011000 0011100 0010000 0011100 0011000 0010000
+8 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000
+9 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000 0001100
+10 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000 0001100 0010000
+11 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000 0001100 0010000 0011100
+12 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000 0001100 0010000 0011100 0011000
+13 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000 0001100 0010000 0011100 0011000 0011100
+14 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000 0001100 0010000 0011100 0011000 0011100 0010000
+15 0011100 0011000 0011100 0010000 0011100 0011000 0010000 0011000 0001100 0010000 0011100 0011000 0011100 0010000 0011100
+1 1011100
+2 1011100 1011000
+3 1011100 1011000 1011100
+4 1011100 1011000 1011100 1010000
+5 1011100 1011000 1011100 1010000 1011100
+6 1011100 1011000 1011100 1010000 1011100 1011000
+7 1011100 1011000 1011100 1010000 1011100 1011000 0010000
+8 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000
+9 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000 1001100
+10 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000 1001100 0010000
+11 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000 1001100 0010000 1011100
+12 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000 1001100 0010000 1011100 1011000
+13 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000 1001100 0010000 1011100 1011000 1011100
+14 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000 1001100 0010000 1011100 1011000 1011100 1010000
+15 1011100 1011000 1011100 1010000 1011100 1011000 0010000 1011000 1001100 0010000 1011100 1011000 1011100 1010000 1011100
+1 0111100
+2 0111100 0111000
+3 0111100 0111000 0111100
+4 0111100 0111000 0111100 0110000
+5 0111100 0111000 0111100 0110000 0011100
+6 0111100 0111000 0111100 0110000 0011100 0011000
+7 0111100 0111000 0111100 0110000 0011100 0011000 0110000
+8 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000
+9 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000 0101100
+10 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000 0101100 0110000
+11 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000 0101100 0110000 0111100
+12 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000 0101100 0110000 0111100 0111000
+13 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000 0101100 0110000 0111100 0111000 0111100
+14 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000 0101100 0110000 0111100 0111000 0111100 0110000
+15 0111100 0111000 0111100 0110000 0011100 0011000 0110000 0111000 0101100 0110000 0111100 0111000 0111100 0110000 0011100
+1 1111100
+2 1111100 1111000
+3 1111100 1111000 1111100
+4 1111100 1111000 1111100 1110000
+5 1111100 1111000 1111100 1110000 1011100
+6 1111100 1111000 1111100 1110000 1011100 1011000
+7 1111100 1111000 1111100 1110000 1011100 1011000 0110000
+8 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000
+9 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100
+10 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000
+11 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100
+12 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000
+13 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100
+14 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000
+15 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100
+1 0000010
+2 0000010 0000010
+3 0000010 0000010 0000010
+4 0000010 0000010 0000010 0000000
+5 0000010 0000010 0000010 0000000 0000010
+6 0000010 0000010 0000010 0000000 0000010 0000010
+7 0000010 0000010 0000010 0000000 0000010 0000010 0000010
+8 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000
+9 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000
+10 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000
+11 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010
+12 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010
+13 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010
+14 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000
+15 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010
+1 1000010
+2 1000010 1000010
+3 1000010 1000010 1000010
+4 1000010 1000010 1000010 1000000
+5 1000010 1000010 1000010 1000000 1000010
+6 1000010 1000010 1000010 1000000 1000010 1000010
+7 1000010 1000010 1000010 1000000 1000010 1000010 0000010
+8 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000
+9 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000
+10 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000
+11 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010
+12 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010
+13 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010
+14 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000
+15 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010
+1 0100010
+2 0100010 0100010
+3 0100010 0100010 0100010
+4 0100010 0100010 0100010 0100000
+5 0100010 0100010 0100010 0100000 0000010
+6 0100010 0100010 0100010 0100000 0000010 0000010
+7 0100010 0100010 0100010 0100000 0000010 0000010 0100010
+8 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000
+9 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000
+10 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000
+11 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010
+12 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010
+13 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010
+14 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000
+15 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010
+1 1100010
+2 1100010 1100010
+3 1100010 1100010 1100010
+4 1100010 1100010 1100010 1100000
+5 1100010 1100010 1100010 1100000 1000010
+6 1100010 1100010 1100010 1100000 1000010 1000010
+7 1100010 1100010 1100010 1100000 1000010 1000010 0100010
+8 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000
+9 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000
+10 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000
+11 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010
+12 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010
+13 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010
+14 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000
+15 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000 1000010
+1 0010010
+2 0010010 0010010
+3 0010010 0010010 0010010
+4 0010010 0010010 0010010 0010000
+5 0010010 0010010 0010010 0010000 0010010
+6 0010010 0010010 0010010 0010000 0010010 0010010
+7 0010010 0010010 0010010 0010000 0010010 0010010 0010010
+8 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000
+9 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000
+10 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000
+11 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010
+12 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010 0010010
+13 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010 0010010 0010010
+14 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010 0010010 0010010 0010000
+15 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010 0010010 0010010 0010000 0010010
+1 1010010
+2 1010010 1010010
+3 1010010 1010010 1010010
+4 1010010 1010010 1010010 1010000
+5 1010010 1010010 1010010 1010000 1010010
+6 1010010 1010010 1010010 1010000 1010010 1010010
+7 1010010 1010010 1010010 1010000 1010010 1010010 0010010
+8 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000
+9 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000 1000000
+10 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000 1000000 0010000
+11 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000 1000000 0010000 1010010
+12 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000 1000000 0010000 1010010 1010010
+13 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000 1000000 0010000 1010010 1010010 1010010
+14 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000 1000000 0010000 1010010 1010010 1010010 1010000
+15 1010010 1010010 1010010 1010000 1010010 1010010 0010010 1010000 1000000 0010000 1010010 1010010 1010010 1010000 1010010
+1 0110010
+2 0110010 0110010
+3 0110010 0110010 0110010
+4 0110010 0110010 0110010 0110000
+5 0110010 0110010 0110010 0110000 0010010
+6 0110010 0110010 0110010 0110000 0010010 0010010
+7 0110010 0110010 0110010 0110000 0010010 0010010 0110010
+8 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000
+9 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000 0100000
+10 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000 0100000 0110000
+11 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000 0100000 0110000 0110010
+12 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000 0100000 0110000 0110010 0110010
+13 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000 0100000 0110000 0110010 0110010 0110010
+14 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000 0100000 0110000 0110010 0110010 0110010 0110000
+15 0110010 0110010 0110010 0110000 0010010 0010010 0110010 0110000 0100000 0110000 0110010 0110010 0110010 0110000 0010010
+1 1110010
+2 1110010 1110010
+3 1110010 1110010 1110010
+4 1110010 1110010 1110010 1110000
+5 1110010 1110010 1110010 1110000 1010010
+6 1110010 1110010 1110010 1110000 1010010 1010010
+7 1110010 1110010 1110010 1110000 1010010 1010010 0110010
+8 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000
+9 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000 1100000
+10 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000 1100000 0110000
+11 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000 1100000 0110000 1110010
+12 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000 1100000 0110000 1110010 1110010
+13 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000 1100000 0110000 1110010 1110010 1110010
+14 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000 1100000 0110000 1110010 1110010 1110010 1110000
+15 1110010 1110010 1110010 1110000 1010010 1010010 0110010 1110000 1100000 0110000 1110010 1110010 1110010 1110000 1010010
+1 0001010
+2 0001010 0001010
+3 0001010 0001010 0001010
+4 0001010 0001010 0001010 0000000
+5 0001010 0001010 0001010 0000000 0001010
+6 0001010 0001010 0001010 0000000 0001010 0001010
+7 0001010 0001010 0001010 0000000 0001010 0001010 0000010
+8 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000
+9 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000 0001000
+10 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000 0001000 0000000
+11 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000 0001000 0000000 0001010
+12 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000 0001000 0000000 0001010 0001010
+13 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000 0001000 0000000 0001010 0001010 0001010
+14 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000 0001000 0000000 0001010 0001010 0001010 0000000
+15 0001010 0001010 0001010 0000000 0001010 0001010 0000010 0001000 0001000 0000000 0001010 0001010 0001010 0000000 0001010
+1 1001010
+2 1001010 1001010
+3 1001010 1001010 1001010
+4 1001010 1001010 1001010 1000000
+5 1001010 1001010 1001010 1000000 1001010
+6 1001010 1001010 1001010 1000000 1001010 1001010
+7 1001010 1001010 1001010 1000000 1001010 1001010 0000010
+8 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000
+9 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000 1001000
+10 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000 1001000 0000000
+11 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000 1001000 0000000 1001010
+12 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000 1001000 0000000 1001010 1001010
+13 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000 1001000 0000000 1001010 1001010 1001010
+14 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000 1001000 0000000 1001010 1001010 1001010 1000000
+15 1001010 1001010 1001010 1000000 1001010 1001010 0000010 1001000 1001000 0000000 1001010 1001010 1001010 1000000 1001010
+1 0101010
+2 0101010 0101010
+3 0101010 0101010 0101010
+4 0101010 0101010 0101010 0100000
+5 0101010 0101010 0101010 0100000 0001010
+6 0101010 0101010 0101010 0100000 0001010 0001010
+7 0101010 0101010 0101010 0100000 0001010 0001010 0100010
+8 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000
+9 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000 0101000
+10 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000 0101000 0100000
+11 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000 0101000 0100000 0101010
+12 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000 0101000 0100000 0101010 0101010
+13 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000 0101000 0100000 0101010 0101010 0101010
+14 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000 0101000 0100000 0101010 0101010 0101010 0100000
+15 0101010 0101010 0101010 0100000 0001010 0001010 0100010 0101000 0101000 0100000 0101010 0101010 0101010 0100000 0001010
+1 1101010
+2 1101010 1101010
+3 1101010 1101010 1101010
+4 1101010 1101010 1101010 1100000
+5 1101010 1101010 1101010 1100000 1001010
+6 1101010 1101010 1101010 1100000 1001010 1001010
+7 1101010 1101010 1101010 1100000 1001010 1001010 0100010
+8 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000
+9 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000 1101000
+10 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000 1101000 0100000
+11 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000 1101000 0100000 1101010
+12 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000 1101000 0100000 1101010 1101010
+13 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000 1101000 0100000 1101010 1101010 1101010
+14 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000 1101000 0100000 1101010 1101010 1101010 1100000
+15 1101010 1101010 1101010 1100000 1001010 1001010 0100010 1101000 1101000 0100000 1101010 1101010 1101010 1100000 1001010
+1 0011010
+2 0011010 0011010
+3 0011010 0011010 0011010
+4 0011010 0011010 0011010 0010000
+5 0011010 0011010 0011010 0010000 0011010
+6 0011010 0011010 0011010 0010000 0011010 0011010
+7 0011010 0011010 0011010 0010000 0011010 0011010 0010010
+8 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000
+9 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000
+10 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000
+11 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010
+12 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010 0011010
+13 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010 0011010 0011010
+14 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010 0011010 0011010 0010000
+15 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010 0011010 0011010 0010000 0011010
+1 1011010
+2 1011010 1011010
+3 1011010 1011010 1011010
+4 1011010 1011010 1011010 1010000
+5 1011010 1011010 1011010 1010000 1011010
+6 1011010 1011010 1011010 1010000 1011010 1011010
+7 1011010 1011010 1011010 1010000 1011010 1011010 0010010
+8 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000
+9 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000 1001000
+10 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000 1001000 0010000
+11 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000 1001000 0010000 1011010
+12 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000 1001000 0010000 1011010 1011010
+13 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000 1001000 0010000 1011010 1011010 1011010
+14 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000 1001000 0010000 1011010 1011010 1011010 1010000
+15 1011010 1011010 1011010 1010000 1011010 1011010 0010010 1011000 1001000 0010000 1011010 1011010 1011010 1010000 1011010
+1 0111010
+2 0111010 0111010
+3 0111010 0111010 0111010
+4 0111010 0111010 0111010 0110000
+5 0111010 0111010 0111010 0110000 0011010
+6 0111010 0111010 0111010 0110000 0011010 0011010
+7 0111010 0111010 0111010 0110000 0011010 0011010 0110010
+8 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000
+9 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000 0101000
+10 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000 0101000 0110000
+11 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000 0101000 0110000 0111010
+12 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000 0101000 0110000 0111010 0111010
+13 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000 0101000 0110000 0111010 0111010 0111010
+14 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000 0101000 0110000 0111010 0111010 0111010 0110000
+15 0111010 0111010 0111010 0110000 0011010 0011010 0110010 0111000 0101000 0110000 0111010 0111010 0111010 0110000 0011010
+1 1111010
+2 1111010 1111010
+3 1111010 1111010 1111010
+4 1111010 1111010 1111010 1110000
+5 1111010 1111010 1111010 1110000 1011010
+6 1111010 1111010 1111010 1110000 1011010 1011010
+7 1111010 1111010 1111010 1110000 1011010 1011010 0110010
+8 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000
+9 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000
+10 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000
+11 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010
+12 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010
+13 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010
+14 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010 1110000
+15 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010 1110000 1011010
+1 0000110
+2 0000110 0000010
+3 0000110 0000010 0000110
+4 0000110 0000010 0000110 0000000
+5 0000110 0000010 0000110 0000000 0000110
+6 0000110 0000010 0000110 0000000 0000110 0000010
+7 0000110 0000010 0000110 0000000 0000110 0000010 0000010
+8 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000
+9 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000 0000100
+10 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000 0000100 0000000
+11 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000 0000100 0000000 0000110
+12 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000 0000100 0000000 0000110 0000010
+13 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000 0000100 0000000 0000110 0000010 0000110
+14 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000 0000100 0000000 0000110 0000010 0000110 0000000
+15 0000110 0000010 0000110 0000000 0000110 0000010 0000010 0000000 0000100 0000000 0000110 0000010 0000110 0000000 0000110
+1 1000110
+2 1000110 1000010
+3 1000110 1000010 1000110
+4 1000110 1000010 1000110 1000000
+5 1000110 1000010 1000110 1000000 1000110
+6 1000110 1000010 1000110 1000000 1000110 1000010
+7 1000110 1000010 1000110 1000000 1000110 1000010 0000010
+8 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000
+9 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000 1000100
+10 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000 1000100 0000000
+11 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000 1000100 0000000 1000110
+12 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000 1000100 0000000 1000110 1000010
+13 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000 1000100 0000000 1000110 1000010 1000110
+14 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000 1000100 0000000 1000110 1000010 1000110 1000000
+15 1000110 1000010 1000110 1000000 1000110 1000010 0000010 1000000 1000100 0000000 1000110 1000010 1000110 1000000 1000110
+1 0100110
+2 0100110 0100010
+3 0100110 0100010 0100110
+4 0100110 0100010 0100110 0100000
+5 0100110 0100010 0100110 0100000 0000110
+6 0100110 0100010 0100110 0100000 0000110 0000010
+7 0100110 0100010 0100110 0100000 0000110 0000010 0100010
+8 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000
+9 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100
+10 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000
+11 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110
+12 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010
+13 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010 0100110
+14 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010 0100110 0100000
+15 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010 0100110 0100000 0000110
+1 1100110
+2 1100110 1100010
+3 1100110 1100010 1100110
+4 1100110 1100010 1100110 1100000
+5 1100110 1100010 1100110 1100000 1000110
+6 1100110 1100010 1100110 1100000 1000110 1000010
+7 1100110 1100010 1100110 1100000 1000110 1000010 0100010
+8 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000
+9 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000 1100100
+10 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000 1100100 0100000
+11 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000 1100100 0100000 1100110
+12 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000 1100100 0100000 1100110 1100010
+13 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000 1100100 0100000 1100110 1100010 1100110
+14 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000 1100100 0100000 1100110 1100010 1100110 1100000
+15 1100110 1100010 1100110 1100000 1000110 1000010 0100010 1100000 1100100 0100000 1100110 1100010 1100110 1100000 1000110
+1 0010110
+2 0010110 0010010
+3 0010110 0010010 0010110
+4 0010110 0010010 0010110 0010000
+5 0010110 0010010 0010110 0010000 0010110
+6 0010110 0010010 0010110 0010000 0010110 0010010
+7 0010110 0010010 0010110 0010000 0010110 0010010 0010010
+8 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000
+9 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000 0000100
+10 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000 0000100 0010000
+11 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000 0000100 0010000 0010110
+12 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000 0000100 0010000 0010110 0010010
+13 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000 0000100 0010000 0010110 0010010 0010110
+14 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000 0000100 0010000 0010110 0010010 0010110 0010000
+15 0010110 0010010 0010110 0010000 0010110 0010010 0010010 0010000 0000100 0010000 0010110 0010010 0010110 0010000 0010110
+1 1010110
+2 1010110 1010010
+3 1010110 1010010 1010110
+4 1010110 1010010 1010110 1010000
+5 1010110 1010010 1010110 1010000 1010110
+6 1010110 1010010 1010110 1010000 1010110 1010010
+7 1010110 1010010 1010110 1010000 1010110 1010010 0010010
+8 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000
+9 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100
+10 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000
+11 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110
+12 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010
+13 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110
+14 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000
+15 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110
+1 0110110
+2 0110110 0110010
+3 0110110 0110010 0110110
+4 0110110 0110010 0110110 0110000
+5 0110110 0110010 0110110 0110000 0010110
+6 0110110 0110010 0110110 0110000 0010110 0010010
+7 0110110 0110010 0110110 0110000 0010110 0010010 0110010
+8 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000
+9 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100
+10 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000
+11 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110
+12 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010
+13 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110
+14 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000
+15 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110
+1 1110110
+2 1110110 1110010
+3 1110110 1110010 1110110
+4 1110110 1110010 1110110 1110000
+5 1110110 1110010 1110110 1110000 1010110
+6 1110110 1110010 1110110 1110000 1010110 1010010
+7 1110110 1110010 1110110 1110000 1010110 1010010 0110010
+8 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000
+9 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100
+10 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000
+11 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110
+12 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010
+13 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110
+14 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000
+15 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000 1010110
+1 0001110
+2 0001110 0001010
+3 0001110 0001010 0001110
+4 0001110 0001010 0001110 0000000
+5 0001110 0001010 0001110 0000000 0001110
+6 0001110 0001010 0001110 0000000 0001110 0001010
+7 0001110 0001010 0001110 0000000 0001110 0001010 0000010
+8 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000
+9 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000 0001100
+10 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000 0001100 0000000
+11 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000 0001100 0000000 0001110
+12 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000 0001100 0000000 0001110 0001010
+13 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000 0001100 0000000 0001110 0001010 0001110
+14 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000 0001100 0000000 0001110 0001010 0001110 0000000
+15 0001110 0001010 0001110 0000000 0001110 0001010 0000010 0001000 0001100 0000000 0001110 0001010 0001110 0000000 0001110
+1 1001110
+2 1001110 1001010
+3 1001110 1001010 1001110
+4 1001110 1001010 1001110 1000000
+5 1001110 1001010 1001110 1000000 1001110
+6 1001110 1001010 1001110 1000000 1001110 1001010
+7 1001110 1001010 1001110 1000000 1001110 1001010 0000010
+8 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000
+9 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000 1001100
+10 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000 1001100 0000000
+11 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000 1001100 0000000 1001110
+12 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000 1001100 0000000 1001110 1001010
+13 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000 1001100 0000000 1001110 1001010 1001110
+14 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000 1001100 0000000 1001110 1001010 1001110 1000000
+15 1001110 1001010 1001110 1000000 1001110 1001010 0000010 1001000 1001100 0000000 1001110 1001010 1001110 1000000 1001110
+1 0101110
+2 0101110 0101010
+3 0101110 0101010 0101110
+4 0101110 0101010 0101110 0100000
+5 0101110 0101010 0101110 0100000 0001110
+6 0101110 0101010 0101110 0100000 0001110 0001010
+7 0101110 0101010 0101110 0100000 0001110 0001010 0100010
+8 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000
+9 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000 0101100
+10 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000 0101100 0100000
+11 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000 0101100 0100000 0101110
+12 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000 0101100 0100000 0101110 0101010
+13 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000 0101100 0100000 0101110 0101010 0101110
+14 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000 0101100 0100000 0101110 0101010 0101110 0100000
+15 0101110 0101010 0101110 0100000 0001110 0001010 0100010 0101000 0101100 0100000 0101110 0101010 0101110 0100000 0001110
+1 1101110
+2 1101110 1101010
+3 1101110 1101010 1101110
+4 1101110 1101010 1101110 1100000
+5 1101110 1101010 1101110 1100000 1001110
+6 1101110 1101010 1101110 1100000 1001110 1001010
+7 1101110 1101010 1101110 1100000 1001110 1001010 0100010
+8 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000
+9 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000 1101100
+10 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000 1101100 0100000
+11 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000 1101100 0100000 1101110
+12 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000 1101100 0100000 1101110 1101010
+13 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000 1101100 0100000 1101110 1101010 1101110
+14 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000 1101100 0100000 1101110 1101010 1101110 1100000
+15 1101110 1101010 1101110 1100000 1001110 1001010 0100010 1101000 1101100 0100000 1101110 1101010 1101110 1100000 1001110
+1 0011110
+2 0011110 0011010
+3 0011110 0011010 0011110
+4 0011110 0011010 0011110 0010000
+5 0011110 0011010 0011110 0010000 0011110
+6 0011110 0011010 0011110 0010000 0011110 0011010
+7 0011110 0011010 0011110 0010000 0011110 0011010 0010010
+8 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000
+9 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000 0001100
+10 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000 0001100 0010000
+11 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000 0001100 0010000 0011110
+12 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000 0001100 0010000 0011110 0011010
+13 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000 0001100 0010000 0011110 0011010 0011110
+14 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000 0001100 0010000 0011110 0011010 0011110 0010000
+15 0011110 0011010 0011110 0010000 0011110 0011010 0010010 0011000 0001100 0010000 0011110 0011010 0011110 0010000 0011110
+1 1011110
+2 1011110 1011010
+3 1011110 1011010 1011110
+4 1011110 1011010 1011110 1010000
+5 1011110 1011010 1011110 1010000 1011110
+6 1011110 1011010 1011110 1010000 1011110 1011010
+7 1011110 1011010 1011110 1010000 1011110 1011010 0010010
+8 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000
+9 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000 1001100
+10 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000 1001100 0010000
+11 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000 1001100 0010000 1011110
+12 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000 1001100 0010000 1011110 1011010
+13 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000 1001100 0010000 1011110 1011010 1011110
+14 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000 1001100 0010000 1011110 1011010 1011110 1010000
+15 1011110 1011010 1011110 1010000 1011110 1011010 0010010 1011000 1001100 0010000 1011110 1011010 1011110 1010000 1011110
+1 0111110
+2 0111110 0111010
+3 0111110 0111010 0111110
+4 0111110 0111010 0111110 0110000
+5 0111110 0111010 0111110 0110000 0011110
+6 0111110 0111010 0111110 0110000 0011110 0011010
+7 0111110 0111010 0111110 0110000 0011110 0011010 0110010
+8 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000
+9 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000 0101100
+10 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000 0101100 0110000
+11 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000 0101100 0110000 0111110
+12 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000 0101100 0110000 0111110 0111010
+13 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000 0101100 0110000 0111110 0111010 0111110
+14 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000 0101100 0110000 0111110 0111010 0111110 0110000
+15 0111110 0111010 0111110 0110000 0011110 0011010 0110010 0111000 0101100 0110000 0111110 0111010 0111110 0110000 0011110
+1 1111110
+2 1111110 1111010
+3 1111110 1111010 1111110
+4 1111110 1111010 1111110 1110000
+5 1111110 1111010 1111110 1110000 1011110
+6 1111110 1111010 1111110 1110000 1011110 1011010
+7 1111110 1111010 1111110 1110000 1011110 1011010 0110010
+8 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000
+9 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100
+10 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000
+11 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110
+12 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010
+13 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110
+14 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000
+15 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110
+1 0000000
+2 0000000 0000001
+3 0000000 0000001 0000001
+4 0000000 0000001 0000001 0000000
+5 0000000 0000001 0000001 0000000 0000001
+6 0000000 0000001 0000001 0000000 0000001 0000001
+7 0000000 0000001 0000001 0000000 0000001 0000001 0000001
+8 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001
+9 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001 0000001
+10 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001 0000001 0000000
+11 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001 0000001 0000000 0000000
+12 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001 0000001 0000000 0000000 0000001
+13 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001 0000001 0000000 0000000 0000001 0000001
+14 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001 0000001 0000000 0000000 0000001 0000001 0000000
+15 0000000 0000001 0000001 0000000 0000001 0000001 0000001 0000001 0000001 0000000 0000000 0000001 0000001 0000000 0000001
+1 1000000
+2 1000000 1000001
+3 1000000 1000001 1000001
+4 1000000 1000001 1000001 1000000
+5 1000000 1000001 1000001 1000000 1000001
+6 1000000 1000001 1000001 1000000 1000001 1000001
+7 1000000 1000001 1000001 1000000 1000001 1000001 0000001
+8 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001
+9 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001
+10 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000
+11 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000
+12 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001
+13 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001
+14 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000
+15 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000 1000001
+1 0100000
+2 0100000 0100001
+3 0100000 0100001 0100001
+4 0100000 0100001 0100001 0100000
+5 0100000 0100001 0100001 0100000 0000001
+6 0100000 0100001 0100001 0100000 0000001 0000001
+7 0100000 0100001 0100001 0100000 0000001 0000001 0100001
+8 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001
+9 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001
+10 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000
+11 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000 0100000
+12 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000 0100000 0100001
+13 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000 0100000 0100001 0100001
+14 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000 0100000 0100001 0100001 0100000
+15 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000 0100000 0100001 0100001 0100000 0000001
+1 1100000
+2 1100000 1100001
+3 1100000 1100001 1100001
+4 1100000 1100001 1100001 1100000
+5 1100000 1100001 1100001 1100000 1000001
+6 1100000 1100001 1100001 1100000 1000001 1000001
+7 1100000 1100001 1100001 1100000 1000001 1000001 0100001
+8 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001
+9 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001 1100001
+10 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001 1100001 0100000
+11 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001 1100001 0100000 1100000
+12 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001 1100001 0100000 1100000 1100001
+13 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001 1100001 0100000 1100000 1100001 1100001
+14 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001 1100001 0100000 1100000 1100001 1100001 1100000
+15 1100000 1100001 1100001 1100000 1000001 1000001 0100001 1100001 1100001 0100000 1100000 1100001 1100001 1100000 1000001
+1 0010000
+2 0010000 0010001
+3 0010000 0010001 0010001
+4 0010000 0010001 0010001 0010000
+5 0010000 0010001 0010001 0010000 0010001
+6 0010000 0010001 0010001 0010000 0010001 0010001
+7 0010000 0010001 0010001 0010000 0010001 0010001 0010001
+8 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001
+9 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001 0000001
+10 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001 0000001 0010000
+11 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001 0000001 0010000 0010000
+12 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001 0000001 0010000 0010000 0010001
+13 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001 0000001 0010000 0010000 0010001 0010001
+14 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001 0000001 0010000 0010000 0010001 0010001 0010000
+15 0010000 0010001 0010001 0010000 0010001 0010001 0010001 0010001 0000001 0010000 0010000 0010001 0010001 0010000 0010001
+1 1010000
+2 1010000 1010001
+3 1010000 1010001 1010001
+4 1010000 1010001 1010001 1010000
+5 1010000 1010001 1010001 1010000 1010001
+6 1010000 1010001 1010001 1010000 1010001 1010001
+7 1010000 1010001 1010001 1010000 1010001 1010001 0010001
+8 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001
+9 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001 1000001
+10 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001 1000001 0010000
+11 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001 1000001 0010000 1010000
+12 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001 1000001 0010000 1010000 1010001
+13 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001 1000001 0010000 1010000 1010001 1010001
+14 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001 1000001 0010000 1010000 1010001 1010001 1010000
+15 1010000 1010001 1010001 1010000 1010001 1010001 0010001 1010001 1000001 0010000 1010000 1010001 1010001 1010000 1010001
+1 0110000
+2 0110000 0110001
+3 0110000 0110001 0110001
+4 0110000 0110001 0110001 0110000
+5 0110000 0110001 0110001 0110000 0010001
+6 0110000 0110001 0110001 0110000 0010001 0010001
+7 0110000 0110001 0110001 0110000 0010001 0010001 0110001
+8 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001
+9 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001
+10 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000
+11 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000
+12 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001
+13 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001
+14 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000
+15 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001
+1 1110000
+2 1110000 1110001
+3 1110000 1110001 1110001
+4 1110000 1110001 1110001 1110000
+5 1110000 1110001 1110001 1110000 1010001
+6 1110000 1110001 1110001 1110000 1010001 1010001
+7 1110000 1110001 1110001 1110000 1010001 1010001 0110001
+8 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001
+9 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001 1100001
+10 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001 1100001 0110000
+11 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001 1100001 0110000 1110000
+12 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001 1100001 0110000 1110000 1110001
+13 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001 1100001 0110000 1110000 1110001 1110001
+14 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001 1100001 0110000 1110000 1110001 1110001 1110000
+15 1110000 1110001 1110001 1110000 1010001 1010001 0110001 1110001 1100001 0110000 1110000 1110001 1110001 1110000 1010001
+1 0001000
+2 0001000 0001001
+3 0001000 0001001 0001001
+4 0001000 0001001 0001001 0000000
+5 0001000 0001001 0001001 0000000 0001001
+6 0001000 0001001 0001001 0000000 0001001 0001001
+7 0001000 0001001 0001001 0000000 0001001 0001001 0000001
+8 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001
+9 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001 0001001
+10 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001 0001001 0000000
+11 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001 0001001 0000000 0001000
+12 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001 0001001 0000000 0001000 0001001
+13 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001 0001001 0000000 0001000 0001001 0001001
+14 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001 0001001 0000000 0001000 0001001 0001001 0000000
+15 0001000 0001001 0001001 0000000 0001001 0001001 0000001 0001001 0001001 0000000 0001000 0001001 0001001 0000000 0001001
+1 1001000
+2 1001000 1001001
+3 1001000 1001001 1001001
+4 1001000 1001001 1001001 1000000
+5 1001000 1001001 1001001 1000000 1001001
+6 1001000 1001001 1001001 1000000 1001001 1001001
+7 1001000 1001001 1001001 1000000 1001001 1001001 0000001
+8 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001
+9 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001 1001001
+10 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001 1001001 0000000
+11 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001 1001001 0000000 1001000
+12 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001 1001001 0000000 1001000 1001001
+13 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001 1001001 0000000 1001000 1001001 1001001
+14 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001 1001001 0000000 1001000 1001001 1001001 1000000
+15 1001000 1001001 1001001 1000000 1001001 1001001 0000001 1001001 1001001 0000000 1001000 1001001 1001001 1000000 1001001
+1 0101000
+2 0101000 0101001
+3 0101000 0101001 0101001
+4 0101000 0101001 0101001 0100000
+5 0101000 0101001 0101001 0100000 0001001
+6 0101000 0101001 0101001 0100000 0001001 0001001
+7 0101000 0101001 0101001 0100000 0001001 0001001 0100001
+8 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001
+9 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001 0101001
+10 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001 0101001 0100000
+11 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001 0101001 0100000 0101000
+12 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001 0101001 0100000 0101000 0101001
+13 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001 0101001 0100000 0101000 0101001 0101001
+14 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001 0101001 0100000 0101000 0101001 0101001 0100000
+15 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001 0101001 0100000 0101000 0101001 0101001 0100000 0001001
+1 1101000
+2 1101000 1101001
+3 1101000 1101001 1101001
+4 1101000 1101001 1101001 1100000
+5 1101000 1101001 1101001 1100000 1001001
+6 1101000 1101001 1101001 1100000 1001001 1001001
+7 1101000 1101001 1101001 1100000 1001001 1001001 0100001
+8 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001
+9 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001 1101001
+10 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001 1101001 0100000
+11 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001 1101001 0100000 1101000
+12 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001 1101001 0100000 1101000 1101001
+13 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001 1101001 0100000 1101000 1101001 1101001
+14 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001 1101001 0100000 1101000 1101001 1101001 1100000
+15 1101000 1101001 1101001 1100000 1001001 1001001 0100001 1101001 1101001 0100000 1101000 1101001 1101001 1100000 1001001
+1 0011000
+2 0011000 0011001
+3 0011000 0011001 0011001
+4 0011000 0011001 0011001 0010000
+5 0011000 0011001 0011001 0010000 0011001
+6 0011000 0011001 0011001 0010000 0011001 0011001
+7 0011000 0011001 0011001 0010000 0011001 0011001 0010001
+8 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001
+9 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001
+10 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000
+11 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000
+12 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001
+13 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001
+14 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000
+15 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000 0011001
+1 1011000
+2 1011000 1011001
+3 1011000 1011001 1011001
+4 1011000 1011001 1011001 1010000
+5 1011000 1011001 1011001 1010000 1011001
+6 1011000 1011001 1011001 1010000 1011001 1011001
+7 1011000 1011001 1011001 1010000 1011001 1011001 0010001
+8 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001
+9 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001 1001001
+10 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001 1001001 0010000
+11 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001 1001001 0010000 1011000
+12 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001 1001001 0010000 1011000 1011001
+13 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001 1001001 0010000 1011000 1011001 1011001
+14 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001 1001001 0010000 1011000 1011001 1011001 1010000
+15 1011000 1011001 1011001 1010000 1011001 1011001 0010001 1011001 1001001 0010000 1011000 1011001 1011001 1010000 1011001
+1 0111000
+2 0111000 0111001
+3 0111000 0111001 0111001
+4 0111000 0111001 0111001 0110000
+5 0111000 0111001 0111001 0110000 0011001
+6 0111000 0111001 0111001 0110000 0011001 0011001
+7 0111000 0111001 0111001 0110000 0011001 0011001 0110001
+8 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001
+9 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001
+10 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000
+11 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000
+12 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001
+13 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001
+14 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000
+15 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001
+1 1111000
+2 1111000 1111001
+3 1111000 1111001 1111001
+4 1111000 1111001 1111001 1110000
+5 1111000 1111001 1111001 1110000 1011001
+6 1111000 1111001 1111001 1110000 1011001 1011001
+7 1111000 1111001 1111001 1110000 1011001 1011001 0110001
+8 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001
+9 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001
+10 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000
+11 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000
+12 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001
+13 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001
+14 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000
+15 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000 1011001
+1 0000100
+2 0000100 0000001
+3 0000100 0000001 0000101
+4 0000100 0000001 0000101 0000000
+5 0000100 0000001 0000101 0000000 0000101
+6 0000100 0000001 0000101 0000000 0000101 0000001
+7 0000100 0000001 0000101 0000000 0000101 0000001 0000001
+8 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001
+9 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101
+10 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101 0000000
+11 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101 0000000 0000100
+12 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101 0000000 0000100 0000001
+13 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101 0000000 0000100 0000001 0000101
+14 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101 0000000 0000100 0000001 0000101 0000000
+15 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101 0000000 0000100 0000001 0000101 0000000 0000101
+1 1000100
+2 1000100 1000001
+3 1000100 1000001 1000101
+4 1000100 1000001 1000101 1000000
+5 1000100 1000001 1000101 1000000 1000101
+6 1000100 1000001 1000101 1000000 1000101 1000001
+7 1000100 1000001 1000101 1000000 1000101 1000001 0000001
+8 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001
+9 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001 1000101
+10 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001 1000101 0000000
+11 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001 1000101 0000000 1000100
+12 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001 1000101 0000000 1000100 1000001
+13 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001 1000101 0000000 1000100 1000001 1000101
+14 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001 1000101 0000000 1000100 1000001 1000101 1000000
+15 1000100 1000001 1000101 1000000 1000101 1000001 0000001 1000001 1000101 0000000 1000100 1000001 1000101 1000000 1000101
+1 0100100
+2 0100100 0100001
+3 0100100 0100001 0100101
+4 0100100 0100001 0100101 0100000
+5 0100100 0100001 0100101 0100000 0000101
+6 0100100 0100001 0100101 0100000 0000101 0000001
+7 0100100 0100001 0100101 0100000 0000101 0000001 0100001
+8 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001
+9 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001 0100101
+10 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001 0100101 0100000
+11 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001 0100101 0100000 0100100
+12 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001 0100101 0100000 0100100 0100001
+13 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001 0100101 0100000 0100100 0100001 0100101
+14 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001 0100101 0100000 0100100 0100001 0100101 0100000
+15 0100100 0100001 0100101 0100000 0000101 0000001 0100001 0100001 0100101 0100000 0100100 0100001 0100101 0100000 0000101
+1 1100100
+2 1100100 1100001
+3 1100100 1100001 1100101
+4 1100100 1100001 1100101 1100000
+5 1100100 1100001 1100101 1100000 1000101
+6 1100100 1100001 1100101 1100000 1000101 1000001
+7 1100100 1100001 1100101 1100000 1000101 1000001 0100001
+8 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001
+9 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101
+10 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000
+11 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100
+12 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001
+13 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101
+14 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000
+15 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101
+1 0010100
+2 0010100 0010001
+3 0010100 0010001 0010101
+4 0010100 0010001 0010101 0010000
+5 0010100 0010001 0010101 0010000 0010101
+6 0010100 0010001 0010101 0010000 0010101 0010001
+7 0010100 0010001 0010101 0010000 0010101 0010001 0010001
+8 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001
+9 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101
+10 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000
+11 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100
+12 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001
+13 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101
+14 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000
+15 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101
+1 1010100
+2 1010100 1010001
+3 1010100 1010001 1010101
+4 1010100 1010001 1010101 1010000
+5 1010100 1010001 1010101 1010000 1010101
+6 1010100 1010001 1010101 1010000 1010101 1010001
+7 1010100 1010001 1010101 1010000 1010101 1010001 0010001
+8 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001
+9 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001 1000101
+10 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001 1000101 0010000
+11 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001 1000101 0010000 1010100
+12 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001 1000101 0010000 1010100 1010001
+13 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001 1000101 0010000 1010100 1010001 1010101
+14 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001 1000101 0010000 1010100 1010001 1010101 1010000
+15 1010100 1010001 1010101 1010000 1010101 1010001 0010001 1010001 1000101 0010000 1010100 1010001 1010101 1010000 1010101
+1 0110100
+2 0110100 0110001
+3 0110100 0110001 0110101
+4 0110100 0110001 0110101 0110000
+5 0110100 0110001 0110101 0110000 0010101
+6 0110100 0110001 0110101 0110000 0010101 0010001
+7 0110100 0110001 0110101 0110000 0010101 0010001 0110001
+8 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001
+9 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001 0100101
+10 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001 0100101 0110000
+11 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001 0100101 0110000 0110100
+12 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001 0100101 0110000 0110100 0110001
+13 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001 0100101 0110000 0110100 0110001 0110101
+14 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001 0100101 0110000 0110100 0110001 0110101 0110000
+15 0110100 0110001 0110101 0110000 0010101 0010001 0110001 0110001 0100101 0110000 0110100 0110001 0110101 0110000 0010101
+1 1110100
+2 1110100 1110001
+3 1110100 1110001 1110101
+4 1110100 1110001 1110101 1110000
+5 1110100 1110001 1110101 1110000 1010101
+6 1110100 1110001 1110101 1110000 1010101 1010001
+7 1110100 1110001 1110101 1110000 1010101 1010001 0110001
+8 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001
+9 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001 1100101
+10 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001 1100101 0110000
+11 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001 1100101 0110000 1110100
+12 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001 1100101 0110000 1110100 1110001
+13 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001 1100101 0110000 1110100 1110001 1110101
+14 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001 1100101 0110000 1110100 1110001 1110101 1110000
+15 1110100 1110001 1110101 1110000 1010101 1010001 0110001 1110001 1100101 0110000 1110100 1110001 1110101 1110000 1010101
+1 0001100
+2 0001100 0001001
+3 0001100 0001001 0001101
+4 0001100 0001001 0001101 0000000
+5 0001100 0001001 0001101 0000000 0001101
+6 0001100 0001001 0001101 0000000 0001101 0001001
+7 0001100 0001001 0001101 0000000 0001101 0001001 0000001
+8 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001
+9 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001 0001101
+10 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001 0001101 0000000
+11 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001 0001101 0000000 0001100
+12 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001 0001101 0000000 0001100 0001001
+13 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001 0001101 0000000 0001100 0001001 0001101
+14 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001 0001101 0000000 0001100 0001001 0001101 0000000
+15 0001100 0001001 0001101 0000000 0001101 0001001 0000001 0001001 0001101 0000000 0001100 0001001 0001101 0000000 0001101
+1 1001100
+2 1001100 1001001
+3 1001100 1001001 1001101
+4 1001100 1001001 1001101 1000000
+5 1001100 1001001 1001101 1000000 1001101
+6 1001100 1001001 1001101 1000000 1001101 1001001
+7 1001100 1001001 1001101 1000000 1001101 1001001 0000001
+8 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001
+9 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101
+10 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000
+11 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100
+12 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001
+13 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001 1001101
+14 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001 1001101 1000000
+15 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001 1001101 1000000 1001101
+1 0101100
+2 0101100 0101001
+3 0101100 0101001 0101101
+4 0101100 0101001 0101101 0100000
+5 0101100 0101001 0101101 0100000 0001101
+6 0101100 0101001 0101101 0100000 0001101 0001001
+7 0101100 0101001 0101101 0100000 0001101 0001001 0100001
+8 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001
+9 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101
+10 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000
+11 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000 0101100
+12 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000 0101100 0101001
+13 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000 0101100 0101001 0101101
+14 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000 0101100 0101001 0101101 0100000
+15 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000 0101100 0101001 0101101 0100000 0001101
+1 1101100
+2 1101100 1101001
+3 1101100 1101001 1101101
+4 1101100 1101001 1101101 1100000
+5 1101100 1101001 1101101 1100000 1001101
+6 1101100 1101001 1101101 1100000 1001101 1001001
+7 1101100 1101001 1101101 1100000 1001101 1001001 0100001
+8 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001
+9 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101
+10 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000
+11 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000 1101100
+12 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000 1101100 1101001
+13 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000 1101100 1101001 1101101
+14 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000 1101100 1101001 1101101 1100000
+15 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000 1101100 1101001 1101101 1100000 1001101
+1 0011100
+2 0011100 0011001
+3 0011100 0011001 0011101
+4 0011100 0011001 0011101 0010000
+5 0011100 0011001 0011101 0010000 0011101
+6 0011100 0011001 0011101 0010000 0011101 0011001
+7 0011100 0011001 0011101 0010000 0011101 0011001 0010001
+8 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001
+9 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001 0001101
+10 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001 0001101 0010000
+11 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001 0001101 0010000 0011100
+12 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001 0001101 0010000 0011100 0011001
+13 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001 0001101 0010000 0011100 0011001 0011101
+14 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001 0001101 0010000 0011100 0011001 0011101 0010000
+15 0011100 0011001 0011101 0010000 0011101 0011001 0010001 0011001 0001101 0010000 0011100 0011001 0011101 0010000 0011101
+1 1011100
+2 1011100 1011001
+3 1011100 1011001 1011101
+4 1011100 1011001 1011101 1010000
+5 1011100 1011001 1011101 1010000 1011101
+6 1011100 1011001 1011101 1010000 1011101 1011001
+7 1011100 1011001 1011101 1010000 1011101 1011001 0010001
+8 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001
+9 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101
+10 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101 0010000
+11 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101 0010000 1011100
+12 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101 0010000 1011100 1011001
+13 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101 0010000 1011100 1011001 1011101
+14 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101 0010000 1011100 1011001 1011101 1010000
+15 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101 0010000 1011100 1011001 1011101 1010000 1011101
+1 0111100
+2 0111100 0111001
+3 0111100 0111001 0111101
+4 0111100 0111001 0111101 0110000
+5 0111100 0111001 0111101 0110000 0011101
+6 0111100 0111001 0111101 0110000 0011101 0011001
+7 0111100 0111001 0111101 0110000 0011101 0011001 0110001
+8 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001
+9 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101
+10 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101 0110000
+11 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101 0110000 0111100
+12 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101 0110000 0111100 0111001
+13 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101 0110000 0111100 0111001 0111101
+14 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101 0110000 0111100 0111001 0111101 0110000
+15 0111100 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101 0110000 0111100 0111001 0111101 0110000 0011101
+1 1111100
+2 1111100 1111001
+3 1111100 1111001 1111101
+4 1111100 1111001 1111101 1110000
+5 1111100 1111001 1111101 1110000 1011101
+6 1111100 1111001 1111101 1110000 1011101 1011001
+7 1111100 1111001 1111101 1110000 1011101 1011001 0110001
+8 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001
+9 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001 1101101
+10 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001 1101101 0110000
+11 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001 1101101 0110000 1111100
+12 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001 1101101 0110000 1111100 1111001
+13 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001 1101101 0110000 1111100 1111001 1111101
+14 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001 1101101 0110000 1111100 1111001 1111101 1110000
+15 1111100 1111001 1111101 1110000 1011101 1011001 0110001 1111001 1101101 0110000 1111100 1111001 1111101 1110000 1011101
+1 0000010
+2 0000010 0000011
+3 0000010 0000011 0000011
+4 0000010 0000011 0000011 0000000
+5 0000010 0000011 0000011 0000000 0000011
+6 0000010 0000011 0000011 0000000 0000011 0000011
+7 0000010 0000011 0000011 0000000 0000011 0000011 0000011
+8 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001
+9 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001 0000001
+10 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001 0000001 0000000
+11 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001 0000001 0000000 0000010
+12 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001 0000001 0000000 0000010 0000011
+13 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001 0000001 0000000 0000010 0000011 0000011
+14 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001 0000001 0000000 0000010 0000011 0000011 0000000
+15 0000010 0000011 0000011 0000000 0000011 0000011 0000011 0000001 0000001 0000000 0000010 0000011 0000011 0000000 0000011
+1 1000010
+2 1000010 1000011
+3 1000010 1000011 1000011
+4 1000010 1000011 1000011 1000000
+5 1000010 1000011 1000011 1000000 1000011
+6 1000010 1000011 1000011 1000000 1000011 1000011
+7 1000010 1000011 1000011 1000000 1000011 1000011 0000011
+8 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001
+9 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001 1000001
+10 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001 1000001 0000000
+11 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001 1000001 0000000 1000010
+12 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001 1000001 0000000 1000010 1000011
+13 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001 1000001 0000000 1000010 1000011 1000011
+14 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001 1000001 0000000 1000010 1000011 1000011 1000000
+15 1000010 1000011 1000011 1000000 1000011 1000011 0000011 1000001 1000001 0000000 1000010 1000011 1000011 1000000 1000011
+1 0100010
+2 0100010 0100011
+3 0100010 0100011 0100011
+4 0100010 0100011 0100011 0100000
+5 0100010 0100011 0100011 0100000 0000011
+6 0100010 0100011 0100011 0100000 0000011 0000011
+7 0100010 0100011 0100011 0100000 0000011 0000011 0100011
+8 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001
+9 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001
+10 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000
+11 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010
+12 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011
+13 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011
+14 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000
+15 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000 0000011
+1 1100010
+2 1100010 1100011
+3 1100010 1100011 1100011
+4 1100010 1100011 1100011 1100000
+5 1100010 1100011 1100011 1100000 1000011
+6 1100010 1100011 1100011 1100000 1000011 1000011
+7 1100010 1100011 1100011 1100000 1000011 1000011 0100011
+8 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001
+9 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001 1100001
+10 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001 1100001 0100000
+11 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001 1100001 0100000 1100010
+12 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001 1100001 0100000 1100010 1100011
+13 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001 1100001 0100000 1100010 1100011 1100011
+14 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001 1100001 0100000 1100010 1100011 1100011 1100000
+15 1100010 1100011 1100011 1100000 1000011 1000011 0100011 1100001 1100001 0100000 1100010 1100011 1100011 1100000 1000011
+1 0010010
+2 0010010 0010011
+3 0010010 0010011 0010011
+4 0010010 0010011 0010011 0010000
+5 0010010 0010011 0010011 0010000 0010011
+6 0010010 0010011 0010011 0010000 0010011 0010011
+7 0010010 0010011 0010011 0010000 0010011 0010011 0010011
+8 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001
+9 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001 0000001
+10 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001 0000001 0010000
+11 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001 0000001 0010000 0010010
+12 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001 0000001 0010000 0010010 0010011
+13 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001 0000001 0010000 0010010 0010011 0010011
+14 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001 0000001 0010000 0010010 0010011 0010011 0010000
+15 0010010 0010011 0010011 0010000 0010011 0010011 0010011 0010001 0000001 0010000 0010010 0010011 0010011 0010000 0010011
+1 1010010
+2 1010010 1010011
+3 1010010 1010011 1010011
+4 1010010 1010011 1010011 1010000
+5 1010010 1010011 1010011 1010000 1010011
+6 1010010 1010011 1010011 1010000 1010011 1010011
+7 1010010 1010011 1010011 1010000 1010011 1010011 0010011
+8 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001
+9 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001 1000001
+10 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001 1000001 0010000
+11 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001 1000001 0010000 1010010
+12 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001 1000001 0010000 1010010 1010011
+13 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001 1000001 0010000 1010010 1010011 1010011
+14 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001 1000001 0010000 1010010 1010011 1010011 1010000
+15 1010010 1010011 1010011 1010000 1010011 1010011 0010011 1010001 1000001 0010000 1010010 1010011 1010011 1010000 1010011
+1 0110010
+2 0110010 0110011
+3 0110010 0110011 0110011
+4 0110010 0110011 0110011 0110000
+5 0110010 0110011 0110011 0110000 0010011
+6 0110010 0110011 0110011 0110000 0010011 0010011
+7 0110010 0110011 0110011 0110000 0010011 0010011 0110011
+8 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001
+9 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001
+10 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000
+11 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010
+12 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011
+13 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011
+14 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000
+15 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011
+1 1110010
+2 1110010 1110011
+3 1110010 1110011 1110011
+4 1110010 1110011 1110011 1110000
+5 1110010 1110011 1110011 1110000 1010011
+6 1110010 1110011 1110011 1110000 1010011 1010011
+7 1110010 1110011 1110011 1110000 1010011 1010011 0110011
+8 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001
+9 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001 1100001
+10 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001 1100001 0110000
+11 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001 1100001 0110000 1110010
+12 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001 1100001 0110000 1110010 1110011
+13 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001 1100001 0110000 1110010 1110011 1110011
+14 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001 1100001 0110000 1110010 1110011 1110011 1110000
+15 1110010 1110011 1110011 1110000 1010011 1010011 0110011 1110001 1100001 0110000 1110010 1110011 1110011 1110000 1010011
+1 0001010
+2 0001010 0001011
+3 0001010 0001011 0001011
+4 0001010 0001011 0001011 0000000
+5 0001010 0001011 0001011 0000000 0001011
+6 0001010 0001011 0001011 0000000 0001011 0001011
+7 0001010 0001011 0001011 0000000 0001011 0001011 0000011
+8 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001
+9 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001
+10 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000
+11 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010
+12 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011
+13 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011
+14 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000
+15 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011
+1 1001010
+2 1001010 1001011
+3 1001010 1001011 1001011
+4 1001010 1001011 1001011 1000000
+5 1001010 1001011 1001011 1000000 1001011
+6 1001010 1001011 1001011 1000000 1001011 1001011
+7 1001010 1001011 1001011 1000000 1001011 1001011 0000011
+8 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001
+9 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001 1001001
+10 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001 1001001 0000000
+11 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001 1001001 0000000 1001010
+12 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001 1001001 0000000 1001010 1001011
+13 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001 1001001 0000000 1001010 1001011 1001011
+14 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001 1001001 0000000 1001010 1001011 1001011 1000000
+15 1001010 1001011 1001011 1000000 1001011 1001011 0000011 1001001 1001001 0000000 1001010 1001011 1001011 1000000 1001011
+1 0101010
+2 0101010 0101011
+3 0101010 0101011 0101011
+4 0101010 0101011 0101011 0100000
+5 0101010 0101011 0101011 0100000 0001011
+6 0101010 0101011 0101011 0100000 0001011 0001011
+7 0101010 0101011 0101011 0100000 0001011 0001011 0100011
+8 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001
+9 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001
+10 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000
+11 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010
+12 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011
+13 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011
+14 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000
+15 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000 0001011
+1 1101010
+2 1101010 1101011
+3 1101010 1101011 1101011
+4 1101010 1101011 1101011 1100000
+5 1101010 1101011 1101011 1100000 1001011
+6 1101010 1101011 1101011 1100000 1001011 1001011
+7 1101010 1101011 1101011 1100000 1001011 1001011 0100011
+8 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001
+9 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001 1101001
+10 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001 1101001 0100000
+11 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001 1101001 0100000 1101010
+12 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001 1101001 0100000 1101010 1101011
+13 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001 1101001 0100000 1101010 1101011 1101011
+14 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001 1101001 0100000 1101010 1101011 1101011 1100000
+15 1101010 1101011 1101011 1100000 1001011 1001011 0100011 1101001 1101001 0100000 1101010 1101011 1101011 1100000 1001011
+1 0011010
+2 0011010 0011011
+3 0011010 0011011 0011011
+4 0011010 0011011 0011011 0010000
+5 0011010 0011011 0011011 0010000 0011011
+6 0011010 0011011 0011011 0010000 0011011 0011011
+7 0011010 0011011 0011011 0010000 0011011 0011011 0010011
+8 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001
+9 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001
+10 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000
+11 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010
+12 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011
+13 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011
+14 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011 0010000
+15 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011 0010000 0011011
+1 1011010
+2 1011010 1011011
+3 1011010 1011011 1011011
+4 1011010 1011011 1011011 1010000
+5 1011010 1011011 1011011 1010000 1011011
+6 1011010 1011011 1011011 1010000 1011011 1011011
+7 1011010 1011011 1011011 1010000 1011011 1011011 0010011
+8 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001
+9 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001
+10 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000
+11 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010
+12 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011
+13 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011 1011011
+14 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011 1011011 1010000
+15 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011 1011011 1010000 1011011
+1 0111010
+2 0111010 0111011
+3 0111010 0111011 0111011
+4 0111010 0111011 0111011 0110000
+5 0111010 0111011 0111011 0110000 0011011
+6 0111010 0111011 0111011 0110000 0011011 0011011
+7 0111010 0111011 0111011 0110000 0011011 0011011 0110011
+8 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001
+9 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001 0101001
+10 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001 0101001 0110000
+11 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001 0101001 0110000 0111010
+12 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001 0101001 0110000 0111010 0111011
+13 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001 0101001 0110000 0111010 0111011 0111011
+14 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001 0101001 0110000 0111010 0111011 0111011 0110000
+15 0111010 0111011 0111011 0110000 0011011 0011011 0110011 0111001 0101001 0110000 0111010 0111011 0111011 0110000 0011011
+1 1111010
+2 1111010 1111011
+3 1111010 1111011 1111011
+4 1111010 1111011 1111011 1110000
+5 1111010 1111011 1111011 1110000 1011011
+6 1111010 1111011 1111011 1110000 1011011 1011011
+7 1111010 1111011 1111011 1110000 1011011 1011011 0110011
+8 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001
+9 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001
+10 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000
+11 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010
+12 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011
+13 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011
+14 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000
+15 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000 1011011
+1 0000110
+2 0000110 0000011
+3 0000110 0000011 0000111
+4 0000110 0000011 0000111 0000000
+5 0000110 0000011 0000111 0000000 0000111
+6 0000110 0000011 0000111 0000000 0000111 0000011
+7 0000110 0000011 0000111 0000000 0000111 0000011 0000011
+8 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001
+9 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001 0000101
+10 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001 0000101 0000000
+11 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001 0000101 0000000 0000110
+12 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001 0000101 0000000 0000110 0000011
+13 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001 0000101 0000000 0000110 0000011 0000111
+14 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001 0000101 0000000 0000110 0000011 0000111 0000000
+15 0000110 0000011 0000111 0000000 0000111 0000011 0000011 0000001 0000101 0000000 0000110 0000011 0000111 0000000 0000111
+1 1000110
+2 1000110 1000011
+3 1000110 1000011 1000111
+4 1000110 1000011 1000111 1000000
+5 1000110 1000011 1000111 1000000 1000111
+6 1000110 1000011 1000111 1000000 1000111 1000011
+7 1000110 1000011 1000111 1000000 1000111 1000011 0000011
+8 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001
+9 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001 1000101
+10 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001 1000101 0000000
+11 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001 1000101 0000000 1000110
+12 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001 1000101 0000000 1000110 1000011
+13 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001 1000101 0000000 1000110 1000011 1000111
+14 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001 1000101 0000000 1000110 1000011 1000111 1000000
+15 1000110 1000011 1000111 1000000 1000111 1000011 0000011 1000001 1000101 0000000 1000110 1000011 1000111 1000000 1000111
+1 0100110
+2 0100110 0100011
+3 0100110 0100011 0100111
+4 0100110 0100011 0100111 0100000
+5 0100110 0100011 0100111 0100000 0000111
+6 0100110 0100011 0100111 0100000 0000111 0000011
+7 0100110 0100011 0100111 0100000 0000111 0000011 0100011
+8 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001
+9 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001 0100101
+10 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001 0100101 0100000
+11 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001 0100101 0100000 0100110
+12 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001 0100101 0100000 0100110 0100011
+13 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001 0100101 0100000 0100110 0100011 0100111
+14 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001 0100101 0100000 0100110 0100011 0100111 0100000
+15 0100110 0100011 0100111 0100000 0000111 0000011 0100011 0100001 0100101 0100000 0100110 0100011 0100111 0100000 0000111
+1 1100110
+2 1100110 1100011
+3 1100110 1100011 1100111
+4 1100110 1100011 1100111 1100000
+5 1100110 1100011 1100111 1100000 1000111
+6 1100110 1100011 1100111 1100000 1000111 1000011
+7 1100110 1100011 1100111 1100000 1000111 1000011 0100011
+8 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001
+9 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001 1100101
+10 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001 1100101 0100000
+11 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001 1100101 0100000 1100110
+12 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001 1100101 0100000 1100110 1100011
+13 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001 1100101 0100000 1100110 1100011 1100111
+14 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001 1100101 0100000 1100110 1100011 1100111 1100000
+15 1100110 1100011 1100111 1100000 1000111 1000011 0100011 1100001 1100101 0100000 1100110 1100011 1100111 1100000 1000111
+1 0010110
+2 0010110 0010011
+3 0010110 0010011 0010111
+4 0010110 0010011 0010111 0010000
+5 0010110 0010011 0010111 0010000 0010111
+6 0010110 0010011 0010111 0010000 0010111 0010011
+7 0010110 0010011 0010111 0010000 0010111 0010011 0010011
+8 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001
+9 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001 0000101
+10 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001 0000101 0010000
+11 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001 0000101 0010000 0010110
+12 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001 0000101 0010000 0010110 0010011
+13 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001 0000101 0010000 0010110 0010011 0010111
+14 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001 0000101 0010000 0010110 0010011 0010111 0010000
+15 0010110 0010011 0010111 0010000 0010111 0010011 0010011 0010001 0000101 0010000 0010110 0010011 0010111 0010000 0010111
+1 1010110
+2 1010110 1010011
+3 1010110 1010011 1010111
+4 1010110 1010011 1010111 1010000
+5 1010110 1010011 1010111 1010000 1010111
+6 1010110 1010011 1010111 1010000 1010111 1010011
+7 1010110 1010011 1010111 1010000 1010111 1010011 0010011
+8 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001
+9 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101
+10 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000
+11 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110
+12 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011
+13 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111
+14 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000
+15 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111
+1 0110110
+2 0110110 0110011
+3 0110110 0110011 0110111
+4 0110110 0110011 0110111 0110000
+5 0110110 0110011 0110111 0110000 0010111
+6 0110110 0110011 0110111 0110000 0010111 0010011
+7 0110110 0110011 0110111 0110000 0010111 0010011 0110011
+8 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001
+9 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101
+10 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000
+11 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110
+12 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011
+13 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011 0110111
+14 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011 0110111 0110000
+15 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011 0110111 0110000 0010111
+1 1110110
+2 1110110 1110011
+3 1110110 1110011 1110111
+4 1110110 1110011 1110111 1110000
+5 1110110 1110011 1110111 1110000 1010111
+6 1110110 1110011 1110111 1110000 1010111 1010011
+7 1110110 1110011 1110111 1110000 1010111 1010011 0110011
+8 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001
+9 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001 1100101
+10 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001 1100101 0110000
+11 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001 1100101 0110000 1110110
+12 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001 1100101 0110000 1110110 1110011
+13 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001 1100101 0110000 1110110 1110011 1110111
+14 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001 1100101 0110000 1110110 1110011 1110111 1110000
+15 1110110 1110011 1110111 1110000 1010111 1010011 0110011 1110001 1100101 0110000 1110110 1110011 1110111 1110000 1010111
+1 0001110
+2 0001110 0001011
+3 0001110 0001011 0001111
+4 0001110 0001011 0001111 0000000
+5 0001110 0001011 0001111 0000000 0001111
+6 0001110 0001011 0001111 0000000 0001111 0001011
+7 0001110 0001011 0001111 0000000 0001111 0001011 0000011
+8 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001
+9 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001 0001101
+10 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001 0001101 0000000
+11 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001 0001101 0000000 0001110
+12 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001 0001101 0000000 0001110 0001011
+13 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001 0001101 0000000 0001110 0001011 0001111
+14 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001 0001101 0000000 0001110 0001011 0001111 0000000
+15 0001110 0001011 0001111 0000000 0001111 0001011 0000011 0001001 0001101 0000000 0001110 0001011 0001111 0000000 0001111
+1 1001110
+2 1001110 1001011
+3 1001110 1001011 1001111
+4 1001110 1001011 1001111 1000000
+5 1001110 1001011 1001111 1000000 1001111
+6 1001110 1001011 1001111 1000000 1001111 1001011
+7 1001110 1001011 1001111 1000000 1001111 1001011 0000011
+8 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001
+9 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001 1001101
+10 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001 1001101 0000000
+11 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001 1001101 0000000 1001110
+12 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001 1001101 0000000 1001110 1001011
+13 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001 1001101 0000000 1001110 1001011 1001111
+14 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001 1001101 0000000 1001110 1001011 1001111 1000000
+15 1001110 1001011 1001111 1000000 1001111 1001011 0000011 1001001 1001101 0000000 1001110 1001011 1001111 1000000 1001111
+1 0101110
+2 0101110 0101011
+3 0101110 0101011 0101111
+4 0101110 0101011 0101111 0100000
+5 0101110 0101011 0101111 0100000 0001111
+6 0101110 0101011 0101111 0100000 0001111 0001011
+7 0101110 0101011 0101111 0100000 0001111 0001011 0100011
+8 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001
+9 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001 0101101
+10 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001 0101101 0100000
+11 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001 0101101 0100000 0101110
+12 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001 0101101 0100000 0101110 0101011
+13 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001 0101101 0100000 0101110 0101011 0101111
+14 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001 0101101 0100000 0101110 0101011 0101111 0100000
+15 0101110 0101011 0101111 0100000 0001111 0001011 0100011 0101001 0101101 0100000 0101110 0101011 0101111 0100000 0001111
+1 1101110
+2 1101110 1101011
+3 1101110 1101011 1101111
+4 1101110 1101011 1101111 1100000
+5 1101110 1101011 1101111 1100000 1001111
+6 1101110 1101011 1101111 1100000 1001111 1001011
+7 1101110 1101011 1101111 1100000 1001111 1001011 0100011
+8 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001
+9 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001 1101101
+10 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001 1101101 0100000
+11 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001 1101101 0100000 1101110
+12 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001 1101101 0100000 1101110 1101011
+13 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001 1101101 0100000 1101110 1101011 1101111
+14 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001 1101101 0100000 1101110 1101011 1101111 1100000
+15 1101110 1101011 1101111 1100000 1001111 1001011 0100011 1101001 1101101 0100000 1101110 1101011 1101111 1100000 1001111
+1 0011110
+2 0011110 0011011
+3 0011110 0011011 0011111
+4 0011110 0011011 0011111 0010000
+5 0011110 0011011 0011111 0010000 0011111
+6 0011110 0011011 0011111 0010000 0011111 0011011
+7 0011110 0011011 0011111 0010000 0011111 0011011 0010011
+8 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001
+9 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001 0001101
+10 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001 0001101 0010000
+11 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001 0001101 0010000 0011110
+12 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001 0001101 0010000 0011110 0011011
+13 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001 0001101 0010000 0011110 0011011 0011111
+14 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001 0001101 0010000 0011110 0011011 0011111 0010000
+15 0011110 0011011 0011111 0010000 0011111 0011011 0010011 0011001 0001101 0010000 0011110 0011011 0011111 0010000 0011111
+1 1011110
+2 1011110 1011011
+3 1011110 1011011 1011111
+4 1011110 1011011 1011111 1010000
+5 1011110 1011011 1011111 1010000 1011111
+6 1011110 1011011 1011111 1010000 1011111 1011011
+7 1011110 1011011 1011111 1010000 1011111 1011011 0010011
+8 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001
+9 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101
+10 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000
+11 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110
+12 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011
+13 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111
+14 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111 1010000
+15 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111 1010000 1011111
+1 0111110
+2 0111110 0111011
+3 0111110 0111011 0111111
+4 0111110 0111011 0111111 0110000
+5 0111110 0111011 0111111 0110000 0011111
+6 0111110 0111011 0111111 0110000 0011111 0011011
+7 0111110 0111011 0111111 0110000 0011111 0011011 0110011
+8 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001
+9 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001 0101101
+10 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001 0101101 0110000
+11 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001 0101101 0110000 0111110
+12 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001 0101101 0110000 0111110 0111011
+13 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001 0101101 0110000 0111110 0111011 0111111
+14 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001 0101101 0110000 0111110 0111011 0111111 0110000
+15 0111110 0111011 0111111 0110000 0011111 0011011 0110011 0111001 0101101 0110000 0111110 0111011 0111111 0110000 0011111
+1 1111110
+2 1111110 1111011
+3 1111110 1111011 1111111
+4 1111110 1111011 1111111 1110000
+5 1111110 1111011 1111111 1110000 1011111
+6 1111110 1111011 1111111 1110000 1011111 1011011
+7 1111110 1111011 1111111 1110000 1011111 1011011 0110011
+8 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001
+9 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001 1101101
+10 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001 1101101 0110000
+11 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001 1101101 0110000 1111110
+12 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001 1101101 0110000 1111110 1111011
+13 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001 1101101 0110000 1111110 1111011 1111111
+14 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001 1101101 0110000 1111110 1111011 1111111 1110000
+15 1111110 1111011 1111111 1110000 1011111 1011011 0110011 1111001 1101101 0110000 1111110 1111011 1111111 1110000 1011111
+1 1000000
+100 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001
+35 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000
+62 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011 1011111 1010000 1011111 1011011 0010011 1011001 1001101 0010000 1011110 1011011
+84 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000
+55 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011 0010000 0011011 0011011 0010011 0011001 0001001 0010000 0011010 0011011 0011011 0010000 0011011 0011011 0010011
+30 0100001 0101001 0101101 0100000 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000 0101100 0101001 0101101 0100000 0001101 0001001 0100001 0101001 0101101 0100000 0101100 0101001 0101101 0100000 0001101 0001001
+56 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000 0010100 0010000 0010100 0010000 0010100 0010000 0010000 0010000 0000100 0010000
+2 1010001 1000101
+98 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000
+65 0110000 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000 1011001 1011001 0110001 1111001 1101001 0110000 1111000 1111001 1111001 1110000
+12 0110000 0111000 0111000 0111000 0110000 0011000 0011000 0110000 0111000 0101000 0110000 0111000
+22 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000
+15 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000 0000011 0000011 0100011
+17 1101001 0110000 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000 1011011
+2 1001001 0100001
+64 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010
+40 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100
+53 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000 1011011 1011011 0110011 1111001 1101001 0110000 1111010 1111011 1111011 1110000 1011011 1011011 0110011
+52 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0010000 0000000 0010000 0010000 0010000
+99 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011 0001011 0000000 0001011 0001011 0000011 0001001 0001001 0000000 0001010 0001011
+37 0010000 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111 1010011
+67 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010 1100000 1000010 1000010 0100010 1100000 1100000 0100000 1100010 1100010 1100010
+17 0011000 0010000 0011000 0011000 0010000 0011000 0001000 0010000 0011000 0011000 0011000 0010000 0011000 0011000 0010000 0011000 0001000
+56 0100000 0101000 0101100 0100000 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000 0101100 0100000 0001100 0001000 0100000 0101000 0101100 0100000 0101100 0101000
+35 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000
+9 0100010 1101000 1101000 0100000 1101010 1101010 1101010 1100000 1001010
+8 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100
+15 1001010 1000000 1001010 1001010 0000010 1001000 1001000 0000000 1001010 1001010 1001010 1000000 1001010 1001010 0000010
+80 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000 1111100 1111000 1111100 1110000 1011100 1011000 0110000 1111000 1101100 0110000
+8 0111001 0101101 0110000 0111110 0111011 0111111 0110000 0011111
+9 0100000 0101000 0101001 0101001 0100000 0001001 0001001 0100001 0101001
+25 0000000 0000101 0000001 0000001 0000001 0000101 0000000 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001 0000101 0000000 0000100 0000001 0000101 0000000 0000101 0000001 0000001 0000001
+89 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000 0000010 0000010 0000010 0000000 0000000 0000000 0000010 0000010 0000010 0000000
+67 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110 1110000 1010110 1010010 0110010 1110000 1100100 0110000 1110110 1110010 1110110
+90 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010 0100010 0100010 0100000 0000010 0000010 0100010 0100000 0100000 0100000 0100010
+18 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000 0011001 0011001 0110001 0111001 0101001 0110000 0111000 0111001 0111001 0110000
+27 1000100 0010000 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000 1010100 1010000 1010100
+72 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000
+60 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000 1010000 1010000 1010000 1010000 0010000 1010000 1000000 0010000 1010000 1010000
+82 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000 1001000 0100000 1101000 1101000 0100000 1101000 1101000 1101000 1100000 1001000
+60 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000 0001011 0001011 0100011 0101001 0101001 0100000 0101010 0101011 0101011 0100000
+53 0100010 0100000 0100100 0100000 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100 0100000 0100110 0100010 0100110 0100000 0000110 0000010 0100010 0100000 0100100
+33 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000 1100000 1100000 1100000 1000000 1000000 0100000 1100000 1100000 0100000 1100000 1100000 1100000 1100000 1000000
+68 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000 1000000 1000001 1000001 1000000 1000001 1000001 0000001 1000001 1000001 0000000
+26 1001101 1001001 0100001 1101001 1101101 0100000 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000 1101100 1101001 1101101 1100000 1001101 1001001 0100001 1101001 1101101 0100000
+8 1101010 1100000 1001010 1001010 0100010 1101000 1101000 0100000
+33 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001
+84 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011 0110000 0010011 0010011 0110011 0110001 0100001 0110000 0110010 0110011 0110011
+70 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101 0010001 0010001 0010001 0000101 0010000 0010100 0010001 0010101 0010000 0010101 0010001
+89 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010 0000010 1000000 1000000 0000000 1000010 1000010 1000010 1000000 1000010 1000010
+91 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000 1010110 1010010 0010010 1010000 1000100 0010000 1010110 1010010 1010110 1010000
+13 0110000 0110000 0010000 0010000 0110000 0110000 0100000 0110000 0110000 0110000 0110000 0110000 0010000
+21 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110
+82 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101 0100000 1100100 1100001 1100101 1100000 1000101 1000001 0100001 1100001 1100101
+53 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111 1010000 1010111 1010011 0010011 1010001 1000101 0010000 1010110 1010011 1010111
+20 1011101 1011001 0010001 1011001 1001101 0010000 1011100 1011001 1011101 1010000 1011101 1011001 0010001 1011001 1001101 0010000 1011100 1011001 1011101 1010000
+91 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010 0110010 0110000 0100100 0110000 0110110 0110010 0110110 0110000 0010110 0010010
+26 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000 1000100 0010000 1010100 1010000 1010100 1010000 1010100 1010000 0010000 1010000
+38 0010000 0000000 0010000 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010 0010010 0010010 0010000 0010010 0010010 0010010 0010000 0000000 0010000 0010010 0010010 0010010 0010000 0010010
+8 0000000 1000000 1000000 0000000 1000000 1000000 1000000 1000000
+45 0010010 0011000 0001000 0010000 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010 0011010 0011010 0010000 0011010 0011010 0010010 0011000 0001000 0010000 0011010
+7 1011011 0110011 1111001 1101001 0110000 1111010 1111011
+18 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100 0000000 1001100 1001000 1001100 1000000 1001100 1001000 0000000 1001000 1001100
+69 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000 0011000 0011001 0011001 0010000 0011001 0011001 0010001 0011001 0001001 0010000
+74 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110 1111010 1111110 1110000 1011110 1011010 0110010 1111000 1101100 0110000 1111110
+80 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100 1100000 1000100 1000000 0100000 1100000 1100100 0100000 1100100 1100000 1100100
+2 0110000 0010100
+16 0111001 0111101 0110000 0011101 0011001 0110001 0111001 0101101 0110000 0111100 0111001 0111101 0110000 0011101 0011001 0110001
+44 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001 0100101 0110000 0110110 0110011 0110111 0110000 0010111 0010011 0110011 0110001
+49 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000 0000011 0000011 0100011 0100001 0100001 0100000 0100010 0100011 0100011 0100000 0000011
+62 1111000 1101000 0110000 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000 0110000 1111010 1111010 1111010 1110000 1011010 1011010 0110010 1111000 1101000
+93 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001 0110001 0110001 0100001 0110000 0110000 0110001 0110001 0110000 0010001 0010001
+46 0000001 1001001 1001101 0000000 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001 1001101 1000000 1001101 1001001 0000001 1001001 1001101 0000000 1001100 1001001
+51 1011001 1001001 0010000 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001 1001001 0010000 1011010 1011011 1011011 1010000 1011011 1011011 0010011 1011001
+26 0100000 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000 0100000 0100001 0100001 0100000 0000001 0000001 0100001 0100001 0100001 0100000 0100000 0100001 0100001 0100000 0000001
diff --git a/kickstart_2014/src/y2014_round_a/A-sample.in b/kickstart_2014/src/y2014_round_a/A-sample.in
new file mode 100644
index 0000000..d1bfb50
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/A-sample.in
@@ -0,0 +1,5 @@
+4
+1 1111111
+2 0000000 0001010
+3 0100000 0000111 0000011
+5 1011011 1011111 1010000 1011111 1011011
\ No newline at end of file
diff --git a/kickstart_2014/src/y2014_round_a/A-sample.out b/kickstart_2014/src/y2014_round_a/A-sample.out
new file mode 100644
index 0000000..27d9a2c
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/A-sample.out
@@ -0,0 +1,4 @@
+Case #1: 1110000
+Case #2: ERROR!
+Case #3: 0100011
+Case #4: 0010011
diff --git a/kickstart_2014/src/y2014_round_a/A-small-practice.in b/kickstart_2014/src/y2014_round_a/A-small-practice.in
new file mode 100644
index 0000000..12aac3e
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/A-small-practice.in
@@ -0,0 +1,101 @@
+100
+5 1011011 1011111 1010000 1011111 1011011
+1 1111111
+5 0000000 0000000 0000000 0000100 0000000
+4 0001000 0010000 0011010 0011010
+1 1011110
+5 1011110 1011011 1011111 1010000 1011111
+2 0010011 1011001
+4 0100001 1101001 1101101 0100000
+5 0110000 1111000 1111001 1111001 1110000
+5 0100000 1101110 1101010 1101110 1100000
+2 1111011 1110000
+2 1101000 0110000
+5 0010011 0110011 0110001 0100101 0110000
+2 0110000 1111100
+2 1010111 1010000
+2 0100001 1101001
+4 1101001 1101001 0100000 1101010
+1 0001011
+3 0111011 0111111 0110000
+1 0110000
+4 1011010 1011010 0110010 1111000
+3 1111001 1101001 0110000
+2 1111010 1111110
+1 0110000
+3 1111001 1111101 1110000
+5 1011001 1001101 0010000 1011100 1011001
+1 0011111
+3 1010110 1010011 1010111
+5 1011101 1011001 0010001 1011001 1001101
+5 1010011 0110011 1110001 1100101 0110000
+2 1101001 0110000
+4 1111010 1111110 1110000 1011110
+1 0110000
+4 0010111 0010011 0110011 0110001
+2 0110010 1111000
+1 1010000
+5 0110000 1111110 1111010 1111110 1110000
+4 0110001 1111001 1101101 0110000
+1 1011100
+3 1110000 1011100 1011000
+3 1110001 1100101 0110000
+3 1011011 0110011 1111001
+5 1011010 1011010 0110010 1111000 1101000
+3 1011011 0110011 1111001
+2 1100100 0110000
+1 1011000
+5 0011011 0011011 0110011 0111001 0101001
+1 0100000
+4 1011010 1011010 0110010 1111000
+2 0101101 0110000
+2 1111111 1110000
+5 1101001 0100000 1101010 1101011 1101011
+2 0010111 0010011
+1 0100000
+1 0111001
+3 0001111 0001011 0100011
+4 1101101 0110000 1111100 1111001
+1 0111000
+3 0110000 0111110 0111011
+2 0101100 0110000
+4 1011100 1011000 0110000 1111000
+4 0110011 0111001 0101101 0110000
+4 0011111 0010000 0011111 0011011
+5 1110000 1011011 1011011 0110011 1111001
+4 1101100 0100000 1101110 1101010
+1 1001111
+1 0110011
+4 0011001 0001101 0010000 0011110
+2 0100000 1101110
+2 0011101 0011001
+5 1001110 1001010 0100010 1101000 1101100
+1 0100010
+1 1111110
+1 1011101
+2 1010111 1010011
+5 0110000 1110100 1110001 1110101 1110000
+2 1001001 1001101
+5 0110011 0111001 0101001 0110000 0111010
+2 1110000 1011100
+5 0110001 1111001 1101001 0110000 1111000
+1 0111011
+2 1111001 1110000
+1 0111010
+4 1010000 1011101 1011001 0010001
+3 0000011 1001001 1001101
+2 1111001 1110000
+5 1011011 1011111 1010000 1011111 1011011
+2 1101011 1100000
+2 0101011 0101111
+3 0010000 0011111 0011011
+5 0101001 0110000 0111010 0111011 0111011
+4 0110000 1111110 1111011 1111111
+3 1111010 1110000 1011010
+1 1011011
+2 1110000 1011001
+2 0011111 0011011
+1 1111001
+1 0100000
+1 0110000
+5 1010110 1010010 0110010 1110000 1100100
diff --git a/kickstart_2014/src/y2014_round_a/a.rs b/kickstart_2014/src/y2014_round_a/a.rs
index d4bdf73..f595dd0 100644
--- a/kickstart_2014/src/y2014_round_a/a.rs
+++ b/kickstart_2014/src/y2014_round_a/a.rs
@@ -1,28 +1,34 @@
 //use bit_set::BitSet;
+use codejam::util::bitvec64::BitVec64;
 use codejam::util::codejam::run_cases;
+use itertools::Itertools;
 use std::io::Write;
 use std::usize;
 
 /*
-Greedy
-Induction (proof)
+
 */
 pub fn solve_all_cases()
 {
     run_cases(
-        &["A-small-practice", "A-large-practice"],
-        "y2008qual",
+        &[
+            "A-sample",     "A-small-practice", "A-large-practice"
+        ],
+        "y2014_round_a",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let n = reader.read_int();
-
-                let search_engines: Vec<_> = (0..n).map(|_| reader.read_string()).collect();
+                let in_line = reader.read_string_line();
+                let n: usize = in_line[0].parse().unwrap();
 
-                let q = reader.read_int();
+                let seq: Vec<usize> = in_line
+                    .iter()
+                    .skip(1)
+                    .map(|s| s.chars().collect::<BitVec64>().data)
+                    .collect();
 
-                let queries: Vec<_> = (0..q).map(|_| reader.read_string()).collect();
+                assert_eq!(n, seq.len());
 
                 if case_no != 3 {
                     // continue;
@@ -30,44 +36,72 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                writeln!(
-                    buffer,
-                    "Case #{}: {}",
-                    case_no,
-                    solve(search_engines.as_slice(), queries.as_slice())
-                )
-                .unwrap();
+                writeln!(buffer, "Case #{}: {}", case_no, solve(&seq)).unwrap();
             }
         },
     );
 }
 
-fn solve(search_engines: &[String], queries: &[String]) -> usize
+const SEQ_0_9: [usize; 10] = [
+    0b_0111111, 0b_0000110, 0b_1011011, 0b_1001111, //3
+    0b_1100110, 0b_1101101, 0b_1111101, 0b_0000111, 0b_1111111, 0b_1101111, // 9
+];
+
+fn solve(seq: &[usize]) -> String
 {
-    let mut s_changes = 0;
-    let mut cur_q = 0;
+    let mut found = false;
+    let mut found_broken = 0;
+    let mut next_idx = 0;
 
-    while cur_q != queries.len() {
-        //given 1 switch, how many queries can we get through by choosing the search engine that occurs the latest in the next
-        //batch of queries
-        let s_potential_progress = search_engines.iter().map(|search| {
-            let idx = queries[cur_q..queries.len()]
+    for start in 0..SEQ_0_9.len() {
+        for broken_seg in 0..1 << 7 {
+            let mut digit_ok = true;
+
+            for ((idx, &check_digit), &test_seq_digit) in SEQ_0_9
                 .iter()
-                .position(|q| q == search);
-            if let Some(idx) = idx {
-                idx + cur_q
-            } else {
-                queries.len()
+                .enumerate()
+                .rev()
+                .cycle()
+                .skip(start)
+                .take(seq.len())
+                .zip(seq.iter())
+            {
+                debug!(
+                    "Looking at check digit {:0>7b} test digit {:0>7b} idx {}",
+                    check_digit, test_seq_digit, idx
+                );
+                if test_seq_digit != (check_digit & !broken_seg) {
+                    digit_ok = false;
+                    break;
+                }
+
             }
-        });
 
-        cur_q = s_potential_progress.max().unwrap();
-        s_changes += 1;
+            if digit_ok && found {
+                //must be unique
+                found = false;
+                break;
+            }
+            if digit_ok && !found {
+                found = true;
+                found_broken = broken_seg;
+                next_idx = (100 * SEQ_0_9.len() - start - seq.len() - 1) % SEQ_0_9.len();
+                debug!(
+                    "Found match.  start={} next={} seq len {}",
+                    start,
+                    next_idx,
+                    seq.len()
+                );
+            }
+        }
     }
 
-    if s_changes > 0 {
-        s_changes -= 1;
+    if !found {
+        "ERROR!".to_string()
+    } else {
+        let ans = SEQ_0_9[next_idx] & !found_broken;
+        (0..7)
+            .map(|i| if ans >> i & 1 > 0 { "1" } else { "0" })
+            .join("")
     }
-
-    s_changes
 }

From f0542b1414075b6ec2dde29385d3eee794a4bd99 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 27 Feb 2019 23:49:35 -0300
Subject: [PATCH 116/122] kickstart 2014 a

---
 .../src/y2014_round_a/A-large-practice.out    | 2000 +++++++++++++++++
 .../src/y2014_round_a/A-small-practice.out    |  100 +
 2 files changed, 2100 insertions(+)
 create mode 100644 kickstart_2014/src/y2014_round_a/A-large-practice.out
 create mode 100644 kickstart_2014/src/y2014_round_a/A-small-practice.out

diff --git a/kickstart_2014/src/y2014_round_a/A-large-practice.out b/kickstart_2014/src/y2014_round_a/A-large-practice.out
new file mode 100644
index 0000000..ee2f810
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/A-large-practice.out
@@ -0,0 +1,2000 @@
+Case #1: ERROR!
+Case #2: 1101101
+Case #3: 0010000
+Case #4: ERROR!
+Case #5: ERROR!
+Case #6: 0000000
+Case #7: 0000000
+Case #8: ERROR!
+Case #9: ERROR!
+Case #10: ERROR!
+Case #11: ERROR!
+Case #12: ERROR!
+Case #13: ERROR!
+Case #14: ERROR!
+Case #15: ERROR!
+Case #16: ERROR!
+Case #17: ERROR!
+Case #18: ERROR!
+Case #19: ERROR!
+Case #20: ERROR!
+Case #21: 1000000
+Case #22: ERROR!
+Case #23: 1000000
+Case #24: ERROR!
+Case #25: 0000000
+Case #26: 1000000
+Case #27: 1000000
+Case #28: 0000000
+Case #29: 1000000
+Case #30: 1000000
+Case #31: 1000000
+Case #32: 1000000
+Case #33: 1000000
+Case #34: 1000000
+Case #35: ERROR!
+Case #36: 0100000
+Case #37: 0100000
+Case #38: 0000000
+Case #39: 0000000
+Case #40: 0100000
+Case #41: 0100000
+Case #42: 0100000
+Case #43: 0100000
+Case #44: 0100000
+Case #45: 0100000
+Case #46: 0100000
+Case #47: 0100000
+Case #48: 0000000
+Case #49: 0000000
+Case #50: ERROR!
+Case #51: 1100000
+Case #52: ERROR!
+Case #53: 1000000
+Case #54: 1000000
+Case #55: 0100000
+Case #56: 1100000
+Case #57: 1100000
+Case #58: 0100000
+Case #59: 1100000
+Case #60: 1100000
+Case #61: 1100000
+Case #62: 1100000
+Case #63: 1000000
+Case #64: 1000000
+Case #65: ERROR!
+Case #66: 0010000
+Case #67: ERROR!
+Case #68: ERROR!
+Case #69: 0010000
+Case #70: ERROR!
+Case #71: 0010000
+Case #72: ERROR!
+Case #73: 0010000
+Case #74: 0010000
+Case #75: 0010000
+Case #76: 0010000
+Case #77: 0010000
+Case #78: 0010000
+Case #79: 0010000
+Case #80: ERROR!
+Case #81: 1010000
+Case #82: ERROR!
+Case #83: 1010000
+Case #84: ERROR!
+Case #85: 0010000
+Case #86: 1010000
+Case #87: 1000000
+Case #88: 0010000
+Case #89: 1010000
+Case #90: 1010000
+Case #91: 1010000
+Case #92: 1010000
+Case #93: 1010000
+Case #94: 1010000
+Case #95: ERROR!
+Case #96: 0110000
+Case #97: 0110000
+Case #98: ERROR!
+Case #99: 0010000
+Case #100: 0110000
+Case #101: 0110000
+Case #102: 0100000
+Case #103: 0110000
+Case #104: 0110000
+Case #105: 0110000
+Case #106: 0110000
+Case #107: 0110000
+Case #108: 0010000
+Case #109: 0010000
+Case #110: ERROR!
+Case #111: 1110000
+Case #112: ERROR!
+Case #113: 1010000
+Case #114: 1010000
+Case #115: 0110000
+Case #116: 1110000
+Case #117: 1100000
+Case #118: 0110000
+Case #119: 1110000
+Case #120: 1110000
+Case #121: 1110000
+Case #122: 1110000
+Case #123: 1010000
+Case #124: 1010000
+Case #125: ERROR!
+Case #126: 0001000
+Case #127: 0000000
+Case #128: 0001000
+Case #129: 0001000
+Case #130: 0000000
+Case #131: 0001000
+Case #132: 0001000
+Case #133: 0000000
+Case #134: 0001000
+Case #135: 0001000
+Case #136: 0001000
+Case #137: 0000000
+Case #138: 0001000
+Case #139: 0001000
+Case #140: ERROR!
+Case #141: 1001000
+Case #142: 1000000
+Case #143: 1001000
+Case #144: 1001000
+Case #145: 0000000
+Case #146: 1001000
+Case #147: 1001000
+Case #148: 0000000
+Case #149: 1001000
+Case #150: 1001000
+Case #151: 1001000
+Case #152: 1000000
+Case #153: 1001000
+Case #154: 1001000
+Case #155: ERROR!
+Case #156: 0101000
+Case #157: 0100000
+Case #158: 0001000
+Case #159: 0001000
+Case #160: 0100000
+Case #161: 0101000
+Case #162: 0101000
+Case #163: 0100000
+Case #164: 0101000
+Case #165: 0101000
+Case #166: 0101000
+Case #167: 0100000
+Case #168: 0001000
+Case #169: 0001000
+Case #170: ERROR!
+Case #171: 1101000
+Case #172: 1100000
+Case #173: 1001000
+Case #174: 1001000
+Case #175: 0100000
+Case #176: 1101000
+Case #177: 1101000
+Case #178: 0100000
+Case #179: 1101000
+Case #180: 1101000
+Case #181: 1101000
+Case #182: 1100000
+Case #183: 1001000
+Case #184: 1001000
+Case #185: ERROR!
+Case #186: 0011000
+Case #187: 0010000
+Case #188: 0011000
+Case #189: 0011000
+Case #190: 0010000
+Case #191: 0011000
+Case #192: 0001000
+Case #193: 0010000
+Case #194: 0011000
+Case #195: 0011000
+Case #196: 0011000
+Case #197: 0010000
+Case #198: 0011000
+Case #199: 0011000
+Case #200: ERROR!
+Case #201: 1011000
+Case #202: 1010000
+Case #203: 1011000
+Case #204: 1011000
+Case #205: 0010000
+Case #206: 1011000
+Case #207: 1001000
+Case #208: 0010000
+Case #209: 1011000
+Case #210: 1011000
+Case #211: 1011000
+Case #212: 1010000
+Case #213: 1011000
+Case #214: 1011000
+Case #215: ERROR!
+Case #216: ERROR!
+Case #217: 0110000
+Case #218: 0011000
+Case #219: 0011000
+Case #220: 0110000
+Case #221: 0111000
+Case #222: 0101000
+Case #223: 0110000
+Case #224: 0111000
+Case #225: 0111000
+Case #226: 0111000
+Case #227: 0110000
+Case #228: 0011000
+Case #229: 0011000
+Case #230: ERROR!
+Case #231: ERROR!
+Case #232: 1110000
+Case #233: 1011000
+Case #234: 1011000
+Case #235: 0110000
+Case #236: 1111000
+Case #237: 1101000
+Case #238: 0110000
+Case #239: 1111000
+Case #240: 1111000
+Case #241: 1111000
+Case #242: 1110000
+Case #243: 1011000
+Case #244: 1011000
+Case #245: ERROR!
+Case #246: 0000100
+Case #247: 0000000
+Case #248: 0000100
+Case #249: ERROR!
+Case #250: ERROR!
+Case #251: 0000000
+Case #252: 0000100
+Case #253: 0000000
+Case #254: 0000100
+Case #255: 0000000
+Case #256: 0000100
+Case #257: 0000000
+Case #258: 0000100
+Case #259: 0000000
+Case #260: ERROR!
+Case #261: 1000100
+Case #262: ERROR!
+Case #263: ERROR!
+Case #264: 1000000
+Case #265: 0000000
+Case #266: 1000000
+Case #267: 1000100
+Case #268: 0000000
+Case #269: 1000100
+Case #270: 1000000
+Case #271: 1000100
+Case #272: 1000000
+Case #273: 1000100
+Case #274: 1000000
+Case #275: ERROR!
+Case #276: 0100100
+Case #277: ERROR!
+Case #278: ERROR!
+Case #279: 0000000
+Case #280: 0100000
+Case #281: 0100000
+Case #282: 0100100
+Case #283: 0100000
+Case #284: 0100100
+Case #285: 0100000
+Case #286: 0100100
+Case #287: 0100000
+Case #288: 0000100
+Case #289: 0000000
+Case #290: ERROR!
+Case #291: ERROR!
+Case #292: 1100000
+Case #293: 1000100
+Case #294: 1000000
+Case #295: 0100000
+Case #296: 1100000
+Case #297: 1100100
+Case #298: 0100000
+Case #299: 1100100
+Case #300: 1100000
+Case #301: 1100100
+Case #302: 1100000
+Case #303: 1000100
+Case #304: 1000000
+Case #305: ERROR!
+Case #306: 0010100
+Case #307: ERROR!
+Case #308: ERROR!
+Case #309: 0010000
+Case #310: 0010000
+Case #311: 0010000
+Case #312: 0000100
+Case #313: 0010000
+Case #314: 0010100
+Case #315: 0010000
+Case #316: 0010100
+Case #317: 0010000
+Case #318: 0010100
+Case #319: 0010000
+Case #320: ERROR!
+Case #321: 1010100
+Case #322: ERROR!
+Case #323: ERROR!
+Case #324: 1010000
+Case #325: 0010000
+Case #326: 1010000
+Case #327: 1000100
+Case #328: 0010000
+Case #329: 1010100
+Case #330: 1010000
+Case #331: 1010100
+Case #332: 1010000
+Case #333: 1010100
+Case #334: 1010000
+Case #335: ERROR!
+Case #336: ERROR!
+Case #337: 0110000
+Case #338: 0010100
+Case #339: 0010000
+Case #340: 0110000
+Case #341: 0110000
+Case #342: 0100100
+Case #343: 0110000
+Case #344: 0110100
+Case #345: 0110000
+Case #346: 0110100
+Case #347: 0110000
+Case #348: 0010100
+Case #349: 0010000
+Case #350: ERROR!
+Case #351: ERROR!
+Case #352: 1110000
+Case #353: 1010100
+Case #354: 1010000
+Case #355: 0110000
+Case #356: 1110000
+Case #357: 1100100
+Case #358: 0110000
+Case #359: 1110100
+Case #360: 1110000
+Case #361: 1110100
+Case #362: 1110000
+Case #363: 1010100
+Case #364: 1010000
+Case #365: ERROR!
+Case #366: 0001100
+Case #367: 0000000
+Case #368: 0001100
+Case #369: 0001000
+Case #370: 0000000
+Case #371: 0001000
+Case #372: 0001100
+Case #373: 0000000
+Case #374: 0001100
+Case #375: 0001000
+Case #376: 0001100
+Case #377: 0000000
+Case #378: 0001100
+Case #379: 0001000
+Case #380: ERROR!
+Case #381: 1001100
+Case #382: 1000000
+Case #383: 1001100
+Case #384: 1001000
+Case #385: 0000000
+Case #386: 1001000
+Case #387: 1001100
+Case #388: 0000000
+Case #389: 1001100
+Case #390: 1001000
+Case #391: 1001100
+Case #392: 1000000
+Case #393: 1001100
+Case #394: 1001000
+Case #395: ERROR!
+Case #396: 0101100
+Case #397: 0100000
+Case #398: 0001100
+Case #399: 0001000
+Case #400: 0100000
+Case #401: 0101000
+Case #402: 0101100
+Case #403: 0100000
+Case #404: 0101100
+Case #405: 0101000
+Case #406: 0101100
+Case #407: 0100000
+Case #408: 0001100
+Case #409: 0001000
+Case #410: ERROR!
+Case #411: 1101100
+Case #412: 1100000
+Case #413: 1001100
+Case #414: 1001000
+Case #415: 0100000
+Case #416: 1101000
+Case #417: 1101100
+Case #418: 0100000
+Case #419: 1101100
+Case #420: 1101000
+Case #421: 1101100
+Case #422: 1100000
+Case #423: 1001100
+Case #424: 1001000
+Case #425: ERROR!
+Case #426: 0011100
+Case #427: 0010000
+Case #428: 0011100
+Case #429: 0011000
+Case #430: 0010000
+Case #431: 0011000
+Case #432: 0001100
+Case #433: 0010000
+Case #434: 0011100
+Case #435: 0011000
+Case #436: 0011100
+Case #437: 0010000
+Case #438: 0011100
+Case #439: 0011000
+Case #440: ERROR!
+Case #441: 1011100
+Case #442: 1010000
+Case #443: 1011100
+Case #444: 1011000
+Case #445: 0010000
+Case #446: 1011000
+Case #447: 1001100
+Case #448: 0010000
+Case #449: 1011100
+Case #450: 1011000
+Case #451: 1011100
+Case #452: 1010000
+Case #453: 1011100
+Case #454: 1011000
+Case #455: ERROR!
+Case #456: 0111100
+Case #457: 0110000
+Case #458: 0011100
+Case #459: 0011000
+Case #460: 0110000
+Case #461: 0111000
+Case #462: 0101100
+Case #463: 0110000
+Case #464: 0111100
+Case #465: 0111000
+Case #466: 0111100
+Case #467: 0110000
+Case #468: 0011100
+Case #469: 0011000
+Case #470: ERROR!
+Case #471: 1111100
+Case #472: 1110000
+Case #473: 1011100
+Case #474: 1011000
+Case #475: 0110000
+Case #476: 1111000
+Case #477: 1101100
+Case #478: 0110000
+Case #479: 1111100
+Case #480: 1111000
+Case #481: 1111100
+Case #482: 1110000
+Case #483: 1011100
+Case #484: 1011000
+Case #485: ERROR!
+Case #486: 0000010
+Case #487: ERROR!
+Case #488: ERROR!
+Case #489: 0000010
+Case #490: 0000010
+Case #491: 0000000
+Case #492: 0000000
+Case #493: 0000000
+Case #494: 0000010
+Case #495: 0000010
+Case #496: 0000010
+Case #497: 0000000
+Case #498: 0000010
+Case #499: 0000010
+Case #500: ERROR!
+Case #501: 1000010
+Case #502: 1000000
+Case #503: 1000010
+Case #504: 1000010
+Case #505: 0000010
+Case #506: 1000000
+Case #507: 1000000
+Case #508: 0000000
+Case #509: 1000010
+Case #510: 1000010
+Case #511: 1000010
+Case #512: 1000000
+Case #513: 1000010
+Case #514: 1000010
+Case #515: ERROR!
+Case #516: ERROR!
+Case #517: 0100000
+Case #518: 0000010
+Case #519: 0000010
+Case #520: 0100010
+Case #521: 0100000
+Case #522: 0100000
+Case #523: 0100000
+Case #524: 0100010
+Case #525: 0100010
+Case #526: 0100010
+Case #527: 0100000
+Case #528: 0000010
+Case #529: 0000010
+Case #530: ERROR!
+Case #531: ERROR!
+Case #532: 1100000
+Case #533: 1000010
+Case #534: 1000010
+Case #535: 0100010
+Case #536: 1100000
+Case #537: 1100000
+Case #538: 0100000
+Case #539: 1100010
+Case #540: 1100010
+Case #541: 1100010
+Case #542: 1100000
+Case #543: 1000010
+Case #544: 1000010
+Case #545: ERROR!
+Case #546: 0010010
+Case #547: ERROR!
+Case #548: ERROR!
+Case #549: 0010010
+Case #550: 0010010
+Case #551: 0010000
+Case #552: 0000000
+Case #553: 0010000
+Case #554: 0010010
+Case #555: 0010010
+Case #556: 0010010
+Case #557: 0010000
+Case #558: 0010010
+Case #559: 0010010
+Case #560: ERROR!
+Case #561: 1010010
+Case #562: 1010000
+Case #563: 1010010
+Case #564: 1010010
+Case #565: 0010010
+Case #566: 1010000
+Case #567: 1000000
+Case #568: 0010000
+Case #569: 1010010
+Case #570: 1010010
+Case #571: 1010010
+Case #572: 1010000
+Case #573: 1010010
+Case #574: 1010010
+Case #575: ERROR!
+Case #576: ERROR!
+Case #577: 0110000
+Case #578: 0010010
+Case #579: 0010010
+Case #580: 0110010
+Case #581: 0110000
+Case #582: 0100000
+Case #583: 0110000
+Case #584: 0110010
+Case #585: 0110010
+Case #586: 0110010
+Case #587: 0110000
+Case #588: 0010010
+Case #589: 0010010
+Case #590: ERROR!
+Case #591: ERROR!
+Case #592: 1110000
+Case #593: 1010010
+Case #594: 1010010
+Case #595: 0110010
+Case #596: 1110000
+Case #597: 1100000
+Case #598: 0110000
+Case #599: 1110010
+Case #600: 1110010
+Case #601: 1110010
+Case #602: 1110000
+Case #603: 1010010
+Case #604: 1010010
+Case #605: ERROR!
+Case #606: 0001010
+Case #607: 0000000
+Case #608: 0001010
+Case #609: 0001010
+Case #610: 0000010
+Case #611: 0001000
+Case #612: 0001000
+Case #613: 0000000
+Case #614: 0001010
+Case #615: 0001010
+Case #616: 0001010
+Case #617: 0000000
+Case #618: 0001010
+Case #619: 0001010
+Case #620: ERROR!
+Case #621: 1001010
+Case #622: 1000000
+Case #623: 1001010
+Case #624: 1001010
+Case #625: 0000010
+Case #626: 1001000
+Case #627: 1001000
+Case #628: 0000000
+Case #629: 1001010
+Case #630: 1001010
+Case #631: 1001010
+Case #632: 1000000
+Case #633: 1001010
+Case #634: 1001010
+Case #635: ERROR!
+Case #636: ERROR!
+Case #637: 0100000
+Case #638: 0001010
+Case #639: 0001010
+Case #640: 0100010
+Case #641: 0101000
+Case #642: 0101000
+Case #643: 0100000
+Case #644: 0101010
+Case #645: 0101010
+Case #646: 0101010
+Case #647: 0100000
+Case #648: 0001010
+Case #649: 0001010
+Case #650: ERROR!
+Case #651: ERROR!
+Case #652: 1100000
+Case #653: 1001010
+Case #654: 1001010
+Case #655: 0100010
+Case #656: 1101000
+Case #657: 1101000
+Case #658: 0100000
+Case #659: 1101010
+Case #660: 1101010
+Case #661: 1101010
+Case #662: 1100000
+Case #663: 1001010
+Case #664: 1001010
+Case #665: ERROR!
+Case #666: 0011010
+Case #667: 0010000
+Case #668: 0011010
+Case #669: 0011010
+Case #670: 0010010
+Case #671: 0011000
+Case #672: 0001000
+Case #673: 0010000
+Case #674: 0011010
+Case #675: 0011010
+Case #676: 0011010
+Case #677: 0010000
+Case #678: 0011010
+Case #679: 0011010
+Case #680: ERROR!
+Case #681: 1011010
+Case #682: 1010000
+Case #683: 1011010
+Case #684: 1011010
+Case #685: 0010010
+Case #686: 1011000
+Case #687: 1001000
+Case #688: 0010000
+Case #689: 1011010
+Case #690: 1011010
+Case #691: 1011010
+Case #692: 1010000
+Case #693: 1011010
+Case #694: 1011010
+Case #695: ERROR!
+Case #696: ERROR!
+Case #697: 0110000
+Case #698: 0011010
+Case #699: 0011010
+Case #700: 0110010
+Case #701: 0111000
+Case #702: 0101000
+Case #703: 0110000
+Case #704: 0111010
+Case #705: 0111010
+Case #706: 0111010
+Case #707: 0110000
+Case #708: 0011010
+Case #709: 0011010
+Case #710: ERROR!
+Case #711: ERROR!
+Case #712: 1110000
+Case #713: 1011010
+Case #714: 1011010
+Case #715: 0110010
+Case #716: 1111000
+Case #717: 1101000
+Case #718: 0110000
+Case #719: 1111010
+Case #720: 1111010
+Case #721: 1111010
+Case #722: 1110000
+Case #723: 1011010
+Case #724: 1011010
+Case #725: ERROR!
+Case #726: 0000110
+Case #727: 0000000
+Case #728: 0000110
+Case #729: 0000010
+Case #730: 0000010
+Case #731: 0000000
+Case #732: 0000100
+Case #733: 0000000
+Case #734: 0000110
+Case #735: 0000010
+Case #736: 0000110
+Case #737: 0000000
+Case #738: 0000110
+Case #739: 0000010
+Case #740: ERROR!
+Case #741: 1000110
+Case #742: 1000000
+Case #743: 1000110
+Case #744: 1000010
+Case #745: 0000010
+Case #746: 1000000
+Case #747: 1000100
+Case #748: 0000000
+Case #749: 1000110
+Case #750: 1000010
+Case #751: 1000110
+Case #752: 1000000
+Case #753: 1000110
+Case #754: 1000010
+Case #755: ERROR!
+Case #756: 0100110
+Case #757: 0100000
+Case #758: 0000110
+Case #759: 0000010
+Case #760: 0100010
+Case #761: 0100000
+Case #762: 0100100
+Case #763: 0100000
+Case #764: 0100110
+Case #765: 0100010
+Case #766: 0100110
+Case #767: 0100000
+Case #768: 0000110
+Case #769: 0000010
+Case #770: ERROR!
+Case #771: 1100110
+Case #772: 1100000
+Case #773: 1000110
+Case #774: 1000010
+Case #775: 0100010
+Case #776: 1100000
+Case #777: 1100100
+Case #778: 0100000
+Case #779: 1100110
+Case #780: 1100010
+Case #781: 1100110
+Case #782: 1100000
+Case #783: 1000110
+Case #784: 1000010
+Case #785: ERROR!
+Case #786: 0010110
+Case #787: 0010000
+Case #788: 0010110
+Case #789: 0010010
+Case #790: 0010010
+Case #791: 0010000
+Case #792: 0000100
+Case #793: 0010000
+Case #794: 0010110
+Case #795: 0010010
+Case #796: 0010110
+Case #797: 0010000
+Case #798: 0010110
+Case #799: 0010010
+Case #800: ERROR!
+Case #801: 1010110
+Case #802: 1010000
+Case #803: 1010110
+Case #804: 1010010
+Case #805: 0010010
+Case #806: 1010000
+Case #807: 1000100
+Case #808: 0010000
+Case #809: 1010110
+Case #810: 1010010
+Case #811: 1010110
+Case #812: 1010000
+Case #813: 1010110
+Case #814: 1010010
+Case #815: ERROR!
+Case #816: 0110110
+Case #817: 0110000
+Case #818: 0010110
+Case #819: 0010010
+Case #820: 0110010
+Case #821: 0110000
+Case #822: 0100100
+Case #823: 0110000
+Case #824: 0110110
+Case #825: 0110010
+Case #826: 0110110
+Case #827: 0110000
+Case #828: 0010110
+Case #829: 0010010
+Case #830: ERROR!
+Case #831: 1110110
+Case #832: 1110000
+Case #833: 1010110
+Case #834: 1010010
+Case #835: 0110010
+Case #836: 1110000
+Case #837: 1100100
+Case #838: 0110000
+Case #839: 1110110
+Case #840: 1110010
+Case #841: 1110110
+Case #842: 1110000
+Case #843: 1010110
+Case #844: 1010010
+Case #845: ERROR!
+Case #846: 0001110
+Case #847: 0000000
+Case #848: 0001110
+Case #849: 0001010
+Case #850: 0000010
+Case #851: 0001000
+Case #852: 0001100
+Case #853: 0000000
+Case #854: 0001110
+Case #855: 0001010
+Case #856: 0001110
+Case #857: 0000000
+Case #858: 0001110
+Case #859: 0001010
+Case #860: ERROR!
+Case #861: 1001110
+Case #862: 1000000
+Case #863: 1001110
+Case #864: 1001010
+Case #865: 0000010
+Case #866: 1001000
+Case #867: 1001100
+Case #868: 0000000
+Case #869: 1001110
+Case #870: 1001010
+Case #871: 1001110
+Case #872: 1000000
+Case #873: 1001110
+Case #874: 1001010
+Case #875: ERROR!
+Case #876: 0101110
+Case #877: 0100000
+Case #878: 0001110
+Case #879: 0001010
+Case #880: 0100010
+Case #881: 0101000
+Case #882: 0101100
+Case #883: 0100000
+Case #884: 0101110
+Case #885: 0101010
+Case #886: 0101110
+Case #887: 0100000
+Case #888: 0001110
+Case #889: 0001010
+Case #890: ERROR!
+Case #891: 1101110
+Case #892: 1100000
+Case #893: 1001110
+Case #894: 1001010
+Case #895: 0100010
+Case #896: 1101000
+Case #897: 1101100
+Case #898: 0100000
+Case #899: 1101110
+Case #900: 1101010
+Case #901: 1101110
+Case #902: 1100000
+Case #903: 1001110
+Case #904: 1001010
+Case #905: ERROR!
+Case #906: 0011110
+Case #907: 0010000
+Case #908: 0011110
+Case #909: 0011010
+Case #910: 0010010
+Case #911: 0011000
+Case #912: 0001100
+Case #913: 0010000
+Case #914: 0011110
+Case #915: 0011010
+Case #916: 0011110
+Case #917: 0010000
+Case #918: 0011110
+Case #919: 0011010
+Case #920: ERROR!
+Case #921: 1011110
+Case #922: 1010000
+Case #923: 1011110
+Case #924: 1011010
+Case #925: 0010010
+Case #926: 1011000
+Case #927: 1001100
+Case #928: 0010000
+Case #929: 1011110
+Case #930: 1011010
+Case #931: 1011110
+Case #932: 1010000
+Case #933: 1011110
+Case #934: 1011010
+Case #935: ERROR!
+Case #936: 0111110
+Case #937: 0110000
+Case #938: 0011110
+Case #939: 0011010
+Case #940: 0110010
+Case #941: 0111000
+Case #942: 0101100
+Case #943: 0110000
+Case #944: 0111110
+Case #945: 0111010
+Case #946: 0111110
+Case #947: 0110000
+Case #948: 0011110
+Case #949: 0011010
+Case #950: ERROR!
+Case #951: 1111110
+Case #952: 1110000
+Case #953: 1011110
+Case #954: 1011010
+Case #955: 0110010
+Case #956: 1111000
+Case #957: 1101100
+Case #958: 0110000
+Case #959: 1111110
+Case #960: 1111010
+Case #961: 1111110
+Case #962: 1110000
+Case #963: 1011110
+Case #964: 1011010
+Case #965: ERROR!
+Case #966: ERROR!
+Case #967: ERROR!
+Case #968: 0000001
+Case #969: 0000001
+Case #970: 0000001
+Case #971: 0000001
+Case #972: 0000001
+Case #973: 0000000
+Case #974: 0000000
+Case #975: 0000001
+Case #976: 0000001
+Case #977: 0000000
+Case #978: 0000001
+Case #979: 0000001
+Case #980: ERROR!
+Case #981: ERROR!
+Case #982: ERROR!
+Case #983: 1000001
+Case #984: 1000001
+Case #985: 0000001
+Case #986: 1000001
+Case #987: 1000001
+Case #988: 0000000
+Case #989: 1000000
+Case #990: 1000001
+Case #991: 1000001
+Case #992: 1000000
+Case #993: 1000001
+Case #994: 1000001
+Case #995: ERROR!
+Case #996: 0100001
+Case #997: 0100000
+Case #998: 0000001
+Case #999: 0000001
+Case #1000: 0100001
+Case #1001: 0100001
+Case #1002: 0100001
+Case #1003: 0100000
+Case #1004: 0100000
+Case #1005: 0100001
+Case #1006: 0100001
+Case #1007: 0100000
+Case #1008: 0000001
+Case #1009: 0000001
+Case #1010: ERROR!
+Case #1011: 1100001
+Case #1012: 1100000
+Case #1013: 1000001
+Case #1014: 1000001
+Case #1015: 0100001
+Case #1016: 1100001
+Case #1017: 1100001
+Case #1018: 0100000
+Case #1019: 1100000
+Case #1020: 1100001
+Case #1021: 1100001
+Case #1022: 1100000
+Case #1023: 1000001
+Case #1024: 1000001
+Case #1025: ERROR!
+Case #1026: ERROR!
+Case #1027: ERROR!
+Case #1028: 0010001
+Case #1029: 0010001
+Case #1030: 0010001
+Case #1031: 0010001
+Case #1032: 0000001
+Case #1033: 0010000
+Case #1034: 0010000
+Case #1035: 0010001
+Case #1036: 0010001
+Case #1037: 0010000
+Case #1038: 0010001
+Case #1039: 0010001
+Case #1040: ERROR!
+Case #1041: ERROR!
+Case #1042: ERROR!
+Case #1043: 1010001
+Case #1044: 1010001
+Case #1045: 0010001
+Case #1046: 1010001
+Case #1047: 1000001
+Case #1048: 0010000
+Case #1049: 1010000
+Case #1050: 1010001
+Case #1051: 1010001
+Case #1052: 1010000
+Case #1053: 1010001
+Case #1054: 1010001
+Case #1055: ERROR!
+Case #1056: 0110001
+Case #1057: 0110000
+Case #1058: 0010001
+Case #1059: 0010001
+Case #1060: 0110001
+Case #1061: 0110001
+Case #1062: 0100001
+Case #1063: 0110000
+Case #1064: 0110000
+Case #1065: 0110001
+Case #1066: 0110001
+Case #1067: 0110000
+Case #1068: 0010001
+Case #1069: 0010001
+Case #1070: ERROR!
+Case #1071: 1110001
+Case #1072: 1110000
+Case #1073: 1010001
+Case #1074: 1010001
+Case #1075: 0110001
+Case #1076: 1110001
+Case #1077: 1100001
+Case #1078: 0110000
+Case #1079: 1110000
+Case #1080: 1110001
+Case #1081: 1110001
+Case #1082: 1110000
+Case #1083: 1010001
+Case #1084: 1010001
+Case #1085: ERROR!
+Case #1086: 0001001
+Case #1087: 0000000
+Case #1088: 0001001
+Case #1089: 0001001
+Case #1090: 0000001
+Case #1091: 0001001
+Case #1092: 0001001
+Case #1093: 0000000
+Case #1094: 0001000
+Case #1095: 0001001
+Case #1096: 0001001
+Case #1097: 0000000
+Case #1098: 0001001
+Case #1099: 0001001
+Case #1100: ERROR!
+Case #1101: 1001001
+Case #1102: 1000000
+Case #1103: 1001001
+Case #1104: 1001001
+Case #1105: 0000001
+Case #1106: 1001001
+Case #1107: 1001001
+Case #1108: 0000000
+Case #1109: 1001000
+Case #1110: 1001001
+Case #1111: 1001001
+Case #1112: 1000000
+Case #1113: 1001001
+Case #1114: 1001001
+Case #1115: ERROR!
+Case #1116: 0101001
+Case #1117: 0100000
+Case #1118: 0001001
+Case #1119: 0001001
+Case #1120: 0100001
+Case #1121: 0101001
+Case #1122: 0101001
+Case #1123: 0100000
+Case #1124: 0101000
+Case #1125: 0101001
+Case #1126: 0101001
+Case #1127: 0100000
+Case #1128: 0001001
+Case #1129: 0001001
+Case #1130: ERROR!
+Case #1131: 1101001
+Case #1132: 1100000
+Case #1133: 1001001
+Case #1134: 1001001
+Case #1135: 0100001
+Case #1136: 1101001
+Case #1137: 1101001
+Case #1138: 0100000
+Case #1139: 1101000
+Case #1140: 1101001
+Case #1141: 1101001
+Case #1142: 1100000
+Case #1143: 1001001
+Case #1144: 1001001
+Case #1145: ERROR!
+Case #1146: 0011001
+Case #1147: 0010000
+Case #1148: 0011001
+Case #1149: 0011001
+Case #1150: 0010001
+Case #1151: 0011001
+Case #1152: 0001001
+Case #1153: 0010000
+Case #1154: 0011000
+Case #1155: 0011001
+Case #1156: 0011001
+Case #1157: 0010000
+Case #1158: 0011001
+Case #1159: 0011001
+Case #1160: ERROR!
+Case #1161: 1011001
+Case #1162: 1010000
+Case #1163: 1011001
+Case #1164: 1011001
+Case #1165: 0010001
+Case #1166: 1011001
+Case #1167: 1001001
+Case #1168: 0010000
+Case #1169: 1011000
+Case #1170: 1011001
+Case #1171: 1011001
+Case #1172: 1010000
+Case #1173: 1011001
+Case #1174: 1011001
+Case #1175: ERROR!
+Case #1176: 0111001
+Case #1177: 0110000
+Case #1178: 0011001
+Case #1179: 0011001
+Case #1180: 0110001
+Case #1181: 0111001
+Case #1182: 0101001
+Case #1183: 0110000
+Case #1184: 0111000
+Case #1185: 0111001
+Case #1186: 0111001
+Case #1187: 0110000
+Case #1188: 0011001
+Case #1189: 0011001
+Case #1190: ERROR!
+Case #1191: 1111001
+Case #1192: 1110000
+Case #1193: 1011001
+Case #1194: 1011001
+Case #1195: 0110001
+Case #1196: 1111001
+Case #1197: 1101001
+Case #1198: 0110000
+Case #1199: 1111000
+Case #1200: 1111001
+Case #1201: 1111001
+Case #1202: 1110000
+Case #1203: 1011001
+Case #1204: 1011001
+Case #1205: ERROR!
+Case #1206: 0000101
+Case #1207: 0000000
+Case #1208: 0000101
+Case #1209: 0000001
+Case #1210: 0000001
+Case #1211: 0000001
+Case #1212: 0000101
+Case #1213: 0000000
+Case #1214: 0000100
+Case #1215: 0000001
+Case #1216: 0000101
+Case #1217: 0000000
+Case #1218: 0000101
+Case #1219: 0000001
+Case #1220: ERROR!
+Case #1221: 1000101
+Case #1222: 1000000
+Case #1223: 1000101
+Case #1224: 1000001
+Case #1225: 0000001
+Case #1226: 1000001
+Case #1227: 1000101
+Case #1228: 0000000
+Case #1229: 1000100
+Case #1230: 1000001
+Case #1231: 1000101
+Case #1232: 1000000
+Case #1233: 1000101
+Case #1234: 1000001
+Case #1235: ERROR!
+Case #1236: 0100101
+Case #1237: 0100000
+Case #1238: 0000101
+Case #1239: 0000001
+Case #1240: 0100001
+Case #1241: 0100001
+Case #1242: 0100101
+Case #1243: 0100000
+Case #1244: 0100100
+Case #1245: 0100001
+Case #1246: 0100101
+Case #1247: 0100000
+Case #1248: 0000101
+Case #1249: 0000001
+Case #1250: ERROR!
+Case #1251: 1100101
+Case #1252: 1100000
+Case #1253: 1000101
+Case #1254: 1000001
+Case #1255: 0100001
+Case #1256: 1100001
+Case #1257: 1100101
+Case #1258: 0100000
+Case #1259: 1100100
+Case #1260: 1100001
+Case #1261: 1100101
+Case #1262: 1100000
+Case #1263: 1000101
+Case #1264: 1000001
+Case #1265: ERROR!
+Case #1266: 0010101
+Case #1267: 0010000
+Case #1268: 0010101
+Case #1269: 0010001
+Case #1270: 0010001
+Case #1271: 0010001
+Case #1272: 0000101
+Case #1273: 0010000
+Case #1274: 0010100
+Case #1275: 0010001
+Case #1276: 0010101
+Case #1277: 0010000
+Case #1278: 0010101
+Case #1279: 0010001
+Case #1280: ERROR!
+Case #1281: 1010101
+Case #1282: 1010000
+Case #1283: 1010101
+Case #1284: 1010001
+Case #1285: 0010001
+Case #1286: 1010001
+Case #1287: 1000101
+Case #1288: 0010000
+Case #1289: 1010100
+Case #1290: 1010001
+Case #1291: 1010101
+Case #1292: 1010000
+Case #1293: 1010101
+Case #1294: 1010001
+Case #1295: ERROR!
+Case #1296: 0110101
+Case #1297: 0110000
+Case #1298: 0010101
+Case #1299: 0010001
+Case #1300: 0110001
+Case #1301: 0110001
+Case #1302: 0100101
+Case #1303: 0110000
+Case #1304: 0110100
+Case #1305: 0110001
+Case #1306: 0110101
+Case #1307: 0110000
+Case #1308: 0010101
+Case #1309: 0010001
+Case #1310: ERROR!
+Case #1311: 1110101
+Case #1312: 1110000
+Case #1313: 1010101
+Case #1314: 1010001
+Case #1315: 0110001
+Case #1316: 1110001
+Case #1317: 1100101
+Case #1318: 0110000
+Case #1319: 1110100
+Case #1320: 1110001
+Case #1321: 1110101
+Case #1322: 1110000
+Case #1323: 1010101
+Case #1324: 1010001
+Case #1325: ERROR!
+Case #1326: 0001101
+Case #1327: 0000000
+Case #1328: 0001101
+Case #1329: 0001001
+Case #1330: 0000001
+Case #1331: 0001001
+Case #1332: 0001101
+Case #1333: 0000000
+Case #1334: 0001100
+Case #1335: 0001001
+Case #1336: 0001101
+Case #1337: 0000000
+Case #1338: 0001101
+Case #1339: 0001001
+Case #1340: ERROR!
+Case #1341: 1001101
+Case #1342: 1000000
+Case #1343: 1001101
+Case #1344: 1001001
+Case #1345: 0000001
+Case #1346: 1001001
+Case #1347: 1001101
+Case #1348: 0000000
+Case #1349: 1001100
+Case #1350: 1001001
+Case #1351: 1001101
+Case #1352: 1000000
+Case #1353: 1001101
+Case #1354: 1001001
+Case #1355: ERROR!
+Case #1356: 0101101
+Case #1357: 0100000
+Case #1358: 0001101
+Case #1359: 0001001
+Case #1360: 0100001
+Case #1361: 0101001
+Case #1362: 0101101
+Case #1363: 0100000
+Case #1364: 0101100
+Case #1365: 0101001
+Case #1366: 0101101
+Case #1367: 0100000
+Case #1368: 0001101
+Case #1369: 0001001
+Case #1370: ERROR!
+Case #1371: 1101101
+Case #1372: 1100000
+Case #1373: 1001101
+Case #1374: 1001001
+Case #1375: 0100001
+Case #1376: 1101001
+Case #1377: 1101101
+Case #1378: 0100000
+Case #1379: 1101100
+Case #1380: 1101001
+Case #1381: 1101101
+Case #1382: 1100000
+Case #1383: 1001101
+Case #1384: 1001001
+Case #1385: ERROR!
+Case #1386: 0011101
+Case #1387: 0010000
+Case #1388: 0011101
+Case #1389: 0011001
+Case #1390: 0010001
+Case #1391: 0011001
+Case #1392: 0001101
+Case #1393: 0010000
+Case #1394: 0011100
+Case #1395: 0011001
+Case #1396: 0011101
+Case #1397: 0010000
+Case #1398: 0011101
+Case #1399: 0011001
+Case #1400: ERROR!
+Case #1401: 1011101
+Case #1402: 1010000
+Case #1403: 1011101
+Case #1404: 1011001
+Case #1405: 0010001
+Case #1406: 1011001
+Case #1407: 1001101
+Case #1408: 0010000
+Case #1409: 1011100
+Case #1410: 1011001
+Case #1411: 1011101
+Case #1412: 1010000
+Case #1413: 1011101
+Case #1414: 1011001
+Case #1415: ERROR!
+Case #1416: 0111101
+Case #1417: 0110000
+Case #1418: 0011101
+Case #1419: 0011001
+Case #1420: 0110001
+Case #1421: 0111001
+Case #1422: 0101101
+Case #1423: 0110000
+Case #1424: 0111100
+Case #1425: 0111001
+Case #1426: 0111101
+Case #1427: 0110000
+Case #1428: 0011101
+Case #1429: 0011001
+Case #1430: ERROR!
+Case #1431: 1111101
+Case #1432: 1110000
+Case #1433: 1011101
+Case #1434: 1011001
+Case #1435: 0110001
+Case #1436: 1111001
+Case #1437: 1101101
+Case #1438: 0110000
+Case #1439: 1111100
+Case #1440: 1111001
+Case #1441: 1111101
+Case #1442: 1110000
+Case #1443: 1011101
+Case #1444: 1011001
+Case #1445: ERROR!
+Case #1446: 0000011
+Case #1447: 0000000
+Case #1448: 0000011
+Case #1449: 0000011
+Case #1450: 0000011
+Case #1451: 0000001
+Case #1452: 0000001
+Case #1453: 0000000
+Case #1454: 0000010
+Case #1455: 0000011
+Case #1456: 0000011
+Case #1457: 0000000
+Case #1458: 0000011
+Case #1459: 0000011
+Case #1460: ERROR!
+Case #1461: 1000011
+Case #1462: 1000000
+Case #1463: 1000011
+Case #1464: 1000011
+Case #1465: 0000011
+Case #1466: 1000001
+Case #1467: 1000001
+Case #1468: 0000000
+Case #1469: 1000010
+Case #1470: 1000011
+Case #1471: 1000011
+Case #1472: 1000000
+Case #1473: 1000011
+Case #1474: 1000011
+Case #1475: ERROR!
+Case #1476: 0100011
+Case #1477: 0100000
+Case #1478: 0000011
+Case #1479: 0000011
+Case #1480: 0100011
+Case #1481: 0100001
+Case #1482: 0100001
+Case #1483: 0100000
+Case #1484: 0100010
+Case #1485: 0100011
+Case #1486: 0100011
+Case #1487: 0100000
+Case #1488: 0000011
+Case #1489: 0000011
+Case #1490: ERROR!
+Case #1491: 1100011
+Case #1492: 1100000
+Case #1493: 1000011
+Case #1494: 1000011
+Case #1495: 0100011
+Case #1496: 1100001
+Case #1497: 1100001
+Case #1498: 0100000
+Case #1499: 1100010
+Case #1500: 1100011
+Case #1501: 1100011
+Case #1502: 1100000
+Case #1503: 1000011
+Case #1504: 1000011
+Case #1505: ERROR!
+Case #1506: 0010011
+Case #1507: 0010000
+Case #1508: 0010011
+Case #1509: 0010011
+Case #1510: 0010011
+Case #1511: 0010001
+Case #1512: 0000001
+Case #1513: 0010000
+Case #1514: 0010010
+Case #1515: 0010011
+Case #1516: 0010011
+Case #1517: 0010000
+Case #1518: 0010011
+Case #1519: 0010011
+Case #1520: ERROR!
+Case #1521: 1010011
+Case #1522: 1010000
+Case #1523: 1010011
+Case #1524: 1010011
+Case #1525: 0010011
+Case #1526: 1010001
+Case #1527: 1000001
+Case #1528: 0010000
+Case #1529: 1010010
+Case #1530: 1010011
+Case #1531: 1010011
+Case #1532: 1010000
+Case #1533: 1010011
+Case #1534: 1010011
+Case #1535: ERROR!
+Case #1536: 0110011
+Case #1537: 0110000
+Case #1538: 0010011
+Case #1539: 0010011
+Case #1540: 0110011
+Case #1541: 0110001
+Case #1542: 0100001
+Case #1543: 0110000
+Case #1544: 0110010
+Case #1545: 0110011
+Case #1546: 0110011
+Case #1547: 0110000
+Case #1548: 0010011
+Case #1549: 0010011
+Case #1550: ERROR!
+Case #1551: 1110011
+Case #1552: 1110000
+Case #1553: 1010011
+Case #1554: 1010011
+Case #1555: 0110011
+Case #1556: 1110001
+Case #1557: 1100001
+Case #1558: 0110000
+Case #1559: 1110010
+Case #1560: 1110011
+Case #1561: 1110011
+Case #1562: 1110000
+Case #1563: 1010011
+Case #1564: 1010011
+Case #1565: ERROR!
+Case #1566: 0001011
+Case #1567: 0000000
+Case #1568: 0001011
+Case #1569: 0001011
+Case #1570: 0000011
+Case #1571: 0001001
+Case #1572: 0001001
+Case #1573: 0000000
+Case #1574: 0001010
+Case #1575: 0001011
+Case #1576: 0001011
+Case #1577: 0000000
+Case #1578: 0001011
+Case #1579: 0001011
+Case #1580: ERROR!
+Case #1581: 1001011
+Case #1582: 1000000
+Case #1583: 1001011
+Case #1584: 1001011
+Case #1585: 0000011
+Case #1586: 1001001
+Case #1587: 1001001
+Case #1588: 0000000
+Case #1589: 1001010
+Case #1590: 1001011
+Case #1591: 1001011
+Case #1592: 1000000
+Case #1593: 1001011
+Case #1594: 1001011
+Case #1595: ERROR!
+Case #1596: 0101011
+Case #1597: 0100000
+Case #1598: 0001011
+Case #1599: 0001011
+Case #1600: 0100011
+Case #1601: 0101001
+Case #1602: 0101001
+Case #1603: 0100000
+Case #1604: 0101010
+Case #1605: 0101011
+Case #1606: 0101011
+Case #1607: 0100000
+Case #1608: 0001011
+Case #1609: 0001011
+Case #1610: ERROR!
+Case #1611: 1101011
+Case #1612: 1100000
+Case #1613: 1001011
+Case #1614: 1001011
+Case #1615: 0100011
+Case #1616: 1101001
+Case #1617: 1101001
+Case #1618: 0100000
+Case #1619: 1101010
+Case #1620: 1101011
+Case #1621: 1101011
+Case #1622: 1100000
+Case #1623: 1001011
+Case #1624: 1001011
+Case #1625: ERROR!
+Case #1626: 0011011
+Case #1627: 0010000
+Case #1628: 0011011
+Case #1629: 0011011
+Case #1630: 0010011
+Case #1631: 0011001
+Case #1632: 0001001
+Case #1633: 0010000
+Case #1634: 0011010
+Case #1635: 0011011
+Case #1636: 0011011
+Case #1637: 0010000
+Case #1638: 0011011
+Case #1639: 0011011
+Case #1640: ERROR!
+Case #1641: 1011011
+Case #1642: 1010000
+Case #1643: 1011011
+Case #1644: 1011011
+Case #1645: 0010011
+Case #1646: 1011001
+Case #1647: 1001001
+Case #1648: 0010000
+Case #1649: 1011010
+Case #1650: 1011011
+Case #1651: 1011011
+Case #1652: 1010000
+Case #1653: 1011011
+Case #1654: 1011011
+Case #1655: ERROR!
+Case #1656: 0111011
+Case #1657: 0110000
+Case #1658: 0011011
+Case #1659: 0011011
+Case #1660: 0110011
+Case #1661: 0111001
+Case #1662: 0101001
+Case #1663: 0110000
+Case #1664: 0111010
+Case #1665: 0111011
+Case #1666: 0111011
+Case #1667: 0110000
+Case #1668: 0011011
+Case #1669: 0011011
+Case #1670: ERROR!
+Case #1671: 1111011
+Case #1672: 1110000
+Case #1673: 1011011
+Case #1674: 1011011
+Case #1675: 0110011
+Case #1676: 1111001
+Case #1677: 1101001
+Case #1678: 0110000
+Case #1679: 1111010
+Case #1680: 1111011
+Case #1681: 1111011
+Case #1682: 1110000
+Case #1683: 1011011
+Case #1684: 1011011
+Case #1685: ERROR!
+Case #1686: 0000111
+Case #1687: 0000000
+Case #1688: 0000111
+Case #1689: 0000011
+Case #1690: 0000011
+Case #1691: 0000001
+Case #1692: 0000101
+Case #1693: 0000000
+Case #1694: 0000110
+Case #1695: 0000011
+Case #1696: 0000111
+Case #1697: 0000000
+Case #1698: 0000111
+Case #1699: 0000011
+Case #1700: ERROR!
+Case #1701: 1000111
+Case #1702: 1000000
+Case #1703: 1000111
+Case #1704: 1000011
+Case #1705: 0000011
+Case #1706: 1000001
+Case #1707: 1000101
+Case #1708: 0000000
+Case #1709: 1000110
+Case #1710: 1000011
+Case #1711: 1000111
+Case #1712: 1000000
+Case #1713: 1000111
+Case #1714: 1000011
+Case #1715: ERROR!
+Case #1716: 0100111
+Case #1717: 0100000
+Case #1718: 0000111
+Case #1719: 0000011
+Case #1720: 0100011
+Case #1721: 0100001
+Case #1722: 0100101
+Case #1723: 0100000
+Case #1724: 0100110
+Case #1725: 0100011
+Case #1726: 0100111
+Case #1727: 0100000
+Case #1728: 0000111
+Case #1729: 0000011
+Case #1730: ERROR!
+Case #1731: 1100111
+Case #1732: 1100000
+Case #1733: 1000111
+Case #1734: 1000011
+Case #1735: 0100011
+Case #1736: 1100001
+Case #1737: 1100101
+Case #1738: 0100000
+Case #1739: 1100110
+Case #1740: 1100011
+Case #1741: 1100111
+Case #1742: 1100000
+Case #1743: 1000111
+Case #1744: 1000011
+Case #1745: ERROR!
+Case #1746: 0010111
+Case #1747: 0010000
+Case #1748: 0010111
+Case #1749: 0010011
+Case #1750: 0010011
+Case #1751: 0010001
+Case #1752: 0000101
+Case #1753: 0010000
+Case #1754: 0010110
+Case #1755: 0010011
+Case #1756: 0010111
+Case #1757: 0010000
+Case #1758: 0010111
+Case #1759: 0010011
+Case #1760: ERROR!
+Case #1761: 1010111
+Case #1762: 1010000
+Case #1763: 1010111
+Case #1764: 1010011
+Case #1765: 0010011
+Case #1766: 1010001
+Case #1767: 1000101
+Case #1768: 0010000
+Case #1769: 1010110
+Case #1770: 1010011
+Case #1771: 1010111
+Case #1772: 1010000
+Case #1773: 1010111
+Case #1774: 1010011
+Case #1775: ERROR!
+Case #1776: 0110111
+Case #1777: 0110000
+Case #1778: 0010111
+Case #1779: 0010011
+Case #1780: 0110011
+Case #1781: 0110001
+Case #1782: 0100101
+Case #1783: 0110000
+Case #1784: 0110110
+Case #1785: 0110011
+Case #1786: 0110111
+Case #1787: 0110000
+Case #1788: 0010111
+Case #1789: 0010011
+Case #1790: ERROR!
+Case #1791: 1110111
+Case #1792: 1110000
+Case #1793: 1010111
+Case #1794: 1010011
+Case #1795: 0110011
+Case #1796: 1110001
+Case #1797: 1100101
+Case #1798: 0110000
+Case #1799: 1110110
+Case #1800: 1110011
+Case #1801: 1110111
+Case #1802: 1110000
+Case #1803: 1010111
+Case #1804: 1010011
+Case #1805: ERROR!
+Case #1806: 0001111
+Case #1807: 0000000
+Case #1808: 0001111
+Case #1809: 0001011
+Case #1810: 0000011
+Case #1811: 0001001
+Case #1812: 0001101
+Case #1813: 0000000
+Case #1814: 0001110
+Case #1815: 0001011
+Case #1816: 0001111
+Case #1817: 0000000
+Case #1818: 0001111
+Case #1819: 0001011
+Case #1820: ERROR!
+Case #1821: 1001111
+Case #1822: 1000000
+Case #1823: 1001111
+Case #1824: 1001011
+Case #1825: 0000011
+Case #1826: 1001001
+Case #1827: 1001101
+Case #1828: 0000000
+Case #1829: 1001110
+Case #1830: 1001011
+Case #1831: 1001111
+Case #1832: 1000000
+Case #1833: 1001111
+Case #1834: 1001011
+Case #1835: ERROR!
+Case #1836: 0101111
+Case #1837: 0100000
+Case #1838: 0001111
+Case #1839: 0001011
+Case #1840: 0100011
+Case #1841: 0101001
+Case #1842: 0101101
+Case #1843: 0100000
+Case #1844: 0101110
+Case #1845: 0101011
+Case #1846: 0101111
+Case #1847: 0100000
+Case #1848: 0001111
+Case #1849: 0001011
+Case #1850: ERROR!
+Case #1851: 1101111
+Case #1852: 1100000
+Case #1853: 1001111
+Case #1854: 1001011
+Case #1855: 0100011
+Case #1856: 1101001
+Case #1857: 1101101
+Case #1858: 0100000
+Case #1859: 1101110
+Case #1860: 1101011
+Case #1861: 1101111
+Case #1862: 1100000
+Case #1863: 1001111
+Case #1864: 1001011
+Case #1865: ERROR!
+Case #1866: 0011111
+Case #1867: 0010000
+Case #1868: 0011111
+Case #1869: 0011011
+Case #1870: 0010011
+Case #1871: 0011001
+Case #1872: 0001101
+Case #1873: 0010000
+Case #1874: 0011110
+Case #1875: 0011011
+Case #1876: 0011111
+Case #1877: 0010000
+Case #1878: 0011111
+Case #1879: 0011011
+Case #1880: ERROR!
+Case #1881: 1011111
+Case #1882: 1010000
+Case #1883: 1011111
+Case #1884: 1011011
+Case #1885: 0010011
+Case #1886: 1011001
+Case #1887: 1001101
+Case #1888: 0010000
+Case #1889: 1011110
+Case #1890: 1011011
+Case #1891: 1011111
+Case #1892: 1010000
+Case #1893: 1011111
+Case #1894: 1011011
+Case #1895: ERROR!
+Case #1896: 0111111
+Case #1897: 0110000
+Case #1898: 0011111
+Case #1899: 0011011
+Case #1900: 0110011
+Case #1901: 0111001
+Case #1902: 0101101
+Case #1903: 0110000
+Case #1904: 0111110
+Case #1905: 0111011
+Case #1906: 0111111
+Case #1907: 0110000
+Case #1908: 0011111
+Case #1909: 0011011
+Case #1910: ERROR!
+Case #1911: 1111111
+Case #1912: 1110000
+Case #1913: 1011111
+Case #1914: 1011011
+Case #1915: 0110011
+Case #1916: 1111001
+Case #1917: 1101101
+Case #1918: 0110000
+Case #1919: 1111110
+Case #1920: 1111011
+Case #1921: 1111111
+Case #1922: 1110000
+Case #1923: 1011111
+Case #1924: 1011011
+Case #1925: ERROR!
+Case #1926: 0110000
+Case #1927: 0011000
+Case #1928: 1011111
+Case #1929: 0111000
+Case #1930: 0011001
+Case #1931: 0100001
+Case #1932: 0010100
+Case #1933: ERROR!
+Case #1934: 0110000
+Case #1935: 1011001
+Case #1936: 0111000
+Case #1937: 0100000
+Case #1938: 0100001
+Case #1939: 1011011
+Case #1940: ERROR!
+Case #1941: 1000010
+Case #1942: 0100000
+Case #1943: 1111001
+Case #1944: 0010000
+Case #1945: 0001011
+Case #1946: 0010011
+Case #1947: 1100000
+Case #1948: 0010000
+Case #1949: 0101100
+Case #1950: 1011110
+Case #1951: 1001010
+Case #1952: 0010000
+Case #1953: 1001000
+Case #1954: 1111100
+Case #1955: 0011011
+Case #1956: 0101001
+Case #1957: 0000101
+Case #1958: 0000010
+Case #1959: 1110000
+Case #1960: 0100010
+Case #1961: 0011001
+Case #1962: 1010000
+Case #1963: 1101000
+Case #1964: 1010000
+Case #1965: 1001000
+Case #1966: 0001011
+Case #1967: 0100000
+Case #1968: 1000000
+Case #1969: 1000000
+Case #1970: 1101100
+Case #1971: 1101010
+Case #1972: 1100101
+Case #1973: 0110000
+Case #1974: 0010001
+Case #1975: 0000010
+Case #1976: 1010110
+Case #1977: 0010000
+Case #1978: 0110010
+Case #1979: 0100000
+Case #1980: 1010000
+Case #1981: 1011101
+Case #1982: 0110010
+Case #1983: 1000100
+Case #1984: 0010010
+Case #1985: 1000000
+Case #1986: 0011010
+Case #1987: 1111011
+Case #1988: 0000000
+Case #1989: 0011000
+Case #1990: 1111010
+Case #1991: 1100000
+Case #1992: 0010000
+Case #1993: 0111001
+Case #1994: 0100101
+Case #1995: 0000011
+Case #1996: 0110000
+Case #1997: 0110001
+Case #1998: 1001101
+Case #1999: 1001001
+Case #2000: 0000001
diff --git a/kickstart_2014/src/y2014_round_a/A-small-practice.out b/kickstart_2014/src/y2014_round_a/A-small-practice.out
new file mode 100644
index 0000000..fa9ba61
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/A-small-practice.out
@@ -0,0 +1,100 @@
+Case #1: 0010011
+Case #2: 1110000
+Case #3: 0000100
+Case #4: 0011010
+Case #5: ERROR!
+Case #6: 1011011
+Case #7: ERROR!
+Case #8: 1101100
+Case #9: 1011001
+Case #10: 1001110
+Case #11: 1011011
+Case #12: ERROR!
+Case #13: 0110110
+Case #14: ERROR!
+Case #15: 1010111
+Case #16: ERROR!
+Case #17: 1101011
+Case #18: ERROR!
+Case #19: 0011111
+Case #20: ERROR!
+Case #21: 1101000
+Case #22: ERROR!
+Case #23: 1110000
+Case #24: ERROR!
+Case #25: 1011101
+Case #26: 1011101
+Case #27: ERROR!
+Case #28: 1010000
+Case #29: 0010000
+Case #30: 1110110
+Case #31: ERROR!
+Case #32: 1011010
+Case #33: ERROR!
+Case #34: 0100101
+Case #35: ERROR!
+Case #36: ERROR!
+Case #37: 1011110
+Case #38: 1111100
+Case #39: ERROR!
+Case #40: 0110000
+Case #41: ERROR!
+Case #42: ERROR!
+Case #43: 0110000
+Case #44: ERROR!
+Case #45: ERROR!
+Case #46: ERROR!
+Case #47: 0110000
+Case #48: ERROR!
+Case #49: 1101000
+Case #50: ERROR!
+Case #51: 1011111
+Case #52: 1100000
+Case #53: ERROR!
+Case #54: ERROR!
+Case #55: ERROR!
+Case #56: 0101001
+Case #57: 1111101
+Case #58: ERROR!
+Case #59: 0111111
+Case #60: ERROR!
+Case #61: 1101100
+Case #62: 0111110
+Case #63: 0010011
+Case #64: 1101001
+Case #65: 1101110
+Case #66: ERROR!
+Case #67: ERROR!
+Case #68: 0011011
+Case #69: ERROR!
+Case #70: ERROR!
+Case #71: 0100000
+Case #72: ERROR!
+Case #73: ERROR!
+Case #74: ERROR!
+Case #75: ERROR!
+Case #76: 1010101
+Case #77: ERROR!
+Case #78: 0111011
+Case #79: 1011000
+Case #80: 1111001
+Case #81: 0110000
+Case #82: 1011001
+Case #83: ERROR!
+Case #84: 1011001
+Case #85: 0000000
+Case #86: 1011001
+Case #87: 0010011
+Case #88: 1001011
+Case #89: 0100000
+Case #90: 0010011
+Case #91: 0110000
+Case #92: 1110000
+Case #93: 1011010
+Case #94: ERROR!
+Case #95: 1011001
+Case #96: ERROR!
+Case #97: ERROR!
+Case #98: ERROR!
+Case #99: ERROR!
+Case #100: 0110000

From 13c0501cc812cacfa8696afcb4b20dea820ecb50 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Wed, 27 Feb 2019 23:54:09 -0300
Subject: [PATCH 117/122] kickstart 2014 a

---
 .../src/y2014_round_a/A-large-practice.out    | 100 +++++++++---------
 .../src/y2014_round_a/A-small-practice.out    |   2 +-
 kickstart_2014/src/y2014_round_a/a.rs         |   4 +-
 3 files changed, 53 insertions(+), 53 deletions(-)

diff --git a/kickstart_2014/src/y2014_round_a/A-large-practice.out b/kickstart_2014/src/y2014_round_a/A-large-practice.out
index ee2f810..1f847c1 100644
--- a/kickstart_2014/src/y2014_round_a/A-large-practice.out
+++ b/kickstart_2014/src/y2014_round_a/A-large-practice.out
@@ -1,10 +1,10 @@
 Case #1: ERROR!
 Case #2: 1101101
-Case #3: 0010000
+Case #3: ERROR!
 Case #4: ERROR!
 Case #5: ERROR!
-Case #6: 0000000
-Case #7: 0000000
+Case #6: ERROR!
+Case #7: ERROR!
 Case #8: ERROR!
 Case #9: ERROR!
 Case #10: ERROR!
@@ -18,9 +18,9 @@ Case #17: ERROR!
 Case #18: ERROR!
 Case #19: ERROR!
 Case #20: ERROR!
-Case #21: 1000000
+Case #21: ERROR!
 Case #22: ERROR!
-Case #23: 1000000
+Case #23: ERROR!
 Case #24: ERROR!
 Case #25: 0000000
 Case #26: 1000000
@@ -33,9 +33,9 @@ Case #32: 1000000
 Case #33: 1000000
 Case #34: 1000000
 Case #35: ERROR!
-Case #36: 0100000
-Case #37: 0100000
-Case #38: 0000000
+Case #36: ERROR!
+Case #37: ERROR!
+Case #38: ERROR!
 Case #39: 0000000
 Case #40: 0100000
 Case #41: 0100000
@@ -48,7 +48,7 @@ Case #47: 0100000
 Case #48: 0000000
 Case #49: 0000000
 Case #50: ERROR!
-Case #51: 1100000
+Case #51: ERROR!
 Case #52: ERROR!
 Case #53: 1000000
 Case #54: 1000000
@@ -63,12 +63,12 @@ Case #62: 1100000
 Case #63: 1000000
 Case #64: 1000000
 Case #65: ERROR!
-Case #66: 0010000
+Case #66: ERROR!
 Case #67: ERROR!
 Case #68: ERROR!
-Case #69: 0010000
+Case #69: ERROR!
 Case #70: ERROR!
-Case #71: 0010000
+Case #71: ERROR!
 Case #72: ERROR!
 Case #73: 0010000
 Case #74: 0010000
@@ -78,9 +78,9 @@ Case #77: 0010000
 Case #78: 0010000
 Case #79: 0010000
 Case #80: ERROR!
-Case #81: 1010000
+Case #81: ERROR!
 Case #82: ERROR!
-Case #83: 1010000
+Case #83: ERROR!
 Case #84: ERROR!
 Case #85: 0010000
 Case #86: 1010000
@@ -93,8 +93,8 @@ Case #92: 1010000
 Case #93: 1010000
 Case #94: 1010000
 Case #95: ERROR!
-Case #96: 0110000
-Case #97: 0110000
+Case #96: ERROR!
+Case #97: ERROR!
 Case #98: ERROR!
 Case #99: 0010000
 Case #100: 0110000
@@ -108,7 +108,7 @@ Case #107: 0110000
 Case #108: 0010000
 Case #109: 0010000
 Case #110: ERROR!
-Case #111: 1110000
+Case #111: ERROR!
 Case #112: ERROR!
 Case #113: 1010000
 Case #114: 1010000
@@ -123,7 +123,7 @@ Case #122: 1110000
 Case #123: 1010000
 Case #124: 1010000
 Case #125: ERROR!
-Case #126: 0001000
+Case #126: ERROR!
 Case #127: 0000000
 Case #128: 0001000
 Case #129: 0001000
@@ -138,7 +138,7 @@ Case #137: 0000000
 Case #138: 0001000
 Case #139: 0001000
 Case #140: ERROR!
-Case #141: 1001000
+Case #141: ERROR!
 Case #142: 1000000
 Case #143: 1001000
 Case #144: 1001000
@@ -153,7 +153,7 @@ Case #152: 1000000
 Case #153: 1001000
 Case #154: 1001000
 Case #155: ERROR!
-Case #156: 0101000
+Case #156: ERROR!
 Case #157: 0100000
 Case #158: 0001000
 Case #159: 0001000
@@ -168,7 +168,7 @@ Case #167: 0100000
 Case #168: 0001000
 Case #169: 0001000
 Case #170: ERROR!
-Case #171: 1101000
+Case #171: ERROR!
 Case #172: 1100000
 Case #173: 1001000
 Case #174: 1001000
@@ -183,7 +183,7 @@ Case #182: 1100000
 Case #183: 1001000
 Case #184: 1001000
 Case #185: ERROR!
-Case #186: 0011000
+Case #186: ERROR!
 Case #187: 0010000
 Case #188: 0011000
 Case #189: 0011000
@@ -198,7 +198,7 @@ Case #197: 0010000
 Case #198: 0011000
 Case #199: 0011000
 Case #200: ERROR!
-Case #201: 1011000
+Case #201: ERROR!
 Case #202: 1010000
 Case #203: 1011000
 Case #204: 1011000
@@ -243,9 +243,9 @@ Case #242: 1110000
 Case #243: 1011000
 Case #244: 1011000
 Case #245: ERROR!
-Case #246: 0000100
-Case #247: 0000000
-Case #248: 0000100
+Case #246: ERROR!
+Case #247: ERROR!
+Case #248: ERROR!
 Case #249: ERROR!
 Case #250: ERROR!
 Case #251: 0000000
@@ -258,7 +258,7 @@ Case #257: 0000000
 Case #258: 0000100
 Case #259: 0000000
 Case #260: ERROR!
-Case #261: 1000100
+Case #261: ERROR!
 Case #262: ERROR!
 Case #263: ERROR!
 Case #264: 1000000
@@ -273,7 +273,7 @@ Case #272: 1000000
 Case #273: 1000100
 Case #274: 1000000
 Case #275: ERROR!
-Case #276: 0100100
+Case #276: ERROR!
 Case #277: ERROR!
 Case #278: ERROR!
 Case #279: 0000000
@@ -303,7 +303,7 @@ Case #302: 1100000
 Case #303: 1000100
 Case #304: 1000000
 Case #305: ERROR!
-Case #306: 0010100
+Case #306: ERROR!
 Case #307: ERROR!
 Case #308: ERROR!
 Case #309: 0010000
@@ -318,7 +318,7 @@ Case #317: 0010000
 Case #318: 0010100
 Case #319: 0010000
 Case #320: ERROR!
-Case #321: 1010100
+Case #321: ERROR!
 Case #322: ERROR!
 Case #323: ERROR!
 Case #324: 1010000
@@ -363,7 +363,7 @@ Case #362: 1110000
 Case #363: 1010100
 Case #364: 1010000
 Case #365: ERROR!
-Case #366: 0001100
+Case #366: ERROR!
 Case #367: 0000000
 Case #368: 0001100
 Case #369: 0001000
@@ -378,7 +378,7 @@ Case #377: 0000000
 Case #378: 0001100
 Case #379: 0001000
 Case #380: ERROR!
-Case #381: 1001100
+Case #381: ERROR!
 Case #382: 1000000
 Case #383: 1001100
 Case #384: 1001000
@@ -423,7 +423,7 @@ Case #422: 1100000
 Case #423: 1001100
 Case #424: 1001000
 Case #425: ERROR!
-Case #426: 0011100
+Case #426: ERROR!
 Case #427: 0010000
 Case #428: 0011100
 Case #429: 0011000
@@ -438,7 +438,7 @@ Case #437: 0010000
 Case #438: 0011100
 Case #439: 0011000
 Case #440: ERROR!
-Case #441: 1011100
+Case #441: ERROR!
 Case #442: 1010000
 Case #443: 1011100
 Case #444: 1011000
@@ -483,7 +483,7 @@ Case #482: 1110000
 Case #483: 1011100
 Case #484: 1011000
 Case #485: ERROR!
-Case #486: 0000010
+Case #486: ERROR!
 Case #487: ERROR!
 Case #488: ERROR!
 Case #489: 0000010
@@ -498,7 +498,7 @@ Case #497: 0000000
 Case #498: 0000010
 Case #499: 0000010
 Case #500: ERROR!
-Case #501: 1000010
+Case #501: ERROR!
 Case #502: 1000000
 Case #503: 1000010
 Case #504: 1000010
@@ -543,7 +543,7 @@ Case #542: 1100000
 Case #543: 1000010
 Case #544: 1000010
 Case #545: ERROR!
-Case #546: 0010010
+Case #546: ERROR!
 Case #547: ERROR!
 Case #548: ERROR!
 Case #549: 0010010
@@ -558,7 +558,7 @@ Case #557: 0010000
 Case #558: 0010010
 Case #559: 0010010
 Case #560: ERROR!
-Case #561: 1010010
+Case #561: ERROR!
 Case #562: 1010000
 Case #563: 1010010
 Case #564: 1010010
@@ -603,7 +603,7 @@ Case #602: 1110000
 Case #603: 1010010
 Case #604: 1010010
 Case #605: ERROR!
-Case #606: 0001010
+Case #606: ERROR!
 Case #607: 0000000
 Case #608: 0001010
 Case #609: 0001010
@@ -618,7 +618,7 @@ Case #617: 0000000
 Case #618: 0001010
 Case #619: 0001010
 Case #620: ERROR!
-Case #621: 1001010
+Case #621: ERROR!
 Case #622: 1000000
 Case #623: 1001010
 Case #624: 1001010
@@ -663,7 +663,7 @@ Case #662: 1100000
 Case #663: 1001010
 Case #664: 1001010
 Case #665: ERROR!
-Case #666: 0011010
+Case #666: ERROR!
 Case #667: 0010000
 Case #668: 0011010
 Case #669: 0011010
@@ -678,7 +678,7 @@ Case #677: 0010000
 Case #678: 0011010
 Case #679: 0011010
 Case #680: ERROR!
-Case #681: 1011010
+Case #681: ERROR!
 Case #682: 1010000
 Case #683: 1011010
 Case #684: 1011010
@@ -723,7 +723,7 @@ Case #722: 1110000
 Case #723: 1011010
 Case #724: 1011010
 Case #725: ERROR!
-Case #726: 0000110
+Case #726: ERROR!
 Case #727: 0000000
 Case #728: 0000110
 Case #729: 0000010
@@ -738,7 +738,7 @@ Case #737: 0000000
 Case #738: 0000110
 Case #739: 0000010
 Case #740: ERROR!
-Case #741: 1000110
+Case #741: ERROR!
 Case #742: 1000000
 Case #743: 1000110
 Case #744: 1000010
@@ -783,7 +783,7 @@ Case #782: 1100000
 Case #783: 1000110
 Case #784: 1000010
 Case #785: ERROR!
-Case #786: 0010110
+Case #786: ERROR!
 Case #787: 0010000
 Case #788: 0010110
 Case #789: 0010010
@@ -798,7 +798,7 @@ Case #797: 0010000
 Case #798: 0010110
 Case #799: 0010010
 Case #800: ERROR!
-Case #801: 1010110
+Case #801: ERROR!
 Case #802: 1010000
 Case #803: 1010110
 Case #804: 1010010
@@ -843,7 +843,7 @@ Case #842: 1110000
 Case #843: 1010110
 Case #844: 1010010
 Case #845: ERROR!
-Case #846: 0001110
+Case #846: ERROR!
 Case #847: 0000000
 Case #848: 0001110
 Case #849: 0001010
@@ -858,7 +858,7 @@ Case #857: 0000000
 Case #858: 0001110
 Case #859: 0001010
 Case #860: ERROR!
-Case #861: 1001110
+Case #861: ERROR!
 Case #862: 1000000
 Case #863: 1001110
 Case #864: 1001010
@@ -903,7 +903,7 @@ Case #902: 1100000
 Case #903: 1001110
 Case #904: 1001010
 Case #905: ERROR!
-Case #906: 0011110
+Case #906: ERROR!
 Case #907: 0010000
 Case #908: 0011110
 Case #909: 0011010
@@ -918,7 +918,7 @@ Case #917: 0010000
 Case #918: 0011110
 Case #919: 0011010
 Case #920: ERROR!
-Case #921: 1011110
+Case #921: ERROR!
 Case #922: 1010000
 Case #923: 1011110
 Case #924: 1011010
diff --git a/kickstart_2014/src/y2014_round_a/A-small-practice.out b/kickstart_2014/src/y2014_round_a/A-small-practice.out
index fa9ba61..a23df87 100644
--- a/kickstart_2014/src/y2014_round_a/A-small-practice.out
+++ b/kickstart_2014/src/y2014_round_a/A-small-practice.out
@@ -78,7 +78,7 @@ Case #77: ERROR!
 Case #78: 0111011
 Case #79: 1011000
 Case #80: 1111001
-Case #81: 0110000
+Case #81: ERROR!
 Case #82: 1011001
 Case #83: ERROR!
 Case #84: 1011001
diff --git a/kickstart_2014/src/y2014_round_a/a.rs b/kickstart_2014/src/y2014_round_a/a.rs
index f595dd0..738bad7 100644
--- a/kickstart_2014/src/y2014_round_a/a.rs
+++ b/kickstart_2014/src/y2014_round_a/a.rs
@@ -53,7 +53,7 @@ fn solve(seq: &[usize]) -> String
     let mut found_broken = 0;
     let mut next_idx = 0;
 
-    for start in 0..SEQ_0_9.len() {
+'outer_loop:    for start in 0..SEQ_0_9.len() {
         for broken_seg in 0..1 << 7 {
             let mut digit_ok = true;
 
@@ -80,7 +80,7 @@ fn solve(seq: &[usize]) -> String
             if digit_ok && found {
                 //must be unique
                 found = false;
-                break;
+                break 'outer_loop;
             }
             if digit_ok && !found {
                 found = true;

From d41598dc07266450034122202bc08b005d4cd329 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 28 Feb 2019 00:09:46 -0300
Subject: [PATCH 118/122] kickstart 2014 a

---
 .../src/y2014_round_a/A-large-practice.out    | 56 +++++++++----------
 kickstart_2014/src/y2014_round_a/a.rs         | 51 ++++++++++-------
 2 files changed, 60 insertions(+), 47 deletions(-)

diff --git a/kickstart_2014/src/y2014_round_a/A-large-practice.out b/kickstart_2014/src/y2014_round_a/A-large-practice.out
index 1f847c1..75077d0 100644
--- a/kickstart_2014/src/y2014_round_a/A-large-practice.out
+++ b/kickstart_2014/src/y2014_round_a/A-large-practice.out
@@ -1,22 +1,22 @@
-Case #1: ERROR!
+Case #1: 0000000
 Case #2: 1101101
 Case #3: ERROR!
-Case #4: ERROR!
+Case #4: 1111001
 Case #5: ERROR!
 Case #6: ERROR!
 Case #7: ERROR!
-Case #8: ERROR!
-Case #9: ERROR!
-Case #10: ERROR!
-Case #11: ERROR!
-Case #12: ERROR!
-Case #13: ERROR!
-Case #14: ERROR!
-Case #15: ERROR!
-Case #16: ERROR!
-Case #17: ERROR!
-Case #18: ERROR!
-Case #19: ERROR!
+Case #8: 0000000
+Case #9: 0000000
+Case #10: 0000000
+Case #11: 0000000
+Case #12: 0000000
+Case #13: 0000000
+Case #14: 0000000
+Case #15: 0000000
+Case #16: 0000000
+Case #17: 0000000
+Case #18: 0000000
+Case #19: 0000000
 Case #20: ERROR!
 Case #21: ERROR!
 Case #22: ERROR!
@@ -244,9 +244,9 @@ Case #243: 1011000
 Case #244: 1011000
 Case #245: ERROR!
 Case #246: ERROR!
-Case #247: ERROR!
+Case #247: 0000000
 Case #248: ERROR!
-Case #249: ERROR!
+Case #249: 0000000
 Case #250: ERROR!
 Case #251: 0000000
 Case #252: 0000100
@@ -259,7 +259,7 @@ Case #258: 0000100
 Case #259: 0000000
 Case #260: ERROR!
 Case #261: ERROR!
-Case #262: ERROR!
+Case #262: 1000000
 Case #263: ERROR!
 Case #264: 1000000
 Case #265: 0000000
@@ -274,7 +274,7 @@ Case #273: 1000100
 Case #274: 1000000
 Case #275: ERROR!
 Case #276: ERROR!
-Case #277: ERROR!
+Case #277: 0100000
 Case #278: ERROR!
 Case #279: 0000000
 Case #280: 0100000
@@ -304,7 +304,7 @@ Case #303: 1000100
 Case #304: 1000000
 Case #305: ERROR!
 Case #306: ERROR!
-Case #307: ERROR!
+Case #307: 0010000
 Case #308: ERROR!
 Case #309: 0010000
 Case #310: 0010000
@@ -319,7 +319,7 @@ Case #318: 0010100
 Case #319: 0010000
 Case #320: ERROR!
 Case #321: ERROR!
-Case #322: ERROR!
+Case #322: 1010000
 Case #323: ERROR!
 Case #324: 1010000
 Case #325: 0010000
@@ -484,7 +484,7 @@ Case #483: 1011100
 Case #484: 1011000
 Case #485: ERROR!
 Case #486: ERROR!
-Case #487: ERROR!
+Case #487: 0000000
 Case #488: ERROR!
 Case #489: 0000010
 Case #490: 0000010
@@ -544,7 +544,7 @@ Case #543: 1000010
 Case #544: 1000010
 Case #545: ERROR!
 Case #546: ERROR!
-Case #547: ERROR!
+Case #547: 0010000
 Case #548: ERROR!
 Case #549: 0010010
 Case #550: 0010010
@@ -963,7 +963,7 @@ Case #962: 1110000
 Case #963: 1011110
 Case #964: 1011010
 Case #965: ERROR!
-Case #966: ERROR!
+Case #966: 0000001
 Case #967: ERROR!
 Case #968: 0000001
 Case #969: 0000001
@@ -978,7 +978,7 @@ Case #977: 0000000
 Case #978: 0000001
 Case #979: 0000001
 Case #980: ERROR!
-Case #981: ERROR!
+Case #981: 1000001
 Case #982: ERROR!
 Case #983: 1000001
 Case #984: 1000001
@@ -1023,7 +1023,7 @@ Case #1022: 1100000
 Case #1023: 1000001
 Case #1024: 1000001
 Case #1025: ERROR!
-Case #1026: ERROR!
+Case #1026: 0010001
 Case #1027: ERROR!
 Case #1028: 0010001
 Case #1029: 0010001
@@ -1038,7 +1038,7 @@ Case #1037: 0010000
 Case #1038: 0010001
 Case #1039: 0010001
 Case #1040: ERROR!
-Case #1041: ERROR!
+Case #1041: 1010001
 Case #1042: ERROR!
 Case #1043: 1010001
 Case #1044: 1010001
@@ -1930,14 +1930,14 @@ Case #1929: 0111000
 Case #1930: 0011001
 Case #1931: 0100001
 Case #1932: 0010100
-Case #1933: ERROR!
+Case #1933: 0010000
 Case #1934: 0110000
 Case #1935: 1011001
 Case #1936: 0111000
 Case #1937: 0100000
 Case #1938: 0100001
 Case #1939: 1011011
-Case #1940: ERROR!
+Case #1940: 1101001
 Case #1941: 1000010
 Case #1942: 0100000
 Case #1943: 1111001
diff --git a/kickstart_2014/src/y2014_round_a/a.rs b/kickstart_2014/src/y2014_round_a/a.rs
index 738bad7..2a457c6 100644
--- a/kickstart_2014/src/y2014_round_a/a.rs
+++ b/kickstart_2014/src/y2014_round_a/a.rs
@@ -30,11 +30,11 @@ pub fn solve_all_cases()
 
                 assert_eq!(n, seq.len());
 
-                if case_no != 3 {
-                    // continue;
+                if case_no != 1 {
+                     //continue;
                 }
 
-                println!("Solving case {}", case_no);
+                //println!("Solving case {}", case_no);
 
                 writeln!(buffer, "Case #{}: {}", case_no, solve(&seq)).unwrap();
             }
@@ -50,11 +50,13 @@ const SEQ_0_9: [usize; 10] = [
 fn solve(seq: &[usize]) -> String
 {
     let mut found = false;
-    let mut found_broken = 0;
-    let mut next_idx = 0;
+    let mut found_next = 0;
 
 'outer_loop:    for start in 0..SEQ_0_9.len() {
-        for broken_seg in 0..1 << 7 {
+    debug!("Starting at {}", start);
+       // for broken_seg in 0..1 << 7 {
+     for broken_seg in 0..1 << 7 {
+            debug!("Broken segment {:0>7b}", broken_seg);
             let mut digit_ok = true;
 
             for ((idx, &check_digit), &test_seq_digit) in SEQ_0_9
@@ -67,31 +69,42 @@ fn solve(seq: &[usize]) -> String
                 .zip(seq.iter())
             {
                 debug!(
-                    "Looking at check digit {:0>7b} test digit {:0>7b} idx {}",
-                    check_digit, test_seq_digit, idx
+                    "Looking at check digit {:0>7b} test digit {:0>7b} \
+                    with broken {:0>7b} idx {}",
+                    check_digit, test_seq_digit, broken_seg, idx
                 );
-                if test_seq_digit != (check_digit & !broken_seg) {
+                if check_digit & !broken_seg != test_seq_digit {
+                    debug!("No match");
+                    digit_ok = false;
+                    break;
+                }
+                if test_seq_digit & broken_seg > 0 {
+                    debug!("Something on that should be broken");
                     digit_ok = false;
                     break;
                 }
 
             }
 
-            if digit_ok && found {
-                //must be unique
-                found = false;
-                break 'outer_loop;
-            }
-            if digit_ok && !found {
-                found = true;
-                found_broken = broken_seg;
-                next_idx = (100 * SEQ_0_9.len() - start - seq.len() - 1) % SEQ_0_9.len();
+            if digit_ok  {
+                //found = true;
+                let next_idx = (100 * SEQ_0_9.len() - start - seq.len() - 1) % SEQ_0_9.len();
                 debug!(
                     "Found match.  start={} next={} seq len {}",
                     start,
                     next_idx,
                     seq.len()
                 );
+                let next = SEQ_0_9[next_idx] & !broken_seg;
+
+                if !found {
+                    found = true;
+                    found_next = next;
+                } else if next != found_next {
+                    found = false;
+                    break 'outer_loop;
+                }
+
             }
         }
     }
@@ -99,7 +112,7 @@ fn solve(seq: &[usize]) -> String
     if !found {
         "ERROR!".to_string()
     } else {
-        let ans = SEQ_0_9[next_idx] & !found_broken;
+        let ans = found_next;
         (0..7)
             .map(|i| if ans >> i & 1 > 0 { "1" } else { "0" })
             .join("")

From 7964f8ee96b85d13d57ee53d237382d344d5aa5e Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 28 Feb 2019 00:14:42 -0300
Subject: [PATCH 119/122] kickstart 2014 a

---
 kickstart_2014/src/main.rs              |   3 +
 kickstart_2014/src/y2014_round_a/a.rs   |  26 ++--
 kickstart_2014/src/y2014_round_a/d.rs   | 170 ++++++++++++++++++++++++
 kickstart_2014/src/y2014_round_a/mod.rs |   1 +
 4 files changed, 184 insertions(+), 16 deletions(-)

diff --git a/kickstart_2014/src/main.rs b/kickstart_2014/src/main.rs
index 1f2618e..08b2895 100644
--- a/kickstart_2014/src/main.rs
+++ b/kickstart_2014/src/main.rs
@@ -10,6 +10,9 @@ use codejam::util::log::init_log;
 pub fn run_y2014_round_a()
 {
     y2014_round_a::a::solve_all_cases();
+    y2014_round_a::b::solve_all_cases();
+    y2014_round_a::c::solve_all_cases();
+    y2014_round_a::d::solve_all_cases();
 }
 
 fn main()
diff --git a/kickstart_2014/src/y2014_round_a/a.rs b/kickstart_2014/src/y2014_round_a/a.rs
index 2a457c6..81865fd 100644
--- a/kickstart_2014/src/y2014_round_a/a.rs
+++ b/kickstart_2014/src/y2014_round_a/a.rs
@@ -11,9 +11,7 @@ use std::usize;
 pub fn solve_all_cases()
 {
     run_cases(
-        &[
-            "A-sample",     "A-small-practice", "A-large-practice"
-        ],
+        &["A-sample", "A-small-practice", "A-large-practice"],
         "y2014_round_a",
         |reader, buffer| {
             let t = reader.read_int();
@@ -31,7 +29,7 @@ pub fn solve_all_cases()
                 assert_eq!(n, seq.len());
 
                 if case_no != 1 {
-                     //continue;
+                    //continue;
                 }
 
                 //println!("Solving case {}", case_no);
@@ -52,16 +50,15 @@ fn solve(seq: &[usize]) -> String
     let mut found = false;
     let mut found_next = 0;
 
-'outer_loop:    for start in 0..SEQ_0_9.len() {
-    debug!("Starting at {}", start);
-       // for broken_seg in 0..1 << 7 {
-     for broken_seg in 0..1 << 7 {
+    'outer_loop: for start in 0..SEQ_0_9.len() {
+        debug!("Starting at {}", start);
+
+        for broken_seg in 0..1 << 7 {
             debug!("Broken segment {:0>7b}", broken_seg);
             let mut digit_ok = true;
 
-            for ((idx, &check_digit), &test_seq_digit) in SEQ_0_9
+            for ( &check_digit, &test_seq_digit) in SEQ_0_9
                 .iter()
-                .enumerate()
                 .rev()
                 .cycle()
                 .skip(start)
@@ -70,8 +67,8 @@ fn solve(seq: &[usize]) -> String
             {
                 debug!(
                     "Looking at check digit {:0>7b} test digit {:0>7b} \
-                    with broken {:0>7b} idx {}",
-                    check_digit, test_seq_digit, broken_seg, idx
+                     with broken {:0>7b} ",
+                    check_digit, test_seq_digit, broken_seg
                 );
                 if check_digit & !broken_seg != test_seq_digit {
                     debug!("No match");
@@ -83,11 +80,9 @@ fn solve(seq: &[usize]) -> String
                     digit_ok = false;
                     break;
                 }
-
             }
 
-            if digit_ok  {
-                //found = true;
+            if digit_ok {
                 let next_idx = (100 * SEQ_0_9.len() - start - seq.len() - 1) % SEQ_0_9.len();
                 debug!(
                     "Found match.  start={} next={} seq len {}",
@@ -104,7 +99,6 @@ fn solve(seq: &[usize]) -> String
                     found = false;
                     break 'outer_loop;
                 }
-
             }
         }
     }
diff --git a/kickstart_2014/src/y2014_round_a/d.rs b/kickstart_2014/src/y2014_round_a/d.rs
index e69de29..823ac16 100644
--- a/kickstart_2014/src/y2014_round_a/d.rs
+++ b/kickstart_2014/src/y2014_round_a/d.rs
@@ -0,0 +1,170 @@
+use codejam::util::codejam::run_cases;
+use std::f64::consts::PI;
+use std::io::Write;
+
+/*
+Circle / slice area
+Direct Geometry area calculations
+*/
+pub fn solve_all_cases()
+{
+    run_cases(
+        &["C-small-practice", "C-large-practice"],
+        "y2008qual",
+        |reader, buffer| {
+            let t = reader.read_int();
+
+            for case_no in 1..=t {
+                let floats = reader.read_num_line();
+
+                println!("Solving case {}", case_no);
+
+                let ans = solve(floats[0], floats[1], floats[2], floats[3], floats[4]);
+                writeln!(buffer, "Case #{}: {}", case_no, ans).unwrap();
+            }
+        },
+    );
+}
+
+fn circle(x: f64, r: f64) -> f64
+{
+    (r.powi(2) - x.powi(2)).sqrt()
+}
+
+fn integral_circle(x: f64, r: f64) -> f64
+{
+    let y = circle(x, r);
+    (x * y + (x / y).atan() * r.powi(2)) / 2.
+}
+
+fn solve(fly_radius: f64, racket_radius: f64, t: f64, chord_radius: f64, gap_len: f64) -> f64
+{
+    /*
+    dbg!( fly_radius );
+    dbg!( racket_radius);
+    dbg!( t) ; //Racket outer circle radius
+    dbg!( chord_radius);
+    dbg!( gap_len);
+    */
+
+    if gap_len < 2. * fly_radius {
+        return 1f64;
+    }
+    if fly_radius > racket_radius - t {
+        return 1f64;
+    }
+
+    let total_area = PI * racket_radius.powi(2);
+    let mut miss_area = 0f64;
+
+    //Go through squares with x1 < x2 ; y1 < y2
+    //These squares are where the fly can get through
+
+    //To go from x1 to x2 or y1 to y2
+    let next_position2_inc = gap_len - 2. * fly_radius;
+
+    //To go from x2 to x1' or y2 to y1'
+    let next_position1_inc = 2. * chord_radius + 2. * fly_radius;
+
+    //The first x1 and y1
+    let first_position = chord_radius + fly_radius;
+
+    //The lenght of a full square + chords
+    let square_length = next_position1_inc + next_position2_inc;
+
+    //The actual radius we generally care about
+    let inner_radius = racket_radius - t - fly_radius;
+
+    //dbg!(inner_radius);
+
+    //Go up chord + fly, when do wo intersect
+    let x_stop = circle(chord_radius + fly_radius, inner_radius);
+
+    //dbg!(x_stop);
+
+    let mut x1 = first_position;
+
+    //dbg!(x1);
+
+    let num_cols = ((x_stop - x1) / square_length).ceil() as u64;
+
+    //Are that a fly can get through
+    let regular_square_area = next_position2_inc * next_position2_inc;
+
+    assert!(x1 <= x_stop);
+
+    for col in 0..num_cols {
+        let mut x2 = x1 + next_position2_inc;
+        if col == num_cols - 1 && x_stop < x2 {
+            x2 = x_stop
+        }
+
+        let mut y1 = first_position;
+        let y_stop = circle(x1, inner_radius);
+
+        let y_arc_intersection = circle(x2, inner_radius);
+
+        let num_squares = ((y_stop - y1) / square_length).ceil() as u64;
+
+        //The real time saver.  We need to know the first y2 that is < y_arc_intersection
+        //
+        // y2_0 + square_length * lowest_arc_intersection_square_num < y_arc_intersection
+        // square_length * lowest_arc_intersection_square_num < y_arc_intersection - y2_0
+        // lowest_arc_intersection_square_num > (y_arc_intersection - y2_0) / square_length (dividing switches comparison)
+        // lowest_arc_intersection_square_num == ceil ( ... )
+        let lowest_arc_intersection_square_num =
+            (((y_arc_intersection - (y1 + next_position2_inc)) / square_length).ceil()) as u64;
+
+        //Catch up y1
+        y1 += lowest_arc_intersection_square_num as f64 * square_length;
+
+        //Init missed area with all the regular squares
+        let mut slice_miss_area = (lowest_arc_intersection_square_num as f64) * regular_square_area;
+
+        for square_num in lowest_arc_intersection_square_num..num_squares {
+            let mut y2 = y1 + next_position2_inc;
+            if square_num == num_squares - 1 && y_stop < y2 {
+                y2 = y_stop;
+            }
+            debug!("  y1:[{}] y2:[{}]", y1, y2);
+
+            //This means an arc is going through the square
+            let mut x1_arc_intersection = circle(y2, inner_radius);
+            let mut x2_arc_intersection = circle(y1, inner_radius);
+
+            debug!(
+                "  X1 arc {} x2 arc {}",
+                x1_arc_intersection, x2_arc_intersection
+            );
+
+            //take care of the curve
+            if x1 > x1_arc_intersection {
+                x1_arc_intersection = x1
+            }
+            if x2 < x2_arc_intersection {
+                x2_arc_intersection = x2
+            }
+
+            slice_miss_area += (y2 - y1) * (x2_arc_intersection - x1);
+
+            let area_under_curve = integral_circle(x2_arc_intersection, inner_radius)
+                - integral_circle(x1_arc_intersection, inner_radius);
+            let rect_area = y2 * (x2_arc_intersection - x1_arc_intersection);
+            let arc_area = rect_area - area_under_curve;
+
+            //Subtract what the curve cut off
+            slice_miss_area -= arc_area;
+
+            y1 = y2 + next_position1_inc;
+
+            //debug!( "  Slice Miss area: {} total area: {}", slice_miss_area,slice_total_area);
+        }
+
+        miss_area += slice_miss_area;
+        x1 = x2 + next_position1_inc;
+    }
+
+    miss_area *= 4.;
+
+    1. - miss_area / total_area
+}
diff --git a/kickstart_2014/src/y2014_round_a/mod.rs b/kickstart_2014/src/y2014_round_a/mod.rs
index 4f053df..890df60 100644
--- a/kickstart_2014/src/y2014_round_a/mod.rs
+++ b/kickstart_2014/src/y2014_round_a/mod.rs
@@ -1,3 +1,4 @@
 pub mod a;
 pub mod b;
 pub mod c;
+pub mod d;
\ No newline at end of file

From c9d50645722d184c9cee125a7c3c2792f495e6c5 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 28 Feb 2019 00:20:49 -0300
Subject: [PATCH 120/122] kickstart 2014 a

---
 kickstart_2014/src/y2014_round_a/a.rs | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/kickstart_2014/src/y2014_round_a/a.rs b/kickstart_2014/src/y2014_round_a/a.rs
index 81865fd..87983d3 100644
--- a/kickstart_2014/src/y2014_round_a/a.rs
+++ b/kickstart_2014/src/y2014_round_a/a.rs
@@ -6,7 +6,9 @@ use std::io::Write;
 use std::usize;
 
 /*
-
+Binary (endian-ness)
+Reverse cycle iterator
+subtraction mod arithmetic
 */
 pub fn solve_all_cases()
 {
@@ -83,7 +85,8 @@ fn solve(seq: &[usize]) -> String
             }
 
             if digit_ok {
-                let next_idx = (100 * SEQ_0_9.len() - start - seq.len() - 1) % SEQ_0_9.len();
+                //becuase its usize, can't go negative
+                let next_idx = (100*SEQ_0_9.len() - start - seq.len() - 1) % SEQ_0_9.len() ;
                 debug!(
                     "Found match.  start={} next={} seq len {}",
                     start,

From 3e8c7b71cb2d0800305f3e42fa2fa715fa719cc8 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 28 Feb 2019 10:25:35 -0300
Subject: [PATCH 121/122] kickstart 2014 b

---
 .../src/y2014_round_a/B-large-practice.in     | 2053 +++++++++++++++++
 .../src/y2014_round_a/B-small-practice.in     |  101 +
 kickstart_2014/src/y2014_round_a/b.rs         |  115 +-
 3 files changed, 2175 insertions(+), 94 deletions(-)
 create mode 100644 kickstart_2014/src/y2014_round_a/B-large-practice.in
 create mode 100644 kickstart_2014/src/y2014_round_a/B-small-practice.in

diff --git a/kickstart_2014/src/y2014_round_a/B-large-practice.in b/kickstart_2014/src/y2014_round_a/B-large-practice.in
new file mode 100644
index 0000000..6793b9b
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/B-large-practice.in
@@ -0,0 +1,2053 @@
+100
+4 right
+0 0 2 4
+0 0 4 8
+0 2 16 32
+0 2 2 16
+4 up
+0 0 2 4
+0 0 4 8
+0 2 16 32
+0 0 4 16
+4 up
+0 0 0 0
+0 0 0 0
+0 0 0 0
+0 0 0 0
+20 down
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+20 left
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+20 right
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+20 up
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+20 left
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+2 2 4 4 8 8 16 16 32 32 64 64 128 128 256 256 512 512 1024 1024
+20 down
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+20 left
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+20 right
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+20 up
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024
+20 up
+0 512 512 256 0 0 0 128 0 0 0 2 256 0 0 4 0 0 0 512
+0 0 0 0 0 128 0 0 0 0 0 0 0 0 4 0 4 32 0 0
+0 0 2 0 0 64 0 2 0 0 0 0 0 0 0 1024 0 0 0 0
+0 0 8 2 0 2 0 0 0 0 0 0 0 4 0 0 1024 0 128 0
+2 64 4 4 4 0 0 0 512 0 0 0 0 0 0 0 0 0 0 128
+2 16 128 0 0 0 0 8 1024 0 0 4 2 0 4 4 0 4 0 1024
+0 4 0 2 0 0 0 0 0 0 0 0 0 0 0 4 4 0 0 128
+32 4 0 0 2 0 0 0 4 0 0 128 2 0 0 0 0 1024 0 0
+0 0 0 0 256 0 0 0 4 0 4 16 128 0 0 0 256 1024 0 0
+0 0 0 8 0 0 8 0 0 512 0 0 8 0 0 0 0 0 0 64
+0 0 0 0 0 0 0 0 0 0 0 0 512 0 0 0 0 0 0 128
+0 0 0 128 2 0 4 0 0 0 0 2 0 8 0 512 32 0 0 0
+512 256 2 2 0 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0
+64 2 128 0 0 0 2 0 128 0 0 0 0 4 0 0 0 0 1024 0
+0 0 0 512 0 0 0 0 0 0 0 128 0 0 0 2 0 0 0 0
+0 0 0 0 0 0 2 0 4 0 0 2 2 0 0 64 4 0 512 0
+0 2 0 0 256 2 0 0 0 0 0 4 2 0 0 4 0 0 0 0
+0 0 0 64 256 0 0 0 2 0 2 0 0 0 0 128 0 2 0 0
+16 0 0 512 0 4 2 8 0 0 0 256 0 0 0 16 0 0 0 0
+0 0 0 0 0 4 0 0 64 0 0 4 0 0 0 0 0 0 0 0
+20 down
+0 0 0 8 0 0 4 1024 64 0 1024 0 0 256 4 512 0 0 0 0
+64 0 0 0 0 1024 0 4 0 0 0 2 32 0 0 0 0 0 32 4
+0 0 0 16 0 0 0 256 4 512 0 0 4 64 0 0 8 1024 2 2
+64 2 0 1024 0 0 0 0 0 0 0 0 1024 0 0 0 4 2 0 4
+0 0 0 0 0 4 0 0 0 0 4 512 0 0 0 8 128 0 0 0
+2 0 32 32 0 0 16 0 2 4 1024 4 0 4 0 2 0 0 0 0
+0 4 64 4 2 0 2 0 0 0 0 2 8 0 0 256 0 128 16 0
+0 256 0 4 0 0 0 2 2 0 0 0 4 0 8 0 0 0 0 0
+0 0 0 0 0 128 0 4 0 0 8 0 0 0 0 0 0 8 0 0
+0 0 64 0 512 0 4 0 0 0 4 0 0 0 512 512 0 0 0 0
+0 0 0 0 0 0 0 2 16 0 0 0 32 0 0 0 0 0 0 4
+0 0 2 0 0 4 2 16 4 32 0 16 0 0 0 128 2 0 0 512
+0 0 0 0 0 0 0 512 0 0 0 0 1024 0 2 32 512 4 0 0
+32 4 4 0 1024 0 0 0 256 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 4 2 0 0 0 0 0 256 2 4 0 2 0 4 0 2 2
+0 0 0 4 2 0 0 0 0 0 0 4 0 0 0 0 0 0 64 0
+0 0 2 0 0 0 0 0 512 0 4 0 0 0 64 0 256 0 0 0
+0 0 0 0 0 0 0 4 0 4 0 4 0 0 0 2 1024 0 32 0
+0 0 0 256 0 0 0 2 0 0 64 512 0 1024 0 0 256 0 8 256
+4 0 0 0 0 0 0 256 0 0 512 0 0 2 2 0 0 0 0 0
+20 up
+0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 64
+2 0 0 0 4 512 0 0 0 0 0 0 0 0 0 8 0 0 128 4
+0 4 0 0 2 0 0 0 0 0 0 2 64 0 0 0 0 0 0 32
+0 0 4 16 4 0 0 4 0 4 2 0 0 0 8 0 0 0 0 0
+2 0 0 0 32 0 0 0 0 0 512 128 0 0 16 64 0 256 0 0
+0 0 0 0 4 4 0 16 0 0 2 0 4 0 2 0 4 0 0 2
+0 0 0 0 0 128 0 2 0 0 0 0 0 0 0 0 4 256 0 1024
+0 1024 0 512 0 0 0 0 0 1024 0 0 0 4 0 2 0 4 2 0
+512 0 256 0 0 4 512 256 0 0 1024 0 0 4 0 4 0 0 0 4
+512 512 0 0 0 0 0 0 0 0 0 64 32 0 2 4 128 2 0 0
+0 256 4 0 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
+0 0 2 2 0 0 0 0 0 4 0 0 0 0 0 0 0 32 4 0
+128 0 0 0 0 512 0 4 0 0 0 0 4 0 64 512 0 0 0 0
+4 4 256 0 4 0 0 0 256 0 0 512 4 0 0 0 0 4 1024 2
+0 0 32 0 4 0 2 0 0 8 0 0 2 0 512 0 0 0 0 0
+16 0 0 0 0 2 0 128 0 0 0 2 0 0 0 0 0 0 0 0
+0 0 2 0 0 4 0 0 0 16 0 4 4 0 256 0 2 0 0 0
+0 2 0 32 0 0 4 0 0 512 0 2 0 0 0 0 0 0 0 0
+0 0 128 0 4 0 0 0 0 0 0 128 0 0 0 4 0 0 0 8
+0 0 0 512 0 0 16 0 0 0 0 2 0 0 0 0 0 0 0 0
+20 down
+0 0 4 0 2 2 8 0 1024 16 0 0 0 32 2 0 0 64 0 2
+16 0 0 0 16 0 0 0 0 0 0 0 0 4 0 0 2 4 4 0
+4 0 4 0 0 0 0 0 0 0 0 2 0 0 0 512 256 0 16 2
+0 0 0 0 0 64 0 128 0 0 4 0 0 4 0 0 0 0 0 0
+2 0 0 0 0 0 0 2 2 0 8 0 2 0 0 0 0 0 0 2
+0 0 0 0 8 0 2 32 0 0 128 0 0 0 8 0 0 0 0 256
+0 0 0 0 0 0 0 0 0 256 0 0 32 0 0 0 256 0 2 0
+4 0 0 0 0 0 0 0 2 0 0 0 2 64 4 0 0 0 0 16
+0 4 4 0 2 8 0 4 0 1024 4 0 4 0 4 0 4 0 0 0
+0 0 64 64 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 32 256 4 2 0 0 0 1024 0 0 256 0 0 0 0 0 0 0 0
+0 2 0 0 0 64 4 0 0 0 0 0 0 4 0 1024 0 128 0 2
+128 0 0 0 0 2 0 2 0 512 0 512 0 0 0 0 0 0 0 0
+0 0 0 128 0 0 0 32 0 0 0 1024 512 0 128 0 1024 2 0 0
+0 0 0 256 0 0 0 0 0 0 32 16 512 0 1024 0 0 0 0 0
+0 0 2 2 8 0 0 2 256 0 0 2 64 0 0 1024 0 0 0 8
+2 0 0 0 0 0 1024 0 2 2 0 0 4 0 0 0 4 4 512 0
+0 0 0 0 0 0 0 0 2 128 0 0 0 0 4 0 0 0 0 0
+128 0 0 0 0 2 0 0 1024 0 0 0 0 0 4 4 0 0 0 4
+512 0 0 0 0 0 0 1024 0 0 0 0 256 0 4 0 0 0 0 512
+20 up
+0 0 0 512 0 0 0 0 2 0 0 0 0 0 0 128 0 8 0 0
+0 0 0 4 0 0 0 0 4 4 0 4 0 0 0 0 0 0 0 1024
+2 0 0 0 1024 0 0 0 512 0 0 0 0 0 64 4 0 0 2 8
+2 0 32 2 0 2 0 1024 0 0 2 0 0 0 2 0 0 512 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 4 0 0 256 0 0 0 0 0 0 0 0 8
+2 0 1024 4 0 2 0 256 0 128 0 0 4 0 0 0 0 0 32 0
+4 0 4 2 16 512 0 0 0 0 0 2 0 0 0 2 0 0 0 0
+2 0 16 0 4 4 0 32 2 2 0 0 2 0 0 0 0 0 0 4
+0 0 2 0 0 0 0 0 0 0 0 0 0 4 0 4 32 4 2 2
+0 0 0 128 0 0 0 0 32 64 0 0 4 32 0 0 0 0 0 0
+0 2 512 0 512 0 0 0 0 2 0 16 2 1024 0 0 0 1024 0 2
+32 0 0 4 4 64 0 0 256 64 0 0 0 0 0 0 0 0 0 4
+0 0 0 2 0 0 0 0 0 8 0 0 0 2 64 0 32 0 0 0
+0 0 0 64 0 2 2 4 0 0 32 256 0 0 0 0 0 0 4 0
+0 0 0 0 512 0 128 0 0 0 4 0 0 0 0 0 0 16 0 256
+0 0 0 0 0 256 0 0 0 16 0 0 0 0 0 0 0 0 512 512
+4 0 4 4 256 0 0 16 0 4 0 4 0 2 0 2 0 1024 0 0
+0 0 0 0 0 0 0 2 4 0 0 2 2 0 0 0 0 0 2 0
+4 0 0 0 0 0 0 0 4 4 8 128 0 0 0 4 2 2 512 0
+20 up
+0 0 0 1024 0 16 0 0 2 0 0 0 512 64 0 0 0 0 0 1024
+4 0 0 32 8 0 0 4 0 0 0 64 0 2 0 0 0 512 0 64
+512 0 0 0 0 0 0 4 0 0 0 32 0 0 2 2 512 0 0 0
+0 0 0 0 0 0 2 16 0 4 0 0 8 256 0 0 2 0 0 0
+4 0 0 256 0 0 0 0 0 2 0 0 0 0 0 0 4 4 0 0
+0 128 0 0 0 0 4 0 0 0 0 1024 0 0 0 0 2 2 2 0
+0 0 2 0 0 0 0 0 2 4 32 0 0 0 0 0 0 512 0 4
+0 0 0 4 0 0 0 0 0 8 0 0 0 0 0 2 0 256 0 0
+0 0 0 0 0 0 0 0 8 0 0 8 0 0 0 16 512 4 0 64
+0 0 2 0 0 64 0 256 4 4 0 0 0 0 0 0 2 0 0 0
+1024 2 512 0 0 128 64 4 0 0 4 0 4 0 0 0 0 512 0 16
+256 0 0 2 0 0 0 2 1024 16 512 0 0 0 0 0 0 0 0 0
+1024 0 0 0 0 0 2 0 2 0 0 4 0 0 0 0 4 0 0 4
+0 0 1024 0 0 0 0 0 0 0 512 0 0 0 0 0 0 0 0 0
+0 4 0 0 2 4 1024 0 0 0 64 0 0 0 128 0 256 0 2 0
+0 4 0 0 0 0 0 2 0 64 0 0 0 0 0 0 128 32 0 2
+4 0 0 0 2 2 0 0 0 512 0 512 0 0 0 0 0 0 0 0
+0 2 0 512 512 0 0 0 0 0 4 0 1024 128 0 2 0 0 0 128
+2 0 0 0 0 1024 0 0 16 0 0 0 0 0 4 0 2 0 0 0
+0 0 2 0 2 0 128 0 0 0 4 0 0 0 4 256 4 0 0 32
+20 left
+0 512 0 4 0 0 0 512 0 0 0 0 32 0 0 0 0 1024 16 0
+0 0 0 2 256 16 0 0 0 4 0 0 4 0 0 0 32 0 0 0
+0 0 0 0 0 0 8 0 0 0 0 0 0 0 4 16 0 16 0 0
+0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 256 0 2 0
+0 2 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 16
+0 0 0 2 0 0 0 0 0 0 2 0 0 2 0 512 0 32 4 0
+1024 0 0 0 0 0 0 0 0 0 512 0 16 4 0 0 0 0 512 0
+2 128 0 512 0 256 2 0 2 32 2 64 0 8 256 512 0 2 4 0
+0 0 4 0 0 0 128 0 0 0 0 8 0 0 2 0 0 2 0 0
+2 0 0 0 4 1024 4 0 0 8 128 64 16 0 0 2 0 0 0 0
+2 4 0 0 0 0 0 0 0 0 0 4 4 4 4 0 0 2 0 2
+16 1024 0 0 4 2 0 4 4 0 0 0 0 4 8 0 256 0 0 64
+0 0 0 0 0 0 4 0 0 1024 0 4 256 0 0 0 2 0 0 0
+0 2 4 2 0 0 0 0 0 0 0 4 0 0 512 0 4 0 0 1024
+0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 4 0 4 0 0
+0 64 0 0 8 32 0 4 0 0 0 0 0 2 2 0 256 0 4 0
+2 0 0 512 64 0 128 0 32 0 0 0 0 32 0 0 4 256 4 0
+0 0 0 0 512 0 0 1024 0 0 0 512 128 64 0 0 0 0 0 0
+0 0 4 0 0 4 0 0 0 0 0 0 0 0 2 0 0 4 0 64
+0 256 0 0 2 0 0 0 0 0 8 64 4 0 0 4 2 0 0 0
+20 down
+0 0 0 0 32 0 2 0 0 0 0 0 64 0 512 512 4 4 32 128
+0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 256 0 4 256
+4 0 256 0 16 0 0 0 64 8 0 0 4 8 0 0 8 0 0 0
+0 0 2 0 32 256 2 0 2 0 0 0 4 0 0 0 0 16 0 4
+0 0 0 512 1024 0 0 0 0 0 0 0 64 2 16 0 1024 0 0 0
+2 0 0 2 0 64 0 0 0 0 2 0 0 0 0 2 0 2 0 2
+0 0 0 16 256 0 0 256 64 0 4 0 0 0 0 0 4 64 0 0
+0 0 0 128 16 0 2 0 0 0 128 0 0 0 0 0 1024 4 0 256
+0 0 2 2 64 16 1024 0 0 512 0 0 0 0 32 0 0 0 0 32
+1024 32 0 0 0 0 0 0 0 512 4 4 0 256 0 0 0 0 0 0
+0 0 0 512 0 0 0 0 32 0 0 2 0 32 0 64 0 512 0 16
+4 0 0 0 0 0 0 0 0 4 8 0 0 256 0 0 0 16 64 32
+64 0 0 0 0 0 0 0 0 512 0 2 1024 0 0 256 0 0 0 0
+128 0 0 0 0 0 0 0 0 8 4 4 0 0 2 0 0 0 0 0
+0 0 0 0 0 0 0 2 0 0 0 512 0 0 0 0 128 2 4 0
+32 0 0 0 4 0 0 32 4 0 8 128 0 0 0 0 256 4 0 0
+0 4 0 0 0 0 2 32 1024 0 256 0 256 512 8 2 0 0 0 0
+0 0 0 0 128 64 0 0 32 4 2 0 4 4 0 2 2 2 256 128
+0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 32 0
+0 0 0 512 0 4 0 0 64 0 2 2 0 0 0 0 4 0 0 0
+20 left
+0 64 0 4 0 0 0 0 0 0 0 0 0 0 2 0 0 8 0 0
+0 0 0 256 0 128 0 0 0 0 0 128 4 4 0 0 0 0 0 0
+2 0 0 0 0 1024 256 0 0 2 2 0 0 0 0 8 4 0 0 4
+0 0 0 0 0 0 4 4 0 0 128 0 0 0 0 16 8 0 0 4
+0 32 2 0 32 0 0 0 0 0 0 4 0 0 0 0 0 0 8 0
+2 512 4 4 1024 512 0 32 0 0 4 0 256 4 0 0 0 0 0 0
+0 4 0 8 2 0 2 16 0 0 128 4 0 256 0 0 0 0 2 1024
+0 256 0 512 0 0 0 0 0 0 0 0 0 0 0 0 2 0 4 4
+0 32 0 0 4 0 4 0 0 2 0 0 0 0 1024 0 0 0 0 0
+1024 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 32 0 0
+0 64 0 0 2 0 0 0 2 256 0 512 16 0 4 0 0 0 16 0
+4 0 0 2 0 4 8 4 2 4 0 512 0 0 0 2 0 0 0 0
+4 8 8 0 4 0 32 2 8 0 0 0 4 0 0 0 0 0 0 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 0 0 0 1024
+0 128 0 32 0 0 2 0 0 2 0 0 0 32 0 0 0 512 0 0
+0 0 0 64 0 0 0 0 0 0 4 0 0 0 0 32 2 0 512 0
+0 2 0 2 0 4 0 0 8 0 0 0 4 4 4 0 0 0 4 0
+256 0 0 0 0 0 16 128 0 0 2 0 4 4 0 0 0 32 0 4
+0 2 0 0 1024 0 0 0 0 0 0 4 1024 8 64 512 0 0 64 0
+0 128 2 8 2 0 0 2 0 0 0 0 0 0 0 0 0 0 0 128
+20 up
+4 256 16 0 0 0 8 0 0 0 0 4 0 64 0 0 256 2 0 0
+64 4 0 4 128 0 2 0 128 0 0 0 0 0 0 0 0 2 0 0
+1024 0 2 4 0 4 4 0 4 512 0 0 0 256 0 0 0 2 0 0
+0 0 0 0 0 2 0 4 2 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 16 0 0 0 0 2 0 2 8 0 1024 4 0 16 0
+64 0 0 0 0 256 0 0 16 0 0 0 64 0 0 0 2 0 0 256
+4 0 2 0 0 0 0 2 0 256 0 0 0 0 0 8 0 0 4 2
+0 0 0 0 32 128 0 0 0 0 1024 0 2 0 2 16 0 1024 0 0
+0 0 0 0 0 4 0 128 0 0 0 0 0 0 0 4 0 16 2 0
+0 0 0 8 256 0 4 0 0 0 0 0 0 0 0 1024 2 0 0 4
+0 0 0 0 0 4 4 0 64 0 0 0 0 0 0 0 0 0 0 2
+0 0 0 0 0 2 0 0 0 0 16 0 0 4 0 0 0 4 2 0
+2 0 4 0 0 4 0 0 8 0 0 32 0 0 0 256 0 0 256 0
+2 0 0 0 512 0 4 8 32 2 0 1024 0 32 0 0 0 0 0 0
+0 0 2 0 8 32 0 512 256 16 4 0 0 0 0 4 2 0 0 0
+2 0 0 0 0 2 2 0 0 4 0 0 0 0 0 0 8 0 0 0
+0 0 0 0 8 0 0 0 0 0 4 0 0 0 0 0 4 2 0 128
+0 128 0 0 0 128 0 512 0 0 0 4 0 0 0 0 0 2 16 4
+256 0 4 4 128 0 0 0 0 8 0 0 0 0 0 0 0 0 1024 2
+0 0 0 0 0 0 0 0 0 0 0 4 4 64 0 0 0 2 0 16
+20 right
+0 0 0 0 0 0 0 0 0 0 0 32 2 0 0 0 4 4 0 0
+0 4 2 0 0 2 0 0 0 0 0 0 8 4 0 1024 0 0 0 4
+2 0 0 0 0 2 16 0 0 0 0 512 0 0 64 128 256 0 0 0
+0 0 32 4 0 0 0 0 0 0 0 0 0 0 64 0 0 16 0 0
+256 4 0 0 0 8 1024 0 4 0 4 0 32 256 0 0 1024 0 8 2
+0 4 0 0 0 2 0 0 0 0 0 32 0 0 0 0 4 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 1024 0 2 128 0 0 256 0 4
+0 0 4 0 2 0 2 0 0 0 0 0 0 1024 0 64 0 0 0 32
+0 0 0 32 0 0 512 8 0 0 1024 0 0 0 0 0 128 0 0 0
+0 0 0 256 0 0 32 2 0 0 8 0 16 0 64 2 0 256 0 0
+4 2 2 0 0 0 0 2 0 0 128 0 4 0 0 4 0 0 4 1024
+2 0 0 0 4 0 0 0 0 4 0 0 0 0 0 1024 0 0 0 8
+0 8 32 4 2 0 512 0 0 0 0 0 0 32 0 0 256 2 0 0
+0 0 0 0 128 0 0 0 0 0 0 0 0 0 4 2 0 0 0 128
+0 0 0 0 512 64 4 16 0 8 64 0 0 4 0 0 0 0 128 64
+0 0 512 128 0 0 0 0 32 0 0 0 1024 0 0 4 0 256 0 0
+0 0 0 64 0 16 0 0 8 0 0 0 0 1024 256 16 0 512 0 0
+0 0 0 8 0 8 0 0 2 0 0 4 0 0 0 0 0 0 0 0
+0 0 0 8 16 0 0 0 0 0 2 0 4 8 0 0 0 4 0 0
+0 0 0 0 64 0 0 0 0 0 16 0 0 0 32 0 0 2 4 0
+20 left
+0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 8 0 0 0
+128 0 0 512 0 0 0 0 0 0 0 0 2 0 0 0 0 8 0 0
+1024 0 0 2 0 0 0 4 64 0 0 256 0 0 0 0 1024 2 0 0
+2 2 0 4 0 8 0 0 0 0 0 4 0 0 0 64 0 512 0 512
+1024 0 0 0 0 0 0 2 0 128 0 0 0 0 0 8 512 0 128 4
+0 0 2 2 0 0 0 0 0 0 0 512 512 0 0 0 512 4 256 0
+0 0 0 0 0 512 0 0 2 2 32 0 0 0 0 512 0 2 0 0
+2 0 0 0 0 1024 0 0 0 0 0 0 0 16 0 512 0 256 0 0
+128 0 4 0 2 0 0 2 0 0 0 0 2 0 4 0 0 0 0 0
+4 0 0 0 8 0 0 0 0 0 0 128 0 2 4 2 0 0 0 0
+64 0 0 2 0 0 0 1024 0 0 4 0 4 0 2 0 32 2 0 0
+4 0 4 4 0 8 0 0 32 0 0 0 0 4 1024 0 0 8 0 0
+0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 16 0 0 0 64 0 4 2 2 0 0 0 0 4 0 0 0
+0 0 0 0 4 0 2 0 4 0 0 32 0 0 0 0 128 0 0 2
+0 0 0 0 0 4 1024 0 0 0 0 0 0 0 0 2 64 0 0 0
+0 0 0 32 0 0 0 64 0 0 0 0 0 0 0 0 2 0 256 0
+32 0 0 0 0 0 32 0 0 0 32 0 128 0 8 0 512 512 64 0
+0 0 0 0 4 4 0 0 64 0 0 0 0 2 512 0 0 0 0 0
+0 2 0 0 0 64 0 4 1024 0 0 0 0 0 256 0 0 0 0 0
+20 left
+0 0 0 2 0 0 0 0 4 0 8 0 2 0 2 8 0 8 0 8
+0 0 0 2 16 16 0 0 32 0 64 0 0 0 0 0 512 0 0 0
+2 0 128 1024 4 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0
+0 2 0 8 0 0 0 0 4 0 128 4 0 256 64 0 0 0 0 0
+0 0 0 0 16 0 0 256 0 0 0 0 8 0 4 2 256 128 0 8
+8 0 0 2 0 0 0 0 0 0 0 0 64 0 0 0 0 4 0 0
+64 0 0 0 0 0 0 0 128 0 0 0 4 0 0 0 0 0 0 512
+16 128 0 0 2 0 0 2 0 0 0 4 0 0 0 2 0 0 0 0
+0 0 0 0 2 4 0 16 0 8 4 0 0 0 0 128 0 0 0 4
+0 4 0 0 0 4 0 0 2 0 0 4 0 0 0 0 2 0 0 0
+0 0 0 2 16 256 16 0 0 0 0 0 2 0 0 0 0 512 512 512
+0 0 0 0 4 2 0 0 0 4 2 0 0 0 512 4 4 0 128 4
+128 0 4 2 0 0 4 64 0 0 128 2 4 0 0 0 0 2 0 4
+128 0 0 8 64 1024 0 8 4 0 0 0 0 0 0 0 0 16 0 0
+1024 0 0 0 0 4 0 0 4 0 0 2 4 0 0 0 4 0 0 0
+0 0 0 0 4 2 0 0 0 2 2 2 8 2 1024 4 0 64 0 8
+0 0 0 0 8 0 0 256 0 4 64 32 0 16 0 128 0 0 0 0
+0 2 0 4 0 2 0 0 256 0 16 2 0 2 0 0 0 0 0 4
+2 0 0 2 0 0 512 1024 0 2 2 0 0 32 1024 0 4 0 0 0
+0 0 0 0 0 0 0 0 4 0 0 0 0 16 0 256 128 0 4 0
+20 up
+0 0 0 2 0 0 0 0 512 0 0 0 0 0 512 32 4 0 0 0
+128 0 2 0 0 0 0 0 0 512 0 256 0 2 0 0 0 0 4 0
+1024 64 16 0 0 0 0 0 0 0 0 0 64 0 0 0 0 0 2 0
+0 0 16 16 0 1024 0 0 4 1024 0 2 0 16 256 0 0 0 0 0
+0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 256 0
+0 2 0 0 4 0 0 0 0 0 0 0 4 0 0 0 64 4 0 64
+4 0 0 4 512 0 0 16 0 0 2 2 0 2 2 0 64 0 0 0
+2 1024 0 0 64 4 0 256 0 2 512 2 4 4 8 0 0 0 0 0
+0 0 0 0 0 0 4 0 0 0 0 1024 4 0 4 0 0 0 0 0
+2 1024 0 0 0 0 0 0 8 2 4 0 0 0 0 0 2 256 0 0
+0 256 0 0 0 2 128 0 128 0 32 0 1024 128 0 2 512 0 0 0
+16 4 0 0 2 0 0 0 1024 0 8 0 4 0 0 4 0 4 0 0
+0 4 0 0 4 0 2 2 0 16 0 0 256 0 2 0 256 0 0 128
+0 4 0 16 0 0 0 0 0 0 0 0 128 512 0 0 0 0 0 512
+0 2 0 0 0 0 1024 0 0 0 256 0 64 0 0 0 0 0 8 0
+512 0 0 0 2 0 64 0 2 16 0 0 0 0 0 0 0 0 0 0
+0 64 0 0 256 0 0 1024 128 0 0 2 0 0 0 2 0 0 16 0
+2 2 512 0 0 0 0 0 0 256 0 2 32 2 0 0 256 0 128 4
+1024 0 64 0 0 0 0 0 2 0 256 0 0 0 0 0 0 0 0 0
+4 128 0 2 0 0 0 0 0 0 0 256 0 0 0 128 2 4 64 0
+20 left
+0 0 0 128 0 0 0 2 0 0 0 0 32 0 2 4 2 8 128 0
+0 0 0 0 0 4 0 0 0 0 0 0 0 0 1024 0 0 0 0 0
+2 512 2 0 0 0 0 4 0 0 4 0 0 0 0 0 0 0 4 0
+0 0 0 2 1024 64 2 0 0 0 512 0 4 2 4 0 0 0 0 0
+0 0 0 0 0 512 0 512 1024 0 0 0 64 0 0 0 0 2 0 0
+256 0 0 64 4 0 0 0 0 0 0 512 4 0 0 0 0 0 0 0
+0 0 64 0 1024 32 0 4 0 0 0 0 0 0 16 0 0 128 0 0
+0 0 256 2 4 256 0 0 0 0 128 256 2 2 0 4 0 0 0 32
+0 2 0 0 0 4 32 0 0 64 4 0 0 0 0 0 0 0 0 0
+0 8 4 0 0 4 0 0 4 2 0 64 64 0 32 0 0 0 0 16
+0 0 0 0 0 0 0 0 0 2 0 0 0 0 128 0 0 4 0 1024
+4 8 0 0 0 64 64 0 32 0 0 512 16 512 0 16 32 0 0 128
+0 0 0 32 1024 0 0 2 4 128 0 0 0 0 0 0 128 128 8 0
+0 4 64 0 0 0 0 0 0 2 0 0 0 8 0 0 0 0 0 0
+2 0 0 0 0 0 32 0 0 0 4 0 4 0 4 512 0 2 0 0
+0 0 32 0 0 0 2 0 4 8 0 0 0 2 0 0 0 0 128 64
+0 0 1024 0 0 0 0 0 512 0 0 0 0 512 0 0 0 4 4 0
+0 0 0 4 0 0 4 4 128 0 0 0 0 0 2 2 0 128 0 0
+0 0 8 4 2 0 0 0 512 0 32 0 0 0 2 0 0 0 0 0
+16 0 0 0 0 4 0 1024 0 4 0 0 0 0 16 0 0 0 4 0
+20 down
+0 0 0 0 0 0 0 0 0 0 8 4 2 0 4 32 2 0 2 8
+0 0 4 0 256 0 64 0 16 16 4 0 0 0 256 256 0 0 256 0
+32 0 4 0 256 2 16 0 0 0 0 0 0 256 0 0 2 0 0 16
+0 0 256 0 0 0 8 0 0 0 0 32 0 0 0 2 128 0 0 0
+0 2 0 64 0 0 256 0 0 2 0 0 0 32 2 0 2 0 0 2
+16 512 0 4 0 512 0 1024 256 0 256 1024 256 1024 256 16 0 2 0 0
+256 32 0 0 0 0 0 0 0 1024 2 0 0 4 256 512 0 0 0 0
+0 0 0 0 0 0 4 2 0 0 4 4 0 0 0 256 2 0 0 0
+0 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0 2 0 0 0
+256 256 0 4 0 2 0 8 0 2 0 0 0 512 0 0 0 0 0 128
+0 4 0 4 0 0 0 0 0 0 0 2 0 0 0 0 64 0 0 64
+0 0 0 0 2 128 128 0 4 0 128 0 4 1024 0 0 8 0 0 0
+0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 2 4 4
+4 512 0 0 0 256 0 0 0 4 8 0 0 0 0 0 0 2 0 2
+32 2 4 0 0 0 0 0 2 0 0 512 0 0 0 0 0 2 0 0
+0 0 0 0 0 0 0 64 0 0 0 0 0 2 2 2 2 0 256 32
+0 2 8 4 1024 0 4 0 0 2 2 0 256 0 0 0 0 0 0 4
+128 64 0 0 64 0 0 0 8 4 1024 0 0 0 4 0 2 0 0 64
+1024 4 0 0 2 2 0 0 0 2 0 0 0 0 0 0 0 32 64 0
+0 4 0 0 0 0 0 2 0 0 0 0 0 0 512 0 256 0 0 16
+20 left
+0 4 0 0 4 2 0 0 0 0 0 4 0 0 0 32 0 0 0 0
+0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
+4 16 1024 0 0 0 0 2 0 4 0 0 0 0 4 0 0 0 0 0
+0 512 1024 0 0 0 256 0 0 0 0 0 0 0 0 0 512 512 0 0
+16 0 0 0 0 0 16 0 0 128 0 0 0 0 0 0 128 64 0 0
+16 0 0 0 0 0 0 0 0 0 4 0 2 512 0 0 32 0 8 0
+0 0 2 0 512 0 0 512 256 32 0 8 0 0 0 1024 0 0 256 0
+0 0 0 16 0 8 0 128 2 0 0 0 0 0 0 0 0 0 128 0
+0 0 0 4 0 0 128 8 0 0 0 64 0 0 0 0 4 16 512 0
+0 0 0 0 0 2 2 2 2 512 0 0 2 32 0 0 0 0 4 16
+0 0 2 0 4 0 0 1024 0 0 0 1024 2 16 0 32 0 0 0 2
+0 0 1024 0 0 0 64 0 0 2 0 0 2 0 0 0 0 0 8 0
+0 4 0 0 32 512 64 256 0 4 0 0 0 0 0 0 0 128 0 8
+0 0 256 0 0 64 0 0 0 128 0 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 2 128 0 0 0 0 0 0 0 0 0
+0 2 256 4 0 0 4 0 256 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 256 0 0 0 0 0 16 0 0 0 0 8 0
+0 1024 0 4 2 0 0 0 0 0 4 0 0 0 0 0 0 4 1024 0
+256 2 0 128 0 0 0 0 4 0 0 0 64 0 0 0 0 0 0 128
+8 2 2 0 0 2 2 8 0 0 0 0 0 0 4 0 0 0 0 0
+20 left
+0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 4 0 0
+0 2 0 512 0 0 16 0 0 0 0 0 4 0 0 0 0 64 4 0
+0 2 0 0 0 0 0 0 4 256 0 32 0 0 0 4 0 8 0 0
+0 0 0 0 0 64 0 0 0 4 32 0 0 1024 16 4 0 4 0 0
+512 0 0 0 0 4 0 0 0 2 2 0 1024 0 0 0 0 0 0 0
+0 0 0 512 0 0 0 64 0 256 0 2 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 2 0 0 0 0 256 0 0 2 0 0 0 32 32
+0 0 0 0 32 2 32 4 0 0 0 32 0 0 0 4 0 1024 0 128
+256 1024 16 8 0 2 4 2 16 0 0 32 0 0 4 0 2 0 2 0
+128 0 256 4 0 0 0 4 0 4 2 0 0 0 0 0 4 0 4 0
+0 0 0 4 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0
+0 0 4 0 0 0 0 2 16 0 0 0 0 0 1024 0 0 256 16 0
+0 512 0 0 0 0 0 0 0 4 0 0 2 4 0 1024 4 8 512 0
+2 64 0 2 4 2 0 2 4 0 4 0 0 0 0 2 4 0 4 32
+0 256 0 1024 2 0 0 128 0 512 32 0 0 8 0 0 64 4 128 0
+0 0 0 32 0 0 4 0 8 0 4 0 0 0 0 0 0 0 0 0
+0 0 8 128 0 0 0 8 0 0 2 0 0 2 0 0 4 16 0 0
+0 0 0 0 0 0 32 0 512 8 0 0 0 0 512 0 2 0 512 16
+0 512 0 0 0 0 4 32 0 2 256 1024 64 0 0 64 4 256 4 4
+32 0 0 4 0 0 1024 0 0 0 0 0 4 0 128 64 0 4 0 8
+20 right
+4 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0 0 0 2 2
+0 0 0 0 0 4 0 4 0 0 0 64 0 0 0 0 0 0 256 0
+0 0 0 0 0 256 8 0 8 2 2 0 0 0 0 0 32 2 0 0
+0 4 0 0 8 8 32 0 32 0 1024 4 256 0 0 64 0 2 4 0
+0 32 0 0 0 0 0 16 0 8 0 0 2 0 4 512 0 0 128 0
+0 0 0 0 4 0 0 0 2 0 0 0 64 2 0 0 0 0 0 0
+0 0 0 0 0 4 0 0 0 32 0 0 0 4 4 2 16 0 4 0
+32 16 8 128 0 0 0 0 0 0 32 2 0 2 0 0 0 0 2 0
+0 2 2 0 0 0 0 0 0 0 0 0 0 2 1024 0 64 16 32 0
+4 0 0 1024 512 0 0 0 0 0 1024 0 0 2 0 64 0 2 1024 128
+0 4 0 0 0 0 32 64 0 512 0 0 2 2 0 0 512 0 0 0
+0 0 0 0 16 0 0 16 4 0 4 4 4 0 2 0 0 0 0 8
+0 8 4 0 0 0 4 0 4 0 0 0 0 0 0 0 2 0 2 0
+0 0 0 0 2 4 4 2 0 0 2 0 2 0 0 0 0 0 0 0
+0 0 256 256 512 0 2 0 0 4 0 32 0 2 0 0 0 4 0 0
+16 8 64 64 8 1024 0 0 0 4 0 0 0 0 0 0 0 0 4 0
+0 512 0 2 0 512 0 0 2 0 0 0 0 8 0 0 0 0 0 0
+0 4 0 0 0 0 4 0 0 0 2 0 0 0 0 0 0 32 512 0
+0 0 0 0 0 4 0 0 4 0 0 2 0 0 0 0 4 2 0 0
+0 0 0 0 0 0 0 0 0 0 32 128 512 4 0 0 32 4 2 0
+20 left
+0 0 2 0 512 0 0 0 0 2 0 4 16 0 0 256 2 0 0 0
+0 0 2 0 0 0 4 2 0 16 0 0 8 0 0 128 0 0 16 0
+0 0 0 0 0 0 0 0 64 0 2 0 2 0 0 0 0 0 0 0
+0 0 256 4 0 0 0 0 64 0 256 256 0 0 0 0 32 0 16 0
+0 16 0 0 0 0 32 0 0 512 0 2 0 0 32 0 0 0 512 0
+0 0 0 0 512 0 0 4 0 0 128 0 0 0 512 32 0 8 0 0
+4 4 0 0 0 4 2 2 0 2 0 128 128 4 64 0 2 2 0 0
+0 0 0 0 0 16 2 2 0 0 2 0 0 0 0 512 4 0 0 0
+0 0 0 0 0 0 0 0 0 4 0 0 0 0 4 0 0 0 0 0
+256 0 4 0 0 2 0 0 4 4 0 0 0 0 32 0 0 0 256 0
+512 0 0 0 0 0 4 256 512 32 1024 0 0 32 0 16 2 0 8 0
+4 0 0 0 0 0 4 4 2 0 4 512 0 4 2 0 0 0 2 0
+0 4 0 0 16 0 0 64 0 0 0 0 0 0 2 0 0 0 256 32
+0 0 0 0 0 0 0 0 0 0 0 2 0 32 0 0 2 0 16 0
+4 0 0 0 0 0 0 0 4 0 4 2 2 2 0 0 2 0 0 1024
+4 0 4 0 4 4 32 0 0 0 128 0 0 32 0 0 0 0 128 16
+4 4 0 0 0 0 4 0 64 256 0 64 0 0 0 4 0 0 0 256
+16 0 0 0 4 32 0 0 1024 8 4 64 0 0 0 64 4 0 2 0
+0 0 16 0 0 0 0 0 0 0 0 256 0 2 4 0 0 0 0 0
+0 0 16 0 0 0 0 2 0 0 0 32 0 0 2 0 0 0 0 0
+20 up
+0 0 0 0 0 64 0 4 0 2 0 16 8 0 4 32 0 0 0 4
+128 0 16 0 0 0 0 0 0 2 0 0 128 0 4 0 0 0 0 4
+128 0 0 512 0 0 0 64 0 0 4 0 4 0 16 128 0 0 0 2
+2 0 0 16 0 0 0 0 0 0 0 0 32 0 4 0 0 0 0 2
+4 0 0 0 0 0 0 4 0 2 2 0 0 0 0 0 16 128 8 0
+4 0 0 512 0 0 0 0 2 0 1024 2 0 0 4 0 0 512 0 0
+0 0 0 0 0 0 0 4 0 512 4 0 0 0 0 0 0 0 4 0
+0 0 0 4 0 16 4 0 4 0 0 0 0 8 1024 512 128 0 0 0
+64 8 1024 0 0 0 0 0 0 0 0 0 16 0 4 4 0 512 0 0
+32 0 0 1024 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0
+64 0 0 0 0 0 0 0 0 0 1024 0 0 0 0 0 0 0 64 0
+0 2 0 0 512 0 0 2 64 2 0 0 0 16 8 0 512 0 4 0
+1024 0 0 0 256 0 4 0 512 0 0 0 0 0 0 0 2 0 0 0
+4 4 0 4 0 0 2 2 4 0 0 4 0 0 0 0 0 0 4 16
+0 128 0 0 0 4 2 32 0 0 0 0 0 4 0 0 0 32 0 4
+0 0 0 0 2 4 0 128 0 0 0 0 0 0 0 2 0 2 0 512
+256 8 4 0 4 64 0 2 0 0 0 0 2 0 4 4 4 0 0 0
+0 0 2 0 0 0 0 64 32 32 0 0 4 0 4 0 0 0 512 0
+0 4 4 0 0 0 0 0 0 4 64 4 0 4 0 0 0 0 0 0
+4 0 4 0 0 0 0 0 1024 64 8 0 128 0 16 4 4 0 0 4
+20 right
+0 2 0 2 2 0 2 0 0 4 0 0 0 0 0 2 64 0 0 0
+4 0 0 0 0 4 0 0 4 0 0 4 2 0 0 0 16 16 0 0
+4 0 2 0 0 4 0 16 0 2 0 0 8 0 0 0 0 0 256 2
+4 4 0 0 0 0 128 512 0 8 0 0 0 4 0 16 0 4 2 2
+0 4 0 128 128 0 0 0 4 0 0 0 0 128 0 0 2 0 0 0
+0 0 0 8 0 0 0 32 0 0 0 0 0 128 4 0 0 0 4 0
+4 0 0 0 64 0 0 0 0 0 0 0 1024 4 0 0 0 0 0 0
+2 0 0 0 512 0 0 16 8 0 0 0 0 0 0 0 0 0 0 0
+0 0 1024 0 0 0 0 0 0 0 0 2 0 512 4 0 0 0 64 0
+16 0 0 0 32 2 0 4 0 0 16 128 0 0 8 0 512 4 0 256
+2 64 2 0 8 0 0 4 0 0 0 2 4 0 0 0 512 0 0 32
+0 0 64 0 0 32 256 64 0 0 2 0 0 0 0 4 512 0 0 32
+0 128 8 0 2 0 0 0 512 0 128 0 4 1024 0 0 4 0 2 0
+0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 2 0 0 256 2
+2 0 4 0 64 0 0 0 0 512 2 0 0 128 0 0 0 0 0 4
+0 0 2 64 0 0 4 1024 0 0 0 0 0 0 16 2 64 2 512 0
+2 64 0 0 32 0 2 0 0 0 0 0 0 0 0 0 0 0 256 256
+0 512 2 128 2 0 0 0 1024 0 0 0 0 0 0 0 0 0 0 4
+0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0
+0 0 0 16 2 0 0 0 0 32 1024 0 1024 0 16 0 0 0 4 0
+20 left
+0 0 2 512 0 2 0 4 0 2 0 2 0 0 0 0 0 0 0 2
+0 0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2
+0 0 0 0 0 4 0 0 0 0 4 0 0 0 0 4 0 4 0 0
+0 0 0 0 2 0 0 0 2 0 2 0 4 2 0 0 0 0 0 4
+0 0 0 0 0 0 0 2 0 0 0 0 0 4 0 2 0 0 0 2
+4 0 0 0 0 4 4 0 0 0 0 0 2 2 0 2 0 2 4 0
+0 0 0 256 0 0 0 2 4 0 0 4 4 0 0 2 0 0 2 0
+0 0 0 0 2 0 0 0 0 0 2 0 0 0 2 0 0 0 2 512
+0 0 0 1024 4 4 0 0 0 2 0 0 0 0 1024 2 0 32 0 0
+0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 128 0 2 0 2
+512 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 2 0 4
+4 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
+4 0 0 2 0 1024 512 0 2 0 2 0 2 0 0 0 0 2 0 0
+2 0 2 32 0 512 0 2 4 64 0 4 0 2 0 0 0 0 0 0
+0 0 0 4 0 0 0 64 0 0 0 0 16 0 0 4 0 0 0 0
+0 0 4 0 0 0 4 0 0 0 0 4 0 0 4 0 0 0 0 0
+0 2 0 4 0 0 0 0 0 4 0 0 0 0 0 0 8 0 0 0
+2 4 256 0 0 0 0 0 16 0 0 0 8 16 32 0 0 2 0 0
+4 0 0 2 2 0 4 16 0 0 0 0 0 0 0 16 0 0 0 0
+0 32 2 2 2 0 0 0 0 0 4 0 0 4 0 0 128 0 2 0
+20 right
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0
+4 4 8 0 2 4 0 0 0 64 0 4 0 2 0 0 0 2 4 0
+2 256 2 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 4 0
+0 0 2 128 0 0 4 0 4 0 0 0 0 4 0 0 0 0 0 2
+0 0 0 0 0 0 4 2 4 0 0 2 4 0 0 2 2 32 0 0
+0 512 2 0 4 0 0 4 0 0 4 0 0 0 16 16 0 0 0 0
+0 0 4 0 0 0 0 0 0 4 2 8 0 4 2 0 0 4 0 0
+32 2 0 0 0 0 2 2 0 0 0 0 0 16 0 0 0 0 2 2
+0 0 0 0 0 2 0 4 0 256 0 0 0 0 0 0 0 0 2 0
+0 0 0 2 4 0 1024 0 0 0 0 0 2 0 0 0 0 0 0 0
+0 0 0 2 0 0 0 0 2 4 256 0 0 0 0 2 4 0 0 2
+0 0 0 0 2 2 0 0 4 0 0 0 2 0 2 0 0 0 0 0
+0 2 256 2 2 4 0 0 0 2 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 4 0 0 0 4 0 0 2 0 0 2 4 0 0 4
+0 0 0 512 0 0 4 0 0 4 0 0 0 0 0 128 2 4 0 0
+0 0 0 0 2 4 0 0 0 1024 0 0 0 0 0 16 0 0 0 0
+2 0 2 32 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 2
+0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 4 0 0 4
+0 2 0 0 4 0 0 0 4 0 2 4 0 0 0 0 2 0 0 0
+0 0 4 0 0 0 0 0 0 0 2 0 0 0 0 0 64 0 0 0
+20 down
+2 0 0 1024 4 0 0 0 0 0 0 0 4 4 0 0 4 0 2 0
+0 0 4 256 0 0 0 0 0 2 1024 0 4 2 4 4 4 0 0 0
+0 0 0 0 4 0 2 2 0 0 0 4 0 0 0 0 0 0 0 0
+4 0 2 2 0 4 0 4 2 0 4 0 0 0 0 0 0 0 0 0
+0 0 0 0 2 0 0 4 0 0 2 0 0 0 2 0 0 0 0 0
+0 0 2 0 2 2 0 0 4 0 2 2 0 0 0 0 0 128 0 4
+0 4 4 0 0 0 0 0 4 0 0 2 8 0 4 0 4 0 0 0
+0 2 0 2 0 0 0 0 0 0 512 1024 512 0 0 4 0 0 2 0
+4 0 0 0 0 0 0 4 32 0 0 0 0 0 0 0 0 4 0 2
+0 0 0 0 0 2 4 0 2 0 4 4 0 0 0 0 4 64 0 8
+0 4 0 0 2 0 512 4 0 0 0 0 4 0 2 0 2 0 0 0
+4 0 0 0 1024 0 0 0 4 0 0 4 2 0 1024 0 0 0 32 2
+0 0 0 0 256 2 4 0 2 0 4 0 2 4 0 0 0 4 0 0
+0 0 0 2 0 0 16 0 0 0 0 0 64 0 2 0 128 4 0 0
+4 0 2 0 4 0 4 512 0 4 0 0 0 0 0 0 0 0 0 0
+0 0 0 512 0 2 0 0 4 2 4 0 4 2 0 8 0 4 0 4
+0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2
+0 0 0 0 16 0 0 0 0 4 0 0 4 0 4 0 0 0 0 0
+2 0 0 2 2 0 0 4 0 0 0 0 0 2 0 0 0 0 0 0
+128 0 0 0 8 2 0 0 4 0 0 0 0 0 0 0 0 0 0 0
+20 up
+0 4 0 0 0 0 0 0 4 0 8 0 0 0 2 1024 0 0 0 0
+0 0 0 4 0 0 0 2 0 0 512 4 0 0 0 0 0 0 0 0
+2 0 2 0 0 0 64 0 0 0 0 0 0 0 0 0 2 0 4 2
+0 0 4 2 512 4 0 0 0 2 16 0 0 0 0 0 0 0 4 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 2 4 0 0 0 0 0 2 0 0 0 0 4 0 0 0 0 4 0
+0 64 0 0 4 0 4 0 0 0 2 0 0 0 4 2 0 2 4 0
+0 2 4 0 4 0 0 0 2 0 0 4 2 0 2 0 4 4 0 0
+64 2 0 0 4 0 0 0 4 0 0 0 64 0 0 0 0 2 0 0
+2 0 0 0 0 0 0 0 0 0 0 0 0 64 0 4 0 0 1024 0
+4 8 0 0 0 32 4 0 0 0 0 0 0 0 1024 0 0 0 0 0
+4 0 0 2 0 4 0 0 0 0 2 0 0 128 0 0 2 0 0 4
+0 0 0 0 2 0 0 0 0 0 0 0 0 128 0 0 0 4 0 2
+4 4 0 0 4 0 0 0 0 0 4 4 4 128 0 0 2 2 2 512
+0 2 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 4 0 0 0 16 0 0 0 4 0
+2 2 2 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 256 0 0
+0 0 0 2 0 2 4 2 0 0 4 0 0 0 2 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 2 0 0 2 0 0 2 0 0 0 2 4 0 0 0 2 0 0
+20 up
+0 4 0 0 0 1024 4 0 2 0 0 0 8 0 0 0 0 0 2 0
+0 4 0 0 2 4 0 0 0 2 0 0 0 16 0 0 0 0 0 0
+4 0 0 4 0 0 4 0 4 0 0 0 0 16 4 0 0 2 0 0
+0 8 2 64 4 4 2 2 0 0 0 128 0 0 0 512 8 0 2 0
+512 0 0 0 0 1024 0 0 0 0 0 0 0 0 0 4 0 0 0 4
+4 0 0 0 0 0 0 0 0 0 0 0 2 0 0 256 2 0 0 0
+0 0 0 2 0 0 0 0 0 0 0 4 4 0 0 0 0 0 0 0
+0 4 0 0 0 4 0 2 2 0 0 0 0 0 0 2 0 0 0 0
+0 4 4 0 2 2 0 4 0 4 4 0 0 0 4 0 0 0 2 4
+0 0 0 0 2 0 0 0 0 2 0 0 2 0 0 0 4 0 0 0
+0 0 0 2 4 4 4 8 0 4 0 0 0 0 0 0 4 0 0 0
+0 0 32 2 0 2 0 0 0 4 4 0 0 0 0 0 0 0 0 0
+0 2 0 0 128 0 4 0 2 0 0 0 0 0 0 0 0 2 4 4
+2 0 2 4 0 4 4 0 0 4 0 0 2 0 0 0 0 2 0 0
+0 0 0 0 0 0 4 8 4 0 2 0 0 0 0 0 4 0 0 0
+4 0 0 0 2 2 0 1024 2 0 0 0 0 0 0 0 0 0 0 64
+0 0 2 0 0 0 0 0 4 0 0 0 0 0 4 2 2 0 0 0
+4 0 0 32 4 512 4 0 0 0 0 0 0 1024 0 0 4 2 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 2 0 2 2
+0 0 0 64 0 0 0 0 0 0 4 0 0 0 0 2 2 2 4 0
+20 up
+0 0 0 0 0 0 2 0 0 0 2 0 0 2 16 4 0 4 0 0
+0 0 2 0 64 0 0 4 0 2 2 0 0 4 4 0 4 4 0 0
+4 0 0 2 0 0 2 0 0 0 0 4 2 4 0 2 0 0 0 0
+0 4 0 0 32 0 0 0 4 0 0 4 0 2 0 2 0 0 0 0
+0 4 0 0 0 4 0 0 0 0 0 0 0 0 4 0 4 8 2 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 0 2 0 2
+0 0 0 0 0 0 0 2 2 0 0 4 0 4 0 0 4 0 0 0
+0 0 8 2 2 0 8 0 0 1024 2 0 256 2 4 0 0 0 0 0
+2 0 2 0 4 128 2 0 0 0 0 4 4 2 0 4 0 2 0 0
+16 1024 0 0 2 0 0 4 0 0 4 2 4 0 32 0 0 0 0 0
+4 0 4 0 0 4 0 0 0 0 2 0 0 0 0 0 0 0 2 0
+0 2 0 0 0 0 0 0 0 2 2 2 0 8 0 0 1024 4 4 0
+0 0 0 4 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0
+0 2 0 0 0 0 0 0 0 1024 0 4 0 0 0 0 0 0 0 0
+0 4 0 2 0 2 0 2 0 0 4 0 0 0 4 4 2 0 0 2
+0 0 0 0 4 0 0 0 4 0 32 0 0 4 0 0 0 0 2 0
+0 2 4 2 0 32 0 64 0 0 0 4 0 0 2 256 0 2 0 4
+0 0 0 0 512 4 0 2 0 4 16 2 0 0 0 0 0 0 0 0
+0 0 0 2 1024 0 2 0 0 0 2 2 4 4 0 4 0 0 0 0
+0 0 0 4 0 256 0 2 2 0 2 0 1024 0 0 0 0 0 0 0
+20 right
+2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 2 0 2 0
+0 0 0 0 2 0 16 0 0 0 2 0 0 0 0 0 0 0 2 0
+0 0 4 0 0 0 2 0 0 0 0 0 0 32 2 4 0 0 0 0
+0 0 0 2 0 4 4 2 0 0 0 0 0 0 0 0 0 0 4 0
+2 0 0 0 0 0 0 4 0 0 0 0 0 4 0 2 0 0 256 0
+0 0 2 0 0 0 0 0 2 0 0 4 0 2 0 0 0 0 4 2
+0 4 0 0 0 0 4 0 2 2 0 0 0 0 0 0 0 0 0 0
+0 0 4 0 4 0 0 2 0 0 128 0 0 0 4 0 0 2 0 0
+0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 4 0 0 128
+2 0 0 0 0 0 2 64 4 0 0 0 0 4 0 8 128 0 0 4
+0 0 0 0 4 4 0 4 0 4 0 0 0 0 0 0 0 0 4 0
+2 0 0 0 0 0 4 0 4 0 0 0 0 256 0 0 0 4 0 0
+0 0 0 0 0 4 0 0 0 2 0 2 0 0 2 0 0 0 0 0
+4 0 0 512 4 0 0 0 0 0 4 0 0 0 0 0 0 0 2 2
+0 2 2 2 0 0 2 0 4 0 0 0 4 4 4 0 0 8 4 2
+16 0 8 4 2 0 0 64 0 0 0 0 0 0 4 2 2 0 0 4
+0 2 0 2 0 8 0 0 0 0 0 0 2 2 2 0 0 0 2 0
+0 0 0 2 2 0 0 0 0 0 4 4 2 32 0 64 0 0 32 0
+0 0 4 0 2 4 0 0 0 0 0 0 0 2 2 0 2 2 0 0
+16 64 0 0 0 0 2 0 0 256 4 0 0 0 0 0 0 0 0 0
+20 down
+0 0 256 0 0 8 0 0 0 0 2 16 0 0 0 0 0 4 0 0
+0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 2 0 0 0
+0 0 0 0 0 16 4 0 128 0 512 0 0 0 0 16 0 0 0 2
+0 0 4 0 256 0 0 0 0 0 0 4 0 0 0 0 0 2 0 0
+2 2 0 0 0 0 0 0 0 0 4 0 0 1024 0 4 0 0 0 0
+0 32 0 2 0 0 0 0 2 0 0 4 0 2 0 0 2 0 0 0
+2 0 0 0 0 0 0 0 4 0 0 0 0 2 0 0 0 0 0 0
+0 0 0 0 4 0 4 0 0 0 2 4 0 0 0 0 0 128 0 0
+0 0 0 4 0 0 0 0 0 0 0 0 2 16 0 0 2 0 0 2
+4 2 2 0 4 0 0 2 0 2 2 0 32 0 0 0 0 128 0 0
+2 0 0 256 0 2 0 0 2 4 0 0 0 0 2 4 0 0 0 0
+0 2 0 0 0 4 0 0 0 0 0 0 0 0 0 2 2 0 0 4
+0 0 0 2 0 4 0 0 0 0 2 0 0 0 0 0 0 2 0 2
+0 0 0 0 0 4 0 0 128 0 2 2 0 2 2 0 0 0 0 2
+512 4 4 2 0 0 0 0 0 0 4 2 0 64 4 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0 0
+2 0 0 0 0 0 512 4 0 2 0 4 0 0 0 0 0 0 128 0
+0 0 0 0 4 0 4 0 0 128 0 0 0 1024 8 0 0 0 0 0
+0 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0 0 0
+1024 4 0 0 0 0 0 0 2 4 0 0 2 0 2 0 0 0 0 0
+20 up
+0 4 0 0 4 0 0 0 0 0 0 0 0 256 0 0 2 2 0 0
+0 4 0 0 0 0 0 2 0 128 0 0 0 0 0 0 0 0 0 0
+0 4 0 4 4 0 0 0 0 4 2 32 4 0 2 2 4 4 0 0
+0 0 0 0 0 0 0 0 2 16 0 0 8 0 128 1024 0 0 0 0
+0 0 0 0 4 2 0 0 0 0 0 4 4 4 2 0 0 2 0 0
+0 0 0 2 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 0
+0 2 0 0 2 0 0 0 0 0 4 0 0 256 0 0 0 0 0 0
+0 4 0 0 0 0 2 0 0 4 0 0 4 0 0 2 4 0 0 0
+0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 2 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 0 0 0 4
+0 0 0 0 0 0 2 0 0 0 0 0 0 4 0 0 0 0 0 0
+4 0 0 0 0 0 0 0 0 2 0 4 0 0 0 2 0 0 0 4
+0 0 0 0 2 0 0 0 0 0 0 0 4 0 2 2 2 0 0 2
+0 4 0 0 0 0 4 0 512 0 0 0 2 0 0 0 2 0 2 0
+4 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 2 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 0 0 0 2 0 2 0 0 0 2 0 0 0 0 0 0 0 8 0
+0 0 0 0 2 0 16 0 0 0 0 0 0 0 2 0 0 0 16 4
+0 0 0 0 0 256 0 4 0 8 4 4 0 4 0 0 4 0 0 0
+0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0
+20 up
+4 0 4 0 2 0 4 0 0 0 2 0 4 0 0 0 0 4 0 0
+0 0 0 0 0 64 0 1024 0 0 256 0 0 0 1024 0 0 0 0 0
+0 4 4 0 0 0 0 0 2 0 0 0 0 0 0 0 0 4 0 2
+0 0 0 0 0 0 8 0 0 0 0 0 2 4 0 0 0 0 0 0
+2 0 0 0 0 0 4 2 0 2 16 0 4 0 0 0 0 0 2 32
+0 0 4 0 2 4 0 0 0 0 0 0 0 0 0 0 4 256 0 0
+0 0 0 0 0 4 4 0 0 0 0 4 0 0 0 0 0 0 0 0
+0 0 0 2 0 2 2 4 0 4 2 0 0 0 0 0 0 2 0 0
+4 0 4 0 0 0 0 0 0 0 0 32 0 0 0 0 4 0 0 2
+0 0 0 0 0 0 4 2 0 64 0 0 0 2 0 0 0 0 0 0
+0 0 4 0 0 0 4 1024 0 0 0 0 0 0 0 32 0 0 4 0
+0 0 2 1024 0 4 0 0 0 2 2 0 0 0 0 2 0 2 0 0
+0 4 0 0 4 0 0 0 0 0 0 0 0 2 4 0 0 0 0 8
+0 0 4 0 0 0 0 8 0 0 8 0 4 4 0 4 256 0 0 0
+0 2 0 2 0 2 0 0 2 4 0 0 0 0 0 0 0 0 0 0
+0 2 0 1024 0 0 4 4 128 0 4 0 0 0 0 2 0 0 0 4
+0 0 0 0 1024 2 0 0 0 0 2 2 4 0 0 0 0 0 0 0
+0 0 0 2 0 4 64 2 4 0 0 2 0 0 0 4 32 0 0 0
+0 0 0 0 2 0 4 0 2 0 0 0 4 2 0 0 0 4 0 2
+0 0 4 4 0 0 4 0 0 0 0 0 0 0 0 0 0 4 0 0
+20 up
+4 0 0 0 0 0 0 0 0 16 1024 0 2 4 0 0 2 0 0 4
+0 4 0 0 0 2 0 0 0 0 4 32 0 0 0 0 0 0 2 0
+0 0 128 0 0 512 0 0 0 0 2 0 0 0 0 0 4 0 0 32
+4 0 256 0 0 2 0 0 2 0 256 0 2 0 4 2 0 0 2 0
+0 0 0 0 0 0 0 4 0 0 0 2 0 0 4 0 0 0 0 4
+0 0 2 0 4 0 0 2 0 0 0 0 0 0 0 0 0 0 4 0
+0 0 0 0 0 0 2 64 0 0 0 0 0 0 2 0 0 512 0 4
+0 0 0 0 0 0 4 2 0 32 0 0 0 4 0 2 0 4 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
+512 4 0 0 0 0 4 0 0 0 0 0 2 0 0 4 0 0 2 4
+2 0 0 0 0 0 2 4 0 512 0 0 0 4 0 0 0 0 0 0
+0 4 128 0 0 0 0 4 0 0 4 0 4 0 0 0 0 2 0 128
+0 0 0 0 0 0 0 32 0 0 0 0 8 4 2 0 4 2 2 4
+0 0 0 0 0 0 16 16 0 0 0 0 0 4 0 2 0 2 32 0
+0 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0 0 0 0
+0 2 0 0 0 0 0 8 0 32 0 1024 0 0 0 0 0 0 2 256
+4 8 0 0 0 0 0 0 0 0 512 2 0 0 0 0 0 4 4 0
+0 0 0 4 0 0 2 0 0 0 0 4 4 4 0 0 0 0 0 2
+0 0 4 0 0 0 0 0 0 0 0 0 0 2 0 0 2 0 0 4
+4 4 0 0 0 4 4 0 0 0 0 4 0 512 0 0 512 0 0 4
+20 right
+2 0 0 0 0 2 0 0 0 0 0 0 0 2 0 2 0 4 0 0
+2 0 0 0 0 4 2 0 8 0 0 0 2 4 2 0 2 0 0 4
+0 0 0 0 0 0 0 4 0 0 0 4 4 4 0 0 2 0 2 0
+0 2 0 0 0 64 0 0 0 4 0 0 0 4 0 0 0 0 0 0
+0 4 16 1024 0 0 0 2 16 0 0 0 0 2 2 0 0 2 2 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0
+0 0 2 512 0 4 0 0 4 0 0 0 0 0 0 0 2 0 2 0
+0 0 4 2 4 4 0 2 0 64 2 2 0 0 0 0 0 4 4 0
+32 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0
+0 2 0 0 0 0 0 0 4 256 0 0 2 4 0 2 0 4 0 2
+4 0 4 0 2 0 0 0 0 0 0 0 2 0 512 0 0 4 0 256
+0 0 0 16 0 0 0 2 0 16 0 2 4 0 0 0 8 0 128 0
+2 0 512 0 0 0 0 0 4 0 0 0 0 0 0 2 4 0 2 2
+0 0 0 2 0 0 4 0 0 4 0 0 0 0 0 0 0 32 0 2
+0 0 2 0 512 4 128 0 4 0 4 4 0 0 0 4 0 0 0 0
+0 0 0 16 0 4 0 4 0 0 2 0 0 0 0 0 0 16 0 0
+0 0 2 4 0 0 0 4 4 0 0 0 4 0 0 0 0 0 0 0
+2 2 0 0 0 4 32 0 4 0 32 0 2 0 0 0 16 2 0 0
+0 0 0 0 0 0 0 0 4 2 4 0 0 0 0 0 0 0 0 0
+4 2 0 4 0 4 0 0 2 128 0 0 2 0 0 0 0 0 0 0
+20 down
+0 4 0 4 0 0 0 2 2 0 0 0 0 0 2 0 0 0 0 0
+0 4 256 0 0 0 0 0 0 0 0 0 4 2 0 0 0 0 0 0
+0 0 0 0 2 4 2 4 1024 0 0 0 0 0 0 4 0 0 0 0
+0 0 4 0 0 0 0 0 0 0 4 512 0 0 128 0 4 4 0 0
+0 0 0 0 0 4 2 4 0 0 0 0 0 0 0 2 4 0 0 0
+0 0 0 4 2 0 0 2 0 2 0 0 2 0 0 0 0 0 0 2
+0 2 2 8 2 4 0 0 0 0 0 0 0 4 0 0 0 0 0 0
+0 0 2 0 0 4 0 0 4 0 4 0 0 4 0 0 0 0 4 0
+4 0 0 0 0 4 0 0 2 0 0 1024 0 0 0 0 0 0 0 0
+2 4 0 0 0 0 0 8 0 0 0 0 4 2 0 0 0 0 0 0
+0 0 0 0 0 2 0 4 4 0 0 0 0 0 4 128 0 0 4 4
+0 8 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2
+0 4 0 0 512 0 4 0 0 0 2 2 4 0 0 0 4 0 0 0
+0 0 4 0 4 2 0 0 0 2 0 0 0 0 0 0 2 0 0 0
+0 2 0 0 256 16 2 0 0 0 2 0 0 0 0 0 2 4 0 2
+4 0 0 4 0 0 512 1024 4 0 0 0 0 2 0 0 0 0 16 2
+2 0 4 0 0 2 0 0 0 0 4 0 0 0 0 0 2 0 0 0
+2 0 0 256 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2
+0 256 0 0 4 0 4 0 0 0 4 0 0 4 0 0 0 2 0 0
+0 0 0 4 0 0 0 0 0 1024 0 4 0 0 0 0 64 0 2 0
+20 right
+0 2 0 0 4 0 0 0 0 0 0 0 4 0 0 0 0 4 0 2
+0 0 0 0 2 2 0 2 0 4 0 0 4 2 0 0 0 0 0 0
+0 2 2 0 128 0 4 0 0 0 0 0 2 0 0 0 2 0 2 0
+0 0 0 2 0 0 0 0 4 0 0 0 0 0 0 8 0 4 0 512
+0 0 0 512 0 0 0 0 0 0 4 0 0 0 2 4 2 4 0 0
+0 0 0 2 0 0 0 0 4 0 0 0 0 2 4 0 0 0 0 0
+4 0 0 2 2 0 0 1024 0 0 2 0 0 64 0 0 0 0 4 0
+1024 0 0 2 0 2 0 0 0 256 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 4 2 0 4 0 0 4 0 0 0 0 0 2
+0 0 0 0 0 2 2 0 0 0 0 2 0 2 0 0 4 4 0 0
+0 128 0 0 4 0 0 4 16 2 0 0 0 0 2 0 4 2 0 4
+0 0 0 0 4 0 2 2 0 2 4 0 0 0 0 2 0 0 128 0
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0
+0 0 0 0 0 0 0 0 0 4 0 2 0 0 0 0 0 2 0 0
+4 0 0 0 2 0 256 0 0 0 0 0 0 0 0 8 0 4 4 2
+0 0 0 0 0 0 0 4 0 0 0 0 2 0 0 32 0 0 0 0
+0 0 0 0 0 0 0 0 2 0 0 4 0 16 0 0 0 0 0 0
+4 0 0 0 0 0 4 0 2 0 32 0 2 4 0 0 8 2 2 0
+0 2 0 4 0 0 0 0 0 2 4 0 0 0 0 0 0 0 2 2
+2 0 0 4 0 0 0 0 2 4 0 0 0 2 0 0 32 0 1024 0
+20 right
+1024 0 0 4 64 2 0 0 0 4 0 0 0 0 2 4 2 4 2 4
+0 0 0 4 0 4 0 0 0 0 0 0 0 0 2 0 0 0 0 0
+2 0 0 4 0 0 0 2 0 4 0 0 4 0 0 4 0 0 4 2
+256 0 0 0 0 0 0 0 0 2 2 0 0 0 64 0 0 0 4 0
+0 256 2 0 0 0 2 0 4 0 2 4 8 4 2 0 0 0 0 0
+4 0 0 512 4 1024 0 8 16 0 0 0 2 0 0 4 0 0 0 0
+0 2 0 0 0 0 0 2 0 4 0 0 4 0 2 0 4 0 0 0
+0 0 4 2 0 0 0 2 0 0 0 0 0 0 0 0 1024 0 0 256
+0 0 0 0 0 0 0 4 0 0 4 0 8 2 4 2 0 4 0 0
+0 0 4 0 0 4 0 0 0 0 0 1024 0 2 4 0 0 4 0 2
+0 4 2 0 0 4 2 0 0 0 0 4 0 4 4 0 0 0 0 8
+0 0 16 0 0 0 0 0 2 0 0 0 0 512 0 4 0 0 0 0
+0 0 2 2 2 0 0 0 128 0 0 2 0 4 0 0 4 2 0 0
+0 2 0 0 0 0 0 0 0 8 0 0 0 4 0 0 0 0 4 0
+0 0 0 0 0 4 16 0 0 0 0 4 0 0 0 0 0 256 0 4
+2 0 2 0 4 2 0 0 0 0 0 0 4 0 0 2 0 0 2 0
+0 0 2 2 0 0 0 0 0 0 2 4 0 4 0 0 0 0 0 0
+128 0 0 0 0 0 0 256 0 0 0 0 32 0 0 4 128 0 0 0
+0 0 0 0 8 0 0 0 0 0 0 4 0 4 0 2 0 0 0 4
+0 0 0 64 2 0 0 0 0 0 0 2 4 2 0 0 0 0 0 0
+20 down
+0 0 0 0 0 0 0 0 4 0 0 0 0 0 256 0 0 0 512 0
+0 64 4 0 2 2 0 0 0 2 0 0 0 0 2 2 64 0 0 0
+4 0 0 0 0 16 0 0 1024 0 0 2 0 4 0 0 0 0 0 0
+2 0 2 0 1024 0 0 4 0 2 0 0 4 0 0 0 0 4 2 0
+0 2 256 0 2 2 4 0 0 0 0 0 0 0 0 0 4 0 1024 2
+4 4 4 0 0 0 0 0 0 0 0 0 2 4 0 64 4 0 0 0
+0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 4 2 0
+0 0 0 4 0 4 0 0 0 0 0 0 4 0 0 0 2 0 0 0
+0 4 0 2 0 0 128 0 0 0 0 0 0 0 2 0 0 0 0 0
+0 4 2 0 4 0 0 0 0 0 0 2 0 0 0 0 0 0 0 4
+4 0 4 0 4 4 2 0 0 0 0 0 0 0 0 0 0 2 128 0
+0 0 0 0 4 4 0 512 0 64 0 0 0 0 0 4 2 0 0 128
+0 2 0 0 2 8 0 0 0 2 0 4 0 0 4 0 0 0 2 0
+256 0 4 4 0 0 0 0 1024 0 0 0 0 2 4 2 4 0 0 0
+0 0 0 0 0 0 0 0 2 0 4 0 0 0 0 0 32 0 0 0
+0 2 0 0 0 0 0 0 4 4 256 0 0 0 0 0 0 0 0 0
+0 4 4 4 0 2 4 0 0 128 0 0 0 0 4 0 0 0 0 0
+4 0 0 4 0 0 4 0 0 0 0 8 0 0 2 0 64 0 0 0
+2 0 0 0 4 0 4 0 4 2 0 0 2 0 0 0 0 2 4 0
+0 0 0 0 4 0 2 2 0 0 0 0 2 0 2 0 0 512 0 0
+20 up
+2 0 4 0 0 0 16 0 0 0 0 0 2 2 2 0 0 2 64 0
+0 2 0 4 0 0 2 2 4 0 0 4 4 0 0 0 4 2 0 0
+0 0 0 0 0 0 0 2 0 0 4 2 0 4 0 0 4 0 0 0
+0 4 0 0 0 2 0 4 0 4 32 0 0 0 0 0 2 0 0 0
+4 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 4
+0 0 0 2 0 0 4 0 0 0 0 0 0 0 0 0 0 0 2 0
+0 0 0 0 2 0 0 0 2 0 0 0 2 0 0 0 0 0 2 0
+2 0 0 4 0 2 0 0 4 0 0 4 0 0 4 0 0 0 0 0
+0 0 4 0 2 0 0 0 0 2 0 0 0 0 4 0 0 0 0 2
+0 0 0 4 0 0 0 0 0 0 0 2 4 64 0 2 0 16 0 0
+0 0 0 0 2 0 0 0 4 0 0 0 0 0 0 0 2 0 2 2
+0 2 0 4 0 0 0 1024 256 0 0 0 0 0 2 2 0 0 0 0
+4 0 0 0 0 0 4 2 4 0 0 0 0 0 64 0 2 0 0 0
+0 0 32 0 0 2 0 128 32 0 0 0 0 0 0 0 2 0 0 0
+0 4 0 1024 4 0 4 4 4 0 0 4 2 0 0 0 0 0 0 0
+0 8 4 0 128 0 0 0 0 4 0 0 0 0 0 0 4 0 2 0
+0 0 4 0 16 0 2 0 0 0 2 0 0 0 16 0 0 4 2 2
+4 0 0 0 4 0 0 128 0 0 0 2 0 2 0 0 0 2 0 0
+0 0 0 0 0 0 0 0 2 128 0 0 0 16 2 0 0 0 0 0
+0 0 4 0 0 0 0 4 4 2 0 0 0 0 0 8 0 0 0 0
+20 right
+4 0 0 256 64 2 0 4 0 0 0 2 256 0 4 0 0 0 0 0
+4 4 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 2 0 0
+2 512 0 0 0 0 2 2 0 0 4 0 0 4 2 0 0 0 0 0
+16 0 0 0 0 0 1024 4 2 0 0 2 0 0 0 2 4 0 2 0
+0 0 0 0 2 0 0 4 0 0 0 0 0 4 0 0 0 0 0 0
+64 0 0 2 0 0 0 0 4 2 16 0 2 0 0 4 0 4 2 0
+0 0 0 0 0 4 0 0 0 0 0 0 0 0 4 0 0 4 0 0
+4 4 0 4 2 0 2 0 4 2 0 0 0 0 2 2 0 0 2 0
+0 512 0 512 0 0 0 0 2 0 0 0 0 0 0 0 4 0 4 4
+0 0 2 4 4 4 0 0 0 64 4 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 16 512 0 0 2 2 0 0 0 2 4 0 0
+2 2 4 4 4 4 0 0 0 0 2 0 0 0 4 0 2 0 2 0
+0 0 0 0 0 512 0 0 0 0 4 0 0 0 4 0 2 0 0 64
+4 0 0 0 0 0 2 0 0 0 0 0 2 4 0 0 0 0 0 0
+0 0 0 0 2 0 0 0 0 0 4 4 0 0 0 0 0 0 0 0
+512 0 0 0 0 2 4 0 0 0 0 0 2 0 0 0 4 2 0 0
+2 0 4 0 0 128 0 0 0 0 0 0 0 0 0 4 4 2 0 0
+0 0 0 0 0 0 1024 1024 0 0 0 0 4 0 0 0 0 2 2 0
+4 0 0 4 0 0 0 0 4 0 0 0 0 0 4 0 0 0 0 0
+2 4 0 0 0 2 0 0 4 0 0 0 0 0 0 1024 0 0 0 0
+20 up
+0 0 0 0 0 2 0 0 32 4 2 0 0 0 0 0 0 2 0 0
+0 2 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 2 2 0 0 0 0 2 2 0 0 4 0 4 0
+4 8 4 0 4 0 0 4 4 2 0 0 0 0 2 4 0 0 0 0
+0 0 64 2 0 0 4 0 2 0 0 0 32 0 2 0 0 4 0 0
+0 0 0 0 0 2 0 0 0 0 0 0 0 0 4 2 0 0 0 0
+0 0 0 0 4 0 2 0 4 0 0 0 16 0 0 0 0 0 0 0
+0 0 0 0 0 128 0 0 2 4 0 0 0 4 0 0 0 0 0 0
+0 0 0 0 0 0 4 0 0 0 0 2 2 0 0 0 32 4 0 0
+0 4 0 0 0 4 2 0 0 0 256 0 0 0 64 0 0 0 0 2
+0 0 2 2 2 0 0 2 0 0 2 4 0 4 0 2 2 2 32 0
+0 0 0 0 2 2 2 0 0 0 0 16 128 0 4 4 0 0 2 2
+2 0 2 0 0 2 0 0 0 512 0 16 0 0 0 0 0 2 0 2
+0 0 64 0 0 0 2 0 0 0 2 0 2 0 4 0 512 0 0 16
+4 4 0 0 8 8 4 0 0 2 0 0 0 0 0 2 4 0 0 0
+512 2 0 0 0 0 0 0 0 0 0 0 0 16 4 0 4 4 0 0
+32 0 0 2 0 2 0 2 4 4 0 0 0 0 0 0 0 2 4 0
+0 0 4 0 0 0 0 4 0 8 0 0 0 4 0 0 0 0 0 2
+0 4 4 0 2 1024 8 0 0 0 4 0 0 0 0 0 0 2 4 0
+0 0 1024 0 0 0 0 2 0 4 2 0 0 0 8 0 4 0 0 0
+20 right
+0 0 4 2 0 0 0 0 8 2 0 0 0 0 0 0 0 0 0 0
+4 0 0 2 0 0 0 2 64 2 0 0 0 0 4 0 2 2 0 4
+0 0 0 2 0 0 2 2 0 4 0 2 4 0 0 4 128 0 0 0
+0 0 0 0 0 1024 2 0 0 0 0 2 0 0 0 2 0 0 0 0
+0 0 0 128 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 4
+0 0 0 0 2 0 0 8 0 4 0 0 0 0 0 4 0 0 4 0
+0 4 0 0 0 0 4 4 512 0 0 0 4 4 0 0 8 0 4 0
+32 0 0 0 0 4 0 0 0 0 2 0 0 0 0 0 0 0 0 4
+0 2 4 0 0 4 0 0 0 0 0 0 0 0 0 0 2 0 0 0
+0 0 2 0 0 4 128 32 4 0 0 0 2 2 0 2 0 0 2 0
+0 0 8 0 0 2 0 0 0 0 0 0 0 0 0 4 0 0 4 1024
+0 0 0 4 0 0 16 0 0 0 0 0 0 0 2 0 0 0 0 4
+2 4 64 0 0 0 0 0 0 0 0 0 0 2 0 2 0 2 2 0
+0 0 0 4 0 128 0 0 0 0 0 0 0 0 2 0 4 0 0 0
+4 1024 4 0 0 2 0 0 0 2 0 0 0 0 4 0 0 0 0 0
+0 0 0 0 0 0 0 512 0 2 4 0 0 8 0 0 4 0 0 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 0 4 4 4 0
+0 4 2 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 4 0 0 0 2 0 0 0 0 0 0 0 0 0 2 4 32
+0 4 2 0 0 0 128 0 0 0 4 0 0 2 16 512 0 0 4 0
+20 down
+4 0 8 0 0 0 0 0 0 0 0 0 0 0 0 2 4 0 0 2
+0 0 4 0 4 0 0 4 0 128 0 0 32 4 4 0 0 0 4 0
+0 0 0 0 0 0 0 0 2 2 2 4 4 4 0 0 0 2 0 0
+0 4 0 0 0 0 0 4 0 0 0 2 0 0 128 0 0 0 0 0
+4 0 2 2 0 0 0 0 2 0 4 0 0 8 0 0 4 0 0 0
+0 0 0 0 0 0 2 0 0 2 16 2 0 0 128 0 256 0 0 0
+0 0 4 4 0 16 4 4 0 0 0 2 0 0 0 4 0 0 0 0
+2 0 0 0 0 0 2 0 16 2 0 4 2 0 2 0 0 0 0 0
+2 1024 4 0 0 4 2 0 4 1024 0 4 0 32 0 0 2 0 0 512
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0
+1024 2 0 4 0 0 0 0 0 0 0 0 0 0 4 2 0 2 2 0
+0 0 0 2 2 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0
+0 2 0 0 4 4 0 0 0 0 0 0 0 64 0 8 0 64 0 0
+32 0 0 4 0 2 0 0 4 0 0 0 0 2 4 0 0 0 0 0
+0 0 0 4 0 0 2 0 2 64 4 4 2 2 2 0 0 0 0 0
+0 0 4 4 0 0 0 0 0 0 0 0 0 2 2 0 0 0 4 0
+0 0 0 0 2 0 2 2 0 0 0 4 0 0 256 0 0 0 0 0
+0 0 512 0 0 2 0 0 2 0 0 0 0 0 0 0 0 0 2 0
+0 0 0 16 4 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 1024 0 2 2 0 0 0 0 0 2 0 0 2 0 0 0 0 4
+20 up
+0 0 0 0 0 4 64 0 0 2 0 0 2 4 0 0 4 0 0 0
+0 0 0 0 0 4 256 0 64 0 0 2 4 0 4 0 0 4 0 0
+0 64 0 2 0 0 2 0 0 0 0 0 4 0 128 0 4 0 512 4
+2 0 64 0 0 0 0 0 4 0 0 0 0 2 2 2 4 0 0 0
+0 0 0 4 0 0 4 0 0 2 2 0 0 4 0 0 0 0 4 128
+2 0 2 0 0 0 0 0 0 0 0 0 32 0 2 0 0 0 2 2
+0 2 512 0 0 4 2 2 0 0 0 0 0 2 0 0 0 2 2 0
+4 0 0 0 0 0 0 0 0 0 0 0 2 0 0 4 2 0 128 0
+0 2 0 0 0 0 0 4 0 512 0 0 0 2 0 2 0 2 0 0
+16 2 128 0 2 0 0 0 0 4 4 4 0 0 0 0 0 4 0 0
+4 0 1024 0 0 4 8 0 4 0 4 4 0 0 0 0 0 0 0 2
+512 0 4 2 0 0 4 0 4 0 4 0 0 0 0 0 0 0 1024 0
+0 0 0 2 4 2 0 0 8 4 0 4 4 0 4 0 0 0 2 16
+4 0 2 0 0 0 2 4 0 4 0 0 2 64 2 0 4 512 0 0
+0 0 0 16 0 0 0 0 0 0 0 0 0 0 4 0 128 0 0 2
+2 0 512 2 0 0 2 128 0 0 0 2 4 0 0 512 0 0 0 0
+0 0 0 512 0 2 2 0 2 0 0 0 0 0 0 2 0 0 4 0
+0 2 0 0 0 0 2 0 0 0 0 0 4 0 0 32 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 4 0 2 0 0
+16 0 0 4 128 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0
+20 up
+0 32 16 0 4 512 4 128 256 0 4 16 256 16 0 32 16 64 2 512
+32 16 64 8 4 32 4 4 1024 512 64 128 2 32 0 4 1024 0 0 4
+0 4 8 64 4 4 4 1024 0 0 4 1024 0 1024 256 0 8 1024 32 4
+512 1024 4 2 4 8 1024 16 512 2 0 0 4 2 0 32 32 2 1024 4
+4 2 4 2 4 128 64 16 4 0 0 32 4 4 512 2 512 4 4 0
+2 4 4 2 0 256 4 256 0 2 4 2 1024 8 32 4 32 4 128 512
+256 0 2 0 0 2 2 0 16 4 32 512 2 2 2 0 128 2 32 4
+0 512 2 16 2 16 128 8 512 8 0 0 1024 0 16 4 32 2 0 4
+16 8 2 2 0 1024 32 512 2 4 2 4 4 2 512 4 2 16 4 2
+4 2 4 0 256 0 2 16 32 0 0 4 0 2 2 0 0 4 32 4
+256 256 0 0 8 2 2 512 16 2 0 32 2 4 2 0 4 512 1024 256
+256 256 0 8 2 4 0 512 2 512 4 4 1024 512 0 256 4 32 8 1024
+256 8 0 0 0 16 4 256 4 2 0 4 8 256 0 4 2 2 16 2
+128 2 0 8 2 0 2 2 4 512 0 1024 4 4 4 2 0 64 128 4
+1024 16 8 256 0 512 4 4 256 16 4 512 8 2 2 2 8 32 32 4
+0 0 0 0 16 4 16 4 128 0 4 0 0 16 8 1024 512 2 1024 128
+4 0 4 2 16 16 16 0 0 64 2 64 4 2 4 64 2 128 8 0
+0 512 256 4 4 4 32 2 4 8 4 4 0 0 128 0 512 2 128 64
+0 0 0 16 2 512 0 0 2 2 1024 4 16 0 4 0 0 32 0 2
+0 64 2 0 32 2 4 2 0 0 256 0 64 1024 0 1024 4 0 32 4
+20 right
+1024 0 1024 4 16 2 2 4 2 0 8 256 32 4 4 8 2 32 0 2
+0 512 4 512 0 4 0 2 8 2 64 2 2 0 256 4 64 256 256 512
+2 16 0 256 4 1024 0 4 4 0 0 0 0 0 512 256 512 32 16 0
+256 1024 256 8 16 4 2 64 4 2 256 0 4 4 1024 0 256 32 0 8
+4 4 256 0 8 128 0 256 2 512 32 0 2 4 512 128 64 16 512 128
+2 4 1024 2 2 128 4 1024 4 1024 4 128 0 0 128 0 128 0 16 2
+1024 1024 512 4 4 0 0 256 0 512 4 256 4 4 0 256 0 1024 2 4
+4 2 2 4 4 2 16 4 2 0 2 0 2 256 0 4 0 4 64 128
+64 4 4 0 4 16 512 8 0 4 512 128 8 2 0 1024 0 0 512 128
+4 128 1024 256 1024 4 4 4 512 1024 4 0 0 0 4 8 512 64 2 256
+4 1024 4 2 64 32 4 0 2 4 2 0 0 2 0 64 32 4 4 16
+4 0 2 1024 2 16 128 512 4 4 2 0 64 4 512 4 2 8 4 2
+0 0 512 32 4 2 32 4 512 2 0 8 0 4 2 0 2 2 32 2
+0 4 256 0 256 0 4 1024 2 2 2 0 2 256 4 4 4 512 2 32
+4 4 64 256 4 4 0 128 32 2 4 2 0 2 4 256 0 4 2 4
+0 2 4 1024 32 4 4 64 0 0 256 2 16 8 0 0 32 0 4 2
+4 16 8 2 2 512 0 0 64 512 4 256 4 0 512 4 4 0 2 1024
+0 8 4 0 4 128 16 4 512 4 1024 4 0 256 8 0 0 2 0 4
+0 512 4 0 16 2 2 0 256 0 2 0 4 64 16 2 4 512 4 2
+64 4 0 256 8 32 128 64 16 64 256 2 4 64 4 16 128 2 64 128
+20 right
+8 0 16 4 64 8 2 16 8 8 0 4 4 2 2 0 0 4 2 4
+32 0 16 2 1024 32 0 0 0 128 4 4 512 8 8 128 4 4 0 2
+2 0 32 64 256 0 128 0 4 8 512 4 2 4 0 2 4 0 512 0
+128 4 4 256 2 4 4 0 0 0 4 4 512 16 4 16 4 0 2 4
+4 8 4 4 32 512 0 2 4 64 4 32 2 256 512 4 0 128 8 0
+2 4 4 0 4 16 4 0 0 256 4 4 8 64 0 1024 0 2 64 2
+4 8 8 16 64 0 4 0 1024 2 2 256 0 0 256 4 2 2 4 4
+4 0 4 512 0 32 1024 0 4 32 1024 2 4 4 2 2 2 0 256 128
+0 32 4 1024 2 0 0 4 0 2 0 4 4 64 256 8 4 2 2 2
+0 2 4 0 256 1024 128 2 4 1024 64 0 2 4 0 256 8 0 4 128
+2 8 2 0 64 4 4 2 128 0 2 1024 4 2 32 4 0 1024 512 0
+4 2 0 2 16 4 0 1024 256 2 512 0 0 0 0 2 4 256 8 256
+256 2 512 0 16 16 0 512 0 0 0 2 64 4 2 4 256 1024 2 32
+0 2 16 2 4 256 4 2 16 0 0 4 2 0 64 512 4 1024 0 32
+128 512 8 0 256 0 4 512 4 2 0 1024 64 4 32 128 8 4 4 2
+0 512 2 4 1024 0 2 1024 2 4 0 1024 0 32 2 2 1024 128 1024 4
+4 2 32 4 0 4 0 128 4 4 512 2 0 1024 2 0 32 4 2 16
+4 0 2 2 0 2 64 0 2 512 4 64 4 4 0 0 1024 16 0 2
+4 0 0 0 2 16 4 2 2 4 4 4 256 1024 1024 4 1024 2 2 256
+1024 0 16 2 0 8 4 0 256 2 32 4 8 4 64 0 2 64 4 256
+20 right
+1024 2 1024 4 0 0 4 4 32 0 2 0 4 0 4 8 256 0 2 128
+4 256 256 512 0 0 4 512 32 4 0 1024 4 16 2 0 0 2 4 64
+0 2 256 64 512 32 2 2 4 2 8 0 0 32 64 32 0 4 64 256
+8 4 4 4 8 64 4 256 32 128 512 4 4 0 32 32 0 4 4 4
+0 2 0 2 8 256 2 0 4 2 128 2 2 128 2 8 2 2 4 8
+1024 2 2 2 4 4 4 512 0 1024 4 4 0 4 2 2 4 4 0 128
+32 4 256 0 2 2 0 2 0 512 1024 0 2 0 0 2 4 512 4 2
+2 256 32 0 16 16 4 2 2 2 512 32 4 0 2 0 128 0 32 1024
+8 4 4 0 2 64 128 0 32 0 0 64 0 2 128 2 32 512 4 256
+4 2 2 2 16 0 0 0 2 2 32 2 2 32 0 0 2 2 1024 1024
+4 0 16 2 2 1024 1024 4 2 4 128 0 4 4 4 512 256 256 0 0
+2 4 0 0 512 4 2 0 64 2 2 0 2 2 8 32 32 4 128 0
+256 0 4 2 1024 0 0 32 128 2 1024 4 0 256 2 4 64 0 0 64
+0 4 0 2 4 2 4 128 0 0 2 2 4 32 16 2 4 0 0 0
+16 8 1024 512 4 8 16 0 4 0 32 32 2 0 8 2 2 512 32 8
+16 4 512 2 128 2 0 2 512 8 0 32 2 2 512 32 512 2 4 4
+128 2 2 0 8 512 2 512 4 8 64 4 2 32 2 2 4 4 256 256
+256 32 2 256 64 4 1024 4 1024 0 4 2 32 2 1024 2 8 4 0 4
+1024 32 4 256 0 0 0 0 2 0 2 16 16 4 256 256 4 32 512 128
+32 2 1024 128 0 0 512 8 32 4 0 2 4 4 64 0 0 128 128 8
+20 down
+2 64 2 2 32 64 0 4 2 4 0 64 2 0 0 8 2 0 0 4
+4 4 0 256 0 16 32 512 1024 4 32 2 0 16 32 0 0 4 2 2
+0 0 1024 2 2 16 32 4 2 128 0 2 0 2 64 8 512 2 128 0
+128 0 16 2 4 0 4 4 64 128 0 2 4 2 0 8 2 2 2 64
+4 4 256 64 4 2 2 2 8 2 0 0 0 0 0 1024 0 1024 4 8
+4 4 8 512 64 256 2 4 2 4 2 16 4 16 4 512 16 0 2 0
+1024 0 4 4 0 64 2 64 32 4 0 8 4 0 4 0 2 32 0 4
+256 1024 32 4 0 4 4 2 512 4 128 16 2 0 8 0 128 2 0 0
+2 2 0 4 2 4 0 0 32 256 64 16 2 64 32 4 2 8 16 4
+0 0 2 0 8 4 512 0 4 4 1024 8 2 8 2 0 8 2 32 16
+2 8 8 32 32 0 4 32 2 128 4 4 4 512 8 64 0 0 64 0
+8 512 512 2 256 2 0 32 4 64 0 8 0 0 64 16 0 0 1024 64
+2 2 0 0 16 2 4 512 1024 32 32 4 64 2 128 16 512 64 128 0
+0 4 16 2 8 0 0 0 4 2 0 4 2 4 0 2 256 0 512 4
+4 4 4 0 0 4 2 4 4 64 512 2 1024 8 2 4 4 16 2 64
+512 4 4 2 4 1024 512 0 2 0 4 4 2 0 8 8 2 2 1024 16
+0 1024 4 512 2 32 64 16 4 0 0 0 2 128 2 512 64 1024 2 2
+2 2 256 4 128 8 128 4 8 0 16 0 2 4 256 128 8 0 32 128
+16 64 64 2 256 2 0 256 512 2 0 0 2 8 4 16 1024 2 0 4
+4 16 128 128 128 256 4 2 4 64 4 16 512 4 0 0 2 4 4 0
+20 left
+4 0 0 512 512 4 2 2 32 0 0 512 0 4 8 32 2 0 1024 4
+4 16 256 0 0 4 0 512 0 256 4 32 256 2 0 8 0 256 4 64
+2 0 2 0 32 1024 64 16 128 4 4 2 2 32 16 2 1024 2 4 0
+64 8 0 4 128 0 2 2 8 4 16 0 512 2 2 32 512 128 2 512
+4 0 2 0 2 2 0 2 64 16 64 0 0 32 128 2 1024 4 2 32
+4 2 0 1024 0 2 4 2 8 64 0 32 0 128 2 4 0 0 4 2
+256 4 2 0 256 2 2 4 2 2 8 4 0 16 0 0 0 32 8 2
+1024 256 0 2 2 0 2 0 512 8 0 8 0 256 4 4 64 2 8 0
+64 8 32 64 4 2 256 2 8 0 512 16 32 2 4 2 2 256 0 2
+256 0 0 2 256 0 0 1024 16 4 128 64 64 16 256 2 2 256 0 2
+4 256 8 128 256 2 2 2 128 128 8 2 2 4 0 4 0 2 1024 256
+4 2 64 0 2 512 0 4 0 16 4 1024 0 2 0 4 4 4 2 1024
+128 256 256 32 4 8 128 4 256 2 128 4 64 2 128 128 0 128 0 0
+64 2 128 2 16 0 4 16 4 4 0 16 2 2 1024 128 256 32 4 8
+4 256 0 0 64 64 128 8 256 256 2 4 2 256 0 4 8 128 2 16
+1024 4 2 0 8 16 2 0 0 64 2 128 4 0 512 32 512 2 1024 0
+4 16 8 8 4 4 0 0 4 8 1024 256 2 4 512 128 32 8 4 4
+8 32 4 512 2 4 2 0 0 128 512 0 2 0 256 8 512 0 2 4
+128 4 32 128 0 1024 4 128 2 2 16 4 0 128 2 2 4 4 4 4
+0 0 0 2 16 0 1024 16 4 2 1024 4 2 2 0 4 4 0 2 2
+20 right
+512 0 8 64 2 2 0 256 4 4 64 64 128 4 0 256 2 512 2 16
+0 8 16 1024 2 4 2 0 1024 0 4 32 512 2 0 1024 512 4 2 0
+0 4 2 64 0 256 4 8 2 2 0 2 2 1024 2 4 2 2 2 128
+0 4 1024 16 4 256 0 0 128 64 4 256 16 0 4 2 8 4 0 2
+2 16 4 512 2 256 4 16 4 4 1024 2 0 0 4 4 64 2 1024 4
+64 1024 0 0 2 4 4 64 32 4 2 4 0 16 0 4 0 2 128 4
+0 0 2 16 0 256 4 8 4 64 0 0 2 32 4 1024 128 256 8 2
+2 8 256 2 128 2 4 4 4 128 1024 4 0 2 0 2 4 16 2 2
+32 128 512 2 8 2 4 1024 16 0 4 64 4 4 512 0 128 0 4 0
+4 8 2 2 64 16 4 2 2 1024 8 0 0 4 4 0 64 0 4 32
+2 2 2 8 512 512 16 0 2 4 2 2 16 0 512 4 32 2 32 4
+0 4 0 4 0 32 4 128 4 4 0 16 2 128 4 512 0 64 0 64
+128 64 8 4 4 2 512 128 1024 4 4 0 2 512 4 512 2 0 0 2
+0 0 16 1024 32 8 0 0 4 2 8 4 1024 256 0 0 0 2 2 4
+32 8 0 16 2 4 16 4 0 0 2 4 4 128 2 4 512 512 512 64
+4 1024 0 256 2 128 128 2 0 4 16 2 4 4 16 0 4 2 256 2
+4 2 0 16 4 0 4 1024 2 32 4 16 0 4 0 4 1024 32 2 4
+64 4 0 256 1024 512 2 4 1024 4 0 2 32 8 256 128 4 0 32 64
+512 2 64 0 128 512 4 0 8 256 0 16 2 0 64 512 4 0 0 4
+0 2 128 4 0 2 2 4 64 4 8 4 2 32 2 32 4 0 2 512
+20 left
+0 128 4 4 2 256 4 2 0 0 64 16 512 4 4 32 4 512 4 2
+2 8 0 0 4 128 2 2 8 256 0 1024 4 0 32 128 128 4 128 256
+0 8 8 0 0 4 16 2 64 8 4 4 0 4 128 8 256 4 4 128
+128 0 16 2 8 2 0 4 0 0 2 32 512 0 2 4 2 128 2 0
+2 2 256 256 4 4 2 2 2 2 2 2 128 2 32 2 0 0 4 0
+64 1024 0 16 0 16 4 0 2 4 0 2 1024 0 4 0 2 16 32 32
+2 16 8 0 0 2 64 0 2 2 2 0 0 512 2 8 1024 16 2 4
+2 8 4 4 2 0 64 32 4 8 256 128 128 0 0 2 0 4 512 0
+64 0 0 4 1024 2 0 128 512 64 2 128 0 256 0 0 1024 512 64 2
+4 2 8 256 512 16 2 0 1024 2 0 4 0 4 2 0 4 16 0 4
+2 0 0 16 2 8 4 64 2 4 4 64 64 256 256 1024 4 256 512 256
+2 2 64 512 4 512 32 4 0 32 4 16 8 4 4 128 4 0 256 16
+2 64 0 512 32 8 0 0 2 0 128 4 2 512 2 1024 128 2 4 0
+64 4 0 0 0 4 16 64 2 0 128 2 0 0 64 8 0 0 0 4
+0 4 2 1024 256 2 0 2 0 512 16 2 2 0 8 4 128 256 512 2
+512 0 128 0 0 2 64 2 16 1024 128 2 4 4 0 64 4 32 0 8
+2 256 2 128 4 512 0 2 0 4 2 128 4 2 4 512 256 2 2 128
+2 2 8 16 2 2 0 0 4 512 0 4 16 2 0 1024 2 2 32 256
+0 128 64 0 1024 32 8 32 64 0 4 512 0 64 4 4 1024 4 2 0
+0 4 256 4 4 4 256 128 256 256 4 64 64 0 4 2 2 256 16 2
+20 down
+16 256 2 16 8 0 256 16 256 4 2 32 1024 0 0 64 4 1024 32 2
+0 256 4 4 0 0 0 1024 64 512 4 4 8 32 4 8 16 128 4 0
+2 16 16 4 64 4 256 512 0 2 8 128 4 2 1024 0 1024 64 1024 0
+128 64 0 0 128 4 8 4 32 2 1024 4 0 4 4 4 512 2 2 8
+0 2 0 0 4 1024 0 2 4 16 2 0 8 2 128 4 4 8 2 0
+128 2 64 0 32 256 4 2 128 2 1024 0 64 2 2 64 8 1024 4 16
+1024 1024 2 128 2 4 256 128 2 0 1024 512 256 8 128 0 0 4 4 1024
+2 4 2 512 8 64 256 0 2 32 16 0 4 64 32 4 4 4 512 4
+4 8 0 0 512 4 512 32 4 2 128 4 0 64 16 1024 0 0 4 4
+64 4 512 1024 8 16 2 4 4 2 4 4 1024 2 1024 1024 4 16 32 2
+0 2 0 4 256 0 2 64 32 0 4 0 0 0 2 512 64 64 2 128
+8 0 128 16 16 128 2 4 8 512 0 16 0 0 4 1024 4 256 0 4
+2 0 256 2 4 256 2 16 0 2 0 512 4 0 1024 2 16 2 16 1024
+8 4 0 2 2 256 0 0 0 8 64 128 0 2 0 8 128 8 0 2
+0 0 16 128 2 128 128 128 2 4 256 64 2 256 512 0 0 2 16 2
+1024 256 2 256 128 0 2 2 0 4 4 1024 2 2 0 512 4 4 32 16
+256 2 4 0 512 4 0 4 1024 4 8 64 4 16 2 512 4 0 2 0
+2 0 4 2 512 512 2 1024 8 128 32 2 256 0 32 4 0 16 512 2
+8 2 32 4 1024 0 16 0 32 0 16 2 2 16 512 16 32 2 4 16
+4 0 256 64 0 256 4 0 512 0 16 0 0 0 32 1024 4 0 128 4
+20 down
+128 32 256 1024 32 16 256 512 64 0 4 32 128 16 2 2 128 0 0 128
+16 1024 512 1024 4 4 2 1024 2 4 256 2 256 2 4 16 0 0 4 512
+64 0 2 4 4 8 2 32 1024 2 128 1024 4 32 0 2 512 0 2 4
+4 4 0 32 128 0 128 512 8 4 1024 4 1024 2 2 4 0 2 4 0
+2 0 512 2 256 1024 256 16 1024 2 512 4 2 0 64 4 8 0 0 0
+0 0 4 0 16 0 8 1024 0 2 0 128 4 4 64 4 2 4 2 0
+8 0 2 2 0 4 0 128 4 256 0 0 4 2 2 0 64 2 256 64
+2 4 4 16 0 32 2 4 512 64 0 4 64 0 16 4 4 128 4 2
+32 8 4 0 0 0 2 512 64 2 4 64 2 2 32 0 32 32 8 4
+4 2 4 4 256 2 512 2 512 256 4 64 32 4 2 0 4 4 4 16
+512 16 128 2 1024 0 0 256 128 0 0 2 4 0 0 8 64 256 2 4
+8 128 16 256 64 4 16 4 256 2 0 2 8 2 4 0 0 2 2 2
+0 256 0 2 0 2 4 32 2 2 4 2 2 0 256 4 16 1024 16 128
+2 1024 2 2 32 32 4 0 64 256 0 2 0 64 2 2 512 2 64 4
+1024 32 0 0 0 0 1024 2 2 4 0 128 0 4 1024 512 512 4 0 0
+0 32 4 2 0 0 32 2 256 0 0 1024 2 0 0 4 4 1024 64 256
+256 32 0 512 128 512 512 4 2 4 128 16 4 32 0 2 4 4 2 8
+8 128 2 16 0 2 64 2 0 8 256 4 128 256 1024 0 0 4 4 128
+1024 4 0 32 4 4 0 64 128 4 0 2 8 8 256 0 0 2 0 4
+512 32 0 4 4 128 2 2 32 0 2 2 256 0 256 0 256 0 128 0
+20 right
+256 2 0 2 2 0 4 64 8 8 0 4 8 4 0 0 2 2 32 0
+0 1024 128 0 0 4 4 0 16 1024 1024 4 1024 0 4 128 512 256 4 0
+0 128 0 4 2 4 2 256 4 1024 256 2 2 4 256 2 512 8 512 2
+2 32 2 2 0 4 256 2 2 0 8 0 2 64 128 8 128 4 4 0
+2 4 0 0 4 1024 16 32 0 1024 0 128 64 4 0 4 4 2 512 4
+2 512 0 2 256 4 8 0 512 4 0 32 2 0 256 8 0 0 256 0
+32 0 4 4 4 2 16 0 32 256 4 2 2 2 256 2 0 512 128 512
+4 2 4 4 4 512 0 1024 4 4 8 4 2 1024 32 2 2 0 8 0
+256 512 4 32 128 2 4 512 1024 8 512 4 256 2 1024 4 0 2 4 2
+0 4 2 0 256 4 16 0 64 8 0 0 2 512 4 8 2 2 2 4
+4 2 512 4 2 4 1024 1024 0 16 0 0 4 2 4 8 8 512 0 2
+16 2 256 2 8 4 32 32 2 16 2 32 4 128 4 32 4 4 64 32
+32 0 4 1024 4 2 1024 2 32 0 1024 512 0 32 2 0 128 4 256 4
+4 4 32 2 2 2 0 32 64 0 4 8 0 0 0 4 8 2 64 16
+4 512 4 64 2 128 32 2 0 0 2 2 32 4 256 256 2 512 4 64
+4 2 2 4 8 16 4 512 128 64 2 4 0 4 2 2 4 4 0 0
+4 4 8 1024 0 0 2 32 256 0 0 0 4 8 2 0 2 4 4 4
+128 16 4 1024 0 8 0 0 32 0 0 4 256 0 512 0 4 16 0 256
+0 4 2 512 2 0 0 32 8 8 0 4 8 0 512 128 64 4 8 16
+512 1024 32 32 16 4 0 8 64 0 2 4 4 2 512 16 2 2 8 128
+20 left
+512 0 4 2 2 1024 0 8 4 32 16 64 4 128 64 0 16 64 64 2
+32 4 2 4 2 4 2 0 4 4 4 2 4 0 8 0 16 2 256 128
+0 0 0 2 16 16 128 128 16 4 0 4 4 4 0 256 2 512 64 128
+512 4 2 128 16 4 2 4 0 2 2 128 256 0 2 0 4 2 256 64
+128 4 4 128 256 1024 1024 64 32 4 1024 4 4 1024 4 256 0 2 32 0
+256 0 2 512 4 0 1024 4 128 2 64 8 0 0 256 0 512 0 4 4
+2 0 16 4 2 0 256 2 32 16 512 0 4 2 4 32 4 8 2 0
+2 0 4 2 4 2 8 2 4 16 128 512 2 4 4 256 0 0 16 64
+4 128 256 8 1024 4 16 2 128 1024 0 2 2 2 32 4 0 4 256 2
+128 64 2 0 8 2 0 4 16 4 0 0 2 2 64 0 2 0 4 4
+2 2 4 2 4 128 0 2 4 2 4 64 1024 0 0 256 32 1024 1024 4
+1024 0 64 128 64 0 4 2 128 2 32 0 0 128 2 4 4 4 256 2
+16 4 128 32 4 0 2 4 1024 2 16 2 1024 64 512 256 2 0 2 0
+0 4 8 4 0 4 4 256 2 2 0 1024 0 2 0 1024 2 1024 0 0
+0 16 2 0 2 2 4 2 4 4 2 2 4 2 4 0 1024 128 0 512
+2 2 8 4 2 4 0 0 4 128 512 2 64 2 1024 0 0 2 4 4
+0 2 16 256 2 32 4 2 2 8 4 512 32 2 2 512 2 32 8 128
+4 512 0 2 2 32 16 4 8 0 8 32 512 2 128 4 4 2 8 2
+8 4 0 2 16 256 128 2 0 16 4 2 2 2 128 4 0 256 16 4
+0 1024 4 1024 2 4 0 128 8 2 2 4 0 2 1024 1024 2 256 16 0
+20 up
+0 8 2 4 0 2 0 0 8 2 16 4 4 2 4 2 2 128 2 1024
+4 128 2 128 0 1024 0 2 4 0 4 4 64 2 16 4 2 0 2 256
+256 2 4 2 4 2 2 2 1024 16 0 4 1024 32 4 2 128 0 0 4
+4 256 128 2 32 8 4 0 1024 16 512 4 2 4 4 4 32 16 4 512
+0 8 4 4 0 4 64 2 2 2 4 4 64 128 0 1024 128 4 2 512
+512 4 2 0 4 2 512 0 4 2 0 1024 512 2 4 4 256 0 0 0
+32 0 2 2 4 32 0 0 1024 1024 64 256 4 1024 2 0 8 4 0 1024
+4 2 2 0 8 0 2 2 32 64 16 8 1024 4 16 4 0 16 16 64
+4 8 8 4 64 2 256 2 2 4 4 2 4 16 16 2 2 0 8 128
+2 0 256 64 0 4 4 2 128 2 0 2 16 1024 4 0 64 4 128 0
+2 0 4 2 64 0 64 2 2 512 2 4 512 32 2 4 4 2 1024 4
+512 4 0 1024 16 4 4 0 1024 16 0 2 2 0 32 4 2 2 128 256
+4 32 2 0 1024 4 512 2 4 4 16 512 8 16 4 16 1024 0 32 16
+256 512 128 2 256 4 8 1024 128 16 4 256 2 256 2 8 64 4 0 256
+2 0 64 8 8 4 2 16 0 0 1024 2 512 256 4 16 32 32 16 4
+32 4 0 64 8 512 1024 4 2 4 2 4 2 2 8 512 8 256 4 2
+64 64 4 4 0 4 16 4 2 16 0 256 128 2 4 128 0 4 0 0
+2 8 2 256 0 32 4 2 2 4 4 64 2 512 0 2 16 512 2 512
+1024 2 0 32 32 64 16 2 2 0 4 0 1024 2 2 32 512 32 256 0
+4 64 4 0 0 0 4 0 4 0 8 0 2 4 16 4 32 4 32 0
+20 left
+2 4 256 2 2 0 2 0 0 0 256 32 8 512 2 0 128 64 1024 1024
+4 2 2 2 4 4 2 4 512 0 2 16 256 4 4 2 256 64 128 32
+2 32 32 128 128 2 16 16 16 4 2 4 128 0 128 0 256 128 8 8
+0 2 4 1024 4 0 4 0 32 2 64 0 256 2 512 4 2 1024 0 32
+2 512 64 2 32 2 256 8 1024 2 2 4 2 1024 4 256 2 0 2 256
+512 2 0 8 2 256 4 2 128 32 1024 4 1024 4 8 0 128 0 8 2
+4 0 2 4 2 4 2 2 2 2 1024 8 2 256 512 0 256 32 0 2
+8 16 8 2 4 2 8 2 2 32 4 2 32 0 256 2 512 1024 4 4
+4 2 128 2 32 4 4 0 4 0 4 0 64 2 0 16 2 2 4 64
+4 0 2 16 16 512 0 2 2 8 4 2 2 2 0 128 0 2 4 4
+8 1024 0 8 16 4 2 4 4 8 0 0 16 16 0 128 2 16 4 16
+0 256 4 2 4 8 2 32 0 2 2 8 2 64 0 0 4 0 0 256
+0 4 0 2 128 0 1024 0 2 0 128 4 2 8 2 4 2 0 16 256
+0 64 512 2 0 16 64 4 1024 0 0 0 128 1024 64 0 256 4 2 64
+2 16 8 2 2 1024 0 64 32 2 4 4 2 8 4 16 8 8 4 2
+4 1024 0 2 4 512 4 1024 1024 32 2 4 0 512 2 0 32 256 1024 2
+0 4 4 2 0 16 512 64 256 0 0 0 4 0 4 0 0 32 2 4
+4 4 32 128 4 2 8 32 1024 4 2 0 16 4 8 0 64 2 0 0
+0 2 64 128 4 2 128 128 0 0 4 32 0 64 1024 4 512 1024 256 0
+256 1024 2 0 128 32 64 16 512 0 64 0 4 4 2 128 64 64 0 0
+20 left
+512 4 32 2 0 0 256 4 2 512 0 16 2 4 2 4 4 0 64 4
+2 2 4 0 2 4 0 0 4 2 4 2 8 64 512 32 16 2 256 4
+128 32 0 2 4 8 32 0 2 16 4 0 32 2 4 64 2 128 4 4
+128 0 32 4 4 2 2 2 2 4 128 8 0 2 4 128 2 2 2 4
+32 1024 4 4 0 128 2 64 1024 0 64 16 2 2 128 4 128 2 1024 4
+64 2 1024 512 2 4 1024 2 4 32 4 4 0 0 8 128 64 32 4 256
+128 32 64 0 2 2 0 0 4 64 4 512 0 4 0 4 128 0 4 256
+2 512 4 512 8 128 2 0 16 2 16 4 2 4 2 32 0 128 2 1024
+0 0 4 256 64 4 64 4 2 512 64 0 0 64 4 4 0 2 2 4
+128 0 2 0 128 8 128 128 8 2 2 32 2 0 0 256 0 4 4 4
+16 32 0 16 4 0 128 4 4 16 4 0 256 0 0 4 16 2 0 16
+1024 32 64 512 4 2 1024 2 0 2 4 2 2 0 2 8 0 0 4 512
+4 2 64 2 16 4 2 2 0 2 8 1024 4 512 0 0 2 0 64 4
+0 4 4 4 1024 2 4 16 4 2 4 512 64 4 16 0 4 2 4 8
+512 0 512 16 64 2 4 2 128 4 32 0 1024 256 2 4 256 32 2 512
+2 32 2 2 512 2 4 2 4 4 4 4 16 2 4 4 256 4 1024 0
+16 4 2 512 0 4 4 2 16 2 128 512 16 0 0 128 128 2 2 128
+4 4 16 0 2 0 32 2 512 4 64 16 2 512 512 16 4 2 16 8
+4 64 2 2 2 0 2 64 2 4 8 64 512 0 0 4 4 0 64 4
+2 0 0 4 4 0 4 4 4 0 2 4 0 2 0 4 128 128 0 2
+20 down
+1024 128 4 2 64 0 128 32 64 0 1024 64 64 0 4 1024 2 4 0 2
+2 4 4 32 64 0 16 4 0 64 0 16 0 64 0 2 4 2 4 2
+4 4 2 4 2 4 16 512 4 4 0 1024 2 2 1024 128 4 256 4 2
+128 4 4 64 512 2 4 512 0 32 2 0 0 4 64 512 0 4 4 512
+0 2 32 4 64 4 64 4 2 512 128 16 512 4 32 0 2 64 0 2
+4 4 0 4 2 2 2 16 4 2 2 0 4 128 4 0 2 4 1024 256
+0 64 2 4 32 4 0 0 0 4 512 0 16 4 2 32 4 128 16 32
+4 0 0 32 4 0 2 2 512 2 32 2 0 0 2 256 2 4 4 2
+0 0 2 512 4 128 0 8 2 4 0 8 16 8 4 4 4 64 0 4
+0 128 1024 0 4 256 32 4 64 256 0 4 2 2 2 256 4 4 2 4
+0 0 0 128 2 4 2 2 0 4 0 64 1024 2 4 4 256 4 512 2
+256 4 4 8 1024 2 8 16 2 0 0 2 256 2 0 1024 4 512 128 0
+2 32 64 2 4 0 2 8 4 0 0 1024 2 0 4 2 2 2 2 2
+64 512 4 16 2 2 64 4 1024 2 8 4 256 512 4 2 0 64 32 16
+4 32 64 0 4 2 16 2 64 256 4 0 64 2 2 2 0 0 0 1024
+1024 64 2 1024 2 32 8 0 4 4 128 0 32 128 4 64 128 4 2 32
+1024 0 4 4 2 4 2 512 4 4 4 0 0 8 16 2 0 0 0 0
+0 2 32 0 4 2 2 4 32 4 2 2 2 512 256 128 2 256 4 512
+0 0 0 2 8 512 2 0 2 2 4 128 2 4 0 4 512 0 4 2
+2 4 2 64 4 4 0 16 2 4 64 2 16 64 4 2 64 2 32 512
+20 right
+64 0 128 1024 2 2 0 1024 4 32 1024 4 0 2 4 512 256 256 0 2
+0 16 1024 0 512 2 0 2 4 2 2 256 256 2 16 0 256 32 0 4
+2 16 4 64 2 4 4 0 4 2 2 8 4 32 4 4 128 4 64 1024
+2 512 8 0 4 4 0 2 1024 1024 2 0 64 0 1024 4 0 4 2 4
+512 2 0 4 16 256 2 2 1024 0 32 2 0 64 1024 0 2 64 0 128
+0 4 0 4 4 2 256 128 4 4 0 256 32 4 0 2 4 4 8 2
+4 32 0 128 512 2 2 4 128 4 16 2 16 16 4 4 2 0 2 0
+0 2 128 2 64 4 4 64 128 2 0 512 0 2 2 256 16 512 1024 4
+0 1024 4 0 256 32 256 0 512 16 4 128 8 16 32 1024 4 2 8 0
+512 0 2 0 2 0 0 4 4 4 2 4 4 0 512 128 4 0 2 4
+0 16 4 4 0 128 2 64 2 4 2 0 1024 0 0 0 2 32 2 2
+0 0 4 16 2 2 2 1024 256 0 4 32 64 32 0 32 0 4 16 512
+4 2 4 4 0 4 4 2 0 2 8 128 128 256 0 128 2 0 128 2
+4 256 4 0 16 4 4 2 0 4 4 4 16 4 4 2 128 16 0 256
+2 2 64 2 32 64 0 0 32 2 4 16 2 256 16 8 0 0 16 0
+0 0 2 64 2 4 0 0 8 4 4 4 2 4 2 4 1024 0 1024 0
+2 0 16 2 256 4 32 4 0 32 4 2 2 4 0 32 2 2 1024 32
+128 1024 32 2 2 8 4 0 0 512 4 4 128 32 0 0 4 4 0 256
+2 512 0 2 2 2 2 64 4 2 2 32 8 64 2 2 2 0 128 4
+0 4 512 0 8 0 4 4 1024 2 1024 4 0 0 4 128 2 0 2 1024
+20 right
+2 2 128 0 2 0 512 32 0 4 64 32 64 512 64 2 4 4 512 1024
+512 8 4 2 2 4 0 0 4 32 2 4 4 0 4 0 4 32 64 512
+4 2 512 0 2 4 512 0 8 256 2 128 1024 2 2 0 4 128 128 128
+2 128 4 0 256 2 2 16 2 2 512 0 256 8 0 0 512 512 128 64
+8 32 128 128 256 256 0 64 0 2 2 0 16 512 4 0 128 0 16 512
+2 64 0 0 16 0 256 4 4 4 1024 2 8 0 2 128 0 4 16 2
+2 2 0 0 2 8 4 2 2 1024 2 2 128 4 32 4 0 1024 0 64
+4 0 0 0 8 1024 16 512 128 2 0 256 8 0 8 0 0 32 16 2
+16 4 1024 2 512 8 4 4 4 4 4 1024 0 4 4 4 16 4 2 0
+32 2 1024 0 2 8 0 4 4 64 0 4 512 4 4 2 0 1024 0 0
+2 2 64 4 4 64 4 256 0 2 1024 0 8 8 128 4 2 64 2 32
+16 0 2 0 16 0 0 4 128 0 0 4 32 64 0 2 2 0 0 0
+4 4 2 4 512 0 4 0 1024 2 2 2 8 2 8 4 0 256 1024 1024
+0 0 256 4 256 0 2 8 64 4 256 4 4 1024 512 0 1024 8 8 128
+256 0 128 0 2 128 2 4 0 0 64 0 4 64 2 8 2 4 8 4
+2 16 256 128 16 0 128 32 1024 1024 4 4 4 8 2 2 4 4 4 64
+4 512 4 64 2 0 2 16 512 4 8 4 0 2 4 0 0 16 2 1024
+4 16 1024 0 8 128 1024 512 0 2 0 2 2 0 64 32 4 32 2 8
+8 0 0 2 256 8 2 1024 0 256 32 0 0 2 2 32 2 0 2 128
+128 0 4 4 128 0 512 2 128 4 4 2 512 4 4 4 0 8 128 0
+20 left
+4 32 0 4 4 0 1024 64 0 2 0 32 128 64 256 2 4 4 4 0
+2 0 0 4 512 16 64 2 256 4 4 0 2 2 2 2 16 128 32 1024
+0 0 0 2 64 4 4 8 4 0 4 32 16 512 0 0 4 0 1024 512
+0 32 4 0 4 128 16 16 2 2 256 4 0 4 4 2 64 128 256 0
+0 128 4 8 0 64 0 0 2 4 32 64 32 8 32 1024 4 128 16 0
+2 8 64 0 1024 512 2 2 4 1024 512 128 2 4 128 0 2 2 8 1024
+512 0 32 2 64 2 2 0 4 0 128 0 64 4 0 4 0 4 256 512
+2 4 4 2 0 0 0 2 1024 0 1024 0 2 4 4 256 4 2 512 0
+512 1024 0 2 2 4 1024 0 2 0 2 0 2 0 16 8 8 4 0 4
+2 2 16 8 2 256 256 512 0 2 0 16 32 0 0 64 4 1024 0 0
+4 4 2 0 0 256 2 2 0 1024 64 128 16 0 2 0 128 2 0 1024
+4 2 32 4 2 4 4 16 4 4 0 2 2 4 2 0 4 64 0 32
+1024 0 16 4 2 2 4 64 4 512 8 4 32 64 2 64 0 4 4 8
+512 512 0 512 512 2 2 0 128 128 128 0 2 4 4 128 4 4 64 0
+2 4 512 64 2 4 4 2 1024 2 16 256 256 256 4 2 8 1024 32 1024
+16 512 2 4 2 1024 512 16 0 128 0 4 8 1024 128 0 0 4 512 128
+256 512 256 0 1024 32 256 4 32 16 4 64 4 2 4 8 4 4 0 0
+8 2 256 4 0 2 64 8 4 2 0 32 0 4 4 0 2 4 0 16
+4 8 2 4 4 0 2 0 0 2 4 4 512 2 8 2 512 32 8 2
+16 0 2 2 2 32 4 1024 4 0 512 32 128 2 0 4 2 512 2 8
+20 down
+4 4 0 0 128 4 0 256 64 2 32 32 2 2 4 256 8 2 0 4
+0 0 32 4 32 16 2 2 2 4 4 256 128 2 4 512 1024 32 32 4
+0 2 0 16 256 2 256 4 8 64 0 0 2 2 2 16 1024 2 8 128
+512 8 2 8 4 64 4 2 32 64 256 0 64 4 0 0 4 16 512 0
+16 4 4 0 4 512 8 0 4 1024 4 512 4 0 0 4 4 4 4 2
+0 2 512 0 128 0 32 2 32 2 8 0 128 0 2 2 32 16 16 8
+2 512 32 1024 32 4 2 32 4 256 2 128 8 512 4 8 0 2 0 4
+2 32 4 2 2 128 1024 0 0 512 0 4 1024 128 0 64 4 4 512 256
+2 1024 512 256 16 4 2 2 0 0 4 2 16 4 2 0 1024 128 8 0
+2 64 32 64 4 8 64 32 2 4 4 0 0 8 64 4 1024 0 4 64
+0 2 0 4 512 32 8 0 512 256 4 64 32 0 4 256 2 64 0 0
+32 16 512 128 0 8 2 256 0 2 128 32 0 512 2 2 2 1024 256 16
+32 512 2 0 2 0 256 128 4 4 0 2 4 4 4 2 512 4 4 2
+8 128 256 4 1024 0 128 0 2 512 2 32 4 16 0 2 0 4 2 4
+8 2 32 4 4 8 64 4 512 2 0 2 2 2 4 4 0 0 4 4
+2 16 16 32 0 0 1024 2 4 4 4 0 2 4 0 2 0 4 32 0
+4 256 32 4 64 256 512 0 4 256 0 0 16 0 4 4 512 16 2 2
+4 16 1024 0 4 512 4 32 64 2 2 0 4 512 0 512 8 512 2 4
+2 512 2 64 0 2 0 0 256 4 256 0 1024 4 64 0 4 0 2 0
+4 8 128 16 0 256 32 512 4 8 4 2 4 4 2 4 8 2 4 2
+20 left
+1024 2 4 512 128 64 128 512 0 2 2 512 2 4 0 32 0 0 128 8
+0 4 4 512 128 32 4 2 4 64 0 512 16 2 0 2 4 2 4 0
+512 512 0 0 16 0 32 4 256 1024 4 0 512 4 4 2 2 32 8 0
+2 16 2 0 4 512 8 0 512 128 2 0 256 32 2 0 0 64 16 4
+4 8 64 2 256 128 2 16 0 2 32 4 0 0 2 2 4 4 0 0
+256 0 2 4 2 2 4 0 16 4 2 2 1024 64 0 8 512 4 4 0
+0 0 4 4 128 4 2 2 4 256 4 2 0 512 256 4 0 4 8 0
+16 0 0 32 2 0 0 4 32 4 2 128 2 0 4 4 2 0 0 2
+4 0 2 0 32 0 512 0 128 4 128 4 64 128 2 2 1024 4 64 64
+4 2 0 0 0 0 16 4 16 0 128 0 4 4 0 64 256 32 4 4
+32 2 4 1024 8 2 1024 4 4 2 0 0 128 128 16 2 4 4 0 16
+1024 512 32 2 32 128 2 4 8 2 2 256 2 4 0 1024 64 1024 2 2
+128 0 32 512 128 0 2 64 2 1024 4 2 0 1024 4 16 4 0 32 4
+2 0 256 0 128 16 16 4 4 2 512 32 2 2 4 0 32 2 0 2
+2 0 0 4 4 32 2 16 4 1024 2 4 512 1024 4 2 512 2 0 4
+8 2 8 512 0 1024 128 2 4 4 32 32 0 4 1024 0 64 512 4 4
+4 2 0 32 64 0 32 512 4 8 4 4 64 0 0 0 0 0 4 0
+4 0 4 0 256 2 2 2 4 4 8 0 8 16 2 1024 0 128 0 2
+4 4 2 4 4 4 2 16 256 2 32 16 512 1024 0 2 16 1024 0 64
+1024 0 4 512 512 4 0 4 2 2 4 64 16 0 256 1024 0 0 4 4
+20 left
+2 32 1024 0 256 32 1024 1024 2 4 4 64 2 4 8 2 128 0 4 64
+2 4 0 2 4 64 4 512 0 4 0 8 0 256 2 4 128 4 4 8
+64 512 512 4 0 32 0 0 256 0 0 4 64 0 256 16 0 512 4 64
+0 0 2 2 64 512 256 4 4 256 32 2 2 4 0 2 512 0 2 1024
+4 2 32 2 2 256 256 64 4 4 256 2 2 0 128 4 0 1024 0 64
+4 0 1024 128 1024 0 128 0 4 8 0 2 0 0 2 4 32 128 2 0
+2 4 0 2 2 1024 2 0 0 512 32 8 4 2 2 4 32 2 4 2
+4 8 32 4 0 2 0 4 0 256 4 2 16 16 4 16 0 2 2 8
+256 1024 0 2 0 1024 0 512 1024 4 2 128 0 64 32 512 0 4 2 1024
+0 4 256 2 512 8 0 2 2 1024 0 2 2 2 0 0 256 128 128 64
+128 0 4 4 64 64 16 0 2 1024 0 16 512 256 0 512 1024 0 0 32
+128 2 8 4 4 64 0 0 2 4 2 256 512 2 256 2 2 4 512 2
+16 4 2 128 2 4 128 2 128 4 2 32 256 2 0 4 0 0 8 1024
+32 64 4 256 8 2 4 2 0 4 512 2 2 4 0 32 0 64 4 2
+2 256 4 512 64 4 1024 2 16 4 4 0 0 2 0 0 0 2 512 4
+4 0 64 2 2 4 4 2 8 2 0 4 16 256 256 4 4 128 4 256
+2 16 128 256 4 2 512 16 0 32 1024 4 0 0 4 2 2 2 64 0
+32 8 2 4 16 2 4 64 64 0 1024 2 2 4 8 32 512 4 16 0
+4 0 512 4 256 1024 16 0 256 0 16 0 4 0 32 2 8 4 0 1024
+0 2 128 0 4 2 0 2 8 2 512 64 16 2 256 0 2 16 4 32
+20 down
+4 4 2 4 4 4 4 32 2 2 2 4 2 4 4 4 2 4 4 2
+512 4 0 0 4 256 4 1024 4 2 16 0 4 128 1024 0 2 4 1024 2
+0 4 2 0 0 0 2 4 2 2 2 4 0 4 2 2 4 512 4 0
+2 2 0 4 2 512 16 0 4 4 4 2 0 0 2 2 0 4 2 0
+2 4 4 2 2 4 4 4 2 2 256 4 2 2 2 4 1024 0 2 1024
+4 4 512 4 4 4 4 0 4 4 2 0 512 2 4 4 0 64 0 2
+2 4 4 2 32 2 4 2 1024 4 2 4 4 4 4 4 2 0 2 0
+4 2 4 2 0 2 4 4 0 4 2 4 8 2 0 128 512 8 2 512
+4 0 2 2 2 2 256 4 4 4 2 16 4 0 2 8 0 0 4 2
+0 2 0 0 2 2 32 4 4 0 0 4 0 4 2 2 64 2 32 2
+2 0 16 4 2 2 0 4 16 4 4 4 4 256 2 2 2 4 4 4
+0 0 2 2 32 2 16 4 32 2 2 0 4 2 0 4 2 0 4 2
+0 2 2 4 4 2 64 16 2 2 0 256 0 0 2 2 2 4 2 2
+2 1024 4 4 8 0 4 4 2 2 0 0 2 4 2 4 2 0 0 4
+2 4 0 0 32 2 4 0 4 4 8 4 4 4 0 2 2 4 2 4
+16 16 2 2 4 4 2 32 2 0 4 2 2 2 2 2 16 4 2 32
+4 16 4 512 0 0 4 4 64 2 16 4 0 4 0 2 0 4 4 2
+0 4 32 4 2 2 2 2 2 0 4 4 0 4 2 2 4 2 0 4
+2 16 8 0 0 2 0 4 4 0 4 8 0 4 4 4 2 0 2 4
+2 32 0 4 2 4 0 2 2 4 4 4 4 4 2 2 4 4 4 4
+20 left
+4 4 0 2 2 2 4 4 128 1024 4 64 0 2 2 512 4 8 2 32
+16 2 4 64 4 2 0 4 4 4 0 2 0 4 4 512 4 128 4 2
+4 2 4 2 0 512 2 0 4 4 0 32 2 2 2 128 16 2 0 256
+0 2 4 4 2 8 2 1024 32 2 0 4 64 4 0 4 8 512 2 0
+2 4 4 4 0 4 512 4 2 4 0 0 2 2 1024 512 16 2 2 4
+4 4 4 2 2 128 2 4 2 4 64 2 4 4 256 2 2 2 8 2
+0 2 2 2 4 0 2 2 1024 2 2 2 512 4 0 2 128 2 2 0
+2 4 4 2 2 4 4 4 4 2 4 0 4 0 0 2 4 16 2 32
+4 64 4 2 512 4 2 512 128 0 8 4 2 0 2 0 128 0 4 512
+128 2 0 0 2 4 4 2 2 0 2 0 2 2 32 4 2 0 4 2
+4 4 4 0 2 16 4 0 0 4 4 64 8 2 4 2 4 4 4 4
+2 2 4 4 4 4 2 4 2 0 1024 4 64 4 2 4 0 0 2 128
+0 2 4 2 4 2 2 4 0 4 2 2 4 2 2 4 4 16 128 64
+4 2 4 4 64 0 2 4 2 4 0 0 2 32 0 0 2 0 0 512
+2 8 32 2 2 32 0 2 256 0 0 0 4 512 512 16 0 2 0 2
+4 0 2 2 2 4 0 2 1024 0 2 4 4 256 2 4 0 4 0 4
+512 128 4 0 0 8 0 0 0 2 0 4 2 4 16 2 4 4 0 2
+2 4 0 0 0 2 4 2 2 4 4 2 4 2 128 2 4 4 2 32
+0 2 2 2 2 4 4 4 2 2 2 2 4 4 2 0 2 4 512 128
+0 512 2 2 256 4 2 2 2 0 32 4 0 4 4 4 16 0 2 2
+20 left
+2 4 0 4 4 4 128 2 2 2 2 256 2 2 4 4 0 4 2 2
+2 0 0 2 2 4 0 4 0 4 1024 4 4 0 4 2 4 64 2 4
+2 4 0 0 2 2 4 0 4 0 2 4 2 2 2 2 2 2 2 4
+4 0 2 0 0 8 2 2 2 4 128 4 4 0 4 2 2 2 0 2
+4 2 2 2 2 1024 4 2 2 4 8 0 4 4 4 2 4 4 0 4
+1024 512 4 2 256 256 4 2 0 512 2 4 4 2 128 2 4 2 2 2
+2 2 4 2 2 2 2 16 0 4 4 4 0 2 16 2 0 4 0 4
+0 2 4 2 0 0 2 4 2 4 0 4 64 4 4 8 2 0 64 0
+2 4 32 0 0 2 8 0 2 2 32 0 2 2 2 2 4 0 256 0
+0 2 4 4 1024 16 4 0 0 4 4 2 2 0 0 4 4 0 4 2
+4 2 4 2 2 0 4 2 128 0 4 4 4 2 2 0 0 4 2 2
+2 2 2 16 4 0 2 2 4 4 2 0 2 4 4 2 2 2 4 0
+2 2 128 128 4 0 2 8 0 4 4 4 2 2 2 4 4 4 1024 2
+4 4 16 4 4 2 4 0 4 2 2 128 4 128 4 2 0 2 2 0
+0 2 2 0 2 4 4 2 32 4 4 2 2 128 4 0 0 4 2 0
+4 2 2 2 2 1024 64 2 4 4 4 2 4 2 2 2 0 4 4 2
+1024 2 2 16 1024 4 0 128 4 2 0 0 0 4 2 128 0 256 4 512
+32 0 4 256 8 4 4 0 4 2 0 0 8 2 0 0 2 64 0 2
+2 0 2 4 4 0 4 4 2 0 4 2 512 4 4 2 4 4 8 2
+2 512 4 2 2 0 2 2 4 4 4 0 0 4 2 2 4 4 4 512
+20 up
+4 2 4 512 4 4 0 4 0 0 4 4 2 4 2 0 4 2 16 4
+16 2 2 0 0 4 0 4 4 4 4 0 0 0 256 2 1024 2 128 2
+2 2 2 4 2 4 128 4 4 0 4 4 0 2 32 2 2 256 2 1024
+2 4 0 4 4 16 2 0 4 2 2 2 0 2 2 4 2 4 4 0
+2 128 1024 8 2 0 0 4 4 4 4 4 0 2 2 0 4 0 4 512
+2 2 2 4 0 0 4 4 2 128 2 4 2 2 4 2 2 2 8 0
+4 512 4 4 4 4 4 2 0 2 4 32 8 0 2 4 512 0 16 0
+4 32 128 2 128 2 0 0 0 2 2 4 0 4 4 4 4 0 2 0
+0 2 0 0 0 16 512 2 4 4 0 4 4 0 1024 4 2 0 4 2
+2 2 4 0 0 0 8 1024 2 2 256 0 2 4 0 2 1024 4 4 2
+4 4 0 2 4 8 2 1024 2 2 2 4 2 0 2 4 0 2 2 4
+4 2 2 0 2 4 2 2 0 512 4 2 0 0 4 4 2 2 4 4
+0 4 4 4 2 4 0 0 32 4 4 2 0 4 4 2 512 4 4 2
+4 32 2 32 0 2 0 2 2 2 4 16 64 2 0 0 128 256 0 0
+0 256 2 8 2 2 4 4 512 4 2 16 512 4 2 2 0 4 0 2
+2 2 4 2 4 0 4 0 0 512 32 2 4 4 1024 2 1024 1024 0 4
+2 2 2 0 4 4 512 0 2 0 2 2 2 128 2 2 2 4 2 2
+2 4 2 4 0 2 0 8 4 8 4 512 4 512 512 32 4 2 4 4
+2 4 2 4 16 16 2 256 4 4 4 2 2 512 4 0 4 4 32 4
+4 2 2 2 2 2 4 4 2 2 0 16 4 2 2 256 4 8 4 4
+20 up
+2 4 4 4 4 2 4 0 2 0 2 2 0 2 4 4 2 0 16 2
+2 2 2 0 2 4 4 2 2 4 2 2 2 1024 4 1024 0 16 4 256
+4 4 4 4 2 4 4 2 4 4 4 4 2 4 4 2 0 2 2 4
+4 0 2 4 2 4 4 2 0 512 4 0 4 4 16 2 0 2 64 0
+4 4 0 0 2 4 2 8 2 4 32 0 0 4 0 0 0 0 0 4
+512 256 0 0 2 256 4 4 0 2 2 0 16 1024 128 16 2 2 256 4
+512 2 2 0 0 512 4 4 4 0 2 2 0 4 2 2 8 2 2 0
+4 2 2 4 4 4 4 4 4 4 0 4 0 256 1024 16 1024 2 2 4
+4 2 16 4 512 0 2 4 4 0 0 4 2 4 2 4 32 32 0 512
+4 2 4 4 4 4 2 2 0 0 4 4 4 0 16 1024 4 4 2 0
+4 2 0 4 4 4 2 4 2 4 32 4 0 2 0 2 64 4 2 4
+4 2 2 4 4 1024 0 0 2 4 1024 4 128 2 4 2 4 8 2 4
+1024 0 2 2 4 2 2 4 4 4 4 2 16 4 4 4 0 8 16 64
+0 4 2 32 2 0 256 4 0 128 2 4 2 512 32 2 0 2 16 0
+4 4 2 0 2 2 64 4 0 2 4 4 4 2 2 4 0 4 4 0
+0 2 2 4 0 512 0 4 4 2 4 32 1024 0 0 0 2 0 2 4
+4 2 2 0 2 4 0 0 0 0 4 2 0 16 2 2 2 0 4 4
+2 4 2 8 32 2 512 2 4 4 64 0 4 0 4 2 0 2 256 2
+2 8 2 4 4 2 4 4 4 32 2 0 4 0 2 4 256 4 256 2
+4 2 4 512 4 4 4 2 1024 2 0 0 0 0 2 4 4 2 4 4
+20 right
+2 2 4 4 4 0 0 2 128 0 4 128 4 4 0 2 2 64 2 0
+0 4 512 4 0 4 2 2 4 2 128 0 4 2 2 8 4 4 0 2
+32 512 4 0 2 1024 2 0 2 0 4 4 32 4 2 0 4 4 2 2
+2 16 0 4 2 4 2 4 2 0 0 2 0 4 2 0 0 0 2 4
+2 2 4 4 0 4 2 2 2 128 0 4 2 4 16 0 2 2 16 0
+512 2 4 2 0 2 0 0 2 2 8 16 32 2 0 4 4 8 4 4
+4 2 0 2 2 32 0 2 2 256 4 4 512 512 2 2 2 4 4 4
+4 2 2 0 2 4 0 0 2 4 32 4 2 4 4 4 0 2 0 2
+0 2 128 2 256 4 2 4 2 0 0 4 2 2 2 4 16 4 4 4
+4 2 0 0 4 128 0 0 64 4 0 2 32 512 2 128 2 0 4 2
+4 4 4 4 4 2 2 4 4 8 2 4 2 0 2 2 2 2 4 0
+4 2 0 4 2 0 0 4 4 4 256 0 4 2 8 8 4 0 2 4
+4 2 1024 2 0 128 0 512 2 2 16 4 2 2 4 4 4 2 4 4
+4 4 2 4 4 4 16 4 2 4 2 2 256 2 0 0 16 0 2 0
+4 64 4 0 0 0 2 4 512 2 256 2 0 4 4 0 4 2 4 2
+64 4 32 4 2 0 4 128 64 2 2 4 4 4 2 4 2 0 1024 32
+4 4 4 2 4 32 0 4 32 32 128 4 4 32 2 4 0 4 4 4
+0 4 2 2 16 4 0 4 4 64 2 2 0 4 4 2 512 0 0 2
+2 2 2 2 2 4 2 2 2 0 4 256 4 2 512 2 2 2 2 2
+4 2 0 4 0 4 64 2 4 2 0 2 2 2 4 2 4 2 0 4
+20 down
+2 4 256 0 4 2 2 2 2 4 2 0 4 32 2 4 4 2 2 256
+2 2 2 4 2 2 4 4 4 32 256 4 2 0 4 0 2 4 4 4
+4 4 2 2 0 0 2 4 0 16 2 2 256 4 512 2 0 4 0 4
+4 4 4 4 256 2 2 0 2 8 2 256 2 4 4 2 0 0 2 2
+4 2 512 16 2 2 4 2 128 2 0 0 64 2 2 4 2 4 4 4
+2 2 2 0 4 4 4 4 2 1024 2 2 4 0 0 4 4 4 0 2
+4 0 1024 0 4 2 2 128 0 256 2 2 4 128 4 2 2 4 4 4
+0 8 0 4 4 4 4 2 4 0 4 0 4 0 4 32 0 4 4 2
+4 0 4 2 2 2 0 128 8 2 0 16 0 0 0 0 0 4 4 8
+0 4 0 4 8 2 4 0 4 2 4 4 4 0 0 4 4 16 0 0
+4 512 0 4 2 2 0 512 2 4 4 4 2 2 2 2 8 0 8 2
+0 4 2 2 0 1024 64 4 2 2 2 4 4 4 16 2 0 2 4 4
+4 0 2 0 4 2 0 0 0 256 128 4 32 4 2 2 2 0 8 4
+2 2 0 2 2 1024 4 2 0 4 0 2 4 4 8 4 4 2 0 2
+2 32 2 4 2 1024 2 2 2 4 4 512 4 2 2 0 4 4 4 0
+2 4 0 4 0 4 0 4 4 2 4 4 2 4 8 0 0 4 4 0
+0 2 32 4 2 0 4 1024 2 2 2 4 4 4 4 1024 2 2 4 2
+0 4 2 2 4 512 512 2 1024 2 2 4 1024 8 0 8 1024 4 4 2
+2 32 4 8 16 4 0 512 4 2 4 4 2 0 64 2 4 128 2 4
+16 0 4 2 0 16 4 4 0 512 0 4 0 4 2 2 2 2 2 2
+20 left
+4 2 2 0 2 2 32 4 4 2 4 0 0 4 2 0 4 512 0 4
+512 4 2 0 2 0 4 4 2 0 32 0 4 2 4 4 2 0 2 32
+0 2 2 2 4 32 4 0 4 2 4 4 0 0 2 0 2 256 8 0
+2 64 32 4 2 4 4 2 4 4 2 1024 2 4 512 2 4 4 256 2
+4 4 2 4 4 2 16 0 2 0 64 2 4 0 2 8 4 4 2 4
+2 4 1024 2 4 2 0 2 4 0 0 2 4 4 0 2 2 0 2 4
+4 2 4 2 4 2 128 0 2 2 4 0 0 4 2 0 2 2 2 2
+8 0 4 16 4 0 4 0 2 4 2 2 2 0 8 2 2 2 2 2
+4 4 4 4 4 4 1024 0 64 0 4 0 0 2 4 2 64 128 4 2
+2 4 256 8 0 16 4 64 0 0 4 0 4 2 4 2 2 32 2 8
+4 256 4 128 0 4 0 0 2 0 2 2 2 64 2 128 0 0 0 4
+2 2 4 0 4 0 2 4 1024 4 0 0 0 2 0 4 2 512 8 0
+4 0 0 4 4 2 0 4 4 0 2 4 2 0 2 4 4 4 2 64
+4 0 0 2 64 2 0 8 4 128 4 4 2 2 0 2 0 2 4 2
+2 4 0 2 4 4 4 1024 4 4 64 4 0 4 2 4 2 0 4 4
+4 2 2 1024 2 2 4 2 1024 2 4 8 4 2 2 2 4 4 4 2
+16 4 0 1024 2 2 4 0 0 0 64 2 2 2 4 64 4 2 2 4
+2 4 2 1024 4 2 2 4 1024 0 4 2 0 128 4 128 0 4 64 2
+0 4 2 256 2 4 0 4 64 4 4 2 4 0 2 0 512 0 4 2
+2 0 2 0 64 4 2 2 4 2 32 2 0 2 1024 2 64 0 4 4
+20 down
+0 0 4 4 0 512 4 2 4 0 0 0 2 16 32 4 2 2 4 0
+2 4 0 0 4 4 64 2 2 0 0 0 2 4 2 64 2 4 0 4
+0 2 0 0 4 4 0 4 4 4 1024 0 128 4 0 4 0 4 2 4
+4 2 1024 16 0 128 2 2 1024 2 4 2 2 4 2 4 4 2 2 4
+4 2 64 0 4 4 4 32 512 0 4 2 0 32 64 8 2 16 0 4
+4 4 2 0 1024 4 4 4 2 0 4 2 2 4 2 2 0 0 2 0
+0 4 0 0 0 2 2 2 4 2 2 4 2 2 2 4 4 0 4 0
+0 512 4 4 4 4 4 0 4 512 2 0 2 4 4 4 4 16 2 4
+32 2 2 2 0 2 32 0 4 256 0 2 4 2 16 4 2 2 0 2
+0 0 0 0 4 2 2 4 32 4 0 2 0 4 16 16 4 0 4 2
+4 0 2 0 2 4 64 4 4 4 2 2 2 2 128 4 2 2 2 0
+2 0 2 0 2 32 4 2 2 4 2 8 4 4 4 4 4 2 4 2
+2 256 4 512 2 0 512 0 4 4 256 4 2 4 0 4 512 2 4 2
+4 2 2 0 2 0 2 2 16 2 0 2 0 2 2 2 0 2 4 4
+4 4 2 0 2 4 2 2 4 2 0 0 2 0 0 2 128 32 2 0
+2 4 4 2 2 4 4 0 2 4 4 2 0 0 2 2 0 2 0 2
+2 0 0 0 2 4 4 0 2 2 2 8 4 4 4 1024 1024 2 4 16
+2 2 4 4 0 4 0 4 4 4 0 0 8 4 4 2 4 512 4 4
+4 2 4 4 4 4 4 0 0 4 128 2 2 4 0 8 512 4 4 4
+128 8 2 2 64 2 4 0 512 0 2 2 4 2 2 1024 0 0 2 4
+20 left
+0 4 4 0 64 2 128 2 2 512 2 2 0 4 4 0 4 2 4 4
+2 512 2 4 2 4 2 4 0 2 4 2 2 0 0 2 4 4 0 2
+4 4 512 8 0 4 2 2 2 2 2 4 2 2 4 0 2 2 0 4
+2 8 2 4 0 2 4 0 64 2 2 0 16 512 0 4 2 4 4 32
+2 64 4 2 0 4 2 2 2 4 4 2 4 2 0 4 512 0 4 4
+4 0 2 512 2 2 2 2 4 0 4 32 4 4 4 4 0 1024 0 0
+4 8 4 2 2 2 2 0 8 2 2 4 2 4 4 4 2 0 2 2
+2 4 2 0 4 32 4 2 512 4 4 0 0 2 0 4 32 2 4 0
+2 4 128 4 0 0 1024 4 4 2 32 2 4 2 4 4 256 2 2 16
+0 0 2 0 2 4 2 0 4 0 0 1024 2 2 4 0 256 2 0 4
+4 2 2 2 2 2 4 4 4 2 2 4 4 0 4 2 2 0 4 2
+2 2 2 4 4 8 2 4 16 2 2 32 4 8 2 64 0 8 4 2
+2 512 4 2 128 2 4 32 0 4 4 2 128 4 2 2 0 8 4 4
+2 0 2 2 4 2 128 64 128 4 0 4 2 2 2 4 4 0 4 4
+32 2 2 0 2 2 2 0 0 0 2 256 0 0 2 2 8 1024 2 64
+0 4 4 128 2 2 2 2 2 2 4 2 2 2 0 4 4 4 2 2
+0 4 0 0 2 4 16 2 256 4 128 4 64 2 4 2 16 2 4 4
+2 4 1024 2 0 2 0 32 4 16 4 256 2 4 2 512 2 4 4 4
+2 4 2 4 512 0 4 2 4 2 4 0 4 0 2 256 4 0 4 16
+4 512 0 4 4 2 0 4 2 32 0 0 16 2 0 2 2 4 256 2
+20 left
+4 0 128 4 64 2 4 4 0 0 0 2 0 0 0 4 4 0 0 2
+0 2 0 0 64 4 4 4 2 0 2 0 4 2 4 4 2 2 2 64
+4 0 4 2 4 2 4 0 64 4 4 2 256 0 0 4 0 2 128 4
+64 4 4 2 4 32 4 64 2 8 4 0 128 0 0 64 4 2 2 2
+2 4 0 0 4 0 0 2 0 2 4 0 0 4 2 2 256 16 2 2
+128 2 2 512 0 512 0 4 2 4 4 64 4 32 2 2 2 2 512 0
+2 4 0 4 2 0 0 2 2 0 512 4 2 8 2 0 4 4 4 4
+2 4 2 2 0 0 256 16 4 4 1024 2 128 4 2 0 0 2 2 4
+128 4 4 0 2 2 4 4 4 4 4 0 4 4 4 4 4 4 2 4
+0 4 256 2 0 2 4 8 512 4 0 4 4 0 4 2 64 2 2 2
+2 4 2 4 32 2 2 4 2 4 2 4 4 4 4 2 4 4 0 4
+2 4 2 2 4 2 2 2 16 2 1024 4 4 2 0 0 2 4 2 2
+2 0 4 4 2 4 2 32 0 4 2 2 8 4 128 0 4 0 2 1024
+2 0 2 2 4 2 0 4 2 4 16 16 4 64 4 4 4 4 2 2
+4 0 4 0 1024 4 0 0 2 4 2 1024 256 32 4 256 8 0 2 0
+16 0 0 2 16 2 0 2 4 256 2 2 2 4 4 2 16 2 2 4
+2 2 256 0 16 4 4 2 2 0 4 4 4 4 256 4 0 2 0 0
+512 2 0 0 2 512 32 4 4 4 256 256 2 0 2 2 0 2 4 2
+2 64 64 4 4 2 2 4 2 4 4 2 1024 2 4 2 2 4 0 2
+0 4 2 0 2 2 2 0 4 4 1024 4 2 8 4 4 4 2 2 64
+20 left
+4 0 4 0 2 128 4 1024 0 16 4 4 4 0 4 0 4 512 32 2
+4 2 2 0 2 4 4 0 4 4 128 4 4 2 2 32 0 4 128 0
+2 0 4 16 0 4 0 128 32 0 4 128 8 2 2 4 4 4 0 2
+4 0 2 4 16 4 4 2 512 4 4 0 4 4 0 32 64 4 4 2
+4 8 0 0 0 64 4 4 4 4 4 2 2 2 4 256 0 0 4 2
+4 8 4 1024 2 16 4 4 256 4 4 256 0 4 0 2 0 2 2 128
+8 16 2 4 4 32 0 2 4 4 4 4 4 4 2 2 2 2 4 4
+4 16 2 2 16 4 1024 4 0 4 2 4 4 4 0 0 4 64 4 2
+8 4 2 4 4 4 4 4 4 2 2 0 4 4 0 0 2 128 4 2
+4 1024 4 0 2 4 0 2 4 0 4 2 0 4 0 4 0 1024 4 4
+4 2 4 0 2 2 2 4 4 512 64 0 1024 0 2 2 4 2 64 4
+2 4 4 2 4 4 4 4 4 4 2 2 256 4 2 2 0 4 2 4
+64 4 4 8 4 2 2 2 0 2 4 2 0 0 2 0 32 0 16 2
+4 4 4 2 4 4 2 2 2 4 4 4 0 64 512 4 0 2 2 0
+2 512 1024 2 4 2 4 0 4 2 4 0 2 2 2 0 4 4 2 4
+4 4 2 2 2 0 4 2 0 4 4 2 1024 2 4 4 2 4 0 32
+4 2 4 32 4 2 4 0 2 2 4 2 256 0 0 2 2 4 4 2
+2 512 4 0 4 2 2 2 4 2 128 4 4 2 0 2 0 4 4 2
+2 0 4 2 4 4 0 64 0 0 0 4 0 2 2 4 4 0 4 2
+0 16 0 0 0 4 2 64 2 2 1024 0 2 64 128 2 512 8 4 4
+20 up
+4 512 2 4 8 2 2 2 4 0 4 2 2 2 2 2 0 4 4 4
+2 4 4 4 1024 0 16 0 4 4 0 2 1024 4 2 0 0 4 4 4
+256 4 2 0 2 4 0 1024 0 0 4 2 0 0 0 4 0 0 2 4
+0 2 64 4 4 2 4 2 0 2 64 4 4 2 4 4 256 64 4 64
+0 128 4 2 2 2 64 0 2 8 2 2 2 0 2 4 2 4 512 0
+32 0 4 4 0 4 4 2 2 2 4 4 128 4 2 2 256 4 4 4
+2 2 4 8 4 4 2 0 2 4 0 4 4 4 2 4 4 0 0 2
+4 0 2 2 4 512 4 2 128 512 0 1024 4 0 512 4 4 2 64 2
+2 0 4 256 2 128 16 2 32 2 2 4 2 64 4 2 2 4 2 0
+4 0 4 4 64 4 2 4 4 512 2 0 2 2 64 512 2 2 4 2
+4 4 2 2 2 8 4 4 0 2 2 0 32 2 0 2 2 2 4 2
+0 4 0 2 2 2 4 0 4 2 2 4 4 4 2 0 4 2 4 4
+0 1024 4 2 4 0 2 2 128 4 4 4 0 2 2 2 4 4 2 0
+0 0 2 0 4 4 4 0 0 0 2 4 0 2 4 2 4 128 4 4
+2 2 4 0 4 4 4 0 0 0 0 0 0 2 4 0 2 2 0 4
+4 0 512 2 4 4 0 4 0 0 4 4 2 2 256 2 4 8 2 0
+0 2 512 4 16 4 4 4 4 4 2 0 4 16 4 2 4 512 4 4
+0 0 4 0 0 0 2 512 2 4 2 4 128 2 4 2 2 64 0 4
+0 2 4 2 16 4 0 8 4 0 2 0 0 2 2 4 4 4 0 2
+2 0 256 2 8 4 2 4 0 2 4 0 2 512 2 32 2 2 2 0
+20 up
+2 4 4 1024 4 0 2 0 2 4 4 4 2 4 0 2 0 0 128 2
+64 2 4 4 2 0 2 0 4 16 4 4 4 0 2 2 512 1024 2 0
+2 2 4 4 2 2 4 1024 1024 4 0 2 2 4 0 2 4 4 2 0
+0 0 0 1024 64 4 0 0 2 4 0 2 4 2 2 4 4 2 4 4
+0 2 256 2 2 2 2 0 0 4 0 2 2 256 2 2 2 2 2 2
+4 4 2 0 0 2 4 2 4 4 0 0 2 0 2 0 4 2 4 2
+128 4 4 2 4 4 4 0 0 4 4 8 4 4 128 0 128 0 4 2
+2 4 4 4 4 4 1024 0 0 0 0 4 4 256 2 2 4 2 4 2
+4 4 4 64 1024 2 4 4 2 2 1024 4 0 2 4 2 2 2 0 4
+2 0 4 32 2 2 0 0 16 2 2 4 0 4 2 2 2 4 2 2
+2 2 64 4 4 0 4 64 0 64 4 4 4 0 4 0 0 2 4 2
+4 2 256 2 0 4 0 256 4 8 4 4 4 32 0 0 4 2 2 2
+2 2 2 4 8 16 2 2 0 2 0 2 4 0 2 2 2 0 0 4
+2 2 2 2 4 0 4 2 2 2 4 2 2 128 2 4 4 2 0 2
+2 8 2 32 2 0 0 2 0 64 0 2 2 4 0 0 32 4 2 2
+4 2 4 64 2 4 128 4 2 256 0 2 16 2 4 4 0 2 4 2
+4 2 16 2 32 2 4 2 2 0 2 1024 0 2 0 4 2 0 4 4
+4 64 0 4 0 4 0 0 2 0 64 64 0 2 2 4 4 256 2 0
+4 0 4 4 16 2 2 2 4 64 2 0 0 1024 4 4 4 2 0 2
+256 0 4 2 4 0 2 2 0 8 2 4 4 2 4 2 4 4 2 128
+20 left
+2 2 64 128 4 0 4 64 4 4 4 4 256 4 4 32 2 2 4 512
+0 2 4 4 2 4 0 4 2 4 0 2 2 4 2 0 8 2 0 0
+4 0 4 4 0 4 2 0 2 0 2 0 64 64 2 0 32 4 2 2
+4 2 4 0 0 4 2 2 0 4 256 4 0 2 2 2 4 4 4 0
+0 8 0 2 4 4 64 2 128 2 4 64 128 2 2 0 2 4 0 64
+2 4 2 4 2 0 2 256 2 2 4 4 4 4 0 2 4 4 4 4
+0 8 4 128 4 4 4 4 0 2 0 2 4 512 0 8 4 4 0 2
+0 4 0 1024 4 4 0 4 4 2 16 0 128 4 4 2 4 0 64 2
+4 4 4 2 4 2 2 2 2 0 2 4 2 16 0 4 2 32 4 0
+2 4 4 2 4 2 2 2 2 2 2 4 0 4 4 2 4 4 4 2
+0 4 4 4 2 4 0 0 2 2 4 2 4 2 128 2 0 8 0 0
+4 0 2 0 0 4 2 0 256 4 1024 2 4 0 2 0 4 2 4 2
+2 4 2 4 2 0 2 4 16 4 0 2 0 2 4 2 2 0 2 4
+2 2 2 2 2 4 4 2 4 4 4 2 4 4 128 4 4 512 8 0
+4 4 4 32 4 0 0 0 4 2 0 2 512 0 2 0 4 4 4 4
+4 4 2 4 0 4 0 0 2 2 2 0 0 4 4 512 4 32 512 8
+256 256 4 0 2 2 2 4 0 4 4 0 4 4 0 4 4 0 4 4
+0 512 4 4 2 0 0 4 0 128 4 4 0 128 32 2 0 0 1024 4
+2 4 0 4 128 2 64 2 4 2 1024 2 16 4 512 2 4 4 8 4
+4 4 2 1024 2 0 2 0 2 4 2 64 4 2 4 2 2 0 0 0
+20 up
+2 2 2 4 2 2 2 2 2 2 4 32 2 4 0 0 2 256 0 2
+2 1024 2 2 4 0 2 2 4 16 4 0 0 4 32 4 32 4 0 2
+4 4 2 2 64 256 4 4 512 4 0 0 4 4 8 0 4 2 0 2
+0 0 4 2 16 0 2 2 2 4 4 8 64 2 2 2 0 2 2 4
+2 2 2 0 2 0 4 0 32 4 0 4 2 32 2 4 0 4 4 0
+2 4 4 4 4 0 2 0 2 32 2 2 2 0 32 0 2 4 2 0
+2 2 32 0 0 2 2 2 4 16 2 2 2 4 32 4 4 0 4 2
+4 0 4 2 2 4 256 4 0 0 2 4 2 2 0 256 2 0 2 4
+0 2 256 16 4 0 2 4 256 4 2 0 2 4 4 4 16 4 2 4
+4 4 4 0 0 16 2 2 4 0 0 2 0 4 16 4 0 2 4 4
+4 2 0 64 2 4 4 0 2 0 4 2 2 0 4 2 4 4 1024 4
+4 2 2 2 4 0 4 4 0 2 4 0 4 32 4 2 4 0 2 2
+2 0 16 32 2 4 0 0 64 0 2 2 2 2 2 4 0 4 2 2
+4 4 4 0 4 2 2 2 4 0 2 2 4 4 2 0 0 4 2 4
+512 32 2 8 4 8 512 32 0 4 0 4 16 2 1024 4 2 512 0 4
+128 128 4 2 4 0 64 2 2 64 256 16 0 0 4 4 2 512 4 2
+4 2 4 0 2 2 4 4 4 4 4 2 0 4 2 4 4 2 4 4
+2 4 0 2 64 2 4 2 128 0 2 0 0 2 16 4 4 0 16 512
+0 4 2 2 2 4 4 0 4 4 4 2 4 4 256 0 4 4 4 0
+0 0 4 2 2 4 0 4 4 4 2 4 2 4 2 2 2 0 512 0
+20 left
+2 2 4 4 8 2 8 512 128 4 8 8 4 2 4 4 2 2 2 4
+4 4 4 4 64 2 2 4 0 2 4 128 8 4 0 1024 2 0 64 1024
+0 0 128 4 0 4 4 4 4 4 2 2 4 4 64 16 0 0 2 4
+2 4 0 4 4 4 0 2 4 0 2 16 2 0 4 2 8 2 4 0
+1024 64 2 2 0 512 0 256 2 4 0 0 2 4 0 4 2 2 0 2
+4 2 0 4 4 4 4 8 16 2 64 512 32 2 4 4 2 4 2 4
+2 128 4 0 4 2 2 2 256 256 4 0 4 2 2 0 4 4 4 2
+4 2 0 0 4 2 64 32 2 4 2 2 2 2 4 0 4 2 4 256
+0 2 8 4 0 2 0 2 0 2 64 2 0 4 0 2 4 0 2 2
+2 2 4 2 2 4 0 2 2 2 2 0 2 4 2 32 0 4 4 2
+4 2 256 4 4 4 64 2 512 4 32 8 2 4 4 0 2 2 2 2
+2 2 2 2 256 4 4 4 0 4 4 64 2 2 4 2 4 4 0 2
+4 2 0 4 4 4 2 4 4 8 2 4 0 0 8 16 4 2 2 1024
+32 1024 4 0 4 8 4 2 32 2 4 2 0 2 2 2 2 0 4 4
+0 0 2 4 256 64 2 4 0 512 4 2 0 2 2 0 2 4 2 8
+4 2 4 4 2 128 0 0 64 4 64 4 4 4 2 0 4 2 2 2
+0 4 0 4 4 2 0 0 4 2 512 0 2 2 1024 4 2 0 2 4
+2 4 4 4 4 2 0 4 4 2 64 0 0 2 4 2 4 0 2 4
+1024 4 0 2 2 0 2 256 2 4 2 0 64 0 512 0 2 2 0 32
+8 2 0 2 2 4 4 4 16 2 2 0 512 0 2 0 2 0 4 2
+20 left
+4 2 0 2 4 4 4 4 4 2 2 2 2 512 0 2 2 0 8 2
+4 0 512 2 2 2 2 4 2 4 4 0 8 4 4 4 4 4 0 4
+2 0 4 4 2 0 2 2 32 4 4 0 2 2 4 2 4 0 2 2
+4 4 2 2 2 4 2 0 2 2 2 0 4 2 4 4 512 2 2 0
+2 2 4 2 0 4 0 4 4 1024 4 2 2 4 0 2 4 2 4 0
+4 4 4 4 4 4 4 2 4 0 4 2 0 4 128 0 4 0 4 0
+2 4 0 1024 2 0 2 2 0 0 0 0 2 32 32 0 4 512 2 0
+0 2 2 2 0 4 4 4 4 0 0 0 2 2 2 2 0 0 256 0
+4 2 4 2 128 2 4 2 4 2 2 4 0 8 128 2 512 2 0 0
+2 0 0 4 0 2 0 1024 2 2 128 2 4 256 0 2 2 0 0 4
+0 4 2 0 2 4 0 4 2 4 0 0 4 0 4 64 4 0 4 2
+4 0 4 4 256 256 0 2 0 0 4 2 0 2 4 2 256 64 2 8
+2 4 2 32 2 512 4 16 0 4 4 16 4 4 4 32 2 2 4 4
+16 4 2 0 8 0 2 4 4 4 2 0 1024 0 4 256 4 2 2 0
+0 2 128 0 0 0 4 2 4 0 4 2 128 4 2 2 2 4 4 8
+2 2 0 0 4 2 4 2 2 4 8 2 4 2 2 128 0 2 2 2
+256 4 16 2 1024 0 256 4 4 2 2 2 64 256 4 2 0 0 2 2
+2 2 2 0 4 0 4 0 4 16 2 2 128 512 4 0 16 2 4 2
+4 4 2 512 256 2 4 4 0 4 128 4 4 0 2 4 2 4 256 256
+2 0 4 4 2 0 4 4 0 2 2 4 128 256 2 4 0 2 0 0
+20 right
+16 2 2 32 512 4 0 4 16 4 2 2 0 2 2 4 2 0 0 256
+2 32 2 4 2 0 2 0 2 2 2 0 2 4 2 0 0 256 2 2
+64 2 2 128 0 0 4 4 4 0 128 2 4 2 0 4 1024 512 0 0
+2 4 4 64 2 2 4 64 4 2 0 4 8 4 1024 4 0 4 256 2
+4 0 2 16 4 4 256 2 4 0 4 0 16 0 4 128 4 4 0 2
+2 0 2 2 1024 4 4 4 2 4 0 4 64 0 4 0 2 2 4 2
+2 4 512 2 0 2 0 4 0 4 2 512 4 4 4 512 4 4 2 2
+2 2 4 0 2 4 64 2 4 2 2 2 4 2 2 4 0 4 32 64
+4 512 2 4 2 2 1024 4 0 2 4 4 0 4 2 2 2 2 4 4
+256 128 4 2 2 4 2 0 2 4 2 4 2 64 2 2 256 4 2 0
+4 4 64 4 2 0 2 4 2 4 256 32 4 2 1024 2 2 256 2 64
+4 256 2 4 2 4 4 2 2 4 0 4 2 4 0 256 0 4 2 4
+2 4 4 4 64 4 2 4 4 2 0 4 4 2 4 2 0 4 2 2
+4 512 0 2 4 4 2 4 2 128 0 128 2 2 4 128 0 256 0 4
+2 2 4 2 4 2 2 32 0 2 2 8 2 0 2 16 0 4 4 4
+4 1024 2 2 0 0 1024 2 0 4 4 32 2 2 2 2 2 0 4 2
+2 4 4 0 2 4 0 4 0 4 2 8 2 8 4 4 4 512 4 32
+0 0 4 0 2 4 4 0 4 0 128 2 0 4 2 4 0 2 4 0
+32 4 4 2 0 4 2 0 4 4 0 2 2 4 1024 4 2 2 0 2
+4 4 256 2 4 256 2 4 4 2 2 256 2 0 0 16 4 2 4 4
+20 up
+4 2 2 2 4 0 4 8 4 2 2 4 64 4 0 2 2 1024 8 4
+0 2 0 4 2 4 2 4 4 4 2 4 4 2 4 2 4 0 4 512
+4 2 4 2 2 2 2 4 4 4 4 0 2 4 4 0 4 0 4 4
+0 0 4 2 2 2 4 2 1024 4 2 0 128 0 4 0 2 4 0 2
+512 0 0 4 2 32 2 4 2 0 0 2 2 4 4 2 4 32 4 2
+4 8 2 0 0 256 4 4 4 256 4 4 2 256 0 0 2 0 4 2
+4 4 16 2 2 2 4 256 4 4 2 2 4 2 2 0 0 4 2 2
+4 2 0 4 2 2 2 2 128 2 512 0 1024 4 2 0 2 4 2 2
+4 32 4 0 4 4 4 2 64 4 0 4 2 4 4 2 4 4 0 16
+0 4 2 2 4 64 4 4 2 2 256 4 1024 4 4 512 0 0 4 2
+4 8 2 4 4 4 2 2 2 2 4 32 2 512 4 4 2 4 2 0
+256 0 4 2 128 2 64 4 4 2 2 0 2 4 0 0 2 2 0 2
+4 0 4 64 2 2 4 4 4 4 4 4 2 4 0 4 256 2 0 4
+0 4 0 4 32 2 4 512 4 8 128 4 4 1024 4 1024 4 16 4 0
+0 64 2 64 2 0 0 0 4 4 0 4 256 128 4 4 2 0 128 4
+0 256 16 0 2 0 2 4 0 2 0 4 4 4 2 2 256 0 0 2
+16 0 2 4 64 256 2 4 4 4 0 16 2 2 2 4 128 2 2 4
+4 128 4 4 0 4 32 512 256 4 128 256 32 4 0 2 4 0 2 2
+4 4 2 16 2 4 2 0 32 0 4 2 4 4 2 4 512 0 128 4
+4 2 4 2 64 0 2 2 2 2 256 2 0 0 8 4 128 2 2 32
+20 right
+0 2 4 2 0 4 4 2 4 0 0 4 2 0 2 4 4 2 0 4
+2 0 0 8 4 4 2 4 0 0 2 0 2 0 0 4 2 256 0 2
+0 0 2 0 4 0 0 4 4 2 64 4 4 4 2 4 4 64 0 2
+2 4 2 0 2 4 0 2 4 0 4 2 4 2 2 8 4 2 4 128
+4 4 2 2 0 32 32 0 2 2 2 0 0 2 0 4 2 4 4 0
+2 2 2 4 2 4 2 0 0 0 4 4 1024 2 32 2 2 4 2 4
+0 4 32 4 2 0 4 2 4 0 4 4 4 16 4 0 4 2 4 0
+0 2 4 2 4 16 0 2 0 4 4 2 2 0 512 2 2 4 2 2
+4 0 2 4 4 0 2 2 0 4 2 4 4 64 2 2 4 16 2 0
+2 2 4 4 2 512 2 2 4 4 4 0 4 8 0 32 4 2 4 4
+2 2 4 0 0 0 2 2 2 2 0 2 64 512 2 0 2 0 2 1024
+4 0 0 64 4 256 0 0 2 4 4 0 2 2 8 0 2 0 4 64
+2 16 2 2 4 0 16 0 4 8 0 0 2 1024 8 2 0 256 0 2
+4 2 4 4 2 0 0 512 0 32 4 4 0 0 2 0 16 0 2 2
+4 2 4 2 2 4 8 4 256 2 2 4 2 4 4 4 2 512 0 0
+4 0 4 2 32 4 4 4 0 0 32 256 4 2 4 4 4 0 4 2
+128 1024 2 2 0 8 2 0 4 256 0 2 4 4 4 2 2 0 2 2
+4 2 1024 32 4 4 4 4 2 4 4 2 0 2 4 2 4 0 512 2
+2 0 2 4 4 256 0 2 4 2 16 2 4 4 128 0 2 4 64 0
+128 0 0 4 4 2 2 0 4 0 4 0 4 4 0 256 2 8 2 0
+20 up
+4 4 512 2 0 2 128 4 2 2 0 0 0 2 0 4 2 4 4 4
+0 4 0 2 16 4 4 2 512 4 4 4 2 2 2 4 32 2 4 4
+2 1024 2 2 16 4 256 2 0 4 4 0 4 4 16 2 8 0 2 0
+0 4 4 2 256 2 0 4 16 2 2 4 0 0 4 2 4 2 2 0
+1024 4 4 256 16 2 4 512 0 4 4 0 4 4 2 4 4 0 0 2
+0 4 2 4 4 0 2 0 0 2 4 0 64 4 2 2 4 2 2 4
+2 4 2 0 2 2 2 4 1024 2 4 4 0 4 2 0 64 4 4 2
+1024 4 2 4 2 2 0 2 16 2 1024 2 4 0 4 32 0 0 4 2
+0 4 0 512 2 4 2 0 0 4 4 0 4 0 2 4 0 2 2 64
+4 2 0 0 0 4 4 16 4 4 4 2 1024 512 0 32 4 8 0 0
+4 4 4 2 1024 2 32 4 16 4 2 4 128 4 4 2 4 64 0 4
+8 2 4 0 0 4 2 4 0 0 4 2 4 4 0 4 2 512 256 2
+4 0 4 2 0 2 64 2 2 4 2 0 4 8 2 2 64 2 4 4
+4 4 2 2 2 64 0 4 2 4 2 4 4 256 1024 2 4 4 0 4
+2 0 4 2 2 0 4 0 2 4 0 1024 2 2 4 4 0 2 64 4
+0 0 32 2 0 4 0 2 2 2 4 0 4 0 4 64 16 2 4 2
+128 4 256 2 2 128 0 2 32 4 16 2 1024 128 2 128 16 4 8 4
+2 4 0 2 32 2 256 0 4 0 512 2 4 4 4 4 4 4 2 4
+0 0 2 0 0 4 0 0 0 4 2 0 0 4 8 8 512 2 4 2
+2 0 2 4 2 128 128 0 0 4 4 4 2 4 4 4 4 4 4 4
diff --git a/kickstart_2014/src/y2014_round_a/B-small-practice.in b/kickstart_2014/src/y2014_round_a/B-small-practice.in
new file mode 100644
index 0000000..05d653c
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/B-small-practice.in
@@ -0,0 +1,101 @@
+20
+4 right
+0 0 2 4
+0 0 4 8
+0 2 16 32
+0 2 2 16
+4 up
+0 0 2 4
+0 0 4 8
+0 2 16 32
+0 0 4 16
+4 up
+0 0 0 0
+0 0 0 0
+0 0 0 0
+0 0 0 0
+4 down
+2 2 2 2
+2 2 2 2
+2 2 2 2
+2 2 2 2
+4 left
+2 2 2 2
+2 2 2 2
+2 2 2 2
+2 2 2 2
+4 right
+2 2 2 2
+2 2 2 2
+2 2 2 2
+2 2 2 2
+4 up
+2 2 2 2
+2 2 2 2
+2 2 2 2
+2 2 2 2
+4 left
+2 2 4 4
+2 2 4 4
+2 2 4 4
+2 2 4 4
+4 down
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+4 left
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+4 right
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+4 up
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+1024 1024 1024 1024
+4 up
+0 512 512 256
+0 0 0 128
+0 0 0 2
+256 0 0 4
+4 right
+0 0 512 0
+0 0 0 0
+128 0 0 0
+0 0 0 0
+4 right
+4 0 4 32
+0 0 0 0
+2 0 0 64
+0 2 0 0
+4 right
+0 0 0 0
+1024 0 0 0
+0 0 0 8
+2 0 2 0
+4 left
+0 16 0 4
+0 0 1024 4
+1024 8 8 1024
+4 4 128 1024
+4 left
+0 16 0 2
+128 2 16 128
+1024 2 4 256
+4 2 0 4
+4 down
+128 4 0 1024
+0 4 2 32
+4 4 8 4
+4 512 256 4
+4 up
+0 4 4 0
+2 2 128 2
+4 4 256 0
+8 256 2 4
diff --git a/kickstart_2014/src/y2014_round_a/b.rs b/kickstart_2014/src/y2014_round_a/b.rs
index e6a1c2d..9031b0d 100644
--- a/kickstart_2014/src/y2014_round_a/b.rs
+++ b/kickstart_2014/src/y2014_round_a/b.rs
@@ -4,35 +4,36 @@ use std::cmp::min;
 use std::cmp::Ordering;
 use std::io::Write;
 use std::usize;
+use codejam::util::grid::Grid;
 
 /*
-Scan line
+Grid
 */
+const DIR_STRINGS : [&str; 4] = ["left", "right", "up", "down"];
+
 pub fn solve_all_cases()
 {
     run_cases(
         &["B-small-practice", "B-large-practice"],
-        "y2008qual",
+        "y2014_round_a",
         |reader, buffer| {
             let t = reader.read_int();
 
             for case_no in 1..=t {
-                let t = reader.read_int();
-
-                let (na, nb) = reader.read_tuple_2();
-
-                let read_times = |in_string: String| -> [usize; 2] {
-                    [
-                        &in_string[0..2].parse::<usize>().unwrap() * 60
-                            + in_string[3..5].parse::<usize>().unwrap(),
-                        &in_string[6..8].parse::<usize>().unwrap() * 60
-                            + in_string[9..11].parse::<usize>().unwrap(),
-                    ]
-                };
-
-                let arrivals: Vec<_> = (0..na).map(|_| read_times(reader.read_string())).collect();
-                let departures: Vec<_> =
-                    (0..nb).map(|_| read_times(reader.read_string())).collect();
+                let in_line = reader.read_string_line();
+                assert_eq!(2, in_line.len());
+                let n : usize = in_line[0].parse().unwrap();
+                let dir = in_line[1];
+
+                let mut grid = Grid::new(n,n);
+
+                for r in 0..n {
+                    let grid_row = reader.read_num_line();
+                    assert_eq!(n, grid_row.len());
+                    for (c, val) in grid_row.into_iter() {
+                        grid[(r, c)] = val;
+                    }
+                }
 
                 if case_no != 1 {
                     // continue;
@@ -47,83 +48,9 @@ pub fn solve_all_cases()
     );
 }
 
-#[derive(Eq, PartialEq)]
-struct TrainEvent
-{
-    time: usize,
-    num_train_change: i64,
-}
-impl Ord for TrainEvent
-{
-    fn cmp(&self, rhs: &TrainEvent) -> Ordering
-    {
-        self.time
-            .cmp(&rhs.time)
-            .then_with(|| rhs.num_train_change.cmp(&self.num_train_change))
-    }
-}
-
-impl PartialOrd for TrainEvent
+fn solve(dir: String, grid: &Grid<u16>) -> String
 {
-    fn partial_cmp(&self, other: &TrainEvent) -> Option<Ordering>
-    {
-        Some(self.cmp(other))
-    }
-}
-
-fn find_required_trains(station_events: &mut Vec<TrainEvent>) -> i64
-{
-    debug!("find_required_trains");
-    station_events.sort();
-
-    //so as trains arrive (+1) they cannot affect the minimum
-    let mut trains_min = 0;
-    let mut trains = 0;
-
-    for evt in station_events.iter() {
-        debug!(
-            "Train event at time {}.  Change {}",
-            evt.time, evt.num_train_change
-        );
-        trains += evt.num_train_change;
-        trains_min = min(trains, trains_min);
-        debug!("Trains now {}.  min {}", trains, trains_min);
-    }
-
-    debug!("Done find_required_trains {} ", trains_min.abs());
-    trains_min.abs()
-}
-
-fn solve(turn_around_time: usize, a_to_b: &[[usize; 2]], b_to_a: &[[usize; 2]]) -> [i64; 2]
-{
-    debug!("{:?}", a_to_b[0]);
-
-    let mut station_a_events = Vec::new();
-    let mut station_b_events = Vec::new();
 
-    for time in a_to_b.iter() {
-        station_a_events.push(TrainEvent {
-            time: time[0],
-            num_train_change: -1,
-        });
-        station_b_events.push(TrainEvent {
-            time: time[1] + turn_around_time,
-            num_train_change: 1,
-        });
-    }
-    for time in b_to_a.iter() {
-        station_b_events.push(TrainEvent {
-            time: time[0],
-            num_train_change: -1,
-        });
-        station_a_events.push(TrainEvent {
-            time: time[1] + turn_around_time,
-            num_train_change: 1,
-        });
-    }
 
-    [
-        find_required_trains(&mut station_a_events),
-        find_required_trains(&mut station_b_events),
-    ]
+    "3".to_string()
 }

From ff6a6054c46d60ef9d00183c7ca91b009de44752 Mon Sep 17 00:00:00 2001
From: eric7237cire <eric7237cire@gmail.com>
Date: Thu, 28 Feb 2019 21:32:20 -0300
Subject: [PATCH 122/122] kickstart 2014 b

---
 codejam/src/util/grid.rs                      |   10 +
 kickstart_2014/src/main.rs                    |    2 +-
 kickstart_2014/src/y2014_round_a/A-sample.out |    3 -
 .../src/y2014_round_a/B-large-practice.out    | 2052 +++++++++++++++++
 kickstart_2014/src/y2014_round_a/B-sample.in  |   21 +
 kickstart_2014/src/y2014_round_a/B-sample.out |   20 +
 .../src/y2014_round_a/B-small-practice.out    |  100 +
 kickstart_2014/src/y2014_round_a/b.rs         |   90 +-
 8 files changed, 2284 insertions(+), 14 deletions(-)
 create mode 100644 kickstart_2014/src/y2014_round_a/B-large-practice.out
 create mode 100644 kickstart_2014/src/y2014_round_a/B-sample.in
 create mode 100644 kickstart_2014/src/y2014_round_a/B-sample.out
 create mode 100644 kickstart_2014/src/y2014_round_a/B-small-practice.out

diff --git a/codejam/src/util/grid.rs b/codejam/src/util/grid.rs
index ae31cbf..51064e2 100644
--- a/codejam/src/util/grid.rs
+++ b/codejam/src/util/grid.rs
@@ -249,6 +249,16 @@ impl<T> Index<(usize, usize)> for Grid<T>
         &self.data[row_col_index.0 * self.C + row_col_index.1]
     }
 }
+impl<T> Index<(isize, isize)> for Grid<T>
+{
+    type Output = T;
+
+    fn index(&'_ self, row_col_index: (isize, isize)) -> &'_ T
+    {
+        &self.data[ (row_col_index.0 * self.C as isize + row_col_index.1) as usize]
+    }
+}
+
 //set a cell
 impl<T> IndexMut<(usize, usize)> for Grid<T>
 {
diff --git a/kickstart_2014/src/main.rs b/kickstart_2014/src/main.rs
index 08b2895..50f5afe 100644
--- a/kickstart_2014/src/main.rs
+++ b/kickstart_2014/src/main.rs
@@ -18,5 +18,5 @@ pub fn run_y2014_round_a()
 fn main()
 {
     init_log();
-    y2014_round_a::a::solve_all_cases();
+    y2014_round_a::b::solve_all_cases();
 }
diff --git a/kickstart_2014/src/y2014_round_a/A-sample.out b/kickstart_2014/src/y2014_round_a/A-sample.out
index 27d9a2c..1c817f2 100644
--- a/kickstart_2014/src/y2014_round_a/A-sample.out
+++ b/kickstart_2014/src/y2014_round_a/A-sample.out
@@ -1,4 +1 @@
 Case #1: 1110000
-Case #2: ERROR!
-Case #3: 0100011
-Case #4: 0010011
diff --git a/kickstart_2014/src/y2014_round_a/B-large-practice.out b/kickstart_2014/src/y2014_round_a/B-large-practice.out
new file mode 100644
index 0000000..10bbc5b
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/B-large-practice.out
@@ -0,0 +1,2052 @@
+Case #1:
+0 0 2 4
+0 0 4 8
+0 2 16 32
+0 0 4 16
+Case #2:
+0 2 2 4
+0 0 4 8
+0 0 16 32
+0 0 4 16
+Case #3:
+0 0 0 0
+0 0 0 0
+0 0 0 0
+0 0 0 0
+Case #4:
+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 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 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 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
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+Case #5:
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0
+Case #6:
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4
+Case #7:
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
+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 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 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 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
+Case #8:
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+4 8 16 32 64 128 256 512 1024 2048 0 0 0 0 0 0 0 0 0 0
+Case #9:
+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 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 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 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
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+Case #10:
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 0 0 0 0 0 0 0 0 0 0
+Case #11:
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+0 0 0 0 0 0 0 0 0 0 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+Case #12:
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048 2048
+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 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 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 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
+Case #13:
+4 512 512 256 4 128 8 128 512 512 4 2 256 4 8 4 4 32 128 512
+32 64 2 2 2 64 4 2 1024 0 4 4 4 8 0 1024 1024 4 1024 128
+512 16 8 4 256 4 4 16 8 0 0 128 128 8 0 8 4 2048 512 1024
+64 8 4 2 2 8 2 0 128 0 0 16 8 0 0 512 256 2 0 128
+16 256 128 8 512 0 0 0 4 0 0 2 512 0 0 2 32 0 0 64
+0 4 2 128 0 0 0 0 2 0 0 128 4 0 0 64 4 0 0 128
+0 0 128 2 0 0 0 0 64 0 0 2 0 0 0 4 0 0 0 0
+0 0 0 512 0 0 0 0 0 0 0 4 0 0 0 128 0 0 0 0
+0 0 0 64 0 0 0 0 0 0 0 256 0 0 0 16 0 0 0 0
+0 0 0 512 0 0 0 0 0 0 0 4 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 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 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
+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
+Case #14:
+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 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 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 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 1024 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 256 0 0 1024 0 0 0 0 0 8 0 0 0
+0 0 0 0 0 0 0 2 0 0 4 2 32 0 0 512 4 0 0 0
+0 0 0 8 0 0 0 4 64 0 1024 512 4 0 0 8 128 0 32 0
+0 0 0 16 0 0 0 2 4 0 8 4 1024 0 4 2 2 0 2 4
+0 0 32 1024 0 0 4 16 4 0 4 2 8 256 8 256 512 1024 16 2
+128 2 128 32 2 1024 16 512 16 512 256 16 4 64 512 512 4 2 2 8
+2 4 2 8 512 4 2 4 4 4 4 2 32 4 4 128 256 128 64 512
+32 256 4 8 1024 128 4 2 256 32 64 8 1024 1024 64 32 1024 8 32 2
+4 4 2 256 4 4 2 256 512 4 512 512 4 2 2 2 256 4 8 256
+Case #15:
+4 4 4 16 4 512 512 4 256 4 2 4 2 8 8 8 8 512 128 64
+1024 1024 256 512 2 4 2 16 0 1024 512 128 64 0 16 64 128 4 2 4
+128 512 4 2 4 128 4 2 0 4 2 64 4 0 4 2 2 2 4 32
+4 256 2 32 32 4 16 256 0 8 1024 512 32 0 64 8 0 32 1024 2
+16 4 256 512 4 512 0 4 0 16 0 2 8 0 512 512 0 4 0 1024
+0 2 32 0 1024 2 0 128 0 512 0 4 2 0 256 4 0 0 0 8
+0 0 2 0 8 4 0 0 0 0 0 2 4 0 0 0 0 0 0 2
+0 0 128 0 4 0 0 0 0 0 0 128 0 0 0 0 0 0 0 8
+0 0 0 0 0 0 0 0 0 0 0 2 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 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 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
+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 0 0 0 0
+Case #16:
+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 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 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 0 0 0 0 0 0 128 0 0 0 0 2 0 0 0 0 0 0 2
+4 0 0 0 0 0 0 2 0 0 0 0 32 0 2 0 0 0 0 4
+2 0 0 0 0 2 0 32 1024 16 0 2 2 0 8 0 0 0 0 256
+4 0 4 64 2 64 0 4 4 256 4 256 4 0 8 0 2 64 0 16
+128 0 8 4 16 8 8 2 1024 1024 8 512 1024 32 128 0 512 4 4 2
+2 4 64 128 8 32 2 32 256 512 128 1024 64 8 1024 512 4 128 16 8
+128 32 256 256 4 64 4 2 4 2 4 16 4 64 4 2048 1024 2 2 4
+512 2 2 2 8 4 1024 1024 1024 128 32 2 256 4 8 4 4 4 512 512
+Case #17:
+4 2 32 512 1024 4 2 1024 2 4 2 4 4 4 64 128 64 8 2 1024
+2 0 1024 4 16 512 128 4 4 128 256 2 2 32 2 4 2 512 32 16
+4 0 4 2 4 4 0 256 512 2 32 16 4 1024 64 2 0 4 2 4
+2 0 16 4 512 64 0 32 2 64 4 256 4 4 0 4 0 1024 4 4
+32 0 2 2 4 2 0 4 32 2 8 4 0 0 0 2 0 16 512 4
+8 0 512 128 512 256 0 16 256 64 0 2 0 0 0 4 0 1024 2 256
+0 0 4 4 256 0 0 2 8 8 0 128 0 0 0 0 0 2 512 512
+0 0 0 2 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0
+0 0 0 64 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0
+0 0 0 4 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
+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 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 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
+Case #18:
+4 128 4 1024 8 16 2 8 4 4 32 64 512 64 2 4 512 512 4 1024
+512 2 512 32 4 64 4 16 8 2 4 32 8 2 128 16 2 4 0 64
+4 8 1024 256 512 128 64 256 4 4 1024 1024 4 256 8 2 4 2 0 4
+1024 2 2 4 2 4 2 4 1024 8 64 8 1024 128 0 256 2 512 0 64
+256 0 0 2 0 2 1024 4 2 4 8 4 0 0 0 0 512 256 0 16
+1024 0 0 512 0 1024 128 0 16 16 0 512 0 0 0 0 2 4 0 4
+4 0 0 0 0 0 0 0 0 64 0 0 0 0 0 0 4 512 0 2
+2 0 0 0 0 0 0 0 0 512 0 0 0 0 0 0 256 32 0 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 32
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 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 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #19:
+512 4 512 32 1024 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 256 16 8 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 256 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 512 32 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 512 16 4 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 128 512 256 4 32 2 64 8 256 512 2 4 0 0 0 0 0 0 0
+4 128 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 1024 4 8 128 64 16 2 0 0 0 0 0 0 0 0 0 0 0
+2 8 8 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 1024 4 2 8 4 8 256 64 0 0 0 0 0 0 0 0 0 0 0
+4 1024 4 256 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 2 4 512 4 1024 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 8 32 4 4 256 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 512 64 128 64 4 256 4 0 0 0 0 0 0 0 0 0 0 0 0
+512 1024 512 128 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 2 4 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 2 8 64 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #20:
+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 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 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 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 4 4 0 0
+0 0 0 0 32 0 0 0 0 0 2 0 0 0 0 0 256 16 0 128
+0 0 0 0 16 0 0 0 64 0 4 0 0 0 0 0 8 2 0 256
+4 0 0 0 32 0 0 0 2 0 128 0 0 8 0 0 1024 64 0 4
+2 0 0 512 1024 2 0 0 64 8 4 4 64 2 0 512 4 4 32 2
+1024 0 0 2 256 256 0 0 32 1024 8 4 8 256 512 2 1024 512 4 256
+4 0 0 16 16 64 2 0 4 4 4 4 64 32 16 64 128 16 64 32
+64 32 0 128 64 16 4 256 1024 512 8 512 1024 256 32 256 256 2 4 16
+128 4 256 2 4 64 1024 2 32 8 256 128 256 512 2 2 2 4 256 32
+32 2 4 1024 128 4 2 64 64 4 4 2 4 4 8 4 4 2 32 128
+Case #21:
+64 4 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 256 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 1024 256 4 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 128 16 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 2 32 4 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 512 8 1024 512 32 4 256 4 0 0 0 0 0 0 0 0 0 0 0
+4 8 4 16 128 4 256 2 1024 0 0 0 0 0 0 0 0 0 0 0
+256 512 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 8 2 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 4 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 4 256 512 16 4 16 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 4 8 4 2 4 512 2 0 0 0 0 0 0 0 0 0 0 0
+4 16 4 32 2 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 32 4 32 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 4 32 2 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 4 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 16 128 2 8 32 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 1024 4 1024 8 64 512 64 0 0 0 0 0 0 0 0 0 0 0 0
+128 2 8 4 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #22:
+4 256 16 8 128 4 8 4 128 512 2 4 2 64 2 1024 256 4 16 256
+64 4 4 8 32 2 2 2 4 256 1024 32 64 256 0 8 4 2 4 2
+1024 128 4 4 256 16 8 128 2 2 16 1024 2 8 0 16 4 1024 4 4
+64 0 2 0 512 256 8 8 16 16 8 8 4 4 0 4 2 16 256 2
+4 0 4 0 16 128 2 1024 64 4 0 0 0 32 0 1024 8 4 16 128
+4 0 0 0 128 8 0 0 8 8 0 0 0 64 0 256 4 4 1024 4
+2 0 0 0 0 2 0 0 32 0 0 0 0 0 0 4 0 2 0 2
+256 0 0 0 0 4 0 0 256 0 0 0 0 0 0 0 0 0 0 16
+0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 128 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 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 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 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
+Case #23:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 2 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 8 4 1024 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 16 512 64 128 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 4 64 16
+0 0 0 0 0 0 0 0 0 0 256 4 8 1024 8 32 256 1024 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 32 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1024 2 128 256 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 1024 64 32
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 512 8 1024 128
+0 0 0 0 0 0 0 0 0 0 0 0 256 32 2 8 16 64 2 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4 128 4 8 1024
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 1024 8
+0 0 0 0 0 0 0 0 0 0 0 0 8 32 4 2 512 32 256 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 4 2 128
+0 0 0 0 0 0 0 0 0 0 0 512 64 4 16 8 64 4 128 64
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 128 32 1024 4 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 64 16 8 1024 256 16 512
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 16 2 4 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 16 32 2 4
+Case #24:
+2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 512 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 2 4 64 256 1024 2 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 4 8 4 64 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 2 128 8 512 128 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 1024 512 4 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 4 32 512 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 1024 16 512 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+128 4 4 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 8 128 2 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 2 1024 8 2 32 2 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 8 32 4 1024 8 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 64 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 4 32 128 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 1024 2 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 64 2 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 32 128 8 1024 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 64 2 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 64 4 1024 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #25:
+2 4 8 4 16 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 32 32 64 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 128 1024 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 8 4 128 4 256 64 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 256 8 4 2 256 128 8 0 0 0 0 0 0 0 0 0 0 0 0
+8 2 64 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 128 4 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 128 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 16 8 4 128 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 2 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 16 256 16 2 1024 512 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 4 2 512 8 128 4 0 0 0 0 0 0 0 0 0 0 0 0
+128 4 2 4 64 128 2 4 2 4 0 0 0 0 0 0 0 0 0 0
+128 8 64 1024 8 4 16 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 8 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 4 4 8 2 1024 4 64 8 0 0 0 0 0 0 0 0 0 0 0
+8 256 4 64 32 16 128 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 2 256 16 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 512 1024 4 32 1024 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 16 256 128 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #26:
+128 64 2 2 4 1024 8 16 512 512 2 256 64 2 512 32 4 4 4 64
+1024 2 32 16 512 4 128 256 4 1024 512 4 8 16 256 2 128 256 2 128
+4 2048 512 4 64 2 2 2 8 4 4 2 4 2 2 4 2 8 256 512
+4 256 64 16 2 0 1024 1024 128 32 32 1024 1024 4 8 2 512 0 8 4
+16 8 0 2 4 0 64 0 1024 256 8 4 4 128 4 128 512 0 16 0
+512 4 0 0 2 0 0 0 2 0 512 256 256 512 2 0 2 0 128 0
+2 2 0 0 256 0 0 0 128 0 0 0 128 2 0 0 0 0 64 0
+1024 64 0 0 0 0 0 0 2 0 0 0 64 0 0 0 0 0 0 0
+4 2 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0
+0 128 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 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 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 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
+Case #27:
+128 2 32 2 4 2 8 128 0 0 0 0 0 0 0 0 0 0 0 0
+4 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 512 2 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 1024 64 2 512 4 2 4 0 0 0 0 0 0 0 0 0 0 0 0
+1024 1024 64 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 64 4 512 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 1024 32 4 16 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 2 4 256 128 256 4 4 32 0 0 0 0 0 0 0 0 0 0 0
+2 4 32 64 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 8 4 2 128 32 16 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 128 4 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 8 128 32 512 16 512 16 32 128 0 0 0 0 0 0 0 0 0 0
+32 1024 2 4 256 128 8 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 64 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 32 8 4 512 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 2 4 8 2 128 64 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 1024 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 128 4 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 2 512 32 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 4 1024 4 16 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #28:
+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 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 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 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 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16
+0 2 0 0 0 0 0 0 0 16 8 0 0 0 0 0 0 0 0 2
+0 512 0 0 0 0 64 0 0 2 4 0 0 0 0 0 4 0 0 128
+32 32 0 0 0 0 16 0 0 1024 256 0 0 256 4 32 128 0 0 64
+16 256 0 0 0 2 8 0 0 4 2 4 0 32 256 256 2 0 0 4
+512 4 0 0 512 512 256 1024 16 2 4 32 0 1024 2 2 4 0 2 2
+4 512 8 0 2 2 4 2 256 4 128 1024 2 4 512 16 64 0 256 32
+32 4 256 64 1024 128 2 8 4 2 8 4 256 512 2 512 8 4 4 4
+128 64 4 8 64 256 128 64 2 4 2 2 4 1024 4 256 4 4 256 64
+1024 8 8 8 2 2 8 2 8 2 1024 512 256 2 512 2 256 32 64 16
+Case #29:
+8 2 4 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 16 1024 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 1024 256 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 256 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 4 2 512 32 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 1024 256 32 8 1024 256 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 8 128 2 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 128 8 64 4 16 512 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 4 512 2 32 4 16 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 2048 2 16 32 2 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 64 4 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 32 512 64 256 4 128 8 0 0 0 0 0 0 0 0 0 0 0 0
+256 64 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 256 8 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 16 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 4 2 8 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 2 128 4 64 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 4 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #30:
+8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 512 16 4 64 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 256 32 4 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 4 32 1024 16 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 4 4 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 64 256 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 256 2 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 2 32 4 32 4 1024 128 0 0 0 0 0 0 0 0 0 0 0 0
+256 1024 16 8 2 4 2 16 32 4 4 0 0 0 0 0 0 0 0 0
+128 256 8 4 2 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 16 1024 256 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 4 2 4 1024 4 8 512 0 0 0 0 0 0 0 0 0 0 0 0
+2 64 2 4 4 8 2 8 32 0 0 0 0 0 0 0 0 0 0 0
+256 1024 2 128 512 32 8 64 4 128 0 0 0 0 0 0 0 0 0 0
+32 4 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 128 8 4 4 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 512 8 512 2 512 16 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 4 32 2 256 1024 128 4 256 8 0 0 0 0 0 0 0 0 0 0
+32 4 1024 4 128 64 4 8 0 0 0 0 0 0 0 0 0 0 0 0
+Case #31:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 64 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 16 4 32 2
+0 0 0 0 0 0 0 0 0 0 0 4 16 64 1024 4 256 64 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 32 16 8 2 4 512 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 64 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 32 8 2 16 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 32 16 8 128 32 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 1024 64 16 32
+0 0 0 0 0 0 0 0 0 0 0 4 1024 512 1024 2 64 2 1024 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 32 64 512 4 512
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 8 8 2 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 4 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 512 512 2 4 32 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 8 128 8 1024 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 2 512 2 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 2 32 512
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 2 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 32 128 512 4 32 4 2
+Case #32:
+2 512 2 4 16 256 2 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 2 16 8 128 16 0 0 0 0 0 0 0 0 0 0 0 0 0
+64 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 4 64 512 32 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 32 512 2 32 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 4 128 512 32 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 4 2 256 4 64 4 0 0 0 0 0 0 0 0 0 0 0 0
+16 4 2 512 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 4 2 8 32 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 4 256 512 32 1024 32 16 2 8 0 0 0 0 0 0 0 0 0 0
+8 4 2 4 512 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 16 64 2 256 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 32 2 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 4 4 1024 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 8 32 128 32 128 16 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 64 256 64 4 256 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 4 32 1024 8 4 128 4 2 0 0 0 0 0 0 0 0 0 0 0
+16 256 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+16 2 32 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #33:
+256 8 16 512 512 64 8 4 2 4 4 16 8 8 8 32 16 128 8 8
+2 2 1024 16 256 16 4 64 4 2 2 2 128 2 16 128 128 1024 4 4
+8 4 4 512 2 8 0 8 64 512 1024 8 4 16 8 512 512 32 64 16
+64 128 2 4 4 64 0 4 512 2 4 0 32 8 1024 4 2 2 8 4
+32 8 8 1024 0 0 0 32 4 32 1024 0 16 0 4 2 8 0 512 512
+64 4 0 4 0 0 0 128 32 4 64 0 2 0 8 8 0 0 0 4
+1024 0 0 0 0 0 0 2 1024 64 8 0 4 0 8 0 0 0 0 0
+4 0 0 0 0 0 0 64 0 0 0 0 128 0 16 0 0 0 0 0
+256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 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 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 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 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
+Case #34:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 2 64
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 2 32
+0 0 0 0 0 0 0 0 0 0 0 0 4 2 4 16 2 8 256 2
+0 0 0 0 0 0 0 0 0 0 0 0 8 128 512 8 4 16 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 256 4 128 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 32 128 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 64 1024 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 512 16 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1024 2 512 4 64
+0 0 0 0 0 0 0 0 0 0 16 32 2 4 16 128 8 512 4 256
+0 0 0 0 0 0 0 0 0 0 0 2 64 2 8 4 2 4 512 32
+0 0 0 0 0 0 0 0 0 0 0 0 64 32 256 64 2 4 512 32
+0 0 0 0 0 0 0 0 0 0 0 128 8 2 512 128 4 1024 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 256 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 64 512 2 128 4
+0 0 0 0 0 0 0 0 0 0 0 2 64 4 1024 16 2 64 2 512
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 64 32 2 512
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 2 128 2 1024 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 2 32 2048 16 4
+Case #35:
+2 512 2 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 4 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+256 2 8 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 4 512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1024 8 2 1024 2 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 128 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+512 4 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 1024 512 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 32 512 2 4 64 4 2 0 0 0 0 0 0 0 0 0 0 0 0
+4 64 16 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+2 4 256 16 8 16 32 2 0 0 0 0 0 0 0 0 0 0 0 0
+4 4 4 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+32 4 2 8 128 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+Case #36:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
+0 0 0 0 0 0 0 0 0 0 0 0 8 8 2 4 64 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 256 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 128 4 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4 2 4 4 32
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 2 4 8 32
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 2 8 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 2 4 16 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 256 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 1024 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 256 2 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 256 4 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 8 128 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 1024 16
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 32 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 2 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 64
+Case #37:
+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 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 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 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 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 1024 0 0 0 2 0 0 0 8 0 4 0 0 0 0 0
+0 0 0 1024 256 0 2 0 8 0 1024 0 8 0 2 0 0 128 0 4
+2 0 0 256 4 0 4 2 32 0 4 0 512 0 4 0 0 4 0 2
+8 0 4 2 2 4 512 8 2 2 4 4 4 4 2 0 8 64 0 8
+8 4 4 4 16 2 4 8 4 4 512 4 4 2 1024 0 8 4 0 2
+2 2 4 512 2 4 16 512 2 2 4 1024 64 4 2 8 2 8 4 4
+128 4 2 2 8 4 4 4 8 4 8 8 8 4 4 8 128 2 32 2
+Case #38:
+2 4 2 4 512 4 64 4 4 2 8 8 2 4 2 1024 2 2 8 2
+64 2 8 4 8 32 8 0 4 0 512 4 64 64 4 2 4 4 8 4
+2 64 4 1024 4 4 4 0 4 0 16 128 4 256 2 4 4 2 1024 2
+8 4 4 2 2 4 0 0 2 0 4 0 2 128 1024 0 0 4 2 512
+4 8 0 0 4 0 0 0 0 0 8 0 0 4 16 0 0 2 4 0
+2 4 0 0 0 0 0 0 0 0 4 0 0 0 2 0 0 256 0 0
+0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 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 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 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 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 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
+Case #39:
+4 8 2 4 2 1024 8 4 2 2 8 128 8 32 8 512 8 4 4 8
+512 8 4 64 4 8 2 4 4 4 2 4 2 1024 4 4 2 4 2 4
+4 8 32 4 4 1024 8 16 4 2 4 0 4 2 0 256 8 2 4 64
+2 2 4 2 4 4 8 1024 4 8 0 0 4 0 0 4 4 0 2 2
+8 0 0 4 128 2 4 0 2 4 0 0 0 0 0 2 2 0 4 0
+0 0 0 32 2 4 0 0 4 0 0 0 0 0 0 0 4 0 0 0
+0 0 0 64 4 2 0 0 0 0 0 0 0 0 0 0 4 0 0 0
+0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 512 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 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 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 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
+Case #40:
+4 8 2 4 64 4 4 4 4 2 4 8 2 2 16 4 8 8 4 4
+2 1024 8 4 32 128 8 2 2 1024 2 8 256 8 8 4 4 8 4 4
+16 4 2 4 2 4 4 4 4 2 4 4 8 2 8 2 1024 4 2 0
+4 4 8 2 4 2 0 2 2 1024 4 2 2 4 32 8 2 4 0 0
+0 2 0 4 2 32 0 64 0 4 4 8 4 4 4 256 0 2 0 0
+0 0 0 0 4 4 0 4 0 0 32 4 1024 8 2 4 0 0 0 0
+0 0 0 0 512 256 0 0 0 0 16 0 0 8 0 0 0 0 0 0
+0 0 0 0 1024 0 0 0 0 0 4 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 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 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 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 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
+Case #41:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 16 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 32 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 2 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 2 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 2 128 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 64 8 8 128 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 256 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 512 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 8 8 8 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 16 8 4 2 64 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 2 32 64 32
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 64 2 256 4
+Case #42:
+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 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 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0
+4 0 0 0 0 0 0 0 2 0 2 0 0 1024 0 0 0 0 0 0
+4 0 0 0 0 8 0 0 4 2 512 16 0 4 0 0 0 0 0 0
+2 2 256 2 0 16 0 0 2 4 4 4 2 16 4 2 0 4 0 0
+512 32 4 4 256 2 8 0 128 4 4 8 32 2 4 16 0 2 0 4
+2 4 2 256 4 4 512 2 64 128 4 4 4 64 8 8 4 256 0 4
+1024 8 4 4 8 8 4 4 2 4 4 4 2 1024 2 2 4 2 128 4
+Case #43:
+8 8 2 4 8 2 4 4 4 128 2 32 4 256 2 2 2 2 2 8
+64 4 0 4 4 256 8 4 512 4 4 8 8 4 128 1024 8 4 8 2
+0 2 0 0 4 0 2 0 0 16 2 4 8 256 4 4 4 2 16 4
+0 8 0 0 4 0 16 0 0 2 4 0 4 8 4 4 2 0 0 0
+0 2 0 0 0 0 0 0 0 4 0 0 2 0 4 2 4 0 0 0
+0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 2 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 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 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 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 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
+Case #44:
+4 8 8 2 4 64 4 1024 4 2 2 4 4 4 1024 32 8 8 2 2
+2 4 8 1024 4 8 8 2 128 4 256 32 2 4 4 2 256 256 4 32
+4 0 4 2 1024 2 8 4 4 64 16 4 8 4 0 4 32 4 0 2
+0 0 2 1024 2 4 2 2 2 2 4 0 8 2 0 2 0 8 0 8
+0 0 8 2 0 4 8 1024 0 4 8 0 0 0 0 4 0 0 0 4
+0 0 0 4 0 4 4 8 0 0 4 0 0 0 0 0 0 0 0 2
+0 0 0 0 0 0 64 4 0 0 2 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 8 2 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 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
+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 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 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
+Case #45:
+8 8 128 4 4 2 2 4 2 16 1024 32 4 8 8 4 2 512 4 4
+512 4 256 0 0 512 8 2 0 32 4 2 2 8 4 4 8 4 4 32
+2 2 2 0 0 2 2 64 0 512 2 1024 4 8 0 2 2 4 4 8
+8 8 128 0 0 4 16 2 0 2 256 2 8 2 0 0 512 2 32 2
+0 4 4 0 0 0 2 8 0 32 4 8 2 512 0 0 0 4 2 4
+0 0 0 0 0 0 4 32 0 0 512 0 4 0 0 0 0 0 4 128
+0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 4
+0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8
+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 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 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 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
+Case #46:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 2 4 2 8 2 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 64 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 4 16 1024 2 16 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 512 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 8 2 64 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 4
+0 0 0 0 0 0 0 0 0 0 0 0 2 4 256 2 4 2 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 4 512 4 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 16 2 16 2 4 8 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 512 4 2 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 32 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 512 4 128 8 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 8 2 16
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 8
+0 0 0 0 0 0 0 0 0 0 0 0 4 4 32 4 32 2 16 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 8 2 128 2
+Case #47:
+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 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 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 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 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 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 2 0 0 4 4 0 2 0 0 0 0 0 0 0 0 0 0 0 0
+0 4 0 8 4 8 4 8 2 0 0 0 0 0 0 0 4 0 0 0
+4 8 256 8 512 8 4 2 1024 0 0 512 4 2 0 0 8 0 0 2
+2 4 4 4 4 4 2 8 4 2 8 1024 2 8 2 4 2 0 8 4
+4 2 4 256 256 16 512 4 2 4 4 2 8 4 128 2 4 8 16 4
+4 256 8 4 4 2 4 1024 8 1024 8 4 2 4 4 128 64 2 2 4
+Case #48:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 128 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 8 4 512
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 4 2 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 1024 2 64 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1024 4 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 128 8 16 4 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4 4 2 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 256 8 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 32
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 16
+0 0 0 0 0 0 0 0 0 0 0 0 0 8 2 32 2 4 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 2 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 2 4 2 32 1024
+Case #49:
+0 0 0 0 0 0 0 0 0 1024 4 64 2 4 2 4 2 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 2 8 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 4 64 4
+0 0 0 0 0 0 0 0 0 0 0 0 256 4 4 2 4 8 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 4 512 4 1024 8 16 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 1024 256
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 2 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1024 2 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 4 2 4 8 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 2 512 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 128 2 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 16 4 256 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 2 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 256 32 4 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 4 4 2
+Case #50:
+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 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 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 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 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 4 0 2 2 4 0 0 0 0 0 0 0 0 0 0 0 512 0
+4 64 2 0 1024 16 2 0 0 4 0 0 0 0 0 0 64 0 2 0
+2 2 256 0 2 2 128 0 0 64 0 0 0 0 256 0 8 0 1024 0
+8 4 4 4 4 4 2 0 4 2 0 0 4 0 4 2 4 0 2 0
+256 8 2 2 8 8 4 4 2048 4 0 4 2 0 4 64 4 8 128 2
+4 4 4 4 2 8 8 512 2 128 4 4 4 8 8 4 32 4 2 4
+2 4 8 8 8 2 2 2 8 2 256 8 4 2 4 2 64 512 4 128
+Case #51:
+2 2 8 4 4 4 16 4 4 4 4 4 2 2 2 4 8 4 64 4
+4 4 32 2 2 2 2 4 2 2 32 2 4 4 8 8 4 16 4 4
+2 2 8 8 4 0 8 1024 8 4 2 8 2 64 2 0 4 4 4 2
+8 4 4 4 128 0 4 2 256 128 0 2 4 2 64 0 4 2 2 0
+0 8 0 1024 16 0 2 128 4 2 0 4 2 16 16 0 0 0 0 0
+0 0 0 0 4 0 0 4 32 0 0 2 0 0 2 0 0 0 0 0
+0 0 0 0 0 0 0 128 4 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 4 2 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 4 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 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 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 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 0 0 0 0 0 0 0
+Case #52:
+0 0 0 0 0 0 0 0 0 0 0 0 4 256 64 2 4 2 256 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 512 4 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 16 1024 4 2 4 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8
+0 0 0 0 0 0 0 0 0 0 0 0 64 2 4 2 16 2 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 4 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1024 2 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 8 64 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 512 2 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 8 2 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 8 2 64
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 2 4 2 4 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 128 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2048 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 2 4 1024
+Case #53:
+4 2 4 4 8 4 2 2 32 4 2 2 2 2 4 4 4 2 4 4
+2 8 64 4 4 128 4 4 4 2 256 4 32 8 4 4 32 8 32 2
+4 8 4 2 8 4 2 4 2 4 4 32 16 16 64 4 2 4 2 16
+512 2 64 0 2 4 4 4 4 512 4 0 2 4 8 2 512 4 8 2
+32 4 8 0 0 8 4 2 2 2 2 0 128 0 4 0 8 4 0 0
+0 0 1024 0 0 2 2 0 4 4 0 0 2 0 8 0 4 0 0 0
+0 0 0 0 0 1024 4 0 0 8 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 8 0 0 4 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 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 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 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 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
+Case #54:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 64 2 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 2 8 128
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1024 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 512 8 8 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 4 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 2
+0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 128 32 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 2 8 1024
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 16 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 64 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 128 2 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 1024 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 2 4 8 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 4 8
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 32
+0 0 0 0 0 0 0 0 0 0 0 0 4 2 128 4 2 16 512 4
+Case #55:
+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 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 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 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 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 4 0 0 0 0 0
+0 0 8 0 0 0 0 0 0 0 0 0 0 0 256 0 0 0 0 0
+0 0 4 2 4 0 0 0 0 0 0 4 0 8 2 0 0 0 0 0
+0 0 2 8 2 0 2 0 0 128 0 2 0 8 4 0 0 0 0 0
+8 0 4 2 4 16 4 0 4 2 2 4 0 32 8 2 0 0 4 0
+4 4 8 4 2 8 2 4 16 4 4 8 32 64 4 4 8 0 2 2
+1024 1024 512 8 4 2 4 8 8 1024 16 8 4 2 256 4 256 4 4 512
+32 4 1024 16 2 4 4 2 4 64 4 2 4 4 2 8 2 64 2 4
+Case #56:
+4 64 64 2 2 8 64 2 64 4 2 2 2 4 4 2 8 4 512 4
+4 4 2 4 4 8 256 8 8 512 8 8 8 2 128 4 4 4 4 128
+16 4 512 4 128 4 2 128 4 8 4 4 32 4 4 2 2 4 4 4
+4 0 128 16 0 0 4 2 8 4 2 2 2 4 4 512 4 512 128 16
+512 0 1024 2 0 0 2 0 2 0 0 0 4 64 2 2 128 2 1024 2
+4 0 4 512 0 0 8 0 0 0 0 0 2 0 4 32 0 0 2 0
+2 0 2 4 0 0 4 0 0 0 0 0 8 0 2 4 0 0 4 0
+16 0 512 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 4 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 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 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 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 0 0 0 0 0 0 0 0 0
+Case #57:
+32 32 16 8 8 512 8 128 256 512 4 16 256 16 256 32 16 64 2 512
+512 16 64 64 8 32 4 4 1024 4 64 128 2 32 512 4 1024 1024 32 8
+4 4 8 4 4 4 1024 1024 512 4 8 1024 8 1024 32 32 8 2 1024 4
+2 1024 8 2 2 8 64 32 4 8 32 32 1024 2 2 2 32 8 4 512
+256 2 4 16 256 128 4 256 16 4 2 2 2 4 16 8 512 4 128 8
+16 4 4 2 8 256 2 8 512 2 8 512 1024 8 512 4 32 16 32 2
+4 512 2 16 4 2 128 512 2 512 4 8 4 4 4 256 128 4 4 4
+512 8 4 256 32 16 32 16 32 2 2 32 2 2 4 4 32 512 32 256
+256 2 8 2 4 1024 4 1024 16 512 4 8 1024 4 2 4 2 32 1024 1024
+128 512 4 4 2 2 4 256 2 16 1024 1024 8 512 8 1024 8 2 8 2
+1024 8 256 16 32 4 2 2 8 64 256 512 4 256 4 64 2 64 16 8
+4 2 2 0 0 16 4 8 256 8 0 64 8 4 128 1024 8 32 128 128
+0 16 0 0 0 512 32 4 128 2 0 8 4 2 4 0 512 2 32 64
+0 512 0 0 0 4 32 0 4 0 0 0 16 16 0 0 2 128 1024 2
+0 64 0 0 0 16 4 0 2 0 0 0 64 2 0 0 512 2 8 4
+0 0 0 0 0 4 0 0 0 0 0 0 0 1024 0 0 4 32 128 0
+0 0 0 0 0 512 0 0 0 0 0 0 0 0 0 0 0 0 32 0
+0 0 0 0 0 2 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
+Case #58:
+0 0 0 0 0 0 2048 4 16 4 4 2 8 256 32 8 8 2 32 2
+0 0 0 0 0 0 512 4 512 4 2 8 2 64 4 256 4 64 512 512
+0 0 0 0 0 0 0 0 0 2 16 256 4 1024 8 512 256 512 32 16
+0 0 0 0 256 1024 256 8 16 4 2 64 4 2 256 8 1024 256 32 8
+0 0 0 0 8 256 8 128 256 2 512 32 2 4 512 128 64 16 512 128
+0 0 0 0 0 0 2 4 1024 4 128 4 1024 4 1024 4 128 256 16 2
+0 0 0 0 0 0 0 0 2048 512 8 256 512 4 256 8 256 1024 2 4
+0 0 0 0 0 0 0 0 4 4 8 2 16 4 2 4 256 8 64 128
+0 0 0 0 0 0 64 4 8 16 512 8 4 512 128 8 2 1024 512 128
+0 0 0 0 0 4 128 1024 256 1024 4 8 512 1024 8 8 512 64 2 256
+0 0 0 0 0 0 4 1024 4 2 64 32 4 2 4 4 64 32 8 16
+0 0 0 4 2 1024 2 16 128 512 8 2 64 4 512 4 2 8 4 2
+0 0 0 0 0 0 512 32 4 2 32 4 512 2 8 4 2 4 32 2
+0 0 0 0 0 0 0 0 4 512 4 1024 4 4 256 4 8 512 2 32
+0 0 0 0 0 0 8 64 256 8 128 32 2 4 4 4 256 4 2 4
+0 0 0 0 0 0 0 2 4 1024 32 8 64 256 2 16 8 32 4 2
+0 0 0 0 0 0 4 16 8 4 512 64 512 4 256 4 512 8 2 1024
+0 0 0 0 0 0 0 8 8 128 16 4 512 4 1024 4 256 8 2 4
+0 0 0 0 0 0 512 4 16 4 256 2 4 64 16 2 4 512 4 2
+0 64 4 256 8 32 128 64 16 64 256 2 4 64 4 16 128 2 64 128
+Case #59:
+0 0 0 0 0 0 0 8 16 4 64 8 2 16 16 8 4 4 2 4
+0 0 0 0 0 0 0 0 32 16 2 1024 32 128 8 512 16 128 8 2
+0 0 0 0 0 0 2 32 64 256 128 4 8 512 4 2 4 2 4 512
+0 0 0 0 0 0 0 128 8 256 2 8 8 512 16 4 16 4 2 4
+0 0 0 0 4 8 8 32 512 2 4 64 4 32 2 256 512 4 128 8
+0 0 0 0 0 0 0 2 4 8 16 4 256 8 8 64 1024 2 64 2
+0 0 0 0 0 0 0 0 0 4 16 16 64 4 1024 4 512 4 4 8
+0 0 0 0 0 0 0 8 512 32 1024 4 32 1024 2 8 2 4 256 128
+0 0 0 0 0 0 0 32 4 1024 2 4 2 8 64 256 8 4 2 4
+0 0 0 0 0 2 4 256 1024 128 2 4 1024 64 2 4 256 8 4 128
+0 0 0 0 0 2 8 2 64 8 2 128 2 1024 4 2 32 4 1024 512
+0 0 0 0 0 0 0 4 4 16 4 1024 256 2 512 2 4 256 8 256
+0 0 0 0 0 0 256 2 512 32 512 2 64 4 2 4 256 1024 2 32
+0 0 0 0 0 2 16 2 4 256 4 2 16 4 2 64 512 4 1024 32
+0 0 0 0 128 512 8 256 4 512 4 2 1024 64 4 32 128 8 8 2
+0 0 0 0 0 512 2 4 1024 2 1024 2 4 1024 32 4 1024 128 1024 4
+0 0 0 0 0 0 4 2 32 8 128 8 512 2 1024 2 32 4 2 16
+0 0 0 0 0 0 0 0 4 2 4 64 2 512 4 64 8 1024 16 2
+0 0 0 0 0 0 0 4 2 16 4 4 4 8 256 2048 4 1024 4 256
+0 0 0 0 1024 16 2 8 4 256 2 32 4 8 4 64 2 64 4 256
+Case #60:
+0 0 0 0 0 0 0 0 1024 2 1024 4 8 32 2 8 8 256 2 128
+0 0 0 0 0 0 0 4 512 512 4 512 32 4 1024 4 16 4 4 64
+0 0 0 0 0 2 256 64 512 32 4 4 2 8 32 64 32 4 64 256
+0 0 0 0 0 0 8 4 8 8 64 4 256 32 128 512 8 64 4 8
+0 0 0 0 0 0 4 8 256 2 4 2 128 4 128 2 8 4 4 8
+0 0 0 0 0 0 0 0 1024 2 4 4 8 512 1024 4 8 4 8 128
+0 0 0 0 0 0 0 0 32 4 256 2 4 512 1024 4 4 512 4 2
+0 0 0 0 0 0 2 256 32 32 4 2 4 512 32 4 2 128 32 1024
+0 0 0 0 0 0 8 8 2 64 128 32 64 2 128 2 32 512 4 256
+0 0 0 0 0 0 0 0 0 0 4 2 4 16 4 32 4 32 4 2048
+0 0 0 0 0 0 0 0 4 16 4 2048 4 2 4 128 4 8 512 512
+0 0 0 0 0 0 0 0 2 4 512 4 2 64 4 4 8 64 4 128
+0 0 0 0 0 0 0 256 4 2 1024 32 128 2 1024 4 256 2 4 128
+0 0 0 0 0 0 0 0 4 2 4 2 4 128 4 4 32 16 2 4
+0 0 0 0 0 16 8 1024 512 4 8 16 4 64 2 8 4 512 32 8
+0 0 0 0 0 16 4 512 2 128 4 512 8 32 4 512 32 512 2 8
+0 0 0 0 0 128 4 8 512 2 512 4 8 64 4 2 32 4 8 512
+0 0 0 256 32 2 256 64 4 1024 4 1024 4 2 32 2 1024 2 8 8
+0 0 0 0 0 0 0 0 1024 32 4 256 4 32 4 512 4 32 512 128
+0 0 0 0 0 0 0 32 2 1024 128 512 8 32 4 2 8 64 256 8
+Case #61:
+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 2 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 1024 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0
+0 0 2 0 0 0 0 0 64 0 0 0 0 0 0 0 2 0 2 0
+0 0 1024 0 32 0 0 0 8 0 0 0 0 0 0 0 512 0 128 0
+2 64 16 2 2 64 0 4 2 8 0 0 0 0 32 0 2 0 2 0
+4 4 256 256 8 32 0 512 32 256 0 64 0 16 64 8 16 4 4 4
+128 8 8 4 64 2 64 8 512 2 0 2 2 4 8 16 2 4 2 2
+8 1024 4 64 2 256 4 2 32 4 32 4 4 16 8 1024 128 1024 16 64
+1024 2 32 512 8 64 2 4 4 8 2 16 8 64 32 512 2 32 32 8
+256 8 2 4 32 4 4 64 2 256 128 8 2 8 2 4 8 2 64 8
+4 512 8 8 256 8 4 2 4 4 64 32 4 512 8 64 512 8 1024 16
+8 2 512 32 16 4 512 64 1024 128 1024 8 4 2 64 32 256 2 128 64
+2 4 16 2 8 4 8 512 8 64 4 4 64 4 128 2 4 64 512 4
+4 8 4 4 4 1024 2 4 2 32 32 8 2 8 2 4 2 16 2 64
+512 1024 8 512 2 32 512 16 4 2 512 8 1024 128 8 8 64 2 1024 16
+2 2 256 4 128 8 64 4 8 64 4 2 4 4 2 512 8 1024 2 2
+16 64 64 2 256 2 128 256 512 2 16 4 4 8 256 128 1024 2 32 128
+4 16 128 128 128 256 4 2 4 64 4 16 512 4 4 16 2 4 4 4
+Case #62:
+4 1024 4 4 32 512 4 8 32 2 1024 4 0 0 0 0 0 0 0 0
+4 16 256 4 512 256 4 32 256 2 8 256 4 64 0 0 0 0 0 0
+4 32 1024 64 16 128 8 4 32 16 2 1024 2 4 0 0 0 0 0 0
+64 8 4 128 4 8 4 16 512 4 32 512 128 2 512 0 0 0 0 0
+4 4 4 64 16 64 32 128 2 1024 4 2 32 0 0 0 0 0 0 0
+4 2 1024 2 4 2 8 64 32 128 2 8 2 0 0 0 0 0 0 0
+256 4 2 256 4 4 4 8 4 16 32 8 2 0 0 0 0 0 0 0
+1024 256 4 2 512 16 256 8 64 2 8 0 0 0 0 0 0 0 0 0
+64 8 32 64 4 2 256 2 8 512 16 32 2 4 4 256 2 0 0 0
+256 2 256 1024 16 4 128 128 16 256 4 256 2 0 0 0 0 0 0 0
+4 256 8 128 256 4 2 256 8 4 8 2 1024 256 0 0 0 0 0 0
+4 2 64 2 512 4 16 4 1024 2 8 4 2 1024 0 0 0 0 0 0
+128 512 32 4 8 128 4 256 2 128 4 64 2 256 128 0 0 0 0 0
+64 2 128 2 16 4 16 8 16 4 1024 128 256 32 4 8 0 0 0 0
+4 256 128 128 8 512 2 4 2 256 4 8 128 2 16 0 0 0 0 0
+1024 4 2 8 16 2 64 2 128 4 512 32 512 2 1024 0 0 0 0 0
+4 16 16 8 4 8 1024 256 2 4 512 128 32 8 8 0 0 0 0 0
+8 32 4 512 2 4 2 128 512 2 256 8 512 2 4 0 0 0 0 0
+128 4 32 128 1024 4 128 4 16 4 128 4 8 8 0 0 0 0 0 0
+2 16 1024 16 4 2 1024 4 4 8 4 0 0 0 0 0 0 0 0 0
+Case #63:
+0 0 0 0 0 0 512 8 64 4 256 8 128 128 4 256 2 512 2 16
+0 0 0 0 0 8 16 1024 2 4 2 1024 4 32 512 2 1024 512 4 2
+0 0 0 0 0 0 4 2 64 256 4 8 4 4 1024 2 4 2 4 128
+0 0 0 0 0 4 1024 16 4 256 128 64 4 256 16 4 2 8 4 2
+0 0 0 0 2 16 4 512 2 256 4 16 8 1024 2 8 64 2 1024 4
+0 0 0 0 0 0 64 1024 2 8 64 32 4 2 4 16 4 2 128 4
+0 0 0 0 0 2 16 256 4 8 4 64 2 32 4 1024 128 256 8 2
+0 0 0 0 0 2 8 256 2 128 2 4 8 128 1024 4 4 4 16 4
+0 0 0 0 0 32 128 512 2 8 2 4 1024 16 4 64 8 512 128 4
+0 0 0 0 0 0 0 4 8 4 64 16 4 4 1024 8 8 64 4 32
+0 0 0 0 0 2 4 8 1024 16 2 4 4 16 512 4 32 2 32 4
+0 0 0 0 0 0 0 0 0 8 32 4 128 8 16 2 128 4 512 128
+0 0 0 0 0 0 128 64 8 8 2 512 128 1024 8 2 512 4 512 4
+0 0 0 0 0 0 0 0 16 1024 32 8 4 2 8 4 1024 256 4 4
+0 0 0 0 0 32 8 16 2 4 16 4 2 8 128 2 4 512 1024 64
+0 0 0 0 0 4 1024 256 2 256 2 4 16 2 8 16 4 2 256 2
+0 0 0 0 0 0 4 2 16 8 1024 2 32 4 16 8 1024 32 2 4
+0 0 0 64 4 256 1024 512 2 4 1024 4 2 32 8 256 128 4 32 64
+0 0 0 0 0 0 0 512 2 64 128 512 4 8 256 16 2 64 512 8
+0 0 0 0 2 128 4 4 4 64 4 8 4 2 32 2 32 4 2 512
+Case #64:
+128 8 2 256 4 2 64 16 512 8 32 4 512 4 2 0 0 0 0 0
+2 8 4 128 4 8 256 1024 4 32 256 4 128 256 0 0 0 0 0 0
+16 4 16 2 64 8 8 4 128 8 256 8 128 0 0 0 0 0 0 0
+128 16 2 8 2 4 2 32 512 2 4 2 128 2 0 0 0 0 0 0
+4 512 8 4 4 4 128 2 32 2 4 0 0 0 0 0 0 0 0 0
+64 1024 32 4 2 4 2 1024 4 2 16 64 0 0 0 0 0 0 0 0
+2 16 8 2 64 4 2 512 2 8 1024 16 2 4 0 0 0 0 0 0
+2 8 8 2 64 32 4 8 256 256 2 4 512 0 0 0 0 0 0 0
+64 4 1024 2 128 512 64 2 128 256 1024 512 64 2 0 0 0 0 0 0
+4 2 8 256 512 16 2 1024 2 8 2 4 16 4 0 0 0 0 0 0
+2 16 2 8 4 64 2 8 128 512 1024 4 256 512 256 0 0 0 0 0
+4 64 512 4 512 32 4 32 4 16 8 8 128 4 256 16 0 0 0 0
+2 64 512 32 8 2 128 4 2 512 2 1024 128 2 4 0 0 0 0 0
+64 8 16 64 2 128 2 64 8 4 0 0 0 0 0 0 0 0 0 0
+4 2 1024 256 4 512 16 4 8 4 128 256 512 2 0 0 0 0 0 0
+512 128 2 64 2 16 1024 128 2 8 64 4 32 8 0 0 0 0 0 0
+2 256 2 128 4 512 2 4 2 128 4 2 4 512 256 4 128 0 0 0
+4 8 16 4 4 512 4 16 2 1024 4 32 256 0 0 0 0 0 0 0
+128 64 1024 32 8 32 64 4 512 64 8 1024 4 2 0 0 0 0 0 0
+4 256 8 4 256 128 512 4 128 4 4 256 16 2 0 0 0 0 0 0
+Case #65:
+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 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0
+0 0 0 0 8 0 0 0 0 0 0 0 0 0 1024 0 0 1024 0 0
+16 0 0 0 64 0 0 16 0 0 2 0 0 0 4 0 0 128 32 0
+2 0 0 0 128 0 0 1024 256 0 4 0 0 0 128 64 4 64 4 2
+256 0 2 16 4 8 0 512 64 4 8 32 1024 0 2 8 16 2 1024 8
+1024 512 4 8 32 1024 0 4 32 512 1024 4 8 0 128 8 1024 8 4 16
+2 16 16 128 2 256 512 4 4 4 2 128 4 0 32 64 512 1024 8 1024
+4 64 64 512 8 4 8 128 128 16 2048 4 8 32 16 4 4 8 512 8
+64 4 4 1024 512 64 4 32 4 2 16 512 64 2 1024 2048 8 16 4 2
+8 1024 512 4 8 4 512 4 8 32 128 8 256 4 2 512 8 64 32 128
+2 4 128 16 256 16 512 64 32 4 8 16 4 4 4 1024 64 256 2 4
+8 8 256 4 16 128 4 4 8 512 64 512 1024 8 1024 2 4 2 32 1024
+1024 4 16 128 4 512 4 16 2 2 256 128 4 128 512 8 16 8 32 4
+256 2 2 256 4 128 128 128 1024 8 4 64 4 4 2 1024 128 2 2 16
+2 4 8 2 128 4 4 2 8 4 8 1024 4 256 32 4 8 4 512 2
+8 256 32 4 1024 512 16 4 32 8 32 64 256 2 512 16 32 16 4 16
+4 4 256 64 1024 256 4 1024 512 128 32 4 2 32 32 1024 4 2 128 4
+Case #66:
+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 512 64 0 0 0 0 0 0 0 0 0 0 0
+128 0 0 0 0 0 0 1024 2 0 0 0 0 0 0 0 0 0 0 0
+16 0 0 0 0 0 0 32 1024 0 0 0 128 0 0 0 0 0 0 0
+64 0 0 0 0 0 0 512 8 0 0 0 256 0 0 0 0 0 0 128
+4 32 0 2048 0 16 256 16 1024 0 0 32 4 0 0 0 0 2 4 512
+2 1024 256 4 0 4 4 1024 4 4 0 2 1024 16 2 0 128 4 2 4
+8 8 512 32 0 8 128 128 512 2 0 1024 2 2 4 0 512 2 4 64
+2 8 2 4 32 1024 256 4 64 4 0 8 8 32 2 2 8 128 2 2
+32 2 512 16 8 4 8 512 512 4 4 128 64 2 128 16 2 32 256 4
+4 16 4 4 128 32 4 2 128 256 256 4 2 4 2 2 64 4 4 16
+512 128 2 2 256 2 512 256 256 64 128 128 32 4 16 8 4 256 8 4
+8 256 4 256 16 4 16 4 2 2 1024 4 4 4 32 8 32 2 4 2
+2 1024 8 2 256 2 8 32 64 256 512 4 8 2 2 8 4 1024 4 128
+1024 32 128 4 1024 32 1024 4 2 4 4 128 4 64 4 4 64 2 16 4
+256 64 16 512 64 512 32 4 256 256 8 1024 4 4 256 2 16 4 128 256
+8 128 2 16 32 2 512 2 2 8 128 16 128 32 2 512 1024 1024 2 8
+1024 4 4 32 128 4 64 64 128 8 256 4 8 256 2048 4 8 8 4 128
+512 32 2 4 8 128 2 2 32 4 2 4 256 8 512 2 256 2 128 4
+Case #67:
+0 0 0 0 0 0 0 0 0 256 2 4 4 64 16 4 8 4 4 32
+0 0 0 0 0 0 0 0 1024 128 8 16 2048 4 1024 4 128 512 256 4
+0 0 0 128 4 2 4 2 256 4 1024 256 4 4 256 2 512 8 512 2
+0 0 0 0 0 0 0 2 32 4 4 256 4 8 2 64 128 8 128 8
+0 0 0 0 0 0 0 2 8 1024 16 32 1024 128 64 4 8 2 512 4
+0 0 0 0 0 0 0 2 512 2 256 4 8 512 4 32 2 256 8 256
+0 0 0 0 0 32 4 8 2 16 32 256 4 2 4 256 2 512 128 512
+0 0 0 0 0 0 4 2 4 8 512 1024 8 8 4 2 1024 32 4 8
+0 256 512 4 32 128 2 4 512 1024 8 512 4 256 2 1024 4 2 4 2
+0 0 0 0 0 0 4 2 256 4 16 64 8 2 512 4 8 2 4 4
+0 0 0 0 0 0 4 2 512 4 2 4 2048 16 4 2 4 16 512 2
+0 0 16 2 256 2 8 4 64 2 16 2 32 4 128 4 32 8 64 32
+0 0 0 0 32 4 1024 4 2 1024 2 32 1024 512 32 2 128 4 256 4
+0 0 0 0 0 0 0 8 32 2 4 32 64 4 8 4 8 2 64 16
+0 0 0 0 4 512 4 64 2 128 32 2 4 32 4 512 2 512 4 64
+0 0 0 0 0 0 0 4 4 4 8 16 4 512 128 64 2 8 4 8
+0 0 0 0 0 0 0 0 0 8 8 1024 2 32 256 4 8 4 4 8
+0 0 0 0 0 0 0 0 128 16 4 1024 8 32 4 256 512 4 16 256
+0 0 0 0 0 0 4 2 512 2 32 16 4 8 512 128 64 4 8 16
+0 0 0 0 0 512 1024 64 16 4 8 64 2 8 2 512 16 4 8 128
+Case #68:
+512 4 4 1024 8 4 32 16 64 4 128 64 16 128 2 0 0 0 0 0
+32 4 2 4 2 4 2 8 4 2 4 8 16 2 256 128 0 0 0 0
+2 32 256 16 8 8 256 2 512 64 128 0 0 0 0 0 0 0 0 0
+512 4 2 128 16 4 2 4 4 128 256 2 4 2 256 64 0 0 0 0
+128 8 128 256 2048 64 32 4 1024 8 1024 4 256 2 32 0 0 0 0 0
+256 2 512 4 1024 4 128 2 64 8 256 512 8 0 0 0 0 0 0 0
+2 16 4 2 256 2 32 16 512 4 2 4 32 4 8 2 0 0 0 0
+2 4 2 4 2 8 2 4 16 128 512 2 8 256 16 64 0 0 0 0
+4 128 256 8 1024 4 16 2 128 1024 4 2 32 8 256 2 0 0 0 0
+128 64 2 8 2 4 16 4 4 64 2 8 0 0 0 0 0 0 0 0
+4 4 2 4 128 2 4 2 4 64 1024 256 32 2048 4 0 0 0 0 0
+1024 64 128 64 4 2 128 2 32 128 2 8 4 256 2 0 0 0 0 0
+16 4 128 32 4 2 4 1024 2 16 2 1024 64 512 256 4 0 0 0 0
+4 8 8 4 256 4 1024 2 1024 2 1024 0 0 0 0 0 0 0 0 0
+16 4 2 4 2 8 4 4 2 4 1024 128 512 0 0 0 0 0 0 0
+4 8 4 2 8 128 512 2 64 2 1024 2 8 0 0 0 0 0 0 0
+2 16 256 2 32 4 4 8 4 512 32 4 512 2 32 8 128 0 0 0
+4 512 4 32 16 4 16 32 512 2 128 8 2 8 2 0 0 0 0 0
+8 4 2 16 256 128 2 16 4 4 2 128 4 256 16 4 0 0 0 0
+1024 4 1024 2 4 128 8 4 4 2 2048 2 256 16 0 0 0 0 0 0
+Case #69:
+4 8 4 4 4 2 2 4 8 2 16 8 4 4 4 2 4 128 4 1024
+256 128 4 128 32 1024 4 4 4 32 4 8 64 32 16 4 128 16 4 256
+4 2 128 4 8 2 64 4 2048 4 512 4 1024 4 8 2 32 8 2 4
+512 256 4 4 8 8 512 4 2 1024 4 1024 2 128 4 4 128 16 16 1024
+32 8 4 2 128 4 2 1024 4 64 64 256 64 2 2 1024 256 4 8 1024
+8 4 2 4 16 2 256 16 1024 4 16 8 512 1024 32 8 8 4 128 64
+4 2 8 64 1024 32 4 8 32 2 4 4 4 4 4 2 2 4 1024 128
+512 8 256 2 256 2 64 4 2 512 2 4 1024 16 2 8 64 32 128 4
+4 4 4 1024 16 8 4 0 128 16 16 2 4 1024 32 16 4 256 32 256
+256 32 2 2 32 8 512 0 2 4 4 512 16 32 4 8 2 4 16 16
+2 512 128 8 0 4 8 0 1024 16 1024 256 512 16 2 16 1024 512 4 256
+32 4 64 64 0 512 2 0 4 4 2 2 2 512 4 512 64 32 2 4
+64 64 4 4 0 4 1024 0 128 16 8 4 8 4 8 128 32 4 256 2
+2 8 2 256 0 32 16 0 4 4 8 256 2 512 4 2 8 0 32 512
+1024 2 4 32 0 64 4 0 4 0 0 64 512 2 2 32 16 0 0 0
+4 64 0 0 0 0 16 0 4 0 0 0 2 4 16 4 512 0 0 0
+0 0 0 0 0 0 4 0 0 0 0 0 128 0 0 0 32 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 1024 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0
+Case #70:
+2 4 256 4 2 256 32 8 512 2 128 64 2048 0 0 0 0 0 0 0
+4 4 2 8 2 4 512 2 16 256 8 2 256 64 128 32 0 0 0 0
+2 64 256 2 32 16 4 2 4 256 256 128 16 0 0 0 0 0 0 0
+2 4 1024 8 32 2 64 256 2 512 4 2 1024 32 0 0 0 0 0 0
+2 512 64 2 32 2 256 8 1024 4 4 2 1024 4 256 4 256 0 0 0
+512 2 8 2 256 4 2 128 32 1024 4 1024 4 8 128 8 2 0 0 0
+4 2 4 2 4 4 4 1024 8 2 256 512 256 32 2 0 0 0 0 0
+8 16 8 2 4 2 8 4 32 4 2 32 256 2 512 1024 8 0 0 0
+4 2 128 2 32 8 8 64 2 16 4 4 64 0 0 0 0 0 0 0
+4 2 32 512 4 8 4 4 2 128 2 8 0 0 0 0 0 0 0 0
+8 1024 8 16 4 2 8 8 32 128 2 16 4 16 0 0 0 0 0 0
+256 4 2 4 8 2 32 4 8 2 64 4 256 0 0 0 0 0 0 0
+4 2 128 1024 2 128 4 2 8 2 4 2 16 256 0 0 0 0 0 0
+64 512 2 16 64 4 1024 128 1024 64 256 4 2 64 0 0 0 0 0 0
+2 16 8 4 1024 64 32 2 8 2 8 4 16 16 4 2 0 0 0 0
+4 1024 2 4 512 4 2048 32 2 4 512 2 32 256 1024 2 0 0 0 0
+8 2 16 512 64 256 8 32 2 4 0 0 0 0 0 0 0 0 0 0
+8 32 128 4 2 8 32 1024 4 2 16 4 8 64 2 0 0 0 0 0
+2 64 128 4 2 256 4 32 64 1024 4 512 1024 256 0 0 0 0 0 0
+256 1024 2 128 32 64 16 512 64 8 2 128 128 0 0 0 0 0 0 0
+Case #71:
+512 4 32 2 256 4 2 512 16 2 4 2 8 64 4 0 0 0 0 0
+4 4 2 8 2 4 2 8 64 512 32 16 2 256 4 0 0 0 0 0
+128 32 2 4 8 32 2 16 4 32 2 4 64 2 128 8 0 0 0 0
+128 32 8 4 4 4 128 8 2 4 128 4 2 4 0 0 0 0 0 0
+32 1024 8 128 2 64 1024 64 16 4 128 4 128 2 1024 4 0 0 0 0
+64 2 1024 512 2 4 1024 2 4 32 8 8 128 64 32 4 256 0 0 0
+128 32 64 4 4 64 4 512 8 128 4 256 0 0 0 0 0 0 0 0
+2 512 4 512 8 128 2 16 2 16 4 2 4 2 32 128 2 1024 0 0
+4 256 64 4 64 4 2 512 128 8 4 4 0 0 0 0 0 0 0 0
+128 2 128 8 256 8 4 32 2 256 8 4 0 0 0 0 0 0 0 0
+16 32 16 4 128 8 16 4 256 4 16 2 16 0 0 0 0 0 0 0
+1024 32 64 512 4 2 1024 4 4 4 2 8 4 512 0 0 0 0 0 0
+4 2 64 2 16 4 4 2 8 1024 4 512 2 64 4 0 0 0 0 0
+8 4 1024 2 4 16 4 2 4 512 64 4 16 4 2 4 8 0 0 0
+1024 16 64 2 4 2 128 4 32 1024 256 2 4 256 32 2 512 0 0 0
+2 32 4 512 2 4 2 8 8 16 2 8 256 4 1024 0 0 0 0 0
+16 4 2 512 8 2 16 2 128 512 16 256 4 128 0 0 0 0 0 0
+8 16 2 32 2 512 4 64 16 2 1024 16 4 2 16 8 0 0 0 0
+4 64 4 4 64 2 4 8 64 512 8 64 4 0 0 0 0 0 0 0
+2 8 8 4 2 4 2 4 256 2 0 0 0 0 0 0 0 0 0 0
+Case #72:
+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 0 0 0 0
+0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 1024 0 0 0 0
+0 0 0 2 2 0 0 32 0 64 0 0 0 0 0 2 0 4 0 0
+0 0 0 32 512 4 0 4 0 4 0 0 0 64 4 128 0 2 0 2
+0 128 8 4 64 2 128 1024 64 32 0 64 64 2 1024 512 0 256 0 4
+0 4 2 64 2 4 32 4 4 512 1024 16 2 8 64 32 2 4 4 512
+0 8 4 4 32 2 4 16 2 2 2 1024 512 128 32 256 8 64 8 2
+1024 2 32 8 4 4 64 2 4 4 128 16 4 4 4 4 4 4 1024 256
+2 4 4 32 8 128 4 8 512 2 2 2 32 8 4 256 4 128 16 32
+4 64 1024 512 2 256 32 4 2 4 512 8 2 2 4 4 2 4 4 2
+128 128 4 128 1024 4 2 2 64 256 32 4 1024 4 2 1024 8 64 2 8
+8 4 64 8 4 2 8 16 2 4 8 64 256 512 4 2 256 8 512 4
+256 32 4 2 2 4 2 8 4 2 4 2 2 2 8 4 4 512 128 16
+2 512 64 16 4 32 64 4 1024 256 128 1024 256 128 2 64 2 2 2 1024
+64 32 2 1024 4 4 16 2 64 4 4 4 64 8 4 2 128 64 32 32
+4 64 4 4 4 2 8 512 8 8 2 2 32 512 16 128 2 4 2 512
+2048 2 32 2 8 512 2 4 32 2 4 128 4 4 256 4 512 256 8 2
+2 4 2 64 4 4 4 16 4 4 64 2 16 64 4 2 64 2 32 512
+Case #73:
+0 0 0 0 0 0 64 128 1024 4 1024 4 32 1024 4 2 4 512 512 2
+0 0 0 0 0 0 0 0 16 1024 512 4 4 4 512 2 16 256 32 4
+0 0 0 0 2 16 4 64 2 4 8 4 8 4 32 8 128 4 64 1024
+0 0 0 0 0 0 0 0 2 512 8 8 2 2048 2 64 1024 8 2 4
+0 0 0 0 0 0 512 2 4 16 256 4 1024 32 2 64 1024 2 64 128
+0 0 0 0 0 0 0 4 8 2 256 128 8 256 32 4 2 8 8 2
+0 0 0 0 0 0 0 4 32 128 512 4 4 128 4 16 2 32 8 4
+0 0 0 0 0 2 128 2 64 8 64 128 2 512 4 256 16 512 1024 4
+0 0 0 0 1024 4 256 32 256 512 16 4 128 8 16 32 1024 4 2 8
+0 0 0 0 0 0 0 0 0 512 4 4 8 2 8 512 128 4 2 4
+0 0 0 0 0 0 0 0 16 8 128 2 64 2 4 2 1024 2 32 4
+0 0 0 0 0 0 0 4 16 2 4 1024 256 4 32 64 64 4 16 512
+0 0 0 0 0 0 0 0 4 2 8 8 4 8 256 256 128 2 128 2
+0 0 0 0 0 0 4 256 4 16 8 2 4 8 16 8 2 128 16 256
+0 0 0 0 0 0 4 64 2 32 64 32 2 4 16 2 256 16 8 16
+0 0 0 0 0 0 0 0 2 64 2 4 8 4 8 2 4 2 4 2048
+0 0 0 0 0 2 16 2 256 4 32 4 32 4 4 4 32 4 1024 32
+0 0 0 0 0 0 0 0 128 1024 32 4 8 4 512 8 128 32 8 256
+0 0 0 0 0 0 2 512 4 4 64 4 4 32 8 64 2 4 128 4
+0 0 0 0 0 0 0 0 0 4 512 8 8 1024 2 1024 8 128 4 1024
+Case #74:
+0 0 0 0 0 4 128 2 512 32 4 64 32 64 512 64 2 8 512 1024
+0 0 0 0 0 0 0 0 512 8 4 4 8 32 2 8 8 32 64 512
+0 0 0 0 0 4 2 512 2 4 512 8 256 2 128 1024 4 4 128 256
+0 0 0 0 0 0 0 2 128 4 256 4 16 4 512 256 8 1024 128 64
+0 0 0 0 0 0 0 0 8 32 256 512 64 4 16 512 4 128 16 512
+0 0 0 0 0 0 2 64 16 256 4 8 1024 2 8 2 128 4 16 2
+0 0 0 0 0 0 0 2 4 8 4 4 1024 4 128 4 32 4 1024 64
+0 0 0 0 0 0 0 0 4 8 1024 16 512 128 2 256 16 32 16 2
+0 0 0 0 0 16 4 1024 2 512 8 4 8 8 1024 4 8 16 4 2
+0 0 0 0 0 0 0 0 32 2 1024 2 8 8 64 4 512 8 2 1024
+0 0 0 0 0 4 64 8 64 4 256 2 1024 16 128 4 2 64 2 32
+0 0 0 0 0 0 0 0 0 0 0 16 2 16 4 128 4 32 64 4
+0 0 0 0 0 0 8 2 4 512 4 1024 2 4 8 2 8 4 256 2048
+0 0 0 0 0 0 256 4 256 2 8 64 4 256 8 1024 512 1024 16 128
+0 0 0 0 0 256 128 2 128 2 4 64 4 64 2 8 2 4 8 4
+0 0 0 0 0 2 16 256 128 16 128 32 2048 4 8 8 4 4 8 64
+0 0 0 0 0 4 512 4 64 4 16 512 4 8 4 2 4 16 2 1024
+0 0 0 0 0 4 16 1024 8 128 1024 512 2 4 64 32 4 32 2 8
+0 0 0 0 0 0 0 0 8 2 256 8 2 1024 256 32 4 32 4 128
+0 0 0 0 0 0 0 128 8 128 512 2 128 8 2 512 4 8 8 128
+Case #75:
+4 32 8 1024 64 2 32 128 64 256 2 8 4 0 0 0 0 0 0 0
+2 4 512 16 64 2 256 8 4 4 16 128 32 1024 0 0 0 0 0 0
+2 64 8 8 8 32 16 512 4 1024 512 0 0 0 0 0 0 0 0 0
+32 8 128 32 4 256 8 4 2 64 128 256 0 0 0 0 0 0 0 0
+128 4 8 64 2 4 32 64 32 8 32 1024 4 128 16 0 0 0 0 0
+2 8 64 1024 512 4 4 1024 512 128 2 4 128 4 8 1024 0 0 0 0
+512 32 2 64 4 4 128 64 8 4 256 512 0 0 0 0 0 0 0 0
+2 8 4 2048 2 8 256 4 2 512 0 0 0 0 0 0 0 0 0 0
+512 1024 4 4 1024 4 2 16 16 8 0 0 0 0 0 0 0 0 0 0
+4 16 8 2 512 512 2 16 32 64 4 1024 0 0 0 0 0 0 0 0
+8 2 256 4 1024 64 128 16 2 128 2 1024 0 0 0 0 0 0 0 0
+4 2 32 4 2 8 16 8 4 4 2 4 64 32 0 0 0 0 0 0
+1024 16 4 4 4 64 4 512 8 4 32 64 2 64 8 8 0 0 0 0
+1024 1024 4 256 128 2 8 128 8 64 0 0 0 0 0 0 0 0 0 0
+2 4 512 64 2 8 2 1024 2 16 512 256 4 2 8 1024 32 1024 0 0
+16 512 2 4 2 1024 512 16 128 4 8 1024 128 4 512 128 0 0 0 0
+256 512 256 1024 32 256 4 32 16 4 64 4 2 4 8 8 0 0 0 0
+8 2 256 4 2 64 8 4 2 32 8 2 4 16 0 0 0 0 0 0
+4 8 2 8 4 8 512 2 8 2 512 32 8 2 0 0 0 0 0 0
+16 4 2 32 4 1024 4 512 32 128 2 4 2 512 2 8 0 0 0 0
+Case #76:
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 2 0 0 0 0 2 0 0 2 0 0 0 0 0 0 0 0 0 0
+0 8 32 0 0 0 256 0 0 4 0 0 0 0 0 0 0 0 0 0
+0 4 2 0 0 0 4 0 64 128 0 0 2 0 0 256 0 2 32 0
+0 2 4 0 128 4 8 0 2 1024 0 0 128 0 0 512 0 32 8 0
+0 512 512 4 32 16 32 0 8 2 32 0 2 2 0 16 0 2 512 0
+0 32 32 16 256 2 2 256 32 256 4 0 64 4 0 4 0 16 4 8
+0 1024 4 8 8 64 1024 2 4 512 256 0 4 4 0 2 0 4 16 128
+4 64 512 1024 128 512 2 4 32 4 4 32 128 512 8 8 8 16 512 2
+512 2 32 2 32 4 64 4 4 256 8 256 8 128 4 64 2048 2 8 8
+16 16 512 256 2 128 8 32 2 2 2 512 1024 4 4 4 8 4 4 4
+4 512 2 64 16 4 2 2 512 4 4 128 16 8 2 256 32 128 256 256
+4 128 256 4 4 8 256 32 4 512 8 4 32 512 64 2 4 64 4 64
+64 2 32 128 512 32 128 256 2 2 128 2 8 4 4 4 2048 1024 2 16
+16 16 16 8 2 16 64 128 512 4 2 64 4 16 2 4 4 4 4 2
+2 256 32 32 1024 256 1024 4 8 256 4 32 16 2 4 2 1024 8 32 8
+8 16 1024 4 4 512 512 2 64 2 2 2 4 4 8 4 8 16 2 2
+2 512 2 64 64 2 4 32 256 4 256 32 1024 512 64 512 4 512 4 4
+4 8 128 16 4 256 32 512 4 8 4 4 4 8 2 4 8 2 4 2
+Case #77:
+1024 2 4 512 128 64 128 512 4 512 2 4 32 128 8 0 0 0 0 0
+8 512 128 32 4 2 4 64 512 16 4 4 2 4 0 0 0 0 0 0
+1024 16 32 4 256 1024 4 512 8 4 32 8 0 0 0 0 0 0 0 0
+2 16 2 4 512 8 512 128 2 256 32 2 64 16 4 0 0 0 0 0
+4 8 64 2 256 128 2 16 2 32 4 4 8 0 0 0 0 0 0 0
+256 2 4 4 4 16 4 4 1024 64 8 512 8 0 0 0 0 0 0 0
+8 128 4 4 4 256 4 2 512 256 8 8 0 0 0 0 0 0 0 0
+16 32 2 4 32 4 2 128 2 8 4 0 0 0 0 0 0 0 0 0
+4 2 32 512 128 4 128 4 64 128 4 1024 4 128 0 0 0 0 0 0
+4 2 16 4 16 128 8 64 256 32 8 0 0 0 0 0 0 0 0 0
+32 2 4 1024 8 2 1024 8 2 256 16 2 8 16 0 0 0 0 0 0
+1024 512 32 2 32 128 2 4 8 4 256 2 4 1024 64 1024 4 0 0 0
+128 32 512 128 2 64 2 1024 4 2 1024 4 16 4 32 4 0 0 0 0
+2 256 128 32 8 2 512 32 4 4 32 4 0 0 0 0 0 0 0 0
+2 8 32 2 16 4 1024 2 4 512 1024 4 2 512 2 4 0 0 0 0
+8 2 8 512 1024 128 2 8 64 4 1024 64 512 8 0 0 0 0 0 0
+4 2 32 64 32 512 4 8 8 64 4 0 0 0 0 0 0 0 0 0
+8 256 4 2 8 16 16 2 1024 128 2 0 0 0 0 0 0 0 0 0
+8 2 8 4 2 16 256 2 32 16 512 1024 2 16 1024 64 0 0 0 0
+1024 4 1024 8 4 4 64 16 256 1024 8 0 0 0 0 0 0 0 0 0
+Case #78:
+2 32 1024 256 32 2048 2 8 64 2 4 8 2 128 4 64 0 0 0 0
+2 4 2 4 64 4 512 4 8 256 2 4 128 8 8 0 0 0 0 0
+64 1024 4 32 256 4 64 256 16 512 4 64 0 0 0 0 0 0 0 0
+4 64 512 256 8 256 32 4 4 2 512 2 1024 0 0 0 0 0 0 0
+4 2 32 4 512 64 8 256 4 128 4 1024 64 0 0 0 0 0 0 0
+4 1024 128 1024 128 4 8 4 4 32 128 2 0 0 0 0 0 0 0 0
+2 4 4 1024 2 512 32 8 4 4 4 32 2 4 2 0 0 0 0 0
+4 8 32 4 2 4 256 4 2 32 4 16 4 8 0 0 0 0 0 0
+256 1024 2 1024 512 1024 4 2 128 64 32 512 4 2 1024 0 0 0 0 0
+4 256 2 512 8 4 1024 4 2 256 256 64 0 0 0 0 0 0 0 0
+128 8 128 16 2 1024 16 512 256 512 1024 32 0 0 0 0 0 0 0 0
+128 2 8 8 64 2 4 2 256 512 2 256 4 4 512 2 0 0 0 0
+16 4 2 128 2 4 128 2 128 4 2 32 256 2 4 8 1024 0 0 0
+32 64 4 256 8 2 4 2 4 512 4 4 32 64 4 2 0 0 0 0
+2 256 4 512 64 4 1024 2 16 8 4 512 4 0 0 0 0 0 0 0
+4 64 4 8 2 8 2 4 16 512 8 128 4 256 0 0 0 0 0 0
+2 16 128 256 4 2 512 16 32 1024 8 4 2 64 0 0 0 0 0 0
+32 8 2 4 16 2 4 128 1024 4 4 8 32 512 4 16 0 0 0 0
+4 512 4 256 1024 16 256 16 4 32 2 8 4 1024 0 0 0 0 0 0
+2 128 4 4 8 2 512 64 16 2 256 2 16 4 32 0 0 0 0 0
+Case #79:
+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 0 0 0 0
+0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 32 4 0 2 0 0 0 0 4 0 0 0 0
+0 4 0 0 0 0 8 1024 2 0 16 0 0 4 0 4 4 0 4 0
+0 8 4 0 8 0 2 8 4 2 2 8 2 128 0 4 4 0 1024 4
+4 2 4 8 4 4 16 2 1024 4 4 2 4 4 4 8 1024 8 4 1024
+512 4 512 2 4 256 8 4 8 4 256 4 2 4 1024 128 2 512 4 2
+4 8 8 4 32 512 8 8 16 2 4 8 512 4 2 8 512 4 4 512
+4 2 2 2 2 8 256 8 32 4 4 16 4 2 4 4 64 64 4 4
+2 4 16 4 4 4 32 16 4 8 4 8 8 4 8 4 2 8 32 4
+8 1024 4 4 32 4 16 4 4 8 2 256 4 256 2 2 4 2 8 4
+2 4 4 2 4 4 64 32 2 2 8 4 8 2 4 4 4 4 2 8
+4 32 2 8 8 4 8 4 64 4 4 2 2 8 4 4 16 8 4 32
+16 4 4 2 32 4 2 2 2 4 16 8 4 2 4 4 4 8 4 2
+4 16 32 512 4 4 4 4 4 2 4 8 2 8 4 4 2 2 2 4
+4 32 8 8 4 4 2 2 2 4 8 4 4 8 2 2 4 4 4 8
+Case #80:
+8 4 2 8 128 1024 4 64 4 512 4 8 2 32 0 0 0 0 0 0
+16 2 4 64 4 2 8 4 2 8 512 4 128 4 2 0 0 0 0 0
+4 2 4 2 512 2 8 32 4 2 128 16 2 256 0 0 0 0 0 0
+2 8 2 8 2 1024 32 2 4 64 8 8 512 2 0 0 0 0 0 0
+2 8 8 512 4 2 4 4 1024 512 16 4 4 0 0 0 0 0 0 0
+8 4 4 128 2 4 2 4 64 2 8 256 4 2 8 2 0 0 0 0
+4 2 4 4 1024 4 2 512 4 2 128 4 0 0 0 0 0 0 0 0
+2 8 4 8 8 2 8 2 4 16 2 32 0 0 0 0 0 0 0 0
+4 64 4 2 512 4 2 512 128 8 4 4 128 4 512 0 0 0 0 0
+128 4 8 4 4 2 32 4 2 4 2 0 0 0 0 0 0 0 0 0
+8 4 2 16 8 4 64 8 2 4 2 8 8 0 0 0 0 0 0 0
+4 8 8 2 4 2 1024 4 64 4 2 4 2 128 0 0 0 0 0 0
+2 4 2 4 4 8 4 4 4 8 16 128 64 0 0 0 0 0 0 0
+4 2 8 64 2 4 2 4 2 32 2 512 0 0 0 0 0 0 0 0
+2 8 32 4 32 2 256 4 1024 16 4 0 0 0 0 0 0 0 0 0
+4 4 2 4 2 1024 2 8 256 2 8 4 0 0 0 0 0 0 0 0
+512 128 4 8 2 4 2 4 16 2 8 2 0 0 0 0 0 0 0 0
+2 4 2 4 4 8 2 4 2 128 2 8 2 32 0 0 0 0 0 0
+4 4 8 4 4 4 8 4 4 512 128 0 0 0 0 0 0 0 0 0
+512 4 256 4 4 2 32 8 8 16 4 0 0 0 0 0 0 0 0 0
+Case #81:
+2 8 8 128 4 4 256 4 8 4 4 0 0 0 0 0 0 0 0 0
+4 2 8 4 1024 8 4 2 4 64 2 4 0 0 0 0 0 0 0 0
+2 4 4 8 2 4 4 4 4 2 4 0 0 0 0 0 0 0 0 0
+4 2 8 4 2 4 128 8 4 4 4 0 0 0 0 0 0 0 0 0
+4 4 4 1024 4 4 4 8 8 4 2 8 4 0 0 0 0 0 0 0
+1024 512 4 2 512 4 2 512 2 8 2 128 2 4 4 2 0 0 0 0
+4 4 4 4 16 8 4 2 16 2 8 0 0 0 0 0 0 0 0 0
+2 4 4 4 2 8 64 8 8 2 64 0 0 0 0 0 0 0 0 0
+2 4 32 2 8 4 32 4 4 4 256 0 0 0 0 0 0 0 0 0
+2 8 1024 16 8 4 4 8 4 2 0 0 0 0 0 0 0 0 0 0
+4 2 4 4 4 2 128 8 4 4 4 4 0 0 0 0 0 0 0 0
+4 2 16 4 4 8 4 8 4 2 4 0 0 0 0 0 0 0 0 0
+4 256 4 2 8 8 4 4 2 8 4 1024 2 0 0 0 0 0 0 0
+8 16 8 2 8 4 128 4 128 4 4 2 0 0 0 0 0 0 0 0
+4 2 8 2 32 8 4 128 8 2 0 0 0 0 0 0 0 0 0 0
+4 4 4 1024 64 2 8 4 2 4 4 2 8 2 0 0 0 0 0 0
+1024 4 16 1024 4 128 4 2 4 2 128 256 4 512 0 0 0 0 0 0
+32 4 256 8 8 4 2 8 4 64 2 0 0 0 0 0 0 0 0 0
+4 8 8 2 4 2 512 8 2 8 8 2 0 0 0 0 0 0 0 0
+2 512 4 4 4 8 8 4 8 4 512 0 0 0 0 0 0 0 0 0
+Case #82:
+4 4 4 512 4 8 128 8 8 4 8 8 4 4 2 4 4 4 16 4
+16 2 4 8 2 4 2 8 8 2 4 2 8 4 256 4 1024 256 128 2
+4 4 1024 8 4 16 8 4 2 4 2 8 4 4 32 2 4 4 2 1024
+4 128 2 8 2 4 512 4 4 128 4 32 4 8 4 8 4 2 8 512
+8 2 4 4 4 2 8 2048 4 4 2 8 64 4 4 4 2 4 8 4
+2 512 128 4 128 16 4 4 32 4 4 4 512 2 2 2 512 4 16 8
+8 32 4 32 4 8 8 4 2 4 2 4 4 8 4 8 4 4 2 4
+4 4 2 8 4 8 512 8 512 512 256 32 2 128 1024 4 2 256 8 4
+4 4 4 2 2 4 2 256 2 4 2 4 4 1024 2 4 1024 4 2 2
+4 2 4 8 8 4 4 4 8 2 8 512 2 2 8 32 2 1024 8 8
+4 4 4 2 16 2 0 0 2 4 4 2 4 0 2 256 512 4 2 4
+0 32 4 0 2 16 0 0 0 512 2 16 0 0 1024 0 128 2 4 0
+0 256 4 0 0 2 0 0 0 8 32 0 0 0 2 0 1024 4 32 0
+0 4 0 0 0 0 0 0 0 4 2 0 0 0 512 0 2 8 4 0
+0 8 0 0 0 0 0 0 0 2 8 0 0 0 4 0 8 0 0 0
+0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 0 4 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 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
+Case #83:
+4 4 4 8 4 2 8 4 4 8 4 4 4 2 8 4 4 16 16 2
+8 2 2 8 4 8 8 2 4 512 8 4 4 1024 4 1024 8 4 4 256
+4 8 4 8 4 8 2 8 2 4 32 2 16 8 16 4 1024 4 2 8
+1024 256 4 8 2 256 8 8 8 2 4 8 2 4 128 16 32 2 64 8
+8 4 2 2 4 512 4 8 4 8 4 8 4 1024 2 2 4 32 256 512
+8 4 16 32 512 8 4 2 4 8 32 4 128 4 1024 16 64 8 4 8
+4 4 4 4 8 4 4 8 8 128 1024 2 16 256 2 4 4 16 4 64
+1024 8 4 8 8 1024 256 8 8 4 4 8 2 4 16 1024 4 2 2 8
+8 4 4 4 4 4 64 4 1024 4 2 32 4 4 8 4 256 4 32 4
+4 4 4 512 2 512 512 2 0 32 8 2 1024 4 32 4 4 2 4 4
+4 8 4 0 32 4 8 4 0 2 4 0 8 512 4 2 0 4 2 0
+0 2 4 0 8 4 0 2 0 0 64 0 0 2 4 4 0 2 4 0
+0 0 0 0 0 4 0 0 0 0 2 0 0 16 4 4 0 0 512 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 4 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 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 0 0 0 0 0 0 0 0 0
+Case #84:
+0 0 0 0 0 0 0 0 0 4 4 8 2 128 4 128 8 4 64 2
+0 0 0 0 0 0 0 0 4 512 8 4 4 2 128 4 4 8 8 2
+0 0 0 0 0 0 0 0 32 512 4 2 1024 4 8 32 4 2 8 4
+0 0 0 0 0 0 0 0 0 2 16 4 2 4 2 4 4 4 4 4
+0 0 0 0 0 0 0 0 4 4 8 2 4 128 4 2 4 16 4 16
+0 0 0 0 0 0 0 0 512 2 4 4 4 8 16 32 2 8 8 8
+0 0 0 0 0 0 0 0 4 2 4 32 4 256 8 1024 2 4 4 8
+0 0 0 0 0 0 0 0 4 2 4 4 2 4 32 4 2 4 8 4
+0 0 0 0 0 2 128 2 256 4 2 4 2 4 2 4 4 16 4 8
+0 0 0 0 0 0 4 2 4 128 64 4 2 32 512 2 128 2 4 2
+0 0 0 0 0 0 0 0 4 8 8 4 8 8 2 4 2 4 4 4
+0 0 0 0 0 0 0 4 2 4 2 4 8 256 4 2 16 4 2 4
+0 0 0 0 0 0 4 2 1024 2 128 512 4 16 4 4 4 8 2 8
+0 0 0 0 0 0 0 8 2 4 8 16 4 2 4 4 256 2 16 2
+0 0 0 0 0 0 4 64 4 2 4 512 2 256 2 4 8 2 4 2
+0 0 0 0 64 4 32 4 2 4 128 64 4 4 8 2 4 2 1024 32
+0 0 0 0 0 0 0 4 8 2 4 32 4 64 128 8 32 2 8 8
+0 0 0 0 0 0 0 0 0 4 4 16 4 8 64 4 8 2 512 2
+0 0 0 0 0 0 2 4 4 4 2 4 4 256 4 2 512 2 4 4
+0 0 0 0 0 0 0 4 2 8 64 2 4 4 4 4 2 4 2 4
+Case #85:
+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 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 2 0 4 0 0 4 0 2 0 0 0 0 0
+0 4 0 0 4 4 0 8 2 32 0 0 2 0 4 0 0 0 0 256
+0 2 0 4 2 4 0 2 4 16 0 0 256 0 512 0 0 0 0 8
+0 8 256 2 256 4 2 4 2 8 0 4 2 0 4 4 4 2 0 2
+0 4 4 4 2 2 4 128 128 2 2 2 64 32 2 4 4 4 2 4
+0 8 4 16 4 4 4 2 2 1024 256 256 8 8 8 8 4 8 4 2
+4 4 512 4 8 2 8 128 4 256 4 4 8 2 2 2 2 8 2 4
+4 512 2 2 2 4 2 512 8 4 4 16 2 128 16 32 4 8 8 2
+8 4 1024 8 8 1024 8 4 4 4 4 8 4 2 2 4 8 16 8 8
+2 2 4 4 2 2 64 4 2 2 8 8 32 4 8 2 2 4 8 2
+8 32 2 4 4 2048 4 4 4 256 2 2 8 8 2 4 8 8 4 8
+8 4 4 8 2 4 2 1024 4 8 128 512 2 2 8 4 2 2 8 2
+4 2 32 2 4 512 4 2 2 4 8 4 4 8 4 1024 1024 4 8 4
+4 4 2 8 4 4 512 512 1024 4 4 8 1024 8 64 8 4 128 8 4
+16 32 8 2 16 16 4 4 4 512 4 8 2 4 2 4 2 2 4 2
+Case #86:
+4 4 4 32 8 2 8 2 4 512 4 0 0 0 0 0 0 0 0 0
+512 4 4 8 2 32 4 2 8 4 32 0 0 0 0 0 0 0 0 0
+4 2 4 32 8 2 8 4 256 8 0 0 0 0 0 0 0 0 0 0
+2 64 32 4 2 8 2 8 2 1024 2 4 512 2 8 256 2 0 0 0
+8 2 8 2 16 2 64 2 4 2 8 8 2 4 0 0 0 0 0 0
+2 4 1024 2 4 4 4 2 8 4 2 4 0 0 0 0 0 0 0 0
+4 2 4 2 4 2 128 4 8 4 4 2 0 0 0 0 0 0 0 0
+8 4 16 8 2 4 4 2 8 4 4 2 0 0 0 0 0 0 0 0
+8 8 8 1024 64 4 2 4 2 64 128 4 2 0 0 0 0 0 0 0
+2 4 256 8 16 4 64 8 2 4 4 32 2 8 0 0 0 0 0 0
+4 256 4 128 4 4 4 64 2 128 4 0 0 0 0 0 0 0 0 0
+4 8 2 4 1024 4 2 4 2 512 8 0 0 0 0 0 0 0 0 0
+8 4 2 8 2 4 4 8 4 2 64 0 0 0 0 0 0 0 0 0
+4 2 64 2 8 4 128 8 4 4 4 2 0 0 0 0 0 0 0 0
+2 4 2 8 4 1024 8 64 8 2 4 2 8 0 0 0 0 0 0 0
+4 4 1024 4 4 2 1024 2 4 8 4 4 2 8 4 2 0 0 0 0
+16 4 1024 4 4 64 4 2 4 64 4 4 4 0 0 0 0 0 0 0
+2 4 2 1024 4 4 4 1024 4 2 128 4 128 4 64 2 0 0 0 0
+4 2 256 2 8 64 8 2 4 2 512 4 2 0 0 0 0 0 0 0
+4 64 4 4 4 2 32 4 1024 2 64 8 0 0 0 0 0 0 0 0
+Case #87:
+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 0 0 0 0
+0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 4 0 0 0 0
+0 0 0 0 0 0 0 0 4 0 0 0 0 16 0 64 0 0 0 0
+0 0 0 0 0 0 4 0 1024 0 0 0 0 4 0 8 0 0 0 0
+0 0 0 0 0 512 64 0 512 0 0 0 0 8 0 8 4 0 4 0
+0 0 4 0 0 8 2 0 2 0 0 0 4 32 0 2 4 0 2 0
+2 4 1024 0 0 128 8 0 4 0 0 0 128 4 32 4 2 2 4 0
+4 2 64 0 4 8 2 4 8 4 1024 2 4 2 4 8 8 8 4 4
+8 4 2 0 8 2 4 4 32 4 4 4 4 4 64 16 2 2 2 8
+32 8 4 4 1024 4 32 2 4 512 8 4 4 2 4 4 4 32 4 8
+4 512 2 16 8 4 2 32 2 256 4 2 2 4 4 8 2 2 2 4
+4 2 4 4 2 4 64 4 4 8 4 4 4 2 32 2 4 4 4 4
+8 256 4 2 4 32 4 2 16 8 256 8 4 8 128 4 512 4 8 4
+2 2 4 512 4 4 512 8 4 4 4 4 4 2 4 1024 128 32 2 2
+4 8 4 2 4 8 4 2 4 4 2 4 8 4 4 2 1024 4 4 16
+4 4 8 8 4 8 8 4 4 2 128 8 2 8 8 8 4 512 8 4
+128 8 2 2 64 2 8 4 512 8 2 4 4 2 2 1024 512 4 2 8
+Case #88:
+8 64 2 128 4 512 4 8 4 2 8 0 0 0 0 0 0 0 0 0
+2 512 2 4 2 4 2 4 2 4 4 2 8 2 0 0 0 0 0 0
+8 512 8 4 4 4 2 4 4 4 4 4 0 0 0 0 0 0 0 0
+2 8 2 4 2 4 64 4 16 512 4 2 8 32 0 0 0 0 0 0
+2 64 4 2 4 4 2 8 2 4 2 4 512 8 0 0 0 0 0 0
+4 2 512 4 4 8 32 8 8 1024 0 0 0 0 0 0 0 0 0 0
+4 8 4 4 4 8 4 4 2 8 4 4 2 0 0 0 0 0 0 0
+2 4 2 4 32 4 2 512 8 2 4 32 2 4 0 0 0 0 0 0
+2 4 128 4 1024 8 2 32 2 4 2 8 256 4 16 0 0 0 0 0
+4 4 2 4 1024 4 4 256 2 4 0 0 0 0 0 0 0 0 0 0
+4 4 4 2 8 4 4 8 4 4 4 2 0 0 0 0 0 0 0 0
+4 2 8 8 2 4 16 4 32 4 8 2 64 8 4 2 0 0 0 0
+2 512 4 2 128 2 4 32 8 2 128 4 4 8 8 0 0 0 0 0
+4 2 4 2 128 64 128 8 4 2 8 8 0 0 0 0 0 0 0 0
+32 4 4 4 256 4 8 1024 2 64 0 0 0 0 0 0 0 0 0 0
+8 128 4 4 4 4 4 2 8 4 4 0 0 0 0 0 0 0 0 0
+4 2 4 16 2 256 4 128 4 64 2 4 2 16 2 8 0 0 0 0
+2 4 1024 4 32 4 16 4 256 2 4 2 512 2 8 4 0 0 0 0
+2 4 2 4 512 4 2 4 2 8 2 256 8 16 0 0 0 0 0 0
+4 512 8 2 4 2 32 16 4 2 4 256 2 0 0 0 0 0 0 0
+Case #89:
+4 128 4 64 2 8 2 8 2 0 0 0 0 0 0 0 0 0 0 0
+2 64 8 4 4 4 2 8 4 2 64 0 0 0 0 0 0 0 0 0
+8 2 4 2 4 64 8 2 256 4 2 128 4 0 0 0 0 0 0 0
+64 8 2 4 32 4 64 2 8 4 128 64 4 4 2 0 0 0 0 0
+2 8 4 8 4 256 16 4 0 0 0 0 0 0 0 0 0 0 0 0
+128 4 1024 4 2 8 64 4 32 4 4 512 0 0 0 0 0 0 0 0
+2 8 4 2 512 4 2 8 2 8 8 0 0 0 0 0 0 0 0 0
+2 4 4 256 16 8 1024 2 128 4 4 2 4 0 0 0 0 0 0 0
+128 8 4 8 8 8 8 8 4 2 4 0 0 0 0 0 0 0 0 0
+4 256 4 4 8 512 8 8 2 64 4 2 0 0 0 0 0 0 0 0
+2 4 2 4 32 4 4 2 4 2 8 8 2 8 4 0 0 0 0 0
+2 4 4 4 4 2 16 2 1024 8 4 4 4 0 0 0 0 0 0 0
+2 8 2 4 2 32 4 4 8 4 128 4 2 1024 0 0 0 0 0 0
+4 2 4 2 4 2 4 32 4 64 8 8 4 0 0 0 0 0 0 0
+8 1024 4 2 4 2 1024 256 32 4 256 8 2 0 0 0 0 0 0 0
+16 2 16 4 4 256 4 2 8 2 16 4 4 0 0 0 0 0 0 0
+4 256 16 8 4 8 8 256 4 2 0 0 0 0 0 0 0 0 0 0
+512 4 512 32 8 4 512 4 4 4 2 0 0 0 0 0 0 0 0 0
+2 128 8 4 4 2 8 2 1024 2 4 4 4 2 0 0 0 0 0 0
+4 4 4 8 1024 4 2 8 8 4 4 64 0 0 0 0 0 0 0 0
+Case #90:
+8 2 128 4 1024 16 8 8 4 512 32 2 0 0 0 0 0 0 0 0
+4 4 2 8 8 128 8 4 32 4 128 0 0 0 0 0 0 0 0 0
+2 4 16 4 128 32 4 128 8 4 8 4 2 0 0 0 0 0 0 0
+4 2 4 16 8 2 512 8 8 32 64 8 2 0 0 0 0 0 0 0
+4 8 64 8 8 4 4 2 4 256 4 2 0 0 0 0 0 0 0 0
+4 8 4 1024 2 16 8 256 8 256 4 4 2 128 0 0 0 0 0 0
+8 16 2 8 32 2 8 8 8 4 4 8 0 0 0 0 0 0 0 0
+4 16 4 16 4 1024 8 2 8 8 64 4 2 0 0 0 0 0 0 0
+8 4 2 8 8 8 4 8 2 128 4 2 0 0 0 0 0 0 0 0
+4 1024 4 2 4 2 8 2 8 1024 8 0 0 0 0 0 0 0 0 0
+4 2 4 4 2 8 512 64 1024 4 4 2 64 4 0 0 0 0 0 0
+2 8 2 8 8 8 4 256 4 4 4 2 4 0 0 0 0 0 0 0
+64 8 8 4 4 4 4 4 32 16 2 0 0 0 0 0 0 0 0 0
+8 4 2 8 4 2 8 4 64 512 4 4 0 0 0 0 0 0 0 0
+2 512 1024 2 4 2 8 2 4 4 2 8 2 4 0 0 0 0 0 0
+8 4 2 4 2 8 2 1024 2 8 2 4 32 0 0 0 0 0 0 0
+4 2 4 32 4 2 4 4 4 2 256 4 8 2 0 0 0 0 0 0
+2 512 8 4 2 4 2 128 8 4 8 2 0 0 0 0 0 0 0 0
+2 4 2 8 64 4 4 8 4 2 0 0 0 0 0 0 0 0 0 0
+16 4 2 64 4 1024 2 64 128 2 512 8 8 0 0 0 0 0 0 0
+Case #91:
+4 512 2 8 8 2 2 2 8 4 8 4 2 2 4 2 256 8 8 8
+2 8 4 4 1024 4 16 1024 4 2 64 2 1024 4 4 8 2 64 2 4
+256 2 2 2 2 4 4 4 2 8 2 4 4 2 4 4 256 8 4 64
+32 128 64 4 4 8 64 4 128 2 4 2 2 8 2 2 8 2 512 4
+2 2 8 8 2 512 4 8 32 4 4 8 128 64 512 8 4 4 4 4
+4 8 4 2 8 128 2 2 8 512 4 1024 8 4 4 2 2 4 64 4
+2 1024 2 256 2 4 4 8 128 2 4 8 4 4 64 512 8 2 2 8
+8 4 8 4 64 8 16 512 4 512 2 8 32 4 4 4 4 4 8 8
+2 2 2 4 4 2 2 8 2 4 4 8 4 4 8 4 2 128 4 4
+4 0 4 4 8 8 8 4 4 8 4 0 2 16 256 4 8 2 2 2
+2 0 2 4 8 8 2 0 0 4 2 0 4 4 8 4 2 8 4 0
+0 0 4 4 32 8 8 0 0 2 4 0 128 512 4 32 4 512 2 0
+0 0 1024 0 8 0 4 0 0 0 0 0 2 0 0 0 2 64 4 0
+0 0 8 0 0 0 4 0 0 0 0 0 0 0 0 0 0 4 2 0
+0 0 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 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 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
+Case #92:
+2 4 8 1024 4 2 4 1024 2 4 8 8 2 8 4 4 512 1024 128 2
+64 4 4 8 4 4 4 2 4 16 4 4 4 2 4 2 8 4 4 4
+2 2 256 1024 64 4 2 4 1024 8 1024 2 2 256 128 4 2 4 4 4
+4 8 2 4 2 8 8 64 2 8 2 8 4 4 2 4 4 4 2 4
+128 8 8 4 8 4 1024 256 4 4 8 8 4 256 4 4 128 2 8 4
+2 4 8 64 1024 4 8 4 2 4 4 8 8 2 2 2 4 4 4 4
+4 4 64 32 2 16 2 2 16 64 2 4 8 4 4 8 4 4 2 2
+4 8 256 4 4 4 4 4 4 8 64 4 4 32 4 8 4 2 4 4
+4 4 4 2 8 2 128 4 4 4 4 4 4 128 4 4 2 4 4 4
+4 64 2 4 4 4 4 2 4 64 0 1024 16 4 2 2 4 2 8 2
+2 0 4 2 4 2 4 0 4 256 0 64 4 4 8 0 32 256 4 4
+8 0 16 32 32 0 0 0 0 64 0 4 0 2 0 0 2 2 0 2
+8 0 8 64 16 0 0 0 0 8 0 0 0 1024 0 0 8 4 0 128
+256 0 0 2 4 0 0 0 0 0 0 0 0 2 0 0 4 0 0 0
+0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 2 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
+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
+Case #93:
+4 64 128 8 64 8 8 256 8 32 4 4 512 0 0 0 0 0 0 0
+2 8 2 8 2 4 4 4 2 8 2 0 0 0 0 0 0 0 0 0
+8 8 4 2 128 2 32 4 4 0 0 0 0 0 0 0 0 0 0 0
+4 2 8 4 4 256 4 4 2 8 4 0 0 0 0 0 0 0 0 0
+8 2 8 64 2 128 2 4 64 128 4 2 4 64 0 0 0 0 0 0
+2 4 2 4 4 256 4 8 8 2 8 8 0 0 0 0 0 0 0 0
+8 4 128 8 8 4 4 512 8 8 2 0 0 0 0 0 0 0 0 0
+4 1024 8 8 2 16 128 8 2 4 64 2 0 0 0 0 0 0 0 0
+8 4 2 4 4 4 2 4 2 16 4 2 32 4 0 0 0 0 0 0
+2 8 2 4 4 4 4 8 4 2 8 4 2 0 0 0 0 0 0 0
+8 4 2 4 4 4 2 4 2 128 2 8 0 0 0 0 0 0 0 0
+4 2 4 2 256 4 1024 2 4 2 4 2 4 2 0 0 0 0 0 0
+2 4 2 4 4 4 16 4 4 4 4 2 4 0 0 0 0 0 0 0
+4 4 2 8 2 8 4 2 8 128 8 512 8 0 0 0 0 0 0 0
+8 4 32 8 4 512 2 8 8 0 0 0 0 0 0 0 0 0 0 0
+8 2 8 4 2 8 512 4 32 512 8 0 0 0 0 0 0 0 0 0
+512 4 4 2 8 8 8 8 4 0 0 0 0 0 0 0 0 0 0 0
+512 8 2 4 128 8 128 32 2 1024 4 0 0 0 0 0 0 0 0 0
+2 8 128 2 64 2 4 2 1024 2 16 4 512 2 8 8 4 0 0 0
+8 2 1024 4 2 4 2 64 4 2 4 4 0 0 0 0 0 0 0 0
+Case #94:
+4 2 4 4 2 2 4 4 2 2 8 32 2 8 32 4 2 256 2 4
+4 1024 2 4 4 256 4 4 4 16 4 8 4 4 8 2 32 4 4 2
+4 4 4 2 64 2 2 4 512 8 4 4 64 2 4 8 4 4 2 4
+2 2 2 4 16 4 4 8 2 4 4 4 4 32 64 256 2 8 4 2
+8 4 4 2 2 16 4 2 32 32 8 4 4 4 4 8 4 4 4 8
+8 4 32 16 4 8 256 4 2 16 4 4 4 2 16 4 2 2 4 8
+2 4 4 64 2 2 4 2 4 4 256 4 4 8 8 8 16 8 1024 4
+4 4 256 2 4 8 8 32 256 2 4 4 2 32 4 8 8 4 4 8
+512 4 4 32 2 4 2 2 4 4 2 16 4 2 1024 4 4 1024 2 2
+128 32 2 8 4 8 512 4 2 64 4 4 16 4 4 2 8 2 8 4
+4 128 16 4 2 0 64 2 64 8 2 4 4 2 2 0 4 4 16 512
+2 2 4 4 8 0 8 4 4 4 0 0 2 4 16 0 2 0 4 0
+0 8 2 0 4 0 4 0 2 0 0 0 0 2 256 0 0 0 512 0
+0 0 8 0 2 0 0 0 4 0 0 0 0 8 2 0 0 0 0 0
+0 0 2 0 64 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0
+0 0 4 0 4 0 0 0 8 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 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
+Case #95:
+4 8 8 2 8 512 128 4 16 4 2 8 4 2 4 0 0 0 0 0
+8 8 64 4 4 2 4 128 8 4 1024 2 64 1024 0 0 0 0 0 0
+128 8 8 8 4 8 64 16 2 4 0 0 0 0 0 0 0 0 0 0
+2 8 8 2 4 2 16 2 4 2 8 2 4 0 0 0 0 0 0 0
+1024 64 4 512 256 2 4 2 8 4 2 0 0 0 0 0 0 0 0 0
+4 2 8 8 8 16 2 64 512 32 2 8 2 4 2 4 0 0 0 0
+2 128 8 4 2 512 8 4 8 4 2 0 0 0 0 0 0 0 0 0
+4 2 4 2 64 32 2 4 4 4 8 2 4 256 0 0 0 0 0 0
+2 8 4 4 2 64 2 4 2 4 4 0 0 0 0 0 0 0 0 0
+4 4 4 4 4 4 2 4 2 32 8 2 0 0 0 0 0 0 0 0
+4 2 256 8 4 64 2 512 4 32 8 2 8 4 4 0 0 0 0 0
+4 4 256 8 8 4 64 4 4 2 8 2 0 0 0 0 0 0 0 0
+4 2 8 4 2 8 8 2 4 8 16 4 4 1024 0 0 0 0 0 0
+32 1024 8 8 4 2 32 2 4 4 4 2 8 0 0 0 0 0 0 0
+2 4 256 64 2 4 512 4 4 4 4 2 8 0 0 0 0 0 0 0
+4 2 8 2 128 64 4 64 8 4 2 4 4 2 0 0 0 0 0 0
+8 4 2 4 2 512 4 1024 4 4 4 0 0 0 0 0 0 0 0 0
+2 8 8 2 8 2 64 2 4 2 4 2 4 0 0 0 0 0 0 0
+1024 4 4 2 256 2 4 2 64 512 4 32 0 0 0 0 0 0 0 0
+8 4 2 8 4 16 4 512 4 4 2 0 0 0 0 0 0 0 0 0
+Case #96:
+4 4 8 8 4 4 4 512 4 8 2 0 0 0 0 0 0 0 0 0
+4 512 4 4 4 2 8 8 8 8 8 0 0 0 0 0 0 0 0 0
+2 8 4 2 32 8 4 4 2 4 4 0 0 0 0 0 0 0 0 0
+8 4 2 4 4 4 4 2 8 512 4 0 0 0 0 0 0 0 0 0
+4 4 2 8 4 1024 4 4 4 2 4 2 4 0 0 0 0 0 0 0
+8 8 8 4 2 8 2 4 128 8 0 0 0 0 0 0 0 0 0 0
+2 4 1024 4 4 64 4 512 2 0 0 0 0 0 0 0 0 0 0 0
+4 2 8 8 4 4 256 0 0 0 0 0 0 0 0 0 0 0 0 0
+4 2 4 2 128 2 4 2 4 4 4 8 128 2 512 2 0 0 0 0
+2 4 2 1024 4 128 2 4 256 4 4 0 0 0 0 0 0 0 0 0
+4 4 8 2 8 4 64 8 2 0 0 0 0 0 0 0 0 0 0 0
+8 4 512 2 4 4 4 2 256 64 2 8 0 0 0 0 0 0 0 0
+2 4 2 32 2 512 4 16 8 16 8 4 32 4 8 0 0 0 0 0
+16 4 2 8 2 8 4 2 1024 4 256 4 4 0 0 0 0 0 0 0
+2 128 4 2 8 2 128 4 4 2 8 8 0 0 0 0 0 0 0 0
+4 4 2 4 4 4 8 2 4 4 128 4 2 0 0 0 0 0 0 0
+256 4 16 2 1024 256 8 4 2 64 256 4 4 2 0 0 0 0 0 0
+4 2 8 4 16 4 128 512 4 16 2 4 2 0 0 0 0 0 0 0
+8 2 512 256 2 8 4 128 8 2 4 2 4 512 0 0 0 0 0 0
+2 8 2 8 4 4 128 256 2 4 2 0 0 0 0 0 0 0 0 0
+Case #97:
+0 0 0 0 0 0 0 0 16 4 32 512 8 16 4 4 4 4 2 256
+0 0 0 0 0 0 0 0 0 2 32 2 4 4 4 4 4 2 256 4
+0 0 0 0 0 0 0 0 64 4 128 4 8 128 2 4 2 4 1024 512
+0 0 0 0 0 2 8 64 4 4 64 4 2 4 8 4 1024 8 256 2
+0 0 0 0 0 0 0 0 4 2 16 8 256 2 8 16 4 128 8 2
+0 0 0 0 0 0 0 0 2 4 1024 4 8 2 8 64 4 4 4 2
+0 0 0 0 0 0 0 0 2 4 512 4 8 2 512 4 8 512 8 4
+0 0 0 0 0 0 4 4 2 4 64 2 4 2 4 4 4 8 32 64
+0 0 0 0 0 0 0 4 512 2 4 4 1024 4 2 4 8 4 4 8
+0 0 0 0 0 256 128 4 4 4 4 4 2 4 2 64 4 256 4 2
+0 0 0 0 8 64 4 4 4 2 4 256 32 4 2 1024 4 256 2 64
+0 0 0 0 0 0 4 256 2 4 2 8 4 8 2 4 256 4 2 4
+0 0 0 0 0 0 2 4 8 64 4 2 8 2 8 2 4 2 4 4
+0 0 0 0 0 0 0 4 512 2 8 2 4 2 256 4 4 128 256 4
+0 0 0 0 0 0 0 0 4 4 2 4 4 32 4 8 4 16 4 8
+0 0 0 0 0 0 0 0 4 1024 4 1024 2 8 32 2 4 4 4 2
+0 0 0 0 0 0 2 8 2 4 8 2 8 2 8 4 8 512 4 32
+0 0 0 0 0 0 0 0 0 4 2 4 8 128 2 4 2 4 2 4
+0 0 0 0 0 0 0 0 32 8 2 4 2 8 4 4 1024 4 2 4
+0 0 0 0 0 0 8 256 2 4 256 2 8 4 256 2 16 4 2 8
+Case #98:
+8 4 2 2 4 4 4 8 8 2 4 8 64 4 8 4 2 1024 8 4
+512 2 8 4 4 4 4 8 4 8 4 2 4 2 8 4 8 4 8 512
+8 8 2 4 4 32 4 2 1024 4 2 4 2 8 4 512 2 32 8 4
+8 4 16 4 4 256 2 8 2 256 4 2 128 256 8 8 4 8 4 4
+4 2 4 2 8 4 8 256 8 4 2 8 4 2 8 1024 4 8 4 4
+256 32 4 4 4 4 2 4 128 2 512 32 4 8 4 4 4 4 2 2
+4 4 8 2 128 64 8 4 64 4 256 8 1024 4 4 2 4 16 4 16
+16 8 2 4 2 4 2 2 4 4 4 8 2 512 2 4 256 4 128 4
+8 4 16 2 32 4 64 8 8 2 2 16 1024 8 8 2 4 0 4 8
+4 64 2 64 4 2 8 512 8 4 4 256 4 1024 0 8 2 0 128 2
+0 256 4 4 64 256 4 8 4 8 256 4 2 128 0 0 256 0 2 4
+0 128 2 64 2 8 32 512 256 4 4 0 4 4 0 0 128 0 0 2
+0 4 4 8 64 0 4 2 32 2 256 0 256 2 0 0 4 0 0 4
+0 2 0 16 0 0 0 0 2 8 0 0 4 8 0 0 512 0 0 32
+0 0 0 2 0 0 0 0 0 2 0 0 2 0 0 0 128 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 4 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 0 0 0 0 0 0 0 0 0 0 0
+Case #99:
+0 0 0 0 0 0 0 0 0 0 2 4 2 8 2 8 4 8 2 4
+0 0 0 0 0 0 0 0 0 0 2 8 8 2 4 4 4 2 256 2
+0 0 0 0 0 0 0 0 0 2 4 8 2 64 4 8 2 8 64 2
+0 0 0 0 0 0 2 4 4 4 2 8 2 4 4 8 4 2 4 128
+0 0 0 0 0 0 0 0 0 0 0 0 8 4 64 4 4 4 2 8
+0 0 0 0 0 0 2 4 4 2 4 2 8 1024 2 32 4 4 2 4
+0 0 0 0 0 0 0 0 4 32 4 2 4 2 8 8 16 8 2 4
+0 0 0 0 0 0 0 0 2 4 2 4 16 2 8 4 512 4 4 4
+0 0 0 0 0 0 0 0 4 2 8 4 4 2 8 64 4 4 16 2
+0 0 0 0 0 0 0 0 4 8 2 512 4 8 8 8 32 4 2 8
+0 0 0 0 0 0 0 0 0 0 4 4 2 4 4 64 512 2 4 1024
+0 0 0 0 0 0 0 0 0 4 64 4 256 2 8 4 8 2 4 64
+0 0 0 0 0 0 0 2 16 4 4 16 4 8 2 1024 8 2 256 2
+0 0 0 0 0 0 0 0 0 0 4 2 8 2 512 32 8 2 16 4
+0 0 0 0 0 4 2 4 4 4 8 4 256 4 4 2 4 8 2 512
+0 0 0 0 0 0 0 0 8 2 32 4 8 32 256 4 2 8 8 2
+0 0 0 0 0 0 0 0 128 1024 4 8 2 4 256 2 4 8 4 4
+0 0 0 0 0 0 4 2 1024 32 8 8 2 8 4 4 2 4 512 2
+0 0 0 0 0 0 0 4 8 256 2 4 2 16 2 8 128 2 4 64
+0 0 0 0 0 0 0 0 0 0 0 128 8 4 8 8 256 2 8 2
+Case #100:
+4 8 512 4 32 2 128 4 2 2 8 8 2 4 2 8 2 4 8 8
+2 1024 2 4 256 8 4 4 512 8 2 4 8 8 16 4 32 4 4 2
+1024 8 8 256 16 4 256 4 16 2 8 4 64 8 4 4 8 2 2 4
+2 8 4 8 4 4 4 512 1024 4 4 4 8 512 4 2 8 4 8 4
+1024 8 2 512 4 8 4 4 16 4 1024 2 1024 8 2 32 4 2 2 64
+8 2 8 4 2 2 2 2 4 2 8 4 128 8 4 4 64 8 256 4
+8 4 4 4 1024 4 4 16 16 8 2 1024 8 256 2 32 8 64 4 2
+8 2 2 4 4 2 32 8 4 8 4 4 4 2 4 2 2 512 64 8
+2 8 4 2 2 64 2 2 4 8 4 4 2 128 2 4 64 2 4 4
+128 4 32 4 32 4 64 4 32 2 4 0 4 8 1024 4 4 4 8 2
+4 0 256 0 2 128 4 4 4 8 16 0 1024 4 8 4 32 4 2 8
+0 0 4 0 0 2 256 0 0 4 512 0 4 0 2 64 4 8 8 2
+0 0 0 0 0 4 128 0 0 0 2 0 2 0 4 128 512 2 0 4
+0 0 0 0 0 128 0 0 0 0 4 0 0 0 8 4 4 4 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 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 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
diff --git a/kickstart_2014/src/y2014_round_a/B-sample.in b/kickstart_2014/src/y2014_round_a/B-sample.in
new file mode 100644
index 0000000..d785baa
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/B-sample.in
@@ -0,0 +1,21 @@
+3
+4 right
+2 0 2 4
+2 0 4 2
+2 2 4 8
+2 2 4 4
+10 up
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+2 0 0 0 0 0 0 0 0 0
+3 right
+2 2 2
+4 4 4
+8 8 8
\ No newline at end of file
diff --git a/kickstart_2014/src/y2014_round_a/B-sample.out b/kickstart_2014/src/y2014_round_a/B-sample.out
new file mode 100644
index 0000000..c0c8dbb
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/B-sample.out
@@ -0,0 +1,20 @@
+Case #1:
+0 0 4 4
+0 2 4 2
+0 4 4 8
+0 0 4 8
+Case #2:
+4 0 0 0 0 0 0 0 0 0
+4 0 0 0 0 0 0 0 0 0
+4 0 0 0 0 0 0 0 0 0
+4 0 0 0 0 0 0 0 0 0
+4 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 0 0 0
+Case #3:
+0 2 4
+0 4 8
+0 8 16
diff --git a/kickstart_2014/src/y2014_round_a/B-small-practice.out b/kickstart_2014/src/y2014_round_a/B-small-practice.out
new file mode 100644
index 0000000..7125fc6
--- /dev/null
+++ b/kickstart_2014/src/y2014_round_a/B-small-practice.out
@@ -0,0 +1,100 @@
+Case #1:
+0 0 2 4
+0 0 4 8
+0 2 16 32
+0 0 4 16
+Case #2:
+0 2 2 4
+0 0 4 8
+0 0 16 32
+0 0 4 16
+Case #3:
+0 0 0 0
+0 0 0 0
+0 0 0 0
+0 0 0 0
+Case #4:
+0 0 0 0
+0 0 0 0
+4 4 4 4
+4 4 4 4
+Case #5:
+4 4 0 0
+4 4 0 0
+4 4 0 0
+4 4 0 0
+Case #6:
+0 0 4 4
+0 0 4 4
+0 0 4 4
+0 0 4 4
+Case #7:
+4 4 4 4
+4 4 4 4
+0 0 0 0
+0 0 0 0
+Case #8:
+4 8 0 0
+4 8 0 0
+4 8 0 0
+4 8 0 0
+Case #9:
+0 0 0 0
+0 0 0 0
+2048 2048 2048 2048
+2048 2048 2048 2048
+Case #10:
+2048 2048 0 0
+2048 2048 0 0
+2048 2048 0 0
+2048 2048 0 0
+Case #11:
+0 0 2048 2048
+0 0 2048 2048
+0 0 2048 2048
+0 0 2048 2048
+Case #12:
+2048 2048 2048 2048
+2048 2048 2048 2048
+0 0 0 0
+0 0 0 0
+Case #13:
+256 512 512 256
+0 0 0 128
+0 0 0 2
+0 0 0 4
+Case #14:
+0 0 0 512
+0 0 0 0
+0 0 0 128
+0 0 0 0
+Case #15:
+0 0 8 32
+0 0 0 0
+0 0 2 64
+0 0 0 2
+Case #16:
+0 0 0 0
+0 0 0 1024
+0 0 0 8
+0 0 0 4
+Case #17:
+16 4 0 0
+1024 4 0 0
+1024 16 1024 0
+8 128 1024 0
+Case #18:
+16 2 0 0
+128 2 16 128
+1024 2 4 256
+4 2 4 0
+Case #19:
+0 0 0 0
+0 4 2 1024
+128 8 8 32
+8 512 256 8
+Case #20:
+2 4 4 2
+4 2 128 4
+8 4 256 0
+0 256 2 0
diff --git a/kickstart_2014/src/y2014_round_a/b.rs b/kickstart_2014/src/y2014_round_a/b.rs
index 9031b0d..f5d8daf 100644
--- a/kickstart_2014/src/y2014_round_a/b.rs
+++ b/kickstart_2014/src/y2014_round_a/b.rs
@@ -1,20 +1,24 @@
 //use bit_set::BitSet;
 use codejam::util::codejam::run_cases;
-use std::cmp::min;
-use std::cmp::Ordering;
 use std::io::Write;
 use std::usize;
 use codejam::util::grid::Grid;
+use codejam::util::vector_2d::Vector2d;
+use codejam::util::grid::constants::*;
+use itertools::Itertools;
 
 /*
 Grid
 */
-const DIR_STRINGS : [&str; 4] = ["left", "right", "up", "down"];
 
 pub fn solve_all_cases()
 {
     run_cases(
-        &["B-small-practice", "B-large-practice"],
+        &[
+            "B-sample",
+            "B-small-practice",
+            "B-large-practice"
+        ],
         "y2014_round_a",
         |reader, buffer| {
             let t = reader.read_int();
@@ -23,14 +27,14 @@ pub fn solve_all_cases()
                 let in_line = reader.read_string_line();
                 assert_eq!(2, in_line.len());
                 let n : usize = in_line[0].parse().unwrap();
-                let dir = in_line[1];
+                let dir = &in_line[1];
 
                 let mut grid = Grid::new(n,n);
 
                 for r in 0..n {
                     let grid_row = reader.read_num_line();
                     assert_eq!(n, grid_row.len());
-                    for (c, val) in grid_row.into_iter() {
+                    for (c, val) in grid_row.into_iter().enumerate() {
                         grid[(r, c)] = val;
                     }
                 }
@@ -41,16 +45,82 @@ pub fn solve_all_cases()
 
                 println!("Solving case {}", case_no);
 
-                let ans = solve(t, arrivals.as_slice(), departures.as_slice());
-                writeln!(buffer, "Case #{}: {} {}", case_no, ans[0], ans[1]).unwrap();
+                let ans = solve(&dir, &mut grid);
+                writeln!(buffer, "Case #{}:\n{}", case_no, ans).unwrap();
             }
         },
     );
 }
 
-fn solve(dir: String, grid: &Grid<u16>) -> String
+fn move_to_empty(grid: &mut Grid<u16>, start_square: &Vector2d<isize>, dir: &Vector2d<isize>) -> bool
 {
+    let n = grid.R as isize;
+    let mut moved_any = false;
+    let mut i = 0;
+    while i < n - 1 {
+        let cur_loc = *start_square + (dir * i);
+        let next_loc = *start_square + (dir * (i + 1));
 
+        if grid[&cur_loc] != 0 && grid[&next_loc] == 0 {
+            grid[&next_loc] = grid[&cur_loc];
+            grid[&cur_loc] = 0;
+            moved_any = true;
+        }
+        i += 1;
+    }
 
-    "3".to_string()
+    moved_any
+}
+
+fn solve(dir: &str, grid: &mut Grid<u16>) -> String
+{
+    let n = grid.R as isize;
+    let (start_range, step): (Vec<Vector2d<isize>>, Vector2d<isize>) = match dir {
+        "left" => {
+            ((0..n).map(|r| Vector2d::with_val(r, n - 1)).collect(),
+             WEST)
+        },
+        "right" => {
+            ((0..n).map(|r| Vector2d::with_val(r, 0)).collect(),
+             EAST
+            )
+        },
+        "up" => {
+            ((0..n).map(|c| Vector2d::with_val(n-1, c)).collect(),
+             NORTH
+            )
+        },
+        "down" => {
+            ((0..n).map(|c| Vector2d::with_val(0, c)).collect(),
+             SOUTH
+            )
+        },
+        _ => {
+            panic!("Unrecognized str");
+        }
+    };
+
+    //combining run
+    for start_square in start_range.iter() {
+
+        while move_to_empty(grid, start_square, &step) {}
+
+        let mut i = n-1;
+        while i > 0 {
+            let cur_loc = *start_square + (step * i);
+            let next_loc = *start_square + (step * (i-1));
+            if grid[ & cur_loc ] == grid[ &next_loc ] {
+                grid[ &next_loc] = 0;
+                grid[ &cur_loc] *= 2;
+                //make sure we don't recombine
+                i -= 1;
+            }
+            i -= 1;
+        }
+
+        while move_to_empty(grid, start_square, &step) {}
+
+    }
+
+    (0..n).map( |r| (0..n).map( |c| grid[ (r,c) ]).join(" ") ).join("\n")
 }
