func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 1e9 + 7;   const int N = 510;   int m;   long long n, ans;   int cnt, head[N];   struct edge {     int to, next;   } e[1010];   void ade(int u, int v) {     e[++cnt] = (edge){v, head[u]};     head[u] = cnt;   }   long long getsize(long long num) {     if (num > n) return 0;     long long tl = num, tr = num;     int m1 = 0, m2 = 0;     while (tl * 2 <= n) tl = tl * 2, m1++;     while (tr * 2 + 1 <= n) tr = tr * 2 + 1, m2++;     if (tl <= tr)       return (1 << (m2 + 1)) - 1;     else       return (1 << (m2 + 1)) - 1 + n - tl + 1;   }   map<int, int> vis;   int tot;   long long val[N];   void build(int x) {     val[vis[x]] = 1;     int to = x << 1;     if (to <= n && vis[to]) {       build(to);       ade(vis[x], vis[to]);       ade(vis[to], vis[x]);     } else       val[vis[x]] += getsize(to);     to = x << 1 | 1;     if (to <= n && vis[to]) {       build(to);       ade(vis[x], vis[to]);       ade(vis[to], vis[x]);     } else       val[vis[x]] += getsize(to);   }   int bk[N];   void dfs(int now, long long w) {     bk[now] = 1;     for (int i = head[now]; i; i = e[i].next) {       int to = e[i].to;       if (bk[to]) continue;       dfs(to, w);       ans = (ans + w * val[to] % mod) % mod;     }     bk[now] = 0;   }   int main() {     cin >> n >> m;     if (!m) {       ans = n * n % mod;       ans = (ans % mod + mod) % mod;       printf( %lld n , ans);     } else {       for (int i = 1; i <= m; i++) {         int a, b;         cin >> a >> b;         if (!vis[a]) vis[a] = ++tot;         if (!vis[b]) vis[b] = ++tot;         ade(vis[a], vis[b]);         ade(vis[b], vis[a]);         while (a) {           a >>= 1;           if (!vis[a]) vis[a] = ++tot;         }         while (b) {           b >>= 1;           if (!vis[b]) vis[b] = ++tot;         }       }       build(1);       for (int i = 1; i <= tot; i++) dfs(i, val[i]);       for (int i = 1; i <= tot; i++) ans = (ans + val[i] * val[i] % mod) % mod;       printf( %lld n , ans);     }     return 0;   }   