def steep_step_verbose(f, values, x, y, h):
    (xi, yi) = values
    dfdx = Derivative(f,x).doit()
    print('df/dx: ' + str(dfdx))
    dfdx = dfdx.evalf(subs = {x:xi, y:yi})
    print('df/dx @ ' + str(values) + ': ' + str(dfdx))
    dfdy = Derivative(f,y).doit()
    print('df/dy: ' + str(dfdy))
    dfdy = dfdy.evalf(subs = {x:xi, y:yi})
    print('df/dy @ ' + str(values) + ': ' + str(dfdy))
    xnew = xi + dfdx*h
    print('x = ' + str(xnew))
    ynew = yi + dfdy*h
    print('y = ' + str(ynew))
    g = f.subs(x, xnew)
    g = g.subs(y,ynew)
    print('g(h) = ' + str(g))
    dgdh = Derivative(g,h).doit()
    print("g'(h) = " + str(dgdh))
    H = solve(dgdh, h)
    print('Solutions of h: ' + str(len(H)))
    H = H[0]
    print('h* = ' + str(H))
    xnew = xi + dfdx*H
    ynew = yi + dfdy*H
    print('(x,y) = ' + str((xnew, ynew)))
    return (xnew, ynew)