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. lettere : array[1..26,1..26] of boolean;
  6. visited : array [1..26] of boolean;
  7. risposta: string;
  8. ciclo : boolean;
  9.  
  10. procedure DFS(u: Integer);
  11. var v: Integer;
  12. begin
  13. visited[u]:=True; write (u, ' ');
  14. for v:=1 to 26 do if ciclo=false then begin if (lettere[u,v] = true) and (not visited[v]) then begin writeln (v);DFS(v); end
  15. else if (lettere[u,v] = true) and (visited[v] = true) then ciclo:=true; end
  16. else exit;
  17. writeln(ciclo);
  18. end;
  19.  
  20. begin
  21. readln(N);
  22. for i:=1 to N do readln(S[i]);
  23. for i:=1 to N do begin A[i]:=S[i][1]; SY[i]:=S[i][3]; B[i]:=S[i][5];end;
  24. for i:=1 to 26 do
  25. for j:=1 to 26 do lettere[i, j]:=false;
  26. for i:=1 to 26 do visited[i]:=false;
  27. ciclo := false;
  28. for i:=1 to N do
  29. begin
  30. if SY[i]='<' then lettere[ord(A[i])-96, ord(B[i])-96] := true
  31. else if SY[i]='>' then lettere[ord(B[i])-96, ord(A[i])-96] :=true;
  32. end;
  33. DFS(1);
  34. if ciclo=true then risposta:=':('
  35. else risposta:=':)';
  36. writeln(risposta);
  37. end.
  38. begin if SY[i]='<' then lettere[ord(A[i])-96]:=lettere[ord(A[i])-96]+1
  39. else lettere[ord(B[i])-96]:=lettere[ord(B[i])-96]+1; end;
  40. risposta:=':('; count:=0;
  41. for i:=1 to 26 do if lettere[i]=0 then count:=count+1;
  42. for i:=1 to 26 do if (lettere[i]<=2) and (26-count<=N-1) then risposta:=':)';
  43. writeln(risposta);
  44. end.
  45.  
  46.  
  47.  
  48.  
  49. procedure DFS(u: Integer);
  50. var v: Integer;
  51. begin
  52. visited[u]:=True; writeln(u);
  53. for v:=1 to n do if adj[u,v] and (not visited[v]) then DFS(v);
  54. end;
  55.  
  56. begin
  57. (* your code goes here *)
  58. end.
Success #stdin #stdout 0s 5312KB
stdin
3
a < b
b < c
a > c
stdout
1 2
2 3
3 :(