func (s *Bits) FlipAll() {
	*s = ^(*s)
}
FlipAll flip all bits
package bitset
type Bits uint64
func NewBits() *Bits {
	var s Bits
	return &s
}
func BitsList(bits ...uint) *Bits {
	var s uint64
	for _, b := range bits {
		s |= uint64(1 << b)
	}
	return ((*Bits)(&s))
}
func BitsFrom(b uint) *Bits {
	var s Bits = Bits(b)
	return &s
}
func (s *Bits) Set(index uint) {
	*s |= 1 << index
}
func (s *Bits) SetAll() {
	*s = 1<<64 - 1
}
func (s *Bits) Unset(index uint) {
	*s &= ^(1 << index)
}
func (s *Bits) UnsetAll() {
	*s = 0
}
func (s *Bits) IsSet(index uint) bool {
	return *s&(1<<index) != 0
}
func (s *Bits) SetTo(index uint, val bool) {
	if val {
		s.Set(index)
	} else {
		s.Unset(index)
	}
}
func (s *Bits) Flip(index uint) {
	*s ^= (1 << index)
}