#include <stdio.h>
#include <assert.h>
#define MAX 100
#define DAT 3
#define ANO 2
#define MES 1
#define DIA 0
#define MAX 100
void LeMatriz( int Mat[MAX][DAT], int n ) {
int i,j;
for ( i = 0; i < n; i++)
for ( j = 0; j < 3; j++)
scanf("%d", &Mat[i][j]);
return;
}
void ImprimeMatriz( int Mat[MAX][DAT], int n ) {
int i,j;
for ( i = 0; i < n; i++) {
for ( j = 0; j < DAT; j++)
printf( "%5d ", Mat[i][j] );
printf( "\n" );
}
return;
}
int IndiceDoMenor( int M[][DAT], int i, int n );
void Troca( int M[][DAT], int i, int j );
int main()
{
int M[MAX][DAT];
int n;
int i, imenor;
scanf( "%d", &n );
assert( n <= MAX );
LeMatriz( M, n );
for (i = 0; i < n; i++) {
imenor = IndiceDoMenor( M, i, n);
Troca( M, i, imenor );
}
ImprimeMatriz( M, n );
return 0;
}
void LeSequenciaDeDatas( int M[][DAT], int n ) {
int i;
for ( i = 0; i < n; i++)
scanf("%d %d %d", &M[i][0], &M[i][1], &M[i][2]);
return;
}
/* void ImprimeSequencia( int M[][DAT], int n ) { */
/* int i; */
/* for ( i = 0; i < n; i++) */
/* printf( "%7.3f ", S[i] ); */
/* printf( "\n" ); */
/* return; */
/* } */
int ComparaDatas( int D1[], int D2[] ) {
if (D1[ANO] < D2[ANO]) return -1;
else if (D1[ANO] > D2[ANO]) return +1;
if (D1[MES] < D2[MES]) return -1;
else if (D1[MES] > D2[MES]) return +1;
if (D1[DIA] < D2[DIA]) return -1;
else if (D1[DIA] > D2[DIA]) return +1;
return 0;
}
/* devolve indice do menor elto no intervalo de i a n-1 */
int IndiceDoMenor( int M[][DAT], int i, int n ) {
int j, m;
m = i;
/* m eh o indice do menor elemento de S[i..j-1] */
for ( j = i+1; j < n; j++ )
if ( ComparaDatas( M[j], M[m] ) == -1 )
m = j;
return m;
}
void Troca( int M[][DAT], int i, int j ) {
int aux;
int k;
for ( k = 0; k < DAT; k++ ) {
aux = M[i][k];
M[i][k] = M[j][k];
M[j][k] = aux;
}
return;
}