#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S> void arrErase( int k, int & sz, S a[ ] ) {
int i;
sz-- ;
for ( i= ( k) ; i< ( sz) ; i++ ) {
a[ i] = a[ i+ 1 ] ;
}
}
template < class S, class T> void arrErase( int k, int & sz, S a[ ] , T b[ ] ) {
int i;
sz-- ;
for ( i= ( k) ; i< ( sz) ; i++ ) {
a[ i] = a[ i+ 1 ] ;
}
for ( i= ( k) ; i< ( sz) ; i++ ) {
b[ i] = b[ i+ 1 ] ;
}
}
template < class S, class T, class U> void arrErase( int k, int & sz, S a[ ] , T b[ ] , U c[ ] ) {
int i;
sz-- ;
for ( i= ( k) ; i< ( sz) ; i++ ) {
a[ i] = a[ i+ 1 ] ;
}
for ( i= ( k) ; i< ( sz) ; i++ ) {
b[ i] = b[ i+ 1 ] ;
}
for ( i= ( k) ; i< ( sz) ; i++ ) {
c[ i] = c[ i+ 1 ] ;
}
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Leaderboard{
public :
int score[ 10001 ] ;
int lis[ 1001 ] ;
int sz;
Leaderboard( ) {
int i;
for ( i= ( 0 ) ; i< ( 10001 ) ; i++ ) {
score[ i] = 0 ;
}
sz = 0 ;
}
void addScore( int id, int s) {
if ( score[ id] > 0 ) {
int i;
for ( i= ( 0 ) ; i< ( sz) ; i++ ) {
if ( lis[ i] == score[ id] ) {
break ;
}
}
lis[ i] + = s;
score[ id] + = s;
return ;
}
score[ id] = s;
lis[ sz++ ] = s;
}
int top( int K) {
int i;
int res = 0 ;
sort( lis, lis+ sz) ;
for ( i= ( 0 ) ; i< ( K) ; i++ ) {
res + = lis[ sz- 1 - i] ;
}
return res;
}
void reset( int id) {
if ( score[ id] > 0 ) {
int i;
for ( i= ( 0 ) ; i< ( sz) ; i++ ) {
if ( lis[ i] == score[ id] ) {
break ;
}
}
arrErase( i, sz, lis) ;
score[ id] = 0 ;
}
}
}
;
// cLay varsion 20191102-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Leaderboard {
// public:
// int score[10001];
// int lis[1001], sz;
//
// Leaderboard() {
// rep(i,10001) score[i] = 0;
// sz = 0;
// }
//
// void addScore(int id, int s) {
// if(score[id] > 0){
// rep(i,sz) if(lis[i]==score[id]) break;
// lis[i] += s;
// score[id] += s;
// return;
// }
// score[id] = s;
// lis[sz++] = s;
// }
//
// int top(int K) {
// int res = 0;
// sort(lis, lis+sz);
// rep(i,K) res += lis[sz-1-i];
// return res;
// }
//
// void reset(int id) {
// if(score[id] > 0){
// rep(i,sz) if(lis[i] == score[id]) break;
// arrErase(i, sz, lis);
// score[id] = 0;
// }
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFM+IHZvaWQgYXJyRXJhc2UoaW50IGssIGludCAmc3osIFMgYVtdKXsKICBpbnQgaTsKICBzei0tOwogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGFbaV0gPSBhW2krMV07CiAgfQp9CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IHZvaWQgYXJyRXJhc2UoaW50IGssIGludCAmc3osIFMgYVtdLCBUIGJbXSl7CiAgaW50IGk7CiAgc3otLTsKICBmb3IoaT0oayk7aTwoc3opO2krKyl7CiAgICBhW2ldID0gYVtpKzFdOwogIH0KICBmb3IoaT0oayk7aTwoc3opO2krKyl7CiAgICBiW2ldID0gYltpKzFdOwogIH0KfQp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBVPiB2b2lkIGFyckVyYXNlKGludCBrLCBpbnQgJnN6LCBTIGFbXSwgVCBiW10sIFUgY1tdKXsKICBpbnQgaTsKICBzei0tOwogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGFbaV0gPSBhW2krMV07CiAgfQogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGJbaV0gPSBiW2krMV07CiAgfQogIGZvcihpPShrKTtpPChzeik7aSsrKXsKICAgIGNbaV0gPSBjW2krMV07CiAgfQp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgTGVhZGVyYm9hcmR7CiAgcHVibGljOgogIGludCBzY29yZVsxMDAwMV07CiAgaW50IGxpc1sxMDAxXTsKICBpbnQgc3o7CiAgTGVhZGVyYm9hcmQoKXsKICAgIGludCBpOwogICAgZm9yKGk9KDApO2k8KDEwMDAxKTtpKyspewogICAgICBzY29yZVtpXSA9IDA7CiAgICB9CiAgICBzeiA9IDA7CiAgfQogIHZvaWQgYWRkU2NvcmUoaW50IGlkLCBpbnQgcyl7CiAgICBpZihzY29yZVtpZF0gPiAwKXsKICAgICAgaW50IGk7CiAgICAgIGZvcihpPSgwKTtpPChzeik7aSsrKXsKICAgICAgICBpZihsaXNbaV09PXNjb3JlW2lkXSl7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGlzW2ldICs9IHM7CiAgICAgIHNjb3JlW2lkXSArPSBzOwogICAgICByZXR1cm47CiAgICB9CiAgICBzY29yZVtpZF0gPSBzOwogICAgbGlzW3N6KytdID0gczsKICB9CiAgaW50IHRvcChpbnQgSyl7CiAgICBpbnQgaTsKICAgIGludCByZXMgPSAwOwogICAgc29ydChsaXMsIGxpcytzeik7CiAgICBmb3IoaT0oMCk7aTwoSyk7aSsrKXsKICAgICAgcmVzICs9IGxpc1tzei0xLWldOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgdm9pZCByZXNldChpbnQgaWQpewogICAgaWYoc2NvcmVbaWRdID4gMCl7CiAgICAgIGludCBpOwogICAgICBmb3IoaT0oMCk7aTwoc3opO2krKyl7CiAgICAgICAgaWYobGlzW2ldID09IHNjb3JlW2lkXSl7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXJyRXJhc2UoaSwgc3osIGxpcyk7CiAgICAgIHNjb3JlW2lkXSA9IDA7CiAgICB9CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMTkxMTAyLTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gY2xhc3MgTGVhZGVyYm9hcmQgewovLyBwdWJsaWM6Ci8vICAgaW50IHNjb3JlWzEwMDAxXTsKLy8gICBpbnQgbGlzWzEwMDFdLCBzejsKLy8gCi8vICAgTGVhZGVyYm9hcmQoKSB7Ci8vICAgICByZXAoaSwxMDAwMSkgc2NvcmVbaV0gPSAwOwovLyAgICAgc3ogPSAwOwovLyAgIH0KLy8gCi8vICAgdm9pZCBhZGRTY29yZShpbnQgaWQsIGludCBzKSB7Ci8vICAgICBpZihzY29yZVtpZF0gPiAwKXsKLy8gICAgICAgcmVwKGksc3opIGlmKGxpc1tpXT09c2NvcmVbaWRdKSBicmVhazsKLy8gICAgICAgbGlzW2ldICs9IHM7Ci8vICAgICAgIHNjb3JlW2lkXSArPSBzOwovLyAgICAgICByZXR1cm47Ci8vICAgICB9Ci8vICAgICBzY29yZVtpZF0gPSBzOwovLyAgICAgbGlzW3N6KytdID0gczsKLy8gICB9Ci8vIAovLyAgIGludCB0b3AoaW50IEspIHsKLy8gICAgIGludCByZXMgPSAwOwovLyAgICAgc29ydChsaXMsIGxpcytzeik7Ci8vICAgICByZXAoaSxLKSByZXMgKz0gbGlzW3N6LTEtaV07Ci8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gCi8vICAgdm9pZCByZXNldChpbnQgaWQpIHsKLy8gICAgIGlmKHNjb3JlW2lkXSA+IDApewovLyAgICAgICByZXAoaSxzeikgaWYobGlzW2ldID09IHNjb3JlW2lkXSkgYnJlYWs7Ci8vICAgICAgIGFyckVyYXNlKGksIHN6LCBsaXMpOwovLyAgICAgICBzY29yZVtpZF0gPSAwOwovLyAgICAgfQovLyAgIH0KLy8gfTsK