#include <iostream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
struct Triplet
{
long long v[3];
Triplet(long long x,long long y, long long z)
{
v[0] = x;
v[1] = y;
v[2] = z;
sort( v, v+3 );
}
};
class TripletCompare
{
public:
bool operator()(const Triplet &t1, const Triplet &t2)
{
return lexicographical_compare( &t1.v[0], &t1.v[3] , &t2.v[0], &t2.v[3]);
}
};
int main()
{
int n;
cin >> n;
int unique = 0;
int i = n;
map<Triplet,int,TripletCompare> m;
while ( i-- > 0 )
{
long long x,y,z;
cin >> x >> y >> z;
Triplet t(x,y,z);
if( m.find(t) != m.end() )
{
m[t]++;
}
else
{
m[t] = 1;
}
}
map<Triplet,int,TripletCompare>::iterator it;
for( it = m.begin(); it != m.end(); it++ )
{
if( it->second == 1 )
{
unique++;
}
}
cout << unique << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFRyaXBsZXQKewoJbG9uZyBsb25nIHZbM107CQoJCglUcmlwbGV0KGxvbmcgbG9uZyB4LGxvbmcgbG9uZyB5LCBsb25nIGxvbmcgeikKCXsKCQl2WzBdID0geDsKCQl2WzFdID0geTsKCQl2WzJdID0gejsKCQlzb3J0KCB2LCB2KzMgKTsKCX0KfTsKY2xhc3MgIFRyaXBsZXRDb21wYXJlCnsKcHVibGljOgoJYm9vbCBvcGVyYXRvcigpKGNvbnN0IFRyaXBsZXQgJnQxLCBjb25zdCBUcmlwbGV0ICZ0MikKCXsKCQlyZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoICZ0MS52WzBdLCAmdDEudlszXSAsICZ0Mi52WzBdLCAmdDIudlszXSk7Cgl9Cn07CgppbnQgbWFpbigpCnsKICAgIGludCBuOwoJY2luID4+IG47CglpbnQgdW5pcXVlID0gMDsKCWludCBpID0gbjsKCW1hcDxUcmlwbGV0LGludCxUcmlwbGV0Q29tcGFyZT4gbTsKCXdoaWxlICggaS0tID4gMCApCgl7CgkJbG9uZyBsb25nIHgseSx6OwoJCWNpbiA+PiB4ID4+IHkgPj4gejsKCQlUcmlwbGV0IHQoeCx5LHopOwoJCQoJCWlmKCBtLmZpbmQodCkgIT0gbS5lbmQoKSApCgkJewoJCQltW3RdKys7CgkJfQoJCWVsc2UKCQl7CgkJCW1bdF0gPSAxOwoJCX0JCQoJfQoJbWFwPFRyaXBsZXQsaW50LFRyaXBsZXRDb21wYXJlPjo6aXRlcmF0b3IgaXQ7Cglmb3IoIGl0ID0gbS5iZWdpbigpOyBpdCAhPSBtLmVuZCgpOyBpdCsrICkKCXsKCQlpZiggaXQtPnNlY29uZCA9PSAxICkKCQl7CgkJCXVuaXF1ZSsrOwoJCX0KCX0KCWNvdXQgPDwgdW5pcXVlIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQo=