program paradox;
var n, i :integer;
S: array[0..324] of string;
A,B,SY: array [0..324] of char;
nodo, gsize : array[0..25] of integer;
lettere : array[0..25] of array of integer;
recStack, visited : array [0..25] 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*)
for v:=0 to gsize[u]-1 do if isCyclic(lettere[u][v]) then isCyclic:=true; (*Per ogni vicino v del vertice u chiama ricorsiv 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:=0 to N-1 do readln(S[i]);
for i:=0 to N-1 do begin A[i]:=S[i][1]; SY[i]:=S[i][3]; B[i]:=S[i][5];end;
for i:=0 to 25 do visited[i]:=false;
for i:=0 to 25 do recStack[i]:=false;
for i:=0 to 25 do
begin
setlength(lettere[i], 1);
(* all’inizio, la lista di adiacenza del nodo i ha dimensione 0*)
gsize[i] := 0;
end;
for i:=0 to N-1 do
begin
if SY[i]='<' then begin gsize[ord(A[i])-97]:=gsize[ord(A[i])-97]+1; setlength(lettere[ord(A[i])-97], gsize[ord(A[i])-97]); lettere[ord(A[i])-97][gsize[ord(A[i])-97]-1]:= ord(B[i])-97; end
else if SY[i]='>' then begin gsize[ord(B[i])-97]:=gsize[ord(B[i])-97]+1; setlength(lettere[ord(B[i])-97], gsize[ord(B[i])-97]);lettere[ord(B[i])-97][gsize[ord(B[i])-97]-1]:= ord(A[i])-97; end;
end;
for i:=0 to 25 do nodo[i]:=0;
for i:=0 to N-1 do begin nodo[ord(A[i])-97]:=nodo[ord(A[i])-97]+1; nodo[ord(B[i])-97]:=nodo[ord(B[i])-97]+1; end;
for i:=0 to 25 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.