============================================================
 LIST OPERATIONS TOOLKIT - Demo Run
============================================================

Base list: [5, 2, 9, 1, 7, 3, 8, 4, 6, 0]
  First 3 slice: [5, 2, 9]
  Last 3 slice: [4, 6, 0]
  Every other: [5, 9, 7, 8, 6]

--- Add/remove operations ---
  add_at_end([1, 2, 3], 4) -> [1, 2, 3, 4]
  add_at_position([1, 2, 3, 4], 0, 99) -> [99, 1, 2, 3, 4]
  remove_by_value([99, 1, 2, 3, 4], 99) -> [1, 2, 3, 4]

--- Sorted versions (non-mutating) ---
  ascending=[1, 2, 5, 9], descending=[9, 5, 2, 1]

--- Second largest/smallest ---
  second_largest_smallest([5,2,9,1,9,2]) = (5, 2)

--- Aliasing pitfall demonstration ---
  Aliased list DID affect 'original': True
  .copy() correctly kept 'original2' independent: True

--- Remove duplicates, preserve order ---
  remove_duplicates_preserve_order([3,1,3,2,1,4]) = [3, 1, 2, 4]

--- Merge two sorted lists ---
  merge_sorted_lists([1,3,5],[2,4,6]) = [1, 2, 3, 4, 5, 6]

--- Edge cases ---
  remove_duplicates_preserve_order([]) = []
  merge_sorted_lists([], [1,2]) = [1, 2]

============================================================
 Assignment: rotate_list
============================================================
  rotate_list([1,2,3,4,5], 2) = [4, 5, 1, 2, 3]
  rotate_list([1,2,3,4,5], 7) = [4, 5, 1, 2, 3]  (7 mod 5 = 2, same as above)
