#include <bits/stdc++.h>
const int max_n = 1000, max_m = 1000, max_k = 1000;
int n, m, k[max_m], c[max_m][max_k];
std::vector<int> values;
int count_must_be_chosen[max_m];
bool has_value_may_be_chosen[max_m];
double C[max_m + 1][max_m + 1], f[max_m][max_m + 1];
int main() {
  std::ios::sync_with_stdio(false);
  std::cin >> n >> m;
  for (int i = 0; i < m; i++) {
    std::cin >> k[i];
    for (int j = 0; j < k[i]; j++) {
      std::cin >> c[i][j];
      values.push_back(c[i][j]);
    }
  }
  std::sort(values.begin(), values.end(), [](int a, int b) { return a > b; });
  int value_may_be_chosen = values[n - 1];
  std::memset(count_must_be_chosen, 0, sizeof count_must_be_chosen);
  std::memset(has_value_may_be_chosen, false, sizeof has_value_may_be_chosen);
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < k[i]; j++) {
      if (c[i][j] > value_may_be_chosen) count_must_be_chosen[i]++;
      if (c[i][j] == value_may_be_chosen) has_value_may_be_chosen[i] = true;
    }
  }
  int size = (int)values.size(), may_be_chosen = 0, total_may_be_chosen = 0;
  for (int i = 0; i < size; i++) {
    if (values[i] == value_may_be_chosen) {
      if (i < n) may_be_chosen++;
      total_may_be_chosen++;
    }
    if (values[i] < value_may_be_chosen) break;
  }
  for (int i = 0; i <= max_k; i++) C[i][0] = C[i][i] = 1;
  for (int i = 1; i <= max_k; i++)
    for (int j = 1; j <= i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  for (int i = 0; i < m; i++) {
    for (int j = 0; j <= may_be_chosen; j++) {
      f[i][j] = (i > 0 ? f[i - 1][j] : (j > 0 ? 0 : 1)) /
                C[k[i]][count_must_be_chosen[i]];
      if (has_value_may_be_chosen[i] && j > 0)
        f[i][j] += (i > 0 ? f[i - 1][j - 1] : (j == 1 ? 1 : 0)) /
                   C[k[i]][count_must_be_chosen[i] + 1];
    }
  }
  std::cout << std::fixed << std::setprecision(9)
            << f[m - 1][may_be_chosen] / C[total_may_be_chosen][may_be_chosen]
            << '\n';
  return 0;
}
