master f9ab8b3204cf cached
127 files
545.8 KB
250.3k tokens
113 symbols
1 requests
Download .txt
Showing preview only (582K chars total). Download the full file or copy to clipboard to get everything.
Repository: codingforinterviews/practice-problems
Branch: master
Commit: f9ab8b3204cf
Files: 127
Total size: 545.8 KB

Directory structure:
gitextract_s71i4brv/

├── .gitignore
├── LICENSE.md
├── README.md
├── array_rotate/
│   ├── README.md
│   └── solutions/
│       ├── README.md
│       ├── keppy.rb
│       ├── keppy_test.rb
│       └── rotate-solution.rb
├── balanced_delimiter/
│   ├── HINTS.md
│   ├── README.md
│   ├── SOLUTION.md
│   ├── generator/
│   │   └── gen_testcase.rb
│   ├── solutions/
│   │   ├── balanced_delimiter.c
│   │   └── balanced_delimiter.js
│   └── tests/
│       ├── input00.txt
│       ├── input01.txt
│       ├── input02.txt
│       ├── input03.txt
│       ├── input04.txt
│       ├── input05.txt
│       ├── input06.txt
│       ├── input07.txt
│       ├── input08.txt
│       ├── input09.txt
│       ├── input10.txt
│       ├── input11.txt
│       ├── output00.txt
│       ├── output01.txt
│       ├── output02.txt
│       ├── output03.txt
│       ├── output04.txt
│       ├── output05.txt
│       ├── output06.txt
│       ├── output07.txt
│       ├── output08.txt
│       ├── output09.txt
│       ├── output10.txt
│       └── output11.txt
├── bst_count/
│   ├── README.md
│   └── solutions/
│       └── solution.js
├── bst_height/
│   ├── README.md
│   └── solutions/
│       └── .gitkeep
├── coin_change/
│   ├── README.md
│   └── solutions/
│       ├── CoinChangeSolution.java
│       ├── CoinChangeSolution.scala
│       ├── CoinChangeSolutionTest.java
│       ├── coin_change_solution.js
│       └── coin_change_solution.py
├── factorial/
│   ├── README.md
│   └── solutions/
│       ├── FactorialSolution.java
│       └── FactorialSolution.scala
├── fibonacci_dynamic/
│   ├── HINTS.md
│   ├── README.md
│   ├── SOLUTION.md
│   ├── SOLUTION.md.bak
│   ├── generator/
│   │   └── generate_cases.rb
│   ├── solutions/
│   │   └── fibonacci_dynamic.rb
│   └── tests/
│       ├── input00.txt
│       ├── input01.txt
│       ├── input02.txt
│       ├── input03.txt
│       ├── input04.txt
│       ├── input05.txt
│       ├── input06.txt
│       ├── output00.txt
│       ├── output01.txt
│       ├── output02.txt
│       ├── output03.txt
│       ├── output04.txt
│       ├── output05.txt
│       └── output06.txt
├── fibonacci_lite/
│   ├── HINTS.md
│   ├── README.md
│   ├── SOLUTION.md
│   ├── generator/
│   │   └── gen_testcase.rb
│   ├── solutions/
│   │   └── fibonacci.rb
│   └── tests/
│       ├── input00.txt
│       ├── input01.txt
│       ├── input02.txt
│       ├── input03.txt
│       ├── input04.txt
│       ├── input05.txt
│       ├── input06.txt
│       ├── input07.txt
│       ├── input08.txt
│       ├── input09.txt
│       ├── output00.txt
│       ├── output01.txt
│       ├── output02.txt
│       ├── output03.txt
│       ├── output04.txt
│       ├── output05.txt
│       ├── output06.txt
│       ├── output07.txt
│       ├── output08.txt
│       └── output09.txt
├── find_uncoupled_int/
│   ├── README.md
│   └── solutions/
│       ├── FindUncoupledIntSolution.java
│       └── Solution.java
├── linked_list_cycle/
│   ├── README.md
│   └── solutions/
│       ├── .gitkeep
│       └── LinkedListCycle.java
├── linked_list_reverse/
│   ├── README.md
│   └── solutions/
│       └── .gitkeep
├── minimum_stack/
│   ├── README.md
│   └── solutions/
│       └── solution.js
├── queue_two_stacks/
│   ├── README.md
│   └── solutions/
│       └── solution.js
├── ransom/
│   ├── Ransom.java
│   └── RansomTest.java
├── target_sum/
│   ├── README.md
│   └── solutions/
│       ├── .gitkeep
│       └── solution.js
└── tree_zig_zag/
    ├── .gitignore
    ├── HINTS.md
    ├── README.md
    ├── SOLUTION.md
    ├── generator/
    │   └── generate_tree.py
    ├── solutions/
    │   ├── TreeZigZag.java
    │   ├── tree_zig_zag.py
    │   └── tree_zig_zag.rb
    └── tests/
        ├── input1.txt
        ├── input2.txt
        ├── input3.txt
        ├── output1.txt
        ├── output2.txt
        └── output3.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# ----------------------------------------------------------------------
#   Java - default GitHub .gitignore
# ----------------------------------------------------------------------
*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# ----------------------------------------------------------------------
#   Python - default GitHub .gitignore
# ----------------------------------------------------------------------
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

# C extensions
*.so

# Distribution / packaging
bin/
build/
develop-eggs/
dist/
eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
.tox/
.coverage
.cache
nosetests.xml
coverage.xml

# Translations
*.mo

# Mr Developer
.mr.developer.cfg
.project
.pydevproject

# Rope
.ropeproject

# Django stuff:
*.log
*.pot

# Sphinx documentation
docs/_build/

# vi swap files
*.swp


================================================
FILE: LICENSE.md
================================================
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/deed.en_US"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Programming Interview Practice Problems</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="https://github.com/codingforinterviews/practice-problems" property="cc:attributionName" rel="cc:attributionURL">Coding for Interviews contributors</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/deed.en_US">Creative Commons Attribution 4.0 International License</a>.<br />Based on a work at <a xmlns:dct="http://purl.org/dc/terms/" href="https://github.com/codingforinterviews/practice-problems" rel="dct:source">https://github.com/codingforinterviews/practice-problems</a>.


================================================
FILE: README.md
================================================
# The Practice Problem Compendium

Tired of Googling around for programming interview practice problems? This is a project to build high-quality practice problems suggested for preparing for programming interviews.

## Suggested Practice Questions

1. [Array Rotation](array_rotate): take a given array and rotate it `n` slots *(10-20 minutes)*
2. [Coin Change](coin_change): how many different ways can you make change given an amount and list of coins?
3. [Tree Zig Zag](tree_zig_zag): alternate between the left-most and right-most nodes in a BST.

## How should you approach these problems?

1. **Code in a realistic fashion**. If you're doing a whiteboard interview, practice with a whiteboard. If you don't have a whiteboard, writing your solution on paper can be a good substitute. Phone interview? Try using the online code pad they will have you use.
2. Always compile your code after writing it. You'll often find bugs in your solution. Think—how might you catch this problem in the future?

## What makes a good practice problem?

1. Representative of many problems
2. Has shown up (or could reasonably show up) in real interviews
3. Takes *less than an hour*
4. Not language-specific
5. Two kinds of problems:
    more involved complex ones (company challenges)—good for overall practice
    more specific targeted problems—better for checking understanding
6. Not breaking any confidentiality agreements

*Interested in getting even more involved?* Feel free to submit problems and solutions as pull requests. Email brian@codingforinterviews.com to get more involved with the group and join our planning Trello board.


================================================
FILE: array_rotate/README.md
================================================
# Array Rotation

This problem is to rotate a given array to the right by `n` steps.

For example:

Given `[1, 2, 3]` and `n = 1`, you should return `[3, 1, 2]`

Each step, the last element in the array is moved to the front of the array, and the rest are shifted right.

Another example:

Given `[1, 2, 3, 4, 5]` and `n = 3`, you should return `[3, 4, 5, 1, 2]`

## Questions for further understanding

1. What is the time complexity of your solution? How about space?
2. Can you do this in-place?

*Challenge:* There is an O(n) time / O(1) extra space solution.


================================================
FILE: array_rotate/solutions/README.md
================================================
# Further Resources

