homework commit

This commit is contained in:
Edoardo Vergerio
2026-08-24 13:49:19 +02:00
parent b223b69563
commit 5100d055be
5552 changed files with 5014 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
{
"python-envs.defaultEnvManager": "ms-python.python:conda",
"python-envs.defaultPackageManager": "ms-python.python:conda"
}
Binary file not shown.
Binary file not shown.
+235
View File
@@ -0,0 +1,235 @@
import random
import math
import copy
import game_data as gd
class Pokemon:
def __init__(self, input_series):
self.national_pokedex_number = input_series['national_pokedex_number']
self.name = input_series['name']
self.level = random.randint(1,20)
self.types = input_series['types']
self.baseStats = input_series['baseStats']
self.moves_dict = {}
moves = input_series['moves']
if len(moves) > 4:
raise ValueError("A Pokemon can only have 4 moves.")
else:
for move in moves:
#check if the move is in the available_moves dataframe
if move not in gd.available_moves_df.index:
raise ValueError(f"{move} is not an available move.")
else:
self.moves_dict[move] = copy.deepcopy(gd.available_moves_df.loc[move])
self.ActStats = self._compute_ActStats()
self.curr_hp = self.ActStats['hp']
def _compute_ActStats(self):
ActStats = {}
for baseKey in self.baseStats.keys():
if baseKey == 'hp':
ActStats[baseKey] = math.floor(self.baseStats[baseKey] * 2 * self.level / 100) + self.level + 10
else:
ActStats[baseKey] = math.floor(self.baseStats[baseKey] * 2 * self.level / 100) + 5
return ActStats
def _get_baseStats(self):
return self.baseStats
def get_current_hp(self):
return self.curr_hp
def get_current_hp_percent(self):
return self.curr_hp / self.baseStats['hp']
def can_battle(self):
condition1 = self.curr_hp > 0
condition2 = False
for move in self.moves_dict:
move_usage_avail = True #disregard pp in random battle
#move_usage_avail = self.moves_dict[move]['pp'] > 0
if move_usage_avail:
condition2 = True
break
else:
condition2 = False
return condition1 and condition2
def learnMove(self, move):
if len(self.moves_dict) >= 4:
raise ValueError("A Pokemon can only have 4 moves.")
else:
self.moves_dict[move] = copy.deepcopy(gd.available_moves_df[move])
def _compute_effect(self, move, opponent):
#check the move type (attack) and the defending
#pokemon type (defend) and look at effectiveness list.
#this should be done for all type of the defending pokemon
attack_move_type = move['type']
defending_types = opponent.get_types()
effect = 1
for def_t in defending_types:
for effectiveness_dataset in gd.type_effectiveness:
if effectiveness_dataset['attack'] == attack_move_type and effectiveness_dataset['defend'] == def_t:
effect = effect * effectiveness_dataset['effectiveness']
break
return effect
def _useMove(self, move, opponent):
if random.random() < move['accuracy']:
if move['category'] == 'physical':
attack = self.ActStats['attack']
defense = opponent.ActStats['defense']
assert defense>0
else:
attack = self.ActStats['special']
defense = opponent.ActStats['special']
assert defense>0
stability = 1.5 if move['type'] in self.types else 1
effect = self._compute_effect(move,opponent)
critical = 2 if random.random() < self.ActStats['speed']/512 else 1
luck = random.uniform(0.85, 1.0)
modifier = stability * effect * critical * luck
damage = math.floor(((2*self.level+10)/250 * (attack/defense) * move['power'] + 2) * modifier)
opponent.curr_hp -= damage
if opponent.curr_hp < 0:
opponent.curr_hp = 0
#print(f"{self.name} used {move['name']} and dealt {damage} damage to {opponent.name}!")
else:
damage = 0
#print(f"{self.name}'s attack missed!")
return damage
def useMove(self, move_name, opponent):
if move_name not in self.moves_dict:
raise ValueError(f"{self.name} does not know the move {move_name}.")
else:
return self._useMove(self.moves_dict[move_name], opponent)
def print_move(self,move):
print(f"Move: {self.moves_dict[move]['name']}")
print(f"Type: {self.moves_dict[move]['type']}")
print(f"Category: {self.moves_dict[move]['category']}")
print(f"Power: {self.moves_dict[move]['power']}")
print(f"Accuracy: {self.moves_dict[move]['accuracy']}")
print(f"PP: {self.moves_dict[move]['pp']}")
def get_moves(self):
return list(self.moves_dict.keys())
def get_types(self):
return self.types
def checkout_move(self, move_name):
if move_name not in self.moves_dict:
raise ValueError(f"{self.name} does not know the move {move_name}.")
else:
self.print_move(move_name)
def _status(self):
print(f"Pokemon: {self.name}")
print(f"Level: {self.level}")
print(f"Types: {self.types}")
print(f"Base Stats: {self.baseStats}")
print(f"Current HP: {self.curr_hp}")
print(f"Moves: {self.moves_dict}")
def print_pokemon_info(self):
self._status()
class Trainer:
def __init__(self, name, starter_name, items = {"potions": 0, "pokeball": 0}, is_CPU = False):
self.name = name
self.starter = starter_name
self.active_pokemon = Pokemon(gd.pokemons_df.loc[starter_name])
self.pokemon_list = []
self.add_pokemon(self.active_pokemon)
self.items = items
self.is_CPU = is_CPU
def add_pokemon(self, pokemon):
if len(self.pokemon_list) >= 6:
raise ValueError("A trainer can only have 6 Pokemon.")
else:
self.pokemon_list.append(pokemon)
def get_pokemon_list(self):
return [pok.name for pok in self.pokemon_list]
def get_pokemon(self, name):
for pokemon in self.pokemon_list:
if pokemon.name == name:
return pokemon
raise ValueError(f"{name} is not in the trainer's Pokemon list.")
def can_battle(self):
for pokemon in self.pokemon_list:
if pokemon.can_battle():
return True
return False
def active_pokemon_can_battle(self):
return self.active_pokemon.can_battle()
def _change_active_pokemon(self,new_pokemon):
self.active_pokemon = new_pokemon
def get_active_pokemon(self):
return self.active_pokemon
def change_active_pokemon(self,pokemon_name):
try:
new_pokemon = self.get_pokemon(pokemon_name)
self._change_active_pokemon(new_pokemon)
print("Pokemon change successfull!")
except ValueError as e:
raise e
def print_items(self):
print(f"1) Potions: {self.items['potions']}")
print(f"2) Pokeballs: {self.items['pokeball']}")
def use_item(self, item_name):
if item_name not in self.items:
raise ValueError(f"{item_name} is not an available item.")
else:
if self.items[item_name] > 0:
self.items[item_name] -= 1 #use the item
print(f"Used {item_name}. Remaining: {self.items[item_name]}")
if item_name == "potions":
self.active_pokemon.curr_hp += 20
if self.active_pokemon.curr_hp > self.active_pokemon.baseStats['hp']:
self.active_pokemon.curr_hp = self.active_pokemon.baseStats['hp']
print(f"{self.active_pokemon.name} has been healed by 20 HP!")
return False
elif item_name == "pokeball":
return True
else:
raise ValueError(f"You have no {item_name} left.")
def update_pokemon_list(self, pokemon):
pass
def _status(self):
print('='*30)
print(f"Trainer name: {self.name}")
print(f"Starter Pokemon: {self.starter}")
print(f"Pokemon List: {[pok.name for pok in self.pokemon_list]}")
print("Active Pokemon info:")
self.active_pokemon.print_pokemon_info()
print("Detailed info of Pokemons in your list:")
print("-"*30)
for pokemon in self.pokemon_list:
pokemon.print_pokemon_info()
print("-"*30)
print(f"Items: {self.items}")
print('='*30)
def print_trainer_info(self):
self._status()
+441
View File
@@ -0,0 +1,441 @@
player_hp,player_attack,player_defense,player_speed,player_special,player_type_normal,player_type_fire,player_type_water,player_type_electric,player_type_grass,player_type_ice,player_type_fighting,player_type_poison,player_type_ground,player_type_flying,player_type_psychic,player_type_bug,player_type_rock,player_type_ghost,player_type_dragon,opponent_hp,opponent_attack,opponent_defense,opponent_speed,opponent_special,opponent_type_normal,opponent_type_fire,opponent_type_water,opponent_type_electric,opponent_type_grass,opponent_type_ice,opponent_type_fighting,opponent_type_poison,opponent_type_ground,opponent_type_flying,opponent_type_psychic,opponent_type_bug,opponent_type_rock,opponent_type_ghost,opponent_type_dragon,battle_result
32,15,26,18,33,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,56,33,29,51,31,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
32,15,26,18,33,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,34,30,28,22,20,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
32,15,26,18,33,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,20,12,10,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1
32,15,26,18,33,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,20,12,9,11,10,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
32,15,26,18,33,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,12,6,6,7,7,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1
27,17,13,16,13,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,62,45,33,23,25,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
27,17,13,16,13,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,49,20,23,20,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
27,17,13,16,13,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,12,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
27,17,13,16,13,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,36,22,20,14,27,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0
27,17,13,16,13,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,21,11,12,16,14,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
36,27,31,14,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,42,25,23,28,24,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1
36,27,31,14,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,52,25,23,53,59,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
36,27,31,14,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,32,9,17,11,10,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
36,27,31,14,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,24,11,11,15,15,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
36,27,31,14,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,47,20,22,28,32,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1
42,21,20,22,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,26,14,12,16,14,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
42,21,20,22,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,44,30,16,18,28,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
42,21,20,22,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,23,16,18,9,10,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1
42,21,20,22,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,17,9,8,12,8,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
42,21,20,22,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,31,13,13,11,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
22,17,19,13,12,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,22,13,9,14,9,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
22,17,19,13,12,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,54,22,29,14,24,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
22,17,19,13,12,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,26,16,12,14,13,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
22,17,19,13,12,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,28,19,13,13,18,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
22,17,19,13,12,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,51,31,31,30,37,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
42,22,23,15,30,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,25,13,12,20,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
42,22,23,15,30,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,42,23,23,30,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
42,22,23,15,30,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,28,16,15,17,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
42,22,23,15,30,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,20,9,14,11,18,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
42,22,23,15,30,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,28,19,15,21,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
38,27,20,14,16,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,11,6,5,6,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
38,27,20,14,16,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,24,15,11,17,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
38,27,20,14,16,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,49,35,28,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1
38,27,20,14,16,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,51,34,25,42,35,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
38,27,20,14,16,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,28,17,13,15,14,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
16,8,8,12,11,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,21,14,10,10,13,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
16,8,8,12,11,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,40,32,39,11,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0
16,8,8,12,11,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,50,37,40,25,22,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
16,8,8,12,11,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,35,23,17,28,23,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
16,8,8,12,11,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,21,13,10,15,13,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
36,16,15,15,26,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,28,7,19,25,10,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
36,16,15,15,26,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,17,11,8,12,8,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1
36,16,15,15,26,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,53,36,26,44,37,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
36,16,15,15,26,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,15,8,9,6,8,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1
36,16,15,15,26,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,38,21,31,24,38,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
27,14,18,8,14,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,47,30,23,17,20,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
27,14,18,8,14,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,33,16,15,19,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
27,14,18,8,14,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,52,30,29,34,27,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
27,14,18,8,14,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,42,29,32,17,14,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
27,14,18,8,14,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,38,33,37,24,21,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
38,21,17,33,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,37,29,15,26,15,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
38,21,17,33,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,29,28,30,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
38,21,17,33,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,36,31,21,29,19,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
38,21,17,33,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,19,9,10,8,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
38,21,17,33,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,32,28,30,27,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1
14,7,7,6,8,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,46,30,23,25,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
14,7,7,6,8,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,51,23,17,39,39,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0
14,7,7,6,8,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,54,32,33,32,39,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
14,7,7,6,8,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,14,7,7,10,8,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
14,7,7,6,8,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,27,11,17,11,14,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0
22,15,14,16,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,21,22,14,29,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
22,15,14,16,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,23,31,14,21,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
22,15,14,16,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,15,16,13,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
22,15,14,16,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,33,22,17,19,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
22,15,14,16,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,24,27,17,29,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
51,37,23,24,35,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,23,20,12,12,18,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
51,37,23,24,35,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,37,30,19,27,19,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
51,37,23,24,35,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,59,44,29,54,27,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0
51,37,23,24,35,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,31,15,14,12,16,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1
51,37,23,24,35,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,23,11,13,21,14,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
23,10,11,13,14,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,42,35,62,27,32,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0
23,10,11,13,14,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,46,29,20,15,15,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
23,10,11,13,14,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,56,42,28,30,41,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
23,10,11,13,14,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,46,37,27,38,30,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
23,10,11,13,14,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,35,17,14,30,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
43,17,29,17,23,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,48,44,35,33,18,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
43,17,29,17,23,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,49,36,24,26,35,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
43,17,29,17,23,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,18,9,9,8,8,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
43,17,29,17,23,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,32,27,30,20,17,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
43,17,29,17,23,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,15,7,7,9,9,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1
48,27,21,25,21,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,15,8,8,8,7,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
48,27,21,25,21,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,47,31,26,36,41,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
48,27,21,25,21,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,51,41,30,42,33,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
48,27,21,25,21,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,36,18,29,14,15,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
48,27,21,25,21,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,38,21,20,25,21,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
24,11,10,19,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,25,17,12,20,12,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1
24,11,10,19,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,36,18,24,10,19,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1
24,11,10,19,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,52,32,30,35,42,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0
24,11,10,19,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,24,12,10,19,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
24,11,10,19,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,46,31,28,28,37,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1
17,9,9,10,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,44,37,66,28,33,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0
17,9,9,10,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,38,14,15,18,11,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
17,9,9,10,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,62,30,31,26,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17,9,9,10,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,40,13,11,41,47,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
17,9,9,10,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,18,11,11,14,13,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1
19,11,14,8,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,25,14,13,20,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
19,11,14,8,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,16,8,8,7,7,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
19,11,14,8,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,42,19,14,31,31,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0
19,11,14,8,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,42,21,17,24,19,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0
19,11,14,8,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,32,25,18,36,23,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
51,20,14,14,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,20,59,28,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0
51,20,14,14,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,23,23,22,34,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
51,20,14,14,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,32,35,23,20,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
51,20,14,14,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,15,12,9,10,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
51,20,14,14,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,23,19,37,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
16,9,10,7,6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,53,41,38,16,17,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0
16,9,10,7,6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,24,12,11,21,23,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
16,9,10,7,6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,30,17,13,9,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
16,9,10,7,6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,22,15,14,8,8,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0
16,9,10,7,6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,44,42,35,30,21,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
50,20,21,16,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,9,9,19,21,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
50,20,21,16,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,12,13,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
50,20,21,16,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,20,37,19,34,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
50,20,21,16,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,26,25,29,35,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0
50,20,21,16,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,8,7,8,7,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
38,23,22,27,23,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,40,20,16,35,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
38,23,22,27,23,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,17,9,9,7,11,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
38,23,22,27,23,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,29,17,15,16,14,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
38,23,22,27,23,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,40,31,27,13,27,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1
38,23,22,27,23,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,28,20,14,21,16,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
26,14,12,21,12,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,46,28,27,31,37,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0
26,14,12,21,12,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,61,38,36,45,39,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0
26,14,12,21,12,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,16,9,8,11,10,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
26,14,12,21,12,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,38,23,19,21,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
26,14,12,21,12,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,54,31,33,21,39,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
20,11,11,12,10,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,22,14,9,9,13,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
20,11,11,12,10,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,18,9,7,6,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
20,11,11,12,10,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,29,16,16,15,19,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
20,11,11,12,10,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,46,30,26,28,26,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1
20,11,11,12,10,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,12,5,5,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
28,13,27,12,24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,45,22,22,22,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
28,13,27,12,24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,46,26,20,24,20,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
28,13,27,12,24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,42,21,28,37,41,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
28,13,27,12,24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,29,12,15,9,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
28,13,27,12,24,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,62,37,25,15,21,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
61,38,36,45,39,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,76,6,6,16,28,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
61,38,36,45,39,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,49,35,27,41,24,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
61,38,36,45,39,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,13,6,9,6,8,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
61,38,36,45,39,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,21,18,11,11,16,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
61,38,36,45,39,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,12,6,6,6,6,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1
40,20,22,20,25,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,28,20,19,9,10,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0
40,20,22,20,25,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,40,27,37,16,25,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
40,20,22,20,25,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,42,27,25,26,22,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
40,20,22,20,25,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,44,29,24,33,38,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
40,20,22,20,25,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,37,20,17,32,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
46,35,23,34,32,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,19,7,10,8,7,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
46,35,23,34,32,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,51,20,35,20,27,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1
46,35,23,34,32,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,28,16,22,20,22,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
46,35,23,34,32,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32,26,20,17,21,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1
46,35,23,34,32,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,33,26,17,24,17,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
36,25,20,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,53,52,43,37,25,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
36,25,20,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,43,29,26,26,35,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1
36,25,20,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,33,20,12,23,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
36,25,20,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,15,7,7,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
36,25,20,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,45,20,22,18,18,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
30,18,16,17,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,49,29,29,29,35,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
30,18,16,17,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,28,18,15,20,23,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
30,18,16,17,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,53,27,31,20,33,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
30,18,16,17,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,18,8,11,8,9,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1
30,18,16,17,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,41,24,23,25,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
29,16,16,15,19,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,46,28,33,26,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
29,16,16,15,19,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,33,15,12,24,24,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
29,16,16,15,19,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,21,10,10,10,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
29,16,16,15,19,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,27,16,15,11,20,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1
29,16,16,15,19,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,38,27,21,24,21,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
25,12,12,12,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,23,21,39,46,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
25,12,12,12,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,11,23,15,13,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
25,12,12,12,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,9,12,11,12,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
25,12,12,12,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,33,46,16,35,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0
25,12,12,12,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,18,21,18,25,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1
17,8,9,8,8,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,56,31,29,57,49,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
17,8,9,8,8,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,43,22,28,20,23,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
17,8,9,8,8,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,23,14,12,13,12,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1
17,8,9,8,8,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,36,27,24,12,24,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0
17,8,9,8,8,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,21,10,12,10,11,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
33,15,14,23,31,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,44,27,23,25,24,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
33,15,14,23,31,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,43,39,36,29,26,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
33,15,14,23,31,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,22,15,16,11,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
33,15,14,23,31,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,33,24,28,13,14,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1
33,15,14,23,31,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,29,22,13,35,19,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
28,18,20,12,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,34,11,18,14,11,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0
28,18,20,12,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,14,9,7,8,7,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
28,18,20,12,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,12,7,7,6,6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
28,18,20,12,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,15,8,7,6,6,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
28,18,20,12,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,29,14,16,14,18,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1
38,21,21,20,25,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,29,10,7,7,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
38,21,21,20,25,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,49,28,25,44,27,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
38,21,21,20,25,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,18,10,10,9,9,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1
38,21,21,20,25,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,41,24,23,25,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
38,21,21,20,25,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,47,37,32,15,32,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1
51,27,25,37,43,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,26,13,13,13,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
51,27,25,37,43,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,28,22,16,31,20,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
51,27,25,37,43,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,19,9,10,8,11,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
51,27,25,37,43,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,63,39,37,43,52,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0
51,27,25,37,43,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,37,18,17,21,15,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
28,17,14,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,38,19,17,22,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
28,17,14,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,54,40,27,49,25,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0
28,17,14,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,47,29,27,19,37,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0
28,17,14,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,7,6,6,7,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1
28,17,14,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,48,41,73,31,37,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0
46,28,27,31,37,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,22,11,9,12,10,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1
46,28,27,31,37,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,48,24,24,23,31,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
46,28,27,31,37,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,48,37,25,39,29,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
46,28,27,31,37,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,62,39,35,24,50,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1
46,28,27,31,37,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,49,25,24,25,29,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
14,11,10,8,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,22,11,10,19,21,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
14,11,10,8,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,28,16,14,15,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
14,11,10,8,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,18,15,14,11,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
14,11,10,8,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,25,18,17,9,9,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1
14,11,10,8,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,46,5,5,11,17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
39,23,23,29,29,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,33,18,16,21,18,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
39,23,23,29,29,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,34,22,19,25,29,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
39,23,23,29,29,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,17,7,6,14,15,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
39,23,23,29,29,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,38,19,30,26,30,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
39,23,23,29,29,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32,18,18,17,17,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1
66,57,37,27,31,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,37,18,28,25,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
66,57,37,27,31,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,53,29,29,39,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
66,57,37,27,31,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,35,27,14,24,14,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
66,57,37,27,31,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,27,13,25,12,23,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
66,57,37,27,31,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,21,11,12,16,14,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
24,13,15,13,17,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,20,8,8,8,11,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
24,13,15,13,17,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,40,20,33,15,17,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
24,13,15,13,17,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,35,17,30,18,27,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
24,13,15,13,17,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,12,5,5,5,6,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
24,13,15,13,17,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,19,10,9,14,16,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
53,30,37,28,31,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,29,20,29,14,15,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
53,30,37,28,31,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,16,9,7,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
53,30,37,28,31,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,50,27,25,35,35,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
53,30,37,28,31,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,23,12,12,12,14,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
53,30,37,28,31,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,22,11,11,14,14,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
28,21,16,21,17,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,24,12,20,11,18,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
28,21,16,21,17,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,45,29,32,41,37,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0
28,21,16,21,17,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,11,6,6,5,6,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1
28,21,16,21,17,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,22,9,9,8,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
28,21,16,21,17,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32,25,14,41,22,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
42,26,15,30,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,35,17,16,20,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
42,26,15,30,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,29,22,12,20,12,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
42,26,15,30,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,11,6,5,6,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
42,26,15,30,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,63,37,35,41,33,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
42,26,15,30,16,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,16,10,8,10,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
43,26,25,31,27,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,53,29,27,54,46,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
43,26,25,31,27,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,51,39,25,43,39,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
43,26,25,31,27,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,16,12,11,9,8,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
43,26,25,31,27,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,28,26,14,20,11,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
43,26,25,31,27,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,54,32,31,33,32,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
20,9,9,12,12,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,57,50,37,32,39,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0
20,9,9,12,12,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,44,25,24,28,23,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
20,9,9,12,12,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,14,7,8,7,9,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
20,9,9,12,12,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,28,17,14,11,12,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
20,9,9,12,12,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,23,8,6,6,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
47,36,33,14,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,29,15,14,24,28,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
47,36,33,14,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,19,15,13,11,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
47,36,33,14,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,40,24,21,23,22,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
47,36,33,14,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,67,25,24,25,40,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
47,36,33,14,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,34,30,28,22,20,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
38,25,33,16,18,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,52,27,18,11,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
38,25,33,16,18,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,12,6,6,6,6,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1
38,25,33,16,18,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,47,30,23,17,20,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
38,25,33,16,18,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,57,23,30,15,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
38,25,33,16,18,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,28,13,10,20,20,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
44,28,21,16,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,46,35,24,37,28,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
44,28,21,16,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,66,31,31,11,21,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1
44,28,21,16,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,34,29,20,27,18,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
44,28,21,16,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,34,13,22,13,18,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1
44,28,21,16,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,35,32,27,23,17,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
11,6,6,5,6,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,48,31,29,30,25,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
11,6,6,5,6,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,42,15,16,20,11,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
11,6,6,5,6,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,46,26,24,32,27,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
11,6,6,5,6,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,38,34,27,26,14,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
11,6,6,5,6,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,59,47,31,32,39,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0
26,9,7,7,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,21,15,10,13,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
26,9,7,7,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,43,39,39,52,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0
26,9,7,7,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,8,8,6,6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
26,9,7,7,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,36,26,44,37,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
26,9,7,7,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,5,5,6,7,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
14,7,7,8,8,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,27,17,18,23,21,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0
14,7,7,8,8,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,36,22,18,20,18,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
14,7,7,8,8,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,46,23,21,27,19,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
14,7,7,8,8,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,21,10,16,11,15,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
14,7,7,8,8,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,12,5,7,8,5,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
19,9,13,10,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,46,27,28,27,33,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
19,9,13,10,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,20,10,9,10,10,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
19,9,13,10,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,35,21,13,24,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
19,9,13,10,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,20,10,9,10,10,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
19,9,13,10,16,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,35,36,32,23,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
31,20,27,13,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,27,15,15,19,19,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
31,20,27,13,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,48,25,23,29,22,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
31,20,27,13,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,52,37,29,43,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
31,20,27,13,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,26,22,19,16,12,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
31,20,27,13,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,53,28,26,37,37,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0
35,30,18,27,15,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,19,12,12,7,7,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1
35,30,18,27,15,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,28,13,23,14,21,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
35,30,18,27,15,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,36,12,8,8,9,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
35,30,18,27,15,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,21,12,11,9,15,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1
35,30,18,27,15,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,47,27,25,42,49,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
12,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,18,10,10,8,12,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0
12,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,10,14,8,9,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
12,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,41,24,33,30,33,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
12,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,43,20,26,47,29,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
12,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,11,9,15,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
19,12,9,12,11,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,49,32,18,30,20,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0
19,12,9,12,11,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,28,18,24,12,17,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
19,12,9,12,11,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,63,37,43,37,52,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0
19,12,9,12,11,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,15,8,7,10,11,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
19,12,9,12,11,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,51,29,27,35,29,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
51,29,27,46,54,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,48,33,37,20,16,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
51,29,27,46,54,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,63,55,41,35,43,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1
51,29,27,46,54,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,28,17,11,17,12,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
51,29,27,46,54,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,38,26,14,16,24,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
51,29,27,46,54,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,12,6,7,6,7,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
19,10,9,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,15,14,16,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
19,10,9,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,17,10,10,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
19,10,9,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,28,41,19,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
19,10,9,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,23,29,21,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
19,10,9,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,27,31,27,37,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0
45,33,35,23,20,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,18,8,9,10,11,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1
45,33,35,23,20,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,33,21,17,20,16,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
45,33,35,23,20,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,26,10,14,23,14,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
45,33,35,23,20,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,51,24,46,26,41,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
45,33,35,23,20,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,15,7,8,10,11,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
15,8,8,7,7,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,15,8,8,6,6,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1
15,8,8,7,7,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,14,8,7,9,8,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
15,8,8,7,7,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,35,17,15,33,37,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
15,8,8,7,7,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,26,13,14,10,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
15,8,8,7,7,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,19,7,10,8,7,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
17,7,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,13,14,13,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
17,7,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,33,37,24,21,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
17,7,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,17,12,13,17,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
17,7,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,8,7,7,8,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
17,7,7,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,27,29,46,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
30,11,12,14,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,40,16,12,12,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
30,11,12,14,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,34,18,19,12,24,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
30,11,12,14,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,22,11,17,10,16,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0
30,11,12,14,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,40,19,19,8,13,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1
30,11,12,14,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,57,49,32,23,27,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
42,16,15,16,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,28,9,8,26,30,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
42,16,15,16,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,26,14,15,14,14,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1
42,16,15,16,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,38,38,19,29,14,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
42,16,15,16,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,30,23,17,23,19,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
42,16,15,16,24,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,30,19,17,18,17,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1
40,28,24,27,23,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,29,17,16,19,22,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1
40,28,24,27,23,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,59,44,29,54,27,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0
40,28,24,27,23,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,34,14,14,12,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
40,28,24,27,23,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,16,8,10,9,10,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
40,28,24,27,23,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,20,13,11,14,10,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
12,6,6,6,6,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,12,6,6,7,6,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
12,6,6,6,6,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,34,21,21,21,21,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
12,6,6,6,6,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,12,7,6,6,7,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1
12,6,6,6,6,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,26,12,21,13,19,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
12,6,6,6,6,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,14,7,7,7,7,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
22,13,9,14,9,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,50,40,27,27,33,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0
22,13,9,14,9,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,24,23,21,14,9,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
22,13,9,14,9,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,30,17,13,9,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
22,13,9,14,9,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,50,33,28,38,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
22,13,9,14,9,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,44,29,26,27,23,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
28,11,11,11,16,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,23,13,10,7,9,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
28,11,11,11,16,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,19,10,9,15,13,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
28,11,11,11,16,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,34,11,18,14,11,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
28,11,11,11,16,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,46,33,43,24,32,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
28,11,11,11,16,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,37,23,16,20,18,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
37,15,18,15,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,23,11,17,13,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
37,15,18,15,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,30,28,15,16,24,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
37,15,18,15,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,23,14,9,14,10,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1
37,15,18,15,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,24,27,24,31,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1
37,15,18,15,21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,34,16,20,35,22,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
49,29,28,30,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,68,44,33,24,29,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
49,29,28,30,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,67,32,30,24,35,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0
49,29,28,30,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,45,23,22,23,27,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
49,29,28,30,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,44,22,22,21,28,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
49,29,28,30,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,16,6,6,12,13,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
37,21,19,32,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,27,27,26,33,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
37,21,19,32,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,22,21,22,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
37,21,19,32,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,14,12,24,13,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
37,21,19,32,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,14,16,22,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
37,21,19,32,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,8,6,7,6,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
37,21,29,27,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,13,6,6,6,7,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
37,21,29,27,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,62,37,36,39,37,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
37,21,29,27,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,26,10,14,23,14,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
37,21,29,27,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,23,11,9,16,16,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
37,21,29,27,29,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,18,11,10,11,10,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
17,8,8,9,7,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,44,22,18,39,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17,8,8,9,7,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,48,33,37,20,16,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
17,8,8,9,7,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,44,27,17,41,25,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
17,8,8,9,7,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,26,8,13,9,9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
17,8,8,9,7,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,19,11,14,8,11,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
46,28,31,12,13,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,19,11,11,11,11,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
46,28,31,12,13,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,12,6,6,5,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
46,28,31,12,13,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,18,10,9,11,10,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
46,28,31,12,13,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,25,13,12,20,23,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0
46,28,31,12,13,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,12,7,7,6,6,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
19,9,11,14,15,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,11,5,6,7,6,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
19,9,11,14,15,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,33,14,12,32,36,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
19,9,11,14,15,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,12,7,6,6,5,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
19,9,11,14,15,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,51,28,26,51,44,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
19,9,11,14,15,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,42,33,17,30,17,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
30,15,14,17,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,34,24,17,27,24,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
30,15,14,17,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,46,30,26,28,26,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
30,15,14,17,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,28,14,18,13,15,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
30,15,14,17,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,28,12,13,12,16,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
30,15,14,17,14,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,29,14,23,16,29,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
38,25,21,23,21,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,25,17,14,9,14,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1
38,25,21,23,21,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,46,29,29,29,29,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1
38,25,21,23,21,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,21,10,16,11,15,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
38,25,21,23,21,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,32,17,17,17,21,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1
38,25,21,23,21,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,15,7,7,10,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
35,22,13,21,14,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,33,33,30,21,16,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
35,22,13,21,14,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,19,12,12,7,7,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1
35,22,13,21,14,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,38,19,16,22,17,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1
35,22,13,21,14,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,46,31,28,28,37,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0
35,22,13,21,14,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,40,32,39,11,15,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0
42,23,23,30,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,32,16,20,15,17,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
42,23,23,30,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,39,19,19,19,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
42,23,23,30,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,27,18,16,17,15,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
42,23,23,30,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,32,23,17,24,19,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
42,23,23,30,19,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,16,9,8,10,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
23,15,11,12,15,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,58,37,25,19,19,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
23,15,11,12,15,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,64,5,5,14,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
23,15,11,12,15,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,28,18,20,12,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1
23,15,11,12,15,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,53,52,43,37,25,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
23,15,11,12,15,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,63,55,41,35,43,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0
50,38,36,15,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,64,33,21,12,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
50,38,36,15,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,47,18,32,18,25,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1
50,38,36,15,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,20,17,10,13,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
50,38,36,15,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,35,17,14,20,16,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1
50,38,36,15,16,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,43,38,26,35,23,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
49,27,33,25,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,35,29,33,28,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1
49,27,33,25,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,12,6,6,6,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
49,27,33,25,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,63,37,43,37,52,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0
49,27,33,25,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,27,19,27,13,14,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
49,27,33,25,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,12,6,6,6,6,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1
14,8,12,7,8,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,43,21,20,18,17,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0
14,8,12,7,8,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,30,32,28,18,11,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
14,8,12,7,8,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,12,6,7,5,5,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1
14,8,12,7,8,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,41,21,22,19,19,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
14,8,12,7,8,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,16,10,15,9,10,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1
32,25,18,36,23,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,22,10,16,12,20,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
32,25,18,36,23,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,33,18,17,31,27,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
32,25,18,36,23,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,45,22,21,19,17,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0
32,25,18,36,23,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,37,19,18,22,17,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1
32,25,18,36,23,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,35,28,19,14,16,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
1 player_hp player_attack player_defense player_speed player_special player_type_normal player_type_fire player_type_water player_type_electric player_type_grass player_type_ice player_type_fighting player_type_poison player_type_ground player_type_flying player_type_psychic player_type_bug player_type_rock player_type_ghost player_type_dragon opponent_hp opponent_attack opponent_defense opponent_speed opponent_special opponent_type_normal opponent_type_fire opponent_type_water opponent_type_electric opponent_type_grass opponent_type_ice opponent_type_fighting opponent_type_poison opponent_type_ground opponent_type_flying opponent_type_psychic opponent_type_bug opponent_type_rock opponent_type_ghost opponent_type_dragon battle_result
2 32 15 26 18 33 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 56 33 29 51 31 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 32 15 26 18 33 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 34 30 28 22 20 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1
4 32 15 26 18 33 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 20 12 10 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
5 32 15 26 18 33 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 20 12 9 11 10 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
6 32 15 26 18 33 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 12 6 6 7 7 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
7 27 17 13 16 13 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 62 45 33 23 25 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
8 27 17 13 16 13 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 49 20 23 20 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
9 27 17 13 16 13 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 12 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
10 27 17 13 16 13 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 36 22 20 14 27 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0
11 27 17 13 16 13 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 21 11 12 16 14 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
12 36 27 31 14 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 42 25 23 28 24 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1
13 36 27 31 14 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 52 25 23 53 59 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
14 36 27 31 14 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 32 9 17 11 10 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
15 36 27 31 14 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 24 11 11 15 15 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
16 36 27 31 14 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 47 20 22 28 32 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1
17 42 21 20 22 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 26 14 12 16 14 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
18 42 21 20 22 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 44 30 16 18 28 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
19 42 21 20 22 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 23 16 18 9 10 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
20 42 21 20 22 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 17 9 8 12 8 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
21 42 21 20 22 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 31 13 13 11 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
22 22 17 19 13 12 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 22 13 9 14 9 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
23 22 17 19 13 12 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 54 22 29 14 24 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24 22 17 19 13 12 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 26 16 12 14 13 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
25 22 17 19 13 12 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 28 19 13 13 18 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
26 22 17 19 13 12 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 51 31 31 30 37 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
27 42 22 23 15 30 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 25 13 12 20 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
28 42 22 23 15 30 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 42 23 23 30 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
29 42 22 23 15 30 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 28 16 15 17 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
30 42 22 23 15 30 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 20 9 14 11 18 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
31 42 22 23 15 30 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 28 19 15 21 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
32 38 27 20 14 16 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 11 6 5 6 5 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
33 38 27 20 14 16 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 24 15 11 17 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
34 38 27 20 14 16 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 49 35 28 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
35 38 27 20 14 16 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 51 34 25 42 35 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
36 38 27 20 14 16 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 28 17 13 15 14 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
37 16 8 8 12 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 21 14 10 10 13 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
38 16 8 8 12 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 40 32 39 11 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0
39 16 8 8 12 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 50 37 40 25 22 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
40 16 8 8 12 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 35 23 17 28 23 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
41 16 8 8 12 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 21 13 10 15 13 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
42 36 16 15 15 26 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 28 7 19 25 10 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
43 36 16 15 15 26 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 17 11 8 12 8 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1
44 36 16 15 15 26 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 53 36 26 44 37 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
45 36 16 15 15 26 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 15 8 9 6 8 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1
46 36 16 15 15 26 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 38 21 31 24 38 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
47 27 14 18 8 14 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 47 30 23 17 20 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
48 27 14 18 8 14 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 33 16 15 19 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
49 27 14 18 8 14 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 52 30 29 34 27 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
50 27 14 18 8 14 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 42 29 32 17 14 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
51 27 14 18 8 14 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 38 33 37 24 21 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
52 38 21 17 33 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 37 29 15 26 15 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
53 38 21 17 33 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 49 29 28 30 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
54 38 21 17 33 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 36 31 21 29 19 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
55 38 21 17 33 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 19 9 10 8 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
56 38 21 17 33 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 49 32 28 30 27 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
57 14 7 7 6 8 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 46 30 23 25 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
58 14 7 7 6 8 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 51 23 17 39 39 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0
59 14 7 7 6 8 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 54 32 33 32 39 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
60 14 7 7 6 8 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 14 7 7 10 8 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
61 14 7 7 6 8 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 27 11 17 11 14 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0
62 22 15 14 16 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 21 22 14 29 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
63 22 15 14 16 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 23 31 14 21 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
64 22 15 14 16 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 15 16 13 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
65 22 15 14 16 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 33 22 17 19 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
66 22 15 14 16 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 24 27 17 29 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
67 51 37 23 24 35 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 23 20 12 12 18 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
68 51 37 23 24 35 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 37 30 19 27 19 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
69 51 37 23 24 35 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 59 44 29 54 27 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0
70 51 37 23 24 35 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 31 15 14 12 16 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1
71 51 37 23 24 35 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 23 11 13 21 14 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
72 23 10 11 13 14 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 42 35 62 27 32 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0
73 23 10 11 13 14 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 46 29 20 15 15 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
74 23 10 11 13 14 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 56 42 28 30 41 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
75 23 10 11 13 14 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 46 37 27 38 30 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
76 23 10 11 13 14 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 35 17 14 30 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
77 43 17 29 17 23 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 48 44 35 33 18 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
78 43 17 29 17 23 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 49 36 24 26 35 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
79 43 17 29 17 23 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 9 9 8 8 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
80 43 17 29 17 23 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 32 27 30 20 17 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
81 43 17 29 17 23 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 15 7 7 9 9 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1
82 48 27 21 25 21 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 15 8 8 8 7 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
83 48 27 21 25 21 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 47 31 26 36 41 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
84 48 27 21 25 21 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 51 41 30 42 33 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
85 48 27 21 25 21 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 36 18 29 14 15 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
86 48 27 21 25 21 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 38 21 20 25 21 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
87 24 11 10 19 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 25 17 12 20 12 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1
88 24 11 10 19 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 36 18 24 10 19 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1
89 24 11 10 19 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 52 32 30 35 42 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0
90 24 11 10 19 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 24 12 10 19 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
91 24 11 10 19 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 46 31 28 28 37 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
92 17 9 9 10 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 44 37 66 28 33 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0
93 17 9 9 10 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 38 14 15 18 11 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
94 17 9 9 10 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 62 30 31 26 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
95 17 9 9 10 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 40 13 11 41 47 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
96 17 9 9 10 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 18 11 11 14 13 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1
97 19 11 14 8 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 25 14 13 20 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
98 19 11 14 8 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 16 8 8 7 7 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
99 19 11 14 8 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 42 19 14 31 31 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0
100 19 11 14 8 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 42 21 17 24 19 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0
101 19 11 14 8 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 32 25 18 36 23 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
102 51 20 14 14 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 20 59 28 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0
103 51 20 14 14 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 23 23 22 34 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
104 51 20 14 14 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 32 35 23 20 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
105 51 20 14 14 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 15 12 9 10 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
106 51 20 14 14 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 23 19 37 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
107 16 9 10 7 6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 53 41 38 16 17 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0
108 16 9 10 7 6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 24 12 11 21 23 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
109 16 9 10 7 6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 30 17 13 9 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
110 16 9 10 7 6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 22 15 14 8 8 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0
111 16 9 10 7 6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 44 42 35 30 21 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
112 50 20 21 16 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 9 9 19 21 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
113 50 20 21 16 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 6 6 12 13 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
114 50 20 21 16 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 20 37 19 34 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
115 50 20 21 16 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 26 25 29 35 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0
116 50 20 21 16 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 8 7 8 7 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
117 38 23 22 27 23 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 40 20 16 35 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
118 38 23 22 27 23 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 17 9 9 7 11 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
119 38 23 22 27 23 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 29 17 15 16 14 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
120 38 23 22 27 23 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 40 31 27 13 27 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1
121 38 23 22 27 23 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 28 20 14 21 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
122 26 14 12 21 12 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 46 28 27 31 37 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0
123 26 14 12 21 12 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 61 38 36 45 39 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
124 26 14 12 21 12 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 16 9 8 11 10 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
125 26 14 12 21 12 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 38 23 19 21 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
126 26 14 12 21 12 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 54 31 33 21 39 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
127 20 11 11 12 10 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 22 14 9 9 13 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
128 20 11 11 12 10 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 18 9 7 6 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
129 20 11 11 12 10 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 16 16 15 19 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
130 20 11 11 12 10 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 46 30 26 28 26 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
131 20 11 11 12 10 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 12 5 5 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
132 28 13 27 12 24 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 45 22 22 22 22 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
133 28 13 27 12 24 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 46 26 20 24 20 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
134 28 13 27 12 24 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 42 21 28 37 41 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
135 28 13 27 12 24 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 29 12 15 9 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
136 28 13 27 12 24 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 62 37 25 15 21 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
137 61 38 36 45 39 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 76 6 6 16 28 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
138 61 38 36 45 39 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 49 35 27 41 24 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
139 61 38 36 45 39 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 13 6 9 6 8 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1
140 61 38 36 45 39 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 21 18 11 11 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
141 61 38 36 45 39 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 12 6 6 6 6 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1
142 40 20 22 20 25 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 28 20 19 9 10 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0
143 40 20 22 20 25 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 40 27 37 16 25 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
144 40 20 22 20 25 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 42 27 25 26 22 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
145 40 20 22 20 25 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 44 29 24 33 38 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
146 40 20 22 20 25 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 37 20 17 32 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
147 46 35 23 34 32 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 19 7 10 8 7 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
148 46 35 23 34 32 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 51 20 35 20 27 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1
149 46 35 23 34 32 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 28 16 22 20 22 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
150 46 35 23 34 32 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 32 26 20 17 21 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1
151 46 35 23 34 32 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 33 26 17 24 17 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
152 36 25 20 21 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 53 52 43 37 25 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
153 36 25 20 21 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 43 29 26 26 35 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
154 36 25 20 21 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 33 20 12 23 13 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
155 36 25 20 21 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 15 7 7 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
156 36 25 20 21 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 45 20 22 18 18 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
157 30 18 16 17 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 49 29 29 29 35 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
158 30 18 16 17 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 28 18 15 20 23 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
159 30 18 16 17 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 53 27 31 20 33 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
160 30 18 16 17 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 18 8 11 8 9 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1
161 30 18 16 17 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 41 24 23 25 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
162 29 16 16 15 19 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 46 28 33 26 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
163 29 16 16 15 19 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 33 15 12 24 24 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
164 29 16 16 15 19 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 21 10 10 10 10 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
165 29 16 16 15 19 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 27 16 15 11 20 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1
166 29 16 16 15 19 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 38 27 21 24 21 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
167 25 12 12 12 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 23 21 39 46 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
168 25 12 12 12 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 11 23 15 13 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
169 25 12 12 12 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 9 12 11 12 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
170 25 12 12 12 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 33 46 16 35 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
171 25 12 12 12 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 18 21 18 25 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1
172 17 8 9 8 8 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 56 31 29 57 49 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
173 17 8 9 8 8 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 43 22 28 20 23 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
174 17 8 9 8 8 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 23 14 12 13 12 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
175 17 8 9 8 8 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 36 27 24 12 24 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
176 17 8 9 8 8 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 21 10 12 10 11 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
177 33 15 14 23 31 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 44 27 23 25 24 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
178 33 15 14 23 31 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 43 39 36 29 26 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
179 33 15 14 23 31 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 22 15 16 11 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
180 33 15 14 23 31 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 33 24 28 13 14 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
181 33 15 14 23 31 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 29 22 13 35 19 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
182 28 18 20 12 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 34 11 18 14 11 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0
183 28 18 20 12 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 14 9 7 8 7 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
184 28 18 20 12 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 12 7 7 6 6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
185 28 18 20 12 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 15 8 7 6 6 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
186 28 18 20 12 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 29 14 16 14 18 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1
187 38 21 21 20 25 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 29 10 7 7 8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
188 38 21 21 20 25 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 49 28 25 44 27 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
189 38 21 21 20 25 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 18 10 10 9 9 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1
190 38 21 21 20 25 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 41 24 23 25 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
191 38 21 21 20 25 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 47 37 32 15 32 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1
192 51 27 25 37 43 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 26 13 13 13 15 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
193 51 27 25 37 43 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 28 22 16 31 20 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
194 51 27 25 37 43 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 19 9 10 8 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
195 51 27 25 37 43 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 63 39 37 43 52 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0
196 51 27 25 37 43 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 37 18 17 21 15 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
197 28 17 14 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 38 19 17 22 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
198 28 17 14 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 54 40 27 49 25 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0
199 28 17 14 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 47 29 27 19 37 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0
200 28 17 14 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 12 7 6 6 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1
201 28 17 14 15 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 48 41 73 31 37 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0
202 46 28 27 31 37 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 22 11 9 12 10 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1
203 46 28 27 31 37 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 48 24 24 23 31 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
204 46 28 27 31 37 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 48 37 25 39 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
205 46 28 27 31 37 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 62 39 35 24 50 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1
206 46 28 27 31 37 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 49 25 24 25 29 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
207 14 11 10 8 6 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 22 11 10 19 21 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
208 14 11 10 8 6 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 28 16 14 15 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
209 14 11 10 8 6 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 18 15 14 11 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
210 14 11 10 8 6 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 25 18 17 9 9 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
211 14 11 10 8 6 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 46 5 5 11 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
212 39 23 23 29 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 33 18 16 21 18 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
213 39 23 23 29 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 34 22 19 25 29 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
214 39 23 23 29 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 17 7 6 14 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
215 39 23 23 29 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 38 19 30 26 30 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
216 39 23 23 29 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 32 18 18 17 17 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
217 66 57 37 27 31 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 37 18 28 25 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
218 66 57 37 27 31 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 53 29 29 39 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
219 66 57 37 27 31 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 35 27 14 24 14 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
220 66 57 37 27 31 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 27 13 25 12 23 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1
221 66 57 37 27 31 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 21 11 12 16 14 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
222 24 13 15 13 17 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 20 8 8 8 11 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
223 24 13 15 13 17 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 40 20 33 15 17 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
224 24 13 15 13 17 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 35 17 30 18 27 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
225 24 13 15 13 17 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 12 5 5 5 6 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
226 24 13 15 13 17 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 19 10 9 14 16 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
227 53 30 37 28 31 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 29 20 29 14 15 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
228 53 30 37 28 31 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 16 9 7 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
229 53 30 37 28 31 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 50 27 25 35 35 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
230 53 30 37 28 31 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 23 12 12 12 14 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
231 53 30 37 28 31 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 22 11 11 14 14 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
232 28 21 16 21 17 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 24 12 20 11 18 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
233 28 21 16 21 17 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 45 29 32 41 37 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
234 28 21 16 21 17 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 11 6 6 5 6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1
235 28 21 16 21 17 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 22 9 9 8 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
236 28 21 16 21 17 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 32 25 14 41 22 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
237 42 26 15 30 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 35 17 16 20 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
238 42 26 15 30 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 22 12 20 12 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
239 42 26 15 30 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 11 6 5 6 5 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
240 42 26 15 30 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 63 37 35 41 33 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
241 42 26 15 30 16 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 16 10 8 10 8 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
242 43 26 25 31 27 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 53 29 27 54 46 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
243 43 26 25 31 27 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 51 39 25 43 39 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
244 43 26 25 31 27 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 16 12 11 9 8 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
245 43 26 25 31 27 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 28 26 14 20 11 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
246 43 26 25 31 27 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 54 32 31 33 32 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
247 20 9 9 12 12 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 57 50 37 32 39 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0
248 20 9 9 12 12 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 44 25 24 28 23 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
249 20 9 9 12 12 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 14 7 8 7 9 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
250 20 9 9 12 12 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 28 17 14 11 12 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
251 20 9 9 12 12 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 23 8 6 6 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
252 47 36 33 14 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 29 15 14 24 28 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
253 47 36 33 14 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 19 15 13 11 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
254 47 36 33 14 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 40 24 21 23 22 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
255 47 36 33 14 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 67 25 24 25 40 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
256 47 36 33 14 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 34 30 28 22 20 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1
257 38 25 33 16 18 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 52 27 18 11 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
258 38 25 33 16 18 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 12 6 6 6 6 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1
259 38 25 33 16 18 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 47 30 23 17 20 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
260 38 25 33 16 18 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 57 23 30 15 25 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
261 38 25 33 16 18 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 28 13 10 20 20 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
262 44 28 21 16 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 46 35 24 37 28 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
263 44 28 21 16 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 66 31 31 11 21 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1
264 44 28 21 16 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 34 29 20 27 18 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
265 44 28 21 16 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 34 13 22 13 18 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1
266 44 28 21 16 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 35 32 27 23 17 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
267 11 6 6 5 6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 48 31 29 30 25 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
268 11 6 6 5 6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 42 15 16 20 11 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
269 11 6 6 5 6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 46 26 24 32 27 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
270 11 6 6 5 6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 38 34 27 26 14 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
271 11 6 6 5 6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 59 47 31 32 39 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
272 26 9 7 7 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 21 15 10 13 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
273 26 9 7 7 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 43 39 39 52 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
274 26 9 7 7 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 8 8 6 6 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
275 26 9 7 7 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 53 36 26 44 37 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
276 26 9 7 7 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 5 5 6 7 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
277 14 7 7 8 8 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 27 17 18 23 21 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
278 14 7 7 8 8 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 36 22 18 20 18 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
279 14 7 7 8 8 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 46 23 21 27 19 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
280 14 7 7 8 8 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 21 10 16 11 15 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
281 14 7 7 8 8 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 12 5 7 8 5 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
282 19 9 13 10 16 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 46 27 28 27 33 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
283 19 9 13 10 16 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 20 10 9 10 10 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
284 19 9 13 10 16 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 35 21 13 24 13 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
285 19 9 13 10 16 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 20 10 9 10 10 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
286 19 9 13 10 16 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 35 36 32 23 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
287 31 20 27 13 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 27 15 15 19 19 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
288 31 20 27 13 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 48 25 23 29 22 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
289 31 20 27 13 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 52 37 29 43 25 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
290 31 20 27 13 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 26 22 19 16 12 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
291 31 20 27 13 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 53 28 26 37 37 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0
292 35 30 18 27 15 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 19 12 12 7 7 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
293 35 30 18 27 15 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 28 13 23 14 21 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
294 35 30 18 27 15 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 36 12 8 8 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
295 35 30 18 27 15 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 21 12 11 9 15 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1
296 35 30 18 27 15 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 47 27 25 42 49 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
297 12 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 18 10 10 8 12 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0
298 12 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 20 10 14 8 9 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
299 12 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 41 24 33 30 33 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
300 12 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 43 20 26 47 29 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
301 12 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 20 11 9 15 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
302 19 12 9 12 11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 49 32 18 30 20 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0
303 19 12 9 12 11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 28 18 24 12 17 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
304 19 12 9 12 11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 63 37 43 37 52 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0
305 19 12 9 12 11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 15 8 7 10 11 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
306 19 12 9 12 11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 51 29 27 35 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
307 51 29 27 46 54 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 48 33 37 20 16 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
308 51 29 27 46 54 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 63 55 41 35 43 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1
309 51 29 27 46 54 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 28 17 11 17 12 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
310 51 29 27 46 54 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 38 26 14 16 24 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
311 51 29 27 46 54 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 12 6 7 6 7 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1
312 19 10 9 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 15 14 16 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
313 19 10 9 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 17 10 10 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
314 19 10 9 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 28 41 19 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
315 19 10 9 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 23 29 21 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
316 19 10 9 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 27 31 27 37 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0
317 45 33 35 23 20 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 18 8 9 10 11 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1
318 45 33 35 23 20 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 33 21 17 20 16 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
319 45 33 35 23 20 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 26 10 14 23 14 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
320 45 33 35 23 20 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 51 24 46 26 41 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
321 45 33 35 23 20 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 15 7 8 10 11 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
322 15 8 8 7 7 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 15 8 8 6 6 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
323 15 8 8 7 7 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 14 8 7 9 8 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
324 15 8 8 7 7 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 35 17 15 33 37 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
325 15 8 8 7 7 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 26 13 14 10 15 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
326 15 8 8 7 7 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 19 7 10 8 7 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
327 17 7 7 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 13 14 13 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
328 17 7 7 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 33 37 24 21 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
329 17 7 7 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 17 12 13 17 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
330 17 7 7 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 8 7 7 8 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
331 17 7 7 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 53 54 27 29 46 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
332 30 11 12 14 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 40 16 12 12 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
333 30 11 12 14 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 34 18 19 12 24 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
334 30 11 12 14 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 22 11 17 10 16 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
335 30 11 12 14 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 40 19 19 8 13 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1
336 30 11 12 14 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 57 49 32 23 27 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
337 42 16 15 16 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 28 9 8 26 30 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
338 42 16 15 16 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 26 14 15 14 14 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
339 42 16 15 16 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 38 38 19 29 14 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
340 42 16 15 16 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 30 23 17 23 19 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
341 42 16 15 16 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 30 19 17 18 17 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
342 40 28 24 27 23 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 29 17 16 19 22 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
343 40 28 24 27 23 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 59 44 29 54 27 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0
344 40 28 24 27 23 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 34 14 14 12 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
345 40 28 24 27 23 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 16 8 10 9 10 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
346 40 28 24 27 23 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 20 13 11 14 10 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
347 12 6 6 6 6 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 12 6 6 7 6 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
348 12 6 6 6 6 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 34 21 21 21 21 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
349 12 6 6 6 6 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 12 7 6 6 7 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
350 12 6 6 6 6 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 26 12 21 13 19 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
351 12 6 6 6 6 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 14 7 7 7 7 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
352 22 13 9 14 9 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 50 40 27 27 33 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
353 22 13 9 14 9 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 24 23 21 14 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
354 22 13 9 14 9 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 30 17 13 9 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
355 22 13 9 14 9 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 50 33 28 38 45 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
356 22 13 9 14 9 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 44 29 26 27 23 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
357 28 11 11 11 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 23 13 10 7 9 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
358 28 11 11 11 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 19 10 9 15 13 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
359 28 11 11 11 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 34 11 18 14 11 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
360 28 11 11 11 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 46 33 43 24 32 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
361 28 11 11 11 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 37 23 16 20 18 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
362 37 15 18 15 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 23 11 17 13 22 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
363 37 15 18 15 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 30 28 15 16 24 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
364 37 15 18 15 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 23 14 9 14 10 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
365 37 15 18 15 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 49 24 27 24 31 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1
366 37 15 18 15 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 34 16 20 35 22 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
367 49 29 28 30 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 68 44 33 24 29 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
368 49 29 28 30 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 67 32 30 24 35 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0
369 49 29 28 30 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 45 23 22 23 27 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
370 49 29 28 30 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 44 22 22 21 28 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
371 49 29 28 30 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 16 6 6 12 13 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
372 37 21 19 32 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 27 27 26 33 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
373 37 21 19 32 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 22 21 22 25 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
374 37 21 19 32 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 14 12 24 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
375 37 21 19 32 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 14 16 22 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
376 37 21 19 32 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 8 6 7 6 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
377 37 21 29 27 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 13 6 6 6 7 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
378 37 21 29 27 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 62 37 36 39 37 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
379 37 21 29 27 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 26 10 14 23 14 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
380 37 21 29 27 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 23 11 9 16 16 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
381 37 21 29 27 29 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 18 11 10 11 10 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
382 17 8 8 9 7 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 44 22 18 39 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
383 17 8 8 9 7 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 48 33 37 20 16 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
384 17 8 8 9 7 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 44 27 17 41 25 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
385 17 8 8 9 7 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 26 8 13 9 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
386 17 8 8 9 7 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 19 11 14 8 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
387 46 28 31 12 13 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 19 11 11 11 11 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
388 46 28 31 12 13 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 12 6 6 5 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
389 46 28 31 12 13 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 18 10 9 11 10 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
390 46 28 31 12 13 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 25 13 12 20 23 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0
391 46 28 31 12 13 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 12 7 7 6 6 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
392 19 9 11 14 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 11 5 6 7 6 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
393 19 9 11 14 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 33 14 12 32 36 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
394 19 9 11 14 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 12 7 6 6 5 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
395 19 9 11 14 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 51 28 26 51 44 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
396 19 9 11 14 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 42 33 17 30 17 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
397 30 15 14 17 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 34 24 17 27 24 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
398 30 15 14 17 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 46 30 26 28 26 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0
399 30 15 14 17 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 28 14 18 13 15 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
400 30 15 14 17 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 28 12 13 12 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
401 30 15 14 17 14 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 14 23 16 29 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
402 38 25 21 23 21 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 25 17 14 9 14 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1
403 38 25 21 23 21 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 46 29 29 29 29 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
404 38 25 21 23 21 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 21 10 16 11 15 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
405 38 25 21 23 21 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 32 17 17 17 21 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1
406 38 25 21 23 21 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 15 7 7 10 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
407 35 22 13 21 14 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 33 33 30 21 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
408 35 22 13 21 14 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 19 12 12 7 7 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
409 35 22 13 21 14 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 38 19 16 22 17 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1
410 35 22 13 21 14 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 46 31 28 28 37 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
411 35 22 13 21 14 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 40 32 39 11 15 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0
412 42 23 23 30 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 32 16 20 15 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
413 42 23 23 30 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 39 19 19 19 19 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
414 42 23 23 30 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 27 18 16 17 15 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
415 42 23 23 30 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 32 23 17 24 19 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
416 42 23 23 30 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 16 9 8 10 8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
417 23 15 11 12 15 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 58 37 25 19 19 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
418 23 15 11 12 15 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 64 5 5 14 23 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
419 23 15 11 12 15 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 28 18 20 12 10 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
420 23 15 11 12 15 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 53 52 43 37 25 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
421 23 15 11 12 15 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 63 55 41 35 43 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0
422 50 38 36 15 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 64 33 21 12 21 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
423 50 38 36 15 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 47 18 32 18 25 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1
424 50 38 36 15 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 20 17 10 13 8 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
425 50 38 36 15 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 35 17 14 20 16 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1
426 50 38 36 15 16 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 43 38 26 35 23 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
427 49 27 33 25 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 49 35 29 33 28 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
428 49 27 33 25 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 12 6 6 6 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
429 49 27 33 25 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 63 37 43 37 52 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0
430 49 27 33 25 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 27 19 27 13 14 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
431 49 27 33 25 28 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 12 6 6 6 6 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1
432 14 8 12 7 8 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 43 21 20 18 17 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0
433 14 8 12 7 8 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 30 32 28 18 11 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
434 14 8 12 7 8 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 12 6 7 5 5 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
435 14 8 12 7 8 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 41 21 22 19 19 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
436 14 8 12 7 8 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 16 10 15 9 10 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1
437 32 25 18 36 23 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 22 10 16 12 20 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
438 32 25 18 36 23 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 33 18 17 31 27 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
439 32 25 18 36 23 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 45 22 21 19 17 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0
440 32 25 18 36 23 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 37 19 18 22 17 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
441 32 25 18 36 23 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 35 28 19 14 16 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+64
View File
@@ -0,0 +1,64 @@
import json
import random
import pandas as pd
#load moves from json file
#eclude moves with power equal to null,
# do not consider the effect,effects or changes fields
available_moves = dict()
keys_to_skip = ['effect','effects','changes']
with open('moves.json', 'r') as file:
for line in file:
m = json.loads(line)
if m['power'] == None or m['accuracy'] == None:
continue
else:
available_moves[m['name']] = {}
m_keys = list(m.keys())
for k in m_keys:
if k in keys_to_skip:
continue
else:
available_moves[m['name']][k] = m[k]
continue
available_moves_df = pd.DataFrame.from_dict(available_moves,orient='index')
#loading pokemons from json file
#assume levell = 1 for all
pokemons_dict = dict()
with open('pokemons.json', 'r') as file:
for line in file:
p = json.loads(line)
p['level'] = 1
pokemons_dict[p['name']] = p
#pokemons_dict[p['name']]['level'] = 1
current_pokemon_types = p['types'] + ['normal']
compatible_moves = []
for m in available_moves.keys():
if available_moves[m]['type'] in current_pokemon_types:
compatible_moves.append(m)
#select two random moves
selected_moves = [random.choice(compatible_moves) for _ in range(2)]
pokemons_dict[p['name']]['moves'] = selected_moves
pokemons_df = pd.DataFrame.from_dict(pokemons_dict,orient='index')
available_pokemon_names = list(pokemons_dict.keys())
available_starters = ['bulbasaur', 'charmander', 'squirtle']
#type effectiveness
type_effectiveness = []
available_types = dict()
with open('type_effectiveness.json', 'r') as file:
for line in file:
loaded_line = json.loads(line)
type_effectiveness.append(loaded_line)
available_types[loaded_line['attack']] = loaded_line['attack']
type_effectiveness_df = pd.DataFrame.from_dict(type_effectiveness)
#NOTE: from a practical point of view, since type_effectiveness is accessed many times
#in the main code, using pandas DataFrame is not efficient. I decided to keep using dictionaries
#for the type effectiveness. The justification arises especially if we consider
#how long data generation will take.
+331
View File
@@ -0,0 +1,331 @@
from core import Trainer
import random
import copy
import game_data as gd
import pickle
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
np.seterr(divide='raise', invalid='raise')
#if the results folder does not exist, create it
if not os.path.exists('results'):
os.makedirs('results')
if not os.path.exists('plots'):
os.makedirs('plots')
def RandomBattle(trainer,cpu_trainer):
#print(f"You are in battle against {cpu_trainer.name}!")
battle_active = True
active_pokemon = trainer.get_active_pokemon()
cpu_active_pokemon = cpu_trainer.get_active_pokemon()
#print(f"Your active Pokemon is {active_pokemon.name} and the CPU's active Pokemon is {cpu_active_pokemon.name}.")
did_player_won = False
battle_turns_num = 0
player_hp_evolution = []
player_selected_moves = []
player_damage_done = []
cpu_hp_evolution = []
cpu_selected_moves = []
cpu_damage_done = []
while battle_active:
player_move_name = random.choice(active_pokemon.get_moves())
player_selected_moves.append(player_move_name)
#print(f"{active_pokemon.name} selected {player_move_name} to use against {cpu_active_pokemon.name}:\n")
try:
player_damage_done_value = active_pokemon.useMove(player_move_name,cpu_active_pokemon)
player_damage_done.append(player_damage_done_value)
player_hp_evolution.append(active_pokemon.get_current_hp())
cpu_hp_evolution.append(cpu_active_pokemon.get_current_hp())
battle_turns_num += 1
#check if the opponent has been defeated
if not cpu_trainer.active_pokemon_can_battle():
#print(f"{cpu_trainer.get_active_pokemon().name} has been defeated! You win!")
did_player_won = True
battle_active = False
break
#if the opponent has not been defeated, then its the CPU turn to play
cpu_active_pokemon_selected_move_name = random.choice(cpu_active_pokemon.get_moves())
#print(f"CPU's {cpu_active_pokemon.name} is using {cpu_active_pokemon_selected_move_name} against your {active_pokemon.name}!")
cpu_selected_moves.append(cpu_active_pokemon_selected_move_name)
cpu_damage_done_value = cpu_active_pokemon.useMove(cpu_active_pokemon_selected_move_name, active_pokemon)
cpu_damage_done.append(cpu_damage_done_value)
player_hp_evolution.append(active_pokemon.get_current_hp())
cpu_hp_evolution.append(cpu_active_pokemon.get_current_hp())
battle_turns_num += 1
#update the player pokemon list
trainer.update_pokemon_list(active_pokemon)
#check if the player has been defeated
if not trainer.active_pokemon_can_battle():
#print(f"Your {active_pokemon.name} has been defeated!")
if not trainer.can_battle():
#print("You have no more Pokemons that can battle! You lose!")
did_player_won=False
battle_active = False
break
else:
#print("You have other Pokemons that can battle!")
continue
except ValueError as e:
print(e)
#manage those cases for which the player wins in the first turn and the cpu does not play any turn
if len(player_damage_done) == 0:
player_damage_done = [0]
if len(cpu_damage_done) == 0:
cpu_damage_done = [0]
player_avg_damage_done = np.mean(player_damage_done) #average damage done per turn
cpu_avg_damage_done = np.mean(cpu_damage_done) #average damage done per turn
player_residual_hp_percent = trainer.get_active_pokemon().get_current_hp_percent()
player_history = {'player_hp_evolution':player_hp_evolution,
'player_selected_moves':player_selected_moves,
'player_damage_done':player_damage_done,
'player_avg_damage_done':player_avg_damage_done
}
cpu_history = {'cpu_hp_evolution':cpu_hp_evolution,
'cpu_selected_moves':cpu_selected_moves,
'cpu_damage_done':cpu_damage_done,
'cpu_avg_damage_done':cpu_avg_damage_done
}
turn_history = {'player_history':player_history,
'cpu_history':cpu_history
}
battle_results = {
'player_pokemon':trainer.get_active_pokemon(),
'encountered_pokemon':cpu_trainer.get_active_pokemon(),
'result':did_player_won,
'battle_turns_num':battle_turns_num,
'player_residual_hp_percent':player_residual_hp_percent,
'turn_history':turn_history
}
return battle_results
def Main(starter_choice,Nbattles):
try:
starter_name = starter_choice
trainer = Trainer(name='edo', starter_name=starter_name)
#print(f"{trainer.name} has chosen {trainer.starter} as their starter Pokemon!")
#print("Adding potions and pokeballs to your inventory...")
trainer.items = {"potions": 10, "pokeball": 10}
#print("Your character is ready!")
#print(f"Welcome {trainer.name}! Your adventure begins now!")
except ValueError as e:
print(e)
print("Something went wrong!")
game_active_flag = True
while game_active_flag:
all_battle_results = []
for i in range(0,Nbattles):
#print("You entered the Random Battle mode")
#print("Battle #",i)
cpu_trainer = Trainer(name='CPU',starter_name=gd.pokemons_df.index[random.randint(0,len(gd.pokemons_df.index)-1)],is_CPU=True)
battle_results = RandomBattle(trainer,cpu_trainer)
all_battle_results.append(battle_results)
heal_flag = 'yes'
if heal_flag == 'yes':
for pokemon in trainer.pokemon_list:
pokemon.curr_hp = pokemon.baseStats['hp']
#print("All your Pokemon have been healed!")
game_active_flag = False
#save all battle results
return all_battle_results
def make_plots(Ngames,Nbattles):
files_to_analyze = os.listdir('results/')
avg_damage_per_level = dict()
for file_name in files_to_analyze:
pickle_in = open(f"results/{file_name}",'rb')
all_battle_results = pickle.load(pickle_in)
pickle_in.close()
for battle_result in all_battle_results:
player_pokemon = battle_result['player_pokemon']
player_pokemon_name = player_pokemon.name
player_pokemon_level = player_pokemon.level
player_avg_damage_done = battle_result['turn_history']['player_history']['player_avg_damage_done']
if player_pokemon_name not in avg_damage_per_level:
avg_damage_per_level[player_pokemon_name] = {}
if player_pokemon_level not in avg_damage_per_level[player_pokemon_name]:
avg_damage_per_level[player_pokemon_name][player_pokemon_level] = []
avg_damage_per_level[player_pokemon_name][player_pokemon_level].append(player_avg_damage_done)
for pokemon_name in avg_damage_per_level:
for level in avg_damage_per_level[pokemon_name]:
avg_damage_per_level[pokemon_name][level] = np.mean(avg_damage_per_level[pokemon_name][level])
for pokemon_name in avg_damage_per_level:
levels = list(avg_damage_per_level[pokemon_name].keys())
avg_damages = list(avg_damage_per_level[pokemon_name].values())
plt.figure(figsize=(12, 6))
plt.bar(levels, avg_damages)
plt.xlabel('Pokemon Level')
plt.ylabel('Average Damage Done')
plt.title(f'Average Damage Done per battle turn for {pokemon_name}')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig(f'plots/average_damage_per_turn_{pokemon_name}.pdf')
#pie chart
available_pokemon_type_distribution = {}
for pokemon_name in gd.pokemons_dict:
pokemon_types = gd.pokemons_dict[pokemon_name]['types']
for pokemon_type in pokemon_types:
if pokemon_type not in available_pokemon_type_distribution:
available_pokemon_type_distribution[pokemon_type] = 0
available_pokemon_type_distribution[pokemon_type] += 1
encountered_pokemon_types = {}
for file_name in files_to_analyze:
pickle_in = open(f"results/{file_name}",'rb')
all_battle_results = pickle.load(pickle_in)
pickle_in.close()
for battle_result in all_battle_results:
encountered_pokemon = battle_result['encountered_pokemon']
encountered_pokemon_types_list = encountered_pokemon.types
for pokemon_type in encountered_pokemon_types_list:
if pokemon_type not in encountered_pokemon_types:
encountered_pokemon_types[pokemon_type] = 0
encountered_pokemon_types[pokemon_type] += 1
quantities = list(encountered_pokemon_types.values())
labels = list(encountered_pokemon_types.keys())
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.pie(quantities, labels=labels, autopct='%1.1f%%', startangle=140)
plt.title('Distribution of Encountered Pokemon Types')
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle
plt.subplot(1, 2, 2)
quantities_base = list(available_pokemon_type_distribution.values())
labels_base = list(available_pokemon_type_distribution.keys())
plt.pie(quantities_base, labels=labels_base, autopct='%1.1f%%', startangle=140)
plt.title('Distribution of Available Pokemon Types')
plt.axis('equal')
plt.savefig('plots/pokemon_types_distribution.pdf')
def build_dataset():
all_pokemon_types = list(gd.available_types)
player_ActStats_labels = ["player_hp", "player_attack", "player_defense", "player_speed", "player_special"]
player_type_label = ['player_type_' + t for t in all_pokemon_types]
opponent_ActStats_labels = ["opponent_hp", "opponent_attack", "opponent_defense", "opponent_speed", "opponent_special"]
opponent_type_label = ['opponent_type_' + t for t in all_pokemon_types]
#define a padas dataframe to store the dataset
dataset_column_labels = player_ActStats_labels + player_type_label + opponent_ActStats_labels + opponent_type_label + ['battle_result']
dataset = pd.DataFrame(columns=dataset_column_labels)
files_to_analyze = os.listdir('results/')
dataset_row = []
for file_name in files_to_analyze:
pickle_in = open(f"results/{file_name}",'rb')
all_battle_results = pickle.load(pickle_in)
pickle_in.close()
for battle_result in all_battle_results:
player_pokemon_ActStats = list(battle_result['player_pokemon'].ActStats.values())
player_pokemon_type = battle_result['player_pokemon'].types
player_pokemon_type_encoded = [1 if t in player_pokemon_type else 0 for t in all_pokemon_types]
opponent_pokemon = list(battle_result['encountered_pokemon'].ActStats.values())
opponent_pokemon_type = battle_result['encountered_pokemon'].types
opponent_pokemon_type_encoded = [1 if t in opponent_pokemon_type else 0 for t in all_pokemon_types]
battle_result_integer = 1 if battle_result['result'] else 0
dataset_row = player_pokemon_ActStats + player_pokemon_type_encoded + opponent_pokemon + opponent_pokemon_type_encoded + [battle_result_integer]
#append the row to the dataset
dataset.loc[len(dataset)] = dataset_row
#save the dataset to a csv file
dataset.to_csv('dataset.csv', index=False)
return dataset_column_labels
def train_model(dataset_column_labels):
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
dataset_labels = dataset_column_labels[:-1]
# Load the dataset
dataset = pd.read_csv('dataset.csv')
# Split the dataset into features and target variable
X = dataset.drop('battle_result', axis=1)
y = dataset['battle_result']
# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create a Random Forest Classifier
model = RandomForestClassifier()
param_dist = {
'n_estimators': randint(50, 500),
'max_depth': randint(1, 20),
}
rand_search = RandomizedSearchCV(model,
param_distributions=param_dist,
n_iter=5, cv=5).fit(X_train, y_train)
# Train the model
best_model = rand_search.best_estimator_
print(f"Best parameters found: {rand_search.best_params_}")
# Make predictions on the test set
y_pred = best_model.predict(X_test)
# Evaluate the model
accuracy = accuracy_score(y_test, y_pred)
print(f"Model Accuracy: {accuracy:.2f}")
print("Classification Report:")
print(classification_report(y_test, y_pred))
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))
from sklearn.tree import export_graphviz
import graphviz
# Visualize the first three estimators
for i in range(3):
tree = best_model.estimators_[i]
dot_data = export_graphviz(tree,
feature_names=dataset_labels,
filled = True,
max_depth = 2,
impurity = False,
proportion = True)
graph = graphviz.Source(dot_data)
graph.render(outfile=f"plots/tree_{i}.pdf", format='pdf')
if __name__ == "__main__":
Ngames = 10
Nbattles = 5
print("Generating data")
for i in range(Ngames):
starter_choice = gd.pokemons_df.index[random.randint(0,len(gd.pokemons_df.index)-1)]
#print(f"Generating data for {starter_choice}, game {i}...")
results = Main(starter_choice = starter_choice, Nbattles=Nbattles)
pickle_out = open(f"results/{starter_choice}_game_{i}_{Nbattles}_battles.pickle",'wb')
pickle.dump(results,pickle_out)
pickle_out.close()
print("Generating dataset")
dataset_column_labels = build_dataset()
print("Training model")
train_model(dataset_column_labels)
print("Ended")
+165
View File
@@ -0,0 +1,165 @@
{"name": "absorb", "type": "grass", "category": "special", "power": 20, "accuracy": 1.0, "pp": 20, "effects": ["Absorb deals damage and the user will recover 50% of the HP drained."]}
{"name": "acid", "type": "poison", "category": "physical", "power": 40, "accuracy": 1.0, "pp": 30, "effect": {"chance": 0.1, "stat": "defense", "stages": -1}}
{"name": "acid armor", "type": "poison", "category": "status", "power": null, "accuracy": null, "pp": 40, "effect": {"stat": "defense", "stages": 2}}
{"name": "agility", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 30, "effect": {"stat": "speed", "stages": 2}}
{"name": "amnesia", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 20, "effect": {"stat": "special", "stages": 2}}
{"name": "aurora beam", "type": "ice", "category": "special", "power": 65, "accuracy": 1.0, "pp": 20, "effect": {"chance": 0.1, "stat": "attack", "stages": -1}}
{"name": "barrage", "type": "normal", "category": "physical", "power": 15, "accuracy": 0.85, "pp": 20, "changes": ["In Generations 1-3, Barrage ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "barrier", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 30, "effect": {"stat": "defense", "stages": 2}}
{"name": "bide", "type": "normal", "category": "physical", "power": null, "accuracy": null, "pp": 10, "effects": ["The user of Bide stores energy for 2 turns. At the end of the second turn the Pokémon unleashes energy, dealing twice the HP damage it received.", "Bide deals fixed, typeless damage, so will hit Ghost-type Pokémon. It also ignores changes to the Accuracy and Evasion stats and can hit Pokémon in the invulnerable stage of Bounce, Dig, Dive, Fly, Shadow Force or Sky Drop."], "changes": ["In Generations 1-3, Bide is not an increased priority move. It also stores energy for 2-3 turns."]}
{"name": "bind", "type": "normal", "category": "physical", "power": 15, "accuracy": 0.85, "pp": 20, "effects": ["Bind inflicts damage on the first turn then traps the opponent, causing them to lose 1⁄16 of their maximum HP after each turn, for 4-5 turns."], "changes": ["In Generations 1-4, Bind has 75% accuracy. Its after-effects last for 2-5 turns instead of 4-5.", "In Generation 1, Bind simply inflicts its base power damage for 2-5 turns. While in effect, the target is unable to attack."]}
{"name": "bite", "type": "normal", "category": "physical", "power": 60, "accuracy": 1.0, "pp": 25, "effect": {"chance": 0.3, "statusCondition": "flinch"}}
{"name": "blizzard", "type": "ice", "category": "special", "power": 120, "accuracy": 0.9, "pp": 5, "effect": {"chance": 0.1, "statusCondition": "freeze"}}
{"name": "body slam", "type": "normal", "category": "physical", "power": 85, "accuracy": 1.0, "pp": 15, "effect": {"chance": 0.3, "statusCondition": "paralysis"}}
{"name": "bone club", "type": "ground", "category": "physical", "power": 65, "accuracy": 0.85, "pp": 20, "effect": {"chance": 0.1, "statusCondition": "flinch"}}
{"name": "bonemerang", "type": "ground", "category": "physical", "power": 50, "accuracy": 0.9, "pp": 10, "effects": ["Bonemerang deals damage and will strike twice (with 50 base power each time).\nEach strike of Bonemerang is treated like a separate attack:"], "changes": ["In Generations 1-3, Bonemerang ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "bubble", "type": "water", "category": "special", "power": 20, "accuracy": 1.0, "pp": 30, "effect": {"chance": 0.1, "stat": "speed", "stages": -1}}
{"name": "bubble beam", "type": "water", "category": "special", "power": 65, "accuracy": 1.0, "pp": 20, "effect": {"chance": 0.1, "stat": "speed", "stages": -1}}
{"name": "clamp", "type": "water", "category": "physical", "power": 35, "accuracy": 0.85, "pp": 10, "effects": ["Clamp inflicts damage on the first turn then traps the opponent, causing them to lose 1⁄16 of their maximum HP after each turn, for 4-5 turns. If the user holds a Grip Claw then it is always 5 turns."], "changes": ["In Generations 1-4, Clamp has 75% accuracy. Its after-effects last for 2-5 turns instead of 4-5.", "In Generation 1, Clamp simply inflicts its base power damage for 2-5 turns. While in effect, the target is unable to attack."]}
{"name": "comet punch", "type": "normal", "category": "physical", "power": 18, "accuracy": 0.85, "pp": 15, "changes": ["In Generations 1-3, Comet Punch ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "confuse ray", "type": "ghost", "category": "status", "power": null, "accuracy": 1.0, "pp": 10, "effect": {"statusCondition": "confused"}}
{"name": "confusion", "type": "psychic", "category": "special", "power": 50, "accuracy": 1.0, "pp": 25, "effect": {"chance": 0.1, "statusCondition": "confused"}}
{"name": "constrict", "type": "normal", "category": "physical", "power": 10, "accuracy": 1.0, "pp": 35, "effect": {"chance": 0.1, "stat": "speed", "stages": -1}}
{"name": "conversion", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 30, "changes": ["In Generation 1, Conversion changes the user's type to the target Pokémon's type."]}
{"name": "counter", "type": "fighting", "category": "physical", "power": null, "accuracy": 1.0, "pp": 20, "priority": -1, "effects": ["When hit by a Physical Attack, user strikes back with 2x power."]}
{"name": "crabhammer", "type": "water", "category": "physical", "power": 90, "accuracy": 0.85, "pp": 10, "highCriticalHitRatio": true}
{"name": "cut", "type": "normal", "category": "physical", "power": 50, "accuracy": 0.95, "pp": 30}
{"name": "defense curl", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 40, "effect": {"stat": "defense", "stages": 1}}
{"name": "dig", "type": "ground", "category": "physical", "power": 60, "accuracy": 1.0, "pp": 10, "effects": ["The user of Dig will burrow its way underground on the first turn, disappearing from view and becoming invulnerable to most attacks. On the second turn, Dig deals damage."]}
{"name": "disable", "type": "normal", "category": "status", "power": null, "accuracy": 0.55, "pp": 20, "effects": ["Disable causes the previous move the target used to be disabled for 1-8 turns, which prevents the move's use."]}
{"name": "dizzy punch", "type": "normal", "category": "physical", "power": 70, "accuracy": 1.0, "pp": 10}
{"name": "double kick", "type": "fighting", "category": "physical", "power": 30, "accuracy": 1.0, "pp": 30, "effects": ["Double Kick deals damage and will strike twice (with 30 base power each time).\nEach strike of Double Kick is treated like a separate attack:"], "changes": ["In Generations 1-3, Double Kick ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "double slap", "type": "normal", "category": "physical", "power": 15, "accuracy": 0.85, "pp": 10, "effects": [], "changes": ["In Generations 1-3, Double Slap ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest.", "In Generations 1-5, this move's name was formatted as DoubleSlap."]}
{"name": "double team", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 15, "effect": {"stat": "evasiveness", "stages": 1}}
{"name": "double-edge", "type": "normal", "category": "physical", "power": 100, "accuracy": 1.0, "pp": 15, "effects": ["Double-Edge deals damage, but the user receives 1⁄3 of the damage it inflicted in recoil. In other words, if the attack does 90 HP damage to the opponent, the user will lose 30 HP."], "changes": ["In Generations 1-2, the recoil is 1⁄4 of the damage inflicted."]}
{"name": "dragon rage", "type": "dragon", "category": "special", "power": null, "accuracy": 1.0, "pp": 10, "effects": ["Dragon Rage always deals 40 HP damage to the target, regardless of typing. It has no additional effect."]}
{"name": "dream eater", "type": "psychic", "category": "special", "power": 100, "accuracy": 1.0, "pp": 15, "effects": ["Dream Eater deals damage only on sleeping foes and the user will recover 50% of the HP drained."]}
{"name": "drill peck", "type": "flying", "category": "physical", "power": 80, "accuracy": 1.0, "pp": 20}
{"name": "earthquake", "type": "ground", "category": "physical", "power": 100, "accuracy": 1.0, "pp": 10}
{"name": "egg bomb", "type": "normal", "category": "physical", "power": 100, "accuracy": 0.75, "pp": 10}
{"name": "ember", "type": "fire", "category": "special", "power": 40, "accuracy": 1.0, "pp": 25, "effect": {"chance": 0.1, "statusCondition": "burn"}}
{"name": "explosion", "type": "normal", "category": "physical", "power": 170, "accuracy": 1.0, "pp": 5, "effects": ["Explosion deals high damage, but causes the user to faint."], "changes": ["In Generations 1-4, the opponent's defense stat is temporarily halved when calculating the damage. This gives Explosion an effective power of 340."]}
{"name": "fire blast", "type": "fire", "category": "special", "power": 120, "accuracy": 0.85, "pp": 5, "effect": {"chance": 0.1, "statusCondition": "burn"}}
{"name": "fire punch", "type": "fire", "category": "physical", "power": 75, "accuracy": 1.0, "pp": 15, "effect": {"chance": 0.1, "statusCondition": "burn"}}
{"name": "fire spin", "type": "fire", "category": "special", "power": 35, "accuracy": 0.85, "pp": 15, "effects": ["Fire Spin inflicts damage on the first turn then traps the opponent, causing them to lose 1⁄16 of their maximum HP after each turn, for 4-5 turns. If the user holds a Grip Claw then it is always 5 turns."], "changes": ["In Generations 1-4, Fire Spin has a base power of 15 and 70% accuracy. Its after-effects last for 2-5 turns instead of 4-5.", "In Generation 1, Fire Spin simply inflicts its base power damage for 2-5 turns. While in effect, the target is unable to attack."]}
{"name": "fissure", "type": "ground", "category": "physical", "power": null, "accuracy": null, "pp": 5, "effects": ["If it hits, Fissure is guaranteed to make the opponent faint. It is more likely to hit Pokémon that are of a lower level than the user.", "Its accuracy (as a percentage) is calculated as below, ignoring all other accuracy and evasion modifiers:"], "changes": ["In Generation 1, Fissure has 30% accuracy and can hit Pokémon of any level, but does not affect Pokémon faster than the user."]}
{"name": "flamethrower", "type": "fire", "category": "special", "power": 95, "accuracy": 1.0, "pp": 15, "effect": {"chance": 0.1, "statusCondition": "burn"}}
{"name": "flash", "type": "normal", "category": "status", "power": null, "accuracy": 0.7, "pp": 20, "effect": {"stat": "accuracy", "stages": -1}}
{"name": "fly", "type": "flying", "category": "physical", "power": 70, "accuracy": 0.95, "pp": 15, "effects": ["The user of Fly will fly up high on the first turn, disappearing from view and becoming invulnerable to most attacks. On the second turn, Fly deals damage.", "While in the air, the Pokémon can only be hit by the moves Gust, Twister, Thunder, Sky Uppercut and Smack Down, with Gust and Twister dealing twice normal damage. Moves from No Guard Pokémon, or any move following an identify move can also hit for regular power."]}
{"name": "focus energy", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 30, "highCriticalHitRatio": true}
{"name": "fury attack", "type": "normal", "category": "physical", "power": 15, "accuracy": 0.85, "pp": 20, "effects": [], "changes": ["In Generations 1-3, Fury Attack ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "fury swipes", "type": "normal", "category": "physical", "power": 18, "accuracy": 0.8, "pp": 15, "effects": [], "changes": ["In Generations 1-3, Fury Swipes ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "glare", "type": "normal", "category": "status", "power": null, "accuracy": 0.75, "pp": 30, "effect": {"statusCondition": "paralysis"}}
{"name": "growl", "type": "normal", "category": "status", "power": null, "accuracy": 1.0, "pp": 40, "effect": {"stat": "attack", "stages": -1}}
{"name": "growth", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 40, "effect": {"stat": "special", "stages": 1}}
{"name": "guillotine", "type": "normal", "category": "physical", "power": null, "accuracy": null, "pp": 5, "effects": ["If it hits, Guillotine is guaranteed to make the opponent faint. It is more likely to hit Pokémon that are of a lower level than the user.", "Its accuracy (as a percentage) is calculated as below, ignoring all other accuracy and evasion modifiers:"], "changes": ["In Generation 1, Guillotine has 30% accuracy, but does not affect opponents faster than the user."]}
{"name": "gust", "type": "normal", "category": "special", "power": 40, "accuracy": 1.0, "pp": 35}
{"name": "harden", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 30, "effect": {"stat": "defense", "stages": 1}}
{"name": "haze", "type": "ice", "category": "status", "power": null, "accuracy": null, "pp": 30, "effects": ["Resets all stat changes."]}
{"name": "headbutt", "type": "normal", "category": "physical", "power": 70, "accuracy": 1.0, "pp": 15, "effect": {"chance": 0.3, "statusCondition": "flinch"}}
{"name": "high jump kick", "type": "fighting", "category": "physical", "power": 85, "accuracy": 0.9, "pp": 20, "effects": ["High Jump Kick deals damage, however, if it misses the user keeps going and crashes, losing 1⁄2 of its maximum HP. High Jump Kick cannot be used if Gravity is in effect."], "changes": ["In Generation 1, the crash damage is always 1 HP."]}
{"name": "horn attack", "type": "normal", "category": "physical", "power": 65, "accuracy": 1.0, "pp": 25}
{"name": "horn drill", "type": "normal", "category": "physical", "power": null, "accuracy": null, "pp": 5, "effects": ["If it hits, Horn Drill is guaranteed to make the opponent faint. It is more likely to hit Pokémon that are of a lower level than the user.", "Its accuracy (as a percentage) is calculated as below, ignoring all other accuracy and evasion modifiers:"], "changes": ["In Generation 1, Horn Drill has 30% accuracy, but does not affect opponents faster than the user."]}
{"name": "hydro pump", "type": "water", "category": "special", "power": 120, "accuracy": 0.8, "pp": 5}
{"name": "hyper beam", "type": "normal", "category": "special", "power": 150, "accuracy": 0.9, "pp": 5, "effects": ["Hyper Beam deals damage, but the user must recharge on the next turn (bringing its effective power down to 75 per turn)."], "changes": ["In Generation 1, if Hyper Beam KOs a Pokemon, it does not need to recharge."]}
{"name": "hyper fang", "type": "normal", "category": "physical", "power": 80, "accuracy": 0.9, "pp": 15, "effect": {"chance": 0.1, "statusCondition": "flinch"}}
{"name": "hypnosis", "type": "psychic", "category": "status", "power": null, "accuracy": 0.6, "pp": 20, "effect": {"statusCondition": "sleep"}}
{"name": "ice beam", "type": "ice", "category": "special", "power": 95, "accuracy": 1.0, "pp": 10, "effect": {"chance": 0.1, "statusCondition": "freeze"}}
{"name": "ice punch", "type": "ice", "category": "physical", "power": 75, "accuracy": 1.0, "pp": 15, "effect": {"chance": 0.1, "statusCondition": "freeze"}}
{"name": "jump kick", "type": "fighting", "category": "physical", "power": 70, "accuracy": 0.95, "pp": 25, "effects": ["Jump Kick deals damage, however, if it misses the user keeps going and crashes, losing 1⁄2 of its maximum HP. Jump Kick cannot be used if Gravity is in effect."], "changes": ["In Generation 1, the crash damage is always 1 HP. From Generation 2 to Generation 4, the crash damage is 1⁄8 of the damage the attack would have inflicted (which could be all of the user's own HP)."]}
{"name": "karate chop", "type": "normal", "category": "physical", "power": 50, "accuracy": 1.0, "pp": 25, "highCriticalHitRatio": true}
{"name": "kinesis", "type": "psychic", "category": "status", "power": null, "accuracy": 0.8, "pp": 15, "effect": {"stat": "accuracy", "stages": -1}}
{"name": "leech life", "type": "bug", "category": "physical", "power": 20, "accuracy": 1.0, "pp": 15, "effects": ["Leech Life deals damage and the user will recover 50% of the HP drained."]}
{"name": "leech seed", "type": "grass", "category": "status", "power": null, "accuracy": 0.9, "pp": 10, "effects": ["Leech Seed plants a seed on the target that drains 1⁄8 of its maximum HP at the end of each turn and restores it to the user, or any Pokemon that takes its place. It does not work on Grass-type Pokemon; it does technically work against Pokemon with the Magic Guard ability, but no HP will be sapped."], "changes": ["In Generation 1, Leech Seed saps 1⁄16 of the target's HP. If the target is also badly poisoned, the damage increases by 1⁄16 each turn, in the same way as bad poison (and in addition to poison damage).", "In Generation 1 and Generation 2 only, Haze will also clear the effects of Leech Seed."]}
{"name": "leer", "type": "normal", "category": "status", "power": null, "accuracy": 1.0, "pp": 30, "effect": {"stat": "defense", "stages": -1}}
{"name": "lick", "type": "ghost", "category": "physical", "power": 20, "accuracy": 1.0, "pp": 30, "effect": {"chance": 0.3, "statusCondition": "paralysis"}}
{"name": "light screen", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 30, "effects": ["Light Screen reduces damage from Special attacks by 50%, for 5 turns. Its effects apply to all Pokémon on the user's side of the field."]}
{"name": "lovely kiss", "type": "normal", "category": "status", "power": null, "accuracy": 0.75, "pp": 10, "effect": {"statusCondition": "sleep"}}
{"name": "low kick", "type": "fighting", "category": "physical", "power": 50, "accuracy": 0.9, "pp": 20, "effect": {"chance": 0.3, "statusCondition": "flinch"}}
{"name": "meditate", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 40, "effect": {"stat": "attack", "stages": 1}}
{"name": "mega drain", "type": "grass", "category": "special", "power": 40, "accuracy": 1.0, "pp": 10, "effects": ["Mega Drain deals damage and the user will recover 50% of the HP drained.", "If the user is holding a Big Root, the move instead recovers 65% of the damage dealt (30% more than normal). If used on a Pokemon with the ability Liquid Ooze, the user instead loses the HP it would have otherwise gained."]}
{"name": "mega kick", "type": "normal", "category": "physical", "power": 120, "accuracy": 0.75, "pp": 5}
{"name": "mega punch", "type": "normal", "category": "physical", "power": 80, "accuracy": 0.85, "pp": 20}
{"name": "metronome", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 10, "effects": ["User performs any move in the game at random."]}
{"name": "mimic", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 10, "effects": ["Mimic copies the last move used by the target (replacing Mimic). The copied move always has 5 PP. The effect only lasts while the user is in battle: if the user switches out or when the battle ends, the move becomes Mimic again.", "Mimic cannot copy Chatter, Metronome, Sketch or Struggle."], "changes": ["In Generation 1, Mimic allows the user to choose any of the opponent's moves to copy."]}
{"name": "minimize", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 20, "effect": {"stat": "evasiveness", "stages": 1}}
{"name": "mirror move", "type": "flying", "category": "status", "power": null, "accuracy": null, "pp": 20, "effects": ["User performs the opponent's last move."]}
{"name": "mist", "type": "ice", "category": "status", "power": null, "accuracy": null, "pp": 30, "effects": ["User's stats cannot be changed for a period of time."]}
{"name": "night shade", "type": "ghost", "category": "special", "power": null, "accuracy": 1.0, "pp": 15, "effects": ["The damage of Night Shade is equal to the user's level. So at level 100 the Pokémon will inflict 100 HP damage."], "changes": ["In Generation 1, Night Shade also hits Normal- and Psychic-type Pokémon despite their immunity to Ghost-type attacks."]}
{"name": "pay day", "type": "normal", "category": "physical", "power": 40, "accuracy": 1.0, "pp": 20}
{"name": "peck", "type": "flying", "category": "physical", "power": 35, "accuracy": 1.0, "pp": 35}
{"name": "petal dance", "type": "grass", "category": "special", "power": 120, "accuracy": 1.0, "pp": 10, "effects": ["The user of Petal Dance attacks for 2-3 turns, during which it cannot switch out, and then becomes confused. Confused Pokémon have a 50% chance of hurting themselves each turn, for 1-4 turns. The damage received is as if the Pokémon attacks itself with a typeless 40 base power Physical attack.", "If Petal Dance is disrupted (e.g. if the move misses or the user cannot attack due to paralysis) then it will stop and not cause confusion.", "Pokémon with the ability Own Tempo or those behind a Substitute cannot be confused."], "changes": ["In Generations 1-3 Petal Dance has a base power of 70. In Generation 4 its base power is 90.", "In Generations 1-4, Petal Dance has 20 PP. Furthermore, sleep, freezing and flinching will pause but not disrupt Petal Dance.", "In Generation 1, Petal Dance lasts for 3-4 turns."]}
{"name": "pin missile", "type": "bug", "category": "physical", "power": 14, "accuracy": 0.85, "pp": 20, "changes": ["In Generations 1-3, Pin Missile ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "poison gas", "type": "poison", "category": "status", "power": null, "accuracy": 0.55, "pp": 40, "effect": {"statusCondition": "poison"}}
{"name": "poison powder", "type": "poison", "category": "status", "power": null, "accuracy": 0.75, "pp": 35, "effect": {"statusCondition": "poison"}}
{"name": "poison sting", "type": "poison", "category": "physical", "power": 15, "accuracy": 1.0, "pp": 35, "effect": {"chance": 0.3, "statusCondition": "poison"}}
{"name": "pound", "type": "normal", "category": "physical", "power": 40, "accuracy": 1.0, "pp": 35}
{"name": "psybeam", "type": "psychic", "category": "special", "power": 65, "accuracy": 1.0, "pp": 20, "effect": {"chance": 0.1, "statusCondition": "confused"}}
{"name": "psychic", "type": "psychic", "category": "special", "power": 90, "accuracy": 1.0, "pp": 10, "effect": {"chance": 0.3, "stat": "special", "stages": -1}}
{"name": "psywave", "type": "psychic", "category": "special", "power": null, "accuracy": 0.8, "pp": 15, "effects": ["Psywave inflicts a random amount of HP damage, varying between 50% and 150% of the user's level. In other words, at level 100 the damage will be 50-150 HP.", "The damage is typeless (not affected by type advantages/disadvantages) but it still does not affect Dark type Pokemon."]}
{"name": "quick attack", "type": "normal", "category": "physical", "power": 40, "accuracy": 1.0, "pp": 30, "priority": 1}
{"name": "rage", "type": "normal", "category": "physical", "power": 20, "accuracy": 1.0, "pp": 20, "effects": ["Rage deals damage, and if the user is hit by a direct attack - any time after Rage is first used but before a different move is used - the user's Attack is raised by one stage. The game will state the Pokemon's rage is building rather than explicitly assert the stat increase. Stats can be raised to a maximum of +6 stages each.", "The Attack increases will continue as long as Rage is the last move used, even if it misses, the user is incapacitated (paralyzed, sleeping, etc) or the player uses an item. The Attack increase activates for every blow of multi-hit moves such as DoubleSlap or Fury Swipes.", "As an example, if a Pokemon uses Rage then the opponent hits the user in the same turn, the user's Attack increases. If the user moves last it will not increase that turn, but will in the next turn if the opponent hits the user again."], "changes": ["In Generation 1, after Rage is selected it will continue to be used until the end of the battle or the user faints.", "In Generations 2-3, if the user is slower than the opponent, the Attack rise only occurs if Rage is selected in that turn - if a different move is selected (or an item used) and the Pokemon is hit before it uses the new move, its Attack does not increase."]}
{"name": "razor leaf", "type": "grass", "category": "physical", "power": 55, "accuracy": 0.95, "pp": 25, "highCriticalHitRatio": true}
{"name": "razor wind", "type": "normal", "category": "special", "power": 80, "accuracy": 0.75, "pp": 10, "effects": ["The user of Razor Wind will whip up a whirlwind on the first turn. On the second turn, Razor Wind deals damage."]}
{"name": "recover", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 20, "effects": ["Recover restores up to 50% of the user's maximum HP."]}
{"name": "reflect", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 20, "effects": ["Reflect reduces damage from Physical attacks by 50%, for 5 turns. Its effects apply to all Pokémon on the user's side of the field."]}
{"name": "rest", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 10, "effects": ["User sleeps for 2 turns, but user is fully healed."]}
{"name": "roar", "type": "normal", "category": "status", "power": null, "accuracy": 1.0, "pp": 20}
{"name": "rock slide", "type": "rock", "category": "physical", "power": 75, "accuracy": 0.9, "pp": 10, "effect": {"chance": 0.3, "statusCondition": "flinch"}}
{"name": "rock throw", "type": "rock", "category": "physical", "power": 50, "accuracy": 0.65, "pp": 15}
{"name": "rolling kick", "type": "fighting", "category": "physical", "power": 60, "accuracy": 0.85, "pp": 15, "effect": {"chance": 0.3, "statusCondition": "flinch"}}
{"name": "sand attack", "type": "normal", "category": "status", "power": null, "accuracy": 1.0, "pp": 15, "effect": {"stat": "accuracy", "stages": -1}}
{"name": "scratch", "type": "normal", "category": "physical", "power": 40, "accuracy": 1.0, "pp": 35}
{"name": "screech", "type": "normal", "category": "status", "power": null, "accuracy": 0.85, "pp": 40, "effect": {"stat": "defense", "stages": -2}}
{"name": "seismic toss", "type": "fighting", "category": "physical", "power": null, "accuracy": 1.0, "pp": 20, "effects": ["The damage of Seismic Toss is equal to the user's level. So at level 100 the Pokémon will inflict 100 HP damage."], "changes": ["In Generation 1 Seismic Toss can hit Ghost-type Pokémon despite their immunity to Fighting-type attacks."]}
{"name": "self-destruct", "type": "normal", "category": "physical", "power": 200, "accuracy": 1.0, "pp": 5, "effects": ["Self-Destruct deals high damage, but causes the user to faint."]}
{"name": "sharpen", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 30, "effect": {"stat": "attack", "stages": 1}}
{"name": "sing", "type": "normal", "category": "status", "power": null, "accuracy": 0.55, "pp": 15, "effect": {"statusCondition": "sleep"}}
{"name": "skull bash", "type": "normal", "category": "physical", "power": 100, "accuracy": 1.0, "pp": 15, "effects": ["The user of Skull Bash will tuck in its head on the first turn and raise its Defense by one stage. On the second turn, Skull Bash deals damage."], "changes": ["In Generation 1, Skull Bash does not raise the user's Defense."]}
{"name": "sky attack", "type": "flying", "category": "physical", "power": 140, "accuracy": 0.9, "pp": 5, "effects": ["The user of Sky Attack will become cloaked in a harsh light on the first turn. On the second turn, Sky Attack deals damage."]}
{"name": "slam", "type": "normal", "category": "physical", "power": 80, "accuracy": 0.75, "pp": 20}
{"name": "slash", "type": "normal", "category": "physical", "power": 70, "accuracy": 1.0, "pp": 20, "highCriticalHitRatio": true}
{"name": "sleep powder", "type": "grass", "category": "status", "power": null, "accuracy": 0.75, "pp": 15, "effect": {"statusCondition": "sleep"}}
{"name": "sludge", "type": "poison", "category": "special", "power": 65, "accuracy": 1.0, "pp": 20, "effect": {"chance": 0.3, "statusCondition": "poison"}}
{"name": "smog", "type": "poison", "category": "special", "power": 20, "accuracy": 0.7, "pp": 20, "effect": {"chance": 0.4, "statusCondition": "poison"}}
{"name": "smokescreen", "type": "normal", "category": "status", "power": null, "accuracy": 1.0, "pp": 20, "effect": {"stat": "accuracy", "stages": -1}}
{"name": "soft-boiled", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 10, "effects": ["Soft-Boiled recovers up to 50% of the user's maximum HP."]}
{"name": "solar beam", "type": "grass", "category": "special", "power": 120, "accuracy": 1.0, "pp": 10, "effects": ["The user of Solar Beam will absorb light on the first turn. On the second turn, Solar Beam deals damage."]}
{"name": "sonic boom", "type": "normal", "category": "special", "power": null, "accuracy": 0.9, "pp": 20, "effects": ["Sonic Boom always deals 20 HP damage to the target, regardless of typing (although Ghost type Pokémon are still immune). It has no additional effect."], "changes": ["In Generation 1, Sonic Boom hits Ghost types regardless of their immunity to Normal type moves."]}
{"name": "spike cannon", "type": "normal", "category": "physical", "power": 20, "accuracy": 1.0, "pp": 15, "effects": [], "changes": ["In Generations 1-3, Spike Cannon ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "splash", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 40}
{"name": "spore", "type": "grass", "category": "status", "power": null, "accuracy": 1.0, "pp": 15, "effect": {"statusCondition": "sleep"}}
{"name": "stomp", "type": "normal", "category": "physical", "power": 65, "accuracy": 1.0, "pp": 20, "effect": {"chance": 0.3, "statusCondition": "flinch"}}
{"name": "strength", "type": "normal", "category": "physical", "power": 80, "accuracy": 1.0, "pp": 15}
{"name": "string shot", "type": "bug", "category": "status", "power": null, "accuracy": 0.95, "pp": 40, "effect": {"stat": "speed", "stages": -1}}
{"name": "struggle", "type": "normal", "category": "physical", "power": 50, "accuracy": 1.0, "pp": null, "effects": ["Only usable when all PP are gone. Hurts the user."]}
{"name": "stun spore", "type": "grass", "category": "status", "power": null, "accuracy": 0.75, "pp": 30, "effect": {"statusCondition": "paralysis"}}
{"name": "submission", "type": "fighting", "category": "physical", "power": 80, "accuracy": 0.8, "pp": 25, "effects": ["Submission deals damage, but the user receives 1⁄4 of the damage it inflicts in recoil. In other words, if the attack does 100 HP damage to the opponent, the user will lose 25 HP."]}
{"name": "substitute", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 10, "effects": ["Uses HP to creates a decoy that takes hits."]}
{"name": "super fang", "type": "normal", "category": "physical", "power": null, "accuracy": 0.9, "pp": 10, "effects": ["Always takes off half of the opponent's HP."]}
{"name": "supersonic", "type": "normal", "category": "status", "power": null, "accuracy": 0.55, "pp": 20, "effect": {"statusCondition": "confused"}}
{"name": "surf", "type": "water", "category": "special", "power": 95, "accuracy": 1.0, "pp": 15}
{"name": "swift", "type": "normal", "category": "special", "power": 60, "accuracy": null, "pp": 20, "changes": ["In Generation 1, Swift can hit Pokémon during the invulnerable stage of Dig and Fly."]}
{"name": "swords dance", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 30, "effect": {"stat": "attack", "stages": 2}}
{"name": "tackle", "type": "normal", "category": "physical", "power": 35, "accuracy": 0.95, "pp": 35}
{"name": "tail whip", "type": "normal", "category": "status", "power": null, "accuracy": 1.0, "pp": 30, "effect": {"stat": "defense", "stages": -1}}
{"name": "take down", "type": "normal", "category": "physical", "power": 90, "accuracy": 0.85, "pp": 20, "effects": ["Take Down deals damage, but the user receives 1⁄4 of the damage it inflicted in recoil. In other words, if the attack does 100 HP damage to the opponent, the user will lose 25 HP."]}
{"name": "teleport", "type": "psychic", "category": "status", "power": null, "accuracy": null, "pp": 20}
{"name": "thrash", "type": "normal", "category": "physical", "power": 120, "accuracy": 1.0, "pp": 10, "effects": ["The user of Thrash attacks for 2-3 turns, during which it cannot switch out, and then becomes confused. Confused Pokémon have a 50% chance of hurting themselves each turn, for 1-4 turns. The damage received is as if the Pokémon attacks itself with a typeless 40 base power Physical attack.", "If Thrash is disrupted (e.g. if the move misses or the user cannot attack due to paralysis) then it will stop and not cause confusion.", "Pokémon with the ability Own Tempo or those behind a Substitute cannot be confused."], "changes": ["In Generations 1-4, Thrash has 20 PP and a base power of 90. Furthermore, sleep, freezing and flinching will pause but not disrupt Thrash.", "In Generation 1, Thrash lasts for 3-4 turns."]}
{"name": "thunder", "type": "electric", "category": "special", "power": 120, "accuracy": 0.7, "pp": 10, "effect": {"chance": 0.1, "statusCondition": "paralysis"}}
{"name": "thunder punch", "type": "electric", "category": "physical", "power": 75, "accuracy": 1.0, "pp": 15, "effect": {"chance": 0.1, "statusCondition": "paralysis"}}
{"name": "thunder shock", "type": "electric", "category": "special", "power": 40, "accuracy": 1.0, "pp": 30, "effect": {"chance": 0.1, "statusCondition": "paralysis"}}
{"name": "thunder wave", "type": "electric", "category": "status", "power": null, "accuracy": 1.0, "pp": 20, "effect": {"statusCondition": "paralysis"}}
{"name": "thunderbolt", "type": "electric", "category": "special", "power": 95, "accuracy": 1.0, "pp": 15, "effect": {"chance": 0.1, "statusCondition": "paralysis"}}
{"name": "toxic", "type": "poison", "category": "status", "power": null, "accuracy": 0.85, "pp": 10, "changes": ["In Generation 1, Toxic also increases the damage taken by Leech Seed."], "effect": {"statusCondition": "badly poison"}}
{"name": "transform", "type": "normal", "category": "status", "power": null, "accuracy": null, "pp": 10, "effects": ["User takes on the form and attacks of the opponent."]}
{"name": "tri attack", "type": "normal", "category": "special", "power": 80, "accuracy": 1.0, "pp": 10}
{"name": "twineedle", "type": "bug", "category": "physical", "power": 25, "accuracy": 1.0, "pp": 20, "effects": ["Twineedle deals damage and will strike twice (with 25 base power each time). It has a 20% chance of poisoning the target. Poison or Steel type Pokémon, those with the ability Immunity or those behind a Substitute cannot be poisoned.\nEach strike of Twineedle is treated like a separate attack:"], "changes": ["In Generations 1-2, Twineedle can poison Poison and Steel types.\nIn Generations 2-4, if a Focus Sash or Focus Band activates before the final hit, subsequent hits do not cause the holder to faint.", "In Generations 1-3, Twineedle ends immediately if any hit breaks a Substitute.", "In Generation 1, each hit will always deal the same damage - if the first critical hits, so will the rest."]}
{"name": "vice grip", "type": "normal", "category": "physical", "power": 55, "accuracy": 1.0, "pp": 30}
{"name": "vine whip", "type": "grass", "category": "physical", "power": 35, "accuracy": 1.0, "pp": 10}
{"name": "water gun", "type": "water", "category": "special", "power": 40, "accuracy": 1.0, "pp": 25}
{"name": "waterfall", "type": "water", "category": "physical", "power": 80, "accuracy": 1.0, "pp": 15}
{"name": "whirlwind", "type": "normal", "category": "status", "power": null, "accuracy": 0.85, "pp": 20}
{"name": "wing attack", "type": "flying", "category": "physical", "power": 35, "accuracy": 1.0, "pp": 35}
{"name": "withdraw", "type": "water", "category": "status", "power": null, "accuracy": null, "pp": 40, "effect": {"stat": "defense", "stages": 1}}
{"name": "wrap", "type": "normal", "category": "physical", "power": 15, "accuracy": 0.9, "pp": 20, "effects": ["Wrap inflicts damage on the first turn then traps the opponent, causing them to lose 1⁄16 of their maximum HP after each turn, for 4-5 turns. If the user holds a Grip Claw then it is always 5 turns."], "changes": ["In Generations 1-4, Wrap has 85% accuracy. Its after-effects last for 2-5 turns instead of 4-5.", "In Generation 1, Wrap simply inflicts its base power damage for 2-5 turns. While in effect, the target is unable to attack."]}
+33
View File
@@ -0,0 +1,33 @@
digraph Tree {
node [shape=box, style="filled", color="black", fontname="helvetica"] ;
edge [fontname="helvetica"] ;
0 [label="player_defense <= 14.5\nsamples = 100.0%\nvalue = [0.332, 0.668]", fillcolor="#9ccef2"] ;
1 [label="opponent_speed <= 16.5\nsamples = 40.8%\nvalue = [0.579, 0.421]", fillcolor="#f8ddc9"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="player_hp <= 13.0\nsamples = 20.2%\nvalue = [0.321, 0.679]", fillcolor="#97cbf1"] ;
1 -> 2 ;
3 [label="(...)", fillcolor="#C0C0C0"] ;
2 -> 3 ;
6 [label="(...)", fillcolor="#C0C0C0"] ;
2 -> 6 ;
29 [label="opponent_hp <= 37.5\nsamples = 20.6%\nvalue = [0.873, 0.127]", fillcolor="#e99356"] ;
1 -> 29 ;
30 [label="(...)", fillcolor="#C0C0C0"] ;
29 -> 30 ;
39 [label="(...)", fillcolor="#C0C0C0"] ;
29 -> 39 ;
40 [label="opponent_speed <= 36.5\nsamples = 59.2%\nvalue = [0.145, 0.855]", fillcolor="#5baee9"] ;
0 -> 40 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
41 [label="player_attack <= 14.0\nsamples = 54.3%\nvalue = [0.102, 0.898]", fillcolor="#50a8e8"] ;
40 -> 41 ;
42 [label="(...)", fillcolor="#C0C0C0"] ;
41 -> 42 ;
43 [label="(...)", fillcolor="#C0C0C0"] ;
41 -> 43 ;
80 [label="player_special <= 30.0\nsamples = 4.9%\nvalue = [0.714, 0.286]", fillcolor="#efb388"] ;
40 -> 80 ;
81 [label="(...)", fillcolor="#C0C0C0"] ;
80 -> 81 ;
88 [label="(...)", fillcolor="#C0C0C0"] ;
80 -> 88 ;
}
Binary file not shown.
+33
View File
@@ -0,0 +1,33 @@
digraph Tree {
node [shape=box, style="filled", color="black", fontname="helvetica"] ;
edge [fontname="helvetica"] ;
0 [label="player_hp <= 32.5\nsamples = 100.0%\nvalue = [0.327, 0.673]", fillcolor="#99cdf2"] ;
1 [label="player_type_psychic <= 0.5\nsamples = 47.3%\nvalue = [0.503, 0.497]", fillcolor="#fffefd"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="player_special <= 6.5\nsamples = 45.0%\nvalue = [0.479, 0.521]", fillcolor="#eff7fd"] ;
1 -> 2 ;
3 [label="(...)", fillcolor="#C0C0C0"] ;
2 -> 3 ;
12 [label="(...)", fillcolor="#C0C0C0"] ;
2 -> 12 ;
47 [label="opponent_attack <= 17.5\nsamples = 2.3%\nvalue = [0.9, 0.1]", fillcolor="#e88f4f"] ;
1 -> 47 ;
48 [label="(...)", fillcolor="#C0C0C0"] ;
47 -> 48 ;
49 [label="(...)", fillcolor="#C0C0C0"] ;
47 -> 49 ;
50 [label="opponent_hp <= 40.5\nsamples = 52.7%\nvalue = [0.156, 0.844]", fillcolor="#5eafea"] ;
0 -> 50 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
51 [label="player_defense <= 17.5\nsamples = 38.6%\nvalue = [0.075, 0.925]", fillcolor="#49a5e7"] ;
50 -> 51 ;
52 [label="(...)", fillcolor="#C0C0C0"] ;
51 -> 52 ;
59 [label="(...)", fillcolor="#C0C0C0"] ;
51 -> 59 ;
78 [label="player_attack <= 26.5\nsamples = 14.1%\nvalue = [0.391, 0.609]", fillcolor="#b8dcf6"] ;
50 -> 78 ;
79 [label="(...)", fillcolor="#C0C0C0"] ;
78 -> 79 ;
98 [label="(...)", fillcolor="#C0C0C0"] ;
78 -> 98 ;
}
Binary file not shown.
+21
View File
@@ -0,0 +1,21 @@
digraph Tree {
node [shape=box, style="filled", color="black", fontname="helvetica"] ;
edge [fontname="helvetica"] ;
0 [label="opponent_type_ghost <= 0.5\nsamples = 100.0%\nvalue = [0.361, 0.639]", fillcolor="#a9d4f4"] ;
1 [label="opponent_defense <= 28.5\nsamples = 98.7%\nvalue = [0.352, 0.648]", fillcolor="#a4d2f3"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="player_type_bug <= 0.5\nsamples = 80.4%\nvalue = [0.254, 0.746]", fillcolor="#7cbeee"] ;
1 -> 2 ;
3 [label="(...)", fillcolor="#C0C0C0"] ;
2 -> 3 ;
58 [label="(...)", fillcolor="#C0C0C0"] ;
2 -> 58 ;
65 [label="opponent_type_dragon <= 0.5\nsamples = 18.3%\nvalue = [0.794, 0.206]", fillcolor="#eca26c"] ;
1 -> 65 ;
66 [label="(...)", fillcolor="#C0C0C0"] ;
65 -> 66 ;
83 [label="(...)", fillcolor="#C0C0C0"] ;
65 -> 83 ;
84 [label="samples = 1.3%\nvalue = [1.0, 0.0]", fillcolor="#e58139"] ;
0 -> 84 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
}
Binary file not shown.
+151
View File
@@ -0,0 +1,151 @@
{"national_pokedex_number": 63, "name": "abra", "types": ["psychic"], "baseStats": {"hp": 25, "attack": 20, "defense": 15, "speed": 90, "special": 105}}
{"national_pokedex_number": 142, "name": "aerodactyl", "types": ["rock", "flying"], "baseStats": {"hp": 80, "attack": 105, "defense": 65, "speed": 130, "special": 60}}
{"national_pokedex_number": 65, "name": "alakazam", "types": ["psychic"], "baseStats": {"hp": 55, "attack": 50, "defense": 45, "speed": 120, "special": 135}}
{"national_pokedex_number": 24, "name": "arbok", "types": ["poison"], "baseStats": {"hp": 60, "attack": 85, "defense": 69, "speed": 80, "special": 65}}
{"national_pokedex_number": 59, "name": "arcanine", "types": ["fire"], "baseStats": {"hp": 90, "attack": 110, "defense": 80, "speed": 95, "special": 80}}
{"national_pokedex_number": 144, "name": "articuno", "types": ["ice", "flying"], "baseStats": {"hp": 90, "attack": 85, "defense": 100, "speed": 85, "special": 125}}
{"national_pokedex_number": 15, "name": "beedrill", "types": ["bug", "poison"], "baseStats": {"hp": 65, "attack": 80, "defense": 40, "speed": 75, "special": 45}}
{"national_pokedex_number": 69, "name": "bellsprout", "types": ["grass", "poison"], "baseStats": {"hp": 50, "attack": 75, "defense": 35, "speed": 40, "special": 70}}
{"national_pokedex_number": 9, "name": "blastoise", "types": ["water"], "baseStats": {"hp": 79, "attack": 83, "defense": 100, "speed": 78, "special": 85}}
{"national_pokedex_number": 1, "name": "bulbasaur", "types": ["grass", "poison"], "baseStats": {"hp": 45, "attack": 49, "defense": 49, "speed": 45, "special": 65}}
{"national_pokedex_number": 12, "name": "butterfree", "types": ["bug", "flying"], "baseStats": {"hp": 60, "attack": 45, "defense": 50, "speed": 70, "special": 80}}
{"national_pokedex_number": 10, "name": "caterpie", "types": ["bug"], "baseStats": {"hp": 45, "attack": 30, "defense": 35, "speed": 45, "special": 20}}
{"national_pokedex_number": 113, "name": "chansey", "types": ["normal"], "baseStats": {"hp": 250, "attack": 5, "defense": 5, "speed": 50, "special": 105}}
{"national_pokedex_number": 6, "name": "charizard", "types": ["fire", "flying"], "baseStats": {"hp": 78, "attack": 84, "defense": 78, "speed": 100, "special": 85}}
{"national_pokedex_number": 4, "name": "charmander", "types": ["fire"], "baseStats": {"hp": 39, "attack": 52, "defense": 43, "speed": 65, "special": 50}}
{"national_pokedex_number": 5, "name": "charmeleon", "types": ["fire"], "baseStats": {"hp": 58, "attack": 64, "defense": 58, "speed": 80, "special": 65}}
{"national_pokedex_number": 36, "name": "clefable", "types": ["fairy"], "baseStats": {"hp": 95, "attack": 70, "defense": 73, "speed": 60, "special": 85}}
{"national_pokedex_number": 35, "name": "clefairy", "types": ["fairy"], "baseStats": {"hp": 70, "attack": 45, "defense": 48, "speed": 35, "special": 60}}
{"national_pokedex_number": 91, "name": "cloyster", "types": ["water", "ice"], "baseStats": {"hp": 50, "attack": 95, "defense": 180, "speed": 70, "special": 85}}
{"national_pokedex_number": 104, "name": "cubone", "types": ["ground"], "baseStats": {"hp": 50, "attack": 50, "defense": 95, "speed": 35, "special": 40}}
{"national_pokedex_number": 87, "name": "dewgong", "types": ["water", "ice"], "baseStats": {"hp": 90, "attack": 70, "defense": 80, "speed": 70, "special": 95}}
{"national_pokedex_number": 50, "name": "diglett", "types": ["ground"], "baseStats": {"hp": 10, "attack": 55, "defense": 25, "speed": 95, "special": 45}}
{"national_pokedex_number": 132, "name": "ditto", "types": ["normal"], "baseStats": {"hp": 48, "attack": 48, "defense": 48, "speed": 48, "special": 48}}
{"national_pokedex_number": 85, "name": "dodrio", "types": ["normal", "flying"], "baseStats": {"hp": 60, "attack": 110, "defense": 70, "speed": 100, "special": 60}}
{"national_pokedex_number": 84, "name": "doduo", "types": ["normal", "flying"], "baseStats": {"hp": 35, "attack": 85, "defense": 45, "speed": 75, "special": 35}}
{"national_pokedex_number": 148, "name": "dragonair", "types": ["dragon"], "baseStats": {"hp": 61, "attack": 84, "defense": 65, "speed": 70, "special": 70}}
{"national_pokedex_number": 149, "name": "dragonite", "types": ["dragon", "flying"], "baseStats": {"hp": 91, "attack": 134, "defense": 95, "speed": 80, "special": 100}}
{"national_pokedex_number": 147, "name": "dratini", "types": ["dragon"], "baseStats": {"hp": 41, "attack": 64, "defense": 45, "speed": 50, "special": 50}}
{"national_pokedex_number": 96, "name": "drowzee", "types": ["psychic"], "baseStats": {"hp": 60, "attack": 48, "defense": 45, "speed": 42, "special": 90}}
{"national_pokedex_number": 51, "name": "dugtrio", "types": ["ground"], "baseStats": {"hp": 35, "attack": 80, "defense": 50, "speed": 120, "special": 70}}
{"national_pokedex_number": 133, "name": "eevee", "types": ["normal"], "baseStats": {"hp": 55, "attack": 55, "defense": 50, "speed": 55, "special": 65}}
{"national_pokedex_number": 23, "name": "ekans", "types": ["poison"], "baseStats": {"hp": 35, "attack": 60, "defense": 44, "speed": 55, "special": 40}}
{"national_pokedex_number": 125, "name": "electabuzz", "types": ["electric"], "baseStats": {"hp": 65, "attack": 83, "defense": 57, "speed": 105, "special": 85}}
{"national_pokedex_number": 101, "name": "electrode", "types": ["electric"], "baseStats": {"hp": 60, "attack": 50, "defense": 70, "speed": 140, "special": 80}}
{"national_pokedex_number": 102, "name": "exeggcute", "types": ["grass", "psychic"], "baseStats": {"hp": 60, "attack": 40, "defense": 80, "speed": 40, "special": 60}}
{"national_pokedex_number": 103, "name": "exeggutor", "types": ["grass", "psychic"], "baseStats": {"hp": 95, "attack": 95, "defense": 85, "speed": 55, "special": 125}}
{"national_pokedex_number": 83, "name": "farfetch'd", "types": ["normal", "flying"], "baseStats": {"hp": 52, "attack": 65, "defense": 55, "speed": 60, "special": 58}}
{"national_pokedex_number": 22, "name": "fearow", "types": ["normal", "flying"], "baseStats": {"hp": 65, "attack": 90, "defense": 65, "speed": 100, "special": 61}}
{"national_pokedex_number": 136, "name": "flareon", "types": ["fire"], "baseStats": {"hp": 65, "attack": 130, "defense": 60, "speed": 65, "special": 110}}
{"national_pokedex_number": 92, "name": "gastly", "types": ["ghost", "poison"], "baseStats": {"hp": 30, "attack": 35, "defense": 30, "speed": 80, "special": 100}}
{"national_pokedex_number": 94, "name": "gengar", "types": ["ghost", "poison"], "baseStats": {"hp": 60, "attack": 65, "defense": 60, "speed": 110, "special": 130}}
{"national_pokedex_number": 74, "name": "geodude", "types": ["rock", "ground"], "baseStats": {"hp": 40, "attack": 80, "defense": 100, "speed": 20, "special": 30}}
{"national_pokedex_number": 44, "name": "gloom", "types": ["grass", "poison"], "baseStats": {"hp": 60, "attack": 65, "defense": 70, "speed": 40, "special": 85}}
{"national_pokedex_number": 42, "name": "golbat", "types": ["poison", "flying"], "baseStats": {"hp": 75, "attack": 80, "defense": 70, "speed": 90, "special": 75}}
{"national_pokedex_number": 118, "name": "goldeen", "types": ["water"], "baseStats": {"hp": 45, "attack": 67, "defense": 60, "speed": 63, "special": 50}}
{"national_pokedex_number": 55, "name": "golduck", "types": ["water"], "baseStats": {"hp": 80, "attack": 82, "defense": 78, "speed": 85, "special": 80}}
{"national_pokedex_number": 76, "name": "golem", "types": ["rock", "ground"], "baseStats": {"hp": 80, "attack": 110, "defense": 130, "speed": 45, "special": 55}}
{"national_pokedex_number": 75, "name": "graveler", "types": ["rock", "ground"], "baseStats": {"hp": 55, "attack": 95, "defense": 115, "speed": 35, "special": 45}}
{"national_pokedex_number": 88, "name": "grimer", "types": ["poison"], "baseStats": {"hp": 80, "attack": 80, "defense": 50, "speed": 25, "special": 40}}
{"national_pokedex_number": 58, "name": "growlithe", "types": ["fire"], "baseStats": {"hp": 55, "attack": 70, "defense": 45, "speed": 60, "special": 50}}
{"national_pokedex_number": 130, "name": "gyarados", "types": ["water", "flying"], "baseStats": {"hp": 95, "attack": 125, "defense": 79, "speed": 81, "special": 100}}
{"national_pokedex_number": 93, "name": "haunter", "types": ["ghost", "poison"], "baseStats": {"hp": 45, "attack": 50, "defense": 45, "speed": 95, "special": 115}}
{"national_pokedex_number": 107, "name": "hitmonchan", "types": ["fighting"], "baseStats": {"hp": 50, "attack": 105, "defense": 79, "speed": 76, "special": 35}}
{"national_pokedex_number": 106, "name": "hitmonlee", "types": ["fighting"], "baseStats": {"hp": 50, "attack": 120, "defense": 53, "speed": 87, "special": 35}}
{"national_pokedex_number": 116, "name": "horsea", "types": ["water"], "baseStats": {"hp": 30, "attack": 40, "defense": 70, "speed": 60, "special": 70}}
{"national_pokedex_number": 97, "name": "hypno", "types": ["psychic"], "baseStats": {"hp": 85, "attack": 73, "defense": 70, "speed": 67, "special": 115}}
{"national_pokedex_number": 2, "name": "ivysaur", "types": ["grass", "poison"], "baseStats": {"hp": 60, "attack": 62, "defense": 63, "speed": 60, "special": 80}}
{"national_pokedex_number": 39, "name": "jigglypuff", "types": ["normal", "fairy"], "baseStats": {"hp": 115, "attack": 45, "defense": 20, "speed": 20, "special": 25}}
{"national_pokedex_number": 135, "name": "jolteon", "types": ["electric"], "baseStats": {"hp": 65, "attack": 65, "defense": 60, "speed": 130, "special": 110}}
{"national_pokedex_number": 124, "name": "jynx", "types": ["ice", "psychic"], "baseStats": {"hp": 65, "attack": 50, "defense": 35, "speed": 95, "special": 95}}
{"national_pokedex_number": 140, "name": "kabuto", "types": ["rock", "water"], "baseStats": {"hp": 30, "attack": 80, "defense": 90, "speed": 55, "special": 45}}
{"national_pokedex_number": 141, "name": "kabutops", "types": ["rock", "water"], "baseStats": {"hp": 60, "attack": 115, "defense": 105, "speed": 80, "special": 70}}
{"national_pokedex_number": 64, "name": "kadabra", "types": ["psychic"], "baseStats": {"hp": 40, "attack": 35, "defense": 30, "speed": 105, "special": 120}}
{"national_pokedex_number": 14, "name": "kakuna", "types": ["bug", "poison"], "baseStats": {"hp": 45, "attack": 25, "defense": 50, "speed": 35, "special": 25}}
{"national_pokedex_number": 115, "name": "kangaskhan", "types": ["normal"], "baseStats": {"hp": 105, "attack": 95, "defense": 80, "speed": 90, "special": 40}}
{"national_pokedex_number": 99, "name": "kingler", "types": ["water"], "baseStats": {"hp": 55, "attack": 130, "defense": 115, "speed": 75, "special": 50}}
{"national_pokedex_number": 109, "name": "koffing", "types": ["poison"], "baseStats": {"hp": 40, "attack": 65, "defense": 95, "speed": 35, "special": 60}}
{"national_pokedex_number": 98, "name": "krabby", "types": ["water"], "baseStats": {"hp": 30, "attack": 105, "defense": 90, "speed": 50, "special": 25}}
{"national_pokedex_number": 131, "name": "lapras", "types": ["water", "ice"], "baseStats": {"hp": 130, "attack": 85, "defense": 80, "speed": 60, "special": 95}}
{"national_pokedex_number": 108, "name": "lickitung", "types": ["normal"], "baseStats": {"hp": 90, "attack": 55, "defense": 75, "speed": 30, "special": 60}}
{"national_pokedex_number": 68, "name": "machamp", "types": ["fighting"], "baseStats": {"hp": 90, "attack": 130, "defense": 80, "speed": 55, "special": 65}}
{"national_pokedex_number": 67, "name": "machoke", "types": ["fighting"], "baseStats": {"hp": 80, "attack": 100, "defense": 70, "speed": 45, "special": 50}}
{"national_pokedex_number": 66, "name": "machop", "types": ["fighting"], "baseStats": {"hp": 70, "attack": 80, "defense": 50, "speed": 35, "special": 35}}
{"national_pokedex_number": 129, "name": "magikarp", "types": ["water"], "baseStats": {"hp": 20, "attack": 10, "defense": 55, "speed": 80, "special": 20}}
{"national_pokedex_number": 126, "name": "magmar", "types": ["fire"], "baseStats": {"hp": 65, "attack": 95, "defense": 57, "speed": 93, "special": 85}}
{"national_pokedex_number": 81, "name": "magnemite", "types": ["electric", "steel"], "baseStats": {"hp": 25, "attack": 35, "defense": 70, "speed": 45, "special": 95}}
{"national_pokedex_number": 82, "name": "magneton", "types": ["electric", "steel"], "baseStats": {"hp": 50, "attack": 60, "defense": 95, "speed": 70, "special": 120}}
{"national_pokedex_number": 56, "name": "mankey", "types": ["fighting"], "baseStats": {"hp": 40, "attack": 80, "defense": 35, "speed": 70, "special": 35}}
{"national_pokedex_number": 105, "name": "marowak", "types": ["ground"], "baseStats": {"hp": 60, "attack": 80, "defense": 110, "speed": 45, "special": 50}}
{"national_pokedex_number": 52, "name": "meowth", "types": ["normal"], "baseStats": {"hp": 40, "attack": 45, "defense": 35, "speed": 90, "special": 40}}
{"national_pokedex_number": 11, "name": "metapod", "types": ["bug"], "baseStats": {"hp": 50, "attack": 20, "defense": 55, "speed": 30, "special": 25}}
{"national_pokedex_number": 151, "name": "mew", "types": ["psychic"], "baseStats": {"hp": 100, "attack": 100, "defense": 100, "speed": 100, "special": 100}}
{"national_pokedex_number": 150, "name": "mewtwo", "types": ["psychic"], "baseStats": {"hp": 106, "attack": 110, "defense": 90, "speed": 130, "special": 154}}
{"national_pokedex_number": 146, "name": "moltres", "types": ["fire", "flying"], "baseStats": {"hp": 90, "attack": 100, "defense": 90, "speed": 90, "special": 125}}
{"national_pokedex_number": 122, "name": "mr. mime", "types": ["psychic", "fairy"], "baseStats": {"hp": 40, "attack": 45, "defense": 65, "speed": 90, "special": 100}}
{"national_pokedex_number": 89, "name": "muk", "types": ["poison"], "baseStats": {"hp": 105, "attack": 105, "defense": 75, "speed": 50, "special": 65}}
{"national_pokedex_number": 34, "name": "nidoking", "types": ["poison", "ground"], "baseStats": {"hp": 81, "attack": 92, "defense": 77, "speed": 85, "special": 75}}
{"national_pokedex_number": 31, "name": "nidoqueen", "types": ["poison", "ground"], "baseStats": {"hp": 90, "attack": 82, "defense": 87, "speed": 76, "special": 75}}
{"national_pokedex_number": 29, "name": "nidoran♀", "types": ["poison"], "baseStats": {"hp": 55, "attack": 47, "defense": 52, "speed": 41, "special": 40}}
{"national_pokedex_number": 32, "name": "nidoran♂", "types": ["poison"], "baseStats": {"hp": 46, "attack": 57, "defense": 40, "speed": 50, "special": 40}}
{"national_pokedex_number": 30, "name": "nidorina", "types": ["poison"], "baseStats": {"hp": 70, "attack": 62, "defense": 67, "speed": 56, "special": 55}}
{"national_pokedex_number": 33, "name": "nidorino", "types": ["poison"], "baseStats": {"hp": 61, "attack": 72, "defense": 57, "speed": 65, "special": 55}}
{"national_pokedex_number": 38, "name": "ninetales", "types": ["fire"], "baseStats": {"hp": 73, "attack": 76, "defense": 75, "speed": 100, "special": 100}}
{"national_pokedex_number": 43, "name": "oddish", "types": ["grass", "poison"], "baseStats": {"hp": 45, "attack": 50, "defense": 55, "speed": 30, "special": 75}}
{"national_pokedex_number": 138, "name": "omanyte", "types": ["rock", "water"], "baseStats": {"hp": 35, "attack": 40, "defense": 100, "speed": 35, "special": 90}}
{"national_pokedex_number": 139, "name": "omastar", "types": ["rock", "water"], "baseStats": {"hp": 70, "attack": 60, "defense": 125, "speed": 55, "special": 115}}
{"national_pokedex_number": 95, "name": "onix", "types": ["rock", "ground"], "baseStats": {"hp": 35, "attack": 45, "defense": 160, "speed": 70, "special": 30}}
{"national_pokedex_number": 46, "name": "paras", "types": ["bug", "grass"], "baseStats": {"hp": 35, "attack": 70, "defense": 55, "speed": 25, "special": 55}}
{"national_pokedex_number": 47, "name": "parasect", "types": ["bug", "grass"], "baseStats": {"hp": 60, "attack": 95, "defense": 80, "speed": 30, "special": 80}}
{"national_pokedex_number": 53, "name": "persian", "types": ["normal"], "baseStats": {"hp": 65, "attack": 70, "defense": 60, "speed": 115, "special": 65}}
{"national_pokedex_number": 18, "name": "pidgeot", "types": ["normal", "flying"], "baseStats": {"hp": 83, "attack": 80, "defense": 75, "speed": 91, "special": 70}}
{"national_pokedex_number": 17, "name": "pidgeotto", "types": ["normal", "flying"], "baseStats": {"hp": 63, "attack": 60, "defense": 55, "speed": 71, "special": 50}}
{"national_pokedex_number": 16, "name": "pidgey", "types": ["normal", "flying"], "baseStats": {"hp": 40, "attack": 45, "defense": 40, "speed": 56, "special": 35}}
{"national_pokedex_number": 25, "name": "pikachu", "types": ["electric"], "baseStats": {"hp": 35, "attack": 55, "defense": 30, "speed": 90, "special": 50}}
{"national_pokedex_number": 127, "name": "pinsir", "types": ["bug"], "baseStats": {"hp": 65, "attack": 125, "defense": 100, "speed": 85, "special": 55}}
{"national_pokedex_number": 60, "name": "poliwag", "types": ["water"], "baseStats": {"hp": 40, "attack": 50, "defense": 40, "speed": 90, "special": 40}}
{"national_pokedex_number": 61, "name": "poliwhirl", "types": ["water"], "baseStats": {"hp": 65, "attack": 65, "defense": 65, "speed": 90, "special": 50}}
{"national_pokedex_number": 62, "name": "poliwrath", "types": ["water", "fighting"], "baseStats": {"hp": 90, "attack": 85, "defense": 95, "speed": 70, "special": 70}}
{"national_pokedex_number": 77, "name": "ponyta", "types": ["fire"], "baseStats": {"hp": 50, "attack": 85, "defense": 55, "speed": 90, "special": 65}}
{"national_pokedex_number": 137, "name": "porygon", "types": ["normal"], "baseStats": {"hp": 65, "attack": 60, "defense": 70, "speed": 40, "special": 75}}
{"national_pokedex_number": 57, "name": "primeape", "types": ["fighting"], "baseStats": {"hp": 65, "attack": 105, "defense": 60, "speed": 95, "special": 60}}
{"national_pokedex_number": 54, "name": "psyduck", "types": ["water"], "baseStats": {"hp": 50, "attack": 52, "defense": 48, "speed": 55, "special": 50}}
{"national_pokedex_number": 26, "name": "raichu", "types": ["electric"], "baseStats": {"hp": 60, "attack": 90, "defense": 55, "speed": 100, "special": 90}}
{"national_pokedex_number": 78, "name": "rapidash", "types": ["fire"], "baseStats": {"hp": 65, "attack": 100, "defense": 70, "speed": 105, "special": 80}}
{"national_pokedex_number": 20, "name": "raticate", "types": ["normal"], "baseStats": {"hp": 55, "attack": 81, "defense": 60, "speed": 97, "special": 50}}
{"national_pokedex_number": 19, "name": "rattata", "types": ["normal"], "baseStats": {"hp": 30, "attack": 56, "defense": 35, "speed": 72, "special": 25}}
{"national_pokedex_number": 112, "name": "rhydon", "types": ["ground", "rock"], "baseStats": {"hp": 105, "attack": 130, "defense": 120, "speed": 40, "special": 45}}
{"national_pokedex_number": 111, "name": "rhyhorn", "types": ["ground", "rock"], "baseStats": {"hp": 80, "attack": 85, "defense": 95, "speed": 25, "special": 30}}
{"national_pokedex_number": 27, "name": "sandshrew", "types": ["ground"], "baseStats": {"hp": 50, "attack": 75, "defense": 85, "speed": 40, "special": 30}}
{"national_pokedex_number": 28, "name": "sandslash", "types": ["ground"], "baseStats": {"hp": 75, "attack": 100, "defense": 110, "speed": 65, "special": 55}}
{"national_pokedex_number": 123, "name": "scyther", "types": ["bug", "flying"], "baseStats": {"hp": 70, "attack": 110, "defense": 80, "speed": 105, "special": 55}}
{"national_pokedex_number": 117, "name": "seadra", "types": ["water"], "baseStats": {"hp": 55, "attack": 65, "defense": 95, "speed": 85, "special": 95}}
{"national_pokedex_number": 119, "name": "seaking", "types": ["water"], "baseStats": {"hp": 80, "attack": 92, "defense": 65, "speed": 68, "special": 80}}
{"national_pokedex_number": 86, "name": "seel", "types": ["water"], "baseStats": {"hp": 65, "attack": 45, "defense": 55, "speed": 45, "special": 70}}
{"national_pokedex_number": 90, "name": "shellder", "types": ["water"], "baseStats": {"hp": 30, "attack": 65, "defense": 100, "speed": 40, "special": 45}}
{"national_pokedex_number": 80, "name": "slowbro", "types": ["water", "psychic"], "baseStats": {"hp": 95, "attack": 75, "defense": 110, "speed": 30, "special": 80}}
{"national_pokedex_number": 79, "name": "slowpoke", "types": ["water", "psychic"], "baseStats": {"hp": 90, "attack": 65, "defense": 65, "speed": 15, "special": 40}}
{"national_pokedex_number": 143, "name": "snorlax", "types": ["normal"], "baseStats": {"hp": 160, "attack": 110, "defense": 65, "speed": 30, "special": 65}}
{"national_pokedex_number": 21, "name": "spearow", "types": ["normal", "flying"], "baseStats": {"hp": 40, "attack": 60, "defense": 30, "speed": 70, "special": 31}}
{"national_pokedex_number": 7, "name": "squirtle", "types": ["water"], "baseStats": {"hp": 44, "attack": 48, "defense": 65, "speed": 43, "special": 50}}
{"national_pokedex_number": 121, "name": "starmie", "types": ["water", "psychic"], "baseStats": {"hp": 60, "attack": 75, "defense": 85, "speed": 115, "special": 100}}
{"national_pokedex_number": 120, "name": "staryu", "types": ["water"], "baseStats": {"hp": 30, "attack": 45, "defense": 55, "speed": 85, "special": 70}}
{"national_pokedex_number": 114, "name": "tangela", "types": ["grass"], "baseStats": {"hp": 65, "attack": 55, "defense": 115, "speed": 60, "special": 100}}
{"national_pokedex_number": 128, "name": "tauros", "types": ["normal"], "baseStats": {"hp": 75, "attack": 100, "defense": 95, "speed": 110, "special": 70}}
{"national_pokedex_number": 72, "name": "tentacool", "types": ["water", "poison"], "baseStats": {"hp": 40, "attack": 40, "defense": 35, "speed": 70, "special": 100}}
{"national_pokedex_number": 73, "name": "tentacruel", "types": ["water", "poison"], "baseStats": {"hp": 80, "attack": 70, "defense": 65, "speed": 100, "special": 120}}
{"national_pokedex_number": 134, "name": "vaporeon", "types": ["water"], "baseStats": {"hp": 130, "attack": 65, "defense": 60, "speed": 65, "special": 110}}
{"national_pokedex_number": 49, "name": "venomoth", "types": ["bug", "poison"], "baseStats": {"hp": 70, "attack": 65, "defense": 60, "speed": 90, "special": 90}}
{"national_pokedex_number": 48, "name": "venonat", "types": ["bug", "poison"], "baseStats": {"hp": 60, "attack": 55, "defense": 50, "speed": 45, "special": 40}}
{"national_pokedex_number": 3, "name": "venusaur", "types": ["grass", "poison"], "baseStats": {"hp": 80, "attack": 82, "defense": 83, "speed": 80, "special": 100}}
{"national_pokedex_number": 71, "name": "victreebel", "types": ["grass", "poison"], "baseStats": {"hp": 80, "attack": 105, "defense": 65, "speed": 70, "special": 100}}
{"national_pokedex_number": 45, "name": "vileplume", "types": ["grass", "poison"], "baseStats": {"hp": 75, "attack": 80, "defense": 85, "speed": 50, "special": 100}}
{"national_pokedex_number": 100, "name": "voltorb", "types": ["electric"], "baseStats": {"hp": 40, "attack": 30, "defense": 50, "speed": 100, "special": 55}}
{"national_pokedex_number": 37, "name": "vulpix", "types": ["fire"], "baseStats": {"hp": 38, "attack": 41, "defense": 40, "speed": 65, "special": 65}}
{"national_pokedex_number": 8, "name": "wartortle", "types": ["water"], "baseStats": {"hp": 59, "attack": 63, "defense": 80, "speed": 58, "special": 65}}
{"national_pokedex_number": 13, "name": "weedle", "types": ["bug", "poison"], "baseStats": {"hp": 40, "attack": 35, "defense": 30, "speed": 50, "special": 20}}
{"national_pokedex_number": 70, "name": "weepinbell", "types": ["grass", "poison"], "baseStats": {"hp": 65, "attack": 90, "defense": 50, "speed": 55, "special": 85}}
{"national_pokedex_number": 110, "name": "weezing", "types": ["poison"], "baseStats": {"hp": 65, "attack": 90, "defense": 120, "speed": 60, "special": 85}}
{"national_pokedex_number": 40, "name": "wigglytuff", "types": ["normal", "fairy"], "baseStats": {"hp": 140, "attack": 70, "defense": 45, "speed": 45, "special": 50}}
{"national_pokedex_number": 145, "name": "zapdos", "types": ["electric", "flying"], "baseStats": {"hp": 90, "attack": 90, "defense": 85, "speed": 100, "special": 125}}
{"national_pokedex_number": 41, "name": "zubat", "types": ["poison", "flying"], "baseStats": {"hp": 40, "attack": 45, "defense": 35, "speed": 55, "special": 40}}
File diff suppressed because one or more lines are too long
+225
View File
@@ -0,0 +1,225 @@
{"attack": "normal", "defend": "normal", "effectiveness": 1}
{"attack": "normal", "defend": "fire", "effectiveness": 1}
{"attack": "normal", "defend": "water", "effectiveness": 1}
{"attack": "normal", "defend": "electric", "effectiveness": 1}
{"attack": "normal", "defend": "grass", "effectiveness": 1}
{"attack": "normal", "defend": "ice", "effectiveness": 1}
{"attack": "normal", "defend": "fighting", "effectiveness": 1}
{"attack": "normal", "defend": "poison", "effectiveness": 1}
{"attack": "normal", "defend": "ground", "effectiveness": 1}
{"attack": "normal", "defend": "flying", "effectiveness": 1}
{"attack": "normal", "defend": "psychic", "effectiveness": 1}
{"attack": "normal", "defend": "bug", "effectiveness": 1}
{"attack": "normal", "defend": "rock", "effectiveness": 0.5}
{"attack": "normal", "defend": "ghost", "effectiveness": 0}
{"attack": "normal", "defend": "dragon", "effectiveness": 1}
{"attack": "fire", "defend": "normal", "effectiveness": 1}
{"attack": "fire", "defend": "fire", "effectiveness": 0.5}
{"attack": "fire", "defend": "water", "effectiveness": 0.5}
{"attack": "fire", "defend": "electric", "effectiveness": 1}
{"attack": "fire", "defend": "grass", "effectiveness": 2}
{"attack": "fire", "defend": "ice", "effectiveness": 2}
{"attack": "fire", "defend": "fighting", "effectiveness": 1}
{"attack": "fire", "defend": "poison", "effectiveness": 1}
{"attack": "fire", "defend": "ground", "effectiveness": 1}
{"attack": "fire", "defend": "flying", "effectiveness": 1}
{"attack": "fire", "defend": "psychic", "effectiveness": 1}
{"attack": "fire", "defend": "bug", "effectiveness": 2}
{"attack": "fire", "defend": "rock", "effectiveness": 0.5}
{"attack": "fire", "defend": "ghost", "effectiveness": 1}
{"attack": "fire", "defend": "dragon", "effectiveness": 0.5}
{"attack": "water", "defend": "normal", "effectiveness": 1}
{"attack": "water", "defend": "fire", "effectiveness": 2}
{"attack": "water", "defend": "water", "effectiveness": 0.5}
{"attack": "water", "defend": "electric", "effectiveness": 1}
{"attack": "water", "defend": "grass", "effectiveness": 0.5}
{"attack": "water", "defend": "ice", "effectiveness": 1}
{"attack": "water", "defend": "fighting", "effectiveness": 1}
{"attack": "water", "defend": "poison", "effectiveness": 1}
{"attack": "water", "defend": "ground", "effectiveness": 2}
{"attack": "water", "defend": "flying", "effectiveness": 1}
{"attack": "water", "defend": "psychic", "effectiveness": 1}
{"attack": "water", "defend": "bug", "effectiveness": 1}
{"attack": "water", "defend": "rock", "effectiveness": 2}
{"attack": "water", "defend": "ghost", "effectiveness": 1}
{"attack": "water", "defend": "dragon", "effectiveness": 0.5}
{"attack": "electric", "defend": "normal", "effectiveness": 1}
{"attack": "electric", "defend": "fire", "effectiveness": 1}
{"attack": "electric", "defend": "water", "effectiveness": 2}
{"attack": "electric", "defend": "electric", "effectiveness": 0.5}
{"attack": "electric", "defend": "grass", "effectiveness": 0.5}
{"attack": "electric", "defend": "ice", "effectiveness": 1}
{"attack": "electric", "defend": "fighting", "effectiveness": 1}
{"attack": "electric", "defend": "poison", "effectiveness": 1}
{"attack": "electric", "defend": "ground", "effectiveness": 0}
{"attack": "electric", "defend": "flying", "effectiveness": 2}
{"attack": "electric", "defend": "psychic", "effectiveness": 1}
{"attack": "electric", "defend": "bug", "effectiveness": 1}
{"attack": "electric", "defend": "rock", "effectiveness": 1}
{"attack": "electric", "defend": "ghost", "effectiveness": 1}
{"attack": "electric", "defend": "dragon", "effectiveness": 0.5}
{"attack": "grass", "defend": "normal", "effectiveness": 1}
{"attack": "grass", "defend": "fire", "effectiveness": 0.5}
{"attack": "grass", "defend": "water", "effectiveness": 2}
{"attack": "grass", "defend": "electric", "effectiveness": 1}
{"attack": "grass", "defend": "grass", "effectiveness": 0.5}
{"attack": "grass", "defend": "ice", "effectiveness": 1}
{"attack": "grass", "defend": "fighting", "effectiveness": 1}
{"attack": "grass", "defend": "poison", "effectiveness": 0.5}
{"attack": "grass", "defend": "ground", "effectiveness": 2}
{"attack": "grass", "defend": "flying", "effectiveness": 0.5}
{"attack": "grass", "defend": "psychic", "effectiveness": 1}
{"attack": "grass", "defend": "bug", "effectiveness": 0.5}
{"attack": "grass", "defend": "rock", "effectiveness": 2}
{"attack": "grass", "defend": "ghost", "effectiveness": 1}
{"attack": "grass", "defend": "dragon", "effectiveness": 0.5}
{"attack": "ice", "defend": "normal", "effectiveness": 1}
{"attack": "ice", "defend": "fire", "effectiveness": 1}
{"attack": "ice", "defend": "water", "effectiveness": 0.5}
{"attack": "ice", "defend": "electric", "effectiveness": 1}
{"attack": "ice", "defend": "grass", "effectiveness": 2}
{"attack": "ice", "defend": "ice", "effectiveness": 0.5}
{"attack": "ice", "defend": "fighting", "effectiveness": 1}
{"attack": "ice", "defend": "poison", "effectiveness": 1}
{"attack": "ice", "defend": "ground", "effectiveness": 2}
{"attack": "ice", "defend": "flying", "effectiveness": 2}
{"attack": "ice", "defend": "psychic", "effectiveness": 1}
{"attack": "ice", "defend": "bug", "effectiveness": 1}
{"attack": "ice", "defend": "rock", "effectiveness": 1}
{"attack": "ice", "defend": "ghost", "effectiveness": 1}
{"attack": "ice", "defend": "dragon", "effectiveness": 2}
{"attack": "fighting", "defend": "normal", "effectiveness": 2}
{"attack": "fighting", "defend": "fire", "effectiveness": 1}
{"attack": "fighting", "defend": "water", "effectiveness": 1}
{"attack": "fighting", "defend": "electric", "effectiveness": 1}
{"attack": "fighting", "defend": "grass", "effectiveness": 1}
{"attack": "fighting", "defend": "ice", "effectiveness": 2}
{"attack": "fighting", "defend": "fighting", "effectiveness": 1}
{"attack": "fighting", "defend": "poison", "effectiveness": 0.5}
{"attack": "fighting", "defend": "ground", "effectiveness": 1}
{"attack": "fighting", "defend": "flying", "effectiveness": 0.5}
{"attack": "fighting", "defend": "psychic", "effectiveness": 0.5}
{"attack": "fighting", "defend": "bug", "effectiveness": 0.5}
{"attack": "fighting", "defend": "rock", "effectiveness": 2}
{"attack": "fighting", "defend": "ghost", "effectiveness": 0}
{"attack": "fighting", "defend": "dragon", "effectiveness": 1}
{"attack": "poison", "defend": "normal", "effectiveness": 1}
{"attack": "poison", "defend": "fire", "effectiveness": 1}
{"attack": "poison", "defend": "water", "effectiveness": 1}
{"attack": "poison", "defend": "electric", "effectiveness": 1}
{"attack": "poison", "defend": "grass", "effectiveness": 2}
{"attack": "poison", "defend": "ice", "effectiveness": 1}
{"attack": "poison", "defend": "fighting", "effectiveness": 1}
{"attack": "poison", "defend": "poison", "effectiveness": 0.5}
{"attack": "poison", "defend": "ground", "effectiveness": 0.5}
{"attack": "poison", "defend": "flying", "effectiveness": 1}
{"attack": "poison", "defend": "psychic", "effectiveness": 1}
{"attack": "poison", "defend": "bug", "effectiveness": 2}
{"attack": "poison", "defend": "rock", "effectiveness": 0.5}
{"attack": "poison", "defend": "ghost", "effectiveness": 0.5}
{"attack": "poison", "defend": "dragon", "effectiveness": 1}
{"attack": "ground", "defend": "normal", "effectiveness": 1}
{"attack": "ground", "defend": "fire", "effectiveness": 2}
{"attack": "ground", "defend": "water", "effectiveness": 1}
{"attack": "ground", "defend": "electric", "effectiveness": 2}
{"attack": "ground", "defend": "grass", "effectiveness": 0.5}
{"attack": "ground", "defend": "ice", "effectiveness": 1}
{"attack": "ground", "defend": "fighting", "effectiveness": 1}
{"attack": "ground", "defend": "poison", "effectiveness": 2}
{"attack": "ground", "defend": "ground", "effectiveness": 1}
{"attack": "ground", "defend": "flying", "effectiveness": 0}
{"attack": "ground", "defend": "psychic", "effectiveness": 1}
{"attack": "ground", "defend": "bug", "effectiveness": 0.5}
{"attack": "ground", "defend": "rock", "effectiveness": 2}
{"attack": "ground", "defend": "ghost", "effectiveness": 1}
{"attack": "ground", "defend": "dragon", "effectiveness": 1}
{"attack": "flying", "defend": "normal", "effectiveness": 1}
{"attack": "flying", "defend": "fire", "effectiveness": 1}
{"attack": "flying", "defend": "water", "effectiveness": 1}
{"attack": "flying", "defend": "electric", "effectiveness": 0.5}
{"attack": "flying", "defend": "grass", "effectiveness": 2}
{"attack": "flying", "defend": "ice", "effectiveness": 1}
{"attack": "flying", "defend": "fighting", "effectiveness": 2}
{"attack": "flying", "defend": "poison", "effectiveness": 1}
{"attack": "flying", "defend": "ground", "effectiveness": 1}
{"attack": "flying", "defend": "flying", "effectiveness": 1}
{"attack": "flying", "defend": "psychic", "effectiveness": 1}
{"attack": "flying", "defend": "bug", "effectiveness": 2}
{"attack": "flying", "defend": "rock", "effectiveness": 0.5}
{"attack": "flying", "defend": "ghost", "effectiveness": 1}
{"attack": "flying", "defend": "dragon", "effectiveness": 1}
{"attack": "psychic", "defend": "normal", "effectiveness": 1}
{"attack": "psychic", "defend": "fire", "effectiveness": 1}
{"attack": "psychic", "defend": "water", "effectiveness": 1}
{"attack": "psychic", "defend": "electric", "effectiveness": 1}
{"attack": "psychic", "defend": "grass", "effectiveness": 1}
{"attack": "psychic", "defend": "ice", "effectiveness": 1}
{"attack": "psychic", "defend": "fighting", "effectiveness": 2}
{"attack": "psychic", "defend": "poison", "effectiveness": 2}
{"attack": "psychic", "defend": "ground", "effectiveness": 1}
{"attack": "psychic", "defend": "flying", "effectiveness": 1}
{"attack": "psychic", "defend": "psychic", "effectiveness": 0.5}
{"attack": "psychic", "defend": "bug", "effectiveness": 1}
{"attack": "psychic", "defend": "rock", "effectiveness": 1}
{"attack": "psychic", "defend": "ghost", "effectiveness": 1}
{"attack": "psychic", "defend": "dragon", "effectiveness": 1}
{"attack": "bug", "defend": "normal", "effectiveness": 1}
{"attack": "bug", "defend": "fire", "effectiveness": 0.5}
{"attack": "bug", "defend": "water", "effectiveness": 1}
{"attack": "bug", "defend": "electric", "effectiveness": 1}
{"attack": "bug", "defend": "grass", "effectiveness": 2}
{"attack": "bug", "defend": "ice", "effectiveness": 1}
{"attack": "bug", "defend": "fighting", "effectiveness": 0.5}
{"attack": "bug", "defend": "poison", "effectiveness": 2}
{"attack": "bug", "defend": "ground", "effectiveness": 1}
{"attack": "bug", "defend": "flying", "effectiveness": 0.5}
{"attack": "bug", "defend": "psychic", "effectiveness": 2}
{"attack": "bug", "defend": "bug", "effectiveness": 1}
{"attack": "bug", "defend": "rock", "effectiveness": 1}
{"attack": "bug", "defend": "ghost", "effectiveness": 0.5}
{"attack": "bug", "defend": "dragon", "effectiveness": 1}
{"attack": "rock", "defend": "normal", "effectiveness": 1}
{"attack": "rock", "defend": "fire", "effectiveness": 2}
{"attack": "rock", "defend": "water", "effectiveness": 1}
{"attack": "rock", "defend": "electric", "effectiveness": 1}
{"attack": "rock", "defend": "grass", "effectiveness": 1}
{"attack": "rock", "defend": "ice", "effectiveness": 2}
{"attack": "rock", "defend": "fighting", "effectiveness": 0.5}
{"attack": "rock", "defend": "poison", "effectiveness": 1}
{"attack": "rock", "defend": "ground", "effectiveness": 0.5}
{"attack": "rock", "defend": "flying", "effectiveness": 2}
{"attack": "rock", "defend": "psychic", "effectiveness": 1}
{"attack": "rock", "defend": "bug", "effectiveness": 2}
{"attack": "rock", "defend": "rock", "effectiveness": 1}
{"attack": "rock", "defend": "ghost", "effectiveness": 1}
{"attack": "rock", "defend": "dragon", "effectiveness": 1}
{"attack": "ghost", "defend": "normal", "effectiveness": 0}
{"attack": "ghost", "defend": "fire", "effectiveness": 1}
{"attack": "ghost", "defend": "water", "effectiveness": 1}
{"attack": "ghost", "defend": "electric", "effectiveness": 1}
{"attack": "ghost", "defend": "grass", "effectiveness": 1}
{"attack": "ghost", "defend": "ice", "effectiveness": 1}
{"attack": "ghost", "defend": "fighting", "effectiveness": 1}
{"attack": "ghost", "defend": "poison", "effectiveness": 1}
{"attack": "ghost", "defend": "ground", "effectiveness": 1}
{"attack": "ghost", "defend": "flying", "effectiveness": 1}
{"attack": "ghost", "defend": "psychic", "effectiveness": 0}
{"attack": "ghost", "defend": "bug", "effectiveness": 1}
{"attack": "ghost", "defend": "rock", "effectiveness": 1}
{"attack": "ghost", "defend": "ghost", "effectiveness": 2}
{"attack": "ghost", "defend": "dragon", "effectiveness": 1}
{"attack": "dragon", "defend": "normal", "effectiveness": 1}
{"attack": "dragon", "defend": "fire", "effectiveness": 1}
{"attack": "dragon", "defend": "water", "effectiveness": 1}
{"attack": "dragon", "defend": "electric", "effectiveness": 1}
{"attack": "dragon", "defend": "grass", "effectiveness": 1}
{"attack": "dragon", "defend": "ice", "effectiveness": 1}
{"attack": "dragon", "defend": "fighting", "effectiveness": 1}
{"attack": "dragon", "defend": "poison", "effectiveness": 1}
{"attack": "dragon", "defend": "ground", "effectiveness": 1}
{"attack": "dragon", "defend": "flying", "effectiveness": 1}
{"attack": "dragon", "defend": "psychic", "effectiveness": 1}
{"attack": "dragon", "defend": "bug", "effectiveness": 1}
{"attack": "dragon", "defend": "rock", "effectiveness": 1}
{"attack": "dragon", "defend": "ghost", "effectiveness": 1}
{"attack": "dragon", "defend": "dragon", "effectiveness": 2}