public class Solution {
    public static List<LineItem> lines = new ArrayList<LineItem>();
    public static List<String> linesOfFile1 = new ArrayList<>();
    public static List<String> linesOfFile2 = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String file1 = br.readLine();
        String file2 = br.readLine();
        br.close();
        StringBuilder sb = new StringBuilder();
        int byteOfLine;

        try (FileReader fr1 = new FileReader(file1);
             FileReader fr2 = new FileReader(file2)) {
            while (fr1.ready()) { // заполняю linesOfFile1 – прочитанное из файла 1
                byteOfLine = fr1.read();
                if (byteOfLine == '\r') {
                    fr1.read();
                    linesOfFile1.add(sb.toString());
                    sb = new StringBuilder();
                    continue;
                }
                sb.append((char)byteOfLine);
            }
            if (sb.length() != 0) {
                linesOfFile1.add(sb.toString());
                sb = new StringBuilder();
            }
            linesOfFile1.add(""); // для удобства дальнейших расчётов дополняю список пустой строкой

            while (fr2.ready()) { // заполняю linesOfFile2 – прочитанное из файла 2
                byteOfLine = fr2.read();
                if (byteOfLine == '\r') {
                    fr2.read();
                    linesOfFile2.add(sb.toString());
                    sb = new StringBuilder();
                    continue;
                }
                sb.append((char)byteOfLine);
            }
            if (sb.length() != 0)
                linesOfFile2.add(sb.toString());
            linesOfFile2.add("");
        }

        int min = (linesOfFile1.size() < linesOfFile2.size()) ? linesOfFile1.size() : linesOfFile2.size();

        for (int i = 0, j = 0; (i < min) && (j < min); i++, j++) {
            if (linesOfFile1.get(i).equals(linesOfFile2.get(j)))
                lines.add(new LineItem(Type.SAME, linesOfFile1.get(i)));
            else if (j == linesOfFile2.size() - 1)
                break;
            else if (linesOfFile1.get(i).equals(linesOfFile2.get(j + 1))) {
                lines.add(new LineItem(Type.ADDED, linesOfFile2.get(j)));
                lines.add(new LineItem(Type.SAME, linesOfFile1.get(i)));
                j++;
            } else if (i == linesOfFile1.size() - 1)
                break;
            else if (linesOfFile1.get(i + 1).equals(linesOfFile2.get(j))) {
                lines.add(new LineItem(Type.REMOVED, linesOfFile1.get(i)));
                lines.add(new LineItem(Type.SAME, linesOfFile1.get(i + 1)));
                i++;
            }
        }
        if (linesOfFile1.size() == linesOfFile2.size()) // удаляю из lines ранее добавленную пустую строку
            lines.remove(lines.size() - 1);

        if (linesOfFile1.size() > linesOfFile2.size())
            for (int i = linesOfFile2.size(); i < linesOfFile1.size() - 1; i++)
                lines.add(new LineItem(Type.REMOVED, linesOfFile1.get(i)));
        else
            for (int j = linesOfFile1.size(); j < linesOfFile2.size() - 1; j++)
                lines.add(new LineItem(Type.ADDED, linesOfFile2.get(j)));
    }

    public static enum Type {
        ADDED,        //добавлена новая строка
        REMOVED,      //удалена строка
        SAME          //без изменений
    }

    public static class LineItem {
        public Type type;
        public String line;

        public LineItem(Type type, String line) {
            this.type = type;
            this.line = line;
        }
    }
}