#include <vector>
#include <algorithm>
#include <cassert>
#include <cstdio>
using namespace std;
typedef vector<int> vi;
struct RangeResult{ int maxi, sn, waste; };
RangeResult merge(const RangeResult& a, const RangeResult& b){
return { max(a.maxi, b.maxi), a.sn + b.sn, a.waste + b.waste };
}
struct snode {
int i, j; RangeResult res;
snode *l, *r;
~snode() { delete l; delete r; }
snode(int i, int j, int v ): i(i), j(j), res({v,0,0}) {
if (j - i == 1) {
l = r = NULL;
} else {
int k = i + j >> 1;
l = new snode(i, k, v);
r = new snode(k, j, v);
}
}
void update(int v){
if( j - i == 1 ){
res.maxi -= v; assert(res.maxi>=0);
res.sn = 1; res.waste = res.maxi;
}else{
if( l->res.maxi >= v ) l->update(v);
else r->update(v);
res = merge( l->res, r->res );
}
}
};
struct segment {
snode *root;
segment() : root(0) {}
void init(int n, int v) {
if(root) delete root;
root = new snode(0, n, v);
}
void update(int v){
root->update(v);
}
};
const int MAXS=1e5+10;
int T, K,N, a,b; char buf[128];
segment tree;
int main() {
scanf("%d",&T);
while(T--){
scanf("%d%d\n",&K,&N);
tree.init(MAXS, K);
for(int i=0;i<N;i++){
fgets(buf, 128, stdin);
if(buf[0]=='b'){
sscanf(buf, "b %d %d",&a,&b);
for(int j=0;j<a;j++)
tree.update(b);
i+=(a-1);
}else{
sscanf(buf, "%d",&a);
tree.update(a);
}
} auto& ret = tree.root->res;
printf("%d %d\n",ret.sn,ret.waste);
}
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxjc3RkaW8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnN0cnVjdCBSYW5nZVJlc3VsdHsgaW50IG1heGksIHNuLCB3YXN0ZTsgfTsKUmFuZ2VSZXN1bHQgbWVyZ2UoY29uc3QgUmFuZ2VSZXN1bHQmIGEsIGNvbnN0IFJhbmdlUmVzdWx0JiBiKXsKICAgIHJldHVybiB7IG1heChhLm1heGksIGIubWF4aSksIGEuc24gKyBiLnNuLCBhLndhc3RlICsgYi53YXN0ZSB9Owp9CnN0cnVjdCBzbm9kZSB7CiAgICBpbnQgaSwgajsgUmFuZ2VSZXN1bHQgcmVzOwogICAgc25vZGUgKmwsICpyOwogICAgfnNub2RlKCkgeyBkZWxldGUgbDsgZGVsZXRlIHI7IH0KICAgIHNub2RlKGludCBpLCBpbnQgaiwgaW50IHYgKTogaShpKSwgaihqKSwgcmVzKHt2LDAsMH0pIHsKICAgICAgICBpZiAoaiAtIGkgPT0gMSkgewogICAgICAgICAgICBsID0gciA9IE5VTEw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW50IGsgPSBpICsgaiA+PiAxOwogICAgICAgICAgICBsID0gbmV3IHNub2RlKGksIGssIHYpOwogICAgICAgICAgICByID0gbmV3IHNub2RlKGssIGosIHYpOwogICAgICAgIH0KICAgIH0KICAgIHZvaWQgdXBkYXRlKGludCB2KXsKICAgIAlpZiggaiAtIGkgPT0gMSApewogICAgCQlyZXMubWF4aSAtPSB2OyBhc3NlcnQocmVzLm1heGk+PTApOwogICAgCQlyZXMuc24gPSAxOyByZXMud2FzdGUgPSByZXMubWF4aTsKICAgIAl9ZWxzZXsKICAgIAkJaWYoIGwtPnJlcy5tYXhpID49IHYgKSBsLT51cGRhdGUodik7CiAgICAJCWVsc2Ugci0+dXBkYXRlKHYpOwogICAgCQlyZXMgPSBtZXJnZSggbC0+cmVzLCByLT5yZXMgKTsKICAgIAl9CiAgICB9Cn07CnN0cnVjdCBzZWdtZW50IHsKICAgIHNub2RlICpyb290OwogICAgc2VnbWVudCgpIDogcm9vdCgwKSB7fQogICAgdm9pZCBpbml0KGludCBuLCBpbnQgdikgewogICAgICAgIGlmKHJvb3QpIGRlbGV0ZSByb290OwogICAgICAgIHJvb3QgPSBuZXcgc25vZGUoMCwgbiwgdik7CiAgICB9CiAgICB2b2lkIHVwZGF0ZShpbnQgdil7CiAgICAJcm9vdC0+dXBkYXRlKHYpOwogICAgfQp9OwoKY29uc3QgaW50IE1BWFM9MWU1KzEwOwppbnQgVCwgSyxOLCBhLGI7IGNoYXIgYnVmWzEyOF07CnNlZ21lbnQgdHJlZTsKaW50IG1haW4oKSB7CglzY2FuZigiJWQiLCZUKTsKCXdoaWxlKFQtLSl7CgkJc2NhbmYoIiVkJWRcbiIsJkssJk4pOwoJCXRyZWUuaW5pdChNQVhTLCBLKTsKCQlmb3IoaW50IGk9MDtpPE47aSsrKXsKCQkJZmdldHMoYnVmLCAxMjgsIHN0ZGluKTsKCQkJaWYoYnVmWzBdPT0nYicpewoJCQkJc3NjYW5mKGJ1ZiwgImIgJWQgJWQiLCZhLCZiKTsKCQkJCWZvcihpbnQgaj0wO2o8YTtqKyspCgkJCQkJdHJlZS51cGRhdGUoYik7CgkJCQlpKz0oYS0xKTsKCQkJfWVsc2V7CgkJCQlzc2NhbmYoYnVmLCAiJWQiLCZhKTsKCQkJCXRyZWUudXBkYXRlKGEpOwoJCQl9CgkJfSBhdXRvJiByZXQgPSB0cmVlLnJvb3QtPnJlczsKCQlwcmludGYoIiVkICVkXG4iLHJldC5zbixyZXQud2FzdGUpOwoJfQoJcmV0dXJuIDA7Cn0=