#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
void * wmem;
template < class T> inline void walloc1d( T ** arr, int x, void ** mem = & wmem) {
static int skip[ 16 ] = { 0 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 } ;
( * mem) = ( void * ) ( ( ( char * ) ( * mem) ) + skip[ ( ( unsigned long long ) ( * mem) ) & 15 ] ) ;
( * arr) = ( T* ) ( * mem) ;
( * mem) = ( ( * arr) + x) ;
}
template < class T> struct Heap{
T * val;
int size;
void malloc ( const int N) {
val = ( T* ) std:: malloc ( N* sizeof ( T) ) ;
size = 0 ;
}
void walloc( const int N, void ** mem = & wmem) {
walloc1d( & val, N, mem) ;
size = 0 ;
}
void free ( ) {
std:: free ( val) ;
}
void init( ) {
size = 0 ;
}
void up( ) {
int m, n= size - 1 ;
while ( n) {
m = ( n- 1 ) / 2 ;
if ( val[ m] <= val[ n] ) {
break ;
}
swap( val[ m] , val[ n] ) ;
n = m;
}
}
void down( ) {
int m, n= 0 ;
for ( ;; ) {
m= 2 * n+ 1 ;
if ( m>= size) {
break ;
}
if ( m+ 1 < size && val[ m] > val[ m+ 1 ] ) {
m++ ;
}
if ( val[ m] >= val[ n] ) {
break ;
}
swap( val[ m] , val[ n] ) ;
n = m;
}
}
T top( ) {
return val[ 0 ] ;
}
T pop( ) {
T res= val[ 0 ] ;
size-- ;
if ( size > 0 ) {
val[ 0 ] = val[ size] ;
down( ) ;
}
return res;
}
T push( const T x) {
val[ size++ ] = x;
up( ) ;
return x;
}
}
;
template < class T> struct Heap_max{
T * val;
int size;
void malloc ( const int N) {
val = ( T* ) std:: malloc ( N* sizeof ( T) ) ;
size = 0 ;
}
void walloc( const int N, void ** mem = & wmem) {
walloc1d( & val, N, mem) ;
size = 0 ;
}
void free ( ) {
std:: free ( val) ;
}
void init( ) {
size = 0 ;
}
void up( ) {
int m, n= size - 1 ;
while ( n) {
m = ( n- 1 ) / 2 ;
if ( val[ m] >= val[ n] ) {
break ;
}
swap( val[ m] , val[ n] ) ;
n = m;
}
}
void down( ) {
int m, n= 0 ;
for ( ;; ) {
m= 2 * n+ 1 ;
if ( m>= size) {
break ;
}
if ( m+ 1 < size && val[ m] < val[ m+ 1 ] ) {
m++ ;
}
if ( val[ m] <= val[ n] ) {
break ;
}
swap( val[ m] , val[ n] ) ;
n= m;
}
}
T top( ) {
return val[ 0 ] ;
}
T pop( ) {
T res= val[ 0 ] ;
size-- ;
if ( size > 0 ) {
val[ 0 ] = val[ size] ;
down( ) ;
}
return res;
}
T push( const T x) {
val[ size++ ] = x;
up( ) ;
return x;
}
}
;
char memarr[ 96000000 ] ;
#define main dummy_main
int main( ) {
wmem = memarr;
return 0 ;
}
#undef main
class DinnerPlates{
Heap< int > canpush;
Heap_max< int > nonempty;
int cap;
vector< int > v[ 200000 ] ;
public :
DinnerPlates( int capacity) {
int i;
cap = capacity;
canpush.malloc ( 200000 ) ;
nonempty.malloc ( 200000 ) ;
for ( i= 0 ; i< ( 200000 ) ; i++ ) {
canpush.push ( i) ;
}
}
~DinnerPlates( void ) {
canpush.free ( ) ;
nonempty.free ( ) ;
}
void push( int val) {
int k;
for ( ;; ) {
k = canpush.pop ( ) ;
if ( v[ k] .size ( ) < cap) {
break ;
}
}
v[ k] .push_back ( val) ;
if ( v[ k] .size ( ) == 1 ) {
nonempty.push ( k) ;
}
if ( v[ k] .size ( ) ! = cap) {
canpush.push ( k) ;
}
}
int pop( ) {
int k;
for ( ;; ) {
if ( nonempty.size == 0 ) {
return - 1 ;
}
k = nonempty.pop ( ) ;
if ( v[ k] .size ( ) ) {
break ;
}
}
return popAtStack( k) ;
}
int popAtStack( int index) {
int res;
if ( v[ index] .size ( ) == 0 ) {
return - 1 ;
}
res = v[ index] [ v[ index] .size ( ) - 1 ] ;
v[ index] .pop_back ( ) ;
if ( v[ index] .size ( ) >= 1 ) {
nonempty.push ( index) ;
}
if ( v[ index] .size ( ) == cap- 1 ) {
canpush.push ( index) ;
}
return res;
}
}
;
// cLay varsion 20190829-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class DinnerPlates {
// public:
// int cap;
// vector<int> v[200000];
// Heap<int> canpush;
// Heap_max<int> nonempty;
//
// DinnerPlates(int capacity) {
// cap = capacity;
// canpush.malloc(2d5);
// nonempty.malloc(2d5);
// rep(i,2d5) canpush.push(i);
// }
//
// ~DinnerPlates(void){
// canpush.free();
// nonempty.free();
// }
//
// void push(int val) {
// int k;
// for(;;){
// k = canpush.pop();
// if(v[k].size() < cap) break;
// }
// v[k].push_back(val);
// if(v[k].size() == 1) nonempty.push(k);
// if(v[k].size() != cap) canpush.push(k);
// }
//
// int pop() {
// int k;
// for(;;){
// if(nonempty.size==0) return -1;
// k = nonempty.pop();
// if(v[k].size()) break;
// }
// return popAtStack(k);
// }
//
// int popAtStack(int index) {
// int res;
// if(v[index].size()==0) return -1;
// res = v[index][v[index].size()-1];
// v[index].pop_back();
// if(v[index].size() >= 1) nonempty.push(index);
// if(v[index].size() == cap-1) canpush.push(index);
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgKndtZW07CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSB2b2lkIHdhbGxvYzFkKFQgKiphcnIsIGludCB4LCB2b2lkICoqbWVtID0gJndtZW0pewogIHN0YXRpYyBpbnQgc2tpcFsxNl09ezAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDF9OwogICgqbWVtKSA9ICh2b2lkKikoICgoY2hhciopKCptZW0pKSArIHNraXBbKCh1bnNpZ25lZCBsb25nIGxvbmcpKCptZW0pKSAmIDE1XSApOwogICgqYXJyKT0oVCopKCptZW0pOwogICgqbWVtKT0oKCphcnIpK3gpOwp9CnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBIZWFwewogIFQgKnZhbDsKICBpbnQgc2l6ZTsKICB2b2lkIG1hbGxvYyhjb25zdCBpbnQgTil7CiAgICB2YWwgPSAoVCopIHN0ZDo6bWFsbG9jKE4qc2l6ZW9mKFQpKTsKICAgIHNpemUgPSAwOwogIH0KICB2b2lkIHdhbGxvYyhjb25zdCBpbnQgTiwgdm9pZCAqKm1lbSA9ICZ3bWVtKXsKICAgIHdhbGxvYzFkKCZ2YWwsIE4sIG1lbSk7CiAgICBzaXplID0gMDsKICB9CiAgdm9pZCBmcmVlKCl7CiAgICBzdGQ6OmZyZWUodmFsKTsKICB9CiAgdm9pZCBpbml0KCl7CiAgICBzaXplID0gMDsKICB9CiAgdm9pZCB1cCgpewogICAgaW50IG0sIG49c2l6ZSAtIDE7CiAgICB3aGlsZShuKXsKICAgICAgbSA9IChuLTEpIC8gMjsKICAgICAgaWYodmFsW21dIDw9IHZhbFtuXSl7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dhcCh2YWxbbV0sIHZhbFtuXSk7CiAgICAgIG4gPSBtOwogICAgfQogIH0KICB2b2lkIGRvd24oKXsKICAgIGludCBtLCBuPTA7CiAgICBmb3IoOzspewogICAgICBtPTIqbisxOwogICAgICBpZihtPj1zaXplKXsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZihtKzE8c2l6ZSAmJiB2YWxbbV0gPiB2YWxbbSsxXSl7CiAgICAgICAgbSsrOwogICAgICB9CiAgICAgIGlmKHZhbFttXSA+PSB2YWxbbl0pewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3YXAodmFsW21dLCB2YWxbbl0pOwogICAgICBuID0gbTsKICAgIH0KICB9CiAgVCB0b3AoKXsKICAgIHJldHVybiB2YWxbMF07CiAgfQogIFQgcG9wKCl7CiAgICBUIHJlcz12YWxbMF07CiAgICBzaXplLS07CiAgICBpZihzaXplID4gMCl7CiAgICAgIHZhbFswXSA9IHZhbFtzaXplXTsKICAgICAgZG93bigpOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgVCBwdXNoKGNvbnN0IFQgeCl7CiAgICB2YWxbc2l6ZSsrXSA9IHg7CiAgICB1cCgpOwogICAgcmV0dXJuIHg7CiAgfQp9CjsKdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IEhlYXBfbWF4ewogIFQgKnZhbDsKICBpbnQgc2l6ZTsKICB2b2lkIG1hbGxvYyhjb25zdCBpbnQgTil7CiAgICB2YWwgPSAoVCopIHN0ZDo6bWFsbG9jKE4qc2l6ZW9mKFQpKTsKICAgIHNpemUgPSAwOwogIH0KICB2b2lkIHdhbGxvYyhjb25zdCBpbnQgTiwgdm9pZCAqKm1lbSA9ICZ3bWVtKXsKICAgIHdhbGxvYzFkKCZ2YWwsIE4sIG1lbSk7CiAgICBzaXplID0gMDsKICB9CiAgdm9pZCBmcmVlKCl7CiAgICBzdGQ6OmZyZWUodmFsKTsKICB9CiAgdm9pZCBpbml0KCl7CiAgICBzaXplID0gMDsKICB9CiAgdm9pZCB1cCgpewogICAgaW50IG0sIG49c2l6ZSAtIDE7CiAgICB3aGlsZShuKXsKICAgICAgbSA9IChuLTEpIC8gMjsKICAgICAgaWYodmFsW21dID49IHZhbFtuXSl7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dhcCh2YWxbbV0sIHZhbFtuXSk7CiAgICAgIG4gPSBtOwogICAgfQogIH0KICB2b2lkIGRvd24oKXsKICAgIGludCBtLCBuPTA7CiAgICBmb3IoOzspewogICAgICBtPTIqbisxOwogICAgICBpZihtPj1zaXplKXsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZihtKzE8c2l6ZSAmJiB2YWxbbV0gPCB2YWxbbSsxXSl7CiAgICAgICAgbSsrOwogICAgICB9CiAgICAgIGlmKHZhbFttXSA8PSB2YWxbbl0pewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3YXAodmFsW21dLCB2YWxbbl0pOwogICAgICBuPW07CiAgICB9CiAgfQogIFQgdG9wKCl7CiAgICByZXR1cm4gdmFsWzBdOwogIH0KICBUIHBvcCgpewogICAgVCByZXM9dmFsWzBdOwogICAgc2l6ZS0tOwogICAgaWYoc2l6ZSA+IDApewogICAgICB2YWxbMF0gPSB2YWxbc2l6ZV07CiAgICAgIGRvd24oKTsKICAgIH0KICAgIHJldHVybiByZXM7CiAgfQogIFQgcHVzaChjb25zdCBUIHgpewogICAgdmFsW3NpemUrK10gPSB4OwogICAgdXAoKTsKICAgIHJldHVybiB4OwogIH0KfQo7CmNoYXIgbWVtYXJyWzk2MDAwMDAwXTsKI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICB3bWVtID0gbWVtYXJyOwogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIERpbm5lclBsYXRlc3sKICBIZWFwPGludD4gY2FucHVzaDsKICBIZWFwX21heDxpbnQ+IG5vbmVtcHR5OwogIGludCBjYXA7CiAgdmVjdG9yPGludD4gdlsyMDAwMDBdOwogIHB1YmxpYzoKICBEaW5uZXJQbGF0ZXMoaW50IGNhcGFjaXR5KXsKICAgIGludCBpOwogICAgY2FwID0gY2FwYWNpdHk7CiAgICBjYW5wdXNoLm1hbGxvYygyMDAwMDApOwogICAgbm9uZW1wdHkubWFsbG9jKDIwMDAwMCk7CiAgICBmb3IoaT0wO2k8KDIwMDAwMCk7aSsrKXsKICAgICAgY2FucHVzaC5wdXNoKGkpOwogICAgfQogIH0KICB+RGlubmVyUGxhdGVzKHZvaWQpewogICAgY2FucHVzaC5mcmVlKCk7CiAgICBub25lbXB0eS5mcmVlKCk7CiAgfQogIHZvaWQgcHVzaChpbnQgdmFsKXsKICAgIGludCBrOwogICAgZm9yKDs7KXsKICAgICAgayA9IGNhbnB1c2gucG9wKCk7CiAgICAgIGlmKHZba10uc2l6ZSgpIDwgY2FwKXsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgdltrXS5wdXNoX2JhY2sodmFsKTsKICAgIGlmKHZba10uc2l6ZSgpID09IDEpewogICAgICBub25lbXB0eS5wdXNoKGspOwogICAgfQogICAgaWYodltrXS5zaXplKCkgIT0gY2FwKXsKICAgICAgY2FucHVzaC5wdXNoKGspOwogICAgfQogIH0KICBpbnQgcG9wKCl7CiAgICBpbnQgazsKICAgIGZvcig7Oyl7CiAgICAgIGlmKG5vbmVtcHR5LnNpemU9PTApewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBrID0gbm9uZW1wdHkucG9wKCk7CiAgICAgIGlmKHZba10uc2l6ZSgpKXsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBvcEF0U3RhY2soayk7CiAgfQogIGludCBwb3BBdFN0YWNrKGludCBpbmRleCl7CiAgICBpbnQgcmVzOwogICAgaWYodltpbmRleF0uc2l6ZSgpPT0wKXsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgcmVzID0gdltpbmRleF1bdltpbmRleF0uc2l6ZSgpLTFdOwogICAgdltpbmRleF0ucG9wX2JhY2soKTsKICAgIGlmKHZbaW5kZXhdLnNpemUoKSA+PSAxKXsKICAgICAgbm9uZW1wdHkucHVzaChpbmRleCk7CiAgICB9CiAgICBpZih2W2luZGV4XS5zaXplKCkgPT0gY2FwLTEpewogICAgICBjYW5wdXNoLnB1c2goaW5kZXgpOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAxOTA4MjktMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBEaW5uZXJQbGF0ZXMgewovLyBwdWJsaWM6Ci8vICAgaW50IGNhcDsKLy8gICB2ZWN0b3I8aW50PiB2WzIwMDAwMF07Ci8vICAgSGVhcDxpbnQ+IGNhbnB1c2g7Ci8vICAgSGVhcF9tYXg8aW50PiBub25lbXB0eTsKLy8gCi8vICAgRGlubmVyUGxhdGVzKGludCBjYXBhY2l0eSkgewovLyAgICAgY2FwID0gY2FwYWNpdHk7Ci8vICAgICBjYW5wdXNoLm1hbGxvYygyZDUpOwovLyAgICAgbm9uZW1wdHkubWFsbG9jKDJkNSk7Ci8vICAgICByZXAoaSwyZDUpIGNhbnB1c2gucHVzaChpKTsKLy8gICB9Ci8vIAovLyAgIH5EaW5uZXJQbGF0ZXModm9pZCl7Ci8vICAgICBjYW5wdXNoLmZyZWUoKTsKLy8gICAgIG5vbmVtcHR5LmZyZWUoKTsKLy8gICB9Ci8vICAgCi8vICAgdm9pZCBwdXNoKGludCB2YWwpIHsKLy8gICAgIGludCBrOwovLyAgICAgZm9yKDs7KXsKLy8gICAgICAgayA9IGNhbnB1c2gucG9wKCk7Ci8vICAgICAgIGlmKHZba10uc2l6ZSgpIDwgY2FwKSBicmVhazsKLy8gICAgIH0KLy8gICAgIHZba10ucHVzaF9iYWNrKHZhbCk7Ci8vICAgICBpZih2W2tdLnNpemUoKSA9PSAxKSBub25lbXB0eS5wdXNoKGspOwovLyAgICAgaWYodltrXS5zaXplKCkgIT0gY2FwKSBjYW5wdXNoLnB1c2goayk7Ci8vICAgfQovLyAgIAovLyAgIGludCBwb3AoKSB7Ci8vICAgICBpbnQgazsKLy8gICAgIGZvcig7Oyl7Ci8vICAgICAgIGlmKG5vbmVtcHR5LnNpemU9PTApIHJldHVybiAtMTsKLy8gICAgICAgayA9IG5vbmVtcHR5LnBvcCgpOwovLyAgICAgICBpZih2W2tdLnNpemUoKSkgYnJlYWs7Ci8vICAgICB9Ci8vICAgICByZXR1cm4gcG9wQXRTdGFjayhrKTsKLy8gICB9Ci8vICAgCi8vICAgaW50IHBvcEF0U3RhY2soaW50IGluZGV4KSB7Ci8vICAgICBpbnQgcmVzOwovLyAgICAgaWYodltpbmRleF0uc2l6ZSgpPT0wKSByZXR1cm4gLTE7Ci8vICAgICByZXMgPSB2W2luZGV4XVt2W2luZGV4XS5zaXplKCktMV07Ci8vICAgICB2W2luZGV4XS5wb3BfYmFjaygpOwovLyAgICAgaWYodltpbmRleF0uc2l6ZSgpID49IDEpIG5vbmVtcHR5LnB1c2goaW5kZXgpOwovLyAgICAgaWYodltpbmRleF0uc2l6ZSgpID09IGNhcC0xKSBjYW5wdXNoLnB1c2goaW5kZXgpOwovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vIH07Cg==