all subroutines are talking to eachother, printing out results, refactored, much more descriptive naming. make input and output in derivs less annoying by making an object for that