#include <iostream>
using namespace std;
struct field{
string f;
string s;
int num;
} ;
void prints( field arr[ ] , int n, string p[ ] , string q[ ] , string l[ ] , string m[ ] , string b[ ] ) {
int ind = 0 ;
for ( int i = 0 ; i< n; i++ ) {
if ( arr[ i] .num == 1 ) {
p[ i] = arr[ i% n] .f ;
b[ ind++ ] = p[ i] ;
q[ i] = arr[ i% n] .s ;
b[ ind++ ] = q[ i] ;
}
else if ( arr[ i] .num == 0 ) {
l[ i] = arr[ i% n] .f ;
b[ ind++ ] = l[ i] ;
m[ i] = arr[ i% n] .s ;
b[ ind++ ] = m[ i] ;
}
else {
p[ i] = arr[ i% n] .f ;
b[ ind++ ] = p[ i] ;
q[ i] = arr[ i% n] .f ;
b[ ind++ ] = q[ i] ;
l[ i] = arr[ i% n] .f ;
b[ ind++ ] = l[ i] ;
m[ i] = arr[ i% n] .f ;
b[ ind++ ] = m[ i] ;
}
}
}
bool isDigi( char c) {
if ( c== '0' || c== '1' || c== '2' || c== '3' || c== '4' || c== '5' || c== '6' || c== '7' || c== '8' || c== '9' ) {
return true ;
}
return false ;
}
void removeNumbers( string str)
{
int current = 0 ;
for ( int i = 0 ; i< str.length ( ) ; i++ ) {
if ( ! isDigi( str[ i] ) && ( str[ i] ! = ',' ) ) {
str[ current] = str[ i] ;
current++ ;
}
}
for ( int i = 0 ; i< current; i++ ) {
cout << str[ i] ;
}
}
void lower( char C) {
int asc = C;
if ( C>= 'A' && C<= 'Z' ) {
asc = asc+ 32 ;
char clower;
clower = asc;
cout << clower;
}
else if ( C>= 'a' && C<= 'z' )
cout << C;
}
void lowerIntoUpp( char c) {
if ( c>= 'a' && c<= 'z' ) {
c = c- 32 ;
cout << c;
}
else if ( c>= 'A' && c<= 'Z' ) {
cout << c;
}
}
void convert( string str) {
lowerIntoUpp( str[ 0 ] ) ;
for ( int i = 1 ; i< str.length ( ) ; i++ ) {
lower( ( str[ i] ) ) ;
}
}
void removeNumbersAll( field arr[ ] , int n) {
string p[ n] , q[ n] , l[ n] , m[ n] , b[ 4 * n] ;
prints( arr, n, p, q, l, m, b) ;
for ( int i = 0 ; i< 4 * n; i++ ) {
removeNumbers( b[ i] ) ;
cout << " " ;
}
}
void removeDuplicates( field arr[ ] , int n) {
string p[ n] , q[ n] , l[ n] , m[ n] , b[ 4 * n] ;
prints( arr, n, p, q, l, m, b) ;
string r[ 4 * n] ;
for ( int i = 0 ; i< 4 * n; i++ ) {
for ( int j = i+ 1 ; j< 4 * n; j++ ) {
if ( b[ i] == b[ j] ) {
b[ i] = "delete" ;
}
}
}
for ( int i = 0 ; i< 4 * n; i++ ) {
if ( b[ i] ! = "delete" )
r[ i] = b[ i] ;
}
for ( int i = 0 ; i< 4 * n; i++ )
cout << r[ i] << " " ;
}
void convertloweToUpp( field arr[ ] , int n) {
string p[ n] , q[ n] , l[ n] , m[ n] , b[ 4 * n] ;
prints( arr, n, p, q, l, m, b) ;
for ( int i = 0 ; i< 4 * n; i++ ) {
convert( b[ i] ) ;
cout << " " ;
}
}
void sort( field arr[ ] , int n) {
string p[ n] , q[ n] , l[ n] , m[ n] , b[ 4 * n] ;
prints( arr, n, p, q, l, m, b) ;
int i = 0 ;
bool swapped = true ;
while ( i < n - 1 && swapped) {
swapped = false ;
for ( int j = 0 ; j < n - i - 1 ; j++ ) {
int k = 0 ;
while ( b[ j] [ k] == b[ j + 1 ] [ k] ) {
k++ ;
}
if ( b[ j] [ k] > b[ j + 1 ] [ k] ) {
string temp = b[ j] ;
b[ j] = b[ j + 1 ] ;
b[ j + 1 ] = temp;
swapped = true ;
}
}
i++ ;
}
for ( int i = 0 ; i< 4 * n; i++ ) {
cout << b[ i] << " " ;
}
}
void result( field arr[ ] , int n) {
removeDuplicates( arr, n) ;
cout << endl;
removeNumbersAll( arr, n) ;
cout << endl;
convertloweToUpp( arr, n) ;
cout << endl;
sort( arr, n) ;
}
int main( ) {
// your code goes here
int n;
cin >> n;
field arr[ n] ;
for ( int i = 0 ; i< n; i++ ) {
cin >> arr[ i] .f >> arr[ i] .s >> arr[ i] .num ;
}
result( arr, n) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgZmllbGR7CglzdHJpbmcgZjsKCXN0cmluZyBzOwoJaW50IG51bTsKfTsKdm9pZCBwcmludHMoZmllbGQgYXJyW10sIGludCBuLCBzdHJpbmcgcFtdLCBzdHJpbmcgcVtdLCBzdHJpbmcgbFtdLCBzdHJpbmcgbVtdLCBzdHJpbmcgYltdKXsKCWludCBpbmQgPTA7Cglmb3IoaW50IGkgPTA7aTxuO2krKyl7CgkJaWYoYXJyW2ldLm51bSA9PSAxKXsKCQkJcFtpXSA9IGFycltpJW5dLmY7CgkJCWJbaW5kKytdID0gcFtpXTsKCQkJcVtpXSA9IGFycltpJW5dLnM7CgkJCWJbaW5kKytdID0gcVtpXTsKIAoJCX0KCQllbHNlIGlmKGFycltpXS5udW0gPT0wKXsKCQkJbFtpXSA9IGFycltpJW5dLmY7CgkJCWJbaW5kKytdID0gbFtpXTsKCQkJbVtpXSA9IGFycltpJW5dLnM7CgkJCWJbaW5kKytdID0gbVtpXTsKCQl9CgkJZWxzZXsKCQkJcFtpXSA9IGFycltpJW5dLmY7CgkJCWJbaW5kKytdID0gcFtpXTsKCQkJcVtpXSA9IGFycltpJW5dLmY7CgkJCWJbaW5kKytdID0gcVtpXTsKCQkJbFtpXSA9IGFycltpJW5dLmY7CgkJCWJbaW5kKytdID0gbFtpXTsKCQkJbVtpXSA9IGFycltpJW5dLmY7CgkJCWJbaW5kKytdID0gbVtpXTsKCQl9Cgl9Cn0KYm9vbCBpc0RpZ2koY2hhciBjKXsKCWlmKGM9PScwJ3x8Yz09JzEnfHxjPT0nMid8fGM9PSczJ3x8Yz09JzQnfHxjPT0nNSd8fGM9PSc2J3x8Yz09JzcnfHxjPT0nOCd8fGM9PSc5Jyl7CgkJcmV0dXJuIHRydWU7CiAKCX0KCXJldHVybiBmYWxzZTsKfQogCnZvaWQgcmVtb3ZlTnVtYmVycyhzdHJpbmcgc3RyKQp7CiAgICBpbnQgY3VycmVudCA9IDA7CiAgICBmb3IoaW50IGkgPSAwOyBpPCBzdHIubGVuZ3RoKCk7IGkrKyl7CiAgICAgICAgaWYoIWlzRGlnaShzdHJbaV0pJiYoc3RyW2ldIT0gJywnKSl7CiAgICAgICAgICAgIHN0cltjdXJyZW50XSA9IHN0cltpXTsKICAgICAgICAgICAgY3VycmVudCsrOwogICAgICAgIH0KICAgIH0KIApmb3IoaW50IGkgPTA7aTxjdXJyZW50O2krKyl7Cgljb3V0PDxzdHJbaV07Cn0KfQp2b2lkIGxvd2VyKGNoYXIgQyl7CglpbnQgYXNjID0gQzsKCWlmKEM+PSdBJyAmJiBDPD0nWicpewogCglhc2MgPSBhc2MrMzI7CgljaGFyIGNsb3dlcjsKCWNsb3dlciA9IGFzYzsKCWNvdXQ8PGNsb3dlcjsKCX0KCWVsc2UgaWYoQz49J2EnICYmIEM8PSd6JykKICAgICAgICBjb3V0PDxDOwogCiAKfQogCnZvaWQgbG93ZXJJbnRvVXBwKGNoYXIgYyl7IAoJaWYoYz49J2EnJiZjPD0neicpewoJICAgYyA9IGMtMzI7CgkgICBjb3V0PDxjOwoJfQoJZWxzZSBpZihjPj0nQScmJmM8PSdaJyl7CgkJY291dDw8YzsKCX0KfQp2b2lkIGNvbnZlcnQoc3RyaW5nIHN0cil7Cglsb3dlckludG9VcHAoc3RyWzBdKTsKCWZvcihpbnQgaSA9IDE7aTxzdHIubGVuZ3RoKCk7aSsrKXsKCQlsb3dlcigoc3RyW2ldKSk7Cgl9Cn0KCnZvaWQgcmVtb3ZlTnVtYmVyc0FsbChmaWVsZCBhcnJbXSwgaW50IG4pewoJc3RyaW5nIHBbbl0sIHFbbl0sIGxbbl0sIG1bbl0sIGJbNCpuXTsKCXByaW50cyhhcnIsIG4sIHAsIHEsIGwsIG0sIGIpOwoJCiAgICAgIGZvcihpbnQgaSA9MDtpPDQqbjtpKyspewoJCXJlbW92ZU51bWJlcnMoYltpXSk7CiAgICAgY291dDw8IiAiOwogCgl9CgkKfQp2b2lkIHJlbW92ZUR1cGxpY2F0ZXMoZmllbGQgYXJyW10sIGludCBuKXsKCXN0cmluZyBwW25dLCBxW25dLCBsW25dLCBtW25dLCBiWzQqbl07CglwcmludHMoYXJyLCBuLCBwLCBxLCBsLCBtLCBiKTsKCQogICBzdHJpbmcgIHJbNCpuXTsKCQpmb3IoaW50IGkgPSAwO2k8NCpuO2krKyl7CgkJZm9yKGludCBqID0gaSsxO2o8NCpuO2orKyl7CgkJCWlmKGJbaV09PWJbal0pewoJCQkJYltpXSA9ICJkZWxldGUiOwoJCQl9CgkJfQoJfQoJZm9yKGludCBpID0gMDtpPDQqbjtpKyspewoJCWlmKGJbaV0hPSAiZGVsZXRlIikKCQlyW2ldPSBiW2ldOwoJfQoJZm9yKGludCBpID0wO2k8NCpuO2krKykKCWNvdXQ8PHJbaV08PCIgIjsKIAp9CiB2b2lkIGNvbnZlcnRsb3dlVG9VcHAoZmllbGQgYXJyW10sIGludCBuKXsKCXN0cmluZyBwW25dLCBxW25dLCBsW25dLCBtW25dLCBiWzQqbl07CglwcmludHMoYXJyLCBuLCBwLCBxLCBsLCBtLCBiKTsKICAgICAgZm9yKGludCBpID0wO2k8NCpuO2krKyl7CgkJY29udmVydChiW2ldKTsKCQljb3V0PDwiICI7CiAKCX0KCQp9CnZvaWQgc29ydChmaWVsZCBhcnJbXSwgaW50IG4pIHsKCQoJc3RyaW5nIHBbbl0sIHFbbl0sIGxbbl0sIG1bbl0sIGJbNCpuXTsKCXByaW50cyhhcnIsIG4sIHAsIHEsIGwsIG0sIGIpOwogICAgaW50IGkgPSAwOwogICAgYm9vbCBzd2FwcGVkID0gdHJ1ZTsKICAgIHdoaWxlIChpIDwgbiAtIDEgJiYgc3dhcHBlZCkgewogICAgICAgIHN3YXBwZWQgPSBmYWxzZTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG4gLSBpIC0gMTsgaisrKSB7CiAgICAgICAgICAgIGludCBrID0gMDsKICAgICAgICAgICAgd2hpbGUgKGJbal1ba10gPT0gYltqICsgMV1ba10pIHsKICAgICAgICAgICAgICAgIGsrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYltqXVtrXSA+IGJbaiArIDFdW2tdKSB7CiAgICAgICAgICAgICAgICBzdHJpbmcgdGVtcCA9IGJbal07CiAgICAgICAgICAgICAgICBiW2pdID0gYltqICsgMV07CiAgICAgICAgICAgICAgICBiW2ogKyAxXSA9IHRlbXA7CiAgICAgICAgICAgICAgICBzd2FwcGVkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpKys7CiAgICB9CiAgICBmb3IoaW50IGkgPTA7aTw0Km47aSsrKXsKICAgIAljb3V0PDxiW2ldPDwiICI7CiAgICB9Cn0KCiAKdm9pZCByZXN1bHQoZmllbGQgYXJyW10sIGludCBuKXsKCQoJcmVtb3ZlRHVwbGljYXRlcyhhcnIsIG4pOwoJY291dDw8ZW5kbDsKCXJlbW92ZU51bWJlcnNBbGwoYXJyLCBuKTsKCWNvdXQ8PGVuZGw7Cgljb252ZXJ0bG93ZVRvVXBwKGFyciwgbik7Cgljb3V0PDxlbmRsOwoJc29ydChhcnIsIG4pOwoJCn0KaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgbjsKIGNpbj4+bjsKIGZpZWxkIGFycltuXTsKIGZvcihpbnQgaSA9MDtpPG47aSsrKXsKIAljaW4+PmFycltpXS5mPj5hcnJbaV0ucz4+YXJyW2ldLm51bTsKIH0KICAgIHJlc3VsdChhcnIsIG4pOwogICAgCiAgICByZXR1cm4gMDsKfQ==