Source: https://home.mis.u-picardie.fr/~furst/docs/Patterns.pdf