Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int MAX_N = 1e5 + 7;
- const long long MOD = 1e9 + 7;
- vector <int> a[MAX_N];
- int Free[MAX_N];
- int bfs(int s){
- queue <int> Q;
- Q.push(s);
- Free[s] = 1;
- int t = 1;
- while (!Q.empty()){
- int u = Q.front();
- Q.pop();
- for (int i=0; i<a[u].size(); i++){
- int v = a[u][i];
- if (Free[v] == 0){
- Free[v] = 1;
- Q.push(v);
- t++;
- }
- }
- }
- return t;
- }
- long long giaithua(int e){
- long long product = 1;
- for (int i=2; i<=e; i++){
- product *= i;
- product %= MOD;
- }
- return product;
- }
- int main(){
- // freopen("input.txt", "r", stdin);
- // freopen("output.txt", "w", stdout);
- int n, m;
- cin >> n >> m;
- int u, v;
- for (int i=1; i<=m; i++){
- cin >> u >> v;
- a[u].push_back(v);
- a[v].push_back(u);
- }
- long long res = 0;
- for (int i=0; i<n; i++){
- if (Free[i] == 0){
- int T = bfs(i);
- // cout << i << ' ' << T << '\n';
- if (T > 2){
- res += giaithua(T);
- res %= MOD;
- }
- }
- }
- cout << res << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement