From 331d064f665cb5490c6c9b91b128bc03a64a57d7 Mon Sep 17 00:00:00 2001 From: Eveldee Date: Fri, 16 Dec 2022 14:23:58 +0100 Subject: [PATCH] Add day 13 --- Days/Day13.cs | 724 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 724 insertions(+) create mode 100644 Days/Day13.cs diff --git a/Days/Day13.cs b/Days/Day13.cs new file mode 100644 index 0000000..6f25c9d --- /dev/null +++ b/Days/Day13.cs @@ -0,0 +1,724 @@ +using Spectre.Console; + +namespace AdventOfCode.Days; + +public abstract class PacketElement : IEquatable, IComparable +{ + public override bool Equals(object? obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((PacketElement) obj); + } + + public override int GetHashCode() + { + throw new NotImplementedException(); + } + + public static bool operator ==(PacketElement left, PacketElement right) + { + return left.Equals(right); + } + + public static bool operator !=(PacketElement left, PacketElement right) + { + return !(left == right); + } + + public static bool operator <(PacketElement left, PacketElement right) + { + return left.CompareTo(right) < 0; + } + + + public static bool operator >(PacketElement left, PacketElement right) + { + return left.CompareTo(right) > 0; + } + + public bool Equals(PacketElement? other) + { + return other is not null && (this, other) switch + { + (IntegerElement leftInteger, IntegerElement rightInteger) => leftInteger.Value == rightInteger.Value, + (ListElement leftList, IntegerElement rightInteger) => leftList.Elements is [var x] && x == rightInteger, + (IntegerElement leftInteger, ListElement rightList) => rightList.Elements is [var x] && x == leftInteger, + (ListElement leftList, ListElement rightList) => leftList == rightList, + _ => throw new ArgumentException("Can only compare lists and integers") + }; + } + + public int CompareTo(PacketElement? other) + { + return (this, other) switch + { + (IntegerElement leftInteger, IntegerElement rightInteger) => leftInteger.Value.CompareTo(rightInteger.Value), + (ListElement leftList, IntegerElement rightInteger) => leftList.CompareTo(new ListElement(new PacketElement[] { rightInteger })), + (IntegerElement leftInteger, ListElement rightList) => -rightList.CompareTo(new ListElement(new PacketElement[] { leftInteger })), + (ListElement leftList, ListElement rightList) => leftList.CompareTo(rightList), + _ => throw new ArgumentException("Can only compare lists and integers") + }; + } +} + +public class ListElement : PacketElement, IEquatable, IComparable +{ + public override bool Equals(object? obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((ListElement) obj); + } + + public override int GetHashCode() + { + return HashCode.Combine(base.GetHashCode(), Elements); + } + + public IList Elements { get; } + public int Count => Elements.Count; + + public ListElement(IList elements) + { + Elements = elements; + } + + public static bool operator ==(ListElement left, ListElement right) + { + return left.Equals(right); + } + + public static bool operator !=(ListElement left, ListElement right) + { + return !(left == right); + } + + public static bool operator <(ListElement left, ListElement right) + { + return left.CompareTo(right) < 0; + } + + public static bool operator >(ListElement left, ListElement right) + { + return left.CompareTo(right) > 0; + } + + public bool Equals(ListElement? other) + { + return other is not null && Count == other.Count && Elements.Zip(other.Elements).All(t => t.First == t.Second); + } + + public int CompareTo(ListElement? other) + { + if (other is null) + { + throw new ArgumentException("Other can't be null"); + } + + // Compare elements by elements + for (int i = 0; i < other.Count; i++) + { + // If there's no element in this list anymore, it's that it's lower + if (i >= Count) + { + return -1; + } + + // If the two next values aren't equal, return the result, else continue + var compare = Elements[i].CompareTo(other.Elements[i]); + + if (compare != 0) + { + return compare; + } + } + + // If there's still more elements in this list, it means that it's bigger, else they are equal + return other.Count != Count ? 1 : 0; + } +} + +public class IntegerElement : PacketElement +{ + public int Value { get; } + + public IntegerElement(int value) + { + Value = value; + } +} + +public class Day13 : Day +{ + public override int Number => 13; + public override string Name => "Distress Signal"; + public override void RunPart1() + { + var pairs = ParsePacketPairs(); + + var sum = 0; + + for (int i = 0; i < pairs.Count; i++) + { + var pair = pairs[i]; + + if (pair.left < pair.right) + { + sum += i + 1; + } + } + + AnsiConsole.MarkupLine($"[green]Right order pair indices sum: [yellow]{sum}[/][/]"); + } + + public override void RunPart2() + { + var packets = ParsePackets(); + + // Add divider packets + var firstDivider = new ListElement(new PacketElement[] { new ListElement(new PacketElement[] { new IntegerElement(2) }) }); + var lastDivider = new ListElement(new PacketElement[] { new ListElement(new PacketElement[] { new IntegerElement(6) }) }); + packets.Add(firstDivider); + packets.Add(lastDivider); + + var orderedPackets = packets.Order().ToList(); + + var firstDividerIndex = orderedPackets.IndexOf(firstDivider) + 1; + var lastDividerIndex = orderedPackets.IndexOf(lastDivider) + 1; + AnsiConsole.MarkupLine($"[green]Decoder key is: [yellow]{firstDividerIndex * lastDividerIndex}[/][/]"); + } + private static PacketElement ReadElement(ref ReadOnlySpan packet) + { + // This is an integer + if (packet[0] != '[') + { + return ReadInteger(ref packet); + } + + // This is a list packet + return ReadList(ref packet); + } + + private static ListElement ReadList(ref ReadOnlySpan packet) + { + var list = new List(); + + while (packet[0] != ']') + { + // Skip delimiter + packet = packet[1..]; + + // If it's an empty list + if (packet[0] == ']') + { + break; + } + + list.Add(ReadElement(ref packet)); + } + + // Skip closing bracket + packet = packet[1..]; + + return new ListElement(list); + } + + private static IntegerElement ReadInteger(ref ReadOnlySpan packet) + { + var intEnd = packet.IndexOfAny(',', ']'); + var element = new IntegerElement(int.Parse(packet[..intEnd])); + + packet = packet[intEnd..]; + + return element; + } + + private static IList<(PacketElement left, PacketElement right)> ParsePacketPairs() + { + + var pairs = new List<(PacketElement, PacketElement)>(); + foreach (var pair in Input.ReplaceLineEndings("\n").Split("\n\n")) + { + var split = pair.Split('\n'); + + var leftSpan = split[0].AsSpan(); + var rightSpan = split[1].AsSpan(); + + pairs.Add((ReadElement(ref leftSpan), ReadElement(ref rightSpan))); + } + + return pairs; + } + + private static IList ParsePackets() + { + var packets = new List(); + + foreach (var packet in Input.ReadAllLines().Where(l => !string.IsNullOrWhiteSpace(l))) + { + var packetSpan = packet.AsSpan(); + + packets.Add(ReadElement(ref packetSpan)); + } + + return packets; + } + + #region Input + + public const string Input = + """ + [[5,[[3,0]],[0,[8,6,9],2,9],[5,6,[2,8,3],[0]],[6,2,[2,6,8],10]]] + [[6,4,[2,[2,2],8,[3,7,0,6,2]]],[4,10]] + + [[[6,[10,9,7]],9,[9,[9,0,8,3],[0],3],[8,1]],[2,10,9],[[0,6,[4]],2,[2,3,[6,7,0],[1,4,2]],[[3,7,2],[],0],9],[],[[]]] + [[1,[1,10]]] + + [[2,3,[]],[7,[[6,9,9,1,6],[0,3],10,3,[5]],[[]],[9,[],[1,0,0,1,1]]],[7,[1,[3,0],[7,10,8,5,0],2,1],4,7,3],[[5],6,4],[9,3,[4,[0,7,9,9],5,[2,0],[]],[6,[],[4,9]]]] + [[2,[[3,4,7],[7,2,2,6],[8,9,7,7,6],[7,8,1,6,1],[]],[],8]] + + [[4,[[9,8,1],2],10,6,[[],[],7]]] + [[9,4,10],[0,[1,[10,4,6],[1],8],[[6,2,7,2,4],[9,3,5,6],[0,3,7],10],3],[[[5,4],2,10],2,9,4,[[6,7,2,3],[6]]],[],[]] + + [[0,1],[[7,[10,0,8,1],1,4]],[]] + [[1,3,2,3],[1,[[],7,[6,5,8,7,9],[0,2]],[8],5,[]],[[7,8,[],[8,9,4]],[2]]] + + [[7,[[6]],[4,9]]] + [[10],[],[[10,[10,10,5,2,1],[10],5],[4,4],[[2,1],[9]],6],[6,8]] + + [[[[],[2,3,7],4],0],[[[6,5,10,2,6],10,[2,7],5,5],7,8,[0]],[[10,1,3,3,[7]],0],[]] + [[[[6,2,2,8],[7,4,9,4],3,[0]],7,10]] + + [[6,5,5,1],[8],[]] + [[1,[]],[10],[10,[8,[4]],6,1],[5]] + + [[[[1,1,2,4],[7,8,8,7],5,[9,1,7,0,8],[2,10,10,4]],10,[7,[6,10],[6,10,6,9],[0,8,10],7]],[8,[[],[],[1,3,0,5,10],[7,0,7]],1],[]] + [[6,3,[],5],[]] + + [[[3],[2,[],[1,10,5,5],[1,0,3,3,1]]]] + [[[6,5,[4]]],[5,10,5,3],[6],[10]] + + [[[[],[5,0,8,5,4],[2],0,[]],7,6,10,[7,1,10,9]],[]] + [[[8,[1,2,3]]],[8],[6,9,[3,1,1,[10,10,3,10,0]],3,0],[[[8,7]]]] + + [[0,[[0],5,[6,3,3],[10,3,10,9]],4]] + [[],[5],[8],[[[10,8,10,5,3],[3,7,10,9,8],0],[[],[]]]] + + [[],[10,[7,3,[6],7],[9,[3],[8],7,[1]],10],[6,9,[9,3],[[4,8,1],[10,1,4,7],7],10],[[],[3]]] + [[[6],5,6,10,6],[[]],[1,[6,10],8,3],[1]] + + [[1,3],[10,[2],8,1,[6,6,[5],5,[2]]],[[4]],[],[]] + [[[],[1,0,[8],8,[0,3,6]],1],[[[6,1],8,3,1],1,[6,[6,9,3,8,7]],10,[5,[4]]]] + + [[9,[6,2,[],[3,0,2,7]],0],[[[5,4,0],0,[2],[7,3,2,5,1]],9,3]] + [[2,[7,[5,2,4],8,5,[3,0,4,5,4]],0,8]] + + [[8,6,3,[[10,1,1,7]],8]] + [[[9,2,5],10,5]] + + [[],[6],[[[3,6,3,9]],[[2,0],7,1,[10,10,4,4,10]]]] + [[4,[[6,8,4,9,2],[],5,[10,1]],1,6],[[[4,2,5],4]],[[3,6]],[7,8,[[5,8,9,10],1,[6,8],1,7]]] + + [[[[],10,7],[],[1,[]],8,[9,0]],[0,[[6],3,1,[0,7,5]],[[7,6,3,9,3],4,4],[],0],[],[9,2,[9,1,[0,9,4,6],[9,2],10],9]] + [[],[2,5,6,5,8]] + + [[[[4,4],5,[7],3,[8,8,4]],2],[]] + [[[[6,5,4,7,1],[0,9,9]],[[7,3,7,6,10],3,[6,4,9,4]],[1,[],[]]],[[7,5,[2,4,1,1]],2,4],[],[[[4,7],[1,7,9],5,[]],4,[[7,5,1,9,10],2,5,[1,2,0,9,9]]],[9,[]]] + + [[7,[[8,10,9,4,5],[1,3]],1],[[[1,1],2],[[3]],[[7,9,6,6,8],4,[5]],7],[3],[[9,[3,9],[3,1,0,9,2]],4,5,9,[[1]]]] + [[[4,[9],5],[[2],8,[5,7,0,0],0,9],[[2,1],[],7,[7,1],2],4,7],[[[4,7,0,10,2],[5,5,0,3,6],[10,6,3,3],4,8],2,[[1]],9,9]] + + [[[[6,2,4,0]],[],[[8,3,1,5,5],1,7,4,2],5,1]] + [[[],0],[],[4,[[1,6],2,[8,4,1,3,10]],[5,0,[10,1,0]],8,[2,[10,8,4],[6,2,7,10,10],[8,2,4,4],[]]],[[],6],[[4,5,[2],[10,2,2,1],[4,6,5,10]],[5,[],9,[1]],[]]] + + [[9]] + [[[],8],[7,[6,4]],[5]] + + [[],[[3,5,[1],3,[3]],[5],6,[[7,2,6,9],[1,0,0,1]]],[[[5,5,2,0,10],10,7,8,7],5,7,7,[[],1,[6]]],[[]]] + [[[5,8,10,[9,1,3,2,4],[6,7,0,7,6]],3,[[7],3,9,4,[9]]]] + + [[3,1,4,[[6]],[[4,6],1,[4]]],[0],[3,[],7]] + [[7]] + + [[4,[[5]],[10,8,5,0]],[4]] + [[7,6,10,[[1],8,0,[10,5,1]]],[[[2,1,6],9,9,[4],9]],[]] + + [[7,0,5,3,1],[],[[0,9,[8,4,9]],[7,[10,9,4,1,7],2,6],10,[],10],[]] + [[1,[],[],6,[[],10,3]]] + + [[[[1,6]]],[[[5,3,7],[],[10,9,7,3,3],0,[]],3,10,5],[],[10,[2]]] + [[[[1,5],5],[[6],[3,2],9,[2,0,8]],[9,[6,9,4],8,0,6]],[[[8],8,10],0,[],6,[[2,7,8],0,9]],[7,1],[[[0],[9,5,9]],[[2,10]],[]]] + + [[1,7,[[9],8,[1,1,8]]],[[[9,10,2,0,1],10],0,[7,[10,10],10],5],[7,1],[9,[[],[7,10]]],[[2,9,8,[0,0],[10,9,4,1]],[5],[[8,6]]]] + [[[[4,7,4],[],6,[5,4]],[],[7,[],[],3],[[9,3,5,1,10],[],[7,2]]],[[6,1],3,[[],[3,2],[],[3],[8,7,3,9]]]] + + [[[2],0],[2,[6,1],6,5],[0,[],[[9],[],[],[10,8,6]],[[9,6,8,2,3],8,1,5,1],[[4],2,[]]],[[10,1,0,6,1],6],[4]] + [[1,[[4,10,2],10],[4],6,[[1,0,7],[8,1,9,5,2],6]]] + + [[],[9],[[],[[4,4,1,8],3,5]]] + [[[[10,7],6,[]],[[1,3],[8,9,4],8,[],[2,9]],[8,3],10],[7],[8,9,10]] + + [[3,[10,[],4],[[8,3],4,6,[0,6,9,3,6],[8,9,5,9]],[10,[7,1,0,1],[7,1,2,1],[],[]]]] + [[7,2]] + + [[8,[],2,0],[[1,[10,7],[0],2,0]],[4,0,[10,[0,5,1],[1],[]],6,[9]]] + [[],[6,[[5,1,6,0,5],4],[7,7,[6],8,[2,1]],1,[[3,0]]],[4,10,[[5,10],[4,9,2,1,5],[7,1,5,6]]],[],[1,9,[]]] + + [[[[5,7,1,2],[8],[7,0,9,7,3],[4,2,1],1],8,[4,1,[8,6,1,10],[6,8,3,2,0]],[[3],1,[2]]],[[8,[7,10,1,5,2],[1,1],[1,2]],[[0,4],2,1,[4,6,8]],1,0,3],[10,1,[[0,0,7,8,7],3]],[[4,[4],3,7,[]],3,[10,1,5,[9,6,3]],[[3],[2]],[[],1,10,[2,7]]],[[[9],7,3],8,10]] + [[[3]],[[10],2,3]] + + [[[10,4],1,[[4,2,5,8],3,6,[6,10,5,5],5],6],[[7,3,4,5],3,[],[]]] + [[[[0,5,8,4],[2,3,9,1],5],[[9,7,1,5,3],6,[4],[9,2]],[]],[10,[4,1,3,2,7]],[2,9,[4,[],8,[8,10,6,10,10]],[5,8,[]]],[10,4,3,3],[]] + + [[],[[[0,9,10,9],9]],[3,[[],[10],4,[4,2,7,8]],0,[[9,10,1,2],9,0],[5]]] + [[[[8,2,9,9],9,4,2],[[9,9],0],[9,[4,1],2,[2,5],2]],[]] + + [[],[[0,[4,9]],[4,7,[9],7],[[1,8,9,7,5],[1,4],3,[9,1],4],[4,10,[1],[],[]]],[[5,4,2,10,[9,7,0,4]]],[[[0,10],4],1,5,[[10,7,0,8,9],[6,10,6]],1],[[[5,7],7,5,[]],10,[[6,10,1],[0,8,0]],[],6]] + [[7,[[0,5,8,1],[10,10,0,2],[3]],10],[[[0,1,2,7],4],[1,6]],[[[3],[2],[]],6],[[1],[]]] + + [[2],[[],2],[3,9],[],[7,[],1,[[4],8,6,[9,4]],9]] + [[7,[[],[2,10,5,10],1,0,[9,2,1]]],[8,[[],0],4,9],[4,[6,3,5],7]] + + [[[[5,5,6,3],[2],8,[]],[[10,1,4,7]],8,6],[[9]]] + [[[[8,9],4]],[[[6,0,6],[0,4,2,8,5],2,[5,6,0,9],1],10,4],[]] + + [[[[0],10],[[6,2,10,8]]],[],[[[2],10,3],[],2,10,[10,[]]]] + [[[],1,[]],[[],8]] + + [[[2,[10,8,8],[7,1,7,1]],7,1,[]],[6,[[5,10,5,6],2],2,[2,2,[6],10,8]],[[[5,1],[7],1],2,2,10]] + [[5,[3,[8,2,10],[3,10,10,10]],2,7]] + + [[],[9,1,4,[1]],[10,[[8,9,2,1],8,6,[],6],8,5],[]] + [[[8,5],[[],2,7,[5,0],[10,5,6,8]]]] + + [[[]],[[1,1,5,10,[4,0,10,6,1]],[10,[2,4,7,7],[6,0,8,7]],9,0]] + [[[[4,9,6,4,9],2,[5,1,0,1,5]]],[[1,[4,7,5],8,5],[7,[9,4,8,3,7],8,8,[6,8,3,10,2]],[[6],[8],[2,5,8,3],0]],[]] + + [[[4,6,[8,2,10],9],[6],5],[[],0,[1,[4,5,9,1],2]]] + [[[],9,[8,6,[4]]]] + + [[6,[]],[4,[],[3,[6,8],[1,6,7,6,6]],6],[],[2,5,5]] + [[8,[[5,3],2,2,6,6]],[]] + + [[2,[]],[],[[3,9,10],9]] + [[[]]] + + [[[9,[8,6,1,5,0],7,[5,0],[5]],[[]]]] + [[7,4,[[6,4,6,5]],[[9,1],[3,0]],4],[0,[[10,4,8]]],[],[],[[6,7],0,[],[]]] + + [[9,3,[8],[10,[10],[7,4]]],[1,[[10,9,4],[7,6],[]],10,5,[]],[[5,7,0],[[3,6,2,8,7]],[[2,6],[],[1,3,9,8,8],10,5],6],[10],[[0,3,7],[[7,1,1,2,1],9]]] + [[1,[3,[],[5,3,9,2],[10,5,4,1,7],[1,5,7]]],[[4,[4,0],9,0]],[[1,[9,8,0,6,9]],2,[[7],7,[1],[10]],7],[[0,[],[6],[]]]] + + [[6,1,[10,[4,1,3],1,9]],[]] + [[],[],[],[10]] + + [[8,[[10],0,1]]] + [[7,2,7,8],[],[6,0,6,4],[[[5,4,5],7],6,[],[]]] + + [[],[[[8,2],7,9],4,2],[7,0],[]] + [[0,1,9,7,5],[[[4,1,10]],8,6],[[[8,9,9,10],[6,5],[8,5,3,5]]],[[],8]] + + [[[4,5,6,8],[[5,0,7,10,8],0,[],[7,4,9,9,3]],[]],[],[0,5,[6,8]],[4,[2,[0],[10,1,9,7]],8,3],[]] + [[],[]] + + [[[4],4,9],[],[[[3,1],[4,2,5,10,1]],3,[[5,1,0,1,2]],10,[7,[10,5,9,9,9],[2,3,4,10],[2,1],9]]] + [[6,[10,[10]],[7,[4,0,4]],[[0,3,10],7]],[[[9,7,2],7,9,[7,4,8,4,9]],2]] + + [[7],[[3,[],[5],[0,6]],[[3,10,5]]]] + [[3,[4,7,[9,0,1,1,7]],0],[[8]]] + + [[9,4]] + [[9,[[5],2]],[3,3,[4,[9,3,8],0,5],3,7],[9,5,6],[10,9,2,5,1]] + + [[[],[6],8],[[[8],9,[5],1],[6],4,6],[[[]],6],[],[5,[8,8,[10],[5,1,5,9],4],[5,7]]] + [[6,[[],2,9,3],7],[4,[[5,9],3,[3,5,5]],7,7],[[],[[2,0,2,9,3],6],[],[[9,6]],2],[5,9,[[],2,[9,10,10],[7,0,4,1],9],9,[[8,2,2]]]] + + [[[7,5,[5,10,1,9],[2,9,9,3]],1,[6,9,[7,9,6]],9,[[5,1,9,10,0]]],[6,8,[]],[],[[2,[2,5,4,9,10],[3,3,3],1],7,[2,9],[4,7,7,[5],[1,2,5,9,8]]],[4,[[],[7]],8,2,1]] + [[4,9,3],[6,[],[6,[7,7,9,1,5],[10,4],10],10,3]] + + [[[2,3,[7,5,1,0],5,[10,2,0]]],[7,6],[[[1,0,8,10,2],1]],[0],[6]] + [[10,6],[7,10],[[4],[]],[8,[],[[],10,2,10],[[9,3],[6,9,8],[10,2,4,1],8],2]] + + [[[],4],[10,8,[3,9,[]],9],[8,5,[],2],[[8,[10,5,7,2,10],[4,10,7,9],[4,4,5]],[[5,4,6]],[],4]] + [[],[0,8,[5,[6,3,0,7],1,9,6],[3,8,[10,3,8,10],4],[8,[10,6,10],10,[],4]]] + + [[[[],6,[5,5],8,[0,5,1]],[7,4,4,[4,1,3,0],8],3,[5,6],8],[9,[4]],[[0,[6,5],1],2,[],[],[2,[8,0,2,10,6],1,[5,8,9,9,4]]],[9,9,[],0]] + [[2,[[7,9,8,8,10],[],[4,5]],[[1,10],7,[1,9,1,0]]],[[4,[6,10,1,5],5,6],[],[[4,9,2,3,2],6,[3,0,2,2]],9,[]],[5,[[10,0,10,6,4],1]],[9,[0,[8,2,2],8,[5],4],[]]] + + [[[8],[7,6,10]],[2,5,[[9,9,1,2],[],[],2,4],1],[],[[[7,3,8],1,1,0],[[4,8,7,10,3]],6]] + [[],[[9,9,[4,2]],[7,[],9,[3]],[[1,5,0],[9,3,6,1,2]],[[9,9],4,10,1],1]] + + [[],[[0,[9,6],[2,4],9,3],[]],[5],[],[6,[[4,1,0,7,7],[]]]] + [[8,10,6,[],4],[[9,7,2,8]],[0,[5,10,[3],[6,5,9],[4,4]],[],6],[[[],2],8,[9,[3],5,[10,1],8],0],[[3]]] + + [[[4,5,[],6,[]],[0,6,[2,4]],10],[[1,[10,6,4,10],[10,4]],1,7,10,7],[],[[],[4,10,[9,0]]],[[6,[10,7,0,7,10]]]] + [[3,[3,[4,1,1,10,10],[8,4]],4],[]] + + [[10,[10,4,7]],[7,[1,2,[0,8,6,7]]],[4,6,4]] + [[10,10],[[[2,4,4],0],4]] + + [[[[10,4],[1,4,7,1]],2],[[[]]],[3]] + [[[[],[5,4,5,9],8,5],[[],0,4,[1,0],6]],[[3],[[],6,7,0,[7,1]],8,7,8]] + + [[[[6,6,5,8],[10,2],[4,10,0]]],[[[1],[4],[0,3,5],[0,1]],[6,[0]],8,1],[1,10,8]] + [[[10,3],[6,[2,2],5]],[[10],[],[[7]],[[],3,[0,0,1,8,0],3,[]],2],[],[]] + + [[6],[[],7,[[1,2,0,1]]],[[7]]] + [[[[],[],3]],[]] + + [[1,[[5,2,1,10]]]] + [[],[6,1,[]],[1,10,5,6,[[1],[10],2,[2],[4,6,10]]],[]] + + [[10,[2,[6,9,4,10,7],[5,8],0],8,10,6],[[[4,10,1]],[[7],[7,4,10,0],[7]],10],[],[[2,[0,2,10,10,1],7,8],[9],[1,[0],[2]],[8,7,[]]],[[]]] + [[1,2,3,[3],[]]] + + [[[],1,10,3],[],[5,2,0]] + [[10],[5,1,[8,[9,0,9,10]]],[],[[0],[10,10],4,1]] + + [[0,[[0,5],5,2,3]]] + [[],[[],5],[],[0]] + + [[3,[9,1,3,[0,9,1,4]]],[],[3,6,[3,10,6]]] + [[9,[[],[7,6],[9],1,10],7,[[4,0],[7],[1]],[1,1,3,[4,5,3,10],1]],[7,4,[[2,9,1,9,3],5,[4]],[8],8]] + + [[[[4,5,7],[0],6,[6,7]],8,4]] + [[4,3,[[7,4,6],0,2]],[3,3,8,[[5,5,1,8],[8,2,3],7,3,10],7]] + + [[[[7],3,7],0,7,2],[7,[[4,6,8,2,4]],[[6,6,5],[4,4,5,6,6]],[],5],[10,9],[]] + [[2,[[6,2,7,5,7],5,1,3],8],[5,[8,[5,9,8],[],[7,5,3],[4,9,0,2]]]] + + [[[2]],[3,[0]],[9,10,2,[],[[7,0,8],4]]] + [[[6,[],7],6,5,9,7],[9,[5,[10,1]],[6],3],[0],[4,4,9,7,[3,6,3,8]]] + + [[6,0]] + [[4],[[[4,6],[4,10,3],2,[]],3]] + + [[6,8],[[],[5,8,7,3,[]],2,[5,10,[0,5]]],[10,[3,7,[0,5,6,3],1,[9,4,5,1]],5],[[],[7,0,0],[7,6],[7,[7,3,1,1,1],0],[[],8,[]]]] + [] + + [[[1,[6]]]] + [[[8,[],[6,9,0,9,7],3,0],4,5,5,[[],8]],[0,5,7,[10,9,[]]],[],[[],[10],[5,8,7]],[6,[[6,10,1],0,[4,9,8,4,7],6,[0,4,9,2]],[5,[1,5,7,1]],3]] + + [[10,[0,1,[10],[]],[]],[[8,6],4,9,8,0],[5,[[3,0,6,7],1],4,8],[5,[8,[3]],9,3,[[10,5]]]] + [[[[1,10],[5],[6,2,2],5],[8,5,8,[6,0,0],3]],[]] + + [[1,[9,[3,6,3,9]],[[10,4,2],4,4],[[5,10,4]]],[2,[[10],3],[6,[],[2,10],1,[2,4,6,8]],[8,[8,8,9,2],[],7,[2]],[[10,5,5,10],[3,0,10,2,6],[2,2,7,8]]],[[[6,7,1],[8,7],[4,4,4,4],[],9],3,9,0],[[4,2,[2,3],0],[[10],8,1,5]]] + [[[],[10,[2,10,8]]],[]] + + [[2,9,4,2,[[2,6,4,9],[10,4,4],[],0,[]]],[[[9,0,9,5],[0,1,0,6,10],[10,2,0,6],10]]] + [[[],7,[3,9,[],2,[2]],10],[],[7,1,[[4,1],[],[5,3,1,8,2]],4,4]] + + [[10,[[6],[10,8,1,5],[2,3],3],[[6],8],[5,[4,6],[5,2]],[[8,8,2]]],[2],[[[],[5,3,7],5,[8,2,6]]],[[[2]]]] + [[10,8,9,4,[8,[],8]],[5,7],[]] + + [[5],[],[[[1,8,0,8],[1,7,4],5,[]],[],[[]],[2,8,[6],10,10]],[[[0],9,[],[1,0]],10,7,3]] + [[3,[],5,[[10],[9],5],[[10,3,6,9],[8,7],2]],[8,9],[7,[]],[[5],[],8,0]] + + [[10,[[9,2,3,7],10,[3,8,4,3]],[10,[3],[4,4]],[2]],[],[3,[7,[9,8,10,10,1],10,[10],1],[7,8,6,[4,8,7],2],6],[[[10]],[[10,7,1],2],0,[[]],8],[]] + [[3,0,1,[7,[0,7,5,2],[],[],[6,5,0]]],[],[],[10],[9,5,[]]] + + [[0,8,[],[[1,0],[5,8,3]],[9,8,10]]] + [[],[8,[]]] + + [[[7,9],[]],[],[[[1,10,3,8,4]],[9]],[]] + [[[],6,[4,1],2],[9,10],[6,0,1,3],[3,[],[],[7,2]]] + + [[[10,[],8,9,[0,1,7,3]],[[10,4,10]]],[],[[5,[5,7,6,7],5,4],3,8,[6,[],[3,2,10],[5,6,2,7]],8],[7,[[9,7,2],8,3,0,9],[5,4,4],7]] + [[[]],[],[2,[],0],[[2,[],4,4]],[[10,[4,7],[1,3,2,4,2]],[],[6,[8,1,3,2],2],6,[5,10,[8,10,6,8,2],6,[]]]] + + [[[[7,6,1,3],8,[]],3,1,[0,[5,0,9,8],4,9]],[[[3,10,5,8],[2,2,4],[9,7,6],[7,7,10],0],5,[[0],[4,9,3],3,1,1],[[9],6,5],[]]] + [[3,1,[6,[9,0,3],[2,9,1,2,7],2,[9,9,5]],[0,0,0],3],[8,4,[[2,10,9,6,2],0,[7,5]],[7,2,[9]]]] + + [[[10,[],[1,9,4],[0,7,10]],10,10,[[],[7,1,1,9],[4,5,7,2,0],9]],[[[8,7,7,7,10],2,9],[],[[4,10,6,6],[]]],[]] + [[[[],8,[6,0,1],9,9],3],[],[]] + + [8,3,10,5] + [8,3,10,5,4] + + [[[10,8,1,6],9],[4],[[8],10,[[1,3,2,10],[1,1,8,8,4],10,6]],[9,2],[[[8,9],5,9]]] + [[[[1,5,1,8],[3,6],5],7,10,7,4],[[9,4,6,5,9],[[0],3,[2,2,10,1,1],1],[2,2,[2,10,7],5,10]],[7,6,[4],[[],3,10]]] + + [[4,[],[9],7],[5],[[7]],[8,[[3,9,10],10,[4,4,1,7],[7,1,0]],[[2,3,1,7,10],1],5],[9,10,9,[]]] + [[1,1,8,1],[]] + + [[[[0,9,3,8],9]],[7,[[8,7,6],4,1,5,[10]],2,[5,[9,6,4,9],[6,7,5,8],10]],[[5,4],8,1,8],[]] + [[7,10,10,[[2,6,6],2],[[]]],[],[5,7,[1,[]],[[4,8,7]],1]] + + [[9],[2],[],[]] + [[[],[0,1,4,4],[],[[10,8,8,4],9,[0,2,4,6],[],[7,2,8,9]]],[6,[[2,5,5,8],6,1,[7,1,7,2],[6,9]],[[4,5,6],5,4]],[[]],[],[4,4,[[9],[],9,0,2]]] + + [[],[[0,[10,3,3],4,5],[6,9,4]]] + [[9,[[],2,[1],[4,4,6]],[[9],[6,5,2],[6,3,7,4],4],[]],[2],[],[[[2,7],[1,1,10,2,9],7]],[[],[[10,6,4,3],[]],0,[4],[[4],1,10,5]]] + + [[[[3],5],[7,9,10]],[2,[1,7,8,[3]],[]],[]] + [[7,6,[],0],[],[[[7,6],[10],1,2,10],1,1,[6,10],[[4,10,4]]],[0,[],[],8,[[5,6,0,1,0]]],[6]] + + [[3,[9],[2,[5,0,5,8],[],4],[9,[8],[2,5,4]],[2,[4,7,2],[10,0,3,8,8]]],[[10,2],7,3,9,[[4],1,[1,9,6,9],10,10]],[1],[4,4],[[[7,1],1],10]] + [[[[4,2,1,3],7,[6,0,9,6,8],[3,0,10],8],6,[],3],[[[6],[0,10,5,4,6],7],10,[9,7,[10,3,0,4,0],2,[9,4,2,5]]],[3,[0],[[9,0,1,6,1]]],[[4,1,8,8],[[5,0,6,3,8],[7,8,7],7,[10,6,5]],5,[0],[[],9,9]],[[5]]] + + [[[6,[0],[0]],9,[10,7,[10,1,6,8],10],[[],3,2,9],3],[7]] + [[[[9],[8,5,4,6]],10,[[9,6],4,5],6,4],[[10,[]],10,2],[],[[[8,10,9],7,0],[[4],[5,9,8,1,2]],[[8],[10,9,3],[2,6,3,2,6],1],[[6,8],[5,5,4],3]],[[8,1],[5,10],6,0,1]] + + [[8,[0,1,6,6,8]],[],[[1,9,2,[4,5,2,4]],4,[],[7,1,7],7]] + [[[7,[7,1],4,10],5,5],[[[1,6,8,9,2],[4],[5,5,7]],1,10,[0,[10,6],3]],[],[[[6],[6,2,0,10]],[[6,6,4,1,3],1],[]],[1,[[7,2],5],[],[2,8,10,[10,1,2,2],4]]] + + [2,0,1,0,6] + [2,0,1,0] + + [[],[5,[],3,[[1,9,3]],2],[[[],[3,2,3,2,7],[1,10,6,3,9]],1,8]] + [[6],[[[1,0,6],[6,4]],7,1,[2,[5]],7]] + + [[9,0,4]] + [[1,10,5,9,[5,5]],[[[3,8,10,8],0,[4],[8],[9,7]]],[[[1,5,4],10],9],[4,[[5,2,8,8],[10,5]],4]] + + [[7,6]] + [[[],[[10],0,8],0],[1,5]] + + [[[[2],4,[8,7,7,0,4],[3],7],[],[[3,6,6,1]],6],[[[7,0]],1,[1]],[[0,10,[1,0,5],[0,5]],8,4,[9],[0]],[[3,0]],[9]] + [[],[[[0,6,6]],[[8]],3,[1],9]] + + [[[4,[0,2,0],8],[[5,10,6,6],[2]]],[],[]] + [[0,6,4],[8,[5,[]],[[9,3],[9],[2,5,0]]],[[10,8,2,[3,0,4,9]],[6,6,5],[4,[],5,9],9],[[[5,0,10,5],5,3],6,4]] + + [[0,4,[],4]] + [[[1,[]],6,9,[[4,0],[]]]] + + [[0,[[1],10,[4,7],4]],[[10],1,[3],6],[[[7,2,0,7,0],9,[0,8,4],1,6],[[9,2,0]],8,6,[10,8]],[[],10,[9,[8,5,0]],[10],3],[]] + [[1,[[],9,[7],[7,6]],[3,5,1]]] + + [[6],[1,6,[[2,3,2],[7,9,4,3,5],5,[6,6]],[9,5,2,0],[3,[7,1,4,1,2],4,[2,7,7,9],[8,8,4,10]]],[]] + [[[10,7,[],[3,4],[8,1]],[5,[9],3]],[[3,[8,7,0,8,6],[0],[5,3,1,0,5]],[9,[4],10,[8,0,2,10],2]],[[[10,10],0],[]]] + + [[2,[[7,5,10,9]],5,5,[]],[[[1,6,5,10,6],[5,8,4,10],[2,5,3,8]]],[[],[[2,10,1],[],8],5],[]] + [[3,[10],9,[5,[],[2,3],6,7]],[[],4,9],[],[[[1,10,4,10]],0,10]] + + [[],[10,[2,[0,8],[7,4],6],2,2,[[2,2,7,2,9]]],[0,[]]] + [[[[10]]],[],[],[[[2,2],6,0,[]],[],10,3,[[4,7,1],[6,10],2]]] + + [[[4],[],5]] + [[],[[],3,8,8,10],[7]] + + [[]] + [[[3,5,1,[0,8,0,7,6]],[2,10,1,[]],[[8,8,3,8,2]],[[10,1],1,[0,2,6],[10]]],[[[1,2],[5,2,6,7,9],10,1],2,5,[]],[[7],[6,9,10],[2,[6,4,10,1]],3,[[10,5,8],9,[2,5,10,2]]],[[5,6,[7,7,8]],[7,[],7],[],[6,10,[7,7,5]]],[]] + + [[[5,[5],[],10,[3]]],[],[],[5,3,4,8,[[0,10,7,3],[5,5,6],[10,7,9,2,7],[6]]],[[],[[6,0,5,10]],[[10,1,1,5,7],[8,6],[],[5,5,5],2]]] + [[8,[9,4,[8,0,3],[0,4],2],[[3],1,1,4]],[5,[1,[],6,5,[4,7,0,8]],3,[[3,8,10,0]]],[7,4,[],1,6],[[[7,4,9,10,8],[],10,[7,9],[2,1,3,8]],2],[[[8,5,1,6,6],[3,9,3,1],[2,10,0,3,5]],7]] + + [[7],[2,[10,[9],[9,10],[1,5,8,8,3]],[[3,7,0],3,[9,1,0,9,10],8,[5]],[[1,6,10,9]],3],[[9,1],[[10,1,7]],6]] + [[9,[],4,[[],5],5],[8,[5,6,3,[5,8],[4,10,0]],[3,8]],[8,[[0,1],3,0,1],4,[[2,9,3,1]]],[[5,3,5,1,[6,5,6,3,6]]],[1,[[]],[5],[2],7]] + + [[10,9,9,2],[[10,6,7,6,[0,1,10,10,0]]],[2,[3,[6,9,5],9,[]]],[8,2,[]]] + [[],[[7,[8,10,7],[7,8,10,6],3,[]]],[],[[[5,5,1,4,2],6],[],0],[2,4]] + + [[5,[8,0,[7,10,7],9,[1,6,9,2]],7],[[10,9,[7]],2,[4,[10,7,0,8,6],[],[4,1],5]],[]] + [[6,2],[0,[],6,[[1,10,4,8,8]]]] + + [[[5,[]]]] + [[6,[],2],[0],[[],10,[[1,8],4,[9],[5,2,0,6,9]],[]]] + + [[10,[[],[5,8,10]],2,[10,1],[]],[[],5,[6],[3,[2,0,4],6,4,3],[7,4,[],1,7]]] + [[[[5,0],[10,10,3],[9,10,10,10,5],5],5,[[0,1,10,9],10,[8,8,6]],5,9]] + + [[4,[[]],[]],[],[[10,[7],0,[3,10,1]]],[[6,3],10,10,[2]],[3,4,[3,6,10,0],[[5],8,[3],[6,2,8,2,2]]]] + [[2,[0,[3]]],[9]] + + [[[2,5,[9,10,7],[0]],[[4]]],[9,3,[3,10,9],[9,[3,9,10],[6,3,10]]]] + [[],[8],[[[],10,[],8],5,4],[[6,10,[],5],[8]],[[8,[9,10]],[[9,0,3,4,10],[7,9,4],8]]] + + [[5,7,5],[1],[1,[],10],[[9],5,10,0,[]]] + [[7,0],[[],9,4]] + + [[3,[]],[[]],[[0,[7],[8,2,9,0]],[[3,2],[3],[3,3,3]],[]]] + [[[[],5],7,[[0,0,1]]],[9,[6,[10,8],[6,7],1],0,[6,0],0],[2,5,[9,3,6],[[5],8,2,5]],[[[],4],[]]] + + [[9,10,2,[5,[],[3,7,0,8,3]]],[[9],4],[2,[[3],[9,2,0,3,8],[9,4,2,9,10]],[[5],[4,2,0,8],9,[],[1,6,6,7,8]],10,8],[9,2]] + [[0],[10,[[2],3,2,[9]],[0]],[9,[8]],[1,[],[2,2],8],[7,6,[8,[],5,8],[[6]],7]] + + [[0],[[5,7,3,8],[[1,5,2,2,5],9,3],[],[],[[0,0,5,6,1],9]],[[9]]] + [[3,[[3,6,8,3],[]],4],[[9]],[1,[0]]] + + [[[1,[6,3,1,4,4],[]],10,10],[[[],[4,6,2,8],[7,3,8]],[],[8],[[9],[4],[5,8]]]] + [[8]] + + [[],[8,[[0,2,0],[4],2],[8,[]],10,[]],[0],[[7,2,[6,4,10,7,8],[8,2,10],[3,10,9,5]],[],[1],3]] + [[8,3],[[[7,2],[4]],[],[7,10,[7,7,4],[0,5]]],[10,6,8,8,[[10,9],[9,7],[0,10],[10,6,5,6,2]]],[10,7,8,[[7],3,6]]] + + [[[10,[7,6,5,8,7],10,4]]] + [[[9,2,7,2],[[8]]]] + + [[],[[0,[8,5,1],2],[[5,9,4,1],8,2],[[3,6,1],[5,4,4,7],[6]]],[],[4,8,[[5,9,6,4],9,[10,6],[0,8,9,1,10]],[4],2]] + [[6,2,[[7,10,2,8,5],2]]] + + [[3,[],0,[]],[2,8,[[5]],[2,6,[0,7,0,1]]]] + [[2,[[3,4,9,9],[],[6,6,5,3],9],0],[],[9],[[],[8,2,2,[9,6,0,5],[0]],5,6]] + + [[[],8,5],[10,[[8],6]]] + [[[8,5],2,5],[],[]] + + [[10,10,[0,0,[4,1,10,5,6]],0,[[7,2],5]],[],[[[10,9],[1,2],[8,1]],6,2,10],[[[10,7],8,[1,9,6,6,10],5,5]]] + [[[[10,10,2],[6,6,6]],[5,5,[4,8,10,5,9]],5,[],[[2,6],4,7,[8,5,6],[2,3,9,2,1]]],[[5],7],[1,[2,3,[1,6,8,8,4]],9]] + + [[9],[3],[2,[[],7,4,4,[7,2]],[1,[4,5,6,3]],5,[[7],9,9]]] + [[6],[[5,[8,7]],[[4,4,8,2],9]],[1,7,4,[[5],4,[2],10],10],[6,10,10,[]]] + + [[10,4,[[5,0],[2,0,2,4,7],[8,3,7,1],8],[],6],[[4,[10,9]],1,10],[[[1,5,6,2,7],3],[[7,0,2,3],1],[[]]],[[5,[2,1,8],[2,3,9]],[[9,1],[3,3,1,2],[10,6,3,5,2]]],[]] + [[[1,6],[6,2,[3,8,10],[],[7]]],[],[8,[9,[9,1,2,4,10]],8,[],0],[]] + + [[[[0],[0,10,7,8],10,9],3]] + [[8,1],[[[2,8,1,1],[],0]],[[],10,3,7]] + + [[[1]],[[5,[3,3,0,8],[8,8,5,5,8],7,6],[6,[2,10,3,9],[4],[5,6,1,8,7],[0,9]],[[0,2,2],1,1,5,8],10],[2,3,[6,[9,9,8,1],[],2],7,5],[0,0,1,[],[9]]] + [[9,5],[8,[[10]]],[[[7]],8,2],[3,4],[9,[],[[4,4],3,[3],[9],[5]],[2,[7,3],[0,0],[10,8,2]],10]] + + [[[[3,1,7,9],2,[0,0,1,4]],8],[[[7,4],9],[7,9,[],2,10],10],[[[0,2,2],4,6,3,6],2,4],[[8,[4,1,9,3],8,7],[[1],[1,0,6],9,9,5],4],[]] + [[7,2,[[6,5],[6,1],[3,5,5,3,3],9],[[0,7,2],[5,0,2,10,4],[8,3],[],10],0],[]] + + [[2,9,1,10]] + [[],[9,10],[8,[[10,10,7,0],[10,2,1,9,3],1,[6,8,8]]],[],[[[10,2]],[[6,0,9,6,4],7],7]] + + [[5,4,8,4]] + [[],[[6]],[[8,2,0,[]],[],2],[6,1,[10,2,5],[[],[10],[8,0]]],[[6,2],7,[8,[1]],[]]] + + [[[5,6,[1,8],10],[9,[2,3,5,6,10],0,[4,3,5]],2],[],[1,9,1,9,[[],[1],4,10,[2,1,9,5,5]]],[3,2,[],6],[[],[],3,6,2]] + [[1,[[3],10,2,6]],[],[[10,7],2,[],[[],5,6,[2,10]]],[[[9,2],9],[[],4,[10,4,3],10,1],[[4,1,10],[0,3],7],[2,5,7,[0,9,8,5]]]] + + [[[],8,[],3],[8,[4,[3,0],[6,6],7,[0,3,5,6]],10,[[10,8,1,1,1]],[]],[4],[4,7],[10,[],1,[9,[0,2],4,2,2],[[5],[1,2,3,7],0,7]]] + [[[10,4,[10,2]]],[[[7,5,8],4,[2,1]],4,9]] + + [[0],[],[2,[[1,6,3,5,4],7],4,9]] + [[[2,[6,10,2,10],1,8,[]],10,[7,[],2],[[],5,1,[],4],1],[3,[[10,5,7],[1,5,8,3,9],[7,10,0,5,8]],[[0,4,7,2,1],[6,2,1],[3],0]],[0,2,3]] + + [[9,10,3],[[3,[2,8,3],6,2,8],[0,[7]],0],[1,8,[[5,2]],[[7,6,6,5]]]] + [[[]],[10,10,9],[[[2],8],10,[]],[[],[7,[7,9,0],[],0],[2]],[[],[[10],[9,9,2,1,4]],7,4]] + + [[2,4],[[1,7,3,5],8]] + [[],[5],[5,9],[2,3,[8,3,[0],2,6]]] + + [[[[0,3],[9,2,5,9,4],[5,2,9,8],[5],9],[9,7,[2,4,8]],8,3,[[6],[2]]]] + [[7],[[],10,1,[[8,5,8],[8],[5],[1,2],6]],[9,[[2,2],10,[],4],[],[[3],9,[0,10,8,9]],5]] + + [[[[]]],[8,6],[[]],[],[[6,2,5]]] + [[[2,10,[7,6,2]],[10,2],0,10],[[0,6],1,5,7],[10,[]]] + + [[],[7,1,[]],[9,3,9],[6],[0,4]] + [[],[[[4,1,3],[10,9,8,7,9],7,[1,2],[8,0,2,5]],[6],6],[]] + + [[],[[],[8],[[0,4],8,[7,8,3,9,9]],[],[[],[6,6,10],0]],[[1,1,[],[10,2,8,7]],[[9,6],[9,6,2,10],2,10,10]],[[8,[5,5,7]],[3,8],3],[[[6,0,2,2],[],8],[0,[7,5,4],4,[4],[1]],[8,6],5,3]] + [[[10,3],[[1,0,7,3],6,[1,1,2,10],5,[6,7,4]],[],[5]],[],[],[3,4,[[3,7,9,3,0],6,4]],[0,3,0]] + + [[],[],[4,[10,7,[2,9,5]],[],[9,1],10]] + [[[],[2,[1,9],[]]],[],[],[],[6,9,[[6,8],5,2,[4,3,4,6,6]],[[5,2,3,8]],[[3,8],4,5,[4,2,4,1]]]] + + [[7,[5,[4],4],1,[[2,5,8,2],0,[9,4]],1],[[9,4,8,[0],5]],[],[8,[5,[2,5,8,6,8],3,1]],[]] + [[[0,[9,6,2,7,9]],[8,[1,1,8]],4,[3],8],[[5,[8,6],3,1,5],4,8,[],[[1,1]]]] + + [[],[[3,3],[[8,8],10,2],9,4],[0],[3]] + [[3],[],[8],[]] + + [[[5,[8,5]],[9,2]],[[[4,9],[3,1],[2,7,5],[2,9,2]],0],[[2,10,2,[],[4,4,4]]],[[7,[1,2,5],[],9],[8,3,[3,8,0,1,10],0,5],1,7],[[[8,0,6,2],[],4,[10]],3,[],4,8]] + [[[[9,8,4,2,4],[0,2,0],5],[7,[4,7,10],[]],[[4,0],2],[8,[2,0,10,4],[7,6]]],[],[1,[[1,4,9,8,6],4]]] + """; + + #endregion +} \ No newline at end of file