Input Format

The first line contains  space-separated integers,  (the length of both BitSets  and ) and  (the number of operations to perform), respectively.
The  subsequent lines each contain an operation in one of the following forms:

In the list above,  is the integer  or , where  denotes  and  denotes .
is an integer denoting a bit's index in the BitSet corresponding to .

For the binary operations , and , operands are read from left to right and the BitSet resulting from the operation replaces the contents of the first operand. For example:

AND 2 1


is the left operand, and  is the right operand. This operation should assign the result of  to .

Constraints

Output Format

After each operation, print the respective number of set bits in BitSet  and BitSet  as  space-separated integers on a new line.

# Java BitSet problem solution | HackerRank

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;

public class Solution {

public static void main(String[] args)throws IOException {
StringTokenizer st=new StringTokenizer(s);
int N=Integer.parseInt(st.nextToken());
int M=Integer.parseInt(st.nextToken());
BitSet bit1=new BitSet(N);
BitSet bit2=new BitSet(N);
while(M-->0)
{
st=new StringTokenizer(s);
String ins=st.nextToken();
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());
switch(ins)
{
case "AND":
if(a==1)
bit1.and(bit2);
else
bit2.and(bit1);
break;
case "OR":
if(a==1)
bit1.or(bit2);
else
bit2.or(bit1);
break;
case "XOR":
if(a==1)
bit1.xor(bit2);
else
bit2.xor(bit1);
break;
case "FLIP":
if(a==1)
bit1.flip(b);
else
bit2.flip(b);
break;
case "SET":
if(a==1)
bit1.set(b);
else
bit2.set(b);
break;

}
System.out.println(bit1.cardinality()+" "+bit2.cardinality());

}

}
}