You've got an undirected graph, consisting of *n* vertices and *m* edges. We will consider the graph's vertices numbered with integers from 1 to *n*. Each vertex of the graph has a color. The color of the *i*-th vertex is an integer *c*<sub class="lower-index">*i*</sub>.

Let's consider all vertices of the graph, that are painted some color *k*. Let's denote a set of such as *V*(*k*). Let's denote the value of the neighbouring color diversity for color *k* as the cardinality of the set *Q*(*k*) = {*c*<sub class="lower-index">*u*</sub> :  *c*<sub class="lower-index">*u*</sub> ≠ *k* and there is vertex *v* belonging to set *V*(*k*) such that nodes *v* and *u* are connected by an edge of the graph}.

Your task is to find such color *k*, which makes the cardinality of set *Q*(*k*) maximum. In other words, you want to find the color that has the most diverse neighbours. Please note, that you want to find such color *k*, that the graph has at least one vertex with such color.
The first line contains two space-separated integers *n*, *m* (1 ≤ *n*, *m* ≤ 10<sup class="upper-index">5</sup>) — the number of vertices end edges of the graph, correspondingly. The second line contains a sequence of integers *c*<sub class="lower-index">1</sub>, *c*<sub class="lower-index">2</sub>, ..., *c*<sub class="lower-index">*n*</sub> (1 ≤ *c*<sub class="lower-index">*i*</sub> ≤ 10<sup class="upper-index">5</sup>) — the colors of the graph vertices. The numbers on the line are separated by spaces.

Next *m* lines contain the description of the edges: the *i*-th line contains two space-separated integers *a*<sub class="lower-index">*i*</sub>, *b*<sub class="lower-index">*i*</sub> (1 ≤ *a*<sub class="lower-index">*i*</sub>, *b*<sub class="lower-index">*i*</sub> ≤ *n*; *a*<sub class="lower-index">*i*</sub> ≠ *b*<sub class="lower-index">*i*</sub>) — the numbers of the vertices, connected by the *i*-th edge. 

It is guaranteed that the given graph has no self-loops or multiple edges.
#include <cstdio>
#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

const int MAXN = 200002;

int N, M, K, mx, col, res, size;
int colour[MAXN];

bool visited[MAXN];

vector<int> graph[MAXN];
unordered_map<int, int> count;

void dfs( int node ){
	
	size++;
	visited[node] = true;
	count[colour[node]]++;
	mx = max(mx, count[colour[node]]);
	
	for( vector<int>::iterator it=graph[node].begin() ; it != graph[node].end() ; it++ )
		if( !visited[*it] )
			dfs(*it);
}

int main(){
	
	scanf("%d%d%d", &N, &M, &K);
	
	for( int i=1 ; i<=N ; i++ )
		scanf("%d", colour+i);
	
	for( int a, b, i=0 ; i<M ; i++ ){
		scanf("%d%d", &a, &b);
		graph[a].push_back(b);
		graph[b].push_back(a);
	}
	
	for( int i=1 ; i<=N ; i++ )
		if( !visited[i] ){
			
			dfs(i);
			//~ cerr << i << ' ' << size << ' ' << mx << endl;
			
			res += size-mx;
			
			mx = 0;
			size = 0;
			count.clear();
		}
	
	printf("%d\n", res);
	return 0;
}
