некоторые наработки, основной алгоритм