From 3b13ef1c6850c6b5bccea5a82977e78e6665479a Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 24 Mar 2025 15:14:08 +0100 Subject: [PATCH 01/30] Adding collision boarders Added: - collision boarders to each island --- data/new_maps/100x100_map.tmx | 60 ++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index b19ccaa..ce1ecdf 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + @@ -918,6 +918,64 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ee2e20175e292e507ad92fa1b559602072e9f2c6 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 24 Mar 2025 15:17:27 +0100 Subject: [PATCH 02/30] Added boarders Added: - collision boarder into setup in game running --- src/states/game_running.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/states/game_running.py b/src/states/game_running.py index b4993c6..161babc 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -88,6 +88,9 @@ def setup(self, player_start_pos): (x * TILE_SIZE, y * TILE_SIZE), surface, self.all_sprites, WORLD_LAYERS["main"] ) + for obj in self.tmx_map["map"].get_layer_by_name("Collision_boarder"): + self.island_boarder = src.sprites.Sprite((obj.x, obj,y), surface, self.all_sprites, WORLD_LAYERS["bg"]) + # Islands islands = self.tmx_map["map"].get_layer_by_name("Islands") for x, y, surface in islands.tiles(): From 71b6aeceefe4b7def03113a2085ccd057a23d37b Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 31 Mar 2025 14:53:05 +0200 Subject: [PATCH 03/30] Added map_v3 Added: - a copy of the map that is today --- data/new_maps/100x100_map_v3.tmx | 1220 ++++++++++++++++++++++++++++++ src/states/game_running.py | 4 +- 2 files changed, 1222 insertions(+), 2 deletions(-) create mode 100644 data/new_maps/100x100_map_v3.tmx diff --git a/data/new_maps/100x100_map_v3.tmx b/data/new_maps/100x100_map_v3.tmx new file mode 100644 index 0000000..ce1ecdf --- /dev/null +++ b/data/new_maps/100x100_map_v3.tmx @@ -0,0 +1,1220 @@ + + + + + + + + +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131, +2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131,2131 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,38,35,35,35,35,37,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,35,35,35,35,35,35,35,35,35,13,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,13,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,11,11,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,13,14,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,37,38,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,13,14,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,37,38,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,3221225483,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,11,11,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,37,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,13,14,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,37,38,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,13,14,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,37,38,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,59,59,59,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,58,59,59,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,11,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,11,11,11,12,0,34,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,34,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,34,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,36,0,34,35,35,35,35,13,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,35,35,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,14,35,35,36,0,58,59,59,59,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,59,59,59,59,60,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,37,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,35,35,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,59,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,2,3,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,25,26,27,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,49,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,26,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,1,2,3,3,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,1,2,3,3,1610612815,26,26,79,2,2,3,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,1,2,2,3,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,26,27,26,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,25,26,27,26,26,26,27,26,26,26,27,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,25,26,26,27,28,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,50,51,26,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,49,50,51,26,26,50,51,26,26,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,26,50,51,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,50,26,50,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,75,75,3221225551,26,26,27,26,2684354639,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,51,26,51,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,73,75,75,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,26,26,26,2684354639,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,75,74,75,76,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,2684354639,54,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,49,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,6,6,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,100,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,100,30,30,30,30,30,30,30,100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,100,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,2684354660,54,54,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,29,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,54,54,54,54,54,54,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,6,6,6,6,6,6,6,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,99,6,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,2684354659,54,54,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,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,30,30,30,30,30,30,30,30,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29,30,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,54,54,54,54,54,54,54,54,54,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,53,54,54,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,2,3,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,25,26,27,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,49,50,51,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,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,0, +0,0,0,0,0,0,0,0,1,2,2,2,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,1,2,3,3,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,25,26,26,26,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,1,2,3,4,0,0,0,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,27,26,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,26,27,26,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,5,6,6,7,0,0,0,25,26,27,28,0,0,0,29,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,26,27,28,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,49,50,51,26,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,29,30,30,31,0,0,0,49,50,51,52,0,0,0,53,54,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,49,26,50,51,52,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,73,75,75,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,3221225571,31,0,0,0,73,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,74,74,76,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,99,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,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, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2443,2444,2545,2545,2545,2545,2545,2545,2443,2444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2470,2471,2572,2572,2572,2572,2572,2572,2470,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684357024,2684356997,2277,2277,2277,2277,2277,2277,2443,2444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684357025,2684356998,0,0,0,0,0,0,2470,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,1610615281,1610615308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2443,2444,2547,2548,3221228059,3221228058,3221228047,3221228046,2443,2444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2470,2471,2574,2575,2586,2587,3221228020,3221228019,2470,2471,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2612,2613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2612,2613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2612,2613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3221228081,3221228080,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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/src/states/game_running.py b/src/states/game_running.py index d585b8f..29f938f 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -95,8 +95,8 @@ def setup(self, player_start_pos: str) -> None: pos=(x * TILE_SIZE, y * TILE_SIZE), surface=surface, groups=(self.all_sprites,), z=WORLD_LAYERS["main"] ) - for obj in self.tmx_map["map"].get_layer_by_name("Collision_boarder"): - self.island_boarder = src.sprites.Sprite((obj.x, obj,y), surface, self.all_sprites, WORLD_LAYERS["bg"]) + # for obj in self.tmx_map["map"].get_layer_by_name("Collision_boarder"): + # self.island_boarder = src.sprites.Sprite((obj.x, obj,y), surface, self.all_sprites, WORLD_LAYERS["bg"]) # Islands islands = self.tmx_map["map"].get_layer_by_name("Islands") From 46cdfebb8b97d7ad2686bbb6a6bc0910ae5b9114 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 12 May 2025 13:45:05 +0200 Subject: [PATCH 04/30] Added collision between player and islands Added: - working collision between the player and the islands --- src/states/game_running.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/states/game_running.py b/src/states/game_running.py index 29f938f..2cb58c3 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -99,12 +99,13 @@ def setup(self, player_start_pos: str) -> None: # self.island_boarder = src.sprites.Sprite((obj.x, obj,y), surface, self.all_sprites, WORLD_LAYERS["bg"]) # Islands - islands = self.tmx_map["map"].get_layer_by_name("Islands") - for x, y, surface in islands.tiles(): - BaseSprite( + self.island_group = pygame.sprite.Group() + self.islands = self.tmx_map["map"].get_layer_by_name("Islands") + for x, y, surface in self.islands.tiles(): + self.island_obj = BaseSprite( pos=(x * TILE_SIZE, y * TILE_SIZE), surf=surface, - groups=(self.all_sprites,), + groups=(self.all_sprites, self.island_group), z=WORLD_LAYERS["bg"], ) @@ -143,7 +144,7 @@ def update(self, events) -> None: """ update each sprites and handle events """ - + island_collision = pygame.sprite.spritecollideany(self.player, self.island_group) collide = self.player.rect.colliderect(self.shop.rect) if self.player else False dt = self.clock.tick() / 1000 self.all_sprites.update(dt) @@ -157,12 +158,19 @@ def update(self, events) -> None: self.game_state_manager.enter_state( WindowShop(self.game_state_manager, self.player, self.shop, self.player_inventory) ) + if island_collision: + print("Hello there!") def render(self, screen) -> None: """draw sprites to the canvas""" screen.fill("#000000") self.all_sprites.draw(self.player.rect.center) + # point = self.island_obj.rect + # collide = self.player.rect.colliderect(point) + # if collide: + # print("Collided with the island!") + # self.welcome_message = self.font.render("Press 'E' to interact!", True, (100, 100, 100)) # point = self.shop.rect # collide = self.player.rect.colliderect(point) From 1fe527ea01d4328773773921677e114e30a0ef26 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Wed, 14 May 2025 13:41:41 +0200 Subject: [PATCH 05/30] Added chest Added: - when comming in contact with the island the player recieves chest --- src/inventory.py | 5 ++++- src/states/game_running.py | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/inventory.py b/src/inventory.py index dd6f0ac..3305db8 100644 --- a/src/inventory.py +++ b/src/inventory.py @@ -9,8 +9,11 @@ class Chest: """contain loot, and worth""" - def __init__(self, name: str) -> None: + def __init__(self, name: str, worth: int) -> None: self.name = name + self.worth = worth + + class Quest: diff --git a/src/states/game_running.py b/src/states/game_running.py index 2cb58c3..0dba81a 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -9,6 +9,7 @@ from pytmx.util_pygame import load_pygame # type: ignore from src.inventory import Inventory +from src.inventory import Chest from src.settings import TILE_SIZE, WORLD_LAYERS from src.sprites.animations import AnimatedSprites from src.sprites.base import BaseSprite @@ -148,6 +149,7 @@ def update(self, events) -> None: collide = self.player.rect.colliderect(self.shop.rect) if self.player else False dt = self.clock.tick() / 1000 self.all_sprites.update(dt) + self.test_chest = Chest("test chest", 1000) # get events like keypress or mouse clicks for event in events: @@ -159,7 +161,11 @@ def update(self, events) -> None: WindowShop(self.game_state_manager, self.player, self.shop, self.player_inventory) ) if island_collision: - print("Hello there!") + self.player_inventory.add_chest(self.test_chest) + print("Chest added") + # self.chest_message = self.font.render(f"Added {self.test_chest.name} to the inventory!") + # screen.blit(self.chest_message, (155, 155)) + def render(self, screen) -> None: """draw sprites to the canvas""" From 25b5057749a48ba72282731bb15e7ee94697af4d Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Wed, 14 May 2025 13:43:05 +0200 Subject: [PATCH 06/30] Added a new file Added: - new state file for chests --- src/states/chest_state.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/states/chest_state.py diff --git a/src/states/chest_state.py b/src/states/chest_state.py new file mode 100644 index 0000000..e69de29 From c7935c7db451365552c22223d6934f235ecf3f99 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Wed, 14 May 2025 14:01:37 +0200 Subject: [PATCH 07/30] Testing and chest state Tested: - the collision and adding in game running Added: - update and render method to the chest state --- src/states/chest_state.py | 15 +++++++++++++++ src/states/game_running.py | 6 ++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index e69de29..d2ccf4c 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -0,0 +1,15 @@ +import os + +import pygame + +from src.states.base_state import BaseState + +class ChestState(BaseState): + def __init__(self): + pass + + def update(self, events): + pass + + def render(self, events, screen: pygame.Surface): + pass diff --git a/src/states/game_running.py b/src/states/game_running.py index 0dba81a..b80dd71 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -150,6 +150,7 @@ def update(self, events) -> None: dt = self.clock.tick() / 1000 self.all_sprites.update(dt) self.test_chest = Chest("test chest", 1000) + # self.screen = pygame.Surface # get events like keypress or mouse clicks for event in events: @@ -163,8 +164,9 @@ def update(self, events) -> None: if island_collision: self.player_inventory.add_chest(self.test_chest) print("Chest added") - # self.chest_message = self.font.render(f"Added {self.test_chest.name} to the inventory!") - # screen.blit(self.chest_message, (155, 155)) + # self.chest_message = self.font.render(f"Added {self.test_chest.name} to the inventory!", True, (100, 100, 100)) + # self.screen.blit(self.chest_message, (155, 155)) + # print(type(self.chest_message)) def render(self, screen) -> None: From 74caf3591fcbd8b85b289d975af2c2519defa130 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 15 May 2025 15:20:28 +0200 Subject: [PATCH 08/30] Added messages Added: - system to pick up the chest with a press of a key - message to show when the player collects the chesrt --- src/states/chest_state.py | 37 ++++++++++++++++++++++++++++++++----- src/states/game_running.py | 10 +++++++--- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index d2ccf4c..f7ee933 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -3,13 +3,40 @@ import pygame from src.states.base_state import BaseState +# from src.states.game_running import GameRunning +from src.inventory import Chest, Inventory class ChestState(BaseState): - def __init__(self): - pass + def __init__(self, game_state_manager, player, inventory: Inventory, chest: Chest, island): + super().__init__(game_state_manager) + self.font = pygame.font.Font(None, 36) + self.collide = False + self.player = player + self.island = island + self.chest = chest + self.inventory = inventory + self.pressed = False def update(self, events): - pass + # Check collision + if hasattr(self.player, "rect") and hasattr(self.island, "rect"): + self.collide = pygame.sprite.spritecollideany(self.player, self.island) + else: + self.collide = False - def render(self, events, screen: pygame.Surface): - pass + for event in events: + match event.type: + case pygame.KEYDOWN: + if event.key == pygame.K_e: + self.inventory.add_chest(self.chest) + self.pressed = True + self.game_state_manager.exit_state() + + def render(self, screen: pygame.Surface): + if self.collide: + chest_add_message = self.font.render("Press E to pickup the chest", True, (0, 0, 0)) + screen.blit(chest_add_message, (50, screen.get_height() - 60)) + + if self.pressed: + confirm_message = self.font.render(f"Added {self.chest.name} to the inventory!", True, (0, 0, 0)) + screen.blit(confirm_message, (50, screen.get_height() - 60)) diff --git a/src/states/game_running.py b/src/states/game_running.py index b80dd71..a989e40 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -18,6 +18,7 @@ from src.states.base_state import BaseState from src.states.paused import Paused from src.states.shop_state import ShowShop, WindowShop +from src.states.chest_state import ChestState from src.support import all_character_import, coast_importer, import_folder @@ -145,7 +146,7 @@ def update(self, events) -> None: """ update each sprites and handle events """ - island_collision = pygame.sprite.spritecollideany(self.player, self.island_group) + self.island_collision = pygame.sprite.spritecollideany(self.player, self.island_group) collide = self.player.rect.colliderect(self.shop.rect) if self.player else False dt = self.clock.tick() / 1000 self.all_sprites.update(dt) @@ -161,8 +162,11 @@ def update(self, events) -> None: self.game_state_manager.enter_state( WindowShop(self.game_state_manager, self.player, self.shop, self.player_inventory) ) - if island_collision: - self.player_inventory.add_chest(self.test_chest) + if self.island_collision: + self.game_state_manager.enter_state( + ChestState(self.game_state_manager, self.player, self.player_inventory, self.test_chest, self.island_group) + ) + # self.player_inventory.add_chest(self.test_chest) print("Chest added") # self.chest_message = self.font.render(f"Added {self.test_chest.name} to the inventory!", True, (100, 100, 100)) # self.screen.blit(self.chest_message, (155, 155)) From dedfcfed7f771d8fd868a7b1bb74bb6cc467adcb Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Wed, 21 May 2025 14:24:40 +0200 Subject: [PATCH 09/30] Enhanced messaging Enhanced: - the player comes in interaction with the island - now when the player interacts with the island hell get the message --- src/states/chest_state.py | 102 ++++++++++++++++++++++++++++++------- src/states/game_running.py | 10 ++-- 2 files changed, 88 insertions(+), 24 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index f7ee933..953f83d 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -1,42 +1,106 @@ -import os +# import os -import pygame +# import pygame + +# from src.states.base_state import BaseState +# # from src.states.game_running import GameRunning +# from src.inventory import Chest, Inventory + +# class ChestState(BaseState): +# def __init__(self, game_state_manager, player, inventory: Inventory, chest: Chest, island): +# super().__init__(game_state_manager) +# self.font = pygame.font.Font(None, 36) +# self.collide = False +# self.player = player +# self.island = island +# self.chest = chest +# self.inventory = inventory +# self.pressed = False +# self.main_screen = pygame.Surface((1280, 720)) +# self.screen = pygame.Surface((240, 320)) + +# def update(self, events): +# # Check collision +# if hasattr(self.player, "rect") and hasattr(self.island, "rect"): +# self.collide = pygame.sprite.spritecollideany(self.player, self.island) +# else: +# self.collide = False + +# for event in events: +# match event.type: +# case pygame.KEYDOWN: +# if event.key == pygame.K_q: +# self.pressed = False +# self.game_state_manager.exit_state() +# def render(self, screen: pygame.Surface): +# if self.collide: +# chest_add_message = self.font.render("Press E to pickup the chest!", True, (255, 255, 255)) +# self.main_screen.blit(chest_add_message, (50, screen.get_height() - 60)) + +# if self.pressed: +# confirm_message = self.font.render(f"Added {self.chest.name} to the inventory!", True, (255, 255, 255)) +# self.screen.blit(confirm_message, (50, screen.get_height() - 60)) + +# screen.blit(self.screen, dest=(250, 250)) +# pygame.display.flip() + +import pygame from src.states.base_state import BaseState -# from src.states.game_running import GameRunning from src.inventory import Chest, Inventory + class ChestState(BaseState): def __init__(self, game_state_manager, player, inventory: Inventory, chest: Chest, island): super().__init__(game_state_manager) self.font = pygame.font.Font(None, 36) - self.collide = False + self.player = player self.island = island self.chest = chest self.inventory = inventory + + self.collide = False self.pressed = False + self.message = "" + self.message_end_time = 0 + + self.screen = pygame.Surface((1280, 720)) # Main UI surface def update(self, events): - # Check collision - if hasattr(self.player, "rect") and hasattr(self.island, "rect"): - self.collide = pygame.sprite.spritecollideany(self.player, self.island) - else: - self.collide = False + # Collision check + self.collide = pygame.sprite.spritecollideany(self.player, self.island) for event in events: - match event.type: - case pygame.KEYDOWN: - if event.key == pygame.K_e: - self.inventory.add_chest(self.chest) + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_q: + self.pressed = False + self.game_state_manager.exit_state() + + elif event.key == pygame.K_e and self.collide: + if not self.pressed: self.pressed = True - self.game_state_manager.exit_state() + self.inventory.add_item(self.chest.name, 1) + self.message = f"Added {self.chest.name} to inventory!" + self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s def render(self, screen: pygame.Surface): + self.screen.fill((0, 0, 0)) # Clear UI surface + if self.collide: - chest_add_message = self.font.render("Press E to pickup the chest", True, (0, 0, 0)) - screen.blit(chest_add_message, (50, screen.get_height() - 60)) + prompt_text = self.font.render("Press 'E' to pick up the chest!", True, (255, 255, 255)) + self.screen.blit(prompt_text, (50, self.screen.get_height() - 100)) + + if self.pressed and self.message and pygame.time.get_ticks() < self.message_end_time: + message_text = self.font.render(self.message, True, (255, 255, 0)) + text_width, text_height = message_text.get_size() + + bg_x = 40 + bg_y = self.screen.get_height() - 60 + pygame.draw.rect(self.screen, (0, 0, 0), (bg_x, bg_y, text_width + 20, text_height + 10)) + self.screen.blit(message_text, (bg_x + 10, bg_y + 5)) + + # Blit the ChestState UI surface onto the main screen + screen.blit(self.screen, (0, 0)) + pygame.display.flip() - if self.pressed: - confirm_message = self.font.render(f"Added {self.chest.name} to the inventory!", True, (0, 0, 0)) - screen.blit(confirm_message, (50, screen.get_height() - 60)) diff --git a/src/states/game_running.py b/src/states/game_running.py index a989e40..9c0cfd4 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -162,12 +162,12 @@ def update(self, events) -> None: self.game_state_manager.enter_state( WindowShop(self.game_state_manager, self.player, self.shop, self.player_inventory) ) - if self.island_collision: - self.game_state_manager.enter_state( - ChestState(self.game_state_manager, self.player, self.player_inventory, self.test_chest, self.island_group) - ) + if self.island_collision and event.key == pygame.K_e: + self.game_state_manager.enter_state( + ChestState(self.game_state_manager, self.player, self.player_inventory, self.test_chest, self.island_group) + ) # self.player_inventory.add_chest(self.test_chest) - print("Chest added") + # print("Chest added") # self.chest_message = self.font.render(f"Added {self.test_chest.name} to the inventory!", True, (100, 100, 100)) # self.screen.blit(self.chest_message, (155, 155)) # print(type(self.chest_message)) From dcf8e4177bb35162850b73386a544257fc0afdc5 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Wed, 21 May 2025 14:36:21 +0200 Subject: [PATCH 10/30] Updated class Updated: - the screen position - the size of the screen --- src/states/chest_state.py | 51 ++------------------------------------- 1 file changed, 2 insertions(+), 49 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 953f83d..ce68e1c 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -1,50 +1,3 @@ -# import os - -# import pygame - -# from src.states.base_state import BaseState -# # from src.states.game_running import GameRunning -# from src.inventory import Chest, Inventory - -# class ChestState(BaseState): -# def __init__(self, game_state_manager, player, inventory: Inventory, chest: Chest, island): -# super().__init__(game_state_manager) -# self.font = pygame.font.Font(None, 36) -# self.collide = False -# self.player = player -# self.island = island -# self.chest = chest -# self.inventory = inventory -# self.pressed = False -# self.main_screen = pygame.Surface((1280, 720)) -# self.screen = pygame.Surface((240, 320)) - -# def update(self, events): -# # Check collision -# if hasattr(self.player, "rect") and hasattr(self.island, "rect"): -# self.collide = pygame.sprite.spritecollideany(self.player, self.island) -# else: -# self.collide = False - -# for event in events: -# match event.type: -# case pygame.KEYDOWN: -# if event.key == pygame.K_q: -# self.pressed = False -# self.game_state_manager.exit_state() - -# def render(self, screen: pygame.Surface): -# if self.collide: -# chest_add_message = self.font.render("Press E to pickup the chest!", True, (255, 255, 255)) -# self.main_screen.blit(chest_add_message, (50, screen.get_height() - 60)) - -# if self.pressed: -# confirm_message = self.font.render(f"Added {self.chest.name} to the inventory!", True, (255, 255, 255)) -# self.screen.blit(confirm_message, (50, screen.get_height() - 60)) - -# screen.blit(self.screen, dest=(250, 250)) -# pygame.display.flip() - import pygame from src.states.base_state import BaseState from src.inventory import Chest, Inventory @@ -65,7 +18,7 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches self.message = "" self.message_end_time = 0 - self.screen = pygame.Surface((1280, 720)) # Main UI surface + self.screen = pygame.Surface((500, 400)) # Main UI surface def update(self, events): # Collision check @@ -101,6 +54,6 @@ def render(self, screen: pygame.Surface): self.screen.blit(message_text, (bg_x + 10, bg_y + 5)) # Blit the ChestState UI surface onto the main screen - screen.blit(self.screen, (0, 0)) + screen.blit(self.screen, (400, 125)) pygame.display.flip() From abc402fcc4e76ba8f1e7afb10cbb51a2c4ce8697 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 22 May 2025 17:16:43 +0200 Subject: [PATCH 11/30] Extracting chest icons Extracting chest icons for the messages --- src/states/chest_state.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index ce68e1c..09e3cc0 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -1,4 +1,5 @@ import pygame +import pygame.locals from src.states.base_state import BaseState from src.inventory import Chest, Inventory @@ -19,6 +20,17 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches self.message_end_time = 0 self.screen = pygame.Surface((500, 400)) # Main UI surface + + self.sprite_sheet = pygame.image.load('images/tilesets/Treasure+.png').convert_alpha() + self.icons = { + "Wooden_chest": self.extract_icon(144, 0), + "Silver_chest": self.extract_icon(160, 0), + "Golden_chest": self.extract_icon(176, 0), + "Mimic_chest": self.extract_icon(192, 0) + } + + def extract_icon(self, x, y, size=16): + return self.sprite_sheet.subsurface((x, y, size, size)) def update(self, events): # Collision check From 4ea261b0fb83428f004893d0e98ad48c9795072f Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 22 May 2025 17:34:44 +0200 Subject: [PATCH 12/30] Fixing and scaling Fixed: - wrong icons getting extracted Scaled: - the chest image from 16px to 64px. --- src/states/chest_state.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 09e3cc0..c13242f 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -20,13 +20,13 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches self.message_end_time = 0 self.screen = pygame.Surface((500, 400)) # Main UI surface - + self.sprite_sheet = pygame.image.load('images/tilesets/Treasure+.png').convert_alpha() self.icons = { - "Wooden_chest": self.extract_icon(144, 0), - "Silver_chest": self.extract_icon(160, 0), - "Golden_chest": self.extract_icon(176, 0), - "Mimic_chest": self.extract_icon(192, 0) + "Wooden_chest": self.extract_icon(0, 144), + "Silver_chest": self.extract_icon(0, 160), + "Golden_chest": self.extract_icon(0, 176), + "Mimic_chest": self.extract_icon(0, 192) } def extract_icon(self, x, y, size=16): @@ -52,6 +52,10 @@ def update(self, events): def render(self, screen: pygame.Surface): self.screen.fill((0, 0, 0)) # Clear UI surface + y_offset = 150 + scaled_icon = pygame.transform.scale(self.icons["Wooden_chest"], (64, 64)) + self.screen.blit(scaled_icon, (215, y_offset)) + if self.collide: prompt_text = self.font.render("Press 'E' to pick up the chest!", True, (255, 255, 255)) self.screen.blit(prompt_text, (50, self.screen.get_height() - 100)) From b0451a1c36f0e15df5149eb5bfdbadb33d60a40a Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 22 May 2025 17:48:45 +0200 Subject: [PATCH 13/30] Added random Added: - chests are now randomized --- src/states/chest_state.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index c13242f..5d6ce5d 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -1,5 +1,5 @@ import pygame -import pygame.locals +import random from src.states.base_state import BaseState from src.inventory import Chest, Inventory @@ -29,6 +29,10 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches "Mimic_chest": self.extract_icon(0, 192) } + chest_name, chest_icon = random.choice(list(self.icons.items())) + self.chest_name = chest_name + self.chest_icon = chest_icon + def extract_icon(self, x, y, size=16): return self.sprite_sheet.subsurface((x, y, size, size)) @@ -53,8 +57,9 @@ def render(self, screen: pygame.Surface): self.screen.fill((0, 0, 0)) # Clear UI surface y_offset = 150 - scaled_icon = pygame.transform.scale(self.icons["Wooden_chest"], (64, 64)) - self.screen.blit(scaled_icon, (215, y_offset)) + scaled_icon = pygame.transform.scale(self.chest_icon, (64, 64)) + if self.chest_icon: + self.screen.blit(scaled_icon, (215, y_offset)) if self.collide: prompt_text = self.font.render("Press 'E' to pick up the chest!", True, (255, 255, 255)) From fbcda9335c35d75fb2295df2728ddc96e7b2b44e Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 22 May 2025 17:55:32 +0200 Subject: [PATCH 14/30] Added voyage icon Added: - a voyage scroll icon to the loot dict, now there is also a chance to receive a voyage --- src/states/chest_state.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 5d6ce5d..7d0e42e 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -26,7 +26,8 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches "Wooden_chest": self.extract_icon(0, 144), "Silver_chest": self.extract_icon(0, 160), "Golden_chest": self.extract_icon(0, 176), - "Mimic_chest": self.extract_icon(0, 192) + "Mimic_chest": self.extract_icon(0, 192), + "Voyage_scroll": self.extract_icon(176, 176) } chest_name, chest_icon = random.choice(list(self.icons.items())) From 6df98c375bd7ca56011c6dbabaaa2a9dc5e8b68e Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 22 May 2025 17:59:41 +0200 Subject: [PATCH 15/30] Changed chest name Changed: - The test chest name to the actual chest name --- src/states/chest_state.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 7d0e42e..b3fc085 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -24,8 +24,8 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches self.sprite_sheet = pygame.image.load('images/tilesets/Treasure+.png').convert_alpha() self.icons = { "Wooden_chest": self.extract_icon(0, 144), - "Silver_chest": self.extract_icon(0, 160), - "Golden_chest": self.extract_icon(0, 176), + "Golden_chest": self.extract_icon(0, 160), + "Silver_chest": self.extract_icon(0, 176), "Mimic_chest": self.extract_icon(0, 192), "Voyage_scroll": self.extract_icon(176, 176) } @@ -51,7 +51,7 @@ def update(self, events): if not self.pressed: self.pressed = True self.inventory.add_item(self.chest.name, 1) - self.message = f"Added {self.chest.name} to inventory!" + self.message = f"Added {self.chest_name} to inventory!" self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s def render(self, screen: pygame.Surface): From e38d61a532e4e4abf59f9b2156398aa82bca85d7 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 22 May 2025 18:03:07 +0200 Subject: [PATCH 16/30] Changed names Changed: - the loot names to look more appealing in game --- src/states/chest_state.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index b3fc085..79511fd 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -23,11 +23,11 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches self.sprite_sheet = pygame.image.load('images/tilesets/Treasure+.png').convert_alpha() self.icons = { - "Wooden_chest": self.extract_icon(0, 144), - "Golden_chest": self.extract_icon(0, 160), - "Silver_chest": self.extract_icon(0, 176), - "Mimic_chest": self.extract_icon(0, 192), - "Voyage_scroll": self.extract_icon(176, 176) + "Wooden chest": self.extract_icon(0, 144), + "Golden chest": self.extract_icon(0, 160), + "Silver chest": self.extract_icon(0, 176), + "Mimic chest": self.extract_icon(0, 192), + "Voyage scroll": self.extract_icon(176, 176) } chest_name, chest_icon = random.choice(list(self.icons.items())) From 196715f51ebff0b34dabdff81a317a1f33b2d0ec Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 24 May 2025 19:02:29 +0200 Subject: [PATCH 17/30] Added chests to the inventory Added: - new chests to the json invnetory --- data/inventory.json | 7 ++++++- src/states/chest_state.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/data/inventory.json b/data/inventory.json index ae04b5d..af0ac22 100644 --- a/data/inventory.json +++ b/data/inventory.json @@ -39,5 +39,10 @@ "Dragon (Black)": {"type": "creature", "effect": "dark_attack", "quantity": 1}, "Dragon (White)": {"type": "creature", "effect": "light_attack", "quantity": 1}, "Gem Cluster": {"type": "treasure", "effect": "trade", "quantity": 1}, - "Glowing Crystal": {"type": "treasure", "effect": "magic_boost", "quantity": 1} + "Glowing Crystal": {"type": "treasure", "effect": "magic_boost", "quantity": 1}, + "Wooden chest": {"type": "chest", "effect": "open_for_reward", "quantity": 0}, + "Silver chest": {"type": "chest", "effect": "open_for_reward", "quantity": 0}, + "Golden chest": {"type": "chest", "effect": "open_for_reward", "quantity": 0}, + "Mimic chest": {"type": "enemy", "effect": "damage", "quantity": 0}, + "Voayge": {"type": "quest", "effect": "explore", "quantity": 0} } diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 79511fd..8daefc0 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -50,7 +50,7 @@ def update(self, events): elif event.key == pygame.K_e and self.collide: if not self.pressed: self.pressed = True - self.inventory.add_item(self.chest.name, 1) + self.inventory.add_item(self.chest_name, 1) self.message = f"Added {self.chest_name} to inventory!" self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s From 34b7ae6c2e0515dbed3007b670e05c37983525ea Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Sat, 24 May 2025 19:03:38 +0200 Subject: [PATCH 18/30] Minor adjustments Hello --- data/inventory.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/inventory.json b/data/inventory.json index af0ac22..b6cd1db 100644 --- a/data/inventory.json +++ b/data/inventory.json @@ -44,5 +44,5 @@ "Silver chest": {"type": "chest", "effect": "open_for_reward", "quantity": 0}, "Golden chest": {"type": "chest", "effect": "open_for_reward", "quantity": 0}, "Mimic chest": {"type": "enemy", "effect": "damage", "quantity": 0}, - "Voayge": {"type": "quest", "effect": "explore", "quantity": 0} + "Voayge scroll": {"type": "quest", "effect": "explore", "quantity": 0} } From 291bfd02dcb4cb0d7ce22a30e776dbe0a81fcc6c Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 11:55:27 +0200 Subject: [PATCH 19/30] Small additions Small additions --- src/states/chest_state.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 8daefc0..05de497 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -16,6 +16,7 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches self.collide = False self.pressed = False + self.chest_collected = False self.message = "" self.message_end_time = 0 @@ -48,10 +49,10 @@ def update(self, events): self.game_state_manager.exit_state() elif event.key == pygame.K_e and self.collide: - if not self.pressed: + if not self.pressed and not self.chest_collected: self.pressed = True - self.inventory.add_item(self.chest_name, 1) - self.message = f"Added {self.chest_name} to inventory!" + self.chest_collected = True + self.message = self.inventory.add_item(self.chest_name, 1) self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s def render(self, screen: pygame.Surface): From dd37c47ffd33dbfcb3a9b6abd72e3d49ad629cfa Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 12:56:19 +0200 Subject: [PATCH 20/30] Adding island exclusivity Added: - when claiming a chest from one island you cannot claim it again --- src/sprites/base.py | 3 +++ src/states/chest_state.py | 4 ++-- src/states/game_running.py | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/sprites/base.py b/src/sprites/base.py index c6b866f..0d20e89 100644 --- a/src/sprites/base.py +++ b/src/sprites/base.py @@ -55,6 +55,9 @@ def __init__( self.direction = Vector2() self.facing_direction: str = "down" + # Chest bool + self.chest_collected = False + def animate(self, dt: float) -> None: """Handle animation logic.""" if len(self.frames) > 1: # Only animate if there's more than one frame diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 05de497..c680a46 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -49,9 +49,9 @@ def update(self, events): self.game_state_manager.exit_state() elif event.key == pygame.K_e and self.collide: - if not self.pressed and not self.chest_collected: + if not self.pressed and not self.collide.chest_collected: self.pressed = True - self.chest_collected = True + self.collide.chest_collected = True self.message = self.inventory.add_item(self.chest_name, 1) self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s diff --git a/src/states/game_running.py b/src/states/game_running.py index 9c0cfd4..63ce868 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -166,6 +166,8 @@ def update(self, events) -> None: self.game_state_manager.enter_state( ChestState(self.game_state_manager, self.player, self.player_inventory, self.test_chest, self.island_group) ) + for island in self.island_group: + print(island) # self.player_inventory.add_chest(self.test_chest) # print("Chest added") # self.chest_message = self.font.render(f"Added {self.test_chest.name} to the inventory!", True, (100, 100, 100)) From 97b70a1ed41526c6b89924dc6e3cd690ff00503b Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 13:03:46 +0200 Subject: [PATCH 21/30] Added a new message Added: - if collecting a chest/voyage the player cant collect it the second time again --- src/states/chest_state.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index c680a46..caa96ac 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -54,19 +54,32 @@ def update(self, events): self.collide.chest_collected = True self.message = self.inventory.add_item(self.chest_name, 1) self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s + elif not self.pressed and self.collide.chest_collected: + self.collected_message = "There are no chest nor voyage's here anymore!" + self.collected_message_end_time = pygame.time.get_ticks() + 2000 + def render(self, screen: pygame.Surface): self.screen.fill((0, 0, 0)) # Clear UI surface y_offset = 150 - scaled_icon = pygame.transform.scale(self.chest_icon, (64, 64)) - if self.chest_icon: - self.screen.blit(scaled_icon, (215, y_offset)) + # Only draw the chest icon if it hasn't been collected + if self.collide and not getattr(self.collide, "chest_collected", False): + scaled_icon = pygame.transform.scale(self.chest_icon, (64, 64)) + if self.chest_icon: + self.screen.blit(scaled_icon, (215, y_offset)) + + # Show prompt if player is colliding with the island if self.collide: - prompt_text = self.font.render("Press 'E' to pick up the chest!", True, (255, 255, 255)) + if getattr(self.collide, "chest_collected", False): + prompt_text = self.font.render("No chest or voyage available here.", True, (200, 100, 100)) + else: + prompt_text = self.font.render("Press 'E' to pick up the chest!", True, (255, 255, 255)) + self.screen.blit(prompt_text, (50, self.screen.get_height() - 100)) + # Show message if a chest was just picked up if self.pressed and self.message and pygame.time.get_ticks() < self.message_end_time: message_text = self.font.render(self.message, True, (255, 255, 0)) text_width, text_height = message_text.get_size() @@ -76,7 +89,13 @@ def render(self, screen: pygame.Surface): pygame.draw.rect(self.screen, (0, 0, 0), (bg_x, bg_y, text_width + 20, text_height + 10)) self.screen.blit(message_text, (bg_x + 10, bg_y + 5)) + # Optionally: show the "no chest" message as a timed message too + if hasattr(self, "collected_message") and pygame.time.get_ticks() < self.collected_message_end_time: + no_chest_text = self.font.render(self.collected_message, True, (180, 0, 0)) + self.screen.blit(no_chest_text, (50, self.screen.get_height() - 70)) + # Blit the ChestState UI surface onto the main screen screen.blit(self.screen, (400, 125)) pygame.display.flip() + From 7a43ec73158346938d15ea8ffe04d760af8485b7 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 13:14:04 +0200 Subject: [PATCH 22/30] Removing code Removed: - debug code for checking islands within island code - Removed commented code --- src/states/game_running.py | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/src/states/game_running.py b/src/states/game_running.py index 63ce868..ba3b34d 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -166,41 +166,10 @@ def update(self, events) -> None: self.game_state_manager.enter_state( ChestState(self.game_state_manager, self.player, self.player_inventory, self.test_chest, self.island_group) ) - for island in self.island_group: - print(island) - # self.player_inventory.add_chest(self.test_chest) - # print("Chest added") - # self.chest_message = self.font.render(f"Added {self.test_chest.name} to the inventory!", True, (100, 100, 100)) - # self.screen.blit(self.chest_message, (155, 155)) - # print(type(self.chest_message)) - def render(self, screen) -> None: """draw sprites to the canvas""" screen.fill("#000000") self.all_sprites.draw(self.player.rect.center) - # point = self.island_obj.rect - # collide = self.player.rect.colliderect(point) - # if collide: - # print("Collided with the island!") - - # self.welcome_message = self.font.render("Press 'E' to interact!", True, (100, 100, 100)) - # point = self.shop.rect - # collide = self.player.rect.colliderect(point) - # if collide: - # screen.blit(self.welcome_message, (155, 155)) - - # keys = pygame.key.get_pressed() - # if collide and keys[pygame.K_e]: - # self.in_shop = True - - # if self.in_shop: - # self.shop_window.fill((0, 0, 0)) - # screen.blit(self.shop_window, (260, 40)) - - # if keys[pygame.K_q]: - # self.in_shop = False - # print("Exiting shop") - pygame.display.update() From 23db43c0726465d9a91c7668574fcd99226694b0 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 13:26:11 +0200 Subject: [PATCH 23/30] Adding text Added: - prompt for pressing the key to interact --- src/states/game_running.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/states/game_running.py b/src/states/game_running.py index ba3b34d..38d1250 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -171,5 +171,7 @@ def render(self, screen) -> None: """draw sprites to the canvas""" screen.fill("#000000") self.all_sprites.draw(self.player.rect.center) + self.message = self.font.render("Press E to interact\nPress Q to quit interaction", True, (0, 0, 0)) + screen.blit(self.message, (50, screen.get_height() - 100)) pygame.display.update() From 7e4acf76b724bf55f2fb774aefd5b7dbb1d6cab4 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 13:26:44 +0200 Subject: [PATCH 24/30] Added text Added: - prompt for using inventory --- src/states/game_running.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/states/game_running.py b/src/states/game_running.py index 38d1250..3b9ef69 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -171,7 +171,7 @@ def render(self, screen) -> None: """draw sprites to the canvas""" screen.fill("#000000") self.all_sprites.draw(self.player.rect.center) - self.message = self.font.render("Press E to interact\nPress Q to quit interaction", True, (0, 0, 0)) + self.message = self.font.render("Press E to interact\nPress Q to quit interaction\nPress I to opne inventory", True, (0, 0, 0)) screen.blit(self.message, (50, screen.get_height() - 100)) pygame.display.update() From 62bfb2ee7d44ef28c6327aaddf28d035bbb886f9 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 13:30:27 +0200 Subject: [PATCH 25/30] fixing typehints p1 Part 1 --- src/inventory.py | 2 -- src/sprites/gui/inventory_gui.py | 1 - src/states/chest_state.py | 7 ++----- src/states/game_running.py | 12 ++++++++++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/inventory.py b/src/inventory.py index 3305db8..c297ea9 100644 --- a/src/inventory.py +++ b/src/inventory.py @@ -13,8 +13,6 @@ def __init__(self, name: str, worth: int) -> None: self.name = name self.worth = worth - - class Quest: """TODO: make the docstrings""" diff --git a/src/sprites/gui/inventory_gui.py b/src/sprites/gui/inventory_gui.py index b929768..47e8bcc 100644 --- a/src/sprites/gui/inventory_gui.py +++ b/src/sprites/gui/inventory_gui.py @@ -117,7 +117,6 @@ def draw(self) -> None: # Reset button actions self.button_actions: dict[str, tuple[pygame.Rect, pygame.Rect]] = {} - # Draw the inventory items items: list = list(self.inventory.get_items().items()) visible_items: list = items[self.scroll_offset : self.scroll_offset + self.max_visible_items] diff --git a/src/states/chest_state.py b/src/states/chest_state.py index caa96ac..015899b 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -22,13 +22,13 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches self.screen = pygame.Surface((500, 400)) # Main UI surface - self.sprite_sheet = pygame.image.load('images/tilesets/Treasure+.png').convert_alpha() + self.sprite_sheet = pygame.image.load("images/tilesets/Treasure+.png").convert_alpha() self.icons = { "Wooden chest": self.extract_icon(0, 144), "Golden chest": self.extract_icon(0, 160), "Silver chest": self.extract_icon(0, 176), "Mimic chest": self.extract_icon(0, 192), - "Voyage scroll": self.extract_icon(176, 176) + "Voyage scroll": self.extract_icon(176, 176), } chest_name, chest_icon = random.choice(list(self.icons.items())) @@ -57,7 +57,6 @@ def update(self, events): elif not self.pressed and self.collide.chest_collected: self.collected_message = "There are no chest nor voyage's here anymore!" self.collected_message_end_time = pygame.time.get_ticks() + 2000 - def render(self, screen: pygame.Surface): self.screen.fill((0, 0, 0)) # Clear UI surface @@ -97,5 +96,3 @@ def render(self, screen: pygame.Surface): # Blit the ChestState UI surface onto the main screen screen.blit(self.screen, (400, 125)) pygame.display.flip() - - diff --git a/src/states/game_running.py b/src/states/game_running.py index 3b9ef69..8cc960e 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -164,14 +164,22 @@ def update(self, events) -> None: ) if self.island_collision and event.key == pygame.K_e: self.game_state_manager.enter_state( - ChestState(self.game_state_manager, self.player, self.player_inventory, self.test_chest, self.island_group) + ChestState( + self.game_state_manager, + self.player, + self.player_inventory, + self.test_chest, + self.island_group, + ) ) def render(self, screen) -> None: """draw sprites to the canvas""" screen.fill("#000000") self.all_sprites.draw(self.player.rect.center) - self.message = self.font.render("Press E to interact\nPress Q to quit interaction\nPress I to opne inventory", True, (0, 0, 0)) + self.message = self.font.render( + "Press E to interact\nPress Q to quit interaction\nPress I to opne inventory", True, (0, 0, 0) + ) screen.blit(self.message, (50, screen.get_height() - 100)) pygame.display.update() From 0b503a26264880cf36685a65846c99637cbc8231 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 13:46:44 +0200 Subject: [PATCH 26/30] Fixed typehints p2 Part 2 --- src/states/chest_state.py | 57 +++++++++++++++++++++++--------------- src/states/game_running.py | 2 +- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 015899b..73779cc 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -1,29 +1,40 @@ import pygame import random +from typing import Optional, List, Union from src.states.base_state import BaseState from src.inventory import Chest, Inventory class ChestState(BaseState): - def __init__(self, game_state_manager, player, inventory: Inventory, chest: Chest, island): + def __init__( + self, + game_state_manager, + player: pygame.sprite.Sprite, + inventory: Inventory, + chest: Chest, + island: pygame.sprite.Group, + ) -> None: super().__init__(game_state_manager) self.font = pygame.font.Font(None, 36) - self.player = player - self.island = island - self.chest = chest - self.inventory = inventory + self.player: pygame.sprite.Sprite = player + self.island: pygame.sprite.Group = island + self.chest: Chest = chest + self.inventory: Inventory = inventory - self.collide = False - self.pressed = False - self.chest_collected = False - self.message = "" - self.message_end_time = 0 + # collide can be None or a Sprite + self.collide: Optional[pygame.sprite.Sprite] = None + self.pressed: bool = False + self.chest_collected: bool = False + self.message: str = "" + self.message_end_time: int = 0 + self.collected_message: str = "" + self.collected_message_end_time: int = 0 - self.screen = pygame.Surface((500, 400)) # Main UI surface + self.screen: pygame.Surface = pygame.Surface((500, 400)) # Main UI surface - self.sprite_sheet = pygame.image.load("images/tilesets/Treasure+.png").convert_alpha() - self.icons = { + self.sprite_sheet: pygame.Surface = pygame.image.load("images/tilesets/Treasure+.png").convert_alpha() + self.icons: dict[str, pygame.Surface] = { "Wooden chest": self.extract_icon(0, 144), "Golden chest": self.extract_icon(0, 160), "Silver chest": self.extract_icon(0, 176), @@ -32,14 +43,14 @@ def __init__(self, game_state_manager, player, inventory: Inventory, chest: Ches } chest_name, chest_icon = random.choice(list(self.icons.items())) - self.chest_name = chest_name - self.chest_icon = chest_icon + self.chest_name: str = chest_name + self.chest_icon: pygame.Surface = chest_icon - def extract_icon(self, x, y, size=16): + def extract_icon(self, x: int, y: int, size: int = 16) -> pygame.Surface: return self.sprite_sheet.subsurface((x, y, size, size)) - def update(self, events): - # Collision check + def update(self, events: List[pygame.event.Event]) -> None: + # Collision check, can be None if no collision self.collide = pygame.sprite.spritecollideany(self.player, self.island) for event in events: @@ -49,16 +60,16 @@ def update(self, events): self.game_state_manager.exit_state() elif event.key == pygame.K_e and self.collide: - if not self.pressed and not self.collide.chest_collected: + if not self.pressed and not getattr(self.collide, "chest_collected", False): self.pressed = True - self.collide.chest_collected = True + setattr(self.collide, "chest_collected", True) self.message = self.inventory.add_item(self.chest_name, 1) self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s - elif not self.pressed and self.collide.chest_collected: + elif not self.pressed and getattr(self.collide, "chest_collected", False): self.collected_message = "There are no chest nor voyage's here anymore!" self.collected_message_end_time = pygame.time.get_ticks() + 2000 - def render(self, screen: pygame.Surface): + def render(self, screen: pygame.Surface) -> None: self.screen.fill((0, 0, 0)) # Clear UI surface y_offset = 150 @@ -89,7 +100,7 @@ def render(self, screen: pygame.Surface): self.screen.blit(message_text, (bg_x + 10, bg_y + 5)) # Optionally: show the "no chest" message as a timed message too - if hasattr(self, "collected_message") and pygame.time.get_ticks() < self.collected_message_end_time: + if self.collected_message and pygame.time.get_ticks() < self.collected_message_end_time: no_chest_text = self.font.render(self.collected_message, True, (180, 0, 0)) self.screen.blit(no_chest_text, (50, self.screen.get_height() - 70)) diff --git a/src/states/game_running.py b/src/states/game_running.py index 8cc960e..c4eee57 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -101,7 +101,7 @@ def setup(self, player_start_pos: str) -> None: # self.island_boarder = src.sprites.Sprite((obj.x, obj,y), surface, self.all_sprites, WORLD_LAYERS["bg"]) # Islands - self.island_group = pygame.sprite.Group() + self.island_group: pygame.sprite.Group = pygame.sprite.Group() self.islands = self.tmx_map["map"].get_layer_by_name("Islands") for x, y, surface in self.islands.tiles(): self.island_obj = BaseSprite( From 2fa641ef4b9b1abccc98afe5d333e10e23c24a1c Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Mon, 26 May 2025 13:58:46 +0200 Subject: [PATCH 27/30] Fixed typehints Finally some good fucking food --- src/states/chest_state.py | 8 +++++--- src/states/game_running.py | 5 ++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/states/chest_state.py b/src/states/chest_state.py index 73779cc..e2c4452 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -1,8 +1,10 @@ -import pygame import random -from typing import Optional, List, Union -from src.states.base_state import BaseState +from typing import List, Optional + +import pygame + from src.inventory import Chest, Inventory +from src.states.base_state import BaseState class ChestState(BaseState): diff --git a/src/states/game_running.py b/src/states/game_running.py index c4eee57..0c731aa 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -8,17 +8,16 @@ import pygame # type: ignore from pytmx.util_pygame import load_pygame # type: ignore -from src.inventory import Inventory -from src.inventory import Chest +from src.inventory import Chest, Inventory from src.settings import TILE_SIZE, WORLD_LAYERS from src.sprites.animations import AnimatedSprites from src.sprites.base import BaseSprite from src.sprites.camera.player import PlayerCamera from src.sprites.entities.player import Player from src.states.base_state import BaseState +from src.states.chest_state import ChestState from src.states.paused import Paused from src.states.shop_state import ShowShop, WindowShop -from src.states.chest_state import ChestState from src.support import all_character_import, coast_importer, import_folder From 94c39a3f2fe79d05a7dbfdaba6d2226f3b25c4cc Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 29 May 2025 19:08:32 +0200 Subject: [PATCH 28/30] Small fix Small fix interaction buttons message --- src/states/game_running.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/states/game_running.py b/src/states/game_running.py index e69f197..70509f9 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -162,6 +162,7 @@ def update(self, events) -> None: """ update each sprites and handle events """ + self.test_chest: Chest | None = None self.island_collision = pygame.sprite.spritecollideany(self.player, self.island_group) collide: bool = ( self.player is not None @@ -234,4 +235,9 @@ def render(self, screen) -> None: # Draw the green dot at the screen coordinates pygame.draw.circle(screen, (0, 255, 0), (dot_x, dot_y), 5) # Green circle at tile coordinates + self.message = self.font.render( + "Press E to interact\nPress Q to quit interaction\nPress I to open inventory", True, (0, 0, 0) + ) + screen.blit(self.message, (50, screen.get_height() - 100)) + pygame.display.update() From 9dcda674f40fe5be769a31e3484dfb10a8190a1f Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Thu, 29 May 2025 19:10:41 +0200 Subject: [PATCH 29/30] Typehint fix Fixing issues --- src/states/game_running.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/states/game_running.py b/src/states/game_running.py index 70509f9..ff91257 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -162,7 +162,7 @@ def update(self, events) -> None: """ update each sprites and handle events """ - self.test_chest: Chest | None = None + self.test_chest: Chest = Chest("test_chest", 1000) self.island_collision = pygame.sprite.spritecollideany(self.player, self.island_group) collide: bool = ( self.player is not None From dad7347a370c6deb7ba18a7bb74abd38c44c2bc3 Mon Sep 17 00:00:00 2001 From: Davidek523 Date: Fri, 6 Jun 2025 13:03:13 +0200 Subject: [PATCH 30/30] A lot of changes A lot --- data/new_maps/100x100_map.tmx | 86 +++++++++++++++++++++++++++- src/sprites/islands/island_sprite.py | 20 +++++++ src/states/chest_state.py | 78 +++++++++---------------- src/states/game_running.py | 55 ++++++++++++++---- 4 files changed, 175 insertions(+), 64 deletions(-) create mode 100644 src/sprites/islands/island_sprite.py diff --git a/data/new_maps/100x100_map.tmx b/data/new_maps/100x100_map.tmx index ce1ecdf..788879e 100644 --- a/data/new_maps/100x100_map.tmx +++ b/data/new_maps/100x100_map.tmx @@ -1,5 +1,5 @@ - + @@ -814,6 +814,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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/src/sprites/islands/island_sprite.py b/src/sprites/islands/island_sprite.py new file mode 100644 index 0000000..73b7245 --- /dev/null +++ b/src/sprites/islands/island_sprite.py @@ -0,0 +1,20 @@ + +from src.sprites.base import BaseSprite +from pygame import Surface +from pygame.sprite import Group, Sprite + +from src.settings import WORLD_LAYERS + +class IslandSprite(BaseSprite): + def __init__( + self, + pos: tuple[int, int], + surf: Surface, + groups: tuple[Group, ...], + z: object = WORLD_LAYERS["main"], + island_name: str = "Unnamed", + island_id: str = "Unknown" + )-> None: + super().__init__(pos, surf, groups, z=z) + self.island_name = island_name + self.island_id = island_id \ No newline at end of file diff --git a/src/states/chest_state.py b/src/states/chest_state.py index e2c4452..bed67cc 100644 --- a/src/states/chest_state.py +++ b/src/states/chest_state.py @@ -4,19 +4,18 @@ import pygame from src.inventory import Chest, Inventory -from src.states.base_state import BaseState +# from src.states.base_state import BaseState +from src.sprites.islands.island_sprite import IslandSprite -class ChestState(BaseState): +class ChestState: def __init__( self, - game_state_manager, player: pygame.sprite.Sprite, inventory: Inventory, chest: Chest, - island: pygame.sprite.Group, + island: pygame.sprite.Group[IslandSprite], ) -> None: - super().__init__(game_state_manager) self.font = pygame.font.Font(None, 36) self.player: pygame.sprite.Sprite = player @@ -33,7 +32,7 @@ def __init__( self.collected_message: str = "" self.collected_message_end_time: int = 0 - self.screen: pygame.Surface = pygame.Surface((500, 400)) # Main UI surface + self.screen: pygame.Surface = pygame.Surface((500, 400), pygame.SRCALPHA) self.sprite_sheet: pygame.Surface = pygame.image.load("images/tilesets/Treasure+.png").convert_alpha() self.icons: dict[str, pygame.Surface] = { @@ -47,65 +46,40 @@ def __init__( chest_name, chest_icon = random.choice(list(self.icons.items())) self.chest_name: str = chest_name self.chest_icon: pygame.Surface = chest_icon + self.collected_islands: set = set() def extract_icon(self, x: int, y: int, size: int = 16) -> pygame.Surface: return self.sprite_sheet.subsurface((x, y, size, size)) - def update(self, events: List[pygame.event.Event]) -> None: + def update(self) -> None: # Collision check, can be None if no collision self.collide = pygame.sprite.spritecollideany(self.player, self.island) - for event in events: - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_q: - self.pressed = False - self.game_state_manager.exit_state() - - elif event.key == pygame.K_e and self.collide: - if not self.pressed and not getattr(self.collide, "chest_collected", False): - self.pressed = True - setattr(self.collide, "chest_collected", True) - self.message = self.inventory.add_item(self.chest_name, 1) - self.message_end_time = pygame.time.get_ticks() + 2000 # Show for 2s - elif not self.pressed and getattr(self.collide, "chest_collected", False): - self.collected_message = "There are no chest nor voyage's here anymore!" - self.collected_message_end_time = pygame.time.get_ticks() + 2000 + if self.collide and hasattr(self.collide, "island_id"): + self.chest_collected = True + current_island_id = self.collide.island_id + print(current_island_id) - def render(self, screen: pygame.Surface) -> None: - self.screen.fill((0, 0, 0)) # Clear UI surface - - y_offset = 150 + if current_island_id not in self.collected_islands: + self.collected_islands.add(current_island_id) - # Only draw the chest icon if it hasn't been collected - if self.collide and not getattr(self.collide, "chest_collected", False): - scaled_icon = pygame.transform.scale(self.chest_icon, (64, 64)) - if self.chest_icon: - self.screen.blit(scaled_icon, (215, y_offset)) + def render(self, screen: pygame.Surface) -> None: + self.screen.fill((0, 0, 0, 0)) # Clear UI surface - # Show prompt if player is colliding with the island if self.collide: - if getattr(self.collide, "chest_collected", False): - prompt_text = self.font.render("No chest or voyage available here.", True, (200, 100, 100)) - else: - prompt_text = self.font.render("Press 'E' to pick up the chest!", True, (255, 255, 255)) + island_id = self.collide.island_id - self.screen.blit(prompt_text, (50, self.screen.get_height() - 100)) - - # Show message if a chest was just picked up - if self.pressed and self.message and pygame.time.get_ticks() < self.message_end_time: - message_text = self.font.render(self.message, True, (255, 255, 0)) - text_width, text_height = message_text.get_size() - - bg_x = 40 - bg_y = self.screen.get_height() - 60 - pygame.draw.rect(self.screen, (0, 0, 0), (bg_x, bg_y, text_width + 20, text_height + 10)) - self.screen.blit(message_text, (bg_x + 10, bg_y + 5)) + if island_id not in self.collected_islands: + self.collected_islands.add(island_id) + self.message = self.font.render(f"You just found a {self.chest_name}!", True, (0, 0, 0)) + self.inventory.add_item(self.chest_name, 1) + self.message_end_time = pygame.time.get_ticks() + 3000 # Show message for 3 seconds + else: + self.message = self.font.render("There are no chests or voyages on this island!", True, (0, 0, 0)) + self.message_end_time = pygame.time.get_ticks() + 3000 - # Optionally: show the "no chest" message as a timed message too - if self.collected_message and pygame.time.get_ticks() < self.collected_message_end_time: - no_chest_text = self.font.render(self.collected_message, True, (180, 0, 0)) - self.screen.blit(no_chest_text, (50, self.screen.get_height() - 70)) + if pygame.time.get_ticks() < self.message_end_time: + self.screen.blit(self.message, (50, self.screen.get_height() - 100)) - # Blit the ChestState UI surface onto the main screen screen.blit(self.screen, (400, 125)) pygame.display.flip() diff --git a/src/states/game_running.py b/src/states/game_running.py index ff91257..49ef5da 100644 --- a/src/states/game_running.py +++ b/src/states/game_running.py @@ -12,6 +12,7 @@ from src.settings import TILE_SIZE, WORLD_LAYERS from src.sprites.animations import AnimatedSprites from src.sprites.base import BaseSprite +from src.sprites.islands.island_sprite import IslandSprite from src.sprites.camera.player_camera import PlayerCamera from src.sprites.entities.player import Player from src.sprites.tiles.grid_manager import GridManager @@ -61,6 +62,8 @@ def __init__(self, game_state_manager) -> None: self.shop_window = pygame.Surface((800, 600)) self.in_shop = False + self.chest_handler: ChestState | None = None + def setup(self, player_start_pos: str, sprite_group=None) -> None: if sprite_group is None: sprite_group = pygame.sprite.Group() @@ -114,14 +117,33 @@ def setup(self, player_start_pos: str, sprite_group=None) -> None: # Islands self.island_group: pygame.sprite.Group = pygame.sprite.Group() + self.visual_island_group: pygame.sprite.Group = pygame.sprite.Group() self.islands = self.tmx_map["map"].get_layer_by_name("Islands") for x, y, surface in self.islands.tiles(): self.island_obj = BaseSprite( pos=(x * TILE_SIZE, y * TILE_SIZE), surf=surface, + groups=(sprite_group, self.visual_island_group), + z=WORLD_LAYERS["bg"], + ) + + for obj in self.tmx_map["map"].get_layer_by_name("Island_objects"): + name = obj.properties.get("island_name", "Unnamed island") + island_id = obj.properties.get("island_id", "Unknown id") + surface = pygame.Surface((obj.width, obj.height), pygame.SRCALPHA) + surface.fill((0, 0, 0, 0)) + + island = IslandSprite( + pos=(obj.x, obj.y), + surf=surface, groups=(sprite_group, self.island_group), z=WORLD_LAYERS["bg"], + island_name=name, + island_id=island_id ) + island.rect = pygame.Rect(obj.x, obj.y, obj.width, obj.height) + # island.island_name = name + # island.island_id = island_id # Entities for obj in self.tmx_map["map"].get_layer_by_name("Ships"): @@ -136,6 +158,9 @@ def setup(self, player_start_pos: str, sprite_group=None) -> None: groups=(sprite_group,), ) + self.test_chest: Chest = Chest("test_chest", 1000) + self.chest_handler = ChestState(self.player, self.player_inventory, self.test_chest, self.island_group) + # Coast for obj in self.tmx_map["map"].get_layer_by_name("Coast"): terrain = obj.properties["terrain"] @@ -162,7 +187,6 @@ def update(self, events) -> None: """ update each sprites and handle events """ - self.test_chest: Chest = Chest("test_chest", 1000) self.island_collision = pygame.sprite.spritecollideany(self.player, self.island_group) collide: bool = ( self.player is not None @@ -173,6 +197,8 @@ def update(self, events) -> None: ) dt = self.clock.tick() / 1000 self.all_sprites.update(dt) + if self.chest_handler: + self.chest_handler.update() # Handle player movement and grid snapping if isinstance(self.all_sprites, PlayerCamera): @@ -194,20 +220,22 @@ def update(self, events) -> None: self.game_state_manager.enter_state( WindowShop(self.game_state_manager, self.player, self.shop, self.player_inventory) ) - if self.island_collision and event.key == pygame.K_e: - self.game_state_manager.enter_state( - ChestState( - self.game_state_manager, - self.player, - self.player_inventory, - self.test_chest, - self.island_group, - ) - ) + # if self.island_collision and event.key == pygame.K_e: + # self.game_state_manager.enter_state( + # ChestState( + # self.game_state_manager, + # self.player, + # self.player_inventory, + # self.test_chest, + # self.island_group, + # ) + # ) def render(self, screen) -> None: """Draw sprites to the canvas.""" screen.fill("#000000") + if self.chest_handler: + self.chest_handler.render(screen) if isinstance(self.all_sprites, PlayerCamera): self.all_sprites.draw(self.player.rect.center, show_grid=self.show_grid) @@ -235,6 +263,11 @@ def render(self, screen) -> None: # Draw the green dot at the screen coordinates pygame.draw.circle(screen, (0, 255, 0), (dot_x, dot_y), 5) # Green circle at tile coordinates + # for island in self.island_group: + # offset_rect = island.rect.copy() + # offset_rect.topleft -= self.all_sprites.offset + # pygame.draw.rect(screen, (255, 0, 0), offset_rect, 1) + self.message = self.font.render( "Press E to interact\nPress Q to quit interaction\nPress I to open inventory", True, (0, 0, 0) )