I'm really interested in this project. I have this project solved in C#, so i just need to put it on Java, and write a documentation for you.
I was an olympic in algorithm contests at highschool(and faculty too), so i can explain all these things well to you.