program paradox;
var n, i :integer;
S: array[1..325] of string;
A,B,SY: array [1..325] of char;
nodo, gsize : array[1..26] of integer;
lettere : array[1..27] of array of integer;
recStack, visited : array [1..26] of boolean; (*visited[] per tenere traccia se un nodo è stato visitato; recStack[] per tenere traccia se un nodo è stato visitato*)
risposta: string;
ciclo : boolean;
function isCyclic (u :integer) : boolean;
var v :integer;
begin
if recStack[u] then begin isCyclic:=true; ciclo:=true; exit; end; (*ciclo rilevato*)
if visited[u] then isCyclic:=false; (*nessun ciclo attraverso questo vertice*)
visited[u]:=true; (*Contrassegna u come visitato*)
recStack[u]:=true; (*Aggiungere u allo stack di ricorsione*)
if gsize[u]>0 then for v:=1 to gsize[u]+1 do if isCyclic(lettere[u][v]) then isCyclic:=true; (*Per ogni vicino v del vertice u chiama ricors dfs(v). Se la chiamata ricorsiva restituisce True, restituisce True(ciclo rilevato).*)
recStack[u]:=false; (*Rimuovi u dallo stack di ricorsione*)
isCyclic:=false; (*nessun ciclo rilevato tramite questo percorso*)
end;
begin
readln(N);
for i:=1 to N do readln(S[i]);
for i:=1 to N do begin A[i]:=S[i][1]; SY[i]:=S[i][3]; B[i]:=S[i][5];end;
for i:=1 to 26 do visited[i]:=false;
for i:=1 to 26 do recStack[i]:=false;
for i:=1 to 27 do
begin
setlength(lettere[i],0);
(* all’inizio, la lista di adiacenza del nodo i ha dimensione 0*)
gsize[i] := 0;
end;
for i:=1 to N do
begin
if SY[i]='<' then begin gsize[ord(A[i])-96]:=gsize[ord(A[i])-96]+1; setlength(lettere[ord(A[i])-96], gsize[ord(A[i])-96]); lettere[ord(A[i])-96][gsize[ord(A[i])-96]]:= ord(B[i])-96; end
else if SY[i]='>' then begin gsize[ord(B[i])-96]:=gsize[ord(B[i])-96]+1; setlength(lettere[ord(B[i])-96], gsize[ord(B[i])-96]);lettere[ord(B[i])-96][gsize[ord(B[i])-96]]:= ord(A[i])-96; end;
end;
for i:=1 to 26 do nodo[i]:=0;
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;
for i:=1 to 26 do
if (nodo [i]<>0) then begin
if (visited[i]=false) and (isCyclic(i)) then ciclo:=true
else if (visited[i]=false) and (isCyclic(i)=false) then ciclo:=false; end;
if ciclo=true then risposta:=':('
else risposta:=':)';
writeln(risposta);
end.