Contributed by Yury Ostromentsky
Contributed by Kirill Gluschenko
Contributed by Yevgeniy Anfalov
Contributed by Threedotstype