def get_readable_duration(seconds: int):
    """
    >>> get_readable_duration(86401)
    '1d:0h:0m:1s'

    >>> get_readable_duration(100)
    '1m:40s'

    >>> get_readable_duration(3)
    '3s'
    """
    if seconds is None:
        return "?"
    if seconds < 0:
        return "In the future..."

    if seconds < 1:
        return '<1s'

    intervals = [
        (365 * 86400, "y"),
        (7 * 86400, 'w'),
        (86400, 'd'),
        (3600, 'h'),
        (60, 'm'),
        (1, 's'),
    ]

    periods = []
    has_seen_value = False
    for interval, suffix in intervals:
        if interval > seconds and not has_seen_value:
            continue
        has_seen_value = True
        intervals, seconds = divmod(seconds, interval)
        periods.append(f'{intervals}{suffix}')

    # weird if we get to here, but sure
    return ":".join(periods)