https://abakdash.com/ar/2007/09/03/principles-of-constraint-programming/