split from toysolver package