https://shikhalev.github.io/1996/10/cut.html