비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.
제약조건: M (1 ≤ M ≤ 3,000,000)
1~20까지만 존재하므로 20개의 비트 생성
생성 후 위의 연산에 맞는 비트 연산 실행
1로 만들기 위해 1과 or 연산
제거하기 위해 1인 경우 1과 xor 연산
x에 위치하는 인덱스가 1인지 확인
1 -> 0
0 -> 1
을 만들 기 위해 xor 연산
모두 1로
모두 0으로
class IO11723 {
    private val br = System.`in`.bufferedReader()
    private val bw = System.out.bufferedWriter()
    fun getM() = br.readLine().toInt()
    fun getOperation() = br.readLine().split(" ")
    fun flush() = bw.flush()
    fun close() = bw.close()
    fun write(message: String) = bw.write(message)
}
fun main() {
    val io = IO11723()
    val m = io.getM()
    var bit: Long = 0b0 shl 19
    repeat(m) {
        val op = io.getOperation()
        val num = if (op.size == 2) op[1].toInt() else 0
        when (op[0]) {
            "add" -> {
                val comparison = 0b1 shl (num - 1)
                bit = bit or comparison.toLong()
            }
            "remove" -> {
                val str = bit.toString(2)
                if (str.length >= num && str[str.lastIndex - num + 1] == '1') {
                    val comparison = 0b1 shl (num - 1)
                    bit = bit xor comparison.toLong()
                }
            }
            "check" -> {
                val str = bit.toString(2)
                if (str.length >= num && str[str.lastIndex - num + 1] == '1') {
                    io.write("1\n")
                } else {
                    io.write("0\n")
                }
            }
            "toggle" -> {
                val comparison = 0b1 shl (num -1)
                bit = (bit xor comparison.toLong())
            }
            "all" -> {
                bit = 0b1
                repeat (19) {
                    bit = (bit shl 1) or 0b1
                }
            }
            "empty" -> {
                bit = 0b0 shl 19
            }
        }
    }
    io.flush()
    io.close()
}