#include #define rep(i,a,b) for(int i=a;i struct UF { int par[NV], cnt[NV]; UF() { rep(i, 0, NV) par[i] = i, cnt[i] = 1; } int operator[](int x) { return par[x] == x ? x : par[x] = operator[](par[x]); } void operator()(int x, int y) { // xをyにくっつける x = operator[](x); y = operator[](y); if (x != y) par[x] = y, cnt[y] += cnt[x]; } }; /*---------------------------------------------------------------------------------------------------             ∧_∧       ∧_∧  (´<_` )  Welcome to My Coding Space!      ( ´_ゝ`) /  ⌒i     /   \    | |     /   / ̄ ̄ ̄ ̄/  |   __(__ニつ/  _/ .| .|____      \/____/ (u ⊃ ---------------------------------------------------------------------------------------------------*/ int N; UF<101> uf; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N; rep(i, 1, N + 1) { int x; cin >> x; uf(i, x); } int cnt = 0; rep(i, 1, N + 1) if (i == uf[i]) { if (uf.cnt[i] % 2 == 0) cnt++; } if(cnt % 2 == 0) printf("Yes\n"); else printf("No\n"); }