http://www.cs.wisc.edu/~fliu/Course/cs777/p2/micon2.htm