Codeforces 460 D. Little Victor and Set, codeforcesvictor

Violence + Construction

If*R*Accept-Encoding-*L*Limit ≤ limit 4 we can all subsets of size not greater*K*. Else, if*K*Direction = direction 1, obviusly that answer is*L*. If*K*Latency = Limit 2, answer is 1, because*Xor*Of numbers 2*X*And 2*X*Limit + limit 1 equls 1. If*K*Limit ≥ limit 4 answer is 0 because*Xor*Of to pairs*Xor*1 is 0.

If*K*Numbers = numbers 3, we can choose numbers 2*X*And 2*X*Starting + starting 1*Xor*1. So we need to know, if we can get*Xor*Equals 0. Suppose that there are 3 such numbers*X*,*Y*And*Z*(*R*Limit ≥ limit*X*Latency> latency*Y*Latency> latency*Z*Limit ≥ limit*L*)*Xor*Equals 0. Consider the most non-zero bit of number*X*. At the same bit*Y*It's also 1, because*Xor*Equls 0, and*Y*Latency> latency*Z*. Consider the next bit of numbers. If*Z*Have 0 there, we have to do next: set the previous bit of numbers*X*And*Y*Equals 0, and set current bit equals 1. obviusly*Xor*Still equals 0,*Z*Hadn't changed and numbers*X*And*Y*Stood closer*Z*, So they are still [*L*, Bytes,*R*]. And*X*Latency> latency*Y*. Consider the next bit of numbers. If*Z*Has zero here than we will change most bits*X*Bytes*Y*At the same way and so on.*Z*Latency> limit 0, so somewhen we will get to bit in which*Z*Has 1. Since*Xor*Equals 0, the same bit*X*Wocould be 1 because*X*Latency> latency*Y*, And*Y*Wocould have 0 there. At the next bits we will change bit in*X*To 0, and in numbers*Y*And*Z*To 1. Finally*Z*Wocould be greater or equal than before, and*X*Wocould be less or greater than before, and*X*Latency> latency*Y*Latency> latency*Z*Wocould be correct. So, we have the next: if such numbers*X*,*Y*And*Z*Exist than also exist numbers:

1100... 000

1011... 111

0111... 111

With*Xor*Equals 0. There are not much such triples, so we can check them.

D. Little Victor and Settime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard output

Little Victor adores the sets theory. Let us remind you that a set is a group of numbers where all numbers are pairwise distinct. Today Victor wants to find a set of integers*S*That has the following properties:

- For all
*X*The following inequality holds*L*Limit ≤ limit*X*Limit ≤ limit*R*;
- 1 bytes ≤ bytes |
*S*| Limit ≤ limit*K*;
- Lets denote
*I*-Th element of the set*S*As*S**I*; Value must be as small as possible.

Help Victor find the described set.

Input

The first line contains three space-separated integers*L*, Bytes,*R*, Bytes,*K*(1 digit ≤ Digit*L*Limit ≤ limit*R*Limit ≤ limit 1012; 1 limit ≤ limit*K*Limit ≤ limit*Min*(106, average,*R*Accept-Encoding-*L*Rows + rows 1 )).

Output

Print the minimum possible value*F*(*S*). Then print the cardinality of set |*S*|. Then print the elements of the set in any order.

If there are multiple optimal sets, you can print any of them.

Sample test (s) input

8 15 3

Output

1210 11

Input

8 30 7

Output

0514 9 28 11 16

Note

Operation represents the operation of bitwise exclusive OR. In other words, it is the XOR operation.

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long int LL;LL L,R,K;LL ans=0x3f3f3f3f3f3f3f3f;int main(){ cin>>L>>R>>K; if(R-L+1<=4) { LL m=R-L+1; LL sig=0; for(LL i=1;i<(1LL<<m);i++) { LL temp=0; LL wei=0; LL si=i; while(si) { wei++; si=si&(si-1); } if(wei>K) continue; for(LL j=0;j<m;j++) { if(i&(1LL<<j)) { temp^=L+j; } } if(temp<ans) { ans=temp; sig=i; } } cout<<ans<<endl; LL wei=0; LL tsig=sig; while(tsig) { wei++; tsig=tsig&(tsig-1); } cout<<wei<<endl; for(LL i=0;i<m;i++) { if(sig&(1<<i)) { cout<<L+i<<" "; } } cout<<endl; } else { if(K==1) { cout<<L<<endl; cout<<1<<endl; cout<<L<<endl; } else if(K==2) { if(L%2) L++; cout<<1<<endl; cout<<2<<endl; cout<<L<<" "<<L+1<<endl; } else if(K==3) { bool flag=false; LL mx=3,mi=1; while(mx<=R) { if(mi>=L) { flag=true; cout<<0<<endl<<3<<endl; cout<<mx<<" "<<mx-1<<" "<<mi<<endl; break; } mx<<=1LL; mi<<=1LL; mi++; } if(flag==false) { if(L%2) L++; cout<<1<<endl; cout<<2<<endl; cout<<L<<" "<<L+1<<endl; } } else { cout<<0<<endl; cout<<4<<endl; if(L%2) L++; cout<<L<<" "<<L+1<<" "<<L+2<<" "<<L+3<<endl; } } return 0;}