Contributed by Pavel Kedich
Contributed by Elena Donets
Contributed by Kirill Gluschenko
Contributed by Yury Ostromentsky