#include<cstdio>

using namespace std;

/*
Input:

n - liczba słów w słowniku, n in <1, 60>;
n stringow - slowa w slowniku
a - liczba słow w zbiorze A
a stringów - słowa ze słownika (mogą się powtarzać)
b - liczba słow w zbiorze B
b stringów - słowa ze słownika (mogą się powtarzać)
c - liczba słow w zbiorze C
c stringów - słowa ze słownika (mogą się powtarzać)
d - liczba operacji na zbiorach, mozliwosci:
	S A B, itd - A = A suma B
	I A B, itd - A = A iloczyn B
	X A B, itd - A = A XOR B
	D A, itd - A = dopelnienie A
	P A, itd - wypisz A
d operacji
e - liczba operacji typu:
	D A i, itd - dodaj do zbioru A element o numerze i
	U A i, itd - usun do zbioru A element o numerze i
	S A i, itd - sprawdz czy w zbiorze A jest element 
                     o numerze i (wypisz "JEST\n" lub "NIE MA\n")
	P A, itd - wypisz A
e operacji	
*/

class Slownik{
	private:
		long long int A;
	public:
		void set(long long int a) {
			A = a;
		}
		long long int get() const {
			return A;
		} 
		void print() {
			long long int a = A;
			int i=0;
			while(a!=0) {
				if(a%2==1)
					printf("%d ", i);
				a/=2;
				i++;
			}
			printf("\n");
		}
		Slownik suma(const Slownik & B) const{
			Slownik S;
			S.set(A | B.get());
			return S;
		}
		Slownik XOR(const Slownik & B) const{
			Slownik S;
			S.set(A ^ B.get());
			return S;
		}
		Slownik przeciecie(const Slownik & B) const{
			Slownik S;
			S.set(A & B.get());
			return S;
		}
		Slownik dopelnienie() const {
			Slownik S;
			long long int b = ((long long int)1)<<61;
			b-=1; 
			S.set(A ^ b);
			return S;
		}
		void dodaj(int i) { // i nalezy do (0, 60)
			long long int b = ((long long int)1)<<i;
			A = A | b;
		}
		void usun(int i) { // i nalezy do (0, 60)
			long long int b = ((long long int)1)<<i;
			A = A ^ b;
		}
		bool sprawdz(int i) const { // i nalezy do (0, 60)
			long long int b = ((long long int)1)<<i;
			return ((A & b) != 0);
		}		
		bool rowne(const Slownik & B) const {
			return A==B.get();
		}
		bool subset(const Slownik & B) const {
			return A==(A&B.get());
		}
};

int main() {
	Slownik A, B, C;
	A.set(3);
	A.print();
	A.dodaj(3);
	A.print();
	printf("%d\n", A.sprawdz(3));
	A.usun(3);
	A.print();
	printf("%d\n", A.sprawdz(3));
	
//	B.set(6);
//	B.print();
//	C=A.dopelnienie();
//	C.print();
	return 0;
}
