http://golovolomka.hobby.ru/math/hard.shtml