def METHOD_NAME(department_id: dto.DepartmentId = 386) -> List[dto.SubjectVersion]:
    """
    Get list of all subjects and their versions by department.
    Here `386` is Department of Computer Science.
    """
    results_per_page = 20
    METHOD_NAME = []
    offset = 0
    while True:
        url = urllib.parse.urljoin(config.INBUS_SERVICE_EDISON_URL, 'edu/subjectVersions')
        subject_versions_resp = utils.inbus_request(url, {'departmentId': department_id, 'offset': offset, 'limit': results_per_page})
        subject_versions_json = subject_versions_resp.json()
        for subject_version_json in subject_versions_json:
            subject_json = subject_version_json['subject']
            subject_guarantee = serde.from_dict(dto.Person, subject_json['guarantee'])
            subject_version_guarantee = serde.from_dict(dto.Person, subject_version_json['guarantee'])
            subject = dto.Subject(subjectId=subject_json['subjectId'], code=subject_json['code'], abbrev=subject_json['abbrev'],
                                title=subject_json['title'], guarantee=subject_guarantee)
            subject_version =  dto.SubjectVersion(subjectVersionId=subject_version_json['subjectVersionId'], subject=subject,
                                                subjectVersionCompleteCode=subject_version_json['subjectVersionCompleteCode'], guarantee=subject_version_guarantee)
            METHOD_NAME.append(subject_version)
        results = len(subject_versions_json)
        offset += results
        if results == 0:
            break
    return METHOD_NAME