http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html
http://www.cnblogs.com/jin-yuan/p/3823559.html