#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int bubbleSort(int R[],int N);
int selectionSort(int R[], int N);
void insertionSort(int R[], int N);
void swap(int *a, int *b);

int main(void) {

	int N;
	scanf_s("%d\n", &N);

	int *R;
	R = (int *)malloc(sizeof(int) * N);

	int t,k,x;
	char str[500],*cn;
	fgets(str, sizeof(str), stdin);  // Rにnこの値を代入できた。
	cn = strtok(str, " ,");
	for (t = 0; t < N ; t++) {
		R[t] = atoi(cn);  // Rにnこの値を代入できた。
		cn = strtok(NULL," ");
	}
	
	x = selectionSort(R, N);
	
	for (k = 0; k < N; k++) {
		printf("%d ", R[k]);
	}
	printf("\n%d",x);
	return 0;
	
	}

void insertionSort(int R[], int N) {
	int i, v, j;
	for (i = 1; i < N; i++) {
			v = R[i];
			j = i - 1;
			while (j >= 0 && R[j] > v) {
				R[j + 1] = R[j];
				j--;
				R[j + 1] = v;
			}
		}
}
			
		
int bubbleSort(int R[],int N){
	int flag = 1;
	int count = 0;
	int j;
	while(flag != 0){	//forにして、ソートを終える場所を少しづつ変えていけば完璧。（恐らくオーダーは変わらない。）
		flag = 0;
			for (j = N - 1; j >= 1; j--) {
			if (R[j] < R[j - 1]) {
				swap(&R[j], &R[j - 1]);
				flag = 1;
				count++;
			}
		}
	}
	return count;
}

int selectionSort(int R[],int N) {
	int i,j,minj;
	int count = 0;
	int h = 0;
	for (i = 0; i < N; i++) {
		minj = i;
		for (j = i; j < N; j++) {
			if (R[j] < R[minj]) {
				minj = j;
			}
		}
		if (minj != i) {
			swap(&R[i], &R[minj]);
			count++;
		}
	}
	return count;
}

void swap(int *a, int *b) {
	int k;
	k = *a;
	*a = *b;
	*b = k;
}

