//Open Addressing
#include<bits/stdc++.h>
using namespace std;
struct MyHash
{
int *arr;
int cap,size;
MyHash(int c)
{
cap=c;
size=0;
arr=new int[cap];
for(int i=0;i<cap;i++)
arr[i]=-1;
}
int hash(int key){
return key%cap;
}
bool insert(int key)
{
if(size==cap)
return false;
int i=hash(key);
while(arr[i]!=-1 && arr[i]!=-2 && arr[i]!=key)
i=(i+1)%cap;
if(arr[i]==key)
return false;
else{
arr[i]=key;
size++;
return true;
}
}
bool search(int key)
{
int h=hash(key);
int i=h;
while(arr[i]!=-1){
if(arr[i]==key)
return true;
i=(i+1)%cap;
if(i==h)
return false;
}
return false;
}
bool erase(int key)
{
int h=hash(key);
int i=h;
while(arr[i]!=-1){
if(arr[i]==key){
arr[i]=-2;
return true;
}
i=(i+1)%cap;
if(i==h)
return false;
}
return false;
}
};
int main()
{
MyHash mh(7);
mh.insert(49);
mh.insert(56);
mh.insert(72);
if(mh.search(56)==true)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
mh.erase(56);
if(mh.search(56)==true)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
Ly9PcGVuIEFkZHJlc3NpbmcKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBNeUhhc2gKewogICAgaW50ICphcnI7CiAgICBpbnQgY2FwLHNpemU7CiAgICAKICAgIE15SGFzaChpbnQgYykKICAgIHsKICAgICAgICBjYXA9YzsKICAgICAgICBzaXplPTA7CiAgICAgICAgYXJyPW5ldyBpbnRbY2FwXTsKICAgICAgICBmb3IoaW50IGk9MDtpPGNhcDtpKyspCiAgICAgICAgICAgIGFycltpXT0tMTsKICAgIH0KICAgIAogICAgaW50IGhhc2goaW50IGtleSl7CiAgICAgICAgcmV0dXJuIGtleSVjYXA7CiAgICB9CiAgICBib29sIGluc2VydChpbnQga2V5KQogICAgewogICAgICAgIGlmKHNpemU9PWNhcCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGludCBpPWhhc2goa2V5KTsKICAgICAgICB3aGlsZShhcnJbaV0hPS0xICYmIGFycltpXSE9LTIgJiYgYXJyW2ldIT1rZXkpCiAgICAgICAgICAgIGk9KGkrMSklY2FwOwogICAgICAgIGlmKGFycltpXT09a2V5KQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgYXJyW2ldPWtleTsKICAgICAgICAgICAgc2l6ZSsrOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICBib29sIHNlYXJjaChpbnQga2V5KQogICAgewogICAgICAgIGludCBoPWhhc2goa2V5KTsKICAgICAgICBpbnQgaT1oOwogICAgICAgIHdoaWxlKGFycltpXSE9LTEpewogICAgICAgICAgICBpZihhcnJbaV09PWtleSkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICBpPShpKzEpJWNhcDsKICAgICAgICAgICAgaWYoaT09aCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgYm9vbCBlcmFzZShpbnQga2V5KQogICAgeyAgIAogICAgICAgIGludCBoPWhhc2goa2V5KTsKICAgICAgICBpbnQgaT1oOwogICAgICAgIHdoaWxlKGFycltpXSE9LTEpewogICAgICAgICAgICBpZihhcnJbaV09PWtleSl7CiAgICAgICAgICAgICAgICBhcnJbaV09LTI7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpPShpKzEpJWNhcDsKICAgICAgICAgICAgaWYoaT09aCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9OwoKCWludCBtYWluKCkgCgl7IAoJICAgIE15SGFzaCBtaCg3KTsKCSAgICBtaC5pbnNlcnQoNDkpOwoJICAgIG1oLmluc2VydCg1Nik7CgkgICAgbWguaW5zZXJ0KDcyKTsKCSAgICBpZihtaC5zZWFyY2goNTYpPT10cnVlKQoJICAgICAgICBjb3V0PDwiWWVzIjw8ZW5kbDsKCSAgICBlbHNlCgkgICAgICAgIGNvdXQ8PCJObyI8PGVuZGw7CgkgICAgbWguZXJhc2UoNTYpOwoJICAgIGlmKG1oLnNlYXJjaCg1Nik9PXRydWUpCgkgICAgICAgIGNvdXQ8PCJZZXMiPDxlbmRsOwoJICAgIGVsc2UKCSAgICAgICAgY291dDw8Ik5vIjw8ZW5kbDsKCX0gCg==