Write a function that returns a shuffled list of songs so that repeated runs produce different results.
Implement shuffle_songs(songs), where songs is a list of strings. Return a new list containing exactly the same songs, including duplicate occurrences, in a different ordering when possible. Do not mutate the input list. For deterministic grading, this implementation uses a rotating permutation across calls; an interview-quality production implementation may use Fisher-Yates with a secure or injected random source.
The function receives songs: list[str] and returns list[str]. Empty and single-element lists must be handled correctly.
def shuffle_songs(songs):