class Ulomek():
    """Ulomki, ki se sami okrajšajo."""

    # KONSTRUKTOR, se pokliče, ko naredimo nov objekt razreda Ulomek
    def __init__(self, st, im=1):
        self.st = st # števec
        self.im = im # imenovalec
        self.okrajsaj()

    # Ta metoda vrne niz, ki ga uporabi funkcija str (in tudi print),
    # ko ulomek pretvorimo v string
    def __str__(self):
        return "{0.st}/{0.im}".format(self)

    # Ta metoda vrne niz, ki predstavlja ulomek kot objekt
    def __repr__(self):
        return "Ulomek({0}, {1})".format(self.st, self.im)

    # Običajna funkcija, ne sprejme self
    @staticmethod
    def gcd(a, b):
        """Največji skupni delitelj števil a in b."""
        return (a if b == 0 else Ulomek.gcd(b, a % b))

    def okrajsaj(self):
        """Okrajšaj ulomek."""
        d = Ulomek.gcd(self.st, self.im)
        self.st = self.st // d
        self.im = self.im // d

    def __mul__(self, other):
        return Ulomek(self.st * other.st, self.im * other.im)

    def __add__(self, other):
        return Ulomek(self.st * other.im + other.st * self.im,
                      self.im * other.im)
