#include #include #include #include #include using namespace std; /* long long f1(const multiset &mset, long long many) { long long high=1000000047LL, low=0; long long mid; if (mset.size()low+1) { mid=(high+low)/2; multiset::iterator it = mset.upper_bound(mid); if (distance(mset.begin(), it)==many) { multiset::iterator it2=mset.upper_bound(mid); it2--; return (*it2); } if (distance(mset.begin(), it) > many) high=mid; else low=mid; } return -1; } long long f1(multiset &mset, long long many) { if (mset.size()many) { multiset::iterator it = mset.end(); mset.erase(--it); } return *(mset.rbegin()); } int main() { int n; long long m; while (cin>>m>>n) { vector > input(n); multiset mset; for (int i=0; i>input[i].first>>input[i].second; sort(input.begin(), input.end()); int k=0; mset.insert(input[k++].second); long long best=-1; do { while (k>m>>n) { vector > input(n); multiset mset; for (int i=0; i>input[i].first>>input[i].second; sort(input.begin(), input.end()); int k=0; long long best=-1, highest_del=-1; mset.insert(input[k++].second); if (n%2==1) { cout<<-1<::iterator i=mset.begin(); i!=mset.end(); i++) cout<<*i<<" "; cout<n/2) { if (highest_del==-1) highest_del=*mset.rbegin(); else highest_del=min(highest_del, *mset.rbegin()); mset.erase(mset.lower_bound(*mset.rbegin()), mset.end()); } //mset /* cout<<"after"<::iterator i=mset.begin(); i!=mset.end(); i++) cout<<*i<<" "; cout<