program cupido;
const
MAXN = 100000;
type elenco=Array[0..MAXN-1] of LongInt;
var
K, N, i ,j, amico,pos : LongInt;
A, B, C, ID : elenco;
Procedure scambia (var a,b: LongInt);
var x:LongInt;
begin
x:=a;
a:=b;
b:=x;
end;
Procedure ordinamento (estremoi,estremos: LongInt; var v : elenco;var u : elenco;var w : elenco;var z : elenco; ordinato:boolean);
var inf, sup, medio:LongInt;
pivot :LongInt;
begin
inf:=estremoi;
sup:=estremos;
medio:= (estremoi+estremos) div 2;
pivot:=v[medio];
repeat
if (ordinato) then
begin
while (v[inf]<pivot) do inf:=inf+1;
while (v[sup]>pivot) do sup:=sup-1;
end;
if inf<=sup then
begin
scambia(v[inf],v[sup]);
scambia(u[inf],u[sup]);
scambia(w[inf],w[sup]);
scambia(z[inf],z[sup]);
inf:=inf+1;
sup:=sup-1;
end;
until inf>sup;
if (estremoi<sup) then ordinamento(estremoi,sup,v,u,w,z,ordinato);
if (inf<estremos) then ordinamento(inf,estremos,v,u,w,z,ordinato);
end;
Procedure ricerca (var t:elenco;amicizia:Longint);
var i,m,inizio,fine: longint;
begin
inizio:=1; fine:=N;
repeat
m:=(inizio + fine) div 2;
if t[m]<=amicizia then inizio:=m+1;
if t[m]>amicizia then fine:=m-1;
until inizio>fine;
if (t[m]<=amicizia) then pos:=m
else pos:=m-1;
end;
begin
{
uncomment the two following lines if you want to read/write from files
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
}
ReadLn(N);
for i:=1 to N do
ReadLn(ID[i], A[i], B[i], C[i]);
K := 0;
ordinamento (1,N,ID,A,B,C, true);
for i:=1 to N do
begin
j:=1;
while j<=3 do
begin
if j=1 then if (A[i]<>-1) and (A[i]>ID[i]) then
begin
amico:=A[i];
ricerca (ID,amico);
if (A[pos]=ID[i]) or (B[pos]=ID[i]) or (C[pos]=ID[i]) then K:=k+1;
end;
if j=2 then if (B[i]<>-1) and (B[i]>ID[i]) then
begin
amico:=B[i];
ricerca (ID,amico);
if (A[pos]=ID[i]) or (B[pos]=ID[i]) or (C[pos]=ID[i]) then K:=k+1;
end;
if j=3 then if (C[i]<>-1) and (C[i]>ID[i]) then
begin
amico:=C[i];
ricerca (ID,amico);
if (A[pos]=ID[i]) or (B[pos]=ID[i]) or (C[pos]=ID[i]) then K:=k+1;
end;
j:=j+1;
end;
end;
WriteLn(K);
end.
cHJvZ3JhbSBjdXBpZG87Cgpjb25zdAogICAgTUFYTiA9IDEwMDAwMDsKdHlwZSBlbGVuY289QXJyYXlbMC4uTUFYTi0xXSBvZiBMb25nSW50Owp2YXIKICAgIEssIE4sIGkgLGosIGFtaWNvLHBvcyAgICA6IExvbmdJbnQ7CiAgICBBLCBCLCBDLCBJRCA6IGVsZW5jbzsKICAgIApQcm9jZWR1cmUgc2NhbWJpYSAodmFyIGEsYjogTG9uZ0ludCk7CnZhciB4OkxvbmdJbnQ7CmJlZ2luCiAgIHg6PWE7CiAgIGE6PWI7CiAgIGI6PXg7CmVuZDsgIApQcm9jZWR1cmUgb3JkaW5hbWVudG8gKGVzdHJlbW9pLGVzdHJlbW9zOiBMb25nSW50OyB2YXIgdiA6IGVsZW5jbzt2YXIgdSA6IGVsZW5jbzt2YXIgdyA6IGVsZW5jbzt2YXIgeiA6IGVsZW5jbzsgb3JkaW5hdG86Ym9vbGVhbik7CnZhciBpbmYsIHN1cCwgbWVkaW86TG9uZ0ludDsKICAgIHBpdm90IDpMb25nSW50OwpiZWdpbgogICAgaW5mOj1lc3RyZW1vaTsKICAgIHN1cDo9ZXN0cmVtb3M7CiAgICBtZWRpbzo9IChlc3RyZW1vaStlc3RyZW1vcykgZGl2IDI7CiAgICBwaXZvdDo9dlttZWRpb107CiAgICByZXBlYXQKICAgICAgaWYgKG9yZGluYXRvKSB0aGVuCiAgICAgICAgIGJlZ2luCiAgICAgICAgICAgIHdoaWxlICh2W2luZl08cGl2b3QpIGRvICBpbmY6PWluZisxOwogICAgICAgICAgICB3aGlsZSAodltzdXBdPnBpdm90KSBkbyAgc3VwOj1zdXAtMTsKICAgICAgICAgZW5kOwogICAgICBpZiBpbmY8PXN1cCB0aGVuCiAgICAgICBiZWdpbgogICAgICAgICBzY2FtYmlhKHZbaW5mXSx2W3N1cF0pOwogICAgICAgICBzY2FtYmlhKHVbaW5mXSx1W3N1cF0pOwogICAgICAgICBzY2FtYmlhKHdbaW5mXSx3W3N1cF0pOwogICAgICAgICBzY2FtYmlhKHpbaW5mXSx6W3N1cF0pOwogICAgICAgICBpbmY6PWluZisxOwogICAgICAgICBzdXA6PXN1cC0xOwogICAgICAgZW5kOwogICAgdW50aWwgaW5mPnN1cDsKICAgIGlmIChlc3RyZW1vaTxzdXApIHRoZW4gb3JkaW5hbWVudG8oZXN0cmVtb2ksc3VwLHYsdSx3LHosb3JkaW5hdG8pOwogICAgaWYgKGluZjxlc3RyZW1vcykgdGhlbiBvcmRpbmFtZW50byhpbmYsZXN0cmVtb3Msdix1LHcseixvcmRpbmF0byk7CmVuZDsKClByb2NlZHVyZSByaWNlcmNhICh2YXIgdDplbGVuY287YW1pY2l6aWE6TG9uZ2ludCk7IAogIHZhciBpLG0saW5pemlvLGZpbmU6IGxvbmdpbnQ7CiAgICAgIAogYmVnaW4gIAogICBpbml6aW86PTE7IGZpbmU6PU47CiAgIHJlcGVhdAogICAgICBtOj0oaW5pemlvICsgZmluZSkgZGl2IDI7CiAgICAgIGlmIHRbbV08PWFtaWNpemlhIHRoZW4gaW5pemlvOj1tKzE7CiAgICAgIGlmIHRbbV0+YW1pY2l6aWEgdGhlbiBmaW5lOj1tLTE7CiAgICB1bnRpbCBpbml6aW8+ZmluZTsKICAgCiAgICBpZiAodFttXTw9YW1pY2l6aWEpIHRoZW4gcG9zOj1tCiAgICAgICAgICAgICAgICAgICAgIGVsc2UgcG9zOj1tLTE7CiAgICAgCiBlbmQ7CmJlZ2luCnsKICAgIHVuY29tbWVudCB0aGUgdHdvIGZvbGxvd2luZyBsaW5lcyBpZiB5b3Ugd2FudCB0byByZWFkL3dyaXRlIGZyb20gZmlsZXMKICAgIGFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsKfQoKICAgIFJlYWRMbihOKTsKCiAgICBmb3IgaTo9MSB0byBOIGRvCiAgICAgICAgUmVhZExuKElEW2ldLCBBW2ldLCBCW2ldLCBDW2ldKTsKCiAgICBLIDo9IDA7CgogICAgb3JkaW5hbWVudG8gKDEsTixJRCxBLEIsQywgdHJ1ZSk7CiAgICBmb3IgaTo9MSB0byBOIGRvCiAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICBqOj0xOwogICAgICAgICAgICAgIHdoaWxlIGo8PTMgZG8KICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgaj0xIHRoZW4gaWYgKEFbaV08Pi0xKSBhbmQgKEFbaV0+SURbaV0pIHRoZW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWljbzo9QVtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmljZXJjYSAoSUQsYW1pY28pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFbcG9zXT1JRFtpXSkgb3IgKEJbcG9zXT1JRFtpXSkgb3IgKENbcG9zXT1JRFtpXSkgdGhlbiBLOj1rKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGo9MiB0aGVuIGlmIChCW2ldPD4tMSkgYW5kIChCW2ldPklEW2ldKSB0aGVuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1pY286PUJbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpY2VyY2EgKElELGFtaWNvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFbcG9zXT1JRFtpXSkgb3IgKEJbcG9zXT1JRFtpXSkgb3IgKENbcG9zXT1JRFtpXSkgdGhlbiBLOj1rKzE7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgICAgICAgICAgICAgICAgICBpZiBqPTMgdGhlbiBpZiAoQ1tpXTw+LTEpIGFuZCAoQ1tpXT5JRFtpXSkgdGhlbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtaWNvOj1DW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWNlcmNhIChJRCxhbWljbyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBW3Bvc109SURbaV0pIG9yIChCW3Bvc109SURbaV0pIG9yIChDW3Bvc109SURbaV0pIHRoZW4gSzo9aysxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgICAgICAgICAgICAgICAgICBqOj1qKzE7CiAgICAgICAgICAgICAgICAgICAgIGVuZDsgICAgICAgICAgCiAgICAgICAgICAgIGVuZDsKICAgICAgICAgICAgCiAgICBXcml0ZUxuKEspOwplbmQuCg==