Author: Prosper-Olivier Lissagary