{$N+,E-}
program checker;


const
  ERR_OK = 0;
  ERR_PE = 2;
  ERR_WA = 1;

  KMAX = 1000;
  NMAX = 1000;

var
  finp, fout, fans: Text;
  sans, sout, buf: String;
  
  w: array[1..KMAX] of String[20];
  N,K,i,i_ans,j: Integer;
  np,nw,nw_ans: Integer;

  bufs: array[1..3] of String;
  nbufs: Integer;
    
procedure ReturnValue(ErrCode: Integer);
begin
  if ErrCode = ERR_PE then writeln('PE') else
  if ErrCode = ERR_WA then writeln('WA') else
  writeln('OK');

  halt(ErrCode);
end;

function find(s: String):boolean;
var
  l,r,m: Integer;
begin
  l := 1;
  r := K;
  while l<=r do
  begin
    m := (l+r) div 2;
    if w[m]=s then begin find:=true; exit; end;
    if w[m]<s then l:=m+1 else r:=m-1;
  end;
  find:=false;
end;

begin

  assign(finp,ParamStr(1));
  reset(finp);
  assign(fans,ParamStr(3));
  reset(fans);
  assign(fout,ParamStr(2));
  {$i-}
  reset(fout);
  if IOResult<>0 then ReturnValue(ERR_PE);
  {$i+}

  readln(finp,K);
  for i:=1 to K do readln(finp,w[i]);

  while not eof(fans) do
  begin    
    readln(fans,sans);
    {$i-}
    readln(fout,sout);
    if IOResult<>0 then ReturnValue(ERR_WA);
    {$i+}

    {слово и два целых, разделённые одним пробелом}
    i:=1;
    np:=0;
    while (i<=length(sans)) and (NP<3) do
    begin
      if i>length(sout) then ReturnValue(ERR_WA);
      if sans[i]<>sout[i] then ReturnValue(ERR_WA);
      if sans[i]=' ' then inc(NP);
      inc(i);
    end;
    if Copy(sans,i,11)='NO VARIANTS' then
    begin
      if Copy(sout,i,11)<>'NO VARIANTS' then ReturnValue(ERR_WA);
      if length(sout)-i+1-11 > 0 then ReturnValue(ERR_PE);
      continue;
    end;

    i_ans := i;

    {считываем до трёх слов из sout}
    nbufs := 0;
    nw := 0;
    while (nw<3) and (i<=length(sout)) do
    begin
      buf := '';
      while (i<=length(sout)) and (sout[i] in ['A'..'Z','a'..'z']) do 
      begin
        buf := buf+sout[i];
        inc(i);
      end;
      {одинаковых слов быть не должно}
      for j:=1 to nbufs do if bufs[j]=buf then ReturnValue(ERR_WA);
      inc(nbufs);
      bufs[nbufs] := buf;
      inc(nw);
      if nw=3 then break;
      {после первого и второго слова должен быть пробел либо конец строки}
      if nw<3 then
        if (i<=length(sout)) and (sout[i]<>' ') then ReturnValue(ERR_PE);
      {слово должно быть в словаре}
      if not find(buf) then ReturnValue(ERR_WA);
      inc(i); {к началу очередного слова}
    end;

    {если больше трёх слов}
    if (i<length(sout)) then
      if Copy(sout,i,3)='...' then
      begin
        if Pos('...',sans)=0 then ReturnValue(ERR_WA);
        if length(sout)-i+1-3 > 0 then ReturnValue(ERR_PE);
        continue;
      end;

    {если у нас больше трёх слов, а в ответе - нет}
    if Pos('...',sans) > 0 then ReturnValue(ERR_WA);

    {Считаем, сколько слов у нас}
    i := i_ans;
    nw_ans := 0;
    while i<=length(sans) do
    begin
      while (i<=length(sans)) and (sans[i] in ['A'..'Z','a'..'z']) do inc(i);
      inc(nw_ans);
      inc(i);  {к началу очередного слова}
    end;

    {Если число слов не совпадает}
    if nw_ans<>nw then ReturnValue(ERR_WA);

  end;

  {больше в файле ничего быть не должно}
  if not seekeof(fout) then ReturnValue(ERR_WA);

  ReturnValue(ERR_OK);


end.
