the isTripletsValid is little bit different at least.
bool isTripletsValid(vector<vector<uint64_t> > tr, int N)
{
for (size_t i = 0; i < tr.size(); ++i)
{
sort(tr[i].begin(), tr[i].end());
if (tr[i][0] == tr[i][1])
return false;
if (tr[i][0] == tr[i][2])
return false;
if (tr[i][1] == tr[i][2])
return false;
}
tr.erase(unique(tr.begin(), tr.end()), tr.end());
if (tr.size() != N)
return false;
return true;
}