* [LeetCode](http://leetcode.com/2010/04/rotating-array-in-place.html) explanations
* [GeeksForGeeks](http://www.geeksforgeeks.org/array-rotation/) solution approach explanations

================================================
FILE: array_rotate/solutions/keppy.rb
================================================
class StringAutoma

  def self.solve(set, n)
    # set is an array, n is an integer.
    n.times do
      set.unshift(set.pop())
    end
    return set
  end

end


================================================
FILE: array_rotate/solutions/keppy_test.rb
================================================
require 'minitest/autorun'

require_relative './keppy.rb'

class StringAutomaTest < MiniTest::Unit::TestCase
  def test_one_step
    set = [1, 2, 3, 4, 5, 6]
    expected = [6, 1, 2, 3, 4, 5]
    n = 1
    assert_equal(expected, StringAutoma.solve(set,n))
  end

  def test_odd_split
    set = [1, 2, 3, 4, 5, 6, 1, 2, 3]
    expected = [1, 2, 3, 1, 2, 3, 4, 5, 6]
    n = 3
    assert_equal(expected, StringAutoma.solve(set,n))
  end

  def test_over_step
    set = [1, 2, 3]
    expected = [3, 1, 2]
    n = 4
    assert_equal(expected, StringAutoma.solve(set,n))
  end
end


================================================
FILE: array_rotate/solutions/rotate-solution.rb
================================================
def rotate_jump(array, n)
  return array if n == 0 || array.length == 0

  result = []

  (0...array.length).each do |i|
    result[(i + n % array.length) % array.length] = array[i]
  end

  result
end

def rotate_step(array, n)
  return array if n == 0 || array.length == 0

  n.times do
    array = array[0...array.length - 1].unshift(array[-1])
  end

  array
end

require 'test/unit'
class RotateTest < Test::Unit::TestCase

  def test_step()
    rotate_check_helper(method(:rotate_step))
  end

  def test_jump()
    rotate_check_helper(method(:rotate_jump))
  end

  def rotate_check_helper(m)
    assert_equal([], m.call([],1))
    assert_equal([1], m.call([1],1))
    assert_equal([2, 1], m.call([1, 2],1))
    assert_equal([1,2,3], m.call([1, 2, 3],3))
    assert_equal([3, 4, 5, 6, 7, 8, 9, 10, 1, 2], m.call([1,2,3,4,5,6,7,8,9,10],8))
    assert_equal([9,10,1,2,3,4,5,6,7,8], m.call([1,2,3,4,5,6,7,8,9,10],2))
  end
end


================================================
FILE: balanced_delimiter/HINTS.md
================================================
## Things to think about
- How will you keep track of previous delimiters?
- How will you determine if the next character is valid?
- When you reach the end of the string, how do you know if it is balanced?


================================================
FILE: balanced_delimiter/README.md
================================================
For this question, you will parse a string to determine if it contains only
"balanced delimiters."

A balanced delimiter starts with an opening character (`(`, `[`, `{`), ends
with a matching closing character (`)`, `]`, `}` respectively), and has only
other matching delimiters in between. A balanced delimiter may contain any
number of balanced delimiters.

## Examples
The following are examples of balanced delimiter strings:

```
()[]{}
([{}])
([]{})
```

The following are examples of invalid strings:

```
([)]
([]
[])
([})
```

Input is provided as a single string. Your output should be `True` or `False`
according to whether the string is balanced. For example:

Input:
```
([{}])
```
Output:
```
True
```

## Input Format and Restrictions
Each test case will consist of a string only containing the characters
`()[]{}`. The length of the string will not exceed 2KB.


================================================
FILE: balanced_delimiter/SOLUTION.md
================================================
# Balanced Delimiters

## Explanation

This exercise is designed as a use case for a stack structure. The idea is that
characters are processed individually; opening characters go on the stack, and
closing characters check the stack for a match. If we encounter a closing
character that does not match the top of our stack, encounter a closing
character with an empty stack, or have a non-empty stack at the end of the
string, the string is unbalanced.

Here it is in pseudo-code:
    for each character in string:
        if opener:
	    push on stack
	else:
	    previous = pop stack OR False
	    if not (character closes previous):
	        False
    if stack empty:
        True
    else:
        False

Stacks are ideal for this problem, as their FILO (First In, Last Out) behavior
corresponds to the fact that we must match the innermost delimiter first *but*
we must also remember each layer of delimiters in order. In addition, checking
whether the stack is empty allows us to easily handle cases where we have too
many opening or closing delimiters.


================================================
FILE: balanced_delimiter/generator/gen_testcase.rb
================================================
@delims = { '[' => ']', '{' => '}', '(' => ')' }

# Convenience function for picking a random value out of a hash.
def hashrand(h)
	h[h.keys.shuffle[0]]
end

# This generates a valid delimiter string using a Markov chain-like process.
def generate_pairs(max_pairs)
	pairs = 0
	opens = Array.new
	result = String.new

	while pairs < max_pairs
		if rand() < 0.7 || opens.empty?
			opens.push(hashrand(@delims.invert))
			result += opens.last
			pairs += 1
		else
			result += @delims[opens.pop]
		end
	end
	
	# Close any open delimiters
	while closer = @delims[opens.pop]
		result += closer
	end

	return result
end

# This randomly invalidates a delimiter string by introducing one of the
# following errors at a random position:
# 	- Delete a delimiter
# 	- Add a delimiter
# 	- Change a delimiter to a different character
#
# Alternatively, it will delete the last delimiter, so that the otherwise
# unlikely failure state of an unclosed delimiter at the end of the string will
# occur with reasonable frequency.
def make_invalid(str)
	err = rand()
	index = rand(str.length - 2)

	if err < 0.25
		# "Delete"
		return str[0..index] + str[(index + 2)..(str.length - 1)]
	elsif err < 0.50
		# "Add"
		newchar = (@delims.flatten - [str[index]]).shuffle[0]
		return str[0..index] + newchar + str[(index + 1)..(str.length - 1)]
	elsif err < 0.75
		# "Unclosed"
		return str[0..(str.length - 2)]
	else
		# "Change"
		newchar = (@delims.flatten - [str[index]]).shuffle[0]
		return str[0..index] + newchar + str[(index + 2)..(str.length - 1)]
	end
end

# These are my selected inputs for the problem; they are ordered by increasing
# difficulty of n. For each of these, one valid and one invalid string will be
# created for that number of pairs.
selected = [3, 5, 10, 100, 1000, 10000]

@fcount = -1
selected.each_index { |i|
	fmode = File::WRONLY | File::CREAT
	path = "../tests/"

	@fcount += 1
	input = File.new("#{path}input#{sprintf("%02d", @fcount)}.txt", fmode)
	output = File.new("#{path}output#{sprintf("%02d", @fcount)}.txt", fmode)

	input_str = generate_pairs(selected[i])
	input.write(input_str)
	output.write("True")

	@fcount += 1
	input = File.new("#{path}input#{sprintf("%02d", @fcount)}.txt", fmode)
	output = File.new("#{path}output#{sprintf("%02d", @fcount)}.txt", fmode)
	input.write(make_invalid(input_str))
	output.write("False")
}


================================================
FILE: balanced_delimiter/solutions/balanced_delimiter.c
================================================
#include <stdio.h>
#include <stdlib.h>

/* Stack definitions. We'll use char for all our values as it's convenient for
   the question. */
struct Stack {
	struct StackFrame *top;
	unsigned int size;
};
typedef struct Stack Stack_t;

struct StackFrame {
	struct StackFrame *prev;
	char val;
};
typedef struct StackFrame Frame_t;

/* Stack methods. */
void push(Stack_t *s, char v) {
	Frame_t *prev_top;

	prev_top = s->top;
	s->top = (Frame_t*) malloc(sizeof(Frame_t));
	s->top->prev = prev_top;
	s->top->val = v;
	s->size++;
}

char pop(Stack_t *s) {
	char v;
	Frame_t *p;

	v = s->top->val;
	p = s->top->prev;
	free(s->top);
	s->top = p;
	s->size--;
	return v;
}

/* Some convenience functions for checking that delimiters are of the correct
   type for eachother. */
int matches(char opener, char closer) {
	switch(opener) {
		case '(':
			if (closer == ')') return 1;
		case '[':
			if (closer == ']') return 1;
		case '{':
			if (closer == '}') return 1;
		default:
			return 0;
	}
}

int opener(char c) {
	switch(c) {
		case '(':
		case '[':
		case '{':
			return 1;
		default:
			return 0;
	}
}

int main() {
	Stack_t *s = (Stack_t*) malloc(sizeof(Stack_t));
	char delim;

	/* Scan characters until we get to the end of the input. */
	while(scanf("%c", &delim) > 0) {
		if(opener(delim)) {
			push(s, delim);
		} else {
			if(!matches(pop(s), delim)) {
				/* There was an overlapping/wrong delimiter. */
				printf("False");
				return 0;
			}
		}
	}
	
	if(s->size) {
		/* If our stack isn't empty, there were unclosed delimiters. */
		printf("False");
	} else {
		printf("True");
	}

	return 0;
}


================================================
FILE: balanced_delimiter/solutions/balanced_delimiter.js
================================================
var closersToOpeners = {
  ']': '[',
  ')': '(',
  '}': '{'
};

function isCloser(character) {
  return closersToOpeners.hasOwnProperty(character);
}

function isOpener(character) {
  for (var key in closersToOpeners) {
    if (closersToOpeners.hasOwnProperty(key) && closersToOpeners[key] === character) {
      return true;
    }
  }

  return false;
}

function isBalanced(delimiterString) {
  var openerStack = [];

  for (var i = 0; i < delimiterString.length; i++) {
    var currentChar = delimiterString[i];

    if (isOpener(currentChar)) {
      openerStack.push(currentChar);
    } else if (isCloser(currentChar)) {
      var expectedOpener = openerStack.pop();
      if (closersToOpeners[currentChar] !== expectedOpener) {
        return false;
      }
    } else {
      throw "Non-delimiter character in input";
    }
  }

  return openerStack.length === 0;
}

console.log(isBalanced("{}()[]"));
console.log(isBalanced("([)]"));
console.log(isBalanced("([omg)]")); // exception


================================================
FILE: balanced_delimiter/tests/input00.txt
================================================
([()])

================================================
FILE: balanced_delimiter/tests/input01.txt
================================================
([()]

================================================
FILE: balanced_delimiter/tests/input02.txt
================================================
{[{{[]}}]}

================================================
FILE: balanced_delimiter/tests/input03.txt
================================================
{[{{[](}}]}

================================================
FILE: balanced_delimiter/tests/input04.txt
================================================
{(({{[{{{}[]}}]}}))}

================================================
FILE: balanced_delimiter/tests/input05.txt
================================================
{(({{[{{{}]}}]}}))}

================================================
FILE: balanced_delimiter/tests/input06.txt
================================================
({{({}{{{[([[]]{})]}()}({[{([()])}()]({{[([]){{}([]{{}}{}([[]]){{{}[{}[{([][][[]([()(()({([([]{}(())())(({()(((([()[]]())()([[{(({{(){[[[{(([{[()[[]]]}]))}]]]}}}))}]]))))}))])}))])])}]]}})}]}})})})}})

================================================
FILE: balanced_delimiter/tests/input07.txt
================================================
({{({}{{{[([[]]{})]}()}({[{([()])}()]({{[([]){{}([]{{}}{}([[]]){{{}[{}[{([][][[]([()(()({([([]{}(())())(({()((([()[]]())()([[{(({{(){[[[{(([{[()[[]]]}]))}]]]}}}))}]]))))}))])}))])])}]]}})}]}})})})}})

================================================
FILE: balanced_delimiter/tests/input08.txt
================================================
([{[[]()[{(){}}{{[{(([][[]{{({}({}[[{[[][]{}]({}[[{[]{{}{}[([])[((([((([([()(){({}((){})[[][(([[([][[[([[{{()}}[()[]](()){}]]{[[]{(({{(()()[()(){([{}])()[[((([](())({[]{[{}(())[{[{{()[[{{}}]]()[((){()}[]{{(){{}([([{{{}}({([])})}])[{([])}{}{}[[]]{[{}{}()(([]({(({}{{{{({})}[]}({{{()(){[({[][([{[(((({[{}(([][[[()[]]({{{{[{[(([[{({[{{}[][{({()[{}[]][{}[]{}({()})][{[{{()[[(([[[{{[]{([{(())[{{()}[](({(((({{}}[{{()[{({{}({[(([[{}{}]()][{}[[{[]}([[]{([([({})(({{[{([{}(){}{({}{{{{[]}[{({()})(([]{[{[](())([([[(){([{}(([]{[][{[[([[{()[({[{{}}[{([([[[[]{{()}({[{{({{}{[()][[({()()})([[]]{{{[[{[[][(()([[]{}{{}{[]}{}()}]{{[{[(()[])(([])[[]{{}}[(){[{{[[][{[][([{[][((){{}[]}[[{{}()()[{{{}[]((){()}(()[{(((([([[()()]([[({{}}([[][](((([]()[])))[[{{{{[[](({((({([]{{(([({{}((({[][]{(({[[([{}[{}]{{[()((){}([[([{{({})}{[][]}({}()[[]()[([(([]([{}[[]][]{{{([{}{([][[]])(([({}[()[[[{}{[[{}]]()}{{}({})[[]]([][]{[{()([{{}({({(()({}){{([([[[][(){[[{[{{}([()](){}([[{([()]()[[[{{[]({(([](([]))))[]{([{}{[[{[[({((([{{[][][]}[{}[([]){()}[{}()({{({}[[[[[]((){{([{}([[({}){}(({{()}[](){{()(()([]{{((()([([]){{[]}}{[{{[({[]}{{{{[{([][]{}[()]){[{}({{}})]{{{}{{((){{}{(()()[(({{{}[[]{}([([()]{}{(){}({{{(([(){{}{}[([([][([]({{(({[]}))([][[((())[[]{[{{{([(({{(())}}()))[[[]{{[[()[]{}[[()((((()[[][()({([([])[{[](({[][(({[[]{([(){{(({}{(){([{[([{}([{}{({([[[({{{{}()}}[[[{{{[({{{{}{{[[()][{{[{[[][[][]{({{()({}[[([[[[(([]))]]]])]])}})}]]}]}}]]}}}}})]}}}]]]})]]])})}])])]}])}}))}}])}]}))]}))}]])})]]))))]]]]}}]]])}}}]}])]])}}))])])]}]))}}})})])]}}))])}})}}}}}}]}}}})]}}]}])))}}))}}}))]])])}})]]]])}})]]]}])))})]]}]]}])}})}}]]])}]]))}]}]]}]]])])}})})})}])}]})}]]]])]))}])}}}])))])]])}])]]))]}}])]]}))}})))})]))}})})))}))]}}}}]])]))]])])]))))}]))}}]}]])]}])]}]]}}]}]])]}]}}))]]}]]}}})]]}})}}]})}]]])])}]]})]}]])]]}]}))])}]])])}]}))}]}}})}])}]}}))])])}])]]]))]})})}]}}]))))}))}]}])}}}]]]))]]}}]}]})}]}]})}]]))]}]}}}})]]))]}))))]}])]})]}}}})}}))})))]}]])}}})]}}]}]]}}))))]]}])}}))}]})]]])]]))]])}])])))])))]]}}]])}]]))}}]))}]}}]]}])

================================================
FILE: balanced_delimiter/tests/input09.txt
================================================
([{[[]()[{(){}}{{[{(([][[]{{({}({}[[{[[][]{}]({}[[{[]{{}{}[([])[((([((([([()(){({}((){})[[][(([[([][[[([[{{()}}[()[]](()){}]]{[[]{(({{(()()[()(){([{}])()[[((([](())({[]{[{}(())[{[{{()[[{{}}]]()[((){()}[]{{(){{}([([{{{}}({([])})}])[{([])}{}{}[[]]{[{}{}()(([]({(({}{{{{({})}[]}({{{()(){[({[][([{[(((({[{}(([][[[()[]]({{{{[{[(([[{({[{{}[][{({()[{}[]][{}[]{}({()})][{[{{()[[(([[[{{[]{([{(())[{{()}[](({(((({{}}[{{()[{({{}({[(([[{}{}]()][{}[[{[]}([[]{([([({})(({{[{([{}(){}{({}{{{{[]}[{({()})(([]{[{[](())([([[(){([{}(([]{[][{[[([[{()[({[{{}}[{([([[[[]{{()}({[{{({{}{[()][[({()()})([[]]{{{[[{[[][(()([[]{}{{}{[]}{}()}]{{[{[(()[])(([])[[]{{}}[(){[{{[[][{[][([{[][((){{}[]}[[{{}()()[{{{}[]((){()}(()[{(((([([[()()]([[({{}}([[][](((([]()[])))[[{{{{[[](({((({([]{{(([({{}((({[][]{(({[[([{}[{}]{{[()((){}([[([{{({})}{[][]}({}()[[]()[([(([]([{}[[]][]{{{([{}{([][[]])(([({}[()[[[{}{[[{}]]()}{{}({})[[]]([][]{[{()([{{}({({(()({}){{([([[[][(){[[{[{{}([()](){}([[{([()]()[[[{{[]({(([](([]))))[]{([{}{[[{[[({((([{{[][][]}[{}[([]){()}[{}()({{({}[[[[[]((){{([{}([[({}){}(({{()}[](){{()(()([]{{((()([([]){{[]}}{[{{[({[]}{{{{[{([][]{}[()]){[{}({{}})]{{{}{{((){{}{(()()[(({{{}[[]{}([([()]{}{(){}({{{(([(){{}{}[([([][([]({{(({[]}))([][[((())[[]{[{{{([(({{(())}}{()))[[[]{{[[()[]{}[[()((((()[[][()({([([])[{[](({[][(({[[]{([(){{(({}{(){([{[([{}([{}{({([[[({{{{}()}}[[[{{{[({{{{}{{[[()][{{[{[[][[][]{({{()({}[[([[[[(([]))]]]])]])}})}]]}]}}]]}}}}})]}}}]]]})]]])})}])])]}])}}))}}])}]}))]}))}]])})]]))))]]]]}}]]])}}}]}])]])}}))])])]}]))}}})})])]}}))])}})}}}}}}]}}}})]}}]}])))}}))}}}))]])])}})]]]])}})]]]}])))})]]}]]}])}})}}]]])}]]))}]}]]}]]])])}})})})}])}]})}]]]])]))}])}}}])))])]])}])]]))]}}])]]}))}})))})]))}})})))}))]}}}}]])]))]])])]))))}]))}}]}]])]}])]}]]}}]}]])]}]}}))]]}]]}}})]]}})}}]})}]]])])}]]})]}]])]]}]}))])}]])])}]}))}]}}})}])}]}}))])])}])]]]))]})})}]}}]))))}))}]}])}}}]]]))]]}}]}]})}]}]})}]]))]}]}}}})]]))]}))))]}])]})]}}}})}}))})))]}]])}}})]}}]}]]}}))))]]}])}}))}]})]]])]]))]])}])])))])))]]}}]])}]]))}}]))}]}}]]}])

================================================
FILE: balanced_delimiter/tests/input10.txt
================================================
()[]((){[{({((){{}(([])){()}}[][][[[(({[][[]{{}}]}[])[{}{}][]((()(()()({[]}()()){[[[]{[{[]{[[({}(([[]][()[[{[]({[]})[]}(()){[][[{}{(){}({}){[{[{}(()[[({{{({}[({{}[({((({[][][]()(){}{[[()[][[]()([{}()][{({{(()()[{}]{}[][][]{[(){{}[]{[]}[[[]{{[]{}([[]([[]{}][{{}()()(){}[{}{{[]}[]([])}{({({[[[[]][](){[{}][{()([{(){}}[]{[]}[(([[](){[{{{[]{[({[[{{{}{}}}]](){{}}(())}[[()[({}[([]){[]{{()}}{[[{[{((([])){{[{[{[][]}(())({(())[([[({({}{[]}()[[[({(){[{{{()}}[({{[]()((){}()({}()[[][{(){{}{}}{}([{}]{{()([[]](({}([[[]](){}(){[]}{({[{[{{}}[][]{}{[{}[(([[{}({{{[({()[]{}[[{{[]{{([((({{({[([]){}][]{([])[]{{{}}{()(({()[({{[[]]}}{}()([{[[][({}({()({[([[][[([]{}((([])[(){{}[{}[({()}{}[{}[{[{[][[[]{}{()()}]({{(())}})]}[[{{[([]())[]{}[][[()([{([][[{}]{({}()([{[(){}[]]}({([]{({}[])[[()]([][{{{}}{[]({({[]{}{((({}(){({}{[{}]{([]{{([[{(({[[([{}(({[]}()){()}[(([(({()[](){{[][()()()[](){}]}}})[(){}]{([])({[({([(){{}[({}[([[{}]{}({})[{()[[(())(()({}{[]}({({[]}{{}{(({[]}[]([]{}[(({[[()[[](){{}((){({})}[[{([{}[][{[]}[]{()(())({[[]]{{[]{(){}[{(){[(({})([[[][[{{[[()][][(){([{}[[]][[{}{[][]}([({{[{{([{()[][{{[][]{}[][[[([{}[][[]()]])[][()][()]]]]}}]()([[([()[{}[]()({[[[()]{([{}{({{(){}{({})}((({(){{()}([])}[{([{[({[[]]}[{{{[({[([][(({()(({}()[][{{[{{{(([[]]))[{{}[({([{(({({({((([[[]]([]){(({}[]{{()([[(){}([{({}{[]({([{{({}){([()]([]([]{([[(){()()[]}{()}{{[(((((()[]){{{([[](({}){[{}([[{[[[{{{[(){(){()}[()[[{({(){{}[[()()[](()[][{{{}[(((([({[[]([](){{}[]}([[()]{}[()]{({}[{{{}{(())}{[{[()][]{}({{}{{{}}[][[{}{[{}((){}()[[[{([{[([])({()[{()[{}{([(){(({{}{([({}[[{[](([{[[[{}]]({([{[((){}[][()])][(){[(({[([]()[([{()[[]([{}()]()[{([{}]{}())}]{([][({(){}[]()}(([()[([[[((){([]{[([]{[[[]([[]{}[{(({{}(())}){[]{{[[{[[([[[]]{}({([{(((([])([]((([][((([]()({([]{[{{{()}}[[[]()]([[]()]{[{[]{}([[[{()[{{}({}{()[(([]({[]}){(){}}){()({({({{[[(){{(({}()()){}){()[{[[[([]()()[[]{[[[{}]([{[[[{{()}[]}{((({[]}{}{(){{{(({([({})()[{[{((([](([][({{({}{[()][]({{{{}{{{{}[][]}}[([]{(()((([[[([[{}{{}}]]){{[][[{()}[][{{{{}{()[[(({}{}({([[][](){[]}[{{([([]){(()())}]{{{{[{[]{}{[{[]{([][{{[][({{{[{()(([[()[{[[](()[[{}[({{[{{({[]{(([](([{[[()]](()()){}}[[{{(()){}[[[([[[][{[()][[{}[[([]{}({(([[{[[]]}((()({()})[])){(){(()({[][{}]}{({[]({[({[[[{[((){{[([{{}}])]}})[(()[[()]((){[()({})[]](([({[{[[]](([{}{}()]([(()[[]][])([])[{[]([])}]()([[([][{()[]}[{[][([])()([()][({}(){}[]{})([()[{{{[[][{}([[]()[(({({[([[[((()({(((){[]}[]([[{[{[{({{}}[](){})}((([]))[{{[()[()[{}[{}][]([{[[()]]}([[]{}(){[{[((){}()()[]{()([]({[([]()[[]([]()[{{[()()[([{{[](())({[[]{{[[]{[[[[[([[]()[[[((){[][({{[[[[[][[()][({()(){{{}[[]()[(()({[[{[{}]}{}{{{{}}[{}][{{[([{{}{{}({[()]()[]{}{()}}{[{[{([][(({()}[[]{}[([{}[]({[(){}{{(([{[[[[[[[()[{}]]({([{}[]{[]}{}[]()[{[[({[]{{}}}()())({})[]()]{{}([([()]){(()[{}][()]({[](){[](((){({({}{[[()[]{}]{}[()[([[({{}[(){}([][[]]){[()[{}{{(([[]{{}(([{{[][{}]}{}({[]}[{}])}{[]{(){[()[](([{}{{({[{}{()({[(([{(((([]){{}()()([{}{}[{}][([])(){{{{{}()}({()[[()]{([([[[[]({}[{{({}{[]}{}({({([[]]{{[](()[[]]({}()({[({{[({[]{((){{(({[{{[()[[]{({({(({}){([(){()}{[[(){}{()}([{}{{}}{}{{[[{{}({{[]({}{}())}{(([[()[{({}[])(({[{((({}[[]]((())[]()[[]][{{}{[]{{}{}}{(([(){{[[]{(){[{}(())[[[[[{({}())[[]()(({([((()[({}{{}})(){[[](){}]{[]}[()]}([])([{{({}[]{[]}[{}{(({[[[][[{{{(({}{({()({{[]{{}}{({[((()[{}({})[]()([[]{([{(([([])((([{()((){{}[()(){{{[()]{{()[[([((){{[[[]]]}}{{{{{}{[((()([[{(){{}([][[{}{{}()()({(){([{{}({{}({{((([[]((()){}([])){[()[]{[{}{[{{{}{}}[({(){}([{{[]}[{}]}{{{{(({({[[[][{()}]({}[](){{}}({}{}({{()}}[[[[]([]{[()]()[(){}](({[][{{{[{}{}{{({([[{}({[{{{({})}}[(({{[]}(({()(({({[{{}{(({{{{{(({{[(([{}()][()]([{}[[(({{[]({({{{{(([]({}[[]({{}}[([({{[{[[([]{[][][[([[][]{}[{}]{[]{}[[{[[[[]]]{}[]()([((({()[]{}{{[[([][[[][{}]{{}(())[()[(({{{{{[]{}}}[{{}}[{[{}](){[][{[{}]}[[]][[{{{{}}[]}}((){[]})]]]{((([[{}{{()}}]]((([])[]({{}[{}[]((){[[{([{{}{}[[([{(({{{{{}}}{(()[[[{{{{{[]}{{({([({(())(()[]([{}([(([{()([{(){[]{}}}[{[[[[[[[((([([{[]{{}(())}[[()]{[]{({(({()[][{}][]}[{}(){()(({({{}[({{[][]}{}}{{}(([({({})[([[[]([[][{[([{{[][(((([[[({}{{[](([]){()[[{}[[[{}({}[[]]{([{}][[]({()[()]}){[{([]){}{[((()(([[]][{}[([]{([()[{[]}{}]{[]}]{{{{[()[{[([]{})][[]]}]((()[])())(({({(({([[[{(()([])({((({}([{[[{{}([]{[[((()[([()][[]{[{{}{{}{[({{{{}}[(([{[({}{})[({[[][[]([[]]{})([[]])[{}[]{}[]([(){(){}{(([{{}([{}(){[]([[(){({}()[]((())(({[{{[{}(([[][{}[[[]()]([([[[][{([{(){()()[]{([(((([[{}{}()[[{}{[{(){([][[[(({})[]{([(()[])[([[{()(({}[{({[[[({[{}([][([{{}([]){([]())}((){[]}([(()[(([])())(({}[]{(([()[[]]])){[[()[{}[]{}()][{(([]([({}){{{}((){}[{{[]{([])(([{[()(({((([[](()[]([({}{([({[]{()[]}()([()[]]([(())()[{}][]{(({({[[[{}{({[]}([(([{(({{{}}[{([[{}]]{{}[]()()[[]{}[()[[]][{[{[[[({()({{{[()({}[]{()(({[[{[[[({(([{{{{[[]]}([{(((()({}((((()({[]{}[]{[{{{{([][]{([])}){((){[[{}]]}[]){}[(({{{[{()([])(({}([])({[[](){{()[][[{[()[({({[({}{[][({[{}]}{{{(((()[[[]]({})[{{{()()}[[[]]{([[[{}()]{[[[]{}]]}([(())])]()()[([[[({{{}}}[{{([[({[][(([[]]))]{{}}{{}[({})]({})}}([]{((){()[{}([{{[[{{([[]{([[[{(){}()([]{[]{}[]({{}[]}[()]{})}{[{()(){}[][{}[(){[([({[]}[[(){}](({}({[][(({{({})}((())({[[[][{{[[[([[{[{()()()[[][[[{{[{[{{[[(())()({[]{[][[{[]()[[(({{()[]}[][]{(({({}){[]{{{()[{[{{{}}{((((){[({}{{({([])[]}[]({[{([[(){(){[[[{[{{[][[[(({((()){()([()][{(){(([[][][({[{[]({}{[]{{{{((()))[[]]}[[(){[{{[((((()([][(((()){}[(([]({{{{(())}}{}{{}}(([([([{[{}[{(()[{[]}])({[[[{{{}}}]{([])}]{[]{([][]{})[(({[]{}[{}{}[{}[[][[{(){(({[({{}({({()})[[[]]()[({})]]}{[[([(())(({{[{(){}(()[])}{}[[{}[{}[[]()[][]]{}{}](){[(({[()([{{}}{}[{{([((({{(){()([]{[(){[][[({(){}([]([([]){[{(({}({[()]()[[[{}[((([{[{}([{({()[[()((){({({}[{{[](){}[{[({{([[[[]](){}[][{[([]{[{}({[]{({[{}[](()[[({[][([[()]]{([{(((){{([[[[{({{}{}[{}{[([{()[{{{}{()}[[](){}(((){[([[]])({()[()]{}([{({}{}){([]([]))[[{(())[[({}[{()}()({}[[](()[[{([])(())([{(())[]({([{[()(([{}{}[]]([]{})){{[]{([((){}{[][[[({}[])({}({[{}{[[][(([{{[(()[])([(([({{{{{}[]}(()([{{{([{}{([][{}[[][]{([({{{[[{{[([(()())[(){(){()}[[[{}{{({[[](){[()[{[[([[{}[([[][]](){}[{}]){()}]]]{{}{}}())[][()[{{{{(({({{[{}[]][]}[]}[([][{({{(())}})(()()((()({[]}){(([[{[[({{[]({}{(({{()(([]))([([])((()[[]({}()){}[]{(){}()[{([([[({{([{}({[[([{}(())][]){()((({[([]()[])]({})[][]{}}({{}({[[[{[]{([[]][{()(({{}})[[([[]]{({{{([{[[(([{{({}{(())}([[{[[{([]({[((){[([((({[[]()(([[{[]}][{([{}])}[[][{{[]{(())(([{}((([((([{([][({}{[[]({}){}{[][([[{}{}(){{}{}[[]{([{{[{}[]()]}[]([][])}]){}((([{[[{}{}]([{([{{({}{{(){{(){[(((){}){([()({[[([[(({[[{{}}({[[([{{}}][][[]()({}([{{}{}{}[{}[{([([[[{[]({[{{{}}[[()[{{}()[{{}{(({}(({[[()]{{}([[[]]])}{[[({{{{[()]([]{[[({([{[[[]{[{}([{(({((){(()(){[]}([{({({([])[{({{}})[([][[]([][][({([{({})}([{()(())}()](())[[](({}((()()[])))()[{[[(((({(({}[([[]{()}{[{({{}{}(){}()}([]{{{}}([()])()}))()[]}([{}])]([{([([[[]]]){[[]]{}()}{[][{{[[{()()({()((){}{})}{}[{{{{[({{}(){{{[()]({{{{([]{}[{{}{[()[{{(([(())[[{}{(([[]{}]{{}{}(({(({[]{()([]{}[[[]][[([({{[{{{(({{}({[([[[((({}[[]])))()[()(){[(){{}[{[{({{}{[]}[{}]})()()[{[[]]}(()[{[({[(){[][{}][]({})({({()[(({})[[[({{[([[]]{[({}{{[[({{{()}{()[][[{(()()([(()({}([])[(([[{{{([](){()(()[({}())([][{[()[]({{{}{}[({[{{{{}()}[[{[[][][][()[(){([{[({{[[({()[]}){}(()){[][(()(()([][{{}[([{}]{([]({{}[]()}){{}[]}[(){[{{}}[((([])[])){{{[{(([{[[{{()}}]][{}([][()[{{[([[[{}]([([]{[{((())[]{}[{(){[(){}[{[]([][[{[[]][{(()){[[[]][]()]}[({[[{{}[[[([({{[[[{()}]]{}]{()((({{}([][]{{[({{}}){{{[(()[]){[{[{}{{[{()[[{(){[]{()[[()[{({([([[[{(){}}]{}]{{}[[([])([{([[([{{}{}{[(){(({{[][[(([][({({{(())[(({}[[{{}}(([{{{{[][[[({{{{({{[[({[(())[{((()[]({}{(({{}[]([{}()([({}[()()]([{}[]{[[({[{}[[{[[{(){{{([[][()]{}{}])}(({}({}([])[{[](([][([])[]{}{}((()({[{[]{[({[({({(([][])([]{}{[({[[]{{}([{[(){([[][({{}([(([(){}{[[][[[[{([[]]({({{((())()[([{}[{[{[][][()()([]{[([{[[[[[][{}[]]{[[][{[[{{}({}()())}[]{}([((({(([][(){()[[[[[{}[({})(){{}(((({((([[][]([{}({})(()[{{[]}}][()()]{[{{()([]){{}[{[]}[][[{(())([])}[{([][])}(())([[]{}[][{[{(({}((){[[(({[(){[[{{(){[{[][][{(({[[{[({[()[{{(([[]]({}([]{}((){({}[]([[]]({([{}[(){{([()[]{[[[]]]}][[{}{{[()({()((()){}{{([])(([{{[{({([(([()]{{(()()[](()))[{{[]({}[])(){[]}{({{}})}[][([[{()()[{[{}{(){()[({}{{}}{[]({([[({()({([{([[({}{(()(([][()[]]([([(){(((){}[(({}{[[{}((()){[]{}{[]}[{}[{}{([{}({})])}[{(({}({[]}[[((){(([]){([(({{}}[({[({[([{}({()()}())[[{([{}[{(())}][(((){[{}[]((()[]))(){()([]{()}()(([][]{[(((([{((([[{}]][{(()()){}{{[[[]({{{{({}{((){})[{{(([[[{[]}{(){{([])([((((([[{}(({[{()[{{[{}{([{}(({({{({}())[{({}(()())[{{}([(((){[[{{}()}(({}))]{{{(()[{}[[][{}]{}]()[((()[[](()({()[[[][][]{{}{[({(([][[(([{[{}[[([{{({}[{[{[({(([])(([])){((()[{[](){{([]({}[[[{}]([[[[[()][[{}](((({()[{}]()}()[]{[(({[{}]})({}(){[({({(){([][[({[][()(([])(){}{([{({})}])([(()[(){[]{}{}}])[{(({()([(){}]({(([]{()(([{{({})}[{[[()[]([[]]{[[{[{{}[][({()})()]{(([[[][([[{[()[[(){[{}{}(({{}[()]}[[((([]{(())}(({[]{}}())(()))[]{(([[{{[]}[]([((([[[][][{}()][]{[]{[]}[{{}()}{}]}]][](((()[{()}{{[]([[{({[]{({(){}}{{[{[{{((()()[(()){}{[]}({{}(){}}((([]()){[]{{}([](([]([])[()]([(({({[]{({[{{}[[[([{(){[]}{[({[(({({({[((()[()(({({()()}{(({{}}[{}({{[{([])}]}(){(()[((((){[(){[[([[]][(())]{[](([([]{{{[[{(()({{({[([()]){{[(){}{}([][(([]{{[[([[{{([({[[()]({}{(()(([[(){{}({[]({()}{(({})[]{}({}{}()()[((()){{(()){}{{[{[]{}}([]([[(())(((){{[{[({}{([][(({({{}})}({{{{{([][]([{(([{{{((){({})[()()(([({[(([({[][[]{[(()){({[{}][[]][]{}[{[]}()(){}[{{(()){[([{{}}({[]()()[]{{}({})[({[][]}[()])[([({{[([({})()(){{{{}{{}{({}()([(({(){}})[{}[]([{{}}[([][{{[]}()[(([({{{({[(){({()}){}}{}({{([[]{{[{()()}(){[{(([]){[{}{(){{}{((()[[([][[][]][{{}[[[([])()[({(({((())[]{}{()()}[(([[{{}{{[{({[([{{[]{{(){[{}{()({{(([([([[{}(()())[[{{()()[()((()(){[[{[(){{({[[{}]]}{[{{}}][]([[][{}({(((([][]({}[]({{[{}{}]{()([]){}(([[]({}{[][][][{(({}()[[]]){})()()([]{[{[{}[()]{}]([[]()[][[[(((){}{{{[{}([[][({[{}[{}()[{[]([[[{{{[](({[[{([{}({({(){[]}({[]([[](()(){[[[]()([[([][]([][][])([[[]({}{()})([[{({([([[]{[]{([(([[]])){[{(((()))([]{{{}({{{}}})[]}[{[]}]}([({{[][](())[([{{{{(([{(({}({(){}({[{{{[]{[[]](){[{(){{}}{}[{[](({[]})[[{{[{([{[[]](([][({[([()][{{}{((([{[{[[[()({{[{[(({()[[[{[{({[([({(([]))[()[][]]})[[](()(({[[([[[({(([(([{[({()[(((){[({}[[{[(([[{[[({[([]){[({})[[()[()]]{({({}{}{}{(({{[][]()([[[[]{}]([{(([[(()[({()()[{(()({[[]()]()})((){[[[{{[[](([[()(([])){(){[]([{{[]{(({([]()[](()[{}[][]])()()){(){([{{{()[][()]}[(([[]([([])[]([{}[()]])]{[{}{[]()[({}){{}()()()[[]{()[]{(){({[[]()]})}}}({([{{([[]{}]{}{[()[({()[()[({{{{{}}[[[]]{()}({}([][()()]{{[(()[[({[({}){}()]}{}[{{}}[]]{({()({{((){}({({({(([([[(({[[]][]{[]{{}}}{}[[{}{[{{}[[[][{({}[](([(()[[()([])]{(){{{}({}[[(){([[]]((([{(())()({[{}[]](([{[(([{[{{[{{{{()}([(){([[{([[([()]{}{}{([]{{((){{[{}[][([{{}}{[]}{([]){}}(){[[]{}[]][]}(())({(){{}({}((()([{{}[[](({(()[]{[[()]{{{}}}{([({[{[{(){[][{}(({}{{{}{}{}{[[]([][{{{[(){{[[{{()}[]}[]]([([]{})][()[((([[{(({[{([{([]{[[]][([[{}]][([]){[[{}({(){}{[{{(({({([((){[((([]{{()[{}{[]{{({{}(([[]][({({})({{}}(({([([]({{[[{()}]{}{[([]{[[([{((()))[{([{[([{[(()[([{{}}[][()(([{[(){{([()(){{([({}){{}{([])}{}([[]{}][[{[]}[({}{(([{[[({{}}{{([]({({[]{()([({{}})([])({}){[]({{[({([]())({((([[([[[]((([[{[{}][({}()){({{[(){{[(([]{([{[()(()({})((){[{}]})([(()){([{{[]{({}{[([()[][{[[]{}()]({[{{{{{{}[{{}[((){})[][{}()([][[[[[[]{[[[[({{{}(){([]({}((){{{(({}()(([]({{{[]()[]{[[]{[][[{(){{}}}({}(([[][[[[]{}[[{()(){}[{}]()}]]]{}]]{[({(()[({})(){}{}]()({[[[[{}()(){[{[[[[]{}[[{}(({()[]({}){()(())(([][[][]{{{}[][{}]{}}()(){[({}[])[[{{{}{[[()((({(){}}{})[((){{}()[((({}{(){{({[]}()){[][[[[[{}[()][{([{([{}[{[][]{{}({()(([{[()]{}}[]()[{{()}()}(){[{}({{([()([](){}()(()[]{}{}()[])[])][](([]({[[{}]][((({})[{{}}(()[{{}{()}[()([{}][])[([])[[{[{}{}[]]{}}]]]]}](())([()((){(({}{}{[][[()]]}[{}()])(([]{()}{()[]}{{}([({}{})([]{}[(((({{[][({}[(()[[]]({{[[]([{}([])]{[]{[]}[]{}})][()]({[]}[][[{}]((({})[()[((){{}}{[{()}{[[(([{{}}[(()[]{()([{(){{[[][{([{}{{(){{([{[{}]}[([[(((({}([(([]{([][{([[{({{[[]{{}(([[]]{{{}([{[[]({}({}{{[]([]([[([{{(())[{[]}]{{[[]]}[([])]([{([][]{}[([{}]){[]{(()())[[({}[](){})[[{{{}{}[]{}{}{}[[]][{}(({([[{(([(()([]))({[[{}{{{}{({({}{})[]([{()[[[({})[({[()[](({}){{}[{[[{()[(){(())[[()][(([][][{[([{}])]}{({{}{([(({}[[({})][]{[[[{}]()][{}[][({{{{(){({})[({}[{{}}]{[]})({{}[[({{}{[{[({}{}{{{}}[{}](()[{}]([(){[{}({}[{({([()([]({[{[([[][{{(){(){()()}()[](([]((((){([[[{{()([({()}[{{()}}{{[[][]{()()}]}({[()({}[{}{[(()[{}(((([{{([{}]{}[][{}{}((()[]))[[{()}[()(({()((()))([][{{}([[]]{{}})}])((([{([([{}[{([[]{[{[()[]{}[(([[[]{}]{[({}()[]())][]}{}[]{()[]{[({[()][]})][[()]][()[[{}[[]{{}[[[][{([{[()()({}[]{[[]{}[({}(({}))[()()][[()[]{}[]{[[{[([])]({(){}(({}()){[{(()({[]}{}))(())}]({}())({([[{[]{{[(({()(()([{{{}}[]{{{}{}}}[][[][()()][(){[{[]{(())[()](([[()()()]([(){}{({[([[][][[{(((){{[]{[][((()[[((()(([((()()))[{}][{{}([{[[]][]}{[[{{{}[([]){(){[][{(({{()[](){([[(([{{}(){{()[][{(){[][(){[]({}({((){{[]{}({[]}[]({([[]({}{[[{}]]{[]{}[][(((([[]{}][]){{{}}}[{{()}[[[(({([]{}{(({((()([])[]([])[[([[]()]({{}{{{}[{}()[]{[]({([{({}({})){}{{}}{}({{(){}({[({(){{[{()[][()]{}({}())({{}[[{[{}]}{}({()}[({}[][((({{}(){()}{([{}](()([{{{{{{{}([])()}{([{{{(){[{({}){{({{{{}{}()[{[]()}{}{[{[]()}]{([]{(([])){}[[]{}([[({[([{}]({()(){}}[[[(){(){}}()][{[[[([](((({[][{}[](()){}({}){}{}{{{[]{{{[(()[[[(({[][][([()(({{}}()[{{}[{[[]][]}(){[][[{}(([]()([({}()[{([]{[([])[()[]{[[]()()]{[]{()([{[][][]}((([(){{(){({([[{[][{{({{{()[(([([{{()}[{}({}[({[]}{((({{([[]{{}{[[{}()[]]]}{{}}[[]{}(({[()[[][]({{([{[[[[{}([{{[]({{[(){[](([](([()(){}({{(({}))[][]}{{{[]([{}[]])}(()[]()[][{{{{([(({})[{{{[()[([([]{{[{{()}[]}{()([{[()]}[]][({}()(()))][[[[[(({({{{[(){{[(){}[([{{}[[()]]((({{}[]}{(){}()[({(){{}}}[{[](({([]{}[({}{})([[][[[([]{}{()(({}[[]]())){}}{[()[][({}[{({{([[()(([])()([]))[({}{})(({[{}{{({((())){([{([(())[[[(){[]}[({({({{[{}([([(({{}[(){()}[[(((()()([][()(({{[(({[]{{{[][][[{{}([[{{(){({{}{}([]({[{[]}[]({[{}(())]})[()]][((([[]{{}}(){}]([()()])[[]{}][[]]{{()}{}{({{}})}[[[]{{}([()]((({})(){{}}()[]){}){()}[()({()}{{({([[[()[{{()[{[][[[{([[{[[[{}({(({{(()[{[]{{{{(){(){[{{({((()[[[([[({[]}())]{{}{}(()[((({[[{{({()}{[[[[[{}](()){{}()([[{}{}{{((()[]{()})[][[[[{(){[([((){{}()({({[{{[()[]()[][[[]]][[[]{{([])[()[(){[[({{[((){()[]([()(){[][]}([][[(())]]()){{}[([[(()(([[]([]([(({[][(()[({}(()())[{([])}[]{}{[[]{(){({[{([][[()]{[{({[]{([[{{([{}[({[]}{{[][(){[[{}[(({{{{}(([{}][[]([]{{}[[{([[][]({([]{{[{}{[{{}([(([]{}{([{(()({{([])}}{(()({[[((([]((([{([]{{[[{([]())([]())}({}[[[()[{{[[][[[][{()}[]{}{[{{[[]][{{()}{[[[]]]}}({({{()}})[{()}][(([{}]))][]()})()]{()({[]}){}({[[{}][[()[](){}][[][{[[[[]([[{()[]}[[{}({[({()()})]})]]]])]]]}]]]]})}}}]}]]]]}}]]]])]]}})}]))))))]]}))}))}])}))])}]}]}})})])}]]})]))}}}))]]]}]}})]])}}]])}})}]}])}]})}}]}])])]}))]))])))]])]}])})]}})]]}]]}}]]]}}]})})})])]}}]]]])}}]])}]]]]})}}]]})))])}])]]]))})}}]}}}}}}}])}}))})]]]}]])}]]]}]}}]]]])})}})])}]]})))]}))})}}}]])}]]}}}}))]}}))]))))]]]}))])])]}})})})]]]]])}])}})}}]}))]]])}})}])]]})]]]])])}))}])]})))}])]]}}]}}})}))]]]]])}]}})])]]}}}])])}}}}])}}})]))))}]}})}}])]]]]}])}})]]}))]}])}})))})])]}])]))]}}})}}]}]])})}}}])))])}}}]]})}])])))]]}]}]))])]}))]]])]}}}}}}]})))))]]]}]]]))]})]])]})}}]}}})}}}]}}}}])}}}}}}])))}})))])])]]})}]}}})]})}})}])})}]}}}))]]))}))})}))]]]}])))]}})])}))}})}))}]}}]}}}]))]])}}}))}]}}]}}]]}])}]]))))]]))]}}}))}]]])]})}])]))}}]}]]}]))}))]}}}]])})})})}]]}]])]]})]}])}]]]}]]]]}}]))]]}]}])}]])])}])))}))]]]])}}]))))])]}])]})}])])}}]]])})))))}}}]])]}]}))])})}])]}]))})]}]}})]]})]}}}}})]]]}]))])}})}]))]]}]}]]}]})]})]]]]}])})}}}]]})]))}]])}))]}}]]]]}}])}])}}}])]]))}}))]}])}}))}]}})}]])}])}))])))))]])]])}}}}])}]]}}}])})]]))]]}]})]]))])}}))])]}}))))])])})))})]))]))]}))))}})]}]]))})}}]])}])}]]]]]]}}}})))]})]))]]}}}]]]}}]))}}))]]]]]}]}]]]]}))})]}])))]]}]}}}})))))}}})))}}})]]]]}]]]]])]]}]}}}}}]})}]])]})}}}])}]))]}])}))]}}]}})}]}]])))]])]])))})})]}})}])}})}))}})]]}]))})]]])}])}}])}}]}]))]])])]}])]}])}]}])]]})]}]}}))])})))})]))})}}}]}})))]})])})}))}}]}})]]}])]})}])}]}))}]])))]])]}}]}}}])]}}}))]}}]}]})])}]})}))]}]))))}})])]]}})}})})]])}]])}])}}}]}}]}]))]}]))})}]))))}]])}}}])])))}]]]}]}]]}))]])]))})})}))}})})})]])]}}))]}}})]]})]]})}}])})]}]}]})]))]}}])}}}))}}}])}}]]))]}}]]]}))}]})])]]))}])]])}}))})})}]]}]})]]}]]))]}]])]}))]})]}]))]))})]]])]]})))]])]})}]}]]]}))]}]}})]]]}]}])))}}])]})]))}])}]}}]])}]}]}}}}}]})})))}]))}}}}])]}})])))}]}])}}])])})}]])]]))]])]]})])})})})])}]]}))}}}]]])}]]]})]])]}}}))]]]])}]})}]})]))}}}))))))})]])})}}]}]]}))]}}]]]])])]))}})}]}}}}}])]})}]}}}]]))])}))})]]]]}])]]))}}}]})}]}]}}])}})]})}}})]))]}])]])])]))}}}}}])]}})])]]}})])]}}}]]})}]}]})]))]})]))]})}}}]))}]))}}}}})))])})]}]}}))]]))]}}}})]))})})}]])))})]})])}}]])]]}}))])]}}]})}}))}]]}}})]))})]]}]})))])}})]))})}))]))]})})}))]})]}}])]]]}]})}})}))]))))}})))]))}}]}]}})}})}]])}}]))))))])}]]))})))]]))]}]]]}]])]]]))}}]}]]})]]}]}]))}))}))}))}]])})]})]])}})})]}))]}))))]]]]])]]))}}}]))})})]}]}])}}])]]]}]))]]))})]}}]]}))]))]])}}}]}))])}])}]}})}))])}]}}]}]}))]])))))])}}}]]]))}}]})}}}})]]}}}])))}]))))]})))}]}))]])}]]])]})]})]))])})})]])))}]]]})]]}))]))}])]))))})]])}])})})]])})})]}}]}]}]])]}}]}}))])})}]}}]))}})})]}}]])}}]])})))})))))}}]]})]}]]}))}]}]}}}]]}]}))]]})))}]}]])]]]]}}}]})])])))}))))}]]]]]]}]))})))])]]}]]}]]]]}])]})]}]}]])])}})}))}]]]]]}]))])})]])}]}])}]})]}))})})]})]}}]})))]))}])))}}}]]}]]]})]]}]))])])}))})))}]]})]]}})}}}})]]]}}}}]))]]))]}})})]))]]}}))}]}}])]])}])]]}])])})}]]]}}}]]}]}}]}]}]}}}]}})})))}}})])]]]}]]})]}]}]])}]]}}])}]})])]])]}}]])]}]))}]}}}]]}])})]}])))]}]]}})]}])}]]]}]]}}]})]}})]}])])})}}}]]))]))]))}]]}}})]]}})]})]}})]]])]})})}]})]}])]}]}]}]}]]]])]})}))}}}]}})])]]])}}))}))}))}]]]))}}]]}}])}}}})}}}})]}}}}])}]]}}]}])}])}])]))}))))]]}])])])})])])]}]})})}]))})}))}])]}]]}])})]]})}}}})]]}]}))))}}]}]]]}]})}]]])])}]]}]))])]]})]]}))]])]]})])})]}}}}})}}])}])]}])))}]}]])]}]})])}])))])))]))}}}]]]]))]})))])]})]}))}]]}]]))}}]))]]}])}}})})]])}])}}]]]})}))))}]]})])}})]])])}]}]))])}}))})}})]]}]]))})))}])])}))}}}}]]]]}]]}]})}}]]]}]])]}}]]}}})])}]])}])}}}]))}}})]))])]}}]))]]}]}))]]]})])}}})]}])})}])}]])])])]]}]]}}])})]}))]}}]}])]}]})}]]]])}}))}])})]})]])]})}})]})]}]]])}})]}]}}])})})]]})}])]}])))]]]]})))}]}]))})]]}]})}}})))])}}]])]}))]}]]]}}))])]]})})]}))}}]]]]]}))]}}]})}]]}])])]))}})))]))])))))]}}]}]]}}}})}]})]]))}}])})}))]]]}}]}]]]}}]])}]}))}})]})))}}]}]}}}}}))}}))]]}]]}})]]}}]}]}}]]]]}]}]])]]]}}]]]}))}))]})))])])]}]]}]})}]]])}])}}]]}}])]})}))]])}}])]]])]])}]}}]])))}}})]})]})})]]}]]}}]})))}]}}}))]}}}}}]}})))))))))}])}}}]))})]]]}]]}))})]}}})})]]]}]}]]]})}]}))}]))]))}]]]})}))}]))})])})]))])))}))]}]))}}}])}}])))}]]]}}))])]))}])])]})]]]})}]))}]])]])})]]])}}]}]]]]))))])}}}])}]]])])]]]))]}}]}))))}]])}])}]))}}])]]]})]]}]))]}})]}}}]}])]))]]})}]]}]))))}))}]]])}))})}))]}}}})})]]))))]}}]}])})]]]]]})}})]]]))))]}}])]}]])]])]})]))})]})}))}]))})}}]}])])))]]]]]]]}]])}]))])]))})])})}}}}}}]]])}}}))}])]]}])}]]})]}))))))}}}]]}}}))]]}]])]]}}})))])]}]]}])]]})]]}]}})])])])))}}}})})}}))]]])))]}}))}}}}}))}}]})}))}))}))]}]})]])})}}]}}}]}))})]]])))]]})}))}}}}])})]}]}]}]}])))}})})}])}})}]])}}]])))]}}}}})])]]}}}}}]})}])))]))}])}])]))]})}}})})}))}}}]]]]}))}])}}])]))])}))]}]]]]]]}}]}}]))}}}]))))}]}))}]]]))}})}]]}}])]]}])})})})}]]}}]}))}})}})]}})]})))}})})}))}}])]]])])}]})}}}]])})))}]))]})}]})}}]))]}}}]))}]))}}]]}]})]])]]]})})}))}}))}])}]}]])})]]]]]]}]))}}]})])]]))])}]}]})}}])]}}]}}]]}))]]}}})]]]]]]}})]})]]]])]]]]]}]}}]})}}])]]}}])])]}))})]}]}])])]]]}}])]}]}]])))})))]]])]})}))]])]]}}}]])])]}]])]])])))}]})]))})])]]}]]]})]})})}))}}]]))}))]]]]}]]])]]]}}]]]))))}})}}]}})]]])]}]]]))}]}}})]}}])}}]}}]}}}})}}]])})))]]}}}}]]]}}]]]))))})]}}}})})}})])))))}]}]])}))}}}})))}]]]}])]]}])]]]}]}}}]]}})})})})]})}]}]]])}]})]}]})}))))])))))))}])})])]]}]]}}})}]])]]})]})})]]])]])))])})]}])])]}))]}]}])})]}]))}]])])}}))}])}]}]})]}])}]]])]}]]}})}]}}}])}]))]})]))))]}}])]]}})}]]]}]}}}]]]}]])]})])}}}))))]}}]])})))}}}])})})}])]])}}))}])))})})}))}])})]}]}}}]}}]))}))])]})]}}}])]}])}]})))}})}])}]]})]])]])}])}}]}})])]]])}]]}}]]]]))]}}]}}}})}]])}]])}]]]}))])))}})})))]]}]])])]}])})]})})]))])])]]}))}]])}})}})})))}})})}}])]})})]))}])}])]]]}}]]]}]])]]}])))]]])]})}))]]}]))]}))}}}})}})))])}}}}]]})]}}})]]))]]}]}]})}]))))}})}]]))}})]}]}})]]])})]])]})]}]}})}]}]]}}])]]])]}}}}]}]))]])}]}]]})})}]}])])}}]]}]})}})}])]]]}})))})]})])}}})]])]}]}}]]}]]])))]]}}]}]]}))))]]])})}]})

================================================
FILE: balanced_delimiter/tests/input11.txt
================================================
()[]((){[{({((){{}(([])){()}}[][][[[(({[][[]{{}}]}[])[{}{}][]((()(()()({[]}()()){[[[]{[{[]{[[({}(([[]][()[[{[]({[]})[]}(()){[][[{}{(){}({}){[{[{}(()[[({{{({}[({{}[({((({[][][]()(){}{[[()[][[]()([{}()][{({{(()()[{}]{}[][][]{[(){{}[]{[]}[[[]{{[]{}([[]([[]{}][{{}()()(){}[{}{{[]}[]([])}{({({[[[[]][](){[{}][{()([{(){}}[]{[]}[(([[](){[{{{[]{[({[[{{{}{}}}]](){{}}(())}[[()[({}[([]){[]{{()}}{[[{[{((([])){{[{[{[][]}(())({(())[([[({({}{[]}()[[[({(){[{{{()}}[({{[]()((){}()({}()[[][{(){{}{}}{}([{}]{{()([[]](({}([[[]](){}(){[]}{({[{[{{}}[][]{}{[{}[(([[{}({{{[({()[]{}[[{{[]{{([((({{({[([]){}][]{([])[]{{{}}{()(({()[({{[[]]}}{}()([{[[][({}({()({[([[][[([]{}((([])[(){{}[{}[({()}{}[{}[{[{[][[[]{}{()()}]({{(())}})]}[[{{[([]())[]{}[][[()([{([][[{}]{({}()([{[(){}[]]}({([]{({}[])[[()]([][{{{}}{[]({({[]{}{((({}(){({}{[{}]{([]{{([[{(({[[([{}(({[]}()){()}[(([(({()[](){{[][()()()[](){}]}}})[(){}]{([])({[({([(){{}[({}[([[{}]{}({})[{()[[(())(()({}{[]}({({[]}{{}{(({[]}[]([]{}[(({[[()[[](){{}((){({})}[[{([{}[][{[]}[]{()(())({[[]]{{[]{(){}[{(){[(({})([[[][[{{[[()][][(){([{}[[]][[{}{[][]}([({{[{{([{()[][{{[][]{}[][[[([{}[][[]()]])[][()][()]]]]}}]()([[([()[{}[]()({[[[()]{([{}{({{(){}{({})}((({(){{()}([])}[{([{[({[[]]}[{{{[({[([][(({()(({}()[][{{[{{{(([[]]))[{{}[({([{(({({({((([[[]]([]){(({}[]{{()([[(){}([{({}{[]({([{{({}){([()]([]([]{([[(){()()[]}{()}{{[(((((()[]){{{([[](({}){[{}([[{[[[{{{[(){(){()}[()[[{({(){{}[[()()[](()[][{{{}[(((([({[[]([](){{}[]}([[()]{}[()]{({}[{{{}{(())}{[{[()][]{}({{}{{{}}[][[{}{[{}((){}()[[[{([{[([])({()[{()[{}{([(){(({{}{([({}[[{[](([{[[[{}]]({([{[((){}[][()])][(){[(({[([]()[([{()[[]([{}()]()[{([{}]{}())}]{([][({(){}[]()}(([()[([[[((){([]{[([]{[[[]([[]{}[{(({{}(())}){[]{{[[{[[([[[]]{}({([{(((([])([]((([][((([]()({([]{[{{{()}}[[[]()]([[]()]{[{[]{}([[[{()[{{}({}{()[(([]({[]}){(){}}){()({({({{[[(){{(({}()()){}){()[{[[[([]()()[[]{[[[{}]([{[[[{{()}[]}{((({[]}{}{(){{{(({([({})()[{[{((([](([][({{({}{[()][]({{{{}{{{{}[][]}}[([]{(()((([[[([[{}{{}}]]){{[][[{()}[][{{{{}{()[[(({}{}({([[][](){[]}[{{([([]){(()())}]{{{{[{[]{}{[{[]{([][{{[][({{{[{()(([[()[{[[](()[[{}[({{[{{({[]{(([](([{[[()]](()()){}}[[{{(()){}[[[([[[][{[()][[{}[[([]{}({(([[{[[]]}((()({()})[])){(){(()({[][{}]}{({[]({[({[[[{[((){{[([{{}}])]}})[(()[[()]((){[()({})[]](([({[{[[]](([{}{}()]([(()[[]][])([])[{[]([])}]()([[([][{()[]}[{[][([])()([()][({}(){}[]{})([()[{{{[[][{}([[]()[(({({[([[[((()({(((){[]}[]([[{[{[{({{}}[](){})}((([]))[{{[()[()[{}[{}][]([{[[()]]}([[]{}(){[{[((){}()()[]{()([]({[([]()[[]([]()[{{[()()[([{{[](())({[[]{{[[]{[[[[[([[]()[[[((){[][({{[[[[[][[()][({()(){{{}[[]()[(()({[[{[{}]}{}{{{{}}[{}][{{[([{{}{{}({[()]()[]{}{()}}{[{[{([][(({()}[[]{}[([{}[]({[(){}{{(([{[[[[[[[()[{}]]({([{}[]{[]}{}[]()[{[[({[]{{}}}()())({})[]()]{{}([([()]){(()[{}][()]({[](){[](((){({({}{[[()[]{}]{}[()[([[({{}[(){}([][[]]){[()[{}{{(([[]{{}(([{{[][{}]}{}({[]}[{}])}{[]{(){[()[](([{}{{({[{}{()({[(([{(((([]){{}()()([{}{}[{}][([])(){{{{{}()}({()[[()]{([([[[[]({}[{{({}{[]}{}({({([[]]{{[](()[[]]({}()({[({{[({[]{((){{(({[{{[()[[]{({({(({}){([(){()}{[[(){}{()}([{}{{}}{}{{[[{{}({{[]({}{}())}{(([[()[{({}[])(({[{((({}[[]]((())[]()[[]][{{}{[]{{}{}}{(([(){{[[]{(){[{}(())[[[[[{({}())[[]()(({([((()[({}{{}})(){[[](){}]{[]}[()]}([])([{{({}[]{[]}[{}{(({[[[][[{{{(({}{({()({{[]{{}}{({[((()[{}({})[]()([[]{([{(([([])((([{()((){{}[()(){{{[()]{{()[[([((){{[[[]]]}}{{{{{}{[((()([[{(){{}([][[{}{{}()()({(){([{{}({{}({{((([[]((()){}([])){[()[]{[{}{[{{{}{}}[({(){}([{{[]}[{}]}{{{{(({({[[[][{()}]({}[](){{}}({}{}({{()}}[[[[]([]{[()]()[(){}](({[][{{{[{}{}{{({([[{}({[{{{({})}}[(({{[]}(({()(({({[{{}{(({{{{{(({{[(([{}()][()]([{}[[(({{[]({({{{{(([]({}[[]({{}}[([({{[{[[([]{[][][[([[][]{}[{}]{[]{}[[{[[[[]]]{}[]()([((({()[]{}{{[[([][[[][{}]{{}(())[()[(({{{{{[]{}}}[{{}}[{[{}](){[][{[{}]}[[]][[{{{{}}[]}}((){[]})]]]{((([[{}{{()}}]]((([])[]({{}[{}[]((){[[{([{{}{}[[([{(({{{{{}}}{(()[[[{{{{{[]}{{({([({(())(()[]([{}([(([{()([{(){[]{}}}[{[[[[[[[((([([{[]{{}(())}[[()]{[]{({(({()[][{}][]}[{}(){()(({({{}[({{[][]}{}}{{}(([({({})[([[[]([[][{[([{{[][(((([[[({}{{[](([]){()[[{}[[[{}({}[[]]{([{}][[]({()[()]}){[{([]){}{[((()(([[]][{}[([]{([()[{[]}{}]{[]}]{{{{[()[{[([]{})][[]]}]((()[])())(({({(({([[[{(()([])({((({}([{[[{{}([]{[[((()[([()][[]{[{{}{{}{[({{{{}}[(([{[({}{})[({[[][[]([[]]{})([[]])[{}[]{}[]([(){(){}{(([{{}([{}(){[]([[(){({}()[]((())(({[{{[{}(([[][{}[[[]()]([([[[][{([{(){()()[]{([(((([[{}{}()[[{}{[{(){([][[[(({})[]{([(()[])[([[{()(({}[{({[[[({[{}([][([{{}([]){([]())}((){[]}([(()[(([])())(({}[]{(([()[[]]])){[[()[{}[]{}()][{(([]([({}){{{}((){}[{{[]{([])(([{[()(({((([[](()[]([({}{([({[]{()[]}()([()[]]([(())()[{}][]{(({({[[[{}{({[]}([(([{(({{{}}[{([[{}]]{{}[]()()[[]{}[()[[]][{[{[[[({()({{{[()({}[]{()(({[[{[[[({(([{{{{[[]]}([{(((()({}((((()({[]{}[]{[{{{{([][]{([])}){((){[[{}]]}[]){}[(({{{[{()([])(({}([])({[[](){{()[][[{[()[({({[({}{[][({[{}]}{{{(((()[[[]]({})[{{{()()}[[[]]{([[[{}()]{[[[]{}]]}([(())])]()()[([[[({{{}}}[{{([[({[][(([[]]))]{{}}{{}[({})]({})}}([]{((){()[{}([{{[[{{([[]{([[[{(){}()([]{[]{}[]({{}[]}[()]{})}{[{()(){}[][{}[(){[([({[]}[[(){}](({}({[][(({{({})}((())({[[[][{{[[[([[{[{()()()[[][[[{{[{[{{[[(())()({[]{[][[{[]()[[(({{()[]}[][]{(({({}){[]{{{()[{[{{{}}{((((){[({}{{({([])[]}[]({[{([[(){(){[[[{[{{[][[[(({((()){()([()][{(){(([[][][({[{[]({}{[]{{{{((()))[[]]}[[(){[{{[((((()([][(((()){}[(([]({{{{(())}}{}{{}}(([([([{[{}[{(()[{[]}])({[[[{{{}}}]{([])}]{[]{([][]{})[(({[]{}[{}{}[{}[[][[{(){(({[({{}({({()})[[[]]()[({})]]}{[[([(())(({{[{(){}(()[])}{}[[{}[{}[[]()[][]]{}{}](){[(({[()([{{}}{}[{{([((({{(){()([]{[(){[][[({(){}([]([([]){[{(({}({[()]()[[[{}[((([{[{}([{({()[[()((){({({}[{{[](){}[{[({{([[[[]](){}[][{[([]{[{}({[]{({[{}[](()[[({[][([[()]]{([{(((){{([[[[{({{}{}[{}{[([{()[{{{}{()}[[](){}(((){[([[]])({()[()]{}([{({}{}){([]([]))[[{(())[[({}[{()}()({}[[](()[[{([])(())([{(())[]({([{[()(([{}{}[]]([]{})){{[]{([((){}{[][[[({}[])({}({[{}{[[][(([{{[(()[])([(([({{{{{}[]}(()([{{{([{}{([][{}[[][]{([({{{[[{{[([(()())[(){(){()}[[[{}{{({[[](){[()[{[[([[{}[([[][]](){}[{}]){()}]]]{{}{}}())[][()[{{{{(({({{[{}[]][]}[]}[([][{({{(())}})(()()((()({[]}){(([[{[[({{[]({}{(({{()(([]))([([])((()[[]({}()){}[]{(){}()[{([([[({{([{}({[[([{}(())][]){()((({[([]()[])]({})[][]{}}({{}({[[[{[]{([[]][{()(({{}})[[([[]]{({{{([{[[(([{{({}{(())}([[{[[{([]({[((){[([((({[[]()(([[{[]}][{([{}])}[[][{{[]{(())(([{}((([((([{([][({}{[[]({}){}{[][([[{}{}(){{}{}[[]{([{{[{}[]()]}[]([][])}]){}((([{[[{}{}]([{([{{({}{{(){{(){[(((){}){([()({[[([[(({[[{{}}({[[([{{}}][][[]()({}([{{}{}{}[{}[{([([[[{[]({[{{{}}[[()[{{}()[{{}{(({}(({[[()]{{}([[[]]])}{[[({{{{[()]([]{[[({([{[[[]{[{}([{(({((){(()(){[]}([{({({([])[{({{}})[([][[]([]][][({([{({})}([{()(())}()](())[[](({}((()()[])))()[{[[(((({(({}[([[]{()}{[{({{}{}(){}()}([]{{{}}([()])()}))()[]}([{}])]([{([([[[]]]){[[]]{}()}{[][{{[[{()()({()((){}{})}{}[{{{{[({{}(){{{[()]({{{{([]{}[{{}{[()[{{(([(())[[{}{(([[]{}]{{}{}(({(({[]{()([]{}[[[]][[([({{[{{{(({{}({[([[[((({}[[]])))()[()(){[(){{}[{[{({{}{[]}[{}]})()()[{[[]]}(()[{[({[(){[][{}][]({})({({()[(({})[[[({{[([[]]{[({}{{[[({{{()}{()[][[{(()()([(()({}([])[(([[{{{([](){()(()[({}())([][{[()[]({{{}{}[({[{{{{}()}[[{[[][][][()[(){([{[({{[[({()[]}){}(()){[][(()(()([][{{}[([{}]{([]({{}[]()}){{}[]}[(){[{{}}[((([])[])){{{[{(([{[[{{()}}]][{}([][()[{{[([[[{}]([([]{[{((())[]{}[{(){[(){}[{[]([][[{[[]][{(()){[[[]][]()]}[({[[{{}[[[([({{[[[{()}]]{}]{()((({{}([][]{{[({{}}){{{[(()[]){[{[{}{{[{()[[{(){[]{()[[()[{({([([[[{(){}}]{}]{{}[[([])([{([[([{{}{}{[(){(({{[][[(([][({({{(())[(({}[[{{}}(([{{{{[][[[({{{{({{[[({[(())[{((()[]({}{(({{}[]([{}()([({}[()()]([{}[]{[[({[{}[[{[[{(){{{([[][()]{}{}])}(({}({}([])[{[](([][([])[]{}{}((()({[{[]{[({[({({(([][])([]{}{[({[[]{{}([{[(){([[][({{}([(([(){}{[[][[[[{([[]]({({{((())()[([{}[{[{[][][()()([]{[([{[[[[[][{}[]]{[[][{[[{{}({}()())}[]{}([((({(([][(){()[[[[[{}[({})(){{}(((({((([[][]([{}({})(()[{{[]}}][()()]{[{{()([]){{}[{[]}[][[{(())([])}[{([][])}(())([[]{}[][{[{(({}((){[[(({[(){[[{{(){[{[][][{(({[[{[({[()[{{(([[]]({}([]{}((){({}[]([[]]({([{}[(){{([()[]{[[[]]]}][[{}{{[()({()((()){}{{([])(([{{[{({([(([()]{{(()()[](()))[{{[]({}[])(){[]}{({{}})}[][([[{()()[{[{}{(){()[({}{{}}{[]({([[({()({([{([[({}{(()(([][()[]]([([(){(((){}[(({}{[[{}((()){[]{}{[]}[{}[{}{([{}({})])}[{(({}({[]}[[((){(([]){([(({{}}[({[({[([{}({()()}())[[{([{}[{(())}][(((){[{}[]((()[]))(){()([]{()}()(([][]{[(((([{((([[{}]][{(()()){}{{[[[]({{{{({}{((){})[{{(([[[{[]}{(){{([])([((((([[{}(({[{()[{{[{}{([{}(({({{({}())[{({}(()())[{{}([(((){[[{{}()}(({}))]{{{(()[{}[[][{}]{}]()[((()[[](()({()[[[][][]{{}{[({(([][[(([{[{}[[([{{({}[{[{[({(([])(([])){((()[{[](){{([]({}[[[{}]([[[[[()][[{}](((({()[{}]()}()[]{[(({[{}]})({}(){[({({(){([][[({[][()(([])(){}{([{({})}])([(()[(){[]{}{}}])[{(({()([(){}]({(([]{()(([{{({})}[{[[()[]([[]]{[[{[{{}[][({()})()]{(([[[][([[{[()[[(){[{}{}(({{}[()]}[[((([]{(())}(({[]{}}())(()))[]{(([[{{[]}[]([((([[[][][{}()][]{[]{[]}[{{}()}{}]}]][](((()[{()}{{[]([[{({[]{({(){}}{{[{[{{((()()[(()){}{[]}({{}(){}}((([]()){[]{{}([](([]([])[()]([(({({[]{({[{{}[[[([{(){[]}{[({[(({({({[((()[()(({({()()}{(({{}}[{}({{[{([])}]}(){(()[((((){[(){[[([[]][(())]{[](([([]{{{[[{(()({{({[([()]){{[(){}{}([][(([]{{[[([[{{([({[[()]({}{(()(([[(){{}({[]({()}{(({})[]{}({}{}()()[((()){{(()){}{{[{[]{}}([]([[(())(((){{[{[({}{([][(({({{}})}({{{{{([][]([{(([{{{((){({})[()()(([({[(([({[][[]{[(()){({[{}][[]][]{}[{[]}()(){}[{{(()){[([{{}}({[]()()[]{{}({})[({[][]}[()])[([({{[([({})()(){{{{}{{}{({}()([(({(){}})[{}[]([{{}}[([][{{[]}()[(([({{{({[(){({()}){}}{}({{([[]{{[{()()}(){[{(([]){[{}{(){{}{((()[[([][[][]][{{}[[[([])()[({(({((())[]{}{()()}[(([[{{}{{[{({[([{{[]{{(){[{}{()({{(([([([[{}(()())[[{{()()[()((()(){[[{[(){{({[[{}]]}{[{{}}][]([[][{}({(((([][]({}[]({{[{}{}]{()([]){}(([[]({}{[][][][{(({}()[[]]){})()()([]{[{[{}[()]{}]([[]()[][[[(((){}{{{[{}([[][({[{}[{}()[{[]([[[{{{[](({[[{([{}({({(){[]}({[]([[](()(){[[[]()([[([][]([][][])([[[]({}{()})([[{({([([[]{[]{([(([[]])){[{(((()))([]{{{}({{{}}})[]}[{[]}]}([({{[][](())[([{{{{(([{(({}({(){}({[{{{[]{[[]](){[{(){{}}{}[{[](({[]})[[{{[{([{[[]](([][({[([()][{{}{((([{[{[[[()({{[{[(({()[[[{[{({[([({(([]))[()[][]]})[[](()(({[[([[[({(([(([{[({()[(((){[({}[[{[(([[{[[({[([]){[({})[[()[()]]{({({}{}{}{(({{[][]()([[[[]{}]([{(([[(()[({()()[{(()({[[]()]()})((){[[[{{[[](([[()(([])){(){[]([{{[]{(({([]()[](()[{}[][]])()()){(){([{{{()[][()]}[(([[]([([])[]([{}[()]])]{[{}{[]()[({}){{}()()()[[]{()[]{(){({[[]()]})}}}({([{{([[]{}]{}{[()[({()[()[({{{{{}}[[[]]{()}({}([][()()]{{[(()[[({[({}){}()]}{}[{{}}[]]{({()({{((){}({({({(([([[(({[[]][]{[]{{}}}{}[[{}{[{{}[[[][{({}[](([(()[[()([])]{(){{{}({}[[(){([[]]((([{(())()({[{}[]](([{[(([{[{{[{{{{()}([(){([[{([[([()]{}{}{([]{{((){{[{}[][([{{}}{[]}{([]){}}(){[[]{}[]][]}(())({(){{}({}((()([{{}[[](({(()[]{[[()]{{{}}}{([({[{[{(){[][{}(({}{{{}{}{}{[[]([][{{{[(){{[[{{()}[]}[]]([([]{})][()[((([[{(({[{([{([]{[[]][([[{}]][([]){[[{}({(){}{[{{(({({([((){[((([]{{()[{}{[]{{({{}(([[]][({({})({{}}(({([([]({{[[{()}]{}{[([]{[[([{((()))[{([{[([{[(()[([{{}}[][()(([{[(){{([()(){{([({}){{}{([])}{}([[]{}][[{[]}[({}{(([{[[({{}}{{([]({({[]{()([({{}})([])({}){[]({{[({([]())({((([[([[[]((([[{[{}][({}()){({{[(){{[(([]{([{[()(()({})((){[{}]})([(()){([{{[]{({}{[([()[][{[[]{}()]({[{{{{{{}[{{}[((){})[][{}()([][[[[[[]{[[[[({{{}(){([]({}((){{{(({}()(([]({{{[]()[]{[[]{[][[{(){{}}}({}(([[][[[[]{}[[{()(){}[{}]()}]]]{}]]{[({(()[({})(){}{}]()({[[[[{}()(){[{[[[[]{}[[{}(({()[]({}){()(())(([][[][]{{{}[][{}]{}}()(){[({}[])[[{{{}{[[()((({(){}}{})[((){{}()[((({}{(){{({[]}()){[][[[[[{}[()][{([{([{}[{[][]{{}({()(([{[()]{}}[]()[{{()}()}(){[{}({{([()([](){}()(()[]{}{}()[])[])][](([]({[[{}]][((({})[{{}}(()[{{}{()}[()([{}][])[([])[[{[{}{}[]]{}}]]]]}](())([()((){(({}{}{[][[()]]}[{}()])(([]{()}{()[]}{{}([({}{})([]{}[(((({{[][({}[(()[[]]({{[[]([{}([])]{[]{[]}[]{}})][()]({[]}[][[{}]((({})[()[((){{}}{[{()}{[[(([{{}}[(()[]{()([{(){{[[][{([{}{{(){{([{[{}]}[([[(((({}([(([]{([][{([[{({{[[]{{}(([[]]{{{}([{[[]({}({}{{[]([]([[([{{(())[{[]}]{{[[]]}[([])]([{([][]{}[([{}]){[]{(()())[[({}[](){})[[{{{}{}[]{}{}{}[[]][{}(({([[{(([(()([]))({[[{}{{{}{({({}{})[]([{()[[[({})[({[()[](({}){{}[{[[{()[(){(())[[()][(([][][{[([{}])]}{({{}{([(({}[[({})][]{[[[{}]()][{}[][({{{{(){({})[({}[{{}}]{[]})({{}[[({{}{[{[({}{}{{{}}[{}](()[{}]([(){[{}({}[{({([()([]({[{[([[][{{(){(){()()}()[](([]((((){([[[{{()([({()}[{{()}}{{[[][]{()()}]}({[()({}[{}{[(()[{}(((([{{([{}]{}[][{}{}((()[]))[[{()}[()(({()((()))([][{{}([[]]{{}})}])((([{([([{}[{([[]{[{[()[]{}[(([[[]{}]{[({}()[]())][]}{}[]{()[]{[({[()][]})][[()]][()[[{}[[]{{}[[[][{([{[()()({}[]{[[]{}[({}(({}))[()()][[()[]{}[]{[[{[([])]({(){}(({}()){[{(()({[]}{}))(())}]({}())({([[{[]{{[(({()(()([{{{}}[]{{{}{}}}[][[][()()][(){[{[]{(())[()](([[()()()]([(){}{({[([[][][[{(((){{[]{[][((()[[((()(([((()()))[{}][{{}([{[[]][]}{[[{{{}[([]){(){[][{(({{()[](){([[(([{{}(){{()[][{(){[][(){[]({}({((){{[]{}({[]}[]({([[]({}{[[{}]]{[]{}[][(((([[]{}][]){{{}}}[{{()}[[[(({([]{}{(({((()([])[]([])[[([[]()]({{}{{{}[{}()[]{[]({([{({}({})){}{{}}{}({{(){}({[({(){{[{()[][()]{}({}())({{}[[{[{}]}{}({()}[({}[][((({{}(){()}{([{}](()([{{{{{{{}([])()}{([{{{(){[{({}){{({{{{}{}()[{[]()}{}{[{[]()}]{([]{(([])){}[[]{}([[({[([{}]({()(){}}[[[(){(){}}()][{[[[([](((({[][{}[](()){}({}){}{}{{{[]{{{[(()[[[(({[][][([()(({{}}()[{{}[{[[]][]}(){[][[{}(([]()([({}()[{([]{[([])[()[]{[[]()()]{[]{()([{[][][]}((([(){{(){({([[{[][{{({{{()[(([([{{()}[{}({}[({[]}{((({{([[]{{}{[[{}()[]]]}{{}}[[]{}(({[()[[][]({{([{[[[[{}([{{[]({{[(){[](([](([()(){}({{(({}))[][]}{{{[]([{}[]])}(()[]()[][{{{{([(({})[{{{[()[([([]{{[{{()}[]}{()([{[()]}[]][({}()(()))][[[[[(({({{{[(){{[(){}[([{{}[[()]]((({{}[]}{(){}()[({(){{}}}[{[](({([]{}[({}{})([[][[[([]{}{()(({}[[]]())){}}{[()[][({}[{({{([[()(([])()([]))[({}{})(({[{}{{({((())){([{([(())[[[(){[]}[({({({{[{}([([(({{}[(){()}[[(((()()([][()(({{[(({[]{{{[][][[{{}([[{{(){({{}{}([]({[{[]}[]({[{}(())]})[()]][((([[]{{}}(){}]([()()])[[]{}][[]]{{()}{}{({{}})}[[[]{{}([()]((({})(){{}}()[]){}){()}[()({()}{{({([[[()[{{()[{[][[[{([[{[[[{}({(({{(()[{[]{{{{(){(){[{{({((()[[[([[({[]}())]{{}{}(()[((({[[{{({()}{[[[[[{}](()){{}()([[{}{}{{((()[]{()})[][[[[{(){[([((){{}()({({[{{[()[]()[][[[]]][[[]{{([])[()[(){[[({{[((){()[]([()(){[][]}([][[(())]]()){{}[([[(()(([[]([]([(({[][(()[({}(()())[{([])}[]{}{[[]{(){({[{([][[()]{[{({[]{([[{{([{}[({[]}{{[][(){[[{}[(({{{{}(([{}][[]([]{{}[[{([[][]({([]{{[{}{[{{}([(([]{}{([{(()({{([])}}{(()({[[((([]((([{([]{{[[{([]())([]())}({}[[[()[{{[[][[[][{()}[]{}{[{{[[]][{{()}{[[[]]]}}({({{()}})[{()}][(([{}]))][]()})()]{()({[]}){}({[[{}][[()[](){}][[][{[[[[]([[{()[]}[[{}({[({()()})]})]]]])]]]}]]]]})}}}]}]]]]}}]]]])]]}})}]))))))]]}))}))}])}))])}]}]}})})])}]]})]))}}}))]]]}]}})]])}}]])}})}]}])}]})}}]}])])]}))]))])))]])]}])})]}})]]}]]}}]]]}}]})})})])]}}]]]])}}]])}]]]]})}}]]})))])}])]]]))})}}]}}}}}}}])}}))})]]]}]])}]]]}]}}]]]])})}})])}]]})))]}))})}}}]])}]]}}}}))]}}))]))))]]]}))])])]}})})})]]]]])}])}})}}]}))]]])}})}])]]})]]]])])}))}])]})))}])]]}}]}}})}))]]]]])}]}})])]]}}}])])}}}}])}}})]))))}]}})}}])]]]]}])}})]]}))]}])}})))})])]}])]))]}}})}}]}]])})}}}])))])}}}]]})}])])))]]}]}]))])]}))]]])]}}}}}}]})))))]]]}]]]))]})]])]})}}]}}})}}}]}}}}])}}}}}}])))}})))])])]]})}]}}})]})}})}])})}]}}}))]]))}))})}))]]]}])))]}})])}))}})}))}]}}]}}}]))]])}}}))}]}}]}}]]}])}]]))))]]))]}}}))}]]])]})}])]))}}]}]]}]))}))]}}}]])})})})}]]}]])]]})]}])}]]]}]]]]}}]))]]}]}])}]])])}])))}))]]]])}}]))))])]}])]})}])])}}]]])})))))}}}]])]}]}))])})}])]}]))})]}]}})]]})]}}}}})]]]}]))])}})}]))]]}]}]]}]})]})]]]]}])})}}}]]})]))}]])}))]}}]]]]}}])}])}}}])]]))}}))]}])}}))}]}})}]])}])}))])))))]])]])}}}}])}]]}}}])})]]))]]}]})]]))])}}))])]}}))))])])})))})]))]))]}))))}})]}]]))})}}]])}])}]]]]]]}}}})))]})]))]]}}}]]]}}]))}}))]]]]]}]}]]]]}))})]}])))]]}]}}}})))))}}})))}}})]]]]}]]]]])]]}]}}}}}]})}]])]})}}}])}]))]}])}))]}}]}})}]}]])))]])]])))})})]}})}])}})}))}})]]}]))})]]])}])}}])}}]}]))]])])]}])]}])}]}])]]})]}]}}))])})))})]))})}}}]}})))]})])})}))}}]}})]]}])]})}])}]}))}]])))]])]}}]}}}])]}}}))]}}]}]})])}]})}))]}]))))}})])]]}})}})})]])}]])}])}}}]}}]}]))]}]))})}]))))}]])}}}])])))}]]]}]}]]}))]])]))})})}))}})})})]])]}}))]}}})]]})]]})}}])})]}]}]})]))]}}])}}}))}}}])}}]]))]}}]]]}))}]})])]]))}])]])}}))})})}]]}]})]]}]]))]}]])]}))]})]}]))]))})]]])]]})))]])]})}]}]]]}))]}]}})]]]}]}])))}}])]})]))}])}]}}]])}]}]}}}}}]})})))}]))}}}}])]}})])))}]}])}}])])})}]])]]))]])]]})])})})})])}]]}))}}}]]])}]]]})]])]}}}))]]]])}]})}]})]))}}}))))))})]])})}}]}]]}))]}}]]]])])]))}})}]}}}}}])]})}]}}}]]))])}))})]]]]}])]]))}}}]})}]}]}}])}})]})}}})]))]}])]])])]))}}}}}])]}})])]]}})])]}}}]]})}]}]})]))]})]))]})}}}]))}]))}}}}})))])})]}]}}))]]))]}}}})]))})})}]])))})]})])}}]])]]}}))])]}}]})}}))}]]}}})]))})]]}]})))])}})]))})}))]))]})})}))]})]}}])]]]}]})}})}))]))))}})))]))}}]}]}})}})}]])}}]))))))])}]]))})))]]))]}]]]}]])]]]))}}]}]]})]]}]}]))}))}))}))}]])})]})]])}})})]}))]}))))]]]]])]]))}}}]))})})]}]}])}}])]]]}]))]]))})]}}]]}))]))]])}}}]}))])}])}]}})}))])}]}}]}]}))]])))))])}}}]]]))}}]})}}}})]]}}}])))}]))))]})))}]}))]])}]]])]})]})]))])})})]])))}]]]})]]}))]))}])]))))})]])}])})})]])})})]}}]}]}]])]}}]}}))])})}]}}]))}})})]}}]])}}]])})))})))))}}]]})]}]]}))}]}]}}}]]}]}))]]})))}]}]])]]]]}}}]})])])))}))))}]]]]]]}]))})))])]]}]]}]]]]}])]})]}]}]])])}})}))}]]]]]}]))])})]])}]}])}]})]}))})})]})]}}]})))]))}])))}}}]]}]]]})]]}]))])])}))})))}]]})]]}})}}}})]]]}}}}]))]]))]}})})]))]]}}))}]}}])]])}])]]}])])})}]]]}}}]]}]}}]}]}]}}}]}})})))}}})])]]]}]]})]}]}]])}]]}}])}]})])]])]}}]])]}]))}]}}}]]}])})]}])))]}]]}})]}])}]]]}]]}}]})]}})]}])])})}}}]]))]))]))}]]}}})]]}})]})]}})]]])]})})}]})]}])]}]}]}]}]]]])]})}))}}}]}})])]]])}}))}))}))}]]]))}}]]}}])}}}})}}}})]}}}}])}]]}}]}])}])}])]))}))))]]}])])])})])])]}]})})}]))})}))}])]}]]}])})]]})}}}})]]}]}))))}}]}]]]}]})}]]])])}]]}]))])]]})]]}))]])]]})])})]}}}}})}}])}])]}])))}]}]])]}]})])}])))])))]))}}}]]]]))]})))])]})]}))}]]}]]))}}]))]]}])}}})})]])}])}}]]]})}))))}]]})])}})]])])}]}]))])}}))})}})]]}]]))})))}])])}))}}}}]]]]}]]}]})}}]]]}]])]}}]]}}})])}]])}])}}}]))}}})]))])]}}]))]]}]}))]]]})])}}})]}])})}])}]])])])]]}]]}}])})]}))]}}]}])]}]})}]]]])}}))}])})]})]])]})}})]})]}]]])}})]}]}}])})})]]})}])]}])))]]]]})))}]}]))})]]}]})}}})))])}}]])]}))]}]]]}}))])]]})})]}))}}]]]]]}))]}}]})}]]}])])]))}})))]))])))))]}}]}]]}}}})}]})]]))}}])})}))]]]}}]}]]]}}]])}]}))}})]})))}}]}]}}}}}))}}))]]}]]}})]]}}]}]}}]]]]}]}]])]]]}}]]]}))}))]})))])])]}]]}]})}]]])}])}}]]}}])]})}))]])}}])]]])]])}]}}]])))}}})]})]})})]]}]]}}]})))}]}}}))]}}}}}]}})))))))))}])}}}]))})]]]}]]}))})]}}})})]]]}]}]]]})}]}))}]))]))}]]]})}))}]))})])})]))])))}))]}]))}}}])}}])))}]]]}}))])]))}])])]})]]]})}]))}]])]])})]]])}}]}]]]]))))])}}}])}]]])])]]]))]}}]}))))}]])}])}]))}}])]]]})]]}]))]}})]}}}]}])]))]]})}]]}]))))}))}]]])}))})}))]}}}})})]]))))]}}]}])})]]]]]})}})]]]))))]}}])]}]])]])]})]))})]})}))}]))})}}]}])])))]]]]]]]}]])}]))])]))})])})}}}}}}]]])}}}))}])]]}])}]]})]}))))))}}}]]}}}))]]}]])]]}}})))])]}]]}])]]})]]}]}})])])])))}}}})})}}))]]])))]}}))}}}}}))}}]})}))}))}))]}]})]])})}}]}}}]}))})]]])))]]})}))}}}}])})]}]}]}]}])))}})})}])}})}]])}}]])))]}}}}})])]]}}}}}]})}])))]))}])}])]))]})}}})})}))}}}]]]]}))}])}}])]))])}))]}]]]]]]}}]}}]))}}}]))))}]}))}]]]))}})}]]}}])]]}])})})})}]]}}]}))}})}})]}})]})))}})})}))}}])]]])])}]})}}}]])})))}]))]})}]})}}]))]}}}]))}]))}}]]}]})]])]]]})})}))}}))}])}]}]])})]]]]]]}]))}}]})])]]))])}]}]})}}])]}}]}}]]}))]]}}})]]]]]]}})]})]]]])]]]]]}]}}]})}}])]]}}])])]}))})]}]}])])]]]}}])]}]}]])))})))]]])]})}))]])]]}}}]])])]}]])]])])))}]})]))})])]]}]]]})]})})}))}}]]))}))]]]]}]]])]]]}}]]]))))}})}}]}})]]])]}]]]))}]}}})]}}])}}]}}]}}}})}}]])})))]]}}}}]]]}}]]]))))})]}}}})})}})])))))}]}]])}))}}}})))}]]]}])]]}])]]]}]}}}]]}})})})})]})}]}]]])}]})]}]})}))))])))))))}])})])]]}]]}}})}]])]]})]})})]]])]])))])})]}])])]}))]}]}])})]}]))}]])])}}))}])}]}]})]}])}]]])]}]]}})}]}}}])}]))]})]))))]}}])]]}})}]]]}]}}}]]]}]])]})])}}}))))]}}]])})))}}}])})})}])]])}}))}])))})})}))}])})]}]}}}]}}]))}))])]})]}}}])]}])}]})))}})}])}]]})]])]])}])}}]}})])]]])}]]}}]]]]))]}}]}}}})}]])}]])}]]]}))])))}})})))]]}]])])]}])})]})})]))])])]]}))}]])}})}})})))}})})}}])]})})]))}])}])]]]}}]]]}]])]]}])))]]])]})}))]]}]))]}))}}}})}})))])}}}}]]})]}}})]]))]]}]}]})}]))))}})}]]))}})]}]}})]]])})]])]})]}]}})}]}]]}}])]]])]}}}}]}]))]])}]}]]})})}]}])])}}]]}]})}})}])]]]}})))})]})])}}})]])]}]}}]]}]]])))]]}}]}]]}))))]]])})}]})

================================================
FILE: balanced_delimiter/tests/output00.txt
================================================
True

================================================
FILE: balanced_delimiter/tests/output01.txt
================================================
False

================================================
FILE: balanced_delimiter/tests/output02.txt
================================================
True

================================================
FILE: balanced_delimiter/tests/output03.txt
================================================
False

================================================
FILE: balanced_delimiter/tests/output04.txt
================================================
True

================================================
FILE: balanced_delimiter/tests/output05.txt
================================================
False

================================================
FILE: balanced_delimiter/tests/output06.txt
================================================
True

================================================
FILE: balanced_delimiter/tests/output07.txt
================================================
False

================================================
FILE: balanced_delimiter/tests/output08.txt
================================================
True

================================================
FILE: balanced_delimiter/tests/output09.txt
================================================
False

================================================
FILE: balanced_delimiter/tests/output10.txt
================================================
True

================================================
FILE: balanced_delimiter/tests/output11.txt
================================================
False

================================================
FILE: bst_count/README.md
================================================
Given a binary search tree root, count the total number of nodes in the tree.


================================================
FILE: bst_count/solutions/solution.js
================================================
function BSTNode(value) {
  this.value = value;
  this.left = null;
  this.right = null;
}

function countNodes(root) {
  if (!root) {
    return 0;
  }
  return countNodes(root.left) + 1 + countNodes(root.right);
}


================================================
FILE: bst_height/README.md
================================================
Given a binary search tree, return its height—that is, the maximum depth reached by the tree.

Example: given a BST with a single node, your function would return `0`.

Given a linear BST with only right side nodes `0 -> 1 -> 2 -> (null)`, where `2` is the tail, your function would return a max height of `2`.

Hint: BSTs are a recursively defined data structure.

Hint #2: which tree traversal method covered in the traversal lecture might come in handy here?


================================================
FILE: bst_height/solutions/.gitkeep
================================================


================================================
FILE: coin_change/README.md
================================================
How many different ways can you make change for an amount, given a list of coins?
In this problem, *your code* will need to efficiently compute the answer.

# Problem Statement

Write a program that, given two arguments to STDIN  

* a list of coins `c1, c2, c3, ..` 
* and an amount `n`

Prints out how many different ways you can make change from the coins to STDOUT.

**The problem can be formally stated:** 

Given a value `N`, if we want to make change for `N` cents, and we have infinite supply of each of `C = { C1, C2, .. , Cm}` valued coins, how many ways can we make the change? The order of coins doesn’t matter.

**Example 1:**

For `N = 4` and `C = {1,2,3}` there are four solutions: `{1,1,1,1},{1,1,2},{2,2},{1,3}` 

So given the input

```
1, 2, 3
4
```

your program should output:

```
4
```

**Example 2:**

For `N = 10` and `C = {2, 5, 3, 6}` there are five solutions: `{2,2,2,2,2}, {2,2,3,3}, {2,2,6}, {2,3,5} and {5,5}`

So given the input

```
2, 5, 3, 6
10
```

your program should output:

```
5
```

# Solving the overlapping subproblems using dynamic programming

You can solve this problem recursively, but all the test will not passs unless 
you optimise your solution to eliminate the [overlapping subproblems](http://en.wikipedia.org/wiki/Overlapping_subproblem) using a [dynamic programming solution](http://en.wikipedia.org/wiki/Dynamic_programming)

Or more specifically; 

* If you can think of a way to store the checked solutions, then this store can be used to avoid checking the same solution again and again.

# Hints

* Think about the degenerate cases:
   - How many ways can you give change for 0 cents? 
   - How many ways can you give change for >0 cents, if you have no coins?


* If you are having trouble defining your solutions store, then think about it in terms of the base case `(n = 0)`

* For help on reading from STDIN, see the [HackerRank environment help page](https://www.hackerrank.com/environment) under the "Sample Problem Statement" section.

![](http://i.imgur.com/ajyNlBd.png)



================================================
FILE: coin_change/solutions/CoinChangeSolution.java
================================================
package solutions;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class CoinChangeSolution {

  public static void main(String[] args) throws Exception {
    // read STDIN
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int[] coins = getCoins(br.readLine());
    int amt = Integer.valueOf(br.readLine());

    // write STDOUT
    System.out.println(countOptimal(coins, amt));
  }

  /*
   * Calculates the number of many ways can we make the change from a list of
   * coins.
   * 
   * @param coins[] array of change in coins
   * @param amt     amt to make change from
   * 
   * @return number of solutions
   */
  public static int countOptimal(int[] coins, int amt) {

    // solutions[i] contains the no. of solutions for value i.
    // We build from bottom up using the base case (n = 0)
    int solutions[] = new int[amt + 1];
    solutions[0] = 1;
  
    for (Integer i : coins)
      for (int j = i; j <= amt; j++)
        solutions[j] += solutions[j - i];

    return solutions[amt];
  }

  public static int countRecursive(int coins[], int c, int sum) {

    if (sum == 0)
      return 1;
    if (sum < 0)
      return 0;
    if (c <= 0 && sum >= 1)
      return 0;

    return countRecursive(coins, c - 1, sum)
      + countRecursive(coins, c, sum - coins[c - 1]);
  }

  public static void print() {
    // TODO:
  }

  private static int[] getCoins(String line) {
    String[] nums = line.split(", ");
    int[] coins = new int[nums.length];

    for (int i = 0; i < nums.length; i++)
      coins[i] = Integer.valueOf(nums[i]);

    return coins;
  }

}


================================================
FILE: coin_change/solutions/CoinChangeSolution.scala
================================================

object CoinChangeSolution {

  def main(args: Array[String]) = {

    val input = io.Source.stdin.bufferedReader
    val coins = input.readLine().split(",").map(_.toInt).toList
    val amt = input.readLine().toInt

    println(count(coins, amt))
  }

  def count(coins: List[Int], amt: Int) = {

    val solutions = Array.fill(amt + 1)(0)
    solutions(0) = 1

    coins.foreach(coin => for (c <- coin to amt)
      solutions(c) = solutions(c) + solutions(c - coin))

    solutions(amt)
  }
}


================================================
FILE: coin_change/solutions/CoinChangeSolutionTest.java
================================================
package solutions;

import static org.junit.Assert.*;

import org.junit.Test;

public class CoinChangeSolutionTest {

	@Test
	public void testCoinChangeSolutionRecursive() {

		int coins[] = { 1, 2, 3 };
		assertEquals(4, CoinChangeSolution.countRecursive(coins, coins.length, 4));

		coins = new int[] { 1, 2, 3 };
		assertEquals(5, CoinChangeSolution.countRecursive(coins, coins.length, 5));

		coins = new int[] { 2, 5, 3, 6 };
		assertEquals(5, CoinChangeSolution.countRecursive(coins, coins.length, 10));
	}

	@Test
	public void testCoinChangeSolutionOptimal() {

		int coins[] = { 1, 2, 3 };
		assertEquals(4, CoinChangeSolution.countOptimal(coins, 4));

		coins = new int[] { 1, 2, 3 };
		assertEquals(5, CoinChangeSolution.countOptimal(coins, 5));

		coins = new int[] { 2, 5, 3, 6 };
		assertEquals(5, CoinChangeSolution.countOptimal(coins, 10));
	}

	@Test
	public void testCoinChangeSolutionRecursiveSpeed() {

		int coins[] = { 2, 5, 3, 6, 10, 7, 8, 12, 17, 19, 20 };
		assertEquals(227491942,
		    CoinChangeSolution.countRecursive(coins, coins.length, 250));
	}

	@Test
	public void testCoinChangeSolutionOptimalSpeed() {

		int coins[] = { 2, 5, 3, 6, 10, 7, 8, 12, 17, 19, 20 };
		assertEquals(227491942, CoinChangeSolution.countOptimal(coins, 250));
	}

}


================================================
FILE: coin_change/solutions/coin_change_solution.js
================================================
#!/usr/bin/env node

// Solve the "Coin Change" problem using a bottom-up dynamic programming
// approach. The time complexity is O(n * coins.length) since we have a nested
// loop. The storage complexity is the same, as we store a matrix.
//
// * `coins` is an array of the coin values, eg. [ 1, 2, 3 ]. We assume it
//   to be non-empty.
// * `n` is the amount, eg. 4 cents.
//
// The top-down solution is also possible (memoization), but can causes
// stack-overflows for large inputs.
//
function findPermutations(coins, n) {

    // The 2-dimension buffer will contain answers to this question:
    // "how much permutations is there for an amount of `i` cents, and `j`
    // remaining coins?" eg. `buffer[10][2]` will tell us how many permutations
    // there are when giving back 10 cents using only the first two coin types
    // [ 1, 2 ].
    var buffer = new Array(n + 1);
    for (var i = 0; i <= n; ++i)
        buffer[i] = new Array(coins.length + 1);

    // For all the cases where we need to give back 0 cents, there's exactly
    // 1 permutation: the empty set. Note that buffer[0][0] won't ever be
    // needed.
    for (var j = 1; j <= coins.length; ++j)
        buffer[0][j] = 1;

    // We process each case: 1 cent, 2 cent, etc. up to `n` cents, included.
    for (i = 1; i <= n; ++i) {

        // No more coins? No permutation is possible to attain `i` cents.
        buffer[i][0] = 0;

        // Now we consider the cases when we have J coin types available.
        for (j = 1; j <= coins.length; ++j) {

            // First, we take into account all the known permutations possible
            // _without_ using the J-th coin (actually computed at the previous
            // loop step).
            var value = buffer[i][j - 1];

            // Then, we add all the permutations possible by consuming the J-th
            // coin itself, if we can.
            if (coins[j - 1] <= i)
                value += buffer[i - coins[j - 1]][j];

            // We now know the answer for this specific case.
            buffer[i][j] = value;
        }
    }

    // Return the bottom-right answer, the one we were looking for in the
    // first place.
    return buffer[n][coins.length];
}

// The boring stuff: parsing and printing.
//
function processData(input) {
    var lines = input.split('\n');
    var coins = lines[0].split(',').map(function (s) {return +s;});
    var n = +lines[1];
    var res = findPermutations(coins, n);
    console.log(res);
}

process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
    _input += input;
});

process.stdin.on("end", function () {
   processData(_input);
});


================================================
FILE: coin_change/solutions/coin_change_solution.py
================================================
import cPickle as pickle
import sys


def memoize(func):
    cache = {}

    def wrapper(*args, **kwargs):
        key = pickle.dumps(args) + pickle.dumps(kwargs)
        if key not in cache:
            cache[key] = func(*args, **kwargs)
        return cache[key]
    return wrapper


@memoize
def solve(coins, amount):
    if len(coins) == 0:
        return 0
    if len(coins) == 1:
        return 1 if amount % coins[0] == 0 else 0
    ways = 0
    current_coin, rest_of_coins = coins[0], coins[1:]
    i = 0
    while amount - i * current_coin >= 0:
        ways += solve(rest_of_coins, amount - i * current_coin)
        i += 1
    return ways


def main():
    coins = sorted(map(int, sys.stdin.readline().strip().split(",")),
                   reverse=True)
    amount = int(sys.stdin.readline().strip())
    ways = solve(coins, amount)
    print(ways)

if __name__ == "__main__":
    main()


================================================
FILE: factorial/README.md
================================================
**n factorial** (written as **n!**) is the number we get when we multiply every positive number from 1 up to n together. In this problem, *your code* will do the grunt work of computing the factorial.

# Problem Statement

Write a program that, given a number `n` from STDIN, prints out the factorial of `n` to STDOUT:

* If `n` is `0`, `n` factorial is `1`
* `n!` is not defined for negative numbers.

Example 1:

```
3! = 3 × 2 × 1 = 6
```

So given the input **`3`**, your program should output:

```
6
```

Example 2:

```
7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040
```

So given the input **`7`**, your program should output:

```
5040
```

# What are factorials good for?

Factorials can be used to calculate the number of permutations of a given set. Think—if there are 3 letters—**A, B, and C**, they can be arranged as: **ABC, ACB, BAC, BCA, CAB, or CBA**. That's *6* options because A can be put in 3 different slots, B has 2 choices left after A is placed, and C has only one option left after A and B have been placed. That is 3×2×1 = 6 choices.

More generally, if there are three objects, and we want to find out how many different ways there are to arrange (or select them), for the first object, there are 3 choices, for the second object, there are only two choices left as the first object has already been chosen, and finally, for the third object, there is only one position left.

So using what we know about factorials, we know that there are 6 options for arranging 3 items. **`3!`** is equivalent to 3×2×1, or 6.

To dig a bit deeper in to factorials and their role in permutations and combinations (which occasionally come up in interviews), check out [this article and its practice problems](http://www.wyzant.com/resources/lessons/math/precalculus/factorials_permutations_and_combinations).

# Hints

* The factorial function grows very fast. There are **3,628,800** ways to arrange **10** items.

* This problem can be solved in an [imperative style](http://en.wikipedia.org/wiki/Functional_programming#Comparison_to_imperative_programming) using loops—or in a functional style, using recursion. If you write a recursive solution, its worth reading up on [tail-call optimization](http://en.wikipedia.org/wiki/Tail_call) or watching the Coding for Interviews course lecture on recursion before if your solution's stack level goes too deep

* For help on reading from STDIN, see the [HackerRank environment help page](https://www.hackerrank.com/environment) under the "Sample Problem Statement" section.

![](http://i.imgur.com/ajyNlBd.png)



================================================
FILE: factorial/solutions/FactorialSolution.java
================================================
package solutions

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;


public class FactorialSolution {

  public static void main(String[] args) throws Exception {
    // read STDIN 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BigInteger n = BigInteger.valueOf(Integer.parseInt(br.readLine()));
    // write STDOUT
    System.out.println(factorial(n, BigInteger.ONE));
  }

  /*
   *  Factorial of n 
   *  @param  n   input
   *  @param  acc accumulator (tail call optimization)
   *  @return n!   
   */
  public static BigInteger factorial(BigInteger n, BigInteger acc) {
    
    if (n.equals(BigInteger.ZERO))
      return acc;
    else
      return factorial(n.subtract(BigInteger.ONE), n.multiply(acc));      
  }    
}



================================================
FILE: factorial/solutions/FactorialSolution.scala
================================================
package solutions

object FactorialSolution {

  def main(args: Array[String]) = {
    val input = io.Source.stdin.bufferedReader.readLine()
    println(factorial(input.toInt))
  }

  def factorial(n: Int): BigInt = {
    
    def calc(acc: BigInt, n: Int): BigInt =
      if (n == 0) acc
      else calc(acc * n, n - 1)

    calc(1, n)
  }

}


================================================
FILE: fibonacci_dynamic/HINTS.md
================================================
## General Approach

1. Find the base case(s),
2. Have your function recognize the base case(s) and provide a solution,
3. *Recognize if you have already solved this input,*
4. Recursively define a solution to the sub-problem for other inputs,
5. Call your function on the input and print the result to STDOUT.

## Things to think about

* If your language doesn't support tail call elimination, you might want to use an iterative approach this time.
* How will you recognize if you already have a solution for a given sub-problem?
* How do you plan to store your previous solutions? Are there major trade-offs for using different data structures in this case?


================================================
FILE: fibonacci_dynamic/README.md
================================================
This question expands on our earlier Fibonacci Lite challenge. While the goal
of Fibonacci Lite was to understand recursion, this challenge is about solving
problems efficiently with dynamic programming.

The difference in this challenge is that each test case will consist of many
inputs instead of just one. Furthermore, we're allowing larger values of *n*.
You'll need to use dynamic programming to solve all the inputs without running
out of time.

So, given many numbers *n*, print the *n*th value of the Fibonacci
sequence for each of them, in order, on their own line.

Here are the definitions of the sequence again:

> *F<sub>n</sub> = F<sub>n - 1</sub> + F<sub>n - 2</sub>*

Using the following seed values:

> *F<sub>0</sub> = 0, F<sub>1</sub> = 1*

## Examples
Input:

```
1
2
3
4
5
6
7
8
9
10
```

Output:

```
1
1
2
3
5
8
13
21
34
55	
```

Input:

```
41
8
22
```

Output:

```
165580141
21
17711
```
## Input Format and Restrictions
Each test case will consist of several positive integers *n*, each on their own line.

The inputs will always satisfy the following restrictions:

* *F<sub>n</sub>* < 2^**64** - 1,
* 0 <= *n* < **100**


================================================
FILE: fibonacci_dynamic/SOLUTION.md
================================================
# Fibonacci Sequence with Dynamic Programming
## A.K.A. "Fibonacci Returns"

There are two major differences between this version of the Fibonacci exercise
and our previous "Lite" version. Both differences are to accommodate larger
inputs, as well as computing multiple values of *n* in one test case.

In pseudo-code, the solution works as follows:
    
    memoize the seed values

    for each value of n:
        if n is memoized:
	    return memoized value of n
	else:
	    result = largest memoized value of n
	    n_minus_1 = memoized value of (largest memoized n - 1)

            i = largest memoized n
	    
	    while i < n
	        n_minus_2 = n_minus_1
		n_minus_1 = result
		result = n_minus_2 + n_minus_1

		i++
		memoize(i, result)

	    return result

### Iterative Computation of the Sequence

Our previous reference implementation used a naive recursive implementation, as
it closely reflects the mathematical definition of the Fibonacci sequence and
serves as a good introduction to recursion. However, recursive functions with
this many levels are inefficient in some languages (including Ruby), so we have
opted for an iterative solution this time around.

This will give much better performance in Ruby (and some other languages), as
we avoid the overhead of a number of function call equal to *n*.

### Memoization

This is where the dynamic programming part of the solution comes in. Memoizing
is a dynamic programming technique where the results of a computation for some
input are re-used when the program recognizes that it has already been
computed. This can result in huge performance gains if sub-problems reappear
frequently. But how does this apply to the Fibonacci sequence?

The key observation is that to compute Fib(n), one must also compute every
value of the sequence from 1 to n. If we save all of the results from these
computations, it means that we can retrieve any value of n that is less than or
equal to the largest we have seen thus far in O(1) time instead of O(n) time!

Furthermore, if we need to compute a value of n larger than we have seen
before, we still use our largest value of n and can start computing from there
instead of from Fib(1).


================================================
FILE: fibonacci_dynamic/SOLUTION.md.bak
================================================
# Fibonacci Sequence with Dynamic Programming
## A.K.A. "Fibonaccai Returns"

There are two major differences between this version of the Fibonacci exercise
and our previous "Lite" version. Both differences are to accomodate larger
inputs, as well as computing multiple values of *n* in one test case.

In pseudo-code, the solution works as follows:
    
    memoize the seed values

    for each value of n:
        if n is memoized:
	    return memoized value of n
	else:
	    result = largest memoized value of n
	    n_minus_1 = memoized value of (largest memoized n - 1)

            i = largest memoized n
	    
	    while i < n
	        n_minus_2 = n_minus_1
		n_minus_1 = result
		result = n_minus_2 + n_minus_1

		i++
		memoize(i, result)

	    return result

### Iterative Computation of the Sequence

Our previous reference implementation used a naive reursive implementation, as
it closely reflects the mathematical definition of the Fibonacci sequence and
serves as a good introduction to recursion. However, recursive functions with
this many levels are inefficient in some languages (including Ruby), so we have
opted for an iterative solution this time around.

This will give much better performance in Ruby (and some other languages), as
we avoid the overhead of a number of function call equal to *n*.

### Memoization

This is where the dynamic programming part of the solution comes in. Memoizing
is a dynamic programming technique where the results of a computation for some
input are re-used when the program recognizes that it has already been
computed. This can result in huge performance gains if sub-problems reappear
frequently. But how does this apply to the Fibonacci sequence?

The key observation is that to compute Fib(n), one must also compute every
value of the sequence from 1 to n. If we save all of the results from these
computations, it means that we can retrieve any value of n that is less than or
equal to the largest we have seen thus far in O(1) time instead of O(n) time!

Furthermore, if we need to compute a value of n larger than we have seen
before, we still use our largest value of n and can start computing from there
instead of from Fib(1).


================================================
FILE: fibonacci_dynamic/generator/generate_cases.rb
================================================
@memos = Hash.new
def fib(n)
	if @memos[n]
		return @memos[n]
	else
		i = 0
		k = 0
		last_1 = 1
		last_2 = 0
		while i < n
			last_2 = last_1
			last_1 = k
			k = last_1 + last_2
			i += 1
		end
		
		@memos[n] = k
		return k
	end
end

# These are my selected inputs for the problem; they are ordered by increasing
# difficulty of n, and includes the "edge case" of n = 47, the largest value in
# the Fibonacci sequence that will fit in a 32-bit integer.
selected = [
	[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
	[40, 2],
	Array.new(1000) {|i| i = rand(1..99)},
	Array.new(2000) {|i| i = rand(1..99)},
	Array.new(3000) {|i| i = rand(1..99)},
	Array.new(4000) {|i| i = rand(1..99)},
	Array.new(5000) {|i| i = rand(1..99)}
]

selected.each_index { |i|
	fmode = File::WRONLY | File::CREAT
	path = "fib-cases/"
	input = File.new("#{path}input/input#{sprintf("%02d", i)}.txt", fmode)
	output = File.new("#{path}output/output#{sprintf("%02d", i)}.txt", fmode)

	input.write(selected[i].join("\n"))
	selected[i].each {|n| output.write(fib(n).to_s + "\n")}
	puts "#{i + 1}/#{selected.length}"
}


================================================
FILE: fibonacci_dynamic/solutions/fibonacci_dynamic.rb
================================================
# Initialize an empty hash to memoize values into
@memos = { 0 => 0, 1 => 1 }

def fib(n)
    # Check if we already have a result for this value of n
    if @memos[n]
        return @memos[n]
    else
        # Otherwise, compute the result iteratively
        i = @memos.keys.max || 0
        k = @memos[@memos.keys.max] || 0
        last_1 = n < 2 ? 1 : @memos[i - 1]

        while i < n
            last_2 = last_1
            last_1 = k
            k = last_1 + last_2
            # Memoize the result for later
            i += 1
            @memos[i] = k
        end
        
        return k
    end
end

ARGF.each_line {|n|
    puts fib(n.to_i)
}


================================================
FILE: fibonacci_dynamic/tests/input00.txt
================================================
1
2
3
4
5
6
7
8
9
10

================================================
FILE: fibonacci_dynamic/tests/input01.txt
================================================
40
2

================================================
FILE: fibonacci_dynamic/tests/input02.txt
================================================
91
67
5
57
7
5
80
98
99
68
27
33
61
82
18
1
38
44
75
62
5
90
46
17
48
36
61
64
38
84
11
14
89
36
16
47
73
61
55
84
40
59
51
78
56
62
28
31
31
29
17
2
59
80
3
79
12
58
72
12
23
5
14
95
12
73
70
1
82
48
8
4
40
61
35
40
1
53
84
92
45
74
60
80
94
85
88
96
32
44
1
50
90
54
33
1
63
70
42
48
18
74
39
61
40
91
58
64
36
1
43
50
60
3
66
93
46
91
26
77
7
19
59
82
16
69
98
99
21
68
4
42
15
61
53
90
44
65
97
45
7
25
93
19
54
66
41
42
91
89
22
11
98
34
85
59
62
23
72
19
86
23
37
81
32
39
97
35
67
77
51
14
61
75
31
31
83
26
59
51
34
89
54
34
47
86
34
55
6
30
67
82
86
78
4
6
2
88
5
57
77
55
8
91
12
88
95
27
42
46
41
53
93
7
10
95
89
89
89
42
92
98
92
58
43
59
11
36
27
17
53
30
14
16
48
94
38
79
30
31
60
22
37
37
8
14
92
11
90
65
84
31
6
87
63
39
27
97
96
46
34
8
79
25
64
11
20
44
36
41
97
11
93
93
4
22
20
66
6
1
3
82
89
65
58
40
9
92
12
37
42
35
92
67
44
59
78
5
31
87
15
49
95
28
91
50
50
38
46
4
60
26
25
74
24
43
57
50
68
69
19
99
86
33
22
89
40
25
85
63
87
54
13
16
73
20
57
19
72
81
1
90
35
44
52
80
13
18
81
72
33
29
33
91
6
91
80
52
41
1
48
36
50
9
22
4
98
39
16
74
20
31
10
11
83
16
8
44
23
16
54
41
29
16
67
84
75
28
99
61
19
21
9
76
48
33
92
1
22
70
27
65
8
23
78
20
70
85
41
74
34
80
63
28
15
98
12
7
91
47
46
18
22
5
25
46
92
95
15
11
39
77
68
15
5
68
89
88
68
97
54
38
2
66
86
30
33
13
46
8
32
22
81
52
25
82
41
68
4
37
50
27
89
16
98
76
65
75
35
49
38
10
11
8
73
76
23
7
42
58
13
66
25
25
37
54
65
50
49
24
33
34
95
21
79
21
15
59
55
91
84
87
10
4
5
91
24
74
97
43
34
5
16
23
69
90
77
29
97
27
76
58
4
73
28
80
31
4
61
16
87
98
22
9
41
80
59
68
18
37
53
76
95
78
3
2
2
45
54
45
71
66
69
42
20
67
26
4
25
64
60
8
57
50
77
55
75
76
24
22
16
37
76
46
43
47
47
88
12
45
81
19
90
98
65
64
37
35
71
33
38
55
5
70
8
67
28
1
63
76
36
23
97
52
7
92
23
16
33
99
53
80
24
58
81
78
84
58
53
9
60
92
86
54
93
83
15
90
91
38
86
96
4
74
16
44
58
71
32
54
21
95
23
56
45
91
44
33
48
36
72
48
36
70
7
52
73
33
60
46
44
29
37
66
6
50
27
44
36
94
54
68
41
95
18
67
71
6
69
6
55
28
93
61
34
65
81
17
22
65
48
39
72
91
71
75
28
55
83
96
86
52
10
46
51
59
73
50
79
54
35
5
77
85
92
28
29
68
27
61
18
37
31
9
97
40
5
40
56
49
78
84
75
62
34
92
56
11
72
95
63
79
63
1
82
63
51
70
45
1
36
26
21
7
65
90
35
40
21
65
68
42
38
9
76
70
66
13
24
69
11
78
30
18
94
58
27
45
86
57
30
35
27
6
9
23
99
33
96
40
80
90
67
21
62
86
6
48
81
30
38
42
63
86
80
26
11
30
64
22
41
43
78
8
94
57
63
53
26
33
17
19
52
22
45
22
77
49
35
3
38
85
7
29
27
33
21
16
85
18
55
26
27
17
4
9
22
49
66
22
36
10
57
27
15
96
62
29
9
13
83
49
2
57
55
22
77
42
84
80
67
83
91
9
25
67
23
74
97
49
91
91
53
45
92
72
50
4
64
11
40
65
87
45
88
85
63
42
47
91
92
25
11
80
43
18
29
67
74
19
82
86
38
66
39
37
27
94
33
64
8
52
26
46
46
10
28
20
31
71
38
31
94
26
73
76
65
20
37
47
2
6
64
36
58
30
54
91
17
96
44
52
56
50
9
27
38
48
95
96
7
97
62
16
30
80
72
82
30
64
64
69
79
89
18
77
58
44
73
48
29
33
73
51
88
19
31
91
13
60
57
50
6
7
67
14
2
84
36
64

================================================
FILE: fibonacci_dynamic/tests/input03.txt
================================================
74
75
26
47
82
11
12
87
75
80
51
59
89
11
96
44
60
60
61
13
58
6
85
95
11
26
82
25
89
91
19
99
2
17
49
19
76
91
61
53
68
79
72
73
96
39
24
8
17
81
69
33
86
13
25
65
65
83
3
47
50
9
56
66
3
72
35
72
98
71
56
27
84
3
43
93
61
81
6
94
86
38
50
77
43
7
60
56
57
63
55
34
10
21
85
58
5
78
30
78
75
50
44
58
59
35
97
65
50
20
85
17
19
54
89
39
38
37
30
37
60
62
47
14
91
52
70
16
31
14
28
1
93
29
62
29
53
97
63
79
25
15
12
28
22
15
86
27
93
82
42
29
33
99
64
10
57
44
52
61
61
69
45
83
10
19
85
96
13
98
96
35
54
14
33
25
54
11
38
8
9
45
87
43
59
4
99
17
4
33
27
75
25
61
80
47
36
68
65
40
48
91
47
43
57
6
12
11
7
72
32
65
35
56
52
49
7
44
99
52
17
91
33
12
76
14
71
81
93
13
89
24
73
80
57
42
57
78
74
72
61
16
73
25
62
3
62
88
81
21
94
39
88
54
54
32
71
70
5
69
66
65
35
45
18
10
8
49
67
18
36
2
83
41
47
56
24
11
74
65
28
1
91
71
61
29
54
29
8
28
4
71
65
6
48
93
61
18
21
39
71
87
9
58
10
65
31
78
83
97
2
66
25
98
22
99
95
44
91
82
57
37
98
72
72
81
3
25
2
41
19
19
93
65
41
44
72
62
72
34
28
28
36
96
46
23
27
11
24
67
83
21
9
99
34
76
98
19
1
45
41
87
60
92
50
68
96
9
58
5
66
71
63
38
99
12
82
86
34
86
64
16
82
91
62
84
29
77
41
4
56
78
92
51
42
53
41
90
84
85
81
93
24
65
88
68
94
23
81
10
33
51
21
46
41
76
1
29
25
51
95
26
25
25
77
30
80
91
61
72
67
82
16
30
53
95
80
61
27
45
20
75
43
50
87
43
15
1
5
47
4
82
52
39
37
42
73
26
11
36
10
75
64
65
15
31
21
32
42
60
91
77
40
98
70
44
46
61
28
5
35
18
14
61
71
62
63
62
47
87
51
58
97
71
19
64
95
85
31
14
19
63
9
94
16
20
54
78
7
6
73
43
86
97
41
64
72
53
67
19
29
64
50
62
46
39
22
21
42
20
98
71
34
61
82
68
17
75
53
40
46
31
64
58
16
33
94
31
6
49
9
90
43
43
68
70
8
68
66
88
46
75
15
13
56
83
20
94
66
44
4
95
98
36
27
40
61
7
84
83
35
9
95
51
89
56
63
51
75
49
61
91
61
90
39
17
26
56
5
34
39
88
78
61
60
44
75
2
27
43
26
85
40
31
17
77
83
67
88
58
94
77
62
59
61
18
46
64
47
96
80
43
68
1
64
29
1
75
65
86
45
6
8
71
94
89
83
22
24
45
46
15
24
71
21
15
58
37
8
36
62
51
33
88
30
28
4
66
69
8
39
36
49
43
4
77
41
86
44
20
96
57
22
51
5
77
44
21
36
65
31
57
87
57
51
50
79
45
62
41
62
12
35
50
89
92
66
60
91
33
9
83
84
10
83
27
42
61
57
31
69
96
67
13
5
21
40
1
50
37
1
38
42
81
75
84
36
30
47
71
1
29
74
89
52
61
32
9
92
52
27
59
2
38
48
52
64
91
99
23
28
9
94
1
56
33
87
40
32
74
70
19
2
40
9
2
84
36
52
77
77
67
76
62
84
60
24
19
93
32
86
20
44
7
17
87
35
10
79
62
55
84
65
57
62
28
55
13
77
12
86
90
7
69
3
47
57
64
21
91
15
3
24
75
11
98
85
47
84
14
80
63
33
73
26
16
48
57
12
92
88
17
37
52
73
67
21
49
28
20
24
61
85
69
53
92
46
33
23
74
56
73
78
99
51
49
69
42
85
90
45
60
3
76
92
31
23
24
42
12
62
85
99
51
65
75
3
84
26
49
25
47
66
14
30
10
87
85
19
85
18
77
56
84
85
62
54
27
63
10
99
61
31
27
55
17
35
60
66
3
65
71
84
88
37
77
66
35
2
82
15
71
77
49
95
4
45
38
48
7
72
12
12
81
98
64
20
29
71
98
30
98
29
11
17
1
40
16
48
24
35
14
64
82
6
71
50
17
69
80
82
4
63
88
4
64
18
17
15
10
95
84
37
57
28
50
43
8
82
71
17
94
21
27
82
95
81
20
8
89
65
75
75
74
43
11
67
61
8
39
9
6
98
26
29
51
96
2
62
28
68
75
93
55
43
89
51
53
70
65
56
93
36
86
15
98
62
30
70
43
6
2
67
16
68
95
79
21
67
68
20
20
30
35
24
79
64
15
83
55
74
63
28
42
76
99
10
64
47
69
86
37
70
20
78
51
3
89
38
70
83
72
40
69
54
47
24
78
42
13
87
58
36
1
61
15
26
50
3
44
72
66
68
67
35
8
58
13
49
42
91
53
36
1
98
9
81
5
39
1
66
28
25
45
37
11
37
50
50
38
30
67
33
40
50
9
89
97
87
84
25
21
39
59
92
30
9
59
64
39
48
16
37
98
62
28
98
29
90
77
91
65
59
27
79
49
46
62
69
26
92
32
54
91
9
94
18
55
33
8
87
16
71
42
10
88
28
32
21
64
1
87
46
74
33
4
48
58
34
46
28
95
76
12
49
7
30
53
13
64
46
19
16
3
71
94
76
47
68
33
28
76
91
97
6
6
48
67
93
80
15
24
38
76
79
44
61
10
71
97
48
33
6
21
58
37
47
51
1
2
95
75
19
35
40
5
41
41
32
66
34
39
7
58
7
16
35
15
79
11
67
52
80
98
17
94
21
63
60
80
56
7
77
82
22
30
74
60
77
83
12
48
93
29
60
12
23
62
56
69
28
21
52
81
1
14
1
64
10
89
78
26
96
9
31
47
60
21
31
76
20
25
16
92
68
90
40
51
7
24
79
60
57
60
31
36
48
87
80
22
72
28
65
74
47
29
91
97
93
74
66
56
27
1
4
91
97
32
21
23
66
72
46
22
56
33
63
34
14
18
49
66
56
19
15
54
77
25
18
28
33
71
42
46
8
16
40
89
49
63
67
96
11
71
96
8
74
39
32
70
97
6
40
74
57
29
13
69
38
93
26
52
52
38
60
41
60
60
53
98
78
8
84
39
68
97
61
87
1
56
63
47
99
38
49
44
34
26
10
39
96
63
25
87
36
20
69
8
51
36
17
34
28
49
82
95
60
66
4
33
58
62
42
1
69
24
84
2
23
60
98
90
16
91
38
68
44
48
14
17
41
94
92
7
3
12
57
40
81
23
10
20
18
53
77
59
82
57
82
75
90
69
71
6
9
12
31
74
37
81
3
63
37
28
85
40
41
23
21
26
23
59
18
24
36
2
28
55
20
4
84
53
46
65
80
9
87
38
50
16
15
24
72
40
24
72
99
46
74
36
81
1
1
26
18
86
45
5
69
31
64
83
66
60
29
68
59
46
34
34
60
14
64
96
39
33
13
15
89
40
86
38
52
1
26
61
33
78
21
31
94
38
93
72
91
11
95
72
29
83
74
46
20
95
40
22
4
37
4
29
7
38
90
48
62
3
35
45
18
57
82
91
92
94
71
13
2
93
16
54
79
47
50
59
75
83
9
66
29
54
61
96
61
6
77
8
93
76
61
49
39
65
9
33
18
48
48
5
87
96
83
47
77
50
26
37
8
49
22
82
42
76
79
21
59
61
90
69
83
73
38
91
11
29
58
13
66
70
84
91
56
31
32
56
16
19
6
77
95
90
48
70
14
76
46
4
49
3
12
12
99
23
64
24
13
30
72
17
53
69
51
68
4
18
59
50
22
65
25
23
44
94
31
21
2
34
87
33
36
34
21
13
94
33
32
54
72
36
36
92
91
77
7
21
25
93
40
3
42
47
87
82
34
25
66
45
53
74
48
48
38
18
79
27
66
86
25
25
41
20
54
79
39
10
21
48
84
8
93
30
67
21
59
64
37
74
57
17
29
42
38
21
49
50
64
50
4
28
14
90
31
64
57
46
11
38
61
49
22
97
3
20
78
8
26
22
75
45
79
35
84
71
94
71
16
58
2
78
11
66
60
64
12
13
38
31
61
23
13
72
69
21
77
57
31
4
13
40
52
10
23
35
29
83
89
87
38
39
35
11
92
19
35
58
15
52
11
36
76
8
3
15
61
11
54
76
66
9
14
47
83
57
31
52
81
44
59
3
30
35
54
85
74
20
25
8
15
75
50
30
60
9
59
69
65
22
63
2
7
30
73
55
87
34
22
74
29
73
5
58
78
87
3
44
31
59
1
51
59
88
26
40
53
32
45
12
88
74
95
41
45
50
88
67
47
47
33
91
40
61
82
11
86
72
97
14
86
16
96
66
76
98
62
9
30
30
94
83
51
58
52
8
12
90
85
49
18
24
34
10
74
9
59
61
32
16
34
77
25
8

================================================
FILE: fibonacci_dynamic/tests/input04.txt
================================================
71
43
53
13
19
39
34
16
5
21
62
89
73
59
16
49
38
72
49
19
57
84
45
81
76
61
64
4
53
11
18
98
90
64
47
18
62
28
65
25
29
55
51
47
2
69
56
83
56
33
23
86
35
20
31
97
71
56
85
90
79
72
8
56
27
48
55
97
58
74
79
83
81
60
13
29
23
67
34
73
54
88
76
42
20
47
3
41
31
23
78
16
75
38
30
1
58
40
27
42
84
61
4
77
69
17
30
19
27
82
67
21
80
15
48
80
37
88
50
90
59
66
13
65
89
48
44
52
12
15
30
81
77
28
22
58
78
72
72
19
3
10
53
61
29
91
33
52
43
23
54
2
68
2
45
82
4
42
44
25
41
43
93
75
14
38
64
91
88
34
78
59
41
18
6
26
34
6
30
65
39
31
95
11
21
43
44
94
56
36
89
59
30
85
55
71
61
44
16
31
80
7
13
78
50
3
82
49
89
62
93
34
14
40
55
15
40
1
70
43
30
10
23
23
27
99
72
98
19
34
92
25
23
64
32
3
6
44
10
87
22
27
2
2
64
66
40
85
21
50
75
39
50
46
23
25
43
44
58
20
78
10
80
20
78
42
94
47
47
43
8
43
38
12
80
58
9
47
22
64
72
24
82
50
29
15
57
24
38
58
51
84
7
59
12
92
55
42
7
38
97
93
28
59
51
9
30
50
32
47
40
53
48
26
38
97
8
3
40
20
9
88
50
43
18
89
75
17
73
47
92
30
62
15
26
23
37
1
62
24
75
86
5
56
50
7
3
51
42
80
14
36
79
64
92
38
85
87
81
40
38
51
35
66
10
74
55
53
56
55
36
8
45
62
4
98
56
27
45
33
19
9
95
96
4
96
57
32
39
22
2
49
74
33
78
48
33
64
88
88
32
85
99
86
91
78
35
8
83
39
94
73
78
33
64
66
31
14
7
87
13
78
41
72
58
93
55
61
42
96
4
23
55
70
69
95
82
63
90
2
57
1
35
67
39
3
47
65
28
18
11
69
31
89
47
49
6
11
24
59
1
99
34
79
32
69
73
23
14
66
64
40
77
17
35
97
73
53
33
44
74
58
33
74
84
24
12
95
17
14
56
37
46
73
39
9
69
11
25
90
69
78
98
52
74
78
36
57
52
19
55
52
54
97
14
52
18
54
71
1
14
98
76
70
63
5
65
29
42
26
43
43
76
83
43
48
84
81
28
68
61
49
95
49
67
68
41
34
76
71
57
96
88
40
88
58
9
48
68
21
29
73
22
15
77
89
94
94
61
81
68
14
33
98
75
9
64
69
67
64
95
84
15
3
22
19
61
26
81
97
48
62
69
46
21
95
76
69
48
53
74
92
39
52
63
46
96
40
86
3
22
60
35
15
2
17
88
68
79
43
72
64
66
43
96
24
14
36
59
90
29
65
89
27
12
73
32
3
73
81
57
57
3
78
57
6
77
64
93
20
65
67
16
74
37
41
12
88
94
43
64
15
59
47
17
66
23
2
4
81
25
24
29
37
58
34
38
5
96
26
98
3
75
45
12
31
8
54
23
6
28
24
74
22
4
62
36
95
33
61
9
95
86
82
41
88
32
42
13
28
93
26
75
53
92
44
78
92
43
24
73
62
11
26
76
99
73
98
84
26
4
38
66
10
95
28
44
73
65
23
65
59
25
39
46
45
18
18
32
10
56
52
89
76
9
94
79
33
61
98
34
94
71
25
48
9
90
48
53
11
29
73
65
73
27
28
73
85
27
67
63
38
58
37
39
67
60
87
61
87
13
32
81
78
13
72
3
13
17
54
71
68
40
56
20
29
39
1
78
19
76
48
27
20
59
43
8
62
82
83
88
36
7
65
90
9
22
61
50
48
91
50
1
27
59
40
25
58
69
54
40
72
82
97
37
10
61
97
57
4
60
30
99
5
80
57
17
2
2
24
62
58
38
52
62
33
38
25
27
12
70
46
9
59
88
8
40
44
84
48
88
14
63
34
85
58
7
24
90
26
93
9
4
49
35
9
37
54
65
55
26
13
7
95
62
44
83
10
2
39
54
4
52
76
91
82
75
55
48
22
52
67
25
28
81
73
47
52
62
97
70
97
78
15
79
90
30
65
55
82
98
35
83
8
99
67
53
82
77
24
40
61
85
60
4
20
14
95
37
23
38
35
2
90
66
37
22
78
22
2
92
21
87
27
12
87
31
80
55
76
64
2
59
48
32
4
84
30
37
42
65
65
5
84
3
67
82
75
13
57
68
97
40
54
52
89
45
48
98
71
31
68
40
82
97
85
17
65
25
67
3
93
74
90
11
85
91
49
39
35
9
11
44
78
93
51
54
55
68
58
87
97
33
89
78
41
43
64
7
46
81
21
57
60
62
94
80
54
13
47
60
87
5
30
21
41
48
42
91
69
98
26
31
45
62
13
94
48
26
45
8
91
23
28
40
35
3
40
78
72
22
44
28
76
9
31
68
64
96
30
11
76
31
68
47
10
59
88
51
49
27
45
10
59
16
89
45
52
94
40
20
89
14
17
98
7
90
56
21
56
9
42
16
2
69
59
63
79
41
97
35
38
46
9
29
90
10
38
93
92
98
88
12
54
58
1
12
74
45
40
64
47
81
77
95
92
73
60
28
98
75
8
33
54
21
86
80
96
98
73
89
46
70
68
67
39
87
40
21
69
35
10
95
36
95
85
56
17
42
91
49
90
90
78
84
14
83
50
65
13
14
77
31
86
3
21
76
62
21
79
78
89
97
91
82
13
51
44
53
38
19
71
1
65
98
78
66
23
92
23
80
82
37
26
22
20
10
85
3
12
58
96
16
82
60
8
27
38
25
71
96
26
93
99
84
7
14
17
94
92
81
95
33
21
98
55
3
92
89
37
21
88
50
65
66
96
74
19
7
27
76
95
4
31
46
51
99
65
48
11
28
72
46
54
80
77
95
63
80
98
65
66
2
77
79
91
15
89
91
84
41
13
35
16
48
2
50
68
12
61
32
46
24
3
1
66
70
79
67
51
59
91
69
27
49
59
93
12
25
4
72
57
17
53
10
13
91
40
85
53
45
82
68
29
83
98
8
32
10
60
66
49
49
82
38
61
75
97
36
12
40
77
92
65
42
43
65
34
36
70
65
56
92
50
91
82
56
85
34
49
31
38
80
63
57
54
74
27
27
81
16
19
95
51
80
46
4
73
72
25
49
93
48
66
7
82
83
20
80
1
7
2
92
96
80
42
91
3
22
58
62
2
15
29
30
21
13
16
62
21
66
59
14
5
33
16
32
7
7
17
68
2
24
52
99
97
46
77
31
57
56
97
39
77
46
42
82
64
77
3
71
95
43
78
99
51
71
72
22
80
7
75
8
22
83
53
59
87
89
90
98
64
55
22
3
24
66
72
50
68
42
13
21
47
79
97
79
46
83
54
68
43
95
11
11
95
50
98
58
88
11
80
3
16
55
44
82
50
4
63
90
72
17
23
30
8
71
55
51
24
40
52
14
26
13
89
13
58
81
77
72
73
89
3
48
63
22
27
89
33
9
63
51
57
83
84
20
5
17
7
10
11
45
24
62
47
39
84
52
57
10
51
44
64
74
91
85
21
65
84
64
44
74
3
23
82
36
18
80
91
44
58
78
66
17
63
57
35
24
89
46
95
26
13
87
53
72
79
66
77
82
58
72
3
84
12
38
35
68
37
4
77
88
12
76
23
90
83
61
87
99
6
42
75
20
43
56
1
51
19
50
22
57
62
55
80
51
27
49
85
53
99
8
49
97
6
2
55
85
27
44
32
36
40
28
7
42
35
94
9
19
17
74
93
91
16
95
52
75
3
33
81
41
27
86
70
51
18
59
81
3
15
43
88
26
57
63
70
35
23
46
86
8
63
25
1
87
85
24
11
86
18
70
44
42
69
37
98
49
61
27
25
29
60
30
36
68
42
39
27
2
49
69
76
33
22
11
73
33
98
37
50
56
98
99
83
34
48
53
57
31
87
55
80
93
55
56
75
19
99
81
30
59
21
41
87
78
71
8
73
95
45
8
17
63
3
23
35
14
41
6
32
28
36
31
55
94
21
71
15
76
45
95
14
88
13
56
82
39
22
84
15
14
47
66
88
17
67
89
61
22
36
41
32
66
4
59
75
56
38
94
33
16
58
25
87
85
17
79
1
41
99
94
94
80
36
69
16
61
96
40
57
12
88
4
24
41
4
14
48
47
37
24
13
29
45
49
23
70
72
30
24
36
76
98
11
78
25
9
41
13
80
94
8
65
66
56
95
9
7
11
60
60
88
63
83
93
73
81
4
29
17
88
55
96
40
19
3
58
10
37
29
7
61
61
29
52
51
8
90
48
12
92
85
47
17
59
88
44
74
34
44
2
61
6
84
68
82
71
85
97
20
38
79
32
47
52
7
65
70
86
6
39
84
52
43
82
5
84
81
47
40
39
64
1
16
69
74
51
1
67
81
81
42
98
73
14
99
76
93
87
15
1
63
47
2
79
89
43
21
45
70
6
27
88
92
39
52
99
71
9
17
57
4
85
54
82
21
61
4
79
51
29
32
92
51
39
15
43
60
36
59
50
84
57
27
66
88
5
72
68
56
83
24
96
23
72
3
35
20
43
84
37
23
17
28
19
37
71
85
36
99
65
56
43
14
56
1
50
61
89
53
63
31
60
93
17
52
6
56
94
50
40
6
14
6
89
10
18
90
86
86
92
35
39
6
91
60
46
60
61
28
73
56
54
69
93
17
66
76
13
89
38
81
78
40
28
56
29
18
1
89
88
34
95
19
64
81
54
2
32
94
82
74
82
68
96
46
92
21
69
48
34
21
32
97
82
64
4
47
61
35
79
99
56
23
79
66
9
22
27
3
68
59
56
47
25
45
22
82
67
58
16
23
53
38
75
41
16
24
36
40
42
49
30
90
25
78
4
51
93
49
36
89
58
81
16
5
49
37
30
93
44
5
48
88
48
91
79
72
99
31
3
67
79
74
94
31
88
27
93
23
81
16
48
14
30
21
22
49
44
36
94
10
78
79
56
38
72
27
58
80
20
96
7
36
55
38
72
14
43
11
66
3
11
35
52
24
51
45
46
82
62
26
10
7
85
22
43
98
81
70
9
18
52
3
51
88
82
89
13
8
93
47
39
98
73
85
62
51
53
58
82
81
14
3
57
51
14
8
48
87
9
23
41
77
93
47
40
76
10
43
2
74
56
65
11
47
20
7
36
73
36
49
84
11
42
67
11
21
74
50
92
47
45
35
49
66
47
72
27
42
56
26
5
59
18
6
32
41
66
19
29
11
77
68
28
33
54
14
53
33
72
19
57
80
40
59
96
54
81
27
43
49
8
8
63
85
56
93
29
36
64
14
62
65
83
99
17
73
54
86
61
62
4
37
77
65
55
78
97
79
6
75
63
48
44
90
7
14
69
18
66
23
40
8
55
55
71
72
34
76
12
36
4
85
37
68
33
32
91
97
94
87
57
58
86
27
51
51
70
62
62
24
58
7
39
88
81
10
34
33
94
44
55
84
82
94
51
81
25
7
72
9
92
38
39
39
86
56
21
36
84
14
3
22
94
26
2
51
3
81
35
4
54
60
86
75
59
1
39
43
43
45
33
25
89
8
53
58
48
93
82
29
62
53
59
66
48
83
50
41
16
70
90
32
80
39
34
24
42
37
6
82
26
80
7
96
98
15
72
7
23
30
3
74
87
52
78
86
43
75
88
53
88
44
9
57
56
70
66
68
53
35
34
42
28
86
56
28
54
73
80
32
34
27
67
91
7
15
82
25
32
38
71
58
24
90
69
93
7
23
1
52
71
68
7
20
38
79
47
80
93
50
17
95
70
40
62
83
92
84
61
5
52
89
74
47
4
43
92
23
56
59
53
88
50
62
32
6
18
68
51
96
23
76
34
80
87
32
29
21
38
82
39
69
36
73
21
29
93
79
79
26
22
54
77
93
1
34
86
12
35
80
3
80
72
33
86
46
17
89
43
25
64
55
84
52
6
41
75
45
24
42
73
45
21
15
11
62
42
66
73
89
19
55
86
50
72
96
43
26
38
59
67
51
89
63
92
18
49
24
88
82
83
77
96
44
49
18
43
1
66
20
60
47
36
33
64
34
94
11
15
32
56
1
84
64
3
30
36
36
26
13
50
81
77
2
18
75
69
65
31
25
84
63
81
12
3
26
70
10
26
66
40
23
60
19
35
33
18
85
10
61
38
82
32
30
75
49
47
19
50
98
54
49
25
21
64
57
90
83
19
15
77
11
8
29
60
99
89
37
83
74
9
57
21
60
54
74
43
8
13
78
48
25
3
19
97
28
86
72
68
35
40
11
94
89
99
87
56
75
21
20
50
80
79
3
26
71
10
1
82
60
52
53
99
21
17
95
99
72
35
55
69
83
74
94
73
49
87
89
43
39
8
2
8
13
24
92
6
27
5
70
7
48
64
94
45
60
45
54
95
62
65
15
75
50
23
90
55
78
28
37
95
3
68
43
73
71
26
21
19
4
33
41
92
94
88
4
72
22
12
65
16
66
94
20
56
19
94
89
41
22
23
31
37
20
66
3
91
94
76
49
6
86
76
25
3
70
95
99
95
13
17
33
7
23
77
19
91
96
84
21
34
57
11
14
93
33
32
4
98
11
98
52
15
78
10
99
27
42
16
74
28
35
64
30
98
31
19
19
37
64
53
29
42
98
67
99
76
77
18
64
56
83
99
56
51
44
15
47
12
95
29
99
69
81
62
33

================================================
FILE: fibonacci_dynamic/tests/input05.txt
================================================
14
55
43
58
91
4
73
65
94
87
21
73
61
35
55
22
2
40
92
15
19
81
93
70
8
63
59
13
86
3
89
40
66
59
17
54
13
37
53
20
6
13
6
94
67
73
46
85
55
65
70
26
90
52
48
21
62
29
19
81
73
81
38
8
41
66
40
56
22
72
12
33
12
11
89
36
47
43
67
69
27
31
29
64
27
84
2
54
68
29
70
40
22
38
42
91
27
13
49
90
59
61
63
89
93
67
28
64
34
9
78
15
63
46
32
39
36
11
48
64
25
22
38
42
97
94
43
56
68
49
67
42
79
27
18
82
46
76
52
36
8
55
89
9
85
8
49
31
76
17
56
34
45
82
86
44
1
78
2
57
33
72
34
13
7
14
57
86
50
44
67
57
93
26
62
73
96
49
40
25
22
15
84
82
33
79
94
47
95
24
26
89
54
61
45
87
3
14
24
53
12
21
24
91
41
33
12
16
29
50
26
37
30
67
76
68
30
78
92
72
89
14
85
55
90
76
4
81
48
99
3
68
68
83
20
52
96
42
29
8
15
45
88
40
13
27
1
92
58
5
88
63
60
23
74
18
58
87
55
4
54
6
44
94
67
89
82
88
84
88
25
61
83
40
67
40
34
67
69
25
12
83
23
36
29
42
54
52
20
61
90
92
14
37
3
15
77
93
13
83
97
23
71
89
55
68
73
79
29
17
72
71
35
8
87
92
21
13
27
26
50
83
9
37
93
85
48
55
41
55
22
44
15
18
81
56
21
91
91
52
26
58
9
2
42
50
88
76
53
31
97
7
19
23
10
12
68
46
41
64
20
53
4
70
53
83
55
87
9
49
65
46
37
19
94
10
70
61
99
62
47
40
93
6
92
29
59
80
47
62
62
21
96
21
10
53
94
1
52
11
47
44
56
4
23
36
90
6
64
4
9
82
75
23
38
25
86
48
70
86
21
16
12
99
33
88
62
41
17
68
27
37
62
84
73
8
49
58
67
12
76
19
8
30
20
36
82
84
75
23
87
9
36
31
90
2
59
18
92
63
71
72
14
93
9
92
53
43
5
60
86
77
20
2
43
3
98
18
69
80
54
78
24
39
44
66
62
57
19
71
4
69
37
25
92
90
23
75
3
77
57
15
37
5
75
78
30
46
58
73
88
13
43
76
22
85
74
4
77
26
52
2
48
97
5
36
85
8
49
33
69
46
62
17
99
32
25
81
51
77
7
50
42
69
99
44
38
24
71
48
33
94
32
16
25
91
76
53
84
38
97
98
25
3
62
77
15
56
76
7
12
71
11
49
1
23
29
23
28
21
94
39
23
80
7
84
50
2
65
85
97
97
61
32
61
56
13
88
9
77
12
55
20
14
85
72
19
64
75
55
3
91
59
74
19
81
25
49
34
55
65
34
16
60
86
30
61
11
68
72
85
67
80
45
58
45
45
13
76
19
77
23
91
56
23
76
32
70
69
49
21
94
77
71
2
82
37
57
38
36
97
22
91
96
73
7
87
92
42
20
46
77
80
89
28
11
78
35
48
80
32
57
18
15
15
88
86
5
71
25
78
18
9
29
46
11
8
97
28
82
95
93
70
81
63
87
33
28
82
53
35
75
95
26
30
38
50
85
1
22
24
67
14
58
74
41
51
38
83
23
55
65
91
18
94
58
25
37
74
92
20
75
13
49
94
72
38
11
71
57
62
50
59
18
79
52
57
73
30
48
64
59
52
27
96
21
34
34
65
1
3
52
36
32
88
18
53
2
63
31
94
75
42
6
94
48
20
86
77
51
12
11
31
44
67
42
44
10
89
35
76
35
35
42
18
26
28
97
20
29
93
42
67
72
49
18
1
48
88
19
88
27
19
9
39
83
53
94
76
27
90
72
8
73
68
71
73
91
21
90
7
35
39
77
84
89
59
75
38
52
22
13
7
53
39
47
41
31
8
4
15
72
67
36
68
68
88
4
59
86
80
90
83
75
80
31
6
87
23
83
21
80
36
14
67
85
99
5
84
31
41
51
33
82
17
17
32
2
77
79
82
46
40
87
61
84
8
53
97
15
84
33
51
14
68
45
51
75
41
18
40
81
19
4
9
30
8
33
40
88
60
85
88
12
50
76
55
75
8
32
52
50
33
4
83
23
41
8
7
82
16
68
26
30
58
66
64
64
95
98
58
55
69
65
29
75
65
88
94
28
81
91
63
91
17
86
98
86
69
99
54
66
61
31
62
96
15
66
56
4
69
23
81
92
42
83
62
57
98
1
5
41
72
10
61
28
40
63
8
37
58
51
74
41
32
78
37
14
75
34
54
88
51
4
15
45
33
91
85
6
2
7
73
34
34
71
46
50
1
74
91
80
43
82
96
60
91
98
9
86
28
10
27
1
28
86
53
91
56
62
44
69
78
70
69
14
64
22
79
54
74
63
16
44
79
66
37
1
11
93
62
94
97
24
66
80
93
98
27
25
59
97
58
88
57
10
14
72
26
19
27
46
52
30
18
40
67
70
85
69
70
37
14
9
78
36
67
36
79
10
83
45
90
73
49
17
97
13
54
45
93
47
90
50
32
73
83
92
52
12
3
16
54
47
97
2
62
70
29
58
66
5
51
92
42
58
42
52
47
99
31
52
10
10
61
55
43
72
53
35
78
66
17
1
15
50
40
12
14
54
89
89
94
74
74
14
11
42
94
22
38
17
57
74
80
13
30
74
40
19
80
46
98
7
29
56
29
54
67
4
92
64
6
19
4
81
43
21
69
19
98
32
6
40
92
54
97
69
86
97
88
23
95
15
16
61
16
8
4
38
85
58
93
33
5
3
44
14
19
32
43
35
94
47
6
6
2
65
84
77
83
61
38
1
68
61
63
93
98
68
37
8
92
36
37
21
83
97
2
33
40
57
88
7
22
67
79
43
73
75
70
50
13
59
56
90
92
35
16
67
37
18
3
88
22
96
3
62
37
94
60
58
28
43
89
56
50
56
78
57
9
70
85
32
33
4
49
96
30
56
84
97
6
8
39
65
78
45
65
26
98
88
19
83
64
76
31
38
92
81
83
4
72
23
86
50
50
93
53
98
91
99
11
12
31
44
54
50
96
74
48
20
93
88
31
95
65
56
85
36
3
8
99
46
77
24
99
40
4
2
98
7
50
68
73
5
22
60
93
58
18
31
96
79
77
29
86
57
6
47
31
70
53
75
99
84
90
64
65
82
37
64
74
80
56
79
42
25
79
75
32
44
12
83
40
26
23
7
51
23
24
67
65
89
39
68
66
64
16
13
83
54
66
48
11
39
13
82
24
37
58
95
24
94
54
79
90
16
9
78
44
15
5
64
57
55
14
67
79
44
22
36
81
53
25
26
24
30
66
41
13
34
67
65
78
22
76
39
63
58
17
8
65
49
60
12
98
93
72
56
98
24
16
43
29
17
6
62
85
83
3
91
30
55
49
59
27
6
38
16
50
87
9
33
79
30
53
29
63
75
23
68
28
93
96
98
54
10
74
7
90
5
44
75
80
39
55
93
60
57
85
30
14
18
92
36
41
30
29
19
35
42
59
14
34
42
66
58
92
8
97
67
90
19
30
59
72
67
52
98
56
93
47
68
65
37
25
99
21
96
43
63
66
21
8
48
65
38
87
39
90
94
83
10
19
33
12
7
19
11
76
82
65
6
43
67
89
15
19
71
60
28
54
83
20
49
20
99
64
11
27
21
85
4
55
32
67
17
32
28
19
78
32
6
48
62
48
67
20
46
34
52
69
20
24
85
4
65
85
20
32
49
59
43
3
12
39
14
36
79
50
32
79
90
51
34
76
53
77
63
58
54
30
84
30
98
45
58
98
42
48
78
69
33
35
45
87
35
23
15
50
90
49
60
16
85
6
31
44
71
59
4
71
85
50
56
70
36
89
4
59
75
87
23
28
2
34
88
92
32
74
37
82
7
32
16
78
55
40
87
15
78
52
18
53
48
71
86
51
62
59
31
41
40
24
5
91
53
24
9
8
95
6
16
49
58
95
26
86
95
93
38
94
63
17
50
34
81
42
68
83
56
49
95
54
82
38
6
19
90
42
91
49
65
94
40
88
14
80
6
8
92
97
15
95
15
86
74
61
43
66
53
61
78
16
6
43
32
37
62
68
59
54
72
89
69
38
3
25
23
54
87
67
71
63
97
50
79
52
18
4
69
38
19
93
26
78
58
87
68
35
82
69
37
8
45
6
91
28
72
35
96
40
74
58
22
11
37
35
42
13
58
29
24
64
3
39
84
25
92
52
37
5
80
10
67
56
32
30
77
32
71
3
36
12
4
49
25
82
66
86
90
80
35
5
14
80
44
43
65
67
64
88
8
33
6
29
86
61
87
99
35
82
12
46
12
15
8
89
43
42
10
52
35
94
18
99
47
12
69
92
48
55
27
97
52
75
36
79
98
52
42
76
35
77
37
52
13
55
61
96
86
20
5
77
82
86
64
40
50
10
2
27
57
21
23
57
54
45
38
33
91
33
20
50
65
50
21
36
51
75
23
66
31
70
93
80
95
10
35
33
95
15
58
57
56
45
81
86
42
8
25
87
41
35
76
68
4
43
49
16
84
72
27
69
12
72
79
96
27
38
61
97
90
86
9
2
26
44
58
86
23
24
75
50
59
44
2
12
38
39
77
39
51
89
44
16
71
55
15
20
58
48
4
52
20
7
82
67
46
80
37
13
22
36
22
93
94
78
43
40
90
4
96
21
60
19
93
12
46
93
22
42
22
5
38
67
17
70
71
38
75
16
86
36
34
56
55
8
69
79
33
24
55
68
25
35
20
38
79
44
53
69
7
90
50
75
62
57
60
30
32
1
11
6
67
26
45
36
67
2
2
26
25
32
85
56
81
81
84
27
69
46
75
20
79
32
37
26
3
39
51
29
97
3
4
94
2
76
9
78
65
8
86
29
36
29
9
18
68
1
44
85
39
94
73
26
9
12
85
21
18
21
54
86
87
53
46
80
81
13
7
96
76
3
64
32
7
26
30
24
22
88
70
79
10
12
59
61
52
23
35
38
39
89
80
43
38
98
1
72
14
15
99
5
59
10
2
3
63
20
84
96
30
58
32
24
72
28
9
97
64
56
71
9
60
69
89
70
95
40
22
31
56
66
66
92
56
29
4
40
8
37
2
69
38
36
36
50
22
41
34
11
84
62
83
87
52
96
99
81
29
78
54
20
39
88
56
21
42
54
18
39
60
44
79
38
14
13
39
89
39
56
37
64
25
59
9
32
81
43
70
63
17
88
69
42
98
87
85
81
92
4
3
97
28
78
11
51
17
53
95
63
41
57
9
60
7
55
80
23
14
56
39
87
58
25
59
40
25
80
58
89
49
57
63
57
14
44
81
43
55
51
47
99
25
52
44
5
48
26
35
51
90
26
63
31
58
66
86
7
48
79
25
52
34
59
83
36
98
19
28
17
80
10
4
61
38
7
59
14
88
46
61
59
11
4
63
77
38
72
35
12
2
68
81
48
91
4
44
49
51
83
66
86
12
31
75
48
95
93
57
86
49
85
83
82
76
71
83
56
98
94
92
53
97
24
50
25
95
94
11
87
30
14
34
39
19
58
60
40
51
18
69
98
84
27
24
55
17
7
43
44
72
22
31
71
57
14
62
34
65
29
97
83
59
85
54
34
1
47
99
54
66
95
69
61
68
17
16
26
60
16
26
48
14
77
18
7
32
3
52
38
61
39
94
56
80
68
40
73
72
82
18
99
42
30
24
41
11
21
13
95
12
58
75
51
90
9
15
68
62
33
58
89
77
17
67
17
45
7
23
15
30
41
85
66
22
37
96
43
64
59
74
7
13
29
10
95
86
80
20
44
33
38
35
29
79
58
23
80
51
86
95
52
71
69
23
13
91
68
48
52
65
37
5
32
83
59
43
20
35
36
95
97
4
87
17
53
24
18
53
10
79
34
16
52
29
88
66
43
59
27
37
98
11
29
84
99
7
80
62
22
94
93
19
15
60
42
92
81
76
67
39
99
31
73
13
96
19
15
47
51
85
63
73
35
14
2
49
76
59
29
71
41
71
65
54
83
94
52
39
98
65
3
48
41
67
75
32
38
5
35
92
40
85
89
10
14
22
86
37
58
41
29
54
54
41
40
77
25
83
47
96
73
43
76
26
33
48
33
63
27
28
2
60
6
11
52
44
15
22
93
17
60
56
56
54
96
31
85
66
59
9
63
73
19
94
17
89
23
52
96
25
32
61
39
42
47
36
34
75
42
3
51
98
42
96
34
82
87
15
69
10
73
37
9
46
15
33
89
43
4
77
94
25
32
8
60
15
62
44
72
80
74
37
83
13
49
33
91
26
61
46
59
16
82
85
48
40
85
63
34
12
74
40
71
97
83
20
15
43
94
78
63
36
46
80
97
76
37
16
77
2
22
71
54
56
19
68
65
7
6
58
6
36
18
31
27
90
40
16
37
88
23
92
59
74
27
55
99
26
53
38
54
14
88
61
94
49
49
76
93
85
50
51
9
83
21
73
26
14
81
12
21
40
63
40
49
17
16
97
81
13
2
37
46
51
86
23
91
61
3
66
7
18
1
99
4
94
75
20
71
97
11
34
76
45
37
79
76
41
4
91
52
34
39
71
34
12
94
97
75
26
71
85
49
51
36
72
38
30
26
19
94
5
77
52
43
67
14
57
58
29
35
7
78
13
94
79
43
59
90
71
60
24
42
94
64
60
20
96
61
56
46
93
90
37
66
40
83
93
64
96
10
33
59
9
67
77
63
32
64
69
63
88
61
24
1
53
60
41
73
94
63
26
2
24
90
55
78
37
87
28
94
61
79
46
46
19
74
20
13
94
98
98
71
8
48
16
22
51
89
44
66
54
85
50
89
51
8
3
19
65
74
22
11
21
5
5
46
24
15
51
16
79
91
21
61
22
54
68
60
61
15
34
20
3
55
80
4
30
62
79
35
51
95
35
97
76
83
36
16
60
16
67
81
68
78
59
80
77
72
27
32
70
12
80
25
56
29
7
66
77
43
29
22
54
97
37
25
39
84
24
95
84
36
57
25
67
33
27
31
4
28
11
35
82
88
37
73
47
98
45
76
27
97
12
2
55
64
85
55
80
22
48
56
35
53
60
5
93
36
99
54
37
80
82
46
81
60
76
18
72
79
7
11
11
25
40
95
23
56
56
89
17
4
32
19
33
12
7
84
32
47
17
98
75
15
9
4
73
8
37
55
43
38
48
2
8
84
57
86
59
51
32
2
95
15
46
12
97
50
10
16
12
92
33
79
63
35
70
91
3
27
14
53
28
4
58
56
56
42
95
37
19
26
46
58
58
47
31
83
97
85
49
76
23
47
94
84
4
69
70
80
14
65
2
11
93
97
21
55
60
61
6
69
83
45
64
71
66
30
42
64
39
38
91
42
80
64
79
90
56
65
92
93
98
27
64
43
49
90
95
19
42
2
70
18
14
63
84
77
63
33
94
74
15
69
41
38
15
65
64
61
37
27
56
40
38
71
11
66
16
17
50
21
37
93
2
34
2
52
74
77
34
22
10
73
15
16
13
77
64
77
26
97
77
46
60
12
48
65
23
96
70
1
20
63
12
40
55
33
23
52
25
84
5
41
81
99
39
55
29
72
90
4
82
94
51
31
14
65
22
97
71
48
9
95
98
35
97
25
59
35
47
95
48
11
96
24
24
87
61
18
3
76
10
4
35
48
92
66
36
28
31
39
10
11
32
70
26
98
5
47
14
35
84
99
23
35
3
68
43
62
51
69
23
28
21
38
74
36
28
79
26
62
50
5
52
26
62
84
26
8
29
49
18
46
23
92
31
88
16
78
78
16
42
22
93
25
30
70
26
23
98
32
98
50
95
25
83
28
83
8
2
32
94
33
80
91
27
17
76
89
41
13
53
24
89
99
91
61
48
49
62
7
30
88
52
7
40
25
98
64
35
6
98
61
66
34
74
24
28
84
46
97
87
68
16
61
99
4
5
6
71
42
80
92
66
79
66
22
42
53
36
95
35
91
29
65
29
92
80
35
21
69
55
15
76
1
82
80
99
71
47
58
34
79
38
30
84
59
17
49
18
94
96
18
76
68
27
93
99
23
40
82
8
6
59
37
10
9
48
27
6
86
26
97
14
83
88
19
75
35
11
29
45
7
65
93
14
63
33
86
45
24
87
14
40
68
12
10
31
33
2
84
50
63
42
92
26
83
3
32
46
2
30
87
98
39
95
86
20
92
75
78
70
68
17
38
56
90
9
12
50
95
42
94
43
19
86
9
38
34
31
52
14
80
15
20
21
25
37
21
93
35
99
64
62
58
45
4
43
20
92
50
87
36
25
37
62
76
74
35
84
84
80
68
48
36
44
18
32
71
58
48
90
91
13
46
4
68
53
74
17
32
3
46
23
51
71
90
77
59
95
67
44
28
52
25
22
17
92
9
52
64
46
32
65
66
95
78
62
85
24
27
99
77
52
32
24
90
28
60
56
71
97
64
48
42
24
11
93
54
38
21
86
21
43
88
58
72
26
13
78
49
25
88
53
58
80
63
35
75
9
27
14
43
48
97
14
97
96
94
84
54
5
38
86
31
78
35
96
58
43
36
1
21
82
4
60
97
60
1
96
96
78
91
60
91
88
44
62
78
93
78
9
51
25
77
21
65
19
89
20
86
13
48
83
82
50
28
24
54
91
25
86
12
80
44
58
94
27
8
60
43
87
33
5
75
77
44
98
93
33
12
45
75
93
69
64
92
6
65
83
14
86
40
46
4
99
41
10
58
32
25
53
1
2
31
90
22
28
29
88
15
83
13
91
41
66
88
69
50
29
34
86
32
6
64
69
81
68
20
52
25
14
59
39
43
4
69
29
24
36
68
52
31
82
34
25
56
98
54
22
22
63
34
75
61
81
90
15
39
22
31
49
99
37
24
44
68
42
14
25
71
39
94
26
78
80
59
1
59
76
84
48
37
72
45
39
77
40
2
69
84
55
65
78
93
59
11
62
82
24
61
22
16
94

================================================
FILE: fibonacci_dynamic/tests/input06.txt
================================================
87
50
46
43
20
30
16
12
14
69
86
8
60
77
64
66
7
96
61
34
79
47
86
79
54
69
86
72
75
1
10
64
40
66
39
82
44
99
14
13
9
48
82
63
45
53
91
7
54
7
7
97
75
57
69
49
97
83
97
21
63
54
30
1
2
88
91
75
42
88
51
85
16
71
58
37
26
56
63
51
58
21
67
47
32
85
84
81
40
25
53
84
46
29
81
77
46
76
1
70
29
40
10
45
68
46
10
94
11
9
13
94
71
60
60
19
55
18
79
22
46
95
49
16
42
14
79
28
90
72
66
33
28
40
97
71
41
22
19
3
95
94
56
30
10
57
10
61
9
58
83
48
18
84
66
26
15
31
57
13
47
43
6
60
45
29
39
28
25
89
60
86
40
94
1
70
37
64
85
68
73
54
20
84
83
15
14
42
53
20
26
82
16
86
80
27
78
59
47
36
75
28
3
31
81
71
26
13
33
78
59
78
75
49
89
14
25
45
13
85
43
59
33
12
16
2
2
41
79
46
70
25
24
52
67
85
13
61
19
80
69
90
49
59
17
93
14
48
48
71
18
92
59
48
24
52
24
99
92
21
84
72
5
92
20
92
22
12
3
81
62
24
8
15
90
44
3
15
61
55
21
19
41
80
69
56
22
92
85
10
75
65
46
94
37
73
85
9
38
93
84
82
53
71
18
63
70
61
31
32
31
58
18
99
80
90
17
1
29
89
37
18
42
13
45
99
11
97
66
58
79
93
35
26
60
23
31
78
89
91
54
42
48
96
76
33
4
68
33
25
33
97
32
75
72
88
75
21
99
35
27
2
70
21
8
34
76
55
59
31
19
72
69
3
64
23
61
75
12
19
66
44
15
54
26
18
52
92
92
37
78
61
19
79
88
88
40
52
61
52
45
31
56
71
86
67
79
36
29
90
65
35
69
62
99
92
91
26
97
29
49
55
42
83
67
29
49
97
66
98
17
46
78
96
85
45
63
22
87
5
72
54
64
86
22
39
30
84
93
44
31
14
25
44
23
24
16
14
34
40
68
43
92
7
25
63
42
86
63
97
86
72
39
19
46
76
84
15
89
97
57
35
13
51
28
19
84
28
70
52
83
88
64
31
59
3
64
93
7
42
37
18
33
53
86
51
69
5
54
9
26
58
74
51
29
32
79
76
97
43
75
20
43
84
78
98
87
91
24
34
56
29
31
33
86
3
72
49
92
40
60
58
17
26
15
58
83
42
93
6
17
57
4
46
56
47
12
96
87
54
38
71
64
20
93
5
58
15
96
17
57
12
28
83
78
13
17
85
34
60
10
21
41
29
84
9
36
40
72
22
7
66
67
46
83
7
99
96
81
80
45
71
47
63
46
94
79
49
5
89
4
63
87
9
93
33
77
67
19
20
93
4
4
44
78
68
5
20
21
50
85
93
2
38
82
78
47
34
86
29
36
35
20
10
7
51
3
99
60
44
90
91
56
58
40
55
24
57
8
85
37
84
86
8
87
74
31
49
3
29
25
93
32
44
93
72
79
89
37
1
75
36
59
95
85
50
7
48
66
60
82
13
54
73
18
57
28
41
5
18
41
78
26
32
94
48
57
56
37
90
53
65
46
27
73
23
22
87
76
95
22
32
45
40
40
96
37
78
31
62
56
10
82
30
25
59
24
48
20
17
38
43
90
41
10
62
3
10
32
84
45
93
86
59
35
12
23
67
40
83
19
52
87
1
96
91
93
5
64
11
30
70
98
44
32
44
14
90
88
87
46
97
41
58
71
58
79
4
71
34
84
58
22
77
75
16
42
57
87
27
95
47
34
30
19
86
26
1
56
31
58
1
81
73
36
61
96
24
51
65
77
59
22
3
46
29
28
56
96
45
92
97
27
91
4
30
68
46
9
17
25
36
92
96
37
39
99
74
74
6
9
3
73
83
8
82
84
46
21
84
36
35
82
72
88
98
97
52
69
51
49
61
6
64
24
3
54
81
19
58
36
97
43
71
1
9
8
95
64
23
28
80
53
22
38
19
18
60
45
48
46
7
68
94
56
38
47
83
28
49
71
77
42
83
78
93
66
27
71
6
12
32
93
26
2
60
4
65
69
15
78
33
53
55
46
2
48
54
88
32
1
82
71
94
84
62
7
57
56
80
21
80
41
83
6
30
66
98
68
14
74
42
55
5
79
95
86
47
15
68
7
77
94
29
91
40
32
36
44
95
74
87
72
9
46
71
50
92
34
3
65
97
19
74
63
28
23
23
6
97
35
73
68
58
69
40
59
2
26
38
98
92
98
13
86
40
13
71
66
56
60
44
47
97
78
41
79
70
64
86
62
2
73
62
93
94
51
59
33
20
67
79
16
54
63
2
95
19
95
52
52
24
6
64
89
46
23
36
92
87
2
94
2
57
35
29
56
65
33
15
63
57
86
95
63
23
84
13
54
66
80
6
29
73
78
64
9
47
27
13
26
26
85
39
80
21
58
95
21
80
68
7
90
5
80
44
52
95
50
48
54
36
1
96
96
56
43
3
19
40
9
9
95
54
34
44
77
22
86
58
61
9
89
3
40
39
10
63
83
33
80
82
8
88
54
56
53
94
80
81
93
41
91
55
1
68
47
79
84
86
55
82
92
19
2
58
43
56
47
29
9
92
32
33
20
66
89
70
31
30
69
92
2
39
86
55
35
66
49
84
57
13
87
36
8
53
75
47
18
74
69
22
64
52
26
26
13
85
87
54
68
9
59
36
99
5
30
42
95
96
93
52
39
51
19
65
50
73
30
85
82
7
30
75
74
46
8
43
21
34
95
31
36
22
79
68
2
29
90
7
3
19
89
76
75
76
10
14
42
6
59
24
75
88
70
79
64
76
96
80
23
31
35
40
45
5
25
31
9
42
96
12
73
76
61
56
16
79
66
27
39
11
58
39
91
59
87
74
23
66
8
45
91
17
24
45
42
50
48
35
43
61
2
11
69
58
22
55
62
54
92
32
48
52
2
56
39
34
87
92
44
55
13
98
13
40
69
80
66
45
42
4
97
42
79
14
41
76
85
39
43
79
67
53
99
23
87
97
85
11
88
57
82
42
61
86
44
14
31
73
18
64
30
41
91
67
47
25
76
16
50
33
12
27
75
41
46
1
44
22
39
53
59
12
16
12
27
58
60
75
13
26
92
15
76
66
24
91
19
71
96
15
44
55
2
25
93
16
89
2
36
8
74
10
15
50
23
30
88
47
78
56
56
78
96
68
18
82
50
55
85
89
27
37
58
14
57
99
49
79
89
24
68
51
83
48
98
85
30
90
53
14
29
53
17
4
34
30
95
80
17
5
71
6
42
65
60
15
84
40
6
36
41
10
84
68
1
53
88
1
36
54
14
60
5
54
57
13
41
69
4
16
83
58
63
82
98
6
88
89
63
40
18
55
83
90
83
63
18
80
32
46
16
96
7
83
83
91
34
56
76
88
24
80
20
2
48
76
97
8
78
40
13
97
3
20
78
22
98
41
42
31
62
66
10
76
27
16
44
8
16
18
82
24
38
40
62
3
72
4
90
36
17
88
39
97
95
77
46
50
57
31
62
63
5
29
77
38
86
46
52
93
32
16
31
66
66
36
99
60
74
80
3
38
27
60
82
14
2
52
49
49
51
20
85
12
64
67
24
56
15
40
73
49
5
25
36
19
27
97
31
81
52
3
11
76
45
99
23
78
60
4
89
47
71
29
20
75
22
14
53
83
92
85
48
2
96
52
82
55
94
99
55
51
57
89
24
10
55
47
41
31
20
91
41
14
84
69
58
28
78
9
31
47
73
72
49
78
38
24
22
15
17
47
16
34
43
58
77
94
70
93
55
63
70
81
14
79
73
41
53
16
40
22
5
71
71
32
49
13
28
1
74
8
55
78
78
22
43
57
64
38
82
57
41
66
80
53
87
30
56
10
76
14
27
94
10
94
96
57
30
90
64
26
64
46
75
49
17
96
24
89
33
83
89
30
72
50
57
66
6
80
52
92
85
31
20
19
15
26
38
1
84
39
25
56
8
4
68
52
58
52
62
12
34
32
64
84
34
19
19
18
76
49
43
19
14
56
50
71
54
85
35
96
70
43
37
85
80
68
90
76
66
75
85
77
46
42
91
16
58
15
48
21
38
54
48
49
58
96
92
78
39
15
38
45
10
73
37
18
96
59
57
37
99
41
87
21
56
53
84
7
37
67
18
97
83
77
73
92
29
31
94
68
77
78
96
17
70
38
44
13
19
75
70
80
58
25
89
29
87
24
48
12
30
69
36
26
15
79
20
8
24
79
27
21
57
19
98
65
29
53
81
44
4
6
22
70
41
19
23
65
35
50
57
94
86
71
75
58
41
81
63
85
47
52
83
90
60
9
33
85
15
55
21
77
72
87
14
85
94
54
88
95
23
75
99
15
84
91
58
87
89
51
84
33
20
2
37
29
39
88
31
45
47
91
40
50
11
74
32
66
31
28
29
85
80
59
39
82
66
40
54
63
41
54
28
87
35
93
28
3
6
32
9
45
90
51
14
89
15
82
40
16
21
25
51
20
64
32
46
32
89
50
17
50
85
66
28
48
35
42
94
68
15
58
34
88
68
52
7
62
27
24
54
33
70
92
60
14
36
56
77
73
52
89
54
68
94
68
83
71
84
30
27
39
3
46
12
71
40
25
53
68
59
80
84
62
44
65
36
41
37
70
27
25
11
55
30
82
53
26
55
6
89
80
74
87
49
45
23
17
83
65
29
60
62
84
99
90
63
54
8
6
25
94
32
90
82
97
48
8
26
19
23
62
69
30
98
19
54
79
35
35
9
72
26
34
35
87
39
78
54
78
51
40
8
88
76
59
27
33
45
92
76
62
57
54
2
75
36
26
97
62
74
38
96
47
30
85
58
20
61
89
19
47
97
6
62
89
17
54
87
78
44
78
77
28
39
54
73
77
45
40
92
45
3
41
15
61
65
51
57
46
61
50
2
17
99
50
30
27
16
61
29
79
9
32
18
74
49
27
69
41
47
85
80
8
39
47
17
11
55
29
47
81
73
82
97
96
30
76
57
81
38
40
30
25
64
50
45
55
14
91
94
83
84
28
30
55
71
42
78
52
56
71
94
33
43
99
72
61
59
22
20
54
4
58
35
6
77
22
25
89
27
88
97
23
3
88
60
46
62
60
73
79
87
85
89
37
67
33
76
60
73
38
34
96
93
79
31
1
45
32
35
80
60
86
44
60
5
84
35
12
71
71
98
44
87
63
63
24
19
55
41
6
20
48
78
85
82
96
78
76
63
98
21
47
72
3
85
73
31
54
30
77
68
55
96
63
32
10
38
27
11
31
15
1
87
48
39
9
81
32
58
74
48
18
29
32
59
29
68
40
28
1
91
90
18
12
87
58
49
15
29
22
92
45
51
97
19
51
89
43
98
41
18
27
82
83
29
60
89
70
72
1
10
84
64
66
59
4
51
31
56
25
20
99
98
87
2
61
58
94
17
37
15
92
1
75
18
76
79
15
23
38
30
79
5
89
75
88
48
69
89
27
8
4
61
87
51
57
53
86
74
5
63
66
11
46
88
14
27
11
21
34
95
9
10
69
84
32
83
62
37
27
9
95
47
58
77
18
14
75
10
18
87
28
22
27
93
55
55
64
71
36
41
6
71
8
60
49
44
35
51
77
31
20
69
99
92
8
95
6
81
1
62
11
29
80
55
7
18
69
15
37
83
94
88
35
61
8
47
58
69
38
88
61
17
41
59
68
86
80
74
49
69
25
72
71
35
56
8
76
36
24
31
5
3
80
32
37
27
36
53
76
77
34
7
96
3
85
72
37
1
63
47
41
6
54
22
79
43
73
94
58
48
81
22
20
64
37
1
35
47
61
51
34
85
53
89
86
92
6
92
30
73
9
42
62
96
2
10
98
66
22
44
20
91
89
16
64
43
89
24
64
61
9
14
14
12
55
57
64
67
27
84
54
68
91
74
72
29
40
11
93
30
24
90
19
19
59
11
5
79
13
80
65
55
3
57
85
59
3
79
75
43
20
7
84
31
29
60
11
35
13
60
32
52
17
83
75
7
25
1
37
51
87
79
28
37
72
9
7
95
99
52
51
35
93
9
48
35
21
39
59
15
85
44
64
9
50
21
35
66
39
12
26
92
30
57
36
4
55
10
59
13
90
2
18
12
62
86
97
97
53
89
64
36
7
83
82
31
50
2
17
62
65
62
55
49
45
3
2
60
68
73
73
55
16
12
16
3
24
61
70
24
61
94
34
6
53
10
26
30
40
10
52
94
41
40
62
41
31
92
77
99
77
75
94
33
48
62
88
78
57
65
79
49
28
72
68
33
71
16
97
44
55
2
52
46
62
76
63
96
73
62
5
76
86
48
24
89
87
61
19
83
94
43
90
2
19
34
46
55
65
9
39
95
67
95
76
72
49
4
73
81
43
32
37
3
24
84
23
62
51
42
52
92
48
98
56
15
86
18
61
70
70
76
77
28
18
40
82
78
70
13
74
6
28
25
58
82
94
27
88
11
61
1
16
42
10
21
79
4
54
54
15
62
7
81
84
67
78
84
74
61
72
64
44
6
20
59
93
36
8
88
84
13
49
14
92
51
43
13
80
30
73
23
56
17
81
42
7
85
52
50
87
19
45
63
47
16
99
80
30
85
56
62
51
82
99
27
57
77
8
52
5
24
81
5
54
88
88
5
71
67
52
27
88
53
46
61
79
5
42
42
45
80
80
45
68
14
20
33
12
36
43
73
52
59
30
23
3
96
76
24
91
42
25
77
60
68
99
50
88
70
51
96
66
85
73
55
78
42
95
20
18
14
57
95
92
82
5
82
18
18
26
93
73
78
66
97
37
89
68
92
77
2
75
25
74
97
72
70
8
25
9
16
81
20
33
26
12
59
63
16
28
60
78
37
16
12
58
67
79
3
95
82
1
90
48
54
33
51
2
10
20
1
30
78
97
53
77
94
53
80
3
15
86
86
52
11
8
1
84
50
73
29
1
26
45
71
64
97
55
16
10
22
21
20
8
60
78
44
54
31
20
66
94
1
50
20
39
89
98
5
97
50
87
6
52
45
1
18
35
57
58
94
94
72
30
48
59
34
83
75
43
40
5
66
95
29
57
43
22
67
62
10
51
37
89
86
74
98
28
9
30
58
32
45
16
68
98
56
26
57
94
6
44
36
53
30
16
23
97
18
28
58
48
34
23
59
50
7
17
45
63
74
76
89
89
83
30
66
12
4
57
1
74
45
93
59
34
15
25
35
1
89
13
45
58
61
40
6
56
16
95
94
41
78
45
30
52
63
86
97
3
46
45
32
70
94
25
90
61
2
13
83
42
32
3
25
67
37
10
74
12
53
11
22
15
78
5
99
44
2
55
16
31
64
8
9
42
6
82
7
61
76
87
9
63
70
12
51
99
14
32
14
74
44
44
55
55
91
55
98
36
11
40
78
29
69
82
63
45
49
46
78
26
62
34
23
88
9
72
55
29
54
8
46
46
2
73
15
46
70
15
3
93
24
97
72
25
27
83
9
38
67
4
15
7
39
13
3
31
8
82
87
58
75
7
77
74
6
7
96
76
69
47
4
80
9
11
84
44
30
95
55
6
6
19
97
43
4
93
42
12
64
1
87
93
65
14
87
21
25
72
99
29
59
35
73
75
14
43
40
30
50
51
58
13
56
80
18
97
70
95
36
23
79
84
57
9
57
69
98
91
5
15
76
62
24
74
10
65
24
42
99
4
7
82
16
44
70
6
91
3
71
91
82
35
50
35
78
61
60
9
77
76
55
26
23
75
94
91
10
64
58
10
93
12
33
86
36
14
81
28
20
98
67
43
31
82
56
77
87
85
46
5
66
1
96
8
77
16
70
96
11
37
54
22
69
84
80
46
41
67
83
85
46
67
40
30
24
20
57
65
31
37
24
77
46
44
19
39
1
24
48
67
53
83
64
37
84
29
97
71
76
63
46
58
5
81
78
65
99
74
50
63
73
18
71
32
45
51
80
79
86
74
77
33
80
58
4
8
78
93
22
78
29
1
15
84
84
72
75
91
91
73
34
85
66
86
53
8
24
79
80
73
75
25
63
12
25
45
38
74
27
8
72
83
33
21
98
78
60
75
4
39
31
50
85
28
73
69
71
88
21
21
30
89
65
22
65
91
11
37
92
71
78
27
72
70
79
5
15
69
75
41
1
28
82
50
33
20
63
72
43
61
27
98
38
2
90
97
70
3
56
70
92
5
32
17
12
52
7
41
36
96
99
7
8
17
13
12
93
53
33
44
34
83
96
99
1
14
48
27
77
86
14
88
62
95
83
51
9
6
55
53
81
44
50
76
7
39
77
39
99
44
50
27
24
9
85
23
60
5
5
24
73
73
90
82
60
2
77
96
60
80
19
70
20
43
6
20
60
87
9
96
90
20
43
3
33
84
5
88
78
95
8
94
6
12
6
91
61
18
29
53
45
35
91
46
39
14
56
17
43
85
31
6
4
51
23
22
93
10
95
88
97
62
47
36
98
6
6
85
48
96
94
86
67
56
96
3
91
96
73
45
83
98
23
59
9
44
1
71
19
69
72
78
25
10
90
97
21
83
42
82
67
11
27
49
68
88
83
69
85
47
10
13
14
64
60
88
14
33
14
96
38
66
8
8
4
87
43
34
74
11
60
98
45
42
43
76
40
21
38
37
50
61
57
25
89
43
55
24
69
64
85
1
87
49
86
74
63
35
65
37
98
62
53
87
31
57
59
98
13
19
17
5
4
73
42
21
79
52
14
67
45
6
84
96
2
80
42
90
8
66
52
52
34
55
80
65
43
85
36
14
90
46
26
88
21
32
22
99
56
47
30
2
73
84
46
5
99
34
93
56
87
41
26
77
97
74
96
78
56
25
91
59
13
9
56
89
86
89
15
52
76
56
63
28
74
34
7
43
25
89
2
43
6
92
37
30
93
38
36
19
37
96
81
98
70
61
14
87
51
55
13
90
33
57
14
60
94
47
12
8
43
72
28
81
7
27
29
98
71
60
53
29
21
18
89
86
52
77
7
60
72
27
25
26
49
71
72
67
48
92
86
68
19
23
26
11
19
65
54
66
26
47
20
80
90
10
40
22
25
1
29
45
21
56
36
19
76
86
14
19
73
42
11
51
22
73
55
16
66
2
16
96
42
30
90
54
96
66
28
81
23
79
48
21
30
19
45
13
63
53
83
25
68
8
10
10
58
31
46
13
67
13
69
95
73
33
97
7
33
47
49
41
79
39
42
98
63
9
19
24
53
53
47
57
28
96
77
95
55
58
96
98
5
66
66
27
87
53
8
90
45
17
61
32
37
18
66
93
91
75
64
38
53
64
37
80
89
33
90
68
77
6
88
86
19
68
13
38
11
40
75
76
47
6
66
42
7
51
8
52
14
49
39
60
86
63
70
42
32
38
62
32
91
60
57
97
6
57
39
35
75
7
76
78
72
19
16
50
30
66
58
78
27
81
38
38
83
24
64
41
72
44
70
97
57
25
37
81
10
95
21
46
19
86
77
7
58
81
71
8
60
68
94
78
95
23
41
3
68
36
73
13
21
89
7
20
35
79
11
32
74
11
22
61
38
41
87
39
60
25
26
60
87
99
62
43
11
54
65
95
4
66
8
3
12
70
84
26
56
18
49
33
25
72
97
48
69
15
67
28
61
2
9
86
62
46
50
69
94
99
2
2
82
79
3
59
98
92
41
73
34
31
52
8
91
44
85
79
26
67
93
65
89
27
83
93
75
42
44
74
9
23
62
73
60
29
41
9
37
29
23
61
50
38
86
56
78
64
59
83
30
36
60
11
2
78
99
32
6
44
37
96
49
75
65
94
25
38
99
74
60
10
21
18
15
50
96
86
43
13
95
62
76
17
54
39
77
39
78
7
6
67
30
57
95
73
46
61
44
29
24
84
41
86
40
24
57
57
58
2
58
33
43
97
85
85
83
49
56
12
70
46
7
85
80
7
3
40
54
47
7
54
65
25
63
48
9
84
54
67
95
76
7
72
4
61
45
30
55
77
25
38
63
56
68
36
27
22
54
17
25
9
28
88
27
82
84
89
39
83
5
64
98
95
79
6
16
95
12
19
41
45
94
93
33
61
88
83
49
33
24
15
2
76
3
43
40
6
76
44
45
39
54
90
76
87
11
33
70
53
38
2
25
14
58
50
91
65
2
30
89
40
17
24
76
90
36
85
31
78
55
4
56
67
69
30
32
73
26
21
47
52
26
97
86
5
75
99
99
56
38
3
67
80
78
96
15
86
37
68
97
55
81
52
35
5
45
75
65
54
70
20
19
8
20
34
20
97
39
95
3
71
45
72
56
81
90
21
90
16
84
17
93
90
10
44
80
46
93
87
64
26
29
42
65
14
75
84
61
19
90
53
94
89
42
3
92
10
41
26
6
63
25
23
90
89
94
50
87
20
81
67
85
23
79
98
3
40
99
56
96
53
10
18
59
47
13
48
13
73
44
78
93
65
3
59
75
31
99
39
67
44
1
20
48
7
88
37
44
54
84
3
67
11
74
18
41
37
35
93
30
82
12
72
29
88
17
80
33
26
81
45
11
98
62
79
75
79
29
47
66
70
65
75
49
57
99
69
96
60
16
69
20
70
92
44
32
79
63
10
96
19
65
40
69
75
14
90
23
73
59
96
21
85
93
91
7
22
52
55
2
60
31
6
42
92
84
3
8
7
8
95
58
28
44
26
86
77
4
29
29
34
15
59
44
96
19
94
76
52
58
68
62
31
69
3
32
29
47
19
66
20
25
47
14
92
72
79
20
64
32
49
38
61
60
67
97
6
31
85
34
95
56
11
67
84
61
75
5
28
7
63
71
71
71
11
20
87
6
45
44
10
50
8
75
93
86
2
98
51
70
41
90
37
23
68
84
67
4
53
39
77
51
85
53
33
81
1
27
31
88
73
10
10
73
5
57
18
85
63
6
81
41
91
62
85
7
57
70
40
69
67
44
19
9
39
37
33
71
90
76
81
19
16
25
36
32
38
20
58
30
24
64
60
51
31
14
29
89
23
79
98
26
24
19
91
7
9
76
26
71
77
99
5
18
73
27
40
57
96
39
61
75
64
13
99
35
31
11
90
24
4
60
25
24
44
47
87
60
86
53
84
63
32
21
28
39
76
48
77
1
48
64
74
92
60
94
98
30
57
12
6
37
57
43
73
92
2
99
29
45
8
17
87
32
82
11
74
20
34
24
14
44
4
20
50
27
33
87
21

================================================
FILE: fibonacci_dynamic/tests/output00.txt
================================================
1
1
2
3
5
8
13
21
34
55


================================================
FILE: fibonacci_dynamic/tests/output01.txt
================================================
102334155
1


================================================
FILE: fibonacci_dynamic/tests/output02.txt
================================================
4660046610375530309
44945570212853
5
365435296162
13
5
23416728348467685
135301852344706746049
218922995834555169026
72723460248141
196418
3524578
2504730781961
61305790721611591
2584
1
39088169
701408733
2111485077978050
4052739537881
5
2880067194370816120
1836311903
1597
4807526976
14930352
2504730781961
10610209857723
39088169
160500643816367088
89
377
1779979416004714189
14930352
987
2971215073
806515533049393
2504730781961
139583862445
160500643816367088
102334155
956722026041
20365011074
8944394323791464
225851433717
4052739537881
317811
1346269
1346269
514229
1597
1
956722026041
23416728348467685
2
14472334024676221
144
591286729879
498454011879264
144
28657
5
377
31940434634990099905
144
806515533049393
190392490709135
1
61305790721611591
4807526976
21
3
102334155
2504730781961
9227465
102334155
1
53316291173
160500643816367088
7540113804746346429
1134903170
1304969544928657
1548008755920
23416728348467685
19740274219868223167
259695496911122585
1100087778366101931
51680708854858323072
2178309
701408733
1
12586269025
2880067194370816120
86267571272
3524578
1
6557470319842
190392490709135
267914296
4807526976
2584
1304969544928657
63245986
2504730781961
102334155
4660046610375530309
591286729879
10610209857723
14930352
1
433494437
12586269025
1548008755920
2
27777890035288
12200160415121876738
1836311903
4660046610375530309
121393
5527939700884757
13
4181
956722026041
61305790721611591
987
117669030460994
135301852344706746049
218922995834555169026
10946
72723460248141
3
267914296
610
2504730781961
53316291173
2880067194370816120
701408733
17167680177565
83621143489848422977
1134903170
13
75025
12200160415121876738
4181
86267571272
27777890035288
165580141
267914296
4660046610375530309
1779979416004714189
17711
89
135301852344706746049
5702887
259695496911122585
956722026041
4052739537881
28657
498454011879264
4181
420196140727489673
28657
24157817
37889062373143906
2178309
63245986
83621143489848422977
9227465
44945570212853
5527939700884757
20365011074
377
2504730781961
2111485077978050
1346269
1346269
99194853094755497
121393
956722026041
20365011074
5702887
1779979416004714189
86267571272
5702887
2971215073
420196140727489673
5702887
139583862445
8
832040
44945570212853
61305790721611591
420196140727489673
8944394323791464
3
8
1
1100087778366101931
5
365435296162
5527939700884757
139583862445
21
4660046610375530309
144
1100087778366101931
31940434634990099905
196418
267914296
1836311903
165580141
53316291173
12200160415121876738
13
55
31940434634990099905
1779979416004714189
1779979416004714189
1779979416004714189
267914296
7540113804746346429
135301852344706746049
7540113804746346429
591286729879
433494437
956722026041
89
14930352
196418
1597
53316291173
832040
377
987
4807526976
19740274219868223167
39088169
14472334024676221
832040
1346269
1548008755920
17711
24157817
24157817
21
377
7540113804746346429
89
2880067194370816120
17167680177565
160500643816367088
1346269
8
679891637638612258
6557470319842
63245986
196418
83621143489848422977
51680708854858323072
1836311903
5702887
21
14472334024676221
75025
10610209857723
89
6765
701408733
14930352
165580141
83621143489848422977
89
12200160415121876738
12200160415121876738
3
17711
6765
27777890035288
8
1
2
61305790721611591
1779979416004714189
17167680177565
591286729879
102334155
34
7540113804746346429
144
24157817
267914296
9227465
7540113804746346429
44945570212853
701408733
956722026041
8944394323791464
5
1346269
679891637638612258
610
7778742049
31940434634990099905
317811
4660046610375530309
12586269025
12586269025
39088169
1836311903
3
1548008755920
121393
75025
1304969544928657
46368
433494437
365435296162
12586269025
72723460248141
117669030460994
4181
218922995834555169026
420196140727489673
3524578
17711
1779979416004714189
102334155
75025
259695496911122585
6557470319842
679891637638612258
86267571272
233
987
806515533049393
6765
365435296162
4181
498454011879264
37889062373143906
1
2880067194370816120
9227465
701408733
32951280099
23416728348467685
233
2584
37889062373143906
498454011879264
3524578
514229
3524578
4660046610375530309
8
4660046610375530309
23416728348467685
32951280099
165580141
1
4807526976
14930352
12586269025
34
17711
3
135301852344706746049
63245986
987
1304969544928657
6765
1346269
55
89
99194853094755497
987
21
701408733
28657
987
86267571272
165580141
514229
987
44945570212853
160500643816367088
2111485077978050
317811
218922995834555169026
2504730781961
4181
10946
34
3416454622906707
4807526976
3524578
7540113804746346429
1
17711
190392490709135
196418
17167680177565
21
28657
8944394323791464
6765
190392490709135
259695496911122585
165580141
1304969544928657
5702887
23416728348467685
6557470319842
317811
610
135301852344706746049
144
13
4660046610375530309
2971215073
1836311903
2584
17711
5
75025
1836311903
7540113804746346429
31940434634990099905
610
89
63245986
5527939700884757
72723460248141
610
5
72723460248141
1779979416004714189
1100087778366101931
72723460248141
83621143489848422977
86267571272
39088169
1
27777890035288
420196140727489673
832040
3524578
233
1836311903
21
2178309
17711
37889062373143906
32951280099
75025
61305790721611591
165580141
72723460248141
3
24157817
12586269025
196418
1779979416004714189
987
135301852344706746049
3416454622906707
17167680177565
2111485077978050
9227465
7778742049
39088169
55
89
21
806515533049393
3416454622906707
28657
13
267914296
591286729879
233
27777890035288
75025
75025
24157817
86267571272
17167680177565
12586269025
7778742049
46368
3524578
5702887
31940434634990099905
10946
14472334024676221
10946
610
956722026041
139583862445
4660046610375530309
160500643816367088
679891637638612258
55
3
5
4660046610375530309
46368
1304969544928657
83621143489848422977
433494437
5702887
5
987
28657
117669030460994
2880067194370816120
5527939700884757
514229
83621143489848422977
196418
3416454622906707
591286729879
3
806515533049393
317811
23416728348467685
1346269
3
2504730781961
987
679891637638612258
135301852344706746049
17711
34
165580141
23416728348467685
956722026041
72723460248141
2584
24157817
53316291173
3416454622906707
31940434634990099905
8944394323791464
2
1
1
1134903170
86267571272
1134903170
308061521170129
27777890035288
117669030460994
267914296
6765
44945570212853
121393
3
75025
10610209857723
1548008755920
21
365435296162
12586269025
5527939700884757
139583862445
2111485077978050
3416454622906707
46368
17711
987
24157817
3416454622906707
1836311903
433494437
2971215073
2971215073
1100087778366101931
144
1134903170
37889062373143906
4181
2880067194370816120
135301852344706746049
17167680177565
10610209857723
24157817
9227465
308061521170129
3524578
39088169
139583862445
5
190392490709135
21
44945570212853
317811
1
6557470319842
3416454622906707
14930352
28657
83621143489848422977
32951280099
13
7540113804746346429
28657
987
3524578
218922995834555169026
53316291173
23416728348467685
46368
591286729879
37889062373143906
8944394323791464
160500643816367088
591286729879
53316291173
34
1548008755920
7540113804746346429
420196140727489673
86267571272
12200160415121876738
99194853094755497
610
2880067194370816120
4660046610375530309
39088169
420196140727489673
51680708854858323072
3
1304969544928657
987
701408733
591286729879
308061521170129
2178309
86267571272
10946
31940434634990099905
28657
225851433717
1134903170
4660046610375530309
701408733
3524578
4807526976
14930352
498454011879264
4807526976
14930352
190392490709135
13
32951280099
806515533049393
3524578
1548008755920
1836311903
701408733
514229
24157817
27777890035288
8
12586269025
196418
701408733
14930352
19740274219868223167
86267571272
72723460248141
165580141
31940434634990099905
2584
44945570212853
308061521170129
8
117669030460994
8
139583862445
317811
12200160415121876738
2504730781961
5702887
17167680177565
37889062373143906
1597
17711
17167680177565
4807526976
63245986
498454011879264
4660046610375530309
308061521170129
2111485077978050
317811
139583862445
99194853094755497
51680708854858323072
420196140727489673
32951280099
55
1836311903
20365011074
956722026041
806515533049393
12586269025
14472334024676221
86267571272
9227465
5
5527939700884757
259695496911122585
7540113804746346429
317811
514229
72723460248141
196418
2504730781961
2584
24157817
1346269
34
83621143489848422977
102334155
5
102334155
225851433717
7778742049
8944394323791464
160500643816367088
2111485077978050
4052739537881
5702887
7540113804746346429
225851433717
89
498454011879264
31940434634990099905
6557470319842
14472334024676221
6557470319842
1
61305790721611591
6557470319842
20365011074
190392490709135
1134903170
1
14930352
121393
10946
13
17167680177565
2880067194370816120
9227465
102334155
10946
17167680177565
72723460248141
267914296
39088169
34
3416454622906707
190392490709135
27777890035288
233
46368
117669030460994
89
8944394323791464
832040
2584
19740274219868223167
591286729879
196418
1134903170
420196140727489673
365435296162
832040
9227465
196418
8
34
28657
218922995834555169026
3524578
51680708854858323072
102334155
23416728348467685
2880067194370816120
44945570212853
10946
4052739537881
420196140727489673
8
4807526976
37889062373143906
832040
39088169
267914296
6557470319842
420196140727489673
23416728348467685
121393
89
832040
10610209857723
17711
165580141
433494437
8944394323791464
21
19740274219868223167
365435296162
6557470319842
53316291173
121393
3524578
1597
4181
32951280099
17711
1134903170
17711
5527939700884757
7778742049
9227465
2
39088169
259695496911122585
13
514229
196418
3524578
10946
987
259695496911122585
2584
139583862445
121393
196418
1597
3
34
17711
7778742049
27777890035288
17711
14930352
55
365435296162
196418
610
51680708854858323072
4052739537881
514229
34
233
99194853094755497
7778742049
1
365435296162
139583862445
17711
5527939700884757
267914296
160500643816367088
23416728348467685
44945570212853
99194853094755497
4660046610375530309
34
75025
44945570212853
28657
1304969544928657
83621143489848422977
7778742049
4660046610375530309
4660046610375530309
53316291173
1134903170
7540113804746346429
498454011879264
12586269025
3
10610209857723
89
102334155
17167680177565
679891637638612258
1134903170
1100087778366101931
259695496911122585
6557470319842
267914296
2971215073
4660046610375530309
7540113804746346429
75025
89
23416728348467685
433494437
2584
514229
44945570212853
1304969544928657
4181
61305790721611591
420196140727489673
39088169
27777890035288
63245986
24157817
196418
19740274219868223167
3524578
10610209857723
21
32951280099
121393
1836311903
1836311903
55
317811
6765
1346269
308061521170129
39088169
1346269
19740274219868223167
121393
806515533049393
3416454622906707
17167680177565
6765
24157817
2971215073
1
8
10610209857723
14930352
591286729879
832040
86267571272
4660046610375530309
1597
51680708854858323072
701408733
32951280099
225851433717
12586269025
34
196418
39088169
4807526976
31940434634990099905
51680708854858323072
13
83621143489848422977
4052739537881
987
832040
23416728348467685
498454011879264
61305790721611591
832040
10610209857723
10610209857723
117669030460994
14472334024676221
1779979416004714189
2584
5527939700884757
591286729879
701408733
806515533049393
4807526976
514229
3524578
806515533049393
20365011074
1100087778366101931
4181
1346269
4660046610375530309
233
1548008755920
365435296162
12586269025
8
13
44945570212853
377
1
160500643816367088
14930352
10610209857723


================================================
FILE: fibonacci_dynamic/tests/output03.txt
================================================
1304969544928657
2111485077978050
121393
2971215073
61305790721611591
89
144
679891637638612258
2111485077978050
23416728348467685
20365011074
956722026041
1779979416004714189
89
51680708854858323072
701408733
1548008755920
1548008755920
2504730781961
233
591286729879
8
259695496911122585
31940434634990099905
89
121393
61305790721611591
75025
1779979416004714189
4660046610375530309
4181
218922995834555169026
1
1597
7778742049
4181
3416454622906707
4660046610375530309
2504730781961
53316291173
72723460248141
14472334024676221
498454011879264
806515533049393
51680708854858323072
63245986
46368
21
1597
37889062373143906
117669030460994
3524578
420196140727489673
233
75025
17167680177565
17167680177565
99194853094755497
2
2971215073
12586269025
34
225851433717
27777890035288
2
498454011879264
9227465
498454011879264
135301852344706746049
308061521170129
225851433717
196418
160500643816367088
2
433494437
12200160415121876738
2504730781961
37889062373143906
8
19740274219868223167
420196140727489673
39088169
12586269025
5527939700884757
433494437
13
1548008755920
225851433717
365435296162
6557470319842
139583862445
5702887
55
10946
259695496911122585
591286729879
5
8944394323791464
832040
8944394323791464
2111485077978050
12586269025
701408733
591286729879
956722026041
9227465
83621143489848422977
17167680177565
12586269025
6765
259695496911122585
1597
4181
86267571272
1779979416004714189
63245986
39088169
24157817
832040
24157817
1548008755920
4052739537881
2971215073
377
4660046610375530309
32951280099
190392490709135
987
1346269
377
317811
1
12200160415121876738
514229
4052739537881
514229
53316291173
83621143489848422977
6557470319842
14472334024676221
75025
610
144
317811
17711
610
420196140727489673
196418
12200160415121876738
61305790721611591
267914296
514229
3524578
218922995834555169026
10610209857723
55
365435296162
701408733
32951280099
2504730781961
2504730781961
117669030460994
1134903170
99194853094755497
55
4181
259695496911122585
51680708854858323072
233
135301852344706746049
51680708854858323072
9227465
86267571272
377
3524578
75025
86267571272
89
39088169
21
34
1134903170
679891637638612258
433494437
956722026041
3
218922995834555169026
1597
3
3524578
196418
2111485077978050
75025
2504730781961
23416728348467685
2971215073
14930352
72723460248141
17167680177565
102334155
4807526976
4660046610375530309
2971215073
433494437
365435296162
8
144
89
13
498454011879264
2178309
17167680177565
9227465
225851433717
32951280099
7778742049
13
701408733
218922995834555169026
32951280099
1597
4660046610375530309
3524578
144
3416454622906707
377
308061521170129
37889062373143906
12200160415121876738
233
1779979416004714189
46368
806515533049393
23416728348467685
365435296162
267914296
365435296162
8944394323791464
1304969544928657
498454011879264
2504730781961
987
806515533049393
75025
4052739537881
2
4052739537881
1100087778366101931
37889062373143906
10946
19740274219868223167
63245986
1100087778366101931
86267571272
86267571272
2178309
308061521170129
190392490709135
5
117669030460994
27777890035288
17167680177565
9227465
1134903170
2584
55
21
7778742049
44945570212853
2584
14930352
1
99194853094755497
165580141
2971215073
225851433717
46368
89
1304969544928657
17167680177565
317811
1
4660046610375530309
308061521170129
2504730781961
514229
86267571272
514229
21
317811
3
308061521170129
17167680177565
8
4807526976
12200160415121876738
2504730781961
2584
10946
63245986
308061521170129
679891637638612258
34
591286729879
55
17167680177565
1346269
8944394323791464
99194853094755497
83621143489848422977
1
27777890035288
75025
135301852344706746049
17711
218922995834555169026
31940434634990099905
701408733
4660046610375530309
61305790721611591
365435296162
24157817
135301852344706746049
498454011879264
498454011879264
37889062373143906
2
75025
1
165580141
4181
4181
12200160415121876738
17167680177565
165580141
701408733
498454011879264
4052739537881
498454011879264
5702887
317811
317811
14930352
51680708854858323072
1836311903
28657
196418
89
46368
44945570212853
99194853094755497
10946
34
218922995834555169026
5702887
3416454622906707
135301852344706746049
4181
1
1134903170
165580141
679891637638612258
1548008755920
7540113804746346429
12586269025
72723460248141
51680708854858323072
34
591286729879
5
27777890035288
308061521170129
6557470319842
39088169
218922995834555169026
144
61305790721611591
420196140727489673
5702887
420196140727489673
10610209857723
987
61305790721611591
4660046610375530309
4052739537881
160500643816367088
514229
5527939700884757
165580141
3
225851433717
8944394323791464
7540113804746346429
20365011074
267914296
53316291173
165580141
2880067194370816120
160500643816367088
259695496911122585
37889062373143906
12200160415121876738
46368
17167680177565
1100087778366101931
72723460248141
19740274219868223167
28657
37889062373143906
55
3524578
20365011074
10946
1836311903
165580141
3416454622906707
1
514229
75025
20365011074
31940434634990099905
121393
75025
75025
5527939700884757
832040
23416728348467685
4660046610375530309
2504730781961
498454011879264
44945570212853
61305790721611591
987
832040
53316291173
31940434634990099905
23416728348467685
2504730781961
196418
1134903170
6765
2111485077978050
433494437
12586269025
679891637638612258
433494437
610
1
5
2971215073
3
61305790721611591
32951280099
63245986
24157817
267914296
806515533049393
121393
89
14930352
55
2111485077978050
10610209857723
17167680177565
610
1346269
10946
2178309
267914296
1548008755920
4660046610375530309
5527939700884757
102334155
135301852344706746049
190392490709135
701408733
1836311903
2504730781961
317811
5
9227465
2584
377
2504730781961
308061521170129
4052739537881
6557470319842
4052739537881
2971215073
679891637638612258
20365011074
591286729879
83621143489848422977
308061521170129
4181
10610209857723
31940434634990099905
259695496911122585
1346269
377
4181
6557470319842
34
19740274219868223167
987
6765
86267571272
8944394323791464
13
8
806515533049393
433494437
420196140727489673
83621143489848422977
165580141
10610209857723
498454011879264
53316291173
44945570212853
4181
514229
10610209857723
12586269025
4052739537881
1836311903
63245986
17711
10946
267914296
6765
135301852344706746049
308061521170129
5702887
2504730781961
61305790721611591
72723460248141
1597
2111485077978050
53316291173
102334155
1836311903
1346269
10610209857723
591286729879
987
3524578
19740274219868223167
1346269
8
7778742049
34
2880067194370816120
433494437
433494437
72723460248141
190392490709135
21
72723460248141
27777890035288
1100087778366101931
1836311903
2111485077978050
610
233
225851433717
99194853094755497
6765
19740274219868223167
27777890035288
701408733
3
31940434634990099905
135301852344706746049
14930352
196418
102334155
2504730781961
13
160500643816367088
99194853094755497
9227465
34
31940434634990099905
20365011074
1779979416004714189
225851433717
6557470319842
20365011074
2111485077978050
7778742049
2504730781961
4660046610375530309
2504730781961
2880067194370816120
63245986
1597
121393
225851433717
5
5702887
63245986
1100087778366101931
8944394323791464
2504730781961
1548008755920
701408733
2111485077978050
1
196418
433494437
121393
259695496911122585
102334155
1346269
1597
5527939700884757
99194853094755497
44945570212853
1100087778366101931
591286729879
19740274219868223167
5527939700884757
4052739537881
956722026041
2504730781961
2584
1836311903
10610209857723
2971215073
51680708854858323072
23416728348467685
433494437
72723460248141
1
10610209857723
514229
1
2111485077978050
17167680177565
420196140727489673
1134903170
8
21
308061521170129
19740274219868223167
1779979416004714189
99194853094755497
17711
46368
1134903170
1836311903
610
46368
308061521170129
10946
610
591286729879
24157817
21
14930352
4052739537881
20365011074
3524578
1100087778366101931
832040
317811
3
27777890035288
117669030460994
21
63245986
14930352
7778742049
433494437
3
5527939700884757
165580141
420196140727489673
701408733
6765
51680708854858323072
365435296162
17711
20365011074
5
5527939700884757
701408733
10946
14930352
17167680177565
1346269
365435296162
679891637638612258
365435296162
20365011074
12586269025
14472334024676221
1134903170
4052739537881
165580141
4052739537881
144
9227465
12586269025
1779979416004714189
7540113804746346429
27777890035288
1548008755920
4660046610375530309
3524578
34
99194853094755497
160500643816367088
55
99194853094755497
196418
267914296
2504730781961
365435296162
1346269
117669030460994
51680708854858323072
44945570212853
233
5
10946
102334155
1
12586269025
24157817
1
39088169
267914296
37889062373143906
2111485077978050
160500643816367088
14930352
832040
2971215073
308061521170129
1
514229
1304969544928657
1779979416004714189
32951280099
2504730781961
2178309
34
7540113804746346429
32951280099
196418
956722026041
1
39088169
4807526976
32951280099
10610209857723
4660046610375530309
218922995834555169026
28657
317811
34
19740274219868223167
1
225851433717
3524578
679891637638612258
102334155
2178309
1304969544928657
190392490709135
4181
1
102334155
34
1
160500643816367088
14930352
32951280099
5527939700884757
5527939700884757
44945570212853
3416454622906707
4052739537881
160500643816367088
1548008755920
46368
4181
12200160415121876738
2178309
420196140727489673
6765
701408733
13
1597
679891637638612258
9227465
55
14472334024676221
4052739537881
139583862445
160500643816367088
17167680177565
365435296162
4052739537881
317811
139583862445
233
5527939700884757
144
420196140727489673
2880067194370816120
13
117669030460994
2
2971215073
365435296162
10610209857723
10946
4660046610375530309
610
2
46368
2111485077978050
89
135301852344706746049
259695496911122585
2971215073
160500643816367088
377
23416728348467685
6557470319842
3524578
806515533049393
121393
987
4807526976
365435296162
144
7540113804746346429
1100087778366101931
1597
24157817
32951280099
806515533049393
44945570212853
10946
7778742049
317811
6765
46368
2504730781961
259695496911122585
117669030460994
53316291173
7540113804746346429
1836311903
3524578
28657
1304969544928657
225851433717
806515533049393
8944394323791464
218922995834555169026
20365011074
7778742049
117669030460994
267914296
259695496911122585
2880067194370816120
1134903170
1548008755920
2
3416454622906707
7540113804746346429
1346269
28657
46368
267914296
144
4052739537881
259695496911122585
218922995834555169026
20365011074
17167680177565
2111485077978050
2
160500643816367088
121393
7778742049
75025
2971215073
27777890035288
377
832040
55
679891637638612258
259695496911122585
4181
259695496911122585
2584
5527939700884757
225851433717
160500643816367088
259695496911122585
4052739537881
86267571272
196418
6557470319842
55
218922995834555169026
2504730781961
1346269
196418
139583862445
1597
9227465
1548008755920
27777890035288
2
17167680177565
308061521170129
160500643816367088
1100087778366101931
24157817
5527939700884757
27777890035288
9227465
1
61305790721611591
610
308061521170129
5527939700884757
7778742049
31940434634990099905
3
1134903170
39088169
4807526976
13
498454011879264
144
144
37889062373143906
135301852344706746049
10610209857723
6765
514229
308061521170129
135301852344706746049
832040
135301852344706746049
514229
89
1597
1
102334155
987
4807526976
46368
9227465
377
10610209857723
61305790721611591
8
308061521170129
12586269025
1597
117669030460994
23416728348467685
61305790721611591
3
6557470319842
1100087778366101931
3
10610209857723
2584
1597
610
55
31940434634990099905
160500643816367088
24157817
365435296162
317811
12586269025
433494437
21
61305790721611591
308061521170129
1597
19740274219868223167
10946
196418
61305790721611591
31940434634990099905
37889062373143906
6765
21
1779979416004714189
17167680177565
2111485077978050
2111485077978050
1304969544928657
433494437
89
44945570212853
2504730781961
21
63245986
34
8
135301852344706746049
121393
514229
20365011074
51680708854858323072
1
4052739537881
317811
72723460248141
2111485077978050
12200160415121876738
139583862445
433494437
1779979416004714189
20365011074
53316291173
190392490709135
17167680177565
225851433717
12200160415121876738
14930352
420196140727489673
610
135301852344706746049
4052739537881
832040
190392490709135
433494437
8
1
44945570212853
987
72723460248141
31940434634990099905
14472334024676221
10946
44945570212853
72723460248141
6765
6765
832040
9227465
46368
14472334024676221
10610209857723
610
99194853094755497
139583862445
1304969544928657
6557470319842
317811
267914296
3416454622906707
218922995834555169026
55
10610209857723
2971215073
117669030460994
420196140727489673
24157817
190392490709135
6765
8944394323791464
20365011074
2
1779979416004714189
39088169
190392490709135
99194853094755497
498454011879264
102334155
117669030460994
86267571272
2971215073
46368
8944394323791464
267914296
233
679891637638612258
591286729879
14930352
1
2504730781961
610
121393
12586269025
2
701408733
498454011879264
27777890035288
72723460248141
44945570212853
9227465
21
591286729879
233
7778742049
267914296
4660046610375530309
53316291173
14930352
1
135301852344706746049
34
37889062373143906
5
63245986
1
27777890035288
317811
75025
1134903170
24157817
89
24157817
12586269025
12586269025
39088169
832040
44945570212853
3524578
102334155
12586269025
34
1779979416004714189
83621143489848422977
679891637638612258
160500643816367088
75025
10946
63245986
956722026041
7540113804746346429
832040
34
956722026041
10610209857723
63245986
4807526976
987
24157817
135301852344706746049
4052739537881
317811
135301852344706746049
514229
2880067194370816120
5527939700884757
4660046610375530309
17167680177565
956722026041
196418
14472334024676221
7778742049
1836311903
4052739537881
117669030460994
121393
7540113804746346429
2178309
86267571272
4660046610375530309
34
19740274219868223167
2584
139583862445
3524578
21
679891637638612258
987
308061521170129
267914296
55
1100087778366101931
317811
2178309
10946
10610209857723
1
679891637638612258
1836311903
1304969544928657
3524578
3
4807526976
591286729879
5702887
1836311903
317811
31940434634990099905
3416454622906707
144
7778742049
13
832040
53316291173
233
10610209857723
1836311903
4181
987
2
308061521170129
19740274219868223167
3416454622906707
2971215073
72723460248141
3524578
317811
3416454622906707
4660046610375530309
83621143489848422977
8
8
4807526976
44945570212853
12200160415121876738
23416728348467685
610
46368
39088169
3416454622906707
14472334024676221
701408733
2504730781961
55
308061521170129
83621143489848422977
4807526976
3524578
8
10946
591286729879
24157817
2971215073
20365011074
1
1
31940434634990099905
2111485077978050
4181
9227465
102334155
5
165580141
165580141
2178309
27777890035288
5702887
63245986
13
591286729879
13
987
9227465
610
14472334024676221
89
44945570212853
32951280099
23416728348467685
135301852344706746049
1597
19740274219868223167
10946
6557470319842
1548008755920
23416728348467685
225851433717
13
5527939700884757
61305790721611591
17711
832040
1304969544928657
1548008755920
5527939700884757
99194853094755497
144
4807526976
12200160415121876738
514229
1548008755920
144
28657
4052739537881
225851433717
117669030460994
317811
10946
32951280099
37889062373143906
1
377
1
10610209857723
55
1779979416004714189
8944394323791464
121393
51680708854858323072
34
1346269
2971215073
1548008755920
10946
1346269
3416454622906707
6765
75025
987
7540113804746346429
72723460248141
2880067194370816120
102334155
20365011074
13
46368
14472334024676221
1548008755920
365435296162
1548008755920
1346269
14930352
4807526976
679891637638612258
23416728348467685
17711
498454011879264
317811
17167680177565
1304969544928657
2971215073
514229
4660046610375530309
83621143489848422977
12200160415121876738
1304969544928657
27777890035288
225851433717
196418
1
3
4660046610375530309
83621143489848422977
2178309
10946
28657
27777890035288
498454011879264
1836311903
17711
225851433717
3524578
6557470319842
5702887
377
2584
7778742049
27777890035288
225851433717
4181
610
86267571272
5527939700884757
75025
2584
317811
3524578
308061521170129
267914296
1836311903
21
987
102334155
1779979416004714189
7778742049
6557470319842
44945570212853
51680708854858323072
89
308061521170129
51680708854858323072
21
1304969544928657
63245986
2178309
190392490709135
83621143489848422977
8
102334155
1304969544928657
365435296162
514229
233
117669030460994
39088169
12200160415121876738
121393
32951280099
32951280099
39088169
1548008755920
165580141
1548008755920
1548008755920
53316291173
135301852344706746049
8944394323791464
21
160500643816367088
63245986
72723460248141
83621143489848422977
2504730781961
679891637638612258
1
225851433717
6557470319842
2971215073
218922995834555169026
39088169
7778742049
701408733
5702887
121393
55
63245986
51680708854858323072
6557470319842
75025
679891637638612258
14930352
6765
117669030460994
21
20365011074
14930352
1597
5702887
317811
7778742049
61305790721611591
31940434634990099905
1548008755920
27777890035288
3
3524578
591286729879
4052739537881
267914296
1
117669030460994
46368
160500643816367088
1
28657
1548008755920
135301852344706746049
2880067194370816120
987
4660046610375530309
39088169
72723460248141
701408733
4807526976
377
1597
165580141
19740274219868223167
7540113804746346429
13
2
144
365435296162
102334155
37889062373143906
28657
55
6765
2584
53316291173
5527939700884757
956722026041
61305790721611591
365435296162
61305790721611591
2111485077978050
2880067194370816120
117669030460994
308061521170129
8
34
144
1346269
1304969544928657
24157817
37889062373143906
2
6557470319842
24157817
317811
259695496911122585
102334155
165580141
28657
10946
121393
28657
956722026041
2584
46368
14930352
1
317811
139583862445
6765
3
160500643816367088
53316291173
1836311903
17167680177565
23416728348467685
34
679891637638612258
39088169
12586269025
987
610
46368
498454011879264
102334155
46368
498454011879264
218922995834555169026
1836311903
1304969544928657
14930352
37889062373143906
1
1
121393
2584
420196140727489673
1134903170
5
117669030460994
1346269
10610209857723
99194853094755497
27777890035288
1548008755920
514229
72723460248141
956722026041
1836311903
5702887
5702887
1548008755920
377
10610209857723
51680708854858323072
63245986
3524578
233
610
1779979416004714189
102334155
420196140727489673
39088169
32951280099
1
121393
2504730781961
3524578
8944394323791464
10946
1346269
19740274219868223167
39088169
12200160415121876738
498454011879264
4660046610375530309
89
31940434634990099905
498454011879264
514229
99194853094755497
1304969544928657
1836311903
6765
31940434634990099905
102334155
17711
3
24157817
3
514229
13
39088169
2880067194370816120
4807526976
4052739537881
2
9227465
1134903170
2584
365435296162
61305790721611591
4660046610375530309
7540113804746346429
19740274219868223167
308061521170129
233
1
12200160415121876738
987
86267571272
14472334024676221
2971215073
12586269025
956722026041
2111485077978050
99194853094755497
34
27777890035288
514229
86267571272
2504730781961
51680708854858323072
2504730781961
8
5527939700884757
21
12200160415121876738
3416454622906707
2504730781961
7778742049
63245986
17167680177565
34
3524578
2584
4807526976
4807526976
5
679891637638612258
51680708854858323072
99194853094755497
2971215073
5527939700884757
12586269025
121393
24157817
21
7778742049
17711
61305790721611591
267914296
3416454622906707
14472334024676221
10946
956722026041
2504730781961
2880067194370816120
117669030460994
99194853094755497
806515533049393
39088169
4660046610375530309
89
514229
591286729879
233
27777890035288
190392490709135
160500643816367088
4660046610375530309
225851433717
1346269
2178309
225851433717
987
4181
8
5527939700884757
31940434634990099905
2880067194370816120
4807526976
190392490709135
377
3416454622906707
1836311903
3
7778742049
2
144
144
218922995834555169026
28657
10610209857723
46368
233
832040
498454011879264
1597
53316291173
117669030460994
20365011074
72723460248141
3
2584
956722026041
12586269025
17711
17167680177565
75025
28657
701408733
19740274219868223167
1346269
10946
1
5702887
679891637638612258
3524578
14930352
5702887
10946
233
19740274219868223167
3524578
2178309
86267571272
498454011879264
14930352
14930352
7540113804746346429
4660046610375530309
5527939700884757
13
10946
75025
12200160415121876738
102334155
2
267914296
2971215073
679891637638612258
61305790721611591
5702887
75025
27777890035288
1134903170
53316291173
1304969544928657
4807526976
4807526976
39088169
2584
14472334024676221
196418
27777890035288
420196140727489673
75025
75025
165580141
6765
86267571272
14472334024676221
63245986
55
10946
4807526976
160500643816367088
21
12200160415121876738
832040
44945570212853
10946
956722026041
10610209857723
24157817
1304969544928657
365435296162
1597
514229
267914296
39088169
10946
7778742049
12586269025
10610209857723
12586269025
3
317811
377
2880067194370816120
1346269
10610209857723
365435296162
1836311903
89
39088169
2504730781961
7778742049
17711
83621143489848422977
2
6765
8944394323791464
21
121393
17711
2111485077978050
1134903170
14472334024676221
9227465
160500643816367088
308061521170129
19740274219868223167
308061521170129
987
591286729879
1
8944394323791464
89
27777890035288
1548008755920
10610209857723
144
233
39088169
1346269
2504730781961
28657
233
498454011879264
117669030460994
10946
5527939700884757
365435296162
1346269
3
233
102334155
32951280099
55
28657
9227465
514229
99194853094755497
1779979416004714189
679891637638612258
39088169
63245986
9227465
89
7540113804746346429
4181
9227465
591286729879
610
32951280099
89
14930352
3416454622906707
21
2
610
2504730781961
89
86267571272
3416454622906707
27777890035288
34
377
2971215073
99194853094755497
365435296162
1346269
32951280099
37889062373143906
701408733
956722026041
2
832040
9227465
86267571272
259695496911122585
1304969544928657
6765
75025
21
610
2111485077978050
12586269025
832040
1548008755920
34
956722026041
117669030460994
17167680177565
17711
6557470319842
1
13
832040
806515533049393
139583862445
679891637638612258
5702887
17711
1304969544928657
514229
806515533049393
5
591286729879
8944394323791464
679891637638612258
2
701408733
1346269
956722026041
1
20365011074
956722026041
1100087778366101931
121393
102334155
53316291173
2178309
1134903170
144
1100087778366101931
1304969544928657
31940434634990099905
165580141
1134903170
12586269025
1100087778366101931
44945570212853
2971215073
2971215073
3524578
4660046610375530309
102334155
2504730781961
61305790721611591
89
420196140727489673
498454011879264
83621143489848422977
377
420196140727489673
987
51680708854858323072
27777890035288
3416454622906707
135301852344706746049
4052739537881
34
832040
832040
19740274219868223167
99194853094755497
20365011074
591286729879
32951280099
21
144
2880067194370816120
259695496911122585
7778742049
2584
46368
5702887
55
1304969544928657
34
956722026041
2504730781961
2178309
987
5702887
5527939700884757
75025
21


================================================
FILE: fibonacci_dynamic/tests/output04.txt
================================================
308061521170129
433494437
53316291173
233
4181
63245986
5702887
987
5
10946
4052739537881
1779979416004714189
806515533049393
956722026041
987
7778742049
39088169
498454011879264
7778742049
4181
365435296162
160500643816367088
1134903170
37889062373143906
3416454622906707
2504730781961
10610209857723
3
53316291173
89
2584
135301852344706746049
2880067194370816120
10610209857723
2971215073
2584
4052739537881
317811
17167680177565
75025
514229
139583862445
20365011074
2971215073
1
117669030460994
225851433717
99194853094755497
225851433717
3524578
28657
420196140727489673
9227465
6765
1346269
83621143489848422977
308061521170129
225851433717
259695496911122585
2880067194370816120
14472334024676221
498454011879264
21
225851433717
196418
4807526976
139583862445
83621143489848422977
591286729879
1304969544928657
14472334024676221
99194853094755497
37889062373143906
1548008755920
233
514229
28657
44945570212853
5702887
806515533049393
86267571272
1100087778366101931
3416454622906707
267914296
6765
2971215073
2
165580141
1346269
28657
8944394323791464
987
2111485077978050
39088169
832040
1
591286729879
102334155
196418
267914296
160500643816367088
2504730781961
3
5527939700884757
117669030460994
1597
832040
4181
196418
61305790721611591
44945570212853
10946
23416728348467685
610
4807526976
23416728348467685
24157817
1100087778366101931
12586269025
2880067194370816120
956722026041
27777890035288
233
17167680177565
1779979416004714189
4807526976
701408733
32951280099
144
610
832040
37889062373143906
5527939700884757
317811
17711
591286729879
8944394323791464
498454011879264
498454011879264
4181
2
55
53316291173
2504730781961
514229
4660046610375530309
3524578
32951280099
433494437
28657
86267571272
1
72723460248141
1
1134903170
61305790721611591
3
267914296
701408733
75025
165580141
433494437
12200160415121876738
2111485077978050
377
39088169
10610209857723
4660046610375530309
1100087778366101931
5702887
8944394323791464
956722026041
165580141
2584
8
121393
5702887
8
832040
17167680177565
63245986
1346269
31940434634990099905
89
10946
433494437
701408733
19740274219868223167
225851433717
14930352
1779979416004714189
956722026041
832040
259695496911122585
139583862445
308061521170129
2504730781961
701408733
987
1346269
23416728348467685
13
233
8944394323791464
12586269025
2
61305790721611591
7778742049
1779979416004714189
4052739537881
12200160415121876738
5702887
377
102334155
139583862445
610
102334155
1
190392490709135
433494437
832040
55
28657
28657
196418
218922995834555169026
498454011879264
135301852344706746049
4181
5702887
7540113804746346429
75025
28657
10610209857723
2178309
2
8
701408733
55
679891637638612258
17711
196418
1
1
10610209857723
27777890035288
102334155
259695496911122585
10946
12586269025
2111485077978050
63245986
12586269025
1836311903
28657
75025
433494437
701408733
591286729879
6765
8944394323791464
55
23416728348467685
6765
8944394323791464
267914296
19740274219868223167
2971215073
2971215073
433494437
21
433494437
39088169
144
23416728348467685
591286729879
34
2971215073
17711
10610209857723
498454011879264
46368
61305790721611591
12586269025
514229
610
365435296162
46368
39088169
591286729879
20365011074
160500643816367088
13
956722026041
144
7540113804746346429
139583862445
267914296
13
39088169
83621143489848422977
12200160415121876738
317811
956722026041
20365011074
34
832040
12586269025
2178309
2971215073
102334155
53316291173
4807526976
121393
39088169
83621143489848422977
21
2
102334155
6765
34
1100087778366101931
12586269025
433494437
2584
1779979416004714189
2111485077978050
1597
806515533049393
2971215073
7540113804746346429
832040
4052739537881
610
121393
28657
24157817
1
4052739537881
46368
2111485077978050
420196140727489673
5
225851433717
12586269025
13
2
20365011074
267914296
23416728348467685
377
14930352
14472334024676221
10610209857723
7540113804746346429
39088169
259695496911122585
679891637638612258
37889062373143906
102334155
39088169
20365011074
9227465
27777890035288
55
1304969544928657
139583862445
53316291173
225851433717
139583862445
14930352
21
1134903170
4052739537881
3
135301852344706746049
225851433717
196418
1134903170
3524578
4181
34
31940434634990099905
51680708854858323072
3
51680708854858323072
365435296162
2178309
63245986
17711
1
7778742049
1304969544928657
3524578
8944394323791464
4807526976
3524578
10610209857723
1100087778366101931
1100087778366101931
2178309
259695496911122585
218922995834555169026
420196140727489673
4660046610375530309
8944394323791464
9227465
21
99194853094755497
63245986
19740274219868223167
806515533049393
8944394323791464
3524578
10610209857723
27777890035288
1346269
377
13
679891637638612258
233
8944394323791464
165580141
498454011879264
591286729879
12200160415121876738
139583862445
2504730781961
267914296
51680708854858323072
3
28657
139583862445
190392490709135
117669030460994
31940434634990099905
61305790721611591
6557470319842
2880067194370816120
1
365435296162
1
9227465
44945570212853
63245986
2
2971215073
17167680177565
317811
2584
89
117669030460994
1346269
1779979416004714189
2971215073
7778742049
8
89
46368
956722026041
1
218922995834555169026
5702887
14472334024676221
2178309
117669030460994
806515533049393
28657
377
27777890035288
10610209857723
102334155
5527939700884757
1597
9227465
83621143489848422977
806515533049393
53316291173
3524578
701408733
1304969544928657
591286729879
3524578
1304969544928657
160500643816367088
46368
144
31940434634990099905
1597
377
225851433717
24157817
1836311903
806515533049393
63245986
34
117669030460994
89
75025
2880067194370816120
117669030460994
8944394323791464
135301852344706746049
32951280099
1304969544928657
8944394323791464
14930352
365435296162
32951280099
4181
139583862445
32951280099
86267571272
83621143489848422977
377
32951280099
2584
86267571272
308061521170129
1
377
135301852344706746049
3416454622906707
190392490709135
6557470319842
5
17167680177565
514229
267914296
121393
433494437
433494437
3416454622906707
99194853094755497
433494437
4807526976
160500643816367088
37889062373143906
317811
72723460248141
2504730781961
7778742049
31940434634990099905
7778742049
44945570212853
72723460248141
165580141
5702887
3416454622906707
308061521170129
365435296162
51680708854858323072
1100087778366101931
102334155
1100087778366101931
591286729879
34
4807526976
72723460248141
10946
514229
806515533049393
17711
610
5527939700884757
1779979416004714189
19740274219868223167
19740274219868223167
2504730781961
37889062373143906
72723460248141
377
3524578
135301852344706746049
2111485077978050
34
10610209857723
117669030460994
44945570212853
10610209857723
31940434634990099905
160500643816367088
610
2
17711
4181
2504730781961
121393
37889062373143906
83621143489848422977
4807526976
4052739537881
117669030460994
1836311903
10946
31940434634990099905
3416454622906707
117669030460994
4807526976
53316291173
1304969544928657
7540113804746346429
63245986
32951280099
6557470319842
1836311903
51680708854858323072
102334155
420196140727489673
2
17711
1548008755920
9227465
610
1
1597
1100087778366101931
72723460248141
14472334024676221
433494437
498454011879264
10610209857723
27777890035288
433494437
51680708854858323072
46368
377
14930352
956722026041
2880067194370816120
514229
17167680177565
1779979416004714189
196418
144
806515533049393
2178309
2
806515533049393
37889062373143906
365435296162
365435296162
2
8944394323791464
365435296162
8
5527939700884757
10610209857723
12200160415121876738
6765
17167680177565
44945570212853
987
1304969544928657
24157817
165580141
144
1100087778366101931
19740274219868223167
433494437
10610209857723
610
956722026041
2971215073
1597
27777890035288
28657
1
3
37889062373143906
75025
46368
514229
24157817
591286729879
5702887
39088169
5
51680708854858323072
121393
135301852344706746049
2
2111485077978050
1134903170
144
1346269
21
86267571272
28657
8
317811
46368
1304969544928657
17711
3
4052739537881
14930352
31940434634990099905
3524578
2504730781961
34
31940434634990099905
420196140727489673
61305790721611591
165580141
1100087778366101931
2178309
267914296
233
317811
12200160415121876738
121393
2111485077978050
53316291173
7540113804746346429
701408733
8944394323791464
7540113804746346429
433494437
46368
806515533049393
4052739537881
89
121393
3416454622906707
218922995834555169026
806515533049393
135301852344706746049
160500643816367088
121393
3
39088169
27777890035288
55
31940434634990099905
317811
701408733
806515533049393
17167680177565
28657
17167680177565
956722026041
75025
63245986
1836311903
1134903170
2584
2584
2178309
55
225851433717
32951280099
1779979416004714189
3416454622906707
34
19740274219868223167
14472334024676221
3524578
2504730781961
135301852344706746049
5702887
19740274219868223167
308061521170129
75025
4807526976
34
2880067194370816120
4807526976
53316291173
89
514229
806515533049393
17167680177565
806515533049393
196418
317811
806515533049393
259695496911122585
196418
44945570212853
6557470319842
39088169
591286729879
24157817
63245986
44945570212853
1548008755920
679891637638612258
2504730781961
679891637638612258
233
2178309
37889062373143906
8944394323791464
233
498454011879264
2
233
1597
86267571272
308061521170129
72723460248141
102334155
225851433717
6765
514229
63245986
1
8944394323791464
4181
3416454622906707
4807526976
196418
6765
956722026041
433494437
21
4052739537881
61305790721611591
99194853094755497
1100087778366101931
14930352
13
17167680177565
2880067194370816120
34
17711
2504730781961
12586269025
4807526976
4660046610375530309
12586269025
1
196418
956722026041
102334155
75025
591286729879
117669030460994
86267571272
102334155
498454011879264
61305790721611591
83621143489848422977
24157817
55
2504730781961
83621143489848422977
365435296162
3
1548008755920
832040
218922995834555169026
5
23416728348467685
365435296162
1597
1
1
46368
4052739537881
591286729879
39088169
32951280099
4052739537881
3524578
39088169
75025
196418
144
190392490709135
1836311903
34
956722026041
1100087778366101931
21
102334155
701408733
160500643816367088
4807526976
1100087778366101931
377
6557470319842
5702887
259695496911122585
591286729879
13
46368
2880067194370816120
121393
12200160415121876738
34
3
7778742049
9227465
34
24157817
86267571272
17167680177565
139583862445
121393
233
13
31940434634990099905
4052739537881
701408733
99194853094755497
55
1
63245986
86267571272
3
32951280099
3416454622906707
4660046610375530309
61305790721611591
2111485077978050
139583862445
4807526976
17711
32951280099
44945570212853
75025
317811
37889062373143906
806515533049393
2971215073
32951280099
4052739537881
83621143489848422977
190392490709135
83621143489848422977
8944394323791464
610
14472334024676221
2880067194370816120
832040
17167680177565
139583862445
61305790721611591
135301852344706746049
9227465
99194853094755497
21
218922995834555169026
44945570212853
53316291173
61305790721611591
5527939700884757
46368
102334155
2504730781961
259695496911122585
1548008755920
3
6765
377
31940434634990099905
24157817
28657
39088169
9227465
1
2880067194370816120
27777890035288
24157817
17711
8944394323791464
17711
1
7540113804746346429
10946
679891637638612258
196418
144
679891637638612258
1346269
23416728348467685
139583862445
3416454622906707
10610209857723
1
956722026041
4807526976
2178309
3
160500643816367088
832040
24157817
267914296
17167680177565
17167680177565
5
160500643816367088
2
44945570212853
61305790721611591
2111485077978050
233
365435296162
72723460248141
83621143489848422977
102334155
86267571272
32951280099
1779979416004714189
1134903170
4807526976
135301852344706746049
308061521170129
1346269
72723460248141
102334155
61305790721611591
83621143489848422977
259695496911122585
1597
17167680177565
75025
44945570212853
2
12200160415121876738
1304969544928657
2880067194370816120
89
259695496911122585
4660046610375530309
7778742049
63245986
9227465
34
89
701408733
8944394323791464
12200160415121876738
20365011074
86267571272
139583862445
72723460248141
591286729879
679891637638612258
83621143489848422977
3524578
1779979416004714189
8944394323791464
165580141
433494437
10610209857723
13
1836311903
37889062373143906
10946
365435296162
1548008755920
4052739537881
19740274219868223167
23416728348467685
86267571272
233
2971215073
1548008755920
679891637638612258
5
832040
10946
165580141
4807526976
267914296
4660046610375530309
117669030460994
135301852344706746049
121393
1346269
1134903170
4052739537881
233
19740274219868223167
4807526976
121393
1134903170
21
4660046610375530309
28657
317811
102334155
9227465
2
102334155
8944394323791464
498454011879264
17711
701408733
317811
3416454622906707
34
1346269
72723460248141
10610209857723
51680708854858323072
832040
89
3416454622906707
1346269
72723460248141
2971215073
55
956722026041
1100087778366101931
20365011074
7778742049
196418
1134903170
55
956722026041
987
1779979416004714189
1134903170
32951280099
19740274219868223167
102334155
6765
1779979416004714189
377
1597
135301852344706746049
13
2880067194370816120
225851433717
10946
225851433717
34
267914296
987
1
117669030460994
956722026041
6557470319842
14472334024676221
165580141
83621143489848422977
9227465
39088169
1836311903
34
514229
2880067194370816120
55
39088169
12200160415121876738
7540113804746346429
135301852344706746049
1100087778366101931
144
86267571272
591286729879
1
144
1304969544928657
1134903170
102334155
10610209857723
2971215073
37889062373143906
5527939700884757
31940434634990099905
7540113804746346429
806515533049393
1548008755920
317811
135301852344706746049
2111485077978050
21
3524578
86267571272
10946
420196140727489673
23416728348467685
51680708854858323072
135301852344706746049
806515533049393
1779979416004714189
1836311903
190392490709135
72723460248141
44945570212853
63245986
679891637638612258
102334155
10946
117669030460994
9227465
55
31940434634990099905
14930352
31940434634990099905
259695496911122585
225851433717
1597
267914296
4660046610375530309
7778742049
2880067194370816120
2880067194370816120
8944394323791464
160500643816367088
377
99194853094755497
12586269025
17167680177565
233
377
5527939700884757
1346269
420196140727489673
2
10946
3416454622906707
4052739537881
10946
14472334024676221
8944394323791464
1779979416004714189
83621143489848422977
4660046610375530309
61305790721611591
233
20365011074
701408733
53316291173
39088169
4181
308061521170129
1
17167680177565
135301852344706746049
8944394323791464
27777890035288
28657
7540113804746346429
28657
23416728348467685
61305790721611591
24157817
121393
17711
6765
55
259695496911122585
2
144
591286729879
51680708854858323072
987
61305790721611591
1548008755920
21
196418
39088169
75025
308061521170129
51680708854858323072
121393
12200160415121876738
218922995834555169026
160500643816367088
13
377
1597
19740274219868223167
7540113804746346429
37889062373143906
31940434634990099905
3524578
10946
135301852344706746049
139583862445
2
7540113804746346429
1779979416004714189
24157817
10946
1100087778366101931
12586269025
17167680177565
27777890035288
51680708854858323072
1304969544928657
4181
13
196418
3416454622906707
31940434634990099905
3
1346269
1836311903
20365011074
218922995834555169026
17167680177565
4807526976
89
317811
498454011879264
1836311903
86267571272
23416728348467685
5527939700884757
31940434634990099905
6557470319842
23416728348467685
135301852344706746049
17167680177565
27777890035288
1
5527939700884757
14472334024676221
4660046610375530309
610
1779979416004714189
4660046610375530309
160500643816367088
165580141
233
9227465
987
4807526976
1
12586269025
72723460248141
144
2504730781961
2178309
1836311903
46368
2
1
27777890035288
190392490709135
14472334024676221
44945570212853
20365011074
956722026041
4660046610375530309
117669030460994
196418
7778742049
956722026041
12200160415121876738
144
75025
3
498454011879264
365435296162
1597
53316291173
55
233
4660046610375530309
102334155
259695496911122585
53316291173
1134903170
61305790721611591
72723460248141
514229
99194853094755497
135301852344706746049
21
2178309
55
1548008755920
27777890035288
7778742049
7778742049
61305790721611591
39088169
2504730781961
2111485077978050
83621143489848422977
14930352
144
102334155
5527939700884757
7540113804746346429
17167680177565
267914296
433494437
17167680177565
5702887
14930352
190392490709135
17167680177565
225851433717
7540113804746346429
12586269025
4660046610375530309
61305790721611591
225851433717
259695496911122585
5702887
7778742049
1346269
39088169
23416728348467685
6557470319842
365435296162
86267571272
1304969544928657
196418
196418
37889062373143906
987
4181
31940434634990099905
20365011074
23416728348467685
1836311903
3
806515533049393
498454011879264
75025
7778742049
12200160415121876738
4807526976
27777890035288
13
61305790721611591
99194853094755497
6765
23416728348467685
1
13
1
7540113804746346429
51680708854858323072
23416728348467685
267914296
4660046610375530309
2
17711
591286729879
4052739537881
1
610
514229
832040
10946
233
987
4052739537881
10946
27777890035288
956722026041
377
5
3524578
987
2178309
13
13
1597
72723460248141
1
46368
32951280099
218922995834555169026
83621143489848422977
1836311903
5527939700884757
1346269
365435296162
225851433717
83621143489848422977
63245986
5527939700884757
1836311903
267914296
61305790721611591
10610209857723
5527939700884757
2
308061521170129
31940434634990099905
433494437
8944394323791464
218922995834555169026
20365011074
308061521170129
498454011879264
17711
23416728348467685
13
2111485077978050
21
17711
99194853094755497
53316291173
956722026041
679891637638612258
1779979416004714189
2880067194370816120
135301852344706746049
10610209857723
139583862445
17711
2
46368
27777890035288
498454011879264
12586269025
72723460248141
267914296
233
10946
2971215073
14472334024676221
83621143489848422977
14472334024676221
1836311903
99194853094755497
86267571272
72723460248141
433494437
31940434634990099905
89
89
31940434634990099905
12586269025
135301852344706746049
591286729879
1100087778366101931
89
23416728348467685
2
987
139583862445
701408733
61305790721611591
12586269025
3
6557470319842
2880067194370816120
498454011879264
1597
28657
832040
21
308061521170129
139583862445
20365011074
46368
102334155
32951280099
377
121393
233
1779979416004714189
233
591286729879
37889062373143906
5527939700884757
498454011879264
806515533049393
1779979416004714189
2
4807526976
6557470319842
17711
196418
1779979416004714189
3524578
34
6557470319842
20365011074
365435296162
99194853094755497
160500643816367088
6765
5
1597
13
55
89
1134903170
46368
4052739537881
2971215073
63245986
160500643816367088
32951280099
365435296162
55
20365011074
701408733
10610209857723
1304969544928657
4660046610375530309
259695496911122585
10946
17167680177565
160500643816367088
10610209857723
701408733
1304969544928657
2
28657
61305790721611591
14930352
2584
23416728348467685
4660046610375530309
701408733
591286729879
8944394323791464
27777890035288
1597
6557470319842
365435296162
9227465
46368
1779979416004714189
1836311903
31940434634990099905
121393
233
679891637638612258
53316291173
498454011879264
14472334024676221
27777890035288
5527939700884757
61305790721611591
591286729879
498454011879264
2
160500643816367088
144
39088169
9227465
72723460248141
24157817
3
5527939700884757
1100087778366101931
144
3416454622906707
28657
2880067194370816120
99194853094755497
2504730781961
679891637638612258
218922995834555169026
8
267914296
2111485077978050
6765
433494437
225851433717
1
20365011074
4181
12586269025
17711
365435296162
4052739537881
139583862445
23416728348467685
20365011074
196418
7778742049
259695496911122585
53316291173
218922995834555169026
21
7778742049
83621143489848422977
8
1
139583862445
259695496911122585
196418
701408733
2178309
14930352
102334155
317811
13
267914296
9227465
19740274219868223167
34
4181
1597
1304969544928657
12200160415121876738
4660046610375530309
987
31940434634990099905
32951280099
2111485077978050
2
3524578
37889062373143906
165580141
196418
420196140727489673
190392490709135
20365011074
2584
956722026041
37889062373143906
2
610
433494437
1100087778366101931
121393
365435296162
6557470319842
190392490709135
9227465
28657
1836311903
420196140727489673
21
6557470319842
75025
1
679891637638612258
259695496911122585
46368
89
420196140727489673
2584
190392490709135
701408733
267914296
117669030460994
24157817
135301852344706746049
7778742049
2504730781961
196418
75025
514229
1548008755920
832040
14930352
72723460248141
267914296
63245986
196418
1
7778742049
117669030460994
3416454622906707
3524578
17711
89
806515533049393
3524578
135301852344706746049
24157817
12586269025
225851433717
135301852344706746049
218922995834555169026
99194853094755497
5702887
4807526976
53316291173
365435296162
1346269
679891637638612258
139583862445
23416728348467685
12200160415121876738
139583862445
225851433717
2111485077978050
4181
218922995834555169026
37889062373143906
832040
956722026041
10946
165580141
679891637638612258
8944394323791464
308061521170129
21
806515533049393
31940434634990099905
1134903170
21
1597
6557470319842
2
28657
9227465
377
165580141
8
2178309
317811
14930352
1346269
139583862445
19740274219868223167
10946
308061521170129
610
3416454622906707
1134903170
31940434634990099905
377
1100087778366101931
233
225851433717
61305790721611591
63245986
17711
160500643816367088
610
377
2971215073
27777890035288
1100087778366101931
1597
44945570212853
1779979416004714189
2504730781961
17711
14930352
165580141
2178309
27777890035288
3
956722026041
2111485077978050
225851433717
39088169
19740274219868223167
3524578
987
591286729879
75025
679891637638612258
259695496911122585
1597
14472334024676221
1
165580141
218922995834555169026
19740274219868223167
19740274219868223167
23416728348467685
14930352
117669030460994
987
2504730781961
51680708854858323072
102334155
365435296162
144
1100087778366101931
3
46368
165580141
3
377
4807526976
2971215073
24157817
46368
233
514229
1134903170
7778742049
28657
190392490709135
498454011879264
832040
46368
14930352
3416454622906707
135301852344706746049
89
8944394323791464
75025
34
165580141
233
23416728348467685
19740274219868223167
21
17167680177565
27777890035288
225851433717
31940434634990099905
34
13
89
1548008755920
1548008755920
1100087778366101931
6557470319842
99194853094755497
12200160415121876738
806515533049393
37889062373143906
3
514229
1597
1100087778366101931
139583862445
51680708854858323072
102334155
4181
2
591286729879
55
24157817
514229
13
2504730781961
2504730781961
514229
32951280099
20365011074
21
2880067194370816120
4807526976
144
7540113804746346429
259695496911122585
2971215073
1597
956722026041
1100087778366101931
701408733
1304969544928657
5702887
701408733
1
2504730781961
8
160500643816367088
72723460248141
61305790721611591
308061521170129
259695496911122585
83621143489848422977
6765
39088169
14472334024676221
2178309
2971215073
32951280099
13
17167680177565
190392490709135
420196140727489673
8
63245986
160500643816367088
32951280099
433494437
61305790721611591
5
160500643816367088
37889062373143906
2971215073
102334155
63245986
10610209857723
1
987
117669030460994
1304969544928657
20365011074
1
44945570212853
37889062373143906
37889062373143906
267914296
135301852344706746049
806515533049393
377
218922995834555169026
3416454622906707
12200160415121876738
679891637638612258
610
1
6557470319842
2971215073
1
14472334024676221
1779979416004714189
433494437
10946
1134903170
190392490709135
8
196418
1100087778366101931
7540113804746346429
63245986
32951280099
218922995834555169026
308061521170129
34
1597
365435296162
3
259695496911122585
86267571272
61305790721611591
10946
2504730781961
3
14472334024676221
20365011074
514229
2178309
7540113804746346429
20365011074
63245986
610
433494437
1548008755920
14930352
956722026041
12586269025
160500643816367088
365435296162
196418
27777890035288
1100087778366101931
5
498454011879264
72723460248141
225851433717
99194853094755497
46368
51680708854858323072
28657
498454011879264
2
9227465
6765
433494437
160500643816367088
24157817
28657
1597
317811
4181
24157817
308061521170129
259695496911122585
14930352
218922995834555169026
17167680177565
225851433717
433494437
377
225851433717
1
12586269025
2504730781961
1779979416004714189
53316291173
6557470319842
1346269
1548008755920
12200160415121876738
1597
32951280099
8
225851433717
19740274219868223167
12586269025
102334155
8
377
8
1779979416004714189
55
2584
2880067194370816120
420196140727489673
420196140727489673
7540113804746346429
9227465
63245986
8
4660046610375530309
1548008755920
1836311903
1548008755920
2504730781961
317811
806515533049393
225851433717
86267571272
117669030460994
12200160415121876738
1597
27777890035288
3416454622906707
233
1779979416004714189
39088169
37889062373143906
8944394323791464
102334155
317811
225851433717
514229
2584
1
1779979416004714189
1100087778366101931
5702887
31940434634990099905
4181
10610209857723
37889062373143906
86267571272
1
2178309
19740274219868223167
61305790721611591
1304969544928657
61305790721611591
72723460248141
51680708854858323072
1836311903
7540113804746346429
10946
117669030460994
4807526976
5702887
10946
2178309
83621143489848422977
61305790721611591
10610209857723
3
2971215073
2504730781961
9227465
14472334024676221
218922995834555169026
225851433717
28657
14472334024676221
27777890035288
34
17711
196418
2
72723460248141
956722026041
225851433717
2971215073
75025
1134903170
17711
61305790721611591
44945570212853
591286729879
987
28657
53316291173
39088169
2111485077978050
165580141
987
46368
14930352
102334155
267914296
7778742049
832040
2880067194370816120
75025
8944394323791464
3
20365011074
12200160415121876738
7778742049
14930352
1779979416004714189
591286729879
37889062373143906
987
5
7778742049
24157817
832040
12200160415121876738
701408733
5
4807526976
1100087778366101931
4807526976
4660046610375530309
14472334024676221
498454011879264
218922995834555169026
1346269
2
44945570212853
14472334024676221
1304969544928657
19740274219868223167
1346269
1100087778366101931
196418
12200160415121876738
28657
37889062373143906
987
4807526976
377
832040
10946
17711
7778742049
701408733
14930352
19740274219868223167
55
8944394323791464
14472334024676221
225851433717
39088169
498454011879264
196418
591286729879
23416728348467685
6765
51680708854858323072
13
14930352
139583862445
39088169
498454011879264
377
433494437
89
27777890035288
2
89
9227465
32951280099
46368
20365011074
1134903170
1836311903
61305790721611591
4052739537881
121393
55
13
259695496911122585
17711
433494437
135301852344706746049
37889062373143906
190392490709135
34
2584
32951280099
2
20365011074
1100087778366101931
61305790721611591
1779979416004714189
233
21
12200160415121876738
2971215073
63245986
135301852344706746049
806515533049393
259695496911122585
4052739537881
20365011074
53316291173
591286729879
61305790721611591
37889062373143906
377
2
365435296162
20365011074
377
21
4807526976
679891637638612258
34
28657
165580141
5527939700884757
12200160415121876738
2971215073
102334155
3416454622906707
55
433494437
1
1304969544928657
225851433717
17167680177565
89
2971215073
6765
13
14930352
806515533049393
14930352
7778742049
160500643816367088
89
267914296
44945570212853
89
10946
1304969544928657
12586269025
7540113804746346429
2971215073
1134903170
9227465
7778742049
27777890035288
2971215073
498454011879264
196418
267914296
225851433717
121393
5
956722026041
2584
8
2178309
165580141
27777890035288
4181
514229
89
5527939700884757
72723460248141
317811
3524578
86267571272
377
53316291173
3524578
498454011879264
4181
365435296162
23416728348467685
102334155
956722026041
51680708854858323072
86267571272
37889062373143906
196418
433494437
7778742049
21
21
6557470319842
259695496911122585
225851433717
12200160415121876738
514229
14930352
10610209857723
377
4052739537881
17167680177565
99194853094755497
218922995834555169026
1597
806515533049393
86267571272
420196140727489673
2504730781961
4052739537881
3
24157817
5527939700884757
17167680177565
139583862445
8944394323791464
83621143489848422977
14472334024676221
8
2111485077978050
6557470319842
4807526976
701408733
2880067194370816120
13
377
117669030460994
2584
27777890035288
28657
102334155
21
139583862445
139583862445
308061521170129
498454011879264
5702887
3416454622906707
144
14930352
3
259695496911122585
24157817
72723460248141
3524578
2178309
4660046610375530309
83621143489848422977
19740274219868223167
679891637638612258
365435296162
591286729879
420196140727489673
196418
20365011074
20365011074
190392490709135
4052739537881
4052739537881
46368
591286729879
13
63245986
1100087778366101931
37889062373143906
55
5702887
3524578
19740274219868223167
701408733
139583862445
160500643816367088
61305790721611591
19740274219868223167
20365011074
37889062373143906
75025
13
498454011879264
34
7540113804746346429
39088169
63245986
63245986
420196140727489673
225851433717
10946
14930352
160500643816367088
377
2
17711
19740274219868223167
121393
1
20365011074
2
37889062373143906
9227465
3
86267571272
1548008755920
420196140727489673
2111485077978050
956722026041
1
63245986
433494437
433494437
1134903170
3524578
75025
1779979416004714189
21
53316291173
591286729879
4807526976
12200160415121876738
61305790721611591
514229
4052739537881
53316291173
956722026041
27777890035288
4807526976
99194853094755497
12586269025
165580141
987
190392490709135
2880067194370816120
2178309
23416728348467685
63245986
5702887
46368
267914296
24157817
8
61305790721611591
121393
23416728348467685
13
51680708854858323072
135301852344706746049
610
498454011879264
13
28657
832040
2
1304969544928657
679891637638612258
32951280099
8944394323791464
420196140727489673
433494437
2111485077978050
1100087778366101931
53316291173
1100087778366101931
701408733
34
365435296162
225851433717
190392490709135
27777890035288
72723460248141
53316291173
9227465
5702887
267914296
317811
420196140727489673
225851433717
317811
86267571272
806515533049393
23416728348467685
2178309
5702887
196418
44945570212853
4660046610375530309
13
610
61305790721611591
75025
2178309
39088169
308061521170129
591286729879
46368
2880067194370816120
117669030460994
12200160415121876738
13
28657
1
32951280099
308061521170129
72723460248141
13
6765
39088169
14472334024676221
2971215073
23416728348467685
12200160415121876738
12586269025
1597
31940434634990099905
190392490709135
102334155
4052739537881
99194853094755497
7540113804746346429
160500643816367088
2504730781961
5
32951280099
1779979416004714189
1304969544928657
2971215073
3
433494437
7540113804746346429
28657
225851433717
956722026041
53316291173
1100087778366101931
12586269025
4052739537881
2178309
8
2584
72723460248141
20365011074
51680708854858323072
28657
3416454622906707
5702887
23416728348467685
679891637638612258
2178309
514229
10946
39088169
61305790721611591
63245986
117669030460994
14930352
806515533049393
10946
514229
12200160415121876738
14472334024676221
14472334024676221
121393
17711
86267571272
5527939700884757
12200160415121876738
1
5702887
420196140727489673
144
9227465
23416728348467685
2
23416728348467685
498454011879264
3524578
420196140727489673
1836311903
1597
1779979416004714189
433494437
75025
10610209857723
139583862445
160500643816367088
32951280099
8
165580141
2111485077978050
1134903170
46368
267914296
806515533049393
1134903170
10946
610
89
4052739537881
267914296
27777890035288
806515533049393
1779979416004714189
4181
139583862445
420196140727489673
12586269025
498454011879264
51680708854858323072
433494437
121393
39088169
956722026041
44945570212853
20365011074
1779979416004714189
6557470319842
7540113804746346429
2584
7778742049
46368
1100087778366101931
61305790721611591
99194853094755497
5527939700884757
51680708854858323072
701408733
7778742049
2584
433494437
1
27777890035288
6765
1548008755920
2971215073
14930352
3524578
10610209857723
5702887
19740274219868223167
89
610
2178309
225851433717
1
160500643816367088
10610209857723
2
832040
14930352
14930352
121393
233
12586269025
37889062373143906
5527939700884757
1
2584
2111485077978050
117669030460994
17167680177565
1346269
75025
160500643816367088
6557470319842
37889062373143906
144
2
121393
190392490709135
55
121393
27777890035288
102334155
28657
1548008755920
4181
9227465
3524578
2584
259695496911122585
55
2504730781961
39088169
61305790721611591
2178309
832040
2111485077978050
7778742049
2971215073
4181
12586269025
135301852344706746049
86267571272
7778742049
75025
10946
10610209857723
365435296162
2880067194370816120
99194853094755497
4181
610
5527939700884757
89
21
514229
1548008755920
218922995834555169026
1779979416004714189
24157817
99194853094755497
1304969544928657
34
365435296162
10946
1548008755920
86267571272
1304969544928657
433494437
21
233
8944394323791464
4807526976
75025
2
4181
83621143489848422977
317811
420196140727489673
498454011879264
72723460248141
9227465
102334155
89
19740274219868223167
1779979416004714189
218922995834555169026
679891637638612258
225851433717
2111485077978050
10946
6765
12586269025
23416728348467685
14472334024676221
2
121393
308061521170129
55
1
61305790721611591
1548008755920
32951280099
53316291173
218922995834555169026
10946
1597
31940434634990099905
218922995834555169026
498454011879264
9227465
139583862445
117669030460994
99194853094755497
1304969544928657
19740274219868223167
806515533049393
7778742049
6798916376386122
Download .txt
gitextract_s71i4brv/

├── .gitignore
├── LICENSE.md
├── README.md
├── array_rotate/
│   ├── README.md
│   └── solutions/
│       ├── README.md
│       ├── keppy.rb
│       ├── keppy_test.rb
│       └── rotate-solution.rb
├── balanced_delimiter/
│   ├── HINTS.md
│   ├── README.md
│   ├── SOLUTION.md
│   ├── generator/
│   │   └── gen_testcase.rb
│   ├── solutions/
│   │   ├── balanced_delimiter.c
│   │   └── balanced_delimiter.js
│   └── tests/
│       ├── input00.txt
│       ├── input01.txt
│       ├── input02.txt
│       ├── input03.txt
│       ├── input04.txt
│       ├── input05.txt
│       ├── input06.txt
│       ├── input07.txt
│       ├── input08.txt
│       ├── input09.txt
│       ├── input10.txt
│       ├── input11.txt
│       ├── output00.txt
│       ├── output01.txt
│       ├── output02.txt
│       ├── output03.txt
│       ├── output04.txt
│       ├── output05.txt
│       ├── output06.txt
│       ├── output07.txt
│       ├── output08.txt
│       ├── output09.txt
│       ├── output10.txt
│       └── output11.txt
├── bst_count/
│   ├── README.md
│   └── solutions/
│       └── solution.js
├── bst_height/
│   ├── README.md
│   └── solutions/
│       └── .gitkeep
├── coin_change/
│   ├── README.md
│   └── solutions/
│       ├── CoinChangeSolution.java
│       ├── CoinChangeSolution.scala
│       ├── CoinChangeSolutionTest.java
│       ├── coin_change_solution.js
│       └── coin_change_solution.py
├── factorial/
│   ├── README.md
│   └── solutions/
│       ├── FactorialSolution.java
│       └── FactorialSolution.scala
├── fibonacci_dynamic/
│   ├── HINTS.md
│   ├── README.md
│   ├── SOLUTION.md
│   ├── SOLUTION.md.bak
│   ├── generator/
│   │   └── generate_cases.rb
│   ├── solutions/
│   │   └── fibonacci_dynamic.rb
│   └── tests/
│       ├── input00.txt
│       ├── input01.txt
│       ├── input02.txt
│       ├── input03.txt
│       ├── input04.txt
│       ├── input05.txt
│       ├── input06.txt
│       ├── output00.txt
│       ├── output01.txt
│       ├── output02.txt
│       ├── output03.txt
│       ├── output04.txt
│       ├── output05.txt
│       └── output06.txt
├── fibonacci_lite/
│   ├── HINTS.md
│   ├── README.md
│   ├── SOLUTION.md
│   ├── generator/
│   │   └── gen_testcase.rb
│   ├── solutions/
│   │   └── fibonacci.rb
│   └── tests/
│       ├── input00.txt
│       ├── input01.txt
│       ├── input02.txt
│       ├── input03.txt
│       ├── input04.txt
│       ├── input05.txt
│       ├── input06.txt
│       ├── input07.txt
│       ├── input08.txt
│       ├── input09.txt
│       ├── output00.txt
│       ├── output01.txt
│       ├── output02.txt
│       ├── output03.txt
│       ├── output04.txt
│       ├── output05.txt
│       ├── output06.txt
│       ├── output07.txt
│       ├── output08.txt
│       └── output09.txt
├── find_uncoupled_int/
│   ├── README.md
│   └── solutions/
│       ├── FindUncoupledIntSolution.java
│       └── Solution.java
├── linked_list_cycle/
│   ├── README.md
│   └── solutions/
│       ├── .gitkeep
│       └── LinkedListCycle.java
├── linked_list_reverse/
│   ├── README.md
│   └── solutions/
│       └── .gitkeep
├── minimum_stack/
│   ├── README.md
│   └── solutions/
│       └── solution.js
├── queue_two_stacks/
│   ├── README.md
│   └── solutions/
│       └── solution.js
├── ransom/
│   ├── Ransom.java
│   └── RansomTest.java
├── target_sum/
│   ├── README.md
│   └── solutions/
│       ├── .gitkeep
│       └── solution.js
└── tree_zig_zag/
    ├── .gitignore
    ├── HINTS.md
    ├── README.md
    ├── SOLUTION.md
    ├── generator/
    │   └── generate_tree.py
    ├── solutions/
    │   ├── TreeZigZag.java
    │   ├── tree_zig_zag.py
    │   └── tree_zig_zag.rb
    └── tests/
        ├── input1.txt
        ├── input2.txt
        ├── input3.txt
        ├── output1.txt
        ├── output2.txt
        └── output3.txt
Download .txt
SYMBOL INDEX (113 symbols across 28 files)

FILE: array_rotate/solutions/keppy.rb
  class StringAutoma (line 1) | class StringAutoma
    method solve (line 3) | def self.solve(set, n)

FILE: array_rotate/solutions/keppy_test.rb
  class StringAutomaTest (line 5) | class StringAutomaTest < MiniTest::Unit::TestCase
    method test_one_step (line 6) | def test_one_step
    method test_odd_split (line 13) | def test_odd_split
    method test_over_step (line 20) | def test_over_step

FILE: array_rotate/solutions/rotate-solution.rb
  function rotate_jump (line 1) | def rotate_jump(array, n)
  function rotate_step (line 13) | def rotate_step(array, n)
  class RotateTest (line 24) | class RotateTest < Test::Unit::TestCase
    method test_step (line 26) | def test_step()
    method test_jump (line 30) | def test_jump()
    method rotate_check_helper (line 34) | def rotate_check_helper(m)

FILE: balanced_delimiter/generator/gen_testcase.rb
  function hashrand (line 4) | def hashrand(h)
  function generate_pairs (line 9) | def generate_pairs(max_pairs)
  function make_invalid (line 41) | def make_invalid(str)

FILE: balanced_delimiter/solutions/balanced_delimiter.c
  type Stack (line 6) | struct Stack {
  type Stack_t (line 10) | typedef struct Stack Stack_t;
  type StackFrame (line 12) | struct StackFrame {
  type Frame_t (line 16) | typedef struct StackFrame Frame_t;
  function push (line 19) | void push(Stack_t *s, char v) {
  function pop (line 29) | char pop(Stack_t *s) {
  function matches (line 43) | int matches(char opener, char closer) {
  function opener (line 56) | int opener(char c) {
  function main (line 67) | int main() {

FILE: balanced_delimiter/solutions/balanced_delimiter.js
  function isCloser (line 7) | function isCloser(character) {
  function isOpener (line 11) | function isOpener(character) {
  function isBalanced (line 21) | function isBalanced(delimiterString) {

FILE: bst_count/solutions/solution.js
  function BSTNode (line 1) | function BSTNode(value) {
  function countNodes (line 7) | function countNodes(root) {

FILE: coin_change/solutions/CoinChangeSolution.java
  class CoinChangeSolution (line 6) | public class CoinChangeSolution {
    method main (line 8) | public static void main(String[] args) throws Exception {
    method countOptimal (line 27) | public static int countOptimal(int[] coins, int amt) {
    method countRecursive (line 41) | public static int countRecursive(int coins[], int c, int sum) {
    method print (line 54) | public static void print() {
    method getCoins (line 58) | private static int[] getCoins(String line) {

FILE: coin_change/solutions/CoinChangeSolutionTest.java
  class CoinChangeSolutionTest (line 7) | public class CoinChangeSolutionTest {
    method testCoinChangeSolutionRecursive (line 9) | @Test
    method testCoinChangeSolutionOptimal (line 22) | @Test
    method testCoinChangeSolutionRecursiveSpeed (line 35) | @Test
    method testCoinChangeSolutionOptimalSpeed (line 43) | @Test

FILE: coin_change/solutions/coin_change_solution.js
  function findPermutations (line 14) | function findPermutations(coins, n) {
  function processData (line 62) | function processData(input) {

FILE: coin_change/solutions/coin_change_solution.py
  function memoize (line 5) | def memoize(func):
  function solve (line 17) | def solve(coins, amount):
  function main (line 31) | def main():

FILE: factorial/solutions/FactorialSolution.java
  class FactorialSolution (line 8) | public class FactorialSolution {
    method main (line 10) | public static void main(String[] args) throws Exception {
    method factorial (line 24) | public static BigInteger factorial(BigInteger n, BigInteger acc) {

FILE: fibonacci_dynamic/generator/generate_cases.rb
  function fib (line 2) | def fib(n)

FILE: fibonacci_dynamic/solutions/fibonacci_dynamic.rb
  function fib (line 4) | def fib(n)

FILE: fibonacci_lite/generator/gen_testcase.rb
  function fib (line 2) | def fib(n)

FILE: fibonacci_lite/solutions/fibonacci.rb
  function fib (line 2) | def fib(n)

FILE: find_uncoupled_int/solutions/FindUncoupledIntSolution.java
  class FindUncoupledIntSolution (line 8) | public class FindUncoupledIntSolution {
    method main (line 10) | public static void main(String[] args) throws Exception {
    method find (line 28) | public static int find(int[] nums) {
    method findAll (line 43) | public static Integer[] findAll(int[] nums) {
    method toIntArray (line 52) | private static int[] toIntArray(String line) {

FILE: find_uncoupled_int/solutions/Solution.java
  class Solution (line 1) | class Solution {
    method findUncoupled (line 2) | public static int findUncoupled(int[] integers) {
    method findUncoupledSet (line 10) | public static int findUncoupledSet(int[] integers) {
    method main (line 29) | public static void main(String[] args) {

FILE: linked_list_cycle/solutions/LinkedListCycle.java
  class Node (line 4) | class Node<T> {
    method containsCycle (line 8) | public boolean containsCycle() {
  class Solution (line 25) | class Solution {
    method main (line 26) | public static void main(String[] args) {

FILE: minimum_stack/solutions/solution.js
  function Stack (line 1) | function Stack() {

FILE: queue_two_stacks/solutions/solution.js
  function Staqueue (line 1) | function Staqueue() {

FILE: ransom/Ransom.java
  class Ransom (line 4) | public class Ransom {
    method canRansom (line 5) | public static boolean canRansom(String magazine, String ransom) {

FILE: ransom/RansomTest.java
  class RansomTest (line 4) | public class RansomTest {
    method testCanRansom (line 6) | @Test

FILE: target_sum/solutions/solution.js
  function canMakeSum (line 1) | function canMakeSum(array, targetSum) {

FILE: tree_zig_zag/generator/generate_tree.py
  class Node (line 16) | class Node(object):
    method __init__ (line 19) | def __init__(self, value):
    method __str__ (line 24) | def __str__(self):
    method __repr__ (line 27) | def __repr__(self):
    method children (line 31) | def children(self):
    method as_hackerrank_lines (line 34) | def as_hackerrank_lines(self):
  function generate_bst (line 45) | def generate_bst(size, min_value=1, max_value=2 ** 31 - 1):
  function is_bst (line 69) | def is_bst(node, min_value=1, max_value=2 ** 31 - 1):
  function main (line 77) | def main():

FILE: tree_zig_zag/solutions/TreeZigZag.java
  class Node (line 12) | class Node<T> {
    method Node (line 22) | Node() {
    method Node (line 25) | Node(T value) {
    method setLeft (line 29) | public void setLeft(Node<T> left) { this.left = left; }
    method getLeft (line 30) | public Node<T> getLeft() { return this.left; }
    method setRight (line 31) | public void setRight(Node<T> right) { this.right = right; }
    method getRight (line 32) | public Node<T> getRight() { return this.right; }
    method getValue (line 33) | public T getValue() { return this.value; }
    method toString (line 35) | @Override
    method equals (line 40) | @Override
    method hashCode (line 48) | @Override
  class ZigZagTreeLevelSearch (line 57) | class ZigZagTreeLevelSearch<T> {
    method search (line 60) | public void search(Node<T> root) {
    method processLevel (line 85) | public void processLevel(List<Node<T>> level) {
  class TreeReader (line 92) | class TreeReader {
    method getOrCreate (line 93) | public Node<Integer> getOrCreate(Integer value, Map<Node<Integer>, Nod...
    method readTree (line 107) | public Node<Integer> readTree(InputStream in) {
  class TreeZigZag (line 128) | class TreeZigZag {
    method main (line 129) | public static void main(String args[]) {

FILE: tree_zig_zag/solutions/tree_zig_zag.py
  class Node (line 7) | class Node(object):
    method __init__ (line 10) | def __init__(self, value):
    method __hash__ (line 15) | def __hash__(self):
    method __eq__ (line 18) | def __eq__(self, other):
    method __str__ (line 23) | def __str__(self):
    method __repr__ (line 26) | def __repr__(self):
  class TreeReader (line 30) | class TreeReader(object):
    method get_vertex (line 32) | def get_vertex(cls, value, vertices):
    method read_tree (line 41) | def read_tree(cls, stream):
  function zig_zag_traverse (line 54) | def zig_zag_traverse(root):
  function main (line 73) | def main():

FILE: tree_zig_zag/solutions/tree_zig_zag.rb
  function find_val (line 14) | def find_val(side, depth)
  function find_val_r (line 18) | def find_val_r(side, depth, node, level)
Condensed preview — 127 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (609K chars).
[
  {
    "path": ".gitignore",
    "chars": 1000,
    "preview": "# ----------------------------------------------------------------------\n#   Java - default GitHub .gitignore\n# --------"
  },
  {
    "path": "LICENSE.md",
    "chars": 886,
    "preview": "<a rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/deed.en_US\"><img alt=\"Creative Commons License\" style="
  },
  {
    "path": "README.md",
    "chars": 1631,
    "preview": "# The Practice Problem Compendium\n\nTired of Googling around for programming interview practice problems? This is a proje"
  },
  {
    "path": "array_rotate/README.md",
    "chars": 564,
    "preview": "# Array Rotation\n\nThis problem is to rotate a given array to the right by `n` steps.\n\nFor example:\n\nGiven `[1, 2, 3]` an"
  },
  {
    "path": "array_rotate/solutions/README.md",
    "chars": 199,
    "preview": "# Further Resources\n\n* [LeetCode](http://leetcode.com/2010/04/rotating-array-in-place.html) explanations\n* [GeeksForGeek"
  },
  {
    "path": "array_rotate/solutions/keppy.rb",
    "chars": 163,
    "preview": "class StringAutoma\n\n  def self.solve(set, n)\n    # set is an array, n is an integer.\n    n.times do\n      set.unshift(se"
  },
  {
    "path": "array_rotate/solutions/keppy_test.rb",
    "chars": 576,
    "preview": "require 'minitest/autorun'\n\nrequire_relative './keppy.rb'\n\nclass StringAutomaTest < MiniTest::Unit::TestCase\n  def test_"
  },
  {
    "path": "array_rotate/solutions/rotate-solution.rb",
    "chars": 931,
    "preview": "def rotate_jump(array, n)\n  return array if n == 0 || array.length == 0\n\n  result = []\n\n  (0...array.length).each do |i|"
  },
  {
    "path": "balanced_delimiter/HINTS.md",
    "chars": 207,
    "preview": "## Things to think about\n- How will you keep track of previous delimiters?\n- How will you determine if the next characte"
  },
  {
    "path": "balanced_delimiter/README.md",
    "chars": 877,
    "preview": "For this question, you will parse a string to determine if it contains only\n\"balanced delimiters.\"\n\nA balanced delimiter"
  },
  {
    "path": "balanced_delimiter/SOLUTION.md",
    "chars": 1060,
    "preview": "# Balanced Delimiters\n\n## Explanation\n\nThis exercise is designed as a use case for a stack structure. The idea is that\nc"
  },
  {
    "path": "balanced_delimiter/generator/gen_testcase.rb",
    "chars": 2348,
    "preview": "@delims = { '[' => ']', '{' => '}', '(' => ')' }\n\n# Convenience function for picking a random value out of a hash.\ndef h"
  },
  {
    "path": "balanced_delimiter/solutions/balanced_delimiter.c",
    "chars": 1605,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n\n/* Stack definitions. We'll use char for all our values as it's convenient for\n "
  },
  {
    "path": "balanced_delimiter/solutions/balanced_delimiter.js",
    "chars": 991,
    "preview": "var closersToOpeners = {\n  ']': '[',\n  ')': '(',\n  '}': '{'\n};\n\nfunction isCloser(character) {\n  return closersToOpeners"
  },
  {
    "path": "balanced_delimiter/tests/input00.txt",
    "chars": 6,
    "preview": "([()])"
  },
  {
    "path": "balanced_delimiter/tests/input01.txt",
    "chars": 5,
    "preview": "([()]"
  },
  {
    "path": "balanced_delimiter/tests/input02.txt",
    "chars": 10,
    "preview": "{[{{[]}}]}"
  },
  {
    "path": "balanced_delimiter/tests/input03.txt",
    "chars": 11,
    "preview": "{[{{[](}}]}"
  },
  {
    "path": "balanced_delimiter/tests/input04.txt",
    "chars": 20,
    "preview": "{(({{[{{{}[]}}]}}))}"
  },
  {
    "path": "balanced_delimiter/tests/input05.txt",
    "chars": 19,
    "preview": "{(({{[{{{}]}}]}}))}"
  },
  {
    "path": "balanced_delimiter/tests/input06.txt",
    "chars": 200,
    "preview": "({{({}{{{[([[]]{})]}()}({[{([()])}()]({{[([]){{}([]{{}}{}([[]]){{{}[{}[{([][][[]([()(()({([([]{}(())())(({()(((([()[]]()"
  },
  {
    "path": "balanced_delimiter/tests/input07.txt",
    "chars": 199,
    "preview": "({{({}{{{[([[]]{})]}()}({[{([()])}()]({{[([]){{}([]{{}}{}([[]]){{{}[{}[{([][][[]([()(()({([([]{}(())())(({()((([()[]]())"
  },
  {
    "path": "balanced_delimiter/tests/input08.txt",
    "chars": 2000,
    "preview": "([{[[]()[{(){}}{{[{(([][[]{{({}({}[[{[[][]{}]({}[[{[]{{}{}[([])[((([((([([()(){({}((){})[[][(([[([][[[([[{{()}}[()[]](()"
  },
  {
    "path": "balanced_delimiter/tests/input09.txt",
    "chars": 2001,
    "preview": "([{[[]()[{(){}}{{[{(([][[]{{({}({}[[{[[][]{}]({}[[{[]{{}{}[([])[((([((([([()(){({}((){})[[][(([[([][[[([[{{()}}[()[]](()"
  },
  {
    "path": "balanced_delimiter/tests/input10.txt",
    "chars": 20000,
    "preview": "()[]((){[{({((){{}(([])){()}}[][][[[(({[][[]{{}}]}[])[{}{}][]((()(()()({[]}()()){[[[]{[{[]{[[({}(([[]][()[[{[]({[]})[]}("
  },
  {
    "path": "balanced_delimiter/tests/input11.txt",
    "chars": 20001,
    "preview": "()[]((){[{({((){{}(([])){()}}[][][[[(({[][[]{{}}]}[])[{}{}][]((()(()()({[]}()()){[[[]{[{[]{[[({}(([[]][()[[{[]({[]})[]}("
  },
  {
    "path": "balanced_delimiter/tests/output00.txt",
    "chars": 4,
    "preview": "True"
  },
  {
    "path": "balanced_delimiter/tests/output01.txt",
    "chars": 5,
    "preview": "False"
  },
  {
    "path": "balanced_delimiter/tests/output02.txt",
    "chars": 4,
    "preview": "True"
  },
  {
    "path": "balanced_delimiter/tests/output03.txt",
    "chars": 5,
    "preview": "False"
  },
  {
    "path": "balanced_delimiter/tests/output04.txt",
    "chars": 4,
    "preview": "True"
  },
  {
    "path": "balanced_delimiter/tests/output05.txt",
    "chars": 5,
    "preview": "False"
  },
  {
    "path": "balanced_delimiter/tests/output06.txt",
    "chars": 4,
    "preview": "True"
  },
  {
    "path": "balanced_delimiter/tests/output07.txt",
    "chars": 5,
    "preview": "False"
  },
  {
    "path": "balanced_delimiter/tests/output08.txt",
    "chars": 4,
    "preview": "True"
  },
  {
    "path": "balanced_delimiter/tests/output09.txt",
    "chars": 5,
    "preview": "False"
  },
  {
    "path": "balanced_delimiter/tests/output10.txt",
    "chars": 4,
    "preview": "True"
  },
  {
    "path": "balanced_delimiter/tests/output11.txt",
    "chars": 5,
    "preview": "False"
  },
  {
    "path": "bst_count/README.md",
    "chars": 78,
    "preview": "Given a binary search tree root, count the total number of nodes in the tree.\n"
  },
  {
    "path": "bst_count/solutions/solution.js",
    "chars": 216,
    "preview": "function BSTNode(value) {\n  this.value = value;\n  this.left = null;\n  this.right = null;\n}\n\nfunction countNodes(root) {\n"
  },
  {
    "path": "bst_height/README.md",
    "chars": 462,
    "preview": "Given a binary search tree, return its height—that is, the maximum depth reached by the tree.\n\nExample: given a BST with"
  },
  {
    "path": "bst_height/solutions/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "coin_change/README.md",
    "chars": 2041,
    "preview": "How many different ways can you make change for an amount, given a list of coins?\nIn this problem, *your code* will need"
  },
  {
    "path": "coin_change/solutions/CoinChangeSolution.java",
    "chars": 1699,
    "preview": "package solutions;\r\n\r\nimport java.io.BufferedReader;\r\nimport java.io.InputStreamReader;\r\n\r\npublic class CoinChangeSoluti"
  },
  {
    "path": "coin_change/solutions/CoinChangeSolution.scala",
    "chars": 494,
    "preview": "\nobject CoinChangeSolution {\n\n  def main(args: Array[String]) = {\n\n    val input = io.Source.stdin.bufferedReader\n    va"
  },
  {
    "path": "coin_change/solutions/CoinChangeSolutionTest.java",
    "chars": 1324,
    "preview": "package solutions;\r\n\r\nimport static org.junit.Assert.*;\r\n\r\nimport org.junit.Test;\r\n\r\npublic class CoinChangeSolutionTest"
  },
  {
    "path": "coin_change/solutions/coin_change_solution.js",
    "chars": 2699,
    "preview": "#!/usr/bin/env node\n\n// Solve the \"Coin Change\" problem using a bottom-up dynamic programming\n// approach. The time comp"
  },
  {
    "path": "coin_change/solutions/coin_change_solution.py",
    "chars": 901,
    "preview": "import cPickle as pickle\nimport sys\n\n\ndef memoize(func):\n    cache = {}\n\n    def wrapper(*args, **kwargs):\n        key ="
  },
  {
    "path": "factorial/README.md",
    "chars": 2563,
    "preview": "**n factorial** (written as **n!**) is the number we get when we multiply every positive number from 1 up to n together."
  },
  {
    "path": "factorial/solutions/FactorialSolution.java",
    "chars": 811,
    "preview": "package solutions\n\nimport java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.math.BigInteger;\n\n\npubli"
  },
  {
    "path": "factorial/solutions/FactorialSolution.scala",
    "chars": 344,
    "preview": "package solutions\n\nobject FactorialSolution {\n\n  def main(args: Array[String]) = {\n    val input = io.Source.stdin.buffe"
  },
  {
    "path": "fibonacci_dynamic/HINTS.md",
    "chars": 661,
    "preview": "## General Approach\n\n1. Find the base case(s),\n2. Have your function recognize the base case(s) and provide a solution,\n"
  },
  {
    "path": "fibonacci_dynamic/README.md",
    "chars": 1150,
    "preview": "This question expands on our earlier Fibonacci Lite challenge. While the goal\nof Fibonacci Lite was to understand recurs"
  },
  {
    "path": "fibonacci_dynamic/SOLUTION.md",
    "chars": 2196,
    "preview": "# Fibonacci Sequence with Dynamic Programming\n## A.K.A. \"Fibonacci Returns\"\n\nThere are two major differences between thi"
  },
  {
    "path": "fibonacci_dynamic/SOLUTION.md.bak",
    "chars": 2195,
    "preview": "# Fibonacci Sequence with Dynamic Programming\n## A.K.A. \"Fibonaccai Returns\"\n\nThere are two major differences between th"
  },
  {
    "path": "fibonacci_dynamic/generator/generate_cases.rb",
    "chars": 1077,
    "preview": "@memos = Hash.new\ndef fib(n)\n\tif @memos[n]\n\t\treturn @memos[n]\n\telse\n\t\ti = 0\n\t\tk = 0\n\t\tlast_1 = 1\n\t\tlast_2 = 0\n\t\twhile i "
  },
  {
    "path": "fibonacci_dynamic/solutions/fibonacci_dynamic.rb",
    "chars": 656,
    "preview": "# Initialize an empty hash to memoize values into\n@memos = { 0 => 0, 1 => 1 }\n\ndef fib(n)\n    # Check if we already have"
  },
  {
    "path": "fibonacci_dynamic/tests/input00.txt",
    "chars": 20,
    "preview": "1\n2\n3\n4\n5\n6\n7\n8\n9\n10"
  },
  {
    "path": "fibonacci_dynamic/tests/input01.txt",
    "chars": 4,
    "preview": "40\n2"
  },
  {
    "path": "fibonacci_dynamic/tests/input02.txt",
    "chars": 2898,
    "preview": "91\n67\n5\n57\n7\n5\n80\n98\n99\n68\n27\n33\n61\n82\n18\n1\n38\n44\n75\n62\n5\n90\n46\n17\n48\n36\n61\n64\n38\n84\n11\n14\n89\n36\n16\n47\n73\n61\n55\n84\n40\n59"
  },
  {
    "path": "fibonacci_dynamic/tests/input03.txt",
    "chars": 5814,
    "preview": "74\n75\n26\n47\n82\n11\n12\n87\n75\n80\n51\n59\n89\n11\n96\n44\n60\n60\n61\n13\n58\n6\n85\n95\n11\n26\n82\n25\n89\n91\n19\n99\n2\n17\n49\n19\n76\n91\n61\n53\n68"
  },
  {
    "path": "fibonacci_dynamic/tests/input04.txt",
    "chars": 8727,
    "preview": "71\n43\n53\n13\n19\n39\n34\n16\n5\n21\n62\n89\n73\n59\n16\n49\n38\n72\n49\n19\n57\n84\n45\n81\n76\n61\n64\n4\n53\n11\n18\n98\n90\n64\n47\n18\n62\n28\n65\n25\n29"
  },
  {
    "path": "fibonacci_dynamic/tests/input05.txt",
    "chars": 11657,
    "preview": "14\n55\n43\n58\n91\n4\n73\n65\n94\n87\n21\n73\n61\n35\n55\n22\n2\n40\n92\n15\n19\n81\n93\n70\n8\n63\n59\n13\n86\n3\n89\n40\n66\n59\n17\n54\n13\n37\n53\n20\n6\n13"
  },
  {
    "path": "fibonacci_dynamic/tests/input06.txt",
    "chars": 14532,
    "preview": "87\n50\n46\n43\n20\n30\n16\n12\n14\n69\n86\n8\n60\n77\n64\n66\n7\n96\n61\n34\n79\n47\n86\n79\n54\n69\n86\n72\n75\n1\n10\n64\n40\n66\n39\n82\n44\n99\n14\n13\n9\n4"
  },
  {
    "path": "fibonacci_dynamic/tests/output00.txt",
    "chars": 24,
    "preview": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n"
  },
  {
    "path": "fibonacci_dynamic/tests/output01.txt",
    "chars": 12,
    "preview": "102334155\n1\n"
  },
  {
    "path": "fibonacci_dynamic/tests/output02.txt",
    "chars": 11342,
    "preview": "4660046610375530309\n44945570212853\n5\n365435296162\n13\n5\n23416728348467685\n135301852344706746049\n218922995834555169026\n727"
  },
  {
    "path": "fibonacci_dynamic/tests/output03.txt",
    "chars": 22809,
    "preview": "1304969544928657\n2111485077978050\n121393\n2971215073\n61305790721611591\n89\n144\n679891637638612258\n2111485077978050\n2341672"
  },
  {
    "path": "fibonacci_dynamic/tests/output04.txt",
    "chars": 34989,
    "preview": "308061521170129\n433494437\n53316291173\n233\n4181\n63245986\n5702887\n987\n5\n10946\n4052739537881\n1779979416004714189\n8065155330"
  },
  {
    "path": "fibonacci_dynamic/tests/output05.txt",
    "chars": 46508,
    "preview": "377\n139583862445\n433494437\n591286729879\n4660046610375530309\n3\n806515533049393\n17167680177565\n19740274219868223167\n679891"
  },
  {
    "path": "fibonacci_dynamic/tests/output06.txt",
    "chars": 58548,
    "preview": "679891637638612258\n12586269025\n1836311903\n433494437\n6765\n832040\n987\n144\n377\n117669030460994\n420196140727489673\n21\n154800"
  },
  {
    "path": "fibonacci_lite/HINTS.md",
    "chars": 454,
    "preview": "## General Approach\n\n1. Find the base case(s),\n2. Have your function recognize the base case(s) and provide a solution,\n"
  },
  {
    "path": "fibonacci_lite/README.md",
    "chars": 651,
    "preview": "For this question, you will write a program that generates values from the\nFibonacci sequence. The Fibonnaci sequence is"
  },
  {
    "path": "fibonacci_lite/SOLUTION.md",
    "chars": 1626,
    "preview": "# Fibonacci Lite\n\n## Explanation\n\nThe example solution for this challenge deliberately uses a naive recursive\nsolution, "
  },
  {
    "path": "fibonacci_lite/generator/gen_testcase.rb",
    "chars": 773,
    "preview": "# Naive implementation. We'll choose correctness over speed here.\ndef fib(n)\n\tcase n\n\twhen 0\n\t\t0\n\twhen 1\n\t\t1\n\telse\n\t\tfib"
  },
  {
    "path": "fibonacci_lite/solutions/fibonacci.rb",
    "chars": 213,
    "preview": "# Enter your code here. Read input from STDIN. Print output to STDOUT\ndef fib(n)\n    case n\n    when 0\n        0\n    whe"
  },
  {
    "path": "fibonacci_lite/tests/input00.txt",
    "chars": 2,
    "preview": "47"
  },
  {
    "path": "fibonacci_lite/tests/input01.txt",
    "chars": 1,
    "preview": "7"
  },
  {
    "path": "fibonacci_lite/tests/input02.txt",
    "chars": 2,
    "preview": "13"
  },
  {
    "path": "fibonacci_lite/tests/input03.txt",
    "chars": 2,
    "preview": "19"
  },
  {
    "path": "fibonacci_lite/tests/input04.txt",
    "chars": 2,
    "preview": "23"
  },
  {
    "path": "fibonacci_lite/tests/input05.txt",
    "chars": 2,
    "preview": "29"
  },
  {
    "path": "fibonacci_lite/tests/input06.txt",
    "chars": 2,
    "preview": "31"
  },
  {
    "path": "fibonacci_lite/tests/input07.txt",
    "chars": 2,
    "preview": "37"
  },
  {
    "path": "fibonacci_lite/tests/input08.txt",
    "chars": 2,
    "preview": "41"
  },
  {
    "path": "fibonacci_lite/tests/input09.txt",
    "chars": 2,
    "preview": "47"
  },
  {
    "path": "fibonacci_lite/tests/output00.txt",
    "chars": 1,
    "preview": "1"
  },
  {
    "path": "fibonacci_lite/tests/output01.txt",
    "chars": 2,
    "preview": "13"
  },
  {
    "path": "fibonacci_lite/tests/output02.txt",
    "chars": 3,
    "preview": "233"
  },
  {
    "path": "fibonacci_lite/tests/output03.txt",
    "chars": 4,
    "preview": "4181"
  },
  {
    "path": "fibonacci_lite/tests/output04.txt",
    "chars": 5,
    "preview": "28657"
  },
  {
    "path": "fibonacci_lite/tests/output05.txt",
    "chars": 6,
    "preview": "514229"
  },
  {
    "path": "fibonacci_lite/tests/output06.txt",
    "chars": 7,
    "preview": "1346269"
  },
  {
    "path": "fibonacci_lite/tests/output07.txt",
    "chars": 8,
    "preview": "24157817"
  },
  {
    "path": "fibonacci_lite/tests/output08.txt",
    "chars": 9,
    "preview": "165580141"
  },
  {
    "path": "fibonacci_lite/tests/output09.txt",
    "chars": 10,
    "preview": "2971215073"
  },
  {
    "path": "find_uncoupled_int/README.md",
    "chars": 662,
    "preview": "Find the only uncoupled integer in an array.\n\n# Problem Statement\n\nWrite a program that, given a list of integers as an "
  },
  {
    "path": "find_uncoupled_int/solutions/FindUncoupledIntSolution.java",
    "chars": 1379,
    "preview": "package solutions;\n\nimport java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.util.HashSet;\nimport ja"
  },
  {
    "path": "find_uncoupled_int/solutions/Solution.java",
    "chars": 773,
    "preview": "class Solution {\n  public static int findUncoupled(int[] integers) {\n    int allXored = 0;\n    for (int i : integers) {\n"
  },
  {
    "path": "linked_list_cycle/README.md",
    "chars": 338,
    "preview": "Write a function which, given a linked list, returns whether that linked list contains a cycle.\n\nE.g., given the followi"
  },
  {
    "path": "linked_list_cycle/solutions/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "linked_list_cycle/solutions/LinkedListCycle.java",
    "chars": 1184,
    "preview": "import java.io.*;\nimport java.util.*;\n\nclass Node<T> {\n  public Node<T> next;\n  public T data;\n\n  public boolean contain"
  },
  {
    "path": "linked_list_reverse/README.md",
    "chars": 207,
    "preview": "Write a function which, given a linked list, returns that same linked list reversed.\n\n## Examples\n\nGiven: `A -> B -> C -"
  },
  {
    "path": "linked_list_reverse/solutions/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "minimum_stack/README.md",
    "chars": 221,
    "preview": "Implement a stack which keeps track of its minimum value.\n\nChallenge: can you keep the operation time complexity to `O(1"
  },
  {
    "path": "minimum_stack/solutions/solution.js",
    "chars": 823,
    "preview": "function Stack() {\n  this.valueStack = [];\n  this.minimumStack = [];\n}\n\nStack.prototype.getMinimum = function () {\n  ret"
  },
  {
    "path": "queue_two_stacks/README.md",
    "chars": 146,
    "preview": "Write a queue using two stacks.\n\nChallenge: can you write it in a way that causes, average-case, `O(1)` stack operations"
  },
  {
    "path": "queue_two_stacks/solutions/solution.js",
    "chars": 1457,
    "preview": "function Staqueue() {\n  this.stackIn = [];\n  this.stackOut = [];\n}\n\nStaqueue.prototype.fastEnqueue = function (item) {\n "
  },
  {
    "path": "ransom/Ransom.java",
    "chars": 861,
    "preview": "import java.util.HashMap;\nimport java.util.Map;\n\npublic class Ransom {\n    public static boolean canRansom(String magazi"
  },
  {
    "path": "ransom/RansomTest.java",
    "chars": 654,
    "preview": "import org.testng.Assert;\nimport org.testng.annotations.Test;\n\npublic class RansomTest {\n\n    @Test\n    public void test"
  },
  {
    "path": "target_sum/README.md",
    "chars": 237,
    "preview": "Given an array of integers and a target integer `sum`, return whether there exist a pair of integers in the array which "
  },
  {
    "path": "target_sum/solutions/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "target_sum/solutions/solution.js",
    "chars": 467,
    "preview": "function canMakeSum(array, targetSum) {\n  array.sort();\n\n  var left = 0;\n  var right = array.length - 1;\n\n  while (left "
  },
  {
    "path": "tree_zig_zag/.gitignore",
    "chars": 4,
    "preview": "_doc"
  },
  {
    "path": "tree_zig_zag/HINTS.md",
    "chars": 241,
    "preview": "# Tree Zig Zag\n\n## Hints\n\n-   How do you traverse a tree such that you visit all of a vertex's\n    neighbors before visi"
  },
  {
    "path": "tree_zig_zag/README.md",
    "chars": 2455,
    "preview": "# Tree Zig Zag\n\nGiven a tree with distinct elements, starting at the root, alternate\nbetween printing the left-most and "
  },
  {
    "path": "tree_zig_zag/SOLUTION.md",
    "chars": 2287,
    "preview": "# Tree Zig Zag\n\n## Human-readable solution\n\nFirst you must read in the lines from standard input line-by-line and\nconstr"
  },
  {
    "path": "tree_zig_zag/generator/generate_tree.py",
    "chars": 2512,
    "preview": "#!/usr/bin/env python\n\n\"\"\"Create a random binary search tree (BST) with distinct elements.\n\nThe resulting BST is not nec"
  },
  {
    "path": "tree_zig_zag/solutions/TreeZigZag.java",
    "chars": 4006,
    "preview": "import java.io.InputStream;\nimport java.util.ArrayDeque;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport jav"
  },
  {
    "path": "tree_zig_zag/solutions/tree_zig_zag.py",
    "chars": 2044,
    "preview": "#!/usr/bin/env python\n\nimport collections\nimport sys\n\n\nclass Node(object):\n    __slots__ = ('value', 'left', 'right')\n\n "
  },
  {
    "path": "tree_zig_zag/solutions/tree_zig_zag.rb",
    "chars": 651,
    "preview": "# Parse tree into lame adjacency hash thing\n@tree = Hash.new\n@root = 0\nARGF.each_line {|line|\n\tvalues = line.split(/\\s+/"
  },
  {
    "path": "tree_zig_zag/tests/input1.txt",
    "chars": 50,
    "preview": "100 50 150\n50 40 60\n60 -1 80\n150 -1 170\n170 -1 190"
  },
  {
    "path": "tree_zig_zag/tests/input2.txt",
    "chars": 29,
    "preview": "200 100 -1\n100 50 -1\n50 60 75"
  },
  {
    "path": "tree_zig_zag/tests/input3.txt",
    "chars": 234125,
    "preview": "1373158593 306503744 1482080420\n306503744 -1 1258151406\n1258151406 334860199 1362214919\n334860199 309342042 359360627\n30"
  },
  {
    "path": "tree_zig_zag/tests/output1.txt",
    "chars": 14,
    "preview": "100\n150\n40\n190"
  },
  {
    "path": "tree_zig_zag/tests/output2.txt",
    "chars": 13,
    "preview": "200\n100\n50\n75"
  },
  {
    "path": "tree_zig_zag/tests/output3.txt",
    "chars": 263,
    "preview": "1373158593\n1482080420\n1258151406\n2132506379\n309342042\n2136322283\n307037840\n2137781232\n307855305\n2137795571\n307181796\n213"
  }
]

About this extraction

This page contains the full source code of the codingforinterviews/practice-problems GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 127 files (545.8 KB), approximately 250.3k tokens, and a symbol index with 113 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!