solution
# include <iostream>
# include <cstring>
# include <algorithm>
# include <vector>
using namespace std;
const int N = 310 ;
struct node
{
long long x;
int loc, fin, id, score;
} ;
vector< node> tester;
bool cmp1 ( node xx, node yy)
{
return xx. score != yy. score ? xx. score > yy. score : xx. x < yy. x;
}
int main ( )
{
int n;
int m;
cin >> n;
int num = 0 ;
for ( int i = 1 ; i <= n; i++ )
{
cin >> m;
num += m;
vector< node> temp ( m) ;
for ( int j = 0 ; j < m; j++ )
{
cin >> temp[ j] . x >> temp[ j] . score;
temp[ j] . id = i;
}
sort ( temp. begin ( ) , temp. end ( ) , cmp1) ;
temp[ 0 ] . loc = 1 ;
tester. push_back ( temp[ 0 ] ) ;
for ( int j = 1 ; j < m; j++ )
{
temp[ j] . loc = ( temp[ j] . score == temp[ j - 1 ] . score) ? ( temp[ j - 1 ] . loc) : ( j + 1 ) ;
tester. push_back ( temp[ j] ) ;
}
}
sort ( tester. begin ( ) , tester. end ( ) , cmp1) ;
cout << num << endl;
tester[ 0 ] . fin = 1 ;
for ( int i = 1 ; i < num; i++ )
{
tester[ i] . fin = ( tester[ i] . score == tester[ i - 1 ] . score) ? ( tester[ i - 1 ] . fin) : ( i + 1 ) ;
}
for ( int i = 0 ; i < num; i++ )
{
printf ( "%013lld %d %d %d\n" , tester[ i] . x, tester[ i] . fin, tester[ i] . id, tester[ i] . loc) ;
}
}