#include <stdio.h>

const char* items[] = {
		"BERRY",
		"PRZCUREBERRY",
		"MINT BERRY",
		"ICE BERRY",
		"BURNT BERRY",
		"PSNCUREBERRY",
		"GUARD SPEC",
		"X DEFENSE",
		"X ATTACK",
		"BITTER BERRY",
		"DIRE HIT",
		"X SPECIAL",
		"X ACCURACY",
		"EON MAIL",
		"MORPH MAIL",
		"MUSIC MAIL",
		"MIRACLEBERRY",
		"GOLD BERRY",
		"REVIVE",
		"GREAT BALL",
		"SUPER REPEL",
		"MAX REPEL",
		"ELIXIR",
		"ETHER",
		"WATER STONE",
		"FIRE STONE",
		"LEAF STONE",
		"THUNDERSTONE",
		"MAX ETHER",
		"MAX ELIXIR",
		"MAX REVIVE",
		"SCOPE LENS",
		"HP UP",
		"PP UP",
		"RARE CANDY",
		"BLUESKY MAIL",
		"MIRAGE MAIL"
	};

const char* decorations[] = {
		"JIGGLYPUFF DOLL",
		"POLIWAG DOLL",
		"DIGLETT DOLL",
		"STARYU DOLL",
		"MAGIKARP DOLL",
		"ODDISH DOLL",
		"GENGAR DOLL",
		"SHELLDER DOLL",
		"GRIMER DOLL",
		"VOLTORB DOLL",
		"CLEFAIRY POSTER",
		"JIGGLYPUFF POSTER",
		"SUPER NES",
		"WEEDLE DOLL",
		"GEODUDE DOLL",
		"MACHOP DOLL",
		"MAGNAPLANT",
		"TROPICPLANT",
		"NES",
		"NINTENDO 64",
		"BULBASAUR DOLL",
		"SQUIRTLE DOLL",
		"PINK BED",
		"POLKADOT BED",
		"RED CARPET",
		"BLUE CARPET",
		"YELLOW CARPET",
		"GREEN CARPET",
		"JUMBOPLANT",
		"VIRTUAL BOY",
		"BIG ONIX DOLL",
		"PIKACHU POSTER",
		"BIG LAPRAS DOLL",
		"SURF PIKACHU DOLL",
		"PIKACHU BED",
		"UNOWN DOLL",
		"TENTACOOL DOLL",
};

int is_valid_item(unsigned int ID, unsigned char item) {
	if (ID > 0xFFFF) {
		return 0;
	}
	if (item >= 0x18 && item < 0x20) {
		return (item & 0x07) == ((ID>>12) & 0x07);
	}else if (item < 0x22) {
		int pos = (((item>>1)+7)&0x07) | ((item>>1)&0x08) | ((item>>2)&0x08);
		return (item & 0x01) == ((ID>>pos) & 0x01);
	}else{
		return 0;
	}
}

int is_valid_deco(unsigned int ID, unsigned char deco) {
	if (ID > 0xFFFF) {
		return 0;
	}
	return is_valid_item(((ID&0xFF)<<8)|(ID>>8), deco);
}

const char* frequency(unsigned int gift) {
	if (gift < 0x10) return "often";
	if (gift < 0x18) return "sometimes";
	if (gift < 0x22) return "rare";
	return "never";
}

int main() {
	unsigned int ID;
	while (1) {
		printf("Please enter trainer ID [00000-65535]: ");
		if (scanf("%u",&ID)<1) {
			scanf("%*s");
			printf("invalid ID\n");
			continue;
		}
		if (ID > 0xFFFF) {
			printf("invalid ID\n");
			continue;
		}
		break;
	}
	for (int i=0; i<0x22; i++) {
		printf("%17s: %s\n",items[i],is_valid_item(ID, i)?frequency(i):"no");
	}
	printf("\n");
	for (int i=0; i<0x22; i++) {
		printf("%17s: %s\n",decorations[i],is_valid_deco(ID, i)?frequency(i):"no");
	}
	return 0;
}
