Файлы построчно считываются в списки, каждый в свой. Все строки из первого файла переносятся в итоговый список: повторяющиеся в файле 2 - с меткой SAME, не повторяющиеся - с меткой REMOVED. Каждая строка из файла 2, не встречающаяся в файле 1, заносится в итоговый список с меткой ADDED на позицию, следующую за строкой с меткой SAME, которая в файле 2 непосредственно предшествует данной строке.