fn copy_vec(mut to: Vec<i32>, from: Vec<i32>) -> Vec<i32> {
    for i in 0 .. from.len() {
        to.push(from[i]);
    }
    to
}

fn main() {
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];
    let vec3 = copy_vec(vec1, vec2);
    println!("{:?}", vec3);
}

// Exercise 1. Convert `copy_vec` to use borrowing
// rather than taking ownership.

// Exercise 2. What happens if you try to call your
// new borrowing version of `copy_vec` with the same
// vector for both arguments (e.g., `copy_vec(&mut vec1, &vec1)`).
// Why? What bug is being prevented here?