fork download
  1. program paradox;
  2. var n, i, j, count:integer;
  3. S: array[1..325] of string;
  4. A,B,SY: array [1..325] of char;
  5. nodo : array[1..26] of integer;
  6. lettere : array[1..26,1..26] of boolean;
  7. recStack, visited : array [1..26] of boolean;
  8. risposta: string;
  9. ciclo : boolean;
  10.  
  11. function isCyclic (u :integer) : boolean;
  12. var v :integer;
  13. begin
  14. if recStack[u] then begin isCyclic:=true; ciclo:=true; exit; end;
  15. if visited[u] then isCyclic:=false;
  16. visited[u]:=true;
  17. recStack[u]:=true;
  18. for v:=1 to 26 do if (lettere[u,v] = true) then if isCyclic(v) then isCyclic:=true;
  19. recStack[u]:=false;
  20. isCyclic:=false;
  21. end;
  22.  
  23.  
  24.  
  25. begin
  26. readln(N);
  27. for i:=1 to N do readln(S[i]);
  28. for i:=1 to N do begin A[i]:=S[i][1]; SY[i]:=S[i][3]; B[i]:=S[i][5];end;
  29. for i:=1 to 26 do
  30. for j:=1 to 26 do lettere[i, j]:=false;
  31. for i:=1 to 26 do visited[i]:=false;
  32. for i:=1 to 26 do recStack[i]:=false;
  33.  
  34. for i:=1 to N do
  35. begin
  36. if SY[i]='<' then lettere[ord(A[i])-96, ord(B[i])-96] := true
  37. else if SY[i]='>' then lettere[ord(B[i])-96, ord(A[i])-96] :=true;
  38. end;
  39. for i:=1 to 26 do nodo[i]:=0;
  40. for i:=1 to N do begin nodo[ord(A[i])-96]:=nodo[ord(A[i])-96]+1; nodo[ord(B[i])-96]:=nodo[ord(B[i])-96]+1; end;
  41. for i:=1 to 26 do
  42. if (nodo [i]<>0) then begin
  43. if (visited[i]=false) and (isCyclic(i)) then ciclo:=true
  44. else if (visited[i]=false) and (isCyclic(i)=false) then ciclo:=false; end;
  45.  
  46. if ciclo=true then risposta:=':('
  47. else risposta:=':)';
  48. writeln(risposta);
  49. end.
Success #stdin #stdout 0s 5320KB
stdin
2
a < b
b < a
stdout
:(