implement a*
merge with head
add path finding
gabe merge