#include using namespace std; #define rep(i,n) repi(i,0,n) #define repi(i,a,b) for(int i=int(a);i> n; rep(i, n) cin >> a[i], --a[i]; } class disjoint_set { vector p; public: disjoint_set(int n) : p(n, -1) {} int root(int i) { return p[i] >= 0 ? p[i] = root(p[i]) : i; } int size(int i) { return -p[root(i)]; } bool same(int i, int j) { return root(i) == root(j); } void merge(int i, int j) { i = root(i), j = root(j); if (i != j) { if (p[i] > p[j]) swap(i, j); p[i] += p[j], p[j] = i; } } }; bool solve() { disjoint_set uf(n); rep(i, n) uf.merge(i, a[i]); vector odd(n+1); rep(i, n) if (uf.root(i) == i) { if (uf.size(i) % 2 == 0) { odd[uf.size(i)] ^= 1; } } return accumulate(begin(odd), end(odd), 0) == 0; } int main() { cin.tie(0); ios_base::sync_with_stdio(false); input(); cout << (solve() ? "Yes" : "No") << endl; }