import typing

def dp_no_div(constraint_locations, constraints, N,
              lines, memo):
    cur_line_count = 0
    for line in lines:
        cur_line_count += ((line ^ constraints) & constraint_locations) == 0
    if cur_line_count <= 1:
        return 0
    key = (constraints, constraint_locations)
    res = memo.get(key)
    if res is not None:
        return res
    res = 2**63
    for i in range(N):
        if (constraint_locations >> i) & 1:
            # There is already a constraint for station i.
            continue
        new_constraint_locations = constraint_locations | (1 << i)
        # Ask question about station i.
        res = min(res,
                  cur_line_count +
                  # Line passes through station i.
                  dp_no_div(new_constraint_locations, constraints | (1 << i),
                            N, lines, memo) +
                  # Line does not pass through station i.
                  dp_no_div(new_constraint_locations, constraints, N,
                            lines, memo))
    memo[key] = res
    return res


def main():
    N = int(input())
    M = int(input())
    lines = []
    for _ in range(M):
        line = 0
        for station in input().strip().split(' ')[1:]:
            line |= 1 << int(station)
        lines.append(line)
    memo = {}
    res = dp_no_div(0, 0, N, lines, memo) / M
    if res > 2 * N:
        print('not possible')
    else:
        print(res)

if __name__ == '__main__':
    main()
