func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 100000;   int prime[MAXN + 1];   void getPrime() {     memset(prime, 0, sizeof(prime));     for (int i = 2; i <= MAXN; i++) {       if (!prime[i]) prime[++prime[0]] = i;       for (int j = 1; j <= prime[0] && prime[j] <= MAXN / i; j++) {         prime[prime[j] * i] = 1;         if (i % prime[j] == 0) break;       }     }   }   unordered_map<int, bool> Mcnt;   unordered_map<int, int> M;   const int maxn = 105;   int a[maxn];   int getsg(int S) {     if (S == 0) return 0;     if (M.count(S)) return M[S];     vector<int> V;     V.clear();     for (int i = 0; i < 29; i++)       if (S & (1 << i)) V.push_back(i + 1);     int ma = 0;     for (int i = 0; i < V.size(); i++) ma = max(ma, V[i]);     int x[30];     set<int> pre;     pre.clear();     for (int i = 1; i <= ma; i++) {       for (int j = 0; j < V.size(); j++) {         if (V[j] >= i)           x[j] = V[j] - i;         else           x[j] = V[j];       }       int SS = 0;       for (int j = 0; j < V.size(); j++) {         if (x[j]) SS |= (1 << (x[j] - 1));       }       pre.insert(getsg(SS));     }     int now = 0;     while (pre.count(now)) now++;     M[S] = now;     return now;   }   int cnt[maxn];   int main() {     getPrime();     int ans = 0;     int n;     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , &a[i]);     for (int i = 1; i <= prime[0]; i++) {       memset(cnt, 0, sizeof(cnt));       for (int j = 1; j <= n; j++) {         while (a[j] % prime[i] == 0) {           a[j] /= prime[i];           cnt[j]++;         }       }       int S = 0;       for (int j = 1; j <= n; j++)         if (cnt[j]) S |= (1 << (cnt[j] - 1));       ans ^= getsg(S);     }     for (int i = 1; i <= n; i++)       if (a[i] != 1) {         if (!Mcnt.count(a[i])) {           ans ^= 1;           Mcnt[a[i]] = true;         }       }     if (ans == 0)       printf( Arpa );     else       printf( Mojtaba );     return 0;   }   