分组
有n个元素的组需要交换n-1次
这样n-cyc就是最少的交换次数
petr与n奇偶一致,这样判断n与最少次数是否一致
Petr likes to come up with problems about randomly generated data. This time problem is about random permutation. He decided to generate a random permutation this way: he takes identity permutation of numbers from 1
times. Because it is more random, OK?!
You somehow get a test from one of these problems and now you want to know from which one.
In the first line of input there is one integer n
).
In the second line there are n
distinct integers between 1 and n — the permutation of size nfrom the test.
It is guaranteed that all tests except for sample are generated this way: First we choose n
— the size of the permutation. Then we randomly choose a method to generate a permutation — the one of Petr or the one of Alex. Then we generate a permutation using chosen method.
If the test is generated via Petr's method print "Petr" (without quotes). If the test is generated via Alex's method print "Um_nik" (without quotes).
5 2 4 5 1 3
Petr
Please note that the sample is not a valid test (because of limitations for n
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head
const int N=101000;
int n,p[N],vis[N],cyc;
int main() {
scanf("%d",&n);
rep(i,0,n) scanf("%d",p+i),--p[i];
rep(i,0,n) if (!vis[i]) {
int y=i; cyc++;
while (!vis[y]) {
vis[y]=1;
y=p[y];
}
}
cyc=n-cyc;
if (cyc%2==n%2) puts("Petr");
else puts("Um_nik");
}