#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

typedef pair<int,int> P;
char s[5010][5];

// 初期化 (y == 0 のところを番兵でブロックにしておく)
void ini(){
	for(int y=0 ; y < 5010 ; y++ ){
		for(int x=0 ; x < 5 ; x++ ){
			s[y][x] = y? '.' : '#' ;
		}
	}
}

void debug(int ay){
	cout << "[debug]" << endl;
	for(int y=ay ; y > 0 ; y-- ){
		for(int x=0 ; x < 5 ; x++ ){
			cout << s[y][x];
		}
		cout << endl;
	}
	cout << endl;
}

// ブロックの初期位置を返す.
vector<P> block(int d, int p, int q, int y){
	vector<P> v;
	if( d == 1 ){ // 横向きのブロック
		for(int i=0 ; i < p ; i++ ){
			int mx = q + i;
			int my = y;
			v.push_back( P(mx,my) );
		}
	}else{ // 縦向きのブロック
		for(int i=0 ; i < p ; i++ ){
			int mx = q;
			int my = y + i;
			v.push_back( P(mx,my) );
		}
	}
	return v;
}

// ブロックを落とす, ay := ブロックの一番高い位置 + 10
void fall(vector<P> v, int& ay){
	// flag := ブロックが1マス落下できるかどうか
	bool flag = true;
	for(int i=0 ; i < v.size() ; i++ ){
		int x = v[i].first;
		int y = v[i].second;
		if( s[y-1][x] == '#' ){
			flag = false;
		}
	}
	
	if( flag ){ // 1マス落下させるとき
		for(int i=0 ; i < v.size() ; i++ ){
			v[i].second--;
		}
		fall( v , ay );
	}else{ // ブロックの落下位置が決まる
		int my = v[0].second;
		for(int i=0 ; i < v.size() ; i++ ){
			int x = v[i].first;
			int y = v[i].second;
			s[y][x] = '#';
			my = max( my , y );
		}
		ay = my + 10;
	}
}

// 高さ y が揃ったかどうか
bool is_line(int y){
	return (s[y][0] == '#' && s[y][1] == '#' && s[y][2] == '#' && s[y][3] == '#' && s[y][4] == '#');
}

// 高さ l の列を消す.
void remove(int l, int ay){
	for(int y=l ; y < ay ; y++ ){
		s[y][0] = s[y+1][0];
		s[y][1] = s[y+1][1];
		s[y][2] = s[y+1][2];
		s[y][3] = s[y+1][3];
		s[y][4] = s[y+1][4];
	}
}

// 揃った列があるか調べて消す.
void check(int ay){
	for(int y=1 ; y < ay ; y++ ){
		if( is_line(y) ){
			remove(y,ay);
			y--;
		}
	}
}

int block_count(int ay){
	int ans = 0;
	for(int y=1 ; y < ay ; y++ ){
		for(int x=0 ; x < 5 ; x++ ){
			if( s[y][x] == '#' ) ans++;
		}
	}
	return ans;
}

int main(){
	int n;
	while( cin >> n , n ){
		ini();
		int y=10;
		for(int i=0 ; i < n ; i++ ){
			int d, p, q;
			cin >> d >> p >> q;
			vector<P> v = block(d,p,q-1,y);
			fall(v,y);
			check(y);
			// debug(y);
		}
		int ans = block_count(y);
		cout << ans << endl;
	}
}