1 /**************************************************************
2 Problem: 3668
3 User: PencilWang
4 Language: C++
5 Result: Accepted
6 Time:272 ms
7 Memory:2540 kb
8 ****************************************************************/
9
10 #include<stdio.h>
11 #include<algorithm>
12 #include<math.h>
13 using namespace std;
14 struct shit{
15 char str[10];
16 int num;
17 }e[110000];
18 int n,m,ans,ass;
19 int len,fucker1[40],fucker2[40];
20 void gett(int p,int num,int shit)
21 {
22 if(shit>(m>>p))return ;
23 if(p==0)
24 {
25 if(shit<=m)ans=max(ans,num);
26 return;
27 }
28 if(fucker1[p]==1)
29 gett(p-1,num<<1|1,shit<<1);
30 else if(fucker2[p]==0)
31 gett(p-1,num<<1,shit<<1);
32 else
33 {
34 gett(p-1,num<<1|1,shit<<1|1);
35 gett(p-1,num<<1,shit<<1);
36 }
37 return ;
38 }
39 int fuck(int num)
40 {
41 for(int i=1;i<=n;i++)
42 {
43 if(e[i].str[1]==‘X‘)
44 num^=e[i].num;
45 else if(e[i].str[1]==‘O‘)
46 num|=e[i].num;
47 else if(e[i].str[1]==‘A‘)
48 num&=e[i].num;
49 }
50 return num;
51 }
52 int main()
53 {
54 scanf("%d%d",&n,&m);
55 for(int i=1;i<=n;i++)
56 scanf("%s%d",e[i].str+1,&e[i].num);
57 int t=0,tt=m;
58 while(tt)
59 {
60 t=t<<1|1;
61 tt/=2;
62 }
63 int sb1=fuck(0),sb2=fuck(t);
64 while(sb1||sb2)
65 {
66 fucker1[++ass]=sb1&1;
67 fucker2[ass]=sb2&1;
68 sb1>>=1,sb2>>=1;
69 }
70 gett(ass,0,0);
71 printf("%d",ans);
72 return 0;
73 }