constint N = 30; map<int, int> f; intdp(int n){ if (f.find(n) != f.end()) return f[n]; vector<int> mex(N + 10); for (int i = 1; i <= N; ++i) { if (!(n >> i)) break; mex[dp(n >> i | n & (1 << i) - 1)] = 1; } for (int i = 0; i < N + 10; ++i) if (!mex[i]) return f[n] = i; }
int ans; intmain(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n; f[0] = f[1] = 0; for (int i = 1; i <= n; ++i) cin >> a[i], mx = max(mx, a[i]); for (int i = 2; i * i <= mx; ++i) { int S = 1; for (int j = 1; j <= n; ++j) { int s = 0; while (a[j] % i == 0) a[j] /= i, ++s; S |= 1 << s; } ans ^= dp(S); } sort(a + 1, a + n + 1); int cnt = unique(a + 1, a + n + 1) - a - 1; for (int i = 1; i <= cnt; ++i) if (a[i] > 1) ans ^= 1; cout << (!ans ? "Arpa\n" : "Mojtaba\n"); return0; }