#include <iostream>
#include <queue>

using namespace std;

struct dipq
{
	priority_queue< int,vector<int>,less<int> > pq1;
	priority_queue< int,vector<int>,greater<int> > pq2;
	long long mn1,mn2;
	
	inline void push(int val)
	{
		if (pq1.empty()||val<=pq1.top())
		{
			if (!pq1.empty()) mn1+=pq1.top()-val;
			pq1.push(val);
		}
		else 
		{
			mn2+=val-pq1.top();
			pq2.push(val);
		}
		while (pq1.size()>pq2.size()+1)
		{
			int _val=pq1.top();
			pq1.pop();
			mn1-=1LL*(_val-pq1.top())*pq1.size();
			mn2+=1LL*(_val-pq1.top())*(pq2.size()+1);
			pq2.push(_val);
		}
		while (pq1.size()<pq2.size())
		{
			int _val=pq2.top();
			pq2.pop();
			mn2-=1LL*(_val-pq1.top())*(pq2.size()+1);
			mn1+=1LL*(_val-pq1.top())*pq1.size();
			pq1.push(_val);
		}
		return;
	}
	
	inline int get()
	{
		return pq1.top();
	}
	
	inline dipq():mn1(0),mn2(0) {}
};

inline int _abs(int a, int b)
{
	return a>b?a-b:b-a;
}

int Q;
dipq d;
long long rec;

int main()
{
	for (cin >> Q; Q--; )
	{
		int opr;
		cin >> opr;
		if (opr==1)
		{
			int a,b;
			cin >> a >> b;
			d.push(a);
			rec+=b;
		}
		else cout << d.pq1.top() << " " << d.mn1+d.mn2+rec << endl;
	}
	return 0;
}