https://krayden.com/pdf/perm_101.pdf