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>
using namespace std;
const int mod = 1e9 + 7;
int n;
bool flag[40010];
int a[40010], p[40010];
vector<int> lis;
void Factorize(int x) {
  for (int i = 1; i <= p[0] && p[i] <= x; ++i) {
    if (x % p[i] == 0) {
      while (x % p[i] == 0) x /= p[i];
      lis.push_back(p[i]);
    }
  }
  if (x != 1) lis.push_back(x);
}
map<int, int> mp;
int DP(int mask) {
  if (mask <= 1) return 0;
  if (mp.count(mask)) return mp[mask];
  int i;
  for (i = 30; i >= 0; --i)
    if (mask & (1 << i)) break;
  bool vis[50] = {0};
  for (int j = 1; j <= i; ++j)
    vis[DP((mask >> j) | (mask & ((1 << j) - 1)))] = true;
  for (int j = 0;; ++j)
    if (!vis[j]) return mp[mask] = j;
}
int Work(int pp) {
  int mask = 0;
  for (int i = 1; i <= n; ++i) {
    int c = 0, x = a[i];
    while (x % pp == 0) ++c, x /= pp;
    mask |= 1 << c;
  }
  return DP(mask);
}
int main() {
  for (int i = 2; i < 40010; ++i) {
    if (!flag[i]) p[++p[0]] = i;
    for (int j = 1; j <= p[0] && i * p[j] < 40010; ++j) {
      flag[i * p[j]] = true;
      if (i % p[j] == 0) break;
    }
  }
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    Factorize(a[i]);
  }
  sort(lis.begin(), lis.end());
  lis.erase(unique(lis.begin(), lis.end()), lis.end());
  int SG = 0;
  for (auto v : lis) SG ^= Work(v);
  puts(SG ? "Mojtaba" : "Arpa");
  return 0;
}
