#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10;
const int mod = 1e9 + 7;
int n, m;
int in[N], out[N];
int fa[N], ind[N], outd[N];
set<int> g[N];
int find(int x) {
if (fa[x] == x) return x;
else {
fa[x] = find(fa[x]);
return fa[x];
}
}
void unionn(int x, int y) {
int fx = find(x);
int fy = find(y);
if (fx == fy) return;
fa[fy] = fx;
}
signed main() {
cin >> n >> m;
int x, y;
for (int i = 1; i <= n; i++) fa[i] = i;
while (m--) {
cin >> x >> y;
outd[x]++;
ind[y]++;
if(g[x].count(y)) continue;
g[x].insert(y);
if (find(x) == find(y)) {
cout << 0;
return 0;
}
unionn(x, y);
}
for (int i = 1; i <= n; i++) {
if (outd[i] > 1 || ind[i] > 1) {
cout << 0;
return 0;
}
}
int cnt = 0, sum = 1;
for (int i = 1; i <= n; i++) {
if (fa[i] == i) {
cnt++;
}
}
for (int i = 1; i <= cnt; i++) {
sum = (sum * i) % mod;
}
cout << sum;
return 0;
}