Problem:
Selection Sort

Write a program of the Selection Sort algorithm which sorts a sequence A in ascending order. The algorithm should be based on the following pseudocode:

SelectionSort(A)
1 for i = 0 to A.length-1
2 mini = i
3 for j = i to A.length-1
4 if A[j] < A[mini]
5 mini = j
6 swap A[i] and A[mini]

Note that, indices for array elements are based on 0-origin.

Your program should also print the number of swap operations defined in line 6 of the pseudocode in the case where i ≠ mini.

Input

The first line of the input includes an integer N, the number of elements in the sequence.

In the second line, N elements of the sequence are given separated by space characters.

Output

The output consists of 2 lines.

In the first line, please print the sorted sequence. Two contiguous elements of the sequence should be separated by a space character.

In the second line, please print the number of swap operations.

Constraints

1 ≤ N ≤ 100

Sample Input 1

6
5 6 4 2 1 3

Sample Output 1

1 2 3 4 5 6
4

Sample Input 2

6
5 2 4 6 1 3

Sample Output 2

1 2 3 4 5 6
3

Solution in C (judge verdict: Time Limit Exceeded)

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

int selectionSort(int R[], int N);

void swap(int *a, int *b);

int main(void) {

	int N;
	scanf("%d\n", &N);//半角スペースで区切ることができる。

	int R[100];

	int t,k,x;
	for (t = 0; t < N ; t++) {
		scanf("%d", &R[t]);
	}
	
	x = selectionSort(R, N);
	
	for (k = 0; k < N; k++) {
		printf("%d ", R[k]);
	}
	printf("\n%d",x);
	for (;;) {}
	return 0;
	
	}

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

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