http://wrongway.org/cube/solve.html