#include <bits/stdc++.h>
using namespace std;

// #define DEBUG

using ll = long long;
using ii = pair<int, int>;
using vi = vector<int>;
using vii = vector<ii>;
using vll = vector<ll>;
using si = set<int>;
using sll = set<ll>;

vector<vi> adj;
vector<bool> visited;
vi topsort;
const int mod = 1e9 + 7;

void ts(int v){
    visited[v] = true;
    for (int i = 0; i < adj[v].size(); i++){
        int u = adj[v][i];
        if (!visited[u]) ts(u);
    }
    topsort.push_back(v);
}

int main(){
	#ifdef DEBUG
	freopen("out.txt", "w", stdout);
	#endif
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

    int n, l;
    cin >> n >> l;
    adj.resize(n + 1);
    for (int i = 1; i <= l; i++){
        int k; cin >> k;
        for (int j = 0; j < k; j++){
            int x; cin >> x;
            adj[i].push_back(x);
        }
    }
    visited.assign(n + 1, false);
    ts(1);
    reverse(topsort.begin(), topsort.end());
    vll dp(n + 1);
    dp[1] = 1;
    for (int i = 0; i < topsort.size(); i++){
        int v = topsort[i];
        for (int j = 0; j < adj[v].size(); j++){
            int u = adj[v][j];
            dp[u] = (dp[u] + dp[v]) % mod;
        }
    }
    ll total = 0;
    ll once = 0;
    for (int i = l + 1; i <= n; i++){
        if (dp[i] > 0) once++;
        total = (total + dp[i]) % mod;
    }
    cout << total << " " << once << endl;
	return 0;
}