import java.util.List;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

class Main {

	int count = 0;

	public static void main(String[] args) {

		InputOutput stdIO = new InputOutput();

		int n = stdIO.getValue();
		List<Integer> values = stdIO.getLine();

		Main my = new Main();

		my.selectionSort(values, n);
		stdIO.outputLine(values);
		System.out.println(my.count);

		stdIO.close();
	}

	private void selectionSort(List<Integer> values, int n) {

		for (int i = 0; i < n - 1; i++) {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		}
	}
}

class InputOutput {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	public int getValue() {
		int n = 0;
		try {
			n = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return n;
	}

	public List<Integer> getValueLines(int n) {
		List<Integer> values = new ArrayList<>();
		for(int i = 0; i < n; i++) {
			values.add(getValue());
		}
		return values;
	}

	public List<Integer> getLine() {
		try {
			String[] s = br.readLine().trim().split(" ");
			List<Integer> ary = new ArrayList<>();
			for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			}
			return ary;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void close() {
		try {
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void outputLine(List<Integer> values) {
		StringBuilder line = new StringBuilder();
		for(int k = 0; k < values.size(); k++) {
			line.append(values.get(k) + " ");
		}
		System.out.println(line.delete(line.length()-1, line.length()));
	}
} import java.util.List; List java.util import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.ArrayList; ArrayList java.util import java.util.List; List java.util class Main {

	int count = 0;

	public static void main(String[] args) {

		InputOutput stdIO = new InputOutput();

		int n = stdIO.getValue();
		List<Integer> values = stdIO.getLine();

		Main my = new Main();

		my.selectionSort(values, n);
		stdIO.outputLine(values);
		System.out.println(my.count);

		stdIO.close();
	}

	private void selectionSort(List<Integer> values, int n) {

		for (int i = 0; i < n - 1; i++) {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		}
	}
} Main int count = 0; count 0 public static void main(String[] args) {

		InputOutput stdIO = new InputOutput();

		int n = stdIO.getValue();
		List<Integer> values = stdIO.getLine();

		Main my = new Main();

		my.selectionSort(values, n);
		stdIO.outputLine(values);
		System.out.println(my.count);

		stdIO.close();
	} main {

		InputOutput stdIO = new InputOutput();

		int n = stdIO.getValue();
		List<Integer> values = stdIO.getLine();

		Main my = new Main();

		my.selectionSort(values, n);
		stdIO.outputLine(values);
		System.out.println(my.count);

		stdIO.close();
	} InputOutput stdIO = new InputOutput(); stdIO new InputOutput() int n = stdIO.getValue(); n stdIO.getValue() stdIO.getValue stdIO List<Integer> values = stdIO.getLine(); values stdIO.getLine() stdIO.getLine stdIO Main my = new Main(); my new Main() my.selectionSort(values, n) my.selectionSort my values n stdIO.outputLine(values) stdIO.outputLine stdIO values System.out.println(my.count) System.out.println System.out System System.out my.count my my.count stdIO.close() stdIO.close stdIO String[] args args private void selectionSort(List<Integer> values, int n) {

		for (int i = 0; i < n - 1; i++) {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		}
	} selectionSort {

		for (int i = 0; i < n - 1; i++) {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		}
	} for (int i = 0; i < n - 1; i++) {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		} int i = 0; int i = 0; i 0 i < n - 1 i n - 1 n 1 i++ i++ i {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		} {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		} int minj = values.get(i); minj values.get(i) values.get values i int minindex = 0; minindex 0 for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			} int j = i; int j = i; j i j < n j n j++ j++ j {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			} {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			} if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				} minj > values.get(j) minj values.get(j) values.get values j {
					minj = values.get(j);
					minindex = j;
				} minj = values.get(j) minj values.get(j) values.get values j minindex = j minindex j if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			} values.get(i) > minj values.get(i) values.get values i minj {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			} values.set(minindex, values.get(i)) values.set values minindex values.get(i) values.get values i values.set(i, minj) values.set values i minj count++ count List<Integer> values values int n n class InputOutput {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	public int getValue() {
		int n = 0;
		try {
			n = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return n;
	}

	public List<Integer> getValueLines(int n) {
		List<Integer> values = new ArrayList<>();
		for(int i = 0; i < n; i++) {
			values.add(getValue());
		}
		return values;
	}

	public List<Integer> getLine() {
		try {
			String[] s = br.readLine().trim().split(" ");
			List<Integer> ary = new ArrayList<>();
			for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			}
			return ary;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void close() {
		try {
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void outputLine(List<Integer> values) {
		StringBuilder line = new StringBuilder();
		for(int k = 0; k < values.size(); k++) {
			line.append(values.get(k) + " ");
		}
		System.out.println(line.delete(line.length()-1, line.length()));
	}
} InputOutput BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) public int getValue() {
		int n = 0;
		try {
			n = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return n;
	} getValue {
		int n = 0;
		try {
			n = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return n;
	} int n = 0; n 0 try {
			n = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} IOException e {
			e.printStackTrace();
		} e.printStackTrace() e.printStackTrace e {
			n = Integer.parseInt(br.readLine());
		} n = Integer.parseInt(br.readLine()) n Integer.parseInt(br.readLine()) Integer.parseInt Integer br.readLine() br.readLine br return n; n public List<Integer> getValueLines(int n) {
		List<Integer> values = new ArrayList<>();
		for(int i = 0; i < n; i++) {
			values.add(getValue());
		}
		return values;
	} getValueLines {
		List<Integer> values = new ArrayList<>();
		for(int i = 0; i < n; i++) {
			values.add(getValue());
		}
		return values;
	} List<Integer> values = new ArrayList<>(); values new ArrayList<>() for(int i = 0; i < n; i++) {
			values.add(getValue());
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			values.add(getValue());
		} {
			values.add(getValue());
		} values.add(getValue()) values.add values getValue() getValue return values; values int n n public List<Integer> getLine() {
		try {
			String[] s = br.readLine().trim().split(" ");
			List<Integer> ary = new ArrayList<>();
			for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			}
			return ary;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	} getLine {
		try {
			String[] s = br.readLine().trim().split(" ");
			List<Integer> ary = new ArrayList<>();
			for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			}
			return ary;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	} try {
			String[] s = br.readLine().trim().split(" ");
			List<Integer> ary = new ArrayList<>();
			for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			}
			return ary;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} IOException e {
			e.printStackTrace();
		} e.printStackTrace() e.printStackTrace e {
			String[] s = br.readLine().trim().split(" ");
			List<Integer> ary = new ArrayList<>();
			for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			}
			return ary;
		} String[] s = br.readLine().trim().split(" "); s br.readLine().trim().split(" ") br.readLine().trim().split br.readLine().trim() br.readLine().trim br.readLine() br.readLine br " " List<Integer> ary = new ArrayList<>(); ary new ArrayList<>() for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			} int i = 0; int i = 0; i 0 i < s.length i s.length s s.length i++ i++ i {
				ary.add(Integer.parseInt(s[i]));
			} {
				ary.add(Integer.parseInt(s[i]));
			} ary.add(Integer.parseInt(s[i])) ary.add ary Integer.parseInt(s[i]) Integer.parseInt Integer s[i] s i return ary; ary return null; null public void close() {
		try {
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	} close {
		try {
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	} try {
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} IOException e {
			e.printStackTrace();
		} e.printStackTrace() e.printStackTrace e {
			br.close();
		} br.close() br.close br public void outputLine(List<Integer> values) {
		StringBuilder line = new StringBuilder();
		for(int k = 0; k < values.size(); k++) {
			line.append(values.get(k) + " ");
		}
		System.out.println(line.delete(line.length()-1, line.length()));
	} outputLine {
		StringBuilder line = new StringBuilder();
		for(int k = 0; k < values.size(); k++) {
			line.append(values.get(k) + " ");
		}
		System.out.println(line.delete(line.length()-1, line.length()));
	} StringBuilder line = new StringBuilder(); line new StringBuilder() for(int k = 0; k < values.size(); k++) {
			line.append(values.get(k) + " ");
		} int k = 0; int k = 0; k 0 k < values.size() k values.size() values.size values k++ k++ k {
			line.append(values.get(k) + " ");
		} {
			line.append(values.get(k) + " ");
		} line.append(values.get(k) + " ") line.append line values.get(k) + " " values.get(k) values.get values k " " System.out.println(line.delete(line.length()-1, line.length())) System.out.println System.out System System.out line.delete(line.length()-1, line.length()) line.delete line line.length()-1 line.length() line.length line 1 line.length() line.length line List<Integer> values values
import java.util.List;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

class Main {

	int count = 0;

	public static void main(String[] args) {

		InputOutput stdIO = new InputOutput();

		int n = stdIO.getValue();
		List<Integer> values = stdIO.getLine();

		Main my = new Main();

		my.selectionSort(values, n);
		stdIO.outputLine(values);
		System.out.println(my.count);

		stdIO.close();
	}

	private void selectionSort(List<Integer> values, int n) {

		for (int i = 0; i < n - 1; i++) {
			int minj = values.get(i);
			int minindex = 0;
			for (int j = i; j < n; j++) {
				if (minj > values.get(j)) {
					minj = values.get(j);
					minindex = j;
				}
			}
			if(values.get(i) > minj) {
			values.set(minindex, values.get(i));
//			System.out.println(values);
			values.set(i, minj);
//			System.out.println(values);
			count++;
			}
//			System.out.println(count);
		}
	}
}

class InputOutput {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	public int getValue() {
		int n = 0;
		try {
			n = Integer.parseInt(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return n;
	}

	public List<Integer> getValueLines(int n) {
		List<Integer> values = new ArrayList<>();
		for(int i = 0; i < n; i++) {
			values.add(getValue());
		}
		return values;
	}

	public List<Integer> getLine() {
		try {
			String[] s = br.readLine().trim().split(" ");
			List<Integer> ary = new ArrayList<>();
			for (int i = 0; i < s.length; i++) {
				ary.add(Integer.parseInt(s[i]));
			}
			return ary;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void close() {
		try {
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void outputLine(List<Integer> values) {
		StringBuilder line = new StringBuilder();
		for(int k = 0; k < values.size(); k++) {
			line.append(values.get(k) + " ");
		}
		System.out.println(line.delete(line.length()-1, line.length()));
	}
}