def get_distributed(songs):
    """Return an evenly mixed list of songs from several lists.

    For three playlists, it will start with the first song from the first list,
    followed by the one from the second and the third. Then it will continue
    with the second song from the first, second and third list, and so on.

    Parameters
    ----------
    songs : list
        The list of lists containing the songs

    Returns
    -------
    list
        The list of all combined songs

    """
    # Get total number of songs
    total_songs = sum(len(sublist) for sublist in songs)
    distributed = []
    last_next = None
    while len(distributed) < total_songs:
        # Order sublists by their length because we want to reduce the largest
        songs.sort(key=len, reverse=True)
        if songs[0][0] == last_next and len(songs) > 1 and len(songs[1]) > 0:
            # Take song from second largest list if the largest was used before
            # and it's possible to do so
            distributed.append(songs[1][0])
            songs[1].remove(songs[1][0])
            # Remember the next song of this list
            last_next = songs[1][0] if len(songs[1]) > 0 else None
        else:
            # Otherwise, take song from the largest list
            distributed.append(songs[0][0])
            songs[0].remove(songs[0][0])
            # Remember the next song of this list
            last_next = songs[0][0] if len(songs[0]) > 0 else None
    return distributed