final variant with corrected blond mistakes(