Contributed by Florian Hardwig
Contributed by Yury Ostromentsky
Contributed by Adelina Shaydullina
Contributed by Christoffer Leka