{$apptype console}

// Задача "Ничего и не терялось"
// 8-ая Интернет-олимпиада сезона 2006-2007, базовый уровень
// Автор условия: Федор Царев, tsarev@rain.ifmo.ru
// Автор решения: Максим Буздалов, buzdalov@rain.ifmo.ru

// Использует массивы строк, хранимые в отсортированном виде.
// Использует сортировку вставками при добавлении строки в массив, чтобы избежать пересортировки при выводе.
// Быстрое.

program giggle_insertion;

uses sysutils;

type Tokenizer = object
    data: string;
    pos: integer;
    len: integer;

    constructor create(var s: string);
    function next: string;
end;

constructor Tokenizer.create(var s: string);
begin
    data := s;
    pos := 0;
    len := length(data);
end;

function Tokenizer.next: string;
var
    i: integer;
begin
    i := pos + 1;
    while (i <= len) and (data[i] <> ' ') do inc(i);
    result := copy(data, pos + 1, i - pos - 1);
    pos := i;
end;

var
    kwds:  array [1..2500] of string;
    sites: array [1..2500, 1..2500] of string;
    sizes: array [1..2501] of integer;

    line, command, keyword, site: string;
    ln: Tokenizer;

    i, j, k: integer;

    n: integer;
    kwdCnt: integer;
    cont: boolean;

function find(var s: string): integer;
var
    i: integer;
begin
    result := kwdCnt + 1;
    for i := 1 to kwdCnt do begin
        if kwds[i] = s then begin
            result := i;
            exit;
        end;
    end;
end;

begin
    reset(input, 'giggle.in');
    rewrite(output, 'giggle.out');

    readln(n);
    kwdCnt := 0;

    for k := 1 to n do begin
        readln(line);
        ln.create(line);
        command := ln.next;
        if command = 'Add' then begin
            ln.next; //keyword
            keyword := ln.next;
            ln.next; //to
            site := ln.next;

            j := find(keyword);
            if j > kwdCnt then begin
                inc(kwdCnt);
                kwds[j] := keyword;
            end;

            cont := true;
            for i := 1 to sizes[j] do begin
                if sites[j][i] = site then begin
                    cont := false;
                    break;
                end;
            end;

            if cont then begin
                inc(sizes[j]);
                i := sizes[j];
                while (i > 1) and (sites[j][i - 1] > site) do begin
                    sites[j][i] := sites[j][i - 1];
                    dec(i);
                end;
                sites[j][i] := site;

                writeln('OK');
            end else begin
                writeln('Already exists');
            end;
        end else if command = 'Remove' then begin
            ln.next; //keyword
            keyword := ln.next;
            ln.next; //to
            site := ln.next;            

            j := find(keyword);
            if j > kwdCnt then begin
                writeln('Not found');
            end else begin
                i := 1;
                while (i <= sizes[j]) and (sites[j][i] <> site) do inc(i);
                if i > sizes[j] then begin
                    writeln('Not found');
                end else begin
                    while (i < sizes[j]) do begin 
                        sites[j][i] := sites[j][i + 1]; 
                        inc(i); 
                    end;
                    dec(sizes[j]);

                    writeln('OK');
                end;
            end;
        end else if command = 'Search' then begin
            keyword := ln.next;

            j := find(keyword);

            writeln('Results: ', sizes[j], ' site(s) found'); 
            i := 1;
            while (i <= 10) and (i <= sizes[j]) do begin
                writeln (i, ') ', sites[j][i]);
                inc(i);
            end;
        end;
        if k <> n then writeln('=====');
    end;
end.
