// Tuk e realizirano reshenieto s edna dunkcia za sortirane, koiato prilagame dva pyti // vyrhu chislata, koito sa po-malko ot X i tezi, koito sa po-golemi ili ravni #include <cstdio> #include <vector> #include <algorithm> using namespace std; vector<int> v1, v2; void mySwap(int &num1, int &num2) { int tmp = num1; num1 = num2; num2 = tmp; } // Mozheshe da sortirame s vgradenia sort, no tuk // demonstrirame sortirane :) void mySort(vector<int> &toSort) { for(int i = 0; i < toSort.size(); i++) { for(int j = i + 1; j < toSort.size(); j++) { if(toSort[j] < toSort[i]) { mySwap(toSort[j], toSort[i]); } } } } int main() { int tests; scanf("%d",&tests); while(tests--) { int numElem; int lineX; int tmpNum; v1.clear(); v2.clear(); scanf("%d %d", &numElem, &lineX); for(int i = 0; i < numElem; i++) { scanf("%d", &tmpNum); if(tmpNum < lineX) { // Po-malkite ot X otivat v edin vektor v1.push_back(tmpNum); } else { // Po-golemite ili ravni ot X otivat vyv vtori vektor v2.push_back(tmpNum); } } mySort(v1); mySort(v2); // Obhozhdame vtoria masiv v prav red for(int i = 0; i < v1.size(); i++) { printf("%d", v1[i]); // Pravim tezi neshta po-dolu, zad a izpisvame adekvatni novi redove i // shpacii v izhoda if (i != v1.size()-1) printf(" "); else if (v2.size() > 0) printf(" "); else printf("\n"); } // Obhozhdame vtoria masiv v obraten red for(int i = v2.size() - 1; i >= 0; i--) { printf("%d",v2[i]); // Pravim tezi neshta po-dolu, zad a izpisvame adekvatni novi redove i // shpacii v izhoda if (i == 0) printf("\n"); else printf(" "); } } return 0; }