#include<bits/stdc++.h>
using namespace std;
int n,k,maxn,maxx;
struct node{
int x,y,z,cnt;
}a[1000001];
struct nod{
int x,y,z;
bool operator<(const nod&s)const{
if(x!=s.x)return x<s.x;
if(y!=s.y)return y<s.y;
return z<s.z;
}
};
map<nod,int>mp;
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>k;
for(int i=1;i<=k;i++){
int x,y,z;
cin>>x>>y>>z;
mp[nod{x,y,z}]++;
}
int rn=0;
for(auto i:mp){
a[++rn]=node{i.first.x,i.first.y,i.first.z,i.second};
// cin>>a[i].x>>a[i].y>>a[i].z;
}
int c=1<<n;
for(int i=0;i<=c;i++){
int cnt=0;
for(int j=1;j<=rn;j++){
int x=((i>>(a[j].x))&1)==1;
int y=((i>>(a[j].y))&1)==0;
int z=((i>>(a[j].z))&1)==0;
if(x&&y&&z)cnt++;
}
if(cnt>maxn)maxn=cnt,maxx=1;
else if(cnt==maxn)maxx++;
}
cout<<maxn<<' '<<maxx;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG4sayxtYXhuLG1heHg7CnN0cnVjdCBub2RlewoJaW50IHgseSx6LGNudDsKfWFbMTAwMDAwMV07CnN0cnVjdCBub2R7CglpbnQgeCx5LHo7CiAgICBib29sIG9wZXJhdG9yPChjb25zdCBub2Qmcyljb25zdHsKICAgICAgICBpZih4IT1zLngpcmV0dXJuIHg8cy54OwogICAgICAgIGlmKHkhPXMueSlyZXR1cm4geTxzLnk7CiAgICAgICAgcmV0dXJuIHo8cy56OwogICAgfQp9OwptYXA8bm9kLGludD5tcDsKaW50IG1haW4oKXsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKSxjb3V0LnRpZSgwKTsKCWNpbj4+bj4+azsKCWZvcihpbnQgaT0xO2k8PWs7aSsrKXsKCQlpbnQgeCx5LHo7CgkJY2luPj54Pj55Pj56OwoJCW1wW25vZHt4LHksen1dKys7Cgl9CglpbnQgcm49MDsKCWZvcihhdXRvIGk6bXApewoJCWFbKytybl09bm9kZXtpLmZpcnN0LngsaS5maXJzdC55LGkuZmlyc3QueixpLnNlY29uZH07Ci8vCQljaW4+PmFbaV0ueD4+YVtpXS55Pj5hW2ldLno7Cgl9CglpbnQgYz0xPDxuOwoJZm9yKGludCBpPTA7aTw9YztpKyspewoJCWludCBjbnQ9MDsKCQlmb3IoaW50IGo9MTtqPD1ybjtqKyspewoJCQlpbnQgeD0oKGk+PihhW2pdLngpKSYxKT09MTsKCQkJaW50IHk9KChpPj4oYVtqXS55KSkmMSk9PTA7CgkJCWludCB6PSgoaT4+KGFbal0ueikpJjEpPT0wOwoJCQlpZih4JiZ5JiZ6KWNudCsrOwoJCX0KCQlpZihjbnQ+bWF4biltYXhuPWNudCxtYXh4PTE7CgkJZWxzZSBpZihjbnQ9PW1heG4pbWF4eCsrOwoJfQoJY291dDw8bWF4bjw8JyAnPDxtYXh4Owp9