1 #include<iostream>
2 #include<cstdio>
3 #include<cstdlib>
4 #include<cstring>
5 #include<string>
6 #include<queue>
7 #include<algorithm>
8 #include<map>
9 #include<iomanip>
10 #include<climits>
11 #include<string.h>
12 #include<numeric>
13 #include<cmath>
14 #include<stdlib.h>
15 #include<vector>
16 #include<stack>
17 #include<set>
18 #define FOR(x, b, e) for(int x=b;x<=(e);x++)
19 #define REP(x, n) for(int x=0;x<(n);x++)
20 #define MAXN 100010
21 #define maxn 1000010
22 #define Mod 1000007
23 #define N 1010
24 using namespace std;
25 typedef long long LL;
26
27 int n, m;
28 int fa[10000010];
29 int cnt;
30
31 int findset(int x)
32 {
33 return fa[x] = fa[x] == x? x:findset(fa[x]);
34 }
35
36 void merge(int a, int b)
37 {
38 int x = findset(a);
39 int y = findset(b);
40 if (x != y) {
41 fa[x] = y;
42 cnt++;
43 }
44 }
45
46 LL quick_pow(int n)
47 {
48 LL tmp = 26,sum = 1;
49 while (n) {
50 if (n & 1) sum = (sum * tmp) % 1000000007;
51 tmp = (tmp * tmp) % 1000000007;
52 n >>= 1;
53 }
54 return sum % 1000000007;
55 }
56
57 int main()
58 {
59 int l, r;
60 while (cin >> n >> m) {
61 cnt = 0;
62 FOR(i,0,n) fa[i] = i;
63 FOR(i,1,m) {
64 cin >> l >> r;
65 merge(l-1,r);
66 }
67 cout << quick_pow(n - cnt) << endl;
68 }
69 return 0;
70 }