supports solve function