#include #include #include #include using namespace std; const int maxn = (1<<8)+5; const int limit = 32 * 13 * 13; typedef long long ll; typedef map::iterator iter; int N, Q, X[20], multi[maxn], ct[maxn]; map G[maxn]; int bitcount(int s) { return s == 0 ? 0 : bitcount(s>>1) + (s&1); } void add (int u, int s, ll k) { if (s < 0) return; G[u][s] += k; } void merge(int u, int p, int q) { for (iter i = G[p].begin(); i != G[p].end(); i++) { for (iter j = G[q].begin(); j != G[q].end(); j++) { ll k = 1LL * i->second * j->second; add(u, i->first + j->first, k * 2); add(u, i->first * j->first, k * 2); add(u, i->first - j->first, k); add(u, j->first - i->first, k); if (i->first && j->first % i->first == 0) add(u, j->first / i->first, k); if (j->first && i->first % j->first == 0) add(u, i->first / j->first, k); } } } ll solve () { ll ret = 0; for (int i = 1; i < (1<