// Reverse returns a new slice with the elements of the input slice in reverse order.
func Reverse[T any](arr []T) []T {
n := len(arr)
reversed := make([]T, n) // Create a new slice of the same length
for i := 0; i < n; i++ {
reversed[i] = arr[n-1-i] // Copy elements from end to start
}
return reversed
}