// 2011/08/10 Tazoe

#include <iostream>
using namespace std;

class Tetoris{
	private:
		int stack[5001][5];
		int top;
	public:
		Tetoris();
		void insert(int d, int p, int q);
		bool erase();
		int getResult();
		void printStack();
};

Tetoris::Tetoris()
{
	for(int i=0; i<=5000; i++)
		for(int j=0; j<5; j++)
			if(i==0)
				stack[i][j] = 1;
			else
				stack[i][j] = 0;

	top = 0;
}

void Tetoris::insert(int d, int p, int q)
{
	if(d==1){
		int target;
		bool flg = false;
		for(int i=top; i>=0; i--){
			for(int j=0; j<p; j++){
				if(stack[i][q-1+j]!=0){
					target = i+1;
					flg = true;
					break;
				}
			}
			if(flg)
				break;
		}
		for(int j=0; j<p; j++)
			stack[target][q-1+j] = 1;
		if(top<target)
			top = target;
	}
	else{
		int target;
		for(int i=top; i>=0; i--)
			if(stack[i][q-1]!=0){
				target = i+1;
				break;
			}
		for(int i=0; i<p; i++)
			stack[target+i][q-1] = 1;
		if(top<target+p-1)
			top = target+p-1;
	}

	while(erase())
		;
}

bool Tetoris::erase()
{
	for(int i=1; i<=top; i++)
		if(stack[i][0]==1&&stack[i][1]==1&&stack[i][2]==1&&stack[i][3]==1&&stack[i][4]==1){
			for(int ii=i+1; ii<=top; ii++){
				stack[ii-1][0] = stack[ii][0];
				stack[ii-1][1] = stack[ii][1];
				stack[ii-1][2] = stack[ii][2];
				stack[ii-1][3] = stack[ii][3];
				stack[ii-1][4] = stack[ii][4];
			}
			top--;
			return true;
		}

	return false;
}

int Tetoris::getResult()
{
	int sum = 0;
	for(int i=top; i>=1; i--)
		for(int j=0; j<5; j++)
			if(stack[i][j]==1)
				sum++;

	return sum;
}

void Tetoris::printStack()
{
	for(int i=top; i>=1; i--){
		for(int j=0; j<5; j++)
			cout << stack[i][j];
		cout << endl;
	}
}

int main()
{
	while(true){
		int n;
		cin >> n;
		if(n==0)
			break;

		Tetoris tetoris;
		for(int i=0; i<n; i++){
			int d, p, q;
			cin >> d >> p >> q;
			tetoris.insert(d, p, q);
		}

//		tetoris.printStack();
		cout << tetoris.getResult() << endl;
	}

	return 0;
}