func Pop(a []string) (string, []string) {
	return a[len(a)-1], a[:len(a)-1]
}
Pop removes the last element from a, returning an updating slice
package slice
import (
	"reflect"
	"sort"
)
func Any(s []string, fn func(string) bool) bool {
	return IndexFunc(s, fn) != -1
}
func All(s []string, fn func(string) bool) bool {
	return IndexFunc(s, func(e string) bool { return !fn(e) }) == -1
}
func IndexFunc(s []string, fn func(string) bool) int {
	for i, e := range s {
		if fn(e) {
			return i
		}
	}
	return -1
}
func Index(s []string, e string) int {
	return IndexFunc(s, func(el string) bool { return el == e })
}
var (
	zero    string
	needsGC = typeNeedsGC(reflect.TypeOf(zero))
)
func typeNeedsGC(t reflect.Type) bool {
	switch t.Kind() {
	case reflect.Map, reflect.Interface, reflect.Ptr, reflect.Chan, reflect.Slice:
		return true
	case reflect.Struct:
		n := t.NumField()
		for i := 0; i < n; i++ {
			if typeNeedsGC(t.Field(i).Type) {
				return true
			}
		}
		return false
	default:
		return false
	}
}
func Cut(a []string, i, j int) []string {
	if !needsGC {
		return append(a[:i], a[j:]...)
	}
	copy(a[i:], a[j:])
	for k, n := len(a)-j+i, len(a); k < n; k++ {
		a[k] = zero
	}
	return a[:len(a)-j+i]
}
func Delete(a []string, i int) []string {
	return Cut(a, i, i+1)
}
func DeleteUnordered(a []string, i int) []string {
	a[i] = a[len(a)-1]
	a[len(a)-1] = zero
	return a[:len(a)-1]
}
func Insert(a []string, v string, i int) []string {
	a = append(a, zero)
	copy(a[i+1:], a[i:])
	a[i] = v
	return a
}
func InsertSlice(a []string, v []string, i int) []string {
	return append(a[:i], append(v, a[i:]...)...)
}
func Push(a []string, v string) []string {
	return append(a, v)
}