class Epitmeny:
    def __init__(self, adosz, utca, hszam, kat, ter):
        self.adosz = adosz
        self.utca = utca
        self.hszam = hszam
        self.kat = kat
        self.ter = ter

    def ado(self) -> int:
        """epitmeny adoja"""
        global adatok
        ado = adatok[0][self.kat] * self.ter
        return [0, ado][ado >= 10000]


class Epitmenyek:
    def __init__(self, kat=None, epitmenyek=None):
        if epitmenyek is None:
            epitmenyek = []
        self.epitmenyek = epitmenyek
        if kat is None:
            kat = {}
        self.kat = kat

    def db(self) -> int:
        """epitmenyek szama"""
        return len(self.epitmenyek)

    def tulajdonok(self, adoszam) -> list:
        """egy adoszamhoz tartozo tulajdonok"""
        return [haz for haz in self.epitmenyek if haz.adosz == adoszam]

    def tulajdonok_kiir(self, adoszam) -> str:
        """egy adoszamhoz tartozo tulajdonok szovegbe"""
        sz = ''
        hazak = self.tulajdonok(adoszam)
        if len(hazak) == 0:
            sz += 'Nem szerepel az adatállományban.'
        else:
            for haz in hazak:
                sz += haz.utca + ' utca ' + haz.hszam + '\n'
        return sz

    def katdb(self) -> dict:
        """egyes adokategoriakba tartozo epitmenyek szama"""
        kdb = {}
        for epitmeny in self.epitmenyek:
            kdb[epitmeny.kat] = kdb.get(epitmeny.kat, 0) + 1
        return kdb

    def adokkat(self) -> dict:
        """epitmenyek adojanak osszege kategoriankent"""
        kossz = {}
        for epitmeny in self.epitmenyek:
            kossz[epitmeny.kat] = kossz.get(epitmeny.kat, 0) + epitmeny.ado()
        return kossz

    def kat_db_ado_kiir(self) -> str:
        """kategoriak darabszama, adoja kiir"""
        sz = ''
        for k in self.kat:
            sz += k + ' sávba ' + str(self.katdb()[k]) + ' telek esik, az adó ' + str(self.adokkat()[k]) + ' Ft.' + '\n'
        return sz

    def hibasutcak(self) -> list:
        """azok az utcak, ahol a tobb kategoria van"""
        utcak = [epitmeny.utca for epitmeny in self.epitmenyek]
        hibas = []
        for ut in set(utcak):
            ka = []
            for epitmeny in self.epitmenyek:
                if epitmeny.utca == ut:
                    ka.append(epitmeny.kat)
            if len(set(ka)) > 1:
                hibas.append(ut)
        return hibas

    def hibasutcak_kiir(self) -> str:
        """azok az utcak, ahol a tobb kategoria van kiir"""
        sz = ''
        for u in self.hibasutcak():
            sz += u + '\n'
        return sz

    def adok(self) -> dict:
        """tulajdonosok adoi"""
        tuladok = {}
        for epitmeny in self.epitmenyek:
            tuladok[epitmeny.adosz] = tuladok.get(epitmeny.adosz, 0) + epitmeny.ado()
        return tuladok

    def adok_kiir(self) -> str:
        """tulajdonosok adoi kiir"""
        sz = ''
        for adosz in self.adok():
            sz += adosz + ' ' + str(self.adok()[adosz]) + '\n'
        return sz


class Fajl:
    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        ado = f.readline().split()
        adok = {'A': int(ado[0]), 'B': int(ado[1]), 'C': int(ado[2])}
        epitmenyek = []
        for sor in f.readlines():
            asz, u, hsz, kat, ter = sor.split()
            epitmenyek.append(Epitmeny(asz, u, hsz, kat, int(ter)))
        f.close()
        return adok, epitmenyek

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w')
        print(adatok, end='', file=f)
        f.close()


# 1. feladat
fajl = Fajl('utca.txt')
adatok = fajl.beolvas()
epitmenyek = Epitmenyek(adatok[0], adatok[1])

# 2. feladat
print("2. feladat. A mintában", epitmenyek.db(), "telek szerepel.")

# 3. feladat
adoszam = input("3. feladat. Egy tulajdonos adószáma: ")
print(epitmenyek.tulajdonok_kiir(adoszam))

# 5. feladat
print("5. feladat")
print(epitmenyek.kat_db_ado_kiir())

# 6. feladat
print("6. feladat. A több sávba sorolt utcák:")
print(epitmenyek.hibasutcak_kiir())

# 6. feladat
print("7. feladat: Fájlbaírása az adóknak")
fajl = Fajl('fizetendoOOP.txt')
fajl.kiir(epitmenyek.adok_kiir())
print("Fájlbaírás kész.")
