Get Time

   Problem Statement  

 Problem Statement for YetAnotherORProblem

Problem Statement

    NOTE: This problem statement contains subscripts that may not display properly if viewed outside of the applet.



You're given a long[] R containing N elements. Count the number of sequences A0, A1, ..., AN-1 such that each Ai is an integer satisfying 0 &le Ai &le R[i] and A0 + A1 + ... + AN-1 = A0 | A1 | ... | AN-1. The '|' symbol stands for bitwise OR of the operands. Return the number of such sequences modulo 1,000,000,009.
 

Definition

    
Class:YetAnotherORProblem
Method:countSequences
Parameters:long[]
Returns:int
Method signature:int countSequences(long[] R)
(be sure your method is public)
    
 

Notes

-If a and b are single bits then a | b is defined as max(a, b). For two integers, A and B, in order to calculate A | B, they need to be represented in binary: A = (an...a1)2, B = (bn...b1)2 (if the lengths of their representations are different, the shorter one is prepended with the necessary number of leading zeroes). Then A | B = C = (cn...c1)2, where ci = ai | bi. For example, 10 | 3 = (1010)2 | (0011)2 = (1011)2 = 11.
 

Constraints

-R will contain between 2 and 10 elements, inclusive.
-Each element of R will be between 1 and 10^18, inclusive.
 

Examples

0)
    
{3,5}
Returns: 15
All the possible sequences are: {0,0}, {0,1}, {0,2}, {0,3}, {0,4}, {0,5}, {1,0}, {1,2}, {1,4}, {2,0}, {2,1}, {2,4}, {2,5}, {3,0}, {3,4}.
1)
    
{3,3,3}
Returns: 16
2)
    
{1,128}
Returns: 194
3)
    
{26,74,25,30}
Returns: 8409
4)
    
{1000000000,1000000000}
Returns: 420352509

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2010, TopCoder, Inc. All rights reserved.

This problem was used for:
       Single Round Match 508 Round 1 - Division I, Level Two