Mojtaba and Arpa are playing a game. They have a list of n numbers in the game.

In a player's turn, he chooses a number pk (where p is a prime number and k is a positive integer) such that pk divides at least one number in the list. For each number in the list divisible by pk, call it x, the player will delete x and add <image> to the list. The player who can not make a valid choice of p and k loses.

Mojtaba starts the game and the players alternatively make moves. Determine which one of players will be the winner if both players play optimally.

Input

The first line contains a single integer n (1 ≤ n ≤ 100) — the number of elements in the list.

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) — the elements of the list.

Output

If Mojtaba wins, print "Mojtaba", otherwise print "Arpa" (without quotes).

You can print each letter in any case (upper or lower).

Examples

Input

4
1 1 1 1


Output

Arpa


Input

4
1 1 17 17


Output

Mojtaba


Input

4
1 1 17 289


Output

Arpa


Input

5
1 2 3 4 5


Output

Arpa

Note

In the first sample test, Mojtaba can't move.

In the second sample test, Mojtaba chooses p = 17 and k = 1, then the list changes to [1, 1, 1, 1].

In the third sample test, if Mojtaba chooses p = 17 and k = 1, then Arpa chooses p = 17 and k = 1 and wins, if Mojtaba chooses p = 17 and k = 2, then Arpa chooses p = 17 and k = 1 and wins.
#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
template <class T, class U>
inline void Max(T &a, U b) {
  if (a < b) a = b;
}
template <class T, class U>
inline void Min(T &a, U b) {
  if (a > b) a = b;
}
inline void add(int &a, int b) {
  a += b;
  while (a >= 1000000007) a -= 1000000007;
}
int pow(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = ans * (long long)a % 1000000007;
    a = (long long)a * a % 1000000007;
    b >>= 1;
  }
  return ans;
}
set<int> a[35010];
map<set<int>, int> dp;
int vis[35010], now;
int dfs(set<int> s) {
  if ((int)(s.size()) == 0) return 0;
  if ((int)(s.size()) == 1) {
    return *s.begin();
  }
  if (dp.count(s)) return dp[s];
  int mx = *(--s.end());
  vector<int> v;
  for (int i = 1; i < mx + 1; i++) {
    set<int> ss;
    for (auto first : s)
      if (first > i)
        ss.insert(first - i);
      else if (first < i)
        ss.insert(first);
    v.push_back(dfs(ss));
  }
  now++;
  for (auto first : v) vis[first] = now;
  int k = 0;
  while (vis[k] == now) k++;
  dp[s] = k;
  return k;
}
int main() {
  int j, k, i, T, ca = 0, n, K = 0, m = 0;
  scanf("%d", &n);
  set<int> g;
  for (int i = 0; i < n; i++) {
    scanf("%d", &K);
    for (int j = 2; j < K + 1; j++) {
      if (1LL * j * j > K) break;
      if (K % j == 0) {
        k = 0;
        while (K % j == 0) k++, K /= j;
        a[j].insert(k);
      }
    }
    if (K > 1) {
      if (K < 35010)
        a[K].insert(1);
      else
        g.insert(K);
    }
  }
  m = (int)(g.size());
  m &= 1;
  for (int i = 2; i < 35010; i++)
    if (!a[i].empty()) {
      m ^= dfs(a[i]);
    }
  puts(m ? "Mojtaba" : "Arpa");
  return 0;
}
