#include <iostream>
using namespace std;
class self_synchronizing_scrambler
{
unsigned char key;
unsigned char shift_register;
bool pickbit(const unsigned char val, const short index)
{
return ((val >> index)%2);
}
public:
self_synchronizing_scrambler() {}
self_synchronizing_scrambler(unsigned char key, unsigned char shift_register)
{
this->key = key;
this->shift_register = shift_register;
}
void assign_key(unsigned char key) {this->key = key;}
void assign_register(unsigned char shift_register) {this->shift_register = shift_register;}
unsigned char key_value() {return key;}
unsigned char register_value() {return shift_register;}
void scramble(unsigned char &letter)
{
unsigned char output = 0;
for (unsigned char i = 0; i < 8; ++i)
{
bool newbit = pickbit(letter, 7-i);
for (unsigned char j = 0; j < 8; ++j)
{
newbit ^= pickbit(this->key, 7-j) & pickbit(this->shift_register, 7-j);
}
output ^= (newbit << (7-i));
key = (key >> 1) + (newbit << 7);
}
letter = output;
}
void descramble(unsigned char &letter)
{
unsigned char output = 0;
for(unsigned char i = 0; i < 8; ++i)
{
bool oldbit = pickbit(letter, 7-i), scrambit = 0;
for(unsigned char j = 0; j < 8; ++j)
{
scrambit ^= pickbit(this->key, 7-j) & pickbit(this->shift_register, 7-j);
}
output ^= ((scrambit^oldbit) << (7-i));
key = (key >> 1) + (oldbit << 7);
}
letter = output;
}
};
int main()
{
self_synchronizing_scrambler A(5,17);
unsigned short scrambled;
unsigned char output;
while (cin >> hex >> scrambled)
{
output = scrambled;
A.descramble(output);
cout << output;
}
return 0;
}