def secs2human(secs: int) -> str:
    """
    >>> secs2human(777600)
    '1 week & 2 days'

    >>> secs2human(7201)
    '2 hours & 1 second'
    """
    if not isinstance(secs, int):
        breakpoint()
    strings = []
    if secs >= 3600 * 24 * 7 * 52:
        years = int(secs // (3600 * 24 * 7 * 52))
        secs -= years * 3600 * 24 * 7 * 52
        strings.append(str(years) + ' year' + ('s' if years > 1 else ''))
    
    if secs >= 3600 * 24 * 7 * 4:
        months = int(secs // (3600 * 24 * 7 * 4))
        secs -= months * 3600 * 24 * 7 * 4
        strings.append(str(months) + ' month' + ('s' if months > 1 else ''))
    
    if secs >= 3600 * 24 * 7:
        weeks = int(secs // (3600 * 24 * 7))
        secs -= weeks * 3600 * 24 * 7
        strings.append(str(weeks) + ' week' + ('s' if weeks > 1 else ''))

    if secs >= 3600 * 24:
        days = int(secs // (3600 * 24))
        secs -= days * 3600 * 24
        strings.append(str(days) + ' day' + ('s' if days > 1 else ''))

    if secs >= 3600:
        hours = int(secs // 3600)
        secs -= hours * 3600
        strings.append(str(hours) + ' hour' + ('s' if hours > 1 else ''))

    if secs >= 60:
        mins = int(secs // 60)
        secs -= mins * 60
        strings.append(str(mins) + ' minute' + ('s' if mins > 1 else ''))

    if secs:
        strings.append(str(secs) + ' second' + ('s' if secs > 1 else ''))

    human = ', '.join(strings)[::-1].replace(',', '& ', 1)[::-1]
    return human