- use non-growable list for char maters (faster)
- split ordering into multiple files
- optimize binary search
- futher simplified binary search