#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
#include "cycles.h"

static int64_t cnt = 0;
static std::vector<int> perm;
static int64_t n;

static int findPermCount() {
	std::vector<bool> used(n, false);
	int64_t cntc = 0;
	for (int64_t i = 0; i < n; i ++) {
		if (used[i]) { continue; }
		int64_t curr = i; cntc ++;
		while (!used[curr]) {
			used[curr] = true;
			curr = perm[curr];
		}
	}
    return cntc;
}

int performSwap(int i, int j) {
	++cnt;

    bool valid_swap = true;
    valid_swap &= (0 <= i && i < n);
    valid_swap &= (0 <= j && j < n);
    valid_swap &= (i != j);

    if (!valid_swap) {
        std::cout << "WRONG. Your program made an invalid swap: (" << i << ", " << j << ")" << std::endl;
        exit(0);  
    }

	std::swap(perm[i], perm[j]);
	return findPermCount();
}

int main() {
	std::cin >> n;
	perm.resize(n);
	for (int64_t i = 0; i < n; i ++) { std::cin >> perm[i]; }

	sortPermutation(n);
	if (findPermCount() != n) {
		std::cout << "WRONG. The final permutation is not sorted." << std::endl;
	} else {
		std::cout << "CORRECT with " << cnt << " swaps" << std::endl; 
	}
	return 0;
}
