I know that there are combinatoric libraries for this kind of thing. However, with me being new to C# and coding in general I found that I couldn't understand the code well enough to implement it in my solution. The code below represents my solution to the problem in question. It works but I feel like I reinvinted the wheel on this one. Is there a better way of going about it than what I have? [Challenge Prompt][1] Given two integers: **L** and **R**, find the maximal values of A xor B given, **L** ≤ A ≤ B ≤ **R** **Input Format** The input contains two lines, L is present in the first line. R in the second line. **Constraints** 1 ≤ L ≤ R ≤ 10<sup>3</sup> **Output Format** The maximal value as mentioned in the problem statement. **Sample Input**#00 1 10 **Sample Output**#00 15 <br> **Sample Input**#01 10 15 **Sample Output**#01 7 <br> Explanation for the second example is as follows: In the second sample let's say **L**=10, **R**=15, then all pairs which comply to above condition are **10⊕10=0 <br> 10⊕11=1 <br> 10⊕12=6 <br> 10⊕13=7 <br> 10⊕14=4 <br> 10⊕15=5 <br> 11⊕11=0 <br> 11⊕12=7 <br> 11⊕13=6 <br> 11⊕14=5 <br> 11⊕15=4 <br> 12⊕12=0 <br> 12⊕13=1 <br> 12⊕14=2 <br> 12⊕15=3 <br> 13⊕13=0 <br> 13⊕14=3 <br> 13⊕15=2 <br> 14⊕14=0 <br> 14⊕15=1 <br> 15⊕15=0** Here two pairs (10,13) and (11,12) have maximum xor value 7 and this is the answer. <br> using System; using System.Collections.Generic; using System.IO; using System.Linq; class Solution { public static List<int[]> Combinations( List<int> numberList ) { // We are only choosing 2 values out of any list of numbers int[] twoList = new int[2]; List<int[]> result = new List<int[]>(); List<int> stack = new List<int>(numberList); while (stack.Count > 0) { int stackLast = stack.Count - 1; for (int i =0; i < stack.Count; i++) { twoList[0] = stack[stackLast]; twoList[1] = stack[i]; result.Add(new int[] {twoList[0], twoList[1]}); } stack.RemoveAt(stackLast); } return result; } static int MaxXor(int l, int r) { List<int> numList = new List<int>(Enumerable.Range(l, r - l + 1)); // Inserts the list combinations as int arrays List<int[]> comboList = Combinations(numList); int max = 0; foreach(var two in numList) { int xorValue = two[0] ^ two[1]; max = ( max > xorValue )? max : xorValue; } return max; } static void Main(String[] args) { int _l; int _r; _l = Convert.ToInt32(Console.ReadLine()); _r = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(MaxXor(_l, _r)); } } [1]: https://www.hackerrank.com/challenges/maximizing-xor