class _Version:
    def __init__(
            self,
            major: int, minor: int,
            patch: int, build: int
    ):
        assert (
                type(major) == int and major >= 0 and
                type(minor) == int and minor >= 0 and
                type(patch) == int and patch >= 0 and
                type(build) == int and build >= 0
        )
        self.__major: int = major
        self.__minor: int = minor
        self.__patch: int = patch
        self.__build: int = build
    
    def major(self) -> int:
        return self.__major
    
    def minor(self) -> int:
        return self.__minor
    
    def patch(self) -> int:
        return self.__patch
    
    def build(self) -> int:
        return self.__build
    
    def __str__(self) -> str:
        return "%d.%d.%d.%d" % (
            self.major(), self.minor(),
            self.patch(), self.build()
        )
    
    def __repr__(self) -> str:
        return "Version: %s" % str(self)


def get_version() -> _Version:
    return _Version(0, 0, 0, 20200724)
