

class whatisthere:#Класс проверяет список запросов и обращается к нужным функциям
    def __init__(self, requestlist):
        meetl =  meetlist
        for line in requestlist:
            pareq=line.split()
            if pareq[0]=="APPOINT":

                date = int(pareq[1])
                time = int(pareq[2])
                duration = int(pareq[3])
                pnumber = int(pareq[4])
                plist = pareq[5:]
                meetn = meet(date, time, duration, pnumber, plist)

                meetl.addmit(self, meetn)
            elif pareq[0]=="PRINT":
                    meetl.printmeet(int(pareq[1]), pareq[2])


class meet:#Класс встречи. Сохраняет параметры
    def __init__(self,date,time,duration,pnumber,peoplelist):
        meet.date = date
        meet.time=time
        meet.duration=duration
        meet.pnumber=pnumber
        meet.peoplelist=peoplelist

    def check(self,human): # Если на встрече будет этот человек - то выдать инфу о встрече
        if not human in meet.peoplelist:
            return ""
        else:
            prnt=str(meet.time)+' '+str(meet.date)
            for person in meet.peoplelist:
                prnt+=' '+person
            return prnt



class meetlist:#Класс списка встреч. Проверяет и добавляет новую встречу в список.

    def __init__(self):#Создание списка встреч в объекте
        meetlist.meets=[]

    def addmit(self,meet):#Сравнение добавляемой встречи со списком.
        print (meetlist.meets)
        print (meet)
        if not meetlist.meets:
            meetlist.meets.append(meet)
            return("OK")
        for mrel in self.meets:
            if meet.date==mrel.date:                #Сравниваем даты
                if meetlist.comparetime(meet, mrel):    #Сравниваем время
                    listdiff = meetlist.comparepeople(meet,mrel)#Сравниваем людей
                    if listdiff.count()==0:
                        meetlist.meets.append(meet)
                        return("OK")
                    else:
                        otp="FAIL "
                        for p in listdiff:
                            otp+=' '+p
                        return otp

    def comparetime(self, meet1, meet2): #Сравнение двух встреч по времени. Если пересечение - True
        if (meet1.time<meet2.time and meet1.time + meet1.duration>meet2.time):
            return True
        if (meet2.time<meet1.time and meet2.time + meet2.duration>meet1.time):
            return True
        return True


    def comparepeople(self,meet1,meet2):    #Сравнение по людям. Если пересечение - то список.
        crosslist=[]
        for person in meet1.peoplelist:
            for human in meet2.peoplelist:
                if person==human:
                    crosslist.append(human)

            return crosslist #Возвращаем пересечение двух списков




    def printmeet(self, date, human): #печать информации о встрече

        for meet in meetlist.meets():
            if (meet.date==date):
                meetcheck = meet.check(human)
                if meetcheck!='':
                    print(meetcheck)

breakfast='''7
APPOINT 1 120 30 2 andrey alex
APPOINT 1 130 30 2 alex sergey
APPOINT 1 10 60 2 alex andrey
PRINT 1 alex
PRINT 1 andrey
PRINT 1 sergey
PRINT 2 alex'''
exempl = whatisthere(breakfast)