#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	
		// Unos parametara.
	

	long i;
	long n,k;

	//printf ("Unesite N i K : ");
	scanf ("%ld %ld", &n, &k);
	
	// Kreiramo nizove za leva i desna polja kao i promenljivu za nulu u kojima se cuvaju brojevi pogodaka.
	long pm[n+1]; 	// Pogodak u minusno polje.
	long p0;		// Pogodak u sredinu, tj. nulu.
	long pp[n+1];	// Pogodak u pozitivno polje.

	// Inicijalizujemo brojace.
	p0=0;
	for (i=0; i<n; i++)
	{
		pm[i]=0;
		pp[i]=0;
	}
	
	//printf ("Unesite pogotke : ");

	long broj_zamena=0;

	for (i=0; i<n; i++)
	{
		long p;
		
		scanf ("%ld", &p);
		
		if (p==0)
		{
			// Ako je pogodak u centar, uvecamo brojac pogodaka u centar.
			p0++;
			if (p0==k)
			{
				broj_zamena++;
			}
		}
		else if (p<0)
		{
			// Ako je pogodak u minusno polje, uvecamo odgovarajuci minusni brojac.
			pm[p*-1]++; // Nema potrebe ucitavati stdlib.h samo zbog abs() funkcije. Pomnozimo sa -1 i to je to.
			if (pm[p*-1] == k)
			{
				broj_zamena++;
			}
		}
		else if (p>0)
		{
			// Ako je pogodak u pozitivno polje, uvecamo odgovarajuci pozitivni brojac.
			pp[p]++;
			if (pp[p] == k)
			{
				broj_zamena++;
			}
		}
	}
	
	
	// Ispis rezultata.
	
	
	printf ("%d\n", broj_zamena);
	
	// Prikažimo negativna polja u kojima je bilo minimum K pogodaka.
	for (i=1; i<n; i++)
	{
		if (pm[i] >= k)
		{
			printf ("-%d ", i);
		}
	}
	
	// Da li je bilo minimum K pogodaka u centar (nulu).
	if (p0 >= k)
	{
		printf ("0 ", p0);
	}
	
	// Prikažimo polja u kojima je bilo minimum K pogodaka.	
	for (i=1; i<n; i++)
	{
		if (pp[i] >= k)
		{
			printf ("%d ", i);
		}
	}
}