#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int MOD = 1e9 + 7;
void add(int& a, int b) {
a += b;
if (a >= MOD) a -= MOD;
}
int n, m;
int adj_mat[20][20];
int dp[1 << 20][20]; // dp[mask][v] = Số đường đi xuất phát từ thành phố 1 (Syrjälä),
// đi qua tất cả các thành phố có trong mask, mỗi thành phố đúng một lần
// và kết thúc tại thành phố v
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
--u, --v;
adj_mat[u][v]++;
}
for (int mask = 0; mask < (1 << n); mask++) {
for (int v = 0; v < n; v++) {
int& cur = dp[mask][v];
if (mask == (1 << v) && v == 0) {
cur = 1;
continue;
}
cur = 0;
if (!(mask & (1 << v))) continue;
for (int u = 0; u < n; u++) {
int prev_mask = mask ^ (1 << v);
add(dp[mask][v], 1ll * dp[prev_mask][u] * adj_mat[u][v] % MOD);
}
}
}
cout << dp[(1 << n) - 1][n - 1] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7ICAgCgp2b2lkIGFkZChpbnQmIGEsIGludCBiKSB7CglhICs9IGI7IAoJaWYgKGEgPj0gTU9EKSBhIC09IE1PRDsKfQoKaW50IG4sIG07IAppbnQgYWRqX21hdFsyMF1bMjBdOyAKCmludCBkcFsxIDw8IDIwXVsyMF07IC8vIGRwW21hc2tdW3ZdID0gU+G7kSDEkcaw4budbmcgxJFpIHh14bqldCBwaMOhdCB04burIHRow6BuaCBwaOG7kSAxIChTeXJqw6Rsw6QpLCAKCQkJCQkgLy8gICAgICAgICAgICAgICDEkWkgcXVhIHThuqV0IGPhuqMgY8OhYyB0aMOgbmggcGjhu5EgY8OzIHRyb25nIG1hc2ssIG3hu5dpIHRow6BuaCBwaOG7kSDEkcO6bmcgbeG7mXQgbOG6p24gCgkJCQkJIC8vICAgICAgICAgICAgICAgdsOgIGvhur90IHRow7pjIHThuqFpIHRow6BuaCBwaOG7kSB2IAoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG4gPj4gbTsgCQoKCWZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CgkJaW50IHUsIHY7IAoJCWNpbiA+PiB1ID4+IHY7IAoJCS0tdSwgLS12OyAKCQlhZGpfbWF0W3VdW3ZdKys7IAoJfQoKCWZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgbik7IG1hc2srKykgewoJCWZvciAoaW50IHYgPSAwOyB2IDwgbjsgdisrKSB7CgkJCWludCYgY3VyID0gZHBbbWFza11bdl07IAoJCQlpZiAobWFzayA9PSAoMSA8PCB2KSAmJiB2ID09IDApIHsKCQkJCWN1ciA9IDE7IAoJCQkJY29udGludWU7IAoJCQl9CgkJCWN1ciA9IDA7ICAKCQkJaWYgKCEobWFzayAmICgxIDw8IHYpKSkgY29udGludWU7IAoJCQlmb3IgKGludCB1ID0gMDsgdSA8IG47IHUrKykgewoJCQkJaW50IHByZXZfbWFzayA9IG1hc2sgXiAoMSA8PCB2KTsgCgkJCQlhZGQoZHBbbWFza11bdl0sIDFsbCAqIGRwW3ByZXZfbWFza11bdV0gKiBhZGpfbWF0W3VdW3ZdICUgTU9EKTsgCgkJCX0KCQl9Cgl9CgoJY291dCA8PCBkcFsoMSA8PCBuKSAtIDFdW24gLSAxXSA8PCAnXG4nOyAKfQ==