#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
typedef unsigned short uint16_t ;
typedef unsigned char uint8_t ;
struct trie {
unsigned int link[ 2048 ] ;
} ;
uint8_t getData ( int data, uint16_t & dir, uint16_t & pos, uint8_t & x) {
dir = ( data >> 0 ) & 0xffff ;
pos = ( data >> 16 ) & 0xffff ;
x = pos / 32 ;
return pos % 32 ;
}
void insert( trie * root, int data) {
uint16_t dir, pos;
uint8_t x, y = getData( data, dir, pos, x) ;
root[ dir] .link [ x] | = 1 << y;
}
bool find( trie * root, int data) {
uint16_t dir, pos;
uint8_t x, y = getData( data, dir, pos, x) ;
return root[ dir] .link [ x] & ( 1 << y) ;
}
void remove ( trie * root, int data) {
uint16_t dir, pos;
uint8_t x, y = getData( data, dir, pos, x) ;
root[ dir] .link [ x] & = ~( 1 << y) ;
}
int main ( int argc, char * argv[ ] ) {
srand ( time ( NULL ) ) ;
trie * root = new trie[ 65536 ] ;
int input;
for ( int i= 0 ; i< 10 ; i++ ) {
std:: cin >> input;
insert( root, input) ;
}
for ( int i= 0 ; i< 10 ; i++ ) {
std:: cin >> input;
std:: cout << "The system " << ( find( root, input) ? "found " : "did not find " ) <<
"the number " << input << ".\n " ;
}
std:: cin >> input;
remove ( root, input) ;
std:: cout << "The system " << ( find( root, input) ? "found " : "did not find " ) <<
"the number " << input << ".\n " ;
std:: cin >> input;
remove ( root, input) ;
std:: cout << "The system " << ( find( root, input) ? "found " : "did not find " ) <<
"the number " << input << ".\n " ;
delete [ ] root;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CgpzdHJ1Y3QgdHJpZSB7CiAgICB1bnNpZ25lZCBpbnQgbGlua1syMDQ4XTsKfTsKCnVpbnQ4X3QgZ2V0RGF0YSAoaW50IGRhdGEsIHVpbnQxNl90JiBkaXIsIHVpbnQxNl90JiBwb3MsIHVpbnQ4X3QmIHgpIHsKICAgIGRpciA9IChkYXRhID4+IDApICAmIDB4ZmZmZjsKICAgIHBvcyA9IChkYXRhID4+IDE2KSAmIDB4ZmZmZjsKICAgIHggICA9ICBwb3MgLyAzMjsKICAgIHJldHVybiBwb3MgJSAzMjsKfQp2b2lkIGluc2VydCh0cmllICpyb290LCBpbnQgZGF0YSkgewogICAgdWludDE2X3QgZGlyLCBwb3M7CiAgICB1aW50OF90IHgsIHkgPSBnZXREYXRhKGRhdGEsIGRpciwgcG9zLCB4KTsKICAgIHJvb3RbZGlyXS5saW5rW3hdIHw9IDEgPDwgeTsKfQpib29sIGZpbmQodHJpZSAqcm9vdCwgaW50IGRhdGEpIHsKICAgIHVpbnQxNl90IGRpciwgcG9zOwogICAgdWludDhfdCB4LCB5ID0gZ2V0RGF0YShkYXRhLCBkaXIsIHBvcywgeCk7CiAgICByZXR1cm4gcm9vdFtkaXJdLmxpbmtbeF0gJiAoMSA8PCB5KTsKfQp2b2lkIHJlbW92ZSh0cmllICpyb290LCBpbnQgZGF0YSkgewogICAgdWludDE2X3QgZGlyLCBwb3M7CiAgICB1aW50OF90IHgsIHkgPSBnZXREYXRhKGRhdGEsIGRpciwgcG9zLCB4KTsKICAgIHJvb3RbZGlyXS5saW5rW3hdICY9IH4oMSA8PCB5KTsKfQoKaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIHNyYW5kKHRpbWUoTlVMTCkpOwogICAgdHJpZSAqcm9vdCA9IG5ldyB0cmllWzY1NTM2XTsKICAgIAogICAgaW50IGlucHV0OwogICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgc3RkOjpjaW4gPj4gaW5wdXQ7CiAgICAgICAgaW5zZXJ0KHJvb3QsIGlucHV0KTsKICAgIH0KICAgIAogICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgc3RkOjpjaW4gPj4gaW5wdXQ7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJUaGUgc3lzdGVtICIgPDwgKGZpbmQocm9vdCwgaW5wdXQpID8gImZvdW5kICIgOiAiZGlkIG5vdCBmaW5kICIpIDw8IAogICAgICAgICAgICAidGhlIG51bWJlciAiIDw8IGlucHV0IDw8ICIuXG4iOwogICAgfQogICAgCiAgICBzdGQ6OmNpbiA+PiBpbnB1dDsKICAgIHJlbW92ZShyb290LCBpbnB1dCk7CiAgICBzdGQ6OmNvdXQgPDwgIlRoZSBzeXN0ZW0gIiA8PCAoZmluZChyb290LCBpbnB1dCkgPyAiZm91bmQgIiA6ICJkaWQgbm90IGZpbmQgIikgPDwgCiAgICAgICAgICAgICJ0aGUgbnVtYmVyICIgPDwgaW5wdXQgPDwgIi5cbiI7CiAgICBzdGQ6OmNpbiA+PiBpbnB1dDsKICAgIHJlbW92ZShyb290LCBpbnB1dCk7CiAgICBzdGQ6OmNvdXQgPDwgIlRoZSBzeXN0ZW0gIiA8PCAoZmluZChyb290LCBpbnB1dCkgPyAiZm91bmQgIiA6ICJkaWQgbm90IGZpbmQgIikgPDwgCiAgICAgICAgICAgICJ0aGUgbnVtYmVyICIgPDwgaW5wdXQgPDwgIi5cbiI7CiAgICAKICAgIGRlbGV0ZVtdIHJvb3Q7CiAgICByZXR1cm4gMDsKfQ==