KOSARE - KOSARE

Mirko found N boxes with various forgotten toys at his attic. There are M different toys, numbered 1 through M, but each of those can appear multiple times across various boxes.

Mirko decided that he will choose some boxes in a way that there is at least one toy of each kind present, and throw the rest of the boxes away.

Determine the number of ways in which Mirko can do this.

Input

The first line of input contains two integers N and M (1 ≤ N ≤ 1 000 000, 1 ≤ M ≤ 20).

Each of the following N lines contains an integer Ki (0 ≤ Ki ≤ M) followed by Ki distinct integers from interval [1, M], representing the toys in that box.

Output

The first and only line of output should contain the requested number of ways modulo 1 000 000 007.

Example

Input 1:
3 3
3 1 2 3
3 1 2 3
3 1 2 3

Output 1:
7
Input 2:
3 3
1 1
1 2
1 3

Output 2:
1
Input 3:
4 5
2 2 3
2 1 2
4 1 2 3 5
4 1 2 4 5

Output 3:
6

Được gửi lên bởi:UNI Training
Ngày:2012-12-31
Thời gian chạy:1s
Giới hạn mã nguồn:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Ngôn ngữ cho phép:C C++ 4.3.2 CPP CPP14
Nguồn bài:COCI 2011-2012 Contest #6

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.