https://naoc2006.org/crypto/705/