consider move invalid when board stays same
move to src
simplify shift result