pub fn to_string<T: std::fmt::Display>(x: T) -> String {
x.to_string()
}
pub fn length<T>(v: &[T]) -> usize {
v.len()
}
pub fn append<T: Clone>(v: &mut Vec<T>, value: T) {
v.push(value);
}
pub fn extend<T: Clone>(v: &mut Vec<T>, values: &[T]) {
v.extend_from_slice(values);
}
pub fn push_front<T: Clone>(v: &mut Vec<T>, value: T) {
v.insert(0, value);
}
pub fn pop<T>(v: &mut Vec<T>) -> Option<T> {
v.pop()
}
pub fn remove<T>(v: &mut Vec<T>, index: usize) -> Option<T> {
if index < v.len() {
Some(v.remove(index))
} else {
None
}
}