#include <algorithm>
#include <iostream>
#include <vector>

void wypisz_ostatnie_k_elementow(const std::vector<long long>& v, int k) {
	for (auto i = v.size() - k; i < v.size(); i++) {
		std::cout << v[i];
		if (i + 1 != v.size())
			std::cout << ' ';
	}
	std::cout << '\n';
}

int main() {
	int n, k;
	std::cin >> n >> k;
	std::vector<long long> zbior(n);
	for (auto&& a : zbior) {
		std::cin >> a;
	}
	std::sort(zbior.begin(), zbior.end());
	std::vector<long long> wynik;
	int poczatek = 0;
	int koniec = n - 1;
	int niedobor = k;
	if (k % 2 == 1) {
		if (zbior[koniec] <= 0) {
			wypisz_ostatnie_k_elementow(zbior, k);
			return 0;
		}
		wynik.push_back(zbior[koniec]);
		koniec--;
		niedobor--;
	}
	while (niedobor > 0) {
		if (zbior[poczatek] * zbior[poczatek + 1] > zbior[koniec] * zbior[koniec - 1]) {
			wynik.push_back(zbior[poczatek]);
			wynik.push_back(zbior[poczatek + 1]);
			poczatek += 2;
		} else {
			wynik.push_back(zbior[koniec]);
			wynik.push_back(zbior[koniec - 1]);
			koniec -= 2;
		}
		niedobor -= 2;
	}
	if (std::count(wynik.begin(), wynik.end(), 0)) {
		wypisz_ostatnie_k_elementow(zbior, k);
		return 0;
	}
	std::sort(wynik.begin(), wynik.end());
	wypisz_ostatnie_k_elementow(wynik, k);
	return 0;
}