ESOINN algorithm