#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.38.0.8942.247e17422 modeling language!


class Student:
    def __init__(self, aNumber, *allMentors):
        self._number = aNumber
        self._canSetMentors = True
        self._mentors = []
        if not self._setMentors(*allMentors):
            raise RuntimeError("Unable to create Student, must have 3 or fewer mentors, no duplicates. See https://manual.umple.org?RE001ViolationofImmutability.html")

    def getNumber(self):
        return self._number

    def getMentor(self, index):
        return self._mentors[index]

    def getMentors(self):
        return tuple(self._mentors)

    def numberOfMentors(self):
        return len(self._mentors)

    def hasMentors(self):
        return len(self._mentors) > 0

    def indexOfMentor(self, aMentor):
        return next((i for i, x in enumerate(self._mentors) if x is aMentor), -1)

    @staticmethod
    def minimumNumberOfMentors():
        return 0

    @staticmethod
    def maximumNumberOfMentors():
        return 3

    def _setMentors(self, *newMentors):
        if not self._canSetMentors:
            return False
        self._canSetMentors = False
        if len({id(aMentor) for aMentor in newMentors}) != len(newMentors):
            return False
        if len(newMentors) > __class__.maximumNumberOfMentors():
            return False
        self._mentors = list(newMentors)
        return True

    def delete(self):
        pass

    def __str__(self):
        return (super().__str__() + "["
                + "number:" + str(self.getNumber())
                + "]")

#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.38.0.8942.247e17422 modeling language!


class Mentor:
    def __init__(self, aName):
        self._name = aName

    def getName(self):
        return self._name

    def delete(self):
        pass

    def __str__(self):
        return (super().__str__() + "["
                + "name:" + str(self.getName())
                + "]")