Author: Nikolaev Vsevolod.