#include <bits/stdc++.h>
using namespace std;
const int N = 29;
unordered_map<vector<bool>, int> G;
unordered_map<int, vector<bool>> M;
vector<int> linear(const int N) {
  vector<bool> isp(N, true);
  vector<int> p;
  for (int i = 2; i < N; i++) {
    if (isp[i]) p.push_back(i);
    for (int j = 0; j < p.size() && (long long)p[j] * i < N; j++) {
      isp[p[j] * i] = false;
      if (i % p[j] == 0) break;
    }
  }
  return p;
}
int sol(vector<bool> v) {
  bool has = false;
  for (int i = 1; i <= N; i++) has |= v[i];
  if (!has) return 0;
  if (G.find(v) == G.end()) {
    unordered_set<int> S;
    for (int i = N; i >= 1; i--)
      if (v[i]) {
        for (int j = i; j >= 1; j--) {
          vector<bool> w(N + 1, false);
          for (int k = j + 1; k <= i; k++)
            if (v[k]) w[k - j] = true;
          for (int k = 1; k < j; k++)
            if (v[k]) w[k] = true;
          S.insert(sol(w));
        }
        break;
      }
    G[v] = 1e5;
    for (int i = 0; i < 1e5; i++)
      if (S.find(i) == S.end()) {
        G[v] = i;
        break;
      }
  }
  return G[v];
}
void upd(int p, int cnt) {
  if (M.find(p) == M.end()) {
    M[p] = vector<bool>(N + 1, false);
  }
  M[p][cnt] = true;
}
int main() {
  vector<int> pri = linear(32000);
  int n, ans = 0;
  for (scanf("%d", &n); n > 0; n--) {
    int x;
    scanf("%d", &x);
    for (int p : pri) {
      if (x <= 1) break;
      if (x % p == 0) {
        int cnt = 0;
        while (x % p == 0) cnt++, x /= p;
        upd(p, cnt);
      }
    }
    if (x > 1) upd(x, 1);
  }
  for (auto &t : M) {
    auto v = t.second;
    ans ^= sol(v);
  }
  printf("%s\n", ans ? "Mojtaba" : "Arpa");
}
